[
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  # Enable checks for the default vendor folder\n  - package-ecosystem: \"composer\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n\n  # Enable checks for Google API Client package\n  - package-ecosystem: \"composer\"\n    directory: \"/lib/Google\"\n    schedule:\n      interval: \"weekly\"\n\n  # Enable checks for GitHub Actions\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/workflows/publish-release.yml",
    "content": "name: Publish Release\nrun-name: Publish Release\n\non:\n  workflow_dispatch:\n    inputs:\n      tag:\n        description: 'Release tag (e.g. 1.2.3a)'\n        required: true\n      version:\n        description: 'Release version (e.g. 1.2.3), default: latest'\n        required: false\n      prerelease:\n        description: 'Pre-release version (e.g. RC1, beta, etc...)'\n        required: false\n\npermissions:\n  contents: write\n\njobs:\n  release:\n    uses: udx/reusable-workflows/.github/workflows/wp-gh-release-ops.yml@master\n    with:\n      tag: ${{ github.event.inputs.tag }}\n      version: ${{ github.event.inputs.version }}\n      prerelease: ${{ github.event.inputs.prerelease }}\n"
  },
  {
    "path": ".github/workflows/security-scan.yml",
    "content": "name: Security Scan\nrun-name: Security Scan\n\non: \n  push:\n  pull_request:\n  workflow_dispatch:\n\njobs:\n  code-scanning:\n    name: Code Scanning (grype)\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n\n      - name: Run Security Check\n        id: test\n        uses: anchore/scan-action@v6\n        with:\n          path: .\n          output-format: table\n\n\n"
  },
  {
    "path": ".gitignore",
    "content": "temp\n.vscode**\nnode_modules\nstatic/cache\nstatic/codex\nnpm-debug.log\nwp-test-config.php\n/test\npackage-lock.json\n\n.git\n.svn\n.idea\n.idea/workspace.xml\n.DS_Store\n.dynamic\n.Trashes\n*.sublime-project\n*.sublime-workspace\n\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\nwp-stateless.wiki\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Usability Dynamics\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy Overview\n\nThank you for using and contributing to our product. At [UDX](https://udx.io), we take the security of our products seriously and appreciate collaborative efforts to ensure the safety of our users and contributors.\n\n## Reporting a Security Vulnerability\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nIf you find a security vulnerability, please [submit a vulnerability report](https://github.com/udx/wp-stateless/security/advisories/new). Provide detailed information about the vulnerability to help us understand and address the issue promptly. We kindly request that you avoid public disclosure until we've had the opportunity to analyze and resolve the reported issue.\n\n## Responsible Disclosure\n\nResponsible disclosure is crucial to maintaining the security of our product. We ask for your cooperation in allowing us sufficient time to investigate and address the reported vulnerability before making it public. We will keep you informed of our progress and make every effort to address the issue promptly.\n\n## Supported Versions\n\nSecurity updates are provided for the latest stable release. Please ensure that you are using a supported version before reporting a security vulnerability.\n\n## Contact Information\n\nFor security-related matters, please contact our security team at [security@udx.io](mailto:security@udx.io). For general inquiries, feature requests, and other non-security-related discussions, please use our regular [issue tracker](https://github.com/udx/wp-stateless/issues).\n\nThank you for helping us ensure the security of WP-Stateless. Your contributions are greatly appreciated.\n"
  },
  {
    "path": "changelog.txt",
    "content": "== Changelog ==\n= 4.4.1 - 2026-01-16 =\n* COMPATIBILITY - WooCommerce Extra Product Options Compatibility replaced with [WP-Stateless – WooCommerce Extra Product Options Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-extra-product-options-addon/).\n* FIX - resolve critical errors with `firebase/php-jwt` library if `AUTH_SALT` WordPress constant is not set or too short.\n\n= 4.4.0 - 2026-01-10 =\n* NEW - plugin requires PHP 8.1+.\n* ENHANCEMENT - updated `firebase/php-jwt` library from  6.11.1 to 7.0.2.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.18.3 to 2.19.0.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.15 to 5.10.19.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.18 to 1.2.0.\n* FIX - `udx/lib-wp-bootstrap` package correctly loads text domain to prevent PHP notices.\n\n= 4.3.0 =\n* ENHANCEMENT - update dependencies for Google APIs Client Library.\n* COMPATIBILITY - Simple Local Avatars Compatibility replaced with [WP-Stateless - Simple Local Avatars Addon](https://wordpress.org/plugins/wp-stateless-simple-local-avatars-addon/).\n\n= 4.2.1 =\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.11 to 5.10.15.\n* FIX - correctly loads text domain to prevent PHP notices.\n* FIX - `udx/lib-ud-api-client` package correctly loads text domain to prevent PHP notices.\n\n= 4.2.0 =\n* ENHANCEMENT - Updated Client library for Google APIs from 2.18.2 to 2.18.3.\n* ENHANCEMENT - updated `firebase/php-jwt` library from  6.10.2 to 6.11.1.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.1 to 5.10.11.\n* DEPRECATED - Setup Assistant removed.\n\n= 4.1.3 =\n* COMPATIBILITY - PolyLang Compatibility replaced with [WP-Stateless – Polylang Pro Addon](https://wordpress.org/plugins/wp-stateless-polylang-pro-addon/).\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.10.1 to 5.10.7.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.18 to 1.2.0.\n* ENHANCEMENT - updated `firebase/php-jwt` library from from 6.10.1 to 6.10.2.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.17.0 to 2.18.2.\n* FIX - apply `Cache Control` setting to all files (previously applied only to images).\n\n= 4.1.2 =\n* ENHANCEMENT - added `REST API Endpoint` setting, which useful when WordPress dashboard and frontend website utilize different domain names.\n* ENHANCEMENT - extended `Status Info` with the information to help diagnose REST API or AJAX issues.\n* COMPATIBILITY - SiteOrigin Widgets Bundle Compatibility replaced with [WP-Stateless - SiteOrigin Widgets Bundle Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-widgets-bundle-addon/).\n* COMPATIBILITY - WPForms Compatibility replaced with [WP-Stateless - WPForms Addon](https://wordpress.org/plugins/wp-stateless-wpforms-addon/).\n* COMPATIBILITY - Easy Digital Downloads Compatibility replaced with [WP-Stateless - Easy Digital Downloads Addon](https://wordpress.org/plugins/wp-stateless-easy-digital-downloads-addon/).\n* COMPATIBILITY - LiteSpeed Cache Compatibility replaced with [WP-Stateless - LiteSpeed Cache Addon](https://wordpress.org/plugins/wp-stateless-litespeed-cache-addon/).\n* COMPATIBILITY - BuddyPress Compatibility replaced with [WP-Stateless - BuddyPress Addon](https://wordpress.org/plugin/wp-stateless-buddypress-addon/).\n* FIX: remove PHP warning on `Status` settings tab.\n* FIX: database updates to resolve conflicts with Polylang Pro compatibility.\n\n= 4.1.1 =\n* FIX - cache issues during Data Optimization.\n\n= 4.1.0 =\n* NEW - move compatibilities files from `wp_sm_sync` to `wp_stateless_files` table with extended information.\n* COMPATIBILITY - WooCommerce Compatibility replaced with [WP-Stateless – WooCommerce Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-addon/).\n* COMPATIBILITY - Gravity Forms Compatibility replaced with [WP-Stateless – Gravity Forms Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-addon/).\n* COMPATIBILITY - Gravity Forms Signature Compatibility replaced with [WP-Stateless – Gravity Forms Signature Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-signature-addon/).\n* COMPATIBILITY - Divi Theme Compatibility replaced with [WP-Stateless – Divi Theme Addon](https://wordpress.org/plugins/wp-stateless-divi-theme-addon/).\n* COMPATIBILITY - SiteOrigin CSS Compatibility replaced with [WP-Stateless – SiteOrigin CSS Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-css-addon/).\n* ENHANCEMENT - CLI command `wp stateless migrate` supports `auto` parameter to run all required Data Optimizations automatically.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.15.1 to 2.17.0.\n* ENHANCEMENT - updated `firebase/php-jwt` library from from 6.9.0 to 6.10.1.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.8.2 to 5.10.1.\n* ENHANCEMENT - updated `deliciousbrains/wp-background-processing` library from from 1.1.1 to 1.3.1.\n* ENHANCEMENT - updated `composer/installers` library from from 1.12.1 to 2.3.0.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.17 to 1.1.18.\n* ENHANCEMENT - action `sm:sync::addFile` format changed, now it passes media object instead of file name.\n* ENHANCEMENT - for installed Addons replace Download action with Activate.\n* ENHANCEMENT - count compatibility files from the DB instead of listing actual files to increase performance.\n* FIX - CLI command `wp stateless migrate` supports `--yes` parameter to skip confirmation.\n* FIX - CLI command `wp stateless migrate` correctly works with `--progress` parameter in multisite.\n* FIX - fixed synchronization for Compatibility files in Stateless Mode.\n* FIX - CLI command `wp stateless upgrade` fixed when running with `--b` switch.\n* FIX - fixed SiteOrigin Widgets Bundle Compatibility in `Stateless` mode.\n* FIX - fixed WPForms Compatibility in `Stateless` mode.\n* FIX - limit index size for compatibility with different DB engines [757](https://github.com/udx/wp-stateless/issues/757).\n* FIX - correctly disable `Cache-Busting` setting for Ephemeral Mode [758](https://github.com/udx/wp-stateless/issues/758), credits [@Jessedev1](https://github.com/Jessedev1).\n* FIX - Data Optimization UI adjustments.\n\n= 4.0.4 =\n* ENHANCEMENT - display success message after copying Status Info.\n* FIX - `Settings` page does not open or slow when there is big amount of attachments.\n* FIX - in multisite network, removing custom tables properly when deleting site.\n* FIX - skip setting ACL in Stateless mode and during Sync for the buckets with Uniform access, support WP_STATELESS_SKIP_ACL_SET constant [#712](https://github.com/udx/wp-stateless/issues/712).\n\n= 4.0.3 =\n* NEW - added `Info` section to the `Status` tab on the Settings page, which contains the system info and the ability to copy report to clipboard.  \n* ENHANCEMENT - added `Documentation` link on the Plugins page.\n* ENHANCEMENT - added `Addons` link on the Plugins page.\n* ENHANCEMENT - added `Documentation` link on the Settings page.\n* FIX - fixed `Settings` shortcut on the Plugins page.\n* FIX - in multisite network, do not show Data Optimization on the Network Admin Page.\n* FIX - properly set `Content Disposition` fields for media objects.\n* FIX - properly use `Cache Control` setting for media objects.\n* FIX - fixed `Creation of dynamic property` PHP deprecation notice.\n* FIX - fixed `Cannot use ::class with dynamic class name` PHP warning.\n* FIX - avoid PHP warning when unable to get file path in `Stateless` mode [728](https://github.com/udx/wp-stateless/issues/728).\n* FIX - fixed links to the constants documentation.\n\n= 4.0.2 =\n* FIX - in multisite network, deleting site can potentially remove WP-Stateless tables from another site.\n* COMPATIBILITY - Gravity Forms Compatibility updated for the newest Gravity Forms version.\n\n= 4.0.1 =\n* FIX - improvements to Data Optimization process.\n* FIX - Data Optimization fixed for multisite environment.\n\n= 4.0.0 =\n* NEW - use custom database tables to store GCS file data. This increases plugin performance and will be used for future improvements.  \n* NEW - added filter `wp_stateless_get_file`, retrieves the GCS file data, should be used instead of getting `sm_cloud` postmeta directly. \n* NEW - added filter `wp_stateless_get_file_sizes`, retrieves the GCS file data for image sizes, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_file_meta`, retrieves all GCS file meta data, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_file_meta_value`, retrieves the GCS file meta data by meta_key, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_setting_...` which allows to override any WP-Stateless setting. \n* NEW - added setting \"Send Status Emails\" allowing to change email for WP-Stateless notifications.\n* NEW - added setting \"Use Post Meta\" allowing to switch back to using `postmeta` instead of custom DB tables. Can be used in case of issues after upgrading to 4.0.0.\n* NEW - added new Settings tab `Addons`, which contains the list of WP-Stateless Addons, which replace Compatibilities.\n* NEW - added new Settings tab `Status`, which contains status and health information related to Google Cloud Storage and WP-Stateless.\n* NEW - CLI command `wp stateless migrate` to list and operate data optimizations.\n* NEW - configuration constant [`WP_STATELESS_POSTMETA`](https://stateless.udx.io/docs/constants/#wp_stateless_postmeta) allows to read the GCS file data from postmeta instead of the new custom database tables.\n* NEW - configuration constant [`WP_STATELESS_BATCH_HEALTHCHECK_INTERVAL`](https://stateless.udx.io/docs/constants/#wp_stateless_batch_healthcheck_interval) defines an interval in minutes for periodical health checks of a batch background process (like data optimization).\n* COMPATIBILITY - BuddyBoss Compatibility replaced with [WP-Stateless – BuddyBoss Platform Addon](https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/).\n* COMPATIBILITY - Elementor Compatibility replaced with [WP-Stateless – Elementor Website Builder Addon](https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/).\n* COMPATIBILITY - Gravity Form Compatibility does not support older version of Gravity Forms (< 2.3).\n* ENHANCEMENT - Allow dismissing notices in Admin Panel only for logged in users.\n* ENHANCEMENT - Updated `wp-background-processing` library from from 1.0.2 to 1.1.1.\n* ENHANCEMENT - Updated `phpseclib` 3.0.34 to 3.0.37.\n* FIX - proper use of infinite timeout in `set_time_limit` function to avoid issues with PHP 8.1 and above [#704](https://github.com/udx/wp-stateless/issues/704).\n\n= 3.4.1 =\n* FIX - improve security while processing AJAX requests in Admin Panel\n\n= 3.4.0 =\n* ENHANCEMENT - removed `udx/lib-settings` package dependency for security reasons. \n* ENHANCEMENT - removed `udx/lib-utility` package dependency for security reasons.\n* ENHANCEMENT - refactored `Settings` admin page to remove Angular dependency.\n* ENHANCEMENT - including Software Bill of Materials (SBOM) to GitHub release.\n* FIX - updated package dependencies for Google Client Library for security reasons.\n* FIX - replaced `utf8_encode` with `mb_convert_encoding` to support PHP 8.2 and above [#678](https://github.com/udx/wp-stateless/issues/678).\n* FIX - Fatal Error in `Stateless` mode if GCP access credentials are wrong [#693](https://github.com/udx/wp-stateless/issues/693).\n* COMPATIBILITY - preventing PHP warnings while working with WooCommerce version 8.4.0 and above [696](https://github.com/udx/wp-stateless/issues/696).\n* COMPATIBILITY - avoiding conflicts between builtin compatibilities and WP-Stateless Addon plugins.\n\n= 3.3.0 =\n* NEW - Added new filter `wp_stateless_attachment_url`. Allows to customize attachment URL after WP-Stateless generates it based on it's internal conditions.\n* FIX - Stateless mode Incompatible with Media Uploader in Media Library Grid mode [#675](https://github.com/udx/wp-stateless/issues/675).\n* FIX - Prevent duplicating messages in Admin Panel.\n* COMPATIBILITY - Dynamic Image Support is now part of the core.\n* COMPATIBILITY - Google App Engine is now part of the core. Automatically enables **Stateless** mode when Google App Engine detected. Can be disabled using `WP_STATELESS_COMPATIBILITY_GAE` constant.\n* COMPATIBILITY - Removed compatibility with \"Advanced Custom Fields: Image Crop Add-on\", because plugin is deprecated.\n* COMPATIBILITY - Removed compatibility with \"VidoRev\" plugin.\n* COMPATIBILITY - Removed compatibility with \"WP Retina 2x\" plugin.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.15.0 to 2.15.1.\n* ENHANCEMENT - Updated Meta Box library from 5.6.3 to 5.8.2.\n* ENHANCEMENT - Updated Meta Box Tabs to version 1.1.17.\n* ENHANCEMENT - Updated PHP JWT library from 6.6.0 to 6.9.0.\n\n= 3.2.5 =\n* FIX - Folder setting does not allow custom structure [#608](https://github.com/udx/wp-stateless/issues/608).\n* FIX - Stateless mode Incompatible with Inline Uploader [#675](https://github.com/udx/wp-stateless/issues/675).\n* FIX - html tags incorrectly applied in notice [#680](https://github.com/udx/wp-stateless/issues/680).\n* ENHANCEMENT - Add WP_STATELESS_SKIP_ACL_SET for skip ACL set for GCS [#625](https://github.com/udx/wp-stateless/issues/625).\n* COMPATIBILITY - Add support for The Events Calendar [#599](https://github.com/udx/wp-stateless/issues/599).\n\n= 3.2.4 =\n* FIX - Website unresponsive after Upgrade [#669](https://github.com/udx/wp-stateless/issues/669).\n\n= 3.2.3 =\n* ENHANCEMENT - Updated Client library for Google APIs.\n* ENHANCEMENT - Updated Monolog library to version 3.\n* ENHANCEMENT - Updated JWT library.\n* FIX - Fixed vulnerability issues.\n* FIX - Fixed an errors and warnings on PHP 8.1.\n* FIX - Fixed an error that occured when WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE is set.\n\n= 3.2.2 =\n* FIX -  Folder setting can't be saved from the settings page [#639](https://github.com/udx/wp-stateless/issues/639).\n\n= 3.2.1 =\n* FIX - Updated requirments.\n* FIX - WP-Stateless 3.2.0 doesn’t upload docs, only images [#638](https://github.com/udx/wp-stateless/issues/638).\n\n= 3.2.0 =\n* ENHANCEMENT - Upgraded `wpmetabox` library.\n* ENHANCEMENT - Updated Client library for Google APIs.\n* ENHANCEMENT - Updated Guzzle library to version 7.\n* ENHANCEMENT - Updated JWT library.\n* ENHANCEMENT - Updated `license` functionality, removed `update checker`.\n* FIX - Fixed vulnerability issues.\n* FIX - Fixed erros and warnings on PHP 8.\n* FIX - problem after the upgrade [#628](https://github.com/udx/wp-stateless/issues/628).\n* FIX - image_downsize() PHP8 Required parameter $id follows optional parameter $false [#619](https://github.com/udx/wp-stateless/issues/619).\n\n= 3.1.1 =\n* ENHANCEMENT - Notification for the administrator about finished synchronization. GitHub issue [#576](https://github.com/udx/wp-stateless/issues/576).\n* FIX - Fixed an issue with PDF thumbnails. GitHub issue [#577](https://github.com/udx/wp-stateless/issues/577).\n* FIX - Fixed an issue with synchronization in `Stateless` mode. GitHub issue [#575](https://github.com/udx/wp-stateless/issues/575).\n* COMPATIBILITY - Changed the way compatibility files are stored on Multisite. GitHub issue [#588](https://github.com/udx/wp-stateless/issues/588).\n\n= 3.1.0 =\n* NEW - Completely rewritten the synchronization tool. GitHub issue [#523](https://github.com/udx/wp-stateless/issues/523).\n* NEW - New configuration constant `WP_STATELESS_SYNC_MAX_BATCH_SIZE`. Sets the maximum size of a background sync batch of items to be saved in a single row in the database. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_max_batch_size).\n* NEW - New configuration constant `WP_STATELESS_SYNC_LOG`. Sets a path to a log file where to output logging information during the background sync. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_log).\n* NEW - New configuration constant `WP_STATELESS_SYNC_HEALTHCHECK_INTERVAL`. Defines an interval in minutes for a cron task that periodically checks the health of a particular background sync process. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_healthcheck_interval).\n* FIX - Fixed an issue when original files were not deleted from the server in the Ephemeral mode. GitHub issue [#484](https://github.com/udx/wp-stateless/issues/484).\n* FIX - Fixed an incorrect behavior of image `srcset` attribute in the Backup mode. GitHub issue [#558](https://github.com/udx/wp-stateless/issues/558).\n* COMPATIBILITY - Litespeed Cache - Fixed an incorrect upload folder determination. GitHub issue [#527](https://github.com/udx/wp-stateless/issues/527).\n\n= 3.0.4 =\n* FIX - Fixed inability to use dashes in the upload folder name. GitHub issue [#565](https://github.com/udx/wp-stateless/issues/565).\n* COMPATIBILITY - Elementor - Fixed wrong upload directory. GitHub issue [#560](https://github.com/udx/wp-stateless/issues/560).\n\n= 3.0.3 =\n* FIX - Fixed an incorrect file URL in Stateless mode on Edit Media screen. GitHub issue [#544](https://github.com/udx/wp-stateless/issues/544).\n\n= 3.0.2 =\n* FIX - Refactored the way files are being uploaded to GCS when `WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE` constant is defined. GitHub issue [#553](https://github.com/udx/wp-stateless/issues/553).\n* FIX - Fixed the process of upgrading to 3.0 for multisite installations. GitHub issue [#549](https://github.com/udx/wp-stateless/issues/549).\n\n= 3.0.1 =\n* FIX - Fatal Error in Stateless mode. GitHub issue [#546](https://github.com/udx/wp-stateless/issues/546).\n\n= 3.0 =\n* NEW - Setup assistant rewrite. GitHub issue [#477](https://github.com/udx/wp-stateless/issues/477).\n* NEW - Recreate attachment metabox panel using metabox.io. GitHub issue [#470](https://github.com/udx/wp-stateless/issues/470).\n* NEW - Updated the `Stateless` mode to not use local storage at all. Current `Stateless` mode setting mapped to new `Ephemeral` mode. GitHub issue [#482](https://github.com/udx/wp-stateless/issues/482).\n* NEW - Files are now uploaded to GCS in chunks and chunk size will be determined based on free memory available. GitHub issue [#478](https://github.com/udx/wp-stateless/issues/478).\n* NEW - File upload chunk size can be controlled with `WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE` constant.  GitHub issue [#478](https://github.com/udx/wp-stateless/issues/478).\n* FIX - Changed the default value for the Cache-Busting setting. GitHub issue [#361](https://github.com/udx/wp-stateless/issues/361).\n* FIX - Fixed network override of Cache-Busting. GitHub issue [#468](https://github.com/udx/wp-stateless/issues/468).\n* FIX - Fixed \"Passing glue string after array is deprecated.\". GitHub issue [#444](https://github.com/udx/wp-stateless/issues/444).\n* FIX - Fixed Compatibility default value in multisite. GitHub issue [#464](https://github.com/udx/wp-stateless/issues/464).\n* FIX - Fixed multisite wrong GCS path. GitHub issue [#407](https://github.com/udx/wp-stateless/issues/407).\n* FIX - Don't check for Google Cloud Storage connectivity in stateless mode unless uploading. GitHub issue [#442](https://github.com/udx/wp-stateless/issues/442).\n* COMPATIBILITY - Google App Engine - Added new compatibility support for Google App Engine. [#486](https://github.com/udx/wp-stateless/issues/486)\n* COMPATIBILITY - Elementor - Fixed wrong MIME type for CSS files. GitHub issue [#395](https://github.com/udx/wp-stateless/issues/395).\n* COMPATIBILITY - Polylang - Fixed missing metadata issue. GitHub issue [#378](https://github.com/udx/wp-stateless/issues/378).\n* COMPATIBILITY - EWWW - Fixed mime type for WEBP images. GitHub issue [#371](https://github.com/udx/wp-stateless/issues/371).\n* COMPATIBILITY - Simple Local Avatars - Added new compatibility support for Simple Local Avatars. GitHub issue [#297](https://github.com/udx/wp-stateless/issues/297).\n* COMPATIBILITY - BuddyPress - Fixed BuddyPress compatibility. GitHub issue [#275](https://github.com/udx/wp-stateless/issues/275).\n* COMPATIBILITY - Divi - Fixed Divi cache issue. GitHub issue [#430](https://github.com/udx/wp-stateless/issues/430).\n* COMPATIBILITY - Gravity Forms - add compatibility for Gravity Forms Signature Add-On. [#501](https://github.com/udx/wp-stateless/issues/501).\n* COMPATIBILITY - Litespeed - Fixed fatal error and warnings. [#491](https://github.com/udx/wp-stateless/issues/491).\n* COMPATIBILITY - Imagify - Added support for webp. [#403](https://github.com/udx/wp-stateless/issues/403).\n* ENHANCEMENT - Update Client library for Google APIs. [#446](https://github.com/udx/wp-stateless/issues/446).\n* ENHANCEMENT - Wildcards for bucket folder settings. GitHub issue [#149](https://github.com/udx/wp-stateless/issues/149).\n* ENHANCEMENT - Better CLI integration. GitHub issue [#447](https://github.com/udx/wp-stateless/issues/447), [#450](https://github.com/udx/wp-stateless/issues/450) and [#451](https://github.com/udx/wp-stateless/issues/451).\n* ENHANCEMENT - Sync media according to new Bucket Folder settings. GitHub issue [#449](https://github.com/udx/wp-stateless/issues/449).\n* ENHANCEMENT - Moved Bucket Folder setting in the File URL section. GitHub issue [#463](https://github.com/udx/wp-stateless/issues/463).\n* ENHANCEMENT - Hide Regenerate and Sync with GCS when the mode is Disabled. GitHub issue [#440](https://github.com/udx/wp-stateless/issues/440).\n* ENHANCEMENT - New endpoint for the Google Cloud Storage JSON API. GitHub issue [#384](https://github.com/udx/wp-stateless/issues/384).\n* ENHANCEMENT - Renamed current `Stateless` mode to `Ephemeral`. GitHub issue [#481](https://github.com/udx/wp-stateless/issues/481).\n\n= 2.3.2 =\n* FIX - Fixed video file doesn't get deleted from the server in `Stateless` mode. GitHub issue [#418](https://github.com/wpCloud/wp-stateless/issues/418).\n* FIX - Fixed file size doesn't show under attachment details in `Stateless` mode. GitHub issue [#413](https://github.com/wpCloud/wp-stateless/issues/413).\n* FIX - Fixed Cache-Busting feature works even if the Mode is `Disabled`. GitHub issue [#405](https://github.com/wpCloud/wp-stateless/issues/405).\n* COMPATIBILITY - Fixed Gravity Form Post Image didn't include `Bucket Folder`. GitHub issue [#421](https://github.com/wpCloud/wp-stateless/issues/421).\n* COMPATIBILITY - Fixed Divi Builder Export. GitHub issue [#420](https://github.com/wpCloud/wp-stateless/issues/420).\n* COMPATIBILITY - Fixed BuddyBoss pages breaking after updating to 2.3.0. GitHub issue [#417](https://github.com/wpCloud/wp-stateless/issues/417).\n\n= 2.3.1 =\n* Fix - Fixed fatal error, undefined function `is_wp_version_compatible`. GitHub issue [#414](https://github.com/wpCloud/wp-stateless/issues/414).\n\n= 2.3.0 =\n* FIX - Fixed problem with WordPress 5.3. GitHub issue [#406](https://github.com/wpCloud/wp-stateless/issues/406).\n* FIX - Fixed problem with the Cache Busting feature. GitHub issue [#377](https://github.com/wpCloud/wp-stateless/issues/377).\n* COMPATIBILITY - Added compatibility support for WP Retina 2x pro. GitHub issue [#380](https://github.com/wpCloud/wp-stateless/issues/380).\n* COMPATIBILITY - Enhanced compatibility support for LiteSpeed Cache. GitHub issue [#365](https://github.com/wpCloud/wp-stateless/issues/365).\n* COMPATIBILITY - Enhanced compatibility support for ShortPixel Image Optimizer. GitHub issue [#364](https://github.com/wpCloud/wp-stateless/issues/364), [#398](https://github.com/wpCloud/wp-stateless/issues/398).\n* COMPATIBILITY - Fixed Gravity Form export. GitHub issue [#408](https://github.com/wpCloud/wp-stateless/issues/408).\n* ENHANCEMENT - Improved upon add_media function for better compatibility support. GitHub issue [#382](https://github.com/wpCloud/wp-stateless/issues/382).\n\n\n= 2.2.7 =\n* FIX - WP-Smush compatibility enhanced. GitHub Issue [#366](https://github.com/wpCloud/wp-stateless/issues/366).\n* FIX - Fixed multisite installation support. GitHub Issue [#370](https://github.com/wpCloud/wp-stateless/issues/370).\n* FIX - Fixed settings UI problems related to Cache-Busting option. GitHub Issue [#373](https://github.com/wpCloud/wp-stateless/issues/373).\n* FIX - Other minor fixes.\n\n= 2.2.6 =\n* FIX - Multisite Network Settings page fixed. GitHub Issue [#369](https://github.com/wpCloud/wp-stateless/issues/369).\n* FIX - Fixed incorrect Compatibilities behavior when Bucket Folder is set. GitHub Issue [#368](https://github.com/wpCloud/wp-stateless/issues/368).\n* FIX - Other minor fixes.\n\n= 2.2.5 =\n* NEW - Added ability to start sync process from specific Attachment ID. GitHub Issue [#360](https://github.com/wpCloud/wp-stateless/issues/360).\n* COMPATIBILITY - Added compatibility support for LiteSpeed Cache plugin. Especially to support optimized .webp images. GitHub Issue [#357](https://github.com/wpCloud/wp-stateless/issues/357).\n* FIX - Other minor fixes.\n\n= 2.2.4 =\n* NEW - Added new filter `wp_stateless_skip_add_media`. Allows skipping synchronization of the media object with GCS depending on custom condition. GitHub Issue [#344](https://github.com/wpCloud/wp-stateless/issues/344).\n* FIX - Compatibility Manager is considering Child Themes now. GitHub Issue [#351](https://github.com/wpCloud/wp-stateless/issues/351).\n* FIX - Custom domains handling has been fixed. GitHub Issue [#358](https://github.com/wpCloud/wp-stateless/issues/358).\n* ENHANCEMENT - Imagify Image Optimizer and WP Smush compatibilities improved. GitHub Issue [#359](https://github.com/wpCloud/wp-stateless/issues/359).\n\n= 2.2.3 =\n* FIX - get_post_metadata does not break multi-dimensional arrays anymore. GitHub Issue [#352](https://github.com/wpCloud/wp-stateless/issues/352).\n* FIX - PHP Warning: substr_compare() fixed. GitHub Issue [#350](https://github.com/wpCloud/wp-stateless/issues/350).\n* FIX - Filtering Domain setting before saving in order to get rid of possible empty spaces. GitHub Issue [#348](https://github.com/wpCloud/wp-stateless/issues/348).\n* FIX - Incorrect remote file path generated when disabled Organization setting. GitHub Issue [#343](https://github.com/wpCloud/wp-stateless/issues/343).\n* FIX - Hiding admin notices correctly. GitHub Pull Request [#355](https://github.com/wpCloud/wp-stateless/pull/355).\n\n= 2.2.2 =\n* FIX - Proper 'srcset' attribute handling. GitHub Issue [#342](https://github.com/wpCloud/wp-stateless/issues/342).\n* ENHANCEMENT - Minor fixes code quality.\n\n= 2.2.1 =\n* Fix - Security patch for Authenticated Remote Code Execution (RCE) vulnerability.\n\n= 2.2.0 =\n* FIX - Slow page generation when File URL Replacement is enabled. https://github.com/wpCloud/wp-stateless/issues/265\n* FIX - Fatal error when WP Smush Pro compatibility is enabled. https://github.com/wpCloud/wp-stateless/issues/325\n* FIX - Issue with Imagify. https://github.com/wpCloud/wp-stateless/issues/326\n* FIX - Return correct srcset images. https://github.com/wpCloud/wp-stateless/issues/328\n* FIX - Fatal error with GFForms. https://github.com/wpCloud/wp-stateless/issues/330\n* FIX - Typo in admin notices. https://github.com/wpCloud/wp-stateless/issues/337\n* ENHANCEMENT - Extended “File URL Replacement” options. https://github.com/wpCloud/wp-stateless/issues/336\n* ENHANCEMENT - Service Account JSON is now hidden if set via constant. https://github.com/wpCloud/wp-stateless/issues/320\n* ENHANCEMENT - New database table for tracking files not tracked in media library. https://github.com/wpCloud/wp-stateless/issues/307\n* ENHANCEMENT - Updated depreciated function flagged by security software. https://github.com/wpCloud/wp-stateless/issues/300\n\n= 2.1.9 =\n* FIX - Resolved fatal error with OneCodeShop RML Amazon S3 plugin. GitHub Issue [#317](https://github.com/wpCloud/wp-stateless/issues/317).\n* FIX - Resolved missing bucket in file URL when “storage.googleapis.com” was supplied in Domain field. GitHub Issue [318](https://github.com/wpCloud/wp-stateless/issues/318).\n* ENHANCEMENT - Support synchronization of files without metadata, such as .doc and .docx files. GitHub Issue [316](https://github.com/wpCloud/wp-stateless/issues/316).\n\n= 2.1.8 =\n* FIX - Woocommerce product export.\n* FIX - Allow webmaster to control http or https.\n* FIX - PDF preview sync.\n* ENHANCEMENT - Improved error message when there is nothing to sync.\n* ENHANCEMENT - Renamed constant WP_STATELESS_MEDIA_HASH_FILENAME to WP_STATELESS_MEDIA_CACHE_BUSTING.\n* ENHANCEMENT - Domain field functionality now allows webmaster to control http or https\n* ENHANCEMENT - Message about Stateless mode now requires the Cache-Busting option now see only those who using Stateless mode.\n* ENHANCEMENT - Upload full size image before generating thumbnails.\n* COMPATIBILITY - Added support for Learndash plugin.\n* COMPATIBILITY - Added support for BuddyPress plugin.\n* COMPATIBILITY - Added support for Divi builder export.\n* COMPATIBILITY - Added support for Elementor plugin.\n\n= 2.1.7 =\n* ENHANCEMENT - Display dashboard-wide notice for existing users explaining stateless mode now enables cache-busting option.\n* ENHANCEMENT - Display notice when selecting stateless mode explaining stateless mode now enables cache-busting option.\n* ENHANCEMENT - Display required message on cache-busting setting description when stateless mode is enabled.\n\n= 2.1.6 =\n* FIX - Resolved Google SDK conflict.\n* FIX - ICompatibility.php errors notice.\n* FIX - Undefined index: gs_link in class-bootstrap.php.\n* FIX - Media files with accent characters would not upload correctly to the bucket.\n* ENHANCEMENT - Force `Cache-Busting` when using `Stateless` mode.\n* ENHANCEMENT - New admin notice design.\n* ENHANCEMENT - Improved and clear error message.\n* ENHANCEMENT - Renamed constant `WP_STATELESS_MEDIA_ON_FLY` to `WP_STATELESS_DYNAMIC_IMAGE_SUPPORT`.\n* ENHANCEMENT - Update Google Libraries.\n* ENHANCEMENT - Renamed constant `WP_STATELESS_MEDIA_HASH_FILENAME` to `WP_STATELESS_MEDIA_CACHE_BUSTING`.\n* COMPATIBILITY - Renamed constant `WP_STATELESS_COMPATIBILITY_WPSmush` to `WP_STATELESS_COMPATIBILITY_WPSMUSH`.\n* COMPATIBILITY - Added support for `WooCommerce Extra Product Options`.\n* COMPATIBILITY - Added support for `WPForms Pro`.\n* COMPATIBILITY - Improved `ShortPixel` compatibility.\n* COMPATIBILITY - Fixed `ACF Image Crop` compatibility.\n\n= 2.1.5 =\n* FIX - Fatal error with PHP 5.4.45 on activation.\n* FIX - E_WARNING: Illegal string offset ‘gs_bucket’.\n* FIX - Resolved ‘save_network_settings’ message when saving network settings.\n* COMPATIBILITY - Added support for WP Forms plugin\n* COMPATIBILITY - Added support for WP Smush plugin\n* COMPATIBILITY - Added support for ShortPixel Image Optimizer plugin.\n* COMPATIBILITY - Added support for Imagify Image Optimizer plugin.\n* COMPATIBILITY - Added support for SiteOrigin CSS plugin.\n* COMPATIBILITY - Added support for Gravity Forms plugin.\n* COMPATIBILITY - Added support for WPBakery Page Builder plugin.\n* COMPATIBILITY - Added wp-config constant support for compatibility options.\n\n= 2.1.4 =\n* ENHANCEMENT - Updated Google OAuth URL for Setup Assistant.\n\n= 2.1.3 =\n* ENHANCEMENT - Updates to text explainers in Setup Assistant.\n* ENHANCEMENT - Refined redirection logic when activating plugin.\n* FIX - Removed extra space in converted URLs.\n\n= 2.1.2 =\n* ENHANCEMENT - Improved support for Easy Digital Downloads.\n* ENHANCEMENT - Added constant WP_STATELESS_CONSOLE_LOG check before logging to console.\n* ENHANCEMENT - Changed service account default permissions on creation.\n* COMPATIBILITY - Added support for SiteOrigin generated CSS files.\n* ENHANCEMENT - Moved Dynamic Image Support to Capability tab.\n* COMPATIBILITY - Added support for ACF Image Crop addon.\n* FIX - Fixed compatibility issue with wp-smush plugin.\n* FIX - Added required blog param for multi-sites.\n* FIX - Updated media library and mediaItem API endpoints.\n* COMPATIBILITY - Added support for EDD download method option.\n\n= 2.1.1 =\n* FIX - Fixed double slash when Organization is disabled.\n* FIX - Fatal error with GuzzleHttp.\n* FIX - Fixed content-type assignment.\n* ENHANCEMENT - Added support for https URLs in Domain field.\n* COMPATIBILITY - Advanced Custom Fields Image Crop Addon.\n\n= 2.1.0 =\n* FIX - Fixed read only for Service Account JSON if constant or environment variable is defined.\n* FIX - Override default cache control.\n* FIX - Fixed custom domain bucket support with setup assistant.\n* FIX - Improved support for wp_calculate_image_srcset.\n* FIX - Synchronizing non-image files will now delete the local copy.\n* NEW - Support for GOOGLE_APPLICATION_CREDENTIALS environment variable.\n* NEW - Added bucket region option to setup assistant.\n* NEW - Added custom file type support for File URL Replacement setting.\n* NEW - Added failover to image url when not found on disk for sync tool.\n* ENHANCEMENT - updated service account role to Storage Object Admin.\n\n= 2.0.3 =\n* FIX - Fixed Fatal Error which was occurring on WordPress Multisite after upgrading plugin from 1.x to 2.x.\n* ENHANCEMENT - Improved support of PDF files.\n\n= 2.0.2 =\n* FIX - Fixed Fatal Error which were caused by using PHP 5.4 and less.\n* FIX - Fixed Fatal Error which was caused on Media page when WP Smush Pro plugin is activated.\n* FIX - Fixed detection of plugin files paths. The issue was occurring on installations with custom file structures ( e.g. Bedrock platform ).\n* FIX - Fixed redirection URL to Setup Wizard on plugin activation.\n* ENHANCEMENT - Updated the minimum requirements for PHP to 5.5 to prevent fatal errors and possible warnings.\n\n= 2.0.1 =\n* ENHANCEMENT - Added compatibility with Google SDK v1.x version to prevent conflicts with third-party plugins.\n* ENHANCEMENT - Added warning message if old Google SDK version is loaded by third-party plugin.\n\n= 2.0.0 =\n* NEW - Added stateless mode.\n* NEW - Dedicated settings panel.\n* NEW - Setup assistant for initial plugin activation.\n* NEW - Support for replacing default GCS domain with custom domain.\n* ENHANCEMENT - Expanded network setting overrides.\n* ENHANCEMENT - Expanded wp-config constants.\n* ENHANCEMENT - Relocated synchronization and regeneration tools to new settings panel.\n\n= 1.9.2 =\n* ENHANCEMENT - Added ability to modify default bucket link via 'wp_stateless_bucket_link' filter.\n* ENHANCEMENT - Added checking of connection to GCS once per four hours instead of doing it on every page load.\n* ENHANCEMENT - Google SDK was moved from vendor dir. So it's not loaded on every page load anymore, but only when it's required.\n* ENHANCEMENT - Updated Composer Autoload logic.\n* ENHANCEMENT - Reverted all changes included to 1.9.1 version because of conflicts.\n\n= 1.9.0 =\n* NEW - Added new ability to define cacheControl for remote objects.\n* NEW - Added new option that adds random hashes to file names.\n\n= 1.8.0 =\n* FIX - Fixed the issue on multisite setup (switch_to_blog now works as expected).\n* FIX - Performance fixes.\n* NEW - Added the ability to regenerate and synchronize separate Media file from the list.\n* NEW - Added the ability to regenerate and synchronize Media file from edit screen.\n* ENHANCEMENT - UI cleanup.\n\n= 1.7.3 =\n* Initial public release.\n"
  },
  {
    "path": "changes.md",
    "content": "#### 4.4.1 - 2026-01-16\n* COMPATIBILITY - WooCommerce Extra Product Options Compatibility replaced with [WP-Stateless – WooCommerce Extra Product Options Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-extra-product-options-addon/).\n* FIX - resolve critical errors with `firebase/php-jwt` library if `AUTH_SALT` WordPress constant is not set or too short.\n\n#### 4.4.0 - 2026-01-10\n* NEW - plugin requires PHP 8.1+.\n* ENHANCEMENT - updated `firebase/php-jwt` library from  6.11.1 to 7.0.2.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.18.3 to 2.19.0.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.15 to 5.10.19.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.18 to 1.2.0.\n* FIX - `udx/lib-wp-bootstrap` package correctly loads text domain to prevent PHP notices.\n\n#### 4.3.0\n* ENHANCEMENT - update dependencies for Google APIs Client Library.\n* COMPATIBILITY - Simple Local Avatars Compatibility replaced with [WP-Stateless - Simple Local Avatars Addon](https://wordpress.org/plugins/wp-stateless-simple-local-avatars-addon/).\n\n#### 4.2.1\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.11 to 5.10.15.\n* FIX - correctly loads text domain to prevent PHP notices.\n* FIX - `udx/lib-ud-api-client` package correctly loads text domain to prevent PHP notices.\n\n#### 4.2.0\n* ENHANCEMENT - Updated Client library for Google APIs from 2.18.2 to 2.18.3.\n* ENHANCEMENT - updated `firebase/php-jwt` library from  6.10.2 to 6.11.1.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.1 to 5.10.11.\n* DEPRECATED - Setup Assistant removed.\n\n#### 4.1.3\n* COMPATIBILITY - PolyLang Compatibility replaced with [WP-Stateless – Polylang Pro Addon](https://wordpress.org/plugins/wp-stateless-polylang-pro-addon/).\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.10.1 to 5.10.7.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.18 to 1.2.0.\n* ENHANCEMENT - updated `firebase/php-jwt` library from from 6.10.1 to 6.10.2.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.17.0 to 2.18.2.\n* FIX - apply `Cache Control` setting to all files (previously applied only to images).\n\n#### 4.1.2\n* ENHANCEMENT - added `REST API Endpoint` setting, which useful when WordPress dashboard and frontend website utilize different domain names.\n* ENHANCEMENT - extended `Status Info` with the information to help diagnose REST API or AJAX issues.\n* COMPATIBILITY - SiteOrigin Widgets Bundle Compatibility replaced with [WP-Stateless - SiteOrigin Widgets Bundle Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-widgets-bundle-addon/).\n* COMPATIBILITY - WPForms Compatibility replaced with [WP-Stateless - WPForms Addon](https://wordpress.org/plugins/wp-stateless-wpforms-addon/).\n* COMPATIBILITY - Easy Digital Downloads Compatibility replaced with [WP-Stateless - Easy Digital Downloads Addon](https://wordpress.org/plugins/wp-stateless-easy-digital-downloads-addon/).\n* COMPATIBILITY - LiteSpeed Cache Compatibility replaced with [WP-Stateless - LiteSpeed Cache Addon](https://wordpress.org/plugins/wp-stateless-litespeed-cache-addon/).\n* COMPATIBILITY - BuddyPress Compatibility replaced with [WP-Stateless - BuddyPress Addon](https://wordpress.org/plugin/wp-stateless-buddypress-addon/).\n* FIX: PHP warning on `Status` settings tab.\n* FIX: database updates to resolve conflicts with Polylang Pro compatibility.\n\n#### 4.1.1\n* FIX - cache issues during Data Optimization.\n\n#### 4.1.0\n* NEW - move compatibilities files from `wp_sm_sync` to `wp_stateless_files` table with extended information.\n* COMPATIBILITY - WooCommerce Compatibility replaced with [WP-Stateless – WooCommerce Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-addon/).\n* COMPATIBILITY - Gravity Forms Compatibility replaced with [WP-Stateless – Gravity Forms Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-addon/).\n* COMPATIBILITY - Gravity Forms Signature Compatibility replaced with [WP-Stateless – Gravity Forms Signature Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-signature-addon/).\n* COMPATIBILITY - Divi Theme Compatibility replaced with [WP-Stateless – Divi Theme Addon](https://wordpress.org/plugins/wp-stateless-divi-theme-addon/).\n* COMPATIBILITY - SiteOrigin CSS Compatibility replaced with [WP-Stateless – SiteOrigin CSS Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-css-addon/).\n* ENHANCEMENT - CLI command `wp stateless migrate` supports `auto` parameter to run all required Data Optimizations automatically.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.15.1 to 2.17.0.\n* ENHANCEMENT - updated `firebase/php-jwt` library from from 6.9.0 to 6.10.1.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.8.2 to 5.10.1.\n* ENHANCEMENT - updated `deliciousbrains/wp-background-processing` library from from 1.1.1 to 1.3.1.\n* ENHANCEMENT - updated `composer/installers` library from from 1.12.1 to 2.3.0.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.17 to 1.1.18.\n* ENHANCEMENT - action `sm:sync::addFile` format changed, now it passes media object instead of file name.\n* ENHANCEMENT - for installed Addons replace Download action with Activate.\n* ENHANCEMENT - count compatibility files from the DB instead of listing actual files to increase performance.\n* FIX - CLI command `wp stateless migrate` supports `--yes` parameter to skip confirmation.\n* FIX - CLI command `wp stateless migrate` correctly works with `--progress` parameter in multisite.\n* FIX - fixed synchronization for Compatibility files in Stateless Mode.\n* FIX - CLI command `wp stateless upgrade` fixed when running with `--b` switch.\n* FIX - fixed SiteOrigin Widgets Bundle Compatibility in `Stateless` mode.\n* FIX - fixed WPForms Compatibility in `Stateless` mode.\n* FIX - limit index size for compatibility with different DB engines [757](https://github.com/udx/wp-stateless/issues/757).\n* FIX - correctly disable `Cache-Busting` setting for Ephemeral Mode [758](https://github.com/udx/wp-stateless/issues/758), credits [@Jessedev1](https://github.com/Jessedev1).\n* FIX - Data Optimization UI adjustments.\n\n#### 4.0.4\n* ENHANCEMENT - display success message after copying Status Info.\n* FIX - `Settings` page does not open or slow when there is big amount of attachments.\n* FIX - in multisite network, removing custom tables properly when deleting site.\n* FIX - skip setting ACL in Stateless mode and during Sync for the buckets with Uniform access, support WP_STATELESS_SKIP_ACL_SET constant [#712](https://github.com/udx/wp-stateless/issues/712).\n\n#### 4.0.3\n* NEW - added `Info` section to the `Status` tab on the Settings page, which contains the system info and the ability to copy report to clipboard.  \n* ENHANCEMENT - added `Documentation` link on the Plugins page.\n* ENHANCEMENT - added `Addons` link on the Plugins page.\n* ENHANCEMENT - added `Documentation` link on the Settings page.\n* FIX - fixed `Settings` shortcut on the Plugins page.\n* FIX - in multisite network, do not show Data Optimization on the Network Admin Page.\n* FIX - properly set `Content Disposition` fields for media objects.\n* FIX - properly use `Cache Control` setting for media objects.\n* FIX - fixed `Creation of dynamic property` PHP deprecation notice.\n* FIX - fixed `Cannot use ::class with dynamic class name` PHP warning.\n* FIX - avoid PHP warning when unable to get file path in `Stateless` mode [728](https://github.com/udx/wp-stateless/issues/728).\n* FIX - fixed links to the constants documentation.\n\n#### 4.0.2\n* FIX - in multisite network, deleting site can potentially remove WP-Stateless tables from another site.\n* COMPATIBILITY - Gravity Forms Compatibility updated for the newest Gravity Forms version.\n\n#### 4.0.1\n* FIX - improvements to Data Optimization process.\n* FIX - Data Optimization fixed for multisite environment.\n\n#### 4.0.0\n* NEW - use custom database tables to store GCS file data. This increases plugin performance and will be used for future improvements.  \n* NEW - added filter `wp_stateless_get_file`, retrieves the GCS file data, should be used instead of getting `sm_cloud` postmeta directly. \n* NEW - added filter `wp_stateless_get_file_sizes`, retrieves the GCS file data for image sizes, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_file_meta`, retrieves all GCS file meta data, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_file_meta_value`, retrieves the GCS file meta data by meta_key, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_setting_...` which allows to override any WP-Stateless setting. \n* NEW - added setting \"Send Status Emails\" allowing to change email for WP-Stateless notifications.\n* NEW - added setting \"Use Post Meta\" allowing to switch back to using `postmeta` instead of custom DB tables. Can be used in case of issues after upgrading to 4.0.0.\n* NEW - added new Settings tab `Addons`, which contains the list of WP-Stateless Addons, which replace Compatibilities.\n* NEW - added new Settings tab `Status`, which contains status and health information related to Google Cloud Storage and WP-Stateless.\n* NEW - CLI command `wp stateless migrate` to list and operate data optimizations.\n* NEW - configuration constant [`WP_STATELESS_POSTMETA`](https://stateless.udx.io/docs/constants/#wp_stateless_postmeta) allows to read the GCS file data from postmeta instead of the new custom database tables.\n* NEW - configuration constant [`WP_STATELESS_BATCH_HEALTHCHECK_INTERVAL`](https://stateless.udx.io/docs/constants/#wp_stateless_batch_healthcheck_interval) defines an interval in minutes for periodical health checks of a batch background process (like data optimization).\n* COMPATIBILITY - BuddyBoss Compatibility replaced with [WP-Stateless – BuddyBoss Platform Addon](https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/).\n* COMPATIBILITY - Elementor Compatibility replaced with [WP-Stateless – Elementor Website Builder Addon](https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/).\n* COMPATIBILITY - Gravity Form Compatibility does not support older version of Gravity Forms (< 2.3).\n* ENHANCEMENT - Allow dismissing notices in Admin Panel only for logged in users.\n* ENHANCEMENT - Updated `wp-background-processing` library from from 1.0.2 to 1.1.1.\n* ENHANCEMENT - Updated `phpseclib` 3.0.34 to 3.0.37.\n* FIX - proper use of infinite timeout in `set_time_limit` function to avoid issues with PHP 8.1 and above [#704](https://github.com/udx/wp-stateless/issues/704).\n\n#### 3.4.1\n* FIX - improve security while processing AJAX requests in Admin Panel\n\n#### 3.4.0\n* ENHANCEMENT - removed `udx/lib-settings` package dependency for security reasons. \n* ENHANCEMENT - removed `udx/lib-utility` package dependency for security reasons.\n* ENHANCEMENT - refactored `Settings` admin page to remove Angular dependency.\n* ENHANCEMENT - including Software Bill of Materials (SBOM) to GitHub release.\n* FIX - updated package dependencies for Google Client Library for security reasons.\n* FIX - replaced `utf8_encode` with `mb_convert_encoding` to support PHP 8.2 and above [#678](https://github.com/udx/wp-stateless/issues/678).\n* FIX - Fatal Error in `Stateless` mode if GCP access credentials are wrong [#693](https://github.com/udx/wp-stateless/issues/693).\n* COMPATIBILITY - preventing PHP warnings while working with WooCommerce version 8.4.0 and above [696](https://github.com/udx/wp-stateless/issues/696).\n* COMPATIBILITY - avoiding conflicts between builtin compatibilities and WP-Stateless Addon plugins.\n\n#### 3.3.0\n* NEW - Added new filter `wp_stateless_attachment_url`. Allows to customize attachment URL after WP-Stateless generates it based on it's internal conditions.\n* FIX - Stateless mode Incompatible with Media Uploader in Media Library Grid mode [#675](https://github.com/udx/wp-stateless/issues/675).\n* FIX - Prevent duplicating messages in Admin Panel.\n* COMPATIBILITY - Dynamic Image Support is now part of the core.\n* COMPATIBILITY - Google App Engine is now part of the core. Automatically enables **Stateless** mode when Google App Engine detected. Can be disabled using `WP_STATELESS_COMPATIBILITY_GAE` constant.\n* COMPATIBILITY - Removed compatibility with \"Advanced Custom Fields: Image Crop Add-on\", because plugin is deprecated.\n* COMPATIBILITY - Removed compatibility with \"VidoRev\" plugin.\n* COMPATIBILITY - Removed compatibility with \"WP Retina 2x\" plugin.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.15.0 to 2.15.1.\n* ENHANCEMENT - Updated Meta Box library from 5.6.3 to 5.8.2.\n* ENHANCEMENT - Updated Meta Box Tabs to version 1.1.17.\n* ENHANCEMENT - Updated PHP JWT library from 6.6.0 to 6.9.0.\n\n#### 3.2.5\n* FIX - Folder setting does not allow custom structure [#608](https://github.com/udx/wp-stateless/issues/608).\n* FIX - Stateless mode Incompatible with Inline Uploader [#675](https://github.com/udx/wp-stateless/issues/675).\n* FIX - html tags incorrectly applied in notice [#680](https://github.com/udx/wp-stateless/issues/680).\n* ENHANCEMENT - Add WP_STATELESS_SKIP_ACL_SET for skip ACL set for GCS [#625](https://github.com/udx/wp-stateless/issues/625).\n* COMPATIBILITY - Add support for The Events Calendar [#599](https://github.com/udx/wp-stateless/issues/599).\n\n#### 3.2.4\n\n- FIX - Website unresponsive after Upgrade [#669](https://github.com/udx/wp-stateless/issues/669).\n\n#### 3.2.3\n\n- ENHANCEMENT - Updated Client library for Google APIs.\n- ENHANCEMENT - Updated Monolog library to version 3.\n- ENHANCEMENT - Updated JWT library.\n- FIX - Fixed vulnerability issues.\n- FIX - Fixed an errors and warnings on PHP 8.1.\n- FIX - Fixed an error that occured when WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE is set.\n\n#### 3.2.2\n\n- FIX -  Folder setting can't be saved from the settings page [#639](https://github.com/udx/wp-stateless/issues/639).\n\n#### 3.2.1\n\n- FIX - Updated requirments.\n- FIX - WP-Stateless 3.2.0 doesn’t upload docs, only images [#638](https://github.com/udx/wp-stateless/issues/638).\n\n#### 3.2.0\n\n- ENHANCEMENT - Upgraded `wpmetabox` library.\n- ENHANCEMENT - Updated Client library for Google APIs.\n- ENHANCEMENT - Updated Guzzle library to version 7.\n- ENHANCEMENT - Updated JWT library.\n- ENHANCEMENT - Updated `license` functionality, removed `update checker`.\n- FIX - Fixed vulnerability issues.\n- FIX - Fixed erros and warnings on PHP 8.\n- FIX - problem after the upgrade [#628](https://github.com/udx/wp-stateless/issues/628).\n- FIX - image_downsize() PHP8 Required parameter $id follows optional parameter $false [#619](https://github.com/udx/wp-stateless/issues/619).\n\n#### 3.1.1\n\n- ENHANCEMENT - Notification for the administrator about finished synchronization. GitHub issue [#576](https://github.com/udx/wp-stateless/issues/576).\n- FIX - Fixed an issue with PDF thumbnails. GitHub issue [#577](https://github.com/udx/wp-stateless/issues/577).\n- FIX - Fixed an issue with synchronization in `Stateless` mode. GitHub issue [#575](https://github.com/udx/wp-stateless/issues/575).\n- COMPATIBILITY - Changed the way compatibility files are stored on Multisite. GitHub issue [#588](https://github.com/udx/wp-stateless/issues/588).\n\n#### 3.1.0\n\n- NEW - Completely rewritten the synchronization tool. GitHub issue [#523](https://github.com/udx/wp-stateless/issues/523).\n- NEW - New configuration constant `WP_STATELESS_SYNC_MAX_BATCH_SIZE`. Sets the maximum size of a background sync batch of items to be saved in a single row in the database. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_max_batch_size).\n- NEW - New configuration constant `WP_STATELESS_SYNC_LOG`. Sets a path to a log file where to output logging information during the background sync. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_log).\n- NEW - New configuration constant `WP_STATELESS_SYNC_HEALTHCHECK_INTERVAL`. Defines an interval in minutes for a cron task that periodically checks the health of a particular background sync process. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_healthcheck_interval).\n- FIX - Fixed an issue when original files were not deleted from the server in the Ephemeral mode. GitHub issue [#484](https://github.com/udx/wp-stateless/issues/484).\n- FIX - Fixed an incorrect behavior of image `srcset` attribute in the Backup mode. GitHub issue [#558](https://github.com/udx/wp-stateless/issues/558).\n- COMPATIBILITY - Litespeed Cache - Fixed an incorrect upload folder determination. GitHub issue [#527](https://github.com/udx/wp-stateless/issues/527).\n\n#### 3.0.4\n\n- FIX - Fixed inability to use dashes in the upload folder name. GitHub issue [#565](https://github.com/udx/wp-stateless/issues/565).\n- COMPATIBILITY - Elementor - Fixed wrong upload directory. GitHub issue [#560](https://github.com/udx/wp-stateless/issues/560).\n\n#### 3.0.3\n\n- FIX - Fixed an incorrect file URL in Stateless mode on Edit Media screen. GitHub issue [#544](https://github.com/udx/wp-stateless/issues/544).\n\n#### 3.0.2\n\n- FIX - Refactored the way files are being uploaded to GCS when `WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE` constant is defined. GitHub issue [#553](https://github.com/udx/wp-stateless/issues/553).\n- FIX - Fixed the process of upgrading to 3.0 for multisite installations. GitHub issue [#549](https://github.com/udx/wp-stateless/issues/549).\n\n#### 3.0.1\n\n- FIX - Fatal Error in Stateless mode. GitHub issue [#546](https://github.com/udx/wp-stateless/issues/546).\n\n#### 3.0\n\n- NEW - Setup assistant rewrite. GitHub issue [#477](https://github.com/udx/wp-stateless/issues/477).\n- NEW - Recreate attachment metabox panel using metabox.io. GitHub issue [#470](https://github.com/udx/wp-stateless/issues/470).\n- NEW - Updated the `Stateless` mode to not use local storage at all. Current `Stateless` mode setting mapped to new `Ephemeral` mode. GitHub issue [#482](https://github.com/udx/wp-stateless/issues/482).\n- NEW - Files are now uploaded to GCS in chunks and chunk size will be determined based on free memory available. GitHub issue [#478](https://github.com/udx/wp-stateless/issues/478).\n- NEW - File upload chunk size can be controlled with `WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE` constant. GitHub issue [#478](https://github.com/udx/wp-stateless/issues/478).\n- FIX - Changed the default value for the Cache-Busting setting. GitHub issue [#361](https://github.com/udx/wp-stateless/issues/361).\n- FIX - Fixed network override of Cache-Busting. GitHub issue [#468](https://github.com/udx/wp-stateless/issues/468).\n- FIX - Fixed \"Passing glue string after array is deprecated.\". GitHub issue [#444](https://github.com/udx/wp-stateless/issues/444).\n- FIX - Fixed Compatibility default value in multisite. GitHub issue [#464](https://github.com/udx/wp-stateless/issues/464).\n- FIX - Fixed multisite wrong GCS path. GitHub issue [#407](https://github.com/udx/wp-stateless/issues/407).\n- FIX - Don't check for Google Cloud Storage connectivity in stateless mode unless uploading. GitHub issue [#442](https://github.com/udx/wp-stateless/issues/442).\n- COMPATIBILITY - Google App Engine - Added new compatibility support for Google App Engine. [#486](https://github.com/udx/wp-stateless/issues/486)\n- COMPATIBILITY - Elementor - Fixed wrong MIME type for CSS files. GitHub issue [#395](https://github.com/udx/wp-stateless/issues/395).\n- COMPATIBILITY - Polylang - Fixed missing metadata issue. GitHub issue [#378](https://github.com/udx/wp-stateless/issues/378).\n- COMPATIBILITY - EWWW - Fixed mime type for WEBP images. GitHub issue [#371](https://github.com/udx/wp-stateless/issues/371).\n- COMPATIBILITY - Simple Local Avatars - Added new compatibility support for Simple Local Avatars. GitHub issue [#297](https://github.com/udx/wp-stateless/issues/297).\n- COMPATIBILITY - BuddyPress - Fixed BuddyPress compatibility. GitHub issue [#275](https://github.com/udx/wp-stateless/issues/275).\n- COMPATIBILITY - Divi - Fixed Divi cache issue. GitHub issue [#430](https://github.com/udx/wp-stateless/issues/430).\n- COMPATIBILITY - Gravity Forms - add compatibility for Gravity Forms Signature Add-On. [#501](https://github.com/udx/wp-stateless/issues/501).\n- COMPATIBILITY - Litespeed - Fixed fatal error and warnings. [#491](https://github.com/udx/wp-stateless/issues/491).\n- COMPATIBILITY - Imagify - Added support for webp. [#403](https://github.com/udx/wp-stateless/issues/403).\n- ENHANCEMENT - Update Client library for Google APIs. [#446](https://github.com/udx/wp-stateless/issues/446).\n- ENHANCEMENT - Wildcards for bucket folder settings. GitHub issue [#149](https://github.com/udx/wp-stateless/issues/149).\n- ENHANCEMENT - Better CLI integration. GitHub issue [#447](https://github.com/udx/wp-stateless/issues/447), [#450](https://github.com/udx/wp-stateless/issues/450) and [#451](https://github.com/udx/wp-stateless/issues/451).\n- ENHANCEMENT - Sync media according to new Bucket Folder settings. GitHub issue [#449](https://github.com/udx/wp-stateless/issues/449).\n- ENHANCEMENT - Moved Bucket Folder setting in the File URL section. GitHub issue [#463](https://github.com/udx/wp-stateless/issues/463).\n- ENHANCEMENT - Hide Regenerate and Sync with GCS when the mode is Disabled. GitHub issue [#440](https://github.com/udx/wp-stateless/issues/440).\n- ENHANCEMENT - New endpoint for the Google Cloud Storage JSON API. GitHub issue [#384](https://github.com/udx/wp-stateless/issues/384).\n- ENHANCEMENT - Renamed current `Stateless` mode to `Ephemeral`. GitHub issue [#481](https://github.com/udx/wp-stateless/issues/481).\n\n#### 2.3.2\n\n- FIX - Fixed video file doesn't get deleted from the server in `Stateless` mode. GitHub issue [#418](https://github.com/wpCloud/wp-stateless/issues/418).\n- FIX - Fixed file size doesn't show under attachment details in `Stateless` mode. GitHub issue [#413](https://github.com/wpCloud/wp-stateless/issues/413).\n- FIX - Fixed Cache-Busting feature works even if the Mode is `Disabled`. GitHub issue [#405](https://github.com/wpCloud/wp-stateless/issues/405).\n- COMPATIBILITY - Fixed Gravity Form Post Image didn't include `Bucket Folder`. GitHub issue [#421](https://github.com/wpCloud/wp-stateless/issues/421).\n- COMPATIBILITY - Fixed Divi Builder Export. GitHub issue [#420](https://github.com/wpCloud/wp-stateless/issues/420).\n- COMPATIBILITY - Fixed BuddyBoss pages breaking after updating to 2.3.0. GitHub issue [#417](https://github.com/wpCloud/wp-stateless/issues/417).\n\n#### 2.3.1\n\n- Fix - Fixed fatal error, undefined function `is_wp_version_compatible`. GitHub issue [#414](https://github.com/wpCloud/wp-stateless/issues/414).\n\n#### 2.3.0\n\n- FIX - Fixed problem with WordPress 5.3. GitHub issue [#406](https://github.com/wpCloud/wp-stateless/issues/406).\n- FIX - Fixed problem with the Cache Busting feature. GitHub issue [#377](https://github.com/wpCloud/wp-stateless/issues/377).\n- COMPATIBILITY - Added compatibility support for WP Retina 2x pro. GitHub issue [#380](https://github.com/wpCloud/wp-stateless/issues/380).\n- COMPATIBILITY - Enhanced compatibility support for LiteSpeed Cache. GitHub issue [#365](https://github.com/wpCloud/wp-stateless/issues/365).\n- COMPATIBILITY - Enhanced compatibility support for ShortPixel Image Optimizer. GitHub issue [#364](https://github.com/wpCloud/wp-stateless/issues/364), [#398](https://github.com/wpCloud/wp-stateless/issues/398).\n- COMPATIBILITY - Fixed Gravity Form export. GitHub issue [#408](https://github.com/wpCloud/wp-stateless/issues/408).\n- ENHANCEMENT - Improved upon add_media function for better compatibility support. GitHub issue [#382](https://github.com/wpCloud/wp-stateless/issues/382).\n\n#### 2.2.7\n\n- FIX - WP-Smush compatibility enhanced. GitHub Issue [#366](https://github.com/wpCloud/wp-stateless/issues/366).\n- FIX - Fixed multisite installation support. GitHub Issue [#370](https://github.com/wpCloud/wp-stateless/issues/370).\n- FIX - Fixed settings UI problems related to Cache-Busting option. GitHub Issue [#373](https://github.com/wpCloud/wp-stateless/issues/373).\n- FIX - Other minor fixes.\n\n#### 2.2.6\n\n- FIX - Multisite Network Settings page fixed. GitHub Issue [#369](https://github.com/wpCloud/wp-stateless/issues/369).\n- FIX - Fixed incorrect Compatibilities behavior when Bucket Folder is set. GitHub Issue [#368](https://github.com/wpCloud/wp-stateless/issues/368).\n- FIX - Other minor fixes.\n\n#### 2.2.5\n\n- NEW - Added ability to start sync process from specific Attachment ID. GitHub Issue [#360](https://github.com/wpCloud/wp-stateless/issues/360).\n- COMPATIBILITY - Added compatibility support for LiteSpeed Cache plugin. Especially to support optimized .webp images. GitHub Issue [#357](https://github.com/wpCloud/wp-stateless/issues/357).\n- FIX - Other minor fixes.\n\n#### 2.2.4\n\n- NEW - Added new filter `wp_stateless_skip_add_media`. Allows skipping synchronization of the media object with GCS depending on custom condition. GitHub Issue [#344](https://github.com/wpCloud/wp-stateless/issues/344).\n- FIX - Compatibility Manager is considering Child Themes now. GitHub Issue [#351](https://github.com/wpCloud/wp-stateless/issues/351).\n- FIX - Custom domains handling has been fixed. GitHub Issue [#358](https://github.com/wpCloud/wp-stateless/issues/358).\n- ENHANCEMENT - Imagify Image Optimizer and WP Smush compatibilities improved. GitHub Issue [#359](https://github.com/wpCloud/wp-stateless/issues/359).\n\n#### 2.2.3\n\n- FIX - `get_post_metadata` does not break multi-dimensional arrays anymore. GitHub Issue [#352](https://github.com/wpCloud/wp-stateless/issues/352).\n- FIX - `PHP Warning: substr_compare()` fixed. GitHub Issue [#350](https://github.com/wpCloud/wp-stateless/issues/350).\n- FIX - Filtering Domain setting before saving in order to get rid of possible empty spaces. GitHub Issue [#348](https://github.com/wpCloud/wp-stateless/issues/348).\n- FIX - Incorrect remote file path generated when disabled Organization setting. GitHub Issue [#343](https://github.com/wpCloud/wp-stateless/issues/343).\n- FIX - Hiding admin notices correctly. GitHub Pull Request [#355](https://github.com/wpCloud/wp-stateless/pull/355).\n\n#### 2.2.2\n\n- FIX - Proper 'srcset' attribute handling. GitHub Issue [#342](https://github.com/wpCloud/wp-stateless/issues/342).\n- ENHANCEMENT - Minor fixes code quality.\n\n#### 2.2.1\n\n- Fix - Security patch for Authenticated Remote Code Execution (RCE) vulnerability.\n\n#### 2.2.0\n\n- FIX - Slow page generation when File URL Replacement is enabled [#265](https://github.com/wpCloud/wp-stateless/issues/265).\n- FIX - Fatal error when WP Smush Pro compatibility is enabled [#325](https://github.com/wpCloud/wp-stateless/issues/325).\n- FIX - Issue with Imagify [#326](https://github.com/wpCloud/wp-stateless/issues/326).\n- FIX - Return correct srcset images [#328](https://github.com/wpCloud/wp-stateless/issues/328).\n- FIX - Fatal error with GFForms [#330](https://github.com/wpCloud/wp-stateless/issues/330).\n- FIX - Typo in admin notices [#337](https://github.com/wpCloud/wp-stateless/issues/337).\n- ENHANCEMENT - Extended “File URL Replacement” options [#336](https://github.com/wpCloud/wp-stateless/issues/336).\n- ENHANCEMENT - Service Account JSON is now hidden if set via constant [#320](https://github.com/wpCloud/wp-stateless/issues/320).\n- ENHANCEMENT - New database table for tracking files not tracked in media library [#307](https://github.com/wpCloud/wp-stateless/issues/307).\n- ENHANCEMENT - Updated depreciated function flagged by security software [#300](https://github.com/wpCloud/wp-stateless/issues/300).\n\n#### 2.1.9\n\n- FIX - Resolved fatal error with OneCodeShop RML Amazon S3 plugin. GitHub Issue [#317](https://github.com/wpCloud/wp-stateless/issues/317).\n- FIX - Resolved missing bucket in file URL when “storage.googleapis.com” was supplied in Domain field. GitHub Issue [#318](https://github.com/wpCloud/wp-stateless/issues/318).\n- ENHANCEMENT - Support synchronization of files without metadata, such as .doc and .docx files. GitHub Issue [#316](https://github.com/wpCloud/wp-stateless/issues/316).\n\n#### 2.1.8\n\n- FIX - WooCommerce product export.\n- FIX - PDF previews in media library now supported.\n- ENHANCEMENT - Improved error message when there is nothing to sync.\n- ENHANCEMENT - Renamed constant WP_STATELESS_MEDIA_HASH_FILENAME to WP_STATELESS_MEDIA_CACHE_BUSTING.\n- ENHANCEMENT - Domain field functionality now allows webmaster to control http or https\n- ENHANCEMENT - Notice about Stateless mode requiring the Cache-Busting option is displayed to those using Stateless mode.\n- ENHANCEMENT - Upload full size image before generating thumbnails.\n- COMPATIBILITY - Added compatibility support for Learndash plugin.\n- COMPATIBILITY - Added compatibility support for BuddyPress plugin.\n- COMPATIBILITY - Added compatibility support for Divi Builder export.\n- COMPATIBILITY - Added compatibility support for Elementor plugin.\n\n#### 2.1.7\n\n- ENHANCEMENT - Display dashboard-wide notice for existing users explaining stateless mode now enables cache-busting option.\n- ENHANCEMENT - Display notice when selecting stateless mode explaining stateless mode now enables cache-busting option.\n- ENHANCEMENT - Display required message on cache-busting setting description when stateless mode is enabled.\n\n#### 2.1.6\n\n- FIX - Resolved Google SDK conflict.\n- FIX - ICompatibility.php errors notice.\n- FIX - Undefined index: gs_link in class-bootstrap.php.\n- FIX - Media files with accent characters would not upload correctly to the bucket.\n- ENHANCEMENT - Force `Cache-Busting` when using `Stateless` mode.\n- ENHANCEMENT - New admin notice design.\n- ENHANCEMENT - Improved and clear error message.\n- ENHANCEMENT - Renamed constant `WP_STATELESS_MEDIA_ON_FLY` to `WP_STATELESS_DYNAMIC_IMAGE_SUPPORT`.\n- ENHANCEMENT - Update Google Libraries.\n- ENHANCEMENT - Renamed constant `WP_STATELESS_MEDIA_HASH_FILENAME` to `WP_STATELESS_MEDIA_CACHE_BUSTING`.\n- COMPATIBILITY - Renamed constant `WP_STATELESS_COMPATIBILITY_WPSmush` to `WP_STATELESS_COMPATIBILITY_WPSMUSH`.\n- COMPATIBILITY - Added support for `WooCommerce Extra Product Options`.\n- COMPATIBILITY - Added support for `WPForms Pro`.\n- COMPATIBILITY - Improved `ShortPixel` compatibility.\n- COMPATIBILITY - Fixed `ACF Image Crop` compatibility.\n\n#### 2.1.5\n\n- FIX - Fatal error with PHP 5.4.45 on activation.\n- FIX - E_WARNING: Illegal string offset ‘gs_bucket’.\n- FIX - Resolved ‘save_network_settings’ message when saving network settings.\n- COMPATIBILITY - Added support for WP Forms plugin\n- COMPATIBILITY - Added support for WP Smush plugin\n- COMPATIBILITY - Added support for ShortPixel Image Optimizer plugin.\n- COMPATIBILITY - Added support for Imagify Image Optimizer plugin.\n- COMPATIBILITY - Added support for SiteOrigin CSS plugin.\n- COMPATIBILITY - Added support for Gravity Forms plugin.\n- COMPATIBILITY - Added support for WPBakery Page Builder plugin.\n- COMPATIBILITY - Added wp-config constant support for compatibility options.\n\n#### 2.1.4\n\n- ENHANCEMENT - Updated Google OAuth URL for Setup Assistant.\n\n#### 2.1.3\n\n- ENHANCEMENT - Updates to text explainers in Setup Assistant.\n- ENHANCEMENT - Refined redirection logic when activating plugin.\n- FIX - Removed extra space in converted URLs.\n\n#### 2.1.2\n\n- ENHANCEMENT - Improved support for Easy Digital Downloads.\n- ENHANCEMENT - Added constant WP_STATELESS_CONSOLE_LOG check before logging to console.\n- ENHANCEMENT - Changed service account default permissions on creation.\n- COMPATIBILITY - Added support for SiteOrigin generated CSS files.\n- ENHANCEMENT - Moved Dynamic Image Support to Capability tab.\n- COMPATIBILITY - Added support for ACF Image Crop addon.\n- FIX - Fixed compatibility issue with wp-smush plugin.\n- FIX - Added required blog param for multi-sites.\n- FIX - Updated media library and mediaItem API endpoints.\n- COMPATIBILITY - Added support for EDD download method option.\n\n#### 2.1.1\n\n- FIX - Fixed double slash when Organization is disabled.\n- FIX - Fatal error with GuzzleHttp.\n- FIX - Fixed content-type assignment.\n- ENHANCEMENT - Added support for https URLs in Domain field.\n- COMPATIBILITY - Advanced Custom Fields Image Crop Addon.\n\n#### 2.1.0\n\n- FIX - Fixed read only for Service Account JSON if constant or environment variable is defined.\n- FIX - Override default cache control.\n- FIX - Fixed custom domain bucket support with setup assistant.\n- FIX - Improved support for wp_calculate_image_srcset.\n- FIX - Synchronizing non-image files will now delete the local copy.\n- NEW - Support for GOOGLE_APPLICATION_CREDENTIALS environment variable.\n- NEW - Added bucket region option to setup assistant.\n- NEW - Added custom file type support for File URL Replacement setting.\n- NEW - Added failover to image url when not found on disk for sync tool.\n- ENHANCEMENT - updated service account role to Storage Object Admin.\n\n#### 2.0.3\n\n- FIX - Fixed Fatal Error which was occurring on WordPress Multisite after upgrading plugin from 1.x to 2.x.\n- ENHANCEMENT - Improved support of PDF files.\n\n#### 2.0.2\n\n- FIX - Fixed Fatal Errors which were caused by using PHP 5.4 and less.\n- FIX - Fixed Fatal Error which was caused on Media page when WP Smush Pro plugin is activated.\n- FIX - Fixed detection of plugin files paths. The issue was occurring on installations with custom file structures ( e.g. Bedrock platform ).\n- FIX - Fixed redirection URL to Setup Wizard on plugin activation.\n- ENHANCEMENT - Updated the minimum requirements for PHP to 5.5 to prevent fatal errors and possible warnings.\n\n#### 2.0.1\n\n- ENHANCEMENT - Added compatibility with Google SDK v1.x version to prevent conflicts with third-party plugins.\n- ENHANCEMENT - Added warning message if old Google SDK version is loaded by third-party plugin.\n\n#### 2.0.0\n\n- NEW - Added stateless mode.\n- NEW - Dedicated settings panel.\n- NEW - Setup assistant for initial plugin activation.\n- NEW - Support for replacing default GCS domain with a custom domain.\n- ENHANCEMENT - Expanded network setting overrides.\n- ENHANCEMENT - Expanded wp-config constants.\n- ENHANCEMENT - Relocated synchronization and regeneration tools to the new settings panel.\n\n#### 1.9.2\n\n- ENHANCEMENT - Added ability to modify default bucket link via 'wp_stateless_bucket_link' filter.\n- ENHANCEMENT - Added checking of connection to GCS once per four hours instead of doing it on every page load.\n- ENHANCEMENT - Google SDK was moved from vendor dir. So it's not loaded on every page load anymore, but only when it's required.\n- ENHANCEMENT - Updated Composer Autoload logic.\n- ENHANCEMENT - Reverted all changes included to 1.9.1 version because of conflicts.\n\n#### 1.9.0\n\n- Added new ability to define cacheControl for remote objects.\n- Added new option that adds random hashes to file names.\n\n#### 1.8.0\n\n- Added the ability to regenerate and synchronize separate Media file from the list.\n- Added the ability to regenerate and synchronize Media file from edit screen.\n- Fixed the issue on multisite setup (switch_to_blog now works as expected).\n- Performance fixes.\n- UI cleanup.\n\n#### 1.7.3\n\n- Added ability to fix previously failed items.\n\n#### 1.7.1\n\n- Migrated from p12 to JSON.\n- New feature of media sync.\n- New option Root Directory.\n- Optimized uploading process.\n- Other options.\n\n#### 1.7.0\n\n- Fixed conflict with SSL forcing plugin.\n\n#### 1.6.0\n\n- Plugin Updates ability added.\n- WordPress 4.4 compatibility fixed.\n- Post content filter fixed.\n\n#### 1.5.0\n\n- Migration into wp-stateless from wp-stateless-media.\n- Version bump to resolve bucket permissions issues.\n\n#### 1.3.2\n\n- Fixed issue with wp_normalize_path causing a fatal error on older installs.\n- Removed \\$\\_SESSION usage for transients.\n\n#### 1.3.1\n\n- Added ability to upload non-images to bucket.\n- Fixed issue with running batches in WP CLI\n\n#### 1.3.0\n\n- Added WP CLI functionality.\n- Added WP CLI command to move all legacy meta data to serialized array.\n- Changed the way of storing SM cloud meta data.\n\n#### 1.2.0\n\n- Added Imagemagic/GD check to warn admin that thumbnails will not be generated.\n- Added mediaLink, mediaLink and id storage for uploaded objects.\n- Added support for cacheControl with default settings based on Mime type of upload.\n- Added sm:item:cacheControl and sm:item:contentDisposition filters.\n- Cleaned-up metadata that is made available to GCS and visible in response headers.\n- Removed app_name, using blog domain name automatically.\n- Added Cache Control to media editor.\n\n#### 1.1.0\n\n- Added support for <code>WP_STATELESS_MEDIA_MODE</code>.\n- Renamed constants <code>STATELESS_MEDIA_SERVICE_ACCOUNT_NAME</code> and <code>STATELESS_MEDIA_KEY_FILE_PATH</code> to <code>WP_STATELESS_MEDIA_SERVICE_ACCOUNT</code> and <code>WP_STATELESS_MEDIA_KEY_FILE_PATH</code>.\n\n#### 1.0.2\n\n- Added a _view_ link to media edit page for synchronized items.\n- Added some _wp_get_attachment_image_ dynamic attributes.\n\n#### 1.0.1\n\n- Added Network Management option.\n- Added support for <code>WP_STATELESS_MEDIA_SERVICE_ACCOUNT_NAME</code> and <code>WP_STATELESS_MEDIA_KEY_FILE_PATH</code>.\n\n#### 1.0.0\n\n- Set branch to v1.0.\n- Removed autocompletion from Email Address and Application Name fields.\n- Moved lib/classes into just lib.\n- Rename class-Bootstrap.php to be lowercased.\n- Added composer/installers to composer.json 'required' dependencies.\n- Rename stateless-media.php to wp-stateless-media.php so there aren't unexpected plugin basename issues.\n- Change package name to wp-stateless-media in package.json\n- Rename 'wpCloud/wp-stateless-media' to 'wpcloud/wp-stateless-media' in composer.json, Composer does not allow uppercase names.\n\n#### 0.2.1\n\n- Added 'Settings' link to plugin list.\n"
  },
  {
    "path": "composer.json",
    "content": "{\n  \"name\": \"wpcloud/wp-stateless\",\n  \"description\": \"WP-Stateless WordPress plugin\",\n  \"type\": \"wordpress-plugin\",\n  \"minimum-stability\": \"stable\",\n  \"homepage\": \"https://udx.io\",\n  \"authors\": [\n    {\n      \"name\": \"UDX\",\n      \"homepage\": \"https://udx.io\"\n    }\n  ],\n  \"repositories\": [\n    {\n      \"type\": \"composer\",\n      \"url\": \"https://repository.usabilitydynamics.com\"\n    },\n    {\n      \"type\": \"git\",\n      \"url\": \"https://github.com/wpCloud/wp-stateless.git\"\n    },\n    {\n      \"type\":\"composer\",\n      \"url\":\"https://wpackagist.org\",\n      \"only\": [\n          \"wpackagist-plugin/*\",\n          \"wpackagist-theme/*\"\n      ]\n    }\n  ],\n  \"require\": {\n    \"php\": \">=7.4\",\n    \"composer/installers\": \"~2.3\",\n    \"ccampbell/chromephp\": \"^4.1\",\n    \"firebase/php-jwt\": \"^6.1.2\",\n    \"udx/lib-ud-api-client\": \"^1.2\",\n    \"udx/lib-wp-bootstrap\": \"^1.3\",\n    \"wpackagist-plugin/meta-box\": \"^5.10\"\n  },\n  \"autoload\": {\n    \"classmap\": [\n      \"lib/classes\",\n      \"lib/includes\"\n    ]\n  },\n  \"archive\": {\n    \"exclude\": [\n      \"node_modules\",\n      \".gitignore\",\n      \"test\",\n      \"circle.yml\",\n      \"composer.lock\",\n      \"gruntfile.js\",\n      \"package.json\"\n    ]\n  },\n  \"extra\": {\n    \"mozart\": {\n      \"dep_namespace\": \"wpCloud\\\\StatelessMedia\\\\\",\n      \"dep_directory\": \"/lib/ns-vendor/deps\",\n      \"classmap_directory\": \"/lib/ns-vendor/classes\",\n      \"classmap_prefix\": \"UDX_\",\n      \"packages\": [\n        \"deliciousbrains/wp-background-processing\"\n      ]\n    },\n    \"featureFlags\": [\n      {\n        \"name\": \"Google Login\",\n        \"constant\": \"WP_STATELESS_GOOGLE_LOGIN\",\n        \"description\": \"Allows for quicker setup by letting admin login to their Google Account from the control panel. Fetches available projects and buckets.\",\n        \"since\": \"1.9.2\",\n        \"enabled\": true\n      },\n      {\n        \"name\": \"Legacy Settings\",\n        \"constant\": \"WP_STATELESS_LEGACY_SETTINGS\",\n        \"description\": \"Shows legacy settings options.\",\n        \"since\": \"1.9.2\",\n        \"enabled\": false\n      }\n    ],\n    \"schemas\": {\n      \"dependencies\": {\n        \"modules\": {},\n        \"plugins\": []\n      },\n      \"licenses\": {\n        \"client\": {\n          \"slug\": \"wpcloud/wp-stateless\",\n          \"screen\": {\n            \"parent\": \"upload.php?page=stateless-settings\",\n            \"hide_menu\": true\n          }\n        },\n        \"product\": false\n      }\n    },\n    \"installer-paths\": {\n      \"vendor/wpmetabox/meta-box\": [\"wpackagist-plugin/meta-box\"]\n    }\n  },\n  \"require-dev\": {\n    \"coenjacobs/mozart\": \"0.7.1\",\n    \"deliciousbrains/wp-background-processing\": \"1.3.1\"\n  },\n  \"config\": {\n    \"allow-plugins\": {\n      \"composer/installers\": true\n    }\n  }\n}\n"
  },
  {
    "path": "l10n.php",
    "content": "<?php\n/**\n * Javascript Localization\n *\n * @since 2.1\n * @author alim@UD\n * @package WP-Stateless\n */\n\n$l10n = array(\n\n  //** Edit Stateless page */\n  'something_went_wrong'                  => __( \"Something went wrong\", ud_get_stateless_media()->domain ),\n  'invalid_input'                         => __( \"Form has invalid input. Please fix them.\", ud_get_stateless_media()->domain ),\n\n  'json_api_enabled'                      => __( \"Google Cloud Storage JSON API Service Enabled\", ud_get_stateless_media()->domain ),\n  'json_api_enabled_failed'               => __( \"Google Cloud Storage JSON API Service failed.\", ud_get_stateless_media()->domain ),\n\n  'project_cant_be_empty'                 => __( \"Project name can't be empty.\", ud_get_stateless_media()->domain ),\n  'project_length_notice'                 => __( \"Project name must be between 5 and 30 characters.\", ud_get_stateless_media()->domain ),\n  'project_invalid_char'                  => __( \"Project name has invalid characters. Enter letters, numbers, quotes, hyphens, spaces or exclamation points.\", ud_get_stateless_media()->domain ),\n  'project_creation_started'              => __( \"Project creation started.\", ud_get_stateless_media()->domain ),\n  'project_exists'                        => __( \"Project Exists\", ud_get_stateless_media()->domain ),\n  'project_creation_complete'             => __( \"Project creation complete.\", ud_get_stateless_media()->domain ),\n  'project_creation_failed'               => __( \"Project creation failed.\", ud_get_stateless_media()->domain ),\n\n  'bucket_cant_be_empty'                  => __( \"Bucket name can't be empty.\", ud_get_stateless_media()->domain ),\n  'bucket_length_notice'                  => __( \"Bucket name must be between 5 and 30 characters.\", ud_get_stateless_media()->domain ),\n  'bucket_invalid_char'                   => __( \"A bucket name can contain lowercase alphanumeric characters, hyphens, and underscores. Bucket names must start and end with an alphanumeric character.\", ud_get_stateless_media()->domain ),\n  'bucket_created'                        => __( \"Bucket Created\", ud_get_stateless_media()->domain ),\n  'bucket_creation_failed'                => __( \"Bucket creation failed\", ud_get_stateless_media()->domain ),\n  'bucket_exists'                         => __( \"Bucket Exist\", ud_get_stateless_media()->domain ),\n\n  'bucket_access_controls_success'        => __( \"Bucket access control inserted.\", ud_get_stateless_media()->domain ),\n  'bucket_access_controls_failed'         => __( \"Bucket access control failed.\", ud_get_stateless_media()->domain ),\n\n  'select_billing_account'                => __( \"Select a billing account.\", ud_get_stateless_media()->domain ),\n  'billing_enabled'                       => __( \"Billing Enabled\", ud_get_stateless_media()->domain ),\n  'billing_already_enabled'               => __( \"Billing already enabled.\", ud_get_stateless_media()->domain ),\n  'billing_failed'                        => __( \"Field to enable billing.\", ud_get_stateless_media()->domain ),\n  'billing_info'                          => __( \"Billing Info\", ud_get_stateless_media()->domain ),\n\n  'service_account_exist'                 => __( \"Service Account Exists\", ud_get_stateless_media()->domain ),\n  'service_account_created'               => __( \"Service Account Created\", ud_get_stateless_media()->domain ),\n  'service_account_creation_failed'       => __( \"Service Account creation failed\", ud_get_stateless_media()->domain ),\n\n  'service_account_key_created'           => __( \"Service Account Key Created\", ud_get_stateless_media()->domain ),\n  'service_account_key_creation_failed'   => __( \"Service Account Key creation failed\", ud_get_stateless_media()->domain ),\n\n  'service_account_key_saved'             => __( \"Service Account Key Saved\", ud_get_stateless_media()->domain ),\n  'service_account_key_save_failed'       => __( \"Failed to  Save Service Account Key\", ud_get_stateless_media()->domain ),\n\n  'service_account_role_granted'          => __( \"Service Account Role Granted\", ud_get_stateless_media()->domain ),\n  'service_account_role_grant_failed'     => __( \"Service Account Role Grant Failed\", ud_get_stateless_media()->domain ),\n  'unable_to_connect_to_the_server'       => __( \"Unable to connect to the server\", ud_get_stateless_media()->domain ),\n  'could_not_retrieve_progress'           => __( \"Could not retrieve progress\", ud_get_stateless_media()->domain ),\n  'could_not_get_fails'                   => __( \"Could not get fails\", ud_get_stateless_media()->domain ),\n  'could_not_reset_progress'              => __( \"Could not reset progress\", ud_get_stateless_media()->domain ),\n  'loading_images_media_objects'          => __( \"Loading Images Media Objects...\", ud_get_stateless_media()->domain ),\n  'stopping'                              => __( \"Stopping...\", ud_get_stateless_media()->domain ),\n  'finished'                              => __( \"Finished\", ud_get_stateless_media()->domain ),\n  'cancelled'                             => __( \"Cancelled\", ud_get_stateless_media()->domain ),\n  'ids_are_malformed'                     => __( \"IDs are malformed\", ud_get_stateless_media()->domain ),\n  'unable_to_get_images_media_id'         => __( \"Unable to get Images Media ID\", ud_get_stateless_media()->domain ),\n  'wp_stateless_get_images_media_id'      => __( \"WP-Stateless get Images Media ID\", ud_get_stateless_media()->domain ),\n  'request_failed'                        => __( \"Request failed\", ud_get_stateless_media()->domain ),\n  'get_images_media_id'                   => __( \"Get Images Media ID\", ud_get_stateless_media()->domain ),\n  'loading_non_image_media_objects'       => __( \"Loading non-image Media Objects...\", ud_get_stateless_media()->domain ),\n\n  'unable_to_get_non_images_media_id'     => __('Unable to get non Images Media ID', ud_get_stateless_media()->domain ),\n  'non_libraries_files_are_not_found'     => __('There are no files to process.', ud_get_stateless_media()->domain ),\n  'get_non_library_files_request_failed'  => __('Get non library files: Request failed', ud_get_stateless_media()->domain ),\n  'regenerate_single_image_failed'        => __('Regenerate single image: Failed', ud_get_stateless_media()->domain ),\n  'sync_single_file_failed'               => __('Sync single file: Failed', ud_get_stateless_media()->domain ),\n  'sync_single_file_request_failed'       => __('Sync single file: Request failed', ud_get_stateless_media()->domain ),\n  'failed_to_sync'                        => __('Failed to sync ', ud_get_stateless_media()->domain ),\n  'sync_non_library_file_failed'          => __('Sync non library file: Failed', ud_get_stateless_media()->domain ),\n  'sync_non_library_file_request_failed'  => __('Sync non library file: Request failed', ud_get_stateless_media()->domain ),\n  'response_code'                         => __('Response code: ', ud_get_stateless_media()->domain ),\n  'loading_non_library_objects'           => __('Loading non library Objects...', ud_get_stateless_media()->domain ),\n  'processing_files'                      => __('Processing files (', ud_get_stateless_media()->domain ),\n  '_total___'                             => __(' total)...', ud_get_stateless_media()->domain ),\n  'processing_images'                     => __('Processing images (', ud_get_stateless_media()->domain ),\n  \n  'get_non_images_media_id_request_failed'  => __('Get non Images Media ID: Request failed', ud_get_stateless_media()->domain ),\n  'regenerate_single_image_request_failed'  => __('Regenerate single image: Request failed', ud_get_stateless_media()->domain ),\n\n  'confirm'                               => __('Confirm', ud_get_stateless_media()->domain ),\n  'cancel'                                => __('Cancel', ud_get_stateless_media()->domain ),\n  'start_optimization'                    => __('Start Data Optimization', ud_get_stateless_media()->domain ),\n  'starting'                              => __('Starting...', ud_get_stateless_media()->domain ),\n);\n\n"
  },
  {
    "path": "lib/Google/CHANGELOG.md",
    "content": "# Changelog\n\n## [2.19.0](https://github.com/googleapis/google-api-php-client/compare/v2.18.4...v2.19.0) (2026-01-09)\n\n\n### Features\n\n* Support firebase/php-jwt version 6.0 and 7.0 ([#2696](https://github.com/googleapis/google-api-php-client/issues/2696)) ([70ea42a](https://github.com/googleapis/google-api-php-client/commit/70ea42a6aa29a1321825c3dcda39cf39174390ea))\n\n\n### Bug Fixes\n\n* Upload assets release job ([#2671](https://github.com/googleapis/google-api-php-client/issues/2671)) ([0f56ea7](https://github.com/googleapis/google-api-php-client/commit/0f56ea773cb51cc6131c442d112d7fd630b49b5c))\n\n## [2.18.4](https://github.com/googleapis/google-api-php-client/compare/v2.18.3...v2.18.4) (2025-09-29)\n\n\n### Bug Fixes\n\n* Ensure credentials can be of type FetchAuthTokenInterface ([#2684](https://github.com/googleapis/google-api-php-client/issues/2684)) ([ed70802](https://github.com/googleapis/google-api-php-client/commit/ed70802cc4886ef1f513a2c0b56a8a972db5e7ab))\n\n## [2.18.3](https://github.com/googleapis/google-api-php-client/compare/v2.18.2...v2.18.3) (2025-04-08)\n\n\n### Bug Fixes\n\n* Convert Finder lazy iterator to array before deletion ([#2663](https://github.com/googleapis/google-api-php-client/issues/2663)) ([c699405](https://github.com/googleapis/google-api-php-client/commit/c6994051af1568359c97d267d9ef34ccbda31387))\n\n## [2.18.2](https://github.com/googleapis/google-api-php-client/compare/v2.18.1...v2.18.2) (2024-12-16)\n\n\n### Bug Fixes\n\n* Correct type for jwt constructor arg ([#2648](https://github.com/googleapis/google-api-php-client/issues/2648)) ([31a9861](https://github.com/googleapis/google-api-php-client/commit/31a9861af02a8e9070b395f05caed7ffce0ef8be))\n\n## [2.18.1](https://github.com/googleapis/google-api-php-client/compare/v2.18.0...v2.18.1) (2024-11-24)\n\n\n### Bug Fixes\n\n* Implicitly marking parameter  as nullable is deprecated ([#2638](https://github.com/googleapis/google-api-php-client/issues/2638)) ([de57db2](https://github.com/googleapis/google-api-php-client/commit/de57db2fdc0d56de1abbf778b28b77c3347eb3fd))\n\n## [2.18.0](https://github.com/googleapis/google-api-php-client/compare/v2.17.0...v2.18.0) (2024-10-16)\n\n\n### Features\n\n* **docs:** Use doctum shared workflow for reference docs ([#2618](https://github.com/googleapis/google-api-php-client/issues/2618)) ([242e2cb](https://github.com/googleapis/google-api-php-client/commit/242e2cb09ad5b25b047a862b4d521037e74cae29))\n\n\n### Bug Fixes\n\n* Explicit token caching issue ([#2358](https://github.com/googleapis/google-api-php-client/issues/2358)) ([dc13e5e](https://github.com/googleapis/google-api-php-client/commit/dc13e5e3f517148d3c66d151a5ab133b7840d8fb))\n\n## [2.17.0](https://github.com/googleapis/google-api-php-client/compare/v2.16.0...v2.17.0) (2024-07-10)\n\n\n### Features\n\n* Add logger to client constructor config ([#2606](https://github.com/googleapis/google-api-php-client/issues/2606)) ([1f47133](https://github.com/googleapis/google-api-php-client/commit/1f4713329d71111a317cda8ef8603fa1bdc88858))\n* Add the protected apiVersion property ([#2588](https://github.com/googleapis/google-api-php-client/issues/2588)) ([7e79f3d](https://github.com/googleapis/google-api-php-client/commit/7e79f3d7be4811f760e19cc4a2c558e04196ec1d))\n\n## [2.16.0](https://github.com/googleapis/google-api-php-client/compare/v2.15.4...v2.16.0) (2024-04-24)\n\n\n### Features\n\n* Add universe domain support ([#2563](https://github.com/googleapis/google-api-php-client/issues/2563)) ([35895de](https://github.com/googleapis/google-api-php-client/commit/35895ded90b507074b3430a94a5790ddd01f39f0))\n\n## [2.15.4](https://github.com/googleapis/google-api-php-client/compare/v2.15.3...v2.15.4) (2024-03-06)\n\n\n### Bug Fixes\n\n* Updates phpseclib because of a security issue ([#2574](https://github.com/googleapis/google-api-php-client/issues/2574)) ([633d41f](https://github.com/googleapis/google-api-php-client/commit/633d41f1b65fdb71a83bf747f7a3ad9857f6d02a))\n\n## [2.15.3](https://github.com/googleapis/google-api-php-client/compare/v2.15.2...v2.15.3) (2024-01-04)\n\n\n### Bug Fixes\n\n* Guzzle dependency version ([#2546](https://github.com/googleapis/google-api-php-client/issues/2546)) ([c270f28](https://github.com/googleapis/google-api-php-client/commit/c270f28b00594a151a887edd3cfd205594a1256a))\n\n## [2.15.2](https://github.com/googleapis/google-api-php-client/compare/v2.15.1...v2.15.2) (2024-01-03)\n\n\n### Bug Fixes\n\n* Disallow vulnerable guzzle versions ([#2536](https://github.com/googleapis/google-api-php-client/issues/2536)) ([d1830ed](https://github.com/googleapis/google-api-php-client/commit/d1830ede17114a4951ab9e60b3b9bcd9393b8668))\n* Php 8.3 deprecated get_class method call without argument ([#2509](https://github.com/googleapis/google-api-php-client/issues/2509)) ([8c66021](https://github.com/googleapis/google-api-php-client/commit/8c6602119b631e1a9da4dbe219af18d51c8dab8e))\n* Phpseclib security vulnerability ([#2524](https://github.com/googleapis/google-api-php-client/issues/2524)) ([73705c2](https://github.com/googleapis/google-api-php-client/commit/73705c2a65bfc01fa6d7717b7f401b8288fe0587))\n\n## [2.15.1](https://github.com/googleapis/google-api-php-client/compare/v2.15.0...v2.15.1) (2023-09-12)\n\n\n### Bug Fixes\n\n* Upgrade min phpseclib version ([#2499](https://github.com/googleapis/google-api-php-client/issues/2499)) ([8e7fae2](https://github.com/googleapis/google-api-php-client/commit/8e7fae2b79cfc1b72026347abf6314d91442a018))\n\n## [2.15.0](https://github.com/googleapis/google-api-php-client/compare/v2.14.0...v2.15.0) (2023-05-18)\n\n\n### Features\n\n* Add pkce support and upgrade examples ([#2438](https://github.com/googleapis/google-api-php-client/issues/2438)) ([bded223](https://github.com/googleapis/google-api-php-client/commit/bded223ece445a6130cde82417b20180b1d6698a))\n* Drop support for 7.3 and below ([#2431](https://github.com/googleapis/google-api-php-client/issues/2431)) ([c765b37](https://github.com/googleapis/google-api-php-client/commit/c765b379e95ab272b6a87aa802d9f5507eaeb2e7))\n\n## [2.14.0](https://github.com/googleapis/google-api-php-client/compare/v2.13.2...v2.14.0) (2023-05-11)\n\n\n### Features\n\n* User-supplied query params for auth url ([#2432](https://github.com/googleapis/google-api-php-client/issues/2432)) ([74a7d7b](https://github.com/googleapis/google-api-php-client/commit/74a7d7b838acb08afc02b449f338fbe6577cb03c))\n\n## [2.13.2](https://github.com/googleapis/google-api-php-client/compare/v2.13.1...v2.13.2) (2023-03-23)\n\n\n### Bug Fixes\n\n* Calling class_exists with null in Google\\Model ([#2405](https://github.com/googleapis/google-api-php-client/issues/2405)) ([5ed4edc](https://github.com/googleapis/google-api-php-client/commit/5ed4edc9315110a715e9763d27ee6761e1aaa00a))\n\n## [2.13.1](https://github.com/googleapis/google-api-php-client/compare/v2.13.0...v2.13.1) (2023-03-13)\n\n\n### Bug Fixes\n\n* Allow dynamic properties on model classes ([#2408](https://github.com/googleapis/google-api-php-client/issues/2408)) ([11080d5](https://github.com/googleapis/google-api-php-client/commit/11080d5e85a040751a13aca8131f93c7d910db11))\n\n## [2.13.0](https://github.com/googleapis/google-api-php-client/compare/v2.12.6...v2.13.0) (2022-12-19)\n\n\n### Features\n\n* Make auth http client config extends from default client config ([#2348](https://github.com/googleapis/google-api-php-client/issues/2348)) ([2640250](https://github.com/googleapis/google-api-php-client/commit/2640250c7bab479f378972733dcc0a3e9b2e14f8))\n\n\n### Bug Fixes\n\n* Don't send content-type header if no post body exists ([#2288](https://github.com/googleapis/google-api-php-client/issues/2288)) ([654c0e2](https://github.com/googleapis/google-api-php-client/commit/654c0e29ab78aba8bfef52fd3d06a3b2b39c4e0d))\n* Ensure new redirect_uri propogates to OAuth2 class ([#2282](https://github.com/googleapis/google-api-php-client/issues/2282)) ([a69131b](https://github.com/googleapis/google-api-php-client/commit/a69131b6488735d112a529a278cfc8b875e18647))\n* Lint errors ([#2315](https://github.com/googleapis/google-api-php-client/issues/2315)) ([88cc63c](https://github.com/googleapis/google-api-php-client/commit/88cc63c38b0cf88629f66fdf8ba6006f6c6d5a2c))\n* Update accounts.google.com authorization URI ([#2275](https://github.com/googleapis/google-api-php-client/issues/2275)) ([b2624d2](https://github.com/googleapis/google-api-php-client/commit/b2624d21fce894126b9975a872cf5cda8038b254))\n"
  },
  {
    "path": "lib/Google/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project,\nand in the interest of fostering an open and welcoming community,\nwe pledge to respect all people who contribute through reporting issues,\nposting feature requests, updating documentation,\nsubmitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project\na harassment-free experience for everyone,\nregardless of level of experience, gender, gender identity and expression,\nsexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery\n* Personal attacks\n* Trolling or insulting/derogatory comments\n* Public or private harassment\n* Publishing other's private information,\nsuch as physical or electronic\naddresses, without explicit permission\n* Other unethical or unprofessional conduct.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct.\nBy adopting this Code of Conduct,\nproject maintainers commit themselves to fairly and consistently\napplying these principles to every aspect of managing this project.\nProject maintainers who do not follow or enforce the Code of Conduct\nmay be permanently removed from the project team.\n\nThis code of conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior\nmay be reported by opening an issue\nor contacting one or more of the project maintainers.\n\nThis Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,\navailable at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)\n"
  },
  {
    "path": "lib/Google/LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction,\nand distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by\nthe copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all\nother entities that control, are controlled by, or are under common\ncontrol with that entity. For the purposes of this definition,\n\"control\" means (i) the power, direct or indirect, to cause the\ndirection or management of such entity, whether by contract or\notherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity\nexercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications,\nincluding but not limited to software source code, documentation\nsource, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical\ntransformation or translation of a Source form, including but\nnot limited to compiled object code, generated documentation,\nand conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or\nObject form, made available under the License, as indicated by a\ncopyright notice that is included in or attached to the work\n(an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object\nform, that is based on (or derived from) the Work and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship. For the purposes\nof this License, Derivative Works shall not include works that remain\nseparable from, or merely link (or bind by name) to the interfaces of,\nthe Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including\nthe original version of the Work and any modifications or additions\nto that Work or Derivative Works thereof, that is intentionally\nsubmitted to Licensor for inclusion in the Work by the copyright owner\nor by an individual or Legal Entity authorized to submit on behalf of\nthe copyright owner. For the purposes of this definition, \"submitted\"\nmeans any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems,\nand issue tracking systems that are managed by, or on behalf of, the\nLicensor for the purpose of discussing and improving the Work, but\nexcluding communication that is conspicuously marked or otherwise\ndesignated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity\non behalf of whom a Contribution has been received by Licensor and\nsubsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\ncopyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the\nWork and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\n(except as stated in this section) patent license to make, have made,\nuse, offer to sell, sell, import, and otherwise transfer the Work,\nwhere such license applies only to those patent claims licensable\nby such Contributor that are necessarily infringed by their\nContribution(s) alone or by combination of their Contribution(s)\nwith the Work to which such Contribution(s) was submitted. If You\ninstitute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work\nor a Contribution incorporated within the Work constitutes direct\nor contributory patent infringement, then any patent licenses\ngranted to You under this License for that Work shall terminate\nas of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\nWork or Derivative Works thereof in any medium, with or without\nmodifications, and in Source or Object form, provided that You\nmeet the following conditions:\n\n(a) You must give any other recipients of the Work or\nDerivative Works a copy of this License; and\n\n(b) You must cause any modified files to carry prominent notices\nstating that You changed the files; and\n\n(c) You must retain, in the Source form of any Derivative Works\nthat You distribute, all copyright, patent, trademark, and\nattribution notices from the Source form of the Work,\nexcluding those notices that do not pertain to any part of\nthe Derivative Works; and\n\n(d) If the Work includes a \"NOTICE\" text file as part of its\ndistribution, then any Derivative Works that You distribute must\ninclude a readable copy of the attribution notices contained\nwithin such NOTICE file, excluding those notices that do not\npertain to any part of the Derivative Works, in at least one\nof the following places: within a NOTICE text file distributed\nas part of the Derivative Works; within the Source form or\ndocumentation, if provided along with the Derivative Works; or,\nwithin a display generated by the Derivative Works, if and\nwherever such third-party notices normally appear. The contents\nof the NOTICE file are for informational purposes only and\ndo not modify the License. You may add Your own attribution\nnotices within Derivative Works that You distribute, alongside\nor as an addendum to the NOTICE text from the Work, provided\nthat such additional attribution notices cannot be construed\nas modifying the License.\n\nYou may add Your own copyright statement to Your modifications and\nmay provide additional or different license terms and conditions\nfor use, reproduction, or distribution of Your modifications, or\nfor any such Derivative Works as a whole, provided Your use,\nreproduction, and distribution of the Work otherwise complies with\nthe conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\nany Contribution intentionally submitted for inclusion in the Work\nby You to the Licensor shall be under the terms and conditions of\nthis License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify\nthe terms of any separate license agreement you may have executed\nwith Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\nnames, trademarks, service marks, or product names of the Licensor,\nexcept as required for reasonable and customary use in describing the\norigin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\nagreed to in writing, Licensor provides the Work (and each\nContributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied, including, without limitation, any warranties or conditions\nof TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\nPARTICULAR PURPOSE. You are solely responsible for determining the\nappropriateness of using or redistributing the Work and assume any\nrisks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\nwhether in tort (including negligence), contract, or otherwise,\nunless required by applicable law (such as deliberate and grossly\nnegligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special,\nincidental, or consequential damages of any character arising as a\nresult of this License or out of the use or inability to use the\nWork (including but not limited to damages for loss of goodwill,\nwork stoppage, computer failure or malfunction, or any and all\nother commercial damages or losses), even if such Contributor\nhas been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\nthe Work or Derivative Works thereof, You may choose to offer,\nand charge a fee for, acceptance of support, warranty, indemnity,\nor other liability obligations and/or rights consistent with this\nLicense. However, in accepting such obligations, You may act only\non Your own behalf and on Your sole responsibility, not on behalf\nof any other Contributor, and only if You agree to indemnify,\ndefend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason\nof your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\nTo apply the Apache License to your work, attach the following\nboilerplate notice, with the fields enclosed by brackets \"[]\"\nreplaced with your own identifying information. (Don't include\nthe brackets!) The text should be enclosed in the appropriate\ncomment syntax for the file format. We also recommend that a\nfile or class name and description of purpose be included on the\nsame \"printed page\" as the copyright notice for easier\nidentification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n"
  },
  {
    "path": "lib/Google/README.md",
    "content": "![](https://github.com/googleapis/google-api-php-client/workflows/.github/workflows/tests.yml/badge.svg)\n\n# Google APIs Client Library for PHP #\n\n**NOTE**: please check to see if the package you'd like to install is available in our\nlist of [Google cloud packages](https://cloud.google.com/php/docs/reference) first, as\nthese are the recommended libraries.\n\n<dl>\n  <dt>Reference Docs</dt><dd><a href=\"https://googleapis.github.io/google-api-php-client/\">https://googleapis.github.io/google-api-php-client/</a></dd>\n  <dt>License</dt><dd>Apache 2.0</dd>\n</dl>\n\nThe Google API Client Library enables you to work with Google APIs such as Gmail, Drive or YouTube on your server.\n\nThese client libraries are officially supported by Google. However, the libraries are considered complete and are in maintenance mode. This means that we will address critical bugs and security issues but will not add any new features.\n\n## Google Cloud Platform\n\nFor Google Cloud Platform APIs such as [Datastore][cloud-datastore], [Cloud Storage][cloud-storage], [Pub/Sub][cloud-pubsub], and [Compute Engine][cloud-compute], we recommend using the Google Cloud client libraries. For a complete list of supported Google Cloud client libraries, see [googleapis/google-cloud-php](https://github.com/googleapis/google-cloud-php).\n\n[cloud-datastore]: https://github.com/googleapis/google-cloud-php-datastore\n[cloud-pubsub]: https://github.com/googleapis/google-cloud-php-pubsub\n[cloud-storage]: https://github.com/googleapis/google-cloud-php-storage\n[cloud-compute]: https://github.com/googleapis/google-cloud-php-compute\n\n## Requirements ##\n* [PHP 8.0 or higher](https://www.php.net/)\n\n## Developer Documentation ##\n\nThe [docs folder](docs/) provides detailed guides for using this library.\n\n## Installation ##\n\nYou can use **Composer** or simply **Download the Release**\n\n### Composer\n\nThe preferred method is via [composer](https://getcomposer.org/). Follow the\n[installation instructions](https://getcomposer.org/doc/00-intro.md) if you do not already have\ncomposer installed.\n\nOnce composer is installed, execute the following command in your project root to install this library:\n\n```sh\ncomposer require google/apiclient\n```\n\nIf you're facing a timeout error then either increase the timeout for composer by adding the env flag as `COMPOSER_PROCESS_TIMEOUT=600 composer install` or you can put this in the `config` section of the composer schema:\n```\n{\n    \"config\": {\n        \"process-timeout\": 600\n    }\n}\n```\n\nFinally, be sure to include the autoloader:\n\n```php\nrequire_once '/path/to/your-project/vendor/autoload.php';\n```\n\nThis library relies on `google/apiclient-services`. That library provides up-to-date API wrappers for a large number of Google APIs. In order that users may make use of the latest API clients, this library does not pin to a specific version of `google/apiclient-services`. **In order to prevent the accidental installation of API wrappers with breaking changes**, it is highly recommended that you pin to the [latest version](https://github.com/googleapis/google-api-php-client-services/releases) yourself prior to using this library in production.\n\n#### Cleaning up unused services\n\nThere are over 200 Google API services. The chances are good that you will not\nwant them all. In order to avoid shipping these dependencies with your code,\nyou can run the `Google\\Task\\Composer::cleanup` task and specify the services\nyou want to keep in `composer.json`:\n\n```json\n{\n    \"require\": {\n        \"google/apiclient\": \"^2.15.0\"\n    },\n    \"scripts\": {\n        \"pre-autoload-dump\": \"Google\\\\Task\\\\Composer::cleanup\"\n    },\n    \"extra\": {\n        \"google/apiclient-services\": [\n            \"Drive\",\n            \"YouTube\"\n        ]\n    }\n}\n```\n\nThis example will remove all services other than \"Drive\" and \"YouTube\" when\n`composer update` or a fresh `composer install` is run.\n\n**IMPORTANT**: If you add any services back in `composer.json`, you will need to\nremove the `vendor/google/apiclient-services` directory explicitly for the\nchange you made to have effect:\n\n```sh\nrm -r vendor/google/apiclient-services\ncomposer update\n```\n\n**NOTE**: This command performs an exact match on the service name, so to keep\n`YouTubeReporting` and `YouTubeAnalytics` as well, you'd need to add each of\nthem explicitly:\n\n```json\n{\n    \"extra\": {\n        \"google/apiclient-services\": [\n            \"Drive\",\n            \"YouTube\",\n            \"YouTubeAnalytics\",\n            \"YouTubeReporting\"\n        ]\n    }\n}\n```\n\n### Download the Release\n\nIf you prefer not to use composer, you can download the package in its entirety. The [Releases](https://github.com/googleapis/google-api-php-client/releases) page lists all stable versions. Download any file\nwith the name `google-api-php-client-[RELEASE_NAME].zip` for a package including this library and its dependencies.\n\nUncompress the zip file you download, and include the autoloader in your project:\n\n```php\nrequire_once '/path/to/google-api-php-client/vendor/autoload.php';\n```\n\nFor additional installation and setup instructions, see [the documentation](docs/).\n\n## Examples ##\nSee the [`examples/`](examples) directory for examples of the key client features. You can\nview them in your browser by running the php built-in web server.\n\n```\n$ php -S localhost:8000 -t examples/\n```\n\nAnd then browsing to the host and port you specified\n(in the above example, `http://localhost:8000`).\n\n### Basic Example ###\n\n```php\n// include your composer dependencies\nrequire_once 'vendor/autoload.php';\n\n$client = new Google\\Client();\n$client->setApplicationName(\"Client_Library_Examples\");\n$client->setDeveloperKey(\"YOUR_APP_KEY\");\n\n$service = new Google\\Service\\Books($client);\n$query = 'Henry David Thoreau';\n$optParams = [\n  'filter' => 'free-ebooks',\n];\n$results = $service->volumes->listVolumes($query, $optParams);\n\nforeach ($results->getItems() as $item) {\n  echo $item['volumeInfo']['title'], \"<br /> \\n\";\n}\n```\n\n### Authentication with OAuth ###\n\n> An example of this can be seen in [`examples/simple-file-upload.php`](examples/simple-file-upload.php).\n\n1. Follow the instructions to [Create Web Application Credentials](docs/oauth-web.md#create-authorization-credentials)\n1. Download the JSON credentials\n1. Set the path to these credentials using `Google\\Client::setAuthConfig`:\n\n    ```php\n    $client = new Google\\Client();\n    $client->setAuthConfig('/path/to/client_credentials.json');\n    ```\n\n1. Set the scopes required for the API you are going to call\n\n    ```php\n    $client->addScope(Google\\Service\\Drive::DRIVE);\n    ```\n\n1. Set your application's redirect URI\n\n    ```php\n    // Your redirect URI can be any registered URI, but in this example\n    // we redirect back to this same page\n    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];\n    $client->setRedirectUri($redirect_uri);\n    ```\n\n1. In the script handling the redirect URI, exchange the authorization code for an access token:\n\n    ```php\n    if (isset($_GET['code'])) {\n        $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);\n    }\n    ```\n\n### Authentication with Service Accounts ###\n\n> An example of this can be seen in [`examples/service-account.php`](examples/service-account.php).\n\nSome APIs\n(such as the [YouTube Data API](https://developers.google.com/youtube/v3/)) do\nnot support service accounts. Check with the specific API documentation if API\ncalls return unexpected 401 or 403 errors.\n\n1. Follow the instructions to [Create a Service Account](docs/oauth-server.md#creating-a-service-account)\n1. Download the JSON credentials\n1. Set the path to these credentials using the `GOOGLE_APPLICATION_CREDENTIALS` environment variable:\n\n    ```php\n    putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');\n    ```\n\n1. Tell the Google client to use your service account credentials to authenticate:\n\n    ```php\n    $client = new Google\\Client();\n    $client->useApplicationDefaultCredentials();\n    ```\n\n1. Set the scopes required for the API you are going to call\n\n    ```php\n    $client->addScope(Google\\Service\\Drive::DRIVE);\n    ```\n\n1. If you have delegated domain-wide access to the service account and you want to impersonate a user account, specify the email address of the user account using the method setSubject:\n\n    ```php\n    $client->setSubject($user_to_impersonate);\n    ```\n\n#### How to use a specific JSON key\n\nIf you want to a specific JSON key instead of using `GOOGLE_APPLICATION_CREDENTIALS` environment variable, you can do this:\n\n```php\n$jsonKey = [\n   'type' => 'service_account',\n   // ...\n];\n$client = new Google\\Client();\n$client->setAuthConfig($jsonKey);\n```\n\n### Making Requests ###\n\nThe classes used to call the API in [google-api-php-client-services](https://github.com/googleapis/google-api-php-client-services) are autogenerated. They map directly to the JSON requests and responses found in the [APIs Explorer](https://developers.google.com/apis-explorer/#p/).\n\nA JSON request to the [Datastore API](https://developers.google.com/apis-explorer/#p/datastore/v1beta3/datastore.projects.runQuery) would look like this:\n\n```\nPOST https://datastore.googleapis.com/v1beta3/projects/YOUR_PROJECT_ID:runQuery?key=YOUR_API_KEY\n```\n```json\n{\n    \"query\": {\n        \"kind\": [{\n            \"name\": \"Book\"\n        }],\n        \"order\": [{\n            \"property\": {\n                \"name\": \"title\"\n            },\n            \"direction\": \"descending\"\n        }],\n        \"limit\": 10\n    }\n}\n```\n\nUsing this library, the same call would look something like this:\n\n```php\n// create the datastore service class\n$datastore = new Google\\Service\\Datastore($client);\n\n// build the query - this maps directly to the JSON\n$query = new Google\\Service\\Datastore\\Query([\n    'kind' => [\n        [\n            'name' => 'Book',\n        ],\n    ],\n    'order' => [\n        'property' => [\n            'name' => 'title',\n        ],\n        'direction' => 'descending',\n    ],\n    'limit' => 10,\n]);\n\n// build the request and response\n$request = new Google\\Service\\Datastore\\RunQueryRequest(['query' => $query]);\n$response = $datastore->projects->runQuery('YOUR_DATASET_ID', $request);\n```\n\nHowever, as each property of the JSON API has a corresponding generated class, the above code could also be written like this:\n\n```php\n// create the datastore service class\n$datastore = new Google\\Service\\Datastore($client);\n\n// build the query\n$request = new Google\\Service\\Datastore_RunQueryRequest();\n$query = new Google\\Service\\Datastore\\Query();\n//   - set the order\n$order = new Google\\Service\\Datastore_PropertyOrder();\n$order->setDirection('descending');\n$property = new Google\\Service\\Datastore\\PropertyReference();\n$property->setName('title');\n$order->setProperty($property);\n$query->setOrder([$order]);\n//   - set the kinds\n$kind = new Google\\Service\\Datastore\\KindExpression();\n$kind->setName('Book');\n$query->setKinds([$kind]);\n//   - set the limit\n$query->setLimit(10);\n\n// add the query to the request and make the request\n$request->setQuery($query);\n$response = $datastore->projects->runQuery('YOUR_DATASET_ID', $request);\n```\n\nThe method used is a matter of preference, but *it will be very difficult to use this library without first understanding the JSON syntax for the API*, so it is recommended to look at the [APIs Explorer](https://developers.google.com/apis-explorer/#p/) before using any of the services here.\n\n### Making HTTP Requests Directly ###\n\nIf Google Authentication is desired for external applications, or a Google API is not available yet in this library, HTTP requests can be made directly.\n\nIf you are installing this client only to authenticate your own HTTP client requests, you should use [`google/auth`](https://github.com/googleapis/google-auth-library-php#call-the-apis) instead.\n\nThe `authorize` method returns an authorized [Guzzle Client](http://docs.guzzlephp.org/), so any request made using the client will contain the corresponding authorization.\n\n```php\n// create the Google client\n$client = new Google\\Client();\n\n/**\n * Set your method for authentication. Depending on the API, This could be\n * directly with an access token, API key, or (recommended) using\n * Application Default Credentials.\n */\n$client->useApplicationDefaultCredentials();\n$client->addScope(Google\\Service\\Plus::PLUS_ME);\n\n// returns a Guzzle HTTP Client\n$httpClient = $client->authorize();\n\n// make an HTTP request\n$response = $httpClient->get('https://www.googleapis.com/plus/v1/people/me');\n```\n\n### Caching ###\n\nIt is recommended to use another caching library to improve performance. This can be done by passing a [PSR-6](https://www.php-fig.org/psr/psr-6/) compatible library to the client:\n\n```php\nuse League\\Flysystem\\Adapter\\Local;\nuse League\\Flysystem\\Filesystem;\nuse Cache\\Adapter\\Filesystem\\FilesystemCachePool;\n\n$filesystemAdapter = new Local(__DIR__.'/');\n$filesystem        = new Filesystem($filesystemAdapter);\n\n$cache = new FilesystemCachePool($filesystem);\n$client->setCache($cache);\n```\n\nIn this example we use [PHP Cache](http://www.php-cache.com/). Add this to your project with composer:\n\n```\ncomposer require cache/filesystem-adapter\n```\n\n### Updating Tokens ###\n\nWhen using [Refresh Tokens](https://developers.google.com/identity/protocols/OAuth2InstalledApp#offline) or [Service Account Credentials](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#overview), it may be useful to perform some action when a new access token is granted. To do this, pass a callable to the `setTokenCallback` method on the client:\n\n```php\n$logger = new Monolog\\Logger();\n$tokenCallback = function ($cacheKey, $accessToken) use ($logger) {\n  $logger->debug(sprintf('new access token received at cache key %s', $cacheKey));\n};\n$client->setTokenCallback($tokenCallback);\n```\n\n### Debugging Your HTTP Request using Charles ###\n\nIt is often very useful to debug your API calls by viewing the raw HTTP request. This library supports the use of [Charles Web Proxy](https://www.charlesproxy.com/documentation/getting-started/). Download and run Charles, and then capture all HTTP traffic through Charles with the following code:\n\n```php\n// FOR DEBUGGING ONLY\n$httpClient = new GuzzleHttp\\Client([\n    'proxy' => 'localhost:8888', // by default, Charles runs on localhost port 8888\n    'verify' => false, // otherwise HTTPS requests will fail.\n]);\n\n$client = new Google\\Client();\n$client->setHttpClient($httpClient);\n```\n\nNow all calls made by this library will appear in the Charles UI.\n\nOne additional step is required in Charles to view SSL requests. Go to **Charles > Proxy > SSL Proxying Settings** and add the domain you'd like captured. In the case of the Google APIs, this is usually `*.googleapis.com`.\n\n### Controlling HTTP Client Configuration Directly\n\nGoogle API Client uses [Guzzle](http://docs.guzzlephp.org/) as its default HTTP client. That means that you can control your HTTP requests in the same manner you would for any application using Guzzle.\n\nLet's say, for instance, we wished to apply a referrer to each request.\n\n```php\nuse GuzzleHttp\\Client;\n\n$httpClient = new Client([\n    'headers' => [\n        'referer' => 'mysite.com'\n    ]\n]);\n\n$client = new Google\\Client();\n$client->setHttpClient($httpClient);\n```\n\nOther Guzzle features such as [Handlers and Middleware](http://docs.guzzlephp.org/en/stable/handlers-and-middleware.html) offer even more control.\n\n### Partial Consent and Granted Scopes\n\nWhen using OAuth2 3LO (e.g. you're a client requesting credentials from a 3rd\nparty, such as in the [simple file upload example](examples/simple-file-upload.php)),\nyou may want to take advantage of Partial Consent.\n\nTo allow clients to only grant certain scopes in the OAuth2 screen, pass the\nquerystring parameter for `enable_serial_consent` when generating the\nauthorization URL:\n\n```php\n$authUrl = $client->createAuthUrl($scope, ['enable_serial_consent' => 'true']);\n```\n\nOnce the flow is completed, you can see which scopes were granted by calling\n`getGrantedScope` on the OAuth2 object:\n\n```php\n// Space-separated string of granted scopes if it exists, otherwise null.\necho $client->getOAuth2Service()->getGrantedScope();\n```\n\n### Service Specific Examples ###\n\nYouTube: https://github.com/youtube/api-samples/tree/master/php\n\n## How Do I Contribute? ##\n\nPlease see the [contributing](.github/CONTRIBUTING.md) page for more information. In particular, we love pull requests - but please make sure to sign the contributor license agreement.\n\n## Frequently Asked Questions ##\n\n### What do I do if something isn't working? ###\n\nFor support with the library the best place to ask is via the google-api-php-client tag on StackOverflow: https://stackoverflow.com/questions/tagged/google-api-php-client\n\nIf there is a specific bug with the library, please [file an issue](https://github.com/googleapis/google-api-php-client/issues) in the GitHub issues tracker, including an example of the failing code and any specific errors retrieved. Feature requests can also be filed, as long as they are core library requests, and not-API specific: for those, refer to the documentation for the individual APIs for the best place to file requests. Please try to provide a clear statement of the problem that the feature would address.\n\n### I want an example of X! ###\n\nIf X is a feature of the library, file away! If X is an example of using a specific service, the best place to go is to the teams for those specific APIs - our preference is to link to their examples rather than add them to the library, as they can then pin to specific versions of the library. If you have any examples for other APIs, let us know and we will happily add a link to the README above!\n\n### Why do some Google\\Service classes have weird names? ###\n\nThe _Google\\Service_ classes are generally automatically generated from the API discovery documents: https://developers.google.com/discovery/. Sometimes new features are added to APIs with unusual names, which can cause some unexpected or non-standard style naming in the PHP classes.\n\n### How do I deal with non-JSON response types? ###\n\nSome services return XML or similar by default, rather than JSON, which is what the library supports. You can request a JSON response by adding an 'alt' argument to optional params that is normally the last argument to a method call:\n\n```php\n$opt_params = array(\n  'alt' => \"json\"\n);\n```\n\n### How do I set a field to null? ###\n\nThe library strips out nulls from the objects sent to the Google APIs as it is the default value of all of the uninitialized properties. To work around this, set the field you want to null to `Google\\Model::NULL_VALUE`. This is a placeholder that will be replaced with a true null when sent over the wire.\n\n## Code Quality ##\n\nRun the PHPUnit tests with PHPUnit. You can configure an API key and token in BaseTest.php to run all calls, but this will require some setup on the Google Developer Console.\n\n    phpunit tests/\n\n### Coding Style\n\nTo check for coding style violations, run\n\n```\nvendor/bin/phpcs src --standard=style/ruleset.xml -np\n```\n\nTo automatically fix (fixable) coding style violations, run\n\n```\nvendor/bin/phpcbf src --standard=style/ruleset.xml\n```\n"
  },
  {
    "path": "lib/Google/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/UPGRADING.md",
    "content": "Google API Client Upgrade Guide\n===============================\n\n2.x to 2.10.0\n-------------\n\n### Namespaces\n\nThe Google API Client for PHP now uses namespaces for all classes. Code using\nthe legacy classnames will continue to work, but it is advised to upgrade to the\nunderspaced names, as the legacy classnames will be deprecated some time in the\nfuture.\n\n**Before**\n\n```php\n$client = new Google_Client();\n$service = new Google_Service_Books($client);\n```\n\n**After**\n```php\n$client = new Google\\Client();\n$service = new Google\\Service\\Books($client);\n```\n\n### Service class constructors\n\nService class constructors now accept an optional `Google\\Client|array` parameter\nas their first argument, rather than requiring an instance of `Google\\Client`.\n\n**Before**\n\n```php\n$client = new Google_Client();\n$client->setApplicationName(\"Client_Library_Examples\");\n$client->setDeveloperKey(\"YOUR_APP_KEY\");\n\n$service = new Google_Service_Books($client);\n```\n\n**After**\n\n```php\n$service = new Google\\Service\\Books([\n    'application_name' => \"Client_Library_Examples\",\n    'developer_key'    => \"YOUR_APP_KEY\",\n]);\n```\n\n1.0 to 2.0\n----------\n\nThe Google API Client for PHP has undergone major internal changes in `2.0`. Please read through\nthe list below in order to upgrade to the latest version:\n\n## Installation now uses `Composer`\n\n**Before**\n\nThe project was cloned in your project and you would run the autoloader from wherever:\n\n```php\n// the autoload file was included\nrequire_once 'google-api-php-client/src/Google/autoload.php'; // or wherever autoload.php is located\n// OR classes were added one-by-one\nrequire_once 'Google/Client.php';\nrequire_once 'Google/Service/YouTube.php';\n```\n\n**After**\n\nThis library now uses [composer](https://getcomposer.org) (We suggest installing\ncomposer [globally](http://symfony.com/doc/current/cookbook/composer.html)). Add this library by\nrunning the following in the root of your project:\n\n```\n$ composer require google/apiclient:~2.0\n```\n\nThis will install this library and generate an autoload file in `vendor/autoload.php` in the root\nof your project. You can now include this library with the following code:\n\n```php\nrequire_once 'vendor/autoload.php';\n```\n\n## Access Tokens are passed around as arrays instead of JSON strings\n\n**Before**\n\n```php\n$accessToken = $client->getAccessToken();\nprint_r($accessToken);\n// would output:\n// string(153) \"{\"access_token\":\"ya29.FAKsaByOPoddfzvKRo_LBpWWCpVTiAm4BjsvBwxtN7IgSNoUfcErBk_VPl4iAiE1ntb_\",\"token_type\":\"Bearer\",\"expires_in\":3593,\"created\":1445548590}\"\nfile_put_contents($credentialsPath, $accessToken);\n```\n\n**After**\n\n```php\n$accessToken = $client->getAccessToken();\nprint_r($accessToken);\n// will output:\n// array(4) {\n//   [\"access_token\"]=>\n//   string(73) \"ya29.FAKsaByOPoddfzvKRo_LBpWWCpVTiAm4BjsvBwxtN7IgSNoUfcErBk_VPl4iAiE1ntb_\"\n//   [\"token_type\"]=>\n//   string(6) \"Bearer\"\n//   [\"expires_in\"]=>\n//   int(3593)\n//   [\"created\"]=>\n//   int(1445548590)\n// }\nfile_put_contents($credentialsPath, json_encode($accessToken));\n```\n\n## ID Token data is returned as an array\n\n**Before**\n\n```php\n$ticket = $client->verifyIdToken($idToken);\n$data = $ticket->getAttributes();\n$userId = $data['payload']['sub'];\n```\n\n**After**\n\n```php\n$userData = $client->verifyIdToken($idToken);\n$userId = $userData['sub'];\n```\n\n## `Google_Auth_AssertionCredentials` has been removed\n\nFor service accounts, we now use `setAuthConfig` or `useApplicationDefaultCredentials`\n\n**Before**\n\n```php\n$client_email = '1234567890-a1b2c3d4e5f6g7h8i@developer.gserviceaccount.com';\n$private_key = file_get_contents('MyProject.p12');\n$scopes = array('https://www.googleapis.com/auth/sqlservice.admin');\n$credentials = new Google_Auth_AssertionCredentials(\n    $client_email,\n    $scopes,\n    $private_key\n);\n```\n\n**After**\n\n```php\n$client->setAuthConfig('/path/to/service-account.json');\n\n// OR use environment variables (recommended)\n\nputenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');\n$client->useApplicationDefaultCredentials();\n```\n\n> Note: P12s are deprecated in favor of service account JSON, which can be generated in the\n> Credentials section of Google Developer Console.\n\nIn order to impersonate a user, call `setSubject` when your service account\ncredentials are being used.\n\n**Before**\n\n```php\n$user_to_impersonate = 'user@example.org';\n$credentials = new Google_Auth_AssertionCredentials(\n    $client_email,\n    $scopes,\n    $private_key,\n    'notasecret',                                 // Default P12 password\n    'http://oauth.net/grant_type/jwt/1.0/bearer', // Default grant type\n    $user_to_impersonate,\n);\n```\n\n**After**\n\n```php\n$user_to_impersonate = 'user@example.org';\n$client->setSubject($user_to_impersonate);\n```\n\nAdditionally, `Google_Client::loadServiceAccountJson` has been removed in favor\nof `Google_Client::setAuthConfig`:\n\n**Before**\n\n```php\n$scopes = [ Google_Service_Books::BOOKS ];\n$client->loadServiceAccountJson('/path/to/service-account.json', $scopes);\n```\n\n**After**\n\n```php\n$scopes = [ Google_Service_Books::BOOKS ];\n$client->setAuthConfig('/path/to/service-account.json');\n$client->setScopes($scopes);\n```\n\n## `Google_Auth_AppIdentity` has been removed\n\nFor App Engine authentication, we now use the underlying [`google/auth`][Google Auth] and\ncall `useApplicationDefaultCredentials`:\n\n**Before**\n\n```php\n$client->setAuth(new Google_Auth_AppIdentity($client));\n$client->getAuth()\n    ->authenticateForScope('https://www.googleapis.com/auth/sqlservice.admin')\n```\n\n**After**\n\n```php\n$client->useApplicationDefaultCredentials();\n$client->addScope('https://www.googleapis.com/auth/sqlservice.admin');\n```\n\nThis will detect when the App Engine environment is present, and use the appropriate credentials.\n\n## `Google_Auth_Abstract` classes have been removed\n\n[`google/auth`][Google Auth] is now used for authentication. As a result, all\n`Google_Auth`-related functionality has been removed. The methods that were a part of\n`Google_Auth_Abstract` have been moved into the `Google_Client` object.\n\n**Before**\n\n```php\n$request = new Google_Http_Request();\n$client->getAuth()->sign($request);\n```\n\n**After**\n\n```php\n// create an authorized HTTP client\n$httpClient = $client->authorize();\n\n// OR add authorization to an existing client\n$httpClient = new GuzzleHttp\\Client();\n$httpClient = $client->authorize($httpClient);\n```\n\n**Before**\n\n```php\n$request = new Google_Http_Request();\n$response = $client->getAuth()->authenticatedRequest($request);\n```\n\n**After**\n\n```php\n$httpClient = $client->authorize();\n$request = new GuzzleHttp\\Psr7\\Request('POST', $url);\n$response = $httpClient->send($request);\n```\n\n> NOTE: `$request` can be any class implementing\n> `Psr\\Http\\Message\\RequestInterface`\n\nIn addition, other methods that were callable on `Google_Auth_OAuth2` are now called\non the `Google_Client` object:\n\n**Before**\n\n```php\n$client->getAuth()->refreshToken($token);\n$client->getAuth()->refreshTokenWithAssertion();\n$client->getAuth()->revokeToken($token);\n$client->getAuth()->isAccessTokenExpired();\n```\n\n**After**\n\n```php\n$client->refreshToken($token);\n$client->refreshTokenWithAssertion();\n$client->revokeToken($token);\n$client->isAccessTokenExpired();\n```\n\n## PHP 5.6 is now the minimum supported PHP version\n\nThis was previously `PHP 5.2`. If you still need to use PHP 5.2, please continue to use\nthe [v1-master](https://github.com/google/google-api-php-client/tree/v1-master) branch.\n\n## Guzzle and PSR-7 are used for HTTP Requests\n\nThe HTTP library Guzzle is used for all HTTP Requests. By default, [`Guzzle 6`][Guzzle 6]\nis used, but this library is also compatible with [`Guzzle 5`][Guzzle 5]. As a result,\nall `Google_IO`-related functionality and `Google_Http`-related functionality has been\nchanged or removed.\n\n1. Removed `Google_Http_Request`\n1. Removed `Google_IO_Abstract`, `Google_IO_Exception`, `Google_IO_Curl`, and `Google_IO_Stream`\n1. Removed methods `Google_Client::getIo` and `Google_Client::setIo`\n1. Refactored `Google_Http_Batch` and `Google_Http_MediaFileUpload` for Guzzle\n1. Added `Google_Client::getHttpClient` and `Google_Client::setHttpClient` for getting and\nsetting the Guzzle `GuzzleHttp\\ClientInterface` object.\n\n> NOTE: `PSR-7`-compatible libraries can now be used with this library.\n\n## Other Changes\n\n - [`PSR 3`][PSR 3] `LoggerInterface` is now supported, and [Monolog][Monolog] is used for all\n logging. As a result, all `Google_Logger`-related functionality has been removed:\n    1. Removed `Google_Logger_Abstract`, `Google_Logger_Exception`, `Google_Logger_File`,\n    `Google_Logger_Null`, and `Google_Logger_Psr`\n    1. `Google_Client::setLogger` now requires `Psr\\Log\\LoggerInterface`\n - [`firebase/jwt`][Firebase JWT] is now used for all JWT signing and verifying. As a result, the\n following classes have been changed or removed:\n    1. Removed `Google_Signer_P12`\n    1. Removed `Google_Verifier_Pem`\n    1. Removed `Google_Auth_LoginTicket` (see below)\n - The following classes and methods have been removed in favor of [`google/auth`][Google Auth]:\n    1. Removed methods `Google_Client::getAuth` and `Google_Client::setAuth`\n    1. Removed `Google_Auth_Abstract`\n        - `Google_Auth_Abstract::sign` and `Google_Auth_Abstract::authenticatedRequest` have been\n        replaced by `Google_Client::authorize`. See the above examples for more details.\n    1. Removed `Google_Auth_AppIdentity`. This is now supported in [`google/auth`][Google Auth AppIdentity]\n    and is used automatically when `Google_Client::useApplicationDefaultCredentials` is called.\n    1. Removed `Google_Auth_AssertionCredentials`. Use `Google_Client::setAuthConfig` instead.\n    1. Removed `Google_Auth_ComputeEngine`. This is now supported in\n    [`google/auth`][Google Auth GCE], and is used automatically when\n    `Google_Client::useApplicationDefaultCredentials` is called.\n    1. Removed `Google_Auth_Exception`\n    1. Removed `Google_Auth_LoginTicket`. Calls to `Google_Client::verifyIdToken` now returns\n    the payload of the ID Token as an array if the verification is successful.\n    1. Removed `Google_Auth_OAuth2`. This functionality is now supported in [`google/auth`][Google Auth OAuth2] and wrapped in `Google_Client`. These changes will only affect applications calling `Google_Client::getAuth`,\n    as the methods on `Google_Client` have not changed.\n    1. Removed `Google_Auth_Simple`. This is now supported in [`google/auth`][Google Auth Simple]\n    and is used automatically when `Google_Client::setDeveloperKey` is called.\n - `Google_Client::sign` has been replaced by `Google_Client::authorize`. This function\n    now takes a `GuzzleHttp\\ClientInterface` object and uses the following decision tree for\n    authentication:\n    1. Uses Application Default Credentials when\n    `Google_Client::useApplicationDefaultCredentials` is called\n      - Looks for `GOOGLE_APPLICATION_CREDENTIALS` environment variable if set\n      - Looks in `~/.config/gcloud/application_default_credentials.json`\n      - Otherwise, uses `GCECredentials`\n    1. Uses API Key if set (see `Client::setDeveloperKey`)\n    1. Uses Access Token if set (call `Client::setAccessToken`)\n    1. Automatically refreshes access tokens if one is set and the access token is expired\n - Removed `Google_Config`\n - Removed `Google_Utils`\n - [`PSR-6`][PSR 6] cache is used for all caching. As a result:\n    1. Removed `Google_Cache_Abstract`\n    1. Classes `Google_Cache_Apc`, `Google_Cache_File`, `Google_Cache_Memcache`, and\n    `Google_Cache_Null` now implement `Google\\Auth\\CacheInterface`.\n    1. Google Auth provides simple [caching utilities][Google Auth Cache] which\n   are used by default unless you provide alternatives.\n - Removed `$boundary` constructor argument for `Google_Http_MediaFileUpload`\n\n[PSR 3]: https://www.php-fig.org/psr/psr-3/\n[PSR 6]: https://www.php-fig.org/psr/psr-6/\n[Guzzle 5]: https://github.com/guzzle/guzzle\n[Guzzle 6]: http://docs.guzzlephp.org/en/latest/psr7.html\n[Monolog]: https://github.com/Seldaek/monolog\n[Google Auth]: https://github.com/google/google-auth-library-php\n[Google Auth Cache]: https://github.com/googleapis/google-auth-library-php/tree/master/src/Cache\n[Google Auth GCE]: https://github.com/google/google-auth-library-php/blob/master/src/GCECredentials.php\n[Google Auth OAuth2]: https://github.com/google/google-auth-library-php/blob/master/src/OAuth2.php\n[Google Auth Simple]: https://github.com/google/google-auth-library-php/blob/master/src/Simple.php\n[Google Auth AppIdentity]: https://github.com/google/google-auth-library-php/blob/master/src/AppIdentityCredentials.php\n[Firebase JWT]: https://github.com/firebase/php-jwt\n"
  },
  {
    "path": "lib/Google/composer.json",
    "content": "{\n    \"name\": \"google/apiclient\",\n    \"type\": \"library\",\n    \"description\": \"Client library for Google APIs\",\n    \"keywords\": [\"google\"],\n    \"homepage\": \"http://developers.google.com/api-client-library/php\",\n    \"license\": \"Apache-2.0\",\n    \"require\": {\n        \"php\": \"^8.1\",\n        \"google/auth\": \"^1.37\",\n        \"google/apiclient-services\": \"~0.350\",\n        \"firebase/php-jwt\": \"^6.0||^7.0\",\n        \"monolog/monolog\": \"^2.9||^3.0\",\n        \"phpseclib/phpseclib\": \"^3.0.36\",\n        \"guzzlehttp/guzzle\": \"^7.4.5\",\n        \"guzzlehttp/psr7\": \"^2.6\",\n        \"google/cloud-storage\": \"^1.49\",\n        \"google/cloud-core\": \"^1.60\"\n    },\n    \"require-dev\": {\n        \"squizlabs/php_codesniffer\": \"^3.8\",\n        \"symfony/dom-crawler\": \"~2.1\",\n        \"symfony/css-selector\": \"~2.1\",\n        \"phpcompatibility/php-compatibility\": \"^9.2\",\n        \"composer/composer\": \"^2.9.3\",\n        \"phpspec/prophecy-phpunit\": \"^2.1\",\n        \"phpunit/phpunit\": \"^9.6\",\n        \"symfony/process\": \"^6.4\"\n    },\n    \"suggest\": {\n        \"cache/filesystem-adapter\": \"For caching certs and tokens (using Google\\\\Client::setCache)\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Google\\\\\": \"src/\"\n        },\n        \"files\": [\n            \"src/aliases.php\"\n        ],\n        \"classmap\": [\n            \"src/aliases.php\"\n        ]\n    },\n    \"scripts\": {\n        \"pre-autoload-dump\": \"Google\\\\Task\\\\Composer::cleanup\"\n    },\n    \"extra\": {\n        \"google/apiclient-services\": [\n            \"Storage\"\n        ],\n        \"branch-alias\": {\n            \"dev-main\": \"2.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/phpstan.neon.dist",
    "content": "parameters:\n    treatPhpDocTypesAsCertain: false\n    level: 5\n    paths:\n    - src\n"
  },
  {
    "path": "lib/Google/src/AccessToken/Revoke.php",
    "content": "<?php\n\n/*\n * Copyright 2008 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\AccessToken;\n\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Client;\nuse GuzzleHttp\\ClientInterface;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Wrapper around Google Access Tokens which provides convenience functions\n *\n */\nclass Revoke\n{\n    /**\n     * @var ClientInterface The http client\n     */\n    private $http;\n\n    /**\n     * Instantiates the class, but does not initiate the login flow, leaving it\n     * to the discretion of the caller.\n     */\n    public function __construct(?ClientInterface $http = null)\n    {\n        $this->http = $http;\n    }\n\n    /**\n     * Revoke an OAuth2 access token or refresh token. This method will revoke the current access\n     * token, if a token isn't provided.\n     *\n     * @param string|array $token The token (access token or a refresh token) that should be revoked.\n     * @return boolean Returns True if the revocation was successful, otherwise False.\n     */\n    public function revokeToken($token)\n    {\n        if (is_array($token)) {\n            if (isset($token['refresh_token'])) {\n                $token = $token['refresh_token'];\n            } else {\n                $token = $token['access_token'];\n            }\n        }\n\n        $body = Psr7\\Utils::streamFor(http_build_query(['token' => $token]));\n        $request = new Request(\n            'POST',\n            Client::OAUTH2_REVOKE_URI,\n            [\n                'Cache-Control' => 'no-store',\n                'Content-Type'  => 'application/x-www-form-urlencoded',\n            ],\n            $body\n        );\n\n        $httpHandler = HttpHandlerFactory::build($this->http);\n\n        $response = $httpHandler($request);\n\n        return $response->getStatusCode() == 200;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/AccessToken/Verify.php",
    "content": "<?php\n\n/*\n * Copyright 2008 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\AccessToken;\n\nuse DateTime;\nuse DomainException;\nuse Exception;\nuse ExpiredException;\nuse Firebase\\JWT\\ExpiredException as ExpiredExceptionV3;\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\nuse Firebase\\JWT\\SignatureInvalidException;\nuse Google\\Auth\\Cache\\MemoryCacheItemPool;\nuse Google\\Exception as GoogleException;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\ClientInterface;\nuse InvalidArgumentException;\nuse LogicException;\nuse phpseclib3\\Crypt\\AES;\nuse phpseclib3\\Crypt\\PublicKeyLoader;\nuse phpseclib3\\Math\\BigInteger;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * Wrapper around Google Access Tokens which provides convenience functions\n *\n */\nclass Verify\n{\n    const FEDERATED_SIGNON_CERT_URL = 'https://www.googleapis.com/oauth2/v3/certs';\n    const OAUTH2_ISSUER = 'accounts.google.com';\n    const OAUTH2_ISSUER_HTTPS = 'https://accounts.google.com';\n\n    /**\n     * @var ClientInterface The http client\n     */\n    private $http;\n\n    /**\n     * @var CacheItemPoolInterface cache class\n     */\n    private $cache;\n\n    /**\n     * @var \\Firebase\\JWT\\JWT\n     */\n    public $jwt;\n\n    /**\n     * Instantiates the class, but does not initiate the login flow, leaving it\n     * to the discretion of the caller.\n     */\n    public function __construct(\n        ?ClientInterface $http = null,\n        ?CacheItemPoolInterface $cache = null,\n        ?JWT $jwt = null\n    ) {\n        if (null === $http) {\n            $http = new Client();\n        }\n\n        if (null === $cache) {\n            $cache = new MemoryCacheItemPool();\n        }\n\n        $this->http = $http;\n        $this->cache = $cache;\n        $this->jwt = $jwt ?: $this->getJwtService();\n    }\n\n    /**\n     * Verifies an id token and returns the authenticated apiLoginTicket.\n     * Throws an exception if the id token is not valid.\n     * The audience parameter can be used to control which id tokens are\n     * accepted.  By default, the id token must have been issued to this OAuth2 client.\n     *\n     * @param string $idToken the ID token in JWT format\n     * @param string $audience Optional. The audience to verify against JWt \"aud\"\n     * @return array|false the token payload, if successful\n     */\n    public function verifyIdToken($idToken, $audience = null)\n    {\n        if (empty($idToken)) {\n            throw new LogicException('id_token cannot be null');\n        }\n\n        // set phpseclib constants if applicable\n        $this->setPhpsecConstants();\n\n        // Check signature\n        $certs = $this->getFederatedSignOnCerts();\n        foreach ($certs as $cert) {\n            try {\n                $args = [$idToken];\n                $publicKey = $this->getPublicKey($cert);\n                if (class_exists(Key::class)) {\n                    $args[] = new Key($publicKey, 'RS256');\n                } else {\n                    $args[] = $publicKey;\n                    $args[] = ['RS256'];\n                }\n                $payload = \\call_user_func_array([$this->jwt, 'decode'], $args);\n\n                if (property_exists($payload, 'aud')) {\n                    if ($audience && $payload->aud != $audience) {\n                        return false;\n                    }\n                }\n\n                // support HTTP and HTTPS issuers\n                // @see https://developers.google.com/identity/sign-in/web/backend-auth\n                $issuers = [self::OAUTH2_ISSUER, self::OAUTH2_ISSUER_HTTPS];\n                if (!isset($payload->iss) || !in_array($payload->iss, $issuers)) {\n                    return false;\n                }\n\n                return (array)$payload;\n            } catch (ExpiredException $e) { // @phpstan-ignore-line\n                return false;\n            } catch (ExpiredExceptionV3 $e) {\n                return false;\n            } catch (SignatureInvalidException $e) {\n                // continue\n            } catch (DomainException $e) {\n                // continue\n            }\n        }\n\n        return false;\n    }\n\n    private function getCache()\n    {\n        return $this->cache;\n    }\n\n    /**\n     * Retrieve and cache a certificates file.\n     *\n     * @param string $url location\n     * @return array certificates\n     * @throws \\Google\\Exception\n     */\n    private function retrieveCertsFromLocation($url)\n    {\n        // If we're retrieving a local file, just grab it.\n        if (0 !== strpos($url, 'http')) {\n            if (!$file = file_get_contents($url)) {\n                throw new GoogleException(\n                    \"Failed to retrieve verification certificates: '\".\n                    $url.\"'.\"\n                );\n            }\n\n            return json_decode($file, true);\n        }\n\n        // @phpstan-ignore-next-line\n        $response = $this->http->get($url);\n\n        if ($response->getStatusCode() == 200) {\n            return json_decode((string)$response->getBody(), true);\n        }\n        throw new GoogleException(\n            sprintf(\n                'Failed to retrieve verification certificates: \"%s\".',\n                $response->getBody()->getContents()\n            ),\n            $response->getStatusCode()\n        );\n    }\n\n    // Gets federated sign-on certificates to use for verifying identity tokens.\n    // Returns certs as array structure, where keys are key ids, and values\n    // are PEM encoded certificates.\n    private function getFederatedSignOnCerts()\n    {\n        $certs = null;\n        if ($cache = $this->getCache()) {\n            $cacheItem = $cache->getItem('federated_signon_certs_v3');\n            $certs = $cacheItem->get();\n        }\n\n\n        if (!$certs) {\n            $certs = $this->retrieveCertsFromLocation(\n                self::FEDERATED_SIGNON_CERT_URL\n            );\n\n            if ($cache) {\n                $cacheItem->expiresAt(new DateTime('+1 hour'));\n                $cacheItem->set($certs);\n                $cache->save($cacheItem);\n            }\n        }\n\n        if (!isset($certs['keys'])) {\n            throw new InvalidArgumentException(\n                'federated sign-on certs expects \"keys\" to be set'\n            );\n        }\n\n        return $certs['keys'];\n    }\n\n    private function getJwtService()\n    {\n        $jwt = new JWT();\n        if ($jwt::$leeway < 1) {\n            // Ensures JWT leeway is at least 1\n            // @see https://github.com/google/google-api-php-client/issues/827\n            $jwt::$leeway = 1;\n        }\n\n        return $jwt;\n    }\n\n    private function getPublicKey($cert)\n    {\n        $modulus = new BigInteger($this->jwt->urlsafeB64Decode($cert['n']), 256);\n        $exponent = new BigInteger($this->jwt->urlsafeB64Decode($cert['e']), 256);\n        $component = ['n' => $modulus, 'e' => $exponent];\n\n        $loader = PublicKeyLoader::load($component);\n\n        return $loader->toString('PKCS8');\n    }\n\n    /**\n     * phpseclib calls \"phpinfo\" by default, which requires special\n     * whitelisting in the AppEngine VM environment. This function\n     * sets constants to bypass the need for phpseclib to check phpinfo\n     *\n     * @see phpseclib/Math/BigInteger\n     * @see https://github.com/GoogleCloudPlatform/getting-started-php/issues/85\n     */\n    private function setPhpsecConstants()\n    {\n        if (filter_var(getenv('GAE_VM'), FILTER_VALIDATE_BOOLEAN)) {\n            if (!defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {\n                define('MATH_BIGINTEGER_OPENSSL_ENABLED', true);\n            }\n            if (!defined('CRYPT_RSA_MODE')) {\n                define('CRYPT_RSA_MODE', AES::ENGINE_OPENSSL);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/AuthHandler/AuthHandlerFactory.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\AuthHandler;\n\nuse Exception;\nuse GuzzleHttp\\ClientInterface;\n\nclass AuthHandlerFactory\n{\n    /**\n     * Builds out a default http handler for the installed version of guzzle.\n     *\n     * @return Guzzle6AuthHandler|Guzzle7AuthHandler\n     * @throws Exception\n     */\n    public static function build($cache = null, array $cacheConfig = [])\n    {\n        $guzzleVersion = null;\n        if (defined('\\GuzzleHttp\\ClientInterface::MAJOR_VERSION')) {\n            $guzzleVersion = ClientInterface::MAJOR_VERSION;\n        } elseif (defined('\\GuzzleHttp\\ClientInterface::VERSION')) {\n            $guzzleVersion = (int) substr(ClientInterface::VERSION, 0, 1);\n        }\n\n        switch ($guzzleVersion) {\n            case 6:\n                return new Guzzle6AuthHandler($cache, $cacheConfig);\n            case 7:\n                return new Guzzle7AuthHandler($cache, $cacheConfig);\n            default:\n                throw new Exception('Version not supported');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/AuthHandler/Guzzle6AuthHandler.php",
    "content": "<?php\n\nnamespace Google\\AuthHandler;\n\nuse Google\\Auth\\FetchAuthTokenCache;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\Middleware\\AuthTokenMiddleware;\nuse Google\\Auth\\Middleware\\ScopedAccessTokenMiddleware;\nuse Google\\Auth\\Middleware\\SimpleMiddleware;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\ClientInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * This supports Guzzle 6\n */\nclass Guzzle6AuthHandler\n{\n    protected $cache;\n    protected $cacheConfig;\n\n    public function __construct(?CacheItemPoolInterface $cache = null, array $cacheConfig = [])\n    {\n        $this->cache = $cache;\n        $this->cacheConfig = $cacheConfig;\n    }\n\n    public function attachCredentials(\n        ClientInterface $http,\n        FetchAuthTokenInterface $credentials,\n        ?callable $tokenCallback = null\n    ) {\n        // use the provided cache\n        if ($this->cache) {\n            $credentials = new FetchAuthTokenCache(\n                $credentials,\n                $this->cacheConfig,\n                $this->cache\n            );\n        }\n\n        return $this->attachToHttp($http, $credentials, $tokenCallback);\n    }\n\n    public function attachCredentialsCache(\n        ClientInterface $http,\n        FetchAuthTokenCache $credentials,\n        ?callable $tokenCallback = null\n    ) {\n        return $this->attachToHttp($http, $credentials, $tokenCallback);\n    }\n\n    private function attachToHttp(\n        ClientInterface $http,\n        FetchAuthTokenInterface $credentials,\n        ?callable $tokenCallback = null\n    ) {\n        // if we end up needing to make an HTTP request to retrieve credentials, we\n        // can use our existing one, but we need to throw exceptions so the error\n        // bubbles up.\n        $authHttp = $this->createAuthHttp($http);\n        $authHttpHandler = HttpHandlerFactory::build($authHttp);\n        $middleware = new AuthTokenMiddleware(\n            $credentials,\n            $authHttpHandler,\n            $tokenCallback\n        );\n\n        $config = $http->getConfig();\n        $config['handler']->remove('google_auth');\n        $config['handler']->push($middleware, 'google_auth');\n        $config['auth'] = 'google_auth';\n        return new Client($config);\n    }\n\n    public function attachToken(ClientInterface $http, array $token, array $scopes)\n    {\n        $tokenFunc = function ($scopes) use ($token) {\n            return $token['access_token'];\n        };\n\n        // Derive a cache prefix from the token, to ensure setting a new token\n        // results in a cache-miss.\n        // Note: Supplying a custom \"prefix\" will bust this behavior.\n        $cacheConfig = $this->cacheConfig;\n        if (!isset($cacheConfig['prefix']) && isset($token['access_token'])) {\n            $cacheConfig['prefix'] = substr(sha1($token['access_token']), -10);\n        }\n\n        $middleware = new ScopedAccessTokenMiddleware(\n            $tokenFunc,\n            $scopes,\n            $cacheConfig,\n            $this->cache\n        );\n\n        $config = $http->getConfig();\n        $config['handler']->remove('google_auth');\n        $config['handler']->push($middleware, 'google_auth');\n        $config['auth'] = 'scoped';\n        $http = new Client($config);\n\n        return $http;\n    }\n\n    public function attachKey(ClientInterface $http, $key)\n    {\n        $middleware = new SimpleMiddleware(['key' => $key]);\n\n        $config = $http->getConfig();\n        $config['handler']->remove('google_auth');\n        $config['handler']->push($middleware, 'google_auth');\n        $config['auth'] = 'simple';\n        $http = new Client($config);\n\n        return $http;\n    }\n\n    private function createAuthHttp(ClientInterface $http)\n    {\n        return new Client(['http_errors' => true] + $http->getConfig());\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/AuthHandler/Guzzle7AuthHandler.php",
    "content": "<?php\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\AuthHandler;\n\n/**\n * This supports Guzzle 7\n */\nclass Guzzle7AuthHandler extends Guzzle6AuthHandler\n{\n}\n"
  },
  {
    "path": "lib/Google/src/Client.php",
    "content": "<?php\n/*\n * Copyright 2010 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google;\n\nuse BadMethodCallException;\nuse DomainException;\nuse Google\\AccessToken\\Revoke;\nuse Google\\AccessToken\\Verify;\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Google\\Auth\\Cache\\MemoryCacheItemPool;\nuse Google\\Auth\\Credentials\\ServiceAccountCredentials;\nuse Google\\Auth\\Credentials\\UserRefreshCredentials;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\FetchAuthTokenCache;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\OAuth2;\nuse Google\\AuthHandler\\AuthHandlerFactory;\nuse Google\\Http\\REST;\nuse GuzzleHttp\\Client as GuzzleClient;\nuse GuzzleHttp\\ClientInterface;\nuse GuzzleHttp\\Ring\\Client\\StreamHandler;\nuse InvalidArgumentException;\nuse LogicException;\nuse Monolog\\Handler\\StreamHandler as MonologStreamHandler;\nuse Monolog\\Handler\\SyslogHandler as MonologSyslogHandler;\nuse Monolog\\Logger;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Log\\LoggerInterface;\nuse UnexpectedValueException;\n\n/**\n * The Google API Client\n * https://github.com/google/google-api-php-client\n */\nclass Client\n{\n    const LIBVER = \"2.12.6\";\n    const USER_AGENT_SUFFIX = \"google-api-php-client/\";\n    const OAUTH2_REVOKE_URI = 'https://oauth2.googleapis.com/revoke';\n    const OAUTH2_TOKEN_URI = 'https://oauth2.googleapis.com/token';\n    const OAUTH2_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth';\n    const API_BASE_PATH = 'https://www.googleapis.com';\n\n    /**\n     * @var ?OAuth2 $auth\n     */\n    private $auth;\n\n    /**\n     * @var ClientInterface $http\n     */\n    private $http;\n\n    /**\n     * @var ?CacheItemPoolInterface $cache\n     */\n    private $cache;\n\n    /**\n     * @var array access token\n     */\n    private $token;\n\n    /**\n     * @var array $config\n     */\n    private $config;\n\n    /**\n     * @var ?LoggerInterface $logger\n     */\n    private $logger;\n\n    /**\n     * @var ?FetchAuthTokenInterface $credentials\n     */\n    private $credentials;\n\n    /**\n     * @var boolean $deferExecution\n     */\n    private $deferExecution = false;\n\n    /** @var array $scopes */\n    // Scopes requested by the client\n    protected $requestedScopes = [];\n\n    /**\n     * Construct the Google Client.\n     *\n     * @param array $config {\n     *     An array of required and optional arguments.\n     *\n     *     @type string $application_name\n     *           The name of your application\n     *     @type string $base_path\n     *           The base URL for the service. This is only accounted for when calling\n     *           {@see Client::authorize()} directly.\n     *     @type string $client_id\n     *           Your Google Cloud client ID found in https://developers.google.com/console\n     *     @type string $client_secret\n     *           Your Google Cloud client secret found in https://developers.google.com/console\n     *     @type string|array|FetchAuthTokenInterface $credentials\n     *           Can be a path to JSON credentials or an array representing those\n     *           credentials (@see Google\\Client::setAuthConfig), or an instance of\n     *           {@see FetchAuthTokenInterface}.\n     *     @type string|array $scopes\n     *           {@see Google\\Client::setScopes}\n     *     @type string $quota_project\n     *           Sets X-Goog-User-Project, which specifies a user project to bill\n     *           for access charges associated with the request.\n     *     @type string $redirect_uri\n     *     @type string $state\n     *     @type string $developer_key\n     *           Simple API access key, also from the API console. Ensure you get\n     *           a Server key, and not a Browser key.\n     *           **NOTE:** The universe domain is assumed to be \"googleapis.com\" unless\n     *           explicitly set. When setting an API ley directly via this option, there\n     *           is no way to verify the universe domain. Be sure to set the\n     *           \"universe_domain\" option if \"googleapis.com\" is not intended.\n     *     @type bool $use_application_default_credentials\n     *           For use with Google Cloud Platform\n     *           fetch the ApplicationDefaultCredentials, if applicable\n     *           {@see https://developers.google.com/identity/protocols/application-default-credentials}\n     *     @type string $signing_key\n     *     @type string $signing_algorithm\n     *     @type string $subject\n     *     @type string $hd\n     *     @type string $prompt\n     *     @type string $openid\n     *     @type bool $include_granted_scopes\n     *     @type string $login_hint\n     *     @type string $request_visible_actions\n     *     @type string $access_type\n     *     @type string $approval_prompt\n     *     @type array $retry\n     *           Task Runner retry configuration\n     *           {@see \\Google\\Task\\Runner}\n     *     @type array $retry_map\n     *     @type CacheItemPoolInterface $cache\n     *           Cache class implementing {@see CacheItemPoolInterface}. Defaults\n     *           to {@see MemoryCacheItemPool}.\n     *     @type array $cache_config\n     *           Cache config for downstream auth caching.\n     *     @type callable $token_callback\n     *           Function to be called when an access token is fetched. Follows\n     *           the signature `function (string $cacheKey, string $accessToken)`.\n     *     @type \\Firebase\\JWT $jwt\n     *           Service class used in {@see Client::verifyIdToken()}. Explicitly\n     *           pass this in to avoid setting {@see \\Firebase\\JWT::$leeway}\n     *     @type bool $api_format_v2\n     *           Setting api_format_v2 will return more detailed error messages\n     *           from certain APIs.\n     *     @type string $universe_domain\n     *           Setting the universe domain will change the default rootUrl of the service.\n     *           If not set explicitly, the universe domain will be the value provided in the\n     *.          \"GOOGLE_CLOUD_UNIVERSE_DOMAIN\" environment variable, or \"googleapis.com\".\n     *  }\n     */\n    public function __construct(array $config = [])\n    {\n        $this->config = array_merge([\n            'application_name' => '',\n            'base_path' => self::API_BASE_PATH,\n            'client_id' => '',\n            'client_secret' => '',\n            'credentials' => null,\n            'scopes' => null,\n            'quota_project' => null,\n            'redirect_uri' => null,\n            'state' => null,\n            'developer_key' => '',\n            'use_application_default_credentials' => false,\n            'signing_key' => null,\n            'signing_algorithm' => null,\n            'subject' => null,\n            'hd' => '',\n            'prompt' => '',\n            'openid.realm' => '',\n            'include_granted_scopes' => null,\n            'logger' => null,\n            'login_hint' => '',\n            'request_visible_actions' => '',\n            'access_type' => 'online',\n            'approval_prompt' => 'auto',\n            'retry' => [],\n            'retry_map' => null,\n            'cache' => null,\n            'cache_config' => [],\n            'token_callback' => null,\n            'jwt' => null,\n            'api_format_v2' => false,\n            'universe_domain' => getenv('GOOGLE_CLOUD_UNIVERSE_DOMAIN')\n                ?: GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN,\n        ], $config);\n\n        if (!is_null($this->config['credentials'])) {\n            if ($this->config['credentials'] instanceof FetchAuthTokenInterface) {\n                $this->credentials = $this->config['credentials'];\n            } else {\n                $this->setAuthConfig($this->config['credentials']);\n            }\n            unset($this->config['credentials']);\n        }\n\n        if (!is_null($this->config['scopes'])) {\n            $this->setScopes($this->config['scopes']);\n            unset($this->config['scopes']);\n        }\n\n        // Set a default token callback to update the in-memory access token\n        if (is_null($this->config['token_callback'])) {\n            $this->config['token_callback'] = function ($cacheKey, $newAccessToken) {\n                $this->setAccessToken(\n                    [\n                    'access_token' => $newAccessToken,\n                    'expires_in' => 3600, // Google default\n                    'created' => time(),\n                    ]\n                );\n            };\n        }\n\n        if (!is_null($this->config['cache'])) {\n            $this->setCache($this->config['cache']);\n            unset($this->config['cache']);\n        }\n\n        if (!is_null($this->config['logger'])) {\n            $this->setLogger($this->config['logger']);\n            unset($this->config['logger']);\n        }\n    }\n\n    /**\n     * Get a string containing the version of the library.\n     *\n     * @return string\n     */\n    public function getLibraryVersion()\n    {\n        return self::LIBVER;\n    }\n\n    /**\n     * For backwards compatibility\n     * alias for fetchAccessTokenWithAuthCode\n     *\n     * @param string $code string code from accounts.google.com\n     * @return array access token\n     * @deprecated\n     */\n    public function authenticate($code)\n    {\n        return $this->fetchAccessTokenWithAuthCode($code);\n    }\n\n    /**\n     * Attempt to exchange a code for an valid authentication token.\n     * Helper wrapped around the OAuth 2.0 implementation.\n     *\n     * @param string $code code from accounts.google.com\n     * @param string $codeVerifier the code verifier used for PKCE (if applicable)\n     * @return array access token\n     */\n    public function fetchAccessTokenWithAuthCode($code, $codeVerifier = null)\n    {\n        if (strlen($code) == 0) {\n            throw new InvalidArgumentException(\"Invalid code\");\n        }\n\n        $auth = $this->getOAuth2Service();\n        $auth->setCode($code);\n        $auth->setRedirectUri($this->getRedirectUri());\n        if ($codeVerifier) {\n            $auth->setCodeVerifier($codeVerifier);\n        }\n\n        $httpHandler = HttpHandlerFactory::build($this->getHttpClient());\n        $creds = $auth->fetchAuthToken($httpHandler);\n        if ($creds && isset($creds['access_token'])) {\n            $creds['created'] = time();\n            $this->setAccessToken($creds);\n        }\n\n        return $creds;\n    }\n\n    /**\n     * For backwards compatibility\n     * alias for fetchAccessTokenWithAssertion\n     *\n     * @return array access token\n     * @deprecated\n     */\n    public function refreshTokenWithAssertion()\n    {\n        return $this->fetchAccessTokenWithAssertion();\n    }\n\n    /**\n     * Fetches a fresh access token with a given assertion token.\n     * @param ClientInterface $authHttp optional.\n     * @return array access token\n     */\n    public function fetchAccessTokenWithAssertion(?ClientInterface $authHttp = null)\n    {\n        if (!$this->isUsingApplicationDefaultCredentials()) {\n            throw new DomainException(\n                'set the JSON service account credentials using'\n                . ' Google\\Client::setAuthConfig or set the path to your JSON file'\n                . ' with the \"GOOGLE_APPLICATION_CREDENTIALS\" environment variable'\n                . ' and call Google\\Client::useApplicationDefaultCredentials to'\n                . ' refresh a token with assertion.'\n            );\n        }\n\n        $this->getLogger()->log(\n            'info',\n            'OAuth2 access token refresh with Signed JWT assertion grants.'\n        );\n\n        $credentials = $this->createApplicationDefaultCredentials();\n\n        $httpHandler = HttpHandlerFactory::build($authHttp);\n        $creds = $credentials->fetchAuthToken($httpHandler);\n        if ($creds && isset($creds['access_token'])) {\n            $creds['created'] = time();\n            $this->setAccessToken($creds);\n        }\n\n        return $creds;\n    }\n\n    /**\n     * For backwards compatibility\n     * alias for fetchAccessTokenWithRefreshToken\n     *\n     * @param string $refreshToken\n     * @return array access token\n     */\n    public function refreshToken($refreshToken)\n    {\n        return $this->fetchAccessTokenWithRefreshToken($refreshToken);\n    }\n\n    /**\n     * Fetches a fresh OAuth 2.0 access token with the given refresh token.\n     * @param string $refreshToken\n     * @return array access token\n     */\n    public function fetchAccessTokenWithRefreshToken($refreshToken = null)\n    {\n        if (null === $refreshToken) {\n            if (!isset($this->token['refresh_token'])) {\n                throw new LogicException(\n                    'refresh token must be passed in or set as part of setAccessToken'\n                );\n            }\n            $refreshToken = $this->token['refresh_token'];\n        }\n        $this->getLogger()->info('OAuth2 access token refresh');\n        $auth = $this->getOAuth2Service();\n        $auth->setRefreshToken($refreshToken);\n\n        $httpHandler = HttpHandlerFactory::build($this->getHttpClient());\n        $creds = $auth->fetchAuthToken($httpHandler);\n        if ($creds && isset($creds['access_token'])) {\n            $creds['created'] = time();\n            if (!isset($creds['refresh_token'])) {\n                $creds['refresh_token'] = $refreshToken;\n            }\n            $this->setAccessToken($creds);\n        }\n\n        return $creds;\n    }\n\n    /**\n     * Create a URL to obtain user authorization.\n     * The authorization endpoint allows the user to first\n     * authenticate, and then grant/deny the access request.\n     * @param string|array $scope The scope is expressed as an array or list of space-delimited strings.\n     * @param array $queryParams Querystring params to add to the authorization URL.\n     * @return string\n     */\n    public function createAuthUrl($scope = null, array $queryParams = [])\n    {\n        if (empty($scope)) {\n            $scope = $this->prepareScopes();\n        }\n        if (is_array($scope)) {\n            $scope = implode(' ', $scope);\n        }\n\n        // only accept one of prompt or approval_prompt\n        $approvalPrompt = $this->config['prompt']\n            ? null\n            : $this->config['approval_prompt'];\n\n        // include_granted_scopes should be string \"true\", string \"false\", or null\n        $includeGrantedScopes = $this->config['include_granted_scopes'] === null\n            ? null\n            : var_export($this->config['include_granted_scopes'], true);\n\n        $params = array_filter([\n            'access_type' => $this->config['access_type'],\n            'approval_prompt' => $approvalPrompt,\n            'hd' => $this->config['hd'],\n            'include_granted_scopes' => $includeGrantedScopes,\n            'login_hint' => $this->config['login_hint'],\n            'openid.realm' => $this->config['openid.realm'],\n            'prompt' => $this->config['prompt'],\n            'redirect_uri' => $this->config['redirect_uri'],\n            'response_type' => 'code',\n            'scope' => $scope,\n            'state' => $this->config['state'],\n        ]) + $queryParams;\n\n        // If the list of scopes contains plus.login, add request_visible_actions\n        // to auth URL.\n        $rva = $this->config['request_visible_actions'];\n        if (strlen($rva) > 0 && false !== strpos($scope, 'plus.login')) {\n            $params['request_visible_actions'] = $rva;\n        }\n\n        $auth = $this->getOAuth2Service();\n\n        return (string) $auth->buildFullAuthorizationUri($params);\n    }\n\n    /**\n     * Adds auth listeners to the HTTP client based on the credentials\n     * set in the Google API Client object\n     *\n     * @param ClientInterface $http the http client object.\n     * @return ClientInterface the http client object\n     */\n    public function authorize(?ClientInterface $http = null)\n    {\n        $http = $http ?: $this->getHttpClient();\n        $authHandler = $this->getAuthHandler();\n\n        // These conditionals represent the decision tree for authentication\n        //   1.  Check if an instance of Google\\Auth\\FetchAuthTokenInterface has\n        //       been supplied via the \"credentials\" option\n        //   2.  Check for Application Default Credentials\n        //   3a. Check for an Access Token\n        //   3b. If access token exists but is expired, try to refresh it\n        //   4.  Check for API Key\n        if ($this->credentials) {\n            $this->checkUniverseDomain($this->credentials);\n            return $authHandler->attachCredentials(\n                $http,\n                $this->credentials,\n                $this->config['token_callback']\n            );\n        }\n\n        if ($this->isUsingApplicationDefaultCredentials()) {\n            $credentials = $this->createApplicationDefaultCredentials();\n            $this->checkUniverseDomain($credentials);\n            return $authHandler->attachCredentialsCache(\n                $http,\n                $credentials,\n                $this->config['token_callback']\n            );\n        }\n\n        if ($token = $this->getAccessToken()) {\n            $scopes = $this->prepareScopes();\n            // add refresh subscriber to request a new token\n            if (isset($token['refresh_token']) && $this->isAccessTokenExpired()) {\n                $credentials = $this->createUserRefreshCredentials(\n                    $scopes,\n                    $token['refresh_token']\n                );\n                $this->checkUniverseDomain($credentials);\n                return $authHandler->attachCredentials(\n                    $http,\n                    $credentials,\n                    $this->config['token_callback']\n                );\n            }\n\n            return $authHandler->attachToken($http, $token, (array) $scopes);\n        }\n\n        if ($key = $this->config['developer_key']) {\n            return $authHandler->attachKey($http, $key);\n        }\n\n        return $http;\n    }\n\n    /**\n     * Set the configuration to use application default credentials for\n     * authentication\n     *\n     * @see https://developers.google.com/identity/protocols/application-default-credentials\n     * @param boolean $useAppCreds\n     */\n    public function useApplicationDefaultCredentials($useAppCreds = true)\n    {\n        $this->config['use_application_default_credentials'] = $useAppCreds;\n    }\n\n    /**\n     * To prevent useApplicationDefaultCredentials from inappropriately being\n     * called in a conditional\n     *\n     * @see https://developers.google.com/identity/protocols/application-default-credentials\n     */\n    public function isUsingApplicationDefaultCredentials()\n    {\n        return $this->config['use_application_default_credentials'];\n    }\n\n    /**\n     * Set the access token used for requests.\n     *\n     * Note that at the time requests are sent, tokens are cached. A token will be\n     * cached for each combination of service and authentication scopes. If a\n     * cache pool is not provided, creating a new instance of the client will\n     * allow modification of access tokens. If a persistent cache pool is\n     * provided, in order to change the access token, you must clear the cached\n     * token by calling `$client->getCache()->clear()`. (Use caution in this case,\n     * as calling `clear()` will remove all cache items, including any items not\n     * related to Google API PHP Client.)\n     *\n     * **NOTE:** The universe domain is assumed to be \"googleapis.com\" unless\n     * explicitly set. When setting an access token directly via this method, there\n     * is no way to verify the universe domain. Be sure to set the \"universe_domain\"\n     * option if \"googleapis.com\" is not intended.\n     *\n     * @param string|array $token\n     * @throws InvalidArgumentException\n     */\n    public function setAccessToken($token)\n    {\n        if (is_string($token)) {\n            if ($json = json_decode($token, true)) {\n                $token = $json;\n            } else {\n                // assume $token is just the token string\n                $token = [\n                    'access_token' => $token,\n                ];\n            }\n        }\n        if ($token == null) {\n            throw new InvalidArgumentException('invalid json token');\n        }\n        if (!isset($token['access_token'])) {\n            throw new InvalidArgumentException(\"Invalid token format\");\n        }\n        $this->token = $token;\n    }\n\n    public function getAccessToken()\n    {\n        return $this->token;\n    }\n\n    /**\n     * @return string|null\n     */\n    public function getRefreshToken()\n    {\n        if (isset($this->token['refresh_token'])) {\n            return $this->token['refresh_token'];\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns if the access_token is expired.\n     * @return bool Returns True if the access_token is expired.\n     */\n    public function isAccessTokenExpired()\n    {\n        if (!$this->token) {\n            return true;\n        }\n\n        $created = 0;\n        if (isset($this->token['created'])) {\n            $created = $this->token['created'];\n        } elseif (isset($this->token['id_token'])) {\n            // check the ID token for \"iat\"\n            // signature verification is not required here, as we are just\n            // using this for convenience to save a round trip request\n            // to the Google API server\n            $idToken = $this->token['id_token'];\n            if (substr_count($idToken, '.') == 2) {\n                $parts = explode('.', $idToken);\n                $payload = json_decode(base64_decode($parts[1]), true);\n                if ($payload && isset($payload['iat'])) {\n                    $created = $payload['iat'];\n                }\n            }\n        }\n        if (!isset($this->token['expires_in'])) {\n            // if the token does not have an \"expires_in\", then it's considered expired\n            return true;\n        }\n\n        // If the token is set to expire in the next 30 seconds.\n        return ($created + ($this->token['expires_in'] - 30)) < time();\n    }\n\n    /**\n     * @deprecated See UPGRADING.md for more information\n     */\n    public function getAuth()\n    {\n        throw new BadMethodCallException(\n            'This function no longer exists. See UPGRADING.md for more information'\n        );\n    }\n\n    /**\n     * @deprecated See UPGRADING.md for more information\n     */\n    public function setAuth($auth)\n    {\n        throw new BadMethodCallException(\n            'This function no longer exists. See UPGRADING.md for more information'\n        );\n    }\n\n    /**\n     * Set the OAuth 2.0 Client ID.\n     * @param string $clientId\n     */\n    public function setClientId($clientId)\n    {\n        $this->config['client_id'] = $clientId;\n    }\n\n    public function getClientId()\n    {\n        return $this->config['client_id'];\n    }\n\n    /**\n     * Set the OAuth 2.0 Client Secret.\n     * @param string $clientSecret\n     */\n    public function setClientSecret($clientSecret)\n    {\n        $this->config['client_secret'] = $clientSecret;\n    }\n\n    public function getClientSecret()\n    {\n        return $this->config['client_secret'];\n    }\n\n    /**\n     * Set the OAuth 2.0 Redirect URI.\n     * @param string $redirectUri\n     */\n    public function setRedirectUri($redirectUri)\n    {\n        $this->config['redirect_uri'] = $redirectUri;\n    }\n\n    public function getRedirectUri()\n    {\n        return $this->config['redirect_uri'];\n    }\n\n    /**\n     * Set OAuth 2.0 \"state\" parameter to achieve per-request customization.\n     * @see http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2\n     * @param string $state\n     */\n    public function setState($state)\n    {\n        $this->config['state'] = $state;\n    }\n\n    /**\n     * @param string $accessType Possible values for access_type include:\n     *  {@code \"offline\"} to request offline access from the user.\n     *  {@code \"online\"} to request online access from the user.\n     */\n    public function setAccessType($accessType)\n    {\n        $this->config['access_type'] = $accessType;\n    }\n\n    /**\n     * @param string $approvalPrompt Possible values for approval_prompt include:\n     *  {@code \"force\"} to force the approval UI to appear.\n     *  {@code \"auto\"} to request auto-approval when possible. (This is the default value)\n     */\n    public function setApprovalPrompt($approvalPrompt)\n    {\n        $this->config['approval_prompt'] = $approvalPrompt;\n    }\n\n    /**\n     * Set the login hint, email address or sub id.\n     * @param string $loginHint\n     */\n    public function setLoginHint($loginHint)\n    {\n        $this->config['login_hint'] = $loginHint;\n    }\n\n    /**\n     * Set the application name, this is included in the User-Agent HTTP header.\n     * @param string $applicationName\n     */\n    public function setApplicationName($applicationName)\n    {\n        $this->config['application_name'] = $applicationName;\n    }\n\n    /**\n     * If 'plus.login' is included in the list of requested scopes, you can use\n     * this method to define types of app activities that your app will write.\n     * You can find a list of available types here:\n     * @link https://developers.google.com/+/api/moment-types\n     *\n     * @param array $requestVisibleActions Array of app activity types\n     */\n    public function setRequestVisibleActions($requestVisibleActions)\n    {\n        if (is_array($requestVisibleActions)) {\n            $requestVisibleActions = implode(\" \", $requestVisibleActions);\n        }\n        $this->config['request_visible_actions'] = $requestVisibleActions;\n    }\n\n    /**\n     * Set the developer key to use, these are obtained through the API Console.\n     * @see http://code.google.com/apis/console-help/#generatingdevkeys\n     * @param string $developerKey\n     */\n    public function setDeveloperKey($developerKey)\n    {\n        $this->config['developer_key'] = $developerKey;\n    }\n\n    /**\n     * Set the hd (hosted domain) parameter streamlines the login process for\n     * Google Apps hosted accounts. By including the domain of the user, you\n     * restrict sign-in to accounts at that domain.\n     * @param string $hd the domain to use.\n     */\n    public function setHostedDomain($hd)\n    {\n        $this->config['hd'] = $hd;\n    }\n\n    /**\n     * Set the prompt hint. Valid values are none, consent and select_account.\n     * If no value is specified and the user has not previously authorized\n     * access, then the user is shown a consent screen.\n     * @param string $prompt\n     *  {@code \"none\"} Do not display any authentication or consent screens. Must not be specified with other values.\n     *  {@code \"consent\"} Prompt the user for consent.\n     *  {@code \"select_account\"} Prompt the user to select an account.\n     */\n    public function setPrompt($prompt)\n    {\n        $this->config['prompt'] = $prompt;\n    }\n\n    /**\n     * openid.realm is a parameter from the OpenID 2.0 protocol, not from OAuth\n     * 2.0. It is used in OpenID 2.0 requests to signify the URL-space for which\n     * an authentication request is valid.\n     * @param string $realm the URL-space to use.\n     */\n    public function setOpenidRealm($realm)\n    {\n        $this->config['openid.realm'] = $realm;\n    }\n\n    /**\n     * If this is provided with the value true, and the authorization request is\n     * granted, the authorization will include any previous authorizations\n     * granted to this user/application combination for other scopes.\n     * @param bool $include the URL-space to use.\n     */\n    public function setIncludeGrantedScopes($include)\n    {\n        $this->config['include_granted_scopes'] = $include;\n    }\n\n    /**\n     * sets function to be called when an access token is fetched\n     * @param callable $tokenCallback - function ($cacheKey, $accessToken)\n     */\n    public function setTokenCallback(callable $tokenCallback)\n    {\n        $this->config['token_callback'] = $tokenCallback;\n    }\n\n    /**\n     * Revoke an OAuth2 access token or refresh token. This method will revoke the current access\n     * token, if a token isn't provided.\n     *\n     * @param string|array|null $token The token (access token or a refresh token) that should be revoked.\n     * @return boolean Returns True if the revocation was successful, otherwise False.\n     */\n    public function revokeToken($token = null)\n    {\n        $tokenRevoker = new Revoke($this->getHttpClient());\n\n        return $tokenRevoker->revokeToken($token ?: $this->getAccessToken());\n    }\n\n    /**\n     * Verify an id_token. This method will verify the current id_token, if one\n     * isn't provided.\n     *\n     * @throws LogicException If no token was provided and no token was set using `setAccessToken`.\n     * @throws UnexpectedValueException If the token is not a valid JWT.\n     * @param string|null $idToken The token (id_token) that should be verified.\n     * @return array|false Returns the token payload as an array if the verification was\n     * successful, false otherwise.\n     */\n    public function verifyIdToken($idToken = null)\n    {\n        $tokenVerifier = new Verify(\n            $this->getHttpClient(),\n            $this->getCache(),\n            $this->config['jwt']\n        );\n\n        if (null === $idToken) {\n            $token = $this->getAccessToken();\n            if (!isset($token['id_token'])) {\n                throw new LogicException(\n                    'id_token must be passed in or set as part of setAccessToken'\n                );\n            }\n            $idToken = $token['id_token'];\n        }\n\n        return $tokenVerifier->verifyIdToken(\n            $idToken,\n            $this->getClientId()\n        );\n    }\n\n    /**\n     * Set the scopes to be requested. Must be called before createAuthUrl().\n     * Will remove any previously configured scopes.\n     * @param string|array $scope_or_scopes, ie:\n     *    array(\n     *        'https://www.googleapis.com/auth/plus.login',\n     *        'https://www.googleapis.com/auth/moderator'\n     *    );\n     */\n    public function setScopes($scope_or_scopes)\n    {\n        $this->requestedScopes = [];\n        $this->addScope($scope_or_scopes);\n    }\n\n    /**\n     * This functions adds a scope to be requested as part of the OAuth2.0 flow.\n     * Will append any scopes not previously requested to the scope parameter.\n     * A single string will be treated as a scope to request. An array of strings\n     * will each be appended.\n     * @param string|string[] $scope_or_scopes e.g. \"profile\"\n     */\n    public function addScope($scope_or_scopes)\n    {\n        if (is_string($scope_or_scopes) && !in_array($scope_or_scopes, $this->requestedScopes)) {\n            $this->requestedScopes[] = $scope_or_scopes;\n        } elseif (is_array($scope_or_scopes)) {\n            foreach ($scope_or_scopes as $scope) {\n                $this->addScope($scope);\n            }\n        }\n    }\n\n    /**\n     * Returns the list of scopes requested by the client\n     * @return array the list of scopes\n     *\n     */\n    public function getScopes()\n    {\n        return $this->requestedScopes;\n    }\n\n    /**\n     * @return string|null\n     * @visible For Testing\n     */\n    public function prepareScopes()\n    {\n        if (empty($this->requestedScopes)) {\n            return null;\n        }\n\n        return implode(' ', $this->requestedScopes);\n    }\n\n    /**\n     * Helper method to execute deferred HTTP requests.\n     *\n     * @template T\n     * @param RequestInterface $request\n     * @param class-string<T>|false|null $expectedClass\n     * @throws \\Google\\Exception\n     * @return mixed|T|ResponseInterface\n     */\n    public function execute(RequestInterface $request, $expectedClass = null)\n    {\n        $request = $request\n            ->withHeader(\n                'User-Agent',\n                sprintf(\n                    '%s %s%s',\n                    $this->config['application_name'],\n                    self::USER_AGENT_SUFFIX,\n                    $this->getLibraryVersion()\n                )\n            )\n            ->withHeader(\n                'x-goog-api-client',\n                sprintf(\n                    'gl-php/%s gdcl/%s',\n                    phpversion(),\n                    $this->getLibraryVersion()\n                )\n            );\n\n        if ($this->config['api_format_v2']) {\n            $request = $request->withHeader(\n                'X-GOOG-API-FORMAT-VERSION',\n                '2'\n            );\n        }\n\n        // call the authorize method\n        // this is where most of the grunt work is done\n        $http = $this->authorize();\n\n        return REST::execute(\n            $http,\n            $request,\n            $expectedClass,\n            $this->config['retry'],\n            $this->config['retry_map']\n        );\n    }\n\n    /**\n     * Declare whether batch calls should be used. This may increase throughput\n     * by making multiple requests in one connection.\n     *\n     * @param boolean $useBatch True if the batch support should\n     * be enabled. Defaults to False.\n     */\n    public function setUseBatch($useBatch)\n    {\n        // This is actually an alias for setDefer.\n        $this->setDefer($useBatch);\n    }\n\n    /**\n     * Are we running in Google AppEngine?\n     * return bool\n     */\n    public function isAppEngine()\n    {\n        return (isset($_SERVER['SERVER_SOFTWARE']) &&\n            strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false);\n    }\n\n    public function setConfig($name, $value)\n    {\n        $this->config[$name] = $value;\n    }\n\n    public function getConfig($name, $default = null)\n    {\n        return isset($this->config[$name]) ? $this->config[$name] : $default;\n    }\n\n    /**\n     * For backwards compatibility\n     * alias for setAuthConfig\n     *\n     * @param string $file the configuration file\n     * @throws \\Google\\Exception\n     * @deprecated\n     */\n    public function setAuthConfigFile($file)\n    {\n        $this->setAuthConfig($file);\n    }\n\n    /**\n     * Set the auth config from new or deprecated JSON config.\n     * This structure should match the file downloaded from\n     * the \"Download JSON\" button on in the Google Developer\n     * Console.\n     * @param string|array $config the configuration json\n     * @throws \\Google\\Exception\n     */\n    public function setAuthConfig($config)\n    {\n        if (is_string($config)) {\n            if (!file_exists($config)) {\n                throw new InvalidArgumentException(sprintf('file \"%s\" does not exist', $config));\n            }\n\n            $json = file_get_contents($config);\n\n            if (!$config = json_decode($json, true)) {\n                throw new LogicException('invalid json for auth config');\n            }\n        }\n\n        $key = isset($config['installed']) ? 'installed' : 'web';\n        if (isset($config['type']) && $config['type'] == 'service_account') {\n            // @TODO(v3): Remove this, as it isn't accurate. ADC applies only to determining\n            // credentials based on the user's environment.\n            $this->useApplicationDefaultCredentials();\n\n            // set the information from the config\n            $this->setClientId($config['client_id']);\n            $this->config['client_email'] = $config['client_email'];\n            $this->config['signing_key'] = $config['private_key'];\n            $this->config['signing_algorithm'] = 'HS256';\n        } elseif (isset($config[$key])) {\n            // old-style\n            $this->setClientId($config[$key]['client_id']);\n            $this->setClientSecret($config[$key]['client_secret']);\n            if (isset($config[$key]['redirect_uris'])) {\n                $this->setRedirectUri($config[$key]['redirect_uris'][0]);\n            }\n        } else {\n            // new-style\n            $this->setClientId($config['client_id']);\n            $this->setClientSecret($config['client_secret']);\n            if (isset($config['redirect_uris'])) {\n                $this->setRedirectUri($config['redirect_uris'][0]);\n            }\n        }\n    }\n\n    /**\n     * Use when the service account has been delegated domain wide access.\n     *\n     * @param string $subject an email address account to impersonate\n     */\n    public function setSubject($subject)\n    {\n        $this->config['subject'] = $subject;\n    }\n\n    /**\n     * Declare whether making API calls should make the call immediately, or\n     * return a request which can be called with ->execute();\n     *\n     * @param boolean $defer True if calls should not be executed right away.\n     */\n    public function setDefer($defer)\n    {\n        $this->deferExecution = $defer;\n    }\n\n    /**\n     * Whether or not to return raw requests\n     * @return boolean\n     */\n    public function shouldDefer()\n    {\n        return $this->deferExecution;\n    }\n\n    /**\n     * @return OAuth2 implementation\n     */\n    public function getOAuth2Service()\n    {\n        if (!isset($this->auth)) {\n            $this->auth = $this->createOAuth2Service();\n        }\n\n        return $this->auth;\n    }\n\n    /**\n     * create a default google auth object\n     */\n    protected function createOAuth2Service()\n    {\n        $auth = new OAuth2([\n            'clientId'          => $this->getClientId(),\n            'clientSecret'      => $this->getClientSecret(),\n            'authorizationUri'   => self::OAUTH2_AUTH_URL,\n            'tokenCredentialUri' => self::OAUTH2_TOKEN_URI,\n            'redirectUri'       => $this->getRedirectUri(),\n            'issuer'            => $this->config['client_id'],\n            'signingKey'        => $this->config['signing_key'],\n            'signingAlgorithm'  => $this->config['signing_algorithm'],\n        ]);\n\n        return $auth;\n    }\n\n    /**\n     * Set the Cache object\n     * @param CacheItemPoolInterface $cache\n     */\n    public function setCache(CacheItemPoolInterface $cache)\n    {\n        $this->cache = $cache;\n    }\n\n    /**\n     * @return CacheItemPoolInterface\n     */\n    public function getCache()\n    {\n        if (!$this->cache) {\n            $this->cache = $this->createDefaultCache();\n        }\n\n        return $this->cache;\n    }\n\n    /**\n     * @param array $cacheConfig\n     */\n    public function setCacheConfig(array $cacheConfig)\n    {\n        $this->config['cache_config'] = $cacheConfig;\n    }\n\n    /**\n     * Set the Logger object\n     * @param LoggerInterface $logger\n     */\n    public function setLogger(LoggerInterface $logger)\n    {\n        $this->logger = $logger;\n    }\n\n    /**\n     * @return LoggerInterface\n     */\n    public function getLogger()\n    {\n        if (!isset($this->logger)) {\n            $this->logger = $this->createDefaultLogger();\n        }\n\n        return $this->logger;\n    }\n\n    protected function createDefaultLogger()\n    {\n        $logger = new Logger('google-api-php-client');\n        if ($this->isAppEngine()) {\n            $handler = new MonologSyslogHandler('app', LOG_USER, Logger::NOTICE);\n        } else {\n            $handler = new MonologStreamHandler('php://stderr', Logger::NOTICE);\n        }\n        $logger->pushHandler($handler);\n\n        return $logger;\n    }\n\n    protected function createDefaultCache()\n    {\n        return new MemoryCacheItemPool();\n    }\n\n    /**\n     * Set the Http Client object\n     * @param ClientInterface $http\n     */\n    public function setHttpClient(ClientInterface $http)\n    {\n        $this->http = $http;\n    }\n\n    /**\n     * @return ClientInterface\n     */\n    public function getHttpClient()\n    {\n        if (null === $this->http) {\n            $this->http = $this->createDefaultHttpClient();\n        }\n\n        return $this->http;\n    }\n\n    /**\n     * Set the API format version.\n     *\n     * `true` will use V2, which may return more useful error messages.\n     *\n     * @param bool $value\n     */\n    public function setApiFormatV2($value)\n    {\n        $this->config['api_format_v2'] = (bool) $value;\n    }\n\n    protected function createDefaultHttpClient()\n    {\n        $guzzleVersion = null;\n        if (defined('\\GuzzleHttp\\ClientInterface::MAJOR_VERSION')) {\n            $guzzleVersion = ClientInterface::MAJOR_VERSION;\n        } elseif (defined('\\GuzzleHttp\\ClientInterface::VERSION')) {\n            $guzzleVersion = (int)substr(ClientInterface::VERSION, 0, 1);\n        }\n\n        if (5 === $guzzleVersion) {\n            $options = [\n                'base_url' => $this->config['base_path'],\n                'defaults' => ['exceptions' => false],\n            ];\n            if ($this->isAppEngine()) {\n                if (class_exists(StreamHandler::class)) {\n                    // set StreamHandler on AppEngine by default\n                    $options['handler'] = new StreamHandler();\n                    $options['defaults']['verify'] = '/etc/ca-certificates.crt';\n                }\n            }\n        } elseif (6 === $guzzleVersion || 7 === $guzzleVersion) {\n            // guzzle 6 or 7\n            $options = [\n                'base_uri' => $this->config['base_path'],\n                'http_errors' => false,\n            ];\n        } else {\n            throw new LogicException('Could not find supported version of Guzzle.');\n        }\n\n        return new GuzzleClient($options);\n    }\n\n    /**\n     * @return FetchAuthTokenCache\n     */\n    private function createApplicationDefaultCredentials()\n    {\n        $scopes = $this->prepareScopes();\n        $sub = $this->config['subject'];\n        $signingKey = $this->config['signing_key'];\n\n        // create credentials using values supplied in setAuthConfig\n        if ($signingKey) {\n            $serviceAccountCredentials = [\n                'client_id' => $this->config['client_id'],\n                'client_email' => $this->config['client_email'],\n                'private_key' => $signingKey,\n                'type' => 'service_account',\n                'quota_project_id' => $this->config['quota_project'],\n            ];\n            $credentials = CredentialsLoader::makeCredentials(\n                $scopes,\n                $serviceAccountCredentials\n            );\n        } else {\n            // When $sub is provided, we cannot pass cache classes to ::getCredentials\n            // because FetchAuthTokenCache::setSub does not exist.\n            // The result is when $sub is provided, calls to ::onGce are not cached.\n            $credentials = ApplicationDefaultCredentials::getCredentials(\n                $scopes,\n                null,\n                $sub ? null : $this->config['cache_config'],\n                $sub ? null : $this->getCache(),\n                $this->config['quota_project']\n            );\n        }\n\n        // for service account domain-wide authority (impersonating a user)\n        // @see https://developers.google.com/identity/protocols/OAuth2ServiceAccount\n        if ($sub) {\n            if (!$credentials instanceof ServiceAccountCredentials) {\n                throw new DomainException('domain-wide authority requires service account credentials');\n            }\n\n            $credentials->setSub($sub);\n        }\n\n        // If we are not using FetchAuthTokenCache yet, create it now\n        if (!$credentials instanceof FetchAuthTokenCache) {\n            $credentials = new FetchAuthTokenCache(\n                $credentials,\n                $this->config['cache_config'],\n                $this->getCache()\n            );\n        }\n        return $credentials;\n    }\n\n    protected function getAuthHandler()\n    {\n        // Be very careful using the cache, as the underlying auth library's cache\n        // implementation is naive, and the cache keys do not account for user\n        // sessions.\n        //\n        // @see https://github.com/google/google-api-php-client/issues/821\n        return AuthHandlerFactory::build(\n            $this->getCache(),\n            $this->config['cache_config']\n        );\n    }\n\n    private function createUserRefreshCredentials($scope, $refreshToken)\n    {\n        $creds = array_filter([\n            'client_id' => $this->getClientId(),\n            'client_secret' => $this->getClientSecret(),\n            'refresh_token' => $refreshToken,\n        ]);\n\n        return new UserRefreshCredentials($scope, $creds);\n    }\n\n    private function checkUniverseDomain($credentials)\n    {\n        $credentialsUniverse = $credentials instanceof GetUniverseDomainInterface\n            ? $credentials->getUniverseDomain()\n            : GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN;\n        if ($credentialsUniverse !== $this->getUniverseDomain()) {\n            throw new DomainException(sprintf(\n                'The configured universe domain (%s) does not match the credential universe domain (%s)',\n                $this->getUniverseDomain(),\n                $credentialsUniverse\n            ));\n        }\n    }\n\n    public function getUniverseDomain()\n    {\n        return $this->config['universe_domain'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Collection.php",
    "content": "<?php\n\nnamespace Google;\n\n/**\n * Extension to the regular Google\\Model that automatically\n * exposes the items array for iteration, so you can just\n * iterate over the object rather than a reference inside.\n */\nclass Collection extends Model implements \\Iterator, \\Countable\n{\n    protected $collection_key = 'items';\n\n    /** @return void */\n    #[\\ReturnTypeWillChange]\n    public function rewind()\n    {\n        if (\n            isset($this->{$this->collection_key})\n            && is_array($this->{$this->collection_key})\n        ) {\n            reset($this->{$this->collection_key});\n        }\n    }\n\n    /** @return mixed */\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        $this->coerceType($this->key());\n        if (is_array($this->{$this->collection_key})) {\n            return current($this->{$this->collection_key});\n        }\n    }\n\n    /** @return mixed */\n    #[\\ReturnTypeWillChange]\n    public function key()\n    {\n        if (\n            isset($this->{$this->collection_key})\n            && is_array($this->{$this->collection_key})\n        ) {\n            return key($this->{$this->collection_key});\n        }\n    }\n\n    /** @return mixed */\n    #[\\ReturnTypeWillChange]\n    public function next()\n    {\n        return next($this->{$this->collection_key});\n    }\n\n    /** @return bool */\n    #[\\ReturnTypeWillChange]\n    public function valid()\n    {\n        $key = $this->key();\n        return $key !== null && $key !== false;\n    }\n\n    /** @return int */\n    #[\\ReturnTypeWillChange]\n    public function count()\n    {\n        if (!isset($this->{$this->collection_key})) {\n            return 0;\n        }\n        return count($this->{$this->collection_key});\n    }\n\n    /** @return bool */\n    #[\\ReturnTypeWillChange]\n    public function offsetExists($offset)\n    {\n        if (!is_numeric($offset)) {\n            return parent::offsetExists($offset);\n        }\n        return isset($this->{$this->collection_key}[$offset]);\n    }\n\n    /** @return mixed */\n    #[\\ReturnTypeWillChange]\n    public function offsetGet($offset)\n    {\n        if (!is_numeric($offset)) {\n            return parent::offsetGet($offset);\n        }\n        $this->coerceType($offset);\n        return $this->{$this->collection_key}[$offset];\n    }\n\n    /** @return void */\n    #[\\ReturnTypeWillChange]\n    public function offsetSet($offset, $value)\n    {\n        if (!is_numeric($offset)) {\n            parent::offsetSet($offset, $value);\n        }\n        $this->{$this->collection_key}[$offset] = $value;\n    }\n\n    /** @return void */\n    #[\\ReturnTypeWillChange]\n    public function offsetUnset($offset)\n    {\n        if (!is_numeric($offset)) {\n            parent::offsetUnset($offset);\n        }\n        unset($this->{$this->collection_key}[$offset]);\n    }\n\n    private function coerceType($offset)\n    {\n        $keyType = $this->keyType($this->collection_key);\n        if ($keyType && !is_object($this->{$this->collection_key}[$offset])) {\n            $this->{$this->collection_key}[$offset] =\n                new $keyType($this->{$this->collection_key}[$offset]);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Exception.php",
    "content": "<?php\n/*\n * Copyright 2013 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google;\n\nuse Exception as BaseException;\n\nclass Exception extends BaseException\n{\n}\n"
  },
  {
    "path": "lib/Google/src/Http/Batch.php",
    "content": "<?php\n/*\n * Copyright 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Http;\n\nuse Google\\Client;\nuse Google\\Service\\Exception as GoogleServiceException;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Response;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Class to handle batched requests to the Google API service.\n *\n * Note that calls to `Google\\Http\\Batch::execute()` do not clear the queued\n * requests. To start a new batch, be sure to create a new instance of this\n * class.\n */\nclass Batch\n{\n    const BATCH_PATH = 'batch';\n\n    private static $CONNECTION_ESTABLISHED_HEADERS = [\n        \"HTTP/1.0 200 Connection established\\r\\n\\r\\n\",\n        \"HTTP/1.1 200 Connection established\\r\\n\\r\\n\",\n    ];\n\n    /** @var string Multipart Boundary. */\n    private $boundary;\n\n    /** @var array service requests to be executed. */\n    private $requests = [];\n\n    /** @var Client */\n    private $client;\n\n    private $rootUrl;\n\n    private $batchPath;\n\n    public function __construct(\n        Client $client,\n        $boundary = false,\n        $rootUrl = null,\n        $batchPath = null\n    ) {\n        $this->client = $client;\n        $this->boundary = $boundary ?: mt_rand();\n        $rootUrl = rtrim($rootUrl ?: $this->client->getConfig('base_path'), '/');\n        $this->rootUrl = str_replace(\n            'UNIVERSE_DOMAIN',\n            $this->client->getUniverseDomain(),\n            $rootUrl\n        );\n        $this->batchPath = $batchPath ?: self::BATCH_PATH;\n    }\n\n    public function add(RequestInterface $request, $key = false)\n    {\n        if (false == $key) {\n            $key = mt_rand();\n        }\n\n        $this->requests[$key] = $request;\n    }\n\n    public function execute()\n    {\n        $body = '';\n        $classes = [];\n        $batchHttpTemplate = <<<EOF\n--%s\nContent-Type: application/http\nContent-Transfer-Encoding: binary\nMIME-Version: 1.0\nContent-ID: %s\n\n%s\n%s%s\n\n\nEOF;\n\n        /** @var RequestInterface $request */\n        foreach ($this->requests as $key => $request) {\n            $firstLine = sprintf(\n                '%s %s HTTP/%s',\n                $request->getMethod(),\n                $request->getRequestTarget(),\n                $request->getProtocolVersion()\n            );\n\n            $content = (string) $request->getBody();\n\n            $headers = '';\n            foreach ($request->getHeaders() as $name => $values) {\n                $headers .= sprintf(\"%s:%s\\r\\n\", $name, implode(', ', $values));\n            }\n\n            $body .= sprintf(\n                $batchHttpTemplate,\n                $this->boundary,\n                $key,\n                $firstLine,\n                $headers,\n                $content ? \"\\n\" . $content : ''\n            );\n\n            $classes['response-' . $key] = $request->getHeaderLine('X-Php-Expected-Class');\n        }\n\n        $body .= \"--{$this->boundary}--\";\n        $body = trim($body);\n        $url = $this->rootUrl . '/' . $this->batchPath;\n        $headers = [\n            'Content-Type' => sprintf('multipart/mixed; boundary=%s', $this->boundary),\n            'Content-Length' => (string) strlen($body),\n        ];\n\n        $request = new Request(\n            'POST',\n            $url,\n            $headers,\n            $body\n        );\n\n        $response = $this->client->execute($request);\n\n        return $this->parseResponse($response, $classes);\n    }\n\n    public function parseResponse(ResponseInterface $response, $classes = [])\n    {\n        $contentType = $response->getHeaderLine('content-type');\n        $contentType = explode(';', $contentType);\n        $boundary = false;\n        foreach ($contentType as $part) {\n            $part = explode('=', $part, 2);\n            if (isset($part[0]) && 'boundary' == trim($part[0])) {\n                $boundary = $part[1];\n            }\n        }\n\n        $body = (string) $response->getBody();\n        if (!empty($body)) {\n            $body = str_replace(\"--$boundary--\", \"--$boundary\", $body);\n            $parts = explode(\"--$boundary\", $body);\n            $responses = [];\n            $requests = array_values($this->requests);\n\n            foreach ($parts as $i => $part) {\n                $part = trim($part);\n                if (!empty($part)) {\n                    list($rawHeaders, $part) = explode(\"\\r\\n\\r\\n\", $part, 2);\n                    $headers = $this->parseRawHeaders($rawHeaders);\n\n                    $status = substr($part, 0, strpos($part, \"\\n\"));\n                    $status = explode(\" \", $status);\n                    $status = $status[1];\n\n                    list($partHeaders, $partBody) = $this->parseHttpResponse($part, 0);\n                    $response = new Response(\n                        (int) $status,\n                        $partHeaders,\n                        Psr7\\Utils::streamFor($partBody)\n                    );\n\n                    // Need content id.\n                    $key = $headers['content-id'];\n\n                    try {\n                        $response = REST::decodeHttpResponse($response, $requests[$i-1]);\n                    } catch (GoogleServiceException $e) {\n                        // Store the exception as the response, so successful responses\n                        // can be processed.\n                        $response = $e;\n                    }\n\n                    $responses[$key] = $response;\n                }\n            }\n\n            return $responses;\n        }\n\n        return null;\n    }\n\n    private function parseRawHeaders($rawHeaders)\n    {\n        $headers = [];\n        $responseHeaderLines = explode(\"\\r\\n\", $rawHeaders);\n        foreach ($responseHeaderLines as $headerLine) {\n            if ($headerLine && strpos($headerLine, ':') !== false) {\n                list($header, $value) = explode(': ', $headerLine, 2);\n                $header = strtolower($header);\n                if (isset($headers[$header])) {\n                    $headers[$header] = array_merge((array)$headers[$header], (array)$value);\n                } else {\n                    $headers[$header] = $value;\n                }\n            }\n        }\n        return $headers;\n    }\n\n    /**\n     * Used by the IO lib and also the batch processing.\n     *\n     * @param string $respData\n     * @param int $headerSize\n     * @return array\n     */\n    private function parseHttpResponse($respData, $headerSize)\n    {\n        // check proxy header\n        foreach (self::$CONNECTION_ESTABLISHED_HEADERS as $established_header) {\n            if (stripos($respData, $established_header) !== false) {\n                // existed, remove it\n                $respData = str_ireplace($established_header, '', $respData);\n                // Subtract the proxy header size unless the cURL bug prior to 7.30.0\n                // is present which prevented the proxy header size from being taken into\n                // account.\n                // @TODO look into this\n                // if (!$this->needsQuirk()) {\n                //   $headerSize -= strlen($established_header);\n                // }\n                break;\n            }\n        }\n\n        if ($headerSize) {\n            $responseBody = substr($respData, $headerSize);\n            $responseHeaders = substr($respData, 0, $headerSize);\n        } else {\n            $responseSegments = explode(\"\\r\\n\\r\\n\", $respData, 2);\n            $responseHeaders = $responseSegments[0];\n            $responseBody = isset($responseSegments[1]) ? $responseSegments[1] : null;\n        }\n\n        $responseHeaders = $this->parseRawHeaders($responseHeaders);\n\n        return [$responseHeaders, $responseBody];\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Http/MediaFileUpload.php",
    "content": "<?php\n/**\n * Copyright 2012 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Http;\n\nuse Google\\Client;\nuse Google\\Exception as GoogleException;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Uri;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Manage large file uploads, which may be media but can be any type\n * of sizable data.\n */\nclass MediaFileUpload\n{\n    const UPLOAD_MEDIA_TYPE = 'media';\n    const UPLOAD_MULTIPART_TYPE = 'multipart';\n    const UPLOAD_RESUMABLE_TYPE = 'resumable';\n\n    /** @var string $mimeType */\n    private $mimeType;\n\n    /** @var string $data */\n    private $data;\n\n    /** @var bool $resumable */\n    private $resumable;\n\n    /** @var int $chunkSize */\n    private $chunkSize;\n\n    /** @var int $size */\n    private $size;\n\n    /** @var string $resumeUri */\n    private $resumeUri;\n\n    /** @var int $progress */\n    private $progress;\n\n    /** @var Client */\n    private $client;\n\n    /** @var RequestInterface */\n    private $request;\n\n    /** @var string */\n    private $boundary; // @phpstan-ignore-line\n\n    /**\n   * Result code from last HTTP call\n   * @var int\n   */\n    private $httpResultCode;\n\n    /**\n     * @param Client $client\n     * @param RequestInterface $request\n     * @param string $mimeType\n     * @param string $data The bytes you want to upload.\n     * @param bool $resumable\n     * @param int $chunkSize File will be uploaded in chunks of this many bytes.\n     * only used if resumable=True\n     */\n    public function __construct(\n        Client $client,\n        RequestInterface $request,\n        $mimeType,\n        $data,\n        $resumable = false,\n        $chunkSize = 0\n    ) {\n        $this->client = $client;\n        $this->request = $request;\n        $this->mimeType = $mimeType;\n        $this->data = $data;\n        $this->resumable = $resumable;\n        $this->chunkSize = $chunkSize;\n        $this->progress = 0;\n\n        $this->process();\n    }\n\n    /**\n     * Set the size of the file that is being uploaded.\n     * @param int $size - int file size in bytes\n     */\n    public function setFileSize($size)\n    {\n        $this->size = $size;\n    }\n\n    /**\n     * Return the progress on the upload\n     * @return int progress in bytes uploaded.\n     */\n    public function getProgress()\n    {\n        return $this->progress;\n    }\n\n    /**\n     * Send the next part of the file to upload.\n     * @param string|bool $chunk Optional. The next set of bytes to send. If false will\n     * use $data passed at construct time.\n     */\n    public function nextChunk($chunk = false)\n    {\n        $resumeUri = $this->getResumeUri();\n\n        if (false == $chunk) {\n            $chunk = substr($this->data, $this->progress, $this->chunkSize);\n        }\n\n        $lastBytePos = $this->progress + strlen($chunk) - 1;\n        $headers = [\n            'content-range' => \"bytes $this->progress-$lastBytePos/$this->size\",\n            'content-length' => (string) strlen($chunk),\n            'expect' => '',\n        ];\n\n        $request = new Request(\n            'PUT',\n            $resumeUri,\n            $headers,\n            Psr7\\Utils::streamFor($chunk)\n        );\n\n        return $this->makePutRequest($request);\n    }\n\n    /**\n     * Return the HTTP result code from the last call made.\n     * @return int code\n     */\n    public function getHttpResultCode()\n    {\n        return $this->httpResultCode;\n    }\n\n    /**\n     * Sends a PUT-Request to google drive and parses the response,\n     * setting the appropiate variables from the response()\n     *\n     * @param RequestInterface $request the Request which will be send\n     *\n     * @return false|mixed false when the upload is unfinished or the decoded http response\n     *\n     */\n    private function makePutRequest(RequestInterface $request)\n    {\n        $response = $this->client->execute($request);\n        $this->httpResultCode = $response->getStatusCode();\n\n        if (308 == $this->httpResultCode) {\n            // Track the amount uploaded.\n            $range = $response->getHeaderLine('range');\n            if ($range) {\n                $range_array = explode('-', $range);\n                $this->progress = ((int) $range_array[1]) + 1;\n            }\n\n            // Allow for changing upload URLs.\n            $location = $response->getHeaderLine('location');\n            if ($location) {\n                $this->resumeUri = $location;\n            }\n\n            // No problems, but upload not complete.\n            return false;\n        }\n\n        return REST::decodeHttpResponse($response, $this->request);\n    }\n\n    /**\n     * Resume a previously unfinished upload\n     * @param string $resumeUri the resume-URI of the unfinished, resumable upload.\n     */\n    public function resume($resumeUri)\n    {\n        $this->resumeUri = $resumeUri;\n        $headers = [\n            'content-range' => \"bytes */$this->size\",\n            'content-length' => '0',\n        ];\n        $httpRequest = new Request(\n            'PUT',\n            $this->resumeUri,\n            $headers\n        );\n        return $this->makePutRequest($httpRequest);\n    }\n\n    /**\n     * @return RequestInterface\n     * @visible for testing\n     */\n    private function process()\n    {\n        $this->transformToUploadUrl();\n        $request = $this->request;\n\n        $postBody = '';\n        $contentType = false;\n\n        $meta = json_decode((string) $request->getBody(), true);\n\n        $uploadType = $this->getUploadType($meta);\n        $request = $request->withUri(\n            Uri::withQueryValue($request->getUri(), 'uploadType', $uploadType)\n        );\n\n        $mimeType = $this->mimeType ?: $request->getHeaderLine('content-type');\n\n        if (self::UPLOAD_RESUMABLE_TYPE == $uploadType) {\n            $contentType = $mimeType;\n            $postBody = is_string($meta) ? $meta : json_encode($meta);\n        } elseif (self::UPLOAD_MEDIA_TYPE == $uploadType) {\n            $contentType = $mimeType;\n            $postBody = $this->data;\n        } elseif (self::UPLOAD_MULTIPART_TYPE == $uploadType) {\n            // This is a multipart/related upload.\n            $boundary = $this->boundary ?: mt_rand();\n            $boundary = str_replace('\"', '', $boundary);\n            $contentType = 'multipart/related; boundary=' . $boundary;\n            $related = \"--$boundary\\r\\n\";\n            $related .= \"Content-Type: application/json; charset=UTF-8\\r\\n\";\n            $related .= \"\\r\\n\" . json_encode($meta) . \"\\r\\n\";\n            $related .= \"--$boundary\\r\\n\";\n            $related .= \"Content-Type: $mimeType\\r\\n\";\n            $related .= \"Content-Transfer-Encoding: base64\\r\\n\";\n            $related .= \"\\r\\n\" . base64_encode($this->data) . \"\\r\\n\";\n            $related .= \"--$boundary--\";\n            $postBody = $related;\n        }\n\n        $request = $request->withBody(Psr7\\Utils::streamFor($postBody));\n\n        if ($contentType) {\n            $request = $request->withHeader('content-type', $contentType);\n        }\n\n        return $this->request = $request;\n    }\n\n    /**\n     * Valid upload types:\n     * - resumable (UPLOAD_RESUMABLE_TYPE)\n     * - media (UPLOAD_MEDIA_TYPE)\n     * - multipart (UPLOAD_MULTIPART_TYPE)\n     * @param string|false $meta\n     * @return string\n     * @visible for testing\n     */\n    public function getUploadType($meta)\n    {\n        if ($this->resumable) {\n            return self::UPLOAD_RESUMABLE_TYPE;\n        }\n\n        if (false == $meta && $this->data) {\n            return self::UPLOAD_MEDIA_TYPE;\n        }\n\n        return self::UPLOAD_MULTIPART_TYPE;\n    }\n\n    public function getResumeUri()\n    {\n        if (null === $this->resumeUri) {\n            $this->resumeUri = $this->fetchResumeUri();\n        }\n\n        return $this->resumeUri;\n    }\n\n    private function fetchResumeUri()\n    {\n        $body = $this->request->getBody();\n        $headers = [\n            'content-type' => 'application/json; charset=UTF-8',\n            'content-length' => $body->getSize(),\n            'x-upload-content-type' => $this->mimeType,\n            'x-upload-content-length' => $this->size,\n            'expect' => '',\n        ];\n        foreach ($headers as $key => $value) {\n            $this->request = $this->request->withHeader($key, $value);\n        }\n\n        $response = $this->client->execute($this->request, false);\n        $location = $response->getHeaderLine('location');\n        $code = $response->getStatusCode();\n\n        if (200 == $code && true == $location) {\n            return $location;\n        }\n\n        $message = $code;\n        $body = json_decode((string) $this->request->getBody(), true);\n        if (isset($body['error']['errors'])) {\n            $message .= ': ';\n            foreach ($body['error']['errors'] as $error) {\n                $message .= \"{$error['domain']}, {$error['message']};\";\n            }\n            $message = rtrim($message, ';');\n        }\n\n        $error = \"Failed to start the resumable upload (HTTP {$message})\";\n        $this->client->getLogger()->error($error);\n\n        throw new GoogleException($error);\n    }\n\n    private function transformToUploadUrl()\n    {\n        $parts = parse_url((string) $this->request->getUri());\n        if (!isset($parts['path'])) {\n            $parts['path'] = '';\n        }\n        $parts['path'] = '/upload' . $parts['path'];\n        $uri = Uri::fromParts($parts);\n        $this->request = $this->request->withUri($uri);\n    }\n\n    public function setChunkSize($chunkSize)\n    {\n        $this->chunkSize = $chunkSize;\n    }\n\n    public function getRequest()\n    {\n        return $this->request;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Http/REST.php",
    "content": "<?php\n/*\n * Copyright 2010 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Http;\n\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Service\\Exception as GoogleServiceException;\nuse Google\\Task\\Runner;\nuse GuzzleHttp\\ClientInterface;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Psr7\\Response;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * This class implements the RESTful transport of apiServiceRequest()'s\n */\nclass REST\n{\n    /**\n     * Executes a Psr\\Http\\Message\\RequestInterface and (if applicable) automatically retries\n     * when errors occur.\n     *\n     * @template T\n     * @param ClientInterface $client\n     * @param RequestInterface $request\n     * @param class-string<T>|false|null $expectedClass\n     * @param array $config\n     * @param array $retryMap\n     * @return mixed|T|null\n     * @throws \\Google\\Service\\Exception on server side error (ie: not authenticated,\n     *  invalid or malformed post body, invalid url)\n     */\n    public static function execute(\n        ClientInterface $client,\n        RequestInterface $request,\n        $expectedClass = null,\n        $config = [],\n        $retryMap = null\n    ) {\n        $runner = new Runner(\n            $config,\n            sprintf('%s %s', $request->getMethod(), (string)$request->getUri()),\n            [self::class, 'doExecute'],\n            [$client, $request, $expectedClass]\n        );\n\n        if (null !== $retryMap) {\n            $runner->setRetryMap($retryMap);\n        }\n\n        return $runner->run();\n    }\n\n    /**\n     * Executes a Psr\\Http\\Message\\RequestInterface\n     *\n     * @template T\n     * @param ClientInterface $client\n     * @param RequestInterface $request\n     * @param class-string<T>|false|null $expectedClass\n     * @return mixed|T|null\n     * @throws \\Google\\Service\\Exception on server side error (ie: not authenticated,\n     *  invalid or malformed post body, invalid url)\n     */\n    public static function doExecute(ClientInterface $client, RequestInterface $request, $expectedClass = null)\n    {\n        try {\n            $httpHandler = HttpHandlerFactory::build($client);\n            $response = $httpHandler($request);\n        } catch (RequestException $e) {\n            // if Guzzle throws an exception, catch it and handle the response\n            if (!$e->hasResponse()) {\n                throw $e;\n            }\n\n            $response = $e->getResponse();\n        }\n\n        return self::decodeHttpResponse($response, $request, $expectedClass);\n    }\n\n    /**\n     * Decode an HTTP Response.\n     * @static\n     *\n     * @template T\n     * @param RequestInterface $response The http response to be decoded.\n     * @param ResponseInterface $response\n     * @param class-string<T>|false|null $expectedClass\n     * @return mixed|T|null\n     * @throws \\Google\\Service\\Exception\n     */\n    public static function decodeHttpResponse(\n        ResponseInterface $response,\n        ?RequestInterface $request = null,\n        $expectedClass = null\n    ) {\n        $code = $response->getStatusCode();\n\n        // retry strategy\n        if (intVal($code) >= 400) {\n            // if we errored out, it should be safe to grab the response body\n            $body = (string)$response->getBody();\n\n            // Check if we received errors, and add those to the Exception for convenience\n            throw new GoogleServiceException($body, $code, null, self::getResponseErrors($body));\n        }\n\n        // Ensure we only pull the entire body into memory if the request is not\n        // of media type\n        $body = self::decodeBody($response, $request);\n\n        if ($expectedClass = self::determineExpectedClass($expectedClass, $request)) {\n            $json = json_decode($body, true);\n\n            return new $expectedClass($json);\n        }\n\n        return $response;\n    }\n\n    private static function decodeBody(ResponseInterface $response, ?RequestInterface $request = null)\n    {\n        if (self::isAltMedia($request)) {\n            // don't decode the body, it's probably a really long string\n            return '';\n        }\n\n        return (string)$response->getBody();\n    }\n\n    private static function determineExpectedClass($expectedClass, ?RequestInterface $request = null)\n    {\n        // \"false\" is used to explicitly prevent an expected class from being returned\n        if (false === $expectedClass) {\n            return null;\n        }\n\n        // if we don't have a request, we just use what's passed in\n        if (null === $request) {\n            return $expectedClass;\n        }\n\n        // return what we have in the request header if one was not supplied\n        return $expectedClass ?: $request->getHeaderLine('X-Php-Expected-Class');\n    }\n\n    private static function getResponseErrors($body)\n    {\n        $json = json_decode($body, true);\n\n        if (isset($json['error']['errors'])) {\n            return $json['error']['errors'];\n        }\n\n        return null;\n    }\n\n    private static function isAltMedia(?RequestInterface $request = null)\n    {\n        if ($request && $qs = $request->getUri()->getQuery()) {\n            parse_str($qs, $query);\n            if (isset($query['alt']) && $query['alt'] == 'media') {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Model.php",
    "content": "<?php\n/*\n * Copyright 2011 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google;\n\nuse Google\\Exception as GoogleException;\nuse ReflectionObject;\nuse ReflectionProperty;\nuse stdClass;\n\n/**\n * This class defines attributes, valid values, and usage which is generated\n * from a given json schema.\n * http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5\n *\n */\n#[\\AllowDynamicProperties]\nclass Model implements \\ArrayAccess\n{\n    /**\n     * If you need to specify a NULL JSON value, use Google\\Model::NULL_VALUE\n     * instead - it will be replaced when converting to JSON with a real null.\n     */\n    const NULL_VALUE = \"{}gapi-php-null\";\n    protected $internal_gapi_mappings = [];\n    protected $modelData = [];\n    protected $processed = [];\n\n    /**\n     * Polymorphic - accepts a variable number of arguments dependent\n     * on the type of the model subclass.\n     */\n    final public function __construct()\n    {\n        if (func_num_args() == 1 && is_array(func_get_arg(0))) {\n            // Initialize the model with the array's contents.\n            $array = func_get_arg(0);\n            $this->mapTypes($array);\n        }\n        $this->gapiInit();\n    }\n\n    /**\n     * Getter that handles passthrough access to the data array, and lazy object creation.\n     * @param string $key Property name.\n     * @return mixed The value if any, or null.\n     */\n    public function __get($key)\n    {\n        $keyType = $this->keyType($key);\n        $keyDataType = $this->dataType($key);\n        if ($keyType && !isset($this->processed[$key])) {\n            if (isset($this->modelData[$key])) {\n                $val = $this->modelData[$key];\n            } elseif ($keyDataType == 'array' || $keyDataType == 'map') {\n                $val = [];\n            } else {\n                $val = null;\n            }\n\n            if ($this->isAssociativeArray($val)) {\n                if ($keyDataType && 'map' == $keyDataType) {\n                    foreach ($val as $arrayKey => $arrayItem) {\n                        $this->modelData[$key][$arrayKey] =\n                            new $keyType($arrayItem);\n                    }\n                } else {\n                    $this->modelData[$key] = new $keyType($val);\n                }\n            } elseif (is_array($val)) {\n                $arrayObject = [];\n                foreach ($val as $arrayIndex => $arrayItem) {\n                    $arrayObject[$arrayIndex] = new $keyType($arrayItem);\n                }\n                $this->modelData[$key] = $arrayObject;\n            }\n            $this->processed[$key] = true;\n        }\n\n        return isset($this->modelData[$key]) ? $this->modelData[$key] : null;\n    }\n\n    /**\n     * Initialize this object's properties from an array.\n     *\n     * @param array $array Used to seed this object's properties.\n     * @return void\n     */\n    protected function mapTypes($array)\n    {\n        // Hard initialise simple types, lazy load more complex ones.\n        foreach ($array as $key => $val) {\n            if ($keyType = $this->keyType($key)) {\n                $dataType = $this->dataType($key);\n                if ($dataType == 'array' || $dataType == 'map') {\n                    $this->$key = [];\n                    foreach ($val as $itemKey => $itemVal) {\n                        if ($itemVal instanceof $keyType) {\n                            $this->{$key}[$itemKey] = $itemVal;\n                        } else {\n                            $this->{$key}[$itemKey] = new $keyType($itemVal);\n                        }\n                    }\n                } elseif ($val instanceof $keyType) {\n                    $this->$key = $val;\n                } else {\n                    $this->$key = new $keyType($val);\n                }\n                unset($array[$key]);\n            } elseif (property_exists($this, $key)) {\n                $this->$key = $val;\n                unset($array[$key]);\n            } elseif (property_exists($this, $camelKey = $this->camelCase($key))) {\n                // This checks if property exists as camelCase, leaving it in array as snake_case\n                // in case of backwards compatibility issues.\n                $this->$camelKey = $val;\n            }\n        }\n        $this->modelData = $array;\n    }\n\n    /**\n     * Blank initialiser to be used in subclasses to do  post-construction initialisation - this\n     * avoids the need for subclasses to have to implement the variadics handling in their\n     * constructors.\n     */\n    protected function gapiInit()\n    {\n        return;\n    }\n\n    /**\n     * Create a simplified object suitable for straightforward\n     * conversion to JSON. This is relatively expensive\n     * due to the usage of reflection, but shouldn't be called\n     * a whole lot, and is the most straightforward way to filter.\n     */\n    public function toSimpleObject()\n    {\n        $object = new stdClass();\n\n        // Process all other data.\n        foreach ($this->modelData as $key => $val) {\n            $result = $this->getSimpleValue($val);\n            if ($result !== null) {\n                $object->$key = $this->nullPlaceholderCheck($result);\n            }\n        }\n\n        // Process all public properties.\n        $reflect = new ReflectionObject($this);\n        $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);\n        foreach ($props as $member) {\n            $name = $member->getName();\n            $result = $this->getSimpleValue($this->$name);\n            if ($result !== null) {\n                $name = $this->getMappedName($name);\n                $object->$name = $this->nullPlaceholderCheck($result);\n            }\n        }\n\n        return $object;\n    }\n\n    /**\n     * Handle different types of values, primarily\n     * other objects and map and array data types.\n     */\n    private function getSimpleValue($value)\n    {\n        if ($value instanceof Model) {\n            return $value->toSimpleObject();\n        } elseif (is_array($value)) {\n            $return = [];\n            foreach ($value as $key => $a_value) {\n                $a_value = $this->getSimpleValue($a_value);\n                if ($a_value !== null) {\n                    $key = $this->getMappedName($key);\n                    $return[$key] = $this->nullPlaceholderCheck($a_value);\n                }\n            }\n            return $return;\n        }\n        return $value;\n    }\n\n    /**\n     * Check whether the value is the null placeholder and return true null.\n     */\n    private function nullPlaceholderCheck($value)\n    {\n        if ($value === self::NULL_VALUE) {\n            return null;\n        }\n        return $value;\n    }\n\n    /**\n     * If there is an internal name mapping, use that.\n     */\n    private function getMappedName($key)\n    {\n        if (isset($this->internal_gapi_mappings, $this->internal_gapi_mappings[$key])) {\n            $key = $this->internal_gapi_mappings[$key];\n        }\n        return $key;\n    }\n\n    /**\n     * Returns true only if the array is associative.\n     * @param array $array\n     * @return bool True if the array is associative.\n     */\n    protected function isAssociativeArray($array)\n    {\n        if (!is_array($array)) {\n            return false;\n        }\n        $keys = array_keys($array);\n        foreach ($keys as $key) {\n            if (is_string($key)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Verify if $obj is an array.\n     * @throws \\Google\\Exception Thrown if $obj isn't an array.\n     * @param array $obj Items that should be validated.\n     * @param string $method Method expecting an array as an argument.\n     */\n    public function assertIsArray($obj, $method)\n    {\n        if ($obj && !is_array($obj)) {\n            throw new GoogleException(\n                \"Incorrect parameter type passed to $method(). Expected an array.\"\n            );\n        }\n    }\n\n    /** @return bool */\n    #[\\ReturnTypeWillChange]\n    public function offsetExists($offset)\n    {\n        return isset($this->$offset) || isset($this->modelData[$offset]);\n    }\n\n    /** @return mixed */\n    #[\\ReturnTypeWillChange]\n    public function offsetGet($offset)\n    {\n        return isset($this->$offset) ?\n        $this->$offset :\n        $this->__get($offset);\n    }\n\n    /** @return void */\n    #[\\ReturnTypeWillChange]\n    public function offsetSet($offset, $value)\n    {\n        if (property_exists($this, $offset)) {\n            $this->$offset = $value;\n        } else {\n            $this->modelData[$offset] = $value;\n            $this->processed[$offset] = true;\n        }\n    }\n\n    /** @return void */\n    #[\\ReturnTypeWillChange]\n    public function offsetUnset($offset)\n    {\n        unset($this->modelData[$offset]);\n    }\n\n    protected function keyType($key)\n    {\n        $keyType = $key . \"Type\";\n\n        // ensure keyType is a valid class\n        if (property_exists($this, $keyType) && $this->$keyType !== null && class_exists($this->$keyType)) {\n            return $this->$keyType;\n        }\n    }\n\n    protected function dataType($key)\n    {\n        $dataType = $key . \"DataType\";\n\n        if (property_exists($this, $dataType)) {\n            return $this->$dataType;\n        }\n    }\n\n    public function __isset($key)\n    {\n        return isset($this->modelData[$key]);\n    }\n\n    public function __unset($key)\n    {\n        unset($this->modelData[$key]);\n    }\n\n    /**\n   * Convert a string to camelCase\n   * @param  string $value\n   * @return string\n   */\n    private function camelCase($value)\n    {\n        $value = ucwords(str_replace(['-', '_'], ' ', $value));\n        $value = str_replace(' ', '', $value);\n        $value[0] = strtolower($value[0]);\n        return $value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Service/Exception.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Service;\n\nuse Google\\Exception as GoogleException;\n\nclass Exception extends GoogleException\n{\n    /**\n     * Optional list of errors returned in a JSON body of an HTTP error response.\n     */\n    protected $errors = [];\n\n    /**\n     * Override default constructor to add the ability to set $errors and a retry\n     * map.\n     *\n     * @param string $message\n     * @param int $code\n     * @param Exception|null $previous\n     * @param array<array<string,string>>|null $errors List of errors returned in an HTTP\n     * response or null.  Defaults to [].\n     */\n    public function __construct(\n        $message,\n        $code = 0,\n        ?Exception $previous = null,\n        $errors = []\n    ) {\n        if (version_compare(PHP_VERSION, '5.3.0') >= 0) {\n            parent::__construct($message, $code, $previous);\n        } else {\n            parent::__construct($message, $code);\n        }\n\n        $this->errors = $errors;\n    }\n\n    /**\n     * An example of the possible errors returned.\n     *\n     * [\n     *   {\n     *     \"domain\": \"global\",\n     *     \"reason\": \"authError\",\n     *     \"message\": \"Invalid Credentials\",\n     *     \"locationType\": \"header\",\n     *     \"location\": \"Authorization\",\n     *   }\n     * ]\n     *\n     * @return array<array<string,string>>|null List of errors returned in an HTTP response or null.\n     */\n    public function getErrors()\n    {\n        return $this->errors;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Service/README.md",
    "content": "# Google API Client Services\n\nGoogle API Client Service classes have been moved to the \n[google-api-php-client-services](https://github.com/google/google-api-php-client-services) \nrepository. \n"
  },
  {
    "path": "lib/Google/src/Service/Resource.php",
    "content": "<?php\n/**\n * Copyright 2010 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Service;\n\nuse Google\\Exception as GoogleException;\nuse Google\\Http\\MediaFileUpload;\nuse Google\\Model;\nuse Google\\Utils\\UriTemplate;\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Implements the actual methods/resources of the discovered Google API using magic function\n * calling overloading (__call()), which on call will see if the method name (plus.activities.list)\n * is available in this service, and if so construct an apiHttpRequest representing it.\n *\n */\nclass Resource\n{\n    // Valid query parameters that work, but don't appear in discovery.\n    private $stackParameters = [\n        'alt' => ['type' => 'string', 'location' => 'query'],\n        'fields' => ['type' => 'string', 'location' => 'query'],\n        'trace' => ['type' => 'string', 'location' => 'query'],\n        'userIp' => ['type' => 'string', 'location' => 'query'],\n        'quotaUser' => ['type' => 'string', 'location' => 'query'],\n        'data' => ['type' => 'string', 'location' => 'body'],\n        'mimeType' => ['type' => 'string', 'location' => 'header'],\n        'uploadType' => ['type' => 'string', 'location' => 'query'],\n        'mediaUpload' => ['type' => 'complex', 'location' => 'query'],\n        'prettyPrint' => ['type' => 'string', 'location' => 'query'],\n    ];\n\n    /** @var string $rootUrlTemplate */\n    private $rootUrlTemplate;\n\n    /** @var string $apiVersion */\n    protected $apiVersion;\n\n    /** @var \\Google\\Client $client */\n    private $client;\n\n    /** @var string $serviceName */\n    private $serviceName;\n\n    /** @var string $servicePath */\n    private $servicePath;\n\n    /** @var string $resourceName */\n    private $resourceName;\n\n    /** @var array $methods */\n    private $methods;\n\n    public function __construct($service, $serviceName, $resourceName, $resource)\n    {\n        $this->rootUrlTemplate = $service->rootUrlTemplate ?? $service->rootUrl;\n        $this->client = $service->getClient();\n        $this->servicePath = $service->servicePath;\n        $this->serviceName = $serviceName;\n        $this->resourceName = $resourceName;\n        $this->methods = is_array($resource) && isset($resource['methods']) ?\n        $resource['methods'] :\n        [$resourceName => $resource];\n    }\n\n    /**\n     * TODO: This function needs simplifying.\n     *\n     * @template T\n     * @param string $name\n     * @param array $arguments\n     * @param class-string<T> $expectedClass - optional, the expected class name\n     * @return mixed|T|ResponseInterface|RequestInterface\n     * @throws \\Google\\Exception\n     */\n    public function call($name, $arguments, $expectedClass = null)\n    {\n        if (! isset($this->methods[$name])) {\n            $this->client->getLogger()->error(\n                'Service method unknown',\n                [\n                    'service' => $this->serviceName,\n                    'resource' => $this->resourceName,\n                    'method' => $name\n                ]\n            );\n\n            throw new GoogleException(\n                \"Unknown function: \" .\n                \"{$this->serviceName}->{$this->resourceName}->{$name}()\"\n            );\n        }\n        $method = $this->methods[$name];\n        $parameters = $arguments[0];\n\n        // postBody is a special case since it's not defined in the discovery\n        // document as parameter, but we abuse the param entry for storing it.\n        $postBody = null;\n        if (isset($parameters['postBody'])) {\n            if ($parameters['postBody'] instanceof Model) {\n                // In the cases the post body is an existing object, we want\n                // to use the smart method to create a simple object for\n                // for JSONification.\n                $parameters['postBody'] = $parameters['postBody']->toSimpleObject();\n            } elseif (is_object($parameters['postBody'])) {\n                // If the post body is another kind of object, we will try and\n                // wrangle it into a sensible format.\n                $parameters['postBody'] =\n                    $this->convertToArrayAndStripNulls($parameters['postBody']);\n            }\n            $postBody = (array) $parameters['postBody'];\n            unset($parameters['postBody']);\n        }\n\n        // TODO: optParams here probably should have been\n        // handled already - this may well be redundant code.\n        if (isset($parameters['optParams'])) {\n            $optParams = $parameters['optParams'];\n            unset($parameters['optParams']);\n            $parameters = array_merge($parameters, $optParams);\n        }\n\n        if (!isset($method['parameters'])) {\n            $method['parameters'] = [];\n        }\n\n        $method['parameters'] = array_merge(\n            $this->stackParameters,\n            $method['parameters']\n        );\n\n        foreach ($parameters as $key => $val) {\n            if ($key != 'postBody' && !isset($method['parameters'][$key])) {\n                $this->client->getLogger()->error(\n                    'Service parameter unknown',\n                    [\n                        'service' => $this->serviceName,\n                        'resource' => $this->resourceName,\n                        'method' => $name,\n                        'parameter' => $key\n                    ]\n                );\n                throw new GoogleException(\"($name) unknown parameter: '$key'\");\n            }\n        }\n\n        foreach ($method['parameters'] as $paramName => $paramSpec) {\n            if (\n                isset($paramSpec['required']) &&\n                $paramSpec['required'] &&\n                ! isset($parameters[$paramName])\n            ) {\n                $this->client->getLogger()->error(\n                    'Service parameter missing',\n                    [\n                        'service' => $this->serviceName,\n                        'resource' => $this->resourceName,\n                        'method' => $name,\n                        'parameter' => $paramName\n                    ]\n                );\n                throw new GoogleException(\"($name) missing required param: '$paramName'\");\n            }\n            if (isset($parameters[$paramName])) {\n                $value = $parameters[$paramName];\n                $parameters[$paramName] = $paramSpec;\n                $parameters[$paramName]['value'] = $value;\n                unset($parameters[$paramName]['required']);\n            } else {\n                // Ensure we don't pass nulls.\n                unset($parameters[$paramName]);\n            }\n        }\n\n        $this->client->getLogger()->info(\n            'Service Call',\n            [\n                'service' => $this->serviceName,\n                'resource' => $this->resourceName,\n                'method' => $name,\n                'arguments' => $parameters,\n            ]\n        );\n\n        // build the service uri\n        $url = $this->createRequestUri($method['path'], $parameters);\n\n        // NOTE: because we're creating the request by hand,\n        // and because the service has a rootUrl property\n        // the \"base_uri\" of the Http Client is not accounted for\n        $request = new Request(\n            $method['httpMethod'],\n            $url,\n            $postBody ? ['content-type' => 'application/json'] : [],\n            $postBody ? json_encode($postBody) : ''\n        );\n\n        // support uploads\n        if (isset($parameters['data'])) {\n            $mimeType = isset($parameters['mimeType'])\n                ? $parameters['mimeType']['value']\n                : 'application/octet-stream';\n            $data = $parameters['data']['value'];\n            $upload = new MediaFileUpload($this->client, $request, $mimeType, $data);\n\n            // pull down the modified request\n            $request = $upload->getRequest();\n        }\n\n        // if this is a media type, we will return the raw response\n        // rather than using an expected class\n        if (isset($parameters['alt']) && $parameters['alt']['value'] == 'media') {\n            $expectedClass = null;\n        }\n\n        // If the class which is extending from this one contains\n        // an Api Version, add it to the header\n        if ($this->apiVersion) {\n            $request = $request\n                ->withHeader('X-Goog-Api-Version', $this->apiVersion);\n        }\n\n        // if the client is marked for deferring, rather than\n        // execute the request, return the response\n        if ($this->client->shouldDefer()) {\n            // @TODO find a better way to do this\n            $request = $request\n                ->withHeader('X-Php-Expected-Class', $expectedClass);\n\n            return $request;\n        }\n\n        return $this->client->execute($request, $expectedClass);\n    }\n\n    protected function convertToArrayAndStripNulls($o)\n    {\n        $o = (array) $o;\n        foreach ($o as $k => $v) {\n            if ($v === null) {\n                unset($o[$k]);\n            } elseif (is_object($v) || is_array($v)) {\n                $o[$k] = $this->convertToArrayAndStripNulls($o[$k]);\n            }\n        }\n        return $o;\n    }\n\n    /**\n     * Parse/expand request parameters and create a fully qualified\n     * request uri.\n     * @static\n     * @param string $restPath\n     * @param array $params\n     * @return string $requestUrl\n     */\n    public function createRequestUri($restPath, $params)\n    {\n        // Override the default servicePath address if the $restPath use a /\n        if ('/' == substr($restPath, 0, 1)) {\n            $requestUrl = substr($restPath, 1);\n        } else {\n            $requestUrl = $this->servicePath . $restPath;\n        }\n\n        if ($this->rootUrlTemplate) {\n            // code for universe domain\n            $rootUrl = str_replace('UNIVERSE_DOMAIN', $this->client->getUniverseDomain(), $this->rootUrlTemplate);\n            // code for leading slash\n            if ('/' !== substr($rootUrl, -1) && '/' !== substr($requestUrl, 0, 1)) {\n                $requestUrl = '/' . $requestUrl;\n            }\n            $requestUrl = $rootUrl . $requestUrl;\n        }\n        $uriTemplateVars = [];\n        $queryVars = [];\n        foreach ($params as $paramName => $paramSpec) {\n            if ($paramSpec['type'] == 'boolean') {\n                $paramSpec['value'] = $paramSpec['value'] ? 'true' : 'false';\n            }\n            if ($paramSpec['location'] == 'path') {\n                $uriTemplateVars[$paramName] = $paramSpec['value'];\n            } elseif ($paramSpec['location'] == 'query') {\n                if (is_array($paramSpec['value'])) {\n                    foreach ($paramSpec['value'] as $value) {\n                        $queryVars[] = $paramName . '=' . rawurlencode(rawurldecode($value));\n                    }\n                } else {\n                    $queryVars[] = $paramName . '=' . rawurlencode(rawurldecode($paramSpec['value']));\n                }\n            }\n        }\n\n        if (count($uriTemplateVars)) {\n            $uriTemplateParser = new UriTemplate();\n            $requestUrl = $uriTemplateParser->parse($requestUrl, $uriTemplateVars);\n        }\n\n        if (count($queryVars)) {\n            $requestUrl .= '?' . implode('&', $queryVars);\n        }\n\n        return $requestUrl;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Service.php",
    "content": "<?php\n/*\n * Copyright 2010 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google;\n\nuse Google\\Http\\Batch;\nuse TypeError;\n\nclass Service\n{\n    public $batchPath;\n    /**\n     * Only used in getBatch\n     */\n    public $rootUrl;\n    public $rootUrlTemplate;\n    public $version;\n    public $servicePath;\n    public $serviceName;\n    public $availableScopes;\n    public $resource;\n    private $client;\n\n    public function __construct($clientOrConfig = [])\n    {\n        if ($clientOrConfig instanceof Client) {\n            $this->client = $clientOrConfig;\n        } elseif (is_array($clientOrConfig)) {\n            $this->client = new Client($clientOrConfig ?: []);\n        } else {\n            $errorMessage = 'constructor must be array or instance of Google\\Client';\n            if (class_exists('TypeError')) {\n                throw new TypeError($errorMessage);\n            }\n            trigger_error($errorMessage, E_USER_ERROR);\n        }\n    }\n\n    /**\n   * Return the associated Google\\Client class.\n   * @return \\Google\\Client\n   */\n    public function getClient()\n    {\n        return $this->client;\n    }\n\n    /**\n   * Create a new HTTP Batch handler for this service\n   *\n   * @return Batch\n   */\n    public function createBatch()\n    {\n        return new Batch(\n            $this->client,\n            false,\n            $this->rootUrlTemplate ?? $this->rootUrl,\n            $this->batchPath\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Task/Composer.php",
    "content": "<?php\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Task;\n\nuse Composer\\Script\\Event;\nuse InvalidArgumentException;\nuse Symfony\\Component\\Filesystem\\Filesystem;\nuse Symfony\\Component\\Finder\\Finder;\n\nclass Composer\n{\n    /**\n     * @param Event $event Composer event passed in for any script method\n     * @param Filesystem $filesystem Optional. Used for testing.\n     */\n    public static function cleanup(\n        Event $event,\n        ?Filesystem $filesystem = null\n    ) {\n        $composer = $event->getComposer();\n        $extra = $composer->getPackage()->getExtra();\n        $servicesToKeep = $extra['google/apiclient-services'] ?? [];\n        if (empty($servicesToKeep)) {\n            return;\n        }\n        $vendorDir = $composer->getConfig()->get('vendor-dir');\n        $serviceDir = sprintf(\n            '%s/google/apiclient-services/src/Google/Service',\n            $vendorDir\n        );\n        if (!is_dir($serviceDir)) {\n            // path for google/apiclient-services >= 0.200.0\n            $serviceDir = sprintf(\n                '%s/google/apiclient-services/src',\n                $vendorDir\n            );\n        }\n        self::verifyServicesToKeep($serviceDir, $servicesToKeep);\n        $finder = self::getServicesToRemove($serviceDir, $servicesToKeep);\n        $filesystem = $filesystem ?: new Filesystem();\n        $servicesToRemoveCount = $finder->count();\n        if (0 === $servicesToRemoveCount) {\n            return;\n        }\n        $event->getIO()->write(\n            sprintf('Removing %d google services', $servicesToRemoveCount)\n        );\n        $pathsToRemove = iterator_to_array($finder);\n        foreach ($pathsToRemove as $pathToRemove) {\n            $realpath = $pathToRemove->getRealPath();\n            $filesystem->remove($realpath);\n            $filesystem->remove($realpath . '.php');\n        }\n    }\n\n    /**\n     * @throws InvalidArgumentException when the service doesn't exist\n     */\n    private static function verifyServicesToKeep(\n        $serviceDir,\n        array $servicesToKeep\n    ) {\n        $finder = (new Finder())\n            ->directories()\n            ->depth('== 0');\n\n        foreach ($servicesToKeep as $service) {\n            if (!preg_match('/^[a-zA-Z0-9]*$/', $service)) {\n                throw new InvalidArgumentException(\n                    sprintf(\n                        'Invalid Google service name \"%s\"',\n                        $service\n                    )\n                );\n            }\n            try {\n                $finder->in($serviceDir . '/' . $service);\n            } catch (InvalidArgumentException $e) {\n                throw new InvalidArgumentException(\n                    sprintf(\n                        'Google service \"%s\" does not exist or was removed previously',\n                        $service\n                    )\n                );\n            }\n        }\n    }\n\n    private static function getServicesToRemove(\n        $serviceDir,\n        array $servicesToKeep\n    ) {\n        // find all files in the current directory\n        return (new Finder())\n            ->directories()\n            ->depth('== 0')\n            ->in($serviceDir)\n            ->exclude($servicesToKeep);\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Task/Exception.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Task;\n\nuse Google\\Exception as GoogleException;\n\nclass Exception extends GoogleException\n{\n}\n"
  },
  {
    "path": "lib/Google/src/Task/Retryable.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Task;\n\n/**\n * Interface for checking how many times a given task can be retried following\n * a failure.\n */\ninterface Retryable\n{\n}\n"
  },
  {
    "path": "lib/Google/src/Task/Runner.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Task;\n\nuse Google\\Service\\Exception as GoogleServiceException;\nuse Google\\Task\\Exception as GoogleTaskException;\n\n/**\n * A task runner with exponential backoff support.\n *\n * @see https://developers.google.com/drive/web/handle-errors#implementing_exponential_backoff\n */\nclass Runner\n{\n    const TASK_RETRY_NEVER = 0;\n    const TASK_RETRY_ONCE = 1;\n    const TASK_RETRY_ALWAYS = -1;\n\n    /**\n     * @var integer $maxDelay The max time (in seconds) to wait before a retry.\n     */\n    private $maxDelay = 60;\n\n    /**\n     * @var integer $delay The previous delay from which the next is calculated.\n     */\n    private $delay = 1;\n\n    /**\n     * @var integer $factor The base number for the exponential back off.\n     */\n    private $factor = 2;\n\n    /**\n     * @var float $jitter A random number between -$jitter and $jitter will be\n     * added to $factor on each iteration to allow for a better distribution of\n     * retries.\n     */\n    private $jitter = 0.5;\n\n    /**\n     * @var integer $attempts The number of attempts that have been tried so far.\n     */\n    private $attempts = 0;\n\n    /**\n     * @var integer $maxAttempts The max number of attempts allowed.\n     */\n    private $maxAttempts = 1;\n\n    /**\n     * @var callable $action The task to run and possibly retry.\n     */\n    private $action;\n\n    /**\n     * @var array $arguments The task arguments.\n     */\n    private $arguments;\n\n    /**\n     * @var array $retryMap Map of errors with retry counts.\n     */\n    protected $retryMap = [\n        '500' => self::TASK_RETRY_ALWAYS,\n        '503' => self::TASK_RETRY_ALWAYS,\n        'rateLimitExceeded' => self::TASK_RETRY_ALWAYS,\n        'userRateLimitExceeded' => self::TASK_RETRY_ALWAYS,\n        6  => self::TASK_RETRY_ALWAYS,  // CURLE_COULDNT_RESOLVE_HOST\n        7  => self::TASK_RETRY_ALWAYS,  // CURLE_COULDNT_CONNECT\n        28 => self::TASK_RETRY_ALWAYS,  // CURLE_OPERATION_TIMEOUTED\n        35 => self::TASK_RETRY_ALWAYS,  // CURLE_SSL_CONNECT_ERROR\n        52 => self::TASK_RETRY_ALWAYS,  // CURLE_GOT_NOTHING\n        'lighthouseError' => self::TASK_RETRY_NEVER\n    ];\n\n    /**\n     * Creates a new task runner with exponential backoff support.\n     *\n     * @param array $config The task runner config\n     * @param string $name The name of the current task (used for logging)\n     * @param callable $action The task to run and possibly retry\n     * @param array $arguments The task arguments\n     * @throws \\Google\\Task\\Exception when misconfigured\n     */\n    // @phpstan-ignore-next-line\n    public function __construct(\n        $config,\n        $name,\n        $action,\n        array $arguments = []\n    ) {\n        if (isset($config['initial_delay'])) {\n            if ($config['initial_delay'] < 0) {\n                throw new GoogleTaskException(\n                    'Task configuration `initial_delay` must not be negative.'\n                );\n            }\n\n            $this->delay = $config['initial_delay'];\n        }\n\n        if (isset($config['max_delay'])) {\n            if ($config['max_delay'] <= 0) {\n                throw new GoogleTaskException(\n                    'Task configuration `max_delay` must be greater than 0.'\n                );\n            }\n\n            $this->maxDelay = $config['max_delay'];\n        }\n\n        if (isset($config['factor'])) {\n            if ($config['factor'] <= 0) {\n                throw new GoogleTaskException(\n                    'Task configuration `factor` must be greater than 0.'\n                );\n            }\n\n            $this->factor = $config['factor'];\n        }\n\n        if (isset($config['jitter'])) {\n            if ($config['jitter'] <= 0) {\n                throw new GoogleTaskException(\n                    'Task configuration `jitter` must be greater than 0.'\n                );\n            }\n\n            $this->jitter = $config['jitter'];\n        }\n\n        if (isset($config['retries'])) {\n            if ($config['retries'] < 0) {\n                throw new GoogleTaskException(\n                    'Task configuration `retries` must not be negative.'\n                );\n            }\n            $this->maxAttempts += $config['retries'];\n        }\n\n        if (!is_callable($action)) {\n            throw new GoogleTaskException(\n                'Task argument `$action` must be a valid callable.'\n            );\n        }\n\n        $this->action = $action;\n        $this->arguments = $arguments;\n    }\n\n    /**\n     * Checks if a retry can be attempted.\n     *\n     * @return boolean\n     */\n    public function canAttempt()\n    {\n        return $this->attempts < $this->maxAttempts;\n    }\n\n    /**\n     * Runs the task and (if applicable) automatically retries when errors occur.\n     *\n     * @return mixed\n     * @throws \\Google\\Service\\Exception on failure when no retries are available.\n     */\n    public function run()\n    {\n        while ($this->attempt()) {\n            try {\n                return call_user_func_array($this->action, $this->arguments);\n            } catch (GoogleServiceException $exception) {\n                $allowedRetries = $this->allowedRetries(\n                    $exception->getCode(),\n                    $exception->getErrors()\n                );\n\n                if (!$this->canAttempt() || !$allowedRetries) {\n                    throw $exception;\n                }\n\n                if ($allowedRetries > 0) {\n                    $this->maxAttempts = min(\n                        $this->maxAttempts,\n                        $this->attempts + $allowedRetries\n                    );\n                }\n            }\n        }\n    }\n\n    /**\n     * Runs a task once, if possible. This is useful for bypassing the `run()`\n     * loop.\n     *\n     * NOTE: If this is not the first attempt, this function will sleep in\n     * accordance to the backoff configurations before running the task.\n     *\n     * @return boolean\n     */\n    public function attempt()\n    {\n        if (!$this->canAttempt()) {\n            return false;\n        }\n\n        if ($this->attempts > 0) {\n            $this->backOff();\n        }\n\n        $this->attempts++;\n\n        return true;\n    }\n\n    /**\n     * Sleeps in accordance to the backoff configurations.\n     */\n    private function backOff()\n    {\n        $delay = $this->getDelay();\n\n        usleep((int) ($delay * 1000000));\n    }\n\n    /**\n     * Gets the delay (in seconds) for the current backoff period.\n     *\n     * @return int\n     */\n    private function getDelay()\n    {\n        $jitter = $this->getJitter();\n        $factor = $this->attempts > 1 ? $this->factor + $jitter : 1 + abs($jitter);\n\n        return $this->delay = min($this->maxDelay, $this->delay * $factor);\n    }\n\n    /**\n     * Gets the current jitter (random number between -$this->jitter and\n     * $this->jitter).\n     *\n     * @return float\n     */\n    private function getJitter()\n    {\n        return $this->jitter * 2 * mt_rand() / mt_getrandmax() - $this->jitter;\n    }\n\n    /**\n     * Gets the number of times the associated task can be retried.\n     *\n     * NOTE: -1 is returned if the task can be retried indefinitely\n     *\n     * @return integer\n     */\n    public function allowedRetries($code, $errors = [])\n    {\n        if (isset($this->retryMap[$code])) {\n            return $this->retryMap[$code];\n        }\n\n        if (\n            !empty($errors) &&\n            isset($errors[0]['reason'], $this->retryMap[$errors[0]['reason']])\n        ) {\n            return $this->retryMap[$errors[0]['reason']];\n        }\n\n        return 0;\n    }\n\n    public function setRetryMap($retryMap)\n    {\n        $this->retryMap = $retryMap;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/Utils/UriTemplate.php",
    "content": "<?php\n/*\n * Copyright 2013 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Utils;\n\n/**\n * Implementation of levels 1-3 of the URI Template spec.\n * @see http://tools.ietf.org/html/rfc6570\n */\nclass UriTemplate\n{\n    const TYPE_MAP = \"1\";\n    const TYPE_LIST = \"2\";\n    const TYPE_SCALAR = \"4\";\n\n    /**\n     * @var array $operators\n     * These are valid at the start of a template block to\n     * modify the way in which the variables inside are\n     * processed.\n     */\n    private $operators = [\n        \"+\" => \"reserved\",\n        \"/\" => \"segments\",\n        \".\" => \"dotprefix\",\n        \"#\" => \"fragment\",\n        \";\" => \"semicolon\",\n        \"?\" => \"form\",\n        \"&\" => \"continuation\"\n    ];\n\n    /**\n     * @var array<string>\n     * These are the characters which should not be URL encoded in reserved\n     * strings.\n     */\n    private $reserved = [\n        \"=\", \",\", \"!\", \"@\", \"|\", \":\", \"/\", \"?\", \"#\",\n        \"[\", \"]\", '$', \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \";\"\n    ];\n    private $reservedEncoded = [\n        \"%3D\", \"%2C\", \"%21\", \"%40\", \"%7C\", \"%3A\", \"%2F\", \"%3F\",\n        \"%23\", \"%5B\", \"%5D\", \"%24\", \"%26\", \"%27\", \"%28\", \"%29\",\n        \"%2A\", \"%2B\", \"%3B\"\n    ];\n\n    public function parse($string, array $parameters)\n    {\n        return $this->resolveNextSection($string, $parameters);\n    }\n\n    /**\n     * This function finds the first matching {...} block and\n     * executes the replacement. It then calls itself to find\n     * subsequent blocks, if any.\n     */\n    private function resolveNextSection($string, $parameters)\n    {\n        $start = strpos($string, \"{\");\n        if ($start === false) {\n            return $string;\n        }\n        $end = strpos($string, \"}\");\n        if ($end === false) {\n            return $string;\n        }\n        $string = $this->replace($string, $start, $end, $parameters);\n        return $this->resolveNextSection($string, $parameters);\n    }\n\n    private function replace($string, $start, $end, $parameters)\n    {\n        // We know a data block will have {} round it, so we can strip that.\n        $data = substr($string, $start + 1, $end - $start - 1);\n\n        // If the first character is one of the reserved operators, it effects\n        // the processing of the stream.\n        if (isset($this->operators[$data[0]])) {\n            $op = $this->operators[$data[0]];\n            $data = substr($data, 1);\n            $prefix = \"\";\n            $prefix_on_missing = false;\n\n            switch ($op) {\n                case \"reserved\":\n                    // Reserved means certain characters should not be URL encoded\n                    $data = $this->replaceVars($data, $parameters, \",\", null, true);\n                    break;\n                case \"fragment\":\n                    // Comma separated with fragment prefix. Bare values only.\n                    $prefix = \"#\";\n                    $prefix_on_missing = true;\n                    $data = $this->replaceVars($data, $parameters, \",\", null, true);\n                    break;\n                case \"segments\":\n                    // Slash separated data. Bare values only.\n                    $prefix = \"/\";\n                    $data =$this->replaceVars($data, $parameters, \"/\");\n                    break;\n                case \"dotprefix\":\n                    // Dot separated data. Bare values only.\n                    $prefix = \".\";\n                    $prefix_on_missing = true;\n                    $data = $this->replaceVars($data, $parameters, \".\");\n                    break;\n                case \"semicolon\":\n                    // Semicolon prefixed and separated. Uses the key name\n                    $prefix = \";\";\n                    $data = $this->replaceVars($data, $parameters, \";\", \"=\", false, true, false);\n                    break;\n                case \"form\":\n                    // Standard URL format. Uses the key name\n                    $prefix = \"?\";\n                    $data = $this->replaceVars($data, $parameters, \"&\", \"=\");\n                    break;\n                case \"continuation\":\n                    // Standard URL, but with leading ampersand. Uses key name.\n                    $prefix = \"&\";\n                    $data = $this->replaceVars($data, $parameters, \"&\", \"=\");\n                    break;\n            }\n\n            // Add the initial prefix character if data is valid.\n            if ($data || ($data !== false && $prefix_on_missing)) {\n                $data = $prefix . $data;\n            }\n        } else {\n            // If no operator we replace with the defaults.\n            $data = $this->replaceVars($data, $parameters);\n        }\n        // This is chops out the {...} and replaces with the new section.\n        return substr($string, 0, $start) . $data . substr($string, $end + 1);\n    }\n\n    private function replaceVars(\n        $section,\n        $parameters,\n        $sep = \",\",\n        $combine = null,\n        $reserved = false,\n        $tag_empty = false,\n        $combine_on_empty = true\n    ) {\n        if (strpos($section, \",\") === false) {\n            // If we only have a single value, we can immediately process.\n            return $this->combine(\n                $section,\n                $parameters,\n                $sep,\n                $combine,\n                $reserved,\n                $tag_empty,\n                $combine_on_empty\n            );\n        } else {\n            // If we have multiple values, we need to split and loop over them.\n            // Each is treated individually, then glued together with the\n            // separator character.\n            $vars = explode(\",\", $section);\n            return $this->combineList(\n                $vars,\n                $sep,\n                $parameters,\n                $combine,\n                $reserved,\n                false, // Never emit empty strings in multi-param replacements\n                $combine_on_empty\n            );\n        }\n    }\n\n    public function combine(\n        $key,\n        $parameters,\n        $sep,\n        $combine,\n        $reserved,\n        $tag_empty,\n        $combine_on_empty\n    ) {\n        $length = false;\n        $explode = false;\n        $skip_final_combine = false;\n        $value = false;\n\n        // Check for length restriction.\n        if (strpos($key, \":\") !== false) {\n            list($key, $length) = explode(\":\", $key);\n        }\n\n        // Check for explode parameter.\n        if ($key[strlen($key) - 1] == \"*\") {\n            $explode = true;\n            $key = substr($key, 0, -1);\n            $skip_final_combine = true;\n        }\n\n        // Define the list separator.\n        $list_sep = $explode ? $sep : \",\";\n\n        if (isset($parameters[$key])) {\n            $data_type = $this->getDataType($parameters[$key]);\n            switch ($data_type) {\n                case self::TYPE_SCALAR:\n                    $value = $this->getValue($parameters[$key], $length);\n                    break;\n                case self::TYPE_LIST:\n                    $values = [];\n                    foreach ($parameters[$key] as $pkey => $pvalue) {\n                        $pvalue = $this->getValue($pvalue, $length);\n                        if ($combine && $explode) {\n                            $values[$pkey] = $key . $combine . $pvalue;\n                        } else {\n                            $values[$pkey] = $pvalue;\n                        }\n                    }\n                    $value = implode($list_sep, $values);\n                    if ($value == '') {\n                        return '';\n                    }\n                    break;\n                case self::TYPE_MAP:\n                    $values = [];\n                    foreach ($parameters[$key] as $pkey => $pvalue) {\n                        $pvalue = $this->getValue($pvalue, $length);\n                        if ($explode) {\n                            $pkey = $this->getValue($pkey, $length);\n                            $values[] = $pkey . \"=\" . $pvalue; // Explode triggers = combine.\n                        } else {\n                            $values[] = $pkey;\n                            $values[] = $pvalue;\n                        }\n                    }\n                    $value = implode($list_sep, $values);\n                    if ($value == '') {\n                        return false;\n                    }\n                    break;\n            }\n        } elseif ($tag_empty) {\n            // If we are just indicating empty values with their key name, return that.\n            return $key;\n        } else {\n            // Otherwise we can skip this variable due to not being defined.\n            return false;\n        }\n\n        if ($reserved) {\n            $value = str_replace($this->reservedEncoded, $this->reserved, $value);\n        }\n\n        // If we do not need to include the key name, we just return the raw\n        // value.\n        if (!$combine || $skip_final_combine) {\n            return $value;\n        }\n\n        // Else we combine the key name: foo=bar, if value is not the empty string.\n        return $key . ($value != '' || $combine_on_empty ? $combine . $value : '');\n    }\n\n    /**\n     * Return the type of a passed in value\n     */\n    private function getDataType($data)\n    {\n        if (is_array($data)) {\n            reset($data);\n            if (key($data) !== 0) {\n                return self::TYPE_MAP;\n            }\n            return self::TYPE_LIST;\n        }\n        return self::TYPE_SCALAR;\n    }\n\n    /**\n     * Utility function that merges multiple combine calls\n     * for multi-key templates.\n     */\n    private function combineList(\n        $vars,\n        $sep,\n        $parameters,\n        $combine,\n        $reserved,\n        $tag_empty,\n        $combine_on_empty\n    ) {\n        $ret = [];\n        foreach ($vars as $var) {\n            $response = $this->combine(\n                $var,\n                $parameters,\n                $sep,\n                $combine,\n                $reserved,\n                $tag_empty,\n                $combine_on_empty\n            );\n            if ($response === false) {\n                continue;\n            }\n            $ret[] = $response;\n        }\n        return implode($sep, $ret);\n    }\n\n    /**\n     * Utility function to encode and trim values\n     */\n    private function getValue($value, $length)\n    {\n        if ($length) {\n            $value = substr($value, 0, $length);\n        }\n        $value = rawurlencode($value);\n        return $value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/src/aliases.php",
    "content": "<?php\n\nif (class_exists('Google_Client', false)) {\n    // Prevent error with preloading in PHP 7.4\n    // @see https://github.com/googleapis/google-api-php-client/issues/1976\n    return;\n}\n\n$classMap = [\n    'Google\\\\Client' => 'Google_Client',\n    'Google\\\\Service' => 'Google_Service',\n    'Google\\\\AccessToken\\\\Revoke' => 'Google_AccessToken_Revoke',\n    'Google\\\\AccessToken\\\\Verify' => 'Google_AccessToken_Verify',\n    'Google\\\\Model' => 'Google_Model',\n    'Google\\\\Utils\\\\UriTemplate' => 'Google_Utils_UriTemplate',\n    'Google\\\\AuthHandler\\\\Guzzle6AuthHandler' => 'Google_AuthHandler_Guzzle6AuthHandler',\n    'Google\\\\AuthHandler\\\\Guzzle7AuthHandler' => 'Google_AuthHandler_Guzzle7AuthHandler',\n    'Google\\\\AuthHandler\\\\AuthHandlerFactory' => 'Google_AuthHandler_AuthHandlerFactory',\n    'Google\\\\Http\\\\Batch' => 'Google_Http_Batch',\n    'Google\\\\Http\\\\MediaFileUpload' => 'Google_Http_MediaFileUpload',\n    'Google\\\\Http\\\\REST' => 'Google_Http_REST',\n    'Google\\\\Task\\\\Retryable' => 'Google_Task_Retryable',\n    'Google\\\\Task\\\\Exception' => 'Google_Task_Exception',\n    'Google\\\\Task\\\\Runner' => 'Google_Task_Runner',\n    'Google\\\\Collection' => 'Google_Collection',\n    'Google\\\\Service\\\\Exception' => 'Google_Service_Exception',\n    'Google\\\\Service\\\\Resource' => 'Google_Service_Resource',\n    'Google\\\\Exception' => 'Google_Exception',\n];\n\nforeach ($classMap as $class => $alias) {\n    class_alias($class, $alias);\n}\n\n/**\n * This class needs to be defined explicitly as scripts must be recognized by\n * the autoloader.\n */\nclass Google_Task_Composer extends \\Google\\Task\\Composer\n{\n}\n\n/** @phpstan-ignore-next-line */\nif (\\false) {\n    class Google_AccessToken_Revoke extends \\Google\\AccessToken\\Revoke\n    {\n    }\n    class Google_AccessToken_Verify extends \\Google\\AccessToken\\Verify\n    {\n    }\n    class Google_AuthHandler_AuthHandlerFactory extends \\Google\\AuthHandler\\AuthHandlerFactory\n    {\n    }\n    class Google_AuthHandler_Guzzle6AuthHandler extends \\Google\\AuthHandler\\Guzzle6AuthHandler\n    {\n    }\n    class Google_AuthHandler_Guzzle7AuthHandler extends \\Google\\AuthHandler\\Guzzle7AuthHandler\n    {\n    }\n    class Google_Client extends \\Google\\Client\n    {\n    }\n    class Google_Collection extends \\Google\\Collection\n    {\n    }\n    class Google_Exception extends \\Google\\Exception\n    {\n    }\n    class Google_Http_Batch extends \\Google\\Http\\Batch\n    {\n    }\n    class Google_Http_MediaFileUpload extends \\Google\\Http\\MediaFileUpload\n    {\n    }\n    class Google_Http_REST extends \\Google\\Http\\REST\n    {\n    }\n    class Google_Model extends \\Google\\Model\n    {\n    }\n    class Google_Service extends \\Google\\Service\n    {\n    }\n    class Google_Service_Exception extends \\Google\\Service\\Exception\n    {\n    }\n    class Google_Service_Resource extends \\Google\\Service\\Resource\n    {\n    }\n    class Google_Task_Exception extends \\Google\\Task\\Exception\n    {\n    }\n    interface Google_Task_Retryable extends \\Google\\Task\\Retryable\n    {\n    }\n    class Google_Task_Runner extends \\Google\\Task\\Runner\n    {\n    }\n    class Google_Utils_UriTemplate extends \\Google\\Utils\\UriTemplate\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/autoload.php",
    "content": "<?php\n\n// autoload.php @generated by Composer\n\nif (PHP_VERSION_ID < 50600) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via \"composer self-update --2.2\". Aborting.'.PHP_EOL;\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, $err);\n        } elseif (!headers_sent()) {\n            echo $err;\n        }\n    }\n    throw new RuntimeException($err);\n}\n\nrequire_once __DIR__ . '/composer/autoload_real.php';\n\nreturn ComposerAutoloaderInitc1ba3d113640ecbb1bd5645a9bacb037::getLoader();\n"
  },
  {
    "path": "lib/Google/vendor/bin/google-cloud-batch",
    "content": "#!/usr/bin/env php\n<?php\n\n/**\n * Proxy PHP file generated by Composer\n *\n * This file includes the referenced bin path (../google/cloud-core/bin/google-cloud-batch)\n * using a stream wrapper to prevent the shebang from being output on PHP<8\n *\n * @generated\n */\n\nnamespace Composer;\n\n$GLOBALS['_composer_bin_dir'] = __DIR__;\n$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';\n\nif (PHP_VERSION_ID < 80000) {\n    if (!class_exists('Composer\\BinProxyWrapper')) {\n        /**\n         * @internal\n         */\n        final class BinProxyWrapper\n        {\n            private $handle;\n            private $position;\n            private $realpath;\n\n            public function stream_open($path, $mode, $options, &$opened_path)\n            {\n                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution\n                $opened_path = substr($path, 17);\n                $this->realpath = realpath($opened_path) ?: $opened_path;\n                $opened_path = $this->realpath;\n                $this->handle = fopen($this->realpath, $mode);\n                $this->position = 0;\n\n                return (bool) $this->handle;\n            }\n\n            public function stream_read($count)\n            {\n                $data = fread($this->handle, $count);\n\n                if ($this->position === 0) {\n                    $data = preg_replace('{^#!.*\\r?\\n}', '', $data);\n                }\n\n                $this->position += strlen($data);\n\n                return $data;\n            }\n\n            public function stream_cast($castAs)\n            {\n                return $this->handle;\n            }\n\n            public function stream_close()\n            {\n                fclose($this->handle);\n            }\n\n            public function stream_lock($operation)\n            {\n                return $operation ? flock($this->handle, $operation) : true;\n            }\n\n            public function stream_seek($offset, $whence)\n            {\n                if (0 === fseek($this->handle, $offset, $whence)) {\n                    $this->position = ftell($this->handle);\n                    return true;\n                }\n\n                return false;\n            }\n\n            public function stream_tell()\n            {\n                return $this->position;\n            }\n\n            public function stream_eof()\n            {\n                return feof($this->handle);\n            }\n\n            public function stream_stat()\n            {\n                return array();\n            }\n\n            public function stream_set_option($option, $arg1, $arg2)\n            {\n                return true;\n            }\n\n            public function url_stat($path, $flags)\n            {\n                $path = substr($path, 17);\n                if (file_exists($path)) {\n                    return stat($path);\n                }\n\n                return false;\n            }\n        }\n    }\n\n    if (\n        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))\n        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\\BinProxyWrapper'))\n    ) {\n        return include(\"phpvfscomposer://\" . __DIR__ . '/..'.'/google/cloud-core/bin/google-cloud-batch');\n    }\n}\n\nreturn include __DIR__ . '/..'.'/google/cloud-core/bin/google-cloud-batch';\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n## [0.13.1](https://github.com/brick/math/releases/tag/0.13.1) - 2025-03-29\n\n✨ **Improvements**\n\n- `__toString()` methods of `BigInteger` and `BigDecimal` are now type-hinted as returning `numeric-string` instead of `string` (#90 by @vudaltsov)\n\n## [0.13.0](https://github.com/brick/math/releases/tag/0.13.0) - 2025-03-03\n\n💥 **Breaking changes**\n\n- `BigDecimal::ofUnscaledValue()` no longer throws an exception if the scale is negative\n- `MathException` now extends `RuntimeException` instead of `Exception`; this reverts the change introduced in version `0.11.0` (#82)\n\n✨ **New features**\n\n- `BigDecimal::ofUnscaledValue()` allows a negative scale (and converts the values to create a zero scale number)\n\n## [0.12.3](https://github.com/brick/math/releases/tag/0.12.3) - 2025-02-28\n\n✨ **New features**\n\n- `BigDecimal::getPrecision()` Returns the number of significant digits in a decimal number\n\n## [0.12.2](https://github.com/brick/math/releases/tag/0.12.2) - 2025-02-26\n\n⚡️ **Performance improvements**\n\n- Division in `NativeCalculator` is now faster for small divisors, thanks to [@Izumi-kun](https://github.com/Izumi-kun) in [#87](https://github.com/brick/math/pull/87).\n\n👌 **Improvements**\n\n- Add missing `RoundingNecessaryException` to the `@throws` annotation of `BigNumber::of()`\n\n## [0.12.1](https://github.com/brick/math/releases/tag/0.12.1) - 2023-11-29\n\n⚡️ **Performance improvements**\n\n- `BigNumber::of()` is now faster, thanks to [@SebastienDug](https://github.com/SebastienDug) in [#77](https://github.com/brick/math/pull/77).\n\n## [0.12.0](https://github.com/brick/math/releases/tag/0.12.0) - 2023-11-26\n\n💥 **Breaking changes**\n\n- Minimum PHP version is now 8.1\n- `RoundingMode` is now an `enum`; if you're type-hinting rounding modes, you need to type-hint against `RoundingMode` instead of `int` now\n- `BigNumber` classes do not implement the `Serializable` interface anymore (they use the [new custom object serialization mechanism](https://wiki.php.net/rfc/custom_object_serialization))\n- The following breaking changes only affect you if you're creating your own `BigNumber` subclasses:\n  - the return type of `BigNumber::of()` is now `static`\n  - `BigNumber` has a new abstract method `from()`\n  - all `public` and `protected` functions of `BigNumber` are now `final`\n\n## [0.11.0](https://github.com/brick/math/releases/tag/0.11.0) - 2023-01-16\n\n💥 **Breaking changes**\n\n- Minimum PHP version is now 8.0\n- Methods accepting a union of types are now strongly typed<sup>*</sup>\n- `MathException` now extends `Exception` instead of `RuntimeException`\n\n<sup>* You may now run into type errors if you were passing `Stringable` objects to `of()` or any of the methods\ninternally calling `of()`, with `strict_types` enabled. You can fix this by casting `Stringable` objects to `string`\nfirst.</sup>\n\n## [0.10.2](https://github.com/brick/math/releases/tag/0.10.2) - 2022-08-11\n\n👌 **Improvements**\n\n- `BigRational::toFloat()` now simplifies the fraction before performing division (#73) thanks to @olsavmic\n\n## [0.10.1](https://github.com/brick/math/releases/tag/0.10.1) - 2022-08-02\n\n✨ **New features**\n\n- `BigInteger::gcdMultiple()` returns the GCD of multiple `BigInteger` numbers\n\n## [0.10.0](https://github.com/brick/math/releases/tag/0.10.0) - 2022-06-18\n\n💥 **Breaking changes**\n\n- Minimum PHP version is now 7.4\n\n## [0.9.3](https://github.com/brick/math/releases/tag/0.9.3) - 2021-08-15\n\n🚀 **Compatibility with PHP 8.1**\n\n- Support for custom object serialization; this removes a warning on PHP 8.1 due to the `Serializable` interface being deprecated (#60) thanks @TRowbotham\n\n## [0.9.2](https://github.com/brick/math/releases/tag/0.9.2) - 2021-01-20\n\n🐛 **Bug fix**\n\n- Incorrect results could be returned when using the BCMath calculator, with a default scale set with `bcscale()`, on PHP >= 7.2 (#55).\n\n## [0.9.1](https://github.com/brick/math/releases/tag/0.9.1) - 2020-08-19\n\n✨ **New features**\n\n- `BigInteger::not()` returns the bitwise `NOT` value\n\n🐛 **Bug fixes**\n\n- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers\n- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available\n\n## [0.9.0](https://github.com/brick/math/releases/tag/0.9.0) - 2020-08-18\n\n👌 **Improvements**\n\n- `BigNumber::of()` now accepts `.123` and `123.` formats, both of which return a `BigDecimal`\n\n💥 **Breaking changes**\n\n- Deprecated method `BigInteger::powerMod()` has been removed - use `modPow()` instead\n- Deprecated method `BigInteger::parse()` has been removed - use `fromBase()` instead\n\n## [0.8.17](https://github.com/brick/math/releases/tag/0.8.17) - 2020-08-19\n\n🐛 **Bug fix**\n\n- `BigInteger::toBytes()` could return an incorrect binary representation for some numbers\n- The bitwise operations `and()`, `or()`, `xor()` on `BigInteger` could return an incorrect result when the GMP extension is not available\n\n## [0.8.16](https://github.com/brick/math/releases/tag/0.8.16) - 2020-08-18\n\n🚑 **Critical fix**\n\n- This version reintroduces the deprecated `BigInteger::parse()` method, that has been removed by mistake in version `0.8.9` and should have lasted for the whole `0.8` release cycle.\n\n✨ **New features**\n\n- `BigInteger::modInverse()` calculates a modular multiplicative inverse\n- `BigInteger::fromBytes()` creates a `BigInteger` from a byte string\n- `BigInteger::toBytes()` converts a `BigInteger` to a byte string\n- `BigInteger::randomBits()` creates a pseudo-random `BigInteger` of a given bit length\n- `BigInteger::randomRange()` creates a pseudo-random `BigInteger` between two bounds\n\n💩 **Deprecations**\n\n- `BigInteger::powerMod()` is now deprecated in favour of `modPow()`\n\n## [0.8.15](https://github.com/brick/math/releases/tag/0.8.15) - 2020-04-15\n\n🐛 **Fixes**\n\n- added missing `ext-json` requirement, due to `BigNumber` implementing `JsonSerializable`\n\n⚡️ **Optimizations**\n\n- additional optimization in `BigInteger::remainder()`\n\n## [0.8.14](https://github.com/brick/math/releases/tag/0.8.14) - 2020-02-18\n\n✨ **New features**\n\n- `BigInteger::getLowestSetBit()` returns the index of the rightmost one bit\n\n## [0.8.13](https://github.com/brick/math/releases/tag/0.8.13) - 2020-02-16\n\n✨ **New features**\n\n- `BigInteger::isEven()` tests whether the number is even\n- `BigInteger::isOdd()` tests whether the number is odd\n- `BigInteger::testBit()` tests if a bit is set\n- `BigInteger::getBitLength()` returns the number of bits in the minimal representation of the number\n\n## [0.8.12](https://github.com/brick/math/releases/tag/0.8.12) - 2020-02-03\n\n🛠️ **Maintenance release**\n\nClasses are now annotated for better static analysis with [psalm](https://psalm.dev/).\n\nThis is a maintenance release: no bug fixes, no new features, no breaking changes.\n\n## [0.8.11](https://github.com/brick/math/releases/tag/0.8.11) - 2020-01-23\n\n✨ **New feature**\n\n`BigInteger::powerMod()` performs a power-with-modulo operation. Useful for crypto.\n\n## [0.8.10](https://github.com/brick/math/releases/tag/0.8.10) - 2020-01-21\n\n✨ **New feature**\n\n`BigInteger::mod()` returns the **modulo** of two numbers. The *modulo* differs from the *remainder* when the signs of the operands are different.\n\n## [0.8.9](https://github.com/brick/math/releases/tag/0.8.9) - 2020-01-08\n\n⚡️ **Performance improvements**\n\nA few additional optimizations in `BigInteger` and `BigDecimal` when one of the operands can be returned as is. Thanks to @tomtomsen in #24.\n\n## [0.8.8](https://github.com/brick/math/releases/tag/0.8.8) - 2019-04-25\n\n🐛 **Bug fixes**\n\n- `BigInteger::toBase()` could return an empty string for zero values (BCMath & Native calculators only, GMP calculator unaffected)\n\n✨ **New features**\n\n- `BigInteger::toArbitraryBase()` converts a number to an arbitrary base, using a custom alphabet\n- `BigInteger::fromArbitraryBase()` converts a string in an arbitrary base, using a custom alphabet, back to a number\n\nThese methods can be used as the foundation to convert strings between different bases/alphabets, using BigInteger as an intermediate representation.\n\n💩 **Deprecations**\n\n- `BigInteger::parse()` is now deprecated in favour of `fromBase()`\n\n`BigInteger::fromBase()` works the same way as `parse()`, with 2 minor differences:\n\n- the `$base` parameter is required, it does not default to `10`\n- it throws a `NumberFormatException` instead of an `InvalidArgumentException` when the number is malformed\n\n## [0.8.7](https://github.com/brick/math/releases/tag/0.8.7) - 2019-04-20\n\n**Improvements**\n\n- Safer conversion from `float` when using custom locales\n- **Much faster** `NativeCalculator` implementation 🚀\n\nYou can expect **at least a 3x performance improvement** for common arithmetic operations when using the library on systems without GMP or BCMath; it gets exponentially faster on multiplications with a high number of digits. This is due to calculations now being performed on whole blocks of digits (the block size depending on the platform, 32-bit or 64-bit) instead of digit-by-digit as before.\n\n## [0.8.6](https://github.com/brick/math/releases/tag/0.8.6) - 2019-04-11\n\n**New method**\n\n`BigNumber::sum()` returns the sum of one or more numbers.\n\n## [0.8.5](https://github.com/brick/math/releases/tag/0.8.5) - 2019-02-12\n\n**Bug fix**: `of()` factory methods could fail when passing a `float` in environments using a `LC_NUMERIC` locale with a decimal separator other than `'.'` (#20).\n\nThanks @manowark 👍\n\n## [0.8.4](https://github.com/brick/math/releases/tag/0.8.4) - 2018-12-07\n\n**New method**\n\n`BigDecimal::sqrt()` calculates the square root of a decimal number, to a given scale.\n\n## [0.8.3](https://github.com/brick/math/releases/tag/0.8.3) - 2018-12-06\n\n**New method**\n\n`BigInteger::sqrt()` calculates the square root of a number (thanks @peter279k).\n\n**New exception**\n\n`NegativeNumberException` is thrown when calling `sqrt()` on a negative number.\n\n## [0.8.2](https://github.com/brick/math/releases/tag/0.8.2) - 2018-11-08\n\n**Performance update**\n\n- Further improvement of `toInt()` performance\n- `NativeCalculator` can now perform some multiplications more efficiently\n\n## [0.8.1](https://github.com/brick/math/releases/tag/0.8.1) - 2018-11-07\n\nPerformance optimization of `toInt()` methods.\n\n## [0.8.0](https://github.com/brick/math/releases/tag/0.8.0) - 2018-10-13\n\n**Breaking changes**\n\nThe following deprecated methods have been removed. Use the new method name instead:\n\n| Method removed | Replacement method |\n| --- | --- |\n| `BigDecimal::getIntegral()` | `BigDecimal::getIntegralPart()` |\n| `BigDecimal::getFraction()` | `BigDecimal::getFractionalPart()` |\n\n---\n\n**New features**\n\n`BigInteger` has been augmented with 5 new methods for bitwise operations:\n\n| New method | Description |\n| --- | --- |\n| `and()` | performs a bitwise `AND` operation on two numbers |\n| `or()` | performs a bitwise `OR` operation on two numbers |\n| `xor()` | performs a bitwise `XOR` operation on two numbers |\n| `shiftedLeft()` | returns the number shifted left by a number of bits |\n| `shiftedRight()` | returns the number shifted right by a number of bits |\n\nThanks to @DASPRiD 👍\n\n## [0.7.3](https://github.com/brick/math/releases/tag/0.7.3) - 2018-08-20\n\n**New method:** `BigDecimal::hasNonZeroFractionalPart()`\n\n**Renamed/deprecated methods:**\n\n- `BigDecimal::getIntegral()` has been renamed to `getIntegralPart()` and is now deprecated\n- `BigDecimal::getFraction()` has been renamed to `getFractionalPart()` and is now deprecated\n\n## [0.7.2](https://github.com/brick/math/releases/tag/0.7.2) - 2018-07-21\n\n**Performance update**\n\n`BigInteger::parse()` and `toBase()` now use GMP's built-in base conversion features when available.\n\n## [0.7.1](https://github.com/brick/math/releases/tag/0.7.1) - 2018-03-01\n\nThis is a maintenance release, no code has been changed.\n\n- When installed with `--no-dev`, the autoloader does not autoload tests anymore\n- Tests and other files unnecessary for production are excluded from the dist package\n\nThis will help make installations more compact.\n\n## [0.7.0](https://github.com/brick/math/releases/tag/0.7.0) - 2017-10-02\n\nMethods renamed:\n\n- `BigNumber:sign()` has been renamed to `getSign()`\n- `BigDecimal::unscaledValue()` has been renamed to `getUnscaledValue()`\n- `BigDecimal::scale()` has been renamed to `getScale()`\n- `BigDecimal::integral()` has been renamed to `getIntegral()`\n- `BigDecimal::fraction()` has been renamed to `getFraction()`\n- `BigRational::numerator()` has been renamed to `getNumerator()`\n- `BigRational::denominator()` has been renamed to `getDenominator()`\n\nClasses renamed:\n\n- `ArithmeticException` has been renamed to `MathException`\n\n## [0.6.2](https://github.com/brick/math/releases/tag/0.6.2) - 2017-10-02\n\nThe base class for all exceptions is now `MathException`.\n`ArithmeticException` has been deprecated, and will be removed in 0.7.0.\n\n## [0.6.1](https://github.com/brick/math/releases/tag/0.6.1) - 2017-10-02\n\nA number of methods have been renamed:\n\n- `BigNumber:sign()` is deprecated; use `getSign()` instead\n- `BigDecimal::unscaledValue()` is deprecated; use `getUnscaledValue()` instead\n- `BigDecimal::scale()` is deprecated; use `getScale()` instead\n- `BigDecimal::integral()` is deprecated; use `getIntegral()` instead\n- `BigDecimal::fraction()` is deprecated; use `getFraction()` instead\n- `BigRational::numerator()` is deprecated; use `getNumerator()` instead\n- `BigRational::denominator()` is deprecated; use `getDenominator()` instead\n\nThe old methods will be removed in version 0.7.0.\n\n## [0.6.0](https://github.com/brick/math/releases/tag/0.6.0) - 2017-08-25\n\n- Minimum PHP version is now [7.1](https://gophp71.org/); for PHP 5.6 and PHP 7.0 support, use version `0.5`\n- Deprecated method `BigDecimal::withScale()` has been removed; use `toScale()` instead\n- Method `BigNumber::toInteger()` has been renamed to `toInt()`\n\n## [0.5.4](https://github.com/brick/math/releases/tag/0.5.4) - 2016-10-17\n\n`BigNumber` classes now implement [JsonSerializable](http://php.net/manual/en/class.jsonserializable.php).\nThe JSON output is always a string.\n\n## [0.5.3](https://github.com/brick/math/releases/tag/0.5.3) - 2016-03-31\n\nThis is a bugfix release. Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6.\n\n## [0.5.2](https://github.com/brick/math/releases/tag/0.5.2) - 2015-08-06\n\nThe `$scale` parameter of `BigDecimal::dividedBy()` is now optional again.\n\n## [0.5.1](https://github.com/brick/math/releases/tag/0.5.1) - 2015-07-05\n\n**New method: `BigNumber::toScale()`**\n\nThis allows to convert any `BigNumber` to a `BigDecimal` with a given scale, using rounding if necessary.\n\n## [0.5.0](https://github.com/brick/math/releases/tag/0.5.0) - 2015-07-04\n\n**New features**\n- Common `BigNumber` interface for all classes, with the following methods:\n  - `sign()` and derived methods (`isZero()`, `isPositive()`, ...)\n  - `compareTo()` and derived methods (`isEqualTo()`, `isGreaterThan()`, ...) that work across different `BigNumber` types\n  - `toBigInteger()`, `toBigDecimal()`, `toBigRational`() conversion methods\n  - `toInteger()` and `toFloat()` conversion methods to native types\n- Unified `of()` behaviour: every class now accepts any type of number, provided that it can be safely converted to the current type\n- New method: `BigDecimal::exactlyDividedBy()`; this method automatically computes the scale of the result, provided that the division yields a finite number of digits\n- New methods: `BigRational::quotient()` and `remainder()`\n- Fine-grained exceptions: `DivisionByZeroException`, `RoundingNecessaryException`, `NumberFormatException`\n- Factory methods `zero()`, `one()` and `ten()` available in all classes\n- Rounding mode reintroduced in `BigInteger::dividedBy()`\n\nThis release also comes with many performance improvements.\n\n---\n\n**Breaking changes**\n- `BigInteger`:\n  - `getSign()` is renamed to `sign()`\n  - `toString()` is renamed to `toBase()`\n  - `BigInteger::dividedBy()` now throws an exception by default if the remainder is not zero; use `quotient()` to get the previous behaviour\n- `BigDecimal`:\n  - `getSign()` is renamed to `sign()`\n  - `getUnscaledValue()` is renamed to `unscaledValue()`\n  - `getScale()` is renamed to `scale()`\n  - `getIntegral()` is renamed to `integral()`\n  - `getFraction()` is renamed to `fraction()`\n  - `divideAndRemainder()` is renamed to `quotientAndRemainder()`\n  - `dividedBy()` now takes a **mandatory** `$scale` parameter **before** the rounding mode\n  - `toBigInteger()` does not accept a `$roundingMode` parameter anymore\n  - `toBigRational()` does not simplify the fraction anymore; explicitly add `->simplified()` to get the previous behaviour\n- `BigRational`:\n  - `getSign()` is renamed to `sign()`\n  - `getNumerator()` is renamed to  `numerator()`\n  - `getDenominator()` is renamed to  `denominator()`\n  - `of()` is renamed to `nd()`, while `parse()` is renamed to `of()`\n- Miscellaneous:\n  - `ArithmeticException` is moved to an `Exception\\` sub-namespace\n  - `of()` factory methods now throw `NumberFormatException` instead of `InvalidArgumentException`\n\n## [0.4.3](https://github.com/brick/math/releases/tag/0.4.3) - 2016-03-31\n\nBackport of two bug fixes from the 0.5 branch:\n- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected\n- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6.\n\n## [0.4.2](https://github.com/brick/math/releases/tag/0.4.2) - 2015-06-16\n\nNew method: `BigDecimal::stripTrailingZeros()`\n\n## [0.4.1](https://github.com/brick/math/releases/tag/0.4.1) - 2015-06-12\n\nIntroducing a `BigRational` class, to perform calculations on fractions of any size.\n\n## [0.4.0](https://github.com/brick/math/releases/tag/0.4.0) - 2015-06-12\n\nRounding modes have been removed from `BigInteger`, and are now a concept specific to `BigDecimal`.\n\n`BigInteger::dividedBy()` now always returns the quotient of the division.\n\n## [0.3.5](https://github.com/brick/math/releases/tag/0.3.5) - 2016-03-31\n\nBackport of two bug fixes from the 0.5 branch:\n\n- `BigInteger::parse()` did not always throw `InvalidArgumentException` as expected\n- Dividing by a negative power of 1 with the same scale as the dividend could trigger an incorrect optimization which resulted in a wrong result. See #6.\n\n## [0.3.4](https://github.com/brick/math/releases/tag/0.3.4) - 2015-06-11\n\nNew methods:\n- `BigInteger::remainder()` returns the remainder of a division only\n- `BigInteger::gcd()` returns the greatest common divisor of two numbers\n\n## [0.3.3](https://github.com/brick/math/releases/tag/0.3.3) - 2015-06-07\n\nFix `toString()` not handling negative numbers.\n\n## [0.3.2](https://github.com/brick/math/releases/tag/0.3.2) - 2015-06-07\n\n`BigInteger` and `BigDecimal` now have a `getSign()` method that returns:\n- `-1` if the number is negative\n- `0` if the number is zero\n- `1` if the number is positive\n\n## [0.3.1](https://github.com/brick/math/releases/tag/0.3.1) - 2015-06-05\n\nMinor performance improvements\n\n## [0.3.0](https://github.com/brick/math/releases/tag/0.3.0) - 2015-06-04\n\nThe `$roundingMode` and `$scale` parameters have been swapped in `BigDecimal::dividedBy()`.\n\n## [0.2.2](https://github.com/brick/math/releases/tag/0.2.2) - 2015-06-04\n\nStronger immutability guarantee for `BigInteger` and `BigDecimal`.\n\nSo far, it would have been possible to break immutability of these classes by calling the `unserialize()` internal function. This release fixes that.\n\n## [0.2.1](https://github.com/brick/math/releases/tag/0.2.1) - 2015-06-02\n\nAdded `BigDecimal::divideAndRemainder()`\n\n## [0.2.0](https://github.com/brick/math/releases/tag/0.2.0) - 2015-05-22\n\n- `min()` and `max()` do not accept an `array` anymore, but a variable number of parameters\n- **minimum PHP version is now 5.6**\n- continuous integration with PHP 7\n\n## [0.1.1](https://github.com/brick/math/releases/tag/0.1.1) - 2014-09-01\n\n- Added `BigInteger::power()`\n- Added HHVM support\n\n## [0.1.0](https://github.com/brick/math/releases/tag/0.1.0) - 2014-08-31\n\nFirst beta release.\n\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013-present Benjamin Morel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/composer.json",
    "content": "{\n    \"name\": \"brick/math\",\n    \"description\": \"Arbitrary-precision arithmetic library\",\n    \"type\": \"library\",\n    \"keywords\": [\n        \"Brick\",\n        \"Math\",\n        \"Mathematics\",\n        \"Arbitrary-precision\",\n        \"Arithmetic\",\n        \"BigInteger\",\n        \"BigDecimal\",\n        \"BigRational\",\n        \"BigNumber\",\n        \"Bignum\",\n        \"Decimal\",\n        \"Rational\",\n        \"Integer\"\n    ],\n    \"license\": \"MIT\",\n    \"require\": {\n        \"php\": \"^8.1\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^10.1\",\n        \"php-coveralls/php-coveralls\": \"^2.2\",\n        \"vimeo/psalm\": \"6.8.8\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Brick\\\\Math\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Brick\\\\Math\\\\Tests\\\\\": \"tests/\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/psalm-baseline.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<files psalm-version=\"6.8.8@1361cd33008feb3ae2b4a93f1860e14e538ec8c2\">\n  <file src=\"src/BigInteger.php\">\n    <FalsableReturnStatement>\n      <code><![CDATA[\\hex2bin($hex)]]></code>\n    </FalsableReturnStatement>\n    <InvalidFalsableReturnType>\n      <code><![CDATA[string]]></code>\n    </InvalidFalsableReturnType>\n  </file>\n  <file src=\"src/Exception/DivisionByZeroException.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[DivisionByZeroException]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Exception/IntegerOverflowException.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[IntegerOverflowException]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Exception/NegativeNumberException.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[NegativeNumberException]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Exception/NumberFormatException.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[NumberFormatException]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Exception/RoundingNecessaryException.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[RoundingNecessaryException]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Internal/Calculator/BcMathCalculator.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[BcMathCalculator]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Internal/Calculator/GmpCalculator.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[GmpCalculator]]></code>\n    </ClassMustBeFinal>\n  </file>\n  <file src=\"src/Internal/Calculator/NativeCalculator.php\">\n    <ClassMustBeFinal>\n      <code><![CDATA[NativeCalculator]]></code>\n    </ClassMustBeFinal>\n    <InvalidOperand>\n      <code><![CDATA[$a * $b]]></code>\n      <code><![CDATA[$a * 1]]></code>\n      <code><![CDATA[$a + $b]]></code>\n      <code><![CDATA[$b * 1]]></code>\n      <code><![CDATA[$b * 1]]></code>\n      <code><![CDATA[$blockA * $blockB + $carry]]></code>\n      <code><![CDATA[$blockA + $blockB]]></code>\n      <code><![CDATA[$blockA + $blockB + $carry]]></code>\n      <code><![CDATA[$blockA - $blockB]]></code>\n      <code><![CDATA[$blockA - $blockB - $carry]]></code>\n      <code><![CDATA[$carry]]></code>\n      <code><![CDATA[$mul % $complement]]></code>\n      <code><![CDATA[$mul - $value]]></code>\n      <code><![CDATA[$nb - 1]]></code>\n      <code><![CDATA[$sum += $complement]]></code>\n      <code><![CDATA[($mul - $value) / $complement]]></code>\n      <code><![CDATA[($nb - 1) * 10]]></code>\n    </InvalidOperand>\n  </file>\n</files>\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/BigDecimal.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math;\n\nuse Brick\\Math\\Exception\\DivisionByZeroException;\nuse Brick\\Math\\Exception\\MathException;\nuse Brick\\Math\\Exception\\NegativeNumberException;\nuse Brick\\Math\\Internal\\Calculator;\nuse Override;\n\n/**\n * Immutable, arbitrary-precision signed decimal numbers.\n *\n * @psalm-immutable\n */\nfinal class BigDecimal extends BigNumber\n{\n    /**\n     * The unscaled value of this decimal number.\n     *\n     * This is a string of digits with an optional leading minus sign.\n     * No leading zero must be present.\n     * No leading minus sign must be present if the value is 0.\n     */\n    private readonly string $value;\n\n    /**\n     * The scale (number of digits after the decimal point) of this decimal number.\n     *\n     * This must be zero or more.\n     */\n    private readonly int $scale;\n\n    /**\n     * Protected constructor. Use a factory method to obtain an instance.\n     *\n     * @param string $value The unscaled value, validated.\n     * @param int    $scale The scale, validated.\n     */\n    protected function __construct(string $value, int $scale = 0)\n    {\n        $this->value = $value;\n        $this->scale = $scale;\n    }\n\n    /**\n     * @psalm-pure\n     */\n    #[Override]\n    protected static function from(BigNumber $number): static\n    {\n        return $number->toBigDecimal();\n    }\n\n    /**\n     * Creates a BigDecimal from an unscaled value and a scale.\n     *\n     * Example: `(12345, 3)` will result in the BigDecimal `12.345`.\n     *\n     * @param BigNumber|int|float|string $value The unscaled value. Must be convertible to a BigInteger.\n     * @param int                        $scale The scale of the number. If negative, the scale will be set to zero\n     *                                          and the unscaled value will be adjusted accordingly.\n     *\n     * @psalm-pure\n     */\n    public static function ofUnscaledValue(BigNumber|int|float|string $value, int $scale = 0) : BigDecimal\n    {\n        $value = (string) BigInteger::of($value);\n\n        if ($scale < 0) {\n            if ($value !== '0') {\n                $value .= \\str_repeat('0', -$scale);\n            }\n            $scale = 0;\n        }\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns a BigDecimal representing zero, with a scale of zero.\n     *\n     * @psalm-pure\n     */\n    public static function zero() : BigDecimal\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigDecimal|null $zero\n         */\n        static $zero;\n\n        if ($zero === null) {\n            $zero = new BigDecimal('0');\n        }\n\n        return $zero;\n    }\n\n    /**\n     * Returns a BigDecimal representing one, with a scale of zero.\n     *\n     * @psalm-pure\n     */\n    public static function one() : BigDecimal\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigDecimal|null $one\n         */\n        static $one;\n\n        if ($one === null) {\n            $one = new BigDecimal('1');\n        }\n\n        return $one;\n    }\n\n    /**\n     * Returns a BigDecimal representing ten, with a scale of zero.\n     *\n     * @psalm-pure\n     */\n    public static function ten() : BigDecimal\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigDecimal|null $ten\n         */\n        static $ten;\n\n        if ($ten === null) {\n            $ten = new BigDecimal('10');\n        }\n\n        return $ten;\n    }\n\n    /**\n     * Returns the sum of this number and the given one.\n     *\n     * The result has a scale of `max($this->scale, $that->scale)`.\n     *\n     * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigDecimal.\n     *\n     * @throws MathException If the number is not valid, or is not convertible to a BigDecimal.\n     */\n    public function plus(BigNumber|int|float|string $that) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->value === '0' && $that->scale <= $this->scale) {\n            return $this;\n        }\n\n        if ($this->value === '0' && $this->scale <= $that->scale) {\n            return $that;\n        }\n\n        [$a, $b] = $this->scaleValues($this, $that);\n\n        $value = Calculator::get()->add($a, $b);\n        $scale = $this->scale > $that->scale ? $this->scale : $that->scale;\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns the difference of this number and the given one.\n     *\n     * The result has a scale of `max($this->scale, $that->scale)`.\n     *\n     * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigDecimal.\n     *\n     * @throws MathException If the number is not valid, or is not convertible to a BigDecimal.\n     */\n    public function minus(BigNumber|int|float|string $that) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->value === '0' && $that->scale <= $this->scale) {\n            return $this;\n        }\n\n        [$a, $b] = $this->scaleValues($this, $that);\n\n        $value = Calculator::get()->sub($a, $b);\n        $scale = $this->scale > $that->scale ? $this->scale : $that->scale;\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns the product of this number and the given one.\n     *\n     * The result has a scale of `$this->scale + $that->scale`.\n     *\n     * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigDecimal.\n     *\n     * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigDecimal.\n     */\n    public function multipliedBy(BigNumber|int|float|string $that) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->value === '1' && $that->scale === 0) {\n            return $this;\n        }\n\n        if ($this->value === '1' && $this->scale === 0) {\n            return $that;\n        }\n\n        $value = Calculator::get()->mul($this->value, $that->value);\n        $scale = $this->scale + $that->scale;\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns the result of the division of this number by the given one, at the given scale.\n     *\n     * @param BigNumber|int|float|string $that         The divisor.\n     * @param int|null                   $scale        The desired scale, or null to use the scale of this number.\n     * @param RoundingMode               $roundingMode An optional rounding mode, defaults to UNNECESSARY.\n     *\n     * @throws \\InvalidArgumentException If the scale or rounding mode is invalid.\n     * @throws MathException             If the number is invalid, is zero, or rounding was necessary.\n     */\n    public function dividedBy(BigNumber|int|float|string $that, ?int $scale = null, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->isZero()) {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        if ($scale === null) {\n            $scale = $this->scale;\n        } elseif ($scale < 0) {\n            throw new \\InvalidArgumentException('Scale cannot be negative.');\n        }\n\n        if ($that->value === '1' && $that->scale === 0 && $scale === $this->scale) {\n            return $this;\n        }\n\n        $p = $this->valueWithMinScale($that->scale + $scale);\n        $q = $that->valueWithMinScale($this->scale - $scale);\n\n        $result = Calculator::get()->divRound($p, $q, $roundingMode);\n\n        return new BigDecimal($result, $scale);\n    }\n\n    /**\n     * Returns the exact result of the division of this number by the given one.\n     *\n     * The scale of the result is automatically calculated to fit all the fraction digits.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal.\n     *\n     * @throws MathException If the divisor is not a valid number, is not convertible to a BigDecimal, is zero,\n     *                       or the result yields an infinite number of digits.\n     */\n    public function exactlyDividedBy(BigNumber|int|float|string $that) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->value === '0') {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        [, $b] = $this->scaleValues($this, $that);\n\n        $d = \\rtrim($b, '0');\n        $scale = \\strlen($b) - \\strlen($d);\n\n        $calculator = Calculator::get();\n\n        foreach ([5, 2] as $prime) {\n            for (;;) {\n                $lastDigit = (int) $d[-1];\n\n                if ($lastDigit % $prime !== 0) {\n                    break;\n                }\n\n                $d = $calculator->divQ($d, (string) $prime);\n                $scale++;\n            }\n        }\n\n        return $this->dividedBy($that, $scale)->stripTrailingZeros();\n    }\n\n    /**\n     * Returns this number exponentiated to the given value.\n     *\n     * The result has a scale of `$this->scale * $exponent`.\n     *\n     * @throws \\InvalidArgumentException If the exponent is not in the range 0 to 1,000,000.\n     */\n    public function power(int $exponent) : BigDecimal\n    {\n        if ($exponent === 0) {\n            return BigDecimal::one();\n        }\n\n        if ($exponent === 1) {\n            return $this;\n        }\n\n        if ($exponent < 0 || $exponent > Calculator::MAX_POWER) {\n            throw new \\InvalidArgumentException(\\sprintf(\n                'The exponent %d is not in the range 0 to %d.',\n                $exponent,\n                Calculator::MAX_POWER\n            ));\n        }\n\n        return new BigDecimal(Calculator::get()->pow($this->value, $exponent), $this->scale * $exponent);\n    }\n\n    /**\n     * Returns the quotient of the division of this number by the given one.\n     *\n     * The quotient has a scale of `0`.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal.\n     *\n     * @throws MathException If the divisor is not a valid decimal number, or is zero.\n     */\n    public function quotient(BigNumber|int|float|string $that) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->isZero()) {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        $p = $this->valueWithMinScale($that->scale);\n        $q = $that->valueWithMinScale($this->scale);\n\n        $quotient = Calculator::get()->divQ($p, $q);\n\n        return new BigDecimal($quotient, 0);\n    }\n\n    /**\n     * Returns the remainder of the division of this number by the given one.\n     *\n     * The remainder has a scale of `max($this->scale, $that->scale)`.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal.\n     *\n     * @throws MathException If the divisor is not a valid decimal number, or is zero.\n     */\n    public function remainder(BigNumber|int|float|string $that) : BigDecimal\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->isZero()) {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        $p = $this->valueWithMinScale($that->scale);\n        $q = $that->valueWithMinScale($this->scale);\n\n        $remainder = Calculator::get()->divR($p, $q);\n\n        $scale = $this->scale > $that->scale ? $this->scale : $that->scale;\n\n        return new BigDecimal($remainder, $scale);\n    }\n\n    /**\n     * Returns the quotient and remainder of the division of this number by the given one.\n     *\n     * The quotient has a scale of `0`, and the remainder has a scale of `max($this->scale, $that->scale)`.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal.\n     *\n     * @return BigDecimal[] An array containing the quotient and the remainder.\n     *\n     * @psalm-return array{BigDecimal, BigDecimal}\n     *\n     * @throws MathException If the divisor is not a valid decimal number, or is zero.\n     */\n    public function quotientAndRemainder(BigNumber|int|float|string $that) : array\n    {\n        $that = BigDecimal::of($that);\n\n        if ($that->isZero()) {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        $p = $this->valueWithMinScale($that->scale);\n        $q = $that->valueWithMinScale($this->scale);\n\n        [$quotient, $remainder] = Calculator::get()->divQR($p, $q);\n\n        $scale = $this->scale > $that->scale ? $this->scale : $that->scale;\n\n        $quotient = new BigDecimal($quotient, 0);\n        $remainder = new BigDecimal($remainder, $scale);\n\n        return [$quotient, $remainder];\n    }\n\n    /**\n     * Returns the square root of this number, rounded down to the given number of decimals.\n     *\n     * @throws \\InvalidArgumentException If the scale is negative.\n     * @throws NegativeNumberException If this number is negative.\n     */\n    public function sqrt(int $scale) : BigDecimal\n    {\n        if ($scale < 0) {\n            throw new \\InvalidArgumentException('Scale cannot be negative.');\n        }\n\n        if ($this->value === '0') {\n            return new BigDecimal('0', $scale);\n        }\n\n        if ($this->value[0] === '-') {\n            throw new NegativeNumberException('Cannot calculate the square root of a negative number.');\n        }\n\n        $value = $this->value;\n        $addDigits = 2 * $scale - $this->scale;\n\n        if ($addDigits > 0) {\n            // add zeros\n            $value .= \\str_repeat('0', $addDigits);\n        } elseif ($addDigits < 0) {\n            // trim digits\n            if (-$addDigits >= \\strlen($this->value)) {\n                // requesting a scale too low, will always yield a zero result\n                return new BigDecimal('0', $scale);\n            }\n\n            $value = \\substr($value, 0, $addDigits);\n        }\n\n        $value = Calculator::get()->sqrt($value);\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns a copy of this BigDecimal with the decimal point moved $n places to the left.\n     */\n    public function withPointMovedLeft(int $n) : BigDecimal\n    {\n        if ($n === 0) {\n            return $this;\n        }\n\n        if ($n < 0) {\n            return $this->withPointMovedRight(-$n);\n        }\n\n        return new BigDecimal($this->value, $this->scale + $n);\n    }\n\n    /**\n     * Returns a copy of this BigDecimal with the decimal point moved $n places to the right.\n     */\n    public function withPointMovedRight(int $n) : BigDecimal\n    {\n        if ($n === 0) {\n            return $this;\n        }\n\n        if ($n < 0) {\n            return $this->withPointMovedLeft(-$n);\n        }\n\n        $value = $this->value;\n        $scale = $this->scale - $n;\n\n        if ($scale < 0) {\n            if ($value !== '0') {\n                $value .= \\str_repeat('0', -$scale);\n            }\n            $scale = 0;\n        }\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns a copy of this BigDecimal with any trailing zeros removed from the fractional part.\n     */\n    public function stripTrailingZeros() : BigDecimal\n    {\n        if ($this->scale === 0) {\n            return $this;\n        }\n\n        $trimmedValue = \\rtrim($this->value, '0');\n\n        if ($trimmedValue === '') {\n            return BigDecimal::zero();\n        }\n\n        $trimmableZeros = \\strlen($this->value) - \\strlen($trimmedValue);\n\n        if ($trimmableZeros === 0) {\n            return $this;\n        }\n\n        if ($trimmableZeros > $this->scale) {\n            $trimmableZeros = $this->scale;\n        }\n\n        $value = \\substr($this->value, 0, -$trimmableZeros);\n        $scale = $this->scale - $trimmableZeros;\n\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Returns the absolute value of this number.\n     */\n    public function abs() : BigDecimal\n    {\n        return $this->isNegative() ? $this->negated() : $this;\n    }\n\n    /**\n     * Returns the negated value of this number.\n     */\n    public function negated() : BigDecimal\n    {\n        return new BigDecimal(Calculator::get()->neg($this->value), $this->scale);\n    }\n\n    #[Override]\n    public function compareTo(BigNumber|int|float|string $that) : int\n    {\n        $that = BigNumber::of($that);\n\n        if ($that instanceof BigInteger) {\n            $that = $that->toBigDecimal();\n        }\n\n        if ($that instanceof BigDecimal) {\n            [$a, $b] = $this->scaleValues($this, $that);\n\n            return Calculator::get()->cmp($a, $b);\n        }\n\n        return - $that->compareTo($this);\n    }\n\n    #[Override]\n    public function getSign() : int\n    {\n        return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1);\n    }\n\n    public function getUnscaledValue() : BigInteger\n    {\n        return self::newBigInteger($this->value);\n    }\n\n    public function getScale() : int\n    {\n        return $this->scale;\n    }\n\n    /**\n     * Returns the number of significant digits in the number.\n     *\n     * This is the number of digits to both sides of the decimal point, stripped of leading zeros.\n     * The sign has no impact on the result.\n     *\n     * Examples:\n     *   0 => 0\n     *   0.0 => 0\n     *   123 => 3\n     *   123.456 => 6\n     *   0.00123 => 3\n     *   0.0012300 => 5\n     */\n    public function getPrecision(): int\n    {\n        $value = $this->value;\n\n        if ($value === '0') {\n            return 0;\n        }\n\n        $length = \\strlen($value);\n\n        return ($value[0] === '-') ? $length - 1 : $length;\n    }\n\n    /**\n     * Returns a string representing the integral part of this decimal number.\n     *\n     * Example: `-123.456` => `-123`.\n     */\n    public function getIntegralPart() : string\n    {\n        if ($this->scale === 0) {\n            return $this->value;\n        }\n\n        $value = $this->getUnscaledValueWithLeadingZeros();\n\n        return \\substr($value, 0, -$this->scale);\n    }\n\n    /**\n     * Returns a string representing the fractional part of this decimal number.\n     *\n     * If the scale is zero, an empty string is returned.\n     *\n     * Examples: `-123.456` => '456', `123` => ''.\n     */\n    public function getFractionalPart() : string\n    {\n        if ($this->scale === 0) {\n            return '';\n        }\n\n        $value = $this->getUnscaledValueWithLeadingZeros();\n\n        return \\substr($value, -$this->scale);\n    }\n\n    /**\n     * Returns whether this decimal number has a non-zero fractional part.\n     */\n    public function hasNonZeroFractionalPart() : bool\n    {\n        return $this->getFractionalPart() !== \\str_repeat('0', $this->scale);\n    }\n\n    #[Override]\n    public function toBigInteger() : BigInteger\n    {\n        $zeroScaleDecimal = $this->scale === 0 ? $this : $this->dividedBy(1, 0);\n\n        return self::newBigInteger($zeroScaleDecimal->value);\n    }\n\n    #[Override]\n    public function toBigDecimal() : BigDecimal\n    {\n        return $this;\n    }\n\n    #[Override]\n    public function toBigRational() : BigRational\n    {\n        $numerator = self::newBigInteger($this->value);\n        $denominator = self::newBigInteger('1' . \\str_repeat('0', $this->scale));\n\n        return self::newBigRational($numerator, $denominator, false);\n    }\n\n    #[Override]\n    public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal\n    {\n        if ($scale === $this->scale) {\n            return $this;\n        }\n\n        return $this->dividedBy(BigDecimal::one(), $scale, $roundingMode);\n    }\n\n    #[Override]\n    public function toInt() : int\n    {\n        return $this->toBigInteger()->toInt();\n    }\n\n    #[Override]\n    public function toFloat() : float\n    {\n        return (float) (string) $this;\n    }\n\n    /**\n     * @return numeric-string\n     */\n    #[Override]\n    public function __toString() : string\n    {\n        if ($this->scale === 0) {\n            /** @var numeric-string */\n            return $this->value;\n        }\n\n        $value = $this->getUnscaledValueWithLeadingZeros();\n\n        /** @var numeric-string */\n        return \\substr($value, 0, -$this->scale) . '.' . \\substr($value, -$this->scale);\n    }\n\n    /**\n     * This method is required for serializing the object and SHOULD NOT be accessed directly.\n     *\n     * @internal\n     *\n     * @return array{value: string, scale: int}\n     */\n    public function __serialize(): array\n    {\n        return ['value' => $this->value, 'scale' => $this->scale];\n    }\n\n    /**\n     * This method is only here to allow unserializing the object and cannot be accessed directly.\n     *\n     * @internal\n     * @psalm-suppress RedundantPropertyInitializationCheck\n     *\n     * @param array{value: string, scale: int} $data\n     *\n     * @throws \\LogicException\n     */\n    public function __unserialize(array $data): void\n    {\n        if (isset($this->value)) {\n            throw new \\LogicException('__unserialize() is an internal function, it must not be called directly.');\n        }\n\n        $this->value = $data['value'];\n        $this->scale = $data['scale'];\n    }\n\n    /**\n     * Puts the internal values of the given decimal numbers on the same scale.\n     *\n     * @return array{string, string} The scaled integer values of $x and $y.\n     */\n    private function scaleValues(BigDecimal $x, BigDecimal $y) : array\n    {\n        $a = $x->value;\n        $b = $y->value;\n\n        if ($b !== '0' && $x->scale > $y->scale) {\n            $b .= \\str_repeat('0', $x->scale - $y->scale);\n        } elseif ($a !== '0' && $x->scale < $y->scale) {\n            $a .= \\str_repeat('0', $y->scale - $x->scale);\n        }\n\n        return [$a, $b];\n    }\n\n    private function valueWithMinScale(int $scale) : string\n    {\n        $value = $this->value;\n\n        if ($this->value !== '0' && $scale > $this->scale) {\n            $value .= \\str_repeat('0', $scale - $this->scale);\n        }\n\n        return $value;\n    }\n\n    /**\n     * Adds leading zeros if necessary to the unscaled value to represent the full decimal number.\n     */\n    private function getUnscaledValueWithLeadingZeros() : string\n    {\n        $value = $this->value;\n        $targetLength = $this->scale + 1;\n        $negative = ($value[0] === '-');\n        $length = \\strlen($value);\n\n        if ($negative) {\n            $length--;\n        }\n\n        if ($length >= $targetLength) {\n            return $this->value;\n        }\n\n        if ($negative) {\n            $value = \\substr($value, 1);\n        }\n\n        $value = \\str_pad($value, $targetLength, '0', STR_PAD_LEFT);\n\n        if ($negative) {\n            $value = '-' . $value;\n        }\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/BigInteger.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math;\n\nuse Brick\\Math\\Exception\\DivisionByZeroException;\nuse Brick\\Math\\Exception\\IntegerOverflowException;\nuse Brick\\Math\\Exception\\MathException;\nuse Brick\\Math\\Exception\\NegativeNumberException;\nuse Brick\\Math\\Exception\\NumberFormatException;\nuse Brick\\Math\\Internal\\Calculator;\nuse Override;\n\n/**\n * An arbitrary-size integer.\n *\n * All methods accepting a number as a parameter accept either a BigInteger instance,\n * an integer, or a string representing an arbitrary size integer.\n *\n * @psalm-immutable\n */\nfinal class BigInteger extends BigNumber\n{\n    /**\n     * The value, as a string of digits with optional leading minus sign.\n     *\n     * No leading zeros must be present.\n     * No leading minus sign must be present if the number is zero.\n     */\n    private readonly string $value;\n\n    /**\n     * Protected constructor. Use a factory method to obtain an instance.\n     *\n     * @param string $value A string of digits, with optional leading minus sign.\n     */\n    protected function __construct(string $value)\n    {\n        $this->value = $value;\n    }\n\n    /**\n     * @psalm-pure\n     */\n    #[Override]\n    protected static function from(BigNumber $number): static\n    {\n        return $number->toBigInteger();\n    }\n\n    /**\n     * Creates a number from a string in a given base.\n     *\n     * The string can optionally be prefixed with the `+` or `-` sign.\n     *\n     * Bases greater than 36 are not supported by this method, as there is no clear consensus on which of the lowercase\n     * or uppercase characters should come first. Instead, this method accepts any base up to 36, and does not\n     * differentiate lowercase and uppercase characters, which are considered equal.\n     *\n     * For bases greater than 36, and/or custom alphabets, use the fromArbitraryBase() method.\n     *\n     * @param string $number The number to convert, in the given base.\n     * @param int    $base   The base of the number, between 2 and 36.\n     *\n     * @throws NumberFormatException     If the number is empty, or contains invalid chars for the given base.\n     * @throws \\InvalidArgumentException If the base is out of range.\n     *\n     * @psalm-pure\n     */\n    public static function fromBase(string $number, int $base) : BigInteger\n    {\n        if ($number === '') {\n            throw new NumberFormatException('The number cannot be empty.');\n        }\n\n        if ($base < 2 || $base > 36) {\n            throw new \\InvalidArgumentException(\\sprintf('Base %d is not in range 2 to 36.', $base));\n        }\n\n        if ($number[0] === '-') {\n            $sign = '-';\n            $number = \\substr($number, 1);\n        } elseif ($number[0] === '+') {\n            $sign = '';\n            $number = \\substr($number, 1);\n        } else {\n            $sign = '';\n        }\n\n        if ($number === '') {\n            throw new NumberFormatException('The number cannot be empty.');\n        }\n\n        $number = \\ltrim($number, '0');\n\n        if ($number === '') {\n            // The result will be the same in any base, avoid further calculation.\n            return BigInteger::zero();\n        }\n\n        if ($number === '1') {\n            // The result will be the same in any base, avoid further calculation.\n            return new BigInteger($sign . '1');\n        }\n\n        $pattern = '/[^' . \\substr(Calculator::ALPHABET, 0, $base) . ']/';\n\n        if (\\preg_match($pattern, \\strtolower($number), $matches) === 1) {\n            throw new NumberFormatException(\\sprintf('\"%s\" is not a valid character in base %d.', $matches[0], $base));\n        }\n\n        if ($base === 10) {\n            // The number is usable as is, avoid further calculation.\n            return new BigInteger($sign . $number);\n        }\n\n        $result = Calculator::get()->fromBase($number, $base);\n\n        return new BigInteger($sign . $result);\n    }\n\n    /**\n     * Parses a string containing an integer in an arbitrary base, using a custom alphabet.\n     *\n     * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers.\n     *\n     * @param string $number   The number to parse.\n     * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8.\n     *\n     * @throws NumberFormatException     If the given number is empty or contains invalid chars for the given alphabet.\n     * @throws \\InvalidArgumentException If the alphabet does not contain at least 2 chars.\n     *\n     * @psalm-pure\n     */\n    public static function fromArbitraryBase(string $number, string $alphabet) : BigInteger\n    {\n        if ($number === '') {\n            throw new NumberFormatException('The number cannot be empty.');\n        }\n\n        $base = \\strlen($alphabet);\n\n        if ($base < 2) {\n            throw new \\InvalidArgumentException('The alphabet must contain at least 2 chars.');\n        }\n\n        $pattern = '/[^' . \\preg_quote($alphabet, '/') . ']/';\n\n        if (\\preg_match($pattern, $number, $matches) === 1) {\n            throw NumberFormatException::charNotInAlphabet($matches[0]);\n        }\n\n        $number = Calculator::get()->fromArbitraryBase($number, $alphabet, $base);\n\n        return new BigInteger($number);\n    }\n\n    /**\n     * Translates a string of bytes containing the binary representation of a BigInteger into a BigInteger.\n     *\n     * The input string is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element.\n     *\n     * If `$signed` is true, the input is assumed to be in two's-complement representation, and the leading bit is\n     * interpreted as a sign bit. If `$signed` is false, the input is interpreted as an unsigned number, and the\n     * resulting BigInteger will always be positive or zero.\n     *\n     * This method can be used to retrieve a number exported by `toBytes()`, as long as the `$signed` flags match.\n     *\n     * @param string $value  The byte string.\n     * @param bool   $signed Whether to interpret as a signed number in two's-complement representation with a leading\n     *                       sign bit.\n     *\n     * @throws NumberFormatException If the string is empty.\n     */\n    public static function fromBytes(string $value, bool $signed = true) : BigInteger\n    {\n        if ($value === '') {\n            throw new NumberFormatException('The byte string must not be empty.');\n        }\n\n        $twosComplement = false;\n\n        if ($signed) {\n            $x = \\ord($value[0]);\n\n            if (($twosComplement = ($x >= 0x80))) {\n                $value = ~$value;\n            }\n        }\n\n        $number = self::fromBase(\\bin2hex($value), 16);\n\n        if ($twosComplement) {\n            return $number->plus(1)->negated();\n        }\n\n        return $number;\n    }\n\n    /**\n     * Generates a pseudo-random number in the range 0 to 2^numBits - 1.\n     *\n     * Using the default random bytes generator, this method is suitable for cryptographic use.\n     *\n     * @psalm-param (callable(int): string)|null $randomBytesGenerator\n     *\n     * @param int           $numBits              The number of bits.\n     * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a\n     *                                            string of random bytes of the given length. Defaults to the\n     *                                            `random_bytes()` function.\n     *\n     * @throws \\InvalidArgumentException If $numBits is negative.\n     */\n    public static function randomBits(int $numBits, ?callable $randomBytesGenerator = null) : BigInteger\n    {\n        if ($numBits < 0) {\n            throw new \\InvalidArgumentException('The number of bits cannot be negative.');\n        }\n\n        if ($numBits === 0) {\n            return BigInteger::zero();\n        }\n\n        if ($randomBytesGenerator === null) {\n            $randomBytesGenerator = random_bytes(...);\n        }\n\n        /** @var int<1, max> $byteLength */\n        $byteLength = \\intdiv($numBits - 1, 8) + 1;\n\n        $extraBits = ($byteLength * 8 - $numBits);\n        $bitmask   = \\chr(0xFF >> $extraBits);\n\n        $randomBytes    = $randomBytesGenerator($byteLength);\n        $randomBytes[0] = $randomBytes[0] & $bitmask;\n\n        return self::fromBytes($randomBytes, false);\n    }\n\n    /**\n     * Generates a pseudo-random number between `$min` and `$max`.\n     *\n     * Using the default random bytes generator, this method is suitable for cryptographic use.\n     *\n     * @psalm-param (callable(int): string)|null $randomBytesGenerator\n     *\n     * @param BigNumber|int|float|string $min                  The lower bound. Must be convertible to a BigInteger.\n     * @param BigNumber|int|float|string $max                  The upper bound. Must be convertible to a BigInteger.\n     * @param callable|null              $randomBytesGenerator A function that accepts a number of bytes as an integer,\n     *                                                         and returns a string of random bytes of the given length.\n     *                                                         Defaults to the `random_bytes()` function.\n     *\n     * @throws MathException If one of the parameters cannot be converted to a BigInteger,\n     *                       or `$min` is greater than `$max`.\n     */\n    public static function randomRange(\n        BigNumber|int|float|string $min,\n        BigNumber|int|float|string $max,\n        ?callable $randomBytesGenerator = null\n    ) : BigInteger {\n        $min = BigInteger::of($min);\n        $max = BigInteger::of($max);\n\n        if ($min->isGreaterThan($max)) {\n            throw new MathException('$min cannot be greater than $max.');\n        }\n\n        if ($min->isEqualTo($max)) {\n            return $min;\n        }\n\n        $diff      = $max->minus($min);\n        $bitLength = $diff->getBitLength();\n\n        // try until the number is in range (50% to 100% chance of success)\n        do {\n            $randomNumber = self::randomBits($bitLength, $randomBytesGenerator);\n        } while ($randomNumber->isGreaterThan($diff));\n\n        return $randomNumber->plus($min);\n    }\n\n    /**\n     * Returns a BigInteger representing zero.\n     *\n     * @psalm-pure\n     */\n    public static function zero() : BigInteger\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigInteger|null $zero\n         */\n        static $zero;\n\n        if ($zero === null) {\n            $zero = new BigInteger('0');\n        }\n\n        return $zero;\n    }\n\n    /**\n     * Returns a BigInteger representing one.\n     *\n     * @psalm-pure\n     */\n    public static function one() : BigInteger\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigInteger|null $one\n         */\n        static $one;\n\n        if ($one === null) {\n            $one = new BigInteger('1');\n        }\n\n        return $one;\n    }\n\n    /**\n     * Returns a BigInteger representing ten.\n     *\n     * @psalm-pure\n     */\n    public static function ten() : BigInteger\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigInteger|null $ten\n         */\n        static $ten;\n\n        if ($ten === null) {\n            $ten = new BigInteger('10');\n        }\n\n        return $ten;\n    }\n\n    public static function gcdMultiple(BigInteger $a, BigInteger ...$n): BigInteger\n    {\n        $result = $a;\n\n        foreach ($n as $next) {\n            $result = $result->gcd($next);\n\n            if ($result->isEqualTo(1)) {\n                return $result;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns the sum of this number and the given one.\n     *\n     * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigInteger.\n     *\n     * @throws MathException If the number is not valid, or is not convertible to a BigInteger.\n     */\n    public function plus(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '0') {\n            return $this;\n        }\n\n        if ($this->value === '0') {\n            return $that;\n        }\n\n        $value = Calculator::get()->add($this->value, $that->value);\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns the difference of this number and the given one.\n     *\n     * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigInteger.\n     *\n     * @throws MathException If the number is not valid, or is not convertible to a BigInteger.\n     */\n    public function minus(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '0') {\n            return $this;\n        }\n\n        $value = Calculator::get()->sub($this->value, $that->value);\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns the product of this number and the given one.\n     *\n     * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigInteger.\n     *\n     * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigInteger.\n     */\n    public function multipliedBy(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '1') {\n            return $this;\n        }\n\n        if ($this->value === '1') {\n            return $that;\n        }\n\n        $value = Calculator::get()->mul($this->value, $that->value);\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns the result of the division of this number by the given one.\n     *\n     * @param BigNumber|int|float|string $that         The divisor. Must be convertible to a BigInteger.\n     * @param RoundingMode               $roundingMode An optional rounding mode, defaults to UNNECESSARY.\n     *\n     * @throws MathException If the divisor is not a valid number, is not convertible to a BigInteger, is zero,\n     *                       or RoundingMode::UNNECESSARY is used and the remainder is not zero.\n     */\n    public function dividedBy(BigNumber|int|float|string $that, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '1') {\n            return $this;\n        }\n\n        if ($that->value === '0') {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        $result = Calculator::get()->divRound($this->value, $that->value, $roundingMode);\n\n        return new BigInteger($result);\n    }\n\n    /**\n     * Returns this number exponentiated to the given value.\n     *\n     * @throws \\InvalidArgumentException If the exponent is not in the range 0 to 1,000,000.\n     */\n    public function power(int $exponent) : BigInteger\n    {\n        if ($exponent === 0) {\n            return BigInteger::one();\n        }\n\n        if ($exponent === 1) {\n            return $this;\n        }\n\n        if ($exponent < 0 || $exponent > Calculator::MAX_POWER) {\n            throw new \\InvalidArgumentException(\\sprintf(\n                'The exponent %d is not in the range 0 to %d.',\n                $exponent,\n                Calculator::MAX_POWER\n            ));\n        }\n\n        return new BigInteger(Calculator::get()->pow($this->value, $exponent));\n    }\n\n    /**\n     * Returns the quotient of the division of this number by the given one.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.\n     *\n     * @throws DivisionByZeroException If the divisor is zero.\n     */\n    public function quotient(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '1') {\n            return $this;\n        }\n\n        if ($that->value === '0') {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        $quotient = Calculator::get()->divQ($this->value, $that->value);\n\n        return new BigInteger($quotient);\n    }\n\n    /**\n     * Returns the remainder of the division of this number by the given one.\n     *\n     * The remainder, when non-zero, has the same sign as the dividend.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.\n     *\n     * @throws DivisionByZeroException If the divisor is zero.\n     */\n    public function remainder(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '1') {\n            return BigInteger::zero();\n        }\n\n        if ($that->value === '0') {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        $remainder = Calculator::get()->divR($this->value, $that->value);\n\n        return new BigInteger($remainder);\n    }\n\n    /**\n     * Returns the quotient and remainder of the division of this number by the given one.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.\n     *\n     * @return BigInteger[] An array containing the quotient and the remainder.\n     *\n     * @psalm-return array{BigInteger, BigInteger}\n     *\n     * @throws DivisionByZeroException If the divisor is zero.\n     */\n    public function quotientAndRemainder(BigNumber|int|float|string $that) : array\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '0') {\n            throw DivisionByZeroException::divisionByZero();\n        }\n\n        [$quotient, $remainder] = Calculator::get()->divQR($this->value, $that->value);\n\n        return [\n            new BigInteger($quotient),\n            new BigInteger($remainder)\n        ];\n    }\n\n    /**\n     * Returns the modulo of this number and the given one.\n     *\n     * The modulo operation yields the same result as the remainder operation when both operands are of the same sign,\n     * and may differ when signs are different.\n     *\n     * The result of the modulo operation, when non-zero, has the same sign as the divisor.\n     *\n     * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger.\n     *\n     * @throws DivisionByZeroException If the divisor is zero.\n     */\n    public function mod(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '0') {\n            throw DivisionByZeroException::modulusMustNotBeZero();\n        }\n\n        $value = Calculator::get()->mod($this->value, $that->value);\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns the modular multiplicative inverse of this BigInteger modulo $m.\n     *\n     * @throws DivisionByZeroException If $m is zero.\n     * @throws NegativeNumberException If $m is negative.\n     * @throws MathException           If this BigInteger has no multiplicative inverse mod m (that is, this BigInteger\n     *                                 is not relatively prime to m).\n     */\n    public function modInverse(BigInteger $m) : BigInteger\n    {\n        if ($m->value === '0') {\n            throw DivisionByZeroException::modulusMustNotBeZero();\n        }\n\n        if ($m->isNegative()) {\n            throw new NegativeNumberException('Modulus must not be negative.');\n        }\n\n        if ($m->value === '1') {\n            return BigInteger::zero();\n        }\n\n        $value = Calculator::get()->modInverse($this->value, $m->value);\n\n        if ($value === null) {\n            throw new MathException('Unable to compute the modInverse for the given modulus.');\n        }\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns this number raised into power with modulo.\n     *\n     * This operation only works on positive numbers.\n     *\n     * @param BigNumber|int|float|string $exp The exponent. Must be positive or zero.\n     * @param BigNumber|int|float|string $mod The modulus. Must be strictly positive.\n     *\n     * @throws NegativeNumberException If any of the operands is negative.\n     * @throws DivisionByZeroException If the modulus is zero.\n     */\n    public function modPow(BigNumber|int|float|string $exp, BigNumber|int|float|string $mod) : BigInteger\n    {\n        $exp = BigInteger::of($exp);\n        $mod = BigInteger::of($mod);\n\n        if ($this->isNegative() || $exp->isNegative() || $mod->isNegative()) {\n            throw new NegativeNumberException('The operands cannot be negative.');\n        }\n\n        if ($mod->isZero()) {\n            throw DivisionByZeroException::modulusMustNotBeZero();\n        }\n\n        $result = Calculator::get()->modPow($this->value, $exp->value, $mod->value);\n\n        return new BigInteger($result);\n    }\n\n    /**\n     * Returns the greatest common divisor of this number and the given one.\n     *\n     * The GCD is always positive, unless both operands are zero, in which case it is zero.\n     *\n     * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.\n     */\n    public function gcd(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        if ($that->value === '0' && $this->value[0] !== '-') {\n            return $this;\n        }\n\n        if ($this->value === '0' && $that->value[0] !== '-') {\n            return $that;\n        }\n\n        $value = Calculator::get()->gcd($this->value, $that->value);\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns the integer square root number of this number, rounded down.\n     *\n     * The result is the largest x such that x² ≤ n.\n     *\n     * @throws NegativeNumberException If this number is negative.\n     */\n    public function sqrt() : BigInteger\n    {\n        if ($this->value[0] === '-') {\n            throw new NegativeNumberException('Cannot calculate the square root of a negative number.');\n        }\n\n        $value = Calculator::get()->sqrt($this->value);\n\n        return new BigInteger($value);\n    }\n\n    /**\n     * Returns the absolute value of this number.\n     */\n    public function abs() : BigInteger\n    {\n        return $this->isNegative() ? $this->negated() : $this;\n    }\n\n    /**\n     * Returns the inverse of this number.\n     */\n    public function negated() : BigInteger\n    {\n        return new BigInteger(Calculator::get()->neg($this->value));\n    }\n\n    /**\n     * Returns the integer bitwise-and combined with another integer.\n     *\n     * This method returns a negative BigInteger if and only if both operands are negative.\n     *\n     * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.\n     */\n    public function and(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        return new BigInteger(Calculator::get()->and($this->value, $that->value));\n    }\n\n    /**\n     * Returns the integer bitwise-or combined with another integer.\n     *\n     * This method returns a negative BigInteger if and only if either of the operands is negative.\n     *\n     * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.\n     */\n    public function or(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        return new BigInteger(Calculator::get()->or($this->value, $that->value));\n    }\n\n    /**\n     * Returns the integer bitwise-xor combined with another integer.\n     *\n     * This method returns a negative BigInteger if and only if exactly one of the operands is negative.\n     *\n     * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number.\n     */\n    public function xor(BigNumber|int|float|string $that) : BigInteger\n    {\n        $that = BigInteger::of($that);\n\n        return new BigInteger(Calculator::get()->xor($this->value, $that->value));\n    }\n\n    /**\n     * Returns the bitwise-not of this BigInteger.\n     */\n    public function not() : BigInteger\n    {\n        return $this->negated()->minus(1);\n    }\n\n    /**\n     * Returns the integer left shifted by a given number of bits.\n     */\n    public function shiftedLeft(int $distance) : BigInteger\n    {\n        if ($distance === 0) {\n            return $this;\n        }\n\n        if ($distance < 0) {\n            return $this->shiftedRight(- $distance);\n        }\n\n        return $this->multipliedBy(BigInteger::of(2)->power($distance));\n    }\n\n    /**\n     * Returns the integer right shifted by a given number of bits.\n     */\n    public function shiftedRight(int $distance) : BigInteger\n    {\n        if ($distance === 0) {\n            return $this;\n        }\n\n        if ($distance < 0) {\n            return $this->shiftedLeft(- $distance);\n        }\n\n        $operand = BigInteger::of(2)->power($distance);\n\n        if ($this->isPositiveOrZero()) {\n            return $this->quotient($operand);\n        }\n\n        return $this->dividedBy($operand, RoundingMode::UP);\n    }\n\n    /**\n     * Returns the number of bits in the minimal two's-complement representation of this BigInteger, excluding a sign bit.\n     *\n     * For positive BigIntegers, this is equivalent to the number of bits in the ordinary binary representation.\n     * Computes (ceil(log2(this < 0 ? -this : this+1))).\n     */\n    public function getBitLength() : int\n    {\n        if ($this->value === '0') {\n            return 0;\n        }\n\n        if ($this->isNegative()) {\n            return $this->abs()->minus(1)->getBitLength();\n        }\n\n        return \\strlen($this->toBase(2));\n    }\n\n    /**\n     * Returns the index of the rightmost (lowest-order) one bit in this BigInteger.\n     *\n     * Returns -1 if this BigInteger contains no one bits.\n     */\n    public function getLowestSetBit() : int\n    {\n        $n = $this;\n        $bitLength = $this->getBitLength();\n\n        for ($i = 0; $i <= $bitLength; $i++) {\n            if ($n->isOdd()) {\n                return $i;\n            }\n\n            $n = $n->shiftedRight(1);\n        }\n\n        return -1;\n    }\n\n    /**\n     * Returns whether this number is even.\n     */\n    public function isEven() : bool\n    {\n        return \\in_array($this->value[-1], ['0', '2', '4', '6', '8'], true);\n    }\n\n    /**\n     * Returns whether this number is odd.\n     */\n    public function isOdd() : bool\n    {\n        return \\in_array($this->value[-1], ['1', '3', '5', '7', '9'], true);\n    }\n\n    /**\n     * Returns true if and only if the designated bit is set.\n     *\n     * Computes ((this & (1<<n)) != 0).\n     *\n     * @param int $n The bit to test, 0-based.\n     *\n     * @throws \\InvalidArgumentException If the bit to test is negative.\n     */\n    public function testBit(int $n) : bool\n    {\n        if ($n < 0) {\n            throw new \\InvalidArgumentException('The bit to test cannot be negative.');\n        }\n\n        return $this->shiftedRight($n)->isOdd();\n    }\n\n    #[Override]\n    public function compareTo(BigNumber|int|float|string $that) : int\n    {\n        $that = BigNumber::of($that);\n\n        if ($that instanceof BigInteger) {\n            return Calculator::get()->cmp($this->value, $that->value);\n        }\n\n        return - $that->compareTo($this);\n    }\n\n    #[Override]\n    public function getSign() : int\n    {\n        return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1);\n    }\n\n    #[Override]\n    public function toBigInteger() : BigInteger\n    {\n        return $this;\n    }\n\n    #[Override]\n    public function toBigDecimal() : BigDecimal\n    {\n        return self::newBigDecimal($this->value);\n    }\n\n    #[Override]\n    public function toBigRational() : BigRational\n    {\n        return self::newBigRational($this, BigInteger::one(), false);\n    }\n\n    #[Override]\n    public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal\n    {\n        return $this->toBigDecimal()->toScale($scale, $roundingMode);\n    }\n\n    #[Override]\n    public function toInt() : int\n    {\n        $intValue = (int) $this->value;\n\n        if ($this->value !== (string) $intValue) {\n            throw IntegerOverflowException::toIntOverflow($this);\n        }\n\n        return $intValue;\n    }\n\n    #[Override]\n    public function toFloat() : float\n    {\n        return (float) $this->value;\n    }\n\n    /**\n     * Returns a string representation of this number in the given base.\n     *\n     * The output will always be lowercase for bases greater than 10.\n     *\n     * @throws \\InvalidArgumentException If the base is out of range.\n     */\n    public function toBase(int $base) : string\n    {\n        if ($base === 10) {\n            return $this->value;\n        }\n\n        if ($base < 2 || $base > 36) {\n            throw new \\InvalidArgumentException(\\sprintf('Base %d is out of range [2, 36]', $base));\n        }\n\n        return Calculator::get()->toBase($this->value, $base);\n    }\n\n    /**\n     * Returns a string representation of this number in an arbitrary base with a custom alphabet.\n     *\n     * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers;\n     * a NegativeNumberException will be thrown when attempting to call this method on a negative number.\n     *\n     * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8.\n     *\n     * @throws NegativeNumberException   If this number is negative.\n     * @throws \\InvalidArgumentException If the given alphabet does not contain at least 2 chars.\n     */\n    public function toArbitraryBase(string $alphabet) : string\n    {\n        $base = \\strlen($alphabet);\n\n        if ($base < 2) {\n            throw new \\InvalidArgumentException('The alphabet must contain at least 2 chars.');\n        }\n\n        if ($this->value[0] === '-') {\n            throw new NegativeNumberException(__FUNCTION__ . '() does not support negative numbers.');\n        }\n\n        return Calculator::get()->toArbitraryBase($this->value, $alphabet, $base);\n    }\n\n    /**\n     * Returns a string of bytes containing the binary representation of this BigInteger.\n     *\n     * The string is in big-endian byte-order: the most significant byte is in the zeroth element.\n     *\n     * If `$signed` is true, the output will be in two's-complement representation, and a sign bit will be prepended to\n     * the output. If `$signed` is false, no sign bit will be prepended, and this method will throw an exception if the\n     * number is negative.\n     *\n     * The string will contain the minimum number of bytes required to represent this BigInteger, including a sign bit\n     * if `$signed` is true.\n     *\n     * This representation is compatible with the `fromBytes()` factory method, as long as the `$signed` flags match.\n     *\n     * @param bool $signed Whether to output a signed number in two's-complement representation with a leading sign bit.\n     *\n     * @throws NegativeNumberException If $signed is false, and the number is negative.\n     */\n    public function toBytes(bool $signed = true) : string\n    {\n        if (! $signed && $this->isNegative()) {\n            throw new NegativeNumberException('Cannot convert a negative number to a byte string when $signed is false.');\n        }\n\n        $hex = $this->abs()->toBase(16);\n\n        if (\\strlen($hex) % 2 !== 0) {\n            $hex = '0' . $hex;\n        }\n\n        $baseHexLength = \\strlen($hex);\n\n        if ($signed) {\n            if ($this->isNegative()) {\n                $bin = \\hex2bin($hex);\n                assert($bin !== false);\n\n                $hex = \\bin2hex(~$bin);\n                $hex = self::fromBase($hex, 16)->plus(1)->toBase(16);\n\n                $hexLength = \\strlen($hex);\n\n                if ($hexLength < $baseHexLength) {\n                    $hex = \\str_repeat('0', $baseHexLength - $hexLength) . $hex;\n                }\n\n                if ($hex[0] < '8') {\n                    $hex = 'FF' . $hex;\n                }\n            } else {\n                if ($hex[0] >= '8') {\n                    $hex = '00' . $hex;\n                }\n            }\n        }\n\n        return \\hex2bin($hex);\n    }\n\n    /**\n     * @return numeric-string\n     */\n    #[Override]\n    public function __toString() : string\n    {\n        /** @var numeric-string */\n        return $this->value;\n    }\n\n    /**\n     * This method is required for serializing the object and SHOULD NOT be accessed directly.\n     *\n     * @internal\n     *\n     * @return array{value: string}\n     */\n    public function __serialize(): array\n    {\n        return ['value' => $this->value];\n    }\n\n    /**\n     * This method is only here to allow unserializing the object and cannot be accessed directly.\n     *\n     * @internal\n     * @psalm-suppress RedundantPropertyInitializationCheck\n     *\n     * @param array{value: string} $data\n     *\n     * @throws \\LogicException\n     */\n    public function __unserialize(array $data): void\n    {\n        if (isset($this->value)) {\n            throw new \\LogicException('__unserialize() is an internal function, it must not be called directly.');\n        }\n\n        $this->value = $data['value'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/BigNumber.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math;\n\nuse Brick\\Math\\Exception\\DivisionByZeroException;\nuse Brick\\Math\\Exception\\MathException;\nuse Brick\\Math\\Exception\\NumberFormatException;\nuse Brick\\Math\\Exception\\RoundingNecessaryException;\nuse Override;\n\n/**\n * Common interface for arbitrary-precision rational numbers.\n *\n * @psalm-immutable\n */\nabstract class BigNumber implements \\JsonSerializable\n{\n    /**\n     * The regular expression used to parse integer or decimal numbers.\n     */\n    private const PARSE_REGEXP_NUMERICAL =\n        '/^' .\n            '(?<sign>[\\-\\+])?' .\n            '(?<integral>[0-9]+)?' .\n            '(?<point>\\.)?' .\n            '(?<fractional>[0-9]+)?' .\n            '(?:[eE](?<exponent>[\\-\\+]?[0-9]+))?' .\n        '$/';\n\n    /**\n     * The regular expression used to parse rational numbers.\n     */\n    private const PARSE_REGEXP_RATIONAL =\n        '/^' .\n            '(?<sign>[\\-\\+])?' .\n            '(?<numerator>[0-9]+)' .\n            '\\/?' .\n            '(?<denominator>[0-9]+)' .\n        '$/';\n\n    /**\n     * Creates a BigNumber of the given value.\n     *\n     * The concrete return type is dependent on the given value, with the following rules:\n     *\n     * - BigNumber instances are returned as is\n     * - integer numbers are returned as BigInteger\n     * - floating point numbers are converted to a string then parsed as such\n     * - strings containing a `/` character are returned as BigRational\n     * - strings containing a `.` character or using an exponential notation are returned as BigDecimal\n     * - strings containing only digits with an optional leading `+` or `-` sign are returned as BigInteger\n     *\n     * @throws NumberFormatException If the format of the number is not valid.\n     * @throws DivisionByZeroException If the value represents a rational number with a denominator of zero.\n     * @throws RoundingNecessaryException If the value cannot be converted to an instance of the subclass without rounding.\n     *\n     * @psalm-pure\n     */\n    final public static function of(BigNumber|int|float|string $value) : static\n    {\n        $value = self::_of($value);\n\n        if (static::class === BigNumber::class) {\n            // https://github.com/vimeo/psalm/issues/10309\n            assert($value instanceof static);\n\n            return $value;\n        }\n\n        return static::from($value);\n    }\n\n    /**\n     * @throws NumberFormatException If the format of the number is not valid.\n     * @throws DivisionByZeroException If the value represents a rational number with a denominator of zero.\n     *\n     * @psalm-pure\n     */\n    private static function _of(BigNumber|int|float|string $value) : BigNumber\n    {\n        if ($value instanceof BigNumber) {\n            return $value;\n        }\n\n        if (\\is_int($value)) {\n            return new BigInteger((string) $value);\n        }\n\n        if (is_float($value)) {\n            $value = (string) $value;\n        }\n\n        if (str_contains($value, '/')) {\n            // Rational number\n            if (\\preg_match(self::PARSE_REGEXP_RATIONAL, $value, $matches, PREG_UNMATCHED_AS_NULL) !== 1) {\n                throw NumberFormatException::invalidFormat($value);\n            }\n\n            $sign        = $matches['sign'];\n            $numerator   = $matches['numerator'];\n            $denominator = $matches['denominator'];\n\n            assert($numerator !== null);\n            assert($denominator !== null);\n\n            $numerator   = self::cleanUp($sign, $numerator);\n            $denominator = self::cleanUp(null, $denominator);\n\n            if ($denominator === '0') {\n                throw DivisionByZeroException::denominatorMustNotBeZero();\n            }\n\n            return new BigRational(\n                new BigInteger($numerator),\n                new BigInteger($denominator),\n                false\n            );\n        } else {\n            // Integer or decimal number\n            if (\\preg_match(self::PARSE_REGEXP_NUMERICAL, $value, $matches, PREG_UNMATCHED_AS_NULL) !== 1) {\n                throw NumberFormatException::invalidFormat($value);\n            }\n\n            $sign = $matches['sign'];\n            $point = $matches['point'];\n            $integral = $matches['integral'];\n            $fractional = $matches['fractional'];\n            $exponent = $matches['exponent'];\n\n            if ($integral === null && $fractional === null) {\n                throw NumberFormatException::invalidFormat($value);\n            }\n\n            if ($integral === null) {\n                $integral = '0';\n            }\n\n            if ($point !== null || $exponent !== null) {\n                $fractional = ($fractional ?? '');\n                $exponent = ($exponent !== null) ? (int)$exponent : 0;\n\n                if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) {\n                    throw new NumberFormatException('Exponent too large.');\n                }\n\n                $unscaledValue = self::cleanUp($sign, $integral . $fractional);\n\n                $scale = \\strlen($fractional) - $exponent;\n\n                if ($scale < 0) {\n                    if ($unscaledValue !== '0') {\n                        $unscaledValue .= \\str_repeat('0', -$scale);\n                    }\n                    $scale = 0;\n                }\n\n                return new BigDecimal($unscaledValue, $scale);\n            }\n\n            $integral = self::cleanUp($sign, $integral);\n\n            return new BigInteger($integral);\n        }\n    }\n\n    /**\n     * Overridden by subclasses to convert a BigNumber to an instance of the subclass.\n     *\n     * @throws RoundingNecessaryException If the value cannot be converted.\n     *\n     * @psalm-pure\n     */\n    abstract protected static function from(BigNumber $number): static;\n\n    /**\n     * Proxy method to access BigInteger's protected constructor from sibling classes.\n     *\n     * @internal\n     * @psalm-pure\n     */\n    final protected function newBigInteger(string $value) : BigInteger\n    {\n        return new BigInteger($value);\n    }\n\n    /**\n     * Proxy method to access BigDecimal's protected constructor from sibling classes.\n     *\n     * @internal\n     * @psalm-pure\n     */\n    final protected function newBigDecimal(string $value, int $scale = 0) : BigDecimal\n    {\n        return new BigDecimal($value, $scale);\n    }\n\n    /**\n     * Proxy method to access BigRational's protected constructor from sibling classes.\n     *\n     * @internal\n     * @psalm-pure\n     */\n    final protected function newBigRational(BigInteger $numerator, BigInteger $denominator, bool $checkDenominator) : BigRational\n    {\n        return new BigRational($numerator, $denominator, $checkDenominator);\n    }\n\n    /**\n     * Returns the minimum of the given values.\n     *\n     * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible\n     *                                              to an instance of the class this method is called on.\n     *\n     * @throws \\InvalidArgumentException If no values are given.\n     * @throws MathException             If an argument is not valid.\n     *\n     * @psalm-pure\n     */\n    final public static function min(BigNumber|int|float|string ...$values) : static\n    {\n        $min = null;\n\n        foreach ($values as $value) {\n            $value = static::of($value);\n\n            if ($min === null || $value->isLessThan($min)) {\n                $min = $value;\n            }\n        }\n\n        if ($min === null) {\n            throw new \\InvalidArgumentException(__METHOD__ . '() expects at least one value.');\n        }\n\n        return $min;\n    }\n\n    /**\n     * Returns the maximum of the given values.\n     *\n     * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible\n     *                                              to an instance of the class this method is called on.\n     *\n     * @throws \\InvalidArgumentException If no values are given.\n     * @throws MathException             If an argument is not valid.\n     *\n     * @psalm-pure\n     */\n    final public static function max(BigNumber|int|float|string ...$values) : static\n    {\n        $max = null;\n\n        foreach ($values as $value) {\n            $value = static::of($value);\n\n            if ($max === null || $value->isGreaterThan($max)) {\n                $max = $value;\n            }\n        }\n\n        if ($max === null) {\n            throw new \\InvalidArgumentException(__METHOD__ . '() expects at least one value.');\n        }\n\n        return $max;\n    }\n\n    /**\n     * Returns the sum of the given values.\n     *\n     * @param BigNumber|int|float|string ...$values The numbers to add. All the numbers need to be convertible\n     *                                              to an instance of the class this method is called on.\n     *\n     * @throws \\InvalidArgumentException If no values are given.\n     * @throws MathException             If an argument is not valid.\n     *\n     * @psalm-pure\n     */\n    final public static function sum(BigNumber|int|float|string ...$values) : static\n    {\n        /** @var static|null $sum */\n        $sum = null;\n\n        foreach ($values as $value) {\n            $value = static::of($value);\n\n            $sum = $sum === null ? $value : self::add($sum, $value);\n        }\n\n        if ($sum === null) {\n            throw new \\InvalidArgumentException(__METHOD__ . '() expects at least one value.');\n        }\n\n        return $sum;\n    }\n\n    /**\n     * Adds two BigNumber instances in the correct order to avoid a RoundingNecessaryException.\n     *\n     * @todo This could be better resolved by creating an abstract protected method in BigNumber, and leaving to\n     *       concrete classes the responsibility to perform the addition themselves or delegate it to the given number,\n     *       depending on their ability to perform the operation. This will also require a version bump because we're\n     *       potentially breaking custom BigNumber implementations (if any...)\n     *\n     * @psalm-pure\n     */\n    private static function add(BigNumber $a, BigNumber $b) : BigNumber\n    {\n        if ($a instanceof BigRational) {\n            return $a->plus($b);\n        }\n\n        if ($b instanceof BigRational) {\n            return $b->plus($a);\n        }\n\n        if ($a instanceof BigDecimal) {\n            return $a->plus($b);\n        }\n\n        if ($b instanceof BigDecimal) {\n            return $b->plus($a);\n        }\n\n        /** @var BigInteger $a */\n\n        return $a->plus($b);\n    }\n\n    /**\n     * Removes optional leading zeros and applies sign.\n     *\n     * @param string|null $sign   The sign, '+' or '-', optional. Null is allowed for convenience and treated as '+'.\n     * @param string      $number The number, validated as a non-empty string of digits.\n     *\n     * @psalm-pure\n     */\n    private static function cleanUp(string|null $sign, string $number) : string\n    {\n        $number = \\ltrim($number, '0');\n\n        if ($number === '') {\n            return '0';\n        }\n\n        return $sign === '-' ? '-' . $number : $number;\n    }\n\n    /**\n     * Checks if this number is equal to the given one.\n     */\n    final public function isEqualTo(BigNumber|int|float|string $that) : bool\n    {\n        return $this->compareTo($that) === 0;\n    }\n\n    /**\n     * Checks if this number is strictly lower than the given one.\n     */\n    final public function isLessThan(BigNumber|int|float|string $that) : bool\n    {\n        return $this->compareTo($that) < 0;\n    }\n\n    /**\n     * Checks if this number is lower than or equal to the given one.\n     */\n    final public function isLessThanOrEqualTo(BigNumber|int|float|string $that) : bool\n    {\n        return $this->compareTo($that) <= 0;\n    }\n\n    /**\n     * Checks if this number is strictly greater than the given one.\n     */\n    final public function isGreaterThan(BigNumber|int|float|string $that) : bool\n    {\n        return $this->compareTo($that) > 0;\n    }\n\n    /**\n     * Checks if this number is greater than or equal to the given one.\n     */\n    final public function isGreaterThanOrEqualTo(BigNumber|int|float|string $that) : bool\n    {\n        return $this->compareTo($that) >= 0;\n    }\n\n    /**\n     * Checks if this number equals zero.\n     */\n    final public function isZero() : bool\n    {\n        return $this->getSign() === 0;\n    }\n\n    /**\n     * Checks if this number is strictly negative.\n     */\n    final public function isNegative() : bool\n    {\n        return $this->getSign() < 0;\n    }\n\n    /**\n     * Checks if this number is negative or zero.\n     */\n    final public function isNegativeOrZero() : bool\n    {\n        return $this->getSign() <= 0;\n    }\n\n    /**\n     * Checks if this number is strictly positive.\n     */\n    final public function isPositive() : bool\n    {\n        return $this->getSign() > 0;\n    }\n\n    /**\n     * Checks if this number is positive or zero.\n     */\n    final public function isPositiveOrZero() : bool\n    {\n        return $this->getSign() >= 0;\n    }\n\n    /**\n     * Returns the sign of this number.\n     *\n     * @psalm-return -1|0|1\n     *\n     * @return int -1 if the number is negative, 0 if zero, 1 if positive.\n     */\n    abstract public function getSign() : int;\n\n    /**\n     * Compares this number to the given one.\n     *\n     * @psalm-return -1|0|1\n     *\n     * @return int -1 if `$this` is lower than, 0 if equal to, 1 if greater than `$that`.\n     *\n     * @throws MathException If the number is not valid.\n     */\n    abstract public function compareTo(BigNumber|int|float|string $that) : int;\n\n    /**\n     * Converts this number to a BigInteger.\n     *\n     * @throws RoundingNecessaryException If this number cannot be converted to a BigInteger without rounding.\n     */\n    abstract public function toBigInteger() : BigInteger;\n\n    /**\n     * Converts this number to a BigDecimal.\n     *\n     * @throws RoundingNecessaryException If this number cannot be converted to a BigDecimal without rounding.\n     */\n    abstract public function toBigDecimal() : BigDecimal;\n\n    /**\n     * Converts this number to a BigRational.\n     */\n    abstract public function toBigRational() : BigRational;\n\n    /**\n     * Converts this number to a BigDecimal with the given scale, using rounding if necessary.\n     *\n     * @param int          $scale        The scale of the resulting `BigDecimal`.\n     * @param RoundingMode $roundingMode An optional rounding mode, defaults to UNNECESSARY.\n     *\n     * @throws RoundingNecessaryException If this number cannot be converted to the given scale without rounding.\n     *                                    This only applies when RoundingMode::UNNECESSARY is used.\n     */\n    abstract public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal;\n\n    /**\n     * Returns the exact value of this number as a native integer.\n     *\n     * If this number cannot be converted to a native integer without losing precision, an exception is thrown.\n     * Note that the acceptable range for an integer depends on the platform and differs for 32-bit and 64-bit.\n     *\n     * @throws MathException If this number cannot be exactly converted to a native integer.\n     */\n    abstract public function toInt() : int;\n\n    /**\n     * Returns an approximation of this number as a floating-point value.\n     *\n     * Note that this method can discard information as the precision of a floating-point value\n     * is inherently limited.\n     *\n     * If the number is greater than the largest representable floating point number, positive infinity is returned.\n     * If the number is less than the smallest representable floating point number, negative infinity is returned.\n     */\n    abstract public function toFloat() : float;\n\n    /**\n     * Returns a string representation of this number.\n     *\n     * The output of this method can be parsed by the `of()` factory method;\n     * this will yield an object equal to this one, without any information loss.\n     */\n    abstract public function __toString() : string;\n\n    #[Override]\n    final public function jsonSerialize() : string\n    {\n        return $this->__toString();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/BigRational.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math;\n\nuse Brick\\Math\\Exception\\DivisionByZeroException;\nuse Brick\\Math\\Exception\\MathException;\nuse Brick\\Math\\Exception\\NumberFormatException;\nuse Brick\\Math\\Exception\\RoundingNecessaryException;\nuse Override;\n\n/**\n * An arbitrarily large rational number.\n *\n * This class is immutable.\n *\n * @psalm-immutable\n */\nfinal class BigRational extends BigNumber\n{\n    /**\n     * The numerator.\n     */\n    private readonly BigInteger $numerator;\n\n    /**\n     * The denominator. Always strictly positive.\n     */\n    private readonly BigInteger $denominator;\n\n    /**\n     * Protected constructor. Use a factory method to obtain an instance.\n     *\n     * @param BigInteger $numerator        The numerator.\n     * @param BigInteger $denominator      The denominator.\n     * @param bool       $checkDenominator Whether to check the denominator for negative and zero.\n     *\n     * @throws DivisionByZeroException If the denominator is zero.\n     */\n    protected function __construct(BigInteger $numerator, BigInteger $denominator, bool $checkDenominator)\n    {\n        if ($checkDenominator) {\n            if ($denominator->isZero()) {\n                throw DivisionByZeroException::denominatorMustNotBeZero();\n            }\n\n            if ($denominator->isNegative()) {\n                $numerator   = $numerator->negated();\n                $denominator = $denominator->negated();\n            }\n        }\n\n        $this->numerator   = $numerator;\n        $this->denominator = $denominator;\n    }\n\n    /**\n     * @psalm-pure\n     */\n    #[Override]\n    protected static function from(BigNumber $number): static\n    {\n        return $number->toBigRational();\n    }\n\n    /**\n     * Creates a BigRational out of a numerator and a denominator.\n     *\n     * If the denominator is negative, the signs of both the numerator and the denominator\n     * will be inverted to ensure that the denominator is always positive.\n     *\n     * @param BigNumber|int|float|string $numerator   The numerator. Must be convertible to a BigInteger.\n     * @param BigNumber|int|float|string $denominator The denominator. Must be convertible to a BigInteger.\n     *\n     * @throws NumberFormatException      If an argument does not represent a valid number.\n     * @throws RoundingNecessaryException If an argument represents a non-integer number.\n     * @throws DivisionByZeroException    If the denominator is zero.\n     *\n     * @psalm-pure\n     */\n    public static function nd(\n        BigNumber|int|float|string $numerator,\n        BigNumber|int|float|string $denominator,\n    ) : BigRational {\n        $numerator   = BigInteger::of($numerator);\n        $denominator = BigInteger::of($denominator);\n\n        return new BigRational($numerator, $denominator, true);\n    }\n\n    /**\n     * Returns a BigRational representing zero.\n     *\n     * @psalm-pure\n     */\n    public static function zero() : BigRational\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigRational|null $zero\n         */\n        static $zero;\n\n        if ($zero === null) {\n            $zero = new BigRational(BigInteger::zero(), BigInteger::one(), false);\n        }\n\n        return $zero;\n    }\n\n    /**\n     * Returns a BigRational representing one.\n     *\n     * @psalm-pure\n     */\n    public static function one() : BigRational\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigRational|null $one\n         */\n        static $one;\n\n        if ($one === null) {\n            $one = new BigRational(BigInteger::one(), BigInteger::one(), false);\n        }\n\n        return $one;\n    }\n\n    /**\n     * Returns a BigRational representing ten.\n     *\n     * @psalm-pure\n     */\n    public static function ten() : BigRational\n    {\n        /**\n         * @psalm-suppress ImpureStaticVariable\n         * @var BigRational|null $ten\n         */\n        static $ten;\n\n        if ($ten === null) {\n            $ten = new BigRational(BigInteger::ten(), BigInteger::one(), false);\n        }\n\n        return $ten;\n    }\n\n    public function getNumerator() : BigInteger\n    {\n        return $this->numerator;\n    }\n\n    public function getDenominator() : BigInteger\n    {\n        return $this->denominator;\n    }\n\n    /**\n     * Returns the quotient of the division of the numerator by the denominator.\n     */\n    public function quotient() : BigInteger\n    {\n        return $this->numerator->quotient($this->denominator);\n    }\n\n    /**\n     * Returns the remainder of the division of the numerator by the denominator.\n     */\n    public function remainder() : BigInteger\n    {\n        return $this->numerator->remainder($this->denominator);\n    }\n\n    /**\n     * Returns the quotient and remainder of the division of the numerator by the denominator.\n     *\n     * @return BigInteger[]\n     *\n     * @psalm-return array{BigInteger, BigInteger}\n     */\n    public function quotientAndRemainder() : array\n    {\n        return $this->numerator->quotientAndRemainder($this->denominator);\n    }\n\n    /**\n     * Returns the sum of this number and the given one.\n     *\n     * @param BigNumber|int|float|string $that The number to add.\n     *\n     * @throws MathException If the number is not valid.\n     */\n    public function plus(BigNumber|int|float|string $that) : BigRational\n    {\n        $that = BigRational::of($that);\n\n        $numerator   = $this->numerator->multipliedBy($that->denominator);\n        $numerator   = $numerator->plus($that->numerator->multipliedBy($this->denominator));\n        $denominator = $this->denominator->multipliedBy($that->denominator);\n\n        return new BigRational($numerator, $denominator, false);\n    }\n\n    /**\n     * Returns the difference of this number and the given one.\n     *\n     * @param BigNumber|int|float|string $that The number to subtract.\n     *\n     * @throws MathException If the number is not valid.\n     */\n    public function minus(BigNumber|int|float|string $that) : BigRational\n    {\n        $that = BigRational::of($that);\n\n        $numerator   = $this->numerator->multipliedBy($that->denominator);\n        $numerator   = $numerator->minus($that->numerator->multipliedBy($this->denominator));\n        $denominator = $this->denominator->multipliedBy($that->denominator);\n\n        return new BigRational($numerator, $denominator, false);\n    }\n\n    /**\n     * Returns the product of this number and the given one.\n     *\n     * @param BigNumber|int|float|string $that The multiplier.\n     *\n     * @throws MathException If the multiplier is not a valid number.\n     */\n    public function multipliedBy(BigNumber|int|float|string $that) : BigRational\n    {\n        $that = BigRational::of($that);\n\n        $numerator   = $this->numerator->multipliedBy($that->numerator);\n        $denominator = $this->denominator->multipliedBy($that->denominator);\n\n        return new BigRational($numerator, $denominator, false);\n    }\n\n    /**\n     * Returns the result of the division of this number by the given one.\n     *\n     * @param BigNumber|int|float|string $that The divisor.\n     *\n     * @throws MathException If the divisor is not a valid number, or is zero.\n     */\n    public function dividedBy(BigNumber|int|float|string $that) : BigRational\n    {\n        $that = BigRational::of($that);\n\n        $numerator   = $this->numerator->multipliedBy($that->denominator);\n        $denominator = $this->denominator->multipliedBy($that->numerator);\n\n        return new BigRational($numerator, $denominator, true);\n    }\n\n    /**\n     * Returns this number exponentiated to the given value.\n     *\n     * @throws \\InvalidArgumentException If the exponent is not in the range 0 to 1,000,000.\n     */\n    public function power(int $exponent) : BigRational\n    {\n        if ($exponent === 0) {\n            $one = BigInteger::one();\n\n            return new BigRational($one, $one, false);\n        }\n\n        if ($exponent === 1) {\n            return $this;\n        }\n\n        return new BigRational(\n            $this->numerator->power($exponent),\n            $this->denominator->power($exponent),\n            false\n        );\n    }\n\n    /**\n     * Returns the reciprocal of this BigRational.\n     *\n     * The reciprocal has the numerator and denominator swapped.\n     *\n     * @throws DivisionByZeroException If the numerator is zero.\n     */\n    public function reciprocal() : BigRational\n    {\n        return new BigRational($this->denominator, $this->numerator, true);\n    }\n\n    /**\n     * Returns the absolute value of this BigRational.\n     */\n    public function abs() : BigRational\n    {\n        return new BigRational($this->numerator->abs(), $this->denominator, false);\n    }\n\n    /**\n     * Returns the negated value of this BigRational.\n     */\n    public function negated() : BigRational\n    {\n        return new BigRational($this->numerator->negated(), $this->denominator, false);\n    }\n\n    /**\n     * Returns the simplified value of this BigRational.\n     */\n    public function simplified() : BigRational\n    {\n        $gcd = $this->numerator->gcd($this->denominator);\n\n        $numerator = $this->numerator->quotient($gcd);\n        $denominator = $this->denominator->quotient($gcd);\n\n        return new BigRational($numerator, $denominator, false);\n    }\n\n    #[Override]\n    public function compareTo(BigNumber|int|float|string $that) : int\n    {\n        return $this->minus($that)->getSign();\n    }\n\n    #[Override]\n    public function getSign() : int\n    {\n        return $this->numerator->getSign();\n    }\n\n    #[Override]\n    public function toBigInteger() : BigInteger\n    {\n        $simplified = $this->simplified();\n\n        if (! $simplified->denominator->isEqualTo(1)) {\n            throw new RoundingNecessaryException('This rational number cannot be represented as an integer value without rounding.');\n        }\n\n        return $simplified->numerator;\n    }\n\n    #[Override]\n    public function toBigDecimal() : BigDecimal\n    {\n        return $this->numerator->toBigDecimal()->exactlyDividedBy($this->denominator);\n    }\n\n    #[Override]\n    public function toBigRational() : BigRational\n    {\n        return $this;\n    }\n\n    #[Override]\n    public function toScale(int $scale, RoundingMode $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal\n    {\n        return $this->numerator->toBigDecimal()->dividedBy($this->denominator, $scale, $roundingMode);\n    }\n\n    #[Override]\n    public function toInt() : int\n    {\n        return $this->toBigInteger()->toInt();\n    }\n\n    #[Override]\n    public function toFloat() : float\n    {\n        $simplified = $this->simplified();\n        return $simplified->numerator->toFloat() / $simplified->denominator->toFloat();\n    }\n\n    #[Override]\n    public function __toString() : string\n    {\n        $numerator   = (string) $this->numerator;\n        $denominator = (string) $this->denominator;\n\n        if ($denominator === '1') {\n            return $numerator;\n        }\n\n        return $numerator . '/' . $denominator;\n    }\n\n    /**\n     * This method is required for serializing the object and SHOULD NOT be accessed directly.\n     *\n     * @internal\n     *\n     * @return array{numerator: BigInteger, denominator: BigInteger}\n     */\n    public function __serialize(): array\n    {\n        return ['numerator' => $this->numerator, 'denominator' => $this->denominator];\n    }\n\n    /**\n     * This method is only here to allow unserializing the object and cannot be accessed directly.\n     *\n     * @internal\n     * @psalm-suppress RedundantPropertyInitializationCheck\n     *\n     * @param array{numerator: BigInteger, denominator: BigInteger} $data\n     *\n     * @throws \\LogicException\n     */\n    public function __unserialize(array $data): void\n    {\n        if (isset($this->numerator)) {\n            throw new \\LogicException('__unserialize() is an internal function, it must not be called directly.');\n        }\n\n        $this->numerator = $data['numerator'];\n        $this->denominator = $data['denominator'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Exception/DivisionByZeroException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Exception;\n\n/**\n * Exception thrown when a division by zero occurs.\n */\nclass DivisionByZeroException extends MathException\n{\n    /**\n     * @psalm-pure\n     */\n    public static function divisionByZero() : DivisionByZeroException\n    {\n        return new self('Division by zero.');\n    }\n\n    /**\n     * @psalm-pure\n     */\n    public static function modulusMustNotBeZero() : DivisionByZeroException\n    {\n        return new self('The modulus must not be zero.');\n    }\n\n    /**\n     * @psalm-pure\n     */\n    public static function denominatorMustNotBeZero() : DivisionByZeroException\n    {\n        return new self('The denominator of a rational number cannot be zero.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Exception/IntegerOverflowException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Exception;\n\nuse Brick\\Math\\BigInteger;\n\n/**\n * Exception thrown when an integer overflow occurs.\n */\nclass IntegerOverflowException extends MathException\n{\n    /**\n     * @psalm-pure\n     */\n    public static function toIntOverflow(BigInteger $value) : IntegerOverflowException\n    {\n        $message = '%s is out of range %d to %d and cannot be represented as an integer.';\n\n        return new self(\\sprintf($message, (string) $value, PHP_INT_MIN, PHP_INT_MAX));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Exception/MathException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Exception;\n\n/**\n * Base class for all math exceptions.\n */\nclass MathException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Exception/NegativeNumberException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Exception;\n\n/**\n * Exception thrown when attempting to perform an unsupported operation, such as a square root, on a negative number.\n */\nclass NegativeNumberException extends MathException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Exception/NumberFormatException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Exception;\n\n/**\n * Exception thrown when attempting to create a number from a string with an invalid format.\n */\nclass NumberFormatException extends MathException\n{\n    public static function invalidFormat(string $value) : self\n    {\n        return new self(\\sprintf(\n            'The given value \"%s\" does not represent a valid number.',\n            $value,\n        ));\n    }\n\n    /**\n     * @param string $char The failing character.\n     *\n     * @psalm-pure\n     */\n    public static function charNotInAlphabet(string $char) : self\n    {\n        $ord = \\ord($char);\n\n        if ($ord < 32 || $ord > 126) {\n            $char = \\strtoupper(\\dechex($ord));\n\n            if ($ord < 10) {\n                $char = '0' . $char;\n            }\n        } else {\n            $char = '\"' . $char . '\"';\n        }\n\n        return new self(\\sprintf('Char %s is not a valid character in the given alphabet.', $char));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Exception/RoundingNecessaryException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Exception;\n\n/**\n * Exception thrown when a number cannot be represented at the requested scale without rounding.\n */\nclass RoundingNecessaryException extends MathException\n{\n    /**\n     * @psalm-pure\n     */\n    public static function roundingNecessary() : RoundingNecessaryException\n    {\n        return new self('Rounding is necessary to represent the result of the operation at this scale.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Internal\\Calculator;\n\nuse Brick\\Math\\Internal\\Calculator;\nuse Override;\n\n/**\n * Calculator implementation built around the bcmath library.\n *\n * @internal\n *\n * @psalm-immutable\n */\nclass BcMathCalculator extends Calculator\n{\n    #[Override]\n    public function add(string $a, string $b) : string\n    {\n        return \\bcadd($a, $b, 0);\n    }\n\n    #[Override]\n    public function sub(string $a, string $b) : string\n    {\n        return \\bcsub($a, $b, 0);\n    }\n\n    #[Override]\n    public function mul(string $a, string $b) : string\n    {\n        return \\bcmul($a, $b, 0);\n    }\n\n    #[Override]\n    public function divQ(string $a, string $b) : string\n    {\n        return \\bcdiv($a, $b, 0);\n    }\n\n    #[Override]\n    public function divR(string $a, string $b) : string\n    {\n        return \\bcmod($a, $b, 0);\n    }\n\n    #[Override]\n    public function divQR(string $a, string $b) : array\n    {\n        $q = \\bcdiv($a, $b, 0);\n        $r = \\bcmod($a, $b, 0);\n\n        return [$q, $r];\n    }\n\n    #[Override]\n    public function pow(string $a, int $e) : string\n    {\n        return \\bcpow($a, (string) $e, 0);\n    }\n\n    #[Override]\n    public function modPow(string $base, string $exp, string $mod) : string\n    {\n        return \\bcpowmod($base, $exp, $mod, 0);\n    }\n\n    #[Override]\n    public function sqrt(string $n) : string\n    {\n        return \\bcsqrt($n, 0);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Internal\\Calculator;\n\nuse Brick\\Math\\Internal\\Calculator;\nuse Override;\n\n/**\n * Calculator implementation built around the GMP library.\n *\n * @internal\n *\n * @psalm-immutable\n */\nclass GmpCalculator extends Calculator\n{\n    #[Override]\n    public function add(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_add($a, $b));\n    }\n\n    #[Override]\n    public function sub(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_sub($a, $b));\n    }\n\n    #[Override]\n    public function mul(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_mul($a, $b));\n    }\n\n    #[Override]\n    public function divQ(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_div_q($a, $b));\n    }\n\n    #[Override]\n    public function divR(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_div_r($a, $b));\n    }\n\n    #[Override]\n    public function divQR(string $a, string $b) : array\n    {\n        [$q, $r] = \\gmp_div_qr($a, $b);\n\n        return [\n            \\gmp_strval($q),\n            \\gmp_strval($r)\n        ];\n    }\n\n    #[Override]\n    public function pow(string $a, int $e) : string\n    {\n        return \\gmp_strval(\\gmp_pow($a, $e));\n    }\n\n    #[Override]\n    public function modInverse(string $x, string $m) : ?string\n    {\n        $result = \\gmp_invert($x, $m);\n\n        if ($result === false) {\n            return null;\n        }\n\n        return \\gmp_strval($result);\n    }\n\n    #[Override]\n    public function modPow(string $base, string $exp, string $mod) : string\n    {\n        return \\gmp_strval(\\gmp_powm($base, $exp, $mod));\n    }\n\n    #[Override]\n    public function gcd(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_gcd($a, $b));\n    }\n\n    #[Override]\n    public function fromBase(string $number, int $base) : string\n    {\n        return \\gmp_strval(\\gmp_init($number, $base));\n    }\n\n    #[Override]\n    public function toBase(string $number, int $base) : string\n    {\n        return \\gmp_strval($number, $base);\n    }\n\n    #[Override]\n    public function and(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_and($a, $b));\n    }\n\n    #[Override]\n    public function or(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_or($a, $b));\n    }\n\n    #[Override]\n    public function xor(string $a, string $b) : string\n    {\n        return \\gmp_strval(\\gmp_xor($a, $b));\n    }\n\n    #[Override]\n    public function sqrt(string $n) : string\n    {\n        return \\gmp_strval(\\gmp_sqrt($n));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Internal\\Calculator;\n\nuse Brick\\Math\\Internal\\Calculator;\nuse Override;\n\n/**\n * Calculator implementation using only native PHP code.\n *\n * @internal\n *\n * @psalm-immutable\n */\nclass NativeCalculator extends Calculator\n{\n    /**\n     * The max number of digits the platform can natively add, subtract, multiply or divide without overflow.\n     * For multiplication, this represents the max sum of the lengths of both operands.\n     *\n     * In addition, it is assumed that an extra digit can hold a carry (1) without overflowing.\n     * Example: 32-bit: max number 1,999,999,999 (9 digits + carry)\n     *          64-bit: max number 1,999,999,999,999,999,999 (18 digits + carry)\n     */\n    private readonly int $maxDigits;\n\n    /**\n     * @codeCoverageIgnore\n     */\n    public function __construct()\n    {\n        $this->maxDigits = match (PHP_INT_SIZE) {\n            4 => 9,\n            8 => 18,\n            default => throw new \\RuntimeException('The platform is not 32-bit or 64-bit as expected.')\n        };\n    }\n\n    #[Override]\n    public function add(string $a, string $b) : string\n    {\n        /**\n         * @psalm-var numeric-string $a\n         * @psalm-var numeric-string $b\n         */\n        $result = $a + $b;\n\n        if (is_int($result)) {\n            return (string) $result;\n        }\n\n        if ($a === '0') {\n            return $b;\n        }\n\n        if ($b === '0') {\n            return $a;\n        }\n\n        [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b);\n\n        $result = $aNeg === $bNeg ? $this->doAdd($aDig, $bDig) : $this->doSub($aDig, $bDig);\n\n        if ($aNeg) {\n            $result = $this->neg($result);\n        }\n\n        return $result;\n    }\n\n    #[Override]\n    public function sub(string $a, string $b) : string\n    {\n        return $this->add($a, $this->neg($b));\n    }\n\n    #[Override]\n    public function mul(string $a, string $b) : string\n    {\n        /**\n         * @psalm-var numeric-string $a\n         * @psalm-var numeric-string $b\n         */\n        $result = $a * $b;\n\n        if (is_int($result)) {\n            return (string) $result;\n        }\n\n        if ($a === '0' || $b === '0') {\n            return '0';\n        }\n\n        if ($a === '1') {\n            return $b;\n        }\n\n        if ($b === '1') {\n            return $a;\n        }\n\n        if ($a === '-1') {\n            return $this->neg($b);\n        }\n\n        if ($b === '-1') {\n            return $this->neg($a);\n        }\n\n        [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b);\n\n        $result = $this->doMul($aDig, $bDig);\n\n        if ($aNeg !== $bNeg) {\n            $result = $this->neg($result);\n        }\n\n        return $result;\n    }\n\n    #[Override]\n    public function divQ(string $a, string $b) : string\n    {\n        return $this->divQR($a, $b)[0];\n    }\n\n    #[Override]\n    public function divR(string $a, string $b): string\n    {\n        return $this->divQR($a, $b)[1];\n    }\n\n    #[Override]\n    public function divQR(string $a, string $b) : array\n    {\n        if ($a === '0') {\n            return ['0', '0'];\n        }\n\n        if ($a === $b) {\n            return ['1', '0'];\n        }\n\n        if ($b === '1') {\n            return [$a, '0'];\n        }\n\n        if ($b === '-1') {\n            return [$this->neg($a), '0'];\n        }\n\n        /** @psalm-var numeric-string $a */\n        $na = $a * 1; // cast to number\n\n        if (is_int($na)) {\n            /** @psalm-var numeric-string $b */\n            $nb = $b * 1;\n\n            if (is_int($nb)) {\n                // the only division that may overflow is PHP_INT_MIN / -1,\n                // which cannot happen here as we've already handled a divisor of -1 above.\n                $q = intdiv($na, $nb);\n                $r = $na % $nb;\n\n                return [\n                    (string) $q,\n                    (string) $r\n                ];\n            }\n        }\n\n        [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b);\n\n        [$q, $r] = $this->doDiv($aDig, $bDig);\n\n        if ($aNeg !== $bNeg) {\n            $q = $this->neg($q);\n        }\n\n        if ($aNeg) {\n            $r = $this->neg($r);\n        }\n\n        return [$q, $r];\n    }\n\n    #[Override]\n    public function pow(string $a, int $e) : string\n    {\n        if ($e === 0) {\n            return '1';\n        }\n\n        if ($e === 1) {\n            return $a;\n        }\n\n        $odd = $e % 2;\n        $e -= $odd;\n\n        $aa = $this->mul($a, $a);\n\n        /** @psalm-suppress PossiblyInvalidArgument We're sure that $e / 2 is an int now */\n        $result = $this->pow($aa, $e / 2);\n\n        if ($odd === 1) {\n            $result = $this->mul($result, $a);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Algorithm from: https://www.geeksforgeeks.org/modular-exponentiation-power-in-modular-arithmetic/\n     */\n    #[Override]\n    public function modPow(string $base, string $exp, string $mod) : string\n    {\n        // special case: the algorithm below fails with 0 power 0 mod 1 (returns 1 instead of 0)\n        if ($base === '0' && $exp === '0' && $mod === '1') {\n            return '0';\n        }\n\n        // special case: the algorithm below fails with power 0 mod 1 (returns 1 instead of 0)\n        if ($exp === '0' && $mod === '1') {\n            return '0';\n        }\n\n        $x = $base;\n\n        $res = '1';\n\n        // numbers are positive, so we can use remainder instead of modulo\n        $x = $this->divR($x, $mod);\n\n        while ($exp !== '0') {\n            if (in_array($exp[-1], ['1', '3', '5', '7', '9'])) { // odd\n                $res = $this->divR($this->mul($res, $x), $mod);\n            }\n\n            $exp = $this->divQ($exp, '2');\n            $x = $this->divR($this->mul($x, $x), $mod);\n        }\n\n        return $res;\n    }\n\n    /**\n     * Adapted from https://cp-algorithms.com/num_methods/roots_newton.html\n     */\n    #[Override]\n    public function sqrt(string $n) : string\n    {\n        if ($n === '0') {\n            return '0';\n        }\n\n        // initial approximation\n        $x = \\str_repeat('9', \\intdiv(\\strlen($n), 2) ?: 1);\n\n        $decreased = false;\n\n        for (;;) {\n            $nx = $this->divQ($this->add($x, $this->divQ($n, $x)), '2');\n\n            if ($x === $nx || $this->cmp($nx, $x) > 0 && $decreased) {\n                break;\n            }\n\n            $decreased = $this->cmp($nx, $x) < 0;\n            $x = $nx;\n        }\n\n        return $x;\n    }\n\n    /**\n     * Performs the addition of two non-signed large integers.\n     */\n    private function doAdd(string $a, string $b) : string\n    {\n        [$a, $b, $length] = $this->pad($a, $b);\n\n        $carry = 0;\n        $result = '';\n\n        for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) {\n            $blockLength = $this->maxDigits;\n\n            if ($i < 0) {\n                $blockLength += $i;\n                /** @psalm-suppress LoopInvalidation */\n                $i = 0;\n            }\n\n            /** @psalm-var numeric-string $blockA */\n            $blockA = \\substr($a, $i, $blockLength);\n\n            /** @psalm-var numeric-string $blockB */\n            $blockB = \\substr($b, $i, $blockLength);\n\n            $sum = (string) ($blockA + $blockB + $carry);\n            $sumLength = \\strlen($sum);\n\n            if ($sumLength > $blockLength) {\n                $sum = \\substr($sum, 1);\n                $carry = 1;\n            } else {\n                if ($sumLength < $blockLength) {\n                    $sum = \\str_repeat('0', $blockLength - $sumLength) . $sum;\n                }\n                $carry = 0;\n            }\n\n            $result = $sum . $result;\n\n            if ($i === 0) {\n                break;\n            }\n        }\n\n        if ($carry === 1) {\n            $result = '1' . $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * Performs the subtraction of two non-signed large integers.\n     */\n    private function doSub(string $a, string $b) : string\n    {\n        if ($a === $b) {\n            return '0';\n        }\n\n        // Ensure that we always subtract to a positive result: biggest minus smallest.\n        $cmp = $this->doCmp($a, $b);\n\n        $invert = ($cmp === -1);\n\n        if ($invert) {\n            $c = $a;\n            $a = $b;\n            $b = $c;\n        }\n\n        [$a, $b, $length] = $this->pad($a, $b);\n\n        $carry = 0;\n        $result = '';\n\n        $complement = 10 ** $this->maxDigits;\n\n        for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) {\n            $blockLength = $this->maxDigits;\n\n            if ($i < 0) {\n                $blockLength += $i;\n                /** @psalm-suppress LoopInvalidation */\n                $i = 0;\n            }\n\n            /** @psalm-var numeric-string $blockA */\n            $blockA = \\substr($a, $i, $blockLength);\n\n            /** @psalm-var numeric-string $blockB */\n            $blockB = \\substr($b, $i, $blockLength);\n\n            $sum = $blockA - $blockB - $carry;\n\n            if ($sum < 0) {\n                $sum += $complement;\n                $carry = 1;\n            } else {\n                $carry = 0;\n            }\n\n            $sum = (string) $sum;\n            $sumLength = \\strlen($sum);\n\n            if ($sumLength < $blockLength) {\n                $sum = \\str_repeat('0', $blockLength - $sumLength) . $sum;\n            }\n\n            $result = $sum . $result;\n\n            if ($i === 0) {\n                break;\n            }\n        }\n\n        // Carry cannot be 1 when the loop ends, as a > b\n        assert($carry === 0);\n\n        $result = \\ltrim($result, '0');\n\n        if ($invert) {\n            $result = $this->neg($result);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Performs the multiplication of two non-signed large integers.\n     */\n    private function doMul(string $a, string $b) : string\n    {\n        $x = \\strlen($a);\n        $y = \\strlen($b);\n\n        $maxDigits = \\intdiv($this->maxDigits, 2);\n        $complement = 10 ** $maxDigits;\n\n        $result = '0';\n\n        for ($i = $x - $maxDigits;; $i -= $maxDigits) {\n            $blockALength = $maxDigits;\n\n            if ($i < 0) {\n                $blockALength += $i;\n                /** @psalm-suppress LoopInvalidation */\n                $i = 0;\n            }\n\n            $blockA = (int) \\substr($a, $i, $blockALength);\n\n            $line = '';\n            $carry = 0;\n\n            for ($j = $y - $maxDigits;; $j -= $maxDigits) {\n                $blockBLength = $maxDigits;\n\n                if ($j < 0) {\n                    $blockBLength += $j;\n                    /** @psalm-suppress LoopInvalidation */\n                    $j = 0;\n                }\n\n                $blockB = (int) \\substr($b, $j, $blockBLength);\n\n                $mul = $blockA * $blockB + $carry;\n                $value = $mul % $complement;\n                $carry = ($mul - $value) / $complement;\n\n                $value = (string) $value;\n                $value = \\str_pad($value, $maxDigits, '0', STR_PAD_LEFT);\n\n                $line = $value . $line;\n\n                if ($j === 0) {\n                    break;\n                }\n            }\n\n            if ($carry !== 0) {\n                $line = $carry . $line;\n            }\n\n            $line = \\ltrim($line, '0');\n\n            if ($line !== '') {\n                $line .= \\str_repeat('0', $x - $blockALength - $i);\n                $result = $this->add($result, $line);\n            }\n\n            if ($i === 0) {\n                break;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Performs the division of two non-signed large integers.\n     *\n     * @return string[] The quotient and remainder.\n     */\n    private function doDiv(string $a, string $b) : array\n    {\n        $cmp = $this->doCmp($a, $b);\n\n        if ($cmp === -1) {\n            return ['0', $a];\n        }\n\n        $x = \\strlen($a);\n        $y = \\strlen($b);\n\n        // we now know that a >= b && x >= y\n\n        $q = '0'; // quotient\n        $r = $a; // remainder\n        $z = $y; // focus length, always $y or $y+1\n\n        /** @psalm-var numeric-string $b */\n        $nb = $b * 1; // cast to number\n        // performance optimization in cases where the remainder will never cause int overflow\n        if (is_int(($nb - 1) * 10 + 9)) {\n            $r = (int) \\substr($a, 0, $z - 1);\n\n            for ($i = $z - 1; $i < $x; $i++) {\n                $n = $r * 10 + (int) $a[$i];\n                /** @psalm-var int $nb */\n                $q .= \\intdiv($n, $nb);\n                $r = $n % $nb;\n            }\n\n            return [\\ltrim($q, '0') ?: '0', (string) $r];\n        }\n\n        for (;;) {\n            $focus = \\substr($a, 0, $z);\n\n            $cmp = $this->doCmp($focus, $b);\n\n            if ($cmp === -1) {\n                if ($z === $x) { // remainder < dividend\n                    break;\n                }\n\n                $z++;\n            }\n\n            $zeros = \\str_repeat('0', $x - $z);\n\n            $q = $this->add($q, '1' . $zeros);\n            $a = $this->sub($a, $b . $zeros);\n\n            $r = $a;\n\n            if ($r === '0') { // remainder == 0\n                break;\n            }\n\n            $x = \\strlen($a);\n\n            if ($x < $y) { // remainder < dividend\n                break;\n            }\n\n            $z = $y;\n        }\n\n        return [$q, $r];\n    }\n\n    /**\n     * Compares two non-signed large numbers.\n     *\n     * @psalm-return -1|0|1\n     */\n    private function doCmp(string $a, string $b) : int\n    {\n        $x = \\strlen($a);\n        $y = \\strlen($b);\n\n        $cmp = $x <=> $y;\n\n        if ($cmp !== 0) {\n            return $cmp;\n        }\n\n        return \\strcmp($a, $b) <=> 0; // enforce -1|0|1\n    }\n\n    /**\n     * Pads the left of one of the given numbers with zeros if necessary to make both numbers the same length.\n     *\n     * The numbers must only consist of digits, without leading minus sign.\n     *\n     * @return array{string, string, int}\n     */\n    private function pad(string $a, string $b) : array\n    {\n        $x = \\strlen($a);\n        $y = \\strlen($b);\n\n        if ($x > $y) {\n            $b = \\str_repeat('0', $x - $y) . $b;\n\n            return [$a, $b, $x];\n        }\n\n        if ($x < $y) {\n            $a = \\str_repeat('0', $y - $x) . $a;\n\n            return [$a, $b, $y];\n        }\n\n        return [$a, $b, $x];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/Internal/Calculator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math\\Internal;\n\nuse Brick\\Math\\Exception\\RoundingNecessaryException;\nuse Brick\\Math\\RoundingMode;\n\n/**\n * Performs basic operations on arbitrary size integers.\n *\n * Unless otherwise specified, all parameters must be validated as non-empty strings of digits,\n * without leading zero, and with an optional leading minus sign if the number is not zero.\n *\n * Any other parameter format will lead to undefined behaviour.\n * All methods must return strings respecting this format, unless specified otherwise.\n *\n * @internal\n *\n * @psalm-immutable\n */\nabstract class Calculator\n{\n    /**\n     * The maximum exponent value allowed for the pow() method.\n     */\n    public const MAX_POWER = 1_000_000;\n\n    /**\n     * The alphabet for converting from and to base 2 to 36, lowercase.\n     */\n    public const ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\n\n    /**\n     * The Calculator instance in use.\n     */\n    private static ?Calculator $instance = null;\n\n    /**\n     * Sets the Calculator instance to use.\n     *\n     * An instance is typically set only in unit tests: the autodetect is usually the best option.\n     *\n     * @param Calculator|null $calculator The calculator instance, or NULL to revert to autodetect.\n     */\n    final public static function set(?Calculator $calculator) : void\n    {\n        self::$instance = $calculator;\n    }\n\n    /**\n     * Returns the Calculator instance to use.\n     *\n     * If none has been explicitly set, the fastest available implementation will be returned.\n     *\n     * @psalm-pure\n     * @psalm-suppress ImpureStaticProperty\n     */\n    final public static function get() : Calculator\n    {\n        if (self::$instance === null) {\n            /** @psalm-suppress ImpureMethodCall */\n            self::$instance = self::detect();\n        }\n\n        return self::$instance;\n    }\n\n    /**\n     * Returns the fastest available Calculator implementation.\n     *\n     * @codeCoverageIgnore\n     */\n    private static function detect() : Calculator\n    {\n        if (\\extension_loaded('gmp')) {\n            return new Calculator\\GmpCalculator();\n        }\n\n        if (\\extension_loaded('bcmath')) {\n            return new Calculator\\BcMathCalculator();\n        }\n\n        return new Calculator\\NativeCalculator();\n    }\n\n    /**\n     * Extracts the sign & digits of the operands.\n     *\n     * @return array{bool, bool, string, string} Whether $a and $b are negative, followed by their digits.\n     */\n    final protected function init(string $a, string $b) : array\n    {\n        return [\n            $aNeg = ($a[0] === '-'),\n            $bNeg = ($b[0] === '-'),\n\n            $aNeg ? \\substr($a, 1) : $a,\n            $bNeg ? \\substr($b, 1) : $b,\n        ];\n    }\n\n    /**\n     * Returns the absolute value of a number.\n     */\n    final public function abs(string $n) : string\n    {\n        return ($n[0] === '-') ? \\substr($n, 1) : $n;\n    }\n\n    /**\n     * Negates a number.\n     */\n    final public function neg(string $n) : string\n    {\n        if ($n === '0') {\n            return '0';\n        }\n\n        if ($n[0] === '-') {\n            return \\substr($n, 1);\n        }\n\n        return '-' . $n;\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * @psalm-return -1|0|1\n     *\n     * @return int -1 if the first number is less than, 0 if equal to, 1 if greater than the second number.\n     */\n    final public function cmp(string $a, string $b) : int\n    {\n        [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b);\n\n        if ($aNeg && ! $bNeg) {\n            return -1;\n        }\n\n        if ($bNeg && ! $aNeg) {\n            return 1;\n        }\n\n        $aLen = \\strlen($aDig);\n        $bLen = \\strlen($bDig);\n\n        if ($aLen < $bLen) {\n            $result = -1;\n        } elseif ($aLen > $bLen) {\n            $result = 1;\n        } else {\n            $result = $aDig <=> $bDig;\n        }\n\n        return $aNeg ? -$result : $result;\n    }\n\n    /**\n     * Adds two numbers.\n     */\n    abstract public function add(string $a, string $b) : string;\n\n    /**\n     * Subtracts two numbers.\n     */\n    abstract public function sub(string $a, string $b) : string;\n\n    /**\n     * Multiplies two numbers.\n     */\n    abstract public function mul(string $a, string $b) : string;\n\n    /**\n     * Returns the quotient of the division of two numbers.\n     *\n     * @param string $a The dividend.\n     * @param string $b The divisor, must not be zero.\n     *\n     * @return string The quotient.\n     */\n    abstract public function divQ(string $a, string $b) : string;\n\n    /**\n     * Returns the remainder of the division of two numbers.\n     *\n     * @param string $a The dividend.\n     * @param string $b The divisor, must not be zero.\n     *\n     * @return string The remainder.\n     */\n    abstract public function divR(string $a, string $b) : string;\n\n    /**\n     * Returns the quotient and remainder of the division of two numbers.\n     *\n     * @param string $a The dividend.\n     * @param string $b The divisor, must not be zero.\n     *\n     * @return array{string, string} An array containing the quotient and remainder.\n     */\n    abstract public function divQR(string $a, string $b) : array;\n\n    /**\n     * Exponentiates a number.\n     *\n     * @param string $a The base number.\n     * @param int    $e The exponent, validated as an integer between 0 and MAX_POWER.\n     *\n     * @return string The power.\n     */\n    abstract public function pow(string $a, int $e) : string;\n\n    /**\n     * @param string $b The modulus; must not be zero.\n     */\n    public function mod(string $a, string $b) : string\n    {\n        return $this->divR($this->add($this->divR($a, $b), $b), $b);\n    }\n\n    /**\n     * Returns the modular multiplicative inverse of $x modulo $m.\n     *\n     * If $x has no multiplicative inverse mod m, this method must return null.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library has built-in support.\n     *\n     * @param string $m The modulus; must not be negative or zero.\n     */\n    public function modInverse(string $x, string $m) : ?string\n    {\n        if ($m === '1') {\n            return '0';\n        }\n\n        $modVal = $x;\n\n        if ($x[0] === '-' || ($this->cmp($this->abs($x), $m) >= 0)) {\n            $modVal = $this->mod($x, $m);\n        }\n\n        [$g, $x] = $this->gcdExtended($modVal, $m);\n\n        if ($g !== '1') {\n            return null;\n        }\n\n        return $this->mod($this->add($this->mod($x, $m), $m), $m);\n    }\n\n    /**\n     * Raises a number into power with modulo.\n     *\n     * @param string $base The base number; must be positive or zero.\n     * @param string $exp  The exponent; must be positive or zero.\n     * @param string $mod  The modulus; must be strictly positive.\n     */\n    abstract public function modPow(string $base, string $exp, string $mod) : string;\n\n    /**\n     * Returns the greatest common divisor of the two numbers.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library\n     * has built-in support for GCD calculations.\n     *\n     * @return string The GCD, always positive, or zero if both arguments are zero.\n     */\n    public function gcd(string $a, string $b) : string\n    {\n        if ($a === '0') {\n            return $this->abs($b);\n        }\n\n        if ($b === '0') {\n            return $this->abs($a);\n        }\n\n        return $this->gcd($b, $this->divR($a, $b));\n    }\n\n    /**\n     * @return array{string, string, string} GCD, X, Y\n     */\n    private function gcdExtended(string $a, string $b) : array\n    {\n        if ($a === '0') {\n            return [$b, '0', '1'];\n        }\n\n        [$gcd, $x1, $y1] = $this->gcdExtended($this->mod($b, $a), $a);\n\n        $x = $this->sub($y1, $this->mul($this->divQ($b, $a), $x1));\n        $y = $x1;\n\n        return [$gcd, $x, $y];\n    }\n\n    /**\n     * Returns the square root of the given number, rounded down.\n     *\n     * The result is the largest x such that x² ≤ n.\n     * The input MUST NOT be negative.\n     */\n    abstract public function sqrt(string $n) : string;\n\n    /**\n     * Converts a number from an arbitrary base.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library\n     * has built-in support for base conversion.\n     *\n     * @param string $number The number, positive or zero, non-empty, case-insensitively validated for the given base.\n     * @param int    $base   The base of the number, validated from 2 to 36.\n     *\n     * @return string The converted number, following the Calculator conventions.\n     */\n    public function fromBase(string $number, int $base) : string\n    {\n        return $this->fromArbitraryBase(\\strtolower($number), self::ALPHABET, $base);\n    }\n\n    /**\n     * Converts a number to an arbitrary base.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library\n     * has built-in support for base conversion.\n     *\n     * @param string $number The number to convert, following the Calculator conventions.\n     * @param int    $base   The base to convert to, validated from 2 to 36.\n     *\n     * @return string The converted number, lowercase.\n     */\n    public function toBase(string $number, int $base) : string\n    {\n        $negative = ($number[0] === '-');\n\n        if ($negative) {\n            $number = \\substr($number, 1);\n        }\n\n        $number = $this->toArbitraryBase($number, self::ALPHABET, $base);\n\n        if ($negative) {\n            return '-' . $number;\n        }\n\n        return $number;\n    }\n\n    /**\n     * Converts a non-negative number in an arbitrary base using a custom alphabet, to base 10.\n     *\n     * @param string $number   The number to convert, validated as a non-empty string,\n     *                         containing only chars in the given alphabet/base.\n     * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum.\n     * @param int    $base     The base of the number, validated from 2 to alphabet length.\n     *\n     * @return string The number in base 10, following the Calculator conventions.\n     */\n    final public function fromArbitraryBase(string $number, string $alphabet, int $base) : string\n    {\n        // remove leading \"zeros\"\n        $number = \\ltrim($number, $alphabet[0]);\n\n        if ($number === '') {\n            return '0';\n        }\n\n        // optimize for \"one\"\n        if ($number === $alphabet[1]) {\n            return '1';\n        }\n\n        $result = '0';\n        $power = '1';\n\n        $base = (string) $base;\n\n        for ($i = \\strlen($number) - 1; $i >= 0; $i--) {\n            $index = \\strpos($alphabet, $number[$i]);\n\n            if ($index !== 0) {\n                $result = $this->add($result, ($index === 1)\n                    ? $power\n                    : $this->mul($power, (string) $index)\n                );\n            }\n\n            if ($i !== 0) {\n                $power = $this->mul($power, $base);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Converts a non-negative number to an arbitrary base using a custom alphabet.\n     *\n     * @param string $number   The number to convert, positive or zero, following the Calculator conventions.\n     * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum.\n     * @param int    $base     The base to convert to, validated from 2 to alphabet length.\n     *\n     * @return string The converted number in the given alphabet.\n     */\n    final public function toArbitraryBase(string $number, string $alphabet, int $base) : string\n    {\n        if ($number === '0') {\n            return $alphabet[0];\n        }\n\n        $base = (string) $base;\n        $result = '';\n\n        while ($number !== '0') {\n            [$number, $remainder] = $this->divQR($number, $base);\n            $remainder = (int) $remainder;\n\n            $result .= $alphabet[$remainder];\n        }\n\n        return \\strrev($result);\n    }\n\n    /**\n     * Performs a rounded division.\n     *\n     * Rounding is performed when the remainder of the division is not zero.\n     *\n     * @param string       $a            The dividend.\n     * @param string       $b            The divisor, must not be zero.\n     * @param RoundingMode $roundingMode The rounding mode.\n     *\n     * @throws \\InvalidArgumentException  If the rounding mode is invalid.\n     * @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is provided but rounding is necessary.\n     *\n     * @psalm-suppress ImpureFunctionCall\n     */\n    final public function divRound(string $a, string $b, RoundingMode $roundingMode) : string\n    {\n        [$quotient, $remainder] = $this->divQR($a, $b);\n\n        $hasDiscardedFraction = ($remainder !== '0');\n        $isPositiveOrZero = ($a[0] === '-') === ($b[0] === '-');\n\n        $discardedFractionSign = function() use ($remainder, $b) : int {\n            $r = $this->abs($this->mul($remainder, '2'));\n            $b = $this->abs($b);\n\n            return $this->cmp($r, $b);\n        };\n\n        $increment = false;\n\n        switch ($roundingMode) {\n            case RoundingMode::UNNECESSARY:\n                if ($hasDiscardedFraction) {\n                    throw RoundingNecessaryException::roundingNecessary();\n                }\n                break;\n\n            case RoundingMode::UP:\n                $increment = $hasDiscardedFraction;\n                break;\n\n            case RoundingMode::DOWN:\n                break;\n\n            case RoundingMode::CEILING:\n                $increment = $hasDiscardedFraction && $isPositiveOrZero;\n                break;\n\n            case RoundingMode::FLOOR:\n                $increment = $hasDiscardedFraction && ! $isPositiveOrZero;\n                break;\n\n            case RoundingMode::HALF_UP:\n                $increment = $discardedFractionSign() >= 0;\n                break;\n\n            case RoundingMode::HALF_DOWN:\n                $increment = $discardedFractionSign() > 0;\n                break;\n\n            case RoundingMode::HALF_CEILING:\n                $increment = $isPositiveOrZero ? $discardedFractionSign() >= 0 : $discardedFractionSign() > 0;\n                break;\n\n            case RoundingMode::HALF_FLOOR:\n                $increment = $isPositiveOrZero ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0;\n                break;\n\n            case RoundingMode::HALF_EVEN:\n                $lastDigit = (int) $quotient[-1];\n                $lastDigitIsEven = ($lastDigit % 2 === 0);\n                $increment = $lastDigitIsEven ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0;\n                break;\n\n            default:\n                throw new \\InvalidArgumentException('Invalid rounding mode.');\n        }\n\n        if ($increment) {\n            return $this->add($quotient, $isPositiveOrZero ? '1' : '-1');\n        }\n\n        return $quotient;\n    }\n\n    /**\n     * Calculates bitwise AND of two numbers.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library\n     * has built-in support for bitwise operations.\n     */\n    public function and(string $a, string $b) : string\n    {\n        return $this->bitwise('and', $a, $b);\n    }\n\n    /**\n     * Calculates bitwise OR of two numbers.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library\n     * has built-in support for bitwise operations.\n     */\n    public function or(string $a, string $b) : string\n    {\n        return $this->bitwise('or', $a, $b);\n    }\n\n    /**\n     * Calculates bitwise XOR of two numbers.\n     *\n     * This method can be overridden by the concrete implementation if the underlying library\n     * has built-in support for bitwise operations.\n     */\n    public function xor(string $a, string $b) : string\n    {\n        return $this->bitwise('xor', $a, $b);\n    }\n\n    /**\n     * Performs a bitwise operation on a decimal number.\n     *\n     * @param 'and'|'or'|'xor' $operator The operator to use.\n     * @param string           $a        The left operand.\n     * @param string           $b        The right operand.\n     */\n    private function bitwise(string $operator, string $a, string $b) : string\n    {\n        [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b);\n\n        $aBin = $this->toBinary($aDig);\n        $bBin = $this->toBinary($bDig);\n\n        $aLen = \\strlen($aBin);\n        $bLen = \\strlen($bBin);\n\n        if ($aLen > $bLen) {\n            $bBin = \\str_repeat(\"\\x00\", $aLen - $bLen) . $bBin;\n        } elseif ($bLen > $aLen) {\n            $aBin = \\str_repeat(\"\\x00\", $bLen - $aLen) . $aBin;\n        }\n\n        if ($aNeg) {\n            $aBin = $this->twosComplement($aBin);\n        }\n        if ($bNeg) {\n            $bBin = $this->twosComplement($bBin);\n        }\n\n        $value = match ($operator) {\n            'and' => $aBin & $bBin,\n            'or' => $aBin | $bBin,\n            'xor' => $aBin ^ $bBin,\n        };\n\n        $negative = match ($operator) {\n            'and' => $aNeg and $bNeg,\n            'or' => $aNeg or $bNeg,\n            'xor' => $aNeg xor $bNeg,\n        };\n\n        if ($negative) {\n            $value = $this->twosComplement($value);\n        }\n\n        $result = $this->toDecimal($value);\n\n        return $negative ? $this->neg($result) : $result;\n    }\n\n    /**\n     * @param string $number A positive, binary number.\n     */\n    private function twosComplement(string $number) : string\n    {\n        $xor = \\str_repeat(\"\\xff\", \\strlen($number));\n\n        $number ^= $xor;\n\n        for ($i = \\strlen($number) - 1; $i >= 0; $i--) {\n            $byte = \\ord($number[$i]);\n\n            if (++$byte !== 256) {\n                $number[$i] = \\chr($byte);\n                break;\n            }\n\n            $number[$i] = \"\\x00\";\n\n            if ($i === 0) {\n                $number = \"\\x01\" . $number;\n            }\n        }\n\n        return $number;\n    }\n\n    /**\n     * Converts a decimal number to a binary string.\n     *\n     * @param string $number The number to convert, positive or zero, only digits.\n     */\n    private function toBinary(string $number) : string\n    {\n        $result = '';\n\n        while ($number !== '0') {\n            [$number, $remainder] = $this->divQR($number, '256');\n            $result .= \\chr((int) $remainder);\n        }\n\n        return \\strrev($result);\n    }\n\n    /**\n     * Returns the positive decimal representation of a binary number.\n     *\n     * @param string $bytes The bytes representing the number.\n     */\n    private function toDecimal(string $bytes) : string\n    {\n        $result = '0';\n        $power = '1';\n\n        for ($i = \\strlen($bytes) - 1; $i >= 0; $i--) {\n            $index = \\ord($bytes[$i]);\n\n            if ($index !== 0) {\n                $result = $this->add($result, ($index === 1)\n                    ? $power\n                    : $this->mul($power, (string) $index)\n                );\n            }\n\n            if ($i !== 0) {\n                $power = $this->mul($power, '256');\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/brick/math/src/RoundingMode.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Brick\\Math;\n\n/**\n * Specifies a rounding behavior for numerical operations capable of discarding precision.\n *\n * Each rounding mode indicates how the least significant returned digit of a rounded result\n * is to be calculated. If fewer digits are returned than the digits needed to represent the\n * exact numerical result, the discarded digits will be referred to as the discarded fraction\n * regardless the digits' contribution to the value of the number. In other words, considered\n * as a numerical value, the discarded fraction could have an absolute value greater than one.\n */\nenum RoundingMode\n{\n    /**\n     * Asserts that the requested operation has an exact result, hence no rounding is necessary.\n     *\n     * If this rounding mode is specified on an operation that yields a result that\n     * cannot be represented at the requested scale, a RoundingNecessaryException is thrown.\n     */\n    case UNNECESSARY;\n\n    /**\n     * Rounds away from zero.\n     *\n     * Always increments the digit prior to a nonzero discarded fraction.\n     * Note that this rounding mode never decreases the magnitude of the calculated value.\n     */\n    case UP;\n\n    /**\n     * Rounds towards zero.\n     *\n     * Never increments the digit prior to a discarded fraction (i.e., truncates).\n     * Note that this rounding mode never increases the magnitude of the calculated value.\n     */\n    case DOWN;\n\n    /**\n     * Rounds towards positive infinity.\n     *\n     * If the result is positive, behaves as for UP; if negative, behaves as for DOWN.\n     * Note that this rounding mode never decreases the calculated value.\n     */\n    case CEILING;\n\n    /**\n     * Rounds towards negative infinity.\n     *\n     * If the result is positive, behave as for DOWN; if negative, behave as for UP.\n     * Note that this rounding mode never increases the calculated value.\n     */\n    case FLOOR;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round up.\n     *\n     * Behaves as for UP if the discarded fraction is >= 0.5; otherwise, behaves as for DOWN.\n     * Note that this is the rounding mode commonly taught at school.\n     */\n    case HALF_UP;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round down.\n     *\n     * Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves as for DOWN.\n     */\n    case HALF_DOWN;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round towards positive infinity.\n     *\n     * If the result is positive, behaves as for HALF_UP; if negative, behaves as for HALF_DOWN.\n     */\n    case HALF_CEILING;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round towards negative infinity.\n     *\n     * If the result is positive, behaves as for HALF_DOWN; if negative, behaves as for HALF_UP.\n     */\n    case HALF_FLOOR;\n\n    /**\n     * Rounds towards the \"nearest neighbor\" unless both neighbors are equidistant, in which case rounds towards the even neighbor.\n     *\n     * Behaves as for HALF_UP if the digit to the left of the discarded fraction is odd;\n     * behaves as for HALF_DOWN if it's even.\n     *\n     * Note that this is the rounding mode that statistically minimizes\n     * cumulative error when applied repeatedly over a sequence of calculations.\n     * It is sometimes known as \"Banker's rounding\", and is chiefly used in the USA.\n     */\n    case HALF_EVEN;\n}\n"
  },
  {
    "path": "lib/Google/vendor/composer/ClassLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer\\Autoload;\n\n/**\n * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.\n *\n *     $loader = new \\Composer\\Autoload\\ClassLoader();\n *\n *     // register classes with namespaces\n *     $loader->add('Symfony\\Component', __DIR__.'/component');\n *     $loader->add('Symfony',           __DIR__.'/framework');\n *\n *     // activate the autoloader\n *     $loader->register();\n *\n *     // to enable searching the include path (eg. for PEAR packages)\n *     $loader->setUseIncludePath(true);\n *\n * In this example, if you try to use a class in the Symfony\\Component\n * namespace or one of its children (Symfony\\Component\\Console for instance),\n * the autoloader will first look for the class under the component/\n * directory, and it will then fallback to the framework/ directory if not\n * found before giving up.\n *\n * This class is loosely based on the Symfony UniversalClassLoader.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @see    https://www.php-fig.org/psr/psr-0/\n * @see    https://www.php-fig.org/psr/psr-4/\n */\nclass ClassLoader\n{\n    /** @var \\Closure(string):void */\n    private static $includeFile;\n\n    /** @var string|null */\n    private $vendorDir;\n\n    // PSR-4\n    /**\n     * @var array<string, array<string, int>>\n     */\n    private $prefixLengthsPsr4 = array();\n    /**\n     * @var array<string, list<string>>\n     */\n    private $prefixDirsPsr4 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr4 = array();\n\n    // PSR-0\n    /**\n     * List of PSR-0 prefixes\n     *\n     * Structured as array('F (first letter)' => array('Foo\\Bar (full prefix)' => array('path', 'path2')))\n     *\n     * @var array<string, array<string, list<string>>>\n     */\n    private $prefixesPsr0 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr0 = array();\n\n    /** @var bool */\n    private $useIncludePath = false;\n\n    /**\n     * @var array<string, string>\n     */\n    private $classMap = array();\n\n    /** @var bool */\n    private $classMapAuthoritative = false;\n\n    /**\n     * @var array<string, bool>\n     */\n    private $missingClasses = array();\n\n    /** @var string|null */\n    private $apcuPrefix;\n\n    /**\n     * @var array<string, self>\n     */\n    private static $registeredLoaders = array();\n\n    /**\n     * @param string|null $vendorDir\n     */\n    public function __construct($vendorDir = null)\n    {\n        $this->vendorDir = $vendorDir;\n        self::initializeIncludeClosure();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixes()\n    {\n        if (!empty($this->prefixesPsr0)) {\n            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));\n        }\n\n        return array();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixesPsr4()\n    {\n        return $this->prefixDirsPsr4;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirs()\n    {\n        return $this->fallbackDirsPsr0;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirsPsr4()\n    {\n        return $this->fallbackDirsPsr4;\n    }\n\n    /**\n     * @return array<string, string> Array of classname => path\n     */\n    public function getClassMap()\n    {\n        return $this->classMap;\n    }\n\n    /**\n     * @param array<string, string> $classMap Class to filename map\n     *\n     * @return void\n     */\n    public function addClassMap(array $classMap)\n    {\n        if ($this->classMap) {\n            $this->classMap = array_merge($this->classMap, $classMap);\n        } else {\n            $this->classMap = $classMap;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix, either\n     * appending or prepending to the ones previously set for this prefix.\n     *\n     * @param string              $prefix  The prefix\n     * @param list<string>|string $paths   The PSR-0 root directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @return void\n     */\n    public function add($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            if ($prepend) {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr0\n                );\n            } else {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $this->fallbackDirsPsr0,\n                    $paths\n                );\n            }\n\n            return;\n        }\n\n        $first = $prefix[0];\n        if (!isset($this->prefixesPsr0[$first][$prefix])) {\n            $this->prefixesPsr0[$first][$prefix] = $paths;\n\n            return;\n        }\n        if ($prepend) {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $paths,\n                $this->prefixesPsr0[$first][$prefix]\n            );\n        } else {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $this->prefixesPsr0[$first][$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace, either\n     * appending or prepending to the ones previously set for this namespace.\n     *\n     * @param string              $prefix  The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths   The PSR-4 base directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function addPsr4($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            // Register directories for the root namespace.\n            if ($prepend) {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr4\n                );\n            } else {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $this->fallbackDirsPsr4,\n                    $paths\n                );\n            }\n        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {\n            // Register directories for a new namespace.\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = $paths;\n        } elseif ($prepend) {\n            // Prepend directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $paths,\n                $this->prefixDirsPsr4[$prefix]\n            );\n        } else {\n            // Append directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $this->prefixDirsPsr4[$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix,\n     * replacing any others previously set for this prefix.\n     *\n     * @param string              $prefix The prefix\n     * @param list<string>|string $paths  The PSR-0 base directories\n     *\n     * @return void\n     */\n    public function set($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr0 = (array) $paths;\n        } else {\n            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace,\n     * replacing any others previously set for this namespace.\n     *\n     * @param string              $prefix The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths  The PSR-4 base directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function setPsr4($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr4 = (array) $paths;\n        } else {\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Turns on searching the include path for class files.\n     *\n     * @param bool $useIncludePath\n     *\n     * @return void\n     */\n    public function setUseIncludePath($useIncludePath)\n    {\n        $this->useIncludePath = $useIncludePath;\n    }\n\n    /**\n     * Can be used to check if the autoloader uses the include path to check\n     * for classes.\n     *\n     * @return bool\n     */\n    public function getUseIncludePath()\n    {\n        return $this->useIncludePath;\n    }\n\n    /**\n     * Turns off searching the prefix and fallback directories for classes\n     * that have not been registered with the class map.\n     *\n     * @param bool $classMapAuthoritative\n     *\n     * @return void\n     */\n    public function setClassMapAuthoritative($classMapAuthoritative)\n    {\n        $this->classMapAuthoritative = $classMapAuthoritative;\n    }\n\n    /**\n     * Should class lookup fail if not found in the current class map?\n     *\n     * @return bool\n     */\n    public function isClassMapAuthoritative()\n    {\n        return $this->classMapAuthoritative;\n    }\n\n    /**\n     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.\n     *\n     * @param string|null $apcuPrefix\n     *\n     * @return void\n     */\n    public function setApcuPrefix($apcuPrefix)\n    {\n        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;\n    }\n\n    /**\n     * The APCu prefix in use, or null if APCu caching is not enabled.\n     *\n     * @return string|null\n     */\n    public function getApcuPrefix()\n    {\n        return $this->apcuPrefix;\n    }\n\n    /**\n     * Registers this instance as an autoloader.\n     *\n     * @param bool $prepend Whether to prepend the autoloader or not\n     *\n     * @return void\n     */\n    public function register($prepend = false)\n    {\n        spl_autoload_register(array($this, 'loadClass'), true, $prepend);\n\n        if (null === $this->vendorDir) {\n            return;\n        }\n\n        if ($prepend) {\n            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;\n        } else {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n            self::$registeredLoaders[$this->vendorDir] = $this;\n        }\n    }\n\n    /**\n     * Unregisters this instance as an autoloader.\n     *\n     * @return void\n     */\n    public function unregister()\n    {\n        spl_autoload_unregister(array($this, 'loadClass'));\n\n        if (null !== $this->vendorDir) {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n        }\n    }\n\n    /**\n     * Loads the given class or interface.\n     *\n     * @param  string    $class The name of the class\n     * @return true|null True if loaded, null otherwise\n     */\n    public function loadClass($class)\n    {\n        if ($file = $this->findFile($class)) {\n            $includeFile = self::$includeFile;\n            $includeFile($file);\n\n            return true;\n        }\n\n        return null;\n    }\n\n    /**\n     * Finds the path to the file where the class is defined.\n     *\n     * @param string $class The name of the class\n     *\n     * @return string|false The path if found, false otherwise\n     */\n    public function findFile($class)\n    {\n        // class map lookup\n        if (isset($this->classMap[$class])) {\n            return $this->classMap[$class];\n        }\n        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {\n            return false;\n        }\n        if (null !== $this->apcuPrefix) {\n            $file = apcu_fetch($this->apcuPrefix.$class, $hit);\n            if ($hit) {\n                return $file;\n            }\n        }\n\n        $file = $this->findFileWithExtension($class, '.php');\n\n        // Search for Hack files if we are running on HHVM\n        if (false === $file && defined('HHVM_VERSION')) {\n            $file = $this->findFileWithExtension($class, '.hh');\n        }\n\n        if (null !== $this->apcuPrefix) {\n            apcu_add($this->apcuPrefix.$class, $file);\n        }\n\n        if (false === $file) {\n            // Remember that this class does not exist.\n            $this->missingClasses[$class] = true;\n        }\n\n        return $file;\n    }\n\n    /**\n     * Returns the currently registered loaders keyed by their corresponding vendor directories.\n     *\n     * @return array<string, self>\n     */\n    public static function getRegisteredLoaders()\n    {\n        return self::$registeredLoaders;\n    }\n\n    /**\n     * @param  string       $class\n     * @param  string       $ext\n     * @return string|false\n     */\n    private function findFileWithExtension($class, $ext)\n    {\n        // PSR-4 lookup\n        $logicalPathPsr4 = strtr($class, '\\\\', DIRECTORY_SEPARATOR) . $ext;\n\n        $first = $class[0];\n        if (isset($this->prefixLengthsPsr4[$first])) {\n            $subPath = $class;\n            while (false !== $lastPos = strrpos($subPath, '\\\\')) {\n                $subPath = substr($subPath, 0, $lastPos);\n                $search = $subPath . '\\\\';\n                if (isset($this->prefixDirsPsr4[$search])) {\n                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);\n                    foreach ($this->prefixDirsPsr4[$search] as $dir) {\n                        if (file_exists($file = $dir . $pathEnd)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-4 fallback dirs\n        foreach ($this->fallbackDirsPsr4 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 lookup\n        if (false !== $pos = strrpos($class, '\\\\')) {\n            // namespaced class name\n            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)\n                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);\n        } else {\n            // PEAR-like class name\n            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;\n        }\n\n        if (isset($this->prefixesPsr0[$first])) {\n            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {\n                if (0 === strpos($class, $prefix)) {\n                    foreach ($dirs as $dir) {\n                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-0 fallback dirs\n        foreach ($this->fallbackDirsPsr0 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 include paths.\n        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {\n            return $file;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return void\n     */\n    private static function initializeIncludeClosure()\n    {\n        if (self::$includeFile !== null) {\n            return;\n        }\n\n        /**\n         * Scope isolated include.\n         *\n         * Prevents access to $this/self from included files.\n         *\n         * @param  string $file\n         * @return void\n         */\n        self::$includeFile = \\Closure::bind(static function($file) {\n            include $file;\n        }, null, null);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/composer/InstalledVersions.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer;\n\nuse Composer\\Autoload\\ClassLoader;\nuse Composer\\Semver\\VersionParser;\n\n/**\n * This class is copied in every Composer installed project and available to all\n *\n * See also https://getcomposer.org/doc/07-runtime.md#installed-versions\n *\n * To require its presence, you can require `composer-runtime-api ^2.0`\n *\n * @final\n */\nclass InstalledVersions\n{\n    /**\n     * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to\n     * @internal\n     */\n    private static $selfDir = null;\n\n    /**\n     * @var mixed[]|null\n     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null\n     */\n    private static $installed;\n\n    /**\n     * @var bool\n     */\n    private static $installedIsLocalDir;\n\n    /**\n     * @var bool|null\n     */\n    private static $canGetVendors;\n\n    /**\n     * @var array[]\n     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static $installedByVendor = array();\n\n    /**\n     * Returns a list of all package names which are present, either by being installed, replaced or provided\n     *\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackages()\n    {\n        $packages = array();\n        foreach (self::getInstalled() as $installed) {\n            $packages[] = array_keys($installed['versions']);\n        }\n\n        if (1 === \\count($packages)) {\n            return $packages[0];\n        }\n\n        return array_keys(array_flip(\\call_user_func_array('array_merge', $packages)));\n    }\n\n    /**\n     * Returns a list of all package names with a specific type e.g. 'library'\n     *\n     * @param  string   $type\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackagesByType($type)\n    {\n        $packagesByType = array();\n\n        foreach (self::getInstalled() as $installed) {\n            foreach ($installed['versions'] as $name => $package) {\n                if (isset($package['type']) && $package['type'] === $type) {\n                    $packagesByType[] = $name;\n                }\n            }\n        }\n\n        return $packagesByType;\n    }\n\n    /**\n     * Checks whether the given package is installed\n     *\n     * This also returns true if the package name is provided or replaced by another package\n     *\n     * @param  string $packageName\n     * @param  bool   $includeDevRequirements\n     * @return bool\n     */\n    public static function isInstalled($packageName, $includeDevRequirements = true)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (isset($installed['versions'][$packageName])) {\n                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Checks whether the given package satisfies a version constraint\n     *\n     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:\n     *\n     *   Composer\\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')\n     *\n     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality\n     * @param  string        $packageName\n     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package\n     * @return bool\n     */\n    public static function satisfies(VersionParser $parser, $packageName, $constraint)\n    {\n        $constraint = $parser->parseConstraints((string) $constraint);\n        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));\n\n        return $provided->matches($constraint);\n    }\n\n    /**\n     * Returns a version constraint representing all the range(s) which are installed for a given package\n     *\n     * It is easier to use this via isInstalled() with the $constraint argument if you need to check\n     * whether a given version of a package is installed, and not just whether it exists\n     *\n     * @param  string $packageName\n     * @return string Version constraint usable with composer/semver\n     */\n    public static function getVersionRanges($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            $ranges = array();\n            if (isset($installed['versions'][$packageName]['pretty_version'])) {\n                $ranges[] = $installed['versions'][$packageName]['pretty_version'];\n            }\n            if (array_key_exists('aliases', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);\n            }\n            if (array_key_exists('replaced', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);\n            }\n            if (array_key_exists('provided', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);\n            }\n\n            return implode(' || ', $ranges);\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getPrettyVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['pretty_version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['pretty_version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference\n     */\n    public static function getReference($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['reference'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['reference'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.\n     */\n    public static function getInstallPath($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @return array\n     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}\n     */\n    public static function getRootPackage()\n    {\n        $installed = self::getInstalled();\n\n        return $installed[0]['root'];\n    }\n\n    /**\n     * Returns the raw installed.php data for custom implementations\n     *\n     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.\n     * @return array[]\n     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}\n     */\n    public static function getRawData()\n    {\n        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                self::$installed = include __DIR__ . '/installed.php';\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        return self::$installed;\n    }\n\n    /**\n     * Returns the raw data of all installed.php which are currently loaded for custom implementations\n     *\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    public static function getAllRawData()\n    {\n        return self::getInstalled();\n    }\n\n    /**\n     * Lets you reload the static array from another file\n     *\n     * This is only useful for complex integrations in which a project needs to use\n     * this class but then also needs to execute another project's autoloader in process,\n     * and wants to ensure both projects have access to their version of installed.php.\n     *\n     * A typical case would be PHPUnit, where it would need to make sure it reads all\n     * the data it needs from this class, then call reload() with\n     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure\n     * the project in which it runs can then also use this class safely, without\n     * interference between PHPUnit's dependencies and the project's dependencies.\n     *\n     * @param  array[] $data A vendor/composer/installed.php data set\n     * @return void\n     *\n     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data\n     */\n    public static function reload($data)\n    {\n        self::$installed = $data;\n        self::$installedByVendor = array();\n\n        // when using reload, we disable the duplicate protection to ensure that self::$installed data is\n        // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,\n        // so we have to assume it does not, and that may result in duplicate data being returned when listing\n        // all installed packages for example\n        self::$installedIsLocalDir = false;\n    }\n\n    /**\n     * @return string\n     */\n    private static function getSelfDir()\n    {\n        if (self::$selfDir === null) {\n            self::$selfDir = strtr(__DIR__, '\\\\', '/');\n        }\n\n        return self::$selfDir;\n    }\n\n    /**\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static function getInstalled()\n    {\n        if (null === self::$canGetVendors) {\n            self::$canGetVendors = method_exists('Composer\\Autoload\\ClassLoader', 'getRegisteredLoaders');\n        }\n\n        $installed = array();\n        $copiedLocalDir = false;\n\n        if (self::$canGetVendors) {\n            $selfDir = self::getSelfDir();\n            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {\n                $vendorDir = strtr($vendorDir, '\\\\', '/');\n                if (isset(self::$installedByVendor[$vendorDir])) {\n                    $installed[] = self::$installedByVendor[$vendorDir];\n                } elseif (is_file($vendorDir.'/composer/installed.php')) {\n                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                    $required = require $vendorDir.'/composer/installed.php';\n                    self::$installedByVendor[$vendorDir] = $required;\n                    $installed[] = $required;\n                    if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {\n                        self::$installed = $required;\n                        self::$installedIsLocalDir = true;\n                    }\n                }\n                if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {\n                    $copiedLocalDir = true;\n                }\n            }\n        }\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                $required = require __DIR__ . '/installed.php';\n                self::$installed = $required;\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        if (self::$installed !== array() && !$copiedLocalDir) {\n            $installed[] = self::$installed;\n        }\n\n        return $installed;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/composer/LICENSE",
    "content": "\nCopyright (c) Nils Adermann, Jordi Boggiano\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "lib/Google/vendor/composer/autoload_classmap.php",
    "content": "<?php\n\n// autoload_classmap.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'Composer\\\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',\n    'GPBMetadata\\\\GrpcGcp' => $vendorDir . '/google/grpc-gcp/src/generated/GPBMetadata/GrpcGcp.php',\n    'Google_AccessToken_Revoke' => $baseDir . '/src/aliases.php',\n    'Google_AccessToken_Verify' => $baseDir . '/src/aliases.php',\n    'Google_AuthHandler_AuthHandlerFactory' => $baseDir . '/src/aliases.php',\n    'Google_AuthHandler_Guzzle6AuthHandler' => $baseDir . '/src/aliases.php',\n    'Google_AuthHandler_Guzzle7AuthHandler' => $baseDir . '/src/aliases.php',\n    'Google_Client' => $baseDir . '/src/aliases.php',\n    'Google_Collection' => $baseDir . '/src/aliases.php',\n    'Google_Exception' => $baseDir . '/src/aliases.php',\n    'Google_Http_Batch' => $baseDir . '/src/aliases.php',\n    'Google_Http_MediaFileUpload' => $baseDir . '/src/aliases.php',\n    'Google_Http_REST' => $baseDir . '/src/aliases.php',\n    'Google_Model' => $baseDir . '/src/aliases.php',\n    'Google_Service' => $baseDir . '/src/aliases.php',\n    'Google_Service_Exception' => $baseDir . '/src/aliases.php',\n    'Google_Service_Resource' => $baseDir . '/src/aliases.php',\n    'Google_Task_Composer' => $baseDir . '/src/aliases.php',\n    'Google_Task_Exception' => $baseDir . '/src/aliases.php',\n    'Google_Task_Retryable' => $baseDir . '/src/aliases.php',\n    'Google_Task_Runner' => $baseDir . '/src/aliases.php',\n    'Google_Utils_UriTemplate' => $baseDir . '/src/aliases.php',\n    'Grpc\\\\Gcp\\\\AffinityConfig' => $vendorDir . '/google/grpc-gcp/src/generated/Grpc/Gcp/AffinityConfig.php',\n    'Grpc\\\\Gcp\\\\AffinityConfig_Command' => $vendorDir . '/google/grpc-gcp/src/generated/Grpc/Gcp/AffinityConfig_Command.php',\n    'Grpc\\\\Gcp\\\\ApiConfig' => $vendorDir . '/google/grpc-gcp/src/generated/Grpc/Gcp/ApiConfig.php',\n    'Grpc\\\\Gcp\\\\ChannelPoolConfig' => $vendorDir . '/google/grpc-gcp/src/generated/Grpc/Gcp/ChannelPoolConfig.php',\n    'Grpc\\\\Gcp\\\\MethodConfig' => $vendorDir . '/google/grpc-gcp/src/generated/Grpc/Gcp/MethodConfig.php',\n);\n"
  },
  {
    "path": "lib/Google/vendor/composer/autoload_files.php",
    "content": "<?php\n\n// autoload_files.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',\n    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',\n    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',\n    'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php',\n    '1f87db08236948d07391152dccb70f04' => $vendorDir . '/google/apiclient-services/autoload.php',\n    'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',\n    'a8d3953fd9959404dd22d3dfcd0a79f0' => $baseDir . '/src/aliases.php',\n);\n"
  },
  {
    "path": "lib/Google/vendor/composer/autoload_namespaces.php",
    "content": "<?php\n\n// autoload_namespaces.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n);\n"
  },
  {
    "path": "lib/Google/vendor/composer/autoload_psr4.php",
    "content": "<?php\n\n// autoload_psr4.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'phpseclib3\\\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),\n    'Rize\\\\' => array($vendorDir . '/rize/uri-template/src/Rize'),\n    'Ramsey\\\\Uuid\\\\' => array($vendorDir . '/ramsey/uuid/src'),\n    'Ramsey\\\\Collection\\\\' => array($vendorDir . '/ramsey/collection/src'),\n    'Psr\\\\Log\\\\' => array($vendorDir . '/psr/log/src'),\n    'Psr\\\\Http\\\\Message\\\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),\n    'Psr\\\\Http\\\\Client\\\\' => array($vendorDir . '/psr/http-client/src'),\n    'Psr\\\\Cache\\\\' => array($vendorDir . '/psr/cache/src'),\n    'ParagonIE\\\\ConstantTime\\\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),\n    'Monolog\\\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),\n    'GuzzleHttp\\\\Psr7\\\\' => array($vendorDir . '/guzzlehttp/psr7/src'),\n    'GuzzleHttp\\\\Promise\\\\' => array($vendorDir . '/guzzlehttp/promises/src'),\n    'GuzzleHttp\\\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),\n    'Grpc\\\\Gcp\\\\' => array($vendorDir . '/google/grpc-gcp/src'),\n    'Grpc\\\\' => array($vendorDir . '/grpc/grpc/src/lib'),\n    'Google\\\\Type\\\\' => array($vendorDir . '/google/common-protos/src/Type'),\n    'Google\\\\Service\\\\' => array($vendorDir . '/google/apiclient-services/src'),\n    'Google\\\\Rpc\\\\' => array($vendorDir . '/google/common-protos/src/Rpc'),\n    'Google\\\\Protobuf\\\\' => array($vendorDir . '/google/protobuf/src/Google/Protobuf'),\n    'Google\\\\LongRunning\\\\' => array($vendorDir . '/google/longrunning/src/LongRunning'),\n    'Google\\\\Iam\\\\' => array($vendorDir . '/google/common-protos/src/Iam'),\n    'Google\\\\Cloud\\\\Storage\\\\' => array($vendorDir . '/google/cloud-storage/src'),\n    'Google\\\\Cloud\\\\Core\\\\' => array($vendorDir . '/google/cloud-core/src'),\n    'Google\\\\Cloud\\\\' => array($vendorDir . '/google/common-protos/src/Cloud'),\n    'Google\\\\Auth\\\\' => array($vendorDir . '/google/auth/src'),\n    'Google\\\\Api\\\\' => array($vendorDir . '/google/common-protos/src/Api'),\n    'Google\\\\ApiCore\\\\LongRunning\\\\' => array($vendorDir . '/google/longrunning/src/ApiCore/LongRunning'),\n    'Google\\\\ApiCore\\\\' => array($vendorDir . '/google/gax/src'),\n    'Google\\\\' => array($baseDir . '/src'),\n    'GPBMetadata\\\\Google\\\\Type\\\\' => array($vendorDir . '/google/common-protos/metadata/Type'),\n    'GPBMetadata\\\\Google\\\\Rpc\\\\' => array($vendorDir . '/google/common-protos/metadata/Rpc'),\n    'GPBMetadata\\\\Google\\\\Protobuf\\\\' => array($vendorDir . '/google/protobuf/src/GPBMetadata/Google/Protobuf'),\n    'GPBMetadata\\\\Google\\\\Longrunning\\\\' => array($vendorDir . '/google/longrunning/metadata/Longrunning'),\n    'GPBMetadata\\\\Google\\\\Logging\\\\' => array($vendorDir . '/google/common-protos/metadata/Logging'),\n    'GPBMetadata\\\\Google\\\\Iam\\\\' => array($vendorDir . '/google/common-protos/metadata/Iam'),\n    'GPBMetadata\\\\Google\\\\Cloud\\\\' => array($vendorDir . '/google/common-protos/metadata/Cloud'),\n    'GPBMetadata\\\\Google\\\\Api\\\\' => array($vendorDir . '/google/common-protos/metadata/Api'),\n    'GPBMetadata\\\\ApiCore\\\\' => array($vendorDir . '/google/gax/metadata/ApiCore'),\n    'Firebase\\\\JWT\\\\' => array($vendorDir . '/firebase/php-jwt/src'),\n    'Brick\\\\Math\\\\' => array($vendorDir . '/brick/math/src'),\n);\n"
  },
  {
    "path": "lib/Google/vendor/composer/autoload_real.php",
    "content": "<?php\n\n// autoload_real.php @generated by Composer\n\nclass ComposerAutoloaderInitc1ba3d113640ecbb1bd5645a9bacb037\n{\n    private static $loader;\n\n    public static function loadClassLoader($class)\n    {\n        if ('Composer\\Autoload\\ClassLoader' === $class) {\n            require __DIR__ . '/ClassLoader.php';\n        }\n    }\n\n    /**\n     * @return \\Composer\\Autoload\\ClassLoader\n     */\n    public static function getLoader()\n    {\n        if (null !== self::$loader) {\n            return self::$loader;\n        }\n\n        require __DIR__ . '/platform_check.php';\n\n        spl_autoload_register(array('ComposerAutoloaderInitc1ba3d113640ecbb1bd5645a9bacb037', 'loadClassLoader'), true, true);\n        self::$loader = $loader = new \\Composer\\Autoload\\ClassLoader(\\dirname(__DIR__));\n        spl_autoload_unregister(array('ComposerAutoloaderInitc1ba3d113640ecbb1bd5645a9bacb037', 'loadClassLoader'));\n\n        require __DIR__ . '/autoload_static.php';\n        call_user_func(\\Composer\\Autoload\\ComposerStaticInitc1ba3d113640ecbb1bd5645a9bacb037::getInitializer($loader));\n\n        $loader->register(true);\n\n        $filesToLoad = \\Composer\\Autoload\\ComposerStaticInitc1ba3d113640ecbb1bd5645a9bacb037::$files;\n        $requireFile = \\Closure::bind(static function ($fileIdentifier, $file) {\n            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {\n                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;\n\n                require $file;\n            }\n        }, null, null);\n        foreach ($filesToLoad as $fileIdentifier => $file) {\n            $requireFile($fileIdentifier, $file);\n        }\n\n        return $loader;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/composer/autoload_static.php",
    "content": "<?php\n\n// autoload_static.php @generated by Composer\n\nnamespace Composer\\Autoload;\n\nclass ComposerStaticInitc1ba3d113640ecbb1bd5645a9bacb037\n{\n    public static $files = array (\n        '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',\n        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',\n        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',\n        'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php',\n        '1f87db08236948d07391152dccb70f04' => __DIR__ . '/..' . '/google/apiclient-services/autoload.php',\n        'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',\n        'a8d3953fd9959404dd22d3dfcd0a79f0' => __DIR__ . '/../..' . '/src/aliases.php',\n    );\n\n    public static $prefixLengthsPsr4 = array (\n        'p' =>\n        array (\n            'phpseclib3\\\\' => 11,\n        ),\n        'R' =>\n        array (\n            'Rize\\\\' => 5,\n            'Ramsey\\\\Uuid\\\\' => 12,\n            'Ramsey\\\\Collection\\\\' => 18,\n        ),\n        'P' =>\n        array (\n            'Psr\\\\Log\\\\' => 8,\n            'Psr\\\\Http\\\\Message\\\\' => 17,\n            'Psr\\\\Http\\\\Client\\\\' => 16,\n            'Psr\\\\Cache\\\\' => 10,\n            'ParagonIE\\\\ConstantTime\\\\' => 23,\n        ),\n        'M' =>\n        array (\n            'Monolog\\\\' => 8,\n        ),\n        'G' =>\n        array (\n            'GuzzleHttp\\\\Psr7\\\\' => 16,\n            'GuzzleHttp\\\\Promise\\\\' => 19,\n            'GuzzleHttp\\\\' => 11,\n            'Grpc\\\\Gcp\\\\' => 9,\n            'Grpc\\\\' => 5,\n            'Google\\\\Type\\\\' => 12,\n            'Google\\\\Service\\\\' => 15,\n            'Google\\\\Rpc\\\\' => 11,\n            'Google\\\\Protobuf\\\\' => 16,\n            'Google\\\\LongRunning\\\\' => 19,\n            'Google\\\\Iam\\\\' => 11,\n            'Google\\\\Cloud\\\\Storage\\\\' => 21,\n            'Google\\\\Cloud\\\\Core\\\\' => 18,\n            'Google\\\\Cloud\\\\' => 13,\n            'Google\\\\Auth\\\\' => 12,\n            'Google\\\\Api\\\\' => 11,\n            'Google\\\\ApiCore\\\\LongRunning\\\\' => 27,\n            'Google\\\\ApiCore\\\\' => 15,\n            'Google\\\\' => 7,\n            'GPBMetadata\\\\Google\\\\Type\\\\' => 24,\n            'GPBMetadata\\\\Google\\\\Rpc\\\\' => 23,\n            'GPBMetadata\\\\Google\\\\Protobuf\\\\' => 28,\n            'GPBMetadata\\\\Google\\\\Longrunning\\\\' => 31,\n            'GPBMetadata\\\\Google\\\\Logging\\\\' => 27,\n            'GPBMetadata\\\\Google\\\\Iam\\\\' => 23,\n            'GPBMetadata\\\\Google\\\\Cloud\\\\' => 25,\n            'GPBMetadata\\\\Google\\\\Api\\\\' => 23,\n            'GPBMetadata\\\\ApiCore\\\\' => 20,\n        ),\n        'F' =>\n        array (\n            'Firebase\\\\JWT\\\\' => 13,\n        ),\n        'B' =>\n        array (\n            'Brick\\\\Math\\\\' => 11,\n        ),\n    );\n\n    public static $prefixDirsPsr4 = array (\n        'phpseclib3\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib',\n        ),\n        'Rize\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/rize/uri-template/src/Rize',\n        ),\n        'Ramsey\\\\Uuid\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/ramsey/uuid/src',\n        ),\n        'Ramsey\\\\Collection\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/ramsey/collection/src',\n        ),\n        'Psr\\\\Log\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/psr/log/src',\n        ),\n        'Psr\\\\Http\\\\Message\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/psr/http-factory/src',\n            1 => __DIR__ . '/..' . '/psr/http-message/src',\n        ),\n        'Psr\\\\Http\\\\Client\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/psr/http-client/src',\n        ),\n        'Psr\\\\Cache\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/psr/cache/src',\n        ),\n        'ParagonIE\\\\ConstantTime\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',\n        ),\n        'Monolog\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',\n        ),\n        'GuzzleHttp\\\\Psr7\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',\n        ),\n        'GuzzleHttp\\\\Promise\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',\n        ),\n        'GuzzleHttp\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',\n        ),\n        'Grpc\\\\Gcp\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/grpc-gcp/src',\n        ),\n        'Grpc\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/grpc/grpc/src/lib',\n        ),\n        'Google\\\\Type\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/src/Type',\n        ),\n        'Google\\\\Service\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/apiclient-services/src',\n        ),\n        'Google\\\\Rpc\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/src/Rpc',\n        ),\n        'Google\\\\Protobuf\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/protobuf/src/Google/Protobuf',\n        ),\n        'Google\\\\LongRunning\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/longrunning/src/LongRunning',\n        ),\n        'Google\\\\Iam\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/src/Iam',\n        ),\n        'Google\\\\Cloud\\\\Storage\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/cloud-storage/src',\n        ),\n        'Google\\\\Cloud\\\\Core\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/cloud-core/src',\n        ),\n        'Google\\\\Cloud\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/src/Cloud',\n        ),\n        'Google\\\\Auth\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/auth/src',\n        ),\n        'Google\\\\Api\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/src/Api',\n        ),\n        'Google\\\\ApiCore\\\\LongRunning\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/longrunning/src/ApiCore/LongRunning',\n        ),\n        'Google\\\\ApiCore\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/gax/src',\n        ),\n        'Google\\\\' =>\n        array (\n            0 => __DIR__ . '/../..' . '/src',\n        ),\n        'GPBMetadata\\\\Google\\\\Type\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/metadata/Type',\n        ),\n        'GPBMetadata\\\\Google\\\\Rpc\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/metadata/Rpc',\n        ),\n        'GPBMetadata\\\\Google\\\\Protobuf\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/protobuf/src/GPBMetadata/Google/Protobuf',\n        ),\n        'GPBMetadata\\\\Google\\\\Longrunning\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/longrunning/metadata/Longrunning',\n        ),\n        'GPBMetadata\\\\Google\\\\Logging\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/metadata/Logging',\n        ),\n        'GPBMetadata\\\\Google\\\\Iam\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/metadata/Iam',\n        ),\n        'GPBMetadata\\\\Google\\\\Cloud\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/metadata/Cloud',\n        ),\n        'GPBMetadata\\\\Google\\\\Api\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/common-protos/metadata/Api',\n        ),\n        'GPBMetadata\\\\ApiCore\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/google/gax/metadata/ApiCore',\n        ),\n        'Firebase\\\\JWT\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/firebase/php-jwt/src',\n        ),\n        'Brick\\\\Math\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/brick/math/src',\n        ),\n    );\n\n    public static $classMap = array (\n        'Composer\\\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',\n        'GPBMetadata\\\\GrpcGcp' => __DIR__ . '/..' . '/google/grpc-gcp/src/generated/GPBMetadata/GrpcGcp.php',\n        'Google_AccessToken_Revoke' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_AccessToken_Verify' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_AuthHandler_AuthHandlerFactory' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_AuthHandler_Guzzle6AuthHandler' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_AuthHandler_Guzzle7AuthHandler' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Client' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Collection' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Exception' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Http_Batch' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Http_MediaFileUpload' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Http_REST' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Model' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Service' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Service_Exception' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Service_Resource' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Task_Composer' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Task_Exception' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Task_Retryable' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Task_Runner' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Google_Utils_UriTemplate' => __DIR__ . '/../..' . '/src/aliases.php',\n        'Grpc\\\\Gcp\\\\AffinityConfig' => __DIR__ . '/..' . '/google/grpc-gcp/src/generated/Grpc/Gcp/AffinityConfig.php',\n        'Grpc\\\\Gcp\\\\AffinityConfig_Command' => __DIR__ . '/..' . '/google/grpc-gcp/src/generated/Grpc/Gcp/AffinityConfig_Command.php',\n        'Grpc\\\\Gcp\\\\ApiConfig' => __DIR__ . '/..' . '/google/grpc-gcp/src/generated/Grpc/Gcp/ApiConfig.php',\n        'Grpc\\\\Gcp\\\\ChannelPoolConfig' => __DIR__ . '/..' . '/google/grpc-gcp/src/generated/Grpc/Gcp/ChannelPoolConfig.php',\n        'Grpc\\\\Gcp\\\\MethodConfig' => __DIR__ . '/..' . '/google/grpc-gcp/src/generated/Grpc/Gcp/MethodConfig.php',\n    );\n\n    public static function getInitializer(ClassLoader $loader)\n    {\n        return \\Closure::bind(function () use ($loader) {\n            $loader->prefixLengthsPsr4 = ComposerStaticInitc1ba3d113640ecbb1bd5645a9bacb037::$prefixLengthsPsr4;\n            $loader->prefixDirsPsr4 = ComposerStaticInitc1ba3d113640ecbb1bd5645a9bacb037::$prefixDirsPsr4;\n            $loader->classMap = ComposerStaticInitc1ba3d113640ecbb1bd5645a9bacb037::$classMap;\n\n        }, null, ClassLoader::class);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/composer/installed.json",
    "content": "{\n    \"packages\": [\n        {\n            \"name\": \"brick/math\",\n            \"version\": \"0.13.1\",\n            \"version_normalized\": \"0.13.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/brick/math.git\",\n                \"reference\": \"fc7ed316430118cc7836bf45faff18d5dfc8de04\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04\",\n                \"reference\": \"fc7ed316430118cc7836bf45faff18d5dfc8de04\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.1\"\n            },\n            \"require-dev\": {\n                \"php-coveralls/php-coveralls\": \"^2.2\",\n                \"phpunit/phpunit\": \"^10.1\",\n                \"vimeo/psalm\": \"6.8.8\"\n            },\n            \"time\": \"2025-03-29T13:50:30+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Brick\\\\Math\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"description\": \"Arbitrary-precision arithmetic library\",\n            \"keywords\": [\n                \"Arbitrary-precision\",\n                \"BigInteger\",\n                \"BigRational\",\n                \"arithmetic\",\n                \"bigdecimal\",\n                \"bignum\",\n                \"bignumber\",\n                \"brick\",\n                \"decimal\",\n                \"integer\",\n                \"math\",\n                \"mathematics\",\n                \"rational\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/brick/math/issues\",\n                \"source\": \"https://github.com/brick/math/tree/0.13.1\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/BenMorel\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../brick/math\"\n        },\n        {\n            \"name\": \"firebase/php-jwt\",\n            \"version\": \"v7.0.2\",\n            \"version_normalized\": \"7.0.2.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/firebase/php-jwt.git\",\n                \"reference\": \"5645b43af647b6947daac1d0f659dd1fbe8d3b65\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/firebase/php-jwt/zipball/5645b43af647b6947daac1d0f659dd1fbe8d3b65\",\n                \"reference\": \"5645b43af647b6947daac1d0f659dd1fbe8d3b65\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.0\"\n            },\n            \"require-dev\": {\n                \"guzzlehttp/guzzle\": \"^7.4\",\n                \"phpspec/prophecy-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.5\",\n                \"psr/cache\": \"^2.0||^3.0\",\n                \"psr/http-client\": \"^1.0\",\n                \"psr/http-factory\": \"^1.0\"\n            },\n            \"suggest\": {\n                \"ext-sodium\": \"Support EdDSA (Ed25519) signatures\",\n                \"paragonie/sodium_compat\": \"Support EdDSA (Ed25519) signatures when libsodium is not present\"\n            },\n            \"time\": \"2025-12-16T22:17:28+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Firebase\\\\JWT\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-3-Clause\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Neuman Vong\",\n                    \"email\": \"neuman+pear@twilio.com\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Anant Narayanan\",\n                    \"email\": \"anant@php.net\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.\",\n            \"homepage\": \"https://github.com/firebase/php-jwt\",\n            \"keywords\": [\n                \"jwt\",\n                \"php\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/firebase/php-jwt/issues\",\n                \"source\": \"https://github.com/firebase/php-jwt/tree/v7.0.2\"\n            },\n            \"install-path\": \"../firebase/php-jwt\"\n        },\n        {\n            \"name\": \"google/apiclient-services\",\n            \"version\": \"v0.427.0\",\n            \"version_normalized\": \"0.427.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/google-api-php-client-services.git\",\n                \"reference\": \"cc74cd104a1ed1cf545480c52f13831e6eb0efe2\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/cc74cd104a1ed1cf545480c52f13831e6eb0efe2\",\n                \"reference\": \"cc74cd104a1ed1cf545480c52f13831e6eb0efe2\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.1\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"^9.6\"\n            },\n            \"time\": \"2025-12-24T01:04:22+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"autoload.php\"\n                ],\n                \"psr-4\": {\n                    \"Google\\\\Service\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"Client library for Google APIs\",\n            \"homepage\": \"http://developers.google.com/api-client-library/php\",\n            \"keywords\": [\n                \"google\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/googleapis/google-api-php-client-services/issues\",\n                \"source\": \"https://github.com/googleapis/google-api-php-client-services/tree/v0.427.0\"\n            },\n            \"install-path\": \"../google/apiclient-services\"\n        },\n        {\n            \"name\": \"google/auth\",\n            \"version\": \"v1.50.0\",\n            \"version_normalized\": \"1.50.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/google-auth-library-php.git\",\n                \"reference\": \"e1c26a718198e16d8a3c69b1cae136b73f959b0f\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/google-auth-library-php/zipball/e1c26a718198e16d8a3c69b1cae136b73f959b0f\",\n                \"reference\": \"e1c26a718198e16d8a3c69b1cae136b73f959b0f\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"firebase/php-jwt\": \"^6.0||^7.0\",\n                \"guzzlehttp/guzzle\": \"^7.4.5\",\n                \"guzzlehttp/psr7\": \"^2.4.5\",\n                \"php\": \"^8.1\",\n                \"psr/cache\": \"^2.0||^3.0\",\n                \"psr/http-message\": \"^1.1||^2.0\",\n                \"psr/log\": \"^3.0\"\n            },\n            \"require-dev\": {\n                \"guzzlehttp/promises\": \"^2.0\",\n                \"kelvinmo/simplejwt\": \"^1.1.0\",\n                \"phpseclib/phpseclib\": \"^3.0.35\",\n                \"phpspec/prophecy-phpunit\": \"^2.1\",\n                \"phpunit/phpunit\": \"^9.6\",\n                \"sebastian/comparator\": \">=1.2.3\",\n                \"squizlabs/php_codesniffer\": \"^4.0\",\n                \"symfony/filesystem\": \"^6.3||^7.3\",\n                \"symfony/process\": \"^6.0||^7.0\",\n                \"webmozart/assert\": \"^1.11||^2.0\"\n            },\n            \"suggest\": {\n                \"phpseclib/phpseclib\": \"May be used in place of OpenSSL for signing strings or for token management. Please require version ^2.\"\n            },\n            \"time\": \"2026-01-08T21:33:57+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\Auth\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"Google Auth Library for PHP\",\n            \"homepage\": \"https://github.com/google/google-auth-library-php\",\n            \"keywords\": [\n                \"Authentication\",\n                \"google\",\n                \"oauth2\"\n            ],\n            \"support\": {\n                \"docs\": \"https://cloud.google.com/php/docs/reference/auth/latest\",\n                \"issues\": \"https://github.com/googleapis/google-auth-library-php/issues\",\n                \"source\": \"https://github.com/googleapis/google-auth-library-php/tree/v1.50.0\"\n            },\n            \"install-path\": \"../google/auth\"\n        },\n        {\n            \"name\": \"google/cloud-core\",\n            \"version\": \"v1.69.0\",\n            \"version_normalized\": \"1.69.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/google-cloud-php-core.git\",\n                \"reference\": \"a35bcf9d79f7007eaaf325e00011d08f40494fb1\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/a35bcf9d79f7007eaaf325e00011d08f40494fb1\",\n                \"reference\": \"a35bcf9d79f7007eaaf325e00011d08f40494fb1\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"google/auth\": \"^1.34\",\n                \"google/gax\": \"^1.38.0\",\n                \"guzzlehttp/guzzle\": \"^6.5.8||^7.4.4\",\n                \"guzzlehttp/promises\": \"^1.4||^2.0\",\n                \"guzzlehttp/psr7\": \"^2.6\",\n                \"monolog/monolog\": \"^2.9||^3.0\",\n                \"php\": \"^8.1\",\n                \"psr/http-message\": \"^1.0||^2.0\",\n                \"rize/uri-template\": \"~0.3||~0.4\"\n            },\n            \"require-dev\": {\n                \"erusev/parsedown\": \"^1.6\",\n                \"google/cloud-common-protos\": \"~0.5\",\n                \"nikic/php-parser\": \"^5.6\",\n                \"opis/closure\": \"^3.7|^4.0\",\n                \"phpdocumentor/reflection\": \"^6.0\",\n                \"phpdocumentor/reflection-docblock\": \"^5.3\",\n                \"phpspec/prophecy-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.0\",\n                \"squizlabs/php_codesniffer\": \"2.*\"\n            },\n            \"suggest\": {\n                \"opis/closure\": \"May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.\",\n                \"symfony/lock\": \"Required for the Spanner cached based session pool. Please require the following commit: 3.3.x-dev#1ba6ac9\"\n            },\n            \"time\": \"2025-12-06T04:51:04+00:00\",\n            \"bin\": [\n                \"bin/google-cloud-batch\"\n            ],\n            \"type\": \"library\",\n            \"extra\": {\n                \"component\": {\n                    \"id\": \"cloud-core\",\n                    \"path\": \"Core\",\n                    \"entry\": \"src/ServiceBuilder.php\",\n                    \"target\": \"googleapis/google-cloud-php-core.git\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\Cloud\\\\Core\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"Google Cloud PHP shared dependency, providing functionality useful to all components.\",\n            \"support\": {\n                \"source\": \"https://github.com/googleapis/google-cloud-php-core/tree/v1.69.0\"\n            },\n            \"install-path\": \"../google/cloud-core\"\n        },\n        {\n            \"name\": \"google/cloud-storage\",\n            \"version\": \"v1.49.0\",\n            \"version_normalized\": \"1.49.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/google-cloud-php-storage.git\",\n                \"reference\": \"30aefa19ce5af165cef8bb39c224cfa865461541\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/google-cloud-php-storage/zipball/30aefa19ce5af165cef8bb39c224cfa865461541\",\n                \"reference\": \"30aefa19ce5af165cef8bb39c224cfa865461541\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"google/cloud-core\": \"^1.57\",\n                \"php\": \"^8.1\",\n                \"ramsey/uuid\": \"^4.2.3\"\n            },\n            \"require-dev\": {\n                \"erusev/parsedown\": \"^1.6\",\n                \"google/cloud-pubsub\": \"^2.0\",\n                \"phpdocumentor/reflection\": \"^5.3.3||^6.0\",\n                \"phpdocumentor/reflection-docblock\": \"^5.3\",\n                \"phpseclib/phpseclib\": \"^2.0||^3.0\",\n                \"phpspec/prophecy-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.0\",\n                \"squizlabs/php_codesniffer\": \"2.*\"\n            },\n            \"suggest\": {\n                \"google/cloud-pubsub\": \"May be used to register a topic to receive bucket notifications.\",\n                \"phpseclib/phpseclib\": \"May be used in place of OpenSSL for creating signed Cloud Storage URLs. Please require version ^2.\"\n            },\n            \"time\": \"2025-12-06T04:51:04+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"component\": {\n                    \"id\": \"cloud-storage\",\n                    \"path\": \"Storage\",\n                    \"entry\": \"src/StorageClient.php\",\n                    \"target\": \"googleapis/google-cloud-php-storage.git\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\Cloud\\\\Storage\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"Cloud Storage Client for PHP\",\n            \"support\": {\n                \"source\": \"https://github.com/googleapis/google-cloud-php-storage/tree/v1.49.0\"\n            },\n            \"install-path\": \"../google/cloud-storage\"\n        },\n        {\n            \"name\": \"google/common-protos\",\n            \"version\": \"4.12.4\",\n            \"version_normalized\": \"4.12.4.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/common-protos-php.git\",\n                \"reference\": \"0127156899af0df2681bd42024c60bd5360d64e3\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/common-protos-php/zipball/0127156899af0df2681bd42024c60bd5360d64e3\",\n                \"reference\": \"0127156899af0df2681bd42024c60bd5360d64e3\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"google/protobuf\": \"^4.31\",\n                \"php\": \"^8.1\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"^9.6\"\n            },\n            \"time\": \"2025-09-20T01:29:44+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"component\": {\n                    \"id\": \"common-protos\",\n                    \"path\": \"CommonProtos\",\n                    \"entry\": \"README.md\",\n                    \"target\": \"googleapis/common-protos-php.git\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\Api\\\\\": \"src/Api\",\n                    \"Google\\\\Iam\\\\\": \"src/Iam\",\n                    \"Google\\\\Rpc\\\\\": \"src/Rpc\",\n                    \"Google\\\\Type\\\\\": \"src/Type\",\n                    \"Google\\\\Cloud\\\\\": \"src/Cloud\",\n                    \"GPBMetadata\\\\Google\\\\Api\\\\\": \"metadata/Api\",\n                    \"GPBMetadata\\\\Google\\\\Iam\\\\\": \"metadata/Iam\",\n                    \"GPBMetadata\\\\Google\\\\Rpc\\\\\": \"metadata/Rpc\",\n                    \"GPBMetadata\\\\Google\\\\Type\\\\\": \"metadata/Type\",\n                    \"GPBMetadata\\\\Google\\\\Cloud\\\\\": \"metadata/Cloud\",\n                    \"GPBMetadata\\\\Google\\\\Logging\\\\\": \"metadata/Logging\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"Google API Common Protos for PHP\",\n            \"homepage\": \"https://github.com/googleapis/common-protos-php\",\n            \"keywords\": [\n                \"google\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/googleapis/common-protos-php/tree/v4.12.4\"\n            },\n            \"install-path\": \"../google/common-protos\"\n        },\n        {\n            \"name\": \"google/gax\",\n            \"version\": \"v1.40.0\",\n            \"version_normalized\": \"1.40.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/gax-php.git\",\n                \"reference\": \"1d3834d60b3f0794427c64d2b27d7c627fbba92c\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/gax-php/zipball/1d3834d60b3f0794427c64d2b27d7c627fbba92c\",\n                \"reference\": \"1d3834d60b3f0794427c64d2b27d7c627fbba92c\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"google/auth\": \"^1.49\",\n                \"google/common-protos\": \"^4.4\",\n                \"google/grpc-gcp\": \"^0.4\",\n                \"google/longrunning\": \"~0.4\",\n                \"google/protobuf\": \"^4.31\",\n                \"grpc/grpc\": \"^1.13\",\n                \"guzzlehttp/promises\": \"^2.0\",\n                \"guzzlehttp/psr7\": \"^2.0\",\n                \"php\": \"^8.1\",\n                \"ramsey/uuid\": \"^4.0\"\n            },\n            \"conflict\": {\n                \"ext-protobuf\": \"<4.31.0\"\n            },\n            \"require-dev\": {\n                \"phpspec/prophecy-phpunit\": \"^2.1\",\n                \"phpstan/phpstan\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.6\",\n                \"squizlabs/php_codesniffer\": \"4.*\"\n            },\n            \"time\": \"2025-12-04T18:45:15+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\ApiCore\\\\\": \"src\",\n                    \"GPBMetadata\\\\ApiCore\\\\\": \"metadata/ApiCore\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-3-Clause\"\n            ],\n            \"description\": \"Google API Core for PHP\",\n            \"homepage\": \"https://github.com/googleapis/gax-php\",\n            \"keywords\": [\n                \"google\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/googleapis/gax-php/issues\",\n                \"source\": \"https://github.com/googleapis/gax-php/tree/v1.40.0\"\n            },\n            \"install-path\": \"../google/gax\"\n        },\n        {\n            \"name\": \"google/grpc-gcp\",\n            \"version\": \"v0.4.1\",\n            \"version_normalized\": \"0.4.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/GoogleCloudPlatform/grpc-gcp-php.git\",\n                \"reference\": \"e585b7721bbe806ef45b5c52ae43dfc2bff89968\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/GoogleCloudPlatform/grpc-gcp-php/zipball/e585b7721bbe806ef45b5c52ae43dfc2bff89968\",\n                \"reference\": \"e585b7721bbe806ef45b5c52ae43dfc2bff89968\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"google/auth\": \"^1.3\",\n                \"google/protobuf\": \"^v3.25.3||^4.26.1\",\n                \"grpc/grpc\": \"^v1.13.0\",\n                \"php\": \"^8.0\",\n                \"psr/cache\": \"^1.0.1||^2.0.0||^3.0.0\"\n            },\n            \"require-dev\": {\n                \"google/cloud-spanner\": \"^1.7\",\n                \"phpunit/phpunit\": \"^9.0\"\n            },\n            \"time\": \"2025-02-19T21:53:22+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Grpc\\\\Gcp\\\\\": \"src/\"\n                },\n                \"classmap\": [\n                    \"src/generated/\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"gRPC GCP library for channel management\",\n            \"support\": {\n                \"issues\": \"https://github.com/GoogleCloudPlatform/grpc-gcp-php/issues\",\n                \"source\": \"https://github.com/GoogleCloudPlatform/grpc-gcp-php/tree/v0.4.1\"\n            },\n            \"install-path\": \"../google/grpc-gcp\"\n        },\n        {\n            \"name\": \"google/longrunning\",\n            \"version\": \"0.6.0\",\n            \"version_normalized\": \"0.6.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/googleapis/php-longrunning.git\",\n                \"reference\": \"226d3b5166eaa13754cc5e452b37872478e23375\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/googleapis/php-longrunning/zipball/226d3b5166eaa13754cc5e452b37872478e23375\",\n                \"reference\": \"226d3b5166eaa13754cc5e452b37872478e23375\",\n                \"shasum\": \"\"\n            },\n            \"require-dev\": {\n                \"google/gax\": \"^1.38.0\",\n                \"phpunit/phpunit\": \"^9.0\"\n            },\n            \"time\": \"2025-10-07T18:41:09+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"component\": {\n                    \"id\": \"longrunning\",\n                    \"path\": \"LongRunning\",\n                    \"entry\": null,\n                    \"target\": \"googleapis/php-longrunning\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\LongRunning\\\\\": \"src/LongRunning\",\n                    \"Google\\\\ApiCore\\\\LongRunning\\\\\": \"src/ApiCore/LongRunning\",\n                    \"GPBMetadata\\\\Google\\\\Longrunning\\\\\": \"metadata/Longrunning\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"Google LongRunning Client for PHP\",\n            \"support\": {\n                \"source\": \"https://github.com/googleapis/php-longrunning/tree/v0.6.0\"\n            },\n            \"install-path\": \"../google/longrunning\"\n        },\n        {\n            \"name\": \"google/protobuf\",\n            \"version\": \"v4.33.2\",\n            \"version_normalized\": \"4.33.2.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/protocolbuffers/protobuf-php.git\",\n                \"reference\": \"fbd96b7bf1343f4b0d8fb358526c7ba4d72f1318\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/fbd96b7bf1343f4b0d8fb358526c7ba4d72f1318\",\n                \"reference\": \"fbd96b7bf1343f4b0d8fb358526c7ba4d72f1318\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1.0\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \">=5.0.0 <8.5.27\"\n            },\n            \"suggest\": {\n                \"ext-bcmath\": \"Need to support JSON deserialization\"\n            },\n            \"time\": \"2025-12-05T22:12:22+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Google\\\\Protobuf\\\\\": \"src/Google/Protobuf\",\n                    \"GPBMetadata\\\\Google\\\\Protobuf\\\\\": \"src/GPBMetadata/Google/Protobuf\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-3-Clause\"\n            ],\n            \"description\": \"proto library for PHP\",\n            \"homepage\": \"https://developers.google.com/protocol-buffers/\",\n            \"keywords\": [\n                \"proto\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/protocolbuffers/protobuf-php/tree/v4.33.2\"\n            },\n            \"install-path\": \"../google/protobuf\"\n        },\n        {\n            \"name\": \"grpc/grpc\",\n            \"version\": \"1.74.0\",\n            \"version_normalized\": \"1.74.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/grpc/grpc-php.git\",\n                \"reference\": \"32bf4dba256d60d395582fb6e4e8d3936bcdb713\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/grpc/grpc-php/zipball/32bf4dba256d60d395582fb6e4e8d3936bcdb713\",\n                \"reference\": \"32bf4dba256d60d395582fb6e4e8d3936bcdb713\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.0.0\"\n            },\n            \"require-dev\": {\n                \"google/auth\": \"^v1.3.0\"\n            },\n            \"suggest\": {\n                \"ext-protobuf\": \"For better performance, install the protobuf C extension.\",\n                \"google/protobuf\": \"To get started using grpc quickly, install the native protobuf library.\"\n            },\n            \"time\": \"2025-07-24T20:02:16+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Grpc\\\\\": \"src/lib/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"description\": \"gRPC library for PHP\",\n            \"homepage\": \"https://grpc.io\",\n            \"keywords\": [\n                \"rpc\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/grpc/grpc-php/tree/v1.74.0\"\n            },\n            \"install-path\": \"../grpc/grpc\"\n        },\n        {\n            \"name\": \"guzzlehttp/guzzle\",\n            \"version\": \"7.10.0\",\n            \"version_normalized\": \"7.10.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/guzzle/guzzle.git\",\n                \"reference\": \"b51ac707cfa420b7bfd4e4d5e510ba8008e822b4\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4\",\n                \"reference\": \"b51ac707cfa420b7bfd4e4d5e510ba8008e822b4\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-json\": \"*\",\n                \"guzzlehttp/promises\": \"^2.3\",\n                \"guzzlehttp/psr7\": \"^2.8\",\n                \"php\": \"^7.2.5 || ^8.0\",\n                \"psr/http-client\": \"^1.0\",\n                \"symfony/deprecation-contracts\": \"^2.2 || ^3.0\"\n            },\n            \"provide\": {\n                \"psr/http-client-implementation\": \"1.0\"\n            },\n            \"require-dev\": {\n                \"bamarni/composer-bin-plugin\": \"^1.8.2\",\n                \"ext-curl\": \"*\",\n                \"guzzle/client-integration-tests\": \"3.0.2\",\n                \"php-http/message-factory\": \"^1.1\",\n                \"phpunit/phpunit\": \"^8.5.39 || ^9.6.20\",\n                \"psr/log\": \"^1.1 || ^2.0 || ^3.0\"\n            },\n            \"suggest\": {\n                \"ext-curl\": \"Required for CURL handler support\",\n                \"ext-intl\": \"Required for Internationalized Domain Name (IDN) support\",\n                \"psr/log\": \"Required for using the Log middleware\"\n            },\n            \"time\": \"2025-08-23T22:36:01+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"bamarni-bin\": {\n                    \"bin-links\": true,\n                    \"forward-command\": false\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/functions_include.php\"\n                ],\n                \"psr-4\": {\n                    \"GuzzleHttp\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"hello@gjcampbell.co.uk\",\n                    \"homepage\": \"https://github.com/GrahamCampbell\"\n                },\n                {\n                    \"name\": \"Michael Dowling\",\n                    \"email\": \"mtdowling@gmail.com\",\n                    \"homepage\": \"https://github.com/mtdowling\"\n                },\n                {\n                    \"name\": \"Jeremy Lindblom\",\n                    \"email\": \"jeremeamia@gmail.com\",\n                    \"homepage\": \"https://github.com/jeremeamia\"\n                },\n                {\n                    \"name\": \"George Mponos\",\n                    \"email\": \"gmponos@gmail.com\",\n                    \"homepage\": \"https://github.com/gmponos\"\n                },\n                {\n                    \"name\": \"Tobias Nyholm\",\n                    \"email\": \"tobias.nyholm@gmail.com\",\n                    \"homepage\": \"https://github.com/Nyholm\"\n                },\n                {\n                    \"name\": \"Márk Sági-Kazár\",\n                    \"email\": \"mark.sagikazar@gmail.com\",\n                    \"homepage\": \"https://github.com/sagikazarmark\"\n                },\n                {\n                    \"name\": \"Tobias Schultze\",\n                    \"email\": \"webmaster@tubo-world.de\",\n                    \"homepage\": \"https://github.com/Tobion\"\n                }\n            ],\n            \"description\": \"Guzzle is a PHP HTTP client library\",\n            \"keywords\": [\n                \"client\",\n                \"curl\",\n                \"framework\",\n                \"http\",\n                \"http client\",\n                \"psr-18\",\n                \"psr-7\",\n                \"rest\",\n                \"web service\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/guzzle/guzzle/issues\",\n                \"source\": \"https://github.com/guzzle/guzzle/tree/7.10.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/GrahamCampbell\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/Nyholm\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../guzzlehttp/guzzle\"\n        },\n        {\n            \"name\": \"guzzlehttp/promises\",\n            \"version\": \"2.3.0\",\n            \"version_normalized\": \"2.3.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/guzzle/promises.git\",\n                \"reference\": \"481557b130ef3790cf82b713667b43030dc9c957\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957\",\n                \"reference\": \"481557b130ef3790cf82b713667b43030dc9c957\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.2.5 || ^8.0\"\n            },\n            \"require-dev\": {\n                \"bamarni/composer-bin-plugin\": \"^1.8.2\",\n                \"phpunit/phpunit\": \"^8.5.44 || ^9.6.25\"\n            },\n            \"time\": \"2025-08-22T14:34:08+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"bamarni-bin\": {\n                    \"bin-links\": true,\n                    \"forward-command\": false\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"GuzzleHttp\\\\Promise\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"hello@gjcampbell.co.uk\",\n                    \"homepage\": \"https://github.com/GrahamCampbell\"\n                },\n                {\n                    \"name\": \"Michael Dowling\",\n                    \"email\": \"mtdowling@gmail.com\",\n                    \"homepage\": \"https://github.com/mtdowling\"\n                },\n                {\n                    \"name\": \"Tobias Nyholm\",\n                    \"email\": \"tobias.nyholm@gmail.com\",\n                    \"homepage\": \"https://github.com/Nyholm\"\n                },\n                {\n                    \"name\": \"Tobias Schultze\",\n                    \"email\": \"webmaster@tubo-world.de\",\n                    \"homepage\": \"https://github.com/Tobion\"\n                }\n            ],\n            \"description\": \"Guzzle promises library\",\n            \"keywords\": [\n                \"promise\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/guzzle/promises/issues\",\n                \"source\": \"https://github.com/guzzle/promises/tree/2.3.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/GrahamCampbell\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/Nyholm\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/guzzlehttp/promises\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../guzzlehttp/promises\"\n        },\n        {\n            \"name\": \"guzzlehttp/psr7\",\n            \"version\": \"2.8.0\",\n            \"version_normalized\": \"2.8.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/guzzle/psr7.git\",\n                \"reference\": \"21dc724a0583619cd1652f673303492272778051\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051\",\n                \"reference\": \"21dc724a0583619cd1652f673303492272778051\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.2.5 || ^8.0\",\n                \"psr/http-factory\": \"^1.0\",\n                \"psr/http-message\": \"^1.1 || ^2.0\",\n                \"ralouphie/getallheaders\": \"^3.0\"\n            },\n            \"provide\": {\n                \"psr/http-factory-implementation\": \"1.0\",\n                \"psr/http-message-implementation\": \"1.0\"\n            },\n            \"require-dev\": {\n                \"bamarni/composer-bin-plugin\": \"^1.8.2\",\n                \"http-interop/http-factory-tests\": \"0.9.0\",\n                \"phpunit/phpunit\": \"^8.5.44 || ^9.6.25\"\n            },\n            \"suggest\": {\n                \"laminas/laminas-httphandlerrunner\": \"Emit PSR-7 responses\"\n            },\n            \"time\": \"2025-08-23T21:21:41+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"bamarni-bin\": {\n                    \"bin-links\": true,\n                    \"forward-command\": false\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"GuzzleHttp\\\\Psr7\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"hello@gjcampbell.co.uk\",\n                    \"homepage\": \"https://github.com/GrahamCampbell\"\n                },\n                {\n                    \"name\": \"Michael Dowling\",\n                    \"email\": \"mtdowling@gmail.com\",\n                    \"homepage\": \"https://github.com/mtdowling\"\n                },\n                {\n                    \"name\": \"George Mponos\",\n                    \"email\": \"gmponos@gmail.com\",\n                    \"homepage\": \"https://github.com/gmponos\"\n                },\n                {\n                    \"name\": \"Tobias Nyholm\",\n                    \"email\": \"tobias.nyholm@gmail.com\",\n                    \"homepage\": \"https://github.com/Nyholm\"\n                },\n                {\n                    \"name\": \"Márk Sági-Kazár\",\n                    \"email\": \"mark.sagikazar@gmail.com\",\n                    \"homepage\": \"https://github.com/sagikazarmark\"\n                },\n                {\n                    \"name\": \"Tobias Schultze\",\n                    \"email\": \"webmaster@tubo-world.de\",\n                    \"homepage\": \"https://github.com/Tobion\"\n                },\n                {\n                    \"name\": \"Márk Sági-Kazár\",\n                    \"email\": \"mark.sagikazar@gmail.com\",\n                    \"homepage\": \"https://sagikazarmark.hu\"\n                }\n            ],\n            \"description\": \"PSR-7 message implementation that also provides common utility methods\",\n            \"keywords\": [\n                \"http\",\n                \"message\",\n                \"psr-7\",\n                \"request\",\n                \"response\",\n                \"stream\",\n                \"uri\",\n                \"url\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/guzzle/psr7/issues\",\n                \"source\": \"https://github.com/guzzle/psr7/tree/2.8.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/GrahamCampbell\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/Nyholm\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/guzzlehttp/psr7\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../guzzlehttp/psr7\"\n        },\n        {\n            \"name\": \"monolog/monolog\",\n            \"version\": \"3.10.0\",\n            \"version_normalized\": \"3.10.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/Seldaek/monolog.git\",\n                \"reference\": \"b321dd6749f0bf7189444158a3ce785cc16d69b0\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0\",\n                \"reference\": \"b321dd6749f0bf7189444158a3ce785cc16d69b0\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1\",\n                \"psr/log\": \"^2.0 || ^3.0\"\n            },\n            \"provide\": {\n                \"psr/log-implementation\": \"3.0.0\"\n            },\n            \"require-dev\": {\n                \"aws/aws-sdk-php\": \"^3.0\",\n                \"doctrine/couchdb\": \"~1.0@dev\",\n                \"elasticsearch/elasticsearch\": \"^7 || ^8\",\n                \"ext-json\": \"*\",\n                \"graylog2/gelf-php\": \"^1.4.2 || ^2.0\",\n                \"guzzlehttp/guzzle\": \"^7.4.5\",\n                \"guzzlehttp/psr7\": \"^2.2\",\n                \"mongodb/mongodb\": \"^1.8 || ^2.0\",\n                \"php-amqplib/php-amqplib\": \"~2.4 || ^3\",\n                \"php-console/php-console\": \"^3.1.8\",\n                \"phpstan/phpstan\": \"^2\",\n                \"phpstan/phpstan-deprecation-rules\": \"^2\",\n                \"phpstan/phpstan-strict-rules\": \"^2\",\n                \"phpunit/phpunit\": \"^10.5.17 || ^11.0.7\",\n                \"predis/predis\": \"^1.1 || ^2\",\n                \"rollbar/rollbar\": \"^4.0\",\n                \"ruflin/elastica\": \"^7 || ^8\",\n                \"symfony/mailer\": \"^5.4 || ^6\",\n                \"symfony/mime\": \"^5.4 || ^6\"\n            },\n            \"suggest\": {\n                \"aws/aws-sdk-php\": \"Allow sending log messages to AWS services like DynamoDB\",\n                \"doctrine/couchdb\": \"Allow sending log messages to a CouchDB server\",\n                \"elasticsearch/elasticsearch\": \"Allow sending log messages to an Elasticsearch server via official client\",\n                \"ext-amqp\": \"Allow sending log messages to an AMQP server (1.0+ required)\",\n                \"ext-curl\": \"Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler\",\n                \"ext-mbstring\": \"Allow to work properly with unicode symbols\",\n                \"ext-mongodb\": \"Allow sending log messages to a MongoDB server (via driver)\",\n                \"ext-openssl\": \"Required to send log messages using SSL\",\n                \"ext-sockets\": \"Allow sending log messages to a Syslog server (via UDP driver)\",\n                \"graylog2/gelf-php\": \"Allow sending log messages to a GrayLog2 server\",\n                \"mongodb/mongodb\": \"Allow sending log messages to a MongoDB server (via library)\",\n                \"php-amqplib/php-amqplib\": \"Allow sending log messages to an AMQP server using php-amqplib\",\n                \"rollbar/rollbar\": \"Allow sending log messages to Rollbar\",\n                \"ruflin/elastica\": \"Allow sending log messages to an Elastic Search server\"\n            },\n            \"time\": \"2026-01-02T08:56:05+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-main\": \"3.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Monolog\\\\\": \"src/Monolog\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Jordi Boggiano\",\n                    \"email\": \"j.boggiano@seld.be\",\n                    \"homepage\": \"https://seld.be\"\n                }\n            ],\n            \"description\": \"Sends your logs to files, sockets, inboxes, databases and various web services\",\n            \"homepage\": \"https://github.com/Seldaek/monolog\",\n            \"keywords\": [\n                \"log\",\n                \"logging\",\n                \"psr-3\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/Seldaek/monolog/issues\",\n                \"source\": \"https://github.com/Seldaek/monolog/tree/3.10.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/Seldaek\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/monolog/monolog\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../monolog/monolog\"\n        },\n        {\n            \"name\": \"paragonie/constant_time_encoding\",\n            \"version\": \"v3.1.3\",\n            \"version_normalized\": \"3.1.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/paragonie/constant_time_encoding.git\",\n                \"reference\": \"d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77\",\n                \"reference\": \"d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8\"\n            },\n            \"require-dev\": {\n                \"infection/infection\": \"^0\",\n                \"nikic/php-fuzzer\": \"^0\",\n                \"phpunit/phpunit\": \"^9|^10|^11\",\n                \"vimeo/psalm\": \"^4|^5|^6\"\n            },\n            \"time\": \"2025-09-24T15:06:41+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"ParagonIE\\\\ConstantTime\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Paragon Initiative Enterprises\",\n                    \"email\": \"security@paragonie.com\",\n                    \"homepage\": \"https://paragonie.com\",\n                    \"role\": \"Maintainer\"\n                },\n                {\n                    \"name\": \"Steve 'Sc00bz' Thomas\",\n                    \"email\": \"steve@tobtu.com\",\n                    \"homepage\": \"https://www.tobtu.com\",\n                    \"role\": \"Original Developer\"\n                }\n            ],\n            \"description\": \"Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)\",\n            \"keywords\": [\n                \"base16\",\n                \"base32\",\n                \"base32_decode\",\n                \"base32_encode\",\n                \"base64\",\n                \"base64_decode\",\n                \"base64_encode\",\n                \"bin2hex\",\n                \"encoding\",\n                \"hex\",\n                \"hex2bin\",\n                \"rfc4648\"\n            ],\n            \"support\": {\n                \"email\": \"info@paragonie.com\",\n                \"issues\": \"https://github.com/paragonie/constant_time_encoding/issues\",\n                \"source\": \"https://github.com/paragonie/constant_time_encoding\"\n            },\n            \"install-path\": \"../paragonie/constant_time_encoding\"\n        },\n        {\n            \"name\": \"paragonie/random_compat\",\n            \"version\": \"v9.99.100\",\n            \"version_normalized\": \"9.99.100.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/paragonie/random_compat.git\",\n                \"reference\": \"996434e5492cb4c3edcb9168db6fbb1359ef965a\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a\",\n                \"reference\": \"996434e5492cb4c3edcb9168db6fbb1359ef965a\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">= 7\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"4.*|5.*\",\n                \"vimeo/psalm\": \"^1\"\n            },\n            \"suggest\": {\n                \"ext-libsodium\": \"Provides a modern crypto API that can be used to generate random bytes.\"\n            },\n            \"time\": \"2020-10-15T08:29:30+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Paragon Initiative Enterprises\",\n                    \"email\": \"security@paragonie.com\",\n                    \"homepage\": \"https://paragonie.com\"\n                }\n            ],\n            \"description\": \"PHP 5.x polyfill for random_bytes() and random_int() from PHP 7\",\n            \"keywords\": [\n                \"csprng\",\n                \"polyfill\",\n                \"pseudorandom\",\n                \"random\"\n            ],\n            \"support\": {\n                \"email\": \"info@paragonie.com\",\n                \"issues\": \"https://github.com/paragonie/random_compat/issues\",\n                \"source\": \"https://github.com/paragonie/random_compat\"\n            },\n            \"install-path\": \"../paragonie/random_compat\"\n        },\n        {\n            \"name\": \"phpseclib/phpseclib\",\n            \"version\": \"3.0.48\",\n            \"version_normalized\": \"3.0.48.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/phpseclib/phpseclib.git\",\n                \"reference\": \"64065a5679c50acb886e82c07aa139b0f757bb89\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89\",\n                \"reference\": \"64065a5679c50acb886e82c07aa139b0f757bb89\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"paragonie/constant_time_encoding\": \"^1|^2|^3\",\n                \"paragonie/random_compat\": \"^1.4|^2.0|^9.99.99\",\n                \"php\": \">=5.6.1\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"*\"\n            },\n            \"suggest\": {\n                \"ext-dom\": \"Install the DOM extension to load XML formatted public keys.\",\n                \"ext-gmp\": \"Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.\",\n                \"ext-libsodium\": \"SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.\",\n                \"ext-mcrypt\": \"Install the Mcrypt extension in order to speed up a few other cryptographic operations.\",\n                \"ext-openssl\": \"Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.\"\n            },\n            \"time\": \"2025-12-15T11:51:42+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"phpseclib/bootstrap.php\"\n                ],\n                \"psr-4\": {\n                    \"phpseclib3\\\\\": \"phpseclib/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Jim Wigginton\",\n                    \"email\": \"terrafrost@php.net\",\n                    \"role\": \"Lead Developer\"\n                },\n                {\n                    \"name\": \"Patrick Monnerat\",\n                    \"email\": \"pm@datasphere.ch\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Andreas Fischer\",\n                    \"email\": \"bantu@phpbb.com\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Hans-Jürgen Petrich\",\n                    \"email\": \"petrich@tronic-media.com\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"graham@alt-three.com\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.\",\n            \"homepage\": \"http://phpseclib.sourceforge.net\",\n            \"keywords\": [\n                \"BigInteger\",\n                \"aes\",\n                \"asn.1\",\n                \"asn1\",\n                \"blowfish\",\n                \"crypto\",\n                \"cryptography\",\n                \"encryption\",\n                \"rsa\",\n                \"security\",\n                \"sftp\",\n                \"signature\",\n                \"signing\",\n                \"ssh\",\n                \"twofish\",\n                \"x.509\",\n                \"x509\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/phpseclib/phpseclib/issues\",\n                \"source\": \"https://github.com/phpseclib/phpseclib/tree/3.0.48\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/terrafrost\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://www.patreon.com/phpseclib\",\n                    \"type\": \"patreon\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/phpseclib/phpseclib\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../phpseclib/phpseclib\"\n        },\n        {\n            \"name\": \"psr/cache\",\n            \"version\": \"3.0.0\",\n            \"version_normalized\": \"3.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/cache.git\",\n                \"reference\": \"aa5030cfa5405eccfdcb1083ce040c2cb8d253bf\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf\",\n                \"reference\": \"aa5030cfa5405eccfdcb1083ce040c2cb8d253bf\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.0.0\"\n            },\n            \"time\": \"2021-02-03T23:26:27+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Cache\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for caching libraries\",\n            \"keywords\": [\n                \"cache\",\n                \"psr\",\n                \"psr-6\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/cache/tree/3.0.0\"\n            },\n            \"install-path\": \"../psr/cache\"\n        },\n        {\n            \"name\": \"psr/http-client\",\n            \"version\": \"1.0.3\",\n            \"version_normalized\": \"1.0.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/http-client.git\",\n                \"reference\": \"bb5906edc1c324c9a05aa0873d40117941e5fa90\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90\",\n                \"reference\": \"bb5906edc1c324c9a05aa0873d40117941e5fa90\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.0 || ^8.0\",\n                \"psr/http-message\": \"^1.0 || ^2.0\"\n            },\n            \"time\": \"2023-09-23T14:17:50+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Http\\\\Client\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for HTTP clients\",\n            \"homepage\": \"https://github.com/php-fig/http-client\",\n            \"keywords\": [\n                \"http\",\n                \"http-client\",\n                \"psr\",\n                \"psr-18\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/http-client\"\n            },\n            \"install-path\": \"../psr/http-client\"\n        },\n        {\n            \"name\": \"psr/http-factory\",\n            \"version\": \"1.1.0\",\n            \"version_normalized\": \"1.1.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/http-factory.git\",\n                \"reference\": \"2b4765fddfe3b508ac62f829e852b1501d3f6e8a\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a\",\n                \"reference\": \"2b4765fddfe3b508ac62f829e852b1501d3f6e8a\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.1\",\n                \"psr/http-message\": \"^1.0 || ^2.0\"\n            },\n            \"time\": \"2024-04-15T12:06:14+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"PSR-17: Common interfaces for PSR-7 HTTP message factories\",\n            \"keywords\": [\n                \"factory\",\n                \"http\",\n                \"message\",\n                \"psr\",\n                \"psr-17\",\n                \"psr-7\",\n                \"request\",\n                \"response\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/http-factory\"\n            },\n            \"install-path\": \"../psr/http-factory\"\n        },\n        {\n            \"name\": \"psr/http-message\",\n            \"version\": \"2.0\",\n            \"version_normalized\": \"2.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/http-message.git\",\n                \"reference\": \"402d35bcb92c70c026d1a6a9883f06b2ead23d71\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71\",\n                \"reference\": \"402d35bcb92c70c026d1a6a9883f06b2ead23d71\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.2 || ^8.0\"\n            },\n            \"time\": \"2023-04-04T09:54:51+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"2.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for HTTP messages\",\n            \"homepage\": \"https://github.com/php-fig/http-message\",\n            \"keywords\": [\n                \"http\",\n                \"http-message\",\n                \"psr\",\n                \"psr-7\",\n                \"request\",\n                \"response\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/http-message/tree/2.0\"\n            },\n            \"install-path\": \"../psr/http-message\"\n        },\n        {\n            \"name\": \"psr/log\",\n            \"version\": \"3.0.2\",\n            \"version_normalized\": \"3.0.2.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/log.git\",\n                \"reference\": \"f16e1d5863e37f8d8c2a01719f5b34baa2b714d3\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3\",\n                \"reference\": \"f16e1d5863e37f8d8c2a01719f5b34baa2b714d3\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.0.0\"\n            },\n            \"time\": \"2024-09-11T13:17:53+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"3.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Log\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for logging libraries\",\n            \"homepage\": \"https://github.com/php-fig/log\",\n            \"keywords\": [\n                \"log\",\n                \"psr\",\n                \"psr-3\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/log/tree/3.0.2\"\n            },\n            \"install-path\": \"../psr/log\"\n        },\n        {\n            \"name\": \"ralouphie/getallheaders\",\n            \"version\": \"3.0.3\",\n            \"version_normalized\": \"3.0.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/ralouphie/getallheaders.git\",\n                \"reference\": \"120b605dfeb996808c31b6477290a714d356e822\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822\",\n                \"reference\": \"120b605dfeb996808c31b6477290a714d356e822\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.6\"\n            },\n            \"require-dev\": {\n                \"php-coveralls/php-coveralls\": \"^2.1\",\n                \"phpunit/phpunit\": \"^5 || ^6.5\"\n            },\n            \"time\": \"2019-03-08T08:55:37+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/getallheaders.php\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Ralph Khattar\",\n                    \"email\": \"ralph.khattar@gmail.com\"\n                }\n            ],\n            \"description\": \"A polyfill for getallheaders.\",\n            \"support\": {\n                \"issues\": \"https://github.com/ralouphie/getallheaders/issues\",\n                \"source\": \"https://github.com/ralouphie/getallheaders/tree/develop\"\n            },\n            \"install-path\": \"../ralouphie/getallheaders\"\n        },\n        {\n            \"name\": \"ramsey/collection\",\n            \"version\": \"2.1.1\",\n            \"version_normalized\": \"2.1.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/ramsey/collection.git\",\n                \"reference\": \"344572933ad0181accbf4ba763e85a0306a8c5e2\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2\",\n                \"reference\": \"344572933ad0181accbf4ba763e85a0306a8c5e2\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.1\"\n            },\n            \"require-dev\": {\n                \"captainhook/plugin-composer\": \"^5.3\",\n                \"ergebnis/composer-normalize\": \"^2.45\",\n                \"fakerphp/faker\": \"^1.24\",\n                \"hamcrest/hamcrest-php\": \"^2.0\",\n                \"jangregor/phpstan-prophecy\": \"^2.1\",\n                \"mockery/mockery\": \"^1.6\",\n                \"php-parallel-lint/php-console-highlighter\": \"^1.0\",\n                \"php-parallel-lint/php-parallel-lint\": \"^1.4\",\n                \"phpspec/prophecy-phpunit\": \"^2.3\",\n                \"phpstan/extension-installer\": \"^1.4\",\n                \"phpstan/phpstan\": \"^2.1\",\n                \"phpstan/phpstan-mockery\": \"^2.0\",\n                \"phpstan/phpstan-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^10.5\",\n                \"ramsey/coding-standard\": \"^2.3\",\n                \"ramsey/conventional-commits\": \"^1.6\",\n                \"roave/security-advisories\": \"dev-latest\"\n            },\n            \"time\": \"2025-03-22T05:38:12+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"captainhook\": {\n                    \"force-install\": true\n                },\n                \"ramsey/conventional-commits\": {\n                    \"configFile\": \"conventional-commits.json\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Ramsey\\\\Collection\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Ben Ramsey\",\n                    \"email\": \"ben@benramsey.com\",\n                    \"homepage\": \"https://benramsey.com\"\n                }\n            ],\n            \"description\": \"A PHP library for representing and manipulating collections.\",\n            \"keywords\": [\n                \"array\",\n                \"collection\",\n                \"hash\",\n                \"map\",\n                \"queue\",\n                \"set\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/ramsey/collection/issues\",\n                \"source\": \"https://github.com/ramsey/collection/tree/2.1.1\"\n            },\n            \"install-path\": \"../ramsey/collection\"\n        },\n        {\n            \"name\": \"ramsey/uuid\",\n            \"version\": \"4.9.2\",\n            \"version_normalized\": \"4.9.2.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/ramsey/uuid.git\",\n                \"reference\": \"8429c78ca35a09f27565311b98101e2826affde0\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0\",\n                \"reference\": \"8429c78ca35a09f27565311b98101e2826affde0\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"brick/math\": \"^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14\",\n                \"php\": \"^8.0\",\n                \"ramsey/collection\": \"^1.2 || ^2.0\"\n            },\n            \"replace\": {\n                \"rhumsaa/uuid\": \"self.version\"\n            },\n            \"require-dev\": {\n                \"captainhook/captainhook\": \"^5.25\",\n                \"captainhook/plugin-composer\": \"^5.3\",\n                \"dealerdirect/phpcodesniffer-composer-installer\": \"^1.0\",\n                \"ergebnis/composer-normalize\": \"^2.47\",\n                \"mockery/mockery\": \"^1.6\",\n                \"paragonie/random-lib\": \"^2\",\n                \"php-mock/php-mock\": \"^2.6\",\n                \"php-mock/php-mock-mockery\": \"^1.5\",\n                \"php-parallel-lint/php-parallel-lint\": \"^1.4.0\",\n                \"phpbench/phpbench\": \"^1.2.14\",\n                \"phpstan/extension-installer\": \"^1.4\",\n                \"phpstan/phpstan\": \"^2.1\",\n                \"phpstan/phpstan-mockery\": \"^2.0\",\n                \"phpstan/phpstan-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.6\",\n                \"slevomat/coding-standard\": \"^8.18\",\n                \"squizlabs/php_codesniffer\": \"^3.13\"\n            },\n            \"suggest\": {\n                \"ext-bcmath\": \"Enables faster math with arbitrary-precision integers using BCMath.\",\n                \"ext-gmp\": \"Enables faster math with arbitrary-precision integers using GMP.\",\n                \"ext-uuid\": \"Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.\",\n                \"paragonie/random-lib\": \"Provides RandomLib for use with the RandomLibAdapter\",\n                \"ramsey/uuid-doctrine\": \"Allows the use of Ramsey\\\\Uuid\\\\Uuid as Doctrine field type.\"\n            },\n            \"time\": \"2025-12-14T04:43:48+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"captainhook\": {\n                    \"force-install\": true\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/functions.php\"\n                ],\n                \"psr-4\": {\n                    \"Ramsey\\\\Uuid\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"description\": \"A PHP library for generating and working with universally unique identifiers (UUIDs).\",\n            \"keywords\": [\n                \"guid\",\n                \"identifier\",\n                \"uuid\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/ramsey/uuid/issues\",\n                \"source\": \"https://github.com/ramsey/uuid/tree/4.9.2\"\n            },\n            \"install-path\": \"../ramsey/uuid\"\n        },\n        {\n            \"name\": \"rize/uri-template\",\n            \"version\": \"0.4.1\",\n            \"version_normalized\": \"0.4.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/rize/UriTemplate.git\",\n                \"reference\": \"abb53c8b73a5b6c24e11f49036ab842f560cad33\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/rize/UriTemplate/zipball/abb53c8b73a5b6c24e11f49036ab842f560cad33\",\n                \"reference\": \"abb53c8b73a5b6c24e11f49036ab842f560cad33\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1\"\n            },\n            \"require-dev\": {\n                \"friendsofphp/php-cs-fixer\": \"^3.63\",\n                \"phpstan/phpstan\": \"^1.12\",\n                \"phpunit/phpunit\": \"~10.0\"\n            },\n            \"time\": \"2025-12-02T15:19:04+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Rize\\\\\": \"src/Rize\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Marut K\",\n                    \"homepage\": \"http://twitter.com/rezigned\"\n                }\n            ],\n            \"description\": \"PHP URI Template (RFC 6570) supports both expansion & extraction\",\n            \"keywords\": [\n                \"RFC 6570\",\n                \"template\",\n                \"uri\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/rize/UriTemplate/issues\",\n                \"source\": \"https://github.com/rize/UriTemplate/tree/0.4.1\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://www.paypal.me/rezigned\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/rezigned\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://opencollective.com/rize-uri-template\",\n                    \"type\": \"open_collective\"\n                }\n            ],\n            \"install-path\": \"../rize/uri-template\"\n        },\n        {\n            \"name\": \"symfony/deprecation-contracts\",\n            \"version\": \"v3.6.0\",\n            \"version_normalized\": \"3.6.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/deprecation-contracts.git\",\n                \"reference\": \"63afe740e99a13ba87ec199bb07bbdee937a5b62\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62\",\n                \"reference\": \"63afe740e99a13ba87ec199bb07bbdee937a5b62\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1\"\n            },\n            \"time\": \"2024-09-25T14:21:43+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"thanks\": {\n                    \"url\": \"https://github.com/symfony/contracts\",\n                    \"name\": \"symfony/contracts\"\n                },\n                \"branch-alias\": {\n                    \"dev-main\": \"3.6-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"function.php\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Nicolas Grekas\",\n                    \"email\": \"p@tchwork.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"A generic function and convention to trigger deprecation notices\",\n            \"homepage\": \"https://symfony.com\",\n            \"support\": {\n                \"source\": \"https://github.com/symfony/deprecation-contracts/tree/v3.6.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/deprecation-contracts\"\n        }\n    ],\n    \"dev\": false,\n    \"dev-package-names\": []\n}\n"
  },
  {
    "path": "lib/Google/vendor/composer/installed.php",
    "content": "<?php return array(\n    'root' => array(\n        'name' => 'google/apiclient',\n        'pretty_version' => 'dev-latest',\n        'version' => 'dev-latest',\n        'reference' => '9c990229a1ed5cd1870e57633f92abd945628365',\n        'type' => 'library',\n        'install_path' => __DIR__ . '/../../',\n        'aliases' => array(),\n        'dev' => false,\n    ),\n    'versions' => array(\n        'brick/math' => array(\n            'pretty_version' => '0.13.1',\n            'version' => '0.13.1.0',\n            'reference' => 'fc7ed316430118cc7836bf45faff18d5dfc8de04',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../brick/math',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'firebase/php-jwt' => array(\n            'pretty_version' => 'v7.0.2',\n            'version' => '7.0.2.0',\n            'reference' => '5645b43af647b6947daac1d0f659dd1fbe8d3b65',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../firebase/php-jwt',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/apiclient' => array(\n            'pretty_version' => 'dev-latest',\n            'version' => 'dev-latest',\n            'reference' => '9c990229a1ed5cd1870e57633f92abd945628365',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../../',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/apiclient-services' => array(\n            'pretty_version' => 'v0.427.0',\n            'version' => '0.427.0.0',\n            'reference' => 'cc74cd104a1ed1cf545480c52f13831e6eb0efe2',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/apiclient-services',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/auth' => array(\n            'pretty_version' => 'v1.50.0',\n            'version' => '1.50.0.0',\n            'reference' => 'e1c26a718198e16d8a3c69b1cae136b73f959b0f',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/auth',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/cloud-core' => array(\n            'pretty_version' => 'v1.69.0',\n            'version' => '1.69.0.0',\n            'reference' => 'a35bcf9d79f7007eaaf325e00011d08f40494fb1',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/cloud-core',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/cloud-storage' => array(\n            'pretty_version' => 'v1.49.0',\n            'version' => '1.49.0.0',\n            'reference' => '30aefa19ce5af165cef8bb39c224cfa865461541',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/cloud-storage',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/common-protos' => array(\n            'pretty_version' => '4.12.4',\n            'version' => '4.12.4.0',\n            'reference' => '0127156899af0df2681bd42024c60bd5360d64e3',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/common-protos',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/gax' => array(\n            'pretty_version' => 'v1.40.0',\n            'version' => '1.40.0.0',\n            'reference' => '1d3834d60b3f0794427c64d2b27d7c627fbba92c',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/gax',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/grpc-gcp' => array(\n            'pretty_version' => 'v0.4.1',\n            'version' => '0.4.1.0',\n            'reference' => 'e585b7721bbe806ef45b5c52ae43dfc2bff89968',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/grpc-gcp',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/longrunning' => array(\n            'pretty_version' => '0.6.0',\n            'version' => '0.6.0.0',\n            'reference' => '226d3b5166eaa13754cc5e452b37872478e23375',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/longrunning',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'google/protobuf' => array(\n            'pretty_version' => 'v4.33.2',\n            'version' => '4.33.2.0',\n            'reference' => 'fbd96b7bf1343f4b0d8fb358526c7ba4d72f1318',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../google/protobuf',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'grpc/grpc' => array(\n            'pretty_version' => '1.74.0',\n            'version' => '1.74.0.0',\n            'reference' => '32bf4dba256d60d395582fb6e4e8d3936bcdb713',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../grpc/grpc',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'guzzlehttp/guzzle' => array(\n            'pretty_version' => '7.10.0',\n            'version' => '7.10.0.0',\n            'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../guzzlehttp/guzzle',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'guzzlehttp/promises' => array(\n            'pretty_version' => '2.3.0',\n            'version' => '2.3.0.0',\n            'reference' => '481557b130ef3790cf82b713667b43030dc9c957',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../guzzlehttp/promises',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'guzzlehttp/psr7' => array(\n            'pretty_version' => '2.8.0',\n            'version' => '2.8.0.0',\n            'reference' => '21dc724a0583619cd1652f673303492272778051',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../guzzlehttp/psr7',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'monolog/monolog' => array(\n            'pretty_version' => '3.10.0',\n            'version' => '3.10.0.0',\n            'reference' => 'b321dd6749f0bf7189444158a3ce785cc16d69b0',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../monolog/monolog',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'paragonie/constant_time_encoding' => array(\n            'pretty_version' => 'v3.1.3',\n            'version' => '3.1.3.0',\n            'reference' => 'd5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'paragonie/random_compat' => array(\n            'pretty_version' => 'v9.99.100',\n            'version' => '9.99.100.0',\n            'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../paragonie/random_compat',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'phpseclib/phpseclib' => array(\n            'pretty_version' => '3.0.48',\n            'version' => '3.0.48.0',\n            'reference' => '64065a5679c50acb886e82c07aa139b0f757bb89',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../phpseclib/phpseclib',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/cache' => array(\n            'pretty_version' => '3.0.0',\n            'version' => '3.0.0.0',\n            'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/cache',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-client' => array(\n            'pretty_version' => '1.0.3',\n            'version' => '1.0.3.0',\n            'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/http-client',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-client-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/http-factory' => array(\n            'pretty_version' => '1.1.0',\n            'version' => '1.1.0.0',\n            'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/http-factory',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-factory-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/http-message' => array(\n            'pretty_version' => '2.0',\n            'version' => '2.0.0.0',\n            'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/http-message',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-message-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/log' => array(\n            'pretty_version' => '3.0.2',\n            'version' => '3.0.2.0',\n            'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/log',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/log-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '3.0.0',\n            ),\n        ),\n        'ralouphie/getallheaders' => array(\n            'pretty_version' => '3.0.3',\n            'version' => '3.0.3.0',\n            'reference' => '120b605dfeb996808c31b6477290a714d356e822',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../ralouphie/getallheaders',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'ramsey/collection' => array(\n            'pretty_version' => '2.1.1',\n            'version' => '2.1.1.0',\n            'reference' => '344572933ad0181accbf4ba763e85a0306a8c5e2',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../ramsey/collection',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'ramsey/uuid' => array(\n            'pretty_version' => '4.9.2',\n            'version' => '4.9.2.0',\n            'reference' => '8429c78ca35a09f27565311b98101e2826affde0',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../ramsey/uuid',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'rhumsaa/uuid' => array(\n            'dev_requirement' => false,\n            'replaced' => array(\n                0 => '4.9.2',\n            ),\n        ),\n        'rize/uri-template' => array(\n            'pretty_version' => '0.4.1',\n            'version' => '0.4.1.0',\n            'reference' => 'abb53c8b73a5b6c24e11f49036ab842f560cad33',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../rize/uri-template',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/deprecation-contracts' => array(\n            'pretty_version' => 'v3.6.0',\n            'version' => '3.6.0.0',\n            'reference' => '63afe740e99a13ba87ec199bb07bbdee937a5b62',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n    ),\n);\n"
  },
  {
    "path": "lib/Google/vendor/composer/platform_check.php",
    "content": "<?php\n\n// platform_check.php @generated by Composer\n\n$issues = array();\n\nif (!(PHP_VERSION_ID >= 80100)) {\n    $issues[] = 'Your Composer dependencies require a PHP version \">= 8.1.0\". You are running ' . PHP_VERSION . '.';\n}\n\nif ($issues) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);\n        } elseif (!headers_sent()) {\n            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;\n        }\n    }\n    throw new \\RuntimeException(\n        'Composer detected issues in your platform: ' . implode(' ', $issues)\n    );\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/CHANGELOG.md",
    "content": "# Changelog\n\n## [7.0.2](https://github.com/firebase/php-jwt/compare/v7.0.1...v7.0.2) (2025-12-16)\n\n\n### Bug Fixes\n\n* add key length validation for ec keys ([#615](https://github.com/firebase/php-jwt/issues/615)) ([7044f9a](https://github.com/firebase/php-jwt/commit/7044f9ae7e7d175d28cca71714feb236f1c0e252))\n\n## [7.0.0](https://github.com/firebase/php-jwt/compare/v6.11.1...v7.0.0) (2025-12-15)\n\n\n### ⚠️ ⚠️ ⚠️  Security Fixes ⚠️ ⚠️ ⚠️ \n * add key size validation ([#613](https://github.com/firebase/php-jwt/issues/613)) ([6b80341](https://github.com/firebase/php-jwt/commit/6b80341bf57838ea2d011487917337901cd71576))\n **NOTE**: This fix will cause keys with a size below the minimally allowed size to break. \n\n### Features\n\n* add SensitiveParameter attribute to security-critical parameters ([#603](https://github.com/firebase/php-jwt/issues/603)) ([4dbfac0](https://github.com/firebase/php-jwt/commit/4dbfac0260eeb0e9e643063c99998e3219cc539b))\n* store timestamp in `ExpiredException` ([#604](https://github.com/firebase/php-jwt/issues/604)) ([f174826](https://github.com/firebase/php-jwt/commit/f1748260d218a856b6a0c23715ac7fae1d7ca95b))\n\n\n### Bug Fixes\n\n* validate iat and nbf on payload ([#568](https://github.com/firebase/php-jwt/issues/568)) ([953b2c8](https://github.com/firebase/php-jwt/commit/953b2c88bb445b7e3bb82a5141928f13d7343afd))\n\n## [6.11.1](https://github.com/firebase/php-jwt/compare/v6.11.0...v6.11.1) (2025-04-09)\n\n\n### Bug Fixes\n\n* update error text for consistency ([#528](https://github.com/firebase/php-jwt/issues/528)) ([c11113a](https://github.com/firebase/php-jwt/commit/c11113afa13265e016a669e75494b9203b8a7775))\n\n## [6.11.0](https://github.com/firebase/php-jwt/compare/v6.10.2...v6.11.0) (2025-01-23)\n\n\n### Features\n\n* support octet typed JWK ([#587](https://github.com/firebase/php-jwt/issues/587)) ([7cb8a26](https://github.com/firebase/php-jwt/commit/7cb8a265fa81edf2fa6ef8098f5bc5ae573c33ad))\n\n\n### Bug Fixes\n\n* refactor constructor Key to use PHP 8.0 syntax ([#577](https://github.com/firebase/php-jwt/issues/577)) ([29fa2ce](https://github.com/firebase/php-jwt/commit/29fa2ce9e0582cd397711eec1e80c05ce20fabca))\n\n## [6.10.2](https://github.com/firebase/php-jwt/compare/v6.10.1...v6.10.2) (2024-11-24)\n\n\n### Bug Fixes\n\n* Mitigate PHP8.4 deprecation warnings ([#570](https://github.com/firebase/php-jwt/issues/570)) ([76808fa](https://github.com/firebase/php-jwt/commit/76808fa227f3811aa5cdb3bf81233714b799a5b5))\n* support php 8.4 ([#583](https://github.com/firebase/php-jwt/issues/583)) ([e3d68b0](https://github.com/firebase/php-jwt/commit/e3d68b044421339443c74199edd020e03fb1887e))\n\n## [6.10.1](https://github.com/firebase/php-jwt/compare/v6.10.0...v6.10.1) (2024-05-18)\n\n\n### Bug Fixes\n\n* ensure ratelimit expiry is set every time ([#556](https://github.com/firebase/php-jwt/issues/556)) ([09cb208](https://github.com/firebase/php-jwt/commit/09cb2081c2c3bc0f61e2f2a5fbea5741f7498648))\n* ratelimit cache expiration ([#550](https://github.com/firebase/php-jwt/issues/550)) ([dda7250](https://github.com/firebase/php-jwt/commit/dda725033585ece30ff8cae8937320d7e9f18bae))\n\n## [6.10.0](https://github.com/firebase/php-jwt/compare/v6.9.0...v6.10.0) (2023-11-28)\n\n\n### Features\n\n* allow typ header override ([#546](https://github.com/firebase/php-jwt/issues/546)) ([79cb30b](https://github.com/firebase/php-jwt/commit/79cb30b729a22931b2fbd6b53f20629a83031ba9))\n\n## [6.9.0](https://github.com/firebase/php-jwt/compare/v6.8.1...v6.9.0) (2023-10-04)\n\n\n### Features\n\n* add payload to jwt exception ([#521](https://github.com/firebase/php-jwt/issues/521)) ([175edf9](https://github.com/firebase/php-jwt/commit/175edf958bb61922ec135b2333acf5622f2238a2))\n\n## [6.8.1](https://github.com/firebase/php-jwt/compare/v6.8.0...v6.8.1) (2023-07-14)\n\n\n### Bug Fixes\n\n* accept float claims but round down to ignore them ([#492](https://github.com/firebase/php-jwt/issues/492)) ([3936842](https://github.com/firebase/php-jwt/commit/39368423beeaacb3002afa7dcb75baebf204fe7e))\n* different BeforeValidException messages for nbf and iat ([#526](https://github.com/firebase/php-jwt/issues/526)) ([0a53cf2](https://github.com/firebase/php-jwt/commit/0a53cf2986e45c2bcbf1a269f313ebf56a154ee4))\n\n## [6.8.0](https://github.com/firebase/php-jwt/compare/v6.7.0...v6.8.0) (2023-06-14)\n\n\n### Features\n\n* add support for P-384 curve ([#515](https://github.com/firebase/php-jwt/issues/515)) ([5de4323](https://github.com/firebase/php-jwt/commit/5de4323f4baf4d70bca8663bd87682a69c656c3d))\n\n\n### Bug Fixes\n\n* handle invalid http responses ([#508](https://github.com/firebase/php-jwt/issues/508)) ([91c39c7](https://github.com/firebase/php-jwt/commit/91c39c72b22fc3e1191e574089552c1f2041c718))\n\n## [6.7.0](https://github.com/firebase/php-jwt/compare/v6.6.0...v6.7.0) (2023-06-14)\n\n\n### Features\n\n* add ed25519 support to JWK (public keys) ([#452](https://github.com/firebase/php-jwt/issues/452)) ([e53979a](https://github.com/firebase/php-jwt/commit/e53979abae927de916a75b9d239cfda8ce32be2a))\n\n## [6.6.0](https://github.com/firebase/php-jwt/compare/v6.5.0...v6.6.0) (2023-06-13)\n\n\n### Features\n\n* allow get headers when decoding token ([#442](https://github.com/firebase/php-jwt/issues/442)) ([fb85f47](https://github.com/firebase/php-jwt/commit/fb85f47cfaeffdd94faf8defdf07164abcdad6c3))\n\n\n### Bug Fixes\n\n* only check iat if nbf is not used ([#493](https://github.com/firebase/php-jwt/issues/493)) ([398ccd2](https://github.com/firebase/php-jwt/commit/398ccd25ea12fa84b9e4f1085d5ff448c21ec797))\n\n## [6.5.0](https://github.com/firebase/php-jwt/compare/v6.4.0...v6.5.0) (2023-05-12)\n\n\n### Bug Fixes\n\n* allow KID of '0' ([#505](https://github.com/firebase/php-jwt/issues/505)) ([9dc46a9](https://github.com/firebase/php-jwt/commit/9dc46a9c3e5801294249cfd2554c5363c9f9326a))\n\n\n### Miscellaneous Chores\n\n* drop support for PHP 7.3 ([#495](https://github.com/firebase/php-jwt/issues/495))\n\n## [6.4.0](https://github.com/firebase/php-jwt/compare/v6.3.2...v6.4.0) (2023-02-08)\n\n\n### Features\n\n* add support for W3C ES256K ([#462](https://github.com/firebase/php-jwt/issues/462)) ([213924f](https://github.com/firebase/php-jwt/commit/213924f51936291fbbca99158b11bd4ae56c2c95))\n* improve caching by only decoding jwks when necessary ([#486](https://github.com/firebase/php-jwt/issues/486)) ([78d3ed1](https://github.com/firebase/php-jwt/commit/78d3ed1073553f7d0bbffa6c2010009a0d483d5c))\n\n## [6.3.2](https://github.com/firebase/php-jwt/compare/v6.3.1...v6.3.2) (2022-11-01)\n\n\n### Bug Fixes\n\n* check kid before using as array index ([bad1b04](https://github.com/firebase/php-jwt/commit/bad1b040d0c736bbf86814c6b5ae614f517cf7bd))\n\n## [6.3.1](https://github.com/firebase/php-jwt/compare/v6.3.0...v6.3.1) (2022-11-01)\n\n\n### Bug Fixes\n\n* casing of GET for PSR compat ([#451](https://github.com/firebase/php-jwt/issues/451)) ([60b52b7](https://github.com/firebase/php-jwt/commit/60b52b71978790eafcf3b95cfbd83db0439e8d22))\n* string interpolation format for php 8.2 ([#446](https://github.com/firebase/php-jwt/issues/446)) ([2e07d8a](https://github.com/firebase/php-jwt/commit/2e07d8a1524d12b69b110ad649f17461d068b8f2))\n\n## 6.3.0 / 2022-07-15\n\n - Added ES256 support to JWK parsing ([#399](https://github.com/firebase/php-jwt/pull/399))\n - Fixed potential caching error in `CachedKeySet` by caching jwks as strings ([#435](https://github.com/firebase/php-jwt/pull/435))\n\n## 6.2.0 / 2022-05-14\n\n - Added `CachedKeySet` ([#397](https://github.com/firebase/php-jwt/pull/397))\n - Added `$defaultAlg` parameter to `JWT::parseKey` and `JWT::parseKeySet` ([#426](https://github.com/firebase/php-jwt/pull/426)).\n\n## 6.1.0 / 2022-03-23\n\n - Drop support for PHP 5.3, 5.4, 5.5, 5.6, and 7.0\n - Add parameter typing and return types where possible\n\n## 6.0.0 / 2022-01-24\n\n - **Backwards-Compatibility Breaking Changes**: See the [Release Notes](https://github.com/firebase/php-jwt/releases/tag/v6.0.0) for more information.\n - New Key object to prevent key/algorithm type confusion (#365)\n - Add JWK support (#273)\n - Add ES256 support (#256)\n - Add ES384 support (#324)\n - Add Ed25519 support (#343)\n\n## 5.0.0 / 2017-06-26\n- Support RS384 and RS512.\n  See [#117](https://github.com/firebase/php-jwt/pull/117). Thanks [@joostfaassen](https://github.com/joostfaassen)!\n- Add an example for RS256 openssl.\n  See [#125](https://github.com/firebase/php-jwt/pull/125). Thanks [@akeeman](https://github.com/akeeman)!\n- Detect invalid Base64 encoding in signature.\n  See [#162](https://github.com/firebase/php-jwt/pull/162). Thanks [@psignoret](https://github.com/psignoret)!\n- Update `JWT::verify` to handle OpenSSL errors.\n  See [#159](https://github.com/firebase/php-jwt/pull/159). Thanks [@bshaffer](https://github.com/bshaffer)!\n- Add `array` type hinting to `decode` method\n  See [#101](https://github.com/firebase/php-jwt/pull/101). Thanks [@hywak](https://github.com/hywak)!\n- Add all JSON error types.\n  See [#110](https://github.com/firebase/php-jwt/pull/110). Thanks [@gbalduzzi](https://github.com/gbalduzzi)!\n- Bugfix 'kid' not in given key list.\n  See [#129](https://github.com/firebase/php-jwt/pull/129). Thanks [@stampycode](https://github.com/stampycode)!\n- Miscellaneous cleanup, documentation and test fixes.\n  See [#107](https://github.com/firebase/php-jwt/pull/107), [#115](https://github.com/firebase/php-jwt/pull/115),\n  [#160](https://github.com/firebase/php-jwt/pull/160), [#161](https://github.com/firebase/php-jwt/pull/161), and\n  [#165](https://github.com/firebase/php-jwt/pull/165). Thanks [@akeeman](https://github.com/akeeman),\n  [@chinedufn](https://github.com/chinedufn), and [@bshaffer](https://github.com/bshaffer)!\n\n## 4.0.0 / 2016-07-17\n- Add support for late static binding. See [#88](https://github.com/firebase/php-jwt/pull/88) for details. Thanks to [@chappy84](https://github.com/chappy84)!\n- Use static `$timestamp` instead of `time()` to improve unit testing. See [#93](https://github.com/firebase/php-jwt/pull/93) for details. Thanks to [@josephmcdermott](https://github.com/josephmcdermott)!\n- Fixes to exceptions classes. See [#81](https://github.com/firebase/php-jwt/pull/81) for details. Thanks to [@Maks3w](https://github.com/Maks3w)!\n- Fixes to PHPDoc. See [#76](https://github.com/firebase/php-jwt/pull/76) for details. Thanks to [@akeeman](https://github.com/akeeman)!\n\n## 3.0.0 / 2015-07-22\n- Minimum PHP version updated from `5.2.0` to `5.3.0`.\n- Add `\\Firebase\\JWT` namespace. See\n[#59](https://github.com/firebase/php-jwt/pull/59) for details. Thanks to\n[@Dashron](https://github.com/Dashron)!\n- Require a non-empty key to decode and verify a JWT. See\n[#60](https://github.com/firebase/php-jwt/pull/60) for details. Thanks to\n[@sjones608](https://github.com/sjones608)!\n- Cleaner documentation blocks in the code. See\n[#62](https://github.com/firebase/php-jwt/pull/62) for details. Thanks to\n[@johanderuijter](https://github.com/johanderuijter)!\n\n## 2.2.0 / 2015-06-22\n- Add support for adding custom, optional JWT headers to `JWT::encode()`. See\n[#53](https://github.com/firebase/php-jwt/pull/53/files) for details. Thanks to\n[@mcocaro](https://github.com/mcocaro)!\n\n## 2.1.0 / 2015-05-20\n- Add support for adding a leeway to `JWT:decode()` that accounts for clock skew\nbetween signing and verifying entities. Thanks to [@lcabral](https://github.com/lcabral)!\n- Add support for passing an object implementing the `ArrayAccess` interface for\n`$keys` argument in `JWT::decode()`. Thanks to [@aztech-dev](https://github.com/aztech-dev)!\n\n## 2.0.0 / 2015-04-01\n- **Note**: It is strongly recommended that you update to > v2.0.0 to address\n  known security vulnerabilities in prior versions when both symmetric and\n  asymmetric keys are used together.\n- Update signature for `JWT::decode(...)` to require an array of supported\n  algorithms to use when verifying token signatures.\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/LICENSE",
    "content": "Copyright (c) 2011, Neuman Vong\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n\n    * Neither the name of the copyright holder nor the names of other\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/README.md",
    "content": "![Build Status](https://github.com/firebase/php-jwt/actions/workflows/tests.yml/badge.svg)\n[![Latest Stable Version](https://poser.pugx.org/firebase/php-jwt/v/stable)](https://packagist.org/packages/firebase/php-jwt)\n[![Total Downloads](https://poser.pugx.org/firebase/php-jwt/downloads)](https://packagist.org/packages/firebase/php-jwt)\n[![License](https://poser.pugx.org/firebase/php-jwt/license)](https://packagist.org/packages/firebase/php-jwt)\n\nPHP-JWT\n=======\nA simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to [RFC 7519](https://tools.ietf.org/html/rfc7519).\n\nInstallation\n------------\n\nUse composer to manage your dependencies and download PHP-JWT:\n\n```bash\ncomposer require firebase/php-jwt\n```\n\nOptionally, install the `paragonie/sodium_compat` package from composer if your\nphp env does not have libsodium installed:\n\n```bash\ncomposer require paragonie/sodium_compat\n```\n\nExample\n-------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$key = 'example_key';\n$payload = [\n    'iss' => 'http://example.org',\n    'aud' => 'http://example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n/**\n * IMPORTANT:\n * You must specify supported algorithms for your application. See\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n * for a list of spec-compliant algorithms.\n */\n$jwt = JWT::encode($payload, $key, 'HS256');\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'));\nprint_r($decoded);\n\n// Pass a stdClass in as the third parameter to get the decoded header values\n$headers = new stdClass();\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'), $headers);\nprint_r($headers);\n\n/*\n NOTE: This will now be an object instead of an associative array. To get\n an associative array, you will need to cast it as such:\n*/\n\n$decoded_array = (array) $decoded;\n\n/**\n * You can add a leeway to account for when there is a clock skew times between\n * the signing and verifying servers. It is recommended that this leeway should\n * not be bigger than a few minutes.\n *\n * Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef\n */\nJWT::$leeway = 60; // $leeway in seconds\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'));\n```\nExample encode/decode headers\n-------\nDecoding the JWT headers without verifying the JWT first is NOT recommended, and is not supported by\nthis library. This is because without verifying the JWT, the header values could have been tampered with.\nAny value pulled from an unverified header should be treated as if it could be any string sent in from an\nattacker.  If this is something you still want to do in your application for whatever reason, it's possible to\ndecode the header values manually simply by calling `json_decode` and `base64_decode` on the JWT\nheader part:\n```php\nuse Firebase\\JWT\\JWT;\n\n$key = 'example_key';\n$payload = [\n    'iss' => 'http://example.org',\n    'aud' => 'http://example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$headers = [\n    'x-forwarded-for' => 'www.google.com'\n];\n\n// Encode headers in the JWT string\n$jwt = JWT::encode($payload, $key, 'HS256', null, $headers);\n\n// Decode headers from the JWT string WITHOUT validation\n// **IMPORTANT**: This operation is vulnerable to attacks, as the JWT has not yet been verified.\n// These headers could be any value sent by an attacker.\nlist($headersB64, $payloadB64, $sig) = explode('.', $jwt);\n$decoded = json_decode(base64_decode($headersB64), true);\n\nprint_r($decoded);\n```\nExample with RS256 (openssl)\n----------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$privateKey = <<<EOD\n-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAuzWHNM5f+amCjQztc5QTfJfzCC5J4nuW+L/aOxZ4f8J3Frew\nM2c/dufrnmedsApb0By7WhaHlcqCh/ScAPyJhzkPYLae7bTVro3hok0zDITR8F6S\nJGL42JAEUk+ILkPI+DONM0+3vzk6Kvfe548tu4czCuqU8BGVOlnp6IqBHhAswNMM\n78pos/2z0CjPM4tbeXqSTTbNkXRboxjU29vSopcT51koWOgiTf3C7nJUoMWZHZI5\nHqnIhPAG9yv8HAgNk6CMk2CadVHDo4IxjxTzTTqo1SCSH2pooJl9O8at6kkRYsrZ\nWwsKlOFE2LUce7ObnXsYihStBUDoeBQlGG/BwQIDAQABAoIBAFtGaOqNKGwggn9k\n6yzr6GhZ6Wt2rh1Xpq8XUz514UBhPxD7dFRLpbzCrLVpzY80LbmVGJ9+1pJozyWc\nVKeCeUdNwbqkr240Oe7GTFmGjDoxU+5/HX/SJYPpC8JZ9oqgEA87iz+WQX9hVoP2\noF6EB4ckDvXmk8FMwVZW2l2/kd5mrEVbDaXKxhvUDf52iVD+sGIlTif7mBgR99/b\nc3qiCnxCMmfYUnT2eh7Vv2LhCR/G9S6C3R4lA71rEyiU3KgsGfg0d82/XWXbegJW\nh3QbWNtQLxTuIvLq5aAryV3PfaHlPgdgK0ft6ocU2de2FagFka3nfVEyC7IUsNTK\nbq6nhAECgYEA7d/0DPOIaItl/8BWKyCuAHMss47j0wlGbBSHdJIiS55akMvnAG0M\n39y22Qqfzh1at9kBFeYeFIIU82ZLF3xOcE3z6pJZ4Dyvx4BYdXH77odo9uVK9s1l\n3T3BlMcqd1hvZLMS7dviyH79jZo4CXSHiKzc7pQ2YfK5eKxKqONeXuECgYEAyXlG\nvonaus/YTb1IBei9HwaccnQ/1HRn6MvfDjb7JJDIBhNClGPt6xRlzBbSZ73c2QEC\n6Fu9h36K/HZ2qcLd2bXiNyhIV7b6tVKk+0Psoj0dL9EbhsD1OsmE1nTPyAc9XZbb\nOPYxy+dpBCUA8/1U9+uiFoCa7mIbWcSQ+39gHuECgYAz82pQfct30aH4JiBrkNqP\nnJfRq05UY70uk5k1u0ikLTRoVS/hJu/d4E1Kv4hBMqYCavFSwAwnvHUo51lVCr/y\nxQOVYlsgnwBg2MX4+GjmIkqpSVCC8D7j/73MaWb746OIYZervQ8dbKahi2HbpsiG\n8AHcVSA/agxZr38qvWV54QKBgCD5TlDE8x18AuTGQ9FjxAAd7uD0kbXNz2vUYg9L\nhFL5tyL3aAAtUrUUw4xhd9IuysRhW/53dU+FsG2dXdJu6CxHjlyEpUJl2iZu/j15\nYnMzGWHIEX8+eWRDsw/+Ujtko/B7TinGcWPz3cYl4EAOiCeDUyXnqnO1btCEUU44\nDJ1BAoGBAJuPD27ErTSVtId90+M4zFPNibFP50KprVdc8CR37BE7r8vuGgNYXmnI\nRLnGP9p3pVgFCktORuYS2J/6t84I3+A17nEoB4xvhTLeAinAW/uTQOUmNicOP4Ek\n2MsLL2kHgL8bLTmvXV4FX+PXphrDKg1XxzOYn0otuoqdAQrkK4og\n-----END RSA PRIVATE KEY-----\nEOD;\n\n$publicKey = <<<EOD\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzWHNM5f+amCjQztc5QT\nfJfzCC5J4nuW+L/aOxZ4f8J3FrewM2c/dufrnmedsApb0By7WhaHlcqCh/ScAPyJ\nhzkPYLae7bTVro3hok0zDITR8F6SJGL42JAEUk+ILkPI+DONM0+3vzk6Kvfe548t\nu4czCuqU8BGVOlnp6IqBHhAswNMM78pos/2z0CjPM4tbeXqSTTbNkXRboxjU29vS\nopcT51koWOgiTf3C7nJUoMWZHZI5HqnIhPAG9yv8HAgNk6CMk2CadVHDo4IxjxTz\nTTqo1SCSH2pooJl9O8at6kkRYsrZWwsKlOFE2LUce7ObnXsYihStBUDoeBQlGG/B\nwQIDAQAB\n-----END PUBLIC KEY-----\nEOD;\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'RS256');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));\n\n/*\n NOTE: This will now be an object instead of an associative array. To get\n an associative array, you will need to cast it as such:\n*/\n\n$decoded_array = (array) $decoded;\necho \"Decode:\\n\" . print_r($decoded_array, true) . \"\\n\";\n```\n\nExample with a passphrase\n-------------------------\n\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Your passphrase\n$passphrase = '[YOUR_PASSPHRASE]';\n\n// Your private key file with passphrase\n// Can be generated with \"ssh-keygen -t rsa -m pem\"\n$privateKeyFile = '/path/to/key-with-passphrase.pem';\n\n/** @var OpenSSLAsymmetricKey $privateKey */\n$privateKey = openssl_pkey_get_private(\n    file_get_contents($privateKeyFile),\n    $passphrase\n);\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'RS256');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n// Get public key from the private key, or pull from from a file.\n$publicKey = openssl_pkey_get_details($privateKey)['key'];\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));\necho \"Decode:\\n\" . print_r((array) $decoded, true) . \"\\n\";\n```\n\nExample with EdDSA (libsodium and Ed25519 signature)\n----------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Public and private keys are expected to be Base64 encoded. The last\n// non-empty line is used so that keys can be generated with\n// sodium_crypto_sign_keypair(). The secret keys generated by other tools may\n// need to be adjusted to match the input expected by libsodium.\n\n$keyPair = sodium_crypto_sign_keypair();\n\n$privateKey = base64_encode(sodium_crypto_sign_secretkey($keyPair));\n\n$publicKey = base64_encode(sodium_crypto_sign_publickey($keyPair));\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'EdDSA');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'EdDSA'));\necho \"Decode:\\n\" . print_r((array) $decoded, true) . \"\\n\";\n````\n\nExample with multiple keys\n--------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Example RSA keys from previous example\n// $privateKey1 = '...';\n// $publicKey1 = '...';\n\n// Example EdDSA keys from previous example\n// $privateKey2 = '...';\n// $publicKey2 = '...';\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt1 = JWT::encode($payload, $privateKey1, 'RS256', 'kid1');\n$jwt2 = JWT::encode($payload, $privateKey2, 'EdDSA', 'kid2');\necho \"Encode 1:\\n\" . print_r($jwt1, true) . \"\\n\";\necho \"Encode 2:\\n\" . print_r($jwt2, true) . \"\\n\";\n\n$keys = [\n    'kid1' => new Key($publicKey1, 'RS256'),\n    'kid2' => new Key($publicKey2, 'EdDSA'),\n];\n\n$decoded1 = JWT::decode($jwt1, $keys);\n$decoded2 = JWT::decode($jwt2, $keys);\n\necho \"Decode 1:\\n\" . print_r((array) $decoded1, true) . \"\\n\";\necho \"Decode 2:\\n\" . print_r((array) $decoded2, true) . \"\\n\";\n```\n\nUsing JWKs\n----------\n\n```php\nuse Firebase\\JWT\\JWK;\nuse Firebase\\JWT\\JWT;\n\n// Set of keys. The \"keys\" key is required. For example, the JSON response to\n// this endpoint: https://www.gstatic.com/iap/verify/public_key-jwk\n$jwks = ['keys' => []];\n\n// JWK::parseKeySet($jwks) returns an associative array of **kid** to Firebase\\JWT\\Key\n// objects. Pass this as the second parameter to JWT::decode.\nJWT::decode($jwt, JWK::parseKeySet($jwks));\n```\n\nUsing Cached Key Sets\n---------------------\n\nThe `CachedKeySet` class can be used to fetch and cache JWKS (JSON Web Key Sets) from a public URI.\nThis has the following advantages:\n\n1. The results are cached for performance.\n2. If an unrecognized key is requested, the cache is refreshed, to accomodate for key rotation.\n3. If rate limiting is enabled, the JWKS URI will not make more than 10 requests a second.\n\n```php\nuse Firebase\\JWT\\CachedKeySet;\nuse Firebase\\JWT\\JWT;\n\n// The URI for the JWKS you wish to cache the results from\n$jwksUri = 'https://www.gstatic.com/iap/verify/public_key-jwk';\n\n// Create an HTTP client (can be any PSR-7 compatible HTTP client)\n$httpClient = new GuzzleHttp\\Client();\n\n// Create an HTTP request factory (can be any PSR-17 compatible HTTP request factory)\n$httpFactory = new GuzzleHttp\\Psr\\HttpFactory();\n\n// Create a cache item pool (can be any PSR-6 compatible cache item pool)\n$cacheItemPool = Phpfastcache\\CacheManager::getInstance('files');\n\n$keySet = new CachedKeySet(\n    $jwksUri,\n    $httpClient,\n    $httpFactory,\n    $cacheItemPool,\n    null, // $expiresAfter int seconds to set the JWKS to expire\n    true  // $rateLimit    true to enable rate limit of 10 RPS on lookup of invalid keys\n);\n\n$jwt = 'eyJhbGci...'; // Some JWT signed by a key from the $jwkUri above\n$decoded = JWT::decode($jwt, $keySet);\n```\n\nMiscellaneous\n-------------\n\n#### Exception Handling\n\nWhen a call to `JWT::decode` is invalid, it will throw one of the following exceptions:\n\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\SignatureInvalidException;\nuse Firebase\\JWT\\BeforeValidException;\nuse Firebase\\JWT\\ExpiredException;\nuse DomainException;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\ntry {\n    $decoded = JWT::decode($jwt, $keys);\n} catch (InvalidArgumentException $e) {\n    // provided key/key-array is empty or malformed.\n} catch (DomainException $e) {\n    // provided algorithm is unsupported OR\n    // provided key is invalid OR\n    // unknown error thrown in openSSL or libsodium OR\n    // libsodium is required but not available.\n} catch (SignatureInvalidException $e) {\n    // provided JWT signature verification failed.\n} catch (BeforeValidException $e) {\n    // provided JWT is trying to be used before \"nbf\" claim OR\n    // provided JWT is trying to be used before \"iat\" claim.\n} catch (ExpiredException $e) {\n    // provided JWT is trying to be used after \"exp\" claim.\n} catch (UnexpectedValueException $e) {\n    // provided JWT is malformed OR\n    // provided JWT is missing an algorithm / using an unsupported algorithm OR\n    // provided JWT algorithm does not match provided key OR\n    // provided key ID in key/key-array is empty or invalid.\n}\n```\n\nAll exceptions in the `Firebase\\JWT` namespace extend `UnexpectedValueException`, and can be simplified\nlike this:\n\n```php\nuse Firebase\\JWT\\JWT;\nuse UnexpectedValueException;\ntry {\n    $decoded = JWT::decode($jwt, $keys);\n} catch (LogicException $e) {\n    // errors having to do with environmental setup or malformed JWT Keys\n} catch (UnexpectedValueException $e) {\n    // errors having to do with JWT signature and claims\n}\n```\n\n#### Casting to array\n\nThe return value of `JWT::decode` is the generic PHP object `stdClass`. If you'd like to handle with arrays\ninstead, you can do the following:\n\n```php\n// return type is stdClass\n$decoded = JWT::decode($jwt, $keys);\n\n// cast to array\n$decoded = json_decode(json_encode($decoded), true);\n```\n\nTests\n-----\nRun the tests using phpunit:\n\n```bash\n$ pear install PHPUnit\n$ phpunit --configuration phpunit.xml.dist\nPHPUnit 3.7.10 by Sebastian Bergmann.\n.....\nTime: 0 seconds, Memory: 2.50Mb\nOK (5 tests, 5 assertions)\n```\n\nNew Lines in private keys\n-----\n\nIf your private key contains `\\n` characters, be sure to wrap it in double quotes `\"\"`\nand not single quotes `''` in order to properly interpret the escaped characters.\n\nLicense\n-------\n[3-Clause BSD](http://opensource.org/licenses/BSD-3-Clause).\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/composer.json",
    "content": "{\n    \"name\": \"firebase/php-jwt\",\n    \"description\": \"A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.\",\n    \"homepage\": \"https://github.com/firebase/php-jwt\",\n    \"keywords\": [\n        \"php\",\n        \"jwt\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"Neuman Vong\",\n            \"email\": \"neuman+pear@twilio.com\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Anant Narayanan\",\n            \"email\": \"anant@php.net\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"license\": \"BSD-3-Clause\",\n    \"require\": {\n        \"php\": \"^8.0\"\n    },\n    \"suggest\": {\n        \"paragonie/sodium_compat\": \"Support EdDSA (Ed25519) signatures when libsodium is not present\",\n        \"ext-sodium\": \"Support EdDSA (Ed25519) signatures\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Firebase\\\\JWT\\\\\": \"src\"\n        }\n    },\n    \"require-dev\": {\n        \"guzzlehttp/guzzle\": \"^7.4\",\n        \"phpspec/prophecy-phpunit\": \"^2.0\",\n        \"phpunit/phpunit\": \"^9.5\",\n        \"psr/cache\": \"^2.0||^3.0\",\n        \"psr/http-client\": \"^1.0\",\n        \"psr/http-factory\": \"^1.0\"\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/BeforeValidException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass BeforeValidException extends \\UnexpectedValueException implements JWTExceptionWithPayloadInterface\n{\n    private object $payload;\n\n    public function setPayload(object $payload): void\n    {\n        $this->payload = $payload;\n    }\n\n    public function getPayload(): object\n    {\n        return $this->payload;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/CachedKeySet.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse ArrayAccess;\nuse InvalidArgumentException;\nuse LogicException;\nuse OutOfBoundsException;\nuse Psr\\Cache\\CacheItemInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Http\\Client\\ClientInterface;\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse RuntimeException;\nuse UnexpectedValueException;\n\n/**\n * @implements ArrayAccess<string, Key>\n */\nclass CachedKeySet implements ArrayAccess\n{\n    /**\n     * @var string\n     */\n    private $jwksUri;\n    /**\n     * @var ClientInterface\n     */\n    private $httpClient;\n    /**\n     * @var RequestFactoryInterface\n     */\n    private $httpFactory;\n    /**\n     * @var CacheItemPoolInterface\n     */\n    private $cache;\n    /**\n     * @var ?int\n     */\n    private $expiresAfter;\n    /**\n     * @var ?CacheItemInterface\n     */\n    private $cacheItem;\n    /**\n     * @var array<string, array<mixed>>\n     */\n    private $keySet;\n    /**\n     * @var string\n     */\n    private $cacheKey;\n    /**\n     * @var string\n     */\n    private $cacheKeyPrefix = 'jwks';\n    /**\n     * @var int\n     */\n    private $maxKeyLength = 64;\n    /**\n     * @var bool\n     */\n    private $rateLimit;\n    /**\n     * @var string\n     */\n    private $rateLimitCacheKey;\n    /**\n     * @var int\n     */\n    private $maxCallsPerMinute = 10;\n    /**\n     * @var string|null\n     */\n    private $defaultAlg;\n\n    public function __construct(\n        string $jwksUri,\n        ClientInterface $httpClient,\n        RequestFactoryInterface $httpFactory,\n        CacheItemPoolInterface $cache,\n        ?int $expiresAfter = null,\n        bool $rateLimit = false,\n        ?string $defaultAlg = null\n    ) {\n        $this->jwksUri = $jwksUri;\n        $this->httpClient = $httpClient;\n        $this->httpFactory = $httpFactory;\n        $this->cache = $cache;\n        $this->expiresAfter = $expiresAfter;\n        $this->rateLimit = $rateLimit;\n        $this->defaultAlg = $defaultAlg;\n        $this->setCacheKeys();\n    }\n\n    /**\n     * @param string $keyId\n     * @return Key\n     */\n    public function offsetGet($keyId): Key\n    {\n        if (!$this->keyIdExists($keyId)) {\n            throw new OutOfBoundsException('Key ID not found');\n        }\n        return JWK::parseKey($this->keySet[$keyId], $this->defaultAlg);\n    }\n\n    /**\n     * @param string $keyId\n     * @return bool\n     */\n    public function offsetExists($keyId): bool\n    {\n        return $this->keyIdExists($keyId);\n    }\n\n    /**\n     * @param string $offset\n     * @param Key $value\n     */\n    public function offsetSet($offset, $value): void\n    {\n        throw new LogicException('Method not implemented');\n    }\n\n    /**\n     * @param string $offset\n     */\n    public function offsetUnset($offset): void\n    {\n        throw new LogicException('Method not implemented');\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    private function formatJwksForCache(string $jwks): array\n    {\n        $jwks = json_decode($jwks, true);\n\n        if (!isset($jwks['keys'])) {\n            throw new UnexpectedValueException('\"keys\" member must exist in the JWK Set');\n        }\n\n        if (empty($jwks['keys'])) {\n            throw new InvalidArgumentException('JWK Set did not contain any keys');\n        }\n\n        $keys = [];\n        foreach ($jwks['keys'] as $k => $v) {\n            $kid = isset($v['kid']) ? $v['kid'] : $k;\n            $keys[(string) $kid] = $v;\n        }\n\n        return $keys;\n    }\n\n    private function keyIdExists(string $keyId): bool\n    {\n        if (null === $this->keySet) {\n            $item = $this->getCacheItem();\n            // Try to load keys from cache\n            if ($item->isHit()) {\n                // item found! retrieve it\n                $this->keySet = $item->get();\n                // If the cached item is a string, the JWKS response was cached (previous behavior).\n                // Parse this into expected format array<kid, jwk> instead.\n                if (\\is_string($this->keySet)) {\n                    $this->keySet = $this->formatJwksForCache($this->keySet);\n                }\n            }\n        }\n\n        if (!isset($this->keySet[$keyId])) {\n            if ($this->rateLimitExceeded()) {\n                return false;\n            }\n            $request = $this->httpFactory->createRequest('GET', $this->jwksUri);\n            $jwksResponse = $this->httpClient->sendRequest($request);\n            if ($jwksResponse->getStatusCode() !== 200) {\n                throw new UnexpectedValueException(\n                    \\sprintf('HTTP Error: %d %s for URI \"%s\"',\n                        $jwksResponse->getStatusCode(),\n                        $jwksResponse->getReasonPhrase(),\n                        $this->jwksUri,\n                    ),\n                    $jwksResponse->getStatusCode()\n                );\n            }\n            $this->keySet = $this->formatJwksForCache((string) $jwksResponse->getBody());\n\n            if (!isset($this->keySet[$keyId])) {\n                return false;\n            }\n\n            $item = $this->getCacheItem();\n            $item->set($this->keySet);\n            if ($this->expiresAfter) {\n                $item->expiresAfter($this->expiresAfter);\n            }\n            $this->cache->save($item);\n        }\n\n        return true;\n    }\n\n    private function rateLimitExceeded(): bool\n    {\n        if (!$this->rateLimit) {\n            return false;\n        }\n\n        $cacheItem = $this->cache->getItem($this->rateLimitCacheKey);\n\n        $cacheItemData = [];\n        if ($cacheItem->isHit() && \\is_array($data = $cacheItem->get())) {\n            $cacheItemData = $data;\n        }\n\n        $callsPerMinute = $cacheItemData['callsPerMinute'] ?? 0;\n        $expiry = $cacheItemData['expiry'] ?? new \\DateTime('+60 seconds', new \\DateTimeZone('UTC'));\n\n        if (++$callsPerMinute > $this->maxCallsPerMinute) {\n            return true;\n        }\n\n        $cacheItem->set(['expiry' => $expiry, 'callsPerMinute' => $callsPerMinute]);\n        $cacheItem->expiresAt($expiry);\n        $this->cache->save($cacheItem);\n        return false;\n    }\n\n    private function getCacheItem(): CacheItemInterface\n    {\n        if (\\is_null($this->cacheItem)) {\n            $this->cacheItem = $this->cache->getItem($this->cacheKey);\n        }\n\n        return $this->cacheItem;\n    }\n\n    private function setCacheKeys(): void\n    {\n        if (empty($this->jwksUri)) {\n            throw new RuntimeException('JWKS URI is empty');\n        }\n\n        // ensure we do not have illegal characters\n        $key = preg_replace('|[^a-zA-Z0-9_\\.!]|', '', $this->jwksUri);\n\n        // add prefix\n        $key = $this->cacheKeyPrefix . $key;\n\n        // Hash keys if they exceed $maxKeyLength of 64\n        if (\\strlen($key) > $this->maxKeyLength) {\n            $key = substr(hash('sha256', $key), 0, $this->maxKeyLength);\n        }\n\n        $this->cacheKey = $key;\n\n        if ($this->rateLimit) {\n            // add prefix\n            $rateLimitKey = $this->cacheKeyPrefix . 'ratelimit' . $key;\n\n            // Hash keys if they exceed $maxKeyLength of 64\n            if (\\strlen($rateLimitKey) > $this->maxKeyLength) {\n                $rateLimitKey = substr(hash('sha256', $rateLimitKey), 0, $this->maxKeyLength);\n            }\n\n            $this->rateLimitCacheKey = $rateLimitKey;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/ExpiredException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass ExpiredException extends \\UnexpectedValueException implements JWTExceptionWithPayloadInterface\n{\n    private object $payload;\n\n    private ?int $timestamp = null;\n\n    public function setPayload(object $payload): void\n    {\n        $this->payload = $payload;\n    }\n\n    public function getPayload(): object\n    {\n        return $this->payload;\n    }\n\n    public function setTimestamp(int $timestamp): void\n    {\n        $this->timestamp = $timestamp;\n    }\n\n    public function getTimestamp(): ?int\n    {\n        return $this->timestamp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/JWK.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse DomainException;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\n/**\n * JSON Web Key implementation, based on this spec:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n *\n * PHP version 5\n *\n * @category Authentication\n * @package  Authentication_JWT\n * @author   Bui Sy Nguyen <nguyenbs@gmail.com>\n * @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD\n * @link     https://github.com/firebase/php-jwt\n */\nclass JWK\n{\n    private const OID = '1.2.840.10045.2.1';\n    private const ASN1_OBJECT_IDENTIFIER = 0x06;\n    private const ASN1_SEQUENCE = 0x10; // also defined in JWT\n    private const ASN1_BIT_STRING = 0x03;\n    private const EC_CURVES = [\n        'P-256' => '1.2.840.10045.3.1.7', // Len: 64\n        'secp256k1' => '1.3.132.0.10', // Len: 64\n        'P-384' => '1.3.132.0.34', // Len: 96\n        // 'P-521' => '1.3.132.0.35', // Len: 132 (not supported)\n    ];\n\n    // For keys with \"kty\" equal to \"OKP\" (Octet Key Pair), the \"crv\" parameter must contain the key subtype.\n    // This library supports the following subtypes:\n    private const OKP_SUBTYPES = [\n        'Ed25519' => true, // RFC 8037\n    ];\n\n    /**\n     * Parse a set of JWK keys\n     *\n     * @param array<mixed> $jwks The JSON Web Key Set as an associative array\n     * @param string       $defaultAlg The algorithm for the Key object if \"alg\" is not set in the\n     *                                 JSON Web Key Set\n     *\n     * @return array<string, Key> An associative array of key IDs (kid) to Key objects\n     *\n     * @throws InvalidArgumentException     Provided JWK Set is empty\n     * @throws UnexpectedValueException     Provided JWK Set was invalid\n     * @throws DomainException              OpenSSL failure\n     *\n     * @uses parseKey\n     */\n    public static function parseKeySet(#[\\SensitiveParameter] array $jwks, ?string $defaultAlg = null): array\n    {\n        $keys = [];\n\n        if (!isset($jwks['keys'])) {\n            throw new UnexpectedValueException('\"keys\" member must exist in the JWK Set');\n        }\n\n        if (empty($jwks['keys'])) {\n            throw new InvalidArgumentException('JWK Set did not contain any keys');\n        }\n\n        foreach ($jwks['keys'] as $k => $v) {\n            $kid = isset($v['kid']) ? $v['kid'] : $k;\n            if ($key = self::parseKey($v, $defaultAlg)) {\n                $keys[(string) $kid] = $key;\n            }\n        }\n\n        if (0 === \\count($keys)) {\n            throw new UnexpectedValueException('No supported algorithms found in JWK Set');\n        }\n\n        return $keys;\n    }\n\n    /**\n     * Parse a JWK key\n     *\n     * @param array<mixed> $jwk An individual JWK\n     * @param string       $defaultAlg The algorithm for the Key object if \"alg\" is not set in the\n     *                                 JSON Web Key Set\n     *\n     * @return Key The key object for the JWK\n     *\n     * @throws InvalidArgumentException     Provided JWK is empty\n     * @throws UnexpectedValueException     Provided JWK was invalid\n     * @throws DomainException              OpenSSL failure\n     *\n     * @uses createPemFromModulusAndExponent\n     */\n    public static function parseKey(#[\\SensitiveParameter] array $jwk, ?string $defaultAlg = null): ?Key\n    {\n        if (empty($jwk)) {\n            throw new InvalidArgumentException('JWK must not be empty');\n        }\n\n        if (!isset($jwk['kty'])) {\n            throw new UnexpectedValueException('JWK must contain a \"kty\" parameter');\n        }\n\n        if (!isset($jwk['alg'])) {\n            if (\\is_null($defaultAlg)) {\n                // The \"alg\" parameter is optional in a KTY, but an algorithm is required\n                // for parsing in this library. Use the $defaultAlg parameter when parsing the\n                // key set in order to prevent this error.\n                // @see https://datatracker.ietf.org/doc/html/rfc7517#section-4.4\n                throw new UnexpectedValueException('JWK must contain an \"alg\" parameter');\n            }\n            $jwk['alg'] = $defaultAlg;\n        }\n\n        switch ($jwk['kty']) {\n            case 'RSA':\n                if (!empty($jwk['d'])) {\n                    throw new UnexpectedValueException('RSA private keys are not supported');\n                }\n                if (!isset($jwk['n']) || !isset($jwk['e'])) {\n                    throw new UnexpectedValueException('RSA keys must contain values for both \"n\" and \"e\"');\n                }\n\n                $pem = self::createPemFromModulusAndExponent($jwk['n'], $jwk['e']);\n                $publicKey = \\openssl_pkey_get_public($pem);\n                if (false === $publicKey) {\n                    throw new DomainException(\n                        'OpenSSL error: ' . \\openssl_error_string()\n                    );\n                }\n                return new Key($publicKey, $jwk['alg']);\n            case 'EC':\n                if (isset($jwk['d'])) {\n                    // The key is actually a private key\n                    throw new UnexpectedValueException('Key data must be for a public key');\n                }\n\n                if (empty($jwk['crv'])) {\n                    throw new UnexpectedValueException('crv not set');\n                }\n\n                if (!isset(self::EC_CURVES[$jwk['crv']])) {\n                    throw new DomainException('Unrecognised or unsupported EC curve');\n                }\n\n                if (empty($jwk['x']) || empty($jwk['y'])) {\n                    throw new UnexpectedValueException('x and y not set');\n                }\n\n                $publicKey = self::createPemFromCrvAndXYCoordinates($jwk['crv'], $jwk['x'], $jwk['y']);\n                return new Key($publicKey, $jwk['alg']);\n            case 'OKP':\n                if (isset($jwk['d'])) {\n                    // The key is actually a private key\n                    throw new UnexpectedValueException('Key data must be for a public key');\n                }\n\n                if (!isset($jwk['crv'])) {\n                    throw new UnexpectedValueException('crv not set');\n                }\n\n                if (empty(self::OKP_SUBTYPES[$jwk['crv']])) {\n                    throw new DomainException('Unrecognised or unsupported OKP key subtype');\n                }\n\n                if (empty($jwk['x'])) {\n                    throw new UnexpectedValueException('x not set');\n                }\n\n                // This library works internally with EdDSA keys (Ed25519) encoded in standard base64.\n                $publicKey = JWT::convertBase64urlToBase64($jwk['x']);\n                return new Key($publicKey, $jwk['alg']);\n            case 'oct':\n                if (!isset($jwk['k'])) {\n                    throw new UnexpectedValueException('k not set');\n                }\n\n                return new Key(JWT::urlsafeB64Decode($jwk['k']), $jwk['alg']);\n            default:\n                break;\n        }\n\n        return null;\n    }\n\n    /**\n     * Converts the EC JWK values to pem format.\n     *\n     * @param   string  $crv The EC curve (only P-256 & P-384 is supported)\n     * @param   string  $x   The EC x-coordinate\n     * @param   string  $y   The EC y-coordinate\n     *\n     * @return  string\n     */\n    private static function createPemFromCrvAndXYCoordinates(string $crv, string $x, string $y): string\n    {\n        $pem =\n            self::encodeDER(\n                self::ASN1_SEQUENCE,\n                self::encodeDER(\n                    self::ASN1_SEQUENCE,\n                    self::encodeDER(\n                        self::ASN1_OBJECT_IDENTIFIER,\n                        self::encodeOID(self::OID)\n                    )\n                    . self::encodeDER(\n                        self::ASN1_OBJECT_IDENTIFIER,\n                        self::encodeOID(self::EC_CURVES[$crv])\n                    )\n                ) .\n                self::encodeDER(\n                    self::ASN1_BIT_STRING,\n                    \\chr(0x00) . \\chr(0x04)\n                    . JWT::urlsafeB64Decode($x)\n                    . JWT::urlsafeB64Decode($y)\n                )\n            );\n\n        return \\sprintf(\n            \"-----BEGIN PUBLIC KEY-----\\n%s\\n-----END PUBLIC KEY-----\\n\",\n            wordwrap(base64_encode($pem), 64, \"\\n\", true)\n        );\n    }\n\n    /**\n     * Create a public key represented in PEM format from RSA modulus and exponent information\n     *\n     * @param string $n The RSA modulus encoded in Base64\n     * @param string $e The RSA exponent encoded in Base64\n     *\n     * @return string The RSA public key represented in PEM format\n     *\n     * @uses encodeLength\n     */\n    private static function createPemFromModulusAndExponent(\n        string $n,\n        string $e\n    ): string {\n        $mod = JWT::urlsafeB64Decode($n);\n        $exp = JWT::urlsafeB64Decode($e);\n\n        $modulus = \\pack('Ca*a*', 2, self::encodeLength(\\strlen($mod)), $mod);\n        $publicExponent = \\pack('Ca*a*', 2, self::encodeLength(\\strlen($exp)), $exp);\n\n        $rsaPublicKey = \\pack(\n            'Ca*a*a*',\n            48,\n            self::encodeLength(\\strlen($modulus) + \\strlen($publicExponent)),\n            $modulus,\n            $publicExponent\n        );\n\n        // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.\n        $rsaOID = \\pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA\n        $rsaPublicKey = \\chr(0) . $rsaPublicKey;\n        $rsaPublicKey = \\chr(3) . self::encodeLength(\\strlen($rsaPublicKey)) . $rsaPublicKey;\n\n        $rsaPublicKey = \\pack(\n            'Ca*a*',\n            48,\n            self::encodeLength(\\strlen($rsaOID . $rsaPublicKey)),\n            $rsaOID . $rsaPublicKey\n        );\n\n        return \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n            \\chunk_split(\\base64_encode($rsaPublicKey), 64) .\n            '-----END PUBLIC KEY-----';\n    }\n\n    /**\n     * DER-encode the length\n     *\n     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See\n     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.\n     *\n     * @param int $length\n     * @return string\n     */\n    private static function encodeLength(int $length): string\n    {\n        if ($length <= 0x7F) {\n            return \\chr($length);\n        }\n\n        $temp = \\ltrim(\\pack('N', $length), \\chr(0));\n\n        return \\pack('Ca*', 0x80 | \\strlen($temp), $temp);\n    }\n\n    /**\n     * Encodes a value into a DER object.\n     * Also defined in Firebase\\JWT\\JWT\n     *\n     * @param   int     $type DER tag\n     * @param   string  $value the value to encode\n     * @return  string  the encoded object\n     */\n    private static function encodeDER(int $type, string $value): string\n    {\n        $tag_header = 0;\n        if ($type === self::ASN1_SEQUENCE) {\n            $tag_header |= 0x20;\n        }\n\n        // Type\n        $der = \\chr($tag_header | $type);\n\n        // Length\n        $der .= \\chr(\\strlen($value));\n\n        return $der . $value;\n    }\n\n    /**\n     * Encodes a string into a DER-encoded OID.\n     *\n     * @param   string $oid the OID string\n     * @return  string the binary DER-encoded OID\n     */\n    private static function encodeOID(string $oid): string\n    {\n        $octets = explode('.', $oid);\n\n        // Get the first octet\n        $first = (int) array_shift($octets);\n        $second = (int) array_shift($octets);\n        $oid = \\chr($first * 40 + $second);\n\n        // Iterate over subsequent octets\n        foreach ($octets as $octet) {\n            if ($octet == 0) {\n                $oid .= \\chr(0x00);\n                continue;\n            }\n            $bin = '';\n\n            while ($octet) {\n                $bin .= \\chr(0x80 | ($octet & 0x7f));\n                $octet >>= 7;\n            }\n            $bin[0] = $bin[0] & \\chr(0x7f);\n\n            // Convert to big endian if necessary\n            if (pack('V', 65534) == pack('L', 65534)) {\n                $oid .= strrev($bin);\n            } else {\n                $oid .= $bin;\n            }\n        }\n\n        return $oid;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/JWT.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse ArrayAccess;\nuse DateTime;\nuse DomainException;\nuse Exception;\nuse InvalidArgumentException;\nuse OpenSSLAsymmetricKey;\nuse OpenSSLCertificate;\nuse stdClass;\nuse UnexpectedValueException;\n\n/**\n * JSON Web Token implementation, based on this spec:\n * https://tools.ietf.org/html/rfc7519\n *\n * PHP version 5\n *\n * @category Authentication\n * @package  Authentication_JWT\n * @author   Neuman Vong <neuman@twilio.com>\n * @author   Anant Narayanan <anant@php.net>\n * @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD\n * @link     https://github.com/firebase/php-jwt\n */\nclass JWT\n{\n    private const ASN1_INTEGER = 0x02;\n    private const ASN1_SEQUENCE = 0x10;\n    private const ASN1_BIT_STRING = 0x03;\n\n    private const RSA_KEY_MIN_LENGTH=2048;\n\n    /**\n     * When checking nbf, iat or expiration times,\n     * we want to provide some extra leeway time to\n     * account for clock skew.\n     *\n     * @var int\n     */\n    public static $leeway = 0;\n\n    /**\n     * Allow the current timestamp to be specified.\n     * Useful for fixing a value within unit testing.\n     * Will default to PHP time() value if null.\n     *\n     * @var ?int\n     */\n    public static $timestamp = null;\n\n    /**\n     * @var array<string, string[]>\n     */\n    public static $supported_algs = [\n        'ES384' => ['openssl', 'SHA384'],\n        'ES256' => ['openssl', 'SHA256'],\n        'ES256K' => ['openssl', 'SHA256'],\n        'HS256' => ['hash_hmac', 'SHA256'],\n        'HS384' => ['hash_hmac', 'SHA384'],\n        'HS512' => ['hash_hmac', 'SHA512'],\n        'RS256' => ['openssl', 'SHA256'],\n        'RS384' => ['openssl', 'SHA384'],\n        'RS512' => ['openssl', 'SHA512'],\n        'EdDSA' => ['sodium_crypto', 'EdDSA'],\n    ];\n\n    /**\n     * Decodes a JWT string into a PHP object.\n     *\n     * @param string                 $jwt            The JWT\n     * @param Key|ArrayAccess<string,Key>|array<string,Key> $keyOrKeyArray  The Key or associative array of key IDs\n     *                                                                      (kid) to Key objects.\n     *                                                                      If the algorithm used is asymmetric, this is\n     *                                                                      the public key.\n     *                                                                      Each Key object contains an algorithm and\n     *                                                                      matching key.\n     *                                                                      Supported algorithms are 'ES384','ES256',\n     *                                                                      'HS256', 'HS384', 'HS512', 'RS256', 'RS384'\n     *                                                                      and 'RS512'.\n     * @param stdClass               $headers                               Optional. Populates stdClass with headers.\n     *\n     * @return stdClass The JWT's payload as a PHP object\n     *\n     * @throws InvalidArgumentException     Provided key/key-array was empty or malformed\n     * @throws DomainException              Provided JWT is malformed\n     * @throws UnexpectedValueException     Provided JWT was invalid\n     * @throws SignatureInvalidException    Provided JWT was invalid because the signature verification failed\n     * @throws BeforeValidException         Provided JWT is trying to be used before it's eligible as defined by 'nbf'\n     * @throws BeforeValidException         Provided JWT is trying to be used before it's been created as defined by 'iat'\n     * @throws ExpiredException             Provided JWT has since expired, as defined by the 'exp' claim\n     *\n     * @uses jsonDecode\n     * @uses urlsafeB64Decode\n     */\n    public static function decode(\n        string $jwt,\n        #[\\SensitiveParameter] $keyOrKeyArray,\n        ?stdClass &$headers = null\n    ): stdClass {\n        // Validate JWT\n        $timestamp = \\is_null(static::$timestamp) ? \\time() : static::$timestamp;\n\n        if (empty($keyOrKeyArray)) {\n            throw new InvalidArgumentException('Key may not be empty');\n        }\n        $tks = \\explode('.', $jwt);\n        if (\\count($tks) !== 3) {\n            throw new UnexpectedValueException('Wrong number of segments');\n        }\n        list($headb64, $bodyb64, $cryptob64) = $tks;\n        $headerRaw = static::urlsafeB64Decode($headb64);\n        if (null === ($header = static::jsonDecode($headerRaw))) {\n            throw new UnexpectedValueException('Invalid header encoding');\n        }\n        if ($headers !== null) {\n            $headers = $header;\n        }\n        $payloadRaw = static::urlsafeB64Decode($bodyb64);\n        if (null === ($payload = static::jsonDecode($payloadRaw))) {\n            throw new UnexpectedValueException('Invalid claims encoding');\n        }\n        if (\\is_array($payload)) {\n            // prevent PHP Fatal Error in edge-cases when payload is empty array\n            $payload = (object) $payload;\n        }\n        if (!$payload instanceof stdClass) {\n            throw new UnexpectedValueException('Payload must be a JSON object');\n        }\n        if (isset($payload->iat) && !\\is_numeric($payload->iat)) {\n            throw new UnexpectedValueException('Payload iat must be a number');\n        }\n        if (isset($payload->nbf) && !\\is_numeric($payload->nbf)) {\n            throw new UnexpectedValueException('Payload nbf must be a number');\n        }\n        if (isset($payload->exp) && !\\is_numeric($payload->exp)) {\n            throw new UnexpectedValueException('Payload exp must be a number');\n        }\n\n        $sig = static::urlsafeB64Decode($cryptob64);\n        if (empty($header->alg)) {\n            throw new UnexpectedValueException('Empty algorithm');\n        }\n        if (empty(static::$supported_algs[$header->alg])) {\n            throw new UnexpectedValueException('Algorithm not supported');\n        }\n\n        $key = self::getKey($keyOrKeyArray, property_exists($header, 'kid') ? $header->kid : null);\n\n        // Check the algorithm\n        if (!self::constantTimeEquals($key->getAlgorithm(), $header->alg)) {\n            // See issue #351\n            throw new UnexpectedValueException('Incorrect key for this algorithm');\n        }\n        if (\\in_array($header->alg, ['ES256', 'ES256K', 'ES384'], true)) {\n            // OpenSSL expects an ASN.1 DER sequence for ES256/ES256K/ES384 signatures\n            $sig = self::signatureToDER($sig);\n        }\n        if (!self::verify(\"{$headb64}.{$bodyb64}\", $sig, $key->getKeyMaterial(), $header->alg)) {\n            throw new SignatureInvalidException('Signature verification failed');\n        }\n\n        // Check the nbf if it is defined. This is the time that the\n        // token can actually be used. If it's not yet that time, abort.\n        if (isset($payload->nbf) && floor($payload->nbf) > ($timestamp + static::$leeway)) {\n            $ex = new BeforeValidException(\n                'Cannot handle token with nbf prior to ' . \\date(DateTime::ATOM, (int) floor($payload->nbf))\n            );\n            $ex->setPayload($payload);\n            throw $ex;\n        }\n\n        // Check that this token has been created before 'now'. This prevents\n        // using tokens that have been created for later use (and haven't\n        // correctly used the nbf claim).\n        if (!isset($payload->nbf) && isset($payload->iat) && floor($payload->iat) > ($timestamp + static::$leeway)) {\n            $ex = new BeforeValidException(\n                'Cannot handle token with iat prior to ' . \\date(DateTime::ATOM, (int) floor($payload->iat))\n            );\n            $ex->setPayload($payload);\n            throw $ex;\n        }\n\n        // Check if this token has expired.\n        if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) {\n            $ex = new ExpiredException('Expired token');\n            $ex->setPayload($payload);\n            $ex->setTimestamp($timestamp);\n            throw $ex;\n        }\n\n        return $payload;\n    }\n\n    /**\n     * Converts and signs a PHP array into a JWT string.\n     *\n     * @param array<mixed>          $payload PHP array\n     * @param string|OpenSSLAsymmetricKey|OpenSSLCertificate $key The secret key.\n     * @param string                $alg     Supported algorithms are 'ES384','ES256', 'ES256K', 'HS256',\n     *                                       'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'\n     * @param string                $keyId\n     * @param array<string, string> $head    An array with header elements to attach\n     *\n     * @return string A signed JWT\n     *\n     * @uses jsonEncode\n     * @uses urlsafeB64Encode\n     */\n    public static function encode(\n        array $payload,\n        #[\\SensitiveParameter] $key,\n        string $alg,\n        ?string $keyId = null,\n        ?array $head = null\n    ): string {\n        $header = ['typ' => 'JWT'];\n        if (isset($head)) {\n            $header = \\array_merge($header, $head);\n        }\n        $header['alg'] = $alg;\n        if ($keyId !== null) {\n            $header['kid'] = $keyId;\n        }\n        $segments = [];\n        $segments[] = static::urlsafeB64Encode((string) static::jsonEncode($header));\n        $segments[] = static::urlsafeB64Encode((string) static::jsonEncode($payload));\n        $signing_input = \\implode('.', $segments);\n\n        $signature = static::sign($signing_input, $key, $alg);\n        $segments[] = static::urlsafeB64Encode($signature);\n\n        return \\implode('.', $segments);\n    }\n\n    /**\n     * Sign a string with a given key and algorithm.\n     *\n     * @param string $msg  The message to sign\n     * @param string|OpenSSLAsymmetricKey|OpenSSLCertificate  $key  The secret key.\n     * @param string $alg  Supported algorithms are 'EdDSA', 'ES384', 'ES256', 'ES256K', 'HS256',\n     *                    'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'\n     *\n     * @return string An encrypted message\n     *\n     * @throws DomainException Unsupported algorithm or bad key was specified\n     */\n    public static function sign(\n        string $msg,\n        #[\\SensitiveParameter] $key,\n        string $alg\n    ): string {\n        if (empty(static::$supported_algs[$alg])) {\n            throw new DomainException('Algorithm not supported');\n        }\n        list($function, $algorithm) = static::$supported_algs[$alg];\n        switch ($function) {\n            case 'hash_hmac':\n                if (!\\is_string($key)) {\n                    throw new InvalidArgumentException('key must be a string when using hmac');\n                }\n                self::validateHmacKeyLength($key, $algorithm);\n                return \\hash_hmac($algorithm, $msg, $key, true);\n            case 'openssl':\n                $signature = '';\n                if (!$key = openssl_pkey_get_private($key)) {\n                    throw new DomainException('OpenSSL unable to validate key');\n                }\n                if (str_starts_with($alg, 'RS')) {\n                    self::validateRsaKeyLength($key);\n                } elseif (str_starts_with($alg, 'ES')) {\n                    self::validateEcKeyLength($key, $alg);\n                }\n                $success = \\openssl_sign($msg, $signature, $key, $algorithm);\n                if (!$success) {\n                    throw new DomainException('OpenSSL unable to sign data');\n                }\n                if ($alg === 'ES256' || $alg === 'ES256K') {\n                    $signature = self::signatureFromDER($signature, 256);\n                } elseif ($alg === 'ES384') {\n                    $signature = self::signatureFromDER($signature, 384);\n                }\n                return $signature;\n            case 'sodium_crypto':\n                if (!\\function_exists('sodium_crypto_sign_detached')) {\n                    throw new DomainException('libsodium is not available');\n                }\n                if (!\\is_string($key)) {\n                    throw new InvalidArgumentException('key must be a string when using EdDSA');\n                }\n                try {\n                    // The last non-empty line is used as the key.\n                    $lines = array_filter(explode(\"\\n\", $key));\n                    $key = base64_decode((string) end($lines));\n                    if (\\strlen($key) === 0) {\n                        throw new DomainException('Key cannot be empty string');\n                    }\n                    return sodium_crypto_sign_detached($msg, $key);\n                } catch (Exception $e) {\n                    throw new DomainException($e->getMessage(), 0, $e);\n                }\n        }\n\n        throw new DomainException('Algorithm not supported');\n    }\n\n    /**\n     * Verify a signature with the message, key and method. Not all methods\n     * are symmetric, so we must have a separate verify and sign method.\n     *\n     * @param string $msg         The original message (header and body)\n     * @param string $signature   The original signature\n     * @param string|OpenSSLAsymmetricKey|OpenSSLCertificate  $keyMaterial For Ed*, ES*, HS*, a string key works. for RS*, must be an instance of OpenSSLAsymmetricKey\n     * @param string $alg         The algorithm\n     *\n     * @return bool\n     *\n     * @throws DomainException Invalid Algorithm, bad key, or OpenSSL failure\n     */\n    private static function verify(\n        string $msg,\n        string $signature,\n        #[\\SensitiveParameter] $keyMaterial,\n        string $alg\n    ): bool {\n        if (empty(static::$supported_algs[$alg])) {\n            throw new DomainException('Algorithm not supported');\n        }\n\n        list($function, $algorithm) = static::$supported_algs[$alg];\n        switch ($function) {\n            case 'openssl':\n                if (!$key = openssl_pkey_get_public($keyMaterial)) {\n                    throw new DomainException('OpenSSL unable to validate key');\n                }\n                if (str_starts_with($alg, 'RS')) {\n                    self::validateRsaKeyLength($key);\n                } elseif (str_starts_with($alg, 'ES')) {\n                    self::validateEcKeyLength($key, $alg);\n                }\n                $success = \\openssl_verify($msg, $signature, $keyMaterial, $algorithm);\n                if ($success === 1) {\n                    return true;\n                }\n                if ($success === 0) {\n                    return false;\n                }\n                // returns 1 on success, 0 on failure, -1 on error.\n                throw new DomainException(\n                    'OpenSSL error: ' . \\openssl_error_string()\n                );\n            case 'sodium_crypto':\n                if (!\\function_exists('sodium_crypto_sign_verify_detached')) {\n                    throw new DomainException('libsodium is not available');\n                }\n                if (!\\is_string($keyMaterial)) {\n                    throw new InvalidArgumentException('key must be a string when using EdDSA');\n                }\n                try {\n                    // The last non-empty line is used as the key.\n                    $lines = array_filter(explode(\"\\n\", $keyMaterial));\n                    $key = base64_decode((string) end($lines));\n                    if (\\strlen($key) === 0) {\n                        throw new DomainException('Key cannot be empty string');\n                    }\n                    if (\\strlen($signature) === 0) {\n                        throw new DomainException('Signature cannot be empty string');\n                    }\n                    return sodium_crypto_sign_verify_detached($signature, $msg, $key);\n                } catch (Exception $e) {\n                    throw new DomainException($e->getMessage(), 0, $e);\n                }\n            case 'hash_hmac':\n            default:\n                if (!\\is_string($keyMaterial)) {\n                    throw new InvalidArgumentException('key must be a string when using hmac');\n                }\n                self::validateHmacKeyLength($keyMaterial, $algorithm);\n                $hash = \\hash_hmac($algorithm, $msg, $keyMaterial, true);\n                return self::constantTimeEquals($hash, $signature);\n        }\n    }\n\n    /**\n     * Decode a JSON string into a PHP object.\n     *\n     * @param string $input JSON string\n     *\n     * @return mixed The decoded JSON string\n     *\n     * @throws DomainException Provided string was invalid JSON\n     */\n    public static function jsonDecode(string $input)\n    {\n        $obj = \\json_decode($input, false, 512, JSON_BIGINT_AS_STRING);\n\n        if ($errno = \\json_last_error()) {\n            self::handleJsonError($errno);\n        } elseif ($obj === null && $input !== 'null') {\n            throw new DomainException('Null result with non-null input');\n        }\n        return $obj;\n    }\n\n    /**\n     * Encode a PHP array into a JSON string.\n     *\n     * @param array<mixed> $input A PHP array\n     *\n     * @return string JSON representation of the PHP array\n     *\n     * @throws DomainException Provided object could not be encoded to valid JSON\n     */\n    public static function jsonEncode(array $input): string\n    {\n        $json = \\json_encode($input, \\JSON_UNESCAPED_SLASHES);\n        if ($errno = \\json_last_error()) {\n            self::handleJsonError($errno);\n        } elseif ($json === 'null') {\n            throw new DomainException('Null result with non-null input');\n        }\n        if ($json === false) {\n            throw new DomainException('Provided object could not be encoded to valid JSON');\n        }\n        return $json;\n    }\n\n    /**\n     * Decode a string with URL-safe Base64.\n     *\n     * @param string $input A Base64 encoded string\n     *\n     * @return string A decoded string\n     *\n     * @throws InvalidArgumentException invalid base64 characters\n     */\n    public static function urlsafeB64Decode(string $input): string\n    {\n        return \\base64_decode(self::convertBase64UrlToBase64($input));\n    }\n\n    /**\n     * Convert a string in the base64url (URL-safe Base64) encoding to standard base64.\n     *\n     * @param string $input A Base64 encoded string with URL-safe characters (-_ and no padding)\n     *\n     * @return string A Base64 encoded string with standard characters (+/) and padding (=), when\n     * needed.\n     *\n     * @see https://www.rfc-editor.org/rfc/rfc4648\n     */\n    public static function convertBase64UrlToBase64(string $input): string\n    {\n        $remainder = \\strlen($input) % 4;\n        if ($remainder) {\n            $padlen = 4 - $remainder;\n            $input .= \\str_repeat('=', $padlen);\n        }\n        return \\strtr($input, '-_', '+/');\n    }\n\n    /**\n     * Encode a string with URL-safe Base64.\n     *\n     * @param string $input The string you want encoded\n     *\n     * @return string The base64 encode of what you passed in\n     */\n    public static function urlsafeB64Encode(string $input): string\n    {\n        return \\str_replace('=', '', \\strtr(\\base64_encode($input), '+/', '-_'));\n    }\n\n\n    /**\n     * Determine if an algorithm has been provided for each Key\n     *\n     * @param Key|ArrayAccess<string,Key>|array<string,Key> $keyOrKeyArray\n     * @param string|null            $kid\n     *\n     * @throws UnexpectedValueException\n     *\n     * @return Key\n     */\n    private static function getKey(\n        #[\\SensitiveParameter] $keyOrKeyArray,\n        ?string $kid\n    ): Key {\n        if ($keyOrKeyArray instanceof Key) {\n            return $keyOrKeyArray;\n        }\n\n        if (empty($kid) && $kid !== '0') {\n            throw new UnexpectedValueException('\"kid\" empty, unable to lookup correct key');\n        }\n\n        if ($keyOrKeyArray instanceof CachedKeySet) {\n            // Skip \"isset\" check, as this will automatically refresh if not set\n            return $keyOrKeyArray[$kid];\n        }\n\n        if (!isset($keyOrKeyArray[$kid])) {\n            throw new UnexpectedValueException('\"kid\" invalid, unable to lookup correct key');\n        }\n\n        return $keyOrKeyArray[$kid];\n    }\n\n    /**\n     * @param string $left  The string of known length to compare against\n     * @param string $right The user-supplied string\n     * @return bool\n     */\n    public static function constantTimeEquals(string $left, string $right): bool\n    {\n        if (\\function_exists('hash_equals')) {\n            return \\hash_equals($left, $right);\n        }\n        $len = \\min(self::safeStrlen($left), self::safeStrlen($right));\n\n        $status = 0;\n        for ($i = 0; $i < $len; $i++) {\n            $status |= (\\ord($left[$i]) ^ \\ord($right[$i]));\n        }\n        $status |= (self::safeStrlen($left) ^ self::safeStrlen($right));\n\n        return ($status === 0);\n    }\n\n    /**\n     * Helper method to create a JSON error.\n     *\n     * @param int $errno An error number from json_last_error()\n     *\n     * @throws DomainException\n     *\n     * @return void\n     */\n    private static function handleJsonError(int $errno): void\n    {\n        $messages = [\n            JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',\n            JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',\n            JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',\n            JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',\n            JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3\n        ];\n        throw new DomainException(\n            isset($messages[$errno])\n            ? $messages[$errno]\n            : 'Unknown JSON error: ' . $errno\n        );\n    }\n\n    /**\n     * Get the number of bytes in cryptographic strings.\n     *\n     * @param string $str\n     *\n     * @return int\n     */\n    private static function safeStrlen(string $str): int\n    {\n        if (\\function_exists('mb_strlen')) {\n            return \\mb_strlen($str, '8bit');\n        }\n        return \\strlen($str);\n    }\n\n    /**\n     * Convert an ECDSA signature to an ASN.1 DER sequence\n     *\n     * @param   string $sig The ECDSA signature to convert\n     * @return  string The encoded DER object\n     */\n    private static function signatureToDER(string $sig): string\n    {\n        // Separate the signature into r-value and s-value\n        $length = max(1, (int) (\\strlen($sig) / 2));\n        list($r, $s) = \\str_split($sig, $length);\n\n        // Trim leading zeros\n        $r = \\ltrim($r, \"\\x00\");\n        $s = \\ltrim($s, \"\\x00\");\n\n        // Convert r-value and s-value from unsigned big-endian integers to\n        // signed two's complement\n        if (\\ord($r[0]) > 0x7f) {\n            $r = \"\\x00\" . $r;\n        }\n        if (\\ord($s[0]) > 0x7f) {\n            $s = \"\\x00\" . $s;\n        }\n\n        return self::encodeDER(\n            self::ASN1_SEQUENCE,\n            self::encodeDER(self::ASN1_INTEGER, $r) .\n            self::encodeDER(self::ASN1_INTEGER, $s)\n        );\n    }\n\n    /**\n     * Encodes a value into a DER object.\n     *\n     * @param   int     $type DER tag\n     * @param   string  $value the value to encode\n     *\n     * @return  string  the encoded object\n     */\n    private static function encodeDER(int $type, string $value): string\n    {\n        $tag_header = 0;\n        if ($type === self::ASN1_SEQUENCE) {\n            $tag_header |= 0x20;\n        }\n\n        // Type\n        $der = \\chr($tag_header | $type);\n\n        // Length\n        $der .= \\chr(\\strlen($value));\n\n        return $der . $value;\n    }\n\n    /**\n     * Encodes signature from a DER object.\n     *\n     * @param   string  $der binary signature in DER format\n     * @param   int     $keySize the number of bits in the key\n     *\n     * @return  string  the signature\n     */\n    private static function signatureFromDER(string $der, int $keySize): string\n    {\n        // OpenSSL returns the ECDSA signatures as a binary ASN.1 DER SEQUENCE\n        list($offset, $_) = self::readDER($der);\n        list($offset, $r) = self::readDER($der, $offset);\n        list($offset, $s) = self::readDER($der, $offset);\n\n        // Convert r-value and s-value from signed two's compliment to unsigned\n        // big-endian integers\n        $r = \\ltrim($r, \"\\x00\");\n        $s = \\ltrim($s, \"\\x00\");\n\n        // Pad out r and s so that they are $keySize bits long\n        $r = \\str_pad($r, $keySize / 8, \"\\x00\", STR_PAD_LEFT);\n        $s = \\str_pad($s, $keySize / 8, \"\\x00\", STR_PAD_LEFT);\n\n        return $r . $s;\n    }\n\n    /**\n     * Reads binary DER-encoded data and decodes into a single object\n     *\n     * @param string $der the binary data in DER format\n     * @param int $offset the offset of the data stream containing the object\n     * to decode\n     *\n     * @return array{int, string|null} the new offset and the decoded object\n     */\n    private static function readDER(string $der, int $offset = 0): array\n    {\n        $pos = $offset;\n        $size = \\strlen($der);\n        $constructed = (\\ord($der[$pos]) >> 5) & 0x01;\n        $type = \\ord($der[$pos++]) & 0x1f;\n\n        // Length\n        $len = \\ord($der[$pos++]);\n        if ($len & 0x80) {\n            $n = $len & 0x1f;\n            $len = 0;\n            while ($n-- && $pos < $size) {\n                $len = ($len << 8) | \\ord($der[$pos++]);\n            }\n        }\n\n        // Value\n        if ($type === self::ASN1_BIT_STRING) {\n            $pos++; // Skip the first contents octet (padding indicator)\n            $data = \\substr($der, $pos, $len - 1);\n            $pos += $len - 1;\n        } elseif (!$constructed) {\n            $data = \\substr($der, $pos, $len);\n            $pos += $len;\n        } else {\n            $data = null;\n        }\n\n        return [$pos, $data];\n    }\n\n    /**\n     * Validate HMAC key length\n     *\n     * @param string $key HMAC key material\n     * @param string $algorithm The algorithm\n     *\n     * @throws DomainException Provided key is too short\n     */\n    private static function validateHmacKeyLength(string $key, string $algorithm): void\n    {\n        $keyLength = \\strlen($key) * 8;\n        $minKeyLength = (int) \\str_replace('SHA', '', $algorithm);\n        if ($keyLength < $minKeyLength) {\n            throw new DomainException('Provided key is too short');\n        }\n    }\n\n    /**\n     * Validate RSA key length\n     *\n     * @param OpenSSLAsymmetricKey $key RSA key material\n     * @throws DomainException Provided key is too short\n     */\n    private static function validateRsaKeyLength(#[\\SensitiveParameter] OpenSSLAsymmetricKey $key): void\n    {\n        if (!$keyDetails = openssl_pkey_get_details($key)) {\n            throw new DomainException('Unable to validate key');\n        }\n        if ($keyDetails['bits'] < self::RSA_KEY_MIN_LENGTH) {\n            throw new DomainException('Provided key is too short');\n        }\n    }\n\n    /**\n     * Validate RSA key length\n     *\n     * @param OpenSSLAsymmetricKey $key RSA key material\n     * @param string $algorithm The algorithm\n     * @throws DomainException Provided key is too short\n     */\n    private static function validateEcKeyLength(\n        #[\\SensitiveParameter] OpenSSLAsymmetricKey $key,\n        string $algorithm\n    ): void {\n        if (!$keyDetails = openssl_pkey_get_details($key)) {\n            throw new DomainException('Unable to validate key');\n        }\n        $minKeyLength = (int) \\str_replace('ES', '', $algorithm);\n        if ($keyDetails['bits'] < $minKeyLength) {\n            throw new DomainException('Provided key is too short');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/JWTExceptionWithPayloadInterface.php",
    "content": "<?php\nnamespace Firebase\\JWT;\n\ninterface JWTExceptionWithPayloadInterface\n{\n    /**\n     * Get the payload that caused this exception.\n     *\n     * @return object\n     */\n    public function getPayload(): object;\n\n    /**\n     * Get the payload that caused this exception.\n     *\n     * @param object $payload\n     * @return void\n     */\n    public function setPayload(object $payload): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/Key.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse InvalidArgumentException;\nuse OpenSSLAsymmetricKey;\nuse OpenSSLCertificate;\nuse TypeError;\n\nclass Key\n{\n    /**\n     * @param string|OpenSSLAsymmetricKey|OpenSSLCertificate $keyMaterial\n     * @param string $algorithm\n     */\n    public function __construct(\n        #[\\SensitiveParameter] private $keyMaterial,\n        private string $algorithm\n    ) {\n        if (\n            !\\is_string($keyMaterial)\n            && !$keyMaterial instanceof OpenSSLAsymmetricKey\n            && !$keyMaterial instanceof OpenSSLCertificate\n        ) {\n            throw new TypeError('Key material must be a string, OpenSSLCertificate, or OpenSSLAsymmetricKey');\n        }\n\n        if (empty($keyMaterial)) {\n            throw new InvalidArgumentException('Key material must not be empty');\n        }\n\n        if (empty($algorithm)) {\n            throw new InvalidArgumentException('Algorithm must not be empty');\n        }\n    }\n\n    /**\n     * Return the algorithm valid for this key\n     *\n     * @return string\n     */\n    public function getAlgorithm(): string\n    {\n        return $this->algorithm;\n    }\n\n    /**\n     * @return string|OpenSSLAsymmetricKey|OpenSSLCertificate\n     */\n    public function getKeyMaterial()\n    {\n        return $this->keyMaterial;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/firebase/php-jwt/src/SignatureInvalidException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass SignatureInvalidException extends \\UnexpectedValueException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction,\nand distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by\nthe copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all\nother entities that control, are controlled by, or are under common\ncontrol with that entity. For the purposes of this definition,\n\"control\" means (i) the power, direct or indirect, to cause the\ndirection or management of such entity, whether by contract or\notherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity\nexercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications,\nincluding but not limited to software source code, documentation\nsource, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical\ntransformation or translation of a Source form, including but\nnot limited to compiled object code, generated documentation,\nand conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or\nObject form, made available under the License, as indicated by a\ncopyright notice that is included in or attached to the work\n(an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object\nform, that is based on (or derived from) the Work and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship. For the purposes\nof this License, Derivative Works shall not include works that remain\nseparable from, or merely link (or bind by name) to the interfaces of,\nthe Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including\nthe original version of the Work and any modifications or additions\nto that Work or Derivative Works thereof, that is intentionally\nsubmitted to Licensor for inclusion in the Work by the copyright owner\nor by an individual or Legal Entity authorized to submit on behalf of\nthe copyright owner. For the purposes of this definition, \"submitted\"\nmeans any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems,\nand issue tracking systems that are managed by, or on behalf of, the\nLicensor for the purpose of discussing and improving the Work, but\nexcluding communication that is conspicuously marked or otherwise\ndesignated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity\non behalf of whom a Contribution has been received by Licensor and\nsubsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\ncopyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the\nWork and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\n(except as stated in this section) patent license to make, have made,\nuse, offer to sell, sell, import, and otherwise transfer the Work,\nwhere such license applies only to those patent claims licensable\nby such Contributor that are necessarily infringed by their\nContribution(s) alone or by combination of their Contribution(s)\nwith the Work to which such Contribution(s) was submitted. If You\ninstitute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work\nor a Contribution incorporated within the Work constitutes direct\nor contributory patent infringement, then any patent licenses\ngranted to You under this License for that Work shall terminate\nas of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\nWork or Derivative Works thereof in any medium, with or without\nmodifications, and in Source or Object form, provided that You\nmeet the following conditions:\n\n(a) You must give any other recipients of the Work or\nDerivative Works a copy of this License; and\n\n(b) You must cause any modified files to carry prominent notices\nstating that You changed the files; and\n\n(c) You must retain, in the Source form of any Derivative Works\nthat You distribute, all copyright, patent, trademark, and\nattribution notices from the Source form of the Work,\nexcluding those notices that do not pertain to any part of\nthe Derivative Works; and\n\n(d) If the Work includes a \"NOTICE\" text file as part of its\ndistribution, then any Derivative Works that You distribute must\ninclude a readable copy of the attribution notices contained\nwithin such NOTICE file, excluding those notices that do not\npertain to any part of the Derivative Works, in at least one\nof the following places: within a NOTICE text file distributed\nas part of the Derivative Works; within the Source form or\ndocumentation, if provided along with the Derivative Works; or,\nwithin a display generated by the Derivative Works, if and\nwherever such third-party notices normally appear. The contents\nof the NOTICE file are for informational purposes only and\ndo not modify the License. You may add Your own attribution\nnotices within Derivative Works that You distribute, alongside\nor as an addendum to the NOTICE text from the Work, provided\nthat such additional attribution notices cannot be construed\nas modifying the License.\n\nYou may add Your own copyright statement to Your modifications and\nmay provide additional or different license terms and conditions\nfor use, reproduction, or distribution of Your modifications, or\nfor any such Derivative Works as a whole, provided Your use,\nreproduction, and distribution of the Work otherwise complies with\nthe conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\nany Contribution intentionally submitted for inclusion in the Work\nby You to the Licensor shall be under the terms and conditions of\nthis License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify\nthe terms of any separate license agreement you may have executed\nwith Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\nnames, trademarks, service marks, or product names of the Licensor,\nexcept as required for reasonable and customary use in describing the\norigin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\nagreed to in writing, Licensor provides the Work (and each\nContributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied, including, without limitation, any warranties or conditions\nof TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\nPARTICULAR PURPOSE. You are solely responsible for determining the\nappropriateness of using or redistributing the Work and assume any\nrisks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\nwhether in tort (including negligence), contract, or otherwise,\nunless required by applicable law (such as deliberate and grossly\nnegligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special,\nincidental, or consequential damages of any character arising as a\nresult of this License or out of the use or inability to use the\nWork (including but not limited to damages for loss of goodwill,\nwork stoppage, computer failure or malfunction, or any and all\nother commercial damages or losses), even if such Contributor\nhas been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\nthe Work or Derivative Works thereof, You may choose to offer,\nand charge a fee for, acceptance of support, warranty, indemnity,\nor other liability obligations and/or rights consistent with this\nLicense. However, in accepting such obligations, You may act only\non Your own behalf and on Your sole responsibility, not on behalf\nof any other Contributor, and only if You agree to indemnify,\ndefend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason\nof your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\nTo apply the Apache License to your work, attach the following\nboilerplate notice, with the fields enclosed by brackets \"[]\"\nreplaced with your own identifying information. (Don't include\nthe brackets!) The text should be enclosed in the appropriate\ncomment syntax for the file format. We also recommend that a\nfile or class name and description of purpose be included on the\nsame \"printed page\" as the copyright notice for easier\nidentification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/README.md",
    "content": "Google PHP API Client Services\n==============================\n\n[Reference Documentation](https://googleapis.github.io/google-api-php-client-services)\n\n**NOTE**: please check to see if the package you'd like to install is available in our\nlist of [Google cloud packages](https://cloud.google.com/php/docs/reference) first, as\nthese are the recommended libraries.\n\n## Requirements\n\n[Google API PHP Client](https://github.com/googleapis/google-api-php-client/releases)\n\n## Usage\n\nThis library is automatically updated daily with new API changes, and tagged weekly.\nIt is installed as part of the\n[Google API PHP Client](https://github.com/googleapis/google-api-php-client/releases)\nlibrary via Composer, which will pull down the most recent tag.\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/autoload.php",
    "content": "<?php\n\n// For older (pre-2.7.2) verions of google/apiclient\nif (\n    file_exists(__DIR__ . '/../apiclient/src/Google/Client.php')\n    && !class_exists('Google_Client', false)\n) {\n    require_once(__DIR__ . '/../apiclient/src/Google/Client.php');\n    if (\n        defined('Google_Client::LIBVER')\n        && version_compare(Google_Client::LIBVER, '2.7.2', '<=')\n    ) {\n        $servicesClassMap = [\n            'Google\\\\Client' => 'Google_Client',\n            'Google\\\\Service' => 'Google_Service',\n            'Google\\\\Service\\\\Resource' => 'Google_Service_Resource',\n            'Google\\\\Model' => 'Google_Model',\n            'Google\\\\Collection' => 'Google_Collection',\n        ];\n        foreach ($servicesClassMap as $alias => $class) {\n            class_alias($class, $alias);\n        }\n    }\n}\nspl_autoload_register(function ($class) {\n    if (0 === strpos($class, 'Google_Service_')) {\n        // Autoload the new class, which will also create an alias for the\n        // old class by changing underscores to namespaces:\n        //     Google_Service_Speech_Resource_Operations\n        //      => Google\\Service\\Speech\\Resource\\Operations\n        $classExists = class_exists($newClass = str_replace('_', '\\\\', $class));\n        if ($classExists) {\n            return true;\n        }\n    }\n}, true, true);\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/composer.json",
    "content": "{\n    \"name\": \"google/apiclient-services\",\n    \"type\": \"library\",\n    \"description\": \"Client library for Google APIs\",\n    \"keywords\": [\"google\"],\n    \"homepage\": \"http://developers.google.com/api-client-library/php\",\n    \"license\": \"Apache-2.0\",\n    \"require\": {\n        \"php\": \"^8.1\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^9.6\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Google\\\\Service\\\\\": \"src\"\n        },\n        \"files\": [\n            \"autoload.php\"\n        ]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Google\\\\\": \"tests/mocks\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/AdvanceRelocateBucketOperationRequest.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass AdvanceRelocateBucketOperationRequest extends \\Google\\Model\n{\n  /**\n   * Specifies the time when the relocation will revert to the sync stage if the\n   * relocation hasn't succeeded.\n   *\n   * @var string\n   */\n  public $expireTime;\n  /**\n   * Specifies the duration after which the relocation will revert to the sync\n   * stage if the relocation hasn't succeeded. Optional, if not supplied, a\n   * default value of 12h will be used.\n   *\n   * @var string\n   */\n  public $ttl;\n\n  /**\n   * Specifies the time when the relocation will revert to the sync stage if the\n   * relocation hasn't succeeded.\n   *\n   * @param string $expireTime\n   */\n  public function setExpireTime($expireTime)\n  {\n    $this->expireTime = $expireTime;\n  }\n  /**\n   * @return string\n   */\n  public function getExpireTime()\n  {\n    return $this->expireTime;\n  }\n  /**\n   * Specifies the duration after which the relocation will revert to the sync\n   * stage if the relocation hasn't succeeded. Optional, if not supplied, a\n   * default value of 12h will be used.\n   *\n   * @param string $ttl\n   */\n  public function setTtl($ttl)\n  {\n    $this->ttl = $ttl;\n  }\n  /**\n   * @return string\n   */\n  public function getTtl()\n  {\n    return $this->ttl;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(AdvanceRelocateBucketOperationRequest::class, 'Google_Service_Storage_AdvanceRelocateBucketOperationRequest');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/AnywhereCache.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass AnywhereCache extends \\Google\\Model\n{\n  /**\n   * The cache-level entry admission policy.\n   *\n   * @var string\n   */\n  public $admissionPolicy;\n  /**\n   * The ID of the Anywhere cache instance.\n   *\n   * @var string\n   */\n  public $anywhereCacheId;\n  /**\n   * The name of the bucket containing this cache instance.\n   *\n   * @var string\n   */\n  public $bucket;\n  /**\n   * The creation time of the cache instance in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $createTime;\n  /**\n   * The ID of the resource, including the project number, bucket name and\n   * anywhere cache ID.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For Anywhere Cache, this is always\n   * storage#anywhereCache.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * True if the cache instance has an active Update long-running operation.\n   *\n   * @var bool\n   */\n  public $pendingUpdate;\n  /**\n   * The link to this cache instance.\n   *\n   * @var string\n   */\n  public $selfLink;\n  /**\n   * The current state of the cache instance.\n   *\n   * @var string\n   */\n  public $state;\n  /**\n   * The TTL of all cache entries in whole seconds. e.g., \"7200s\".\n   *\n   * @var string\n   */\n  public $ttl;\n  /**\n   * The modification time of the cache instance metadata in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $updateTime;\n  /**\n   * The zone in which the cache instance is running. For example, us-\n   * central1-a.\n   *\n   * @var string\n   */\n  public $zone;\n\n  /**\n   * The cache-level entry admission policy.\n   *\n   * @param string $admissionPolicy\n   */\n  public function setAdmissionPolicy($admissionPolicy)\n  {\n    $this->admissionPolicy = $admissionPolicy;\n  }\n  /**\n   * @return string\n   */\n  public function getAdmissionPolicy()\n  {\n    return $this->admissionPolicy;\n  }\n  /**\n   * The ID of the Anywhere cache instance.\n   *\n   * @param string $anywhereCacheId\n   */\n  public function setAnywhereCacheId($anywhereCacheId)\n  {\n    $this->anywhereCacheId = $anywhereCacheId;\n  }\n  /**\n   * @return string\n   */\n  public function getAnywhereCacheId()\n  {\n    return $this->anywhereCacheId;\n  }\n  /**\n   * The name of the bucket containing this cache instance.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * The creation time of the cache instance in RFC 3339 format.\n   *\n   * @param string $createTime\n   */\n  public function setCreateTime($createTime)\n  {\n    $this->createTime = $createTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCreateTime()\n  {\n    return $this->createTime;\n  }\n  /**\n   * The ID of the resource, including the project number, bucket name and\n   * anywhere cache ID.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For Anywhere Cache, this is always\n   * storage#anywhereCache.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * True if the cache instance has an active Update long-running operation.\n   *\n   * @param bool $pendingUpdate\n   */\n  public function setPendingUpdate($pendingUpdate)\n  {\n    $this->pendingUpdate = $pendingUpdate;\n  }\n  /**\n   * @return bool\n   */\n  public function getPendingUpdate()\n  {\n    return $this->pendingUpdate;\n  }\n  /**\n   * The link to this cache instance.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * The current state of the cache instance.\n   *\n   * @param string $state\n   */\n  public function setState($state)\n  {\n    $this->state = $state;\n  }\n  /**\n   * @return string\n   */\n  public function getState()\n  {\n    return $this->state;\n  }\n  /**\n   * The TTL of all cache entries in whole seconds. e.g., \"7200s\".\n   *\n   * @param string $ttl\n   */\n  public function setTtl($ttl)\n  {\n    $this->ttl = $ttl;\n  }\n  /**\n   * @return string\n   */\n  public function getTtl()\n  {\n    return $this->ttl;\n  }\n  /**\n   * The modification time of the cache instance metadata in RFC 3339 format.\n   *\n   * @param string $updateTime\n   */\n  public function setUpdateTime($updateTime)\n  {\n    $this->updateTime = $updateTime;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdateTime()\n  {\n    return $this->updateTime;\n  }\n  /**\n   * The zone in which the cache instance is running. For example, us-\n   * central1-a.\n   *\n   * @param string $zone\n   */\n  public function setZone($zone)\n  {\n    $this->zone = $zone;\n  }\n  /**\n   * @return string\n   */\n  public function getZone()\n  {\n    return $this->zone;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(AnywhereCache::class, 'Google_Service_Storage_AnywhereCache');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/AnywhereCaches.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass AnywhereCaches extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = AnywhereCache::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of Anywhere Caches, this is always\n   * storage#anywhereCaches.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n\n  /**\n   * The list of items.\n   *\n   * @param AnywhereCache[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return AnywhereCache[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of Anywhere Caches, this is always\n   * storage#anywhereCaches.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(AnywhereCaches::class, 'Google_Service_Storage_AnywhereCaches');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Bucket.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Bucket extends \\Google\\Collection\n{\n  protected $collection_key = 'defaultObjectAcl';\n  protected $aclType = BucketAccessControl::class;\n  protected $aclDataType = 'array';\n  protected $autoclassType = BucketAutoclass::class;\n  protected $autoclassDataType = '';\n  protected $billingType = BucketBilling::class;\n  protected $billingDataType = '';\n  protected $corsType = BucketCors::class;\n  protected $corsDataType = 'array';\n  protected $customPlacementConfigType = BucketCustomPlacementConfig::class;\n  protected $customPlacementConfigDataType = '';\n  /**\n   * The default value for event-based hold on newly created objects in this\n   * bucket. Event-based hold is a way to retain objects indefinitely until an\n   * event occurs, signified by the hold's release. After being released, such\n   * objects will be subject to bucket-level retention (if any). One sample use\n   * case of this flag is for banks to hold loan documents for at least 3 years\n   * after loan is paid in full. Here, bucket-level retention is 3 years and the\n   * event is loan being paid in full. In this example, these objects will be\n   * held intact for any number of years until the event has occurred (event-\n   * based hold on the object is released) and then 3 more years after that.\n   * That means retention duration of the objects begins from the moment event-\n   * based hold transitioned from true to false. Objects under event-based hold\n   * cannot be deleted, overwritten or archived until the hold is removed.\n   *\n   * @var bool\n   */\n  public $defaultEventBasedHold;\n  protected $defaultObjectAclType = ObjectAccessControl::class;\n  protected $defaultObjectAclDataType = 'array';\n  protected $encryptionType = BucketEncryption::class;\n  protected $encryptionDataType = '';\n  /**\n   * HTTP 1.1 Entity tag for the bucket.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * The generation of this bucket.\n   *\n   * @var string\n   */\n  public $generation;\n  /**\n   * The hard delete time of the bucket in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $hardDeleteTime;\n  protected $hierarchicalNamespaceType = BucketHierarchicalNamespace::class;\n  protected $hierarchicalNamespaceDataType = '';\n  protected $iamConfigurationType = BucketIamConfiguration::class;\n  protected $iamConfigurationDataType = '';\n  /**\n   * The ID of the bucket. For buckets, the id and name properties are the same.\n   *\n   * @var string\n   */\n  public $id;\n  protected $ipFilterType = BucketIpFilter::class;\n  protected $ipFilterDataType = '';\n  /**\n   * The kind of item this is. For buckets, this is always storage#bucket.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * User-provided labels, in key/value pairs.\n   *\n   * @var string[]\n   */\n  public $labels;\n  protected $lifecycleType = BucketLifecycle::class;\n  protected $lifecycleDataType = '';\n  /**\n   * The location of the bucket. Object data for objects in the bucket resides\n   * in physical storage within this region. Defaults to US. See the\n   * [Developer's Guide](https://cloud.google.com/storage/docs/locations) for\n   * the authoritative list.\n   *\n   * @var string\n   */\n  public $location;\n  /**\n   * The type of the bucket location.\n   *\n   * @var string\n   */\n  public $locationType;\n  protected $loggingType = BucketLogging::class;\n  protected $loggingDataType = '';\n  /**\n   * The metadata generation of this bucket.\n   *\n   * @var string\n   */\n  public $metageneration;\n  /**\n   * The name of the bucket.\n   *\n   * @var string\n   */\n  public $name;\n  protected $objectRetentionType = BucketObjectRetention::class;\n  protected $objectRetentionDataType = '';\n  protected $ownerType = BucketOwner::class;\n  protected $ownerDataType = '';\n  /**\n   * The project number of the project the bucket belongs to.\n   *\n   * @var string\n   */\n  public $projectNumber;\n  protected $retentionPolicyType = BucketRetentionPolicy::class;\n  protected $retentionPolicyDataType = '';\n  /**\n   * The Recovery Point Objective (RPO) of this bucket. Set to ASYNC_TURBO to\n   * turn on Turbo Replication on a bucket.\n   *\n   * @var string\n   */\n  public $rpo;\n  /**\n   * Reserved for future use.\n   *\n   * @var bool\n   */\n  public $satisfiesPZI;\n  /**\n   * Reserved for future use.\n   *\n   * @var bool\n   */\n  public $satisfiesPZS;\n  /**\n   * The URI of this bucket.\n   *\n   * @var string\n   */\n  public $selfLink;\n  protected $softDeletePolicyType = BucketSoftDeletePolicy::class;\n  protected $softDeletePolicyDataType = '';\n  /**\n   * The soft delete time of the bucket in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $softDeleteTime;\n  /**\n   * The bucket's default storage class, used whenever no storageClass is\n   * specified for a newly-created object. This defines how objects in the\n   * bucket are stored and determines the SLA and the cost of storage. Values\n   * include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, ARCHIVE,\n   * and DURABLE_REDUCED_AVAILABILITY. If this value is not specified when the\n   * bucket is created, it will default to STANDARD. For more information, see\n   * [Storage Classes](https://cloud.google.com/storage/docs/storage-classes).\n   *\n   * @var string\n   */\n  public $storageClass;\n  /**\n   * The creation time of the bucket in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $timeCreated;\n  /**\n   * The modification time of the bucket in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $updated;\n  protected $versioningType = BucketVersioning::class;\n  protected $versioningDataType = '';\n  protected $websiteType = BucketWebsite::class;\n  protected $websiteDataType = '';\n\n  /**\n   * Access controls on the bucket.\n   *\n   * @param BucketAccessControl[] $acl\n   */\n  public function setAcl($acl)\n  {\n    $this->acl = $acl;\n  }\n  /**\n   * @return BucketAccessControl[]\n   */\n  public function getAcl()\n  {\n    return $this->acl;\n  }\n  /**\n   * The bucket's Autoclass configuration.\n   *\n   * @param BucketAutoclass $autoclass\n   */\n  public function setAutoclass(BucketAutoclass $autoclass)\n  {\n    $this->autoclass = $autoclass;\n  }\n  /**\n   * @return BucketAutoclass\n   */\n  public function getAutoclass()\n  {\n    return $this->autoclass;\n  }\n  /**\n   * The bucket's billing configuration.\n   *\n   * @param BucketBilling $billing\n   */\n  public function setBilling(BucketBilling $billing)\n  {\n    $this->billing = $billing;\n  }\n  /**\n   * @return BucketBilling\n   */\n  public function getBilling()\n  {\n    return $this->billing;\n  }\n  /**\n   * The bucket's Cross-Origin Resource Sharing (CORS) configuration.\n   *\n   * @param BucketCors[] $cors\n   */\n  public function setCors($cors)\n  {\n    $this->cors = $cors;\n  }\n  /**\n   * @return BucketCors[]\n   */\n  public function getCors()\n  {\n    return $this->cors;\n  }\n  /**\n   * The bucket's custom placement configuration for Custom Dual Regions.\n   *\n   * @param BucketCustomPlacementConfig $customPlacementConfig\n   */\n  public function setCustomPlacementConfig(BucketCustomPlacementConfig $customPlacementConfig)\n  {\n    $this->customPlacementConfig = $customPlacementConfig;\n  }\n  /**\n   * @return BucketCustomPlacementConfig\n   */\n  public function getCustomPlacementConfig()\n  {\n    return $this->customPlacementConfig;\n  }\n  /**\n   * The default value for event-based hold on newly created objects in this\n   * bucket. Event-based hold is a way to retain objects indefinitely until an\n   * event occurs, signified by the hold's release. After being released, such\n   * objects will be subject to bucket-level retention (if any). One sample use\n   * case of this flag is for banks to hold loan documents for at least 3 years\n   * after loan is paid in full. Here, bucket-level retention is 3 years and the\n   * event is loan being paid in full. In this example, these objects will be\n   * held intact for any number of years until the event has occurred (event-\n   * based hold on the object is released) and then 3 more years after that.\n   * That means retention duration of the objects begins from the moment event-\n   * based hold transitioned from true to false. Objects under event-based hold\n   * cannot be deleted, overwritten or archived until the hold is removed.\n   *\n   * @param bool $defaultEventBasedHold\n   */\n  public function setDefaultEventBasedHold($defaultEventBasedHold)\n  {\n    $this->defaultEventBasedHold = $defaultEventBasedHold;\n  }\n  /**\n   * @return bool\n   */\n  public function getDefaultEventBasedHold()\n  {\n    return $this->defaultEventBasedHold;\n  }\n  /**\n   * Default access controls to apply to new objects when no ACL is provided.\n   *\n   * @param ObjectAccessControl[] $defaultObjectAcl\n   */\n  public function setDefaultObjectAcl($defaultObjectAcl)\n  {\n    $this->defaultObjectAcl = $defaultObjectAcl;\n  }\n  /**\n   * @return ObjectAccessControl[]\n   */\n  public function getDefaultObjectAcl()\n  {\n    return $this->defaultObjectAcl;\n  }\n  /**\n   * Encryption configuration for a bucket.\n   *\n   * @param BucketEncryption $encryption\n   */\n  public function setEncryption(BucketEncryption $encryption)\n  {\n    $this->encryption = $encryption;\n  }\n  /**\n   * @return BucketEncryption\n   */\n  public function getEncryption()\n  {\n    return $this->encryption;\n  }\n  /**\n   * HTTP 1.1 Entity tag for the bucket.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * The generation of this bucket.\n   *\n   * @param string $generation\n   */\n  public function setGeneration($generation)\n  {\n    $this->generation = $generation;\n  }\n  /**\n   * @return string\n   */\n  public function getGeneration()\n  {\n    return $this->generation;\n  }\n  /**\n   * The hard delete time of the bucket in RFC 3339 format.\n   *\n   * @param string $hardDeleteTime\n   */\n  public function setHardDeleteTime($hardDeleteTime)\n  {\n    $this->hardDeleteTime = $hardDeleteTime;\n  }\n  /**\n   * @return string\n   */\n  public function getHardDeleteTime()\n  {\n    return $this->hardDeleteTime;\n  }\n  /**\n   * The bucket's hierarchical namespace configuration.\n   *\n   * @param BucketHierarchicalNamespace $hierarchicalNamespace\n   */\n  public function setHierarchicalNamespace(BucketHierarchicalNamespace $hierarchicalNamespace)\n  {\n    $this->hierarchicalNamespace = $hierarchicalNamespace;\n  }\n  /**\n   * @return BucketHierarchicalNamespace\n   */\n  public function getHierarchicalNamespace()\n  {\n    return $this->hierarchicalNamespace;\n  }\n  /**\n   * The bucket's IAM configuration.\n   *\n   * @param BucketIamConfiguration $iamConfiguration\n   */\n  public function setIamConfiguration(BucketIamConfiguration $iamConfiguration)\n  {\n    $this->iamConfiguration = $iamConfiguration;\n  }\n  /**\n   * @return BucketIamConfiguration\n   */\n  public function getIamConfiguration()\n  {\n    return $this->iamConfiguration;\n  }\n  /**\n   * The ID of the bucket. For buckets, the id and name properties are the same.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The bucket's IP filter configuration. Specifies the network sources that\n   * are allowed to access the operations on the bucket, as well as its\n   * underlying objects. Only enforced when the mode is set to 'Enabled'.\n   *\n   * @param BucketIpFilter $ipFilter\n   */\n  public function setIpFilter(BucketIpFilter $ipFilter)\n  {\n    $this->ipFilter = $ipFilter;\n  }\n  /**\n   * @return BucketIpFilter\n   */\n  public function getIpFilter()\n  {\n    return $this->ipFilter;\n  }\n  /**\n   * The kind of item this is. For buckets, this is always storage#bucket.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * User-provided labels, in key/value pairs.\n   *\n   * @param string[] $labels\n   */\n  public function setLabels($labels)\n  {\n    $this->labels = $labels;\n  }\n  /**\n   * @return string[]\n   */\n  public function getLabels()\n  {\n    return $this->labels;\n  }\n  /**\n   * The bucket's lifecycle configuration. See [Lifecycle\n   * Management](https://cloud.google.com/storage/docs/lifecycle) for more\n   * information.\n   *\n   * @param BucketLifecycle $lifecycle\n   */\n  public function setLifecycle(BucketLifecycle $lifecycle)\n  {\n    $this->lifecycle = $lifecycle;\n  }\n  /**\n   * @return BucketLifecycle\n   */\n  public function getLifecycle()\n  {\n    return $this->lifecycle;\n  }\n  /**\n   * The location of the bucket. Object data for objects in the bucket resides\n   * in physical storage within this region. Defaults to US. See the\n   * [Developer's Guide](https://cloud.google.com/storage/docs/locations) for\n   * the authoritative list.\n   *\n   * @param string $location\n   */\n  public function setLocation($location)\n  {\n    $this->location = $location;\n  }\n  /**\n   * @return string\n   */\n  public function getLocation()\n  {\n    return $this->location;\n  }\n  /**\n   * The type of the bucket location.\n   *\n   * @param string $locationType\n   */\n  public function setLocationType($locationType)\n  {\n    $this->locationType = $locationType;\n  }\n  /**\n   * @return string\n   */\n  public function getLocationType()\n  {\n    return $this->locationType;\n  }\n  /**\n   * The bucket's logging configuration, which defines the destination bucket\n   * and optional name prefix for the current bucket's logs.\n   *\n   * @param BucketLogging $logging\n   */\n  public function setLogging(BucketLogging $logging)\n  {\n    $this->logging = $logging;\n  }\n  /**\n   * @return BucketLogging\n   */\n  public function getLogging()\n  {\n    return $this->logging;\n  }\n  /**\n   * The metadata generation of this bucket.\n   *\n   * @param string $metageneration\n   */\n  public function setMetageneration($metageneration)\n  {\n    $this->metageneration = $metageneration;\n  }\n  /**\n   * @return string\n   */\n  public function getMetageneration()\n  {\n    return $this->metageneration;\n  }\n  /**\n   * The name of the bucket.\n   *\n   * @param string $name\n   */\n  public function setName($name)\n  {\n    $this->name = $name;\n  }\n  /**\n   * @return string\n   */\n  public function getName()\n  {\n    return $this->name;\n  }\n  /**\n   * The bucket's object retention config.\n   *\n   * @param BucketObjectRetention $objectRetention\n   */\n  public function setObjectRetention(BucketObjectRetention $objectRetention)\n  {\n    $this->objectRetention = $objectRetention;\n  }\n  /**\n   * @return BucketObjectRetention\n   */\n  public function getObjectRetention()\n  {\n    return $this->objectRetention;\n  }\n  /**\n   * The owner of the bucket. This is always the project team's owner group.\n   *\n   * @param BucketOwner $owner\n   */\n  public function setOwner(BucketOwner $owner)\n  {\n    $this->owner = $owner;\n  }\n  /**\n   * @return BucketOwner\n   */\n  public function getOwner()\n  {\n    return $this->owner;\n  }\n  /**\n   * The project number of the project the bucket belongs to.\n   *\n   * @param string $projectNumber\n   */\n  public function setProjectNumber($projectNumber)\n  {\n    $this->projectNumber = $projectNumber;\n  }\n  /**\n   * @return string\n   */\n  public function getProjectNumber()\n  {\n    return $this->projectNumber;\n  }\n  /**\n   * The bucket's retention policy. The retention policy enforces a minimum\n   * retention time for all objects contained in the bucket, based on their\n   * creation time. Any attempt to overwrite or delete objects younger than the\n   * retention period will result in a PERMISSION_DENIED error. An unlocked\n   * retention policy can be modified or removed from the bucket via a\n   * storage.buckets.update operation. A locked retention policy cannot be\n   * removed or shortened in duration for the lifetime of the bucket. Attempting\n   * to remove or decrease period of a locked retention policy will result in a\n   * PERMISSION_DENIED error.\n   *\n   * @param BucketRetentionPolicy $retentionPolicy\n   */\n  public function setRetentionPolicy(BucketRetentionPolicy $retentionPolicy)\n  {\n    $this->retentionPolicy = $retentionPolicy;\n  }\n  /**\n   * @return BucketRetentionPolicy\n   */\n  public function getRetentionPolicy()\n  {\n    return $this->retentionPolicy;\n  }\n  /**\n   * The Recovery Point Objective (RPO) of this bucket. Set to ASYNC_TURBO to\n   * turn on Turbo Replication on a bucket.\n   *\n   * @param string $rpo\n   */\n  public function setRpo($rpo)\n  {\n    $this->rpo = $rpo;\n  }\n  /**\n   * @return string\n   */\n  public function getRpo()\n  {\n    return $this->rpo;\n  }\n  /**\n   * Reserved for future use.\n   *\n   * @param bool $satisfiesPZI\n   */\n  public function setSatisfiesPZI($satisfiesPZI)\n  {\n    $this->satisfiesPZI = $satisfiesPZI;\n  }\n  /**\n   * @return bool\n   */\n  public function getSatisfiesPZI()\n  {\n    return $this->satisfiesPZI;\n  }\n  /**\n   * Reserved for future use.\n   *\n   * @param bool $satisfiesPZS\n   */\n  public function setSatisfiesPZS($satisfiesPZS)\n  {\n    $this->satisfiesPZS = $satisfiesPZS;\n  }\n  /**\n   * @return bool\n   */\n  public function getSatisfiesPZS()\n  {\n    return $this->satisfiesPZS;\n  }\n  /**\n   * The URI of this bucket.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * The bucket's soft delete policy, which defines the period of time that\n   * soft-deleted objects will be retained, and cannot be permanently deleted.\n   *\n   * @param BucketSoftDeletePolicy $softDeletePolicy\n   */\n  public function setSoftDeletePolicy(BucketSoftDeletePolicy $softDeletePolicy)\n  {\n    $this->softDeletePolicy = $softDeletePolicy;\n  }\n  /**\n   * @return BucketSoftDeletePolicy\n   */\n  public function getSoftDeletePolicy()\n  {\n    return $this->softDeletePolicy;\n  }\n  /**\n   * The soft delete time of the bucket in RFC 3339 format.\n   *\n   * @param string $softDeleteTime\n   */\n  public function setSoftDeleteTime($softDeleteTime)\n  {\n    $this->softDeleteTime = $softDeleteTime;\n  }\n  /**\n   * @return string\n   */\n  public function getSoftDeleteTime()\n  {\n    return $this->softDeleteTime;\n  }\n  /**\n   * The bucket's default storage class, used whenever no storageClass is\n   * specified for a newly-created object. This defines how objects in the\n   * bucket are stored and determines the SLA and the cost of storage. Values\n   * include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, ARCHIVE,\n   * and DURABLE_REDUCED_AVAILABILITY. If this value is not specified when the\n   * bucket is created, it will default to STANDARD. For more information, see\n   * [Storage Classes](https://cloud.google.com/storage/docs/storage-classes).\n   *\n   * @param string $storageClass\n   */\n  public function setStorageClass($storageClass)\n  {\n    $this->storageClass = $storageClass;\n  }\n  /**\n   * @return string\n   */\n  public function getStorageClass()\n  {\n    return $this->storageClass;\n  }\n  /**\n   * The creation time of the bucket in RFC 3339 format.\n   *\n   * @param string $timeCreated\n   */\n  public function setTimeCreated($timeCreated)\n  {\n    $this->timeCreated = $timeCreated;\n  }\n  /**\n   * @return string\n   */\n  public function getTimeCreated()\n  {\n    return $this->timeCreated;\n  }\n  /**\n   * The modification time of the bucket in RFC 3339 format.\n   *\n   * @param string $updated\n   */\n  public function setUpdated($updated)\n  {\n    $this->updated = $updated;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdated()\n  {\n    return $this->updated;\n  }\n  /**\n   * The bucket's versioning configuration.\n   *\n   * @param BucketVersioning $versioning\n   */\n  public function setVersioning(BucketVersioning $versioning)\n  {\n    $this->versioning = $versioning;\n  }\n  /**\n   * @return BucketVersioning\n   */\n  public function getVersioning()\n  {\n    return $this->versioning;\n  }\n  /**\n   * The bucket's website configuration, controlling how the service behaves\n   * when accessing bucket contents as a web site. See the [Static Website\n   * Examples](https://cloud.google.com/storage/docs/static-website) for more\n   * information.\n   *\n   * @param BucketWebsite $website\n   */\n  public function setWebsite(BucketWebsite $website)\n  {\n    $this->website = $website;\n  }\n  /**\n   * @return BucketWebsite\n   */\n  public function getWebsite()\n  {\n    return $this->website;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Bucket::class, 'Google_Service_Storage_Bucket');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketAccessControl.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketAccessControl extends \\Google\\Model\n{\n  /**\n   * The name of the bucket.\n   *\n   * @var string\n   */\n  public $bucket;\n  /**\n   * The domain associated with the entity, if any.\n   *\n   * @var string\n   */\n  public $domain;\n  /**\n   * The email address associated with the entity, if any.\n   *\n   * @var string\n   */\n  public $email;\n  /**\n   * The entity holding the permission, in one of the following forms: - user-\n   * userId  - user-email  - group-groupId  - group-email  - domain-domain  -\n   * project-team-projectId  - allUsers  - allAuthenticatedUsers Examples:  -\n   * The user liz@example.com would be user-liz@example.com.  - The group\n   * example@googlegroups.com would be group-example@googlegroups.com.  - To\n   * refer to all members of the Google Apps for Business domain example.com,\n   * the entity would be domain-example.com.\n   *\n   * @var string\n   */\n  public $entity;\n  /**\n   * The ID for the entity, if any.\n   *\n   * @var string\n   */\n  public $entityId;\n  /**\n   * HTTP 1.1 Entity tag for the access-control entry.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * The ID of the access-control entry.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For bucket access control entries, this is always\n   * storage#bucketAccessControl.\n   *\n   * @var string\n   */\n  public $kind;\n  protected $projectTeamType = BucketAccessControlProjectTeam::class;\n  protected $projectTeamDataType = '';\n  /**\n   * The access permission for the entity.\n   *\n   * @var string\n   */\n  public $role;\n  /**\n   * The link to this access-control entry.\n   *\n   * @var string\n   */\n  public $selfLink;\n\n  /**\n   * The name of the bucket.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * The domain associated with the entity, if any.\n   *\n   * @param string $domain\n   */\n  public function setDomain($domain)\n  {\n    $this->domain = $domain;\n  }\n  /**\n   * @return string\n   */\n  public function getDomain()\n  {\n    return $this->domain;\n  }\n  /**\n   * The email address associated with the entity, if any.\n   *\n   * @param string $email\n   */\n  public function setEmail($email)\n  {\n    $this->email = $email;\n  }\n  /**\n   * @return string\n   */\n  public function getEmail()\n  {\n    return $this->email;\n  }\n  /**\n   * The entity holding the permission, in one of the following forms: - user-\n   * userId  - user-email  - group-groupId  - group-email  - domain-domain  -\n   * project-team-projectId  - allUsers  - allAuthenticatedUsers Examples:  -\n   * The user liz@example.com would be user-liz@example.com.  - The group\n   * example@googlegroups.com would be group-example@googlegroups.com.  - To\n   * refer to all members of the Google Apps for Business domain example.com,\n   * the entity would be domain-example.com.\n   *\n   * @param string $entity\n   */\n  public function setEntity($entity)\n  {\n    $this->entity = $entity;\n  }\n  /**\n   * @return string\n   */\n  public function getEntity()\n  {\n    return $this->entity;\n  }\n  /**\n   * The ID for the entity, if any.\n   *\n   * @param string $entityId\n   */\n  public function setEntityId($entityId)\n  {\n    $this->entityId = $entityId;\n  }\n  /**\n   * @return string\n   */\n  public function getEntityId()\n  {\n    return $this->entityId;\n  }\n  /**\n   * HTTP 1.1 Entity tag for the access-control entry.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * The ID of the access-control entry.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For bucket access control entries, this is always\n   * storage#bucketAccessControl.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The project team associated with the entity, if any.\n   *\n   * @param BucketAccessControlProjectTeam $projectTeam\n   */\n  public function setProjectTeam(BucketAccessControlProjectTeam $projectTeam)\n  {\n    $this->projectTeam = $projectTeam;\n  }\n  /**\n   * @return BucketAccessControlProjectTeam\n   */\n  public function getProjectTeam()\n  {\n    return $this->projectTeam;\n  }\n  /**\n   * The access permission for the entity.\n   *\n   * @param string $role\n   */\n  public function setRole($role)\n  {\n    $this->role = $role;\n  }\n  /**\n   * @return string\n   */\n  public function getRole()\n  {\n    return $this->role;\n  }\n  /**\n   * The link to this access-control entry.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketAccessControl::class, 'Google_Service_Storage_BucketAccessControl');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketAccessControlProjectTeam.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketAccessControlProjectTeam extends \\Google\\Model\n{\n  /**\n   * The project number.\n   *\n   * @var string\n   */\n  public $projectNumber;\n  /**\n   * The team.\n   *\n   * @var string\n   */\n  public $team;\n\n  /**\n   * The project number.\n   *\n   * @param string $projectNumber\n   */\n  public function setProjectNumber($projectNumber)\n  {\n    $this->projectNumber = $projectNumber;\n  }\n  /**\n   * @return string\n   */\n  public function getProjectNumber()\n  {\n    return $this->projectNumber;\n  }\n  /**\n   * The team.\n   *\n   * @param string $team\n   */\n  public function setTeam($team)\n  {\n    $this->team = $team;\n  }\n  /**\n   * @return string\n   */\n  public function getTeam()\n  {\n    return $this->team;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketAccessControlProjectTeam::class, 'Google_Service_Storage_BucketAccessControlProjectTeam');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketAccessControls.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketAccessControls extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = BucketAccessControl::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of bucket access control entries, this\n   * is always storage#bucketAccessControls.\n   *\n   * @var string\n   */\n  public $kind;\n\n  /**\n   * The list of items.\n   *\n   * @param BucketAccessControl[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return BucketAccessControl[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of bucket access control entries, this\n   * is always storage#bucketAccessControls.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketAccessControls::class, 'Google_Service_Storage_BucketAccessControls');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketAutoclass.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketAutoclass extends \\Google\\Model\n{\n  /**\n   * Whether or not Autoclass is enabled on this bucket\n   *\n   * @var bool\n   */\n  public $enabled;\n  /**\n   * The storage class that objects in the bucket eventually transition to if\n   * they are not read for a certain length of time. Valid values are NEARLINE\n   * and ARCHIVE.\n   *\n   * @var string\n   */\n  public $terminalStorageClass;\n  /**\n   * A date and time in RFC 3339 format representing the time of the most recent\n   * update to \"terminalStorageClass\".\n   *\n   * @var string\n   */\n  public $terminalStorageClassUpdateTime;\n  /**\n   * A date and time in RFC 3339 format representing the instant at which\n   * \"enabled\" was last toggled.\n   *\n   * @var string\n   */\n  public $toggleTime;\n\n  /**\n   * Whether or not Autoclass is enabled on this bucket\n   *\n   * @param bool $enabled\n   */\n  public function setEnabled($enabled)\n  {\n    $this->enabled = $enabled;\n  }\n  /**\n   * @return bool\n   */\n  public function getEnabled()\n  {\n    return $this->enabled;\n  }\n  /**\n   * The storage class that objects in the bucket eventually transition to if\n   * they are not read for a certain length of time. Valid values are NEARLINE\n   * and ARCHIVE.\n   *\n   * @param string $terminalStorageClass\n   */\n  public function setTerminalStorageClass($terminalStorageClass)\n  {\n    $this->terminalStorageClass = $terminalStorageClass;\n  }\n  /**\n   * @return string\n   */\n  public function getTerminalStorageClass()\n  {\n    return $this->terminalStorageClass;\n  }\n  /**\n   * A date and time in RFC 3339 format representing the time of the most recent\n   * update to \"terminalStorageClass\".\n   *\n   * @param string $terminalStorageClassUpdateTime\n   */\n  public function setTerminalStorageClassUpdateTime($terminalStorageClassUpdateTime)\n  {\n    $this->terminalStorageClassUpdateTime = $terminalStorageClassUpdateTime;\n  }\n  /**\n   * @return string\n   */\n  public function getTerminalStorageClassUpdateTime()\n  {\n    return $this->terminalStorageClassUpdateTime;\n  }\n  /**\n   * A date and time in RFC 3339 format representing the instant at which\n   * \"enabled\" was last toggled.\n   *\n   * @param string $toggleTime\n   */\n  public function setToggleTime($toggleTime)\n  {\n    $this->toggleTime = $toggleTime;\n  }\n  /**\n   * @return string\n   */\n  public function getToggleTime()\n  {\n    return $this->toggleTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketAutoclass::class, 'Google_Service_Storage_BucketAutoclass');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketBilling.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketBilling extends \\Google\\Model\n{\n  /**\n   * When set to true, Requester Pays is enabled for this bucket.\n   *\n   * @var bool\n   */\n  public $requesterPays;\n\n  /**\n   * When set to true, Requester Pays is enabled for this bucket.\n   *\n   * @param bool $requesterPays\n   */\n  public function setRequesterPays($requesterPays)\n  {\n    $this->requesterPays = $requesterPays;\n  }\n  /**\n   * @return bool\n   */\n  public function getRequesterPays()\n  {\n    return $this->requesterPays;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketBilling::class, 'Google_Service_Storage_BucketBilling');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketCors.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketCors extends \\Google\\Collection\n{\n  protected $collection_key = 'responseHeader';\n  /**\n   * The value, in seconds, to return in the  Access-Control-Max-Age header used\n   * in preflight responses.\n   *\n   * @var int\n   */\n  public $maxAgeSeconds;\n  /**\n   * The list of HTTP methods on which to include CORS response headers, (GET,\n   * OPTIONS, POST, etc) Note: \"*\" is permitted in the list of methods, and\n   * means \"any method\".\n   *\n   * @var string[]\n   */\n  public $method;\n  /**\n   * The list of Origins eligible to receive CORS response headers. Note: \"*\" is\n   * permitted in the list of origins, and means \"any Origin\".\n   *\n   * @var string[]\n   */\n  public $origin;\n  /**\n   * The list of HTTP headers other than the simple response headers to give\n   * permission for the user-agent to share across domains.\n   *\n   * @var string[]\n   */\n  public $responseHeader;\n\n  /**\n   * The value, in seconds, to return in the  Access-Control-Max-Age header used\n   * in preflight responses.\n   *\n   * @param int $maxAgeSeconds\n   */\n  public function setMaxAgeSeconds($maxAgeSeconds)\n  {\n    $this->maxAgeSeconds = $maxAgeSeconds;\n  }\n  /**\n   * @return int\n   */\n  public function getMaxAgeSeconds()\n  {\n    return $this->maxAgeSeconds;\n  }\n  /**\n   * The list of HTTP methods on which to include CORS response headers, (GET,\n   * OPTIONS, POST, etc) Note: \"*\" is permitted in the list of methods, and\n   * means \"any method\".\n   *\n   * @param string[] $method\n   */\n  public function setMethod($method)\n  {\n    $this->method = $method;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMethod()\n  {\n    return $this->method;\n  }\n  /**\n   * The list of Origins eligible to receive CORS response headers. Note: \"*\" is\n   * permitted in the list of origins, and means \"any Origin\".\n   *\n   * @param string[] $origin\n   */\n  public function setOrigin($origin)\n  {\n    $this->origin = $origin;\n  }\n  /**\n   * @return string[]\n   */\n  public function getOrigin()\n  {\n    return $this->origin;\n  }\n  /**\n   * The list of HTTP headers other than the simple response headers to give\n   * permission for the user-agent to share across domains.\n   *\n   * @param string[] $responseHeader\n   */\n  public function setResponseHeader($responseHeader)\n  {\n    $this->responseHeader = $responseHeader;\n  }\n  /**\n   * @return string[]\n   */\n  public function getResponseHeader()\n  {\n    return $this->responseHeader;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketCors::class, 'Google_Service_Storage_BucketCors');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketCustomPlacementConfig.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketCustomPlacementConfig extends \\Google\\Collection\n{\n  protected $collection_key = 'dataLocations';\n  /**\n   * The list of regional locations in which data is placed.\n   *\n   * @var string[]\n   */\n  public $dataLocations;\n\n  /**\n   * The list of regional locations in which data is placed.\n   *\n   * @param string[] $dataLocations\n   */\n  public function setDataLocations($dataLocations)\n  {\n    $this->dataLocations = $dataLocations;\n  }\n  /**\n   * @return string[]\n   */\n  public function getDataLocations()\n  {\n    return $this->dataLocations;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketCustomPlacementConfig::class, 'Google_Service_Storage_BucketCustomPlacementConfig');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketEncryption.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketEncryption extends \\Google\\Model\n{\n  protected $customerManagedEncryptionEnforcementConfigType = BucketEncryptionCustomerManagedEncryptionEnforcementConfig::class;\n  protected $customerManagedEncryptionEnforcementConfigDataType = '';\n  protected $customerSuppliedEncryptionEnforcementConfigType = BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig::class;\n  protected $customerSuppliedEncryptionEnforcementConfigDataType = '';\n  /**\n   * A Cloud KMS key that will be used to encrypt objects inserted into this\n   * bucket, if no encryption method is specified.\n   *\n   * @var string\n   */\n  public $defaultKmsKeyName;\n  protected $googleManagedEncryptionEnforcementConfigType = BucketEncryptionGoogleManagedEncryptionEnforcementConfig::class;\n  protected $googleManagedEncryptionEnforcementConfigDataType = '';\n\n  /**\n   * If set, the new objects created in this bucket must comply with this\n   * enforcement config. Changing this has no effect on existing objects; it\n   * applies to new objects only. If omitted, the new objects are allowed to be\n   * encrypted with Customer Managed Encryption type by default.\n   *\n   * @param BucketEncryptionCustomerManagedEncryptionEnforcementConfig $customerManagedEncryptionEnforcementConfig\n   */\n  public function setCustomerManagedEncryptionEnforcementConfig(BucketEncryptionCustomerManagedEncryptionEnforcementConfig $customerManagedEncryptionEnforcementConfig)\n  {\n    $this->customerManagedEncryptionEnforcementConfig = $customerManagedEncryptionEnforcementConfig;\n  }\n  /**\n   * @return BucketEncryptionCustomerManagedEncryptionEnforcementConfig\n   */\n  public function getCustomerManagedEncryptionEnforcementConfig()\n  {\n    return $this->customerManagedEncryptionEnforcementConfig;\n  }\n  /**\n   * If set, the new objects created in this bucket must comply with this\n   * enforcement config. Changing this has no effect on existing objects; it\n   * applies to new objects only. If omitted, the new objects are allowed to be\n   * encrypted with Customer Supplied Encryption type by default.\n   *\n   * @param BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig $customerSuppliedEncryptionEnforcementConfig\n   */\n  public function setCustomerSuppliedEncryptionEnforcementConfig(BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig $customerSuppliedEncryptionEnforcementConfig)\n  {\n    $this->customerSuppliedEncryptionEnforcementConfig = $customerSuppliedEncryptionEnforcementConfig;\n  }\n  /**\n   * @return BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig\n   */\n  public function getCustomerSuppliedEncryptionEnforcementConfig()\n  {\n    return $this->customerSuppliedEncryptionEnforcementConfig;\n  }\n  /**\n   * A Cloud KMS key that will be used to encrypt objects inserted into this\n   * bucket, if no encryption method is specified.\n   *\n   * @param string $defaultKmsKeyName\n   */\n  public function setDefaultKmsKeyName($defaultKmsKeyName)\n  {\n    $this->defaultKmsKeyName = $defaultKmsKeyName;\n  }\n  /**\n   * @return string\n   */\n  public function getDefaultKmsKeyName()\n  {\n    return $this->defaultKmsKeyName;\n  }\n  /**\n   * If set, the new objects created in this bucket must comply with this\n   * enforcement config. Changing this has no effect on existing objects; it\n   * applies to new objects only. If omitted, the new objects are allowed to be\n   * encrypted with Google Managed Encryption type by default.\n   *\n   * @param BucketEncryptionGoogleManagedEncryptionEnforcementConfig $googleManagedEncryptionEnforcementConfig\n   */\n  public function setGoogleManagedEncryptionEnforcementConfig(BucketEncryptionGoogleManagedEncryptionEnforcementConfig $googleManagedEncryptionEnforcementConfig)\n  {\n    $this->googleManagedEncryptionEnforcementConfig = $googleManagedEncryptionEnforcementConfig;\n  }\n  /**\n   * @return BucketEncryptionGoogleManagedEncryptionEnforcementConfig\n   */\n  public function getGoogleManagedEncryptionEnforcementConfig()\n  {\n    return $this->googleManagedEncryptionEnforcementConfig;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketEncryption::class, 'Google_Service_Storage_BucketEncryption');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketEncryptionCustomerManagedEncryptionEnforcementConfig.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketEncryptionCustomerManagedEncryptionEnforcementConfig extends \\Google\\Model\n{\n  /**\n   * Creation of new objects with Customer-Managed Encryption is not restricted.\n   */\n  public const RESTRICTION_MODE_NotRestricted = 'NotRestricted';\n  /**\n   * Creation of new objects with Customer-Managed Encryption is fully\n   * restricted.\n   */\n  public const RESTRICTION_MODE_FullyRestricted = 'FullyRestricted';\n  /**\n   * Server-determined value that indicates the time from which configuration\n   * was enforced and effective. This value is in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $effectiveTime;\n  /**\n   * Restriction mode for Customer-Managed Encryption Keys. Defaults to\n   * NotRestricted.\n   *\n   * @var string\n   */\n  public $restrictionMode;\n\n  /**\n   * Server-determined value that indicates the time from which configuration\n   * was enforced and effective. This value is in RFC 3339 format.\n   *\n   * @param string $effectiveTime\n   */\n  public function setEffectiveTime($effectiveTime)\n  {\n    $this->effectiveTime = $effectiveTime;\n  }\n  /**\n   * @return string\n   */\n  public function getEffectiveTime()\n  {\n    return $this->effectiveTime;\n  }\n  /**\n   * Restriction mode for Customer-Managed Encryption Keys. Defaults to\n   * NotRestricted.\n   *\n   * Accepted values: NotRestricted, FullyRestricted\n   *\n   * @param self::RESTRICTION_MODE_* $restrictionMode\n   */\n  public function setRestrictionMode($restrictionMode)\n  {\n    $this->restrictionMode = $restrictionMode;\n  }\n  /**\n   * @return self::RESTRICTION_MODE_*\n   */\n  public function getRestrictionMode()\n  {\n    return $this->restrictionMode;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketEncryptionCustomerManagedEncryptionEnforcementConfig::class, 'Google_Service_Storage_BucketEncryptionCustomerManagedEncryptionEnforcementConfig');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig extends \\Google\\Model\n{\n  /**\n   * Creation of new objects with Customer-Supplied Encryption is not\n   * restricted.\n   */\n  public const RESTRICTION_MODE_NotRestricted = 'NotRestricted';\n  /**\n   * Creation of new objects with Customer-Supplied Encryption is fully\n   * restricted.\n   */\n  public const RESTRICTION_MODE_FullyRestricted = 'FullyRestricted';\n  /**\n   * Server-determined value that indicates the time from which configuration\n   * was enforced and effective. This value is in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $effectiveTime;\n  /**\n   * Restriction mode for Customer-Supplied Encryption Keys. Defaults to\n   * NotRestricted.\n   *\n   * @var string\n   */\n  public $restrictionMode;\n\n  /**\n   * Server-determined value that indicates the time from which configuration\n   * was enforced and effective. This value is in RFC 3339 format.\n   *\n   * @param string $effectiveTime\n   */\n  public function setEffectiveTime($effectiveTime)\n  {\n    $this->effectiveTime = $effectiveTime;\n  }\n  /**\n   * @return string\n   */\n  public function getEffectiveTime()\n  {\n    return $this->effectiveTime;\n  }\n  /**\n   * Restriction mode for Customer-Supplied Encryption Keys. Defaults to\n   * NotRestricted.\n   *\n   * Accepted values: NotRestricted, FullyRestricted\n   *\n   * @param self::RESTRICTION_MODE_* $restrictionMode\n   */\n  public function setRestrictionMode($restrictionMode)\n  {\n    $this->restrictionMode = $restrictionMode;\n  }\n  /**\n   * @return self::RESTRICTION_MODE_*\n   */\n  public function getRestrictionMode()\n  {\n    return $this->restrictionMode;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig::class, 'Google_Service_Storage_BucketEncryptionCustomerSuppliedEncryptionEnforcementConfig');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketEncryptionGoogleManagedEncryptionEnforcementConfig.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketEncryptionGoogleManagedEncryptionEnforcementConfig extends \\Google\\Model\n{\n  /**\n   * Creation of new objects with Google Managed Encryption is not restricted.\n   */\n  public const RESTRICTION_MODE_NotRestricted = 'NotRestricted';\n  /**\n   * Creation of new objects with Google Managed Encryption is fully restricted.\n   */\n  public const RESTRICTION_MODE_FullyRestricted = 'FullyRestricted';\n  /**\n   * Server-determined value that indicates the time from which configuration\n   * was enforced and effective. This value is in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $effectiveTime;\n  /**\n   * Restriction mode for Google-Managed Encryption Keys. Defaults to\n   * NotRestricted.\n   *\n   * @var string\n   */\n  public $restrictionMode;\n\n  /**\n   * Server-determined value that indicates the time from which configuration\n   * was enforced and effective. This value is in RFC 3339 format.\n   *\n   * @param string $effectiveTime\n   */\n  public function setEffectiveTime($effectiveTime)\n  {\n    $this->effectiveTime = $effectiveTime;\n  }\n  /**\n   * @return string\n   */\n  public function getEffectiveTime()\n  {\n    return $this->effectiveTime;\n  }\n  /**\n   * Restriction mode for Google-Managed Encryption Keys. Defaults to\n   * NotRestricted.\n   *\n   * Accepted values: NotRestricted, FullyRestricted\n   *\n   * @param self::RESTRICTION_MODE_* $restrictionMode\n   */\n  public function setRestrictionMode($restrictionMode)\n  {\n    $this->restrictionMode = $restrictionMode;\n  }\n  /**\n   * @return self::RESTRICTION_MODE_*\n   */\n  public function getRestrictionMode()\n  {\n    return $this->restrictionMode;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketEncryptionGoogleManagedEncryptionEnforcementConfig::class, 'Google_Service_Storage_BucketEncryptionGoogleManagedEncryptionEnforcementConfig');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketHierarchicalNamespace.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketHierarchicalNamespace extends \\Google\\Model\n{\n  /**\n   * When set to true, hierarchical namespace is enabled for this bucket.\n   *\n   * @var bool\n   */\n  public $enabled;\n\n  /**\n   * When set to true, hierarchical namespace is enabled for this bucket.\n   *\n   * @param bool $enabled\n   */\n  public function setEnabled($enabled)\n  {\n    $this->enabled = $enabled;\n  }\n  /**\n   * @return bool\n   */\n  public function getEnabled()\n  {\n    return $this->enabled;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketHierarchicalNamespace::class, 'Google_Service_Storage_BucketHierarchicalNamespace');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketIamConfiguration.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketIamConfiguration extends \\Google\\Model\n{\n  protected $bucketPolicyOnlyType = BucketIamConfigurationBucketPolicyOnly::class;\n  protected $bucketPolicyOnlyDataType = '';\n  /**\n   * The bucket's Public Access Prevention configuration. Currently, 'inherited'\n   * and 'enforced' are supported.\n   *\n   * @var string\n   */\n  public $publicAccessPrevention;\n  protected $uniformBucketLevelAccessType = BucketIamConfigurationUniformBucketLevelAccess::class;\n  protected $uniformBucketLevelAccessDataType = '';\n\n  /**\n   * The bucket's uniform bucket-level access configuration. The feature was\n   * formerly known as Bucket Policy Only. For backward compatibility, this\n   * field will be populated with identical information as the\n   * uniformBucketLevelAccess field. We recommend using the\n   * uniformBucketLevelAccess field to enable and disable the feature.\n   *\n   * @param BucketIamConfigurationBucketPolicyOnly $bucketPolicyOnly\n   */\n  public function setBucketPolicyOnly(BucketIamConfigurationBucketPolicyOnly $bucketPolicyOnly)\n  {\n    $this->bucketPolicyOnly = $bucketPolicyOnly;\n  }\n  /**\n   * @return BucketIamConfigurationBucketPolicyOnly\n   */\n  public function getBucketPolicyOnly()\n  {\n    return $this->bucketPolicyOnly;\n  }\n  /**\n   * The bucket's Public Access Prevention configuration. Currently, 'inherited'\n   * and 'enforced' are supported.\n   *\n   * @param string $publicAccessPrevention\n   */\n  public function setPublicAccessPrevention($publicAccessPrevention)\n  {\n    $this->publicAccessPrevention = $publicAccessPrevention;\n  }\n  /**\n   * @return string\n   */\n  public function getPublicAccessPrevention()\n  {\n    return $this->publicAccessPrevention;\n  }\n  /**\n   * The bucket's uniform bucket-level access configuration.\n   *\n   * @param BucketIamConfigurationUniformBucketLevelAccess $uniformBucketLevelAccess\n   */\n  public function setUniformBucketLevelAccess(BucketIamConfigurationUniformBucketLevelAccess $uniformBucketLevelAccess)\n  {\n    $this->uniformBucketLevelAccess = $uniformBucketLevelAccess;\n  }\n  /**\n   * @return BucketIamConfigurationUniformBucketLevelAccess\n   */\n  public function getUniformBucketLevelAccess()\n  {\n    return $this->uniformBucketLevelAccess;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketIamConfiguration::class, 'Google_Service_Storage_BucketIamConfiguration');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketIamConfigurationBucketPolicyOnly.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketIamConfigurationBucketPolicyOnly extends \\Google\\Model\n{\n  /**\n   * If set, access is controlled only by bucket-level or above IAM policies.\n   *\n   * @var bool\n   */\n  public $enabled;\n  /**\n   * The deadline for changing iamConfiguration.bucketPolicyOnly.enabled from\n   * true to false in RFC 3339 format. iamConfiguration.bucketPolicyOnly.enabled\n   * may be changed from true to false until the locked time, after which the\n   * field is immutable.\n   *\n   * @var string\n   */\n  public $lockedTime;\n\n  /**\n   * If set, access is controlled only by bucket-level or above IAM policies.\n   *\n   * @param bool $enabled\n   */\n  public function setEnabled($enabled)\n  {\n    $this->enabled = $enabled;\n  }\n  /**\n   * @return bool\n   */\n  public function getEnabled()\n  {\n    return $this->enabled;\n  }\n  /**\n   * The deadline for changing iamConfiguration.bucketPolicyOnly.enabled from\n   * true to false in RFC 3339 format. iamConfiguration.bucketPolicyOnly.enabled\n   * may be changed from true to false until the locked time, after which the\n   * field is immutable.\n   *\n   * @param string $lockedTime\n   */\n  public function setLockedTime($lockedTime)\n  {\n    $this->lockedTime = $lockedTime;\n  }\n  /**\n   * @return string\n   */\n  public function getLockedTime()\n  {\n    return $this->lockedTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketIamConfigurationBucketPolicyOnly::class, 'Google_Service_Storage_BucketIamConfigurationBucketPolicyOnly');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketIamConfigurationUniformBucketLevelAccess.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketIamConfigurationUniformBucketLevelAccess extends \\Google\\Model\n{\n  /**\n   * If set, access is controlled only by bucket-level or above IAM policies.\n   *\n   * @var bool\n   */\n  public $enabled;\n  /**\n   * The deadline for changing iamConfiguration.uniformBucketLevelAccess.enabled\n   * from true to false in RFC 3339  format.\n   * iamConfiguration.uniformBucketLevelAccess.enabled may be changed from true\n   * to false until the locked time, after which the field is immutable.\n   *\n   * @var string\n   */\n  public $lockedTime;\n\n  /**\n   * If set, access is controlled only by bucket-level or above IAM policies.\n   *\n   * @param bool $enabled\n   */\n  public function setEnabled($enabled)\n  {\n    $this->enabled = $enabled;\n  }\n  /**\n   * @return bool\n   */\n  public function getEnabled()\n  {\n    return $this->enabled;\n  }\n  /**\n   * The deadline for changing iamConfiguration.uniformBucketLevelAccess.enabled\n   * from true to false in RFC 3339  format.\n   * iamConfiguration.uniformBucketLevelAccess.enabled may be changed from true\n   * to false until the locked time, after which the field is immutable.\n   *\n   * @param string $lockedTime\n   */\n  public function setLockedTime($lockedTime)\n  {\n    $this->lockedTime = $lockedTime;\n  }\n  /**\n   * @return string\n   */\n  public function getLockedTime()\n  {\n    return $this->lockedTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketIamConfigurationUniformBucketLevelAccess::class, 'Google_Service_Storage_BucketIamConfigurationUniformBucketLevelAccess');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketIpFilter.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketIpFilter extends \\Google\\Collection\n{\n  protected $collection_key = 'vpcNetworkSources';\n  /**\n   * Whether to allow all service agents to access the bucket regardless of the\n   * IP filter configuration.\n   *\n   * @var bool\n   */\n  public $allowAllServiceAgentAccess;\n  /**\n   * Whether to allow cross-org VPCs in the bucket's IP filter configuration.\n   *\n   * @var bool\n   */\n  public $allowCrossOrgVpcs;\n  /**\n   * The mode of the IP filter. Valid values are 'Enabled' and 'Disabled'.\n   *\n   * @var string\n   */\n  public $mode;\n  protected $publicNetworkSourceType = BucketIpFilterPublicNetworkSource::class;\n  protected $publicNetworkSourceDataType = '';\n  protected $vpcNetworkSourcesType = BucketIpFilterVpcNetworkSources::class;\n  protected $vpcNetworkSourcesDataType = 'array';\n\n  /**\n   * Whether to allow all service agents to access the bucket regardless of the\n   * IP filter configuration.\n   *\n   * @param bool $allowAllServiceAgentAccess\n   */\n  public function setAllowAllServiceAgentAccess($allowAllServiceAgentAccess)\n  {\n    $this->allowAllServiceAgentAccess = $allowAllServiceAgentAccess;\n  }\n  /**\n   * @return bool\n   */\n  public function getAllowAllServiceAgentAccess()\n  {\n    return $this->allowAllServiceAgentAccess;\n  }\n  /**\n   * Whether to allow cross-org VPCs in the bucket's IP filter configuration.\n   *\n   * @param bool $allowCrossOrgVpcs\n   */\n  public function setAllowCrossOrgVpcs($allowCrossOrgVpcs)\n  {\n    $this->allowCrossOrgVpcs = $allowCrossOrgVpcs;\n  }\n  /**\n   * @return bool\n   */\n  public function getAllowCrossOrgVpcs()\n  {\n    return $this->allowCrossOrgVpcs;\n  }\n  /**\n   * The mode of the IP filter. Valid values are 'Enabled' and 'Disabled'.\n   *\n   * @param string $mode\n   */\n  public function setMode($mode)\n  {\n    $this->mode = $mode;\n  }\n  /**\n   * @return string\n   */\n  public function getMode()\n  {\n    return $this->mode;\n  }\n  /**\n   * The public network source of the bucket's IP filter.\n   *\n   * @param BucketIpFilterPublicNetworkSource $publicNetworkSource\n   */\n  public function setPublicNetworkSource(BucketIpFilterPublicNetworkSource $publicNetworkSource)\n  {\n    $this->publicNetworkSource = $publicNetworkSource;\n  }\n  /**\n   * @return BucketIpFilterPublicNetworkSource\n   */\n  public function getPublicNetworkSource()\n  {\n    return $this->publicNetworkSource;\n  }\n  /**\n   * The list of [VPC network](https://cloud.google.com/vpc/docs/vpc) sources of\n   * the bucket's IP filter.\n   *\n   * @param BucketIpFilterVpcNetworkSources[] $vpcNetworkSources\n   */\n  public function setVpcNetworkSources($vpcNetworkSources)\n  {\n    $this->vpcNetworkSources = $vpcNetworkSources;\n  }\n  /**\n   * @return BucketIpFilterVpcNetworkSources[]\n   */\n  public function getVpcNetworkSources()\n  {\n    return $this->vpcNetworkSources;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketIpFilter::class, 'Google_Service_Storage_BucketIpFilter');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketIpFilterPublicNetworkSource.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketIpFilterPublicNetworkSource extends \\Google\\Collection\n{\n  protected $collection_key = 'allowedIpCidrRanges';\n  /**\n   * The list of public IPv4, IPv6 cidr ranges that are allowed to access the\n   * bucket.\n   *\n   * @var string[]\n   */\n  public $allowedIpCidrRanges;\n\n  /**\n   * The list of public IPv4, IPv6 cidr ranges that are allowed to access the\n   * bucket.\n   *\n   * @param string[] $allowedIpCidrRanges\n   */\n  public function setAllowedIpCidrRanges($allowedIpCidrRanges)\n  {\n    $this->allowedIpCidrRanges = $allowedIpCidrRanges;\n  }\n  /**\n   * @return string[]\n   */\n  public function getAllowedIpCidrRanges()\n  {\n    return $this->allowedIpCidrRanges;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketIpFilterPublicNetworkSource::class, 'Google_Service_Storage_BucketIpFilterPublicNetworkSource');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketIpFilterVpcNetworkSources.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketIpFilterVpcNetworkSources extends \\Google\\Collection\n{\n  protected $collection_key = 'allowedIpCidrRanges';\n  /**\n   * The list of IPv4, IPv6 cidr ranges subnetworks that are allowed to access\n   * the bucket.\n   *\n   * @var string[]\n   */\n  public $allowedIpCidrRanges;\n  /**\n   * Name of the network. Format:\n   * projects/{PROJECT_ID}/global/networks/{NETWORK_NAME}\n   *\n   * @var string\n   */\n  public $network;\n\n  /**\n   * The list of IPv4, IPv6 cidr ranges subnetworks that are allowed to access\n   * the bucket.\n   *\n   * @param string[] $allowedIpCidrRanges\n   */\n  public function setAllowedIpCidrRanges($allowedIpCidrRanges)\n  {\n    $this->allowedIpCidrRanges = $allowedIpCidrRanges;\n  }\n  /**\n   * @return string[]\n   */\n  public function getAllowedIpCidrRanges()\n  {\n    return $this->allowedIpCidrRanges;\n  }\n  /**\n   * Name of the network. Format:\n   * projects/{PROJECT_ID}/global/networks/{NETWORK_NAME}\n   *\n   * @param string $network\n   */\n  public function setNetwork($network)\n  {\n    $this->network = $network;\n  }\n  /**\n   * @return string\n   */\n  public function getNetwork()\n  {\n    return $this->network;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketIpFilterVpcNetworkSources::class, 'Google_Service_Storage_BucketIpFilterVpcNetworkSources');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketLifecycle.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketLifecycle extends \\Google\\Collection\n{\n  protected $collection_key = 'rule';\n  protected $ruleType = BucketLifecycleRule::class;\n  protected $ruleDataType = 'array';\n\n  /**\n   * A lifecycle management rule, which is made of an action to take and the\n   * condition(s) under which the action will be taken.\n   *\n   * @param BucketLifecycleRule[] $rule\n   */\n  public function setRule($rule)\n  {\n    $this->rule = $rule;\n  }\n  /**\n   * @return BucketLifecycleRule[]\n   */\n  public function getRule()\n  {\n    return $this->rule;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketLifecycle::class, 'Google_Service_Storage_BucketLifecycle');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketLifecycleRule.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketLifecycleRule extends \\Google\\Model\n{\n  protected $actionType = BucketLifecycleRuleAction::class;\n  protected $actionDataType = '';\n  protected $conditionType = BucketLifecycleRuleCondition::class;\n  protected $conditionDataType = '';\n\n  /**\n   * The action to take.\n   *\n   * @param BucketLifecycleRuleAction $action\n   */\n  public function setAction(BucketLifecycleRuleAction $action)\n  {\n    $this->action = $action;\n  }\n  /**\n   * @return BucketLifecycleRuleAction\n   */\n  public function getAction()\n  {\n    return $this->action;\n  }\n  /**\n   * The condition(s) under which the action will be taken.\n   *\n   * @param BucketLifecycleRuleCondition $condition\n   */\n  public function setCondition(BucketLifecycleRuleCondition $condition)\n  {\n    $this->condition = $condition;\n  }\n  /**\n   * @return BucketLifecycleRuleCondition\n   */\n  public function getCondition()\n  {\n    return $this->condition;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketLifecycleRule::class, 'Google_Service_Storage_BucketLifecycleRule');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketLifecycleRuleAction.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketLifecycleRuleAction extends \\Google\\Model\n{\n  /**\n   * Target storage class. Required iff the type of the action is\n   * SetStorageClass.\n   *\n   * @var string\n   */\n  public $storageClass;\n  /**\n   * Type of the action. Currently, only Delete, SetStorageClass, and\n   * AbortIncompleteMultipartUpload are supported.\n   *\n   * @var string\n   */\n  public $type;\n\n  /**\n   * Target storage class. Required iff the type of the action is\n   * SetStorageClass.\n   *\n   * @param string $storageClass\n   */\n  public function setStorageClass($storageClass)\n  {\n    $this->storageClass = $storageClass;\n  }\n  /**\n   * @return string\n   */\n  public function getStorageClass()\n  {\n    return $this->storageClass;\n  }\n  /**\n   * Type of the action. Currently, only Delete, SetStorageClass, and\n   * AbortIncompleteMultipartUpload are supported.\n   *\n   * @param string $type\n   */\n  public function setType($type)\n  {\n    $this->type = $type;\n  }\n  /**\n   * @return string\n   */\n  public function getType()\n  {\n    return $this->type;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketLifecycleRuleAction::class, 'Google_Service_Storage_BucketLifecycleRuleAction');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketLifecycleRuleCondition.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketLifecycleRuleCondition extends \\Google\\Collection\n{\n  protected $collection_key = 'matchesSuffix';\n  /**\n   * Age of an object (in days). This condition is satisfied when an object\n   * reaches the specified age.\n   *\n   * @var int\n   */\n  public $age;\n  /**\n   * A date in RFC 3339 format with only the date part (for instance,\n   * \"2013-01-15\"). This condition is satisfied when an object is created before\n   * midnight of the specified date in UTC.\n   *\n   * @var string\n   */\n  public $createdBefore;\n  /**\n   * A date in RFC 3339 format with only the date part (for instance,\n   * \"2013-01-15\"). This condition is satisfied when the custom time on an\n   * object is before this date in UTC.\n   *\n   * @var string\n   */\n  public $customTimeBefore;\n  /**\n   * Number of days elapsed since the user-specified timestamp set on an object.\n   * The condition is satisfied if the days elapsed is at least this number. If\n   * no custom timestamp is specified on an object, the condition does not\n   * apply.\n   *\n   * @var int\n   */\n  public $daysSinceCustomTime;\n  /**\n   * Number of days elapsed since the noncurrent timestamp of an object. The\n   * condition is satisfied if the days elapsed is at least this number. This\n   * condition is relevant only for versioned objects. The value of the field\n   * must be a nonnegative integer. If it's zero, the object version will become\n   * eligible for Lifecycle action as soon as it becomes noncurrent.\n   *\n   * @var int\n   */\n  public $daysSinceNoncurrentTime;\n  /**\n   * Relevant only for versioned objects. If the value is true, this condition\n   * matches live objects; if the value is false, it matches archived objects.\n   *\n   * @var bool\n   */\n  public $isLive;\n  /**\n   * A regular expression that satisfies the RE2 syntax. This condition is\n   * satisfied when the name of the object matches the RE2 pattern. Note: This\n   * feature is currently in the \"Early Access\" launch stage and is only\n   * available to a whitelisted set of users; that means that this feature may\n   * be changed in backward-incompatible ways and that it is not guaranteed to\n   * be released.\n   *\n   * @var string\n   */\n  public $matchesPattern;\n  /**\n   * List of object name prefixes. This condition will be satisfied when at\n   * least one of the prefixes exactly matches the beginning of the object name.\n   *\n   * @var string[]\n   */\n  public $matchesPrefix;\n  /**\n   * Objects having any of the storage classes specified by this condition will\n   * be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE,\n   * ARCHIVE, STANDARD, and DURABLE_REDUCED_AVAILABILITY.\n   *\n   * @var string[]\n   */\n  public $matchesStorageClass;\n  /**\n   * List of object name suffixes. This condition will be satisfied when at\n   * least one of the suffixes exactly matches the end of the object name.\n   *\n   * @var string[]\n   */\n  public $matchesSuffix;\n  /**\n   * A date in RFC 3339 format with only the date part (for instance,\n   * \"2013-01-15\"). This condition is satisfied when the noncurrent time on an\n   * object is before this date in UTC. This condition is relevant only for\n   * versioned objects.\n   *\n   * @var string\n   */\n  public $noncurrentTimeBefore;\n  /**\n   * Relevant only for versioned objects. If the value is N, this condition is\n   * satisfied when there are at least N versions (including the live version)\n   * newer than this version of the object.\n   *\n   * @var int\n   */\n  public $numNewerVersions;\n\n  /**\n   * Age of an object (in days). This condition is satisfied when an object\n   * reaches the specified age.\n   *\n   * @param int $age\n   */\n  public function setAge($age)\n  {\n    $this->age = $age;\n  }\n  /**\n   * @return int\n   */\n  public function getAge()\n  {\n    return $this->age;\n  }\n  /**\n   * A date in RFC 3339 format with only the date part (for instance,\n   * \"2013-01-15\"). This condition is satisfied when an object is created before\n   * midnight of the specified date in UTC.\n   *\n   * @param string $createdBefore\n   */\n  public function setCreatedBefore($createdBefore)\n  {\n    $this->createdBefore = $createdBefore;\n  }\n  /**\n   * @return string\n   */\n  public function getCreatedBefore()\n  {\n    return $this->createdBefore;\n  }\n  /**\n   * A date in RFC 3339 format with only the date part (for instance,\n   * \"2013-01-15\"). This condition is satisfied when the custom time on an\n   * object is before this date in UTC.\n   *\n   * @param string $customTimeBefore\n   */\n  public function setCustomTimeBefore($customTimeBefore)\n  {\n    $this->customTimeBefore = $customTimeBefore;\n  }\n  /**\n   * @return string\n   */\n  public function getCustomTimeBefore()\n  {\n    return $this->customTimeBefore;\n  }\n  /**\n   * Number of days elapsed since the user-specified timestamp set on an object.\n   * The condition is satisfied if the days elapsed is at least this number. If\n   * no custom timestamp is specified on an object, the condition does not\n   * apply.\n   *\n   * @param int $daysSinceCustomTime\n   */\n  public function setDaysSinceCustomTime($daysSinceCustomTime)\n  {\n    $this->daysSinceCustomTime = $daysSinceCustomTime;\n  }\n  /**\n   * @return int\n   */\n  public function getDaysSinceCustomTime()\n  {\n    return $this->daysSinceCustomTime;\n  }\n  /**\n   * Number of days elapsed since the noncurrent timestamp of an object. The\n   * condition is satisfied if the days elapsed is at least this number. This\n   * condition is relevant only for versioned objects. The value of the field\n   * must be a nonnegative integer. If it's zero, the object version will become\n   * eligible for Lifecycle action as soon as it becomes noncurrent.\n   *\n   * @param int $daysSinceNoncurrentTime\n   */\n  public function setDaysSinceNoncurrentTime($daysSinceNoncurrentTime)\n  {\n    $this->daysSinceNoncurrentTime = $daysSinceNoncurrentTime;\n  }\n  /**\n   * @return int\n   */\n  public function getDaysSinceNoncurrentTime()\n  {\n    return $this->daysSinceNoncurrentTime;\n  }\n  /**\n   * Relevant only for versioned objects. If the value is true, this condition\n   * matches live objects; if the value is false, it matches archived objects.\n   *\n   * @param bool $isLive\n   */\n  public function setIsLive($isLive)\n  {\n    $this->isLive = $isLive;\n  }\n  /**\n   * @return bool\n   */\n  public function getIsLive()\n  {\n    return $this->isLive;\n  }\n  /**\n   * A regular expression that satisfies the RE2 syntax. This condition is\n   * satisfied when the name of the object matches the RE2 pattern. Note: This\n   * feature is currently in the \"Early Access\" launch stage and is only\n   * available to a whitelisted set of users; that means that this feature may\n   * be changed in backward-incompatible ways and that it is not guaranteed to\n   * be released.\n   *\n   * @param string $matchesPattern\n   */\n  public function setMatchesPattern($matchesPattern)\n  {\n    $this->matchesPattern = $matchesPattern;\n  }\n  /**\n   * @return string\n   */\n  public function getMatchesPattern()\n  {\n    return $this->matchesPattern;\n  }\n  /**\n   * List of object name prefixes. This condition will be satisfied when at\n   * least one of the prefixes exactly matches the beginning of the object name.\n   *\n   * @param string[] $matchesPrefix\n   */\n  public function setMatchesPrefix($matchesPrefix)\n  {\n    $this->matchesPrefix = $matchesPrefix;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMatchesPrefix()\n  {\n    return $this->matchesPrefix;\n  }\n  /**\n   * Objects having any of the storage classes specified by this condition will\n   * be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE,\n   * ARCHIVE, STANDARD, and DURABLE_REDUCED_AVAILABILITY.\n   *\n   * @param string[] $matchesStorageClass\n   */\n  public function setMatchesStorageClass($matchesStorageClass)\n  {\n    $this->matchesStorageClass = $matchesStorageClass;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMatchesStorageClass()\n  {\n    return $this->matchesStorageClass;\n  }\n  /**\n   * List of object name suffixes. This condition will be satisfied when at\n   * least one of the suffixes exactly matches the end of the object name.\n   *\n   * @param string[] $matchesSuffix\n   */\n  public function setMatchesSuffix($matchesSuffix)\n  {\n    $this->matchesSuffix = $matchesSuffix;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMatchesSuffix()\n  {\n    return $this->matchesSuffix;\n  }\n  /**\n   * A date in RFC 3339 format with only the date part (for instance,\n   * \"2013-01-15\"). This condition is satisfied when the noncurrent time on an\n   * object is before this date in UTC. This condition is relevant only for\n   * versioned objects.\n   *\n   * @param string $noncurrentTimeBefore\n   */\n  public function setNoncurrentTimeBefore($noncurrentTimeBefore)\n  {\n    $this->noncurrentTimeBefore = $noncurrentTimeBefore;\n  }\n  /**\n   * @return string\n   */\n  public function getNoncurrentTimeBefore()\n  {\n    return $this->noncurrentTimeBefore;\n  }\n  /**\n   * Relevant only for versioned objects. If the value is N, this condition is\n   * satisfied when there are at least N versions (including the live version)\n   * newer than this version of the object.\n   *\n   * @param int $numNewerVersions\n   */\n  public function setNumNewerVersions($numNewerVersions)\n  {\n    $this->numNewerVersions = $numNewerVersions;\n  }\n  /**\n   * @return int\n   */\n  public function getNumNewerVersions()\n  {\n    return $this->numNewerVersions;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketLifecycleRuleCondition::class, 'Google_Service_Storage_BucketLifecycleRuleCondition');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketLogging.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketLogging extends \\Google\\Model\n{\n  /**\n   * The destination bucket where the current bucket's logs should be placed.\n   *\n   * @var string\n   */\n  public $logBucket;\n  /**\n   * A prefix for log object names.\n   *\n   * @var string\n   */\n  public $logObjectPrefix;\n\n  /**\n   * The destination bucket where the current bucket's logs should be placed.\n   *\n   * @param string $logBucket\n   */\n  public function setLogBucket($logBucket)\n  {\n    $this->logBucket = $logBucket;\n  }\n  /**\n   * @return string\n   */\n  public function getLogBucket()\n  {\n    return $this->logBucket;\n  }\n  /**\n   * A prefix for log object names.\n   *\n   * @param string $logObjectPrefix\n   */\n  public function setLogObjectPrefix($logObjectPrefix)\n  {\n    $this->logObjectPrefix = $logObjectPrefix;\n  }\n  /**\n   * @return string\n   */\n  public function getLogObjectPrefix()\n  {\n    return $this->logObjectPrefix;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketLogging::class, 'Google_Service_Storage_BucketLogging');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketObjectRetention.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketObjectRetention extends \\Google\\Model\n{\n  /**\n   * The bucket's object retention mode. Can be Enabled.\n   *\n   * @var string\n   */\n  public $mode;\n\n  /**\n   * The bucket's object retention mode. Can be Enabled.\n   *\n   * @param string $mode\n   */\n  public function setMode($mode)\n  {\n    $this->mode = $mode;\n  }\n  /**\n   * @return string\n   */\n  public function getMode()\n  {\n    return $this->mode;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketObjectRetention::class, 'Google_Service_Storage_BucketObjectRetention');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketOwner.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketOwner extends \\Google\\Model\n{\n  /**\n   * The entity, in the form project-owner-projectId.\n   *\n   * @var string\n   */\n  public $entity;\n  /**\n   * The ID for the entity.\n   *\n   * @var string\n   */\n  public $entityId;\n\n  /**\n   * The entity, in the form project-owner-projectId.\n   *\n   * @param string $entity\n   */\n  public function setEntity($entity)\n  {\n    $this->entity = $entity;\n  }\n  /**\n   * @return string\n   */\n  public function getEntity()\n  {\n    return $this->entity;\n  }\n  /**\n   * The ID for the entity.\n   *\n   * @param string $entityId\n   */\n  public function setEntityId($entityId)\n  {\n    $this->entityId = $entityId;\n  }\n  /**\n   * @return string\n   */\n  public function getEntityId()\n  {\n    return $this->entityId;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketOwner::class, 'Google_Service_Storage_BucketOwner');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketRetentionPolicy.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketRetentionPolicy extends \\Google\\Model\n{\n  /**\n   * Server-determined value that indicates the time from which policy was\n   * enforced and effective. This value is in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $effectiveTime;\n  /**\n   * Once locked, an object retention policy cannot be modified.\n   *\n   * @var bool\n   */\n  public $isLocked;\n  /**\n   * The duration in seconds that objects need to be retained. Retention\n   * duration must be greater than zero and less than 100 years. Note that\n   * enforcement of retention periods less than a day is not guaranteed. Such\n   * periods should only be used for testing purposes.\n   *\n   * @var string\n   */\n  public $retentionPeriod;\n\n  /**\n   * Server-determined value that indicates the time from which policy was\n   * enforced and effective. This value is in RFC 3339 format.\n   *\n   * @param string $effectiveTime\n   */\n  public function setEffectiveTime($effectiveTime)\n  {\n    $this->effectiveTime = $effectiveTime;\n  }\n  /**\n   * @return string\n   */\n  public function getEffectiveTime()\n  {\n    return $this->effectiveTime;\n  }\n  /**\n   * Once locked, an object retention policy cannot be modified.\n   *\n   * @param bool $isLocked\n   */\n  public function setIsLocked($isLocked)\n  {\n    $this->isLocked = $isLocked;\n  }\n  /**\n   * @return bool\n   */\n  public function getIsLocked()\n  {\n    return $this->isLocked;\n  }\n  /**\n   * The duration in seconds that objects need to be retained. Retention\n   * duration must be greater than zero and less than 100 years. Note that\n   * enforcement of retention periods less than a day is not guaranteed. Such\n   * periods should only be used for testing purposes.\n   *\n   * @param string $retentionPeriod\n   */\n  public function setRetentionPeriod($retentionPeriod)\n  {\n    $this->retentionPeriod = $retentionPeriod;\n  }\n  /**\n   * @return string\n   */\n  public function getRetentionPeriod()\n  {\n    return $this->retentionPeriod;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketRetentionPolicy::class, 'Google_Service_Storage_BucketRetentionPolicy');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketSoftDeletePolicy.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketSoftDeletePolicy extends \\Google\\Model\n{\n  /**\n   * Server-determined value that indicates the time from which the policy, or\n   * one with a greater retention, was effective. This value is in RFC 3339\n   * format.\n   *\n   * @var string\n   */\n  public $effectiveTime;\n  /**\n   * The duration in seconds that soft-deleted objects in the bucket will be\n   * retained and cannot be permanently deleted.\n   *\n   * @var string\n   */\n  public $retentionDurationSeconds;\n\n  /**\n   * Server-determined value that indicates the time from which the policy, or\n   * one with a greater retention, was effective. This value is in RFC 3339\n   * format.\n   *\n   * @param string $effectiveTime\n   */\n  public function setEffectiveTime($effectiveTime)\n  {\n    $this->effectiveTime = $effectiveTime;\n  }\n  /**\n   * @return string\n   */\n  public function getEffectiveTime()\n  {\n    return $this->effectiveTime;\n  }\n  /**\n   * The duration in seconds that soft-deleted objects in the bucket will be\n   * retained and cannot be permanently deleted.\n   *\n   * @param string $retentionDurationSeconds\n   */\n  public function setRetentionDurationSeconds($retentionDurationSeconds)\n  {\n    $this->retentionDurationSeconds = $retentionDurationSeconds;\n  }\n  /**\n   * @return string\n   */\n  public function getRetentionDurationSeconds()\n  {\n    return $this->retentionDurationSeconds;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketSoftDeletePolicy::class, 'Google_Service_Storage_BucketSoftDeletePolicy');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketStorageLayout.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketStorageLayout extends \\Google\\Model\n{\n  /**\n   * The name of the bucket.\n   *\n   * @var string\n   */\n  public $bucket;\n  protected $customPlacementConfigType = BucketStorageLayoutCustomPlacementConfig::class;\n  protected $customPlacementConfigDataType = '';\n  protected $hierarchicalNamespaceType = BucketStorageLayoutHierarchicalNamespace::class;\n  protected $hierarchicalNamespaceDataType = '';\n  /**\n   * The kind of item this is. For storage layout, this is always\n   * storage#storageLayout.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The location of the bucket.\n   *\n   * @var string\n   */\n  public $location;\n  /**\n   * The type of the bucket location.\n   *\n   * @var string\n   */\n  public $locationType;\n\n  /**\n   * The name of the bucket.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * The bucket's custom placement configuration for Custom Dual Regions.\n   *\n   * @param BucketStorageLayoutCustomPlacementConfig $customPlacementConfig\n   */\n  public function setCustomPlacementConfig(BucketStorageLayoutCustomPlacementConfig $customPlacementConfig)\n  {\n    $this->customPlacementConfig = $customPlacementConfig;\n  }\n  /**\n   * @return BucketStorageLayoutCustomPlacementConfig\n   */\n  public function getCustomPlacementConfig()\n  {\n    return $this->customPlacementConfig;\n  }\n  /**\n   * The bucket's hierarchical namespace configuration.\n   *\n   * @param BucketStorageLayoutHierarchicalNamespace $hierarchicalNamespace\n   */\n  public function setHierarchicalNamespace(BucketStorageLayoutHierarchicalNamespace $hierarchicalNamespace)\n  {\n    $this->hierarchicalNamespace = $hierarchicalNamespace;\n  }\n  /**\n   * @return BucketStorageLayoutHierarchicalNamespace\n   */\n  public function getHierarchicalNamespace()\n  {\n    return $this->hierarchicalNamespace;\n  }\n  /**\n   * The kind of item this is. For storage layout, this is always\n   * storage#storageLayout.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The location of the bucket.\n   *\n   * @param string $location\n   */\n  public function setLocation($location)\n  {\n    $this->location = $location;\n  }\n  /**\n   * @return string\n   */\n  public function getLocation()\n  {\n    return $this->location;\n  }\n  /**\n   * The type of the bucket location.\n   *\n   * @param string $locationType\n   */\n  public function setLocationType($locationType)\n  {\n    $this->locationType = $locationType;\n  }\n  /**\n   * @return string\n   */\n  public function getLocationType()\n  {\n    return $this->locationType;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketStorageLayout::class, 'Google_Service_Storage_BucketStorageLayout');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketStorageLayoutCustomPlacementConfig.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketStorageLayoutCustomPlacementConfig extends \\Google\\Collection\n{\n  protected $collection_key = 'dataLocations';\n  /**\n   * The list of regional locations in which data is placed.\n   *\n   * @var string[]\n   */\n  public $dataLocations;\n\n  /**\n   * The list of regional locations in which data is placed.\n   *\n   * @param string[] $dataLocations\n   */\n  public function setDataLocations($dataLocations)\n  {\n    $this->dataLocations = $dataLocations;\n  }\n  /**\n   * @return string[]\n   */\n  public function getDataLocations()\n  {\n    return $this->dataLocations;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketStorageLayoutCustomPlacementConfig::class, 'Google_Service_Storage_BucketStorageLayoutCustomPlacementConfig');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketStorageLayoutHierarchicalNamespace.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketStorageLayoutHierarchicalNamespace extends \\Google\\Model\n{\n  /**\n   * When set to true, hierarchical namespace is enabled for this bucket.\n   *\n   * @var bool\n   */\n  public $enabled;\n\n  /**\n   * When set to true, hierarchical namespace is enabled for this bucket.\n   *\n   * @param bool $enabled\n   */\n  public function setEnabled($enabled)\n  {\n    $this->enabled = $enabled;\n  }\n  /**\n   * @return bool\n   */\n  public function getEnabled()\n  {\n    return $this->enabled;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketStorageLayoutHierarchicalNamespace::class, 'Google_Service_Storage_BucketStorageLayoutHierarchicalNamespace');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketVersioning.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketVersioning extends \\Google\\Model\n{\n  /**\n   * While set to true, versioning is fully enabled for this bucket.\n   *\n   * @var bool\n   */\n  public $enabled;\n\n  /**\n   * While set to true, versioning is fully enabled for this bucket.\n   *\n   * @param bool $enabled\n   */\n  public function setEnabled($enabled)\n  {\n    $this->enabled = $enabled;\n  }\n  /**\n   * @return bool\n   */\n  public function getEnabled()\n  {\n    return $this->enabled;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketVersioning::class, 'Google_Service_Storage_BucketVersioning');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BucketWebsite.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BucketWebsite extends \\Google\\Model\n{\n  /**\n   * If the requested object path is missing, the service will ensure the path\n   * has a trailing '/', append this suffix, and attempt to retrieve the\n   * resulting object. This allows the creation of index.html objects to\n   * represent directory pages.\n   *\n   * @var string\n   */\n  public $mainPageSuffix;\n  /**\n   * If the requested object path is missing, and any mainPageSuffix object is\n   * missing, if applicable, the service will return the named object from this\n   * bucket as the content for a 404 Not Found result.\n   *\n   * @var string\n   */\n  public $notFoundPage;\n\n  /**\n   * If the requested object path is missing, the service will ensure the path\n   * has a trailing '/', append this suffix, and attempt to retrieve the\n   * resulting object. This allows the creation of index.html objects to\n   * represent directory pages.\n   *\n   * @param string $mainPageSuffix\n   */\n  public function setMainPageSuffix($mainPageSuffix)\n  {\n    $this->mainPageSuffix = $mainPageSuffix;\n  }\n  /**\n   * @return string\n   */\n  public function getMainPageSuffix()\n  {\n    return $this->mainPageSuffix;\n  }\n  /**\n   * If the requested object path is missing, and any mainPageSuffix object is\n   * missing, if applicable, the service will return the named object from this\n   * bucket as the content for a 404 Not Found result.\n   *\n   * @param string $notFoundPage\n   */\n  public function setNotFoundPage($notFoundPage)\n  {\n    $this->notFoundPage = $notFoundPage;\n  }\n  /**\n   * @return string\n   */\n  public function getNotFoundPage()\n  {\n    return $this->notFoundPage;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketWebsite::class, 'Google_Service_Storage_BucketWebsite');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Buckets.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Buckets extends \\Google\\Collection\n{\n  protected $collection_key = 'unreachable';\n  protected $itemsType = Bucket::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of buckets, this is always\n   * storage#buckets.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n  /**\n   * The list of bucket resource names that could not be reached during the\n   * listing operation.\n   *\n   * @var string[]\n   */\n  public $unreachable;\n\n  /**\n   * The list of items.\n   *\n   * @param Bucket[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return Bucket[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of buckets, this is always\n   * storage#buckets.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n  /**\n   * The list of bucket resource names that could not be reached during the\n   * listing operation.\n   *\n   * @param string[] $unreachable\n   */\n  public function setUnreachable($unreachable)\n  {\n    $this->unreachable = $unreachable;\n  }\n  /**\n   * @return string[]\n   */\n  public function getUnreachable()\n  {\n    return $this->unreachable;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Buckets::class, 'Google_Service_Storage_Buckets');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/BulkRestoreObjectsRequest.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass BulkRestoreObjectsRequest extends \\Google\\Collection\n{\n  protected $collection_key = 'matchGlobs';\n  /**\n   * If false (default), the restore will not overwrite live objects with the\n   * same name at the destination. This means some deleted objects may be\n   * skipped. If true, live objects will be overwritten resulting in a\n   * noncurrent object (if versioning is enabled). If versioning is not enabled,\n   * overwriting the object will result in a soft-deleted object. In either\n   * case, if a noncurrent object already exists with the same name, a live\n   * version can be written without issue.\n   *\n   * @var bool\n   */\n  public $allowOverwrite;\n  /**\n   * If true, copies the source object's ACL; otherwise, uses the bucket's\n   * default object ACL. The default is false.\n   *\n   * @var bool\n   */\n  public $copySourceAcl;\n  /**\n   * Restores only the objects that were created after this time.\n   *\n   * @var string\n   */\n  public $createdAfterTime;\n  /**\n   * Restores only the objects that were created before this time.\n   *\n   * @var string\n   */\n  public $createdBeforeTime;\n  /**\n   * Restores only the objects matching any of the specified glob(s). If this\n   * parameter is not specified, all objects will be restored within the\n   * specified time range.\n   *\n   * @var string[]\n   */\n  public $matchGlobs;\n  /**\n   * Restores only the objects that were soft-deleted after this time.\n   *\n   * @var string\n   */\n  public $softDeletedAfterTime;\n  /**\n   * Restores only the objects that were soft-deleted before this time.\n   *\n   * @var string\n   */\n  public $softDeletedBeforeTime;\n\n  /**\n   * If false (default), the restore will not overwrite live objects with the\n   * same name at the destination. This means some deleted objects may be\n   * skipped. If true, live objects will be overwritten resulting in a\n   * noncurrent object (if versioning is enabled). If versioning is not enabled,\n   * overwriting the object will result in a soft-deleted object. In either\n   * case, if a noncurrent object already exists with the same name, a live\n   * version can be written without issue.\n   *\n   * @param bool $allowOverwrite\n   */\n  public function setAllowOverwrite($allowOverwrite)\n  {\n    $this->allowOverwrite = $allowOverwrite;\n  }\n  /**\n   * @return bool\n   */\n  public function getAllowOverwrite()\n  {\n    return $this->allowOverwrite;\n  }\n  /**\n   * If true, copies the source object's ACL; otherwise, uses the bucket's\n   * default object ACL. The default is false.\n   *\n   * @param bool $copySourceAcl\n   */\n  public function setCopySourceAcl($copySourceAcl)\n  {\n    $this->copySourceAcl = $copySourceAcl;\n  }\n  /**\n   * @return bool\n   */\n  public function getCopySourceAcl()\n  {\n    return $this->copySourceAcl;\n  }\n  /**\n   * Restores only the objects that were created after this time.\n   *\n   * @param string $createdAfterTime\n   */\n  public function setCreatedAfterTime($createdAfterTime)\n  {\n    $this->createdAfterTime = $createdAfterTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCreatedAfterTime()\n  {\n    return $this->createdAfterTime;\n  }\n  /**\n   * Restores only the objects that were created before this time.\n   *\n   * @param string $createdBeforeTime\n   */\n  public function setCreatedBeforeTime($createdBeforeTime)\n  {\n    $this->createdBeforeTime = $createdBeforeTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCreatedBeforeTime()\n  {\n    return $this->createdBeforeTime;\n  }\n  /**\n   * Restores only the objects matching any of the specified glob(s). If this\n   * parameter is not specified, all objects will be restored within the\n   * specified time range.\n   *\n   * @param string[] $matchGlobs\n   */\n  public function setMatchGlobs($matchGlobs)\n  {\n    $this->matchGlobs = $matchGlobs;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMatchGlobs()\n  {\n    return $this->matchGlobs;\n  }\n  /**\n   * Restores only the objects that were soft-deleted after this time.\n   *\n   * @param string $softDeletedAfterTime\n   */\n  public function setSoftDeletedAfterTime($softDeletedAfterTime)\n  {\n    $this->softDeletedAfterTime = $softDeletedAfterTime;\n  }\n  /**\n   * @return string\n   */\n  public function getSoftDeletedAfterTime()\n  {\n    return $this->softDeletedAfterTime;\n  }\n  /**\n   * Restores only the objects that were soft-deleted before this time.\n   *\n   * @param string $softDeletedBeforeTime\n   */\n  public function setSoftDeletedBeforeTime($softDeletedBeforeTime)\n  {\n    $this->softDeletedBeforeTime = $softDeletedBeforeTime;\n  }\n  /**\n   * @return string\n   */\n  public function getSoftDeletedBeforeTime()\n  {\n    return $this->softDeletedBeforeTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BulkRestoreObjectsRequest::class, 'Google_Service_Storage_BulkRestoreObjectsRequest');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Channel.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Channel extends \\Google\\Model\n{\n  /**\n   * The address where notifications are delivered for this channel.\n   *\n   * @var string\n   */\n  public $address;\n  /**\n   * Date and time of notification channel expiration, expressed as a Unix\n   * timestamp, in milliseconds. Optional.\n   *\n   * @var string\n   */\n  public $expiration;\n  /**\n   * A UUID or similar unique string that identifies this channel.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * Identifies this as a notification channel used to watch for changes to a\n   * resource, which is \"api#channel\".\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * Additional parameters controlling delivery channel behavior. Optional.\n   *\n   * @var string[]\n   */\n  public $params;\n  /**\n   * A Boolean value to indicate whether payload is wanted. Optional.\n   *\n   * @var bool\n   */\n  public $payload;\n  /**\n   * An opaque ID that identifies the resource being watched on this channel.\n   * Stable across different API versions.\n   *\n   * @var string\n   */\n  public $resourceId;\n  /**\n   * A version-specific identifier for the watched resource.\n   *\n   * @var string\n   */\n  public $resourceUri;\n  /**\n   * An arbitrary string delivered to the target address with each notification\n   * delivered over this channel. Optional.\n   *\n   * @var string\n   */\n  public $token;\n  /**\n   * The type of delivery mechanism used for this channel.\n   *\n   * @var string\n   */\n  public $type;\n\n  /**\n   * The address where notifications are delivered for this channel.\n   *\n   * @param string $address\n   */\n  public function setAddress($address)\n  {\n    $this->address = $address;\n  }\n  /**\n   * @return string\n   */\n  public function getAddress()\n  {\n    return $this->address;\n  }\n  /**\n   * Date and time of notification channel expiration, expressed as a Unix\n   * timestamp, in milliseconds. Optional.\n   *\n   * @param string $expiration\n   */\n  public function setExpiration($expiration)\n  {\n    $this->expiration = $expiration;\n  }\n  /**\n   * @return string\n   */\n  public function getExpiration()\n  {\n    return $this->expiration;\n  }\n  /**\n   * A UUID or similar unique string that identifies this channel.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * Identifies this as a notification channel used to watch for changes to a\n   * resource, which is \"api#channel\".\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * Additional parameters controlling delivery channel behavior. Optional.\n   *\n   * @param string[] $params\n   */\n  public function setParams($params)\n  {\n    $this->params = $params;\n  }\n  /**\n   * @return string[]\n   */\n  public function getParams()\n  {\n    return $this->params;\n  }\n  /**\n   * A Boolean value to indicate whether payload is wanted. Optional.\n   *\n   * @param bool $payload\n   */\n  public function setPayload($payload)\n  {\n    $this->payload = $payload;\n  }\n  /**\n   * @return bool\n   */\n  public function getPayload()\n  {\n    return $this->payload;\n  }\n  /**\n   * An opaque ID that identifies the resource being watched on this channel.\n   * Stable across different API versions.\n   *\n   * @param string $resourceId\n   */\n  public function setResourceId($resourceId)\n  {\n    $this->resourceId = $resourceId;\n  }\n  /**\n   * @return string\n   */\n  public function getResourceId()\n  {\n    return $this->resourceId;\n  }\n  /**\n   * A version-specific identifier for the watched resource.\n   *\n   * @param string $resourceUri\n   */\n  public function setResourceUri($resourceUri)\n  {\n    $this->resourceUri = $resourceUri;\n  }\n  /**\n   * @return string\n   */\n  public function getResourceUri()\n  {\n    return $this->resourceUri;\n  }\n  /**\n   * An arbitrary string delivered to the target address with each notification\n   * delivered over this channel. Optional.\n   *\n   * @param string $token\n   */\n  public function setToken($token)\n  {\n    $this->token = $token;\n  }\n  /**\n   * @return string\n   */\n  public function getToken()\n  {\n    return $this->token;\n  }\n  /**\n   * The type of delivery mechanism used for this channel.\n   *\n   * @param string $type\n   */\n  public function setType($type)\n  {\n    $this->type = $type;\n  }\n  /**\n   * @return string\n   */\n  public function getType()\n  {\n    return $this->type;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Channel::class, 'Google_Service_Storage_Channel');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ComposeRequest.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ComposeRequest extends \\Google\\Collection\n{\n  protected $collection_key = 'sourceObjects';\n  /**\n   * If true, the source objects will be deleted.\n   *\n   * @var bool\n   */\n  public $deleteSourceObjects;\n  protected $destinationType = StorageObject::class;\n  protected $destinationDataType = '';\n  /**\n   * The kind of item this is.\n   *\n   * @var string\n   */\n  public $kind;\n  protected $sourceObjectsType = ComposeRequestSourceObjects::class;\n  protected $sourceObjectsDataType = 'array';\n\n  /**\n   * If true, the source objects will be deleted.\n   *\n   * @param bool $deleteSourceObjects\n   */\n  public function setDeleteSourceObjects($deleteSourceObjects)\n  {\n    $this->deleteSourceObjects = $deleteSourceObjects;\n  }\n  /**\n   * @return bool\n   */\n  public function getDeleteSourceObjects()\n  {\n    return $this->deleteSourceObjects;\n  }\n  /**\n   * Properties of the resulting object.\n   *\n   * @param StorageObject $destination\n   */\n  public function setDestination(StorageObject $destination)\n  {\n    $this->destination = $destination;\n  }\n  /**\n   * @return StorageObject\n   */\n  public function getDestination()\n  {\n    return $this->destination;\n  }\n  /**\n   * The kind of item this is.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The list of source objects that will be concatenated into a single object.\n   *\n   * @param ComposeRequestSourceObjects[] $sourceObjects\n   */\n  public function setSourceObjects($sourceObjects)\n  {\n    $this->sourceObjects = $sourceObjects;\n  }\n  /**\n   * @return ComposeRequestSourceObjects[]\n   */\n  public function getSourceObjects()\n  {\n    return $this->sourceObjects;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ComposeRequest::class, 'Google_Service_Storage_ComposeRequest');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ComposeRequestSourceObjects.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ComposeRequestSourceObjects extends \\Google\\Model\n{\n  /**\n   * The generation of this object to use as the source.\n   *\n   * @var string\n   */\n  public $generation;\n  /**\n   * The source object's name. All source objects must reside in the same\n   * bucket.\n   *\n   * @var string\n   */\n  public $name;\n  protected $objectPreconditionsType = ComposeRequestSourceObjectsObjectPreconditions::class;\n  protected $objectPreconditionsDataType = '';\n\n  /**\n   * The generation of this object to use as the source.\n   *\n   * @param string $generation\n   */\n  public function setGeneration($generation)\n  {\n    $this->generation = $generation;\n  }\n  /**\n   * @return string\n   */\n  public function getGeneration()\n  {\n    return $this->generation;\n  }\n  /**\n   * The source object's name. All source objects must reside in the same\n   * bucket.\n   *\n   * @param string $name\n   */\n  public function setName($name)\n  {\n    $this->name = $name;\n  }\n  /**\n   * @return string\n   */\n  public function getName()\n  {\n    return $this->name;\n  }\n  /**\n   * Conditions that must be met for this operation to execute.\n   *\n   * @param ComposeRequestSourceObjectsObjectPreconditions $objectPreconditions\n   */\n  public function setObjectPreconditions(ComposeRequestSourceObjectsObjectPreconditions $objectPreconditions)\n  {\n    $this->objectPreconditions = $objectPreconditions;\n  }\n  /**\n   * @return ComposeRequestSourceObjectsObjectPreconditions\n   */\n  public function getObjectPreconditions()\n  {\n    return $this->objectPreconditions;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ComposeRequestSourceObjects::class, 'Google_Service_Storage_ComposeRequestSourceObjects');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ComposeRequestSourceObjectsObjectPreconditions.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ComposeRequestSourceObjectsObjectPreconditions extends \\Google\\Model\n{\n  /**\n   * Only perform the composition if the generation of the source object that\n   * would be used matches this value. If this value and a generation are both\n   * specified, they must be the same value or the call will fail.\n   *\n   * @var string\n   */\n  public $ifGenerationMatch;\n\n  /**\n   * Only perform the composition if the generation of the source object that\n   * would be used matches this value. If this value and a generation are both\n   * specified, they must be the same value or the call will fail.\n   *\n   * @param string $ifGenerationMatch\n   */\n  public function setIfGenerationMatch($ifGenerationMatch)\n  {\n    $this->ifGenerationMatch = $ifGenerationMatch;\n  }\n  /**\n   * @return string\n   */\n  public function getIfGenerationMatch()\n  {\n    return $this->ifGenerationMatch;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ComposeRequestSourceObjectsObjectPreconditions::class, 'Google_Service_Storage_ComposeRequestSourceObjectsObjectPreconditions');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Expr.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Expr extends \\Google\\Model\n{\n  /**\n   * An optional description of the expression. This is a longer text which\n   * describes the expression, e.g. when hovered over it in a UI.\n   *\n   * @var string\n   */\n  public $description;\n  /**\n   * Textual representation of an expression in Common Expression Language\n   * syntax. The application context of the containing message determines which\n   * well-known feature set of CEL is supported.\n   *\n   * @var string\n   */\n  public $expression;\n  /**\n   * An optional string indicating the location of the expression for error\n   * reporting, e.g. a file name and a position in the file.\n   *\n   * @var string\n   */\n  public $location;\n  /**\n   * An optional title for the expression, i.e. a short string describing its\n   * purpose. This can be used e.g. in UIs which allow to enter the expression.\n   *\n   * @var string\n   */\n  public $title;\n\n  /**\n   * An optional description of the expression. This is a longer text which\n   * describes the expression, e.g. when hovered over it in a UI.\n   *\n   * @param string $description\n   */\n  public function setDescription($description)\n  {\n    $this->description = $description;\n  }\n  /**\n   * @return string\n   */\n  public function getDescription()\n  {\n    return $this->description;\n  }\n  /**\n   * Textual representation of an expression in Common Expression Language\n   * syntax. The application context of the containing message determines which\n   * well-known feature set of CEL is supported.\n   *\n   * @param string $expression\n   */\n  public function setExpression($expression)\n  {\n    $this->expression = $expression;\n  }\n  /**\n   * @return string\n   */\n  public function getExpression()\n  {\n    return $this->expression;\n  }\n  /**\n   * An optional string indicating the location of the expression for error\n   * reporting, e.g. a file name and a position in the file.\n   *\n   * @param string $location\n   */\n  public function setLocation($location)\n  {\n    $this->location = $location;\n  }\n  /**\n   * @return string\n   */\n  public function getLocation()\n  {\n    return $this->location;\n  }\n  /**\n   * An optional title for the expression, i.e. a short string describing its\n   * purpose. This can be used e.g. in UIs which allow to enter the expression.\n   *\n   * @param string $title\n   */\n  public function setTitle($title)\n  {\n    $this->title = $title;\n  }\n  /**\n   * @return string\n   */\n  public function getTitle()\n  {\n    return $this->title;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Expr::class, 'Google_Service_Storage_Expr');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Folder.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Folder extends \\Google\\Model\n{\n  /**\n   * The name of the bucket containing this folder.\n   *\n   * @var string\n   */\n  public $bucket;\n  /**\n   * The creation time of the folder in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $createTime;\n  /**\n   * The ID of the folder, including the bucket name, folder name.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For folders, this is always storage#folder.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The version of the metadata for this folder. Used for preconditions and for\n   * detecting changes in metadata.\n   *\n   * @var string\n   */\n  public $metageneration;\n  /**\n   * The name of the folder. Required if not specified by URL parameter.\n   *\n   * @var string\n   */\n  public $name;\n  protected $pendingRenameInfoType = FolderPendingRenameInfo::class;\n  protected $pendingRenameInfoDataType = '';\n  /**\n   * The link to this folder.\n   *\n   * @var string\n   */\n  public $selfLink;\n  /**\n   * The modification time of the folder metadata in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $updateTime;\n\n  /**\n   * The name of the bucket containing this folder.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * The creation time of the folder in RFC 3339 format.\n   *\n   * @param string $createTime\n   */\n  public function setCreateTime($createTime)\n  {\n    $this->createTime = $createTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCreateTime()\n  {\n    return $this->createTime;\n  }\n  /**\n   * The ID of the folder, including the bucket name, folder name.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For folders, this is always storage#folder.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The version of the metadata for this folder. Used for preconditions and for\n   * detecting changes in metadata.\n   *\n   * @param string $metageneration\n   */\n  public function setMetageneration($metageneration)\n  {\n    $this->metageneration = $metageneration;\n  }\n  /**\n   * @return string\n   */\n  public function getMetageneration()\n  {\n    return $this->metageneration;\n  }\n  /**\n   * The name of the folder. Required if not specified by URL parameter.\n   *\n   * @param string $name\n   */\n  public function setName($name)\n  {\n    $this->name = $name;\n  }\n  /**\n   * @return string\n   */\n  public function getName()\n  {\n    return $this->name;\n  }\n  /**\n   * Only present if the folder is part of an ongoing rename folder operation.\n   * Contains information which can be used to query the operation status.\n   *\n   * @param FolderPendingRenameInfo $pendingRenameInfo\n   */\n  public function setPendingRenameInfo(FolderPendingRenameInfo $pendingRenameInfo)\n  {\n    $this->pendingRenameInfo = $pendingRenameInfo;\n  }\n  /**\n   * @return FolderPendingRenameInfo\n   */\n  public function getPendingRenameInfo()\n  {\n    return $this->pendingRenameInfo;\n  }\n  /**\n   * The link to this folder.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * The modification time of the folder metadata in RFC 3339 format.\n   *\n   * @param string $updateTime\n   */\n  public function setUpdateTime($updateTime)\n  {\n    $this->updateTime = $updateTime;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdateTime()\n  {\n    return $this->updateTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Folder::class, 'Google_Service_Storage_Folder');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/FolderPendingRenameInfo.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass FolderPendingRenameInfo extends \\Google\\Model\n{\n  /**\n   * The ID of the rename folder operation.\n   *\n   * @var string\n   */\n  public $operationId;\n\n  /**\n   * The ID of the rename folder operation.\n   *\n   * @param string $operationId\n   */\n  public function setOperationId($operationId)\n  {\n    $this->operationId = $operationId;\n  }\n  /**\n   * @return string\n   */\n  public function getOperationId()\n  {\n    return $this->operationId;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(FolderPendingRenameInfo::class, 'Google_Service_Storage_FolderPendingRenameInfo');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Folders.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Folders extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = Folder::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of folders, this is always\n   * storage#folders.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n\n  /**\n   * The list of items.\n   *\n   * @param Folder[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return Folder[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of folders, this is always\n   * storage#folders.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Folders::class, 'Google_Service_Storage_Folders');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/GoogleLongrunningListOperationsResponse.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass GoogleLongrunningListOperationsResponse extends \\Google\\Collection\n{\n  protected $collection_key = 'operations';\n  /**\n   * The kind of item this is. For lists of operations, this is always\n   * storage#operations.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n  protected $operationsType = GoogleLongrunningOperation::class;\n  protected $operationsDataType = 'array';\n\n  /**\n   * The kind of item this is. For lists of operations, this is always\n   * storage#operations.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n  /**\n   * A list of operations that matches the specified filter in the request.\n   *\n   * @param GoogleLongrunningOperation[] $operations\n   */\n  public function setOperations($operations)\n  {\n    $this->operations = $operations;\n  }\n  /**\n   * @return GoogleLongrunningOperation[]\n   */\n  public function getOperations()\n  {\n    return $this->operations;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(GoogleLongrunningListOperationsResponse::class, 'Google_Service_Storage_GoogleLongrunningListOperationsResponse');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/GoogleLongrunningOperation.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass GoogleLongrunningOperation extends \\Google\\Model\n{\n  /**\n   * If the value is \"false\", it means the operation is still in progress. If\n   * \"true\", the operation is completed, and either \"error\" or \"response\" is\n   * available.\n   *\n   * @var bool\n   */\n  public $done;\n  protected $errorType = GoogleRpcStatus::class;\n  protected $errorDataType = '';\n  /**\n   * The kind of item this is. For operations, this is always storage#operation.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * Service-specific metadata associated with the operation. It typically\n   * contains progress information and common metadata such as create time. Some\n   * services might not provide such metadata. Any method that returns a long-\n   * running operation should document the metadata type, if any.\n   *\n   * @var array[]\n   */\n  public $metadata;\n  /**\n   * The server-assigned name, which is only unique within the same service that\n   * originally returns it. If you use the default HTTP mapping, the \"name\"\n   * should be a resource name ending with \"operations/{operationId}\".\n   *\n   * @var string\n   */\n  public $name;\n  /**\n   * The normal response of the operation in case of success. If the original\n   * method returns no data on success, such as \"Delete\", the response is\n   * google.protobuf.Empty. If the original method is standard\n   * Get/Create/Update, the response should be the resource. For other methods,\n   * the response should have the type \"XxxResponse\", where \"Xxx\" is the\n   * original method name. For example, if the original method name is\n   * \"TakeSnapshot()\", the inferred response type is \"TakeSnapshotResponse\".\n   *\n   * @var array[]\n   */\n  public $response;\n  /**\n   * The link to this long running operation.\n   *\n   * @var string\n   */\n  public $selfLink;\n\n  /**\n   * If the value is \"false\", it means the operation is still in progress. If\n   * \"true\", the operation is completed, and either \"error\" or \"response\" is\n   * available.\n   *\n   * @param bool $done\n   */\n  public function setDone($done)\n  {\n    $this->done = $done;\n  }\n  /**\n   * @return bool\n   */\n  public function getDone()\n  {\n    return $this->done;\n  }\n  /**\n   * The error result of the operation in case of failure or cancellation.\n   *\n   * @param GoogleRpcStatus $error\n   */\n  public function setError(GoogleRpcStatus $error)\n  {\n    $this->error = $error;\n  }\n  /**\n   * @return GoogleRpcStatus\n   */\n  public function getError()\n  {\n    return $this->error;\n  }\n  /**\n   * The kind of item this is. For operations, this is always storage#operation.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * Service-specific metadata associated with the operation. It typically\n   * contains progress information and common metadata such as create time. Some\n   * services might not provide such metadata. Any method that returns a long-\n   * running operation should document the metadata type, if any.\n   *\n   * @param array[] $metadata\n   */\n  public function setMetadata($metadata)\n  {\n    $this->metadata = $metadata;\n  }\n  /**\n   * @return array[]\n   */\n  public function getMetadata()\n  {\n    return $this->metadata;\n  }\n  /**\n   * The server-assigned name, which is only unique within the same service that\n   * originally returns it. If you use the default HTTP mapping, the \"name\"\n   * should be a resource name ending with \"operations/{operationId}\".\n   *\n   * @param string $name\n   */\n  public function setName($name)\n  {\n    $this->name = $name;\n  }\n  /**\n   * @return string\n   */\n  public function getName()\n  {\n    return $this->name;\n  }\n  /**\n   * The normal response of the operation in case of success. If the original\n   * method returns no data on success, such as \"Delete\", the response is\n   * google.protobuf.Empty. If the original method is standard\n   * Get/Create/Update, the response should be the resource. For other methods,\n   * the response should have the type \"XxxResponse\", where \"Xxx\" is the\n   * original method name. For example, if the original method name is\n   * \"TakeSnapshot()\", the inferred response type is \"TakeSnapshotResponse\".\n   *\n   * @param array[] $response\n   */\n  public function setResponse($response)\n  {\n    $this->response = $response;\n  }\n  /**\n   * @return array[]\n   */\n  public function getResponse()\n  {\n    return $this->response;\n  }\n  /**\n   * The link to this long running operation.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(GoogleLongrunningOperation::class, 'Google_Service_Storage_GoogleLongrunningOperation');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/GoogleRpcStatus.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass GoogleRpcStatus extends \\Google\\Collection\n{\n  protected $collection_key = 'details';\n  /**\n   * The status code, which should be an enum value of google.rpc.Code.\n   *\n   * @var int\n   */\n  public $code;\n  /**\n   * A list of messages that carry the error details. There is a common set of\n   * message types for APIs to use.\n   *\n   * @var array[]\n   */\n  public $details;\n  /**\n   * A developer-facing error message, which should be in English.\n   *\n   * @var string\n   */\n  public $message;\n\n  /**\n   * The status code, which should be an enum value of google.rpc.Code.\n   *\n   * @param int $code\n   */\n  public function setCode($code)\n  {\n    $this->code = $code;\n  }\n  /**\n   * @return int\n   */\n  public function getCode()\n  {\n    return $this->code;\n  }\n  /**\n   * A list of messages that carry the error details. There is a common set of\n   * message types for APIs to use.\n   *\n   * @param array[] $details\n   */\n  public function setDetails($details)\n  {\n    $this->details = $details;\n  }\n  /**\n   * @return array[]\n   */\n  public function getDetails()\n  {\n    return $this->details;\n  }\n  /**\n   * A developer-facing error message, which should be in English.\n   *\n   * @param string $message\n   */\n  public function setMessage($message)\n  {\n    $this->message = $message;\n  }\n  /**\n   * @return string\n   */\n  public function getMessage()\n  {\n    return $this->message;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(GoogleRpcStatus::class, 'Google_Service_Storage_GoogleRpcStatus');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/HmacKey.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass HmacKey extends \\Google\\Model\n{\n  /**\n   * The kind of item this is. For HMAC keys, this is always storage#hmacKey.\n   *\n   * @var string\n   */\n  public $kind;\n  protected $metadataType = HmacKeyMetadata::class;\n  protected $metadataDataType = '';\n  /**\n   * HMAC secret key material.\n   *\n   * @var string\n   */\n  public $secret;\n\n  /**\n   * The kind of item this is. For HMAC keys, this is always storage#hmacKey.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * Key metadata.\n   *\n   * @param HmacKeyMetadata $metadata\n   */\n  public function setMetadata(HmacKeyMetadata $metadata)\n  {\n    $this->metadata = $metadata;\n  }\n  /**\n   * @return HmacKeyMetadata\n   */\n  public function getMetadata()\n  {\n    return $this->metadata;\n  }\n  /**\n   * HMAC secret key material.\n   *\n   * @param string $secret\n   */\n  public function setSecret($secret)\n  {\n    $this->secret = $secret;\n  }\n  /**\n   * @return string\n   */\n  public function getSecret()\n  {\n    return $this->secret;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(HmacKey::class, 'Google_Service_Storage_HmacKey');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/HmacKeyMetadata.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass HmacKeyMetadata extends \\Google\\Model\n{\n  /**\n   * The ID of the HMAC Key.\n   *\n   * @var string\n   */\n  public $accessId;\n  /**\n   * HTTP 1.1 Entity tag for the HMAC key.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * The ID of the HMAC key, including the Project ID and the Access ID.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For HMAC Key metadata, this is always\n   * storage#hmacKeyMetadata.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * Project ID owning the service account to which the key authenticates.\n   *\n   * @var string\n   */\n  public $projectId;\n  /**\n   * The link to this resource.\n   *\n   * @var string\n   */\n  public $selfLink;\n  /**\n   * The email address of the key's associated service account.\n   *\n   * @var string\n   */\n  public $serviceAccountEmail;\n  /**\n   * The state of the key. Can be one of ACTIVE, INACTIVE, or DELETED.\n   *\n   * @var string\n   */\n  public $state;\n  /**\n   * The creation time of the HMAC key in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $timeCreated;\n  /**\n   * The last modification time of the HMAC key metadata in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $updated;\n\n  /**\n   * The ID of the HMAC Key.\n   *\n   * @param string $accessId\n   */\n  public function setAccessId($accessId)\n  {\n    $this->accessId = $accessId;\n  }\n  /**\n   * @return string\n   */\n  public function getAccessId()\n  {\n    return $this->accessId;\n  }\n  /**\n   * HTTP 1.1 Entity tag for the HMAC key.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * The ID of the HMAC key, including the Project ID and the Access ID.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For HMAC Key metadata, this is always\n   * storage#hmacKeyMetadata.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * Project ID owning the service account to which the key authenticates.\n   *\n   * @param string $projectId\n   */\n  public function setProjectId($projectId)\n  {\n    $this->projectId = $projectId;\n  }\n  /**\n   * @return string\n   */\n  public function getProjectId()\n  {\n    return $this->projectId;\n  }\n  /**\n   * The link to this resource.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * The email address of the key's associated service account.\n   *\n   * @param string $serviceAccountEmail\n   */\n  public function setServiceAccountEmail($serviceAccountEmail)\n  {\n    $this->serviceAccountEmail = $serviceAccountEmail;\n  }\n  /**\n   * @return string\n   */\n  public function getServiceAccountEmail()\n  {\n    return $this->serviceAccountEmail;\n  }\n  /**\n   * The state of the key. Can be one of ACTIVE, INACTIVE, or DELETED.\n   *\n   * @param string $state\n   */\n  public function setState($state)\n  {\n    $this->state = $state;\n  }\n  /**\n   * @return string\n   */\n  public function getState()\n  {\n    return $this->state;\n  }\n  /**\n   * The creation time of the HMAC key in RFC 3339 format.\n   *\n   * @param string $timeCreated\n   */\n  public function setTimeCreated($timeCreated)\n  {\n    $this->timeCreated = $timeCreated;\n  }\n  /**\n   * @return string\n   */\n  public function getTimeCreated()\n  {\n    return $this->timeCreated;\n  }\n  /**\n   * The last modification time of the HMAC key metadata in RFC 3339 format.\n   *\n   * @param string $updated\n   */\n  public function setUpdated($updated)\n  {\n    $this->updated = $updated;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdated()\n  {\n    return $this->updated;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(HmacKeyMetadata::class, 'Google_Service_Storage_HmacKeyMetadata');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/HmacKeysMetadata.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass HmacKeysMetadata extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = HmacKeyMetadata::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of hmacKeys, this is always\n   * storage#hmacKeysMetadata.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n\n  /**\n   * The list of items.\n   *\n   * @param HmacKeyMetadata[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return HmacKeyMetadata[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of hmacKeys, this is always\n   * storage#hmacKeysMetadata.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(HmacKeysMetadata::class, 'Google_Service_Storage_HmacKeysMetadata');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ManagedFolder.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ManagedFolder extends \\Google\\Model\n{\n  /**\n   * The name of the bucket containing this managed folder.\n   *\n   * @var string\n   */\n  public $bucket;\n  /**\n   * The creation time of the managed folder in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $createTime;\n  /**\n   * The ID of the managed folder, including the bucket name and managed folder\n   * name.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For managed folders, this is always\n   * storage#managedFolder.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The version of the metadata for this managed folder. Used for preconditions\n   * and for detecting changes in metadata.\n   *\n   * @var string\n   */\n  public $metageneration;\n  /**\n   * The name of the managed folder. Required if not specified by URL parameter.\n   *\n   * @var string\n   */\n  public $name;\n  /**\n   * The link to this managed folder.\n   *\n   * @var string\n   */\n  public $selfLink;\n  /**\n   * The last update time of the managed folder metadata in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $updateTime;\n\n  /**\n   * The name of the bucket containing this managed folder.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * The creation time of the managed folder in RFC 3339 format.\n   *\n   * @param string $createTime\n   */\n  public function setCreateTime($createTime)\n  {\n    $this->createTime = $createTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCreateTime()\n  {\n    return $this->createTime;\n  }\n  /**\n   * The ID of the managed folder, including the bucket name and managed folder\n   * name.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For managed folders, this is always\n   * storage#managedFolder.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The version of the metadata for this managed folder. Used for preconditions\n   * and for detecting changes in metadata.\n   *\n   * @param string $metageneration\n   */\n  public function setMetageneration($metageneration)\n  {\n    $this->metageneration = $metageneration;\n  }\n  /**\n   * @return string\n   */\n  public function getMetageneration()\n  {\n    return $this->metageneration;\n  }\n  /**\n   * The name of the managed folder. Required if not specified by URL parameter.\n   *\n   * @param string $name\n   */\n  public function setName($name)\n  {\n    $this->name = $name;\n  }\n  /**\n   * @return string\n   */\n  public function getName()\n  {\n    return $this->name;\n  }\n  /**\n   * The link to this managed folder.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * The last update time of the managed folder metadata in RFC 3339 format.\n   *\n   * @param string $updateTime\n   */\n  public function setUpdateTime($updateTime)\n  {\n    $this->updateTime = $updateTime;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdateTime()\n  {\n    return $this->updateTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ManagedFolder::class, 'Google_Service_Storage_ManagedFolder');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ManagedFolders.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ManagedFolders extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = ManagedFolder::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of managed folders, this is always\n   * storage#managedFolders.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n\n  /**\n   * The list of items.\n   *\n   * @param ManagedFolder[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return ManagedFolder[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of managed folders, this is always\n   * storage#managedFolders.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ManagedFolders::class, 'Google_Service_Storage_ManagedFolders');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Notification.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Notification extends \\Google\\Collection\n{\n  protected $collection_key = 'event_types';\n  protected $internal_gapi_mappings = [\n        \"customAttributes\" => \"custom_attributes\",\n        \"eventTypes\" => \"event_types\",\n        \"objectNamePrefix\" => \"object_name_prefix\",\n        \"payloadFormat\" => \"payload_format\",\n  ];\n  /**\n   * An optional list of additional attributes to attach to each Cloud PubSub\n   * message published for this notification subscription.\n   *\n   * @var string[]\n   */\n  public $customAttributes;\n  /**\n   * HTTP 1.1 Entity tag for this subscription notification.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * If present, only send notifications about listed event types. If empty,\n   * sent notifications for all event types.\n   *\n   * @var string[]\n   */\n  public $eventTypes;\n  /**\n   * The ID of the notification.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For notifications, this is always\n   * storage#notification.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * If present, only apply this notification configuration to object names that\n   * begin with this prefix.\n   *\n   * @var string\n   */\n  public $objectNamePrefix;\n  /**\n   * The desired content of the Payload.\n   *\n   * @var string\n   */\n  public $payloadFormat;\n  /**\n   * The canonical URL of this notification.\n   *\n   * @var string\n   */\n  public $selfLink;\n  /**\n   * The Cloud PubSub topic to which this subscription publishes. Formatted as:\n   * '//pubsub.googleapis.com/projects/{project-identifier}/topics/{my-topic}'\n   *\n   * @var string\n   */\n  public $topic;\n\n  /**\n   * An optional list of additional attributes to attach to each Cloud PubSub\n   * message published for this notification subscription.\n   *\n   * @param string[] $customAttributes\n   */\n  public function setCustomAttributes($customAttributes)\n  {\n    $this->customAttributes = $customAttributes;\n  }\n  /**\n   * @return string[]\n   */\n  public function getCustomAttributes()\n  {\n    return $this->customAttributes;\n  }\n  /**\n   * HTTP 1.1 Entity tag for this subscription notification.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * If present, only send notifications about listed event types. If empty,\n   * sent notifications for all event types.\n   *\n   * @param string[] $eventTypes\n   */\n  public function setEventTypes($eventTypes)\n  {\n    $this->eventTypes = $eventTypes;\n  }\n  /**\n   * @return string[]\n   */\n  public function getEventTypes()\n  {\n    return $this->eventTypes;\n  }\n  /**\n   * The ID of the notification.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For notifications, this is always\n   * storage#notification.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * If present, only apply this notification configuration to object names that\n   * begin with this prefix.\n   *\n   * @param string $objectNamePrefix\n   */\n  public function setObjectNamePrefix($objectNamePrefix)\n  {\n    $this->objectNamePrefix = $objectNamePrefix;\n  }\n  /**\n   * @return string\n   */\n  public function getObjectNamePrefix()\n  {\n    return $this->objectNamePrefix;\n  }\n  /**\n   * The desired content of the Payload.\n   *\n   * @param string $payloadFormat\n   */\n  public function setPayloadFormat($payloadFormat)\n  {\n    $this->payloadFormat = $payloadFormat;\n  }\n  /**\n   * @return string\n   */\n  public function getPayloadFormat()\n  {\n    return $this->payloadFormat;\n  }\n  /**\n   * The canonical URL of this notification.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * The Cloud PubSub topic to which this subscription publishes. Formatted as:\n   * '//pubsub.googleapis.com/projects/{project-identifier}/topics/{my-topic}'\n   *\n   * @param string $topic\n   */\n  public function setTopic($topic)\n  {\n    $this->topic = $topic;\n  }\n  /**\n   * @return string\n   */\n  public function getTopic()\n  {\n    return $this->topic;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Notification::class, 'Google_Service_Storage_Notification');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Notifications.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Notifications extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = Notification::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of notifications, this is always\n   * storage#notifications.\n   *\n   * @var string\n   */\n  public $kind;\n\n  /**\n   * The list of items.\n   *\n   * @param Notification[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return Notification[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of notifications, this is always\n   * storage#notifications.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Notifications::class, 'Google_Service_Storage_Notifications');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ObjectAccessControl.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ObjectAccessControl extends \\Google\\Model\n{\n  /**\n   * The name of the bucket.\n   *\n   * @var string\n   */\n  public $bucket;\n  /**\n   * The domain associated with the entity, if any.\n   *\n   * @var string\n   */\n  public $domain;\n  /**\n   * The email address associated with the entity, if any.\n   *\n   * @var string\n   */\n  public $email;\n  /**\n   * The entity holding the permission, in one of the following forms: - user-\n   * userId  - user-email  - group-groupId  - group-email  - domain-domain  -\n   * project-team-projectId  - allUsers  - allAuthenticatedUsers Examples:  -\n   * The user liz@example.com would be user-liz@example.com.  - The group\n   * example@googlegroups.com would be group-example@googlegroups.com.  - To\n   * refer to all members of the Google Apps for Business domain example.com,\n   * the entity would be domain-example.com.\n   *\n   * @var string\n   */\n  public $entity;\n  /**\n   * The ID for the entity, if any.\n   *\n   * @var string\n   */\n  public $entityId;\n  /**\n   * HTTP 1.1 Entity tag for the access-control entry.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * The content generation of the object, if applied to an object.\n   *\n   * @var string\n   */\n  public $generation;\n  /**\n   * The ID of the access-control entry.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For object access control entries, this is always\n   * storage#objectAccessControl.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The name of the object, if applied to an object.\n   *\n   * @var string\n   */\n  public $object;\n  protected $projectTeamType = ObjectAccessControlProjectTeam::class;\n  protected $projectTeamDataType = '';\n  /**\n   * The access permission for the entity.\n   *\n   * @var string\n   */\n  public $role;\n  /**\n   * The link to this access-control entry.\n   *\n   * @var string\n   */\n  public $selfLink;\n\n  /**\n   * The name of the bucket.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * The domain associated with the entity, if any.\n   *\n   * @param string $domain\n   */\n  public function setDomain($domain)\n  {\n    $this->domain = $domain;\n  }\n  /**\n   * @return string\n   */\n  public function getDomain()\n  {\n    return $this->domain;\n  }\n  /**\n   * The email address associated with the entity, if any.\n   *\n   * @param string $email\n   */\n  public function setEmail($email)\n  {\n    $this->email = $email;\n  }\n  /**\n   * @return string\n   */\n  public function getEmail()\n  {\n    return $this->email;\n  }\n  /**\n   * The entity holding the permission, in one of the following forms: - user-\n   * userId  - user-email  - group-groupId  - group-email  - domain-domain  -\n   * project-team-projectId  - allUsers  - allAuthenticatedUsers Examples:  -\n   * The user liz@example.com would be user-liz@example.com.  - The group\n   * example@googlegroups.com would be group-example@googlegroups.com.  - To\n   * refer to all members of the Google Apps for Business domain example.com,\n   * the entity would be domain-example.com.\n   *\n   * @param string $entity\n   */\n  public function setEntity($entity)\n  {\n    $this->entity = $entity;\n  }\n  /**\n   * @return string\n   */\n  public function getEntity()\n  {\n    return $this->entity;\n  }\n  /**\n   * The ID for the entity, if any.\n   *\n   * @param string $entityId\n   */\n  public function setEntityId($entityId)\n  {\n    $this->entityId = $entityId;\n  }\n  /**\n   * @return string\n   */\n  public function getEntityId()\n  {\n    return $this->entityId;\n  }\n  /**\n   * HTTP 1.1 Entity tag for the access-control entry.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * The content generation of the object, if applied to an object.\n   *\n   * @param string $generation\n   */\n  public function setGeneration($generation)\n  {\n    $this->generation = $generation;\n  }\n  /**\n   * @return string\n   */\n  public function getGeneration()\n  {\n    return $this->generation;\n  }\n  /**\n   * The ID of the access-control entry.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For object access control entries, this is always\n   * storage#objectAccessControl.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The name of the object, if applied to an object.\n   *\n   * @param string $object\n   */\n  public function setObject($object)\n  {\n    $this->object = $object;\n  }\n  /**\n   * @return string\n   */\n  public function getObject()\n  {\n    return $this->object;\n  }\n  /**\n   * The project team associated with the entity, if any.\n   *\n   * @param ObjectAccessControlProjectTeam $projectTeam\n   */\n  public function setProjectTeam(ObjectAccessControlProjectTeam $projectTeam)\n  {\n    $this->projectTeam = $projectTeam;\n  }\n  /**\n   * @return ObjectAccessControlProjectTeam\n   */\n  public function getProjectTeam()\n  {\n    return $this->projectTeam;\n  }\n  /**\n   * The access permission for the entity.\n   *\n   * @param string $role\n   */\n  public function setRole($role)\n  {\n    $this->role = $role;\n  }\n  /**\n   * @return string\n   */\n  public function getRole()\n  {\n    return $this->role;\n  }\n  /**\n   * The link to this access-control entry.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ObjectAccessControl::class, 'Google_Service_Storage_ObjectAccessControl');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ObjectAccessControlProjectTeam.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ObjectAccessControlProjectTeam extends \\Google\\Model\n{\n  /**\n   * The project number.\n   *\n   * @var string\n   */\n  public $projectNumber;\n  /**\n   * The team.\n   *\n   * @var string\n   */\n  public $team;\n\n  /**\n   * The project number.\n   *\n   * @param string $projectNumber\n   */\n  public function setProjectNumber($projectNumber)\n  {\n    $this->projectNumber = $projectNumber;\n  }\n  /**\n   * @return string\n   */\n  public function getProjectNumber()\n  {\n    return $this->projectNumber;\n  }\n  /**\n   * The team.\n   *\n   * @param string $team\n   */\n  public function setTeam($team)\n  {\n    $this->team = $team;\n  }\n  /**\n   * @return string\n   */\n  public function getTeam()\n  {\n    return $this->team;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ObjectAccessControlProjectTeam::class, 'Google_Service_Storage_ObjectAccessControlProjectTeam');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ObjectAccessControls.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ObjectAccessControls extends \\Google\\Collection\n{\n  protected $collection_key = 'items';\n  protected $itemsType = ObjectAccessControl::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of object access control entries, this\n   * is always storage#objectAccessControls.\n   *\n   * @var string\n   */\n  public $kind;\n\n  /**\n   * The list of items.\n   *\n   * @param ObjectAccessControl[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return ObjectAccessControl[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of object access control entries, this\n   * is always storage#objectAccessControls.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ObjectAccessControls::class, 'Google_Service_Storage_ObjectAccessControls');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ObjectCustomContextPayload.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ObjectCustomContextPayload extends \\Google\\Model\n{\n  /**\n   * The time at which the object context was created in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $createTime;\n  /**\n   * The time at which the object context was last updated in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $updateTime;\n  /**\n   * The value of the object context.\n   *\n   * @var string\n   */\n  public $value;\n\n  /**\n   * The time at which the object context was created in RFC 3339 format.\n   *\n   * @param string $createTime\n   */\n  public function setCreateTime($createTime)\n  {\n    $this->createTime = $createTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCreateTime()\n  {\n    return $this->createTime;\n  }\n  /**\n   * The time at which the object context was last updated in RFC 3339 format.\n   *\n   * @param string $updateTime\n   */\n  public function setUpdateTime($updateTime)\n  {\n    $this->updateTime = $updateTime;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdateTime()\n  {\n    return $this->updateTime;\n  }\n  /**\n   * The value of the object context.\n   *\n   * @param string $value\n   */\n  public function setValue($value)\n  {\n    $this->value = $value;\n  }\n  /**\n   * @return string\n   */\n  public function getValue()\n  {\n    return $this->value;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ObjectCustomContextPayload::class, 'Google_Service_Storage_ObjectCustomContextPayload');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Objects.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Objects extends \\Google\\Collection\n{\n  protected $collection_key = 'prefixes';\n  protected $itemsType = StorageObject::class;\n  protected $itemsDataType = 'array';\n  /**\n   * The kind of item this is. For lists of objects, this is always\n   * storage#objects.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @var string\n   */\n  public $nextPageToken;\n  /**\n   * The list of prefixes of objects matching-but-not-listed up to and including\n   * the requested delimiter.\n   *\n   * @var string[]\n   */\n  public $prefixes;\n\n  /**\n   * The list of items.\n   *\n   * @param StorageObject[] $items\n   */\n  public function setItems($items)\n  {\n    $this->items = $items;\n  }\n  /**\n   * @return StorageObject[]\n   */\n  public function getItems()\n  {\n    return $this->items;\n  }\n  /**\n   * The kind of item this is. For lists of objects, this is always\n   * storage#objects.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The continuation token, used to page through large result sets. Provide\n   * this value in a subsequent request to return the next page of results.\n   *\n   * @param string $nextPageToken\n   */\n  public function setNextPageToken($nextPageToken)\n  {\n    $this->nextPageToken = $nextPageToken;\n  }\n  /**\n   * @return string\n   */\n  public function getNextPageToken()\n  {\n    return $this->nextPageToken;\n  }\n  /**\n   * The list of prefixes of objects matching-but-not-listed up to and including\n   * the requested delimiter.\n   *\n   * @param string[] $prefixes\n   */\n  public function setPrefixes($prefixes)\n  {\n    $this->prefixes = $prefixes;\n  }\n  /**\n   * @return string[]\n   */\n  public function getPrefixes()\n  {\n    return $this->prefixes;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Objects::class, 'Google_Service_Storage_Objects');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Policy.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass Policy extends \\Google\\Collection\n{\n  protected $collection_key = 'bindings';\n  protected $bindingsType = PolicyBindings::class;\n  protected $bindingsDataType = 'array';\n  /**\n   * HTTP 1.1  Entity tag for the policy.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * The kind of item this is. For policies, this is always storage#policy. This\n   * field is ignored on input.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The ID of the resource to which this policy belongs. Will be of the form\n   * projects/_/buckets/bucket for buckets,\n   * projects/_/buckets/bucket/objects/object for objects, and\n   * projects/_/buckets/bucket/managedFolders/managedFolder. A specific\n   * generation may be specified by appending #generationNumber to the end of\n   * the object name, e.g. projects/_/buckets/my-bucket/objects/data.txt#17. The\n   * current generation can be denoted with #0. This field is ignored on input.\n   *\n   * @var string\n   */\n  public $resourceId;\n  /**\n   * The IAM policy format version.\n   *\n   * @var int\n   */\n  public $version;\n\n  /**\n   * An association between a role, which comes with a set of permissions, and\n   * members who may assume that role.\n   *\n   * @param PolicyBindings[] $bindings\n   */\n  public function setBindings($bindings)\n  {\n    $this->bindings = $bindings;\n  }\n  /**\n   * @return PolicyBindings[]\n   */\n  public function getBindings()\n  {\n    return $this->bindings;\n  }\n  /**\n   * HTTP 1.1  Entity tag for the policy.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * The kind of item this is. For policies, this is always storage#policy. This\n   * field is ignored on input.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The ID of the resource to which this policy belongs. Will be of the form\n   * projects/_/buckets/bucket for buckets,\n   * projects/_/buckets/bucket/objects/object for objects, and\n   * projects/_/buckets/bucket/managedFolders/managedFolder. A specific\n   * generation may be specified by appending #generationNumber to the end of\n   * the object name, e.g. projects/_/buckets/my-bucket/objects/data.txt#17. The\n   * current generation can be denoted with #0. This field is ignored on input.\n   *\n   * @param string $resourceId\n   */\n  public function setResourceId($resourceId)\n  {\n    $this->resourceId = $resourceId;\n  }\n  /**\n   * @return string\n   */\n  public function getResourceId()\n  {\n    return $this->resourceId;\n  }\n  /**\n   * The IAM policy format version.\n   *\n   * @param int $version\n   */\n  public function setVersion($version)\n  {\n    $this->version = $version;\n  }\n  /**\n   * @return int\n   */\n  public function getVersion()\n  {\n    return $this->version;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Policy::class, 'Google_Service_Storage_Policy');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/PolicyBindings.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass PolicyBindings extends \\Google\\Collection\n{\n  protected $collection_key = 'members';\n  protected $conditionType = Expr::class;\n  protected $conditionDataType = '';\n  /**\n   * A collection of identifiers for members who may assume the provided role.\n   * Recognized identifiers are as follows: - allUsers - A special identifier\n   * that represents anyone on the internet; with or without a Google account.\n   * - allAuthenticatedUsers - A special identifier that represents anyone who\n   * is authenticated with a Google account or a service account.   -\n   * user:emailid - An email address that represents a specific account. For\n   * example, user:alice@gmail.com or user:joe@example.com.   -\n   * serviceAccount:emailid - An email address that represents a service\n   * account. For example,  serviceAccount:my-other-\n   * app@appspot.gserviceaccount.com .   - group:emailid - An email address that\n   * represents a Google group. For example, group:admins@example.com.   -\n   * domain:domain - A Google Apps domain name that represents all the users of\n   * that domain. For example, domain:google.com or domain:example.com.   -\n   * projectOwner:projectid - Owners of the given project. For example,\n   * projectOwner:my-example-project   - projectEditor:projectid - Editors of\n   * the given project. For example, projectEditor:my-example-project   -\n   * projectViewer:projectid - Viewers of the given project. For example,\n   * projectViewer:my-example-project\n   *\n   * @var string[]\n   */\n  public $members;\n  /**\n   * The role to which members belong. Two types of roles are supported: new IAM\n   * roles, which grant permissions that do not map directly to those provided\n   * by ACLs, and legacy IAM roles, which do map directly to ACL permissions.\n   * All roles are of the format roles/storage.specificRole. The new IAM roles\n   * are:   - roles/storage.admin - Full control of Google Cloud Storage\n   * resources.   - roles/storage.objectViewer - Read-Only access to Google\n   * Cloud Storage objects.   - roles/storage.objectCreator - Access to create\n   * objects in Google Cloud Storage.   - roles/storage.objectAdmin - Full\n   * control of Google Cloud Storage objects.   The legacy IAM roles are:   -\n   * roles/storage.legacyObjectReader - Read-only access to objects without\n   * listing. Equivalent to an ACL entry on an object with the READER role.   -\n   * roles/storage.legacyObjectOwner - Read/write access to existing objects\n   * without listing. Equivalent to an ACL entry on an object with the OWNER\n   * role.   - roles/storage.legacyBucketReader - Read access to buckets with\n   * object listing. Equivalent to an ACL entry on a bucket with the READER\n   * role.   - roles/storage.legacyBucketWriter - Read access to buckets with\n   * object listing/creation/deletion. Equivalent to an ACL entry on a bucket\n   * with the WRITER role.   - roles/storage.legacyBucketOwner - Read and write\n   * access to existing buckets with object listing/creation/deletion.\n   * Equivalent to an ACL entry on a bucket with the OWNER role.\n   *\n   * @var string\n   */\n  public $role;\n\n  /**\n   * The condition that is associated with this binding. NOTE: an unsatisfied\n   * condition will not allow user access via current binding. Different\n   * bindings, including their conditions, are examined independently.\n   *\n   * @param Expr $condition\n   */\n  public function setCondition(Expr $condition)\n  {\n    $this->condition = $condition;\n  }\n  /**\n   * @return Expr\n   */\n  public function getCondition()\n  {\n    return $this->condition;\n  }\n  /**\n   * A collection of identifiers for members who may assume the provided role.\n   * Recognized identifiers are as follows: - allUsers - A special identifier\n   * that represents anyone on the internet; with or without a Google account.\n   * - allAuthenticatedUsers - A special identifier that represents anyone who\n   * is authenticated with a Google account or a service account.   -\n   * user:emailid - An email address that represents a specific account. For\n   * example, user:alice@gmail.com or user:joe@example.com.   -\n   * serviceAccount:emailid - An email address that represents a service\n   * account. For example,  serviceAccount:my-other-\n   * app@appspot.gserviceaccount.com .   - group:emailid - An email address that\n   * represents a Google group. For example, group:admins@example.com.   -\n   * domain:domain - A Google Apps domain name that represents all the users of\n   * that domain. For example, domain:google.com or domain:example.com.   -\n   * projectOwner:projectid - Owners of the given project. For example,\n   * projectOwner:my-example-project   - projectEditor:projectid - Editors of\n   * the given project. For example, projectEditor:my-example-project   -\n   * projectViewer:projectid - Viewers of the given project. For example,\n   * projectViewer:my-example-project\n   *\n   * @param string[] $members\n   */\n  public function setMembers($members)\n  {\n    $this->members = $members;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMembers()\n  {\n    return $this->members;\n  }\n  /**\n   * The role to which members belong. Two types of roles are supported: new IAM\n   * roles, which grant permissions that do not map directly to those provided\n   * by ACLs, and legacy IAM roles, which do map directly to ACL permissions.\n   * All roles are of the format roles/storage.specificRole. The new IAM roles\n   * are:   - roles/storage.admin - Full control of Google Cloud Storage\n   * resources.   - roles/storage.objectViewer - Read-Only access to Google\n   * Cloud Storage objects.   - roles/storage.objectCreator - Access to create\n   * objects in Google Cloud Storage.   - roles/storage.objectAdmin - Full\n   * control of Google Cloud Storage objects.   The legacy IAM roles are:   -\n   * roles/storage.legacyObjectReader - Read-only access to objects without\n   * listing. Equivalent to an ACL entry on an object with the READER role.   -\n   * roles/storage.legacyObjectOwner - Read/write access to existing objects\n   * without listing. Equivalent to an ACL entry on an object with the OWNER\n   * role.   - roles/storage.legacyBucketReader - Read access to buckets with\n   * object listing. Equivalent to an ACL entry on a bucket with the READER\n   * role.   - roles/storage.legacyBucketWriter - Read access to buckets with\n   * object listing/creation/deletion. Equivalent to an ACL entry on a bucket\n   * with the WRITER role.   - roles/storage.legacyBucketOwner - Read and write\n   * access to existing buckets with object listing/creation/deletion.\n   * Equivalent to an ACL entry on a bucket with the OWNER role.\n   *\n   * @param string $role\n   */\n  public function setRole($role)\n  {\n    $this->role = $role;\n  }\n  /**\n   * @return string\n   */\n  public function getRole()\n  {\n    return $this->role;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(PolicyBindings::class, 'Google_Service_Storage_PolicyBindings');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/RelocateBucketRequest.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass RelocateBucketRequest extends \\Google\\Model\n{\n  protected $destinationCustomPlacementConfigType = RelocateBucketRequestDestinationCustomPlacementConfig::class;\n  protected $destinationCustomPlacementConfigDataType = '';\n  /**\n   * The new location the bucket will be relocated to.\n   *\n   * @var string\n   */\n  public $destinationLocation;\n  /**\n   * If true, validate the operation, but do not actually relocate the bucket.\n   *\n   * @var bool\n   */\n  public $validateOnly;\n\n  /**\n   * The bucket's new custom placement configuration if relocating to a Custom\n   * Dual Region.\n   *\n   * @param RelocateBucketRequestDestinationCustomPlacementConfig $destinationCustomPlacementConfig\n   */\n  public function setDestinationCustomPlacementConfig(RelocateBucketRequestDestinationCustomPlacementConfig $destinationCustomPlacementConfig)\n  {\n    $this->destinationCustomPlacementConfig = $destinationCustomPlacementConfig;\n  }\n  /**\n   * @return RelocateBucketRequestDestinationCustomPlacementConfig\n   */\n  public function getDestinationCustomPlacementConfig()\n  {\n    return $this->destinationCustomPlacementConfig;\n  }\n  /**\n   * The new location the bucket will be relocated to.\n   *\n   * @param string $destinationLocation\n   */\n  public function setDestinationLocation($destinationLocation)\n  {\n    $this->destinationLocation = $destinationLocation;\n  }\n  /**\n   * @return string\n   */\n  public function getDestinationLocation()\n  {\n    return $this->destinationLocation;\n  }\n  /**\n   * If true, validate the operation, but do not actually relocate the bucket.\n   *\n   * @param bool $validateOnly\n   */\n  public function setValidateOnly($validateOnly)\n  {\n    $this->validateOnly = $validateOnly;\n  }\n  /**\n   * @return bool\n   */\n  public function getValidateOnly()\n  {\n    return $this->validateOnly;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(RelocateBucketRequest::class, 'Google_Service_Storage_RelocateBucketRequest');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/RelocateBucketRequestDestinationCustomPlacementConfig.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass RelocateBucketRequestDestinationCustomPlacementConfig extends \\Google\\Collection\n{\n  protected $collection_key = 'dataLocations';\n  /**\n   * The list of regional locations in which data is placed.\n   *\n   * @var string[]\n   */\n  public $dataLocations;\n\n  /**\n   * The list of regional locations in which data is placed.\n   *\n   * @param string[] $dataLocations\n   */\n  public function setDataLocations($dataLocations)\n  {\n    $this->dataLocations = $dataLocations;\n  }\n  /**\n   * @return string[]\n   */\n  public function getDataLocations()\n  {\n    return $this->dataLocations;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(RelocateBucketRequestDestinationCustomPlacementConfig::class, 'Google_Service_Storage_RelocateBucketRequestDestinationCustomPlacementConfig');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/AnywhereCache.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\AnywhereCache as AnywhereCacheModel;\nuse Google\\Service\\Storage\\AnywhereCaches;\nuse Google\\Service\\Storage\\GoogleLongrunningOperation;\n\n/**\n * The \"anywhereCache\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $anywhereCache = $storageService->anywhereCache;\n *  </code>\n */\nclass AnywhereCache extends \\Google\\Service\\Resource\n{\n  /**\n   * Disables an Anywhere Cache instance. (anywhereCache.disable)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCacheModel\n   */\n  public function disable($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('disable', [$params], AnywhereCacheModel::class);\n  }\n  /**\n   * Returns the metadata of an Anywhere Cache instance. (anywhereCache.get)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCacheModel\n   */\n  public function get($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], AnywhereCacheModel::class);\n  }\n  /**\n   * Creates an Anywhere Cache instance. (anywhereCache.insert)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param AnywhereCacheModel $postBody\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   */\n  public function insert($bucket, AnywhereCacheModel $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], GoogleLongrunningOperation::class);\n  }\n  /**\n   * Returns a list of Anywhere Cache instances of the bucket matching the\n   * criteria. (anywhereCache.listAnywhereCache)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param int pageSize Maximum number of items return in a single page of\n   * responses. Maximum 1000.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @return AnywhereCaches\n   */\n  public function listAnywhereCache($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], AnywhereCaches::class);\n  }\n  /**\n   * Pauses an Anywhere Cache instance. (anywhereCache.pause)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCacheModel\n   */\n  public function pause($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('pause', [$params], AnywhereCacheModel::class);\n  }\n  /**\n   * Resumes a paused or disabled Anywhere Cache instance. (anywhereCache.resume)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCacheModel\n   */\n  public function resume($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('resume', [$params], AnywhereCacheModel::class);\n  }\n  /**\n   * Updates the config(ttl and admissionPolicy) of an Anywhere Cache instance.\n   * (anywhereCache.update)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param AnywhereCacheModel $postBody\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   */\n  public function update($bucket, $anywhereCacheId, AnywhereCacheModel $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], GoogleLongrunningOperation::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(AnywhereCache::class, 'Google_Service_Storage_Resource_AnywhereCache');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/AnywhereCaches.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\AnywhereCache;\nuse Google\\Service\\Storage\\AnywhereCaches as AnywhereCachesModel;\nuse Google\\Service\\Storage\\GoogleLongrunningOperation;\n\n/**\n * The \"anywhereCaches\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $anywhereCaches = $storageService->anywhereCaches;\n *  </code>\n */\nclass AnywhereCaches extends \\Google\\Service\\Resource\n{\n  /**\n   * Disables an Anywhere Cache instance. (anywhereCaches.disable)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCache\n   * @throws \\Google\\Service\\Exception\n   */\n  public function disable($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('disable', [$params], AnywhereCache::class);\n  }\n  /**\n   * Returns the metadata of an Anywhere Cache instance. (anywhereCaches.get)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCache\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], AnywhereCache::class);\n  }\n  /**\n   * Creates an Anywhere Cache instance. (anywhereCaches.insert)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param AnywhereCache $postBody\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, AnywhereCache $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], GoogleLongrunningOperation::class);\n  }\n  /**\n   * Returns a list of Anywhere Cache instances of the bucket matching the\n   * criteria. (anywhereCaches.listAnywhereCaches)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param int pageSize Maximum number of items to return in a single page of\n   * responses. Maximum 1000.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @return AnywhereCachesModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listAnywhereCaches($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], AnywhereCachesModel::class);\n  }\n  /**\n   * Pauses an Anywhere Cache instance. (anywhereCaches.pause)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCache\n   * @throws \\Google\\Service\\Exception\n   */\n  public function pause($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('pause', [$params], AnywhereCache::class);\n  }\n  /**\n   * Resumes a paused or disabled Anywhere Cache instance. (anywhereCaches.resume)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param array $optParams Optional parameters.\n   * @return AnywhereCache\n   * @throws \\Google\\Service\\Exception\n   */\n  public function resume($bucket, $anywhereCacheId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId];\n    $params = array_merge($params, $optParams);\n    return $this->call('resume', [$params], AnywhereCache::class);\n  }\n  /**\n   * Updates the config(ttl and admissionPolicy) of an Anywhere Cache instance.\n   * (anywhereCaches.update)\n   *\n   * @param string $bucket Name of the parent bucket.\n   * @param string $anywhereCacheId The ID of requested Anywhere Cache instance.\n   * @param AnywhereCache $postBody\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($bucket, $anywhereCacheId, AnywhereCache $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'anywhereCacheId' => $anywhereCacheId, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], GoogleLongrunningOperation::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(AnywhereCaches::class, 'Google_Service_Storage_Resource_AnywhereCaches');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/BucketAccessControls.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\BucketAccessControl;\nuse Google\\Service\\Storage\\BucketAccessControls as BucketAccessControlsModel;\n\n/**\n * The \"bucketAccessControls\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $bucketAccessControls = $storageService->bucketAccessControls;\n *  </code>\n */\nclass BucketAccessControls extends \\Google\\Service\\Resource\n{\n  /**\n   * Permanently deletes the ACL entry for the specified entity on the specified\n   * bucket. (bucketAccessControls.delete)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $entity, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Returns the ACL entry for the specified entity on the specified bucket.\n   * (bucketAccessControls.get)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return BucketAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $entity, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], BucketAccessControl::class);\n  }\n  /**\n   * Creates a new ACL entry on the specified bucket.\n   * (bucketAccessControls.insert)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param BucketAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return BucketAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, BucketAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], BucketAccessControl::class);\n  }\n  /**\n   * Retrieves ACL entries on the specified bucket.\n   * (bucketAccessControls.listBucketAccessControls)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return BucketAccessControlsModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listBucketAccessControls($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], BucketAccessControlsModel::class);\n  }\n  /**\n   * Patches an ACL entry on the specified bucket. (bucketAccessControls.patch)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param BucketAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return BucketAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function patch($bucket, $entity, BucketAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('patch', [$params], BucketAccessControl::class);\n  }\n  /**\n   * Updates an ACL entry on the specified bucket. (bucketAccessControls.update)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param BucketAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return BucketAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($bucket, $entity, BucketAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], BucketAccessControl::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(BucketAccessControls::class, 'Google_Service_Storage_Resource_BucketAccessControls');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Buckets.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\Bucket;\nuse Google\\Service\\Storage\\BucketStorageLayout;\nuse Google\\Service\\Storage\\Buckets as BucketsModel;\nuse Google\\Service\\Storage\\GoogleLongrunningOperation;\nuse Google\\Service\\Storage\\Policy;\nuse Google\\Service\\Storage\\RelocateBucketRequest;\nuse Google\\Service\\Storage\\TestIamPermissionsResponse;\n\n/**\n * The \"buckets\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $buckets = $storageService->buckets;\n *  </code>\n */\nclass Buckets extends \\Google\\Service\\Resource\n{\n  /**\n   * Deletes an empty bucket. Deletions are permanent unless soft delete is\n   * enabled on the bucket. (buckets.delete)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch If set, only deletes the bucket if\n   * its metageneration matches this value.\n   * @opt_param string ifMetagenerationNotMatch If set, only deletes the bucket if\n   * its metageneration does not match this value.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Returns metadata for the specified bucket. (buckets.get)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, specifies the generation of the\n   * bucket. This is required if softDeleted is true.\n   * @opt_param string ifMetagenerationMatch Makes the return of the bucket\n   * metadata conditional on whether the bucket's current metageneration matches\n   * the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the return of the bucket\n   * metadata conditional on whether the bucket's current metageneration does not\n   * match the given value.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl.\n   * @opt_param bool softDeleted If true, return the soft-deleted version of this\n   * bucket. The default is false. For more information, see [Soft\n   * Delete](https://cloud.google.com/storage/docs/soft-delete).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Bucket\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], Bucket::class);\n  }\n  /**\n   * Returns an IAM policy for the specified bucket. (buckets.getIamPolicy)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param int optionsRequestedPolicyVersion The IAM policy format version to\n   * be returned. If the optionsRequestedPolicyVersion is for an older version\n   * that doesn't support part of the requested IAM policy, the request fails.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Policy\n   * @throws \\Google\\Service\\Exception\n   */\n  public function getIamPolicy($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('getIamPolicy', [$params], Policy::class);\n  }\n  /**\n   * Returns the storage layout configuration for the specified bucket. Note that\n   * this operation requires storage.objects.list permission.\n   * (buckets.getStorageLayout)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string prefix An optional prefix used for permission check. It is\n   * useful when the caller only has storage.objects.list permission under a\n   * specific prefix.\n   * @return BucketStorageLayout\n   * @throws \\Google\\Service\\Exception\n   */\n  public function getStorageLayout($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('getStorageLayout', [$params], BucketStorageLayout::class);\n  }\n  /**\n   * Creates a new bucket. (buckets.insert)\n   *\n   * @param string $project A valid API project identifier.\n   * @param Bucket $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param bool enableObjectRetention When set to true, object retention is\n   * enabled for this bucket.\n   * @opt_param string predefinedAcl Apply a predefined set of access controls to\n   * this bucket.\n   * @opt_param string predefinedDefaultObjectAcl Apply a predefined set of\n   * default object access controls to this bucket.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl,\n   * unless the bucket resource specifies acl or defaultObjectAcl properties, when\n   * it defaults to full.\n   * @opt_param string userProject The project to be billed for this request.\n   * @return Bucket\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($project, Bucket $postBody, $optParams = [])\n  {\n    $params = ['project' => $project, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], Bucket::class);\n  }\n  /**\n   * Retrieves a list of buckets for a given project. (buckets.listBuckets)\n   *\n   * @param string $project A valid API project identifier.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string maxResults Maximum number of buckets to return in a single\n   * response. The service will use this parameter or 1,000 items, whichever is\n   * smaller.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @opt_param string prefix Filter results to buckets whose names begin with\n   * this prefix.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl.\n   * @opt_param bool returnPartialSuccess If true, return a list of bucket\n   * resource names for buckets that are in unreachable locations.\n   * @opt_param bool softDeleted If true, only soft-deleted bucket versions will\n   * be returned. The default is false. For more information, see [Soft\n   * Delete](https://cloud.google.com/storage/docs/soft-delete).\n   * @opt_param string userProject The project to be billed for this request.\n   * @return BucketsModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listBuckets($project, $optParams = [])\n  {\n    $params = ['project' => $project];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], BucketsModel::class);\n  }\n  /**\n   * Locks retention policy on a bucket. (buckets.lockRetentionPolicy)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $ifMetagenerationMatch Makes the operation conditional on\n   * whether bucket's current metageneration matches the given value.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Bucket\n   * @throws \\Google\\Service\\Exception\n   */\n  public function lockRetentionPolicy($bucket, $ifMetagenerationMatch, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'ifMetagenerationMatch' => $ifMetagenerationMatch];\n    $params = array_merge($params, $optParams);\n    return $this->call('lockRetentionPolicy', [$params], Bucket::class);\n  }\n  /**\n   * Patches a bucket. Changes to the bucket will be readable immediately after\n   * writing, but configuration changes may take time to propagate.\n   * (buckets.patch)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param Bucket $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch Makes the return of the bucket\n   * metadata conditional on whether the bucket's current metageneration matches\n   * the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the return of the bucket\n   * metadata conditional on whether the bucket's current metageneration does not\n   * match the given value.\n   * @opt_param string predefinedAcl Apply a predefined set of access controls to\n   * this bucket.\n   * @opt_param string predefinedDefaultObjectAcl Apply a predefined set of\n   * default object access controls to this bucket.\n   * @opt_param string projection Set of properties to return. Defaults to full.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Bucket\n   * @throws \\Google\\Service\\Exception\n   */\n  public function patch($bucket, Bucket $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('patch', [$params], Bucket::class);\n  }\n  /**\n   * Initiates a long-running Relocate Bucket operation on the specified bucket.\n   * (buckets.relocate)\n   *\n   * @param string $bucket Name of the bucket to be moved.\n   * @param RelocateBucketRequest $postBody\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   * @throws \\Google\\Service\\Exception\n   */\n  public function relocate($bucket, RelocateBucketRequest $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('relocate', [$params], GoogleLongrunningOperation::class);\n  }\n  /**\n   * Restores a soft-deleted bucket. (buckets.restore)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $generation Generation of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string projection Set of properties to return. Defaults to full.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Bucket\n   * @throws \\Google\\Service\\Exception\n   */\n  public function restore($bucket, $generation, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'generation' => $generation];\n    $params = array_merge($params, $optParams);\n    return $this->call('restore', [$params], Bucket::class);\n  }\n  /**\n   * Updates an IAM policy for the specified bucket. (buckets.setIamPolicy)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param Policy $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Policy\n   * @throws \\Google\\Service\\Exception\n   */\n  public function setIamPolicy($bucket, Policy $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('setIamPolicy', [$params], Policy::class);\n  }\n  /**\n   * Tests a set of permissions on the given bucket to see which, if any, are held\n   * by the caller. (buckets.testIamPermissions)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string|array $permissions Permissions to test.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return TestIamPermissionsResponse\n   * @throws \\Google\\Service\\Exception\n   */\n  public function testIamPermissions($bucket, $permissions, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'permissions' => $permissions];\n    $params = array_merge($params, $optParams);\n    return $this->call('testIamPermissions', [$params], TestIamPermissionsResponse::class);\n  }\n  /**\n   * Updates a bucket. Changes to the bucket will be readable immediately after\n   * writing, but configuration changes may take time to propagate.\n   * (buckets.update)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param Bucket $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch Makes the return of the bucket\n   * metadata conditional on whether the bucket's current metageneration matches\n   * the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the return of the bucket\n   * metadata conditional on whether the bucket's current metageneration does not\n   * match the given value.\n   * @opt_param string predefinedAcl Apply a predefined set of access controls to\n   * this bucket.\n   * @opt_param string predefinedDefaultObjectAcl Apply a predefined set of\n   * default object access controls to this bucket.\n   * @opt_param string projection Set of properties to return. Defaults to full.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Bucket\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($bucket, Bucket $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], Bucket::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Buckets::class, 'Google_Service_Storage_Resource_Buckets');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Channels.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\Channel;\n\n/**\n * The \"channels\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $channels = $storageService->channels;\n *  </code>\n */\nclass Channels extends \\Google\\Service\\Resource\n{\n  /**\n   * Stop watching resources through this channel (channels.stop)\n   *\n   * @param Channel $postBody\n   * @param array $optParams Optional parameters.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function stop(Channel $postBody, $optParams = [])\n  {\n    $params = ['postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('stop', [$params]);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Channels::class, 'Google_Service_Storage_Resource_Channels');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/DefaultObjectAccessControls.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\ObjectAccessControl;\nuse Google\\Service\\Storage\\ObjectAccessControls as ObjectAccessControlsModel;\n\n/**\n * The \"defaultObjectAccessControls\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $defaultObjectAccessControls = $storageService->defaultObjectAccessControls;\n *  </code>\n */\nclass DefaultObjectAccessControls extends \\Google\\Service\\Resource\n{\n  /**\n   * Permanently deletes the default object ACL entry for the specified entity on\n   * the specified bucket. (defaultObjectAccessControls.delete)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $entity, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Returns the default object ACL entry for the specified entity on the\n   * specified bucket. (defaultObjectAccessControls.get)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $entity, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], ObjectAccessControl::class);\n  }\n  /**\n   * Creates a new default object ACL entry on the specified bucket.\n   * (defaultObjectAccessControls.insert)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param ObjectAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, ObjectAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], ObjectAccessControl::class);\n  }\n  /**\n   * Retrieves default object ACL entries on the specified bucket.\n   * (defaultObjectAccessControls.listDefaultObjectAccessControls)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch If present, only return default ACL\n   * listing if the bucket's current metageneration matches this value.\n   * @opt_param string ifMetagenerationNotMatch If present, only return default\n   * ACL listing if the bucket's current metageneration does not match the given\n   * value.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControlsModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listDefaultObjectAccessControls($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], ObjectAccessControlsModel::class);\n  }\n  /**\n   * Patches a default object ACL entry on the specified bucket.\n   * (defaultObjectAccessControls.patch)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param ObjectAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function patch($bucket, $entity, ObjectAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('patch', [$params], ObjectAccessControl::class);\n  }\n  /**\n   * Updates a default object ACL entry on the specified bucket.\n   * (defaultObjectAccessControls.update)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param ObjectAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($bucket, $entity, ObjectAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'entity' => $entity, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], ObjectAccessControl::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(DefaultObjectAccessControls::class, 'Google_Service_Storage_Resource_DefaultObjectAccessControls');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Folders.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\Folder;\nuse Google\\Service\\Storage\\Folders as FoldersModel;\nuse Google\\Service\\Storage\\GoogleLongrunningOperation;\n\n/**\n * The \"folders\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $folders = $storageService->folders;\n *  </code>\n */\nclass Folders extends \\Google\\Service\\Resource\n{\n  /**\n   * Permanently deletes a folder. Only applicable to buckets with hierarchical\n   * namespace enabled. (folders.delete)\n   *\n   * @param string $bucket Name of the bucket in which the folder resides.\n   * @param string $folder Name of a folder.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch If set, only deletes the folder if\n   * its metageneration matches this value.\n   * @opt_param string ifMetagenerationNotMatch If set, only deletes the folder if\n   * its metageneration does not match this value.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $folder, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'folder' => $folder];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Returns metadata for the specified folder. Only applicable to buckets with\n   * hierarchical namespace enabled. (folders.get)\n   *\n   * @param string $bucket Name of the bucket in which the folder resides.\n   * @param string $folder Name of a folder.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch Makes the return of the folder\n   * metadata conditional on whether the folder's current metageneration matches\n   * the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the return of the folder\n   * metadata conditional on whether the folder's current metageneration does not\n   * match the given value.\n   * @return Folder\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $folder, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'folder' => $folder];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], Folder::class);\n  }\n  /**\n   * Creates a new folder. Only applicable to buckets with hierarchical namespace\n   * enabled. (folders.insert)\n   *\n   * @param string $bucket Name of the bucket in which the folder resides.\n   * @param Folder $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param bool recursive If true, any parent folder which doesn't exist will\n   * be created automatically.\n   * @return Folder\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, Folder $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], Folder::class);\n  }\n  /**\n   * Retrieves a list of folders matching the criteria. Only applicable to buckets\n   * with hierarchical namespace enabled. (folders.listFolders)\n   *\n   * @param string $bucket Name of the bucket in which to look for folders.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string delimiter Returns results in a directory-like mode. The\n   * only supported value is '/'. If set, items will only contain folders that\n   * either exactly match the prefix, or are one level below the prefix.\n   * @opt_param string endOffset Filter results to folders whose names are\n   * lexicographically before endOffset. If startOffset is also set, the folders\n   * listed will have names between startOffset (inclusive) and endOffset\n   * (exclusive).\n   * @opt_param int pageSize Maximum number of items to return in a single page of\n   * responses.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @opt_param string prefix Filter results to folders whose paths begin with\n   * this prefix. If set, the value must either be an empty string or end with a\n   * '/'.\n   * @opt_param string startOffset Filter results to folders whose names are\n   * lexicographically equal to or after startOffset. If endOffset is also set,\n   * the folders listed will have names between startOffset (inclusive) and\n   * endOffset (exclusive).\n   * @return FoldersModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listFolders($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], FoldersModel::class);\n  }\n  /**\n   * Renames a source folder to a destination folder. Only applicable to buckets\n   * with hierarchical namespace enabled. (folders.rename)\n   *\n   * @param string $bucket Name of the bucket in which the folders are in.\n   * @param string $sourceFolder Name of the source folder.\n   * @param string $destinationFolder Name of the destination folder.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifSourceMetagenerationMatch Makes the operation conditional\n   * on whether the source object's current metageneration matches the given\n   * value.\n   * @opt_param string ifSourceMetagenerationNotMatch Makes the operation\n   * conditional on whether the source object's current metageneration does not\n   * match the given value.\n   * @return GoogleLongrunningOperation\n   * @throws \\Google\\Service\\Exception\n   */\n  public function rename($bucket, $sourceFolder, $destinationFolder, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'sourceFolder' => $sourceFolder, 'destinationFolder' => $destinationFolder];\n    $params = array_merge($params, $optParams);\n    return $this->call('rename', [$params], GoogleLongrunningOperation::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Folders::class, 'Google_Service_Storage_Resource_Folders');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/ManagedFolders.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\ManagedFolder;\nuse Google\\Service\\Storage\\ManagedFolders as ManagedFoldersModel;\nuse Google\\Service\\Storage\\Policy;\nuse Google\\Service\\Storage\\TestIamPermissionsResponse;\n\n/**\n * The \"managedFolders\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $managedFolders = $storageService->managedFolders;\n *  </code>\n */\nclass ManagedFolders extends \\Google\\Service\\Resource\n{\n  /**\n   * Permanently deletes a managed folder. (managedFolders.delete)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param string $managedFolder The managed folder name/path.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param bool allowNonEmpty Allows the deletion of a managed folder even if\n   * it is not empty. A managed folder is empty if there are no objects or managed\n   * folders that it applies to. Callers must have\n   * storage.managedFolders.setIamPolicy permission.\n   * @opt_param string ifMetagenerationMatch If set, only deletes the managed\n   * folder if its metageneration matches this value.\n   * @opt_param string ifMetagenerationNotMatch If set, only deletes the managed\n   * folder if its metageneration does not match this value.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $managedFolder, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'managedFolder' => $managedFolder];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Returns metadata of the specified managed folder. (managedFolders.get)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param string $managedFolder The managed folder name/path.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifMetagenerationMatch Makes the return of the managed\n   * folder metadata conditional on whether the managed folder's current\n   * metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the return of the managed\n   * folder metadata conditional on whether the managed folder's current\n   * metageneration does not match the given value.\n   * @return ManagedFolder\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $managedFolder, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'managedFolder' => $managedFolder];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], ManagedFolder::class);\n  }\n  /**\n   * Returns an IAM policy for the specified managed folder.\n   * (managedFolders.getIamPolicy)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param string $managedFolder The managed folder name/path.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param int optionsRequestedPolicyVersion The IAM policy format version to\n   * be returned. If the optionsRequestedPolicyVersion is for an older version\n   * that doesn't support part of the requested IAM policy, the request fails.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Policy\n   * @throws \\Google\\Service\\Exception\n   */\n  public function getIamPolicy($bucket, $managedFolder, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'managedFolder' => $managedFolder];\n    $params = array_merge($params, $optParams);\n    return $this->call('getIamPolicy', [$params], Policy::class);\n  }\n  /**\n   * Creates a new managed folder. (managedFolders.insert)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param ManagedFolder $postBody\n   * @param array $optParams Optional parameters.\n   * @return ManagedFolder\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, ManagedFolder $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], ManagedFolder::class);\n  }\n  /**\n   * Lists managed folders in the given bucket.\n   * (managedFolders.listManagedFolders)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param int pageSize Maximum number of items to return in a single page of\n   * responses.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @opt_param string prefix The managed folder name/path prefix to filter the\n   * output list of results.\n   * @return ManagedFoldersModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listManagedFolders($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], ManagedFoldersModel::class);\n  }\n  /**\n   * Updates an IAM policy for the specified managed folder.\n   * (managedFolders.setIamPolicy)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param string $managedFolder The managed folder name/path.\n   * @param Policy $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Policy\n   * @throws \\Google\\Service\\Exception\n   */\n  public function setIamPolicy($bucket, $managedFolder, Policy $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'managedFolder' => $managedFolder, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('setIamPolicy', [$params], Policy::class);\n  }\n  /**\n   * Tests a set of permissions on the given managed folder to see which, if any,\n   * are held by the caller. (managedFolders.testIamPermissions)\n   *\n   * @param string $bucket Name of the bucket containing the managed folder.\n   * @param string $managedFolder The managed folder name/path.\n   * @param string|array $permissions Permissions to test.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return TestIamPermissionsResponse\n   * @throws \\Google\\Service\\Exception\n   */\n  public function testIamPermissions($bucket, $managedFolder, $permissions, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'managedFolder' => $managedFolder, 'permissions' => $permissions];\n    $params = array_merge($params, $optParams);\n    return $this->call('testIamPermissions', [$params], TestIamPermissionsResponse::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ManagedFolders::class, 'Google_Service_Storage_Resource_ManagedFolders');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Notifications.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\Notification;\nuse Google\\Service\\Storage\\Notifications as NotificationsModel;\n\n/**\n * The \"notifications\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $notifications = $storageService->notifications;\n *  </code>\n */\nclass Notifications extends \\Google\\Service\\Resource\n{\n  /**\n   * Permanently deletes a notification subscription. (notifications.delete)\n   *\n   * @param string $bucket The parent bucket of the notification.\n   * @param string $notification ID of the notification to delete.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $notification, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'notification' => $notification];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * View a notification configuration. (notifications.get)\n   *\n   * @param string $bucket The parent bucket of the notification.\n   * @param string $notification Notification ID\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Notification\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $notification, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'notification' => $notification];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], Notification::class);\n  }\n  /**\n   * Creates a notification subscription for a given bucket.\n   * (notifications.insert)\n   *\n   * @param string $bucket The parent bucket of the notification.\n   * @param Notification $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Notification\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, Notification $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], Notification::class);\n  }\n  /**\n   * Retrieves a list of notification subscriptions for a given bucket.\n   * (notifications.listNotifications)\n   *\n   * @param string $bucket Name of a Google Cloud Storage bucket.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return NotificationsModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listNotifications($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], NotificationsModel::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Notifications::class, 'Google_Service_Storage_Resource_Notifications');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/ObjectAccessControls.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\ObjectAccessControl;\nuse Google\\Service\\Storage\\ObjectAccessControls as ObjectAccessControlsModel;\n\n/**\n * The \"objectAccessControls\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $objectAccessControls = $storageService->objectAccessControls;\n *  </code>\n */\nclass ObjectAccessControls extends \\Google\\Service\\Resource\n{\n  /**\n   * Permanently deletes the ACL entry for the specified entity on the specified\n   * object. (objectAccessControls.delete)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $object, $entity, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'entity' => $entity];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Returns the ACL entry for the specified entity on the specified object.\n   * (objectAccessControls.get)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $object, $entity, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'entity' => $entity];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], ObjectAccessControl::class);\n  }\n  /**\n   * Creates a new ACL entry on the specified object.\n   * (objectAccessControls.insert)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param ObjectAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, $object, ObjectAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], ObjectAccessControl::class);\n  }\n  /**\n   * Retrieves ACL entries on the specified object.\n   * (objectAccessControls.listObjectAccessControls)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControlsModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listObjectAccessControls($bucket, $object, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], ObjectAccessControlsModel::class);\n  }\n  /**\n   * Patches an ACL entry on the specified object. (objectAccessControls.patch)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param ObjectAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function patch($bucket, $object, $entity, ObjectAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'entity' => $entity, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('patch', [$params], ObjectAccessControl::class);\n  }\n  /**\n   * Updates an ACL entry on the specified object. (objectAccessControls.update)\n   *\n   * @param string $bucket Name of a bucket.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $entity The entity holding the permission. Can be user-userId,\n   * user-emailAddress, group-groupId, group-emailAddress, allUsers, or\n   * allAuthenticatedUsers.\n   * @param ObjectAccessControl $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return ObjectAccessControl\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($bucket, $object, $entity, ObjectAccessControl $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'entity' => $entity, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], ObjectAccessControl::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ObjectAccessControls::class, 'Google_Service_Storage_Resource_ObjectAccessControls');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Objects.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\BulkRestoreObjectsRequest;\nuse Google\\Service\\Storage\\Channel;\nuse Google\\Service\\Storage\\ComposeRequest;\nuse Google\\Service\\Storage\\GoogleLongrunningOperation;\nuse Google\\Service\\Storage\\Objects as ObjectsModel;\nuse Google\\Service\\Storage\\Policy;\nuse Google\\Service\\Storage\\RewriteResponse;\nuse Google\\Service\\Storage\\StorageObject;\nuse Google\\Service\\Storage\\TestIamPermissionsResponse;\n\n/**\n * The \"objects\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $objects = $storageService->objects;\n *  </code>\n */\nclass Objects extends \\Google\\Service\\Resource\n{\n  /**\n   * Initiates a long-running bulk restore operation on the specified bucket.\n   * (objects.bulkRestore)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param BulkRestoreObjectsRequest $postBody\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   * @throws \\Google\\Service\\Exception\n   */\n  public function bulkRestore($bucket, BulkRestoreObjectsRequest $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('bulkRestore', [$params], GoogleLongrunningOperation::class);\n  }\n  /**\n   * Concatenates a list of existing objects into a new object in the same bucket.\n   * (objects.compose)\n   *\n   * @param string $destinationBucket Name of the bucket containing the source\n   * objects. The destination object is stored in this bucket.\n   * @param string $destinationObject Name of the new object. For information\n   * about how to URL encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param ComposeRequest $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string destinationPredefinedAcl Apply a predefined set of access\n   * controls to the destination object.\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's current metageneration matches the given value.\n   * @opt_param string kmsKeyName Resource name of the Cloud KMS key, of the form\n   * projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that\n   * will be used to encrypt the object. Overrides the object metadata's\n   * kms_key_name value, if any.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function compose($destinationBucket, $destinationObject, ComposeRequest $postBody, $optParams = [])\n  {\n    $params = ['destinationBucket' => $destinationBucket, 'destinationObject' => $destinationObject, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('compose', [$params], StorageObject::class);\n  }\n  /**\n   * Copies a source object to a destination object. Optionally overrides\n   * metadata. (objects.copy)\n   *\n   * @param string $sourceBucket Name of the bucket in which to find the source\n   * object.\n   * @param string $sourceObject Name of the source object. For information about\n   * how to URL encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $destinationBucket Name of the bucket in which to store the new\n   * object. Overrides the provided object metadata's bucket value, if any.For\n   * information about how to URL encode object names to be path safe, see\n   * [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-\n   * endpoints#encoding).\n   * @param string $destinationObject Name of the new object. Required when the\n   * object metadata is not otherwise provided. Overrides the object metadata's\n   * name value, if any.\n   * @param StorageObject $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string destinationKmsKeyName Resource name of the Cloud KMS key,\n   * of the form projects/my-project/locations/global/keyRings/my-\n   * kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the\n   * object metadata's kms_key_name value, if any.\n   * @opt_param string destinationPredefinedAcl Apply a predefined set of access\n   * controls to the destination object.\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the destination object's current generation matches the given value.\n   * Setting to 0 makes the operation succeed only if there are no live versions\n   * of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the destination object's current generation does not match the given\n   * value. If no live object exists, the precondition fails. Setting to 0 makes\n   * the operation succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the destination object's current metageneration matches the given\n   * value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the destination object's current metageneration does not match the\n   * given value.\n   * @opt_param string ifSourceGenerationMatch Makes the operation conditional on\n   * whether the source object's current generation matches the given value.\n   * @opt_param string ifSourceGenerationNotMatch Makes the operation conditional\n   * on whether the source object's current generation does not match the given\n   * value.\n   * @opt_param string ifSourceMetagenerationMatch Makes the operation conditional\n   * on whether the source object's current metageneration matches the given\n   * value.\n   * @opt_param string ifSourceMetagenerationNotMatch Makes the operation\n   * conditional on whether the source object's current metageneration does not\n   * match the given value.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl,\n   * unless the object resource specifies the acl property, when it defaults to\n   * full.\n   * @opt_param string sourceGeneration If present, selects a specific revision of\n   * the source object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function copy($sourceBucket, $sourceObject, $destinationBucket, $destinationObject, StorageObject $postBody, $optParams = [])\n  {\n    $params = ['sourceBucket' => $sourceBucket, 'sourceObject' => $sourceObject, 'destinationBucket' => $destinationBucket, 'destinationObject' => $destinationObject, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('copy', [$params], StorageObject::class);\n  }\n  /**\n   * Deletes an object and its metadata. Deletions are permanent if versioning is\n   * not enabled for the bucket, or if the generation parameter is used.\n   * (objects.delete)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, permanently deletes a specific\n   * revision of this object (as opposed to the latest version, the default).\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the object's current generation does not match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's current metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the object's current metageneration does not match the given value.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($bucket, $object, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Retrieves an object or its metadata. (objects.get)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the object's current generation does not match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's current metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the object's current metageneration does not match the given value.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl.\n   * @opt_param string restoreToken Restore token used to differentiate soft-\n   * deleted objects with the same name and generation. Only applicable for\n   * hierarchical namespace buckets and if softDeleted is set to true. This\n   * parameter is optional, and is only required in the rare case when there are\n   * multiple soft-deleted objects with the same name and generation.\n   * @opt_param bool softDeleted If true, only soft-deleted object versions will\n   * be listed. The default is false. For more information, see [Soft\n   * Delete](https://cloud.google.com/storage/docs/soft-delete).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $object, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], StorageObject::class);\n  }\n  /**\n   * Returns an IAM policy for the specified object. (objects.getIamPolicy)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Policy\n   * @throws \\Google\\Service\\Exception\n   */\n  public function getIamPolicy($bucket, $object, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object];\n    $params = array_merge($params, $optParams);\n    return $this->call('getIamPolicy', [$params], Policy::class);\n  }\n  /**\n   * Stores a new object and metadata. (objects.insert)\n   *\n   * @param string $bucket Name of the bucket in which to store the new object.\n   * Overrides the provided object metadata's bucket value, if any.\n   * @param StorageObject $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string contentEncoding If set, sets the contentEncoding property\n   * of the final object to this value. Setting this parameter is equivalent to\n   * setting the contentEncoding metadata property. This can be useful when\n   * uploading an object with uploadType=media to indicate the encoding of the\n   * content being uploaded.\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the object's current generation does not match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's current metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the object's current metageneration does not match the given value.\n   * @opt_param string kmsKeyName Resource name of the Cloud KMS key, of the form\n   * projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that\n   * will be used to encrypt the object. Overrides the object metadata's\n   * kms_key_name value, if any.\n   * @opt_param string name Name of the object. Required when the object metadata\n   * is not otherwise provided. Overrides the object metadata's name value, if\n   * any. For information about how to URL encode object names to be path safe,\n   * see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-\n   * endpoints#encoding).\n   * @opt_param string predefinedAcl Apply a predefined set of access controls to\n   * this object.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl,\n   * unless the object resource specifies the acl property, when it defaults to\n   * full.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function insert($bucket, StorageObject $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('insert', [$params], StorageObject::class);\n  }\n  /**\n   * Retrieves a list of objects matching the criteria. (objects.listObjects)\n   *\n   * @param string $bucket Name of the bucket in which to look for objects.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string delimiter Returns results in a directory-like mode. items\n   * will contain only objects whose names, aside from the prefix, do not contain\n   * delimiter. Objects whose names, aside from the prefix, contain delimiter will\n   * have their name, truncated after the delimiter, returned in prefixes.\n   * Duplicate prefixes are omitted.\n   * @opt_param string endOffset Filter results to objects whose names are\n   * lexicographically before endOffset. If startOffset is also set, the objects\n   * listed will have names between startOffset (inclusive) and endOffset\n   * (exclusive).\n   * @opt_param string filter Filter the returned objects. Currently only\n   * supported for the contexts field. If delimiter is set, the returned prefixes\n   * are exempt from this filter.\n   * @opt_param bool includeFoldersAsPrefixes Only applicable if delimiter is set\n   * to '/'. If true, will also include folders and managed folders (besides\n   * objects) in the returned prefixes.\n   * @opt_param bool includeTrailingDelimiter If true, objects that end in exactly\n   * one instance of delimiter will have their metadata included in items in\n   * addition to prefixes.\n   * @opt_param string matchGlob Filter results to objects and prefixes that match\n   * this glob pattern.\n   * @opt_param string maxResults Maximum number of items plus prefixes to return\n   * in a single page of responses. As duplicate prefixes are omitted, fewer total\n   * results may be returned than requested. The service will use this parameter\n   * or 1,000 items, whichever is smaller.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @opt_param string prefix Filter results to objects whose names begin with\n   * this prefix.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl.\n   * @opt_param bool softDeleted If true, only soft-deleted object versions will\n   * be listed. The default is false. For more information, see [Soft\n   * Delete](https://cloud.google.com/storage/docs/soft-delete).\n   * @opt_param string startOffset Filter results to objects whose names are\n   * lexicographically equal to or after startOffset. If endOffset is also set,\n   * the objects listed will have names between startOffset (inclusive) and\n   * endOffset (exclusive).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @opt_param bool versions If true, lists all versions of an object as distinct\n   * results. The default is false. For more information, see [Object\n   * Versioning](https://cloud.google.com/storage/docs/object-versioning).\n   * @return ObjectsModel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listObjects($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], ObjectsModel::class);\n  }\n  /**\n   * Moves the source object to the destination object in the same bucket.\n   * (objects.move)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $sourceObject Name of the source object. For information about\n   * how to URL encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $destinationObject Name of the destination object. For\n   * information about how to URL encode object names to be path safe, see\n   * [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-\n   * endpoints#encoding).\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the destination object's current generation matches the given value.\n   * Setting to 0 makes the operation succeed only if there are no live versions\n   * of the object. `ifGenerationMatch` and `ifGenerationNotMatch` conditions are\n   * mutually exclusive: it's an error for both of them to be set in the request.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the destination object's current generation does not match the given\n   * value. If no live object exists, the precondition fails. Setting to 0 makes\n   * the operation succeed only if there is a live version of the\n   * object.`ifGenerationMatch` and `ifGenerationNotMatch` conditions are mutually\n   * exclusive: it's an error for both of them to be set in the request.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the destination object's current metageneration matches the given\n   * value. `ifMetagenerationMatch` and `ifMetagenerationNotMatch` conditions are\n   * mutually exclusive: it's an error for both of them to be set in the request.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the destination object's current metageneration does not match the\n   * given value. `ifMetagenerationMatch` and `ifMetagenerationNotMatch`\n   * conditions are mutually exclusive: it's an error for both of them to be set\n   * in the request.\n   * @opt_param string ifSourceGenerationMatch Makes the operation conditional on\n   * whether the source object's current generation matches the given value.\n   * `ifSourceGenerationMatch` and `ifSourceGenerationNotMatch` conditions are\n   * mutually exclusive: it's an error for both of them to be set in the request.\n   * @opt_param string ifSourceGenerationNotMatch Makes the operation conditional\n   * on whether the source object's current generation does not match the given\n   * value. `ifSourceGenerationMatch` and `ifSourceGenerationNotMatch` conditions\n   * are mutually exclusive: it's an error for both of them to be set in the\n   * request.\n   * @opt_param string ifSourceMetagenerationMatch Makes the operation conditional\n   * on whether the source object's current metageneration matches the given\n   * value. `ifSourceMetagenerationMatch` and `ifSourceMetagenerationNotMatch`\n   * conditions are mutually exclusive: it's an error for both of them to be set\n   * in the request.\n   * @opt_param string ifSourceMetagenerationNotMatch Makes the operation\n   * conditional on whether the source object's current metageneration does not\n   * match the given value. `ifSourceMetagenerationMatch` and\n   * `ifSourceMetagenerationNotMatch` conditions are mutually exclusive: it's an\n   * error for both of them to be set in the request.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function move($bucket, $sourceObject, $destinationObject, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'sourceObject' => $sourceObject, 'destinationObject' => $destinationObject];\n    $params = array_merge($params, $optParams);\n    return $this->call('move', [$params], StorageObject::class);\n  }\n  /**\n   * Patches an object's metadata. (objects.patch)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param StorageObject $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the object's current generation does not match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's current metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the object's current metageneration does not match the given value.\n   * @opt_param bool overrideUnlockedRetention Must be true to remove the\n   * retention configuration, reduce its unlocked retention period, or change its\n   * mode from unlocked to locked.\n   * @opt_param string predefinedAcl Apply a predefined set of access controls to\n   * this object.\n   * @opt_param string projection Set of properties to return. Defaults to full.\n   * @opt_param string userProject The project to be billed for this request, for\n   * Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function patch($bucket, $object, StorageObject $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('patch', [$params], StorageObject::class);\n  }\n  /**\n   * Restores a soft-deleted object. (objects.restore)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $generation Selects a specific revision of this object.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param bool copySourceAcl If true, copies the source object's ACL;\n   * otherwise, uses the bucket's default object ACL. The default is false.\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's one live generation matches the given value. Setting to\n   * 0 makes the operation succeed only if there are no live versions of the\n   * object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether none of the object's live generations match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's one live metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether none of the object's live metagenerations match the given value.\n   * @opt_param string projection Set of properties to return. Defaults to full.\n   * @opt_param string restoreToken Restore token used to differentiate sof-\n   * deleted objects with the same name and generation. Only applicable for\n   * hierarchical namespace buckets. This parameter is optional, and is only\n   * required in the rare case when there are multiple soft-deleted objects with\n   * the same name and generation.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function restore($bucket, $object, $generation, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'generation' => $generation];\n    $params = array_merge($params, $optParams);\n    return $this->call('restore', [$params], StorageObject::class);\n  }\n  /**\n   * Rewrites a source object to a destination object. Optionally overrides\n   * metadata. (objects.rewrite)\n   *\n   * @param string $sourceBucket Name of the bucket in which to find the source\n   * object.\n   * @param string $sourceObject Name of the source object. For information about\n   * how to URL encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string $destinationBucket Name of the bucket in which to store the new\n   * object. Overrides the provided object metadata's bucket value, if any.\n   * @param string $destinationObject Name of the new object. Required when the\n   * object metadata is not otherwise provided. Overrides the object metadata's\n   * name value, if any. For information about how to URL encode object names to\n   * be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param StorageObject $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string destinationKmsKeyName Resource name of the Cloud KMS key,\n   * of the form projects/my-project/locations/global/keyRings/my-\n   * kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the\n   * object metadata's kms_key_name value, if any.\n   * @opt_param string destinationPredefinedAcl Apply a predefined set of access\n   * controls to the destination object.\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the object's current generation does not match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the destination object's current metageneration matches the given\n   * value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the destination object's current metageneration does not match the\n   * given value.\n   * @opt_param string ifSourceGenerationMatch Makes the operation conditional on\n   * whether the source object's current generation matches the given value.\n   * @opt_param string ifSourceGenerationNotMatch Makes the operation conditional\n   * on whether the source object's current generation does not match the given\n   * value.\n   * @opt_param string ifSourceMetagenerationMatch Makes the operation conditional\n   * on whether the source object's current metageneration matches the given\n   * value.\n   * @opt_param string ifSourceMetagenerationNotMatch Makes the operation\n   * conditional on whether the source object's current metageneration does not\n   * match the given value.\n   * @opt_param string maxBytesRewrittenPerCall The maximum number of bytes that\n   * will be rewritten per rewrite request. Most callers shouldn't need to specify\n   * this parameter - it is primarily in place to support testing. If specified\n   * the value must be an integral multiple of 1 MiB (1048576). Also, this only\n   * applies to requests where the source and destination span locations and/or\n   * storage classes. Finally, this value must not change across rewrite calls\n   * else you'll get an error that the rewriteToken is invalid.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl,\n   * unless the object resource specifies the acl property, when it defaults to\n   * full.\n   * @opt_param string rewriteToken Include this field (from the previous rewrite\n   * response) on each rewrite request after the first one, until the rewrite\n   * response 'done' flag is true. Calls that provide a rewriteToken can omit all\n   * other request fields, but if included those fields must match the values\n   * provided in the first rewrite request.\n   * @opt_param string sourceGeneration If present, selects a specific revision of\n   * the source object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return RewriteResponse\n   * @throws \\Google\\Service\\Exception\n   */\n  public function rewrite($sourceBucket, $sourceObject, $destinationBucket, $destinationObject, StorageObject $postBody, $optParams = [])\n  {\n    $params = ['sourceBucket' => $sourceBucket, 'sourceObject' => $sourceObject, 'destinationBucket' => $destinationBucket, 'destinationObject' => $destinationObject, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('rewrite', [$params], RewriteResponse::class);\n  }\n  /**\n   * Updates an IAM policy for the specified object. (objects.setIamPolicy)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param Policy $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return Policy\n   * @throws \\Google\\Service\\Exception\n   */\n  public function setIamPolicy($bucket, $object, Policy $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('setIamPolicy', [$params], Policy::class);\n  }\n  /**\n   * Tests a set of permissions on the given object to see which, if any, are held\n   * by the caller. (objects.testIamPermissions)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param string|array $permissions Permissions to test.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return TestIamPermissionsResponse\n   * @throws \\Google\\Service\\Exception\n   */\n  public function testIamPermissions($bucket, $object, $permissions, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'permissions' => $permissions];\n    $params = array_merge($params, $optParams);\n    return $this->call('testIamPermissions', [$params], TestIamPermissionsResponse::class);\n  }\n  /**\n   * Updates an object's metadata. (objects.update)\n   *\n   * @param string $bucket Name of the bucket in which the object resides.\n   * @param string $object Name of the object. For information about how to URL\n   * encode object names to be path safe, see [Encoding URI Path\n   * Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\n   * @param StorageObject $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string generation If present, selects a specific revision of this\n   * object (as opposed to the latest version, the default).\n   * @opt_param string ifGenerationMatch Makes the operation conditional on\n   * whether the object's current generation matches the given value. Setting to 0\n   * makes the operation succeed only if there are no live versions of the object.\n   * @opt_param string ifGenerationNotMatch Makes the operation conditional on\n   * whether the object's current generation does not match the given value. If no\n   * live object exists, the precondition fails. Setting to 0 makes the operation\n   * succeed only if there is a live version of the object.\n   * @opt_param string ifMetagenerationMatch Makes the operation conditional on\n   * whether the object's current metageneration matches the given value.\n   * @opt_param string ifMetagenerationNotMatch Makes the operation conditional on\n   * whether the object's current metageneration does not match the given value.\n   * @opt_param bool overrideUnlockedRetention Must be true to remove the\n   * retention configuration, reduce its unlocked retention period, or change its\n   * mode from unlocked to locked.\n   * @opt_param string predefinedAcl Apply a predefined set of access controls to\n   * this object.\n   * @opt_param string projection Set of properties to return. Defaults to full.\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @return StorageObject\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($bucket, $object, StorageObject $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'object' => $object, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], StorageObject::class);\n  }\n  /**\n   * Watch for changes on all objects in a bucket. (objects.watchAll)\n   *\n   * @param string $bucket Name of the bucket in which to look for objects.\n   * @param Channel $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string delimiter Returns results in a directory-like mode. items\n   * will contain only objects whose names, aside from the prefix, do not contain\n   * delimiter. Objects whose names, aside from the prefix, contain delimiter will\n   * have their name, truncated after the delimiter, returned in prefixes.\n   * Duplicate prefixes are omitted.\n   * @opt_param string endOffset Filter results to objects whose names are\n   * lexicographically before endOffset. If startOffset is also set, the objects\n   * listed will have names between startOffset (inclusive) and endOffset\n   * (exclusive).\n   * @opt_param bool includeTrailingDelimiter If true, objects that end in exactly\n   * one instance of delimiter will have their metadata included in items in\n   * addition to prefixes.\n   * @opt_param string maxResults Maximum number of items plus prefixes to return\n   * in a single page of responses. As duplicate prefixes are omitted, fewer total\n   * results may be returned than requested. The service will use this parameter\n   * or 1,000 items, whichever is smaller.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @opt_param string prefix Filter results to objects whose names begin with\n   * this prefix.\n   * @opt_param string projection Set of properties to return. Defaults to noAcl.\n   * @opt_param string startOffset Filter results to objects whose names are\n   * lexicographically equal to or after startOffset. If endOffset is also set,\n   * the objects listed will have names between startOffset (inclusive) and\n   * endOffset (exclusive).\n   * @opt_param string userProject The project to be billed for this request.\n   * Required for Requester Pays buckets.\n   * @opt_param bool versions If true, lists all versions of an object as distinct\n   * results. The default is false. For more information, see [Object\n   * Versioning](https://cloud.google.com/storage/docs/object-versioning).\n   * @return Channel\n   * @throws \\Google\\Service\\Exception\n   */\n  public function watchAll($bucket, Channel $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('watchAll', [$params], Channel::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Objects::class, 'Google_Service_Storage_Resource_Objects');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Operations.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\AdvanceRelocateBucketOperationRequest;\nuse Google\\Service\\Storage\\GoogleLongrunningListOperationsResponse;\nuse Google\\Service\\Storage\\GoogleLongrunningOperation;\n\n/**\n * The \"operations\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $operations = $storageService->operations;\n *  </code>\n */\nclass Operations extends \\Google\\Service\\Resource\n{\n  /**\n   * Starts asynchronous advancement of the relocate bucket operation in the case\n   * of required write downtime, to allow it to lock the bucket at the source\n   * location, and proceed with the bucket location swap. The server makes a best\n   * effort to advance the relocate bucket operation, but success is not\n   * guaranteed. (operations.advanceRelocateBucket)\n   *\n   * @param string $bucket Name of the bucket to advance the relocate for.\n   * @param string $operationId ID of the operation resource.\n   * @param AdvanceRelocateBucketOperationRequest $postBody\n   * @param array $optParams Optional parameters.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function advanceRelocateBucket($bucket, $operationId, AdvanceRelocateBucketOperationRequest $postBody, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'operationId' => $operationId, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('advanceRelocateBucket', [$params]);\n  }\n  /**\n   * Starts asynchronous cancellation on a long-running operation. The server\n   * makes a best effort to cancel the operation, but success is not guaranteed.\n   * (operations.cancel)\n   *\n   * @param string $bucket The parent bucket of the operation resource.\n   * @param string $operationId The ID of the operation resource.\n   * @param array $optParams Optional parameters.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function cancel($bucket, $operationId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'operationId' => $operationId];\n    $params = array_merge($params, $optParams);\n    return $this->call('cancel', [$params]);\n  }\n  /**\n   * Gets the latest state of a long-running operation. (operations.get)\n   *\n   * @param string $bucket The parent bucket of the operation resource.\n   * @param string $operationId The ID of the operation resource.\n   * @param array $optParams Optional parameters.\n   * @return GoogleLongrunningOperation\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($bucket, $operationId, $optParams = [])\n  {\n    $params = ['bucket' => $bucket, 'operationId' => $operationId];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], GoogleLongrunningOperation::class);\n  }\n  /**\n   * Lists operations that match the specified filter in the request.\n   * (operations.listOperations)\n   *\n   * @param string $bucket Name of the bucket in which to look for operations.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string filter A filter to narrow down results to a preferred\n   * subset. The filtering language is documented in more detail in\n   * [AIP-160](https://google.aip.dev/160).\n   * @opt_param int pageSize Maximum number of items to return in a single page of\n   * responses. Fewer total results may be returned than requested. The service\n   * uses this parameter or 100 items, whichever is smaller.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @return GoogleLongrunningListOperationsResponse\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listOperations($bucket, $optParams = [])\n  {\n    $params = ['bucket' => $bucket];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], GoogleLongrunningListOperationsResponse::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Operations::class, 'Google_Service_Storage_Resource_Operations');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/Projects.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\n/**\n * The \"projects\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $projects = $storageService->projects;\n *  </code>\n */\nclass Projects extends \\Google\\Service\\Resource\n{\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Projects::class, 'Google_Service_Storage_Resource_Projects');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/ProjectsHmacKeys.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\HmacKey;\nuse Google\\Service\\Storage\\HmacKeyMetadata;\nuse Google\\Service\\Storage\\HmacKeysMetadata;\n\n/**\n * The \"hmacKeys\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $hmacKeys = $storageService->projects_hmacKeys;\n *  </code>\n */\nclass ProjectsHmacKeys extends \\Google\\Service\\Resource\n{\n  /**\n   * Creates a new HMAC key for the specified service account. (hmacKeys.create)\n   *\n   * @param string $projectId Project ID owning the service account.\n   * @param string $serviceAccountEmail Email address of the service account.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * @return HmacKey\n   * @throws \\Google\\Service\\Exception\n   */\n  public function create($projectId, $serviceAccountEmail, $optParams = [])\n  {\n    $params = ['projectId' => $projectId, 'serviceAccountEmail' => $serviceAccountEmail];\n    $params = array_merge($params, $optParams);\n    return $this->call('create', [$params], HmacKey::class);\n  }\n  /**\n   * Deletes an HMAC key. (hmacKeys.delete)\n   *\n   * @param string $projectId Project ID owning the requested key\n   * @param string $accessId Name of the HMAC key to be deleted.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * @throws \\Google\\Service\\Exception\n   */\n  public function delete($projectId, $accessId, $optParams = [])\n  {\n    $params = ['projectId' => $projectId, 'accessId' => $accessId];\n    $params = array_merge($params, $optParams);\n    return $this->call('delete', [$params]);\n  }\n  /**\n   * Retrieves an HMAC key's metadata (hmacKeys.get)\n   *\n   * @param string $projectId Project ID owning the service account of the\n   * requested key.\n   * @param string $accessId Name of the HMAC key.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * @return HmacKeyMetadata\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($projectId, $accessId, $optParams = [])\n  {\n    $params = ['projectId' => $projectId, 'accessId' => $accessId];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], HmacKeyMetadata::class);\n  }\n  /**\n   * Retrieves a list of HMAC keys matching the criteria.\n   * (hmacKeys.listProjectsHmacKeys)\n   *\n   * @param string $projectId Name of the project in which to look for HMAC keys.\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string maxResults Maximum number of items to return in a single\n   * page of responses. The service uses this parameter or 250 items, whichever is\n   * smaller. The max number of items per page will also be limited by the number\n   * of distinct service accounts in the response. If the number of service\n   * accounts in a single response is too high, the page will truncated and a next\n   * page token will be returned.\n   * @opt_param string pageToken A previously-returned page token representing\n   * part of the larger set of results to view.\n   * @opt_param string serviceAccountEmail If present, only keys for the given\n   * service account are returned.\n   * @opt_param bool showDeletedKeys Whether or not to show keys in the DELETED\n   * state.\n   * @opt_param string userProject The project to be billed for this request.\n   * @return HmacKeysMetadata\n   * @throws \\Google\\Service\\Exception\n   */\n  public function listProjectsHmacKeys($projectId, $optParams = [])\n  {\n    $params = ['projectId' => $projectId];\n    $params = array_merge($params, $optParams);\n    return $this->call('list', [$params], HmacKeysMetadata::class);\n  }\n  /**\n   * Updates the state of an HMAC key. See the [HMAC Key resource descriptor](http\n   * s://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys/update#reques\n   * t-body) for valid states. (hmacKeys.update)\n   *\n   * @param string $projectId Project ID owning the service account of the updated\n   * key.\n   * @param string $accessId Name of the HMAC key being updated.\n   * @param HmacKeyMetadata $postBody\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * @return HmacKeyMetadata\n   * @throws \\Google\\Service\\Exception\n   */\n  public function update($projectId, $accessId, HmacKeyMetadata $postBody, $optParams = [])\n  {\n    $params = ['projectId' => $projectId, 'accessId' => $accessId, 'postBody' => $postBody];\n    $params = array_merge($params, $optParams);\n    return $this->call('update', [$params], HmacKeyMetadata::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ProjectsHmacKeys::class, 'Google_Service_Storage_Resource_ProjectsHmacKeys');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/Resource/ProjectsServiceAccount.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage\\Resource;\n\nuse Google\\Service\\Storage\\ServiceAccount;\n\n/**\n * The \"serviceAccount\" collection of methods.\n * Typical usage is:\n *  <code>\n *   $storageService = new Google\\Service\\Storage(...);\n *   $serviceAccount = $storageService->projects_serviceAccount;\n *  </code>\n */\nclass ProjectsServiceAccount extends \\Google\\Service\\Resource\n{\n  /**\n   * Get the email address of this project's Google Cloud Storage service account.\n   * (serviceAccount.get)\n   *\n   * @param string $projectId Project ID\n   * @param array $optParams Optional parameters.\n   *\n   * @opt_param string userProject The project to be billed for this request.\n   * @return ServiceAccount\n   * @throws \\Google\\Service\\Exception\n   */\n  public function get($projectId, $optParams = [])\n  {\n    $params = ['projectId' => $projectId];\n    $params = array_merge($params, $optParams);\n    return $this->call('get', [$params], ServiceAccount::class);\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ProjectsServiceAccount::class, 'Google_Service_Storage_Resource_ProjectsServiceAccount');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/RewriteResponse.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass RewriteResponse extends \\Google\\Model\n{\n  /**\n   * true if the copy is finished; otherwise, false if the copy is in progress.\n   * This property is always present in the response.\n   *\n   * @var bool\n   */\n  public $done;\n  /**\n   * The kind of item this is.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The total size of the object being copied in bytes. This property is always\n   * present in the response.\n   *\n   * @var string\n   */\n  public $objectSize;\n  protected $resourceType = StorageObject::class;\n  protected $resourceDataType = '';\n  /**\n   * A token to use in subsequent requests to continue copying data. This token\n   * is present in the response only when there is more data to copy.\n   *\n   * @var string\n   */\n  public $rewriteToken;\n  /**\n   * The total bytes written so far, which can be used to provide a waiting user\n   * with a progress indicator. This property is always present in the response.\n   *\n   * @var string\n   */\n  public $totalBytesRewritten;\n\n  /**\n   * true if the copy is finished; otherwise, false if the copy is in progress.\n   * This property is always present in the response.\n   *\n   * @param bool $done\n   */\n  public function setDone($done)\n  {\n    $this->done = $done;\n  }\n  /**\n   * @return bool\n   */\n  public function getDone()\n  {\n    return $this->done;\n  }\n  /**\n   * The kind of item this is.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The total size of the object being copied in bytes. This property is always\n   * present in the response.\n   *\n   * @param string $objectSize\n   */\n  public function setObjectSize($objectSize)\n  {\n    $this->objectSize = $objectSize;\n  }\n  /**\n   * @return string\n   */\n  public function getObjectSize()\n  {\n    return $this->objectSize;\n  }\n  /**\n   * A resource containing the metadata for the copied-to object. This property\n   * is present in the response only when copying completes.\n   *\n   * @param StorageObject $resource\n   */\n  public function setResource(StorageObject $resource)\n  {\n    $this->resource = $resource;\n  }\n  /**\n   * @return StorageObject\n   */\n  public function getResource()\n  {\n    return $this->resource;\n  }\n  /**\n   * A token to use in subsequent requests to continue copying data. This token\n   * is present in the response only when there is more data to copy.\n   *\n   * @param string $rewriteToken\n   */\n  public function setRewriteToken($rewriteToken)\n  {\n    $this->rewriteToken = $rewriteToken;\n  }\n  /**\n   * @return string\n   */\n  public function getRewriteToken()\n  {\n    return $this->rewriteToken;\n  }\n  /**\n   * The total bytes written so far, which can be used to provide a waiting user\n   * with a progress indicator. This property is always present in the response.\n   *\n   * @param string $totalBytesRewritten\n   */\n  public function setTotalBytesRewritten($totalBytesRewritten)\n  {\n    $this->totalBytesRewritten = $totalBytesRewritten;\n  }\n  /**\n   * @return string\n   */\n  public function getTotalBytesRewritten()\n  {\n    return $this->totalBytesRewritten;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(RewriteResponse::class, 'Google_Service_Storage_RewriteResponse');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/ServiceAccount.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass ServiceAccount extends \\Google\\Model\n{\n  protected $internal_gapi_mappings = [\n        \"emailAddress\" => \"email_address\",\n  ];\n  /**\n   * The ID of the notification.\n   *\n   * @var string\n   */\n  public $emailAddress;\n  /**\n   * The kind of item this is. For notifications, this is always\n   * storage#notification.\n   *\n   * @var string\n   */\n  public $kind;\n\n  /**\n   * The ID of the notification.\n   *\n   * @param string $emailAddress\n   */\n  public function setEmailAddress($emailAddress)\n  {\n    $this->emailAddress = $emailAddress;\n  }\n  /**\n   * @return string\n   */\n  public function getEmailAddress()\n  {\n    return $this->emailAddress;\n  }\n  /**\n   * The kind of item this is. For notifications, this is always\n   * storage#notification.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(ServiceAccount::class, 'Google_Service_Storage_ServiceAccount');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/StorageObject.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass StorageObject extends \\Google\\Collection\n{\n  protected $collection_key = 'acl';\n  protected $aclType = ObjectAccessControl::class;\n  protected $aclDataType = 'array';\n  /**\n   * The name of the bucket containing this object.\n   *\n   * @var string\n   */\n  public $bucket;\n  /**\n   * Cache-Control directive for the object data. If omitted, and the object is\n   * accessible to all anonymous users, the default will be public, max-\n   * age=3600.\n   *\n   * @var string\n   */\n  public $cacheControl;\n  /**\n   * Number of underlying components that make up this object. Components are\n   * accumulated by compose operations.\n   *\n   * @var int\n   */\n  public $componentCount;\n  /**\n   * Content-Disposition of the object data.\n   *\n   * @var string\n   */\n  public $contentDisposition;\n  /**\n   * Content-Encoding of the object data.\n   *\n   * @var string\n   */\n  public $contentEncoding;\n  /**\n   * Content-Language of the object data.\n   *\n   * @var string\n   */\n  public $contentLanguage;\n  /**\n   * Content-Type of the object data. If an object is stored without a Content-\n   * Type, it is served as application/octet-stream.\n   *\n   * @var string\n   */\n  public $contentType;\n  protected $contextsType = StorageObjectContexts::class;\n  protected $contextsDataType = '';\n  /**\n   * CRC32c checksum, as described in RFC 4960, Appendix B; encoded using base64\n   * in big-endian byte order. For more information about using the CRC32c\n   * checksum, see [Data Validation and Change\n   * Detection](https://cloud.google.com/storage/docs/data-validation).\n   *\n   * @var string\n   */\n  public $crc32c;\n  /**\n   * A timestamp in RFC 3339 format specified by the user for an object.\n   *\n   * @var string\n   */\n  public $customTime;\n  protected $customerEncryptionType = StorageObjectCustomerEncryption::class;\n  protected $customerEncryptionDataType = '';\n  /**\n   * HTTP 1.1 Entity tag for the object.\n   *\n   * @var string\n   */\n  public $etag;\n  /**\n   * Whether an object is under event-based hold. Event-based hold is a way to\n   * retain objects until an event occurs, which is signified by the hold's\n   * release (i.e. this value is set to false). After being released (set to\n   * false), such objects will be subject to bucket-level retention (if any).\n   * One sample use case of this flag is for banks to hold loan documents for at\n   * least 3 years after loan is paid in full. Here, bucket-level retention is 3\n   * years and the event is the loan being paid in full. In this example, these\n   * objects will be held intact for any number of years until the event has\n   * occurred (event-based hold on the object is released) and then 3 more years\n   * after that. That means retention duration of the objects begins from the\n   * moment event-based hold transitioned from true to false.\n   *\n   * @var bool\n   */\n  public $eventBasedHold;\n  /**\n   * The content generation of this object. Used for object versioning.\n   *\n   * @var string\n   */\n  public $generation;\n  /**\n   * This is the time (in the future) when the soft-deleted object will no\n   * longer be restorable. It is equal to the soft delete time plus the current\n   * soft delete retention duration of the bucket.\n   *\n   * @var string\n   */\n  public $hardDeleteTime;\n  /**\n   * The ID of the object, including the bucket name, object name, and\n   * generation number.\n   *\n   * @var string\n   */\n  public $id;\n  /**\n   * The kind of item this is. For objects, this is always storage#object.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * Not currently supported. Specifying the parameter causes the request to\n   * fail with status code 400 - Bad Request.\n   *\n   * @var string\n   */\n  public $kmsKeyName;\n  /**\n   * MD5 hash of the data; encoded using base64. For more information about\n   * using the MD5 hash, see [Data Validation and Change\n   * Detection](https://cloud.google.com/storage/docs/data-validation).\n   *\n   * @var string\n   */\n  public $md5Hash;\n  /**\n   * Media download link.\n   *\n   * @var string\n   */\n  public $mediaLink;\n  /**\n   * User-provided metadata, in key/value pairs.\n   *\n   * @var string[]\n   */\n  public $metadata;\n  /**\n   * The version of the metadata for this object at this generation. Used for\n   * preconditions and for detecting changes in metadata. A metageneration\n   * number is only meaningful in the context of a particular generation of a\n   * particular object.\n   *\n   * @var string\n   */\n  public $metageneration;\n  /**\n   * The name of the object. Required if not specified by URL parameter.\n   *\n   * @var string\n   */\n  public $name;\n  protected $ownerType = StorageObjectOwner::class;\n  protected $ownerDataType = '';\n  /**\n   * Restore token used to differentiate deleted objects with the same name and\n   * generation. This field is only returned for deleted objects in hierarchical\n   * namespace buckets.\n   *\n   * @var string\n   */\n  public $restoreToken;\n  protected $retentionType = StorageObjectRetention::class;\n  protected $retentionDataType = '';\n  /**\n   * A server-determined value that specifies the earliest time that the\n   * object's retention period expires. This value is in RFC 3339 format. Note\n   * 1: This field is not provided for objects with an active event-based hold,\n   * since retention expiration is unknown until the hold is removed. Note 2:\n   * This value can be provided even when temporary hold is set (so that the\n   * user can reason about policy without having to first unset the temporary\n   * hold).\n   *\n   * @var string\n   */\n  public $retentionExpirationTime;\n  /**\n   * The link to this object.\n   *\n   * @var string\n   */\n  public $selfLink;\n  /**\n   * Content-Length of the data in bytes.\n   *\n   * @var string\n   */\n  public $size;\n  /**\n   * The time at which the object became soft-deleted in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $softDeleteTime;\n  /**\n   * Storage class of the object.\n   *\n   * @var string\n   */\n  public $storageClass;\n  /**\n   * Whether an object is under temporary hold. While this flag is set to true,\n   * the object is protected against deletion and overwrites. A common use case\n   * of this flag is regulatory investigations where objects need to be retained\n   * while the investigation is ongoing. Note that unlike event-based hold,\n   * temporary hold does not impact retention expiration time of an object.\n   *\n   * @var bool\n   */\n  public $temporaryHold;\n  /**\n   * The creation time of the object in RFC 3339 format.\n   *\n   * @var string\n   */\n  public $timeCreated;\n  /**\n   * The time at which the object became noncurrent in RFC 3339 format. Will be\n   * returned if and only if this version of the object has been deleted.\n   *\n   * @var string\n   */\n  public $timeDeleted;\n  /**\n   * The time when the object was finalized.\n   *\n   * @var string\n   */\n  public $timeFinalized;\n  /**\n   * The time at which the object's storage class was last changed. When the\n   * object is initially created, it will be set to timeCreated.\n   *\n   * @var string\n   */\n  public $timeStorageClassUpdated;\n  /**\n   * The modification time of the object metadata in RFC 3339 format. Set\n   * initially to object creation time and then updated whenever any metadata of\n   * the object changes. This includes changes made by a requester, such as\n   * modifying custom metadata, as well as changes made by Cloud Storage on\n   * behalf of a requester, such as changing the storage class based on an\n   * Object Lifecycle Configuration.\n   *\n   * @var string\n   */\n  public $updated;\n\n  /**\n   * Access controls on the object.\n   *\n   * @param ObjectAccessControl[] $acl\n   */\n  public function setAcl($acl)\n  {\n    $this->acl = $acl;\n  }\n  /**\n   * @return ObjectAccessControl[]\n   */\n  public function getAcl()\n  {\n    return $this->acl;\n  }\n  /**\n   * The name of the bucket containing this object.\n   *\n   * @param string $bucket\n   */\n  public function setBucket($bucket)\n  {\n    $this->bucket = $bucket;\n  }\n  /**\n   * @return string\n   */\n  public function getBucket()\n  {\n    return $this->bucket;\n  }\n  /**\n   * Cache-Control directive for the object data. If omitted, and the object is\n   * accessible to all anonymous users, the default will be public, max-\n   * age=3600.\n   *\n   * @param string $cacheControl\n   */\n  public function setCacheControl($cacheControl)\n  {\n    $this->cacheControl = $cacheControl;\n  }\n  /**\n   * @return string\n   */\n  public function getCacheControl()\n  {\n    return $this->cacheControl;\n  }\n  /**\n   * Number of underlying components that make up this object. Components are\n   * accumulated by compose operations.\n   *\n   * @param int $componentCount\n   */\n  public function setComponentCount($componentCount)\n  {\n    $this->componentCount = $componentCount;\n  }\n  /**\n   * @return int\n   */\n  public function getComponentCount()\n  {\n    return $this->componentCount;\n  }\n  /**\n   * Content-Disposition of the object data.\n   *\n   * @param string $contentDisposition\n   */\n  public function setContentDisposition($contentDisposition)\n  {\n    $this->contentDisposition = $contentDisposition;\n  }\n  /**\n   * @return string\n   */\n  public function getContentDisposition()\n  {\n    return $this->contentDisposition;\n  }\n  /**\n   * Content-Encoding of the object data.\n   *\n   * @param string $contentEncoding\n   */\n  public function setContentEncoding($contentEncoding)\n  {\n    $this->contentEncoding = $contentEncoding;\n  }\n  /**\n   * @return string\n   */\n  public function getContentEncoding()\n  {\n    return $this->contentEncoding;\n  }\n  /**\n   * Content-Language of the object data.\n   *\n   * @param string $contentLanguage\n   */\n  public function setContentLanguage($contentLanguage)\n  {\n    $this->contentLanguage = $contentLanguage;\n  }\n  /**\n   * @return string\n   */\n  public function getContentLanguage()\n  {\n    return $this->contentLanguage;\n  }\n  /**\n   * Content-Type of the object data. If an object is stored without a Content-\n   * Type, it is served as application/octet-stream.\n   *\n   * @param string $contentType\n   */\n  public function setContentType($contentType)\n  {\n    $this->contentType = $contentType;\n  }\n  /**\n   * @return string\n   */\n  public function getContentType()\n  {\n    return $this->contentType;\n  }\n  /**\n   * User-defined or system-defined object contexts. Each object context is a\n   * key-payload pair, where the key provides the identification and the payload\n   * holds the associated value and additional metadata.\n   *\n   * @param StorageObjectContexts $contexts\n   */\n  public function setContexts(StorageObjectContexts $contexts)\n  {\n    $this->contexts = $contexts;\n  }\n  /**\n   * @return StorageObjectContexts\n   */\n  public function getContexts()\n  {\n    return $this->contexts;\n  }\n  /**\n   * CRC32c checksum, as described in RFC 4960, Appendix B; encoded using base64\n   * in big-endian byte order. For more information about using the CRC32c\n   * checksum, see [Data Validation and Change\n   * Detection](https://cloud.google.com/storage/docs/data-validation).\n   *\n   * @param string $crc32c\n   */\n  public function setCrc32c($crc32c)\n  {\n    $this->crc32c = $crc32c;\n  }\n  /**\n   * @return string\n   */\n  public function getCrc32c()\n  {\n    return $this->crc32c;\n  }\n  /**\n   * A timestamp in RFC 3339 format specified by the user for an object.\n   *\n   * @param string $customTime\n   */\n  public function setCustomTime($customTime)\n  {\n    $this->customTime = $customTime;\n  }\n  /**\n   * @return string\n   */\n  public function getCustomTime()\n  {\n    return $this->customTime;\n  }\n  /**\n   * Metadata of customer-supplied encryption key, if the object is encrypted by\n   * such a key.\n   *\n   * @param StorageObjectCustomerEncryption $customerEncryption\n   */\n  public function setCustomerEncryption(StorageObjectCustomerEncryption $customerEncryption)\n  {\n    $this->customerEncryption = $customerEncryption;\n  }\n  /**\n   * @return StorageObjectCustomerEncryption\n   */\n  public function getCustomerEncryption()\n  {\n    return $this->customerEncryption;\n  }\n  /**\n   * HTTP 1.1 Entity tag for the object.\n   *\n   * @param string $etag\n   */\n  public function setEtag($etag)\n  {\n    $this->etag = $etag;\n  }\n  /**\n   * @return string\n   */\n  public function getEtag()\n  {\n    return $this->etag;\n  }\n  /**\n   * Whether an object is under event-based hold. Event-based hold is a way to\n   * retain objects until an event occurs, which is signified by the hold's\n   * release (i.e. this value is set to false). After being released (set to\n   * false), such objects will be subject to bucket-level retention (if any).\n   * One sample use case of this flag is for banks to hold loan documents for at\n   * least 3 years after loan is paid in full. Here, bucket-level retention is 3\n   * years and the event is the loan being paid in full. In this example, these\n   * objects will be held intact for any number of years until the event has\n   * occurred (event-based hold on the object is released) and then 3 more years\n   * after that. That means retention duration of the objects begins from the\n   * moment event-based hold transitioned from true to false.\n   *\n   * @param bool $eventBasedHold\n   */\n  public function setEventBasedHold($eventBasedHold)\n  {\n    $this->eventBasedHold = $eventBasedHold;\n  }\n  /**\n   * @return bool\n   */\n  public function getEventBasedHold()\n  {\n    return $this->eventBasedHold;\n  }\n  /**\n   * The content generation of this object. Used for object versioning.\n   *\n   * @param string $generation\n   */\n  public function setGeneration($generation)\n  {\n    $this->generation = $generation;\n  }\n  /**\n   * @return string\n   */\n  public function getGeneration()\n  {\n    return $this->generation;\n  }\n  /**\n   * This is the time (in the future) when the soft-deleted object will no\n   * longer be restorable. It is equal to the soft delete time plus the current\n   * soft delete retention duration of the bucket.\n   *\n   * @param string $hardDeleteTime\n   */\n  public function setHardDeleteTime($hardDeleteTime)\n  {\n    $this->hardDeleteTime = $hardDeleteTime;\n  }\n  /**\n   * @return string\n   */\n  public function getHardDeleteTime()\n  {\n    return $this->hardDeleteTime;\n  }\n  /**\n   * The ID of the object, including the bucket name, object name, and\n   * generation number.\n   *\n   * @param string $id\n   */\n  public function setId($id)\n  {\n    $this->id = $id;\n  }\n  /**\n   * @return string\n   */\n  public function getId()\n  {\n    return $this->id;\n  }\n  /**\n   * The kind of item this is. For objects, this is always storage#object.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * Not currently supported. Specifying the parameter causes the request to\n   * fail with status code 400 - Bad Request.\n   *\n   * @param string $kmsKeyName\n   */\n  public function setKmsKeyName($kmsKeyName)\n  {\n    $this->kmsKeyName = $kmsKeyName;\n  }\n  /**\n   * @return string\n   */\n  public function getKmsKeyName()\n  {\n    return $this->kmsKeyName;\n  }\n  /**\n   * MD5 hash of the data; encoded using base64. For more information about\n   * using the MD5 hash, see [Data Validation and Change\n   * Detection](https://cloud.google.com/storage/docs/data-validation).\n   *\n   * @param string $md5Hash\n   */\n  public function setMd5Hash($md5Hash)\n  {\n    $this->md5Hash = $md5Hash;\n  }\n  /**\n   * @return string\n   */\n  public function getMd5Hash()\n  {\n    return $this->md5Hash;\n  }\n  /**\n   * Media download link.\n   *\n   * @param string $mediaLink\n   */\n  public function setMediaLink($mediaLink)\n  {\n    $this->mediaLink = $mediaLink;\n  }\n  /**\n   * @return string\n   */\n  public function getMediaLink()\n  {\n    return $this->mediaLink;\n  }\n  /**\n   * User-provided metadata, in key/value pairs.\n   *\n   * @param string[] $metadata\n   */\n  public function setMetadata($metadata)\n  {\n    $this->metadata = $metadata;\n  }\n  /**\n   * @return string[]\n   */\n  public function getMetadata()\n  {\n    return $this->metadata;\n  }\n  /**\n   * The version of the metadata for this object at this generation. Used for\n   * preconditions and for detecting changes in metadata. A metageneration\n   * number is only meaningful in the context of a particular generation of a\n   * particular object.\n   *\n   * @param string $metageneration\n   */\n  public function setMetageneration($metageneration)\n  {\n    $this->metageneration = $metageneration;\n  }\n  /**\n   * @return string\n   */\n  public function getMetageneration()\n  {\n    return $this->metageneration;\n  }\n  /**\n   * The name of the object. Required if not specified by URL parameter.\n   *\n   * @param string $name\n   */\n  public function setName($name)\n  {\n    $this->name = $name;\n  }\n  /**\n   * @return string\n   */\n  public function getName()\n  {\n    return $this->name;\n  }\n  /**\n   * The owner of the object. This will always be the uploader of the object.\n   *\n   * @param StorageObjectOwner $owner\n   */\n  public function setOwner(StorageObjectOwner $owner)\n  {\n    $this->owner = $owner;\n  }\n  /**\n   * @return StorageObjectOwner\n   */\n  public function getOwner()\n  {\n    return $this->owner;\n  }\n  /**\n   * Restore token used to differentiate deleted objects with the same name and\n   * generation. This field is only returned for deleted objects in hierarchical\n   * namespace buckets.\n   *\n   * @param string $restoreToken\n   */\n  public function setRestoreToken($restoreToken)\n  {\n    $this->restoreToken = $restoreToken;\n  }\n  /**\n   * @return string\n   */\n  public function getRestoreToken()\n  {\n    return $this->restoreToken;\n  }\n  /**\n   * A collection of object level retention parameters.\n   *\n   * @param StorageObjectRetention $retention\n   */\n  public function setRetention(StorageObjectRetention $retention)\n  {\n    $this->retention = $retention;\n  }\n  /**\n   * @return StorageObjectRetention\n   */\n  public function getRetention()\n  {\n    return $this->retention;\n  }\n  /**\n   * A server-determined value that specifies the earliest time that the\n   * object's retention period expires. This value is in RFC 3339 format. Note\n   * 1: This field is not provided for objects with an active event-based hold,\n   * since retention expiration is unknown until the hold is removed. Note 2:\n   * This value can be provided even when temporary hold is set (so that the\n   * user can reason about policy without having to first unset the temporary\n   * hold).\n   *\n   * @param string $retentionExpirationTime\n   */\n  public function setRetentionExpirationTime($retentionExpirationTime)\n  {\n    $this->retentionExpirationTime = $retentionExpirationTime;\n  }\n  /**\n   * @return string\n   */\n  public function getRetentionExpirationTime()\n  {\n    return $this->retentionExpirationTime;\n  }\n  /**\n   * The link to this object.\n   *\n   * @param string $selfLink\n   */\n  public function setSelfLink($selfLink)\n  {\n    $this->selfLink = $selfLink;\n  }\n  /**\n   * @return string\n   */\n  public function getSelfLink()\n  {\n    return $this->selfLink;\n  }\n  /**\n   * Content-Length of the data in bytes.\n   *\n   * @param string $size\n   */\n  public function setSize($size)\n  {\n    $this->size = $size;\n  }\n  /**\n   * @return string\n   */\n  public function getSize()\n  {\n    return $this->size;\n  }\n  /**\n   * The time at which the object became soft-deleted in RFC 3339 format.\n   *\n   * @param string $softDeleteTime\n   */\n  public function setSoftDeleteTime($softDeleteTime)\n  {\n    $this->softDeleteTime = $softDeleteTime;\n  }\n  /**\n   * @return string\n   */\n  public function getSoftDeleteTime()\n  {\n    return $this->softDeleteTime;\n  }\n  /**\n   * Storage class of the object.\n   *\n   * @param string $storageClass\n   */\n  public function setStorageClass($storageClass)\n  {\n    $this->storageClass = $storageClass;\n  }\n  /**\n   * @return string\n   */\n  public function getStorageClass()\n  {\n    return $this->storageClass;\n  }\n  /**\n   * Whether an object is under temporary hold. While this flag is set to true,\n   * the object is protected against deletion and overwrites. A common use case\n   * of this flag is regulatory investigations where objects need to be retained\n   * while the investigation is ongoing. Note that unlike event-based hold,\n   * temporary hold does not impact retention expiration time of an object.\n   *\n   * @param bool $temporaryHold\n   */\n  public function setTemporaryHold($temporaryHold)\n  {\n    $this->temporaryHold = $temporaryHold;\n  }\n  /**\n   * @return bool\n   */\n  public function getTemporaryHold()\n  {\n    return $this->temporaryHold;\n  }\n  /**\n   * The creation time of the object in RFC 3339 format.\n   *\n   * @param string $timeCreated\n   */\n  public function setTimeCreated($timeCreated)\n  {\n    $this->timeCreated = $timeCreated;\n  }\n  /**\n   * @return string\n   */\n  public function getTimeCreated()\n  {\n    return $this->timeCreated;\n  }\n  /**\n   * The time at which the object became noncurrent in RFC 3339 format. Will be\n   * returned if and only if this version of the object has been deleted.\n   *\n   * @param string $timeDeleted\n   */\n  public function setTimeDeleted($timeDeleted)\n  {\n    $this->timeDeleted = $timeDeleted;\n  }\n  /**\n   * @return string\n   */\n  public function getTimeDeleted()\n  {\n    return $this->timeDeleted;\n  }\n  /**\n   * The time when the object was finalized.\n   *\n   * @param string $timeFinalized\n   */\n  public function setTimeFinalized($timeFinalized)\n  {\n    $this->timeFinalized = $timeFinalized;\n  }\n  /**\n   * @return string\n   */\n  public function getTimeFinalized()\n  {\n    return $this->timeFinalized;\n  }\n  /**\n   * The time at which the object's storage class was last changed. When the\n   * object is initially created, it will be set to timeCreated.\n   *\n   * @param string $timeStorageClassUpdated\n   */\n  public function setTimeStorageClassUpdated($timeStorageClassUpdated)\n  {\n    $this->timeStorageClassUpdated = $timeStorageClassUpdated;\n  }\n  /**\n   * @return string\n   */\n  public function getTimeStorageClassUpdated()\n  {\n    return $this->timeStorageClassUpdated;\n  }\n  /**\n   * The modification time of the object metadata in RFC 3339 format. Set\n   * initially to object creation time and then updated whenever any metadata of\n   * the object changes. This includes changes made by a requester, such as\n   * modifying custom metadata, as well as changes made by Cloud Storage on\n   * behalf of a requester, such as changing the storage class based on an\n   * Object Lifecycle Configuration.\n   *\n   * @param string $updated\n   */\n  public function setUpdated($updated)\n  {\n    $this->updated = $updated;\n  }\n  /**\n   * @return string\n   */\n  public function getUpdated()\n  {\n    return $this->updated;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(StorageObject::class, 'Google_Service_Storage_StorageObject');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/StorageObjectContexts.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass StorageObjectContexts extends \\Google\\Model\n{\n  protected $customType = ObjectCustomContextPayload::class;\n  protected $customDataType = 'map';\n\n  /**\n   * User-defined object contexts.\n   *\n   * @param ObjectCustomContextPayload[] $custom\n   */\n  public function setCustom($custom)\n  {\n    $this->custom = $custom;\n  }\n  /**\n   * @return ObjectCustomContextPayload[]\n   */\n  public function getCustom()\n  {\n    return $this->custom;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(StorageObjectContexts::class, 'Google_Service_Storage_StorageObjectContexts');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/StorageObjectCustomerEncryption.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass StorageObjectCustomerEncryption extends \\Google\\Model\n{\n  /**\n   * The encryption algorithm.\n   *\n   * @var string\n   */\n  public $encryptionAlgorithm;\n  /**\n   * SHA256 hash value of the encryption key.\n   *\n   * @var string\n   */\n  public $keySha256;\n\n  /**\n   * The encryption algorithm.\n   *\n   * @param string $encryptionAlgorithm\n   */\n  public function setEncryptionAlgorithm($encryptionAlgorithm)\n  {\n    $this->encryptionAlgorithm = $encryptionAlgorithm;\n  }\n  /**\n   * @return string\n   */\n  public function getEncryptionAlgorithm()\n  {\n    return $this->encryptionAlgorithm;\n  }\n  /**\n   * SHA256 hash value of the encryption key.\n   *\n   * @param string $keySha256\n   */\n  public function setKeySha256($keySha256)\n  {\n    $this->keySha256 = $keySha256;\n  }\n  /**\n   * @return string\n   */\n  public function getKeySha256()\n  {\n    return $this->keySha256;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(StorageObjectCustomerEncryption::class, 'Google_Service_Storage_StorageObjectCustomerEncryption');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/StorageObjectOwner.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass StorageObjectOwner extends \\Google\\Model\n{\n  /**\n   * The entity, in the form user-userId.\n   *\n   * @var string\n   */\n  public $entity;\n  /**\n   * The ID for the entity.\n   *\n   * @var string\n   */\n  public $entityId;\n\n  /**\n   * The entity, in the form user-userId.\n   *\n   * @param string $entity\n   */\n  public function setEntity($entity)\n  {\n    $this->entity = $entity;\n  }\n  /**\n   * @return string\n   */\n  public function getEntity()\n  {\n    return $this->entity;\n  }\n  /**\n   * The ID for the entity.\n   *\n   * @param string $entityId\n   */\n  public function setEntityId($entityId)\n  {\n    $this->entityId = $entityId;\n  }\n  /**\n   * @return string\n   */\n  public function getEntityId()\n  {\n    return $this->entityId;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(StorageObjectOwner::class, 'Google_Service_Storage_StorageObjectOwner');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/StorageObjectRetention.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass StorageObjectRetention extends \\Google\\Model\n{\n  /**\n   * The bucket's object retention mode, can only be Unlocked or Locked.\n   *\n   * @var string\n   */\n  public $mode;\n  /**\n   * A time in RFC 3339 format until which object retention protects this\n   * object.\n   *\n   * @var string\n   */\n  public $retainUntilTime;\n\n  /**\n   * The bucket's object retention mode, can only be Unlocked or Locked.\n   *\n   * @param string $mode\n   */\n  public function setMode($mode)\n  {\n    $this->mode = $mode;\n  }\n  /**\n   * @return string\n   */\n  public function getMode()\n  {\n    return $this->mode;\n  }\n  /**\n   * A time in RFC 3339 format until which object retention protects this\n   * object.\n   *\n   * @param string $retainUntilTime\n   */\n  public function setRetainUntilTime($retainUntilTime)\n  {\n    $this->retainUntilTime = $retainUntilTime;\n  }\n  /**\n   * @return string\n   */\n  public function getRetainUntilTime()\n  {\n    return $this->retainUntilTime;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(StorageObjectRetention::class, 'Google_Service_Storage_StorageObjectRetention');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage/TestIamPermissionsResponse.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service\\Storage;\n\nclass TestIamPermissionsResponse extends \\Google\\Collection\n{\n  protected $collection_key = 'permissions';\n  /**\n   * The kind of item this is.\n   *\n   * @var string\n   */\n  public $kind;\n  /**\n   * The permissions held by the caller. Permissions are always of the format\n   * storage.resource.capability, where resource is one of buckets, objects, or\n   * managedFolders. The supported permissions are as follows: -\n   * storage.buckets.delete - Delete bucket.   - storage.buckets.get - Read\n   * bucket metadata.   - storage.buckets.getIamPolicy - Read bucket IAM policy.\n   * - storage.buckets.create - Create bucket.   - storage.buckets.list - List\n   * buckets.   - storage.buckets.setIamPolicy - Update bucket IAM policy.   -\n   * storage.buckets.update - Update bucket metadata.   - storage.objects.delete\n   * - Delete object.   - storage.objects.get - Read object data and metadata.\n   * - storage.objects.getIamPolicy - Read object IAM policy.   -\n   * storage.objects.create - Create object.   - storage.objects.list - List\n   * objects.   - storage.objects.setIamPolicy - Update object IAM policy.   -\n   * storage.objects.update - Update object metadata.  -\n   * storage.managedFolders.delete - Delete managed folder.   -\n   * storage.managedFolders.get - Read managed folder metadata.   -\n   * storage.managedFolders.getIamPolicy - Read managed folder IAM policy.   -\n   * storage.managedFolders.create - Create managed folder.   -\n   * storage.managedFolders.list - List managed folders.   -\n   * storage.managedFolders.setIamPolicy - Update managed folder IAM policy.\n   *\n   * @var string[]\n   */\n  public $permissions;\n\n  /**\n   * The kind of item this is.\n   *\n   * @param string $kind\n   */\n  public function setKind($kind)\n  {\n    $this->kind = $kind;\n  }\n  /**\n   * @return string\n   */\n  public function getKind()\n  {\n    return $this->kind;\n  }\n  /**\n   * The permissions held by the caller. Permissions are always of the format\n   * storage.resource.capability, where resource is one of buckets, objects, or\n   * managedFolders. The supported permissions are as follows: -\n   * storage.buckets.delete - Delete bucket.   - storage.buckets.get - Read\n   * bucket metadata.   - storage.buckets.getIamPolicy - Read bucket IAM policy.\n   * - storage.buckets.create - Create bucket.   - storage.buckets.list - List\n   * buckets.   - storage.buckets.setIamPolicy - Update bucket IAM policy.   -\n   * storage.buckets.update - Update bucket metadata.   - storage.objects.delete\n   * - Delete object.   - storage.objects.get - Read object data and metadata.\n   * - storage.objects.getIamPolicy - Read object IAM policy.   -\n   * storage.objects.create - Create object.   - storage.objects.list - List\n   * objects.   - storage.objects.setIamPolicy - Update object IAM policy.   -\n   * storage.objects.update - Update object metadata.  -\n   * storage.managedFolders.delete - Delete managed folder.   -\n   * storage.managedFolders.get - Read managed folder metadata.   -\n   * storage.managedFolders.getIamPolicy - Read managed folder IAM policy.   -\n   * storage.managedFolders.create - Create managed folder.   -\n   * storage.managedFolders.list - List managed folders.   -\n   * storage.managedFolders.setIamPolicy - Update managed folder IAM policy.\n   *\n   * @param string[] $permissions\n   */\n  public function setPermissions($permissions)\n  {\n    $this->permissions = $permissions;\n  }\n  /**\n   * @return string[]\n   */\n  public function getPermissions()\n  {\n    return $this->permissions;\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(TestIamPermissionsResponse::class, 'Google_Service_Storage_TestIamPermissionsResponse');\n"
  },
  {
    "path": "lib/Google/vendor/google/apiclient-services/src/Storage.php",
    "content": "<?php\n/*\n * Copyright 2014 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nnamespace Google\\Service;\n\nuse Google\\Client;\n\n/**\n * Service definition for Storage (v1).\n *\n * <p>\n * Stores and retrieves potentially large, immutable data objects.</p>\n *\n * <p>\n * For more information about this service, see the API\n * <a href=\"https://developers.google.com/storage/docs/json_api/\" target=\"_blank\">Documentation</a>\n * </p>\n *\n * @author Google, Inc.\n */\nclass Storage extends \\Google\\Service\n{\n  /** View and manage your data across Google Cloud Platform services. */\n  const CLOUD_PLATFORM =\n      \"https://www.googleapis.com/auth/cloud-platform\";\n  /** View your data across Google Cloud Platform services. */\n  const CLOUD_PLATFORM_READ_ONLY =\n      \"https://www.googleapis.com/auth/cloud-platform.read-only\";\n  /** Manage your data and permissions in Google Cloud Storage. */\n  const DEVSTORAGE_FULL_CONTROL =\n      \"https://www.googleapis.com/auth/devstorage.full_control\";\n  /** View your data in Google Cloud Storage. */\n  const DEVSTORAGE_READ_ONLY =\n      \"https://www.googleapis.com/auth/devstorage.read_only\";\n  /** Manage your data in Google Cloud Storage. */\n  const DEVSTORAGE_READ_WRITE =\n      \"https://www.googleapis.com/auth/devstorage.read_write\";\n\n  public $anywhereCaches;\n  public $bucketAccessControls;\n  public $buckets;\n  public $channels;\n  public $defaultObjectAccessControls;\n  public $folders;\n  public $managedFolders;\n  public $notifications;\n  public $objectAccessControls;\n  public $objects;\n  public $operations;\n  public $projects_hmacKeys;\n  public $projects_serviceAccount;\n  public $rootUrlTemplate;\n\n  /**\n   * Constructs the internal representation of the Storage service.\n   *\n   * @param Client|array $clientOrConfig The client used to deliver requests, or a\n   *                                     config array to pass to a new Client instance.\n   * @param string $rootUrl The root URL used for requests to the service.\n   */\n  public function __construct($clientOrConfig = [], $rootUrl = null)\n  {\n    parent::__construct($clientOrConfig);\n    $this->rootUrl = $rootUrl ?: 'https://storage.googleapis.com/';\n    $this->rootUrlTemplate = $rootUrl ?: 'https://storage.UNIVERSE_DOMAIN/';\n    $this->servicePath = 'storage/v1/';\n    $this->batchPath = 'batch/storage/v1';\n    $this->version = 'v1';\n    $this->serviceName = 'storage';\n\n    $this->anywhereCaches = new Storage\\Resource\\AnywhereCaches(\n        $this,\n        $this->serviceName,\n        'anywhereCaches',\n        [\n          'methods' => [\n            'disable' => [\n              'path' => 'b/{bucket}/anywhereCaches/{anywhereCacheId}/disable',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'anywhereCacheId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/anywhereCaches/{anywhereCacheId}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'anywhereCacheId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/anywhereCaches',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/anywhereCaches',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'pageSize' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'pause' => [\n              'path' => 'b/{bucket}/anywhereCaches/{anywhereCacheId}/pause',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'anywhereCacheId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'resume' => [\n              'path' => 'b/{bucket}/anywhereCaches/{anywhereCacheId}/resume',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'anywhereCacheId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'update' => [\n              'path' => 'b/{bucket}/anywhereCaches/{anywhereCacheId}',\n              'httpMethod' => 'PATCH',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'anywhereCacheId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->bucketAccessControls = new Storage\\Resource\\BucketAccessControls(\n        $this,\n        $this->serviceName,\n        'bucketAccessControls',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}/acl/{entity}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/acl/{entity}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/acl',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/acl',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'patch' => [\n              'path' => 'b/{bucket}/acl/{entity}',\n              'httpMethod' => 'PATCH',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'update' => [\n              'path' => 'b/{bucket}/acl/{entity}',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->buckets = new Storage\\Resource\\Buckets(\n        $this,\n        $this->serviceName,\n        'buckets',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'softDeleted' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'getIamPolicy' => [\n              'path' => 'b/{bucket}/iam',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'optionsRequestedPolicyVersion' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'getStorageLayout' => [\n              'path' => 'b/{bucket}/storageLayout',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'prefix' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'project' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'enableObjectRetention' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'predefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'predefinedDefaultObjectAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'project' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'maxResults' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'prefix' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'returnPartialSuccess' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'softDeleted' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'lockRetentionPolicy' => [\n              'path' => 'b/{bucket}/lockRetentionPolicy',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'patch' => [\n              'path' => 'b/{bucket}',\n              'httpMethod' => 'PATCH',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'predefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'predefinedDefaultObjectAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'relocate' => [\n              'path' => 'b/{bucket}/relocate',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'restore' => [\n              'path' => 'b/{bucket}/restore',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'setIamPolicy' => [\n              'path' => 'b/{bucket}/iam',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'testIamPermissions' => [\n              'path' => 'b/{bucket}/iam/testPermissions',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'permissions' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'repeated' => true,\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'update' => [\n              'path' => 'b/{bucket}',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'predefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'predefinedDefaultObjectAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->channels = new Storage\\Resource\\Channels(\n        $this,\n        $this->serviceName,\n        'channels',\n        [\n          'methods' => [\n            'stop' => [\n              'path' => 'channels/stop',\n              'httpMethod' => 'POST',\n              'parameters' => [],\n            ],\n          ]\n        ]\n    );\n    $this->defaultObjectAccessControls = new Storage\\Resource\\DefaultObjectAccessControls(\n        $this,\n        $this->serviceName,\n        'defaultObjectAccessControls',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}/defaultObjectAcl/{entity}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/defaultObjectAcl/{entity}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/defaultObjectAcl',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/defaultObjectAcl',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'patch' => [\n              'path' => 'b/{bucket}/defaultObjectAcl/{entity}',\n              'httpMethod' => 'PATCH',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'update' => [\n              'path' => 'b/{bucket}/defaultObjectAcl/{entity}',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->folders = new Storage\\Resource\\Folders(\n        $this,\n        $this->serviceName,\n        'folders',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}/folders/{folder}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'folder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/folders/{folder}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'folder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/folders',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'recursive' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/folders',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'delimiter' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'endOffset' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'pageSize' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'prefix' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'startOffset' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'rename' => [\n              'path' => 'b/{bucket}/folders/{sourceFolder}/renameTo/folders/{destinationFolder}',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'sourceFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifSourceMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->managedFolders = new Storage\\Resource\\ManagedFolders(\n        $this,\n        $this->serviceName,\n        'managedFolders',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}/managedFolders/{managedFolder}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'managedFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'allowNonEmpty' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/managedFolders/{managedFolder}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'managedFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'getIamPolicy' => [\n              'path' => 'b/{bucket}/managedFolders/{managedFolder}/iam',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'managedFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'optionsRequestedPolicyVersion' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/managedFolders',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/managedFolders',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'pageSize' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'prefix' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'setIamPolicy' => [\n              'path' => 'b/{bucket}/managedFolders/{managedFolder}/iam',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'managedFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'testIamPermissions' => [\n              'path' => 'b/{bucket}/managedFolders/{managedFolder}/iam/testPermissions',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'managedFolder' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'permissions' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'repeated' => true,\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->notifications = new Storage\\Resource\\Notifications(\n        $this,\n        $this->serviceName,\n        'notifications',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}/notificationConfigs/{notification}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'notification' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/notificationConfigs/{notification}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'notification' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/notificationConfigs',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/notificationConfigs',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->objectAccessControls = new Storage\\Resource\\ObjectAccessControls(\n        $this,\n        $this->serviceName,\n        'objectAccessControls',\n        [\n          'methods' => [\n            'delete' => [\n              'path' => 'b/{bucket}/o/{object}/acl/{entity}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/o/{object}/acl/{entity}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/o/{object}/acl',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/o/{object}/acl',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'patch' => [\n              'path' => 'b/{bucket}/o/{object}/acl/{entity}',\n              'httpMethod' => 'PATCH',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'update' => [\n              'path' => 'b/{bucket}/o/{object}/acl/{entity}',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'entity' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->objects = new Storage\\Resource\\Objects(\n        $this,\n        $this->serviceName,\n        'objects',\n        [\n          'methods' => [\n            'bulkRestore' => [\n              'path' => 'b/{bucket}/o/bulkRestore',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'compose' => [\n              'path' => 'b/{destinationBucket}/o/{destinationObject}/compose',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'destinationBucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationPredefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'kmsKeyName' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'copy' => [\n              'path' => 'b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'sourceBucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'sourceObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationBucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationKmsKeyName' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'destinationPredefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'sourceGeneration' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'delete' => [\n              'path' => 'b/{bucket}/o/{object}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/o/{object}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'restoreToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'softDeleted' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'getIamPolicy' => [\n              'path' => 'b/{bucket}/o/{object}/iam',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'insert' => [\n              'path' => 'b/{bucket}/o',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'contentEncoding' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'kmsKeyName' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'name' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'predefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/o',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'delimiter' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'endOffset' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'filter' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'includeFoldersAsPrefixes' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'includeTrailingDelimiter' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'matchGlob' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'maxResults' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'prefix' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'softDeleted' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'startOffset' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'versions' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n              ],\n            ],'move' => [\n              'path' => 'b/{bucket}/o/{sourceObject}/moveTo/o/{destinationObject}',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'sourceObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'patch' => [\n              'path' => 'b/{bucket}/o/{object}',\n              'httpMethod' => 'PATCH',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'overrideUnlockedRetention' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'predefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'restore' => [\n              'path' => 'b/{bucket}/o/{object}/restore',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'copySourceAcl' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'restoreToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'rewrite' => [\n              'path' => 'b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'sourceBucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'sourceObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationBucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationObject' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'destinationKmsKeyName' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'destinationPredefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifSourceMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'maxBytesRewrittenPerCall' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'rewriteToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'sourceGeneration' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'setIamPolicy' => [\n              'path' => 'b/{bucket}/o/{object}/iam',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'testIamPermissions' => [\n              'path' => 'b/{bucket}/o/{object}/iam/testPermissions',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'permissions' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'repeated' => true,\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'update' => [\n              'path' => 'b/{bucket}/o/{object}',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'object' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'generation' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifGenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'ifMetagenerationNotMatch' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'overrideUnlockedRetention' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'predefinedAcl' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'watchAll' => [\n              'path' => 'b/{bucket}/o/watch',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'delimiter' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'endOffset' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'includeTrailingDelimiter' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'maxResults' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'prefix' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'projection' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'startOffset' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'versions' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->operations = new Storage\\Resource\\Operations(\n        $this,\n        $this->serviceName,\n        'operations',\n        [\n          'methods' => [\n            'advanceRelocateBucket' => [\n              'path' => 'b/{bucket}/operations/{operationId}/advanceRelocateBucket',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'operationId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'cancel' => [\n              'path' => 'b/{bucket}/operations/{operationId}/cancel',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'operationId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'get' => [\n              'path' => 'b/{bucket}/operations/{operationId}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'operationId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n              ],\n            ],'list' => [\n              'path' => 'b/{bucket}/operations',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'bucket' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'filter' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'pageSize' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->projects_hmacKeys = new Storage\\Resource\\ProjectsHmacKeys(\n        $this,\n        $this->serviceName,\n        'hmacKeys',\n        [\n          'methods' => [\n            'create' => [\n              'path' => 'projects/{projectId}/hmacKeys',\n              'httpMethod' => 'POST',\n              'parameters' => [\n                'projectId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'serviceAccountEmail' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'delete' => [\n              'path' => 'projects/{projectId}/hmacKeys/{accessId}',\n              'httpMethod' => 'DELETE',\n              'parameters' => [\n                'projectId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'accessId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'get' => [\n              'path' => 'projects/{projectId}/hmacKeys/{accessId}',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'projectId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'accessId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'list' => [\n              'path' => 'projects/{projectId}/hmacKeys',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'projectId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'maxResults' => [\n                  'location' => 'query',\n                  'type' => 'integer',\n                ],\n                'pageToken' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'serviceAccountEmail' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n                'showDeletedKeys' => [\n                  'location' => 'query',\n                  'type' => 'boolean',\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],'update' => [\n              'path' => 'projects/{projectId}/hmacKeys/{accessId}',\n              'httpMethod' => 'PUT',\n              'parameters' => [\n                'projectId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'accessId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n    $this->projects_serviceAccount = new Storage\\Resource\\ProjectsServiceAccount(\n        $this,\n        $this->serviceName,\n        'serviceAccount',\n        [\n          'methods' => [\n            'get' => [\n              'path' => 'projects/{projectId}/serviceAccount',\n              'httpMethod' => 'GET',\n              'parameters' => [\n                'projectId' => [\n                  'location' => 'path',\n                  'type' => 'string',\n                  'required' => true,\n                ],\n                'userProject' => [\n                  'location' => 'query',\n                  'type' => 'string',\n                ],\n              ],\n            ],\n          ]\n        ]\n    );\n  }\n}\n\n// Adding a class alias for backwards compatibility with the previous class name.\nclass_alias(Storage::class, 'Google_Service_Storage');\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/.repo-metadata.json",
    "content": "{\n    \"language\": \"php\",\n    \"distribution_name\": \"google/auth\",\n    \"release_level\": \"stable\",\n    \"client_documentation\": \"https://cloud.google.com/php/docs/reference/auth/latest\",\n    \"library_type\": \"CORE\"\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/COPYING",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2015 Google Inc.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction,\nand distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by\nthe copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all\nother entities that control, are controlled by, or are under common\ncontrol with that entity. For the purposes of this definition,\n\"control\" means (i) the power, direct or indirect, to cause the\ndirection or management of such entity, whether by contract or\notherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity\nexercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications,\nincluding but not limited to software source code, documentation\nsource, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical\ntransformation or translation of a Source form, including but\nnot limited to compiled object code, generated documentation,\nand conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or\nObject form, made available under the License, as indicated by a\ncopyright notice that is included in or attached to the work\n(an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object\nform, that is based on (or derived from) the Work and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship. For the purposes\nof this License, Derivative Works shall not include works that remain\nseparable from, or merely link (or bind by name) to the interfaces of,\nthe Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including\nthe original version of the Work and any modifications or additions\nto that Work or Derivative Works thereof, that is intentionally\nsubmitted to Licensor for inclusion in the Work by the copyright owner\nor by an individual or Legal Entity authorized to submit on behalf of\nthe copyright owner. For the purposes of this definition, \"submitted\"\nmeans any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems,\nand issue tracking systems that are managed by, or on behalf of, the\nLicensor for the purpose of discussing and improving the Work, but\nexcluding communication that is conspicuously marked or otherwise\ndesignated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity\non behalf of whom a Contribution has been received by Licensor and\nsubsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\ncopyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the\nWork and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\n(except as stated in this section) patent license to make, have made,\nuse, offer to sell, sell, import, and otherwise transfer the Work,\nwhere such license applies only to those patent claims licensable\nby such Contributor that are necessarily infringed by their\nContribution(s) alone or by combination of their Contribution(s)\nwith the Work to which such Contribution(s) was submitted. If You\ninstitute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work\nor a Contribution incorporated within the Work constitutes direct\nor contributory patent infringement, then any patent licenses\ngranted to You under this License for that Work shall terminate\nas of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\nWork or Derivative Works thereof in any medium, with or without\nmodifications, and in Source or Object form, provided that You\nmeet the following conditions:\n\n(a) You must give any other recipients of the Work or\nDerivative Works a copy of this License; and\n\n(b) You must cause any modified files to carry prominent notices\nstating that You changed the files; and\n\n(c) You must retain, in the Source form of any Derivative Works\nthat You distribute, all copyright, patent, trademark, and\nattribution notices from the Source form of the Work,\nexcluding those notices that do not pertain to any part of\nthe Derivative Works; and\n\n(d) If the Work includes a \"NOTICE\" text file as part of its\ndistribution, then any Derivative Works that You distribute must\ninclude a readable copy of the attribution notices contained\nwithin such NOTICE file, excluding those notices that do not\npertain to any part of the Derivative Works, in at least one\nof the following places: within a NOTICE text file distributed\nas part of the Derivative Works; within the Source form or\ndocumentation, if provided along with the Derivative Works; or,\nwithin a display generated by the Derivative Works, if and\nwherever such third-party notices normally appear. The contents\nof the NOTICE file are for informational purposes only and\ndo not modify the License. You may add Your own attribution\nnotices within Derivative Works that You distribute, alongside\nor as an addendum to the NOTICE text from the Work, provided\nthat such additional attribution notices cannot be construed\nas modifying the License.\n\nYou may add Your own copyright statement to Your modifications and\nmay provide additional or different license terms and conditions\nfor use, reproduction, or distribution of Your modifications, or\nfor any such Derivative Works as a whole, provided Your use,\nreproduction, and distribution of the Work otherwise complies with\nthe conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\nany Contribution intentionally submitted for inclusion in the Work\nby You to the Licensor shall be under the terms and conditions of\nthis License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify\nthe terms of any separate license agreement you may have executed\nwith Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\nnames, trademarks, service marks, or product names of the Licensor,\nexcept as required for reasonable and customary use in describing the\norigin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\nagreed to in writing, Licensor provides the Work (and each\nContributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied, including, without limitation, any warranties or conditions\nof TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\nPARTICULAR PURPOSE. You are solely responsible for determining the\nappropriateness of using or redistributing the Work and assume any\nrisks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\nwhether in tort (including negligence), contract, or otherwise,\nunless required by applicable law (such as deliberate and grossly\nnegligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special,\nincidental, or consequential damages of any character arising as a\nresult of this License or out of the use or inability to use the\nWork (including but not limited to damages for loss of goodwill,\nwork stoppage, computer failure or malfunction, or any and all\nother commercial damages or losses), even if such Contributor\nhas been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\nthe Work or Derivative Works thereof, You may choose to offer,\nand charge a fee for, acceptance of support, warranty, indemnity,\nor other liability obligations and/or rights consistent with this\nLicense. However, in accepting such obligations, You may act only\non Your own behalf and on Your sole responsibility, not on behalf\nof any other Contributor, and only if You agree to indemnify,\ndefend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason\nof your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\nTo apply the Apache License to your work, attach the following\nboilerplate notice, with the fields enclosed by brackets \"[]\"\nreplaced with your own identifying information. (Don't include\nthe brackets!) The text should be enclosed in the appropriate\ncomment syntax for the file format. We also recommend that a\nfile or class name and description of purpose be included on the\nsame \"printed page\" as the copyright notice for easier\nidentification within third-party archives.\n\nCopyright [yyyy] [name of copyright owner]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/README.md",
    "content": "# Google Auth Library for PHP\n\n<a href=\"https://cloud.google.com/php/docs/reference/auth/latest\">Reference Docs</a>\n\n## Description\n\nThis is Google's officially supported PHP client library for using OAuth 2.0\nauthorization and authentication with Google APIs.\n\n### Installing via Composer\n\nThe recommended way to install the google auth library is through\n[Composer](http://getcomposer.org).\n\n```bash\n# Install Composer\ncurl -sS https://getcomposer.org/installer | php\n```\n\nNext, run the Composer command to install the latest stable version:\n\n```bash\ncomposer.phar require google/auth\n```\n\n## Application Default Credentials\n\nThis library provides an implementation of\n[Application Default Credentials (ADC)][application default credentials] for PHP.\n\nApplication Default Credentials provides a simple way to get authorization\ncredentials for use in calling Google APIs, and is\nthe recommended approach to authorize calls to Cloud APIs.\n\n**Important**: If you accept a credential configuration (credential JSON/File/Stream) from an\nexternal source for authentication to Google Cloud Platform, you must validate it before providing\nit to any Google API or library. Providing an unvalidated credential configuration to Google APIs\ncan compromise the security of your systems and data. For more information, refer to\n[Validate credential configurations from external sources][externally-sourced-credentials].\n\n[externally-sourced-credentials]: https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n\n### Set up ADC\n\nTo use ADC, you must set it up by providing credentials.\nHow you set up ADC depends on the environment where your code is running,\nand whether you are running code in a test or production environment.\n\nFor more information, see [Set up Application Default Credentials][set-up-adc].\n\n### Enable the API you want to use\n\nBefore making your API call, you must be sure the API you're calling has been\nenabled. Go to **APIs & Auth** > **APIs** in the\n[Google Developers Console][developer console] and enable the APIs you'd like to\ncall. For the example below, you must enable the `Drive API`.\n\n### Call the APIs\n\nAs long as you update the environment variable below to point to *your* JSON\ncredentials file, the following code should output a list of your Drive files.\n\n```php\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\HandlerStack;\n\n// specify the path to your application credentials\nputenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json');\n\n// define the scopes for your API call\n$scopes = ['https://www.googleapis.com/auth/drive.readonly'];\n\n// create middleware\n$middleware = ApplicationDefaultCredentials::getMiddleware($scopes);\n$stack = HandlerStack::create();\n$stack->push($middleware);\n\n// create the HTTP client\n$client = new Client([\n  'handler' => $stack,\n  'base_uri' => 'https://www.googleapis.com',\n  'auth' => 'google_auth'  // authorize all requests\n]);\n\n// make the request\n$response = $client->get('drive/v2/files');\n\n// show the result!\nprint_r((string) $response->getBody());\n```\n\n##### Guzzle 5 Compatibility\n\nIf you are using [Guzzle 5][Guzzle 5], replace the `create middleware` and\n`create the HTTP Client` steps with the following:\n\n```php\n// create the HTTP client\n$client = new Client([\n  'base_url' => 'https://www.googleapis.com',\n  'auth' => 'google_auth'  // authorize all requests\n]);\n\n// create subscriber\n$subscriber = ApplicationDefaultCredentials::getSubscriber($scopes);\n$client->getEmitter()->attach($subscriber);\n```\n\n#### Call using an ID Token\nIf your application is running behind Cloud Run, or using Cloud Identity-Aware\nProxy (IAP), you will need to fetch an ID token to access your application. For\nthis, use the static method `getIdTokenMiddleware` on\n`ApplicationDefaultCredentials`.\n\n```php\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\HandlerStack;\n\n// specify the path to your application credentials\nputenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json');\n\n// Provide the ID token audience. This can be a Client ID associated with an IAP application,\n// Or the URL associated with a CloudRun App\n//    $targetAudience = 'IAP_CLIENT_ID.apps.googleusercontent.com';\n//    $targetAudience = 'https://service-1234-uc.a.run.app';\n$targetAudience = 'YOUR_ID_TOKEN_AUDIENCE';\n\n// create middleware\n$middleware = ApplicationDefaultCredentials::getIdTokenMiddleware($targetAudience);\n$stack = HandlerStack::create();\n$stack->push($middleware);\n\n// create the HTTP client\n$client = new Client([\n  'handler' => $stack,\n  'auth' => 'google_auth',\n  // Cloud Run, IAP, or custom resource URL\n  'base_uri' => 'https://YOUR_PROTECTED_RESOURCE',\n]);\n\n// make the request\n$response = $client->get('/');\n\n// show the result!\nprint_r((string) $response->getBody());\n```\n\nFor invoking Cloud Run services, your service account will need the\n[`Cloud Run Invoker`](https://cloud.google.com/run/docs/authenticating/service-to-service)\nIAM permission.\n\nFor invoking Cloud Identity-Aware Proxy, you will need to pass the Client ID\nused when you set up your protected resource as the target audience. See how to\n[secure your IAP app with signed headers](https://cloud.google.com/iap/docs/signed-headers-howto).\n\n#### Call using a specific JSON key\nIf you want to use a specific JSON key instead of using `GOOGLE_APPLICATION_CREDENTIALS` environment variable, you can\n do this:\n\n```php\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\Middleware\\AuthTokenMiddleware;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\HandlerStack;\n\n// Define the Google Application Credentials array\n$jsonKey = ['key' => 'value'];\n\n// define the scopes for your API call\n$scopes = ['https://www.googleapis.com/auth/drive.readonly'];\n\n// Load credentials from JSON containing service account credentials.\n$creds = new ServiceAccountCredentials($scopes, $jsonKey),\n\n// For other credentials types, create those classes explicitly using the\n// \"type\" field in the JSON key, for example:\n$creds = match ($jsonKey['type']) {\n    'service_account' => new ServiceAccountCredentials($scope, $jsonKey),\n    'authorized_user' => new UserRefreshCredentials($scope, $jsonKey),\n    default => throw new InvalidArgumentException('This application only supports service account and user account credentials'),\n};\n\n// optional caching\n$creds = new FetchAuthTokenCache($creds, $cacheConfig, $cache);\n\n// create middleware\n$middleware = new AuthTokenMiddleware($creds);\n$stack = HandlerStack::create();\n$stack->push($middleware);\n\n// create the HTTP client\n$client = new Client([\n  'handler' => $stack,\n  'base_uri' => 'https://www.googleapis.com',\n  'auth' => 'google_auth'  // authorize all requests\n]);\n\n// make the request\n$response = $client->get('drive/v2/files');\n\n// show the result!\nprint_r((string) $response->getBody());\n\n```\n\n#### Call using Proxy-Authorization Header\nIf your application is behind a proxy such as [Google Cloud IAP][iap-proxy-header],\nand your application occupies the `Authorization` request header,\nyou can include the ID token in a `Proxy-Authorization: Bearer`\nheader instead. If a valid ID token is found in a `Proxy-Authorization` header,\nIAP authorizes the request with it. After authorizing the request, IAP passes\nthe Authorization header to your application without processing the content.\nFor this, use the static method `getProxyIdTokenMiddleware` on\n`ApplicationDefaultCredentials`.\n\n```php\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\HandlerStack;\n\n// specify the path to your application credentials\nputenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json');\n\n// Provide the ID token audience. This can be a Client ID associated with an IAP application\n//    $targetAudience = 'IAP_CLIENT_ID.apps.googleusercontent.com';\n$targetAudience = 'YOUR_ID_TOKEN_AUDIENCE';\n\n// create middleware\n$middleware = ApplicationDefaultCredentials::getProxyIdTokenMiddleware($targetAudience);\n$stack = HandlerStack::create();\n$stack->push($middleware);\n\n// create the HTTP client\n$client = new Client([\n  'handler' => $stack,\n  'auth' => ['username', 'pass'], // auth option handled by your application\n  'proxy_auth' => 'google_auth',\n]);\n\n// make the request\n$response = $client->get('/');\n\n// show the result!\nprint_r((string) $response->getBody());\n```\n\n[iap-proxy-header]: https://cloud.google.com/iap/docs/authentication-howto#authenticating_from_proxy-authorization_header\n\n#### External credentials (Workload identity federation)\n\nUsing workload identity federation, your application can access Google Cloud resources from Amazon Web Services (AWS),\nMicrosoft Azure or any identity provider that supports OpenID Connect (OIDC).\n\nTraditionally, applications running outside Google Cloud have used service account keys to access Google Cloud\nresources. Using identity federation, you can allow your workload to impersonate a service account. This lets you access\nGoogle Cloud resources directly, eliminating the maintenance and security burden associated with service account keys.\n\nFollow the detailed instructions on how to\n[Configure Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation-with-other-clouds).\n\n#### Verifying JWTs\n\nIf you are [using Google ID tokens to authenticate users][google-id-tokens], use\nthe `Google\\Auth\\AccessToken` class to verify the ID token:\n\n```php\nuse Google\\Auth\\AccessToken;\n\n$auth = new AccessToken();\n$auth->verify($idToken);\n```\n\nIf your app is running behind [Google Identity-Aware Proxy][iap-id-tokens]\n(IAP), you can verify the ID token coming from the IAP server by pointing to the\nappropriate certificate URL for IAP. This is because IAP signs the ID\ntokens with a different key than the Google Identity service:\n\n```php\nuse Google\\Auth\\AccessToken;\n\n$auth = new AccessToken();\n$auth->verify($idToken, [\n  'certsLocation' => AccessToken::IAP_CERT_URL\n]);\n```\n\n[google-id-tokens]: https://developers.google.com/identity/sign-in/web/backend-auth\n[iap-id-tokens]: https://cloud.google.com/iap/docs/signed-headers-howto\n\n## Caching\nCaching is enabled by passing a PSR-6 `CacheItemPoolInterface`\ninstance to the constructor when instantiating the credentials.\n\nWe offer some caching classes out of the box under the `Google\\Auth\\Cache` namespace.\n\n```php\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Google\\Auth\\Cache\\MemoryCacheItemPool;\n\n// Cache Instance\n$memoryCache = new MemoryCacheItemPool;\n\n// Get the credentials\n// From here, the credentials will cache the access token\n$middleware = ApplicationDefaultCredentials::getCredentials($scope, cache: $memoryCache);\n```\n\n### FileSystemCacheItemPool Cache\nThe `FileSystemCacheItemPool` class is a `PSR-6` compliant cache that stores its\nserialized objects on disk, caching data between processes and making it possible\nto use data between different requests.\n\n```php\nuse Google\\Auth\\Cache\\FileSystemCacheItemPool;\nuse Google\\Auth\\ApplicationDefaultCredentials;\n\n// Create a Cache pool instance\n$cache = new FileSystemCacheItemPool(__DIR__ . '/cache');\n\n// Pass your Cache to the Auth Library\n$credentials = ApplicationDefaultCredentials::getCredentials($scope, cache: $cache);\n\n// This token will be cached and be able to be used for the next request\n$token = $credentials->fetchAuthToken();\n```\n\n### Integrating with a third party cache\nYou can use a third party that follows the `PSR-6` interface of your choice.\n\n```php\n// run \"composer require symfony/cache\"\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter;\n\n// Create the cache instance\n$filesystemCache = new FilesystemAdapter();\n\n// Create Get the credentials\n$credentials = ApplicationDefaultCredentials::getCredentials($targetAudience, cache: $filesystemCache);\n```\n\n## License\n\nThis library is licensed under Apache 2.0. Full license text is\navailable in [COPYING][copying].\n\n## Contributing\n\nSee [CONTRIBUTING][contributing].\n\n## Support\n\nPlease\n[report bugs at the project on Github](https://github.com/google/google-auth-library-php/issues). Don't\nhesitate to\n[ask questions](http://stackoverflow.com/questions/tagged/google-auth-library-php)\nabout the client or APIs on [StackOverflow](http://stackoverflow.com).\n\n[google-apis-php-client]: https://github.com/google/google-api-php-client\n[application default credentials]: https://cloud.google.com/docs/authentication/application-default-credentials\n[contributing]: https://github.com/google/google-auth-library-php/tree/main/.github/CONTRIBUTING.md\n[copying]: https://github.com/google/google-auth-library-php/tree/main/COPYING\n[Guzzle]: https://github.com/guzzle/guzzle\n[Guzzle 5]: http://docs.guzzlephp.org/en/5.3\n[developer console]: https://console.developers.google.com\n[set-up-adc]: https://cloud.google.com/docs/authentication/provide-credentials-adc\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/VERSION",
    "content": "1.50.0\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/composer.json",
    "content": "{\n  \"name\": \"google/auth\",\n  \"type\": \"library\",\n  \"description\": \"Google Auth Library for PHP\",\n  \"keywords\": [\"google\", \"oauth2\", \"authentication\"],\n  \"homepage\": \"https://github.com/google/google-auth-library-php\",\n  \"license\": \"Apache-2.0\",\n  \"support\": {\n    \"docs\": \"https://cloud.google.com/php/docs/reference/auth/latest\"\n  },\n  \"require\": {\n    \"php\": \"^8.1\",\n    \"firebase/php-jwt\": \"^6.0||^7.0\",\n    \"guzzlehttp/guzzle\": \"^7.4.5\",\n    \"guzzlehttp/psr7\": \"^2.4.5\",\n    \"psr/http-message\": \"^1.1||^2.0\",\n    \"psr/cache\": \"^2.0||^3.0\",\n    \"psr/log\": \"^3.0\"\n  },\n  \"require-dev\": {\n    \"guzzlehttp/promises\": \"^2.0\",\n    \"squizlabs/php_codesniffer\": \"^4.0\",\n    \"phpunit/phpunit\": \"^9.6\",\n    \"phpspec/prophecy-phpunit\": \"^2.1\",\n    \"sebastian/comparator\": \">=1.2.3\",\n    \"phpseclib/phpseclib\": \"^3.0.35\",\n    \"kelvinmo/simplejwt\": \"^1.1.0\",\n    \"webmozart/assert\": \"^1.11||^2.0\",\n    \"symfony/process\": \"^6.0||^7.0\",\n    \"symfony/filesystem\": \"^6.3||^7.3\"\n  },\n  \"suggest\": {\n    \"phpseclib/phpseclib\": \"May be used in place of OpenSSL for signing strings or for token management. Please require version ^2.\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"Google\\\\Auth\\\\\": \"src\"\n    }\n  },\n  \"autoload-dev\": {\n    \"psr-4\": {\n      \"Google\\\\Auth\\\\Tests\\\\\": \"tests\"\n    }\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/AccessToken.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse DateTime;\nuse Firebase\\JWT\\ExpiredException;\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\nuse Firebase\\JWT\\SignatureInvalidException;\nuse Google\\Auth\\Cache\\MemoryCacheItemPool;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Utils;\nuse InvalidArgumentException;\nuse phpseclib3\\Crypt\\PublicKeyLoader;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Math\\BigInteger;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse RuntimeException;\nuse SimpleJWT\\InvalidTokenException;\nuse SimpleJWT\\JWT as SimpleJWT;\nuse SimpleJWT\\Keys\\KeyFactory;\nuse SimpleJWT\\Keys\\KeySet;\nuse TypeError;\nuse UnexpectedValueException;\n\n/**\n * Wrapper around Google Access Tokens which provides convenience functions.\n *\n * @experimental\n */\nclass AccessToken\n{\n    const FEDERATED_SIGNON_CERT_URL = 'https://www.googleapis.com/oauth2/v3/certs';\n    const IAP_CERT_URL = 'https://www.gstatic.com/iap/verify/public_key-jwk';\n    const IAP_ISSUER = 'https://cloud.google.com/iap';\n    const OAUTH2_ISSUER = 'accounts.google.com';\n    const OAUTH2_ISSUER_HTTPS = 'https://accounts.google.com';\n    const OAUTH2_REVOKE_URI = 'https://oauth2.googleapis.com/revoke';\n\n    /**\n     * @var callable\n     */\n    private $httpHandler;\n\n    /**\n     * @var CacheItemPoolInterface\n     */\n    private $cache;\n\n    /**\n     * @param callable|null $httpHandler [optional] An HTTP Handler to deliver PSR-7 requests.\n     * @param CacheItemPoolInterface|null $cache [optional] A PSR-6 compatible cache implementation.\n     */\n    public function __construct(\n        ?callable $httpHandler = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $this->httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        $this->cache = $cache ?: new MemoryCacheItemPool();\n    }\n\n    /**\n     * Verifies an id token and returns the authenticated apiLoginTicket.\n     * Throws an exception if the id token is not valid.\n     * The audience parameter can be used to control which id tokens are\n     * accepted.  By default, the id token must have been issued to this OAuth2 client.\n     *\n     * @param string $token The JSON Web Token to be verified.\n     * @param array<mixed> $options [optional] {\n     *     Configuration options.\n     *     @type string $audience The indended recipient of the token.\n     *     @type string $issuer The intended issuer of the token.\n     *     @type string $cacheKey The cache key of the cached certs. Defaults to\n     *        the sha1 of $certsLocation if provided, otherwise is set to\n     *        \"federated_signon_certs_v3\".\n     *     @type string $certsLocation The location (remote or local) from which\n     *        to retrieve certificates, if not cached. This value should only be\n     *        provided in limited circumstances in which you are sure of the\n     *        behavior.\n     *     @type bool $throwException Whether the function should throw an\n     *        exception if the verification fails. This is useful for\n     *        determining the reason verification failed.\n     * }\n     * @return array<mixed>|false the token payload, if successful, or false if not.\n     * @throws InvalidArgumentException If certs could not be retrieved from a local file.\n     * @throws InvalidArgumentException If received certs are in an invalid format.\n     * @throws InvalidArgumentException If the cert alg is not supported.\n     * @throws RuntimeException If certs could not be retrieved from a remote location.\n     * @throws UnexpectedValueException If the token issuer does not match.\n     * @throws UnexpectedValueException If the token audience does not match.\n     */\n    public function verify($token, array $options = [])\n    {\n        $audience = $options['audience'] ?? null;\n        $issuer = $options['issuer'] ?? null;\n        $certsLocation = $options['certsLocation'] ?? self::FEDERATED_SIGNON_CERT_URL;\n        $cacheKey = $options['cacheKey'] ?? $this->getCacheKeyFromCertLocation($certsLocation);\n        $throwException = $options['throwException'] ?? false; // for backwards compatibility\n\n        // Check signature against each available cert.\n        $certs = $this->getCerts($certsLocation, $cacheKey, $options);\n        $alg = $this->determineAlg($certs);\n        if (!in_array($alg, ['RS256', 'ES256'])) {\n            throw new InvalidArgumentException(\n                'unrecognized \"alg\" in certs, expected ES256 or RS256'\n            );\n        }\n        try {\n            if ($alg == 'RS256') {\n                return $this->verifyRs256($token, $certs, $audience, $issuer);\n            }\n            return $this->verifyEs256($token, $certs, $audience, $issuer);\n        } catch (ExpiredException $e) {  // firebase/php-jwt 5+\n        } catch (SignatureInvalidException $e) {  // firebase/php-jwt 5+\n        } catch (InvalidTokenException $e) { // simplejwt\n        } catch (InvalidArgumentException $e) {\n        } catch (UnexpectedValueException $e) {\n        }\n\n        if ($throwException) {\n            throw $e;\n        }\n\n        return false;\n    }\n\n    /**\n     * Identifies the expected algorithm to verify by looking at the \"alg\" key\n     * of the provided certs.\n     *\n     * @param array<mixed> $certs Certificate array according to the JWK spec (see\n     *                     https://tools.ietf.org/html/rfc7517).\n     * @return string The expected algorithm, such as \"ES256\" or \"RS256\".\n     */\n    private function determineAlg(array $certs)\n    {\n        $alg = null;\n        foreach ($certs as $cert) {\n            if (empty($cert['alg'])) {\n                throw new InvalidArgumentException(\n                    'certs expects \"alg\" to be set'\n                );\n            }\n            $alg = $alg ?: $cert['alg'];\n\n            if ($alg != $cert['alg']) {\n                throw new InvalidArgumentException(\n                    'More than one alg detected in certs'\n                );\n            }\n        }\n        return $alg;\n    }\n\n    /**\n     * Verifies an ES256-signed JWT.\n     *\n     * @param string $token The JSON Web Token to be verified.\n     * @param array<mixed> $certs Certificate array according to the JWK spec (see\n     *        https://tools.ietf.org/html/rfc7517).\n     * @param string|null $audience If set, returns false if the provided\n     *        audience does not match the \"aud\" claim on the JWT.\n     * @param string|null $issuer If set, returns false if the provided\n     *        issuer does not match the \"iss\" claim on the JWT.\n     * @return array<mixed> the token payload, if successful, or false if not.\n     */\n    private function verifyEs256($token, array $certs, $audience = null, $issuer = null)\n    {\n        $this->checkSimpleJwt();\n\n        $jwkset = new KeySet();\n        foreach ($certs as $cert) {\n            $jwkset->add(KeyFactory::create($cert, 'php'));\n        }\n\n        // Validate the signature using the key set and ES256 algorithm.\n        $jwt = $this->callSimpleJwtDecode([$token, $jwkset, 'ES256']);\n        $payload = $jwt->getClaims();\n\n        if ($audience) {\n            if (!isset($payload['aud']) || $payload['aud'] != $audience) {\n                throw new UnexpectedValueException('Audience does not match');\n            }\n        }\n\n        // @see https://cloud.google.com/iap/docs/signed-headers-howto#verifying_the_jwt_payload\n        $issuer = $issuer ?: self::IAP_ISSUER;\n        if (!isset($payload['iss']) || $payload['iss'] !== $issuer) {\n            throw new UnexpectedValueException('Issuer does not match');\n        }\n\n        return $payload;\n    }\n\n    /**\n     * Verifies an RS256-signed JWT.\n     *\n     * @param string $token The JSON Web Token to be verified.\n     * @param array<mixed> $certs Certificate array according to the JWK spec (see\n     *        https://tools.ietf.org/html/rfc7517).\n     * @param string|null $audience If set, returns false if the provided\n     *        audience does not match the \"aud\" claim on the JWT.\n     * @param string|null $issuer If set, returns false if the provided\n     *        issuer does not match the \"iss\" claim on the JWT.\n     * @return array<mixed> the token payload, if successful, or false if not.\n     */\n    private function verifyRs256($token, array $certs, $audience = null, $issuer = null)\n    {\n        $this->checkAndInitializePhpsec();\n        $keys = [];\n        foreach ($certs as $cert) {\n            if (empty($cert['kid'])) {\n                throw new InvalidArgumentException(\n                    'certs expects \"kid\" to be set'\n                );\n            }\n            if (empty($cert['n']) || empty($cert['e'])) {\n                throw new InvalidArgumentException(\n                    'RSA certs expects \"n\" and \"e\" to be set'\n                );\n            }\n            $publicKey = $this->loadPhpsecPublicKey($cert['n'], $cert['e']);\n\n            // create an array of key IDs to certs for the JWT library\n            $keys[$cert['kid']] = new Key($publicKey, 'RS256');\n        }\n\n        $payload = $this->callJwtStatic('decode', [\n            $token,\n            $keys,\n        ]);\n\n        if ($audience) {\n            if (!property_exists($payload, 'aud') || $payload->aud != $audience) {\n                throw new UnexpectedValueException('Audience does not match');\n            }\n        }\n\n        // support HTTP and HTTPS issuers\n        // @see https://developers.google.com/identity/sign-in/web/backend-auth\n        $issuers = $issuer ? [$issuer] : [self::OAUTH2_ISSUER, self::OAUTH2_ISSUER_HTTPS];\n        if (!isset($payload->iss) || !in_array($payload->iss, $issuers)) {\n            throw new UnexpectedValueException('Issuer does not match');\n        }\n\n        return (array) $payload;\n    }\n\n    /**\n     * Revoke an OAuth2 access token or refresh token. This method will revoke the current access\n     * token, if a token isn't provided.\n     *\n     * @param string|array<mixed> $token The token (access token or a refresh token) that should be revoked.\n     * @param array<mixed> $options [optional] Configuration options.\n     * @return bool Returns True if the revocation was successful, otherwise False.\n     */\n    public function revoke($token, array $options = [])\n    {\n        if (is_array($token)) {\n            if (isset($token['refresh_token'])) {\n                $token = $token['refresh_token'];\n            } else {\n                $token = $token['access_token'];\n            }\n        }\n\n        $body = Utils::streamFor(http_build_query(['token' => $token]));\n        $request = new Request('POST', self::OAUTH2_REVOKE_URI, [\n            'Cache-Control' => 'no-store',\n            'Content-Type'  => 'application/x-www-form-urlencoded',\n        ], $body);\n\n        $httpHandler = $this->httpHandler;\n\n        $response = $httpHandler($request, $options);\n\n        return $response->getStatusCode() == 200;\n    }\n\n    /**\n     * Gets federated sign-on certificates to use for verifying identity tokens.\n     * Returns certs as array structure, where keys are key ids, and values\n     * are PEM encoded certificates.\n     *\n     * @param string $location The location from which to retrieve certs.\n     * @param string $cacheKey The key under which to cache the retrieved certs.\n     * @param array<mixed> $options [optional] Configuration options.\n     * @return array<mixed>\n     * @throws InvalidArgumentException If received certs are in an invalid format.\n     */\n    private function getCerts($location, $cacheKey, array $options = [])\n    {\n        $cacheItem = $this->cache->getItem($cacheKey);\n        $certs = $cacheItem ? $cacheItem->get() : null;\n\n        $expireTime = null;\n        if (!$certs) {\n            list($certs, $expireTime) = $this->retrieveCertsFromLocation($location, $options);\n        }\n\n        if (!isset($certs['keys'])) {\n            if ($location !== self::IAP_CERT_URL) {\n                throw new InvalidArgumentException(\n                    'federated sign-on certs expects \"keys\" to be set'\n                );\n            }\n            throw new InvalidArgumentException(\n                'certs expects \"keys\" to be set'\n            );\n        }\n\n        // Push caching off until after verifying certs are in a valid format.\n        // Don't want to cache bad data.\n        if ($expireTime) {\n            $cacheItem->expiresAt(new DateTime($expireTime));\n            $cacheItem->set($certs);\n            $this->cache->save($cacheItem);\n        }\n\n        return $certs['keys'];\n    }\n\n    /**\n     * Retrieve and cache a certificates file.\n     *\n     * @param string $url location\n     * @param array<mixed> $options [optional] Configuration options.\n     * @return array{array<mixed>, string}\n     * @throws InvalidArgumentException If certs could not be retrieved from a local file.\n     * @throws RuntimeException If certs could not be retrieved from a remote location.\n     */\n    private function retrieveCertsFromLocation($url, array $options = [])\n    {\n        // If we're retrieving a local file, just grab it.\n        $expireTime = '+1 hour';\n        if (strpos($url, 'http') !== 0) {\n            if (!file_exists($url)) {\n                throw new InvalidArgumentException(sprintf(\n                    'Failed to retrieve verification certificates from path: %s.',\n                    $url\n                ));\n            }\n\n            return [\n                json_decode((string) file_get_contents($url), true),\n                $expireTime\n            ];\n        }\n\n        $httpHandler = $this->httpHandler;\n        $response = $httpHandler(new Request('GET', $url), $options);\n\n        if ($response->getStatusCode() == 200) {\n            if ($cacheControl = $response->getHeaderLine('Cache-Control')) {\n                array_map(function ($value) use (&$expireTime) {\n                    list($key, $value) = explode('=', $value) + [null, null];\n                    if (trim($key) == 'max-age') {\n                        $expireTime = '+' . $value . ' seconds';\n                    }\n                }, explode(',', $cacheControl));\n            }\n            return [\n                json_decode((string) $response->getBody(), true),\n                $expireTime\n            ];\n        }\n\n        throw new RuntimeException(sprintf(\n            'Failed to retrieve verification certificates: \"%s\".',\n            $response->getBody()->getContents()\n        ), $response->getStatusCode());\n    }\n\n    /**\n     * @return void\n     */\n    private function checkAndInitializePhpsec()\n    {\n        if (!class_exists(RSA::class)) {\n            throw new RuntimeException('Please require phpseclib/phpseclib v3 to use this utility.');\n        }\n    }\n\n    /**\n     * @return string\n     * @throws TypeError If the key cannot be initialized to a string.\n     */\n    private function loadPhpsecPublicKey(string $modulus, string $exponent): string\n    {\n        $key = PublicKeyLoader::load([\n            'n' => new BigInteger($this->callJwtStatic('urlsafeB64Decode', [\n                $modulus,\n            ]), 256),\n            'e' => new BigInteger($this->callJwtStatic('urlsafeB64Decode', [\n                $exponent\n            ]), 256),\n        ]);\n        $formattedPublicKey = $key->toString('PKCS8');\n        if (!is_string($formattedPublicKey)) {\n            throw new TypeError('Failed to initialize the key');\n        }\n        return $formattedPublicKey;\n    }\n\n    /**\n     * @return void\n     */\n    private function checkSimpleJwt()\n    {\n        // @codeCoverageIgnoreStart\n        if (!class_exists(SimpleJwt::class)) {\n            throw new RuntimeException('Please require kelvinmo/simplejwt ^0.2 to use this utility.');\n        }\n        // @codeCoverageIgnoreEnd\n    }\n\n    /**\n     * Provide a hook to mock calls to the JWT static methods.\n     *\n     * @param string $method\n     * @param array<mixed> $args\n     * @return mixed\n     */\n    protected function callJwtStatic($method, array $args = [])\n    {\n        return call_user_func_array([JWT::class, $method], $args); // @phpstan-ignore-line\n    }\n\n    /**\n     * Provide a hook to mock calls to the JWT static methods.\n     *\n     * @param array<mixed> $args\n     * @return mixed\n     */\n    protected function callSimpleJwtDecode(array $args = [])\n    {\n        return call_user_func_array([SimpleJwt::class, 'decode'], $args);\n    }\n\n    /**\n     * Generate a cache key based on the cert location using sha1 with the\n     * exception of using \"federated_signon_certs_v3\" to preserve BC.\n     *\n     * @param string $certsLocation\n     * @return string\n     */\n    private function getCacheKeyFromCertLocation($certsLocation)\n    {\n        $key = $certsLocation === self::FEDERATED_SIGNON_CERT_URL\n            ? 'federated_signon_certs_v3'\n            : sha1($certsLocation);\n\n        return 'google_auth_certs_cache|' . $key;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/ApplicationDefaultCredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse DomainException;\nuse Google\\Auth\\Credentials\\AppIdentityCredentials;\nuse Google\\Auth\\Credentials\\GCECredentials;\nuse Google\\Auth\\Credentials\\ImpersonatedServiceAccountCredentials;\nuse Google\\Auth\\Credentials\\ServiceAccountCredentials;\nuse Google\\Auth\\Credentials\\UserRefreshCredentials;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\Logging\\StdOutLogger;\nuse Google\\Auth\\Middleware\\AuthTokenMiddleware;\nuse Google\\Auth\\Middleware\\ProxyAuthTokenMiddleware;\nuse Google\\Auth\\Subscriber\\AuthTokenSubscriber;\nuse GuzzleHttp\\Client;\nuse InvalidArgumentException;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * ApplicationDefaultCredentials obtains the default credentials for\n * authorizing a request to a Google service.\n *\n * Application Default Credentials are described here:\n * https://developers.google.com/accounts/docs/application-default-credentials\n *\n * This class implements the search for the application default credentials as\n * described in the link.\n *\n * It provides three factory methods:\n * - #get returns the computed credentials object\n * - #getSubscriber returns an AuthTokenSubscriber built from the credentials object\n * - #getMiddleware returns an AuthTokenMiddleware built from the credentials object\n *\n * This allows it to be used as follows with GuzzleHttp\\Client:\n *\n * ```\n * use Google\\Auth\\ApplicationDefaultCredentials;\n * use GuzzleHttp\\Client;\n * use GuzzleHttp\\HandlerStack;\n *\n * $middleware = ApplicationDefaultCredentials::getMiddleware(\n *     'https://www.googleapis.com/auth/taskqueue'\n * );\n * $stack = HandlerStack::create();\n * $stack->push($middleware);\n *\n * $client = new Client([\n *     'handler' => $stack,\n *     'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',\n *     'auth' => 'google_auth' // authorize all requests\n * ]);\n *\n * $res = $client->get('myproject/taskqueues/myqueue');\n * ```\n */\nclass ApplicationDefaultCredentials\n{\n    private const SDK_DEBUG_ENV_VAR = 'GOOGLE_SDK_PHP_LOGGING';\n\n    /**\n     * @deprecated\n     *\n     * Obtains an AuthTokenSubscriber that uses the default FetchAuthTokenInterface\n     * implementation to use in this environment.\n     *\n     * If supplied, $scope is used to in creating the credentials instance if\n     * this does not fallback to the compute engine defaults.\n     *\n     * @param string|string[] $scope the scope of the access request, expressed\n     *        either as an Array or as a space-delimited String.\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache A cache implementation, may be\n     *        provided if you have one already available for use.\n     * @return AuthTokenSubscriber\n     * @throws DomainException if no implementation can be obtained.\n     */\n    public static function getSubscriber(// @phpstan-ignore-line\n        $scope = null,\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $creds = self::getCredentials($scope, $httpHandler, $cacheConfig, $cache);\n\n        /** @phpstan-ignore-next-line */\n        return new AuthTokenSubscriber($creds, $httpHandler);\n    }\n\n    /**\n     * Obtains an AuthTokenMiddleware that uses the default FetchAuthTokenInterface\n     * implementation to use in this environment.\n     *\n     * If supplied, $scope is used to in creating the credentials instance if\n     * this does not fallback to the compute engine defaults.\n     *\n     * @param string|string[] $scope the scope of the access request, expressed\n     *        either as an Array or as a space-delimited String.\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache A cache implementation, may be\n     *        provided if you have one already available for use.\n     * @param string $quotaProject specifies a project to bill for access\n     *   charges associated with the request.\n     * @return AuthTokenMiddleware\n     * @throws DomainException if no implementation can be obtained.\n     */\n    public static function getMiddleware(\n        $scope = null,\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null,\n        $quotaProject = null\n    ) {\n        $creds = self::getCredentials($scope, $httpHandler, $cacheConfig, $cache, $quotaProject);\n\n        return new AuthTokenMiddleware($creds, $httpHandler);\n    }\n\n    /**\n     * Obtains the default FetchAuthTokenInterface implementation to use\n     * in this environment.\n     *\n     * @param string|string[] $scope the scope of the access request, expressed\n     *        either as an Array or as a space-delimited String.\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache A cache implementation, may be\n     *        provided if you have one already available for use.\n     * @param string|null $quotaProject specifies a project to bill for access\n     *   charges associated with the request.\n     * @param string|string[]|null $defaultScope The default scope to use if no\n     *   user-defined scopes exist, expressed either as an Array or as a\n     *   space-delimited string.\n     * @param string|null $universeDomain Specifies a universe domain to use for the\n     *   calling client library.\n     * @param null|false|LoggerInterface $logger A PSR3 compliant LoggerInterface.\n     *\n     * @return FetchAuthTokenInterface\n     * @throws DomainException if no implementation can be obtained.\n     */\n    public static function getCredentials(\n        $scope = null,\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null,\n        $quotaProject = null,\n        $defaultScope = null,\n        ?string $universeDomain = null,\n        null|false|LoggerInterface $logger = null,\n    ) {\n        $creds = null;\n        $jsonKey = CredentialsLoader::fromEnv()\n            ?: CredentialsLoader::fromWellKnownFile();\n        $anyScope = $scope ?: $defaultScope;\n\n        if (!$httpHandler) {\n            if (!($client = HttpClientCache::getHttpClient())) {\n                $client = new Client();\n                HttpClientCache::setHttpClient($client);\n            }\n\n            $httpHandler = HttpHandlerFactory::build($client, $logger);\n        }\n\n        if (is_null($quotaProject)) {\n            // if a quota project isn't specified, try to get one from the env var\n            $quotaProject = CredentialsLoader::quotaProjectFromEnv();\n        }\n\n        if (!is_null($jsonKey)) {\n            if ($quotaProject) {\n                $jsonKey['quota_project_id'] = $quotaProject;\n            }\n            if ($universeDomain) {\n                $jsonKey['universe_domain'] = $universeDomain;\n            }\n            $creds = CredentialsLoader::makeCredentials(\n                $scope,\n                $jsonKey,\n                $defaultScope\n            );\n        } elseif (AppIdentityCredentials::onAppEngine() && !GCECredentials::onAppEngineFlexible()) {\n            $creds = new AppIdentityCredentials($anyScope);\n        } elseif (self::onGce($httpHandler, $cacheConfig, $cache)) {\n            $creds = new GCECredentials(null, $anyScope, null, $quotaProject, null, $universeDomain);\n            $creds->setIsOnGce(true); // save the credentials a trip to the metadata server\n        }\n\n        if (is_null($creds)) {\n            throw new DomainException(self::notFound());\n        }\n        if (!is_null($cache)) {\n            $creds = new FetchAuthTokenCache($creds, $cacheConfig, $cache);\n        }\n        return $creds;\n    }\n\n    /**\n     * Obtains an AuthTokenMiddleware which will fetch an ID token to use in the\n     * Authorization header. The middleware is configured with the default\n     * FetchAuthTokenInterface implementation to use in this environment.\n     *\n     * If supplied, $targetAudience is used to set the \"aud\" on the resulting\n     * ID token.\n     *\n     * @param string $targetAudience The audience for the ID token.\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache A cache implementation, may be\n     *        provided if you have one already available for use.\n     * @return AuthTokenMiddleware\n     * @throws DomainException if no implementation can be obtained.\n     */\n    public static function getIdTokenMiddleware(\n        $targetAudience,\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $creds = self::getIdTokenCredentials($targetAudience, $httpHandler, $cacheConfig, $cache);\n\n        return new AuthTokenMiddleware($creds, $httpHandler);\n    }\n\n    /**\n     * Obtains an ProxyAuthTokenMiddleware which will fetch an ID token to use in the\n     * Authorization header. The middleware is configured with the default\n     * FetchAuthTokenInterface implementation to use in this environment.\n     *\n     * If supplied, $targetAudience is used to set the \"aud\" on the resulting\n     * ID token.\n     *\n     * @param string $targetAudience The audience for the ID token.\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache A cache implementation, may be\n     *        provided if you have one already available for use.\n     * @return ProxyAuthTokenMiddleware\n     * @throws DomainException if no implementation can be obtained.\n     */\n    public static function getProxyIdTokenMiddleware(\n        $targetAudience,\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $creds = self::getIdTokenCredentials($targetAudience, $httpHandler, $cacheConfig, $cache);\n\n        return new ProxyAuthTokenMiddleware($creds, $httpHandler);\n    }\n\n    /**\n     * Obtains the default FetchAuthTokenInterface implementation to use\n     * in this environment, configured with a $targetAudience for fetching an ID\n     * token.\n     *\n     * @param string $targetAudience The audience for the ID token.\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache A cache implementation, may be\n     *        provided if you have one already available for use.\n     * @return FetchAuthTokenInterface\n     * @throws DomainException if no implementation can be obtained.\n     * @throws InvalidArgumentException if JSON \"type\" key is invalid\n     */\n    public static function getIdTokenCredentials(\n        $targetAudience,\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $creds = null;\n        $jsonKey = CredentialsLoader::fromEnv()\n            ?: CredentialsLoader::fromWellKnownFile();\n\n        if (!$httpHandler) {\n            if (!($client = HttpClientCache::getHttpClient())) {\n                $client = new Client();\n                HttpClientCache::setHttpClient($client);\n            }\n\n            $httpHandler = HttpHandlerFactory::build($client);\n        }\n\n        if (!is_null($jsonKey)) {\n            if (!array_key_exists('type', $jsonKey)) {\n                throw new \\InvalidArgumentException('json key is missing the type field');\n            }\n\n            $creds = match ($jsonKey['type']) {\n                'authorized_user' => new UserRefreshCredentials(null, $jsonKey, $targetAudience),\n                'impersonated_service_account' => new ImpersonatedServiceAccountCredentials(null, $jsonKey, $targetAudience),\n                'service_account' => new ServiceAccountCredentials(null, $jsonKey, null, $targetAudience),\n                default => throw new InvalidArgumentException('invalid value in the type field')\n            };\n        } elseif (self::onGce($httpHandler, $cacheConfig, $cache)) {\n            $creds = new GCECredentials(null, null, $targetAudience);\n            $creds->setIsOnGce(true); // save the credentials a trip to the metadata server\n        }\n\n        if (is_null($creds)) {\n            throw new DomainException(self::notFound());\n        }\n        if (!is_null($cache)) {\n            $creds = new FetchAuthTokenCache($creds, $cacheConfig, $cache);\n        }\n        return $creds;\n    }\n\n    /**\n     * Returns a StdOutLogger instance\n     *\n     * @internal\n     *\n     * @return null|LoggerInterface\n     */\n    public static function getDefaultLogger(): null|LoggerInterface\n    {\n        $loggingFlag = getenv(self::SDK_DEBUG_ENV_VAR);\n\n        // Env var is not set\n        if (empty($loggingFlag)) {\n            return null;\n        }\n\n        $loggingFlag = strtolower($loggingFlag);\n\n        // Env Var is not true\n        if ($loggingFlag !== 'true') {\n            if ($loggingFlag !== 'false') {\n                trigger_error('The ' . self::SDK_DEBUG_ENV_VAR . ' is set, but it is set to another value than false or true. Logging is disabled');\n            }\n\n            return null;\n        }\n\n        return new StdOutLogger();\n    }\n\n    /**\n     * @return string\n     */\n    private static function notFound()\n    {\n        $msg = 'Your default credentials were not found. To set up ';\n        $msg .= 'Application Default Credentials, see ';\n        $msg .= 'https://cloud.google.com/docs/authentication/external/set-up-adc';\n\n        return $msg;\n    }\n\n    /**\n     * @param callable|null $httpHandler\n     * @param array<mixed>|null $cacheConfig\n     * @param CacheItemPoolInterface|null $cache\n     * @return bool\n     */\n    private static function onGce(\n        ?callable $httpHandler = null,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $gceCacheConfig = [];\n        foreach (['lifetime', 'prefix'] as $key) {\n            if (isset($cacheConfig['gce_' . $key])) {\n                $gceCacheConfig[$key] = $cacheConfig['gce_' . $key];\n            }\n        }\n\n        return (new GCECache($gceCacheConfig, $cache))->onGce($httpHandler);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Cache/FileSystemCacheItemPool.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Cache;\n\nuse ErrorException;\nuse Psr\\Cache\\CacheItemInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\nclass FileSystemCacheItemPool implements CacheItemPoolInterface\n{\n    /**\n     * @var string\n     */\n    private string $cachePath;\n\n    /**\n     * @var array<CacheItemInterface>\n     */\n    private array $buffer = [];\n\n    /**\n     * Creates a FileSystemCacheItemPool cache that stores values in local storage\n     *\n     * @param string $path The string representation of the path where the cache will store the serialized objects.\n     */\n    public function __construct(string $path)\n    {\n        $this->cachePath = $path;\n\n        if (is_dir($this->cachePath)) {\n            return;\n        }\n\n        // Suppress the error for when the directory already exists because of a\n        // race condition\n        if (!@mkdir($this->cachePath, 0777, true) && !is_dir($this->cachePath)) {\n            throw new ErrorException(\"Cache folder couldn't be created.\");\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getItem(string $key): CacheItemInterface\n    {\n        if (!$this->validKey($key)) {\n            throw new InvalidArgumentException(\"The key '$key' is not valid. The key should follow the pattern |^[a-zA-Z0-9_\\.! ]+$|\");\n        }\n\n        $item = new TypedItem($key);\n\n        $itemPath = $this->cacheFilePath($key);\n\n        if (!file_exists($itemPath)) {\n            return $item;\n        }\n\n        $serializedItem = file_get_contents($itemPath);\n\n        if ($serializedItem === false) {\n            return $item;\n        }\n\n        $item->set(unserialize($serializedItem));\n\n        return $item;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return iterable<CacheItemInterface> An iterable object containing all the\n     *   A traversable collection of Cache Items keyed by the cache keys of\n     *   each item. A Cache item will be returned for each key, even if that\n     *   key is not found. However, if no keys are specified then an empty\n     *   traversable MUST be returned instead.\n     */\n    public function getItems(array $keys = []): iterable\n    {\n        $result = [];\n\n        foreach ($keys as $key) {\n            $result[$key] = $this->getItem($key);\n        }\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function save(CacheItemInterface $item): bool\n    {\n        if (!$this->validKey($item->getKey())) {\n            return false;\n        }\n\n        $itemPath = $this->cacheFilePath($item->getKey());\n        $serializedItem = serialize($item->get());\n\n        $result = file_put_contents($itemPath, $serializedItem, LOCK_EX);\n\n        // 0 bytes write is considered a successful operation\n        if ($result === false) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function hasItem(string $key): bool\n    {\n        return $this->getItem($key)->isHit();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function clear(): bool\n    {\n        $this->buffer = [];\n\n        if (!is_dir($this->cachePath)) {\n            return false;\n        }\n\n        $files = scandir($this->cachePath);\n        if (!$files) {\n            return false;\n        }\n\n        foreach ($files as $fileName) {\n            if ($fileName === '.' || $fileName === '..') {\n                continue;\n            }\n\n            if (!unlink($this->cachePath . '/' . $fileName)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function deleteItem(string $key): bool\n    {\n        if (!$this->validKey($key)) {\n            throw new InvalidArgumentException(\"The key '$key' is not valid. The key should follow the pattern |^[a-zA-Z0-9_\\.! ]+$|\");\n        }\n\n        $itemPath = $this->cacheFilePath($key);\n\n        if (!file_exists($itemPath)) {\n            return true;\n        }\n\n        return unlink($itemPath);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function deleteItems(array $keys): bool\n    {\n        $result = true;\n\n        foreach ($keys as $key) {\n            if (!$this->deleteItem($key)) {\n                $result = false;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function saveDeferred(CacheItemInterface $item): bool\n    {\n        array_push($this->buffer, $item);\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function commit(): bool\n    {\n        $result = true;\n\n        foreach ($this->buffer as $item) {\n            if (!$this->save($item)) {\n                $result = false;\n            }\n        }\n\n        return $result;\n    }\n\n    private function cacheFilePath(string $key): string\n    {\n        return $this->cachePath . '/' . $key;\n    }\n\n    private function validKey(string $key): bool\n    {\n        return (bool) preg_match('|^[a-zA-Z0-9_\\.]+$|', $key);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Cache/InvalidArgumentException.php",
    "content": "<?php\n/*\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Cache;\n\nuse Psr\\Cache\\InvalidArgumentException as PsrInvalidArgumentException;\n\nclass InvalidArgumentException extends \\InvalidArgumentException implements PsrInvalidArgumentException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Cache/MemoryCacheItemPool.php",
    "content": "<?php\n/*\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Cache;\n\nuse Psr\\Cache\\CacheItemInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * Simple in-memory cache implementation.\n */\nfinal class MemoryCacheItemPool implements CacheItemPoolInterface\n{\n    /**\n     * @var CacheItemInterface[]\n     */\n    private $items;\n\n    /**\n     * @var CacheItemInterface[]\n     */\n    private $deferredItems;\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return CacheItemInterface The corresponding Cache Item.\n     */\n    public function getItem($key): CacheItemInterface\n    {\n        return current($this->getItems([$key]));  // @phpstan-ignore-line\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return iterable<CacheItemInterface>\n     *   A traversable collection of Cache Items keyed by the cache keys of\n     *   each item. A Cache item will be returned for each key, even if that\n     *   key is not found. However, if no keys are specified then an empty\n     *   traversable MUST be returned instead.\n     */\n    public function getItems(array $keys = []): iterable\n    {\n        $items = [];\n        foreach ($keys as $key) {\n            $items[$key] = $this->hasItem($key) ? clone $this->items[$key] : new TypedItem($key);\n        }\n\n        return $items;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   True if item exists in the cache, false otherwise.\n     */\n    public function hasItem($key): bool\n    {\n        $this->isValidKey($key);\n\n        return isset($this->items[$key]) && $this->items[$key]->isHit();\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   True if the pool was successfully cleared. False if there was an error.\n     */\n    public function clear(): bool\n    {\n        $this->items = [];\n        $this->deferredItems = [];\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   True if the item was successfully removed. False if there was an error.\n     */\n    public function deleteItem($key): bool\n    {\n        return $this->deleteItems([$key]);\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   True if the items were successfully removed. False if there was an error.\n     */\n    public function deleteItems(array $keys): bool\n    {\n        array_walk($keys, [$this, 'isValidKey']);\n\n        foreach ($keys as $key) {\n            unset($this->items[$key]);\n        }\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   True if the item was successfully persisted. False if there was an error.\n     */\n    public function save(CacheItemInterface $item): bool\n    {\n        $this->items[$item->getKey()] = $item;\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   False if the item could not be queued or if a commit was attempted and failed. True otherwise.\n     */\n    public function saveDeferred(CacheItemInterface $item): bool\n    {\n        $this->deferredItems[$item->getKey()] = $item;\n\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return bool\n     *   True if all not-yet-saved items were successfully saved or there were none. False otherwise.\n     */\n    public function commit(): bool\n    {\n        foreach ($this->deferredItems as $item) {\n            $this->save($item);\n        }\n\n        $this->deferredItems = [];\n\n        return true;\n    }\n\n    /**\n     * Determines if the provided key is valid.\n     *\n     * @param string $key\n     * @return bool\n     * @throws InvalidArgumentException\n     */\n    private function isValidKey($key)\n    {\n        $invalidCharacters = '{}()/\\\\\\\\@:';\n\n        if (!is_string($key) || preg_match(\"#[$invalidCharacters]#\", $key)) {\n            throw new InvalidArgumentException('The provided key is not valid: ' . var_export($key, true));\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Cache/SysVCacheItemPool.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Auth\\Cache;\n\nuse Psr\\Cache\\CacheItemInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse SysvSemaphore;\nuse SysvSharedMemory;\n\n/**\n * SystemV shared memory based CacheItemPool implementation.\n *\n * This CacheItemPool implementation can be used among multiple processes, but\n * it doesn't provide any locking mechanism. If multiple processes write to\n * this ItemPool, you have to avoid race condition manually in your code.\n */\nclass SysVCacheItemPool implements CacheItemPoolInterface\n{\n    const VAR_KEY = 1;\n\n    const DEFAULT_PROJ = 'A';\n\n    const DEFAULT_SEM_PROJ = 'B';\n\n    const DEFAULT_MEMSIZE = 10000;\n\n    const DEFAULT_PERM = 0600;\n\n    /**\n     * @var int\n     */\n    private $sysvKey;\n\n    /**\n     * @var CacheItemInterface[]\n     */\n    private $items;\n\n    /**\n     * @var CacheItemInterface[]\n     */\n    private $deferredItems;\n\n    /**\n     * @var array<mixed>\n     */\n    private $options;\n\n    /**\n     * @var bool\n     */\n    private $hasLoadedItems = false;\n\n    /**\n     * @var SysvSemaphore|false\n     */\n    private SysvSemaphore|false $semId = false;\n\n    /**\n     * Maintain the process which is currently holding the semaphore to prevent deadlock.\n     *\n     * @var int|null\n     */\n    private ?int $lockOwnerPid = null;\n\n    /**\n     * Create a SystemV shared memory based CacheItemPool.\n     *\n     * @param array<mixed> $options {\n     *     [optional] Configuration options.\n     *\n     *     @type int    $variableKey The variable key for getting the data from the shared memory. **Defaults to** 1.\n     *     @type string $proj        The project identifier for ftok. This needs to be a one character string.\n     *                               **Defaults to** 'A'.\n     *     @type string $semProj     The project identifier for ftok to provide to `sem_get`. This needs to be a one\n     *                               character string.\n     *                               **Defaults to** 'B'.\n     *     @type int    $memsize     The memory size in bytes for shm_attach. **Defaults to** 10000.\n     *     @type int    $perm        The permission for shm_attach. **Defaults to** 0600.\n     * }\n     */\n    public function __construct($options = [])\n    {\n        if (!extension_loaded('sysvshm')) {\n            throw new \\RuntimeException(\n                'sysvshm extension is required to use this ItemPool'\n            );\n        }\n        $this->options = $options + [\n            'variableKey' => self::VAR_KEY,\n            'proj' => self::DEFAULT_PROJ,\n            'semProj' => self::DEFAULT_SEM_PROJ,\n            'memsize' => self::DEFAULT_MEMSIZE,\n            'perm' => self::DEFAULT_PERM\n        ];\n        $this->items = [];\n        $this->deferredItems = [];\n        $this->sysvKey = ftok(__FILE__, $this->options['proj']);\n\n        // gracefully handle when `sysvsem` isn't loaded\n        // @TODO(v2): throw an exception when the extension isn't loaded\n        if (extension_loaded('sysvsem')) {\n            $semKey = ftok(__FILE__, $this->options['semProj']);\n            $this->semId = sem_get($semKey, 1, $this->options['perm'], true);\n        }\n    }\n\n    /**\n     * @param mixed $key\n     * @return CacheItemInterface\n     */\n    public function getItem($key): CacheItemInterface\n    {\n        $this->loadItems();\n        return current($this->getItems([$key])); // @phpstan-ignore-line\n    }\n\n    /**\n     * @param array<mixed> $keys\n     * @return iterable<CacheItemInterface>\n     */\n    public function getItems(array $keys = []): iterable\n    {\n        $this->loadItems();\n        $items = [];\n        foreach ($keys as $key) {\n            $items[$key] = $this->hasItem($key) ?\n                clone $this->items[$key] :\n                new TypedItem($key);\n        }\n        return $items;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function hasItem($key): bool\n    {\n        $this->loadItems();\n        return isset($this->items[$key]) && $this->items[$key]->isHit();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function clear(): bool\n    {\n        if (!$this->acquireLock()) {\n            return false;\n        }\n\n        $this->items = [];\n        $this->deferredItems = [];\n        $ret = $this->saveCurrentItems();\n\n        $this->resetShm();\n        $this->releaseLock();\n        return $ret;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function deleteItem($key): bool\n    {\n        return $this->deleteItems([$key]);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function deleteItems(array $keys): bool\n    {\n        if (!$this->acquireLock()) {\n            return false;\n        }\n\n        if (!$this->hasLoadedItems) {\n            $this->loadItems();\n        }\n\n        foreach ($keys as $key) {\n            unset($this->items[$key]);\n        }\n        $ret = $this->saveCurrentItems();\n\n        $this->resetShm();\n        $this->releaseLock();\n        return $ret;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function save(CacheItemInterface $item): bool\n    {\n        if (!$this->acquireLock()) {\n            return false;\n        }\n\n        if (!$this->hasLoadedItems) {\n            $this->loadItems();\n        }\n\n        $this->items[$item->getKey()] = $item;\n        $ret = $this->saveCurrentItems();\n        $this->releaseLock();\n        return $ret;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function saveDeferred(CacheItemInterface $item): bool\n    {\n        $this->deferredItems[$item->getKey()] = $item;\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function commit(): bool\n    {\n        if (!$this->acquireLock()) {\n            return false;\n        }\n\n        foreach ($this->deferredItems as $item) {\n            if ($this->save($item) === false) {\n                $this->releaseLock();\n                return false;\n            }\n        }\n        $this->deferredItems = [];\n        $this->releaseLock();\n        return true;\n    }\n\n    /**\n     * Save the current items.\n     *\n     * @return bool true when success, false upon failure\n     */\n    private function saveCurrentItems()\n    {\n        if (!$this->acquireLock()) {\n            return false;\n        }\n\n        if (false !== $shmid = $this->attachShm()) {\n            $success = shm_put_var(\n                $shmid,\n                $this->options['variableKey'],\n                $this->items\n            );\n            shm_detach($shmid);\n            $this->releaseLock();\n            return $success;\n        }\n        $this->releaseLock();\n        return false;\n    }\n\n    /**\n     * Load the items from the shared memory.\n     *\n     * @return bool true when success, false upon failure\n     */\n    private function loadItems()\n    {\n        if (!$this->acquireLock()) {\n            return false;\n        }\n\n        if (false !== $shmid = $this->attachShm()) {\n            $data = @shm_get_var($shmid, $this->options['variableKey']);\n            $this->items = $data ?: [];\n            shm_detach($shmid);\n            $this->hasLoadedItems = true;\n            $this->releaseLock();\n            return true;\n        }\n        $this->releaseLock();\n        return false;\n    }\n\n    private function acquireLock(): bool\n    {\n        if ($this->semId === false) {\n            // if `sysvsem` isn't loaded, or if `sem_get` fails, return true\n            // this ensures BC with previous versions of the auth library.\n            // @TODO consider better handling when `sem_get` fails.\n            return true;\n        }\n\n        $currentPid = getmypid();\n        if ($this->lockOwnerPid === $currentPid) {\n            // We already have the lock\n            return true;\n        }\n\n        if (sem_acquire($this->semId)) {\n            $this->lockOwnerPid = (int) $currentPid;\n            return true;\n        }\n        return false;\n    }\n\n    private function releaseLock(): bool\n    {\n        if ($this->semId === false || $this->lockOwnerPid !== getmypid()) {\n            return true;\n        }\n\n        $this->lockOwnerPid = null;\n        return sem_release($this->semId);\n    }\n\n    private function resetShm(): void\n    {\n        // Remove the shared memory segment and semaphore when clearing the cache\n        $shmid = @shm_attach($this->sysvKey);\n        if ($shmid !== false) {\n            @shm_remove($shmid);\n            @shm_detach($shmid);\n        }\n    }\n\n    private function attachShm(): SysvSharedMemory|false\n    {\n        return shm_attach(\n            $this->sysvKey,\n            $this->options['memsize'],\n            $this->options['perm']\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Cache/TypedItem.php",
    "content": "<?php\n/*\n * Copyright 2022 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Cache;\n\nuse Psr\\Cache\\CacheItemInterface;\n\n/**\n * A cache item.\n *\n * This class will be used by MemoryCacheItemPool and SysVCacheItemPool\n * on PHP 8.0 and above. It is compatible with psr/cache 3.0 (PSR-6).\n * @see Item for compatiblity with previous versions of PHP.\n */\nfinal class TypedItem implements CacheItemInterface\n{\n    /**\n     * @var mixed\n     */\n    private mixed $value;\n\n    /**\n     * @var \\DateTimeInterface|null\n     */\n    private ?\\DateTimeInterface $expiration;\n\n    /**\n     * @var bool\n     */\n    private bool $isHit = false;\n\n    /**\n     * @param string $key\n     */\n    public function __construct(\n        private string $key\n    ) {\n        $this->key = $key;\n        $this->expiration = null;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getKey(): string\n    {\n        return $this->key;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function get(): mixed\n    {\n        return $this->isHit() ? $this->value : null;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isHit(): bool\n    {\n        if (!$this->isHit) {\n            return false;\n        }\n\n        if ($this->expiration === null) {\n            return true;\n        }\n\n        return $this->currentTime()->getTimestamp() < $this->expiration->getTimestamp();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function set(mixed $value): static\n    {\n        $this->isHit = true;\n        $this->value = $value;\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function expiresAt($expiration): static\n    {\n        if ($this->isValidExpiration($expiration)) {\n            $this->expiration = $expiration;\n\n            return $this;\n        }\n\n        $error = sprintf(\n            'Argument 1 passed to %s::expiresAt() must implement interface DateTimeInterface, %s given',\n            get_class($this),\n            gettype($expiration)\n        );\n\n        throw new \\TypeError($error);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function expiresAfter($time): static\n    {\n        if (is_int($time)) {\n            $this->expiration = $this->currentTime()->add(new \\DateInterval(\"PT{$time}S\"));\n        } elseif ($time instanceof \\DateInterval) {\n            $this->expiration = $this->currentTime()->add($time);\n        } elseif ($time === null) {\n            $this->expiration = $time;\n        } else {\n            $message = 'Argument 1 passed to %s::expiresAfter() must be an ' .\n                       'instance of DateInterval or of the type integer, %s given';\n            $error = sprintf($message, get_class($this), gettype($time));\n\n            throw new \\TypeError($error);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Determines if an expiration is valid based on the rules defined by PSR6.\n     *\n     * @param mixed $expiration\n     * @return bool\n     */\n    private function isValidExpiration($expiration)\n    {\n        if ($expiration === null) {\n            return true;\n        }\n\n        // We test for two types here due to the fact the DateTimeInterface\n        // was not introduced until PHP 5.5. Checking for the DateTime type as\n        // well allows us to support 5.4.\n        if ($expiration instanceof \\DateTimeInterface) {\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return \\DateTime\n     */\n    protected function currentTime()\n    {\n        return new \\DateTime('now', new \\DateTimeZone('UTC'));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/CacheTrait.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Psr\\Cache\\CacheItemPoolInterface;\n\ntrait CacheTrait\n{\n    /**\n     * @var int\n     */\n    private $maxKeyLength = 64;\n\n    /**\n     * @var array<mixed>\n     */\n    private $cacheConfig;\n\n    /**\n     * @var ?CacheItemPoolInterface\n     */\n    private $cache;\n\n    /**\n     * Gets the cached value if it is present in the cache when that is\n     * available.\n     *\n     * @param mixed $k\n     *\n     * @return mixed\n     */\n    private function getCachedValue($k)\n    {\n        if (is_null($this->cache)) {\n            return null;\n        }\n\n        $key = $this->getFullCacheKey($k);\n        if (is_null($key)) {\n            return null;\n        }\n\n        $cacheItem = $this->cache->getItem($key);\n        if ($cacheItem->isHit()) {\n            return $cacheItem->get();\n        }\n    }\n\n    /**\n     * Saves the value in the cache when that is available.\n     *\n     * @param mixed $k\n     * @param mixed $v\n     * @return mixed\n     */\n    private function setCachedValue($k, $v)\n    {\n        if (is_null($this->cache)) {\n            return null;\n        }\n\n        $key = $this->getFullCacheKey($k);\n        if (is_null($key)) {\n            return null;\n        }\n\n        $cacheItem = $this->cache->getItem($key);\n        $cacheItem->set($v);\n        $cacheItem->expiresAfter($this->cacheConfig['lifetime']);\n        return $this->cache->save($cacheItem);\n    }\n\n    /**\n     * @param null|string $key\n     * @return null|string\n     */\n    private function getFullCacheKey($key)\n    {\n        if (is_null($key)) {\n            return null;\n        }\n\n        $key = ($this->cacheConfig['prefix'] ?? '') . $key;\n\n        // ensure we do not have illegal characters\n        $key = preg_replace('|[^a-zA-Z0-9_\\.!]|', '', $key);\n\n        // Hash keys if they exceed $maxKeyLength (defaults to 64)\n        if ($this->maxKeyLength && strlen($key) > $this->maxKeyLength) {\n            $key = substr(hash('sha256', $key), 0, $this->maxKeyLength);\n        }\n\n        return $key;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/CredentialSource/AwsNativeSource.php",
    "content": "<?php\n/*\n * Copyright 2023 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\CredentialSource;\n\nuse Google\\Auth\\ExternalAccountCredentialSourceInterface;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Authenticates requests using AWS credentials.\n */\nclass AwsNativeSource implements ExternalAccountCredentialSourceInterface\n{\n    private const CRED_VERIFICATION_QUERY = 'Action=GetCallerIdentity&Version=2011-06-15';\n\n    private string $audience;\n    private string $regionalCredVerificationUrl;\n    private ?string $regionUrl;\n    private ?string $securityCredentialsUrl;\n    private ?string $imdsv2SessionTokenUrl;\n\n    /**\n     * @param string $audience The audience for the credential.\n     * @param string $regionalCredVerificationUrl The regional AWS GetCallerIdentity action URL used to determine the\n     *                                            AWS account ID and its roles. This is not called by this library, but\n     *                                            is sent in the subject token to be called by the STS token server.\n     * @param string|null $regionUrl This URL should be used to determine the current AWS region needed for the signed\n     *                               request construction.\n     * @param string|null $securityCredentialsUrl The AWS metadata server URL used to retrieve the access key, secret\n     *                                            key and security token needed to sign the GetCallerIdentity request.\n     * @param string|null $imdsv2SessionTokenUrl Presence of this URL enforces the auth libraries to fetch a Session\n     *                                           Token from AWS. This field is required for EC2 instances using IMDSv2.\n     */\n    public function __construct(\n        string $audience,\n        string $regionalCredVerificationUrl,\n        ?string $regionUrl = null,\n        ?string $securityCredentialsUrl = null,\n        ?string $imdsv2SessionTokenUrl = null\n    ) {\n        $this->audience = $audience;\n        $this->regionalCredVerificationUrl = $regionalCredVerificationUrl;\n        $this->regionUrl = $regionUrl;\n        $this->securityCredentialsUrl = $securityCredentialsUrl;\n        $this->imdsv2SessionTokenUrl = $imdsv2SessionTokenUrl;\n    }\n\n    public function fetchSubjectToken(?callable $httpHandler = null): string\n    {\n        if (is_null($httpHandler)) {\n            $httpHandler = HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        }\n\n        $headers = [];\n        if ($this->imdsv2SessionTokenUrl) {\n            $headers = [\n                'X-aws-ec2-metadata-token' => self::getImdsV2SessionToken($this->imdsv2SessionTokenUrl, $httpHandler)\n            ];\n        }\n\n        if (!$signingVars = self::getSigningVarsFromEnv()) {\n            if (!$this->securityCredentialsUrl) {\n                throw new \\LogicException('Unable to get credentials from ENV, and no security credentials URL provided');\n            }\n            $signingVars = self::getSigningVarsFromUrl(\n                $httpHandler,\n                $this->securityCredentialsUrl,\n                self::getRoleName($httpHandler, $this->securityCredentialsUrl, $headers),\n                $headers\n            );\n        }\n\n        if (!$region = self::getRegionFromEnv()) {\n            if (!$this->regionUrl) {\n                throw new \\LogicException('Unable to get region from ENV, and no region URL provided');\n            }\n            $region = self::getRegionFromUrl($httpHandler, $this->regionUrl, $headers);\n        }\n        $url = str_replace('{region}', $region, $this->regionalCredVerificationUrl);\n        $host = parse_url($url)['host'] ?? '';\n\n        // From here we use the signing vars to create the signed request to receive a token\n        [$accessKeyId, $secretAccessKey, $securityToken] = $signingVars;\n        $headers = self::getSignedRequestHeaders($region, $host, $accessKeyId, $secretAccessKey, $securityToken);\n\n        // Inject x-goog-cloud-target-resource into header\n        $headers['x-goog-cloud-target-resource'] = $this->audience;\n\n        // Format headers as they're expected in the subject token\n        $formattedHeaders = array_map(\n            fn ($k, $v) => ['key' => $k, 'value' => $v],\n            array_keys($headers),\n            $headers,\n        );\n\n        $request = [\n            'headers' => $formattedHeaders,\n            'method' => 'POST',\n            'url' => $url,\n        ];\n\n        return urlencode(json_encode($request) ?: '');\n    }\n\n    /**\n     * @internal\n     */\n    public static function getImdsV2SessionToken(string $imdsV2Url, callable $httpHandler): string\n    {\n        $headers = [\n            'X-aws-ec2-metadata-token-ttl-seconds' => '21600'\n        ];\n        $request = new Request(\n            'PUT',\n            $imdsV2Url,\n            $headers\n        );\n\n        $response = $httpHandler($request);\n        return (string) $response->getBody();\n    }\n\n    /**\n     * @see http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html\n     *\n     * @internal\n     *\n     * @return array<string, string>\n     */\n    public static function getSignedRequestHeaders(\n        string $region,\n        string $host,\n        string $accessKeyId,\n        string $secretAccessKey,\n        ?string $securityToken\n    ): array {\n        $service = 'sts';\n\n        # Create a date for headers and the credential string in ISO-8601 format\n        $amzdate = gmdate('Ymd\\THis\\Z');\n        $datestamp = gmdate('Ymd'); # Date w/o time, used in credential scope\n\n        # Create the canonical headers and signed headers. Header names\n        # must be trimmed and lowercase, and sorted in code point order from\n        # low to high. Note that there is a trailing \\n.\n        $canonicalHeaders = sprintf(\"host:%s\\nx-amz-date:%s\\n\", $host, $amzdate);\n        if ($securityToken) {\n            $canonicalHeaders .= sprintf(\"x-amz-security-token:%s\\n\", $securityToken);\n        }\n\n        # Step 5: Create the list of signed headers. This lists the headers\n        # in the canonicalHeaders list, delimited with \";\" and in alpha order.\n        # Note: The request can include any headers; $canonicalHeaders and\n        # $signedHeaders lists those that you want to be included in the\n        # hash of the request. \"Host\" and \"x-amz-date\" are always required.\n        $signedHeaders = 'host;x-amz-date';\n        if ($securityToken) {\n            $signedHeaders .= ';x-amz-security-token';\n        }\n\n        # Step 6: Create payload hash (hash of the request body content). For GET\n        # requests, the payload is an empty string (\"\").\n        $payloadHash = hash('sha256', '');\n\n        # Step 7: Combine elements to create canonical request\n        $canonicalRequest = implode(\"\\n\", [\n            'POST', // method\n            '/',   // canonical URL\n            self::CRED_VERIFICATION_QUERY, // query string\n            $canonicalHeaders,\n            $signedHeaders,\n            $payloadHash\n        ]);\n\n        # ************* TASK 2: CREATE THE STRING TO SIGN*************\n        # Match the algorithm to the hashing algorithm you use, either SHA-1 or\n        # SHA-256 (recommended)\n        $algorithm = 'AWS4-HMAC-SHA256';\n        $scope = implode('/', [$datestamp, $region, $service, 'aws4_request']);\n        $stringToSign = implode(\"\\n\", [$algorithm, $amzdate, $scope, hash('sha256', $canonicalRequest)]);\n\n        # ************* TASK 3: CALCULATE THE SIGNATURE *************\n        # Create the signing key using the function defined above.\n        // (done above)\n        $signingKey = self::getSignatureKey($secretAccessKey, $datestamp, $region, $service);\n\n        # Sign the string_to_sign using the signing_key\n        $signature = bin2hex(self::hmacSign($signingKey, $stringToSign));\n\n        # ************* TASK 4: ADD SIGNING INFORMATION TO THE REQUEST *************\n        # The signing information can be either in a query string value or in\n        # a header named Authorization. This code shows how to use a header.\n        # Create authorization header and add to request headers\n        $authorizationHeader = sprintf(\n            '%s Credential=%s/%s, SignedHeaders=%s, Signature=%s',\n            $algorithm,\n            $accessKeyId,\n            $scope,\n            $signedHeaders,\n            $signature\n        );\n\n        # The request can include any headers, but MUST include \"host\", \"x-amz-date\",\n        # and (for this scenario) \"Authorization\". \"host\" and \"x-amz-date\" must\n        # be included in the canonical_headers and signed_headers, as noted\n        # earlier. Order here is not significant.\n        $headers = [\n            'host' => $host,\n            'x-amz-date' => $amzdate,\n            'Authorization' => $authorizationHeader,\n        ];\n        if ($securityToken) {\n            $headers['x-amz-security-token'] = $securityToken;\n        }\n\n        return $headers;\n    }\n\n    /**\n     * @internal\n     */\n    public static function getRegionFromEnv(): ?string\n    {\n        $region = getenv('AWS_REGION');\n        if (empty($region)) {\n            $region = getenv('AWS_DEFAULT_REGION');\n        }\n        return $region ?: null;\n    }\n\n    /**\n     * @internal\n     *\n     * @param callable $httpHandler\n     * @param string $regionUrl\n     * @param array<string, string|string[]> $headers Request headers to send in with the request.\n     */\n    public static function getRegionFromUrl(callable $httpHandler, string $regionUrl, array $headers): string\n    {\n        // get the region/zone from the region URL\n        $regionRequest = new Request('GET', $regionUrl, $headers);\n        $regionResponse = $httpHandler($regionRequest);\n\n        // Remove last character. For example, if us-east-2b is returned,\n        // the region would be us-east-2.\n        return substr((string) $regionResponse->getBody(), 0, -1);\n    }\n\n    /**\n     * @internal\n     *\n     * @param callable $httpHandler\n     * @param string $securityCredentialsUrl\n     * @param array<string, string|string[]> $headers Request headers to send in with the request.\n     */\n    public static function getRoleName(callable $httpHandler, string $securityCredentialsUrl, array $headers): string\n    {\n        // Get the AWS role name\n        $roleRequest = new Request('GET', $securityCredentialsUrl, $headers);\n        $roleResponse = $httpHandler($roleRequest);\n        $roleName = (string) $roleResponse->getBody();\n\n        return $roleName;\n    }\n\n    /**\n     * @internal\n     *\n     * @param callable $httpHandler\n     * @param string $securityCredentialsUrl\n     * @param array<string, string|string[]> $headers Request headers to send in with the request.\n     * @return array{string, string, ?string}\n     */\n    public static function getSigningVarsFromUrl(\n        callable $httpHandler,\n        string $securityCredentialsUrl,\n        string $roleName,\n        array $headers\n    ): array {\n        // Get the AWS credentials\n        $credsRequest = new Request(\n            'GET',\n            $securityCredentialsUrl . '/' . $roleName,\n            $headers\n        );\n        $credsResponse = $httpHandler($credsRequest);\n        $awsCreds = json_decode((string) $credsResponse->getBody(), true);\n        return [\n            $awsCreds['AccessKeyId'], // accessKeyId\n            $awsCreds['SecretAccessKey'], // secretAccessKey\n            $awsCreds['Token'], // token\n        ];\n    }\n\n    /**\n     * @internal\n     *\n     * @return array{string, string, ?string}\n     */\n    public static function getSigningVarsFromEnv(): ?array\n    {\n        $accessKeyId = getenv('AWS_ACCESS_KEY_ID');\n        $secretAccessKey = getenv('AWS_SECRET_ACCESS_KEY');\n        if ($accessKeyId && $secretAccessKey) {\n            return [\n                $accessKeyId,\n                $secretAccessKey,\n                getenv('AWS_SESSION_TOKEN') ?: null, // session token (can be null)\n            ];\n        }\n\n        return null;\n    }\n\n    /**\n     * Gets the unique key for caching\n     * For AwsNativeSource the values are:\n     * Imdsv2SessionTokenUrl.SecurityCredentialsUrl.RegionUrl.RegionalCredVerificationUrl\n     *\n     * @return string\n     */\n    public function getCacheKey(): string\n    {\n        return ($this->imdsv2SessionTokenUrl ?? '') .\n            '.' . ($this->securityCredentialsUrl ?? '') .\n            '.' . $this->regionUrl .\n            '.' . $this->regionalCredVerificationUrl;\n    }\n\n    /**\n     * Return HMAC hash in binary string\n     */\n    private static function hmacSign(string $key, string $msg): string\n    {\n        return hash_hmac('sha256', self::utf8Encode($msg), $key, true);\n    }\n\n    /**\n     * @TODO add a fallback when mbstring is not available\n     */\n    private static function utf8Encode(string $string): string\n    {\n        return (string) mb_convert_encoding($string, 'UTF-8', 'ISO-8859-1');\n    }\n\n    private static function getSignatureKey(\n        string $key,\n        string $dateStamp,\n        string $regionName,\n        string $serviceName\n    ): string {\n        $kDate = self::hmacSign(self::utf8Encode('AWS4' . $key), $dateStamp);\n        $kRegion = self::hmacSign($kDate, $regionName);\n        $kService = self::hmacSign($kRegion, $serviceName);\n        $kSigning = self::hmacSign($kService, 'aws4_request');\n\n        return $kSigning;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/CredentialSource/ExecutableSource.php",
    "content": "<?php\n/*\n * Copyright 2024 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\CredentialSource;\n\nuse Google\\Auth\\ExecutableHandler\\ExecutableHandler;\nuse Google\\Auth\\ExecutableHandler\\ExecutableResponseError;\nuse Google\\Auth\\ExternalAccountCredentialSourceInterface;\nuse RuntimeException;\n\n/**\n * ExecutableSource enables the exchange of workload identity pool external credentials for\n * Google access tokens by retrieving 3rd party tokens through a user supplied executable. These\n * scripts/executables are completely independent of the Google Cloud Auth libraries. These\n * credentials plug into ADC and will call the specified executable to retrieve the 3rd party token\n * to be exchanged for a Google access token.\n *\n * To use these credentials, the GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES environment variable\n * must be set to '1'. This is for security reasons.\n *\n * Both OIDC and SAML are supported. The executable must adhere to a specific response format\n * defined below.\n *\n * The executable must print out the 3rd party token to STDOUT in JSON format. When an\n * output_file is specified in the credential configuration, the executable must also handle writing the\n * JSON response to this file.\n *\n * <pre>\n * OIDC response sample:\n * {\n *   \"version\": 1,\n *   \"success\": true,\n *   \"token_type\": \"urn:ietf:params:oauth:token-type:id_token\",\n *   \"id_token\": \"HEADER.PAYLOAD.SIGNATURE\",\n *   \"expiration_time\": 1620433341\n * }\n *\n * SAML2 response sample:\n * {\n *   \"version\": 1,\n *   \"success\": true,\n *   \"token_type\": \"urn:ietf:params:oauth:token-type:saml2\",\n *   \"saml_response\": \"...\",\n *   \"expiration_time\": 1620433341\n * }\n *\n * Error response sample:\n * {\n *   \"version\": 1,\n *   \"success\": false,\n *   \"code\": \"401\",\n *   \"message\": \"Error message.\"\n * }\n * </pre>\n *\n * The \"expiration_time\" field in the JSON response is only required for successful\n * responses when an output file was specified in the credential configuration\n *\n * The auth libraries will populate certain environment variables that will be accessible by the\n * executable, such as: GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE, GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE,\n * GOOGLE_EXTERNAL_ACCOUNT_INTERACTIVE, GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL, and\n * GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE.\n */\nclass ExecutableSource implements ExternalAccountCredentialSourceInterface\n{\n    private const GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES = 'GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES';\n    private const SAML_SUBJECT_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:saml2';\n    private const OIDC_SUBJECT_TOKEN_TYPE1 = 'urn:ietf:params:oauth:token-type:id_token';\n    private const OIDC_SUBJECT_TOKEN_TYPE2 = 'urn:ietf:params:oauth:token-type:jwt';\n\n    private string $command;\n    private ExecutableHandler $executableHandler;\n    private ?string $outputFile;\n\n    /**\n     * @param string $command    The string command to run to get the subject token.\n     * @param string|null $outputFile\n     */\n    public function __construct(\n        string $command,\n        ?string $outputFile,\n        ?ExecutableHandler $executableHandler = null,\n    ) {\n        $this->command = $command;\n        $this->outputFile = $outputFile;\n        $this->executableHandler = $executableHandler ?: new ExecutableHandler();\n    }\n\n    /**\n     * Gets the unique key for caching\n     * The format for the cache key is:\n     * Command.OutputFile\n     *\n     * @return ?string\n     */\n    public function getCacheKey(): ?string\n    {\n        return $this->command . '.' . $this->outputFile;\n    }\n\n    /**\n     * @param callable|null $httpHandler unused.\n     * @return string\n     * @throws RuntimeException if the executable is not allowed to run.\n     * @throws ExecutableResponseError if the executable response is invalid.\n     */\n    public function fetchSubjectToken(?callable $httpHandler = null): string\n    {\n        // Check if the executable is allowed to run.\n        if (getenv(self::GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES) !== '1') {\n            throw new RuntimeException(\n                'Pluggable Auth executables need to be explicitly allowed to run by '\n                . 'setting the GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES environment '\n                . 'Variable to 1.'\n            );\n        }\n\n        if (!$executableResponse = $this->getCachedExecutableResponse()) {\n            // Run the executable.\n            $exitCode = ($this->executableHandler)($this->command);\n            $output = $this->executableHandler->getOutput();\n\n            // If the exit code is not 0, throw an exception with the output as the error details\n            if ($exitCode !== 0) {\n                throw new ExecutableResponseError(\n                    'The executable failed to run'\n                    . ($output ? ' with the following error: ' . $output : '.'),\n                    (string) $exitCode\n                );\n            }\n\n            $executableResponse = $this->parseExecutableResponse($output);\n\n            // Validate expiration.\n            if (isset($executableResponse['expiration_time']) && time() >= $executableResponse['expiration_time']) {\n                throw new ExecutableResponseError('Executable response is expired.');\n            }\n        }\n\n        // Throw error when the request was unsuccessful\n        if ($executableResponse['success'] === false) {\n            throw new ExecutableResponseError($executableResponse['message'], (string) $executableResponse['code']);\n        }\n\n        // Return subject token field based on the token type\n        return $executableResponse['token_type'] === self::SAML_SUBJECT_TOKEN_TYPE\n            ? $executableResponse['saml_response']\n            : $executableResponse['id_token'];\n    }\n\n    /**\n     * @return array<string, mixed>|null\n     */\n    private function getCachedExecutableResponse(): ?array\n    {\n        if (\n            $this->outputFile\n            && file_exists($this->outputFile)\n            && !empty(trim($outputFileContents = (string) file_get_contents($this->outputFile)))\n        ) {\n            try {\n                $executableResponse = $this->parseExecutableResponse($outputFileContents);\n            } catch (ExecutableResponseError $e) {\n                throw new ExecutableResponseError(\n                    'Error in output file: ' . $e->getMessage(),\n                    'INVALID_OUTPUT_FILE'\n                );\n            }\n\n            if ($executableResponse['success'] === false) {\n                // If the cached token was unsuccessful, run the executable to get a new one.\n                return null;\n            }\n\n            if (isset($executableResponse['expiration_time']) && time() >= $executableResponse['expiration_time']) {\n                // If the cached token is expired, run the executable to get a new one.\n                return null;\n            }\n\n            return $executableResponse;\n        }\n\n        return null;\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function parseExecutableResponse(string $response): array\n    {\n        $executableResponse = json_decode($response, true);\n        if (json_last_error() !== JSON_ERROR_NONE) {\n            throw new ExecutableResponseError(\n                'The executable returned an invalid response: ' . $response,\n                'INVALID_RESPONSE'\n            );\n        }\n        if (!array_key_exists('version', $executableResponse)) {\n            throw new ExecutableResponseError('Executable response must contain a \"version\" field.');\n        }\n        if (!array_key_exists('success', $executableResponse)) {\n            throw new ExecutableResponseError('Executable response must contain a \"success\" field.');\n        }\n\n        // Validate required fields for a successful response.\n        if ($executableResponse['success']) {\n            // Validate token type field.\n            $tokenTypes = [self::SAML_SUBJECT_TOKEN_TYPE, self::OIDC_SUBJECT_TOKEN_TYPE1, self::OIDC_SUBJECT_TOKEN_TYPE2];\n            if (!isset($executableResponse['token_type'])) {\n                throw new ExecutableResponseError(\n                    'Executable response must contain a \"token_type\" field when successful'\n                );\n            }\n            if (!in_array($executableResponse['token_type'], $tokenTypes)) {\n                throw new ExecutableResponseError(sprintf(\n                    'Executable response \"token_type\" field must be one of %s.',\n                    implode(', ', $tokenTypes)\n                ));\n            }\n\n            // Validate subject token for SAML and OIDC.\n            if ($executableResponse['token_type'] === self::SAML_SUBJECT_TOKEN_TYPE) {\n                if (empty($executableResponse['saml_response'])) {\n                    throw new ExecutableResponseError(sprintf(\n                        'Executable response must contain a \"saml_response\" field when token_type=%s.',\n                        self::SAML_SUBJECT_TOKEN_TYPE\n                    ));\n                }\n            } elseif (empty($executableResponse['id_token'])) {\n                throw new ExecutableResponseError(sprintf(\n                    'Executable response must contain a \"id_token\" field when '\n                    . 'token_type=%s.',\n                    $executableResponse['token_type']\n                ));\n            }\n\n            // Validate expiration exists when an output file is specified.\n            if ($this->outputFile) {\n                if (!isset($executableResponse['expiration_time'])) {\n                    throw new ExecutableResponseError(\n                        'The executable response must contain a \"expiration_time\" field for successful responses ' .\n                        'when an output_file has been specified in the configuration.'\n                    );\n                }\n            }\n        } else {\n            // Both code and message must be provided for unsuccessful responses.\n            if (!array_key_exists('code', $executableResponse)) {\n                throw new ExecutableResponseError('Executable response must contain a \"code\" field when unsuccessful.');\n            }\n            if (empty($executableResponse['message'])) {\n                throw new ExecutableResponseError('Executable response must contain a \"message\" field when unsuccessful.');\n            }\n        }\n\n        return $executableResponse;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/CredentialSource/FileSource.php",
    "content": "<?php\n/*\n * Copyright 2023 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\CredentialSource;\n\nuse Google\\Auth\\ExternalAccountCredentialSourceInterface;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\n/**\n * Retrieve a token from a file.\n */\nclass FileSource implements ExternalAccountCredentialSourceInterface\n{\n    private string $file;\n    private ?string $format;\n    private ?string $subjectTokenFieldName;\n\n    /**\n     * @param string $file                       The file to read the subject token from.\n     * @param string|null $format                The format of the token in the file. Can be null or \"json\".\n     * @param string|null $subjectTokenFieldName The name of the field containing the token in the file. This is required\n     *                                           when format is \"json\".\n     */\n    public function __construct(\n        string $file,\n        ?string $format = null,\n        ?string $subjectTokenFieldName = null\n    ) {\n        $this->file = $file;\n\n        if ($format === 'json' && is_null($subjectTokenFieldName)) {\n            throw new InvalidArgumentException(\n                'subject_token_field_name must be set when format is JSON'\n            );\n        }\n\n        $this->format = $format;\n        $this->subjectTokenFieldName = $subjectTokenFieldName;\n    }\n\n    public function fetchSubjectToken(?callable $httpHandler = null): string\n    {\n        $contents = file_get_contents($this->file);\n        if ($this->format === 'json') {\n            if (!$json = json_decode((string) $contents, true)) {\n                throw new UnexpectedValueException(\n                    'Unable to decode JSON file'\n                );\n            }\n            if (!isset($json[$this->subjectTokenFieldName])) {\n                throw new UnexpectedValueException(\n                    'subject_token_field_name not found in JSON file'\n                );\n            }\n            $contents = $json[$this->subjectTokenFieldName];\n        }\n\n        return $contents;\n    }\n\n    /**\n     * Gets the unique key for caching.\n     * The format for the cache key one of the following:\n     * Filename\n     *\n     * @return string\n     */\n    public function getCacheKey(): ?string\n    {\n        return $this->file;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/CredentialSource/UrlSource.php",
    "content": "<?php\n/*\n * Copyright 2023 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\CredentialSource;\n\nuse Google\\Auth\\ExternalAccountCredentialSourceInterface;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse GuzzleHttp\\Psr7\\Request;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\n/**\n * Retrieve a token from a URL.\n */\nclass UrlSource implements ExternalAccountCredentialSourceInterface\n{\n    private string $url;\n    private ?string $format;\n    private ?string $subjectTokenFieldName;\n\n    /**\n     * @var array<string, string|string[]>\n     */\n    private ?array $headers;\n\n    /**\n     * @param string $url                        The URL to fetch the subject token from.\n     * @param string|null $format                The format of the token in the response. Can be null or \"json\".\n     * @param string|null $subjectTokenFieldName The name of the field containing the token in the response. This is required\n     *                                      when format is \"json\".\n     * @param array<string, string|string[]>|null $headers Request headers to send in with the request to the URL.\n     */\n    public function __construct(\n        string $url,\n        ?string $format = null,\n        ?string $subjectTokenFieldName = null,\n        ?array $headers = null\n    ) {\n        $this->url = $url;\n\n        if ($format === 'json' && is_null($subjectTokenFieldName)) {\n            throw new InvalidArgumentException(\n                'subject_token_field_name must be set when format is JSON'\n            );\n        }\n\n        $this->format = $format;\n        $this->subjectTokenFieldName = $subjectTokenFieldName;\n        $this->headers = $headers;\n    }\n\n    public function fetchSubjectToken(?callable $httpHandler = null): string\n    {\n        if (is_null($httpHandler)) {\n            $httpHandler = HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        }\n\n        $request = new Request(\n            'GET',\n            $this->url,\n            $this->headers ?: []\n        );\n\n        $response = $httpHandler($request);\n        $body = (string) $response->getBody();\n        if ($this->format === 'json') {\n            if (!$json = json_decode((string) $body, true)) {\n                throw new UnexpectedValueException(\n                    'Unable to decode JSON response'\n                );\n            }\n            if (!isset($json[$this->subjectTokenFieldName])) {\n                throw new UnexpectedValueException(\n                    'subject_token_field_name not found in JSON file'\n                );\n            }\n            $body = $json[$this->subjectTokenFieldName];\n        }\n\n        return $body;\n    }\n\n    /**\n     * Get the cache key for the credentials.\n     * The format for the cache key is:\n     * URL\n     *\n     * @return ?string\n     */\n    public function getCacheKey(): ?string\n    {\n        return $this->url;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/AppIdentityCredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\n/*\n * The AppIdentityService class is automatically defined on App Engine,\n * so including this dependency is not necessary, and will result in a\n * PHP fatal error in the App Engine environment.\n */\nuse google\\appengine\\api\\app_identity\\AppIdentityService;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Auth\\SignBlobInterface;\n\n/**\n * @deprecated\n *\n * AppIdentityCredentials supports authorization on Google App Engine.\n *\n * It can be used to authorize requests using the AuthTokenMiddleware or\n * AuthTokenSubscriber, but will only succeed if being run on App Engine:\n *\n * Example:\n * ```\n * use Google\\Auth\\Credentials\\AppIdentityCredentials;\n * use Google\\Auth\\Middleware\\AuthTokenMiddleware;\n * use GuzzleHttp\\Client;\n * use GuzzleHttp\\HandlerStack;\n *\n * $gae = new AppIdentityCredentials('https://www.googleapis.com/auth/books');\n * $middleware = new AuthTokenMiddleware($gae);\n * $stack = HandlerStack::create();\n * $stack->push($middleware);\n *\n * $client = new Client([\n *     'handler' => $stack,\n *     'base_uri' => 'https://www.googleapis.com/books/v1',\n *     'auth' => 'google_auth'\n * ]);\n *\n * $res = $client->get('volumes?q=Henry+David+Thoreau&country=US');\n * ```\n */\nclass AppIdentityCredentials extends CredentialsLoader implements\n    SignBlobInterface,\n    ProjectIdProviderInterface\n{\n    /**\n     * Result of fetchAuthToken.\n     *\n     * @var array<mixed>\n     */\n    protected $lastReceivedToken;\n\n    /**\n     * Array of OAuth2 scopes to be requested.\n     *\n     * @var string[]\n     */\n    private $scope;\n\n    /**\n     * @var string\n     */\n    private $clientName;\n\n    /**\n     * @param string|string[] $scope One or more scopes.\n     */\n    public function __construct($scope = [])\n    {\n        $this->scope = is_array($scope) ? $scope : explode(' ', (string) $scope);\n    }\n\n    /**\n     * Determines if this an App Engine instance, by accessing the\n     * SERVER_SOFTWARE environment variable (prod) or the APPENGINE_RUNTIME\n     * environment variable (dev).\n     *\n     * @return bool true if this an App Engine Instance, false otherwise\n     */\n    public static function onAppEngine()\n    {\n        $appEngineProduction = isset($_SERVER['SERVER_SOFTWARE']) &&\n            0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine');\n        if ($appEngineProduction) {\n            return true;\n        }\n        $appEngineDevAppServer = isset($_SERVER['APPENGINE_RUNTIME']) &&\n            $_SERVER['APPENGINE_RUNTIME'] == 'php';\n        if ($appEngineDevAppServer) {\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Implements FetchAuthTokenInterface#fetchAuthToken.\n     *\n     * Fetches the auth tokens using the AppIdentityService if available.\n     * As the AppIdentityService uses protobufs to fetch the access token,\n     * the GuzzleHttp\\ClientInterface instance passed in will not be used.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> {\n     *     A set of auth related metadata, containing the following\n     *\n     *     @type string $access_token\n     *     @type string $expiration_time\n     * }\n     */\n    public function fetchAuthToken(?callable $httpHandler = null)\n    {\n        try {\n            $this->checkAppEngineContext();\n        } catch (\\Exception $e) {\n            return [];\n        }\n\n        /** @phpstan-ignore-next-line */\n        $token = AppIdentityService::getAccessToken($this->scope);\n        $this->lastReceivedToken = $token;\n\n        return $token;\n    }\n\n    /**\n     * Sign a string using AppIdentityService.\n     *\n     * @param string $stringToSign The string to sign.\n     * @param bool $forceOpenSsl [optional] Does not apply to this credentials\n     *        type.\n     * @return string The signature, base64-encoded.\n     * @throws \\Exception If AppEngine SDK or mock is not available.\n     */\n    public function signBlob($stringToSign, $forceOpenSsl = false)\n    {\n        $this->checkAppEngineContext();\n\n        /** @phpstan-ignore-next-line */\n        return base64_encode(AppIdentityService::signForApp($stringToSign)['signature']);\n    }\n\n    /**\n     * Get the project ID from AppIdentityService.\n     *\n     * Returns null if AppIdentityService is unavailable.\n     *\n     * @param callable|null $httpHandler Not used by this type.\n     * @return string|null\n     */\n    public function getProjectId(?callable $httpHandler = null)\n    {\n        try {\n            $this->checkAppEngineContext();\n        } catch (\\Exception $e) {\n            return null;\n        }\n\n        /** @phpstan-ignore-next-line */\n        return AppIdentityService::getApplicationId();\n    }\n\n    /**\n     * Get the client name from AppIdentityService.\n     *\n     * Subsequent calls to this method will return a cached value.\n     *\n     * @param callable|null $httpHandler Not used in this implementation.\n     * @return string\n     * @throws \\Exception If AppEngine SDK or mock is not available.\n     */\n    public function getClientName(?callable $httpHandler = null)\n    {\n        $this->checkAppEngineContext();\n\n        if (!$this->clientName) {\n            /** @phpstan-ignore-next-line */\n            $this->clientName = AppIdentityService::getServiceAccountName();\n        }\n\n        return $this->clientName;\n    }\n\n    /**\n     * @return array{access_token:string,expires_at:int}|null\n     */\n    public function getLastReceivedToken()\n    {\n        if ($this->lastReceivedToken) {\n            return [\n                'access_token' => $this->lastReceivedToken['access_token'],\n                'expires_at' => $this->lastReceivedToken['expiration_time'],\n            ];\n        }\n\n        return null;\n    }\n\n    /**\n     * Caching is handled by the underlying AppIdentityService, return empty string\n     * to prevent caching.\n     *\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        return '';\n    }\n\n    /**\n     * @return void\n     */\n    private function checkAppEngineContext()\n    {\n        if (!self::onAppEngine() || !class_exists('google\\appengine\\api\\app_identity\\AppIdentityService')) {\n            throw new \\Exception(\n                'This class must be run in App Engine, or you must include the AppIdentityService '\n                . 'mock class defined in tests/mocks/AppIdentityService.php'\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/ExternalAccountCredentials.php",
    "content": "<?php\n/*\n * Copyright 2023 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse Google\\Auth\\CredentialSource\\AwsNativeSource;\nuse Google\\Auth\\CredentialSource\\ExecutableSource;\nuse Google\\Auth\\CredentialSource\\FileSource;\nuse Google\\Auth\\CredentialSource\\UrlSource;\nuse Google\\Auth\\ExecutableHandler\\ExecutableHandler;\nuse Google\\Auth\\ExternalAccountCredentialSourceInterface;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\OAuth2;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Auth\\UpdateMetadataInterface;\nuse Google\\Auth\\UpdateMetadataTrait;\nuse GuzzleHttp\\Psr7\\Request;\nuse InvalidArgumentException;\n\n/**\n * **IMPORTANT**:\n * This class does not validate the credential configuration. A security\n * risk occurs when a credential configuration configured with malicious urls\n * is used.\n * When the credential configuration is accepted from an\n * untrusted source, you should validate it before creating this class.\n * @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n */\nclass ExternalAccountCredentials implements\n    FetchAuthTokenInterface,\n    UpdateMetadataInterface,\n    GetQuotaProjectInterface,\n    GetUniverseDomainInterface,\n    ProjectIdProviderInterface\n{\n    use UpdateMetadataTrait;\n\n    private const EXTERNAL_ACCOUNT_TYPE = 'external_account';\n    private const CLOUD_RESOURCE_MANAGER_URL = 'https://cloudresourcemanager.UNIVERSE_DOMAIN/v1/projects/%s';\n\n    private OAuth2 $auth;\n    private ?string $quotaProject;\n    private ?string $serviceAccountImpersonationUrl;\n    private ?string $workforcePoolUserProject;\n    private ?string $projectId;\n    /** @var array<mixed> */\n    private ?array $lastImpersonatedAccessToken;\n    private string $universeDomain;\n\n    /**\n     * @param string|string[] $scope   The scope of the access request, expressed either as an array\n     *                                 or as a space-delimited string.\n     * @param array<mixed>    $jsonKey JSON credentials as an associative array.\n     */\n    public function __construct(\n        $scope,\n        array $jsonKey\n    ) {\n        if (!array_key_exists('type', $jsonKey)) {\n            throw new InvalidArgumentException('json key is missing the type field');\n        }\n        if ($jsonKey['type'] !== self::EXTERNAL_ACCOUNT_TYPE) {\n            throw new InvalidArgumentException(sprintf(\n                'expected \"%s\" type but received \"%s\"',\n                self::EXTERNAL_ACCOUNT_TYPE,\n                $jsonKey['type']\n            ));\n        }\n\n        if (!array_key_exists('token_url', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the token_url field'\n            );\n        }\n\n        if (!array_key_exists('audience', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the audience field'\n            );\n        }\n\n        if (!array_key_exists('subject_token_type', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the subject_token_type field'\n            );\n        }\n\n        if (!array_key_exists('credential_source', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the credential_source field'\n            );\n        }\n\n        $this->serviceAccountImpersonationUrl = $jsonKey['service_account_impersonation_url'] ?? null;\n\n        $this->quotaProject = $jsonKey['quota_project_id'] ?? null;\n        $this->workforcePoolUserProject = $jsonKey['workforce_pool_user_project'] ?? null;\n        $this->universeDomain = $jsonKey['universe_domain'] ?? GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN;\n\n        $this->auth = new OAuth2([\n            'tokenCredentialUri' => $jsonKey['token_url'],\n            'audience' => $jsonKey['audience'],\n            'scope' => $scope,\n            'subjectTokenType' => $jsonKey['subject_token_type'],\n            'subjectTokenFetcher' => self::buildCredentialSource($jsonKey),\n            'additionalOptions' => $this->workforcePoolUserProject\n                ? ['userProject' => $this->workforcePoolUserProject]\n                : [],\n        ]);\n\n        if (!$this->isWorkforcePool() && $this->workforcePoolUserProject) {\n            throw new InvalidArgumentException(\n                'workforce_pool_user_project should not be set for non-workforce pool credentials.'\n            );\n        }\n    }\n\n    /**\n     * @param array<mixed> $jsonKey\n     */\n    private static function buildCredentialSource(array $jsonKey): ExternalAccountCredentialSourceInterface\n    {\n        $credentialSource = $jsonKey['credential_source'];\n        if (isset($credentialSource['file'])) {\n            return new FileSource(\n                $credentialSource['file'],\n                $credentialSource['format']['type'] ?? null,\n                $credentialSource['format']['subject_token_field_name'] ?? null\n            );\n        }\n\n        if (\n            isset($credentialSource['environment_id'])\n            && 1 === preg_match('/^aws(\\d+)$/', $credentialSource['environment_id'], $matches)\n        ) {\n            if ($matches[1] !== '1') {\n                throw new InvalidArgumentException(\n                    \"aws version \\\"$matches[1]\\\" is not supported in the current build.\"\n                );\n            }\n            if (!array_key_exists('regional_cred_verification_url', $credentialSource)) {\n                throw new InvalidArgumentException(\n                    'The regional_cred_verification_url field is required for aws1 credential source.'\n                );\n            }\n\n            return new AwsNativeSource(\n                $jsonKey['audience'],\n                $credentialSource['regional_cred_verification_url'],   // $regionalCredVerificationUrl\n                $credentialSource['region_url'] ?? null,               // $regionUrl\n                $credentialSource['url'] ?? null,                      // $securityCredentialsUrl\n                $credentialSource['imdsv2_session_token_url'] ?? null, // $imdsV2TokenUrl\n            );\n        }\n\n        if (isset($credentialSource['url'])) {\n            return new UrlSource(\n                $credentialSource['url'],\n                $credentialSource['format']['type'] ?? null,\n                $credentialSource['format']['subject_token_field_name'] ?? null,\n                $credentialSource['headers'] ?? null,\n            );\n        }\n\n        if (isset($credentialSource['executable'])) {\n            if (!array_key_exists('command', $credentialSource['executable'])) {\n                throw new InvalidArgumentException(\n                    'executable source requires a command to be set in the JSON file.'\n                );\n            }\n\n            // Build command environment variables\n            $env = [\n                'GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE' => $jsonKey['audience'],\n                'GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE' => $jsonKey['subject_token_type'],\n                // Always set to 0 because interactive mode is not supported.\n                'GOOGLE_EXTERNAL_ACCOUNT_INTERACTIVE' => '0',\n            ];\n\n            if ($outputFile = $credentialSource['executable']['output_file'] ?? null) {\n                $env['GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE'] = $outputFile;\n            }\n\n            if ($serviceAccountImpersonationUrl = $jsonKey['service_account_impersonation_url'] ?? null) {\n                // Parse email from URL. The formal looks as follows:\n                // https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/name@project-id.iam.gserviceaccount.com:generateAccessToken\n                $regex = '/serviceAccounts\\/(?<email>[^:]+):generateAccessToken$/';\n                if (preg_match($regex, $serviceAccountImpersonationUrl, $matches)) {\n                    $env['GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL'] = $matches['email'];\n                }\n            }\n\n            $timeoutMs = $credentialSource['executable']['timeout_millis'] ?? null;\n\n            return new ExecutableSource(\n                $credentialSource['executable']['command'],\n                $outputFile,\n                $timeoutMs ? new ExecutableHandler($env, $timeoutMs) : new ExecutableHandler($env)\n            );\n        }\n\n        throw new InvalidArgumentException('Unable to determine credential source from json key.');\n    }\n\n    /**\n     * @param string $stsToken\n     * @param callable|null $httpHandler\n     *\n     * @return array<mixed> {\n     *     A set of auth related metadata, containing the following\n     *\n     *     @type string $access_token\n     *     @type int $expires_at\n     * }\n     */\n    private function getImpersonatedAccessToken(string $stsToken, ?callable $httpHandler = null): array\n    {\n        if (!isset($this->serviceAccountImpersonationUrl)) {\n            throw new InvalidArgumentException(\n                'service_account_impersonation_url must be set in JSON credentials.'\n            );\n        }\n        $request = new Request(\n            'POST',\n            $this->serviceAccountImpersonationUrl,\n            [\n                'Content-Type' => 'application/json',\n                'Authorization' => 'Bearer ' . $stsToken,\n            ],\n            (string) json_encode([\n                'lifetime' => sprintf('%ss', OAuth2::DEFAULT_EXPIRY_SECONDS),\n                'scope' => explode(' ', $this->auth->getScope()),\n            ]),\n        );\n        if (is_null($httpHandler)) {\n            $httpHandler = HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        }\n        $response = $httpHandler($request);\n        $body = json_decode((string) $response->getBody(), true);\n        return [\n            'access_token' => $body['accessToken'],\n            'expires_at' => strtotime($body['expireTime']),\n        ];\n    }\n\n    /**\n     * @param callable|null $httpHandler\n     * @param array<mixed> $headers [optional] Metrics headers to be inserted\n     *     into the token endpoint request present.\n     *\n     * @return array<mixed> {\n     *     A set of auth related metadata, containing the following\n     *\n     *     @type string $access_token\n     *     @type int $expires_at (impersonated service accounts only)\n     *     @type int $expires_in (identity pool only)\n     *     @type string $issued_token_type (identity pool only)\n     *     @type string $token_type (identity pool only)\n     * }\n     */\n    public function fetchAuthToken(?callable $httpHandler = null, array $headers = [])\n    {\n        $stsToken = $this->auth->fetchAuthToken($httpHandler, $headers);\n\n        if (isset($this->serviceAccountImpersonationUrl)) {\n            return $this->lastImpersonatedAccessToken = $this->getImpersonatedAccessToken(\n                $stsToken['access_token'],\n                $httpHandler\n            );\n        }\n\n        return $stsToken;\n    }\n\n    /**\n     * Get the cache token key for the credentials.\n     * The cache token key format depends on the type of source\n     * The format for the cache key one of the following:\n     * FetcherCacheKey.Scope.[ServiceAccount].[TokenType].[WorkforcePoolUserProject]\n     * FetcherCacheKey.Audience.[ServiceAccount].[TokenType].[WorkforcePoolUserProject]\n     *\n     * @return ?string;\n     */\n    public function getCacheKey(): ?string\n    {\n        $scopeOrAudience = $this->auth->getAudience();\n        if (!$scopeOrAudience) {\n            $scopeOrAudience = $this->auth->getScope();\n        }\n\n        return $this->auth->getSubjectTokenFetcher()->getCacheKey() .\n            '.' . $scopeOrAudience .\n            '.' . ($this->serviceAccountImpersonationUrl ?? '') .\n            '.' . ($this->auth->getSubjectTokenType() ?? '') .\n            '.' . ($this->workforcePoolUserProject ?? '');\n    }\n\n    public function getLastReceivedToken()\n    {\n        return $this->lastImpersonatedAccessToken ?? $this->auth->getLastReceivedToken();\n    }\n\n    /**\n     * Get the quota project used for this API request\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        return $this->quotaProject;\n    }\n\n    /**\n     * Get the universe domain used for this API request\n     *\n     * @return string\n     */\n    public function getUniverseDomain(): string\n    {\n        return $this->universeDomain;\n    }\n\n    /**\n     * Get the project ID.\n     *\n     * @param callable|null $httpHandler Callback which delivers psr7 request\n     * @param string|null $accessToken The access token to use to sign the blob. If\n     *        provided, saves a call to the metadata server for a new access\n     *        token. **Defaults to** `null`.\n     * @return string|null\n     */\n    public function getProjectId(?callable $httpHandler = null, ?string $accessToken = null)\n    {\n        if (isset($this->projectId)) {\n            return $this->projectId;\n        }\n\n        $projectNumber = $this->getProjectNumber() ?: $this->workforcePoolUserProject;\n        if (!$projectNumber) {\n            return null;\n        }\n\n        if (is_null($httpHandler)) {\n            $httpHandler = HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        }\n\n        $url = str_replace(\n            'UNIVERSE_DOMAIN',\n            $this->getUniverseDomain(),\n            sprintf(self::CLOUD_RESOURCE_MANAGER_URL, $projectNumber)\n        );\n\n        if (is_null($accessToken)) {\n            $accessToken = $this->fetchAuthToken($httpHandler)['access_token'];\n        }\n\n        $request = new Request('GET', $url, ['authorization' => 'Bearer ' . $accessToken]);\n        $response = $httpHandler($request);\n\n        $body = json_decode((string) $response->getBody(), true);\n        return $this->projectId = $body['projectId'];\n    }\n\n    private function getProjectNumber(): ?string\n    {\n        $parts = explode('/', $this->auth->getAudience());\n        $i = array_search('projects', $parts);\n        return $parts[$i + 1] ?? null;\n    }\n\n    private function isWorkforcePool(): bool\n    {\n        $regex = '#//iam\\.googleapis\\.com/locations/[^/]+/workforcePools/#';\n        return preg_match($regex, $this->auth->getAudience()) === 1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/GCECredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse COM;\nuse com_exception;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\Iam;\nuse Google\\Auth\\IamSignerTrait;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Auth\\SignBlobInterface;\nuse GuzzleHttp\\Exception\\ClientException;\nuse GuzzleHttp\\Exception\\ConnectException;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Exception\\ServerException;\nuse GuzzleHttp\\Psr7\\Request;\nuse InvalidArgumentException;\n\n/**\n * GCECredentials supports authorization on Google Compute Engine.\n *\n * It can be used to authorize requests using the AuthTokenMiddleware, but will\n * only succeed if being run on GCE:\n *\n *   use Google\\Auth\\Credentials\\GCECredentials;\n *   use Google\\Auth\\Middleware\\AuthTokenMiddleware;\n *   use GuzzleHttp\\Client;\n *   use GuzzleHttp\\HandlerStack;\n *\n *   $gce = new GCECredentials();\n *   $middleware = new AuthTokenMiddleware($gce);\n *   $stack = HandlerStack::create();\n *   $stack->push($middleware);\n *\n *   $client = new Client([\n *      'handler' => $stack,\n *      'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',\n *      'auth' => 'google_auth'\n *   ]);\n *\n *   $res = $client->get('myproject/taskqueues/myqueue');\n */\nclass GCECredentials extends CredentialsLoader implements\n    SignBlobInterface,\n    ProjectIdProviderInterface,\n    GetQuotaProjectInterface\n{\n    use IamSignerTrait;\n\n    // phpcs:disable\n    const cacheKey = 'GOOGLE_AUTH_PHP_GCE';\n    // phpcs:enable\n\n    /**\n     * The metadata IP address on appengine instances.\n     *\n     * The IP is used instead of the domain 'metadata' to avoid slow responses\n     * when not on Compute Engine.\n     */\n    const METADATA_IP = '169.254.169.254';\n\n    /**\n     * The metadata path of the default token.\n     */\n    const TOKEN_URI_PATH = 'v1/instance/service-accounts/default/token';\n\n    /**\n     * The metadata path of the default id token.\n     */\n    const ID_TOKEN_URI_PATH = 'v1/instance/service-accounts/default/identity';\n\n    /**\n     * The metadata path of the client ID.\n     */\n    const CLIENT_ID_URI_PATH = 'v1/instance/service-accounts/default/email';\n\n    /**\n     * The metadata path of the project ID.\n     */\n    const PROJECT_ID_URI_PATH = 'v1/project/project-id';\n\n    /**\n     * The metadata path of the project ID.\n     */\n    const UNIVERSE_DOMAIN_URI_PATH = 'v1/universe/universe-domain';\n\n    /**\n     * The header whose presence indicates GCE presence.\n     */\n    const FLAVOR_HEADER = 'Metadata-Flavor';\n\n    /**\n     * The Linux file which contains the product name.\n     */\n    private const GKE_PRODUCT_NAME_FILE = '/sys/class/dmi/id/product_name';\n\n    /**\n     * The Windows Registry key path to the product name\n     */\n    private const WINDOWS_REGISTRY_KEY_PATH = 'HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\HardwareConfig\\\\Current\\\\';\n\n    /**\n     * The Windows registry key name for the product name\n     */\n    private const WINDOWS_REGISTRY_KEY_NAME = 'SystemProductName';\n\n    /**\n     * The Name of the product expected from the windows registry\n     */\n    private const PRODUCT_NAME = 'Google';\n\n    private const CRED_TYPE = 'mds';\n\n    /**\n     * Note: the explicit `timeout` and `tries` below is a workaround. The underlying\n     * issue is that resolving an unknown host on some networks will take\n     * 20-30 seconds; making this timeout short fixes the issue, but\n     * could lead to false negatives in the event that we are on GCE, but\n     * the metadata resolution was particularly slow. The latter case is\n     * \"unlikely\" since the expected 4-nines time is about 0.5 seconds.\n     * This allows us to limit the total ping maximum timeout to 1.5 seconds\n     * for developer desktop scenarios.\n     */\n    const MAX_COMPUTE_PING_TRIES = 3;\n    const COMPUTE_PING_CONNECTION_TIMEOUT_S = 0.5;\n\n    /**\n     * Flag used to ensure that the onGCE test is only done once;.\n     *\n     * @var bool\n     */\n    private $hasCheckedOnGce = false;\n\n    /**\n     * Flag that stores the value of the onGCE check.\n     *\n     * @var bool\n     */\n    private $isOnGce = false;\n\n    /**\n     * Result of fetchAuthToken.\n     *\n     * @var array<mixed>\n     */\n    protected $lastReceivedToken;\n\n    /**\n     * @var string|null\n     */\n    private $clientName;\n\n    /**\n     * @var string|null\n     */\n    private $projectId;\n\n    /**\n     * @var string\n     */\n    private $tokenUri;\n\n    /**\n     * @var string\n     */\n    private $targetAudience;\n\n    /**\n     * @var string|null\n     */\n    private $quotaProject;\n\n    /**\n     * @var string|null\n     */\n    private $serviceAccountIdentity;\n\n    /**\n     * @var string\n     */\n    private ?string $universeDomain;\n\n    /**\n     * @param Iam|null $iam [optional] An IAM instance.\n     * @param string|string[] $scope [optional] the scope of the access request,\n     *        expressed either as an array or as a space-delimited string.\n     * @param string $targetAudience [optional] The audience for the ID token.\n     * @param string $quotaProject [optional] Specifies a project to bill for access\n     *   charges associated with the request.\n     * @param string $serviceAccountIdentity [optional] Specify a service\n     *   account identity name to use instead of \"default\".\n     * @param string|null $universeDomain [optional] Specify a universe domain to use\n     *   instead of fetching one from the metadata server.\n     */\n    public function __construct(\n        ?Iam $iam = null,\n        $scope = null,\n        $targetAudience = null,\n        $quotaProject = null,\n        $serviceAccountIdentity = null,\n        ?string $universeDomain = null\n    ) {\n        $this->iam = $iam;\n\n        if ($scope && $targetAudience) {\n            throw new InvalidArgumentException(\n                'Scope and targetAudience cannot both be supplied'\n            );\n        }\n\n        $tokenUri = self::getTokenUri($serviceAccountIdentity);\n        if ($scope) {\n            if (is_string($scope)) {\n                $scope = explode(' ', $scope);\n            }\n\n            $scope = implode(',', $scope);\n\n            $tokenUri = $tokenUri . '?scopes=' . $scope;\n        } elseif ($targetAudience) {\n            $tokenUri = self::getIdTokenUri($serviceAccountIdentity);\n            $tokenUri = $tokenUri . '?audience=' . $targetAudience;\n            $this->targetAudience = $targetAudience;\n        }\n\n        $this->tokenUri = $tokenUri;\n        $this->quotaProject = $quotaProject;\n        $this->serviceAccountIdentity = $serviceAccountIdentity;\n        $this->universeDomain = $universeDomain;\n    }\n\n    /**\n     * The full uri for accessing the default token.\n     *\n     * @param string $serviceAccountIdentity [optional] Specify a service\n     *   account identity name to use instead of \"default\".\n     * @return string\n     */\n    public static function getTokenUri($serviceAccountIdentity = null)\n    {\n        $base = 'http://' . self::METADATA_IP . '/computeMetadata/';\n        $base .= self::TOKEN_URI_PATH;\n\n        if ($serviceAccountIdentity) {\n            return str_replace(\n                '/default/',\n                '/' . $serviceAccountIdentity . '/',\n                $base\n            );\n        }\n        return $base;\n    }\n\n    /**\n     * The full uri for accessing the default service account.\n     *\n     * @param string $serviceAccountIdentity [optional] Specify a service\n     *   account identity name to use instead of \"default\".\n     * @return string\n     */\n    public static function getClientNameUri($serviceAccountIdentity = null)\n    {\n        $base = 'http://' . self::METADATA_IP . '/computeMetadata/';\n        $base .= self::CLIENT_ID_URI_PATH;\n\n        if ($serviceAccountIdentity) {\n            return str_replace(\n                '/default/',\n                '/' . $serviceAccountIdentity . '/',\n                $base\n            );\n        }\n\n        return $base;\n    }\n\n    /**\n     * The full uri for accesesing the default identity token.\n     *\n     * @param string $serviceAccountIdentity [optional] Specify a service\n     *   account identity name to use instead of \"default\".\n     * @return string\n     */\n    private static function getIdTokenUri($serviceAccountIdentity = null)\n    {\n        $base = 'http://' . self::METADATA_IP . '/computeMetadata/';\n        $base .= self::ID_TOKEN_URI_PATH;\n\n        if ($serviceAccountIdentity) {\n            return str_replace(\n                '/default/',\n                '/' . $serviceAccountIdentity . '/',\n                $base\n            );\n        }\n\n        return $base;\n    }\n\n    /**\n     * The full uri for accessing the default project ID.\n     *\n     * @return string\n     */\n    private static function getProjectIdUri()\n    {\n        $base = 'http://' . self::METADATA_IP . '/computeMetadata/';\n\n        return $base . self::PROJECT_ID_URI_PATH;\n    }\n\n    /**\n     * The full uri for accessing the default universe domain.\n     *\n     * @return string\n     */\n    private static function getUniverseDomainUri()\n    {\n        $base = 'http://' . self::METADATA_IP . '/computeMetadata/';\n\n        return $base . self::UNIVERSE_DOMAIN_URI_PATH;\n    }\n\n    /**\n     * Determines if this an App Engine Flexible instance, by accessing the\n     * GAE_INSTANCE environment variable.\n     *\n     * @return bool true if this an App Engine Flexible Instance, false otherwise\n     */\n    public static function onAppEngineFlexible()\n    {\n        return substr((string) getenv('GAE_INSTANCE'), 0, 4) === 'aef-';\n    }\n\n    /**\n     * Determines if this a GCE instance, by accessing the expected metadata\n     * host.\n     * If $httpHandler is not specified a the default HttpHandler is used.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return bool True if this a GCEInstance, false otherwise\n     */\n    public static function onGce(?callable $httpHandler = null)\n    {\n        $httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        $checkUri = 'http://' . self::METADATA_IP;\n        for ($i = 1; $i <= self::MAX_COMPUTE_PING_TRIES; $i++) {\n            try {\n                // Comment from: oauth2client/client.py\n                //\n                // Note: the explicit `timeout` below is a workaround. The underlying\n                // issue is that resolving an unknown host on some networks will take\n                // 20-30 seconds; making this timeout short fixes the issue, but\n                // could lead to false negatives in the event that we are on GCE, but\n                // the metadata resolution was particularly slow. The latter case is\n                // \"unlikely\".\n                $resp = $httpHandler(\n                    new Request(\n                        'GET',\n                        $checkUri,\n                        [\n                            self::FLAVOR_HEADER => 'Google',\n                            self::$metricMetadataKey => self::getMetricsHeader('', 'mds')\n                        ]\n                    ),\n                    ['timeout' => self::COMPUTE_PING_CONNECTION_TIMEOUT_S]\n                );\n\n                return $resp->getHeaderLine(self::FLAVOR_HEADER) == 'Google';\n            } catch (ClientException $e) {\n            } catch (ServerException $e) {\n            } catch (RequestException $e) {\n            } catch (ConnectException $e) {\n            }\n        }\n\n        if (PHP_OS === 'Windows' || PHP_OS === 'WINNT') {\n            return self::detectResidencyWindows(\n                self::WINDOWS_REGISTRY_KEY_PATH . self::WINDOWS_REGISTRY_KEY_NAME\n            );\n        }\n\n        // Detect GCE residency on Linux\n        return self::detectResidencyLinux(self::GKE_PRODUCT_NAME_FILE);\n    }\n\n    private static function detectResidencyLinux(string $productNameFile): bool\n    {\n        if (file_exists($productNameFile)) {\n            $productName = trim((string) file_get_contents($productNameFile));\n            return 0 === strpos($productName, self::PRODUCT_NAME);\n        }\n        return false;\n    }\n\n    private static function detectResidencyWindows(string $registryProductKey): bool\n    {\n        if (!class_exists(COM::class)) {\n            // the COM extension must be installed and enabled to detect Windows residency\n            // see https://www.php.net/manual/en/book.com.php\n            return false;\n        }\n\n        $shell = new COM('WScript.Shell');\n        $productName = null;\n\n        try {\n            $productName = $shell->regRead($registryProductKey);\n        } catch (com_exception) {\n            // This means that we tried to read a key that doesn't exist on the registry\n            // which might mean that it is a windows instance that is not on GCE\n            return false;\n        }\n\n        return 0 === strpos($productName, self::PRODUCT_NAME);\n    }\n\n    /**\n     * Implements FetchAuthTokenInterface#fetchAuthToken.\n     *\n     * Fetches the auth tokens from the GCE metadata host if it is available.\n     * If $httpHandler is not specified a the default HttpHandler is used.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed> $headers [optional] Headers to be inserted\n     *     into the token endpoint request present.\n     *\n     * @return array<mixed> {\n     *     A set of auth related metadata, based on the token type.\n     *\n     *     @type string $access_token for access tokens\n     *     @type int    $expires_in   for access tokens\n     *     @type string $token_type   for access tokens\n     *     @type string $id_token     for ID tokens\n     * }\n     * @throws \\Exception\n     */\n    public function fetchAuthToken(?callable $httpHandler = null, array $headers = [])\n    {\n        $httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        if (!$this->hasCheckedOnGce) {\n            $this->isOnGce = self::onGce($httpHandler);\n            $this->hasCheckedOnGce = true;\n        }\n        if (!$this->isOnGce) {\n            return [];  // return an empty array with no access token\n        }\n\n        $response = $this->getFromMetadata(\n            $httpHandler,\n            $this->tokenUri,\n            $this->applyTokenEndpointMetrics($headers, $this->targetAudience ? 'it' : 'at')\n        );\n\n        if ($this->targetAudience) {\n            return $this->lastReceivedToken = ['id_token' => $response];\n        }\n\n        if (null === $json = json_decode($response, true)) {\n            throw new \\Exception('Invalid JSON response');\n        }\n\n        $json['expires_at'] = time() + $json['expires_in'];\n\n        // store this so we can retrieve it later\n        $this->lastReceivedToken = $json;\n\n        return $json;\n    }\n\n    /**\n     * Returns the Cache Key for the credential token.\n     * The format for the cache key is:\n     * TokenURI\n     *\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        return $this->tokenUri;\n    }\n\n    /**\n     * @return array<mixed>|null\n     */\n    public function getLastReceivedToken()\n    {\n        if ($this->lastReceivedToken) {\n            if (array_key_exists('id_token', $this->lastReceivedToken)) {\n                return $this->lastReceivedToken;\n            }\n\n            return [\n                'access_token' => $this->lastReceivedToken['access_token'],\n                'expires_at' => $this->lastReceivedToken['expires_at']\n            ];\n        }\n\n        return null;\n    }\n\n    /**\n     * Get the client name from GCE metadata.\n     *\n     * Subsequent calls will return a cached value.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return string\n     */\n    public function getClientName(?callable $httpHandler = null)\n    {\n        if ($this->clientName) {\n            return $this->clientName;\n        }\n\n        $httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        if (!$this->hasCheckedOnGce) {\n            $this->isOnGce = self::onGce($httpHandler);\n            $this->hasCheckedOnGce = true;\n        }\n\n        if (!$this->isOnGce) {\n            return '';\n        }\n\n        $this->clientName = $this->getFromMetadata(\n            $httpHandler,\n            self::getClientNameUri($this->serviceAccountIdentity)\n        );\n\n        return $this->clientName;\n    }\n\n    /**\n     * Fetch the default Project ID from compute engine.\n     *\n     * Returns null if called outside GCE.\n     *\n     * @param callable|null $httpHandler Callback which delivers psr7 request\n     * @return string|null\n     */\n    public function getProjectId(?callable $httpHandler = null)\n    {\n        if ($this->projectId) {\n            return $this->projectId;\n        }\n\n        $httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        if (!$this->hasCheckedOnGce) {\n            $this->isOnGce = self::onGce($httpHandler);\n            $this->hasCheckedOnGce = true;\n        }\n\n        if (!$this->isOnGce) {\n            return null;\n        }\n\n        $this->projectId = $this->getFromMetadata($httpHandler, self::getProjectIdUri());\n        return $this->projectId;\n    }\n\n    /**\n     * Fetch the default universe domain from the metadata server.\n     *\n     * @param callable|null $httpHandler Callback which delivers psr7 request\n     * @return string\n     */\n    public function getUniverseDomain(?callable $httpHandler = null): string\n    {\n        if (null !== $this->universeDomain) {\n            return $this->universeDomain;\n        }\n\n        $httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        if (!$this->hasCheckedOnGce) {\n            $this->isOnGce = self::onGce($httpHandler);\n            $this->hasCheckedOnGce = true;\n        }\n\n        try {\n            $this->universeDomain = $this->getFromMetadata(\n                $httpHandler,\n                self::getUniverseDomainUri()\n            );\n        } catch (ClientException $e) {\n            // If the metadata server exists, but returns a 404 for the universe domain, the auth\n            // libraries should safely assume this is an older metadata server running in GCU, and\n            // should return the default universe domain.\n            if (!$e->hasResponse() || 404 != $e->getResponse()->getStatusCode()) {\n                throw $e;\n            }\n            $this->universeDomain = self::DEFAULT_UNIVERSE_DOMAIN;\n        }\n\n        // We expect in some cases the metadata server will return an empty string for the universe\n        // domain. In this case, the auth library MUST return the default universe domain.\n        if ('' === $this->universeDomain) {\n            $this->universeDomain = self::DEFAULT_UNIVERSE_DOMAIN;\n        }\n\n        return $this->universeDomain;\n    }\n\n    /**\n     * Fetch the value of a GCE metadata server URI.\n     *\n     * @param callable $httpHandler An HTTP Handler to deliver PSR7 requests.\n     * @param string $uri The metadata URI.\n     * @param array<mixed> $headers [optional] If present, add these headers to the token\n     *        endpoint request.\n     *\n     * @return string\n     */\n    private function getFromMetadata(callable $httpHandler, $uri, array $headers = [])\n    {\n        $resp = $httpHandler(\n            new Request(\n                'GET',\n                $uri,\n                [self::FLAVOR_HEADER => 'Google'] + $headers\n            )\n        );\n\n        return (string) $resp->getBody();\n    }\n\n    /**\n     * Get the quota project used for this API request\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        return $this->quotaProject;\n    }\n\n    /**\n     * Set whether or not we've already checked the GCE environment.\n     *\n     * @param bool $isOnGce\n     *\n     * @return void\n     */\n    public function setIsOnGce($isOnGce)\n    {\n        // Implicitly set hasCheckedGce to true\n        $this->hasCheckedOnGce = true;\n\n        // Set isOnGce\n        $this->isOnGce = $isOnGce;\n    }\n\n    protected function getCredType(): string\n    {\n        return self::CRED_TYPE;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/IAMCredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\n/**\n * Authenticates requests using IAM credentials.\n */\nclass IAMCredentials\n{\n    const SELECTOR_KEY = 'x-goog-iam-authority-selector';\n    const TOKEN_KEY = 'x-goog-iam-authorization-token';\n\n    /**\n     * @var string\n     */\n    private $selector;\n\n    /**\n     * @var string\n     */\n    private $token;\n\n    /**\n     * @param string $selector the IAM selector\n     * @param string $token the IAM token\n     */\n    public function __construct($selector, $token)\n    {\n        if (!is_string($selector)) {\n            throw new \\InvalidArgumentException(\n                'selector must be a string'\n            );\n        }\n        if (!is_string($token)) {\n            throw new \\InvalidArgumentException(\n                'token must be a string'\n            );\n        }\n\n        $this->selector = $selector;\n        $this->token = $token;\n    }\n\n    /**\n     * export a callback function which updates runtime metadata.\n     *\n     * @return callable updateMetadata function\n     */\n    public function getUpdateMetadataFunc()\n    {\n        return [$this, 'updateMetadata'];\n    }\n\n    /**\n     * Updates metadata with the appropriate header metadata.\n     *\n     * @param array<mixed> $metadata metadata hashmap\n     * @param string $unusedAuthUri optional auth uri\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     *        Note: this param is unused here, only included here for\n     *        consistency with other credentials class\n     *\n     * @return array<mixed> updated metadata hashmap\n     */\n    public function updateMetadata(\n        $metadata,\n        $unusedAuthUri = null,\n        ?callable $httpHandler = null\n    ) {\n        $metadata_copy = $metadata;\n        $metadata_copy[self::SELECTOR_KEY] = $this->selector;\n        $metadata_copy[self::TOKEN_KEY] = $this->token;\n\n        return $metadata_copy;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/ImpersonatedServiceAccountCredentials.php",
    "content": "<?php\n\n/*\n * Copyright 2022 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse Google\\Auth\\CacheTrait;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\IamSignerTrait;\nuse Google\\Auth\\SignBlobInterface;\nuse GuzzleHttp\\Psr7\\Request;\nuse InvalidArgumentException;\nuse LogicException;\n\n/**\n * **IMPORTANT**:\n * This class does not validate the credential configuration. A security\n * risk occurs when a credential configuration configured with malicious urls\n * is used.\n * When the credential configuration is accepted from an\n * untrusted source, you should validate it before creating this class.\n * @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n */\nclass ImpersonatedServiceAccountCredentials extends CredentialsLoader implements\n    SignBlobInterface,\n    GetUniverseDomainInterface\n{\n    use CacheTrait;\n    use IamSignerTrait;\n\n    private const CRED_TYPE = 'imp';\n    private const IAM_SCOPE = 'https://www.googleapis.com/auth/iam';\n    private const ID_TOKEN_IMPERSONATION_URL =\n        'https://iamcredentials.UNIVERSE_DOMAIN/v1/projects/-/serviceAccounts/%s:generateIdToken';\n\n    /**\n     * @var string\n     */\n    protected $impersonatedServiceAccountName;\n\n    protected FetchAuthTokenInterface $sourceCredentials;\n\n    private string $serviceAccountImpersonationUrl;\n\n    /**\n     * @var string[]\n     */\n    private array $delegates;\n\n    /**\n     * @var string|string[]\n     */\n    private string|array $targetScope;\n\n    private int $lifetime;\n\n    /**\n     * Instantiate an instance of ImpersonatedServiceAccountCredentials from a credentials file that\n     * has be created with the --impersonate-service-account flag.\n     *\n     * @param string|string[]|null $scope   The scope of the access request, expressed either as an\n     *                                      array or as a space-delimited string.\n     * @param string|array<mixed>  $jsonKey JSON credential file path or JSON array credentials {\n     *     JSON credentials as an associative array.\n     *\n     *     @type string                         $service_account_impersonation_url The URL to the service account\n     *     @type string|FetchAuthTokenInterface $source_credentials The source credentials to impersonate\n     *     @type int                            $lifetime The lifetime of the impersonated credentials\n     *     @type string[]                       $delegates The delegates to impersonate\n     * }\n     * @param string|null $targetAudience The audience to request an ID token.\n     * @param string|string[]|null $defaultScope The scopes to be used if no \"scopes\" field exists\n     *                                           in the `$jsonKey`.\n     */\n    public function __construct(\n        string|array|null $scope,\n        string|array $jsonKey,\n        private ?string $targetAudience = null,\n        string|array|null $defaultScope = null,\n    ) {\n        if (is_string($jsonKey)) {\n            if (!file_exists($jsonKey)) {\n                throw new InvalidArgumentException('file does not exist');\n            }\n            $json = file_get_contents($jsonKey);\n            if (!$jsonKey = json_decode((string) $json, true)) {\n                throw new LogicException('invalid json for auth config');\n            }\n        }\n        if (!array_key_exists('service_account_impersonation_url', $jsonKey)) {\n            throw new LogicException(\n                'json key is missing the service_account_impersonation_url field'\n            );\n        }\n        if (!array_key_exists('source_credentials', $jsonKey)) {\n            throw new LogicException('json key is missing the source_credentials field');\n        }\n\n        $jsonKeyScope = $jsonKey['scopes'] ?? null;\n        $scope = $scope ?: $jsonKeyScope ?: $defaultScope;\n        if ($scope && $targetAudience) {\n            throw new InvalidArgumentException(\n                'Scope and targetAudience cannot both be supplied'\n            );\n        }\n        if (is_array($jsonKey['source_credentials'])) {\n            if (!array_key_exists('type', $jsonKey['source_credentials'])) {\n                throw new InvalidArgumentException('json key source credentials are missing the type field');\n            }\n            if (\n                $targetAudience !== null\n                && $jsonKey['source_credentials']['type'] === 'service_account'\n            ) {\n                // Service account tokens MUST request a scope, and as this token is only used to impersonate\n                // an ID token, the narrowest scope we can request is `iam`.\n                $scope = self::IAM_SCOPE;\n            }\n            $jsonKey['source_credentials'] = match ($jsonKey['source_credentials']['type'] ?? null) {\n                // Do not pass $defaultScope to ServiceAccountCredentials\n                'service_account' => new ServiceAccountCredentials($scope, $jsonKey['source_credentials']),\n                'authorized_user' => new UserRefreshCredentials($scope, $jsonKey['source_credentials']),\n                'external_account' => new ExternalAccountCredentials($scope, $jsonKey['source_credentials']),\n                default => throw new \\InvalidArgumentException('invalid value in the type field'),\n            };\n        }\n\n        $this->targetScope = $scope ?? [];\n        $this->lifetime = $jsonKey['lifetime'] ?? 3600;\n        $this->delegates = $jsonKey['delegates'] ?? [];\n\n        $this->serviceAccountImpersonationUrl = $jsonKey['service_account_impersonation_url'];\n        $this->impersonatedServiceAccountName = $this->getImpersonatedServiceAccountNameFromUrl(\n            $this->serviceAccountImpersonationUrl\n        );\n\n        $this->sourceCredentials = $jsonKey['source_credentials'];\n    }\n\n    /**\n     * Helper function for extracting the Server Account Name from the URL saved in the account\n     * credentials file.\n     *\n     * @param $serviceAccountImpersonationUrl string URL from \"service_account_impersonation_url\"\n     * @return string Service account email or ID.\n     */\n    private function getImpersonatedServiceAccountNameFromUrl(\n        string $serviceAccountImpersonationUrl\n    ): string {\n        $fields = explode('/', $serviceAccountImpersonationUrl);\n        $lastField = end($fields);\n        $splitter = explode(':', $lastField);\n        return $splitter[0];\n    }\n\n    /**\n     * Get the client name from the keyfile\n     *\n     * In this implementation, it will return the issuers email from the oauth token.\n     *\n     * @param callable|null $unusedHttpHandler not used by this credentials type.\n     * @return string Token issuer email\n     */\n    public function getClientName(?callable $unusedHttpHandler = null)\n    {\n        return $this->impersonatedServiceAccountName;\n    }\n\n    /**\n     * @param callable|null $httpHandler\n     *\n     * @return array<mixed> {\n     *     A set of auth related metadata, containing the following\n     *\n     *     @type string $access_token\n     *     @type int $expires_in\n     *     @type string $scope\n     *     @type string $token_type\n     *     @type string $id_token\n     * }\n     */\n    public function fetchAuthToken(?callable $httpHandler = null)\n    {\n        $httpHandler = $httpHandler ?? HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        // The FetchAuthTokenInterface technically does not have a \"headers\" argument, but all of\n        // the implementations do. Additionally, passing in more parameters than the function has\n        // defined is allowed in PHP. So we'll just ignore the phpstan error here.\n        // @phpstan-ignore-next-line\n        $authToken = $this->sourceCredentials->fetchAuthToken(\n            $httpHandler,\n            $this->applyTokenEndpointMetrics([], 'at')\n        );\n\n        $headers = $this->applyTokenEndpointMetrics([\n            'Content-Type' => 'application/json',\n            'Cache-Control' => 'no-store',\n            'Authorization' => sprintf('Bearer %s', $authToken['access_token'] ?? $authToken['id_token']),\n        ], $this->isIdTokenRequest() ? 'it' : 'at');\n\n        $body = match ($this->isIdTokenRequest()) {\n            true => [\n                'audience' => $this->targetAudience,\n                'includeEmail' => true,\n            ],\n            false => [\n                'scope' => $this->targetScope,\n                'delegates' => $this->delegates,\n                'lifetime' => sprintf('%ss', $this->lifetime),\n            ]\n        };\n\n        $url = $this->serviceAccountImpersonationUrl;\n        if ($this->isIdTokenRequest()) {\n            $regex = '/serviceAccounts\\/(?<email>[^:]+):generateAccessToken$/';\n            if (!preg_match($regex, $url, $matches)) {\n                throw new InvalidArgumentException(\n                    'Invalid service account impersonation URL - unable to parse service account email'\n                );\n            }\n            $url = str_replace(\n                'UNIVERSE_DOMAIN',\n                $this->getUniverseDomain(),\n                sprintf(self::ID_TOKEN_IMPERSONATION_URL, $matches['email'])\n            );\n        }\n\n        $request = new Request(\n            'POST',\n            $url,\n            $headers,\n            (string) json_encode($body)\n        );\n\n        $response = $httpHandler($request);\n        $body = json_decode((string) $response->getBody(), true);\n\n        return match ($this->isIdTokenRequest()) {\n            true => ['id_token' => $body['token']],\n            false => [\n                'access_token' => $body['accessToken'],\n                'expires_at' => strtotime($body['expireTime']),\n            ]\n        };\n    }\n\n    /**\n     * Returns the Cache Key for the credentials\n     * The cache key is the same as the UserRefreshCredentials class\n     *\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        return $this->getFullCacheKey(\n            $this->serviceAccountImpersonationUrl . $this->sourceCredentials->getCacheKey()\n        );\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    public function getLastReceivedToken()\n    {\n        return $this->sourceCredentials->getLastReceivedToken();\n    }\n\n    protected function getCredType(): string\n    {\n        return self::CRED_TYPE;\n    }\n\n    private function isIdTokenRequest(): bool\n    {\n        return !is_null($this->targetAudience);\n    }\n\n    public function getUniverseDomain(): string\n    {\n        return $this->sourceCredentials instanceof GetUniverseDomainInterface\n            ? $this->sourceCredentials->getUniverseDomain()\n            : self::DEFAULT_UNIVERSE_DOMAIN;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/InsecureCredentials.php",
    "content": "<?php\n/*\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse Google\\Auth\\FetchAuthTokenInterface;\n\n/**\n * Provides a set of credentials that will always return an empty access token.\n * This is useful for APIs which do not require authentication, for local\n * service emulators, and for testing.\n */\nclass InsecureCredentials implements FetchAuthTokenInterface\n{\n    /**\n     * @var array{access_token:string}\n     */\n    private $token = [\n        'access_token' => ''\n    ];\n\n    /**\n     * Fetches the auth token. In this case it returns an empty string.\n     *\n     * @param callable|null $httpHandler\n     * @return array{access_token:string} A set of auth related metadata\n     */\n    public function fetchAuthToken(?callable $httpHandler = null)\n    {\n        return $this->token;\n    }\n\n    /**\n     * Returns the cache key. In this case it returns a null value, disabling\n     * caching.\n     *\n     * @return string|null\n     */\n    public function getCacheKey()\n    {\n        return null;\n    }\n\n    /**\n     * Fetches the last received token. In this case, it returns the same empty string\n     * auth token.\n     *\n     * @return array{access_token:string}\n     */\n    public function getLastReceivedToken()\n    {\n        return $this->token;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse Firebase\\JWT\\JWT;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\Iam;\nuse Google\\Auth\\OAuth2;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Auth\\ServiceAccountSignerTrait;\nuse Google\\Auth\\SignBlobInterface;\nuse InvalidArgumentException;\n\n/**\n * ServiceAccountCredentials supports authorization using a Google service\n * account.\n *\n * (cf https://developers.google.com/accounts/docs/OAuth2ServiceAccount)\n *\n * It's initialized using the json key file that's downloadable from developer\n * console, which should contain a private_key and client_email fields that it\n * uses.\n *\n * Use it with AuthTokenMiddleware to authorize http requests:\n *\n *   use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n *   use Google\\Auth\\Middleware\\AuthTokenMiddleware;\n *   use GuzzleHttp\\Client;\n *   use GuzzleHttp\\HandlerStack;\n *\n *   $sa = new ServiceAccountCredentials(\n *       'https://www.googleapis.com/auth/taskqueue',\n *       '/path/to/your/json/key_file.json'\n *   );\n *   $middleware = new AuthTokenMiddleware($sa);\n *   $stack = HandlerStack::create();\n *   $stack->push($middleware);\n *\n *   $client = new Client([\n *       'handler' => $stack,\n *       'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',\n *       'auth' => 'google_auth' // authorize all requests\n *   ]);\n *\n *   $res = $client->get('myproject/taskqueues/myqueue');\n */\nclass ServiceAccountCredentials extends CredentialsLoader implements\n    GetQuotaProjectInterface,\n    SignBlobInterface,\n    ProjectIdProviderInterface\n{\n    use ServiceAccountSignerTrait;\n\n    /**\n     * Used in observability metric headers\n     *\n     * @var string\n     */\n    private const CRED_TYPE = 'sa';\n    private const IAM_SCOPE = 'https://www.googleapis.com/auth/iam';\n\n    /**\n     * The OAuth2 instance used to conduct authorization.\n     *\n     * @var OAuth2\n     */\n    protected $auth;\n\n    /**\n     * The quota project associated with the JSON credentials\n     *\n     * @var string\n     */\n    protected $quotaProject;\n\n    /**\n     * @var string|null\n     */\n    protected $projectId;\n\n    /**\n     * @var array<mixed>|null\n     */\n    private $lastReceivedJwtAccessToken;\n\n    /**\n     * @var bool\n     */\n    private $useJwtAccessWithScope = false;\n\n    /**\n     * @var ServiceAccountJwtAccessCredentials|null\n     */\n    private $jwtAccessCredentials;\n\n    /**\n     * @var string\n     */\n    private string $universeDomain;\n\n    /**\n     * Whether this is an ID token request or an access token request. Used when\n     * building the metric header.\n     */\n    private bool $isIdTokenRequest = false;\n\n    /**\n     * Create a new ServiceAccountCredentials.\n     *\n     * @param string|string[]|null $scope the scope of the access request, expressed\n     *   either as an Array or as a space-delimited String.\n     * @param string|array<mixed> $jsonKey JSON credential file path or JSON credentials\n     *   as an associative array\n     * @param string $sub an email address account to impersonate, in situations when\n     *   the service account has been delegated domain wide access.\n     * @param string $targetAudience The audience for the ID token.\n     */\n    public function __construct(\n        $scope,\n        $jsonKey,\n        $sub = null,\n        $targetAudience = null\n    ) {\n        if (is_string($jsonKey)) {\n            if (!file_exists($jsonKey)) {\n                throw new \\InvalidArgumentException('file does not exist');\n            }\n            $jsonKeyStream = file_get_contents($jsonKey);\n            if (!$jsonKey = json_decode((string) $jsonKeyStream, true)) {\n                throw new \\LogicException('invalid json for auth config');\n            }\n        }\n        if (!array_key_exists('client_email', $jsonKey)) {\n            throw new \\InvalidArgumentException(\n                'json key is missing the client_email field'\n            );\n        }\n        if (!array_key_exists('private_key', $jsonKey)) {\n            throw new \\InvalidArgumentException(\n                'json key is missing the private_key field'\n            );\n        }\n        if (array_key_exists('quota_project_id', $jsonKey)) {\n            $this->quotaProject = (string) $jsonKey['quota_project_id'];\n        }\n        if ($scope && $targetAudience) {\n            throw new InvalidArgumentException(\n                'Scope and targetAudience cannot both be supplied'\n            );\n        }\n        $additionalClaims = [];\n        if ($targetAudience) {\n            $additionalClaims = ['target_audience' => $targetAudience];\n            $this->isIdTokenRequest = true;\n        }\n        $this->auth = new OAuth2([\n            'audience' => self::TOKEN_CREDENTIAL_URI,\n            'issuer' => $jsonKey['client_email'],\n            'scope' => $scope,\n            'signingAlgorithm' => 'RS256',\n            'signingKey' => $jsonKey['private_key'],\n            'signingKeyId' => $jsonKey['private_key_id'] ?? null,\n            'sub' => $sub,\n            'tokenCredentialUri' => self::TOKEN_CREDENTIAL_URI,\n            'additionalClaims' => $additionalClaims,\n        ]);\n\n        $this->projectId = $jsonKey['project_id'] ?? null;\n        $this->universeDomain = $jsonKey['universe_domain'] ?? self::DEFAULT_UNIVERSE_DOMAIN;\n    }\n\n    /**\n     * When called, the ServiceAccountCredentials will use an instance of\n     * ServiceAccountJwtAccessCredentials to fetch (self-sign) an access token\n     * even when only scopes are supplied. Otherwise,\n     * ServiceAccountJwtAccessCredentials is only called when no scopes and an\n     * authUrl (audience) is suppled.\n     *\n     * @return void\n     */\n    public function useJwtAccessWithScope()\n    {\n        $this->useJwtAccessWithScope = true;\n    }\n\n    /**\n     * @param callable|null $httpHandler\n     * @param array<mixed> $headers [optional] Headers to be inserted\n     *     into the token endpoint request present.\n     *\n     * @return array<mixed> {\n     *     A set of auth related metadata, containing the following\n     *\n     *     @type string $access_token\n     *     @type int $expires_in\n     *     @type string $token_type\n     * }\n     */\n    public function fetchAuthToken(?callable $httpHandler = null, array $headers = [])\n    {\n        if ($this->useSelfSignedJwt()) {\n            $jwtCreds = $this->createJwtAccessCredentials();\n\n            $accessToken = $jwtCreds->fetchAuthToken($httpHandler);\n\n            if ($lastReceivedToken = $jwtCreds->getLastReceivedToken()) {\n                // Keep self-signed JWTs in memory as the last received token\n                $this->lastReceivedJwtAccessToken = $lastReceivedToken;\n            }\n\n            return $accessToken;\n        }\n\n        if ($this->isIdTokenRequest && $this->getUniverseDomain() !== self::DEFAULT_UNIVERSE_DOMAIN) {\n            $now = time();\n            $jwt = Jwt::encode(\n                [\n                    'iss' => $this->auth->getIssuer(),\n                    'sub' => $this->auth->getIssuer(),\n                    'scope' => self::IAM_SCOPE,\n                    'exp' => ($now + $this->auth->getExpiry()),\n                    'iat' => ($now - OAuth2::DEFAULT_SKEW_SECONDS),\n                ],\n                $this->auth->getSigningKey(),\n                $this->auth->getSigningAlgorithm(),\n                $this->auth->getSigningKeyId()\n            );\n            // We create a new instance of Iam each time because the `$httpHandler` might change.\n            $idToken = (new Iam($httpHandler, $this->getUniverseDomain()))->generateIdToken(\n                $this->auth->getIssuer(),\n                $this->auth->getAdditionalClaims()['target_audience'],\n                $jwt,\n                $this->applyTokenEndpointMetrics($headers, 'it')\n            );\n            return ['id_token' => $idToken];\n        }\n        return $this->auth->fetchAuthToken(\n            $httpHandler,\n            $this->applyTokenEndpointMetrics($headers, $this->isIdTokenRequest ? 'it' : 'at')\n        );\n    }\n\n    /**\n     * Return the Cache Key for the credentials.\n     * For the cache key format is one of the following:\n     * ClientEmail.Scope[.Sub]\n     * ClientEmail.Audience[.Sub]\n     *\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        $scopeOrAudience = $this->auth->getScope();\n        if (!$scopeOrAudience) {\n            $scopeOrAudience = $this->auth->getAudience();\n        }\n\n        $key = $this->auth->getIssuer() . '.' . $scopeOrAudience;\n        if ($sub = $this->auth->getSub()) {\n            $key .= '.' . $sub;\n        }\n\n        return $key;\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    public function getLastReceivedToken()\n    {\n        // If self-signed JWTs are being used, fetch the last received token\n        // from memory. Else, fetch it from OAuth2\n        return $this->useSelfSignedJwt()\n            ? $this->lastReceivedJwtAccessToken\n            : $this->auth->getLastReceivedToken();\n    }\n\n    /**\n     * Get the project ID from the service account keyfile.\n     *\n     * Returns null if the project ID does not exist in the keyfile.\n     *\n     * @param callable|null $httpHandler Not used by this credentials type.\n     * @return string|null\n     */\n    public function getProjectId(?callable $httpHandler = null)\n    {\n        return $this->projectId;\n    }\n\n    /**\n     * Updates metadata with the authorization token.\n     *\n     * @param array<mixed> $metadata metadata hashmap\n     * @param string $authUri optional auth uri\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> updated metadata hashmap\n     */\n    public function updateMetadata(\n        $metadata,\n        $authUri = null,\n        ?callable $httpHandler = null\n    ) {\n        // scope exists. use oauth implementation\n        if (!$this->useSelfSignedJwt()) {\n            return parent::updateMetadata($metadata, $authUri, $httpHandler);\n        }\n\n        $jwtCreds = $this->createJwtAccessCredentials();\n        if ($this->auth->getScope()) {\n            // Prefer user-provided \"scope\" to \"audience\"\n            $updatedMetadata = $jwtCreds->updateMetadata($metadata, null, $httpHandler);\n        } else {\n            $updatedMetadata = $jwtCreds->updateMetadata($metadata, $authUri, $httpHandler);\n        }\n\n        if ($lastReceivedToken = $jwtCreds->getLastReceivedToken()) {\n            // Keep self-signed JWTs in memory as the last received token\n            $this->lastReceivedJwtAccessToken = $lastReceivedToken;\n        }\n\n        return $updatedMetadata;\n    }\n\n    /**\n     * @return ServiceAccountJwtAccessCredentials\n     */\n    private function createJwtAccessCredentials()\n    {\n        if (!$this->jwtAccessCredentials) {\n            // Create credentials for self-signing a JWT (JwtAccess)\n            $credJson = [\n                'private_key' => $this->auth->getSigningKey(),\n                'client_email' => $this->auth->getIssuer(),\n            ];\n            $this->jwtAccessCredentials = new ServiceAccountJwtAccessCredentials(\n                $credJson,\n                $this->auth->getScope()\n            );\n        }\n\n        return $this->jwtAccessCredentials;\n    }\n\n    /**\n     * @param string $sub an email address account to impersonate, in situations when\n     *   the service account has been delegated domain wide access.\n     * @return void\n     */\n    public function setSub($sub)\n    {\n        $this->auth->setSub($sub);\n    }\n\n    /**\n     * Get the client name from the keyfile.\n     *\n     * In this case, it returns the keyfile's client_email key.\n     *\n     * @param callable|null $httpHandler Not used by this credentials type.\n     * @return string\n     */\n    public function getClientName(?callable $httpHandler = null)\n    {\n        return $this->auth->getIssuer();\n    }\n\n    /**\n     * Get the private key from the keyfile.\n     *\n     * In this case, it returns the keyfile's private_key key, needed for JWT signing.\n     *\n     * @return string\n     */\n    public function getPrivateKey()\n    {\n        return $this->auth->getSigningKey();\n    }\n\n    /**\n     * Get the quota project used for this API request\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        return $this->quotaProject;\n    }\n\n    /**\n     * Get the universe domain configured in the JSON credential.\n     *\n     * @return string\n     */\n    public function getUniverseDomain(): string\n    {\n        return $this->universeDomain;\n    }\n\n    protected function getCredType(): string\n    {\n        return self::CRED_TYPE;\n    }\n\n    /**\n     * @return bool\n     */\n    private function useSelfSignedJwt()\n    {\n        // When a sub is supplied, the user is using domain-wide delegation, which not available\n        // with self-signed JWTs\n        if (null !== $this->auth->getSub()) {\n            // If we are outside the GDU, we can't use domain-wide delegation\n            if ($this->getUniverseDomain() !== self::DEFAULT_UNIVERSE_DOMAIN) {\n                throw new \\LogicException(sprintf(\n                    'Service Account subject is configured for the credential. Domain-wide ' .\n                    'delegation is not supported in universes other than %s.',\n                    self::DEFAULT_UNIVERSE_DOMAIN\n                ));\n            }\n            return false;\n        }\n\n        // Do not use self-signed JWT for ID tokens\n        if ($this->isIdTokenRequest) {\n            return false;\n        }\n\n        // When true, ServiceAccountCredentials will always use JwtAccess for access tokens\n        if ($this->useJwtAccessWithScope) {\n            return true;\n        }\n\n        // If the universe domain is outside the GDU, use JwtAccess for access tokens\n        if ($this->getUniverseDomain() !== self::DEFAULT_UNIVERSE_DOMAIN) {\n            return true;\n        }\n\n        return is_null($this->auth->getScope());\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/ServiceAccountJwtAccessCredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\OAuth2;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Auth\\ServiceAccountSignerTrait;\nuse Google\\Auth\\SignBlobInterface;\n\n/**\n * Authenticates requests using Google's Service Account credentials via\n * JWT Access.\n *\n * This class allows authorizing requests for service accounts directly\n * from credentials from a json key file downloaded from the developer\n * console (via 'Generate new Json Key').  It is not part of any OAuth2\n * flow, rather it creates a JWT and sends that as a credential.\n */\nclass ServiceAccountJwtAccessCredentials extends CredentialsLoader implements\n    GetQuotaProjectInterface,\n    SignBlobInterface,\n    ProjectIdProviderInterface\n{\n    use ServiceAccountSignerTrait;\n\n    /**\n     * Used in observability metric headers\n     *\n     * @var string\n     */\n    private const CRED_TYPE = 'jwt';\n\n    /**\n     * The OAuth2 instance used to conduct authorization.\n     *\n     * @var OAuth2\n     */\n    protected $auth;\n\n    /**\n     * The quota project associated with the JSON credentials\n     *\n     * @var string\n     */\n    protected $quotaProject;\n\n    /**\n     * @var string\n     */\n    public $projectId;\n\n    /**\n     * Create a new ServiceAccountJwtAccessCredentials.\n     *\n     * @param string|array<mixed> $jsonKey JSON credential file path or JSON credentials\n     *   as an associative array\n     * @param string|string[] $scope the scope of the access request, expressed\n     *   either as an Array or as a space-delimited String.\n     */\n    public function __construct($jsonKey, $scope = null)\n    {\n        if (is_string($jsonKey)) {\n            if (!file_exists($jsonKey)) {\n                throw new \\InvalidArgumentException('file does not exist');\n            }\n            $jsonKeyStream = file_get_contents($jsonKey);\n            if (!$jsonKey = json_decode((string) $jsonKeyStream, true)) {\n                throw new \\LogicException('invalid json for auth config');\n            }\n        }\n        if (!array_key_exists('client_email', $jsonKey)) {\n            throw new \\InvalidArgumentException(\n                'json key is missing the client_email field'\n            );\n        }\n        if (!array_key_exists('private_key', $jsonKey)) {\n            throw new \\InvalidArgumentException(\n                'json key is missing the private_key field'\n            );\n        }\n        if (array_key_exists('quota_project_id', $jsonKey)) {\n            $this->quotaProject = (string) $jsonKey['quota_project_id'];\n        }\n        $this->auth = new OAuth2([\n            'issuer' => $jsonKey['client_email'],\n            'sub' => $jsonKey['client_email'],\n            'signingAlgorithm' => 'RS256',\n            'signingKey' => $jsonKey['private_key'],\n            'scope' => $scope,\n        ]);\n\n        $this->projectId = $jsonKey['project_id'] ?? null;\n    }\n\n    /**\n     * Updates metadata with the authorization token.\n     *\n     * @param array<mixed> $metadata metadata hashmap\n     * @param string $authUri optional auth uri\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> updated metadata hashmap\n     */\n    public function updateMetadata(\n        $metadata,\n        $authUri = null,\n        ?callable $httpHandler = null\n    ) {\n        $scope = $this->auth->getScope();\n        if (empty($authUri) && empty($scope)) {\n            return $metadata;\n        }\n\n        $this->auth->setAudience($authUri);\n\n        return parent::updateMetadata($metadata, $authUri, $httpHandler);\n    }\n\n    /**\n     * Implements FetchAuthTokenInterface#fetchAuthToken.\n     *\n     * @param callable|null $httpHandler\n     *\n     * @return null|array{access_token:string} A set of auth related metadata\n     */\n    public function fetchAuthToken(?callable $httpHandler = null)\n    {\n        $audience = $this->auth->getAudience();\n        $scope = $this->auth->getScope();\n        if (empty($audience) && empty($scope)) {\n            return null;\n        }\n\n        if (!empty($audience) && !empty($scope)) {\n            throw new \\UnexpectedValueException(\n                'Cannot sign both audience and scope in JwtAccess'\n            );\n        }\n\n        $access_token = $this->auth->toJwt();\n\n        // Set the self-signed access token in OAuth2 for getLastReceivedToken\n        $this->auth->setAccessToken($access_token);\n\n        return [\n            'access_token' => $access_token,\n            'expires_in' => $this->auth->getExpiry(),\n            'token_type' => 'Bearer'\n        ];\n    }\n\n    /**\n     * Return the cache key for the credentials.\n     * The format for the Cache Key one of the following:\n     * ClientEmail.Scope\n     * ClientEmail.Audience\n     *\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        $scopeOrAudience = $this->auth->getScope();\n        if (!$scopeOrAudience) {\n            $scopeOrAudience = $this->auth->getAudience();\n        }\n\n        return $this->auth->getIssuer() . '.' . $scopeOrAudience;\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    public function getLastReceivedToken()\n    {\n        return $this->auth->getLastReceivedToken();\n    }\n\n    /**\n     * Get the project ID from the service account keyfile.\n     *\n     * Returns null if the project ID does not exist in the keyfile.\n     *\n     * @param callable|null $httpHandler Not used by this credentials type.\n     * @return string|null\n     */\n    public function getProjectId(?callable $httpHandler = null)\n    {\n        return $this->projectId;\n    }\n\n    /**\n     * Get the client name from the keyfile.\n     *\n     * In this case, it returns the keyfile's client_email key.\n     *\n     * @param callable|null $httpHandler Not used by this credentials type.\n     * @return string\n     */\n    public function getClientName(?callable $httpHandler = null)\n    {\n        return $this->auth->getIssuer();\n    }\n\n    /**\n     * Get the private key from the keyfile.\n     *\n     * In this case, it returns the keyfile's private_key key, needed for JWT signing.\n     *\n     * @return string\n     */\n    public function getPrivateKey()\n    {\n        return $this->auth->getSigningKey();\n    }\n\n    /**\n     * Get the quota project used for this API request\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        return $this->quotaProject;\n    }\n\n    protected function getCredType(): string\n    {\n        return self::CRED_TYPE;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Credentials/UserRefreshCredentials.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Credentials;\n\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\OAuth2;\nuse InvalidArgumentException;\nuse LogicException;\n\n/**\n * Authenticates requests using User Refresh credentials.\n *\n * This class allows authorizing requests from user refresh tokens.\n *\n * This the end of the result of a 3LO flow.  E.g, the end result of\n * 'gcloud auth login' saves a file with these contents in well known\n * location\n *\n * @see [Application Default Credentials](http://goo.gl/mkAHpZ)\n */\nclass UserRefreshCredentials extends CredentialsLoader implements GetQuotaProjectInterface\n{\n    /**\n     * Used in observability metric headers\n     *\n     * @var string\n     */\n    private const CRED_TYPE = 'u';\n\n    /**\n     * The OAuth2 instance used to conduct authorization.\n     *\n     * @var OAuth2\n     */\n    protected $auth;\n\n    /**\n     * The quota project associated with the JSON credentials\n     *\n     * @var string\n     */\n    protected $quotaProject;\n\n    /**\n     * Whether this is an ID token request or an access token request. Used when\n     * building the metric header.\n     */\n    private bool $isIdTokenRequest = false;\n\n    /**\n     * Create a new UserRefreshCredentials.\n     *\n     * @param string|string[]|null $scope the scope of the access request, expressed\n     *   either as an Array or as a space-delimited String.\n     * @param string|array<mixed> $jsonKey JSON credential file path or JSON credentials\n     *   as an associative array\n     * @param string|null $targetAudience The audience for the ID token.\n     */\n    public function __construct(\n        $scope,\n        $jsonKey,\n        ?string $targetAudience = null\n    ) {\n        if (is_string($jsonKey)) {\n            if (!file_exists($jsonKey)) {\n                throw new InvalidArgumentException('file does not exist or is unreadable');\n            }\n            $json = file_get_contents($jsonKey);\n            if (!$jsonKey = json_decode((string) $json, true)) {\n                throw new LogicException('invalid json for auth config');\n            }\n        }\n        if (!array_key_exists('client_id', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the client_id field'\n            );\n        }\n        if (!array_key_exists('client_secret', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the client_secret field'\n            );\n        }\n        if (!array_key_exists('refresh_token', $jsonKey)) {\n            throw new InvalidArgumentException(\n                'json key is missing the refresh_token field'\n            );\n        }\n        if ($scope && $targetAudience) {\n            throw new InvalidArgumentException(\n                'Scope and targetAudience cannot both be supplied'\n            );\n        }\n        $additionalClaims = [];\n        if ($targetAudience) {\n            $additionalClaims = ['target_audience' => $targetAudience];\n            $this->isIdTokenRequest = true;\n        }\n        $this->auth = new OAuth2([\n            'clientId' => $jsonKey['client_id'],\n            'clientSecret' => $jsonKey['client_secret'],\n            'refresh_token' => $jsonKey['refresh_token'],\n            'scope' => $scope,\n            'tokenCredentialUri' => self::TOKEN_CREDENTIAL_URI,\n            'additionalClaims' => $additionalClaims,\n        ]);\n        if (array_key_exists('quota_project_id', $jsonKey)) {\n            $this->quotaProject = (string) $jsonKey['quota_project_id'];\n        }\n    }\n\n    /**\n     * @param callable|null $httpHandler\n     * @param array<mixed> $headers [optional] Metrics headers to be inserted\n     *     into the token endpoint request present.\n     *     This could be passed from ImersonatedServiceAccountCredentials as it uses\n     *     UserRefreshCredentials as source credentials.\n     *\n     * @return array<mixed> {\n     *     A set of auth related metadata, containing the following\n     *\n     *     @type string $access_token\n     *     @type int $expires_in\n     *     @type string $scope\n     *     @type string $token_type\n     *     @type string $id_token\n     * }\n     */\n    public function fetchAuthToken(?callable $httpHandler = null, array $headers = [])\n    {\n        return $this->auth->fetchAuthToken(\n            $httpHandler,\n            $this->applyTokenEndpointMetrics($headers, $this->isIdTokenRequest ? 'it' : 'at')\n        );\n    }\n\n    /**\n     * Return the Cache Key for the credentials.\n     * The format for the Cache key is one of the following:\n     * ClientId.Scope\n     * ClientId.Audience\n     *\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        $scopeOrAudience = $this->auth->getScope();\n        if (!$scopeOrAudience) {\n            $scopeOrAudience = $this->auth->getAudience();\n        }\n\n        return $this->auth->getClientId() . '.' . $scopeOrAudience;\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    public function getLastReceivedToken()\n    {\n        return $this->auth->getLastReceivedToken();\n    }\n\n    /**\n     * Get the quota project used for this API request\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        return $this->quotaProject;\n    }\n\n    /**\n     * Get the granted scopes (if they exist) for the last fetched token.\n     *\n     * @return string|null\n     */\n    public function getGrantedScope()\n    {\n        return $this->auth->getGrantedScope();\n    }\n\n    protected function getCredType(): string\n    {\n        return self::CRED_TYPE;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/CredentialsLoader.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Google\\Auth\\Credentials\\ExternalAccountCredentials;\nuse Google\\Auth\\Credentials\\ImpersonatedServiceAccountCredentials;\nuse Google\\Auth\\Credentials\\InsecureCredentials;\nuse Google\\Auth\\Credentials\\ServiceAccountCredentials;\nuse Google\\Auth\\Credentials\\UserRefreshCredentials;\nuse RuntimeException;\nuse UnexpectedValueException;\n\n/**\n * CredentialsLoader contains the behaviour used to locate and find default\n * credentials files on the file system.\n */\nabstract class CredentialsLoader implements\n    GetUniverseDomainInterface,\n    FetchAuthTokenInterface,\n    UpdateMetadataInterface\n{\n    use UpdateMetadataTrait;\n\n    const TOKEN_CREDENTIAL_URI = 'https://oauth2.googleapis.com/token';\n    const ENV_VAR = 'GOOGLE_APPLICATION_CREDENTIALS';\n    const QUOTA_PROJECT_ENV_VAR = 'GOOGLE_CLOUD_QUOTA_PROJECT';\n    const WELL_KNOWN_PATH = 'gcloud/application_default_credentials.json';\n    const NON_WINDOWS_WELL_KNOWN_PATH_BASE = '.config';\n    const MTLS_WELL_KNOWN_PATH = '.secureConnect/context_aware_metadata.json';\n    const MTLS_CERT_ENV_VAR = 'GOOGLE_API_USE_CLIENT_CERTIFICATE';\n\n    /**\n     * @param string $cause\n     * @return string\n     */\n    private static function unableToReadEnv($cause)\n    {\n        $msg = 'Unable to read the credential file specified by ';\n        $msg .= ' GOOGLE_APPLICATION_CREDENTIALS: ';\n        $msg .= $cause;\n\n        return $msg;\n    }\n\n    /**\n     * @return bool\n     */\n    private static function isOnWindows()\n    {\n        return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';\n    }\n\n    /**\n     * Load a JSON key from the path specified in the environment.\n     *\n     * Load a JSON key from the path specified in the environment\n     * variable GOOGLE_APPLICATION_CREDENTIALS. Return null if\n     * GOOGLE_APPLICATION_CREDENTIALS is not specified.\n     *\n     * @return array<mixed>|null JSON key | null\n     */\n    public static function fromEnv()\n    {\n        $path = self::getEnv(self::ENV_VAR);\n        if (empty($path)) {\n            return null;\n        }\n        if (!file_exists($path)) {\n            $cause = 'file ' . $path . ' does not exist';\n            throw new \\DomainException(self::unableToReadEnv($cause));\n        }\n        $jsonKey = file_get_contents($path);\n\n        return json_decode((string) $jsonKey, true);\n    }\n\n    /**\n     * Load a JSON key from a well known path.\n     *\n     * The well known path is OS dependent:\n     *\n     * * windows: %APPDATA%/gcloud/application_default_credentials.json\n     * * others: $HOME/.config/gcloud/application_default_credentials.json\n     *\n     * If the file does not exist, this returns null.\n     *\n     * @return array<mixed>|null JSON key | null\n     */\n    public static function fromWellKnownFile()\n    {\n        $rootEnv = self::isOnWindows() ? 'APPDATA' : 'HOME';\n        $path = [self::getEnv($rootEnv)];\n        if (!self::isOnWindows()) {\n            $path[] = self::NON_WINDOWS_WELL_KNOWN_PATH_BASE;\n        }\n        $path[] = self::WELL_KNOWN_PATH;\n        $path = implode(DIRECTORY_SEPARATOR, $path);\n        if (!file_exists($path)) {\n            return null;\n        }\n        $jsonKey = file_get_contents($path);\n        return json_decode((string) $jsonKey, true);\n    }\n\n    /**\n     * Create a new Credentials instance.\n     *\n     * @deprecated This method is being deprecated because of a potential security risk.\n     *\n     * This method does not validate the credential configuration. The security\n     * risk occurs when a credential configuration is accepted from a source\n     * that is not under your control and used without validation on your side.\n     *\n     * If you know that you will be loading credential configurations of a\n     * specific type, it is recommended to use a credential-type-specific\n     * method.\n     * This will ensure that an unexpected credential type with potential for\n     * malicious intent is not loaded unintentionally. You might still have to do\n     * validation for certain credential types. Please follow the recommendation\n     * for that method. For example, if you want to load only service accounts,\n     * you can create the {@see ServiceAccountCredentials} explicitly:\n     *\n     * ```\n     * use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     * $creds = new ServiceAccountCredentials($scopes, $json);\n     * ```\n     *\n     * If you are loading your credential configuration from an untrusted source and have\n     * not mitigated the risks (e.g. by validating the configuration yourself), make\n     * these changes as soon as possible to prevent security risks to your environment.\n     *\n     * Regardless of the method used, it is always your responsibility to validate\n     * configurations received from external sources.\n     *\n     * @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *\n     * @param string|string[] $scope\n     * @param array<mixed> $jsonKey\n     * @param string|string[] $defaultScope\n     * @return ServiceAccountCredentials|UserRefreshCredentials|ImpersonatedServiceAccountCredentials|ExternalAccountCredentials\n     */\n    public static function makeCredentials(\n        $scope,\n        array $jsonKey,\n        $defaultScope = null\n    ) {\n        if (!array_key_exists('type', $jsonKey)) {\n            throw new \\InvalidArgumentException('json key is missing the type field');\n        }\n\n        if ($jsonKey['type'] == 'service_account') {\n            // Do not pass $defaultScope to ServiceAccountCredentials\n            return new ServiceAccountCredentials($scope, $jsonKey);\n        }\n\n        if ($jsonKey['type'] == 'authorized_user') {\n            $anyScope = $scope ?: $defaultScope;\n            return new UserRefreshCredentials($anyScope, $jsonKey);\n        }\n\n        if ($jsonKey['type'] == 'impersonated_service_account') {\n            return new ImpersonatedServiceAccountCredentials($scope, $jsonKey, null, $defaultScope);\n        }\n\n        if ($jsonKey['type'] == 'external_account') {\n            $anyScope = $scope ?: $defaultScope;\n            return new ExternalAccountCredentials($anyScope, $jsonKey);\n        }\n\n        throw new \\InvalidArgumentException('invalid value in the type field');\n    }\n\n    /**\n     * Create an authorized HTTP Client from an instance of FetchAuthTokenInterface.\n     *\n     * @param FetchAuthTokenInterface $fetcher is used to fetch the auth token\n     * @param array<mixed> $httpClientOptions (optional) Array of request options to apply.\n     * @param callable|null $httpHandler (optional) http client to fetch the token.\n     * @param callable|null $tokenCallback (optional) function to be called when a new token is fetched.\n     * @return \\GuzzleHttp\\Client\n     */\n    public static function makeHttpClient(\n        FetchAuthTokenInterface $fetcher,\n        array $httpClientOptions = [],\n        ?callable $httpHandler = null,\n        ?callable $tokenCallback = null\n    ) {\n        $middleware = new Middleware\\AuthTokenMiddleware(\n            $fetcher,\n            $httpHandler,\n            $tokenCallback\n        );\n        $stack = \\GuzzleHttp\\HandlerStack::create();\n        $stack->push($middleware);\n\n        return new \\GuzzleHttp\\Client([\n            'handler' => $stack,\n            'auth' => 'google_auth',\n        ] + $httpClientOptions);\n    }\n\n    /**\n     * Create a new instance of InsecureCredentials.\n     *\n     * @return InsecureCredentials\n     */\n    public static function makeInsecureCredentials()\n    {\n        return new InsecureCredentials();\n    }\n\n    /**\n     * Fetch a quota project from the environment variable\n     * GOOGLE_CLOUD_QUOTA_PROJECT. Return null if\n     * GOOGLE_CLOUD_QUOTA_PROJECT is not specified.\n     *\n     * @return string|null\n     */\n    public static function quotaProjectFromEnv()\n    {\n        return self::getEnv(self::QUOTA_PROJECT_ENV_VAR) ?: null;\n    }\n\n    /**\n     * Gets a callable which returns the default device certification.\n     *\n     * @throws UnexpectedValueException\n     * @return callable|null\n     */\n    public static function getDefaultClientCertSource()\n    {\n        if (!$clientCertSourceJson = self::loadDefaultClientCertSourceFile()) {\n            return null;\n        }\n        $clientCertSourceCmd = $clientCertSourceJson['cert_provider_command'];\n\n        return function () use ($clientCertSourceCmd) {\n            $cmd = array_map('escapeshellarg', $clientCertSourceCmd);\n            exec(implode(' ', $cmd), $output, $returnVar);\n\n            if (0 === $returnVar) {\n                return implode(PHP_EOL, $output);\n            }\n            throw new RuntimeException(\n                '\"cert_provider_command\" failed with a nonzero exit code'\n            );\n        };\n    }\n\n    /**\n     * Determines whether or not the default device certificate should be loaded.\n     *\n     * @return bool\n     */\n    public static function shouldLoadClientCertSource()\n    {\n        return filter_var(self::getEnv(self::MTLS_CERT_ENV_VAR), FILTER_VALIDATE_BOOLEAN);\n    }\n\n    /**\n     * @return array{cert_provider_command:string[]}|null\n     */\n    private static function loadDefaultClientCertSourceFile()\n    {\n        $rootEnv = self::isOnWindows() ? 'APPDATA' : 'HOME';\n        $path = sprintf('%s/%s', self::getEnv($rootEnv), self::MTLS_WELL_KNOWN_PATH);\n        if (!file_exists($path)) {\n            return null;\n        }\n        $jsonKey = file_get_contents($path);\n        $clientCertSourceJson = json_decode((string) $jsonKey, true);\n        if (!$clientCertSourceJson) {\n            throw new UnexpectedValueException('Invalid client cert source JSON');\n        }\n        if (!isset($clientCertSourceJson['cert_provider_command'])) {\n            throw new UnexpectedValueException(\n                'cert source requires \"cert_provider_command\"'\n            );\n        }\n        if (!is_array($clientCertSourceJson['cert_provider_command'])) {\n            throw new UnexpectedValueException(\n                'cert source expects \"cert_provider_command\" to be an array'\n            );\n        }\n        return $clientCertSourceJson;\n    }\n\n    /**\n     * Get the universe domain from the credential. Defaults to \"googleapis.com\"\n     * for all credential types which do not support universe domain.\n     *\n     * @return string\n     */\n    public function getUniverseDomain(): string\n    {\n        return self::DEFAULT_UNIVERSE_DOMAIN;\n    }\n\n    private static function getEnv(string $env): mixed\n    {\n        return getenv($env) ?: $_ENV[$env] ?? null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/ExecutableHandler/ExecutableHandler.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Auth\\ExecutableHandler;\n\nuse RuntimeException;\nuse Symfony\\Component\\Process\\Exception\\ProcessTimedOutException;\nuse Symfony\\Component\\Process\\Process;\n\nclass ExecutableHandler\n{\n    private const DEFAULT_EXECUTABLE_TIMEOUT_MILLIS = 30 * 1000;\n\n    private int $timeoutMs;\n\n    /** @var array<string|\\Stringable> */\n    private array $env = [];\n\n    private ?string $output = null;\n\n    /**\n     * @param array<string|\\Stringable> $env\n     */\n    public function __construct(\n        array $env = [],\n        int $timeoutMs = self::DEFAULT_EXECUTABLE_TIMEOUT_MILLIS,\n    ) {\n        if (!class_exists(Process::class)) {\n            throw new RuntimeException(sprintf(\n                'The \"symfony/process\" package is required to use %s.',\n                self::class\n            ));\n        }\n        $this->env = $env;\n        $this->timeoutMs = $timeoutMs;\n    }\n\n    /**\n     * @param string $command\n     * @return int\n     */\n    public function __invoke(string $command): int\n    {\n        $process = Process::fromShellCommandline(\n            $command,\n            null,\n            $this->env,\n            null,\n            ($this->timeoutMs / 1000)\n        );\n\n        try {\n            $process->run();\n        } catch (ProcessTimedOutException $e) {\n            throw new ExecutableResponseError(\n                'The executable failed to finish within the timeout specified.',\n                'TIMEOUT_EXCEEDED'\n            );\n        }\n\n        $this->output = $process->getOutput() . $process->getErrorOutput();\n\n        return $process->getExitCode();\n    }\n\n    public function getOutput(): ?string\n    {\n        return $this->output;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/ExecutableHandler/ExecutableResponseError.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Auth\\ExecutableHandler;\n\nuse Error;\n\nclass ExecutableResponseError extends Error\n{\n    public function __construct(string $message, string $executableErrorCode = 'INVALID_EXECUTABLE_RESPONSE')\n    {\n        parent::__construct(sprintf('Error code %s: %s', $executableErrorCode, $message));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/ExternalAccountCredentialSourceInterface.php",
    "content": "<?php\n/**\n * Copyright 2023 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\ninterface ExternalAccountCredentialSourceInterface\n{\n    public function fetchSubjectToken(?callable $httpHandler = null): string;\n    public function getCacheKey(): ?string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/FetchAuthTokenCache.php",
    "content": "<?php\n/*\n * Copyright 2010 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * A class to implement caching for any object implementing\n * FetchAuthTokenInterface\n */\nclass FetchAuthTokenCache implements\n    FetchAuthTokenInterface,\n    GetQuotaProjectInterface,\n    GetUniverseDomainInterface,\n    SignBlobInterface,\n    ProjectIdProviderInterface,\n    UpdateMetadataInterface\n{\n    use CacheTrait;\n\n    /**\n     * @var FetchAuthTokenInterface\n     */\n    private $fetcher;\n\n    /**\n     * @var int\n     */\n    private $eagerRefreshThresholdSeconds = 10;\n\n    /**\n     * @param FetchAuthTokenInterface $fetcher A credentials fetcher\n     * @param array<mixed>|null $cacheConfig Configuration for the cache\n     * @param CacheItemPoolInterface $cache\n     */\n    public function __construct(\n        FetchAuthTokenInterface $fetcher,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $this->fetcher = $fetcher;\n        $this->cache = $cache;\n        $this->cacheConfig = array_merge([\n            'lifetime' => 1500,\n            'prefix' => '',\n            'cacheUniverseDomain' => $fetcher instanceof Credentials\\GCECredentials,\n        ], (array) $cacheConfig);\n    }\n\n    /**\n     * @return FetchAuthTokenInterface\n     */\n    public function getFetcher()\n    {\n        return $this->fetcher;\n    }\n\n    /**\n     * Implements FetchAuthTokenInterface#fetchAuthToken.\n     *\n     * Checks the cache for a valid auth token and fetches the auth tokens\n     * from the supplied fetcher.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> the response\n     * @throws \\Exception\n     */\n    public function fetchAuthToken(?callable $httpHandler = null)\n    {\n        if ($cached = $this->fetchAuthTokenFromCache()) {\n            return $cached;\n        }\n\n        $auth_token = $this->fetcher->fetchAuthToken($httpHandler);\n\n        $this->saveAuthTokenInCache($auth_token);\n\n        return $auth_token;\n    }\n\n    /**\n     * @return string\n     */\n    public function getCacheKey()\n    {\n        return $this->getFullCacheKey($this->fetcher->getCacheKey());\n    }\n\n    /**\n     * @return array<mixed>|null\n     */\n    public function getLastReceivedToken()\n    {\n        return $this->fetcher->getLastReceivedToken();\n    }\n\n    /**\n     * Get the client name from the fetcher.\n     *\n     * @param callable|null $httpHandler An HTTP handler to deliver PSR7 requests.\n     * @return string\n     */\n    public function getClientName(?callable $httpHandler = null)\n    {\n        if (!$this->fetcher instanceof SignBlobInterface) {\n            throw new \\RuntimeException(\n                'Credentials fetcher does not implement ' .\n                'Google\\Auth\\SignBlobInterface'\n            );\n        }\n\n        return $this->fetcher->getClientName($httpHandler);\n    }\n\n    /**\n     * Sign a blob using the fetcher.\n     *\n     * @param string $stringToSign The string to sign.\n     * @param bool $forceOpenSsl Require use of OpenSSL for local signing. Does\n     *        not apply to signing done using external services. **Defaults to**\n     *        `false`.\n     * @return string The resulting signature.\n     * @throws \\RuntimeException If the fetcher does not implement\n     *     `Google\\Auth\\SignBlobInterface`.\n     */\n    public function signBlob($stringToSign, $forceOpenSsl = false)\n    {\n        if (!$this->fetcher instanceof SignBlobInterface) {\n            throw new \\RuntimeException(\n                'Credentials fetcher does not implement ' .\n                'Google\\Auth\\SignBlobInterface'\n            );\n        }\n\n        // Pass the access token from cache for credentials that sign blobs\n        // using the IAM API. This saves a call to fetch an access token when a\n        // cached token exists.\n        if ($this->fetcher instanceof Credentials\\GCECredentials\n            || $this->fetcher instanceof Credentials\\ImpersonatedServiceAccountCredentials\n        ) {\n            $cached = $this->fetchAuthTokenFromCache();\n            $accessToken = $cached['access_token'] ?? null;\n            return $this->fetcher->signBlob($stringToSign, $forceOpenSsl, $accessToken);\n        }\n\n        return $this->fetcher->signBlob($stringToSign, $forceOpenSsl);\n    }\n\n    /**\n     * Get the quota project used for this API request from the credentials\n     * fetcher.\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        if ($this->fetcher instanceof GetQuotaProjectInterface) {\n            return $this->fetcher->getQuotaProject();\n        }\n\n        return null;\n    }\n\n    /**\n     * Get the Project ID from the fetcher.\n     *\n     * @param callable|null $httpHandler Callback which delivers psr7 request\n     * @return string|null\n     * @throws \\RuntimeException If the fetcher does not implement\n     *     `Google\\Auth\\ProvidesProjectIdInterface`.\n     */\n    public function getProjectId(?callable $httpHandler = null)\n    {\n        if (!$this->fetcher instanceof ProjectIdProviderInterface) {\n            throw new \\RuntimeException(\n                'Credentials fetcher does not implement ' .\n                'Google\\Auth\\ProvidesProjectIdInterface'\n            );\n        }\n\n        // Pass the access token from cache for credentials that require an\n        // access token to fetch the project ID. This saves a call to fetch an\n        // access token when a cached token exists.\n        if ($this->fetcher instanceof Credentials\\ExternalAccountCredentials) {\n            $cached = $this->fetchAuthTokenFromCache();\n            $accessToken = $cached['access_token'] ?? null;\n            return $this->fetcher->getProjectId($httpHandler, $accessToken);\n        }\n\n        return $this->fetcher->getProjectId($httpHandler);\n    }\n\n    /*\n     * Get the Universe Domain from the fetcher.\n     *\n     * @return string\n     */\n    public function getUniverseDomain(): string\n    {\n        if ($this->fetcher instanceof GetUniverseDomainInterface) {\n            if ($this->cacheConfig['cacheUniverseDomain']) {\n                return $this->getCachedUniverseDomain($this->fetcher);\n            }\n            return $this->fetcher->getUniverseDomain();\n        }\n\n        return GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN;\n    }\n\n    /**\n     * Updates metadata with the authorization token.\n     *\n     * @param array<mixed> $metadata metadata hashmap\n     * @param string $authUri optional auth uri\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> updated metadata hashmap\n     * @throws \\RuntimeException If the fetcher does not implement\n     *     `Google\\Auth\\UpdateMetadataInterface`.\n     */\n    public function updateMetadata(\n        $metadata,\n        $authUri = null,\n        ?callable $httpHandler = null\n    ) {\n        if (!$this->fetcher instanceof UpdateMetadataInterface) {\n            throw new \\RuntimeException(\n                'Credentials fetcher does not implement ' .\n                'Google\\Auth\\UpdateMetadataInterface'\n            );\n        }\n\n        $cached = $this->fetchAuthTokenFromCache($authUri);\n        if ($cached) {\n            // Set the access token in the `Authorization` metadata header so\n            // the downstream call to updateMetadata know they don't need to\n            // fetch another token.\n            if (isset($cached['access_token'])) {\n                $metadata[self::AUTH_METADATA_KEY] = [\n                    'Bearer ' . $cached['access_token']\n                ];\n            } elseif (isset($cached['id_token'])) {\n                $metadata[self::AUTH_METADATA_KEY] = [\n                    'Bearer ' . $cached['id_token']\n                ];\n            }\n        }\n\n        $newMetadata = $this->fetcher->updateMetadata(\n            $metadata,\n            $authUri,\n            $httpHandler\n        );\n\n        if (!$cached && $token = $this->fetcher->getLastReceivedToken()) {\n            $this->saveAuthTokenInCache($token, $authUri);\n        }\n\n        return $newMetadata;\n    }\n\n    /**\n     * @param string|null $authUri\n     * @return array<mixed>|null\n     */\n    private function fetchAuthTokenFromCache($authUri = null)\n    {\n        // Use the cached value if its available.\n        //\n        // TODO: correct caching; update the call to setCachedValue to set the expiry\n        // to the value returned with the auth token.\n        //\n        // TODO: correct caching; enable the cache to be cleared.\n\n        // if $authUri is set, use it as the cache key\n        $cacheKey = $authUri\n            ? $this->getFullCacheKey($authUri)\n            : $this->fetcher->getCacheKey();\n\n        $cached = $this->getCachedValue($cacheKey);\n        if (is_array($cached)) {\n            if (empty($cached['expires_at'])) {\n                // If there is no expiration data, assume token is not expired.\n                // (for JwtAccess and ID tokens)\n                return $cached;\n            }\n            if ((time() + $this->eagerRefreshThresholdSeconds) < $cached['expires_at']) {\n                // access token is not expired\n                return $cached;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @param array<mixed> $authToken\n     * @param string|null  $authUri\n     * @return void\n     */\n    private function saveAuthTokenInCache($authToken, $authUri = null)\n    {\n        if (isset($authToken['access_token']) ||\n            isset($authToken['id_token'])) {\n            // if $authUri is set, use it as the cache key\n            $cacheKey = $authUri\n                ? $this->getFullCacheKey($authUri)\n                : $this->fetcher->getCacheKey();\n\n            $this->setCachedValue($cacheKey, $authToken);\n        }\n    }\n\n    private function getCachedUniverseDomain(GetUniverseDomainInterface $fetcher): string\n    {\n        $cacheKey = $this->getFullCacheKey($fetcher->getCacheKey() . 'universe_domain'); // @phpstan-ignore-line\n        if ($universeDomain = $this->getCachedValue($cacheKey)) {\n            return $universeDomain;\n        }\n\n        $universeDomain = $fetcher->getUniverseDomain();\n        $this->setCachedValue($cacheKey, $universeDomain);\n        return $universeDomain;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/FetchAuthTokenInterface.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * An interface implemented by objects that can fetch auth tokens.\n */\ninterface FetchAuthTokenInterface\n{\n    /**\n     * Fetches the auth tokens based on the current state.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> a hash of auth tokens\n     */\n    public function fetchAuthToken(?callable $httpHandler = null);\n\n    /**\n     * Obtains a key that can used to cache the results of #fetchAuthToken.\n     *\n     * If the value is empty, the auth token is not cached.\n     *\n     * @return string a key that may be used to cache the auth token.\n     */\n    public function getCacheKey();\n\n    /**\n     * Returns an associative array with the token and\n     * expiration time.\n     *\n     * @return null|array<mixed> {\n     *     The last received access token.\n     *\n     *     @type string $access_token The access token string.\n     *     @type int $expires_at The time the token expires as a UNIX timestamp.\n     * }\n     */\n    public function getLastReceivedToken();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/GCECache.php",
    "content": "<?php\n/*\n * Copyright 2020 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Google\\Auth\\Credentials\\GCECredentials;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * A class to implement caching for calls to GCECredentials::onGce. This class\n * is used automatically when you pass a `Psr\\Cache\\CacheItemPoolInterface`\n * cache object to `ApplicationDefaultCredentials::getCredentials`.\n *\n * ```\n * $sysvCache = new Google\\Auth\\SysvCacheItemPool();\n * $creds = Google\\Auth\\ApplicationDefaultCredentials::getCredentials(\n *     $scope,\n *     null,\n *     null,\n *     $sysvCache\n * );\n * ```\n */\nclass GCECache\n{\n    const GCE_CACHE_KEY = 'google_auth_on_gce_cache';\n\n    use CacheTrait;\n\n    /**\n     * @param array<mixed> $cacheConfig Configuration for the cache\n     * @param CacheItemPoolInterface $cache\n     */\n    public function __construct(\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $this->cache = $cache;\n        $this->cacheConfig = array_merge([\n            'lifetime' => 1500,\n            'prefix' => '',\n        ], (array) $cacheConfig);\n    }\n\n    /**\n     * Caches the result of onGce so the metadata server is not called multiple\n     * times.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return bool True if this a GCEInstance, false otherwise\n     */\n    public function onGce(?callable $httpHandler = null)\n    {\n        if (is_null($this->cache)) {\n            return GCECredentials::onGce($httpHandler);\n        }\n\n        $cacheKey = self::GCE_CACHE_KEY;\n        $onGce = $this->getCachedValue($cacheKey);\n\n        if (is_null($onGce)) {\n            $onGce = GCECredentials::onGce($httpHandler);\n            $this->setCachedValue($cacheKey, $onGce);\n        }\n\n        return $onGce;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/GetQuotaProjectInterface.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * An interface implemented by objects that can get quota projects.\n */\ninterface GetQuotaProjectInterface\n{\n    const X_GOOG_USER_PROJECT_HEADER = 'X-Goog-User-Project';\n\n    /**\n     * Get the quota project used for this API request\n     *\n     * @return string|null\n     */\n    public function getQuotaProject();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/GetUniverseDomainInterface.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * An interface implemented by objects that can get universe domain for Google Cloud APIs.\n */\ninterface GetUniverseDomainInterface\n{\n    const DEFAULT_UNIVERSE_DOMAIN = 'googleapis.com';\n\n    /**\n     * Get the universe domain from the credential. This should always return\n     * a string, and default to \"googleapis.com\" if no universe domain is\n     * configured.\n     *\n     * @return string\n     */\n    public function getUniverseDomain(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/HttpHandler/Guzzle6HttpHandler.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Auth\\HttpHandler;\n\nuse Google\\Auth\\Logging\\LoggingTrait;\nuse Google\\Auth\\Logging\\RpcLogEvent;\nuse GuzzleHttp\\ClientInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Log\\LoggerInterface;\n\nclass Guzzle6HttpHandler\n{\n    use LoggingTrait;\n\n    /**\n     * @var ClientInterface\n     */\n    private $client;\n\n    /**\n     * @var null|LoggerInterface\n     */\n    private $logger;\n\n    /**\n     * @param ClientInterface $client\n     * @param null|LoggerInterface $logger\n     */\n    public function __construct(ClientInterface $client, ?LoggerInterface $logger = null)\n    {\n        $this->client = $client;\n        $this->logger = $logger;\n    }\n\n    /**\n     * Accepts a PSR-7 request and an array of options and returns a PSR-7 response.\n     *\n     * @param RequestInterface $request\n     * @param array<mixed> $options\n     * @return ResponseInterface\n     */\n    public function __invoke(RequestInterface $request, array $options = [])\n    {\n        $requestEvent = null;\n\n        if ($this->logger) {\n            $requestEvent = $this->requestLog($request, $options);\n        }\n\n        $response = $this->client->send($request, $options);\n\n        if ($this->logger) {\n            $this->responseLog($response, $requestEvent);\n        }\n\n        return $response;\n    }\n\n    /**\n     * Accepts a PSR-7 request and an array of options and returns a PromiseInterface\n     *\n     * @param RequestInterface $request\n     * @param array<mixed> $options\n     *\n     * @return \\GuzzleHttp\\Promise\\PromiseInterface\n     */\n    public function async(RequestInterface $request, array $options = [])\n    {\n        $requestEvent = null;\n\n        if ($this->logger) {\n            $requestEvent = $this->requestLog($request, $options);\n        }\n\n        $promise = $this->client->sendAsync($request, $options);\n\n        if ($this->logger) {\n            $promise->then(function (ResponseInterface $response) use ($requestEvent) {\n                $this->responseLog($response, $requestEvent);\n                return $response;\n            });\n        }\n\n        return $promise;\n    }\n\n    /**\n     * @internal\n     * @param RequestInterface $request\n     * @param array<mixed> $options\n     */\n    public function requestLog(RequestInterface $request, array $options): RpcLogEvent\n    {\n        $requestEvent = new RpcLogEvent();\n\n        $requestEvent->method = $request->getMethod();\n        $requestEvent->url = (string) $request->getUri();\n        $requestEvent->headers = $request->getHeaders();\n        $requestEvent->payload = $request->getBody()->getContents();\n        $requestEvent->retryAttempt = $options['retryAttempt'] ?? null;\n        $requestEvent->serviceName = $options['serviceName'] ?? null;\n        $requestEvent->processId = (int) getmypid();\n        $requestEvent->requestId = $options['requestId'] ?? crc32((string) spl_object_id($request) . getmypid());\n\n        $this->logRequest($requestEvent);\n\n        return $requestEvent;\n    }\n\n    /**\n     * @internal\n     */\n    public function responseLog(ResponseInterface $response, RpcLogEvent $requestEvent): void\n    {\n        $responseEvent = new RpcLogEvent($requestEvent->milliseconds);\n\n        $responseEvent->headers = $response->getHeaders();\n        $responseEvent->payload = $response->getBody()->getContents();\n        $responseEvent->status = $response->getStatusCode();\n        $responseEvent->processId = $requestEvent->processId;\n        $responseEvent->requestId = $requestEvent->requestId;\n\n        $this->logResponse($responseEvent);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/HttpHandler/Guzzle7HttpHandler.php",
    "content": "<?php\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Auth\\HttpHandler;\n\nclass Guzzle7HttpHandler extends Guzzle6HttpHandler\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/HttpHandler/HttpClientCache.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\HttpHandler;\n\nuse GuzzleHttp\\ClientInterface;\n\n/**\n * Stores an HTTP Client in order to prevent multiple instantiations.\n */\nclass HttpClientCache\n{\n    /**\n     * @var ClientInterface|null\n     */\n    private static $httpClient;\n\n    /**\n     * Cache an HTTP Client for later calls.\n     *\n     * Passing null will unset the cached client.\n     *\n     * @param ClientInterface|null $client\n     * @return void\n     */\n    public static function setHttpClient(?ClientInterface $client = null)\n    {\n        self::$httpClient = $client;\n    }\n\n    /**\n     * Get the stored HTTP Client, or null.\n     *\n     * @return ClientInterface|null\n     */\n    public static function getHttpClient()\n    {\n        return self::$httpClient;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/HttpHandler/HttpHandlerFactory.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Auth\\HttpHandler;\n\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse GuzzleHttp\\BodySummarizer;\nuse GuzzleHttp\\Client;\nuse GuzzleHttp\\ClientInterface;\nuse GuzzleHttp\\HandlerStack;\nuse GuzzleHttp\\Middleware;\nuse Psr\\Log\\LoggerInterface;\n\nclass HttpHandlerFactory\n{\n    /**\n     * Builds out a default http handler for the installed version of guzzle.\n     *\n     * @param ClientInterface|null $client\n     * @param null|false|LoggerInterface $logger\n     * @return Guzzle6HttpHandler|Guzzle7HttpHandler\n     * @throws \\Exception\n     */\n    public static function build(\n        ?ClientInterface $client = null,\n        null|false|LoggerInterface $logger = null,\n    ) {\n        if (is_null($client)) {\n            $stack = null;\n            if (class_exists(BodySummarizer::class)) {\n                // double the # of characters before truncation by default\n                $bodySummarizer = new BodySummarizer(240);\n                $stack = HandlerStack::create();\n                $stack->remove('http_errors');\n                $stack->unshift(Middleware::httpErrors($bodySummarizer), 'http_errors');\n            }\n            $client = new Client(['handler' => $stack]);\n        }\n\n        $logger = ($logger === false)\n            ? null\n            : $logger ?? ApplicationDefaultCredentials::getDefaultLogger();\n\n        $version = null;\n        if (defined('GuzzleHttp\\ClientInterface::MAJOR_VERSION')) {\n            $version = ClientInterface::MAJOR_VERSION;\n        } elseif (defined('GuzzleHttp\\ClientInterface::VERSION')) {\n            $version = (int) substr(ClientInterface::VERSION, 0, 1);\n        }\n\n        switch ($version) {\n            case 6:\n                return new Guzzle6HttpHandler($client, $logger);\n            case 7:\n                return new Guzzle7HttpHandler($client, $logger);\n            default:\n                throw new \\Exception('Version not supported');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Iam.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\Psr7\\Utils;\n\n/**\n * Tools for using the IAM API.\n *\n * @see https://cloud.google.com/iam/docs IAM Documentation\n */\nclass Iam\n{\n    /**\n     * @deprecated\n     */\n    const IAM_API_ROOT = 'https://iamcredentials.googleapis.com/v1';\n    const SIGN_BLOB_PATH = '%s:signBlob?alt=json';\n    const SERVICE_ACCOUNT_NAME = 'projects/-/serviceAccounts/%s';\n    private const IAM_API_ROOT_TEMPLATE = 'https://iamcredentials.UNIVERSE_DOMAIN/v1';\n    private const GENERATE_ID_TOKEN_PATH = '%s:generateIdToken';\n\n    /**\n     * @var callable\n     */\n    private $httpHandler;\n\n    private string $universeDomain;\n\n    /**\n     * @param callable|null $httpHandler [optional] The HTTP Handler to send requests.\n     */\n    public function __construct(\n        ?callable $httpHandler = null,\n        string $universeDomain = GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN\n    ) {\n        $this->httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        $this->universeDomain = $universeDomain;\n    }\n\n    /**\n     * Sign a string using the IAM signBlob API.\n     *\n     * Note that signing using IAM requires your service account to have the\n     * `iam.serviceAccounts.signBlob` permission, part of the \"Service Account\n     * Token Creator\" IAM role.\n     *\n     * @param string $email The service account email.\n     * @param string $accessToken An access token from the service account.\n     * @param string $stringToSign The string to be signed.\n     * @param array<string> $delegates [optional] A list of service account emails to\n     *        add to the delegate chain. If omitted, the value of `$email` will\n     *        be used.\n     * @return string The signed string, base64-encoded.\n     */\n    public function signBlob($email, $accessToken, $stringToSign, array $delegates = [])\n    {\n        $name = sprintf(self::SERVICE_ACCOUNT_NAME, $email);\n        $apiRoot = str_replace('UNIVERSE_DOMAIN', $this->universeDomain, self::IAM_API_ROOT_TEMPLATE);\n        $uri = $apiRoot . '/' . sprintf(self::SIGN_BLOB_PATH, $name);\n\n        if ($delegates) {\n            foreach ($delegates as &$delegate) {\n                $delegate = sprintf(self::SERVICE_ACCOUNT_NAME, $delegate);\n            }\n        } else {\n            $delegates = [$name];\n        }\n\n        $body = [\n            'delegates' => $delegates,\n            'payload' => base64_encode($stringToSign),\n        ];\n\n        $headers = [\n            'Authorization' => 'Bearer ' . $accessToken\n        ];\n\n        $request = new Psr7\\Request(\n            'POST',\n            $uri,\n            $headers,\n            Utils::streamFor(json_encode($body))\n        );\n\n        $res = ($this->httpHandler)($request);\n        $body = json_decode((string) $res->getBody(), true);\n\n        return $body['signedBlob'];\n    }\n\n    /**\n     * Sign a string using the IAM signBlob API.\n     *\n     * Note that signing using IAM requires your service account to have the\n     * `iam.serviceAccounts.signBlob` permission, part of the \"Service Account\n     * Token Creator\" IAM role.\n     *\n     * @param string $clientEmail The service account email.\n     * @param string $targetAudience The audience for the ID token.\n     * @param string $bearerToken The token to authenticate the IAM request.\n     * @param array<string, string> $headers [optional] Additional headers to send with the request.\n     *\n     * @return string The signed string, base64-encoded.\n     */\n    public function generateIdToken(\n        string $clientEmail,\n        string $targetAudience,\n        string $bearerToken,\n        array $headers = []\n    ): string {\n        $name = sprintf(self::SERVICE_ACCOUNT_NAME, $clientEmail);\n        $apiRoot = str_replace('UNIVERSE_DOMAIN', $this->universeDomain, self::IAM_API_ROOT_TEMPLATE);\n        $uri = $apiRoot . '/' . sprintf(self::GENERATE_ID_TOKEN_PATH, $name);\n\n        $headers['Authorization'] = 'Bearer ' . $bearerToken;\n\n        $body = [\n            'audience' => $targetAudience,\n            'includeEmail' => true,\n            'useEmailAzp' => true,\n        ];\n\n        $request = new Psr7\\Request(\n            'POST',\n            $uri,\n            $headers,\n            Utils::streamFor(json_encode($body))\n        );\n\n        $res = ($this->httpHandler)($request);\n        $body = json_decode((string) $res->getBody(), true);\n\n        return $body['token'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/IamSignerTrait.php",
    "content": "<?php\n\n/*\n * Copyright 2022 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Exception;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\n\ntrait IamSignerTrait\n{\n    /**\n     * @var Iam|null\n     */\n    private $iam;\n\n    /**\n     * Sign a string using the default service account private key.\n     *\n     * This implementation uses IAM's signBlob API.\n     *\n     * @see https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/signBlob SignBlob\n     *\n     * @param string $stringToSign The string to sign.\n     * @param bool $forceOpenSsl [optional] Does not apply to this credentials\n     *        type.\n     * @param string $accessToken The access token to use to sign the blob. If\n     *        provided, saves a call to the metadata server for a new access\n     *        token. **Defaults to** `null`.\n     * @return string\n     * @throws Exception\n     */\n    public function signBlob($stringToSign, $forceOpenSsl = false, $accessToken = null)\n    {\n        $httpHandler = HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n\n        // Providing a signer is useful for testing, but it's undocumented\n        // because it's not something a user would generally need to do.\n        $signer = $this->iam;\n        if (!$signer) {\n            $signer = $this instanceof GetUniverseDomainInterface\n                ? new Iam($httpHandler, $this->getUniverseDomain())\n                : new Iam($httpHandler);\n        }\n\n        $email = $this->getClientName($httpHandler);\n\n        if (is_null($accessToken)) {\n            $previousToken = $this->getLastReceivedToken();\n            $accessToken = $previousToken\n                ? $previousToken['access_token']\n                : $this->fetchAuthToken($httpHandler)['access_token'];\n        }\n\n        return $signer->signBlob($email, $accessToken, $stringToSign);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Logging/LoggingTrait.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Logging;\n\nuse Psr\\Log\\LogLevel;\n\n/**\n * A trait used to call a PSR-3 logging interface.\n *\n * @internal\n */\ntrait LoggingTrait\n{\n    /**\n     * @param RpcLogEvent $event\n     */\n    private function logRequest(RpcLogEvent $event): void\n    {\n        $debugEvent = [\n            'timestamp' => $event->timestamp,\n            'severity' => strtoupper(LogLevel::DEBUG),\n            'processId' => $event->processId ?? null,\n            'requestId' => $event->requestId ?? null,\n            'rpcName' => $event->rpcName ?? null,\n        ];\n\n        $debugEvent = array_filter($debugEvent, fn ($value) => !is_null($value));\n\n        $jsonPayload = [\n            'request.method' => $event->method,\n            'request.url' => $event->url,\n            'request.headers' => $event->headers,\n            'request.payload' => $this->truncatePayload($event->payload),\n            'request.jwt' => $this->getJwtToken($event->headers ?? []),\n            'retryAttempt' => $event->retryAttempt\n        ];\n\n        // Remove null values\n        $debugEvent['jsonPayload'] = array_filter($jsonPayload, fn ($value) => !is_null($value));\n\n        $stringifiedEvent = json_encode($debugEvent, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);\n\n        // There was an error stringifying the event, return to not break execution\n        if ($stringifiedEvent === false) {\n            return;\n        }\n\n        $this->logger->debug($stringifiedEvent);\n    }\n\n    /**\n     * @param RpcLogEvent $event\n     */\n    private function logResponse(RpcLogEvent $event): void\n    {\n        $debugEvent = [\n            'timestamp' => $event->timestamp,\n            'severity' => strtoupper(LogLevel::DEBUG),\n            'processId' => $event->processId ?? null,\n            'requestId' => $event->requestId ?? null,\n            'jsonPayload' => [\n                'response.status' => $event->status,\n                'response.headers' => $event->headers,\n                'response.payload' => $this->truncatePayload($event->payload),\n                'latencyMillis' => $event->latency,\n            ]\n        ];\n\n        // Remove null values\n        $debugEvent = array_filter($debugEvent, fn ($value) => !is_null($value));\n        $debugEvent['jsonPayload'] = array_filter(\n            $debugEvent['jsonPayload'],\n            fn ($value) => !is_null($value)\n        );\n\n        $stringifiedEvent = json_encode($debugEvent, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);\n\n        // There was an error stringifying the event, return to not break execution\n        if ($stringifiedEvent !== false) {\n            $this->logger->debug($stringifiedEvent);\n        }\n    }\n\n    /**\n     * @param array<mixed> $headers\n     * @return null|array<string, string|false>\n     */\n    private function getJwtToken(array $headers): null|array\n    {\n        if (empty($headers)) {\n            return null;\n        }\n\n        $tokenHeader = $headers['Authorization'] ?? '';\n        $token = str_replace('Bearer ', '', $tokenHeader);\n\n        if (substr_count($token, '.') !== 2) {\n            return null;\n        }\n\n        [$header, $token, $_] = explode('.', $token);\n\n        return [\n            'header' => base64_decode($header),\n            'token' => base64_decode($token)\n        ];\n    }\n\n    /**\n     * @param null|string $payload\n     * @return string\n     */\n    private function truncatePayload(null|string $payload): null|string\n    {\n        $maxLength = 500;\n\n        if (is_null($payload) || strlen($payload) <= $maxLength) {\n            return $payload;\n        }\n\n        return substr($payload, 0, $maxLength) . '...';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Logging/RpcLogEvent.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Logging;\n\n/**\n * A class that contains all the required information for logging.\n *\n * @internal\n */\nclass RpcLogEvent\n{\n    /**\n     * Timestamp in format RFC3339 representing when this event ocurred\n     *\n     * @var string\n     */\n    public string $timestamp;\n\n    /**\n     * The time in milliseconds at time on creation for calculating latency\n     *\n     * @var float\n     */\n    public float $milliseconds;\n\n    /**\n     * Rest method type\n     *\n     * @var null|string\n     */\n    public null|string $method = null;\n\n    /**\n     * URL representing the rest URL endpoint\n     *\n     * @var null|string\n     */\n    public null|string $url = null;\n\n    /**\n     * An array that contains the headers for the response or request\n     *\n     * @var null|array<mixed>\n     */\n    public null|array $headers = null;\n\n    /**\n     * An array representation of JSON for the response or request\n     *\n     * @var null|string\n     */\n    public null|string $payload = null;\n\n    /**\n     * Status code for REST or gRPC methods\n     *\n     * @var null|int|string\n     */\n    public null|int|string $status = null;\n\n    /**\n     * The latency in milliseconds\n     *\n     * @var null|int\n     */\n    public null|int $latency = null;\n\n    /**\n     * The retry attempt number\n     *\n     * @var null|int\n     */\n    public null|int $retryAttempt = null;\n\n    /**\n     * The name of the gRPC method being called\n     *\n     * @var null|string\n     */\n    public null|string $rpcName = null;\n\n    /**\n     * The Service Name of the gRPC\n     *\n     * @var null|string $serviceName\n     */\n    public null|string $serviceName = null;\n\n    /**\n     * The Process ID for tracing logs\n     *\n     * @var null|int $processId\n     */\n    public null|int $processId = null;\n\n    /**\n     * The Request id for tracing logs\n     *\n     * @var null|int $requestId;\n     */\n    public null|int $requestId = null;\n\n    /**\n     * Creates an object with all the fields required for logging\n     * Passing a string representation of a timestamp calculates the difference between\n     * these two times and sets the latency field with the result.\n     *\n     * @param null|float $startTime (Optional) Parameter to calculate the latency\n     */\n    public function __construct(null|float $startTime = null)\n    {\n        $this->timestamp = date(DATE_RFC3339);\n\n        // Takes the micro time and convets it to millis\n        $this->milliseconds = round(microtime(true) * 1000);\n\n        if ($startTime) {\n            $this->latency = (int) round($this->milliseconds - $startTime);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Logging/StdOutLogger.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Logging;\n\nuse InvalidArgumentException;\nuse Psr\\Log\\LoggerInterface;\nuse Psr\\Log\\LoggerTrait;\nuse Psr\\Log\\LogLevel;\nuse Stringable;\n\n/**\n * A basic logger class to log into stdOut for GCP logging.\n *\n * @internal\n */\nclass StdOutLogger implements LoggerInterface\n{\n    use LoggerTrait;\n\n    /**\n     * @var array<string,int>\n     */\n    private array $levelMapping = [\n        LogLevel::EMERGENCY => 7,\n        LogLevel::ALERT => 6,\n        LogLevel::CRITICAL => 5,\n        LogLevel::ERROR => 4,\n        LogLevel::WARNING => 3,\n        LogLevel::NOTICE => 2,\n        LogLevel::INFO => 1,\n        LogLevel::DEBUG => 0,\n    ];\n    private int $level;\n\n    /**\n     * Constructs a basic PSR-3 logger class that logs into StdOut for GCP Logging\n     *\n     * @param string $level The level of the logger instance.\n     */\n    public function __construct(string $level = LogLevel::DEBUG)\n    {\n        $this->level = $this->getLevelFromName($level);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function log($level, string|Stringable $message, array $context = []): void\n    {\n        if ($this->getLevelFromName($level) < $this->level) {\n            return;\n        }\n\n        print($message . \"\\n\");\n    }\n\n    /**\n     * @param string $levelName\n     * @return int\n     * @throws InvalidArgumentException\n     */\n    private function getLevelFromName(string $levelName): int\n    {\n        if (!array_key_exists($levelName, $this->levelMapping)) {\n            throw new InvalidArgumentException('The level supplied to the Logger is not valid');\n        }\n\n        return $this->levelMapping[$levelName];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/MetricsTrait.php",
    "content": "<?php\n/*\n * Copyright 2024 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * Trait containing helper methods required for enabling\n * observability metrics in the library.\n *\n * @internal\n */\ntrait MetricsTrait\n{\n    /**\n     * @var string The version of the auth library php.\n     */\n    private static $version;\n\n    /**\n     * @var string The header key for the observability metrics.\n     */\n    protected static $metricMetadataKey = 'x-goog-api-client';\n\n    /**\n     * @param string $credType [Optional] The credential type.\n     *        Empty value will not add any credential type to the header.\n     *        Should be one of `'sa'`, `'jwt'`, `'imp'`, `'mds'`, `'u'`.\n     * @param string $authRequestType [Optional] The auth request type.\n     *        Empty value will not add any auth request type to the header.\n     *        Should be one of `'at'`, `'it'`, `'mds'`.\n     * @return string The header value for the observability metrics.\n     */\n    protected static function getMetricsHeader(\n        $credType = '',\n        $authRequestType = ''\n    ): string {\n        $value = sprintf(\n            'gl-php/%s auth/%s',\n            PHP_VERSION,\n            self::getVersion()\n        );\n\n        if (!empty($authRequestType)) {\n            $value .= ' auth-request-type/' . $authRequestType;\n        }\n\n        if (!empty($credType)) {\n            $value .= ' cred-type/' . $credType;\n        }\n\n        return $value;\n    }\n\n    /**\n     * @param array<mixed> $metadata The metadata to update and return.\n     * @return array<mixed> The updated metadata.\n     */\n    protected function applyServiceApiUsageMetrics($metadata)\n    {\n        if ($credType = $this->getCredType()) {\n            // Add service api usage observability metrics info into metadata\n            // We expect upstream libries to have the metadata key populated already\n            $value = 'cred-type/' . $credType;\n            if (!isset($metadata[self::$metricMetadataKey])) {\n                // This case will happen only when someone invokes the updateMetadata\n                // method on the credentials fetcher themselves.\n                $metadata[self::$metricMetadataKey] = [$value];\n            } elseif (is_array($metadata[self::$metricMetadataKey])) {\n                $metadata[self::$metricMetadataKey][0] .= ' ' . $value;\n            } else {\n                $metadata[self::$metricMetadataKey] .= ' ' . $value;\n            }\n        }\n\n        return $metadata;\n    }\n\n    /**\n     * @param array<mixed> $metadata The metadata to update and return.\n     * @param string $authRequestType The auth request type. Possible values are\n     *        `'at'`, `'it'`, `'mds'`.\n     * @return array<mixed> The updated metadata.\n     */\n    protected function applyTokenEndpointMetrics($metadata, $authRequestType)\n    {\n        $metricsHeader = self::getMetricsHeader($this->getCredType(), $authRequestType);\n        if (!isset($metadata[self::$metricMetadataKey])) {\n            $metadata[self::$metricMetadataKey] = $metricsHeader;\n        }\n        return $metadata;\n    }\n\n    protected static function getVersion(): string\n    {\n        if (is_null(self::$version)) {\n            $versionFilePath = __DIR__ . '/../VERSION';\n            self::$version = trim((string) file_get_contents($versionFilePath));\n        }\n        return self::$version;\n    }\n\n    protected function getCredType(): string\n    {\n        return '';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Middleware/AuthTokenMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Middleware;\n\nuse Google\\Auth\\FetchAuthTokenCache;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\UpdateMetadataInterface;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * AuthTokenMiddleware is a Guzzle Middleware that adds an Authorization header\n * provided by an object implementing FetchAuthTokenInterface.\n *\n * The FetchAuthTokenInterface#fetchAuthToken is used to obtain a hash; one of\n * the values value in that hash is added as the authorization header.\n *\n * Requests will be accessed with the authorization header:\n *\n * 'authorization' 'Bearer <value of auth_token>'\n */\nclass AuthTokenMiddleware\n{\n    /**\n     * @var callable\n     */\n    private $httpHandler;\n\n    /**\n     * It must be an implementation of FetchAuthTokenInterface.\n     * It may also implement UpdateMetadataInterface allowing direct\n     * retrieval of auth related headers\n     * @var FetchAuthTokenInterface\n     */\n    private $fetcher;\n\n    /**\n     * @var ?callable\n     */\n    private $tokenCallback;\n\n    /**\n     * Creates a new AuthTokenMiddleware.\n     *\n     * @param FetchAuthTokenInterface $fetcher is used to fetch the auth token\n     * @param callable|null $httpHandler (optional) callback which delivers psr7 request\n     * @param callable|null $tokenCallback (optional) function to be called when a new token is fetched.\n     */\n    public function __construct(\n        FetchAuthTokenInterface $fetcher,\n        ?callable $httpHandler = null,\n        ?callable $tokenCallback = null\n    ) {\n        $this->fetcher = $fetcher;\n        $this->httpHandler = $httpHandler;\n        $this->tokenCallback = $tokenCallback;\n    }\n\n    /**\n     * Updates the request with an Authorization header when auth is 'google_auth'.\n     *\n     *   use Google\\Auth\\Middleware\\AuthTokenMiddleware;\n     *   use Google\\Auth\\OAuth2;\n     *   use GuzzleHttp\\Client;\n     *   use GuzzleHttp\\HandlerStack;\n     *\n     *   $config = [..<oauth config param>.];\n     *   $oauth2 = new OAuth2($config)\n     *   $middleware = new AuthTokenMiddleware($oauth2);\n     *   $stack = HandlerStack::create();\n     *   $stack->push($middleware);\n     *\n     *   $client = new Client([\n     *       'handler' => $stack,\n     *       'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',\n     *       'auth' => 'google_auth' // authorize all requests\n     *   ]);\n     *\n     *   $res = $client->get('myproject/taskqueues/myqueue');\n     *\n     * @param callable $handler\n     * @return \\Closure\n     */\n    public function __invoke(callable $handler)\n    {\n        return function (RequestInterface $request, array $options) use ($handler) {\n            // Requests using \"auth\"=\"google_auth\" will be authorized.\n            if (!isset($options['auth']) || $options['auth'] !== 'google_auth') {\n                return $handler($request, $options);\n            }\n\n            $request = $this->addAuthHeaders($request);\n\n            if ($quotaProject = $this->getQuotaProject()) {\n                $request = $request->withHeader(\n                    GetQuotaProjectInterface::X_GOOG_USER_PROJECT_HEADER,\n                    $quotaProject\n                );\n            }\n\n            return $handler($request, $options);\n        };\n    }\n\n    /**\n     * Adds auth related headers to the request.\n     *\n     * @param RequestInterface $request\n     * @return RequestInterface\n     */\n    private function addAuthHeaders(RequestInterface $request)\n    {\n        if (!$this->fetcher instanceof UpdateMetadataInterface ||\n            ($this->fetcher instanceof FetchAuthTokenCache &&\n             !$this->fetcher->getFetcher() instanceof UpdateMetadataInterface)\n        ) {\n            $token = $this->fetcher->fetchAuthToken();\n            $request = $request->withHeader(\n                'authorization',\n                'Bearer ' . ($token['access_token'] ?? $token['id_token'] ?? '')\n            );\n        } else {\n            $headers = $this->fetcher->updateMetadata($request->getHeaders(), null, $this->httpHandler);\n            $request = Utils::modifyRequest($request, ['set_headers' => $headers]);\n        }\n\n        if ($this->tokenCallback && ($token = $this->fetcher->getLastReceivedToken())) {\n            if (array_key_exists('access_token', $token)) {\n                call_user_func($this->tokenCallback, $this->fetcher->getCacheKey(), $token['access_token']);\n            }\n        }\n\n        return $request;\n    }\n\n    /**\n     * @return string|null\n     */\n    private function getQuotaProject()\n    {\n        if ($this->fetcher instanceof GetQuotaProjectInterface) {\n            return $this->fetcher->getQuotaProject();\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Middleware/ProxyAuthTokenMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Middleware;\n\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * ProxyAuthTokenMiddleware is a Guzzle Middleware that adds an Authorization header\n * provided by an object implementing FetchAuthTokenInterface.\n *\n * The FetchAuthTokenInterface#fetchAuthToken is used to obtain a hash; one of\n * the values value in that hash is added as the authorization header.\n *\n * Requests will be accessed with the authorization header:\n *\n * 'proxy-authorization' 'Bearer <value of auth_token>'\n */\nclass ProxyAuthTokenMiddleware\n{\n    /**\n     * @var callable\n     */\n    private $httpHandler;\n\n    /**\n     * @var FetchAuthTokenInterface\n     */\n    private $fetcher;\n\n    /**\n     * @var ?callable\n     */\n    private $tokenCallback;\n\n    /**\n     * Creates a new ProxyAuthTokenMiddleware.\n     *\n     * @param FetchAuthTokenInterface $fetcher is used to fetch the auth token\n     * @param callable|null $httpHandler (optional) callback which delivers psr7 request\n     * @param callable|null $tokenCallback (optional) function to be called when a new token is fetched.\n     */\n    public function __construct(\n        FetchAuthTokenInterface $fetcher,\n        ?callable $httpHandler = null,\n        ?callable $tokenCallback = null\n    ) {\n        $this->fetcher = $fetcher;\n        $this->httpHandler = $httpHandler;\n        $this->tokenCallback = $tokenCallback;\n    }\n\n    /**\n     * Updates the request with an Authorization header when auth is 'google_auth'.\n     *\n     *   use Google\\Auth\\Middleware\\ProxyAuthTokenMiddleware;\n     *   use Google\\Auth\\OAuth2;\n     *   use GuzzleHttp\\Client;\n     *   use GuzzleHttp\\HandlerStack;\n     *\n     *   $config = [..<oauth config param>.];\n     *   $oauth2 = new OAuth2($config)\n     *   $middleware = new ProxyAuthTokenMiddleware($oauth2);\n     *   $stack = HandlerStack::create();\n     *   $stack->push($middleware);\n     *\n     *   $client = new Client([\n     *       'handler' => $stack,\n     *       'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',\n     *       'proxy_auth' => 'google_auth' // authorize all requests\n     *   ]);\n     *\n     *   $res = $client->get('myproject/taskqueues/myqueue');\n     *\n     * @param callable $handler\n     * @return \\Closure\n     */\n    public function __invoke(callable $handler)\n    {\n        return function (RequestInterface $request, array $options) use ($handler) {\n            // Requests using \"proxy_auth\"=\"google_auth\" will be authorized.\n            if (!isset($options['proxy_auth']) || $options['proxy_auth'] !== 'google_auth') {\n                return $handler($request, $options);\n            }\n\n            $request = $request->withHeader('proxy-authorization', 'Bearer ' . $this->fetchToken());\n\n            if ($quotaProject = $this->getQuotaProject()) {\n                $request = $request->withHeader(\n                    GetQuotaProjectInterface::X_GOOG_USER_PROJECT_HEADER,\n                    $quotaProject\n                );\n            }\n\n            return $handler($request, $options);\n        };\n    }\n\n    /**\n     * Call fetcher to fetch the token.\n     *\n     * @return string|null\n     */\n    private function fetchToken()\n    {\n        $auth_tokens = $this->fetcher->fetchAuthToken($this->httpHandler);\n\n        if (array_key_exists('access_token', $auth_tokens)) {\n            // notify the callback if applicable\n            if ($this->tokenCallback) {\n                call_user_func(\n                    $this->tokenCallback,\n                    $this->fetcher->getCacheKey(),\n                    $auth_tokens['access_token']\n                );\n            }\n\n            return $auth_tokens['access_token'];\n        }\n\n        if (array_key_exists('id_token', $auth_tokens)) {\n            return $auth_tokens['id_token'];\n        }\n\n        return null;\n    }\n\n    /**\n     * @return string|null;\n     */\n    private function getQuotaProject()\n    {\n        if ($this->fetcher instanceof GetQuotaProjectInterface) {\n            return $this->fetcher->getQuotaProject();\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Middleware/ScopedAccessTokenMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Middleware;\n\nuse Google\\Auth\\CacheTrait;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * ScopedAccessTokenMiddleware is a Guzzle Middleware that adds an Authorization\n * header provided by a closure.\n *\n * The closure returns an access token, taking the scope, either a single\n * string or an array of strings, as its value.  If provided, a cache will be\n * used to preserve the access token for a given lifetime.\n *\n * Requests will be accessed with the authorization header:\n *\n * 'authorization' 'Bearer <value of auth_token>'\n */\nclass ScopedAccessTokenMiddleware\n{\n    use CacheTrait;\n\n    const DEFAULT_CACHE_LIFETIME = 1500;\n\n    /**\n     * @var callable\n     */\n    private $tokenFunc;\n\n    /**\n     * @var array<string>|string\n     */\n    private $scopes;\n\n    /**\n     * Creates a new ScopedAccessTokenMiddleware.\n     *\n     * @param callable $tokenFunc a token generator function\n     * @param array<string>|string $scopes the token authentication scopes\n     * @param array<mixed>|null $cacheConfig configuration for the cache when it's present\n     * @param CacheItemPoolInterface|null $cache an implementation of CacheItemPoolInterface\n     */\n    public function __construct(\n        callable $tokenFunc,\n        $scopes,\n        ?array $cacheConfig = null,\n        ?CacheItemPoolInterface $cache = null\n    ) {\n        $this->tokenFunc = $tokenFunc;\n        if (!(is_string($scopes) || is_array($scopes))) {\n            throw new \\InvalidArgumentException(\n                'wants scope should be string or array'\n            );\n        }\n        $this->scopes = $scopes;\n\n        if (!is_null($cache)) {\n            $this->cache = $cache;\n            $this->cacheConfig = array_merge([\n                'lifetime' => self::DEFAULT_CACHE_LIFETIME,\n                'prefix' => '',\n            ], $cacheConfig);\n        }\n    }\n\n    /**\n     * Updates the request with an Authorization header when auth is 'scoped'.\n     *\n     *   E.g this could be used to authenticate using the AppEngine\n     *   AppIdentityService.\n     *\n     *   use google\\appengine\\api\\app_identity\\AppIdentityService;\n     *   use Google\\Auth\\Middleware\\ScopedAccessTokenMiddleware;\n     *   use GuzzleHttp\\Client;\n     *   use GuzzleHttp\\HandlerStack;\n     *\n     *   $scope = 'https://www.googleapis.com/auth/taskqueue'\n     *   $middleware = new ScopedAccessTokenMiddleware(\n     *       'AppIdentityService::getAccessToken',\n     *       $scope,\n     *       [ 'prefix' => 'Google\\Auth\\ScopedAccessToken::' ],\n     *       $cache = new Memcache()\n     *   );\n     *   $stack = HandlerStack::create();\n     *   $stack->push($middleware);\n     *\n     *   $client = new Client([\n     *       'handler' => $stack,\n     *       'base_url' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',\n     *       'auth' => 'scoped' // authorize all requests\n     *   ]);\n     *\n     *   $res = $client->get('myproject/taskqueues/myqueue');\n     *\n     * @param callable $handler\n     * @return \\Closure\n     */\n    public function __invoke(callable $handler)\n    {\n        return function (RequestInterface $request, array $options) use ($handler) {\n            // Requests using \"auth\"=\"scoped\" will be authorized.\n            if (!isset($options['auth']) || $options['auth'] !== 'scoped') {\n                return $handler($request, $options);\n            }\n\n            $request = $request->withHeader('authorization', 'Bearer ' . $this->fetchToken());\n\n            return $handler($request, $options);\n        };\n    }\n\n    /**\n     * @return string\n     */\n    private function getCacheKey()\n    {\n        $key = null;\n\n        if (is_string($this->scopes)) {\n            $key .= $this->scopes;\n        } elseif (is_array($this->scopes)) {\n            $key .= implode(':', $this->scopes);\n        }\n\n        return $key;\n    }\n\n    /**\n     * Determine if token is available in the cache, if not call tokenFunc to\n     * fetch it.\n     *\n     * @return string\n     */\n    private function fetchToken()\n    {\n        $cacheKey = $this->getCacheKey();\n        $cached = $this->getCachedValue($cacheKey);\n\n        if (!empty($cached)) {\n            return $cached;\n        }\n\n        $token = call_user_func($this->tokenFunc, $this->scopes);\n        $this->setCachedValue($cacheKey, $token);\n\n        return $token;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/Middleware/SimpleMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth\\Middleware;\n\nuse GuzzleHttp\\Psr7\\Query;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * SimpleMiddleware is a Guzzle Middleware that implements Google's Simple API\n * access.\n *\n * Requests are accessed using the Simple API access developer key.\n */\nclass SimpleMiddleware\n{\n    /**\n     * @var array<mixed>\n     */\n    private $config;\n\n    /**\n     * Create a new Simple plugin.\n     *\n     * The configuration array expects one option\n     * - key: required, otherwise InvalidArgumentException is thrown\n     *\n     * @param array<mixed> $config Configuration array\n     */\n    public function __construct(array $config)\n    {\n        if (!isset($config['key'])) {\n            throw new \\InvalidArgumentException('requires a key to have been set');\n        }\n\n        $this->config = array_merge(['key' => null], $config);\n    }\n\n    /**\n     * Updates the request query with the developer key if auth is set to simple.\n     *\n     *   use Google\\Auth\\Middleware\\SimpleMiddleware;\n     *   use GuzzleHttp\\Client;\n     *   use GuzzleHttp\\HandlerStack;\n     *\n     *   $my_key = 'is not the same as yours';\n     *   $middleware = new SimpleMiddleware(['key' => $my_key]);\n     *   $stack = HandlerStack::create();\n     *   $stack->push($middleware);\n     *\n     *   $client = new Client([\n     *       'handler' => $stack,\n     *       'base_uri' => 'https://www.googleapis.com/discovery/v1/',\n     *       'auth' => 'simple'\n     *   ]);\n     *\n     *   $res = $client->get('drive/v2/rest');\n     *\n     * @param callable $handler\n     * @return \\Closure\n     */\n    public function __invoke(callable $handler)\n    {\n        return function (RequestInterface $request, array $options) use ($handler) {\n            // Requests using \"auth\"=\"scoped\" will be authorized.\n            if (!isset($options['auth']) || $options['auth'] !== 'simple') {\n                return $handler($request, $options);\n            }\n\n            $query = Query::parse($request->getUri()->getQuery());\n            $params = array_merge($query, $this->config);\n            $uri = $request->getUri()->withQuery(Query::build($params));\n            $request = $request->withUri($uri);\n\n            return $handler($request, $options);\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/OAuth2.php",
    "content": "<?php\n/*\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse GuzzleHttp\\Psr7\\Query;\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Utils;\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * OAuth2 supports authentication by OAuth2 2-legged flows.\n *\n * It primary supports\n * - service account authorization\n * - authorization where a user already has an access token\n */\nclass OAuth2 implements FetchAuthTokenInterface\n{\n    const DEFAULT_EXPIRY_SECONDS = 3600; // 1 hour\n    const DEFAULT_SKEW_SECONDS = 60; // 1 minute\n    const JWT_URN = 'urn:ietf:params:oauth:grant-type:jwt-bearer';\n    const STS_URN = 'urn:ietf:params:oauth:grant-type:token-exchange';\n    private const STS_REQUESTED_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:access_token';\n\n    /**\n     * TODO: determine known methods from the keys of JWT::methods.\n     *\n     * @var array<string>\n     */\n    public static $knownSigningAlgorithms = [\n        'HS256',\n        'HS512',\n        'HS384',\n        'RS256',\n    ];\n\n    /**\n     * The well known grant types.\n     *\n     * @var array<string>\n     */\n    public static $knownGrantTypes = [\n        'authorization_code',\n        'refresh_token',\n        'password',\n        'client_credentials',\n    ];\n\n    /**\n     * - authorizationUri\n     *   The authorization server's HTTP endpoint capable of\n     *   authenticating the end-user and obtaining authorization.\n     *\n     * @var ?UriInterface\n     */\n    private $authorizationUri;\n\n    /**\n     * - tokenCredentialUri\n     *   The authorization server's HTTP endpoint capable of issuing\n     *   tokens and refreshing expired tokens.\n     *\n     * @var UriInterface\n     */\n    private $tokenCredentialUri;\n\n    /**\n     * The redirection URI used in the initial request.\n     *\n     * @var ?string\n     */\n    private $redirectUri;\n\n    /**\n     * A unique identifier issued to the client to identify itself to the\n     * authorization server.\n     *\n     * @var string\n     */\n    private $clientId;\n\n    /**\n     * A shared symmetric secret issued by the authorization server, which is\n     * used to authenticate the client.\n     *\n     * @var string\n     */\n    private $clientSecret;\n\n    /**\n     * The resource owner's username.\n     *\n     * @var ?string\n     */\n    private $username;\n\n    /**\n     * The resource owner's password.\n     *\n     * @var ?string\n     */\n    private $password;\n\n    /**\n     * The scope of the access request, expressed either as an Array or as a\n     * space-delimited string.\n     *\n     * @var ?array<string>\n     */\n    private $scope;\n\n    /**\n     * An arbitrary string designed to allow the client to maintain state.\n     *\n     * @var string\n     */\n    private $state;\n\n    /**\n     * The authorization code issued to this client.\n     *\n     * Only used by the authorization code access grant type.\n     *\n     * @var ?string\n     */\n    private $code;\n\n    /**\n     * The issuer ID when using assertion profile.\n     *\n     * @var ?string\n     */\n    private $issuer;\n\n    /**\n     * The target audience for assertions.\n     *\n     * @var string\n     */\n    private $audience;\n\n    /**\n     * The target sub when issuing assertions.\n     *\n     * @var string\n     */\n    private $sub;\n\n    /**\n     * The number of seconds assertions are valid for.\n     *\n     * @var int\n     */\n    private $expiry;\n\n    /**\n     * The signing key when using assertion profile.\n     *\n     * @var ?string\n     */\n    private $signingKey;\n\n    /**\n     * The signing key id when using assertion profile. Param kid in jwt header\n     *\n     * @var string\n     */\n    private $signingKeyId;\n\n    /**\n     * The signing algorithm when using an assertion profile.\n     *\n     * @var ?string\n     */\n    private $signingAlgorithm;\n\n    /**\n     * The refresh token associated with the access token to be refreshed.\n     *\n     * @var ?string\n     */\n    private $refreshToken;\n\n    /**\n     * The current access token.\n     *\n     * @var string\n     */\n    private $accessToken;\n\n    /**\n     * The current ID token.\n     *\n     * @var string\n     */\n    private $idToken;\n\n    /**\n     * The scopes granted to the current access token\n     *\n     * @var string\n     */\n    private $grantedScope;\n\n    /**\n     * The lifetime in seconds of the current access token.\n     *\n     * @var ?int\n     */\n    private $expiresIn;\n\n    /**\n     * The expiration time of the access token as a number of seconds since the\n     * unix epoch.\n     *\n     * @var ?int\n     */\n    private $expiresAt;\n\n    /**\n     * The issue time of the access token as a number of seconds since the unix\n     * epoch.\n     *\n     * @var ?int\n     */\n    private $issuedAt;\n\n    /**\n     * The current grant type.\n     *\n     * @var ?string\n     */\n    private $grantType;\n\n    /**\n     * When using an extension grant type, this is the set of parameters used by\n     * that extension.\n     *\n     * @var array<mixed>\n     */\n    private $extensionParams;\n\n    /**\n     * When using the toJwt function, these claims will be added to the JWT\n     * payload.\n     *\n     * @var array<mixed>\n     */\n    private $additionalClaims;\n\n    /**\n     * The code verifier for PKCE for OAuth 2.0. When set, the authorization\n     * URI will contain the Code Challenge and Code Challenge Method querystring\n     * parameters, and the token URI will contain the Code Verifier parameter.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc7636\n     * @var ?string\n     */\n    private $codeVerifier;\n\n    /**\n     * For STS requests.\n     * A URI that indicates the target service or resource where the client\n     * intends to use the requested security token.\n     */\n    private ?string $resource;\n\n    /**\n     * For STS requests.\n     * A fetcher for the \"subject_token\", which is a security token that\n     * represents the identity of the party on behalf of whom the request is\n     * being made.\n     */\n    private ?ExternalAccountCredentialSourceInterface $subjectTokenFetcher;\n\n    /**\n     * For STS requests.\n     * An identifier, that indicates the type of the security token in the\n     * subjectToken parameter.\n     */\n    private ?string $subjectTokenType;\n\n    /**\n     * For STS requests.\n     * A security token that represents the identity of the acting party.\n     */\n    private ?string $actorToken;\n\n    /**\n     * For STS requests.\n     * An identifier that indicates the type of the security token in the\n     * actorToken parameter.\n     */\n    private ?string $actorTokenType;\n\n    /**\n     * From STS response.\n     * An identifier for the representation of the issued security token.\n     */\n    private ?string $issuedTokenType = null;\n\n    /**\n     * From STS response.\n     * An identifier for the representation of the issued security token.\n     *\n     * @var array<mixed>\n     */\n    private array $additionalOptions;\n\n    /**\n     * Create a new OAuthCredentials.\n     *\n     * The configuration array accepts various options\n     *\n     * - authorizationUri\n     *   The authorization server's HTTP endpoint capable of\n     *   authenticating the end-user and obtaining authorization.\n     *\n     * - tokenCredentialUri\n     *   The authorization server's HTTP endpoint capable of issuing\n     *   tokens and refreshing expired tokens.\n     *\n     * - clientId\n     *   A unique identifier issued to the client to identify itself to the\n     *   authorization server.\n     *\n     * - clientSecret\n     *   A shared symmetric secret issued by the authorization server,\n     *   which is used to authenticate the client.\n     *\n     * - scope\n     *   The scope of the access request, expressed either as an Array\n     *   or as a space-delimited String.\n     *\n     * - state\n     *   An arbitrary string designed to allow the client to maintain state.\n     *\n     * - redirectUri\n     *   The redirection URI used in the initial request.\n     *\n     * - username\n     *   The resource owner's username.\n     *\n     * - password\n     *   The resource owner's password.\n     *\n     * - issuer\n     *   Issuer ID when using assertion profile\n     *\n     * - audience\n     *   Target audience for assertions\n     *\n     * - expiry\n     *   Number of seconds assertions are valid for\n     *\n     * - signingKey\n     *   Signing key when using assertion profile\n     *\n     * - signingKeyId\n     *   Signing key id when using assertion profile\n     *\n     * - refreshToken\n     *   The refresh token associated with the access token\n     *   to be refreshed.\n     *\n     * - accessToken\n     *   The current access token for this client.\n     *\n     * - idToken\n     *   The current ID token for this client.\n     *\n     * - extensionParams\n     *   When using an extension grant type, this is the set of parameters used\n     *   by that extension.\n     *\n     * - codeVerifier\n     *   The code verifier for PKCE for OAuth 2.0.\n     *\n     * - resource\n     *   The target service or resource where the client ntends to use the\n     *   requested security token.\n     *\n     * - subjectTokenFetcher\n     *    A fetcher for the \"subject_token\", which is a security token that\n     *    represents the identity of the party on behalf of whom the request is\n     *    being made.\n     *\n     * - subjectTokenType\n     *   An identifier that indicates the type of the security token in the\n     *   subjectToken parameter.\n     *\n     * - actorToken\n     *   A security token that represents the identity of the acting party.\n     *\n     * - actorTokenType\n     *   An identifier for the representation of the issued security token.\n     *\n     * @param array<mixed> $config Configuration array\n     */\n    public function __construct(array $config)\n    {\n        $opts = array_merge([\n            'expiry' => self::DEFAULT_EXPIRY_SECONDS,\n            'extensionParams' => [],\n            'authorizationUri' => null,\n            'redirectUri' => null,\n            'tokenCredentialUri' => null,\n            'state' => null,\n            'username' => null,\n            'password' => null,\n            'clientId' => null,\n            'clientSecret' => null,\n            'issuer' => null,\n            'sub' => null,\n            'audience' => null,\n            'signingKey' => null,\n            'signingKeyId' => null,\n            'signingAlgorithm' => null,\n            'scope' => null,\n            'additionalClaims' => [],\n            'codeVerifier' => null,\n            'resource' => null,\n            'subjectTokenFetcher' => null,\n            'subjectTokenType' => null,\n            'actorToken' => null,\n            'actorTokenType' => null,\n            'additionalOptions' => [],\n        ], $config);\n\n        $this->setAuthorizationUri($opts['authorizationUri']);\n        $this->setRedirectUri($opts['redirectUri']);\n        $this->setTokenCredentialUri($opts['tokenCredentialUri']);\n        $this->setState($opts['state']);\n        $this->setUsername($opts['username']);\n        $this->setPassword($opts['password']);\n        $this->setClientId($opts['clientId']);\n        $this->setClientSecret($opts['clientSecret']);\n        $this->setIssuer($opts['issuer']);\n        $this->setSub($opts['sub']);\n        $this->setExpiry($opts['expiry']);\n        $this->setAudience($opts['audience']);\n        $this->setSigningKey($opts['signingKey']);\n        $this->setSigningKeyId($opts['signingKeyId']);\n        $this->setSigningAlgorithm($opts['signingAlgorithm']);\n        $this->setScope($opts['scope']);\n        $this->setExtensionParams($opts['extensionParams']);\n        $this->setAdditionalClaims($opts['additionalClaims']);\n        $this->setCodeVerifier($opts['codeVerifier']);\n\n        // for STS\n        $this->resource = $opts['resource'];\n        $this->subjectTokenFetcher = $opts['subjectTokenFetcher'];\n        $this->subjectTokenType = $opts['subjectTokenType'];\n        $this->actorToken = $opts['actorToken'];\n        $this->actorTokenType = $opts['actorTokenType'];\n        $this->additionalOptions = $opts['additionalOptions'];\n\n        $this->updateToken($opts);\n    }\n\n    /**\n     * Verifies the idToken if present.\n     *\n     * - if none is present, return null\n     * - if present, but invalid, raises DomainException.\n     * - otherwise returns the payload in the idtoken as a PHP object.\n     *\n     * The behavior of this method varies depending on the version of\n     * `firebase/php-jwt` you are using. In versions 6.0 and above, you cannot\n     * provide multiple $allowed_algs, and instead must provide an array of Key\n     * objects as the $publicKey.\n     *\n     * @param string|Key|Key[] $publicKey The public key to use to authenticate the token\n     * @param string|array<string> $allowed_algs algorithm or array of supported verification algorithms.\n     *        Providing more than one algorithm will throw an exception.\n     * @throws \\DomainException if the token is missing an audience.\n     * @throws \\DomainException if the audience does not match the one set in\n     *         the OAuth2 class instance.\n     * @throws \\UnexpectedValueException If the token is invalid\n     * @throws \\InvalidArgumentException If more than one value for allowed_algs is supplied\n     * @throws \\Firebase\\JWT\\SignatureInvalidException If the signature is invalid.\n     * @throws \\Firebase\\JWT\\BeforeValidException If the token is not yet valid.\n     * @throws \\Firebase\\JWT\\ExpiredException If the token has expired.\n     * @return null|object\n     */\n    public function verifyIdToken($publicKey = null, $allowed_algs = [])\n    {\n        $idToken = $this->getIdToken();\n        if (is_null($idToken)) {\n            return null;\n        }\n\n        $resp = $this->jwtDecode($idToken, $publicKey, $allowed_algs);\n        if (!property_exists($resp, 'aud')) {\n            throw new \\DomainException('No audience found the id token');\n        }\n        if ($resp->aud != $this->getAudience()) {\n            throw new \\DomainException('Wrong audience present in the id token');\n        }\n\n        return $resp;\n    }\n\n    /**\n     * Obtains the encoded jwt from the instance data.\n     *\n     * @param array<mixed> $config array optional configuration parameters\n     * @return string\n     */\n    public function toJwt(array $config = [])\n    {\n        if (is_null($this->getSigningKey())) {\n            throw new \\DomainException('No signing key available');\n        }\n        if (is_null($this->getSigningAlgorithm())) {\n            throw new \\DomainException('No signing algorithm specified');\n        }\n        $now = time();\n\n        $opts = array_merge([\n            'skew' => self::DEFAULT_SKEW_SECONDS,\n        ], $config);\n\n        $assertion = [\n            'iss' => $this->getIssuer(),\n            'exp' => ($now + $this->getExpiry()),\n            'iat' => ($now - $opts['skew']),\n        ];\n        foreach ($assertion as $k => $v) {\n            if (is_null($v)) {\n                throw new \\DomainException($k . ' should not be null');\n            }\n        }\n        if (!(is_null($this->getAudience()))) {\n            $assertion['aud'] = $this->getAudience();\n        }\n\n        if (!(is_null($this->getScope()))) {\n            $assertion['scope'] = $this->getScope();\n        }\n\n        if (empty($assertion['scope']) && empty($assertion['aud'])) {\n            throw new \\DomainException('one of scope or aud should not be null');\n        }\n\n        if (!(is_null($this->getSub()))) {\n            $assertion['sub'] = $this->getSub();\n        }\n        $assertion += $this->getAdditionalClaims();\n\n        return JWT::encode(\n            $assertion,\n            $this->getSigningKey(),\n            $this->getSigningAlgorithm(),\n            $this->getSigningKeyId()\n        );\n    }\n\n    /**\n     * Generates a request for token credentials.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed> $headers [optional] Additional headers to pass to\n     *        the token endpoint request.\n     * @return RequestInterface the authorization Url.\n     */\n    public function generateCredentialsRequest(?callable $httpHandler = null, array $headers = [])\n    {\n        $uri = $this->getTokenCredentialUri();\n        if (is_null($uri)) {\n            throw new \\DomainException('No token credential URI was set.');\n        }\n\n        $grantType = $this->getGrantType();\n        $params = ['grant_type' => $grantType];\n        switch ($grantType) {\n            case 'authorization_code':\n                $params['code'] = $this->getCode();\n                $params['redirect_uri'] = $this->getRedirectUri();\n                if ($this->codeVerifier) {\n                    $params['code_verifier'] = $this->codeVerifier;\n                }\n                $this->addClientCredentials($params);\n                break;\n            case 'password':\n                $params['username'] = $this->getUsername();\n                $params['password'] = $this->getPassword();\n                $this->addClientCredentials($params);\n                break;\n            case 'refresh_token':\n                $params['refresh_token'] = $this->getRefreshToken();\n                if (isset($this->getAdditionalClaims()['target_audience'])) {\n                    $params['target_audience'] = $this->getAdditionalClaims()['target_audience'];\n                }\n                $this->addClientCredentials($params);\n                break;\n            case self::JWT_URN:\n                $params['assertion'] = $this->toJwt();\n                break;\n            case self::STS_URN:\n                $token = $this->subjectTokenFetcher->fetchSubjectToken($httpHandler);\n                $params['subject_token'] = $token;\n                $params['subject_token_type'] = $this->subjectTokenType;\n                $params += array_filter([\n                    'resource'             => $this->resource,\n                    'audience'             => $this->audience,\n                    'scope'                => $this->getScope(),\n                    'requested_token_type' => self::STS_REQUESTED_TOKEN_TYPE,\n                    'actor_token'          => $this->actorToken,\n                    'actor_token_type'     => $this->actorTokenType,\n                ]);\n                if ($this->additionalOptions) {\n                    $params['options'] = json_encode($this->additionalOptions);\n                }\n                break;\n            default:\n                if (!is_null($this->getRedirectUri())) {\n                    # Grant type was supposed to be 'authorization_code', as there\n                    # is a redirect URI.\n                    throw new \\DomainException('Missing authorization code');\n                }\n                unset($params['grant_type']);\n                if (!is_null($grantType)) {\n                    $params['grant_type'] = $grantType;\n                }\n                $params = array_merge($params, $this->getExtensionParams());\n        }\n\n        $headers = [\n            'Cache-Control' => 'no-store',\n            'Content-Type' => 'application/x-www-form-urlencoded',\n        ] + $headers;\n\n        return new Request(\n            'POST',\n            $uri,\n            $headers,\n            Query::build($params)\n        );\n    }\n\n    /**\n     * Fetches the auth tokens based on the current state.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @param array<mixed> $headers [optional] If present, add these headers to the token\n     *        endpoint request.\n     * @return array<mixed> the response\n     */\n    public function fetchAuthToken(?callable $httpHandler = null, array $headers = [])\n    {\n        if (is_null($httpHandler)) {\n            $httpHandler = HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n        }\n\n        $response = $httpHandler($this->generateCredentialsRequest($httpHandler, $headers));\n        $credentials = $this->parseTokenResponse($response);\n        $this->updateToken($credentials);\n        if (isset($credentials['scope'])) {\n            $this->setGrantedScope($credentials['scope']);\n        }\n\n        return $credentials;\n    }\n\n    /**\n     * @deprecated\n     *\n     * Obtains a key that can used to cache the results of #fetchAuthToken.\n     *\n     * The key is derived from the scopes.\n     *\n     * @return ?string a key that may be used to cache the auth token.\n     */\n    public function getCacheKey()\n    {\n        if (is_array($this->scope)) {\n            return implode(':', $this->scope);\n        }\n\n        if ($this->audience) {\n            return $this->audience;\n        }\n\n        // If scope has not set, return null to indicate no caching.\n        return null;\n    }\n\n    /**\n     * Gets this instance's SubjectTokenFetcher\n     *\n     * @return null|ExternalAccountCredentialSourceInterface\n     */\n    public function getSubjectTokenFetcher(): ?ExternalAccountCredentialSourceInterface\n    {\n        return $this->subjectTokenFetcher;\n    }\n\n    /**\n     * Parses the fetched tokens.\n     *\n     * @param ResponseInterface $resp the response.\n     * @return array<mixed> the tokens parsed from the response body.\n     * @throws \\Exception\n     */\n    public function parseTokenResponse(ResponseInterface $resp)\n    {\n        $body = (string) $resp->getBody();\n        if ($resp->hasHeader('Content-Type') &&\n            $resp->getHeaderLine('Content-Type') == 'application/x-www-form-urlencoded'\n        ) {\n            $res = [];\n            parse_str($body, $res);\n\n            return $res;\n        }\n\n        // Assume it's JSON; if it's not throw an exception\n        if (null === $res = json_decode($body, true)) {\n            throw new \\Exception('Invalid JSON response');\n        }\n\n        return $res;\n    }\n\n    /**\n     * Updates an OAuth 2.0 client.\n     *\n     * Example:\n     * ```\n     * $oauth->updateToken([\n     *     'refresh_token' => 'n4E9O119d',\n     *     'access_token' => 'FJQbwq9',\n     *     'expires_in' => 3600\n     * ]);\n     * ```\n     *\n     * @param array<mixed> $config\n     *  The configuration parameters related to the token.\n     *\n     *  - refresh_token\n     *    The refresh token associated with the access token\n     *    to be refreshed.\n     *\n     *  - access_token\n     *    The current access token for this client.\n     *\n     *  - id_token\n     *    The current ID token for this client.\n     *\n     *  - expires_in\n     *    The time in seconds until access token expiration.\n     *\n     *  - expires_at\n     *    The time as an integer number of seconds since the Epoch\n     *\n     *  - issued_at\n     *    The timestamp that the token was issued at.\n     * @return void\n     */\n    public function updateToken(array $config)\n    {\n        $opts = array_merge([\n            'extensionParams' => [],\n            'access_token' => null,\n            'id_token' => null,\n            'expires_in' => null,\n            'expires_at' => null,\n            'issued_at' => null,\n            'scope' => null,\n        ], $config);\n\n        $this->setExpiresAt($opts['expires_at']);\n        $this->setExpiresIn($opts['expires_in']);\n        // By default, the token is issued at `Time.now` when `expiresIn` is set,\n        // but this can be used to supply a more precise time.\n        if (!is_null($opts['issued_at'])) {\n            $this->setIssuedAt($opts['issued_at']);\n        }\n\n        $this->setAccessToken($opts['access_token']);\n        $this->setIdToken($opts['id_token']);\n\n        // The refresh token should only be updated if a value is explicitly\n        // passed in, as some access token responses do not include a refresh\n        // token.\n        if (array_key_exists('refresh_token', $opts)) {\n            $this->setRefreshToken($opts['refresh_token']);\n        }\n\n        // Required for STS response. An identifier for the representation of\n        // the issued security token.\n        if (array_key_exists('issued_token_type', $opts)) {\n            $this->issuedTokenType = $opts['issued_token_type'];\n        }\n    }\n\n    /**\n     * Builds the authorization Uri that the user should be redirected to.\n     *\n     * @param array<mixed> $config configuration options that customize the return url.\n     * @return UriInterface the authorization Url.\n     * @throws InvalidArgumentException\n     */\n    public function buildFullAuthorizationUri(array $config = [])\n    {\n        if (is_null($this->getAuthorizationUri())) {\n            throw new InvalidArgumentException(\n                'requires an authorizationUri to have been set'\n            );\n        }\n\n        $params = array_merge([\n            'response_type' => 'code',\n            'access_type' => 'offline',\n            'client_id' => $this->clientId,\n            'redirect_uri' => $this->redirectUri,\n            'state' => $this->state,\n            'scope' => $this->getScope(),\n        ], $config);\n\n        // Validate the auth_params\n        if (is_null($params['client_id'])) {\n            throw new InvalidArgumentException(\n                'missing the required client identifier'\n            );\n        }\n        if (is_null($params['redirect_uri'])) {\n            throw new InvalidArgumentException('missing the required redirect URI');\n        }\n        if (!empty($params['prompt']) && !empty($params['approval_prompt'])) {\n            throw new InvalidArgumentException(\n                'prompt and approval_prompt are mutually exclusive'\n            );\n        }\n        if ($this->codeVerifier) {\n            $params['code_challenge'] = $this->getCodeChallenge($this->codeVerifier);\n            $params['code_challenge_method'] = $this->getCodeChallengeMethod();\n        }\n\n        // Construct the uri object; return it if it is valid.\n        $result = clone $this->authorizationUri;\n        $existingParams = Query::parse($result->getQuery());\n\n        $result = $result->withQuery(\n            Query::build(array_merge($existingParams, $params))\n        );\n\n        if ($result->getScheme() != 'https') {\n            throw new InvalidArgumentException(\n                'Authorization endpoint must be protected by TLS'\n            );\n        }\n\n        return $result;\n    }\n\n    /**\n     * @return string|null\n     */\n    public function getCodeVerifier(): ?string\n    {\n        return $this->codeVerifier;\n    }\n\n    /**\n     * A cryptographically random string that is used to correlate the\n     * authorization request to the token request.\n     *\n     * The code verifier for PKCE for OAuth 2.0. When set, the authorization\n     * URI will contain the Code Challenge and Code Challenge Method querystring\n     * parameters, and the token URI will contain the Code Verifier parameter.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc7636\n     *\n     * @param string|null $codeVerifier\n     */\n    public function setCodeVerifier(?string $codeVerifier): void\n    {\n        $this->codeVerifier = $codeVerifier;\n    }\n\n    /**\n     * Generates a random 128-character string for the \"code_verifier\" parameter\n     * in PKCE for OAuth 2.0. This is a cryptographically random string that is\n     * determined using random_int, hashed using \"hash\" and sha256, and base64\n     * encoded.\n     *\n     * When this method is called, the code verifier is set on the object.\n     *\n     * @return string\n     */\n    public function generateCodeVerifier(): string\n    {\n        return $this->codeVerifier = $this->generateRandomString(128);\n    }\n\n    private function getCodeChallenge(string $randomString): string\n    {\n        return rtrim(strtr(base64_encode(hash('sha256', $randomString, true)), '+/', '-_'), '=');\n    }\n\n    private function getCodeChallengeMethod(): string\n    {\n        return 'S256';\n    }\n\n    private function generateRandomString(int $length): string\n    {\n        $validChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~';\n        $validCharsLen = strlen($validChars);\n        $str = '';\n        $i = 0;\n        while ($i++ < $length) {\n            $str .= $validChars[random_int(0, $validCharsLen - 1)];\n        }\n        return $str;\n    }\n\n    /**\n     * Sets the authorization server's HTTP endpoint capable of authenticating\n     * the end-user and obtaining authorization.\n     *\n     * @param string $uri\n     * @return void\n     */\n    public function setAuthorizationUri($uri)\n    {\n        $this->authorizationUri = $this->coerceUri($uri);\n    }\n\n    /**\n     * Gets the authorization server's HTTP endpoint capable of authenticating\n     * the end-user and obtaining authorization.\n     *\n     * @return ?UriInterface\n     */\n    public function getAuthorizationUri()\n    {\n        return $this->authorizationUri;\n    }\n\n    /**\n     * Gets the authorization server's HTTP endpoint capable of issuing tokens\n     * and refreshing expired tokens.\n     *\n     * @return ?UriInterface\n     */\n    public function getTokenCredentialUri()\n    {\n        return $this->tokenCredentialUri;\n    }\n\n    /**\n     * Sets the authorization server's HTTP endpoint capable of issuing tokens\n     * and refreshing expired tokens.\n     *\n     * @param string $uri\n     * @return void\n     */\n    public function setTokenCredentialUri($uri)\n    {\n        $this->tokenCredentialUri = $this->coerceUri($uri);\n    }\n\n    /**\n     * Gets the redirection URI used in the initial request.\n     *\n     * @return ?string\n     */\n    public function getRedirectUri()\n    {\n        return $this->redirectUri;\n    }\n\n    /**\n     * Sets the redirection URI used in the initial request.\n     *\n     * @param ?string $uri\n     * @return void\n     */\n    public function setRedirectUri($uri)\n    {\n        if (is_null($uri)) {\n            $this->redirectUri = null;\n\n            return;\n        }\n        // redirect URI must be absolute\n        if (!$this->isAbsoluteUri($uri)) {\n            // \"postmessage\" is a reserved URI string in Google-land\n            // @see https://developers.google.com/identity/sign-in/web/server-side-flow\n            if ('postmessage' !== (string) $uri) {\n                throw new InvalidArgumentException(\n                    'Redirect URI must be absolute'\n                );\n            }\n        }\n        $this->redirectUri = (string) $uri;\n    }\n\n    /**\n     * Gets the scope of the access requests as a space-delimited String.\n     *\n     * @return ?string\n     */\n    public function getScope()\n    {\n        if (is_null($this->scope)) {\n            return $this->scope;\n        }\n\n        return implode(' ', $this->scope);\n    }\n\n    /**\n     * Gets the subject token type\n     *\n     * @return ?string\n     */\n    public function getSubjectTokenType(): ?string\n    {\n        return $this->subjectTokenType;\n    }\n\n    /**\n     * Sets the scope of the access request, expressed either as an Array or as\n     * a space-delimited String.\n     *\n     * @param string|array<string>|null $scope\n     * @return void\n     * @throws InvalidArgumentException\n     */\n    public function setScope($scope)\n    {\n        if (is_null($scope)) {\n            $this->scope = null;\n        } elseif (is_string($scope)) {\n            $this->scope = explode(' ', $scope);\n        } elseif (is_array($scope)) {\n            foreach ($scope as $s) {\n                $pos = strpos($s, ' ');\n                if ($pos !== false) {\n                    throw new InvalidArgumentException(\n                        'array scope values should not contain spaces'\n                    );\n                }\n            }\n            $this->scope = $scope;\n        } else {\n            throw new InvalidArgumentException(\n                'scopes should be a string or array of strings'\n            );\n        }\n    }\n\n    /**\n     * Gets the current grant type.\n     *\n     * @return ?string\n     */\n    public function getGrantType()\n    {\n        if (!is_null($this->grantType)) {\n            return $this->grantType;\n        }\n\n        // Returns the inferred grant type, based on the current object instance\n        // state.\n        if (!is_null($this->code)) {\n            return 'authorization_code';\n        }\n\n        if (!is_null($this->refreshToken)) {\n            return 'refresh_token';\n        }\n\n        if (!is_null($this->username) && !is_null($this->password)) {\n            return 'password';\n        }\n\n        if (!is_null($this->issuer) && !is_null($this->signingKey)) {\n            return self::JWT_URN;\n        }\n\n        if (!is_null($this->subjectTokenFetcher) && !is_null($this->subjectTokenType)) {\n            return self::STS_URN;\n        }\n\n        return null;\n    }\n\n    /**\n     * Sets the current grant type.\n     *\n     * @param string $grantType\n     * @return void\n     * @throws InvalidArgumentException\n     */\n    public function setGrantType($grantType)\n    {\n        if (in_array($grantType, self::$knownGrantTypes)) {\n            $this->grantType = $grantType;\n        } else {\n            // validate URI\n            if (!$this->isAbsoluteUri($grantType)) {\n                throw new InvalidArgumentException(\n                    'invalid grant type'\n                );\n            }\n            $this->grantType = (string) $grantType;\n        }\n    }\n\n    /**\n     * Gets an arbitrary string designed to allow the client to maintain state.\n     *\n     * @return string\n     */\n    public function getState()\n    {\n        return $this->state;\n    }\n\n    /**\n     * Sets an arbitrary string designed to allow the client to maintain state.\n     *\n     * @param string $state\n     * @return void\n     */\n    public function setState($state)\n    {\n        $this->state = $state;\n    }\n\n    /**\n     * Gets the authorization code issued to this client.\n     *\n     * @return string\n     */\n    public function getCode()\n    {\n        return $this->code;\n    }\n\n    /**\n     * Sets the authorization code issued to this client.\n     *\n     * @param string $code\n     * @return void\n     */\n    public function setCode($code)\n    {\n        $this->code = $code;\n    }\n\n    /**\n     * Gets the resource owner's username.\n     *\n     * @return string\n     */\n    public function getUsername()\n    {\n        return $this->username;\n    }\n\n    /**\n     * Sets the resource owner's username.\n     *\n     * @param string $username\n     * @return void\n     */\n    public function setUsername($username)\n    {\n        $this->username = $username;\n    }\n\n    /**\n     * Gets the resource owner's password.\n     *\n     * @return string\n     */\n    public function getPassword()\n    {\n        return $this->password;\n    }\n\n    /**\n     * Sets the resource owner's password.\n     *\n     * @param string $password\n     * @return void\n     */\n    public function setPassword($password)\n    {\n        $this->password = $password;\n    }\n\n    /**\n     * Sets a unique identifier issued to the client to identify itself to the\n     * authorization server.\n     *\n     * @return string\n     */\n    public function getClientId()\n    {\n        return $this->clientId;\n    }\n\n    /**\n     * Sets a unique identifier issued to the client to identify itself to the\n     * authorization server.\n     *\n     * @param string $clientId\n     * @return void\n     */\n    public function setClientId($clientId)\n    {\n        $this->clientId = $clientId;\n    }\n\n    /**\n     * Gets a shared symmetric secret issued by the authorization server, which\n     * is used to authenticate the client.\n     *\n     * @return string\n     */\n    public function getClientSecret()\n    {\n        return $this->clientSecret;\n    }\n\n    /**\n     * Sets a shared symmetric secret issued by the authorization server, which\n     * is used to authenticate the client.\n     *\n     * @param string $clientSecret\n     * @return void\n     */\n    public function setClientSecret($clientSecret)\n    {\n        $this->clientSecret = $clientSecret;\n    }\n\n    /**\n     * Gets the Issuer ID when using assertion profile.\n     *\n     * @return ?string\n     */\n    public function getIssuer()\n    {\n        return $this->issuer;\n    }\n\n    /**\n     * Sets the Issuer ID when using assertion profile.\n     *\n     * @param string $issuer\n     * @return void\n     */\n    public function setIssuer($issuer)\n    {\n        $this->issuer = $issuer;\n    }\n\n    /**\n     * Gets the target sub when issuing assertions.\n     *\n     * @return ?string\n     */\n    public function getSub()\n    {\n        return $this->sub;\n    }\n\n    /**\n     * Sets the target sub when issuing assertions.\n     *\n     * @param string $sub\n     * @return void\n     */\n    public function setSub($sub)\n    {\n        $this->sub = $sub;\n    }\n\n    /**\n     * Gets the target audience when issuing assertions.\n     *\n     * @return ?string\n     */\n    public function getAudience()\n    {\n        return $this->audience;\n    }\n\n    /**\n     * Sets the target audience when issuing assertions.\n     *\n     * @param string $audience\n     * @return void\n     */\n    public function setAudience($audience)\n    {\n        $this->audience = $audience;\n    }\n\n    /**\n     * Gets the signing key when using an assertion profile.\n     *\n     * @return ?string\n     */\n    public function getSigningKey()\n    {\n        return $this->signingKey;\n    }\n\n    /**\n     * Sets the signing key when using an assertion profile.\n     *\n     * @param string $signingKey\n     * @return void\n     */\n    public function setSigningKey($signingKey)\n    {\n        $this->signingKey = $signingKey;\n    }\n\n    /**\n     * Gets the signing key id when using an assertion profile.\n     *\n     * @return ?string\n     */\n    public function getSigningKeyId()\n    {\n        return $this->signingKeyId;\n    }\n\n    /**\n     * Sets the signing key id when using an assertion profile.\n     *\n     * @param string $signingKeyId\n     * @return void\n     */\n    public function setSigningKeyId($signingKeyId)\n    {\n        $this->signingKeyId = $signingKeyId;\n    }\n\n    /**\n     * Gets the signing algorithm when using an assertion profile.\n     *\n     * @return ?string\n     */\n    public function getSigningAlgorithm()\n    {\n        return $this->signingAlgorithm;\n    }\n\n    /**\n     * Sets the signing algorithm when using an assertion profile.\n     *\n     * @param ?string $signingAlgorithm\n     * @return void\n     */\n    public function setSigningAlgorithm($signingAlgorithm)\n    {\n        if (is_null($signingAlgorithm)) {\n            $this->signingAlgorithm = null;\n        } elseif (!in_array($signingAlgorithm, self::$knownSigningAlgorithms)) {\n            throw new InvalidArgumentException('unknown signing algorithm');\n        } else {\n            $this->signingAlgorithm = $signingAlgorithm;\n        }\n    }\n\n    /**\n     * Gets the set of parameters used by extension when using an extension\n     * grant type.\n     *\n     * @return array<mixed>\n     */\n    public function getExtensionParams()\n    {\n        return $this->extensionParams;\n    }\n\n    /**\n     * Sets the set of parameters used by extension when using an extension\n     * grant type.\n     *\n     * @param array<mixed> $extensionParams\n     * @return void\n     */\n    public function setExtensionParams($extensionParams)\n    {\n        $this->extensionParams = $extensionParams;\n    }\n\n    /**\n     * Gets the number of seconds assertions are valid for.\n     *\n     * @return int\n     */\n    public function getExpiry()\n    {\n        return $this->expiry;\n    }\n\n    /**\n     * Sets the number of seconds assertions are valid for.\n     *\n     * @param int $expiry\n     * @return void\n     */\n    public function setExpiry($expiry)\n    {\n        $this->expiry = $expiry;\n    }\n\n    /**\n     * Gets the lifetime of the access token in seconds.\n     *\n     * @return int\n     */\n    public function getExpiresIn()\n    {\n        return $this->expiresIn;\n    }\n\n    /**\n     * Sets the lifetime of the access token in seconds.\n     *\n     * @param ?int $expiresIn\n     * @return void\n     */\n    public function setExpiresIn($expiresIn)\n    {\n        if (is_null($expiresIn)) {\n            $this->expiresIn = null;\n            $this->issuedAt = null;\n        } else {\n            $this->issuedAt = time();\n            $this->expiresIn = (int) $expiresIn;\n        }\n    }\n\n    /**\n     * Gets the time the current access token expires at.\n     *\n     * @return ?int\n     */\n    public function getExpiresAt()\n    {\n        if (!is_null($this->expiresAt)) {\n            return $this->expiresAt;\n        }\n\n        if (!is_null($this->issuedAt) && !is_null($this->expiresIn)) {\n            return $this->issuedAt + $this->expiresIn;\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns true if the acccess token has expired.\n     *\n     * @return bool\n     */\n    public function isExpired()\n    {\n        $expiration = $this->getExpiresAt();\n        $now = time();\n\n        return !is_null($expiration) && $now >= $expiration;\n    }\n\n    /**\n     * Sets the time the current access token expires at.\n     *\n     * @param int $expiresAt\n     * @return void\n     */\n    public function setExpiresAt($expiresAt)\n    {\n        $this->expiresAt = $expiresAt;\n    }\n\n    /**\n     * Gets the time the current access token was issued at.\n     *\n     * @return ?int\n     */\n    public function getIssuedAt()\n    {\n        return $this->issuedAt;\n    }\n\n    /**\n     * Sets the time the current access token was issued at.\n     *\n     * @param int $issuedAt\n     * @return void\n     */\n    public function setIssuedAt($issuedAt)\n    {\n        $this->issuedAt = $issuedAt;\n    }\n\n    /**\n     * Gets the current access token.\n     *\n     * @return ?string\n     */\n    public function getAccessToken()\n    {\n        return $this->accessToken;\n    }\n\n    /**\n     * Sets the current access token.\n     *\n     * @param string $accessToken\n     * @return void\n     */\n    public function setAccessToken($accessToken)\n    {\n        $this->accessToken = $accessToken;\n    }\n\n    /**\n     * Gets the current ID token.\n     *\n     * @return ?string\n     */\n    public function getIdToken()\n    {\n        return $this->idToken;\n    }\n\n    /**\n     * Sets the current ID token.\n     *\n     * @param string $idToken\n     * @return void\n     */\n    public function setIdToken($idToken)\n    {\n        $this->idToken = $idToken;\n    }\n\n    /**\n     * Get the granted space-separated scopes (if they exist) for the last\n     * fetched token.\n     *\n     * @return string|null\n     */\n    public function getGrantedScope()\n    {\n        return $this->grantedScope;\n    }\n\n    /**\n     * Sets the current ID token.\n     *\n     * @param string $grantedScope\n     * @return void\n     */\n    public function setGrantedScope($grantedScope)\n    {\n        $this->grantedScope = $grantedScope;\n    }\n\n    /**\n     * Gets the refresh token associated with the current access token.\n     *\n     * @return ?string\n     */\n    public function getRefreshToken()\n    {\n        return $this->refreshToken;\n    }\n\n    /**\n     * Sets the refresh token associated with the current access token.\n     *\n     * @param string $refreshToken\n     * @return void\n     */\n    public function setRefreshToken($refreshToken)\n    {\n        $this->refreshToken = $refreshToken;\n    }\n\n    /**\n     * Sets additional claims to be included in the JWT token\n     *\n     * @param array<mixed> $additionalClaims\n     * @return void\n     */\n    public function setAdditionalClaims(array $additionalClaims)\n    {\n        $this->additionalClaims = $additionalClaims;\n    }\n\n    /**\n     * Gets the additional claims to be included in the JWT token.\n     *\n     * @return array<mixed>\n     */\n    public function getAdditionalClaims()\n    {\n        return $this->additionalClaims;\n    }\n\n    /**\n     * Gets the additional claims to be included in the JWT token.\n     *\n     * @return ?string\n     */\n    public function getIssuedTokenType()\n    {\n        return $this->issuedTokenType;\n    }\n\n    /**\n     * The expiration of the last received token.\n     *\n     * @return array<mixed>|null\n     */\n    public function getLastReceivedToken()\n    {\n        if ($token = $this->getAccessToken()) {\n            // the bare necessity of an auth token\n            $authToken = [\n                'access_token' => $token,\n                'expires_at' => $this->getExpiresAt(),\n            ];\n        } elseif ($idToken = $this->getIdToken()) {\n            $authToken = [\n                'id_token' => $idToken,\n                'expires_at' => $this->getExpiresAt(),\n            ];\n        } else {\n            return null;\n        }\n\n        if ($expiresIn = $this->getExpiresIn()) {\n            $authToken['expires_in'] = $expiresIn;\n        }\n        if ($issuedAt = $this->getIssuedAt()) {\n            $authToken['issued_at'] = $issuedAt;\n        }\n        if ($refreshToken = $this->getRefreshToken()) {\n            $authToken['refresh_token'] = $refreshToken;\n        }\n\n        return $authToken;\n    }\n\n    /**\n     * Get the client ID.\n     *\n     * Alias of {@see OAuth2::getClientId()}.\n     *\n     * @param callable|null $httpHandler\n     * @return string\n     * @access private\n     */\n    public function getClientName(?callable $httpHandler = null)\n    {\n        return $this->getClientId();\n    }\n\n    /**\n     * @todo handle uri as array\n     *\n     * @param ?string $uri\n     * @return null|UriInterface\n     */\n    private function coerceUri($uri)\n    {\n        if (is_null($uri)) {\n            return null;\n        }\n\n        return Utils::uriFor($uri);\n    }\n\n    /**\n     * @param string $idToken\n     * @param Key|Key[]|string|string[] $publicKey\n     * @param string|string[] $allowedAlgs\n     * @return object\n     */\n    private function jwtDecode($idToken, $publicKey, $allowedAlgs)\n    {\n        $keys = $this->getFirebaseJwtKeys($publicKey, $allowedAlgs);\n\n        // Default exception if none are caught. We are using the same exception\n        // class and message from firebase/php-jwt to preserve backwards\n        // compatibility.\n        $e = new \\InvalidArgumentException('Key may not be empty');\n        foreach ($keys as $key) {\n            try {\n                return JWT::decode($idToken, $key);\n            } catch (\\Exception $e) {\n                // try next alg\n            }\n        }\n        throw $e;\n    }\n\n    /**\n     * @param Key|Key[]|string|string[] $publicKey\n     * @param string|string[] $allowedAlgs\n     * @return Key[]\n     */\n    private function getFirebaseJwtKeys($publicKey, $allowedAlgs)\n    {\n        // If $publicKey is instance of Key, return it\n        if ($publicKey instanceof Key) {\n            return [$publicKey];\n        }\n\n        // If $allowedAlgs is empty, $publicKey must be Key or Key[].\n        if (empty($allowedAlgs)) {\n            $keys = [];\n            foreach ((array) $publicKey as $kid => $pubKey) {\n                if (!$pubKey instanceof Key) {\n                    throw new \\InvalidArgumentException(sprintf(\n                        'When allowed algorithms is empty, the public key must'\n                        . 'be an instance of %s or an array of %s objects',\n                        Key::class,\n                        Key::class\n                    ));\n                }\n                $keys[$kid] = $pubKey;\n            }\n            return $keys;\n        }\n\n        $allowedAlg = null;\n        if (is_string($allowedAlgs)) {\n            $allowedAlg = $allowedAlgs;\n        } elseif (is_array($allowedAlgs)) {\n            if (count($allowedAlgs) > 1) {\n                throw new \\InvalidArgumentException(\n                    'To have multiple allowed algorithms, You must provide an'\n                    . ' array of Firebase\\JWT\\Key objects.'\n                    . ' See https://github.com/firebase/php-jwt for more information.'\n                );\n            }\n            $allowedAlg = array_pop($allowedAlgs);\n        } else {\n            throw new \\InvalidArgumentException('allowed algorithms must be a string or array.');\n        }\n\n        if (is_array($publicKey)) {\n            // When publicKey is greater than 1, create keys with the single alg.\n            $keys = [];\n            foreach ($publicKey as $kid => $pubKey) {\n                if ($pubKey instanceof Key) {\n                    $keys[$kid] = $pubKey;\n                } else {\n                    $keys[$kid] = new Key($pubKey, $allowedAlg);\n                }\n            }\n            return $keys;\n        }\n\n        return [new Key($publicKey, $allowedAlg)];\n    }\n\n    /**\n     * Determines if the URI is absolute based on its scheme and host or path\n     * (RFC 3986).\n     *\n     * @param string $uri\n     * @return bool\n     */\n    private function isAbsoluteUri($uri)\n    {\n        $uri = $this->coerceUri($uri);\n\n        return $uri->getScheme() && ($uri->getHost() || $uri->getPath());\n    }\n\n    /**\n     * @param array<mixed> $params\n     * @return array<mixed>\n     */\n    private function addClientCredentials(&$params)\n    {\n        $clientId = $this->getClientId();\n        $clientSecret = $this->getClientSecret();\n\n        if ($clientId && $clientSecret) {\n            $params['client_id'] = $clientId;\n            $params['client_secret'] = $clientSecret;\n        }\n\n        return $params;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/ProjectIdProviderInterface.php",
    "content": "<?php\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * Describes a Credentials object which supports fetching the project ID.\n */\ninterface ProjectIdProviderInterface\n{\n    /**\n     * Get the project ID.\n     *\n     * @param callable|null $httpHandler Callback which delivers psr7 request\n     * @return string|null\n     */\n    public function getProjectId(?callable $httpHandler = null);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/ServiceAccountSignerTrait.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\nuse phpseclib3\\Crypt\\PublicKeyLoader;\nuse phpseclib3\\Crypt\\RSA;\n\n/**\n * Sign a string using a Service Account private key.\n */\ntrait ServiceAccountSignerTrait\n{\n    /**\n     * Sign a string using the service account private key.\n     *\n     * @param string $stringToSign\n     * @param bool $forceOpenssl Whether to use OpenSSL regardless of\n     *        whether phpseclib is installed. **Defaults to** `false`.\n     * @return string\n     */\n    public function signBlob($stringToSign, $forceOpenssl = false)\n    {\n        $privateKey = $this->auth->getSigningKey();\n\n        $signedString = '';\n        if (class_exists(phpseclib3\\Crypt\\RSA::class) && !$forceOpenssl) {\n            $key = PublicKeyLoader::load($privateKey);\n            $rsa = $key->withHash('sha256')->withPadding(RSA::SIGNATURE_PKCS1);\n\n            $signedString = $rsa->sign($stringToSign);\n        } elseif (extension_loaded('openssl')) {\n            openssl_sign($stringToSign, $signedString, $privateKey, 'sha256WithRSAEncryption');\n        } else {\n            // @codeCoverageIgnoreStart\n            throw new \\RuntimeException('OpenSSL is not installed.');\n        }\n        // @codeCoverageIgnoreEnd\n\n        return base64_encode($signedString);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/SignBlobInterface.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * Describes a class which supports signing arbitrary strings.\n */\ninterface SignBlobInterface extends FetchAuthTokenInterface\n{\n    /**\n     * Sign a string using the method which is best for a given credentials type.\n     *\n     * @param string $stringToSign The string to sign.\n     * @param bool $forceOpenssl Require use of OpenSSL for local signing. Does\n     *        not apply to signing done using external services. **Defaults to**\n     *        `false`.\n     * @return string The resulting signature. Value should be base64-encoded.\n     */\n    public function signBlob($stringToSign, $forceOpenssl = false);\n\n    /**\n     * Returns the current Client Name.\n     *\n     * @param callable|null $httpHandler callback which delivers psr7 request, if\n     *     one is required to obtain a client name.\n     * @return string\n     */\n    public function getClientName(?callable $httpHandler = null);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/UpdateMetadataInterface.php",
    "content": "<?php\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * Describes a Credentials object which supports updating request metadata\n * (request headers).\n */\ninterface UpdateMetadataInterface\n{\n    const AUTH_METADATA_KEY = 'authorization';\n\n    /**\n     * Updates metadata with the authorization token.\n     *\n     * @param array<mixed> $metadata metadata hashmap\n     * @param string $authUri optional auth uri\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> updated metadata hashmap\n     */\n    public function updateMetadata(\n        $metadata,\n        $authUri = null,\n        ?callable $httpHandler = null\n    );\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/auth/src/UpdateMetadataTrait.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Auth;\n\n/**\n * Provides shared methods for updating request metadata (request headers).\n *\n * Should implement {@see UpdateMetadataInterface} and {@see FetchAuthTokenInterface}.\n *\n * @internal\n */\ntrait UpdateMetadataTrait\n{\n    use MetricsTrait;\n\n    /**\n     * export a callback function which updates runtime metadata.\n     *\n     * @return callable updateMetadata function\n     * @deprecated\n     */\n    public function getUpdateMetadataFunc()\n    {\n        return [$this, 'updateMetadata'];\n    }\n\n    /**\n     * Updates metadata with the authorization token.\n     *\n     * @param array<mixed> $metadata metadata hashmap\n     * @param string $authUri optional auth uri\n     * @param callable|null $httpHandler callback which delivers psr7 request\n     * @return array<mixed> updated metadata hashmap\n     */\n    public function updateMetadata(\n        $metadata,\n        $authUri = null,\n        ?callable $httpHandler = null\n    ) {\n        $metadata_copy = $metadata;\n\n        // We do need to set the service api usage metrics irrespective even if\n        // the auth token is set because invoking this method with auth tokens\n        // would mean the intention is to just explicitly set the metrics metadata.\n        $metadata_copy = $this->applyServiceApiUsageMetrics($metadata_copy);\n\n        if (isset($metadata_copy[self::AUTH_METADATA_KEY])) {\n            // Auth metadata has already been set\n            return $metadata_copy;\n        }\n        $result = $this->fetchAuthToken($httpHandler);\n        if (isset($result['access_token'])) {\n            $metadata_copy[self::AUTH_METADATA_KEY] = ['Bearer ' . $result['access_token']];\n        } elseif (isset($result['id_token'])) {\n            $metadata_copy[self::AUTH_METADATA_KEY] = ['Bearer ' . $result['id_token']];\n        }\n        return $metadata_copy;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/.gitattributes",
    "content": "/*.xml.dist export-ignore\n/tests export-ignore\n/.github export-ignore\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project,\nand in the interest of fostering an open and welcoming community,\nwe pledge to respect all people who contribute through reporting issues,\nposting feature requests, updating documentation,\nsubmitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project\na harassment-free experience for everyone,\nregardless of level of experience, gender, gender identity and expression,\nsexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery\n* Personal attacks\n* Trolling or insulting/derogatory comments\n* Public or private harassment\n* Publishing other's private information,\nsuch as physical or electronic\naddresses, without explicit permission\n* Other unethical or unprofessional conduct.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct.\nBy adopting this Code of Conduct,\nproject maintainers commit themselves to fairly and consistently\napplying these principles to every aspect of managing this project.\nProject maintainers who do not follow or enforce the Code of Conduct\nmay be permanently removed from the project team.\n\nThis code of conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior\nmay be reported by opening an issue\nor contacting one or more of the project maintainers.\n\nThis Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,\navailable at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/CONTRIBUTING.md",
    "content": "# How to Contribute\n\nWe'd love to accept your patches and contributions to this project. We accept\nand review pull requests against the main\n[Google Cloud PHP](https://github.com/googleapis/google-cloud-php)\nrepository, which contains all of our client libraries. You will also need to\nsign a Contributor License Agreement. For more details about how to contribute,\nsee the\n[CONTRIBUTING.md](https://github.com/googleapis/google-cloud-php/blob/main/CONTRIBUTING.md)\nfile in the main Google Cloud PHP repository.\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/README.md",
    "content": "# Google Cloud Core Libraries for PHP\n\n[![Latest Stable Version](https://poser.pugx.org/google/cloud-core/v/stable)](https://packagist.org/packages/google/cloud-core) [![Packagist](https://img.shields.io/packagist/dm/google/cloud-core.svg)](https://packagist.org/packages/google/cloud-core)\n\n* [API documentation](https://cloud.google.com/php/docs/reference/cloud-core/latest)\n\n**NOTE:** This repository is part of [Google Cloud PHP](https://github.com/googleapis/google-cloud-php). Any\nsupport requests, bug reports, or development contributions should be directed to\nthat project.\n\n### Installation\n\n**NOTE** This package is not intended for direct use. It provides common infrastructure\nto the rest of the Google Cloud PHP components.\n\n```sh\n$ composer require google/cloud-core\n```\n\n### Debugging\n\nPlease see our [Debugging guide](https://github.com/googleapis/google-cloud-php/blob/main/DEBUG.md)\nfor more information about the debugging tools.\n\n### Version\n\nThis component is considered GA (generally available). As such, it will not introduce backwards-incompatible changes in\nany minor or patch releases. We will address issues and requests with the highest priority.\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/VERSION",
    "content": "1.69.0\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/bin/google-cloud-batch",
    "content": "#!/usr/bin/env php\n<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n$foundAutoloader = false;\n$autoloaderCandidates = [\n    '/../vendor/autoload.php',     // Git clone of google-cloud-php-core\n    '/../../vendor/autoload.php',  // Git clone of google-cloud-php\n    '/../../../autoload.php',      // google/cloud-core installation\n    '/../../../../autoload.php',   // google/cloud installation\n];\nforeach ($autoloaderCandidates as $candidate) {\n    if (file_exists(__DIR__ . $candidate)) {\n        require_once __DIR__ . $candidate;\n        $foundAutoloader = true;\n        break;\n    }\n}\n\nif (!$foundAutoloader) {\n    die('No autoloader found');\n}\n\nfunction showUsageAndDie()\n{\n    die(\"usage: \" . __FILE__ . \" [daemon|retry] {id}\");\n}\n\nif (count($argv) < 2) {\n    showUsageAndDie();\n}\n\nif ($argv[1] === 'daemon') {\n    $daemon = new BatchDaemon(__FILE__);\n    if (count($argv) == 2) {\n        $daemon->run();\n    } else {\n        $idNum = (int) $argv[2];\n        $job = $daemon->job($idNum);\n        $job->run();\n    }\n} elseif ($argv[1] === 'retry') {\n    $retry = new Retry();\n    $retry->retryAll();\n} else {\n    showUsageAndDie();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/composer.json",
    "content": "{\n    \"name\": \"google/cloud-core\",\n    \"description\": \"Google Cloud PHP shared dependency, providing functionality useful to all components.\",\n    \"license\": \"Apache-2.0\",\n    \"minimum-stability\": \"stable\",\n    \"require\": {\n        \"php\": \"^8.1\",\n        \"rize/uri-template\": \"~0.3||~0.4\",\n        \"google/auth\": \"^1.34\",\n        \"guzzlehttp/guzzle\": \"^6.5.8||^7.4.4\",\n        \"guzzlehttp/promises\": \"^1.4||^2.0\",\n        \"guzzlehttp/psr7\": \"^2.6\",\n        \"monolog/monolog\": \"^2.9||^3.0\",\n        \"psr/http-message\": \"^1.0||^2.0\",\n        \"google/gax\": \"^1.38.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^9.0\",\n        \"phpspec/prophecy-phpunit\": \"^2.0\",\n        \"squizlabs/php_codesniffer\": \"2.*\",\n        \"phpdocumentor/reflection\": \"^6.0\",\n        \"phpdocumentor/reflection-docblock\": \"^5.3\",\n        \"erusev/parsedown\": \"^1.6\",\n        \"opis/closure\": \"^3.7|^4.0\",\n        \"google/cloud-common-protos\": \"~0.5\",\n        \"nikic/php-parser\": \"^5.6\"\n    },\n    \"suggest\": {\n        \"opis/closure\": \"May be used to serialize closures to process jobs in the batch daemon. Please require version ^3.\",\n        \"symfony/lock\": \"Required for the Spanner cached based session pool. Please require the following commit: 3.3.x-dev#1ba6ac9\"\n    },\n    \"extra\": {\n        \"component\": {\n            \"id\": \"cloud-core\",\n            \"target\": \"googleapis/google-cloud-php-core.git\",\n            \"path\": \"Core\",\n            \"entry\": \"src/ServiceBuilder.php\"\n        }\n    },\n    \"bin\": [\n        \"bin/google-cloud-batch\"\n    ],\n    \"autoload\": {\n        \"psr-4\": {\n            \"Google\\\\Cloud\\\\Core\\\\\": \"src\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Google\\\\Cloud\\\\Core\\\\Tests\\\\\": \"tests\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/perf-bootstrap.php",
    "content": "<?php\n\nuse Google\\Cloud\\Core\\Testing\\TestHelpers;\n\nTestHelpers::perfBootstrap();\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/snippet-bootstrap.php",
    "content": "<?php\n\nuse DG\\BypassFinals;\nuse Google\\Cloud\\Core\\Testing\\TestHelpers;\n\nTestHelpers::snippetBootstrap();\n\ndate_default_timezone_set('UTC');\n\n// Make sure that while testing we bypass the `final` keyword for the GAPIC client.\n// Only run this if the individual component has the helper package installed\nif (class_exists(BypassFinals::class)) {\n    BypassFinals::enable();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/AnonymousCredentials.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\UpdateMetadataInterface;\n\n/**\n * Provides an anonymous set of credentials, which is useful for APIs which do\n * not require authentication.\n */\nclass AnonymousCredentials implements\n    FetchAuthTokenInterface,\n    UpdateMetadataInterface,\n    GetQuotaProjectInterface\n{\n    /**\n     * @var array\n     */\n    private $token = [\n        'access_token' => null\n    ];\n\n    /**\n     * Fetches the auth token. In this case it returns a null value.\n     *\n     * @param callable $httpHandler\n     * @return array\n     */\n    public function fetchAuthToken(?callable $httpHandler = null)\n    {\n        return $this->token;\n    }\n\n    /**\n     * Returns the cache key. In this case it returns a null value, disabling\n     * caching.\n     *\n     * @return string|null\n     */\n    public function getCacheKey()\n    {\n        return null;\n    }\n\n    /**\n     * Fetches the last received token. In this case, it returns the same null\n     * auth token.\n     *\n     * @return array\n     */\n    public function getLastReceivedToken()\n    {\n        return $this->token;\n    }\n\n    /**\n     * This method has no effect for AnonymousCredentials.\n     *\n     * @param array $metadata metadata hashmap\n     * @param string $authUri optional auth uri\n     * @param callable $httpHandler callback which delivers psr7 request\n     * @return array updated metadata hashmap\n     */\n    public function updateMetadata(\n        $metadata,\n        $authUri = null,\n        ?callable $httpHandler = null\n    ) {\n        return $metadata;\n    }\n\n    /**\n     * This method always returns null for AnonymousCredentials.\n     *\n     * @return string|null\n     */\n    public function getQuotaProject()\n    {\n        return null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ApiHelperTrait.php",
    "content": "<?php\n\n/**\n * Copyright 2023 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core;\n\nuse Google\\ApiCore\\ArrayTrait;\nuse Google\\ApiCore\\Options\\CallOptions;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Protobuf\\NullValue;\nuse LogicException;\n\n/**\n * @internal\n * Supplies helper methods to interact with the APIs.\n */\ntrait ApiHelperTrait\n{\n    use ArrayTrait;\n    use TimeTrait;\n\n    private OptionsValidator $optionsValidator;\n\n    /**\n     * Format a struct for the API.\n     *\n     * @param array $fields\n     * @return array\n     */\n    private function formatStructForApi(array $fields)\n    {\n        $fFields = [];\n\n        foreach ($fields as $key => $value) {\n            $fFields[$key] = $this->formatValueForApi($value);\n        }\n\n        return ['fields' => $fFields];\n    }\n\n    private function unpackStructFromApi(array $struct)\n    {\n        $vals = [];\n        foreach ($struct['fields'] as $key => $val) {\n            $vals[$key] = $this->unpackValue($val);\n        }\n        return $vals;\n    }\n\n    private function unpackValue($value)\n    {\n        if (count($value) > 1) {\n            throw new \\RuntimeException(\"Unexpected fields in struct: $value\");\n        }\n\n        foreach ($value as $setField => $setValue) {\n            switch ($setField) {\n                case 'listValue':\n                    $valueList = [];\n                    foreach ($setValue['values'] as $innerValue) {\n                        $valueList[] = $this->unpackValue($innerValue);\n                    }\n                    return $valueList;\n                case 'structValue':\n                    return $this->unpackStructFromApi($value['structValue']);\n                default:\n                    return $setValue;\n            }\n        }\n    }\n\n    private function flattenStruct(array $struct)\n    {\n        return $struct['fields'];\n    }\n\n    private function flattenValue(array $value)\n    {\n        if (count($value) > 1) {\n            throw new \\RuntimeException(\"Unexpected fields in struct: $value\");\n        }\n\n        if (isset($value['nullValue'])) {\n            return null;\n        }\n\n        return array_pop($value);\n    }\n\n    private function flattenListValue(array $value)\n    {\n        return $value['values'];\n    }\n\n    /**\n     * Format a list for the API.\n     *\n     * @param array $list\n     * @return array\n     */\n    private function formatListForApi(array $list)\n    {\n        $values = [];\n\n        foreach ($list as $value) {\n            $values[] = $this->formatValueForApi($value);\n        }\n\n        return ['values' => $values];\n    }\n\n    /**\n     * Format a value for the API.\n     *\n     * @param mixed $value\n     * @return array\n     */\n    private function formatValueForApi($value)\n    {\n        $type = gettype($value);\n\n        switch ($type) {\n            case 'string':\n                return ['string_value' => $value];\n            case 'double':\n            case 'integer':\n                return ['number_value' => $value];\n            case 'boolean':\n                return ['bool_value' => $value];\n            case 'NULL':\n                return ['null_value' => NullValue::NULL_VALUE];\n            case 'array':\n                if (!empty($value) && $this->isAssoc($value)) {\n                    return ['struct_value' => $this->formatStructForApi($value)];\n                }\n\n                return ['list_value' => $this->formatListForApi($value)];\n        }\n\n        return [];\n    }\n\n    /**\n     * Format a gRPC timestamp to match the format returned by the REST API.\n     *\n     * @param array $timestamp\n     * @return string\n     */\n    private function formatTimestampFromApi(array $timestamp)\n    {\n        $timestamp += [\n            'seconds' => 0,\n            'nanos' => 0\n        ];\n\n        $dt = $this->createDateTimeFromSeconds($timestamp['seconds']);\n\n        return $this->formatTimeAsString($dt, $timestamp['nanos']);\n    }\n\n    /**\n     * Format a timestamp for the API with nanosecond precision.\n     *\n     * @param string $value\n     * @return array\n     */\n    private function formatTimestampForApi($value)\n    {\n        list($dt, $nanos) = $this->parseTimeString($value);\n\n        return [\n            'seconds' => (int) $dt->format('U'),\n            'nanos' => (int) $nanos\n        ];\n    }\n\n    /**\n     * Format a duration for the API.\n     *\n     * @param string|mixed $value\n     * @return array\n     */\n    private function formatDurationForApi($value)\n    {\n        if (is_string($value)) {\n            $d = explode('.', trim($value, 's'));\n            if (count($d) < 2) {\n                $seconds = $d[0];\n                $nanos = 0;\n            } else {\n                $seconds = (int) $d[0];\n                $nanos = $this->convertFractionToNanoSeconds($d[1]);\n            }\n        } elseif ($value instanceof Duration) {\n            $d = $value->get();\n            $seconds = $d['seconds'];\n            $nanos = $d['nanos'];\n        }\n\n        return [\n            'seconds' => $seconds,\n            'nanos' => $nanos\n        ];\n    }\n\n    /**\n     * Construct a gapic client. Allows for tests to intercept.\n     *\n     * @param string $gapicName\n     * @param array $config\n     * @return mixed\n     */\n    protected function constructGapic($gapicName, array $config)\n    {\n        return new $gapicName($config);\n    }\n\n    /**\n     * Helper function to convert selective elements into protos out of a given input array.\n     *\n     * Example:\n     * ```\n     * $output = $topic->convertDataToProtos(['schema' =>[], 'other vals'], ['schema' => Schema::class]);\n     * $output['schema']; // This will be of the Schema type.\n     * ```\n     *\n     * @param array $input The input array.\n     * @param array $map The key,value pairs specifying the elements and the proto classes.\n     *\n     * @return array The modified array\n     */\n    private function convertDataToProtos(array $input, array $map): array\n    {\n        if (!isset($this->serializer)) {\n            throw new \\LogicException('Serializer must be set to use this function');\n        }\n        foreach ($map as $key => $className) {\n            if (isset($input[$key])) {\n                $input[$key] = $this->serializer->decodeMessage(new $className(), $input[$key]);\n            }\n        }\n\n        return $input;\n    }\n\n    /**\n     * Helper method used to split a supplied set of options into parameters that are passed into\n     * a proto message and optional args.\n     * We strictly treat the parameters allowed by `CallOptions` in GAX as the optional params\n     * and everything else that is passed is passed to the Proto message constructor.\n     */\n    private function splitOptionalArgs(array $input, array $extraAllowedKeys = []): array\n    {\n        $callOptionFields = array_keys((new CallOptions([]))->toArray());\n        $keys = array_merge($callOptionFields, $extraAllowedKeys);\n\n        $callOptions = $this->pluckArray($keys, $input);\n\n        return [$input, $callOptions];\n    }\n\n    /**\n     * Helper method used to validate optons based on the supplied $optionTypes\n     * $optionTypes can be an array of string keys, a protobuf Message classname, or a\n     * the CallOptions classname. Parameters are split and returned in the order\n     * that the options types are provided.\n     *\n     * @throws LogicException\n     */\n    private function validateOptions(array $options, array|Message|string ...$optionTypes): array\n    {\n        if (!isset($this->optionsValidator)) {\n            $this->optionsValidator = new OptionsValidator();\n        }\n        return $this->optionsValidator->validateOptions($options, ...$optionTypes);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ArrayTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Provides basic array helper methods.\n */\ntrait ArrayTrait\n{\n    /**\n     * Pluck a value out of an array.\n     *\n     * @param string $key\n     * @param array $arr\n     * @param bool $isRequired\n     * @return mixed\n     * @throws \\InvalidArgumentException\n     */\n    private function pluck($key, array &$arr, $isRequired = true)\n    {\n        if (!array_key_exists($key, $arr)) {\n            if ($isRequired) {\n                throw new \\InvalidArgumentException(\n                    \"Key $key does not exist in the provided array.\"\n                );\n            }\n\n            return null;\n        }\n\n        $value = $arr[$key];\n        unset($arr[$key]);\n        return $value;\n    }\n\n    /**\n     * Pluck a subset of an array.\n     *\n     * @param string[] $keys\n     * @param array $arr\n     * @return array\n     */\n    private function pluckArray(array $keys, &$arr)\n    {\n        $values = [];\n\n        foreach ($keys as $key) {\n            if (array_key_exists($key, $arr)) {\n                $values[$key] = $this->pluck($key, $arr, false);\n            }\n        }\n\n        return $values;\n    }\n\n    /**\n     * Determine whether given array is associative.\n     * If $arr is empty, then $onEmpty will be returned\n     * $onEmpty defaults to true to maintain compatibility\n     * with the current usage.\n     *\n     * @param array $arr\n     * @param bool $onEmpty\n     * @return bool\n     */\n    private function isAssoc(array $arr, $onEmpty = true)\n    {\n        if (empty($arr)) {\n            return $onEmpty;\n        }\n\n        return array_keys($arr) !== range(0, count($arr) - 1);\n    }\n\n    /**\n     * Just like array_filter(), but preserves falsey values except null.\n     *\n     * @param array $arr\n     * @return array\n     */\n    private function arrayFilterRemoveNull(array $arr)\n    {\n        return array_filter($arr, function ($element) {\n            return !is_null($element);\n        });\n    }\n\n    /**\n     * A method, similar to PHP's `array_merge_recursive`, with two differences.\n     *\n     * 1. Keys in $array2 take precedence over keys in $array1.\n     * 2. Non-array keys found in both inputs are not transformed into an array\n     *    and appended. Rather, the value in $array2 is used.\n     *\n     * @param array $array1\n     * @param array $array2\n     * @return array\n     */\n    private function arrayMergeRecursive(array $array1, array $array2)\n    {\n        foreach ($array2 as $key => $value) {\n            if (array_key_exists($key, $array1) && is_array($array1[$key]) && is_array($value)) {\n                $array1[$key] = ($this->isAssoc($array1[$key]) && $this->isAssoc($value))\n                    ? $this->arrayMergeRecursive($array1[$key], $value)\n                    : array_merge($array1[$key], $value);\n            } else {\n                $array1[$key] = $value;\n            }\n        }\n\n        return $array1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/BatchDaemon.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Google\\Cloud\\Core\\SysvTrait;\n\n/**\n * An external daemon script for executing the batch jobs.\n *\n * @codeCoverageIgnore\n *\n * The system test is responsible for testing this class.\n * {@see \\Google\\Cloud\\Tests\\System\\Core\\Batch}\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass BatchDaemon\n{\n    use BatchDaemonTrait;\n    use HandleFailureTrait;\n    use SysvTrait;\n    use InterruptTrait;\n\n    /* @var BatchRunner */\n    private $runner;\n\n    /* @var array */\n    private $descriptorSpec;\n\n    /* @var string */\n    private $command;\n\n    /**\n     * Prepare the descriptor spec and install signal handlers.\n     *\n     * @param string $entrypoint Daemon's entrypoint script.\n     * @throws \\RuntimeException\n     */\n    public function __construct($entrypoint)\n    {\n        if (! $this->isSysvIPCLoaded()) {\n            throw new \\RuntimeException('SystemV IPC extensions are missing.');\n        }\n        $this->runner = new BatchRunner(\n            new SysvConfigStorage(),\n            new SysvProcessor()\n        );\n        $this->shutdown = false;\n        // Just share the usual descriptors.\n        $this->descriptorSpec = [\n            0 => ['file', 'php://stdin', 'r'],\n            1 => ['file', 'php://stdout', 'w'],\n            2 => ['file', 'php://stderr', 'w']\n        ];\n\n        $this->command = sprintf('exec php -d auto_prepend_file=\"\" %s daemon', $entrypoint);\n        $this->initFailureFile();\n    }\n\n    /**\n     * A loop for the parent.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->setupSignalHandlers();\n\n        $procs = [];\n        while (true) {\n            $jobs = $this->runner->getJobs();\n            foreach ($jobs as $job) {\n                if (! array_key_exists($job->identifier(), $procs)) {\n                    $procs[$job->identifier()] = [];\n                }\n                while (count($procs[$job->identifier()]) > $job->numWorkers()) {\n                    // Stopping an excessive child.\n                    echo 'Stopping an excessive child.' . PHP_EOL;\n                    $proc = array_pop($procs[$job->identifier()]);\n                    $status = proc_get_status($proc);\n                    // Keep sending SIGTERM until the child exits.\n                    while ($status['running'] === true) {\n                        @proc_terminate($proc);\n                        usleep(50000);\n                        $status = proc_get_status($proc);\n                    }\n                    @proc_close($proc);\n                }\n                for ($i = 0; $i < $job->numWorkers(); $i++) {\n                    $needStart = false;\n                    if (array_key_exists($i, $procs[$job->identifier()])) {\n                        $status = proc_get_status($procs[$job->identifier()][$i]);\n                        if ($status['running'] !== true) {\n                            $needStart = true;\n                        }\n                    } else {\n                        $needStart = true;\n                    }\n                    if ($needStart) {\n                        echo 'Starting a child.' . PHP_EOL;\n                        $procs[$job->identifier()][$i] = proc_open(\n                            sprintf('%s %d', $this->command, $job->id()),\n                            $this->descriptorSpec,\n                            $pipes\n                        );\n                    }\n                }\n            }\n            usleep(1000000); // Reload the config after 1 second\n            pcntl_signal_dispatch();\n            if ($this->shutdown) {\n                echo 'Shutting down, waiting for the children' . PHP_EOL;\n                foreach ($procs as $k => $v) {\n                    foreach ($v as $proc) {\n                        $status = proc_get_status($proc);\n                        // Keep sending SIGTERM until the child exits.\n                        while ($status['running'] === true) {\n                            @proc_terminate($proc);\n                            usleep(50000);\n                            $status = proc_get_status($proc);\n                        }\n                        @proc_close($proc);\n                    }\n                }\n                echo 'BatchDaemon exiting' . PHP_EOL;\n                exit;\n            }\n            // Reload the config\n            $this->runner->loadConfig();\n            gc_collect_cycles();\n        }\n    }\n\n    /**\n     * Fetch the child job by id.\n     *\n     * @param int $idNum The id of the job to find\n     * @return JobInterface\n     */\n    public function job($idNum)\n    {\n        return $this->runner->getJobFromIdNum($idNum);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/BatchDaemonTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * A utility trait related to BatchDaemon functionality.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait BatchDaemonTrait\n{\n    /**\n     * Returns whether or not the BatchDaemon is running.\n     *\n     * @return bool\n     */\n    private function isDaemonRunning()\n    {\n        $isDaemonRunning = filter_var(\n            getenv('IS_BATCH_DAEMON_RUNNING'),\n            FILTER_VALIDATE_BOOLEAN\n        );\n\n        return $isDaemonRunning !== false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/BatchJob.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Google\\Cloud\\Core\\SysvTrait;\n\n/**\n * Represent batch jobs.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass BatchJob implements JobInterface\n{\n    const DEFAULT_BATCH_SIZE = 100;\n    const DEFAULT_CALL_PERIOD = 2.0;\n    const DEFAULT_WORKERS = 1;\n\n    use JobTrait;\n    use SysvTrait;\n    use InterruptTrait;\n    use HandleFailureTrait;\n\n    /**\n     * @var callable The batch job handler. This callable accepts an array\n     *      of items and should return a boolean.\n     */\n    private $func;\n\n    /**\n     * @var int The size of the batch.\n     */\n    private $batchSize;\n\n    /**\n     * @var float The period in seconds from the last execution to force\n     *      executing the job.\n     */\n    private $callPeriod;\n\n    /**\n     * @param string $identifier Unique identifier of the job.\n     * @param callable $func Any Callable except for Closure. The callable\n     *        should accept an array of items as the first argument.\n     * @param int $idNum A numeric id for the job.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type int $batchSize The size of the batch. **Defaults to** `100`.\n     *     @type float $callPeriod The period in seconds from the last execution\n     *                 to force executing the job. **Defaults to** `2.0`.\n     *     @type int $numWorkers The number of child processes. It only takes\n     *               effect with the {@see \\Google\\Cloud\\Core\\Batch\\BatchDaemon}.\n     *               **Defaults to** `1`.\n     *     @type string $bootstrapFile A file to load before executing the\n     *                  job. It's needed for registering global functions.\n     * }\n     */\n    public function __construct(\n        $identifier,\n        $func,\n        $idNum,\n        array $options = []\n    ) {\n        $options += [\n            'batchSize' => self::DEFAULT_BATCH_SIZE,\n            'callPeriod' => self::DEFAULT_CALL_PERIOD,\n            'bootstrapFile' => null,\n            'numWorkers' => self::DEFAULT_WORKERS\n        ];\n        $this->identifier = $identifier;\n        $this->func = $func;\n        $this->id = $idNum;\n        $this->batchSize = $options['batchSize'];\n        $this->callPeriod = $options['callPeriod'];\n        $this->bootstrapFile = $options['bootstrapFile'];\n        $this->numWorkers = $options['numWorkers'];\n        $this->initFailureFile();\n    }\n\n    /**\n     * Run the job.\n     */\n    public function run()\n    {\n        $this->setupSignalHandlers();\n\n        $sysvKey = $this->getSysvKey($this->id);\n        $q = msg_get_queue($sysvKey);\n        $items = [];\n        $lastInvoked = microtime(true);\n\n        if (!is_null($this->bootstrapFile)) {\n            require_once($this->bootstrapFile);\n        }\n\n        while (true) {\n            // Fire SIGALRM after 1 second to unblock the blocking call.\n            pcntl_alarm(1);\n            if (msg_receive(\n                $q,\n                0,\n                $type,\n                8192,\n                $message,\n                true,\n                0, // blocking mode\n                $errorcode\n            )) {\n                if ($type === self::$typeDirect) {\n                    $items[] = $message;\n                } elseif ($type === self::$typeFile) {\n                    $items[] = unserialize(file_get_contents($message));\n                    @unlink($message);\n                }\n            }\n            pcntl_signal_dispatch();\n            // It runs the job when\n            // 1. Number of items reaches the batchSize.\n            // 2-a. Count is >0 and the current time is larger than lastInvoked + period.\n            // 2-b. Count is >0 and the shutdown flag is true.\n            if ((count($items) >= $this->batchSize)\n                || (count($items) > 0\n                    && (microtime(true) > $lastInvoked + $this->callPeriod\n                        || $this->shutdown))) {\n                printf(\n                    'Running the job with %d items' . PHP_EOL,\n                    count($items)\n                );\n                $this->flush($items);\n                $items = [];\n                $lastInvoked = microtime(true);\n            }\n            gc_collect_cycles();\n            if ($this->shutdown) {\n                return;\n            }\n        }\n    }\n\n    /**\n     * Finish any pending activity for this job.\n     *\n     * @param array $items\n     * @return bool\n     */\n    public function flush(array $items = [])\n    {\n        if (! $this->callFunc($items)) {\n            $this->handleFailure($this->id, $items);\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Finish any pending activity for this job.\n     *\n     * @access private\n     * @internal\n     *\n     * @param array $items\n     * @return bool\n     */\n    public function callFunc(array $items = [])\n    {\n        return call_user_func_array($this->func, [$items]);\n    }\n\n    /**\n     * Returns the period in seconds from the last execution to force\n     * executing the job.\n     *\n     * @return float\n     */\n    public function getCallPeriod()\n    {\n        return $this->callPeriod;\n    }\n\n    /**\n     * Returns the batch size.\n     *\n     * @return int\n     */\n    public function getBatchSize()\n    {\n        return $this->batchSize;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/BatchRunner.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Google\\Cloud\\Core\\SysvTrait;\n\n/**\n * A class for executing jobs in batch.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass BatchRunner\n{\n    use BatchDaemonTrait;\n    use SysvTrait;\n\n    /**\n     * @var JobConfig\n     */\n    private $config;\n\n    /**\n     * @var ConfigStorageInterface\n     */\n    private $configStorage;\n\n    /**\n     * @var ProcessItemInterface\n     */\n    private $processor;\n\n    /**\n     * Determine internal implementation and loads the configuration.\n     *\n     * @param ConfigStorageInterface $configStorage [optional] The\n     *        ConfigStorage object to use. **Defaults to** null. This is only\n     *        for testing purpose.\n     * @param ProcessItemInterface $processor [optional] The processor object\n     *        to use. **Defaults to** null. This is only for testing purpose.\n     */\n    public function __construct(\n        ?ConfigStorageInterface $configStorage = null,\n        ?ProcessItemInterface $processor = null\n    ) {\n        if ($configStorage === null || $processor === null) {\n            if ($this->isSysvIPCLoaded() && $this->isDaemonRunning()) {\n                $configStorage = new SysvConfigStorage();\n                $processor = new SysvProcessor();\n            } else {\n                $configStorage = InMemoryConfigStorage::getInstance();\n                $processor = $configStorage;\n            }\n        }\n        $this->configStorage = $configStorage;\n        $this->processor = $processor;\n        $this->loadConfig();\n    }\n\n    /**\n     * Register a job for batch execution.\n     *\n     * @param string $identifier Unique identifier of the job.\n     * @param callable $func Any Callable except for Closure. The callable\n     *        should accept an array of items as the first argument.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type int $batchSize The size of the batch.\n     *     @type float $callPeriod The period in seconds from the last execution\n     *                 to force executing the job.\n     *     @type int $numWorkers The number of child processes. It only takes\n     *               effect with the {@see \\Google\\Cloud\\Core\\Batch\\BatchDaemon}.\n     *     @type string $bootstrapFile A file to load before executing the\n     *                  job. It's needed for registering global functions.\n     * }\n     * @return bool true on success, false on failure\n     * @throws \\InvalidArgumentException When receiving a Closure.\n     */\n    public function registerJob($identifier, $func, array $options = [])\n    {\n        if ($func instanceof \\Closure) {\n            throw new \\InvalidArgumentException('Closure is not allowed');\n        }\n        // Always work on the latest data\n        $result = $this->configStorage->lock();\n        if ($result === false) {\n            return false;\n        }\n        $this->config = $this->configStorage->load();\n        $this->config->registerJob(\n            $identifier,\n            function ($id) use ($identifier, $func, $options) {\n                return new BatchJob($identifier, $func, $id, $options);\n            }\n        );\n\n        try {\n            $result = $this->configStorage->save($this->config);\n        } finally {\n            $this->configStorage->unlock();\n        }\n        return $result;\n    }\n\n    /**\n     * Submit an item.\n     *\n     * @param string $identifier Unique identifier of the job.\n     * @param mixed $item It needs to be serializable.\n     *\n     * @return void\n     * @throws \\RuntimeException\n     */\n    public function submitItem($identifier, $item)\n    {\n        $job = $this->getJobFromId($identifier);\n        if ($job === null) {\n            throw new \\RuntimeException(\n                \"The identifier does not exist: $identifier\"\n            );\n        }\n        $idNum = $job->id();\n        $this->processor->submit($item, $idNum);\n    }\n\n    /**\n     * Get the job with the given identifier.\n     *\n     * @param string $identifier Unique identifier of the job.\n     *\n     * @return BatchJob|null\n     */\n    public function getJobFromId($identifier)\n    {\n        return $this->config->getJobFromId($identifier);\n    }\n\n    /**\n     * Get the job with the given numeric id.\n     *\n     * @param int $idNum A numeric id of the job.\n     *\n     * @return BatchJob|null\n     */\n    public function getJobFromIdNum($idNum)\n    {\n        return $this->config->getJobFromIdNum($idNum);\n    }\n\n    /**\n     * Get all the jobs.\n     *\n     * @return BatchJob[]\n     */\n    public function getJobs()\n    {\n        return $this->config->getJobs();\n    }\n\n    /**\n     * Load the config from the storage.\n     *\n     * @return bool true on success\n     * @throws \\RuntimeException when it fails to load the config.\n     */\n    public function loadConfig()\n    {\n        $result = $this->configStorage->lock();\n        if ($result === false) {\n            throw new \\RuntimeException('Failed to lock the configStorage');\n        }\n        try {\n            $result = $this->configStorage->load();\n        } catch (\\RuntimeException $e) {\n            $this->configStorage->clear();\n            throw $e;\n        } finally {\n            $this->configStorage->unlock();\n        }\n\n        $this->config = $result;\n        return true;\n    }\n\n    /**\n     * Gets the item processor.\n     *\n     * @return ProcessItemInterface\n     */\n    public function getProcessor()\n    {\n        return $this->processor;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/BatchTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * A trait to assist in the registering and processing of batch jobs.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait BatchTrait\n{\n    use SerializableClientTrait;\n\n    /**\n     * @var array\n     */\n    private $batchOptions;\n\n    /**\n     * @var BatchRunner\n     */\n    private $batchRunner;\n\n    /**\n     * @var string\n     */\n    private $identifier;\n\n    /**\n     * @var string\n     */\n    private $batchMethod;\n\n    /**\n     * @var bool\n     */\n    private $debugOutput;\n\n    /**\n     * @var resource\n     */\n    private $debugOutputResource;\n\n    /**\n     * Flushes items in the batch queue that have yet to be delivered. Please\n     * note this will have no effect when using the batch daemon.\n     *\n     * @return bool\n     */\n    public function flush()\n    {\n        $id = $this->batchRunner\n            ->getJobFromId($this->identifier)\n            ->id();\n\n        return $this->batchRunner\n            ->getProcessor()\n            ->flush($id);\n    }\n\n    /**\n     * Deliver a list of items in a batch call.\n     *\n     * @param array $items\n     * @return bool\n     * @access private\n     */\n    public function send(array $items)\n    {\n        $start = microtime(true);\n        try {\n            call_user_func_array($this->getCallback(), [$items]);\n        } catch (\\Exception $e) {\n            if ($this->debugOutput) {\n                fwrite(\n                    $this->debugOutputResource,\n                    $e->getMessage() . PHP_EOL . PHP_EOL\n                    . $e->getTraceAsString() . PHP_EOL\n                );\n            }\n\n            return false;\n        }\n        $end = microtime(true);\n        if ($this->debugOutput) {\n            fwrite(\n                $this->debugOutputResource,\n                sprintf(\n                    '%f seconds for %s: %d items' . PHP_EOL,\n                    $end - $start,\n                    $this->batchMethod,\n                    count($items)\n                )\n            );\n            fwrite(\n                $this->debugOutputResource,\n                sprintf(\n                    'memory used: %d' . PHP_EOL,\n                    memory_get_usage()\n                )\n            );\n        }\n\n        return true;\n    }\n\n    /**\n     * Returns an array representation of a callback which will be used to write\n     * batch items.\n     *\n     * @return array\n     */\n    abstract protected function getCallback();\n\n    /**\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type resource $debugOutputResource A resource to output debug output\n     *           to. **Defaults to** `php://stderr`.\n     *     @type bool $debugOutput Whether or not to output debug information.\n     *           Please note that unless a debug output resource is configured\n     *           this setting will only apply to CLI based applications.\n     *           **Defaults to** `false`.\n     *     @type array $batchOptions A set of options for a BatchJob.\n     *           {@see \\Google\\Cloud\\Core\\Batch\\BatchJob::__construct()} for\n     *           more details.\n     *           **Defaults to** ['batchSize' => 1000,\n     *                            'callPeriod' => 2.0,\n     *                            'numWorkers' => 2].\n     *     @type array $clientConfig A config used to construct the client upon\n     *           which requests will be made.\n     *     @type BatchRunner $batchRunner A BatchRunner object. Mainly used for\n     *           the tests to inject a mock. **Defaults to** a newly created\n     *           BatchRunner.\n     *     @type string $identifier An identifier for the batch job. This\n     *           value must be unique across all job configs.\n     *     @type string $batchMethod The name of the batch method used to\n     *           deliver items.\n     *     @type ClosureSerializerInterface $closureSerializer An implementation\n     *           responsible for serializing closures used in the\n     *           `$clientConfig`. This is especially important when using the\n     *           batch daemon. **Defaults to**\n     *           {@see \\Google\\Cloud\\Core\\Batch\\OpisClosureSerializer} if the\n     *           `opis/closure` library is installed.\n     * }\n     * @throws \\InvalidArgumentException\n     */\n    private function setCommonBatchProperties(array $options = [])\n    {\n        if (!isset($options['identifier'])) {\n            throw new \\InvalidArgumentException(\n                'A valid identifier is required in order to register a job.'\n            );\n        }\n\n        if (!isset($options['batchMethod'])) {\n            throw new \\InvalidArgumentException(\n                'A batchMethod is required.'\n            );\n        }\n\n        $this->setSerializableClientOptions($options);\n        $this->batchMethod = $options['batchMethod'];\n        $this->identifier = $options['identifier'];\n        $this->debugOutputResource = $options['debugOutputResource'] ?? fopen('php://stderr', 'w');\n        $this->debugOutput = $options['debugOutput'] ?? false;\n        $batchOptions = $options['batchOptions'] ?? [];\n        $this->batchOptions = $batchOptions + [\n            'batchSize' => 1000,\n            'callPeriod' => 2.0,\n            'numWorkers' => 2\n        ];\n        $this->batchRunner = $options['batchRunner'] ?? new BatchRunner();\n        $this->batchRunner->registerJob(\n            $this->identifier,\n            [$this, 'send'],\n            $this->batchOptions\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/ClosureSerializerInterface.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * An interface for serializing closures.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ninterface ClosureSerializerInterface\n{\n    /**\n     * Recursively serializes closures.\n     *\n     * @param mixed $data\n     */\n    public function wrapClosures(&$data);\n\n    /**\n     * Recursively unserializes closures.\n     *\n     * @param mixed $data\n     */\n    public function unwrapClosures(&$data);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/ConfigStorageInterface.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * An interface for storing the configuration.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ninterface ConfigStorageInterface\n{\n    /**\n     * locks the storage\n     *\n     * @return bool\n     */\n    public function lock();\n\n    /**\n     * releases the lock\n     *\n     * @return bool\n     */\n    public function unlock();\n\n    /**\n     * saves the JobConfig to the storage\n     * @param JobConfig $config A JobConfig to save.\n     * @return bool true on success, false on failure\n     */\n    public function save(JobConfig $config);\n\n    /**\n     * loads the JobConfig from the storage\n     *\n     * @return JobConfig\n     * @throws \\RuntimeException when failed to load the JobConfig.\n     */\n    public function load();\n\n    /**\n     * Clear the JobConfig from storage.\n     */\n    public function clear();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/HandleFailureTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * A utility trait for handling failed items.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait HandleFailureTrait\n{\n    /**\n     * @var string A filename to save the failed items.\n     */\n    private $failureFile;\n\n    /**\n     * @var string Base directory for the failure files.\n     */\n    private $baseDir;\n\n    /**\n     * Determine the failureFile.\n     */\n    private function initFailureFile()\n    {\n        $this->baseDir = getenv('GOOGLE_CLOUD_BATCH_DAEMON_FAILURE_DIR');\n\n        if ('false' === $this->baseDir) {\n            // setting the file to the string \"false\" will prevent logging of failed items\n            return;\n        }\n\n        if ($this->baseDir === false) {\n            $this->baseDir = sprintf(\n                '%s/batch-daemon-failure',\n                sys_get_temp_dir()\n            );\n        }\n\n        if (!is_dir($this->baseDir) && !@mkdir($this->baseDir, 0700, true) && !is_dir($this->baseDir)) {\n            throw new \\RuntimeException(\n                sprintf(\n                    'Could not create a directory: %s',\n                    $this->baseDir\n                )\n            );\n        }\n\n        // Use getmypid for simplicity.\n        $this->failureFile = sprintf(\n            '%s/failed-items-%d',\n            $this->baseDir,\n            getmypid()\n        );\n    }\n\n    /**\n     * Save the items to the failureFile. We silently abandon the items upon\n     * failures in this method because there's nothing we can do.\n     *\n     * @param int $idNum A numeric id for the job.\n     * @param array $items Items to save.\n     */\n    public function handleFailure($idNum, array $items)\n    {\n        if (!$this->failureFile) {\n            $this->initFailureFile();\n        }\n\n        if ($this->failureFile) {\n            $fp = @fopen($this->failureFile, 'a');\n            @fwrite($fp, json_encode(serialize([$idNum => $items])) . PHP_EOL);\n            @fclose($fp);\n        }\n    }\n\n    /**\n     * Get all the filenames for the failure files.\n     *\n     * @return array Filenames for all the failure files.\n     */\n    private function getFailedFiles()\n    {\n        $pattern = sprintf('%s/failed-items-*', $this->baseDir);\n        return glob($pattern) ?: [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/InMemoryConfigStorage.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse BadMethodCallException;\n\n/**\n * In-memory ConfigStorageInterface implementation.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nfinal class InMemoryConfigStorage implements\n    ConfigStorageInterface,\n    ProcessItemInterface\n{\n    use HandleFailureTrait;\n\n    /* @var JobConfig */\n    private $config;\n\n    /* @var array */\n    private $items = [];\n\n    /* @var array */\n    private $lastInvoked = [];\n\n    /* @var float */\n    private $created;\n\n    /* @var bool */\n    private $hasShutdownHookRegistered;\n\n    /**\n     * Singleton getInstance.\n     *\n     * @return InMemoryConfigStorage\n     */\n    public static function getInstance()\n    {\n        static $instance = null;\n        if ($instance === null) {\n            $instance = new InMemoryConfigStorage();\n        }\n        return $instance;\n    }\n\n    /**\n     * To prevent serialize.\n     */\n    public function __sleep()\n    {\n        throw new BadMethodCallException('Serialization not supported');\n    }\n\n    /**\n     * To prevent unserialize.\n     */\n    public function __wakeup()\n    {\n        throw new BadMethodCallException('Serialization not supported');\n    }\n\n    /**\n     * To prevent cloning.\n     */\n    private function __clone()\n    {\n    }\n\n    /**\n     * The constructor registers the shutdown function for running the job for\n     * remainder items when the script exits.\n     */\n    private function __construct()\n    {\n        $this->config = new JobConfig();\n        $this->created = microtime(true);\n        $this->initFailureFile();\n        $this->hasShutdownHookRegistered = false;\n    }\n\n    /**\n     * Just return true\n     *\n     * @return bool\n     */\n    public function lock()\n    {\n        return true;\n    }\n\n    /**\n     * Just return true\n     *\n     * @return bool\n     */\n    public function unlock()\n    {\n        return true;\n    }\n\n    /**\n     * Save the given JobConfig.\n     *\n     * @param JobConfig $config A JobConfig to save.\n     * @return bool\n     */\n    public function save(JobConfig $config)\n    {\n        $this->config = $config;\n        return true;\n    }\n\n    /**\n     * Load a JobConfig from the storage.\n     *\n     * @return JobConfig\n     * @throws \\RuntimeException when failed to load the JobConfig.\n     */\n    public function load()\n    {\n        return $this->config;\n    }\n\n    /**\n     * Clear the JobConfig from storage.\n     */\n    public function clear()\n    {\n        $this->config = new JobConfig();\n    }\n\n    /**\n     * Hold the items in memory and run the job in the same process when it\n     * meets the condition.\n     *\n     * We want to delay registering the shutdown function. The error\n     * reporter also registers a shutdown function and the order matters.\n     *\n     * @see \\Google\\Cloud\\ErrorReporting\\Bootstrap::init()\n     * @see http://php.net/manual/en/function.register-shutdown-function.php\n     *\n     * @param mixed $item An item to submit.\n     * @param int $idNum A numeric id for the job.\n     * @return void\n     */\n    public function submit($item, $idNum)\n    {\n        if (!$this->hasShutdownHookRegistered) {\n            register_shutdown_function([$this, 'shutdown']);\n            $this->hasShutdownHookRegistered = true;\n        }\n        if (!array_key_exists($idNum, $this->items)) {\n            $this->items[$idNum] = [];\n            $this->lastInvoked[$idNum] = $this->created;\n        }\n        $this->items[$idNum][] = $item;\n        $job = $this->config->getJobFromIdNum($idNum);\n        $batchSize = $job->getBatchSize();\n        $period = $job->getCallPeriod();\n        if ((count($this->items[$idNum]) >= $batchSize)\n             || (count($this->items[$idNum]) !== 0\n                 && microtime(true) > $this->lastInvoked[$idNum] + $period)) {\n            $this->flush($idNum);\n            $this->items[$idNum] = [];\n            $this->lastInvoked[$idNum] = microtime(true);\n        }\n    }\n\n    /**\n     * Run the job with the given id.\n     *\n     * @param int $idNum A numeric id for the job.\n     * @return bool\n     */\n    public function flush($idNum)\n    {\n        if (isset($this->items[$idNum])) {\n            $job = $this->config->getJobFromIdNum($idNum);\n\n            if (!$job->flush($this->items[$idNum])) {\n                $this->handleFailure($idNum, $this->items[$idNum]);\n            }\n\n            $this->items[$idNum] = [];\n            $this->lastInvoked[$idNum] = microtime(true);\n        }\n\n        return true;\n    }\n\n    /**\n     * Run the job for remainder items.\n     */\n    public function shutdown()\n    {\n        foreach ($this->items as $idNum => $items) {\n            if (count($items) !== 0) {\n                $this->flush($idNum);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/InterruptTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * A trait to assist in handling interrupt signals and gracefully stopping work.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait InterruptTrait\n{\n    private $shutdown = false;\n\n    private function setupSignalHandlers()\n    {\n        // setup signal handlers\n        pcntl_signal(SIGTERM, [$this, 'sigHandler']);\n        pcntl_signal(SIGINT, [$this, 'sigHandler']);\n        pcntl_signal(SIGHUP, [$this, 'sigHandler']);\n        pcntl_signal(SIGALRM, [$this, 'sigHandler']);\n    }\n\n    /**\n     * A signal handler for setting the terminate switch.\n     *\n     * @see http://php.net/manual/en/function.pcntl-signal.php\n     *\n     * @param int $signo The received signal.\n     * @param mixed $siginfo [optional] An array representing the signal\n     *              information. **Defaults to** null.\n     *\n     * @return void\n     */\n    public function sigHandler($signo, $siginfo = null)\n    {\n        switch ($signo) {\n            case SIGINT:\n            case SIGTERM:\n                $this->shutdown = true;\n                break;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/JobConfig.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * Hold configurations for the {@see \\Google\\Cloud\\Core\\Batch\\BatchRunner}.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass JobConfig\n{\n    /**\n     * @var array Associative array of JobInterface instances keyed by\n     *      identifier.\n     */\n    private $jobs = [];\n\n    /**\n     * @var array[string]int Associative array of job identifier to job id.\n     */\n    private $identifierToId = [];\n\n    /**\n     * @var array[int]string Associative array of job id to job identifier.\n     */\n    private $idToIdentifier = [];\n\n    /**\n     * Get the job with the given identifier.\n     *\n     * @param string $identifier Unique identifier of the job.\n     *\n     * @return JobInterface|null\n     */\n    public function getJobFromId($identifier)\n    {\n        return array_key_exists($identifier, $this->identifierToId)\n            ? $this->jobs[$identifier]\n            : null;\n    }\n\n    /**\n     * Get the job with the given numeric id.\n     *\n     * @param int $idNum A numeric id of the job.\n     *\n     * @return JobInterface|null\n     */\n    public function getJobFromIdNum($idNum)\n    {\n        return array_key_exists($idNum, $this->idToIdentifier)\n            ? $this->jobs[$this->idToIdentifier[$idNum]]\n            : null;\n    }\n\n    /**\n     * Register a job for executing in batch.\n     *\n     * @param string $identifier Unique identifier of the job.\n     * @param callable $callback Callback that accepts the job $idNum\n     *        and returns a JobInterface instance.\n     * @return void\n     */\n    public function registerJob($identifier, $callback)\n    {\n        if (array_key_exists($identifier, $this->identifierToId)) {\n            $idNum = $this->identifierToId[$identifier];\n        } else {\n            $idNum = count($this->identifierToId) + 1;\n            $this->idToIdentifier[$idNum] = $identifier;\n        }\n        $this->jobs[$identifier] = call_user_func(\n            $callback,\n            $idNum\n        );\n        $this->identifierToId[$identifier] = $idNum;\n    }\n\n    /**\n     * Get all the jobs indexed by the job's identifier.\n     *\n     * @return array Associative array of JobInterface instances keyed by a\n     *         string identifier.\n     */\n    public function getJobs()\n    {\n        return $this->jobs;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/JobInterface.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * The JobInterface represents any job that can be serialized and run in a\n * separate process via the Batch daemon.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ninterface JobInterface\n{\n    /**\n     * Runs the job loop. This is expected to be a blocking call.\n     */\n    public function run();\n\n    /**\n     * Return the job identifier\n     *\n     * @return string\n     */\n    public function identifier();\n\n    /**\n     * Returns the number of workers for this job.\n     *\n     * @return int\n     */\n    public function numWorkers();\n\n    /**\n     * Finish any pending activity for this job.\n     *\n     * @param array $items\n     * @return bool\n     */\n    public function flush(array $items = []);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/JobTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * A trait to assist in implementing the JobInterface\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait JobTrait\n{\n    /**\n     * @var string The job identifier\n     */\n    private $identifier;\n\n    /**\n     * @var int The job id\n     */\n    private $id;\n\n    /**\n     * @var int The number of workers for this job.\n     */\n    private $numWorkers;\n\n    /**\n     * @var string|null An optional file that is required to run this job.\n     */\n    private $bootstrapFile;\n\n    /**\n     * Return the job identifier\n     *\n     * @return string\n     */\n    public function identifier()\n    {\n        return $this->identifier;\n    }\n\n    /**\n     * Return the job id\n     *\n     * @return int\n     */\n    public function id()\n    {\n        return $this->id;\n    }\n\n    /**\n     * Returns the number of workers for this job. **Defaults to* 1.\n     *\n     * @return int\n     */\n    public function numWorkers()\n    {\n        return $this->numWorkers;\n    }\n\n    /**\n     * Returns the optional file required to run this job.\n     *\n     * @return string|null\n     */\n    public function bootstrapFile()\n    {\n        return $this->bootstrapFile;\n    }\n\n    /**\n     * Runs the job loop. This is expected to be a blocking call.\n     */\n    abstract public function run();\n\n    /**\n     * Finish any pending activity for this job.\n     *\n     * @param array $items\n     * @return bool\n     */\n    public function flush(array $items = [])\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/OpisClosureSerializer.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Opis\\Closure\\SerializableClosure;\n\n/**\n * A closure serializer utilizing\n * [Opis Closure Library](https://github.com/opis/closure).\n *\n * @deprecated use OpisClosureSerializerV4\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass OpisClosureSerializer implements ClosureSerializerInterface\n{\n    /**\n     * Recursively serializes closures.\n     *\n     * @param mixed $data\n     */\n    public function wrapClosures(&$data)\n    {\n        SerializableClosure::enterContext();\n        SerializableClosure::wrapClosures($data);\n        SerializableClosure::exitContext();\n    }\n\n    /**\n     * Recursively unserializes closures.\n     *\n     * @param mixed $data\n     */\n    public function unwrapClosures(&$data)\n    {\n        SerializableClosure::enterContext();\n        SerializableClosure::unwrapClosures($data);\n        SerializableClosure::exitContext();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/OpisClosureSerializerV4.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Opis\\Closure;\n\n/**\n * A closure serializer utilizing\n * [Opis Closure Library](https://github.com/opis/closure).\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass OpisClosureSerializerV4 implements ClosureSerializerInterface\n{\n    /**\n     * Recursively serializes closures.\n     *\n     * @param mixed $data\n     */\n    public function wrapClosures(&$data)\n    {\n        $data = Closure\\serialize($data);\n    }\n\n    /**\n     * Recursively unserializes closures.\n     *\n     * @param mixed $data\n     */\n    public function unwrapClosures(&$data)\n    {\n        $data = Closure\\unserialize($data);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/ProcessItemInterface.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * An interface for processing the items.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ninterface ProcessItemInterface\n{\n    /**\n     * Submit a job for async processing.\n     *\n     * @param mixed $item An item to submit.\n     * @param int $idNum A numeric id of the job.\n     * @return void\n     * @throws \\RuntimeException when failed to store the item.\n     */\n    public function submit($item, $idNum);\n\n    /**\n     * Run the job with the given id.\n     *\n     * @param int $idNum A numeric id of the job.\n     * @return bool\n     */\n    public function flush($idNum);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/QueueOverflowException.php",
    "content": "<?php\n/**\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * Exception thrown in {@see \\Google\\Cloud\\Core\\Batch\\SysvProcessor::submit()}\n * method when it cannot add an item to the message queue.\n * Possible causes include:\n *\n * - batch daemon is not running\n * - no job registered for this queue\n * - items are submitted faster than a job can handle them\n */\nclass QueueOverflowException extends \\RuntimeException\n{\n    public function __construct()\n    {\n        parent::__construct('Item queue overflow. Check that the batch daemon is running.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/Retry.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * A class for retrying the failed items.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass Retry\n{\n    use HandleFailureTrait;\n\n    /* @var BatchRunner */\n    private $runner;\n\n    /**\n     * Initialize a BatchRunner and $failureFile.\n     *\n     * @param BatchRunner $runner [optional] **Defaults to** a new BatchRunner.\n     */\n    public function __construct(?BatchRunner $runner = null)\n    {\n        $this->runner = $runner ?: new BatchRunner();\n        $this->initFailureFile();\n    }\n\n    /**\n     * Retry all the failed items.\n     */\n    public function retryAll()\n    {\n        foreach ($this->getFailedFiles() as $file) {\n            // Rename the file first\n            $tmpFile = dirname($file) . '/retrying-' . basename($file);\n            rename($file, $tmpFile);\n\n            $fp = @fopen($tmpFile, 'r');\n            if ($fp === false) {\n                fwrite(\n                    STDERR,\n                    sprintf('Could not open the file: %s' . PHP_EOL, $tmpFile)\n                );\n                continue;\n            }\n            while ($line = fgets($fp)) {\n                $jsonDecodedValue = json_decode($line);\n                // Check if data json_encoded after serialization\n                if ($jsonDecodedValue !== null || $jsonDecodedValue !== false) {\n                    $line = $jsonDecodedValue;\n                }\n                $a = unserialize($line);\n                $idNum = key($a);\n                $job = $this->runner->getJobFromIdNum($idNum);\n                if (! $job->callFunc($a[$idNum])) {\n                    $this->handleFailure($idNum, $a[$idNum]);\n                }\n            }\n            @fclose($fp);\n            @unlink($tmpFile);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/SerializableClientTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Opis\\Closure\\SerializableClosure;\n\n/**\n * A trait to assist in serializing/deserializing client configuration that may\n * contain closures.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait SerializableClientTrait\n{\n    /**\n     * @var array\n     */\n    private $clientConfig;\n\n    /**\n     * @var ClosureSerializerInterface|null\n     */\n    private $closureSerializer;\n\n    /**\n     * @param array $options {\n     *     Configuration options.\n     *\n     *     @type ClosureSerializerInterface $closureSerializer An implementation\n     *           responsible for serializing closures used in the\n     *           `$clientConfig`. This is especially important when using the\n     *           batch daemon. **Defaults to**\n     *           {@see \\Google\\Cloud\\Core\\Batch\\OpisClosureSerializer} if the\n     *           `opis/closure` library is installed.\n     *     @type array $clientConfig A config used to construct the client upon\n     *           which requests will be made.\n     * }\n     */\n    private function setSerializableClientOptions(array $options)\n    {\n        $options += [\n            'closureSerializer' => null,\n            'clientConfig' => []\n        ];\n        $this->closureSerializer = $options['closureSerializer']\n            ?? $this->getDefaultClosureSerializer();\n        $this->setWrappedClientConfig($options);\n    }\n\n    /**\n     * @param array $options\n     */\n    private function setWrappedClientConfig(array $options)\n    {\n        $config = $options['clientConfig'] ?? [];\n\n        if ($config && $this->closureSerializer) {\n            $this->closureSerializer->wrapClosures($config);\n        }\n\n        $this->clientConfig = $config;\n    }\n\n    /**\n     * @return array\n     */\n    private function getUnwrappedClientConfig()\n    {\n        if ($this->clientConfig && $this->closureSerializer) {\n            $this->closureSerializer->unwrapClosures($this->clientConfig);\n        }\n\n        return $this->clientConfig;\n    }\n\n    /**\n     * @return ClosureSerializerInterface|null\n     */\n    private function getDefaultClosureSerializer()\n    {\n        if (function_exists('Opis\\Closure\\serialize')) {\n            return new OpisClosureSerializerV4();\n        }\n        if (class_exists(SerializableClosure::class)) {\n            return new OpisClosureSerializer();\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/SimpleJob.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * Represents a simple job that runs a single method that loops forever.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass SimpleJob implements JobInterface\n{\n    use JobTrait;\n\n    /**\n     * @var callable\n     */\n    private $func;\n\n    /**\n     * Creates a new Simple Job.\n     *\n     * @param string $identifier Unique identifier of the job.\n     * @param callable $func Any Callable except for Closure. The callable\n     *      should not accept arguments and should loop forever.\n     * @param int $id The job id.\n     * @param array $options [optional] {\n     *      Configuration options.\n     *\n     *      @type string $bootstrapFile A file to load before executing the job.\n     *            It's needed for registering global functions.\n     *      @type int $numWorkers The number of workers for this job.\n     * }\n     */\n    public function __construct($identifier, $func, $id, array $options = [])\n    {\n        $this->identifier = $identifier;\n        $this->func = $func;\n        $this->id = $id;\n\n        $options += [\n            'bootstrapFile' => null,\n            'numWorkers' => 1\n        ];\n        $this->numWorkers = $options['numWorkers'];\n        $this->bootstrapFile = $options['bootstrapFile'];\n    }\n\n    /**\n     * Runs the job loop. This is expected to be a blocking call.\n     */\n    public function run()\n    {\n        if ($this->bootstrapFile) {\n            require_once $this->bootstrapFile;\n        }\n        call_user_func($this->func);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/SimpleJobTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Google\\Cloud\\Core\\SysvTrait;\n\n/**\n * A trait to assist in the registering and processing of simple jobs.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait SimpleJobTrait\n{\n    use BatchDaemonTrait;\n    use SysvTrait;\n    use SerializableClientTrait;\n\n    /**\n     * The simple loop function. This method is expected to be a blocking call.\n     */\n    abstract public function run();\n\n    /**\n     * Registers this object as a SimpleJob.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $identifier An identifier for the simple job. This\n     *           value must be unique across all job configs.\n     *     @type ConfigStorageInterface $configStorage The configuration storage\n     *           used to save configuration.\n     *     @type int $numWorkers The number of workers for this job.\n     *     @type array $clientConfig A config used to construct the client upon\n     *           which requests will be made.\n     *     @type ClosureSerializerInterface $closureSerializer An implementation\n     *           responsible for serializing closures used in the\n     *           `$clientConfig`. This is especially important when using the\n     *           batch daemon. **Defaults to**\n     *           {@see \\Google\\Cloud\\Core\\Batch\\OpisClosureSerializer} if the\n     *           `opis/closure` library is installed.\n     * }\n     */\n    private function setSimpleJobProperties(array $options = [])\n    {\n        if (!isset($options['identifier'])) {\n            throw new \\InvalidArgumentException(\n                'A valid identifier is required in order to register a job.'\n            );\n        }\n\n        $options += [\n            'configStorage' => null,\n        ];\n\n        $this->setSerializableClientOptions($options);\n        $identifier = $options['identifier'];\n        $configStorage = $options['configStorage'] ?: $this->defaultConfigStorage();\n\n        $result = $configStorage->lock();\n        if ($result === false) {\n            return false;\n        }\n        $config = $configStorage->load();\n        $config->registerJob(\n            $identifier,\n            function ($id) use ($identifier, $options) {\n                return new SimpleJob($identifier, [$this, 'run'], $id, $options);\n            }\n        );\n        try {\n            $result = $configStorage->save($config);\n        } finally {\n            $configStorage->unlock();\n        }\n        return $result;\n    }\n\n    private function defaultConfigStorage()\n    {\n        if ($this->isSysvIPCLoaded() && $this->isDaemonRunning()) {\n            return new SysvConfigStorage();\n        } else {\n            return InMemoryConfigStorage::getInstance();\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/SysvConfigStorage.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\n/**\n * ConfigStorageInterface implementation with SystemV IPC shared memory.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass SysvConfigStorage implements ConfigStorageInterface\n{\n    const VAR_KEY = 1;\n\n    const DEFAULT_SHM_SIZE = 200000;\n\n    const DEFAULT_PERM = 0600;\n\n    const DEFAULT_PROJECT = 'A';\n\n    /* @var int */\n    private $sysvKey;\n\n    /* @var int */\n    private $semid;\n\n    /* @var int */\n    private $shmSize;\n\n    /* @var int */\n    private $perm;\n\n    /* @var string */\n    private $project;\n\n    /**\n     * Prepare the key for semaphore and shared memory.\n     */\n    public function __construct()\n    {\n        $this->shmSize = intval(getenv('GOOGLE_CLOUD_BATCH_SHM_SIZE'));\n        if ($this->shmSize === 0) {\n            $this->shmSize = self::DEFAULT_SHM_SIZE;\n        }\n        $this->perm = octdec(getenv('GOOGLE_CLOUD_BATCH_PERM'));\n        if ($this->perm === 0) {\n            $this->perm = self::DEFAULT_PERM;\n        }\n        $this->project = getenv('GOOGLE_CLOUD_BATCH_PROJECT');\n        if ($this->project === false) {\n            $this->project = self::DEFAULT_PROJECT;\n        }\n        $this->sysvKey = ftok(__FILE__, $this->project);\n        $this->semid = sem_get($this->sysvKey, 1, $this->perm, 1);\n    }\n\n    /**\n     * Acquire a lock.\n     *\n     * @return bool\n     */\n    public function lock()\n    {\n        return sem_acquire($this->semid);\n    }\n\n    /**\n     * Release a lock.\n     *\n     * @return bool\n     */\n    public function unlock()\n    {\n        return sem_release($this->semid);\n    }\n\n    /**\n     * Save the given JobConfig.\n     *\n     * @param JobConfig $config A JobConfig to save.\n     * @return bool\n     * @throws \\RuntimeException when failed to attach to the shared memory or serialization fails\n     */\n    public function save(JobConfig $config)\n    {\n        $shmid = shm_attach($this->sysvKey, $this->shmSize, $this->perm);\n        if ($shmid === false) {\n            throw new \\RuntimeException(\n                'Failed to attach to the shared memory'\n            );\n        }\n\n        // If the variable write fails, clear the memory and re-raise the exception\n        try {\n            $result = shm_put_var($shmid, self::VAR_KEY, $config);\n        } catch (\\Exception $e) {\n            $this->clear();\n            throw new \\RuntimeException($e->getMessage());\n        } finally {\n            shm_detach($shmid);\n        }\n        return $result;\n    }\n\n    /**\n     * Load a JobConfig from the storage.\n     *\n     * @return JobConfig\n     * @throws \\RuntimeException when failed to attach to the shared memory or deserialization fails\n     */\n    public function load()\n    {\n        $shmid = shm_attach($this->sysvKey, $this->shmSize, $this->perm);\n        if ($shmid === false) {\n            throw new \\RuntimeException(\n                'Failed to attach to the shared memory'\n            );\n        }\n        if (! shm_has_var($shmid, self::VAR_KEY)) {\n            $result = new JobConfig();\n        } else {\n            $result = shm_get_var($shmid, self::VAR_KEY);\n        }\n        shm_detach($shmid);\n\n        if ($result === false) {\n            throw new \\RuntimeException(\n                'Failed to deserialize data from shared memory'\n            );\n        }\n        return $result;\n    }\n\n    /**\n     * Clear the JobConfig from storage.\n     */\n    public function clear()\n    {\n        $shmid = shm_attach($this->sysvKey, $this->shmSize, $this->perm);\n        shm_remove_var($shmid, self::VAR_KEY);\n    }\n\n    /**\n     * Serialize the object\n     */\n    public function __serialize()\n    {\n        $vars = get_object_vars($this);\n        // As of PHP 8.0, \"semid\" is the unserializable object \"SysvSemaphore\"\n        // @see https://github.com/googleapis/google-cloud-php/issues/3749\n        unset($vars['semid']);\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Batch/SysvProcessor.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Batch;\n\nuse Google\\Cloud\\Core\\SysvTrait;\n\n/**\n * ProcessItemInterface implementation with SysV IPC message queue.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass SysvProcessor implements ProcessItemInterface\n{\n    use BatchDaemonTrait;\n    use SysvTrait;\n\n    /* @var array */\n    private $sysvQs = [];\n\n    /**\n     * Submit an item for async processing.\n     *\n     * @param mixed $item An item to submit.\n     * @param int $idNum A numeric id of the job.\n     * @return void\n     *\n     * @throws \\RuntimeException when failed to store the item.\n     */\n    public function submit($item, $idNum)\n    {\n        if (!array_key_exists($idNum, $this->sysvQs)) {\n            $this->sysvQs[$idNum] =\n                msg_get_queue($this->getSysvKey($idNum));\n        }\n        $result = @msg_send(\n            $this->sysvQs[$idNum],\n            self::$typeDirect,\n            $item,\n            true,\n            false\n        );\n        if ($result === false) {\n            // Try to put the content in a temp file and send the filename.\n            $tempFile = tempnam(sys_get_temp_dir(), 'Item');\n            $result = file_put_contents($tempFile, serialize($item));\n            if ($result === false) {\n                throw new \\RuntimeException(\n                    \"Failed to write to $tempFile while submiting the item\"\n                );\n            }\n            $result = @msg_send(\n                $this->sysvQs[$idNum],\n                self::$typeFile,\n                $tempFile,\n                true,\n                false\n            );\n            if ($result === false) {\n                @unlink($tempFile);\n                throw new QueueOverflowException();\n            }\n        }\n    }\n\n    /**\n     * Run the job with the given id. This has no effect and simply always\n     * returns false when using the batch daemon.\n     *\n     * @param int $idNum A numeric id of the job.\n     * @return bool\n     */\n    public function flush($idNum)\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Blob.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Represents a Blob value.\n *\n * Blobs can be used to store binary across data various Google Cloud services.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\Blob;\n *\n * $blob = new Blob(file_get_contents(__DIR__ .'/family-photo.jpg'));\n * ```\n *\n * ```\n * // Get the value of a blob by casting to a string.\n *\n * echo (string) $blob;\n * ```\n */\nclass Blob implements \\JsonSerializable\n{\n    /**\n     * @var mixed\n     */\n    private $value;\n\n    /**\n     * Create a blob\n     *\n     * @param string|resource|StreamInterface $value The blob value\n     */\n    public function __construct($value)\n    {\n        $this->value = Utils::streamFor($value);\n    }\n\n    /**\n     * Get the blob contents as a stream\n     *\n     * Example:\n     * ```\n     * $value = $blob->get();\n     * ```\n     *\n     * @return StreamInterface\n     */\n    public function get()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Cast the blob to a string\n     *\n     * @access private\n     * @return string\n     */\n    public function __toString()\n    {\n        return (string) $this->value;\n    }\n\n    /**\n     * Implement JsonSerializable by returning a base64 encoded string of the blob\n     *\n     * @return string\n     * @access private\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return base64_encode((string) $this->value);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ClientTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Auth\\Credentials\\GCECredentials;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Cloud\\Core\\Compute\\Metadata;\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\n\n/**\n * Provides functionality common to each service client.\n */\ntrait ClientTrait\n{\n    use JsonTrait;\n\n    /**\n     * @var string|null The project ID created in the Google Developers Console.\n     */\n    private $projectId;\n\n    /**\n     * Get either a gRPC or REST connection based on the provided config\n     * and the system dependencies available.\n     *\n     * @param array $config\n     * @return string\n     * @throws GoogleException\n     */\n    private function getConnectionType(array $config)\n    {\n        $isGrpcExtensionLoaded = $this->isGrpcLoaded();\n        $defaultTransport = $isGrpcExtensionLoaded ? 'grpc' : 'rest';\n        $transport = strtolower($config['transport'] ?? $defaultTransport);\n\n        if ($transport === 'grpc') {\n            if (!$isGrpcExtensionLoaded) {\n                throw new GoogleException(\n                    'gRPC support has been requested but required dependencies ' .\n                    'have not been found. ' . $this->getGrpcInstallationMessage()\n                );\n            }\n        }\n\n        return $transport;\n    }\n\n    /**\n     * Throw an exception if the gRPC extension is not loaded.\n     *\n     * @throws GoogleException\n     */\n    private function requireGrpc()\n    {\n        if (!$this->isGrpcLoaded()) {\n            throw new GoogleException(\n                'The requested client requires the gRPC extension. ' .\n                $this->getGrpcInstallationMessage()\n            );\n        }\n    }\n\n    /**\n     * @return string\n     */\n    private function getGrpcInstallationMessage()\n    {\n        return 'Please see https://cloud.google.com/php/grpc for installation ' .\n               'instructions.';\n    }\n\n    /**\n     * Fetch and validate the keyfile and set the project ID.\n     *\n     * @param  array $config\n     * @return array\n     * @throws GoogleException\n     */\n    private function configureAuthentication(array $config)\n    {\n        $credentialsFetcher = $config['credentialsFetcher'] ?? null;\n\n        if (!($credentialsFetcher instanceof FetchAuthTokenInterface)) {\n            $config['keyFile'] = $this->getKeyFile($config);\n        }\n\n        $this->projectId = $this->detectProjectId($config);\n\n        return $config;\n    }\n\n    /**\n     * Get a keyfile if it exists.\n     *\n     * Process:\n     * 1. If $config['keyFile'] is set, use that.\n     * 2. If $config['keyFilePath'] is set, load the file and use that.\n     * 3. If GOOGLE_APPLICATION_CREDENTIALS environment variable is set, load\n     *    from that location and use that.\n     * 4. If OS-specific well-known-file is set, load from that location and use\n     *    that.\n     *\n     * @param  array $config\n     * @return array|null Key data\n     * @throws GoogleException\n     */\n    private function getKeyFile(array $config = [])\n    {\n        $config += [\n            'keyFile' => null,\n            'keyFilePath' => null,\n        ];\n\n        if ($config['keyFile']) {\n            return $config['keyFile'];\n        }\n\n        if ($config['keyFilePath']) {\n            if (!file_exists($config['keyFilePath'])) {\n                throw new GoogleException(sprintf(\n                    'Given keyfile path %s does not exist',\n                    $config['keyFilePath']\n                ));\n            }\n\n            try {\n                $keyFileData = $this->jsonDecode(file_get_contents($config['keyFilePath']), true);\n            } catch (\\InvalidArgumentException $ex) {\n                throw new GoogleException(sprintf(\n                    'Given keyfile at path %s was invalid',\n                    $config['keyFilePath']\n                ));\n            }\n\n            return $keyFileData;\n        }\n\n        return CredentialsLoader::fromEnv()\n            ?: CredentialsLoader::fromWellKnownFile();\n    }\n\n    /**\n     * Detect and return a project ID.\n     *\n     * Process:\n     * 1. If $config['projectId'] is set, use that.\n     * 2. If an emulator is enabled, return a dummy value.\n     * 3. If $config['keyFile'] is set, attempt to retrieve a project ID from\n     *    that.\n     * 4. Check `GOOGLE_CLOUD_PROJECT` environment variable.\n     * 5. Check `GCLOUD_PROJECT` environment variable.\n     * 6. If code is running on compute engine, try to get the project ID from\n     *    the metadata store.\n     * 7. Throw exception.\n     *\n     * @param  array $config\n     * @return string\n     * @throws GoogleException\n     */\n    private function detectProjectId(array $config)\n    {\n        $config += [\n            'credentialsFetcher' => null,\n            'httpHandler' => null,\n            'projectId' => null,\n            'projectIdRequired' => false,\n            'hasEmulator' => false,\n            'preferNumericProjectId' => false,\n            'suppressKeyFileNotice' => false\n        ];\n\n        if ($config['projectId']) {\n            return $config['projectId'];\n        }\n\n        if ($config['hasEmulator']) {\n            return 'emulator-project';\n        }\n\n        if ($config['credentialsFetcher'] instanceof ProjectIdProviderInterface) {\n            return $config['credentialsFetcher']->getProjectId();\n        }\n\n        if (isset($config['keyFile'])) {\n            if (isset($config['keyFile']['project_id'])) {\n                return $config['keyFile']['project_id'];\n            }\n\n            if ($config['suppressKeyFileNotice'] !== true) {\n                $serviceAccountUri = 'https://cloud.google.com/iam/docs/' .\n                    'creating-managing-service-account-keys#creating_service_account_keys';\n\n                trigger_error(\n                    sprintf(\n                        'A keyfile was given, but it does not contain a project ' .\n                        'ID. This can indicate an old and obsolete keyfile, ' .\n                        'in which case you should create a new one. To suppress ' .\n                        'this message, set `suppressKeyFileNotice` to `true` in your client configuration. ' .\n                        'To learn more about generating new keys, see this URL: %s',\n                        $serviceAccountUri\n                    ),\n                    E_USER_NOTICE\n                );\n            }\n        }\n\n        if (getenv('GOOGLE_CLOUD_PROJECT')) {\n            return getenv('GOOGLE_CLOUD_PROJECT');\n        }\n\n        if (getenv('GCLOUD_PROJECT')) {\n            return getenv('GCLOUD_PROJECT');\n        }\n\n        if ($this->onGce($config['httpHandler'])) {\n            $metadata = $this->getMetaData();\n            $projectId = $config['preferNumericProjectId']\n                ? $metadata->getNumericProjectId()\n                : $metadata->getProjectId();\n            if ($projectId) {\n                return $projectId;\n            }\n        }\n\n        if ($config['projectIdRequired']) {\n            throw new GoogleException(\n                'No project ID was provided, ' .\n                'and we were unable to detect a default project ID.'\n            );\n        }\n\n        return '';\n    }\n\n    /**\n     * Abstract the GCECredentials call so we can mock it in the unit tests!\n     *\n     * @codeCoverageIgnore\n     * @return bool\n     */\n    protected function onGce($httpHandler)\n    {\n        return GCECredentials::onGce($httpHandler);\n    }\n\n    /**\n     * Abstract the Metadata instantiation for unit testing\n     *\n     * @codeCoverageIgnore\n     * @return Metadata\n     */\n    protected function getMetaData()\n    {\n        return new Metadata();\n    }\n\n    /**\n     * Abstract the checking of the grpc extension for unit testing.\n     *\n     * @codeCoverageIgnore\n     * @return bool\n     */\n    protected function isGrpcLoaded()\n    {\n        return extension_loaded('grpc');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Compute/Metadata/Readers/HttpHandlerReader.php",
    "content": "<?php\n/**\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Compute\\Metadata\\Readers;\n\nuse Google\\Auth\\Credentials\\GCECredentials;\nuse Google\\Auth\\HttpHandler\\HttpClientCache;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Read Compute Metadata using the HTTP Handler utility.\n */\nclass HttpHandlerReader implements ReaderInterface\n{\n    /**\n     * @var callable\n     */\n    private $httpHandler;\n\n    /**\n     * @param callable $httpHandler [optional] An HTTP Handler capable of\n     *        accepting PSR7 requests and returning PSR7 responses.\n     */\n    public function __construct(?callable $httpHandler = null)\n    {\n        $this->httpHandler = $httpHandler\n            ?: HttpHandlerFactory::build(HttpClientCache::getHttpClient());\n    }\n\n    /**\n     * Read the metadata for a given path.\n     *\n     * @param string $path The metadata path, relative to `/computeMetadata/v1/`.\n     * @return string\n     */\n    public function read($path)\n    {\n        $url = sprintf(\n            'http://%s/computeMetadata/v1/%s',\n            GCECredentials::METADATA_IP,\n            $path\n        );\n\n        $request = new Request('GET', $url, [\n            GCECredentials::FLAVOR_HEADER => 'Google'\n        ]);\n\n        $handler = $this->httpHandler;\n        $res = $handler($request);\n\n        return (string) $res->getBody();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Compute/Metadata/Readers/ReaderInterface.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Compute\\Metadata\\Readers;\n\n/**\n * Defines a metadata reader implementation.\n */\ninterface ReaderInterface\n{\n    /**\n     * Read metadata from a given path.\n     */\n    public function read($path);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Compute/Metadata/Readers/StreamReader.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Compute\\Metadata\\Readers;\n\nuse Google\\Auth\\Credentials\\GCECredentials;\n\n/**\n * A class only reading the metadata URL with an appropriate header.\n *\n * This class makes it easy to test the MetadataStream class.\n */\nclass StreamReader implements ReaderInterface\n{\n    /**\n     * The base PATH for the metadata.\n     *\n     * @deprecated\n     */\n    const BASE_URL = 'http://169.254.169.254/computeMetadata/v1/';\n\n    /**\n     * The header whose presence indicates GCE presence.\n     *\n     * @deprecated\n     */\n    const FLAVOR_HEADER = 'Metadata-Flavor: Google';\n\n    /**\n     * A common context for this reader.\n     */\n    private $context;\n\n    /**\n     * We create the common context in the constructor.\n     */\n    public function __construct()\n    {\n        $options = [\n            'http' => [\n                'method' => 'GET',\n                'header' => GCECredentials::FLAVOR_HEADER . ': Google'\n            ],\n        ];\n        $this->context = $this->createStreamContext($options);\n    }\n\n    /**\n     * Read the metadata for a given path.\n     *\n     * @param string $path The metadata path, relative to `/computeMetadata/v1/`.\n     * @return string\n     */\n    public function read($path)\n    {\n        $url = sprintf(\n            'http://%s/computeMetadata/v1/%s',\n            GCECredentials::METADATA_IP,\n            $path\n        );\n\n        return $this->getMetadata($url);\n    }\n\n    /**\n     * Abstracted for testing.\n     *\n     * @param array $options\n     * @return resource\n     * @codeCoverageIgnore\n     */\n    protected function createStreamContext(array $options)\n    {\n        return stream_context_create($options);\n    }\n\n    /**\n     * Abstracted for testing.\n     *\n     * @param string $url\n     * @return string\n     * @codeCoverageIgnore\n     */\n    protected function getMetadata($url)\n    {\n        return file_get_contents($url, false, $this->context);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Compute/Metadata.php",
    "content": "<?php\n\n/**\n * Copyright 2015 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Compute;\n\nuse Google\\Cloud\\Core\\Compute\\Metadata\\Readers\\HttpHandlerReader;\nuse Google\\Cloud\\Core\\Compute\\Metadata\\Readers\\ReaderInterface;\n\n/**\n * A library for accessing the Google Compute Engine (GCE) metadata.\n *\n * The metadata is available from Google Compute Engine instances and\n * App Engine Managed VMs instances.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\Compute\\Metadata;\n *\n * $metadata = new Metadata();\n * $projectId = $metadata->getProjectId();\n * ```\n *\n * ```\n * // It is easy to get any metadata from a project.\n * $val = $metadata->getProjectMetadata($key);\n * ```\n */\nclass Metadata\n{\n    /**\n     * @var ReaderInterface The metadata reader.\n     */\n    private $reader;\n\n    /**\n     * @var string The project id.\n     */\n    private $projectId;\n\n    /**\n     * @var int The numeric project id.\n     */\n    private $numericProjectId;\n\n    /**\n     * @param ReaderInterface $reader [optional] A metadata reader implementation.\n     */\n    public function __construct(?ReaderInterface $reader = null)\n    {\n        $this->reader = $reader ?: new HttpHandlerReader();\n    }\n\n    /**\n     * Replace the default reader implementation\n     *\n     * @deprecated If a custom reader implementation is desired, provide it at\n     *     construction.\n     * @param ReaderInterface $reader The reader implementation\n     */\n    public function setReader(ReaderInterface $reader)\n    {\n        $this->reader = $reader;\n    }\n\n    /**\n     * Fetch a metadata item by its path\n     *\n     * Example:\n     * ```\n     * $projectId = $metadata->get('project/project-id');\n     * ```\n     *\n     * @param string $path The path of the item to retrieve.\n     */\n    public function get($path)\n    {\n        return $this->reader->read($path);\n    }\n\n    /**\n     * Detect and return the project ID\n     *\n     * Example:\n     * ```\n     * $projectId = $metadata->getProjectId();\n     * ```\n     *\n     * @return string\n     */\n    public function getProjectId()\n    {\n        if (!isset($this->projectId)) {\n            $this->projectId = $this->get('project/project-id');\n        }\n\n        return $this->projectId;\n    }\n\n    /**\n     * Detect and return the numeric project ID\n     *\n     * Example:\n     * ```\n     * $projectId = $metadata->getNumericProjectId();\n     * ```\n     *\n     * @return string\n     */\n    public function getNumericProjectId()\n    {\n        if (!isset($this->numericProjectId)) {\n            $this->numericProjectId = $this->get('project/numeric-project-id');\n        }\n\n        return $this->numericProjectId;\n    }\n\n    /**\n     * Fetch an item from the project metadata\n     *\n     * Example:\n     * ```\n     * $foo = $metadata->getProjectMetadata('foo');\n     * ```\n     *\n     * @param string $key The metadata key\n     * @return string\n     */\n    public function getProjectMetadata($key)\n    {\n        $path = 'project/attributes/' . $key;\n        return $this->get($path);\n    }\n\n    /**\n     * Fetch an item from the instance metadata\n     *\n     * Example:\n     * ```\n     * $foo = $metadata->getInstanceMetadata('foo');\n     * ```\n     *\n     * @param string $key The instance metadata key\n     * @return string\n     */\n    public function getInstanceMetadata($key)\n    {\n        $path = 'instance/attributes/' . $key;\n        return $this->get($path);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ConcurrencyControlTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Methods to control concurrent updates.\n */\ntrait ConcurrencyControlTrait\n{\n    /**\n     * Apply the If-Match header to requests requiring concurrency control.\n     *\n     * @param array $options\n     * @param string $argName\n     * @return array\n     */\n    private function applyEtagHeader(array $options, $argName = 'etag')\n    {\n        if (isset($options[$argName])) {\n            if (!isset($options['restOptions'])) {\n                $options['restOptions'] = [];\n            }\n\n            if (!isset($options['restOptions']['headers'])) {\n                $options['restOptions']['headers'] = [];\n            }\n\n            $options['restOptions']['headers']['If-Match'] = $options[$argName];\n        }\n\n        return $options;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/DebugInfoTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Provides easier to read debug information when dumping a class to stdout.\n *\n * @codeCoverageIgnore\n */\ntrait DebugInfoTrait\n{\n    /**\n     * @access private\n     * @return array\n     */\n    public function __debugInfo()\n    {\n        $props = get_object_vars($this);\n\n        if (isset($this->connection)) {\n            $props['connection'] = get_class($this->connection);\n        }\n\n        if (isset($props['__excludeFromDebug'])) {\n            $exclude = $props['__excludeFromDebug'];\n            unset($props['__excludeFromDebug']);\n\n            foreach ($exclude as $e) {\n                unset($props[$e]);\n            }\n        }\n\n        return $props;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/DetectProjectIdTrait.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\n\n/**\n * @internal\n * Provides functionality common to handwritten clients.\n */\ntrait DetectProjectIdTrait\n{\n\n    /**\n     * @var string|null The project ID created in the Google Developers Console.\n     */\n    private $projectId;\n\n    /**\n     * Detect and return a project ID.\n     * This is different from detectProjectId as this method is supposed to be used by\n     * handwritten clients delegating their auth process to GAX.\n     *\n     * Process:\n     * 1. If $config['projectId'] is set, use that.\n     * 2. If an emulator is enabled, return a dummy value.\n     * 3. If $config['credentials'] is set, attempt to retrieve a project ID from\n     *    that.\n     * 4. If code is running on compute engine, try to get the project ID from\n     *    the metadata store.\n     * 5. Throw exception.\n     *\n     * @param  array $config\n     * @return string|int|null\n     * @throws GoogleException\n     */\n    private function detectProjectId(array $config)\n    {\n        $config += [\n            'httpHandler' => null,\n            'projectId' => null,\n            'projectIdRequired' => false,\n            'hasEmulator' => false,\n            'credentials' => null,\n        ];\n\n        if ($config['projectId']) {\n            return $config['projectId'];\n        }\n\n        if ($config['hasEmulator']) {\n            return 'emulator-project';\n        }\n\n        if ($config['credentials']\n            && $config['credentials'] instanceof ProjectIdProviderInterface\n            && $projectId = $config['credentials']->getProjectId()) {\n            return $projectId;\n        }\n\n        if (getenv('GOOGLE_CLOUD_PROJECT')) {\n            return getenv('GOOGLE_CLOUD_PROJECT');\n        }\n\n        if (getenv('GCLOUD_PROJECT')) {\n            return getenv('GCLOUD_PROJECT');\n        }\n\n        $this->throwExceptionIfProjectIdRequired($config);\n\n        return '';\n    }\n\n    /**\n     * Throws an exception if project id is required.\n     * @param array $config\n     * @throws GoogleException\n     */\n    private function throwExceptionIfProjectIdRequired(array $config)\n    {\n        if ($config['projectIdRequired']) {\n            throw new GoogleException(\n                'No project ID was provided, ' .\n                'and we were unable to detect a default project ID.'\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Duration.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Represents a Duration type.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\Duration;\n *\n * $seconds = 100;\n * $nanoSeconds = 1000;\n * $duration = new Duration($seconds, $nanoSeconds);\n * ```\n *\n * ```\n * // Duration objects can be cast to json-encoded strings.\n * echo (string) $duration;\n * ```\n */\nclass Duration\n{\n    const TYPE = 'DURATION';\n\n    /**\n     * @var int\n     */\n    private $seconds;\n\n    /**\n     * @var int\n     */\n    private $nanos;\n\n    /**\n     * @param int $seconds The number of seconds in the duration.\n     * @param int $nanos [optional] The number of nanoseconds in the duration.\n     */\n    public function __construct($seconds, $nanos = 0)\n    {\n        $this->seconds = $seconds;\n        $this->nanos = $nanos;\n    }\n\n    /**\n     * Get the duration\n     *\n     * Example:\n     * ```\n     * $res = $duration->get();\n     * ```\n     *\n     * @return array\n     */\n    public function get()\n    {\n        return [\n            'seconds' => $this->seconds,\n            'nanos' => $this->nanos\n        ];\n    }\n\n    /**\n     * Format the value as a string.\n     *\n     * Example:\n     * ```\n     * echo $duration->formatAsString();\n     * ```\n     *\n     * @return string\n     */\n    public function formatAsString()\n    {\n        return json_encode($this->get());\n    }\n\n    /**\n     * Format the value as a string.\n     *\n     * @return string\n     * @access private\n     */\n    public function __toString()\n    {\n        return $this->formatAsString();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/EmulatorTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Provides common logic for configuring the usage of an emulator.\n */\ntrait EmulatorTrait\n{\n    /**\n     * Configure the gapic configuration to use a service emulator.\n     *\n     * @param string $emulatorHost\n     * @return array\n     */\n    private function emulatorGapicConfig($emulatorHost)\n    {\n        // Strip the URL scheme from the input, if it was provided.\n        if ($scheme = parse_url($emulatorHost, PHP_URL_SCHEME)) {\n            $search = $scheme . '://';\n            $emulatorHost = str_replace($search, '', $emulatorHost);\n        }\n\n        $config = [\n            'apiEndpoint' => $emulatorHost,\n            'credentials' => new InsecureCredentialsWrapper(),\n        ];\n        if (class_exists('Grpc\\ChannelCredentials')) {\n            $config['transportConfig'] = [\n                'grpc' => [\n                    'stubOpts' => [\n                        'credentials' => \\Grpc\\ChannelCredentials::createInsecure()\n                    ]\n                ]\n            ];\n        }\n\n        return $config;\n    }\n    /**\n     * Retrieve a valid base uri for a service emulator.\n     *\n     * @param string $emulatorHost\n     * @return string\n     */\n    private function emulatorBaseUri($emulatorHost)\n    {\n        $emulatorUriComponents = parse_url($emulatorHost);\n        $emulatorUriComponents = array_merge(['scheme' => 'http', 'port' => ''], $emulatorUriComponents);\n        $baseUri = \"{$emulatorUriComponents['scheme']}://{$emulatorUriComponents['host']}\";\n        $baseUri .= $emulatorUriComponents['port'] ? \":{$emulatorUriComponents['port']}/\" : '/';\n\n        return $baseUri;\n    }\n\n    /**\n     * When emulators are enabled, use them as the service host.\n     *\n     * This method is deprecated and will be removed in a future major release.\n     *\n     * @param string $baseUri\n     * @param string $emulatorHost [optional]\n     * @return string\n     *\n     * @deprecated\n     * @access private\n     */\n    public function getEmulatorBaseUri($baseUri, $emulatorHost = null)\n    {\n        if ($emulatorHost) {\n            $baseUri = $this->emulatorBaseUri($emulatorHost);\n        }\n\n        return $baseUri;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/AbortedException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a transaction is aborted.\n */\nclass AbortedException extends ServiceException\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/BadRequestException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a request fails due to an error in the request.\n * In REST context, this exception indicates a status code 400.\n */\nclass BadRequestException extends ServiceException\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/ConflictException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a request fails due to a conflict.\n * In REST context, this exception indicates a status code 409.\n */\nclass ConflictException extends ServiceException\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/DeadlineExceededException.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a request takes too long to complete.\n * In REST context, this exception indicates a status code 504.\n */\nclass DeadlineExceededException extends ServiceException\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/FailedPreconditionException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a request fails due to a failed precondition.\n * In REST context, this exception indicates a status code 412.\n */\nclass FailedPreconditionException extends ServiceException\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/GoogleException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\nuse Exception;\n\n/**\n * Exception thrown when a request fails.\n */\nclass GoogleException extends Exception\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/NotFoundException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a resource is not found.\n */\nclass NotFoundException extends ServiceException\n{\n    /**\n     * Allows overriding message for injection of Whitelist Notice.\n     *\n     * @param string $message the new message\n     * @return void\n     * @access private\n     */\n    public function setMessage($message)\n    {\n        $this->message = $message;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/ServerException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\n/**\n * Exception thrown when a request fails due to an error on the server.\n * In REST context, this exception indicates a status code 500.\n */\nclass ServerException extends ServiceException\n{\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Exception/ServiceException.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Exception;\n\nuse Exception;\nuse Google\\ApiCore\\ApiException;\n\n/**\n * Exception thrown when a request fails.\n */\nclass ServiceException extends GoogleException\n{\n    // This is the value of the '@type' key for an ErrorInfo object returned\n    // in the exception response\n    const ERRORINFO_TYPE_REST = 'type.googleapis.com/google.rpc.ErrorInfo';\n\n    /**\n     * @var Exception|null\n     */\n    private $serviceException;\n\n    /**\n     * @var array\n     */\n    protected $metadata;\n\n    /**\n     * @var array|null\n     */\n    private $errorInfo;\n\n    /**\n     * @var array|null\n     */\n    private $errorInfoMetadata;\n\n    /**\n     * @var string|null\n     */\n    private $errorReason;\n\n    /**\n     * Handle previous exceptions differently here.\n     *\n     * @param string|null $message\n     * @param int $code\n     * @param Exception|null $serviceException\n     * @param array $metadata [optional] Exception metadata.\n     */\n    public function __construct(\n        $message = null,\n        $code = 0,\n        ?Exception $serviceException = null,\n        array $metadata = []\n    ) {\n        $this->serviceException = $serviceException;\n        $this->metadata = $metadata;\n        $this->errorInfo = null;\n        $this->errorInfoMetadata = null;\n        $this->errorReason = null;\n\n        parent::__construct($message ?: '', $code);\n    }\n\n    /**\n     * If $serviceException is set, return true.\n     *\n     * @return bool\n     */\n    public function hasServiceException()\n    {\n        return (bool) $this->serviceException;\n    }\n\n    /**\n     * Return the service exception object.\n     *\n     * @return Exception|null\n     */\n    public function getServiceException()\n    {\n        return $this->serviceException;\n    }\n\n    /**\n     * Get exception metadata.\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n\n    /**\n     * Returns the metadata from the ErrorInfo part of the exception\n     *\n     * @return array\n     */\n    public function getErrorInfoMetadata()\n    {\n        // Only calc the metadata if we haven't cached it\n        if (is_null($this->errorInfoMetadata)) {\n            // For response originated from the GAPIC layer, the current exception would have\n            // an ApiException within itself\n            if ($this->getServiceException() instanceof ApiException) {\n                return $this->getServiceException()->getErrorInfoMetadata();\n            }\n\n            $errorInfo = $this->getErrorInfoFromRestException();\n\n            // Cache the result to be reused if needed\n            $this->errorInfoMetadata = $errorInfo['metadata'] ?? [];\n        }\n\n        return $this->errorInfoMetadata;\n    }\n\n    /**\n     * Returns the reason from the ErrorInfo part of the exception\n     *\n     * @return string\n     */\n    public function getReason()\n    {\n        // Only calc the errorReason if we haven't cached it\n        if (is_null($this->errorReason)) {\n            // For a response originated from the GAPIC layer, the current exception would have\n            // an ApiException within itself\n            if ($this->getServiceException() instanceof ApiException) {\n                return $this->getServiceException()->getReason();\n            }\n\n            $errorInfo = $this->getErrorInfoFromRestException();\n\n            // Cache the result to be reused if needed\n            $this->errorReason = $errorInfo['reason'] ?? '';\n        }\n\n        return $this->errorReason;\n    }\n\n    /**\n     * Return the delay in seconds and nanos before retrying the failed request.\n     *\n     * @return array\n     */\n    public function getRetryDelay()\n    {\n        $metadata = array_filter($this->metadata, function ($metadataItem) {\n            return array_key_exists('retryDelay', $metadataItem);\n        });\n\n        if (count($metadata) === 0) {\n            return ['seconds' => 0, 'nanos' => 0];\n        }\n\n        return $metadata[0]['retryDelay'] + [\n            'seconds' => 0,\n            'nanos' => 0\n        ];\n    }\n\n    /**\n     * Helper to return the error info from an exception\n     * which is not raised from the GAPIC layer\n     *\n     * @return array\n     */\n    private function getErrorInfoFromRestException()\n    {\n        // Only calc errorInfo if it isn't cached\n        if (is_null($this->errorInfo)) {\n            $this->errorInfo = [];\n            $arr = json_decode($this->getMessage(), true);\n\n            if (!isset($arr['error']['details'])) {\n                return $this->errorInfo;\n            }\n\n            foreach ($arr['error']['details'] as $row) {\n                if (isset($row['@type']) && $row['@type'] === self::ERRORINFO_TYPE_REST) {\n                    // save this in cache\n                    $this->errorInfo = $row;\n                    break;\n                }\n            }\n        }\n\n        return $this->errorInfo;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ExponentialBackoff.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Exponential backoff implementation.\n */\nclass ExponentialBackoff\n{\n    const MAX_DELAY_MICROSECONDS = 60000000;\n\n    /**\n     * @var int\n     */\n    private $retries;\n\n    /**\n     * @var callable|null\n     */\n    private $retryFunction;\n\n    /**\n     * @var callable\n     */\n    private $delayFunction;\n\n    /**\n     * @var callable|null\n     */\n    private $calcDelayFunction;\n\n    /**\n     * @var callable|null\n     */\n    private $retryListener;\n\n    /**\n     * @param int $retries [optional] Number of retries for a failed request.\n     * @param callable $retryFunction [optional] returns bool for whether or not\n     *        to retry\n     * @param callable $retryListener [optional] Runs after the\n     *        $retryFunction. Unlike the $retryFunction,this function isn't\n     *        responsible to decide if a retry should happen or not, but it gives the\n     *        users flexibility to consume exception messages and add custom logic.\n     *        Function definition should match:\n     *            function (\\Exception $e, int $attempt, array $arguments): array\n     *        Ex: One might want to change headers on every retry, this function can\n     *        be used to achieve such a functionality.\n     */\n    public function __construct(\n        $retries = null,\n        ?callable $retryFunction = null,\n        ?callable $retryListener = null\n    ) {\n        $this->retries = $retries !== null ? (int) $retries : 3;\n        $this->retryFunction = $retryFunction;\n        $this->retryListener = $retryListener;\n        // @todo revisit this approach\n        // @codeCoverageIgnoreStart\n        $this->delayFunction = static function ($delay) {\n            usleep($delay);\n        };\n        // @codeCoverageIgnoreEnd\n    }\n\n    /**\n     * Executes the retry process.\n     *\n     * @param callable $function\n     * @param array $arguments [optional]\n     * @return mixed\n     * @throws \\Exception The last exception caught while retrying.\n     */\n    public function execute(callable $function, array $arguments = [])\n    {\n        $delayFunction = $this->delayFunction;\n        $calcDelayFunction = $this->calcDelayFunction ?: [$this, 'calculateDelay'];\n        $retryAttempt = 0;\n        $exception = null;\n        while (true) {\n            try {\n                return call_user_func_array($function, $arguments);\n            } catch (\\Exception $exception) {\n                if ($this->retryFunction) {\n                    if (!call_user_func($this->retryFunction, $exception, $retryAttempt)) {\n                        throw $exception;\n                    }\n                }\n\n                if ($retryAttempt >= $this->retries) {\n                    break;\n                }\n\n                $delayFunction($calcDelayFunction($retryAttempt));\n                $retryAttempt++;\n                if ($this->retryListener) {\n                    // Developer can modify the $arguments using the retryListener\n                    // callback.\n                    call_user_func_array(\n                        $this->retryListener,\n                        [$exception, $retryAttempt, &$arguments]\n                    );\n                }\n            }\n        }\n\n        throw $exception;\n    }\n\n    /**\n     * If not set, defaults to using `usleep`.\n     *\n     * @param callable $delayFunction\n     * @return void\n     */\n    public function setDelayFunction(callable $delayFunction)\n    {\n        $this->delayFunction = $delayFunction;\n    }\n\n    /**\n     * If not set, defaults to using\n     * {@see \\Google\\Cloud\\Core\\ExponentialBackoff::calculateDelay()}.\n     *\n     * @param callable $calcDelayFunction\n     * @return void\n     */\n    public function setCalcDelayFunction(callable $calcDelayFunction)\n    {\n        $this->calcDelayFunction = $calcDelayFunction;\n    }\n\n    /**\n     * Calculates exponential delay.\n     *\n     * @param int $attempt The attempt number used to calculate the delay.\n     * @return int\n     */\n    public static function calculateDelay($attempt)\n    {\n        return min(\n            mt_rand(0, 1000000) + (pow(2, $attempt) * 1000000),\n            self::MAX_DELAY_MICROSECONDS\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/GeoPoint.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse InvalidArgumentException;\n\n/**\n * Represents a geographical point.\n *\n * Unless specified otherwise, this must conform to the\n * [WGS84](http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf) standard.\n * Values must be within normalized ranges.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\GeoPoint;\n *\n * $point = new GeoPoint(37.423147, -122.085015);\n * ```\n */\nclass GeoPoint implements \\JsonSerializable\n{\n    /**\n     * @var float\n     */\n    private $latitude;\n\n    /**\n     * @var float\n     */\n    private $longitude;\n\n    /**\n     * Create a GeoPoint.\n     *\n     * Ints will be converted to floats. Values not passing the `is_numeric()`\n     * check will result in an exception.\n     *\n     * @param float|int|null $latitude The GeoPoint Latitude. **Note** that\n     *        `null` is not a generally valid value, and will throw an\n     *        `InvalidArgumentException` unless `$allowNull` is set to `true`.\n     * @param float|int|null $longitude The GeoPoint Longitude. **Note** that\n     *        `null` is not a generally valid value, and will throw an\n     *        `InvalidArgumentException` unless `$allowNull` is set to `true`.\n     * @param bool $allowNull [optional] If true, null values will be allowed\n     *        in the constructor only. This switch exists to handle a rare case\n     *        wherein a geopoint may be empty and is not intended for use from\n     *        outside the client. **Defaults to** `false`.\n     * @throws \\InvalidArgumentException\n     */\n    public function __construct($latitude, $longitude, $allowNull = false)\n    {\n        $this->latitude = $this->validateValue($latitude, 'latitude', $allowNull);\n        $this->longitude = $this->validateValue($longitude, 'longitude', $allowNull);\n    }\n\n    /**\n     * Get the latitude\n     *\n     * Example:\n     * ```\n     * $latitude = $point->latitude();\n     * ```\n     *\n     * @return float|null\n     */\n    public function latitude()\n    {\n        $this->checkContext('latitude', func_get_args());\n        return $this->latitude;\n    }\n\n    /**\n     * Set the latitude\n     *\n     * Non-numeric values will result in an exception\n     *\n     * Example:\n     * ```\n     * $point->setLatitude(42.279594);\n     * ```\n     *\n     * @param int|float $latitude The new latitude\n     * @return GeoPoint\n     * @throws \\InvalidArgumentException\n     */\n    public function setLatitude($latitude)\n    {\n        $this->latitude = $this->validateValue($latitude, 'latitude');\n\n        return $this;\n    }\n\n    /**\n     * Get the longitude\n     *\n     * Example:\n     * ```\n     * $longitude = $point->longitude();\n     * ```\n     *\n     * @return float|null\n     */\n    public function longitude()\n    {\n        $this->checkContext('longitude', func_get_args());\n        return $this->longitude;\n    }\n\n    /**\n     * Set the longitude\n     *\n     * Non-numeric values will result in an exception.\n     *\n     * Example:\n     * ```\n     * $point->setLongitude(-83.732124);\n     * ```\n     *\n     * @param float|int $longitude The new longitude value\n     * @return GeoPoint\n     * @throws \\InvalidArgumentException\n     */\n    public function setLongitude($longitude)\n    {\n        $this->longitude = $this->validateValue($longitude, 'longitude');\n\n        return $this;\n    }\n\n    /**\n     * Return a GeoPoint\n     *\n     * Example:\n     * ```\n     * $point = $point->point();\n     * ```\n     *\n     * @return array [LatLng](https://cloud.google.com/datastore/reference/rest/Shared.Types/LatLng)\n     */\n    public function point()\n    {\n        return [\n            'latitude' => $this->latitude,\n            'longitude' => $this->longitude\n        ];\n    }\n\n    /**\n     * Let people know if they accidentally use the getter in setter context.\n     *\n     * @param string $method the method name\n     * @param array $args The method arguments\n     * @throws \\InvalidArgumentException\n     * @return void\n     */\n    private function checkContext($method, array $args)\n    {\n        if (count($args) > 0) {\n            throw new InvalidArgumentException(sprintf(\n                'Calling method %s with arguments is unsupported.',\n                $method\n            ));\n        }\n    }\n\n    /**\n     * Check a given value's validity as a coordinate.\n     *\n     * Numeric values will be cast to type `float`. All other values will raise\n     * an exception with the exception of `null`, if `$allowNull` is set to true.\n     *\n     * @param mixed $value The coordinate value.\n     * @param string $type The coordinate type for error reporting.\n     * @param bool $allowNull [optional] Whether null values should be allowed.\n     *        **Defaults to** `false`.\n     * @return float|null\n     */\n    private function validateValue($value, $type, $allowNull = false)\n    {\n        if (!is_numeric($value) && (!$allowNull || ($allowNull && $value !== null))) {\n            throw new InvalidArgumentException(sprintf(\n                'Given %s must be a numeric value.',\n                $type\n            ));\n        }\n\n        return $allowNull && $value === null\n            ? $value\n            : (float) $value;\n    }\n\n    /**\n     * Implement JsonSerializable by representing GeoPoint as a JSON-object:\n     *\n     * ```\n     * {\n     *   latitude: 31.778333\n     *   longitude: 35.229722\n     * }\n     * ```\n     *\n     * @return object\n     * @access private\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return (object) $this->point();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/GrpcRequestWrapper.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\Serializer;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Rpc\\Code;\n\n/**\n * The GrpcRequestWrapper is responsible for delivering gRPC requests.\n */\nclass GrpcRequestWrapper\n{\n    use RequestWrapperTrait;\n    use RequestProcessorTrait;\n\n    /**\n     * @var callable A handler used to deliver Psr7 requests specifically for\n     * authentication.\n     */\n    private $authHttpHandler;\n\n    /**\n     * @var Serializer A serializer used to encode responses.\n     */\n    private $serializer;\n\n    /**\n     * @var array gRPC specific configuration options passed off to the ApiCore\n     * library.\n     */\n    private $grpcOptions;\n\n    /**\n     * @var array gRPC retry codes.\n     */\n    private $grpcRetryCodes = [\n        Code::UNKNOWN,\n        Code::INTERNAL,\n        Code::UNAVAILABLE,\n        Code::DATA_LOSS\n    ];\n\n    /**\n     * @param array $config [optional] {\n     *     Configuration options. Please see\n     *     {@see \\Google\\Cloud\\Core\\RequestWrapperTrait::setCommonDefaults()} for\n     *     the other available options.\n     *\n     *     @type callable $authHttpHandler A handler used to deliver Psr7\n     *           requests specifically for authentication.\n     *     @type Serializer $serializer A serializer used to encode responses.\n     *     @type array $grpcOptions gRPC specific configuration options passed\n     *           off to the ApiCore library.\n     * }\n     */\n    public function __construct(array $config = [])\n    {\n        $this->setCommonDefaults($config);\n\n        $config += [\n            'authHttpHandler' => null,\n            'serializer' => new Serializer(),\n            'grpcOptions' => []\n        ];\n\n        $this->authHttpHandler = $config['authHttpHandler'] ?: HttpHandlerFactory::build();\n        $this->serializer = $config['serializer'];\n        $this->grpcOptions = $config['grpcOptions'];\n    }\n\n    /**\n     * Deliver the request.\n     *\n     * @param callable $request The request to execute.\n     * @param array $args The arguments for the request.\n     * @param array $options [optional] {\n     *     Request options.\n     *\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `60`.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type callable $grpcRetryFunction Sets the conditions for whether or\n     *           not a request should attempt to retry. Function signature should\n     *           match: `function (\\Exception $ex) : bool`.\n     *     @type array $grpcOptions gRPC specific configuration options.\n     * }\n     * @return array\n     * @throws Exception\\ServiceException\n     */\n    public function send(callable $request, array $args, array $options = [])\n    {\n        $retries = $options['retries'] ?? $this->retries;\n        $retryFunction = $options['grpcRetryFunction']\n            ?? function (\\Exception $ex) {\n                $statusCode = $ex->getCode();\n                return in_array($statusCode, $this->grpcRetryCodes);\n            };\n        $grpcOptions = $options['grpcOptions'] ?? $this->grpcOptions;\n        $timeout = $options['requestTimeout'] ?? $this->requestTimeout;\n        $backoff = new ExponentialBackoff($retries, $retryFunction);\n\n        if (!isset($grpcOptions['retrySettings'])) {\n            $retrySettings = [\n                'retriesEnabled' => false\n            ];\n            if ($timeout) {\n                $retrySettings['noRetriesRpcTimeoutMillis'] = $timeout * 1000;\n            }\n            $grpcOptions['retrySettings'] = $retrySettings;\n        }\n\n        $optionalArgs = &$args[count($args) - 1];\n        $optionalArgs += $grpcOptions;\n\n        try {\n            return $this->handleResponse($backoff->execute($request, $args));\n        } catch (\\Exception $ex) {\n            if ($ex instanceof ApiException) {\n                throw $this->convertToGoogleException($ex);\n            }\n\n            throw $ex;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/GrpcTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\ApiCore\\CredentialsWrapper;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse Google\\Protobuf\\NullValue;\n\n/**\n * Provides shared functionality for gRPC service implementations.\n */\ntrait GrpcTrait\n{\n    use WhitelistTrait;\n    use ArrayTrait;\n\n    /**\n     * @var GrpcRequestWrapper Wrapper used to handle sending requests to the\n     * gRPC API.\n     */\n    private $requestWrapper;\n\n    /**\n     * Sets the request wrapper.\n     *\n     * @param GrpcRequestWrapper $requestWrapper\n     */\n    public function setRequestWrapper(GrpcRequestWrapper $requestWrapper)\n    {\n        $this->requestWrapper = $requestWrapper;\n    }\n\n    /**\n     * Get the GrpcRequestWrapper.\n     *\n     * @return GrpcRequestWrapper|null\n     */\n    public function requestWrapper()\n    {\n        return $this->requestWrapper;\n    }\n\n    /**\n     * Delivers a request.\n     *\n     * @param callable $request\n     * @param array $args\n     * @param bool $whitelisted\n     * @return \\Generator|array\n     * @throws ServiceException\n     */\n    public function send(callable $request, array $args, $whitelisted = false)\n    {\n        $requestOptions = $this->pluckArray([\n            'grpcOptions',\n            'retries',\n            'requestTimeout',\n            'grpcRetryFunction'\n        ], $args[count($args) - 1]);\n\n        try {\n            return $this->requestWrapper->send($request, $args, $requestOptions);\n        } catch (NotFoundException $e) {\n            if ($whitelisted) {\n                throw $this->modifyWhitelistedError($e);\n            }\n\n            throw $e;\n        }\n    }\n\n    /**\n     * Gets the default configuration for generated clients.\n     *\n     * @param string $version\n     * @param callable|null $authHttpHandler\n     * @param string|null $universeDomain\n     * @return array\n     */\n    private function getGaxConfig(\n        $version,\n        ?callable $authHttpHandler = null,\n        ?string $universeDomain = null\n    ) {\n        $config = [\n            'libName' => 'gccl',\n            'libVersion' => $version,\n            'transport' => 'grpc'\n        ];\n\n        // GAX v0.32.0 introduced the CredentialsWrapper class and a different\n        // way to configure credentials. If the class exists, use this new method\n        // otherwise default to legacy usage.\n        if (class_exists(CredentialsWrapper::class)) {\n            $config['credentials'] = new CredentialsWrapper(\n                $this->requestWrapper->getCredentialsFetcher(),\n                $authHttpHandler,\n                // If the universe domain hasn't been explicitly set, check the the environment variable,\n                // otherwise assume GDU (\"googleapis.com\").\n                $universeDomain\n                    ?: getenv('GOOGLE_CLOUD_UNIVERSE_DOMAIN')\n                    ?: GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN\n            );\n        } else {\n            $config += [\n                'credentialsLoader' => $this->requestWrapper->getCredentialsFetcher(),\n                'authHttpHandler' => $authHttpHandler,\n                'enableCaching' => false\n            ];\n        }\n\n        return $config;\n    }\n\n    use TimeTrait;\n\n    /**\n     * Format a struct for the API.\n     *\n     * @param array $fields\n     * @return array\n     */\n    private function formatStructForApi(array $fields)\n    {\n        $fFields = [];\n\n        foreach ($fields as $key => $value) {\n            $fFields[$key] = $this->formatValueForApi($value);\n        }\n\n        return ['fields' => $fFields];\n    }\n\n    private function unpackStructFromApi(array $struct)\n    {\n        $vals = [];\n        foreach ($struct['fields'] as $key => $val) {\n            $vals[$key] = $this->unpackValue($val);\n        }\n        return $vals;\n    }\n\n    private function unpackValue($value)\n    {\n        if (count($value) > 1) {\n            throw new \\RuntimeException(\"Unexpected fields in struct: $value\");\n        }\n\n        foreach ($value as $setField => $setValue) {\n            switch ($setField) {\n                case 'listValue':\n                    $valueList = [];\n                    foreach ($setValue['values'] as $innerValue) {\n                        $valueList[] = $this->unpackValue($innerValue);\n                    }\n                    return $valueList;\n                case 'structValue':\n                    return $this->unpackStructFromApi($value['structValue']);\n                default:\n                    return $setValue;\n            }\n        }\n    }\n\n    private function flattenStruct(array $struct)\n    {\n        return $struct['fields'];\n    }\n\n    private function flattenValue(array $value)\n    {\n        if (count($value) > 1) {\n            throw new \\RuntimeException(\"Unexpected fields in struct: $value\");\n        }\n\n        if (isset($value['nullValue'])) {\n            return null;\n        }\n\n        return array_pop($value);\n    }\n\n    private function flattenListValue(array $value)\n    {\n        return $value['values'];\n    }\n\n    /**\n     * Format a list for the API.\n     *\n     * @param array $list\n     * @return array\n     */\n    private function formatListForApi(array $list)\n    {\n        $values = [];\n\n        foreach ($list as $value) {\n            $values[] = $this->formatValueForApi($value);\n        }\n\n        return ['values' => $values];\n    }\n\n    /**\n     * Format a value for the API.\n     *\n     * @param mixed $value\n     * @return array\n     */\n    private function formatValueForApi($value)\n    {\n        $type = gettype($value);\n\n        switch ($type) {\n            case 'string':\n                return ['string_value' => $value];\n            case 'double':\n            case 'integer':\n                return ['number_value' => $value];\n            case 'boolean':\n                return ['bool_value' => $value];\n            case 'NULL':\n                return ['null_value' => NullValue::NULL_VALUE];\n            case 'array':\n                if (!empty($value) && $this->isAssoc($value)) {\n                    return ['struct_value' => $this->formatStructForApi($value)];\n                }\n\n                return ['list_value' => $this->formatListForApi($value)];\n        }\n\n        return [];\n    }\n\n    /**\n     * Format a gRPC timestamp to match the format returned by the REST API.\n     *\n     * @param array $timestamp\n     * @return string\n     */\n    private function formatTimestampFromApi(array $timestamp)\n    {\n        $timestamp += [\n            'seconds' => 0,\n            'nanos' => 0\n        ];\n\n        $dt = $this->createDateTimeFromSeconds($timestamp['seconds']);\n\n        return $this->formatTimeAsString($dt, $timestamp['nanos']);\n    }\n\n    /**\n     * Format a timestamp for the API with nanosecond precision.\n     *\n     * @param string $value\n     * @return array\n     */\n    private function formatTimestampForApi($value)\n    {\n        list($dt, $nanos) = $this->parseTimeString($value);\n\n        return [\n            'seconds' => (int) $dt->format('U'),\n            'nanos' => (int) $nanos\n        ];\n    }\n\n    /**\n     * Format a duration for the API.\n     *\n     * @param string|mixed $value\n     * @return array\n     */\n    private function formatDurationForApi($value)\n    {\n        if (is_string($value)) {\n            $d = explode('.', trim($value, 's'));\n            if (count($d) < 2) {\n                $seconds = $d[0];\n                $nanos = 0;\n            } else {\n                $seconds = (int) $d[0];\n                $nanos = $this->convertFractionToNanoSeconds($d[1]);\n            }\n        } elseif ($value instanceof Duration) {\n            $d = $value->get();\n            $seconds = $d['seconds'];\n            $nanos = $d['nanos'];\n        }\n\n        return [\n            'seconds' => $seconds,\n            'nanos' => $nanos\n        ];\n    }\n\n    /**\n     * Format a duration from the API\n     *\n     * @param array $value\n     * @return string\n     */\n    private function formatDurationFromApi($value): string\n    {\n        $seconds = $value['seconds'];\n        $nanos = str_pad($value['nanos'], 9, 0, STR_PAD_LEFT);\n\n        return \"{$seconds}.{$nanos}s\";\n    }\n\n    /**\n     * Construct a gapic client. Allows for tests to intercept.\n     *\n     * @param string $gapicName\n     * @param array $config\n     * @return mixed\n     */\n    protected function constructGapic($gapicName, array $config)\n    {\n        return new $gapicName($config);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iam/Iam.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iam;\n\n/**\n * IAM Manager\n *\n * This class is not meant to be used directly. It should be accessed\n * through other objects which support IAM.\n *\n * Policies can be created using the {@see \\Google\\Cloud\\Core\\Iam\\PolicyBuilder}\n * to help ensure their validity.\n *\n * Example:\n * ```\n * // IAM policies are obtained via resources which implement IAM.\n * // In this example, we'll use PubSub topics to demonstrate\n * // how IAM policies are managed.\n *\n * use Google\\Cloud\\Spanner\\SpannerClient;\n *\n * $spanner = new SpannerClient(['projectId' => 'my-project']);\n * $instance = $spanner->instance('my-new-instance');\n *\n * $iam = $instance->iam();\n * ```\n */\nclass Iam\n{\n    /**\n     * @var IamConnectionInterface\n     */\n    private $connection;\n\n    /**\n     * @var string\n     */\n    private $resource;\n\n    /**\n     * @var array\n     */\n    private $policy;\n\n    /**\n     * @var array\n     */\n    private $args;\n\n    /**\n     * @var array\n     */\n    private $options;\n\n    /**\n     * @param IamConnectionInterface $connection\n     * @param string $resource\n     * @param array $options [optional] {\n     *     Configuration Options\n     *\n     *     @type string|null $parent The parent request parameter for the policy.\n     *           If set, policy data will be sent as `request.{$parent}`.\n     *           Otherwise, policy will be sent in request root. **Defaults to**\n     *           `policy`.\n     *     @type array $args Arbitrary data to be sent with the request.\n     * }\n     * @access private\n     */\n    public function __construct(IamConnectionInterface $connection, $resource, array $options = [])\n    {\n        $options += [\n            'parent' => 'policy',\n            'args' => []\n        ];\n\n        $this->connection = $connection;\n        $this->resource = $resource;\n        $this->options = $options;\n    }\n\n    /**\n     * Get the existing IAM policy for this resource.\n     *\n     * If a policy has already been retrieved from the API, it will be returned.\n     * To fetch a fresh copy of the policy, use\n     * {@see \\Google\\Cloud\\Core\\Iam\\Iam::reload()}.\n     *\n     * Example:\n     * ```\n     * $policy = $iam->policy();\n     * ```\n     *\n     * @param  array $options Configuration Options\n     * @param  int   $options['requestedPolicyVersion'] Specify the policy version to\n     *     request from the server. Please see\n     *     [policy versioning](https://cloud.google.com/iam/docs/policies#versions)\n     *     for more information.\n     * @return array An array of policy data\n     */\n    public function policy(array $options = [])\n    {\n        if (!$this->policy) {\n            $this->reload($options);\n        }\n\n        return $this->policy;\n    }\n\n    /**\n     * Set the IAM policy for this resource.\n     *\n     * Bindings with invalid roles, or non-existent members will raise a server\n     * error.\n     *\n     * Example:\n     * ```\n     * $oldPolicy = $iam->policy();\n     * $oldPolicy['bindings'][0]['members'] = 'user:test@example.com';\n     *\n     * $policy = $iam->setPolicy($oldPolicy);\n     * ```\n     *\n     * @param  array|PolicyBuilder $policy The new policy, as an array or an\n     *         instance of {@see \\Google\\Cloud\\Core\\Iam\\PolicyBuilder}.\n     * @param  array $options Configuration Options\n     * @return array An array of policy data\n     * @throws \\InvalidArgumentException If the given policy is not an array or PolicyBuilder.\n     */\n    public function setPolicy($policy, array $options = [])\n    {\n        if ($policy instanceof PolicyBuilder) {\n            $policy = $policy->result();\n        }\n\n        if (!is_array($policy)) {\n            throw new \\InvalidArgumentException('Given policy data must be an array or an instance of PolicyBuilder.');\n        }\n\n        $request = [];\n        if ($this->options['parent']) {\n            $parent = $this->options['parent'];\n            $request[$parent] = $policy;\n        } else {\n            $request = $policy;\n        }\n\n        return $this->policy = $this->connection->setPolicy([\n            'resource' => $this->resource\n        ] + $request + $options + $this->options['args']);\n    }\n\n    /**\n     * Test if the current user has the given permissions on this resource.\n     *\n     * Invalid permissions will raise a BadRequestException.\n     *\n     * Example:\n     * ```\n     * $allowedPermissions = $iam->testPermissions([\n     *     'pubsub.topics.publish',\n     *     'pubsub.topics.attachSubscription'\n     * ]);\n     * ```\n     *\n     * @param  array $permissions A list of permissions to test\n     * @param  array $options Configuration Options\n     * @return array A subset of $permissions, with only those allowed included.\n     */\n    public function testPermissions(array $permissions, array $options = [])\n    {\n        $res = $this->connection->testPermissions([\n            'permissions' => $permissions,\n            'resource' => $this->resource\n        ] + $options + $this->options['args']);\n\n        return (isset($res['permissions'])) ? $res['permissions'] : [];\n    }\n\n    /**\n     * Refresh the IAM policy for this resource.\n     *\n     * Example:\n     * ```\n     * $policy = $iam->reload();\n     * ```\n     *\n     * @param  array $options Configuration Options\n     * @return array An array of policy data\n     */\n    public function reload(array $options = [])\n    {\n        return $this->policy = $this->connection->getPolicy([\n            'resource' => $this->resource\n        ] + $options + $this->options['args']);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iam/IamConnectionInterface.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iam;\n\n/**\n * An interface defining how wrappers interact with their IAM implementations.\n *\n * Some services, such as PubSub, have multiple entities in their API which each\n * support IAM for access control. Since we use a single implementation for all\n * service interaction with a service, IamConnectionInterface is used to proxy\n * requests to the correct method on the service connection.\n *\n * By delegating control of the request to each service, we can reliably offer a\n * single entry point for dealing with IAM in a standard way.\n */\ninterface IamConnectionInterface\n{\n    /**\n     * @param  array $args\n     */\n    public function getPolicy(array $args);\n\n    /**\n     * @param  array $args\n     */\n    public function setPolicy(array $args);\n\n    /**\n     * @param  array $args\n     */\n    public function testPermissions(array $args);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iam/IamManager.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iam;\n\nuse Google\\ApiCore\\Serializer;\nuse Google\\Cloud\\Core\\ArrayTrait;\nuse Google\\Cloud\\Core\\RequestHandler;\nuse Google\\Cloud\\Iam\\V1\\GetIamPolicyRequest;\nuse Google\\Cloud\\Iam\\V1\\GetPolicyOptions;\nuse Google\\Cloud\\Iam\\V1\\Policy;\nuse Google\\Cloud\\Iam\\V1\\SetIamPolicyRequest;\nuse Google\\Cloud\\Iam\\V1\\TestIamPermissionsRequest;\nuse InvalidArgumentException;\n\n/**\n * IAM Manager\n *\n * This class is not meant to be used directly. It should be accessed\n * through other objects which support IAM.\n *\n * Policies can be created using the {@see PolicyBuilder}\n * to help ensure their validity.\n *\n * Example:\n * ```\n * // IAM policies are obtained via resources which implement IAM.\n * // In this example, we'll use PubSub topics to demonstrate\n * // how IAM policies are managed.\n *\n * use Google\\Cloud\\PubSub\\PubSubClient;\n *\n * $pubsub = new PubSubClient();\n * $topic = $pubsub->topic('my-new-topic');\n *\n * $iam = $topic->iam();\n * ```\n *\n * @internal\n */\nclass IamManager\n{\n    use ArrayTrait;\n\n    private RequestHandler $requestHandler;\n    private Serializer $serializer;\n    private string $clientClass;\n    private string $resource;\n    private ?array $policy;\n\n    /**\n     * @param RequestHandler $requestHandler\n     * @param Serializer $serializer The serializer instance to encode/decode messages.\n     * @param string $clientClass The client class that will be passed on to the\n     * sendRequest method of the $requestHandler.\n     * @param string $resource\n     * @access private\n     */\n    public function __construct(\n        RequestHandler $requestHandler,\n        Serializer $serializer,\n        string $clientClass,\n        string $resource\n    ) {\n        $this->requestHandler = $requestHandler;\n        $this->serializer = $serializer;\n        $this->clientClass = $clientClass;\n        $this->resource = $resource;\n        $this->policy = null;\n    }\n\n    /**\n     * Get the existing IAM policy for this resource.\n     *\n     * If a policy has already been retrieved from the API, it will be returned.\n     * To fetch a fresh copy of the policy, use\n     * {@see IamManager::reload()}.\n     *\n     * Example:\n     * ```\n     * $policy = $iam->policy();\n     * ```\n     *\n     * @param  array $options Configuration Options\n     * @param  int   $options['requestedPolicyVersion'] Specify the policy version to\n     *     request from the server. Please see\n     *     [policy versioning](https://cloud.google.com/iam/docs/policies#versions)\n     *     for more information.\n     * @return array An array of policy data\n     */\n    public function policy(array $options = [])\n    {\n        if (!$this->policy) {\n            $this->reload($options);\n        }\n\n        return $this->policy;\n    }\n\n    /**\n     * Set the IAM policy for this resource.\n     *\n     * Bindings with invalid roles, or non-existent members will raise a server\n     * error.\n     *\n     * Example:\n     * ```\n     * $policy = [\n     *      'bindings' => [[\n     *          'role' => 'roles/editor',\n     *          'members' => ['user:test@example.com'],\n     *      ]]\n     * ];\n     * $policy = $iam->setPolicy($policy);\n     * ```\n     * ```\n     * $oldPolicy = $iam->policy();\n     * $oldPolicy['bindings'][0]['members'] = 'user:test@example.com';\n     *\n     * $policy = $iam->setPolicy($oldPolicy);\n     * ```\n     *\n     * @param  array|PolicyBuilder $policy The new policy, as an array or an\n     *         instance of {@see PolicyBuilder}.\n     * @param  array $options Configuration Options\n     * @return array An array of policy data\n     * @throws InvalidArgumentException If the given policy is not an array or PolicyBuilder.\n     */\n    public function setPolicy($policy, array $options = [])\n    {\n        if ($policy instanceof PolicyBuilder) {\n            $policy = $policy->result();\n        }\n\n        if (!is_array($policy)) {\n            throw new InvalidArgumentException('Given policy data must be an array or an instance of PolicyBuilder.');\n        }\n\n        $policy = $this->serializer->decodeMessage(\n            new Policy(),\n            $policy\n        );\n\n        $updateMask = $options['updateMask'] ?? [];\n\n        $data = ['resource' => $this->resource, 'policy' => $policy, 'updateMask' => $updateMask];\n        $request = $this->serializer->decodeMessage(new SetIamPolicyRequest(), $data);\n\n        $this->policy = $this->requestHandler->sendRequest(\n            $this->clientClass,\n            'setIamPolicy',\n            $request,\n            $options\n        );\n\n        return $this->policy;\n    }\n\n    /**\n     * Test if the current user has the given permissions on this resource.\n     *\n     * Invalid permissions will raise a BadRequestException.\n     *\n     * Example:\n     * ```\n     * $allowedPermissions = $iam->testPermissions([\n     *     'pubsub.topics.publish',\n     *     'pubsub.topics.attachSubscription'\n     * ]);\n     * ```\n     *\n     * @param  array $permissions A list of permissions to test\n     * @param  array $options Configuration Options\n     * @return array A subset of $permissions, with only those allowed included.\n     */\n    public function testPermissions(array $permissions, array $options = [])\n    {\n        $data = ['resource' => $this->resource, 'permissions' => $permissions];\n        $request = $this->serializer->decodeMessage(new TestIamPermissionsRequest(), $data);\n        $res = $this->requestHandler->sendRequest(\n            $this->clientClass,\n            'testIamPermissions',\n            $request,\n            $options\n        );\n\n        return isset($res['permissions']) ? $res['permissions'] : [];\n    }\n\n    /**\n     * Refresh the IAM policy for this resource.\n     *\n     * Example:\n     * ```\n     * $policy = $iam->reload();\n     * ```\n     *\n     * @param  array $options Configuration Options\n     * @return array An array of policy data\n     */\n    public function reload(array $options = [])\n    {\n        $policyOptions = $this->pluck('policyOptions', $options, false) ?: [];\n        $policyOptions = $this->serializer->decodeMessage(new GetPolicyOptions(), $policyOptions);\n        $data = ['resource' => $this->resource, 'options' => $policyOptions];\n        $request = $this->serializer->decodeMessage(new GetIamPolicyRequest(), $data);\n\n        $this->policy = $this->requestHandler->sendRequest(\n            $this->clientClass,\n            'getIamPolicy',\n            $request,\n            $options\n        );\n\n        return $this->policy;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iam/PolicyBuilder.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iam;\n\nuse BadMethodCallException;\nuse InvalidArgumentException;\n\n/**\n * Helper class for creating valid IAM policies\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\Iam\\PolicyBuilder;\n *\n * $builder = new PolicyBuilder();\n * $builder->addBinding('roles/admin', [ 'user:admin@domain.com' ]);\n * $result = $builder->result();\n * ```\n */\nclass PolicyBuilder\n{\n    /**\n     * @var array\n     */\n    private $bindings;\n\n    /**\n     * @var string\n     */\n    private $etag;\n\n    /**\n     * @var int\n     */\n    private $version;\n\n    /**\n     * Create a PolicyBuilder.\n     *\n     * To use conditions in the bindings, the version of the policy must be set\n     * to 3.\n     *\n     * @see https://cloud.google.com/iam/docs/policies#versions Policy versioning\n     * @see https://cloud-dot-devsite.googleplex.com/storage/docs/access-control/using-iam-permissions#conditions-iam\n     *   Using Cloud IAM Conditions on buckets\n     *\n     * Example:\n     * ```\n     * $policy = [\n     *     'etag' => 'AgIc==',\n     *     'version' => 3,\n     *     'bindings' => [\n     *         [\n     *             'role' => 'roles/admin',\n     *             'members' => [\n     *                 'user:admin@domain.com',\n     *                 'user2:admin@domain.com'\n     *             ],\n     *             'condition' => [\n     *                 'title' => 'match-prefix',\n     *                 'description' => 'Applies to objects matching a prefix',\n     *                 'expression' =>\n     *                     'resource.name.startsWith(\"projects/_/buckets/bucket-name/objects/prefix-a-\")'\n     *             ]\n     *         ]\n     *     ],\n     * ];\n     *\n     * $builder = new PolicyBuilder($policy);\n     * ```\n     *\n     * @param  array $policy A policy array\n     * @throws \\InvalidArgumentException\n     */\n    public function __construct(array $policy = [])\n    {\n        if (isset($policy['bindings'])) {\n            $this->setBindings($policy['bindings']);\n        } elseif (!empty($policy)) {\n            throw new InvalidArgumentException('Invalid Policy');\n        }\n\n        if (isset($policy['etag'])) {\n            $this->setEtag($policy['etag']);\n        }\n\n        if (isset($policy['version'])) {\n            $this->setVersion($policy['version']);\n        }\n    }\n\n    /**\n     * Override all stored bindings on the policy.\n     *\n     * Example:\n     * ```\n     * $builder->setBindings([\n     *     [\n     *         'role' => 'roles/admin',\n     *         'members' => [\n     *             'user:admin@domain.com'\n     *         ],\n     *         'condition' => [\n     *             'expression' =>\n     *                 'request.time < timestamp(\"2020-07-01T00:00:00.000Z\")'\n     *         ]\n     *     ]\n     * ]);\n     * ```\n     *\n     * @param  array $bindings [optional] An array of bindings\n     * @return PolicyBuilder\n     * @throws \\InvalidArgumentException\n     */\n    public function setBindings(array $bindings = [])\n    {\n        $this->bindings = $bindings;\n        return $this;\n    }\n\n    /**\n     * Add a new binding to the policy.\n     *\n     * This method will fail with an InvalidOpereationException if it is\n     * called on a Policy with a version greater than 1 as that indicates\n     * a more complicated policy than this method is prepared to handle.\n     * Changes to such policies must be made manually by the setBindings()\n     * method.\n     *\n     *\n     * Example:\n     * ```\n     * $builder->addBinding('roles/admin', [ 'user:admin@domain.com' ]);\n     * ```\n     *\n     * @param  string $role A valid role for the service\n     * @param  array  $members An array of members to assign to the binding\n     * @return PolicyBuilder\n     * @throws \\InvalidArgumentException\n     * @throws BadMethodCallException if the policy's version is greater than 1.\n     * @deprecated\n     */\n    public function addBinding($role, array $members)\n    {\n        $this->validatePolicyVersion();\n\n        $this->bindings[] = [\n            'role' => $role,\n            'members' => $members\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Remove a binding from the policy.\n     *\n     * This method will fail with a BadMethodCallException if it is\n     * called on a Policy with a version greater than 1 as that indicates\n     * a more complicated policy than this method is prepared to handle.\n     * Changes to such policies must be made manually by the setBindings()\n     * method.\n     *\n     * Example:\n     * ```\n     * $builder->setBindings([\n     *     [\n     *         'role' => 'roles/admin',\n     *         'members' => [\n     *             'user:admin@domain.com',\n     *             'user2:admin@domain.com'\n     *         ]\n     *     ]\n     * ]);\n     * $builder->removeBinding('roles/admin', [ 'user:admin@domain.com' ]);\n     * ```\n     *\n     * @param  string $role A valid role for the service\n     * @param  array  $members An array of members to remove from the role\n     * @return PolicyBuilder\n     * @throws \\InvalidArgumentException\n     * @throws BadMethodCallException if the policy's version is greater than 1.\n     * @deprecated\n     */\n    public function removeBinding($role, array $members)\n    {\n        $this->validatePolicyVersion();\n\n        $bindings = $this->bindings;\n        foreach ((array) $bindings as $i => $binding) {\n            if ($binding['role'] == $role) {\n                $newMembers = array_diff($binding['members'], $members);\n                if (count($newMembers) != count($binding['members']) - count($members)) {\n                    throw new InvalidArgumentException('One or more role-members were not found.');\n                }\n                if (empty($newMembers)) {\n                    unset($bindings[$i]);\n                    $bindings = array_values($bindings);\n                } else {\n                    $binding['members'] = array_values($newMembers);\n                    $bindings[$i] = $binding;\n                }\n                $this->bindings = $bindings;\n\n                return $this;\n            }\n        }\n\n        throw new InvalidArgumentException('The role was not found.');\n    }\n\n    /**\n     * Update the etag on the policy.\n     *\n     * Example:\n     * ```\n     * $builder->setEtag($oldPolicy['etag']);\n     * ```\n     *\n     * @param  string $etag used for optimistic concurrency control as a way to help prevent simultaneous updates of a\n     *         policy from overwriting each other. It is strongly suggested that updates to existing policies make use\n     *         of the etag to avoid race conditions.\n     * @return PolicyBuilder\n     */\n    public function setEtag($etag)\n    {\n        $this->etag = $etag;\n\n        return $this;\n    }\n\n    /**\n     * Update the version of the policy.\n     *\n     * Example:\n     * ```\n     * $builder->setVersion(1);\n     * ```\n     *\n     * @param  int $version Version of the Policy. **Defaults to** `0`.\n     * @return PolicyBuilder\n     */\n    public function setVersion($version)\n    {\n        $this->version = $version;\n\n        return $this;\n    }\n\n    /**\n     * Create a policy array with data in the correct format.\n     *\n     * Example:\n     * ```\n     * $policy = $builder->result();\n     * ```\n     *\n     * @return array An array of policy data\n     */\n    public function result()\n    {\n        return array_filter([\n            'etag' => $this->etag,\n            'bindings' => $this->bindings,\n            'version' => $this->version\n        ]);\n    }\n\n    private function validatePolicyVersion()\n    {\n        if (isset($this->version) && $this->version > 1) {\n            throw new BadMethodCallException('Helper methods cannot be ' .\n                \"invoked on policies with version {$this->version}.\");\n        }\n\n        $this->validateConditions();\n    }\n\n    private function validateConditions()\n    {\n        if (!$this->bindings) {\n            return;\n        }\n\n        foreach ($this->bindings as $binding) {\n            if (isset($binding['condition'])) {\n                throw new BadMethodCallException('Helper methods cannot ' .\n                    'be invoked on policies containing conditions.');\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/InsecureCredentialsWrapper.php",
    "content": "<?php\n\n/**\n * Copyright 2022 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\ApiCore\\InsecureCredentialsWrapper as ApiCoreInsecureCredentialsWrapper;\n\n/**\n * For connect to emulator.\n *\n * This class is deprecated. Use Google\\ApiCore\\InsecureCredentialsWrapper instead.\n * @deprecated\n */\nclass InsecureCredentialsWrapper extends ApiCoreInsecureCredentialsWrapper\n{\n    public function __construct()\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Int64.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Represents a 64 bit integer. This can be useful when working on a 32 bit\n * platform.\n *\n * Example:\n * ```\n * $int64 = new Int64('9223372036854775807');\n * ```\n */\nclass Int64 implements \\JsonSerializable\n{\n    /**\n     * @var string\n     */\n    private $value;\n\n    /**\n     * @param string $value The 64 bit integer value in string format.\n     */\n    public function __construct($value)\n    {\n        $this->value = $value;\n    }\n\n    /**\n     * Get the value.\n     *\n     * Example:\n     * ```\n     * $value = $int64->get();\n     * ```\n     *\n     * @return string\n     */\n    public function get()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Provides a convenient way to access the value.\n     *\n     * @access private\n     */\n    public function __toString()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Implement JsonSerializable by returning the 64 bit integer as a string\n     *\n     * @return string\n     * @access private\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return $this->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iterator/ItemIterator.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iterator;\n\n/**\n * Iterates over a set of items.\n *\n * @template T\n * @implements \\Iterator<int, T>\n */\nclass ItemIterator implements \\Iterator\n{\n    use ItemIteratorTrait;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iterator/ItemIteratorTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iterator;\n\n/**\n * This trait fulfills the\n * [\\Iterator](http://php.net/manual/en/class.iterator.php) interface and\n * returns results from a paged set one at a time.\n */\ntrait ItemIteratorTrait\n{\n    /**\n     * @var \\Iterator\n     */\n    private $pageIterator;\n\n    /**\n     * @var int\n     */\n    private $pageIndex = 0;\n\n    /**\n     * @var int\n     */\n    private $position = 0;\n\n    /**\n     * @param \\Iterator $pageIterator\n     */\n    public function __construct(\\Iterator $pageIterator)\n    {\n        $this->pageIterator = $pageIterator;\n    }\n\n    /**\n     * Fetch the token used to get the next set of results.\n     *\n     * @return string|null\n     */\n    public function nextResultToken()\n    {\n        return method_exists($this->pageIterator, 'nextResultToken')\n            ? $this->pageIterator->nextResultToken()\n            : null;\n    }\n\n    /**\n     * Iterate over the results on a per page basis.\n     *\n     * @return \\Iterator\n     */\n    public function iterateByPage()\n    {\n        return $this->pageIterator;\n    }\n\n    /**\n     * Rewind the iterator.\n     *\n     * @return null\n     */\n    #[\\ReturnTypeWillChange]\n    public function rewind()\n    {\n        $this->pageIndex = 0;\n        $this->position = 0;\n        $this->pageIterator->rewind();\n    }\n\n    /**\n     * Get the current item.\n     *\n     * @return mixed\n     */\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        $page = $this->pageIterator->current();\n\n        return isset($page[$this->pageIndex])\n            ? $page[$this->pageIndex]\n            : null;\n    }\n\n    /**\n     * Get the key current item's key.\n     *\n     * @return int\n     */\n    #[\\ReturnTypeWillChange]\n    public function key()\n    {\n        return $this->position;\n    }\n\n    /**\n     * Advances to the next item.\n     *\n     * @return null\n     */\n    #[\\ReturnTypeWillChange]\n    public function next()\n    {\n        $this->pageIndex++;\n        $this->position++;\n\n        if (count($this->pageIterator->current()) <= $this->pageIndex && $this->nextResultToken()) {\n            $this->pageIterator->next();\n            $this->pageIndex = 0;\n        }\n    }\n\n    /**\n     * Determines if the current position is valid.\n     *\n     * @return bool\n     */\n    #[\\ReturnTypeWillChange]\n    public function valid()\n    {\n        $page = $this->pageIterator->current();\n\n        if (isset($page[$this->pageIndex])) {\n            return true;\n        }\n\n        // If there are no results, but a token for the next page\n        // exists let's continue paging until there are results.\n        while ($this->nextResultToken()) {\n            $this->pageIterator->next();\n            $page = $this->pageIterator->current();\n\n            if (isset($page[$this->pageIndex])) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iterator/PageIterator.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iterator;\n\n/**\n * Iterates over a set of pages.\n */\nclass PageIterator implements \\Iterator\n{\n    use PageIteratorTrait;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Iterator/PageIteratorTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Iterator;\n\nuse Google\\Cloud\\Core\\ArrayTrait;\n\n/**\n * This trait fulfills the\n * [\\Iterator](http://php.net/manual/en/class.iterator.php) interface and\n * returns results as a page of items.\n */\ntrait PageIteratorTrait\n{\n    use ArrayTrait;\n\n    /**\n     * @var array|null\n     */\n    private $page;\n\n    /**\n     * @var callable\n     */\n    private $resultMapper;\n\n    /**\n     * @var callable\n     */\n    private $call;\n\n    /**\n     * @var array\n     */\n    private $callOptions;\n\n    /**\n     * @var array\n     */\n    private $config;\n\n    /**\n     * @var int\n     */\n    private $position = 0;\n\n    /**\n     * @var int\n     */\n    private $itemCount = 0;\n\n    /**\n     * @var array\n     */\n    private $resultTokenPath;\n\n    /**\n     * @var array\n     */\n    private $nextResultTokenPath;\n\n    /**\n     * @var array\n     */\n    private $itemsPath;\n\n    /**\n     * @var string|null\n     */\n    private $initialResultToken;\n\n    /**\n     * @param callable $resultMapper Maps a result.\n     * @param callable $call The call to execute.\n     * @param array $callOptions Options to use with the call.\n     * @param array $config [optional] {\n     *     Configuration options.\n     *\n     *     @type string $itemsKey The key for the items to iterate over from the\n     *           response. **Defaults to** `\"items\"`.\n     *     @type string $nextResultTokenKey The key for the next result token in\n     *           the response. **Defaults to** `\"nextPageToken\"`.\n     *     @type string $resultTokenKey The key for the results token set in the\n     *           request. **Defaults too** `\"pageToken\"`.\n     *     @type array $firstPage The first page of results. If set, this data\n     *           will be used for the first page of results instead of making\n     *           a network request.\n     *     @type callable $setNextResultTokenCondition If this condition passes\n     *           then it should be considered safe to set the token to get the\n     *           next set of results.\n     *     @type int $resultLimit Limit the number of results returned in total.\n     *           **Defaults to** `0` (return all results).\n     * }\n     */\n    public function __construct(\n        callable $resultMapper,\n        callable $call,\n        array $callOptions,\n        array $config = []\n    ) {\n        $this->resultMapper = $resultMapper;\n        $this->call = $call;\n        $this->config = $config + [\n            'itemsKey' => 'items',\n            'nextResultTokenKey' => 'nextPageToken',\n            'resultTokenKey' => 'pageToken',\n            'firstPage' => null,\n            'resultLimit' => 0,\n            'setNextResultTokenCondition' => function () {\n                return true;\n            }\n        ];\n        $this->callOptions = $callOptions;\n        $this->resultTokenPath = explode('.', $this->config['resultTokenKey']);\n        $this->nextResultTokenPath = explode('.', $this->config['nextResultTokenKey']);\n        $this->itemsPath = explode('.', $this->config['itemsKey']);\n        $this->initialResultToken = $this->nextResultToken();\n    }\n\n    /**\n     * Fetch the token used to get the next set of results.\n     *\n     * @return string|null\n     */\n    public function nextResultToken()\n    {\n        return $this->get($this->resultTokenPath, $this->callOptions);\n    }\n\n    /**\n     * Rewind the iterator.\n     *\n     * @return null\n     */\n    #[\\ReturnTypeWillChange]\n    public function rewind()\n    {\n        $this->itemCount = 0;\n        $this->position = 0;\n\n        if ($this->config['firstPage']) {\n            list($this->page, $shouldContinue) = $this->mapResults($this->config['firstPage']);\n            $nextResultToken = $this->determineNextResultToken($this->page, $shouldContinue);\n        } else {\n            $this->page = null;\n            $nextResultToken = $this->initialResultToken;\n        }\n\n        if ($nextResultToken) {\n            $this->set($this->resultTokenPath, $this->callOptions, $nextResultToken);\n        }\n    }\n\n    /**\n     * Get the current page.\n     *\n     * @return array|null\n     */\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        if ($this->page === null) {\n            $this->page = $this->executeCall();\n        }\n\n        $page = $this->get($this->itemsPath, $this->page);\n\n        if ($this->nextResultToken()) {\n            return $page ?: [];\n        }\n\n        return $page;\n    }\n\n    /**\n     * Get the key current page's key.\n     *\n     * @return int\n     */\n    #[\\ReturnTypeWillChange]\n    public function key()\n    {\n        return $this->position;\n    }\n\n    /**\n     * Advances to the next page.\n     *\n     * @return null\n     */\n    #[\\ReturnTypeWillChange]\n    public function next()\n    {\n        $this->position++;\n        $this->page = $this->nextResultToken()\n            ? $this->executeCall()\n            : null;\n    }\n\n    /**\n     * Determines if the current position is valid.\n     *\n     * @return bool\n     */\n    #[\\ReturnTypeWillChange]\n    public function valid()\n    {\n        if (!$this->page && $this->position) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Executes the provided call to get a set of results.\n     *\n     * @return array\n     */\n    private function executeCall()\n    {\n        $call = $this->call;\n        list($results, $shouldContinue) = $this->mapResults(\n            $call($this->callOptions)\n        );\n\n        $this->set(\n            $this->resultTokenPath,\n            $this->callOptions,\n            $this->determineNextResultToken($results, $shouldContinue)\n        );\n\n        return $results;\n    }\n\n    /**\n     * @param array $results\n     * @return array\n     */\n    private function mapResults(array $results)\n    {\n        $items = $this->get($this->itemsPath, $results);\n        $resultMapper = $this->resultMapper;\n        $shouldContinue = true;\n\n        if ($items) {\n            foreach ($items as $key => $item) {\n                $items[$key] = $resultMapper($item);\n                $this->itemCount++;\n\n                if ($this->config['resultLimit'] && $this->config['resultLimit'] <= $this->itemCount) {\n                    $items = array_slice($items, 0, $key + 1);\n                    $shouldContinue = false;\n                    break;\n                }\n            }\n\n            $this->set($this->itemsPath, $results, $items);\n        }\n\n        return [$results, $shouldContinue];\n    }\n\n    /**\n     * @param array $results\n     * @param bool $shouldContinue\n     * @return null\n     */\n    private function determineNextResultToken(array $results, $shouldContinue = true)\n    {\n        return $shouldContinue && $this->config['setNextResultTokenCondition']($results)\n            ? $this->get($this->nextResultTokenPath, $results)\n            : null;\n    }\n\n    /**\n     * @param array $path\n     * @param array $array\n     * @return mixed\n     */\n    private function get(array $path, array $array)\n    {\n        $result = $array;\n\n        foreach ($path as $key) {\n            if (!isset($result[$key])) {\n                return null;\n            }\n\n            $result = $result[$key];\n        }\n\n        return $result;\n    }\n\n    /**\n     * @param array $path\n     * @param array $array\n     * @param mixed $value\n     * @return null\n     */\n    private function set(array $path, array &$array, $value)\n    {\n        $temp = &$array;\n\n        foreach ($path as $key) {\n            $temp = &$temp[$key];\n        }\n\n        $temp = $value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/JsonTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Provides wrappers for json_encode/json_decode that throw exceptions when an\n * error is encountered.\n */\ntrait JsonTrait\n{\n    /**\n     * @param string $json The json string being decoded.\n     * @param bool $assoc When true, returned objects will be converted into\n     *        associative arrays.\n     * @param int $depth User specified recursion depth.\n     * @param int $options Bitmask of JSON decode options.\n     * @return mixed\n     * @throws \\InvalidArgumentException\n     */\n    private static function jsonDecode($json, $assoc = false, $depth = 512, $options = 0)\n    {\n        $data = json_decode($json, $assoc, $depth, $options);\n\n        if (JSON_ERROR_NONE !== json_last_error()) {\n            throw new \\InvalidArgumentException(\n                'json_decode error: ' . json_last_error_msg()\n            );\n        }\n\n        return $data;\n    }\n\n    /**\n     * @param mixed $value The value being encoded. Can be any type except a\n     *        resource.\n     * @param int $options Bitmask of JSON encode options.\n     * @param int $depth Set the maximum depth. Must be greater than zero.\n     * @return string\n     * @throws \\InvalidArgumentException\n     */\n    private static function jsonEncode($value, $options = 0, $depth = 512)\n    {\n        $json = json_encode($value, $options, $depth);\n\n        if (JSON_ERROR_NONE !== json_last_error()) {\n            throw new \\InvalidArgumentException(\n                'json_encode error: ' . json_last_error_msg()\n            );\n        }\n\n        return $json;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Lock/FlockLock.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Lock;\n\n/**\n * Flock based lock implementation.\n *\n * @see http://php.net/manual/en/function.flock.php\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass FlockLock implements LockInterface\n{\n    use LockTrait;\n\n    const FILE_PATH_TEMPLATE = '%s/%s.lock';\n\n    /**\n     * @var string\n     */\n    private $filePath;\n\n    /**\n     * @var resource|null\n     */\n    private $handle;\n\n    /**\n     * @var bool If true, we should acquire an exclusive lock.\n     */\n    private $exclusive;\n\n    /**\n     * @param string $fileName The name of the file to use as a lock.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $exclusive If true, acquire an excluse (write) lock. If\n     *           false, acquire a shared (read) lock. **Defaults to** true.\n     * }\n     * @throws \\InvalidArgumentException If an invalid fileName is provided.\n     */\n    public function __construct($fileName, array $options = [])\n    {\n        if (!is_string($fileName)) {\n            throw new \\InvalidArgumentException('$fileName must be a string.');\n        }\n\n        $options += [\n            'exclusive' => true\n        ];\n        $this->exclusive = $options['exclusive'];\n\n        $this->filePath = sprintf(\n            self::FILE_PATH_TEMPLATE,\n            sys_get_temp_dir(),\n            $fileName\n        );\n    }\n\n    /**\n     * Acquires a lock that will block until released.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return bool\n     * @throws \\RuntimeException If the lock fails to be acquired.\n     */\n    public function acquire(array $options = [])\n    {\n        if ($this->handle) {\n            return true;\n        }\n\n        $this->handle = $this->initializeHandle();\n\n        if (!flock($this->handle, $this->lockType($options))) {\n            fclose($this->handle);\n            $this->handle = null;\n\n            throw new \\RuntimeException('Failed to acquire lock.');\n        }\n\n        return true;\n    }\n\n    /**\n     * Releases the lock.\n     *\n     * @throws \\RuntimeException If the lock fails to release.\n     */\n    public function release()\n    {\n        if ($this->handle) {\n            $released = flock($this->handle, LOCK_UN);\n            fclose($this->handle);\n            $this->handle = null;\n\n            if (!$released) {\n                throw new \\RuntimeException('Failed to release lock.');\n            }\n        }\n    }\n\n    /**\n     * Initializes the handle.\n     *\n     * @return resource\n     * @throws \\RuntimeException If the lock file fails to open.\n     */\n    private function initializeHandle()\n    {\n        $handle = @fopen($this->filePath, 'c');\n\n        if (!$handle) {\n            throw new \\RuntimeException('Failed to open lock file.');\n        }\n\n        return $handle;\n    }\n\n    private function lockType(array $options)\n    {\n        $options += [\n            'blocking' => true\n        ];\n        $lockType = $this->exclusive ? LOCK_EX : LOCK_SH;\n        if (!$options['blocking']) {\n            $lockType |= LOCK_UN;\n        }\n        return $lockType;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Lock/LockInterface.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Lock;\n\n/**\n * Contract for a basic locking mechanism.\n */\ninterface LockInterface\n{\n    /**\n     * Acquires a lock.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return bool\n     * @throws \\RuntimeException If the lock fails to be acquired.\n     */\n    public function acquire(array $options = []);\n\n    /**\n     * Releases the lock.\n     *\n     * @throws \\RuntimeException\n     */\n    public function release();\n\n    /**\n     * Execute a callable within a lock.\n     *\n     * @param callable $func The callable to execute.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return mixed\n     */\n    public function synchronize(callable $func, array $options = []);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Lock/LockTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Lock;\n\n/**\n * Utility trait for locks.\n */\ntrait LockTrait\n{\n    /**\n     * Acquires a lock that will block until released.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return bool\n     * @throws \\RuntimeException If the lock fails to be acquired.\n     */\n    abstract public function acquire(array $options = []);\n\n    /**\n     * Releases the lock.\n     *\n     * @throws \\RuntimeException\n     */\n    abstract public function release();\n\n    /**\n     * Execute a callable within a lock. If an exception is caught during\n     * execution of the callable the lock will first be released before throwing\n     * it.\n     *\n     * @param callable $func The callable to execute.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return mixed\n     */\n    public function synchronize(callable $func, array $options = [])\n    {\n        $result = null;\n        $exception = null;\n\n        if ($this->acquire($options)) {\n            try {\n                $result = $func();\n            } catch (\\Exception $ex) {\n                $exception = $ex;\n            }\n            $this->release();\n        }\n\n        if ($exception) {\n            throw $exception;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Lock/SemaphoreLock.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Lock;\n\nuse Google\\Cloud\\Core\\SysvTrait;\n\n/**\n * Semaphore based lock implementation.\n *\n * @see http://php.net/manual/en/book.sem.php\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass SemaphoreLock implements LockInterface\n{\n    use LockTrait;\n    use SysvTrait;\n\n    /**\n     * @var int\n     */\n    private $key;\n\n    /**\n     * @var resource|null\n     */\n    private $semaphoreId;\n\n    /**\n     * @param int $key A key.\n     * @throws \\InvalidArgumentException If an invalid key is provided.\n     * @throws \\RuntimeException If the System V IPC extensions are missing.\n     */\n    public function __construct($key)\n    {\n        if (!$this->isSysvIPCLoaded()) {\n            throw new \\RuntimeException('SystemV IPC extensions are required.');\n        }\n\n        if (!is_int($key)) {\n            throw new \\InvalidArgumentException('The provided key must be an integer.');\n        }\n\n        $this->key = $key;\n    }\n\n    /**\n     * Acquires a lock that will block until released.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return bool\n     * @throws \\RuntimeException If the lock fails to be acquired.\n     */\n    public function acquire(array $options = [])\n    {\n        $options += [\n            'blocking' => true\n        ];\n\n        if ($this->semaphoreId) {\n            return true;\n        }\n\n        $this->semaphoreId = $this->initializeId();\n\n        if (!sem_acquire($this->semaphoreId, !$options['blocking'])) {\n            $this->semaphoreId = null;\n\n            throw new \\RuntimeException('Failed to acquire lock.');\n        }\n\n        return true;\n    }\n\n    /**\n     * Releases the lock.\n     *\n     * @throws \\RuntimeException If the lock fails to release.\n     */\n    public function release()\n    {\n        if ($this->semaphoreId) {\n            $released = sem_release($this->semaphoreId);\n            $this->semaphoreId = null;\n\n            if (!$released) {\n                throw new \\RuntimeException('Failed to release lock.');\n            }\n        }\n    }\n\n    /**\n     * Initializes the semaphore ID.\n     *\n     * @return resource\n     * @throws \\RuntimeException If semaphore ID fails to generate.\n     */\n    private function initializeId()\n    {\n        $semaphoreId = sem_get($this->key);\n\n        if (!$semaphoreId) {\n            throw new \\RuntimeException('Failed to generate semaphore ID.');\n        }\n\n        return $semaphoreId;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Lock/SymfonyLockAdapter.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Lock;\n\nuse Symfony\\Component\\Lock\\LockInterface as SymfonyLockInterface;\n\n/**\n * Symfony lock component adapter.\n * @deprecated\n */\nclass SymfonyLockAdapter implements LockInterface\n{\n    use LockTrait;\n\n    /**\n     * @var SymfonyLockInterface\n     */\n    private $lock;\n\n    /**\n     * @param SymfonyLockInterface $lock\n     */\n    public function __construct(SymfonyLockInterface $lock)\n    {\n        $this->lock = $lock;\n    }\n\n    /**\n     * Acquires a lock that will block until released.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type bool $blocking Whether the process should block while waiting\n     *           to acquire the lock. **Defaults to** true.\n     * }\n     * @return bool\n     * @throws \\RuntimeException If the lock fails to be acquired.\n     */\n    public function acquire(array $options = [])\n    {\n        $options += [\n            'blocking' => true\n        ];\n\n        try {\n            return $this->lock->acquire($options['blocking']);\n        } catch (\\Exception $ex) {\n            throw new \\RuntimeException(\n                sprintf(\n                    'Acquiring the lock failed with the following message: %s',\n                    $ex->getMessage()\n                ),\n                0,\n                $ex\n            );\n        }\n    }\n\n    /**\n     * Releases the lock.\n     *\n     * @throws \\RuntimeException\n     */\n    public function release()\n    {\n        try {\n            $this->lock->release();\n        } catch (\\Exception $ex) {\n            throw new \\RuntimeException(\n                sprintf(\n                    'Releasing the lock failed with the following message: %s',\n                    $ex->getMessage()\n                ),\n                0,\n                $ex\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexFormatter.php",
    "content": "<?php\n/*\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\Formatter\\LineFormatter;\n\n/**\n * Monolog 1.x formatter for formatting logs on App Engine flexible environment.\n *\n * If you are using Monolog 2.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexFormatterV2} instead.\n * If you are using Monolog 3.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexFormatterV3} instead.\n */\nclass AppEngineFlexFormatter extends LineFormatter\n{\n    use FormatterTrait;\n\n    /**\n     * @param string $format [optional] The format of the message\n     * @param string $dateFormat [optional] The format of the timestamp\n     * @param bool $ignoreEmptyContextAndExtra [optional]\n     */\n    public function __construct($format = null, $dateFormat = null, $ignoreEmptyContextAndExtra = false)\n    {\n        parent::__construct($format, $dateFormat, true, $ignoreEmptyContextAndExtra);\n    }\n\n    /**\n     * Get the plain text message with LineFormatter's format method and add\n     * metadata including the trace id then return the json string.\n     *\n     * @param array $record A record to format\n     * @return string The formatted record\n     */\n    public function format(array $record)\n    {\n        return $this->formatPayload($record, parent::format($record));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexFormatterV2.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\Formatter\\LineFormatter;\n\n/**\n * Monolog 2.x formatter for formatting logs on App Engine flexible environment.\n *\n * If you are using Monolog 1.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexFormatter} instead.\n * If you are using Monolog 3.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexFormatterV3} instead.\n */\nclass AppEngineFlexFormatterV2 extends LineFormatter\n{\n    use FormatterTrait;\n\n    /**\n     * @param string $format [optional] The format of the message\n     * @param string $dateFormat [optional] The format of the timestamp\n     * @param bool $ignoreEmptyContextAndExtra [optional]\n     */\n    public function __construct($format = null, $dateFormat = null, $ignoreEmptyContextAndExtra = false)\n    {\n        parent::__construct($format, $dateFormat, true, $ignoreEmptyContextAndExtra);\n    }\n\n    /**\n     * Get the plain text message with LineFormatter's format method and add\n     * metadata including the trace id then return the json string.\n     *\n     * @param array $record A record to format\n     * @return string The formatted record\n     */\n    public function format(array $record): string\n    {\n        return $this->formatPayload($record, parent::format($record));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexFormatterV3.php",
    "content": "<?php\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\LogRecord;\n\n/**\n * Monolog 3.x formatter for formatting logs on App Engine flexible environment.\n *\n * If you are using Monolog 1.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexFormatter} instead.\n * If you are using Monolog 2.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexFormatterV2} instead.\n */\nclass AppEngineFlexFormatterV3 extends LineFormatter\n{\n    use FormatterTrait;\n\n    /**\n     * @param string $format [optional] The format of the message\n     * @param string $dateFormat [optional] The format of the timestamp\n     * @param bool $ignoreEmptyContextAndExtra [optional]\n     */\n    public function __construct($format = null, $dateFormat = null, $ignoreEmptyContextAndExtra = false)\n    {\n        parent::__construct($format, $dateFormat, true, $ignoreEmptyContextAndExtra);\n    }\n\n    /**\n     * Get the plain text message with LineFormatter's format method and add\n     * metadata including the trace id then return the json string.\n     *\n     * @param LogRecord $record A record to format\n     * @return string The formatted record\n     */\n    public function format(LogRecord $record): string\n    {\n        return $this->formatPayload($record, parent::format($record));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexHandler.php",
    "content": "<?php\n/*\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Logger;\n\n/**\n * Monolog 1.x handler for logging on App Engine flexible environment.\n *\n * If you are using Monolog 2.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexHandlerV2} instead.\n * If you are using Monolog 3.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexHandlerV3} instead.\n * @internal\n */\nclass AppEngineFlexHandler extends StreamHandler\n{\n    /**\n     * @param int $level [optional] The minimum logging level at which this\n     *        handler will be triggered.\n     * @param Boolean $bubble [optional] Whether the messages that are handled\n     *        can bubble up the stack or not.\n     * @param int|null $filePermission [optional] Optional file permissions\n     *        (default (0640) are only for owner read/write).\n     * @param Boolean $useLocking [optional] Try to lock log file before doing\n     *        any writes.\n     * @param resource|string|null $stream [optional]\n     */\n    public function __construct(\n        $level = Logger::INFO,\n        $bubble = true,\n        $filePermission = 0640,\n        $useLocking = false,\n        $stream = null\n    ) {\n        if ($stream === null) {\n            $pid = getmypid();\n            $stream = \"file:///var/log/app_engine/app.$pid.json\";\n        }\n        parent::__construct(\n            $stream,\n            $level,\n            $bubble,\n            $filePermission,\n            $useLocking\n        );\n    }\n\n    /**\n     * Get the default formatter.\n     *\n     * @return FormatterInterface\n     */\n    protected function getDefaultFormatter()\n    {\n        return new AppEngineFlexFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexHandlerFactory.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Exception;\nuse Monolog\\Logger;\n\n/**\n * Factory to build out an AppEngineFlexHandler for the installed version of Monolog.\n */\nclass AppEngineFlexHandlerFactory\n{\n    /**\n     * Builds out an AppEngineFlexHandler for the installed version of Monolog.\n     *\n     * @param int $level [optional] The minimum logging level at which this\n     *        handler will be triggered.\n     * @param Boolean $bubble [optional] Whether the messages that are handled\n     *        can bubble up the stack or not.\n     * @param int|null $filePermission [optional] Optional file permissions\n     *        (default (0640) are only for owner read/write).\n     * @param Boolean $useLocking [optional] Try to lock log file before doing\n     *        any writes.\n     * @param resource|string|null $stream [optional]\n     *\n     * @throws Exception\n     *\n     * @return AppEngineFlexHandler|AppEngineFlexHandlerV2|AppEngineFlexHandlerV3\n     */\n    public static function build(\n        $level = Logger::INFO,\n        $bubble = true,\n        $filePermission = 0640,\n        $useLocking = false,\n        $stream = null\n    ) {\n        $version = defined('Monolog\\Logger::API') ? Logger::API : 1;\n\n        switch ($version) {\n            case 1:\n                return new AppEngineFlexHandler($level, $bubble, $filePermission, $useLocking, $stream);\n            case 2:\n                return new AppEngineFlexHandlerV2($level, $bubble, $filePermission, $useLocking, $stream);\n            case 3:\n                return new AppEngineFlexHandlerV3($level, $bubble, $filePermission, $useLocking, $stream);\n            default:\n                throw new Exception('Version not supported');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexHandlerV2.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Logger;\n\n/**\n * Monolog 2.x handler for logging on App Engine flexible environment.\n *\n * If you are using Monolog 1.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexHandler} instead.\n * If you are using Monolog 3.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexHandlerV3} instead.\n * @internal\n */\nclass AppEngineFlexHandlerV2 extends StreamHandler\n{\n    /**\n     * @param int $level [optional] The minimum logging level at which this\n     *        handler will be triggered.\n     * @param Boolean $bubble [optional] Whether the messages that are handled\n     *        can bubble up the stack or not.\n     * @param int|null $filePermission [optional] Optional file permissions\n     *        (default (0640) are only for owner read/write).\n     * @param Boolean $useLocking [optional] Try to lock log file before doing\n     *        any writes.\n     * @param resource|string|null $stream [optional]\n     */\n    public function __construct(\n        $level = Logger::INFO,\n        $bubble = true,\n        $filePermission = 0640,\n        $useLocking = false,\n        $stream = null\n    ) {\n        if ($stream === null) {\n            $pid = getmypid();\n            $stream = \"file:///var/log/app_engine/app.$pid.json\";\n        }\n        parent::__construct(\n            $stream,\n            $level,\n            $bubble,\n            $filePermission,\n            $useLocking\n        );\n    }\n\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new AppEngineFlexFormatterV2();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/AppEngineFlexHandlerV3.php",
    "content": "<?php\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Logger;\n\n/**\n * Monolog 3.x handler for logging on App Engine flexible environment.\n *\n * If you are using Monolog 1.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexHandler} instead.\n * If you are using Monolog 2.x, use {@see \\Google\\Cloud\\Core\\Logger\\AppEngineFlexHandlerV2} instead.\n * @internal\n */\nclass AppEngineFlexHandlerV3 extends StreamHandler\n{\n    /**\n     * @param int $level [optional] The minimum logging level at which this\n     *        handler will be triggered.\n     * @param Boolean $bubble [optional] Whether the messages that are handled\n     *        can bubble up the stack or not.\n     * @param int|null $filePermission [optional] Optional file permissions\n     *        (default (0640) are only for owner read/write).\n     * @param Boolean $useLocking [optional] Try to lock log file before doing\n     *        any writes.\n     * @param resource|string|null $stream [optional]\n     */\n    public function __construct(\n        $level = Logger::INFO,\n        $bubble = true,\n        $filePermission = 0640,\n        $useLocking = false,\n        $stream = null\n    ) {\n        if ($stream === null) {\n            $pid = getmypid();\n            $stream = \"file:///var/log/app_engine/app.$pid.json\";\n        }\n        parent::__construct(\n            $stream,\n            $level,\n            $bubble,\n            $filePermission,\n            $useLocking\n        );\n    }\n\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new AppEngineFlexFormatterV3();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Logger/FormatterTrait.php",
    "content": "<?php\n/*\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core\\Logger;\n\nuse Monolog\\LogRecord;\n\n/**\n * Shared trait to enrich and format a record with\n * App Engine Flex specific information.\n */\ntrait FormatterTrait\n{\n    /**\n     * @param array|LogRecord $record\n     * @param string $message\n     * @return string\n     */\n    protected function formatPayload($record, $message)\n    {\n        if ($record instanceof LogRecord) {\n            $record = $record->toArray();\n        }\n\n        list($usec, $sec) = explode(' ', microtime());\n        $usec = (int) (((float) $usec) * 1000000000);\n        $sec = (int) $sec;\n\n        $payload = [\n            'message' => $message,\n            'timestamp' => ['seconds' => $sec, 'nanos' => $usec],\n            'thread' => '',\n            'severity' => $record['level_name'],\n        ];\n\n        if (isset($_SERVER['HTTP_X_CLOUD_TRACE_CONTEXT'])) {\n            $payload['traceId'] = explode(\n                '/',\n                $_SERVER['HTTP_X_CLOUD_TRACE_CONTEXT']\n            )[0];\n        }\n\n        return \"\\n\" . json_encode($payload);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/LongRunning/LROTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\LongRunning;\n\nuse Google\\Cloud\\Core\\Iterator\\ItemIterator;\nuse Google\\Cloud\\Core\\Iterator\\PageIterator;\n\n/**\n * Provide Long Running Operation support to Google Cloud PHP Clients.\n *\n * This trait should be used by a user-facing client which implements LRO.\n */\ntrait LROTrait\n{\n    /**\n     * @var LongRunningConnectionInterface\n     * @internal\n     */\n    private $lroConnection;\n\n    /**\n     * @var array\n     */\n    private $lroCallables;\n\n    /**\n     * @var string\n     */\n    private $lroResource;\n\n    /**\n     * Populate required LRO properties.\n     *\n     * @param LongRunningConnectionInterface $lroConnection The LRO Connection.\n     *        This object is created by internal classes,\n     *        and should not be instantiated outside of this context.\n     * @param array $callablesMap An collection of form [(string) typeUrl, (callable) callable]\n     *        providing a function to invoke when an operation completes. The\n     *        callable Type should correspond to an expected value of\n     *        operation.metadata.typeUrl.\n     * @param string $lroResource [optional] The resource for which operations\n     *        may be listed.\n     */\n    private function setLroProperties(\n        LongRunningConnectionInterface $lroConnection,\n        array $lroCallables,\n        $resource = null\n    ) {\n        $this->lroConnection = $lroConnection;\n        $this->lroCallables = $lroCallables;\n        $this->lroResource = $resource;\n    }\n\n    /**\n     * Resume a Long Running Operation\n     *\n     * @param string $operationName The Long Running Operation name.\n     * @param array $info [optional] The operation data.\n     * @return LongRunningOperation\n     */\n    public function resumeOperation($operationName, array $info = [])\n    {\n        return new LongRunningOperation(\n            $this->lroConnection,\n            $operationName,\n            $this->lroCallables,\n            $info\n        );\n    }\n\n    /**\n     * List long running operations.\n     *\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $name The name of the operation collection.\n     *     @type string $filter The standard list filter.\n     *     @type int $pageSize Maximum number of results to return per\n     *           request.\n     *     @type int $resultLimit Limit the number of results returned in total.\n     *           **Defaults to** `0` (return all results).\n     *     @type string $pageToken A previously-returned page token used to\n     *           resume the loading of results from a specific point.\n     * }\n     * @return ItemIterator<LongRunningOperation>\n     */\n    public function longRunningOperations(array $options = [])\n    {\n        if (is_null($this->lroResource)) {\n            throw new \\BadMethodCallException('This service does list support listing operations.');\n        }\n\n        $resultLimit = $this->pluck('resultLimit', $options, false) ?: 0;\n\n        $options['name'] = $this->lroResource . '/operations';\n\n        return new ItemIterator(\n            new PageIterator(\n                function (array $operation) {\n                    return $this->resumeOperation($operation['name'], $operation);\n                },\n                [$this->lroConnection, 'operations'],\n                $options,\n                [\n                    'itemsKey' => 'operations',\n                    'resultLimit' => $resultLimit\n                ]\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/LongRunning/LongRunningClientConnection.php",
    "content": "<?php\n/**\n * Copyright 2025 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\LongRunning;\n\nuse Google\\ApiCore\\OperationResponse;\nuse Google\\ApiCore\\Serializer;\nuse Google\\Cloud\\Core\\RequestProcessorTrait;\nuse Google\\LongRunning\\ListOperationsRequest;\nuse Google\\Protobuf\\Any;\n\n/**\n * Defines the calls required to manage Long Running Operations using a GAPIC\n * generated client.\n *\n * @internal\n */\nclass LongRunningClientConnection implements LongRunningConnectionInterface\n{\n    use RequestProcessorTrait;\n\n    public function __construct(\n        private object $gapicClient,\n        private Serializer $serializer\n    ) {\n    }\n\n    /**\n     * @param array $args\n     * @return array\n     */\n    public function get(array $args): array\n    {\n        $operationResponse = $this->gapicClient->resumeOperation($args['name']);\n\n        return $this->operationResponseToArray($operationResponse);\n    }\n\n    /**\n     * @param array $args\n     * @return array\n     */\n    public function cancel(array $args): array\n    {\n        $operationResponse = $this->gapicClient->resumeOperation(\n            $args['name'],\n            $args['method'] ?? null\n        );\n        $operationResponse->cancel();\n\n        return $this->operationResponseToArray($operationResponse);\n    }\n\n    /**\n     * @param array $args\n     * @return array\n     */\n    public function delete(array $args): array\n    {\n        $operationResponse = $this->gapicClient->resumeOperation(\n            $args['name'],\n            $args['method'] ?? null\n        );\n        $operationResponse->cancel();\n\n        return $this->operationResponseToArray($operationResponse);\n    }\n\n    /**\n     * @param array $args\n     * @return array\n     */\n    public function operations(array $args): array\n    {\n        $request = ListOperationsRequest::build($args['name'], $args['filter'] ?? null);\n        $response = $this->gapicClient->getOperationsClient()->listOperations($request);\n\n        return $this->handleResponse($response);\n    }\n\n    private function operationResponseToArray(OperationResponse $operationResponse): array\n    {\n        $response = $this->handleResponse($operationResponse->getLastProtoResponse());\n        $metaType = $response['metadata']['typeUrl'];\n\n        // unpack result Any type\n        $result = $operationResponse->getResult();\n        if ($result instanceof Any) {\n            // For some reason we aren't doing this in GAX OperationResponse (but we should)\n            $result = $result->unpack();\n        }\n        $response['response'] = $this->handleResponse($result);\n\n        // unpack error Any type\n        $response['error'] = $this->handleResponse($operationResponse->getError());\n\n        $metadata = $operationResponse->getMetadata();\n        if ($metadata instanceof Any) {\n            // For some reason we aren't doing this in GAX OperationResponse (but we should)\n            $metadata = $metadata->unpack();\n        }\n        $response['metadata'] = $this->handleResponse($metadata);\n\n        // Used in LongRunningOperation to invoke callables\n        $response['metadata'] += ['typeUrl' => $metaType];\n\n        return $response;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/LongRunning/LongRunningConnectionInterface.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\LongRunning;\n\n/**\n * Defines the calls required to manage Long Running Operations.\n *\n * This interface should be implemented in a service's Connection namespace.\n * @internal\n */\ninterface LongRunningConnectionInterface\n{\n    /**\n     * @param array $args\n     */\n    public function get(array $args);\n\n    /**\n     * @param array $args\n     */\n    public function cancel(array $args);\n\n    /**\n     * @param array $args\n     */\n    public function delete(array $args);\n\n    /**\n     * @param array $args\n     */\n    public function operations(array $args);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/LongRunning/LongRunningOperation.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\LongRunning;\n\n/**\n * Represent and interact with a Long Running Operation.\n * @template T\n */\nclass LongRunningOperation\n{\n    const WAIT_INTERVAL = 1.0;\n\n    const STATE_IN_PROGRESS = 'inProgress';\n    const STATE_SUCCESS = 'success';\n    const STATE_ERROR = 'error';\n\n    /**\n     * @var LongRunningConnectionInterface\n     * @internal\n     */\n    private $connection;\n\n    /**\n     * @var string\n     */\n    private $name;\n\n    /**\n     * @var array\n     */\n    private $info = [];\n\n    /**\n     * @var array|null\n     */\n    private $result;\n\n    /**\n     * @var array|null\n     */\n    private $error;\n\n    /**\n     * @var array\n     */\n    private $callablesMap;\n\n    /**\n     * @param LongRunningConnectionInterface $connection An implementation\n     *        mapping to methods which handle LRO resolution in the service.\n     *        This object is created by internal classes,\n     *        and should not be instantiated outside of this context.\n     * @param string $name The Operation name.\n     * @param array $callablesMap An collection of form [(string) typeUrl, (callable) callable]\n     *        providing a function to invoke when an operation completes. The\n     *        callable Type should correspond to an expected value of\n     *        operation.metadata.typeUrl.\n     * @param array $info [optional] The operation info.\n     */\n    public function __construct(\n        LongRunningConnectionInterface $connection,\n        $name,\n        array $callablesMap,\n        array $info = []\n    ) {\n        $this->connection = $connection;\n        $this->name = $name;\n        $this->callablesMap = $callablesMap;\n        $this->info = $info;\n    }\n\n    /**\n     * Return the Operation name.\n     *\n     * Example:\n     * ```\n     * $name = $operation->name();\n     * ```\n     *\n     * @return string\n     */\n    public function name()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Check if the Operation is done.\n     *\n     * If the Operation state is not available, a service request may be executed\n     * by this method.\n     *\n     * Example:\n     * ```\n     * if ($operation->done()) {\n     *     echo \"The operation is done!\";\n     * }\n     * ```\n     *\n     * @param array $options [optional] Configuration options.\n     * @return bool\n     */\n    public function done(array $options = [])\n    {\n        return (isset($this->info($options)['done']))\n            ? $this->info['done']\n            : false;\n    }\n\n    /**\n     * Get the state of the Operation.\n     *\n     * Return value will be one of `LongRunningOperation::STATE_IN_PROGRESS`,\n     * `LongRunningOperation::STATE_SUCCESS` or\n     * `LongRunningOperation::STATE_ERROR`.\n     *\n     * If the Operation state is not available, a service request may be executed\n     * by this method.\n     *\n     * Example:\n     * ```\n     * switch ($operation->state()) {\n     *     case LongRunningOperation::STATE_IN_PROGRESS:\n     *         echo \"Operation is in progress\";\n     *         break;\n     *\n     *     case LongRunningOperation::STATE_SUCCESS:\n     *         echo \"Operation succeeded\";\n     *         break;\n     *\n     *     case LongRunningOperation::STATE_ERROR:\n     *         echo \"Operation failed\";\n     *         break;\n     * }\n     * ```\n     *\n     * @param array $options [optional] Configuration options.\n     * @return string\n     */\n    public function state(array $options = [])\n    {\n        if (!$this->done($options)) {\n            return self::STATE_IN_PROGRESS;\n        }\n\n        if ($this->done() && $this->result()) {\n            return self::STATE_SUCCESS;\n        }\n\n        return self::STATE_ERROR;\n    }\n\n    /**\n     * Get the Operation result.\n     *\n     * The return type of this method is dictated by the type of Operation.\n     *\n     * Returns null if the Operation is not yet complete, or if an error occurred.\n     *\n     * If the Operation state is not available, a service request may be executed\n     * by this method.\n     *\n     * Example:\n     * ```\n     * $result = $operation->result();\n     * ```\n     *\n     * @param array $options [optional] Configuration options.\n     * @return T|mixed|null\n     */\n    public function result(array $options = [])\n    {\n        $this->info($options);\n        return $this->result;\n    }\n\n    /**\n     * Get the Operation error.\n     *\n     * Returns null if the Operation is not yet complete, or if no error occurred.\n     *\n     * If the Operation state is not available, a service request may be executed\n     * by this method.\n     *\n     * Example:\n     * ```\n     * $error = $operation->error();\n     * ```\n     *\n     * @param array $options [optional] Configuration options.\n     * @return array|null\n     */\n    public function error(array $options = [])\n    {\n        $this->info($options);\n        return $this->error;\n    }\n\n    /**\n     * Get the Operation info.\n     *\n     * If the Operation state is not available, a service request may be executed\n     * by this method.\n     *\n     * Example:\n     * ```\n     * $info = $operation->info();\n     * ```\n     *\n     * @codingStandardsIgnoreStart\n     * @param array $options [optional] Configuration options.\n     * @return array [google.longrunning.Operation](https://cloud.google.com/spanner/docs/reference/rpc/google.longrunning#google.longrunning.Operation)\n     * @codingStandardsIgnoreEnd\n     */\n    public function info(array $options = [])\n    {\n        return $this->info ?: $this->reload($options);\n    }\n\n    /**\n     * Reload the Operation to check its status.\n     *\n     * Example:\n     * ```\n     * $result = $operation->reload();\n     * ```\n     *\n     * @codingStandardsIgnoreStart\n     * @param array $options [optional] Configuration Options.\n     * @return array [google.longrunning.Operation](https://cloud.google.com/spanner/docs/reference/rpc/google.longrunning#google.longrunning.Operation)\n     * @codingStandardsIgnoreEnd\n     */\n    public function reload(array $options = [])\n    {\n        $res = $this->connection->get([\n            'name' => $this->name,\n        ] + $options);\n\n        $this->result = null;\n        $this->error = null;\n\n        if ($res['done'] ?? false && isset($res['metadata']['typeUrl'])) {\n            $type = $res['metadata']['typeUrl'];\n            $this->result = $this->executeDoneCallback($type, $res['response']);\n            $this->error = $res['error'] ?? null;\n        }\n\n        return $this->info = $res;\n    }\n\n    /**\n     * Reload the operation until it is complete.\n     *\n     * The return type of this method is dictated by the type of Operation. If\n     * `$options.maxPollingDurationSeconds` is set, and the poll exceeds the\n     * limit, the return will be `null`.\n     *\n     * Example:\n     * ```\n     * $result = $operation->pollUntilComplete();\n     * ```\n     *\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type float $pollingIntervalSeconds The polling interval to use, in\n     *           seconds. **Defaults to** `1.0`.\n     *     @type float $maxPollingDurationSeconds The maximum amount of time to\n     *           continue polling. **Defaults to** `0.0`.\n     * }\n     * @return mixed|null\n     */\n    public function pollUntilComplete(array $options = [])\n    {\n        $options += [\n            'pollingIntervalSeconds' => $this::WAIT_INTERVAL,\n            'maxPollingDurationSeconds' => 0.0,\n        ];\n\n        $pollingIntervalMicros = $options['pollingIntervalSeconds'] * 1000000;\n        $maxPollingDuration = $options['maxPollingDurationSeconds'];\n        $hasMaxPollingDuration = $maxPollingDuration > 0.0;\n        $endTime = microtime(true) + $maxPollingDuration;\n\n        do {\n            usleep($pollingIntervalMicros);\n            $this->reload($options);\n        } while (!$this->done() && (!$hasMaxPollingDuration || microtime(true) < $endTime));\n\n        return $this->result;\n    }\n\n    /**\n     * Cancel a Long Running Operation.\n     *\n     * Example:\n     * ```\n     * $operation->cancel();\n     * ```\n     *\n     * @param array $options Configuration options.\n     * @return void\n     */\n    public function cancel(array $options = [])\n    {\n        $this->connection->cancel([\n            'name' => $this->name\n        ]);\n    }\n\n    /**\n     * Delete a Long Running Operation.\n     *\n     * Example:\n     * ```\n     * $operation->delete();\n     * ```\n     *\n     * @param array $options Configuration Options.\n     * @return void\n     */\n    public function delete(array $options = [])\n    {\n        $this->connection->delete([\n            'name' => $this->name\n        ]);\n    }\n\n    /**\n     * When the Operation is complete, there may be a callback enqueued to\n     * handle the response. If so, execute it and return the result.\n     *\n     * @param string $type The response type.\n     * @param mixed $response The response data.\n     * @return mixed\n     */\n    private function executeDoneCallback($type, $response)\n    {\n        if (is_null($response)) {\n            return null;\n        }\n\n        $callables = array_filter($this->callablesMap, function ($callable) use ($type) {\n            return $callable['typeUrl'] === $type;\n        });\n\n        if (count($callables) === 0) {\n            return $response;\n        }\n\n        $callable = current($callables);\n        $fn = $callable['callable'];\n\n        return call_user_func($fn, $response);\n    }\n\n    /**\n     * @access private\n     */\n    public function __debugInfo()\n    {\n        return [\n            'connection' => get_class($this->connection),\n            'name' => $this->name,\n            'callablesMap' => array_keys($this->callablesMap),\n            'info' => $this->info\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/LongRunning/OperationResponseTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\LongRunning;\n\nuse Google\\ApiCore\\OperationResponse;\nuse Google\\ApiCore\\Serializer;\nuse Google\\GAX\\OperationResponse as GaxOperationResponse;\n\n/**\n * Serializes and deserializes ApiCore LRO Response objects.\n *\n * This trait should be used in a gRPC Connection class to normalize responses.\n */\ntrait OperationResponseTrait\n{\n    /**\n     * Convert a ApiCore OperationResponse object to an array.\n     *\n     * @param OperationResponse|GaxOperationResponse $operation The operation response\n     * @param Serializer|GaxSerializer $serializer The serializer to use for gRPC serialization/deserialization.\n     * @param array $lroMappers A list of mappers for deserializing operation results.\n     * @return array\n     */\n    private function operationToArray($operation, $serializer, array $lroMappers)\n    {\n        $response = $operation->getLastProtoResponse();\n        if (is_null($response)) {\n            return null;\n        }\n\n        $response = $serializer->encodeMessage($response);\n\n        $result = null;\n        if ($operation->isDone() && isset($response['response']['typeUrl'])) {\n            $type = $response['response']['typeUrl'];\n            $result = $this->deserializeResult($operation, $type, $serializer, $lroMappers);\n        }\n\n        $metaType = $response['metadata']['typeUrl'];\n        $metaResult = $this->deserializeMetadata($operation, $metaType, $serializer, $lroMappers);\n        /** @see LongRunningOperation#reload() */\n        $metaResult += ['typeUrl' => $metaType];\n\n        $error = $operation->getError();\n        if (!is_null($error)) {\n            $error = $serializer->encodeMessage($error);\n        }\n\n        $response['response'] = $result;\n        $response['metadata'] = $metaResult;\n        $response['error'] = $error;\n\n        return $response;\n    }\n\n    /**\n     * Fetch an OperationResponse object from a gapic client.\n     *\n     * @param mixed $client A generated client with a `resumeOperation` method.\n     * @param string $name The Operation name.\n     * @param string|null $method The method name.\n     * @return OperationResponse\n     */\n    private function getOperationByName($client, $name, $method = null)\n    {\n        return $client->resumeOperation($name, $method);\n    }\n\n    /**\n     * Convert an operation response to an array\n     *\n     * @param OperationResponse|GaxOperationResponse $operation The operation to\n     *        serialize.\n     * @param string $type The Operation type. The type should correspond to a\n     *        member of $mappers.typeUrl.\n     * @param Serializer|GaxSerializer $serializer The gRPC serializer to use\n     *        for the deserialization.\n     * @param array $mappers A list of mappers.\n     * @return array|null\n     */\n    private function deserializeResult($operation, $type, $serializer, array $mappers)\n    {\n        $mappers = array_filter($mappers, function ($mapper) use ($type) {\n            return $mapper['typeUrl'] === $type;\n        });\n\n        if (count($mappers) === 0) {\n            throw new \\RuntimeException(sprintf('No mapper exists for operation response type %s.', $type));\n        }\n\n        $mapper = current($mappers);\n        $message = $mapper['message'];\n\n        $response = new $message();\n        $anyResponse = $operation->getLastProtoResponse()->getResponse();\n        if (is_null($anyResponse)) {\n            return null;\n        }\n\n        $response->mergeFromString($anyResponse->getValue());\n\n        return $serializer->encodeMessage($response);\n    }\n\n    /**\n     * Convert an operation metadata to an array\n     *\n     * @param OperationResponse|GaxOperationResponse $operation The operation to\n     *        serialize.\n     * @param string $type The Operation type. The type should correspond to a\n     *        member of $mappers.typeUrl.\n     * @param Serializer|GaxSerializer $serializer The gRPC serializer to use\n     *        for the deserialization.\n     * @param array $mappers A list of mappers.\n     * @return array|null\n     */\n\n    private function deserializeMetadata($operation, $type, $serializer, array $mappers)\n    {\n        $mappers = array_filter($mappers, function ($mapper) use ($type) {\n            return $mapper['typeUrl'] === $type;\n        });\n        if (count($mappers) === 0) {\n            throw new \\RuntimeException(sprintf('No mapper exists for operation metadata type %s.', $type));\n        }\n\n        $mapper = current($mappers);\n        $message = $mapper['message'];\n\n        $response = new $message();\n        $anyResponse = $operation->getLastProtoResponse()->getMetadata();\n        if (is_null($anyResponse)) {\n            return null;\n        }\n\n        $response->mergeFromString($anyResponse->getValue());\n\n        return $serializer->encodeMessage($response);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/OptionsValidator.php",
    "content": "<?php\n\n/**\n * Copyright 2025 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace Google\\Cloud\\Core;\n\nuse Google\\ApiCore\\ArrayTrait;\nuse Google\\ApiCore\\Options\\CallOptions;\nuse Google\\ApiCore\\Serializer;\nuse Google\\Protobuf\\Internal\\Message;\nuse LogicException;\n\n/**\n * Helper used to validate options\n *\n * @internal\n */\nclass OptionsValidator\n{\n    use ArrayTrait;\n\n    /**\n     * @param ?Serializer $serializer use a serializer to decode protobuf messages\n     *        instead of calling {@see Message::mergeFromJsonString()}.\n     */\n    public function __construct(\n        private ?Serializer $serializer = null\n    ) {\n    }\n\n    /**\n     * Validate an array of options based on the supplied `$optionTypes`.\n     * $optionTypes can be an array of string keys, a protobuf Message classname, or a\n     * the CallOptions classname. Parameters are split and returned in the order\n     * that the options types are provided.\n     *\n     *  - If the option type is an array, any keys in $options matching the string values\n     *    of the array are returned.\n     *  - If the option type is {@see Message}, any keys matching getters will be set on the message.\n     *  - If the option type is string, and that string is a valid {@see CallOptions} option, those\n     *    options will be returned in an array\n     *\n     * ```\n     * [$customOps, $commitRequest, $callOptions] = $optionsValidator->vaidateOptions(\n     *     $options,\n     *     ['customOp1', 'customOp2'],\n     *     new CommitRequest(),\n     *     CallOptions::class,\n     * );\n     * ```\n     *\n     * @param array $options\n     * @param array|Message|string ...$optionTypes\n     * @return array\n     * @throws LogicException when a value exists which is not supported by any of the `$optionTypes`.\n     */\n    public function validateOptions(array $options, array|Message|string ...$optionTypes): array\n    {\n        $splitOptions = [];\n        foreach ($optionTypes as $optionType) {\n            if (is_array($optionType)) {\n                $splitOptions[] = $this->pluckArray($optionType, $options);\n            } elseif ($optionType === CallOptions::class) {\n                $callOptionKeys = array_keys((new CallOptions([]))->toArray());\n                $splitOptions[] = $this->pluckArray($callOptionKeys, $options);\n            } elseif ($optionType instanceof Message) {\n                $messageKeys = array_map(\n                    fn ($method) => lcfirst(substr($method, 3)),\n                    array_filter(\n                        get_class_methods($optionType),\n                        fn ($m) => 0 === strpos($m, 'get')\n                    )\n                );\n                $messageOptions = $this->pluckArray($messageKeys, $options);\n                if ($this->serializer) {\n                    $optionType = $this->serializer->decodeMessage($optionType, $messageOptions);\n                } else {\n                    $optionType->mergeFromJsonString(json_encode($messageOptions, JSON_FORCE_OBJECT));\n                }\n                $splitOptions[] = $optionType;\n            } elseif (is_string($optionType)) {\n                $splitOptions[] = $this->pluck($optionType, $options, false);\n            } else {\n                throw new LogicException(sprintf('Invalid option type: %s', $optionType));\n            }\n        }\n\n        if (!empty($options)) {\n            throw new LogicException(\n                'Unexpected option(s) provided: ' . implode(', ', array_keys($options))\n            );\n        }\n\n        return $splitOptions;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/PhpArray.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse DrSlump\\Protobuf;\nuse google\\protobuf\\ListValue;\nuse google\\protobuf\\NullValue;\nuse google\\protobuf\\Struct;\nuse google\\protobuf\\Value;\n\n/**\n * Extend the Protobuf-PHP array codec to allow messages to match the format\n * used for REST.\n * @deprecated\n * @codeCoverageIgnore\n * @internal\n */\nclass PhpArray extends Protobuf\\Codec\\PhpArray\n{\n    /**\n     * @var array\n     */\n    private $customFilters;\n\n    /**\n     * @var bool\n     */\n    private $useCamelCase;\n\n    /**\n     * @param array $customFilters A set of callbacks to apply to properties in\n     *        a gRPC response.\n     * @param bool $useCamelCase Whether to convert key casing to camelCase.\n     * }\n     */\n    public function __construct(array $customFilters = [], $useCamelCase = true)\n    {\n        $this->customFilters = $customFilters;\n        $this->useCamelCase = $useCamelCase;\n    }\n\n    /**\n     * Borrowed heavily from {@see DrSlump\\Protobuf\\Codec\\PhpArray::encodeMessage()}.\n     * With this approach we are able to transform the response with minimal\n     * overhead.\n     */\n    protected function encodeMessage(Protobuf\\Message $message)\n    {\n        $descriptor = Protobuf::getRegistry()->getDescriptor($message);\n        $data = [];\n\n        foreach ($descriptor->getFields() as $tag => $field) {\n            $empty = !$message->_has($tag);\n            if ($field->isRequired() && $empty) {\n                throw new \\UnexpectedValueException(\n                    sprintf(\n                        'Message %s\\'s field tag %s(%s) is required but has no value',\n                        get_class($message),\n                        $tag,\n                        $field->getName()\n                    )\n                );\n            }\n\n            if ($empty) {\n                continue;\n            }\n\n            $key = $this->useTagNumber ? $field->getNumber() : $field->getName();\n            $v = $message->_get($tag);\n\n            if ($field->isRepeated()) {\n                // Make sure the value is an array of values\n                $v = is_array($v) ? $v : [$v];\n                $arr = [];\n\n                foreach ($v as $k => $vv) {\n                    // Skip nullified repeated values\n                    if (null === $vv) {\n                        continue;\n                    }\n\n                    $filteredValue = $this->filterValue($vv, $field);\n\n                    if ($this->isKeyValueMessage($vv)) {\n                        $arr[key($filteredValue)] = current($filteredValue);\n                    } else {\n                        $arr[$k] = $filteredValue;\n                    }\n\n                    $v = $arr;\n                }\n            } else {\n                $v = $this->filterValue($v, $field);\n            }\n\n            $key = ($this->useCamelCase) ? $this->toCamelCase($key) : $key;\n\n            if (isset($this->customFilters[$key])) {\n                $v = call_user_func($this->customFilters[$key], $v);\n            }\n\n            $data[$key] = $v;\n        }\n\n        return $data;\n    }\n\n    /**\n     * Borrowed heavily from {@see DrSlump\\Protobuf\\Codec\\PhpArray::decodeMessage()}.\n     * The only addition here is converting camel case field names to snake case.\n     */\n    protected function decodeMessage(Protobuf\\Message $message, $data)\n    {\n        // Get message descriptor\n        $descriptor = Protobuf::getRegistry()->getDescriptor($message);\n\n        foreach ($data as $key => $v) {\n            // Get the field by tag number or name\n            $field = $this->useTagNumber\n                   ? $descriptor->getField($key)\n                   : $descriptor->getFieldByName($this->toSnakeCase($key));\n\n            // Unknown field found\n            if (!$field) {\n                $unknown = new Protobuf\\Codec\\PhpArray\\Unknown($key, gettype($v), $v);\n                $message->addUnknown($unknown);\n                continue;\n            }\n\n            if ($field->isRepeated()) {\n                // Make sure the value is an array of values\n                $v = is_array($v) && is_int(key($v)) ? $v : [$v];\n                foreach ($v as $k => $vv) {\n                    $v[$k] = $this->filterValue($vv, $field);\n                }\n            } else {\n                $v = $this->filterValue($v, $field);\n            }\n\n            $message->_set($field->getNumber(), $v);\n        }\n\n        return $message;\n    }\n\n    protected function filterValue($value, Protobuf\\Field $field)\n    {\n        if (trim($field->getReference(), '\\\\') === NullValue::class) {\n            return null;\n        }\n\n        if ($value instanceof Protobuf\\Message) {\n            if ($this->isKeyValueMessage($value)) {\n                $v = $value->getValue();\n\n                return [\n                    $value->getKey() => $v instanceof Protobuf\\Message\n                        ? $this->encodeMessage($v)\n                        : $v\n                ];\n            }\n\n            if ($value instanceof Struct) {\n                $vals = [];\n\n                foreach ($value->getFields() as $field) {\n                    $val = $this->filterValue(\n                        $field->getValue(),\n                        $field->descriptor()->getFieldByName('value')\n                    );\n                    $vals[$field->getKey()] = $val;\n                }\n\n                return $vals;\n            }\n\n            if ($value instanceof ListValue) {\n                $vals = [];\n\n                foreach ($value->getValuesList() as $val) {\n                    $fields = $val->descriptor()->getFields();\n\n                    foreach ($fields as $field) {\n                        $name = $field->getName();\n                        if ($val->$name !== null) {\n                            $vals[] = $this->filterValue($val->$name, $field);\n                        }\n                    }\n                }\n\n                return $vals;\n            }\n\n            if ($value instanceof Value) {\n                $fields = $value->descriptor()->getFields();\n\n                foreach ($fields as $field) {\n                    $name = $field->getName();\n                    if ($value->$name !== null) {\n                        return $this->filterValue($value->$name, $field);\n                    }\n                }\n            }\n        }\n\n        return parent::filterValue($value, $field);\n    }\n\n    private function toSnakeCase($key)\n    {\n        return strtolower(preg_replace(['/([a-z\\d])([A-Z])/', '/([^_])([A-Z][a-z])/'], '$1_$2', $key));\n    }\n\n    private function toCamelCase($key)\n    {\n        return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $key))));\n    }\n\n    private function isKeyValueMessage($value)\n    {\n        return property_exists($value, 'key') && property_exists($value, 'value');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/CloudRunJobMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\nuse Google\\Cloud\\Core\\Compute\\Metadata;\n\n/**\n * A MetadataProvider for Cloud Run Jobs.\n */\nclass CloudRunJobMetadataProvider implements MetadataProviderInterface\n{\n    /**\n     * @var Metadata\n     */\n    private $metadata;\n\n    /**\n     * @var string\n     */\n    private $serviceId;\n\n    /**\n     * @var string\n     */\n    private $revisionId;\n\n    /**\n     * @var string\n     */\n    private $taskIndex;\n\n    /**\n     * @var string\n     */\n    private $taskAttempt;\n\n    /**\n     * @var string\n     */\n    private $instanceId;\n\n    /**\n     * @var string\n     */\n    private $traceId;\n\n    /**\n     * @var string\n     */\n    private $region;\n\n    /**\n     * @see https://cloud.google.com/run/docs/container-contract#jobs-env-vars\n     * @param array $env\n     */\n    public function __construct(array $env, ?Metadata $metadata = null)\n    {\n        $this->serviceId = $env['CLOUD_RUN_JOB'] ?? 'unknown-job';\n        $this->revisionId = $env['CLOUD_RUN_EXECUTION'] ?? '';\n        $this->taskIndex = $env['CLOUD_RUN_TASK_INDEX'] ?? '';\n        $this->taskAttempt = $env['CLOUD_RUN_TASK_ATTEMPT'] ?? '';\n\n        $this->traceId = isset($env['HTTP_X_CLOUD_TRACE_CONTEXT'])\n            ? \\substr($env['HTTP_X_CLOUD_TRACE_CONTEXT'], 0, 32)\n            : null;\n\n        $this->metadata = $metadata ?? new Metadata();\n        $this->region = \\basename($this->metadata->get('instance/region') ?? '');\n        $this->instanceId = $this->metadata->get('instance/id');\n    }\n\n    /**\n     * @return array\n     */\n    public function monitoredResource()\n    {\n        return [\n            'type' => 'cloud_run_job',\n            'labels' => [\n                'job_name' => $this->serviceId,\n                'location' => $this->region,\n                'project_id' => $this->projectId(),\n            ],\n        ];\n    }\n\n    /**\n     * Return the project id.\n     * @return string\n     */\n    public function projectId()\n    {\n        return $this->metadata->getProjectId();\n    }\n\n    /**\n     * Return the service id.\n     * @return string\n     */\n    public function serviceId()\n    {\n        return $this->serviceId;\n    }\n\n    /**\n     * Return the version id.\n     * @return string\n     */\n    public function versionId()\n    {\n        return $this->revisionId;\n    }\n\n    /**\n     * Return the labels.\n     * @return array\n     */\n    public function labels()\n    {\n        $labels = [\n            'instanceId' => $this->instanceId,\n            'run.googleapis.com/execution_name' => $this->revisionId,\n            'run.googleapis.com/task_attempt' => $this->taskAttempt,\n            'run.googleapis.com/task_index' => $this->taskIndex,\n            'run.googleapis.com/trace_id' => $this->traceId,\n        ];\n        return \\array_filter($labels);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/CloudRunMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2023 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * @deprecated Use \\Google\\Cloud\\Core\\Report\\CloudRunServiceMetadataProvider instead\n */\nclass CloudRunMetadataProvider extends CloudRunServiceMetadataProvider\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/CloudRunServiceMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\nuse Google\\Cloud\\Core\\Compute\\Metadata;\n\n/**\n * A MetadataProvider for Cloud Run Services.\n */\nclass CloudRunServiceMetadataProvider implements MetadataProviderInterface\n{\n    /**\n     * @var Metadata\n     */\n    private $metadata;\n\n    /**\n     * @var string\n     */\n    private $configurationId;\n\n    /**\n     * @var string\n     */\n    private $serviceId;\n\n    /**\n     * @var string\n     */\n    private $revisionId;\n\n    /**\n     * @var string\n     */\n    private $instanceId;\n\n    /**\n     * @var string\n     */\n    private $traceId;\n\n    /**\n     * @var string\n     */\n    private $region;\n\n    /**\n     * @see https://cloud.google.com/run/docs/container-contract#services-env-vars\n     * @param array $env\n     */\n    public function __construct(array $env, ?Metadata $metadata = null)\n    {\n        $this->configurationId = $env['K_CONFIGURATION'] ?? 'unknown-configuration';\n        $this->serviceId = $env['K_SERVICE'] ?? 'unknown-service';\n        $this->revisionId = $env['K_REVISION'] ?? 'unknown-revision';\n        $this->traceId = isset($env['HTTP_X_CLOUD_TRACE_CONTEXT'])\n            ? \\substr($env['HTTP_X_CLOUD_TRACE_CONTEXT'], 0, 32)\n            : null;\n\n        $this->metadata = $metadata ?? new Metadata();\n        $this->region = \\basename($this->metadata->get('instance/region') ?? '');\n        $this->instanceId = $this->metadata->get('instance/id');\n    }\n\n    /**\n     * @return array\n     */\n    public function monitoredResource()\n    {\n        return [\n            'type' => 'cloud_run_revision',\n            'labels' => [\n                'configuration_name' => $this->configurationId,\n                'location' => $this->region,\n                'project_id' => $this->projectId(),\n                'revision_name' => $this->revisionId,\n                'service_name' => $this->serviceId,\n            ],\n        ];\n    }\n\n    /**\n     * Return the project id.\n     * @return string\n     */\n    public function projectId()\n    {\n        return $this->metadata->getProjectId();\n    }\n\n    /**\n     * Return the service id.\n     * @return string\n     */\n    public function serviceId()\n    {\n        return $this->serviceId;\n    }\n\n    /**\n     * Return the version id.\n     * @return string\n     */\n    public function versionId()\n    {\n        return $this->revisionId;\n    }\n\n    /**\n     * Return the labels. We need to evaluate $_SERVER for each request.\n     *\n     * @return array\n     * @todo Figure out where to get the `container_name` from\n     */\n    public function labels()\n    {\n        $labels = [\n            'instanceId' => $this->instanceId,\n            'run.googleapis.com/trace_id' => $this->traceId,\n        ];\n        return \\array_filter($labels);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/EmptyMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * An empty MetadataProvider.\n */\n\nclass EmptyMetadataProvider implements MetadataProviderInterface\n{\n    /**\n     * Return an array representing MonitoredResource.\n     *\n     * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource\n     *\n     * @return array\n     */\n    public function monitoredResource()\n    {\n        return [];\n    }\n\n    /**\n     * Return the project id.\n     * @return string\n     */\n    public function projectId()\n    {\n        return '';\n    }\n\n    /**\n     * Return the service id.\n     * @return string\n     */\n    public function serviceId()\n    {\n        return '';\n    }\n\n    /**\n     * Return the version id.\n     * @return string\n     */\n    public function versionId()\n    {\n        return '';\n    }\n\n    /**\n     * Return the labels.\n     * @return array\n     */\n    public function labels()\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/GAEFlexMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * An MetadataProvider for GAE Flex.\n */\nclass GAEFlexMetadataProvider extends GAEMetadataProvider\n{\n    protected function getTraceValue($server)\n    {\n        return substr($server['HTTP_X_CLOUD_TRACE_CONTEXT'], 0, 32);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/GAEMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * MetadataProvider for GAE.\n */\nabstract class GAEMetadataProvider implements MetadataProviderInterface\n{\n    abstract protected function getTraceValue($server);\n\n    /** @var array */\n    private $data;\n\n    /**\n     * @param array $server An array for holding the values. Normally just use\n     *              $_SERVER.\n     */\n    public function __construct(array $server)\n    {\n        $projectId = $server['GOOGLE_CLOUD_PROJECT'] ?? 'unknown-projectid';\n        $serviceId = $server['GAE_SERVICE'] ?? 'unknown-service';\n        $versionId = $server['GAE_VERSION'] ?? 'unknown-version';\n        $labels = isset($server['HTTP_X_CLOUD_TRACE_CONTEXT'])\n            ? ['appengine.googleapis.com/trace_id' =>\n               $this->getTraceValue($server)]\n            : [];\n        $this->data =\n            [\n                'resource' => [\n                    'type' => 'gae_app',\n                    'labels' => [\n                        'project_id' => $projectId,\n                        'version_id' => $versionId,\n                        'module_id' => $serviceId\n                    ]\n                ],\n                'projectId' => $projectId,\n                'serviceId' => $serviceId,\n                'versionId' => $versionId,\n                'labels' => $labels\n            ];\n    }\n\n    /**\n     * Return an array representing MonitoredResource.\n     *\n     * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource\n     *\n     * @return array\n     */\n    public function monitoredResource()\n    {\n        return $this->data['resource'];\n    }\n\n    /**\n     * Return the project id.\n     * @return string\n     */\n    public function projectId()\n    {\n        return $this->data['projectId'];\n    }\n\n    /**\n     * Return the service id.\n     * @return string\n     */\n    public function serviceId()\n    {\n        return $this->data['serviceId'];\n    }\n\n    /**\n     * Return the version id.\n     * @return string\n     */\n    public function versionId()\n    {\n        return $this->data['versionId'];\n    }\n\n    /**\n     * Return the labels. We need to evaluate $_SERVER for each request.\n     * @return array\n     */\n    public function labels()\n    {\n        return $this->data['labels'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/GAEStandardMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * An MetadataProvider for GAE Standard.\n */\nclass GAEStandardMetadataProvider extends GAEMetadataProvider\n{\n    protected function getTraceValue($server)\n    {\n        $traceId = substr($server['HTTP_X_CLOUD_TRACE_CONTEXT'], 0, 32);\n        if (isset($server['GOOGLE_CLOUD_PROJECT'])) {\n            return sprintf(\n                'projects/%s/traces/%s',\n                $server['GOOGLE_CLOUD_PROJECT'],\n                $traceId\n            );\n        }\n        return $traceId;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/MetadataProviderInterface.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * An interface for provide some metadata for reports.\n */\ninterface MetadataProviderInterface\n{\n    /**\n     * Return an array representing MonitoredResource.\n     *\n     * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource\n     *\n     * @return array\n     */\n    public function monitoredResource();\n\n    /**\n     * Return the project id.\n     * @return string\n     */\n    public function projectId();\n\n    /**\n     * Return the service id.\n     * @return string\n     */\n    public function serviceId();\n\n    /**\n     * Return the version id.\n     * @return string\n     */\n    public function versionId();\n\n    /**\n     * Return the labels.\n     * @return array\n     */\n    public function labels();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/MetadataProviderUtils.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\nuse Google\\Cloud\\Core\\Compute\\Metadata;\n\n/**\n * Utility class for MetadataProvider.\n */\nclass MetadataProviderUtils\n{\n    /**\n     * Automatically choose the most appropriate MetadataProvider and return it.\n     *\n     * @param array $server Normally pass the $_SERVER.\n     * @return MetadataProviderInterface\n     */\n    public static function autoSelect($server, ?Metadata $metadata = null)\n    {\n        if (isset($server['GAE_SERVICE'])) {\n            if (isset($server['GAE_ENV']) && $server['GAE_ENV'] === 'standard') {\n                return new GAEStandardMetadataProvider($server);\n            }\n            return new GAEFlexMetadataProvider($server);\n        }\n        if (!empty(\\getenv('K_CONFIGURATION'))) {\n            return new CloudRunServiceMetadataProvider(\\getenv(), $metadata);\n        }\n        if (!empty(\\getenv('CLOUD_RUN_JOB'))) {\n            return new CloudRunJobMetadataProvider(\\getenv(), $metadata);\n        }\n        return new EmptyMetadataProvider();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Report/SimpleMetadataProvider.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Report;\n\n/**\n * Simple MetadataProvider.\n */\nclass SimpleMetadataProvider implements MetadataProviderInterface\n{\n    /** @var array */\n    private $data = [];\n\n    /**\n     * @param array $monitoredResource.\n     * {@see https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource}\n     * @param string $projectId [optional] **Defaults to** ''\n     * @param string $serviceId [optional] **Defaults to** ''\n     * @param string $versionId [optional] **Defaults to** ''\n     * @param array $labels [optional] **Defaults to** []\n     */\n    public function __construct(\n        $monitoredResource = [],\n        $projectId = '',\n        $serviceId = '',\n        $versionId = '',\n        $labels = []\n    ) {\n        $this->data['monitoredResource'] = $monitoredResource;\n        $this->data['projectId'] = $projectId;\n        $this->data['serviceId'] = $serviceId;\n        $this->data['versionId'] = $versionId;\n        $this->data['labels'] = $labels;\n    }\n\n    /**\n     * Return an array representing MonitoredResource.\n     *\n     * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/MonitoredResource\n     *\n     * @return array\n     */\n    public function monitoredResource()\n    {\n        return $this->data['monitoredResource'];\n    }\n\n    /**\n     * Return the project id.\n     * @return string\n     */\n    public function projectId()\n    {\n        return $this->data['projectId'];\n    }\n\n    /**\n     * Return the service id.\n     * @return string\n     */\n    public function serviceId()\n    {\n        return $this->data['serviceId'];\n    }\n\n    /**\n     * Return the version id.\n     * @return string\n     */\n    public function versionId()\n    {\n        return $this->data['versionId'];\n    }\n\n    /**\n     * Return the labels.\n     * @return array\n     */\n    public function labels()\n    {\n        return $this->data['labels'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RequestBuilder.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Uri;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Builds a PSR7 request from a service definition.\n */\nclass RequestBuilder\n{\n    use JsonTrait;\n    use UriTrait;\n\n    /**\n     * @var string\n     */\n    private $servicePath;\n\n    /**\n     * @var string\n     */\n    private $baseUri;\n\n    /**\n     * @var array\n     */\n    private $resourceRoot;\n\n    /**\n     * @var array\n     */\n    private $service;\n\n    /**\n     * @param string $servicePath\n     * @param string $baseUri\n     * @param array  $resourceRoot [optional]\n     */\n    public function __construct($servicePath, $baseUri, array $resourceRoot = [])\n    {\n        $this->service = $this->loadServiceDefinition($servicePath);\n        $this->resourceRoot = $resourceRoot;\n\n        // Append service definition base path if bare apiEndpoint domain is given.\n        if (isset($this->service['basePath'])) {\n            $uriParts = parse_url($baseUri) + ['path' => null];\n            if (!$uriParts['path'] || $uriParts['path'] === '/') {\n                $uriParts['path'] = $this->service['basePath'];\n\n                // Recreate the URI from its modified parts and ensure it ends in a single slash.\n                $this->baseUri = rtrim((string) Uri::fromParts($uriParts), '/') . '/';\n\n                return;\n            }\n        }\n\n        $this->baseUri = rtrim($baseUri, '/') . '/';\n    }\n\n    /**\n     * Build the request.\n     *\n     * @param string $resource\n     * @param string $method\n     * @param array $options [optional]\n     * @return RequestInterface\n     * @todo complexity high, revisit\n     * @todo consider validating against the schemas\n     */\n    public function build($resource, $method, array $options = [])\n    {\n        $root = $this->resourceRoot;\n\n        array_push($root, 'resources');\n        $root = array_merge($root, explode('.', $resource));\n        array_push($root, 'methods', $method);\n\n        $action = $this->service;\n        foreach ($root as $rootItem) {\n            if (!isset($action[$rootItem])) {\n                throw new \\InvalidArgumentException('Provided path item ' . $rootItem . ' does not exist.');\n            }\n            $action = $action[$rootItem];\n        }\n\n        $path = [];\n        $query = [];\n        $body = [];\n\n        if (isset($action['parameters'])) {\n            foreach ($action['parameters'] as $parameter => $parameterOptions) {\n                if ($parameterOptions['location'] === 'path' && array_key_exists($parameter, $options)) {\n                    $path[$parameter] = $options[$parameter];\n                    unset($options[$parameter]);\n                }\n\n                if ($parameterOptions['location'] === 'query') {\n                    // flatten nested querystring parameters into dot-syntax\n                    if (false !== strpos($parameter, '.')) {\n                        list($object, $property) = explode('.', $parameter, 2);\n                        if (isset($options[$object][$property])) {\n                            $options[$parameter] = $options[$object][$property];\n                        }\n                    }\n                    if (array_key_exists($parameter, $options)) {\n                        $query[$parameter] = $options[$parameter];\n                    }\n                }\n            }\n        }\n\n        if (isset($this->service['parameters'])) {\n            foreach ($this->service['parameters'] as $parameter => $parameterOptions) {\n                if ($parameterOptions['location'] === 'query' && array_key_exists($parameter, $options)) {\n                    $query[$parameter] = $options[$parameter];\n                }\n            }\n        }\n\n        if (isset($action['request'])) {\n            $schema = $action['request']['$ref'];\n\n            foreach ($this->service['schemas'][$schema]['properties'] as $property => $propertyOptions) {\n                if (array_key_exists($property, $options)) {\n                    $body[$property] = $options[$property];\n                }\n            }\n        }\n\n        $uri = $this->buildUriWithQuery(\n            $this->expandUri($this->baseUri . $action['path'], $path),\n            $query\n        );\n\n        return new Request(\n            $action['httpMethod'],\n            $uri,\n            ['Content-Type' => 'application/json'],\n            $body ? $this->jsonEncode($body) : null\n        );\n    }\n\n    /**\n     * @param string $servicePath\n     * @return array\n     */\n    private function loadServiceDefinition($servicePath)\n    {\n        return $this->jsonDecode(\n            file_get_contents($servicePath, true),\n            true\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RequestHandler.php",
    "content": "<?php\n/**\n * Copyright 2023 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse \\Google\\Protobuf\\Internal\\Message;\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\OperationResponse;\nuse Google\\ApiCore\\Serializer;\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\n\n/**\n * @internal\n * Responsible for forwarding the requests to their\n * respective client methdos via the request wrapper.\n */\nclass RequestHandler\n{\n    use EmulatorTrait;\n    use ArrayTrait;\n    use TimeTrait;\n    use WhitelistTrait;\n    use RequestProcessorTrait;\n\n    /**\n     * @var Serializer\n     */\n    private Serializer $serializer;\n\n    private array $clients = [];\n\n    /**\n     * @param Serializer $serializer\n     * @param array<string|object> $clients\n     * @param array $clientConfig\n     */\n    public function __construct(\n        Serializer $serializer,\n        array $clients,\n        array $clientConfig = []\n    ) {\n        //@codeCoverageIgnoreStart\n        $this->serializer = $serializer;\n        $clientConfig['serializer'] = $serializer;\n\n        // Adds some defaults\n        // gccl needs to be present for handwritten clients\n        $clientConfig += [\n            'libName' => 'gccl',\n            'emulatorHost' => null\n        ];\n\n        if ((bool) $clientConfig['emulatorHost']) {\n            $emulatorConfig = $this->emulatorGapicConfig($clientConfig['emulatorHost']);\n            $clientConfig = array_merge(\n                $clientConfig,\n                $emulatorConfig\n            );\n        }\n        //@codeCoverageIgnoreEnd\n\n        // Initialize the client classes and store them in memory\n        foreach ($clients as $client) {\n            if (is_object($client)) {\n                $this->clients[get_class($client)] = $client;\n            } else {\n                $this->clients[$client] = new $client($clientConfig);\n            }\n        }\n    }\n\n    /**\n     * Helper function that forwards the request to a client obj.\n     *\n     * @param string $clientClass The request will be forwarded to this client class.\n     * @param string $method This method needs to be called on the client obj.\n     * @param Message $request The protobuf Request instance to pass as the first argument to the $method.\n     * @param array $optionalArgs The optional args.\n     * @param bool $whitelisted This decides the behaviour when a NotFoundException is encountered.\n     *\n     * @return \\Generator|OperationResponse|array|null\n     *\n     * @throws ServiceException\n     */\n    public function sendRequest(\n        string $clientClass,\n        string $method,\n        Message $request,\n        array $optionalArgs,\n        bool $whitelisted = false\n    ) {\n        $clientObj = $this->getClientObject($clientClass);\n\n        if (!$clientObj) {\n            return null;\n        }\n\n        $allArgs = [$request];\n        $allArgs[] = $optionalArgs;\n\n        try {\n            $callable = [$clientObj, $method];\n            $response = call_user_func_array($callable, $allArgs);\n\n            return $this->handleResponse($response);\n        } catch (ApiException $ex) {\n            throw $this->convertToGoogleException($ex);\n        } catch (NotFoundException $e) {\n            if ($whitelisted) {\n                throw $this->modifyWhitelistedError($e);\n            }\n\n            throw $e;\n        }\n    }\n\n    /**\n     * Helper function that returns a client object stored in memory\n     * using the client class as key.\n     * @param $clientClass The client class whose object we need.\n     * @return mixed\n     */\n    private function getClientObject(string $clientClass)\n    {\n        return $this->clients[$clientClass] ?? null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RequestProcessorTrait.php",
    "content": "<?php\n/**\n * Copyright 2024 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse \\Google\\Protobuf\\Internal\\Message;\nuse Google\\ApiCore\\OperationResponse;\nuse Google\\ApiCore\\PagedListResponse;\nuse Google\\ApiCore\\ServerStream;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse Google\\Rpc\\BadRequest;\nuse Google\\Rpc\\Code;\nuse Google\\Rpc\\RetryInfo;\n\n/**\n * @internal\n * Encapsulates shared functionality of classes that need to send\n * and process requests and responses.\n */\ntrait RequestProcessorTrait\n{\n    /**\n     * @var array Map of error metadata types to RPC wrappers.\n     */\n    private $metadataTypes = [\n        'google.rpc.retryinfo-bin' => RetryInfo::class,\n        'google.rpc.badrequest-bin' => BadRequest::class\n    ];\n\n    /**\n     * Serializes a gRPC response.\n     *\n     * @param mixed $response\n     * @return \\Generator|OperationResponse|array|null\n     */\n    private function handleResponse($response)\n    {\n        if ($response instanceof PagedListResponse) {\n            $response = $response->getPage()->getResponseObject();\n        }\n\n        if ($response instanceof Message) {\n            return $this->serializer->encodeMessage($response);\n        }\n\n        if ($response instanceof OperationResponse) {\n            return $response;\n        }\n\n        if ($response instanceof ServerStream) {\n            return $this->handleStream($response);\n        }\n\n        return null;\n    }\n\n    /**\n     * Handles a streaming response.\n     *\n     * @param ServerStream $response\n     * @return \\Generator|array|null\n     * @throws Exception\\ServiceException\n     */\n    private function handleStream(ServerStream $response)\n    {\n        try {\n            foreach ($response->readAll() as $count => $result) {\n                $res = $this->serializer->encodeMessage($result);\n                yield $res;\n            }\n        } catch (\\Exception $ex) {\n            throw $this->convertToGoogleException($ex);\n        }\n    }\n\n    /**\n     * Convert a ApiCore exception to a Google Exception.\n     *\n     * @param \\Exception $ex\n     * @return ServiceException\n     */\n    private function convertToGoogleException(\\Exception $ex): ServiceException\n    {\n        switch ($ex->getCode()) {\n            case Code::INVALID_ARGUMENT:\n                $exception = Exception\\BadRequestException::class;\n                break;\n\n            case Code::NOT_FOUND:\n            case Code::UNIMPLEMENTED:\n                $exception = Exception\\NotFoundException::class;\n                break;\n\n            case Code::ALREADY_EXISTS:\n                $exception = Exception\\ConflictException::class;\n                break;\n\n            case Code::FAILED_PRECONDITION:\n                $exception = Exception\\FailedPreconditionException::class;\n                break;\n\n            case Code::UNKNOWN:\n                $exception = Exception\\ServerException::class;\n                break;\n\n            case Code::INTERNAL:\n                $exception = Exception\\ServerException::class;\n                break;\n\n            case Code::ABORTED:\n                $exception = Exception\\AbortedException::class;\n                break;\n\n            case Code::DEADLINE_EXCEEDED:\n                $exception = Exception\\DeadlineExceededException::class;\n                break;\n\n            default:\n                $exception = Exception\\ServiceException::class;\n                break;\n        }\n\n        $metadata = [];\n        if (method_exists($ex, 'getMetadata') && $ex->getMetadata()) {\n            foreach ($ex->getMetadata() as $type => $binaryValue) {\n                if (!isset($this->metadataTypes[$type])) {\n                    continue;\n                }\n                $metadataElement = new $this->metadataTypes[$type]();\n                $metadataElement->mergeFromString($binaryValue[0]);\n                $metadata[] = $this->serializer->encodeMessage($metadataElement);\n            }\n        }\n\n        return new $exception($ex->getMessage(), $ex->getCode(), $ex, $metadata);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RequestWrapper.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Auth\\FetchAuthTokenCache;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Auth\\HttpHandler\\Guzzle6HttpHandler;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Auth\\UpdateMetadataInterface;\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * The RequestWrapper is responsible for delivering and signing requests.\n */\nclass RequestWrapper\n{\n    use RequestWrapperTrait;\n    use RetryDeciderTrait;\n\n    /**\n     * @var string|null The current version of the component from which the request\n     * originated.\n     */\n    private $componentVersion;\n\n    /**\n     * @var string|null Access token used to sign requests.\n     */\n    private $accessToken;\n\n    /**\n     * @var callable A handler used to deliver PSR-7 requests specifically for\n     * authentication.\n     */\n    private $authHttpHandler;\n\n    /**\n     * @var callable A handler used to deliver PSR-7 requests.\n     */\n    private $httpHandler;\n\n    /**\n     * @var callable A handler used to deliver PSR-7 requests asynchronously.\n     */\n    private $asyncHttpHandler;\n\n    /**\n     * @var array HTTP client specific configuration options.\n     */\n    private $restOptions;\n\n    /**\n     * @var bool Whether to enable request signing.\n     */\n    private $shouldSignRequest;\n\n    /**\n     * @var callable Sets the conditions for whether or not a\n     * request should attempt to retry.\n     */\n    private $retryFunction;\n\n    /**\n     * @var callable Executes a delay.\n     */\n    private $delayFunction;\n\n    /**\n     * @var callable|null Sets the conditions for determining how long to wait\n     * between attempts to retry.\n     */\n    private $calcDelayFunction;\n\n    /**\n     * @var string The universe domain to verify against the credentials.\n     */\n    private string $universeDomain;\n\n    /**\n     * @var bool Ensure we only check the universe domain once.\n     */\n    private bool $hasCheckedUniverse = false;\n\n    /**\n     * @param array $config [optional] {\n     *     Configuration options. Please see\n     *     {@see \\Google\\Cloud\\Core\\RequestWrapperTrait::setCommonDefaults()} for\n     *     the other available options.\n     *\n     *     @type string $componentVersion The current version of the component from\n     *           which the request originated.\n     *     @type string $accessToken Access token used to sign requests.\n     *           Deprecated: This option is no longer supported. Use the `$credentialsFetcher` option instead.\n     *     @type callable $asyncHttpHandler *Experimental* A handler used to\n     *           deliver PSR-7 requests asynchronously. Function signature should match:\n     *           `function (RequestInterface $request, array $options = []) : PromiseInterface<ResponseInterface>`.\n     *     @type callable $authHttpHandler A handler used to deliver PSR-7\n     *           requests specifically for authentication. Function signature\n     *           should match:\n     *           `function (RequestInterface $request, array $options = []) : ResponseInterface`.\n     *     @type callable $httpHandler A handler used to deliver PSR-7 requests.\n     *           Function signature should match:\n     *           `function (RequestInterface $request, array $options = []) : ResponseInterface`.\n     *     @type array $restOptions HTTP client specific configuration options.\n     *     @type bool $shouldSignRequest Whether to enable request signing.\n     *     @type callable $restRetryFunction Sets the conditions for whether or\n     *           not a request should attempt to retry. Function signature should\n     *           match: `function (\\Exception $ex) : bool`.\n     *     @type callable $restDelayFunction Executes a delay, defaults to\n     *           utilizing `usleep`. Function signature should match:\n     *           `function (int $delay) : void`.\n     *     @type callable $restCalcDelayFunction Sets the conditions for\n     *           determining how long to wait between attempts to retry. Function\n     *           signature should match: `function (int $attempt) : int`.\n     *     @type string $universeDomain The expected universe of the credentials. Defaults to \"googleapis.com\".\n     * }\n     */\n    public function __construct(array $config = [])\n    {\n        $this->setCommonDefaults($config);\n        $config += [\n            'accessToken' => null,\n            'asyncHttpHandler' => null,\n            'authHttpHandler' => null,\n            'httpHandler' => null,\n            'restOptions' => [],\n            'shouldSignRequest' => true,\n            'componentVersion' => null,\n            'restRetryFunction' => null,\n            'restDelayFunction' => null,\n            'restCalcDelayFunction' => null,\n            'universeDomain' => GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN,\n        ];\n\n        $this->componentVersion = $config['componentVersion'];\n        $this->accessToken = $config['accessToken'];\n        $this->restOptions = $config['restOptions'];\n        $this->shouldSignRequest = $config['shouldSignRequest'];\n        $this->retryFunction = $config['restRetryFunction'] ?: $this->getRetryFunction();\n        $this->delayFunction = $config['restDelayFunction'] ?: function ($delay) {\n            usleep($delay);\n        };\n        $this->calcDelayFunction = $config['restCalcDelayFunction'];\n        $this->httpHandler = $config['httpHandler'] ?: HttpHandlerFactory::build();\n        $this->authHttpHandler = $config['authHttpHandler'] ?: $this->httpHandler;\n        $this->asyncHttpHandler = $config['asyncHttpHandler'] ?: $this->buildDefaultAsyncHandler();\n        $this->universeDomain = $config['universeDomain'];\n\n        if ($this->credentialsFetcher instanceof AnonymousCredentials) {\n            $this->shouldSignRequest = false;\n        }\n    }\n\n    /**\n     * Deliver the request.\n     *\n     * @param RequestInterface $request A PSR-7 request.\n     * @param array $options [optional] {\n     *     Request options.\n     *\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `0`.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type callable $restRetryFunction Sets the conditions for whether or\n     *           not a request should attempt to retry. Function signature should\n     *           match: `function (\\Exception $ex) : bool`.\n     *     @type callable $restRetryListener Runs after the restRetryFunction.\n     *           This might be used to simply consume the exception and\n     *           $arguments b/w retries. This returns the new $arguments thus\n     *           allowing modification on demand for $arguments. For ex:\n     *           changing the headers in b/w retries.\n     *     @type callable $restDelayFunction Executes a delay, defaults to\n     *           utilizing `usleep`. Function signature should match:\n     *           `function (int $delay) : void`.\n     *     @type callable $restCalcDelayFunction Sets the conditions for\n     *           determining how long to wait between attempts to retry. Function\n     *           signature should match: `function (int $attempt) : int`.\n     *     @type array $restOptions HTTP client specific configuration options.\n     * }\n     * @return ResponseInterface\n     * @throws ServiceException\n     */\n    public function send(RequestInterface $request, array $options = [])\n    {\n        $retryOptions = $this->getRetryOptions($options);\n        $backoff = new ExponentialBackoff(\n            $retryOptions['retries'],\n            $retryOptions['retryFunction'],\n            $retryOptions['retryListener'],\n        );\n\n        if ($retryOptions['delayFunction']) {\n            $backoff->setDelayFunction($retryOptions['delayFunction']);\n        }\n\n        if ($retryOptions['calcDelayFunction']) {\n            $backoff->setCalcDelayFunction($retryOptions['calcDelayFunction']);\n        }\n\n        try {\n            return $backoff->execute($this->httpHandler, [\n                $this->applyHeaders($request, $options),\n                $this->getRequestOptions($options)\n            ]);\n        } catch (\\Exception $ex) {\n            throw $this->convertToGoogleException($ex);\n        }\n    }\n\n    /**\n     * Deliver the request asynchronously.\n     *\n     * @param RequestInterface $request A PSR-7 request.\n     * @param array $options [optional] {\n     *     Request options.\n     *\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `0`.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type callable $restRetryFunction Sets the conditions for whether or\n     *           not a request should attempt to retry. Function signature should\n     *           match: `function (\\Exception $ex, int $retryAttempt) : bool`.\n     *     @type callable $restDelayFunction Executes a delay, defaults to\n     *           utilizing `usleep`. Function signature should match:\n     *           `function (int $delay) : void`.\n     *     @type callable $restCalcDelayFunction Sets the conditions for\n     *           determining how long to wait between attempts to retry. Function\n     *           signature should match: `function (int $attempt) : int`.\n     *     @type array $restOptions HTTP client specific configuration options.\n     * }\n     * @return PromiseInterface<ResponseInterface>\n     * @throws ServiceException\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function sendAsync(RequestInterface $request, array $options = [])\n    {\n        // Unfortunately, the current ExponentialBackoff implementation doesn't\n        // play nicely with promises.\n        $retryAttempt = 0;\n        $fn = function ($retryAttempt) use (&$fn, $request, $options) {\n            $asyncHttpHandler = $this->asyncHttpHandler;\n            $retryOptions = $this->getRetryOptions($options);\n            if (!$retryOptions['calcDelayFunction']) {\n                $retryOptions['calcDelayFunction'] = [ExponentialBackoff::class, 'calculateDelay'];\n            }\n\n            return $asyncHttpHandler(\n                $this->applyHeaders($request, $options),\n                $this->getRequestOptions($options)\n            )->then(null, function (\\Exception $ex) use ($fn, $retryAttempt, $retryOptions) {\n                $shouldRetry = $retryOptions['retryFunction']($ex, $retryAttempt);\n\n                if ($shouldRetry === false || $retryAttempt >= $retryOptions['retries']) {\n                    throw $this->convertToGoogleException($ex);\n                }\n\n                $delay = $retryOptions['calcDelayFunction']($retryAttempt);\n                $retryOptions['delayFunction']($delay);\n                $retryAttempt++;\n\n                return $fn($retryAttempt);\n            });\n        };\n\n        return $fn($retryAttempt);\n    }\n\n    /**\n     * Applies headers to the request.\n     *\n     * @param RequestInterface $request A PSR-7 request.\n     * @param array $options\n     * @return RequestInterface\n     */\n    private function applyHeaders(RequestInterface $request, array $options = [])\n    {\n        $headers = [\n            'User-Agent' => 'gcloud-php/' . $this->componentVersion,\n            Retry::RETRY_HEADER_KEY => sprintf(\n                'gl-php/%s gccl/%s',\n                PHP_VERSION,\n                $this->componentVersion\n            ),\n        ];\n\n        if (isset($options['retryHeaders'])) {\n            $headers[Retry::RETRY_HEADER_KEY] = sprintf(\n                '%s %s',\n                $headers[Retry::RETRY_HEADER_KEY],\n                implode(' ', $options['retryHeaders'])\n            );\n            unset($options['retryHeaders']);\n        }\n\n        $request = Utils::modifyRequest($request, ['set_headers' => $headers]);\n\n        if ($this->shouldSignRequest) {\n            $quotaProject = $this->quotaProject;\n\n            if ($this->accessToken) {\n                // if an access token is provided, check the universe domain against \"googleapis.com\"\n                $this->checkUniverseDomain(null);\n                $request = $request->withHeader('authorization', 'Bearer ' . $this->accessToken);\n            } else {\n                // if a credentials fetcher is provided, check the universe domain against the\n                // credential's universe domain\n                $credentialsFetcher = $this->getCredentialsFetcher();\n                $this->checkUniverseDomain($credentialsFetcher);\n                $request = $this->addAuthHeaders($request, $credentialsFetcher);\n\n                if ($credentialsFetcher instanceof GetQuotaProjectInterface) {\n                    $quotaProject = $credentialsFetcher->getQuotaProject();\n                }\n            }\n\n            if ($quotaProject) {\n                $request = $request->withHeader('X-Goog-User-Project', $quotaProject);\n            }\n        } else {\n            // If we are not signing the request, check the universe domain against \"googleapis.com\"\n            $this->checkUniverseDomain(null);\n        }\n\n        return $request;\n    }\n\n    /**\n     * Adds auth headers to the request.\n     *\n     * @param RequestInterface $request\n     * @param FetchAuthTokenInterface $fetcher\n     * @return array\n     * @throws ServiceException\n     */\n    private function addAuthHeaders(RequestInterface $request, FetchAuthTokenInterface $fetcher)\n    {\n        $backoff = new ExponentialBackoff($this->retries, $this->getRetryFunction());\n\n        try {\n            return $backoff->execute(\n                function () use ($request, $fetcher) {\n                    if (!$fetcher instanceof UpdateMetadataInterface ||\n                         (\n                             $fetcher instanceof FetchAuthTokenCache &&\n                            !$fetcher->getFetcher() instanceof UpdateMetadataInterface\n                         )\n                    ) {\n                        // This covers an edge case where the token fetcher does not implement UpdateMetadataInterface,\n                        // which only would happen if a user implemented a custom fetcher\n                        if ($token = $fetcher->fetchAuthToken($this->authHttpHandler)) {\n                            return $request->withHeader('authorization', 'Bearer ' . $token['access_token']);\n                        }\n                    } else {\n                        $headers = $fetcher->updateMetadata($request->getHeaders(), null, $this->authHttpHandler);\n                        return Utils::modifyRequest($request, ['set_headers' => $headers]);\n                    }\n\n                    // As we do not know the reason the credentials fetcher could not fetch the\n                    // token, we should not retry.\n                    throw new \\RuntimeException('Unable to fetch token');\n                }\n            );\n        } catch (\\Exception $ex) {\n            throw $this->convertToGoogleException($ex);\n        }\n    }\n\n    /**\n     * Convert any exception to a Google Exception.\n     *\n     * @param \\Exception $ex\n     * @return Exception\\ServiceException\n     */\n    private function convertToGoogleException(\\Exception $ex)\n    {\n        switch ($ex->getCode()) {\n            case 400:\n                $exception = Exception\\BadRequestException::class;\n                break;\n\n            case 404:\n                $exception = Exception\\NotFoundException::class;\n                break;\n\n            case 409:\n                $exception = Exception\\ConflictException::class;\n                break;\n\n            case 412:\n                $exception = Exception\\FailedPreconditionException::class;\n                break;\n\n            case 500:\n                $exception = Exception\\ServerException::class;\n                break;\n\n            case 504:\n                $exception = Exception\\DeadlineExceededException::class;\n                break;\n\n            default:\n                $exception = Exception\\ServiceException::class;\n                break;\n        }\n\n        return new $exception($this->getExceptionMessage($ex), $ex->getCode(), $ex);\n    }\n\n    /**\n     * Gets the exception message.\n     *\n     * @access private\n     * @param \\Exception $ex\n     * @return string\n     */\n    private function getExceptionMessage(\\Exception $ex)\n    {\n        if ($ex instanceof RequestException && $ex->hasResponse()) {\n            return (string) $ex->getResponse()->getBody();\n        }\n\n        return $ex->getMessage();\n    }\n\n    /**\n     * Gets a set of request options.\n     *\n     * @param array $options\n     * @return array\n     */\n    private function getRequestOptions(array $options)\n    {\n        $restOptions = $options['restOptions'] ?? $this->restOptions;\n        $timeout = $options['requestTimeout'] ?? $this->requestTimeout;\n\n        if ($timeout && !array_key_exists('timeout', $restOptions)) {\n            $restOptions['timeout'] = $timeout;\n        }\n\n        return $restOptions;\n    }\n\n    /**\n     * Gets a set of retry options.\n     *\n     * @param array $options\n     * @return array\n     */\n    private function getRetryOptions(array $options)\n    {\n        return [\n            'retries' => isset($options['retries'])\n                ? $options['retries']\n                : $this->retries,\n            'retryFunction' => isset($options['restRetryFunction'])\n                ? $options['restRetryFunction']\n                : $this->retryFunction,\n            'retryListener' => isset($options['restRetryListener'])\n                ? $options['restRetryListener']\n                : null,\n            'delayFunction' => isset($options['restDelayFunction'])\n                ? $options['restDelayFunction']\n                : $this->delayFunction,\n            'calcDelayFunction' => isset($options['restCalcDelayFunction'])\n                ? $options['restCalcDelayFunction']\n                : $this->calcDelayFunction\n        ];\n    }\n\n    /**\n     * Builds the default async HTTP handler.\n     *\n     * @return callable\n     */\n    private function buildDefaultAsyncHandler()\n    {\n        return $this->httpHandler instanceof Guzzle6HttpHandler\n            ? [$this->httpHandler, 'async']\n            : [HttpHandlerFactory::build(), 'async'];\n    }\n\n    /**\n     * Verify that the expected universe domain matches the universe domain from the credentials.\n     */\n    private function checkUniverseDomain(?FetchAuthTokenInterface $credentialsFetcher = null)\n    {\n        if (false === $this->hasCheckedUniverse) {\n            if ($this->universeDomain === '') {\n                throw new GoogleException('The universe domain cannot be empty.');\n            }\n            if (is_null($credentialsFetcher)) {\n                if ($this->universeDomain !== GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN) {\n                    throw new GoogleException(sprintf(\n                        'The accessToken option is not supported outside of the default universe domain (%s).',\n                        GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN\n                    ));\n                }\n            } else {\n                $credentialsUniverse = $credentialsFetcher instanceof GetUniverseDomainInterface\n                    ? $credentialsFetcher->getUniverseDomain()\n                    : GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN;\n                if ($credentialsUniverse !== $this->universeDomain) {\n                    throw new GoogleException(sprintf(\n                        'The configured universe domain (%s) does not match the credential universe domain (%s)',\n                        $this->universeDomain,\n                        $credentialsUniverse\n                    ));\n                }\n            }\n            $this->hasCheckedUniverse = true;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RequestWrapperTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Google\\Auth\\Cache\\MemoryCacheItemPool;\nuse Google\\Auth\\Credentials\\ServiceAccountCredentials;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\FetchAuthTokenCache;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * Encapsulates shared functionality of request wrappers.\n */\ntrait RequestWrapperTrait\n{\n    /**\n     * @var CacheItemPoolInterface A cache used for storing tokens.\n     */\n    private $authCache;\n\n    /**\n     * @var array Cache configuration options.\n     */\n    private $authCacheOptions;\n\n    /**\n     * @var FetchAuthTokenInterface|null Fetches credentials.\n     */\n    private $credentialsFetcher;\n\n    /**\n     * @var array The contents of the service account credentials .json file\n     * retrieved from the Google Developers Console.\n     */\n    private $keyFile;\n\n    /**\n     * @var float Seconds to wait before timing out the request. **Defaults to**\n     *      `0` with REST and `60` with gRPC.\n     */\n    private $requestTimeout;\n\n    /**\n     * @var int Number of retries for a failed request. **Defaults to** `3`.\n     */\n    private $retries;\n\n    /**\n     * @var array Scopes to be used for the request.\n     */\n    private $scopes = [];\n\n    /**\n     * @var string|null The user project to bill for access charges associated\n     *      with the request.\n     */\n    private $quotaProject;\n\n    /**\n     * Sets common defaults between request wrappers.\n     *\n     * @param array $config {\n     *     Configuration options.\n     *\n     *     @type CacheItemPoolInterface $authCache A cache for storing access\n     *           tokens. **Defaults to** a simple in memory implementation.\n     *     @type array $authCacheOptions Cache configuration options.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type array $keyFile [DEPRECATED] use `credentialsFetcher` option.\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `0` with REST and `60` with gRPC.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type array $scopes Scopes to be used for the request.\n     *     @type string $quotaProject Specifies a user project to bill for\n     *           access charges associated with the request.\n     * }\n     * @throws \\InvalidArgumentException\n     */\n    public function setCommonDefaults(array $config)\n    {\n        $config += [\n            'authCache' => new MemoryCacheItemPool(),\n            'authCacheOptions' => [],\n            'credentialsFetcher' => null,\n            'keyFile' => null,\n            'requestTimeout' => null,\n            'retries' => 3,\n            'scopes' => null,\n            'quotaProject' => null\n        ];\n\n        if ($config['credentialsFetcher'] && !$config['credentialsFetcher'] instanceof FetchAuthTokenInterface) {\n            throw new \\InvalidArgumentException('credentialsFetcher must implement FetchAuthTokenInterface.');\n        }\n\n        if (!$config['authCache'] instanceof CacheItemPoolInterface) {\n            throw new \\InvalidArgumentException('authCache must implement CacheItemPoolInterface.');\n        }\n\n        $this->authCache = $config['authCache'];\n        $this->authCacheOptions = $config['authCacheOptions'];\n        $this->credentialsFetcher = $config['credentialsFetcher'];\n        $this->retries = $config['retries'];\n        $this->scopes = $config['scopes'];\n        $this->keyFile = $config['keyFile'];\n        $this->requestTimeout = $config['requestTimeout'];\n        $this->quotaProject = $config['quotaProject'];\n    }\n\n    /**\n     * Get the Keyfile.\n     *\n     * @return array\n     */\n    public function keyFile()\n    {\n        return $this->keyFile;\n    }\n\n    /**\n     * Get the scopes\n     *\n     * @return array\n     */\n    public function scopes()\n    {\n        return $this->scopes;\n    }\n\n    /**\n     * Gets the credentials fetcher and sets up caching. Precedence is as\n     * follows:\n     *\n     * - A user supplied credentials fetcher instance.\n     * - Credentials created from a keyfile.\n     * - Application default credentials.\n     * - Anonymous credentials.\n     *\n     * @return FetchAuthTokenInterface\n     */\n    public function getCredentialsFetcher()\n    {\n        $fetcher = null;\n\n        if ($this->credentialsFetcher) {\n            $fetcher = $this->credentialsFetcher;\n        } else {\n            if ($this->keyFile) {\n                if ($this->quotaProject) {\n                    $this->keyFile['quota_project_id'] = $this->quotaProject;\n                }\n\n                $fetcher = CredentialsLoader::makeCredentials($this->scopes, $this->keyFile);\n            } else {\n                try {\n                    $fetcher = $this->getADC();\n                } catch (\\DomainException $ex) {\n                    $fetcher = new AnonymousCredentials();\n                }\n            }\n\n            // Note: If authCache is set and keyFile is not set, the resulting\n            // credentials instance will be FetchAuthTokenCache, and we will be\n            // unable to enable \"useJwtAccessWithScope\". This is unlikely, as\n            // keyFile is automatically set in ClientTrait::configureAuthentication,\n            // and so should always exist when ServiceAccountCredentials are in use.\n            if ($fetcher instanceof ServiceAccountCredentials) {\n                $fetcher->useJwtAccessWithScope();\n            }\n        }\n\n        if ($fetcher instanceof FetchAuthTokenCache) {\n            // The fetcher has already been wrapped in a cache by `ApplicationDefaultCredentials`;\n            // no need to wrap it another time.\n            return $fetcher;\n        } else {\n            return new FetchAuthTokenCache(\n                $fetcher,\n                $this->authCacheOptions,\n                $this->authCache\n            );\n        }\n    }\n\n    /**\n     * Returns application default credentials. Abstracted out for unit testing.\n     *\n     * @return FetchAuthTokenInterface\n     * @throws \\DomainException\n     */\n    protected function getADC()\n    {\n        return ApplicationDefaultCredentials::getCredentials(\n            $this->scopes,\n            $this->authHttpHandler,\n            $this->authCacheOptions,\n            $this->authCache,\n            $this->quotaProject\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RestTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse UnexpectedValueException;\n\n/**\n * Provides shared functionality for REST service implementations.\n */\ntrait RestTrait\n{\n    use ArrayTrait;\n    use JsonTrait;\n    use WhitelistTrait;\n\n    /**\n     * @var RequestBuilder Builds PSR7 requests from a service definition.\n     */\n    private $requestBuilder;\n\n    /**\n     * @var RequestWrapper Wrapper used to handle sending requests to the\n     * JSON API.\n     */\n    private $requestWrapper;\n\n    /**\n     * Sets the request builder.\n     *\n     * @param RequestBuilder $requestBuilder Builds PSR7 requests from a service\n     *        definition.\n     */\n    public function setRequestBuilder(RequestBuilder $requestBuilder)\n    {\n        $this->requestBuilder = $requestBuilder;\n    }\n\n    /**\n     * Sets the request wrapper.\n     *\n     * @param RequestWrapper $requestWrapper Wrapper used to handle sending\n     *        requests to the JSON API.\n     */\n    public function setRequestWrapper(RequestWrapper $requestWrapper)\n    {\n        $this->requestWrapper = $requestWrapper;\n    }\n\n    /**\n     * Get the RequestWrapper.\n     *\n     * @return RequestWrapper|null\n     */\n    public function requestWrapper()\n    {\n        return $this->requestWrapper;\n    }\n\n    /**\n     * Delivers a request built from the service definition.\n     *\n     * @param string $resource The resource type used for the request.\n     * @param string $method The method used for the request.\n     * @param array $options [optional] Options used to build out the request.\n     * @param array $whitelisted [optional]\n     * @return array\n     * @throws ServiceException\n     */\n    public function send($resource, $method, array $options = [], $whitelisted = false)\n    {\n        $options += [\n            'prettyPrint' => false,\n        ];\n        $requestOptions = $this->pluckArray([\n            'restOptions',\n            'retries',\n            'retryHeaders',\n            'requestTimeout',\n            'restRetryFunction',\n            'restRetryListener',\n            'restDelayFunction',\n            'restCalcDelayFunction',\n        ], $options);\n\n        try {\n            return json_decode(\n                $this->requestWrapper->send(\n                    $this->requestBuilder->build($resource, $method, $options),\n                    $requestOptions\n                )->getBody(),\n                true\n            );\n        } catch (NotFoundException $e) {\n            if ($whitelisted) {\n                throw $this->modifyWhitelistedError($e);\n            }\n\n            throw $e;\n        }\n    }\n\n    /**\n     * Return a custom API endpoint in the proper format, or default if none provided.\n     *\n     * @param string $default\n     * @param array $config\n     * @param string $apiEndpointTemplate\n     * @return string\n     */\n    private function getApiEndpoint($default, array $config, ?string $apiEndpointTemplate = null)\n    {\n        // If the $default parameter is provided, or the user has set an \"apiEndoint\" config option,\n        // fall back to the previous behavior.\n        if ($res = $config['apiEndpoint'] ?? $default) {\n            if (substr($res, -1) !== '/') {\n                $res = $res . '/';\n            }\n\n            if (strpos($res, '//') === false) {\n                $res = 'https://' . $res;\n            }\n\n            return $res;\n        }\n\n        // One of the $default or the $template must always be set\n        if (!$apiEndpointTemplate) {\n            throw new UnexpectedValueException(\n                'An API endpoint template must be provided if no \"apiEndpoint\" or default endpoint is set.'\n            );\n        }\n\n        if (!isset($config['universeDomain'])) {\n            throw new UnexpectedValueException(\n                'The \"universeDomain\" config value must be set to use the default API endpoint template.'\n            );\n        }\n\n        $apiEndpoint = str_replace(\n            'UNIVERSE_DOMAIN',\n            $config['universeDomain'],\n            $apiEndpointTemplate\n        );\n\n        // Preserve the behavior of guaranteeing a trailing \"/\"\n        return $apiEndpoint . (substr($apiEndpoint, -1) !== '/' ? '/' : '');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Retry.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Retry implementation.\n *\n * Unlike {@see \\Google\\Cloud\\Core\\ExponentialBackoff}, Retry requires an implementor\n * to supply wait times for each iteration.\n */\nclass Retry\n{\n    const RETRY_HEADER_KEY = 'x-goog-api-client';\n\n    /**\n     * @var int\n     */\n    private $retries;\n\n    /**\n     * @var callable\n     */\n    private $delayFunction;\n\n    /**\n     * @var callable|null\n     */\n    private $retryFunction;\n\n    /**\n     * @param int|null $retries Maximum number of retries for a failed request.\n     * @param callable $delayFunction A function returning an array of format\n     *        `['seconds' => (int >= 0), 'nanos' => (int >= 0)] specifying how\n     *        long an operation should pause before retrying. Should accept a\n     *        single argument of type `\\Exception`.\n     * @param callable $retryFunction [optional] returns bool for whether or not\n     *        to retry.\n     */\n    public function __construct(\n        $retries,\n        callable $delayFunction,\n        ?callable $retryFunction = null\n    ) {\n        $this->retries = $retries !== null ? (int) $retries : 3;\n        $this->delayFunction = $delayFunction;\n        $this->retryFunction = $retryFunction;\n    }\n\n    /**\n     * Executes the retry process.\n     *\n     * @param callable $function\n     * @param array $arguments [optional]\n     * @return mixed\n     * @throws \\Exception The last exception caught while retrying.\n     */\n    public function execute(callable $function, array $arguments = [])\n    {\n        $delayFunction = $this->delayFunction;\n        $retryAttempt = 0;\n\n        $continue = true;\n        do {\n            try {\n                $res = call_user_func_array($function, $arguments);\n                $continue = false;\n                return $res;\n            } catch (\\Exception $exception) {\n                if ($this->retryFunction) {\n                    if (!call_user_func($this->retryFunction, $exception, $retryAttempt)) {\n                        throw $exception;\n                    }\n                }\n\n                if ($retryAttempt < $this->retries) {\n                    $delay = $delayFunction($exception);\n                    $delay += [\n                        'seconds' => 0,\n                        'nanos' => 0\n                    ];\n\n                    time_nanosleep($delay['seconds'], $delay['nanos']);\n\n                    $retryAttempt++;\n                } else {\n                    $continue = false;\n                    throw $exception;\n                }\n            }\n        } while ($continue);\n    }\n\n    /**\n     * @param callable $delayFunction\n     * @return void\n     */\n    public function setDelayFunction(callable $delayFunction)\n    {\n        $this->delayFunction = $delayFunction;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/RetryDeciderTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse GuzzleHttp\\Exception\\RequestException;\n\n/**\n * Provides methods for deciding if a request should be retried.\n */\ntrait RetryDeciderTrait\n{\n    use JsonTrait;\n\n    /**\n     * @var array\n     */\n    private $httpRetryCodes = [\n        500,\n        502,\n        503\n    ];\n\n    /**\n     * @var array\n     */\n    private $httpRetryMessages = [\n        'rateLimitExceeded',\n        'userRateLimitExceeded'\n    ];\n\n    /**\n     * Determines whether or not the request should be retried.\n     *\n     * @param bool $shouldRetryMessages Whether or not to attempt retrying based\n     *        on the failure message.\n     * @return callable\n     */\n    private function getRetryFunction($shouldRetryMessages = true)\n    {\n        $httpRetryCodes = $this->httpRetryCodes;\n        $httpRetryMessages = $this->httpRetryMessages;\n\n        return function (\\Exception $ex) use ($httpRetryCodes, $httpRetryMessages, $shouldRetryMessages) {\n            $statusCode = $ex->getCode();\n\n            if (in_array($statusCode, $httpRetryCodes)) {\n                return true;\n            }\n\n            if (!$shouldRetryMessages) {\n                return false;\n            }\n\n            $message = ($ex instanceof RequestException && $ex->hasResponse())\n                ? (string) $ex->getResponse()->getBody()\n                : $ex->getMessage();\n\n            try {\n                $message = $this->jsonDecode(\n                    $message,\n                    true\n                );\n            } catch (\\InvalidArgumentException $ex) {\n                return false;\n            }\n\n            if (!isset($message['error']['errors'])) {\n                return false;\n            }\n\n            foreach ($message['error']['errors'] as $error) {\n                if (in_array($error['reason'], $httpRetryMessages)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    /**\n     * @param array $codes\n     */\n    private function setHttpRetryCodes(array $codes)\n    {\n        $this->httpRetryCodes = $codes;\n    }\n\n    /**\n     * @param array $messages\n     */\n    private function setHttpRetryMessages(array $messages)\n    {\n        $this->httpRetryMessages = $messages;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ServiceBuilder.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Auth\\HttpHandler\\Guzzle6HttpHandler;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Google\\Cloud\\BigQuery\\BigQueryClient;\nuse Google\\Cloud\\Datastore\\DatastoreClient;\nuse Google\\Cloud\\Firestore\\FirestoreClient;\nuse Google\\Cloud\\Language\\LanguageClient as DeprecatedLanguageClient;\nuse Google\\Cloud\\Language\\V2\\Client\\LanguageServiceClient;\nuse Google\\Cloud\\Logging\\LoggingClient;\nuse Google\\Cloud\\PubSub\\PubSubClient;\nuse Google\\Cloud\\Spanner\\SpannerClient;\nuse Google\\Cloud\\Speech\\SpeechClient as DeprecatedSpeechClient;\nuse Google\\Cloud\\Speech\\V2\\Client\\SpeechClient;\nuse Google\\Cloud\\Storage\\StorageClient;\nuse Google\\Cloud\\Trace\\TraceClient;\nuse Google\\Cloud\\Translate\\V2\\TranslateClient as DeprecatedTranslateClient;\nuse Google\\Cloud\\Translate\\V3\\Client\\TranslationServiceClient;\nuse Google\\Cloud\\Vision\\V1\\Client\\ImageAnnotatorClient;\nuse Google\\Cloud\\Vision\\VisionClient as DeprecatedVisionClient;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * Google Cloud Platform is a set of modular cloud-based services that allow you\n * to create anything from simple websites to complex applications.\n *\n * This API aims to expose access to these services in a way that is intuitive\n * and easy to use for PHP enthusiasts. The ServiceBuilder instance exposes\n * factory methods which grant access to the various services contained within\n * the API.\n *\n * Configuration is simple. Pass in an array of configuration options to the\n * constructor up front which can be shared between clients or specify the\n * options for the specific services you wish to access, e.g. Datastore, or\n * Storage.\n *\n * Please note that unless otherwise noted the examples below take advantage of\n * [Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials).\n *\n * @deprecated\n */\nclass ServiceBuilder\n{\n    /**\n     * @var array Configuration options to be used between clients.\n     */\n    private $config = [];\n\n    /**\n     * Pass in an array of configuration options which will be shared between\n     * clients.\n     *\n     * Example:\n     * ```\n     * use Google\\Cloud\\Core\\ServiceBuilder;\n     *\n     * $cloud = new ServiceBuilder([\n     *     'projectId' => 'myAwesomeProject'\n     * ]);\n     * ```\n     *\n     * @param array $config [optional] {\n     *     Configuration options.\n     *\n     *     @type string $projectId The project ID from the Google Developer's\n     *           Console.\n     *     @type CacheItemPoolInterface $authCache A cache for storing access\n     *           tokens. **Defaults to** a simple in memory implementation.\n     *     @type array $authCacheOptions Cache configuration options.\n     *     @type callable $authHttpHandler A handler used to deliver Psr7\n     *           requests specifically for authentication.\n     *     @type callable $httpHandler A handler used to deliver Psr7 requests.\n     *           Only valid for requests sent over REST.\n     *     @type array $keyFile [DEPRECATED]\n     *     @type string $keyFilePath [DEPRECATED]\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type array $scopes Scopes to be used for the request.\n     * }\n     */\n    public function __construct(array $config = [])\n    {\n        $this->config = $this->resolveConfig($config);\n    }\n\n    /**\n     * Google Cloud BigQuery allows you to create, manage, share and query\n     * data. Find more information at the\n     * [Google Cloud BigQuery Docs](https://cloud.google.com/bigquery/docs).\n     *\n     * Example:\n     * ```\n     * $bigQuery = $cloud->bigQuery();\n     * ```\n     *\n     * @param array $config [optional] {\n     *     Configuration options. See\n     *     {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the other available options.\n     *\n     *     @type bool $returnInt64AsObject If true, 64 bit integers will be\n     *           returned as a {@see \\Google\\Cloud\\Core\\Int64} object for 32 bit\n     *           platform compatibility. **Defaults to** false.\n     *     @type string $location If provided, determines the default geographic\n     *           location used when creating datasets and managing jobs. Please\n     *           note: This is only required for jobs started outside of the US\n     *           and EU regions. Also, if location metadata has already been\n     *           fetched over the network it will take precedent over this\n     *           setting.\n     * }\n     * @return BigQueryClient\n     */\n    public function bigQuery(array $config = [])\n    {\n        return $this->createClient(BigQueryClient::class, 'bigquery', $config);\n    }\n\n    /**\n     * Google Cloud Datastore is a highly-scalable NoSQL database for your\n     * applications. Find more information at the\n     * [Google Cloud Datastore docs](https://cloud.google.com/datastore/docs/).\n     *\n     * Example:\n     * ```\n     * $datastore = $cloud->datastore();\n     * ```\n     *\n     * @param array $config [optional] {\n     *     Configuration options. See\n     *     {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the other available options.\n     *\n     *     @type bool $returnInt64AsObject If true, 64 bit integers will be\n     *           returned as a {@see \\Google\\Cloud\\Core\\Int64} object for 32 bit\n     *           platform compatibility. **Defaults to** false.\n     * @return DatastoreClient\n     */\n    public function datastore(array $config = [])\n    {\n        return $this->createClient(DatastoreClient::class, 'datastore', $config);\n    }\n\n    /**\n     * Cloud Firestore is a flexible, scalable, realtime database for mobile,\n     * web, and server development. Find more information at the\n     * [Google Cloud firestore docs](https://cloud.google.com/firestore/docs/).\n     *\n     * Example:\n     * ```\n     * $firestore = $cloud->firestore();\n     * ```\n     *\n     * @param array $config [optional] {\n     *     Configuration options. See\n     *     {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the other available options.\n     *\n     *     @type bool $returnInt64AsObject If true, 64 bit integers will be\n     *           returned as a {@see \\Google\\Cloud\\Core\\Int64} object for 32 bit\n     *           platform compatibility. **Defaults to** false.\n     * @return FirestoreClient\n     */\n    public function firestore(array $config = [])\n    {\n        return $this->createClient(FirestoreClient::class, 'firestore', $config);\n    }\n\n    /**\n     * Google Stackdriver Logging allows you to store, search, analyze, monitor,\n     * and alert on log data and events from Google Cloud Platform and Amazon\n     * Web Services. Find more information at the\n     * [Google Stackdriver Logging docs](https://cloud.google.com/logging/docs/).\n     *\n     * Example:\n     * ```\n     * $logging = $cloud->logging();\n     * ```\n     *\n     * @param array $config [optional] Configuration options. See\n     *        {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the available options.\n     * @return LoggingClient\n     */\n    public function logging(array $config = [])\n    {\n        return $this->createClient(LoggingClient::class, 'logging', $config);\n    }\n\n    /**\n     * Google Cloud Natural Language provides natural language understanding\n     * technologies to developers, including sentiment analysis, entity\n     * recognition, and syntax analysis. Currently only English, Spanish,\n     * and Japanese textual context are supported. Find more information at the\n     * [Google Cloud Natural Language docs](https://cloud.google.com/natural-language/docs/).\n     *\n     * Example:\n     * ```\n     * $language = $cloud->language();\n     * ```\n     *\n     * @param array $config [optional] Configuration options. See\n     *        {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the available options.\n     * @return LanguageServiceClient\n     */\n    public function language(array $config = [])\n    {\n        if (class_exists(DeprecatedLanguageClient::class)) {\n            return $this->createClient(DeprecatedLanguageClient::class, 'vision', $config);\n        }\n        throw new \\BadMethodCallException(sprintf(\n            'This method is no longer supported, create %s directly instead.',\n            LanguageServiceClient::class\n        ));\n    }\n\n    /**\n     * Google Cloud Pub/Sub allows you to send and receive messages between\n     * independent applications. Find more information at the\n     * [Google Cloud Pub/Sub docs](https://cloud.google.com/pubsub/docs/).\n     *\n     * Example:\n     * ```\n     * $pubsub = $cloud->pubsub(['projectId' => 'my-project']);\n     * ```\n     *\n     * @param array $config [optional] {\n     *     Configuration options. See\n     *     {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the other available options.\n     *\n     *     @type string $transport The transport type used for requests. May be\n     *           either `grpc` or `rest`. **Defaults to** `grpc` if gRPC support\n     *           is detected on the system.\n     * @return PubSubClient\n     */\n    public function pubsub(array $config = [])\n    {\n        return $this->createClient(PubSubClient::class, 'pubsub', $config);\n    }\n\n    /**\n     * Google Cloud Spanner is a highly scalable, transactional, managed, NewSQL\n     * database service. Find more information at\n     * [Google Cloud Spanner API docs](https://cloud.google.com/spanner/).\n     *\n     * Example:\n     * ```\n     * $spanner = $cloud->spanner(['projectId' => 'my-project']);\n     * ```\n     *\n     * @param array $config [optional] {\n     *     Configuration options. See\n     *     {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the other available options.\n     *\n     *     @type bool $returnInt64AsObject If true, 64 bit integers will be\n     *           returned as a {@see \\Google\\Cloud\\Core\\Int64} object for 32 bit\n     *           platform compatibility. **Defaults to** false.\n     * }\n     * @return SpannerClient\n     */\n    public function spanner(array $config = [])\n    {\n        return $this->createClient(SpannerClient::class, 'spanner', $config);\n    }\n\n    /**\n     * @deprecated\n     * @see SpeechClient\n     * @throws \\BadMethodCallException\n     */\n    public function speech(array $config = [])\n    {\n        if (class_exists(DeprecatedSpeechClient::class)) {\n            return $this->createClient(DeprecatedSpeechClient::class, 'speech', $config);\n        }\n        throw new \\BadMethodCallException(sprintf(\n            'This method is no longer supported, create %s directly instead.',\n            SpeechClient::class\n        ));\n    }\n\n    /**\n     * Google Cloud Storage allows you to store and retrieve data on Google's\n     * infrastructure. Find more information at the\n     * [Google Cloud Storage API docs](https://developers.google.com/storage).\n     *\n     * Example:\n     * ```\n     * $storage = $cloud->storage();\n     * ```\n     *\n     * @param array $config [optional] Configuration options. See\n     *        {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the available options.\n     * @return StorageClient\n     */\n    public function storage(array $config = [])\n    {\n        return $this->createClient(StorageClient::class, 'storage', $config);\n    }\n\n    /**\n     * Google Stackdriver Trace allows you to collect latency data from your applications\n     * and display it in the Google Cloud Platform Console. Find more information at\n     * [Stackdriver Trace API docs](https://cloud.google.com/trace/docs/).\n     *\n     * Example:\n     * ```\n     * $trace = $cloud->trace();\n     * ```\n     *\n     * @param array $config [optional] Configuration options. See\n     *        {@see \\Google\\Cloud\\Core\\ServiceBuilder::__construct()} for the available options.\n     * @return TraceClient\n     */\n    public function trace(array $config = [])\n    {\n        return $this->createClient(TraceClient::class, 'trace', $config);\n    }\n\n    /**\n     * @deprecated\n     * @see ImageAnnotatorClient\n     * @throws \\BadMethodCallException\n     */\n    public function vision(array $config = [])\n    {\n        if (class_exists(DeprecatedVisionClient::class)) {\n            return $this->createClient(DeprecatedVisionClient::class, 'vision', $config);\n        }\n        throw new \\BadMethodCallException(sprintf(\n            'This method is no longer supported, create %s directly instead.',\n            ImageAnnotatorClient::class\n        ));\n    }\n\n    /**\n     * @deprecated\n     * @see TranslationServiceClient\n     * @throws \\BadMethodCallException\n     */\n    public function translate(array $config = [])\n    {\n        if (class_exists(DeprecatedTranslateClient::class)) {\n            return $this->createClient(DeprecatedTranslateClient::class, 'translate', $config);\n        }\n        throw new \\BadMethodCallException(sprintf(\n            'This method is no longer supported, create %s directly instead.',\n            TranslationServiceClient::class\n        ));\n    }\n\n    /**\n     * Create the client library, or error if not installed.\n     *\n     * @param string $class The class to create.\n     * @param string $packageName The name of the package\n     * @param array $config Configuration options.\n     */\n    private function createClient($class, $packageName, array $config = [])\n    {\n        if (class_exists($class)) {\n            return new $class($this->resolveConfig($config + $this->config));\n        }\n        throw new \\Exception(sprintf(\n            'The google/cloud-%s package is missing and must be installed.',\n            $packageName\n        ));\n    }\n\n    /**\n     * Resolves configuration options.\n     *\n     * @param array $config\n     * @return array\n     */\n    private function resolveConfig(array $config)\n    {\n        if (!isset($config['httpHandler'])) {\n            $config['httpHandler'] = HttpHandlerFactory::build();\n        }\n\n        if (!isset($config['asyncHttpHandler'])) {\n            $config['asyncHttpHandler'] = $config['httpHandler'] instanceof Guzzle6HttpHandler\n                ? [$config['httpHandler'], 'async']\n                : [HttpHandlerFactory::build(), 'async'];\n        }\n\n        return array_merge($this->config, $config);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/SysvTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * A utility trait related to System V IPC.\n *\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\ntrait SysvTrait\n{\n    private static $productionKey = 'P';\n    private static $typeDirect = 1;\n    private static $typeFile = 2;\n\n    /**\n     * Create a SystemV IPC key for the given id number.\n     *\n     * Set GOOGLE_CLOUD_SYSV_ID envvar to change the base id.\n     *\n     * @param int $idNum An id number.\n     * @return int\n     */\n    private function getSysvKey($idNum)\n    {\n        $key = getenv('GOOGLE_CLOUD_SYSV_ID') ?: self::$productionKey;\n        $base = ftok(__FILE__, $key);\n        if ($base == PHP_INT_MAX) {\n            $base = 1;\n        }\n        return $base + $idNum;\n    }\n\n    /**\n     * Determine whether the SystemV IPC extension family is loaded.\n     *\n     * @return bool\n     */\n    private function isSysvIPCLoaded()\n    {\n        return extension_loaded('sysvmsg')\n            && extension_loaded('sysvsem')\n            && extension_loaded('sysvshm');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/ArrayHasSameValuesToken.php",
    "content": "<?php\n\nnamespace Google\\Cloud\\Core\\Testing;\n\nuse Prophecy\\Argument\\Token\\TokenInterface;\nuse Prophecy\\Util\\StringUtil;\n\n/**\n * ArrayHasSameValuesToken implements TokenInterface and is used for testing\n *\n * @experimental\n * @internal\n */\nclass ArrayHasSameValuesToken implements TokenInterface\n{\n    private $value;\n    private $string;\n    private $util;\n\n    /**\n     * ArrayHasSameValuesToken constructor.\n     * @param mixed $value\n     * @param StringUtil|null $util\n     *\n     * @experimental\n     * @internal\n     */\n    public function __construct($value, ?StringUtil $util = null)\n    {\n        $this->value = $value;\n        $this->util = $util ?: new StringUtil();\n    }\n\n    /**\n     * @param mixed $argument\n     * @return bool|int\n     *\n     * @experimental\n     * @internal\n     */\n    public function scoreArgument($argument)\n    {\n        return $this->compare($this->value, $argument) ? 11 : false;\n    }\n\n    private function compare(array $value, array $argument)\n    {\n        array_multisort($value);\n        array_multisort($argument);\n\n        return $value == $argument;\n    }\n\n    /**\n     * @return bool\n     *\n     * @experimental\n     * @internal\n     */\n    public function isLast()\n    {\n        return false;\n    }\n\n    /**\n     * @return string\n     *\n     * @experimental\n     * @internal\n     */\n    public function __toString()\n    {\n        if ($this->string) {\n            $string = $this->string .': (%s)';\n        } else {\n            $string = 'same(%s)';\n        }\n\n        return sprintf($string, $this->util->stringify($this->value));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/CheckForClassTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\n/**\n * Trait CheckForClassTrait\n *\n * @experimental\n * @internal\n */\ntrait CheckForClassTrait\n{\n    /**\n     * Check whether all required classes are available, otherwise skip the tests.\n     *\n     * @param array $requiredClasses List of classes that must be available.\n     *\n     * @experimental\n     * @internal\n     */\n    protected function checkAndSkipTest(array $requiredClasses)\n    {\n        foreach ($requiredClasses as $class) {\n            if (!class_exists($class)) {\n                $this->markTestSkipped(\"Missing required class: $class\");\n                return;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/DatastoreOperationRefreshTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\nuse Google\\Cloud\\Datastore\\Connection\\ConnectionInterface;\nuse Google\\Cloud\\Datastore\\EntityMapper;\nuse Google\\Cloud\\Datastore\\Operation;\n\n/**\n * Refresh Datastore operation class\n *\n * @experimental\n * @internal\n */\ntrait DatastoreOperationRefreshTrait\n{\n    /**\n     * Refresh the operation property of a given stubbed class.\n     *\n     * @param mixed $stub\n     * @param ConnectionInterface $connection\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $projectId the project id.\n     *     @type bool $returnInt64AsObject if true, will encode int64s as objects.\n     *     @type bool $encode whether to base64-encode certain values.\n     * }\n     * @return mixed\n     */\n    public function refreshOperation($stub, ConnectionInterface $connection, array $options = [])\n    {\n        $options += [\n            'projectId' => null,\n            'returnInt64AsObject' => false,\n            'encode' => false\n        ];\n\n        $mapper = new EntityMapper(\n            $options['projectId'],\n            $options['encode'],\n            $options['returnInt64AsObject']\n        );\n\n        $stub->___setProperty('operation', new Operation(\n            $connection,\n            $options['projectId'],\n            $options['returnInt64AsObject'],\n            $mapper\n        ));\n\n        return $stub;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/FileListFilterIterator.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\n/**\n * Filter to create a list of only required files\n *\n * @experimental\n * @internal\n */\nclass FileListFilterIterator extends \\FilterIterator\n{\n    private $projectRootPath;\n    private $fileTypes = [];\n    private $testPaths = [];\n    private $excludes = [];\n\n    /**\n     * @param string $projectRootPath The path to the root of the project.\n     * @param \\Iterator $iterator The iterator to find files.\n     * @param array $fileTypes A list of file types to include\n     * @param array $testPaths A list of known patterns for test files.\n     * @param array $excludes A list of patterns to exclude from the result.\n     * @experimental\n     * @internal\n     */\n    public function __construct(\n        $projectRootPath,\n        \\Iterator $iterator,\n        array $fileTypes,\n        array $testPaths,\n        array $excludes\n    ) {\n        $this->projectRootPath = $projectRootPath;\n        $this->fileTypes = $fileTypes;\n        $this->testPaths = $testPaths;\n        $this->excludes = $excludes;\n\n        parent::__construct($iterator);\n    }\n\n    /**\n     * Decides whether to include the file or exclude it.\n     *\n     * @return bool\n     *\n     * @experimental\n     * @internal\n     */\n    #[\\ReturnTypeWillChange]\n    public function accept()\n    {\n        /** @var \\SplFileInfo */\n        $file = parent::current();\n\n        $path = '/' . trim(str_replace($this->projectRootPath, '', realpath($file->getPathName())), '/');\n\n        if (!in_array($file->getExtension(), $this->fileTypes)) {\n            return false;\n        }\n\n        foreach ($this->excludes as $exclude) {\n            if ($exclude instanceof RegexFileFilter) {\n                $pattern = $exclude->regex;\n\n                if (preg_match($pattern, $path) === 1) {\n                    return false;\n                }\n\n                continue;\n            }\n\n            if (strpos($exclude, '/') !== 0 && strpos($path, $exclude) !== false) {\n                return false;\n            }\n\n            if (strpos($path, $exclude) === 0) {\n                return false;\n            }\n        }\n\n        foreach ($this->testPaths as $testPath) {\n            if (strpos($path, $testPath) !== false) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/GcTestListener.php",
    "content": "<?php\n/**\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\nuse PHPUnit\\Framework\\Test;\nuse PHPUnit\\Framework\\TestListener;\nuse PHPUnit\\Framework\\TestSuite;\nuse PHPUnit\\Framework\\Warning;\nuse PHPUnit\\Framework\\AssertionFailedError;\nuse Throwable;\n\n/**\n * Garbage collector for tests\n * @internal\n */\nclass GcTestListener implements TestListener\n{\n    public function endTestSuite(TestSuite $suite): void\n    {\n        gc_collect_cycles();\n    }\n\n    public function addError(Test $test, Throwable $t, float $time): void {}\n\n    public function addWarning(Test $test, Warning $e, float $time): void {}\n\n    public function addFailure(Test $test, AssertionFailedError $e, float $time): void {}\n\n    public function addIncompleteTest(Test $test, Throwable $t, float $time): void {}\n\n    public function addRiskyTest(Test $test, Throwable $t, float $time): void {}\n\n    public function addSkippedTest(Test $test, Throwable $t, float $time): void {}\n\n    public function startTestSuite(TestSuite $suite): void {}\n\n    public function startTest(Test $test): void {}\n\n    public function endTest(Test $test, float $time): void {}\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/GrpcTestTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\n/**\n * Provides checks for whether to run gRPC tests\n *\n * @experimental\n * @internal\n */\ntrait GrpcTestTrait\n{\n    /**\n     * Checks for the grpc extension, and if it is missing, marked the test as skipped\n     *\n     * @experimental\n     * @internal\n     */\n    public function checkAndSkipGrpcTests()\n    {\n        if (!extension_loaded('grpc')) {\n            $this->markTestSkipped('Must have the grpc extension installed to run this test.');\n        }\n        if (defined('HHVM_VERSION')) {\n            $this->markTestSkipped('gRPC is not supported on HHVM.');\n        }\n    }\n\n    /**\n     * @return bool True if grpc tests should be skipped, otherwise false\n     *\n     * @experimental\n     * @internal\n     */\n    public function shouldSkipGrpcTests()\n    {\n        return !extension_loaded('grpc') || defined('HHVM_VERSION');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/KeyPairGenerateTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\nuse Google\\Cloud\\Storage\\EncryptionTrait;\nuse phpseclib\\Crypt\\RSA as RSA2;\nuse phpseclib3\\Crypt\\RSA as RSA3;\n\n/**\n * Trait KeyPairGenerateTrait implements key pair generation functions used for testing\n *\n * @experimental\n * @internal\n */\ntrait KeyPairGenerateTrait\n{\n    use EncryptionTrait;\n\n    private function getKeyPair()\n    {\n        if (class_exists(RSA3::class)) {\n            $key = RSA3::createKey();\n            $key = $key->withPadding(RSA3::SIGNATURE_PKCS1)\n                ->withHash('sha256');\n\n            return [$key->toString('PKCS1'), $key->getPublicKey()];\n        }\n\n        $rsa = new RSA2;\n        $rsa->setSignatureMode(RSA2::SIGNATURE_PKCS1);\n        $rsa->setHash('sha256');\n\n        $key = $rsa->createKey();\n        usleep(500);\n        return [$key['privatekey'], $key['publickey']];\n    }\n\n    private function verifySignature($privateKey, $input, $signature)\n    {\n        $verify = $this->signString($privateKey, $input);\n\n        return urlencode(base64_encode($verify)) === $signature;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Lock/MockGlobals.php",
    "content": "<?php\n\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @experimental\n * @internal\n */\n\nnamespace Google\\Cloud\\Core\\Lock {\n\n    use Google\\Cloud\\Core\\Testing\\Lock\\MockValues;\n\n    function flock($handle, $type)\n    {\n        return MockValues::$flockReturnValue;\n    }\n\n    function fopen($file, $mode)\n    {\n        $val = MockValues::$fopenReturnValue;\n\n        if (is_callable($val)) {\n            return $val($file, $mode);\n        }\n\n        return $val;\n    }\n\n    function sem_acquire($id)\n    {\n        return MockValues::$sem_acquireReturnValue;\n    }\n\n    function sem_release($id)\n    {\n        return MockValues::$sem_releaseReturnValue;\n    }\n\n    function sem_get($key)\n    {\n        $val = MockValues::$sem_getReturnValue;\n\n        if (is_callable($val)) {\n            return $val($key);\n        }\n\n        return $val;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Lock/MockValues.php",
    "content": "<?php\n\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Lock;\n\nrequire_once __DIR__ . '/MockGlobals.php';\n\n/**\n * MockValues holds mock values used for testing the locking implementation.\n *\n * WARNING: this class requires MockGlobals.php, which replaces some existing functions with test\n * implementations.\n *\n * @experimental\n * @internal\n */\nclass MockValues\n{\n    public static $flockReturnValue;\n    public static $fopenReturnValue;\n    public static $sem_acquireReturnValue;\n    public static $sem_releaseReturnValue;\n    public static $sem_getReturnValue;\n\n    /**\n     * Initialize MockValues\n     *\n     * @experimental\n     * @internal\n     */\n    public static function initialize()\n    {\n        self::$flockReturnValue = true;\n        self::$fopenReturnValue = function ($file, $mode) {\n            return \\fopen($file, $mode);\n        };\n        self::$sem_acquireReturnValue = true;\n        self::$sem_releaseReturnValue = true;\n        self::$sem_getReturnValue = function ($key) {\n            return \\sem_get($key);\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/README.md",
    "content": "# Google Cloud Core Testing directory\n\nThis directory contains shared testing code that is used to implement unit,\nsnippet and system tests for both the Core library and other APIs. The code in\nthis directory is marked @experimental, and is **NOT** subject to the G.A. (1.0)\nstability guarantee of the rest of the Google Cloud Core package.\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Reflection/DescriptionFactory.php",
    "content": "<?php\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare(strict_types=1);\n\n/**\n * This file has been copied from PHP Documentor in order to override\n * some of the behavior which was resulting in unwanted behavior.\n * @see https://github.com/phpDocumentor/ReflectionDocBlock/issues/274\n *\n * @link      http://phpdoc.org\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Reflection;\n\nuse function count;\nuse function explode;\nuse function implode;\nuse function ltrim;\nuse function min;\nuse phpDocumentor\\Reflection\\DocBlock\\Description;\nuse phpDocumentor\\Reflection\\DocBlock\\DescriptionFactory as BaseDescriptionFactory;\nuse phpDocumentor\\Reflection\\DocBlock\\TagFactory;\nuse phpDocumentor\\Reflection\\Types\\Context as TypeContext;\nuse phpDocumentor\\Reflection\\Utils;\nuse const PREG_SPLIT_DELIM_CAPTURE;\nuse function str_replace;\nuse function strlen;\nuse function strpos;\nuse function substr;\nuse function trim;\n\n/**\n * Creates a new Description object given a body of text.\n *\n * Descriptions in phpDocumentor are somewhat complex entities as they can contain one or more tags inside their\n * body that can be replaced with a readable output. The replacing is done by passing a Formatter object to the\n * Description object's `render` method.\n *\n * In addition to the above does a Description support two types of escape sequences:\n *\n * 1. `{@}` to escape the `@` character to prevent it from being interpreted as part of a tag, i.e. `{{@}link}`\n * 2. `{}` to escape the `}` character, this can be used if you want to use the `}` character in the description\n *    of an inline tag.\n *\n * If a body consists of multiple lines then this factory will also remove any superfluous whitespace at the beginning\n * of each line while maintaining any indentation that is used. This will prevent formatting parsers from tripping\n * over unexpected spaces as can be observed with tag descriptions.\n *\n * @internal\n */\nclass DescriptionFactory extends BaseDescriptionFactory\n{\n    /** @var TagFactory */\n    private $tagFactory;\n\n    /**\n     * Initializes this factory with the means to construct (inline) tags.\n     */\n    public function __construct(TagFactory $tagFactory)\n    {\n        $this->tagFactory = $tagFactory;\n    }\n\n    public function getTagFactory()\n    {\n        return $this->tagFactory;\n    }\n\n    /**\n     * Returns the parsed text of this description.\n     */\n    public function create(string $contents, ?TypeContext $context = null): Description\n    {\n        $tokens   = $this->lex($contents);\n        $count    = count($tokens);\n        $tagCount = 0;\n        $tags     = [];\n\n        for ($i = 1; $i < $count; $i += 2) {\n            $tags[]     = $this->tagFactory->create($tokens[$i], $context);\n            $tokens[$i] = '%' . ++$tagCount . '$s';\n        }\n\n        //In order to allow \"literal\" inline tags, the otherwise invalid\n        //sequence \"{@}\" is changed to \"@\", and \"{}\" is changed to \"}\".\n        //\"%\" is escaped to \"%%\" because of vsprintf.\n        //See unit tests for examples.\n        for ($i = 0; $i < $count; $i += 2) {\n            // @TODO: Modified the following line so that \"{}\" is not replaced\n            // with \"}\". So far we have not seen any adverse effects\n            // $tokens[$i] = str_replace(['{@}', '{}', '%'], ['@', '}', '%%'], $tokens[$i]);\n            $tokens[$i] = str_replace(['{@}', '%'], ['@', '%%'], $tokens[$i]);\n        }\n\n        return new Description(implode('', $tokens), $tags);\n    }\n\n    /**\n     * Strips the contents from superfluous whitespace and splits the description into a series of tokens.\n     *\n     * @return string[] A series of tokens of which the description text is composed.\n     */\n    private function lex(string $contents): array\n    {\n        $contents = $this->removeSuperfluousStartingWhitespace($contents);\n\n        // performance optimalization; if there is no inline tag, don't bother splitting it up.\n        if (strpos($contents, '{@') === false) {\n            return [$contents];\n        }\n\n        return Utils::pregSplit(\n            '/\\{\n                # \"{@}\" is not a valid inline tag. This ensures that we do not treat it as one, but treat it literally.\n                (?!@\\})\n                # We want to capture the whole tag line, but without the inline tag delimiters.\n                (\\@\n                    # Match everything up to the next delimiter.\n                    [^{}]*\n                    # Nested inline tag content should not be captured, or it will appear in the result separately.\n                    (?:\n                        # Match nested inline tags.\n                        (?:\n                            # Because we did not catch the tag delimiters earlier, we must be explicit with them here.\n                            # Notice that this also matches \"{}\", as a way to later introduce it as an escape sequence.\n                            \\{(?1)?\\}\n                            |\n                            # Make sure we match hanging \"{\".\n                            \\{\n                        )\n                        # Match content after the nested inline tag.\n                        [^{}]*\n                    )* # If there are more inline tags, match them as well. We use \"*\" since there may not be any\n                       # nested inline tags.\n                )\n            \\}/Sux',\n            $contents,\n            0,\n            PREG_SPLIT_DELIM_CAPTURE\n        );\n    }\n\n    /**\n     * Removes the superfluous from a multi-line description.\n     *\n     * When a description has more than one line then it can happen that the second and subsequent lines have an\n     * additional indentation. This is commonly in use with tags like this:\n     *\n     *     {@}since 1.1.0 This is an example\n     *         description where we have an\n     *         indentation in the second and\n     *         subsequent lines.\n     *\n     * If we do not normalize the indentation then we have superfluous whitespace on the second and subsequent\n     * lines and this may cause rendering issues when, for example, using a Markdown converter.\n     */\n    private function removeSuperfluousStartingWhitespace(string $contents): string\n    {\n        $lines = explode(\"\\n\", $contents);\n\n        // if there is only one line then we don't have lines with superfluous whitespace and\n        // can use the contents as-is\n        if (count($lines) <= 1) {\n            return $contents;\n        }\n\n        // determine how many whitespace characters need to be stripped\n        $startingSpaceCount = 9999999;\n        for ($i = 1, $iMax = count($lines); $i < $iMax; ++$i) {\n            // lines with a no length do not count as they are not indented at all\n            if (trim($lines[$i]) === '') {\n                continue;\n            }\n\n            // determine the number of prefixing spaces by checking the difference in line length before and after\n            // an ltrim\n            $startingSpaceCount = min($startingSpaceCount, strlen($lines[$i]) - strlen(ltrim($lines[$i])));\n        }\n\n        // strip the number of spaces from each line\n        if ($startingSpaceCount > 0) {\n            for ($i = 1, $iMax = count($lines); $i < $iMax; ++$i) {\n                $lines[$i] = substr($lines[$i], $startingSpaceCount);\n            }\n        }\n\n        return implode(\"\\n\", $lines);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Reflection/ReflectionHandlerFactory.php",
    "content": "<?php\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Reflection;\n\nuse phpDocumentor\\Reflection\\Php\\Factory\\Argument;\n\n/**\n * Class for determining which verison of phpdocumentor/reflection is being used.\n * @internal\n */\nclass ReflectionHandlerFactory\n{\n    /**\n     * @return ReflectionHandlerV6\n     */\n    public static function create()\n    {\n        return new ReflectionHandlerV6();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Reflection/ReflectionHandlerV6.php",
    "content": "<?php\n/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Reflection;\n\nuse Google\\Cloud\\Core\\Testing\\Reflection\\DescriptionFactory as CoreDescriptionFactory;\nuse phpDocumentor\\Reflection\\DocBlock;\nuse phpDocumentor\\Reflection\\DocBlock\\DescriptionFactory;\nuse phpDocumentor\\Reflection\\DocBlock\\StandardTagFactory;\nuse phpDocumentor\\Reflection\\DocBlockFactory;\nuse phpDocumentor\\Reflection\\File\\LocalFile;\nuse phpDocumentor\\Reflection\\FqsenResolver;\nuse phpDocumentor\\Reflection\\NodeVisitor\\ElementNameResolver;\nuse phpDocumentor\\Reflection\\Php\\Factory;\nuse phpDocumentor\\Reflection\\Php\\Factory\\Noop;\nuse phpDocumentor\\Reflection\\Php\\Factory\\TraitUse;\nuse phpDocumentor\\Reflection\\Php\\NodesFactory;\nuse phpDocumentor\\Reflection\\Php\\ProjectFactory;\nuse phpDocumentor\\Reflection\\Php\\ProjectFactoryStrategies;\nuse phpDocumentor\\Reflection\\TypeResolver;\nuse PhpParser\\Lexer;\nuse PhpParser\\NodeTraverser;\nuse PhpParser\\NodeVisitor\\NameResolver;\nuse PhpParser\\ParserFactory;\nuse PhpParser\\PhpVersion;\nuse PhpParser\\PrettyPrinter\\Standard as PrettyPrinter;\n\n/**\n * Class for running snippets using phpdocumentor/reflection:v5.\n *\n * @internal\n */\nclass ReflectionHandlerV6\n{\n    private $descriptionFactory;\n    private $docBlockFactory;\n\n    public function __construct()\n    {\n        $this->descriptionFactory = $this->createDescriptionFactory();\n        $this->docBlockFactory = $this->createDocBlockFactory($this->descriptionFactory);\n    }\n\n    /**\n     * @param string $class\n     * @return DocBlock\n     */\n    public function createDocBlock($classOrMethod)\n    {\n        return $this->docBlockFactory->create($classOrMethod);\n    }\n\n    /**\n     * @param DocBlock $docBlock\n     * @return string\n     */\n    public function getDocBlockText(DocBlock $docBlock)\n    {\n        $description = $this->descriptionFactory->create(\n            $docBlock->getSummary() . \"\\n\\n\" . $docBlock->getDescription(),\n            $docBlock->getContext()\n        );\n        return $description->render();\n    }\n\n    /**\n     * @param array $files\n     * @return string[]\n     */\n    public function classes(array $files)\n    {\n        $projectFactory = $this->createProjectFactory();\n        $localFiles = [];\n        foreach ($files as $file) {\n            $localFiles[] = new LocalFile($file);\n        }\n        $project = $projectFactory->create('My Project', $localFiles);\n        $classes = [];\n        foreach ($files as $file) {\n            $classesInFile = $project->getFiles()[$file]->getClasses();\n            foreach ($classesInFile as $class) {\n                $classes[] = (string) $class->getFqsen();\n            }\n        }\n        return $classes;\n    }\n\n    /**\n     * @return ProjectFactory\n     */\n    public function createProjectFactory()\n    {\n        $phpVersion = PhpVersion::fromString('8.1');  // PHP 8.1.0\n        $parser = (new ParserFactory())->createForVersion($phpVersion);\n        $nodeTraverser = new NodeTraverser();\n        $nodeTraverser->addVisitor(new NameResolver());\n        $nodeTraverser->addVisitor(new ElementNameResolver());\n        $nodesFactory = new NodesFactory($parser, $nodeTraverser);\n\n        $docblockFactory = $this->createDocBlockFactory($this->createDescriptionFactory());\n\n        $methodStrategy =  new Factory\\Method($docblockFactory);\n\n        $strategies = new ProjectFactoryStrategies(\n            [\n                new Factory\\Namespace_(),\n                new Factory\\Class_($docblockFactory),\n                new Factory\\Enum_($docblockFactory),\n                new Factory\\EnumCase($docblockFactory, new PrettyPrinter()),\n                new Factory\\Define($docblockFactory, new PrettyPrinter()),\n                new Factory\\GlobalConstant($docblockFactory, new PrettyPrinter()),\n                new Factory\\ClassConstant($docblockFactory, new PrettyPrinter()),\n                new Factory\\File($docblockFactory, $nodesFactory),\n                new Factory\\Function_($docblockFactory),\n                new Factory\\Interface_($docblockFactory),\n                $methodStrategy,\n                new Factory\\Property($docblockFactory, new PrettyPrinter()),\n                new Factory\\Trait_($docblockFactory),\n                new Factory\\IfStatement(),\n                new TraitUse(),\n            ]\n        );\n\n        $strategies->addStrategy(\n            new Factory\\ConstructorPromotion($methodStrategy, $docblockFactory, new PrettyPrinter()),\n            1100\n        );\n        $strategies->addStrategy(new Noop(), -PHP_INT_MAX);\n\n        return new ProjectFactory($strategies);\n    }\n\n    /**\n     * @return DescriptionFactory\n     */\n    public function createDescriptionFactory()\n    {\n        $fqsenResolver      = new FqsenResolver();\n        $tagFactory         = new StandardTagFactory($fqsenResolver);\n        $descriptionFactory = new CoreDescriptionFactory($tagFactory);\n\n        $tagFactory->addService($descriptionFactory, DescriptionFactory::class);\n        $tagFactory->addService(new TypeResolver($fqsenResolver));\n\n        return $descriptionFactory;\n    }\n\n    /**\n     * @return DocBlockFactory\n     */\n    private function createDocBlockFactory($descriptionFactory)\n    {\n        $tagFactory = $descriptionFactory->getTagFactory();\n        return new DocBlockFactory($descriptionFactory, $tagFactory);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/RegexFileFilter.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\n/**\n * A regex exclude path\n */\nclass RegexFileFilter\n{\n    public $regex;\n\n    public function __construct($regex)\n    {\n        $this->regex = $regex;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Container.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet;\n\n/**\n * Class Container\n *\n * @experimental\n * @internal\n */\nclass Container\n{\n    public static $coverage;\n    public static $parser;\n\n    /**\n     * Reset the container statics.\n     *\n     * @experimental\n     * @internal\n     */\n    public static function reset()\n    {\n        self::$coverage = null;\n        self::$parser = null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Coverage/Coverage.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Coverage;\n\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Snippet;\n\n/**\n * Class Coverage\n *\n * @experimental\n * @internal\n */\nclass Coverage\n{\n    private static $snippetExcludeList = [\n        '/\\\\\\GcTestListener/',\n        '/\\\\\\Google\\\\\\Cloud\\\\\\Core\\\\\\Logger/',\n        '/\\\\\\Google\\\\\\Cloud\\\\\\Core\\\\\\PhpArray/',\n        '/\\\\\\Google\\\\\\Cloud\\\\\\Translate\\\\\\TranslateClient/',\n        '/\\\\\\Google\\\\\\Cloud\\\\\\Translate\\\\\\Connection\\\\\\Rest/',\n        '/\\\\\\Google\\\\\\Cloud\\\\\\Translate\\\\\\Connection\\\\\\ConnectionInterface/',\n    ];\n\n    /**\n     * @var ScannerInterface\n     */\n    protected $scanner;\n\n    /**\n     * @var Snippet[]\n     */\n    private $snippets = [];\n\n    /**\n     * @var string[]\n     */\n    private $covered = [];\n\n    /**\n     * @param ScannerInterface $scanner The scanner to use\n     *\n     * @experimental\n     * @internal\n     */\n    public function __construct(ScannerInterface $scanner)\n    {\n        $this->scanner = $scanner;\n    }\n\n    private function getSnippetExcludeList()\n    {\n        return static::$snippetExcludeList;\n    }\n\n    /**\n     * Creates a list of all snippets which should be covered.\n     *\n     * @return Snippet[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function buildListToCover()\n    {\n        $files = $this->scanner->files();\n        $classes = $this->scanner->classes($files, $this->getSnippetExcludeList());\n\n        $this->snippets = $this->scanner->snippets($classes);\n\n        return $this->snippets;\n    }\n\n    /**\n     * Mark a snippet as covered.\n     *\n     * @param string $identifier The identifier of the snippet being covered.\n     * @return void\n     *\n     * @experimental\n     * @internal\n     */\n    public function cover($identifier)\n    {\n        $this->covered[] = $identifier;\n    }\n\n    /**\n     * Return a list of all snippets not marked a covered.\n     *\n     * @return Snippet[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function uncovered()\n    {\n        return array_diff_key($this->snippets, array_flip($this->covered));\n    }\n\n    /**\n     * @param string|int $identifier\n     * @return Snippet|null\n     *\n     * @experimental\n     * @internal\n     */\n    public function cache($identifier)\n    {\n        return (array_key_exists($identifier, $this->snippets))\n            ? $this->snippets[$identifier]\n            : null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Coverage/ExcludeFilter.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Coverage;\n\nuse FilterIterator;\nuse Iterator;\n\n/**\n * Class ExcludeFilter is used to exclude directories from an iterable list\n *\n * @experimental\n * @internal\n */\nclass ExcludeFilter extends FilterIterator\n{\n    private $excludeDirs;\n\n    /**\n     * ExcludeFilter constructor.\n     * @param Iterator $iterator\n     * @param array $excludeDirs\n     */\n    public function __construct(Iterator $iterator, array $excludeDirs)\n    {\n        parent::__construct($iterator);\n        $this->excludeDirs = $excludeDirs;\n    }\n\n    /**\n     * @return bool Determines whether to accept or exclude a path\n     */\n    #[\\ReturnTypeWillChange]\n    public function accept()\n    {\n        // Accept the current item if we can recurse into it\n        // or it is a value starting with \"test\"\n        foreach ($this->excludeDirs as $excludeDir) {\n            if (strpos($this->current(), $excludeDir) !== false) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Coverage/Scanner.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Coverage;\n\nuse Google\\Cloud\\Core\\Testing\\FileListFilterIterator;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Parser;\nuse Google\\Cloud\\Core\\Testing\\Reflection\\ReflectionHandlerFactory;\n\n/**\n * Scan a directory for files, a set of files for classes, and a set of classes\n * for code snippets.\n *\n * @experimental\n * @internal\n */\nclass Scanner implements ScannerInterface\n{\n    /**\n     * @var Parser\n     */\n    protected $parser;\n\n    /**\n     * @var array\n     */\n    private $basePath;\n\n    /**\n     * @var array\n     */\n    private $exclude;\n\n    /**\n     * @param Parser $parser An instance of the Snippet Parser.\n     * @param \\Iterator|string $basePath The path(s) to scan for PHP files.\n     * @param array $exclude A list of patterns to exclude.\n     *\n     * @experimental\n     * @internal\n     */\n    public function __construct(Parser $parser, $basePath, array $exclude = [])\n    {\n        $this->parser = $parser;\n        if (is_string($basePath)) {\n            $basePath = [$basePath];\n        }\n        $this->basePath = $basePath;\n        $this->exclude = $exclude;\n    }\n\n    /**\n     * Retrieve a list of PHP files to scan.\n     *\n     * @return string[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function files()\n    {\n        $files = [];\n\n        foreach ($this->basePath as $path) {\n            $directoryIterator = new \\RecursiveDirectoryIterator($path);\n            $iterator = new \\RecursiveIteratorIterator($directoryIterator);\n            $fileList = new FileListFilterIterator(\n                $path,\n                $iterator,\n                ['php'],\n                [\n                    '/tests/'\n                ],\n                $this->exclude\n            );\n\n            foreach ($fileList as $item) {\n                array_push($files, realPath($item->getPathName()));\n            }\n        }\n\n        return $files;\n    }\n\n    private function checkExclude($className, array $exclude)\n    {\n        foreach ($exclude as $pattern) {\n            if (preg_match($pattern, $className)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Retrieve a list of classes in the given PHP files.\n     *\n     * @param array $files\n     * @param array $exclude\n     * @return string[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function classes(array $files, array $exclude = [])\n    {\n        $handler = ReflectionHandlerFactory::create();\n        $classes = [];\n        foreach ($handler->classes($files) as $class) {\n            if ($this->checkExclude($class, $exclude)) {\n                continue;\n            }\n            $classes[] = $class;\n        }\n        return $classes;\n    }\n\n    /**\n     * Get a list of all snippets from the given classes.\n     *\n     * @return \\Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Snippet[]\n     *\n     * @experimental\n     * @internal\n     * @throws \\ReflectionException\n     */\n    public function snippets(array $classes)\n    {\n        $snippets = [];\n        foreach ($classes as $class) {\n            try {\n                $snippets = array_merge(\n                    $snippets,\n                    $this->parser->allExamples(new \\ReflectionClass($class))\n                );\n            } catch (\\ReflectionException $e) {\n                throw new \\RuntimeException(sprintf(\n                    \"Error in class %s: %s\",\n                    $class,\n                    $e->getMessage()\n                ));\n            }\n        }\n\n        return $snippets;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Coverage/ScannerInterface.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Coverage;\n\n/**\n * Interface ScannerInterface\n *\n * @experimental\n * @internal\n */\ninterface ScannerInterface\n{\n    /**\n     * Retrieve a list of PHP files to scan.\n     *\n     * @return string[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function files();\n\n    /**\n     * Retrieve a list of classes in the given PHP files.\n     *\n     * @param array $files\n     * @param array $exclude\n     * @return string[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function classes(array $files, array $exclude = []);\n\n    /**\n     * Get a list of all snippets from the given classes.\n     *\n     * @return \\Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Snippet[]\n     *\n     * @experimental\n     * @internal\n     */\n    public function snippets(array $classes);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Fixtures.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet;\n\n/**\n * Class containing static functions to provide path to shared test fixtures\n *\n * @experimental\n * @internal\n */\nclass Fixtures\n{\n    /**\n     * @return string Path the keyfile-stub.json fixture\n     */\n    public static function KEYFILE_STUB_FIXTURE()\n    {\n        return __DIR__ . '/keyfile-stub.json';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Parser/InvokeResult.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Parser;\n\n/**\n * Class InvokeResult\n */\nclass InvokeResult\n{\n    private $returnVal;\n    private $output;\n\n    /**\n     * InvokeResult constructor.\n     *\n     * @param mixed $returnVal\n     * @param mixed $output\n     */\n    public function __construct($returnVal, $output)\n    {\n        $this->returnVal = $returnVal;\n        $this->output = $output;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function returnVal()\n    {\n        return $this->returnVal;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function output()\n    {\n        return $this->output;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Parser/Parser.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Parser;\n\nuse Google\\Cloud\\Core\\Testing\\Reflection\\ReflectionHandlerFactory;\nuse DOMDocument;\nuse Parsedown;\nuse ReflectionClass;\nuse ReflectionMethod;\nuse phpDocumentor\\Reflection\\DocBlock;\n\n/**\n * A class for parsing code snippets from a class and its methods.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Parser;\n *\n * $parser = new Parser;\n * ```\n */\nclass Parser\n{\n    const SNIPPET_NAME_REGEX = '/\\/\\/\\s?\\[snippet\\=(\\w{0,})\\]/';\n\n    private $reflection;\n\n    public function __construct()\n    {\n        $this->reflection = ReflectionHandlerFactory::create();\n    }\n\n    /**\n     * Get a snippet from a class.\n     *\n     * Example:\n     * ```\n     * use Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Parser;\n     *\n     * $snippet = $parser->classExample(Parser::class);\n     * ```\n     *\n     * @param string $class the name of the class\n     * @param int|string $index The index of the example to return.\n     * @return Snippet\n     * @throws \\Exception\n     */\n    public function classExample($class, $index = 0)\n    {\n        $class = new ReflectionClass($class);\n        $examples = $this->examplesFromClass($class);\n\n        $result = array_filter($examples, function ($example) use ($index) {\n            return ($example->index() == $index);\n        });\n\n        if (empty($result)) {\n            throw new \\Exception(sprintf(\n                'Given snippet index %d does not exist for class %s',\n                $index,\n                $class->getName()\n            ));\n        }\n\n        return current($result);\n    }\n\n    /**\n     * Get a snippet from a method.\n     *\n     * Example:\n     * ```\n     * use Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Parser;\n     *\n     * $snippet = $parser->methodExample(Parser::class, 'methodExample');\n     * ```\n     *\n     * ```\n     * use Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Parser;\n     *\n     * // Get the 2nd example (index=1)\n     * $snippet = $parser->methodExample(Parser::class, 'methodExample', 1);\n     * ```\n     *\n     * @param string $class The name of the class.\n     * @param string $method The name of the method.\n     * @param int $index The 0-indexed example to return.\n     * @return Snippet\n     * @throws Exception\n     */\n    public function methodExample($class, $method, $index = 0)\n    {\n        $examples = $this->examplesFromMethod($class, $method);\n\n        $result = array_filter($examples, function ($example) use ($index) {\n            return ($example->index() === $index);\n        });\n\n        if (empty($result)) {\n            throw new \\Exception(sprintf(\n                'Given snippet index %d does not exist for method %s::%s',\n                $index,\n                $class,\n                $method\n            ));\n        }\n\n        return current($result);\n    }\n\n    /**\n     * Retrieve all examples from a class Doc Block.\n     *\n     * Example:\n     * ```\n     * $examples = $parser->examplesFromClass($parser);\n     * ```\n     *\n     * @param object|ReflectionClass $class An instance or reflector of the\n     *        class to parse examples from.\n     * @return array\n     */\n    public function examplesFromClass($class)\n    {\n        if (!($class instanceof ReflectionClass)) {\n            $class = new ReflectionClass($class);\n        }\n\n        if (!$class->getDocComment()) {\n            return [];\n        }\n\n        $doc = $this->reflection->createDocBlock($class);\n\n        $magic = [];\n        if ($doc->getTags()) {\n            $magicMethods = array_filter($doc->getTags(), function ($tag) {\n                return ($tag->getName() === 'method');\n            });\n\n            $methods = $this->buildMagicMethods($magicMethods, $class->getName());\n\n            foreach ($methods as $method) {\n                $magicExamples = $this->examples(\n                    $method['doc'],\n                    $class->getName() .'::'. $method['name'],\n                    $class->getFileName(),\n                    $class->getStartLine()\n                );\n\n                foreach ($magicExamples as $ex) {\n                    $magic[$ex->identifier()] = $ex;\n                }\n            }\n        }\n\n        return $this->examples(\n            $doc,\n            $class->getName(),\n            $class->getFileName(),\n            $class->getStartLine(),\n            $magic\n        );\n    }\n\n    /**\n     * Retrieve all examples from a method's Doc Block.\n     *\n     * Example:\n     * ```\n     * $examples = $parser->examplesFromMethod($parser, 'examplesFromMethod');\n     * ```\n     *\n     * @param object|string $class An instance of the class to parse examples,\n     *        or the name of the class.\n     * @param string|ReflectionMethod $method The name of the method to parse\n     *        examples from.\n     * @return array\n     */\n    public function examplesFromMethod($class, $method)\n    {\n        if (!($method instanceof ReflectionMethod)) {\n            $method = new ReflectionMethod($class, $method);\n        }\n\n        if (!$method->isPublic()) {\n            return [];\n        }\n\n        if (!$method->getDocComment()) {\n            return [];\n        }\n\n        $doc = $this->reflection->createDocBlock($method);\n\n        $parent = $method->getDeclaringClass();\n        $class = $parent->getName();\n\n        return $this->examples(\n            $doc,\n            $class .'::'. $method->getName(),\n            $method->getFileName(),\n            $method->getStartLine()\n        );\n    }\n\n    /**\n     * Retrieve all examples from a class and its methods.\n     *\n     * Example:\n     * ```\n     * $examples = $parser->allExamples($parser);\n     * ```\n     *\n     * @param object|ReflectionClass $class An instance or reflector of the class to parse.\n     * @return array\n     */\n    public function allExamples($class)\n    {\n        if (!($class instanceof ReflectionClass)) {\n            $class = new ReflectionClass($class);\n        }\n\n        $snippets = $this->examplesFromClass($class);\n\n        $methods = $class->getMethods();\n        foreach ($methods as $method) {\n            if ($method->getDeclaringClass()->name !== $class->getName()) {\n                continue;\n            }\n\n            $snippets = array_merge($snippets, $this->examplesFromMethod($class, $method));\n        }\n\n        return $snippets;\n    }\n\n    /**\n     * Parse examples from a DocBlock object.\n     *\n     * @param DocBlock $docBlock The DocBlock to parse\n     * @param string $file The filename the docblock is in\n     * @param int $line The line where the tested method or class is declared.\n     * @return array\n     */\n    public function examples(DocBlock $docBlock, $fullyQualifiedName, $file, $line, array $magicMethods = [])\n    {\n        $text = $this->reflection->getDocBlockText($docBlock);\n        $parts = [];\n\n        if (strpos($text, 'Example:' . PHP_EOL . '```') !== false) {\n            $parts = explode('Example:' . PHP_EOL, $text);\n        } else {\n            return [];\n        }\n\n        $converter = new Parsedown;\n        $document = new DOMDocument;\n\n        $parsedText = $converter->text($parts[1]);\n        $document->loadHTML($parsedText);\n\n        $examples = $document->getElementsByTagName('code');\n\n        $index = 0;\n        $res = [];\n        foreach ($examples as $example) {\n            $name = $this->extractSnippetName($example->textContent);\n\n            $indexOrName = $name;\n            if (!$name) {\n                $indexOrName = $index;\n            }\n\n            $identifier = $this->createIdentifier($fullyQualifiedName, $indexOrName);\n            $snippet = new Snippet($identifier, [\n                'content' => $example->textContent,\n                'fqn' => $fullyQualifiedName,\n                'index' => $indexOrName,\n                'name' => $name,\n                'file' => $file,\n                'line' => $line\n            ]);\n\n            $res[$identifier] = $snippet;\n            $index++;\n        }\n\n        $res = array_merge($res, $magicMethods);\n\n        return $res;\n    }\n\n    /**\n     * Create identifier\n     *\n     * @param string $fqn\n     * @param int|string $indexOrName\n     * @return string\n     */\n    public function createIdentifier($fqn, $indexOrName)\n    {\n        return sha1($fqn . $indexOrName);\n    }\n\n    private function extractSnippetName($content)\n    {\n        $matches = [];\n        if (!preg_match(self::SNIPPET_NAME_REGEX, $content, $matches)) {\n            return null;\n        }\n\n        return $matches[1];\n    }\n\n    private function buildMagicMethods($magicMethods, $className)\n    {\n        $res = [];\n        foreach ($magicMethods as $method) {\n            $description = $method->getDescription();\n\n            if (is_null($description)) {\n                continue;\n            }\n\n            $class = substr($method->getDescription(), 1, -1);\n            $doc = $this->reflection->createDocBlock($class);\n\n            $res[] = [\n                'name' => $method->getMethodName(),\n                'doc' => $doc\n            ];\n        }\n\n        return $res;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/Parser/Snippet.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet\\Parser;\n\n/**\n * Represents a single code snippet\n */\nclass Snippet implements \\JsonSerializable\n{\n    /**\n     * @var string\n     */\n    private $identifier;\n\n    /**\n     * @var array\n     */\n    private $config;\n\n    /**\n     * @var array\n     */\n    private $locals = [];\n\n    /**\n     * @var array\n     */\n    private $use = [];\n\n    /**\n     * Create a snippet\n     *\n     * @param string $identifier The snippet ID\n     * @param array $config The snippet config\n     */\n    public function __construct($identifier, array $config = [])\n    {\n        $this->identifier = $identifier;\n        $this->config = $config + [\n            'content' => '',\n            'fqn' => '',\n            'index' => 0,\n            'file' => '',\n            'line' => 0,\n            'name' => null\n        ];\n    }\n\n    /**\n     * A unique identifier for the snippet.\n     *\n     * This identifier is deterministic and will remain constant unless the\n     * snippet is modified or moved.\n     *\n     * @return string\n     */\n    public function identifier()\n    {\n        return $this->identifier;\n    }\n\n    /**\n     * The file in which the snippet is found.\n     *\n     * @return string\n     */\n    public function file()\n    {\n        return $this->config['file'];\n    }\n\n    /**\n     * The Snippet fully-qualified name.\n     *\n     * @return string\n     */\n    public function fqn()\n    {\n        return $this->config['fqn'];\n    }\n\n    /**\n     * The line number where the snippet's method or class is declared.\n     *\n     * Note that this is NOT the line number where the snippet is declared. It\n     * indicates the method or class which the snippet annotates.\n     *\n     * @return int\n     */\n    public function line()\n    {\n        return $this->config['line'];\n    }\n\n    /**\n     * The snippet content.\n     *\n     * @return string\n     */\n    public function content()\n    {\n        return $this->config['content'];\n    }\n\n    /**\n     * The Snippet Index\n     *\n     * @return int\n     */\n    public function index()\n    {\n        return $this->config['index'];\n    }\n\n    /**\n     * The snippet name\n     *\n     * @return string\n     */\n    public function name()\n    {\n        return $this->config['name'];\n    }\n\n    /**\n     * Eval the snippet and return the result.\n     *\n     * @return mixed\n     */\n    public function invoke($returnVar = null)\n    {\n        $content = $this->config['content'];\n\n        $return = ($returnVar)\n            ? sprintf('return %s;', $this->createReturnVar($returnVar))\n            : '';\n\n        $use = [];\n        foreach ($this->use as $class) {\n            $use[] = 'use '. $class .';';\n        }\n\n        if (!empty($use)) {\n            $content = implode(\"\\n\", $use) . $content;\n        }\n\n        $cb = function ($return) use ($content) {\n            extract($this->locals);\n\n            try {\n                ob_start();\n                $res = eval($content .\"\\n\\n\". $return);\n                $out = ob_get_clean();\n            } catch (\\Exception $e) {\n                ob_end_clean();\n                throw $e;\n            }\n\n            return new InvokeResult($res, $out);\n        };\n\n        return $cb($return);\n    }\n\n    /**\n     * Add a local variable to make available in the snippet execution scope.\n     *\n     * @param string $name The variable name\n     * @param mixed $value The variable value\n     * @return void\n     */\n    public function addLocal($name, $value)\n    {\n        $this->locals[$name] = $value;\n    }\n\n    /**\n     * Add a local variables to make available in the snippet execution scope.\n     *\n     * @param array<string, mixed> $locals\n     * @return void\n     */\n    public function addLocals(array $locals)\n    {\n        foreach ($locals as $name => $value) {\n            $this->addLocal($name, $value);\n        }\n    }\n\n    /**\n     * Add a `use` statement for a class.\n     *\n     * @param string $name The class name to import.\n     * @return void\n     */\n    public function addUse($name)\n    {\n        $this->use[] = $name;\n    }\n\n    /**\n     * Replace a line with new code.\n     *\n     * Hopefully this is obvious, but be careful using this, and only use it\n     * when no other feasible options present themselves. It's pretty easy to\n     * make your test useless when you're overwriting the thing you are trying\n     * to test.\n     *\n     * This is provided for cases when a snippet relies on a global, or on\n     * something else which can not be overridden or mocked.\n     *\n     * @param int $line The line number (0-indexed) to replace.\n     * @param string $content The PHP code to inject.\n     * @return void\n     */\n    public function setLine($line, $content)\n    {\n        $snippet = explode(\"\\n\", $this->config['content']);\n        $snippet[$line] = $content;\n\n        $this->config['content'] = implode(\"\\n\", $snippet);\n    }\n\n    /**\n     * Inject new code after a given line.\n     *\n     * Hopefully this is obvious, but be careful using this, and only use it\n     * when no other feasible options present themselves. It's pretty easy to\n     * make your test useless when you're modifying the thing you are trying\n     * to test.\n     *\n     * This is provided for cases when a snippet relies on a global, or on\n     * something else which can not be overridden or mocked.\n     *\n     * @param int $line The line number (0-indexed) to write in after.\n     * @param string $content The PHP code to inject.\n     * @return void\n     */\n    public function insertAfterLine($line, $content)\n    {\n        $snippet = explode(\"\\n\", $this->config['content']);\n        array_splice($snippet, $line+1, 0, $content);\n\n        $this->config['content'] = implode(\"\\n\", $snippet);\n    }\n\n    /**\n     * Replace a string in the snippet with a new one.\n     *\n     * Hopefully this is obvious, but be careful using this, and only use it\n     * when no other feasible options present themselves. It's pretty easy to\n     * make your test useless when you're modifying the thing you are trying\n     * to test.\n     *\n     * This is provided for cases when a snippet relies on a global, or on\n     * something else which can not be overridden or mocked.\n     *\n     * @param string $old The string to be replaced.\n     * @param string $new The new string to insert.\n     * @return void\n     */\n    public function replace($old, $new)\n    {\n        $this->config['content'] = str_replace($old, $new, $this->config['content']);\n    }\n\n    /**\n     * Find something with a regex and replace it.\n     *\n     * Hopefully this is obvious, but be careful using this, and only use it\n     * when no other feasible options present themselves. It's pretty easy to\n     * make your test useless when you're modifying the thing you are trying\n     * to test.\n     *\n     * This is provided for cases when a snippet relies on a global, or on\n     * something else which can not be overridden or mocked.\n     *\n     * @param string $pattern The regex pattern to search for.\n     * @param string $new The new string to insert.\n     * @return void\n     */\n    public function regexReplace($pattern, $new)\n    {\n        $this->config['content'] = preg_replace($pattern, $new, $this->config['content']);\n    }\n\n    /**\n     * Serialize to json\n     *\n     * @return array\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return $this->config;\n    }\n\n    private function createReturnVar($returnVar)\n    {\n        if (is_array($returnVar)) {\n            foreach ($returnVar as $index => $var) {\n                $returnVar[$index] = '$'.$var;\n            }\n\n            return '['. implode(',', $returnVar) .']';\n        }\n\n        return '$'. $returnVar;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/SnippetTestCase.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\Snippet;\n\nuse Google\\Cloud\\Core\\Testing\\CheckForClassTrait;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Container;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Snippet;\nuse PHPUnit\\Framework\\TestCase;\n\n/**\n * Provide helpers for Snippet tests.\n *\n * Snippet test cases should extend this class.\n *\n * @experimental\n * @internal\n */\nclass SnippetTestCase extends TestCase\n{\n    const PROJECT = 'my-awesome-project';\n\n    use CheckForClassTrait;\n\n    private static $coverage;\n    private static $parser;\n\n    /**\n     * Run to set up class before testing\n     *\n     * @experimental\n     * @internal\n     */\n    public static function setUpBeforeClass(): void\n    {\n        self::$coverage = Container::$coverage;\n        self::$parser = Container::$parser;\n    }\n\n    /**\n     * Retrieve a snippet from a class-level docblock.\n     *\n     * @param string $class The class name.\n     * @param string|int $indexOrName The index of the snippet, or its name.\n     * @return Snippet\n     *\n     * @experimental\n     * @internal\n     */\n    public static function snippetFromClass($class, $indexOrName = 0)\n    {\n        $identifier = self::$parser->createIdentifier($class, $indexOrName);\n\n        $snippet = self::$coverage->cache($identifier);\n        if (!$snippet) {\n            $snippet = self::$parser->classExample($class, $indexOrName);\n        }\n\n        self::$coverage->cover($snippet->identifier());\n\n        return clone $snippet;\n    }\n\n    /**\n     * Retrieve a snippet from a magic method docblock (i.e. `@method` tag\n     * nexted inside a class-level docblock).\n     *\n     * @param string $class The class name\n     * @param string $method The method name\n     * @param string|int $indexOrName The index of the snippet, or its name.\n     * @return Snippet\n     *\n     * @experimental\n     * @internal\n     */\n    public static function snippetFromMagicMethod($class, $method, $indexOrName = 0)\n    {\n        $name = $class .'::'. $method;\n        $identifier = self::$parser->createIdentifier($name, $indexOrName);\n\n        $snippet = self::$coverage->cache($identifier);\n        if (!$snippet) {\n            throw new \\Exception('Magic Method '. $name .' was not found');\n        }\n\n        self::$coverage->cover($identifier);\n\n        return clone $snippet;\n    }\n\n    /**\n     * Retrieve a snippet from a method docblock.\n     *\n     * @param string $class The class name\n     * @param string $method The method name\n     * @param string|int $indexOrName The index of the snippet, or its name.\n     * @return Snippet\n     *\n     * @experimental\n     * @internal\n     */\n    public static function snippetFromMethod($class, $method, $indexOrName = 0)\n    {\n        $name = $class .'::'. $method;\n        $identifier = self::$parser->createIdentifier($name, $indexOrName);\n\n        $snippet = self::$coverage->cache($identifier);\n        if (!$snippet) {\n            $snippet = self::$parser->methodExample($class, $method, $indexOrName);\n        }\n\n        self::$coverage->cover($identifier);\n\n        return clone $snippet;\n    }\n\n    /**\n     * Retrieve a snippet from a markdown file.\n     *\n     * @param string $fileName The path to the file\n     * @param string $header The markdown header the snippet is under\n     * @param int $index The index of the snippet\n     * @return Snippet\n     *\n     * @experimental\n     * @internal\n     */\n    public static function snippetFromMarkdown(string $fileName, string $header = '', int $index = 0)\n    {\n        // Normalize line endings to \\n to make regex handling consistent across platforms\n        $markdown = str_replace(\n            [\"\\r\\n\", \"\\r\"],\n            \"\\n\",\n            file_get_contents($fileName)\n        );\n\n        // select by header\n        if ($header) {\n            $pattern = '/^#+\\s*' . preg_quote($header, '/') . '\\s*\\n([\\s\\S]*?)(?=^#+.*$|\\Z)/m';\n            if (!preg_match($pattern, $markdown, $matches)) {\n                throw new \\Exception('Heeader \"' . $header . '\" not found in markdown file ' . basename($fileName));\n            }\n            $markdown = trim($matches[1]);\n        }\n\n        /**\n         * Regex Explanation:\n         * * (?m)        : Enable multi-line mode (^ matches start of line).\n         * ^             : Start of a line.\n         * (\\s*)         : Group 1: Capture indentation.\n         * (`{3,}|~{3,}) : Group 2: Capture the fence (3+ backticks or tildes).\n         * [ \\t]* : Consume optional spaces.\n         * (.*?)         : Group 3: Capture the language (and/or extra info) non-greedily.\n         * \\n            : End of the opening line.\n         * ([\\s\\S]*?)    : Group 4: Content (non-greedy).\n         * \\n            : Newline before closing fence.\n         * \\1            : Match exact indentation from Group 1.\n         * \\2            : Match exact fence from Group 2.\n         * \\s* : Consume any trailing whitespace/newlines on the closing line.\n         */\n        $pattern = '/^(?m)(\\s*)(`{3,}|~{3,})[ \\t]*(.*?)\\n([\\s\\S]*?)\\1\\2\\s*$/m';\n        $snippets = [];\n        if (!preg_match_all($pattern, $markdown, $matches, PREG_SET_ORDER)) {\n            throw new \\Exception('No snippets found in markdown file ' . basename($fileName));\n        }\n        foreach ($matches as $i => $match) {\n            // Group 3 is the language info string. Trim it to remove extra spaces.\n            $language = isset($match[3]) ? trim($match[3]) : '';\n\n            // Fallback to 'text' if empty\n            if ($language === '') {\n                $language = 'text';\n            }\n\n            // Group 4 is the actual code content\n            $code = $match[4];\n\n            $snippets[] = new Snippet($fileName . '-' . $i, [\n                'content' => $code,\n                'file' => $fileName,\n                'index' => $i,\n                'name' => strtolower($language),\n            ]);\n        }\n\n        if (!isset($snippets[$index])) {\n            throw new \\Exception('No snippet found in markdown file ' . basename($fileName) . ' at index ' . $index);\n        }\n\n        return clone $snippets[$index];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/Snippet/keyfile-stub.json",
    "content": "{\n  \"type\": \"service_account\",\n  \"project_id\": \"my-awesome-project\",\n  \"private_key_id\": \"\",\n  \"private_key\": \"\",\n  \"client_email\": \"\",\n  \"client_id\": \"\",\n  \"auth_uri\": \"\",\n  \"token_uri\": \"\",\n  \"auth_provider_x509_cert_url\": \"\",\n  \"client_x509_cert_url\": \"\"\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/StubTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\n/**\n * Trait StubTrait\n *\n * @experimental\n * @internal\n */\ntrait StubTrait\n{\n    /**\n     * @param $prop\n     * @return mixed\n     *\n     * @experimental\n     * @internal\n     */\n    public function ___getProperty($prop)\n    {\n        $property = $this->___getPropertyReflector($prop);\n\n        $property->setAccessible(true);\n        return $property->getValue($this);\n    }\n\n    /**\n     * @param $prop\n     * @param $value\n     *\n     * @experimental\n     * @internal\n     */\n    public function ___setProperty($prop, $value)\n    {\n        if (!in_array($prop, json_decode($this->___props))) {\n            throw new \\RuntimeException(sprintf('Property %s cannot be overloaded', $prop));\n        }\n\n        $property = $this->___getPropertyReflector($prop);\n\n        $property->setAccessible(true);\n        $property->setValue($this, $value);\n    }\n\n    private function ___getPropertyReflector($property)\n    {\n        $trait = new \\ReflectionClass($this);\n        $ref = $trait->getParentClass() ?: $trait;\n\n        // wrap this in a loop that will iterate up a class hierarchy to try\n        // and find a private property.\n        $keepTrying = true;\n        do {\n            try {\n                $property = $ref->getProperty($property);\n                $keepTrying = false;\n            } catch (\\ReflectionException $e) {\n                if ($ref->getParentClass()) {\n                    $ref = $ref->getParentClass();\n                } else {\n                    throw new \\BadMethodCallException($e->getMessage());\n                }\n            }\n        } while ($keepTrying);\n\n        return $property;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/System/DeletionQueue.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\System;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\ExponentialBackoff;\n\n/**\n * Manage a queue of items to be cleaned up at the end of the test run.\n *\n * @experimental\n * @internal\n */\nclass DeletionQueue\n{\n    /**\n     * @var callable[]\n     */\n    private $queue = [];\n\n    /**\n     * @var bool\n     */\n    private $acceptAllInputs;\n\n    /**\n     * @param bool $acceptAllInputs If false, only callables or objects with\n     *        `delete` methods are allowed. **Defaults to** `false`.\n     *\n     * @experimental\n     * @internal\n     */\n    public function __construct($acceptAllInputs = false)\n    {\n        $this->acceptAllInputs = $acceptAllInputs;\n    }\n\n    /**\n     * Add an item to be cleaned up.\n     *\n     * @param mixed $toDelete Unless the class was created with\n     *        `$acceptAllInputs = true`, either a callable with no arguments, or\n     *        an object with a `delete` method.\n     * @return void\n     *\n     * @experimental\n     * @internal\n     */\n    public function add($toDelete)\n    {\n        if (!$this->acceptAllInputs) {\n            if (!is_callable($toDelete) && !method_exists($toDelete, 'delete')) {\n                throw new \\BadMethodCallException(\n                    'Deletion Queue requires a callable, or an object with a `delete` method.'\n                );\n            }\n\n            if (!is_callable($toDelete)) {\n                $toDelete = function () use ($toDelete) {\n                    $toDelete->delete();\n                };\n            }\n        }\n\n        $this->queue[] = $toDelete;\n    }\n\n    /**\n     * Process all items in the deletion queue.\n     *\n     * @return void\n     * @throws ApiException\n     *\n     * @experimental\n     * @internal\n     */\n    public function process(?callable $action = null)\n    {\n        if ($action) {\n            $action($this->queue);\n        } else {\n            $backoff = new ExponentialBackoff(8);\n\n            foreach ($this->queue as $item) {\n                $backoff->execute(function () use ($item) {\n                    try {\n                        call_user_func($item);\n                    } catch (NotFoundException $e) {\n                    } catch (ApiException $apiException) {\n                        if ($apiException->getStatus() !== 'NOT_FOUND') {\n                            throw $apiException;\n                        }\n                    }\n                });\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/System/KeyManager.php",
    "content": "<?php\n/**\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\System;\n\nuse Google\\Cloud\\Core\\Exception\\ConflictException;\nuse Google\\Cloud\\Core\\RequestWrapper;\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Manage KMS keys used for system tests.\n */\nclass KeyManager\n{\n    const DEFAULT_LOCATION = 'us-west1';\n\n    private $keyFile;\n    private $serviceAccountEmail;\n    private $projectId;\n    private $requestWrapper;\n    private $location;\n\n    public function __construct(array $keyFile, $serviceAccountEmail = null, $projectId = null, $location = null)\n    {\n        $this->keyFile = $keyFile;\n        $this->serviceAccountEmail = $serviceAccountEmail\n            ?: $keyFile['client_email'];\n        $this->projectId = $projectId\n            ?: $keyFile['project_id'];\n        $this->setLocation($location ?: self::DEFAULT_LOCATION);\n\n        $this->requestWrapper = new RequestWrapper([\n            'keyFile' => $this->keyFile,\n            'scopes' => ['https://www.googleapis.com/auth/cloud-platform']\n        ]);\n    }\n\n    /**\n     * Set the service account email used for IAM management.\n     *\n     * @param string $serviceAccountEmail\n     */\n    public function setServiceAccountEmail($serviceAccountEmail)\n    {\n        $this->serviceAccountEmail = $serviceAccountEmail;\n    }\n\n    /**\n     * Set keyring location.\n     *\n     * Location name may be in upper or lower case.\n     *\n     * @param string $location\n     */\n    public function setLocation($location)\n    {\n        $this->location = strtolower($location);\n    }\n\n    /**\n     * Get the project data.\n     *\n     * @param string $projectId [optional] If not provided, uses ID given in\n     *        constructor or keyfile.\n     * @return array\n     */\n    public function getProject($projectId = null)\n    {\n        $projectId = $projectId ?: $this->projectId;\n        $uri = 'https://cloudresourcemanager.googleapis.com/v1/projects/%s';\n\n        $res = $this->requestWrapper->send(\n            new Request(\n                'GET',\n                sprintf($uri, $projectId)\n            )\n        );\n\n        return json_decode($res->getBody(), true);\n    }\n\n    /**\n     * A helper to get KMS keys and set correct permissions.\n     *\n     * @param string $keyRingId\n     * @param string[] $keyIds\n     * @return array\n     */\n    public function getKeyNames($keyRingId, array $keyIds)\n    {\n        $keyNames = [];\n\n        $this->buildKeyRing($keyRingId);\n\n        foreach ($keyIds as $keyId) {\n            $keyNames[] = $this->getCryptoKeyName(\n                $keyRingId,\n                $keyId\n            );\n        }\n\n        return $keyNames;\n    }\n\n    /**\n     * @param string $keyRingId\n     */\n    private function buildKeyRing($keyRingId)\n    {\n        try {\n            $this->requestWrapper->send(\n                new Request(\n                    'POST',\n                    sprintf(\n                        'https://cloudkms.googleapis.com/v1/projects/%s/locations/%s/keyRings?keyRingId=%s',\n                        $this->projectId,\n                        $this->location,\n                        $keyRingId\n                    )\n                )\n            );\n        } catch (ConflictException $ex) {\n            // If it already exists, great!\n        }\n    }\n\n    /**\n     * @param string $keyRingId\n     * @param string $cryptoKeyId\n     * @return string\n     */\n    private function getCryptoKeyName(\n        $keyRingId,\n        $cryptoKeyId\n    ) {\n        $name = null;\n\n        try {\n            $uri = 'https://cloudkms.googleapis.com/v1/projects/%s/locations/%s/keyRings/%s/cryptoKeys?cryptoKeyId=%s';\n\n            $response = $this->requestWrapper->send(\n                new Request(\n                    'POST',\n                    sprintf(\n                        $uri,\n                        $this->projectId,\n                        $this->location,\n                        $keyRingId,\n                        $cryptoKeyId\n                    ),\n                    [],\n                    json_encode(['purpose' => 'ENCRYPT_DECRYPT'])\n                )\n            );\n\n            $name = json_decode((string) $response->getBody(), true)['name'];\n        } catch (ConflictException $ex) {\n            $name = sprintf(\n                'projects/%s/locations/%s/keyRings/%s/cryptoKeys/%s' ,\n                $this->projectId,\n                $this->location,\n                $keyRingId,\n                $cryptoKeyId\n            );\n        }\n\n        $policy = [\n            'policy' => [\n                'bindings' => [\n                    [\n                        'role' => 'roles/cloudkms.cryptoKeyEncrypterDecrypter',\n                        'members' => [\n                            \"serviceAccount:\" . $this->serviceAccountEmail\n                        ]\n                    ]\n                ]\n            ]\n        ];\n\n        $uri = 'https://cloudkms.googleapis.com/v1/projects/%s/locations/' .\n            '%s/keyRings/%s/cryptoKeys/%s:setIamPolicy';\n        $this->requestWrapper->send(\n            new Request(\n                'POST',\n                sprintf(\n                    $uri,\n                    $this->projectId,\n                    $this->location,\n                    $keyRingId,\n                    $cryptoKeyId\n                ),\n                [],\n                json_encode($policy)\n            )\n        );\n\n        return $name;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/System/SystemTestCase.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing\\System;\n\nuse Google\\Cloud\\BigQuery\\BigQueryClient;\nuse Google\\Cloud\\BigQuery\\Dataset;\nuse Google\\Cloud\\Core\\Exception\\BadRequestException;\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\nuse Google\\Cloud\\Core\\ExponentialBackoff;\nuse Google\\Cloud\\PubSub\\PubSubClient;\nuse Google\\Cloud\\PubSub\\Topic;\nuse Google\\Cloud\\Storage\\Bucket;\nuse Google\\Cloud\\Storage\\StorageClient;\nuse Google\\Cloud\\Core\\Testing\\System\\DeletionQueue;\nuse PHPUnit\\Framework\\TestCase;\n\n/**\n * SystemTestCase can be extended to implement system tests\n *\n * @experimental\n * @internal\n */\nabstract class SystemTestCase extends TestCase\n{\n    protected static $deletionQueue;\n\n    private static $emulatedClasses = [];\n    private static $emulatedClassPrefixes = [];\n\n    /**\n     * Set up the deletion queue\n     *\n     * @experimental\n     * @internal\n     */\n    public static function setupQueue()\n    {\n        if (!self::$deletionQueue) {\n            self::$deletionQueue = new DeletionQueue;\n        }\n    }\n\n    /**\n     * Process the deletion queue\n     *\n     * @experimental\n     * @internal\n     */\n    public static function processQueue()\n    {\n        self::$deletionQueue->process();\n    }\n\n    /**\n     * Create a random integer ID for test entities.\n     *\n     * @return int\n     *\n     * @experimental\n     * @internal\n     */\n    public static function randId()\n    {\n        return rand(1, 9999999);\n    }\n\n    /**\n     * Create a bucket and enqueue it for deletion.\n     *\n     * This method provides a means of creating a bucket with pre-configured\n     * flush+delete functionality. Use in place of `StorageClient::createBucket()`.\n     *\n     * When inserting objects into a bucket created with this method, you do NOT need\n     * to enqueue those objects for deletion or concern yourself with order of\n     * operations.\n     *\n     * @param StorageClient $client\n     * @param string $bucketName\n     * @param array $options\n     * @return Bucket\n     * @throws GoogleException\n     *\n     * @experimental\n     * @internal\n     */\n    public static function createBucket(StorageClient $client, $bucketName, array $options = [])\n    {\n        $backoff = new ExponentialBackoff(8, function ($ex) {\n            return !($ex instanceof BadRequestException);\n        });\n        $bucket = $backoff->execute(function () use ($client, $bucketName, $options) {\n            return $client->createBucket($bucketName, $options);\n        });\n\n        self::$deletionQueue->add(function () use ($bucket) {\n            foreach ($bucket->objects() as $object) {\n                $object->delete();\n            }\n\n            $bucket->delete();\n        });\n\n        return $bucket;\n    }\n\n    /**\n     * Create a dataset and enqueue it for deletion.\n     *\n     * This method provides a means of creating a dataset with pre-configured\n     * flush+delete functionality. Use in place of `BigQueryClient::createDataset()`.\n     *\n     * When inserting tables into a dataset created with this method, you do NOT need\n     * to enqueue those tables for deletion or concern yourself with order of\n     * operations.\n     *\n     * @param BigQueryClient $client\n     * @param string $datasetName\n     * @param array $options\n     * @return Dataset\n     *\n     * @experimental\n     * @internal\n     */\n    public static function createDataset(BigQueryClient $client, $datasetName, array $options = [])\n    {\n        $dataset = $client->createDataset($datasetName, $options);\n\n        self::$deletionQueue->add(function () use ($dataset) {\n            $dataset->delete(['deleteContents' => true]);\n        });\n\n        return $dataset;\n    }\n\n    /**\n     * Create a topic and enqueue it for deletion.\n     *\n     * This method provides a means of creating a topic with pre-configured\n     * flush+delete functionality. Use in place of `PubSubClient::createTopic()`.\n     *\n     * When inserting subscriptions into a topic created with this method, you do NOT need\n     * to enqueue those subscriptions for deletion or concern yourself with order of\n     * operations.\n     *\n     * @param PubSubClient $client\n     * @param string $topicName\n     * @param array $options\n     * @return Topic\n     * @throws GoogleException\n     *\n     * @experimental\n     * @internal\n     */\n    public static function createTopic(PubSubClient $client, $topicName, array $options = [])\n    {\n        $backoff = new ExponentialBackoff(8);\n\n        $topic = $backoff->execute(function () use ($client, $topicName, $options) {\n            return $client->createTopic($topicName, $options);\n        });\n\n        self::$deletionQueue->add(function () use ($topic) {\n            foreach ($topic->subscriptions() as $subscription) {\n                $subscription->delete();\n            }\n\n            $topic->delete();\n        });\n\n        return $topic;\n    }\n\n    /**\n     * Set \"using emulator\" flag for single test case.\n     *\n     * Should be called in `setUpBeforeClass()` method. This will allow to\n     * skip tests that are not supported by emulator.\n     *\n     * Example:\n     * ```\n     * self::setUsingEmulator(getenv('FOOBAR_EMULATOR_HOST'));\n     * ```\n     *\n     * @param bool $enabled Whether emulator is detected. **Defaults to** `true`.\n     */\n    public static function setUsingEmulator($enabled = true)\n    {\n        self::$emulatedClasses[get_called_class()] = (bool)$enabled;\n    }\n\n    /**\n     * Set \"using emulator\" flag for test cases with specified fully-qualified name prefix.\n     *\n     * Should be called in `setUpBeforeClass()` method. This will allow to\n     * skip tests that are not supported by emulator.\n     *\n     * Example:\n     * ```\n     * // Set flag for called class namespace.\n     * self::setUsingEmulatorForClassPrefix(getenv('FOOBAR_EMULATOR_HOST'));\n     * ```\n     *\n     * ```\n     * // Set flag for some other namespace.\n     * self::setUsingEmulatorForClassPrefix(getenv('FOOBAR_EMULATOR_HOST'), 'Foobar\\\\Tests\\\\System\\\\Admin\\\\');\n     * ```\n     *\n     * @param bool $enabled Whether emulator is detected. **Defaults to** `true`.\n     * @param string|null $prefix Fully-qualified class name prefix. **Defaults to** called class namespace.\n     */\n    public static function setUsingEmulatorForClassPrefix($enabled = true, $prefix = null)\n    {\n        if (!isset($prefix)) {\n            $className = get_called_class();\n            $prefix = substr($className, 0, strrpos($className, '\\\\') + 1);\n        }\n        self::$emulatedClassPrefixes[$prefix] = (bool)$enabled;\n    }\n\n    /**\n     * Returns `true` when \"using emulator\" flag is set either for called class name or its\n     * fully-qualified name prefix or `false` otherwise.\n     *\n     * Example:\n     * ```\n     * $transports = [['grpc']];\n     * if (!self::isEmulatorUsed()) {\n     *     $transports[] = ['rest'];\n     * }\n     * ```\n     *\n     * @return bool\n     */\n    public static function isEmulatorUsed()\n    {\n        $className = get_called_class();\n        if (!isset(self::$emulatedClasses[$className])) {\n            $prefix = substr($className, 0, strrpos($className, '\\\\') + 1);\n            $isEmulated = false;\n            foreach (self::$emulatedClassPrefixes as $key => $flag) {\n                if (strpos($prefix, $key) === 0) {\n                    $isEmulated = $flag;\n                    break;\n                }\n            }\n            self::$emulatedClasses[$className] = $isEmulated;\n        }\n        return self::$emulatedClasses[$className];\n    }\n\n    /**\n     * Skips current test (when called from test method) or entire test case (when called from `setUpBeforeClass()`)\n     * if \"using emulator\" flag is set either for called class name or its fully-qualified name prefix.\n     *\n     * Example:\n     * ```\n     * // Use default reason.\n     * self::skipIfEmulatorUsed();\n     * ```\n     *\n     * ```\n     * // Use custom reason.\n     * self::skipIfEmulatorUsed('Administration functions are not supported by emulator.');\n     * ```\n     *\n     * @param string|null $reason Message explaining reason for skipping this test.\n     */\n    public static function skipIfEmulatorUsed($reason = null)\n    {\n        if (self::isEmulatorUsed()) {\n            self::markTestSkipped($reason ?: 'This test is not supported by the emulator.');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Testing/TestHelpers.php",
    "content": "<?php\n\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Testing;\n\nuse Google\\Cloud\\Core\\Testing\\RegexFileFilter;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Container;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Coverage\\Coverage;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Coverage\\Scanner;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Parser\\Parser;\nuse Google\\Cloud\\Core\\Testing\\Snippet\\Fixtures;\nuse Google\\Cloud\\Core\\Testing\\System\\SystemTestCase;\n\n/**\n * Class TestHelpers is used to hold static functions required for testing\n *\n * @experimental\n * @internal\n */\nclass TestHelpers\n{\n    /**\n     * Create a test stub which extends a real class and allows overriding of private properties.\n     *\n     * @param string $extends The fully-qualified name of the class to extend.\n     * @param array $args An array of constructor arguments to use when creating the stub.\n     * @param array $props A list of private properties on which to enable overrriding.\n     * @return mixed\n     *\n     * @experimental\n     * @internal\n     */\n    public static function stub($extends, array $args = [], array $props = [])\n    {\n        if (empty($props)) {\n            $props = ['connection'];\n        }\n\n        $tpl = 'class %s extends %s {private $___props = \\'%s\\'; use \\Google\\Cloud\\Core\\Testing\\StubTrait; }';\n\n        $props = json_encode($props);\n\n        $name = 'Stub' . sha1($extends . $props);\n\n        if (!class_exists($name)) {\n            eval(sprintf($tpl, $name, $extends, $props));\n        }\n\n        $reflection = new \\ReflectionClass($name);\n        return $reflection->newInstanceArgs(array_values($args));\n    }\n\n    /**\n     * Get a trait implementation.\n     *\n     * @param string $trait The fully-qualified name of the trait to implement.\n     * @return mixed\n     *\n     * @experimental\n     * @internal\n     */\n    public static function impl($trait, array $props = [])\n    {\n        $properties = [];\n        foreach ($props as $prop) {\n            $properties[] = 'private $' . $prop . ';';\n        }\n\n        $tpl = 'class %s {\n            use %s;\n            use \\Google\\Cloud\\Core\\Testing\\StubTrait;\n            private $___props = \\'%s\\';\n            %s\n            public function call($fn, array $args = []) { return call_user_func_array([$this, $fn], $args); }\n        }';\n\n        $name = 'Trait' . sha1($trait . json_encode($props));\n\n        if (!class_exists($name)) {\n            eval(sprintf($tpl, $name, $trait, json_encode($props), implode(\"\\n\", $properties)));\n        }\n\n        return new $name;\n    }\n\n    /**\n     * Setup snippet tests support.\n     *\n     * @return void\n     * @experimental\n     * @internal\n     */\n    public static function snippetBootstrap()\n    {\n        putenv('GOOGLE_APPLICATION_CREDENTIALS='. Fixtures::KEYFILE_STUB_FIXTURE());\n\n        $parser = new Parser;\n        $scanner = new Scanner($parser, self::projectRoot(), [\n            '/vendor/',\n            '/dev/',\n            new RegexFileFilter('/\\w{0,}\\/vendor\\//'),\n            new RegexFileFilter('/\\w{0,}\\/V\\d{1,}\\w{0,}\\//'),\n            'LongRunning/', // LongRunning doesn't match the GAPIC regex, but should still be excluded\n        ]);\n        $coverage = new Coverage($scanner);\n        $coverage->buildListToCover();\n\n        Container::$coverage = $coverage;\n        Container::$parser = $parser;\n    }\n\n    /**\n     * Setup performance tests support.\n     *\n     * @return void\n     * @experimental\n     * @internal\n     */\n    public static function perfBootstrap()\n    {\n        $bootstraps = glob(self::projectRoot() .'/*tests/Perf/bootstrap.php');\n        foreach ($bootstraps as $bootstrap) {\n            require_once $bootstrap;\n        }\n    }\n\n    /**\n     * Check that the required environment variable keyfile paths are set and exist.\n     *\n     * @param array|string $env The environment variable(s) required.\n     * @throws \\RuntimeException\n     * @experimental\n     * @internal\n     */\n    public static function requireKeyfile($env)\n    {\n        $env = is_array($env) ? $env : [$env];\n\n        foreach ($env as $var) {\n            if (!getenv($var)) {\n                throw new \\RuntimeException(sprintf(\n                    'Please set the \\'%s\\' env var to run the tests',\n                    $var\n                ));\n            }\n\n            $path = getenv($var);\n            if (!file_exists($path)) {\n                throw new \\RuntimeException(sprintf(\n                    'The path \\`%s\\` specified in environment variable `%s` does not exist.',\n                    $path,\n                    $var\n                ));\n            }\n        }\n    }\n\n    /**\n     * Setup stuff needed for the system test runner.\n     *\n     * This method can only be called once per run. Subsequent calls will thrown \\RuntimeException.\n     *\n     * @internal\n     * @experimental\n     */\n    public static function systemBootstrap()\n    {\n        static $started = false;\n\n        if ($started) {\n            throw new \\RuntimeException('system tests cannot be bootstrapped more than once.');\n        }\n\n        SystemTestCase::setupQueue();\n\n        // also set up the generated system tests\n        self::generatedSystemTestBootstrap();\n        $bootstraps = glob(self::projectRoot() .'/*tests/System/bootstrap.php');\n\n        foreach ($bootstraps as $bootstrap) {\n            require_once $bootstrap;\n        }\n\n        // This should always be last.\n        self::systemTestShutdown(function () {\n            SystemTestCase::processQueue();\n        });\n\n        $started = true;\n    }\n\n    /**\n     * Setup stuff needed for the generated system tests.\n     * @internal\n     * @experimental\n     */\n    public static function generatedSystemTestBootstrap()\n    {\n        // For generated system tests, we need to set GOOGLE_APPLICATION_CREDENTIALS\n        // and PROJECT_ID to appropriate values\n        $keyFilePath = getenv('GOOGLE_CLOUD_PHP_TESTS_KEY_PATH');\n        if (empty($keyFilePath)) {\n            exit('GOOGLE_CLOUD_PHP_TESTS_KEY_PATH must be set to run system tests.');\n        }\n        putenv(\"GOOGLE_APPLICATION_CREDENTIALS=$keyFilePath\");\n        $keyFileData = json_decode(file_get_contents($keyFilePath), true);\n        putenv('PROJECT_ID=' . $keyFileData['project_id']);\n        putenv('GOOGLE_PROJECT_ID=' . $keyFileData['project_id']);\n    }\n\n    /**\n     * Add cleanup function for system tests.\n     *\n     * Calls to this method enqueue a PHP shutdown function, scoped to the parent\n     * PID.\n     *\n     * @param callable $shutdown The shutdown function.\n     * @return void\n     * @experimental\n     * @internal\n     */\n    public static function systemTestShutdown(callable $shutdown)\n    {\n        $pid = getmypid();\n        register_shutdown_function(function () use ($pid, $shutdown) {\n            // Skip flushing deletion queue if exiting a forked process.\n            if ($pid !== getmypid()) {\n                return;\n            }\n\n            $shutdown();\n        });\n    }\n\n    /**\n     * Get the value of a private property.\n     *\n     * @param mixed $class The class\n     * @param string $property The property name.\n     * @return mixed\n     */\n    public static function getPrivateProperty($class, $property)\n    {\n        $className = get_class($class);\n        $c = \\Closure::bind(function ($class) use ($property) {\n            return $class->$property;\n        }, null, $className);\n\n        return $c($class);\n    }\n\n    /**\n     * Determine the path of the project root based on where the composer\n     * autoloader is located.\n     *\n     * @return string\n     * @experimental\n     * @internal\n     */\n    private static function projectRoot()\n    {\n        static $projectRoot;\n\n        if (!$projectRoot) {\n            $ref = new \\ReflectionClass(\\Composer\\Autoload\\ClassLoader::class);\n            $projectRoot = dirname(dirname(dirname($ref->getFileName())));\n        }\n\n        return $projectRoot;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/TimeTrait.php",
    "content": "<?php\n/**\n * Copyright 2018 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Helper methods for formatting and converting Timestamps.\n */\ntrait TimeTrait\n{\n    /**\n     * Parse a Timestamp string and return a DateTimeImmutable instance and nanoseconds as an integer.\n     *\n     * @param string $timestamp A string representation of a timestamp, encoded\n     *        in RFC 3339 format (YYYY-MM-DDTHH:MM:SS.000000[000]TZ).\n     * @return array [\\DateTimeImmutable, int]\n     * @throws \\Exception If the timestamp string is in an unrecognized format.\n     */\n    private function parseTimeString($timestamp)\n    {\n        $nanoRegex = '/\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(?:\\.(\\d{1,}))?/';\n\n        preg_match($nanoRegex, $timestamp, $matches);\n        $subSeconds = $matches[1] ?? '0';\n\n        if (strlen($subSeconds) > 6) {\n            $timestamp = str_replace('.' . $subSeconds, '.' . substr($subSeconds, 0, 6), $timestamp);\n        }\n\n        $dt = new \\DateTimeImmutable($timestamp);\n\n        $nanos = $this->convertFractionToNanoSeconds($subSeconds);\n\n        return [$dt, $nanos];\n    }\n\n    /**\n     * Create a DateTimeImmutable instance from a UNIX timestamp (i.e. seconds since epoch).\n     *\n     * @param int $seconds The unix timestamp.\n     * @return \\DateTimeImmutable\n     */\n    private function createDateTimeFromSeconds($seconds)\n    {\n        return \\DateTimeImmutable::createFromFormat(\n            'U',\n            (string) $seconds,\n            new \\DateTimeZone('UTC')\n        );\n    }\n\n    /**\n     * Create a Timestamp string in an API-compatible format.\n     *\n     * @param \\DateTimeInterface $dateTime The date time object.\n     * @param int|null $ns The number of nanoseconds. If null, subseconds from\n     *        $dateTime will be used instead.\n     * @return string\n     */\n    private function formatTimeAsString(\\DateTimeInterface $dateTime, $ns)\n    {\n        if (!$dateTime instanceof \\DateTimeImmutable) {\n            $dateTime = clone $dateTime;\n        }\n        $dateTime = $dateTime->setTimeZone(new \\DateTimeZone('UTC'));\n        if ($ns === null) {\n            return $dateTime->format(Timestamp::FORMAT);\n        }\n\n        return sprintf(\n            $dateTime->format(Timestamp::FORMAT_INTERPOLATE),\n            $this->convertNanoSecondsToFraction($ns)\n        );\n    }\n\n    /**\n     * Format a timestamp for the API with nanosecond precision.\n     *\n     * @param \\DateTimeInterface $dateTime The date time object.\n     * @param int|null $ns The number of nanoseconds. If null, subseconds from\n     *        $dateTime will be used instead.\n     * @return array\n     */\n    private function formatTimeAsArray(\\DateTimeInterface $dateTime, $ns = null)\n    {\n        if ($ns === null) {\n            $ns = $this->convertFractionToNanoSeconds($dateTime->format('u'));\n        }\n        return [\n            'seconds' => (int) $dateTime->format('U'),\n            'nanos' => (int) $ns\n        ];\n    }\n\n    /**\n     * Convert subseconds, expressed as a decimal to nanoseconds.\n     *\n     * @param int|string $subseconds Provide value as a whole number (i.e.\n     *     provide 0.1 as 1).\n     * @return int\n     */\n    private function convertFractionToNanoSeconds($subseconds)\n    {\n        return (int) str_pad($subseconds, 9, '0', STR_PAD_RIGHT);\n    }\n\n    /**\n     * Convert nanoseconds to subseconds.\n     *\n     * Note that result should be used as a fraction of one second, but is\n     * given as an integer.\n     *\n     * @param int|string $nanos\n     * @param bool $rpad Whether to right-pad to 6 or 9 digits. **Defaults to**\n     *     `true`.\n     * @return string\n     */\n    private function convertNanoSecondsToFraction($nanos, $rpad = true)\n    {\n        $nanos = (string) $nanos;\n        $res = str_pad($nanos, 9, '0', STR_PAD_LEFT);\n        if (substr($res, 6, 3) === '000') {\n            $res = substr($res, 0, 6);\n        }\n\n        if (!$rpad) {\n            $res = rtrim($res, '0');\n        }\n\n        return $res;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Timestamp.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse DateTimeInterface;\n\n/**\n * Represents a Timestamp value.\n *\n * Nanosecond precision is preserved by passing nanoseconds as a separate\n * argument to the constructor. If nanoseconds are given, any subsecond\n * precision in the timestamp will be overridden when encoding the timestamp\n * as a string.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Core\\Timestamp;\n *\n * $timestamp = new Timestamp(new \\DateTime('2003-02-05 11:15:02.421827Z'));\n * ```\n *\n * ```\n * // Timestamps can be cast to strings.\n * echo (string) $timestamp;\n * ```\n */\nclass Timestamp implements \\JsonSerializable\n{\n    use TimeTrait;\n\n    const FORMAT = 'Y-m-d\\TH:i:s.u\\Z';\n    const FORMAT_NO_MS = 'Y-m-d\\TH:i:s\\Z';\n    const FORMAT_INTERPOLATE = 'Y-m-d\\TH:i:s.%\\s\\Z';\n\n    /**\n     * @var \\DateTimeInterface\n     */\n    private $value;\n\n    /**\n     * @var int\n     */\n    private $nanoSeconds;\n\n    /**\n     * @param \\DateTimeInterface $value The timestamp value. Use of\n     *        `DateTimeImmutable` is highly recommended over `DateTime` in order\n     *        to avoid side effects.\n     * @param int $nanoSeconds [optional] The number of nanoseconds in the\n     *        timestamp. If omitted, subsecond precision will be obtained from\n     *        the instance of `\\DateTimeInterface` provided in the first\n     *        argument. If provided, any precision in `$value` below seconds\n     *        will be disregarded.\n     */\n    public function __construct(\\DateTimeInterface $value, $nanoSeconds = null)\n    {\n        $this->value = $value;\n\n        $this->nanoSeconds = $nanoSeconds !== null\n            ? (int) $nanoSeconds\n            : null;\n    }\n\n    /**\n     * Get the underlying `\\DateTimeInterface` implementation.\n     *\n     * Please note that if you provided nanoseconds when creating the timestamp,\n     * they will not be included in this value.\n     *\n     * Example:\n     * ```\n     * $dateTime = $timestamp->get();\n     * ```\n     *\n     * @return DateTimeInterface\n     */\n    public function get(): DateTimeInterface\n    {\n        return $this->value;\n    }\n\n    /**\n     * Return the number of nanoseconds.\n     *\n     * Example:\n     * ```\n     * $nanos = $timestamp->nanoSeconds();\n     * ```\n     *\n     * @return int\n     */\n    public function nanoSeconds(): int\n    {\n        return $this->nanoSeconds === null\n            ? (int) $this->value->format('u') * 1000\n            : $this->nanoSeconds;\n    }\n\n    /**\n     * Format the value as a string.\n     *\n     * Example:\n     * ```\n     * $value = $timestamp->formatAsString();\n     * ```\n     *\n     * @return string\n     */\n    public function formatAsString(): string\n    {\n        return $this->formatTimeAsString(\n            $this->value,\n            $this->nanoSeconds\n        );\n    }\n\n    /**\n     * Format the value as a string.\n     *\n     * @return string\n     * @access private\n     */\n    public function __toString()\n    {\n        return $this->formatAsString();\n    }\n\n    /**\n     * Format a timestamp for the API with nanosecond precision.\n     *\n     * @return array\n     */\n    public function formatForApi(): array\n    {\n        return $this->formatTimeAsArray($this->value, $this->nanoSeconds());\n    }\n\n    /**\n     * Implement JsonSerializable by returning a ISO 8601 formatted string\n     *\n     * @return string\n     * @access private\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize(): string\n    {\n        return $this->formatAsString();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/TimestampTrait.php",
    "content": "<?php\n\n/**\n * Copyright 2023 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Helper methods to work on Google\\Cloud\\Core\\Timestamp.\n * @internal\n */\ntrait TimestampTrait\n{\n    /**\n     * Formats Google\\Cloud\\Core\\Timestamp to api format is present in\n     * $args['readTime'] and throws exception if $args['readTime'] is not\n     * Google\\Cloud\\Core\\Timestamp\n     *\n     * @param array $args The $args possibly containing ['readTime'] field.\n     * @return array\n     * @throws \\InvalidArgumentException\n     */\n    private function formatReadTimeOption($args)\n    {\n        if (isset($args['readTime'])) {\n            if (!($args['readTime'] instanceof Timestamp)) {\n                throw new \\InvalidArgumentException(sprintf(\n                    '`$options.readTime` must be an instance of %s',\n                    Timestamp::class\n                ));\n            }\n\n            $args['readTime'] = $args['readTime']->formatForApi();\n        }\n        return $args;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Upload/AbstractUploader.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Upload;\n\nuse Google\\Cloud\\Core\\RequestWrapper;\nuse Google\\Cloud\\Core\\UriTrait;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Provides a base impementation for uploads.\n */\nabstract class AbstractUploader\n{\n    use UriTrait;\n\n    const UPLOAD_TYPE_RESUMABLE = 'resumable';\n    const UPLOAD_TYPE_MULTIPART = 'multipart';\n    const UPLOAD_TYPE_STREAMABLE = 'streamable';\n    const UPLOAD_TYPE_SIGNED = 'signed';\n\n    const RESUMABLE_LIMIT = 5000000;\n\n    /**\n     * @var RequestWrapper\n     */\n    protected $requestWrapper;\n\n    /**\n     * @var StreamInterface\n     */\n    protected $data;\n\n    /**\n     * @var string\n     */\n    protected $uri;\n\n    /**\n     * @var array\n     */\n    protected $metadata;\n\n    /**\n     * @var int\n     */\n    protected $chunkSize;\n\n    /**\n     * @var array\n     */\n    protected $requestOptions;\n\n    /**\n     * @var string\n     */\n    protected $contentType;\n\n    /**\n     * @param RequestWrapper $requestWrapper\n     * @param string|resource|StreamInterface $data\n     * @param string $uri\n     * @param array $options [optional] {\n     *     Optional configuration.\n     *\n     *     @type array $metadata Metadata on the resource.\n     *     @type int $chunkSize Size of the chunks to send incrementally during\n     *           a resumable upload. Must be in multiples of 262144 bytes.\n     *     @type array $restOptions HTTP client specific configuration options.\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `0`.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type string $contentType Content type of the resource.\n     * }\n     */\n    public function __construct(\n        RequestWrapper $requestWrapper,\n        $data,\n        $uri,\n        array $options = []\n    ) {\n        $this->requestWrapper = $requestWrapper;\n        $this->data = Utils::streamFor($data);\n        $this->uri = $uri;\n        $this->metadata = $options['metadata'] ?? [];\n        $this->chunkSize = $options['chunkSize'] ?? null;\n        $this->requestOptions = array_intersect_key($options, [\n            'restOptions' => null,\n            'retries' => null,\n            'requestTimeout' => null,\n            'restRetryFunction' => null,\n            'restRetryListener' => null\n        ]);\n\n        $this->contentType = $options['contentType'] ?? 'application/octet-stream';\n    }\n\n    /**\n     * @return array\n     */\n    abstract public function upload();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Upload/MultipartUploader.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Upload;\n\nuse Google\\Cloud\\Core\\JsonTrait;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\Psr7\\Request;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Multipart upload implementation.\n */\nclass MultipartUploader extends AbstractUploader\n{\n    use JsonTrait;\n\n    /**\n     * Triggers the upload process.\n     *\n     * @return array\n     */\n    public function upload()\n    {\n        return $this->jsonDecode(\n            $this->requestWrapper->send(\n                $this->prepareRequest(),\n                $this->requestOptions\n            )->getBody(),\n            true\n        );\n    }\n\n    /**\n     * Triggers the upload process asynchronously.\n     *\n     * @return PromiseInterface<array>\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function uploadAsync()\n    {\n        return $this->requestWrapper->sendAsync(\n            $this->prepareRequest(),\n            $this->requestOptions\n        )->then(function (ResponseInterface $response) {\n            return $this->jsonDecode(\n                $response->getBody(),\n                true\n            );\n        });\n    }\n\n    /**\n     * Prepares a multipart upload request.\n     *\n     * @return RequestInterface\n     */\n    private function prepareRequest()\n    {\n        $multipartStream = new Psr7\\MultipartStream([\n            [\n                'name' => 'metadata',\n                'headers' => ['Content-Type' => 'application/json; charset=UTF-8'],\n                'contents' => $this->jsonEncode($this->metadata)\n            ],\n            [\n                'name' => 'data',\n                'headers' => ['Content-Type' => $this->contentType],\n                'contents' => $this->data\n            ]\n        ], 'boundary');\n\n        $headers = [\n            'Content-Type' => 'multipart/related; boundary=boundary',\n        ];\n\n        $size = $multipartStream->getSize();\n        if ($size !== null) {\n            $headers['Content-Length'] = $size;\n        }\n\n        return new Request(\n            'POST',\n            $this->uri,\n            $headers,\n            $multipartStream\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Upload/ResumableUploader.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Upload;\n\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse Google\\Cloud\\Core\\JsonTrait;\nuse Google\\Cloud\\Core\\RequestWrapper;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\LimitStream;\nuse GuzzleHttp\\Psr7\\Request;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Resumable upload implementation.\n */\nclass ResumableUploader extends AbstractUploader\n{\n    use JsonTrait;\n\n    /**\n     * @var callable\n     */\n    private $uploadProgressCallback;\n\n    /**\n     * @var int\n     */\n    protected $rangeStart = 0;\n\n    /**\n     * @var string\n     */\n    protected $resumeUri;\n\n    /**\n     * Classes extending ResumableUploader may provide request headers to be\n     * included in {@see \\Google\\Cloud\\Core\\Upload\\ResumableUploader::upload()}\n     * and {@see \\Google\\Cloud\\Core\\Upload\\ResumableUploader::createResumeUri{}}.\n     *\n     * @var array\n     */\n    protected $headers = [];\n\n    /**\n     * @param RequestWrapper $requestWrapper\n     * @param string|resource|StreamInterface $data\n     * @param string $uri\n     * @param array $options [optional] {\n     *     Optional configuration.\n     *\n     *     @type array $metadata Metadata on the resource.\n     *     @type callable $uploadProgressCallback The given callable\n     *           function/method will be called after each successfully uploaded\n     *           chunk. The callable function/method will receive the number of\n     *           uploaded bytes after each uploaded chunk as a parameter to this\n     *           callable. It's useful if you want to create a progress bar when\n     *           using resumable upload type together with $chunkSize parameter.\n     *           If $chunkSize is not set the callable function/method will be\n     *           called only once after the successful file upload.\n     *     @type int $chunkSize Size of the chunks to send incrementally during\n     *           a resumable upload. Must be in multiples of 262144 bytes.\n     *     @type array $restOptions HTTP client specific configuration options.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type string $contentType Content type of the resource.\n     * }\n     */\n    public function __construct(\n        RequestWrapper $requestWrapper,\n        $data,\n        $uri,\n        array $options = []\n    ) {\n        parent::__construct($requestWrapper, $data, $uri, $options);\n\n        // Set uploadProgressCallback if it's passed as an option.\n        if (isset($options['uploadProgressCallback']) && is_callable($options['uploadProgressCallback'])) {\n            $this->uploadProgressCallback = $options['uploadProgressCallback'];\n        } elseif (isset($options['uploadProgressCallback'])) {\n            throw new \\InvalidArgumentException('$options.uploadProgressCallback must be a callable.');\n        }\n    }\n\n    /**\n     * Gets the resume URI.\n     *\n     * @return string\n     */\n    public function getResumeUri()\n    {\n        if (!$this->resumeUri) {\n            return $this->createResumeUri();\n        }\n\n        return $this->resumeUri;\n    }\n\n    /**\n     * Resumes a download using the provided URI.\n     *\n     * @param string $resumeUri\n     * @return array\n     * @throws GoogleException\n     */\n    public function resume($resumeUri)\n    {\n        if (!$this->data->isSeekable()) {\n            throw new GoogleException('Cannot resume upload on a stream which cannot be seeked.');\n        }\n\n        $this->resumeUri = $resumeUri;\n        $response = $this->getStatusResponse();\n\n        if ($response->getBody()->getSize() > 0) {\n            return $this->decodeResponse($response);\n        }\n\n        $this->rangeStart = $this->getRangeStart($response->getHeaderLine('Range'));\n\n        return $this->upload();\n    }\n\n    /**\n     * Triggers the upload process.\n     *\n     * Errors are of form [`google.rpc.Status`](https://cloud.google.com/apis/design/errors#error_model),\n     * and may be obtained via {@see \\Google\\Cloud\\Core\\Exception\\ServiceException::getMetadata()}.\n     *\n     * @return array\n     * @throws ServiceException\n     */\n    public function upload()\n    {\n        $rangeStart = $this->rangeStart;\n        $response = null;\n        $resumeUri = $this->getResumeUri();\n        $size = $this->data->getSize() ?: '*';\n\n        do {\n            $data = new LimitStream(\n                $this->data,\n                $this->chunkSize ?: - 1,\n                $rangeStart\n            );\n\n            $currStreamLimitSize = $data->getSize();\n\n            $rangeEnd = $rangeStart + ($currStreamLimitSize - 1);\n\n            $headers = $this->headers + [\n                'Content-Length' => $currStreamLimitSize,\n                'Content-Type' => $this->contentType,\n                'Content-Range' => \"bytes $rangeStart-$rangeEnd/$size\",\n            ];\n\n            $request = new Request(\n                'PUT',\n                $resumeUri,\n                $headers,\n                $data\n            );\n\n            try {\n                $response = $this->requestWrapper->send($request, $this->requestOptions);\n            } catch (GoogleException $ex) {\n                throw new ServiceException(\n                    \"Upload failed. Please use this URI to resume your upload: $this->resumeUri\",\n                    $ex->getCode(),\n                    null,\n                    json_decode($ex->getMessage(), true) ?: []\n                );\n            }\n\n            if (is_callable($this->uploadProgressCallback)) {\n                call_user_func($this->uploadProgressCallback, $currStreamLimitSize);\n            }\n\n            $rangeStart = $this->getRangeStart($response->getHeaderLine('Range'));\n        } while ($response->getStatusCode() === 308);\n\n        return $this->decodeResponse($response);\n    }\n\n    /**\n     * Currently only the MultiPartUploader supports async.\n     *\n     * Any calls to this will throw a generic Google Exception.\n     *\n     * @return PromiseInterface\n     * @throws GoogleException\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function uploadAsync()\n    {\n        throw new GoogleException('Currently only the MultiPartUploader supports async.');\n    }\n\n    /**\n     * Fetch and decode the response body\n     *\n     * @param ResponseInterface $response\n     * @return array\n     */\n    protected function decodeResponse(ResponseInterface $response)\n    {\n        return $this->jsonDecode($response->getBody(), true);\n    }\n\n    /**\n     * Creates the resume URI.\n     *\n     * @return string\n     */\n    protected function createResumeUri()\n    {\n        $headers = $this->headers + [\n            'X-Upload-Content-Type' => $this->contentType,\n            'X-Upload-Content-Length' => $this->data->getSize(),\n            'Content-Type' => 'application/json'\n        ];\n\n        $body = $this->jsonEncode($this->metadata);\n\n        $request = new Request(\n            'POST',\n            $this->uri,\n            $headers,\n            $body\n        );\n\n        $response = $this->requestWrapper->send($request, $this->requestOptions);\n\n        return $this->resumeUri = $response->getHeaderLine('Location');\n    }\n\n    /**\n     * Gets the status of the upload.\n     *\n     * @return ResponseInterface\n     */\n    protected function getStatusResponse()\n    {\n        $request = new Request(\n            'PUT',\n            $this->resumeUri,\n            ['Content-Range' => 'bytes */' . $this->data->getSize()]\n        );\n\n        return $this->requestWrapper->send($request, $this->requestOptions);\n    }\n\n    /**\n     * Gets the starting range for the upload.\n     *\n     * @param string $rangeHeader\n     * @return int\n     */\n    protected function getRangeStart($rangeHeader)\n    {\n        if (!$rangeHeader) {\n            // assume no bytes are uploaded if no range header is present\n            return 0;\n        }\n\n        return (int) explode('-', $rangeHeader)[1] + 1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Upload/SignedUrlUploader.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Upload;\n\nuse Google\\Cloud\\Core\\RequestWrapper;\nuse GuzzleHttp\\Psr7\\Request;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Upload data to Cloud Storage using a Signed URL\n */\nclass SignedUrlUploader extends ResumableUploader\n{\n    /**\n     * @param RequestWrapper $requestWrapper\n     * @param string|resource|StreamInterface $data\n     * @param string $uri\n     * @param array $options [optional] {\n     *     Optional configuration.\n     *\n     *     @type array $metadata Metadata on the resource.\n     *     @type int $chunkSize Size of the chunks to send incrementally during\n     *           a resumable upload. Must be in multiples of 262144 bytes.\n     *     @type array $restOptions HTTP client specific configuration options.\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `0`.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type string $contentType Content type of the resource.\n     *     @type string $origin If the target has Cross-Origin Resource Sharing\n     *           enabled, the value of the Origin header to be used in upload\n     *           requests.\n     * }\n     */\n    public function __construct(\n        RequestWrapper $requestWrapper,\n        $data,\n        $uri,\n        array $options = []\n    ) {\n        if (isset($options['origin'])) {\n            $this->headers['Origin'] = $options['origin'];\n            unset($options['origin']);\n        }\n\n        parent::__construct($requestWrapper, $data, $uri, $options);\n    }\n\n    /**\n     * Creates the resume URI.\n     *\n     * @return string\n     */\n    protected function createResumeUri()\n    {\n        $headers = $this->headers + [\n            'Content-Type' => $this->contentType,\n            'Content-Length' => 0,\n            'x-goog-resumable' => 'start'\n        ];\n\n        $request = new Request(\n            'POST',\n            $this->uri,\n            $headers\n        );\n\n        $response = $this->requestWrapper->send($request, $this->requestOptions);\n\n        return $this->resumeUri = $response->getHeaderLine('Location');\n    }\n\n    /**\n     * Decode the response body\n     *\n     * @param ResponseInterface $response\n     * @return string\n     */\n    protected function decodeResponse(ResponseInterface $response)\n    {\n        return $response->getBody();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/Upload/StreamableUploader.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may ob`tain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core\\Upload;\n\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Uploader that is a special case of the ResumableUploader where we can write\n * the file contents in a streaming manner.\n */\nclass StreamableUploader extends ResumableUploader\n{\n    /**\n     * Triggers the upload process.\n     *\n     * @param int $remainder [optional] How much data to try and send. Must be in\n     *        multiples of 262144. If null or not provided, send the all the\n     *        remaining data and close the file.\n     * @return array\n     * @throws GoogleException\n     */\n    public function upload($writeSize = null)\n    {\n        if ($writeSize === 0) {\n            return [];\n        }\n\n        // find or create the resumeUri\n        $resumeUri = $this->getResumeUri();\n\n        if ($writeSize) {\n            $rangeEnd = $this->rangeStart + $writeSize - 1;\n            $data = $this->data->read($writeSize);\n        } else {\n            $rangeEnd = '*';\n            $data = $this->data->getContents();\n            $writeSize = strlen($data);\n        }\n\n        // do the streaming write\n        $headers = [\n            'Content-Length'    => $writeSize,\n            'Content-Type'      => $this->contentType,\n            'Content-Range'     => \"bytes {$this->rangeStart}-$rangeEnd/*\"\n        ];\n\n        $request = new Request(\n            'PUT',\n            $resumeUri,\n            $headers,\n            $data\n        );\n\n        try {\n            $response = $this->requestWrapper->send($request, $this->requestOptions);\n        } catch (ServiceException $ex) {\n            throw new GoogleException(\n                \"Upload failed. Please use this URI to resume your upload: $resumeUri\",\n                $ex->getCode(),\n                $ex\n            );\n        }\n\n        // reset the buffer with the remaining contents\n        $this->rangeStart += $writeSize;\n\n        return json_decode($response->getBody(), true);\n    }\n\n    /**\n     * Currently only the MultiPartUploader supports async.\n     *\n     * Any calls to this will throw a generic Google Exception.\n     *\n     * @return PromiseInterface\n     * @throws GoogleException\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function uploadAsync()\n    {\n        throw new GoogleException('Currently only the MultiPartUploader supports async.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/UriTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse GuzzleHttp\\Psr7\\Query;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\UriInterface;\nuse Rize\\UriTemplate;\n\n/**\n * Provides a light wrapper around often used URI related functions.\n */\ntrait UriTrait\n{\n    /**\n     * @param string $uri\n     * @param array $variables\n     * @return string\n     * @todo look at returning UriInterface\n     */\n    public function expandUri($uri, array $variables)\n    {\n        $template = new UriTemplate();\n\n        return $template->expand($uri, $variables);\n    }\n\n    /**\n     * @param string $uri\n     * @param array $query\n     * @return UriInterface\n     */\n    public function buildUriWithQuery($uri, array $query)\n    {\n        $query = array_filter($query, function ($v) {\n            return $v !== null;\n        });\n\n        // @todo fix this hack. when using build_query booleans are converted to\n        // 1 or 0 which the API does not accept. this casts bools to their\n        // string representation\n        foreach ($query as $k => &$v) {\n            if (is_bool($v)) {\n                $v = $v ? 'true' : 'false';\n            }\n        }\n\n        return Utils::uriFor($uri)->withQuery(Query::build($query));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ValidateTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse InvalidArgumentException;\n\n/**\n * Methods for validating and verifying data\n */\ntrait ValidateTrait\n{\n    /**\n     * Check that each member of $input array is of type $type.\n     *\n     * @param array $input The input to validate.\n     * @param string $type The type to check.\n     * @param callable [optional] An additional check for each element of $input.\n     *        This will be run count($input) times, so use with care.\n     * @return void\n     * @throws \\InvalidArgumentException\n     */\n    private function validateBatch(\n        array $input,\n        $type,\n        ?callable $additionalCheck = null\n    ) {\n        foreach ($input as $element) {\n            if (!($element instanceof $type)) {\n                throw new InvalidArgumentException(sprintf(\n                    'Each member of input array must be an instance of %s',\n                    $type\n                ));\n            }\n\n            if ($additionalCheck) {\n                $additionalCheck($element);\n            }\n        }\n    }\n\n    /**\n     * Check that the given $input array contains each of given $keys.\n     *\n     * @param array $input The input to validate.\n     * @param array $keys A list of keys to verify in $input.\n     * @return void\n     * @throws \\InvalidArgumentException\n     */\n    private function arrayHasKeys(array $input, array $keys)\n    {\n        foreach ($keys as $key) {\n            if (!array_key_exists($key, $input)) {\n                throw new \\InvalidArgumentException(sprintf(\n                    'Input missing required one or more required keys. Required keys are %s',\n                    implode(', ', $keys)\n                ));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/ValueMapperTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\n/**\n * Provides common value mapping methods.\n */\ntrait ValueMapperTrait\n{\n    use TimeTrait;\n\n    /**\n     * Convert a timestamp (represented as a string or an array) to a Timestamp\n     * class with nanosecond support.\n     *\n     * @deprecated Use methods on {@see Google\\Cloud\\Core\\TimeTrait}.\n     *\n     * @param string|array $timestamp The timestamp as a string or an array.\n     * @param string $returnType The type to create and return. Any object used\n     *        must provide a constructor compatible with {@see Google\\Cloud\\Core\\Timestamp}.\n     *        **Defaults to** `Google\\Cloud\\Core\\Timestamp`.\n     * @return mixed\n     */\n    public function createTimestampWithNanos($timestamp, $returnType = Timestamp::class)\n    {\n        if (is_array($timestamp)) {\n            $timestamp += [\n                'seconds' => 0,\n                'nanos' => 0\n            ];\n\n            $dt = $this->createDateTimeFromSeconds($timestamp['seconds']);\n            $nanos = $timestamp['nanos'];\n        } else {\n            list($dt, $nanos) = $this->parseTimeString($timestamp);\n        }\n\n        return new $returnType($dt, $nanos);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/src/WhitelistTrait.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Core;\n\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\n\n/**\n * Manages exceptions for requests which may have whitelist restrictions.\n */\ntrait WhitelistTrait\n{\n    /**\n     * Modify the error message of a whitelisted exception.\n     *\n     * @param NotFoundException $e The exception.\n     * @return NotFoundException\n     */\n    private function modifyWhitelistedError(NotFoundException $e)\n    {\n        $e->setMessage('NOTE: Error may be due to Whitelist Restriction. ' . $e->getMessage());\n\n        return $e;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/system-bootstrap.php",
    "content": "<?php\n\nuse Google\\Cloud\\Core\\Testing\\TestHelpers;\n\nTestHelpers::systemBootstrap();\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-core/unit-bootstrap.php",
    "content": "<?php\n\nuse DG\\BypassFinals;\nuse Google\\ApiCore\\Testing\\MessageAwareArrayComparator;\nuse Google\\ApiCore\\Testing\\ProtobufGPBEmptyComparator;\nuse Google\\ApiCore\\Testing\\ProtobufMessageComparator;\n\ndate_default_timezone_set('UTC');\n\\SebastianBergmann\\Comparator\\Factory::getInstance()->register(new MessageAwareArrayComparator());\n\\SebastianBergmann\\Comparator\\Factory::getInstance()->register(new ProtobufMessageComparator());\n\\SebastianBergmann\\Comparator\\Factory::getInstance()->register(new ProtobufGPBEmptyComparator());\n\n// Make sure that while testing we bypass the `final` keyword for the GAPIC client.\n// Only run this if the individual component has the helper package installed\nif (class_exists(BypassFinals::class)) {\n    BypassFinals::enable();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/.gitattributes",
    "content": "/*.xml.dist export-ignore\n/tests export-ignore\n/.github export-ignore\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project,\nand in the interest of fostering an open and welcoming community,\nwe pledge to respect all people who contribute through reporting issues,\nposting feature requests, updating documentation,\nsubmitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project\na harassment-free experience for everyone,\nregardless of level of experience, gender, gender identity and expression,\nsexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery\n* Personal attacks\n* Trolling or insulting/derogatory comments\n* Public or private harassment\n* Publishing other's private information,\nsuch as physical or electronic\naddresses, without explicit permission\n* Other unethical or unprofessional conduct.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct.\nBy adopting this Code of Conduct,\nproject maintainers commit themselves to fairly and consistently\napplying these principles to every aspect of managing this project.\nProject maintainers who do not follow or enforce the Code of Conduct\nmay be permanently removed from the project team.\n\nThis code of conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior\nmay be reported by opening an issue\nor contacting one or more of the project maintainers.\n\nThis Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,\navailable at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/CONTRIBUTING.md",
    "content": "# How to Contribute\n\nWe'd love to accept your patches and contributions to this project. We accept\nand review pull requests against the main\n[Google Cloud PHP](https://github.com/googleapis/google-cloud-php)\nrepository, which contains all of our client libraries. You will also need to\nsign a Contributor License Agreement. For more details about how to contribute,\nsee the\n[CONTRIBUTING.md](https://github.com/googleapis/google-cloud-php/blob/main/CONTRIBUTING.md)\nfile in the main Google Cloud PHP repository.\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/README.md",
    "content": "# Google Cloud Storage for PHP\n\n> Idiomatic PHP client for [Cloud Storage](https://cloud.google.com/storage/).\n\n[![Latest Stable Version](https://poser.pugx.org/google/cloud-storage/v/stable)](https://packagist.org/packages/google/cloud-storage) [![Packagist](https://img.shields.io/packagist/dm/google/cloud-storage.svg)](https://packagist.org/packages/google/cloud-storage)\n\n* [API documentation](https://cloud.google.com/php/docs/reference/cloud-storage/latest)\n\n**NOTE:** This repository is part of [Google Cloud PHP](https://github.com/googleapis/google-cloud-php). Any\nsupport requests, bug reports, or development contributions should be directed to\nthat project.\n\nAllows world-wide storage and retrieval of any amount of data at any time. You can use Cloud Storage for a range of\nscenarios including serving website content, storing data for archival and disaster recovery, or distributing large data objects to users via direct download.\n\n### Installation\n\nTo begin, install the preferred dependency manager for PHP, [Composer](https://getcomposer.org/).\n\nNow install this component:\n\n```sh\n$ composer require google/cloud-storage\n```\n\n### Authentication\n\nPlease see our [Authentication guide](https://github.com/googleapis/google-cloud-php/blob/main/AUTHENTICATION.md) for more information\non authenticating your client. Once authenticated, you'll be ready to start making requests.\n\n### Sample\n\n```php\nrequire 'vendor/autoload.php';\n\nuse Google\\Cloud\\Storage\\StorageClient;\n\n$storage = new StorageClient();\n\n$bucket = $storage->bucket('my_bucket');\n\n// Upload a file to the bucket.\n$bucket->upload(\n    fopen('/data/file.txt', 'r')\n);\n\n// Using Predefined ACLs to manage object permissions, you may\n// upload a file and give read access to anyone with the URL.\n$bucket->upload(\n    fopen('/data/file.txt', 'r'),\n    [\n        'predefinedAcl' => 'publicRead'\n    ]\n);\n\n// Download and store an object from the bucket locally.\n$object = $bucket->object('file_backup.txt');\n$object->downloadToFile('/data/file_backup.txt');\n```\n\n### Stream Wrapper\n\n```php\nrequire 'vendor/autoload.php';\n\nuse Google\\Cloud\\Storage\\StorageClient;\n\n$storage = new StorageClient();\n$storage->registerStreamWrapper();\n\n$contents = file_get_contents('gs://my_bucket/file_backup.txt');\n```\n\n### Debugging\n\nPlease see our [Debugging guide](https://github.com/googleapis/google-cloud-php/blob/main/DEBUG.md)\nfor more information about the debugging tools.\n\n### Version\n\nThis component is considered GA (generally available). As such, it will not introduce backwards-incompatible changes in\nany minor or patch releases. We will address issues and requests with the highest priority.\n\n### Next Steps\n\n1. Understand the [official documentation](https://cloud.google.com/storage/docs).\n2. Take a look at [in-depth usage samples](https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/storage/).\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/VERSION",
    "content": "1.49.0\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/composer.json",
    "content": "{\n    \"name\": \"google/cloud-storage\",\n    \"description\": \"Cloud Storage Client for PHP\",\n    \"license\": \"Apache-2.0\",\n    \"minimum-stability\": \"stable\",\n    \"require\": {\n        \"php\": \"^8.1\",\n        \"google/cloud-core\": \"^1.57\",\n        \"ramsey/uuid\": \"^4.2.3\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^9.0\",\n        \"phpspec/prophecy-phpunit\": \"^2.0\",\n        \"squizlabs/php_codesniffer\": \"2.*\",\n        \"phpdocumentor/reflection\": \"^5.3.3||^6.0\",\n        \"phpdocumentor/reflection-docblock\": \"^5.3\",\n        \"erusev/parsedown\": \"^1.6\",\n        \"phpseclib/phpseclib\": \"^2.0||^3.0\",\n        \"google/cloud-pubsub\": \"^2.0\"\n    },\n    \"suggest\": {\n        \"phpseclib/phpseclib\": \"May be used in place of OpenSSL for creating signed Cloud Storage URLs. Please require version ^2.\",\n        \"google/cloud-pubsub\": \"May be used to register a topic to receive bucket notifications.\"\n    },\n    \"extra\": {\n        \"component\": {\n            \"id\": \"cloud-storage\",\n            \"target\": \"googleapis/google-cloud-php-storage.git\",\n            \"path\": \"Storage\",\n            \"entry\": \"src/StorageClient.php\"\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Google\\\\Cloud\\\\Storage\\\\\": \"src\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Google\\\\Cloud\\\\Storage\\\\Tests\\\\\": \"tests\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Acl.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\nuse InvalidArgumentException;\n\n/**\n * Google Cloud Storage uses access control lists (ACLs) to manage bucket and\n * object access. ACLs are the mechanism you use to share objects with other\n * users and allow other users to access your buckets and objects. For more\n * information please see the overview on\n * [access-control](https://cloud.google.com/storage/docs/access-control).\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n *\n * $bucket = $storage->bucket('my-bucket');\n * $acl = $bucket->acl();\n * ```\n */\nclass Acl\n{\n    const ROLE_READER = 'READER';\n    const ROLE_WRITER = 'WRITER';\n    const ROLE_OWNER = 'OWNER';\n\n    /**\n     * @var ConnectionInterface Represents a connection to Cloud Storage.\n     * @internal\n     */\n    protected $connection;\n\n    /**\n     * @var array ACL specific options.\n     */\n    private $aclOptions;\n\n    /**\n     * @param ConnectionInterface $connection Represents a connection to\n     *        Cloud Storage. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param string $type The type of access control this instance applies to.\n     * @param array $identity Represents which bucket, file, or generation this\n     *        instance applies to.\n     * @throws \\InvalidArgumentException Thrown when an invalid type is passed in.\n     */\n    public function __construct(ConnectionInterface $connection, $type, array $identity)\n    {\n        $validTypes = [\n            'bucketAccessControls',\n            'defaultObjectAccessControls',\n            'objectAccessControls'\n        ];\n\n        if (!in_array($type, $validTypes)) {\n            throw new InvalidArgumentException('type must be one of the following: ' . implode(', ', $validTypes));\n        }\n\n        $this->connection = $connection;\n        $this->aclOptions = $identity + ['type' => $type];\n    }\n\n    /**\n     * Delete access controls.\n     *\n     * Delete access controls on a {@see Bucket} or\n     * {@see StorageObject} for a specified entity.\n     *\n     * Example:\n     * ```\n     * $acl->delete('allAuthenticatedUsers');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls/delete BucketAccessControls delete\n     * API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/defaultObjectAccessControls/delete\n     * DefaultObjectAccessControls delete API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objectAccessControls/delete ObjectAccessControls delete\n     * API documentation.\n     *\n     * @param string $entity The entity to delete.\n     * @param array $options [optional] Configuration Options.\n     * @return void\n     */\n    public function delete($entity, array $options = [])\n    {\n        $aclOptions = $this->aclOptions + ['entity' => $entity];\n        $this->connection->deleteAcl($options + $aclOptions);\n    }\n\n    /**\n     * Get access controls.\n     *\n     * Get access controls on a {@see Bucket} or\n     * {@see StorageObject}. By default this will return all available\n     * access controls. You may optionally specify a single entity to return\n     * details for as well.\n     *\n     * Example:\n     * ```\n     * $res = $acl->get(['entity' => 'allAuthenticatedUsers']);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls/get BucketAccessControls get API\n     * documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/defaultObjectAccessControls/get\n     * DefaultObjectAccessControls get API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objectAccessControls/get ObjectAccessControls get API\n     * documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $entity The entity to fetch.\n     * }\n     * @return array\n     */\n    public function get(array $options = [])\n    {\n        if (isset($options['entity'])) {\n            return $this->connection->getAcl($options + $this->aclOptions);\n        }\n\n        $response = $this->connection->listAcl($options + $this->aclOptions);\n        return $response['items'];\n    }\n\n    /**\n     * Add access controls.\n     *\n     * Add access controls on a {@see Bucket} or\n     * {@see StorageObject}.\n     *\n     * Example:\n     * ```\n     * $acl->add('allAuthenticatedUsers', 'WRITER');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls/insert BucketAccessControls insert\n     * API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/defaultObjectAccessControls/insert\n     * DefaultObjectAccessControls insert API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objectAccessControls/insert ObjectAccessControls insert\n     * API documentation.\n     *\n     * @param string $entity The entity to add access controls to.\n     * @param string $role The permissions to add for the specified entity. May\n     *        be one of 'OWNER', 'READER', or 'WRITER'.\n     * @param array $options [optional] Configuration Options.\n     * @return array\n     */\n    public function add($entity, $role, array $options = [])\n    {\n        $aclOptions = $this->aclOptions + [\n            'entity' => $entity,\n            'role' => $role\n        ];\n\n        return $this->connection->insertAcl($options + $aclOptions);\n    }\n\n    /**\n     * Update access controls.\n     *\n     * Update access controls on a {@see Bucket} or {@see StorageObject}.\n     *\n     * Example:\n     * ```\n     * $acl->update('allAuthenticatedUsers', 'READER');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls/patch BucketAccessControls patch API\n     * documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/defaultObjectAccessControls/patch\n     * DefaultObjectAccessControls patch API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objectAccessControls/patch ObjectAccessControls patch\n     * API documentation.\n     *\n     * @param string $entity The entity to update access controls for.\n     * @param string $role The permissions to update for the specified entity.\n     *        May be one of 'OWNER', 'READER', or 'WRITER'.\n     * @param array $options [optional] Configuration Options.\n     * @return array\n     */\n    public function update($entity, $role, array $options = [])\n    {\n        $aclOptions = $this->aclOptions + [\n            'entity' => $entity,\n            'role' => $role\n        ];\n\n        return $this->connection->patchAcl($options + $aclOptions);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Bucket.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\ArrayTrait;\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse Google\\Cloud\\Core\\Iam\\Iam;\nuse Google\\Cloud\\Core\\Iterator\\ItemIterator;\nuse Google\\Cloud\\Core\\Iterator\\PageIterator;\nuse Google\\Cloud\\Core\\Timestamp;\nuse Google\\Cloud\\Core\\Upload\\ResumableUploader;\nuse Google\\Cloud\\Core\\Upload\\StreamableUploader;\nuse Google\\Cloud\\PubSub\\Topic;\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\nuse Google\\Cloud\\Storage\\Connection\\IamBucket;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\MimeType;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Buckets are the basic containers that hold your data. Everything that you\n * store in Google Cloud Storage must be contained in a bucket.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n *\n * $bucket = $storage->bucket('my-bucket');\n * ```\n */\nclass Bucket\n{\n    use ArrayTrait;\n    use EncryptionTrait;\n\n    const NOTIFICATION_TEMPLATE = '//pubsub.googleapis.com/%s';\n    const TOPIC_TEMPLATE = 'projects/%s/topics/%s';\n    const TOPIC_REGEX = '/projects\\/[^\\/]*\\/topics\\/(.*)/';\n\n    /**\n     * @var Acl ACL for the bucket.\n     */\n    private $acl;\n\n    /**\n     * @var ConnectionInterface Represents a connection to Cloud Storage.\n     * @internal\n     */\n    private $connection;\n\n    /**\n     * @var Acl Default ACL for objects created within the bucket.\n     */\n    private $defaultAcl;\n\n    /**\n     * @var array The bucket's identity.\n     */\n    private $identity;\n\n    /**\n     * @var string The project ID.\n     */\n    private $projectId;\n\n    /**\n     * @var array|null The bucket's metadata.\n     */\n    private $info;\n\n    /**\n     * @var Iam|null\n     */\n    private $iam;\n\n    /**\n     * @param ConnectionInterface $connection Represents a connection to Cloud\n     *        Storage. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param string $name The bucket's name.\n     * @param array $info [optional] The bucket's metadata.\n     */\n    public function __construct(ConnectionInterface $connection, $name, array $info = [])\n    {\n        $this->connection = $connection;\n        $this->identity = [\n            'bucket' => $name,\n            'userProject' => $this->pluck('requesterProjectId', $info, false)\n        ];\n        $this->info = $info;\n        $this->projectId = $this->connection->projectId();\n        $this->acl = new Acl($this->connection, 'bucketAccessControls', $this->identity);\n        $this->defaultAcl = new Acl($this->connection, 'defaultObjectAccessControls', $this->identity);\n    }\n\n    /**\n     * Configure ACL for this bucket.\n     *\n     * Example:\n     * ```\n     * $acl = $bucket->acl();\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/access-control More about Access Control Lists\n     *\n     * @return Acl An ACL instance configured to handle the bucket's access\n     *         control policies.\n     */\n    public function acl()\n    {\n        return $this->acl;\n    }\n\n    /**\n     * Configure default object ACL for this bucket.\n     *\n     * Example:\n     * ```\n     * $acl = $bucket->defaultAcl();\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/access-control More about Access Control Lists\n     * @return Acl An ACL instance configured to handle the bucket's default\n     *         object access control policies.\n     */\n    public function defaultAcl()\n    {\n        return $this->defaultAcl;\n    }\n\n    /**\n     * Check whether or not the bucket exists.\n     *\n     * Example:\n     * ```\n     * if ($bucket->exists()) {\n     *     echo 'Bucket exists!';\n     * }\n     * ```\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     * }\n     * @return bool\n     */\n    public function exists(array $options = [])\n    {\n        try {\n            $this->connection->getBucket($options + $this->identity + ['fields' => 'name']);\n        } catch (NotFoundException $ex) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Upload your data in a simple fashion. Uploads will default to being\n     * resumable if the file size is greater than 5mb.\n     *\n     * Example:\n     * ```\n     * $object = $bucket->upload(\n     *     fopen(__DIR__ . '/image.jpg', 'r')\n     * );\n     * ```\n     *\n     * ```\n     * // Upload an object in a resumable fashion while setting a new name for\n     * // the object and including the content language.\n     * $options = [\n     *     'resumable' => true,\n     *     'name' => '/images/new-name.jpg',\n     *     'metadata' => [\n     *         'contentLanguage' => 'en'\n     *     ]\n     * ];\n     *\n     * $object = $bucket->upload(\n     *     fopen(__DIR__ . '/image.jpg', 'r'),\n     *     $options\n     * );\n     * ```\n     *\n     * ```\n     * // Upload an object with a customer-supplied encryption key.\n     * $key = base64_encode(openssl_random_pseudo_bytes(32)); // Make sure to remember your key.\n     *\n     * $object = $bucket->upload(\n     *     fopen(__DIR__ . '/image.jpg', 'r'),\n     *     ['encryptionKey' => $key]\n     * );\n     * ```\n     *\n     * ```\n     * // Upload an object utilizing an encryption key managed by the Cloud Key Management Service (KMS).\n     * $object = $bucket->upload(\n     *     fopen(__DIR__ . '/image.jpg', 'r'),\n     *     [\n     *         'metadata' => [\n     *             'kmsKeyName' => 'projects/my-project/locations/kr-location/keyRings/my-kr/cryptoKeys/my-key'\n     *         ]\n     *     ]\n     * );\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload#resumable Learn more about resumable\n     * uploads.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/insert Objects insert API documentation.\n     * @see https://cloud.google.com/storage/docs/encryption#customer-supplied Customer-supplied encryption keys.\n     * @see https://github.com/google/php-crc32 crc32c PHP extension for hardware-accelerated validation hashes.\n     *\n     * @param string|resource|StreamInterface|null $data The data to be uploaded.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $name The name of the destination. Required when data is\n     *           of type string or null.\n     *     @type bool $resumable Indicates whether or not the upload will be\n     *           performed in a resumable fashion.\n     *     @type bool|string $validate Indicates whether or not validation will\n     *           be applied using md5 or crc32c hashing functionality. If\n     *           enabled, and the calculated hash does not match that of the\n     *           upstream server, the upload will be rejected. Available options\n     *           are `true`, `false`, `md5` and `crc32`. If true, either md5 or\n     *           crc32c will be chosen based on your platform. If false, no\n     *           validation hash will be sent. Choose either `md5` or `crc32` to\n     *           force a hash method regardless of performance implications.\n     *           **Defaults to** `true`.\n     *     @type int $chunkSize If provided the upload will be done in chunks.\n     *           The size must be in multiples of 262144 bytes. With chunking\n     *           you have increased reliability at the risk of higher overhead.\n     *           It is recommended to not use chunking.\n     *     @type callable $uploadProgressCallback If provided together with\n     *           $resumable == true the given callable function/method will be\n     *           called after each successfully uploaded chunk. The callable\n     *           function/method will receive the number of uploaded bytes\n     *           after each uploaded chunk as a parameter to this callable.\n     *           It's useful if you want to create a progress bar when using\n     *           resumable upload type together with $chunkSize parameter.\n     *           If $chunkSize is not set the callable function/method will be\n     *           called only once after the successful file upload.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type array $retention The full list of available options are outlined\n     *           at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).\n     *     @type string $retention.retainUntilTime The earliest time in RFC 3339\n     *           UTC \"Zulu\" format that the object can be deleted or replaced.\n     *           This is the retention configuration set for this object.\n     *     @type string $retention.mode The mode of the retention configuration,\n     *           which can be either `\"Unlocked\"` or `\"Locked\"`.\n     *     @type array $metadata The full list of available options are outlined\n     *           at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).\n     *     @type array $metadata.metadata User-provided metadata, in key/value pairs.\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. If you would prefer to manage encryption\n     *           utilizing the Cloud Key Management Service (KMS) please use the\n     *           `$metadata.kmsKeyName` setting. Please note if using KMS the\n     *           key ring must use the same location as the bucket.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     * }\n     * @return StorageObject\n     * @throws \\InvalidArgumentException\n     */\n    public function upload($data, array $options = [])\n    {\n        if ($this->isObjectNameRequired($data) && !isset($options['name'])) {\n            throw new \\InvalidArgumentException('A name is required when data is of type string or null.');\n        }\n\n        $encryptionKey = $options['encryptionKey'] ?? null;\n        $encryptionKeySHA256 = $options['encryptionKeySHA256'] ?? null;\n\n        $response = $this->connection->insertObject(\n            $this->formatEncryptionHeaders($options) + $this->identity + [\n                'data' => $data\n            ]\n        )->upload();\n\n        return new StorageObject(\n            $this->connection,\n            $response['name'],\n            $this->identity['bucket'],\n            $response['generation'],\n            $response,\n            $encryptionKey,\n            $encryptionKeySHA256\n        );\n    }\n\n    /**\n     * Asynchronously uploads an object.\n     *\n     * Please note this method does not support resumable or streaming uploads.\n     *\n     * Example:\n     * ```\n     * $promise = $bucket->uploadAsync('Lorem Ipsum', ['name' => 'keyToData']);\n     * $object = $promise->wait();\n     * ```\n     *\n     * ```\n     * // Upload multiple objects to a bucket asynchronously.\n     * $promises = [];\n     * $objects = ['key1' => 'Lorem', 'key2' => 'Ipsum', 'key3' => 'Gypsum'];\n     *\n     * foreach ($objects as $k => $v) {\n     *     $promises[] = $bucket->uploadAsync($v, ['name' => $k])\n     *         ->then(function (StorageObject $object) {\n     *             echo $object->name() . PHP_EOL;\n     *         }, function(\\Exception $e) {\n     *             throw new Exception('An error has occurred in the matrix.', null, $e);\n     *         });\n     * }\n     *\n     * foreach ($promises as $promise) {\n     *     $promise->wait();\n     * }\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/insert Objects insert API documentation.\n     * @see https://cloud.google.com/storage/docs/encryption#customer-supplied Customer-supplied encryption keys.\n     * @see https://github.com/google/php-crc32 crc32c PHP extension for hardware-accelerated validation hashes.\n     * @see https://github.com/guzzle/promises Learn more about Guzzle Promises\n     *\n     * @param string|resource|StreamInterface|null $data The data to be uploaded.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $name The name of the destination. Required when data is\n     *           of type string or null.\n     *     @type bool|string $validate Indicates whether or not validation will\n     *           be applied using md5 or crc32c hashing functionality. If\n     *           enabled, and the calculated hash does not match that of the\n     *           upstream server, the upload will be rejected. Available options\n     *           are `true`, `false`, `md5` and `crc32`. If true, either md5 or\n     *           crc32c will be chosen based on your platform. If false, no\n     *           validation hash will be sent. Choose either `md5` or `crc32` to\n     *           force a hash method regardless of performance implications.\n     *           **Defaults to** `true`.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type array $metadata The full list of available options are outlined\n     *           at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).\n     *     @type array $metadata.metadata User-provided metadata, in key/value pairs.\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. If you would prefer to manage encryption\n     *           utilizing the Cloud Key Management Service (KMS) please use the\n     *           `$metadata.kmsKeyName` setting. Please note if using KMS the\n     *           key ring must use the same location as the bucket.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     * }\n     * @return PromiseInterface<StorageObject>\n     * @throws \\InvalidArgumentException\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function uploadAsync($data, array $options = [])\n    {\n        if ($this->isObjectNameRequired($data) && !isset($options['name'])) {\n            throw new \\InvalidArgumentException('A name is required when data is of type string or null.');\n        }\n\n        $encryptionKey = $options['encryptionKey'] ?? null;\n        $encryptionKeySHA256 = $options['encryptionKeySHA256'] ?? null;\n\n        $promise = $this->connection->insertObject(\n            $this->formatEncryptionHeaders($options) +\n            $this->identity +\n            [\n               'data' => $data,\n               'resumable' => false\n            ]\n        )->uploadAsync();\n\n        return $promise->then(\n            function (array $response) use ($encryptionKey, $encryptionKeySHA256) {\n                return new StorageObject(\n                    $this->connection,\n                    $response['name'],\n                    $this->identity['bucket'],\n                    $response['generation'],\n                    $response,\n                    $encryptionKey,\n                    $encryptionKeySHA256\n                );\n            }\n        );\n    }\n\n    /**\n     * Get a resumable uploader which can provide greater control over the\n     * upload process. This is recommended when dealing with large files where\n     * reliability is key.\n     *\n     * Example:\n     * ```\n     * $uploader = $bucket->getResumableUploader(\n     *     fopen(__DIR__ . '/image.jpg', 'r')\n     * );\n     *\n     * try {\n     *     $object = $uploader->upload();\n     * } catch (GoogleException $ex) {\n     *     $resumeUri = $uploader->getResumeUri();\n     *     $object = $uploader->resume($resumeUri);\n     * }\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload#resumable Learn more about resumable\n     * uploads.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/insert Objects insert API documentation.\n     *\n     * @param string|resource|StreamInterface|null $data The data to be uploaded.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $name The name of the destination. Required when data is\n     *           of type string or null.\n     *     @type bool $validate Indicates whether or not validation will be\n     *           applied using md5 hashing functionality. If true and the\n     *           calculated hash does not match that of the upstream server the\n     *           upload will be rejected.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include `\"authenticatedRead`\",\n     *           `\"bucketOwnerFullControl`\", `\"bucketOwnerRead`\", `\"private`\",\n     *           `\"projectPrivate`\", and `\"publicRead\"`.\n     *     @type array $metadata The available options for metadata are outlined\n     *           at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. If you would prefer to manage encryption\n     *           utilizing the Cloud Key Management Service (KMS) please use the\n     *           $metadata['kmsKeyName'] setting. Please note if using KMS the\n     *           key ring must use the same location as the bucket.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     *     @type callable $uploadProgressCallback The given callable\n     *           function/method will be called after each successfully uploaded\n     *           chunk. The callable function/method will receive the number of\n     *           uploaded bytes after each uploaded chunk as a parameter to this\n     *           callable. It's useful if you want to create a progress bar when\n     *           using resumable upload type together with $chunkSize parameter.\n     *           If $chunkSize is not set the callable function/method will be\n     *           called only once after the successful file upload.\n     * }\n     * @return ResumableUploader\n     * @throws \\InvalidArgumentException\n     */\n    public function getResumableUploader($data, array $options = [])\n    {\n        if ($this->isObjectNameRequired($data) && !isset($options['name'])) {\n            throw new \\InvalidArgumentException('A name is required when data is of type string or null.');\n        }\n\n        return $this->connection->insertObject(\n            $this->formatEncryptionHeaders($options) + $this->identity + [\n                'data' => $data,\n                'resumable' => true\n            ]\n        );\n    }\n\n    /**\n     * Get a streamable uploader which can provide greater control over the\n     * upload process. This is useful for generating large files and uploading\n     * the contents in chunks.\n     *\n     * Example:\n     * ```\n     * $uploader = $bucket->getStreamableUploader(\n     *     'initial contents',\n     *     ['name' => 'data.txt']\n     * );\n     *\n     * // finish uploading the item\n     * $uploader->upload();\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload#resumable Learn more about resumable\n     * uploads.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/insert Objects insert API documentation.\n     *\n     * @param string|resource|StreamInterface $data The data to be uploaded.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $name The name of the destination. Required when data is\n     *           of type string or null.\n     *     @type bool $validate Indicates whether or not validation will be\n     *           applied using md5 hashing functionality. If true and the\n     *           calculated hash does not match that of the upstream server the\n     *           upload will be rejected.\n     *     @type int $chunkSize If provided the upload will be done in chunks.\n     *           The size must be in multiples of 262144 bytes. With chunking\n     *           you have increased reliability at the risk of higher overhead.\n     *           It is recommended to not use chunking.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type array $metadata The available options for metadata are outlined\n     *           at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. If you would prefer to manage encryption\n     *           utilizing the Cloud Key Management Service (KMS) please use the\n     *           $metadata['kmsKeyName'] setting. Please note if using KMS the\n     *           key ring must use the same location as the bucket.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     * }\n     * @return StreamableUploader\n     * @throws \\InvalidArgumentException\n     */\n    public function getStreamableUploader($data, array $options = [])\n    {\n        if ($this->isObjectNameRequired($data) && !isset($options['name'])) {\n            throw new \\InvalidArgumentException('A name is required when data is of type string or null.');\n        }\n\n        return $this->connection->insertObject(\n            $this->formatEncryptionHeaders($options) + $this->identity + [\n                'data' => $data,\n                'streamable' => true,\n                'validate' => false\n            ]\n        );\n    }\n\n    /**\n     * Lazily instantiates an object. There are no network requests made at this\n     * point.\n     *\n     * To see the operations that can be performed on an object please\n     * see {@see StorageObject}.\n     *\n     * Example:\n     * ```\n     * $object = $bucket->object('file.txt');\n     * ```\n     *\n     * @param string $name The name of the object to request.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $generation Request a specific revision of the object.\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. It will be neccesary to provide this when a key\n     *           was used during the object's creation.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     *     @type boolean $softDeleted If true, returns the metadata of the\n     *           soft-deleted object. If true, generation must also be specified,\n     *           and alt=media cannot be specified.\n     * }\n     * @return StorageObject\n     */\n    public function object($name, array $options = [])\n    {\n        $generation = $options['generation'] ?? null;\n        $encryptionKey = $options['encryptionKey'] ?? null;\n        $encryptionKeySHA256 = $options['encryptionKeySHA256'] ?? null;\n\n        return new StorageObject(\n            $this->connection,\n            $name,\n            $this->identity['bucket'],\n            $generation,\n            array_filter([\n                'requesterProjectId' => $this->identity['userProject']\n            ]),\n            $encryptionKey,\n            $encryptionKeySHA256\n        );\n    }\n\n    /**\n     * Restores an object.\n     *\n     * Example:\n     * ```\n     * $object = $bucket->restore('file.txt');\n     * ```\n     *\n     * @param string $name The name of the object to restore.\n     * @param string $generation Request a specific generation of the object.\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $restoreToken Must be specified when getting a soft-deleted object from\n     *           an HNS-enabled bucket that has a name and generation conflict with another object in the same bucket.\n     *     @type string $ifGenerationMatch Makes the operation conditional on whether\n     *           the object's current generation matches the given value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on whether\n     *           the object's current generation matches the given value.\n     *     @type string $ifMetagenerationMatch If set, only restores\n     *           if its metageneration matches this value.\n     *     @type string $ifMetagenerationNotMatch If set, only restores\n     *           if its metageneration does not match this value.\n     * }\n     * @return StorageObject\n     */\n    public function restore($name, $generation, array $options = [])\n    {\n        $res = $this->connection->restoreObject([\n            'bucket' => $this->identity['bucket'],\n            'generation' => $generation,\n            'object' => $name,\n        ] + $options);\n        return new StorageObject(\n            $this->connection,\n            $name,\n            $this->identity['bucket'],\n            $res['generation'], // restored object will have a new generation\n            $res + array_filter([\n                'requesterProjectId' => $this->identity['userProject']\n            ])\n        );\n    }\n\n    /**\n     * Fetches all objects in the bucket.\n     *\n     * Example:\n     * ```\n     * // Get all objects beginning with the prefix 'photo'\n     * $objects = $bucket->objects([\n     *     'prefix' => 'photo',\n     *     'fields' => 'items/name,nextPageToken'\n     * ]);\n     *\n     * foreach ($objects as $object) {\n     *     echo $object->name() . PHP_EOL;\n     * }\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/list Objects list API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $delimiter Returns results in a directory-like mode.\n     *           Results will contain only objects whose names, aside from the\n     *           prefix, do not contain delimiter. Objects whose names, aside\n     *           from the prefix, contain delimiter will have their name,\n     *           truncated after the delimiter, returned in prefixes. Duplicate\n     *           prefixes are omitted.\n     *     @type bool $includeFoldersAsPrefixes If true, will also include folders\n     *           and managed folders (besides objects) in the returned prefixes.\n     *           Only applicable if delimiter is set to '/'.\n     *     @type int $maxResults Maximum number of results to return per\n     *           request. **Defaults to** `1000`.\n     *     @type int $resultLimit Limit the number of results returned in total.\n     *           **Defaults to** `0` (return all results).\n     *     @type string $pageToken A previously-returned page token used to\n     *           resume the loading of results from a specific point.\n     *     @type string $prefix Filter results with this prefix.\n     *     @type string $projection Determines which properties to return. May\n     *           be either `\"full\"` or `\"noAcl\"`.\n     *     @type bool $versions If true, lists all versions of an object as\n     *           distinct results. **Defaults to** `false`.\n     *     @type string $fields Selector which will cause the response to only\n     *           return the specified fields.\n     *     @type string $matchGlob A glob pattern to filter results. The string\n     *           value must be UTF-8 encoded. See:\n     *           https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-object-glob\n     * }\n     * @return ObjectIterator\n     */\n    public function objects(array $options = [])\n    {\n        $resultLimit = $this->pluck('resultLimit', $options, false);\n\n        return new ObjectIterator(\n            new ObjectPageIterator(\n                function (array $object) {\n                    return new StorageObject(\n                        $this->connection,\n                        $object['name'],\n                        $this->identity['bucket'],\n                        isset($object['generation']) ? $object['generation'] : null,\n                        $object + array_filter([\n                            'requesterProjectId' => $this->identity['userProject']\n                        ])\n                    );\n                },\n                [$this->connection, 'listObjects'],\n                $options + $this->identity,\n                ['resultLimit' => $resultLimit]\n            )\n        );\n    }\n\n    /**\n     * Create a Cloud PubSub notification.\n     *\n     * Please note, the desired topic must be given the IAM role of\n     * \"pubsub.publisher\" from the service account associated with the project\n     * which contains the bucket you would like to receive notifications from.\n     * Please see the example below for a programmatic example of achieving\n     * this.\n     *\n     * Example:\n     * ```\n     * // Update the permissions on the desired topic prior to creating the\n     * // notification.\n     * use Google\\Cloud\\Core\\Iam\\PolicyBuilder;\n     * use Google\\Cloud\\PubSub\\PubSubClient;\n     *\n     * $pubSub = new PubSubClient();\n     * $topicName = 'my-topic';\n     * $serviceAccountEmail = $storage->getServiceAccount();\n     * $topic = $pubSub->topic($topicName);\n     * $iam = $topic->iam();\n     * $updatedPolicy = (new PolicyBuilder($iam->policy()))\n     *     ->addBinding('roles/pubsub.publisher', [\n     *         \"serviceAccount:$serviceAccountEmail\"\n     *     ])\n     *     ->result();\n     * $iam->setPolicy($updatedPolicy);\n     *\n     * $notification = $bucket->createNotification($topicName);\n     * ```\n     *\n     * ```\n     * // Use a fully qualified topic name.\n     * $notification = $bucket->createNotification('projects/my-project/topics/my-topic');\n     * ```\n     *\n     * ```\n     * // Provide a Topic object from the Cloud PubSub component.\n     * use Google\\Cloud\\PubSub\\PubSubClient;\n     *\n     * $pubSub = new PubSubClient();\n     * $topic = $pubSub->topic('my-topic');\n     * $notification = $bucket->createNotification($topic);\n     * ```\n     *\n     * ```\n     * // Supplying event types to trigger the notifications.\n     * $notification = $bucket->createNotification('my-topic', [\n     *     'event_types' => [\n     *         'OBJECT_DELETE',\n     *         'OBJECT_METADATA_UPDATE'\n     *     ]\n     * ]);\n     * ```\n     *\n     * @codingStandardsIgnoreStart\n     * @see https://cloud.google.com/storage/docs/pubsub-notifications Cloud PubSub Notifications.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/insert Notifications insert API documentation.\n     * @see https://cloud.google.com/storage/docs/reporting-changes Registering Object Changes.\n     * @codingStandardsIgnoreEnd\n     *\n     * @param string|Topic $topic The topic used to publish notifications.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type array $custom_attributes An optional list of additional\n     *           attributes to attach to each Cloud PubSub message published for\n     *           this notification subscription.\n     *     @type array $event_types If present, only send notifications about\n     *           listed event types. If empty, sent notifications for all event\n     *           types. Acceptablue values include `\"OBJECT_FINALIZE\"`,\n     *           `\"OBJECT_METADATA_UPDATE\"`, `\"OBJECT_DELETE\"`\n     *           , `\"OBJECT_ARCHIVE\"`.\n     *     @type string $object_name_prefix If present, only apply this\n     *           notification configuration to object names that begin with this\n     *           prefix.\n     *     @type string $payload_format The desired content of the Payload.\n     *           Acceptable values include `\"JSON_API_V1\"`, `\"NONE\"`.\n     *           **Defaults to** `\"JSON_API_V1\"`.\n     * }\n     * @return Notification\n     * @throws \\InvalidArgumentException When providing a type other than string\n     *         or {@see \\Google\\Cloud\\PubSub\\Topic} as $topic.\n     * @throws GoogleException When a project ID has not been detected.\n     * @experimental The experimental flag means that while we believe this\n     *      method or class is ready for use, it may change before release in\n     *      backwards-incompatible ways. Please use with caution, and test\n     *      thoroughly when upgrading.\n     */\n    public function createNotification($topic, array $options = [])\n    {\n        $res = $this->connection->insertNotification($options + $this->identity + [\n            'topic' => $this->getFormattedTopic($topic),\n            'payload_format' => 'JSON_API_V1'\n        ]);\n\n        return new Notification(\n            $this->connection,\n            $res['id'],\n            $this->identity['bucket'],\n            $res + [\n                'requesterProjectId' => $this->identity['userProject']\n            ]\n        );\n    }\n\n    /**\n     * Lazily instantiates a notification. There are no network requests made at\n     * this point.\n     *\n     * To see the operations that can be performed on a notification\n     * please see {@see Notification}.\n     *\n     * Example:\n     * ```\n     * $notification = $bucket->notification('4582');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/notifications#resource Notifications API documentation.\n     *\n     * @param string $id The ID of the notification to access.\n     * @return Notification\n     * @experimental The experimental flag means that while we believe this\n     *      method or class is ready for use, it may change before release in\n     *      backwards-incompatible ways. Please use with caution, and test\n     *      thoroughly when upgrading.\n     */\n    public function notification($id)\n    {\n        return new Notification(\n            $this->connection,\n            $id,\n            $this->identity['bucket'],\n            ['requesterProjectId' => $this->identity['userProject']]\n        );\n    }\n\n    /**\n     * Fetches all notifications associated with this bucket.\n     *\n     * Example:\n     * ```\n     * $notifications = $bucket->notifications();\n     *\n     * foreach ($notifications as $notification) {\n     *     echo $notification->id() . PHP_EOL;\n     * }\n     * ```\n     *\n     * @codingStandardsIgnoreStart\n     * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/list Notifications list API documentation.\n     * @codingStandardsIgnoreEnd\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type int $resultLimit Limit the number of results returned in total.\n     *           **Defaults to** `0` (return all results).\n     * }\n     * @return ItemIterator<Notification>\n     * @experimental The experimental flag means that while we believe this\n     *      method or class is ready for use, it may change before release in\n     *      backwards-incompatible ways. Please use with caution, and test\n     *      thoroughly when upgrading.\n     */\n    public function notifications(array $options = [])\n    {\n        $resultLimit = $this->pluck('resultLimit', $options, false);\n\n        /** @var ItemIterator<Notification> */\n        return new ItemIterator(\n            new PageIterator(\n                function (array $notification) {\n                    return new Notification(\n                        $this->connection,\n                        $notification['id'],\n                        $this->identity['bucket'],\n                        $notification + [\n                            'requesterProjectId' => $this->identity['userProject']\n                        ]\n                    );\n                },\n                [$this->connection, 'listNotifications'],\n                $options + $this->identity,\n                ['resultLimit' => $resultLimit]\n            )\n        );\n    }\n\n    /**\n     * Delete the bucket.\n     *\n     * Example:\n     * ```\n     * $bucket->delete();\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/delete Buckets delete API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *     @type string $ifMetagenerationMatch If set, only deletes the bucket\n     *           if its metageneration matches this value.\n     *     @type string $ifMetagenerationNotMatch If set, only deletes the\n     *           bucket if its metageneration does not match this value.\n     * }\n     * @return void\n     */\n    public function delete(array $options = [])\n    {\n        $this->connection->deleteBucket($options + $this->identity);\n    }\n\n    /**\n     * Update the bucket. Upon receiving a result the local bucket's data will\n     * be updated.\n     *\n     * Example:\n     * ```\n     * // Enable logging on an existing bucket.\n     * $bucket->update([\n     *     'logging' => [\n     *         'logBucket' => 'myBucket',\n     *         'logObjectPrefix' => 'prefix'\n     *     ]\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/patch Buckets patch API documentation.\n     * @see https://cloud.google.com/storage/docs/key-terms#bucket-labels Bucket Labels\n     *\n     * @codingStandardsIgnoreStart\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $ifMetagenerationMatch Makes the return of the bucket\n     *           metadata conditional on whether the bucket's current\n     *           metageneration matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the return of the bucket\n     *           metadata conditional on whether the bucket's current\n     *           metageneration does not match the given value.\n     *     @type string $predefinedAcl Predefined ACL to apply to the bucket.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type string $predefinedDefaultObjectAcl Apply a predefined set of\n     *           default object access controls to this bucket. Acceptable\n     *           values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type string $projection Determines which properties to return. May\n     *           be either `\"full\"` or `\"noAcl\"`.\n     *     @type string $fields Selector which will cause the response to only\n     *           return the specified fields.\n     *     @type array $acl Access controls on the bucket.\n     *     @type array $cors The bucket's Cross-Origin Resource Sharing (CORS)\n     *           configuration.\n     *     @type array $defaultObjectAcl Default access controls to apply to new\n     *           objects when no ACL is provided.\n     *     @type array|Lifecycle $lifecycle The bucket's lifecycle configuration.\n     *     @type array $logging The bucket's logging configuration, which\n     *           defines the destination bucket and optional name prefix for the\n     *           current bucket's logs.\n     *     @type string $storageClass The bucket's storage class. This defines\n     *           how objects in the bucket are stored and determines the SLA and\n     *           the cost of storage. Acceptable values include the following\n     *           strings: `\"STANDARD\"`, `\"NEARLINE\"`, `\"COLDLINE\"` and\n     *           `\"ARCHIVE\"`. Legacy values including `\"MULTI_REGIONAL\"`,\n     *           `\"REGIONAL\"` and `\"DURABLE_REDUCED_AVAILABILITY\"` are also\n     *           available, but should be avoided for new implementations. For\n     *           more information, refer to the\n     *           [Storage Classes](https://cloud.google.com/storage/docs/storage-classes)\n     *           documentation. **Defaults to** `\"STANDARD\"`.\n     *     @type array $autoclass The bucket's autoclass configuration.\n     *           Buckets can have either StorageClass OLM rules or Autoclass,\n     *           but not both. When Autoclass is enabled on a bucket, adding\n     *           StorageClass OLM rules will result in failure.\n     *           For more information, refer to\n     *           [Storage Autoclass](https://cloud.google.com/storage/docs/autoclass)\n     *     @type array $versioning The bucket's versioning configuration.\n     *     @type array $website The bucket's website configuration.\n     *     @type array $billing The bucket's billing configuration.\n     *     @type bool $billing.requesterPays When `true`, requests to this bucket\n     *           and objects within it must provide a project ID to which the\n     *           request will be billed.\n     *     @type array $labels The Bucket labels. Labels are represented as an\n     *           array of keys and values. To remove an existing label, set its\n     *           value to `null`.\n     *     @type array $encryption Encryption configuration used by default for\n     *           newly inserted objects.\n     *     @type string $encryption.defaultKmsKeyName A Cloud KMS Key used to\n     *           encrypt objects uploaded into this bucket. Should be in the\n     *           format\n     *           `projects/my-project/locations/kr-location/keyRings/my-kr/cryptoKeys/my-key`.\n     *           Please note the KMS key ring must use the same location as the\n     *           bucket.\n     *     @type bool $defaultEventBasedHold When `true`, newly created objects\n     *           in this bucket will be retained indefinitely until an event\n     *           occurs, signified by the hold's release.\n     *     @type array $retentionPolicy Defines the retention policy for a\n     *           bucket. In order to lock a retention policy, please see\n     *           {@see Bucket::lockRetentionPolicy()}.\n     *     @type int $retentionPolicy.retentionPeriod Specifies the duration\n     *           that objects need to be retained, in seconds. Retention\n     *           duration must be greater than zero and less than 100 years.\n     *     @type array $iamConfiguration The bucket's IAM configuration.\n     *     @type bool $iamConfiguration.bucketPolicyOnly.enabled this is an alias\n     *           for $iamConfiguration.uniformBucketLevelAccess.\n     *     @type bool $iamConfiguration.uniformBucketLevelAccess.enabled If set and\n     *           true, access checks only use bucket-level IAM policies or\n     *           above. When enabled, requests attempting to view or manipulate\n     *           ACLs will fail with error code 400. **NOTE**: Before using\n     *           Uniform bucket-level access, please review the\n     *           [feature documentation](https://cloud.google.com/storage/docs/uniform-bucket-level-access),\n     *           as well as\n     *           [Should You Use uniform bucket-level access](https://cloud.google.com/storage/docs/uniform-bucket-level-access#should-you-use)\n     *     @type string $iamConfiguration.publicAccessPrevention The bucket's\n     *           Public Access Prevention configuration. Currently,\n     *           'inherited' and 'enforced' are supported. **defaults to**\n     *           `inherited`. For more details, see\n     *           [Public Access Prevention](https://cloud.google.com/storage/docs/public-access-prevention).\n     * }\n     * @codingStandardsIgnoreEnd\n     * @return array\n     */\n    public function update(array $options = [])\n    {\n        if (isset($options['lifecycle']) && $options['lifecycle'] instanceof Lifecycle) {\n            $options['lifecycle'] = $options['lifecycle']->toArray();\n        }\n\n        return $this->info = $this->connection->patchBucket($options + $this->identity);\n    }\n\n    /**\n     * Composes a set of objects into a single object.\n     *\n     * Please note that all objects to be composed must come from the same\n     * bucket.\n     *\n     * Example:\n     * ```\n     * $sourceObjects = ['log1.txt', 'log2.txt'];\n     * $singleObject = $bucket->compose($sourceObjects, 'combined-logs.txt');\n     * ```\n     *\n     * ```\n     * // Use an instance of StorageObject.\n     * $sourceObjects = [\n     *     $bucket->object('log1.txt'),\n     *     $bucket->object('log2.txt')\n     * ];\n     *\n     * $singleObject = $bucket->compose($sourceObjects, 'combined-logs.txt');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/compose Objects compose API documentation\n     *\n     * @param string[]|StorageObject[] $sourceObjects The objects to compose.\n     * @param string $name The name of the composed object.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $predefinedAcl Predefined ACL to apply to the composed\n     *           object. Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type array $metadata Metadata to apply to the composed object. The\n     *           available options for metadata are outlined at the\n     *           [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).\n     *     @type string $ifGenerationMatch Makes the operation conditional on whether the object's current generation\n     *           matches the given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional on whether the object's current\n     *           metageneration matches the given value.\n     * }\n     * @return StorageObject\n     * @throws \\InvalidArgumentException\n     */\n    public function compose(array $sourceObjects, $name, array $options = [])\n    {\n        if (count($sourceObjects) < 2) {\n            throw new \\InvalidArgumentException('Must provide at least two objects to compose.');\n        }\n\n        $options += [\n            'destinationBucket' => $this->name(),\n            'destinationObject' => $name,\n            'destinationPredefinedAcl' => isset($options['predefinedAcl']) ? $options['predefinedAcl'] : null,\n            'destination' => isset($options['metadata']) ? $options['metadata'] : null,\n            'userProject' => $this->identity['userProject'],\n            'sourceObjects' => array_map(function ($sourceObject) {\n                $name = null;\n                $generation = null;\n\n                if ($sourceObject instanceof StorageObject) {\n                    $name = $sourceObject->name();\n                    $generation = $sourceObject->identity()['generation'] ?? null;\n                }\n\n                return array_filter([\n                    'name' => $name ?: $sourceObject,\n                    'generation' => $generation\n                ]);\n            }, $sourceObjects)\n        ];\n\n        if (!isset($options['destination']['contentType'])) {\n            $options['destination']['contentType'] = MimeType::fromFilename($name);\n        }\n\n        if ($options['destination']['contentType'] === null) {\n            throw new \\InvalidArgumentException('A content type could not be detected and must be provided manually.');\n        }\n\n        unset($options['metadata']);\n        unset($options['predefinedAcl']);\n\n        $response = $this->connection->composeObject(array_filter($options));\n\n        return new StorageObject(\n            $this->connection,\n            $response['name'],\n            $this->identity['bucket'],\n            $response['generation'],\n            $response + array_filter([\n                'requesterProjectId' => $this->identity['userProject']\n            ])\n        );\n    }\n\n    /**\n     * Retrieves the bucket's details. If no bucket data is cached a network\n     * request will be made to retrieve it.\n     *\n     * Example:\n     * ```\n     * $info = $bucket->info();\n     * echo $info['location'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/get Buckets get API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $generation If present, selects a specific soft-deleted\n     *           version of this bucket instead of the live version.\n     *           This parameter is required if softDeleted is set to true.\n     *     @type string $ifMetagenerationMatch Makes the return of the bucket\n     *           metadata conditional on whether the bucket's current\n     *           metageneration matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the return of the bucket\n     *           metadata conditional on whether the bucket's current\n     *           metageneration does not match the given value.\n     *     @type string $projection Determines which properties to return. May\n     *           be either `\"full\"` or `\"noAcl\"`.\n     *     @type bool $softDeleted If true, returns the soft-deleted bucket.\n     *           This parameter is required if generation is specified.\n     * }\n     * @return array\n     */\n    public function info(array $options = [])\n    {\n        return $this->info ?: $this->reload($options);\n    }\n\n    /**\n     * Triggers a network request to reload the bucket's details.\n     *\n     * Example:\n     * ```\n     * $bucket->reload();\n     * $info = $bucket->info();\n     * echo $info['location'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/get Buckets get API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $generation If present, selects a specific soft-deleted\n     *           version of this bucket instead of the live version.\n     *           This parameter is required if softDeleted is set to true.\n     *     @type string $ifMetagenerationMatch Makes the return of the bucket\n     *           metadata conditional on whether the bucket's current\n     *           metageneration matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the return of the bucket\n     *           metadata conditional on whether the bucket's current\n     *           metageneration does not match the given value.\n     *     @type string $projection Determines which properties to return. May\n     *           be either `\"full\"` or `\"noAcl\"`.\n     *     @type bool $softDeleted If true, returns the soft-deleted bucket.\n     *           This parameter is required if generation is specified.\n     * }\n     * @return array\n     */\n    public function reload(array $options = [])\n    {\n        return $this->info = $this->connection->getBucket($options + $this->identity);\n    }\n\n    /**\n     * Retrieves the bucket's name.\n     *\n     * Example:\n     * ```\n     * echo $bucket->name();\n     * ```\n     *\n     * @return string\n     */\n    public function name()\n    {\n        return $this->identity['bucket'];\n    }\n\n    /**\n     * Retrieves a fresh lifecycle builder. If a lifecyle configuration already\n     * exists on the target bucket and this builder is used, it will fully\n     * replace the configuration with the rules provided by this builder.\n     *\n     * This builder is intended to be used in tandem with\n     * {@see StorageClient::createBucket()} and\n     * {@see Bucket::update()}.\n     *\n     * Example:\n     * ```\n     * use Google\\Cloud\\Storage\\Bucket;\n     *\n     * $lifecycle = Bucket::lifecycle()\n     *     ->addDeleteRule([\n     *         'age' => 50,\n     *         'isLive' => true\n     *     ]);\n     * $bucket->update([\n     *     'lifecycle' => $lifecycle\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/lifecycle Object Lifecycle Management API Documentation\n     *\n     * @param array $lifecycle [optional] A lifecycle configuration. Please see\n     *        [here](https://cloud.google.com/storage/docs/json_api/v1/buckets#lifecycle)\n     *        for the expected structure.\n     * @return Lifecycle\n     */\n    public static function lifecycle(array $lifecycle = [])\n    {\n        return new Lifecycle($lifecycle);\n    }\n\n    /**\n     * Retrieves a lifecycle builder preconfigured with the lifecycle rules that\n     * already exists on the bucket.\n     *\n     * Use this if you want to make updates to an\n     * existing configuration without removing existing rules, as would be the\n     * case when using {@see Bucket::lifecycle()}.\n     *\n     * This builder is intended to be used in tandem with\n     * {@see StorageClient::createBucket()} and\n     * {@see Bucket::update()}.\n     *\n     * Please note, this method may trigger a network request in order to fetch\n     * the existing lifecycle rules from the server.\n     *\n     * Example:\n     * ```\n     * $lifecycle = $bucket->currentLifecycle()\n     *     ->addDeleteRule([\n     *         'age' => 50,\n     *         'isLive' => true\n     *     ]);\n     * $bucket->update([\n     *     'lifecycle' => $lifecycle\n     * ]);\n     * ```\n     *\n     * ```\n     * // Iterate over existing rules.\n     * $lifecycle = $bucket->currentLifecycle();\n     *\n     * foreach ($lifecycle as $rule) {\n     *     print_r($rule);\n     * }\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/lifecycle Object Lifecycle Management API Documentation\n     *\n     * @param array $options [optional] Configuration options.\n     * @return Lifecycle\n     */\n    public function currentLifecycle(array $options = [])\n    {\n        return self::lifecycle(\n            isset($this->info($options)['lifecycle'])\n                ? $this->info['lifecycle']\n                : []\n        );\n    }\n\n    /**\n     * Returns whether the bucket with the given file prefix is writable.\n     * Tries to create a temporary file as a resumable upload which will\n     * not be completed (and cleaned up by GCS).\n     *\n     * @param  string $file [optional] File to try to write.\n     * @return bool\n     * @throws ServiceException\n     */\n    public function isWritable($file = null)\n    {\n        $file = $file ?: '__tempfile';\n        $uploader = $this->getResumableUploader(\n            Utils::streamFor(''),\n            ['name' => $file]\n        );\n        try {\n            $uploader->getResumeUri();\n        } catch (ServiceException $e) {\n            // We expect a 403 access denied error if the bucket is not writable\n            if ($e->getCode() == 403) {\n                return false;\n            }\n            // If not a 403, re-raise the unexpected error\n            throw $e;\n        }\n\n        return true;\n    }\n\n    /**\n     * Manage the IAM policy for the current Bucket.\n     *\n     * To request a policy with conditions, pass an array with\n     * '[requestedPolicyVersion => 3]' as argument to the policy() and\n     * reload() methods.\n     *\n     * Example:\n     * ```\n     * $iam = $bucket->iam();\n     *\n     * // Returns the stored policy, or fetches the policy if none exists.\n     * $policy = $iam->policy(['requestedPolicyVersion' => 3]);\n     *\n     * // Fetches a policy from the server.\n     * $policy = $iam->reload(['requestedPolicyVersion' => 3]);\n     * ```\n     *\n     * @codingStandardsIgnoreStart\n     * @see https://cloud.google.com/storage/docs/access-control/iam-with-json-and-xml Storage Access Control Documentation\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/getIamPolicy Get Bucket IAM Policy\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy Set Bucket IAM Policy\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/testIamPermissions Test Bucket Permissions\n     * @see https://cloud.google.com/iam/docs/policies#versions policy versioning.\n     * @codingStandardsIgnoreEnd\n     *\n     * @return Iam\n     */\n    public function iam()\n    {\n        if (!$this->iam) {\n            $this->iam = new Iam(\n                new IamBucket($this->connection),\n                $this->identity['bucket'],\n                [\n                    'parent' => null,\n                    'args' => $this->identity\n                ]\n            );\n        }\n\n        return $this->iam;\n    }\n\n    /**\n     * Locks a provided retention policy on this bucket. Upon receiving a result,\n     * the local bucket's data will be updated.\n     *\n     * Please note that in order for this call to succeed, the applicable\n     * metageneration value will need to be available. It can either be supplied\n     * explicitly through the `ifMetagenerationMatch` option or detected for you\n     * by ensuring a value is cached locally (by calling\n     * {@see Bucket::reload()} or\n     * {@see Bucket::info()}, for example).\n     *\n     * Example:\n     * ```\n     * // Set a retention policy.\n     * $bucket->update([\n     *     'retentionPolicy' => [\n     *         'retentionPeriod' => 604800 // One week in seconds.\n     *     ]\n     * ]);\n     * // Lock in the policy.\n     * $info = $bucket->lockRetentionPolicy();\n     * $retentionPolicy = $info['retentionPolicy'];\n     *\n     * // View the time from which the policy was enforced and effective. (RFC 3339 format)\n     * echo $retentionPolicy['effectiveTime'] . PHP_EOL;\n     *\n     * // View whether or not the retention policy is locked. This will be\n     * // `true` after a successful call to `lockRetentionPolicy`.\n     * echo $retentionPolicy['isLocked'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/bucket-lock Bucket Lock Documentation\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $ifMetagenerationMatch Only locks the retention policy\n     *           if the bucket's metageneration matches this value. If not\n     *           provided the locally cached metageneration value will be used,\n     *           otherwise an exception will be thrown.\n     * }\n     * @throws \\BadMethodCallException If no metageneration value is available.\n     * @return array\n     */\n    public function lockRetentionPolicy(array $options = [])\n    {\n        if (!isset($options['ifMetagenerationMatch'])) {\n            if (!isset($this->info['metageneration'])) {\n                throw new \\BadMethodCallException(\n                    'No metageneration value was detected. Please either provide ' .\n                    'a value explicitly or ensure metadata is loaded through a ' .\n                    'call such as Bucket::reload().'\n                );\n            }\n\n            $options['ifMetagenerationMatch'] = $this->info['metageneration'];\n        }\n\n        return $this->info = $this->connection->lockRetentionPolicy(\n            $options + $this->identity\n        );\n    }\n\n    /**\n     * Create a Signed URL listing objects in this bucket.\n     *\n     * Example:\n     * ```\n     * $url = $bucket->signedUrl(time() + 3600);\n     * ```\n     *\n     * ```\n     * // Use V4 Signing\n     * $url = $bucket->signedUrl(time() + 3600, [\n     *     'version' => 'v4'\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/access-control/signed-urls Signed URLs\n     *\n     * @param Timestamp|\\DateTimeInterface|int $expires Specifies when the URL\n     *        will expire. May provide an instance of {@see \\Google\\Cloud\\Core\\Timestamp},\n     *        [http://php.net/datetimeimmutable](`\\DateTimeImmutable`), or a\n     *        UNIX timestamp as an integer.\n     * @param array $options {\n     *     Configuration Options.\n     *\n     *     @type string $cname The CNAME for the bucket, for instance\n     *           `https://cdn.example.com`. **Defaults to**\n     *           `https://storage.googleapis.com`.\n     *     @type string $contentMd5 The MD5 digest value in base64. If you\n     *           provide this, the client must provide this HTTP header with\n     *           this same value in its request. If provided, take care to\n     *           always provide this value as a base64 encoded string.\n     *     @type string $contentType If you provide this value, the client must\n     *           provide this HTTP header set to the same value.\n     *     @type bool $forceOpenssl If true, OpenSSL will be used regardless of\n     *           whether phpseclib is available. **Defaults to** `false`.\n     *     @type array $headers If additional headers are provided, the server\n     *           will check to make sure that the client provides matching\n     *           values. Provide headers as a key/value array, where the key is\n     *           the header name, and the value is an array of header values.\n     *           Headers with multiple values may provide values as a simple\n     *           array, or a comma-separated string. For a reference of allowed\n     *           headers, see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers).\n     *           Header values will be trimmed of leading and trailing spaces,\n     *           multiple spaces within values will be collapsed to a single\n     *           space, and line breaks will be replaced by an empty string.\n     *           V2 Signed URLs may not provide `x-goog-encryption-key` or\n     *           `x-goog-encryption-key-sha256` headers.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type array $keyFile [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n    *     @type string $keyFilePath [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *     @type array $queryParams Additional query parameters to be included\n     *           as part of the signed URL query string. For allowed values,\n     *           see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers#query).\n     *     @type string $version One of \"v2\" or \"v4\". *Defaults to** `\"v2\"`.\n     * }\n     * @return string\n     * @throws \\InvalidArgumentException If the given expiration is invalid or in the past.\n     * @throws \\InvalidArgumentException If the given `$options.method` is not valid.\n     * @throws \\InvalidArgumentException If the given `$options.keyFilePath` is not valid.\n     * @throws \\InvalidArgumentException If the given custom headers are invalid.\n     * @throws \\RuntimeException If the keyfile does not contain the required information.\n     */\n    public function signedUrl($expires, array $options = [])\n    {\n        // May be overridden for testing.\n        $signingHelper = $this->pluck('helper', $options, false)\n            ?: SigningHelper::getHelper();\n\n        $resource = sprintf(\n            '/%s',\n            $this->identity['bucket']\n        );\n\n        return $signingHelper->sign(\n            $this->connection,\n            $expires,\n            $resource,\n            null,\n            $options\n        );\n    }\n\n    /**\n     * Create a signed upload policy for uploading objects.\n     *\n     * This method generates and signs a policy document. You can use policy\n     * documents to allow visitors to a website to upload files to Google Cloud\n     * Storage without giving them direct write access.\n     *\n     * Google Cloud PHP does not support v2 post policies.\n     *\n     * Example:\n     * ```\n     * $policy = $bucket->generateSignedPostPolicyV4($objectName, new \\DateTime('tomorrow'), [\n     *     'conditions' => [\n     *         ['content-length-range', 0, 255]\n     *     ],\n     *     'fields' => [\n     *          'x-goog-meta-hello' => 'world',\n     *          'success_action_redirect' => 'https://google.com'\n     *     ]\n     * ]);\n     *\n     * echo '<form action=\"' . $policy['url'] . '\" method=\"post\" enctype=\"multipart/form-data\">';\n     * foreach ($policy['fields'] as $name => $value) {\n     *     echo '<input type=\"hidden\" name=\"' . $name . '\" value=\"' . $value . '\">';\n     * }\n     *\n     * echo 'Upload a file!<br>';\n     * echo '<input type=\"file\" name=\"file\">';\n     * echo '<button type=\"submit\">Submit!</button>';\n     * echo '</form>';\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/xml-api/post-object#policydocument Policy Documents\n     *\n     * @param string $objectName The path to the file in Google Cloud Storage,\n     *        relative to the bucket.\n     * @param Timestamp|\\DateTimeInterface|int $expires Specifies when the URL\n     *        will expire. May provide an instance of {@see \\Google\\Cloud\\Core\\Timestamp},\n     *        [http://php.net/datetimeimmutable](`\\DateTimeImmutable`), or a\n     *        UNIX timestamp as an integer.\n     * @param array $options [optional] {\n     *     Configuration options\n     *\n     *     @type string $bucketBoundHostname The hostname for the bucket, for\n     *           instance `cdn.example.com`. May be used for Google Cloud Load\n     *           Balancers or for custom bucket CNAMEs. **Defaults to**\n     *           `storage.googleapis.com`.\n     *     @type array $conditions A list of arrays containing policy matching\n     *           conditions (e.g. `eq`, `starts-with`, `content-length-range`).\n     *     @type array $fields Additional form fields (do not include\n     *           `x-goog-signature`, `file`, `policy` or fields with an\n     *           `x-ignore` prefix), given as key/value pairs.\n     *     @type bool $forceOpenssl If true, OpenSSL will be used regardless of\n     *           whether phpseclib is available. **Defaults to** `false`.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type array $keyFile [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n    *     @type string $keyFilePath [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *           hostname is provided via `$options.bucketBoundHostname`. If a\n     *           custom bucketBoundHostname is provided, **defaults to** `http`.\n     *           In all other cases, **defaults to** `https`.\n     *     @type string|array $scopes One or more authentication scopes to be\n     *           used with a key file. This option is ignored unless\n     *           `$options.keyFile` or `$options.keyFilePath` is set.\n     *     @type bool $virtualHostedStyle If `true`, URL will be of form\n     *           `mybucket.storage.googleapis.com`. If `false`,\n     *           `storage.googleapis.com/mybucket`. **Defaults to** `false`.\n     * }\n     * @return array An associative array, containing (string) `uri` and\n     *        (array) `fields` keys.\n     */\n    public function generateSignedPostPolicyV4($objectName, $expires, array $options = [])\n    {\n        // May be overridden for testing.\n        $signingHelper = $this->pluck('helper', $options, false)\n            ?: SigningHelper::getHelper();\n\n        $resource = sprintf('/%s/%s', $this->identity['bucket'], $objectName);\n        return $signingHelper->v4PostPolicy(\n            $this->connection,\n            $expires,\n            $resource,\n            $options\n        );\n    }\n\n    /**\n     * Determines if an object name is required.\n     *\n     * @param mixed $data\n     * @return bool\n     */\n    private function isObjectNameRequired($data)\n    {\n        return is_string($data) || is_null($data);\n    }\n\n    /**\n     * Return a topic name in its fully qualified format.\n     *\n     * @param Topic|string $topic\n     * @return string\n     * @throws \\InvalidArgumentException\n     * @throws GoogleException\n     */\n    private function getFormattedTopic($topic)\n    {\n        if ($topic instanceof Topic) {\n            return sprintf(self::NOTIFICATION_TEMPLATE, $topic->name());\n        }\n\n        if (!is_string($topic)) {\n            throw new \\InvalidArgumentException(\n                '$topic may only be a string or instance of Google\\Cloud\\PubSub\\Topic'\n            );\n        }\n\n        if (preg_match('/projects\\/[^\\/]*\\/topics\\/(.*)/', $topic) === 1) {\n            return sprintf(self::NOTIFICATION_TEMPLATE, $topic);\n        }\n\n        if (!$this->projectId) {\n            throw new GoogleException(\n                'No project ID was provided, ' .\n                'and we were unable to detect a default project ID.'\n            );\n        }\n\n        return sprintf(\n            self::NOTIFICATION_TEMPLATE,\n            sprintf(self::TOPIC_TEMPLATE, $this->projectId, $topic)\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/BucketIterator.php",
    "content": "<?php\n/**\n * Copyright 2025 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse ArrayObject;\nuse Google\\Cloud\\Core\\Iterator\\ItemIterator;\nuse Google\\Cloud\\Core\\Iterator\\PageIterator;\n\n/**\n * Iterates over a set of buckets.\n *\n * Use the `unreachable()` method to get a list of bucket names that could not\n * be retrieved. This is only populated when the `returnPartialSuccess` is set to true\n */\nclass BucketIterator extends ItemIterator\n{\n    /**\n     * @param PageIterator $iterator\n     * @param ArrayObject $unreachable\n     */\n    public function __construct(PageIterator $iterator, private ArrayObject $unreachable)\n    {\n        parent::__construct($iterator);\n    }\n\n    /**\n     * Get the list of unreachable buckets.\n     *\n     * @return array<string>\n     */\n    public function unreachable()\n    {\n        return $this->unreachable->getArrayCopy();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Connection/ConnectionInterface.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage\\Connection;\n\n/**\n * Represents a connection to\n * [Cloud Storage](https://cloud.google.com/storage/).\n *\n * @internal\n */\ninterface ConnectionInterface\n{\n    /**\n     * @param array $args\n     */\n    public function deleteAcl(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function getAcl(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function listAcl(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function insertAcl(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function patchAcl(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function deleteBucket(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function restoreBucket(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function getBucket(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function listBuckets(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function insertBucket(array $args = []);\n\n    /**\n     * @param  array $args\n     */\n    public function getBucketIamPolicy(array $args);\n\n    /**\n     * @param  array $args\n     */\n    public function setBucketIamPolicy(array $args);\n\n    /**\n     * @param  array $args\n     */\n    public function testBucketIamPermissions(array $args);\n\n    /**\n     * @param array $args\n     */\n    public function patchBucket(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function deleteObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function restoreObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function copyObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function rewriteObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function moveObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function composeObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function getObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function listObjects(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function patchObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function downloadObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function insertObject(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function getNotification(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function deleteNotification(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function insertNotification(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function listNotifications(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function getServiceAccount(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function lockRetentionPolicy(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function createHmacKey(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function deleteHmacKey(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function getHmacKey(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function updateHmacKey(array $args = []);\n\n    /**\n     * @param array $args\n     */\n    public function listHmacKeys(array $args = []);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Connection/IamBucket.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage\\Connection;\n\nuse Google\\Cloud\\Core\\Iam\\IamConnectionInterface;\n\n/**\n * IAM Implementation for GCS Buckets\n *\n * @internal\n */\nclass IamBucket implements IamConnectionInterface\n{\n    /**\n     * @var ConnectionInterface\n     */\n    private $connection;\n\n    /**\n     * @param  ConnectionInterface $connection\n     */\n    public function __construct(ConnectionInterface $connection)\n    {\n        $this->connection = $connection;\n    }\n\n    /**\n     * @param  array $args\n     */\n    public function getPolicy(array $args)\n    {\n        if (isset($args['requestedPolicyVersion'])) {\n            $args['optionsRequestedPolicyVersion'] = $args['requestedPolicyVersion'];\n            unset($args['requestedPolicyVersion']);\n        }\n\n        return $this->connection->getBucketIamPolicy($args);\n    }\n\n    /**\n     * @param  array $args\n     */\n    public function setPolicy(array $args)\n    {\n        unset($args['resource']);\n        return $this->connection->setBucketIamPolicy($args);\n    }\n\n    /**\n     * @param  array $args\n     */\n    public function testPermissions(array $args)\n    {\n        unset($args['resource']);\n        return $this->connection->testBucketIamPermissions($args);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Connection/Rest.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage\\Connection;\n\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Cloud\\Core\\RequestBuilder;\nuse Google\\Cloud\\Core\\RequestWrapper;\nuse Google\\Cloud\\Core\\RestTrait;\nuse Google\\Cloud\\Core\\Retry;\nuse Google\\Cloud\\Core\\Upload\\AbstractUploader;\nuse Google\\Cloud\\Core\\Upload\\MultipartUploader;\nuse Google\\Cloud\\Core\\Upload\\ResumableUploader;\nuse Google\\Cloud\\Core\\Upload\\StreamableUploader;\nuse Google\\Cloud\\Core\\UriTrait;\nuse Google\\Cloud\\Storage\\StorageClient;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Psr7\\MimeType;\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Implementation of the\n * [Google Cloud Storage JSON API](https://cloud.google.com/storage/docs/json_api/).\n *\n * @internal\n */\nclass Rest implements ConnectionInterface\n{\n    use RestTrait {\n        send as private traitSend;\n    }\n    use RetryTrait;\n    use UriTrait;\n\n    /**\n     * Header and value that helps us identify a transcoded obj\n     * w/o making a metadata(info) call.\n     */\n    private const TRANSCODED_OBJ_HEADER_KEY = 'X-Goog-Stored-Content-Encoding';\n    private const TRANSCODED_OBJ_HEADER_VAL = 'gzip';\n\n    /**\n     * @deprecated\n     */\n    const BASE_URI = 'https://storage.googleapis.com/storage/v1/';\n\n    /**\n     * @deprecated\n     */\n    const DEFAULT_API_ENDPOINT = 'https://storage.googleapis.com';\n\n    const DEFAULT_API_ENDPOINT_TEMPLATE = 'https://storage.UNIVERSE_DOMAIN';\n\n    /**\n     * @deprecated\n     */\n    const UPLOAD_URI = 'https://storage.googleapis.com/upload/storage/v1/b/{bucket}/o{?query*}';\n\n    const UPLOAD_PATH = 'upload/storage/v1/b/{bucket}/o{?query*}';\n\n    /**\n     * @deprecated\n     */\n    const DOWNLOAD_URI = 'https://storage.googleapis.com/storage/v1/b/{bucket}/o/{object}{?query*}';\n\n    const DOWNLOAD_PATH = 'storage/v1/b/{bucket}/o/{object}{?query*}';\n\n    /**\n     * @var string\n     */\n    private $projectId;\n\n    /**\n     * @var string\n     */\n    private $apiEndpoint;\n\n    /**\n     * @var callable\n     * value null accepted\n     */\n    private $restRetryFunction;\n\n    /**\n     * @var string|null\n     */\n    private ?string $retryStrategy;\n\n    /**\n     * @var callable|null\n     */\n    private $restDelayFunction;\n\n    /**\n     * @var callable|null\n     */\n    private $restCalcDelayFunction;\n\n    /**\n     * @var callable|null\n     */\n    private $restRetryListener;\n\n    /**\n     * @param array $config\n     */\n    public function __construct(array $config = [])\n    {\n        $config += [\n            'serviceDefinitionPath' => __DIR__ . '/ServiceDefinition/storage-v1.json',\n            'componentVersion' => StorageClient::VERSION,\n            'apiEndpoint' => null,\n            // If the user has not supplied a universe domain, use the environment variable if set.\n            // Otherwise, use the default (\"googleapis.com\").\n            'universeDomain' => getenv('GOOGLE_CLOUD_UNIVERSE_DOMAIN')\n                ?: GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN,\n            // Cloud Storage needs to provide a default scope because the Storage\n            // API does not accept JWTs with \"audience\"\n            'scopes' => StorageClient::FULL_CONTROL_SCOPE,\n        ];\n\n        $this->apiEndpoint = $this->getApiEndpoint(null, $config, self::DEFAULT_API_ENDPOINT_TEMPLATE);\n\n        $this->setRequestWrapper(new RequestWrapper($config));\n        $this->setRequestBuilder(new RequestBuilder(\n            $config['serviceDefinitionPath'],\n            $this->apiEndpoint\n        ));\n\n        $this->projectId = $this->pluck('projectId', $config, false);\n        $this->restRetryFunction = (isset($config['restRetryFunction'])) ? $config['restRetryFunction'] : null;\n        $this->retryStrategy = $config['retryStrategy'] ?? null;\n        $this->restDelayFunction = $config['restDelayFunction'] ?? null;\n        $this->restCalcDelayFunction = $config['restCalcDelayFunction'] ?? null;\n        $this->restRetryListener = $config['restRetryListener'] ?? null;\n    }\n\n    /**\n     * @return string\n     */\n    public function projectId()\n    {\n        return $this->projectId;\n    }\n\n    /**\n     * @param array $args\n     */\n    public function deleteAcl(array $args = [])\n    {\n        return $this->send($args['type'], 'delete', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getAcl(array $args = [])\n    {\n        return $this->send($args['type'], 'get', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function listAcl(array $args = [])\n    {\n        return $this->send($args['type'], 'list', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function insertAcl(array $args = [])\n    {\n        return $this->send($args['type'], 'insert', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function patchAcl(array $args = [])\n    {\n        return $this->send($args['type'], 'patch', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function deleteBucket(array $args = [])\n    {\n        return $this->send('buckets', 'delete', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function restoreBucket(array $args = [])\n    {\n        return $this->send('buckets', 'restore', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getBucket(array $args = [])\n    {\n        return $this->send('buckets', 'get', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function listBuckets(array $args = [])\n    {\n        return $this->send('buckets', 'list', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function insertBucket(array $args = [])\n    {\n        return $this->send('buckets', 'insert', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function patchBucket(array $args = [])\n    {\n        return $this->send('buckets', 'patch', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function deleteObject(array $args = [])\n    {\n        return $this->send('objects', 'delete', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function restoreObject(array $args = [])\n    {\n        return $this->send('objects', 'restore', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function copyObject(array $args = [])\n    {\n        return $this->send('objects', 'copy', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function rewriteObject(array $args = [])\n    {\n        return $this->send('objects', 'rewrite', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function moveObject(array $args = [])\n    {\n        return $this->send('objects', 'move', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function composeObject(array $args = [])\n    {\n        return $this->send('objects', 'compose', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getObject(array $args = [])\n    {\n        return $this->send('objects', 'get', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function listObjects(array $args = [])\n    {\n        return $this->send('objects', 'list', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function patchObject(array $args = [])\n    {\n        return $this->send('objects', 'patch', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function downloadObject(array $args = [])\n    {\n        // This makes sure we honour the range headers specified by the user\n        $requestedBytes = $this->getRequestedBytes($args);\n        $resultStream = Utils::streamFor(null);\n        $transcodedObj = false;\n\n        $args['retryStrategy'] ??= $this->retryStrategy;\n\n        list($request, $requestOptions) = $this->buildDownloadObjectParams($args);\n\n        $invocationId = Uuid::uuid4()->toString();\n        $requestOptions['retryHeaders'] = self::getRetryHeaders($invocationId, 1);\n        $requestOptions['restRetryFunction'] = $this->getRestRetryFunction('objects', 'get', $args);\n        // We try to deduce if the object is a transcoded object when we receive the headers.\n        $requestOptions['restOptions']['on_headers'] = function ($response) use (&$transcodedObj) {\n            $header = $response->getHeader(self::TRANSCODED_OBJ_HEADER_KEY);\n            if (is_array($header) && in_array(self::TRANSCODED_OBJ_HEADER_VAL, $header)) {\n                $transcodedObj = true;\n            }\n        };\n        $attempt = null;\n        $requestOptions['restRetryListener'] = function (\n            \\Exception $e,\n            $retryAttempt,\n            &$arguments\n        ) use (\n            $resultStream,\n            $requestedBytes,\n            $invocationId,\n            &$attempt,\n        ) {\n            // if the exception has a response for us to use\n            if ($e instanceof RequestException\n                && $e->hasResponse()\n                && $e->getResponse()->getStatusCode() >= 200\n                && $e->getResponse()->getStatusCode() < 300\n            ) {\n                $msg = (string) $e->getResponse()->getBody();\n\n                $fetchedStream = Utils::streamFor($msg);\n\n                // add the partial response to our stream that we will return\n                Utils::copyToStream($fetchedStream, $resultStream);\n\n                // Start from the byte that was last fetched\n                $startByte = intval($requestedBytes['startByte']) + $resultStream->getSize();\n                $endByte = $requestedBytes['endByte'];\n\n                // modify the range headers to fetch the remaining data\n                $arguments[1]['headers']['Range'] = sprintf('bytes=%s-%s', $startByte, $endByte);\n                $arguments[0] = $this->modifyRequestForRetry($arguments[0], $retryAttempt, $invocationId);\n\n                // Copy the final result to the end of the stream\n                $attempt = $retryAttempt;\n            }\n        };\n\n        $fetchedStream = $this->requestWrapper->send(\n            $request,\n            $requestOptions\n        )->getBody();\n\n        // If no retry attempt was made, then we can return the stream as is.\n        // This is important in the case where downloadObject is called to open\n        // the file but not to read from it yet.\n        if ($attempt === null) {\n            return $fetchedStream;\n        }\n\n        // If our object is a transcoded object, then Range headers are not honoured.\n        // That means even if we had a partial download available, the final obj\n        // that was fetched will contain the complete object. So, we don't need to copy\n        // the partial stream, we can just return the stream we fetched.\n        if ($transcodedObj) {\n            return $fetchedStream;\n        }\n\n        Utils::copyToStream($fetchedStream, $resultStream);\n\n        $resultStream->seek(0);\n        return $resultStream;\n    }\n\n    /**\n     * @param array $args\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function downloadObjectAsync(array $args = [])\n    {\n        list($request, $requestOptions) = $this->buildDownloadObjectParams($args);\n\n        return $this->requestWrapper->sendAsync(\n            $request,\n            $requestOptions\n        )->then(function (ResponseInterface $response) {\n            return $response->getBody();\n        });\n    }\n\n    /**\n     * @param array $args\n     */\n    public function insertObject(array $args = [])\n    {\n        $args = $this->resolveUploadOptions($args);\n\n        $uploadType = AbstractUploader::UPLOAD_TYPE_RESUMABLE;\n        if ($args['streamable']) {\n            $uploaderClass = StreamableUploader::class;\n        } elseif ($args['resumable']) {\n            $uploaderClass = ResumableUploader::class;\n        } else {\n            $uploaderClass = MultipartUploader::class;\n            $uploadType = AbstractUploader::UPLOAD_TYPE_MULTIPART;\n        }\n\n        $uriParams = [\n            'bucket' => $args['bucket'],\n            'query' => [\n                'predefinedAcl' => $args['predefinedAcl'],\n                'uploadType' => $uploadType,\n                'userProject' => $args['userProject']\n            ]\n        ];\n\n        // Passing the preconditions we want to extract out of arguments\n        // into our query params.\n        $preconditions = self::$condIdempotentOps['objects.insert'];\n        foreach ($preconditions as $precondition) {\n            if (isset($args[$precondition])) {\n                $uriParams['query'][$precondition] = $args[$precondition];\n            }\n        }\n\n        return new $uploaderClass(\n            $this->requestWrapper,\n            $args['data'],\n            $this->expandUri($this->apiEndpoint . self::UPLOAD_PATH, $uriParams),\n            $args['uploaderOptions']\n        );\n    }\n\n    /**\n     * @param array $args\n     */\n    private function resolveUploadOptions(array $args)\n    {\n        $args += [\n            'bucket' => null,\n            'name' => null,\n            'validate' => true,\n            'resumable' => null,\n            'streamable' => null,\n            'predefinedAcl' => null,\n            'metadata' => [],\n            'userProject' => null,\n        ];\n\n        $args['retryStrategy'] ??= $this->retryStrategy;\n\n        $args['data'] = Utils::streamFor($args['data']);\n\n        if ($args['resumable'] === null) {\n            $args['resumable'] = $args['data']->getSize() > AbstractUploader::RESUMABLE_LIMIT;\n        }\n\n        if (!$args['name']) {\n            $args['name'] = basename($args['data']->getMetadata('uri'));\n        }\n\n        $validate = $this->chooseValidationMethod($args);\n        if ($validate === 'md5') {\n            $args['metadata']['md5Hash'] = base64_encode(Utils::hash($args['data'], 'md5', true));\n        } elseif ($validate === 'crc32') {\n            $args['metadata']['crc32c'] = $this->crcFromStream($args['data']);\n        }\n\n        $args['metadata']['name'] = $args['name'];\n        if (isset($args['retention'])) {\n            // during object creation retention properties go into metadata\n            // but not into request body\n            $args['metadata']['retention'] = $args['retention'];\n            unset($args['retention']);\n        }\n        unset($args['name']);\n        $args['contentType'] = $args['metadata']['contentType']\n            ?? MimeType::fromFilename($args['metadata']['name']);\n\n        $uploaderOptionKeys = [\n            'restOptions',\n            'retries',\n            'requestTimeout',\n            'chunkSize',\n            'contentType',\n            'metadata',\n            'uploadProgressCallback',\n            'restDelayFunction',\n            'restCalcDelayFunction',\n        ];\n\n        $args['uploaderOptions'] = array_intersect_key($args, array_flip($uploaderOptionKeys));\n        $args = array_diff_key($args, array_flip($uploaderOptionKeys));\n\n        // Passing on custom retry function to $args['uploaderOptions']\n        $retryFunc = $this->getRestRetryFunction(\n            'objects',\n            'insert',\n            $args\n        );\n        $args['uploaderOptions']['restRetryFunction'] = $retryFunc;\n\n        $args['uploaderOptions'] = $this->addRetryHeaderLogic(\n            $args['uploaderOptions']\n        );\n\n        return $args;\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getBucketIamPolicy(array $args)\n    {\n        return $this->send('buckets', 'getIamPolicy', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function setBucketIamPolicy(array $args)\n    {\n        return $this->send('buckets', 'setIamPolicy', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function testBucketIamPermissions(array $args)\n    {\n        return $this->send('buckets', 'testIamPermissions', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getNotification(array $args = [])\n    {\n        return $this->send('notifications', 'get', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function deleteNotification(array $args = [])\n    {\n        return $this->send('notifications', 'delete', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function insertNotification(array $args = [])\n    {\n        return $this->send('notifications', 'insert', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function listNotifications(array $args = [])\n    {\n        return $this->send('notifications', 'list', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getServiceAccount(array $args = [])\n    {\n        return $this->send('projects.resources.serviceAccount', 'get', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function lockRetentionPolicy(array $args = [])\n    {\n        return $this->send('buckets', 'lockRetentionPolicy', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function createHmacKey(array $args = [])\n    {\n        return $this->send('projects.resources.hmacKeys', 'create', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function deleteHmacKey(array $args = [])\n    {\n        return $this->send('projects.resources.hmacKeys', 'delete', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function getHmacKey(array $args = [])\n    {\n        return $this->send('projects.resources.hmacKeys', 'get', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function updateHmacKey(array $args = [])\n    {\n        return $this->send('projects.resources.hmacKeys', 'update', $args);\n    }\n\n    /**\n     * @param array $args\n     */\n    public function listHmacKeys(array $args = [])\n    {\n        return $this->send('projects.resources.hmacKeys', 'list', $args);\n    }\n\n    /**\n     * @param array $args\n     * @return array\n     */\n    private function buildDownloadObjectParams(array $args)\n    {\n        $args += [\n            'bucket' => null,\n            'object' => null,\n            'generation' => null,\n            'userProject' => null\n        ];\n\n        $requestOptions = array_intersect_key($args, [\n            'restOptions' => null,\n            'retries' => null,\n            'restRetryFunction' => null,\n            'restCalcDelayFunction' => null,\n            'restDelayFunction' => null\n        ]);\n\n        $queryOptions = [\n            'generation' => $args['generation'],\n            'alt' => 'media',\n            'userProject' => $args['userProject'],\n        ];\n        if (isset($args['softDeleted'])) {\n            // alt param cannot be specified with softDeleted param. See:\n            // https://cloud.google.com/storage/docs/json_api/v1/objects/get\n            unset($args['alt']);\n            $queryOptions['softDeleted'] = $args['softDeleted'];\n        }\n\n        $uri = $this->expandUri($this->apiEndpoint . self::DOWNLOAD_PATH, [\n            'bucket' => $args['bucket'],\n            'object' => $args['object'],\n            'query' => $queryOptions,\n        ]);\n\n        return [\n            new Request('GET', Utils::uriFor($uri)),\n            $requestOptions\n        ];\n    }\n\n    /**\n     * Choose an upload validation method based on user input and platform\n     * requirements.\n     *\n     * @param array $args\n     * @return bool|string\n     */\n    private function chooseValidationMethod(array $args)\n    {\n        // If the user provided a hash, skip hashing.\n        if (isset($args['metadata']['md5Hash']) || isset($args['metadata']['crc32c'])) {\n            return false;\n        }\n\n        $validate = $args['validate'];\n        if (in_array($validate, [false, 'crc32', 'md5'], true)) {\n            return $validate;\n        }\n\n        // not documented, but the feature is called crc32c, so let's accept that as input anyways.\n        if ($validate === 'crc32c') {\n            return 'crc32';\n        }\n\n        // is the extension loaded?\n        if ($this->crc32cExtensionLoaded()) {\n            return 'crc32';\n        }\n\n        // is crc32c available in `hash()`?\n        if ($this->supportsBuiltinCrc32c()) {\n            return 'crc32';\n        }\n\n        return 'md5';\n    }\n\n    /**\n     * Generate a CRC32c checksum from a stream.\n     *\n     * @param StreamInterface $data\n     * @return string\n     */\n    private function crcFromStream(StreamInterface $data)\n    {\n        $pos = $data->tell();\n        $data->rewind();\n        $crc32c = hash_init('crc32c');\n        while (!$data->eof()) {\n            $buffer = $data->read(1048576);\n            hash_update($crc32c, $buffer);\n        }\n        $data->seek($pos);\n        $hash = hash_final($crc32c, true);\n        return base64_encode($hash);\n    }\n\n    /**\n     * Check if the crc32c extension is available.\n     *\n     * Protected access for unit testing.\n     *\n     * @return bool\n     */\n    protected function crc32cExtensionLoaded()\n    {\n        return extension_loaded('crc32c');\n    }\n\n    /**\n     * Check if hash() supports crc32c.\n     *\n     * @return bool\n     * @deprecated\n     */\n    protected function supportsBuiltinCrc32c()\n    {\n        return extension_loaded('hash') && in_array('crc32c', hash_algos());\n    }\n\n    /**\n     * Add the required retry function and send the request.\n     *\n     * @param string $resource resource name, eg: buckets.\n     * @param string $method method name, eg: get\n     * @param array $options [optional] Options used to build out the request.\n     * @param array $whitelisted [optional]\n     */\n    public function send($resource, $method, array $options = [], $whitelisted = false)\n    {\n        $retryMap = [\n            'projects.resources.serviceAccount' => 'serviceaccount',\n            'projects.resources.hmacKeys' => 'hmacKey',\n            'bucketAccessControls' => 'bucket_acl',\n            'defaultObjectAccessControls' => 'default_object_acl',\n            'objectAccessControls' => 'object_acl'\n        ];\n        $retryResource = isset($retryMap[$resource]) ? $retryMap[$resource] : $resource;\n\n        $options['restRetryFunction'] = $this->restRetryFunction ?? $this->getRestRetryFunction(\n            $retryResource,\n            $method,\n            $options\n        );\n\n        $options += array_filter([\n            'retryStrategy' => $this->retryStrategy,\n            'restDelayFunction' => $this->restDelayFunction,\n            'restCalcDelayFunction' => $this->restCalcDelayFunction,\n            'restRetryListener' => $this->restRetryListener,\n        ]);\n\n        $options = $this->addRetryHeaderLogic($options);\n\n        return $this->traitSend($resource, $method, $options);\n    }\n\n    /**\n     * Adds the retry headers to $args which amends retry hash and attempt\n     * count to the required header.\n     * @param array $args\n     * @return array\n     */\n    private function addRetryHeaderLogic(array $args)\n    {\n        $invocationId = Uuid::uuid4()->toString();\n        $args['retryHeaders'] = self::getRetryHeaders($invocationId, 1);\n\n        $userListener = $args['restRetryListener'] ?? null;\n\n        // Adding callback logic to update headers while retrying\n        $args['restRetryListener'] = function (\n            \\Exception $e,\n            $retryAttempt,\n            &$arguments\n        ) use (\n            $invocationId,\n            $userListener\n        ) {\n            $arguments[0] = $this->modifyRequestForRetry(\n                $arguments[0],\n                $retryAttempt,\n                $invocationId\n            );\n\n            if ($userListener) {\n                $userListener($e, $retryAttempt, $arguments);\n            }\n        };\n\n        return $args;\n    }\n\n    private function modifyRequestForRetry(\n        RequestInterface $request,\n        int $retryAttempt,\n        string $invocationId\n    ) {\n        $changes = self::getRetryHeaders($invocationId, $retryAttempt + 1);\n        $headerLine = $request->getHeaderLine(Retry::RETRY_HEADER_KEY);\n\n        // An associative array to contain final header values as\n        // $headerValueKey => $headerValue\n        $headerElements = [];\n\n        // Adding existing values\n        $headerLineValues = explode(' ', $headerLine);\n        foreach ($headerLineValues as $value) {\n            $key = explode('/', $value)[0];\n            $headerElements[$key] = $value;\n        }\n\n        // Adding changes with replacing value if $key already present\n        foreach ($changes as $change) {\n            $key = explode('/', $change)[0];\n            $headerElements[$key] = $change;\n        }\n\n        return $request->withHeader(\n            Retry::RETRY_HEADER_KEY,\n            implode(' ', $headerElements)\n        );\n    }\n\n    /**\n     * Util function to compute the bytes requested for a download request.\n     *\n     * @param array $options Request options\n     * @return array\n     */\n    private function getRequestedBytes(array $options)\n    {\n        $startByte = 0;\n        $endByte = '';\n\n        if (isset($options['restOptions']) && isset($options['restOptions']['headers'])) {\n            $headers = $options['restOptions']['headers'];\n            if (isset($headers['Range']) || isset($headers['range'])) {\n                $header = isset($headers['Range']) ? $headers['Range'] : $headers['range'];\n                $range = explode('=', $header);\n                $bytes = explode('-', $range[1]);\n                $startByte = $bytes[0];\n                $endByte = $bytes[1];\n            }\n        }\n\n        return compact('startByte', 'endByte');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Connection/RetryTrait.php",
    "content": "<?php\n/**\n * Copyright 2022 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage\\Connection;\n\nuse Google\\Cloud\\Storage\\StorageClient;\n\n/**\n * Trait which provides helper methods for retry logic.\n *\n * @internal\n */\ntrait RetryTrait\n{\n    /**\n     * The HTTP codes that will be retried by our custom retry function.\n     * @var array\n     */\n    private static $httpRetryCodes = [\n        0, // connection-refused OR connection-reset gives status code of 0\n        200, // partial download cases\n        408,\n        429,\n        500,\n        502,\n        503,\n        504\n    ];\n\n    /**\n     * The operations which can be retried without any conditions\n     * (Idempotent)\n     * @var array\n     */\n    private static $idempotentOps = [\n        'bucket_acl.get',\n        'bucket_acl.list',\n        'buckets.delete',\n        'buckets.get',\n        'buckets.getIamPolicy',\n        'buckets.insert',\n        'buckets.list',\n        'buckets.lockRetentionPolicy',\n        'buckets.testIamPermissions',\n        'default_object_acl.get',\n        'default_object_acl.list',\n        'hmacKey.delete',\n        'hmacKey.get',\n        'hmacKey.list',\n        'notifications.delete',\n        'notifications.get',\n        'notifications.list',\n        'object_acl.get',\n        'object_acl.list',\n        'objects.get',\n        'objects.list',\n        'serviceaccount.get',\n        'signBlob.execute'\n    ];\n\n    /**\n     * The operations which can be retried with specific conditions\n     * (Conditionally idempotent)\n     * @var array\n     */\n    private static $condIdempotentOps = [\n        'buckets.patch' => ['ifMetagenerationMatch', 'etag'],\n        // Currently etag is not supported, so this preCondition never available\n        'buckets.setIamPolicy' => ['etag'],\n        'buckets.update' => ['ifMetagenerationMatch', 'etag'],\n        'hmacKey.update' => ['etag'],\n        'objects.compose' => ['ifGenerationMatch'],\n        'objects.copy' => ['ifGenerationMatch'],\n        'objects.delete' => ['ifGenerationMatch'],\n        'objects.insert' => ['ifGenerationMatch', 'ifGenerationNotMatch'],\n        'objects.patch' => ['ifMetagenerationMatch', 'etag'],\n        'objects.rewrite' => ['ifGenerationMatch'],\n        'objects.update' => ['ifMetagenerationMatch']\n    ];\n\n    /**\n     * Retry strategies which enforce certain behaviour like:\n     *     - Always retrying a call when an exception occurs(within the limits of 'max retries').\n     *     - Never retrying a call when an exception occurs.\n     *     - Retrying only when the operation is considered idempotent(default).\n     * These configurations are supplied for per api call basis.\n     *\n     */\n\n    /**\n     * Header that identifies a specific request hash. The\n     * hash needs to stay the same for multiple retries.\n     */\n    private static $INVOCATION_ID_HEADER = 'gccl-invocation-id';\n\n    /**\n     * Header that identifies the attempt count for a request. The\n     * value will increment by 1 with every retry.\n     */\n    private static $ATTEMPT_COUNT_HEADER = 'gccl-attempt-count';\n\n    /**\n     * Return a retry decider function.\n     *\n     * @param string $resource resource name, eg: buckets.\n     * @param string $method method name, eg: get\n     * @param array $args\n     * @return callable\n     */\n    private function getRestRetryFunction($resource, $method, array $args)\n    {\n        if (isset($args['restRetryFunction'])) {\n            return $args['restRetryFunction'];\n        }\n        $methodName = sprintf('%s.%s', $resource, $method);\n        $isOpIdempotent = in_array($methodName, self::$idempotentOps);\n        $preconditionNeeded = array_key_exists($methodName, self::$condIdempotentOps);\n        $preconditionSupplied = $this->isPreConditionSupplied($methodName, $args);\n        $retryStrategy = isset($args['retryStrategy']) ?\n            $args['retryStrategy'] :\n            StorageClient::RETRY_IDEMPOTENT;\n\n        return function (\n            \\Exception $exception,\n            $currentAttempt = 0,\n            $maxRetries = null\n        ) use (\n            $isOpIdempotent,\n            $preconditionNeeded,\n            $preconditionSupplied,\n            $retryStrategy\n        ) {\n            return $this->retryDeciderFunction(\n                $exception,\n                $isOpIdempotent,\n                $preconditionNeeded,\n                $preconditionSupplied,\n                $retryStrategy,\n                $currentAttempt,\n                $maxRetries\n            );\n        };\n    }\n\n    /**\n     * This function returns true when the user given\n     * precondtions ($preConditions) has values that are present\n     * in the precondition map ($this->condIdempotentMap) for that method.\n     * eg: condIdempotentMap has entry 'objects.copy' => ['ifGenerationMatch'],\n     * if the user has given 'ifGenerationMatch' in the 'objects.copy' operation,\n     * it will be available in the $preConditions\n     * as an array ['ifGenerationMatch']. This makes the array_intersect\n     * function return a non empty result and this function returns true.\n     *\n     * @param string $methodName method name, eg: buckets.get.\n     * @param array $args arguments which include preconditions provided,\n     *  eg: ['ifGenerationMatch' => 0].\n     * @return bool\n     */\n    private function isPreConditionSupplied($methodName, array $args)\n    {\n        if (isset(self::$condIdempotentOps[$methodName])) {\n            // return true if required precondition are given.\n            return !empty(array_intersect(\n                self::$condIdempotentOps[$methodName],\n                array_keys($args)\n            ));\n        }\n        return false;\n    }\n\n    /**\n     * Decide whether the op needs to be retried or not.\n     *\n     * @param \\Exception $exception The exception object received\n     * while sending the request.\n     * @param int $currentAttempt Current retry attempt.\n     * @param bool $isIdempotent\n     * @param bool $preconditionNeeded\n     * @param bool $preconditionSupplied\n     * @param int|null $maxRetries The maximum number of retries allowed.\n     * Null for no limit.\n     * @return bool\n     */\n    private function retryDeciderFunction(\n        \\Exception $exception,\n        $isIdempotent,\n        $preconditionNeeded,\n        $preconditionSupplied,\n        $retryStrategy,\n        $currentAttempt = 0,\n        $maxRetries = null\n    ) {\n        // If maxRetries is specified, ensure we don't exceed it\n        if ($maxRetries !== null && $currentAttempt >= $maxRetries) {\n            return false;\n        }\n\n        if ($retryStrategy == StorageClient::RETRY_NEVER) {\n            return false;\n        }\n\n        $statusCode = $exception->getCode();\n        // Retry if the exception status code matches\n        // with one of the retriable status code and\n        // the operation is either idempotent or conditionally\n        // idempotent with preconditions supplied.\n\n        if (in_array($statusCode, self::$httpRetryCodes)) {\n            if ($retryStrategy == StorageClient::RETRY_ALWAYS) {\n                return true;\n            } elseif ($isIdempotent) {\n                return true;\n            } elseif ($preconditionNeeded) {\n                return $preconditionSupplied;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Utility func that returns the list of headers that need to be\n     * attached to every request and its retries.\n     */\n    private static function getRetryHeaders($invocationId, $attemptCount)\n    {\n        return [\n            sprintf('%s/%s', self::$INVOCATION_ID_HEADER, $invocationId),\n            sprintf('%s/%d', self::$ATTEMPT_COUNT_HEADER, $attemptCount)\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Connection/ServiceDefinition/storage-v1.json",
    "content": "{\n    \"kind\": \"discovery#restDescription\",\n    \"version\": \"v1\",\n    \"id\": \"storage:v1\",\n    \"rootUrl\": \"https://storage.googleapis.com/\",\n    \"mtlsRootUrl\": \"https://storage.mtls.googleapis.com/\",\n    \"baseUrl\": \"https://storage.googleapis.com/storage/v1/\",\n    \"basePath\": \"/storage/v1/\",\n    \"servicePath\": \"storage/v1/\",\n    \"batchPath\": \"batch/storage/v1\",\n    \"discoveryVersion\": \"v1\",\n    \"name\": \"storage\",\n    \"title\": \"Cloud Storage JSON API\",\n    \"description\": \"Stores and retrieves potentially large, immutable data objects.\",\n    \"ownerDomain\": \"google.com\",\n    \"ownerName\": \"Google\",\n    \"icons\": {\n        \"x16\": \"https://www.google.com/images/icons/product/cloud_storage-16.png\",\n        \"x32\": \"https://www.google.com/images/icons/product/cloud_storage-32.png\"\n    },\n    \"documentationLink\": \"https://developers.google.com/storage/docs/json_api/\",\n    \"labels\": [\n        \"labs\"\n    ],\n    \"endpoints\": [\n        {\n            \"endpointUrl\": \"https://storage.me-central2.rep.googleapis.com/\",\n            \"location\": \"me-central2\",\n            \"description\": \"Regional Endpoint\"\n        }\n    ],\n    \"protocol\": \"rest\",\n    \"parameters\": {\n        \"alt\": {\n            \"type\": \"string\",\n            \"description\": \"Data format for the response.\",\n            \"default\": \"json\",\n            \"enum\": [\n                \"json\"\n            ],\n            \"enumDescriptions\": [\n                \"Responses with Content-Type of application/json\"\n            ],\n            \"location\": \"query\"\n        },\n        \"fields\": {\n            \"type\": \"string\",\n            \"description\": \"Selector specifying which fields to include in a partial response.\",\n            \"location\": \"query\"\n        },\n        \"key\": {\n            \"type\": \"string\",\n            \"description\": \"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.\",\n            \"location\": \"query\"\n        },\n        \"oauth_token\": {\n            \"type\": \"string\",\n            \"description\": \"OAuth 2.0 token for the current user.\",\n            \"location\": \"query\"\n        },\n        \"prettyPrint\": {\n            \"type\": \"boolean\",\n            \"description\": \"Returns response with indentations and line breaks.\",\n            \"default\": \"true\",\n            \"location\": \"query\"\n        },\n        \"quotaUser\": {\n            \"type\": \"string\",\n            \"description\": \"An opaque string that represents a user for quota purposes. Must not exceed 40 characters.\",\n            \"location\": \"query\"\n        },\n        \"userIp\": {\n            \"type\": \"string\",\n            \"description\": \"Deprecated. Please use quotaUser instead.\",\n            \"location\": \"query\"\n        },\n        \"uploadType\": {\n            \"type\": \"string\",\n            \"description\": \"Upload protocol for media (e.g. \\\"media\\\", \\\"multipart\\\", \\\"resumable\\\").\",\n            \"location\": \"query\"\n        }\n    },\n    \"auth\": {\n        \"oauth2\": {\n            \"scopes\": {\n                \"https://www.googleapis.com/auth/cloud-platform\": {\n                    \"description\": \"View and manage your data across Google Cloud Platform services\"\n                },\n                \"https://www.googleapis.com/auth/cloud-platform.read-only\": {\n                    \"description\": \"View your data across Google Cloud Platform services\"\n                },\n                \"https://www.googleapis.com/auth/devstorage.full_control\": {\n                    \"description\": \"Manage your data and permissions in Google Cloud Storage\"\n                },\n                \"https://www.googleapis.com/auth/devstorage.read_only\": {\n                    \"description\": \"View your data in Google Cloud Storage\"\n                },\n                \"https://www.googleapis.com/auth/devstorage.read_write\": {\n                    \"description\": \"Manage your data in Google Cloud Storage\"\n                }\n            }\n        }\n    },\n    \"schemas\": {\n        \"Bucket\": {\n            \"id\": \"Bucket\",\n            \"type\": \"object\",\n            \"description\": \"A bucket.\",\n            \"properties\": {\n                \"acl\": {\n                    \"type\": \"array\",\n                    \"description\": \"Access controls on the bucket.\",\n                    \"items\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.buckets.update\"\n                        ]\n                    }\n                },\n                \"billing\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's billing configuration.\",\n                    \"properties\": {\n                        \"requesterPays\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"When set to true, Requester Pays is enabled for this bucket.\"\n                        }\n                    }\n                },\n                \"cors\": {\n                    \"type\": \"array\",\n                    \"description\": \"The bucket's Cross-Origin Resource Sharing (CORS) configuration.\",\n                    \"items\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"maxAgeSeconds\": {\n                                \"type\": \"integer\",\n                                \"description\": \"The value, in seconds, to return in the  Access-Control-Max-Age header used in preflight responses.\",\n                                \"format\": \"int32\"\n                            },\n                            \"method\": {\n                                \"type\": \"array\",\n                                \"description\": \"The list of HTTP methods on which to include CORS response headers, (GET, OPTIONS, POST, etc) Note: \\\"*\\\" is permitted in the list of methods, and means \\\"any method\\\".\",\n                                \"items\": {\n                                    \"type\": \"string\"\n                                }\n                            },\n                            \"origin\": {\n                                \"type\": \"array\",\n                                \"description\": \"The list of Origins eligible to receive CORS response headers. Note: \\\"*\\\" is permitted in the list of origins, and means \\\"any Origin\\\".\",\n                                \"items\": {\n                                    \"type\": \"string\"\n                                }\n                            },\n                            \"responseHeader\": {\n                                \"type\": \"array\",\n                                \"description\": \"The list of HTTP headers other than the simple response headers to give permission for the user-agent to share across domains.\",\n                                \"items\": {\n                                    \"type\": \"string\"\n                                }\n                            }\n                        }\n                    }\n                },\n                \"customPlacementConfig\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's custom placement configuration for Custom Dual Regions.\",\n                    \"properties\": {\n                        \"dataLocations\": {\n                            \"type\": \"array\",\n                            \"description\": \"The list of regional locations in which data is placed.\",\n                            \"items\": {\n                                \"type\": \"string\"\n                            }\n                        }\n                    }\n                },\n                \"defaultEventBasedHold\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"The default value for event-based hold on newly created objects in this bucket. Event-based hold is a way to retain objects indefinitely until an event occurs, signified by the hold's release. After being released, such objects will be subject to bucket-level retention (if any). One sample use case of this flag is for banks to hold loan documents for at least 3 years after loan is paid in full. Here, bucket-level retention is 3 years and the event is loan being paid in full. In this example, these objects will be held intact for any number of years until the event has occurred (event-based hold on the object is released) and then 3 more years after that. That means retention duration of the objects begins from the moment event-based hold transitioned from true to false. Objects under event-based hold cannot be deleted, overwritten or archived until the hold is removed.\"\n                },\n                \"defaultObjectAcl\": {\n                    \"type\": \"array\",\n                    \"description\": \"Default access controls to apply to new objects when no ACL is provided.\",\n                    \"items\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    }\n                },\n                \"encryption\": {\n                    \"type\": \"object\",\n                    \"description\": \"Encryption configuration for a bucket.\",\n                    \"properties\": {\n                        \"defaultKmsKeyName\": {\n                            \"type\": \"string\",\n                            \"description\": \"A Cloud KMS key that will be used to encrypt objects inserted into this bucket, if no encryption method is specified.\"\n                        }\n                    }\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1 Entity tag for the bucket.\"\n                },\n                \"hierarchicalNamespace\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's hierarchical namespace configuration.\",\n                    \"properties\": {\n                        \"enabled\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"When set to true, hierarchical namespace is enabled for this bucket.\"\n                        }\n                    }\n                },\n                \"iamConfiguration\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's IAM configuration.\",\n                    \"properties\": {\n                        \"bucketPolicyOnly\": {\n                            \"type\": \"object\",\n                            \"description\": \"The bucket's uniform bucket-level access configuration. The feature was formerly known as Bucket Policy Only. For backward compatibility, this field will be populated with identical information as the uniformBucketLevelAccess field. We recommend using the uniformBucketLevelAccess field to enable and disable the feature.\",\n                            \"properties\": {\n                                \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"description\": \"If set, access is controlled only by bucket-level or above IAM policies.\"\n                                },\n                                \"lockedTime\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The deadline for changing iamConfiguration.bucketPolicyOnly.enabled from true to false in RFC 3339 format. iamConfiguration.bucketPolicyOnly.enabled may be changed from true to false until the locked time, after which the field is immutable.\",\n                                    \"format\": \"date-time\"\n                                }\n                            }\n                        },\n                        \"uniformBucketLevelAccess\": {\n                            \"type\": \"object\",\n                            \"description\": \"The bucket's uniform bucket-level access configuration.\",\n                            \"properties\": {\n                                \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"description\": \"If set, access is controlled only by bucket-level or above IAM policies.\"\n                                },\n                                \"lockedTime\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The deadline for changing iamConfiguration.uniformBucketLevelAccess.enabled from true to false in RFC 3339  format. iamConfiguration.uniformBucketLevelAccess.enabled may be changed from true to false until the locked time, after which the field is immutable.\",\n                                    \"format\": \"date-time\"\n                                }\n                            }\n                        },\n                        \"publicAccessPrevention\": {\n                            \"type\": \"string\",\n                            \"description\": \"The bucket's Public Access Prevention configuration. Currently, 'inherited' and 'enforced' are supported.\"\n                        }\n                    }\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the bucket. For buckets, the id and name properties are the same.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For buckets, this is always storage#bucket.\",\n                    \"default\": \"storage#bucket\"\n                },\n                \"labels\": {\n                    \"type\": \"object\",\n                    \"description\": \"User-provided labels, in key/value pairs.\",\n                    \"additionalProperties\": {\n                        \"type\": \"string\",\n                        \"description\": \"An individual label entry.\"\n                    }\n                },\n                \"lifecycle\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's lifecycle configuration. See lifecycle management for more information.\",\n                    \"properties\": {\n                        \"rule\": {\n                            \"type\": \"array\",\n                            \"description\": \"A lifecycle management rule, which is made of an action to take and the condition(s) under which the action will be taken.\",\n                            \"items\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"action\": {\n                                        \"type\": \"object\",\n                                        \"description\": \"The action to take.\",\n                                        \"properties\": {\n                                            \"storageClass\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"Target storage class. Required iff the type of the action is SetStorageClass.\"\n                                            },\n                                            \"type\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"Type of the action. Currently, only Delete, SetStorageClass, and AbortIncompleteMultipartUpload are supported.\"\n                                            }\n                                        }\n                                    },\n                                    \"condition\": {\n                                        \"type\": \"object\",\n                                        \"description\": \"The condition(s) under which the action will be taken.\",\n                                        \"properties\": {\n                                            \"age\": {\n                                                \"type\": \"integer\",\n                                                \"description\": \"Age of an object (in days). This condition is satisfied when an object reaches the specified age.\",\n                                                \"format\": \"int32\"\n                                            },\n                                            \"createdBefore\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"A date in RFC 3339 format with only the date part (for instance, \\\"2013-01-15\\\"). This condition is satisfied when an object is created before midnight of the specified date in UTC.\",\n                                                \"format\": \"date\"\n                                            },\n                                            \"customTimeBefore\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"A date in RFC 3339 format with only the date part (for instance, \\\"2013-01-15\\\"). This condition is satisfied when the custom time on an object is before this date in UTC.\",\n                                                \"format\": \"date\"\n                                            },\n                                            \"daysSinceCustomTime\": {\n                                                \"type\": \"integer\",\n                                                \"description\": \"Number of days elapsed since the user-specified timestamp set on an object. The condition is satisfied if the days elapsed is at least this number. If no custom timestamp is specified on an object, the condition does not apply.\",\n                                                \"format\": \"int32\"\n                                            },\n                                            \"daysSinceNoncurrentTime\": {\n                                                \"type\": \"integer\",\n                                                \"description\": \"Number of days elapsed since the noncurrent timestamp of an object. The condition is satisfied if the days elapsed is at least this number. This condition is relevant only for versioned objects. The value of the field must be a nonnegative integer. If it's zero, the object version will become eligible for Lifecycle action as soon as it becomes noncurrent.\",\n                                                \"format\": \"int32\"\n                                            },\n                                            \"isLive\": {\n                                                \"type\": \"boolean\",\n                                                \"description\": \"Relevant only for versioned objects. If the value is true, this condition matches live objects; if the value is false, it matches archived objects.\"\n                                            },\n                                            \"matchesPattern\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"A regular expression that satisfies the RE2 syntax. This condition is satisfied when the name of the object matches the RE2 pattern. Note: This feature is currently in the \\\"Early Access\\\" launch stage and is only available to a whitelisted set of users; that means that this feature may be changed in backward-incompatible ways and that it is not guaranteed to be released.\"\n                                            },\n                                            \"matchesPrefix\": {\n                                                \"type\": \"array\",\n                                                \"description\": \"List of object name prefixes. This condition will be satisfied when at least one of the prefixes exactly matches the beginning of the object name.\",\n                                                \"items\": {\n                                                    \"type\": \"string\"\n                                                }\n                                            },\n                                            \"matchesSuffix\": {\n                                                \"type\": \"array\",\n                                                \"description\": \"List of object name suffixes. This condition will be satisfied when at least one of the suffixes exactly matches the end of the object name.\",\n                                                \"items\": {\n                                                    \"type\": \"string\"\n                                                }\n                                            },\n                                            \"matchesStorageClass\": {\n                                                \"type\": \"array\",\n                                                \"description\": \"Objects having any of the storage classes specified by this condition will be matched. Values include MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, ARCHIVE, STANDARD, and DURABLE_REDUCED_AVAILABILITY.\",\n                                                \"items\": {\n                                                    \"type\": \"string\"\n                                                }\n                                            },\n                                            \"noncurrentTimeBefore\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"A date in RFC 3339 format with only the date part (for instance, \\\"2013-01-15\\\"). This condition is satisfied when the noncurrent time on an object is before this date in UTC. This condition is relevant only for versioned objects.\",\n                                                \"format\": \"date\"\n                                            },\n                                            \"numNewerVersions\": {\n                                                \"type\": \"integer\",\n                                                \"description\": \"Relevant only for versioned objects. If the value is N, this condition is satisfied when there are at least N versions (including the live version) newer than this version of the object.\",\n                                                \"format\": \"int32\"\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"autoclass\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's Autoclass configuration.\",\n                    \"properties\": {\n                        \"enabled\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"Whether or not Autoclass is enabled on this bucket\"\n                        },\n                        \"toggleTime\": {\n                            \"type\": \"string\",\n                            \"description\": \"A date and time in RFC 3339 format representing the instant at which \\\"enabled\\\" was last toggled.\",\n                            \"format\": \"date-time\"\n                        },\n                        \"terminalStorageClass\": {\n                            \"type\": \"string\",\n                            \"description\": \"The storage class that objects in the bucket eventually transition to if they are not read for a certain length of time. Valid values are NEARLINE and ARCHIVE.\"\n                        },\n                        \"terminalStorageClassUpdateTime\": {\n                            \"type\": \"string\",\n                            \"description\": \"A date and time in RFC 3339 format representing the time of the most recent update to \\\"terminalStorageClass\\\".\",\n                            \"format\": \"date-time\"\n                        }\n                    }\n                },\n                \"location\": {\n                    \"type\": \"string\",\n                    \"description\": \"The location of the bucket. Object data for objects in the bucket resides in physical storage within this region. Defaults to US. See the developer's guide for the authoritative list.\"\n                },\n                \"locationType\": {\n                    \"type\": \"string\",\n                    \"description\": \"The type of the bucket location.\"\n                },\n                \"logging\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's logging configuration, which defines the destination bucket and optional name prefix for the current bucket's logs.\",\n                    \"properties\": {\n                        \"logBucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"The destination bucket where the current bucket's logs should be placed.\"\n                        },\n                        \"logObjectPrefix\": {\n                            \"type\": \"string\",\n                            \"description\": \"A prefix for log object names.\"\n                        }\n                    }\n                },\n                \"metageneration\": {\n                    \"type\": \"string\",\n                    \"description\": \"The metadata generation of this bucket.\",\n                    \"format\": \"int64\"\n                },\n                \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket.\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.buckets.insert\"\n                        ]\n                    }\n                },\n                \"generation\": {\n                    \"type\": \"string\",\n                    \"description\": \"The version of the bucket.\",\n                    \"format\": \"int64\"\n                },\n                \"owner\": {\n                    \"type\": \"object\",\n                    \"description\": \"The owner of the bucket. This is always the project team's owner group.\",\n                    \"properties\": {\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity, in the form project-owner-projectId.\"\n                        },\n                        \"entityId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID for the entity.\"\n                        }\n                    }\n                },\n                \"projectNumber\": {\n                    \"type\": \"string\",\n                    \"description\": \"The project number of the project the bucket belongs to.\",\n                    \"format\": \"uint64\"\n                },\n                \"retentionPolicy\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's retention policy. The retention policy enforces a minimum retention time for all objects contained in the bucket, based on their creation time. Any attempt to overwrite or delete objects younger than the retention period will result in a PERMISSION_DENIED error. An unlocked retention policy can be modified or removed from the bucket via a storage.buckets.update operation. A locked retention policy cannot be removed or shortened in duration for the lifetime of the bucket. Attempting to remove or decrease period of a locked retention policy will result in a PERMISSION_DENIED error.\",\n                    \"properties\": {\n                        \"effectiveTime\": {\n                            \"type\": \"string\",\n                            \"description\": \"Server-determined value that indicates the time from which policy was enforced and effective. This value is in RFC 3339 format.\",\n                            \"format\": \"date-time\"\n                        },\n                        \"isLocked\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"Once locked, an object retention policy cannot be modified.\"\n                        },\n                        \"retentionPeriod\": {\n                            \"type\": \"string\",\n                            \"description\": \"The duration in seconds that objects need to be retained. Retention duration must be greater than zero and less than 100 years. Note that enforcement of retention periods less than a day is not guaranteed. Such periods should only be used for testing purposes.\",\n                            \"format\": \"int64\"\n                        }\n                    }\n                },\n                \"objectRetention\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's object retention config.\",\n                    \"properties\": {\n                        \"mode\": {\n                            \"type\": \"string\",\n                            \"description\": \"The bucket's object retention mode. Can be Enabled.\"\n                        }\n                    }\n                },\n                \"rpo\": {\n                    \"type\": \"string\",\n                    \"description\": \"The Recovery Point Objective (RPO) of this bucket. Set to ASYNC_TURBO to turn on Turbo Replication on a bucket.\"\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The URI of this bucket.\"\n                },\n                \"softDeletePolicy\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's soft delete policy, which defines the period of time that soft-deleted objects will be retained, and cannot be permanently deleted.\",\n                    \"properties\": {\n                        \"retentionDurationSeconds\": {\n                            \"type\": \"string\",\n                            \"description\": \"The duration in seconds that soft-deleted objects in the bucket will be retained and cannot be permanently deleted.\",\n                            \"format\": \"int64\"\n                        },\n                        \"effectiveTime\": {\n                            \"type\": \"string\",\n                            \"description\": \"Server-determined value that indicates the time from which the policy, or one with a greater retention, was effective. This value is in RFC 3339 format.\",\n                            \"format\": \"date-time\"\n                        }\n                    }\n                },\n                \"softDeleteTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The time at which the bucket was soft-deleted.\",\n                    \"format\": \"date-time\"\n                },\n                \"hardDeleteTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The time when a soft-deleted bucket is permanently deleted and can no longer be restored.\",\n                    \"format\": \"date-time\"\n                },\n                \"storageClass\": {\n                    \"type\": \"string\",\n                    \"description\": \"The bucket's default storage class, used whenever no storageClass is specified for a newly-created object. This defines how objects in the bucket are stored and determines the SLA and the cost of storage. Values include MULTI_REGIONAL, REGIONAL, STANDARD, NEARLINE, COLDLINE, ARCHIVE, and DURABLE_REDUCED_AVAILABILITY. If this value is not specified when the bucket is created, it will default to STANDARD. For more information, see storage classes.\"\n                },\n                \"timeCreated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The creation time of the bucket in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"updated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The modification time of the bucket in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"versioning\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's versioning configuration.\",\n                    \"properties\": {\n                        \"enabled\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"While set to true, versioning is fully enabled for this bucket.\"\n                        }\n                    }\n                },\n                \"website\": {\n                    \"type\": \"object\",\n                    \"description\": \"The bucket's website configuration, controlling how the service behaves when accessing bucket contents as a web site. See the Static Website Examples for more information.\",\n                    \"properties\": {\n                        \"mainPageSuffix\": {\n                            \"type\": \"string\",\n                            \"description\": \"If the requested object path is missing, the service will ensure the path has a trailing '/', append this suffix, and attempt to retrieve the resulting object. This allows the creation of index.html objects to represent directory pages.\"\n                        },\n                        \"notFoundPage\": {\n                            \"type\": \"string\",\n                            \"description\": \"If the requested object path is missing, and any mainPageSuffix object is missing, if applicable, the service will return the named object from this bucket as the content for a 404 Not Found result.\"\n                        }\n                    }\n                },\n                \"satisfiesPZS\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Reserved for future use.\"\n                }\n            }\n        },\n        \"AnywhereCache\": {\n            \"id\": \"AnywhereCache\",\n            \"type\": \"object\",\n            \"description\": \"An Anywhere Cache instance.\",\n            \"properties\": {\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.\",\n                    \"default\": \"storage#anywhereCache\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the resource, including the project number, bucket name and anywhere cache ID.\"\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this cache instance.\"\n                },\n                \"bucket\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket containing this cache instance.\"\n                },\n                \"anywhereCacheId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the Anywhere cache instance.\"\n                },\n                \"zone\": {\n                    \"type\": \"string\",\n                    \"description\": \"The zone in which the cache instance is running. For example, us-central1-a.\"\n                },\n                \"state\": {\n                    \"type\": \"string\",\n                    \"description\": \"The current state of the cache instance.\"\n                },\n                \"createTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The creation time of the cache instance in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"updateTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The modification time of the cache instance metadata in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"ttl\": {\n                    \"type\": \"string\",\n                    \"description\": \"The TTL of all cache entries in whole seconds. e.g., \\\"7200s\\\". \",\n                    \"format\": \"google-duration\"\n                },\n                \"admissionPolicy\": {\n                    \"type\": \"string\",\n                    \"description\": \"The cache-level entry admission policy.\"\n                },\n                \"pendingUpdate\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"True if the cache instance has an active Update long-running operation.\"\n                }\n            }\n        },\n        \"AnywhereCaches\": {\n            \"id\": \"AnywhereCaches\",\n            \"type\": \"object\",\n            \"description\": \"A list of Anywhere Caches.\",\n            \"properties\": {\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of Anywhere Caches, this is always storage#anywhereCaches.\",\n                    \"default\": \"storage#anywhereCaches\"\n                },\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                },\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"AnywhereCache\"\n                    }\n                }\n            }\n        },\n        \"BucketAccessControl\": {\n            \"id\": \"BucketAccessControl\",\n            \"type\": \"object\",\n            \"description\": \"An access-control entry.\",\n            \"properties\": {\n                \"bucket\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket.\"\n                },\n                \"domain\": {\n                    \"type\": \"string\",\n                    \"description\": \"The domain associated with the entity, if any.\"\n                },\n                \"email\": {\n                    \"type\": \"string\",\n                    \"description\": \"The email address associated with the entity, if any.\"\n                },\n                \"entity\": {\n                    \"type\": \"string\",\n                    \"description\": \"The entity holding the permission, in one of the following forms: \\n- user-userId \\n- user-email \\n- group-groupId \\n- group-email \\n- domain-domain \\n- project-team-projectId \\n- allUsers \\n- allAuthenticatedUsers Examples: \\n- The user liz@example.com would be user-liz@example.com. \\n- The group example@googlegroups.com would be group-example@googlegroups.com. \\n- To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.bucketAccessControls.insert\"\n                        ]\n                    }\n                },\n                \"entityId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID for the entity, if any.\"\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1 Entity tag for the access-control entry.\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the access-control entry.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.\",\n                    \"default\": \"storage#bucketAccessControl\"\n                },\n                \"projectTeam\": {\n                    \"type\": \"object\",\n                    \"description\": \"The project team associated with the entity, if any.\",\n                    \"properties\": {\n                        \"projectNumber\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project number.\"\n                        },\n                        \"team\": {\n                            \"type\": \"string\",\n                            \"description\": \"The team.\"\n                        }\n                    }\n                },\n                \"role\": {\n                    \"type\": \"string\",\n                    \"description\": \"The access permission for the entity.\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.bucketAccessControls.insert\"\n                        ]\n                    }\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this access-control entry.\"\n                }\n            }\n        },\n        \"BucketAccessControls\": {\n            \"id\": \"BucketAccessControls\",\n            \"type\": \"object\",\n            \"description\": \"An access-control list.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of bucket access control entries, this is always storage#bucketAccessControls.\",\n                    \"default\": \"storage#bucketAccessControls\"\n                }\n            }\n        },\n        \"Buckets\": {\n            \"id\": \"Buckets\",\n            \"type\": \"object\",\n            \"description\": \"A list of buckets.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"Bucket\"\n                    }\n                },\n                \"unreachable\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of bucket resource names that could not be reached during the listing operation.\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of buckets, this is always storage#buckets.\",\n                    \"default\": \"storage#buckets\"\n                },\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                }\n            }\n        },\n        \"Channel\": {\n            \"id\": \"Channel\",\n            \"type\": \"object\",\n            \"description\": \"An notification channel used to watch for resource changes.\",\n            \"properties\": {\n                \"address\": {\n                    \"type\": \"string\",\n                    \"description\": \"The address where notifications are delivered for this channel.\"\n                },\n                \"expiration\": {\n                    \"type\": \"string\",\n                    \"description\": \"Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.\",\n                    \"format\": \"int64\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"A UUID or similar unique string that identifies this channel.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"Identifies this as a notification channel used to watch for changes to a resource, which is \\\"api#channel\\\".\",\n                    \"default\": \"api#channel\"\n                },\n                \"params\": {\n                    \"type\": \"object\",\n                    \"description\": \"Additional parameters controlling delivery channel behavior. Optional.\",\n                    \"additionalProperties\": {\n                        \"type\": \"string\",\n                        \"description\": \"Declares a new parameter by name.\"\n                    }\n                },\n                \"payload\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"A Boolean value to indicate whether payload is wanted. Optional.\"\n                },\n                \"resourceId\": {\n                    \"type\": \"string\",\n                    \"description\": \"An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.\"\n                },\n                \"resourceUri\": {\n                    \"type\": \"string\",\n                    \"description\": \"A version-specific identifier for the watched resource.\"\n                },\n                \"token\": {\n                    \"type\": \"string\",\n                    \"description\": \"An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.\"\n                },\n                \"type\": {\n                    \"type\": \"string\",\n                    \"description\": \"The type of delivery mechanism used for this channel.\"\n                }\n            }\n        },\n        \"ComposeRequest\": {\n            \"id\": \"ComposeRequest\",\n            \"type\": \"object\",\n            \"description\": \"A Compose request.\",\n            \"properties\": {\n                \"destination\": {\n                    \"$ref\": \"Object\",\n                    \"description\": \"Properties of the resulting object.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is.\",\n                    \"default\": \"storage#composeRequest\"\n                },\n                \"sourceObjects\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of source objects that will be concatenated into a single object.\",\n                    \"items\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"generation\": {\n                                \"type\": \"string\",\n                                \"description\": \"The generation of this object to use as the source.\",\n                                \"format\": \"int64\"\n                            },\n                            \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"The source object's name. All source objects must reside in the same bucket.\",\n                                \"annotations\": {\n                                    \"required\": [\n                                        \"storage.objects.compose\"\n                                    ]\n                                }\n                            },\n                            \"objectPreconditions\": {\n                                \"type\": \"object\",\n                                \"description\": \"Conditions that must be met for this operation to execute.\",\n                                \"properties\": {\n                                    \"ifGenerationMatch\": {\n                                        \"type\": \"string\",\n                                        \"description\": \"Only perform the composition if the generation of the source object that would be used matches this value. If this value and a generation are both specified, they must be the same value or the call will fail.\",\n                                        \"format\": \"int64\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.objects.compose\"\n                        ]\n                    }\n                }\n            }\n        },\n        \"Folder\": {\n            \"id\": \"Folder\",\n            \"type\": \"object\",\n            \"description\": \"A folder. Only available in buckets with hierarchical namespace enabled.\",\n            \"properties\": {\n                \"bucket\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket containing this folder.\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the folder, including the bucket name, folder name.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For folders, this is always storage#folder.\",\n                    \"default\": \"storage#folder\"\n                },\n                \"metageneration\": {\n                    \"type\": \"string\",\n                    \"description\": \"The version of the metadata for this folder. Used for preconditions and for detecting changes in metadata.\",\n                    \"format\": \"int64\"\n                },\n                \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the folder. Required if not specified by URL parameter.\"\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this folder.\"\n                },\n                \"createTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The creation time of the folder in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"updateTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The modification time of the folder metadata in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"pendingRenameInfo\": {\n                    \"type\": \"object\",\n                    \"description\": \"Only present if the folder is part of an ongoing rename folder operation. Contains information which can be used to query the operation status.\",\n                    \"properties\": {\n                        \"operationId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of the rename folder operation.\"\n                        }\n                    }\n                }\n            }\n        },\n        \"Folders\": {\n            \"id\": \"Folders\",\n            \"type\": \"object\",\n            \"description\": \"A list of folders.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"Folder\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of folders, this is always storage#folders.\",\n                    \"default\": \"storage#folders\"\n                },\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                }\n            }\n        },\n        \"Expr\": {\n            \"id\": \"Expr\",\n            \"type\": \"object\",\n            \"description\": \"Represents an expression text. Example: title: \\\"User account presence\\\" description: \\\"Determines whether the request has a user account\\\" expression: \\\"size(request.user) > 0\\\"\",\n            \"properties\": {\n                \"description\": {\n                    \"type\": \"string\",\n                    \"description\": \"An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\"\n                },\n                \"expression\": {\n                    \"type\": \"string\",\n                    \"description\": \"Textual representation of an expression in Common Expression Language syntax. The application context of the containing message determines which well-known feature set of CEL is supported.\"\n                },\n                \"location\": {\n                    \"type\": \"string\",\n                    \"description\": \"An optional string indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\"\n                },\n                \"title\": {\n                    \"type\": \"string\",\n                    \"description\": \"An optional title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\"\n                }\n            }\n        },\n        \"GoogleLongrunningOperation\": {\n            \"description\": \"This resource represents a long-running operation that is the result of a network API call.\",\n            \"id\": \"GoogleLongrunningOperation\",\n            \"properties\": {\n                \"done\": {\n                    \"description\": \"If the value is \\\"false\\\", it means the operation is still in progress. If \\\"true\\\", the operation is completed, and either \\\"error\\\" or \\\"response\\\" is available.\",\n                    \"type\": \"boolean\"\n                },\n                \"error\": {\n                    \"$ref\": \"GoogleRpcStatus\",\n                    \"description\": \"The error result of the operation in case of failure or cancellation.\"\n                },\n                \"metadata\": {\n                    \"additionalProperties\": {\n                        \"description\": \"Properties of the object. Contains field @type with type URL.\",\n                        \"type\": \"any\"\n                    },\n                    \"description\": \"Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.\",\n                    \"type\": \"object\"\n                },\n                \"name\": {\n                    \"description\": \"The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the \\\"name\\\" should be a resource name ending with \\\"operations/{operationId}\\\".\",\n                    \"type\": \"string\"\n                },\n                \"response\": {\n                    \"additionalProperties\": {\n                        \"description\": \"Properties of the object. Contains field @type with type URL.\",\n                        \"type\": \"any\"\n                    },\n                    \"description\": \"The normal response of the operation in case of success. If the original method returns no data on success, such as \\\"Delete\\\", the response is google.protobuf.Empty. If the original method is standard Get/Create/Update, the response should be the resource. For other methods, the response should have the type \\\"XxxResponse\\\", where \\\"Xxx\\\" is the original method name. For example, if the original method name is \\\"TakeSnapshot()\\\", the inferred response type is \\\"TakeSnapshotResponse\\\".\",\n                    \"type\": \"object\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"GoogleLongrunningListOperationsResponse\": {\n            \"description\": \"The response message for storage.buckets.operations.list.\",\n            \"id\": \"GoogleLongrunningListOperationsResponse\",\n            \"properties\": {\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                },\n                \"operations\": {\n                    \"description\": \"A list of operations that matches the specified filter in the request.\",\n                    \"items\": {\n                        \"$ref\": \"GoogleLongrunningOperation\"\n                    },\n                    \"type\": \"array\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"GoogleRpcStatus\": {\n            \"description\": \"The \\\"Status\\\" type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each \\\"Status\\\" message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).\",\n            \"id\": \"GoogleRpcStatus\",\n            \"properties\": {\n                \"code\": {\n                    \"description\": \"The status code, which should be an enum value of google.rpc.Code.\",\n                    \"format\": \"int32\",\n                    \"type\": \"integer\"\n                },\n                \"details\": {\n                    \"description\": \"A list of messages that carry the error details. There is a common set of message types for APIs to use.\",\n                    \"items\": {\n                        \"additionalProperties\": {\n                            \"description\": \"Properties of the object. Contains field @type with type URL.\",\n                            \"type\": \"any\"\n                        },\n                        \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                },\n                \"message\": {\n                    \"description\": \"A developer-facing error message, which should be in English.\",\n                    \"type\": \"string\"\n                }\n            },\n            \"type\": \"object\"\n        },\n        \"HmacKey\": {\n            \"id\": \"HmacKey\",\n            \"type\": \"object\",\n            \"description\": \"JSON template to produce a JSON-style HMAC Key resource for Create responses.\",\n            \"properties\": {\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For HMAC keys, this is always storage#hmacKey.\",\n                    \"default\": \"storage#hmacKey\"\n                },\n                \"metadata\": {\n                    \"$ref\": \"HmacKeyMetadata\",\n                    \"description\": \"Key metadata.\"\n                },\n                \"secret\": {\n                    \"type\": \"string\",\n                    \"description\": \"HMAC secret key material.\"\n                }\n            }\n        },\n        \"HmacKeyMetadata\": {\n            \"id\": \"HmacKeyMetadata\",\n            \"type\": \"object\",\n            \"description\": \"JSON template to produce a JSON-style HMAC Key metadata resource.\",\n            \"properties\": {\n                \"accessId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the HMAC Key.\"\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1 Entity tag for the HMAC key.\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the HMAC key, including the Project ID and the Access ID.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For HMAC Key metadata, this is always storage#hmacKeyMetadata.\",\n                    \"default\": \"storage#hmacKeyMetadata\"\n                },\n                \"projectId\": {\n                    \"type\": \"string\",\n                    \"description\": \"Project ID owning the service account to which the key authenticates.\"\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this resource.\"\n                },\n                \"serviceAccountEmail\": {\n                    \"type\": \"string\",\n                    \"description\": \"The email address of the key's associated service account.\"\n                },\n                \"state\": {\n                    \"type\": \"string\",\n                    \"description\": \"The state of the key. Can be one of ACTIVE, INACTIVE, or DELETED.\"\n                },\n                \"timeCreated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The creation time of the HMAC key in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"updated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The last modification time of the HMAC key metadata in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                }\n            }\n        },\n        \"HmacKeysMetadata\": {\n            \"id\": \"HmacKeysMetadata\",\n            \"type\": \"object\",\n            \"description\": \"A list of hmacKeys.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"HmacKeyMetadata\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of hmacKeys, this is always storage#hmacKeysMetadata.\",\n                    \"default\": \"storage#hmacKeysMetadata\"\n                },\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                }\n            }\n        },\n        \"ManagedFolder\": {\n            \"id\": \"ManagedFolder\",\n            \"type\": \"object\",\n            \"description\": \"A managed folder.\",\n            \"properties\": {\n                \"bucket\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket containing this managed folder.\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the managed folder, including the bucket name and managed folder name.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For managed folders, this is always storage#managedFolder.\",\n                    \"default\": \"storage#managedFolder\"\n                },\n                \"metageneration\": {\n                    \"type\": \"string\",\n                    \"description\": \"The version of the metadata for this managed folder. Used for preconditions and for detecting changes in metadata.\",\n                    \"format\": \"int64\"\n                },\n                \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the managed folder. Required if not specified by URL parameter.\"\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this managed folder.\"\n                },\n                \"createTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The creation time of the managed folder in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"updateTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The last update time of the managed folder metadata in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                }\n            }\n        },\n        \"ManagedFolders\": {\n            \"id\": \"ManagedFolders\",\n            \"type\": \"object\",\n            \"description\": \"A list of managed folders.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"ManagedFolder\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of managed folders, this is always storage#managedFolders.\",\n                    \"default\": \"storage#managedFolders\"\n                },\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                }\n            }\n        },\n        \"Notification\": {\n            \"id\": \"Notification\",\n            \"type\": \"object\",\n            \"description\": \"A subscription to receive Google PubSub notifications.\",\n            \"properties\": {\n                \"custom_attributes\": {\n                    \"type\": \"object\",\n                    \"description\": \"An optional list of additional attributes to attach to each Cloud PubSub message published for this notification subscription.\",\n                    \"additionalProperties\": {\n                        \"type\": \"string\"\n                    }\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1 Entity tag for this subscription notification.\"\n                },\n                \"event_types\": {\n                    \"type\": \"array\",\n                    \"description\": \"If present, only send notifications about listed event types. If empty, sent notifications for all event types.\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the notification.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For notifications, this is always storage#notification.\",\n                    \"default\": \"storage#notification\"\n                },\n                \"object_name_prefix\": {\n                    \"type\": \"string\",\n                    \"description\": \"If present, only apply this notification configuration to object names that begin with this prefix.\"\n                },\n                \"payload_format\": {\n                    \"type\": \"string\",\n                    \"description\": \"The desired content of the Payload.\",\n                    \"default\": \"JSON_API_V1\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.notifications.insert\"\n                        ]\n                    }\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The canonical URL of this notification.\"\n                },\n                \"topic\": {\n                    \"type\": \"string\",\n                    \"description\": \"The Cloud PubSub topic to which this subscription publishes. Formatted as: '//pubsub.googleapis.com/projects/{project-identifier}/topics/{my-topic}'\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.notifications.insert\"\n                        ]\n                    }\n                }\n            }\n        },\n        \"Notifications\": {\n            \"id\": \"Notifications\",\n            \"type\": \"object\",\n            \"description\": \"A list of notification subscriptions.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"Notification\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of notifications, this is always storage#notifications.\",\n                    \"default\": \"storage#notifications\"\n                }\n            }\n        },\n        \"Object\": {\n            \"id\": \"Object\",\n            \"type\": \"object\",\n            \"description\": \"An object.\",\n            \"properties\": {\n                \"acl\": {\n                    \"type\": \"array\",\n                    \"description\": \"Access controls on the object.\",\n                    \"items\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.objects.update\"\n                        ]\n                    }\n                },\n                \"bucket\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket containing this object.\"\n                },\n                \"cacheControl\": {\n                    \"type\": \"string\",\n                    \"description\": \"Cache-Control directive for the object data. If omitted, and the object is accessible to all anonymous users, the default will be public, max-age=3600.\"\n                },\n                \"componentCount\": {\n                    \"type\": \"integer\",\n                    \"description\": \"Number of underlying components that make up this object. Components are accumulated by compose operations.\",\n                    \"format\": \"int32\"\n                },\n                \"contentDisposition\": {\n                    \"type\": \"string\",\n                    \"description\": \"Content-Disposition of the object data.\"\n                },\n                \"contentEncoding\": {\n                    \"type\": \"string\",\n                    \"description\": \"Content-Encoding of the object data.\"\n                },\n                \"contentLanguage\": {\n                    \"type\": \"string\",\n                    \"description\": \"Content-Language of the object data.\"\n                },\n                \"contentType\": {\n                    \"type\": \"string\",\n                    \"description\": \"Content-Type of the object data. If an object is stored without a Content-Type, it is served as application/octet-stream.\"\n                },\n                \"crc32c\": {\n                    \"type\": \"string\",\n                    \"description\": \"CRC32c checksum, as described in RFC 4960, Appendix B; encoded using base64 in big-endian byte order. For more information about using the CRC32c checksum, see Hashes and ETags: Best Practices.\"\n                },\n                \"customTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"A timestamp in RFC 3339 format specified by the user for an object.\",\n                    \"format\": \"date-time\"\n                },\n                \"customerEncryption\": {\n                    \"type\": \"object\",\n                    \"description\": \"Metadata of customer-supplied encryption key, if the object is encrypted by such a key.\",\n                    \"properties\": {\n                        \"encryptionAlgorithm\": {\n                            \"type\": \"string\",\n                            \"description\": \"The encryption algorithm.\"\n                        },\n                        \"keySha256\": {\n                            \"type\": \"string\",\n                            \"description\": \"SHA256 hash value of the encryption key.\"\n                        }\n                    }\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1 Entity tag for the object.\"\n                },\n                \"eventBasedHold\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Whether an object is under event-based hold. Event-based hold is a way to retain objects until an event occurs, which is signified by the hold's release (i.e. this value is set to false). After being released (set to false), such objects will be subject to bucket-level retention (if any). One sample use case of this flag is for banks to hold loan documents for at least 3 years after loan is paid in full. Here, bucket-level retention is 3 years and the event is the loan being paid in full. In this example, these objects will be held intact for any number of years until the event has occurred (event-based hold on the object is released) and then 3 more years after that. That means retention duration of the objects begins from the moment event-based hold transitioned from true to false.\"\n                },\n                \"generation\": {\n                    \"type\": \"string\",\n                    \"description\": \"The content generation of this object. Used for object versioning.\",\n                    \"format\": \"int64\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the object, including the bucket name, object name, and generation number.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For objects, this is always storage#object.\",\n                    \"default\": \"storage#object\"\n                },\n                \"kmsKeyName\": {\n                    \"type\": \"string\",\n                    \"description\": \"Not currently supported. Specifying the parameter causes the request to fail with status code 400 - Bad Request.\"\n                },\n                \"md5Hash\": {\n                    \"type\": \"string\",\n                    \"description\": \"MD5 hash of the data; encoded using base64. For more information about using the MD5 hash, see Hashes and ETags: Best Practices.\"\n                },\n                \"mediaLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"Media download link.\"\n                },\n                \"metadata\": {\n                    \"type\": \"object\",\n                    \"description\": \"User-provided metadata, in key/value pairs.\",\n                    \"additionalProperties\": {\n                        \"type\": \"string\",\n                        \"description\": \"An individual metadata entry.\"\n                    }\n                },\n                \"metageneration\": {\n                    \"type\": \"string\",\n                    \"description\": \"The version of the metadata for this object at this generation. Used for preconditions and for detecting changes in metadata. A metageneration number is only meaningful in the context of a particular generation of a particular object.\",\n                    \"format\": \"int64\"\n                },\n                \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the object. Required if not specified by URL parameter.\"\n                },\n                \"owner\": {\n                    \"type\": \"object\",\n                    \"description\": \"The owner of the object. This will always be the uploader of the object.\",\n                    \"properties\": {\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity, in the form user-userId.\"\n                        },\n                        \"entityId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID for the entity.\"\n                        }\n                    }\n                },\n                \"retentionExpirationTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"A server-determined value that specifies the earliest time that the object's retention period expires. This value is in RFC 3339 format. Note 1: This field is not provided for objects with an active event-based hold, since retention expiration is unknown until the hold is removed. Note 2: This value can be provided even when temporary hold is set (so that the user can reason about policy without having to first unset the temporary hold).\",\n                    \"format\": \"date-time\"\n                },\n                \"retention\": {\n                    \"type\": \"object\",\n                    \"description\": \"A collection of object level retention parameters.\",\n                    \"properties\": {\n                        \"retainUntilTime\": {\n                            \"type\": \"string\",\n                            \"description\": \"A time in RFC 3339 format until which object retention protects this object.\",\n                            \"format\": \"date-time\"\n                        },\n                        \"mode\": {\n                            \"type\": \"string\",\n                            \"description\": \"The bucket's object retention mode, can only be Unlocked or Locked.\"\n                        }\n                    }\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this object.\"\n                },\n                \"size\": {\n                    \"type\": \"string\",\n                    \"description\": \"Content-Length of the data in bytes.\",\n                    \"format\": \"uint64\"\n                },\n                \"storageClass\": {\n                    \"type\": \"string\",\n                    \"description\": \"Storage class of the object.\"\n                },\n                \"temporaryHold\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Whether an object is under temporary hold. While this flag is set to true, the object is protected against deletion and overwrites. A common use case of this flag is regulatory investigations where objects need to be retained while the investigation is ongoing. Note that unlike event-based hold, temporary hold does not impact retention expiration time of an object.\"\n                },\n                \"timeCreated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The creation time of the object in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"timeDeleted\": {\n                    \"type\": \"string\",\n                    \"description\": \"The time at which the object became noncurrent in RFC 3339 format. Will be returned if and only if this version of the object has been deleted.\",\n                    \"format\": \"date-time\"\n                },\n                \"softDeleteTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"The time at which the object became soft-deleted in RFC 3339 format.\",\n                    \"format\": \"date-time\"\n                },\n                \"hardDeleteTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"This is the time (in the future) when the soft-deleted object will no longer be restorable. It is equal to the soft delete time plus the current soft delete retention duration of the bucket.\",\n                    \"format\": \"date-time\"\n                },\n                \"timeStorageClassUpdated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The time at which the object's storage class was last changed. When the object is initially created, it will be set to timeCreated.\",\n                    \"format\": \"date-time\"\n                },\n                \"updated\": {\n                    \"type\": \"string\",\n                    \"description\": \"The modification time of the object metadata in RFC 3339 format. Set initially to object creation time and then updated whenever any metadata of the object changes. This includes changes made by a requester, such as modifying custom metadata, as well as changes made by Cloud Storage on behalf of a requester, such as changing the storage class based on an Object Lifecycle Configuration.\",\n                    \"format\": \"date-time\"\n                }\n            }\n        },\n        \"ObjectAccessControl\": {\n            \"id\": \"ObjectAccessControl\",\n            \"type\": \"object\",\n            \"description\": \"An access-control entry.\",\n            \"properties\": {\n                \"bucket\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the bucket.\"\n                },\n                \"domain\": {\n                    \"type\": \"string\",\n                    \"description\": \"The domain associated with the entity, if any.\"\n                },\n                \"email\": {\n                    \"type\": \"string\",\n                    \"description\": \"The email address associated with the entity, if any.\"\n                },\n                \"entity\": {\n                    \"type\": \"string\",\n                    \"description\": \"The entity holding the permission, in one of the following forms: \\n- user-userId \\n- user-email \\n- group-groupId \\n- group-email \\n- domain-domain \\n- project-team-projectId \\n- allUsers \\n- allAuthenticatedUsers Examples: \\n- The user liz@example.com would be user-liz@example.com. \\n- The group example@googlegroups.com would be group-example@googlegroups.com. \\n- To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.defaultObjectAccessControls.insert\",\n                            \"storage.objectAccessControls.insert\"\n                        ]\n                    }\n                },\n                \"entityId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID for the entity, if any.\"\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1 Entity tag for the access-control entry.\"\n                },\n                \"generation\": {\n                    \"type\": \"string\",\n                    \"description\": \"The content generation of the object, if applied to an object.\",\n                    \"format\": \"int64\"\n                },\n                \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the access-control entry.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For object access control entries, this is always storage#objectAccessControl.\",\n                    \"default\": \"storage#objectAccessControl\"\n                },\n                \"object\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the object, if applied to an object.\"\n                },\n                \"projectTeam\": {\n                    \"type\": \"object\",\n                    \"description\": \"The project team associated with the entity, if any.\",\n                    \"properties\": {\n                        \"projectNumber\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project number.\"\n                        },\n                        \"team\": {\n                            \"type\": \"string\",\n                            \"description\": \"The team.\"\n                        }\n                    }\n                },\n                \"role\": {\n                    \"type\": \"string\",\n                    \"description\": \"The access permission for the entity.\",\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.defaultObjectAccessControls.insert\",\n                            \"storage.objectAccessControls.insert\"\n                        ]\n                    }\n                },\n                \"selfLink\": {\n                    \"type\": \"string\",\n                    \"description\": \"The link to this access-control entry.\"\n                }\n            }\n        },\n        \"ObjectAccessControls\": {\n            \"id\": \"ObjectAccessControls\",\n            \"type\": \"object\",\n            \"description\": \"An access-control list.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of object access control entries, this is always storage#objectAccessControls.\",\n                    \"default\": \"storage#objectAccessControls\"\n                }\n            }\n        },\n        \"Objects\": {\n            \"id\": \"Objects\",\n            \"type\": \"object\",\n            \"description\": \"A list of objects.\",\n            \"properties\": {\n                \"items\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of items.\",\n                    \"items\": {\n                        \"$ref\": \"Object\"\n                    }\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For lists of objects, this is always storage#objects.\",\n                    \"default\": \"storage#objects\"\n                },\n                \"nextPageToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.\"\n                },\n                \"prefixes\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of prefixes of objects matching-but-not-listed up to and including the requested delimiter.\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                }\n            }\n        },\n        \"Policy\": {\n            \"id\": \"Policy\",\n            \"type\": \"object\",\n            \"description\": \"A bucket/object/managedFolder IAM policy.\",\n            \"properties\": {\n                \"bindings\": {\n                    \"type\": \"array\",\n                    \"description\": \"An association between a role, which comes with a set of permissions, and members who may assume that role.\",\n                    \"items\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"condition\": {\n                                \"$ref\": \"Expr\",\n                                \"description\": \"The condition that is associated with this binding. NOTE: an unsatisfied condition will not allow user access via current binding. Different bindings, including their conditions, are examined independently.\"\n                            },\n                            \"members\": {\n                                \"type\": \"array\",\n                                \"description\": \"A collection of identifiers for members who may assume the provided role. Recognized identifiers are as follows:  \\n- allUsers \\u2014 A special identifier that represents anyone on the internet; with or without a Google account.  \\n- allAuthenticatedUsers \\u2014 A special identifier that represents anyone who is authenticated with a Google account or a service account.  \\n- user:emailid \\u2014 An email address that represents a specific account. For example, user:alice@gmail.com or user:joe@example.com.  \\n- serviceAccount:emailid \\u2014 An email address that represents a service account. For example,  serviceAccount:my-other-app@appspot.gserviceaccount.com .  \\n- group:emailid \\u2014 An email address that represents a Google group. For example, group:admins@example.com.  \\n- domain:domain \\u2014 A Google Apps domain name that represents all the users of that domain. For example, domain:google.com or domain:example.com.  \\n- projectOwner:projectid \\u2014 Owners of the given project. For example, projectOwner:my-example-project  \\n- projectEditor:projectid \\u2014 Editors of the given project. For example, projectEditor:my-example-project  \\n- projectViewer:projectid \\u2014 Viewers of the given project. For example, projectViewer:my-example-project\",\n                                \"items\": {\n                                    \"type\": \"string\"\n                                },\n                                \"annotations\": {\n                                    \"required\": [\n                                        \"storage.buckets.setIamPolicy\",\n                                        \"storage.objects.setIamPolicy\",\n                                        \"storage.managedFolders.setIamPolicy\"\n                                    ]\n                                }\n                            },\n                            \"role\": {\n                                \"type\": \"string\",\n                                \"description\": \"The role to which members belong. Two types of roles are supported: new IAM roles, which grant permissions that do not map directly to those provided by ACLs, and legacy IAM roles, which do map directly to ACL permissions. All roles are of the format roles/storage.specificRole.\\nThe new IAM roles are:  \\n- roles/storage.admin \\u2014 Full control of Google Cloud Storage resources.  \\n- roles/storage.objectViewer \\u2014 Read-Only access to Google Cloud Storage objects.  \\n- roles/storage.objectCreator \\u2014 Access to create objects in Google Cloud Storage.  \\n- roles/storage.objectAdmin \\u2014 Full control of Google Cloud Storage objects.   The legacy IAM roles are:  \\n- roles/storage.legacyObjectReader \\u2014 Read-only access to objects without listing. Equivalent to an ACL entry on an object with the READER role.  \\n- roles/storage.legacyObjectOwner \\u2014 Read/write access to existing objects without listing. Equivalent to an ACL entry on an object with the OWNER role.  \\n- roles/storage.legacyBucketReader \\u2014 Read access to buckets with object listing. Equivalent to an ACL entry on a bucket with the READER role.  \\n- roles/storage.legacyBucketWriter \\u2014 Read access to buckets with object listing/creation/deletion. Equivalent to an ACL entry on a bucket with the WRITER role.  \\n- roles/storage.legacyBucketOwner \\u2014 Read and write access to existing buckets with object listing/creation/deletion. Equivalent to an ACL entry on a bucket with the OWNER role.\",\n                                \"annotations\": {\n                                    \"required\": [\n                                        \"storage.buckets.setIamPolicy\",\n                                        \"storage.objects.setIamPolicy\",\n                                        \"storage.managedFolders.setIamPolicy\"\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"annotations\": {\n                        \"required\": [\n                            \"storage.buckets.setIamPolicy\",\n                            \"storage.objects.setIamPolicy\",\n                            \"storage.managedFolders.setIamPolicy\"\n                        ]\n                    }\n                },\n                \"etag\": {\n                    \"type\": \"string\",\n                    \"description\": \"HTTP 1.1  Entity tag for the policy.\",\n                    \"format\": \"byte\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For policies, this is always storage#policy. This field is ignored on input.\",\n                    \"default\": \"storage#policy\"\n                },\n                \"resourceId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the resource to which this policy belongs. Will be of the form projects/_/buckets/bucket for buckets, projects/_/buckets/bucket/objects/object for objects, and projects/_/buckets/bucket/managedFolders/managedFolder. A specific generation may be specified by appending #generationNumber to the end of the object name, e.g. projects/_/buckets/my-bucket/objects/data.txt#17. The current generation can be denoted with #0. This field is ignored on input.\"\n                },\n                \"version\": {\n                    \"type\": \"integer\",\n                    \"description\": \"The IAM policy format version.\",\n                    \"format\": \"int32\"\n                }\n            }\n        },\n        \"RewriteResponse\": {\n            \"id\": \"RewriteResponse\",\n            \"type\": \"object\",\n            \"description\": \"A rewrite response.\",\n            \"properties\": {\n                \"done\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"true if the copy is finished; otherwise, false if the copy is in progress. This property is always present in the response.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is.\",\n                    \"default\": \"storage#rewriteResponse\"\n                },\n                \"objectSize\": {\n                    \"type\": \"string\",\n                    \"description\": \"The total size of the object being copied in bytes. This property is always present in the response.\",\n                    \"format\": \"int64\"\n                },\n                \"resource\": {\n                    \"$ref\": \"Object\",\n                    \"description\": \"A resource containing the metadata for the copied-to object. This property is present in the response only when copying completes.\"\n                },\n                \"rewriteToken\": {\n                    \"type\": \"string\",\n                    \"description\": \"A token to use in subsequent requests to continue copying data. This token is present in the response only when there is more data to copy.\"\n                },\n                \"totalBytesRewritten\": {\n                    \"type\": \"string\",\n                    \"description\": \"The total bytes written so far, which can be used to provide a waiting user with a progress indicator. This property is always present in the response.\",\n                    \"format\": \"int64\"\n                }\n            }\n        },\n        \"ServiceAccount\": {\n            \"id\": \"ServiceAccount\",\n            \"type\": \"object\",\n            \"description\": \"A subscription to receive Google PubSub notifications.\",\n            \"properties\": {\n                \"email_address\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the notification.\"\n                },\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is. For notifications, this is always storage#notification.\",\n                    \"default\": \"storage#serviceAccount\"\n                }\n            }\n        },\n        \"TestIamPermissionsResponse\": {\n            \"id\": \"TestIamPermissionsResponse\",\n            \"type\": \"object\",\n            \"description\": \"A storage.(buckets|objects|managedFolders).testIamPermissions response.\",\n            \"properties\": {\n                \"kind\": {\n                    \"type\": \"string\",\n                    \"description\": \"The kind of item this is.\",\n                    \"default\": \"storage#testIamPermissionsResponse\"\n                },\n                \"permissions\": {\n                    \"type\": \"array\",\n                    \"description\": \"The permissions held by the caller. Permissions are always of the format storage.resource.capability, where resource is one of buckets, objects, or managedFolders. The supported permissions are as follows:  \\n- storage.buckets.delete \\u2014 Delete bucket.  \\n- storage.buckets.get \\u2014 Read bucket metadata.  \\n- storage.buckets.getIamPolicy \\u2014 Read bucket IAM policy.  \\n- storage.buckets.create \\u2014 Create bucket.  \\n- storage.buckets.list \\u2014 List buckets.  \\n- storage.buckets.setIamPolicy \\u2014 Update bucket IAM policy.  \\n- storage.buckets.update \\u2014 Update bucket metadata.  \\n- storage.objects.delete \\u2014 Delete object.  \\n- storage.objects.get \\u2014 Read object data and metadata.  \\n- storage.objects.getIamPolicy \\u2014 Read object IAM policy.  \\n- storage.objects.create \\u2014 Create object.  \\n- storage.objects.list \\u2014 List objects.  \\n- storage.objects.setIamPolicy \\u2014 Update object IAM policy.  \\n- storage.objects.update \\u2014 Update object metadata. \\n- storage.managedFolders.delete \\u2014 Delete managed folder.  \\n- storage.managedFolders.get \\u2014 Read managed folder metadata.  \\n- storage.managedFolders.getIamPolicy \\u2014 Read managed folder IAM policy.  \\n- storage.managedFolders.create \\u2014 Create managed folder.  \\n- storage.managedFolders.list \\u2014 List managed folders.  \\n- storage.managedFolders.setIamPolicy \\u2014 Update managed folder IAM policy.\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                }\n            }\n        },\n        \"BulkRestoreObjectsRequest\": {\n            \"id\": \"BulkRestoreObjectsRequest\",\n            \"type\": \"object\",\n            \"description\": \"A bulk restore objects request.\",\n            \"properties\": {\n                \"allowOverwrite\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If false (default), the restore will not overwrite live objects with the same name at the destination. This means some deleted objects may be skipped. If true, live objects will be overwritten resulting in a noncurrent object (if versioning is enabled). If versioning is not enabled, overwriting the object will result in a soft-deleted object. In either case, if a noncurrent object already exists with the same name, a live version can be written without issue.\"\n                },\n                \"softDeletedAfterTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"Restores only the objects that were soft-deleted after this time.\",\n                    \"format\": \"date-time\"\n                },\n                \"softDeletedBeforeTime\": {\n                    \"type\": \"string\",\n                    \"description\": \"Restores only the objects that were soft-deleted before this time.\",\n                    \"format\": \"date-time\"\n                },\n                \"matchGlobs\": {\n                    \"type\": \"array\",\n                    \"description\": \"Restores only the objects matching any of the specified glob(s). If this parameter is not specified, all objects will be restored within the specified time range.\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                },\n                \"copySourceAcl\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If true, copies the source object's ACL; otherwise, uses the bucket's default object ACL. The default is false.\"\n                }\n            }\n        }\n    },\n    \"resources\": {\n        \"anywhereCaches\": {\n            \"methods\": {\n                \"insert\": {\n                    \"id\": \"storage.anywhereCaches.insert\",\n                    \"path\": \"b/{bucket}/anywhereCaches\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates an Anywhere Cache instance.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"AnywhereCache\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"GoogleLongrunningOperation\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"update\": {\n                    \"id\": \"storage.anywhereCaches.update\",\n                    \"path\": \"b/{bucket}/anywhereCaches/{anywhereCacheId}\",\n                    \"httpMethod\": \"PATCH\",\n                    \"description\": \"Updates the config(ttl and admissionPolicy) of an Anywhere Cache instance.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"anywhereCacheId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of requested Anywhere Cache instance.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"anywhereCacheId\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"AnywhereCache\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"GoogleLongrunningOperation\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.anywhereCaches.get\",\n                    \"path\": \"b/{bucket}/anywhereCaches/{anywhereCacheId}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns the metadata of an Anywhere Cache instance.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"anywhereCacheId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of requested Anywhere Cache instance.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"anywhereCacheId\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"AnywhereCache\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.anywhereCaches.list\",\n                    \"path\": \"b/{bucket}/anywhereCaches\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns a list of Anywhere Cache instances of the bucket matching the criteria.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"pageSize\": {\n                            \"type\": \"integer\",\n                            \"description\": \"Maximum number of items to return in a single page of responses. Maximum 1000.\",\n                            \"format\": \"int32\",\n                            \"minimum\": \"0\",\n                            \"location\": \"query\"\n                        },\n                        \"pageToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"AnywhereCaches\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"pause\": {\n                    \"id\": \"storage.anywhereCaches.pause\",\n                    \"path\": \"b/{bucket}/anywhereCaches/{anywhereCacheId}/pause\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Pauses an Anywhere Cache instance.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"anywhereCacheId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of requested Anywhere Cache instance.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"anywhereCacheId\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"AnywhereCache\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"resume\": {\n                    \"id\": \"storage.anywhereCaches.resume\",\n                    \"path\": \"b/{bucket}/anywhereCaches/{anywhereCacheId}/resume\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Resumes a paused or disabled Anywhere Cache instance.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"anywhereCacheId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of requested Anywhere Cache instance.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"anywhereCacheId\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"AnywhereCache\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"disable\": {\n                    \"id\": \"storage.anywhereCaches.disable\",\n                    \"path\": \"b/{bucket}/anywhereCaches/{anywhereCacheId}/disable\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Disables an Anywhere Cache instance.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the parent bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"anywhereCacheId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of requested Anywhere Cache instance.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"anywhereCacheId\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"AnywhereCache\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"bucketAccessControls\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.bucketAccessControls.delete\",\n                    \"path\": \"b/{bucket}/acl/{entity}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes the ACL entry for the specified entity on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.bucketAccessControls.get\",\n                    \"path\": \"b/{bucket}/acl/{entity}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns the ACL entry for the specified entity on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.bucketAccessControls.insert\",\n                    \"path\": \"b/{bucket}/acl\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a new ACL entry on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.bucketAccessControls.list\",\n                    \"path\": \"b/{bucket}/acl\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves ACL entries on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"BucketAccessControls\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"patch\": {\n                    \"id\": \"storage.bucketAccessControls.patch\",\n                    \"path\": \"b/{bucket}/acl/{entity}\",\n                    \"httpMethod\": \"PATCH\",\n                    \"description\": \"Patches an ACL entry on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"update\": {\n                    \"id\": \"storage.bucketAccessControls.update\",\n                    \"path\": \"b/{bucket}/acl/{entity}\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates an ACL entry on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"BucketAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                }\n            }\n        },\n        \"buckets\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.buckets.delete\",\n                    \"path\": \"b/{bucket}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes an empty bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, only deletes the bucket if its metageneration matches this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, only deletes the bucket if its metageneration does not match this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.buckets.get\",\n                    \"path\": \"b/{bucket}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns metadata for the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific soft-deleted version of this bucket instead of the live version. This parameter is required if softDeleted is set to true.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit owner, acl and defaultObjectAcl properties.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        },\n                        \"softDeleted\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, returns the soft-deleted bucket. This parameter is required if generation is specified.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"getIamPolicy\": {\n                    \"id\": \"storage.buckets.getIamPolicy\",\n                    \"path\": \"b/{bucket}/iam\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns an IAM policy for the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"optionsRequestedPolicyVersion\": {\n                            \"type\": \"integer\",\n                            \"description\": \"The IAM policy format version to be returned. If the optionsRequestedPolicyVersion is for an older version that doesn't support part of the requested IAM policy, the request fails.\",\n                            \"format\": \"int32\",\n                            \"minimum\": \"1\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.buckets.insert\",\n                    \"path\": \"b\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a new bucket.\",\n                    \"parameters\": {\n                        \"predefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to this bucket.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\",\n                                \"publicReadWrite\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Project team owners get OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Project team owners get OWNER access.\",\n                                \"Project team members get access according to their roles.\",\n                                \"Project team owners get OWNER access, and allUsers get READER access.\",\n                                \"Project team owners get OWNER access, and allUsers get WRITER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"predefinedDefaultObjectAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of default object access controls to this bucket.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"project\": {\n                            \"type\": \"string\",\n                            \"description\": \"A valid API project identifier.\",\n                            \"required\": true,\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit owner, acl and defaultObjectAcl properties.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request.\",\n                            \"location\": \"query\"\n                        },\n                        \"enableObjectRetention\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"When set to true, object retention is enabled for this bucket.\",\n                            \"default\": \"false\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"project\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.buckets.list\",\n                    \"path\": \"b\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves a list of buckets for a given project.\",\n                    \"parameters\": {\n                        \"maxResults\": {\n                            \"type\": \"integer\",\n                            \"description\": \"Maximum number of buckets to return in a single response. The service will use this parameter or 1,000 items, whichever is smaller.\",\n                            \"default\": \"1000\",\n                            \"format\": \"uint32\",\n                            \"minimum\": \"0\",\n                            \"location\": \"query\"\n                        },\n                        \"pageToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\"\n                        },\n                        \"prefix\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to buckets whose names begin with this prefix.\",\n                            \"location\": \"query\"\n                        },\n                        \"project\": {\n                            \"type\": \"string\",\n                            \"description\": \"A valid API project identifier.\",\n                            \"required\": true,\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit owner, acl and defaultObjectAcl properties.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request.\",\n                            \"location\": \"query\"\n                        },\n                        \"softDeleted\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If set to true, only soft-deleted bucket versions are listed as distinct results in order of bucket name and generation number. The default value is false.\",\n                            \"location\": \"query\"\n                        },\n                        \"returnPartialSuccess\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, returns a partial list of buckets. The `unreachable` field will contain buckets that were not reachable.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"project\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Buckets\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"lockRetentionPolicy\": {\n                    \"id\": \"storage.buckets.lockRetentionPolicy\",\n                    \"path\": \"b/{bucket}/lockRetentionPolicy\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Locks retention policy on a bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether bucket's current metageneration matches the given value.\",\n                            \"required\": true,\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"ifMetagenerationMatch\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"patch\": {\n                    \"id\": \"storage.buckets.patch\",\n                    \"path\": \"b/{bucket}\",\n                    \"httpMethod\": \"PATCH\",\n                    \"description\": \"Patches a bucket. Changes to the bucket will be readable immediately after writing, but configuration changes may take time to propagate.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"predefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to this bucket.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\",\n                                \"publicReadWrite\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Project team owners get OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Project team owners get OWNER access.\",\n                                \"Project team members get access according to their roles.\",\n                                \"Project team owners get OWNER access, and allUsers get READER access.\",\n                                \"Project team owners get OWNER access, and allUsers get WRITER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"predefinedDefaultObjectAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of default object access controls to this bucket.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit owner, acl and defaultObjectAcl properties.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"setIamPolicy\": {\n                    \"id\": \"storage.buckets.setIamPolicy\",\n                    \"path\": \"b/{bucket}/iam\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates an IAM policy for the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"testIamPermissions\": {\n                    \"id\": \"storage.buckets.testIamPermissions\",\n                    \"path\": \"b/{bucket}/iam/testPermissions\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Tests a set of permissions on the given bucket to see which, if any, are held by the caller.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"permissions\": {\n                            \"type\": \"string\",\n                            \"description\": \"Permissions to test.\",\n                            \"required\": true,\n                            \"repeated\": true,\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"permissions\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"TestIamPermissionsResponse\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"update\": {\n                    \"id\": \"storage.buckets.update\",\n                    \"path\": \"b/{bucket}\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates a bucket. Changes to the bucket will be readable immediately after writing, but configuration changes may take time to propagate.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"predefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to this bucket.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\",\n                                \"publicReadWrite\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Project team owners get OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Project team owners get OWNER access.\",\n                                \"Project team members get access according to their roles.\",\n                                \"Project team owners get OWNER access, and allUsers get READER access.\",\n                                \"Project team owners get OWNER access, and allUsers get WRITER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"predefinedDefaultObjectAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of default object access controls to this bucket.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit owner, acl and defaultObjectAcl properties.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"restore\": {\n                    \"id\": \"storage.buckets.restore\",\n                    \"path\": \"b/{bucket}/restore\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Restores a soft-deleted bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket to be restored.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"The specific version of the bucket to be restored.\",\n                            \"required\": true,\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"generation\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Bucket\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                }\n            }\n        },\n        \"operations\": {\n            \"methods\": {\n                \"cancel\": {\n                    \"description\": \"Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed.\",\n                    \"path\": \"b/{bucket}/operations/{operationId}/cancel\",\n                    \"httpMethod\": \"POST\",\n                    \"id\": \"storage.buckets.operations.cancel\",\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"operationId\"\n                    ],\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"description\": \"The parent bucket of the operation resource.\",\n                            \"location\": \"path\",\n                            \"required\": true,\n                            \"type\": \"string\"\n                        },\n                        \"operationId\": {\n                            \"description\": \"The ID of the operation resource.\",\n                            \"location\": \"path\",\n                            \"required\": true,\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"description\": \"Gets the latest state of a long-running operation.\",\n                    \"path\": \"b/{bucket}/operations/{operationId}\",\n                    \"httpMethod\": \"GET\",\n                    \"id\": \"storage.buckets.operations.get\",\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"operationId\"\n                    ],\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"description\": \"The parent bucket of the operation resource.\",\n                            \"location\": \"path\",\n                            \"required\": true,\n                            \"type\": \"string\"\n                        },\n                        \"operationId\": {\n                            \"description\": \"The ID of the operation resource.\",\n                            \"location\": \"path\",\n                            \"required\": true,\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"response\": {\n                        \"$ref\": \"GoogleLongrunningOperation\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"list\": {\n                    \"description\": \"Lists operations that match the specified filter in the request.\",\n                    \"path\": \"b/{bucket}/operations\",\n                    \"httpMethod\": \"GET\",\n                    \"id\": \"storage.buckets.operations.list\",\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"parameters\": {\n                        \"filter\": {\n                            \"description\": \"A filter to narrow down results to a preferred subset. The filtering language is documented in more detail in [AIP-160](https://google.aip.dev/160).\",\n                            \"location\": \"query\",\n                            \"type\": \"string\"\n                        },\n                        \"bucket\": {\n                            \"description\": \"Name of the bucket in which to look for operations.\",\n                            \"location\": \"path\",\n                            \"required\": true,\n                            \"type\": \"string\"\n                        },\n                        \"pageSize\": {\n                            \"description\": \"Maximum number of items to return in a single page of responses. Fewer total results may be returned than requested. The service uses this parameter or 100 items, whichever is smaller.\",\n                            \"minimum\": \"0\",\n                            \"format\": \"int32\",\n                            \"location\": \"query\",\n                            \"type\": \"integer\"\n                        },\n                        \"pageToken\": {\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\",\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"response\": {\n                        \"$ref\": \"GoogleLongrunningListOperationsResponse\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"channels\": {\n            \"methods\": {\n                \"stop\": {\n                    \"id\": \"storage.channels.stop\",\n                    \"path\": \"channels/stop\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Stop watching resources through this channel\",\n                    \"request\": {\n                        \"$ref\": \"Channel\",\n                        \"parameterName\": \"resource\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"defaultObjectAccessControls\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.defaultObjectAccessControls.delete\",\n                    \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes the default object ACL entry for the specified entity on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.defaultObjectAccessControls.get\",\n                    \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns the default object ACL entry for the specified entity on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.defaultObjectAccessControls.insert\",\n                    \"path\": \"b/{bucket}/defaultObjectAcl\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a new default object ACL entry on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.defaultObjectAccessControls.list\",\n                    \"path\": \"b/{bucket}/defaultObjectAcl\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves default object ACL entries on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, only return default ACL listing if the bucket's current metageneration matches this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, only return default ACL listing if the bucket's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControls\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"patch\": {\n                    \"id\": \"storage.defaultObjectAccessControls.patch\",\n                    \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n                    \"httpMethod\": \"PATCH\",\n                    \"description\": \"Patches a default object ACL entry on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"update\": {\n                    \"id\": \"storage.defaultObjectAccessControls.update\",\n                    \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates a default object ACL entry on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"entity\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                }\n            }\n        },\n        \"folders\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.folders.delete\",\n                    \"path\": \"b/{bucket}/folders/{folder}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes a folder. Only applicable to buckets with hierarchical namespace enabled.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the folder resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"folder\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, only deletes the folder if its metageneration matches this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, only deletes the folder if its metageneration does not match this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"folder\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.folders.get\",\n                    \"path\": \"b/{bucket}/folders/{folder}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns metadata for the specified folder. Only applicable to buckets with hierarchical namespace enabled.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the folder resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"folder\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the folder metadata conditional on whether the folder's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the folder metadata conditional on whether the folder's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"folder\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Folder\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.folders.insert\",\n                    \"path\": \"b/{bucket}/folders\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a new folder. Only applicable to buckets with hierarchical namespace enabled.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the folder resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"recursive\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, any parent folder which doesn\\u2019t exist will be created automatically.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Folder\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Folder\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.folders.list\",\n                    \"path\": \"b/{bucket}/folders\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves a list of folders matching the criteria. Only applicable to buckets with hierarchical namespace enabled.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to look for folders.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"delimiter\": {\n                            \"type\": \"string\",\n                            \"description\": \"Returns results in a directory-like mode. The only supported value is '/'. If set, items will only contain folders that either exactly match the prefix, or are one level below the prefix.\",\n                            \"location\": \"query\"\n                        },\n                        \"endOffset\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to folders whose names are lexicographically before endOffset. If startOffset is also set, the folders listed will have names between startOffset (inclusive) and endOffset (exclusive).\",\n                            \"location\": \"query\"\n                        },\n                        \"pageSize\": {\n                            \"type\": \"integer\",\n                            \"description\": \"Maximum number of items to return in a single page of responses.\",\n                            \"format\": \"int32\",\n                            \"minimum\": \"0\",\n                            \"location\": \"query\"\n                        },\n                        \"pageToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\"\n                        },\n                        \"prefix\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to folders whose paths begin with this prefix. If set, the value must either be an empty string or end with a '/'.\",\n                            \"location\": \"query\"\n                        },\n                        \"startOffset\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to folders whose names are lexicographically equal to or after startOffset. If endOffset is also set, the folders listed will have names between startOffset (inclusive) and endOffset (exclusive).\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Folders\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"rename\": {\n                    \"id\": \"storage.folders.rename\",\n                    \"path\": \"b/{bucket}/folders/{sourceFolder}/renameTo/folders/{destinationFolder}\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Renames a source folder to a destination folder. Only applicable to buckets with hierarchical namespace enabled.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the folders are in.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the destination folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifSourceMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"sourceFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the source folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"sourceFolder\",\n                        \"destinationFolder\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"GoogleLongrunningOperation\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"managedFolders\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.managedFolders.delete\",\n                    \"path\": \"b/{bucket}/managedFolders/{managedFolder}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes a managed folder.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"managedFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"The managed folder name/path.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, only deletes the managed folder if its metageneration matches this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, only deletes the managed folder if its metageneration does not match this value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"allowNonEmpty\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"Allows the deletion of a managed folder even if it is not empty. A managed folder is empty if there are no objects or managed folders that it applies to. Callers must have storage.managedFolders.setIamPolicy permission.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"managedFolder\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.managedFolders.get\",\n                    \"path\": \"b/{bucket}/managedFolders/{managedFolder}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns metadata of the specified managed folder.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"managedFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"The managed folder name/path.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the managed folder metadata conditional on whether the managed folder's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the return of the managed folder metadata conditional on whether the managed folder's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"managedFolder\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"ManagedFolder\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"getIamPolicy\": {\n                    \"id\": \"storage.managedFolders.getIamPolicy\",\n                    \"path\": \"b/{bucket}/managedFolders/{managedFolder}/iam\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns an IAM policy for the specified managed folder.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"optionsRequestedPolicyVersion\": {\n                            \"type\": \"integer\",\n                            \"description\": \"The IAM policy format version to be returned. If the optionsRequestedPolicyVersion is for an older version that doesn't support part of the requested IAM policy, the request fails.\",\n                            \"format\": \"int32\",\n                            \"minimum\": \"1\",\n                            \"location\": \"query\"\n                        },\n                        \"managedFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"The managed folder name/path.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"managedFolder\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.managedFolders.insert\",\n                    \"path\": \"b/{bucket}/managedFolders\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a new managed folder.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ManagedFolder\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ManagedFolder\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.managedFolders.list\",\n                    \"path\": \"b/{bucket}/managedFolders\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Lists managed folders in the given bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"pageSize\": {\n                            \"type\": \"integer\",\n                            \"description\": \"Maximum number of items to return in a single page of responses.\",\n                            \"format\": \"int32\",\n                            \"minimum\": \"0\",\n                            \"location\": \"query\"\n                        },\n                        \"pageToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\"\n                        },\n                        \"prefix\": {\n                            \"type\": \"string\",\n                            \"description\": \"The managed folder name/path prefix to filter the output list of results.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"ManagedFolders\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"setIamPolicy\": {\n                    \"id\": \"storage.managedFolders.setIamPolicy\",\n                    \"path\": \"b/{bucket}/managedFolders/{managedFolder}/iam\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates an IAM policy for the specified managed folder.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"managedFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"The managed folder name/path.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"managedFolder\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"testIamPermissions\": {\n                    \"id\": \"storage.managedFolders.testIamPermissions\",\n                    \"path\": \"b/{bucket}/managedFolders/{managedFolder}/iam/testPermissions\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Tests a set of permissions on the given managed folder to see which, if any, are held by the caller.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the managed folder.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"managedFolder\": {\n                            \"type\": \"string\",\n                            \"description\": \"The managed folder name/path.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"permissions\": {\n                            \"type\": \"string\",\n                            \"description\": \"Permissions to test.\",\n                            \"required\": true,\n                            \"repeated\": true,\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"managedFolder\",\n                        \"permissions\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"TestIamPermissionsResponse\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"notifications\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.notifications.delete\",\n                    \"path\": \"b/{bucket}/notificationConfigs/{notification}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes a notification subscription.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"The parent bucket of the notification.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"notification\": {\n                            \"type\": \"string\",\n                            \"description\": \"ID of the notification to delete.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"notification\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.notifications.get\",\n                    \"path\": \"b/{bucket}/notificationConfigs/{notification}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"View a notification configuration.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"The parent bucket of the notification.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"notification\": {\n                            \"type\": \"string\",\n                            \"description\": \"Notification ID\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"notification\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Notification\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.notifications.insert\",\n                    \"path\": \"b/{bucket}/notificationConfigs\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a notification subscription for a given bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"The parent bucket of the notification.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Notification\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Notification\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.notifications.list\",\n                    \"path\": \"b/{bucket}/notificationConfigs\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves a list of notification subscriptions for a given bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a Google Cloud Storage bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Notifications\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"objectAccessControls\": {\n            \"methods\": {\n                \"delete\": {\n                    \"id\": \"storage.objectAccessControls.delete\",\n                    \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Permanently deletes the ACL entry for the specified entity on the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\",\n                        \"entity\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.objectAccessControls.get\",\n                    \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns the ACL entry for the specified entity on the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\",\n                        \"entity\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.objectAccessControls.insert\",\n                    \"path\": \"b/{bucket}/o/{object}/acl\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Creates a new ACL entry on the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"list\": {\n                    \"id\": \"storage.objectAccessControls.list\",\n                    \"path\": \"b/{bucket}/o/{object}/acl\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves ACL entries on the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControls\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"patch\": {\n                    \"id\": \"storage.objectAccessControls.patch\",\n                    \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n                    \"httpMethod\": \"PATCH\",\n                    \"description\": \"Patches an ACL entry on the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\",\n                        \"entity\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"update\": {\n                    \"id\": \"storage.objectAccessControls.update\",\n                    \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates an ACL entry on the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of a bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"entity\": {\n                            \"type\": \"string\",\n                            \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\",\n                        \"entity\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"ObjectAccessControl\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                }\n            }\n        },\n        \"objects\": {\n            \"methods\": {\n                \"compose\": {\n                    \"id\": \"storage.objects.compose\",\n                    \"path\": \"b/{destinationBucket}/o/{destinationObject}/compose\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Concatenates a list of existing objects into a new object in the same bucket.\",\n                    \"parameters\": {\n                        \"destinationBucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket containing the source objects. The destination object is stored in this bucket.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the new object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationPredefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to the destination object.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"kmsKeyName\": {\n                            \"type\": \"string\",\n                            \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"destinationBucket\",\n                        \"destinationObject\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"ComposeRequest\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"copy\": {\n                    \"id\": \"storage.objects.copy\",\n                    \"path\": \"b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Copies a source object to a destination object. Optionally overrides metadata.\",\n                    \"parameters\": {\n                        \"destinationBucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationKmsKeyName\": {\n                            \"type\": \"string\",\n                            \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n                            \"location\": \"query\"\n                        },\n                        \"destinationObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationPredefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to the destination object.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current generation matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current generation does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"sourceBucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to find the source object.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"sourceGeneration\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of the source object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"sourceObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the source object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"sourceBucket\",\n                        \"sourceObject\",\n                        \"destinationBucket\",\n                        \"destinationObject\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"delete\": {\n                    \"id\": \"storage.objects.delete\",\n                    \"path\": \"b/{bucket}/o/{object}\",\n                    \"httpMethod\": \"DELETE\",\n                    \"description\": \"Deletes an object and its metadata. Deletions are permanent if versioning is not enabled for the bucket, or if the generation parameter is used.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, permanently deletes a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"get\": {\n                    \"id\": \"storage.objects.get\",\n                    \"path\": \"b/{bucket}/o/{object}\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves an object or its metadata.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        },\n                        \"softDeleted\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, only soft-deleted object versions will be listed. The default is false. For more information, see Soft Delete.\",\n                            \"location\": \"query\"\n                        },\n                        \"restoreToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"If you have enabled hierarchical namespace on your bucket and are working with soft-deleted objects, the restoreToken, a universally unique identifier (UUID), along with the object's name and generation value, uniquely identifies the object.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ],\n                    \"supportsMediaDownload\": true,\n                    \"useMediaDownloadService\": true\n                },\n                \"getIamPolicy\": {\n                    \"id\": \"storage.objects.getIamPolicy\",\n                    \"path\": \"b/{bucket}/o/{object}/iam\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Returns an IAM policy for the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"insert\": {\n                    \"id\": \"storage.objects.insert\",\n                    \"path\": \"b/{bucket}/o\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Stores a new object and metadata.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"contentEncoding\": {\n                            \"type\": \"string\",\n                            \"description\": \"If set, sets the contentEncoding property of the final object to this value. Setting this parameter is equivalent to setting the contentEncoding metadata property. This can be useful when uploading an object with uploadType=media to indicate the encoding of the content being uploaded.\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"kmsKeyName\": {\n                            \"type\": \"string\",\n                            \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n                            \"location\": \"query\"\n                        },\n                        \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"location\": \"query\"\n                        },\n                        \"predefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to this object.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ],\n                    \"supportsMediaUpload\": true,\n                    \"mediaUpload\": {\n                        \"accept\": [\n                            \"*/*\"\n                        ],\n                        \"protocols\": {\n                            \"simple\": {\n                                \"multipart\": true,\n                                \"path\": \"/upload/storage/v1/b/{bucket}/o\"\n                            },\n                            \"resumable\": {\n                                \"multipart\": true,\n                                \"path\": \"/resumable/upload/storage/v1/b/{bucket}/o\"\n                            }\n                        }\n                    }\n                },\n                \"list\": {\n                    \"id\": \"storage.objects.list\",\n                    \"path\": \"b/{bucket}/o\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Retrieves a list of objects matching the criteria.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to look for objects.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"delimiter\": {\n                            \"type\": \"string\",\n                            \"description\": \"Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.\",\n                            \"location\": \"query\"\n                        },\n                        \"endOffset\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects whose names are lexicographically before endOffset. If startOffset is also set, the objects listed will have names between startOffset (inclusive) and endOffset (exclusive).\",\n                            \"location\": \"query\"\n                        },\n                        \"includeTrailingDelimiter\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, objects that end in exactly one instance of delimiter will have their metadata included in items in addition to prefixes.\",\n                            \"location\": \"query\"\n                        },\n                        \"maxResults\": {\n                            \"type\": \"integer\",\n                            \"description\": \"Maximum number of items plus prefixes to return in a single page of responses. As duplicate prefixes are omitted, fewer total results may be returned than requested. The service will use this parameter or 1,000 items, whichever is smaller.\",\n                            \"default\": \"1000\",\n                            \"format\": \"uint32\",\n                            \"minimum\": \"0\",\n                            \"location\": \"query\"\n                        },\n                        \"pageToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\"\n                        },\n                        \"prefix\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects whose names begin with this prefix.\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"startOffset\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects whose names are lexicographically equal to or after startOffset. If endOffset is also set, the objects listed will have names between startOffset (inclusive) and endOffset (exclusive).\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        },\n                        \"versions\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.\",\n                            \"location\": \"query\"\n                        },\n                        \"matchGlob\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects and prefixes that match this glob pattern.\",\n                            \"location\": \"query\"\n                        },\n                        \"softDeleted\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, only soft-deleted object versions will be listed. The default is false. For more information, see Soft Delete.\",\n                            \"location\": \"query\"\n                        },\n                        \"includeFoldersAsPrefixes\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"Only applicable if delimiter is set to '/'. If true, will also include folders and managed folders (besides objects) in the returned prefixes.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Objects\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ],\n                    \"supportsSubscription\": true\n                },\n                \"patch\": {\n                    \"id\": \"storage.objects.patch\",\n                    \"path\": \"b/{bucket}/o/{object}\",\n                    \"httpMethod\": \"PATCH\",\n                    \"description\": \"Patches an object's metadata.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"overrideUnlockedRetention\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"Must be true to remove the retention configuration, reduce its unlocked retention period, or change its mode from unlocked to locked.\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"predefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to this object.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request, for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"move\": {\n                    \"id\": \"storage.objects.move\",\n                    \"path\": \"b/{bucket}/o/{sourceObject}/moveTo/o/{destinationObject}\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Moves a source object to a destination object. Optionally overrides metadata.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to find the source object.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"sourceObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the source object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current generation matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current generation does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"sourceObject\",\n                        \"destinationObject\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"rewrite\": {\n                    \"id\": \"storage.objects.rewrite\",\n                    \"path\": \"b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Rewrites a source object to a destination object. Optionally overrides metadata.\",\n                    \"parameters\": {\n                        \"destinationBucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationKmsKeyName\": {\n                            \"type\": \"string\",\n                            \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n                            \"location\": \"query\"\n                        },\n                        \"destinationObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"destinationPredefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to the destination object.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the destination object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current generation matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current generation does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifSourceMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the source object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"maxBytesRewrittenPerCall\": {\n                            \"type\": \"string\",\n                            \"description\": \"The maximum number of bytes that will be rewritten per rewrite request. Most callers shouldn't need to specify this parameter - it is primarily in place to support testing. If specified the value must be an integral multiple of 1 MiB (1048576). Also, this only applies to requests where the source and destination span locations and/or storage classes. Finally, this value must not change across rewrite calls else you'll get an error that the rewriteToken is invalid.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"rewriteToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"Include this field (from the previous rewrite response) on each rewrite request after the first one, until the rewrite response 'done' flag is true. Calls that provide a rewriteToken can omit all other request fields, but if included those fields must match the values provided in the first rewrite request.\",\n                            \"location\": \"query\"\n                        },\n                        \"sourceBucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to find the source object.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"sourceGeneration\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of the source object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"sourceObject\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the source object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"sourceBucket\",\n                        \"sourceObject\",\n                        \"destinationBucket\",\n                        \"destinationObject\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"RewriteResponse\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"setIamPolicy\": {\n                    \"id\": \"storage.objects.setIamPolicy\",\n                    \"path\": \"b/{bucket}/o/{object}/iam\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates an IAM policy for the specified object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Policy\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"testIamPermissions\": {\n                    \"id\": \"storage.objects.testIamPermissions\",\n                    \"path\": \"b/{bucket}/o/{object}/iam/testPermissions\",\n                    \"httpMethod\": \"GET\",\n                    \"description\": \"Tests a set of permissions on the given object to see which, if any, are held by the caller.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"permissions\": {\n                            \"type\": \"string\",\n                            \"description\": \"Permissions to test.\",\n                            \"required\": true,\n                            \"repeated\": true,\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\",\n                        \"permissions\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"TestIamPermissionsResponse\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                },\n                \"update\": {\n                    \"id\": \"storage.objects.update\",\n                    \"path\": \"b/{bucket}/o/{object}\",\n                    \"httpMethod\": \"PUT\",\n                    \"description\": \"Updates an object's metadata.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"overrideUnlockedRetention\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"Must be true to remove the retention configuration, reduce its unlocked retention period, or change its mode from unlocked to locked.\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see [Encoding URI Path Parts](https://cloud.google.com/storage/docs/request-endpoints#encoding).\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"predefinedAcl\": {\n                            \"type\": \"string\",\n                            \"description\": \"Apply a predefined set of access controls to this object.\",\n                            \"enum\": [\n                                \"authenticatedRead\",\n                                \"bucketOwnerFullControl\",\n                                \"bucketOwnerRead\",\n                                \"private\",\n                                \"projectPrivate\",\n                                \"publicRead\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n                                \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n                                \"Object owner gets OWNER access, and project team owners get READER access.\",\n                                \"Object owner gets OWNER access.\",\n                                \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n                                \"Object owner gets OWNER access, and allUsers get READER access.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"watchAll\": {\n                    \"id\": \"storage.objects.watchAll\",\n                    \"path\": \"b/{bucket}/o/watch\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Watch for changes on all objects in a bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which to look for objects.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"delimiter\": {\n                            \"type\": \"string\",\n                            \"description\": \"Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.\",\n                            \"location\": \"query\"\n                        },\n                        \"endOffset\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects whose names are lexicographically before endOffset. If startOffset is also set, the objects listed will have names between startOffset (inclusive) and endOffset (exclusive).\",\n                            \"location\": \"query\"\n                        },\n                        \"includeTrailingDelimiter\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, objects that end in exactly one instance of delimiter will have their metadata included in items in addition to prefixes.\",\n                            \"location\": \"query\"\n                        },\n                        \"maxResults\": {\n                            \"type\": \"integer\",\n                            \"description\": \"Maximum number of items plus prefixes to return in a single page of responses. As duplicate prefixes are omitted, fewer total results may be returned than requested. The service will use this parameter or 1,000 items, whichever is smaller.\",\n                            \"default\": \"1000\",\n                            \"format\": \"uint32\",\n                            \"minimum\": \"0\",\n                            \"location\": \"query\"\n                        },\n                        \"pageToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                            \"location\": \"query\"\n                        },\n                        \"prefix\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects whose names begin with this prefix.\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to noAcl.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"startOffset\": {\n                            \"type\": \"string\",\n                            \"description\": \"Filter results to objects whose names are lexicographically equal to or after startOffset. If endOffset is also set, the objects listed will have names between startOffset (inclusive) and endOffset (exclusive).\",\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        },\n                        \"versions\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"Channel\",\n                        \"parameterName\": \"resource\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"Channel\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_only\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ],\n                    \"supportsSubscription\": true\n                },\n                \"restore\": {\n                    \"id\": \"storage.objects.restore\",\n                    \"path\": \"b/{bucket}/o/{object}/restore\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Restores a soft-deleted object.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"generation\": {\n                            \"type\": \"string\",\n                            \"description\": \"Selects a specific revision of this object.\",\n                            \"required\": true,\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"object\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        },\n                        \"ifGenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's one live generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifGenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether none of the object's live generations match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether the object's one live metageneration matches the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"ifMetagenerationNotMatch\": {\n                            \"type\": \"string\",\n                            \"description\": \"Makes the operation conditional on whether none of the object's live metagenerations match the given value.\",\n                            \"format\": \"int64\",\n                            \"location\": \"query\"\n                        },\n                        \"copySourceAcl\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, copies the source object's ACL; otherwise, uses the bucket's default object ACL. The default is false.\",\n                            \"location\": \"query\"\n                        },\n                        \"projection\": {\n                            \"type\": \"string\",\n                            \"description\": \"Set of properties to return. Defaults to full.\",\n                            \"enum\": [\n                                \"full\",\n                                \"noAcl\"\n                            ],\n                            \"enumDescriptions\": [\n                                \"Include all properties.\",\n                                \"Omit the owner, acl property.\"\n                            ],\n                            \"location\": \"query\"\n                        },\n                        \"userProject\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n                            \"location\": \"query\"\n                        },\n                        \"restoreToken\": {\n                            \"type\": \"string\",\n                            \"description\": \"The restoreToken is required to restore a soft-deleted object only if its name and generation value do not uniquely identify it.\",\n                            \"location\": \"query\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\",\n                        \"object\",\n                        \"generation\"\n                    ],\n                    \"response\": {\n                        \"$ref\": \"Object\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\"\n                    ]\n                },\n                \"bulkRestore\": {\n                    \"id\": \"storage.objects.bulkRestore\",\n                    \"path\": \"b/{bucket}/o/bulkRestore\",\n                    \"httpMethod\": \"POST\",\n                    \"description\": \"Initiates a long-running bulk restore operation on the specified bucket.\",\n                    \"parameters\": {\n                        \"bucket\": {\n                            \"type\": \"string\",\n                            \"description\": \"Name of the bucket in which the object resides.\",\n                            \"required\": true,\n                            \"location\": \"path\"\n                        }\n                    },\n                    \"parameterOrder\": [\n                        \"bucket\"\n                    ],\n                    \"request\": {\n                        \"$ref\": \"BulkRestoreObjectsRequest\"\n                    },\n                    \"response\": {\n                        \"$ref\": \"GoogleLongrunningOperation\"\n                    },\n                    \"scopes\": [\n                        \"https://www.googleapis.com/auth/cloud-platform\",\n                        \"https://www.googleapis.com/auth/devstorage.full_control\",\n                        \"https://www.googleapis.com/auth/devstorage.read_write\"\n                    ]\n                }\n            }\n        },\n        \"projects\": {\n            \"resources\": {\n                \"hmacKeys\": {\n                    \"methods\": {\n                        \"create\": {\n                            \"id\": \"storage.projects.hmacKeys.create\",\n                            \"path\": \"projects/{projectId}/hmacKeys\",\n                            \"httpMethod\": \"POST\",\n                            \"description\": \"Creates a new HMAC key for the specified service account.\",\n                            \"parameters\": {\n                                \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Project ID owning the service account.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"serviceAccountEmail\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Email address of the service account.\",\n                                    \"required\": true,\n                                    \"location\": \"query\"\n                                },\n                                \"userProject\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project to be billed for this request.\",\n                                    \"location\": \"query\"\n                                }\n                            },\n                            \"parameterOrder\": [\n                                \"projectId\",\n                                \"serviceAccountEmail\"\n                            ],\n                            \"response\": {\n                                \"$ref\": \"HmacKey\"\n                            },\n                            \"scopes\": [\n                                \"https://www.googleapis.com/auth/cloud-platform\",\n                                \"https://www.googleapis.com/auth/devstorage.full_control\"\n                            ]\n                        },\n                        \"delete\": {\n                            \"id\": \"storage.projects.hmacKeys.delete\",\n                            \"path\": \"projects/{projectId}/hmacKeys/{accessId}\",\n                            \"httpMethod\": \"DELETE\",\n                            \"description\": \"Deletes an HMAC key.\",\n                            \"parameters\": {\n                                \"accessId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Name of the HMAC key to be deleted.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Project ID owning the requested key\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"userProject\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project to be billed for this request.\",\n                                    \"location\": \"query\"\n                                }\n                            },\n                            \"parameterOrder\": [\n                                \"projectId\",\n                                \"accessId\"\n                            ],\n                            \"scopes\": [\n                                \"https://www.googleapis.com/auth/cloud-platform\",\n                                \"https://www.googleapis.com/auth/devstorage.full_control\",\n                                \"https://www.googleapis.com/auth/devstorage.read_write\"\n                            ]\n                        },\n                        \"get\": {\n                            \"id\": \"storage.projects.hmacKeys.get\",\n                            \"path\": \"projects/{projectId}/hmacKeys/{accessId}\",\n                            \"httpMethod\": \"GET\",\n                            \"description\": \"Retrieves an HMAC key's metadata\",\n                            \"parameters\": {\n                                \"accessId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Name of the HMAC key.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Project ID owning the service account of the requested key.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"userProject\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project to be billed for this request.\",\n                                    \"location\": \"query\"\n                                }\n                            },\n                            \"parameterOrder\": [\n                                \"projectId\",\n                                \"accessId\"\n                            ],\n                            \"response\": {\n                                \"$ref\": \"HmacKeyMetadata\"\n                            },\n                            \"scopes\": [\n                                \"https://www.googleapis.com/auth/cloud-platform\",\n                                \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                                \"https://www.googleapis.com/auth/devstorage.full_control\",\n                                \"https://www.googleapis.com/auth/devstorage.read_only\"\n                            ]\n                        },\n                        \"list\": {\n                            \"id\": \"storage.projects.hmacKeys.list\",\n                            \"path\": \"projects/{projectId}/hmacKeys\",\n                            \"httpMethod\": \"GET\",\n                            \"description\": \"Retrieves a list of HMAC keys matching the criteria.\",\n                            \"parameters\": {\n                                \"maxResults\": {\n                                    \"type\": \"integer\",\n                                    \"description\": \"Maximum number of items to return in a single page of responses. The service uses this parameter or 250 items, whichever is smaller. The max number of items per page will also be limited by the number of distinct service accounts in the response. If the number of service accounts in a single response is too high, the page will truncated and a next page token will be returned.\",\n                                    \"default\": \"250\",\n                                    \"format\": \"uint32\",\n                                    \"minimum\": \"0\",\n                                    \"location\": \"query\"\n                                },\n                                \"pageToken\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n                                    \"location\": \"query\"\n                                },\n                                \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Name of the project in which to look for HMAC keys.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"serviceAccountEmail\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"If present, only keys for the given service account are returned.\",\n                                    \"location\": \"query\"\n                                },\n                                \"showDeletedKeys\": {\n                                    \"type\": \"boolean\",\n                                    \"description\": \"Whether or not to show keys in the DELETED state.\",\n                                    \"location\": \"query\"\n                                },\n                                \"userProject\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project to be billed for this request.\",\n                                    \"location\": \"query\"\n                                }\n                            },\n                            \"parameterOrder\": [\n                                \"projectId\"\n                            ],\n                            \"response\": {\n                                \"$ref\": \"HmacKeysMetadata\"\n                            },\n                            \"scopes\": [\n                                \"https://www.googleapis.com/auth/cloud-platform\",\n                                \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                                \"https://www.googleapis.com/auth/devstorage.full_control\",\n                                \"https://www.googleapis.com/auth/devstorage.read_only\"\n                            ]\n                        },\n                        \"update\": {\n                            \"id\": \"storage.projects.hmacKeys.update\",\n                            \"path\": \"projects/{projectId}/hmacKeys/{accessId}\",\n                            \"httpMethod\": \"PUT\",\n                            \"description\": \"Updates the state of an HMAC key. See the HMAC Key resource descriptor for valid states.\",\n                            \"parameters\": {\n                                \"accessId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Name of the HMAC key being updated.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Project ID owning the service account of the updated key.\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"userProject\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project to be billed for this request.\",\n                                    \"location\": \"query\"\n                                }\n                            },\n                            \"parameterOrder\": [\n                                \"projectId\",\n                                \"accessId\"\n                            ],\n                            \"request\": {\n                                \"$ref\": \"HmacKeyMetadata\"\n                            },\n                            \"response\": {\n                                \"$ref\": \"HmacKeyMetadata\"\n                            },\n                            \"scopes\": [\n                                \"https://www.googleapis.com/auth/cloud-platform\",\n                                \"https://www.googleapis.com/auth/devstorage.full_control\"\n                            ]\n                        }\n                    }\n                },\n                \"serviceAccount\": {\n                    \"methods\": {\n                        \"get\": {\n                            \"id\": \"storage.projects.serviceAccount.get\",\n                            \"path\": \"projects/{projectId}/serviceAccount\",\n                            \"httpMethod\": \"GET\",\n                            \"description\": \"Get the email address of this project's Google Cloud Storage service account.\",\n                            \"parameters\": {\n                                \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Project ID\",\n                                    \"required\": true,\n                                    \"location\": \"path\"\n                                },\n                                \"userProject\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project to be billed for this request.\",\n                                    \"location\": \"query\"\n                                }\n                            },\n                            \"parameterOrder\": [\n                                \"projectId\"\n                            ],\n                            \"response\": {\n                                \"$ref\": \"ServiceAccount\"\n                            },\n                            \"scopes\": [\n                                \"https://www.googleapis.com/auth/cloud-platform\",\n                                \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n                                \"https://www.googleapis.com/auth/devstorage.full_control\",\n                                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                                \"https://www.googleapis.com/auth/devstorage.read_write\"\n                            ]\n                        }\n                    }\n                }\n            }\n        }\n    },\n    \"revision\": \"20240501\",\n    \"etag\": \"\\\"3135313638313632393935373531333737363832\\\"\"\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/CreatedHmacKey.php",
    "content": "<?php\n/**\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\n/**\n * Represents a newly created HMAC key. Provides access to the key metadata and\n * secret.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n * $response = $storage->createHmacKey($serviceAccountEmail);\n * ```\n */\nclass CreatedHmacKey\n{\n    /**\n     * @var HmacKey\n     */\n    private $hmacKey;\n\n    /**\n     * @var string\n     */\n    private $secret;\n\n    /**\n     * @param HmacKey $hmacKey The HMAC Key object.\n     * @param string $secret The HMAC key secret.\n     */\n    public function __construct(HmacKey $hmacKey, $secret)\n    {\n        $this->hmacKey = $hmacKey;\n        $this->secret = $secret;\n    }\n\n    /**\n     * Get the HMAC key object.\n     *\n     * Example:\n     * ```\n     * $key = $response->hmacKey();\n     * ```\n     *\n     * @return HmacKey\n     */\n    public function hmacKey()\n    {\n        return $this->hmacKey;\n    }\n\n    /**\n     * Get the HMAC key secret.\n     *\n     * This value will never be returned from the API after first creation. Make\n     * sure to record it for later use immediately upon key creation.\n     *\n     * Example:\n     * ```\n     * $secret = $response->secret();\n     * ```\n     *\n     * @return string\n     */\n    public function secret()\n    {\n        return $this->secret;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/EncryptionTrait.php",
    "content": "<?php\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse phpseclib\\Crypt\\RSA as RSA2;\nuse phpseclib3\\Crypt\\RSA as RSA3;\n\n/**\n * Trait which provides helper methods for customer-supplied encryption.\n */\ntrait EncryptionTrait\n{\n    /**\n     * @var array\n     */\n    private $copySourceEncryptionHeaderNames = [\n        'algorithm' => 'x-goog-copy-source-encryption-algorithm',\n        'key' => 'x-goog-copy-source-encryption-key',\n        'keySHA256' => 'x-goog-copy-source-encryption-key-sha256'\n    ];\n\n    /**\n     * @var array\n     */\n    private $encryptionHeaderNames = [\n        'algorithm' => 'x-goog-encryption-algorithm',\n        'key' => 'x-goog-encryption-key',\n        'keySHA256' => 'x-goog-encryption-key-sha256'\n    ];\n\n    /**\n     * Formats options for customer-supplied encryption headers.\n     *\n     * @param array $options\n     * @return array\n     * @access private\n     */\n    public function formatEncryptionHeaders(array $options)\n    {\n        $encryptionHeaders = [];\n        $useCopySourceHeaders = $options['useCopySourceHeaders'] ?? false;\n        $key = $options['encryptionKey'] ?? null;\n        $keySHA256 = $options['encryptionKeySHA256'] ?? null;\n        $destinationKey = $options['destinationEncryptionKey'] ?? null;\n        $destinationKeySHA256 = $options['destinationEncryptionKeySHA256'] ?? null;\n\n        unset($options['useCopySourceHeaders']);\n        unset($options['encryptionKey']);\n        unset($options['encryptionKeySHA256']);\n        unset($options['destinationEncryptionKey']);\n        unset($options['destinationEncryptionKeySHA256']);\n\n        $encryptionHeaders = $this->buildHeaders($key, $keySHA256, $useCopySourceHeaders)\n            + $this->buildHeaders($destinationKey, $destinationKeySHA256, false);\n\n        if (!empty($encryptionHeaders)) {\n            if (isset($options['restOptions']['headers'])) {\n                $options['restOptions']['headers'] += $encryptionHeaders;\n            } else {\n                $options['restOptions']['headers'] = $encryptionHeaders;\n            }\n        }\n\n        return $options;\n    }\n\n    /**\n     * Builds out customer-supplied encryption headers.\n     *\n     * @param string $key\n     * @param string $keySHA256\n     * @param bool $useCopySourceHeaders\n     * @return array\n     */\n    private function buildHeaders($key, $keySHA256, $useCopySourceHeaders)\n    {\n        if ($key) {\n            $headerNames = $useCopySourceHeaders\n                ? $this->copySourceEncryptionHeaderNames\n                : $this->encryptionHeaderNames;\n\n            if (!$keySHA256) {\n                $decodedKey = base64_decode($key);\n                $keySHA256 = base64_encode(hash('SHA256', $decodedKey, true));\n            }\n\n            return [\n                $headerNames['algorithm'] => 'AES256',\n                $headerNames['key'] => $key,\n                $headerNames['keySHA256'] => $keySHA256\n            ];\n        }\n\n        return [];\n    }\n\n    /**\n     * Sign a string using a given private key.\n     *\n     * @deprecated Please use the {@see Google\\Auth\\SignBlobInterface::signBlob()}\n     *        and implementations for signing strings.\n     *        This method will be removed in a future release.\n     *\n     * @param string $privateKey The private key to use to sign the data.\n     * @param string $data The data to sign.\n     * @param bool $forceOpenssl If true, OpenSSL will be used regardless of\n     *        whether phpseclib is available. **Defaults to** `false`.\n     * @return string The signature\n     */\n    protected function signString($privateKey, $data, $forceOpenssl = false)\n    {\n        $signature = '';\n\n        if (class_exists(RSA3::class) && !$forceOpenssl) {\n            $rsa = RSA3::loadPrivateKey($privateKey);\n            $rsa = $rsa->withPadding(RSA3::SIGNATURE_PKCS1)\n                ->withHash('sha256');\n\n            $signature = $rsa->sign($data);\n        } elseif (class_exists(RSA2::class) && !$forceOpenssl) {\n            $rsa = new RSA2();\n            $rsa->loadKey($privateKey);\n            $rsa->setSignatureMode(RSA2::SIGNATURE_PKCS1);\n            $rsa->setHash('sha256');\n\n            $signature = $rsa->sign($data);\n        } elseif (extension_loaded('openssl')) {\n            openssl_sign($data, $signature, $privateKey, 'sha256WithRSAEncryption');\n        } else {\n            // @codeCoverageIgnoreStart\n            throw new \\RuntimeException('OpenSSL is not installed.');\n        }\n        // @codeCoverageIgnoreEnd\n\n        return $signature;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/HmacKey.php",
    "content": "<?php\n/**\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\n\n/**\n * Represents a Service Account HMAC key.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n * $hmacKey = $storage->hmacKey($accessId);\n * ```\n */\nclass HmacKey\n{\n    /**\n     * @var ConnectionInterface\n     * @internal\n     */\n    private $connection;\n\n    /**\n     * @var string\n     */\n    private $projectId;\n\n    /**\n     * @var string\n     */\n    private $accessId;\n\n    /**\n     * @var array|null\n     */\n    private $info;\n\n    /**\n     * @param ConnectionInterface $connection A connection to Cloud Storage.\n     *        This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param string $projectId The current project ID.\n     * @param string $accessId The key identifier.\n     * @param array|null $info The key metadata.\n     */\n    public function __construct(\n        ConnectionInterface $connection,\n        $projectId,\n        $accessId,\n        array $info = []\n    ) {\n        $this->connection = $connection;\n        $this->projectId = $projectId;\n        $this->accessId = $accessId;\n        $this->info = $info;\n    }\n\n    /**\n     * Get the HMAC Key Access ID.\n     *\n     * Example:\n     * ```\n     * $accessId = $hmacKey->accessId();\n     * ```\n     *\n     * @return string\n     */\n    public function accessId()\n    {\n        return $this->accessId;\n    }\n\n    /**\n     * Fetch the key metadata from Cloud Storage.\n     *\n     * Example:\n     * ```\n     * $keyMetadata = $hmacKey->reload();\n     * ```\n     *\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request. **NOTE**: This option is\n     *           currently ignored by Cloud Storage.\n     * }\n     * @return array\n     */\n    public function reload(array $options = [])\n    {\n        $this->info = $this->connection->getHmacKey([\n            'projectId' => $this->projectId,\n            'accessId' => $this->accessId\n        ] + $options);\n\n        return $this->info;\n    }\n\n    /**\n     * Get the HMAC Key Metadata.\n     *\n     * If the metadata is not already available, it will be requested from Cloud\n     * Storage.\n     *\n     * Example:\n     * ```\n     * $keyMetadata = $hmacKey->info();\n     * ```\n     *\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request. **NOTE**: This option is\n     *           currently ignored by Cloud Storage.\n     * }\n     * @return array\n     */\n    public function info(array $options = [])\n    {\n        return $this->info ?: $this->reload($options);\n    }\n\n    /**\n     * Update the HMAC Key state.\n     *\n     * Example:\n     * ```\n     * $hmacKey->update('INACTIVE');\n     * ```\n     *\n     * @param string $state The key state. Either `ACTIVE` or `INACTIVE`.\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request. **NOTE**: This option is\n     *           currently ignored by Cloud Storage.\n     * }\n     * @return array\n     */\n    public function update($state, array $options = [])\n    {\n        $this->info = $this->connection->updateHmacKey([\n            'accessId' => $this->accessId,\n            'projectId' => $this->projectId,\n            'state' => $state\n        ] + $options);\n\n        return $this->info;\n    }\n\n    /**\n     * Delete the HMAC Key.\n     *\n     * Key state must be set to `INACTIVE` prior to deletion. See\n     * {@see HmacKey::update()} for details.\n     *\n     * Example:\n     * ```\n     * $hmacKey->delete();\n     * ```\n     *\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request. **NOTE**: This option is\n     *           currently ignored by Cloud Storage.\n     * }\n     * @return void\n     */\n    public function delete(array $options = [])\n    {\n        $this->connection->deleteHmacKey([\n            'accessId' => $this->accessId,\n            'projectId' => $this->projectId,\n        ] + $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Lifecycle.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\Timestamp;\n\n/**\n * Object Lifecycle Management supports common use cases like setting a Time to\n * Live (TTL) for objects, archiving older versions of objects, or \"downgrading\"\n * storage classes of objects to help manage costs.\n *\n * This builder does not execute any network requests and is intended to be used\n * in combination with either\n * {@see StorageClient::createBucket()}\n * or {@see Bucket::update()}.\n *\n * Example:\n * ```\n * // Access a builder preconfigured with rules already existing on a given\n * // bucket.\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n * $bucket = $storage->bucket('my-bucket');\n * $lifecycle = $bucket->currentLifecycle();\n * ```\n *\n * ```\n * // Or get a fresh builder by using the static factory method.\n * use Google\\Cloud\\Storage\\Bucket;\n *\n * $lifecycle = Bucket::lifecycle();\n * ```\n *\n * @see https://cloud.google.com/storage/docs/lifecycle Object Lifecycle Management API Documentation\n */\nclass Lifecycle implements \\ArrayAccess, \\IteratorAggregate\n{\n    /**\n     * @var array\n     */\n    private $lifecycle;\n\n    /**\n     * @param array $lifecycle [optional] A lifecycle configuration. Please see\n     *        [here](https://cloud.google.com/storage/docs/json_api/v1/buckets#lifecycle)\n     *        for the expected structure.\n     */\n    public function __construct(array $lifecycle = [])\n    {\n        $this->lifecycle = $lifecycle;\n    }\n\n    /**\n     * Adds an Object Lifecycle Delete Rule.\n     *\n     * Example:\n     * ```\n     * $lifecycle->addDeleteRule([\n     *     'age' => 50,\n     *     'isLive' => true\n     * ]);\n     * ```\n     *\n     * @param array $condition {\n     *     The condition(s) where the rule will apply.\n     *\n     *     @type int $age Age of an object (in days). This condition is\n     *           satisfied when an object reaches the specified age.\n     *     @type \\DateTimeInterface|string $createdBefore This condition is\n     *           satisfied when an object is created before midnight of the\n     *           specified date in UTC. If a string is given, it must be a date\n     *           in RFC 3339 format with only the date part (for instance,\n     *           \"2013-01-15\").\n     *     @type \\DateTimeInterface|string $customTimeBefore This condition is\n     *           satisfied when the custom time on an object is before this date\n     *           in UTC. If a string is given, it must be a date in RFC 3339\n     *           format with only the date part (for instance, \"2013-01-15\").\n     *     @type int $daysSinceCustomTime Number of days elapsed since the\n     *           user-specified timestamp set on an object. The condition is\n     *           satisfied if the days elapsed is at least this number. If no\n     *           custom timestamp is specified on an object, the condition does\n     *           not apply.\n     *     @type int $daysSinceNoncurrentTime Number of days elapsed since the\n     *           noncurrent timestamp of an object. The condition is satisfied\n     *           if the days elapsed is at least this number. This condition is\n     *           relevant only for versioned objects. The value of the field\n     *           must be a nonnegative integer. If it's zero, the object version\n     *           will become eligible for Lifecycle action as soon as it becomes\n     *           noncurrent.\n     *     @type bool $isLive Relevant only for versioned objects. If the value\n     *           is `true`, this condition matches live objects; if the value is\n     *           `false`, it matches archived objects.\n     *     @type string[] $matchesStorageClass Objects having any of the storage\n     *           classes specified by this condition will be matched. Values\n     *           include `\"MULTI_REGIONAL\"`, `\"REGIONAL\"`, `\"NEARLINE\"`,\n     *           `\"ARCHIVE\"`, `\"COLDLINE\"`, `\"STANDARD\"`, and\n     *           `\"DURABLE_REDUCED_AVAILABILITY\"`.\n     *     @type \\DateTimeInterface|string $noncurrentTimeBefore This condition\n     *           is satisfied when the noncurrent time on an object is before\n     *           this timestamp. This condition is relevant only for versioned\n     *           objects. If a string is given, it must be a date in RFC 3339\n     *           format with only the date part (for instance, \"2013-01-15\").\n     *     @type int $numNewerVersions Relevant only for versioned objects. If\n     *           the value is N, this condition is satisfied when there are at\n     *           least N versions (including the live version) newer than this\n     *           version of the object.\n     *     @type string[] $matchesPrefix Objects having names which start with\n     *           values specified by this condition will be matched.\n     *     @type string[] $matchesSuffix Objects having names which end with\n     *           values specified by this condition will be matched.\n     * }\n     * @return Lifecycle\n     */\n    public function addDeleteRule(array $condition)\n    {\n        $this->lifecycle['rule'][] = [\n            'action' => [\n                'type' => 'Delete'\n            ],\n            'condition' => $this->formatCondition($condition)\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Adds a AbortIncompleteMultipartUpload lifecycle rule to Object Lifecycle.\n     *\n     * Example:\n     * ```\n     * $lifecycle->addAbortIncompleteMultipartUploadRule([\n     *     'age' => 50,\n     *     'isLive' => true\n     * ]);\n     * ```\n     *\n     * @param array $condition {\n     *     The condition(s) where the rule will apply.\n     *\n     *     @type int $age Age of an object (in days). This condition is\n     *           satisfied when an object reaches the specified age.\n     *     @type \\DateTimeInterface|string $createdBefore This condition is\n     *           satisfied when an object is created before midnight of the\n     *           specified date in UTC. If a string is given, it must be a date\n     *           in RFC 3339 format with only the date part (for instance,\n     *           \"2013-01-15\").\n     *     @type \\DateTimeInterface|string $customTimeBefore This condition is\n     *           satisfied when the custom time on an object is before this date\n     *           in UTC. If a string is given, it must be a date in RFC 3339\n     *           format with only the date part (for instance, \"2013-01-15\").\n     *     @type int $daysSinceCustomTime Number of days elapsed since the\n     *           user-specified timestamp set on an object. The condition is\n     *           satisfied if the days elapsed is at least this number. If no\n     *           custom timestamp is specified on an object, the condition does\n     *           not apply.\n     *     @type int $daysSinceNoncurrentTime Number of days elapsed since the\n     *           noncurrent timestamp of an object. The condition is satisfied\n     *           if the days elapsed is at least this number. This condition is\n     *           relevant only for versioned objects. The value of the field\n     *           must be a nonnegative integer. If it's zero, the object version\n     *           will become eligible for Lifecycle action as soon as it becomes\n     *           noncurrent.\n     *     @type bool $isLive Relevant only for versioned objects. If the value\n     *           is `true`, this condition matches live objects; if the value is\n     *           `false`, it matches archived objects.\n     *     @type string[] $matchesStorageClass Objects having any of the storage\n     *           classes specified by this condition will be matched. Values\n     *           include `\"MULTI_REGIONAL\"`, `\"REGIONAL\"`, `\"NEARLINE\"`,\n     *           `\"ARCHIVE\"`, `\"COLDLINE\"`, `\"STANDARD\"`, and\n     *           `\"DURABLE_REDUCED_AVAILABILITY\"`.\n     *     @type \\DateTimeInterface|string $noncurrentTimeBefore This condition\n     *           is satisfied when the noncurrent time on an object is before\n     *           this timestamp. This condition is relevant only for versioned\n     *           objects. If a string is given, it must be a date in RFC 3339\n     *           format with only the date part (for instance, \"2013-01-15\").\n     *     @type int $numNewerVersions Relevant only for versioned objects. If\n     *           the value is N, this condition is satisfied when there are at\n     *           least N versions (including the live version) newer than this\n     *           version of the object.\n     *     @type string[] $matchesPrefix Objects having names which start with\n     *           values specified by this condition will be matched.\n     *     @type string[] $matchesSuffix Objects having names which end with\n     *           values specified by this condition will be matched.\n     * }\n     * @return Lifecycle\n     */\n    public function addAbortIncompleteMultipartUploadRule(array $condition)\n    {\n        $this->lifecycle['rule'][] = [\n            'action' => [\n                'type' => 'AbortIncompleteMultipartUpload'\n            ],\n            'condition' => $this->formatCondition($condition)\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Adds an Object Lifecycle Set Storage Class Rule.\n     *\n     * Example:\n     * ```\n     * $lifecycle->addSetStorageClassRule('COLDLINE', [\n     *     'age' => 50,\n     *     'isLive' => true\n     * ]);\n     * ```\n     *\n     * ```\n     * // Using customTimeBefore rule with an object's custom time setting.\n     * $lifecycle->addSetStorageClassRule('NEARLINE', [\n     *     'customTimeBefore' => (new \\DateTime())->add(\n     *         \\DateInterval::createFromDateString('+10 days')\n     *     )\n     * ]);\n     *\n     * $bucket->update(['lifecycle' => $lifecycle]);\n     *\n     * $object = $bucket->object($objectName);\n     * $object->update([\n     *     'metadata' => [\n     *         'customTime' => '2020-08-17'\n     *     ]\n     * ]);\n     * ```\n     *\n     * @param string $storageClass The target storage class. Values include\n     *        `\"MULTI_REGIONAL\"`, `\"REGIONAL\"`, `\"NEARLINE\"`, `\"COLDLINE\"`,\n     *        `\"STANDARD\"`, and `\"DURABLE_REDUCED_AVAILABILITY\"`.\n     * @param array $condition {\n     *     The condition(s) where the rule will apply.\n     *\n     *     @type int $age Age of an object (in days). This condition is\n     *           satisfied when an object reaches the specified age.\n     *     @type \\DateTimeInterface|string $createdBefore This condition is\n     *           satisfied when an object is created before midnight of the\n     *           specified date in UTC. If a string is given, it must be a date\n     *           in RFC 3339 format with only the date part (for instance,\n     *           \"2013-01-15\").\n     *     @type \\DateTimeInterface|string $customTimeBefore This condition is\n     *           satisfied when the custom time on an object is before this date\n     *           in UTC. If a string is given, it must be a date in RFC 3339\n     *           format with only the date part (for instance, \"2013-01-15\").\n     *     @type int $daysSinceCustomTime Number of days elapsed since the\n     *           user-specified timestamp set on an object. The condition is\n     *           satisfied if the days elapsed is at least this number. If no\n     *           custom timestamp is specified on an object, the condition does\n     *           not apply.\n     *     @type int $daysSinceNoncurrentTime Number of days elapsed since the\n     *           noncurrent timestamp of an object. The condition is satisfied\n     *           if the days elapsed is at least this number. This condition is\n     *           relevant only for versioned objects. The value of the field\n     *           must be a nonnegative integer. If it's zero, the object version\n     *           will become eligible for Lifecycle action as soon as it becomes\n     *           noncurrent.\n     *     @type bool $isLive Relevant only for versioned objects. If the value\n     *           is `true`, this condition matches live objects; if the value is\n     *           `false`, it matches archived objects.\n     *     @type string[] $matchesStorageClass Objects having any of the storage\n     *           classes specified by this condition will be matched. Values\n     *           include `\"MULTI_REGIONAL\"`, `\"REGIONAL\"`, `\"NEARLINE\"`,\n     *           `\"ARCHIVE\"`, `\"COLDLINE\"`, `\"STANDARD\"`, and\n     *           `\"DURABLE_REDUCED_AVAILABILITY\"`.\n     *     @type \\DateTimeInterface|string $noncurrentTimeBefore This condition\n     *           is satisfied when the noncurrent time on an object is before\n     *           this timestamp. This condition is relevant only for versioned\n     *           objects. If a string is given, it must be a date in RFC 3339\n     *           format with only the date part (for instance, \"2013-01-15\").\n     *     @type int $numNewerVersions Relevant only for versioned objects. If\n     *           the value is N, this condition is satisfied when there are at\n     *           least N versions (including the live version) newer than this\n     *           version of the object.\n     *     @type string[] $matchesPrefix Objects having names which start with\n     *           values specified by this condition will be matched.\n     *     @type string[] $matchesSuffix Objects having names which end with\n     *           values specified by this condition will be matched.\n     * }\n     * @return Lifecycle\n     */\n    public function addSetStorageClassRule($storageClass, array $condition)\n    {\n        $this->lifecycle['rule'][] = [\n            'action' => [\n                'type' => 'SetStorageClass',\n                'storageClass' => $storageClass\n            ],\n            'condition' => $this->formatCondition($condition)\n        ];\n\n        return $this;\n    }\n\n    /**\n     * Clear all Object Lifecycle rules or rules of a certain action type.\n     *\n     * Example:\n     * ```\n     * // Remove all rules.\n     * $lifecycle->clearRules();\n     * ```\n     *\n     * ```\n     * // Remove all \"Delete\" based rules.\n     * $lifecycle->clearRules('Delete');\n     * ```\n     *\n     * ```\n     * // Clear any rules which have an age equal to 50.\n     * $lifecycle->clearRules(function (array $rule) {\n     *     return $rule['condition']['age'] === 50\n     *         ? false\n     *         : true;\n     * });\n     * ```\n     *\n     * @param string|callable $action [optional] If a string is provided, it\n     *        must be the name of the type of rule to remove (`SetStorageClass`\n     *        or `Delete`). All rules of this type will then be cleared. When\n     *        providing a callable you may define a custom route for how you\n     *        would like to remove rules. The provided callable will be run\n     *        through\n     *        [array_filter](http://php.net/manual/en/function.array-filter.php).\n     *        The callable's argument will be a single lifecycle rule as an\n     *        associative array. When returning true from the callable the rule\n     *        will be preserved, and if false it will be removed.\n     *        **Defaults to** `null`, clearing all assigned rules.\n     * @return Lifecycle\n     * @throws \\InvalidArgumentException If a type other than a string or\n     *         callabe is provided.\n     */\n    public function clearRules($action = null)\n    {\n        if (!$action) {\n            $this->lifecycle = [];\n            return $this;\n        }\n\n        if (!is_string($action) && !is_callable($action)) {\n            throw new \\InvalidArgumentException(\n                sprintf(\n                    'Expected either a string or callable, instead got \\'%s\\'.',\n                    gettype($action)\n                )\n            );\n        }\n\n        if (isset($this->lifecycle['rule'])) {\n            if (is_string($action)) {\n                $action = function ($rule) use ($action) {\n                    return $rule['action']['type'] !== $action;\n                };\n            }\n\n            $this->lifecycle['rule'] = array_filter(\n                $this->lifecycle['rule'],\n                $action\n            );\n\n            if (!$this->lifecycle['rule']) {\n                $this->lifecycle = [];\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * @access private\n     * @return \\Generator\n     */\n    #[\\ReturnTypeWillChange]\n    public function getIterator()\n    {\n        if (!isset($this->lifecycle['rule'])) {\n            return;\n        }\n\n        foreach ($this->lifecycle['rule'] as $rule) {\n            yield $rule;\n        }\n    }\n\n    /**\n     * @access private\n     * @return array\n     */\n    public function toArray()\n    {\n        return $this->lifecycle;\n    }\n\n    /**\n     * @access private\n     * @param string $offset\n     * @param mixed $value\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetSet($offset, $value)\n    {\n        $this->lifecycle['rule'][$offset] = $value;\n    }\n\n    /**\n     * @access private\n     * @param string $offset\n     * @return bool\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetExists($offset)\n    {\n        return isset($this->lifecycle['rule'][$offset]);\n    }\n\n    /**\n     * @access private\n     * @param string $offset\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetUnset($offset)\n    {\n        unset($this->lifecycle['rule'][$offset]);\n    }\n\n    /**\n     * @access private\n     * @param string $offset\n     * @return mixed\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetGet($offset)\n    {\n        return isset($this->lifecycle['rule'][$offset])\n            ? $this->lifecycle['rule'][$offset]\n            : null;\n    }\n\n    /**\n     * Apply condition-specific formatting rules (such as date formatting) to\n     * conditions.\n     *\n     * @param array $condition\n     * @return array\n     */\n    private function formatCondition(array $condition)\n    {\n        $rfc339DateFields = [\n            'createdBefore',\n            'customTimeBefore',\n            'noncurrentTimeBefore'\n        ];\n\n        foreach ($rfc339DateFields as $field) {\n            if (isset($condition[$field]) && $condition[$field] instanceof \\DateTimeInterface) {\n                $condition[$field] = $condition[$field]->format('Y-m-d');\n            }\n        }\n\n        return $condition;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/Notification.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\ArrayTrait;\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\n\n/**\n * Cloud Pub/Sub Notifications sends information about changes to objects in\n * your buckets to Google Cloud Pub/Sub, where the information is added to a\n * Cloud Pub/Sub topic of your choice in the form of messages. For example,\n * you can track objects that are created and deleted in your bucket. Each\n * notification contains information describing both the event that triggered it\n * and the object that changed.\n *\n * To utilize this class and see more examples, please see the relevant\n * notifications based methods exposed on {@see Bucket}.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n *\n * // Fetch an existing notification by ID.\n * $bucket = $storage->bucket('my-bucket');\n * $notification = $bucket->notification('2482');\n * ```\n *\n * @see https://cloud.google.com/storage/docs/pubsub-notifications\n * @experimental The experimental flag means that while we believe this method\n *      or class is ready for use, it may change before release in backwards-\n *      incompatible ways. Please use with caution, and test thoroughly when\n *      upgrading.\n */\nclass Notification\n{\n    use ArrayTrait;\n\n    /**\n     * @var ConnectionInterface Represents a connection to Cloud Storage.\n     * @internal\n     */\n    private $connection;\n\n    /**\n     * @var array The notification's identity.\n     */\n    private $identity;\n\n    /**\n     * @var array The notification's metadata.\n     */\n    private $info;\n\n    /**\n     * @param ConnectionInterface $connection Represents a connection to Cloud\n     *        Storage. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param string $id The notification's ID.\n     * @param string $bucket The name of the bucket associated with this\n     *        notification.\n     * @param array $info [optional] The notification's metadata.\n     */\n    public function __construct(ConnectionInterface $connection, $id, $bucket, array $info = [])\n    {\n        $this->connection = $connection;\n        $this->identity = [\n            'bucket' => $bucket,\n            'notification' => $id,\n            'userProject' => $this->pluck('requesterProjectId', $info, false)\n        ];\n        $this->info = $info;\n    }\n\n    /**\n     * Check whether or not the notification exists.\n     *\n     * Example:\n     * ```\n     * if ($notification->exists()) {\n     *     echo 'Notification exists!';\n     * }\n     * ```\n     * @param array $options [optional] {\n     *     Configuration options.\n     * }\n     * @return bool\n     */\n    public function exists(array $options = [])\n    {\n        try {\n            $this->connection->getNotification($options + $this->identity + ['fields' => 'id']);\n        } catch (NotFoundException $ex) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Delete the notification.\n     *\n     * Example:\n     * ```\n     * $notification->delete();\n     * ```\n     *\n     * @codingStandardsIgnoreStart\n     * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/delete Notifications delete API documentation.\n     * @codingStandardsIgnoreEnd\n     *\n     * @param array $options [optional]\n     * @return void\n     */\n    public function delete(array $options = [])\n    {\n        $this->connection->deleteNotification($options + $this->identity);\n    }\n\n    /**\n     * Retrieves the notification's details. If no notification data is cached a\n     * network request will be made to retrieve it.\n     *\n     * Example:\n     * ```\n     * $info = $notification->info();\n     * echo $info['topic'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/get Notifications get API documentation.\n     *\n     * @param array $options [optional]\n     * @return array\n     */\n    public function info(array $options = [])\n    {\n        return $this->info ?: $this->reload($options);\n    }\n\n    /**\n     * Triggers a network request to reload the notification's details.\n     *\n     * Example:\n     * ```\n     * $notification->reload();\n     * $info = $notification->info();\n     * echo $info['topic'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/get Notifications get API documentation.\n     *\n     * @param array $options [optional]\n     * @return array\n     */\n    public function reload(array $options = [])\n    {\n        return $this->info = $this->connection->getNotification(\n            $options + $this->identity\n        );\n    }\n\n    /**\n     * Retrieves the notification's ID.\n     *\n     * Example:\n     * ```\n     * echo $notification->id();\n     * ```\n     *\n     * @return string\n     */\n    public function id()\n    {\n        return $this->identity['notification'];\n    }\n\n    /**\n     * Retrieves the notification's identity.\n     *\n     * Example:\n     * ```\n     * echo $notification->identity()['bucket'];\n     * ```\n     *\n     * @return array\n     */\n    public function identity()\n    {\n        return $this->identity;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/ObjectIterator.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\Iterator\\ItemIteratorTrait;\n\n/**\n * ObjectIterator\n *\n * Iterates over a set of {@see StorageObject} items.\n *\n * @implements \\Iterator<int, StorageObject>\n */\nclass ObjectIterator implements \\Iterator\n{\n    use ItemIteratorTrait;\n\n    /**\n     * Gets a list of prefixes of objects matching-but-not-listed up to and\n     * including the requested delimiter.\n     *\n     * @return array\n     */\n    public function prefixes()\n    {\n        return method_exists($this->pageIterator, 'prefixes')\n            ? $this->pageIterator->prefixes()\n            : [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/ObjectPageIterator.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\Iterator\\PageIteratorTrait;\n\n/**\n * ObjectPageIterator\n *\n * Iterates over a set of pages containing\n * {@see StorageObject} items.\n */\nclass ObjectPageIterator implements \\Iterator\n{\n    use PageIteratorTrait;\n\n    /**\n     * @var array\n     */\n    private $prefixes = [];\n\n    /**\n     * Gets a list of prefixes of objects matching-but-not-listed up to and\n     * including the requested delimiter.\n     *\n     * @return array\n     */\n    public function prefixes()\n    {\n        return $this->prefixes;\n    }\n\n    /**\n     * Get the current page.\n     *\n     * @return array|null\n     */\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        if (!$this->page) {\n            $this->page = $this->executeCall();\n        }\n\n        if (isset($this->page['prefixes'])) {\n            $this->updatePrefixes();\n        }\n\n        return $this->get($this->itemsPath, $this->page);\n    }\n\n    /**\n     * Add new prefixes to the list.\n     *\n     * @return void\n     */\n    private function updatePrefixes()\n    {\n        foreach ($this->page['prefixes'] as $prefix) {\n            if (!in_array($prefix, $this->prefixes)) {\n                $this->prefixes[] = $prefix;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/ReadStream.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse GuzzleHttp\\Psr7\\StreamDecoratorTrait;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * A Stream implementation that wraps a GuzzleHttp download stream to\n * provide `getSize()` from the response headers.\n */\nclass ReadStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    private $stream;\n\n    /**\n     * Create a new ReadStream.\n     *\n     * @param StreamInterface $stream The stream interface to wrap\n     */\n    public function __construct(StreamInterface $stream)\n    {\n        $this->stream = $stream;\n    }\n\n    /**\n     * Return the full size of the buffer. If the underlying stream does\n     * not report it's size, try to fetch the size from the Content-Length\n     * response header.\n     *\n     * @return int The size of the stream.\n     */\n    public function getSize(): ?int\n    {\n        return $this->stream->getSize() ?: $this->getSizeFromMetadata();\n    }\n\n    /**\n     * Attempt to fetch the size from the Content-Length response header.\n     * If we cannot, return 0.\n     *\n     * @return int The Size of the stream\n     */\n    private function getSizeFromMetadata(): int\n    {\n        foreach ($this->stream->getMetadata('wrapper_data') as $value) {\n            if (substr($value, 0, 15) == 'Content-Length:') {\n                return (int) substr($value, 16);\n            }\n        }\n        return 0;\n    }\n\n    /**\n     * Read bytes from the underlying buffer, retrying until we have read\n     * enough bytes or we cannot read any more. We do this because the\n     * internal C code for filling a buffer does not account for when\n     * we try to read large chunks from a user-land stream that does not\n     * return enough bytes.\n     *\n     * @param  int $length The number of bytes to read.\n     * @return string Read bytes from the underlying stream.\n     */\n    public function read($length): string\n    {\n        $data = '';\n        do {\n            $moreData = $this->stream->read($length);\n            $data .= $moreData;\n            $readLength = strlen($moreData);\n            $length -= $readLength;\n        } while ($length > 0 && $readLength > 0);\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/SigningHelper.php",
    "content": "<?php\n/**\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\SignBlobInterface;\nuse Google\\Cloud\\Core\\ArrayTrait;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse Google\\Cloud\\Core\\JsonTrait;\nuse Google\\Cloud\\Core\\Timestamp;\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\nuse Google\\Cloud\\Storage\\Connection\\RetryTrait;\n\n/**\n * Provides common methods for signing storage URLs.\n *\n * @internal\n */\nclass SigningHelper\n{\n    use ArrayTrait;\n    use JsonTrait;\n    use RetryTrait;\n\n    const DEFAULT_URL_SIGNING_VERSION = 'v2';\n    const DEFAULT_DOWNLOAD_HOST = 'storage.googleapis.com';\n\n    const V4_ALGO_NAME = 'GOOG4-RSA-SHA256';\n    const V4_TIMESTAMP_FORMAT = 'Ymd\\THis\\Z';\n    const V4_DATESTAMP_FORMAT = 'Ymd';\n    const MAX_RETRIES = 5;\n\n    /**\n     * Create or fetch a SigningHelper instance.\n     *\n     * @return SigningHelper\n     */\n    public static function getHelper()\n    {\n        static $helper;\n        if (!$helper) {\n            $helper = new static();\n        }\n\n        return $helper;\n    }\n\n    /**\n     * Sign using the version inferred from `$options.version`.\n     *\n     * @param ConnectionInterface $connection A connection to the Cloud Storage\n     *        API. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param Timestamp|\\DateTimeInterface|int $expires The signed URL\n     *        expiration.\n     * @param string $resource The URI to the storage resource, preceded by a\n     *        leading slash.\n     * @param int|null $generation The resource generation.\n     * @param array $options Configuration options. See\n     *        {@see StorageObject::signedUrl()} for\n     *        details.\n     * @return string\n     * @throws \\InvalidArgumentException\n     * @throws \\RuntimeException If required data could not be gathered from\n     *        credentials.\n     * @throws \\RuntimeException If OpenSSL signing is required by user input\n     *        and OpenSSL is not available.\n     */\n    public function sign(ConnectionInterface $connection, $expires, $resource, $generation, array $options)\n    {\n        $version = $options['version'] ?? self::DEFAULT_URL_SIGNING_VERSION;\n\n        unset($options['version']);\n\n        switch (strtolower($version)) {\n            case 'v2':\n                $method = 'v2Sign';\n                break;\n\n            case 'v4':\n                $method = 'v4Sign';\n                break;\n\n            default:\n                throw new \\InvalidArgumentException('Invalid signing version.');\n        }\n\n        return call_user_func_array([$this, $method], [\n            $connection,\n            $expires,\n            $resource,\n            $generation,\n            $options\n        ]);\n    }\n\n    /**\n     * Sign a URL using Google Signed URLs v2.\n     *\n     * This method will be deprecated in the future.\n     *\n     * @param ConnectionInterface $connection A connection to the Cloud Storage\n     *        API. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param Timestamp|\\DateTimeInterface|int $expires The signed URL\n     *        expiration.\n     * @param string $resource The URI to the storage resource, preceded by a\n     *        leading slash.\n     * @param int|null $generation The resource generation.\n     * @param array $options Configuration options. See\n     *        {@see StorageObject::signedUrl()} for\n     *        details.\n     * @return string\n     * @throws \\InvalidArgumentException\n     * @throws \\RuntimeException If required data could not be gathered from\n     *        credentials.\n     * @throws \\RuntimeException If OpenSSL signing is required by user input\n     *        and OpenSSL is not available.\n     */\n    public function v2Sign(ConnectionInterface $connection, $expires, $resource, $generation, array $options)\n    {\n        list($credentials, $options) = $this->getSigningCredentials($connection, $options);\n\n        $expires = $this->normalizeExpiration($expires);\n        list($resource, $bucket) = $this->normalizeResource($resource);\n        $options = $this->normalizeOptions($options);\n        $headers = $this->normalizeHeaders($options['headers']);\n\n        if ($options['virtualHostedStyle']) {\n            $options['bucketBoundHostname'] = sprintf(\n                '%s.storage.googleapis.com',\n                $bucket\n            );\n        }\n\n        // Make sure disallowed headers are not included.\n        $illegalHeaders = [\n            'x-goog-encryption-key',\n            'x-goog-encryption-key-sha256'\n        ];\n        if ($illegal = array_intersect_key(array_flip($illegalHeaders), $headers)) {\n            throw new \\InvalidArgumentException(sprintf(\n                '%s %s not allowed in Signed URL headers.',\n                implode(' and ', array_keys($illegal)),\n                count($illegal) === 1 ? 'is' : 'are'\n            ));\n        }\n\n        // Sort headers by name.\n        ksort($headers);\n\n        $toSign = [\n            $options['method'],\n            $options['contentMd5'],\n            $options['contentType'],\n            $expires,\n        ];\n\n        $signedHeaders = [];\n        foreach ($headers as $name => $value) {\n            $signedHeaders[] = $name . ':' . $value;\n        }\n\n        // Push the headers onto the end of the signing string.\n        if ($signedHeaders) {\n            $toSign = array_merge($toSign, $signedHeaders);\n        }\n\n        $toSign[] = $resource;\n\n        $stringToSign = $this->createV2CanonicalRequest($toSign);\n\n        // Use exponential backOff\n        $signature = $this->retrySignBlob(fn () => $credentials->signBlob($stringToSign, [\n            'forceOpenssl' => $options['forceOpenssl']\n        ]));\n\n        // Start with user-provided query params and add required parameters.\n        $params = $options['queryParams'];\n        $params['GoogleAccessId'] = $credentials->getClientName();\n        $params['Expires'] = $expires;\n        $params['Signature'] = $signature;\n\n        // urlencode parameter values\n        foreach ($params as &$value) {\n            $value = rawurlencode($value ?? '');\n        }\n\n        $params = $this->addCommonParams($generation, $params, $options);\n\n        $queryString = $this->buildQueryString($params);\n\n        $resource = $this->normalizeUriPath($options['bucketBoundHostname'], $resource);\n        return 'https://' . $options['bucketBoundHostname'] . $resource . '?' . $queryString;\n    }\n\n    /**\n     * Sign a storage URL using Google Signed URLs v4.\n     *\n     * @param ConnectionInterface $connection A connection to the Cloud Storage\n     *        API. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param Timestamp|\\DateTimeInterface|int $expires The signed URL\n     *        expiration.\n     * @param string $resource The URI to the storage resource, preceded by a\n     *        leading slash.\n     * @param int|null $generation The resource generation.\n     * @param array $options Configuration options. See\n     *        {@see StorageObject::signedUrl()} for\n     *        details.\n     * @return string\n     * @throws \\InvalidArgumentException\n     * @throws \\RuntimeException If required data could not be gathered from\n     *        credentials.\n     * @throws \\RuntimeException If OpenSSL signing is required by user input\n     *        and OpenSSL is not available.\n     */\n    public function v4Sign(ConnectionInterface $connection, $expires, $resource, $generation, array $options)\n    {\n        list($credentials, $options) = $this->getSigningCredentials($connection, $options);\n\n        $expires = $this->normalizeExpiration($expires);\n        list($resource, $bucket) = $this->normalizeResource($resource);\n        $options = $this->normalizeOptions($options);\n\n        $time = $options['timestamp'];\n        $requestTimestamp = $time->format(self::V4_TIMESTAMP_FORMAT);\n        $requestDatestamp = $time->format(self::V4_DATESTAMP_FORMAT);\n        $timeSeconds = $time->format('U');\n\n        $expireLimit = $timeSeconds + 604800;\n        if ($expires > $expireLimit) {\n            throw new \\InvalidArgumentException(\n                'V4 Signed URLs may not have an expiration greater than seven days in the future.'\n            );\n        }\n\n        $clientEmail = $credentials->getClientName();\n        $credentialScope = sprintf('%s/auto/storage/goog4_request', $requestDatestamp);\n        $credential = sprintf('%s/%s', $clientEmail, $credentialScope);\n\n        if ($options['virtualHostedStyle']) {\n            $options['bucketBoundHostname'] = sprintf(\n                '%s.storage.googleapis.com',\n                $bucket\n            );\n        }\n\n        // Add headers and query params based on provided options.\n        $params = $options['queryParams'];\n        $headers = $options['headers'] + [\n            'host' => $options['bucketBoundHostname']\n        ];\n\n        if ($options['contentType']) {\n            $headers['content-type'] = $options['contentType'];\n        }\n\n        if ($options['contentMd5']) {\n            $headers['content-md5'] = $options['contentMd5'];\n        }\n\n        $params = $this->addCommonParams($generation, $params, $options);\n\n        $headers = $this->normalizeHeaders($headers);\n\n        // sort headers by name\n        ksort($headers, SORT_NATURAL | SORT_FLAG_CASE);\n\n        // Canonical headers are a list, newline separated, of keys and values,\n        // comma separated.\n        // Signed headers are a list of keys, separated by a semicolon.\n        $canonicalHeaders = [];\n        $signedHeaders = [];\n        foreach ($headers as $key => $val) {\n            $canonicalHeaders[] = sprintf('%s:%s', $key, $val);\n            $signedHeaders[] = $key;\n        }\n        $canonicalHeaders = implode(\"\\n\", $canonicalHeaders) . \"\\n\";\n\n        $signedHeaders = implode(';', $signedHeaders);\n\n        // Add required query parameters.\n        $params  = [\n            'X-Goog-Algorithm' => self::V4_ALGO_NAME,\n            'X-Goog-Credential' => $credential,\n            'X-Goog-Date' => $requestTimestamp,\n            'X-Goog-Expires' => $expires - $timeSeconds,\n            'X-Goog-SignedHeaders' => $signedHeaders,\n        ] + $params;\n\n        $paramNames = [];\n        foreach ($params as $key => $val) {\n            $paramNames[] = $key;\n        }\n\n        sort($paramNames, SORT_REGULAR);\n\n        $sortedParams = [];\n        foreach ($paramNames as $name) {\n            $sortedParams[rawurlencode($name)] = rawurlencode($params[$name]);\n        }\n\n        $canonicalQueryString = $this->buildQueryString($sortedParams);\n        $canonicalResource = $this->normalizeCanonicalRequestResource(\n            $resource,\n            $options['bucketBoundHostname'],\n            $options['virtualHostedStyle']\n        );\n\n        $canonicalRequest = [\n            $options['method'],\n            $canonicalResource,\n            $canonicalQueryString,\n            $canonicalHeaders,\n            $signedHeaders,\n            $this->getPayloadHash($headers)\n        ];\n\n        $requestHash = $this->createV4CanonicalRequest($canonicalRequest);\n\n        // Construct the string to sign.\n        $stringToSign = implode(\"\\n\", [\n            self::V4_ALGO_NAME,\n            $requestTimestamp,\n            $credentialScope,\n            $requestHash\n        ]);\n\n        $signature = bin2hex(base64_decode($this->retrySignBlob(\n            fn () => $credentials->signBlob($stringToSign, [\n                'forceOpenssl' => $options['forceOpenssl']\n            ])\n        ) ?? ''));\n\n        // Construct the modified resource name. If a custom hostname is provided,\n        // this will remove the bucket name from the resource.\n        $resource = $this->normalizeUriPath($options['bucketBoundHostname'], $resource);\n\n        $scheme = $this->chooseScheme(\n            $options['scheme'],\n            $options['bucketBoundHostname'],\n            $options['virtualHostedStyle']\n        );\n\n        return sprintf(\n            '%s://%s%s?%s&X-Goog-Signature=%s',\n            $scheme,\n            $options['bucketBoundHostname'],\n            $resource,\n            $canonicalQueryString,\n            $signature\n        );\n    }\n\n    /**\n     * Create an HTTP POST policy using v4 signing.\n     *\n     * @param ConnectionInterface $connection A Connection to Google Cloud Storage.\n     *        This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param Timestamp|\\DateTimeInterface|int $expires The signed URL\n     *        expiration.\n     * @param string $resource The URI to the storage resource, preceded by a\n     *        leading slash.\n     * @param array $options Configuration options. See\n     *        {@see Bucket::generateSignedPostPolicyV4()} for details.\n     * @return array An associative array, containing (string) `uri` and\n     *        (array) `fields` keys.\n     */\n    public function v4PostPolicy(\n        ConnectionInterface $connection,\n        $expires,\n        $resource,\n        array $options = []\n    ) {\n        list($credentials, $options) = $this->getSigningCredentials($connection, $options);\n\n        $expires = $this->normalizeExpiration($expires);\n        list($resource, $bucket, $object) = $this->normalizeResource($resource, false);\n        $object = trim($object, '/');\n\n        $options = $this->normalizeOptions($options) + [\n            'fields' => [],\n            'conditions' => [],\n            'successActionRedirect' => null,\n            'successActionStatus' => null\n        ];\n\n        $time = $options['timestamp'];\n        $requestTimestamp = $time->format(self::V4_TIMESTAMP_FORMAT);\n        $requestDatestamp = $time->format(self::V4_DATESTAMP_FORMAT);\n        $expiration = \\DateTimeImmutable::createFromFormat('U', (string) $expires);\n        $expirationTimestamp = str_replace(\n            '+00:00',\n            'Z',\n            $expiration->format(\\DateTime::RFC3339)\n        );\n\n        $clientEmail = $credentials->getClientName();\n        $credentialScope = sprintf('%s/auto/storage/goog4_request', $requestDatestamp);\n        $credential = sprintf('%s/%s', $clientEmail, $credentialScope);\n\n        if ($options['virtualHostedStyle']) {\n            $options['bucketBoundHostname'] = sprintf(\n                '%s.storage.googleapis.com',\n                $bucket\n            );\n        }\n\n        $fields = array_merge($options['fields'], [\n            'key' => $object,\n            'x-goog-algorithm' => self::V4_ALGO_NAME,\n            'x-goog-credential' => $credential,\n            'x-goog-date' => $requestTimestamp\n        ]);\n\n        $conditions = $options['conditions'];\n        foreach ($options['fields'] as $key => $value) {\n            $conditions[] = [$key => $value];\n        }\n\n        foreach ($conditions as $key => $value) {\n            $key = $key;\n            $value = $value;\n            $conditions[$key] = $value;\n        }\n\n        $conditions = array_merge($conditions, [\n            ['bucket' => $bucket],\n            ['key' => $object],\n            ['x-goog-date' => $requestTimestamp],\n            ['x-goog-credential' => $credential],\n            ['x-goog-algorithm' => self::V4_ALGO_NAME],\n        ]);\n\n        $policy = [\n            'conditions' => $conditions,\n            'expiration' => $expirationTimestamp\n        ];\n\n        $json = str_replace('\\\\\\u', '\\\\u', json_encode($policy, JSON_UNESCAPED_SLASHES));\n        $stringToSign = base64_encode($json);\n\n        $signature = bin2hex(base64_decode($credentials->signBlob($stringToSign, [\n            'forceOpenssl' => $options['forceOpenssl']\n        ])));\n\n        $fields['x-goog-signature'] = $signature;\n        $fields['policy'] = $stringToSign;\n\n        // Construct the modified resource name. If a custom hostname is provided,\n        // this will remove the bucket name from the resource.\n        $resource = $this->normalizeUriPath($options['bucketBoundHostname'], '/' . $bucket, true);\n\n        $scheme = $this->chooseScheme(\n            $options['scheme'],\n            $options['bucketBoundHostname'],\n            $options['virtualHostedStyle']\n        );\n\n        return [\n            'url' => sprintf(\n                '%s://%s%s',\n                $scheme,\n                $options['bucketBoundHostname'],\n                $resource\n            ),\n            'fields' => $fields\n        ];\n    }\n\n    /**\n     * Creates a canonical request hash for a V4 Signed URL.\n     *\n     * NOTE: While in most cases `PHP_EOL` is preferable to a system-specific\n     * character, in this case `\\n` is required.\n     *\n     * @param array $canonicalRequest The canonical request, with each element\n     *        representing a line in the request.\n     * @return string\n     */\n    private function createV4CanonicalRequest(array $canonicalRequest)\n    {\n        $canonicalRequestString = implode(\"\\n\", $canonicalRequest);\n        return bin2hex(hash('sha256', $canonicalRequestString, true));\n    }\n\n    /**\n     * Creates a canonical request for a V2 Signed URL.\n     *\n     * NOTE: While in most cases `PHP_EOL` is preferable to a system-specific\n     * character, in this case `\\n` is required.\n     *\n     * @param array $canonicalRequest The canonical request, with each element\n     *        representing a line in the request.\n     * @return string\n     */\n    private function createV2CanonicalRequest(array $canonicalRequest)\n    {\n        return implode(\"\\n\", $canonicalRequest);\n    }\n\n    /**\n     * Choose the correct URL scheme.\n     *\n     * @param string $scheme The scheme provided by the user or defaults.\n     * @param string $bucketBoundHostname The bucketBoundHostname provided by the user or defaults.\n     * @param bool $virtualHostedStyle Whether virtual host style is enabled.\n     * @return string\n     */\n    private function chooseScheme($scheme, $bucketBoundHostname, $virtualHostedStyle = false)\n    {\n        // bucketBoundHostname not used -- always https.\n        if ($bucketBoundHostname === self::DEFAULT_DOWNLOAD_HOST) {\n            return 'https';\n        }\n\n        // virtualHostedStyle enabled -- always https.\n        if ($virtualHostedStyle) {\n            return 'https';\n        }\n\n        // not virtual hosted style, and custom hostname -- use default (http) or user choice.\n        return $scheme;\n    }\n\n    /**\n     * If `X-Goog-Content-SHA256` header is provided, use that as the payload.\n     * Otherwise, `UNSIGNED-PAYLOAD`.\n     *\n     * @param array $headers\n     * @return string\n     */\n    private function getPayloadHash(array $headers)\n    {\n        if (!isset($headers['x-goog-content-sha256'])) {\n            return 'UNSIGNED-PAYLOAD';\n        }\n\n        return $headers['x-goog-content-sha256'];\n    }\n\n    /**\n     * Normalizes and validates an expiration.\n     *\n     * @param Timestamp|\\DateTimeInterface|int $expires The expiration\n     * @return int\n     * @throws \\InvalidArgumentException If an invalid value is given.\n     */\n    private function normalizeExpiration($expires)\n    {\n        if ($expires instanceof Timestamp) {\n            $seconds = $expires->get()->format('U');\n        } elseif ($expires instanceof \\DateTimeInterface) {\n            $seconds = $expires->format('U');\n        } elseif (is_numeric($expires)) {\n            $seconds = (int) $expires;\n        } else {\n            throw new \\InvalidArgumentException('Invalid expiration.');\n        }\n\n        return $seconds;\n    }\n\n    /**\n     * Normalizes and encodes the resource identifier.\n     *\n     * @param string $resource The resource identifier. In form\n     *        `[/]$bucket/$object`.\n     * @return array A list, where index 0 is the resource path, with pieces\n     *        encoded and prefixed with a forward slash, index 1 is the bucket\n     *        name, and index 2 is the object name, relative to the bucket.\n     */\n    private function normalizeResource($resource, $urlencode = true)\n    {\n        $pieces = explode('/', trim($resource, '/'));\n\n        if ($urlencode) {\n            array_walk($pieces, function (&$piece) {\n                $piece = rawurlencode($piece);\n            });\n        }\n\n        $bucket = $pieces[0];\n\n        $relative = $pieces;\n        array_shift($relative);\n\n        return [\n            '/' . implode('/', $pieces),\n            $bucket,\n            '/' . implode('/', $relative),\n        ];\n    }\n\n    /**\n     * Fixes the user input options, filters and validates data.\n     *\n     * @param array $options Signed URL configuration options.\n     * @return array\n     * @throws \\InvalidArgumentException\n     */\n    private function normalizeOptions(array $options)\n    {\n        $options += [\n            'allowPost' => false,\n            'cname' => null, //@deprecated\n            'bucketBoundHostname' => self::DEFAULT_DOWNLOAD_HOST,\n            'contentMd5' => null,\n            'contentType' => null,\n            'forceOpenssl' => false,\n            'headers' => [],\n            'keyFile' => null,\n            'keyFilePath' => null,\n            'credentialsFetcher' => null,\n            'method' => 'GET',\n            'queryParams' => [],\n            'responseDisposition' => null,\n            'responseType' => null,\n            'saveAsName' => null,\n\n            // note that in almost every case this default will be overridden.\n            'scheme' => 'http',\n            'timestamp' => null,\n            'virtualHostedStyle' => false,\n        ];\n\n        $allowedMethods = ['GET', 'PUT', 'POST', 'DELETE'];\n        $options['method'] = strtoupper($options['method']);\n        if (!in_array($options['method'], $allowedMethods)) {\n            throw new \\InvalidArgumentException('$options.method must be one of `GET`, `PUT` or `DELETE`.');\n        }\n\n        if ($options['method'] === 'POST' && !$options['allowPost']) {\n            throw new \\InvalidArgumentException(\n                'Invalid method. To create an upload URI, use StorageObject::signedUploadUrl().'\n            );\n        }\n\n        // Rewrite deprecated `cname` to new `bucketBoundHostname`.\n        if ($options['cname'] && $options['bucketBoundHostname'] === self::DEFAULT_DOWNLOAD_HOST) {\n            $options['bucketBoundHostname'] = $options['cname'];\n        }\n\n        // strip protocol from hostname.\n        $hostnameParts = explode('//', $options['bucketBoundHostname']);\n        if (count($hostnameParts) > 1) {\n            $options['bucketBoundHostname'] = $hostnameParts[1];\n        }\n\n        $options['bucketBoundHostname'] = trim($options['bucketBoundHostname'], '/');\n\n        // If a timestamp is provided, use it in place of `now` for v4 URLs only..\n        // This option exists for testing purposes, and should not generally be provided by users.\n        if ($options['timestamp']) {\n            if (!($options['timestamp'] instanceof \\DateTimeInterface)) {\n                if (!is_string($options['timestamp'])) {\n                    throw new \\InvalidArgumentException(\n                        'User-provided timestamps must be a string or instance of `\\DateTimeInterface`.'\n                    );\n                }\n\n                $options['timestamp'] = \\DateTimeImmutable::createFromFormat(\n                    \\DateTime::RFC3339,\n                    $options['timestamp'],\n                    new \\DateTimeZone('UTC')\n                );\n\n                if (!$options['timestamp']) {\n                    throw new \\InvalidArgumentException(\n                        'Given timestamp string is in an invalid format. Provide timestamp formatted as follows: `' .\n                        \\DateTime::RFC3339 .\n                        '`. Note that timestamps MUST be in UTC.'\n                    );\n                }\n            }\n        } else {\n            $options['timestamp'] = new \\DateTimeImmutable('now', new \\DateTimeZone('UTC'));\n        }\n\n        unset(\n            $options['cname'],\n            $options['allowPost']\n        );\n\n        return $options;\n    }\n\n    /**\n     * Cleans and normalizes header values.\n     *\n     * Arrays of values are collapsed into a comma-separated list, trailing and\n     * leading spaces are removed, newlines are replaced by empty strings, and\n     * multiple whitespace chars are replaced by a single space.\n     *\n     * @param array $headers Input headers\n     * @return array\n     */\n    private function normalizeHeaders(array $headers)\n    {\n        $out = [];\n        foreach ($headers as $name => $value) {\n            $name = strtolower(trim($name));\n            // collapse arrays of values into a comma-separated list.\n            if (!is_array($value)) {\n                $value = [$value];\n            }\n\n            foreach ($value as &$headerValue) {\n                // strip trailing and leading spaces.\n                $headerValue = trim($headerValue);\n\n                // replace newlines with empty strings.\n                $headerValue = str_replace(PHP_EOL, '', $headerValue);\n\n                // collapse multiple whitespace chars to a single space.\n                $headerValue = preg_replace('/[\\s]+/', ' ', $headerValue);\n            }\n\n            $out[$name] = implode(', ', $value);\n        }\n\n        return $out;\n    }\n\n    /**\n     * Returns a resource formatted for use in a URI.\n     *\n     * If the bucketBoundHostname is other than the default, will omit the bucket name.\n     *\n     * @param string $bucketBoundHostname The bucketBoundHostname provided by the user, or the default\n     *     value.\n     * @param string $resource The GCS resource path (i.e. /bucket/object).\n     * @return string\n     */\n    private function normalizeUriPath($bucketBoundHostname, $resource, $withTrailingSlash = false)\n    {\n        if ($bucketBoundHostname !== self::DEFAULT_DOWNLOAD_HOST) {\n            $resourceParts = explode('/', trim($resource, '/'));\n            array_shift($resourceParts);\n\n            // Resource is a Bucket.\n            if (empty($resourceParts)) {\n                $resource = '/';\n            } else {\n                $resource = '/' . implode('/', $resourceParts);\n            }\n        }\n\n        $resource = rtrim($resource, '/');\n\n        return $withTrailingSlash\n            ? $resource . '/'\n            : $resource;\n    }\n\n    /**\n     * Normalize the resource provided to the canonical request string.\n     *\n     * @param string $resource\n     * @param string $bucketBoundHostname\n     * @param boolean $virtualHostedStyle\n     * @return string\n     */\n    private function normalizeCanonicalRequestResource($resource, $bucketBoundHostname, $virtualHostedStyle = false)\n    {\n        if ($bucketBoundHostname === self::DEFAULT_DOWNLOAD_HOST && !$virtualHostedStyle) {\n            return $resource;\n        }\n\n        $pieces = explode('/', trim($resource, '/'));\n        array_shift($pieces);\n        return '/' . implode('/', $pieces);\n    }\n\n    /**\n     * Get the credentials for use with signing.\n     *\n     * @param ConnectionInterface $connection A Storage connection object.\n     *        This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param array $options Configuration options.\n     * @return array A list containing a credentials object at index 0 and the\n     *        modified options at index 1.\n     * @throws \\RuntimeException If the credentials type is not valid for signing.\n     * @throws \\InvalidArgumentException If a keyfile is given and is not valid.\n     */\n    private function getSigningCredentials(ConnectionInterface $connection, array $options)\n    {\n        $keyFilePath = $options['keyFilePath'] ?? null;\n\n        if ($keyFilePath) {\n            if (!file_exists($keyFilePath)) {\n                throw new \\InvalidArgumentException(sprintf(\n                    'Keyfile path %s does not exist.',\n                    $keyFilePath\n                ));\n            }\n\n            $options['keyFile'] = self::jsonDecode(file_get_contents($keyFilePath), true);\n        }\n\n        $rw = $connection->requestWrapper();\n\n        $keyFile = $options['keyFile'] ?? null;\n        if ($keyFile) {\n            $scopes = $options['scopes'] ?? $rw->scopes();\n\n            $credentials = CredentialsLoader::makeCredentials($scopes, $keyFile);\n        } elseif (isset($options['credentialsFetcher'])) {\n            $credentials = $options['credentialsFetcher'];\n        } else {\n            $credentials = $rw->getCredentialsFetcher();\n        }\n\n        //@codeCoverageIgnoreStart\n        if (!($credentials instanceof SignBlobInterface)) {\n            throw new \\RuntimeException(sprintf(\n                'Credentials object is of type `%s` and is not valid for signing.',\n                get_class($credentials)\n            ));\n        }\n        //@codeCoverageIgnoreEnd\n\n        unset(\n            $options['keyFilePath'],\n            $options['keyFile'],\n            $options['credentialsFetcher'],\n            $options['scopes']\n        );\n\n        return [$credentials, $options];\n    }\n\n    /**\n     * Add parameters common to all signed URL versions.\n     *\n     * @param int|null $generation\n     * @param array $params\n     * @param array $options\n     * @return array\n     */\n    private function addCommonParams($generation, array $params, array $options)\n    {\n        if ($options['responseType']) {\n            $params['response-content-type'] = $options['responseType'];\n        }\n\n        if ($options['responseDisposition']) {\n            $params['response-content-disposition'] = $options['responseDisposition'];\n        } elseif ($options['saveAsName']) {\n            $params['response-content-disposition'] = 'attachment; filename='\n                . '\"' . $options['saveAsName'] . '\"';\n        }\n\n        if ($generation) {\n            $params['generation'] = $generation;\n        }\n\n        return $params;\n    }\n\n    /**\n     * Create a query string from an array.\n     *\n     * Note that this method does NOT urlencode keys or values.\n     *\n     * @param array $input\n     * @return string\n     */\n    private function buildQueryString(array $input)\n    {\n        $q = [];\n        foreach ($input as $key => $val) {\n            $q[] = $key . '=' . $val;\n        }\n\n        return implode('&', $q);\n    }\n\n    /**\n     * Retry logic for signBlob\n     *\n     * @param callable $signBlobFn  A callable that perform the actual signBlob operation.\n     * @param string $resourceName The resource name for logging or retry strategy determination.\n     * @param array $args Arguments for the operations, include preconditions\n     * @return string The signature genarated by signBlob.\n     * @throws ServiceException If non-retryable error occur.\n     * @throws \\RuntimeException If retries are exhausted.\n     */\n    private function retrySignBlob(callable $signBlobFn, string $resourceName = 'signBlob', array $args = [])\n    {\n        $attempt = 0;\n        // Generate a retry decider function using the RetryTrait logic.\n        $retryDecider = $this->getRestRetryFunction($resourceName, 'execute', $args);\n        while (true) {\n            ++$attempt;\n            try {\n                // Attempt the operation\n                return $signBlobFn();\n            } catch (\\Exception $exception) {\n                if (!$retryDecider($exception, $attempt, self::MAX_RETRIES)) {\n                    // Non-retryable error\n                    throw $exception;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/StorageClient.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Cloud\\Core\\ArrayTrait;\nuse Google\\Cloud\\Core\\ClientTrait;\nuse Google\\Cloud\\Core\\Exception\\GoogleException;\nuse Google\\Cloud\\Core\\Iterator\\ItemIterator;\nuse Google\\Cloud\\Core\\Iterator\\PageIterator;\nuse Google\\Cloud\\Core\\Timestamp;\nuse Google\\Cloud\\Core\\Upload\\SignedUrlUploader;\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\nuse Google\\Cloud\\Storage\\Connection\\Rest;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Google Cloud Storage allows you to store and retrieve data on Google's\n * infrastructure. Find more information at the\n * [Google Cloud Storage API docs](https://developers.google.com/storage).\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n * ```\n */\nclass StorageClient\n{\n    use ArrayTrait;\n    use ClientTrait;\n\n    const VERSION = '1.49.0';\n\n    const FULL_CONTROL_SCOPE = 'https://www.googleapis.com/auth/devstorage.full_control';\n    const READ_ONLY_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_only';\n    const READ_WRITE_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_write';\n\n    /**\n     * Retry strategy to signify that we never want to retry an operation\n     * even if the error is retryable.\n     *\n     * We can set $options['retryStrategy'] to one of \"always\", \"never\" and\n     * \"idempotent\".\n     */\n    const RETRY_NEVER = 'never';\n    /**\n     * Retry strategy to signify that we always want to retry an operation.\n     */\n    const RETRY_ALWAYS = 'always';\n    /**\n     * This is the default. This signifies that we want to retry an operation\n     * only if it is retryable and the error is retryable.\n     */\n    const RETRY_IDEMPOTENT = 'idempotent';\n\n    /**\n     * @var ConnectionInterface Represents a connection to Storage.\n     * @internal\n     */\n    protected $connection;\n\n    /**\n     * Create a Storage client.\n     *\n     * @param array $config [optional] {\n     *     Configuration options.\n     *\n     *     @type string $apiEndpoint The hostname with optional port to use in\n     *           place of the default service endpoint. Example:\n     *           `foobar.com` or `foobar.com:1234`.\n     *     @type string $projectId The project ID from the Google Developer's\n     *           Console.\n     *     @type CacheItemPoolInterface $authCache A cache used storing access\n     *           tokens. **Defaults to** a simple in memory implementation.\n     *     @type array $authCacheOptions Cache configuration options.\n     *     @type callable $authHttpHandler A handler used to deliver Psr7\n     *           requests specifically for authentication.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type callable $httpHandler A handler used to deliver Psr7 requests.\n     *           Only valid for requests sent over REST.\n     *     @type array $keyFile [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           $creds = new StorageClient(['credentialsFetcher' => $creds]);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n    *     @type string $keyFilePath [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           $creds = new StorageClient(['credentialsFetcher' => $creds]);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *     @type float $requestTimeout Seconds to wait before timing out the\n     *           request. **Defaults to** `0` with REST and `60` with gRPC.\n     *     @type int $retries Number of retries for a failed request.\n     *           **Defaults to** `3`.\n     *     @type string $retryStrategy Retry strategy to signify that we never\n     *           want to retry an operation even if the error is retryable.\n     *           **Defaults to** `StorageClient::RETRY_IDEMPOTENT`.\n     *     @type callable $restDelayFunction Executes a delay, defaults to\n     *           utilizing `usleep`. Function signature should match:\n     *           `function (int $delay) : void`.\n     *     @type callable $restCalcDelayFunction Sets the conditions for\n     *           determining how long to wait between attempts to retry. Function\n     *           signature should match: `function (int $attempt) : int`.\n     *     @type callable $restRetryFunction Sets the conditions for whether or\n     *           not a request should attempt to retry. Function signature should\n     *           match: `function (\\Exception $ex) : bool`.\n     *     @type callable $restRetryListener Runs after the restRetryFunction.\n     *           This might be used to simply consume the exception and\n     *           $arguments b/w retries. This returns the new $arguments thus\n     *           allowing modification on demand for $arguments. For ex:\n     *           changing the headers in b/w retries.\n     *     @type array $scopes Scopes to be used for the request.\n     *     @type string $quotaProject Specifies a user project to bill for\n     *           access charges associated with the request.\n     * }\n     */\n    public function __construct(array $config = [])\n    {\n        if (!isset($config['scopes'])) {\n            $config['scopes'] = [\n                'https://www.googleapis.com/auth/iam',\n                self::FULL_CONTROL_SCOPE,\n            ];\n        }\n\n        $this->connection = new Rest($this->configureAuthentication($config) + [\n            'projectId' => $this->projectId\n        ]);\n    }\n\n    /**\n     * Lazily instantiates a bucket.\n     *\n     * There are no network requests made at this point. To see the operations\n     * that can be performed on a bucket please see {@see Bucket}.\n     *\n     * If `$userProject` is set to true, the current project ID (used to\n     * instantiate the client) will be billed for all requests. If\n     * `$userProject` is a project ID, given as a string, that project\n     * will be billed for all requests. This only has an effect when the bucket\n     * is not owned by the current or given project ID.\n     *\n     * Example:\n     * ```\n     * $bucket = $storage->bucket('my-bucket');\n     * ```\n     *\n     * @param string $name The name of the bucket to request.\n     * @param string|bool $userProject If true, the current Project ID\n     *        will be used. If a string, that string will be used as the\n     *        userProject argument, and that project will be billed for the\n     *        request. **Defaults to** `false`.\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type bool $softDeleted  If set to true, only soft-deleted bucket versions\n     *           are listed as distinct results in order of bucket name and generation\n     *           number. The default value is false.\n     *     @type string $generation If present, selects a specific soft-deleted version\n     *           of this bucket instead of the live version. This parameter is required if\n     *           softDeleted is set to true.\n     * }\n     * @return Bucket\n     */\n    public function bucket($name, $userProject = false, array $options = [])\n    {\n        if (!$userProject) {\n            $userProject = null;\n        } elseif (!is_string($userProject)) {\n            $userProject = $this->projectId;\n        }\n\n        return new Bucket($this->connection, $name, $options + [\n            'requesterProjectId' => $userProject\n        ]);\n    }\n\n    /**\n     * Fetches all buckets in the project.\n     *\n     * Example:\n     * ```\n     * $buckets = $storage->buckets();\n     * ```\n     *\n     * ```\n     * // Get all buckets beginning with the prefix 'album'.\n     * $buckets = $storage->buckets([\n     *     'prefix' => 'album'\n     * ]);\n     *\n     * foreach ($buckets as $bucket) {\n     *     echo $bucket->name() . PHP_EOL;\n     * }\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/list Buckets list API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type int $maxResults Maximum number of results to return per\n     *           requested page.\n     *     @type int $resultLimit Limit the number of results returned in total.\n     *           **Defaults to** `0` (return all results).\n     *     @type string $pageToken A previously-returned page token used to\n     *           resume the loading of results from a specific point.\n     *     @type string $prefix Filter results with this prefix.\n     *     @type string $projection Determines which properties to return. May\n     *           be either 'full' or 'noAcl'.\n     *     @type string $fields Selector which will cause the response to only\n     *           return the specified fields.\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request.\n     *     @type bool $softDeleted  If set to true, only soft-deleted bucket versions\n     *           are listed as distinct results in order of bucket name and generation\n     *           number. The default value is false.\n     *     @type bool $bucketUserProject If true, each returned instance will\n     *           have `$userProject` set to the value of `$options.userProject`.\n     *           If false, `$options.userProject` will be used ONLY for the\n     *           listBuckets operation. If `$options.userProject` is not set,\n     *           this option has no effect. **Defaults to** `true`.\n     *      @type bool $returnPartialSuccess If true, the returned iterator will contain an\n     *           `unreachable` property with a list of buckets that were not retrieved.\n     *           **Note:** If set to false (default) and unreachable buckets are found,\n     *           the operation will throw an exception.\n     *\n     * }\n     * @return BucketIterator<Bucket>\n     * @throws GoogleException When a project ID has not been detected.\n     */\n    public function buckets(array $options = [])\n    {\n        $this->requireProjectId();\n        $resultLimit = $this->pluck('resultLimit', $options, false);\n        $bucketUserProject = $this->pluck('bucketUserProject', $options, null) ?? true;\n        $userProject = $bucketUserProject ? ($options['userProject'] ?? null) : null;\n\n        $unreachable = new \\ArrayObject();\n\n        $apiCall = [$this->connection, 'listBuckets'];\n        $callDelegate = function (array $args) use ($apiCall, $unreachable) {\n            $response = call_user_func($apiCall, $args);\n            if (isset($response['unreachable']) && is_array($response['unreachable'])) {\n                $current = $unreachable->getArrayCopy();\n                $updated = array_unique(array_merge($current, $response['unreachable']));\n                $unreachable->exchangeArray($updated);\n            }\n            return $response;\n        };\n\n        // Return the new BucketIterator with the wrapped unreachable bucket\n        return new BucketIterator(\n            new PageIterator(\n                function (array $bucket) use ($userProject) {\n                    return new Bucket(\n                        $this->connection,\n                        $bucket['name'],\n                        $bucket + ['requesterProjectId' => $userProject]\n                    );\n                },\n                $callDelegate,\n                $options + ['project' => $this->projectId],\n                ['resultLimit' => $resultLimit]\n            ),\n            $unreachable\n        );\n    }\n\n    /**\n     * Restores a soft-deleted bucket.\n     *\n     * Example:\n     * ```\n     * $bucket = $storage->bucket->restore('my-bucket');\n     * ```\n     *\n     * @param string $name The name of the bucket to restore.\n     * @param string $generation The specific version of the bucket to be restored.\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $projection Determines which properties to return. May\n     *           be either `\"full\"` or `\"noAcl\"`. **Defaults to** `\"noAcl\"`,\n     *           unless the bucket resource specifies acl or defaultObjectAcl\n     *           properties, when it defaults to `\"full\"`.\n     * }\n     * @return Bucket\n     */\n    public function restore(string $name, string $generation, array $options = [])\n    {\n        $res = $this->connection->restoreBucket([\n            'bucket' => $name,\n            'generation' => $generation,\n        ] + $options);\n        return new Bucket(\n            $this->connection,\n            $name\n        );\n    }\n\n    /**\n     * Create a bucket. Bucket names must be unique as Cloud Storage uses a flat\n     * namespace. For more information please see\n     * [bucket name requirements](https://cloud.google.com/storage/docs/naming#requirements)\n     *\n     * Example:\n     * ```\n     * $bucket = $storage->createBucket('bucket');\n     * ```\n     *\n     * ```\n     * // Create a bucket with logging enabled.\n     * $bucket = $storage->createBucket('myBeautifulBucket', [\n     *     'logging' => [\n     *         'logBucket' => 'bucketToLogTo',\n     *         'logObjectPrefix' => 'myPrefix'\n     *     ]\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/buckets/insert Buckets insert API documentation.\n     *\n     * @param string $name Name of the bucket to be created.\n     * @codingStandardsIgnoreStart\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $predefinedAcl Predefined ACL to apply to the bucket.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type string $predefinedDefaultObjectAcl Apply a predefined set of\n     *           default object access controls to this bucket.\n     *     @type bool $enableObjectRetention Whether object retention should\n     *          be enabled on this bucket. For more information, refer to the\n     *          [Object Retention Lock](https://cloud.google.com/storage/docs/object-lock)\n     *          documentation.\n     *     @type string $projection Determines which properties to return. May\n     *           be either `\"full\"` or `\"noAcl\"`. **Defaults to** `\"noAcl\"`,\n     *           unless the bucket resource specifies acl or defaultObjectAcl\n     *           properties, when it defaults to `\"full\"`.\n     *     @type string $fields Selector which will cause the response to only\n     *           return the specified fields.\n     *     @type array $acl Access controls on the bucket.\n     *     @type array $cors The bucket's Cross-Origin Resource Sharing (CORS)\n     *           configuration.\n     *     @type array $defaultObjectAcl Default access controls to apply to new\n     *           objects when no ACL is provided.\n     *     @type array|Lifecycle $lifecycle The bucket's lifecycle configuration.\n     *     @type string $location The location of the bucket. If specifying\n     *           a dual-region, the `customPlacementConfig` property should be\n     *           set in conjunction. For more information, see\n     *           [Bucket Locations](https://cloud.google.com/storage/docs/locations).\n     *           **Defaults to** `\"US\"`.\n     *     @type array $hierarchicalNamespace The hierarchical namespace configuration\n     *           on this bucket.\n     *     @type array $customPlacementConfig The bucket's dual regions. For more\n     *           information, see\n     *           [Bucket Locations](https://cloud.google.com/storage/docs/locations).\n     *     @type array $logging The bucket's logging configuration, which\n     *           defines the destination bucket and optional name prefix for the\n     *           current bucket's logs.\n     *     @type string $storageClass The bucket's storage class. This defines\n     *           how objects in the bucket are stored and determines the SLA and\n     *           the cost of storage. Acceptable values include the following\n     *           strings: `\"STANDARD\"`, `\"NEARLINE\"`, `\"COLDLINE\"` and\n     *           `\"ARCHIVE\"`. Legacy values including `\"MULTI_REGIONAL\"`,\n     *           `\"REGIONAL\"` and `\"DURABLE_REDUCED_AVAILABILITY\"` are also\n     *           available, but should be avoided for new implementations. For\n     *           more information, refer to the\n     *           [Storage Classes](https://cloud.google.com/storage/docs/storage-classes)\n     *           documentation. **Defaults to** `\"STANDARD\"`.\n     *     @type array $autoclass The bucket's autoclass configuration.\n     *           Buckets can have either StorageClass OLM rules or Autoclass,\n     *           but not both. When Autoclass is enabled on a bucket, adding\n     *           StorageClass OLM rules will result in failure.\n     *           For more information, refer to\n     *           [Storage Autoclass](https://cloud.google.com/storage/docs/autoclass)\n     *     @type array $versioning The bucket's versioning configuration.\n     *     @type array $website The bucket's website configuration.\n     *     @type array $billing The bucket's billing configuration.\n     *     @type bool $billing.requesterPays When `true`, requests to this bucket\n     *           and objects within it must provide a project ID to which the\n     *           request will be billed.\n     *     @type array $labels The Bucket labels. Labels are represented as an\n     *           array of keys and values. To remove an existing label, set its\n     *           value to `null`.\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request.\n     *     @type bool $bucketUserProject If true, the returned instance will\n     *           have `$userProject` set to the value of `$options.userProject`.\n     *           If false, `$options.userProject` will be used ONLY for the\n     *           createBucket operation. If `$options.userProject` is not set,\n     *           this option has no effect. **Defaults to** `true`.\n     *     @type array $encryption Encryption configuration used by default for\n     *           newly inserted objects.\n     *     @type string $encryption.defaultKmsKeyName A Cloud KMS Key used to\n     *           encrypt objects uploaded into this bucket. Should be in the\n     *           format\n     *           `projects/my-project/locations/kr-location/keyRings/my-kr/cryptoKeys/my-key`.\n     *           Please note the KMS key ring must use the same location as the\n     *           bucket.\n     *     @type bool $defaultEventBasedHold When `true`, newly created objects\n     *           in this bucket will be retained indefinitely until an event\n     *           occurs, signified by the hold's release.\n     *     @type array $retentionPolicy Defines the retention policy for a\n     *           bucket. In order to lock a retention policy, please see\n     *           {@see Bucket::lockRetentionPolicy()}.\n     *     @type int $retentionPolicy.retentionPeriod Specifies the retention\n     *           period for objects in seconds. During the retention period an\n     *           object cannot be overwritten or deleted. Retention period must\n     *           be greater than zero and less than 100 years.\n     *     @type array $iamConfiguration The bucket's IAM configuration.\n     *     @type bool $iamConfiguration.bucketPolicyOnly.enabled this is an alias\n     *           for $iamConfiguration.uniformBucketLevelAccess.\n     *     @type bool $iamConfiguration.uniformBucketLevelAccess.enabled If set and\n     *           true, access checks only use bucket-level IAM policies or\n     *           above. When enabled, requests attempting to view or manipulate\n     *           ACLs will fail with error code 400. **NOTE**: Before using\n     *           Uniform bucket-level access, please review the\n     *           [feature documentation](https://cloud.google.com/storage/docs/uniform-bucket-level-access),\n     *           as well as\n     *           [Should You Use uniform bucket-level access](https://cloud.google.com/storage/docs/uniform-bucket-level-access#should-you-use)\n     *     @type string $rpo Specifies the Turbo Replication setting for a dual-region bucket.\n     *           The possible values are DEFAULT and ASYNC_TURBO. Trying to set the rpo for a non dual-region\n     *           bucket will throw an exception. Non existence of this parameter is equivalent to it being DEFAULT.\n     * }\n     * @codingStandardsIgnoreEnd\n     * @return Bucket\n     * @throws GoogleException When a project ID has not been detected.\n     */\n    public function createBucket($name, array $options = [])\n    {\n        $this->requireProjectId();\n\n        if (isset($options['lifecycle']) && $options['lifecycle'] instanceof Lifecycle) {\n            $options['lifecycle'] = $options['lifecycle']->toArray();\n        }\n\n        $bucketUserProject = $this->pluck('bucketUserProject', $options, false);\n        $bucketUserProject = !is_null($bucketUserProject)\n            ? $bucketUserProject\n            : true;\n        $userProject = (isset($options['userProject']) && $bucketUserProject)\n            ? $options['userProject']\n            : null;\n\n        $response = $this->connection->insertBucket($options + ['name' => $name, 'project' => $this->projectId]);\n        return new Bucket(\n            $this->connection,\n            $name,\n            $response + ['requesterProjectId' => $userProject]\n        );\n    }\n\n    /**\n     * Registers this StorageClient as the handler for stream reading/writing.\n     *\n     * @param string $protocol The name of the protocol to use. **Defaults to** `gs`.\n     * @throws \\RuntimeException\n     */\n    public function registerStreamWrapper($protocol = null)\n    {\n        return StreamWrapper::register($this, $protocol);\n    }\n\n    /**\n     * Unregisters the SteamWrapper\n     *\n     * @param string $protocol The name of the protocol to unregister. **Defaults to** `gs`.\n     */\n    public function unregisterStreamWrapper($protocol = null)\n    {\n        StreamWrapper::unregister($protocol);\n    }\n\n    /**\n     * Create an uploader to handle a Signed URL.\n     *\n     * Example:\n     * ```\n     * $uploader = $storage->signedUrlUploader($uri, fopen('/path/to/myfile.doc', 'r'));\n     * ```\n     *\n     * @param string $uri The URI to accept an upload request.\n     * @param string|resource|StreamInterface $data The data to be uploaded\n     * @param array $options [optional] Configuration Options. Refer to\n     *        {@see \\Google\\Cloud\\Core\\Upload\\AbstractUploader::__construct()}.\n     * @return SignedUrlUploader\n     */\n    public function signedUrlUploader($uri, $data, array $options = [])\n    {\n        return new SignedUrlUploader($this->connection->requestWrapper(), $data, $uri, $options);\n    }\n\n    /**\n     * Create a Timestamp object.\n     *\n     * Example:\n     * ```\n     * $timestamp = $storage->timestamp(new \\DateTime('2003-02-05 11:15:02.421827Z'));\n     * ```\n     *\n     * @param \\DateTimeInterface $timestamp The timestamp value.\n     * @param int $nanoSeconds [optional] The number of nanoseconds in the timestamp.\n     * @return Timestamp\n     */\n    public function timestamp(\\DateTimeInterface $timestamp, $nanoSeconds = null)\n    {\n        return new Timestamp($timestamp, $nanoSeconds);\n    }\n\n    /**\n     * Get the service account email associated with this client.\n     *\n     * Example:\n     * ```\n     * $serviceAccount = $storage->getServiceAccount();\n     * ```\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request.\n     * }\n     * @return string\n     */\n    public function getServiceAccount(array $options = [])\n    {\n        $resp = $this->connection->getServiceAccount($options + ['projectId' => $this->projectId]);\n        return $resp['email_address'];\n    }\n\n    /**\n     * List Service Account HMAC keys in the project.\n     *\n     * Example:\n     * ```\n     * $hmacKeys = $storage->hmacKeys();\n     * ```\n     *\n     * ```\n     * // Get the HMAC keys associated with a Service Account email\n     * $hmacKeys = $storage->hmacKeys([\n     *     'serviceAccountEmail' => $serviceAccountEmail\n     * ]);\n     * ```\n     *\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $serviceAccountEmail If present, only keys for the given\n     *           service account are returned.\n     *     @type bool $showDeletedKeys Whether or not to show keys in the\n     *           DELETED state.\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request.\n     *     @type string $projectId The project ID to use, if different from that\n     *           with which the client was created.\n     * }\n     * @return ItemIterator<HmacKey>\n     */\n    public function hmacKeys(array $options = [])\n    {\n        $options += [\n            'projectId' => $this->projectId\n        ];\n\n        if (!$options['projectId']) {\n            $this->requireProjectId();\n        }\n\n        $resultLimit = $this->pluck('resultLimit', $options, false);\n        return new ItemIterator(\n            new PageIterator(\n                function (array $metadata) use ($options) {\n                    return $this->hmacKey(\n                        $metadata['accessId'],\n                        $options['projectId'],\n                        $metadata\n                    );\n                },\n                [$this->connection, 'listHmacKeys'],\n                $options,\n                ['resultLimit' => $resultLimit]\n            )\n        );\n    }\n\n    /**\n     * Lazily instantiate an HMAC Key instance using an Access ID.\n     *\n     * Example:\n     * ```\n     * $hmacKey = $storage->hmacKey($accessId);\n     * ```\n     *\n     * @param string $accessId The ID of the HMAC Key.\n     * @param string $projectId [optional] The project ID to use, if different\n     *        from that with which the client was created.\n     * @param array $metadata [optional] HMAC key metadata.\n     * @return HmacKey\n     */\n    public function hmacKey($accessId, $projectId = null, array $metadata = [])\n    {\n        if (!$projectId) {\n            $this->requireProjectId();\n        }\n\n        return new HmacKey($this->connection, $projectId ?: $this->projectId, $accessId, $metadata);\n    }\n\n    /**\n     * Creates a new HMAC key for the specified service account.\n     *\n     * Please note that the HMAC secret is only available at creation. Make sure\n     * to note the secret after creation.\n     *\n     * Example:\n     * ```\n     * $response = $storage->createHmacKey('account@myProject.iam.gserviceaccount.com');\n     * $secret = $response->secret();\n     * ```\n     *\n     * @param string $serviceAccountEmail Email address of the service account.\n     * @param array $options {\n     *     Configuration Options\n     *\n     *     @type string $userProject If set, this is the ID of the project which\n     *           will be billed for the request. **NOTE**: This option is\n     *           currently ignored by Cloud Storage.\n     *     @type string $projectId The project ID to use, if different from that\n     *           with which the client was created.\n     * }\n     * @return CreatedHmacKey\n     */\n    public function createHmacKey($serviceAccountEmail, array $options = [])\n    {\n        $options += [\n            'projectId' => $this->projectId\n        ];\n\n        if (!$options['projectId']) {\n            $this->requireProjectId();\n        }\n\n        $res = $this->connection->createHmacKey([\n            'projectId' => $options['projectId'],\n            'serviceAccountEmail' => $serviceAccountEmail\n        ] + $options);\n\n        $key = new HmacKey(\n            $this->connection,\n            $options['projectId'],\n            $res['metadata']['accessId'],\n            $res['metadata']\n        );\n\n        return new CreatedHmacKey($key, $res['secret']);\n    }\n\n    /**\n     * Throw an exception if no project ID available.\n     *\n     * @return void\n     * @throws GoogleException\n     */\n    private function requireProjectId()\n    {\n        if (!$this->projectId) {\n            throw new GoogleException(\n                'No project ID was provided, ' .\n                'and we were unable to detect a default project ID.'\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/StorageObject.php",
    "content": "<?php\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\ArrayTrait;\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\Timestamp;\nuse Google\\Cloud\\Core\\Upload\\SignedUrlUploader;\nuse Google\\Cloud\\Storage\\Connection\\ConnectionInterface;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Objects are the individual pieces of data that you store in Google Cloud\n * Storage.\n *\n * Example:\n * ```\n * use Google\\Cloud\\Storage\\StorageClient;\n *\n * $storage = new StorageClient();\n *\n * $bucket = $storage->bucket('my-bucket');\n * $object = $bucket->object('my-object');\n * ```\n */\nclass StorageObject\n{\n    use ArrayTrait;\n    use EncryptionTrait;\n\n    /**\n     * @deprecated\n     */\n    const DEFAULT_DOWNLOAD_URL = SigningHelper::DEFAULT_DOWNLOAD_HOST;\n\n    /**\n     * @var Acl ACL for the object.\n     */\n    private $acl;\n\n    /**\n     * @var ConnectionInterface Represents a connection to Cloud Storage.\n     * @internal\n     */\n    protected $connection;\n\n    /**\n     * @var array|null The object's encryption data.\n     */\n    private $encryptionData;\n\n    /**\n     * @var array The object's identity.\n     */\n    private $identity;\n\n    /**\n     * @var array|null The object's metadata.\n     */\n    private $info;\n\n    /**\n     * @param ConnectionInterface $connection Represents a connection to Cloud\n     *        Storage. This object is created by StorageClient,\n     *        and should not be instantiated outside of this client.\n     * @param string $name The object's name.\n     * @param string $bucket The name of the bucket the object is contained in.\n     * @param string $generation [optional] The generation of the object.\n     * @param array $info [optional] The object's metadata.\n     * @param string $encryptionKey [optional] An AES-256 customer-supplied\n     *        encryption key.\n     * @param string $encryptionKeySHA256 [optional] The SHA256 hash of the\n     *        customer-supplied encryption key.\n     */\n    public function __construct(\n        ConnectionInterface $connection,\n        $name,\n        $bucket,\n        $generation = null,\n        array $info = [],\n        $encryptionKey = null,\n        $encryptionKeySHA256 = null\n    ) {\n        $this->connection = $connection;\n        $this->info = $info;\n        $this->encryptionData = [\n            'encryptionKey' => $encryptionKey,\n            'encryptionKeySHA256' => $encryptionKeySHA256\n        ];\n        $this->identity = [\n            'bucket' => $bucket,\n            'object' => $name,\n            'generation' => $generation,\n            'userProject' => $this->pluck('requesterProjectId', $info, false)\n        ];\n        $this->acl = new Acl($this->connection, 'objectAccessControls', $this->identity);\n    }\n\n    /**\n     * Configure ACL for this object.\n     *\n     * Example:\n     * ```\n     * $acl = $object->acl();\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/access-control More about Access Control Lists\n     *\n     * @return Acl\n     */\n    public function acl()\n    {\n        return $this->acl;\n    }\n\n    /**\n     * Check whether or not the object exists.\n     *\n     * Example:\n     * ```\n     * if ($object->exists()) {\n     *     echo 'Object exists!';\n     * }\n     * ```\n     *\n     * @param array $options [optional] Configuration options.\n     * @return bool\n     */\n    public function exists(array $options = [])\n    {\n        try {\n            $this->connection->getObject($this->identity + $options + ['fields' => 'name']);\n        } catch (NotFoundException $ex) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Delete the object.\n     *\n     * Example:\n     * ```\n     * $object->delete();\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/delete Objects delete API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the object's current generation matches the given\n     *           value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the object's current generation does not match the\n     *           given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the object's current metageneration matches the\n     *           given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the object's current metageneration does\n     *           not match the given value.\n     * }\n     * @return void\n     */\n    public function delete(array $options = [])\n    {\n        $this->connection->deleteObject($options + array_filter($this->identity));\n    }\n\n    /**\n     * Update the object. Upon receiving a result the local object's data will\n     * be updated.\n     *\n     * Example:\n     * ```\n     * // Add custom metadata to an existing object.\n     * $object->update([\n     *     'metadata' => [\n     *         'albumType' => 'family'\n     *     ]\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/patch Objects patch API documentation.\n     *\n     * @param array $metadata The available options for metadata are outlined\n     *        at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects#resource)\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the object's current generation matches the given\n     *           value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the object's current generation does not match the\n     *           given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the object's current metageneration matches the\n     *           given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the object's current metageneration does\n     *           not match the given value.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type array $retention The full list of available options are outlined\n     *           at the [JSON API docs](https://cloud.google.com/storage/docs/json_api/v1/objects/update#request-body).\n     *     @type string $retention.retainUntilTime The earliest time in RFC 3339\n     *           UTC \"Zulu\" format that the object can be deleted or replaced.\n     *           This is the retention configuration set for this object.\n     *     @type string $retention.mode The mode of the retention configuration,\n     *           which can be either `\"Unlocked\"` or `\"Locked\"`.\n     *     @type bool $overrideUnlockedRetention Applicable for objects that\n     *           have an unlocked retention configuration. Required to be set to\n     *           `true` if the operation includes a retention property that\n     *           changes the mode to `Locked`, reduces the `retainUntilTime`, or\n     *           removes the retention configuration from the object.\n     *     @type string $projection Determines which properties to return. May\n     *           be either 'full' or 'noAcl'.\n     *     @type string $fields Selector which will cause the response to only\n     *           return the specified fields.\n     * }\n     * @return array\n     */\n    public function update(array $metadata, array $options = [])\n    {\n        $options += $metadata;\n\n        // can only set predefinedAcl or acl\n        if (isset($options['predefinedAcl'])) {\n            $options['acl'] = null;\n        }\n\n        return $this->info = $this->connection->patchObject($options + array_filter($this->identity));\n    }\n\n    /**\n     * Copy the object to a destination bucket.\n     *\n     * Please note that if the destination bucket is the same as the source\n     * bucket and a new name is not provided the source object will be replaced\n     * with the copy of itself.\n     *\n     * Example:\n     * ```\n     * // Provide your destination bucket as a string and retain the source\n     * // object's name.\n     * $copiedObject = $object->copy('otherBucket');\n     * ```\n     *\n     * ```\n     * // Provide your destination bucket as a bucket object and choose a new\n     * // name for the copied object.\n     * $otherBucket = $storage->bucket('otherBucket');\n     * $copiedObject = $object->copy($otherBucket, [\n     *     'name' => 'newFile.txt'\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/copy Objects copy API documentation.\n     *\n     * @param Bucket|string $destination The destination bucket.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $name The name of the destination object. **Defaults\n     *           to** the name of the source object.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. It will be neccesary to provide this when a key\n     *           was used during the object's creation.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the destination object's current generation matches the\n     *           given value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the destination object's current generation does not\n     *           match the given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the destination object's current metageneration\n     *           matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the destination object's current\n     *           metageneration does not match the given value.\n     *     @type string $ifSourceGenerationMatch Makes the operation conditional\n     *           on whether the source object's current generation matches the\n     *           given value.\n     *     @type string $ifSourceGenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current generation\n     *           does not match the given value.\n     *     @type string $ifSourceMetagenerationMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration matches the given value.\n     *     @type string $ifSourceMetagenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration does not match the given value.\n     * }\n     * @return StorageObject\n     */\n    public function copy($destination, array $options = [])\n    {\n        $key = $options['encryptionKey'] ?? null;\n        $keySHA256 = $options['encryptionKeySHA256'] ?? null;\n\n        $response = $this->connection->copyObject(\n            $this->formatDestinationRequest($destination, $options)\n        );\n\n        return new StorageObject(\n            $this->connection,\n            $response['name'],\n            $response['bucket'],\n            $response['generation'],\n            $response + ['requesterProjectId' => $this->identity['userProject']],\n            $key,\n            $keySHA256\n        );\n    }\n\n    /**\n     * Rewrite the object to a destination bucket.\n     *\n     * This method copies data using multiple requests so large objects can be\n     * copied with a normal length timeout per request rather than one very long\n     * timeout for a single request.\n     *\n     * Please note that if the destination bucket is the same as the source\n     * bucket and a new name is not provided the source object will be replaced\n     * with the copy of itself.\n     *\n     * Example:\n     * ```\n     * // Provide your destination bucket as a string and retain the source\n     * // object's name.\n     * $rewrittenObject = $object->rewrite('otherBucket');\n     * ```\n     *\n     * ```\n     * // Provide your destination bucket as a bucket object and choose a new\n     * // name for the copied object.\n     * $otherBucket = $storage->bucket('otherBucket');\n     * $rewrittenObject = $object->rewrite($otherBucket, [\n     *     'name' => 'newFile.txt'\n     * ]);\n     * ```\n     *\n     * ```\n     * // Rotate customer-supplied encryption keys.\n     * $key = file_get_contents(__DIR__ . '/key.txt');\n     * $destinationKey = base64_encode(openssl_random_pseudo_bytes(32)); // Make sure to remember your key.\n     *\n     * $rewrittenObject = $object->rewrite('otherBucket', [\n     *     'encryptionKey' => $key,\n     *     'destinationEncryptionKey' => $destinationKey\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/rewrite Objects rewrite API documentation.\n     * @see https://cloud.google.com/storage/docs/encryption#customer-supplied Customer-supplied encryption keys.\n     *\n     * @param Bucket|string $destination The destination bucket.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $name The name of the destination object. **Defaults\n     *           to** the name of the source object.\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type string $maxBytesRewrittenPerCall The maximum number of bytes\n     *           that will be rewritten per rewrite request. Most callers\n     *           shouldn't need to specify this parameter - it is primarily in\n     *           place to support testing. If specified the value must be an\n     *           integral multiple of 1 MiB (1048576). Also, this only applies\n     *           to requests where the source and destination span locations\n     *           and/or storage classes.\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. It will be neccesary to provide this when a key\n     *           was used during the object's creation.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     *     @type string $destinationEncryptionKey A base64 encoded AES-256\n     *           customer-supplied encryption key that will be used to encrypt\n     *           the rewritten object.\n     *     @type string $destinationEncryptionKeySHA256 Base64 encoded SHA256\n     *           hash of the customer-supplied destination encryption key. This\n     *           value will be calculated from the `destinationEncryptionKey` on\n     *           your behalf if not provided, but for best performance it is\n     *           recommended to pass in a cached version of the already\n     *           calculated SHA.\n     *     @type string $destinationKmsKeyName Name of the Cloud KMS key that\n     *           will be used to encrypt the object. Should be in the format\n     *           `projects/my-project/locations/kr-location/keyRings/my-kr/cryptoKeys/my-key`.\n     *           Please note the KMS key ring must use the same location as the\n     *           destination bucket.\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the destination object's current generation matches the\n     *           given value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the destination object's current generation does not\n     *           match the given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the destination object's current metageneration\n     *           matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the destination object's current\n     *           metageneration does not match the given value.\n     *     @type string $ifSourceGenerationMatch Makes the operation conditional\n     *           on whether the source object's current generation matches the\n     *           given value.\n     *     @type string $ifSourceGenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current generation\n     *           does not match the given value.\n     *     @type string $ifSourceMetagenerationMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration matches the given value.\n     *     @type string $ifSourceMetagenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration does not match the given value.\n     * }\n     * @return StorageObject\n     * @throws \\InvalidArgumentException\n     */\n    public function rewrite($destination, array $options = [])\n    {\n        $options['useCopySourceHeaders'] = true;\n        $destinationKey = $options['destinationEncryptionKey'] ?? null;\n        $destinationKeySHA256 = $options['destinationEncryptionKeySHA256'] ?? null;\n\n        $options = $this->formatDestinationRequest($destination, $options);\n\n        do {\n            $response = $this->connection->rewriteObject($options);\n            $options['rewriteToken'] = $response['rewriteToken'] ?? null;\n        } while ($options['rewriteToken']);\n\n        return new StorageObject(\n            $this->connection,\n            $response['resource']['name'],\n            $response['resource']['bucket'],\n            $response['resource']['generation'],\n            $response['resource'] + ['requesterProjectId' => $this->identity['userProject']],\n            $destinationKey,\n            $destinationKeySHA256\n        );\n    }\n\n    /**\n     * Move an object within a bucket.\n     *\n     * This method copies data using multiple requests so large objects can be\n     * copied with a normal length timeout per request rather than one very long\n     * timeout for a single request.\n     *\n     * Example:\n     * ```\n     * // Provide your destination object as a string.\n     * $moveObject = $object->move('newObject.txt');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/move Objects move API documentation.\n     *\n     * @param string $destinationObject The destination object.\n     * @param array $options [optional]\n     *     Configuration options.\n     *\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the destination object's current generation matches the\n     *           given value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the destination object's current generation does not\n     *           match the given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the destination object's current metageneration\n     *           matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the destination object's current\n     *           metageneration does not match the given value.\n     *     @type string $ifSourceGenerationMatch Makes the operation conditional\n     *           on whether the source object's current generation matches the\n     *           given value.\n     *     @type string $ifSourceGenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current generation\n     *           does not match the given value.\n     *     @type string $ifSourceMetagenerationMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration matches the given value.\n     *     @type string $ifSourceMetagenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration does not match the given value.\n     *\n     * @return StorageObject\n     * @throws \\InvalidArgumentException\n     */\n    public function move($destinationObject, array $options = [])\n    {\n        if (!is_string($destinationObject)) {\n            throw new \\InvalidArgumentException(\n                '$destinationObject must be a string.'\n            );\n        }\n        $options['bucket'] = $this->identity['bucket'];\n        $options['sourceObject'] = $this->identity['object'];\n        $options['destinationObject'] = $destinationObject;\n        $options['userProject'] = $this->identity['userProject'];\n\n        $response = $this->connection->moveObject($options);\n\n        return new StorageObject(\n            $this->connection,\n            $response['name'],\n            $response['bucket'],\n            $response['generation'],\n            $response + ['requesterProjectId' => $this->identity['userProject']]\n        );\n    }\n\n    /**\n     * Renames the object.\n     *\n     * Please note that there is no atomic rename provided by the Storage API.\n     * This method is for convenience and is a set of sequential calls to copy\n     * and delete. Upon success the source object's metadata will be cleared,\n     * please use the returned object instead.\n     *\n     * Example:\n     * ```\n     * $object2 = $object->rename('object2.txt');\n     * echo $object2->name();\n     * ```\n     *\n     * @param string $name The new name.\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $predefinedAcl Predefined ACL to apply to the object.\n     *           Acceptable values include, `\"authenticatedRead\"`,\n     *           `\"bucketOwnerFullControl\"`, `\"bucketOwnerRead\"`, `\"private\"`,\n     *           `\"projectPrivate\"`, and `\"publicRead\"`.\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. It will be neccesary to provide this when a key\n     *           was used during the object's creation.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the destination object's current generation matches the\n     *           given value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the destination object's current generation does not\n     *           match the given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the destination object's current metageneration\n     *           matches the given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the destination object's current\n     *           metageneration does not match the given value.\n     *     @type string $ifSourceGenerationMatch Makes the operation conditional\n     *           on whether the source object's current generation matches the\n     *           given value.\n     *     @type string $ifSourceGenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current generation\n     *           does not match the given value.\n     *     @type string $ifSourceMetagenerationMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration matches the given value.\n     *     @type string $ifSourceMetagenerationNotMatch Makes the operation\n     *           conditional on whether the source object's current\n     *           metageneration does not match the given value.\n     *     @type string $destinationBucket Will move to this bucket if set. If\n     *           not set, will default to the same bucket.\n     * }\n     * @return StorageObject The renamed object.\n     */\n    public function rename($name, array $options = [])\n    {\n        $destinationBucket = $options['destinationBucket'] ?? $this->identity['bucket'];\n        unset($options['destinationBucket']);\n\n        $copiedObject = $this->copy($destinationBucket, [\n            'name' => $name\n        ] + $options);\n\n        $this->delete(\n            array_intersect_key($options, [\n                'restOptions' => null,\n                'retries' => null\n            ])\n        );\n        $this->info = [];\n\n        return $copiedObject;\n    }\n\n    /**\n     * Download an object as a string.\n     *\n     * For an example of setting the range header to download a subrange of the\n     * object please see {@see StorageObject::downloadAsStream()}.\n     *\n     * Example:\n     * ```\n     * $string = $object->downloadAsString();\n     * echo $string;\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/get Objects get API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/parameters#range Learn more about the Range header.\n     *\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $encryptionKey An AES-256 customer-supplied encryption\n     *           key. It will be neccesary to provide this when a key was used\n     *           during the object's creation. If provided one must also include\n     *           an `encryptionKeySHA256`.\n     *     @type string $encryptionKeySHA256 The SHA256 hash of the\n     *           customer-supplied encryption key. It will be neccesary to\n     *           provide this when a key was used during the object's creation.\n     *           If provided one must also include an `encryptionKey`.\n     * }\n     * @return string\n     */\n    public function downloadAsString(array $options = [])\n    {\n        return (string) $this->downloadAsStream($options);\n    }\n\n    /**\n     * Download an object to a specified location.\n     *\n     * For an example of setting the range header to download a subrange of the\n     * object please see {@see StorageObject::downloadAsStream()}.\n     *\n     * Example:\n     * ```\n     * $stream = $object->downloadToFile(__DIR__ . '/my-file.txt');\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/get Objects get API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/parameters#range Learn more about the Range header.\n     *\n     * @param string $path Path to download the file to.\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $encryptionKey An AES-256 customer-supplied encryption\n     *           key. It will be neccesary to provide this when a key was used\n     *           during the object's creation. If provided one must also include\n     *           an `encryptionKeySHA256`.\n     *     @type string $encryptionKeySHA256 The SHA256 hash of the\n     *           customer-supplied encryption key. It will be neccesary to\n     *           provide this when a key was used during the object's creation.\n     *           If provided one must also include an `encryptionKey`.\n     * }\n     * @return StreamInterface\n     */\n    public function downloadToFile($path, array $options = [])\n    {\n        $source = $this->downloadAsStream($options);\n        $destination = Utils::streamFor(fopen($path, 'w'));\n\n        Utils::copyToStream(\n            $source,\n            $destination\n        );\n\n        $destination->seek(0);\n\n        return $destination;\n    }\n\n    /**\n     * Download an object as a stream. The library will attempt to resume the download\n     * if a retry-able error is thrown. An attempt to fetch the remaining file will\n     * be made only if the user has not supplied a custom retry\n     * function of their own.\n     *\n     * Please note Google Cloud Storage respects the Range header as specified\n     * by [RFC7233](https://tools.ietf.org/html/rfc7233#section-3.1). See below\n     * for an example of this in action.\n     *\n     * Example:\n     * ```\n     * $stream = $object->downloadAsStream();\n     * echo $stream->getContents();\n     * ```\n     *\n     * ```\n     * // Set the Range header in order to download a subrange of the object. For more examples of\n     * // setting the Range header, please see [RFC7233](https://tools.ietf.org/html/rfc7233#section-3.1).\n     * $firstFiveBytes = '0-4'; // Get the first 5 bytes.\n     * $fromFifthByteToLastByte = '4-'; // Get the bytes starting with the 5th to the last.\n     * $lastFiveBytes = '-5'; // Get the last 5 bytes.\n     *\n     * $stream = $object->downloadAsStream([\n     *     'restOptions' => [\n     *         'headers' => [\n     *             'Range' => \"bytes=$firstFiveBytes\"\n     *         ]\n     *     ]\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/get Objects get API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/parameters#range Learn more about the Range header.\n     *\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $encryptionKey An AES-256 customer-supplied encryption\n     *           key. It will be neccesary to provide this when a key was used\n     *           during the object's creation. If provided one must also include\n     *           an `encryptionKeySHA256`.\n     *     @type string $encryptionKeySHA256 The SHA256 hash of the\n     *           customer-supplied encryption key. It will be neccesary to\n     *           provide this when a key was used during the object's creation.\n     *           If provided one must also include an `encryptionKey`.\n     * }\n     * @return StreamInterface\n     */\n    public function downloadAsStream(array $options = [])\n    {\n        return $this->connection->downloadObject(\n            $this->formatEncryptionHeaders(\n                $options\n                + $this->encryptionData\n                + array_filter($this->identity)\n            )\n        );\n    }\n\n    /**\n     * Asynchronously download an object as a stream.\n     *\n     * For an example of setting the range header to download a subrange of the\n     * object please see {@see StorageObject::downloadAsStream()}.\n     *\n     * Example:\n     * ```\n     * use Psr\\Http\\Message\\StreamInterface;\n     *\n     * $promise = $object->downloadAsStreamAsync()\n     *     ->then(function (StreamInterface $data) {\n     *         echo $data->getContents();\n     *     });\n     *\n     * $promise->wait();\n     * ```\n     *\n     * ```\n     * // Download all objects in a bucket asynchronously.\n     * use GuzzleHttp\\Promise\\Utils;\n     * use Psr\\Http\\Message\\StreamInterface;\n     *\n     * $promises = [];\n     *\n     * foreach ($bucket->objects() as $object) {\n     *     $promises[] = $object->downloadAsStreamAsync()\n     *         ->then(function (StreamInterface $data) {\n     *             echo $data->getContents();\n     *         });\n     * }\n     *\n     * Utils::unwrap($promises);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/get Objects get API documentation.\n     * @see https://cloud.google.com/storage/docs/json_api/v1/parameters#range Learn more about the Range header.\n     * @see https://github.com/guzzle/promises Learn more about Guzzle Promises\n     *\n     * @param array $options [optional] {\n     *     Configuration Options.\n     *\n     *     @type string $encryptionKey An AES-256 customer-supplied encryption\n     *           key. It will be neccesary to provide this when a key was used\n     *           during the object's creation. If provided one must also include\n     *           an `encryptionKeySHA256`.\n     *     @type string $encryptionKeySHA256 The SHA256 hash of the\n     *           customer-supplied encryption key. It will be neccesary to\n     *           provide this when a key was used during the object's creation.\n     *           If provided one must also include an `encryptionKey`.\n     * }\n     * @return PromiseInterface<StreamInterface>\n     * @experimental The experimental flag means that while we believe this method\n     *      or class is ready for use, it may change before release in backwards-\n     *      incompatible ways. Please use with caution, and test thoroughly when\n     *      upgrading.\n     */\n    public function downloadAsStreamAsync(array $options = [])\n    {\n        return $this->connection->downloadObjectAsync(\n            $this->formatEncryptionHeaders(\n                $options\n                + $this->encryptionData\n                + array_filter($this->identity)\n            )\n        );\n    }\n\n    /**\n     * Create a Signed URL for this object.\n     *\n     * Signed URLs can be complex, and it is strongly recommended you read and\n     * understand the [documentation](https://cloud.google.com/storage/docs/access-control/signed-urls).\n     *\n     * In cases where a keyfile is available, signing is accomplished in the\n     * client using your Service Account private key. In Google Compute Engine,\n     * signing is accomplished using\n     * [IAM signBlob](https://cloud.google.com/iam/credentials/reference/rest/v1/projects.serviceAccounts/signBlob).\n     * Signing using IAM requires that your service account be granted the\n     * `iam.serviceAccounts.signBlob` permission, part of the \"Service Account\n     * Token Creator\" IAM role.\n     *\n     * Additionally, signing using IAM requires different scopes. When creating\n     * an instance of {@see StorageClient}, provide the\n     * `https://www.googleapis.com/auth/cloud-platform` scopein `$options.scopes`.\n     * This scope may be used entirely in place of the scopes provided in\n     * {@see StorageClient}.\n     *\n     * App Engine and Compute Engine will attempt to sign URLs using IAM.\n     *\n     * Example:\n     * ```\n     * $url = $object->signedUrl(new \\DateTime('tomorrow'));\n     * ```\n     *\n     * ```\n     * // Create a signed URL allowing updates to the object.\n     * $url = $object->signedUrl(new \\DateTime('tomorrow'), [\n     *     'method' => 'PUT'\n     * ]);\n     * ```\n     *\n     * ```\n     * // Use Signed URLs v4\n     * $url = $object->signedUrl(new \\DateTime('tomorrow'), [\n     *     'version' => 'v4'\n     * ]);\n     * ```\n     *\n     * ```\n     * // Using Bucket-Bound hostnames\n     * // By default, a custom bucket-bound hostname will use `http` as the schema rather than `https`.\n     * // In order to get an https URI, we need to specify the proper scheme.\n     * $url = $object->signedUrl(new \\DateTime('tomorrow'), [\n     *     'version' => 'v4',\n     *     'bucketBoundHostname' => 'cdn.example.com',\n     *     'scheme' => 'https'\n     * ]);\n     * ```\n     *\n     * ```\n     * // Using virtual hosted style URIs\n     * // When true, returns a URL with the hostname `<bucket>.storage.googleapis.com`.\n     * $url = $object->signedUrl(new \\DateTime('tomorrow'), [\n     *     'virtualHostedStyle' => true\n     * ]);\n     * ````\n     *\n     * @see https://cloud.google.com/storage/docs/access-control/signed-urls Signed URLs\n     *\n     * @param Timestamp|\\DateTimeInterface|int $expires Specifies when the URL\n     *        will expire. May provide an instance of {@see \\Google\\Cloud\\Core\\Timestamp},\n     *        [http://php.net/datetimeimmutable](`\\DateTimeImmutable`), or a\n     *        UNIX timestamp as an integer.\n     * @param array $options {\n     *     Configuration Options.\n     *\n     *     @type string $bucketBoundHostname The hostname for the bucket, for\n     *           instance `cdn.example.com`. May be used for Google Cloud Load\n     *           Balancers or for custom bucket CNAMEs. **Defaults to**\n     *           `storage.googleapis.com`.\n     *     @type string $contentMd5 The MD5 digest value in base64. If you\n     *           provide this, the client must provide this HTTP header with\n     *           this same value in its request. If provided, take care to\n     *           always provide this value as a base64 encoded string.\n     *     @type string $contentType If you provide this value, the client must\n     *           provide this HTTP header set to the same value.\n     *     @type bool $forceOpenssl If true, OpenSSL will be used regardless of\n     *           whether phpseclib is available. **Defaults to** `false`.\n     *     @type array $headers If additional headers are provided, the server\n     *           will check to make sure that the client provides matching\n     *           values. Provide headers as a key/value array, where the key is\n     *           the header name, and the value is an array of header values.\n     *           Headers with multiple  values may provide values as a simple\n     *           array, or a comma-separated string. For a reference of allowed\n     *           headers, see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers).\n     *           Header values will be trimmed of leading and trailing spaces,\n     *           multiple spaces within values will be collapsed to a single\n     *           space, and line breaks will be replaced by an empty string.\n     *           V2 Signed URLs may not provide `x-goog-encryption-key` or\n     *           `x-goog-encryption-key-sha256` headers.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type array $keyFile [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n    *     @type string $keyFilePath [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *     @type string $method One of `GET`, `PUT` or `DELETE`.\n     *           **Defaults to** `GET`.\n     *     @type string $responseDisposition The\n     *           [`response-content-disposition`](http://www.iana.org/assignments/cont-disp/cont-disp.xhtml)\n     *           parameter of the signed url.\n     *     @type string $responseType The `response-content-type` parameter of the\n     *           signed url. When the server contentType is `null`, this option\n     *           may be used to control the content type of the response.\n     *     @type string $saveAsName The filename to prompt the user to save the\n     *           file as when the signed url is accessed. This is ignored if\n     *           `$options.responseDisposition` is set.\n     *     @type string $scheme Either `http` or `https`. Only used if a custom\n     *           hostname is provided via `$options.bucketBoundHostname`. If a\n     *           custom bucketBoundHostname is provided, **defaults to** `http`.\n     *           In all other cases, **defaults to** `https`.\n     *     @type string|array $scopes One or more authentication scopes to be\n     *           used with a key file. This option is ignored unless\n     *           `$options.keyFile` or `$options.keyFilePath` is set.\n     *     @type array $queryParams Additional query parameters to be included\n     *           as part of the signed URL query string. For allowed values,\n     *           see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers#query).\n     *     @type string $version One of \"v2\" or \"v4\". **Defaults to** `\"v2\"`.\n     *     @type bool $virtualHostedStyle If `true`, URL will be of form\n     *           `mybucket.storage.googleapis.com`. If `false`,\n     *           `storage.googleapis.com/mybucket`. **Defaults to** `false`.\n     * }\n     * @return string\n     * @throws \\InvalidArgumentException If the given expiration is invalid or in the past.\n     * @throws \\InvalidArgumentException If the given `$options.method` is not valid.\n     * @throws \\InvalidArgumentException If the given `$options.keyFilePath` is not valid.\n     * @throws \\InvalidArgumentException If the given custom headers are invalid.\n     * @throws \\InvalidArgumentException If the keyfile does not contain the required information.\n     * @throws \\RuntimeException If the credentials provided cannot be used for signing strings.\n     */\n    public function signedUrl($expires, array $options = [])\n    {\n        // May be overridden for testing.\n        $signingHelper = $this->pluck('helper', $options, false)\n            ?: SigningHelper::getHelper();\n\n        $resource = sprintf(\n            '/%s/%s',\n            $this->identity['bucket'],\n            $this->identity['object']\n        );\n\n        return $signingHelper->sign(\n            $this->connection,\n            $expires,\n            $resource,\n            $this->identity['generation'],\n            $options\n        );\n    }\n\n    /**\n     * Create a Signed Upload URL for this object.\n     *\n     * This method differs from {@see StorageObject::signedUrl()}\n     * in that it allows you to initiate a new resumable upload session. This\n     * can be used to allow non-authenticated users to insert an object into a\n     * bucket.\n     *\n     * In order to upload data, a session URI must be\n     * obtained by sending an HTTP POST request to the URL returned from this\n     * method. See the [Cloud Storage Documentation](https://goo.gl/b1ZiZm) for\n     * more information.\n     *\n     * If you prefer to skip this initial step, you may find\n     * {@see StorageObject::beginSignedUploadSession()} to\n     * fit your needs. Note that `beginSignedUploadSession()` cannot be used\n     * with Google Cloud PHP's Signed URL Uploader, and does not support a\n     * configurable expiration date.\n     *\n     * Example:\n     * ```\n     * $url = $object->signedUploadUrl(new \\DateTime('tomorrow'));\n     * ```\n     *\n     * ```\n     * // Use Signed URLs v4\n     * $url = $object->signedUploadUrl(new \\DateTime('tomorrow'), [\n     *     'version' => 'v4'\n     * ]);\n     * ```\n     *\n     * @param Timestamp|\\DateTimeInterface|int $expires Specifies when the URL\n     *        will expire. May provide an instance of {@see \\Google\\Cloud\\Core\\Timestamp},\n     *        [http://php.net/datetimeimmutable](`\\DateTimeImmutable`), or a\n     *        UNIX timestamp as an integer.\n     * @param array $options {\n     *     Configuration Options.\n     *\n     *     @type string $contentMd5 The MD5 digest value in base64. If you\n     *           provide this, the client must provide this HTTP header with\n     *           this same value in its request. If provided, take care to\n     *           always provide this value as a base64 encoded string.\n     *     @type string $contentType If you provide this value, the client must\n     *           provide this HTTP header set to the same value.\n     *     @type bool $forceOpenssl If true, OpenSSL will be used regardless of\n     *           whether phpseclib is available. **Defaults to** `false`.\n     *     @type array $headers If additional headers are provided, the server\n     *           will check to make sure that the client provides matching\n     *           values. Provide headers as a key/value array, where the key is\n     *           the header name, and the value is an array of header values.\n     *           Headers with multiple  values may provide values as a simple\n     *           array, or a comma-separated string. For a reference of allowed\n     *           headers, see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers).\n     *           Header values will be trimmed of leading and trailing spaces,\n     *           multiple spaces within values will be collapsed to a single\n     *           space, and line breaks will be replaced by an empty string.\n     *           V2 Signed URLs may not provide `x-goog-encryption-key` or\n     *           `x-goog-encryption-key-sha256` headers.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type array $keyFile [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n    *     @type string $keyFilePath [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *     @type string $responseDisposition The\n     *           [`response-content-disposition`](http://www.iana.org/assignments/cont-disp/cont-disp.xhtml)\n     *           parameter of the signed url.\n     *     @type string $responseType The `response-content-type` parameter of the\n     *           signed url. When the server contentType is `null`, this option\n     *           may be used to control the content type of the response.\n     *     @type string $saveAsName The filename to prompt the user to save the\n     *           file as when the signed url is accessed. This is ignored if\n     *           `$options.responseDisposition` is set.\n     *     @type string $scheme Either `http` or `https`. Only used if a custom\n     *           hostname is provided via `$options.bucketBoundHostname`. In all\n     *           other cases, `https` is used. When a custom bucketBoundHostname\n     *           is provided, **defaults to** `http`.\n     *     @type string|array $scopes One or more authentication scopes to be\n     *           used with a key file. This option is ignored unless\n     *           `$options.keyFile` or `$options.keyFilePath` is set.\n     *     @type array $queryParams Additional query parameters to be included\n     *           as part of the signed URL query string. For allowed values,\n     *           see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers#query).\n     *     @type string $version One of \"v2\" or \"v4\". **Defaults to** `\"v2\"`.\n     * }\n     * @return string\n     */\n    public function signedUploadUrl($expires, array $options = [])\n    {\n        $options += [\n            'headers' => []\n        ];\n\n        $options['headers']['x-goog-resumable'] = 'start';\n\n        unset(\n            $options['cname'],\n            $options['bucketBoundHostname'],\n            $options['saveAsName'],\n            $options['responseDisposition'],\n            $options['responseType'],\n            $options['virtualHostedStyle']\n        );\n\n        return $this->signedUrl($expires, [\n            'method' => 'POST',\n            'allowPost' => true\n        ] + $options);\n    }\n\n    /**\n     * Create a signed URL upload session.\n     *\n     * The returned URL differs from the return value of\n     * {@see StorageObject::signedUploadUrl()} in that it\n     * is ready to accept upload data immediately via an HTTP PUT request.\n     *\n     * Because an upload session is created by the client, the expiration date\n     * is not configurable. The URL generated by this method is valid for one\n     * week.\n     *\n     * Example:\n     * ```\n     * $url = $object->beginSignedUploadSession();\n     * ```\n     *\n     * ```\n     * // Use Signed URLs v4\n     * $url = $object->beginSignedUploadSession([\n     *     'version' => 'v4'\n     * ]);\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/xml-api/resumable-upload#practices Resumable Upload Best Practices\n     *\n     * @param array $options {\n     *     Configuration Options.\n     *\n     *     @type string $contentMd5 The MD5 digest value in base64. If you\n     *           provide this, the client must provide this HTTP header with\n     *           this same value in its request. If provided, take care to\n     *           always provide this value as a base64 encoded string.\n     *     @type string $contentType If you provide this value, the client must\n     *           provide this HTTP header set to the same value.\n     *     @type bool $forceOpenssl If true, OpenSSL will be used regardless of\n     *           whether phpseclib is available. **Defaults to** `false`.\n     *     @type array $headers If additional headers are provided, the server\n     *           will check to make sure that the client provides matching\n     *           values. Provide headers as a key/value array, where the key is\n     *           the header name, and the value is an array of header values.\n     *           Headers with multiple  values may provide values as a simple\n     *           array, or a comma-separated string. For a reference of allowed\n     *           headers, see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers).\n     *           Header values will be trimmed of leading and trailing spaces,\n     *           multiple spaces within values will be collapsed to a single\n     *           space, and line breaks will be replaced by an empty string.\n     *           V2 Signed URLs may not provide `x-goog-encryption-key` or\n     *           `x-goog-encryption-key-sha256` headers.\n     *     @type FetchAuthTokenInterface $credentialsFetcher A credentials\n     *           fetcher instance.\n     *     @type array $keyFile [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n    *     @type string $keyFilePath [DEPRECATED]\n     *           This option is being deprecated because of a potential security risk.\n     *           This option does not validate the credential configuration. The security\n     *           risk occurs when a credential configuration is accepted from a source\n     *           that is not under your control and used without validation on your side.\n     *           If you know that you will be loading credential configurations of a\n     *           specific type, it is recommended to create the credentials directly and\n     *           configure them using the `credentialsFetcher` option instead.\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           $credentialsFetcher = new ServiceAccountCredentials($scopes, $json);\n     *           ```\n     *           This will ensure that an unexpected credential type with potential for\n     *           malicious intent is not loaded unintentionally. You might still have to do\n     *           validation for certain credential types.\n     *           If you are loading your credential configuration from an untrusted source and have\n     *           not mitigated the risks (e.g. by validating the configuration yourself), make\n     *           these changes as soon as possible to prevent security risks to your environment.\n     *           Regardless of the method used, it is always your responsibility to validate\n     *           configurations received from external sources.\n     *           @see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials\n     *           \"Access-Control-Allow-Origin\". **Defaults to** `\"*\"`.\n     *     @type string|array $scopes One or more authentication scopes to be\n     *           used with a key file. This option is ignored unless\n     *           `$options.keyFile` or `$options.keyFilePath` is set.\n     *     @type array $queryParams Additional query parameters to be included\n     *           as part of the signed URL query string. For allowed values,\n     *           see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers#query).\n     *     @type string $version One of \"v2\" or \"v4\". **Defaults to** `\"v2\"`.\n     * }\n     * @return string\n     */\n    public function beginSignedUploadSession(array $options = [])\n    {\n        $expires = new \\DateTimeImmutable('+1 minute');\n        $startUri = $this->signedUploadUrl($expires, $options);\n\n        $uploaderOptions = $this->pluckArray([\n            'contentType',\n            'origin'\n        ], $options);\n\n        if (!isset($uploaderOptions['origin'])) {\n            $uploaderOptions['origin'] = '*';\n        }\n\n        $uploader = new SignedUrlUploader($this->connection->requestWrapper(), '', $startUri, $uploaderOptions);\n\n        return $uploader->getResumeUri();\n    }\n\n    /**\n     * Retrieves the object's details. If no object data is cached a network\n     * request will be made to retrieve it.\n     *\n     * Example:\n     * ```\n     * $info = $object->info();\n     * echo $info['size'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/get Objects get API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $encryptionKey An AES-256 customer-supplied encryption\n     *           key. It will be neccesary to provide this when a key was used\n     *           during the object's creation in order to retrieve the MD5 hash\n     *           and CRC32C checksum. If provided one must also include an\n     *           `encryptionKeySHA256`.\n     *     @type string $encryptionKeySHA256 The SHA256 hash of the\n     *           customer-supplied encryption key. It will be neccesary to\n     *           provide this when a key was used during the object's creation\n     *           in order to retrieve the MD5 hash and CRC32C checksum. If\n     *           provided one must also include an `encryptionKey`.\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the object's current generation matches the given\n     *           value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the object's current generation does not match the\n     *           given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the object's current metageneration matches the\n     *           given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the object's current metageneration does\n     *           not match the given value.\n     *     @type string $projection Determines which properties to return. May\n     *           be either 'full' or 'noAcl'.\n     * }\n     * @return array\n     */\n    public function info(array $options = [])\n    {\n        return $this->info ?: $this->reload($options);\n    }\n\n    /**\n     * Triggers a network request to reload the object's details.\n     *\n     * Example:\n     * ```\n     * $object->reload();\n     * $info = $object->info();\n     * echo $info['location'];\n     * ```\n     *\n     * @see https://cloud.google.com/storage/docs/json_api/v1/objects/get Objects get API documentation.\n     *\n     * @param array $options [optional] {\n     *     Configuration options.\n     *\n     *     @type string $encryptionKey A base64 encoded AES-256 customer-supplied\n     *           encryption key. It will be neccesary to provide this when a key\n     *           was used during the object's creation.\n     *     @type string $encryptionKeySHA256 Base64 encoded SHA256 hash of the\n     *           customer-supplied encryption key. This value will be calculated\n     *           from the `encryptionKey` on your behalf if not provided, but\n     *           for best performance it is recommended to pass in a cached\n     *           version of the already calculated SHA.\n     *     @type string $ifGenerationMatch Makes the operation conditional on\n     *           whether the object's current generation matches the given\n     *           value.\n     *     @type string $ifGenerationNotMatch Makes the operation conditional on\n     *           whether the object's current generation does not match the\n     *           given value.\n     *     @type string $ifMetagenerationMatch Makes the operation conditional\n     *           on whether the object's current metageneration matches the\n     *           given value.\n     *     @type string $ifMetagenerationNotMatch Makes the operation\n     *           conditional on whether the object's current metageneration does\n     *           not match the given value.\n     *     @type string $projection Determines which properties to return. May\n     *           be either 'full' or 'noAcl'.\n     * }\n     * @return array\n     */\n    public function reload(array $options = [])\n    {\n        return $this->info = $this->connection->getObject(\n            $this->formatEncryptionHeaders(\n                $options\n                + $this->encryptionData\n                + array_filter($this->identity)\n            )\n        );\n    }\n\n    /**\n     * Retrieves the object's name.\n     *\n     * Example:\n     * ```\n     * echo $object->name();\n     * ```\n     *\n     * @return string\n     */\n    public function name()\n    {\n        return $this->identity['object'];\n    }\n\n    /**\n     * Retrieves the object's identity.\n     *\n     * Example:\n     * ```\n     * echo $object->identity()['object'];\n     * ```\n     *\n     * @return array\n     */\n    public function identity()\n    {\n        return $this->identity;\n    }\n\n    /**\n     * Formats the object as a string in the following format:\n     * `gs://{bucket-name}/{object-name}`.\n     *\n     * Example:\n     * ```\n     * echo $object->gcsUri();\n     * ```\n     *\n     * @return string\n     */\n    public function gcsUri()\n    {\n        return sprintf(\n            'gs://%s/%s',\n            $this->identity['bucket'],\n            $this->identity['object']\n        );\n    }\n\n    /**\n     * Formats a destination based request, such as copy or rewrite.\n     *\n     * @param string|Bucket $destination The destination bucket.\n     * @param array $options Options to configure.\n     * @return array\n     */\n    private function formatDestinationRequest($destination, array $options)\n    {\n        if (!is_string($destination) && !($destination instanceof Bucket)) {\n            throw new \\InvalidArgumentException(\n                '$destination must be either a string or an instance of Bucket.'\n            );\n        }\n\n        $destAcl = $options['predefinedAcl'] ?? null;\n        $destObject = $options['name'] ?? $this->identity['object'];\n\n        unset($options['name']);\n        unset($options['predefinedAcl']);\n\n        return array_filter([\n            'destinationBucket' => $destination instanceof Bucket ? $destination->name() : $destination,\n            'destinationObject' => $destObject,\n            'destinationPredefinedAcl' => $destAcl,\n            'sourceBucket' => $this->identity['bucket'],\n            'sourceObject' => $this->identity['object'],\n            'sourceGeneration' => $this->identity['generation'],\n            'userProject' => $this->identity['userProject'],\n        ]) + $this->formatEncryptionHeaders($options + $this->encryptionData);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/StreamWrapper.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\Exception\\NotFoundException;\nuse Google\\Cloud\\Core\\Exception\\ServiceException;\nuse GuzzleHttp\\Psr7\\CachingStream;\n\n/**\n * A streamWrapper implementation for handling `gs://bucket/path/to/file.jpg`.\n * Note that you can only open a file with mode 'r', 'rb', 'rt', 'w', 'wb', 'wt', 'a', 'ab', or 'at'.\n *\n * See: http://php.net/manual/en/class.streamwrapper.php\n */\nclass StreamWrapper\n{\n    const DEFAULT_PROTOCOL = 'gs';\n\n    const FILE_WRITABLE_MODE = 33206; // 100666 in octal\n    const FILE_READABLE_MODE = 33060; // 100444 in octal\n    const DIRECTORY_WRITABLE_MODE = 16895; // 40777 in octal\n    const DIRECTORY_READABLE_MODE = 16676; // 40444 in octal\n\n    const TAIL_NAME_SUFFIX = '~';\n\n    /**\n     * @var resource|null Must be public according to the PHP documentation.\n     *\n     * Contains array of context options in form ['protocol' => ['option' => value]].\n     * Options used by StreamWrapper:\n     *\n     * flush (bool) `true`: fflush() will flush output buffer; `false`: fflush() will do nothing\n     */\n    public $context;\n\n    /**\n     * @var \\Psr\\Http\\Message\\StreamInterface\n     */\n    private $stream;\n\n    /**\n     * @var string Protocol used to open this stream\n     */\n    private $protocol;\n\n    /**\n     * @var Bucket Reference to the bucket the opened file\n     *      lives in or will live in.\n     */\n    private $bucket;\n\n    /**\n     * @var string Name of the file opened by this stream.\n     */\n    private $file;\n\n    /**\n     * @var StorageClient[] $clients The default clients to use if using\n     *      global methods such as fopen on a stream wrapper. Keyed by protocol.\n     */\n    private static $clients = [];\n\n    /**\n     * @var ObjectIterator Used for iterating through a directory\n     */\n    private $directoryIterator;\n\n    /**\n     * @var StorageObject\n     */\n    private $object;\n\n    /**\n     * @var array Context options passed to stream_open(), used for append mode and flushing.\n     */\n    private $options = [];\n\n    /**\n     * @var bool `true`: fflush() will flush output buffer and redirect output to the \"tail\" object.\n     */\n    private $flushing = false;\n\n    /**\n     * @var string|null Content type for composed object. Will be filled on first composing.\n     */\n    private $contentType = null;\n\n    /**\n     * @var bool `true`: writing the \"tail\" object, next fflush() or fclose() will compose.\n     */\n    private $composing = false;\n\n    /**\n     * @var bool `true`: data has been written to the stream.\n     */\n    private $dirty = false;\n\n    /**\n     * Ensure we close the stream when this StreamWrapper is destroyed.\n     */\n    public function __destruct()\n    {\n        $this->stream_close();\n    }\n\n    /**\n     * This is called when include/require is used on a stream.\n     */\n    public function stream_set_option()\n    {\n        return false;\n    }\n\n    /**\n     * This is called when touch is used on a stream. See:\n     * https://www.php.net/manual/en/streamwrapper.stream-metadata.php\n     */\n    public function stream_metadata($path, $option, $value)\n    {\n        if ($option == STREAM_META_TOUCH) {\n            $this->openPath($path);\n            return $this->touch();\n        }\n\n        return false;\n    }\n\n    /**\n     * Creates an empty file if it does not exist.\n     * @return bool Returns true if file exists or has been created, false otherwise.\n     */\n    private function touch()\n    {\n        $object = $this->bucket->object($this->file);\n        try {\n            if (!$object->exists()) {\n                $this->bucket->upload('', [\n                    'name' => $this->file\n                ]);\n            }\n            return true;\n        } catch (NotFoundException $e) {\n        }\n        return false;\n    }\n\n    /**\n     * Register a StreamWrapper for reading and writing to Google Storage\n     *\n     * @param StorageClient $client The StorageClient configuration to use.\n     * @param string $protocol The name of the protocol to use. **Defaults to**\n     *        `gs`.\n     * @throws \\RuntimeException\n     */\n    public static function register(StorageClient $client, $protocol = null)\n    {\n        $protocol = $protocol ?: self::DEFAULT_PROTOCOL;\n        if (!in_array($protocol, stream_get_wrappers())) {\n            if (!stream_wrapper_register($protocol, StreamWrapper::class, STREAM_IS_URL)) {\n                throw new \\RuntimeException(\"Failed to register '$protocol://' protocol\");\n            }\n            self::$clients[$protocol] = $client;\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Unregisters the SteamWrapper\n     *\n     * @param string $protocol The name of the protocol to unregister. **Defaults\n     *        to** `gs`.\n     */\n    public static function unregister($protocol = null)\n    {\n        $protocol = $protocol ?: self::DEFAULT_PROTOCOL;\n        stream_wrapper_unregister($protocol);\n        unset(self::$clients[$protocol]);\n    }\n\n    /**\n     * Get the default client to use for streams.\n     *\n     * @param string $protocol The name of the protocol to get the client for.\n     *        **Defaults to** `gs`.\n     * @return StorageClient\n     */\n    public static function getClient($protocol = null)\n    {\n        $protocol = $protocol ?: self::DEFAULT_PROTOCOL;\n        return self::$clients[$protocol];\n    }\n\n    /**\n     * Callback handler for when a stream is opened. For reads, we need to\n     * download the file to see if it can be opened.\n     *\n     * @param string $path The path of the resource to open\n     * @param string $mode The fopen mode. Currently supports ('r', 'rb', 'rt', 'w', 'wb', 'wt', 'a', 'ab', 'at')\n     * @param int $flags Bitwise options STREAM_USE_PATH|STREAM_REPORT_ERRORS|STREAM_MUST_SEEK\n     * @param string $openedPath Will be set to the path on success if STREAM_USE_PATH option is set\n     * @return bool\n     */\n    public function stream_open($path, $mode, $flags, &$openedPath)\n    {\n        $this->openPath($path);\n\n        // strip off 'b' or 't' from the mode\n        $mode = rtrim($mode, 'bt');\n\n        $options = [];\n        if ($this->context) {\n            $contextOptions = stream_context_get_options($this->context);\n            if (array_key_exists($this->protocol, $contextOptions)) {\n                $options = $contextOptions[$this->protocol] ?: [];\n            }\n\n            if (isset($options['flush'])) {\n                $this->flushing = (bool) $options['flush'];\n                unset($options['flush']);\n            }\n\n            $this->options = $options;\n        }\n\n        if ($mode == 'w') {\n            $this->stream = new WriteStream(null, $options);\n            $this->stream->setUploader(\n                $this->bucket->getStreamableUploader(\n                    $this->stream,\n                    $options + ['name' => $this->file]\n                )\n            );\n        } elseif ($mode == 'a') {\n            try {\n                $info = $this->bucket->object($this->file)->info();\n                $this->composing = ($info['size'] > 0);\n            } catch (NotFoundException $e) {\n            }\n\n            $this->stream = new WriteStream(null, $options);\n            $name = $this->file;\n            if ($this->composing) {\n                $name .= self::TAIL_NAME_SUFFIX;\n            }\n            $this->stream->setUploader(\n                $this->bucket->getStreamableUploader(\n                    $this->stream,\n                    $options + ['name' => $name]\n                )\n            );\n        } elseif ($mode == 'r') {\n            try {\n                // Lazy read from the source\n                $options['restOptions']['stream'] = true;\n                $this->stream = new ReadStream(\n                    $this->bucket->object($this->file)->downloadAsStream($options)\n                );\n\n                // Wrap the response in a caching stream to make it seekable\n                if (!$this->stream->isSeekable() && ($flags & STREAM_MUST_SEEK)) {\n                    $this->stream = new CachingStream($this->stream);\n                }\n            } catch (ServiceException $ex) {\n                return $this->returnError($ex->getMessage(), $flags);\n            }\n        } else {\n            return $this->returnError('Unknown stream_open mode.', $flags);\n        }\n\n        if ($flags & STREAM_USE_PATH) {\n            $openedPath = $path;\n        }\n        return true;\n    }\n\n    /**\n     * Callback handler for when we try to read a certain number of bytes.\n     *\n     * @param int $count The number of bytes to read.\n     *\n     * @return string\n     */\n    public function stream_read($count)\n    {\n        return $this->stream->read($count);\n    }\n\n    /**\n     * Callback handler for when we try to write data to the stream.\n     *\n     * @param string $data The data to write\n     *\n     * @return int The number of bytes written.\n     */\n    public function stream_write($data)\n    {\n        $result = $this->stream->write($data);\n        $this->dirty = $this->dirty || (bool) $result;\n        return $result;\n    }\n\n    /**\n     * Callback handler for getting data about the stream.\n     *\n     * @return array\n     */\n    public function stream_stat()\n    {\n        $mode = $this->stream->isWritable()\n            ? self::FILE_WRITABLE_MODE\n            : self::FILE_READABLE_MODE;\n        return $this->makeStatArray([\n            'mode'    => $mode,\n            'size'    => $this->stream->getSize()\n        ]);\n    }\n\n    /**\n     * Callback handler for checking to see if the stream is at the end of file.\n     *\n     * @return bool\n     */\n    public function stream_eof()\n    {\n        return $this->stream->eof();\n    }\n\n    /**\n     * Callback handler for trying to close the stream.\n     */\n    public function stream_close()\n    {\n        if (isset($this->stream)) {\n            $this->stream->close();\n        }\n\n        if ($this->composing) {\n            if ($this->dirty) {\n                $this->compose();\n                $this->dirty = false;\n            }\n            try {\n                $this->bucket->object($this->file . self::TAIL_NAME_SUFFIX)->delete();\n            } catch (NotFoundException $e) {\n            }\n            $this->composing = false;\n        }\n    }\n\n    /**\n     * Callback handler for trying to seek to a certain location in the stream.\n     *\n     * @param int $offset The stream offset to seek to\n     * @param int $whence Flag for what the offset is relative to. See:\n     *        http://php.net/manual/en/streamwrapper.stream-seek.php\n     * @return bool\n     */\n    public function stream_seek($offset, $whence = SEEK_SET)\n    {\n        if ($this->stream->isSeekable()) {\n            $this->stream->seek($offset, $whence);\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Callhack handler for inspecting our current position in the stream\n     *\n     * @return int\n     */\n    public function stream_tell()\n    {\n        return $this->stream->tell();\n    }\n\n    /**\n     * Callback handler for trying to close an opened directory.\n     *\n     * @return bool\n     */\n    public function dir_closedir()\n    {\n        return false;\n    }\n\n    /**\n     * Callback handler for trying to open a directory.\n     *\n     * @param string $path The url directory to open\n     * @param int $options Whether or not to enforce safe_mode\n     * @return bool\n     */\n    public function dir_opendir($path, $options)\n    {\n        $this->openPath($path);\n        return $this->dir_rewinddir();\n    }\n\n    /**\n     * Callback handler for reading an entry from a directory handle.\n     *\n     * @return string|bool\n     */\n    public function dir_readdir()\n    {\n        $name = $this->directoryIterator->current();\n        if ($name) {\n            $this->directoryIterator->next();\n\n            return $name;\n        }\n\n        return false;\n    }\n\n    /**\n     * Callback handler for rewind the directory handle.\n     *\n     * @return bool\n     */\n    public function dir_rewinddir()\n    {\n        try {\n            $iterator = $this->bucket->objects([\n                'prefix' => $this->file,\n                'fields' => 'items/name,nextPageToken'\n            ]);\n\n            // The delimiter options do not give us what we need, so instead we\n            // list all results matching the given prefix, enumerate the\n            // iterator, filter and transform results, and yield a fresh\n            // generator containing only the directory listing.\n            $this->directoryIterator = call_user_func(function () use ($iterator) {\n                $yielded = [];\n                $pathLen = strlen($this->makeDirectory($this->file));\n                foreach ($iterator as $object) {\n                    $name = substr($object->name(), $pathLen);\n                    $parts = explode('/', $name);\n\n                    // since the service call returns nested results and we only\n                    // want to yield results directly within the requested directory,\n                    // check if we've already yielded this value.\n                    if ($parts[0] === '' || in_array($parts[0], $yielded)) {\n                        continue;\n                    }\n\n                    $yielded[] = $parts[0];\n                    yield $name => $parts[0];\n                }\n            });\n        } catch (ServiceException $e) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Callback handler for trying to create a directory. If no file path is specified,\n     * or STREAM_MKDIR_RECURSIVE option is set, then create the bucket if it does not exist.\n     *\n     * @param string $path The url directory to create\n     * @param int $mode The permissions on the directory\n     * @param int $options Bitwise mask of options. STREAM_MKDIR_RECURSIVE\n     * @return bool\n     */\n    public function mkdir($path, $mode, $options)\n    {\n        $path = $this->makeDirectory($path);\n        $client = $this->openPath($path);\n        $predefinedAcl = $this->determineAclFromMode($mode);\n\n        try {\n            if ($options & STREAM_MKDIR_RECURSIVE || $this->file == '') {\n                if (!$this->bucket->exists()) {\n                    $client->createBucket($this->bucket->name(), [\n                        'predefinedAcl' => $predefinedAcl,\n                        'predefinedDefaultObjectAcl' => $predefinedAcl\n                    ]);\n                }\n            }\n\n            // If the file name is empty, we were trying to create a bucket. In this case,\n            // don't create the placeholder file.\n            if ($this->file != '') {\n                $bucketInfo = $this->bucket->info();\n                $ublEnabled = isset($bucketInfo['iamConfiguration']['uniformBucketLevelAccess']) &&\n                    $bucketInfo['iamConfiguration']['uniformBucketLevelAccess']['enabled'] === true;\n\n                // if bucket has uniform bucket level access enabled, don't set ACLs.\n                $acl = [];\n                if (!$ublEnabled) {\n                    $acl = [\n                        'predefinedAcl' => $predefinedAcl\n                    ];\n                }\n\n                // Fake a directory by creating an empty placeholder file whose name ends in '/'\n                $this->bucket->upload('', [\n                    'name' => $this->file,\n                ] + $acl);\n            }\n        } catch (ServiceException $e) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * Callback handler for trying to move a file or directory.\n     *\n     * @param string $from The URL to the current file\n     * @param string $to The URL of the new file location\n     * @return bool\n     */\n    public function rename($from, $to)\n    {\n        $this->openPath($from);\n        $destination = (array) parse_url($to) + [\n            'path' => '',\n            'host' => ''\n        ];\n\n        $destinationBucket = $destination['host'];\n        $destinationPath = substr($destination['path'], 1);\n\n        // loop through to rename file and children, if given path is a directory.\n        $objects = $this->bucket->objects([\n            'prefix' => $this->file\n        ]);\n\n        foreach ($objects as $obj) {\n            $oldName = $obj->name();\n            $newPath = str_replace($this->file, $destinationPath, $oldName);\n            try {\n                $obj->rename($newPath, [\n                    'destinationBucket' => $destinationBucket\n                ]);\n            } catch (ServiceException $e) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Callback handler for trying to remove a directory or a bucket. If the path is empty\n     * or '/', the bucket will be deleted.\n     *\n     * Note that the STREAM_MKDIR_RECURSIVE flag is ignored because the option cannot\n     * be set via the `rmdir()` function.\n     *\n     * @param string $path The URL directory to remove. If the path is empty or is '/',\n     *        This will attempt to destroy the bucket.\n     * @param int $options Bitwise mask of options.\n     * @return bool\n     */\n    public function rmdir($path, $options)\n    {\n        $path = $this->makeDirectory($path);\n        $this->openPath($path);\n\n        try {\n            if ($this->file == '') {\n                $this->bucket->delete();\n                return true;\n            } else {\n                return $this->unlink($path);\n            }\n        } catch (ServiceException $e) {\n            return false;\n        }\n    }\n\n    /**\n     * Callback handler for retrieving the underlaying resource\n     *\n     * @param int $castAs STREAM_CAST_FOR_SELECT|STREAM_CAST_AS_STREAM\n     * @return resource|bool\n     */\n    public function stream_cast($castAs)\n    {\n        return false;\n    }\n\n    /**\n     * Callback handler for deleting a file\n     *\n     * @param string $path The URL of the file to delete\n     * @return bool\n     */\n    public function unlink($path)\n    {\n        $client = $this->openPath($path);\n        $object = $this->bucket->object($this->file);\n\n        try {\n            $object->delete();\n            return true;\n        } catch (ServiceException $e) {\n            return false;\n        }\n    }\n\n    /**\n     * Callback handler for retrieving information about a file\n     *\n     * @param string $path The URI to the file\n     * @param int $flags Bitwise mask of options\n     * @return array|bool\n     */\n    public function url_stat($path, $flags)\n    {\n        $client = $this->openPath($path);\n\n        // if directory\n        $dir = $this->getDirectoryInfo($this->file);\n        if ($dir) {\n            return $this->urlStatDirectory($dir);\n        }\n\n        return $this->urlStatFile();\n    }\n\n    /**\n     * Callback handler for fflush() function.\n     *\n     * @return bool\n     */\n    public function stream_flush()\n    {\n        if (!$this->flushing) {\n            return false;\n        }\n\n        if (!$this->dirty) {\n            return true;\n        }\n\n        if (isset($this->stream)) {\n            $this->stream->close();\n        }\n\n        if ($this->composing) {\n            $this->compose();\n        }\n\n        $options = $this->options;\n        $this->stream = new WriteStream(null, $options);\n        $this->stream->setUploader(\n            $this->bucket->getStreamableUploader(\n                $this->stream,\n                $options + ['name' => $this->file . self::TAIL_NAME_SUFFIX]\n            )\n        );\n        $this->composing = true;\n        $this->dirty = false;\n\n        return true;\n    }\n\n    /**\n     * Parse the URL and set protocol, filename and bucket.\n     *\n     * @param  string $path URL to open\n     * @return StorageClient\n     */\n    private function openPath($path)\n    {\n        $url = (array) parse_url($path) + [\n            'scheme' => '',\n            'path' => '',\n            'host' => ''\n        ];\n        $this->protocol = $url['scheme'];\n        $this->file = ltrim($url['path'], '/');\n        $client = self::getClient($this->protocol);\n        $this->bucket = $client->bucket($url['host']);\n        return $client;\n    }\n\n    /**\n     * Given a path, ensure that we return a path that looks like a directory\n     *\n     * @param  string $path\n     * @return string\n     */\n    private function makeDirectory($path)\n    {\n        if ($path == '' or $path == '/') {\n            return '';\n        }\n\n        if (substr($path, -1) == '/') {\n            return $path;\n        }\n\n        return $path . '/';\n    }\n\n    /**\n     * Calculate the `url_stat` response for a directory\n     *\n     * @return array|bool\n     */\n    private function urlStatDirectory(StorageObject $object)\n    {\n        $stats = [];\n        $info = $object->info();\n\n        // equivalent to 40777 and 40444 in octal\n        $stats['mode'] = $this->bucket->isWritable()\n            ? self::DIRECTORY_WRITABLE_MODE\n            : self::DIRECTORY_READABLE_MODE;\n        $this->statsFromFileInfo($info, $stats);\n\n        return $this->makeStatArray($stats);\n    }\n\n    /**\n     * Calculate the `url_stat` response for a file\n     *\n     * @return array|bool\n     */\n    private function urlStatFile()\n    {\n        try {\n            $this->object = $this->bucket->object($this->file);\n            $info = $this->object->info();\n        } catch (ServiceException $e) {\n            // couldn't stat file\n            return false;\n        }\n\n        // equivalent to 100666 and 100444 in octal\n        $stats = [\n            'mode' => $this->bucket->isWritable()\n                ? self::FILE_WRITABLE_MODE\n                : self::FILE_READABLE_MODE\n        ];\n        $this->statsFromFileInfo($info, $stats);\n        return $this->makeStatArray($stats);\n    }\n\n    /**\n     * Given a `StorageObject` info array, extract the available fields into the\n     * provided `$stats` array.\n     *\n     * @param array $info Array provided from a `StorageObject`.\n     * @param array $stats Array to put the calculated stats into.\n     */\n    private function statsFromFileInfo(array &$info, array &$stats)\n    {\n        $stats['size'] = (isset($info['size']))\n            ? (int) $info['size']\n            : null;\n\n        $stats['mtime'] = (isset($info['updated']))\n            ? strtotime($info['updated'])\n            : null;\n\n        $stats['ctime'] = (isset($info['timeCreated']))\n            ? strtotime($info['timeCreated'])\n            : null;\n    }\n\n    /**\n     * Get the given path as a directory.\n     *\n     * In list objects calls, directories are returned with a trailing slash. By\n     * providing the given path with a trailing slash as a list prefix, we can\n     * check whether the given path exists as a directory.\n     *\n     * If the path does not exist or is not a directory, return null.\n     *\n     * @param  string $path\n     * @return StorageObject|null\n     */\n    private function getDirectoryInfo($path)\n    {\n        $scan = $this->bucket->objects([\n            'prefix' => $this->makeDirectory($path),\n            'resultLimit' => 1,\n            'fields' => 'items/name,items/size,items/updated,items/timeCreated,nextPageToken'\n        ]);\n\n        return $scan->current();\n    }\n\n    /**\n     * Returns the associative array that a `stat()` response expects using the\n     * provided stats. Defaults the remaining fields to 0.\n     *\n     * @param  array $stats Sparse stats entries to set.\n     * @return array\n     */\n    private function makeStatArray($stats)\n    {\n        return array_merge(\n            array_fill_keys([\n                'dev',\n                'ino',\n                'mode',\n                'nlink',\n                'uid',\n                'gid',\n                'rdev',\n                'size',\n                'atime',\n                'mtime',\n                'ctime',\n                'blksize',\n                'blocks'\n            ], 0),\n            $stats\n        );\n    }\n\n    /**\n     * Helper for whether or not to trigger an error or just return false on an error.\n     *\n     * @param  string $message The PHP error message to emit.\n     * @param  int $flags Bitwise mask of options (STREAM_REPORT_ERRORS)\n     * @return bool Returns false\n     */\n    private function returnError($message, $flags)\n    {\n        if ($flags & STREAM_REPORT_ERRORS) {\n            trigger_error($message, E_USER_WARNING);\n        }\n        return false;\n    }\n\n    /**\n     * Helper for determining which predefinedAcl to use given a mode.\n     *\n     * @param  int $mode Decimal representation of the file system permissions\n     * @return string\n     */\n    private function determineAclFromMode($mode)\n    {\n        if ($mode & 0004) {\n            // If any user can read, assume it should be publicRead.\n            return 'publicRead';\n        } elseif ($mode & 0040) {\n            // If any group user can read, assume it should be projectPrivate.\n            return 'projectPrivate';\n        }\n\n        // Otherwise, assume only the project/bucket owner can use the bucket.\n        return 'private';\n    }\n\n    private function compose()\n    {\n        if (!isset($this->contentType)) {\n            $info = $this->bucket->object($this->file)->info();\n            $this->contentType = $info['contentType'] ?: 'application/octet-stream';\n        }\n        $options = ['destination' => ['contentType' => $this->contentType]];\n        $this->bucket->compose([$this->file, $this->file . self::TAIL_NAME_SUFFIX], $this->file, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/cloud-storage/src/WriteStream.php",
    "content": "<?php\n/**\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\Cloud\\Storage;\n\nuse Google\\Cloud\\Core\\Upload\\AbstractUploader;\nuse GuzzleHttp\\Psr7\\BufferStream;\nuse GuzzleHttp\\Psr7\\StreamDecoratorTrait;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * A Stream implementation that uploads in chunks to a provided uploader when\n * we reach a certain chunkSize. Upon `close`, we will upload the remaining chunk.\n */\nclass WriteStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    private $uploader;\n    private $stream;\n    private $chunkSize = 262144;\n    private $hasWritten = false;\n\n    /**\n     * Create a new WriteStream instance\n     *\n     * @param AbstractUploader $uploader The uploader to use.\n     * @param array $options [optional] {\n     *      Configuration options.\n     *\n     *      @type int $chunkSize The size of the buffer above which we attempt to\n     *            upload data\n     * }\n     */\n    public function __construct(?AbstractUploader $uploader = null, $options = [])\n    {\n        if ($uploader) {\n            $this->setUploader($uploader);\n        }\n        if (array_key_exists('chunkSize', $options)) {\n            $this->chunkSize = $options['chunkSize'];\n        }\n        $this->stream = new BufferStream($this->chunkSize);\n    }\n\n    /**\n     * Close the stream. Uploads any remaining data.\n     */\n    public function close(): void\n    {\n        if ($this->uploader && $this->hasWritten) {\n            $this->uploader->upload();\n            $this->uploader = null;\n        }\n    }\n\n    /**\n     * Write to the stream. If we pass the chunkable size, upload the available chunk.\n     *\n     * @param  string $data Data to write\n     * @return int The number of bytes written\n     * @throws \\RuntimeException\n     */\n    public function write($data): int\n    {\n        if (!isset($this->uploader)) {\n            throw new \\RuntimeException('No uploader set.');\n        }\n\n        // Ensure we have a resume uri here because we need to create the streaming\n        // upload before we have data (size of 0).\n        $this->uploader->getResumeUri();\n        $this->hasWritten = true;\n\n        if (!$this->stream->write($data)) {\n            $this->uploader->upload($this->getChunkedWriteSize());\n        }\n        return strlen($data);\n    }\n\n    /**\n     * Set the uploader for this class. You may need to set this after initialization\n     * if the uploader depends on this stream.\n     *\n     * @param AbstractUploader $uploader The new uploader to use.\n     */\n    public function setUploader($uploader): void\n    {\n        $this->uploader = $uploader;\n    }\n\n    private function getChunkedWriteSize(): int\n    {\n        return (int) floor($this->getSize() / $this->chunkSize) * $this->chunkSize;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/CHANGELOG.md",
    "content": "# Changelog\n\n## [4.5.0](https://github.com/googleapis/common-protos-php/compare/v4.4.0...v4.5.0) (2023-11-29)\n\n\n### Features\n\n* Add auto_populated_fields to google.api.MethodSettings ([#74](https://github.com/googleapis/common-protos-php/issues/74)) ([d739417](https://github.com/googleapis/common-protos-php/commit/d7394176eb95f0e92af4e93746dba8f515ba9bc2))\n\n## [4.4.0](https://github.com/googleapis/common-protos-php/compare/v4.3.0...v4.4.0) (2023-10-02)\n\n\n### Features\n\n* Public google.api.FieldInfo type and extension ([#71](https://github.com/googleapis/common-protos-php/issues/71)) ([4002074](https://github.com/googleapis/common-protos-php/commit/40020744c65e7561dec08e1cd2994afcc51ec771))\n\n## [4.3.0](https://github.com/googleapis/common-protos-php/compare/v4.2.0...v4.3.0) (2023-08-22)\n\n\n### Features\n\n* Add new FieldBehavior value IDENTIFIER ([#67](https://github.com/googleapis/common-protos-php/issues/67)) ([6c6c21f](https://github.com/googleapis/common-protos-php/commit/6c6c21fc4a2f4711aeddad11082ed17acaf4733c))\n\n## [4.2.0](https://github.com/googleapis/common-protos-php/compare/v4.1.0...v4.2.0) (2023-07-25)\n\n\n### Features\n\n* Add a proto message to describe the `resource_type` and `resource_permission` for an API method ([#64](https://github.com/googleapis/common-protos-php/issues/64)) ([8a0ff5f](https://github.com/googleapis/common-protos-php/commit/8a0ff5f9ffcf3683fc4718e85e97f45a001a1925))\n\n## [4.1.0](https://github.com/googleapis/common-protos-php/compare/v4.0.0...v4.1.0) (2023-05-06)\n\n\n### Features\n\n* Add ConfigServiceV2.CreateBucketAsync method for creating Log Buckets asynchronously ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add ConfigServiceV2.CreateLink method for creating linked datasets for Log Analytics Buckets ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add ConfigServiceV2.DeleteLink method for deleting linked datasets ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add ConfigServiceV2.GetLink methods for describing linked datasets ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add ConfigServiceV2.ListLinks method for listing linked datasets ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add ConfigServiceV2.UpdateBucketAsync method for creating Log Buckets asynchronously ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add LogBucket.analytics_enabled field that specifies whether Log Bucket's Analytics features are enabled ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Add LogBucket.index_configs field that contains a list of Log Bucket's indexed fields and related configuration data ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n* Log Analytics features of the Cloud Logging API ([#60](https://github.com/googleapis/common-protos-php/issues/60)) ([b18d554](https://github.com/googleapis/common-protos-php/commit/b18d55421cbe1e55d62b5d149e56be23db8c4286))\n\n## [4.0.0](https://github.com/googleapis/common-protos-php/compare/v3.2.0...v4.0.0) (2023-05-01)\n\n\n### ⚠ BREAKING CHANGES\n\n* remove files unknown to owlbot ([#59](https://github.com/googleapis/common-protos-php/issues/59))\n* add owlbot automated updates ([#54](https://github.com/googleapis/common-protos-php/issues/54))\n\n### Features\n\n* Add owlbot automated updates ([#54](https://github.com/googleapis/common-protos-php/issues/54)) ([6d9134d](https://github.com/googleapis/common-protos-php/commit/6d9134d2f927e9c4aa3165e823477e25ef8ff38f))\n* Regenerate all common protos from new owlbot config ([#58](https://github.com/googleapis/common-protos-php/issues/58)) ([5dac653](https://github.com/googleapis/common-protos-php/commit/5dac653bdd60c4dbaec45e73e0ec487e5aeac9b1))\n\n\n### Miscellaneous Chores\n\n* Remove files unknown to owlbot ([#59](https://github.com/googleapis/common-protos-php/issues/59)) ([f541342](https://github.com/googleapis/common-protos-php/commit/f54134263a142e278c56f5e03e5a3d8c6f72aac3))\n\n## [3.2.0](https://github.com/googleapis/common-protos-php/compare/v3.1.0...v3.2.0) (2023-01-12)\n\n\n### Features\n\n* Refresh types ([#49](https://github.com/googleapis/common-protos-php/issues/49)) ([bd71fc0](https://github.com/googleapis/common-protos-php/commit/bd71fc05cbca1ccd94b71a42c227f0d69c688f07))\n\n## [3.1.0](https://github.com/googleapis/common-protos-php/compare/v3.0.0...v3.1.0) (2022-10-05)\n\n\n### Features\n\n* Make autoloader more efficient ([#45](https://github.com/googleapis/common-protos-php/issues/45)) ([cdff58a](https://github.com/googleapis/common-protos-php/commit/cdff58a3ff6c42e461f18f14c0bbd8e171456924))\n\n## [3.0.0](https://github.com/googleapis/common-protos-php/compare/2.1.0...v3.0.0) (2022-07-29)\n\n\n### ⚠ BREAKING CHANGES\n\n* remove longrunning classes from common protos (#41)\n\n### Miscellaneous Chores\n\n* remove longrunning classes from common protos ([#41](https://github.com/googleapis/common-protos-php/issues/41)) ([e88dd1d](https://github.com/googleapis/common-protos-php/commit/e88dd1d5dfef93358dc0bd7f3d62d09bbfd750b6))\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project,\nand in the interest of fostering an open and welcoming community,\nwe pledge to respect all people who contribute through reporting issues,\nposting feature requests, updating documentation,\nsubmitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project\na harassment-free experience for everyone,\nregardless of level of experience, gender, gender identity and expression,\nsexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery\n* Personal attacks\n* Trolling or insulting/derogatory comments\n* Public or private harassment\n* Publishing other's private information,\nsuch as physical or electronic\naddresses, without explicit permission\n* Other unethical or unprofessional conduct.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct.\nBy adopting this Code of Conduct,\nproject maintainers commit themselves to fairly and consistently\napplying these principles to every aspect of managing this project.\nProject maintainers who do not follow or enforce the Code of Conduct\nmay be permanently removed from the project team.\n\nThis code of conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior\nmay be reported by opening an issue\nor contacting one or more of the project maintainers.\n\nThis Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,\navailable at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/CONTRIBUTING.md",
    "content": "## Contributing\n\nWe are pleased that you are interested in contributing to our work.\n\n### Generated Protocol Buffer Classes\n\nThe classes in this repository are generated by the protocol buffer\ncompiler, as known as protoc. As such, we can not accept contributions\ndirectly to these generated classes. Instead, changes should be\nsuggested upstream in the [API Common Protos][api-common-protos]\nrepository.\n\n\n### Documentation\n\nWe want for both protocol buffers and the types that we have provided here\nto be understandable to everyone, including to those who may be unfamiliar\nwith the ecosystem or concepts.\n\nThat means we want our documentation to be better, and welcome anyone\nwilling to help with this. For documentation in the generated classes, please\nopen a pull request against the [API Common Protos][api-common-protos]\nrepository.\n\nAny improvements to READMEs or other non-generated documentation or\ndevelopment scripts in this repository would be greatly appreciated - please\nopen a pull request.  \n\n\n## Contributor License Agreement\n\nBefore we can accept your pull requests, you will need to sign a Contributor\nLicense Agreement (CLA):\n\n  - **If you are an individual writing original source code** and **you own the\n    intellectual property**, then you need to sign an [individual CLA][].\n  - **If you work for a company that wants to allow you to contribute your\n    work**, then you need to sign a [corporate CLA][].\n\nYou can sign these electronically (just scroll to the bottom). After that,\nwe'll be able to accept your pull requests.\n\n  [individual CLA]: https://developers.google.com/open-source/cla/individual\n  [corporate CLA]: https://developers.google.com/open-source/cla/corporate\n  [api-common-protos]: https://github.com/googleapis/api-common-protos"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/README.md",
    "content": "## Common Protos PHP\n\n[![Latest Stable Version](https://poser.pugx.org/google/common-protos/v/stable)](https://packagist.org/packages/google/common-protos) [![Packagist](https://img.shields.io/packagist/dm/google/common-protos.svg)](https://packagist.org/packages/google/common-protos)\n\n* [API documentation](https://cloud.google.com/php/docs/reference/common-protos/latest)\n\nThis repository is a home for the [protocol buffer][protobuf] types which are\ncommon dependencies throughout the Google API ecosystem, generated for PHP.\nThe protobuf definitions for these generated PHP classes are provided by the\n[Common Components AIP][common-components-aip] repository.\n\n**NOTE:** This repository is part of [Google Cloud PHP](https://github.com/googleapis/google-cloud-php). Any\nsupport requests, bug reports, or development contributions should be directed to\nthat project.\n\n## Using these generated classes\n\nThese classes are made available under an Apache license (see `LICENSE`) and\nyou are free to depend on them within your applications. They are\nconsidered stable and will not change in backwards-incompaible ways.\n\nThey are distributed as the [google/common-protos][packagist-common-protos]\ncomposer package, available on [Packagist][packagist].\n\nIn order to depend on these classes, use composer from the command line in order\nto add this package to your `composer.json` file in the `requires` section:\n\n```bash\ncomposer require google/common-protos\n```\n\n## License\n\nThese classes are licensed using the Apache 2.0 software license, a\npermissive, copyfree license. You are free to use them in your applications\nprovided the license terms are honored.\n\n[protobuf]: https://developers.google.com/protocol-buffers/\n[common-components-aip]: https://google.aip.dev/213\n[packagist-common-protos]: https://packagist.org/packages/google/common-protos/\n[packagist]: https://packagist.org/\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/VERSION",
    "content": "4.12.4\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/composer.json",
    "content": "{\n  \"name\": \"google/common-protos\",\n  \"type\": \"library\",\n  \"description\": \"Google API Common Protos for PHP\",\n  \"version\": \"4.12.4\",\n  \"keywords\": [\n    \"google\"\n  ],\n  \"homepage\": \"https://github.com/googleapis/common-protos-php\",\n  \"license\": \"Apache-2.0\",\n  \"require\": {\n    \"php\": \"^8.1\",\n    \"google/protobuf\": \"^4.31\"\n  },\n  \"require-dev\": {\n    \"phpunit/phpunit\": \"^9.6\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"Google\\\\Api\\\\\": \"src/Api\",\n      \"Google\\\\Cloud\\\\\": \"src/Cloud\",\n      \"Google\\\\Iam\\\\\": \"src/Iam\",\n      \"Google\\\\Rpc\\\\\": \"src/Rpc\",\n      \"Google\\\\Type\\\\\": \"src/Type\",\n      \"GPBMetadata\\\\Google\\\\Api\\\\\": \"metadata/Api\",\n      \"GPBMetadata\\\\Google\\\\Cloud\\\\\": \"metadata/Cloud\",\n      \"GPBMetadata\\\\Google\\\\Iam\\\\\": \"metadata/Iam\",\n      \"GPBMetadata\\\\Google\\\\Logging\\\\\": \"metadata/Logging\",\n      \"GPBMetadata\\\\Google\\\\Rpc\\\\\": \"metadata/Rpc\",\n      \"GPBMetadata\\\\Google\\\\Type\\\\\": \"metadata/Type\"\n    }\n  },\n  \"extra\": {\n    \"component\": {\n      \"id\": \"common-protos\",\n      \"target\": \"googleapis/common-protos-php.git\",\n      \"path\": \"CommonProtos\",\n      \"entry\": \"README.md\"\n    }\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Annotations.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/annotations.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Annotations\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Http::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001cgoogle/api/annotations.proto\u0012\ngoogle.api\u001a google/protobuf/descriptor.protoBn\n\u000ecom.google.apiB\u0010AnnotationsProtoP\u0001ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Billing.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/billing.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Billing\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0018google/api/billing.proto\u0012\ngoogle.api\"\u0001\n\u0007Billing\u0012E\n\u0015consumer_destinations\u0018\b \u0003(\u000b2&.google.api.Billing.BillingDestination\u001aA\n\u0012BillingDestination\u0012\u001a\n\u0012monitored_resource\u0018\u0001 \u0001(\t\u0012\u000f\n\u0007metrics\u0018\u0002 \u0003(\tBn\n\u000ecom.google.apiB\fBillingProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Context.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/context.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Context\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0018google/api/context.proto\u0012\ngoogle.api\"1\n\u0007Context\u0012&\n\u0005rules\u0018\u0001 \u0003(\u000b2\u0017.google.api.ContextRule\"\u0001\n\u000bContextRule\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012\u0011\n\trequested\u0018\u0002 \u0003(\t\u0012\u0010\n\bprovided\u0018\u0003 \u0003(\t\u0012\"\n\u001aallowed_request_extensions\u0018\u0004 \u0003(\t\u0012#\n\u001ballowed_response_extensions\u0018\u0005 \u0003(\tBn\n\u000ecom.google.apiB\fContextProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Control.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/control.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Control\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Policy::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0018google/api/control.proto\u0012\ngoogle.api\"Q\n\u0007Control\u0012\u0013\n\u000benvironment\u0018\u0001 \u0001(\t\u00121\n\u000fmethod_policies\u0018\u0004 \u0003(\u000b2\u0018.google.api.MethodPolicyBn\n\u000ecom.google.apiB\fControlProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Documentation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/documentation.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Documentation\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0004\n\u001egoogle/api/documentation.proto\u0012\ngoogle.api\"\u0001\n\rDocumentation\u0012\u000f\n\u0007summary\u0018\u0001 \u0001(\t\u0012\u001f\n\u0005pages\u0018\u0005 \u0003(\u000b2\u0010.google.api.Page\u0012,\n\u0005rules\u0018\u0003 \u0003(\u000b2\u001d.google.api.DocumentationRule\u0012\u001e\n\u0016documentation_root_url\u0018\u0004 \u0001(\t\u0012\u0018\n\u0010service_root_url\u0018\u0006 \u0001(\t\u0012\u0010\n\boverview\u0018\u0002 \u0001(\t\"[\n\u0011DocumentationRule\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012\u0013\n\u000bdescription\u0018\u0002 \u0001(\t\u0012\u001f\n\u0017deprecation_description\u0018\u0003 \u0001(\t\"I\n\u0004Page\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012\u000f\n\u0007content\u0018\u0002 \u0001(\t\u0012\"\n\bsubpages\u0018\u0003 \u0003(\u000b2\u0010.google.api.PageBt\n\u000ecom.google.apiB\u0012DocumentationProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Endpoint.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/endpoint.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Endpoint\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0019google/api/endpoint.proto\u0012\ngoogle.api\"M\n\bEndpoint\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012\u000f\n\u0007aliases\u0018\u0002 \u0003(\t\u0012\u000e\n\u0006target\u0018e \u0001(\t\u0012\u0012\n\nallow_cors\u0018\u0005 \u0001(\bBo\n\u000ecom.google.apiB\rEndpointProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Httpbody.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/httpbody.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Httpbody\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0019google/api/httpbody.proto\u0012\ngoogle.api\"X\n\bHttpBody\u0012\u0014\n\fcontent_type\u0018\u0001 \u0001(\t\u0012\f\n\u0004data\u0018\u0002 \u0001(\f\u0012(\n\nextensions\u0018\u0003 \u0003(\u000b2\u0014.google.protobuf.AnyBe\n\u000ecom.google.apiB\rHttpBodyProtoP\u0001Z;google.golang.org/genproto/googleapis/api/httpbody;httpbody\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Log.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/log.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Log\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Label::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0014google/api/log.proto\u0012\ngoogle.api\"u\n\rLogDescriptor\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012+\n\u0006labels\u0018\u0002 \u0003(\u000b2\u001b.google.api.LabelDescriptor\u0012\u0013\n\u000bdescription\u0018\u0003 \u0001(\t\u0012\u0014\n\fdisplay_name\u0018\u0004 \u0001(\tBj\n\u000ecom.google.apiB\bLogProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Logging.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/logging.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Logging\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0018google/api/logging.proto\u0012\ngoogle.api\"\u0001\n\u0007Logging\u0012E\n\u0015producer_destinations\u0018\u0001 \u0003(\u000b2&.google.api.Logging.LoggingDestination\u0012E\n\u0015consumer_destinations\u0018\u0002 \u0003(\u000b2&.google.api.Logging.LoggingDestination\u001a>\n\u0012LoggingDestination\u0012\u001a\n\u0012monitored_resource\u0018\u0003 \u0001(\t\u0012\f\n\u0004logs\u0018\u0001 \u0003(\tBn\n\u000ecom.google.apiB\fLoggingProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/MonitoredResource.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitored_resource.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass MonitoredResource\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Label::initOnce();\n        \\GPBMetadata\\Google\\Api\\LaunchStage::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Struct::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0006\n#google/api/monitored_resource.proto\u0012\ngoogle.api\u001a\u001dgoogle/api/launch_stage.proto\u001a\u001cgoogle/protobuf/struct.proto\"\u0001\n\u001bMonitoredResourceDescriptor\u0012\f\n\u0004name\u0018\u0005 \u0001(\t\u0012\f\n\u0004type\u0018\u0001 \u0001(\t\u0012\u0014\n\fdisplay_name\u0018\u0002 \u0001(\t\u0012\u0013\n\u000bdescription\u0018\u0003 \u0001(\t\u0012+\n\u0006labels\u0018\u0004 \u0003(\u000b2\u001b.google.api.LabelDescriptor\u0012-\n\flaunch_stage\u0018\u0007 \u0001(\u000e2\u0017.google.api.LaunchStage\"\u0001\n\u0011MonitoredResource\u0012\f\n\u0004type\u0018\u0001 \u0001(\t\u00129\n\u0006labels\u0018\u0002 \u0003(\u000b2).google.api.MonitoredResource.LabelsEntry\u001a-\n\u000bLabelsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001\"\u0001\n\u0019MonitoredResourceMetadata\u0012.\n\rsystem_labels\u0018\u0001 \u0001(\u000b2\u0017.google.protobuf.Struct\u0012J\n\u000buser_labels\u0018\u0002 \u0003(\u000b25.google.api.MonitoredResourceMetadata.UserLabelsEntry\u001a1\n\u000fUserLabelsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001Bv\n\u000ecom.google.apiB\u0016MonitoredResourceProtoP\u0001ZCgoogle.golang.org/genproto/googleapis/api/monitoredres;monitoredres\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Monitoring.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitoring.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Monitoring\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0003\n\u001bgoogle/api/monitoring.proto\u0012\ngoogle.api\"\u0001\n\nMonitoring\u0012K\n\u0015producer_destinations\u0018\u0001 \u0003(\u000b2,.google.api.Monitoring.MonitoringDestination\u0012K\n\u0015consumer_destinations\u0018\u0002 \u0003(\u000b2,.google.api.Monitoring.MonitoringDestination\u001aD\n\u0015MonitoringDestination\u0012\u001a\n\u0012monitored_resource\u0018\u0001 \u0001(\t\u0012\u000f\n\u0007metrics\u0018\u0002 \u0003(\tBq\n\u000ecom.google.apiB\u000fMonitoringProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Policy.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/policy.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Policy\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0017google/api/policy.proto\u0012\ngoogle.api\u001a google/protobuf/descriptor.proto\"S\n\u000bFieldPolicy\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012\u001b\n\u0013resource_permission\u0018\u0002 \u0001(\t\u0012\u0015\n\rresource_type\u0018\u0003 \u0001(\t\"S\n\fMethodPolicy\u0012\u0010\n\bselector\u0018\t \u0001(\t\u00121\n\u0010request_policies\u0018\u0002 \u0003(\u000b2\u0017.google.api.FieldPolicyBm\n\u000ecom.google.apiB\u000bPolicyProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Quota.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/quota.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Quota\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0005\n\u0016google/api/quota.proto\u0012\ngoogle.api\"]\n\u0005Quota\u0012&\n\u0006limits\u0018\u0003 \u0003(\u000b2\u0016.google.api.QuotaLimit\u0012,\n\fmetric_rules\u0018\u0004 \u0003(\u000b2\u0016.google.api.MetricRule\"\u0001\n\nMetricRule\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012=\n\fmetric_costs\u0018\u0002 \u0003(\u000b2\\'.google.api.MetricRule.MetricCostsEntry\u001a2\n\u0010MetricCostsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\u0003:\u00028\u0001\"\u0002\n\nQuotaLimit\u0012\f\n\u0004name\u0018\u0006 \u0001(\t\u0012\u0013\n\u000bdescription\u0018\u0002 \u0001(\t\u0012\u0015\n\rdefault_limit\u0018\u0003 \u0001(\u0003\u0012\u0011\n\tmax_limit\u0018\u0004 \u0001(\u0003\u0012\u0011\n\tfree_tier\u0018\u0007 \u0001(\u0003\u0012\u0010\n\bduration\u0018\u0005 \u0001(\t\u0012\u000e\n\u0006metric\u0018\b \u0001(\t\u0012\f\n\u0004unit\u0018\t \u0001(\t\u00122\n\u0006values\u0018\n \u0003(\u000b2\".google.api.QuotaLimit.ValuesEntry\u0012\u0014\n\fdisplay_name\u0018\f \u0001(\t\u001a-\n\u000bValuesEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\u0003:\u00028\u0001Bl\n\u000ecom.google.apiB\nQuotaProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Routing.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/routing.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Routing\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0018google/api/routing.proto\u0012\ngoogle.api\u001a google/protobuf/descriptor.proto\"G\n\u000bRoutingRule\u00128\n\u0012routing_parameters\u0018\u0002 \u0003(\u000b2\u001c.google.api.RoutingParameter\"8\n\u0010RoutingParameter\u0012\r\n\u0005field\u0018\u0001 \u0001(\t\u0012\u0015\n\rpath_template\u0018\u0002 \u0001(\tBj\n\u000ecom.google.apiB\fRoutingProtoP\u0001ZAgoogle.golang.org/genproto/googleapis/api/annotations;annotations\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Service.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/service.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Service\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        \\GPBMetadata\\Google\\Api\\Backend::initOnce();\n        \\GPBMetadata\\Google\\Api\\Billing::initOnce();\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        \\GPBMetadata\\Google\\Api\\Context::initOnce();\n        \\GPBMetadata\\Google\\Api\\Control::initOnce();\n        \\GPBMetadata\\Google\\Api\\Documentation::initOnce();\n        \\GPBMetadata\\Google\\Api\\Endpoint::initOnce();\n        \\GPBMetadata\\Google\\Api\\Http::initOnce();\n        \\GPBMetadata\\Google\\Api\\Log::initOnce();\n        \\GPBMetadata\\Google\\Api\\Logging::initOnce();\n        \\GPBMetadata\\Google\\Api\\Metric::initOnce();\n        \\GPBMetadata\\Google\\Api\\MonitoredResource::initOnce();\n        \\GPBMetadata\\Google\\Api\\Monitoring::initOnce();\n        \\GPBMetadata\\Google\\Api\\Quota::initOnce();\n        \\GPBMetadata\\Google\\Api\\SourceInfo::initOnce();\n        \\GPBMetadata\\Google\\Api\\SystemParameter::initOnce();\n        \\GPBMetadata\\Google\\Api\\Usage::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Api::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\r\n\u0018google/api/service.proto\u0012\ngoogle.api\u001a\u0018google/api/backend.proto\u001a\u0018google/api/billing.proto\u001a\u0017google/api/client.proto\u001a\u0018google/api/context.proto\u001a\u0018google/api/control.proto\u001a\u001egoogle/api/documentation.proto\u001a\u0019google/api/endpoint.proto\u001a\u0015google/api/http.proto\u001a\u0014google/api/log.proto\u001a\u0018google/api/logging.proto\u001a\u0017google/api/metric.proto\u001a#google/api/monitored_resource.proto\u001a\u001bgoogle/api/monitoring.proto\u001a\u0016google/api/quota.proto\u001a\u001cgoogle/api/source_info.proto\u001a!google/api/system_parameter.proto\u001a\u0016google/api/usage.proto\u001a\u0019google/protobuf/api.proto\u001a\u001agoogle/protobuf/type.proto\u001a\u001egoogle/protobuf/wrappers.proto\"\b\n\u0007Service\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012\r\n\u0005title\u0018\u0002 \u0001(\t\u0012\u001b\n\u0013producer_project_id\u0018\u0016 \u0001(\t\u0012\n\n\u0002id\u0018! \u0001(\t\u0012\"\n\u0004apis\u0018\u0003 \u0003(\u000b2\u0014.google.protobuf.Api\u0012$\n\u0005types\u0018\u0004 \u0003(\u000b2\u0015.google.protobuf.Type\u0012$\n\u0005enums\u0018\u0005 \u0003(\u000b2\u0015.google.protobuf.Enum\u00120\n\rdocumentation\u0018\u0006 \u0001(\u000b2\u0019.google.api.Documentation\u0012$\n\u0007backend\u0018\b \u0001(\u000b2\u0013.google.api.Backend\u0012\u001e\n\u0004http\u0018\t \u0001(\u000b2\u0010.google.api.Http\u0012 \n\u0005quota\u0018\n \u0001(\u000b2\u0011.google.api.Quota\u00122\n\u000eauthentication\u0018\u000b \u0001(\u000b2\u001a.google.api.Authentication\u0012$\n\u0007context\u0018\f \u0001(\u000b2\u0013.google.api.Context\u0012 \n\u0005usage\u0018\u000f \u0001(\u000b2\u0011.google.api.Usage\u0012\\'\n\tendpoints\u0018\u0012 \u0003(\u000b2\u0014.google.api.Endpoint\u0012$\n\u0007control\u0018\u0015 \u0001(\u000b2\u0013.google.api.Control\u0012\\'\n\u0004logs\u0018\u0017 \u0003(\u000b2\u0019.google.api.LogDescriptor\u0012-\n\u0007metrics\u0018\u0018 \u0003(\u000b2\u001c.google.api.MetricDescriptor\u0012D\n\u0013monitored_resources\u0018\u0019 \u0003(\u000b2\\'.google.api.MonitoredResourceDescriptor\u0012$\n\u0007billing\u0018\u001a \u0001(\u000b2\u0013.google.api.Billing\u0012$\n\u0007logging\u0018\u001b \u0001(\u000b2\u0013.google.api.Logging\u0012*\n\nmonitoring\u0018\u001c \u0001(\u000b2\u0016.google.api.Monitoring\u00127\n\u0011system_parameters\u0018\u001d \u0001(\u000b2\u001c.google.api.SystemParameters\u0012+\n\u000bsource_info\u0018% \u0001(\u000b2\u0016.google.api.SourceInfo\u0012*\n\npublishing\u0018- \u0001(\u000b2\u0016.google.api.Publishing\u00124\n\u000econfig_version\u0018\u0014 \u0001(\u000b2\u001c.google.protobuf.UInt32ValueBn\n\u000ecom.google.apiB\fServiceProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/SourceInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/source_info.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass SourceInfo\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001cgoogle/api/source_info.proto\u0012\ngoogle.api\"8\n\nSourceInfo\u0012*\n\fsource_files\u0018\u0001 \u0003(\u000b2\u0014.google.protobuf.AnyBq\n\u000ecom.google.apiB\u000fSourceInfoProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/SystemParameter.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/system_parameter.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass SystemParameter\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0003\n!google/api/system_parameter.proto\u0012\ngoogle.api\"B\n\u0010SystemParameters\u0012.\n\u0005rules\u0018\u0001 \u0003(\u000b2\u001f.google.api.SystemParameterRule\"X\n\u0013SystemParameterRule\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012/\n\nparameters\u0018\u0002 \u0003(\u000b2\u001b.google.api.SystemParameter\"Q\n\u000fSystemParameter\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012\u0013\n\u000bhttp_header\u0018\u0002 \u0001(\t\u0012\u001b\n\u0013url_query_parameter\u0018\u0003 \u0001(\tBv\n\u000ecom.google.apiB\u0014SystemParameterProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Usage.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/usage.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Usage\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u0016google/api/usage.proto\u0012\ngoogle.api\"j\n\u0005Usage\u0012\u0014\n\frequirements\u0018\u0001 \u0003(\t\u0012$\n\u0005rules\u0018\u0006 \u0003(\u000b2\u0015.google.api.UsageRule\u0012%\n\u001dproducer_notification_channel\u0018\u0007 \u0001(\t\"]\n\tUsageRule\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012 \n\u0018allow_unregistered_calls\u0018\u0002 \u0001(\b\u0012\u001c\n\u0014skip_service_control\u0018\u0003 \u0001(\bBl\n\u000ecom.google.apiB\nUsageProtoP\u0001ZEgoogle.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Api/Visibility.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/visibility.proto\n\nnamespace GPBMetadata\\Google\\Api;\n\nclass Visibility\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u001bgoogle/api/visibility.proto\u0012\ngoogle.api\u001a google/protobuf/descriptor.proto\"7\n\nVisibility\u0012)\n\u0005rules\u0018\u0001 \u0003(\u000b2\u001a.google.api.VisibilityRule\"7\n\u000eVisibilityRule\u0012\u0010\n\bselector\u0018\u0001 \u0001(\t\u0012\u0013\n\u000brestriction\u0018\u0002 \u0001(\tBk\n\u000ecom.google.apiB\u000fVisibilityProtoP\u0001Z?google.golang.org/genproto/googleapis/api/visibility;visibility\u0002\u0004GAPIb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Cloud/Location/Locations.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/cloud/location/locations.proto\n\nnamespace GPBMetadata\\Google\\Cloud\\Location;\n\nclass Locations\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Annotations::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\b\n%google/cloud/location/locations.proto\u0012\u0015google.cloud.location\u001a\u0019google/protobuf/any.proto\u001a\u0017google/api/client.proto\"[\n\u0014ListLocationsRequest\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012\u000e\n\u0006filter\u0018\u0002 \u0001(\t\u0012\u0011\n\tpage_size\u0018\u0003 \u0001(\u0005\u0012\u0012\n\npage_token\u0018\u0004 \u0001(\t\"d\n\u0015ListLocationsResponse\u00122\n\tlocations\u0018\u0001 \u0003(\u000b2\u001f.google.cloud.location.Location\u0012\u0017\n\u000fnext_page_token\u0018\u0002 \u0001(\t\"\"\n\u0012GetLocationRequest\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\"\u0001\n\bLocation\u0012\f\n\u0004name\u0018\u0001 \u0001(\t\u0012\u0013\n\u000blocation_id\u0018\u0004 \u0001(\t\u0012\u0014\n\fdisplay_name\u0018\u0005 \u0001(\t\u0012;\n\u0006labels\u0018\u0002 \u0003(\u000b2+.google.cloud.location.Location.LabelsEntry\u0012&\n\bmetadata\u0018\u0003 \u0001(\u000b2\u0014.google.protobuf.Any\u001a-\n\u000bLabelsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u00012\u0003\n\tLocations\u0012\u0001\n\rListLocations\u0012+.google.cloud.location.ListLocationsRequest\u001a,.google.cloud.location.ListLocationsResponse\"?\u00029\u0012\u0014/v1/{name=locations}Z!\u0012\u001f/v1/{name=projects/*}/locations\u0012\u0001\n\u000bGetLocation\u0012).google.cloud.location.GetLocationRequest\u001a\u001f.google.cloud.location.Location\"C\u0002=\u0012\u0016/v1/{name=locations/*}Z#\u0012!/v1/{name=projects/*/locations/*}\u001aHA\u0014cloud.googleapis.comA.https://www.googleapis.com/auth/cloud-platformBo\n\u0019com.google.cloud.locationB\u000eLocationsProtoP\u0001Z=google.golang.org/genproto/googleapis/cloud/location;location\u0001\u0001b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Google/Iam/V1/IamPolicy.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/iam_policy.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1;\n\nclass IamPolicy\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Annotations::initOnce();\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        \\GPBMetadata\\Google\\Api\\FieldBehavior::initOnce();\n        \\GPBMetadata\\Google\\Api\\Resource::initOnce();\n        \\GPBMetadata\\Google\\Iam\\V1\\Options::initOnce();\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\FieldMask::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\t\n\u001egoogle/iam/v1/iam_policy.proto\u0012\rgoogle.iam.v1\u001a\u0017google/api/client.proto\u001a\u001fgoogle/api/field_behavior.proto\u001a\u0019google/api/resource.proto\u001a\u001bgoogle/iam/v1/options.proto\u001a\u001agoogle/iam/v1/policy.proto\u001a google/protobuf/field_mask.proto\"\u0001\n\u0013SetIamPolicyRequest\u0012\u001b\n\bresource\u0018\u0001 \u0001(\tB\tA\u0002A\u0003\n\u0001*\u0012*\n\u0006policy\u0018\u0002 \u0001(\u000b2\u0015.google.iam.v1.PolicyB\u0003A\u0002\u0012/\n\u000bupdate_mask\u0018\u0003 \u0001(\u000b2\u001a.google.protobuf.FieldMask\"d\n\u0013GetIamPolicyRequest\u0012\u001b\n\bresource\u0018\u0001 \u0001(\tB\tA\u0002A\u0003\n\u0001*\u00120\n\u0007options\u0018\u0002 \u0001(\u000b2\u001f.google.iam.v1.GetPolicyOptions\"R\n\u0019TestIamPermissionsRequest\u0012\u001b\n\bresource\u0018\u0001 \u0001(\tB\tA\u0002A\u0003\n\u0001*\u0012\u0018\n\u000bpermissions\u0018\u0002 \u0003(\tB\u0003A\u0002\"1\n\u001aTestIamPermissionsResponse\u0012\u0013\n\u000bpermissions\u0018\u0001 \u0003(\t2\u0003\n\tIAMPolicy\u0012t\n\fSetIamPolicy\u0012\".google.iam.v1.SetIamPolicyRequest\u001a\u0015.google.iam.v1.Policy\")\u0002#\"\u001e/v1/{resource=**}:setIamPolicy:\u0001*\u0012t\n\fGetIamPolicy\u0012\".google.iam.v1.GetIamPolicyRequest\u001a\u0015.google.iam.v1.Policy\")\u0002#\"\u001e/v1/{resource=**}:getIamPolicy:\u0001*\u0012\u0001\n\u0012TestIamPermissions\u0012(.google.iam.v1.TestIamPermissionsRequest\u001a).google.iam.v1.TestIamPermissionsResponse\"/\u0002)\"$/v1/{resource=**}:testIamPermissions:\u0001*\u001a\u001eA\u001biam-meta-api.googleapis.comB|\n\u0011com.google.iam.v1B\u000eIamPolicyProtoP\u0001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\u0002\u0013Google.Cloud.Iam.V1\u0002\u0013Google\\\\Cloud\\\\Iam\\\\V1b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Google/Iam/V1/Logging/AuditData.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/logging/audit_data.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1\\Logging;\n\nclass AuditData\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n&google/iam/v1/logging/audit_data.proto\u0012\u0015google.iam.v1.logging\"=\n\tAuditData\u00120\n\fpolicy_delta\u0018\u0002 \u0001(\u000b2\u001a.google.iam.v1.PolicyDeltaB\u0001\n\u0019com.google.iam.v1.loggingB\u000eAuditDataProtoP\u0001Z9cloud.google.com/go/iam/apiv1/logging/loggingpb;loggingpb\u0002\u001bGoogle.Cloud.Iam.V1.Loggingb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Google/Iam/V1/Options.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/options.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1;\n\nclass Options\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001bgoogle/iam/v1/options.proto\u0012\rgoogle.iam.v1\"4\n\u0010GetPolicyOptions\u0012 \n\u0018requested_policy_version\u0018\u0001 \u0001(\u0005B}\n\u0011com.google.iam.v1B\fOptionsProtoP\u0001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\u0001\u0001\u0002\u0013Google.Cloud.Iam.V1\u0002\u0013Google\\\\Cloud\\\\Iam\\\\V1b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Google/Iam/V1/ResourcePolicyMember.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/resource_policy_member.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1;\n\nclass ResourcePolicyMember\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\FieldBehavior::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n*google/iam/v1/resource_policy_member.proto\u0012\rgoogle.iam.v1\"e\n\u0014ResourcePolicyMember\u0012&\n\u0019iam_policy_name_principal\u0018\u0001 \u0001(\tB\u0003A\u0003\u0012%\n\u0018iam_policy_uid_principal\u0018\u0002 \u0001(\tB\u0003A\u0003B\u0001\n\u0011com.google.iam.v1B\u0019ResourcePolicyMemberProtoP\u0001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\u0002\u0013Google.Cloud.Iam.V1\u0002\u0013Google\\\\Cloud\\\\Iam\\\\V1b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Google/Logging/Type/HttpRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/logging/type/http_request.proto\n\nnamespace GPBMetadata\\Google\\Logging\\Type;\n\nclass HttpRequest\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Duration::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0004\n&google/logging/type/http_request.proto\u0012\u0013google.logging.type\"\u0002\n\u000bHttpRequest\u0012\u0016\n\u000erequest_method\u0018\u0001 \u0001(\t\u0012\u0013\n\u000brequest_url\u0018\u0002 \u0001(\t\u0012\u0014\n\frequest_size\u0018\u0003 \u0001(\u0003\u0012\u000e\n\u0006status\u0018\u0004 \u0001(\u0005\u0012\u0015\n\rresponse_size\u0018\u0005 \u0001(\u0003\u0012\u0012\n\nuser_agent\u0018\u0006 \u0001(\t\u0012\u0011\n\tremote_ip\u0018\u0007 \u0001(\t\u0012\u0011\n\tserver_ip\u0018\r \u0001(\t\u0012\u000f\n\u0007referer\u0018\b \u0001(\t\u0012*\n\u0007latency\u0018\u000e \u0001(\u000b2\u0019.google.protobuf.Duration\u0012\u0014\n\fcache_lookup\u0018\u000b \u0001(\b\u0012\u0011\n\tcache_hit\u0018\t \u0001(\b\u0012*\n\"cache_validated_with_origin_server\u0018\n \u0001(\b\u0012\u0018\n\u0010cache_fill_bytes\u0018\f \u0001(\u0003\u0012\u0010\n\bprotocol\u0018\u000f \u0001(\tB\u0001\n\u0017com.google.logging.typeB\u0010HttpRequestProtoP\u0001Z8google.golang.org/genproto/googleapis/logging/type;ltype\u0002\u0019Google.Cloud.Logging.Type\u0002\u0019Google\\\\Cloud\\\\Logging\\\\Type\u0002\u001cGoogle::Cloud::Logging::Typeb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Iam/V1/IamPolicy.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/iam_policy.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1;\n\nclass IamPolicy\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\Annotations::initOnce();\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        \\GPBMetadata\\Google\\Api\\FieldBehavior::initOnce();\n        \\GPBMetadata\\Google\\Api\\Resource::initOnce();\n        \\GPBMetadata\\Google\\Iam\\V1\\Options::initOnce();\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\FieldMask::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\t\n\u001egoogle/iam/v1/iam_policy.proto\u0012\rgoogle.iam.v1\u001a\u0017google/api/client.proto\u001a\u001fgoogle/api/field_behavior.proto\u001a\u0019google/api/resource.proto\u001a\u001bgoogle/iam/v1/options.proto\u001a\u001agoogle/iam/v1/policy.proto\u001a google/protobuf/field_mask.proto\"\u0001\n\u0013SetIamPolicyRequest\u0012\u001b\n\bresource\u0018\u0001 \u0001(\tB\tA\u0002A\u0003\n\u0001*\u0012*\n\u0006policy\u0018\u0002 \u0001(\u000b2\u0015.google.iam.v1.PolicyB\u0003A\u0002\u0012/\n\u000bupdate_mask\u0018\u0003 \u0001(\u000b2\u001a.google.protobuf.FieldMask\"d\n\u0013GetIamPolicyRequest\u0012\u001b\n\bresource\u0018\u0001 \u0001(\tB\tA\u0002A\u0003\n\u0001*\u00120\n\u0007options\u0018\u0002 \u0001(\u000b2\u001f.google.iam.v1.GetPolicyOptions\"R\n\u0019TestIamPermissionsRequest\u0012\u001b\n\bresource\u0018\u0001 \u0001(\tB\tA\u0002A\u0003\n\u0001*\u0012\u0018\n\u000bpermissions\u0018\u0002 \u0003(\tB\u0003A\u0002\"1\n\u001aTestIamPermissionsResponse\u0012\u0013\n\u000bpermissions\u0018\u0001 \u0003(\t2\u0003\n\tIAMPolicy\u0012t\n\fSetIamPolicy\u0012\".google.iam.v1.SetIamPolicyRequest\u001a\u0015.google.iam.v1.Policy\")\u0002#\"\u001e/v1/{resource=**}:setIamPolicy:\u0001*\u0012t\n\fGetIamPolicy\u0012\".google.iam.v1.GetIamPolicyRequest\u001a\u0015.google.iam.v1.Policy\")\u0002#\"\u001e/v1/{resource=**}:getIamPolicy:\u0001*\u0012\u0001\n\u0012TestIamPermissions\u0012(.google.iam.v1.TestIamPermissionsRequest\u001a).google.iam.v1.TestIamPermissionsResponse\"/\u0002)\"$/v1/{resource=**}:testIamPermissions:\u0001*\u001a\u001eA\u001biam-meta-api.googleapis.comB|\n\u0011com.google.iam.v1B\u000eIamPolicyProtoP\u0001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\u0002\u0013Google.Cloud.Iam.V1\u0002\u0013Google\\\\Cloud\\\\Iam\\\\V1b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Iam/V1/Logging/AuditData.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/logging/audit_data.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1\\Logging;\n\nclass AuditData\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n&google/iam/v1/logging/audit_data.proto\u0012\u0015google.iam.v1.logging\"=\n\tAuditData\u00120\n\fpolicy_delta\u0018\u0002 \u0001(\u000b2\u001a.google.iam.v1.PolicyDeltaB\u0001\n\u0019com.google.iam.v1.loggingB\u000eAuditDataProtoP\u0001Z9cloud.google.com/go/iam/apiv1/logging/loggingpb;loggingpb\u0002\u001bGoogle.Cloud.Iam.V1.Loggingb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Iam/V1/Options.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/options.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1;\n\nclass Options\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001bgoogle/iam/v1/options.proto\u0012\rgoogle.iam.v1\"4\n\u0010GetPolicyOptions\u0012 \n\u0018requested_policy_version\u0018\u0001 \u0001(\u0005B}\n\u0011com.google.iam.v1B\fOptionsProtoP\u0001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\u0001\u0001\u0002\u0013Google.Cloud.Iam.V1\u0002\u0013Google\\\\Cloud\\\\Iam\\\\V1b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Iam/V1/ResourcePolicyMember.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/resource_policy_member.proto\n\nnamespace GPBMetadata\\Google\\Iam\\V1;\n\nclass ResourcePolicyMember\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Api\\FieldBehavior::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n*google/iam/v1/resource_policy_member.proto\u0012\rgoogle.iam.v1\"e\n\u0014ResourcePolicyMember\u0012&\n\u0019iam_policy_name_principal\u0018\u0001 \u0001(\tB\u0003A\u0003\u0012%\n\u0018iam_policy_uid_principal\u0018\u0002 \u0001(\tB\u0003A\u0003B\u0001\n\u0011com.google.iam.v1B\u0019ResourcePolicyMemberProtoP\u0001Z)cloud.google.com/go/iam/apiv1/iampb;iampb\u0002\u0013Google.Cloud.Iam.V1\u0002\u0013Google\\\\Cloud\\\\Iam\\\\V1b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Logging/Type/HttpRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/logging/type/http_request.proto\n\nnamespace GPBMetadata\\Google\\Logging\\Type;\n\nclass HttpRequest\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Duration::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0004\n&google/logging/type/http_request.proto\u0012\u0013google.logging.type\"\u0002\n\u000bHttpRequest\u0012\u0016\n\u000erequest_method\u0018\u0001 \u0001(\t\u0012\u0013\n\u000brequest_url\u0018\u0002 \u0001(\t\u0012\u0014\n\frequest_size\u0018\u0003 \u0001(\u0003\u0012\u000e\n\u0006status\u0018\u0004 \u0001(\u0005\u0012\u0015\n\rresponse_size\u0018\u0005 \u0001(\u0003\u0012\u0012\n\nuser_agent\u0018\u0006 \u0001(\t\u0012\u0011\n\tremote_ip\u0018\u0007 \u0001(\t\u0012\u0011\n\tserver_ip\u0018\r \u0001(\t\u0012\u000f\n\u0007referer\u0018\b \u0001(\t\u0012*\n\u0007latency\u0018\u000e \u0001(\u000b2\u0019.google.protobuf.Duration\u0012\u0014\n\fcache_lookup\u0018\u000b \u0001(\b\u0012\u0011\n\tcache_hit\u0018\t \u0001(\b\u0012*\n\"cache_validated_with_origin_server\u0018\n \u0001(\b\u0012\u0018\n\u0010cache_fill_bytes\u0018\f \u0001(\u0003\u0012\u0010\n\bprotocol\u0018\u000f \u0001(\tB\u0001\n\u0017com.google.logging.typeB\u0010HttpRequestProtoP\u0001Z8google.golang.org/genproto/googleapis/logging/type;ltype\u0002\u0019Google.Cloud.Logging.Type\u0002\u0019Google\\\\Cloud\\\\Logging\\\\Type\u0002\u001cGoogle::Cloud::Logging::Typeb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Rpc/Context/AttributeContext.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace GPBMetadata\\Google\\Rpc\\Context;\n\nclass AttributeContext\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Duration::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Struct::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Timestamp::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0012\n*google/rpc/context/attribute_context.proto\u0012\u0012google.rpc.context\u001a\u001egoogle/protobuf/duration.proto\u001a\u001cgoogle/protobuf/struct.proto\u001a\u001fgoogle/protobuf/timestamp.proto\"\u0010\n\u0010AttributeContext\u00129\n\u0006origin\u0018\u0007 \u0001(\u000b2).google.rpc.context.AttributeContext.Peer\u00129\n\u0006source\u0018\u0001 \u0001(\u000b2).google.rpc.context.AttributeContext.Peer\u0012>\n\u000bdestination\u0018\u0002 \u0001(\u000b2).google.rpc.context.AttributeContext.Peer\u0012=\n\u0007request\u0018\u0003 \u0001(\u000b2,.google.rpc.context.AttributeContext.Request\u0012?\n\bresponse\u0018\u0004 \u0001(\u000b2-.google.rpc.context.AttributeContext.Response\u0012?\n\bresource\u0018\u0005 \u0001(\u000b2-.google.rpc.context.AttributeContext.Resource\u00125\n\u0003api\u0018\u0006 \u0001(\u000b2(.google.rpc.context.AttributeContext.Api\u0012(\n\nextensions\u0018\b \u0003(\u000b2\u0014.google.protobuf.Any\u001a\u0001\n\u0004Peer\u0012\n\n\u0002ip\u0018\u0001 \u0001(\t\u0012\f\n\u0004port\u0018\u0002 \u0001(\u0003\u0012E\n\u0006labels\u0018\u0006 \u0003(\u000b25.google.rpc.context.AttributeContext.Peer.LabelsEntry\u0012\u0011\n\tprincipal\u0018\u0007 \u0001(\t\u0012\u0013\n\u000bregion_code\u0018\b \u0001(\t\u001a-\n\u000bLabelsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001\u001aL\n\u0003Api\u0012\u000f\n\u0007service\u0018\u0001 \u0001(\t\u0012\u0011\n\toperation\u0018\u0002 \u0001(\t\u0012\u0010\n\bprotocol\u0018\u0003 \u0001(\t\u0012\u000f\n\u0007version\u0018\u0004 \u0001(\t\u001a\n\u0004Auth\u0012\u0011\n\tprincipal\u0018\u0001 \u0001(\t\u0012\u0011\n\taudiences\u0018\u0002 \u0003(\t\u0012\u0011\n\tpresenter\u0018\u0003 \u0001(\t\u0012\\'\n\u0006claims\u0018\u0004 \u0001(\u000b2\u0017.google.protobuf.Struct\u0012\u0015\n\raccess_levels\u0018\u0005 \u0003(\t\u001a\u0002\n\u0007Request\u0012\n\n\u0002id\u0018\u0001 \u0001(\t\u0012\u000e\n\u0006method\u0018\u0002 \u0001(\t\u0012J\n\u0007headers\u0018\u0003 \u0003(\u000b29.google.rpc.context.AttributeContext.Request.HeadersEntry\u0012\f\n\u0004path\u0018\u0004 \u0001(\t\u0012\f\n\u0004host\u0018\u0005 \u0001(\t\u0012\u000e\n\u0006scheme\u0018\u0006 \u0001(\t\u0012\r\n\u0005query\u0018\u0007 \u0001(\t\u0012(\n\u0004time\u0018\t \u0001(\u000b2\u001a.google.protobuf.Timestamp\u0012\f\n\u0004size\u0018\n \u0001(\u0003\u0012\u0010\n\bprotocol\u0018\u000b \u0001(\t\u0012\u000e\n\u0006reason\u0018\f \u0001(\t\u00127\n\u0004auth\u0018\r \u0001(\u000b2).google.rpc.context.AttributeContext.Auth\u001a.\n\fHeadersEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001\u001a\u0002\n\bResponse\u0012\f\n\u0004code\u0018\u0001 \u0001(\u0003\u0012\f\n\u0004size\u0018\u0002 \u0001(\u0003\u0012K\n\u0007headers\u0018\u0003 \u0003(\u000b2:.google.rpc.context.AttributeContext.Response.HeadersEntry\u0012(\n\u0004time\u0018\u0004 \u0001(\u000b2\u001a.google.protobuf.Timestamp\u00122\n\u000fbackend_latency\u0018\u0005 \u0001(\u000b2\u0019.google.protobuf.Duration\u001a.\n\fHeadersEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001\u001a\u0004\n\bResource\u0012\u000f\n\u0007service\u0018\u0001 \u0001(\t\u0012\f\n\u0004name\u0018\u0002 \u0001(\t\u0012\f\n\u0004type\u0018\u0003 \u0001(\t\u0012I\n\u0006labels\u0018\u0004 \u0003(\u000b29.google.rpc.context.AttributeContext.Resource.LabelsEntry\u0012\u000b\n\u0003uid\u0018\u0005 \u0001(\t\u0012S\n\u000bannotations\u0018\u0006 \u0003(\u000b2>.google.rpc.context.AttributeContext.Resource.AnnotationsEntry\u0012\u0014\n\fdisplay_name\u0018\u0007 \u0001(\t\u0012/\n\u000bcreate_time\u0018\b \u0001(\u000b2\u001a.google.protobuf.Timestamp\u0012/\n\u000bupdate_time\u0018\t \u0001(\u000b2\u001a.google.protobuf.Timestamp\u0012/\n\u000bdelete_time\u0018\n \u0001(\u000b2\u001a.google.protobuf.Timestamp\u0012\f\n\u0004etag\u0018\u000b \u0001(\t\u0012\u0010\n\blocation\u0018\f \u0001(\t\u001a-\n\u000bLabelsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001\u001a2\n\u0010AnnotationsEntry\u0012\u000b\n\u0003key\u0018\u0001 \u0001(\t\u0012\r\n\u0005value\u0018\u0002 \u0001(\t:\u00028\u0001B\u0001\n\u0016com.google.rpc.contextB\u0015AttributeContextProtoP\u0001ZUgoogle.golang.org/genproto/googleapis/rpc/context/attribute_context;attribute_context\u0001\u0001b\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Rpc/Context/AuditContext.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/audit_context.proto\n\nnamespace GPBMetadata\\Google\\Rpc\\Context;\n\nclass AuditContext\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Struct::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n&google/rpc/context/audit_context.proto\u0012\u0012google.rpc.context\"\u0001\n\fAuditContext\u0012\u0011\n\taudit_log\u0018\u0001 \u0001(\f\u00121\n\u0010scrubbed_request\u0018\u0002 \u0001(\u000b2\u0017.google.protobuf.Struct\u00122\n\u0011scrubbed_response\u0018\u0003 \u0001(\u000b2\u0017.google.protobuf.Struct\u0012$\n\u001cscrubbed_response_item_count\u0018\u0004 \u0001(\u0005\u0012\u0017\n\u000ftarget_resource\u0018\u0005 \u0001(\tBh\n\u0016com.google.rpc.contextB\u0011AuditContextProtoP\u0001Z9google.golang.org/genproto/googleapis/rpc/context;contextb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Rpc/Status.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/status.proto\n\nnamespace GPBMetadata\\Google\\Rpc;\n\nclass Status\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0017google/rpc/status.proto\u0012\ngoogle.rpc\"N\n\u0006Status\u0012\f\n\u0004code\u0018\u0001 \u0001(\u0005\u0012\u000f\n\u0007message\u0018\u0002 \u0001(\t\u0012%\n\u0007details\u0018\u0003 \u0003(\u000b2\u0014.google.protobuf.AnyBa\n\u000ecom.google.rpcB\u000bStatusProtoP\u0001Z7google.golang.org/genproto/googleapis/rpc/status;status\u0001\u0001\u0002\u0003RPCb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Color.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/color.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Color\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0017google/type/color.proto\u0012\u000bgoogle.type\"]\n\u0005Color\u0012\u000b\n\u0003red\u0018\u0001 \u0001(\u0002\u0012\r\n\u0005green\u0018\u0002 \u0001(\u0002\u0012\f\n\u0004blue\u0018\u0003 \u0001(\u0002\u0012*\n\u0005alpha\u0018\u0004 \u0001(\u000b2\u001b.google.protobuf.FloatValueB`\n\u000fcom.google.typeB\nColorProtoP\u0001Z6google.golang.org/genproto/googleapis/type/color;color\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Date.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/date.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Date\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0016google/type/date.proto\u0012\u000bgoogle.type\"0\n\u0004Date\u0012\f\n\u0004year\u0018\u0001 \u0001(\u0005\u0012\r\n\u0005month\u0018\u0002 \u0001(\u0005\u0012\u000b\n\u0003day\u0018\u0003 \u0001(\u0005B]\n\u000fcom.google.typeB\tDateProtoP\u0001Z4google.golang.org/genproto/googleapis/type/date;date\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Decimal.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/decimal.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Decimal\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0019google/type/decimal.proto\u0012\u000bgoogle.type\"\u0018\n\u0007Decimal\u0012\r\n\u0005value\u0018\u0001 \u0001(\tBf\n\u000fcom.google.typeB\fDecimalProtoP\u0001Z:google.golang.org/genproto/googleapis/type/decimal;decimal\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Expr.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/expr.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Expr\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0016google/type/expr.proto\u0012\u000bgoogle.type\"P\n\u0004Expr\u0012\u0012\n\nexpression\u0018\u0001 \u0001(\t\u0012\r\n\u0005title\u0018\u0002 \u0001(\t\u0012\u0013\n\u000bdescription\u0018\u0003 \u0001(\t\u0012\u0010\n\blocation\u0018\u0004 \u0001(\tBZ\n\u000fcom.google.typeB\tExprProtoP\u0001Z4google.golang.org/genproto/googleapis/type/expr;expr\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Fraction.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/fraction.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Fraction\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001agoogle/type/fraction.proto\u0012\u000bgoogle.type\"2\n\bFraction\u0012\u0011\n\tnumerator\u0018\u0001 \u0001(\u0003\u0012\u0013\n\u000bdenominator\u0018\u0002 \u0001(\u0003Bf\n\u000fcom.google.typeB\rFractionProtoP\u0001Z<google.golang.org/genproto/googleapis/type/fraction;fraction\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Interval.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/interval.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Interval\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Timestamp::initOnce();\n        $pool->internalAddGeneratedFile(\n            '\n\u0002\n\u001agoogle/type/interval.proto\u0012\u000bgoogle.type\"h\n\bInterval\u0012.\n\nstart_time\u0018\u0001 \u0001(\u000b2\u001a.google.protobuf.Timestamp\u0012,\n\bend_time\u0018\u0002 \u0001(\u000b2\u001a.google.protobuf.TimestampBi\n\u000fcom.google.typeB\rIntervalProtoP\u0001Z<google.golang.org/genproto/googleapis/type/interval;interval\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Latlng.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/latlng.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Latlng\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0018google/type/latlng.proto\u0012\u000bgoogle.type\"-\n\u0006LatLng\u0012\u0010\n\blatitude\u0018\u0001 \u0001(\u0001\u0012\u0011\n\tlongitude\u0018\u0002 \u0001(\u0001Bc\n\u000fcom.google.typeB\u000bLatLngProtoP\u0001Z8google.golang.org/genproto/googleapis/type/latlng;latlng\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/LocalizedText.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/localized_text.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass LocalizedText\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n google/type/localized_text.proto\u0012\u000bgoogle.type\"4\n\rLocalizedText\u0012\f\n\u0004text\u0018\u0001 \u0001(\t\u0012\u0015\n\rlanguage_code\u0018\u0002 \u0001(\tBz\n\u000fcom.google.typeB\u0012LocalizedTextProtoP\u0001ZHgoogle.golang.org/genproto/googleapis/type/localized_text;localized_text\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Money.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/money.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Money\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u0017google/type/money.proto\u0012\u000bgoogle.type\"<\n\u0005Money\u0012\u0015\n\rcurrency_code\u0018\u0001 \u0001(\t\u0012\r\n\u0005units\u0018\u0002 \u0001(\u0003\u0012\r\n\u0005nanos\u0018\u0003 \u0001(\u0005B`\n\u000fcom.google.typeB\nMoneyProtoP\u0001Z6google.golang.org/genproto/googleapis/type/money;money\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/PostalAddress.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/postal_address.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass PostalAddress\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0003\n google/type/postal_address.proto\u0012\u000bgoogle.type\"\u0001\n\rPostalAddress\u0012\u0010\n\brevision\u0018\u0001 \u0001(\u0005\u0012\u0013\n\u000bregion_code\u0018\u0002 \u0001(\t\u0012\u0015\n\rlanguage_code\u0018\u0003 \u0001(\t\u0012\u0013\n\u000bpostal_code\u0018\u0004 \u0001(\t\u0012\u0014\n\fsorting_code\u0018\u0005 \u0001(\t\u0012\u001b\n\u0013administrative_area\u0018\u0006 \u0001(\t\u0012\u0010\n\blocality\u0018\u0007 \u0001(\t\u0012\u0013\n\u000bsublocality\u0018\b \u0001(\t\u0012\u0015\n\raddress_lines\u0018\t \u0003(\t\u0012\u0012\n\nrecipients\u0018\n \u0003(\t\u0012\u0014\n\forganization\u0018\u000b \u0001(\tBx\n\u000fcom.google.typeB\u0012PostalAddressProtoP\u0001ZFgoogle.golang.org/genproto/googleapis/type/postaladdress;postaladdress\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Quaternion.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/quaternion.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Quaternion\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001cgoogle/type/quaternion.proto\u0012\u000bgoogle.type\"8\n\nQuaternion\u0012\t\n\u0001x\u0018\u0001 \u0001(\u0001\u0012\t\n\u0001y\u0018\u0002 \u0001(\u0001\u0012\t\n\u0001z\u0018\u0003 \u0001(\u0001\u0012\t\n\u0001w\u0018\u0004 \u0001(\u0001Bo\n\u000fcom.google.typeB\u000fQuaternionProtoP\u0001Z@google.golang.org/genproto/googleapis/type/quaternion;quaternion\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/metadata/Type/Timeofday.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/timeofday.proto\n\nnamespace GPBMetadata\\Google\\Type;\n\nclass Timeofday\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            '\n\u0001\n\u001bgoogle/type/timeofday.proto\u0012\u000bgoogle.type\"K\n\tTimeOfDay\u0012\r\n\u0005hours\u0018\u0001 \u0001(\u0005\u0012\u000f\n\u0007minutes\u0018\u0002 \u0001(\u0005\u0012\u000f\n\u0007seconds\u0018\u0003 \u0001(\u0005\u0012\r\n\u0005nanos\u0018\u0004 \u0001(\u0005Bl\n\u000fcom.google.typeB\u000eTimeOfDayProtoP\u0001Z>google.golang.org/genproto/googleapis/type/timeofday;timeofday\u0001\u0001\u0002\u0003GTPb\u0006proto3'\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\",\n    \":preserveSemverRanges\",\n    \":disableDependencyDashboard\"\n  ]\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Advice.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/config_change.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated advice about this change, used for providing more\n * information about how a change will affect the existing service.\n *\n * Generated from protobuf message <code>google.api.Advice</code>\n */\nclass Advice extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Useful description for why this advice was applied and what actions should\n     * be taken to mitigate any implied risks.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     */\n    protected $description = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $description\n     *           Useful description for why this advice was applied and what actions should\n     *           be taken to mitigate any implied risks.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\ConfigChange::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Useful description for why this advice was applied and what actions should\n     * be taken to mitigate any implied risks.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Useful description for why this advice was applied and what actions should\n     * be taken to mitigate any implied risks.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/AuthProvider.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/auth.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Configuration for an authentication provider, including support for\n * [JSON Web Token\n * (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).\n *\n * Generated from protobuf message <code>google.api.AuthProvider</code>\n */\nclass AuthProvider extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The unique identifier of the auth provider. It will be referred to by\n     * `AuthRequirement.provider_id`.\n     * Example: \"bookstore_auth\".\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     */\n    protected $id = '';\n    /**\n     * Identifies the principal that issued the JWT. See\n     * https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\n     * Usually a URL or an email address.\n     * Example: https://securetoken.google.com\n     * Example: 1234567-compute&#64;developer.gserviceaccount.com\n     *\n     * Generated from protobuf field <code>string issuer = 2;</code>\n     */\n    protected $issuer = '';\n    /**\n     * URL of the provider's public key set to validate signature of the JWT. See\n     * [OpenID\n     * Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).\n     * Optional if the key set document:\n     *  - can be retrieved from\n     *    [OpenID\n     *    Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n     *    of the issuer.\n     *  - can be inferred from the email domain of the issuer (e.g. a Google\n     *  service account).\n     * Example: https://www.googleapis.com/oauth2/v1/certs\n     *\n     * Generated from protobuf field <code>string jwks_uri = 3;</code>\n     */\n    protected $jwks_uri = '';\n    /**\n     * The list of JWT\n     * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     * that are allowed to access. A JWT containing any of these audiences will\n     * be accepted. When this setting is absent, JWTs with audiences:\n     *   - \"https://[service.name]/[google.protobuf.Api.name]\"\n     *   - \"https://[service.name]/\"\n     * will be accepted.\n     * For example, if no audiences are in the setting, LibraryService API will\n     * accept JWTs with the following audiences:\n     *   -\n     *   https://library-example.googleapis.com/google.example.library.v1.LibraryService\n     *   - https://library-example.googleapis.com/\n     * Example:\n     *     audiences: bookstore_android.apps.googleusercontent.com,\n     *                bookstore_web.apps.googleusercontent.com\n     *\n     * Generated from protobuf field <code>string audiences = 4;</code>\n     */\n    protected $audiences = '';\n    /**\n     * Redirect URL if JWT token is required but not present or is expired.\n     * Implement authorizationUrl of securityDefinitions in OpenAPI spec.\n     *\n     * Generated from protobuf field <code>string authorization_url = 5;</code>\n     */\n    protected $authorization_url = '';\n    /**\n     * Defines the locations to extract the JWT.  For now it is only used by the\n     * Cloud Endpoints to store the OpenAPI extension [x-google-jwt-locations]\n     * (https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#x-google-jwt-locations)\n     * JWT locations can be one of HTTP headers, URL query parameters or\n     * cookies. The rule is that the first match wins.\n     * If not specified,  default to use following 3 locations:\n     *    1) Authorization: Bearer\n     *    2) x-goog-iap-jwt-assertion\n     *    3) access_token query parameter\n     * Default locations can be specified as followings:\n     *    jwt_locations:\n     *    - header: Authorization\n     *      value_prefix: \"Bearer \"\n     *    - header: x-goog-iap-jwt-assertion\n     *    - query: access_token\n     *\n     * Generated from protobuf field <code>repeated .google.api.JwtLocation jwt_locations = 6;</code>\n     */\n    private $jwt_locations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $id\n     *           The unique identifier of the auth provider. It will be referred to by\n     *           `AuthRequirement.provider_id`.\n     *           Example: \"bookstore_auth\".\n     *     @type string $issuer\n     *           Identifies the principal that issued the JWT. See\n     *           https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\n     *           Usually a URL or an email address.\n     *           Example: https://securetoken.google.com\n     *           Example: 1234567-compute&#64;developer.gserviceaccount.com\n     *     @type string $jwks_uri\n     *           URL of the provider's public key set to validate signature of the JWT. See\n     *           [OpenID\n     *           Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).\n     *           Optional if the key set document:\n     *            - can be retrieved from\n     *              [OpenID\n     *              Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n     *              of the issuer.\n     *            - can be inferred from the email domain of the issuer (e.g. a Google\n     *            service account).\n     *           Example: https://www.googleapis.com/oauth2/v1/certs\n     *     @type string $audiences\n     *           The list of JWT\n     *           [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     *           that are allowed to access. A JWT containing any of these audiences will\n     *           be accepted. When this setting is absent, JWTs with audiences:\n     *             - \"https://[service.name]/[google.protobuf.Api.name]\"\n     *             - \"https://[service.name]/\"\n     *           will be accepted.\n     *           For example, if no audiences are in the setting, LibraryService API will\n     *           accept JWTs with the following audiences:\n     *             -\n     *             https://library-example.googleapis.com/google.example.library.v1.LibraryService\n     *             - https://library-example.googleapis.com/\n     *           Example:\n     *               audiences: bookstore_android.apps.googleusercontent.com,\n     *                          bookstore_web.apps.googleusercontent.com\n     *     @type string $authorization_url\n     *           Redirect URL if JWT token is required but not present or is expired.\n     *           Implement authorizationUrl of securityDefinitions in OpenAPI spec.\n     *     @type array<\\Google\\Api\\JwtLocation>|\\Google\\Protobuf\\Internal\\RepeatedField $jwt_locations\n     *           Defines the locations to extract the JWT.  For now it is only used by the\n     *           Cloud Endpoints to store the OpenAPI extension [x-google-jwt-locations]\n     *           (https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#x-google-jwt-locations)\n     *           JWT locations can be one of HTTP headers, URL query parameters or\n     *           cookies. The rule is that the first match wins.\n     *           If not specified,  default to use following 3 locations:\n     *              1) Authorization: Bearer\n     *              2) x-goog-iap-jwt-assertion\n     *              3) access_token query parameter\n     *           Default locations can be specified as followings:\n     *              jwt_locations:\n     *              - header: Authorization\n     *                value_prefix: \"Bearer \"\n     *              - header: x-goog-iap-jwt-assertion\n     *              - query: access_token\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The unique identifier of the auth provider. It will be referred to by\n     * `AuthRequirement.provider_id`.\n     * Example: \"bookstore_auth\".\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     * @return string\n     */\n    public function getId()\n    {\n        return $this->id;\n    }\n\n    /**\n     * The unique identifier of the auth provider. It will be referred to by\n     * `AuthRequirement.provider_id`.\n     * Example: \"bookstore_auth\".\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->id = $var;\n\n        return $this;\n    }\n\n    /**\n     * Identifies the principal that issued the JWT. See\n     * https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\n     * Usually a URL or an email address.\n     * Example: https://securetoken.google.com\n     * Example: 1234567-compute&#64;developer.gserviceaccount.com\n     *\n     * Generated from protobuf field <code>string issuer = 2;</code>\n     * @return string\n     */\n    public function getIssuer()\n    {\n        return $this->issuer;\n    }\n\n    /**\n     * Identifies the principal that issued the JWT. See\n     * https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\n     * Usually a URL or an email address.\n     * Example: https://securetoken.google.com\n     * Example: 1234567-compute&#64;developer.gserviceaccount.com\n     *\n     * Generated from protobuf field <code>string issuer = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setIssuer($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->issuer = $var;\n\n        return $this;\n    }\n\n    /**\n     * URL of the provider's public key set to validate signature of the JWT. See\n     * [OpenID\n     * Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).\n     * Optional if the key set document:\n     *  - can be retrieved from\n     *    [OpenID\n     *    Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n     *    of the issuer.\n     *  - can be inferred from the email domain of the issuer (e.g. a Google\n     *  service account).\n     * Example: https://www.googleapis.com/oauth2/v1/certs\n     *\n     * Generated from protobuf field <code>string jwks_uri = 3;</code>\n     * @return string\n     */\n    public function getJwksUri()\n    {\n        return $this->jwks_uri;\n    }\n\n    /**\n     * URL of the provider's public key set to validate signature of the JWT. See\n     * [OpenID\n     * Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).\n     * Optional if the key set document:\n     *  - can be retrieved from\n     *    [OpenID\n     *    Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html)\n     *    of the issuer.\n     *  - can be inferred from the email domain of the issuer (e.g. a Google\n     *  service account).\n     * Example: https://www.googleapis.com/oauth2/v1/certs\n     *\n     * Generated from protobuf field <code>string jwks_uri = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setJwksUri($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->jwks_uri = $var;\n\n        return $this;\n    }\n\n    /**\n     * The list of JWT\n     * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     * that are allowed to access. A JWT containing any of these audiences will\n     * be accepted. When this setting is absent, JWTs with audiences:\n     *   - \"https://[service.name]/[google.protobuf.Api.name]\"\n     *   - \"https://[service.name]/\"\n     * will be accepted.\n     * For example, if no audiences are in the setting, LibraryService API will\n     * accept JWTs with the following audiences:\n     *   -\n     *   https://library-example.googleapis.com/google.example.library.v1.LibraryService\n     *   - https://library-example.googleapis.com/\n     * Example:\n     *     audiences: bookstore_android.apps.googleusercontent.com,\n     *                bookstore_web.apps.googleusercontent.com\n     *\n     * Generated from protobuf field <code>string audiences = 4;</code>\n     * @return string\n     */\n    public function getAudiences()\n    {\n        return $this->audiences;\n    }\n\n    /**\n     * The list of JWT\n     * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     * that are allowed to access. A JWT containing any of these audiences will\n     * be accepted. When this setting is absent, JWTs with audiences:\n     *   - \"https://[service.name]/[google.protobuf.Api.name]\"\n     *   - \"https://[service.name]/\"\n     * will be accepted.\n     * For example, if no audiences are in the setting, LibraryService API will\n     * accept JWTs with the following audiences:\n     *   -\n     *   https://library-example.googleapis.com/google.example.library.v1.LibraryService\n     *   - https://library-example.googleapis.com/\n     * Example:\n     *     audiences: bookstore_android.apps.googleusercontent.com,\n     *                bookstore_web.apps.googleusercontent.com\n     *\n     * Generated from protobuf field <code>string audiences = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAudiences($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->audiences = $var;\n\n        return $this;\n    }\n\n    /**\n     * Redirect URL if JWT token is required but not present or is expired.\n     * Implement authorizationUrl of securityDefinitions in OpenAPI spec.\n     *\n     * Generated from protobuf field <code>string authorization_url = 5;</code>\n     * @return string\n     */\n    public function getAuthorizationUrl()\n    {\n        return $this->authorization_url;\n    }\n\n    /**\n     * Redirect URL if JWT token is required but not present or is expired.\n     * Implement authorizationUrl of securityDefinitions in OpenAPI spec.\n     *\n     * Generated from protobuf field <code>string authorization_url = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAuthorizationUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->authorization_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * Defines the locations to extract the JWT.  For now it is only used by the\n     * Cloud Endpoints to store the OpenAPI extension [x-google-jwt-locations]\n     * (https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#x-google-jwt-locations)\n     * JWT locations can be one of HTTP headers, URL query parameters or\n     * cookies. The rule is that the first match wins.\n     * If not specified,  default to use following 3 locations:\n     *    1) Authorization: Bearer\n     *    2) x-goog-iap-jwt-assertion\n     *    3) access_token query parameter\n     * Default locations can be specified as followings:\n     *    jwt_locations:\n     *    - header: Authorization\n     *      value_prefix: \"Bearer \"\n     *    - header: x-goog-iap-jwt-assertion\n     *    - query: access_token\n     *\n     * Generated from protobuf field <code>repeated .google.api.JwtLocation jwt_locations = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getJwtLocations()\n    {\n        return $this->jwt_locations;\n    }\n\n    /**\n     * Defines the locations to extract the JWT.  For now it is only used by the\n     * Cloud Endpoints to store the OpenAPI extension [x-google-jwt-locations]\n     * (https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#x-google-jwt-locations)\n     * JWT locations can be one of HTTP headers, URL query parameters or\n     * cookies. The rule is that the first match wins.\n     * If not specified,  default to use following 3 locations:\n     *    1) Authorization: Bearer\n     *    2) x-goog-iap-jwt-assertion\n     *    3) access_token query parameter\n     * Default locations can be specified as followings:\n     *    jwt_locations:\n     *    - header: Authorization\n     *      value_prefix: \"Bearer \"\n     *    - header: x-goog-iap-jwt-assertion\n     *    - query: access_token\n     *\n     * Generated from protobuf field <code>repeated .google.api.JwtLocation jwt_locations = 6;</code>\n     * @param array<\\Google\\Api\\JwtLocation>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setJwtLocations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\JwtLocation::class);\n        $this->jwt_locations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/AuthRequirement.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/auth.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * User-defined authentication requirements, including support for\n * [JSON Web Token\n * (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).\n *\n * Generated from protobuf message <code>google.api.AuthRequirement</code>\n */\nclass AuthRequirement extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * [id][google.api.AuthProvider.id] from authentication provider.\n     * Example:\n     *     provider_id: bookstore_auth\n     *\n     * Generated from protobuf field <code>string provider_id = 1;</code>\n     */\n    protected $provider_id = '';\n    /**\n     * NOTE: This will be deprecated soon, once AuthProvider.audiences is\n     * implemented and accepted in all the runtime components.\n     * The list of JWT\n     * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     * that are allowed to access. A JWT containing any of these audiences will\n     * be accepted. When this setting is absent, only JWTs with audience\n     * \"https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]\"\n     * will be accepted. For example, if no audiences are in the setting,\n     * LibraryService API will only accept JWTs with the following audience\n     * \"https://library-example.googleapis.com/google.example.library.v1.LibraryService\".\n     * Example:\n     *     audiences: bookstore_android.apps.googleusercontent.com,\n     *                bookstore_web.apps.googleusercontent.com\n     *\n     * Generated from protobuf field <code>string audiences = 2;</code>\n     */\n    protected $audiences = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $provider_id\n     *           [id][google.api.AuthProvider.id] from authentication provider.\n     *           Example:\n     *               provider_id: bookstore_auth\n     *     @type string $audiences\n     *           NOTE: This will be deprecated soon, once AuthProvider.audiences is\n     *           implemented and accepted in all the runtime components.\n     *           The list of JWT\n     *           [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     *           that are allowed to access. A JWT containing any of these audiences will\n     *           be accepted. When this setting is absent, only JWTs with audience\n     *           \"https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]\"\n     *           will be accepted. For example, if no audiences are in the setting,\n     *           LibraryService API will only accept JWTs with the following audience\n     *           \"https://library-example.googleapis.com/google.example.library.v1.LibraryService\".\n     *           Example:\n     *               audiences: bookstore_android.apps.googleusercontent.com,\n     *                          bookstore_web.apps.googleusercontent.com\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * [id][google.api.AuthProvider.id] from authentication provider.\n     * Example:\n     *     provider_id: bookstore_auth\n     *\n     * Generated from protobuf field <code>string provider_id = 1;</code>\n     * @return string\n     */\n    public function getProviderId()\n    {\n        return $this->provider_id;\n    }\n\n    /**\n     * [id][google.api.AuthProvider.id] from authentication provider.\n     * Example:\n     *     provider_id: bookstore_auth\n     *\n     * Generated from protobuf field <code>string provider_id = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProviderId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->provider_id = $var;\n\n        return $this;\n    }\n\n    /**\n     * NOTE: This will be deprecated soon, once AuthProvider.audiences is\n     * implemented and accepted in all the runtime components.\n     * The list of JWT\n     * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     * that are allowed to access. A JWT containing any of these audiences will\n     * be accepted. When this setting is absent, only JWTs with audience\n     * \"https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]\"\n     * will be accepted. For example, if no audiences are in the setting,\n     * LibraryService API will only accept JWTs with the following audience\n     * \"https://library-example.googleapis.com/google.example.library.v1.LibraryService\".\n     * Example:\n     *     audiences: bookstore_android.apps.googleusercontent.com,\n     *                bookstore_web.apps.googleusercontent.com\n     *\n     * Generated from protobuf field <code>string audiences = 2;</code>\n     * @return string\n     */\n    public function getAudiences()\n    {\n        return $this->audiences;\n    }\n\n    /**\n     * NOTE: This will be deprecated soon, once AuthProvider.audiences is\n     * implemented and accepted in all the runtime components.\n     * The list of JWT\n     * [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\n     * that are allowed to access. A JWT containing any of these audiences will\n     * be accepted. When this setting is absent, only JWTs with audience\n     * \"https://[Service_name][google.api.Service.name]/[API_name][google.protobuf.Api.name]\"\n     * will be accepted. For example, if no audiences are in the setting,\n     * LibraryService API will only accept JWTs with the following audience\n     * \"https://library-example.googleapis.com/google.example.library.v1.LibraryService\".\n     * Example:\n     *     audiences: bookstore_android.apps.googleusercontent.com,\n     *                bookstore_web.apps.googleusercontent.com\n     *\n     * Generated from protobuf field <code>string audiences = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAudiences($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->audiences = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Authentication.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/auth.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Authentication` defines the authentication configuration for API methods\n * provided by an API service.\n * Example:\n *     name: calendar.googleapis.com\n *     authentication:\n *       providers:\n *       - id: google_calendar_auth\n *         jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n *         issuer: https://securetoken.google.com\n *       rules:\n *       - selector: \"*\"\n *         requirements:\n *           provider_id: google_calendar_auth\n *       - selector: google.calendar.Delegate\n *         oauth:\n *           canonical_scopes: https://www.googleapis.com/auth/calendar.read\n *\n * Generated from protobuf message <code>google.api.Authentication</code>\n */\nclass Authentication extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of authentication rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthenticationRule rules = 3;</code>\n     */\n    private $rules;\n    /**\n     * Defines a set of authentication providers that a service supports.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthProvider providers = 4;</code>\n     */\n    private $providers;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\AuthenticationRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of authentication rules that apply to individual API methods.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *     @type array<\\Google\\Api\\AuthProvider>|\\Google\\Protobuf\\Internal\\RepeatedField $providers\n     *           Defines a set of authentication providers that a service supports.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of authentication rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthenticationRule rules = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of authentication rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthenticationRule rules = 3;</code>\n     * @param array<\\Google\\Api\\AuthenticationRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\AuthenticationRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Defines a set of authentication providers that a service supports.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthProvider providers = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getProviders()\n    {\n        return $this->providers;\n    }\n\n    /**\n     * Defines a set of authentication providers that a service supports.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthProvider providers = 4;</code>\n     * @param array<\\Google\\Api\\AuthProvider>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setProviders($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\AuthProvider::class);\n        $this->providers = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/AuthenticationRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/auth.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Authentication rules for the service.\n * By default, if a method has any authentication requirements, every request\n * must include a valid credential matching one of the requirements.\n * It's an error to include more than one kind of credential in a single\n * request.\n * If a method doesn't have any auth requirements, request credentials will be\n * ignored.\n *\n * Generated from protobuf message <code>google.api.AuthenticationRule</code>\n */\nclass AuthenticationRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * The requirements for OAuth credentials.\n     *\n     * Generated from protobuf field <code>.google.api.OAuthRequirements oauth = 2;</code>\n     */\n    protected $oauth = null;\n    /**\n     * If true, the service accepts API keys without any other credential.\n     * This flag only applies to HTTP and gRPC requests.\n     *\n     * Generated from protobuf field <code>bool allow_without_credential = 5;</code>\n     */\n    protected $allow_without_credential = false;\n    /**\n     * Requirements for additional authentication providers.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthRequirement requirements = 7;</code>\n     */\n    private $requirements;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects the methods to which this rule applies.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type \\Google\\Api\\OAuthRequirements $oauth\n     *           The requirements for OAuth credentials.\n     *     @type bool $allow_without_credential\n     *           If true, the service accepts API keys without any other credential.\n     *           This flag only applies to HTTP and gRPC requests.\n     *     @type array<\\Google\\Api\\AuthRequirement>|\\Google\\Protobuf\\Internal\\RepeatedField $requirements\n     *           Requirements for additional authentication providers.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * The requirements for OAuth credentials.\n     *\n     * Generated from protobuf field <code>.google.api.OAuthRequirements oauth = 2;</code>\n     * @return \\Google\\Api\\OAuthRequirements|null\n     */\n    public function getOauth()\n    {\n        return $this->oauth;\n    }\n\n    public function hasOauth()\n    {\n        return isset($this->oauth);\n    }\n\n    public function clearOauth()\n    {\n        unset($this->oauth);\n    }\n\n    /**\n     * The requirements for OAuth credentials.\n     *\n     * Generated from protobuf field <code>.google.api.OAuthRequirements oauth = 2;</code>\n     * @param \\Google\\Api\\OAuthRequirements $var\n     * @return $this\n     */\n    public function setOauth($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\OAuthRequirements::class);\n        $this->oauth = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, the service accepts API keys without any other credential.\n     * This flag only applies to HTTP and gRPC requests.\n     *\n     * Generated from protobuf field <code>bool allow_without_credential = 5;</code>\n     * @return bool\n     */\n    public function getAllowWithoutCredential()\n    {\n        return $this->allow_without_credential;\n    }\n\n    /**\n     * If true, the service accepts API keys without any other credential.\n     * This flag only applies to HTTP and gRPC requests.\n     *\n     * Generated from protobuf field <code>bool allow_without_credential = 5;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setAllowWithoutCredential($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->allow_without_credential = $var;\n\n        return $this;\n    }\n\n    /**\n     * Requirements for additional authentication providers.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthRequirement requirements = 7;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRequirements()\n    {\n        return $this->requirements;\n    }\n\n    /**\n     * Requirements for additional authentication providers.\n     *\n     * Generated from protobuf field <code>repeated .google.api.AuthRequirement requirements = 7;</code>\n     * @param array<\\Google\\Api\\AuthRequirement>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRequirements($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\AuthRequirement::class);\n        $this->requirements = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Backend.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/backend.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Backend` defines the backend configuration for a service.\n *\n * Generated from protobuf message <code>google.api.Backend</code>\n */\nclass Backend extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of API backend rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.BackendRule rules = 1;</code>\n     */\n    private $rules;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\BackendRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of API backend rules that apply to individual API methods.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Backend::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of API backend rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.BackendRule rules = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of API backend rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.BackendRule rules = 1;</code>\n     * @param array<\\Google\\Api\\BackendRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\BackendRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/BackendRule/PathTranslation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/backend.proto\n\nnamespace Google\\Api\\BackendRule;\n\nuse UnexpectedValueException;\n\n/**\n * Path Translation specifies how to combine the backend address with the\n * request path in order to produce the appropriate forwarding URL for the\n * request.\n * Path Translation is applicable only to HTTP-based backends. Backends which\n * do not accept requests over HTTP/HTTPS should leave `path_translation`\n * unspecified.\n *\n * Protobuf type <code>google.api.BackendRule.PathTranslation</code>\n */\nclass PathTranslation\n{\n    /**\n     * Generated from protobuf enum <code>PATH_TRANSLATION_UNSPECIFIED = 0;</code>\n     */\n    const PATH_TRANSLATION_UNSPECIFIED = 0;\n    /**\n     * Use the backend address as-is, with no modification to the path. If the\n     * URL pattern contains variables, the variable names and values will be\n     * appended to the query string. If a query string parameter and a URL\n     * pattern variable have the same name, this may result in duplicate keys in\n     * the query string.\n     * # Examples\n     * Given the following operation config:\n     *     Method path:        /api/company/{cid}/user/{uid}\n     *     Backend address:    https://example.cloudfunctions.net/getUser\n     * Requests to the following request paths will call the backend at the\n     * translated path:\n     *     Request path: /api/company/widgetworks/user/johndoe\n     *     Translated:\n     *     https://example.cloudfunctions.net/getUser?cid=widgetworks&uid=johndoe\n     *     Request path: /api/company/widgetworks/user/johndoe?timezone=EST\n     *     Translated:\n     *     https://example.cloudfunctions.net/getUser?timezone=EST&cid=widgetworks&uid=johndoe\n     *\n     * Generated from protobuf enum <code>CONSTANT_ADDRESS = 1;</code>\n     */\n    const CONSTANT_ADDRESS = 1;\n    /**\n     * The request path will be appended to the backend address.\n     * # Examples\n     * Given the following operation config:\n     *     Method path:        /api/company/{cid}/user/{uid}\n     *     Backend address:    https://example.appspot.com\n     * Requests to the following request paths will call the backend at the\n     * translated path:\n     *     Request path: /api/company/widgetworks/user/johndoe\n     *     Translated:\n     *     https://example.appspot.com/api/company/widgetworks/user/johndoe\n     *     Request path: /api/company/widgetworks/user/johndoe?timezone=EST\n     *     Translated:\n     *     https://example.appspot.com/api/company/widgetworks/user/johndoe?timezone=EST\n     *\n     * Generated from protobuf enum <code>APPEND_PATH_TO_ADDRESS = 2;</code>\n     */\n    const APPEND_PATH_TO_ADDRESS = 2;\n\n    private static $valueToName = [\n        self::PATH_TRANSLATION_UNSPECIFIED => 'PATH_TRANSLATION_UNSPECIFIED',\n        self::CONSTANT_ADDRESS => 'CONSTANT_ADDRESS',\n        self::APPEND_PATH_TO_ADDRESS => 'APPEND_PATH_TO_ADDRESS',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/BackendRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/backend.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A backend rule provides configuration for an individual API element.\n *\n * Generated from protobuf message <code>google.api.BackendRule</code>\n */\nclass BackendRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * The address of the API backend.\n     * The scheme is used to determine the backend protocol and security.\n     * The following schemes are accepted:\n     *    SCHEME        PROTOCOL    SECURITY\n     *    http://       HTTP        None\n     *    https://      HTTP        TLS\n     *    grpc://       gRPC        None\n     *    grpcs://      gRPC        TLS\n     * It is recommended to explicitly include a scheme. Leaving out the scheme\n     * may cause constrasting behaviors across platforms.\n     * If the port is unspecified, the default is:\n     * - 80 for schemes without TLS\n     * - 443 for schemes with TLS\n     * For HTTP backends, use [protocol][google.api.BackendRule.protocol]\n     * to specify the protocol version.\n     *\n     * Generated from protobuf field <code>string address = 2;</code>\n     */\n    protected $address = '';\n    /**\n     * The number of seconds to wait for a response from a request. The default\n     * varies based on the request protocol and deployment environment.\n     *\n     * Generated from protobuf field <code>double deadline = 3;</code>\n     */\n    protected $deadline = 0.0;\n    /**\n     * Deprecated, do not use.\n     *\n     * Generated from protobuf field <code>double min_deadline = 4 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $min_deadline = 0.0;\n    /**\n     * The number of seconds to wait for the completion of a long running\n     * operation. The default is no deadline.\n     *\n     * Generated from protobuf field <code>double operation_deadline = 5;</code>\n     */\n    protected $operation_deadline = 0.0;\n    /**\n     * Generated from protobuf field <code>.google.api.BackendRule.PathTranslation path_translation = 6;</code>\n     */\n    protected $path_translation = 0;\n    /**\n     * The protocol used for sending a request to the backend.\n     * The supported values are \"http/1.1\" and \"h2\".\n     * The default value is inferred from the scheme in the\n     * [address][google.api.BackendRule.address] field:\n     *    SCHEME        PROTOCOL\n     *    http://       http/1.1\n     *    https://      http/1.1\n     *    grpc://       h2\n     *    grpcs://      h2\n     * For secure HTTP backends (https://) that support HTTP/2, set this field\n     * to \"h2\" for improved performance.\n     * Configuring this field to non-default values is only supported for secure\n     * HTTP backends. This field will be ignored for all other backends.\n     * See\n     * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     * for more details on the supported values.\n     *\n     * Generated from protobuf field <code>string protocol = 9;</code>\n     */\n    protected $protocol = '';\n    /**\n     * The map between request protocol and the backend address.\n     *\n     * Generated from protobuf field <code>map<string, .google.api.BackendRule> overrides_by_request_protocol = 10;</code>\n     */\n    private $overrides_by_request_protocol;\n    protected $authentication;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects the methods to which this rule applies.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type string $address\n     *           The address of the API backend.\n     *           The scheme is used to determine the backend protocol and security.\n     *           The following schemes are accepted:\n     *              SCHEME        PROTOCOL    SECURITY\n     *              http://       HTTP        None\n     *              https://      HTTP        TLS\n     *              grpc://       gRPC        None\n     *              grpcs://      gRPC        TLS\n     *           It is recommended to explicitly include a scheme. Leaving out the scheme\n     *           may cause constrasting behaviors across platforms.\n     *           If the port is unspecified, the default is:\n     *           - 80 for schemes without TLS\n     *           - 443 for schemes with TLS\n     *           For HTTP backends, use [protocol][google.api.BackendRule.protocol]\n     *           to specify the protocol version.\n     *     @type float $deadline\n     *           The number of seconds to wait for a response from a request. The default\n     *           varies based on the request protocol and deployment environment.\n     *     @type float $min_deadline\n     *           Deprecated, do not use.\n     *     @type float $operation_deadline\n     *           The number of seconds to wait for the completion of a long running\n     *           operation. The default is no deadline.\n     *     @type int $path_translation\n     *     @type string $jwt_audience\n     *           The JWT audience is used when generating a JWT ID token for the backend.\n     *           This ID token will be added in the HTTP \"authorization\" header, and sent\n     *           to the backend.\n     *     @type bool $disable_auth\n     *           When disable_auth is true, a JWT ID token won't be generated and the\n     *           original \"Authorization\" HTTP header will be preserved. If the header is\n     *           used to carry the original token and is expected by the backend, this\n     *           field must be set to true to preserve the header.\n     *     @type string $protocol\n     *           The protocol used for sending a request to the backend.\n     *           The supported values are \"http/1.1\" and \"h2\".\n     *           The default value is inferred from the scheme in the\n     *           [address][google.api.BackendRule.address] field:\n     *              SCHEME        PROTOCOL\n     *              http://       http/1.1\n     *              https://      http/1.1\n     *              grpc://       h2\n     *              grpcs://      h2\n     *           For secure HTTP backends (https://) that support HTTP/2, set this field\n     *           to \"h2\" for improved performance.\n     *           Configuring this field to non-default values is only supported for secure\n     *           HTTP backends. This field will be ignored for all other backends.\n     *           See\n     *           https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     *           for more details on the supported values.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $overrides_by_request_protocol\n     *           The map between request protocol and the backend address.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Backend::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * The address of the API backend.\n     * The scheme is used to determine the backend protocol and security.\n     * The following schemes are accepted:\n     *    SCHEME        PROTOCOL    SECURITY\n     *    http://       HTTP        None\n     *    https://      HTTP        TLS\n     *    grpc://       gRPC        None\n     *    grpcs://      gRPC        TLS\n     * It is recommended to explicitly include a scheme. Leaving out the scheme\n     * may cause constrasting behaviors across platforms.\n     * If the port is unspecified, the default is:\n     * - 80 for schemes without TLS\n     * - 443 for schemes with TLS\n     * For HTTP backends, use [protocol][google.api.BackendRule.protocol]\n     * to specify the protocol version.\n     *\n     * Generated from protobuf field <code>string address = 2;</code>\n     * @return string\n     */\n    public function getAddress()\n    {\n        return $this->address;\n    }\n\n    /**\n     * The address of the API backend.\n     * The scheme is used to determine the backend protocol and security.\n     * The following schemes are accepted:\n     *    SCHEME        PROTOCOL    SECURITY\n     *    http://       HTTP        None\n     *    https://      HTTP        TLS\n     *    grpc://       gRPC        None\n     *    grpcs://      gRPC        TLS\n     * It is recommended to explicitly include a scheme. Leaving out the scheme\n     * may cause constrasting behaviors across platforms.\n     * If the port is unspecified, the default is:\n     * - 80 for schemes without TLS\n     * - 443 for schemes with TLS\n     * For HTTP backends, use [protocol][google.api.BackendRule.protocol]\n     * to specify the protocol version.\n     *\n     * Generated from protobuf field <code>string address = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAddress($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->address = $var;\n\n        return $this;\n    }\n\n    /**\n     * The number of seconds to wait for a response from a request. The default\n     * varies based on the request protocol and deployment environment.\n     *\n     * Generated from protobuf field <code>double deadline = 3;</code>\n     * @return float\n     */\n    public function getDeadline()\n    {\n        return $this->deadline;\n    }\n\n    /**\n     * The number of seconds to wait for a response from a request. The default\n     * varies based on the request protocol and deployment environment.\n     *\n     * Generated from protobuf field <code>double deadline = 3;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setDeadline($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->deadline = $var;\n\n        return $this;\n    }\n\n    /**\n     * Deprecated, do not use.\n     *\n     * Generated from protobuf field <code>double min_deadline = 4 [deprecated = true];</code>\n     * @return float\n     * @deprecated\n     */\n    public function getMinDeadline()\n    {\n        if ($this->min_deadline !== 0.0) {\n            @trigger_error('min_deadline is deprecated.', E_USER_DEPRECATED);\n        }\n        return $this->min_deadline;\n    }\n\n    /**\n     * Deprecated, do not use.\n     *\n     * Generated from protobuf field <code>double min_deadline = 4 [deprecated = true];</code>\n     * @param float $var\n     * @return $this\n     * @deprecated\n     */\n    public function setMinDeadline($var)\n    {\n        @trigger_error('min_deadline is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkDouble($var);\n        $this->min_deadline = $var;\n\n        return $this;\n    }\n\n    /**\n     * The number of seconds to wait for the completion of a long running\n     * operation. The default is no deadline.\n     *\n     * Generated from protobuf field <code>double operation_deadline = 5;</code>\n     * @return float\n     */\n    public function getOperationDeadline()\n    {\n        return $this->operation_deadline;\n    }\n\n    /**\n     * The number of seconds to wait for the completion of a long running\n     * operation. The default is no deadline.\n     *\n     * Generated from protobuf field <code>double operation_deadline = 5;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setOperationDeadline($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->operation_deadline = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.api.BackendRule.PathTranslation path_translation = 6;</code>\n     * @return int\n     */\n    public function getPathTranslation()\n    {\n        return $this->path_translation;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.api.BackendRule.PathTranslation path_translation = 6;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setPathTranslation($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\BackendRule\\PathTranslation::class);\n        $this->path_translation = $var;\n\n        return $this;\n    }\n\n    /**\n     * The JWT audience is used when generating a JWT ID token for the backend.\n     * This ID token will be added in the HTTP \"authorization\" header, and sent\n     * to the backend.\n     *\n     * Generated from protobuf field <code>string jwt_audience = 7;</code>\n     * @return string\n     */\n    public function getJwtAudience()\n    {\n        return $this->readOneof(7);\n    }\n\n    public function hasJwtAudience()\n    {\n        return $this->hasOneof(7);\n    }\n\n    /**\n     * The JWT audience is used when generating a JWT ID token for the backend.\n     * This ID token will be added in the HTTP \"authorization\" header, and sent\n     * to the backend.\n     *\n     * Generated from protobuf field <code>string jwt_audience = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setJwtAudience($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(7, $var);\n\n        return $this;\n    }\n\n    /**\n     * When disable_auth is true, a JWT ID token won't be generated and the\n     * original \"Authorization\" HTTP header will be preserved. If the header is\n     * used to carry the original token and is expected by the backend, this\n     * field must be set to true to preserve the header.\n     *\n     * Generated from protobuf field <code>bool disable_auth = 8;</code>\n     * @return bool\n     */\n    public function getDisableAuth()\n    {\n        return $this->readOneof(8);\n    }\n\n    public function hasDisableAuth()\n    {\n        return $this->hasOneof(8);\n    }\n\n    /**\n     * When disable_auth is true, a JWT ID token won't be generated and the\n     * original \"Authorization\" HTTP header will be preserved. If the header is\n     * used to carry the original token and is expected by the backend, this\n     * field must be set to true to preserve the header.\n     *\n     * Generated from protobuf field <code>bool disable_auth = 8;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDisableAuth($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->writeOneof(8, $var);\n\n        return $this;\n    }\n\n    /**\n     * The protocol used for sending a request to the backend.\n     * The supported values are \"http/1.1\" and \"h2\".\n     * The default value is inferred from the scheme in the\n     * [address][google.api.BackendRule.address] field:\n     *    SCHEME        PROTOCOL\n     *    http://       http/1.1\n     *    https://      http/1.1\n     *    grpc://       h2\n     *    grpcs://      h2\n     * For secure HTTP backends (https://) that support HTTP/2, set this field\n     * to \"h2\" for improved performance.\n     * Configuring this field to non-default values is only supported for secure\n     * HTTP backends. This field will be ignored for all other backends.\n     * See\n     * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     * for more details on the supported values.\n     *\n     * Generated from protobuf field <code>string protocol = 9;</code>\n     * @return string\n     */\n    public function getProtocol()\n    {\n        return $this->protocol;\n    }\n\n    /**\n     * The protocol used for sending a request to the backend.\n     * The supported values are \"http/1.1\" and \"h2\".\n     * The default value is inferred from the scheme in the\n     * [address][google.api.BackendRule.address] field:\n     *    SCHEME        PROTOCOL\n     *    http://       http/1.1\n     *    https://      http/1.1\n     *    grpc://       h2\n     *    grpcs://      h2\n     * For secure HTTP backends (https://) that support HTTP/2, set this field\n     * to \"h2\" for improved performance.\n     * Configuring this field to non-default values is only supported for secure\n     * HTTP backends. This field will be ignored for all other backends.\n     * See\n     * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     * for more details on the supported values.\n     *\n     * Generated from protobuf field <code>string protocol = 9;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProtocol($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->protocol = $var;\n\n        return $this;\n    }\n\n    /**\n     * The map between request protocol and the backend address.\n     *\n     * Generated from protobuf field <code>map<string, .google.api.BackendRule> overrides_by_request_protocol = 10;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getOverridesByRequestProtocol()\n    {\n        return $this->overrides_by_request_protocol;\n    }\n\n    /**\n     * The map between request protocol and the backend address.\n     *\n     * Generated from protobuf field <code>map<string, .google.api.BackendRule> overrides_by_request_protocol = 10;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setOverridesByRequestProtocol($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\BackendRule::class);\n        $this->overrides_by_request_protocol = $arr;\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getAuthentication()\n    {\n        return $this->whichOneof(\"authentication\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Billing/BillingDestination.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/billing.proto\n\nnamespace Google\\Api\\Billing;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Configuration of a specific billing destination (Currently only support\n * bill against consumer project).\n *\n * Generated from protobuf message <code>google.api.Billing.BillingDestination</code>\n */\nclass BillingDestination extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The monitored resource type. The type must be defined in\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 1;</code>\n     */\n    protected $monitored_resource = '';\n    /**\n     * Names of the metrics to report to this billing destination.\n     * Each name must be defined in\n     * [Service.metrics][google.api.Service.metrics] section.\n     *\n     * Generated from protobuf field <code>repeated string metrics = 2;</code>\n     */\n    private $metrics;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $monitored_resource\n     *           The monitored resource type. The type must be defined in\n     *           [Service.monitored_resources][google.api.Service.monitored_resources]\n     *           section.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $metrics\n     *           Names of the metrics to report to this billing destination.\n     *           Each name must be defined in\n     *           [Service.metrics][google.api.Service.metrics] section.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Billing::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The monitored resource type. The type must be defined in\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 1;</code>\n     * @return string\n     */\n    public function getMonitoredResource()\n    {\n        return $this->monitored_resource;\n    }\n\n    /**\n     * The monitored resource type. The type must be defined in\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMonitoredResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->monitored_resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * Names of the metrics to report to this billing destination.\n     * Each name must be defined in\n     * [Service.metrics][google.api.Service.metrics] section.\n     *\n     * Generated from protobuf field <code>repeated string metrics = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMetrics()\n    {\n        return $this->metrics;\n    }\n\n    /**\n     * Names of the metrics to report to this billing destination.\n     * Each name must be defined in\n     * [Service.metrics][google.api.Service.metrics] section.\n     *\n     * Generated from protobuf field <code>repeated string metrics = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMetrics($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->metrics = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Billing.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/billing.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Billing related configuration of the service.\n * The following example shows how to configure monitored resources and metrics\n * for billing, `consumer_destinations` is the only supported destination and\n * the monitored resources need at least one label key\n * `cloud.googleapis.com/location` to indicate the location of the billing\n * usage, using different monitored resources between monitoring and billing is\n * recommended so they can be evolved independently:\n *     monitored_resources:\n *     - type: library.googleapis.com/billing_branch\n *       labels:\n *       - key: cloud.googleapis.com/location\n *         description: |\n *           Predefined label to support billing location restriction.\n *       - key: city\n *         description: |\n *           Custom label to define the city where the library branch is located\n *           in.\n *       - key: name\n *         description: Custom label to define the name of the library branch.\n *     metrics:\n *     - name: library.googleapis.com/book/borrowed_count\n *       metric_kind: DELTA\n *       value_type: INT64\n *       unit: \"1\"\n *     billing:\n *       consumer_destinations:\n *       - monitored_resource: library.googleapis.com/billing_branch\n *         metrics:\n *         - library.googleapis.com/book/borrowed_count\n *\n * Generated from protobuf message <code>google.api.Billing</code>\n */\nclass Billing extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Billing configurations for sending metrics to the consumer project.\n     * There can be multiple consumer destinations per service, each one must have\n     * a different monitored resource type. A metric can be used in at most\n     * one consumer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Billing.BillingDestination consumer_destinations = 8;</code>\n     */\n    private $consumer_destinations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\Billing\\BillingDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $consumer_destinations\n     *           Billing configurations for sending metrics to the consumer project.\n     *           There can be multiple consumer destinations per service, each one must have\n     *           a different monitored resource type. A metric can be used in at most\n     *           one consumer destination.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Billing::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Billing configurations for sending metrics to the consumer project.\n     * There can be multiple consumer destinations per service, each one must have\n     * a different monitored resource type. A metric can be used in at most\n     * one consumer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Billing.BillingDestination consumer_destinations = 8;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getConsumerDestinations()\n    {\n        return $this->consumer_destinations;\n    }\n\n    /**\n     * Billing configurations for sending metrics to the consumer project.\n     * There can be multiple consumer destinations per service, each one must have\n     * a different monitored resource type. A metric can be used in at most\n     * one consumer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Billing.BillingDestination consumer_destinations = 8;</code>\n     * @param array<\\Google\\Api\\Billing\\BillingDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setConsumerDestinations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Billing\\BillingDestination::class);\n        $this->consumer_destinations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ChangeType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/config_change.proto\n\nnamespace Google\\Api;\n\nuse UnexpectedValueException;\n\n/**\n * Classifies set of possible modifications to an object in the service\n * configuration.\n *\n * Protobuf type <code>google.api.ChangeType</code>\n */\nclass ChangeType\n{\n    /**\n     * No value was provided.\n     *\n     * Generated from protobuf enum <code>CHANGE_TYPE_UNSPECIFIED = 0;</code>\n     */\n    const CHANGE_TYPE_UNSPECIFIED = 0;\n    /**\n     * The changed object exists in the 'new' service configuration, but not\n     * in the 'old' service configuration.\n     *\n     * Generated from protobuf enum <code>ADDED = 1;</code>\n     */\n    const ADDED = 1;\n    /**\n     * The changed object exists in the 'old' service configuration, but not\n     * in the 'new' service configuration.\n     *\n     * Generated from protobuf enum <code>REMOVED = 2;</code>\n     */\n    const REMOVED = 2;\n    /**\n     * The changed object exists in both service configurations, but its value\n     * is different.\n     *\n     * Generated from protobuf enum <code>MODIFIED = 3;</code>\n     */\n    const MODIFIED = 3;\n\n    private static $valueToName = [\n        self::CHANGE_TYPE_UNSPECIFIED => 'CHANGE_TYPE_UNSPECIFIED',\n        self::ADDED => 'ADDED',\n        self::REMOVED => 'REMOVED',\n        self::MODIFIED => 'MODIFIED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ClientLibraryDestination.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse UnexpectedValueException;\n\n/**\n * To where should client libraries be published?\n *\n * Protobuf type <code>google.api.ClientLibraryDestination</code>\n */\nclass ClientLibraryDestination\n{\n    /**\n     * Client libraries will neither be generated nor published to package\n     * managers.\n     *\n     * Generated from protobuf enum <code>CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0;</code>\n     */\n    const CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0;\n    /**\n     * Generate the client library in a repo under github.com/googleapis,\n     * but don't publish it to package managers.\n     *\n     * Generated from protobuf enum <code>GITHUB = 10;</code>\n     */\n    const GITHUB = 10;\n    /**\n     * Publish the library to package managers like nuget.org and npmjs.com.\n     *\n     * Generated from protobuf enum <code>PACKAGE_MANAGER = 20;</code>\n     */\n    const PACKAGE_MANAGER = 20;\n\n    private static $valueToName = [\n        self::CLIENT_LIBRARY_DESTINATION_UNSPECIFIED => 'CLIENT_LIBRARY_DESTINATION_UNSPECIFIED',\n        self::GITHUB => 'GITHUB',\n        self::PACKAGE_MANAGER => 'PACKAGE_MANAGER',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ClientLibraryOrganization.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse UnexpectedValueException;\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * Protobuf type <code>google.api.ClientLibraryOrganization</code>\n */\nclass ClientLibraryOrganization\n{\n    /**\n     * Not useful.\n     *\n     * Generated from protobuf enum <code>CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0;</code>\n     */\n    const CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0;\n    /**\n     * Google Cloud Platform Org.\n     *\n     * Generated from protobuf enum <code>CLOUD = 1;</code>\n     */\n    const CLOUD = 1;\n    /**\n     * Ads (Advertising) Org.\n     *\n     * Generated from protobuf enum <code>ADS = 2;</code>\n     */\n    const ADS = 2;\n    /**\n     * Photos Org.\n     *\n     * Generated from protobuf enum <code>PHOTOS = 3;</code>\n     */\n    const PHOTOS = 3;\n    /**\n     * Street View Org.\n     *\n     * Generated from protobuf enum <code>STREET_VIEW = 4;</code>\n     */\n    const STREET_VIEW = 4;\n    /**\n     * Shopping Org.\n     *\n     * Generated from protobuf enum <code>SHOPPING = 5;</code>\n     */\n    const SHOPPING = 5;\n    /**\n     * Geo Org.\n     *\n     * Generated from protobuf enum <code>GEO = 6;</code>\n     */\n    const GEO = 6;\n    /**\n     * Generative AI - https://developers.generativeai.google\n     *\n     * Generated from protobuf enum <code>GENERATIVE_AI = 7;</code>\n     */\n    const GENERATIVE_AI = 7;\n\n    private static $valueToName = [\n        self::CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED => 'CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED',\n        self::CLOUD => 'CLOUD',\n        self::ADS => 'ADS',\n        self::PHOTOS => 'PHOTOS',\n        self::STREET_VIEW => 'STREET_VIEW',\n        self::SHOPPING => 'SHOPPING',\n        self::GEO => 'GEO',\n        self::GENERATIVE_AI => 'GENERATIVE_AI',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ClientLibrarySettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Details about how and where to publish client libraries.\n *\n * Generated from protobuf message <code>google.api.ClientLibrarySettings</code>\n */\nclass ClientLibrarySettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Version of the API to apply these settings to. This is the full protobuf\n     * package for the API, ending in the version element.\n     * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n     *\n     * Generated from protobuf field <code>string version = 1;</code>\n     */\n    protected $version = '';\n    /**\n     * Launch stage of this version of the API.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 2;</code>\n     */\n    protected $launch_stage = 0;\n    /**\n     * When using transport=rest, the client request will encode enums as\n     * numbers rather than strings.\n     *\n     * Generated from protobuf field <code>bool rest_numeric_enums = 3;</code>\n     */\n    protected $rest_numeric_enums = false;\n    /**\n     * Settings for legacy Java features, supported in the Service YAML.\n     *\n     * Generated from protobuf field <code>.google.api.JavaSettings java_settings = 21;</code>\n     */\n    protected $java_settings = null;\n    /**\n     * Settings for C++ client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.CppSettings cpp_settings = 22;</code>\n     */\n    protected $cpp_settings = null;\n    /**\n     * Settings for PHP client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.PhpSettings php_settings = 23;</code>\n     */\n    protected $php_settings = null;\n    /**\n     * Settings for Python client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.PythonSettings python_settings = 24;</code>\n     */\n    protected $python_settings = null;\n    /**\n     * Settings for Node client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.NodeSettings node_settings = 25;</code>\n     */\n    protected $node_settings = null;\n    /**\n     * Settings for .NET client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.DotnetSettings dotnet_settings = 26;</code>\n     */\n    protected $dotnet_settings = null;\n    /**\n     * Settings for Ruby client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.RubySettings ruby_settings = 27;</code>\n     */\n    protected $ruby_settings = null;\n    /**\n     * Settings for Go client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.GoSettings go_settings = 28;</code>\n     */\n    protected $go_settings = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $version\n     *           Version of the API to apply these settings to. This is the full protobuf\n     *           package for the API, ending in the version element.\n     *           Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n     *     @type int $launch_stage\n     *           Launch stage of this version of the API.\n     *     @type bool $rest_numeric_enums\n     *           When using transport=rest, the client request will encode enums as\n     *           numbers rather than strings.\n     *     @type \\Google\\Api\\JavaSettings $java_settings\n     *           Settings for legacy Java features, supported in the Service YAML.\n     *     @type \\Google\\Api\\CppSettings $cpp_settings\n     *           Settings for C++ client libraries.\n     *     @type \\Google\\Api\\PhpSettings $php_settings\n     *           Settings for PHP client libraries.\n     *     @type \\Google\\Api\\PythonSettings $python_settings\n     *           Settings for Python client libraries.\n     *     @type \\Google\\Api\\NodeSettings $node_settings\n     *           Settings for Node client libraries.\n     *     @type \\Google\\Api\\DotnetSettings $dotnet_settings\n     *           Settings for .NET client libraries.\n     *     @type \\Google\\Api\\RubySettings $ruby_settings\n     *           Settings for Ruby client libraries.\n     *     @type \\Google\\Api\\GoSettings $go_settings\n     *           Settings for Go client libraries.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Version of the API to apply these settings to. This is the full protobuf\n     * package for the API, ending in the version element.\n     * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n     *\n     * Generated from protobuf field <code>string version = 1;</code>\n     * @return string\n     */\n    public function getVersion()\n    {\n        return $this->version;\n    }\n\n    /**\n     * Version of the API to apply these settings to. This is the full protobuf\n     * package for the API, ending in the version element.\n     * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n     *\n     * Generated from protobuf field <code>string version = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setVersion($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->version = $var;\n\n        return $this;\n    }\n\n    /**\n     * Launch stage of this version of the API.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 2;</code>\n     * @return int\n     */\n    public function getLaunchStage()\n    {\n        return $this->launch_stage;\n    }\n\n    /**\n     * Launch stage of this version of the API.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setLaunchStage($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\LaunchStage::class);\n        $this->launch_stage = $var;\n\n        return $this;\n    }\n\n    /**\n     * When using transport=rest, the client request will encode enums as\n     * numbers rather than strings.\n     *\n     * Generated from protobuf field <code>bool rest_numeric_enums = 3;</code>\n     * @return bool\n     */\n    public function getRestNumericEnums()\n    {\n        return $this->rest_numeric_enums;\n    }\n\n    /**\n     * When using transport=rest, the client request will encode enums as\n     * numbers rather than strings.\n     *\n     * Generated from protobuf field <code>bool rest_numeric_enums = 3;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setRestNumericEnums($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->rest_numeric_enums = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for legacy Java features, supported in the Service YAML.\n     *\n     * Generated from protobuf field <code>.google.api.JavaSettings java_settings = 21;</code>\n     * @return \\Google\\Api\\JavaSettings|null\n     */\n    public function getJavaSettings()\n    {\n        return $this->java_settings;\n    }\n\n    public function hasJavaSettings()\n    {\n        return isset($this->java_settings);\n    }\n\n    public function clearJavaSettings()\n    {\n        unset($this->java_settings);\n    }\n\n    /**\n     * Settings for legacy Java features, supported in the Service YAML.\n     *\n     * Generated from protobuf field <code>.google.api.JavaSettings java_settings = 21;</code>\n     * @param \\Google\\Api\\JavaSettings $var\n     * @return $this\n     */\n    public function setJavaSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\JavaSettings::class);\n        $this->java_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for C++ client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.CppSettings cpp_settings = 22;</code>\n     * @return \\Google\\Api\\CppSettings|null\n     */\n    public function getCppSettings()\n    {\n        return $this->cpp_settings;\n    }\n\n    public function hasCppSettings()\n    {\n        return isset($this->cpp_settings);\n    }\n\n    public function clearCppSettings()\n    {\n        unset($this->cpp_settings);\n    }\n\n    /**\n     * Settings for C++ client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.CppSettings cpp_settings = 22;</code>\n     * @param \\Google\\Api\\CppSettings $var\n     * @return $this\n     */\n    public function setCppSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CppSettings::class);\n        $this->cpp_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for PHP client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.PhpSettings php_settings = 23;</code>\n     * @return \\Google\\Api\\PhpSettings|null\n     */\n    public function getPhpSettings()\n    {\n        return $this->php_settings;\n    }\n\n    public function hasPhpSettings()\n    {\n        return isset($this->php_settings);\n    }\n\n    public function clearPhpSettings()\n    {\n        unset($this->php_settings);\n    }\n\n    /**\n     * Settings for PHP client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.PhpSettings php_settings = 23;</code>\n     * @param \\Google\\Api\\PhpSettings $var\n     * @return $this\n     */\n    public function setPhpSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\PhpSettings::class);\n        $this->php_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for Python client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.PythonSettings python_settings = 24;</code>\n     * @return \\Google\\Api\\PythonSettings|null\n     */\n    public function getPythonSettings()\n    {\n        return $this->python_settings;\n    }\n\n    public function hasPythonSettings()\n    {\n        return isset($this->python_settings);\n    }\n\n    public function clearPythonSettings()\n    {\n        unset($this->python_settings);\n    }\n\n    /**\n     * Settings for Python client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.PythonSettings python_settings = 24;</code>\n     * @param \\Google\\Api\\PythonSettings $var\n     * @return $this\n     */\n    public function setPythonSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\PythonSettings::class);\n        $this->python_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for Node client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.NodeSettings node_settings = 25;</code>\n     * @return \\Google\\Api\\NodeSettings|null\n     */\n    public function getNodeSettings()\n    {\n        return $this->node_settings;\n    }\n\n    public function hasNodeSettings()\n    {\n        return isset($this->node_settings);\n    }\n\n    public function clearNodeSettings()\n    {\n        unset($this->node_settings);\n    }\n\n    /**\n     * Settings for Node client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.NodeSettings node_settings = 25;</code>\n     * @param \\Google\\Api\\NodeSettings $var\n     * @return $this\n     */\n    public function setNodeSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\NodeSettings::class);\n        $this->node_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for .NET client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.DotnetSettings dotnet_settings = 26;</code>\n     * @return \\Google\\Api\\DotnetSettings|null\n     */\n    public function getDotnetSettings()\n    {\n        return $this->dotnet_settings;\n    }\n\n    public function hasDotnetSettings()\n    {\n        return isset($this->dotnet_settings);\n    }\n\n    public function clearDotnetSettings()\n    {\n        unset($this->dotnet_settings);\n    }\n\n    /**\n     * Settings for .NET client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.DotnetSettings dotnet_settings = 26;</code>\n     * @param \\Google\\Api\\DotnetSettings $var\n     * @return $this\n     */\n    public function setDotnetSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\DotnetSettings::class);\n        $this->dotnet_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for Ruby client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.RubySettings ruby_settings = 27;</code>\n     * @return \\Google\\Api\\RubySettings|null\n     */\n    public function getRubySettings()\n    {\n        return $this->ruby_settings;\n    }\n\n    public function hasRubySettings()\n    {\n        return isset($this->ruby_settings);\n    }\n\n    public function clearRubySettings()\n    {\n        unset($this->ruby_settings);\n    }\n\n    /**\n     * Settings for Ruby client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.RubySettings ruby_settings = 27;</code>\n     * @param \\Google\\Api\\RubySettings $var\n     * @return $this\n     */\n    public function setRubySettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\RubySettings::class);\n        $this->ruby_settings = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for Go client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.GoSettings go_settings = 28;</code>\n     * @return \\Google\\Api\\GoSettings|null\n     */\n    public function getGoSettings()\n    {\n        return $this->go_settings;\n    }\n\n    public function hasGoSettings()\n    {\n        return isset($this->go_settings);\n    }\n\n    public function clearGoSettings()\n    {\n        unset($this->go_settings);\n    }\n\n    /**\n     * Settings for Go client libraries.\n     *\n     * Generated from protobuf field <code>.google.api.GoSettings go_settings = 28;</code>\n     * @param \\Google\\Api\\GoSettings $var\n     * @return $this\n     */\n    public function setGoSettings($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\GoSettings::class);\n        $this->go_settings = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/CommonLanguageSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Required information for every language.\n *\n * Generated from protobuf message <code>google.api.CommonLanguageSettings</code>\n */\nclass CommonLanguageSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Link to automatically generated reference documentation.  Example:\n     * https://cloud.google.com/nodejs/docs/reference/asset/latest\n     *\n     * Generated from protobuf field <code>string reference_docs_uri = 1 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $reference_docs_uri = '';\n    /**\n     * The destination where API teams want this client library to be published.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ClientLibraryDestination destinations = 2;</code>\n     */\n    private $destinations;\n    /**\n     * Configuration for which RPCs should be generated in the GAPIC client.\n     *\n     * Generated from protobuf field <code>.google.api.SelectiveGapicGeneration selective_gapic_generation = 3;</code>\n     */\n    protected $selective_gapic_generation = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $reference_docs_uri\n     *           Link to automatically generated reference documentation.  Example:\n     *           https://cloud.google.com/nodejs/docs/reference/asset/latest\n     *     @type array<int>|\\Google\\Protobuf\\Internal\\RepeatedField $destinations\n     *           The destination where API teams want this client library to be published.\n     *     @type \\Google\\Api\\SelectiveGapicGeneration $selective_gapic_generation\n     *           Configuration for which RPCs should be generated in the GAPIC client.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Link to automatically generated reference documentation.  Example:\n     * https://cloud.google.com/nodejs/docs/reference/asset/latest\n     *\n     * Generated from protobuf field <code>string reference_docs_uri = 1 [deprecated = true];</code>\n     * @return string\n     * @deprecated\n     */\n    public function getReferenceDocsUri()\n    {\n        if ($this->reference_docs_uri !== '') {\n            @trigger_error('reference_docs_uri is deprecated.', E_USER_DEPRECATED);\n        }\n        return $this->reference_docs_uri;\n    }\n\n    /**\n     * Link to automatically generated reference documentation.  Example:\n     * https://cloud.google.com/nodejs/docs/reference/asset/latest\n     *\n     * Generated from protobuf field <code>string reference_docs_uri = 1 [deprecated = true];</code>\n     * @param string $var\n     * @return $this\n     * @deprecated\n     */\n    public function setReferenceDocsUri($var)\n    {\n        @trigger_error('reference_docs_uri is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkString($var, True);\n        $this->reference_docs_uri = $var;\n\n        return $this;\n    }\n\n    /**\n     * The destination where API teams want this client library to be published.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ClientLibraryDestination destinations = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getDestinations()\n    {\n        return $this->destinations;\n    }\n\n    /**\n     * The destination where API teams want this client library to be published.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ClientLibraryDestination destinations = 2;</code>\n     * @param array<int>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setDestinations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::ENUM, \\Google\\Api\\ClientLibraryDestination::class);\n        $this->destinations = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Configuration for which RPCs should be generated in the GAPIC client.\n     *\n     * Generated from protobuf field <code>.google.api.SelectiveGapicGeneration selective_gapic_generation = 3;</code>\n     * @return \\Google\\Api\\SelectiveGapicGeneration|null\n     */\n    public function getSelectiveGapicGeneration()\n    {\n        return $this->selective_gapic_generation;\n    }\n\n    public function hasSelectiveGapicGeneration()\n    {\n        return isset($this->selective_gapic_generation);\n    }\n\n    public function clearSelectiveGapicGeneration()\n    {\n        unset($this->selective_gapic_generation);\n    }\n\n    /**\n     * Configuration for which RPCs should be generated in the GAPIC client.\n     *\n     * Generated from protobuf field <code>.google.api.SelectiveGapicGeneration selective_gapic_generation = 3;</code>\n     * @param \\Google\\Api\\SelectiveGapicGeneration $var\n     * @return $this\n     */\n    public function setSelectiveGapicGeneration($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\SelectiveGapicGeneration::class);\n        $this->selective_gapic_generation = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ConfigChange.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/config_change.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Output generated from semantically comparing two versions of a service\n * configuration.\n * Includes detailed information about a field that have changed with\n * applicable advice about potential consequences for the change, such as\n * backwards-incompatibility.\n *\n * Generated from protobuf message <code>google.api.ConfigChange</code>\n */\nclass ConfigChange extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Object hierarchy path to the change, with levels separated by a '.'\n     * character. For repeated fields, an applicable unique identifier field is\n     * used for the index (usually selector, name, or id). For maps, the term\n     * 'key' is used. If the field has no unique identifier, the numeric index\n     * is used.\n     * Examples:\n     * - visibility.rules[selector==\"google.LibraryService.ListBooks\"].restriction\n     * - quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value\n     * - logging.producer_destinations[0]\n     *\n     * Generated from protobuf field <code>string element = 1;</code>\n     */\n    protected $element = '';\n    /**\n     * Value of the changed object in the old Service configuration,\n     * in JSON format. This field will not be populated if ChangeType == ADDED.\n     *\n     * Generated from protobuf field <code>string old_value = 2;</code>\n     */\n    protected $old_value = '';\n    /**\n     * Value of the changed object in the new Service configuration,\n     * in JSON format. This field will not be populated if ChangeType == REMOVED.\n     *\n     * Generated from protobuf field <code>string new_value = 3;</code>\n     */\n    protected $new_value = '';\n    /**\n     * The type for this change, either ADDED, REMOVED, or MODIFIED.\n     *\n     * Generated from protobuf field <code>.google.api.ChangeType change_type = 4;</code>\n     */\n    protected $change_type = 0;\n    /**\n     * Collection of advice provided for this change, useful for determining the\n     * possible impact of this change.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Advice advices = 5;</code>\n     */\n    private $advices;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $element\n     *           Object hierarchy path to the change, with levels separated by a '.'\n     *           character. For repeated fields, an applicable unique identifier field is\n     *           used for the index (usually selector, name, or id). For maps, the term\n     *           'key' is used. If the field has no unique identifier, the numeric index\n     *           is used.\n     *           Examples:\n     *           - visibility.rules[selector==\"google.LibraryService.ListBooks\"].restriction\n     *           - quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value\n     *           - logging.producer_destinations[0]\n     *     @type string $old_value\n     *           Value of the changed object in the old Service configuration,\n     *           in JSON format. This field will not be populated if ChangeType == ADDED.\n     *     @type string $new_value\n     *           Value of the changed object in the new Service configuration,\n     *           in JSON format. This field will not be populated if ChangeType == REMOVED.\n     *     @type int $change_type\n     *           The type for this change, either ADDED, REMOVED, or MODIFIED.\n     *     @type array<\\Google\\Api\\Advice>|\\Google\\Protobuf\\Internal\\RepeatedField $advices\n     *           Collection of advice provided for this change, useful for determining the\n     *           possible impact of this change.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\ConfigChange::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Object hierarchy path to the change, with levels separated by a '.'\n     * character. For repeated fields, an applicable unique identifier field is\n     * used for the index (usually selector, name, or id). For maps, the term\n     * 'key' is used. If the field has no unique identifier, the numeric index\n     * is used.\n     * Examples:\n     * - visibility.rules[selector==\"google.LibraryService.ListBooks\"].restriction\n     * - quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value\n     * - logging.producer_destinations[0]\n     *\n     * Generated from protobuf field <code>string element = 1;</code>\n     * @return string\n     */\n    public function getElement()\n    {\n        return $this->element;\n    }\n\n    /**\n     * Object hierarchy path to the change, with levels separated by a '.'\n     * character. For repeated fields, an applicable unique identifier field is\n     * used for the index (usually selector, name, or id). For maps, the term\n     * 'key' is used. If the field has no unique identifier, the numeric index\n     * is used.\n     * Examples:\n     * - visibility.rules[selector==\"google.LibraryService.ListBooks\"].restriction\n     * - quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value\n     * - logging.producer_destinations[0]\n     *\n     * Generated from protobuf field <code>string element = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setElement($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->element = $var;\n\n        return $this;\n    }\n\n    /**\n     * Value of the changed object in the old Service configuration,\n     * in JSON format. This field will not be populated if ChangeType == ADDED.\n     *\n     * Generated from protobuf field <code>string old_value = 2;</code>\n     * @return string\n     */\n    public function getOldValue()\n    {\n        return $this->old_value;\n    }\n\n    /**\n     * Value of the changed object in the old Service configuration,\n     * in JSON format. This field will not be populated if ChangeType == ADDED.\n     *\n     * Generated from protobuf field <code>string old_value = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setOldValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->old_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Value of the changed object in the new Service configuration,\n     * in JSON format. This field will not be populated if ChangeType == REMOVED.\n     *\n     * Generated from protobuf field <code>string new_value = 3;</code>\n     * @return string\n     */\n    public function getNewValue()\n    {\n        return $this->new_value;\n    }\n\n    /**\n     * Value of the changed object in the new Service configuration,\n     * in JSON format. This field will not be populated if ChangeType == REMOVED.\n     *\n     * Generated from protobuf field <code>string new_value = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNewValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->new_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * The type for this change, either ADDED, REMOVED, or MODIFIED.\n     *\n     * Generated from protobuf field <code>.google.api.ChangeType change_type = 4;</code>\n     * @return int\n     */\n    public function getChangeType()\n    {\n        return $this->change_type;\n    }\n\n    /**\n     * The type for this change, either ADDED, REMOVED, or MODIFIED.\n     *\n     * Generated from protobuf field <code>.google.api.ChangeType change_type = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setChangeType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\ChangeType::class);\n        $this->change_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Collection of advice provided for this change, useful for determining the\n     * possible impact of this change.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Advice advices = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAdvices()\n    {\n        return $this->advices;\n    }\n\n    /**\n     * Collection of advice provided for this change, useful for determining the\n     * possible impact of this change.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Advice advices = 5;</code>\n     * @param array<\\Google\\Api\\Advice>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAdvices($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Advice::class);\n        $this->advices = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Context.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/context.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Context` defines which contexts an API requests.\n * Example:\n *     context:\n *       rules:\n *       - selector: \"*\"\n *         requested:\n *         - google.rpc.context.ProjectContext\n *         - google.rpc.context.OriginContext\n * The above specifies that all methods in the API request\n * `google.rpc.context.ProjectContext` and\n * `google.rpc.context.OriginContext`.\n * Available context types are defined in package\n * `google.rpc.context`.\n * This also provides mechanism to allowlist any protobuf message extension that\n * can be sent in grpc metadata using “x-goog-ext-<extension_id>-bin” and\n * “x-goog-ext-<extension_id>-jspb” format. For example, list any service\n * specific protobuf types that can appear in grpc metadata as follows in your\n * yaml file:\n * Example:\n *     context:\n *       rules:\n *        - selector: \"google.example.library.v1.LibraryService.CreateBook\"\n *          allowed_request_extensions:\n *          - google.foo.v1.NewExtension\n *          allowed_response_extensions:\n *          - google.foo.v1.NewExtension\n * You can also specify extension ID instead of fully qualified extension name\n * here.\n *\n * Generated from protobuf message <code>google.api.Context</code>\n */\nclass Context extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of RPC context rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ContextRule rules = 1;</code>\n     */\n    private $rules;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\ContextRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of RPC context rules that apply to individual API methods.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Context::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of RPC context rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ContextRule rules = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of RPC context rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ContextRule rules = 1;</code>\n     * @param array<\\Google\\Api\\ContextRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\ContextRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ContextRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/context.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A context rule provides information about the context for an individual API\n * element.\n *\n * Generated from protobuf message <code>google.api.ContextRule</code>\n */\nclass ContextRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * A list of full type names of requested contexts, only the requested context\n     * will be made available to the backend.\n     *\n     * Generated from protobuf field <code>repeated string requested = 2;</code>\n     */\n    private $requested;\n    /**\n     * A list of full type names of provided contexts. It is used to support\n     * propagating HTTP headers and ETags from the response extension.\n     *\n     * Generated from protobuf field <code>repeated string provided = 3;</code>\n     */\n    private $provided;\n    /**\n     * A list of full type names or extension IDs of extensions allowed in grpc\n     * side channel from client to backend.\n     *\n     * Generated from protobuf field <code>repeated string allowed_request_extensions = 4;</code>\n     */\n    private $allowed_request_extensions;\n    /**\n     * A list of full type names or extension IDs of extensions allowed in grpc\n     * side channel from backend to client.\n     *\n     * Generated from protobuf field <code>repeated string allowed_response_extensions = 5;</code>\n     */\n    private $allowed_response_extensions;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects the methods to which this rule applies.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $requested\n     *           A list of full type names of requested contexts, only the requested context\n     *           will be made available to the backend.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $provided\n     *           A list of full type names of provided contexts. It is used to support\n     *           propagating HTTP headers and ETags from the response extension.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $allowed_request_extensions\n     *           A list of full type names or extension IDs of extensions allowed in grpc\n     *           side channel from client to backend.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $allowed_response_extensions\n     *           A list of full type names or extension IDs of extensions allowed in grpc\n     *           side channel from backend to client.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Context::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * A list of full type names of requested contexts, only the requested context\n     * will be made available to the backend.\n     *\n     * Generated from protobuf field <code>repeated string requested = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRequested()\n    {\n        return $this->requested;\n    }\n\n    /**\n     * A list of full type names of requested contexts, only the requested context\n     * will be made available to the backend.\n     *\n     * Generated from protobuf field <code>repeated string requested = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRequested($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->requested = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of full type names of provided contexts. It is used to support\n     * propagating HTTP headers and ETags from the response extension.\n     *\n     * Generated from protobuf field <code>repeated string provided = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getProvided()\n    {\n        return $this->provided;\n    }\n\n    /**\n     * A list of full type names of provided contexts. It is used to support\n     * propagating HTTP headers and ETags from the response extension.\n     *\n     * Generated from protobuf field <code>repeated string provided = 3;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setProvided($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->provided = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of full type names or extension IDs of extensions allowed in grpc\n     * side channel from client to backend.\n     *\n     * Generated from protobuf field <code>repeated string allowed_request_extensions = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAllowedRequestExtensions()\n    {\n        return $this->allowed_request_extensions;\n    }\n\n    /**\n     * A list of full type names or extension IDs of extensions allowed in grpc\n     * side channel from client to backend.\n     *\n     * Generated from protobuf field <code>repeated string allowed_request_extensions = 4;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAllowedRequestExtensions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->allowed_request_extensions = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of full type names or extension IDs of extensions allowed in grpc\n     * side channel from backend to client.\n     *\n     * Generated from protobuf field <code>repeated string allowed_response_extensions = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAllowedResponseExtensions()\n    {\n        return $this->allowed_response_extensions;\n    }\n\n    /**\n     * A list of full type names or extension IDs of extensions allowed in grpc\n     * side channel from backend to client.\n     *\n     * Generated from protobuf field <code>repeated string allowed_response_extensions = 5;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAllowedResponseExtensions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->allowed_response_extensions = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Control.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/control.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Selects and configures the service controller used by the service.\n * Example:\n *     control:\n *       environment: servicecontrol.googleapis.com\n *\n * Generated from protobuf message <code>google.api.Control</code>\n */\nclass Control extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The service controller environment to use. If empty, no control plane\n     * feature (like quota and billing) will be enabled. The recommended value for\n     * most services is servicecontrol.googleapis.com\n     *\n     * Generated from protobuf field <code>string environment = 1;</code>\n     */\n    protected $environment = '';\n    /**\n     * Defines policies applying to the API methods of the service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MethodPolicy method_policies = 4;</code>\n     */\n    private $method_policies;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $environment\n     *           The service controller environment to use. If empty, no control plane\n     *           feature (like quota and billing) will be enabled. The recommended value for\n     *           most services is servicecontrol.googleapis.com\n     *     @type array<\\Google\\Api\\MethodPolicy>|\\Google\\Protobuf\\Internal\\RepeatedField $method_policies\n     *           Defines policies applying to the API methods of the service.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Control::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The service controller environment to use. If empty, no control plane\n     * feature (like quota and billing) will be enabled. The recommended value for\n     * most services is servicecontrol.googleapis.com\n     *\n     * Generated from protobuf field <code>string environment = 1;</code>\n     * @return string\n     */\n    public function getEnvironment()\n    {\n        return $this->environment;\n    }\n\n    /**\n     * The service controller environment to use. If empty, no control plane\n     * feature (like quota and billing) will be enabled. The recommended value for\n     * most services is servicecontrol.googleapis.com\n     *\n     * Generated from protobuf field <code>string environment = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setEnvironment($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->environment = $var;\n\n        return $this;\n    }\n\n    /**\n     * Defines policies applying to the API methods of the service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MethodPolicy method_policies = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMethodPolicies()\n    {\n        return $this->method_policies;\n    }\n\n    /**\n     * Defines policies applying to the API methods of the service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MethodPolicy method_policies = 4;</code>\n     * @param array<\\Google\\Api\\MethodPolicy>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMethodPolicies($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\MethodPolicy::class);\n        $this->method_policies = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/CppSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for C++ client libraries.\n *\n * Generated from protobuf message <code>google.api.CppSettings</code>\n */\nclass CppSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/CustomHttpPattern.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/http.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * Generated from protobuf message <code>google.api.CustomHttpPattern</code>\n */\nclass CustomHttpPattern extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of this custom HTTP verb.\n     *\n     * Generated from protobuf field <code>string kind = 1;</code>\n     */\n    protected $kind = '';\n    /**\n     * The path matched by this custom verb.\n     *\n     * Generated from protobuf field <code>string path = 2;</code>\n     */\n    protected $path = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $kind\n     *           The name of this custom HTTP verb.\n     *     @type string $path\n     *           The path matched by this custom verb.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Http::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of this custom HTTP verb.\n     *\n     * Generated from protobuf field <code>string kind = 1;</code>\n     * @return string\n     */\n    public function getKind()\n    {\n        return $this->kind;\n    }\n\n    /**\n     * The name of this custom HTTP verb.\n     *\n     * Generated from protobuf field <code>string kind = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setKind($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->kind = $var;\n\n        return $this;\n    }\n\n    /**\n     * The path matched by this custom verb.\n     *\n     * Generated from protobuf field <code>string path = 2;</code>\n     * @return string\n     */\n    public function getPath()\n    {\n        return $this->path;\n    }\n\n    /**\n     * The path matched by this custom verb.\n     *\n     * Generated from protobuf field <code>string path = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPath($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->path = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution/BucketOptions/Explicit.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api\\Distribution\\BucketOptions;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Specifies a set of buckets with arbitrary widths.\n * There are `size(bounds) + 1` (= N) buckets. Bucket `i` has the following\n * boundaries:\n *    Upper bound (0 <= i < N-1):     bounds[i]\n *    Lower bound (1 <= i < N);       bounds[i - 1]\n * The `bounds` field must contain at least one element. If `bounds` has\n * only one element, then there are no finite buckets, and that single\n * element is the common boundary of the overflow and underflow buckets.\n *\n * Generated from protobuf message <code>google.api.Distribution.BucketOptions.Explicit</code>\n */\nclass Explicit extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The values must be monotonically increasing.\n     *\n     * Generated from protobuf field <code>repeated double bounds = 1;</code>\n     */\n    private $bounds;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<float>|\\Google\\Protobuf\\Internal\\RepeatedField $bounds\n     *           The values must be monotonically increasing.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The values must be monotonically increasing.\n     *\n     * Generated from protobuf field <code>repeated double bounds = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getBounds()\n    {\n        return $this->bounds;\n    }\n\n    /**\n     * The values must be monotonically increasing.\n     *\n     * Generated from protobuf field <code>repeated double bounds = 1;</code>\n     * @param array<float>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setBounds($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::DOUBLE);\n        $this->bounds = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution/BucketOptions/Exponential.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api\\Distribution\\BucketOptions;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Specifies an exponential sequence of buckets that have a width that is\n * proportional to the value of the lower bound. Each bucket represents a\n * constant relative uncertainty on a specific value in the bucket.\n * There are `num_finite_buckets + 2` (= N) buckets. Bucket `i` has the\n * following boundaries:\n *    Upper bound (0 <= i < N-1):     scale * (growth_factor ^ i).\n *    Lower bound (1 <= i < N):       scale * (growth_factor ^ (i - 1)).\n *\n * Generated from protobuf message <code>google.api.Distribution.BucketOptions.Exponential</code>\n */\nclass Exponential extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>int32 num_finite_buckets = 1;</code>\n     */\n    protected $num_finite_buckets = 0;\n    /**\n     * Must be greater than 1.\n     *\n     * Generated from protobuf field <code>double growth_factor = 2;</code>\n     */\n    protected $growth_factor = 0.0;\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>double scale = 3;</code>\n     */\n    protected $scale = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $num_finite_buckets\n     *           Must be greater than 0.\n     *     @type float $growth_factor\n     *           Must be greater than 1.\n     *     @type float $scale\n     *           Must be greater than 0.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>int32 num_finite_buckets = 1;</code>\n     * @return int\n     */\n    public function getNumFiniteBuckets()\n    {\n        return $this->num_finite_buckets;\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>int32 num_finite_buckets = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumFiniteBuckets($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->num_finite_buckets = $var;\n\n        return $this;\n    }\n\n    /**\n     * Must be greater than 1.\n     *\n     * Generated from protobuf field <code>double growth_factor = 2;</code>\n     * @return float\n     */\n    public function getGrowthFactor()\n    {\n        return $this->growth_factor;\n    }\n\n    /**\n     * Must be greater than 1.\n     *\n     * Generated from protobuf field <code>double growth_factor = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setGrowthFactor($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->growth_factor = $var;\n\n        return $this;\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>double scale = 3;</code>\n     * @return float\n     */\n    public function getScale()\n    {\n        return $this->scale;\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>double scale = 3;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setScale($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->scale = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution/BucketOptions/Linear.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api\\Distribution\\BucketOptions;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Specifies a linear sequence of buckets that all have the same width\n * (except overflow and underflow). Each bucket represents a constant\n * absolute uncertainty on the specific value in the bucket.\n * There are `num_finite_buckets + 2` (= N) buckets. Bucket `i` has the\n * following boundaries:\n *    Upper bound (0 <= i < N-1):     offset + (width * i).\n *    Lower bound (1 <= i < N):       offset + (width * (i - 1)).\n *\n * Generated from protobuf message <code>google.api.Distribution.BucketOptions.Linear</code>\n */\nclass Linear extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>int32 num_finite_buckets = 1;</code>\n     */\n    protected $num_finite_buckets = 0;\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>double width = 2;</code>\n     */\n    protected $width = 0.0;\n    /**\n     * Lower bound of the first bucket.\n     *\n     * Generated from protobuf field <code>double offset = 3;</code>\n     */\n    protected $offset = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $num_finite_buckets\n     *           Must be greater than 0.\n     *     @type float $width\n     *           Must be greater than 0.\n     *     @type float $offset\n     *           Lower bound of the first bucket.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>int32 num_finite_buckets = 1;</code>\n     * @return int\n     */\n    public function getNumFiniteBuckets()\n    {\n        return $this->num_finite_buckets;\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>int32 num_finite_buckets = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumFiniteBuckets($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->num_finite_buckets = $var;\n\n        return $this;\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>double width = 2;</code>\n     * @return float\n     */\n    public function getWidth()\n    {\n        return $this->width;\n    }\n\n    /**\n     * Must be greater than 0.\n     *\n     * Generated from protobuf field <code>double width = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setWidth($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->width = $var;\n\n        return $this;\n    }\n\n    /**\n     * Lower bound of the first bucket.\n     *\n     * Generated from protobuf field <code>double offset = 3;</code>\n     * @return float\n     */\n    public function getOffset()\n    {\n        return $this->offset;\n    }\n\n    /**\n     * Lower bound of the first bucket.\n     *\n     * Generated from protobuf field <code>double offset = 3;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setOffset($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->offset = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution/BucketOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api\\Distribution;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `BucketOptions` describes the bucket boundaries used to create a histogram\n * for the distribution. The buckets can be in a linear sequence, an\n * exponential sequence, or each bucket can be specified explicitly.\n * `BucketOptions` does not include the number of values in each bucket.\n * A bucket has an inclusive lower bound and exclusive upper bound for the\n * values that are counted for that bucket. The upper bound of a bucket must\n * be strictly greater than the lower bound. The sequence of N buckets for a\n * distribution consists of an underflow bucket (number 0), zero or more\n * finite buckets (number 1 through N - 2) and an overflow bucket (number N -\n * 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the\n * same as the upper bound of bucket i - 1. The buckets span the whole range\n * of finite values: lower bound of the underflow bucket is -infinity and the\n * upper bound of the overflow bucket is +infinity. The finite buckets are\n * so-called because both bounds are finite.\n *\n * Generated from protobuf message <code>google.api.Distribution.BucketOptions</code>\n */\nclass BucketOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    protected $options;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\Distribution\\BucketOptions\\Linear $linear_buckets\n     *           The linear bucket.\n     *     @type \\Google\\Api\\Distribution\\BucketOptions\\Exponential $exponential_buckets\n     *           The exponential buckets.\n     *     @type \\Google\\Api\\Distribution\\BucketOptions\\Explicit $explicit_buckets\n     *           The explicit buckets.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The linear bucket.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions.Linear linear_buckets = 1;</code>\n     * @return \\Google\\Api\\Distribution\\BucketOptions\\Linear|null\n     */\n    public function getLinearBuckets()\n    {\n        return $this->readOneof(1);\n    }\n\n    public function hasLinearBuckets()\n    {\n        return $this->hasOneof(1);\n    }\n\n    /**\n     * The linear bucket.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions.Linear linear_buckets = 1;</code>\n     * @param \\Google\\Api\\Distribution\\BucketOptions\\Linear $var\n     * @return $this\n     */\n    public function setLinearBuckets($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Distribution\\BucketOptions\\Linear::class);\n        $this->writeOneof(1, $var);\n\n        return $this;\n    }\n\n    /**\n     * The exponential buckets.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions.Exponential exponential_buckets = 2;</code>\n     * @return \\Google\\Api\\Distribution\\BucketOptions\\Exponential|null\n     */\n    public function getExponentialBuckets()\n    {\n        return $this->readOneof(2);\n    }\n\n    public function hasExponentialBuckets()\n    {\n        return $this->hasOneof(2);\n    }\n\n    /**\n     * The exponential buckets.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions.Exponential exponential_buckets = 2;</code>\n     * @param \\Google\\Api\\Distribution\\BucketOptions\\Exponential $var\n     * @return $this\n     */\n    public function setExponentialBuckets($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Distribution\\BucketOptions\\Exponential::class);\n        $this->writeOneof(2, $var);\n\n        return $this;\n    }\n\n    /**\n     * The explicit buckets.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions.Explicit explicit_buckets = 3;</code>\n     * @return \\Google\\Api\\Distribution\\BucketOptions\\Explicit|null\n     */\n    public function getExplicitBuckets()\n    {\n        return $this->readOneof(3);\n    }\n\n    public function hasExplicitBuckets()\n    {\n        return $this->hasOneof(3);\n    }\n\n    /**\n     * The explicit buckets.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions.Explicit explicit_buckets = 3;</code>\n     * @param \\Google\\Api\\Distribution\\BucketOptions\\Explicit $var\n     * @return $this\n     */\n    public function setExplicitBuckets($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Distribution\\BucketOptions\\Explicit::class);\n        $this->writeOneof(3, $var);\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getOptions()\n    {\n        return $this->whichOneof(\"options\");\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution/Exemplar.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api\\Distribution;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Exemplars are example points that may be used to annotate aggregated\n * distribution values. They are metadata that gives information about a\n * particular value added to a Distribution bucket, such as a trace ID that\n * was active when a value was added. They may contain further information,\n * such as a example values and timestamps, origin, etc.\n *\n * Generated from protobuf message <code>google.api.Distribution.Exemplar</code>\n */\nclass Exemplar extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Value of the exemplar point. This value determines to which bucket the\n     * exemplar belongs.\n     *\n     * Generated from protobuf field <code>double value = 1;</code>\n     */\n    protected $value = 0.0;\n    /**\n     * The observation (sampling) time of the above value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp timestamp = 2;</code>\n     */\n    protected $timestamp = null;\n    /**\n     * Contextual information about the example value. Examples are:\n     *   Trace: type.googleapis.com/google.monitoring.v3.SpanContext\n     *   Literal string: type.googleapis.com/google.protobuf.StringValue\n     *   Labels dropped during aggregation:\n     *     type.googleapis.com/google.monitoring.v3.DroppedLabels\n     * There may be only a single attachment of any given message type in a\n     * single exemplar, and this is enforced by the system.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any attachments = 3;</code>\n     */\n    private $attachments;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $value\n     *           Value of the exemplar point. This value determines to which bucket the\n     *           exemplar belongs.\n     *     @type \\Google\\Protobuf\\Timestamp $timestamp\n     *           The observation (sampling) time of the above value.\n     *     @type array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $attachments\n     *           Contextual information about the example value. Examples are:\n     *             Trace: type.googleapis.com/google.monitoring.v3.SpanContext\n     *             Literal string: type.googleapis.com/google.protobuf.StringValue\n     *             Labels dropped during aggregation:\n     *               type.googleapis.com/google.monitoring.v3.DroppedLabels\n     *           There may be only a single attachment of any given message type in a\n     *           single exemplar, and this is enforced by the system.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Value of the exemplar point. This value determines to which bucket the\n     * exemplar belongs.\n     *\n     * Generated from protobuf field <code>double value = 1;</code>\n     * @return float\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Value of the exemplar point. This value determines to which bucket the\n     * exemplar belongs.\n     *\n     * Generated from protobuf field <code>double value = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n    /**\n     * The observation (sampling) time of the above value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp timestamp = 2;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getTimestamp()\n    {\n        return $this->timestamp;\n    }\n\n    public function hasTimestamp()\n    {\n        return isset($this->timestamp);\n    }\n\n    public function clearTimestamp()\n    {\n        unset($this->timestamp);\n    }\n\n    /**\n     * The observation (sampling) time of the above value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp timestamp = 2;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setTimestamp($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->timestamp = $var;\n\n        return $this;\n    }\n\n    /**\n     * Contextual information about the example value. Examples are:\n     *   Trace: type.googleapis.com/google.monitoring.v3.SpanContext\n     *   Literal string: type.googleapis.com/google.protobuf.StringValue\n     *   Labels dropped during aggregation:\n     *     type.googleapis.com/google.monitoring.v3.DroppedLabels\n     * There may be only a single attachment of any given message type in a\n     * single exemplar, and this is enforced by the system.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any attachments = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAttachments()\n    {\n        return $this->attachments;\n    }\n\n    /**\n     * Contextual information about the example value. Examples are:\n     *   Trace: type.googleapis.com/google.monitoring.v3.SpanContext\n     *   Literal string: type.googleapis.com/google.protobuf.StringValue\n     *   Labels dropped during aggregation:\n     *     type.googleapis.com/google.monitoring.v3.DroppedLabels\n     * There may be only a single attachment of any given message type in a\n     * single exemplar, and this is enforced by the system.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any attachments = 3;</code>\n     * @param array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAttachments($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Any::class);\n        $this->attachments = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution/Range.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api\\Distribution;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The range of the population values.\n *\n * Generated from protobuf message <code>google.api.Distribution.Range</code>\n */\nclass Range extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The minimum of the population values.\n     *\n     * Generated from protobuf field <code>double min = 1;</code>\n     */\n    protected $min = 0.0;\n    /**\n     * The maximum of the population values.\n     *\n     * Generated from protobuf field <code>double max = 2;</code>\n     */\n    protected $max = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $min\n     *           The minimum of the population values.\n     *     @type float $max\n     *           The maximum of the population values.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The minimum of the population values.\n     *\n     * Generated from protobuf field <code>double min = 1;</code>\n     * @return float\n     */\n    public function getMin()\n    {\n        return $this->min;\n    }\n\n    /**\n     * The minimum of the population values.\n     *\n     * Generated from protobuf field <code>double min = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setMin($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->min = $var;\n\n        return $this;\n    }\n\n    /**\n     * The maximum of the population values.\n     *\n     * Generated from protobuf field <code>double max = 2;</code>\n     * @return float\n     */\n    public function getMax()\n    {\n        return $this->max;\n    }\n\n    /**\n     * The maximum of the population values.\n     *\n     * Generated from protobuf field <code>double max = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setMax($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->max = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Distribution.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/distribution.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Distribution` contains summary statistics for a population of values. It\n * optionally contains a histogram representing the distribution of those values\n * across a set of buckets.\n * The summary statistics are the count, mean, sum of the squared deviation from\n * the mean, the minimum, and the maximum of the set of population of values.\n * The histogram is based on a sequence of buckets and gives a count of values\n * that fall into each bucket. The boundaries of the buckets are given either\n * explicitly or by formulas for buckets of fixed or exponentially increasing\n * widths.\n * Although it is not forbidden, it is generally a bad idea to include\n * non-finite values (infinities or NaNs) in the population of values, as this\n * will render the `mean` and `sum_of_squared_deviation` fields meaningless.\n *\n * Generated from protobuf message <code>google.api.Distribution</code>\n */\nclass Distribution extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The number of values in the population. Must be non-negative. This value\n     * must equal the sum of the values in `bucket_counts` if a histogram is\n     * provided.\n     *\n     * Generated from protobuf field <code>int64 count = 1;</code>\n     */\n    protected $count = 0;\n    /**\n     * The arithmetic mean of the values in the population. If `count` is zero\n     * then this field must be zero.\n     *\n     * Generated from protobuf field <code>double mean = 2;</code>\n     */\n    protected $mean = 0.0;\n    /**\n     * The sum of squared deviations from the mean of the values in the\n     * population. For values x_i this is:\n     *     Sum[i=1..n]((x_i - mean)^2)\n     * Knuth, \"The Art of Computer Programming\", Vol. 2, page 232, 3rd edition\n     * describes Welford's method for accumulating this sum in one pass.\n     * If `count` is zero then this field must be zero.\n     *\n     * Generated from protobuf field <code>double sum_of_squared_deviation = 3;</code>\n     */\n    protected $sum_of_squared_deviation = 0.0;\n    /**\n     * If specified, contains the range of the population values. The field\n     * must not be present if the `count` is zero.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.Range range = 4;</code>\n     */\n    protected $range = null;\n    /**\n     * Defines the histogram bucket boundaries. If the distribution does not\n     * contain a histogram, then omit this field.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions bucket_options = 6;</code>\n     */\n    protected $bucket_options = null;\n    /**\n     * The number of values in each bucket of the histogram, as described in\n     * `bucket_options`. If the distribution does not have a histogram, then omit\n     * this field. If there is a histogram, then the sum of the values in\n     * `bucket_counts` must equal the value in the `count` field of the\n     * distribution.\n     * If present, `bucket_counts` should contain N values, where N is the number\n     * of buckets specified in `bucket_options`. If you supply fewer than N\n     * values, the remaining values are assumed to be 0.\n     * The order of the values in `bucket_counts` follows the bucket numbering\n     * schemes described for the three bucket types. The first value must be the\n     * count for the underflow bucket (number 0). The next N-2 values are the\n     * counts for the finite buckets (number 1 through N-2). The N'th value in\n     * `bucket_counts` is the count for the overflow bucket (number N-1).\n     *\n     * Generated from protobuf field <code>repeated int64 bucket_counts = 7;</code>\n     */\n    private $bucket_counts;\n    /**\n     * Must be in increasing order of `value` field.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Distribution.Exemplar exemplars = 10;</code>\n     */\n    private $exemplars;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $count\n     *           The number of values in the population. Must be non-negative. This value\n     *           must equal the sum of the values in `bucket_counts` if a histogram is\n     *           provided.\n     *     @type float $mean\n     *           The arithmetic mean of the values in the population. If `count` is zero\n     *           then this field must be zero.\n     *     @type float $sum_of_squared_deviation\n     *           The sum of squared deviations from the mean of the values in the\n     *           population. For values x_i this is:\n     *               Sum[i=1..n]((x_i - mean)^2)\n     *           Knuth, \"The Art of Computer Programming\", Vol. 2, page 232, 3rd edition\n     *           describes Welford's method for accumulating this sum in one pass.\n     *           If `count` is zero then this field must be zero.\n     *     @type \\Google\\Api\\Distribution\\Range $range\n     *           If specified, contains the range of the population values. The field\n     *           must not be present if the `count` is zero.\n     *     @type \\Google\\Api\\Distribution\\BucketOptions $bucket_options\n     *           Defines the histogram bucket boundaries. If the distribution does not\n     *           contain a histogram, then omit this field.\n     *     @type array<int>|array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $bucket_counts\n     *           The number of values in each bucket of the histogram, as described in\n     *           `bucket_options`. If the distribution does not have a histogram, then omit\n     *           this field. If there is a histogram, then the sum of the values in\n     *           `bucket_counts` must equal the value in the `count` field of the\n     *           distribution.\n     *           If present, `bucket_counts` should contain N values, where N is the number\n     *           of buckets specified in `bucket_options`. If you supply fewer than N\n     *           values, the remaining values are assumed to be 0.\n     *           The order of the values in `bucket_counts` follows the bucket numbering\n     *           schemes described for the three bucket types. The first value must be the\n     *           count for the underflow bucket (number 0). The next N-2 values are the\n     *           counts for the finite buckets (number 1 through N-2). The N'th value in\n     *           `bucket_counts` is the count for the overflow bucket (number N-1).\n     *     @type array<\\Google\\Api\\Distribution\\Exemplar>|\\Google\\Protobuf\\Internal\\RepeatedField $exemplars\n     *           Must be in increasing order of `value` field.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Distribution::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The number of values in the population. Must be non-negative. This value\n     * must equal the sum of the values in `bucket_counts` if a histogram is\n     * provided.\n     *\n     * Generated from protobuf field <code>int64 count = 1;</code>\n     * @return int|string\n     */\n    public function getCount()\n    {\n        return $this->count;\n    }\n\n    /**\n     * The number of values in the population. Must be non-negative. This value\n     * must equal the sum of the values in `bucket_counts` if a histogram is\n     * provided.\n     *\n     * Generated from protobuf field <code>int64 count = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setCount($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->count = $var;\n\n        return $this;\n    }\n\n    /**\n     * The arithmetic mean of the values in the population. If `count` is zero\n     * then this field must be zero.\n     *\n     * Generated from protobuf field <code>double mean = 2;</code>\n     * @return float\n     */\n    public function getMean()\n    {\n        return $this->mean;\n    }\n\n    /**\n     * The arithmetic mean of the values in the population. If `count` is zero\n     * then this field must be zero.\n     *\n     * Generated from protobuf field <code>double mean = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setMean($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->mean = $var;\n\n        return $this;\n    }\n\n    /**\n     * The sum of squared deviations from the mean of the values in the\n     * population. For values x_i this is:\n     *     Sum[i=1..n]((x_i - mean)^2)\n     * Knuth, \"The Art of Computer Programming\", Vol. 2, page 232, 3rd edition\n     * describes Welford's method for accumulating this sum in one pass.\n     * If `count` is zero then this field must be zero.\n     *\n     * Generated from protobuf field <code>double sum_of_squared_deviation = 3;</code>\n     * @return float\n     */\n    public function getSumOfSquaredDeviation()\n    {\n        return $this->sum_of_squared_deviation;\n    }\n\n    /**\n     * The sum of squared deviations from the mean of the values in the\n     * population. For values x_i this is:\n     *     Sum[i=1..n]((x_i - mean)^2)\n     * Knuth, \"The Art of Computer Programming\", Vol. 2, page 232, 3rd edition\n     * describes Welford's method for accumulating this sum in one pass.\n     * If `count` is zero then this field must be zero.\n     *\n     * Generated from protobuf field <code>double sum_of_squared_deviation = 3;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setSumOfSquaredDeviation($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->sum_of_squared_deviation = $var;\n\n        return $this;\n    }\n\n    /**\n     * If specified, contains the range of the population values. The field\n     * must not be present if the `count` is zero.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.Range range = 4;</code>\n     * @return \\Google\\Api\\Distribution\\Range|null\n     */\n    public function getRange()\n    {\n        return $this->range;\n    }\n\n    public function hasRange()\n    {\n        return isset($this->range);\n    }\n\n    public function clearRange()\n    {\n        unset($this->range);\n    }\n\n    /**\n     * If specified, contains the range of the population values. The field\n     * must not be present if the `count` is zero.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.Range range = 4;</code>\n     * @param \\Google\\Api\\Distribution\\Range $var\n     * @return $this\n     */\n    public function setRange($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Distribution\\Range::class);\n        $this->range = $var;\n\n        return $this;\n    }\n\n    /**\n     * Defines the histogram bucket boundaries. If the distribution does not\n     * contain a histogram, then omit this field.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions bucket_options = 6;</code>\n     * @return \\Google\\Api\\Distribution\\BucketOptions|null\n     */\n    public function getBucketOptions()\n    {\n        return $this->bucket_options;\n    }\n\n    public function hasBucketOptions()\n    {\n        return isset($this->bucket_options);\n    }\n\n    public function clearBucketOptions()\n    {\n        unset($this->bucket_options);\n    }\n\n    /**\n     * Defines the histogram bucket boundaries. If the distribution does not\n     * contain a histogram, then omit this field.\n     *\n     * Generated from protobuf field <code>.google.api.Distribution.BucketOptions bucket_options = 6;</code>\n     * @param \\Google\\Api\\Distribution\\BucketOptions $var\n     * @return $this\n     */\n    public function setBucketOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Distribution\\BucketOptions::class);\n        $this->bucket_options = $var;\n\n        return $this;\n    }\n\n    /**\n     * The number of values in each bucket of the histogram, as described in\n     * `bucket_options`. If the distribution does not have a histogram, then omit\n     * this field. If there is a histogram, then the sum of the values in\n     * `bucket_counts` must equal the value in the `count` field of the\n     * distribution.\n     * If present, `bucket_counts` should contain N values, where N is the number\n     * of buckets specified in `bucket_options`. If you supply fewer than N\n     * values, the remaining values are assumed to be 0.\n     * The order of the values in `bucket_counts` follows the bucket numbering\n     * schemes described for the three bucket types. The first value must be the\n     * count for the underflow bucket (number 0). The next N-2 values are the\n     * counts for the finite buckets (number 1 through N-2). The N'th value in\n     * `bucket_counts` is the count for the overflow bucket (number N-1).\n     *\n     * Generated from protobuf field <code>repeated int64 bucket_counts = 7;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getBucketCounts()\n    {\n        return $this->bucket_counts;\n    }\n\n    /**\n     * The number of values in each bucket of the histogram, as described in\n     * `bucket_options`. If the distribution does not have a histogram, then omit\n     * this field. If there is a histogram, then the sum of the values in\n     * `bucket_counts` must equal the value in the `count` field of the\n     * distribution.\n     * If present, `bucket_counts` should contain N values, where N is the number\n     * of buckets specified in `bucket_options`. If you supply fewer than N\n     * values, the remaining values are assumed to be 0.\n     * The order of the values in `bucket_counts` follows the bucket numbering\n     * schemes described for the three bucket types. The first value must be the\n     * count for the underflow bucket (number 0). The next N-2 values are the\n     * counts for the finite buckets (number 1 through N-2). The N'th value in\n     * `bucket_counts` is the count for the overflow bucket (number N-1).\n     *\n     * Generated from protobuf field <code>repeated int64 bucket_counts = 7;</code>\n     * @param array<int>|array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setBucketCounts($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::INT64);\n        $this->bucket_counts = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Must be in increasing order of `value` field.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Distribution.Exemplar exemplars = 10;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getExemplars()\n    {\n        return $this->exemplars;\n    }\n\n    /**\n     * Must be in increasing order of `value` field.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Distribution.Exemplar exemplars = 10;</code>\n     * @param array<\\Google\\Api\\Distribution\\Exemplar>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setExemplars($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Distribution\\Exemplar::class);\n        $this->exemplars = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Documentation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/documentation.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Documentation` provides the information for describing a service.\n * Example:\n * <pre><code>documentation:\n *   summary: >\n *     The Google Calendar API gives access\n *     to most calendar features.\n *   pages:\n *   - name: Overview\n *     content: &#40;== include google/foo/overview.md ==&#41;\n *   - name: Tutorial\n *     content: &#40;== include google/foo/tutorial.md ==&#41;\n *     subpages:\n *     - name: Java\n *       content: &#40;== include google/foo/tutorial_java.md ==&#41;\n *   rules:\n *   - selector: google.calendar.Calendar.Get\n *     description: >\n *       ...\n *   - selector: google.calendar.Calendar.Put\n *     description: >\n *       ...\n * </code></pre>\n * Documentation is provided in markdown syntax. In addition to\n * standard markdown features, definition lists, tables and fenced\n * code blocks are supported. Section headers can be provided and are\n * interpreted relative to the section nesting of the context where\n * a documentation fragment is embedded.\n * Documentation from the IDL is merged with documentation defined\n * via the config at normalization time, where documentation provided\n * by config rules overrides IDL provided.\n * A number of constructs specific to the API platform are supported\n * in documentation text.\n * In order to reference a proto element, the following\n * notation can be used:\n * <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>\n * To override the display text used for the link, this can be used:\n * <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>\n * Text can be excluded from doc using the following notation:\n * <pre><code>&#40;-- internal comment --&#41;</code></pre>\n * A few directives are available in documentation. Note that\n * directives must appear on a single line to be properly\n * identified. The `include` directive includes a markdown file from\n * an external source:\n * <pre><code>&#40;== include path/to/file ==&#41;</code></pre>\n * The `resource_for` directive marks a message to be the resource of\n * a collection in REST view. If it is not specified, tools attempt\n * to infer the resource from the operations in a collection:\n * <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>\n * The directive `suppress_warning` does not directly affect documentation\n * and is documented together with service config validation.\n *\n * Generated from protobuf message <code>google.api.Documentation</code>\n */\nclass Documentation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A short description of what the service does. The summary must be plain\n     * text. It becomes the overview of the service displayed in Google Cloud\n     * Console.\n     * NOTE: This field is equivalent to the standard field `description`.\n     *\n     * Generated from protobuf field <code>string summary = 1;</code>\n     */\n    protected $summary = '';\n    /**\n     * The top level pages for the documentation set.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Page pages = 5;</code>\n     */\n    private $pages;\n    /**\n     * A list of documentation rules that apply to individual API elements.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.DocumentationRule rules = 3;</code>\n     */\n    private $rules;\n    /**\n     * The URL to the root of documentation.\n     *\n     * Generated from protobuf field <code>string documentation_root_url = 4;</code>\n     */\n    protected $documentation_root_url = '';\n    /**\n     * Specifies the service root url if the default one (the service name\n     * from the yaml file) is not suitable. This can be seen in any fully\n     * specified service urls as well as sections that show a base that other\n     * urls are relative to.\n     *\n     * Generated from protobuf field <code>string service_root_url = 6;</code>\n     */\n    protected $service_root_url = '';\n    /**\n     * Declares a single overview page. For example:\n     * <pre><code>documentation:\n     *   summary: ...\n     *   overview: &#40;== include overview.md ==&#41;\n     * </code></pre>\n     * This is a shortcut for the following declaration (using pages style):\n     * <pre><code>documentation:\n     *   summary: ...\n     *   pages:\n     *   - name: Overview\n     *     content: &#40;== include overview.md ==&#41;\n     * </code></pre>\n     * Note: you cannot specify both `overview` field and `pages` field.\n     *\n     * Generated from protobuf field <code>string overview = 2;</code>\n     */\n    protected $overview = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $summary\n     *           A short description of what the service does. The summary must be plain\n     *           text. It becomes the overview of the service displayed in Google Cloud\n     *           Console.\n     *           NOTE: This field is equivalent to the standard field `description`.\n     *     @type array<\\Google\\Api\\Page>|\\Google\\Protobuf\\Internal\\RepeatedField $pages\n     *           The top level pages for the documentation set.\n     *     @type array<\\Google\\Api\\DocumentationRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of documentation rules that apply to individual API elements.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *     @type string $documentation_root_url\n     *           The URL to the root of documentation.\n     *     @type string $service_root_url\n     *           Specifies the service root url if the default one (the service name\n     *           from the yaml file) is not suitable. This can be seen in any fully\n     *           specified service urls as well as sections that show a base that other\n     *           urls are relative to.\n     *     @type string $overview\n     *           Declares a single overview page. For example:\n     *           <pre><code>documentation:\n     *             summary: ...\n     *             overview: &#40;== include overview.md ==&#41;\n     *           </code></pre>\n     *           This is a shortcut for the following declaration (using pages style):\n     *           <pre><code>documentation:\n     *             summary: ...\n     *             pages:\n     *             - name: Overview\n     *               content: &#40;== include overview.md ==&#41;\n     *           </code></pre>\n     *           Note: you cannot specify both `overview` field and `pages` field.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Documentation::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A short description of what the service does. The summary must be plain\n     * text. It becomes the overview of the service displayed in Google Cloud\n     * Console.\n     * NOTE: This field is equivalent to the standard field `description`.\n     *\n     * Generated from protobuf field <code>string summary = 1;</code>\n     * @return string\n     */\n    public function getSummary()\n    {\n        return $this->summary;\n    }\n\n    /**\n     * A short description of what the service does. The summary must be plain\n     * text. It becomes the overview of the service displayed in Google Cloud\n     * Console.\n     * NOTE: This field is equivalent to the standard field `description`.\n     *\n     * Generated from protobuf field <code>string summary = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSummary($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->summary = $var;\n\n        return $this;\n    }\n\n    /**\n     * The top level pages for the documentation set.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Page pages = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getPages()\n    {\n        return $this->pages;\n    }\n\n    /**\n     * The top level pages for the documentation set.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Page pages = 5;</code>\n     * @param array<\\Google\\Api\\Page>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setPages($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Page::class);\n        $this->pages = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of documentation rules that apply to individual API elements.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.DocumentationRule rules = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of documentation rules that apply to individual API elements.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.DocumentationRule rules = 3;</code>\n     * @param array<\\Google\\Api\\DocumentationRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\DocumentationRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The URL to the root of documentation.\n     *\n     * Generated from protobuf field <code>string documentation_root_url = 4;</code>\n     * @return string\n     */\n    public function getDocumentationRootUrl()\n    {\n        return $this->documentation_root_url;\n    }\n\n    /**\n     * The URL to the root of documentation.\n     *\n     * Generated from protobuf field <code>string documentation_root_url = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDocumentationRootUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->documentation_root_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies the service root url if the default one (the service name\n     * from the yaml file) is not suitable. This can be seen in any fully\n     * specified service urls as well as sections that show a base that other\n     * urls are relative to.\n     *\n     * Generated from protobuf field <code>string service_root_url = 6;</code>\n     * @return string\n     */\n    public function getServiceRootUrl()\n    {\n        return $this->service_root_url;\n    }\n\n    /**\n     * Specifies the service root url if the default one (the service name\n     * from the yaml file) is not suitable. This can be seen in any fully\n     * specified service urls as well as sections that show a base that other\n     * urls are relative to.\n     *\n     * Generated from protobuf field <code>string service_root_url = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setServiceRootUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->service_root_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * Declares a single overview page. For example:\n     * <pre><code>documentation:\n     *   summary: ...\n     *   overview: &#40;== include overview.md ==&#41;\n     * </code></pre>\n     * This is a shortcut for the following declaration (using pages style):\n     * <pre><code>documentation:\n     *   summary: ...\n     *   pages:\n     *   - name: Overview\n     *     content: &#40;== include overview.md ==&#41;\n     * </code></pre>\n     * Note: you cannot specify both `overview` field and `pages` field.\n     *\n     * Generated from protobuf field <code>string overview = 2;</code>\n     * @return string\n     */\n    public function getOverview()\n    {\n        return $this->overview;\n    }\n\n    /**\n     * Declares a single overview page. For example:\n     * <pre><code>documentation:\n     *   summary: ...\n     *   overview: &#40;== include overview.md ==&#41;\n     * </code></pre>\n     * This is a shortcut for the following declaration (using pages style):\n     * <pre><code>documentation:\n     *   summary: ...\n     *   pages:\n     *   - name: Overview\n     *     content: &#40;== include overview.md ==&#41;\n     * </code></pre>\n     * Note: you cannot specify both `overview` field and `pages` field.\n     *\n     * Generated from protobuf field <code>string overview = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setOverview($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->overview = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/DocumentationRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/documentation.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A documentation rule provides information about individual API elements.\n *\n * Generated from protobuf message <code>google.api.DocumentationRule</code>\n */\nclass DocumentationRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The selector is a comma-separated list of patterns for any element such as\n     * a method, a field, an enum value. Each pattern is a qualified name of the\n     * element which may end in \"*\", indicating a wildcard. Wildcards are only\n     * allowed at the end and for a whole component of the qualified name,\n     * i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". A wildcard will match\n     * one or more components. To specify a default for all applicable elements,\n     * the whole pattern \"*\" is used.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * Description of the selected proto element (e.g. a message, a method, a\n     * 'service' definition, or a field). Defaults to leading & trailing comments\n     * taken from the proto source definition of the proto element.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     */\n    protected $description = '';\n    /**\n     * Deprecation description of the selected element(s). It can be provided if\n     * an element is marked as `deprecated`.\n     *\n     * Generated from protobuf field <code>string deprecation_description = 3;</code>\n     */\n    protected $deprecation_description = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           The selector is a comma-separated list of patterns for any element such as\n     *           a method, a field, an enum value. Each pattern is a qualified name of the\n     *           element which may end in \"*\", indicating a wildcard. Wildcards are only\n     *           allowed at the end and for a whole component of the qualified name,\n     *           i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". A wildcard will match\n     *           one or more components. To specify a default for all applicable elements,\n     *           the whole pattern \"*\" is used.\n     *     @type string $description\n     *           Description of the selected proto element (e.g. a message, a method, a\n     *           'service' definition, or a field). Defaults to leading & trailing comments\n     *           taken from the proto source definition of the proto element.\n     *     @type string $deprecation_description\n     *           Deprecation description of the selected element(s). It can be provided if\n     *           an element is marked as `deprecated`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Documentation::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The selector is a comma-separated list of patterns for any element such as\n     * a method, a field, an enum value. Each pattern is a qualified name of the\n     * element which may end in \"*\", indicating a wildcard. Wildcards are only\n     * allowed at the end and for a whole component of the qualified name,\n     * i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". A wildcard will match\n     * one or more components. To specify a default for all applicable elements,\n     * the whole pattern \"*\" is used.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * The selector is a comma-separated list of patterns for any element such as\n     * a method, a field, an enum value. Each pattern is a qualified name of the\n     * element which may end in \"*\", indicating a wildcard. Wildcards are only\n     * allowed at the end and for a whole component of the qualified name,\n     * i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". A wildcard will match\n     * one or more components. To specify a default for all applicable elements,\n     * the whole pattern \"*\" is used.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Description of the selected proto element (e.g. a message, a method, a\n     * 'service' definition, or a field). Defaults to leading & trailing comments\n     * taken from the proto source definition of the proto element.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Description of the selected proto element (e.g. a message, a method, a\n     * 'service' definition, or a field). Defaults to leading & trailing comments\n     * taken from the proto source definition of the proto element.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * Deprecation description of the selected element(s). It can be provided if\n     * an element is marked as `deprecated`.\n     *\n     * Generated from protobuf field <code>string deprecation_description = 3;</code>\n     * @return string\n     */\n    public function getDeprecationDescription()\n    {\n        return $this->deprecation_description;\n    }\n\n    /**\n     * Deprecation description of the selected element(s). It can be provided if\n     * an element is marked as `deprecated`.\n     *\n     * Generated from protobuf field <code>string deprecation_description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDeprecationDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->deprecation_description = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/DotnetSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Dotnet client libraries.\n *\n * Generated from protobuf message <code>google.api.DotnetSettings</code>\n */\nclass DotnetSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n    /**\n     * Map from original service names to renamed versions.\n     * This is used when the default generated types\n     * would cause a naming conflict. (Neither name is\n     * fully-qualified.)\n     * Example: Subscriber to SubscriberServiceApi.\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_services = 2;</code>\n     */\n    private $renamed_services;\n    /**\n     * Map from full resource types to the effective short name\n     * for the resource. This is used when otherwise resource\n     * named from different services would cause naming collisions.\n     * Example entry:\n     * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_resources = 3;</code>\n     */\n    private $renamed_resources;\n    /**\n     * List of full resource types to ignore during generation.\n     * This is typically used for API-specific Location resources,\n     * which should be handled by the generator as if they were actually\n     * the common Location resources.\n     * Example entry: \"documentai.googleapis.com/Location\"\n     *\n     * Generated from protobuf field <code>repeated string ignored_resources = 4;</code>\n     */\n    private $ignored_resources;\n    /**\n     * Namespaces which must be aliased in snippets due to\n     * a known (but non-generator-predictable) naming collision\n     *\n     * Generated from protobuf field <code>repeated string forced_namespace_aliases = 5;</code>\n     */\n    private $forced_namespace_aliases;\n    /**\n     * Method signatures (in the form \"service.method(signature)\")\n     * which are provided separately, so shouldn't be generated.\n     * Snippets *calling* these methods are still generated, however.\n     *\n     * Generated from protobuf field <code>repeated string handwritten_signatures = 6;</code>\n     */\n    private $handwritten_signatures;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $renamed_services\n     *           Map from original service names to renamed versions.\n     *           This is used when the default generated types\n     *           would cause a naming conflict. (Neither name is\n     *           fully-qualified.)\n     *           Example: Subscriber to SubscriberServiceApi.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $renamed_resources\n     *           Map from full resource types to the effective short name\n     *           for the resource. This is used when otherwise resource\n     *           named from different services would cause naming collisions.\n     *           Example entry:\n     *           \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $ignored_resources\n     *           List of full resource types to ignore during generation.\n     *           This is typically used for API-specific Location resources,\n     *           which should be handled by the generator as if they were actually\n     *           the common Location resources.\n     *           Example entry: \"documentai.googleapis.com/Location\"\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $forced_namespace_aliases\n     *           Namespaces which must be aliased in snippets due to\n     *           a known (but non-generator-predictable) naming collision\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $handwritten_signatures\n     *           Method signatures (in the form \"service.method(signature)\")\n     *           which are provided separately, so shouldn't be generated.\n     *           Snippets *calling* these methods are still generated, however.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n    /**\n     * Map from original service names to renamed versions.\n     * This is used when the default generated types\n     * would cause a naming conflict. (Neither name is\n     * fully-qualified.)\n     * Example: Subscriber to SubscriberServiceApi.\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_services = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getRenamedServices()\n    {\n        return $this->renamed_services;\n    }\n\n    /**\n     * Map from original service names to renamed versions.\n     * This is used when the default generated types\n     * would cause a naming conflict. (Neither name is\n     * fully-qualified.)\n     * Example: Subscriber to SubscriberServiceApi.\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_services = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setRenamedServices($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->renamed_services = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Map from full resource types to the effective short name\n     * for the resource. This is used when otherwise resource\n     * named from different services would cause naming collisions.\n     * Example entry:\n     * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_resources = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getRenamedResources()\n    {\n        return $this->renamed_resources;\n    }\n\n    /**\n     * Map from full resource types to the effective short name\n     * for the resource. This is used when otherwise resource\n     * named from different services would cause naming collisions.\n     * Example entry:\n     * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_resources = 3;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setRenamedResources($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->renamed_resources = $arr;\n\n        return $this;\n    }\n\n    /**\n     * List of full resource types to ignore during generation.\n     * This is typically used for API-specific Location resources,\n     * which should be handled by the generator as if they were actually\n     * the common Location resources.\n     * Example entry: \"documentai.googleapis.com/Location\"\n     *\n     * Generated from protobuf field <code>repeated string ignored_resources = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getIgnoredResources()\n    {\n        return $this->ignored_resources;\n    }\n\n    /**\n     * List of full resource types to ignore during generation.\n     * This is typically used for API-specific Location resources,\n     * which should be handled by the generator as if they were actually\n     * the common Location resources.\n     * Example entry: \"documentai.googleapis.com/Location\"\n     *\n     * Generated from protobuf field <code>repeated string ignored_resources = 4;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setIgnoredResources($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->ignored_resources = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Namespaces which must be aliased in snippets due to\n     * a known (but non-generator-predictable) naming collision\n     *\n     * Generated from protobuf field <code>repeated string forced_namespace_aliases = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getForcedNamespaceAliases()\n    {\n        return $this->forced_namespace_aliases;\n    }\n\n    /**\n     * Namespaces which must be aliased in snippets due to\n     * a known (but non-generator-predictable) naming collision\n     *\n     * Generated from protobuf field <code>repeated string forced_namespace_aliases = 5;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setForcedNamespaceAliases($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->forced_namespace_aliases = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Method signatures (in the form \"service.method(signature)\")\n     * which are provided separately, so shouldn't be generated.\n     * Snippets *calling* these methods are still generated, however.\n     *\n     * Generated from protobuf field <code>repeated string handwritten_signatures = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getHandwrittenSignatures()\n    {\n        return $this->handwritten_signatures;\n    }\n\n    /**\n     * Method signatures (in the form \"service.method(signature)\")\n     * which are provided separately, so shouldn't be generated.\n     * Snippets *calling* these methods are still generated, however.\n     *\n     * Generated from protobuf field <code>repeated string handwritten_signatures = 6;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setHandwrittenSignatures($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->handwritten_signatures = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Endpoint.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/endpoint.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Endpoint` describes a network address of a service that serves a set of\n * APIs. It is commonly known as a service endpoint. A service may expose\n * any number of service endpoints, and all service endpoints share the same\n * service definition, such as quota limits and monitoring metrics.\n * Example:\n *     type: google.api.Service\n *     name: library-example.googleapis.com\n *     endpoints:\n *       # Declares network address `https://library-example.googleapis.com`\n *       # for service `library-example.googleapis.com`. The `https` scheme\n *       # is implicit for all service endpoints. Other schemes may be\n *       # supported in the future.\n *     - name: library-example.googleapis.com\n *       allow_cors: false\n *     - name: content-staging-library-example.googleapis.com\n *       # Allows HTTP OPTIONS calls to be passed to the API frontend, for it\n *       # to decide whether the subsequent cross-origin request is allowed\n *       # to proceed.\n *       allow_cors: true\n *\n * Generated from protobuf message <code>google.api.Endpoint</code>\n */\nclass Endpoint extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The canonical name of this endpoint.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * Aliases for this endpoint, these will be served by the same UrlMap as the\n     * parent endpoint, and will be provisioned in the GCP stack for the Regional\n     * Endpoints.\n     *\n     * Generated from protobuf field <code>repeated string aliases = 2;</code>\n     */\n    private $aliases;\n    /**\n     * The specification of an Internet routable address of API frontend that will\n     * handle requests to this [API\n     * Endpoint](https://cloud.google.com/apis/design/glossary). It should be\n     * either a valid IPv4 address or a fully-qualified domain name. For example,\n     * \"8.8.8.8\" or \"myservice.appspot.com\".\n     *\n     * Generated from protobuf field <code>string target = 101;</code>\n     */\n    protected $target = '';\n    /**\n     * Allowing\n     * [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\n     * cross-domain traffic, would allow the backends served from this endpoint to\n     * receive and respond to HTTP OPTIONS requests. The response will be used by\n     * the browser to determine whether the subsequent cross-origin request is\n     * allowed to proceed.\n     *\n     * Generated from protobuf field <code>bool allow_cors = 5;</code>\n     */\n    protected $allow_cors = false;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The canonical name of this endpoint.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $aliases\n     *           Aliases for this endpoint, these will be served by the same UrlMap as the\n     *           parent endpoint, and will be provisioned in the GCP stack for the Regional\n     *           Endpoints.\n     *     @type string $target\n     *           The specification of an Internet routable address of API frontend that will\n     *           handle requests to this [API\n     *           Endpoint](https://cloud.google.com/apis/design/glossary). It should be\n     *           either a valid IPv4 address or a fully-qualified domain name. For example,\n     *           \"8.8.8.8\" or \"myservice.appspot.com\".\n     *     @type bool $allow_cors\n     *           Allowing\n     *           [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\n     *           cross-domain traffic, would allow the backends served from this endpoint to\n     *           receive and respond to HTTP OPTIONS requests. The response will be used by\n     *           the browser to determine whether the subsequent cross-origin request is\n     *           allowed to proceed.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Endpoint::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The canonical name of this endpoint.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The canonical name of this endpoint.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Aliases for this endpoint, these will be served by the same UrlMap as the\n     * parent endpoint, and will be provisioned in the GCP stack for the Regional\n     * Endpoints.\n     *\n     * Generated from protobuf field <code>repeated string aliases = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAliases()\n    {\n        return $this->aliases;\n    }\n\n    /**\n     * Aliases for this endpoint, these will be served by the same UrlMap as the\n     * parent endpoint, and will be provisioned in the GCP stack for the Regional\n     * Endpoints.\n     *\n     * Generated from protobuf field <code>repeated string aliases = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAliases($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->aliases = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The specification of an Internet routable address of API frontend that will\n     * handle requests to this [API\n     * Endpoint](https://cloud.google.com/apis/design/glossary). It should be\n     * either a valid IPv4 address or a fully-qualified domain name. For example,\n     * \"8.8.8.8\" or \"myservice.appspot.com\".\n     *\n     * Generated from protobuf field <code>string target = 101;</code>\n     * @return string\n     */\n    public function getTarget()\n    {\n        return $this->target;\n    }\n\n    /**\n     * The specification of an Internet routable address of API frontend that will\n     * handle requests to this [API\n     * Endpoint](https://cloud.google.com/apis/design/glossary). It should be\n     * either a valid IPv4 address or a fully-qualified domain name. For example,\n     * \"8.8.8.8\" or \"myservice.appspot.com\".\n     *\n     * Generated from protobuf field <code>string target = 101;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTarget($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->target = $var;\n\n        return $this;\n    }\n\n    /**\n     * Allowing\n     * [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\n     * cross-domain traffic, would allow the backends served from this endpoint to\n     * receive and respond to HTTP OPTIONS requests. The response will be used by\n     * the browser to determine whether the subsequent cross-origin request is\n     * allowed to proceed.\n     *\n     * Generated from protobuf field <code>bool allow_cors = 5;</code>\n     * @return bool\n     */\n    public function getAllowCors()\n    {\n        return $this->allow_cors;\n    }\n\n    /**\n     * Allowing\n     * [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\n     * cross-domain traffic, would allow the backends served from this endpoint to\n     * receive and respond to HTTP OPTIONS requests. The response will be used by\n     * the browser to determine whether the subsequent cross-origin request is\n     * allowed to proceed.\n     *\n     * Generated from protobuf field <code>bool allow_cors = 5;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setAllowCors($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->allow_cors = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ErrorReason.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/error_reason.proto\n\nnamespace Google\\Api;\n\nuse UnexpectedValueException;\n\n/**\n * Defines the supported values for `google.rpc.ErrorInfo.reason` for the\n * `googleapis.com` error domain. This error domain is reserved for [Service\n * Infrastructure](https://cloud.google.com/service-infrastructure/docs/overview).\n * For each error info of this domain, the metadata key \"service\" refers to the\n * logical identifier of an API service, such as \"pubsub.googleapis.com\". The\n * \"consumer\" refers to the entity that consumes an API Service. It typically is\n * a Google project that owns the client application or the server resource,\n * such as \"projects/123\". Other metadata keys are specific to each error\n * reason. For more information, see the definition of the specific error\n * reason.\n *\n * Protobuf type <code>google.api.ErrorReason</code>\n */\nclass ErrorReason\n{\n    /**\n     * Do not use this default value.\n     *\n     * Generated from protobuf enum <code>ERROR_REASON_UNSPECIFIED = 0;</code>\n     */\n    const ERROR_REASON_UNSPECIFIED = 0;\n    /**\n     * The request is calling a disabled service for a consumer.\n     * Example of an ErrorInfo when the consumer \"projects/123\" contacting\n     * \"pubsub.googleapis.com\" service which is disabled:\n     *     { \"reason\": \"SERVICE_DISABLED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"pubsub.googleapis.com\"\n     *       }\n     *     }\n     * This response indicates the \"pubsub.googleapis.com\" has been disabled in\n     * \"projects/123\".\n     *\n     * Generated from protobuf enum <code>SERVICE_DISABLED = 1;</code>\n     */\n    const SERVICE_DISABLED = 1;\n    /**\n     * The request whose associated billing account is disabled.\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to contact\n     * \"pubsub.googleapis.com\" service because the associated billing account is\n     * disabled:\n     *     { \"reason\": \"BILLING_DISABLED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"pubsub.googleapis.com\"\n     *       }\n     *     }\n     * This response indicates the billing account associated has been disabled.\n     *\n     * Generated from protobuf enum <code>BILLING_DISABLED = 2;</code>\n     */\n    const BILLING_DISABLED = 2;\n    /**\n     * The request is denied because the provided [API\n     * key](https://cloud.google.com/docs/authentication/api-keys) is invalid. It\n     * may be in a bad format, cannot be found, or has been expired).\n     * Example of an ErrorInfo when the request is contacting\n     * \"storage.googleapis.com\" service with an invalid API key:\n     *     { \"reason\": \"API_KEY_INVALID\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>API_KEY_INVALID = 3;</code>\n     */\n    const API_KEY_INVALID = 3;\n    /**\n     * The request is denied because it violates [API key API\n     * restrictions](https://cloud.google.com/docs/authentication/api-keys#adding_api_restrictions).\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to call the\n     * \"storage.googleapis.com\" service because this service is restricted in the\n     * API key:\n     *     { \"reason\": \"API_KEY_SERVICE_BLOCKED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>API_KEY_SERVICE_BLOCKED = 4;</code>\n     */\n    const API_KEY_SERVICE_BLOCKED = 4;\n    /**\n     * The request is denied because it violates [API key HTTP\n     * restrictions](https://cloud.google.com/docs/authentication/api-keys#adding_http_restrictions).\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to call\n     * \"storage.googleapis.com\" service because the http referrer of the request\n     * violates API key HTTP restrictions:\n     *     { \"reason\": \"API_KEY_HTTP_REFERRER_BLOCKED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\",\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>API_KEY_HTTP_REFERRER_BLOCKED = 7;</code>\n     */\n    const API_KEY_HTTP_REFERRER_BLOCKED = 7;\n    /**\n     * The request is denied because it violates [API key IP address\n     * restrictions](https://cloud.google.com/docs/authentication/api-keys#adding_application_restrictions).\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to call\n     * \"storage.googleapis.com\" service because the caller IP of the request\n     * violates API key IP address restrictions:\n     *     { \"reason\": \"API_KEY_IP_ADDRESS_BLOCKED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\",\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>API_KEY_IP_ADDRESS_BLOCKED = 8;</code>\n     */\n    const API_KEY_IP_ADDRESS_BLOCKED = 8;\n    /**\n     * The request is denied because it violates [API key Android application\n     * restrictions](https://cloud.google.com/docs/authentication/api-keys#adding_application_restrictions).\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to call\n     * \"storage.googleapis.com\" service because the request from the Android apps\n     * violates the API key Android application restrictions:\n     *     { \"reason\": \"API_KEY_ANDROID_APP_BLOCKED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>API_KEY_ANDROID_APP_BLOCKED = 9;</code>\n     */\n    const API_KEY_ANDROID_APP_BLOCKED = 9;\n    /**\n     * The request is denied because it violates [API key iOS application\n     * restrictions](https://cloud.google.com/docs/authentication/api-keys#adding_application_restrictions).\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to call\n     * \"storage.googleapis.com\" service because the request from the iOS apps\n     * violates the API key iOS application restrictions:\n     *     { \"reason\": \"API_KEY_IOS_APP_BLOCKED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>API_KEY_IOS_APP_BLOCKED = 13;</code>\n     */\n    const API_KEY_IOS_APP_BLOCKED = 13;\n    /**\n     * The request is denied because there is not enough rate quota for the\n     * consumer.\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to contact\n     * \"pubsub.googleapis.com\" service because consumer's rate quota usage has\n     * reached the maximum value set for the quota limit\n     * \"ReadsPerMinutePerProject\" on the quota metric\n     * \"pubsub.googleapis.com/read_requests\":\n     *     { \"reason\": \"RATE_LIMIT_EXCEEDED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"pubsub.googleapis.com\",\n     *         \"quota_metric\": \"pubsub.googleapis.com/read_requests\",\n     *         \"quota_limit\": \"ReadsPerMinutePerProject\"\n     *       }\n     *     }\n     * Example of an ErrorInfo when the consumer \"projects/123\" checks quota on\n     * the service \"dataflow.googleapis.com\" and hits the organization quota\n     * limit \"DefaultRequestsPerMinutePerOrganization\" on the metric\n     * \"dataflow.googleapis.com/default_requests\".\n     *     { \"reason\": \"RATE_LIMIT_EXCEEDED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"dataflow.googleapis.com\",\n     *         \"quota_metric\": \"dataflow.googleapis.com/default_requests\",\n     *         \"quota_limit\": \"DefaultRequestsPerMinutePerOrganization\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>RATE_LIMIT_EXCEEDED = 5;</code>\n     */\n    const RATE_LIMIT_EXCEEDED = 5;\n    /**\n     * The request is denied because there is not enough resource quota for the\n     * consumer.\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to contact\n     * \"compute.googleapis.com\" service because consumer's resource quota usage\n     * has reached the maximum value set for the quota limit \"VMsPerProject\"\n     * on the quota metric \"compute.googleapis.com/vms\":\n     *     { \"reason\": \"RESOURCE_QUOTA_EXCEEDED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"compute.googleapis.com\",\n     *         \"quota_metric\": \"compute.googleapis.com/vms\",\n     *         \"quota_limit\": \"VMsPerProject\"\n     *       }\n     *     }\n     * Example of an ErrorInfo when the consumer \"projects/123\" checks resource\n     * quota on the service \"dataflow.googleapis.com\" and hits the organization\n     * quota limit \"jobs-per-organization\" on the metric\n     * \"dataflow.googleapis.com/job_count\".\n     *     { \"reason\": \"RESOURCE_QUOTA_EXCEEDED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"dataflow.googleapis.com\",\n     *         \"quota_metric\": \"dataflow.googleapis.com/job_count\",\n     *         \"quota_limit\": \"jobs-per-organization\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>RESOURCE_QUOTA_EXCEEDED = 6;</code>\n     */\n    const RESOURCE_QUOTA_EXCEEDED = 6;\n    /**\n     * The request whose associated billing account address is in a tax restricted\n     * location, violates the local tax restrictions when creating resources in\n     * the restricted region.\n     * Example of an ErrorInfo when creating the Cloud Storage Bucket in the\n     * container \"projects/123\" under a tax restricted region\n     * \"locations/asia-northeast3\":\n     *     { \"reason\": \"LOCATION_TAX_POLICY_VIOLATED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"location\": \"locations/asia-northeast3\"\n     *       }\n     *     }\n     * This response indicates creating the Cloud Storage Bucket in\n     * \"locations/asia-northeast3\" violates the location tax restriction.\n     *\n     * Generated from protobuf enum <code>LOCATION_TAX_POLICY_VIOLATED = 10;</code>\n     */\n    const LOCATION_TAX_POLICY_VIOLATED = 10;\n    /**\n     * The request is denied because the caller does not have required permission\n     * on the user project \"projects/123\" or the user project is invalid. For more\n     * information, check the [userProject System\n     * Parameters](https://cloud.google.com/apis/docs/system-parameters).\n     * Example of an ErrorInfo when the caller is calling Cloud Storage service\n     * with insufficient permissions on the user project:\n     *     { \"reason\": \"USER_PROJECT_DENIED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>USER_PROJECT_DENIED = 11;</code>\n     */\n    const USER_PROJECT_DENIED = 11;\n    /**\n     * The request is denied because the consumer \"projects/123\" is suspended due\n     * to Terms of Service(Tos) violations. Check [Project suspension\n     * guidelines](https://cloud.google.com/resource-manager/docs/project-suspension-guidelines)\n     * for more information.\n     * Example of an ErrorInfo when calling Cloud Storage service with the\n     * suspended consumer \"projects/123\":\n     *     { \"reason\": \"CONSUMER_SUSPENDED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>CONSUMER_SUSPENDED = 12;</code>\n     */\n    const CONSUMER_SUSPENDED = 12;\n    /**\n     * The request is denied because the associated consumer is invalid. It may be\n     * in a bad format, cannot be found, or have been deleted.\n     * Example of an ErrorInfo when calling Cloud Storage service with the\n     * invalid consumer \"projects/123\":\n     *     { \"reason\": \"CONSUMER_INVALID\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>CONSUMER_INVALID = 14;</code>\n     */\n    const CONSUMER_INVALID = 14;\n    /**\n     * The request is denied because it violates [VPC Service\n     * Controls](https://cloud.google.com/vpc-service-controls/docs/overview).\n     * The 'uid' field is a random generated identifier that customer can use it\n     * to search the audit log for a request rejected by VPC Service Controls. For\n     * more information, please refer [VPC Service Controls\n     * Troubleshooting](https://cloud.google.com/vpc-service-controls/docs/troubleshooting#unique-id)\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to call\n     * Cloud Storage service because the request is prohibited by the VPC Service\n     * Controls.\n     *     { \"reason\": \"SECURITY_POLICY_VIOLATED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"uid\": \"123456789abcde\",\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>SECURITY_POLICY_VIOLATED = 15;</code>\n     */\n    const SECURITY_POLICY_VIOLATED = 15;\n    /**\n     * The request is denied because the provided access token has expired.\n     * Example of an ErrorInfo when the request is calling Cloud Storage service\n     * with an expired access token:\n     *     { \"reason\": \"ACCESS_TOKEN_EXPIRED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>ACCESS_TOKEN_EXPIRED = 16;</code>\n     */\n    const ACCESS_TOKEN_EXPIRED = 16;\n    /**\n     * The request is denied because the provided access token doesn't have at\n     * least one of the acceptable scopes required for the API. Please check\n     * [OAuth 2.0 Scopes for Google\n     * APIs](https://developers.google.com/identity/protocols/oauth2/scopes) for\n     * the list of the OAuth 2.0 scopes that you might need to request to access\n     * the API.\n     * Example of an ErrorInfo when the request is calling Cloud Storage service\n     * with an access token that is missing required scopes:\n     *     { \"reason\": \"ACCESS_TOKEN_SCOPE_INSUFFICIENT\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>ACCESS_TOKEN_SCOPE_INSUFFICIENT = 17;</code>\n     */\n    const ACCESS_TOKEN_SCOPE_INSUFFICIENT = 17;\n    /**\n     * The request is denied because the account associated with the provided\n     * access token is in an invalid state, such as disabled or deleted.\n     * For more information, see https://cloud.google.com/docs/authentication.\n     * Warning: For privacy reasons, the server may not be able to disclose the\n     * email address for some accounts. The client MUST NOT depend on the\n     * availability of the `email` attribute.\n     * Example of an ErrorInfo when the request is to the Cloud Storage API with\n     * an access token that is associated with a disabled or deleted [service\n     * account](http://cloud/iam/docs/service-accounts):\n     *     { \"reason\": \"ACCOUNT_STATE_INVALID\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\",\n     *         \"email\": \"user&#64;123.iam.gserviceaccount.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>ACCOUNT_STATE_INVALID = 18;</code>\n     */\n    const ACCOUNT_STATE_INVALID = 18;\n    /**\n     * The request is denied because the type of the provided access token is not\n     * supported by the API being called.\n     * Example of an ErrorInfo when the request is to the Cloud Storage API with\n     * an unsupported token type.\n     *     { \"reason\": \"ACCESS_TOKEN_TYPE_UNSUPPORTED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>ACCESS_TOKEN_TYPE_UNSUPPORTED = 19;</code>\n     */\n    const ACCESS_TOKEN_TYPE_UNSUPPORTED = 19;\n    /**\n     * The request is denied because the request doesn't have any authentication\n     * credentials. For more information regarding the supported authentication\n     * strategies for Google Cloud APIs, see\n     * https://cloud.google.com/docs/authentication.\n     * Example of an ErrorInfo when the request is to the Cloud Storage API\n     * without any authentication credentials.\n     *     { \"reason\": \"CREDENTIALS_MISSING\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>CREDENTIALS_MISSING = 20;</code>\n     */\n    const CREDENTIALS_MISSING = 20;\n    /**\n     * The request is denied because the provided project owning the resource\n     * which acts as the [API\n     * consumer](https://cloud.google.com/apis/design/glossary#api_consumer) is\n     * invalid. It may be in a bad format or empty.\n     * Example of an ErrorInfo when the request is to the Cloud Functions API,\n     * but the offered resource project in the request in a bad format which can't\n     * perform the ListFunctions method.\n     *     { \"reason\": \"RESOURCE_PROJECT_INVALID\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"cloudfunctions.googleapis.com\",\n     *         \"method\":\n     *         \"google.cloud.functions.v1.CloudFunctionsService.ListFunctions\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>RESOURCE_PROJECT_INVALID = 21;</code>\n     */\n    const RESOURCE_PROJECT_INVALID = 21;\n    /**\n     * The request is denied because the provided session cookie is missing,\n     * invalid or failed to decode.\n     * Example of an ErrorInfo when the request is calling Cloud Storage service\n     * with a SID cookie which can't be decoded.\n     *     { \"reason\": \"SESSION_COOKIE_INVALID\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\",\n     *         \"cookie\": \"SID\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>SESSION_COOKIE_INVALID = 23;</code>\n     */\n    const SESSION_COOKIE_INVALID = 23;\n    /**\n     * The request is denied because the user is from a Google Workspace customer\n     * that blocks their users from accessing a particular service.\n     * Example scenario: https://support.google.com/a/answer/9197205?hl=en\n     * Example of an ErrorInfo when access to Google Cloud Storage service is\n     * blocked by the Google Workspace administrator:\n     *     { \"reason\": \"USER_BLOCKED_BY_ADMIN\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"storage.googleapis.com\",\n     *         \"method\": \"google.storage.v1.Storage.GetObject\",\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>USER_BLOCKED_BY_ADMIN = 24;</code>\n     */\n    const USER_BLOCKED_BY_ADMIN = 24;\n    /**\n     * The request is denied because the resource service usage is restricted\n     * by administrators according to the organization policy constraint.\n     * For more information see\n     * https://cloud.google.com/resource-manager/docs/organization-policy/restricting-services.\n     * Example of an ErrorInfo when access to Google Cloud Storage service is\n     * restricted by Resource Usage Restriction policy:\n     *     { \"reason\": \"RESOURCE_USAGE_RESTRICTION_VIOLATED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/project-123\",\n     *         \"service\": \"storage.googleapis.com\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>RESOURCE_USAGE_RESTRICTION_VIOLATED = 25;</code>\n     */\n    const RESOURCE_USAGE_RESTRICTION_VIOLATED = 25;\n    /**\n     * Unimplemented. Do not use.\n     * The request is denied because it contains unsupported system parameters in\n     * URL query parameters or HTTP headers. For more information,\n     * see https://cloud.google.com/apis/docs/system-parameters\n     * Example of an ErrorInfo when access \"pubsub.googleapis.com\" service with\n     * a request header of \"x-goog-user-ip\":\n     *     { \"reason\": \"SYSTEM_PARAMETER_UNSUPPORTED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"service\": \"pubsub.googleapis.com\"\n     *         \"parameter\": \"x-goog-user-ip\"\n     *       }\n     *     }\n     *\n     * Generated from protobuf enum <code>SYSTEM_PARAMETER_UNSUPPORTED = 26;</code>\n     */\n    const SYSTEM_PARAMETER_UNSUPPORTED = 26;\n    /**\n     * The request is denied because it violates Org Restriction: the requested\n     * resource does not belong to allowed organizations specified in\n     * \"X-Goog-Allowed-Resources\" header.\n     * Example of an ErrorInfo when accessing a GCP resource that is restricted by\n     * Org Restriction for \"pubsub.googleapis.com\" service.\n     * {\n     *   reason: \"ORG_RESTRICTION_VIOLATION\"\n     *   domain: \"googleapis.com\"\n     *   metadata {\n     *     \"consumer\":\"projects/123456\"\n     *     \"service\": \"pubsub.googleapis.com\"\n     *   }\n     * }\n     *\n     * Generated from protobuf enum <code>ORG_RESTRICTION_VIOLATION = 27;</code>\n     */\n    const ORG_RESTRICTION_VIOLATION = 27;\n    /**\n     * The request is denied because \"X-Goog-Allowed-Resources\" header is in a bad\n     * format.\n     * Example of an ErrorInfo when\n     * accessing \"pubsub.googleapis.com\" service with an invalid\n     * \"X-Goog-Allowed-Resources\" request header.\n     * {\n     *   reason: \"ORG_RESTRICTION_HEADER_INVALID\"\n     *   domain: \"googleapis.com\"\n     *   metadata {\n     *     \"consumer\":\"projects/123456\"\n     *     \"service\": \"pubsub.googleapis.com\"\n     *   }\n     * }\n     *\n     * Generated from protobuf enum <code>ORG_RESTRICTION_HEADER_INVALID = 28;</code>\n     */\n    const ORG_RESTRICTION_HEADER_INVALID = 28;\n    /**\n     * Unimplemented. Do not use.\n     * The request is calling a service that is not visible to the consumer.\n     * Example of an ErrorInfo when the consumer \"projects/123\" contacting\n     *  \"pubsub.googleapis.com\" service which is not visible to the consumer.\n     *     { \"reason\": \"SERVICE_NOT_VISIBLE\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"pubsub.googleapis.com\"\n     *       }\n     *     }\n     * This response indicates the \"pubsub.googleapis.com\" is not visible to\n     * \"projects/123\" (or it may not exist).\n     *\n     * Generated from protobuf enum <code>SERVICE_NOT_VISIBLE = 29;</code>\n     */\n    const SERVICE_NOT_VISIBLE = 29;\n    /**\n     * The request is related to a project for which GCP access is suspended.\n     * Example of an ErrorInfo when the consumer \"projects/123\" fails to contact\n     * \"pubsub.googleapis.com\" service because GCP access is suspended:\n     *     { \"reason\": \"GCP_SUSPENDED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"pubsub.googleapis.com\"\n     *       }\n     *     }\n     * This response indicates the associated GCP account has been suspended.\n     *\n     * Generated from protobuf enum <code>GCP_SUSPENDED = 30;</code>\n     */\n    const GCP_SUSPENDED = 30;\n    /**\n     * The request violates the location policies when creating resources in\n     * the restricted region.\n     * Example of an ErrorInfo when creating the Cloud Storage Bucket by\n     * \"projects/123\" for service storage.googleapis.com:\n     *     { \"reason\": \"LOCATION_POLICY_VIOLATED\",\n     *       \"domain\": \"googleapis.com\",\n     *       \"metadata\": {\n     *         \"consumer\": \"projects/123\",\n     *         \"service\": \"storage.googleapis.com\",\n     *       }\n     *     }\n     * This response indicates creating the Cloud Storage Bucket in\n     * \"locations/asia-northeast3\" violates at least one location policy.\n     * The troubleshooting guidance is provided in the Help links.\n     *\n     * Generated from protobuf enum <code>LOCATION_POLICY_VIOLATED = 31;</code>\n     */\n    const LOCATION_POLICY_VIOLATED = 31;\n    /**\n     * The request is denied because origin request header is missing.\n     * Example of an ErrorInfo when\n     * accessing \"pubsub.googleapis.com\" service with an empty \"Origin\" request\n     * header.\n     * {\n     *   reason: \"MISSING_ORIGIN\"\n     *   domain: \"googleapis.com\"\n     *   metadata {\n     *     \"consumer\":\"projects/123456\"\n     *     \"service\": \"pubsub.googleapis.com\"\n     *   }\n     * }\n     *\n     * Generated from protobuf enum <code>MISSING_ORIGIN = 33;</code>\n     */\n    const MISSING_ORIGIN = 33;\n    /**\n     * The request is denied because the request contains more than one credential\n     * type that are individually acceptable, but not together. The customer\n     * should retry their request with only one set of credentials.\n     * Example of an ErrorInfo when\n     * accessing \"pubsub.googleapis.com\" service with overloaded credentials.\n     * {\n     *   reason: \"OVERLOADED_CREDENTIALS\"\n     *   domain: \"googleapis.com\"\n     *   metadata {\n     *     \"consumer\":\"projects/123456\"\n     *     \"service\": \"pubsub.googleapis.com\"\n     *   }\n     * }\n     *\n     * Generated from protobuf enum <code>OVERLOADED_CREDENTIALS = 34;</code>\n     */\n    const OVERLOADED_CREDENTIALS = 34;\n\n    private static $valueToName = [\n        self::ERROR_REASON_UNSPECIFIED => 'ERROR_REASON_UNSPECIFIED',\n        self::SERVICE_DISABLED => 'SERVICE_DISABLED',\n        self::BILLING_DISABLED => 'BILLING_DISABLED',\n        self::API_KEY_INVALID => 'API_KEY_INVALID',\n        self::API_KEY_SERVICE_BLOCKED => 'API_KEY_SERVICE_BLOCKED',\n        self::API_KEY_HTTP_REFERRER_BLOCKED => 'API_KEY_HTTP_REFERRER_BLOCKED',\n        self::API_KEY_IP_ADDRESS_BLOCKED => 'API_KEY_IP_ADDRESS_BLOCKED',\n        self::API_KEY_ANDROID_APP_BLOCKED => 'API_KEY_ANDROID_APP_BLOCKED',\n        self::API_KEY_IOS_APP_BLOCKED => 'API_KEY_IOS_APP_BLOCKED',\n        self::RATE_LIMIT_EXCEEDED => 'RATE_LIMIT_EXCEEDED',\n        self::RESOURCE_QUOTA_EXCEEDED => 'RESOURCE_QUOTA_EXCEEDED',\n        self::LOCATION_TAX_POLICY_VIOLATED => 'LOCATION_TAX_POLICY_VIOLATED',\n        self::USER_PROJECT_DENIED => 'USER_PROJECT_DENIED',\n        self::CONSUMER_SUSPENDED => 'CONSUMER_SUSPENDED',\n        self::CONSUMER_INVALID => 'CONSUMER_INVALID',\n        self::SECURITY_POLICY_VIOLATED => 'SECURITY_POLICY_VIOLATED',\n        self::ACCESS_TOKEN_EXPIRED => 'ACCESS_TOKEN_EXPIRED',\n        self::ACCESS_TOKEN_SCOPE_INSUFFICIENT => 'ACCESS_TOKEN_SCOPE_INSUFFICIENT',\n        self::ACCOUNT_STATE_INVALID => 'ACCOUNT_STATE_INVALID',\n        self::ACCESS_TOKEN_TYPE_UNSUPPORTED => 'ACCESS_TOKEN_TYPE_UNSUPPORTED',\n        self::CREDENTIALS_MISSING => 'CREDENTIALS_MISSING',\n        self::RESOURCE_PROJECT_INVALID => 'RESOURCE_PROJECT_INVALID',\n        self::SESSION_COOKIE_INVALID => 'SESSION_COOKIE_INVALID',\n        self::USER_BLOCKED_BY_ADMIN => 'USER_BLOCKED_BY_ADMIN',\n        self::RESOURCE_USAGE_RESTRICTION_VIOLATED => 'RESOURCE_USAGE_RESTRICTION_VIOLATED',\n        self::SYSTEM_PARAMETER_UNSUPPORTED => 'SYSTEM_PARAMETER_UNSUPPORTED',\n        self::ORG_RESTRICTION_VIOLATION => 'ORG_RESTRICTION_VIOLATION',\n        self::ORG_RESTRICTION_HEADER_INVALID => 'ORG_RESTRICTION_HEADER_INVALID',\n        self::SERVICE_NOT_VISIBLE => 'SERVICE_NOT_VISIBLE',\n        self::GCP_SUSPENDED => 'GCP_SUSPENDED',\n        self::LOCATION_POLICY_VIOLATED => 'LOCATION_POLICY_VIOLATED',\n        self::MISSING_ORIGIN => 'MISSING_ORIGIN',\n        self::OVERLOADED_CREDENTIALS => 'OVERLOADED_CREDENTIALS',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/FieldBehavior.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/field_behavior.proto\n\nnamespace Google\\Api;\n\nuse UnexpectedValueException;\n\n/**\n * An indicator of the behavior of a given field (for example, that a field\n * is required in requests, or given as output but ignored as input).\n * This **does not** change the behavior in protocol buffers itself; it only\n * denotes the behavior and may affect how API tooling handles the field.\n * Note: This enum **may** receive new values in the future.\n *\n * Protobuf type <code>google.api.FieldBehavior</code>\n */\nclass FieldBehavior\n{\n    /**\n     * Conventional default for enums. Do not use this.\n     *\n     * Generated from protobuf enum <code>FIELD_BEHAVIOR_UNSPECIFIED = 0;</code>\n     */\n    const FIELD_BEHAVIOR_UNSPECIFIED = 0;\n    /**\n     * Specifically denotes a field as optional.\n     * While all fields in protocol buffers are optional, this may be specified\n     * for emphasis if appropriate.\n     *\n     * Generated from protobuf enum <code>OPTIONAL = 1;</code>\n     */\n    const OPTIONAL = 1;\n    /**\n     * Denotes a field as required.\n     * This indicates that the field **must** be provided as part of the request,\n     * and failure to do so will cause an error (usually `INVALID_ARGUMENT`).\n     *\n     * Generated from protobuf enum <code>REQUIRED = 2;</code>\n     */\n    const REQUIRED = 2;\n    /**\n     * Denotes a field as output only.\n     * This indicates that the field is provided in responses, but including the\n     * field in a request does nothing (the server *must* ignore it and\n     * *must not* throw an error as a result of the field's presence).\n     *\n     * Generated from protobuf enum <code>OUTPUT_ONLY = 3;</code>\n     */\n    const OUTPUT_ONLY = 3;\n    /**\n     * Denotes a field as input only.\n     * This indicates that the field is provided in requests, and the\n     * corresponding field is not included in output.\n     *\n     * Generated from protobuf enum <code>INPUT_ONLY = 4;</code>\n     */\n    const INPUT_ONLY = 4;\n    /**\n     * Denotes a field as immutable.\n     * This indicates that the field may be set once in a request to create a\n     * resource, but may not be changed thereafter.\n     *\n     * Generated from protobuf enum <code>IMMUTABLE = 5;</code>\n     */\n    const IMMUTABLE = 5;\n    /**\n     * Denotes that a (repeated) field is an unordered list.\n     * This indicates that the service may provide the elements of the list\n     * in any arbitrary  order, rather than the order the user originally\n     * provided. Additionally, the list's order may or may not be stable.\n     *\n     * Generated from protobuf enum <code>UNORDERED_LIST = 6;</code>\n     */\n    const UNORDERED_LIST = 6;\n    /**\n     * Denotes that this field returns a non-empty default value if not set.\n     * This indicates that if the user provides the empty value in a request,\n     * a non-empty value will be returned. The user will not be aware of what\n     * non-empty value to expect.\n     *\n     * Generated from protobuf enum <code>NON_EMPTY_DEFAULT = 7;</code>\n     */\n    const NON_EMPTY_DEFAULT = 7;\n    /**\n     * Denotes that the field in a resource (a message annotated with\n     * google.api.resource) is used in the resource name to uniquely identify the\n     * resource. For AIP-compliant APIs, this should only be applied to the\n     * `name` field on the resource.\n     * This behavior should not be applied to references to other resources within\n     * the message.\n     * The identifier field of resources often have different field behavior\n     * depending on the request it is embedded in (e.g. for Create methods name\n     * is optional and unused, while for Update methods it is required). Instead\n     * of method-specific annotations, only `IDENTIFIER` is required.\n     *\n     * Generated from protobuf enum <code>IDENTIFIER = 8;</code>\n     */\n    const IDENTIFIER = 8;\n\n    private static $valueToName = [\n        self::FIELD_BEHAVIOR_UNSPECIFIED => 'FIELD_BEHAVIOR_UNSPECIFIED',\n        self::OPTIONAL => 'OPTIONAL',\n        self::REQUIRED => 'REQUIRED',\n        self::OUTPUT_ONLY => 'OUTPUT_ONLY',\n        self::INPUT_ONLY => 'INPUT_ONLY',\n        self::IMMUTABLE => 'IMMUTABLE',\n        self::UNORDERED_LIST => 'UNORDERED_LIST',\n        self::NON_EMPTY_DEFAULT => 'NON_EMPTY_DEFAULT',\n        self::IDENTIFIER => 'IDENTIFIER',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/FieldInfo/Format.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/field_info.proto\n\nnamespace Google\\Api\\FieldInfo;\n\nuse UnexpectedValueException;\n\n/**\n * The standard format of a field value. The supported formats are all backed\n * by either an RFC defined by the IETF or a Google-defined AIP.\n *\n * Protobuf type <code>google.api.FieldInfo.Format</code>\n */\nclass Format\n{\n    /**\n     * Default, unspecified value.\n     *\n     * Generated from protobuf enum <code>FORMAT_UNSPECIFIED = 0;</code>\n     */\n    const FORMAT_UNSPECIFIED = 0;\n    /**\n     * Universally Unique Identifier, version 4, value as defined by\n     * https://datatracker.ietf.org/doc/html/rfc4122. The value may be\n     * normalized to entirely lowercase letters. For example, the value\n     * `F47AC10B-58CC-0372-8567-0E02B2C3D479` would be normalized to\n     * `f47ac10b-58cc-0372-8567-0e02b2c3d479`.\n     *\n     * Generated from protobuf enum <code>UUID4 = 1;</code>\n     */\n    const UUID4 = 1;\n    /**\n     * Internet Protocol v4 value as defined by [RFC\n     * 791](https://datatracker.ietf.org/doc/html/rfc791). The value may be\n     * condensed, with leading zeros in each octet stripped. For example,\n     * `001.022.233.040` would be condensed to `1.22.233.40`.\n     *\n     * Generated from protobuf enum <code>IPV4 = 2;</code>\n     */\n    const IPV4 = 2;\n    /**\n     * Internet Protocol v6 value as defined by [RFC\n     * 2460](https://datatracker.ietf.org/doc/html/rfc2460). The value may be\n     * normalized to entirely lowercase letters with zeros compressed, following\n     * [RFC 5952](https://datatracker.ietf.org/doc/html/rfc5952). For example,\n     * the value `2001:0DB8:0::0` would be normalized to `2001:db8::`.\n     *\n     * Generated from protobuf enum <code>IPV6 = 3;</code>\n     */\n    const IPV6 = 3;\n    /**\n     * An IP address in either v4 or v6 format as described by the individual\n     * values defined herein. See the comments on the IPV4 and IPV6 types for\n     * allowed normalizations of each.\n     *\n     * Generated from protobuf enum <code>IPV4_OR_IPV6 = 4;</code>\n     */\n    const IPV4_OR_IPV6 = 4;\n\n    private static $valueToName = [\n        self::FORMAT_UNSPECIFIED => 'FORMAT_UNSPECIFIED',\n        self::UUID4 => 'UUID4',\n        self::IPV4 => 'IPV4',\n        self::IPV6 => 'IPV6',\n        self::IPV4_OR_IPV6 => 'IPV4_OR_IPV6',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/FieldInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/field_info.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Rich semantic information of an API field beyond basic typing.\n *\n * Generated from protobuf message <code>google.api.FieldInfo</code>\n */\nclass FieldInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The standard format of a field value. This does not explicitly configure\n     * any API consumer, just documents the API's format for the field it is\n     * applied to.\n     *\n     * Generated from protobuf field <code>.google.api.FieldInfo.Format format = 1;</code>\n     */\n    protected $format = 0;\n    /**\n     * The type(s) that the annotated, generic field may represent.\n     * Currently, this must only be used on fields of type `google.protobuf.Any`.\n     * Supporting other generic types may be considered in the future.\n     *\n     * Generated from protobuf field <code>repeated .google.api.TypeReference referenced_types = 2;</code>\n     */\n    private $referenced_types;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $format\n     *           The standard format of a field value. This does not explicitly configure\n     *           any API consumer, just documents the API's format for the field it is\n     *           applied to.\n     *     @type array<\\Google\\Api\\TypeReference>|\\Google\\Protobuf\\Internal\\RepeatedField $referenced_types\n     *           The type(s) that the annotated, generic field may represent.\n     *           Currently, this must only be used on fields of type `google.protobuf.Any`.\n     *           Supporting other generic types may be considered in the future.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\FieldInfo::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The standard format of a field value. This does not explicitly configure\n     * any API consumer, just documents the API's format for the field it is\n     * applied to.\n     *\n     * Generated from protobuf field <code>.google.api.FieldInfo.Format format = 1;</code>\n     * @return int\n     */\n    public function getFormat()\n    {\n        return $this->format;\n    }\n\n    /**\n     * The standard format of a field value. This does not explicitly configure\n     * any API consumer, just documents the API's format for the field it is\n     * applied to.\n     *\n     * Generated from protobuf field <code>.google.api.FieldInfo.Format format = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setFormat($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\FieldInfo\\Format::class);\n        $this->format = $var;\n\n        return $this;\n    }\n\n    /**\n     * The type(s) that the annotated, generic field may represent.\n     * Currently, this must only be used on fields of type `google.protobuf.Any`.\n     * Supporting other generic types may be considered in the future.\n     *\n     * Generated from protobuf field <code>repeated .google.api.TypeReference referenced_types = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getReferencedTypes()\n    {\n        return $this->referenced_types;\n    }\n\n    /**\n     * The type(s) that the annotated, generic field may represent.\n     * Currently, this must only be used on fields of type `google.protobuf.Any`.\n     * Supporting other generic types may be considered in the future.\n     *\n     * Generated from protobuf field <code>repeated .google.api.TypeReference referenced_types = 2;</code>\n     * @param array<\\Google\\Api\\TypeReference>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setReferencedTypes($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\TypeReference::class);\n        $this->referenced_types = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/FieldPolicy.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/policy.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Google API Policy Annotation\n * This message defines a simple API policy annotation that can be used to\n * annotate API request and response message fields with applicable policies.\n * One field may have multiple applicable policies that must all be satisfied\n * before a request can be processed. This policy annotation is used to\n * generate the overall policy that will be used for automatic runtime\n * policy enforcement and documentation generation.\n *\n * Generated from protobuf message <code>google.api.FieldPolicy</code>\n */\nclass FieldPolicy extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects one or more request or response message fields to apply this\n     * `FieldPolicy`.\n     * When a `FieldPolicy` is used in proto annotation, the selector must\n     * be left as empty. The service config generator will automatically fill\n     * the correct value.\n     * When a `FieldPolicy` is used in service config, the selector must be a\n     * comma-separated string with valid request or response field paths,\n     * such as \"foo.bar\" or \"foo.bar,foo.baz\".\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * Specifies the required permission(s) for the resource referred to by the\n     * field. It requires the field contains a valid resource reference, and\n     * the request must pass the permission checks to proceed. For example,\n     * \"resourcemanager.projects.get\".\n     *\n     * Generated from protobuf field <code>string resource_permission = 2;</code>\n     */\n    protected $resource_permission = '';\n    /**\n     * Specifies the resource type for the resource referred to by the field.\n     *\n     * Generated from protobuf field <code>string resource_type = 3;</code>\n     */\n    protected $resource_type = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects one or more request or response message fields to apply this\n     *           `FieldPolicy`.\n     *           When a `FieldPolicy` is used in proto annotation, the selector must\n     *           be left as empty. The service config generator will automatically fill\n     *           the correct value.\n     *           When a `FieldPolicy` is used in service config, the selector must be a\n     *           comma-separated string with valid request or response field paths,\n     *           such as \"foo.bar\" or \"foo.bar,foo.baz\".\n     *     @type string $resource_permission\n     *           Specifies the required permission(s) for the resource referred to by the\n     *           field. It requires the field contains a valid resource reference, and\n     *           the request must pass the permission checks to proceed. For example,\n     *           \"resourcemanager.projects.get\".\n     *     @type string $resource_type\n     *           Specifies the resource type for the resource referred to by the field.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects one or more request or response message fields to apply this\n     * `FieldPolicy`.\n     * When a `FieldPolicy` is used in proto annotation, the selector must\n     * be left as empty. The service config generator will automatically fill\n     * the correct value.\n     * When a `FieldPolicy` is used in service config, the selector must be a\n     * comma-separated string with valid request or response field paths,\n     * such as \"foo.bar\" or \"foo.bar,foo.baz\".\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects one or more request or response message fields to apply this\n     * `FieldPolicy`.\n     * When a `FieldPolicy` is used in proto annotation, the selector must\n     * be left as empty. The service config generator will automatically fill\n     * the correct value.\n     * When a `FieldPolicy` is used in service config, the selector must be a\n     * comma-separated string with valid request or response field paths,\n     * such as \"foo.bar\" or \"foo.bar,foo.baz\".\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies the required permission(s) for the resource referred to by the\n     * field. It requires the field contains a valid resource reference, and\n     * the request must pass the permission checks to proceed. For example,\n     * \"resourcemanager.projects.get\".\n     *\n     * Generated from protobuf field <code>string resource_permission = 2;</code>\n     * @return string\n     */\n    public function getResourcePermission()\n    {\n        return $this->resource_permission;\n    }\n\n    /**\n     * Specifies the required permission(s) for the resource referred to by the\n     * field. It requires the field contains a valid resource reference, and\n     * the request must pass the permission checks to proceed. For example,\n     * \"resourcemanager.projects.get\".\n     *\n     * Generated from protobuf field <code>string resource_permission = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResourcePermission($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource_permission = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies the resource type for the resource referred to by the field.\n     *\n     * Generated from protobuf field <code>string resource_type = 3;</code>\n     * @return string\n     */\n    public function getResourceType()\n    {\n        return $this->resource_type;\n    }\n\n    /**\n     * Specifies the resource type for the resource referred to by the field.\n     *\n     * Generated from protobuf field <code>string resource_type = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResourceType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource_type = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/GoSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Go client libraries.\n *\n * Generated from protobuf message <code>google.api.GoSettings</code>\n */\nclass GoSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n    /**\n     * Map of service names to renamed services. Keys are the package relative\n     * service names and values are the name to be used for the service client\n     * and call options.\n     * publishing:\n     *   go_settings:\n     *     renamed_services:\n     *       Publisher: TopicAdmin\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_services = 2;</code>\n     */\n    private $renamed_services;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $renamed_services\n     *           Map of service names to renamed services. Keys are the package relative\n     *           service names and values are the name to be used for the service client\n     *           and call options.\n     *           publishing:\n     *             go_settings:\n     *               renamed_services:\n     *                 Publisher: TopicAdmin\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n    /**\n     * Map of service names to renamed services. Keys are the package relative\n     * service names and values are the name to be used for the service client\n     * and call options.\n     * publishing:\n     *   go_settings:\n     *     renamed_services:\n     *       Publisher: TopicAdmin\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_services = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getRenamedServices()\n    {\n        return $this->renamed_services;\n    }\n\n    /**\n     * Map of service names to renamed services. Keys are the package relative\n     * service names and values are the name to be used for the service client\n     * and call options.\n     * publishing:\n     *   go_settings:\n     *     renamed_services:\n     *       Publisher: TopicAdmin\n     *\n     * Generated from protobuf field <code>map<string, string> renamed_services = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setRenamedServices($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->renamed_services = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Http.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/http.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * Generated from protobuf message <code>google.api.Http</code>\n */\nclass Http extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of HTTP configuration rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.HttpRule rules = 1;</code>\n     */\n    private $rules;\n    /**\n     * When set to true, URL path parameters will be fully URI-decoded except in\n     * cases of single segment matches in reserved expansion, where \"%2F\" will be\n     * left encoded.\n     * The default behavior is to not decode RFC 6570 reserved characters in multi\n     * segment matches.\n     *\n     * Generated from protobuf field <code>bool fully_decode_reserved_expansion = 2;</code>\n     */\n    protected $fully_decode_reserved_expansion = false;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\HttpRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of HTTP configuration rules that apply to individual API methods.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *     @type bool $fully_decode_reserved_expansion\n     *           When set to true, URL path parameters will be fully URI-decoded except in\n     *           cases of single segment matches in reserved expansion, where \"%2F\" will be\n     *           left encoded.\n     *           The default behavior is to not decode RFC 6570 reserved characters in multi\n     *           segment matches.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Http::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of HTTP configuration rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.HttpRule rules = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of HTTP configuration rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.HttpRule rules = 1;</code>\n     * @param array<\\Google\\Api\\HttpRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\HttpRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n    /**\n     * When set to true, URL path parameters will be fully URI-decoded except in\n     * cases of single segment matches in reserved expansion, where \"%2F\" will be\n     * left encoded.\n     * The default behavior is to not decode RFC 6570 reserved characters in multi\n     * segment matches.\n     *\n     * Generated from protobuf field <code>bool fully_decode_reserved_expansion = 2;</code>\n     * @return bool\n     */\n    public function getFullyDecodeReservedExpansion()\n    {\n        return $this->fully_decode_reserved_expansion;\n    }\n\n    /**\n     * When set to true, URL path parameters will be fully URI-decoded except in\n     * cases of single segment matches in reserved expansion, where \"%2F\" will be\n     * left encoded.\n     * The default behavior is to not decode RFC 6570 reserved characters in multi\n     * segment matches.\n     *\n     * Generated from protobuf field <code>bool fully_decode_reserved_expansion = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setFullyDecodeReservedExpansion($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->fully_decode_reserved_expansion = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/HttpBody.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/httpbody.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Message that represents an arbitrary HTTP body. It should only be used for\n * payload formats that can't be represented as JSON, such as raw binary or\n * an HTML page.\n * This message can be used both in streaming and non-streaming API methods in\n * the request as well as the response.\n * It can be used as a top-level request field, which is convenient if one\n * wants to extract parameters from either the URL or HTTP template into the\n * request fields and also want access to the raw HTTP body.\n * Example:\n *     message GetResourceRequest {\n *       // A unique request id.\n *       string request_id = 1;\n *       // The raw HTTP body is bound to this field.\n *       google.api.HttpBody http_body = 2;\n *     }\n *     service ResourceService {\n *       rpc GetResource(GetResourceRequest)\n *         returns (google.api.HttpBody);\n *       rpc UpdateResource(google.api.HttpBody)\n *         returns (google.protobuf.Empty);\n *     }\n * Example with streaming methods:\n *     service CaldavService {\n *       rpc GetCalendar(stream google.api.HttpBody)\n *         returns (stream google.api.HttpBody);\n *       rpc UpdateCalendar(stream google.api.HttpBody)\n *         returns (stream google.api.HttpBody);\n *     }\n * Use of this type only changes how the request and response bodies are\n * handled, all other features will continue to work unchanged.\n *\n * Generated from protobuf message <code>google.api.HttpBody</code>\n */\nclass HttpBody extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The HTTP Content-Type header value specifying the content type of the body.\n     *\n     * Generated from protobuf field <code>string content_type = 1;</code>\n     */\n    protected $content_type = '';\n    /**\n     * The HTTP request/response body as raw binary.\n     *\n     * Generated from protobuf field <code>bytes data = 2;</code>\n     */\n    protected $data = '';\n    /**\n     * Application specific response metadata. Must be set in the first response\n     * for streaming APIs.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any extensions = 3;</code>\n     */\n    private $extensions;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $content_type\n     *           The HTTP Content-Type header value specifying the content type of the body.\n     *     @type string $data\n     *           The HTTP request/response body as raw binary.\n     *     @type array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $extensions\n     *           Application specific response metadata. Must be set in the first response\n     *           for streaming APIs.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Httpbody::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The HTTP Content-Type header value specifying the content type of the body.\n     *\n     * Generated from protobuf field <code>string content_type = 1;</code>\n     * @return string\n     */\n    public function getContentType()\n    {\n        return $this->content_type;\n    }\n\n    /**\n     * The HTTP Content-Type header value specifying the content type of the body.\n     *\n     * Generated from protobuf field <code>string content_type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setContentType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->content_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP request/response body as raw binary.\n     *\n     * Generated from protobuf field <code>bytes data = 2;</code>\n     * @return string\n     */\n    public function getData()\n    {\n        return $this->data;\n    }\n\n    /**\n     * The HTTP request/response body as raw binary.\n     *\n     * Generated from protobuf field <code>bytes data = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setData($var)\n    {\n        GPBUtil::checkString($var, False);\n        $this->data = $var;\n\n        return $this;\n    }\n\n    /**\n     * Application specific response metadata. Must be set in the first response\n     * for streaming APIs.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any extensions = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getExtensions()\n    {\n        return $this->extensions;\n    }\n\n    /**\n     * Application specific response metadata. Must be set in the first response\n     * for streaming APIs.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any extensions = 3;</code>\n     * @param array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setExtensions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Any::class);\n        $this->extensions = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/HttpRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/http.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * gRPC Transcoding\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n * Example:\n *     service Messaging {\n *       rpc GetMessage(GetMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *             get: \"/v1/{name=messages/&#42;}\"\n *         };\n *       }\n *     }\n *     message GetMessageRequest {\n *       string name = 1; // Mapped to URL path.\n *     }\n *     message Message {\n *       string text = 1; // The resource content.\n *     }\n * This enables an HTTP REST to gRPC mapping as below:\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *     service Messaging {\n *       rpc GetMessage(GetMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *             get:\"/v1/messages/{message_id}\"\n *         };\n *       }\n *     }\n *     message GetMessageRequest {\n *       message SubMessage {\n *         string subfield = 1;\n *       }\n *       string message_id = 1; // Mapped to URL path.\n *       int64 revision = 2;    // Mapped to URL query parameter `revision`.\n *       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\n *     }\n * This enables a HTTP JSON to RPC mapping as below:\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *     service Messaging {\n *       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *           patch: \"/v1/messages/{message_id}\"\n *           body: \"message\"\n *         };\n *       }\n *     }\n *     message UpdateMessageRequest {\n *       string message_id = 1; // mapped to the URL\n *       Message message = 2;   // mapped to the body\n *     }\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body.  This enables the following alternative definition of\n * the update method:\n *     service Messaging {\n *       rpc UpdateMessage(Message) returns (Message) {\n *         option (google.api.http) = {\n *           patch: \"/v1/messages/{message_id}\"\n *           body: \"*\"\n *         };\n *       }\n *     }\n *     message Message {\n *       string message_id = 1;\n *       string text = 2;\n *     }\n * The following HTTP JSON to RPC mapping is enabled:\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *     service Messaging {\n *       rpc GetMessage(GetMessageRequest) returns (Message) {\n *         option (google.api.http) = {\n *           get: \"/v1/messages/{message_id}\"\n *           additional_bindings {\n *             get: \"/v1/users/{user_id}/messages/{message_id}\"\n *           }\n *         };\n *       }\n *     }\n *     message GetMessageRequest {\n *       string message_id = 1;\n *       string user_id = 2;\n *     }\n * This enables the following two alternative HTTP JSON to RPC mappings:\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n * Rules for HTTP mapping\n * 1. Leaf request fields (recursive expansion nested messages in the request\n *    message) are classified into three categories:\n *    - Fields referred by the path template. They are passed via the URL path.\n *    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n *    are passed via the HTTP\n *      request body.\n *    - All other fields are passed via the URL query parameters, and the\n *      parameter name is the field path in the request message. A repeated\n *      field can be represented as multiple query parameters under the same\n *      name.\n *  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n *  query parameter, all fields\n *     are passed via URL path and HTTP request body.\n *  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n *  request body, all\n *     fields are passed via URL path and URL query parameters.\n * Path template syntax\n *     Template = \"/\" Segments [ Verb ] ;\n *     Segments = Segment { \"/\" Segment } ;\n *     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n *     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n *     FieldPath = IDENT { \".\" IDENT } ;\n *     Verb     = \":\" LITERAL ;\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n * If a variable contains multiple path segments, such as `\"{var=foo/&#42;}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n * Using gRPC API Service Configuration\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *     http:\n *       rules:\n *         - selector: example.v1.Messaging.GetMessage\n *           get: /v1/messages/{message_id}/{sub.subfield}\n * Special notes\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * Generated from protobuf message <code>google.api.HttpRule</code>\n */\nclass HttpRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects a method to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * The name of the request field whose value is mapped to the HTTP request\n     * body, or `*` for mapping all request fields not captured by the path\n     * pattern to the HTTP body, or omitted for not having any HTTP request body.\n     * NOTE: the referred field must be present at the top-level of the request\n     * message type.\n     *\n     * Generated from protobuf field <code>string body = 7;</code>\n     */\n    protected $body = '';\n    /**\n     * Optional. The name of the response field whose value is mapped to the HTTP\n     * response body. When omitted, the entire response message will be used\n     * as the HTTP response body.\n     * NOTE: The referred field must be present at the top-level of the response\n     * message type.\n     *\n     * Generated from protobuf field <code>string response_body = 12;</code>\n     */\n    protected $response_body = '';\n    /**\n     * Additional HTTP bindings for the selector. Nested bindings must\n     * not contain an `additional_bindings` field themselves (that is,\n     * the nesting may only be one level deep).\n     *\n     * Generated from protobuf field <code>repeated .google.api.HttpRule additional_bindings = 11;</code>\n     */\n    private $additional_bindings;\n    protected $pattern;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects a method to which this rule applies.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type string $get\n     *           Maps to HTTP GET. Used for listing and getting information about\n     *           resources.\n     *     @type string $put\n     *           Maps to HTTP PUT. Used for replacing a resource.\n     *     @type string $post\n     *           Maps to HTTP POST. Used for creating a resource or performing an action.\n     *     @type string $delete\n     *           Maps to HTTP DELETE. Used for deleting a resource.\n     *     @type string $patch\n     *           Maps to HTTP PATCH. Used for updating a resource.\n     *     @type \\Google\\Api\\CustomHttpPattern $custom\n     *           The custom pattern is used for specifying an HTTP method that is not\n     *           included in the `pattern` field, such as HEAD, or \"*\" to leave the\n     *           HTTP method unspecified for this rule. The wild-card rule is useful\n     *           for services that provide content to Web (HTML) clients.\n     *     @type string $body\n     *           The name of the request field whose value is mapped to the HTTP request\n     *           body, or `*` for mapping all request fields not captured by the path\n     *           pattern to the HTTP body, or omitted for not having any HTTP request body.\n     *           NOTE: the referred field must be present at the top-level of the request\n     *           message type.\n     *     @type string $response_body\n     *           Optional. The name of the response field whose value is mapped to the HTTP\n     *           response body. When omitted, the entire response message will be used\n     *           as the HTTP response body.\n     *           NOTE: The referred field must be present at the top-level of the response\n     *           message type.\n     *     @type array<\\Google\\Api\\HttpRule>|\\Google\\Protobuf\\Internal\\RepeatedField $additional_bindings\n     *           Additional HTTP bindings for the selector. Nested bindings must\n     *           not contain an `additional_bindings` field themselves (that is,\n     *           the nesting may only be one level deep).\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Http::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects a method to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects a method to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Maps to HTTP GET. Used for listing and getting information about\n     * resources.\n     *\n     * Generated from protobuf field <code>string get = 2;</code>\n     * @return string\n     */\n    public function getGet()\n    {\n        return $this->readOneof(2);\n    }\n\n    public function hasGet()\n    {\n        return $this->hasOneof(2);\n    }\n\n    /**\n     * Maps to HTTP GET. Used for listing and getting information about\n     * resources.\n     *\n     * Generated from protobuf field <code>string get = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setGet($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(2, $var);\n\n        return $this;\n    }\n\n    /**\n     * Maps to HTTP PUT. Used for replacing a resource.\n     *\n     * Generated from protobuf field <code>string put = 3;</code>\n     * @return string\n     */\n    public function getPut()\n    {\n        return $this->readOneof(3);\n    }\n\n    public function hasPut()\n    {\n        return $this->hasOneof(3);\n    }\n\n    /**\n     * Maps to HTTP PUT. Used for replacing a resource.\n     *\n     * Generated from protobuf field <code>string put = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPut($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(3, $var);\n\n        return $this;\n    }\n\n    /**\n     * Maps to HTTP POST. Used for creating a resource or performing an action.\n     *\n     * Generated from protobuf field <code>string post = 4;</code>\n     * @return string\n     */\n    public function getPost()\n    {\n        return $this->readOneof(4);\n    }\n\n    public function hasPost()\n    {\n        return $this->hasOneof(4);\n    }\n\n    /**\n     * Maps to HTTP POST. Used for creating a resource or performing an action.\n     *\n     * Generated from protobuf field <code>string post = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPost($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(4, $var);\n\n        return $this;\n    }\n\n    /**\n     * Maps to HTTP DELETE. Used for deleting a resource.\n     *\n     * Generated from protobuf field <code>string delete = 5;</code>\n     * @return string\n     */\n    public function getDelete()\n    {\n        return $this->readOneof(5);\n    }\n\n    public function hasDelete()\n    {\n        return $this->hasOneof(5);\n    }\n\n    /**\n     * Maps to HTTP DELETE. Used for deleting a resource.\n     *\n     * Generated from protobuf field <code>string delete = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDelete($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(5, $var);\n\n        return $this;\n    }\n\n    /**\n     * Maps to HTTP PATCH. Used for updating a resource.\n     *\n     * Generated from protobuf field <code>string patch = 6;</code>\n     * @return string\n     */\n    public function getPatch()\n    {\n        return $this->readOneof(6);\n    }\n\n    public function hasPatch()\n    {\n        return $this->hasOneof(6);\n    }\n\n    /**\n     * Maps to HTTP PATCH. Used for updating a resource.\n     *\n     * Generated from protobuf field <code>string patch = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPatch($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(6, $var);\n\n        return $this;\n    }\n\n    /**\n     * The custom pattern is used for specifying an HTTP method that is not\n     * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n     * HTTP method unspecified for this rule. The wild-card rule is useful\n     * for services that provide content to Web (HTML) clients.\n     *\n     * Generated from protobuf field <code>.google.api.CustomHttpPattern custom = 8;</code>\n     * @return \\Google\\Api\\CustomHttpPattern|null\n     */\n    public function getCustom()\n    {\n        return $this->readOneof(8);\n    }\n\n    public function hasCustom()\n    {\n        return $this->hasOneof(8);\n    }\n\n    /**\n     * The custom pattern is used for specifying an HTTP method that is not\n     * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n     * HTTP method unspecified for this rule. The wild-card rule is useful\n     * for services that provide content to Web (HTML) clients.\n     *\n     * Generated from protobuf field <code>.google.api.CustomHttpPattern custom = 8;</code>\n     * @param \\Google\\Api\\CustomHttpPattern $var\n     * @return $this\n     */\n    public function setCustom($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CustomHttpPattern::class);\n        $this->writeOneof(8, $var);\n\n        return $this;\n    }\n\n    /**\n     * The name of the request field whose value is mapped to the HTTP request\n     * body, or `*` for mapping all request fields not captured by the path\n     * pattern to the HTTP body, or omitted for not having any HTTP request body.\n     * NOTE: the referred field must be present at the top-level of the request\n     * message type.\n     *\n     * Generated from protobuf field <code>string body = 7;</code>\n     * @return string\n     */\n    public function getBody()\n    {\n        return $this->body;\n    }\n\n    /**\n     * The name of the request field whose value is mapped to the HTTP request\n     * body, or `*` for mapping all request fields not captured by the path\n     * pattern to the HTTP body, or omitted for not having any HTTP request body.\n     * NOTE: the referred field must be present at the top-level of the request\n     * message type.\n     *\n     * Generated from protobuf field <code>string body = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setBody($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->body = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The name of the response field whose value is mapped to the HTTP\n     * response body. When omitted, the entire response message will be used\n     * as the HTTP response body.\n     * NOTE: The referred field must be present at the top-level of the response\n     * message type.\n     *\n     * Generated from protobuf field <code>string response_body = 12;</code>\n     * @return string\n     */\n    public function getResponseBody()\n    {\n        return $this->response_body;\n    }\n\n    /**\n     * Optional. The name of the response field whose value is mapped to the HTTP\n     * response body. When omitted, the entire response message will be used\n     * as the HTTP response body.\n     * NOTE: The referred field must be present at the top-level of the response\n     * message type.\n     *\n     * Generated from protobuf field <code>string response_body = 12;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResponseBody($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->response_body = $var;\n\n        return $this;\n    }\n\n    /**\n     * Additional HTTP bindings for the selector. Nested bindings must\n     * not contain an `additional_bindings` field themselves (that is,\n     * the nesting may only be one level deep).\n     *\n     * Generated from protobuf field <code>repeated .google.api.HttpRule additional_bindings = 11;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAdditionalBindings()\n    {\n        return $this->additional_bindings;\n    }\n\n    /**\n     * Additional HTTP bindings for the selector. Nested bindings must\n     * not contain an `additional_bindings` field themselves (that is,\n     * the nesting may only be one level deep).\n     *\n     * Generated from protobuf field <code>repeated .google.api.HttpRule additional_bindings = 11;</code>\n     * @param array<\\Google\\Api\\HttpRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAdditionalBindings($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\HttpRule::class);\n        $this->additional_bindings = $arr;\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getPattern()\n    {\n        return $this->whichOneof(\"pattern\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/JavaSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Java client libraries.\n *\n * Generated from protobuf message <code>google.api.JavaSettings</code>\n */\nclass JavaSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The package name to use in Java. Clobbers the java_package option\n     * set in the protobuf. This should be used **only** by APIs\n     * who have already set the language_settings.java.package_name\" field\n     * in gapic.yaml. API teams should use the protobuf java_package option\n     * where possible.\n     * Example of a YAML configuration::\n     *  publishing:\n     *    java_settings:\n     *      library_package: com.google.cloud.pubsub.v1\n     *\n     * Generated from protobuf field <code>string library_package = 1;</code>\n     */\n    protected $library_package = '';\n    /**\n     * Configure the Java class name to use instead of the service's for its\n     * corresponding generated GAPIC client. Keys are fully-qualified\n     * service names as they appear in the protobuf (including the full\n     * the language_settings.java.interface_names\" field in gapic.yaml. API\n     * teams should otherwise use the service name as it appears in the\n     * protobuf.\n     * Example of a YAML configuration::\n     *  publishing:\n     *    java_settings:\n     *      service_class_names:\n     *        - google.pubsub.v1.Publisher: TopicAdmin\n     *        - google.pubsub.v1.Subscriber: SubscriptionAdmin\n     *\n     * Generated from protobuf field <code>map<string, string> service_class_names = 2;</code>\n     */\n    private $service_class_names;\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 3;</code>\n     */\n    protected $common = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $library_package\n     *           The package name to use in Java. Clobbers the java_package option\n     *           set in the protobuf. This should be used **only** by APIs\n     *           who have already set the language_settings.java.package_name\" field\n     *           in gapic.yaml. API teams should use the protobuf java_package option\n     *           where possible.\n     *           Example of a YAML configuration::\n     *            publishing:\n     *              java_settings:\n     *                library_package: com.google.cloud.pubsub.v1\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $service_class_names\n     *           Configure the Java class name to use instead of the service's for its\n     *           corresponding generated GAPIC client. Keys are fully-qualified\n     *           service names as they appear in the protobuf (including the full\n     *           the language_settings.java.interface_names\" field in gapic.yaml. API\n     *           teams should otherwise use the service name as it appears in the\n     *           protobuf.\n     *           Example of a YAML configuration::\n     *            publishing:\n     *              java_settings:\n     *                service_class_names:\n     *                  - google.pubsub.v1.Publisher: TopicAdmin\n     *                  - google.pubsub.v1.Subscriber: SubscriptionAdmin\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The package name to use in Java. Clobbers the java_package option\n     * set in the protobuf. This should be used **only** by APIs\n     * who have already set the language_settings.java.package_name\" field\n     * in gapic.yaml. API teams should use the protobuf java_package option\n     * where possible.\n     * Example of a YAML configuration::\n     *  publishing:\n     *    java_settings:\n     *      library_package: com.google.cloud.pubsub.v1\n     *\n     * Generated from protobuf field <code>string library_package = 1;</code>\n     * @return string\n     */\n    public function getLibraryPackage()\n    {\n        return $this->library_package;\n    }\n\n    /**\n     * The package name to use in Java. Clobbers the java_package option\n     * set in the protobuf. This should be used **only** by APIs\n     * who have already set the language_settings.java.package_name\" field\n     * in gapic.yaml. API teams should use the protobuf java_package option\n     * where possible.\n     * Example of a YAML configuration::\n     *  publishing:\n     *    java_settings:\n     *      library_package: com.google.cloud.pubsub.v1\n     *\n     * Generated from protobuf field <code>string library_package = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLibraryPackage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->library_package = $var;\n\n        return $this;\n    }\n\n    /**\n     * Configure the Java class name to use instead of the service's for its\n     * corresponding generated GAPIC client. Keys are fully-qualified\n     * service names as they appear in the protobuf (including the full\n     * the language_settings.java.interface_names\" field in gapic.yaml. API\n     * teams should otherwise use the service name as it appears in the\n     * protobuf.\n     * Example of a YAML configuration::\n     *  publishing:\n     *    java_settings:\n     *      service_class_names:\n     *        - google.pubsub.v1.Publisher: TopicAdmin\n     *        - google.pubsub.v1.Subscriber: SubscriptionAdmin\n     *\n     * Generated from protobuf field <code>map<string, string> service_class_names = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getServiceClassNames()\n    {\n        return $this->service_class_names;\n    }\n\n    /**\n     * Configure the Java class name to use instead of the service's for its\n     * corresponding generated GAPIC client. Keys are fully-qualified\n     * service names as they appear in the protobuf (including the full\n     * the language_settings.java.interface_names\" field in gapic.yaml. API\n     * teams should otherwise use the service name as it appears in the\n     * protobuf.\n     * Example of a YAML configuration::\n     *  publishing:\n     *    java_settings:\n     *      service_class_names:\n     *        - google.pubsub.v1.Publisher: TopicAdmin\n     *        - google.pubsub.v1.Subscriber: SubscriptionAdmin\n     *\n     * Generated from protobuf field <code>map<string, string> service_class_names = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setServiceClassNames($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->service_class_names = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 3;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 3;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/JwtLocation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/auth.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Specifies a location to extract JWT from an API request.\n *\n * Generated from protobuf message <code>google.api.JwtLocation</code>\n */\nclass JwtLocation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The value prefix. The value format is \"value_prefix{token}\"\n     * Only applies to \"in\" header type. Must be empty for \"in\" query type.\n     * If not empty, the header value has to match (case sensitive) this prefix.\n     * If not matched, JWT will not be extracted. If matched, JWT will be\n     * extracted after the prefix is removed.\n     * For example, for \"Authorization: Bearer {JWT}\",\n     * value_prefix=\"Bearer \" with a space at the end.\n     *\n     * Generated from protobuf field <code>string value_prefix = 3;</code>\n     */\n    protected $value_prefix = '';\n    protected $in;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $header\n     *           Specifies HTTP header name to extract JWT token.\n     *     @type string $query\n     *           Specifies URL query parameter name to extract JWT token.\n     *     @type string $cookie\n     *           Specifies cookie name to extract JWT token.\n     *     @type string $value_prefix\n     *           The value prefix. The value format is \"value_prefix{token}\"\n     *           Only applies to \"in\" header type. Must be empty for \"in\" query type.\n     *           If not empty, the header value has to match (case sensitive) this prefix.\n     *           If not matched, JWT will not be extracted. If matched, JWT will be\n     *           extracted after the prefix is removed.\n     *           For example, for \"Authorization: Bearer {JWT}\",\n     *           value_prefix=\"Bearer \" with a space at the end.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Specifies HTTP header name to extract JWT token.\n     *\n     * Generated from protobuf field <code>string header = 1;</code>\n     * @return string\n     */\n    public function getHeader()\n    {\n        return $this->readOneof(1);\n    }\n\n    public function hasHeader()\n    {\n        return $this->hasOneof(1);\n    }\n\n    /**\n     * Specifies HTTP header name to extract JWT token.\n     *\n     * Generated from protobuf field <code>string header = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setHeader($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(1, $var);\n\n        return $this;\n    }\n\n    /**\n     * Specifies URL query parameter name to extract JWT token.\n     *\n     * Generated from protobuf field <code>string query = 2;</code>\n     * @return string\n     */\n    public function getQuery()\n    {\n        return $this->readOneof(2);\n    }\n\n    public function hasQuery()\n    {\n        return $this->hasOneof(2);\n    }\n\n    /**\n     * Specifies URL query parameter name to extract JWT token.\n     *\n     * Generated from protobuf field <code>string query = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setQuery($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(2, $var);\n\n        return $this;\n    }\n\n    /**\n     * Specifies cookie name to extract JWT token.\n     *\n     * Generated from protobuf field <code>string cookie = 4;</code>\n     * @return string\n     */\n    public function getCookie()\n    {\n        return $this->readOneof(4);\n    }\n\n    public function hasCookie()\n    {\n        return $this->hasOneof(4);\n    }\n\n    /**\n     * Specifies cookie name to extract JWT token.\n     *\n     * Generated from protobuf field <code>string cookie = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setCookie($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(4, $var);\n\n        return $this;\n    }\n\n    /**\n     * The value prefix. The value format is \"value_prefix{token}\"\n     * Only applies to \"in\" header type. Must be empty for \"in\" query type.\n     * If not empty, the header value has to match (case sensitive) this prefix.\n     * If not matched, JWT will not be extracted. If matched, JWT will be\n     * extracted after the prefix is removed.\n     * For example, for \"Authorization: Bearer {JWT}\",\n     * value_prefix=\"Bearer \" with a space at the end.\n     *\n     * Generated from protobuf field <code>string value_prefix = 3;</code>\n     * @return string\n     */\n    public function getValuePrefix()\n    {\n        return $this->value_prefix;\n    }\n\n    /**\n     * The value prefix. The value format is \"value_prefix{token}\"\n     * Only applies to \"in\" header type. Must be empty for \"in\" query type.\n     * If not empty, the header value has to match (case sensitive) this prefix.\n     * If not matched, JWT will not be extracted. If matched, JWT will be\n     * extracted after the prefix is removed.\n     * For example, for \"Authorization: Bearer {JWT}\",\n     * value_prefix=\"Bearer \" with a space at the end.\n     *\n     * Generated from protobuf field <code>string value_prefix = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setValuePrefix($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->value_prefix = $var;\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getIn()\n    {\n        return $this->whichOneof(\"in\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/LabelDescriptor/ValueType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/label.proto\n\nnamespace Google\\Api\\LabelDescriptor;\n\nuse UnexpectedValueException;\n\n/**\n * Value types that can be used as label values.\n *\n * Protobuf type <code>google.api.LabelDescriptor.ValueType</code>\n */\nclass ValueType\n{\n    /**\n     * A variable-length string. This is the default.\n     *\n     * Generated from protobuf enum <code>STRING = 0;</code>\n     */\n    const STRING = 0;\n    /**\n     * Boolean; true or false.\n     *\n     * Generated from protobuf enum <code>BOOL = 1;</code>\n     */\n    const BOOL = 1;\n    /**\n     * A 64-bit signed integer.\n     *\n     * Generated from protobuf enum <code>INT64 = 2;</code>\n     */\n    const INT64 = 2;\n\n    private static $valueToName = [\n        self::STRING => 'STRING',\n        self::BOOL => 'BOOL',\n        self::INT64 => 'INT64',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/LabelDescriptor.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/label.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A description of a label.\n *\n * Generated from protobuf message <code>google.api.LabelDescriptor</code>\n */\nclass LabelDescriptor extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The label key.\n     *\n     * Generated from protobuf field <code>string key = 1;</code>\n     */\n    protected $key = '';\n    /**\n     * The type of data that can be assigned to the label.\n     *\n     * Generated from protobuf field <code>.google.api.LabelDescriptor.ValueType value_type = 2;</code>\n     */\n    protected $value_type = 0;\n    /**\n     * A human-readable description for the label.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     */\n    protected $description = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $key\n     *           The label key.\n     *     @type int $value_type\n     *           The type of data that can be assigned to the label.\n     *     @type string $description\n     *           A human-readable description for the label.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Label::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The label key.\n     *\n     * Generated from protobuf field <code>string key = 1;</code>\n     * @return string\n     */\n    public function getKey()\n    {\n        return $this->key;\n    }\n\n    /**\n     * The label key.\n     *\n     * Generated from protobuf field <code>string key = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setKey($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->key = $var;\n\n        return $this;\n    }\n\n    /**\n     * The type of data that can be assigned to the label.\n     *\n     * Generated from protobuf field <code>.google.api.LabelDescriptor.ValueType value_type = 2;</code>\n     * @return int\n     */\n    public function getValueType()\n    {\n        return $this->value_type;\n    }\n\n    /**\n     * The type of data that can be assigned to the label.\n     *\n     * Generated from protobuf field <code>.google.api.LabelDescriptor.ValueType value_type = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setValueType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\LabelDescriptor\\ValueType::class);\n        $this->value_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * A human-readable description for the label.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * A human-readable description for the label.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/LaunchStage.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/launch_stage.proto\n\nnamespace Google\\Api;\n\nuse UnexpectedValueException;\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * Protobuf type <code>google.api.LaunchStage</code>\n */\nclass LaunchStage\n{\n    /**\n     * Do not use this default value.\n     *\n     * Generated from protobuf enum <code>LAUNCH_STAGE_UNSPECIFIED = 0;</code>\n     */\n    const LAUNCH_STAGE_UNSPECIFIED = 0;\n    /**\n     * The feature is not yet implemented. Users can not use it.\n     *\n     * Generated from protobuf enum <code>UNIMPLEMENTED = 6;</code>\n     */\n    const UNIMPLEMENTED = 6;\n    /**\n     * Prelaunch features are hidden from users and are only visible internally.\n     *\n     * Generated from protobuf enum <code>PRELAUNCH = 7;</code>\n     */\n    const PRELAUNCH = 7;\n    /**\n     * Early Access features are limited to a closed group of testers. To use\n     * these features, you must sign up in advance and sign a Trusted Tester\n     * agreement (which includes confidentiality provisions). These features may\n     * be unstable, changed in backward-incompatible ways, and are not\n     * guaranteed to be released.\n     *\n     * Generated from protobuf enum <code>EARLY_ACCESS = 1;</code>\n     */\n    const EARLY_ACCESS = 1;\n    /**\n     * Alpha is a limited availability test for releases before they are cleared\n     * for widespread use. By Alpha, all significant design issues are resolved\n     * and we are in the process of verifying functionality. Alpha customers\n     * need to apply for access, agree to applicable terms, and have their\n     * projects allowlisted. Alpha releases don't have to be feature complete,\n     * no SLAs are provided, and there are no technical support obligations, but\n     * they will be far enough along that customers can actually use them in\n     * test environments or for limited-use tests -- just like they would in\n     * normal production cases.\n     *\n     * Generated from protobuf enum <code>ALPHA = 2;</code>\n     */\n    const ALPHA = 2;\n    /**\n     * Beta is the point at which we are ready to open a release for any\n     * customer to use. There are no SLA or technical support obligations in a\n     * Beta release. Products will be complete from a feature perspective, but\n     * may have some open outstanding issues. Beta releases are suitable for\n     * limited production use cases.\n     *\n     * Generated from protobuf enum <code>BETA = 3;</code>\n     */\n    const BETA = 3;\n    /**\n     * GA features are open to all developers and are considered stable and\n     * fully qualified for production use.\n     *\n     * Generated from protobuf enum <code>GA = 4;</code>\n     */\n    const GA = 4;\n    /**\n     * Deprecated features are scheduled to be shut down and removed. For more\n     * information, see the \"Deprecation Policy\" section of our [Terms of\n     * Service](https://cloud.google.com/terms/)\n     * and the [Google Cloud Platform Subject to the Deprecation\n     * Policy](https://cloud.google.com/terms/deprecation) documentation.\n     *\n     * Generated from protobuf enum <code>DEPRECATED = 5;</code>\n     */\n    const DEPRECATED = 5;\n\n    private static $valueToName = [\n        self::LAUNCH_STAGE_UNSPECIFIED => 'LAUNCH_STAGE_UNSPECIFIED',\n        self::UNIMPLEMENTED => 'UNIMPLEMENTED',\n        self::PRELAUNCH => 'PRELAUNCH',\n        self::EARLY_ACCESS => 'EARLY_ACCESS',\n        self::ALPHA => 'ALPHA',\n        self::BETA => 'BETA',\n        self::GA => 'GA',\n        self::DEPRECATED => 'DEPRECATED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/LogDescriptor.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/log.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A description of a log type. Example in YAML format:\n *     - name: library.googleapis.com/activity_history\n *       description: The history of borrowing and returning library items.\n *       display_name: Activity\n *       labels:\n *       - key: /customer_id\n *         description: Identifier of a library customer\n *\n * Generated from protobuf message <code>google.api.LogDescriptor</code>\n */\nclass LogDescriptor extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the log. It must be less than 512 characters long and can\n     * include the following characters: upper- and lower-case alphanumeric\n     * characters [A-Za-z0-9], and punctuation characters including\n     * slash, underscore, hyphen, period [/_-.].\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The set of labels that are available to describe a specific log entry.\n     * Runtime requests that contain labels not specified here are\n     * considered invalid.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 2;</code>\n     */\n    private $labels;\n    /**\n     * A human-readable description of this log. This information appears in\n     * the documentation and can contain details.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     */\n    protected $description = '';\n    /**\n     * The human-readable name for this log. This information appears on\n     * the user interface and should be concise.\n     *\n     * Generated from protobuf field <code>string display_name = 4;</code>\n     */\n    protected $display_name = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the log. It must be less than 512 characters long and can\n     *           include the following characters: upper- and lower-case alphanumeric\n     *           characters [A-Za-z0-9], and punctuation characters including\n     *           slash, underscore, hyphen, period [/_-.].\n     *     @type array<\\Google\\Api\\LabelDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $labels\n     *           The set of labels that are available to describe a specific log entry.\n     *           Runtime requests that contain labels not specified here are\n     *           considered invalid.\n     *     @type string $description\n     *           A human-readable description of this log. This information appears in\n     *           the documentation and can contain details.\n     *     @type string $display_name\n     *           The human-readable name for this log. This information appears on\n     *           the user interface and should be concise.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Log::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the log. It must be less than 512 characters long and can\n     * include the following characters: upper- and lower-case alphanumeric\n     * characters [A-Za-z0-9], and punctuation characters including\n     * slash, underscore, hyphen, period [/_-.].\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the log. It must be less than 512 characters long and can\n     * include the following characters: upper- and lower-case alphanumeric\n     * characters [A-Za-z0-9], and punctuation characters including\n     * slash, underscore, hyphen, period [/_-.].\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The set of labels that are available to describe a specific log entry.\n     * Runtime requests that contain labels not specified here are\n     * considered invalid.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * The set of labels that are available to describe a specific log entry.\n     * Runtime requests that contain labels not specified here are\n     * considered invalid.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 2;</code>\n     * @param array<\\Google\\Api\\LabelDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\LabelDescriptor::class);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A human-readable description of this log. This information appears in\n     * the documentation and can contain details.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * A human-readable description of this log. This information appears in\n     * the documentation and can contain details.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * The human-readable name for this log. This information appears on\n     * the user interface and should be concise.\n     *\n     * Generated from protobuf field <code>string display_name = 4;</code>\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->display_name;\n    }\n\n    /**\n     * The human-readable name for this log. This information appears on\n     * the user interface and should be concise.\n     *\n     * Generated from protobuf field <code>string display_name = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDisplayName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->display_name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Logging/LoggingDestination.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/logging.proto\n\nnamespace Google\\Api\\Logging;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Configuration of a specific logging destination (the producer project\n * or the consumer project).\n *\n * Generated from protobuf message <code>google.api.Logging.LoggingDestination</code>\n */\nclass LoggingDestination extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The monitored resource type. The type must be defined in the\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 3;</code>\n     */\n    protected $monitored_resource = '';\n    /**\n     * Names of the logs to be sent to this destination. Each name must\n     * be defined in the [Service.logs][google.api.Service.logs] section. If the\n     * log name is not a domain scoped name, it will be automatically prefixed\n     * with the service name followed by \"/\".\n     *\n     * Generated from protobuf field <code>repeated string logs = 1;</code>\n     */\n    private $logs;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $monitored_resource\n     *           The monitored resource type. The type must be defined in the\n     *           [Service.monitored_resources][google.api.Service.monitored_resources]\n     *           section.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $logs\n     *           Names of the logs to be sent to this destination. Each name must\n     *           be defined in the [Service.logs][google.api.Service.logs] section. If the\n     *           log name is not a domain scoped name, it will be automatically prefixed\n     *           with the service name followed by \"/\".\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Logging::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The monitored resource type. The type must be defined in the\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 3;</code>\n     * @return string\n     */\n    public function getMonitoredResource()\n    {\n        return $this->monitored_resource;\n    }\n\n    /**\n     * The monitored resource type. The type must be defined in the\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMonitoredResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->monitored_resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * Names of the logs to be sent to this destination. Each name must\n     * be defined in the [Service.logs][google.api.Service.logs] section. If the\n     * log name is not a domain scoped name, it will be automatically prefixed\n     * with the service name followed by \"/\".\n     *\n     * Generated from protobuf field <code>repeated string logs = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLogs()\n    {\n        return $this->logs;\n    }\n\n    /**\n     * Names of the logs to be sent to this destination. Each name must\n     * be defined in the [Service.logs][google.api.Service.logs] section. If the\n     * log name is not a domain scoped name, it will be automatically prefixed\n     * with the service name followed by \"/\".\n     *\n     * Generated from protobuf field <code>repeated string logs = 1;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLogs($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->logs = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Logging.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/logging.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Logging configuration of the service.\n * The following example shows how to configure logs to be sent to the\n * producer and consumer projects. In the example, the `activity_history`\n * log is sent to both the producer and consumer projects, whereas the\n * `purchase_history` log is only sent to the producer project.\n *     monitored_resources:\n *     - type: library.googleapis.com/branch\n *       labels:\n *       - key: /city\n *         description: The city where the library branch is located in.\n *       - key: /name\n *         description: The name of the branch.\n *     logs:\n *     - name: activity_history\n *       labels:\n *       - key: /customer_id\n *     - name: purchase_history\n *     logging:\n *       producer_destinations:\n *       - monitored_resource: library.googleapis.com/branch\n *         logs:\n *         - activity_history\n *         - purchase_history\n *       consumer_destinations:\n *       - monitored_resource: library.googleapis.com/branch\n *         logs:\n *         - activity_history\n *\n * Generated from protobuf message <code>google.api.Logging</code>\n */\nclass Logging extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Logging configurations for sending logs to the producer project.\n     * There can be multiple producer destinations, each one must have a\n     * different monitored resource type. A log can be used in at most\n     * one producer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Logging.LoggingDestination producer_destinations = 1;</code>\n     */\n    private $producer_destinations;\n    /**\n     * Logging configurations for sending logs to the consumer project.\n     * There can be multiple consumer destinations, each one must have a\n     * different monitored resource type. A log can be used in at most\n     * one consumer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Logging.LoggingDestination consumer_destinations = 2;</code>\n     */\n    private $consumer_destinations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\Logging\\LoggingDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $producer_destinations\n     *           Logging configurations for sending logs to the producer project.\n     *           There can be multiple producer destinations, each one must have a\n     *           different monitored resource type. A log can be used in at most\n     *           one producer destination.\n     *     @type array<\\Google\\Api\\Logging\\LoggingDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $consumer_destinations\n     *           Logging configurations for sending logs to the consumer project.\n     *           There can be multiple consumer destinations, each one must have a\n     *           different monitored resource type. A log can be used in at most\n     *           one consumer destination.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Logging::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Logging configurations for sending logs to the producer project.\n     * There can be multiple producer destinations, each one must have a\n     * different monitored resource type. A log can be used in at most\n     * one producer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Logging.LoggingDestination producer_destinations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getProducerDestinations()\n    {\n        return $this->producer_destinations;\n    }\n\n    /**\n     * Logging configurations for sending logs to the producer project.\n     * There can be multiple producer destinations, each one must have a\n     * different monitored resource type. A log can be used in at most\n     * one producer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Logging.LoggingDestination producer_destinations = 1;</code>\n     * @param array<\\Google\\Api\\Logging\\LoggingDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setProducerDestinations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Logging\\LoggingDestination::class);\n        $this->producer_destinations = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Logging configurations for sending logs to the consumer project.\n     * There can be multiple consumer destinations, each one must have a\n     * different monitored resource type. A log can be used in at most\n     * one consumer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Logging.LoggingDestination consumer_destinations = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getConsumerDestinations()\n    {\n        return $this->consumer_destinations;\n    }\n\n    /**\n     * Logging configurations for sending logs to the consumer project.\n     * There can be multiple consumer destinations, each one must have a\n     * different monitored resource type. A log can be used in at most\n     * one consumer destination.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Logging.LoggingDestination consumer_destinations = 2;</code>\n     * @param array<\\Google\\Api\\Logging\\LoggingDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setConsumerDestinations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Logging\\LoggingDestination::class);\n        $this->consumer_destinations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MethodPolicy.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/policy.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Defines policies applying to an RPC method.\n *\n * Generated from protobuf message <code>google.api.MethodPolicy</code>\n */\nclass MethodPolicy extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects a method to which these policies should be enforced, for example,\n     * \"google.pubsub.v1.Subscriber.CreateSubscription\".\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     * NOTE: This field must not be set in the proto annotation. It will be\n     * automatically filled by the service config compiler .\n     *\n     * Generated from protobuf field <code>string selector = 9;</code>\n     */\n    protected $selector = '';\n    /**\n     * Policies that are applicable to the request message.\n     *\n     * Generated from protobuf field <code>repeated .google.api.FieldPolicy request_policies = 2;</code>\n     */\n    private $request_policies;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects a method to which these policies should be enforced, for example,\n     *           \"google.pubsub.v1.Subscriber.CreateSubscription\".\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *           NOTE: This field must not be set in the proto annotation. It will be\n     *           automatically filled by the service config compiler .\n     *     @type array<\\Google\\Api\\FieldPolicy>|\\Google\\Protobuf\\Internal\\RepeatedField $request_policies\n     *           Policies that are applicable to the request message.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects a method to which these policies should be enforced, for example,\n     * \"google.pubsub.v1.Subscriber.CreateSubscription\".\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     * NOTE: This field must not be set in the proto annotation. It will be\n     * automatically filled by the service config compiler .\n     *\n     * Generated from protobuf field <code>string selector = 9;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects a method to which these policies should be enforced, for example,\n     * \"google.pubsub.v1.Subscriber.CreateSubscription\".\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     * NOTE: This field must not be set in the proto annotation. It will be\n     * automatically filled by the service config compiler .\n     *\n     * Generated from protobuf field <code>string selector = 9;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Policies that are applicable to the request message.\n     *\n     * Generated from protobuf field <code>repeated .google.api.FieldPolicy request_policies = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRequestPolicies()\n    {\n        return $this->request_policies;\n    }\n\n    /**\n     * Policies that are applicable to the request message.\n     *\n     * Generated from protobuf field <code>repeated .google.api.FieldPolicy request_policies = 2;</code>\n     * @param array<\\Google\\Api\\FieldPolicy>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRequestPolicies($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\FieldPolicy::class);\n        $this->request_policies = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MethodSettings/LongRunning.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api\\MethodSettings;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * Generated from protobuf message <code>google.api.MethodSettings.LongRunning</code>\n */\nclass LongRunning extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Initial delay after which the first poll request will be made.\n     * Default value: 5 seconds.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration initial_poll_delay = 1;</code>\n     */\n    protected $initial_poll_delay = null;\n    /**\n     * Multiplier to gradually increase delay between subsequent polls until it\n     * reaches max_poll_delay.\n     * Default value: 1.5.\n     *\n     * Generated from protobuf field <code>float poll_delay_multiplier = 2;</code>\n     */\n    protected $poll_delay_multiplier = 0.0;\n    /**\n     * Maximum time between two subsequent poll requests.\n     * Default value: 45 seconds.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration max_poll_delay = 3;</code>\n     */\n    protected $max_poll_delay = null;\n    /**\n     * Total polling timeout.\n     * Default value: 5 minutes.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration total_poll_timeout = 4;</code>\n     */\n    protected $total_poll_timeout = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Duration $initial_poll_delay\n     *           Initial delay after which the first poll request will be made.\n     *           Default value: 5 seconds.\n     *     @type float $poll_delay_multiplier\n     *           Multiplier to gradually increase delay between subsequent polls until it\n     *           reaches max_poll_delay.\n     *           Default value: 1.5.\n     *     @type \\Google\\Protobuf\\Duration $max_poll_delay\n     *           Maximum time between two subsequent poll requests.\n     *           Default value: 45 seconds.\n     *     @type \\Google\\Protobuf\\Duration $total_poll_timeout\n     *           Total polling timeout.\n     *           Default value: 5 minutes.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Initial delay after which the first poll request will be made.\n     * Default value: 5 seconds.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration initial_poll_delay = 1;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getInitialPollDelay()\n    {\n        return $this->initial_poll_delay;\n    }\n\n    public function hasInitialPollDelay()\n    {\n        return isset($this->initial_poll_delay);\n    }\n\n    public function clearInitialPollDelay()\n    {\n        unset($this->initial_poll_delay);\n    }\n\n    /**\n     * Initial delay after which the first poll request will be made.\n     * Default value: 5 seconds.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration initial_poll_delay = 1;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setInitialPollDelay($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->initial_poll_delay = $var;\n\n        return $this;\n    }\n\n    /**\n     * Multiplier to gradually increase delay between subsequent polls until it\n     * reaches max_poll_delay.\n     * Default value: 1.5.\n     *\n     * Generated from protobuf field <code>float poll_delay_multiplier = 2;</code>\n     * @return float\n     */\n    public function getPollDelayMultiplier()\n    {\n        return $this->poll_delay_multiplier;\n    }\n\n    /**\n     * Multiplier to gradually increase delay between subsequent polls until it\n     * reaches max_poll_delay.\n     * Default value: 1.5.\n     *\n     * Generated from protobuf field <code>float poll_delay_multiplier = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setPollDelayMultiplier($var)\n    {\n        GPBUtil::checkFloat($var);\n        $this->poll_delay_multiplier = $var;\n\n        return $this;\n    }\n\n    /**\n     * Maximum time between two subsequent poll requests.\n     * Default value: 45 seconds.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration max_poll_delay = 3;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getMaxPollDelay()\n    {\n        return $this->max_poll_delay;\n    }\n\n    public function hasMaxPollDelay()\n    {\n        return isset($this->max_poll_delay);\n    }\n\n    public function clearMaxPollDelay()\n    {\n        unset($this->max_poll_delay);\n    }\n\n    /**\n     * Maximum time between two subsequent poll requests.\n     * Default value: 45 seconds.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration max_poll_delay = 3;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setMaxPollDelay($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->max_poll_delay = $var;\n\n        return $this;\n    }\n\n    /**\n     * Total polling timeout.\n     * Default value: 5 minutes.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration total_poll_timeout = 4;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getTotalPollTimeout()\n    {\n        return $this->total_poll_timeout;\n    }\n\n    public function hasTotalPollTimeout()\n    {\n        return isset($this->total_poll_timeout);\n    }\n\n    public function clearTotalPollTimeout()\n    {\n        unset($this->total_poll_timeout);\n    }\n\n    /**\n     * Total polling timeout.\n     * Default value: 5 minutes.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration total_poll_timeout = 4;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setTotalPollTimeout($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->total_poll_timeout = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MethodSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes the generator configuration for a method.\n *\n * Generated from protobuf message <code>google.api.MethodSettings</code>\n */\nclass MethodSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The fully qualified name of the method, for which the options below apply.\n     * This is used to find the method to apply the options.\n     * Example:\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.storage.control.v2.StorageControl.CreateFolder\n     *        # method settings for CreateFolder...\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * Describes settings to use for long-running operations when generating\n     * API methods for RPCs. Complements RPCs that use the annotations in\n     * google/longrunning/operations.proto.\n     * Example of a YAML configuration::\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.cloud.speech.v2.Speech.BatchRecognize\n     *        long_running:\n     *          initial_poll_delay: 60s # 1 minute\n     *          poll_delay_multiplier: 1.5\n     *          max_poll_delay: 360s # 6 minutes\n     *          total_poll_timeout: 54000s # 90 minutes\n     *\n     * Generated from protobuf field <code>.google.api.MethodSettings.LongRunning long_running = 2;</code>\n     */\n    protected $long_running = null;\n    /**\n     * List of top-level fields of the request message, that should be\n     * automatically populated by the client libraries based on their\n     * (google.api.field_info).format. Currently supported format: UUID4.\n     * Example of a YAML configuration:\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.example.v1.ExampleService.CreateExample\n     *        auto_populated_fields:\n     *        - request_id\n     *\n     * Generated from protobuf field <code>repeated string auto_populated_fields = 3;</code>\n     */\n    private $auto_populated_fields;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           The fully qualified name of the method, for which the options below apply.\n     *           This is used to find the method to apply the options.\n     *           Example:\n     *              publishing:\n     *                method_settings:\n     *                - selector: google.storage.control.v2.StorageControl.CreateFolder\n     *                  # method settings for CreateFolder...\n     *     @type \\Google\\Api\\MethodSettings\\LongRunning $long_running\n     *           Describes settings to use for long-running operations when generating\n     *           API methods for RPCs. Complements RPCs that use the annotations in\n     *           google/longrunning/operations.proto.\n     *           Example of a YAML configuration::\n     *              publishing:\n     *                method_settings:\n     *                - selector: google.cloud.speech.v2.Speech.BatchRecognize\n     *                  long_running:\n     *                    initial_poll_delay: 60s # 1 minute\n     *                    poll_delay_multiplier: 1.5\n     *                    max_poll_delay: 360s # 6 minutes\n     *                    total_poll_timeout: 54000s # 90 minutes\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $auto_populated_fields\n     *           List of top-level fields of the request message, that should be\n     *           automatically populated by the client libraries based on their\n     *           (google.api.field_info).format. Currently supported format: UUID4.\n     *           Example of a YAML configuration:\n     *              publishing:\n     *                method_settings:\n     *                - selector: google.example.v1.ExampleService.CreateExample\n     *                  auto_populated_fields:\n     *                  - request_id\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The fully qualified name of the method, for which the options below apply.\n     * This is used to find the method to apply the options.\n     * Example:\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.storage.control.v2.StorageControl.CreateFolder\n     *        # method settings for CreateFolder...\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * The fully qualified name of the method, for which the options below apply.\n     * This is used to find the method to apply the options.\n     * Example:\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.storage.control.v2.StorageControl.CreateFolder\n     *        # method settings for CreateFolder...\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Describes settings to use for long-running operations when generating\n     * API methods for RPCs. Complements RPCs that use the annotations in\n     * google/longrunning/operations.proto.\n     * Example of a YAML configuration::\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.cloud.speech.v2.Speech.BatchRecognize\n     *        long_running:\n     *          initial_poll_delay: 60s # 1 minute\n     *          poll_delay_multiplier: 1.5\n     *          max_poll_delay: 360s # 6 minutes\n     *          total_poll_timeout: 54000s # 90 minutes\n     *\n     * Generated from protobuf field <code>.google.api.MethodSettings.LongRunning long_running = 2;</code>\n     * @return \\Google\\Api\\MethodSettings\\LongRunning|null\n     */\n    public function getLongRunning()\n    {\n        return $this->long_running;\n    }\n\n    public function hasLongRunning()\n    {\n        return isset($this->long_running);\n    }\n\n    public function clearLongRunning()\n    {\n        unset($this->long_running);\n    }\n\n    /**\n     * Describes settings to use for long-running operations when generating\n     * API methods for RPCs. Complements RPCs that use the annotations in\n     * google/longrunning/operations.proto.\n     * Example of a YAML configuration::\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.cloud.speech.v2.Speech.BatchRecognize\n     *        long_running:\n     *          initial_poll_delay: 60s # 1 minute\n     *          poll_delay_multiplier: 1.5\n     *          max_poll_delay: 360s # 6 minutes\n     *          total_poll_timeout: 54000s # 90 minutes\n     *\n     * Generated from protobuf field <code>.google.api.MethodSettings.LongRunning long_running = 2;</code>\n     * @param \\Google\\Api\\MethodSettings\\LongRunning $var\n     * @return $this\n     */\n    public function setLongRunning($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\MethodSettings\\LongRunning::class);\n        $this->long_running = $var;\n\n        return $this;\n    }\n\n    /**\n     * List of top-level fields of the request message, that should be\n     * automatically populated by the client libraries based on their\n     * (google.api.field_info).format. Currently supported format: UUID4.\n     * Example of a YAML configuration:\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.example.v1.ExampleService.CreateExample\n     *        auto_populated_fields:\n     *        - request_id\n     *\n     * Generated from protobuf field <code>repeated string auto_populated_fields = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAutoPopulatedFields()\n    {\n        return $this->auto_populated_fields;\n    }\n\n    /**\n     * List of top-level fields of the request message, that should be\n     * automatically populated by the client libraries based on their\n     * (google.api.field_info).format. Currently supported format: UUID4.\n     * Example of a YAML configuration:\n     *    publishing:\n     *      method_settings:\n     *      - selector: google.example.v1.ExampleService.CreateExample\n     *        auto_populated_fields:\n     *        - request_id\n     *\n     * Generated from protobuf field <code>repeated string auto_populated_fields = 3;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAutoPopulatedFields($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->auto_populated_fields = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Metric.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/metric.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A specific metric, identified by specifying values for all of the\n * labels of a [`MetricDescriptor`][google.api.MetricDescriptor].\n *\n * Generated from protobuf message <code>google.api.Metric</code>\n */\nclass Metric extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * An existing metric type, see\n     * [google.api.MetricDescriptor][google.api.MetricDescriptor]. For example,\n     * `custom.googleapis.com/invoice/paid/amount`.\n     *\n     * Generated from protobuf field <code>string type = 3;</code>\n     */\n    protected $type = '';\n    /**\n     * The set of label values that uniquely identify this metric. All\n     * labels listed in the `MetricDescriptor` must be assigned values.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     */\n    private $labels;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type\n     *           An existing metric type, see\n     *           [google.api.MetricDescriptor][google.api.MetricDescriptor]. For example,\n     *           `custom.googleapis.com/invoice/paid/amount`.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $labels\n     *           The set of label values that uniquely identify this metric. All\n     *           labels listed in the `MetricDescriptor` must be assigned values.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Metric::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * An existing metric type, see\n     * [google.api.MetricDescriptor][google.api.MetricDescriptor]. For example,\n     * `custom.googleapis.com/invoice/paid/amount`.\n     *\n     * Generated from protobuf field <code>string type = 3;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * An existing metric type, see\n     * [google.api.MetricDescriptor][google.api.MetricDescriptor]. For example,\n     * `custom.googleapis.com/invoice/paid/amount`.\n     *\n     * Generated from protobuf field <code>string type = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The set of label values that uniquely identify this metric. All\n     * labels listed in the `MetricDescriptor` must be assigned values.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * The set of label values that uniquely identify this metric. All\n     * labels listed in the `MetricDescriptor` must be assigned values.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MetricDescriptor/MetricDescriptorMetadata/TimeSeriesResourceHierarchyLevel.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/metric.proto\n\nnamespace Google\\Api\\MetricDescriptor\\MetricDescriptorMetadata;\n\nuse UnexpectedValueException;\n\n/**\n * The resource hierarchy level of the timeseries data of a metric.\n *\n * Protobuf type <code>google.api.MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel</code>\n */\nclass TimeSeriesResourceHierarchyLevel\n{\n    /**\n     * Do not use this default value.\n     *\n     * Generated from protobuf enum <code>TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED = 0;</code>\n     */\n    const TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED = 0;\n    /**\n     * Scopes a metric to a project.\n     *\n     * Generated from protobuf enum <code>PROJECT = 1;</code>\n     */\n    const PROJECT = 1;\n    /**\n     * Scopes a metric to an organization.\n     *\n     * Generated from protobuf enum <code>ORGANIZATION = 2;</code>\n     */\n    const ORGANIZATION = 2;\n    /**\n     * Scopes a metric to a folder.\n     *\n     * Generated from protobuf enum <code>FOLDER = 3;</code>\n     */\n    const FOLDER = 3;\n\n    private static $valueToName = [\n        self::TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED => 'TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED',\n        self::PROJECT => 'PROJECT',\n        self::ORGANIZATION => 'ORGANIZATION',\n        self::FOLDER => 'FOLDER',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MetricDescriptor/MetricDescriptorMetadata.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/metric.proto\n\nnamespace Google\\Api\\MetricDescriptor;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Additional annotations that can be used to guide the usage of a metric.\n *\n * Generated from protobuf message <code>google.api.MetricDescriptor.MetricDescriptorMetadata</code>\n */\nclass MetricDescriptorMetadata extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Deprecated. Must use the\n     * [MetricDescriptor.launch_stage][google.api.MetricDescriptor.launch_stage]\n     * instead.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 1 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $launch_stage = 0;\n    /**\n     * The sampling period of metric data points. For metrics which are written\n     * periodically, consecutive data points are stored at this time interval,\n     * excluding data loss due to errors. Metrics with a higher granularity have\n     * a smaller sampling period.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration sample_period = 2;</code>\n     */\n    protected $sample_period = null;\n    /**\n     * The delay of data points caused by ingestion. Data points older than this\n     * age are guaranteed to be ingested and available to be read, excluding\n     * data loss due to errors.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration ingest_delay = 3;</code>\n     */\n    protected $ingest_delay = null;\n    /**\n     * The scope of the timeseries data of the metric.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel time_series_resource_hierarchy_level = 4;</code>\n     */\n    private $time_series_resource_hierarchy_level;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $launch_stage\n     *           Deprecated. Must use the\n     *           [MetricDescriptor.launch_stage][google.api.MetricDescriptor.launch_stage]\n     *           instead.\n     *     @type \\Google\\Protobuf\\Duration $sample_period\n     *           The sampling period of metric data points. For metrics which are written\n     *           periodically, consecutive data points are stored at this time interval,\n     *           excluding data loss due to errors. Metrics with a higher granularity have\n     *           a smaller sampling period.\n     *     @type \\Google\\Protobuf\\Duration $ingest_delay\n     *           The delay of data points caused by ingestion. Data points older than this\n     *           age are guaranteed to be ingested and available to be read, excluding\n     *           data loss due to errors.\n     *     @type array<int>|\\Google\\Protobuf\\Internal\\RepeatedField $time_series_resource_hierarchy_level\n     *           The scope of the timeseries data of the metric.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Metric::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Deprecated. Must use the\n     * [MetricDescriptor.launch_stage][google.api.MetricDescriptor.launch_stage]\n     * instead.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 1 [deprecated = true];</code>\n     * @return int\n     * @deprecated\n     */\n    public function getLaunchStage()\n    {\n        if ($this->launch_stage !== 0) {\n            @trigger_error('launch_stage is deprecated.', E_USER_DEPRECATED);\n        }\n        return $this->launch_stage;\n    }\n\n    /**\n     * Deprecated. Must use the\n     * [MetricDescriptor.launch_stage][google.api.MetricDescriptor.launch_stage]\n     * instead.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 1 [deprecated = true];</code>\n     * @param int $var\n     * @return $this\n     * @deprecated\n     */\n    public function setLaunchStage($var)\n    {\n        @trigger_error('launch_stage is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkEnum($var, \\Google\\Api\\LaunchStage::class);\n        $this->launch_stage = $var;\n\n        return $this;\n    }\n\n    /**\n     * The sampling period of metric data points. For metrics which are written\n     * periodically, consecutive data points are stored at this time interval,\n     * excluding data loss due to errors. Metrics with a higher granularity have\n     * a smaller sampling period.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration sample_period = 2;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getSamplePeriod()\n    {\n        return $this->sample_period;\n    }\n\n    public function hasSamplePeriod()\n    {\n        return isset($this->sample_period);\n    }\n\n    public function clearSamplePeriod()\n    {\n        unset($this->sample_period);\n    }\n\n    /**\n     * The sampling period of metric data points. For metrics which are written\n     * periodically, consecutive data points are stored at this time interval,\n     * excluding data loss due to errors. Metrics with a higher granularity have\n     * a smaller sampling period.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration sample_period = 2;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setSamplePeriod($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->sample_period = $var;\n\n        return $this;\n    }\n\n    /**\n     * The delay of data points caused by ingestion. Data points older than this\n     * age are guaranteed to be ingested and available to be read, excluding\n     * data loss due to errors.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration ingest_delay = 3;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getIngestDelay()\n    {\n        return $this->ingest_delay;\n    }\n\n    public function hasIngestDelay()\n    {\n        return isset($this->ingest_delay);\n    }\n\n    public function clearIngestDelay()\n    {\n        unset($this->ingest_delay);\n    }\n\n    /**\n     * The delay of data points caused by ingestion. Data points older than this\n     * age are guaranteed to be ingested and available to be read, excluding\n     * data loss due to errors.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration ingest_delay = 3;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setIngestDelay($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->ingest_delay = $var;\n\n        return $this;\n    }\n\n    /**\n     * The scope of the timeseries data of the metric.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel time_series_resource_hierarchy_level = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getTimeSeriesResourceHierarchyLevel()\n    {\n        return $this->time_series_resource_hierarchy_level;\n    }\n\n    /**\n     * The scope of the timeseries data of the metric.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel time_series_resource_hierarchy_level = 4;</code>\n     * @param array<int>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setTimeSeriesResourceHierarchyLevel($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::ENUM, \\Google\\Api\\MetricDescriptor\\MetricDescriptorMetadata\\TimeSeriesResourceHierarchyLevel::class);\n        $this->time_series_resource_hierarchy_level = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MetricDescriptor/MetricKind.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/metric.proto\n\nnamespace Google\\Api\\MetricDescriptor;\n\nuse UnexpectedValueException;\n\n/**\n * The kind of measurement. It describes how the data is reported.\n * For information on setting the start time and end time based on\n * the MetricKind, see [TimeInterval][google.monitoring.v3.TimeInterval].\n *\n * Protobuf type <code>google.api.MetricDescriptor.MetricKind</code>\n */\nclass MetricKind\n{\n    /**\n     * Do not use this default value.\n     *\n     * Generated from protobuf enum <code>METRIC_KIND_UNSPECIFIED = 0;</code>\n     */\n    const METRIC_KIND_UNSPECIFIED = 0;\n    /**\n     * An instantaneous measurement of a value.\n     *\n     * Generated from protobuf enum <code>GAUGE = 1;</code>\n     */\n    const GAUGE = 1;\n    /**\n     * The change in a value during a time interval.\n     *\n     * Generated from protobuf enum <code>DELTA = 2;</code>\n     */\n    const DELTA = 2;\n    /**\n     * A value accumulated over a time interval.  Cumulative\n     * measurements in a time series should have the same start time\n     * and increasing end times, until an event resets the cumulative\n     * value to zero and sets a new start time for the following\n     * points.\n     *\n     * Generated from protobuf enum <code>CUMULATIVE = 3;</code>\n     */\n    const CUMULATIVE = 3;\n\n    private static $valueToName = [\n        self::METRIC_KIND_UNSPECIFIED => 'METRIC_KIND_UNSPECIFIED',\n        self::GAUGE => 'GAUGE',\n        self::DELTA => 'DELTA',\n        self::CUMULATIVE => 'CUMULATIVE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MetricDescriptor/ValueType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/metric.proto\n\nnamespace Google\\Api\\MetricDescriptor;\n\nuse UnexpectedValueException;\n\n/**\n * The value type of a metric.\n *\n * Protobuf type <code>google.api.MetricDescriptor.ValueType</code>\n */\nclass ValueType\n{\n    /**\n     * Do not use this default value.\n     *\n     * Generated from protobuf enum <code>VALUE_TYPE_UNSPECIFIED = 0;</code>\n     */\n    const VALUE_TYPE_UNSPECIFIED = 0;\n    /**\n     * The value is a boolean.\n     * This value type can be used only if the metric kind is `GAUGE`.\n     *\n     * Generated from protobuf enum <code>BOOL = 1;</code>\n     */\n    const BOOL = 1;\n    /**\n     * The value is a signed 64-bit integer.\n     *\n     * Generated from protobuf enum <code>INT64 = 2;</code>\n     */\n    const INT64 = 2;\n    /**\n     * The value is a double precision floating point number.\n     *\n     * Generated from protobuf enum <code>DOUBLE = 3;</code>\n     */\n    const DOUBLE = 3;\n    /**\n     * The value is a text string.\n     * This value type can be used only if the metric kind is `GAUGE`.\n     *\n     * Generated from protobuf enum <code>STRING = 4;</code>\n     */\n    const STRING = 4;\n    /**\n     * The value is a [`Distribution`][google.api.Distribution].\n     *\n     * Generated from protobuf enum <code>DISTRIBUTION = 5;</code>\n     */\n    const DISTRIBUTION = 5;\n    /**\n     * The value is money.\n     *\n     * Generated from protobuf enum <code>MONEY = 6;</code>\n     */\n    const MONEY = 6;\n\n    private static $valueToName = [\n        self::VALUE_TYPE_UNSPECIFIED => 'VALUE_TYPE_UNSPECIFIED',\n        self::BOOL => 'BOOL',\n        self::INT64 => 'INT64',\n        self::DOUBLE => 'DOUBLE',\n        self::STRING => 'STRING',\n        self::DISTRIBUTION => 'DISTRIBUTION',\n        self::MONEY => 'MONEY',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MetricDescriptor.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/metric.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Defines a metric type and its schema. Once a metric descriptor is created,\n * deleting or altering it stops data collection and makes the metric type's\n * existing data unusable.\n *\n * Generated from protobuf message <code>google.api.MetricDescriptor</code>\n */\nclass MetricDescriptor extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The resource name of the metric descriptor.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The metric type, including its DNS name prefix. The type is not\n     * URL-encoded. All user-defined metric types have the DNS name\n     * `custom.googleapis.com` or `external.googleapis.com`. Metric types should\n     * use a natural hierarchical grouping. For example:\n     *     \"custom.googleapis.com/invoice/paid/amount\"\n     *     \"external.googleapis.com/prometheus/up\"\n     *     \"appengine.googleapis.com/http/server/response_latencies\"\n     *\n     * Generated from protobuf field <code>string type = 8;</code>\n     */\n    protected $type = '';\n    /**\n     * The set of labels that can be used to describe a specific\n     * instance of this metric type. For example, the\n     * `appengine.googleapis.com/http/server/response_latencies` metric\n     * type has a label for the HTTP response code, `response_code`, so\n     * you can look at latencies for successful responses or just\n     * for responses that failed.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 2;</code>\n     */\n    private $labels;\n    /**\n     * Whether the metric records instantaneous values, changes to a value, etc.\n     * Some combinations of `metric_kind` and `value_type` might not be supported.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.MetricKind metric_kind = 3;</code>\n     */\n    protected $metric_kind = 0;\n    /**\n     * Whether the measurement is an integer, a floating-point number, etc.\n     * Some combinations of `metric_kind` and `value_type` might not be supported.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.ValueType value_type = 4;</code>\n     */\n    protected $value_type = 0;\n    /**\n     * The units in which the metric value is reported. It is only applicable\n     * if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit`\n     * defines the representation of the stored metric values.\n     * Different systems might scale the values to be more easily displayed (so a\n     * value of `0.02kBy` _might_ be displayed as `20By`, and a value of\n     * `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is\n     * `kBy`, then the value of the metric is always in thousands of bytes, no\n     * matter how it might be displayed.\n     * If you want a custom metric to record the exact number of CPU-seconds used\n     * by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is\n     * `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005\n     * CPU-seconds, then the value is written as `12005`.\n     * Alternatively, if you want a custom metric to record data in a more\n     * granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is\n     * `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`),\n     * or use `Kis{CPU}` and write `11.723` (which is `12005/1024`).\n     * The supported units are a subset of [The Unified Code for Units of\n     * Measure](https://unitsofmeasure.org/ucum.html) standard:\n     * **Basic units (UNIT)**\n     * * `bit`   bit\n     * * `By`    byte\n     * * `s`     second\n     * * `min`   minute\n     * * `h`     hour\n     * * `d`     day\n     * * `1`     dimensionless\n     * **Prefixes (PREFIX)**\n     * * `k`     kilo    (10^3)\n     * * `M`     mega    (10^6)\n     * * `G`     giga    (10^9)\n     * * `T`     tera    (10^12)\n     * * `P`     peta    (10^15)\n     * * `E`     exa     (10^18)\n     * * `Z`     zetta   (10^21)\n     * * `Y`     yotta   (10^24)\n     * * `m`     milli   (10^-3)\n     * * `u`     micro   (10^-6)\n     * * `n`     nano    (10^-9)\n     * * `p`     pico    (10^-12)\n     * * `f`     femto   (10^-15)\n     * * `a`     atto    (10^-18)\n     * * `z`     zepto   (10^-21)\n     * * `y`     yocto   (10^-24)\n     * * `Ki`    kibi    (2^10)\n     * * `Mi`    mebi    (2^20)\n     * * `Gi`    gibi    (2^30)\n     * * `Ti`    tebi    (2^40)\n     * * `Pi`    pebi    (2^50)\n     * **Grammar**\n     * The grammar also includes these connectors:\n     * * `/`    division or ratio (as an infix operator). For examples,\n     *          `kBy/{email}` or `MiBy/10ms` (although you should almost never\n     *          have `/s` in a metric `unit`; rates should always be computed at\n     *          query time from the underlying cumulative or delta value).\n     * * `.`    multiplication or composition (as an infix operator). For\n     *          examples, `GBy.d` or `k{watt}.h`.\n     * The grammar for a unit is as follows:\n     *     Expression = Component { \".\" Component } { \"/\" Component } ;\n     *     Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ]\n     *               | Annotation\n     *               | \"1\"\n     *               ;\n     *     Annotation = \"{\" NAME \"}\" ;\n     * Notes:\n     * * `Annotation` is just a comment if it follows a `UNIT`. If the annotation\n     *    is used alone, then the unit is equivalent to `1`. For examples,\n     *    `{request}/s == 1/s`, `By{transmitted}/s == By/s`.\n     * * `NAME` is a sequence of non-blank printable ASCII characters not\n     *    containing `{` or `}`.\n     * * `1` represents a unitary [dimensionless\n     *    unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such\n     *    as in `1/s`. It is typically used when none of the basic units are\n     *    appropriate. For example, \"new users per day\" can be represented as\n     *    `1/d` or `{new-users}/d` (and a metric value `5` would mean \"5 new\n     *    users). Alternatively, \"thousands of page views per day\" would be\n     *    represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric\n     *    value of `5.3` would mean \"5300 page views per day\").\n     * * `%` represents dimensionless value of 1/100, and annotates values giving\n     *    a percentage (so the metric values are typically in the range of 0..100,\n     *    and a metric value `3` means \"3 percent\").\n     * * `10^2.%` indicates a metric contains a ratio, typically in the range\n     *    0..1, that will be multiplied by 100 and displayed as a percentage\n     *    (so a metric value `0.03` means \"3 percent\").\n     *\n     * Generated from protobuf field <code>string unit = 5;</code>\n     */\n    protected $unit = '';\n    /**\n     * A detailed description of the metric, which can be used in documentation.\n     *\n     * Generated from protobuf field <code>string description = 6;</code>\n     */\n    protected $description = '';\n    /**\n     * A concise name for the metric, which can be displayed in user interfaces.\n     * Use sentence case without an ending period, for example \"Request count\".\n     * This field is optional but it is recommended to be set for any metrics\n     * associated with user-visible concepts, such as Quota.\n     *\n     * Generated from protobuf field <code>string display_name = 7;</code>\n     */\n    protected $display_name = '';\n    /**\n     * Optional. Metadata which can be used to guide usage of the metric.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.MetricDescriptorMetadata metadata = 10;</code>\n     */\n    protected $metadata = null;\n    /**\n     * Optional. The launch stage of the metric definition.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 12;</code>\n     */\n    protected $launch_stage = 0;\n    /**\n     * Read-only. If present, then a [time\n     * series][google.monitoring.v3.TimeSeries], which is identified partially by\n     * a metric type and a\n     * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor], that\n     * is associated with this metric type can only be associated with one of the\n     * monitored resource types listed here.\n     *\n     * Generated from protobuf field <code>repeated string monitored_resource_types = 13;</code>\n     */\n    private $monitored_resource_types;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The resource name of the metric descriptor.\n     *     @type string $type\n     *           The metric type, including its DNS name prefix. The type is not\n     *           URL-encoded. All user-defined metric types have the DNS name\n     *           `custom.googleapis.com` or `external.googleapis.com`. Metric types should\n     *           use a natural hierarchical grouping. For example:\n     *               \"custom.googleapis.com/invoice/paid/amount\"\n     *               \"external.googleapis.com/prometheus/up\"\n     *               \"appengine.googleapis.com/http/server/response_latencies\"\n     *     @type array<\\Google\\Api\\LabelDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $labels\n     *           The set of labels that can be used to describe a specific\n     *           instance of this metric type. For example, the\n     *           `appengine.googleapis.com/http/server/response_latencies` metric\n     *           type has a label for the HTTP response code, `response_code`, so\n     *           you can look at latencies for successful responses or just\n     *           for responses that failed.\n     *     @type int $metric_kind\n     *           Whether the metric records instantaneous values, changes to a value, etc.\n     *           Some combinations of `metric_kind` and `value_type` might not be supported.\n     *     @type int $value_type\n     *           Whether the measurement is an integer, a floating-point number, etc.\n     *           Some combinations of `metric_kind` and `value_type` might not be supported.\n     *     @type string $unit\n     *           The units in which the metric value is reported. It is only applicable\n     *           if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit`\n     *           defines the representation of the stored metric values.\n     *           Different systems might scale the values to be more easily displayed (so a\n     *           value of `0.02kBy` _might_ be displayed as `20By`, and a value of\n     *           `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is\n     *           `kBy`, then the value of the metric is always in thousands of bytes, no\n     *           matter how it might be displayed.\n     *           If you want a custom metric to record the exact number of CPU-seconds used\n     *           by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is\n     *           `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005\n     *           CPU-seconds, then the value is written as `12005`.\n     *           Alternatively, if you want a custom metric to record data in a more\n     *           granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is\n     *           `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`),\n     *           or use `Kis{CPU}` and write `11.723` (which is `12005/1024`).\n     *           The supported units are a subset of [The Unified Code for Units of\n     *           Measure](https://unitsofmeasure.org/ucum.html) standard:\n     *           **Basic units (UNIT)**\n     *           * `bit`   bit\n     *           * `By`    byte\n     *           * `s`     second\n     *           * `min`   minute\n     *           * `h`     hour\n     *           * `d`     day\n     *           * `1`     dimensionless\n     *           **Prefixes (PREFIX)**\n     *           * `k`     kilo    (10^3)\n     *           * `M`     mega    (10^6)\n     *           * `G`     giga    (10^9)\n     *           * `T`     tera    (10^12)\n     *           * `P`     peta    (10^15)\n     *           * `E`     exa     (10^18)\n     *           * `Z`     zetta   (10^21)\n     *           * `Y`     yotta   (10^24)\n     *           * `m`     milli   (10^-3)\n     *           * `u`     micro   (10^-6)\n     *           * `n`     nano    (10^-9)\n     *           * `p`     pico    (10^-12)\n     *           * `f`     femto   (10^-15)\n     *           * `a`     atto    (10^-18)\n     *           * `z`     zepto   (10^-21)\n     *           * `y`     yocto   (10^-24)\n     *           * `Ki`    kibi    (2^10)\n     *           * `Mi`    mebi    (2^20)\n     *           * `Gi`    gibi    (2^30)\n     *           * `Ti`    tebi    (2^40)\n     *           * `Pi`    pebi    (2^50)\n     *           **Grammar**\n     *           The grammar also includes these connectors:\n     *           * `/`    division or ratio (as an infix operator). For examples,\n     *                    `kBy/{email}` or `MiBy/10ms` (although you should almost never\n     *                    have `/s` in a metric `unit`; rates should always be computed at\n     *                    query time from the underlying cumulative or delta value).\n     *           * `.`    multiplication or composition (as an infix operator). For\n     *                    examples, `GBy.d` or `k{watt}.h`.\n     *           The grammar for a unit is as follows:\n     *               Expression = Component { \".\" Component } { \"/\" Component } ;\n     *               Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ]\n     *                         | Annotation\n     *                         | \"1\"\n     *                         ;\n     *               Annotation = \"{\" NAME \"}\" ;\n     *           Notes:\n     *           * `Annotation` is just a comment if it follows a `UNIT`. If the annotation\n     *              is used alone, then the unit is equivalent to `1`. For examples,\n     *              `{request}/s == 1/s`, `By{transmitted}/s == By/s`.\n     *           * `NAME` is a sequence of non-blank printable ASCII characters not\n     *              containing `{` or `}`.\n     *           * `1` represents a unitary [dimensionless\n     *              unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such\n     *              as in `1/s`. It is typically used when none of the basic units are\n     *              appropriate. For example, \"new users per day\" can be represented as\n     *              `1/d` or `{new-users}/d` (and a metric value `5` would mean \"5 new\n     *              users). Alternatively, \"thousands of page views per day\" would be\n     *              represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric\n     *              value of `5.3` would mean \"5300 page views per day\").\n     *           * `%` represents dimensionless value of 1/100, and annotates values giving\n     *              a percentage (so the metric values are typically in the range of 0..100,\n     *              and a metric value `3` means \"3 percent\").\n     *           * `10^2.%` indicates a metric contains a ratio, typically in the range\n     *              0..1, that will be multiplied by 100 and displayed as a percentage\n     *              (so a metric value `0.03` means \"3 percent\").\n     *     @type string $description\n     *           A detailed description of the metric, which can be used in documentation.\n     *     @type string $display_name\n     *           A concise name for the metric, which can be displayed in user interfaces.\n     *           Use sentence case without an ending period, for example \"Request count\".\n     *           This field is optional but it is recommended to be set for any metrics\n     *           associated with user-visible concepts, such as Quota.\n     *     @type \\Google\\Api\\MetricDescriptor\\MetricDescriptorMetadata $metadata\n     *           Optional. Metadata which can be used to guide usage of the metric.\n     *     @type int $launch_stage\n     *           Optional. The launch stage of the metric definition.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $monitored_resource_types\n     *           Read-only. If present, then a [time\n     *           series][google.monitoring.v3.TimeSeries], which is identified partially by\n     *           a metric type and a\n     *           [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor], that\n     *           is associated with this metric type can only be associated with one of the\n     *           monitored resource types listed here.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Metric::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The resource name of the metric descriptor.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The resource name of the metric descriptor.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The metric type, including its DNS name prefix. The type is not\n     * URL-encoded. All user-defined metric types have the DNS name\n     * `custom.googleapis.com` or `external.googleapis.com`. Metric types should\n     * use a natural hierarchical grouping. For example:\n     *     \"custom.googleapis.com/invoice/paid/amount\"\n     *     \"external.googleapis.com/prometheus/up\"\n     *     \"appengine.googleapis.com/http/server/response_latencies\"\n     *\n     * Generated from protobuf field <code>string type = 8;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * The metric type, including its DNS name prefix. The type is not\n     * URL-encoded. All user-defined metric types have the DNS name\n     * `custom.googleapis.com` or `external.googleapis.com`. Metric types should\n     * use a natural hierarchical grouping. For example:\n     *     \"custom.googleapis.com/invoice/paid/amount\"\n     *     \"external.googleapis.com/prometheus/up\"\n     *     \"appengine.googleapis.com/http/server/response_latencies\"\n     *\n     * Generated from protobuf field <code>string type = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The set of labels that can be used to describe a specific\n     * instance of this metric type. For example, the\n     * `appengine.googleapis.com/http/server/response_latencies` metric\n     * type has a label for the HTTP response code, `response_code`, so\n     * you can look at latencies for successful responses or just\n     * for responses that failed.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * The set of labels that can be used to describe a specific\n     * instance of this metric type. For example, the\n     * `appengine.googleapis.com/http/server/response_latencies` metric\n     * type has a label for the HTTP response code, `response_code`, so\n     * you can look at latencies for successful responses or just\n     * for responses that failed.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 2;</code>\n     * @param array<\\Google\\Api\\LabelDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\LabelDescriptor::class);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Whether the metric records instantaneous values, changes to a value, etc.\n     * Some combinations of `metric_kind` and `value_type` might not be supported.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.MetricKind metric_kind = 3;</code>\n     * @return int\n     */\n    public function getMetricKind()\n    {\n        return $this->metric_kind;\n    }\n\n    /**\n     * Whether the metric records instantaneous values, changes to a value, etc.\n     * Some combinations of `metric_kind` and `value_type` might not be supported.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.MetricKind metric_kind = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMetricKind($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\MetricDescriptor\\MetricKind::class);\n        $this->metric_kind = $var;\n\n        return $this;\n    }\n\n    /**\n     * Whether the measurement is an integer, a floating-point number, etc.\n     * Some combinations of `metric_kind` and `value_type` might not be supported.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.ValueType value_type = 4;</code>\n     * @return int\n     */\n    public function getValueType()\n    {\n        return $this->value_type;\n    }\n\n    /**\n     * Whether the measurement is an integer, a floating-point number, etc.\n     * Some combinations of `metric_kind` and `value_type` might not be supported.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.ValueType value_type = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setValueType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\MetricDescriptor\\ValueType::class);\n        $this->value_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The units in which the metric value is reported. It is only applicable\n     * if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit`\n     * defines the representation of the stored metric values.\n     * Different systems might scale the values to be more easily displayed (so a\n     * value of `0.02kBy` _might_ be displayed as `20By`, and a value of\n     * `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is\n     * `kBy`, then the value of the metric is always in thousands of bytes, no\n     * matter how it might be displayed.\n     * If you want a custom metric to record the exact number of CPU-seconds used\n     * by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is\n     * `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005\n     * CPU-seconds, then the value is written as `12005`.\n     * Alternatively, if you want a custom metric to record data in a more\n     * granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is\n     * `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`),\n     * or use `Kis{CPU}` and write `11.723` (which is `12005/1024`).\n     * The supported units are a subset of [The Unified Code for Units of\n     * Measure](https://unitsofmeasure.org/ucum.html) standard:\n     * **Basic units (UNIT)**\n     * * `bit`   bit\n     * * `By`    byte\n     * * `s`     second\n     * * `min`   minute\n     * * `h`     hour\n     * * `d`     day\n     * * `1`     dimensionless\n     * **Prefixes (PREFIX)**\n     * * `k`     kilo    (10^3)\n     * * `M`     mega    (10^6)\n     * * `G`     giga    (10^9)\n     * * `T`     tera    (10^12)\n     * * `P`     peta    (10^15)\n     * * `E`     exa     (10^18)\n     * * `Z`     zetta   (10^21)\n     * * `Y`     yotta   (10^24)\n     * * `m`     milli   (10^-3)\n     * * `u`     micro   (10^-6)\n     * * `n`     nano    (10^-9)\n     * * `p`     pico    (10^-12)\n     * * `f`     femto   (10^-15)\n     * * `a`     atto    (10^-18)\n     * * `z`     zepto   (10^-21)\n     * * `y`     yocto   (10^-24)\n     * * `Ki`    kibi    (2^10)\n     * * `Mi`    mebi    (2^20)\n     * * `Gi`    gibi    (2^30)\n     * * `Ti`    tebi    (2^40)\n     * * `Pi`    pebi    (2^50)\n     * **Grammar**\n     * The grammar also includes these connectors:\n     * * `/`    division or ratio (as an infix operator). For examples,\n     *          `kBy/{email}` or `MiBy/10ms` (although you should almost never\n     *          have `/s` in a metric `unit`; rates should always be computed at\n     *          query time from the underlying cumulative or delta value).\n     * * `.`    multiplication or composition (as an infix operator). For\n     *          examples, `GBy.d` or `k{watt}.h`.\n     * The grammar for a unit is as follows:\n     *     Expression = Component { \".\" Component } { \"/\" Component } ;\n     *     Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ]\n     *               | Annotation\n     *               | \"1\"\n     *               ;\n     *     Annotation = \"{\" NAME \"}\" ;\n     * Notes:\n     * * `Annotation` is just a comment if it follows a `UNIT`. If the annotation\n     *    is used alone, then the unit is equivalent to `1`. For examples,\n     *    `{request}/s == 1/s`, `By{transmitted}/s == By/s`.\n     * * `NAME` is a sequence of non-blank printable ASCII characters not\n     *    containing `{` or `}`.\n     * * `1` represents a unitary [dimensionless\n     *    unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such\n     *    as in `1/s`. It is typically used when none of the basic units are\n     *    appropriate. For example, \"new users per day\" can be represented as\n     *    `1/d` or `{new-users}/d` (and a metric value `5` would mean \"5 new\n     *    users). Alternatively, \"thousands of page views per day\" would be\n     *    represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric\n     *    value of `5.3` would mean \"5300 page views per day\").\n     * * `%` represents dimensionless value of 1/100, and annotates values giving\n     *    a percentage (so the metric values are typically in the range of 0..100,\n     *    and a metric value `3` means \"3 percent\").\n     * * `10^2.%` indicates a metric contains a ratio, typically in the range\n     *    0..1, that will be multiplied by 100 and displayed as a percentage\n     *    (so a metric value `0.03` means \"3 percent\").\n     *\n     * Generated from protobuf field <code>string unit = 5;</code>\n     * @return string\n     */\n    public function getUnit()\n    {\n        return $this->unit;\n    }\n\n    /**\n     * The units in which the metric value is reported. It is only applicable\n     * if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit`\n     * defines the representation of the stored metric values.\n     * Different systems might scale the values to be more easily displayed (so a\n     * value of `0.02kBy` _might_ be displayed as `20By`, and a value of\n     * `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is\n     * `kBy`, then the value of the metric is always in thousands of bytes, no\n     * matter how it might be displayed.\n     * If you want a custom metric to record the exact number of CPU-seconds used\n     * by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is\n     * `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005\n     * CPU-seconds, then the value is written as `12005`.\n     * Alternatively, if you want a custom metric to record data in a more\n     * granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is\n     * `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`),\n     * or use `Kis{CPU}` and write `11.723` (which is `12005/1024`).\n     * The supported units are a subset of [The Unified Code for Units of\n     * Measure](https://unitsofmeasure.org/ucum.html) standard:\n     * **Basic units (UNIT)**\n     * * `bit`   bit\n     * * `By`    byte\n     * * `s`     second\n     * * `min`   minute\n     * * `h`     hour\n     * * `d`     day\n     * * `1`     dimensionless\n     * **Prefixes (PREFIX)**\n     * * `k`     kilo    (10^3)\n     * * `M`     mega    (10^6)\n     * * `G`     giga    (10^9)\n     * * `T`     tera    (10^12)\n     * * `P`     peta    (10^15)\n     * * `E`     exa     (10^18)\n     * * `Z`     zetta   (10^21)\n     * * `Y`     yotta   (10^24)\n     * * `m`     milli   (10^-3)\n     * * `u`     micro   (10^-6)\n     * * `n`     nano    (10^-9)\n     * * `p`     pico    (10^-12)\n     * * `f`     femto   (10^-15)\n     * * `a`     atto    (10^-18)\n     * * `z`     zepto   (10^-21)\n     * * `y`     yocto   (10^-24)\n     * * `Ki`    kibi    (2^10)\n     * * `Mi`    mebi    (2^20)\n     * * `Gi`    gibi    (2^30)\n     * * `Ti`    tebi    (2^40)\n     * * `Pi`    pebi    (2^50)\n     * **Grammar**\n     * The grammar also includes these connectors:\n     * * `/`    division or ratio (as an infix operator). For examples,\n     *          `kBy/{email}` or `MiBy/10ms` (although you should almost never\n     *          have `/s` in a metric `unit`; rates should always be computed at\n     *          query time from the underlying cumulative or delta value).\n     * * `.`    multiplication or composition (as an infix operator). For\n     *          examples, `GBy.d` or `k{watt}.h`.\n     * The grammar for a unit is as follows:\n     *     Expression = Component { \".\" Component } { \"/\" Component } ;\n     *     Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ]\n     *               | Annotation\n     *               | \"1\"\n     *               ;\n     *     Annotation = \"{\" NAME \"}\" ;\n     * Notes:\n     * * `Annotation` is just a comment if it follows a `UNIT`. If the annotation\n     *    is used alone, then the unit is equivalent to `1`. For examples,\n     *    `{request}/s == 1/s`, `By{transmitted}/s == By/s`.\n     * * `NAME` is a sequence of non-blank printable ASCII characters not\n     *    containing `{` or `}`.\n     * * `1` represents a unitary [dimensionless\n     *    unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such\n     *    as in `1/s`. It is typically used when none of the basic units are\n     *    appropriate. For example, \"new users per day\" can be represented as\n     *    `1/d` or `{new-users}/d` (and a metric value `5` would mean \"5 new\n     *    users). Alternatively, \"thousands of page views per day\" would be\n     *    represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric\n     *    value of `5.3` would mean \"5300 page views per day\").\n     * * `%` represents dimensionless value of 1/100, and annotates values giving\n     *    a percentage (so the metric values are typically in the range of 0..100,\n     *    and a metric value `3` means \"3 percent\").\n     * * `10^2.%` indicates a metric contains a ratio, typically in the range\n     *    0..1, that will be multiplied by 100 and displayed as a percentage\n     *    (so a metric value `0.03` means \"3 percent\").\n     *\n     * Generated from protobuf field <code>string unit = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setUnit($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->unit = $var;\n\n        return $this;\n    }\n\n    /**\n     * A detailed description of the metric, which can be used in documentation.\n     *\n     * Generated from protobuf field <code>string description = 6;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * A detailed description of the metric, which can be used in documentation.\n     *\n     * Generated from protobuf field <code>string description = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * A concise name for the metric, which can be displayed in user interfaces.\n     * Use sentence case without an ending period, for example \"Request count\".\n     * This field is optional but it is recommended to be set for any metrics\n     * associated with user-visible concepts, such as Quota.\n     *\n     * Generated from protobuf field <code>string display_name = 7;</code>\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->display_name;\n    }\n\n    /**\n     * A concise name for the metric, which can be displayed in user interfaces.\n     * Use sentence case without an ending period, for example \"Request count\".\n     * This field is optional but it is recommended to be set for any metrics\n     * associated with user-visible concepts, such as Quota.\n     *\n     * Generated from protobuf field <code>string display_name = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDisplayName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->display_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Metadata which can be used to guide usage of the metric.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.MetricDescriptorMetadata metadata = 10;</code>\n     * @return \\Google\\Api\\MetricDescriptor\\MetricDescriptorMetadata|null\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n\n    public function hasMetadata()\n    {\n        return isset($this->metadata);\n    }\n\n    public function clearMetadata()\n    {\n        unset($this->metadata);\n    }\n\n    /**\n     * Optional. Metadata which can be used to guide usage of the metric.\n     *\n     * Generated from protobuf field <code>.google.api.MetricDescriptor.MetricDescriptorMetadata metadata = 10;</code>\n     * @param \\Google\\Api\\MetricDescriptor\\MetricDescriptorMetadata $var\n     * @return $this\n     */\n    public function setMetadata($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\MetricDescriptor\\MetricDescriptorMetadata::class);\n        $this->metadata = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The launch stage of the metric definition.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 12;</code>\n     * @return int\n     */\n    public function getLaunchStage()\n    {\n        return $this->launch_stage;\n    }\n\n    /**\n     * Optional. The launch stage of the metric definition.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 12;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setLaunchStage($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\LaunchStage::class);\n        $this->launch_stage = $var;\n\n        return $this;\n    }\n\n    /**\n     * Read-only. If present, then a [time\n     * series][google.monitoring.v3.TimeSeries], which is identified partially by\n     * a metric type and a\n     * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor], that\n     * is associated with this metric type can only be associated with one of the\n     * monitored resource types listed here.\n     *\n     * Generated from protobuf field <code>repeated string monitored_resource_types = 13;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMonitoredResourceTypes()\n    {\n        return $this->monitored_resource_types;\n    }\n\n    /**\n     * Read-only. If present, then a [time\n     * series][google.monitoring.v3.TimeSeries], which is identified partially by\n     * a metric type and a\n     * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor], that\n     * is associated with this metric type can only be associated with one of the\n     * monitored resource types listed here.\n     *\n     * Generated from protobuf field <code>repeated string monitored_resource_types = 13;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMonitoredResourceTypes($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->monitored_resource_types = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MetricRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/quota.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Bind API methods to metrics. Binding a method to a metric causes that\n * metric's configured quota behaviors to apply to the method call.\n *\n * Generated from protobuf message <code>google.api.MetricRule</code>\n */\nclass MetricRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * Metrics to update when the selected methods are called, and the associated\n     * cost applied to each metric.\n     * The key of the map is the metric name, and the values are the amount\n     * increased for the metric against which the quota limits are defined.\n     * The value must not be negative.\n     *\n     * Generated from protobuf field <code>map<string, int64> metric_costs = 2;</code>\n     */\n    private $metric_costs;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects the methods to which this rule applies.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $metric_costs\n     *           Metrics to update when the selected methods are called, and the associated\n     *           cost applied to each metric.\n     *           The key of the map is the metric name, and the values are the amount\n     *           increased for the metric against which the quota limits are defined.\n     *           The value must not be negative.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Quota::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects the methods to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Metrics to update when the selected methods are called, and the associated\n     * cost applied to each metric.\n     * The key of the map is the metric name, and the values are the amount\n     * increased for the metric against which the quota limits are defined.\n     * The value must not be negative.\n     *\n     * Generated from protobuf field <code>map<string, int64> metric_costs = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getMetricCosts()\n    {\n        return $this->metric_costs;\n    }\n\n    /**\n     * Metrics to update when the selected methods are called, and the associated\n     * cost applied to each metric.\n     * The key of the map is the metric name, and the values are the amount\n     * increased for the metric against which the quota limits are defined.\n     * The value must not be negative.\n     *\n     * Generated from protobuf field <code>map<string, int64> metric_costs = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setMetricCosts($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::INT64);\n        $this->metric_costs = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MonitoredResource.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitored_resource.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * An object representing a resource that can be used for monitoring, logging,\n * billing, or other purposes. Examples include virtual machine instances,\n * databases, and storage devices such as disks. The `type` field identifies a\n * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] object\n * that describes the resource's schema. Information in the `labels` field\n * identifies the actual resource and its attributes according to the schema.\n * For example, a particular Compute Engine VM instance could be represented by\n * the following object, because the\n * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor] for\n * `\"gce_instance\"` has labels\n * `\"project_id\"`, `\"instance_id\"` and `\"zone\"`:\n *     { \"type\": \"gce_instance\",\n *       \"labels\": { \"project_id\": \"my-project\",\n *                   \"instance_id\": \"12345678901234\",\n *                   \"zone\": \"us-central1-a\" }}\n *\n * Generated from protobuf message <code>google.api.MonitoredResource</code>\n */\nclass MonitoredResource extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Required. The monitored resource type. This field must match\n     * the `type` field of a\n     * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor]\n     * object. For example, the type of a Compute Engine VM instance is\n     * `gce_instance`. Some descriptors include the service name in the type; for\n     * example, the type of a Datastream stream is\n     * `datastream.googleapis.com/Stream`.\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     */\n    protected $type = '';\n    /**\n     * Required. Values for all of the labels listed in the associated monitored\n     * resource descriptor. For example, Compute Engine VM instances use the\n     * labels `\"project_id\"`, `\"instance_id\"`, and `\"zone\"`.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     */\n    private $labels;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type\n     *           Required. The monitored resource type. This field must match\n     *           the `type` field of a\n     *           [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor]\n     *           object. For example, the type of a Compute Engine VM instance is\n     *           `gce_instance`. Some descriptors include the service name in the type; for\n     *           example, the type of a Datastream stream is\n     *           `datastream.googleapis.com/Stream`.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $labels\n     *           Required. Values for all of the labels listed in the associated monitored\n     *           resource descriptor. For example, Compute Engine VM instances use the\n     *           labels `\"project_id\"`, `\"instance_id\"`, and `\"zone\"`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\MonitoredResource::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Required. The monitored resource type. This field must match\n     * the `type` field of a\n     * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor]\n     * object. For example, the type of a Compute Engine VM instance is\n     * `gce_instance`. Some descriptors include the service name in the type; for\n     * example, the type of a Datastream stream is\n     * `datastream.googleapis.com/Stream`.\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * Required. The monitored resource type. This field must match\n     * the `type` field of a\n     * [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor]\n     * object. For example, the type of a Compute Engine VM instance is\n     * `gce_instance`. Some descriptors include the service name in the type; for\n     * example, the type of a Datastream stream is\n     * `datastream.googleapis.com/Stream`.\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Values for all of the labels listed in the associated monitored\n     * resource descriptor. For example, Compute Engine VM instances use the\n     * labels `\"project_id\"`, `\"instance_id\"`, and `\"zone\"`.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * Required. Values for all of the labels listed in the associated monitored\n     * resource descriptor. For example, Compute Engine VM instances use the\n     * labels `\"project_id\"`, `\"instance_id\"`, and `\"zone\"`.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MonitoredResourceDescriptor.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitored_resource.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * An object that describes the schema of a\n * [MonitoredResource][google.api.MonitoredResource] object using a type name\n * and a set of labels.  For example, the monitored resource descriptor for\n * Google Compute Engine VM instances has a type of\n * `\"gce_instance\"` and specifies the use of the labels `\"instance_id\"` and\n * `\"zone\"` to identify particular VM instances.\n * Different APIs can support different monitored resource types. APIs generally\n * provide a `list` method that returns the monitored resource descriptors used\n * by the API.\n *\n * Generated from protobuf message <code>google.api.MonitoredResourceDescriptor</code>\n */\nclass MonitoredResourceDescriptor extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Optional. The resource name of the monitored resource descriptor:\n     * `\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n     * {type} is the value of the `type` field in this object and\n     * {project_id} is a project ID that provides API-specific context for\n     * accessing the type.  APIs that do not use project information can use the\n     * resource name format `\"monitoredResourceDescriptors/{type}\"`.\n     *\n     * Generated from protobuf field <code>string name = 5;</code>\n     */\n    protected $name = '';\n    /**\n     * Required. The monitored resource type. For example, the type\n     * `\"cloudsql_database\"` represents databases in Google Cloud SQL.\n     *  For a list of types, see [Monitored resource\n     *  types](https://cloud.google.com/monitoring/api/resources)\n     * and [Logging resource\n     * types](https://cloud.google.com/logging/docs/api/v2/resource-list).\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     */\n    protected $type = '';\n    /**\n     * Optional. A concise name for the monitored resource type that might be\n     * displayed in user interfaces. It should be a Title Cased Noun Phrase,\n     * without any article or other determiners. For example,\n     * `\"Google Cloud SQL Database\"`.\n     *\n     * Generated from protobuf field <code>string display_name = 2;</code>\n     */\n    protected $display_name = '';\n    /**\n     * Optional. A detailed description of the monitored resource type that might\n     * be used in documentation.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     */\n    protected $description = '';\n    /**\n     * Required. A set of labels used to describe instances of this monitored\n     * resource type. For example, an individual Google Cloud SQL database is\n     * identified by values for the labels `\"database_id\"` and `\"zone\"`.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 4;</code>\n     */\n    private $labels;\n    /**\n     * Optional. The launch stage of the monitored resource definition.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 7;</code>\n     */\n    protected $launch_stage = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Optional. The resource name of the monitored resource descriptor:\n     *           `\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n     *           {type} is the value of the `type` field in this object and\n     *           {project_id} is a project ID that provides API-specific context for\n     *           accessing the type.  APIs that do not use project information can use the\n     *           resource name format `\"monitoredResourceDescriptors/{type}\"`.\n     *     @type string $type\n     *           Required. The monitored resource type. For example, the type\n     *           `\"cloudsql_database\"` represents databases in Google Cloud SQL.\n     *            For a list of types, see [Monitored resource\n     *            types](https://cloud.google.com/monitoring/api/resources)\n     *           and [Logging resource\n     *           types](https://cloud.google.com/logging/docs/api/v2/resource-list).\n     *     @type string $display_name\n     *           Optional. A concise name for the monitored resource type that might be\n     *           displayed in user interfaces. It should be a Title Cased Noun Phrase,\n     *           without any article or other determiners. For example,\n     *           `\"Google Cloud SQL Database\"`.\n     *     @type string $description\n     *           Optional. A detailed description of the monitored resource type that might\n     *           be used in documentation.\n     *     @type array<\\Google\\Api\\LabelDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $labels\n     *           Required. A set of labels used to describe instances of this monitored\n     *           resource type. For example, an individual Google Cloud SQL database is\n     *           identified by values for the labels `\"database_id\"` and `\"zone\"`.\n     *     @type int $launch_stage\n     *           Optional. The launch stage of the monitored resource definition.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\MonitoredResource::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Optional. The resource name of the monitored resource descriptor:\n     * `\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n     * {type} is the value of the `type` field in this object and\n     * {project_id} is a project ID that provides API-specific context for\n     * accessing the type.  APIs that do not use project information can use the\n     * resource name format `\"monitoredResourceDescriptors/{type}\"`.\n     *\n     * Generated from protobuf field <code>string name = 5;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Optional. The resource name of the monitored resource descriptor:\n     * `\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n     * {type} is the value of the `type` field in this object and\n     * {project_id} is a project ID that provides API-specific context for\n     * accessing the type.  APIs that do not use project information can use the\n     * resource name format `\"monitoredResourceDescriptors/{type}\"`.\n     *\n     * Generated from protobuf field <code>string name = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. The monitored resource type. For example, the type\n     * `\"cloudsql_database\"` represents databases in Google Cloud SQL.\n     *  For a list of types, see [Monitored resource\n     *  types](https://cloud.google.com/monitoring/api/resources)\n     * and [Logging resource\n     * types](https://cloud.google.com/logging/docs/api/v2/resource-list).\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * Required. The monitored resource type. For example, the type\n     * `\"cloudsql_database\"` represents databases in Google Cloud SQL.\n     *  For a list of types, see [Monitored resource\n     *  types](https://cloud.google.com/monitoring/api/resources)\n     * and [Logging resource\n     * types](https://cloud.google.com/logging/docs/api/v2/resource-list).\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. A concise name for the monitored resource type that might be\n     * displayed in user interfaces. It should be a Title Cased Noun Phrase,\n     * without any article or other determiners. For example,\n     * `\"Google Cloud SQL Database\"`.\n     *\n     * Generated from protobuf field <code>string display_name = 2;</code>\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->display_name;\n    }\n\n    /**\n     * Optional. A concise name for the monitored resource type that might be\n     * displayed in user interfaces. It should be a Title Cased Noun Phrase,\n     * without any article or other determiners. For example,\n     * `\"Google Cloud SQL Database\"`.\n     *\n     * Generated from protobuf field <code>string display_name = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDisplayName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->display_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. A detailed description of the monitored resource type that might\n     * be used in documentation.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Optional. A detailed description of the monitored resource type that might\n     * be used in documentation.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. A set of labels used to describe instances of this monitored\n     * resource type. For example, an individual Google Cloud SQL database is\n     * identified by values for the labels `\"database_id\"` and `\"zone\"`.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * Required. A set of labels used to describe instances of this monitored\n     * resource type. For example, an individual Google Cloud SQL database is\n     * identified by values for the labels `\"database_id\"` and `\"zone\"`.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LabelDescriptor labels = 4;</code>\n     * @param array<\\Google\\Api\\LabelDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\LabelDescriptor::class);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The launch stage of the monitored resource definition.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 7;</code>\n     * @return int\n     */\n    public function getLaunchStage()\n    {\n        return $this->launch_stage;\n    }\n\n    /**\n     * Optional. The launch stage of the monitored resource definition.\n     *\n     * Generated from protobuf field <code>.google.api.LaunchStage launch_stage = 7;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setLaunchStage($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\LaunchStage::class);\n        $this->launch_stage = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/MonitoredResourceMetadata.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitored_resource.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Auxiliary metadata for a [MonitoredResource][google.api.MonitoredResource]\n * object. [MonitoredResource][google.api.MonitoredResource] objects contain the\n * minimum set of information to uniquely identify a monitored resource\n * instance. There is some other useful auxiliary metadata. Monitoring and\n * Logging use an ingestion pipeline to extract metadata for cloud resources of\n * all types, and store the metadata in this message.\n *\n * Generated from protobuf message <code>google.api.MonitoredResourceMetadata</code>\n */\nclass MonitoredResourceMetadata extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Output only. Values for predefined system metadata labels.\n     * System labels are a kind of metadata extracted by Google, including\n     * \"machine_image\", \"vpc\", \"subnet_id\",\n     * \"security_group\", \"name\", etc.\n     * System label values can be only strings, Boolean values, or a list of\n     * strings. For example:\n     *     { \"name\": \"my-test-instance\",\n     *       \"security_group\": [\"a\", \"b\", \"c\"],\n     *       \"spot_instance\": false }\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct system_labels = 1;</code>\n     */\n    protected $system_labels = null;\n    /**\n     * Output only. A map of user-defined metadata labels.\n     *\n     * Generated from protobuf field <code>map<string, string> user_labels = 2;</code>\n     */\n    private $user_labels;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Struct $system_labels\n     *           Output only. Values for predefined system metadata labels.\n     *           System labels are a kind of metadata extracted by Google, including\n     *           \"machine_image\", \"vpc\", \"subnet_id\",\n     *           \"security_group\", \"name\", etc.\n     *           System label values can be only strings, Boolean values, or a list of\n     *           strings. For example:\n     *               { \"name\": \"my-test-instance\",\n     *                 \"security_group\": [\"a\", \"b\", \"c\"],\n     *                 \"spot_instance\": false }\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $user_labels\n     *           Output only. A map of user-defined metadata labels.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\MonitoredResource::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Output only. Values for predefined system metadata labels.\n     * System labels are a kind of metadata extracted by Google, including\n     * \"machine_image\", \"vpc\", \"subnet_id\",\n     * \"security_group\", \"name\", etc.\n     * System label values can be only strings, Boolean values, or a list of\n     * strings. For example:\n     *     { \"name\": \"my-test-instance\",\n     *       \"security_group\": [\"a\", \"b\", \"c\"],\n     *       \"spot_instance\": false }\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct system_labels = 1;</code>\n     * @return \\Google\\Protobuf\\Struct|null\n     */\n    public function getSystemLabels()\n    {\n        return $this->system_labels;\n    }\n\n    public function hasSystemLabels()\n    {\n        return isset($this->system_labels);\n    }\n\n    public function clearSystemLabels()\n    {\n        unset($this->system_labels);\n    }\n\n    /**\n     * Output only. Values for predefined system metadata labels.\n     * System labels are a kind of metadata extracted by Google, including\n     * \"machine_image\", \"vpc\", \"subnet_id\",\n     * \"security_group\", \"name\", etc.\n     * System label values can be only strings, Boolean values, or a list of\n     * strings. For example:\n     *     { \"name\": \"my-test-instance\",\n     *       \"security_group\": [\"a\", \"b\", \"c\"],\n     *       \"spot_instance\": false }\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct system_labels = 1;</code>\n     * @param \\Google\\Protobuf\\Struct $var\n     * @return $this\n     */\n    public function setSystemLabels($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Struct::class);\n        $this->system_labels = $var;\n\n        return $this;\n    }\n\n    /**\n     * Output only. A map of user-defined metadata labels.\n     *\n     * Generated from protobuf field <code>map<string, string> user_labels = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getUserLabels()\n    {\n        return $this->user_labels;\n    }\n\n    /**\n     * Output only. A map of user-defined metadata labels.\n     *\n     * Generated from protobuf field <code>map<string, string> user_labels = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setUserLabels($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->user_labels = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Monitoring/MonitoringDestination.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitoring.proto\n\nnamespace Google\\Api\\Monitoring;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Configuration of a specific monitoring destination (the producer project\n * or the consumer project).\n *\n * Generated from protobuf message <code>google.api.Monitoring.MonitoringDestination</code>\n */\nclass MonitoringDestination extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The monitored resource type. The type must be defined in\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 1;</code>\n     */\n    protected $monitored_resource = '';\n    /**\n     * Types of the metrics to report to this monitoring destination.\n     * Each type must be defined in\n     * [Service.metrics][google.api.Service.metrics] section.\n     *\n     * Generated from protobuf field <code>repeated string metrics = 2;</code>\n     */\n    private $metrics;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $monitored_resource\n     *           The monitored resource type. The type must be defined in\n     *           [Service.monitored_resources][google.api.Service.monitored_resources]\n     *           section.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $metrics\n     *           Types of the metrics to report to this monitoring destination.\n     *           Each type must be defined in\n     *           [Service.metrics][google.api.Service.metrics] section.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Monitoring::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The monitored resource type. The type must be defined in\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 1;</code>\n     * @return string\n     */\n    public function getMonitoredResource()\n    {\n        return $this->monitored_resource;\n    }\n\n    /**\n     * The monitored resource type. The type must be defined in\n     * [Service.monitored_resources][google.api.Service.monitored_resources]\n     * section.\n     *\n     * Generated from protobuf field <code>string monitored_resource = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMonitoredResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->monitored_resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * Types of the metrics to report to this monitoring destination.\n     * Each type must be defined in\n     * [Service.metrics][google.api.Service.metrics] section.\n     *\n     * Generated from protobuf field <code>repeated string metrics = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMetrics()\n    {\n        return $this->metrics;\n    }\n\n    /**\n     * Types of the metrics to report to this monitoring destination.\n     * Each type must be defined in\n     * [Service.metrics][google.api.Service.metrics] section.\n     *\n     * Generated from protobuf field <code>repeated string metrics = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMetrics($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->metrics = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Monitoring.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/monitoring.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Monitoring configuration of the service.\n * The example below shows how to configure monitored resources and metrics\n * for monitoring. In the example, a monitored resource and two metrics are\n * defined. The `library.googleapis.com/book/returned_count` metric is sent\n * to both producer and consumer projects, whereas the\n * `library.googleapis.com/book/num_overdue` metric is only sent to the\n * consumer project.\n *     monitored_resources:\n *     - type: library.googleapis.com/Branch\n *       display_name: \"Library Branch\"\n *       description: \"A branch of a library.\"\n *       launch_stage: GA\n *       labels:\n *       - key: resource_container\n *         description: \"The Cloud container (ie. project id) for the Branch.\"\n *       - key: location\n *         description: \"The location of the library branch.\"\n *       - key: branch_id\n *         description: \"The id of the branch.\"\n *     metrics:\n *     - name: library.googleapis.com/book/returned_count\n *       display_name: \"Books Returned\"\n *       description: \"The count of books that have been returned.\"\n *       launch_stage: GA\n *       metric_kind: DELTA\n *       value_type: INT64\n *       unit: \"1\"\n *       labels:\n *       - key: customer_id\n *         description: \"The id of the customer.\"\n *     - name: library.googleapis.com/book/num_overdue\n *       display_name: \"Books Overdue\"\n *       description: \"The current number of overdue books.\"\n *       launch_stage: GA\n *       metric_kind: GAUGE\n *       value_type: INT64\n *       unit: \"1\"\n *       labels:\n *       - key: customer_id\n *         description: \"The id of the customer.\"\n *     monitoring:\n *       producer_destinations:\n *       - monitored_resource: library.googleapis.com/Branch\n *         metrics:\n *         - library.googleapis.com/book/returned_count\n *       consumer_destinations:\n *       - monitored_resource: library.googleapis.com/Branch\n *         metrics:\n *         - library.googleapis.com/book/returned_count\n *         - library.googleapis.com/book/num_overdue\n *\n * Generated from protobuf message <code>google.api.Monitoring</code>\n */\nclass Monitoring extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Monitoring configurations for sending metrics to the producer project.\n     * There can be multiple producer destinations. A monitored resource type may\n     * appear in multiple monitoring destinations if different aggregations are\n     * needed for different sets of metrics associated with that monitored\n     * resource type. A monitored resource and metric pair may only be used once\n     * in the Monitoring configuration.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Monitoring.MonitoringDestination producer_destinations = 1;</code>\n     */\n    private $producer_destinations;\n    /**\n     * Monitoring configurations for sending metrics to the consumer project.\n     * There can be multiple consumer destinations. A monitored resource type may\n     * appear in multiple monitoring destinations if different aggregations are\n     * needed for different sets of metrics associated with that monitored\n     * resource type. A monitored resource and metric pair may only be used once\n     * in the Monitoring configuration.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Monitoring.MonitoringDestination consumer_destinations = 2;</code>\n     */\n    private $consumer_destinations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\Monitoring\\MonitoringDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $producer_destinations\n     *           Monitoring configurations for sending metrics to the producer project.\n     *           There can be multiple producer destinations. A monitored resource type may\n     *           appear in multiple monitoring destinations if different aggregations are\n     *           needed for different sets of metrics associated with that monitored\n     *           resource type. A monitored resource and metric pair may only be used once\n     *           in the Monitoring configuration.\n     *     @type array<\\Google\\Api\\Monitoring\\MonitoringDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $consumer_destinations\n     *           Monitoring configurations for sending metrics to the consumer project.\n     *           There can be multiple consumer destinations. A monitored resource type may\n     *           appear in multiple monitoring destinations if different aggregations are\n     *           needed for different sets of metrics associated with that monitored\n     *           resource type. A monitored resource and metric pair may only be used once\n     *           in the Monitoring configuration.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Monitoring::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Monitoring configurations for sending metrics to the producer project.\n     * There can be multiple producer destinations. A monitored resource type may\n     * appear in multiple monitoring destinations if different aggregations are\n     * needed for different sets of metrics associated with that monitored\n     * resource type. A monitored resource and metric pair may only be used once\n     * in the Monitoring configuration.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Monitoring.MonitoringDestination producer_destinations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getProducerDestinations()\n    {\n        return $this->producer_destinations;\n    }\n\n    /**\n     * Monitoring configurations for sending metrics to the producer project.\n     * There can be multiple producer destinations. A monitored resource type may\n     * appear in multiple monitoring destinations if different aggregations are\n     * needed for different sets of metrics associated with that monitored\n     * resource type. A monitored resource and metric pair may only be used once\n     * in the Monitoring configuration.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Monitoring.MonitoringDestination producer_destinations = 1;</code>\n     * @param array<\\Google\\Api\\Monitoring\\MonitoringDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setProducerDestinations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Monitoring\\MonitoringDestination::class);\n        $this->producer_destinations = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Monitoring configurations for sending metrics to the consumer project.\n     * There can be multiple consumer destinations. A monitored resource type may\n     * appear in multiple monitoring destinations if different aggregations are\n     * needed for different sets of metrics associated with that monitored\n     * resource type. A monitored resource and metric pair may only be used once\n     * in the Monitoring configuration.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Monitoring.MonitoringDestination consumer_destinations = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getConsumerDestinations()\n    {\n        return $this->consumer_destinations;\n    }\n\n    /**\n     * Monitoring configurations for sending metrics to the consumer project.\n     * There can be multiple consumer destinations. A monitored resource type may\n     * appear in multiple monitoring destinations if different aggregations are\n     * needed for different sets of metrics associated with that monitored\n     * resource type. A monitored resource and metric pair may only be used once\n     * in the Monitoring configuration.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Monitoring.MonitoringDestination consumer_destinations = 2;</code>\n     * @param array<\\Google\\Api\\Monitoring\\MonitoringDestination>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setConsumerDestinations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Monitoring\\MonitoringDestination::class);\n        $this->consumer_destinations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/NodeSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Node client libraries.\n *\n * Generated from protobuf message <code>google.api.NodeSettings</code>\n */\nclass NodeSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/OAuthRequirements.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/auth.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * OAuth scopes are a way to define data and permissions on data. For example,\n * there are scopes defined for \"Read-only access to Google Calendar\" and\n * \"Access to Cloud Platform\". Users can consent to a scope for an application,\n * giving it permission to access that data on their behalf.\n * OAuth scope specifications should be fairly coarse grained; a user will need\n * to see and understand the text description of what your scope means.\n * In most cases: use one or at most two OAuth scopes for an entire family of\n * products. If your product has multiple APIs, you should probably be sharing\n * the OAuth scope across all of those APIs.\n * When you need finer grained OAuth consent screens: talk with your product\n * management about how developers will use them in practice.\n * Please note that even though each of the canonical scopes is enough for a\n * request to be accepted and passed to the backend, a request can still fail\n * due to the backend requiring additional scopes or permissions.\n *\n * Generated from protobuf message <code>google.api.OAuthRequirements</code>\n */\nclass OAuthRequirements extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The list of publicly documented OAuth scopes that are allowed access. An\n     * OAuth token containing any of these scopes will be accepted.\n     * Example:\n     *      canonical_scopes: https://www.googleapis.com/auth/calendar,\n     *                        https://www.googleapis.com/auth/calendar.read\n     *\n     * Generated from protobuf field <code>string canonical_scopes = 1;</code>\n     */\n    protected $canonical_scopes = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $canonical_scopes\n     *           The list of publicly documented OAuth scopes that are allowed access. An\n     *           OAuth token containing any of these scopes will be accepted.\n     *           Example:\n     *                canonical_scopes: https://www.googleapis.com/auth/calendar,\n     *                                  https://www.googleapis.com/auth/calendar.read\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Auth::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The list of publicly documented OAuth scopes that are allowed access. An\n     * OAuth token containing any of these scopes will be accepted.\n     * Example:\n     *      canonical_scopes: https://www.googleapis.com/auth/calendar,\n     *                        https://www.googleapis.com/auth/calendar.read\n     *\n     * Generated from protobuf field <code>string canonical_scopes = 1;</code>\n     * @return string\n     */\n    public function getCanonicalScopes()\n    {\n        return $this->canonical_scopes;\n    }\n\n    /**\n     * The list of publicly documented OAuth scopes that are allowed access. An\n     * OAuth token containing any of these scopes will be accepted.\n     * Example:\n     *      canonical_scopes: https://www.googleapis.com/auth/calendar,\n     *                        https://www.googleapis.com/auth/calendar.read\n     *\n     * Generated from protobuf field <code>string canonical_scopes = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setCanonicalScopes($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->canonical_scopes = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Page.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/documentation.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a documentation page. A page can contain subpages to represent\n * nested documentation set structure.\n *\n * Generated from protobuf message <code>google.api.Page</code>\n */\nclass Page extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the page. It will be used as an identity of the page to\n     * generate URI of the page, text of the link to this page in navigation,\n     * etc. The full page name (start from the root page name to this page\n     * concatenated with `.`) can be used as reference to the page in your\n     * documentation. For example:\n     * <pre><code>pages:\n     * - name: Tutorial\n     *   content: &#40;== include tutorial.md ==&#41;\n     *   subpages:\n     *   - name: Java\n     *     content: &#40;== include tutorial_java.md ==&#41;\n     * </code></pre>\n     * You can reference `Java` page using Markdown reference link syntax:\n     * `[Java][Tutorial.Java]`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The Markdown content of the page. You can use ```(== include {path}\n     * ==)``` to include content from a Markdown file. The content can be used\n     * to produce the documentation page such as HTML format page.\n     *\n     * Generated from protobuf field <code>string content = 2;</code>\n     */\n    protected $content = '';\n    /**\n     * Subpages of this page. The order of subpages specified here will be\n     * honored in the generated docset.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Page subpages = 3;</code>\n     */\n    private $subpages;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the page. It will be used as an identity of the page to\n     *           generate URI of the page, text of the link to this page in navigation,\n     *           etc. The full page name (start from the root page name to this page\n     *           concatenated with `.`) can be used as reference to the page in your\n     *           documentation. For example:\n     *           <pre><code>pages:\n     *           - name: Tutorial\n     *             content: &#40;== include tutorial.md ==&#41;\n     *             subpages:\n     *             - name: Java\n     *               content: &#40;== include tutorial_java.md ==&#41;\n     *           </code></pre>\n     *           You can reference `Java` page using Markdown reference link syntax:\n     *           `[Java][Tutorial.Java]`.\n     *     @type string $content\n     *           The Markdown content of the page. You can use ```(== include {path}\n     *           ==)``` to include content from a Markdown file. The content can be used\n     *           to produce the documentation page such as HTML format page.\n     *     @type array<\\Google\\Api\\Page>|\\Google\\Protobuf\\Internal\\RepeatedField $subpages\n     *           Subpages of this page. The order of subpages specified here will be\n     *           honored in the generated docset.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Documentation::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the page. It will be used as an identity of the page to\n     * generate URI of the page, text of the link to this page in navigation,\n     * etc. The full page name (start from the root page name to this page\n     * concatenated with `.`) can be used as reference to the page in your\n     * documentation. For example:\n     * <pre><code>pages:\n     * - name: Tutorial\n     *   content: &#40;== include tutorial.md ==&#41;\n     *   subpages:\n     *   - name: Java\n     *     content: &#40;== include tutorial_java.md ==&#41;\n     * </code></pre>\n     * You can reference `Java` page using Markdown reference link syntax:\n     * `[Java][Tutorial.Java]`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the page. It will be used as an identity of the page to\n     * generate URI of the page, text of the link to this page in navigation,\n     * etc. The full page name (start from the root page name to this page\n     * concatenated with `.`) can be used as reference to the page in your\n     * documentation. For example:\n     * <pre><code>pages:\n     * - name: Tutorial\n     *   content: &#40;== include tutorial.md ==&#41;\n     *   subpages:\n     *   - name: Java\n     *     content: &#40;== include tutorial_java.md ==&#41;\n     * </code></pre>\n     * You can reference `Java` page using Markdown reference link syntax:\n     * `[Java][Tutorial.Java]`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The Markdown content of the page. You can use ```(== include {path}\n     * ==)``` to include content from a Markdown file. The content can be used\n     * to produce the documentation page such as HTML format page.\n     *\n     * Generated from protobuf field <code>string content = 2;</code>\n     * @return string\n     */\n    public function getContent()\n    {\n        return $this->content;\n    }\n\n    /**\n     * The Markdown content of the page. You can use ```(== include {path}\n     * ==)``` to include content from a Markdown file. The content can be used\n     * to produce the documentation page such as HTML format page.\n     *\n     * Generated from protobuf field <code>string content = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setContent($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->content = $var;\n\n        return $this;\n    }\n\n    /**\n     * Subpages of this page. The order of subpages specified here will be\n     * honored in the generated docset.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Page subpages = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getSubpages()\n    {\n        return $this->subpages;\n    }\n\n    /**\n     * Subpages of this page. The order of subpages specified here will be\n     * honored in the generated docset.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Page subpages = 3;</code>\n     * @param array<\\Google\\Api\\Page>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setSubpages($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Page::class);\n        $this->subpages = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/PhpSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Php client libraries.\n *\n * Generated from protobuf message <code>google.api.PhpSettings</code>\n */\nclass PhpSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ProjectProperties.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/consumer.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A descriptor for defining project properties for a service. One service may\n * have many consumer projects, and the service may want to behave differently\n * depending on some properties on the project. For example, a project may be\n * associated with a school, or a business, or a government agency, a business\n * type property on the project may affect how a service responds to the client.\n * This descriptor defines which properties are allowed to be set on a project.\n * Example:\n *    project_properties:\n *      properties:\n *      - name: NO_WATERMARK\n *        type: BOOL\n *        description: Allows usage of the API without watermarks.\n *      - name: EXTENDED_TILE_CACHE_PERIOD\n *        type: INT64\n *\n * Generated from protobuf message <code>google.api.ProjectProperties</code>\n */\nclass ProjectProperties extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * List of per consumer project-specific properties.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Property properties = 1;</code>\n     */\n    private $properties;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\Property>|\\Google\\Protobuf\\Internal\\RepeatedField $properties\n     *           List of per consumer project-specific properties.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Consumer::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * List of per consumer project-specific properties.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Property properties = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getProperties()\n    {\n        return $this->properties;\n    }\n\n    /**\n     * List of per consumer project-specific properties.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Property properties = 1;</code>\n     * @param array<\\Google\\Api\\Property>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setProperties($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Property::class);\n        $this->properties = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Property/PropertyType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/consumer.proto\n\nnamespace Google\\Api\\Property;\n\nuse UnexpectedValueException;\n\n/**\n * Supported data type of the property values\n *\n * Protobuf type <code>google.api.Property.PropertyType</code>\n */\nclass PropertyType\n{\n    /**\n     * The type is unspecified, and will result in an error.\n     *\n     * Generated from protobuf enum <code>UNSPECIFIED = 0;</code>\n     */\n    const UNSPECIFIED = 0;\n    /**\n     * The type is `int64`.\n     *\n     * Generated from protobuf enum <code>INT64 = 1;</code>\n     */\n    const INT64 = 1;\n    /**\n     * The type is `bool`.\n     *\n     * Generated from protobuf enum <code>BOOL = 2;</code>\n     */\n    const BOOL = 2;\n    /**\n     * The type is `string`.\n     *\n     * Generated from protobuf enum <code>STRING = 3;</code>\n     */\n    const STRING = 3;\n    /**\n     * The type is 'double'.\n     *\n     * Generated from protobuf enum <code>DOUBLE = 4;</code>\n     */\n    const DOUBLE = 4;\n\n    private static $valueToName = [\n        self::UNSPECIFIED => 'UNSPECIFIED',\n        self::INT64 => 'INT64',\n        self::BOOL => 'BOOL',\n        self::STRING => 'STRING',\n        self::DOUBLE => 'DOUBLE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Property.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/consumer.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Defines project properties.\n * API services can define properties that can be assigned to consumer projects\n * so that backends can perform response customization without having to make\n * additional calls or maintain additional storage. For example, Maps API\n * defines properties that controls map tile cache period, or whether to embed a\n * watermark in a result.\n * These values can be set via API producer console. Only API providers can\n * define and set these properties.\n *\n * Generated from protobuf message <code>google.api.Property</code>\n */\nclass Property extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the property (a.k.a key).\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The type of this property.\n     *\n     * Generated from protobuf field <code>.google.api.Property.PropertyType type = 2;</code>\n     */\n    protected $type = 0;\n    /**\n     * The description of the property\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     */\n    protected $description = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the property (a.k.a key).\n     *     @type int $type\n     *           The type of this property.\n     *     @type string $description\n     *           The description of the property\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Consumer::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the property (a.k.a key).\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the property (a.k.a key).\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The type of this property.\n     *\n     * Generated from protobuf field <code>.google.api.Property.PropertyType type = 2;</code>\n     * @return int\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * The type of this property.\n     *\n     * Generated from protobuf field <code>.google.api.Property.PropertyType type = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\Property\\PropertyType::class);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The description of the property\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * The description of the property\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Publishing.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * Generated from protobuf message <code>google.api.Publishing</code>\n */\nclass Publishing extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of API method settings, e.g. the behavior for methods that use the\n     * long-running operation pattern.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MethodSettings method_settings = 2;</code>\n     */\n    private $method_settings;\n    /**\n     * Link to a *public* URI where users can report issues.  Example:\n     * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n     *\n     * Generated from protobuf field <code>string new_issue_uri = 101;</code>\n     */\n    protected $new_issue_uri = '';\n    /**\n     * Link to product home page.  Example:\n     * https://cloud.google.com/asset-inventory/docs/overview\n     *\n     * Generated from protobuf field <code>string documentation_uri = 102;</code>\n     */\n    protected $documentation_uri = '';\n    /**\n     * Used as a tracking tag when collecting data about the APIs developer\n     * relations artifacts like docs, packages delivered to package managers,\n     * etc.  Example: \"speech\".\n     *\n     * Generated from protobuf field <code>string api_short_name = 103;</code>\n     */\n    protected $api_short_name = '';\n    /**\n     * GitHub label to apply to issues and pull requests opened for this API.\n     *\n     * Generated from protobuf field <code>string github_label = 104;</code>\n     */\n    protected $github_label = '';\n    /**\n     * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n     * containing source code for the client libraries for this API.\n     *\n     * Generated from protobuf field <code>repeated string codeowner_github_teams = 105;</code>\n     */\n    private $codeowner_github_teams;\n    /**\n     * A prefix used in sample code when demarking regions to be included in\n     * documentation.\n     *\n     * Generated from protobuf field <code>string doc_tag_prefix = 106;</code>\n     */\n    protected $doc_tag_prefix = '';\n    /**\n     * For whom the client library is being published.\n     *\n     * Generated from protobuf field <code>.google.api.ClientLibraryOrganization organization = 107;</code>\n     */\n    protected $organization = 0;\n    /**\n     * Client library settings.  If the same version string appears multiple\n     * times in this list, then the last one wins.  Settings from earlier\n     * settings with the same version string are discarded.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ClientLibrarySettings library_settings = 109;</code>\n     */\n    private $library_settings;\n    /**\n     * Optional link to proto reference documentation.  Example:\n     * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n     *\n     * Generated from protobuf field <code>string proto_reference_documentation_uri = 110;</code>\n     */\n    protected $proto_reference_documentation_uri = '';\n    /**\n     * Optional link to REST reference documentation.  Example:\n     * https://cloud.google.com/pubsub/lite/docs/reference/rest\n     *\n     * Generated from protobuf field <code>string rest_reference_documentation_uri = 111;</code>\n     */\n    protected $rest_reference_documentation_uri = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\MethodSettings>|\\Google\\Protobuf\\Internal\\RepeatedField $method_settings\n     *           A list of API method settings, e.g. the behavior for methods that use the\n     *           long-running operation pattern.\n     *     @type string $new_issue_uri\n     *           Link to a *public* URI where users can report issues.  Example:\n     *           https://issuetracker.google.com/issues/new?component=190865&template=1161103\n     *     @type string $documentation_uri\n     *           Link to product home page.  Example:\n     *           https://cloud.google.com/asset-inventory/docs/overview\n     *     @type string $api_short_name\n     *           Used as a tracking tag when collecting data about the APIs developer\n     *           relations artifacts like docs, packages delivered to package managers,\n     *           etc.  Example: \"speech\".\n     *     @type string $github_label\n     *           GitHub label to apply to issues and pull requests opened for this API.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $codeowner_github_teams\n     *           GitHub teams to be added to CODEOWNERS in the directory in GitHub\n     *           containing source code for the client libraries for this API.\n     *     @type string $doc_tag_prefix\n     *           A prefix used in sample code when demarking regions to be included in\n     *           documentation.\n     *     @type int $organization\n     *           For whom the client library is being published.\n     *     @type array<\\Google\\Api\\ClientLibrarySettings>|\\Google\\Protobuf\\Internal\\RepeatedField $library_settings\n     *           Client library settings.  If the same version string appears multiple\n     *           times in this list, then the last one wins.  Settings from earlier\n     *           settings with the same version string are discarded.\n     *     @type string $proto_reference_documentation_uri\n     *           Optional link to proto reference documentation.  Example:\n     *           https://cloud.google.com/pubsub/lite/docs/reference/rpc\n     *     @type string $rest_reference_documentation_uri\n     *           Optional link to REST reference documentation.  Example:\n     *           https://cloud.google.com/pubsub/lite/docs/reference/rest\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of API method settings, e.g. the behavior for methods that use the\n     * long-running operation pattern.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MethodSettings method_settings = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMethodSettings()\n    {\n        return $this->method_settings;\n    }\n\n    /**\n     * A list of API method settings, e.g. the behavior for methods that use the\n     * long-running operation pattern.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MethodSettings method_settings = 2;</code>\n     * @param array<\\Google\\Api\\MethodSettings>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMethodSettings($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\MethodSettings::class);\n        $this->method_settings = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Link to a *public* URI where users can report issues.  Example:\n     * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n     *\n     * Generated from protobuf field <code>string new_issue_uri = 101;</code>\n     * @return string\n     */\n    public function getNewIssueUri()\n    {\n        return $this->new_issue_uri;\n    }\n\n    /**\n     * Link to a *public* URI where users can report issues.  Example:\n     * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n     *\n     * Generated from protobuf field <code>string new_issue_uri = 101;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNewIssueUri($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->new_issue_uri = $var;\n\n        return $this;\n    }\n\n    /**\n     * Link to product home page.  Example:\n     * https://cloud.google.com/asset-inventory/docs/overview\n     *\n     * Generated from protobuf field <code>string documentation_uri = 102;</code>\n     * @return string\n     */\n    public function getDocumentationUri()\n    {\n        return $this->documentation_uri;\n    }\n\n    /**\n     * Link to product home page.  Example:\n     * https://cloud.google.com/asset-inventory/docs/overview\n     *\n     * Generated from protobuf field <code>string documentation_uri = 102;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDocumentationUri($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->documentation_uri = $var;\n\n        return $this;\n    }\n\n    /**\n     * Used as a tracking tag when collecting data about the APIs developer\n     * relations artifacts like docs, packages delivered to package managers,\n     * etc.  Example: \"speech\".\n     *\n     * Generated from protobuf field <code>string api_short_name = 103;</code>\n     * @return string\n     */\n    public function getApiShortName()\n    {\n        return $this->api_short_name;\n    }\n\n    /**\n     * Used as a tracking tag when collecting data about the APIs developer\n     * relations artifacts like docs, packages delivered to package managers,\n     * etc.  Example: \"speech\".\n     *\n     * Generated from protobuf field <code>string api_short_name = 103;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setApiShortName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->api_short_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * GitHub label to apply to issues and pull requests opened for this API.\n     *\n     * Generated from protobuf field <code>string github_label = 104;</code>\n     * @return string\n     */\n    public function getGithubLabel()\n    {\n        return $this->github_label;\n    }\n\n    /**\n     * GitHub label to apply to issues and pull requests opened for this API.\n     *\n     * Generated from protobuf field <code>string github_label = 104;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setGithubLabel($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->github_label = $var;\n\n        return $this;\n    }\n\n    /**\n     * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n     * containing source code for the client libraries for this API.\n     *\n     * Generated from protobuf field <code>repeated string codeowner_github_teams = 105;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getCodeownerGithubTeams()\n    {\n        return $this->codeowner_github_teams;\n    }\n\n    /**\n     * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n     * containing source code for the client libraries for this API.\n     *\n     * Generated from protobuf field <code>repeated string codeowner_github_teams = 105;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setCodeownerGithubTeams($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->codeowner_github_teams = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A prefix used in sample code when demarking regions to be included in\n     * documentation.\n     *\n     * Generated from protobuf field <code>string doc_tag_prefix = 106;</code>\n     * @return string\n     */\n    public function getDocTagPrefix()\n    {\n        return $this->doc_tag_prefix;\n    }\n\n    /**\n     * A prefix used in sample code when demarking regions to be included in\n     * documentation.\n     *\n     * Generated from protobuf field <code>string doc_tag_prefix = 106;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDocTagPrefix($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->doc_tag_prefix = $var;\n\n        return $this;\n    }\n\n    /**\n     * For whom the client library is being published.\n     *\n     * Generated from protobuf field <code>.google.api.ClientLibraryOrganization organization = 107;</code>\n     * @return int\n     */\n    public function getOrganization()\n    {\n        return $this->organization;\n    }\n\n    /**\n     * For whom the client library is being published.\n     *\n     * Generated from protobuf field <code>.google.api.ClientLibraryOrganization organization = 107;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setOrganization($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\ClientLibraryOrganization::class);\n        $this->organization = $var;\n\n        return $this;\n    }\n\n    /**\n     * Client library settings.  If the same version string appears multiple\n     * times in this list, then the last one wins.  Settings from earlier\n     * settings with the same version string are discarded.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ClientLibrarySettings library_settings = 109;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLibrarySettings()\n    {\n        return $this->library_settings;\n    }\n\n    /**\n     * Client library settings.  If the same version string appears multiple\n     * times in this list, then the last one wins.  Settings from earlier\n     * settings with the same version string are discarded.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ClientLibrarySettings library_settings = 109;</code>\n     * @param array<\\Google\\Api\\ClientLibrarySettings>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLibrarySettings($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\ClientLibrarySettings::class);\n        $this->library_settings = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Optional link to proto reference documentation.  Example:\n     * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n     *\n     * Generated from protobuf field <code>string proto_reference_documentation_uri = 110;</code>\n     * @return string\n     */\n    public function getProtoReferenceDocumentationUri()\n    {\n        return $this->proto_reference_documentation_uri;\n    }\n\n    /**\n     * Optional link to proto reference documentation.  Example:\n     * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n     *\n     * Generated from protobuf field <code>string proto_reference_documentation_uri = 110;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProtoReferenceDocumentationUri($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->proto_reference_documentation_uri = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional link to REST reference documentation.  Example:\n     * https://cloud.google.com/pubsub/lite/docs/reference/rest\n     *\n     * Generated from protobuf field <code>string rest_reference_documentation_uri = 111;</code>\n     * @return string\n     */\n    public function getRestReferenceDocumentationUri()\n    {\n        return $this->rest_reference_documentation_uri;\n    }\n\n    /**\n     * Optional link to REST reference documentation.  Example:\n     * https://cloud.google.com/pubsub/lite/docs/reference/rest\n     *\n     * Generated from protobuf field <code>string rest_reference_documentation_uri = 111;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRestReferenceDocumentationUri($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->rest_reference_documentation_uri = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/PythonSettings/ExperimentalFeatures.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api\\PythonSettings;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * Generated from protobuf message <code>google.api.PythonSettings.ExperimentalFeatures</code>\n */\nclass ExperimentalFeatures extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Enables generation of asynchronous REST clients if `rest` transport is\n     * enabled. By default, asynchronous REST clients will not be generated.\n     * This feature will be enabled by default 1 month after launching the\n     * feature in preview packages.\n     *\n     * Generated from protobuf field <code>bool rest_async_io_enabled = 1;</code>\n     */\n    protected $rest_async_io_enabled = false;\n    /**\n     * Enables generation of protobuf code using new types that are more\n     * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n     * enabled by default 1 month after launching the feature in preview\n     * packages.\n     *\n     * Generated from protobuf field <code>bool protobuf_pythonic_types_enabled = 2;</code>\n     */\n    protected $protobuf_pythonic_types_enabled = false;\n    /**\n     * Disables generation of an unversioned Python package for this client\n     * library. This means that the module names will need to be versioned in\n     * import statements. For example `import google.cloud.library_v2` instead\n     * of `import google.cloud.library`.\n     *\n     * Generated from protobuf field <code>bool unversioned_package_disabled = 3;</code>\n     */\n    protected $unversioned_package_disabled = false;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type bool $rest_async_io_enabled\n     *           Enables generation of asynchronous REST clients if `rest` transport is\n     *           enabled. By default, asynchronous REST clients will not be generated.\n     *           This feature will be enabled by default 1 month after launching the\n     *           feature in preview packages.\n     *     @type bool $protobuf_pythonic_types_enabled\n     *           Enables generation of protobuf code using new types that are more\n     *           Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n     *           enabled by default 1 month after launching the feature in preview\n     *           packages.\n     *     @type bool $unversioned_package_disabled\n     *           Disables generation of an unversioned Python package for this client\n     *           library. This means that the module names will need to be versioned in\n     *           import statements. For example `import google.cloud.library_v2` instead\n     *           of `import google.cloud.library`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Enables generation of asynchronous REST clients if `rest` transport is\n     * enabled. By default, asynchronous REST clients will not be generated.\n     * This feature will be enabled by default 1 month after launching the\n     * feature in preview packages.\n     *\n     * Generated from protobuf field <code>bool rest_async_io_enabled = 1;</code>\n     * @return bool\n     */\n    public function getRestAsyncIoEnabled()\n    {\n        return $this->rest_async_io_enabled;\n    }\n\n    /**\n     * Enables generation of asynchronous REST clients if `rest` transport is\n     * enabled. By default, asynchronous REST clients will not be generated.\n     * This feature will be enabled by default 1 month after launching the\n     * feature in preview packages.\n     *\n     * Generated from protobuf field <code>bool rest_async_io_enabled = 1;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setRestAsyncIoEnabled($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->rest_async_io_enabled = $var;\n\n        return $this;\n    }\n\n    /**\n     * Enables generation of protobuf code using new types that are more\n     * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n     * enabled by default 1 month after launching the feature in preview\n     * packages.\n     *\n     * Generated from protobuf field <code>bool protobuf_pythonic_types_enabled = 2;</code>\n     * @return bool\n     */\n    public function getProtobufPythonicTypesEnabled()\n    {\n        return $this->protobuf_pythonic_types_enabled;\n    }\n\n    /**\n     * Enables generation of protobuf code using new types that are more\n     * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n     * enabled by default 1 month after launching the feature in preview\n     * packages.\n     *\n     * Generated from protobuf field <code>bool protobuf_pythonic_types_enabled = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setProtobufPythonicTypesEnabled($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->protobuf_pythonic_types_enabled = $var;\n\n        return $this;\n    }\n\n    /**\n     * Disables generation of an unversioned Python package for this client\n     * library. This means that the module names will need to be versioned in\n     * import statements. For example `import google.cloud.library_v2` instead\n     * of `import google.cloud.library`.\n     *\n     * Generated from protobuf field <code>bool unversioned_package_disabled = 3;</code>\n     * @return bool\n     */\n    public function getUnversionedPackageDisabled()\n    {\n        return $this->unversioned_package_disabled;\n    }\n\n    /**\n     * Disables generation of an unversioned Python package for this client\n     * library. This means that the module names will need to be versioned in\n     * import statements. For example `import google.cloud.library_v2` instead\n     * of `import google.cloud.library`.\n     *\n     * Generated from protobuf field <code>bool unversioned_package_disabled = 3;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setUnversionedPackageDisabled($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->unversioned_package_disabled = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/PythonSettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Python client libraries.\n *\n * Generated from protobuf message <code>google.api.PythonSettings</code>\n */\nclass PythonSettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n    /**\n     * Experimental features to be included during client library generation.\n     *\n     * Generated from protobuf field <code>.google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;</code>\n     */\n    protected $experimental_features = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     *     @type \\Google\\Api\\PythonSettings\\ExperimentalFeatures $experimental_features\n     *           Experimental features to be included during client library generation.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n    /**\n     * Experimental features to be included during client library generation.\n     *\n     * Generated from protobuf field <code>.google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;</code>\n     * @return \\Google\\Api\\PythonSettings\\ExperimentalFeatures|null\n     */\n    public function getExperimentalFeatures()\n    {\n        return $this->experimental_features;\n    }\n\n    public function hasExperimentalFeatures()\n    {\n        return isset($this->experimental_features);\n    }\n\n    public function clearExperimentalFeatures()\n    {\n        unset($this->experimental_features);\n    }\n\n    /**\n     * Experimental features to be included during client library generation.\n     *\n     * Generated from protobuf field <code>.google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;</code>\n     * @param \\Google\\Api\\PythonSettings\\ExperimentalFeatures $var\n     * @return $this\n     */\n    public function setExperimentalFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\PythonSettings\\ExperimentalFeatures::class);\n        $this->experimental_features = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Quota.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/quota.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Quota configuration helps to achieve fairness and budgeting in service\n * usage.\n * The metric based quota configuration works this way:\n * - The service configuration defines a set of metrics.\n * - For API calls, the quota.metric_rules maps methods to metrics with\n *   corresponding costs.\n * - The quota.limits defines limits on the metrics, which will be used for\n *   quota checks at runtime.\n * An example quota configuration in yaml format:\n *    quota:\n *      limits:\n *      - name: apiWriteQpsPerProject\n *        metric: library.googleapis.com/write_calls\n *        unit: \"1/min/{project}\"  # rate limit for consumer projects\n *        values:\n *          STANDARD: 10000\n *      (The metric rules bind all methods to the read_calls metric,\n *       except for the UpdateBook and DeleteBook methods. These two methods\n *       are mapped to the write_calls metric, with the UpdateBook method\n *       consuming at twice rate as the DeleteBook method.)\n *      metric_rules:\n *      - selector: \"*\"\n *        metric_costs:\n *          library.googleapis.com/read_calls: 1\n *      - selector: google.example.library.v1.LibraryService.UpdateBook\n *        metric_costs:\n *          library.googleapis.com/write_calls: 2\n *      - selector: google.example.library.v1.LibraryService.DeleteBook\n *        metric_costs:\n *          library.googleapis.com/write_calls: 1\n *  Corresponding Metric definition:\n *      metrics:\n *      - name: library.googleapis.com/read_calls\n *        display_name: Read requests\n *        metric_kind: DELTA\n *        value_type: INT64\n *      - name: library.googleapis.com/write_calls\n *        display_name: Write requests\n *        metric_kind: DELTA\n *        value_type: INT64\n *\n * Generated from protobuf message <code>google.api.Quota</code>\n */\nclass Quota extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * List of QuotaLimit definitions for the service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.QuotaLimit limits = 3;</code>\n     */\n    private $limits;\n    /**\n     * List of MetricRule definitions, each one mapping a selected method to one\n     * or more metrics.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricRule metric_rules = 4;</code>\n     */\n    private $metric_rules;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\QuotaLimit>|\\Google\\Protobuf\\Internal\\RepeatedField $limits\n     *           List of QuotaLimit definitions for the service.\n     *     @type array<\\Google\\Api\\MetricRule>|\\Google\\Protobuf\\Internal\\RepeatedField $metric_rules\n     *           List of MetricRule definitions, each one mapping a selected method to one\n     *           or more metrics.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Quota::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * List of QuotaLimit definitions for the service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.QuotaLimit limits = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLimits()\n    {\n        return $this->limits;\n    }\n\n    /**\n     * List of QuotaLimit definitions for the service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.QuotaLimit limits = 3;</code>\n     * @param array<\\Google\\Api\\QuotaLimit>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLimits($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\QuotaLimit::class);\n        $this->limits = $arr;\n\n        return $this;\n    }\n\n    /**\n     * List of MetricRule definitions, each one mapping a selected method to one\n     * or more metrics.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricRule metric_rules = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMetricRules()\n    {\n        return $this->metric_rules;\n    }\n\n    /**\n     * List of MetricRule definitions, each one mapping a selected method to one\n     * or more metrics.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricRule metric_rules = 4;</code>\n     * @param array<\\Google\\Api\\MetricRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMetricRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\MetricRule::class);\n        $this->metric_rules = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/QuotaLimit.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/quota.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `QuotaLimit` defines a specific limit that applies over a specified duration\n * for a limit type. There can be at most one limit for a duration and limit\n * type combination defined within a `QuotaGroup`.\n *\n * Generated from protobuf message <code>google.api.QuotaLimit</code>\n */\nclass QuotaLimit extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Name of the quota limit.\n     * The name must be provided, and it must be unique within the service. The\n     * name can only include alphanumeric characters as well as '-'.\n     * The maximum length of the limit name is 64 characters.\n     *\n     * Generated from protobuf field <code>string name = 6;</code>\n     */\n    protected $name = '';\n    /**\n     * Optional. User-visible, extended description for this quota limit.\n     * Should be used only when more context is needed to understand this limit\n     * than provided by the limit's display name (see: `display_name`).\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     */\n    protected $description = '';\n    /**\n     * Default number of tokens that can be consumed during the specified\n     * duration. This is the number of tokens assigned when a client\n     * application developer activates the service for his/her project.\n     * Specifying a value of 0 will block all requests. This can be used if you\n     * are provisioning quota to selected consumers and blocking others.\n     * Similarly, a value of -1 will indicate an unlimited quota. No other\n     * negative values are allowed.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 default_limit = 3;</code>\n     */\n    protected $default_limit = 0;\n    /**\n     * Maximum number of tokens that can be consumed during the specified\n     * duration. Client application developers can override the default limit up\n     * to this maximum. If specified, this value cannot be set to a value less\n     * than the default limit. If not specified, it is set to the default limit.\n     * To allow clients to apply overrides with no upper bound, set this to -1,\n     * indicating unlimited maximum quota.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 max_limit = 4;</code>\n     */\n    protected $max_limit = 0;\n    /**\n     * Free tier value displayed in the Developers Console for this limit.\n     * The free tier is the number of tokens that will be subtracted from the\n     * billed amount when billing is enabled.\n     * This field can only be set on a limit with duration \"1d\", in a billable\n     * group; it is invalid on any other limit. If this field is not set, it\n     * defaults to 0, indicating that there is no free tier for this service.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 free_tier = 7;</code>\n     */\n    protected $free_tier = 0;\n    /**\n     * Duration of this limit in textual notation. Must be \"100s\" or \"1d\".\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>string duration = 5;</code>\n     */\n    protected $duration = '';\n    /**\n     * The name of the metric this quota limit applies to. The quota limits with\n     * the same metric will be checked together during runtime. The metric must be\n     * defined within the service config.\n     *\n     * Generated from protobuf field <code>string metric = 8;</code>\n     */\n    protected $metric = '';\n    /**\n     * Specify the unit of the quota limit. It uses the same syntax as\n     * [MetricDescriptor.unit][google.api.MetricDescriptor.unit]. The supported\n     * unit kinds are determined by the quota backend system.\n     * Here are some examples:\n     * * \"1/min/{project}\" for quota per minute per project.\n     * Note: the order of unit components is insignificant.\n     * The \"1\" at the beginning is required to follow the metric unit syntax.\n     *\n     * Generated from protobuf field <code>string unit = 9;</code>\n     */\n    protected $unit = '';\n    /**\n     * Tiered limit values. You must specify this as a key:value pair, with an\n     * integer value that is the maximum number of requests allowed for the\n     * specified unit. Currently only STANDARD is supported.\n     *\n     * Generated from protobuf field <code>map<string, int64> values = 10;</code>\n     */\n    private $values;\n    /**\n     * User-visible display name for this limit.\n     * Optional. If not set, the UI will provide a default display name based on\n     * the quota configuration. This field can be used to override the default\n     * display name generated from the configuration.\n     *\n     * Generated from protobuf field <code>string display_name = 12;</code>\n     */\n    protected $display_name = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Name of the quota limit.\n     *           The name must be provided, and it must be unique within the service. The\n     *           name can only include alphanumeric characters as well as '-'.\n     *           The maximum length of the limit name is 64 characters.\n     *     @type string $description\n     *           Optional. User-visible, extended description for this quota limit.\n     *           Should be used only when more context is needed to understand this limit\n     *           than provided by the limit's display name (see: `display_name`).\n     *     @type int|string $default_limit\n     *           Default number of tokens that can be consumed during the specified\n     *           duration. This is the number of tokens assigned when a client\n     *           application developer activates the service for his/her project.\n     *           Specifying a value of 0 will block all requests. This can be used if you\n     *           are provisioning quota to selected consumers and blocking others.\n     *           Similarly, a value of -1 will indicate an unlimited quota. No other\n     *           negative values are allowed.\n     *           Used by group-based quotas only.\n     *     @type int|string $max_limit\n     *           Maximum number of tokens that can be consumed during the specified\n     *           duration. Client application developers can override the default limit up\n     *           to this maximum. If specified, this value cannot be set to a value less\n     *           than the default limit. If not specified, it is set to the default limit.\n     *           To allow clients to apply overrides with no upper bound, set this to -1,\n     *           indicating unlimited maximum quota.\n     *           Used by group-based quotas only.\n     *     @type int|string $free_tier\n     *           Free tier value displayed in the Developers Console for this limit.\n     *           The free tier is the number of tokens that will be subtracted from the\n     *           billed amount when billing is enabled.\n     *           This field can only be set on a limit with duration \"1d\", in a billable\n     *           group; it is invalid on any other limit. If this field is not set, it\n     *           defaults to 0, indicating that there is no free tier for this service.\n     *           Used by group-based quotas only.\n     *     @type string $duration\n     *           Duration of this limit in textual notation. Must be \"100s\" or \"1d\".\n     *           Used by group-based quotas only.\n     *     @type string $metric\n     *           The name of the metric this quota limit applies to. The quota limits with\n     *           the same metric will be checked together during runtime. The metric must be\n     *           defined within the service config.\n     *     @type string $unit\n     *           Specify the unit of the quota limit. It uses the same syntax as\n     *           [MetricDescriptor.unit][google.api.MetricDescriptor.unit]. The supported\n     *           unit kinds are determined by the quota backend system.\n     *           Here are some examples:\n     *           * \"1/min/{project}\" for quota per minute per project.\n     *           Note: the order of unit components is insignificant.\n     *           The \"1\" at the beginning is required to follow the metric unit syntax.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $values\n     *           Tiered limit values. You must specify this as a key:value pair, with an\n     *           integer value that is the maximum number of requests allowed for the\n     *           specified unit. Currently only STANDARD is supported.\n     *     @type string $display_name\n     *           User-visible display name for this limit.\n     *           Optional. If not set, the UI will provide a default display name based on\n     *           the quota configuration. This field can be used to override the default\n     *           display name generated from the configuration.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Quota::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Name of the quota limit.\n     * The name must be provided, and it must be unique within the service. The\n     * name can only include alphanumeric characters as well as '-'.\n     * The maximum length of the limit name is 64 characters.\n     *\n     * Generated from protobuf field <code>string name = 6;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Name of the quota limit.\n     * The name must be provided, and it must be unique within the service. The\n     * name can only include alphanumeric characters as well as '-'.\n     * The maximum length of the limit name is 64 characters.\n     *\n     * Generated from protobuf field <code>string name = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. User-visible, extended description for this quota limit.\n     * Should be used only when more context is needed to understand this limit\n     * than provided by the limit's display name (see: `display_name`).\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Optional. User-visible, extended description for this quota limit.\n     * Should be used only when more context is needed to understand this limit\n     * than provided by the limit's display name (see: `display_name`).\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * Default number of tokens that can be consumed during the specified\n     * duration. This is the number of tokens assigned when a client\n     * application developer activates the service for his/her project.\n     * Specifying a value of 0 will block all requests. This can be used if you\n     * are provisioning quota to selected consumers and blocking others.\n     * Similarly, a value of -1 will indicate an unlimited quota. No other\n     * negative values are allowed.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 default_limit = 3;</code>\n     * @return int|string\n     */\n    public function getDefaultLimit()\n    {\n        return $this->default_limit;\n    }\n\n    /**\n     * Default number of tokens that can be consumed during the specified\n     * duration. This is the number of tokens assigned when a client\n     * application developer activates the service for his/her project.\n     * Specifying a value of 0 will block all requests. This can be used if you\n     * are provisioning quota to selected consumers and blocking others.\n     * Similarly, a value of -1 will indicate an unlimited quota. No other\n     * negative values are allowed.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 default_limit = 3;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setDefaultLimit($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->default_limit = $var;\n\n        return $this;\n    }\n\n    /**\n     * Maximum number of tokens that can be consumed during the specified\n     * duration. Client application developers can override the default limit up\n     * to this maximum. If specified, this value cannot be set to a value less\n     * than the default limit. If not specified, it is set to the default limit.\n     * To allow clients to apply overrides with no upper bound, set this to -1,\n     * indicating unlimited maximum quota.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 max_limit = 4;</code>\n     * @return int|string\n     */\n    public function getMaxLimit()\n    {\n        return $this->max_limit;\n    }\n\n    /**\n     * Maximum number of tokens that can be consumed during the specified\n     * duration. Client application developers can override the default limit up\n     * to this maximum. If specified, this value cannot be set to a value less\n     * than the default limit. If not specified, it is set to the default limit.\n     * To allow clients to apply overrides with no upper bound, set this to -1,\n     * indicating unlimited maximum quota.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 max_limit = 4;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setMaxLimit($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->max_limit = $var;\n\n        return $this;\n    }\n\n    /**\n     * Free tier value displayed in the Developers Console for this limit.\n     * The free tier is the number of tokens that will be subtracted from the\n     * billed amount when billing is enabled.\n     * This field can only be set on a limit with duration \"1d\", in a billable\n     * group; it is invalid on any other limit. If this field is not set, it\n     * defaults to 0, indicating that there is no free tier for this service.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 free_tier = 7;</code>\n     * @return int|string\n     */\n    public function getFreeTier()\n    {\n        return $this->free_tier;\n    }\n\n    /**\n     * Free tier value displayed in the Developers Console for this limit.\n     * The free tier is the number of tokens that will be subtracted from the\n     * billed amount when billing is enabled.\n     * This field can only be set on a limit with duration \"1d\", in a billable\n     * group; it is invalid on any other limit. If this field is not set, it\n     * defaults to 0, indicating that there is no free tier for this service.\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>int64 free_tier = 7;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setFreeTier($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->free_tier = $var;\n\n        return $this;\n    }\n\n    /**\n     * Duration of this limit in textual notation. Must be \"100s\" or \"1d\".\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>string duration = 5;</code>\n     * @return string\n     */\n    public function getDuration()\n    {\n        return $this->duration;\n    }\n\n    /**\n     * Duration of this limit in textual notation. Must be \"100s\" or \"1d\".\n     * Used by group-based quotas only.\n     *\n     * Generated from protobuf field <code>string duration = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDuration($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->duration = $var;\n\n        return $this;\n    }\n\n    /**\n     * The name of the metric this quota limit applies to. The quota limits with\n     * the same metric will be checked together during runtime. The metric must be\n     * defined within the service config.\n     *\n     * Generated from protobuf field <code>string metric = 8;</code>\n     * @return string\n     */\n    public function getMetric()\n    {\n        return $this->metric;\n    }\n\n    /**\n     * The name of the metric this quota limit applies to. The quota limits with\n     * the same metric will be checked together during runtime. The metric must be\n     * defined within the service config.\n     *\n     * Generated from protobuf field <code>string metric = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMetric($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->metric = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specify the unit of the quota limit. It uses the same syntax as\n     * [MetricDescriptor.unit][google.api.MetricDescriptor.unit]. The supported\n     * unit kinds are determined by the quota backend system.\n     * Here are some examples:\n     * * \"1/min/{project}\" for quota per minute per project.\n     * Note: the order of unit components is insignificant.\n     * The \"1\" at the beginning is required to follow the metric unit syntax.\n     *\n     * Generated from protobuf field <code>string unit = 9;</code>\n     * @return string\n     */\n    public function getUnit()\n    {\n        return $this->unit;\n    }\n\n    /**\n     * Specify the unit of the quota limit. It uses the same syntax as\n     * [MetricDescriptor.unit][google.api.MetricDescriptor.unit]. The supported\n     * unit kinds are determined by the quota backend system.\n     * Here are some examples:\n     * * \"1/min/{project}\" for quota per minute per project.\n     * Note: the order of unit components is insignificant.\n     * The \"1\" at the beginning is required to follow the metric unit syntax.\n     *\n     * Generated from protobuf field <code>string unit = 9;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setUnit($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->unit = $var;\n\n        return $this;\n    }\n\n    /**\n     * Tiered limit values. You must specify this as a key:value pair, with an\n     * integer value that is the maximum number of requests allowed for the\n     * specified unit. Currently only STANDARD is supported.\n     *\n     * Generated from protobuf field <code>map<string, int64> values = 10;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getValues()\n    {\n        return $this->values;\n    }\n\n    /**\n     * Tiered limit values. You must specify this as a key:value pair, with an\n     * integer value that is the maximum number of requests allowed for the\n     * specified unit. Currently only STANDARD is supported.\n     *\n     * Generated from protobuf field <code>map<string, int64> values = 10;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setValues($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::INT64);\n        $this->values = $arr;\n\n        return $this;\n    }\n\n    /**\n     * User-visible display name for this limit.\n     * Optional. If not set, the UI will provide a default display name based on\n     * the quota configuration. This field can be used to override the default\n     * display name generated from the configuration.\n     *\n     * Generated from protobuf field <code>string display_name = 12;</code>\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->display_name;\n    }\n\n    /**\n     * User-visible display name for this limit.\n     * Optional. If not set, the UI will provide a default display name based on\n     * the quota configuration. This field can be used to override the default\n     * display name generated from the configuration.\n     *\n     * Generated from protobuf field <code>string display_name = 12;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDisplayName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->display_name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ResourceDescriptor/History.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/resource.proto\n\nnamespace Google\\Api\\ResourceDescriptor;\n\nuse UnexpectedValueException;\n\n/**\n * A description of the historical or future-looking state of the\n * resource pattern.\n *\n * Protobuf type <code>google.api.ResourceDescriptor.History</code>\n */\nclass History\n{\n    /**\n     * The \"unset\" value.\n     *\n     * Generated from protobuf enum <code>HISTORY_UNSPECIFIED = 0;</code>\n     */\n    const HISTORY_UNSPECIFIED = 0;\n    /**\n     * The resource originally had one pattern and launched as such, and\n     * additional patterns were added later.\n     *\n     * Generated from protobuf enum <code>ORIGINALLY_SINGLE_PATTERN = 1;</code>\n     */\n    const ORIGINALLY_SINGLE_PATTERN = 1;\n    /**\n     * The resource has one pattern, but the API owner expects to add more\n     * later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents\n     * that from being necessary once there are multiple patterns.)\n     *\n     * Generated from protobuf enum <code>FUTURE_MULTI_PATTERN = 2;</code>\n     */\n    const FUTURE_MULTI_PATTERN = 2;\n\n    private static $valueToName = [\n        self::HISTORY_UNSPECIFIED => 'HISTORY_UNSPECIFIED',\n        self::ORIGINALLY_SINGLE_PATTERN => 'ORIGINALLY_SINGLE_PATTERN',\n        self::FUTURE_MULTI_PATTERN => 'FUTURE_MULTI_PATTERN',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ResourceDescriptor/Style.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/resource.proto\n\nnamespace Google\\Api\\ResourceDescriptor;\n\nuse UnexpectedValueException;\n\n/**\n * A flag representing a specific style that a resource claims to conform to.\n *\n * Protobuf type <code>google.api.ResourceDescriptor.Style</code>\n */\nclass Style\n{\n    /**\n     * The unspecified value. Do not use.\n     *\n     * Generated from protobuf enum <code>STYLE_UNSPECIFIED = 0;</code>\n     */\n    const STYLE_UNSPECIFIED = 0;\n    /**\n     * This resource is intended to be \"declarative-friendly\".\n     * Declarative-friendly resources must be more strictly consistent, and\n     * setting this to true communicates to tools that this resource should\n     * adhere to declarative-friendly expectations.\n     * Note: This is used by the API linter (linter.aip.dev) to enable\n     * additional checks.\n     *\n     * Generated from protobuf enum <code>DECLARATIVE_FRIENDLY = 1;</code>\n     */\n    const DECLARATIVE_FRIENDLY = 1;\n\n    private static $valueToName = [\n        self::STYLE_UNSPECIFIED => 'STYLE_UNSPECIFIED',\n        self::DECLARATIVE_FRIENDLY => 'DECLARATIVE_FRIENDLY',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ResourceDescriptor.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/resource.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A simple descriptor of a resource type.\n * ResourceDescriptor annotates a resource message (either by means of a\n * protobuf annotation or use in the service config), and associates the\n * resource's schema, the resource type, and the pattern of the resource name.\n * Example:\n *     message Topic {\n *       // Indicates this message defines a resource schema.\n *       // Declares the resource type in the format of {service}/{kind}.\n *       // For Kubernetes resources, the format is {api group}/{kind}.\n *       option (google.api.resource) = {\n *         type: \"pubsub.googleapis.com/Topic\"\n *         pattern: \"projects/{project}/topics/{topic}\"\n *       };\n *     }\n * The ResourceDescriptor Yaml config will look like:\n *     resources:\n *     - type: \"pubsub.googleapis.com/Topic\"\n *       pattern: \"projects/{project}/topics/{topic}\"\n * Sometimes, resources have multiple patterns, typically because they can\n * live under multiple parents.\n * Example:\n *     message LogEntry {\n *       option (google.api.resource) = {\n *         type: \"logging.googleapis.com/LogEntry\"\n *         pattern: \"projects/{project}/logs/{log}\"\n *         pattern: \"folders/{folder}/logs/{log}\"\n *         pattern: \"organizations/{organization}/logs/{log}\"\n *         pattern: \"billingAccounts/{billing_account}/logs/{log}\"\n *       };\n *     }\n * The ResourceDescriptor Yaml config will look like:\n *     resources:\n *     - type: 'logging.googleapis.com/LogEntry'\n *       pattern: \"projects/{project}/logs/{log}\"\n *       pattern: \"folders/{folder}/logs/{log}\"\n *       pattern: \"organizations/{organization}/logs/{log}\"\n *       pattern: \"billingAccounts/{billing_account}/logs/{log}\"\n *\n * Generated from protobuf message <code>google.api.ResourceDescriptor</code>\n */\nclass ResourceDescriptor extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The resource type. It must be in the format of\n     * {service_name}/{resource_type_kind}. The `resource_type_kind` must be\n     * singular and must not include version numbers.\n     * Example: `storage.googleapis.com/Bucket`\n     * The value of the resource_type_kind must follow the regular expression\n     * /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and\n     * should use PascalCase (UpperCamelCase). The maximum number of\n     * characters allowed for the `resource_type_kind` is 100.\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     */\n    protected $type = '';\n    /**\n     * Optional. The relative resource name pattern associated with this resource\n     * type. The DNS prefix of the full resource name shouldn't be specified here.\n     * The path pattern must follow the syntax, which aligns with HTTP binding\n     * syntax:\n     *     Template = Segment { \"/\" Segment } ;\n     *     Segment = LITERAL | Variable ;\n     *     Variable = \"{\" LITERAL \"}\" ;\n     * Examples:\n     *     - \"projects/{project}/topics/{topic}\"\n     *     - \"projects/{project}/knowledgeBases/{knowledge_base}\"\n     * The components in braces correspond to the IDs for each resource in the\n     * hierarchy. It is expected that, if multiple patterns are provided,\n     * the same component name (e.g. \"project\") refers to IDs of the same\n     * type of resource.\n     *\n     * Generated from protobuf field <code>repeated string pattern = 2;</code>\n     */\n    private $pattern;\n    /**\n     * Optional. The field on the resource that designates the resource name\n     * field. If omitted, this is assumed to be \"name\".\n     *\n     * Generated from protobuf field <code>string name_field = 3;</code>\n     */\n    protected $name_field = '';\n    /**\n     * Optional. The historical or future-looking state of the resource pattern.\n     * Example:\n     *     // The InspectTemplate message originally only supported resource\n     *     // names with organization, and project was added later.\n     *     message InspectTemplate {\n     *       option (google.api.resource) = {\n     *         type: \"dlp.googleapis.com/InspectTemplate\"\n     *         pattern:\n     *         \"organizations/{organization}/inspectTemplates/{inspect_template}\"\n     *         pattern: \"projects/{project}/inspectTemplates/{inspect_template}\"\n     *         history: ORIGINALLY_SINGLE_PATTERN\n     *       };\n     *     }\n     *\n     * Generated from protobuf field <code>.google.api.ResourceDescriptor.History history = 4;</code>\n     */\n    protected $history = 0;\n    /**\n     * The plural name used in the resource name and permission names, such as\n     * 'projects' for the resource name of 'projects/{project}' and the permission\n     * name of 'cloudresourcemanager.googleapis.com/projects.get'. One exception\n     * to this is for Nested Collections that have stuttering names, as defined\n     * in [AIP-122](https://google.aip.dev/122#nested-collections), where the\n     * collection ID in the resource name pattern does not necessarily directly\n     * match the `plural` value.\n     * It is the same concept of the `plural` field in k8s CRD spec\n     * https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     * Note: The plural form is required even for singleton resources. See\n     * https://aip.dev/156\n     *\n     * Generated from protobuf field <code>string plural = 5;</code>\n     */\n    protected $plural = '';\n    /**\n     * The same concept of the `singular` field in k8s CRD spec\n     * https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     * Such as \"project\" for the `resourcemanager.googleapis.com/Project` type.\n     *\n     * Generated from protobuf field <code>string singular = 6;</code>\n     */\n    protected $singular = '';\n    /**\n     * Style flag(s) for this resource.\n     * These indicate that a resource is expected to conform to a given\n     * style. See the specific style flags for additional information.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ResourceDescriptor.Style style = 10;</code>\n     */\n    private $style;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type\n     *           The resource type. It must be in the format of\n     *           {service_name}/{resource_type_kind}. The `resource_type_kind` must be\n     *           singular and must not include version numbers.\n     *           Example: `storage.googleapis.com/Bucket`\n     *           The value of the resource_type_kind must follow the regular expression\n     *           /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and\n     *           should use PascalCase (UpperCamelCase). The maximum number of\n     *           characters allowed for the `resource_type_kind` is 100.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $pattern\n     *           Optional. The relative resource name pattern associated with this resource\n     *           type. The DNS prefix of the full resource name shouldn't be specified here.\n     *           The path pattern must follow the syntax, which aligns with HTTP binding\n     *           syntax:\n     *               Template = Segment { \"/\" Segment } ;\n     *               Segment = LITERAL | Variable ;\n     *               Variable = \"{\" LITERAL \"}\" ;\n     *           Examples:\n     *               - \"projects/{project}/topics/{topic}\"\n     *               - \"projects/{project}/knowledgeBases/{knowledge_base}\"\n     *           The components in braces correspond to the IDs for each resource in the\n     *           hierarchy. It is expected that, if multiple patterns are provided,\n     *           the same component name (e.g. \"project\") refers to IDs of the same\n     *           type of resource.\n     *     @type string $name_field\n     *           Optional. The field on the resource that designates the resource name\n     *           field. If omitted, this is assumed to be \"name\".\n     *     @type int $history\n     *           Optional. The historical or future-looking state of the resource pattern.\n     *           Example:\n     *               // The InspectTemplate message originally only supported resource\n     *               // names with organization, and project was added later.\n     *               message InspectTemplate {\n     *                 option (google.api.resource) = {\n     *                   type: \"dlp.googleapis.com/InspectTemplate\"\n     *                   pattern:\n     *                   \"organizations/{organization}/inspectTemplates/{inspect_template}\"\n     *                   pattern: \"projects/{project}/inspectTemplates/{inspect_template}\"\n     *                   history: ORIGINALLY_SINGLE_PATTERN\n     *                 };\n     *               }\n     *     @type string $plural\n     *           The plural name used in the resource name and permission names, such as\n     *           'projects' for the resource name of 'projects/{project}' and the permission\n     *           name of 'cloudresourcemanager.googleapis.com/projects.get'. One exception\n     *           to this is for Nested Collections that have stuttering names, as defined\n     *           in [AIP-122](https://google.aip.dev/122#nested-collections), where the\n     *           collection ID in the resource name pattern does not necessarily directly\n     *           match the `plural` value.\n     *           It is the same concept of the `plural` field in k8s CRD spec\n     *           https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     *           Note: The plural form is required even for singleton resources. See\n     *           https://aip.dev/156\n     *     @type string $singular\n     *           The same concept of the `singular` field in k8s CRD spec\n     *           https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     *           Such as \"project\" for the `resourcemanager.googleapis.com/Project` type.\n     *     @type array<int>|\\Google\\Protobuf\\Internal\\RepeatedField $style\n     *           Style flag(s) for this resource.\n     *           These indicate that a resource is expected to conform to a given\n     *           style. See the specific style flags for additional information.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Resource::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The resource type. It must be in the format of\n     * {service_name}/{resource_type_kind}. The `resource_type_kind` must be\n     * singular and must not include version numbers.\n     * Example: `storage.googleapis.com/Bucket`\n     * The value of the resource_type_kind must follow the regular expression\n     * /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and\n     * should use PascalCase (UpperCamelCase). The maximum number of\n     * characters allowed for the `resource_type_kind` is 100.\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * The resource type. It must be in the format of\n     * {service_name}/{resource_type_kind}. The `resource_type_kind` must be\n     * singular and must not include version numbers.\n     * Example: `storage.googleapis.com/Bucket`\n     * The value of the resource_type_kind must follow the regular expression\n     * /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and\n     * should use PascalCase (UpperCamelCase). The maximum number of\n     * characters allowed for the `resource_type_kind` is 100.\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The relative resource name pattern associated with this resource\n     * type. The DNS prefix of the full resource name shouldn't be specified here.\n     * The path pattern must follow the syntax, which aligns with HTTP binding\n     * syntax:\n     *     Template = Segment { \"/\" Segment } ;\n     *     Segment = LITERAL | Variable ;\n     *     Variable = \"{\" LITERAL \"}\" ;\n     * Examples:\n     *     - \"projects/{project}/topics/{topic}\"\n     *     - \"projects/{project}/knowledgeBases/{knowledge_base}\"\n     * The components in braces correspond to the IDs for each resource in the\n     * hierarchy. It is expected that, if multiple patterns are provided,\n     * the same component name (e.g. \"project\") refers to IDs of the same\n     * type of resource.\n     *\n     * Generated from protobuf field <code>repeated string pattern = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getPattern()\n    {\n        return $this->pattern;\n    }\n\n    /**\n     * Optional. The relative resource name pattern associated with this resource\n     * type. The DNS prefix of the full resource name shouldn't be specified here.\n     * The path pattern must follow the syntax, which aligns with HTTP binding\n     * syntax:\n     *     Template = Segment { \"/\" Segment } ;\n     *     Segment = LITERAL | Variable ;\n     *     Variable = \"{\" LITERAL \"}\" ;\n     * Examples:\n     *     - \"projects/{project}/topics/{topic}\"\n     *     - \"projects/{project}/knowledgeBases/{knowledge_base}\"\n     * The components in braces correspond to the IDs for each resource in the\n     * hierarchy. It is expected that, if multiple patterns are provided,\n     * the same component name (e.g. \"project\") refers to IDs of the same\n     * type of resource.\n     *\n     * Generated from protobuf field <code>repeated string pattern = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setPattern($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->pattern = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The field on the resource that designates the resource name\n     * field. If omitted, this is assumed to be \"name\".\n     *\n     * Generated from protobuf field <code>string name_field = 3;</code>\n     * @return string\n     */\n    public function getNameField()\n    {\n        return $this->name_field;\n    }\n\n    /**\n     * Optional. The field on the resource that designates the resource name\n     * field. If omitted, this is assumed to be \"name\".\n     *\n     * Generated from protobuf field <code>string name_field = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNameField($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name_field = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The historical or future-looking state of the resource pattern.\n     * Example:\n     *     // The InspectTemplate message originally only supported resource\n     *     // names with organization, and project was added later.\n     *     message InspectTemplate {\n     *       option (google.api.resource) = {\n     *         type: \"dlp.googleapis.com/InspectTemplate\"\n     *         pattern:\n     *         \"organizations/{organization}/inspectTemplates/{inspect_template}\"\n     *         pattern: \"projects/{project}/inspectTemplates/{inspect_template}\"\n     *         history: ORIGINALLY_SINGLE_PATTERN\n     *       };\n     *     }\n     *\n     * Generated from protobuf field <code>.google.api.ResourceDescriptor.History history = 4;</code>\n     * @return int\n     */\n    public function getHistory()\n    {\n        return $this->history;\n    }\n\n    /**\n     * Optional. The historical or future-looking state of the resource pattern.\n     * Example:\n     *     // The InspectTemplate message originally only supported resource\n     *     // names with organization, and project was added later.\n     *     message InspectTemplate {\n     *       option (google.api.resource) = {\n     *         type: \"dlp.googleapis.com/InspectTemplate\"\n     *         pattern:\n     *         \"organizations/{organization}/inspectTemplates/{inspect_template}\"\n     *         pattern: \"projects/{project}/inspectTemplates/{inspect_template}\"\n     *         history: ORIGINALLY_SINGLE_PATTERN\n     *       };\n     *     }\n     *\n     * Generated from protobuf field <code>.google.api.ResourceDescriptor.History history = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setHistory($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Api\\ResourceDescriptor\\History::class);\n        $this->history = $var;\n\n        return $this;\n    }\n\n    /**\n     * The plural name used in the resource name and permission names, such as\n     * 'projects' for the resource name of 'projects/{project}' and the permission\n     * name of 'cloudresourcemanager.googleapis.com/projects.get'. One exception\n     * to this is for Nested Collections that have stuttering names, as defined\n     * in [AIP-122](https://google.aip.dev/122#nested-collections), where the\n     * collection ID in the resource name pattern does not necessarily directly\n     * match the `plural` value.\n     * It is the same concept of the `plural` field in k8s CRD spec\n     * https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     * Note: The plural form is required even for singleton resources. See\n     * https://aip.dev/156\n     *\n     * Generated from protobuf field <code>string plural = 5;</code>\n     * @return string\n     */\n    public function getPlural()\n    {\n        return $this->plural;\n    }\n\n    /**\n     * The plural name used in the resource name and permission names, such as\n     * 'projects' for the resource name of 'projects/{project}' and the permission\n     * name of 'cloudresourcemanager.googleapis.com/projects.get'. One exception\n     * to this is for Nested Collections that have stuttering names, as defined\n     * in [AIP-122](https://google.aip.dev/122#nested-collections), where the\n     * collection ID in the resource name pattern does not necessarily directly\n     * match the `plural` value.\n     * It is the same concept of the `plural` field in k8s CRD spec\n     * https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     * Note: The plural form is required even for singleton resources. See\n     * https://aip.dev/156\n     *\n     * Generated from protobuf field <code>string plural = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPlural($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->plural = $var;\n\n        return $this;\n    }\n\n    /**\n     * The same concept of the `singular` field in k8s CRD spec\n     * https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     * Such as \"project\" for the `resourcemanager.googleapis.com/Project` type.\n     *\n     * Generated from protobuf field <code>string singular = 6;</code>\n     * @return string\n     */\n    public function getSingular()\n    {\n        return $this->singular;\n    }\n\n    /**\n     * The same concept of the `singular` field in k8s CRD spec\n     * https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/\n     * Such as \"project\" for the `resourcemanager.googleapis.com/Project` type.\n     *\n     * Generated from protobuf field <code>string singular = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSingular($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->singular = $var;\n\n        return $this;\n    }\n\n    /**\n     * Style flag(s) for this resource.\n     * These indicate that a resource is expected to conform to a given\n     * style. See the specific style flags for additional information.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ResourceDescriptor.Style style = 10;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getStyle()\n    {\n        return $this->style;\n    }\n\n    /**\n     * Style flag(s) for this resource.\n     * These indicate that a resource is expected to conform to a given\n     * style. See the specific style flags for additional information.\n     *\n     * Generated from protobuf field <code>repeated .google.api.ResourceDescriptor.Style style = 10;</code>\n     * @param array<int>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setStyle($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::ENUM, \\Google\\Api\\ResourceDescriptor\\Style::class);\n        $this->style = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/ResourceReference.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/resource.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Defines a proto annotation that describes a string field that refers to\n * an API resource.\n *\n * Generated from protobuf message <code>google.api.ResourceReference</code>\n */\nclass ResourceReference extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The resource type that the annotated field references.\n     * Example:\n     *     message Subscription {\n     *       string topic = 2 [(google.api.resource_reference) = {\n     *         type: \"pubsub.googleapis.com/Topic\"\n     *       }];\n     *     }\n     * Occasionally, a field may reference an arbitrary resource. In this case,\n     * APIs use the special value * in their resource reference.\n     * Example:\n     *     message GetIamPolicyRequest {\n     *       string resource = 2 [(google.api.resource_reference) = {\n     *         type: \"*\"\n     *       }];\n     *     }\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     */\n    protected $type = '';\n    /**\n     * The resource type of a child collection that the annotated field\n     * references. This is useful for annotating the `parent` field that\n     * doesn't have a fixed resource type.\n     * Example:\n     *     message ListLogEntriesRequest {\n     *       string parent = 1 [(google.api.resource_reference) = {\n     *         child_type: \"logging.googleapis.com/LogEntry\"\n     *       };\n     *     }\n     *\n     * Generated from protobuf field <code>string child_type = 2;</code>\n     */\n    protected $child_type = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type\n     *           The resource type that the annotated field references.\n     *           Example:\n     *               message Subscription {\n     *                 string topic = 2 [(google.api.resource_reference) = {\n     *                   type: \"pubsub.googleapis.com/Topic\"\n     *                 }];\n     *               }\n     *           Occasionally, a field may reference an arbitrary resource. In this case,\n     *           APIs use the special value * in their resource reference.\n     *           Example:\n     *               message GetIamPolicyRequest {\n     *                 string resource = 2 [(google.api.resource_reference) = {\n     *                   type: \"*\"\n     *                 }];\n     *               }\n     *     @type string $child_type\n     *           The resource type of a child collection that the annotated field\n     *           references. This is useful for annotating the `parent` field that\n     *           doesn't have a fixed resource type.\n     *           Example:\n     *               message ListLogEntriesRequest {\n     *                 string parent = 1 [(google.api.resource_reference) = {\n     *                   child_type: \"logging.googleapis.com/LogEntry\"\n     *                 };\n     *               }\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Resource::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The resource type that the annotated field references.\n     * Example:\n     *     message Subscription {\n     *       string topic = 2 [(google.api.resource_reference) = {\n     *         type: \"pubsub.googleapis.com/Topic\"\n     *       }];\n     *     }\n     * Occasionally, a field may reference an arbitrary resource. In this case,\n     * APIs use the special value * in their resource reference.\n     * Example:\n     *     message GetIamPolicyRequest {\n     *       string resource = 2 [(google.api.resource_reference) = {\n     *         type: \"*\"\n     *       }];\n     *     }\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * The resource type that the annotated field references.\n     * Example:\n     *     message Subscription {\n     *       string topic = 2 [(google.api.resource_reference) = {\n     *         type: \"pubsub.googleapis.com/Topic\"\n     *       }];\n     *     }\n     * Occasionally, a field may reference an arbitrary resource. In this case,\n     * APIs use the special value * in their resource reference.\n     * Example:\n     *     message GetIamPolicyRequest {\n     *       string resource = 2 [(google.api.resource_reference) = {\n     *         type: \"*\"\n     *       }];\n     *     }\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The resource type of a child collection that the annotated field\n     * references. This is useful for annotating the `parent` field that\n     * doesn't have a fixed resource type.\n     * Example:\n     *     message ListLogEntriesRequest {\n     *       string parent = 1 [(google.api.resource_reference) = {\n     *         child_type: \"logging.googleapis.com/LogEntry\"\n     *       };\n     *     }\n     *\n     * Generated from protobuf field <code>string child_type = 2;</code>\n     * @return string\n     */\n    public function getChildType()\n    {\n        return $this->child_type;\n    }\n\n    /**\n     * The resource type of a child collection that the annotated field\n     * references. This is useful for annotating the `parent` field that\n     * doesn't have a fixed resource type.\n     * Example:\n     *     message ListLogEntriesRequest {\n     *       string parent = 1 [(google.api.resource_reference) = {\n     *         child_type: \"logging.googleapis.com/LogEntry\"\n     *       };\n     *     }\n     *\n     * Generated from protobuf field <code>string child_type = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setChildType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->child_type = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/RoutingParameter.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/routing.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A projection from an input message to the GRPC or REST header.\n *\n * Generated from protobuf message <code>google.api.RoutingParameter</code>\n */\nclass RoutingParameter extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A request field to extract the header key-value pair from.\n     *\n     * Generated from protobuf field <code>string field = 1;</code>\n     */\n    protected $field = '';\n    /**\n     * A pattern matching the key-value field. Optional.\n     * If not specified, the whole field specified in the `field` field will be\n     * taken as value, and its name used as key. If specified, it MUST contain\n     * exactly one named segment (along with any number of unnamed segments) The\n     * pattern will be matched over the field specified in the `field` field, then\n     * if the match is successful:\n     * - the name of the single named segment will be used as a header name,\n     * - the match value of the segment will be used as a header value;\n     * if the match is NOT successful, nothing will be sent.\n     * Example:\n     *               -- This is a field in the request message\n     *              |   that the header value will be extracted from.\n     *              |\n     *              |                     -- This is the key name in the\n     *              |                    |   routing header.\n     *              V                    |\n     *     field: \"table_name\"           v\n     *     path_template: \"projects/&#42;&#47;{table_location=instances/&#42;}/tables/&#42;\"\n     *                                                ^            ^\n     *                                                |            |\n     *       In the {} brackets is the pattern that --             |\n     *       specifies what to extract from the                    |\n     *       field as a value to be sent.                          |\n     *                                                             |\n     *      The string in the field must match the whole pattern --\n     *      before brackets, inside brackets, after brackets.\n     * When looking at this specific example, we can see that:\n     * - A key-value pair with the key `table_location`\n     *   and the value matching `instances/&#42;` should be added\n     *   to the x-goog-request-params routing header.\n     * - The value is extracted from the request message's `table_name` field\n     *   if it matches the full pattern specified:\n     *   `projects/&#42;&#47;instances/&#42;&#47;tables/&#42;`.\n     * **NB:** If the `path_template` field is not provided, the key name is\n     * equal to the field name, and the whole field should be sent as a value.\n     * This makes the pattern for the field and the value functionally equivalent\n     * to `**`, and the configuration\n     *     {\n     *       field: \"table_name\"\n     *     }\n     * is a functionally equivalent shorthand to:\n     *     {\n     *       field: \"table_name\"\n     *       path_template: \"{table_name=**}\"\n     *     }\n     * See Example 1 for more details.\n     *\n     * Generated from protobuf field <code>string path_template = 2;</code>\n     */\n    protected $path_template = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $field\n     *           A request field to extract the header key-value pair from.\n     *     @type string $path_template\n     *           A pattern matching the key-value field. Optional.\n     *           If not specified, the whole field specified in the `field` field will be\n     *           taken as value, and its name used as key. If specified, it MUST contain\n     *           exactly one named segment (along with any number of unnamed segments) The\n     *           pattern will be matched over the field specified in the `field` field, then\n     *           if the match is successful:\n     *           - the name of the single named segment will be used as a header name,\n     *           - the match value of the segment will be used as a header value;\n     *           if the match is NOT successful, nothing will be sent.\n     *           Example:\n     *                         -- This is a field in the request message\n     *                        |   that the header value will be extracted from.\n     *                        |\n     *                        |                     -- This is the key name in the\n     *                        |                    |   routing header.\n     *                        V                    |\n     *               field: \"table_name\"           v\n     *               path_template: \"projects/&#42;&#47;{table_location=instances/&#42;}/tables/&#42;\"\n     *                                                          ^            ^\n     *                                                          |            |\n     *                 In the {} brackets is the pattern that --             |\n     *                 specifies what to extract from the                    |\n     *                 field as a value to be sent.                          |\n     *                                                                       |\n     *                The string in the field must match the whole pattern --\n     *                before brackets, inside brackets, after brackets.\n     *           When looking at this specific example, we can see that:\n     *           - A key-value pair with the key `table_location`\n     *             and the value matching `instances/&#42;` should be added\n     *             to the x-goog-request-params routing header.\n     *           - The value is extracted from the request message's `table_name` field\n     *             if it matches the full pattern specified:\n     *             `projects/&#42;&#47;instances/&#42;&#47;tables/&#42;`.\n     *           **NB:** If the `path_template` field is not provided, the key name is\n     *           equal to the field name, and the whole field should be sent as a value.\n     *           This makes the pattern for the field and the value functionally equivalent\n     *           to `**`, and the configuration\n     *               {\n     *                 field: \"table_name\"\n     *               }\n     *           is a functionally equivalent shorthand to:\n     *               {\n     *                 field: \"table_name\"\n     *                 path_template: \"{table_name=**}\"\n     *               }\n     *           See Example 1 for more details.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Routing::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A request field to extract the header key-value pair from.\n     *\n     * Generated from protobuf field <code>string field = 1;</code>\n     * @return string\n     */\n    public function getField()\n    {\n        return $this->field;\n    }\n\n    /**\n     * A request field to extract the header key-value pair from.\n     *\n     * Generated from protobuf field <code>string field = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setField($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->field = $var;\n\n        return $this;\n    }\n\n    /**\n     * A pattern matching the key-value field. Optional.\n     * If not specified, the whole field specified in the `field` field will be\n     * taken as value, and its name used as key. If specified, it MUST contain\n     * exactly one named segment (along with any number of unnamed segments) The\n     * pattern will be matched over the field specified in the `field` field, then\n     * if the match is successful:\n     * - the name of the single named segment will be used as a header name,\n     * - the match value of the segment will be used as a header value;\n     * if the match is NOT successful, nothing will be sent.\n     * Example:\n     *               -- This is a field in the request message\n     *              |   that the header value will be extracted from.\n     *              |\n     *              |                     -- This is the key name in the\n     *              |                    |   routing header.\n     *              V                    |\n     *     field: \"table_name\"           v\n     *     path_template: \"projects/&#42;&#47;{table_location=instances/&#42;}/tables/&#42;\"\n     *                                                ^            ^\n     *                                                |            |\n     *       In the {} brackets is the pattern that --             |\n     *       specifies what to extract from the                    |\n     *       field as a value to be sent.                          |\n     *                                                             |\n     *      The string in the field must match the whole pattern --\n     *      before brackets, inside brackets, after brackets.\n     * When looking at this specific example, we can see that:\n     * - A key-value pair with the key `table_location`\n     *   and the value matching `instances/&#42;` should be added\n     *   to the x-goog-request-params routing header.\n     * - The value is extracted from the request message's `table_name` field\n     *   if it matches the full pattern specified:\n     *   `projects/&#42;&#47;instances/&#42;&#47;tables/&#42;`.\n     * **NB:** If the `path_template` field is not provided, the key name is\n     * equal to the field name, and the whole field should be sent as a value.\n     * This makes the pattern for the field and the value functionally equivalent\n     * to `**`, and the configuration\n     *     {\n     *       field: \"table_name\"\n     *     }\n     * is a functionally equivalent shorthand to:\n     *     {\n     *       field: \"table_name\"\n     *       path_template: \"{table_name=**}\"\n     *     }\n     * See Example 1 for more details.\n     *\n     * Generated from protobuf field <code>string path_template = 2;</code>\n     * @return string\n     */\n    public function getPathTemplate()\n    {\n        return $this->path_template;\n    }\n\n    /**\n     * A pattern matching the key-value field. Optional.\n     * If not specified, the whole field specified in the `field` field will be\n     * taken as value, and its name used as key. If specified, it MUST contain\n     * exactly one named segment (along with any number of unnamed segments) The\n     * pattern will be matched over the field specified in the `field` field, then\n     * if the match is successful:\n     * - the name of the single named segment will be used as a header name,\n     * - the match value of the segment will be used as a header value;\n     * if the match is NOT successful, nothing will be sent.\n     * Example:\n     *               -- This is a field in the request message\n     *              |   that the header value will be extracted from.\n     *              |\n     *              |                     -- This is the key name in the\n     *              |                    |   routing header.\n     *              V                    |\n     *     field: \"table_name\"           v\n     *     path_template: \"projects/&#42;&#47;{table_location=instances/&#42;}/tables/&#42;\"\n     *                                                ^            ^\n     *                                                |            |\n     *       In the {} brackets is the pattern that --             |\n     *       specifies what to extract from the                    |\n     *       field as a value to be sent.                          |\n     *                                                             |\n     *      The string in the field must match the whole pattern --\n     *      before brackets, inside brackets, after brackets.\n     * When looking at this specific example, we can see that:\n     * - A key-value pair with the key `table_location`\n     *   and the value matching `instances/&#42;` should be added\n     *   to the x-goog-request-params routing header.\n     * - The value is extracted from the request message's `table_name` field\n     *   if it matches the full pattern specified:\n     *   `projects/&#42;&#47;instances/&#42;&#47;tables/&#42;`.\n     * **NB:** If the `path_template` field is not provided, the key name is\n     * equal to the field name, and the whole field should be sent as a value.\n     * This makes the pattern for the field and the value functionally equivalent\n     * to `**`, and the configuration\n     *     {\n     *       field: \"table_name\"\n     *     }\n     * is a functionally equivalent shorthand to:\n     *     {\n     *       field: \"table_name\"\n     *       path_template: \"{table_name=**}\"\n     *     }\n     * See Example 1 for more details.\n     *\n     * Generated from protobuf field <code>string path_template = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPathTemplate($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->path_template = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/RoutingRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/routing.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Specifies the routing information that should be sent along with the request\n * in the form of routing header.\n * **NOTE:** All service configuration rules follow the \"last one wins\" order.\n * The examples below will apply to an RPC which has the following request type:\n * Message Definition:\n *     message Request {\n *       // The name of the Table\n *       // Values can be of the following formats:\n *       // - `projects/<project>/tables/<table>`\n *       // - `projects/<project>/instances/<instance>/tables/<table>`\n *       // - `region/<region>/zones/<zone>/tables/<table>`\n *       string table_name = 1;\n *       // This value specifies routing for replication.\n *       // It can be in the following formats:\n *       // - `profiles/<profile_id>`\n *       // - a legacy `profile_id` that can be any string\n *       string app_profile_id = 2;\n *     }\n * Example message:\n *     {\n *       table_name: projects/proj_foo/instances/instance_bar/table/table_baz,\n *       app_profile_id: profiles/prof_qux\n *     }\n * The routing header consists of one or multiple key-value pairs. Every key\n * and value must be percent-encoded, and joined together in the format of\n * `key1=value1&key2=value2`.\n * The examples below skip the percent-encoding for readability.\n * Example 1\n * Extracting a field from the request to put into the routing header\n * unchanged, with the key equal to the field name.\n * annotation:\n *     option (google.api.routing) = {\n *       // Take the `app_profile_id`.\n *       routing_parameters {\n *         field: \"app_profile_id\"\n *       }\n *     };\n * result:\n *     x-goog-request-params: app_profile_id=profiles/prof_qux\n * Example 2\n * Extracting a field from the request to put into the routing header\n * unchanged, with the key different from the field name.\n * annotation:\n *     option (google.api.routing) = {\n *       // Take the `app_profile_id`, but name it `routing_id` in the header.\n *       routing_parameters {\n *         field: \"app_profile_id\"\n *         path_template: \"{routing_id=**}\"\n *       }\n *     };\n * result:\n *     x-goog-request-params: routing_id=profiles/prof_qux\n * Example 3\n * Extracting a field from the request to put into the routing\n * header, while matching a path template syntax on the field's value.\n * NB: it is more useful to send nothing than to send garbage for the purpose\n * of dynamic routing, since garbage pollutes cache. Thus the matching.\n * Sub-example 3a\n * The field matches the template.\n * annotation:\n *     option (google.api.routing) = {\n *       // Take the `table_name`, if it's well-formed (with project-based\n *       // syntax).\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{table_name=projects/&#42;&#47;instances/&#42;&#47;&#42;*}\"\n *       }\n *     };\n * result:\n *     x-goog-request-params:\n *     table_name=projects/proj_foo/instances/instance_bar/table/table_baz\n * Sub-example 3b\n * The field does not match the template.\n * annotation:\n *     option (google.api.routing) = {\n *       // Take the `table_name`, if it's well-formed (with region-based\n *       // syntax).\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{table_name=regions/&#42;&#47;zones/&#42;&#47;&#42;*}\"\n *       }\n *     };\n * result:\n *     <no routing header will be sent>\n * Sub-example 3c\n * Multiple alternative conflictingly named path templates are\n * specified. The one that matches is used to construct the header.\n * annotation:\n *     option (google.api.routing) = {\n *       // Take the `table_name`, if it's well-formed, whether\n *       // using the region- or projects-based syntax.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{table_name=regions/&#42;&#47;zones/&#42;&#47;&#42;*}\"\n *       }\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{table_name=projects/&#42;&#47;instances/&#42;&#47;&#42;*}\"\n *       }\n *     };\n * result:\n *     x-goog-request-params:\n *     table_name=projects/proj_foo/instances/instance_bar/table/table_baz\n * Example 4\n * Extracting a single routing header key-value pair by matching a\n * template syntax on (a part of) a single request field.\n * annotation:\n *     option (google.api.routing) = {\n *       // Take just the project id from the `table_name` field.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{routing_id=projects/&#42;}/&#42;*\"\n *       }\n *     };\n * result:\n *     x-goog-request-params: routing_id=projects/proj_foo\n * Example 5\n * Extracting a single routing header key-value pair by matching\n * several conflictingly named path templates on (parts of) a single request\n * field. The last template to match \"wins\" the conflict.\n * annotation:\n *     option (google.api.routing) = {\n *       // If the `table_name` does not have instances information,\n *       // take just the project id for routing.\n *       // Otherwise take project + instance.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{routing_id=projects/&#42;}/&#42;*\"\n *       }\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{routing_id=projects/&#42;&#47;instances/&#42;}/&#42;*\"\n *       }\n *     };\n * result:\n *     x-goog-request-params:\n *     routing_id=projects/proj_foo/instances/instance_bar\n * Example 6\n * Extracting multiple routing header key-value pairs by matching\n * several non-conflicting path templates on (parts of) a single request field.\n * Sub-example 6a\n * Make the templates strict, so that if the `table_name` does not\n * have an instance information, nothing is sent.\n * annotation:\n *     option (google.api.routing) = {\n *       // The routing code needs two keys instead of one composite\n *       // but works only for the tables with the \"project-instance\" name\n *       // syntax.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{project_id=projects/&#42;}/instances/&#42;&#47;&#42;*\"\n *       }\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"projects/&#42;&#47;{instance_id=instances/&#42;}/&#42;*\"\n *       }\n *     };\n * result:\n *     x-goog-request-params:\n *     project_id=projects/proj_foo&instance_id=instances/instance_bar\n * Sub-example 6b\n * Make the templates loose, so that if the `table_name` does not\n * have an instance information, just the project id part is sent.\n * annotation:\n *     option (google.api.routing) = {\n *       // The routing code wants two keys instead of one composite\n *       // but will work with just the `project_id` for tables without\n *       // an instance in the `table_name`.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{project_id=projects/&#42;}/&#42;*\"\n *       }\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"projects/&#42;&#47;{instance_id=instances/&#42;}/&#42;*\"\n *       }\n *     };\n * result (is the same as 6a for our example message because it has the instance\n * information):\n *     x-goog-request-params:\n *     project_id=projects/proj_foo&instance_id=instances/instance_bar\n * Example 7\n * Extracting multiple routing header key-value pairs by matching\n * several path templates on multiple request fields.\n * NB: note that here there is no way to specify sending nothing if one of the\n * fields does not match its template. E.g. if the `table_name` is in the wrong\n * format, the `project_id` will not be sent, but the `routing_id` will be.\n * The backend routing code has to be aware of that and be prepared to not\n * receive a full complement of keys if it expects multiple.\n * annotation:\n *     option (google.api.routing) = {\n *       // The routing needs both `project_id` and `routing_id`\n *       // (from the `app_profile_id` field) for routing.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{project_id=projects/&#42;}/&#42;*\"\n *       }\n *       routing_parameters {\n *         field: \"app_profile_id\"\n *         path_template: \"{routing_id=**}\"\n *       }\n *     };\n * result:\n *     x-goog-request-params:\n *     project_id=projects/proj_foo&routing_id=profiles/prof_qux\n * Example 8\n * Extracting a single routing header key-value pair by matching\n * several conflictingly named path templates on several request fields. The\n * last template to match \"wins\" the conflict.\n * annotation:\n *     option (google.api.routing) = {\n *       // The `routing_id` can be a project id or a region id depending on\n *       // the table name format, but only if the `app_profile_id` is not set.\n *       // If `app_profile_id` is set it should be used instead.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{routing_id=projects/&#42;}/&#42;*\"\n *       }\n *       routing_parameters {\n *          field: \"table_name\"\n *          path_template: \"{routing_id=regions/&#42;}/&#42;*\"\n *       }\n *       routing_parameters {\n *         field: \"app_profile_id\"\n *         path_template: \"{routing_id=**}\"\n *       }\n *     };\n * result:\n *     x-goog-request-params: routing_id=profiles/prof_qux\n * Example 9\n * Bringing it all together.\n * annotation:\n *     option (google.api.routing) = {\n *       // For routing both `table_location` and a `routing_id` are needed.\n *       //\n *       // table_location can be either an instance id or a region+zone id.\n *       //\n *       // For `routing_id`, take the value of `app_profile_id`\n *       // - If it's in the format `profiles/<profile_id>`, send\n *       // just the `<profile_id>` part.\n *       // - If it's any other literal, send it as is.\n *       // If the `app_profile_id` is empty, and the `table_name` starts with\n *       // the project_id, send that instead.\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"projects/&#42;&#47;{table_location=instances/&#42;}/tables/&#42;\"\n *       }\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{table_location=regions/&#42;&#47;zones/&#42;}/tables/&#42;\"\n *       }\n *       routing_parameters {\n *         field: \"table_name\"\n *         path_template: \"{routing_id=projects/&#42;}/&#42;*\"\n *       }\n *       routing_parameters {\n *         field: \"app_profile_id\"\n *         path_template: \"{routing_id=**}\"\n *       }\n *       routing_parameters {\n *         field: \"app_profile_id\"\n *         path_template: \"profiles/{routing_id=*}\"\n *       }\n *     };\n * result:\n *     x-goog-request-params:\n *     table_location=instances/instance_bar&routing_id=prof_qux\n *\n * Generated from protobuf message <code>google.api.RoutingRule</code>\n */\nclass RoutingRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A collection of Routing Parameter specifications.\n     * **NOTE:** If multiple Routing Parameters describe the same key\n     * (via the `path_template` field or via the `field` field when\n     * `path_template` is not provided), \"last one wins\" rule\n     * determines which Parameter gets used.\n     * See the examples for more details.\n     *\n     * Generated from protobuf field <code>repeated .google.api.RoutingParameter routing_parameters = 2;</code>\n     */\n    private $routing_parameters;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\RoutingParameter>|\\Google\\Protobuf\\Internal\\RepeatedField $routing_parameters\n     *           A collection of Routing Parameter specifications.\n     *           **NOTE:** If multiple Routing Parameters describe the same key\n     *           (via the `path_template` field or via the `field` field when\n     *           `path_template` is not provided), \"last one wins\" rule\n     *           determines which Parameter gets used.\n     *           See the examples for more details.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Routing::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A collection of Routing Parameter specifications.\n     * **NOTE:** If multiple Routing Parameters describe the same key\n     * (via the `path_template` field or via the `field` field when\n     * `path_template` is not provided), \"last one wins\" rule\n     * determines which Parameter gets used.\n     * See the examples for more details.\n     *\n     * Generated from protobuf field <code>repeated .google.api.RoutingParameter routing_parameters = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRoutingParameters()\n    {\n        return $this->routing_parameters;\n    }\n\n    /**\n     * A collection of Routing Parameter specifications.\n     * **NOTE:** If multiple Routing Parameters describe the same key\n     * (via the `path_template` field or via the `field` field when\n     * `path_template` is not provided), \"last one wins\" rule\n     * determines which Parameter gets used.\n     * See the examples for more details.\n     *\n     * Generated from protobuf field <code>repeated .google.api.RoutingParameter routing_parameters = 2;</code>\n     * @param array<\\Google\\Api\\RoutingParameter>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRoutingParameters($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\RoutingParameter::class);\n        $this->routing_parameters = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/RubySettings.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Settings for Ruby client libraries.\n *\n * Generated from protobuf message <code>google.api.RubySettings</code>\n */\nclass RubySettings extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     */\n    protected $common = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Api\\CommonLanguageSettings $common\n     *           Some settings.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @return \\Google\\Api\\CommonLanguageSettings|null\n     */\n    public function getCommon()\n    {\n        return $this->common;\n    }\n\n    public function hasCommon()\n    {\n        return isset($this->common);\n    }\n\n    public function clearCommon()\n    {\n        unset($this->common);\n    }\n\n    /**\n     * Some settings.\n     *\n     * Generated from protobuf field <code>.google.api.CommonLanguageSettings common = 1;</code>\n     * @param \\Google\\Api\\CommonLanguageSettings $var\n     * @return $this\n     */\n    public function setCommon($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\CommonLanguageSettings::class);\n        $this->common = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/SelectiveGapicGeneration.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/client.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * Generated from protobuf message <code>google.api.SelectiveGapicGeneration</code>\n */\nclass SelectiveGapicGeneration extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * An allowlist of the fully qualified names of RPCs that should be included\n     * on public client surfaces.\n     *\n     * Generated from protobuf field <code>repeated string methods = 1;</code>\n     */\n    private $methods;\n    /**\n     * Setting this to true indicates to the client generators that methods\n     * that would be excluded from the generation should instead be generated\n     * in a way that indicates these methods should not be consumed by\n     * end users. How this is expressed is up to individual language\n     * implementations to decide. Some examples may be: added annotations,\n     * obfuscated identifiers, or other language idiomatic patterns.\n     *\n     * Generated from protobuf field <code>bool generate_omitted_as_internal = 2;</code>\n     */\n    protected $generate_omitted_as_internal = false;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $methods\n     *           An allowlist of the fully qualified names of RPCs that should be included\n     *           on public client surfaces.\n     *     @type bool $generate_omitted_as_internal\n     *           Setting this to true indicates to the client generators that methods\n     *           that would be excluded from the generation should instead be generated\n     *           in a way that indicates these methods should not be consumed by\n     *           end users. How this is expressed is up to individual language\n     *           implementations to decide. Some examples may be: added annotations,\n     *           obfuscated identifiers, or other language idiomatic patterns.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Client::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * An allowlist of the fully qualified names of RPCs that should be included\n     * on public client surfaces.\n     *\n     * Generated from protobuf field <code>repeated string methods = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMethods()\n    {\n        return $this->methods;\n    }\n\n    /**\n     * An allowlist of the fully qualified names of RPCs that should be included\n     * on public client surfaces.\n     *\n     * Generated from protobuf field <code>repeated string methods = 1;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMethods($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->methods = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Setting this to true indicates to the client generators that methods\n     * that would be excluded from the generation should instead be generated\n     * in a way that indicates these methods should not be consumed by\n     * end users. How this is expressed is up to individual language\n     * implementations to decide. Some examples may be: added annotations,\n     * obfuscated identifiers, or other language idiomatic patterns.\n     *\n     * Generated from protobuf field <code>bool generate_omitted_as_internal = 2;</code>\n     * @return bool\n     */\n    public function getGenerateOmittedAsInternal()\n    {\n        return $this->generate_omitted_as_internal;\n    }\n\n    /**\n     * Setting this to true indicates to the client generators that methods\n     * that would be excluded from the generation should instead be generated\n     * in a way that indicates these methods should not be consumed by\n     * end users. How this is expressed is up to individual language\n     * implementations to decide. Some examples may be: added annotations,\n     * obfuscated identifiers, or other language idiomatic patterns.\n     *\n     * Generated from protobuf field <code>bool generate_omitted_as_internal = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setGenerateOmittedAsInternal($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->generate_omitted_as_internal = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Service.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/service.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Service` is the root object of Google API service configuration (service\n * config). It describes the basic information about a logical service,\n * such as the service name and the user-facing title, and delegates other\n * aspects to sub-sections. Each sub-section is either a proto message or a\n * repeated proto message that configures a specific aspect, such as auth.\n * For more information, see each proto message definition.\n * Example:\n *     type: google.api.Service\n *     name: calendar.googleapis.com\n *     title: Google Calendar API\n *     apis:\n *     - name: google.calendar.v3.Calendar\n *     visibility:\n *       rules:\n *       - selector: \"google.calendar.v3.*\"\n *         restriction: PREVIEW\n *     backend:\n *       rules:\n *       - selector: \"google.calendar.v3.*\"\n *         address: calendar.example.com\n *     authentication:\n *       providers:\n *       - id: google_calendar_auth\n *         jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n *         issuer: https://securetoken.google.com\n *       rules:\n *       - selector: \"*\"\n *         requirements:\n *           provider_id: google_calendar_auth\n *\n * Generated from protobuf message <code>google.api.Service</code>\n */\nclass Service extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The service name, which is a DNS-like logical identifier for the\n     * service, such as `calendar.googleapis.com`. The service name\n     * typically goes through DNS verification to make sure the owner\n     * of the service also owns the DNS name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The product title for this service, it is the name displayed in Google\n     * Cloud Console.\n     *\n     * Generated from protobuf field <code>string title = 2;</code>\n     */\n    protected $title = '';\n    /**\n     * The Google project that owns this service.\n     *\n     * Generated from protobuf field <code>string producer_project_id = 22;</code>\n     */\n    protected $producer_project_id = '';\n    /**\n     * A unique ID for a specific instance of this message, typically assigned\n     * by the client for tracking purpose. Must be no longer than 63 characters\n     * and only lower case letters, digits, '.', '_' and '-' are allowed. If\n     * empty, the server may choose to generate one instead.\n     *\n     * Generated from protobuf field <code>string id = 33;</code>\n     */\n    protected $id = '';\n    /**\n     * A list of API interfaces exported by this service. Only the `name` field\n     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by\n     * the configuration author, as the remaining fields will be derived from the\n     * IDL during the normalization process. It is an error to specify an API\n     * interface here which cannot be resolved against the associated IDL files.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Api apis = 3;</code>\n     */\n    private $apis;\n    /**\n     * A list of all proto message types included in this API service.\n     * Types referenced directly or indirectly by the `apis` are automatically\n     * included.  Messages which are not referenced but shall be included, such as\n     * types used by the `google.protobuf.Any` type, should be listed here by\n     * name by the configuration author. Example:\n     *     types:\n     *     - name: google.protobuf.Int32\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Type types = 4;</code>\n     */\n    private $types;\n    /**\n     * A list of all enum types included in this API service.  Enums referenced\n     * directly or indirectly by the `apis` are automatically included.  Enums\n     * which are not referenced but shall be included should be listed here by\n     * name by the configuration author. Example:\n     *     enums:\n     *     - name: google.someapi.v1.SomeEnum\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Enum enums = 5;</code>\n     */\n    private $enums;\n    /**\n     * Additional API documentation.\n     *\n     * Generated from protobuf field <code>.google.api.Documentation documentation = 6;</code>\n     */\n    protected $documentation = null;\n    /**\n     * API backend configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Backend backend = 8;</code>\n     */\n    protected $backend = null;\n    /**\n     * HTTP configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Http http = 9;</code>\n     */\n    protected $http = null;\n    /**\n     * Quota configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Quota quota = 10;</code>\n     */\n    protected $quota = null;\n    /**\n     * Auth configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Authentication authentication = 11;</code>\n     */\n    protected $authentication = null;\n    /**\n     * Context configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Context context = 12;</code>\n     */\n    protected $context = null;\n    /**\n     * Configuration controlling usage of this service.\n     *\n     * Generated from protobuf field <code>.google.api.Usage usage = 15;</code>\n     */\n    protected $usage = null;\n    /**\n     * Configuration for network endpoints.  If this is empty, then an endpoint\n     * with the same name as the service is automatically generated to service all\n     * defined APIs.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Endpoint endpoints = 18;</code>\n     */\n    private $endpoints;\n    /**\n     * Configuration for the service control plane.\n     *\n     * Generated from protobuf field <code>.google.api.Control control = 21;</code>\n     */\n    protected $control = null;\n    /**\n     * Defines the logs used by this service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LogDescriptor logs = 23;</code>\n     */\n    private $logs;\n    /**\n     * Defines the metrics used by this service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricDescriptor metrics = 24;</code>\n     */\n    private $metrics;\n    /**\n     * Defines the monitored resources used by this service. This is required\n     * by the [Service.monitoring][google.api.Service.monitoring] and\n     * [Service.logging][google.api.Service.logging] configurations.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>\n     */\n    private $monitored_resources;\n    /**\n     * Billing configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Billing billing = 26;</code>\n     */\n    protected $billing = null;\n    /**\n     * Logging configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Logging logging = 27;</code>\n     */\n    protected $logging = null;\n    /**\n     * Monitoring configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Monitoring monitoring = 28;</code>\n     */\n    protected $monitoring = null;\n    /**\n     * System parameter configuration.\n     *\n     * Generated from protobuf field <code>.google.api.SystemParameters system_parameters = 29;</code>\n     */\n    protected $system_parameters = null;\n    /**\n     * Output only. The source information for this configuration if available.\n     *\n     * Generated from protobuf field <code>.google.api.SourceInfo source_info = 37;</code>\n     */\n    protected $source_info = null;\n    /**\n     * Settings for [Google Cloud Client\n     * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n     * generated from APIs defined as protocol buffers.\n     *\n     * Generated from protobuf field <code>.google.api.Publishing publishing = 45;</code>\n     */\n    protected $publishing = null;\n    /**\n     * Obsolete. Do not use.\n     * This field has no semantic meaning. The service config compiler always\n     * sets this field to `3`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.UInt32Value config_version = 20;</code>\n     */\n    protected $config_version = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The service name, which is a DNS-like logical identifier for the\n     *           service, such as `calendar.googleapis.com`. The service name\n     *           typically goes through DNS verification to make sure the owner\n     *           of the service also owns the DNS name.\n     *     @type string $title\n     *           The product title for this service, it is the name displayed in Google\n     *           Cloud Console.\n     *     @type string $producer_project_id\n     *           The Google project that owns this service.\n     *     @type string $id\n     *           A unique ID for a specific instance of this message, typically assigned\n     *           by the client for tracking purpose. Must be no longer than 63 characters\n     *           and only lower case letters, digits, '.', '_' and '-' are allowed. If\n     *           empty, the server may choose to generate one instead.\n     *     @type array<\\Google\\Protobuf\\Api>|\\Google\\Protobuf\\Internal\\RepeatedField $apis\n     *           A list of API interfaces exported by this service. Only the `name` field\n     *           of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by\n     *           the configuration author, as the remaining fields will be derived from the\n     *           IDL during the normalization process. It is an error to specify an API\n     *           interface here which cannot be resolved against the associated IDL files.\n     *     @type array<\\Google\\Protobuf\\Type>|\\Google\\Protobuf\\Internal\\RepeatedField $types\n     *           A list of all proto message types included in this API service.\n     *           Types referenced directly or indirectly by the `apis` are automatically\n     *           included.  Messages which are not referenced but shall be included, such as\n     *           types used by the `google.protobuf.Any` type, should be listed here by\n     *           name by the configuration author. Example:\n     *               types:\n     *               - name: google.protobuf.Int32\n     *     @type array<\\Google\\Protobuf\\Enum>|\\Google\\Protobuf\\Internal\\RepeatedField $enums\n     *           A list of all enum types included in this API service.  Enums referenced\n     *           directly or indirectly by the `apis` are automatically included.  Enums\n     *           which are not referenced but shall be included should be listed here by\n     *           name by the configuration author. Example:\n     *               enums:\n     *               - name: google.someapi.v1.SomeEnum\n     *     @type \\Google\\Api\\Documentation $documentation\n     *           Additional API documentation.\n     *     @type \\Google\\Api\\Backend $backend\n     *           API backend configuration.\n     *     @type \\Google\\Api\\Http $http\n     *           HTTP configuration.\n     *     @type \\Google\\Api\\Quota $quota\n     *           Quota configuration.\n     *     @type \\Google\\Api\\Authentication $authentication\n     *           Auth configuration.\n     *     @type \\Google\\Api\\Context $context\n     *           Context configuration.\n     *     @type \\Google\\Api\\Usage $usage\n     *           Configuration controlling usage of this service.\n     *     @type array<\\Google\\Api\\Endpoint>|\\Google\\Protobuf\\Internal\\RepeatedField $endpoints\n     *           Configuration for network endpoints.  If this is empty, then an endpoint\n     *           with the same name as the service is automatically generated to service all\n     *           defined APIs.\n     *     @type \\Google\\Api\\Control $control\n     *           Configuration for the service control plane.\n     *     @type array<\\Google\\Api\\LogDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $logs\n     *           Defines the logs used by this service.\n     *     @type array<\\Google\\Api\\MetricDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $metrics\n     *           Defines the metrics used by this service.\n     *     @type array<\\Google\\Api\\MonitoredResourceDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $monitored_resources\n     *           Defines the monitored resources used by this service. This is required\n     *           by the [Service.monitoring][google.api.Service.monitoring] and\n     *           [Service.logging][google.api.Service.logging] configurations.\n     *     @type \\Google\\Api\\Billing $billing\n     *           Billing configuration.\n     *     @type \\Google\\Api\\Logging $logging\n     *           Logging configuration.\n     *     @type \\Google\\Api\\Monitoring $monitoring\n     *           Monitoring configuration.\n     *     @type \\Google\\Api\\SystemParameters $system_parameters\n     *           System parameter configuration.\n     *     @type \\Google\\Api\\SourceInfo $source_info\n     *           Output only. The source information for this configuration if available.\n     *     @type \\Google\\Api\\Publishing $publishing\n     *           Settings for [Google Cloud Client\n     *           libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n     *           generated from APIs defined as protocol buffers.\n     *     @type \\Google\\Protobuf\\UInt32Value $config_version\n     *           Obsolete. Do not use.\n     *           This field has no semantic meaning. The service config compiler always\n     *           sets this field to `3`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Service::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The service name, which is a DNS-like logical identifier for the\n     * service, such as `calendar.googleapis.com`. The service name\n     * typically goes through DNS verification to make sure the owner\n     * of the service also owns the DNS name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The service name, which is a DNS-like logical identifier for the\n     * service, such as `calendar.googleapis.com`. The service name\n     * typically goes through DNS verification to make sure the owner\n     * of the service also owns the DNS name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The product title for this service, it is the name displayed in Google\n     * Cloud Console.\n     *\n     * Generated from protobuf field <code>string title = 2;</code>\n     * @return string\n     */\n    public function getTitle()\n    {\n        return $this->title;\n    }\n\n    /**\n     * The product title for this service, it is the name displayed in Google\n     * Cloud Console.\n     *\n     * Generated from protobuf field <code>string title = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTitle($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->title = $var;\n\n        return $this;\n    }\n\n    /**\n     * The Google project that owns this service.\n     *\n     * Generated from protobuf field <code>string producer_project_id = 22;</code>\n     * @return string\n     */\n    public function getProducerProjectId()\n    {\n        return $this->producer_project_id;\n    }\n\n    /**\n     * The Google project that owns this service.\n     *\n     * Generated from protobuf field <code>string producer_project_id = 22;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProducerProjectId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->producer_project_id = $var;\n\n        return $this;\n    }\n\n    /**\n     * A unique ID for a specific instance of this message, typically assigned\n     * by the client for tracking purpose. Must be no longer than 63 characters\n     * and only lower case letters, digits, '.', '_' and '-' are allowed. If\n     * empty, the server may choose to generate one instead.\n     *\n     * Generated from protobuf field <code>string id = 33;</code>\n     * @return string\n     */\n    public function getId()\n    {\n        return $this->id;\n    }\n\n    /**\n     * A unique ID for a specific instance of this message, typically assigned\n     * by the client for tracking purpose. Must be no longer than 63 characters\n     * and only lower case letters, digits, '.', '_' and '-' are allowed. If\n     * empty, the server may choose to generate one instead.\n     *\n     * Generated from protobuf field <code>string id = 33;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->id = $var;\n\n        return $this;\n    }\n\n    /**\n     * A list of API interfaces exported by this service. Only the `name` field\n     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by\n     * the configuration author, as the remaining fields will be derived from the\n     * IDL during the normalization process. It is an error to specify an API\n     * interface here which cannot be resolved against the associated IDL files.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Api apis = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getApis()\n    {\n        return $this->apis;\n    }\n\n    /**\n     * A list of API interfaces exported by this service. Only the `name` field\n     * of the [google.protobuf.Api][google.protobuf.Api] needs to be provided by\n     * the configuration author, as the remaining fields will be derived from the\n     * IDL during the normalization process. It is an error to specify an API\n     * interface here which cannot be resolved against the associated IDL files.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Api apis = 3;</code>\n     * @param array<\\Google\\Protobuf\\Api>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setApis($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Api::class);\n        $this->apis = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of all proto message types included in this API service.\n     * Types referenced directly or indirectly by the `apis` are automatically\n     * included.  Messages which are not referenced but shall be included, such as\n     * types used by the `google.protobuf.Any` type, should be listed here by\n     * name by the configuration author. Example:\n     *     types:\n     *     - name: google.protobuf.Int32\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Type types = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getTypes()\n    {\n        return $this->types;\n    }\n\n    /**\n     * A list of all proto message types included in this API service.\n     * Types referenced directly or indirectly by the `apis` are automatically\n     * included.  Messages which are not referenced but shall be included, such as\n     * types used by the `google.protobuf.Any` type, should be listed here by\n     * name by the configuration author. Example:\n     *     types:\n     *     - name: google.protobuf.Int32\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Type types = 4;</code>\n     * @param array<\\Google\\Protobuf\\Type>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setTypes($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Type::class);\n        $this->types = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of all enum types included in this API service.  Enums referenced\n     * directly or indirectly by the `apis` are automatically included.  Enums\n     * which are not referenced but shall be included should be listed here by\n     * name by the configuration author. Example:\n     *     enums:\n     *     - name: google.someapi.v1.SomeEnum\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Enum enums = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getEnums()\n    {\n        return $this->enums;\n    }\n\n    /**\n     * A list of all enum types included in this API service.  Enums referenced\n     * directly or indirectly by the `apis` are automatically included.  Enums\n     * which are not referenced but shall be included should be listed here by\n     * name by the configuration author. Example:\n     *     enums:\n     *     - name: google.someapi.v1.SomeEnum\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Enum enums = 5;</code>\n     * @param array<\\Google\\Protobuf\\Enum>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setEnums($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Enum::class);\n        $this->enums = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Additional API documentation.\n     *\n     * Generated from protobuf field <code>.google.api.Documentation documentation = 6;</code>\n     * @return \\Google\\Api\\Documentation|null\n     */\n    public function getDocumentation()\n    {\n        return $this->documentation;\n    }\n\n    public function hasDocumentation()\n    {\n        return isset($this->documentation);\n    }\n\n    public function clearDocumentation()\n    {\n        unset($this->documentation);\n    }\n\n    /**\n     * Additional API documentation.\n     *\n     * Generated from protobuf field <code>.google.api.Documentation documentation = 6;</code>\n     * @param \\Google\\Api\\Documentation $var\n     * @return $this\n     */\n    public function setDocumentation($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Documentation::class);\n        $this->documentation = $var;\n\n        return $this;\n    }\n\n    /**\n     * API backend configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Backend backend = 8;</code>\n     * @return \\Google\\Api\\Backend|null\n     */\n    public function getBackend()\n    {\n        return $this->backend;\n    }\n\n    public function hasBackend()\n    {\n        return isset($this->backend);\n    }\n\n    public function clearBackend()\n    {\n        unset($this->backend);\n    }\n\n    /**\n     * API backend configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Backend backend = 8;</code>\n     * @param \\Google\\Api\\Backend $var\n     * @return $this\n     */\n    public function setBackend($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Backend::class);\n        $this->backend = $var;\n\n        return $this;\n    }\n\n    /**\n     * HTTP configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Http http = 9;</code>\n     * @return \\Google\\Api\\Http|null\n     */\n    public function getHttp()\n    {\n        return $this->http;\n    }\n\n    public function hasHttp()\n    {\n        return isset($this->http);\n    }\n\n    public function clearHttp()\n    {\n        unset($this->http);\n    }\n\n    /**\n     * HTTP configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Http http = 9;</code>\n     * @param \\Google\\Api\\Http $var\n     * @return $this\n     */\n    public function setHttp($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Http::class);\n        $this->http = $var;\n\n        return $this;\n    }\n\n    /**\n     * Quota configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Quota quota = 10;</code>\n     * @return \\Google\\Api\\Quota|null\n     */\n    public function getQuota()\n    {\n        return $this->quota;\n    }\n\n    public function hasQuota()\n    {\n        return isset($this->quota);\n    }\n\n    public function clearQuota()\n    {\n        unset($this->quota);\n    }\n\n    /**\n     * Quota configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Quota quota = 10;</code>\n     * @param \\Google\\Api\\Quota $var\n     * @return $this\n     */\n    public function setQuota($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Quota::class);\n        $this->quota = $var;\n\n        return $this;\n    }\n\n    /**\n     * Auth configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Authentication authentication = 11;</code>\n     * @return \\Google\\Api\\Authentication|null\n     */\n    public function getAuthentication()\n    {\n        return $this->authentication;\n    }\n\n    public function hasAuthentication()\n    {\n        return isset($this->authentication);\n    }\n\n    public function clearAuthentication()\n    {\n        unset($this->authentication);\n    }\n\n    /**\n     * Auth configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Authentication authentication = 11;</code>\n     * @param \\Google\\Api\\Authentication $var\n     * @return $this\n     */\n    public function setAuthentication($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Authentication::class);\n        $this->authentication = $var;\n\n        return $this;\n    }\n\n    /**\n     * Context configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Context context = 12;</code>\n     * @return \\Google\\Api\\Context|null\n     */\n    public function getContext()\n    {\n        return $this->context;\n    }\n\n    public function hasContext()\n    {\n        return isset($this->context);\n    }\n\n    public function clearContext()\n    {\n        unset($this->context);\n    }\n\n    /**\n     * Context configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Context context = 12;</code>\n     * @param \\Google\\Api\\Context $var\n     * @return $this\n     */\n    public function setContext($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Context::class);\n        $this->context = $var;\n\n        return $this;\n    }\n\n    /**\n     * Configuration controlling usage of this service.\n     *\n     * Generated from protobuf field <code>.google.api.Usage usage = 15;</code>\n     * @return \\Google\\Api\\Usage|null\n     */\n    public function getUsage()\n    {\n        return $this->usage;\n    }\n\n    public function hasUsage()\n    {\n        return isset($this->usage);\n    }\n\n    public function clearUsage()\n    {\n        unset($this->usage);\n    }\n\n    /**\n     * Configuration controlling usage of this service.\n     *\n     * Generated from protobuf field <code>.google.api.Usage usage = 15;</code>\n     * @param \\Google\\Api\\Usage $var\n     * @return $this\n     */\n    public function setUsage($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Usage::class);\n        $this->usage = $var;\n\n        return $this;\n    }\n\n    /**\n     * Configuration for network endpoints.  If this is empty, then an endpoint\n     * with the same name as the service is automatically generated to service all\n     * defined APIs.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Endpoint endpoints = 18;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getEndpoints()\n    {\n        return $this->endpoints;\n    }\n\n    /**\n     * Configuration for network endpoints.  If this is empty, then an endpoint\n     * with the same name as the service is automatically generated to service all\n     * defined APIs.\n     *\n     * Generated from protobuf field <code>repeated .google.api.Endpoint endpoints = 18;</code>\n     * @param array<\\Google\\Api\\Endpoint>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setEndpoints($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\Endpoint::class);\n        $this->endpoints = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Configuration for the service control plane.\n     *\n     * Generated from protobuf field <code>.google.api.Control control = 21;</code>\n     * @return \\Google\\Api\\Control|null\n     */\n    public function getControl()\n    {\n        return $this->control;\n    }\n\n    public function hasControl()\n    {\n        return isset($this->control);\n    }\n\n    public function clearControl()\n    {\n        unset($this->control);\n    }\n\n    /**\n     * Configuration for the service control plane.\n     *\n     * Generated from protobuf field <code>.google.api.Control control = 21;</code>\n     * @param \\Google\\Api\\Control $var\n     * @return $this\n     */\n    public function setControl($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Control::class);\n        $this->control = $var;\n\n        return $this;\n    }\n\n    /**\n     * Defines the logs used by this service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LogDescriptor logs = 23;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLogs()\n    {\n        return $this->logs;\n    }\n\n    /**\n     * Defines the logs used by this service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.LogDescriptor logs = 23;</code>\n     * @param array<\\Google\\Api\\LogDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLogs($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\LogDescriptor::class);\n        $this->logs = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Defines the metrics used by this service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricDescriptor metrics = 24;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMetrics()\n    {\n        return $this->metrics;\n    }\n\n    /**\n     * Defines the metrics used by this service.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MetricDescriptor metrics = 24;</code>\n     * @param array<\\Google\\Api\\MetricDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMetrics($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\MetricDescriptor::class);\n        $this->metrics = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Defines the monitored resources used by this service. This is required\n     * by the [Service.monitoring][google.api.Service.monitoring] and\n     * [Service.logging][google.api.Service.logging] configurations.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMonitoredResources()\n    {\n        return $this->monitored_resources;\n    }\n\n    /**\n     * Defines the monitored resources used by this service. This is required\n     * by the [Service.monitoring][google.api.Service.monitoring] and\n     * [Service.logging][google.api.Service.logging] configurations.\n     *\n     * Generated from protobuf field <code>repeated .google.api.MonitoredResourceDescriptor monitored_resources = 25;</code>\n     * @param array<\\Google\\Api\\MonitoredResourceDescriptor>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMonitoredResources($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\MonitoredResourceDescriptor::class);\n        $this->monitored_resources = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Billing configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Billing billing = 26;</code>\n     * @return \\Google\\Api\\Billing|null\n     */\n    public function getBilling()\n    {\n        return $this->billing;\n    }\n\n    public function hasBilling()\n    {\n        return isset($this->billing);\n    }\n\n    public function clearBilling()\n    {\n        unset($this->billing);\n    }\n\n    /**\n     * Billing configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Billing billing = 26;</code>\n     * @param \\Google\\Api\\Billing $var\n     * @return $this\n     */\n    public function setBilling($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Billing::class);\n        $this->billing = $var;\n\n        return $this;\n    }\n\n    /**\n     * Logging configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Logging logging = 27;</code>\n     * @return \\Google\\Api\\Logging|null\n     */\n    public function getLogging()\n    {\n        return $this->logging;\n    }\n\n    public function hasLogging()\n    {\n        return isset($this->logging);\n    }\n\n    public function clearLogging()\n    {\n        unset($this->logging);\n    }\n\n    /**\n     * Logging configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Logging logging = 27;</code>\n     * @param \\Google\\Api\\Logging $var\n     * @return $this\n     */\n    public function setLogging($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Logging::class);\n        $this->logging = $var;\n\n        return $this;\n    }\n\n    /**\n     * Monitoring configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Monitoring monitoring = 28;</code>\n     * @return \\Google\\Api\\Monitoring|null\n     */\n    public function getMonitoring()\n    {\n        return $this->monitoring;\n    }\n\n    public function hasMonitoring()\n    {\n        return isset($this->monitoring);\n    }\n\n    public function clearMonitoring()\n    {\n        unset($this->monitoring);\n    }\n\n    /**\n     * Monitoring configuration.\n     *\n     * Generated from protobuf field <code>.google.api.Monitoring monitoring = 28;</code>\n     * @param \\Google\\Api\\Monitoring $var\n     * @return $this\n     */\n    public function setMonitoring($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Monitoring::class);\n        $this->monitoring = $var;\n\n        return $this;\n    }\n\n    /**\n     * System parameter configuration.\n     *\n     * Generated from protobuf field <code>.google.api.SystemParameters system_parameters = 29;</code>\n     * @return \\Google\\Api\\SystemParameters|null\n     */\n    public function getSystemParameters()\n    {\n        return $this->system_parameters;\n    }\n\n    public function hasSystemParameters()\n    {\n        return isset($this->system_parameters);\n    }\n\n    public function clearSystemParameters()\n    {\n        unset($this->system_parameters);\n    }\n\n    /**\n     * System parameter configuration.\n     *\n     * Generated from protobuf field <code>.google.api.SystemParameters system_parameters = 29;</code>\n     * @param \\Google\\Api\\SystemParameters $var\n     * @return $this\n     */\n    public function setSystemParameters($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\SystemParameters::class);\n        $this->system_parameters = $var;\n\n        return $this;\n    }\n\n    /**\n     * Output only. The source information for this configuration if available.\n     *\n     * Generated from protobuf field <code>.google.api.SourceInfo source_info = 37;</code>\n     * @return \\Google\\Api\\SourceInfo|null\n     */\n    public function getSourceInfo()\n    {\n        return $this->source_info;\n    }\n\n    public function hasSourceInfo()\n    {\n        return isset($this->source_info);\n    }\n\n    public function clearSourceInfo()\n    {\n        unset($this->source_info);\n    }\n\n    /**\n     * Output only. The source information for this configuration if available.\n     *\n     * Generated from protobuf field <code>.google.api.SourceInfo source_info = 37;</code>\n     * @param \\Google\\Api\\SourceInfo $var\n     * @return $this\n     */\n    public function setSourceInfo($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\SourceInfo::class);\n        $this->source_info = $var;\n\n        return $this;\n    }\n\n    /**\n     * Settings for [Google Cloud Client\n     * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n     * generated from APIs defined as protocol buffers.\n     *\n     * Generated from protobuf field <code>.google.api.Publishing publishing = 45;</code>\n     * @return \\Google\\Api\\Publishing|null\n     */\n    public function getPublishing()\n    {\n        return $this->publishing;\n    }\n\n    public function hasPublishing()\n    {\n        return isset($this->publishing);\n    }\n\n    public function clearPublishing()\n    {\n        unset($this->publishing);\n    }\n\n    /**\n     * Settings for [Google Cloud Client\n     * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n     * generated from APIs defined as protocol buffers.\n     *\n     * Generated from protobuf field <code>.google.api.Publishing publishing = 45;</code>\n     * @param \\Google\\Api\\Publishing $var\n     * @return $this\n     */\n    public function setPublishing($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Api\\Publishing::class);\n        $this->publishing = $var;\n\n        return $this;\n    }\n\n    /**\n     * Obsolete. Do not use.\n     * This field has no semantic meaning. The service config compiler always\n     * sets this field to `3`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.UInt32Value config_version = 20;</code>\n     * @return \\Google\\Protobuf\\UInt32Value|null\n     */\n    public function getConfigVersion()\n    {\n        return $this->config_version;\n    }\n\n    public function hasConfigVersion()\n    {\n        return isset($this->config_version);\n    }\n\n    public function clearConfigVersion()\n    {\n        unset($this->config_version);\n    }\n\n    /**\n     * Returns the unboxed value from <code>getConfigVersion()</code>\n\n     * Obsolete. Do not use.\n     * This field has no semantic meaning. The service config compiler always\n     * sets this field to `3`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.UInt32Value config_version = 20;</code>\n     * @return int|null\n     */\n    public function getConfigVersionUnwrapped()\n    {\n        return $this->readWrapperValue(\"config_version\");\n    }\n\n    /**\n     * Obsolete. Do not use.\n     * This field has no semantic meaning. The service config compiler always\n     * sets this field to `3`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.UInt32Value config_version = 20;</code>\n     * @param \\Google\\Protobuf\\UInt32Value $var\n     * @return $this\n     */\n    public function setConfigVersion($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\UInt32Value::class);\n        $this->config_version = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the field by wrapping a primitive type in a Google\\Protobuf\\UInt32Value object.\n\n     * Obsolete. Do not use.\n     * This field has no semantic meaning. The service config compiler always\n     * sets this field to `3`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.UInt32Value config_version = 20;</code>\n     * @param int|null $var\n     * @return $this\n     */\n    public function setConfigVersionUnwrapped($var)\n    {\n        $this->writeWrapperValue(\"config_version\", $var);\n        return $this;}\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/SourceInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/source_info.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Source information used to create a Service Config\n *\n * Generated from protobuf message <code>google.api.SourceInfo</code>\n */\nclass SourceInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * All files used during config generation.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any source_files = 1;</code>\n     */\n    private $source_files;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $source_files\n     *           All files used during config generation.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\SourceInfo::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * All files used during config generation.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any source_files = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getSourceFiles()\n    {\n        return $this->source_files;\n    }\n\n    /**\n     * All files used during config generation.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any source_files = 1;</code>\n     * @param array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setSourceFiles($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Any::class);\n        $this->source_files = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/SystemParameter.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/system_parameter.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Define a parameter's name and location. The parameter may be passed as either\n * an HTTP header or a URL query parameter, and if both are passed the behavior\n * is implementation-dependent.\n *\n * Generated from protobuf message <code>google.api.SystemParameter</code>\n */\nclass SystemParameter extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Define the name of the parameter, such as \"api_key\" . It is case sensitive.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * Define the HTTP header name to use for the parameter. It is case\n     * insensitive.\n     *\n     * Generated from protobuf field <code>string http_header = 2;</code>\n     */\n    protected $http_header = '';\n    /**\n     * Define the URL query parameter name to use for the parameter. It is case\n     * sensitive.\n     *\n     * Generated from protobuf field <code>string url_query_parameter = 3;</code>\n     */\n    protected $url_query_parameter = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Define the name of the parameter, such as \"api_key\" . It is case sensitive.\n     *     @type string $http_header\n     *           Define the HTTP header name to use for the parameter. It is case\n     *           insensitive.\n     *     @type string $url_query_parameter\n     *           Define the URL query parameter name to use for the parameter. It is case\n     *           sensitive.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\SystemParameter::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Define the name of the parameter, such as \"api_key\" . It is case sensitive.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Define the name of the parameter, such as \"api_key\" . It is case sensitive.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Define the HTTP header name to use for the parameter. It is case\n     * insensitive.\n     *\n     * Generated from protobuf field <code>string http_header = 2;</code>\n     * @return string\n     */\n    public function getHttpHeader()\n    {\n        return $this->http_header;\n    }\n\n    /**\n     * Define the HTTP header name to use for the parameter. It is case\n     * insensitive.\n     *\n     * Generated from protobuf field <code>string http_header = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setHttpHeader($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->http_header = $var;\n\n        return $this;\n    }\n\n    /**\n     * Define the URL query parameter name to use for the parameter. It is case\n     * sensitive.\n     *\n     * Generated from protobuf field <code>string url_query_parameter = 3;</code>\n     * @return string\n     */\n    public function getUrlQueryParameter()\n    {\n        return $this->url_query_parameter;\n    }\n\n    /**\n     * Define the URL query parameter name to use for the parameter. It is case\n     * sensitive.\n     *\n     * Generated from protobuf field <code>string url_query_parameter = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setUrlQueryParameter($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->url_query_parameter = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/SystemParameterRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/system_parameter.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Define a system parameter rule mapping system parameter definitions to\n * methods.\n *\n * Generated from protobuf message <code>google.api.SystemParameterRule</code>\n */\nclass SystemParameterRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects the methods to which this rule applies. Use '*' to indicate all\n     * methods in all APIs.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * Define parameters. Multiple names may be defined for a parameter.\n     * For a given method call, only one of them should be used. If multiple\n     * names are used the behavior is implementation-dependent.\n     * If none of the specified names are present the behavior is\n     * parameter-dependent.\n     *\n     * Generated from protobuf field <code>repeated .google.api.SystemParameter parameters = 2;</code>\n     */\n    private $parameters;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects the methods to which this rule applies. Use '*' to indicate all\n     *           methods in all APIs.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type array<\\Google\\Api\\SystemParameter>|\\Google\\Protobuf\\Internal\\RepeatedField $parameters\n     *           Define parameters. Multiple names may be defined for a parameter.\n     *           For a given method call, only one of them should be used. If multiple\n     *           names are used the behavior is implementation-dependent.\n     *           If none of the specified names are present the behavior is\n     *           parameter-dependent.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\SystemParameter::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects the methods to which this rule applies. Use '*' to indicate all\n     * methods in all APIs.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects the methods to which this rule applies. Use '*' to indicate all\n     * methods in all APIs.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * Define parameters. Multiple names may be defined for a parameter.\n     * For a given method call, only one of them should be used. If multiple\n     * names are used the behavior is implementation-dependent.\n     * If none of the specified names are present the behavior is\n     * parameter-dependent.\n     *\n     * Generated from protobuf field <code>repeated .google.api.SystemParameter parameters = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getParameters()\n    {\n        return $this->parameters;\n    }\n\n    /**\n     * Define parameters. Multiple names may be defined for a parameter.\n     * For a given method call, only one of them should be used. If multiple\n     * names are used the behavior is implementation-dependent.\n     * If none of the specified names are present the behavior is\n     * parameter-dependent.\n     *\n     * Generated from protobuf field <code>repeated .google.api.SystemParameter parameters = 2;</code>\n     * @param array<\\Google\\Api\\SystemParameter>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setParameters($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\SystemParameter::class);\n        $this->parameters = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/SystemParameters.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/system_parameter.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * ### System parameter configuration\n * A system parameter is a special kind of parameter defined by the API\n * system, not by an individual API. It is typically mapped to an HTTP header\n * and/or a URL query parameter. This configuration specifies which methods\n * change the names of the system parameters.\n *\n * Generated from protobuf message <code>google.api.SystemParameters</code>\n */\nclass SystemParameters extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Define system parameters.\n     * The parameters defined here will override the default parameters\n     * implemented by the system. If this field is missing from the service\n     * config, default system parameters will be used. Default system parameters\n     * and names is implementation-dependent.\n     * Example: define api key for all methods\n     *     system_parameters\n     *       rules:\n     *         - selector: \"*\"\n     *           parameters:\n     *             - name: api_key\n     *               url_query_parameter: api_key\n     * Example: define 2 api key names for a specific method.\n     *     system_parameters\n     *       rules:\n     *         - selector: \"/ListShelves\"\n     *           parameters:\n     *             - name: api_key\n     *               http_header: Api-Key1\n     *             - name: api_key\n     *               http_header: Api-Key2\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.SystemParameterRule rules = 1;</code>\n     */\n    private $rules;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\SystemParameterRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           Define system parameters.\n     *           The parameters defined here will override the default parameters\n     *           implemented by the system. If this field is missing from the service\n     *           config, default system parameters will be used. Default system parameters\n     *           and names is implementation-dependent.\n     *           Example: define api key for all methods\n     *               system_parameters\n     *                 rules:\n     *                   - selector: \"*\"\n     *                     parameters:\n     *                       - name: api_key\n     *                         url_query_parameter: api_key\n     *           Example: define 2 api key names for a specific method.\n     *               system_parameters\n     *                 rules:\n     *                   - selector: \"/ListShelves\"\n     *                     parameters:\n     *                       - name: api_key\n     *                         http_header: Api-Key1\n     *                       - name: api_key\n     *                         http_header: Api-Key2\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\SystemParameter::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Define system parameters.\n     * The parameters defined here will override the default parameters\n     * implemented by the system. If this field is missing from the service\n     * config, default system parameters will be used. Default system parameters\n     * and names is implementation-dependent.\n     * Example: define api key for all methods\n     *     system_parameters\n     *       rules:\n     *         - selector: \"*\"\n     *           parameters:\n     *             - name: api_key\n     *               url_query_parameter: api_key\n     * Example: define 2 api key names for a specific method.\n     *     system_parameters\n     *       rules:\n     *         - selector: \"/ListShelves\"\n     *           parameters:\n     *             - name: api_key\n     *               http_header: Api-Key1\n     *             - name: api_key\n     *               http_header: Api-Key2\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.SystemParameterRule rules = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * Define system parameters.\n     * The parameters defined here will override the default parameters\n     * implemented by the system. If this field is missing from the service\n     * config, default system parameters will be used. Default system parameters\n     * and names is implementation-dependent.\n     * Example: define api key for all methods\n     *     system_parameters\n     *       rules:\n     *         - selector: \"*\"\n     *           parameters:\n     *             - name: api_key\n     *               url_query_parameter: api_key\n     * Example: define 2 api key names for a specific method.\n     *     system_parameters\n     *       rules:\n     *         - selector: \"/ListShelves\"\n     *           parameters:\n     *             - name: api_key\n     *               http_header: Api-Key1\n     *             - name: api_key\n     *               http_header: Api-Key2\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.SystemParameterRule rules = 1;</code>\n     * @param array<\\Google\\Api\\SystemParameterRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\SystemParameterRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/TypeReference.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/field_info.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A reference to a message type, for use in [FieldInfo][google.api.FieldInfo].\n *\n * Generated from protobuf message <code>google.api.TypeReference</code>\n */\nclass TypeReference extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the type that the annotated, generic field may represent.\n     * If the type is in the same protobuf package, the value can be the simple\n     * message name e.g., `\"MyMessage\"`. Otherwise, the value must be the\n     * fully-qualified message name e.g., `\"google.library.v1.Book\"`.\n     * If the type(s) are unknown to the service (e.g. the field accepts generic\n     * user input), use the wildcard `\"*\"` to denote this behavior.\n     * See [AIP-202](https://google.aip.dev/202#type-references) for more details.\n     *\n     * Generated from protobuf field <code>string type_name = 1;</code>\n     */\n    protected $type_name = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type_name\n     *           The name of the type that the annotated, generic field may represent.\n     *           If the type is in the same protobuf package, the value can be the simple\n     *           message name e.g., `\"MyMessage\"`. Otherwise, the value must be the\n     *           fully-qualified message name e.g., `\"google.library.v1.Book\"`.\n     *           If the type(s) are unknown to the service (e.g. the field accepts generic\n     *           user input), use the wildcard `\"*\"` to denote this behavior.\n     *           See [AIP-202](https://google.aip.dev/202#type-references) for more details.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\FieldInfo::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the type that the annotated, generic field may represent.\n     * If the type is in the same protobuf package, the value can be the simple\n     * message name e.g., `\"MyMessage\"`. Otherwise, the value must be the\n     * fully-qualified message name e.g., `\"google.library.v1.Book\"`.\n     * If the type(s) are unknown to the service (e.g. the field accepts generic\n     * user input), use the wildcard `\"*\"` to denote this behavior.\n     * See [AIP-202](https://google.aip.dev/202#type-references) for more details.\n     *\n     * Generated from protobuf field <code>string type_name = 1;</code>\n     * @return string\n     */\n    public function getTypeName()\n    {\n        return $this->type_name;\n    }\n\n    /**\n     * The name of the type that the annotated, generic field may represent.\n     * If the type is in the same protobuf package, the value can be the simple\n     * message name e.g., `\"MyMessage\"`. Otherwise, the value must be the\n     * fully-qualified message name e.g., `\"google.library.v1.Book\"`.\n     * If the type(s) are unknown to the service (e.g. the field accepts generic\n     * user input), use the wildcard `\"*\"` to denote this behavior.\n     * See [AIP-202](https://google.aip.dev/202#type-references) for more details.\n     *\n     * Generated from protobuf field <code>string type_name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTypeName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type_name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Usage.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/usage.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Configuration controlling usage of a service.\n *\n * Generated from protobuf message <code>google.api.Usage</code>\n */\nclass Usage extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Requirements that must be satisfied before a consumer project can use the\n     * service. Each requirement is of the form <service.name>/<requirement-id>;\n     * for example 'serviceusage.googleapis.com/billing-enabled'.\n     * For Google APIs, a Terms of Service requirement must be included here.\n     * Google Cloud APIs must include \"serviceusage.googleapis.com/tos/cloud\".\n     * Other Google APIs should include\n     * \"serviceusage.googleapis.com/tos/universal\". Additional ToS can be\n     * included based on the business needs.\n     *\n     * Generated from protobuf field <code>repeated string requirements = 1;</code>\n     */\n    private $requirements;\n    /**\n     * A list of usage rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.UsageRule rules = 6;</code>\n     */\n    private $rules;\n    /**\n     * The full resource name of a channel used for sending notifications to the\n     * service producer.\n     * Google Service Management currently only supports\n     * [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\n     * channel. To use Google Cloud Pub/Sub as the channel, this must be the name\n     * of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\n     * documented in https://cloud.google.com/pubsub/docs/overview.\n     *\n     * Generated from protobuf field <code>string producer_notification_channel = 7;</code>\n     */\n    protected $producer_notification_channel = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $requirements\n     *           Requirements that must be satisfied before a consumer project can use the\n     *           service. Each requirement is of the form <service.name>/<requirement-id>;\n     *           for example 'serviceusage.googleapis.com/billing-enabled'.\n     *           For Google APIs, a Terms of Service requirement must be included here.\n     *           Google Cloud APIs must include \"serviceusage.googleapis.com/tos/cloud\".\n     *           Other Google APIs should include\n     *           \"serviceusage.googleapis.com/tos/universal\". Additional ToS can be\n     *           included based on the business needs.\n     *     @type array<\\Google\\Api\\UsageRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of usage rules that apply to individual API methods.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *     @type string $producer_notification_channel\n     *           The full resource name of a channel used for sending notifications to the\n     *           service producer.\n     *           Google Service Management currently only supports\n     *           [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\n     *           channel. To use Google Cloud Pub/Sub as the channel, this must be the name\n     *           of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\n     *           documented in https://cloud.google.com/pubsub/docs/overview.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Usage::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Requirements that must be satisfied before a consumer project can use the\n     * service. Each requirement is of the form <service.name>/<requirement-id>;\n     * for example 'serviceusage.googleapis.com/billing-enabled'.\n     * For Google APIs, a Terms of Service requirement must be included here.\n     * Google Cloud APIs must include \"serviceusage.googleapis.com/tos/cloud\".\n     * Other Google APIs should include\n     * \"serviceusage.googleapis.com/tos/universal\". Additional ToS can be\n     * included based on the business needs.\n     *\n     * Generated from protobuf field <code>repeated string requirements = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRequirements()\n    {\n        return $this->requirements;\n    }\n\n    /**\n     * Requirements that must be satisfied before a consumer project can use the\n     * service. Each requirement is of the form <service.name>/<requirement-id>;\n     * for example 'serviceusage.googleapis.com/billing-enabled'.\n     * For Google APIs, a Terms of Service requirement must be included here.\n     * Google Cloud APIs must include \"serviceusage.googleapis.com/tos/cloud\".\n     * Other Google APIs should include\n     * \"serviceusage.googleapis.com/tos/universal\". Additional ToS can be\n     * included based on the business needs.\n     *\n     * Generated from protobuf field <code>repeated string requirements = 1;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRequirements($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->requirements = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A list of usage rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.UsageRule rules = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of usage rules that apply to individual API methods.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.UsageRule rules = 6;</code>\n     * @param array<\\Google\\Api\\UsageRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\UsageRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The full resource name of a channel used for sending notifications to the\n     * service producer.\n     * Google Service Management currently only supports\n     * [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\n     * channel. To use Google Cloud Pub/Sub as the channel, this must be the name\n     * of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\n     * documented in https://cloud.google.com/pubsub/docs/overview.\n     *\n     * Generated from protobuf field <code>string producer_notification_channel = 7;</code>\n     * @return string\n     */\n    public function getProducerNotificationChannel()\n    {\n        return $this->producer_notification_channel;\n    }\n\n    /**\n     * The full resource name of a channel used for sending notifications to the\n     * service producer.\n     * Google Service Management currently only supports\n     * [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\n     * channel. To use Google Cloud Pub/Sub as the channel, this must be the name\n     * of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\n     * documented in https://cloud.google.com/pubsub/docs/overview.\n     *\n     * Generated from protobuf field <code>string producer_notification_channel = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProducerNotificationChannel($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->producer_notification_channel = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/UsageRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/usage.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Usage configuration rules for the service.\n * NOTE: Under development.\n * Use this rule to configure unregistered calls for the service. Unregistered\n * calls are calls that do not contain consumer project identity.\n * (Example: calls that do not contain an API key).\n * By default, API methods do not allow unregistered calls, and each method call\n * must be identified by a consumer project identity. Use this rule to\n * allow/disallow unregistered calls.\n * Example of an API that wants to allow unregistered calls for entire service.\n *     usage:\n *       rules:\n *       - selector: \"*\"\n *         allow_unregistered_calls: true\n * Example of a method that wants to allow unregistered calls.\n *     usage:\n *       rules:\n *       - selector: \"google.example.library.v1.LibraryService.CreateBook\"\n *         allow_unregistered_calls: true\n *\n * Generated from protobuf message <code>google.api.UsageRule</code>\n */\nclass UsageRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects the methods to which this rule applies. Use '*' to indicate all\n     * methods in all APIs.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * If true, the selected method allows unregistered calls, e.g. calls\n     * that don't identify any user or application.\n     *\n     * Generated from protobuf field <code>bool allow_unregistered_calls = 2;</code>\n     */\n    protected $allow_unregistered_calls = false;\n    /**\n     * If true, the selected method should skip service control and the control\n     * plane features, such as quota and billing, will not be available.\n     * This flag is used by Google Cloud Endpoints to bypass checks for internal\n     * methods, such as service health check methods.\n     *\n     * Generated from protobuf field <code>bool skip_service_control = 3;</code>\n     */\n    protected $skip_service_control = false;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects the methods to which this rule applies. Use '*' to indicate all\n     *           methods in all APIs.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type bool $allow_unregistered_calls\n     *           If true, the selected method allows unregistered calls, e.g. calls\n     *           that don't identify any user or application.\n     *     @type bool $skip_service_control\n     *           If true, the selected method should skip service control and the control\n     *           plane features, such as quota and billing, will not be available.\n     *           This flag is used by Google Cloud Endpoints to bypass checks for internal\n     *           methods, such as service health check methods.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Usage::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects the methods to which this rule applies. Use '*' to indicate all\n     * methods in all APIs.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects the methods to which this rule applies. Use '*' to indicate all\n     * methods in all APIs.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, the selected method allows unregistered calls, e.g. calls\n     * that don't identify any user or application.\n     *\n     * Generated from protobuf field <code>bool allow_unregistered_calls = 2;</code>\n     * @return bool\n     */\n    public function getAllowUnregisteredCalls()\n    {\n        return $this->allow_unregistered_calls;\n    }\n\n    /**\n     * If true, the selected method allows unregistered calls, e.g. calls\n     * that don't identify any user or application.\n     *\n     * Generated from protobuf field <code>bool allow_unregistered_calls = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setAllowUnregisteredCalls($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->allow_unregistered_calls = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, the selected method should skip service control and the control\n     * plane features, such as quota and billing, will not be available.\n     * This flag is used by Google Cloud Endpoints to bypass checks for internal\n     * methods, such as service health check methods.\n     *\n     * Generated from protobuf field <code>bool skip_service_control = 3;</code>\n     * @return bool\n     */\n    public function getSkipServiceControl()\n    {\n        return $this->skip_service_control;\n    }\n\n    /**\n     * If true, the selected method should skip service control and the control\n     * plane features, such as quota and billing, will not be available.\n     * This flag is used by Google Cloud Endpoints to bypass checks for internal\n     * methods, such as service health check methods.\n     *\n     * Generated from protobuf field <code>bool skip_service_control = 3;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setSkipServiceControl($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->skip_service_control = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/Visibility.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/visibility.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `Visibility` restricts service consumer's access to service elements,\n * such as whether an application can call a visibility-restricted method.\n * The restriction is expressed by applying visibility labels on service\n * elements. The visibility labels are elsewhere linked to service consumers.\n * A service can define multiple visibility labels, but a service consumer\n * should be granted at most one visibility label. Multiple visibility\n * labels for a single service consumer are not supported.\n * If an element and all its parents have no visibility label, its visibility\n * is unconditionally granted.\n * Example:\n *     visibility:\n *       rules:\n *       - selector: google.calendar.Calendar.EnhancedSearch\n *         restriction: PREVIEW\n *       - selector: google.calendar.Calendar.Delegate\n *         restriction: INTERNAL\n * Here, all methods are publicly visible except for the restricted methods\n * EnhancedSearch and Delegate.\n *\n * Generated from protobuf message <code>google.api.Visibility</code>\n */\nclass Visibility extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of visibility rules that apply to individual API elements.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.VisibilityRule rules = 1;</code>\n     */\n    private $rules;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Api\\VisibilityRule>|\\Google\\Protobuf\\Internal\\RepeatedField $rules\n     *           A list of visibility rules that apply to individual API elements.\n     *           **NOTE:** All service configuration rules follow \"last one wins\" order.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Visibility::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of visibility rules that apply to individual API elements.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.VisibilityRule rules = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRules()\n    {\n        return $this->rules;\n    }\n\n    /**\n     * A list of visibility rules that apply to individual API elements.\n     * **NOTE:** All service configuration rules follow \"last one wins\" order.\n     *\n     * Generated from protobuf field <code>repeated .google.api.VisibilityRule rules = 1;</code>\n     * @param array<\\Google\\Api\\VisibilityRule>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRules($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Api\\VisibilityRule::class);\n        $this->rules = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Api/VisibilityRule.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/api/visibility.proto\n\nnamespace Google\\Api;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A visibility rule provides visibility configuration for an individual API\n * element.\n *\n * Generated from protobuf message <code>google.api.VisibilityRule</code>\n */\nclass VisibilityRule extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Selects methods, messages, fields, enums, etc. to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     */\n    protected $selector = '';\n    /**\n     * A comma-separated list of visibility labels that apply to the `selector`.\n     * Any of the listed labels can be used to grant the visibility.\n     * If a rule has multiple labels, removing one of the labels but not all of\n     * them can break clients.\n     * Example:\n     *     visibility:\n     *       rules:\n     *       - selector: google.calendar.Calendar.EnhancedSearch\n     *         restriction: INTERNAL, PREVIEW\n     * Removing INTERNAL from this restriction will break clients that rely on\n     * this method and only had access to it through INTERNAL.\n     *\n     * Generated from protobuf field <code>string restriction = 2;</code>\n     */\n    protected $restriction = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $selector\n     *           Selects methods, messages, fields, enums, etc. to which this rule applies.\n     *           Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     *           details.\n     *     @type string $restriction\n     *           A comma-separated list of visibility labels that apply to the `selector`.\n     *           Any of the listed labels can be used to grant the visibility.\n     *           If a rule has multiple labels, removing one of the labels but not all of\n     *           them can break clients.\n     *           Example:\n     *               visibility:\n     *                 rules:\n     *                 - selector: google.calendar.Calendar.EnhancedSearch\n     *                   restriction: INTERNAL, PREVIEW\n     *           Removing INTERNAL from this restriction will break clients that rely on\n     *           this method and only had access to it through INTERNAL.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Api\\Visibility::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Selects methods, messages, fields, enums, etc. to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @return string\n     */\n    public function getSelector()\n    {\n        return $this->selector;\n    }\n\n    /**\n     * Selects methods, messages, fields, enums, etc. to which this rule applies.\n     * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n     * details.\n     *\n     * Generated from protobuf field <code>string selector = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSelector($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->selector = $var;\n\n        return $this;\n    }\n\n    /**\n     * A comma-separated list of visibility labels that apply to the `selector`.\n     * Any of the listed labels can be used to grant the visibility.\n     * If a rule has multiple labels, removing one of the labels but not all of\n     * them can break clients.\n     * Example:\n     *     visibility:\n     *       rules:\n     *       - selector: google.calendar.Calendar.EnhancedSearch\n     *         restriction: INTERNAL, PREVIEW\n     * Removing INTERNAL from this restriction will break clients that rely on\n     * this method and only had access to it through INTERNAL.\n     *\n     * Generated from protobuf field <code>string restriction = 2;</code>\n     * @return string\n     */\n    public function getRestriction()\n    {\n        return $this->restriction;\n    }\n\n    /**\n     * A comma-separated list of visibility labels that apply to the `selector`.\n     * Any of the listed labels can be used to grant the visibility.\n     * If a rule has multiple labels, removing one of the labels but not all of\n     * them can break clients.\n     * Example:\n     *     visibility:\n     *       rules:\n     *       - selector: google.calendar.Calendar.EnhancedSearch\n     *         restriction: INTERNAL, PREVIEW\n     * Removing INTERNAL from this restriction will break clients that rely on\n     * this method and only had access to it through INTERNAL.\n     *\n     * Generated from protobuf field <code>string restriction = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRestriction($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->restriction = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/AuditConfig.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Specifies the audit configuration for a service.\n * The configuration determines which permission types are logged, and what\n * identities, if any, are exempted from logging.\n * An AuditConfig must have one or more AuditLogConfigs.\n * If there are AuditConfigs for both `allServices` and a specific service,\n * the union of the two AuditConfigs is used for that service: the log_types\n * specified in each AuditConfig are enabled, and the exempted_members in each\n * AuditLogConfig are exempted.\n * Example Policy with multiple AuditConfigs:\n *     {\n *       \"audit_configs\": [\n *         {\n *           \"service\": \"allServices\",\n *           \"audit_log_configs\": [\n *             {\n *               \"log_type\": \"DATA_READ\",\n *               \"exempted_members\": [\n *                 \"user:jose&#64;example.com\"\n *               ]\n *             },\n *             {\n *               \"log_type\": \"DATA_WRITE\"\n *             },\n *             {\n *               \"log_type\": \"ADMIN_READ\"\n *             }\n *           ]\n *         },\n *         {\n *           \"service\": \"sampleservice.googleapis.com\",\n *           \"audit_log_configs\": [\n *             {\n *               \"log_type\": \"DATA_READ\"\n *             },\n *             {\n *               \"log_type\": \"DATA_WRITE\",\n *               \"exempted_members\": [\n *                 \"user:aliya&#64;example.com\"\n *               ]\n *             }\n *           ]\n *         }\n *       ]\n *     }\n * For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\n * logging. It also exempts `jose&#64;example.com` from DATA_READ logging, and\n * `aliya&#64;example.com` from DATA_WRITE logging.\n *\n * Generated from protobuf message <code>google.iam.v1.AuditConfig</code>\n */\nclass AuditConfig extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Specifies a service that will be enabled for audit logging.\n     * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     * `allServices` is a special value that covers all services.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     */\n    protected $service = '';\n    /**\n     * The configuration for logging of each type of permission.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditLogConfig audit_log_configs = 3;</code>\n     */\n    private $audit_log_configs;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $service\n     *           Specifies a service that will be enabled for audit logging.\n     *           For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     *           `allServices` is a special value that covers all services.\n     *     @type array<\\Google\\Cloud\\Iam\\V1\\AuditLogConfig>|\\Google\\Protobuf\\Internal\\RepeatedField $audit_log_configs\n     *           The configuration for logging of each type of permission.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Specifies a service that will be enabled for audit logging.\n     * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     * `allServices` is a special value that covers all services.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     * @return string\n     */\n    public function getService()\n    {\n        return $this->service;\n    }\n\n    /**\n     * Specifies a service that will be enabled for audit logging.\n     * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     * `allServices` is a special value that covers all services.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setService($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->service = $var;\n\n        return $this;\n    }\n\n    /**\n     * The configuration for logging of each type of permission.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditLogConfig audit_log_configs = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAuditLogConfigs()\n    {\n        return $this->audit_log_configs;\n    }\n\n    /**\n     * The configuration for logging of each type of permission.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditLogConfig audit_log_configs = 3;</code>\n     * @param array<\\Google\\Cloud\\Iam\\V1\\AuditLogConfig>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAuditLogConfigs($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Cloud\\Iam\\V1\\AuditLogConfig::class);\n        $this->audit_log_configs = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/AuditConfigDelta/Action.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1\\AuditConfigDelta;\n\nuse UnexpectedValueException;\n\n/**\n * The type of action performed on an audit configuration in a policy.\n *\n * Protobuf type <code>google.iam.v1.AuditConfigDelta.Action</code>\n */\nclass Action\n{\n    /**\n     * Unspecified.\n     *\n     * Generated from protobuf enum <code>ACTION_UNSPECIFIED = 0;</code>\n     */\n    const ACTION_UNSPECIFIED = 0;\n    /**\n     * Addition of an audit configuration.\n     *\n     * Generated from protobuf enum <code>ADD = 1;</code>\n     */\n    const ADD = 1;\n    /**\n     * Removal of an audit configuration.\n     *\n     * Generated from protobuf enum <code>REMOVE = 2;</code>\n     */\n    const REMOVE = 2;\n\n    private static $valueToName = [\n        self::ACTION_UNSPECIFIED => 'ACTION_UNSPECIFIED',\n        self::ADD => 'ADD',\n        self::REMOVE => 'REMOVE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/AuditConfigDelta.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * One delta entry for AuditConfig. Each individual change (only one\n * exempted_member in each entry) to a AuditConfig will be a separate entry.\n *\n * Generated from protobuf message <code>google.iam.v1.AuditConfigDelta</code>\n */\nclass AuditConfigDelta extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The action that was performed on an audit configuration in a policy.\n     * Required\n     *\n     * Generated from protobuf field <code>.google.iam.v1.AuditConfigDelta.Action action = 1;</code>\n     */\n    protected $action = 0;\n    /**\n     * Specifies a service that was configured for Cloud Audit Logging.\n     * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     * `allServices` is a special value that covers all services.\n     * Required\n     *\n     * Generated from protobuf field <code>string service = 2;</code>\n     */\n    protected $service = '';\n    /**\n     * A single identity that is exempted from \"data access\" audit\n     * logging for the `service` specified above.\n     * Follows the same format of Binding.members.\n     *\n     * Generated from protobuf field <code>string exempted_member = 3;</code>\n     */\n    protected $exempted_member = '';\n    /**\n     * Specifies the log_type that was be enabled. ADMIN_ACTIVITY is always\n     * enabled, and cannot be configured.\n     * Required\n     *\n     * Generated from protobuf field <code>string log_type = 4;</code>\n     */\n    protected $log_type = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $action\n     *           The action that was performed on an audit configuration in a policy.\n     *           Required\n     *     @type string $service\n     *           Specifies a service that was configured for Cloud Audit Logging.\n     *           For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     *           `allServices` is a special value that covers all services.\n     *           Required\n     *     @type string $exempted_member\n     *           A single identity that is exempted from \"data access\" audit\n     *           logging for the `service` specified above.\n     *           Follows the same format of Binding.members.\n     *     @type string $log_type\n     *           Specifies the log_type that was be enabled. ADMIN_ACTIVITY is always\n     *           enabled, and cannot be configured.\n     *           Required\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The action that was performed on an audit configuration in a policy.\n     * Required\n     *\n     * Generated from protobuf field <code>.google.iam.v1.AuditConfigDelta.Action action = 1;</code>\n     * @return int\n     */\n    public function getAction()\n    {\n        return $this->action;\n    }\n\n    /**\n     * The action that was performed on an audit configuration in a policy.\n     * Required\n     *\n     * Generated from protobuf field <code>.google.iam.v1.AuditConfigDelta.Action action = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setAction($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Cloud\\Iam\\V1\\AuditConfigDelta\\Action::class);\n        $this->action = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies a service that was configured for Cloud Audit Logging.\n     * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     * `allServices` is a special value that covers all services.\n     * Required\n     *\n     * Generated from protobuf field <code>string service = 2;</code>\n     * @return string\n     */\n    public function getService()\n    {\n        return $this->service;\n    }\n\n    /**\n     * Specifies a service that was configured for Cloud Audit Logging.\n     * For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n     * `allServices` is a special value that covers all services.\n     * Required\n     *\n     * Generated from protobuf field <code>string service = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setService($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->service = $var;\n\n        return $this;\n    }\n\n    /**\n     * A single identity that is exempted from \"data access\" audit\n     * logging for the `service` specified above.\n     * Follows the same format of Binding.members.\n     *\n     * Generated from protobuf field <code>string exempted_member = 3;</code>\n     * @return string\n     */\n    public function getExemptedMember()\n    {\n        return $this->exempted_member;\n    }\n\n    /**\n     * A single identity that is exempted from \"data access\" audit\n     * logging for the `service` specified above.\n     * Follows the same format of Binding.members.\n     *\n     * Generated from protobuf field <code>string exempted_member = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setExemptedMember($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->exempted_member = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies the log_type that was be enabled. ADMIN_ACTIVITY is always\n     * enabled, and cannot be configured.\n     * Required\n     *\n     * Generated from protobuf field <code>string log_type = 4;</code>\n     * @return string\n     */\n    public function getLogType()\n    {\n        return $this->log_type;\n    }\n\n    /**\n     * Specifies the log_type that was be enabled. ADMIN_ACTIVITY is always\n     * enabled, and cannot be configured.\n     * Required\n     *\n     * Generated from protobuf field <code>string log_type = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLogType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->log_type = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/AuditLogConfig/LogType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1\\AuditLogConfig;\n\nuse UnexpectedValueException;\n\n/**\n * The list of valid permission types for which logging can be configured.\n * Admin writes are always logged, and are not configurable.\n *\n * Protobuf type <code>google.iam.v1.AuditLogConfig.LogType</code>\n */\nclass LogType\n{\n    /**\n     * Default case. Should never be this.\n     *\n     * Generated from protobuf enum <code>LOG_TYPE_UNSPECIFIED = 0;</code>\n     */\n    const LOG_TYPE_UNSPECIFIED = 0;\n    /**\n     * Admin reads. Example: CloudIAM getIamPolicy\n     *\n     * Generated from protobuf enum <code>ADMIN_READ = 1;</code>\n     */\n    const ADMIN_READ = 1;\n    /**\n     * Data writes. Example: CloudSQL Users create\n     *\n     * Generated from protobuf enum <code>DATA_WRITE = 2;</code>\n     */\n    const DATA_WRITE = 2;\n    /**\n     * Data reads. Example: CloudSQL Users list\n     *\n     * Generated from protobuf enum <code>DATA_READ = 3;</code>\n     */\n    const DATA_READ = 3;\n\n    private static $valueToName = [\n        self::LOG_TYPE_UNSPECIFIED => 'LOG_TYPE_UNSPECIFIED',\n        self::ADMIN_READ => 'ADMIN_READ',\n        self::DATA_WRITE => 'DATA_WRITE',\n        self::DATA_READ => 'DATA_READ',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/AuditLogConfig.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Provides the configuration for logging a type of permissions.\n * Example:\n *     {\n *       \"audit_log_configs\": [\n *         {\n *           \"log_type\": \"DATA_READ\",\n *           \"exempted_members\": [\n *             \"user:jose&#64;example.com\"\n *           ]\n *         },\n *         {\n *           \"log_type\": \"DATA_WRITE\"\n *         }\n *       ]\n *     }\n * This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\n * jose&#64;example.com from DATA_READ logging.\n *\n * Generated from protobuf message <code>google.iam.v1.AuditLogConfig</code>\n */\nclass AuditLogConfig extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The log type that this config enables.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.AuditLogConfig.LogType log_type = 1;</code>\n     */\n    protected $log_type = 0;\n    /**\n     * Specifies the identities that do not cause logging for this type of\n     * permission.\n     * Follows the same format of\n     * [Binding.members][google.iam.v1.Binding.members].\n     *\n     * Generated from protobuf field <code>repeated string exempted_members = 2;</code>\n     */\n    private $exempted_members;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $log_type\n     *           The log type that this config enables.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $exempted_members\n     *           Specifies the identities that do not cause logging for this type of\n     *           permission.\n     *           Follows the same format of\n     *           [Binding.members][google.iam.v1.Binding.members].\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The log type that this config enables.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.AuditLogConfig.LogType log_type = 1;</code>\n     * @return int\n     */\n    public function getLogType()\n    {\n        return $this->log_type;\n    }\n\n    /**\n     * The log type that this config enables.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.AuditLogConfig.LogType log_type = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setLogType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Cloud\\Iam\\V1\\AuditLogConfig\\LogType::class);\n        $this->log_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies the identities that do not cause logging for this type of\n     * permission.\n     * Follows the same format of\n     * [Binding.members][google.iam.v1.Binding.members].\n     *\n     * Generated from protobuf field <code>repeated string exempted_members = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getExemptedMembers()\n    {\n        return $this->exempted_members;\n    }\n\n    /**\n     * Specifies the identities that do not cause logging for this type of\n     * permission.\n     * Follows the same format of\n     * [Binding.members][google.iam.v1.Binding.members].\n     *\n     * Generated from protobuf field <code>repeated string exempted_members = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setExemptedMembers($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->exempted_members = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/Binding.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Associates `members`, or principals, with a `role`.\n *\n * Generated from protobuf message <code>google.iam.v1.Binding</code>\n */\nclass Binding extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Role that is assigned to the list of `members`, or principals.\n     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     *\n     * Generated from protobuf field <code>string role = 1;</code>\n     */\n    protected $role = '';\n    /**\n     * Specifies the principals requesting access for a Google Cloud resource.\n     * `members` can have the following values:\n     * * `allUsers`: A special identifier that represents anyone who is\n     *    on the internet; with or without a Google account.\n     * * `allAuthenticatedUsers`: A special identifier that represents anyone\n     *    who is authenticated with a Google account or a service account.\n     * * `user:{emailid}`: An email address that represents a specific Google\n     *    account. For example, `alice&#64;example.com` .\n     * * `serviceAccount:{emailid}`: An email address that represents a service\n     *    account. For example, `my-other-app&#64;appspot.gserviceaccount.com`.\n     * * `group:{emailid}`: An email address that represents a Google group.\n     *    For example, `admins&#64;example.com`.\n     * * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *    identifier) representing a user that has been recently deleted. For\n     *    example, `alice&#64;example.com?uid=123456789012345678901`. If the user is\n     *    recovered, this value reverts to `user:{emailid}` and the recovered user\n     *    retains the role in the binding.\n     * * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus\n     *    unique identifier) representing a service account that has been recently\n     *    deleted. For example,\n     *    `my-other-app&#64;appspot.gserviceaccount.com?uid=123456789012345678901`.\n     *    If the service account is undeleted, this value reverts to\n     *    `serviceAccount:{emailid}` and the undeleted service account retains the\n     *    role in the binding.\n     * * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *    identifier) representing a Google group that has been recently\n     *    deleted. For example, `admins&#64;example.com?uid=123456789012345678901`. If\n     *    the group is recovered, this value reverts to `group:{emailid}` and the\n     *    recovered group retains the role in the binding.\n     * * `domain:{domain}`: The G Suite domain (primary) that represents all the\n     *    users of that domain. For example, `google.com` or `example.com`.\n     *\n     * Generated from protobuf field <code>repeated string members = 2;</code>\n     */\n    private $members;\n    /**\n     * The condition that is associated with this binding.\n     * If the condition evaluates to `true`, then this binding applies to the\n     * current request.\n     * If the condition evaluates to `false`, then this binding does not apply to\n     * the current request. However, a different role binding might grant the same\n     * role to one or more of the principals in this binding.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>.google.type.Expr condition = 3;</code>\n     */\n    protected $condition = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $role\n     *           Role that is assigned to the list of `members`, or principals.\n     *           For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $members\n     *           Specifies the principals requesting access for a Google Cloud resource.\n     *           `members` can have the following values:\n     *           * `allUsers`: A special identifier that represents anyone who is\n     *              on the internet; with or without a Google account.\n     *           * `allAuthenticatedUsers`: A special identifier that represents anyone\n     *              who is authenticated with a Google account or a service account.\n     *           * `user:{emailid}`: An email address that represents a specific Google\n     *              account. For example, `alice&#64;example.com` .\n     *           * `serviceAccount:{emailid}`: An email address that represents a service\n     *              account. For example, `my-other-app&#64;appspot.gserviceaccount.com`.\n     *           * `group:{emailid}`: An email address that represents a Google group.\n     *              For example, `admins&#64;example.com`.\n     *           * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *              identifier) representing a user that has been recently deleted. For\n     *              example, `alice&#64;example.com?uid=123456789012345678901`. If the user is\n     *              recovered, this value reverts to `user:{emailid}` and the recovered user\n     *              retains the role in the binding.\n     *           * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus\n     *              unique identifier) representing a service account that has been recently\n     *              deleted. For example,\n     *              `my-other-app&#64;appspot.gserviceaccount.com?uid=123456789012345678901`.\n     *              If the service account is undeleted, this value reverts to\n     *              `serviceAccount:{emailid}` and the undeleted service account retains the\n     *              role in the binding.\n     *           * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *              identifier) representing a Google group that has been recently\n     *              deleted. For example, `admins&#64;example.com?uid=123456789012345678901`. If\n     *              the group is recovered, this value reverts to `group:{emailid}` and the\n     *              recovered group retains the role in the binding.\n     *           * `domain:{domain}`: The G Suite domain (primary) that represents all the\n     *              users of that domain. For example, `google.com` or `example.com`.\n     *     @type \\Google\\Type\\Expr $condition\n     *           The condition that is associated with this binding.\n     *           If the condition evaluates to `true`, then this binding applies to the\n     *           current request.\n     *           If the condition evaluates to `false`, then this binding does not apply to\n     *           the current request. However, a different role binding might grant the same\n     *           role to one or more of the principals in this binding.\n     *           To learn which resources support conditions in their IAM policies, see the\n     *           [IAM\n     *           documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Role that is assigned to the list of `members`, or principals.\n     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     *\n     * Generated from protobuf field <code>string role = 1;</code>\n     * @return string\n     */\n    public function getRole()\n    {\n        return $this->role;\n    }\n\n    /**\n     * Role that is assigned to the list of `members`, or principals.\n     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     *\n     * Generated from protobuf field <code>string role = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRole($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->role = $var;\n\n        return $this;\n    }\n\n    /**\n     * Specifies the principals requesting access for a Google Cloud resource.\n     * `members` can have the following values:\n     * * `allUsers`: A special identifier that represents anyone who is\n     *    on the internet; with or without a Google account.\n     * * `allAuthenticatedUsers`: A special identifier that represents anyone\n     *    who is authenticated with a Google account or a service account.\n     * * `user:{emailid}`: An email address that represents a specific Google\n     *    account. For example, `alice&#64;example.com` .\n     * * `serviceAccount:{emailid}`: An email address that represents a service\n     *    account. For example, `my-other-app&#64;appspot.gserviceaccount.com`.\n     * * `group:{emailid}`: An email address that represents a Google group.\n     *    For example, `admins&#64;example.com`.\n     * * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *    identifier) representing a user that has been recently deleted. For\n     *    example, `alice&#64;example.com?uid=123456789012345678901`. If the user is\n     *    recovered, this value reverts to `user:{emailid}` and the recovered user\n     *    retains the role in the binding.\n     * * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus\n     *    unique identifier) representing a service account that has been recently\n     *    deleted. For example,\n     *    `my-other-app&#64;appspot.gserviceaccount.com?uid=123456789012345678901`.\n     *    If the service account is undeleted, this value reverts to\n     *    `serviceAccount:{emailid}` and the undeleted service account retains the\n     *    role in the binding.\n     * * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *    identifier) representing a Google group that has been recently\n     *    deleted. For example, `admins&#64;example.com?uid=123456789012345678901`. If\n     *    the group is recovered, this value reverts to `group:{emailid}` and the\n     *    recovered group retains the role in the binding.\n     * * `domain:{domain}`: The G Suite domain (primary) that represents all the\n     *    users of that domain. For example, `google.com` or `example.com`.\n     *\n     * Generated from protobuf field <code>repeated string members = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMembers()\n    {\n        return $this->members;\n    }\n\n    /**\n     * Specifies the principals requesting access for a Google Cloud resource.\n     * `members` can have the following values:\n     * * `allUsers`: A special identifier that represents anyone who is\n     *    on the internet; with or without a Google account.\n     * * `allAuthenticatedUsers`: A special identifier that represents anyone\n     *    who is authenticated with a Google account or a service account.\n     * * `user:{emailid}`: An email address that represents a specific Google\n     *    account. For example, `alice&#64;example.com` .\n     * * `serviceAccount:{emailid}`: An email address that represents a service\n     *    account. For example, `my-other-app&#64;appspot.gserviceaccount.com`.\n     * * `group:{emailid}`: An email address that represents a Google group.\n     *    For example, `admins&#64;example.com`.\n     * * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *    identifier) representing a user that has been recently deleted. For\n     *    example, `alice&#64;example.com?uid=123456789012345678901`. If the user is\n     *    recovered, this value reverts to `user:{emailid}` and the recovered user\n     *    retains the role in the binding.\n     * * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus\n     *    unique identifier) representing a service account that has been recently\n     *    deleted. For example,\n     *    `my-other-app&#64;appspot.gserviceaccount.com?uid=123456789012345678901`.\n     *    If the service account is undeleted, this value reverts to\n     *    `serviceAccount:{emailid}` and the undeleted service account retains the\n     *    role in the binding.\n     * * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique\n     *    identifier) representing a Google group that has been recently\n     *    deleted. For example, `admins&#64;example.com?uid=123456789012345678901`. If\n     *    the group is recovered, this value reverts to `group:{emailid}` and the\n     *    recovered group retains the role in the binding.\n     * * `domain:{domain}`: The G Suite domain (primary) that represents all the\n     *    users of that domain. For example, `google.com` or `example.com`.\n     *\n     * Generated from protobuf field <code>repeated string members = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMembers($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->members = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The condition that is associated with this binding.\n     * If the condition evaluates to `true`, then this binding applies to the\n     * current request.\n     * If the condition evaluates to `false`, then this binding does not apply to\n     * the current request. However, a different role binding might grant the same\n     * role to one or more of the principals in this binding.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>.google.type.Expr condition = 3;</code>\n     * @return \\Google\\Type\\Expr|null\n     */\n    public function getCondition()\n    {\n        return $this->condition;\n    }\n\n    public function hasCondition()\n    {\n        return isset($this->condition);\n    }\n\n    public function clearCondition()\n    {\n        unset($this->condition);\n    }\n\n    /**\n     * The condition that is associated with this binding.\n     * If the condition evaluates to `true`, then this binding applies to the\n     * current request.\n     * If the condition evaluates to `false`, then this binding does not apply to\n     * the current request. However, a different role binding might grant the same\n     * role to one or more of the principals in this binding.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>.google.type.Expr condition = 3;</code>\n     * @param \\Google\\Type\\Expr $var\n     * @return $this\n     */\n    public function setCondition($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Type\\Expr::class);\n        $this->condition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/BindingDelta/Action.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1\\BindingDelta;\n\nuse UnexpectedValueException;\n\n/**\n * The type of action performed on a Binding in a policy.\n *\n * Protobuf type <code>google.iam.v1.BindingDelta.Action</code>\n */\nclass Action\n{\n    /**\n     * Unspecified.\n     *\n     * Generated from protobuf enum <code>ACTION_UNSPECIFIED = 0;</code>\n     */\n    const ACTION_UNSPECIFIED = 0;\n    /**\n     * Addition of a Binding.\n     *\n     * Generated from protobuf enum <code>ADD = 1;</code>\n     */\n    const ADD = 1;\n    /**\n     * Removal of a Binding.\n     *\n     * Generated from protobuf enum <code>REMOVE = 2;</code>\n     */\n    const REMOVE = 2;\n\n    private static $valueToName = [\n        self::ACTION_UNSPECIFIED => 'ACTION_UNSPECIFIED',\n        self::ADD => 'ADD',\n        self::REMOVE => 'REMOVE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/BindingDelta.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * One delta entry for Binding. Each individual change (only one member in each\n * entry) to a binding will be a separate entry.\n *\n * Generated from protobuf message <code>google.iam.v1.BindingDelta</code>\n */\nclass BindingDelta extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The action that was performed on a Binding.\n     * Required\n     *\n     * Generated from protobuf field <code>.google.iam.v1.BindingDelta.Action action = 1;</code>\n     */\n    protected $action = 0;\n    /**\n     * Role that is assigned to `members`.\n     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     * Required\n     *\n     * Generated from protobuf field <code>string role = 2;</code>\n     */\n    protected $role = '';\n    /**\n     * A single identity requesting access for a Google Cloud resource.\n     * Follows the same format of Binding.members.\n     * Required\n     *\n     * Generated from protobuf field <code>string member = 3;</code>\n     */\n    protected $member = '';\n    /**\n     * The condition that is associated with this binding.\n     *\n     * Generated from protobuf field <code>.google.type.Expr condition = 4;</code>\n     */\n    protected $condition = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $action\n     *           The action that was performed on a Binding.\n     *           Required\n     *     @type string $role\n     *           Role that is assigned to `members`.\n     *           For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     *           Required\n     *     @type string $member\n     *           A single identity requesting access for a Google Cloud resource.\n     *           Follows the same format of Binding.members.\n     *           Required\n     *     @type \\Google\\Type\\Expr $condition\n     *           The condition that is associated with this binding.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The action that was performed on a Binding.\n     * Required\n     *\n     * Generated from protobuf field <code>.google.iam.v1.BindingDelta.Action action = 1;</code>\n     * @return int\n     */\n    public function getAction()\n    {\n        return $this->action;\n    }\n\n    /**\n     * The action that was performed on a Binding.\n     * Required\n     *\n     * Generated from protobuf field <code>.google.iam.v1.BindingDelta.Action action = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setAction($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Cloud\\Iam\\V1\\BindingDelta\\Action::class);\n        $this->action = $var;\n\n        return $this;\n    }\n\n    /**\n     * Role that is assigned to `members`.\n     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     * Required\n     *\n     * Generated from protobuf field <code>string role = 2;</code>\n     * @return string\n     */\n    public function getRole()\n    {\n        return $this->role;\n    }\n\n    /**\n     * Role that is assigned to `members`.\n     * For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n     * Required\n     *\n     * Generated from protobuf field <code>string role = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRole($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->role = $var;\n\n        return $this;\n    }\n\n    /**\n     * A single identity requesting access for a Google Cloud resource.\n     * Follows the same format of Binding.members.\n     * Required\n     *\n     * Generated from protobuf field <code>string member = 3;</code>\n     * @return string\n     */\n    public function getMember()\n    {\n        return $this->member;\n    }\n\n    /**\n     * A single identity requesting access for a Google Cloud resource.\n     * Follows the same format of Binding.members.\n     * Required\n     *\n     * Generated from protobuf field <code>string member = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMember($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->member = $var;\n\n        return $this;\n    }\n\n    /**\n     * The condition that is associated with this binding.\n     *\n     * Generated from protobuf field <code>.google.type.Expr condition = 4;</code>\n     * @return \\Google\\Type\\Expr|null\n     */\n    public function getCondition()\n    {\n        return $this->condition;\n    }\n\n    public function hasCondition()\n    {\n        return isset($this->condition);\n    }\n\n    public function clearCondition()\n    {\n        unset($this->condition);\n    }\n\n    /**\n     * The condition that is associated with this binding.\n     *\n     * Generated from protobuf field <code>.google.type.Expr condition = 4;</code>\n     * @param \\Google\\Type\\Expr $var\n     * @return $this\n     */\n    public function setCondition($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Type\\Expr::class);\n        $this->condition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/GetIamPolicyRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/iam_policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Request message for `GetIamPolicy` method.\n *\n * Generated from protobuf message <code>google.iam.v1.GetIamPolicyRequest</code>\n */\nclass GetIamPolicyRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * REQUIRED: The resource for which the policy is being requested.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     */\n    protected $resource = '';\n    /**\n     * OPTIONAL: A `GetPolicyOptions` object for specifying options to\n     * `GetIamPolicy`.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.GetPolicyOptions options = 2;</code>\n     */\n    protected $options = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $resource\n     *           REQUIRED: The resource for which the policy is being requested.\n     *           See the operation documentation for the appropriate value for this field.\n     *     @type \\Google\\Cloud\\Iam\\V1\\GetPolicyOptions $options\n     *           OPTIONAL: A `GetPolicyOptions` object for specifying options to\n     *           `GetIamPolicy`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\IamPolicy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * REQUIRED: The resource for which the policy is being requested.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     * @return string\n     */\n    public function getResource()\n    {\n        return $this->resource;\n    }\n\n    /**\n     * REQUIRED: The resource for which the policy is being requested.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * OPTIONAL: A `GetPolicyOptions` object for specifying options to\n     * `GetIamPolicy`.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.GetPolicyOptions options = 2;</code>\n     * @return \\Google\\Cloud\\Iam\\V1\\GetPolicyOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * OPTIONAL: A `GetPolicyOptions` object for specifying options to\n     * `GetIamPolicy`.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.GetPolicyOptions options = 2;</code>\n     * @param \\Google\\Cloud\\Iam\\V1\\GetPolicyOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Cloud\\Iam\\V1\\GetPolicyOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/GetPolicyOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/options.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Encapsulates settings provided to GetIamPolicy.\n *\n * Generated from protobuf message <code>google.iam.v1.GetPolicyOptions</code>\n */\nclass GetPolicyOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Optional. The maximum policy version that will be used to format the\n     * policy.\n     * Valid values are 0, 1, and 3. Requests specifying an invalid value will be\n     * rejected.\n     * Requests for policies with any conditional role bindings must specify\n     * version 3. Policies with no conditional role bindings may specify any valid\n     * value or leave the field unset.\n     * The policy in the response might use the policy version that you specified,\n     * or it might use a lower policy version. For example, if you specify version\n     * 3, but the policy has no conditional role bindings, the response uses\n     * version 1.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>int32 requested_policy_version = 1;</code>\n     */\n    protected $requested_policy_version = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $requested_policy_version\n     *           Optional. The maximum policy version that will be used to format the\n     *           policy.\n     *           Valid values are 0, 1, and 3. Requests specifying an invalid value will be\n     *           rejected.\n     *           Requests for policies with any conditional role bindings must specify\n     *           version 3. Policies with no conditional role bindings may specify any valid\n     *           value or leave the field unset.\n     *           The policy in the response might use the policy version that you specified,\n     *           or it might use a lower policy version. For example, if you specify version\n     *           3, but the policy has no conditional role bindings, the response uses\n     *           version 1.\n     *           To learn which resources support conditions in their IAM policies, see the\n     *           [IAM\n     *           documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Options::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Optional. The maximum policy version that will be used to format the\n     * policy.\n     * Valid values are 0, 1, and 3. Requests specifying an invalid value will be\n     * rejected.\n     * Requests for policies with any conditional role bindings must specify\n     * version 3. Policies with no conditional role bindings may specify any valid\n     * value or leave the field unset.\n     * The policy in the response might use the policy version that you specified,\n     * or it might use a lower policy version. For example, if you specify version\n     * 3, but the policy has no conditional role bindings, the response uses\n     * version 1.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>int32 requested_policy_version = 1;</code>\n     * @return int\n     */\n    public function getRequestedPolicyVersion()\n    {\n        return $this->requested_policy_version;\n    }\n\n    /**\n     * Optional. The maximum policy version that will be used to format the\n     * policy.\n     * Valid values are 0, 1, and 3. Requests specifying an invalid value will be\n     * rejected.\n     * Requests for policies with any conditional role bindings must specify\n     * version 3. Policies with no conditional role bindings may specify any valid\n     * value or leave the field unset.\n     * The policy in the response might use the policy version that you specified,\n     * or it might use a lower policy version. For example, if you specify version\n     * 3, but the policy has no conditional role bindings, the response uses\n     * version 1.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>int32 requested_policy_version = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setRequestedPolicyVersion($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->requested_policy_version = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/Policy.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * An Identity and Access Management (IAM) policy, which specifies access\n * controls for Google Cloud resources.\n * A `Policy` is a collection of `bindings`. A `binding` binds one or more\n * `members`, or principals, to a single `role`. Principals can be user\n * accounts, service accounts, Google groups, and domains (such as G Suite). A\n * `role` is a named list of permissions; each `role` can be an IAM predefined\n * role or a user-created custom role.\n * For some types of Google Cloud resources, a `binding` can also specify a\n * `condition`, which is a logical expression that allows access to a resource\n * only if the expression evaluates to `true`. A condition can add constraints\n * based on attributes of the request, the resource, or both. To learn which\n * resources support conditions in their IAM policies, see the\n * [IAM\n * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n * **JSON example:**\n * ```\n *     {\n *       \"bindings\": [\n *         {\n *           \"role\": \"roles/resourcemanager.organizationAdmin\",\n *           \"members\": [\n *             \"user:mike&#64;example.com\",\n *             \"group:admins&#64;example.com\",\n *             \"domain:google.com\",\n *             \"serviceAccount:my-project-id&#64;appspot.gserviceaccount.com\"\n *           ]\n *         },\n *         {\n *           \"role\": \"roles/resourcemanager.organizationViewer\",\n *           \"members\": [\n *             \"user:eve&#64;example.com\"\n *           ],\n *           \"condition\": {\n *             \"title\": \"expirable access\",\n *             \"description\": \"Does not grant access after Sep 2020\",\n *             \"expression\": \"request.time <\n *             timestamp('2020-10-01T00:00:00.000Z')\",\n *           }\n *         }\n *       ],\n *       \"etag\": \"BwWWja0YfJA=\",\n *       \"version\": 3\n *     }\n * ```\n * **YAML example:**\n * ```\n *     bindings:\n *     - members:\n *       - user:mike&#64;example.com\n *       - group:admins&#64;example.com\n *       - domain:google.com\n *       - serviceAccount:my-project-id&#64;appspot.gserviceaccount.com\n *       role: roles/resourcemanager.organizationAdmin\n *     - members:\n *       - user:eve&#64;example.com\n *       role: roles/resourcemanager.organizationViewer\n *       condition:\n *         title: expirable access\n *         description: Does not grant access after Sep 2020\n *         expression: request.time < timestamp('2020-10-01T00:00:00.000Z')\n *     etag: BwWWja0YfJA=\n *     version: 3\n * ```\n * For a description of IAM and its features, see the\n * [IAM documentation](https://cloud.google.com/iam/docs/).\n *\n * Generated from protobuf message <code>google.iam.v1.Policy</code>\n */\nclass Policy extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Specifies the format of the policy.\n     * Valid values are `0`, `1`, and `3`. Requests that specify an invalid value\n     * are rejected.\n     * Any operation that affects conditional role bindings must specify version\n     * `3`. This requirement applies to the following operations:\n     * * Getting a policy that includes a conditional role binding\n     * * Adding a conditional role binding to a policy\n     * * Changing a conditional role binding in a policy\n     * * Removing any role binding, with or without a condition, from a policy\n     *   that includes conditions\n     * **Important:** If you use IAM Conditions, you must include the `etag` field\n     * whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     * you to overwrite a version `3` policy with a version `1` policy, and all of\n     * the conditions in the version `3` policy are lost.\n     * If a policy does not include any conditions, operations on that policy may\n     * specify any valid version or leave the field unset.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>int32 version = 1;</code>\n     */\n    protected $version = 0;\n    /**\n     * Associates a list of `members`, or principals, with a `role`. Optionally,\n     * may specify a `condition` that determines how and when the `bindings` are\n     * applied. Each of the `bindings` must contain at least one principal.\n     * The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250\n     * of these principals can be Google groups. Each occurrence of a principal\n     * counts towards these limits. For example, if the `bindings` grant 50\n     * different roles to `user:alice&#64;example.com`, and not to any other\n     * principal, then you can add another 1,450 principals to the `bindings` in\n     * the `Policy`.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.Binding bindings = 4;</code>\n     */\n    private $bindings;\n    /**\n     * Specifies cloud audit logging configuration for this policy.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditConfig audit_configs = 6;</code>\n     */\n    private $audit_configs;\n    /**\n     * `etag` is used for optimistic concurrency control as a way to help\n     * prevent simultaneous updates of a policy from overwriting each other.\n     * It is strongly suggested that systems make use of the `etag` in the\n     * read-modify-write cycle to perform policy updates in order to avoid race\n     * conditions: An `etag` is returned in the response to `getIamPolicy`, and\n     * systems are expected to put that etag in the request to `setIamPolicy` to\n     * ensure that their change will be applied to the same version of the policy.\n     * **Important:** If you use IAM Conditions, you must include the `etag` field\n     * whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     * you to overwrite a version `3` policy with a version `1` policy, and all of\n     * the conditions in the version `3` policy are lost.\n     *\n     * Generated from protobuf field <code>bytes etag = 3;</code>\n     */\n    protected $etag = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $version\n     *           Specifies the format of the policy.\n     *           Valid values are `0`, `1`, and `3`. Requests that specify an invalid value\n     *           are rejected.\n     *           Any operation that affects conditional role bindings must specify version\n     *           `3`. This requirement applies to the following operations:\n     *           * Getting a policy that includes a conditional role binding\n     *           * Adding a conditional role binding to a policy\n     *           * Changing a conditional role binding in a policy\n     *           * Removing any role binding, with or without a condition, from a policy\n     *             that includes conditions\n     *           **Important:** If you use IAM Conditions, you must include the `etag` field\n     *           whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     *           you to overwrite a version `3` policy with a version `1` policy, and all of\n     *           the conditions in the version `3` policy are lost.\n     *           If a policy does not include any conditions, operations on that policy may\n     *           specify any valid version or leave the field unset.\n     *           To learn which resources support conditions in their IAM policies, see the\n     *           [IAM\n     *           documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *     @type array<\\Google\\Cloud\\Iam\\V1\\Binding>|\\Google\\Protobuf\\Internal\\RepeatedField $bindings\n     *           Associates a list of `members`, or principals, with a `role`. Optionally,\n     *           may specify a `condition` that determines how and when the `bindings` are\n     *           applied. Each of the `bindings` must contain at least one principal.\n     *           The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250\n     *           of these principals can be Google groups. Each occurrence of a principal\n     *           counts towards these limits. For example, if the `bindings` grant 50\n     *           different roles to `user:alice&#64;example.com`, and not to any other\n     *           principal, then you can add another 1,450 principals to the `bindings` in\n     *           the `Policy`.\n     *     @type array<\\Google\\Cloud\\Iam\\V1\\AuditConfig>|\\Google\\Protobuf\\Internal\\RepeatedField $audit_configs\n     *           Specifies cloud audit logging configuration for this policy.\n     *     @type string $etag\n     *           `etag` is used for optimistic concurrency control as a way to help\n     *           prevent simultaneous updates of a policy from overwriting each other.\n     *           It is strongly suggested that systems make use of the `etag` in the\n     *           read-modify-write cycle to perform policy updates in order to avoid race\n     *           conditions: An `etag` is returned in the response to `getIamPolicy`, and\n     *           systems are expected to put that etag in the request to `setIamPolicy` to\n     *           ensure that their change will be applied to the same version of the policy.\n     *           **Important:** If you use IAM Conditions, you must include the `etag` field\n     *           whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     *           you to overwrite a version `3` policy with a version `1` policy, and all of\n     *           the conditions in the version `3` policy are lost.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Specifies the format of the policy.\n     * Valid values are `0`, `1`, and `3`. Requests that specify an invalid value\n     * are rejected.\n     * Any operation that affects conditional role bindings must specify version\n     * `3`. This requirement applies to the following operations:\n     * * Getting a policy that includes a conditional role binding\n     * * Adding a conditional role binding to a policy\n     * * Changing a conditional role binding in a policy\n     * * Removing any role binding, with or without a condition, from a policy\n     *   that includes conditions\n     * **Important:** If you use IAM Conditions, you must include the `etag` field\n     * whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     * you to overwrite a version `3` policy with a version `1` policy, and all of\n     * the conditions in the version `3` policy are lost.\n     * If a policy does not include any conditions, operations on that policy may\n     * specify any valid version or leave the field unset.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>int32 version = 1;</code>\n     * @return int\n     */\n    public function getVersion()\n    {\n        return $this->version;\n    }\n\n    /**\n     * Specifies the format of the policy.\n     * Valid values are `0`, `1`, and `3`. Requests that specify an invalid value\n     * are rejected.\n     * Any operation that affects conditional role bindings must specify version\n     * `3`. This requirement applies to the following operations:\n     * * Getting a policy that includes a conditional role binding\n     * * Adding a conditional role binding to a policy\n     * * Changing a conditional role binding in a policy\n     * * Removing any role binding, with or without a condition, from a policy\n     *   that includes conditions\n     * **Important:** If you use IAM Conditions, you must include the `etag` field\n     * whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     * you to overwrite a version `3` policy with a version `1` policy, and all of\n     * the conditions in the version `3` policy are lost.\n     * If a policy does not include any conditions, operations on that policy may\n     * specify any valid version or leave the field unset.\n     * To learn which resources support conditions in their IAM policies, see the\n     * [IAM\n     * documentation](https://cloud.google.com/iam/help/conditions/resource-policies).\n     *\n     * Generated from protobuf field <code>int32 version = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setVersion($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->version = $var;\n\n        return $this;\n    }\n\n    /**\n     * Associates a list of `members`, or principals, with a `role`. Optionally,\n     * may specify a `condition` that determines how and when the `bindings` are\n     * applied. Each of the `bindings` must contain at least one principal.\n     * The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250\n     * of these principals can be Google groups. Each occurrence of a principal\n     * counts towards these limits. For example, if the `bindings` grant 50\n     * different roles to `user:alice&#64;example.com`, and not to any other\n     * principal, then you can add another 1,450 principals to the `bindings` in\n     * the `Policy`.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.Binding bindings = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getBindings()\n    {\n        return $this->bindings;\n    }\n\n    /**\n     * Associates a list of `members`, or principals, with a `role`. Optionally,\n     * may specify a `condition` that determines how and when the `bindings` are\n     * applied. Each of the `bindings` must contain at least one principal.\n     * The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250\n     * of these principals can be Google groups. Each occurrence of a principal\n     * counts towards these limits. For example, if the `bindings` grant 50\n     * different roles to `user:alice&#64;example.com`, and not to any other\n     * principal, then you can add another 1,450 principals to the `bindings` in\n     * the `Policy`.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.Binding bindings = 4;</code>\n     * @param array<\\Google\\Cloud\\Iam\\V1\\Binding>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setBindings($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Cloud\\Iam\\V1\\Binding::class);\n        $this->bindings = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Specifies cloud audit logging configuration for this policy.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditConfig audit_configs = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAuditConfigs()\n    {\n        return $this->audit_configs;\n    }\n\n    /**\n     * Specifies cloud audit logging configuration for this policy.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditConfig audit_configs = 6;</code>\n     * @param array<\\Google\\Cloud\\Iam\\V1\\AuditConfig>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAuditConfigs($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Cloud\\Iam\\V1\\AuditConfig::class);\n        $this->audit_configs = $arr;\n\n        return $this;\n    }\n\n    /**\n     * `etag` is used for optimistic concurrency control as a way to help\n     * prevent simultaneous updates of a policy from overwriting each other.\n     * It is strongly suggested that systems make use of the `etag` in the\n     * read-modify-write cycle to perform policy updates in order to avoid race\n     * conditions: An `etag` is returned in the response to `getIamPolicy`, and\n     * systems are expected to put that etag in the request to `setIamPolicy` to\n     * ensure that their change will be applied to the same version of the policy.\n     * **Important:** If you use IAM Conditions, you must include the `etag` field\n     * whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     * you to overwrite a version `3` policy with a version `1` policy, and all of\n     * the conditions in the version `3` policy are lost.\n     *\n     * Generated from protobuf field <code>bytes etag = 3;</code>\n     * @return string\n     */\n    public function getEtag()\n    {\n        return $this->etag;\n    }\n\n    /**\n     * `etag` is used for optimistic concurrency control as a way to help\n     * prevent simultaneous updates of a policy from overwriting each other.\n     * It is strongly suggested that systems make use of the `etag` in the\n     * read-modify-write cycle to perform policy updates in order to avoid race\n     * conditions: An `etag` is returned in the response to `getIamPolicy`, and\n     * systems are expected to put that etag in the request to `setIamPolicy` to\n     * ensure that their change will be applied to the same version of the policy.\n     * **Important:** If you use IAM Conditions, you must include the `etag` field\n     * whenever you call `setIamPolicy`. If you omit this field, then IAM allows\n     * you to overwrite a version `3` policy with a version `1` policy, and all of\n     * the conditions in the version `3` policy are lost.\n     *\n     * Generated from protobuf field <code>bytes etag = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setEtag($var)\n    {\n        GPBUtil::checkString($var, False);\n        $this->etag = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/PolicyDelta.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The difference delta between two policies.\n *\n * Generated from protobuf message <code>google.iam.v1.PolicyDelta</code>\n */\nclass PolicyDelta extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The delta for Bindings between two policies.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.BindingDelta binding_deltas = 1;</code>\n     */\n    private $binding_deltas;\n    /**\n     * The delta for AuditConfigs between two policies.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditConfigDelta audit_config_deltas = 2;</code>\n     */\n    private $audit_config_deltas;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Cloud\\Iam\\V1\\BindingDelta>|\\Google\\Protobuf\\Internal\\RepeatedField $binding_deltas\n     *           The delta for Bindings between two policies.\n     *     @type array<\\Google\\Cloud\\Iam\\V1\\AuditConfigDelta>|\\Google\\Protobuf\\Internal\\RepeatedField $audit_config_deltas\n     *           The delta for AuditConfigs between two policies.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Policy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The delta for Bindings between two policies.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.BindingDelta binding_deltas = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getBindingDeltas()\n    {\n        return $this->binding_deltas;\n    }\n\n    /**\n     * The delta for Bindings between two policies.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.BindingDelta binding_deltas = 1;</code>\n     * @param array<\\Google\\Cloud\\Iam\\V1\\BindingDelta>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setBindingDeltas($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Cloud\\Iam\\V1\\BindingDelta::class);\n        $this->binding_deltas = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The delta for AuditConfigs between two policies.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditConfigDelta audit_config_deltas = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAuditConfigDeltas()\n    {\n        return $this->audit_config_deltas;\n    }\n\n    /**\n     * The delta for AuditConfigs between two policies.\n     *\n     * Generated from protobuf field <code>repeated .google.iam.v1.AuditConfigDelta audit_config_deltas = 2;</code>\n     * @param array<\\Google\\Cloud\\Iam\\V1\\AuditConfigDelta>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAuditConfigDeltas($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Cloud\\Iam\\V1\\AuditConfigDelta::class);\n        $this->audit_config_deltas = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/ResourcePolicyMember.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/resource_policy_member.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Output-only policy member strings of a Google Cloud resource's built-in\n * identity.\n *\n * Generated from protobuf message <code>google.iam.v1.ResourcePolicyMember</code>\n */\nclass ResourcePolicyMember extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * IAM policy binding member referring to a Google Cloud resource by\n     * user-assigned name (https://google.aip.dev/122). If a resource is deleted\n     * and recreated with the same name, the binding will be applicable to the new\n     * resource.\n     * Example:\n     * `principal://parametermanager.googleapis.com/projects/12345/name/locations/us-central1-a/parameters/my-parameter`\n     *\n     * Generated from protobuf field <code>string iam_policy_name_principal = 1 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>\n     */\n    protected $iam_policy_name_principal = '';\n    /**\n     * IAM policy binding member referring to a Google Cloud resource by\n     * system-assigned unique identifier (https://google.aip.dev/148#uid). If a\n     * resource is deleted and recreated with the same name, the binding will not\n     * be applicable to the new resource\n     * Example:\n     * `principal://parametermanager.googleapis.com/projects/12345/uid/locations/us-central1-a/parameters/a918fed5`\n     *\n     * Generated from protobuf field <code>string iam_policy_uid_principal = 2 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>\n     */\n    protected $iam_policy_uid_principal = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $iam_policy_name_principal\n     *           IAM policy binding member referring to a Google Cloud resource by\n     *           user-assigned name (https://google.aip.dev/122). If a resource is deleted\n     *           and recreated with the same name, the binding will be applicable to the new\n     *           resource.\n     *           Example:\n     *           `principal://parametermanager.googleapis.com/projects/12345/name/locations/us-central1-a/parameters/my-parameter`\n     *     @type string $iam_policy_uid_principal\n     *           IAM policy binding member referring to a Google Cloud resource by\n     *           system-assigned unique identifier (https://google.aip.dev/148#uid). If a\n     *           resource is deleted and recreated with the same name, the binding will not\n     *           be applicable to the new resource\n     *           Example:\n     *           `principal://parametermanager.googleapis.com/projects/12345/uid/locations/us-central1-a/parameters/a918fed5`\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\ResourcePolicyMember::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * IAM policy binding member referring to a Google Cloud resource by\n     * user-assigned name (https://google.aip.dev/122). If a resource is deleted\n     * and recreated with the same name, the binding will be applicable to the new\n     * resource.\n     * Example:\n     * `principal://parametermanager.googleapis.com/projects/12345/name/locations/us-central1-a/parameters/my-parameter`\n     *\n     * Generated from protobuf field <code>string iam_policy_name_principal = 1 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>\n     * @return string\n     */\n    public function getIamPolicyNamePrincipal()\n    {\n        return $this->iam_policy_name_principal;\n    }\n\n    /**\n     * IAM policy binding member referring to a Google Cloud resource by\n     * user-assigned name (https://google.aip.dev/122). If a resource is deleted\n     * and recreated with the same name, the binding will be applicable to the new\n     * resource.\n     * Example:\n     * `principal://parametermanager.googleapis.com/projects/12345/name/locations/us-central1-a/parameters/my-parameter`\n     *\n     * Generated from protobuf field <code>string iam_policy_name_principal = 1 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setIamPolicyNamePrincipal($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->iam_policy_name_principal = $var;\n\n        return $this;\n    }\n\n    /**\n     * IAM policy binding member referring to a Google Cloud resource by\n     * system-assigned unique identifier (https://google.aip.dev/148#uid). If a\n     * resource is deleted and recreated with the same name, the binding will not\n     * be applicable to the new resource\n     * Example:\n     * `principal://parametermanager.googleapis.com/projects/12345/uid/locations/us-central1-a/parameters/a918fed5`\n     *\n     * Generated from protobuf field <code>string iam_policy_uid_principal = 2 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>\n     * @return string\n     */\n    public function getIamPolicyUidPrincipal()\n    {\n        return $this->iam_policy_uid_principal;\n    }\n\n    /**\n     * IAM policy binding member referring to a Google Cloud resource by\n     * system-assigned unique identifier (https://google.aip.dev/148#uid). If a\n     * resource is deleted and recreated with the same name, the binding will not\n     * be applicable to the new resource\n     * Example:\n     * `principal://parametermanager.googleapis.com/projects/12345/uid/locations/us-central1-a/parameters/a918fed5`\n     *\n     * Generated from protobuf field <code>string iam_policy_uid_principal = 2 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setIamPolicyUidPrincipal($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->iam_policy_uid_principal = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/SetIamPolicyRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/iam_policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Request message for `SetIamPolicy` method.\n *\n * Generated from protobuf message <code>google.iam.v1.SetIamPolicyRequest</code>\n */\nclass SetIamPolicyRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * REQUIRED: The resource for which the policy is being specified.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     */\n    protected $resource = '';\n    /**\n     * REQUIRED: The complete policy to be applied to the `resource`. The size of\n     * the policy is limited to a few 10s of KB. An empty policy is a\n     * valid policy but certain Cloud Platform services (such as Projects)\n     * might reject them.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.Policy policy = 2 [(.google.api.field_behavior) = REQUIRED];</code>\n     */\n    protected $policy = null;\n    /**\n     * OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\n     * the fields in the mask will be modified. If no mask is provided, the\n     * following default mask is used:\n     * `paths: \"bindings, etag\"`\n     *\n     * Generated from protobuf field <code>.google.protobuf.FieldMask update_mask = 3;</code>\n     */\n    protected $update_mask = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $resource\n     *           REQUIRED: The resource for which the policy is being specified.\n     *           See the operation documentation for the appropriate value for this field.\n     *     @type \\Google\\Cloud\\Iam\\V1\\Policy $policy\n     *           REQUIRED: The complete policy to be applied to the `resource`. The size of\n     *           the policy is limited to a few 10s of KB. An empty policy is a\n     *           valid policy but certain Cloud Platform services (such as Projects)\n     *           might reject them.\n     *     @type \\Google\\Protobuf\\FieldMask $update_mask\n     *           OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\n     *           the fields in the mask will be modified. If no mask is provided, the\n     *           following default mask is used:\n     *           `paths: \"bindings, etag\"`\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\IamPolicy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * REQUIRED: The resource for which the policy is being specified.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     * @return string\n     */\n    public function getResource()\n    {\n        return $this->resource;\n    }\n\n    /**\n     * REQUIRED: The resource for which the policy is being specified.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * REQUIRED: The complete policy to be applied to the `resource`. The size of\n     * the policy is limited to a few 10s of KB. An empty policy is a\n     * valid policy but certain Cloud Platform services (such as Projects)\n     * might reject them.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.Policy policy = 2 [(.google.api.field_behavior) = REQUIRED];</code>\n     * @return \\Google\\Cloud\\Iam\\V1\\Policy|null\n     */\n    public function getPolicy()\n    {\n        return $this->policy;\n    }\n\n    public function hasPolicy()\n    {\n        return isset($this->policy);\n    }\n\n    public function clearPolicy()\n    {\n        unset($this->policy);\n    }\n\n    /**\n     * REQUIRED: The complete policy to be applied to the `resource`. The size of\n     * the policy is limited to a few 10s of KB. An empty policy is a\n     * valid policy but certain Cloud Platform services (such as Projects)\n     * might reject them.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.Policy policy = 2 [(.google.api.field_behavior) = REQUIRED];</code>\n     * @param \\Google\\Cloud\\Iam\\V1\\Policy $var\n     * @return $this\n     */\n    public function setPolicy($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Cloud\\Iam\\V1\\Policy::class);\n        $this->policy = $var;\n\n        return $this;\n    }\n\n    /**\n     * OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\n     * the fields in the mask will be modified. If no mask is provided, the\n     * following default mask is used:\n     * `paths: \"bindings, etag\"`\n     *\n     * Generated from protobuf field <code>.google.protobuf.FieldMask update_mask = 3;</code>\n     * @return \\Google\\Protobuf\\FieldMask|null\n     */\n    public function getUpdateMask()\n    {\n        return $this->update_mask;\n    }\n\n    public function hasUpdateMask()\n    {\n        return isset($this->update_mask);\n    }\n\n    public function clearUpdateMask()\n    {\n        unset($this->update_mask);\n    }\n\n    /**\n     * OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\n     * the fields in the mask will be modified. If no mask is provided, the\n     * following default mask is used:\n     * `paths: \"bindings, etag\"`\n     *\n     * Generated from protobuf field <code>.google.protobuf.FieldMask update_mask = 3;</code>\n     * @param \\Google\\Protobuf\\FieldMask $var\n     * @return $this\n     */\n    public function setUpdateMask($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\FieldMask::class);\n        $this->update_mask = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/TestIamPermissionsRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/iam_policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Request message for `TestIamPermissions` method.\n *\n * Generated from protobuf message <code>google.iam.v1.TestIamPermissionsRequest</code>\n */\nclass TestIamPermissionsRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * REQUIRED: The resource for which the policy detail is being requested.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     */\n    protected $resource = '';\n    /**\n     * The set of permissions to check for the `resource`. Permissions with\n     * wildcards (such as '*' or 'storage.*') are not allowed. For more\n     * information see\n     * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n     *\n     * Generated from protobuf field <code>repeated string permissions = 2 [(.google.api.field_behavior) = REQUIRED];</code>\n     */\n    private $permissions;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $resource\n     *           REQUIRED: The resource for which the policy detail is being requested.\n     *           See the operation documentation for the appropriate value for this field.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $permissions\n     *           The set of permissions to check for the `resource`. Permissions with\n     *           wildcards (such as '*' or 'storage.*') are not allowed. For more\n     *           information see\n     *           [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\IamPolicy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * REQUIRED: The resource for which the policy detail is being requested.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     * @return string\n     */\n    public function getResource()\n    {\n        return $this->resource;\n    }\n\n    /**\n     * REQUIRED: The resource for which the policy detail is being requested.\n     * See the operation documentation for the appropriate value for this field.\n     *\n     * Generated from protobuf field <code>string resource = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = {</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * The set of permissions to check for the `resource`. Permissions with\n     * wildcards (such as '*' or 'storage.*') are not allowed. For more\n     * information see\n     * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n     *\n     * Generated from protobuf field <code>repeated string permissions = 2 [(.google.api.field_behavior) = REQUIRED];</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getPermissions()\n    {\n        return $this->permissions;\n    }\n\n    /**\n     * The set of permissions to check for the `resource`. Permissions with\n     * wildcards (such as '*' or 'storage.*') are not allowed. For more\n     * information see\n     * [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n     *\n     * Generated from protobuf field <code>repeated string permissions = 2 [(.google.api.field_behavior) = REQUIRED];</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setPermissions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->permissions = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Iam/V1/TestIamPermissionsResponse.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/iam_policy.proto\n\nnamespace Google\\Cloud\\Iam\\V1;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Response message for `TestIamPermissions` method.\n *\n * Generated from protobuf message <code>google.iam.v1.TestIamPermissionsResponse</code>\n */\nclass TestIamPermissionsResponse extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A subset of `TestPermissionsRequest.permissions` that the caller is\n     * allowed.\n     *\n     * Generated from protobuf field <code>repeated string permissions = 1;</code>\n     */\n    private $permissions;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $permissions\n     *           A subset of `TestPermissionsRequest.permissions` that the caller is\n     *           allowed.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\IamPolicy::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A subset of `TestPermissionsRequest.permissions` that the caller is\n     * allowed.\n     *\n     * Generated from protobuf field <code>repeated string permissions = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getPermissions()\n    {\n        return $this->permissions;\n    }\n\n    /**\n     * A subset of `TestPermissionsRequest.permissions` that the caller is\n     * allowed.\n     *\n     * Generated from protobuf field <code>repeated string permissions = 1;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setPermissions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->permissions = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Location/GetLocationRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/cloud/location/locations.proto\n\nnamespace Google\\Cloud\\Location;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for [Locations.GetLocation][google.cloud.location.Locations.GetLocation].\n *\n * Generated from protobuf message <code>google.cloud.location.GetLocationRequest</code>\n */\nclass GetLocationRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Resource name for the location.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Resource name for the location.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Cloud\\Location\\Locations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Resource name for the location.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Resource name for the location.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Location/ListLocationsRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/cloud/location/locations.proto\n\nnamespace Google\\Cloud\\Location;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for [Locations.ListLocations][google.cloud.location.Locations.ListLocations].\n *\n * Generated from protobuf message <code>google.cloud.location.ListLocationsRequest</code>\n */\nclass ListLocationsRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The resource that owns the locations collection, if applicable.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The standard list filter.\n     *\n     * Generated from protobuf field <code>string filter = 2;</code>\n     */\n    protected $filter = '';\n    /**\n     * The standard list page size.\n     *\n     * Generated from protobuf field <code>int32 page_size = 3;</code>\n     */\n    protected $page_size = 0;\n    /**\n     * The standard list page token.\n     *\n     * Generated from protobuf field <code>string page_token = 4;</code>\n     */\n    protected $page_token = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The resource that owns the locations collection, if applicable.\n     *     @type string $filter\n     *           The standard list filter.\n     *     @type int $page_size\n     *           The standard list page size.\n     *     @type string $page_token\n     *           The standard list page token.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Cloud\\Location\\Locations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The resource that owns the locations collection, if applicable.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The resource that owns the locations collection, if applicable.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The standard list filter.\n     *\n     * Generated from protobuf field <code>string filter = 2;</code>\n     * @return string\n     */\n    public function getFilter()\n    {\n        return $this->filter;\n    }\n\n    /**\n     * The standard list filter.\n     *\n     * Generated from protobuf field <code>string filter = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setFilter($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->filter = $var;\n\n        return $this;\n    }\n\n    /**\n     * The standard list page size.\n     *\n     * Generated from protobuf field <code>int32 page_size = 3;</code>\n     * @return int\n     */\n    public function getPageSize()\n    {\n        return $this->page_size;\n    }\n\n    /**\n     * The standard list page size.\n     *\n     * Generated from protobuf field <code>int32 page_size = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setPageSize($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->page_size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The standard list page token.\n     *\n     * Generated from protobuf field <code>string page_token = 4;</code>\n     * @return string\n     */\n    public function getPageToken()\n    {\n        return $this->page_token;\n    }\n\n    /**\n     * The standard list page token.\n     *\n     * Generated from protobuf field <code>string page_token = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPageToken($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->page_token = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Location/ListLocationsResponse.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/cloud/location/locations.proto\n\nnamespace Google\\Cloud\\Location;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The response message for [Locations.ListLocations][google.cloud.location.Locations.ListLocations].\n *\n * Generated from protobuf message <code>google.cloud.location.ListLocationsResponse</code>\n */\nclass ListLocationsResponse extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of locations that matches the specified filter in the request.\n     *\n     * Generated from protobuf field <code>repeated .google.cloud.location.Location locations = 1;</code>\n     */\n    private $locations;\n    /**\n     * The standard List next-page token.\n     *\n     * Generated from protobuf field <code>string next_page_token = 2;</code>\n     */\n    protected $next_page_token = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Cloud\\Location\\Location>|\\Google\\Protobuf\\Internal\\RepeatedField $locations\n     *           A list of locations that matches the specified filter in the request.\n     *     @type string $next_page_token\n     *           The standard List next-page token.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Cloud\\Location\\Locations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of locations that matches the specified filter in the request.\n     *\n     * Generated from protobuf field <code>repeated .google.cloud.location.Location locations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLocations()\n    {\n        return $this->locations;\n    }\n\n    /**\n     * A list of locations that matches the specified filter in the request.\n     *\n     * Generated from protobuf field <code>repeated .google.cloud.location.Location locations = 1;</code>\n     * @param array<\\Google\\Cloud\\Location\\Location>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLocations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Cloud\\Location\\Location::class);\n        $this->locations = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The standard List next-page token.\n     *\n     * Generated from protobuf field <code>string next_page_token = 2;</code>\n     * @return string\n     */\n    public function getNextPageToken()\n    {\n        return $this->next_page_token;\n    }\n\n    /**\n     * The standard List next-page token.\n     *\n     * Generated from protobuf field <code>string next_page_token = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNextPageToken($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->next_page_token = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Location/Location.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/cloud/location/locations.proto\n\nnamespace Google\\Cloud\\Location;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A resource that represents Google Cloud Platform location.\n *\n * Generated from protobuf message <code>google.cloud.location.Location</code>\n */\nclass Location extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Resource name for the location, which may vary between implementations.\n     * For example: `\"projects/example-project/locations/us-east1\"`\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The canonical id for this location. For example: `\"us-east1\"`.\n     *\n     * Generated from protobuf field <code>string location_id = 4;</code>\n     */\n    protected $location_id = '';\n    /**\n     * The friendly name for this location, typically a nearby city name.\n     * For example, \"Tokyo\".\n     *\n     * Generated from protobuf field <code>string display_name = 5;</code>\n     */\n    protected $display_name = '';\n    /**\n     * Cross-service attributes for the location. For example\n     *     {\"cloud.googleapis.com/region\": \"us-east1\"}\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     */\n    private $labels;\n    /**\n     * Service-specific metadata. For example the available capacity at the given\n     * location.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any metadata = 3;</code>\n     */\n    protected $metadata = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Resource name for the location, which may vary between implementations.\n     *           For example: `\"projects/example-project/locations/us-east1\"`\n     *     @type string $location_id\n     *           The canonical id for this location. For example: `\"us-east1\"`.\n     *     @type string $display_name\n     *           The friendly name for this location, typically a nearby city name.\n     *           For example, \"Tokyo\".\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $labels\n     *           Cross-service attributes for the location. For example\n     *               {\"cloud.googleapis.com/region\": \"us-east1\"}\n     *     @type \\Google\\Protobuf\\Any $metadata\n     *           Service-specific metadata. For example the available capacity at the given\n     *           location.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Cloud\\Location\\Locations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Resource name for the location, which may vary between implementations.\n     * For example: `\"projects/example-project/locations/us-east1\"`\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Resource name for the location, which may vary between implementations.\n     * For example: `\"projects/example-project/locations/us-east1\"`\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The canonical id for this location. For example: `\"us-east1\"`.\n     *\n     * Generated from protobuf field <code>string location_id = 4;</code>\n     * @return string\n     */\n    public function getLocationId()\n    {\n        return $this->location_id;\n    }\n\n    /**\n     * The canonical id for this location. For example: `\"us-east1\"`.\n     *\n     * Generated from protobuf field <code>string location_id = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLocationId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->location_id = $var;\n\n        return $this;\n    }\n\n    /**\n     * The friendly name for this location, typically a nearby city name.\n     * For example, \"Tokyo\".\n     *\n     * Generated from protobuf field <code>string display_name = 5;</code>\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->display_name;\n    }\n\n    /**\n     * The friendly name for this location, typically a nearby city name.\n     * For example, \"Tokyo\".\n     *\n     * Generated from protobuf field <code>string display_name = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDisplayName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->display_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Cross-service attributes for the location. For example\n     *     {\"cloud.googleapis.com/region\": \"us-east1\"}\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * Cross-service attributes for the location. For example\n     *     {\"cloud.googleapis.com/region\": \"us-east1\"}\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 2;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Service-specific metadata. For example the available capacity at the given\n     * location.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any metadata = 3;</code>\n     * @return \\Google\\Protobuf\\Any|null\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n\n    public function hasMetadata()\n    {\n        return isset($this->metadata);\n    }\n\n    public function clearMetadata()\n    {\n        unset($this->metadata);\n    }\n\n    /**\n     * Service-specific metadata. For example the available capacity at the given\n     * location.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any metadata = 3;</code>\n     * @param \\Google\\Protobuf\\Any $var\n     * @return $this\n     */\n    public function setMetadata($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Any::class);\n        $this->metadata = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Logging/Type/HttpRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/logging/type/http_request.proto\n\nnamespace Google\\Cloud\\Logging\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A common proto for logging HTTP requests. Only contains semantics\n * defined by the HTTP specification. Product-specific logging\n * information MUST be defined in a separate message.\n *\n * Generated from protobuf message <code>google.logging.type.HttpRequest</code>\n */\nclass HttpRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The request method. Examples: `\"GET\"`, `\"HEAD\"`, `\"PUT\"`, `\"POST\"`.\n     *\n     * Generated from protobuf field <code>string request_method = 1;</code>\n     */\n    protected $request_method = '';\n    /**\n     * The scheme (http, https), the host name, the path and the query\n     * portion of the URL that was requested.\n     * Example: `\"http://example.com/some/info?color=red\"`.\n     *\n     * Generated from protobuf field <code>string request_url = 2;</code>\n     */\n    protected $request_url = '';\n    /**\n     * The size of the HTTP request message in bytes, including the request\n     * headers and the request body.\n     *\n     * Generated from protobuf field <code>int64 request_size = 3;</code>\n     */\n    protected $request_size = 0;\n    /**\n     * The response code indicating the status of response.\n     * Examples: 200, 404.\n     *\n     * Generated from protobuf field <code>int32 status = 4;</code>\n     */\n    protected $status = 0;\n    /**\n     * The size of the HTTP response message sent back to the client, in bytes,\n     * including the response headers and the response body.\n     *\n     * Generated from protobuf field <code>int64 response_size = 5;</code>\n     */\n    protected $response_size = 0;\n    /**\n     * The user agent sent by the client. Example:\n     * `\"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET\n     * CLR 1.0.3705)\"`.\n     *\n     * Generated from protobuf field <code>string user_agent = 6;</code>\n     */\n    protected $user_agent = '';\n    /**\n     * The IP address (IPv4 or IPv6) of the client that issued the HTTP\n     * request. This field can include port information. Examples:\n     * `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *\n     * Generated from protobuf field <code>string remote_ip = 7;</code>\n     */\n    protected $remote_ip = '';\n    /**\n     * The IP address (IPv4 or IPv6) of the origin server that the request was\n     * sent to. This field can include port information. Examples:\n     * `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *\n     * Generated from protobuf field <code>string server_ip = 13;</code>\n     */\n    protected $server_ip = '';\n    /**\n     * The referer URL of the request, as defined in\n     * [HTTP/1.1 Header Field\n     * Definitions](https://datatracker.ietf.org/doc/html/rfc2616#section-14.36).\n     *\n     * Generated from protobuf field <code>string referer = 8;</code>\n     */\n    protected $referer = '';\n    /**\n     * The request processing latency on the server, from the time the request was\n     * received until the response was sent.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration latency = 14;</code>\n     */\n    protected $latency = null;\n    /**\n     * Whether or not a cache lookup was attempted.\n     *\n     * Generated from protobuf field <code>bool cache_lookup = 11;</code>\n     */\n    protected $cache_lookup = false;\n    /**\n     * Whether or not an entity was served from cache\n     * (with or without validation).\n     *\n     * Generated from protobuf field <code>bool cache_hit = 9;</code>\n     */\n    protected $cache_hit = false;\n    /**\n     * Whether or not the response was validated with the origin server before\n     * being served from cache. This field is only meaningful if `cache_hit` is\n     * True.\n     *\n     * Generated from protobuf field <code>bool cache_validated_with_origin_server = 10;</code>\n     */\n    protected $cache_validated_with_origin_server = false;\n    /**\n     * The number of HTTP response bytes inserted into cache. Set only when a\n     * cache fill was attempted.\n     *\n     * Generated from protobuf field <code>int64 cache_fill_bytes = 12;</code>\n     */\n    protected $cache_fill_bytes = 0;\n    /**\n     * Protocol used for the request. Examples: \"HTTP/1.1\", \"HTTP/2\", \"websocket\"\n     *\n     * Generated from protobuf field <code>string protocol = 15;</code>\n     */\n    protected $protocol = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $request_method\n     *           The request method. Examples: `\"GET\"`, `\"HEAD\"`, `\"PUT\"`, `\"POST\"`.\n     *     @type string $request_url\n     *           The scheme (http, https), the host name, the path and the query\n     *           portion of the URL that was requested.\n     *           Example: `\"http://example.com/some/info?color=red\"`.\n     *     @type int|string $request_size\n     *           The size of the HTTP request message in bytes, including the request\n     *           headers and the request body.\n     *     @type int $status\n     *           The response code indicating the status of response.\n     *           Examples: 200, 404.\n     *     @type int|string $response_size\n     *           The size of the HTTP response message sent back to the client, in bytes,\n     *           including the response headers and the response body.\n     *     @type string $user_agent\n     *           The user agent sent by the client. Example:\n     *           `\"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET\n     *           CLR 1.0.3705)\"`.\n     *     @type string $remote_ip\n     *           The IP address (IPv4 or IPv6) of the client that issued the HTTP\n     *           request. This field can include port information. Examples:\n     *           `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *     @type string $server_ip\n     *           The IP address (IPv4 or IPv6) of the origin server that the request was\n     *           sent to. This field can include port information. Examples:\n     *           `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *     @type string $referer\n     *           The referer URL of the request, as defined in\n     *           [HTTP/1.1 Header Field\n     *           Definitions](https://datatracker.ietf.org/doc/html/rfc2616#section-14.36).\n     *     @type \\Google\\Protobuf\\Duration $latency\n     *           The request processing latency on the server, from the time the request was\n     *           received until the response was sent.\n     *     @type bool $cache_lookup\n     *           Whether or not a cache lookup was attempted.\n     *     @type bool $cache_hit\n     *           Whether or not an entity was served from cache\n     *           (with or without validation).\n     *     @type bool $cache_validated_with_origin_server\n     *           Whether or not the response was validated with the origin server before\n     *           being served from cache. This field is only meaningful if `cache_hit` is\n     *           True.\n     *     @type int|string $cache_fill_bytes\n     *           The number of HTTP response bytes inserted into cache. Set only when a\n     *           cache fill was attempted.\n     *     @type string $protocol\n     *           Protocol used for the request. Examples: \"HTTP/1.1\", \"HTTP/2\", \"websocket\"\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Logging\\Type\\HttpRequest::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The request method. Examples: `\"GET\"`, `\"HEAD\"`, `\"PUT\"`, `\"POST\"`.\n     *\n     * Generated from protobuf field <code>string request_method = 1;</code>\n     * @return string\n     */\n    public function getRequestMethod()\n    {\n        return $this->request_method;\n    }\n\n    /**\n     * The request method. Examples: `\"GET\"`, `\"HEAD\"`, `\"PUT\"`, `\"POST\"`.\n     *\n     * Generated from protobuf field <code>string request_method = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRequestMethod($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->request_method = $var;\n\n        return $this;\n    }\n\n    /**\n     * The scheme (http, https), the host name, the path and the query\n     * portion of the URL that was requested.\n     * Example: `\"http://example.com/some/info?color=red\"`.\n     *\n     * Generated from protobuf field <code>string request_url = 2;</code>\n     * @return string\n     */\n    public function getRequestUrl()\n    {\n        return $this->request_url;\n    }\n\n    /**\n     * The scheme (http, https), the host name, the path and the query\n     * portion of the URL that was requested.\n     * Example: `\"http://example.com/some/info?color=red\"`.\n     *\n     * Generated from protobuf field <code>string request_url = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRequestUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->request_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * The size of the HTTP request message in bytes, including the request\n     * headers and the request body.\n     *\n     * Generated from protobuf field <code>int64 request_size = 3;</code>\n     * @return int|string\n     */\n    public function getRequestSize()\n    {\n        return $this->request_size;\n    }\n\n    /**\n     * The size of the HTTP request message in bytes, including the request\n     * headers and the request body.\n     *\n     * Generated from protobuf field <code>int64 request_size = 3;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setRequestSize($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->request_size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The response code indicating the status of response.\n     * Examples: 200, 404.\n     *\n     * Generated from protobuf field <code>int32 status = 4;</code>\n     * @return int\n     */\n    public function getStatus()\n    {\n        return $this->status;\n    }\n\n    /**\n     * The response code indicating the status of response.\n     * Examples: 200, 404.\n     *\n     * Generated from protobuf field <code>int32 status = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setStatus($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->status = $var;\n\n        return $this;\n    }\n\n    /**\n     * The size of the HTTP response message sent back to the client, in bytes,\n     * including the response headers and the response body.\n     *\n     * Generated from protobuf field <code>int64 response_size = 5;</code>\n     * @return int|string\n     */\n    public function getResponseSize()\n    {\n        return $this->response_size;\n    }\n\n    /**\n     * The size of the HTTP response message sent back to the client, in bytes,\n     * including the response headers and the response body.\n     *\n     * Generated from protobuf field <code>int64 response_size = 5;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setResponseSize($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->response_size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The user agent sent by the client. Example:\n     * `\"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET\n     * CLR 1.0.3705)\"`.\n     *\n     * Generated from protobuf field <code>string user_agent = 6;</code>\n     * @return string\n     */\n    public function getUserAgent()\n    {\n        return $this->user_agent;\n    }\n\n    /**\n     * The user agent sent by the client. Example:\n     * `\"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET\n     * CLR 1.0.3705)\"`.\n     *\n     * Generated from protobuf field <code>string user_agent = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setUserAgent($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->user_agent = $var;\n\n        return $this;\n    }\n\n    /**\n     * The IP address (IPv4 or IPv6) of the client that issued the HTTP\n     * request. This field can include port information. Examples:\n     * `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *\n     * Generated from protobuf field <code>string remote_ip = 7;</code>\n     * @return string\n     */\n    public function getRemoteIp()\n    {\n        return $this->remote_ip;\n    }\n\n    /**\n     * The IP address (IPv4 or IPv6) of the client that issued the HTTP\n     * request. This field can include port information. Examples:\n     * `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *\n     * Generated from protobuf field <code>string remote_ip = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRemoteIp($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->remote_ip = $var;\n\n        return $this;\n    }\n\n    /**\n     * The IP address (IPv4 or IPv6) of the origin server that the request was\n     * sent to. This field can include port information. Examples:\n     * `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *\n     * Generated from protobuf field <code>string server_ip = 13;</code>\n     * @return string\n     */\n    public function getServerIp()\n    {\n        return $this->server_ip;\n    }\n\n    /**\n     * The IP address (IPv4 or IPv6) of the origin server that the request was\n     * sent to. This field can include port information. Examples:\n     * `\"192.168.1.1\"`, `\"10.0.0.1:80\"`, `\"FE80::0202:B3FF:FE1E:8329\"`.\n     *\n     * Generated from protobuf field <code>string server_ip = 13;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setServerIp($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->server_ip = $var;\n\n        return $this;\n    }\n\n    /**\n     * The referer URL of the request, as defined in\n     * [HTTP/1.1 Header Field\n     * Definitions](https://datatracker.ietf.org/doc/html/rfc2616#section-14.36).\n     *\n     * Generated from protobuf field <code>string referer = 8;</code>\n     * @return string\n     */\n    public function getReferer()\n    {\n        return $this->referer;\n    }\n\n    /**\n     * The referer URL of the request, as defined in\n     * [HTTP/1.1 Header Field\n     * Definitions](https://datatracker.ietf.org/doc/html/rfc2616#section-14.36).\n     *\n     * Generated from protobuf field <code>string referer = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setReferer($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->referer = $var;\n\n        return $this;\n    }\n\n    /**\n     * The request processing latency on the server, from the time the request was\n     * received until the response was sent.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration latency = 14;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getLatency()\n    {\n        return $this->latency;\n    }\n\n    public function hasLatency()\n    {\n        return isset($this->latency);\n    }\n\n    public function clearLatency()\n    {\n        unset($this->latency);\n    }\n\n    /**\n     * The request processing latency on the server, from the time the request was\n     * received until the response was sent.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration latency = 14;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setLatency($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->latency = $var;\n\n        return $this;\n    }\n\n    /**\n     * Whether or not a cache lookup was attempted.\n     *\n     * Generated from protobuf field <code>bool cache_lookup = 11;</code>\n     * @return bool\n     */\n    public function getCacheLookup()\n    {\n        return $this->cache_lookup;\n    }\n\n    /**\n     * Whether or not a cache lookup was attempted.\n     *\n     * Generated from protobuf field <code>bool cache_lookup = 11;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setCacheLookup($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->cache_lookup = $var;\n\n        return $this;\n    }\n\n    /**\n     * Whether or not an entity was served from cache\n     * (with or without validation).\n     *\n     * Generated from protobuf field <code>bool cache_hit = 9;</code>\n     * @return bool\n     */\n    public function getCacheHit()\n    {\n        return $this->cache_hit;\n    }\n\n    /**\n     * Whether or not an entity was served from cache\n     * (with or without validation).\n     *\n     * Generated from protobuf field <code>bool cache_hit = 9;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setCacheHit($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->cache_hit = $var;\n\n        return $this;\n    }\n\n    /**\n     * Whether or not the response was validated with the origin server before\n     * being served from cache. This field is only meaningful if `cache_hit` is\n     * True.\n     *\n     * Generated from protobuf field <code>bool cache_validated_with_origin_server = 10;</code>\n     * @return bool\n     */\n    public function getCacheValidatedWithOriginServer()\n    {\n        return $this->cache_validated_with_origin_server;\n    }\n\n    /**\n     * Whether or not the response was validated with the origin server before\n     * being served from cache. This field is only meaningful if `cache_hit` is\n     * True.\n     *\n     * Generated from protobuf field <code>bool cache_validated_with_origin_server = 10;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setCacheValidatedWithOriginServer($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->cache_validated_with_origin_server = $var;\n\n        return $this;\n    }\n\n    /**\n     * The number of HTTP response bytes inserted into cache. Set only when a\n     * cache fill was attempted.\n     *\n     * Generated from protobuf field <code>int64 cache_fill_bytes = 12;</code>\n     * @return int|string\n     */\n    public function getCacheFillBytes()\n    {\n        return $this->cache_fill_bytes;\n    }\n\n    /**\n     * The number of HTTP response bytes inserted into cache. Set only when a\n     * cache fill was attempted.\n     *\n     * Generated from protobuf field <code>int64 cache_fill_bytes = 12;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setCacheFillBytes($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->cache_fill_bytes = $var;\n\n        return $this;\n    }\n\n    /**\n     * Protocol used for the request. Examples: \"HTTP/1.1\", \"HTTP/2\", \"websocket\"\n     *\n     * Generated from protobuf field <code>string protocol = 15;</code>\n     * @return string\n     */\n    public function getProtocol()\n    {\n        return $this->protocol;\n    }\n\n    /**\n     * Protocol used for the request. Examples: \"HTTP/1.1\", \"HTTP/2\", \"websocket\"\n     *\n     * Generated from protobuf field <code>string protocol = 15;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProtocol($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->protocol = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/Logging/Type/LogSeverity.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/logging/type/log_severity.proto\n\nnamespace Google\\Cloud\\Logging\\Type;\n\nuse UnexpectedValueException;\n\n/**\n * The severity of the event described in a log entry, expressed as one of the\n * standard severity levels listed below.  For your reference, the levels are\n * assigned the listed numeric values. The effect of using numeric values other\n * than those listed is undefined.\n * You can filter for log entries by severity.  For example, the following\n * filter expression will match log entries with severities `INFO`, `NOTICE`,\n * and `WARNING`:\n *     severity > DEBUG AND severity <= WARNING\n * If you are writing log entries, you should map other severity encodings to\n * one of these standard levels. For example, you might map all of Java's FINE,\n * FINER, and FINEST levels to `LogSeverity.DEBUG`. You can preserve the\n * original severity level in the log entry payload if you wish.\n *\n * Protobuf type <code>google.logging.type.LogSeverity</code>\n */\nclass LogSeverity\n{\n    /**\n     * (0) The log entry has no assigned severity level.\n     *\n     * Generated from protobuf enum <code>DEFAULT = 0;</code>\n     */\n    const PBDEFAULT = 0;\n    /**\n     * (100) Debug or trace information.\n     *\n     * Generated from protobuf enum <code>DEBUG = 100;</code>\n     */\n    const DEBUG = 100;\n    /**\n     * (200) Routine information, such as ongoing status or performance.\n     *\n     * Generated from protobuf enum <code>INFO = 200;</code>\n     */\n    const INFO = 200;\n    /**\n     * (300) Normal but significant events, such as start up, shut down, or\n     * a configuration change.\n     *\n     * Generated from protobuf enum <code>NOTICE = 300;</code>\n     */\n    const NOTICE = 300;\n    /**\n     * (400) Warning events might cause problems.\n     *\n     * Generated from protobuf enum <code>WARNING = 400;</code>\n     */\n    const WARNING = 400;\n    /**\n     * (500) Error events are likely to cause problems.\n     *\n     * Generated from protobuf enum <code>ERROR = 500;</code>\n     */\n    const ERROR = 500;\n    /**\n     * (600) Critical events cause more severe problems or outages.\n     *\n     * Generated from protobuf enum <code>CRITICAL = 600;</code>\n     */\n    const CRITICAL = 600;\n    /**\n     * (700) A person must take an action immediately.\n     *\n     * Generated from protobuf enum <code>ALERT = 700;</code>\n     */\n    const ALERT = 700;\n    /**\n     * (800) One or more systems are unusable.\n     *\n     * Generated from protobuf enum <code>EMERGENCY = 800;</code>\n     */\n    const EMERGENCY = 800;\n\n    private static $valueToName = [\n        self::PBDEFAULT => 'DEFAULT',\n        self::DEBUG => 'DEBUG',\n        self::INFO => 'INFO',\n        self::NOTICE => 'NOTICE',\n        self::WARNING => 'WARNING',\n        self::ERROR => 'ERROR',\n        self::CRITICAL => 'CRITICAL',\n        self::ALERT => 'ALERT',\n        self::EMERGENCY => 'EMERGENCY',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            $pbconst =  __CLASS__. '::PB' . strtoupper($name);\n            if (!defined($pbconst)) {\n                throw new UnexpectedValueException(sprintf(\n                        'Enum %s has no value defined for name %s', __CLASS__, $name));\n            }\n            return constant($pbconst);\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Cloud/OperationResponseMapping.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/cloud/extended_operations.proto\n\nnamespace Google\\Cloud;\n\nuse UnexpectedValueException;\n\n/**\n * An enum to be used to mark the essential (for polling) fields in an\n * API-specific Operation object. A custom Operation object may contain many\n * different fields, but only few of them are essential to conduct a successful\n * polling process.\n *\n * Protobuf type <code>google.cloud.OperationResponseMapping</code>\n */\nclass OperationResponseMapping\n{\n    /**\n     * Do not use.\n     *\n     * Generated from protobuf enum <code>UNDEFINED = 0;</code>\n     */\n    const UNDEFINED = 0;\n    /**\n     * A field in an API-specific (custom) Operation object which carries the same\n     * meaning as google.longrunning.Operation.name.\n     *\n     * Generated from protobuf enum <code>NAME = 1;</code>\n     */\n    const NAME = 1;\n    /**\n     * A field in an API-specific (custom) Operation object which carries the same\n     * meaning as google.longrunning.Operation.done. If the annotated field is of\n     * an enum type, `annotated_field_name == EnumType.DONE` semantics should be\n     * equivalent to `Operation.done == true`. If the annotated field is of type\n     * boolean, then it should follow the same semantics as Operation.done.\n     * Otherwise, a non-empty value should be treated as `Operation.done == true`.\n     *\n     * Generated from protobuf enum <code>STATUS = 2;</code>\n     */\n    const STATUS = 2;\n    /**\n     * A field in an API-specific (custom) Operation object which carries the same\n     * meaning as google.longrunning.Operation.error.code.\n     *\n     * Generated from protobuf enum <code>ERROR_CODE = 3;</code>\n     */\n    const ERROR_CODE = 3;\n    /**\n     * A field in an API-specific (custom) Operation object which carries the same\n     * meaning as google.longrunning.Operation.error.message.\n     *\n     * Generated from protobuf enum <code>ERROR_MESSAGE = 4;</code>\n     */\n    const ERROR_MESSAGE = 4;\n\n    private static $valueToName = [\n        self::UNDEFINED => 'UNDEFINED',\n        self::NAME => 'NAME',\n        self::STATUS => 'STATUS',\n        self::ERROR_CODE => 'ERROR_CODE',\n        self::ERROR_MESSAGE => 'ERROR_MESSAGE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Iam/V1/Logging/AuditData.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/iam/v1/logging/audit_data.proto\n\nnamespace Google\\Iam\\V1\\Logging;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Audit log information specific to Cloud IAM. This message is serialized\n * as an `Any` type in the `ServiceData` message of an\n * `AuditLog` message.\n *\n * Generated from protobuf message <code>google.iam.v1.logging.AuditData</code>\n */\nclass AuditData extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Policy delta between the original policy and the newly set policy.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.PolicyDelta policy_delta = 2;</code>\n     */\n    protected $policy_delta = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Cloud\\Iam\\V1\\PolicyDelta $policy_delta\n     *           Policy delta between the original policy and the newly set policy.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Iam\\V1\\Logging\\AuditData::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Policy delta between the original policy and the newly set policy.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.PolicyDelta policy_delta = 2;</code>\n     * @return \\Google\\Cloud\\Iam\\V1\\PolicyDelta|null\n     */\n    public function getPolicyDelta()\n    {\n        return $this->policy_delta;\n    }\n\n    public function hasPolicyDelta()\n    {\n        return isset($this->policy_delta);\n    }\n\n    public function clearPolicyDelta()\n    {\n        unset($this->policy_delta);\n    }\n\n    /**\n     * Policy delta between the original policy and the newly set policy.\n     *\n     * Generated from protobuf field <code>.google.iam.v1.PolicyDelta policy_delta = 2;</code>\n     * @param \\Google\\Cloud\\Iam\\V1\\PolicyDelta $var\n     * @return $this\n     */\n    public function setPolicyDelta($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Cloud\\Iam\\V1\\PolicyDelta::class);\n        $this->policy_delta = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/BadRequest/FieldViolation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc\\BadRequest;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A message type used to describe a single bad request field.\n *\n * Generated from protobuf message <code>google.rpc.BadRequest.FieldViolation</code>\n */\nclass FieldViolation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A path that leads to a field in the request body. The value will be a\n     * sequence of dot-separated identifiers that identify a protocol buffer\n     * field.\n     * Consider the following:\n     *     message CreateContactRequest {\n     *       message EmailAddress {\n     *         enum Type {\n     *           TYPE_UNSPECIFIED = 0;\n     *           HOME = 1;\n     *           WORK = 2;\n     *         }\n     *         optional string email = 1;\n     *         repeated EmailType type = 2;\n     *       }\n     *       string full_name = 1;\n     *       repeated EmailAddress email_addresses = 2;\n     *     }\n     * In this example, in proto `field` could take one of the following values:\n     * * `full_name` for a violation in the `full_name` value\n     * * `email_addresses[1].email` for a violation in the `email` field of the\n     *   first `email_addresses` message\n     * * `email_addresses[3].type[2]` for a violation in the second `type`\n     *   value in the third `email_addresses` message.\n     * In JSON, the same values are represented as:\n     * * `fullName` for a violation in the `fullName` value\n     * * `emailAddresses[1].email` for a violation in the `email` field of the\n     *   first `emailAddresses` message\n     * * `emailAddresses[3].type[2]` for a violation in the second `type`\n     *   value in the third `emailAddresses` message.\n     *\n     * Generated from protobuf field <code>string field = 1;</code>\n     */\n    protected $field = '';\n    /**\n     * A description of why the request element is bad.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     */\n    protected $description = '';\n    /**\n     * The reason of the field-level error. This is a constant value that\n     * identifies the proximate cause of the field-level error. It should\n     * uniquely identify the type of the FieldViolation within the scope of the\n     * google.rpc.ErrorInfo.domain. This should be at most 63\n     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,\n     * which represents UPPER_SNAKE_CASE.\n     *\n     * Generated from protobuf field <code>string reason = 3;</code>\n     */\n    protected $reason = '';\n    /**\n     * Provides a localized error message for field-level errors that is safe to\n     * return to the API consumer.\n     *\n     * Generated from protobuf field <code>.google.rpc.LocalizedMessage localized_message = 4;</code>\n     */\n    protected $localized_message = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $field\n     *           A path that leads to a field in the request body. The value will be a\n     *           sequence of dot-separated identifiers that identify a protocol buffer\n     *           field.\n     *           Consider the following:\n     *               message CreateContactRequest {\n     *                 message EmailAddress {\n     *                   enum Type {\n     *                     TYPE_UNSPECIFIED = 0;\n     *                     HOME = 1;\n     *                     WORK = 2;\n     *                   }\n     *                   optional string email = 1;\n     *                   repeated EmailType type = 2;\n     *                 }\n     *                 string full_name = 1;\n     *                 repeated EmailAddress email_addresses = 2;\n     *               }\n     *           In this example, in proto `field` could take one of the following values:\n     *           * `full_name` for a violation in the `full_name` value\n     *           * `email_addresses[1].email` for a violation in the `email` field of the\n     *             first `email_addresses` message\n     *           * `email_addresses[3].type[2]` for a violation in the second `type`\n     *             value in the third `email_addresses` message.\n     *           In JSON, the same values are represented as:\n     *           * `fullName` for a violation in the `fullName` value\n     *           * `emailAddresses[1].email` for a violation in the `email` field of the\n     *             first `emailAddresses` message\n     *           * `emailAddresses[3].type[2]` for a violation in the second `type`\n     *             value in the third `emailAddresses` message.\n     *     @type string $description\n     *           A description of why the request element is bad.\n     *     @type string $reason\n     *           The reason of the field-level error. This is a constant value that\n     *           identifies the proximate cause of the field-level error. It should\n     *           uniquely identify the type of the FieldViolation within the scope of the\n     *           google.rpc.ErrorInfo.domain. This should be at most 63\n     *           characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,\n     *           which represents UPPER_SNAKE_CASE.\n     *     @type \\Google\\Rpc\\LocalizedMessage $localized_message\n     *           Provides a localized error message for field-level errors that is safe to\n     *           return to the API consumer.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A path that leads to a field in the request body. The value will be a\n     * sequence of dot-separated identifiers that identify a protocol buffer\n     * field.\n     * Consider the following:\n     *     message CreateContactRequest {\n     *       message EmailAddress {\n     *         enum Type {\n     *           TYPE_UNSPECIFIED = 0;\n     *           HOME = 1;\n     *           WORK = 2;\n     *         }\n     *         optional string email = 1;\n     *         repeated EmailType type = 2;\n     *       }\n     *       string full_name = 1;\n     *       repeated EmailAddress email_addresses = 2;\n     *     }\n     * In this example, in proto `field` could take one of the following values:\n     * * `full_name` for a violation in the `full_name` value\n     * * `email_addresses[1].email` for a violation in the `email` field of the\n     *   first `email_addresses` message\n     * * `email_addresses[3].type[2]` for a violation in the second `type`\n     *   value in the third `email_addresses` message.\n     * In JSON, the same values are represented as:\n     * * `fullName` for a violation in the `fullName` value\n     * * `emailAddresses[1].email` for a violation in the `email` field of the\n     *   first `emailAddresses` message\n     * * `emailAddresses[3].type[2]` for a violation in the second `type`\n     *   value in the third `emailAddresses` message.\n     *\n     * Generated from protobuf field <code>string field = 1;</code>\n     * @return string\n     */\n    public function getField()\n    {\n        return $this->field;\n    }\n\n    /**\n     * A path that leads to a field in the request body. The value will be a\n     * sequence of dot-separated identifiers that identify a protocol buffer\n     * field.\n     * Consider the following:\n     *     message CreateContactRequest {\n     *       message EmailAddress {\n     *         enum Type {\n     *           TYPE_UNSPECIFIED = 0;\n     *           HOME = 1;\n     *           WORK = 2;\n     *         }\n     *         optional string email = 1;\n     *         repeated EmailType type = 2;\n     *       }\n     *       string full_name = 1;\n     *       repeated EmailAddress email_addresses = 2;\n     *     }\n     * In this example, in proto `field` could take one of the following values:\n     * * `full_name` for a violation in the `full_name` value\n     * * `email_addresses[1].email` for a violation in the `email` field of the\n     *   first `email_addresses` message\n     * * `email_addresses[3].type[2]` for a violation in the second `type`\n     *   value in the third `email_addresses` message.\n     * In JSON, the same values are represented as:\n     * * `fullName` for a violation in the `fullName` value\n     * * `emailAddresses[1].email` for a violation in the `email` field of the\n     *   first `emailAddresses` message\n     * * `emailAddresses[3].type[2]` for a violation in the second `type`\n     *   value in the third `emailAddresses` message.\n     *\n     * Generated from protobuf field <code>string field = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setField($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->field = $var;\n\n        return $this;\n    }\n\n    /**\n     * A description of why the request element is bad.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * A description of why the request element is bad.\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * The reason of the field-level error. This is a constant value that\n     * identifies the proximate cause of the field-level error. It should\n     * uniquely identify the type of the FieldViolation within the scope of the\n     * google.rpc.ErrorInfo.domain. This should be at most 63\n     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,\n     * which represents UPPER_SNAKE_CASE.\n     *\n     * Generated from protobuf field <code>string reason = 3;</code>\n     * @return string\n     */\n    public function getReason()\n    {\n        return $this->reason;\n    }\n\n    /**\n     * The reason of the field-level error. This is a constant value that\n     * identifies the proximate cause of the field-level error. It should\n     * uniquely identify the type of the FieldViolation within the scope of the\n     * google.rpc.ErrorInfo.domain. This should be at most 63\n     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,\n     * which represents UPPER_SNAKE_CASE.\n     *\n     * Generated from protobuf field <code>string reason = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setReason($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->reason = $var;\n\n        return $this;\n    }\n\n    /**\n     * Provides a localized error message for field-level errors that is safe to\n     * return to the API consumer.\n     *\n     * Generated from protobuf field <code>.google.rpc.LocalizedMessage localized_message = 4;</code>\n     * @return \\Google\\Rpc\\LocalizedMessage|null\n     */\n    public function getLocalizedMessage()\n    {\n        return $this->localized_message;\n    }\n\n    public function hasLocalizedMessage()\n    {\n        return isset($this->localized_message);\n    }\n\n    public function clearLocalizedMessage()\n    {\n        unset($this->localized_message);\n    }\n\n    /**\n     * Provides a localized error message for field-level errors that is safe to\n     * return to the API consumer.\n     *\n     * Generated from protobuf field <code>.google.rpc.LocalizedMessage localized_message = 4;</code>\n     * @param \\Google\\Rpc\\LocalizedMessage $var\n     * @return $this\n     */\n    public function setLocalizedMessage($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\LocalizedMessage::class);\n        $this->localized_message = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/BadRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes violations in a client request. This error type focuses on the\n * syntactic aspects of the request.\n *\n * Generated from protobuf message <code>google.rpc.BadRequest</code>\n */\nclass BadRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Describes all violations in a client request.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.BadRequest.FieldViolation field_violations = 1;</code>\n     */\n    private $field_violations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Rpc\\BadRequest\\FieldViolation>|\\Google\\Protobuf\\Internal\\RepeatedField $field_violations\n     *           Describes all violations in a client request.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Describes all violations in a client request.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.BadRequest.FieldViolation field_violations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getFieldViolations()\n    {\n        return $this->field_violations;\n    }\n\n    /**\n     * Describes all violations in a client request.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.BadRequest.FieldViolation field_violations = 1;</code>\n     * @param array<\\Google\\Rpc\\BadRequest\\FieldViolation>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setFieldViolations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Rpc\\BadRequest\\FieldViolation::class);\n        $this->field_violations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Code.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/code.proto\n\nnamespace Google\\Rpc;\n\nuse UnexpectedValueException;\n\n/**\n * The canonical error codes for gRPC APIs.\n * Sometimes multiple error codes may apply.  Services should return\n * the most specific error code that applies.  For example, prefer\n * `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.\n * Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.\n *\n * Protobuf type <code>google.rpc.Code</code>\n */\nclass Code\n{\n    /**\n     * Not an error; returned on success.\n     * HTTP Mapping: 200 OK\n     *\n     * Generated from protobuf enum <code>OK = 0;</code>\n     */\n    const OK = 0;\n    /**\n     * The operation was cancelled, typically by the caller.\n     * HTTP Mapping: 499 Client Closed Request\n     *\n     * Generated from protobuf enum <code>CANCELLED = 1;</code>\n     */\n    const CANCELLED = 1;\n    /**\n     * Unknown error.  For example, this error may be returned when\n     * a `Status` value received from another address space belongs to\n     * an error space that is not known in this address space.  Also\n     * errors raised by APIs that do not return enough error information\n     * may be converted to this error.\n     * HTTP Mapping: 500 Internal Server Error\n     *\n     * Generated from protobuf enum <code>UNKNOWN = 2;</code>\n     */\n    const UNKNOWN = 2;\n    /**\n     * The client specified an invalid argument.  Note that this differs\n     * from `FAILED_PRECONDITION`.  `INVALID_ARGUMENT` indicates arguments\n     * that are problematic regardless of the state of the system\n     * (e.g., a malformed file name).\n     * HTTP Mapping: 400 Bad Request\n     *\n     * Generated from protobuf enum <code>INVALID_ARGUMENT = 3;</code>\n     */\n    const INVALID_ARGUMENT = 3;\n    /**\n     * The deadline expired before the operation could complete. For operations\n     * that change the state of the system, this error may be returned\n     * even if the operation has completed successfully.  For example, a\n     * successful response from a server could have been delayed long\n     * enough for the deadline to expire.\n     * HTTP Mapping: 504 Gateway Timeout\n     *\n     * Generated from protobuf enum <code>DEADLINE_EXCEEDED = 4;</code>\n     */\n    const DEADLINE_EXCEEDED = 4;\n    /**\n     * Some requested entity (e.g., file or directory) was not found.\n     * Note to server developers: if a request is denied for an entire class\n     * of users, such as gradual feature rollout or undocumented allowlist,\n     * `NOT_FOUND` may be used. If a request is denied for some users within\n     * a class of users, such as user-based access control, `PERMISSION_DENIED`\n     * must be used.\n     * HTTP Mapping: 404 Not Found\n     *\n     * Generated from protobuf enum <code>NOT_FOUND = 5;</code>\n     */\n    const NOT_FOUND = 5;\n    /**\n     * The entity that a client attempted to create (e.g., file or directory)\n     * already exists.\n     * HTTP Mapping: 409 Conflict\n     *\n     * Generated from protobuf enum <code>ALREADY_EXISTS = 6;</code>\n     */\n    const ALREADY_EXISTS = 6;\n    /**\n     * The caller does not have permission to execute the specified\n     * operation. `PERMISSION_DENIED` must not be used for rejections\n     * caused by exhausting some resource (use `RESOURCE_EXHAUSTED`\n     * instead for those errors). `PERMISSION_DENIED` must not be\n     * used if the caller can not be identified (use `UNAUTHENTICATED`\n     * instead for those errors). This error code does not imply the\n     * request is valid or the requested entity exists or satisfies\n     * other pre-conditions.\n     * HTTP Mapping: 403 Forbidden\n     *\n     * Generated from protobuf enum <code>PERMISSION_DENIED = 7;</code>\n     */\n    const PERMISSION_DENIED = 7;\n    /**\n     * The request does not have valid authentication credentials for the\n     * operation.\n     * HTTP Mapping: 401 Unauthorized\n     *\n     * Generated from protobuf enum <code>UNAUTHENTICATED = 16;</code>\n     */\n    const UNAUTHENTICATED = 16;\n    /**\n     * Some resource has been exhausted, perhaps a per-user quota, or\n     * perhaps the entire file system is out of space.\n     * HTTP Mapping: 429 Too Many Requests\n     *\n     * Generated from protobuf enum <code>RESOURCE_EXHAUSTED = 8;</code>\n     */\n    const RESOURCE_EXHAUSTED = 8;\n    /**\n     * The operation was rejected because the system is not in a state\n     * required for the operation's execution.  For example, the directory\n     * to be deleted is non-empty, an rmdir operation is applied to\n     * a non-directory, etc.\n     * Service implementors can use the following guidelines to decide\n     * between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:\n     *  (a) Use `UNAVAILABLE` if the client can retry just the failing call.\n     *  (b) Use `ABORTED` if the client should retry at a higher level. For\n     *      example, when a client-specified test-and-set fails, indicating the\n     *      client should restart a read-modify-write sequence.\n     *  (c) Use `FAILED_PRECONDITION` if the client should not retry until\n     *      the system state has been explicitly fixed. For example, if an \"rmdir\"\n     *      fails because the directory is non-empty, `FAILED_PRECONDITION`\n     *      should be returned since the client should not retry unless\n     *      the files are deleted from the directory.\n     * HTTP Mapping: 400 Bad Request\n     *\n     * Generated from protobuf enum <code>FAILED_PRECONDITION = 9;</code>\n     */\n    const FAILED_PRECONDITION = 9;\n    /**\n     * The operation was aborted, typically due to a concurrency issue such as\n     * a sequencer check failure or transaction abort.\n     * See the guidelines above for deciding between `FAILED_PRECONDITION`,\n     * `ABORTED`, and `UNAVAILABLE`.\n     * HTTP Mapping: 409 Conflict\n     *\n     * Generated from protobuf enum <code>ABORTED = 10;</code>\n     */\n    const ABORTED = 10;\n    /**\n     * The operation was attempted past the valid range.  E.g., seeking or\n     * reading past end-of-file.\n     * Unlike `INVALID_ARGUMENT`, this error indicates a problem that may\n     * be fixed if the system state changes. For example, a 32-bit file\n     * system will generate `INVALID_ARGUMENT` if asked to read at an\n     * offset that is not in the range [0,2^32-1], but it will generate\n     * `OUT_OF_RANGE` if asked to read from an offset past the current\n     * file size.\n     * There is a fair bit of overlap between `FAILED_PRECONDITION` and\n     * `OUT_OF_RANGE`.  We recommend using `OUT_OF_RANGE` (the more specific\n     * error) when it applies so that callers who are iterating through\n     * a space can easily look for an `OUT_OF_RANGE` error to detect when\n     * they are done.\n     * HTTP Mapping: 400 Bad Request\n     *\n     * Generated from protobuf enum <code>OUT_OF_RANGE = 11;</code>\n     */\n    const OUT_OF_RANGE = 11;\n    /**\n     * The operation is not implemented or is not supported/enabled in this\n     * service.\n     * HTTP Mapping: 501 Not Implemented\n     *\n     * Generated from protobuf enum <code>UNIMPLEMENTED = 12;</code>\n     */\n    const UNIMPLEMENTED = 12;\n    /**\n     * Internal errors.  This means that some invariants expected by the\n     * underlying system have been broken.  This error code is reserved\n     * for serious errors.\n     * HTTP Mapping: 500 Internal Server Error\n     *\n     * Generated from protobuf enum <code>INTERNAL = 13;</code>\n     */\n    const INTERNAL = 13;\n    /**\n     * The service is currently unavailable.  This is most likely a\n     * transient condition, which can be corrected by retrying with\n     * a backoff. Note that it is not always safe to retry\n     * non-idempotent operations.\n     * See the guidelines above for deciding between `FAILED_PRECONDITION`,\n     * `ABORTED`, and `UNAVAILABLE`.\n     * HTTP Mapping: 503 Service Unavailable\n     *\n     * Generated from protobuf enum <code>UNAVAILABLE = 14;</code>\n     */\n    const UNAVAILABLE = 14;\n    /**\n     * Unrecoverable data loss or corruption.\n     * HTTP Mapping: 500 Internal Server Error\n     *\n     * Generated from protobuf enum <code>DATA_LOSS = 15;</code>\n     */\n    const DATA_LOSS = 15;\n\n    private static $valueToName = [\n        self::OK => 'OK',\n        self::CANCELLED => 'CANCELLED',\n        self::UNKNOWN => 'UNKNOWN',\n        self::INVALID_ARGUMENT => 'INVALID_ARGUMENT',\n        self::DEADLINE_EXCEEDED => 'DEADLINE_EXCEEDED',\n        self::NOT_FOUND => 'NOT_FOUND',\n        self::ALREADY_EXISTS => 'ALREADY_EXISTS',\n        self::PERMISSION_DENIED => 'PERMISSION_DENIED',\n        self::UNAUTHENTICATED => 'UNAUTHENTICATED',\n        self::RESOURCE_EXHAUSTED => 'RESOURCE_EXHAUSTED',\n        self::FAILED_PRECONDITION => 'FAILED_PRECONDITION',\n        self::ABORTED => 'ABORTED',\n        self::OUT_OF_RANGE => 'OUT_OF_RANGE',\n        self::UNIMPLEMENTED => 'UNIMPLEMENTED',\n        self::INTERNAL => 'INTERNAL',\n        self::UNAVAILABLE => 'UNAVAILABLE',\n        self::DATA_LOSS => 'DATA_LOSS',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext/Api.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context\\AttributeContext;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines attributes associated with API operations, such as\n * a network API request. The terminology is based on the conventions used\n * by Google APIs, Istio, and OpenAPI.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext.Api</code>\n */\nclass Api extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The API service name. It is a logical identifier for a networked API,\n     * such as \"pubsub.googleapis.com\". The naming syntax depends on the\n     * API management system being used for handling the request.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     */\n    protected $service = '';\n    /**\n     * The API operation name. For gRPC requests, it is the fully qualified API\n     * method name, such as \"google.pubsub.v1.Publisher.Publish\". For OpenAPI\n     * requests, it is the `operationId`, such as \"getPet\".\n     *\n     * Generated from protobuf field <code>string operation = 2;</code>\n     */\n    protected $operation = '';\n    /**\n     * The API protocol used for sending the request, such as \"http\", \"https\",\n     * \"grpc\", or \"internal\".\n     *\n     * Generated from protobuf field <code>string protocol = 3;</code>\n     */\n    protected $protocol = '';\n    /**\n     * The API version associated with the API operation above, such as \"v1\" or\n     * \"v1alpha1\".\n     *\n     * Generated from protobuf field <code>string version = 4;</code>\n     */\n    protected $version = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $service\n     *           The API service name. It is a logical identifier for a networked API,\n     *           such as \"pubsub.googleapis.com\". The naming syntax depends on the\n     *           API management system being used for handling the request.\n     *     @type string $operation\n     *           The API operation name. For gRPC requests, it is the fully qualified API\n     *           method name, such as \"google.pubsub.v1.Publisher.Publish\". For OpenAPI\n     *           requests, it is the `operationId`, such as \"getPet\".\n     *     @type string $protocol\n     *           The API protocol used for sending the request, such as \"http\", \"https\",\n     *           \"grpc\", or \"internal\".\n     *     @type string $version\n     *           The API version associated with the API operation above, such as \"v1\" or\n     *           \"v1alpha1\".\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The API service name. It is a logical identifier for a networked API,\n     * such as \"pubsub.googleapis.com\". The naming syntax depends on the\n     * API management system being used for handling the request.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     * @return string\n     */\n    public function getService()\n    {\n        return $this->service;\n    }\n\n    /**\n     * The API service name. It is a logical identifier for a networked API,\n     * such as \"pubsub.googleapis.com\". The naming syntax depends on the\n     * API management system being used for handling the request.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setService($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->service = $var;\n\n        return $this;\n    }\n\n    /**\n     * The API operation name. For gRPC requests, it is the fully qualified API\n     * method name, such as \"google.pubsub.v1.Publisher.Publish\". For OpenAPI\n     * requests, it is the `operationId`, such as \"getPet\".\n     *\n     * Generated from protobuf field <code>string operation = 2;</code>\n     * @return string\n     */\n    public function getOperation()\n    {\n        return $this->operation;\n    }\n\n    /**\n     * The API operation name. For gRPC requests, it is the fully qualified API\n     * method name, such as \"google.pubsub.v1.Publisher.Publish\". For OpenAPI\n     * requests, it is the `operationId`, such as \"getPet\".\n     *\n     * Generated from protobuf field <code>string operation = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setOperation($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->operation = $var;\n\n        return $this;\n    }\n\n    /**\n     * The API protocol used for sending the request, such as \"http\", \"https\",\n     * \"grpc\", or \"internal\".\n     *\n     * Generated from protobuf field <code>string protocol = 3;</code>\n     * @return string\n     */\n    public function getProtocol()\n    {\n        return $this->protocol;\n    }\n\n    /**\n     * The API protocol used for sending the request, such as \"http\", \"https\",\n     * \"grpc\", or \"internal\".\n     *\n     * Generated from protobuf field <code>string protocol = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProtocol($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->protocol = $var;\n\n        return $this;\n    }\n\n    /**\n     * The API version associated with the API operation above, such as \"v1\" or\n     * \"v1alpha1\".\n     *\n     * Generated from protobuf field <code>string version = 4;</code>\n     * @return string\n     */\n    public function getVersion()\n    {\n        return $this->version;\n    }\n\n    /**\n     * The API version associated with the API operation above, such as \"v1\" or\n     * \"v1alpha1\".\n     *\n     * Generated from protobuf field <code>string version = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setVersion($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->version = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext/Auth.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context\\AttributeContext;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines request authentication attributes. Terminology is\n * based on the JSON Web Token (JWT) standard, but the terms also\n * correlate to concepts in other standards.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext.Auth</code>\n */\nclass Auth extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The authenticated principal. Reflects the issuer (`iss`) and subject\n     * (`sub`) claims within a JWT. The issuer and subject should be `/`\n     * delimited, with `/` percent-encoded within the subject fragment. For\n     * Google accounts, the principal format is:\n     * \"https://accounts.google.com/{id}\"\n     *\n     * Generated from protobuf field <code>string principal = 1;</code>\n     */\n    protected $principal = '';\n    /**\n     * The intended audience(s) for this authentication information. Reflects\n     * the audience (`aud`) claim within a JWT. The audience\n     * value(s) depends on the `issuer`, but typically include one or more of\n     * the following pieces of information:\n     * *  The services intended to receive the credential. For example,\n     *    [\"https://pubsub.googleapis.com/\", \"https://storage.googleapis.com/\"].\n     * *  A set of service-based scopes. For example,\n     *    [\"https://www.googleapis.com/auth/cloud-platform\"].\n     * *  The client id of an app, such as the Firebase project id for JWTs\n     *    from Firebase Auth.\n     * Consult the documentation for the credential issuer to determine the\n     * information provided.\n     *\n     * Generated from protobuf field <code>repeated string audiences = 2;</code>\n     */\n    private $audiences;\n    /**\n     * The authorized presenter of the credential. Reflects the optional\n     * Authorized Presenter (`azp`) claim within a JWT or the\n     * OAuth client id. For example, a Google Cloud Platform client id looks\n     * as follows: \"123456789012.apps.googleusercontent.com\".\n     *\n     * Generated from protobuf field <code>string presenter = 3;</code>\n     */\n    protected $presenter = '';\n    /**\n     * Structured claims presented with the credential. JWTs include\n     * `{key: value}` pairs for standard and private claims. The following\n     * is a subset of the standard required and optional claims that would\n     * typically be presented for a Google-based JWT:\n     *    {'iss': 'accounts.google.com',\n     *     'sub': '113289723416554971153',\n     *     'aud': ['123456789012', 'pubsub.googleapis.com'],\n     *     'azp': '123456789012.apps.googleusercontent.com',\n     *     'email': 'jsmith&#64;example.com',\n     *     'iat': 1353601026,\n     *     'exp': 1353604926}\n     * SAML assertions are similarly specified, but with an identity provider\n     * dependent structure.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct claims = 4;</code>\n     */\n    protected $claims = null;\n    /**\n     * A list of access level resource names that allow resources to be\n     * accessed by authenticated requester. It is part of Secure GCP processing\n     * for the incoming request. An access level string has the format:\n     * \"//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}\"\n     * Example:\n     * \"//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL\"\n     *\n     * Generated from protobuf field <code>repeated string access_levels = 5;</code>\n     */\n    private $access_levels;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $principal\n     *           The authenticated principal. Reflects the issuer (`iss`) and subject\n     *           (`sub`) claims within a JWT. The issuer and subject should be `/`\n     *           delimited, with `/` percent-encoded within the subject fragment. For\n     *           Google accounts, the principal format is:\n     *           \"https://accounts.google.com/{id}\"\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $audiences\n     *           The intended audience(s) for this authentication information. Reflects\n     *           the audience (`aud`) claim within a JWT. The audience\n     *           value(s) depends on the `issuer`, but typically include one or more of\n     *           the following pieces of information:\n     *           *  The services intended to receive the credential. For example,\n     *              [\"https://pubsub.googleapis.com/\", \"https://storage.googleapis.com/\"].\n     *           *  A set of service-based scopes. For example,\n     *              [\"https://www.googleapis.com/auth/cloud-platform\"].\n     *           *  The client id of an app, such as the Firebase project id for JWTs\n     *              from Firebase Auth.\n     *           Consult the documentation for the credential issuer to determine the\n     *           information provided.\n     *     @type string $presenter\n     *           The authorized presenter of the credential. Reflects the optional\n     *           Authorized Presenter (`azp`) claim within a JWT or the\n     *           OAuth client id. For example, a Google Cloud Platform client id looks\n     *           as follows: \"123456789012.apps.googleusercontent.com\".\n     *     @type \\Google\\Protobuf\\Struct $claims\n     *           Structured claims presented with the credential. JWTs include\n     *           `{key: value}` pairs for standard and private claims. The following\n     *           is a subset of the standard required and optional claims that would\n     *           typically be presented for a Google-based JWT:\n     *              {'iss': 'accounts.google.com',\n     *               'sub': '113289723416554971153',\n     *               'aud': ['123456789012', 'pubsub.googleapis.com'],\n     *               'azp': '123456789012.apps.googleusercontent.com',\n     *               'email': 'jsmith&#64;example.com',\n     *               'iat': 1353601026,\n     *               'exp': 1353604926}\n     *           SAML assertions are similarly specified, but with an identity provider\n     *           dependent structure.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $access_levels\n     *           A list of access level resource names that allow resources to be\n     *           accessed by authenticated requester. It is part of Secure GCP processing\n     *           for the incoming request. An access level string has the format:\n     *           \"//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}\"\n     *           Example:\n     *           \"//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL\"\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The authenticated principal. Reflects the issuer (`iss`) and subject\n     * (`sub`) claims within a JWT. The issuer and subject should be `/`\n     * delimited, with `/` percent-encoded within the subject fragment. For\n     * Google accounts, the principal format is:\n     * \"https://accounts.google.com/{id}\"\n     *\n     * Generated from protobuf field <code>string principal = 1;</code>\n     * @return string\n     */\n    public function getPrincipal()\n    {\n        return $this->principal;\n    }\n\n    /**\n     * The authenticated principal. Reflects the issuer (`iss`) and subject\n     * (`sub`) claims within a JWT. The issuer and subject should be `/`\n     * delimited, with `/` percent-encoded within the subject fragment. For\n     * Google accounts, the principal format is:\n     * \"https://accounts.google.com/{id}\"\n     *\n     * Generated from protobuf field <code>string principal = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPrincipal($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->principal = $var;\n\n        return $this;\n    }\n\n    /**\n     * The intended audience(s) for this authentication information. Reflects\n     * the audience (`aud`) claim within a JWT. The audience\n     * value(s) depends on the `issuer`, but typically include one or more of\n     * the following pieces of information:\n     * *  The services intended to receive the credential. For example,\n     *    [\"https://pubsub.googleapis.com/\", \"https://storage.googleapis.com/\"].\n     * *  A set of service-based scopes. For example,\n     *    [\"https://www.googleapis.com/auth/cloud-platform\"].\n     * *  The client id of an app, such as the Firebase project id for JWTs\n     *    from Firebase Auth.\n     * Consult the documentation for the credential issuer to determine the\n     * information provided.\n     *\n     * Generated from protobuf field <code>repeated string audiences = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAudiences()\n    {\n        return $this->audiences;\n    }\n\n    /**\n     * The intended audience(s) for this authentication information. Reflects\n     * the audience (`aud`) claim within a JWT. The audience\n     * value(s) depends on the `issuer`, but typically include one or more of\n     * the following pieces of information:\n     * *  The services intended to receive the credential. For example,\n     *    [\"https://pubsub.googleapis.com/\", \"https://storage.googleapis.com/\"].\n     * *  A set of service-based scopes. For example,\n     *    [\"https://www.googleapis.com/auth/cloud-platform\"].\n     * *  The client id of an app, such as the Firebase project id for JWTs\n     *    from Firebase Auth.\n     * Consult the documentation for the credential issuer to determine the\n     * information provided.\n     *\n     * Generated from protobuf field <code>repeated string audiences = 2;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAudiences($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->audiences = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The authorized presenter of the credential. Reflects the optional\n     * Authorized Presenter (`azp`) claim within a JWT or the\n     * OAuth client id. For example, a Google Cloud Platform client id looks\n     * as follows: \"123456789012.apps.googleusercontent.com\".\n     *\n     * Generated from protobuf field <code>string presenter = 3;</code>\n     * @return string\n     */\n    public function getPresenter()\n    {\n        return $this->presenter;\n    }\n\n    /**\n     * The authorized presenter of the credential. Reflects the optional\n     * Authorized Presenter (`azp`) claim within a JWT or the\n     * OAuth client id. For example, a Google Cloud Platform client id looks\n     * as follows: \"123456789012.apps.googleusercontent.com\".\n     *\n     * Generated from protobuf field <code>string presenter = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPresenter($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->presenter = $var;\n\n        return $this;\n    }\n\n    /**\n     * Structured claims presented with the credential. JWTs include\n     * `{key: value}` pairs for standard and private claims. The following\n     * is a subset of the standard required and optional claims that would\n     * typically be presented for a Google-based JWT:\n     *    {'iss': 'accounts.google.com',\n     *     'sub': '113289723416554971153',\n     *     'aud': ['123456789012', 'pubsub.googleapis.com'],\n     *     'azp': '123456789012.apps.googleusercontent.com',\n     *     'email': 'jsmith&#64;example.com',\n     *     'iat': 1353601026,\n     *     'exp': 1353604926}\n     * SAML assertions are similarly specified, but with an identity provider\n     * dependent structure.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct claims = 4;</code>\n     * @return \\Google\\Protobuf\\Struct|null\n     */\n    public function getClaims()\n    {\n        return $this->claims;\n    }\n\n    public function hasClaims()\n    {\n        return isset($this->claims);\n    }\n\n    public function clearClaims()\n    {\n        unset($this->claims);\n    }\n\n    /**\n     * Structured claims presented with the credential. JWTs include\n     * `{key: value}` pairs for standard and private claims. The following\n     * is a subset of the standard required and optional claims that would\n     * typically be presented for a Google-based JWT:\n     *    {'iss': 'accounts.google.com',\n     *     'sub': '113289723416554971153',\n     *     'aud': ['123456789012', 'pubsub.googleapis.com'],\n     *     'azp': '123456789012.apps.googleusercontent.com',\n     *     'email': 'jsmith&#64;example.com',\n     *     'iat': 1353601026,\n     *     'exp': 1353604926}\n     * SAML assertions are similarly specified, but with an identity provider\n     * dependent structure.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct claims = 4;</code>\n     * @param \\Google\\Protobuf\\Struct $var\n     * @return $this\n     */\n    public function setClaims($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Struct::class);\n        $this->claims = $var;\n\n        return $this;\n    }\n\n    /**\n     * A list of access level resource names that allow resources to be\n     * accessed by authenticated requester. It is part of Secure GCP processing\n     * for the incoming request. An access level string has the format:\n     * \"//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}\"\n     * Example:\n     * \"//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL\"\n     *\n     * Generated from protobuf field <code>repeated string access_levels = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAccessLevels()\n    {\n        return $this->access_levels;\n    }\n\n    /**\n     * A list of access level resource names that allow resources to be\n     * accessed by authenticated requester. It is part of Secure GCP processing\n     * for the incoming request. An access level string has the format:\n     * \"//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}\"\n     * Example:\n     * \"//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL\"\n     *\n     * Generated from protobuf field <code>repeated string access_levels = 5;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAccessLevels($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->access_levels = $arr;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext/Peer.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context\\AttributeContext;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines attributes for a node that handles a network request.\n * The node can be either a service or an application that sends, forwards,\n * or receives the request. Service peers should fill in\n * `principal` and `labels` as appropriate.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext.Peer</code>\n */\nclass Peer extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The IP address of the peer.\n     *\n     * Generated from protobuf field <code>string ip = 1;</code>\n     */\n    protected $ip = '';\n    /**\n     * The network port of the peer.\n     *\n     * Generated from protobuf field <code>int64 port = 2;</code>\n     */\n    protected $port = 0;\n    /**\n     * The labels associated with the peer.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 6;</code>\n     */\n    private $labels;\n    /**\n     * The identity of this peer. Similar to `Request.auth.principal`, but\n     * relative to the peer instead of the request. For example, the\n     * identity associated with a load balancer that forwarded the request.\n     *\n     * Generated from protobuf field <code>string principal = 7;</code>\n     */\n    protected $principal = '';\n    /**\n     * The CLDR country/region code associated with the above IP address.\n     * If the IP address is private, the `region_code` should reflect the\n     * physical location where this peer is running.\n     *\n     * Generated from protobuf field <code>string region_code = 8;</code>\n     */\n    protected $region_code = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $ip\n     *           The IP address of the peer.\n     *     @type int|string $port\n     *           The network port of the peer.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $labels\n     *           The labels associated with the peer.\n     *     @type string $principal\n     *           The identity of this peer. Similar to `Request.auth.principal`, but\n     *           relative to the peer instead of the request. For example, the\n     *           identity associated with a load balancer that forwarded the request.\n     *     @type string $region_code\n     *           The CLDR country/region code associated with the above IP address.\n     *           If the IP address is private, the `region_code` should reflect the\n     *           physical location where this peer is running.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The IP address of the peer.\n     *\n     * Generated from protobuf field <code>string ip = 1;</code>\n     * @return string\n     */\n    public function getIp()\n    {\n        return $this->ip;\n    }\n\n    /**\n     * The IP address of the peer.\n     *\n     * Generated from protobuf field <code>string ip = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setIp($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->ip = $var;\n\n        return $this;\n    }\n\n    /**\n     * The network port of the peer.\n     *\n     * Generated from protobuf field <code>int64 port = 2;</code>\n     * @return int|string\n     */\n    public function getPort()\n    {\n        return $this->port;\n    }\n\n    /**\n     * The network port of the peer.\n     *\n     * Generated from protobuf field <code>int64 port = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setPort($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->port = $var;\n\n        return $this;\n    }\n\n    /**\n     * The labels associated with the peer.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * The labels associated with the peer.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 6;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The identity of this peer. Similar to `Request.auth.principal`, but\n     * relative to the peer instead of the request. For example, the\n     * identity associated with a load balancer that forwarded the request.\n     *\n     * Generated from protobuf field <code>string principal = 7;</code>\n     * @return string\n     */\n    public function getPrincipal()\n    {\n        return $this->principal;\n    }\n\n    /**\n     * The identity of this peer. Similar to `Request.auth.principal`, but\n     * relative to the peer instead of the request. For example, the\n     * identity associated with a load balancer that forwarded the request.\n     *\n     * Generated from protobuf field <code>string principal = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPrincipal($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->principal = $var;\n\n        return $this;\n    }\n\n    /**\n     * The CLDR country/region code associated with the above IP address.\n     * If the IP address is private, the `region_code` should reflect the\n     * physical location where this peer is running.\n     *\n     * Generated from protobuf field <code>string region_code = 8;</code>\n     * @return string\n     */\n    public function getRegionCode()\n    {\n        return $this->region_code;\n    }\n\n    /**\n     * The CLDR country/region code associated with the above IP address.\n     * If the IP address is private, the `region_code` should reflect the\n     * physical location where this peer is running.\n     *\n     * Generated from protobuf field <code>string region_code = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRegionCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->region_code = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext/Request.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context\\AttributeContext;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines attributes for an HTTP request. If the actual\n * request is not an HTTP request, the runtime system should try to map\n * the actual request to an equivalent HTTP request.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext.Request</code>\n */\nclass Request extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The unique ID for a request, which can be propagated to downstream\n     * systems. The ID should have low probability of collision\n     * within a single day for a specific service.\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     */\n    protected $id = '';\n    /**\n     * The HTTP request method, such as `GET`, `POST`.\n     *\n     * Generated from protobuf field <code>string method = 2;</code>\n     */\n    protected $method = '';\n    /**\n     * The HTTP request headers. If multiple headers share the same key, they\n     * must be merged according to the HTTP spec. All header keys must be\n     * lowercased, because HTTP header keys are case-insensitive.\n     *\n     * Generated from protobuf field <code>map<string, string> headers = 3;</code>\n     */\n    private $headers;\n    /**\n     * The HTTP URL path, excluding the query parameters.\n     *\n     * Generated from protobuf field <code>string path = 4;</code>\n     */\n    protected $path = '';\n    /**\n     * The HTTP request `Host` header value.\n     *\n     * Generated from protobuf field <code>string host = 5;</code>\n     */\n    protected $host = '';\n    /**\n     * The HTTP URL scheme, such as `http` and `https`.\n     *\n     * Generated from protobuf field <code>string scheme = 6;</code>\n     */\n    protected $scheme = '';\n    /**\n     * The HTTP URL query in the format of `name1=value1&name2=value2`, as it\n     * appears in the first line of the HTTP request. No decoding is performed.\n     *\n     * Generated from protobuf field <code>string query = 7;</code>\n     */\n    protected $query = '';\n    /**\n     * The timestamp when the `destination` service receives the last byte of\n     * the request.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp time = 9;</code>\n     */\n    protected $time = null;\n    /**\n     * The HTTP request size in bytes. If unknown, it must be -1.\n     *\n     * Generated from protobuf field <code>int64 size = 10;</code>\n     */\n    protected $size = 0;\n    /**\n     * The network protocol used with the request, such as \"http/1.1\",\n     * \"spdy/3\", \"h2\", \"h2c\", \"webrtc\", \"tcp\", \"udp\", \"quic\". See\n     * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     * for details.\n     *\n     * Generated from protobuf field <code>string protocol = 11;</code>\n     */\n    protected $protocol = '';\n    /**\n     * A special parameter for request reason. It is used by security systems\n     * to associate auditing information with a request.\n     *\n     * Generated from protobuf field <code>string reason = 12;</code>\n     */\n    protected $reason = '';\n    /**\n     * The request authentication. May be absent for unauthenticated requests.\n     * Derived from the HTTP request `Authorization` header or equivalent.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Auth auth = 13;</code>\n     */\n    protected $auth = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $id\n     *           The unique ID for a request, which can be propagated to downstream\n     *           systems. The ID should have low probability of collision\n     *           within a single day for a specific service.\n     *     @type string $method\n     *           The HTTP request method, such as `GET`, `POST`.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $headers\n     *           The HTTP request headers. If multiple headers share the same key, they\n     *           must be merged according to the HTTP spec. All header keys must be\n     *           lowercased, because HTTP header keys are case-insensitive.\n     *     @type string $path\n     *           The HTTP URL path, excluding the query parameters.\n     *     @type string $host\n     *           The HTTP request `Host` header value.\n     *     @type string $scheme\n     *           The HTTP URL scheme, such as `http` and `https`.\n     *     @type string $query\n     *           The HTTP URL query in the format of `name1=value1&name2=value2`, as it\n     *           appears in the first line of the HTTP request. No decoding is performed.\n     *     @type \\Google\\Protobuf\\Timestamp $time\n     *           The timestamp when the `destination` service receives the last byte of\n     *           the request.\n     *     @type int|string $size\n     *           The HTTP request size in bytes. If unknown, it must be -1.\n     *     @type string $protocol\n     *           The network protocol used with the request, such as \"http/1.1\",\n     *           \"spdy/3\", \"h2\", \"h2c\", \"webrtc\", \"tcp\", \"udp\", \"quic\". See\n     *           https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     *           for details.\n     *     @type string $reason\n     *           A special parameter for request reason. It is used by security systems\n     *           to associate auditing information with a request.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Auth $auth\n     *           The request authentication. May be absent for unauthenticated requests.\n     *           Derived from the HTTP request `Authorization` header or equivalent.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The unique ID for a request, which can be propagated to downstream\n     * systems. The ID should have low probability of collision\n     * within a single day for a specific service.\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     * @return string\n     */\n    public function getId()\n    {\n        return $this->id;\n    }\n\n    /**\n     * The unique ID for a request, which can be propagated to downstream\n     * systems. The ID should have low probability of collision\n     * within a single day for a specific service.\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->id = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP request method, such as `GET`, `POST`.\n     *\n     * Generated from protobuf field <code>string method = 2;</code>\n     * @return string\n     */\n    public function getMethod()\n    {\n        return $this->method;\n    }\n\n    /**\n     * The HTTP request method, such as `GET`, `POST`.\n     *\n     * Generated from protobuf field <code>string method = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMethod($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->method = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP request headers. If multiple headers share the same key, they\n     * must be merged according to the HTTP spec. All header keys must be\n     * lowercased, because HTTP header keys are case-insensitive.\n     *\n     * Generated from protobuf field <code>map<string, string> headers = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getHeaders()\n    {\n        return $this->headers;\n    }\n\n    /**\n     * The HTTP request headers. If multiple headers share the same key, they\n     * must be merged according to the HTTP spec. All header keys must be\n     * lowercased, because HTTP header keys are case-insensitive.\n     *\n     * Generated from protobuf field <code>map<string, string> headers = 3;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setHeaders($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->headers = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP URL path, excluding the query parameters.\n     *\n     * Generated from protobuf field <code>string path = 4;</code>\n     * @return string\n     */\n    public function getPath()\n    {\n        return $this->path;\n    }\n\n    /**\n     * The HTTP URL path, excluding the query parameters.\n     *\n     * Generated from protobuf field <code>string path = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPath($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->path = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP request `Host` header value.\n     *\n     * Generated from protobuf field <code>string host = 5;</code>\n     * @return string\n     */\n    public function getHost()\n    {\n        return $this->host;\n    }\n\n    /**\n     * The HTTP request `Host` header value.\n     *\n     * Generated from protobuf field <code>string host = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setHost($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->host = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP URL scheme, such as `http` and `https`.\n     *\n     * Generated from protobuf field <code>string scheme = 6;</code>\n     * @return string\n     */\n    public function getScheme()\n    {\n        return $this->scheme;\n    }\n\n    /**\n     * The HTTP URL scheme, such as `http` and `https`.\n     *\n     * Generated from protobuf field <code>string scheme = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setScheme($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->scheme = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP URL query in the format of `name1=value1&name2=value2`, as it\n     * appears in the first line of the HTTP request. No decoding is performed.\n     *\n     * Generated from protobuf field <code>string query = 7;</code>\n     * @return string\n     */\n    public function getQuery()\n    {\n        return $this->query;\n    }\n\n    /**\n     * The HTTP URL query in the format of `name1=value1&name2=value2`, as it\n     * appears in the first line of the HTTP request. No decoding is performed.\n     *\n     * Generated from protobuf field <code>string query = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setQuery($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->query = $var;\n\n        return $this;\n    }\n\n    /**\n     * The timestamp when the `destination` service receives the last byte of\n     * the request.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp time = 9;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getTime()\n    {\n        return $this->time;\n    }\n\n    public function hasTime()\n    {\n        return isset($this->time);\n    }\n\n    public function clearTime()\n    {\n        unset($this->time);\n    }\n\n    /**\n     * The timestamp when the `destination` service receives the last byte of\n     * the request.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp time = 9;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->time = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP request size in bytes. If unknown, it must be -1.\n     *\n     * Generated from protobuf field <code>int64 size = 10;</code>\n     * @return int|string\n     */\n    public function getSize()\n    {\n        return $this->size;\n    }\n\n    /**\n     * The HTTP request size in bytes. If unknown, it must be -1.\n     *\n     * Generated from protobuf field <code>int64 size = 10;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setSize($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The network protocol used with the request, such as \"http/1.1\",\n     * \"spdy/3\", \"h2\", \"h2c\", \"webrtc\", \"tcp\", \"udp\", \"quic\". See\n     * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     * for details.\n     *\n     * Generated from protobuf field <code>string protocol = 11;</code>\n     * @return string\n     */\n    public function getProtocol()\n    {\n        return $this->protocol;\n    }\n\n    /**\n     * The network protocol used with the request, such as \"http/1.1\",\n     * \"spdy/3\", \"h2\", \"h2c\", \"webrtc\", \"tcp\", \"udp\", \"quic\". See\n     * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids\n     * for details.\n     *\n     * Generated from protobuf field <code>string protocol = 11;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setProtocol($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->protocol = $var;\n\n        return $this;\n    }\n\n    /**\n     * A special parameter for request reason. It is used by security systems\n     * to associate auditing information with a request.\n     *\n     * Generated from protobuf field <code>string reason = 12;</code>\n     * @return string\n     */\n    public function getReason()\n    {\n        return $this->reason;\n    }\n\n    /**\n     * A special parameter for request reason. It is used by security systems\n     * to associate auditing information with a request.\n     *\n     * Generated from protobuf field <code>string reason = 12;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setReason($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->reason = $var;\n\n        return $this;\n    }\n\n    /**\n     * The request authentication. May be absent for unauthenticated requests.\n     * Derived from the HTTP request `Authorization` header or equivalent.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Auth auth = 13;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Auth|null\n     */\n    public function getAuth()\n    {\n        return $this->auth;\n    }\n\n    public function hasAuth()\n    {\n        return isset($this->auth);\n    }\n\n    public function clearAuth()\n    {\n        unset($this->auth);\n    }\n\n    /**\n     * The request authentication. May be absent for unauthenticated requests.\n     * Derived from the HTTP request `Authorization` header or equivalent.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Auth auth = 13;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Auth $var\n     * @return $this\n     */\n    public function setAuth($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Auth::class);\n        $this->auth = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext/Resource.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context\\AttributeContext;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines core attributes for a resource. A resource is an\n * addressable (named) entity provided by the destination service. For\n * example, a file stored on a network storage service.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext.Resource</code>\n */\nclass Resource extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the service that this resource belongs to, such as\n     * `pubsub.googleapis.com`. The service may be different from the DNS\n     * hostname that actually serves the request.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     */\n    protected $service = '';\n    /**\n     * The stable identifier (name) of a resource on the `service`. A resource\n     * can be logically identified as \"//{resource.service}/{resource.name}\".\n     * The differences between a resource name and a URI are:\n     * *   Resource name is a logical identifier, independent of network\n     *     protocol and API version. For example,\n     *     `//pubsub.googleapis.com/projects/123/topics/news-feed`.\n     * *   URI often includes protocol and version information, so it can\n     *     be used directly by applications. For example,\n     *     `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`.\n     * See https://cloud.google.com/apis/design/resource_names for details.\n     *\n     * Generated from protobuf field <code>string name = 2;</code>\n     */\n    protected $name = '';\n    /**\n     * The type of the resource. The syntax is platform-specific because\n     * different platforms define their resources differently.\n     * For Google APIs, the type format must be \"{service}/{kind}\", such as\n     * \"pubsub.googleapis.com/Topic\".\n     *\n     * Generated from protobuf field <code>string type = 3;</code>\n     */\n    protected $type = '';\n    /**\n     * The labels or tags on the resource, such as AWS resource tags and\n     * Kubernetes resource labels.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 4;</code>\n     */\n    private $labels;\n    /**\n     * The unique identifier of the resource. UID is unique in the time\n     * and space for this resource within the scope of the service. It is\n     * typically generated by the server on successful creation of a resource\n     * and must not be changed. UID is used to uniquely identify resources\n     * with resource name reuses. This should be a UUID4.\n     *\n     * Generated from protobuf field <code>string uid = 5;</code>\n     */\n    protected $uid = '';\n    /**\n     * Annotations is an unstructured key-value map stored with a resource that\n     * may be set by external tools to store and retrieve arbitrary metadata.\n     * They are not queryable and should be preserved when modifying objects.\n     * More info:\n     * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/\n     *\n     * Generated from protobuf field <code>map<string, string> annotations = 6;</code>\n     */\n    private $annotations;\n    /**\n     * Mutable. The display name set by clients. Must be <= 63 characters.\n     *\n     * Generated from protobuf field <code>string display_name = 7;</code>\n     */\n    protected $display_name = '';\n    /**\n     * Output only. The timestamp when the resource was created. This may\n     * be either the time creation was initiated or when it was completed.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp create_time = 8;</code>\n     */\n    protected $create_time = null;\n    /**\n     * Output only. The timestamp when the resource was last updated. Any\n     * change to the resource made by users must refresh this value.\n     * Changes to a resource made by the service should refresh this value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp update_time = 9;</code>\n     */\n    protected $update_time = null;\n    /**\n     * Output only. The timestamp when the resource was deleted.\n     * If the resource is not deleted, this must be empty.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp delete_time = 10;</code>\n     */\n    protected $delete_time = null;\n    /**\n     * Output only. An opaque value that uniquely identifies a version or\n     * generation of a resource. It can be used to confirm that the client\n     * and server agree on the ordering of a resource being written.\n     *\n     * Generated from protobuf field <code>string etag = 11;</code>\n     */\n    protected $etag = '';\n    /**\n     * Immutable. The location of the resource. The location encoding is\n     * specific to the service provider, and new encoding may be introduced\n     * as the service evolves.\n     * For Google Cloud products, the encoding is what is used by Google Cloud\n     * APIs, such as `us-east1`, `aws-us-east-1`, and `azure-eastus2`. The\n     * semantics of `location` is identical to the\n     * `cloud.googleapis.com/location` label used by some Google Cloud APIs.\n     *\n     * Generated from protobuf field <code>string location = 12;</code>\n     */\n    protected $location = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $service\n     *           The name of the service that this resource belongs to, such as\n     *           `pubsub.googleapis.com`. The service may be different from the DNS\n     *           hostname that actually serves the request.\n     *     @type string $name\n     *           The stable identifier (name) of a resource on the `service`. A resource\n     *           can be logically identified as \"//{resource.service}/{resource.name}\".\n     *           The differences between a resource name and a URI are:\n     *           *   Resource name is a logical identifier, independent of network\n     *               protocol and API version. For example,\n     *               `//pubsub.googleapis.com/projects/123/topics/news-feed`.\n     *           *   URI often includes protocol and version information, so it can\n     *               be used directly by applications. For example,\n     *               `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`.\n     *           See https://cloud.google.com/apis/design/resource_names for details.\n     *     @type string $type\n     *           The type of the resource. The syntax is platform-specific because\n     *           different platforms define their resources differently.\n     *           For Google APIs, the type format must be \"{service}/{kind}\", such as\n     *           \"pubsub.googleapis.com/Topic\".\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $labels\n     *           The labels or tags on the resource, such as AWS resource tags and\n     *           Kubernetes resource labels.\n     *     @type string $uid\n     *           The unique identifier of the resource. UID is unique in the time\n     *           and space for this resource within the scope of the service. It is\n     *           typically generated by the server on successful creation of a resource\n     *           and must not be changed. UID is used to uniquely identify resources\n     *           with resource name reuses. This should be a UUID4.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $annotations\n     *           Annotations is an unstructured key-value map stored with a resource that\n     *           may be set by external tools to store and retrieve arbitrary metadata.\n     *           They are not queryable and should be preserved when modifying objects.\n     *           More info:\n     *           https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/\n     *     @type string $display_name\n     *           Mutable. The display name set by clients. Must be <= 63 characters.\n     *     @type \\Google\\Protobuf\\Timestamp $create_time\n     *           Output only. The timestamp when the resource was created. This may\n     *           be either the time creation was initiated or when it was completed.\n     *     @type \\Google\\Protobuf\\Timestamp $update_time\n     *           Output only. The timestamp when the resource was last updated. Any\n     *           change to the resource made by users must refresh this value.\n     *           Changes to a resource made by the service should refresh this value.\n     *     @type \\Google\\Protobuf\\Timestamp $delete_time\n     *           Output only. The timestamp when the resource was deleted.\n     *           If the resource is not deleted, this must be empty.\n     *     @type string $etag\n     *           Output only. An opaque value that uniquely identifies a version or\n     *           generation of a resource. It can be used to confirm that the client\n     *           and server agree on the ordering of a resource being written.\n     *     @type string $location\n     *           Immutable. The location of the resource. The location encoding is\n     *           specific to the service provider, and new encoding may be introduced\n     *           as the service evolves.\n     *           For Google Cloud products, the encoding is what is used by Google Cloud\n     *           APIs, such as `us-east1`, `aws-us-east-1`, and `azure-eastus2`. The\n     *           semantics of `location` is identical to the\n     *           `cloud.googleapis.com/location` label used by some Google Cloud APIs.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the service that this resource belongs to, such as\n     * `pubsub.googleapis.com`. The service may be different from the DNS\n     * hostname that actually serves the request.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     * @return string\n     */\n    public function getService()\n    {\n        return $this->service;\n    }\n\n    /**\n     * The name of the service that this resource belongs to, such as\n     * `pubsub.googleapis.com`. The service may be different from the DNS\n     * hostname that actually serves the request.\n     *\n     * Generated from protobuf field <code>string service = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setService($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->service = $var;\n\n        return $this;\n    }\n\n    /**\n     * The stable identifier (name) of a resource on the `service`. A resource\n     * can be logically identified as \"//{resource.service}/{resource.name}\".\n     * The differences between a resource name and a URI are:\n     * *   Resource name is a logical identifier, independent of network\n     *     protocol and API version. For example,\n     *     `//pubsub.googleapis.com/projects/123/topics/news-feed`.\n     * *   URI often includes protocol and version information, so it can\n     *     be used directly by applications. For example,\n     *     `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`.\n     * See https://cloud.google.com/apis/design/resource_names for details.\n     *\n     * Generated from protobuf field <code>string name = 2;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The stable identifier (name) of a resource on the `service`. A resource\n     * can be logically identified as \"//{resource.service}/{resource.name}\".\n     * The differences between a resource name and a URI are:\n     * *   Resource name is a logical identifier, independent of network\n     *     protocol and API version. For example,\n     *     `//pubsub.googleapis.com/projects/123/topics/news-feed`.\n     * *   URI often includes protocol and version information, so it can\n     *     be used directly by applications. For example,\n     *     `https://pubsub.googleapis.com/v1/projects/123/topics/news-feed`.\n     * See https://cloud.google.com/apis/design/resource_names for details.\n     *\n     * Generated from protobuf field <code>string name = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The type of the resource. The syntax is platform-specific because\n     * different platforms define their resources differently.\n     * For Google APIs, the type format must be \"{service}/{kind}\", such as\n     * \"pubsub.googleapis.com/Topic\".\n     *\n     * Generated from protobuf field <code>string type = 3;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * The type of the resource. The syntax is platform-specific because\n     * different platforms define their resources differently.\n     * For Google APIs, the type format must be \"{service}/{kind}\", such as\n     * \"pubsub.googleapis.com/Topic\".\n     *\n     * Generated from protobuf field <code>string type = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The labels or tags on the resource, such as AWS resource tags and\n     * Kubernetes resource labels.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getLabels()\n    {\n        return $this->labels;\n    }\n\n    /**\n     * The labels or tags on the resource, such as AWS resource tags and\n     * Kubernetes resource labels.\n     *\n     * Generated from protobuf field <code>map<string, string> labels = 4;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setLabels($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->labels = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The unique identifier of the resource. UID is unique in the time\n     * and space for this resource within the scope of the service. It is\n     * typically generated by the server on successful creation of a resource\n     * and must not be changed. UID is used to uniquely identify resources\n     * with resource name reuses. This should be a UUID4.\n     *\n     * Generated from protobuf field <code>string uid = 5;</code>\n     * @return string\n     */\n    public function getUid()\n    {\n        return $this->uid;\n    }\n\n    /**\n     * The unique identifier of the resource. UID is unique in the time\n     * and space for this resource within the scope of the service. It is\n     * typically generated by the server on successful creation of a resource\n     * and must not be changed. UID is used to uniquely identify resources\n     * with resource name reuses. This should be a UUID4.\n     *\n     * Generated from protobuf field <code>string uid = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setUid($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->uid = $var;\n\n        return $this;\n    }\n\n    /**\n     * Annotations is an unstructured key-value map stored with a resource that\n     * may be set by external tools to store and retrieve arbitrary metadata.\n     * They are not queryable and should be preserved when modifying objects.\n     * More info:\n     * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/\n     *\n     * Generated from protobuf field <code>map<string, string> annotations = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getAnnotations()\n    {\n        return $this->annotations;\n    }\n\n    /**\n     * Annotations is an unstructured key-value map stored with a resource that\n     * may be set by external tools to store and retrieve arbitrary metadata.\n     * They are not queryable and should be preserved when modifying objects.\n     * More info:\n     * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/\n     *\n     * Generated from protobuf field <code>map<string, string> annotations = 6;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setAnnotations($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->annotations = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Mutable. The display name set by clients. Must be <= 63 characters.\n     *\n     * Generated from protobuf field <code>string display_name = 7;</code>\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->display_name;\n    }\n\n    /**\n     * Mutable. The display name set by clients. Must be <= 63 characters.\n     *\n     * Generated from protobuf field <code>string display_name = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDisplayName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->display_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Output only. The timestamp when the resource was created. This may\n     * be either the time creation was initiated or when it was completed.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp create_time = 8;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getCreateTime()\n    {\n        return $this->create_time;\n    }\n\n    public function hasCreateTime()\n    {\n        return isset($this->create_time);\n    }\n\n    public function clearCreateTime()\n    {\n        unset($this->create_time);\n    }\n\n    /**\n     * Output only. The timestamp when the resource was created. This may\n     * be either the time creation was initiated or when it was completed.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp create_time = 8;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setCreateTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->create_time = $var;\n\n        return $this;\n    }\n\n    /**\n     * Output only. The timestamp when the resource was last updated. Any\n     * change to the resource made by users must refresh this value.\n     * Changes to a resource made by the service should refresh this value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp update_time = 9;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getUpdateTime()\n    {\n        return $this->update_time;\n    }\n\n    public function hasUpdateTime()\n    {\n        return isset($this->update_time);\n    }\n\n    public function clearUpdateTime()\n    {\n        unset($this->update_time);\n    }\n\n    /**\n     * Output only. The timestamp when the resource was last updated. Any\n     * change to the resource made by users must refresh this value.\n     * Changes to a resource made by the service should refresh this value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp update_time = 9;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setUpdateTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->update_time = $var;\n\n        return $this;\n    }\n\n    /**\n     * Output only. The timestamp when the resource was deleted.\n     * If the resource is not deleted, this must be empty.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp delete_time = 10;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getDeleteTime()\n    {\n        return $this->delete_time;\n    }\n\n    public function hasDeleteTime()\n    {\n        return isset($this->delete_time);\n    }\n\n    public function clearDeleteTime()\n    {\n        unset($this->delete_time);\n    }\n\n    /**\n     * Output only. The timestamp when the resource was deleted.\n     * If the resource is not deleted, this must be empty.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp delete_time = 10;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setDeleteTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->delete_time = $var;\n\n        return $this;\n    }\n\n    /**\n     * Output only. An opaque value that uniquely identifies a version or\n     * generation of a resource. It can be used to confirm that the client\n     * and server agree on the ordering of a resource being written.\n     *\n     * Generated from protobuf field <code>string etag = 11;</code>\n     * @return string\n     */\n    public function getEtag()\n    {\n        return $this->etag;\n    }\n\n    /**\n     * Output only. An opaque value that uniquely identifies a version or\n     * generation of a resource. It can be used to confirm that the client\n     * and server agree on the ordering of a resource being written.\n     *\n     * Generated from protobuf field <code>string etag = 11;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setEtag($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->etag = $var;\n\n        return $this;\n    }\n\n    /**\n     * Immutable. The location of the resource. The location encoding is\n     * specific to the service provider, and new encoding may be introduced\n     * as the service evolves.\n     * For Google Cloud products, the encoding is what is used by Google Cloud\n     * APIs, such as `us-east1`, `aws-us-east-1`, and `azure-eastus2`. The\n     * semantics of `location` is identical to the\n     * `cloud.googleapis.com/location` label used by some Google Cloud APIs.\n     *\n     * Generated from protobuf field <code>string location = 12;</code>\n     * @return string\n     */\n    public function getLocation()\n    {\n        return $this->location;\n    }\n\n    /**\n     * Immutable. The location of the resource. The location encoding is\n     * specific to the service provider, and new encoding may be introduced\n     * as the service evolves.\n     * For Google Cloud products, the encoding is what is used by Google Cloud\n     * APIs, such as `us-east1`, `aws-us-east-1`, and `azure-eastus2`. The\n     * semantics of `location` is identical to the\n     * `cloud.googleapis.com/location` label used by some Google Cloud APIs.\n     *\n     * Generated from protobuf field <code>string location = 12;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLocation($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->location = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext/Response.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context\\AttributeContext;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines attributes for a typical network response. It\n * generally models semantics of an HTTP response.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext.Response</code>\n */\nclass Response extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The HTTP response status code, such as `200` and `404`.\n     *\n     * Generated from protobuf field <code>int64 code = 1;</code>\n     */\n    protected $code = 0;\n    /**\n     * The HTTP response size in bytes. If unknown, it must be -1.\n     *\n     * Generated from protobuf field <code>int64 size = 2;</code>\n     */\n    protected $size = 0;\n    /**\n     * The HTTP response headers. If multiple headers share the same key, they\n     * must be merged according to HTTP spec. All header keys must be\n     * lowercased, because HTTP header keys are case-insensitive.\n     *\n     * Generated from protobuf field <code>map<string, string> headers = 3;</code>\n     */\n    private $headers;\n    /**\n     * The timestamp when the `destination` service sends the last byte of\n     * the response.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp time = 4;</code>\n     */\n    protected $time = null;\n    /**\n     * The amount of time it takes the backend service to fully respond to a\n     * request. Measured from when the destination service starts to send the\n     * request to the backend until when the destination service receives the\n     * complete response from the backend.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration backend_latency = 5;</code>\n     */\n    protected $backend_latency = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $code\n     *           The HTTP response status code, such as `200` and `404`.\n     *     @type int|string $size\n     *           The HTTP response size in bytes. If unknown, it must be -1.\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $headers\n     *           The HTTP response headers. If multiple headers share the same key, they\n     *           must be merged according to HTTP spec. All header keys must be\n     *           lowercased, because HTTP header keys are case-insensitive.\n     *     @type \\Google\\Protobuf\\Timestamp $time\n     *           The timestamp when the `destination` service sends the last byte of\n     *           the response.\n     *     @type \\Google\\Protobuf\\Duration $backend_latency\n     *           The amount of time it takes the backend service to fully respond to a\n     *           request. Measured from when the destination service starts to send the\n     *           request to the backend until when the destination service receives the\n     *           complete response from the backend.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The HTTP response status code, such as `200` and `404`.\n     *\n     * Generated from protobuf field <code>int64 code = 1;</code>\n     * @return int|string\n     */\n    public function getCode()\n    {\n        return $this->code;\n    }\n\n    /**\n     * The HTTP response status code, such as `200` and `404`.\n     *\n     * Generated from protobuf field <code>int64 code = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setCode($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->code = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP response size in bytes. If unknown, it must be -1.\n     *\n     * Generated from protobuf field <code>int64 size = 2;</code>\n     * @return int|string\n     */\n    public function getSize()\n    {\n        return $this->size;\n    }\n\n    /**\n     * The HTTP response size in bytes. If unknown, it must be -1.\n     *\n     * Generated from protobuf field <code>int64 size = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setSize($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The HTTP response headers. If multiple headers share the same key, they\n     * must be merged according to HTTP spec. All header keys must be\n     * lowercased, because HTTP header keys are case-insensitive.\n     *\n     * Generated from protobuf field <code>map<string, string> headers = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getHeaders()\n    {\n        return $this->headers;\n    }\n\n    /**\n     * The HTTP response headers. If multiple headers share the same key, they\n     * must be merged according to HTTP spec. All header keys must be\n     * lowercased, because HTTP header keys are case-insensitive.\n     *\n     * Generated from protobuf field <code>map<string, string> headers = 3;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setHeaders($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->headers = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The timestamp when the `destination` service sends the last byte of\n     * the response.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp time = 4;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getTime()\n    {\n        return $this->time;\n    }\n\n    public function hasTime()\n    {\n        return isset($this->time);\n    }\n\n    public function clearTime()\n    {\n        unset($this->time);\n    }\n\n    /**\n     * The timestamp when the `destination` service sends the last byte of\n     * the response.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp time = 4;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->time = $var;\n\n        return $this;\n    }\n\n    /**\n     * The amount of time it takes the backend service to fully respond to a\n     * request. Measured from when the destination service starts to send the\n     * request to the backend until when the destination service receives the\n     * complete response from the backend.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration backend_latency = 5;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getBackendLatency()\n    {\n        return $this->backend_latency;\n    }\n\n    public function hasBackendLatency()\n    {\n        return isset($this->backend_latency);\n    }\n\n    public function clearBackendLatency()\n    {\n        unset($this->backend_latency);\n    }\n\n    /**\n     * The amount of time it takes the backend service to fully respond to a\n     * request. Measured from when the destination service starts to send the\n     * request to the backend until when the destination service receives the\n     * complete response from the backend.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration backend_latency = 5;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setBackendLatency($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->backend_latency = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AttributeContext.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/attribute_context.proto\n\nnamespace Google\\Rpc\\Context;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This message defines the standard attribute vocabulary for Google APIs.\n * An attribute is a piece of metadata that describes an activity on a network\n * service. For example, the size of an HTTP request, or the status code of\n * an HTTP response.\n * Each attribute has a type and a name, which is logically defined as\n * a proto message field in `AttributeContext`. The field type becomes the\n * attribute type, and the field path becomes the attribute name. For example,\n * the attribute `source.ip` maps to field `AttributeContext.source.ip`.\n * This message definition is guaranteed not to have any wire breaking change.\n * So you can use it directly for passing attributes across different systems.\n * NOTE: Different system may generate different subset of attributes. Please\n * verify the system specification before relying on an attribute generated\n * a system.\n *\n * Generated from protobuf message <code>google.rpc.context.AttributeContext</code>\n */\nclass AttributeContext extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The origin of a network activity. In a multi hop network activity,\n     * the origin represents the sender of the first hop. For the first hop,\n     * the `source` and the `origin` must have the same content.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer origin = 7;</code>\n     */\n    protected $origin = null;\n    /**\n     * The source of a network activity, such as starting a TCP connection.\n     * In a multi hop network activity, the source represents the sender of the\n     * last hop.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer source = 1;</code>\n     */\n    protected $source = null;\n    /**\n     * The destination of a network activity, such as accepting a TCP connection.\n     * In a multi hop network activity, the destination represents the receiver of\n     * the last hop.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer destination = 2;</code>\n     */\n    protected $destination = null;\n    /**\n     * Represents a network request, such as an HTTP request.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Request request = 3;</code>\n     */\n    protected $request = null;\n    /**\n     * Represents a network response, such as an HTTP response.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Response response = 4;</code>\n     */\n    protected $response = null;\n    /**\n     * Represents a target resource that is involved with a network activity.\n     * If multiple resources are involved with an activity, this must be the\n     * primary one.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Resource resource = 5;</code>\n     */\n    protected $resource = null;\n    /**\n     * Represents an API operation that is involved to a network activity.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Api api = 6;</code>\n     */\n    protected $api = null;\n    /**\n     * Supports extensions for advanced use cases, such as logs and metrics.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any extensions = 8;</code>\n     */\n    private $extensions;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Peer $origin\n     *           The origin of a network activity. In a multi hop network activity,\n     *           the origin represents the sender of the first hop. For the first hop,\n     *           the `source` and the `origin` must have the same content.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Peer $source\n     *           The source of a network activity, such as starting a TCP connection.\n     *           In a multi hop network activity, the source represents the sender of the\n     *           last hop.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Peer $destination\n     *           The destination of a network activity, such as accepting a TCP connection.\n     *           In a multi hop network activity, the destination represents the receiver of\n     *           the last hop.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Request $request\n     *           Represents a network request, such as an HTTP request.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Response $response\n     *           Represents a network response, such as an HTTP response.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Resource $resource\n     *           Represents a target resource that is involved with a network activity.\n     *           If multiple resources are involved with an activity, this must be the\n     *           primary one.\n     *     @type \\Google\\Rpc\\Context\\AttributeContext\\Api $api\n     *           Represents an API operation that is involved to a network activity.\n     *     @type array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $extensions\n     *           Supports extensions for advanced use cases, such as logs and metrics.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AttributeContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The origin of a network activity. In a multi hop network activity,\n     * the origin represents the sender of the first hop. For the first hop,\n     * the `source` and the `origin` must have the same content.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer origin = 7;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Peer|null\n     */\n    public function getOrigin()\n    {\n        return $this->origin;\n    }\n\n    public function hasOrigin()\n    {\n        return isset($this->origin);\n    }\n\n    public function clearOrigin()\n    {\n        unset($this->origin);\n    }\n\n    /**\n     * The origin of a network activity. In a multi hop network activity,\n     * the origin represents the sender of the first hop. For the first hop,\n     * the `source` and the `origin` must have the same content.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer origin = 7;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Peer $var\n     * @return $this\n     */\n    public function setOrigin($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Peer::class);\n        $this->origin = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source of a network activity, such as starting a TCP connection.\n     * In a multi hop network activity, the source represents the sender of the\n     * last hop.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer source = 1;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Peer|null\n     */\n    public function getSource()\n    {\n        return $this->source;\n    }\n\n    public function hasSource()\n    {\n        return isset($this->source);\n    }\n\n    public function clearSource()\n    {\n        unset($this->source);\n    }\n\n    /**\n     * The source of a network activity, such as starting a TCP connection.\n     * In a multi hop network activity, the source represents the sender of the\n     * last hop.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer source = 1;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Peer $var\n     * @return $this\n     */\n    public function setSource($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Peer::class);\n        $this->source = $var;\n\n        return $this;\n    }\n\n    /**\n     * The destination of a network activity, such as accepting a TCP connection.\n     * In a multi hop network activity, the destination represents the receiver of\n     * the last hop.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer destination = 2;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Peer|null\n     */\n    public function getDestination()\n    {\n        return $this->destination;\n    }\n\n    public function hasDestination()\n    {\n        return isset($this->destination);\n    }\n\n    public function clearDestination()\n    {\n        unset($this->destination);\n    }\n\n    /**\n     * The destination of a network activity, such as accepting a TCP connection.\n     * In a multi hop network activity, the destination represents the receiver of\n     * the last hop.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Peer destination = 2;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Peer $var\n     * @return $this\n     */\n    public function setDestination($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Peer::class);\n        $this->destination = $var;\n\n        return $this;\n    }\n\n    /**\n     * Represents a network request, such as an HTTP request.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Request request = 3;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Request|null\n     */\n    public function getRequest()\n    {\n        return $this->request;\n    }\n\n    public function hasRequest()\n    {\n        return isset($this->request);\n    }\n\n    public function clearRequest()\n    {\n        unset($this->request);\n    }\n\n    /**\n     * Represents a network request, such as an HTTP request.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Request request = 3;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Request $var\n     * @return $this\n     */\n    public function setRequest($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Request::class);\n        $this->request = $var;\n\n        return $this;\n    }\n\n    /**\n     * Represents a network response, such as an HTTP response.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Response response = 4;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Response|null\n     */\n    public function getResponse()\n    {\n        return $this->response;\n    }\n\n    public function hasResponse()\n    {\n        return isset($this->response);\n    }\n\n    public function clearResponse()\n    {\n        unset($this->response);\n    }\n\n    /**\n     * Represents a network response, such as an HTTP response.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Response response = 4;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Response $var\n     * @return $this\n     */\n    public function setResponse($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Response::class);\n        $this->response = $var;\n\n        return $this;\n    }\n\n    /**\n     * Represents a target resource that is involved with a network activity.\n     * If multiple resources are involved with an activity, this must be the\n     * primary one.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Resource resource = 5;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Resource|null\n     */\n    public function getResource()\n    {\n        return $this->resource;\n    }\n\n    public function hasResource()\n    {\n        return isset($this->resource);\n    }\n\n    public function clearResource()\n    {\n        unset($this->resource);\n    }\n\n    /**\n     * Represents a target resource that is involved with a network activity.\n     * If multiple resources are involved with an activity, this must be the\n     * primary one.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Resource resource = 5;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Resource $var\n     * @return $this\n     */\n    public function setResource($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Resource::class);\n        $this->resource = $var;\n\n        return $this;\n    }\n\n    /**\n     * Represents an API operation that is involved to a network activity.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Api api = 6;</code>\n     * @return \\Google\\Rpc\\Context\\AttributeContext\\Api|null\n     */\n    public function getApi()\n    {\n        return $this->api;\n    }\n\n    public function hasApi()\n    {\n        return isset($this->api);\n    }\n\n    public function clearApi()\n    {\n        unset($this->api);\n    }\n\n    /**\n     * Represents an API operation that is involved to a network activity.\n     *\n     * Generated from protobuf field <code>.google.rpc.context.AttributeContext.Api api = 6;</code>\n     * @param \\Google\\Rpc\\Context\\AttributeContext\\Api $var\n     * @return $this\n     */\n    public function setApi($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Context\\AttributeContext\\Api::class);\n        $this->api = $var;\n\n        return $this;\n    }\n\n    /**\n     * Supports extensions for advanced use cases, such as logs and metrics.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any extensions = 8;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getExtensions()\n    {\n        return $this->extensions;\n    }\n\n    /**\n     * Supports extensions for advanced use cases, such as logs and metrics.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any extensions = 8;</code>\n     * @param array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setExtensions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Any::class);\n        $this->extensions = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Context/AuditContext.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/context/audit_context.proto\n\nnamespace Google\\Rpc\\Context;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * `AuditContext` provides information that is needed for audit logging.\n *\n * Generated from protobuf message <code>google.rpc.context.AuditContext</code>\n */\nclass AuditContext extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Serialized audit log.\n     *\n     * Generated from protobuf field <code>bytes audit_log = 1;</code>\n     */\n    protected $audit_log = '';\n    /**\n     * An API request message that is scrubbed based on the method annotation.\n     * This field should only be filled if audit_log field is present.\n     * Service Control will use this to assemble a complete log for Cloud Audit\n     * Logs and Google internal audit logs.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct scrubbed_request = 2;</code>\n     */\n    protected $scrubbed_request = null;\n    /**\n     * An API response message that is scrubbed based on the method annotation.\n     * This field should only be filled if audit_log field is present.\n     * Service Control will use this to assemble a complete log for Cloud Audit\n     * Logs and Google internal audit logs.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct scrubbed_response = 3;</code>\n     */\n    protected $scrubbed_response = null;\n    /**\n     * Number of scrubbed response items.\n     *\n     * Generated from protobuf field <code>int32 scrubbed_response_item_count = 4;</code>\n     */\n    protected $scrubbed_response_item_count = 0;\n    /**\n     * Audit resource name which is scrubbed.\n     *\n     * Generated from protobuf field <code>string target_resource = 5;</code>\n     */\n    protected $target_resource = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $audit_log\n     *           Serialized audit log.\n     *     @type \\Google\\Protobuf\\Struct $scrubbed_request\n     *           An API request message that is scrubbed based on the method annotation.\n     *           This field should only be filled if audit_log field is present.\n     *           Service Control will use this to assemble a complete log for Cloud Audit\n     *           Logs and Google internal audit logs.\n     *     @type \\Google\\Protobuf\\Struct $scrubbed_response\n     *           An API response message that is scrubbed based on the method annotation.\n     *           This field should only be filled if audit_log field is present.\n     *           Service Control will use this to assemble a complete log for Cloud Audit\n     *           Logs and Google internal audit logs.\n     *     @type int $scrubbed_response_item_count\n     *           Number of scrubbed response items.\n     *     @type string $target_resource\n     *           Audit resource name which is scrubbed.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Context\\AuditContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Serialized audit log.\n     *\n     * Generated from protobuf field <code>bytes audit_log = 1;</code>\n     * @return string\n     */\n    public function getAuditLog()\n    {\n        return $this->audit_log;\n    }\n\n    /**\n     * Serialized audit log.\n     *\n     * Generated from protobuf field <code>bytes audit_log = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAuditLog($var)\n    {\n        GPBUtil::checkString($var, False);\n        $this->audit_log = $var;\n\n        return $this;\n    }\n\n    /**\n     * An API request message that is scrubbed based on the method annotation.\n     * This field should only be filled if audit_log field is present.\n     * Service Control will use this to assemble a complete log for Cloud Audit\n     * Logs and Google internal audit logs.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct scrubbed_request = 2;</code>\n     * @return \\Google\\Protobuf\\Struct|null\n     */\n    public function getScrubbedRequest()\n    {\n        return $this->scrubbed_request;\n    }\n\n    public function hasScrubbedRequest()\n    {\n        return isset($this->scrubbed_request);\n    }\n\n    public function clearScrubbedRequest()\n    {\n        unset($this->scrubbed_request);\n    }\n\n    /**\n     * An API request message that is scrubbed based on the method annotation.\n     * This field should only be filled if audit_log field is present.\n     * Service Control will use this to assemble a complete log for Cloud Audit\n     * Logs and Google internal audit logs.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct scrubbed_request = 2;</code>\n     * @param \\Google\\Protobuf\\Struct $var\n     * @return $this\n     */\n    public function setScrubbedRequest($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Struct::class);\n        $this->scrubbed_request = $var;\n\n        return $this;\n    }\n\n    /**\n     * An API response message that is scrubbed based on the method annotation.\n     * This field should only be filled if audit_log field is present.\n     * Service Control will use this to assemble a complete log for Cloud Audit\n     * Logs and Google internal audit logs.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct scrubbed_response = 3;</code>\n     * @return \\Google\\Protobuf\\Struct|null\n     */\n    public function getScrubbedResponse()\n    {\n        return $this->scrubbed_response;\n    }\n\n    public function hasScrubbedResponse()\n    {\n        return isset($this->scrubbed_response);\n    }\n\n    public function clearScrubbedResponse()\n    {\n        unset($this->scrubbed_response);\n    }\n\n    /**\n     * An API response message that is scrubbed based on the method annotation.\n     * This field should only be filled if audit_log field is present.\n     * Service Control will use this to assemble a complete log for Cloud Audit\n     * Logs and Google internal audit logs.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct scrubbed_response = 3;</code>\n     * @param \\Google\\Protobuf\\Struct $var\n     * @return $this\n     */\n    public function setScrubbedResponse($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Struct::class);\n        $this->scrubbed_response = $var;\n\n        return $this;\n    }\n\n    /**\n     * Number of scrubbed response items.\n     *\n     * Generated from protobuf field <code>int32 scrubbed_response_item_count = 4;</code>\n     * @return int\n     */\n    public function getScrubbedResponseItemCount()\n    {\n        return $this->scrubbed_response_item_count;\n    }\n\n    /**\n     * Number of scrubbed response items.\n     *\n     * Generated from protobuf field <code>int32 scrubbed_response_item_count = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setScrubbedResponseItemCount($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->scrubbed_response_item_count = $var;\n\n        return $this;\n    }\n\n    /**\n     * Audit resource name which is scrubbed.\n     *\n     * Generated from protobuf field <code>string target_resource = 5;</code>\n     * @return string\n     */\n    public function getTargetResource()\n    {\n        return $this->target_resource;\n    }\n\n    /**\n     * Audit resource name which is scrubbed.\n     *\n     * Generated from protobuf field <code>string target_resource = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTargetResource($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->target_resource = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/DebugInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes additional debugging info.\n *\n * Generated from protobuf message <code>google.rpc.DebugInfo</code>\n */\nclass DebugInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The stack trace entries indicating where the error occurred.\n     *\n     * Generated from protobuf field <code>repeated string stack_entries = 1;</code>\n     */\n    private $stack_entries;\n    /**\n     * Additional debugging information provided by the server.\n     *\n     * Generated from protobuf field <code>string detail = 2;</code>\n     */\n    protected $detail = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $stack_entries\n     *           The stack trace entries indicating where the error occurred.\n     *     @type string $detail\n     *           Additional debugging information provided by the server.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The stack trace entries indicating where the error occurred.\n     *\n     * Generated from protobuf field <code>repeated string stack_entries = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getStackEntries()\n    {\n        return $this->stack_entries;\n    }\n\n    /**\n     * The stack trace entries indicating where the error occurred.\n     *\n     * Generated from protobuf field <code>repeated string stack_entries = 1;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setStackEntries($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->stack_entries = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Additional debugging information provided by the server.\n     *\n     * Generated from protobuf field <code>string detail = 2;</code>\n     * @return string\n     */\n    public function getDetail()\n    {\n        return $this->detail;\n    }\n\n    /**\n     * Additional debugging information provided by the server.\n     *\n     * Generated from protobuf field <code>string detail = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDetail($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->detail = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/ErrorInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes the cause of the error with structured details.\n * Example of an error when contacting the \"pubsub.googleapis.com\" API when it\n * is not enabled:\n *     { \"reason\": \"API_DISABLED\"\n *       \"domain\": \"googleapis.com\"\n *       \"metadata\": {\n *         \"resource\": \"projects/123\",\n *         \"service\": \"pubsub.googleapis.com\"\n *       }\n *     }\n * This response indicates that the pubsub.googleapis.com API is not enabled.\n * Example of an error that is returned when attempting to create a Spanner\n * instance in a region that is out of stock:\n *     { \"reason\": \"STOCKOUT\"\n *       \"domain\": \"spanner.googleapis.com\",\n *       \"metadata\": {\n *         \"availableRegions\": \"us-central1,us-east2\"\n *       }\n *     }\n *\n * Generated from protobuf message <code>google.rpc.ErrorInfo</code>\n */\nclass ErrorInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The reason of the error. This is a constant value that identifies the\n     * proximate cause of the error. Error reasons are unique within a particular\n     * domain of errors. This should be at most 63 characters and match a\n     * regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents\n     * UPPER_SNAKE_CASE.\n     *\n     * Generated from protobuf field <code>string reason = 1;</code>\n     */\n    protected $reason = '';\n    /**\n     * The logical grouping to which the \"reason\" belongs. The error domain\n     * is typically the registered service name of the tool or product that\n     * generates the error. Example: \"pubsub.googleapis.com\". If the error is\n     * generated by some common infrastructure, the error domain must be a\n     * globally unique value that identifies the infrastructure. For Google API\n     * infrastructure, the error domain is \"googleapis.com\".\n     *\n     * Generated from protobuf field <code>string domain = 2;</code>\n     */\n    protected $domain = '';\n    /**\n     * Additional structured details about this error.\n     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should\n     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in\n     * length. When identifying the current value of an exceeded limit, the units\n     * should be contained in the key, not the value.  For example, rather than\n     * `{\"instanceLimit\": \"100/request\"}`, should be returned as,\n     * `{\"instanceLimitPerRequest\": \"100\"}`, if the client exceeds the number of\n     * instances that can be created in a single (batch) request.\n     *\n     * Generated from protobuf field <code>map<string, string> metadata = 3;</code>\n     */\n    private $metadata;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $reason\n     *           The reason of the error. This is a constant value that identifies the\n     *           proximate cause of the error. Error reasons are unique within a particular\n     *           domain of errors. This should be at most 63 characters and match a\n     *           regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents\n     *           UPPER_SNAKE_CASE.\n     *     @type string $domain\n     *           The logical grouping to which the \"reason\" belongs. The error domain\n     *           is typically the registered service name of the tool or product that\n     *           generates the error. Example: \"pubsub.googleapis.com\". If the error is\n     *           generated by some common infrastructure, the error domain must be a\n     *           globally unique value that identifies the infrastructure. For Google API\n     *           infrastructure, the error domain is \"googleapis.com\".\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $metadata\n     *           Additional structured details about this error.\n     *           Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should\n     *           ideally be lowerCamelCase. Also, they must be limited to 64 characters in\n     *           length. When identifying the current value of an exceeded limit, the units\n     *           should be contained in the key, not the value.  For example, rather than\n     *           `{\"instanceLimit\": \"100/request\"}`, should be returned as,\n     *           `{\"instanceLimitPerRequest\": \"100\"}`, if the client exceeds the number of\n     *           instances that can be created in a single (batch) request.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The reason of the error. This is a constant value that identifies the\n     * proximate cause of the error. Error reasons are unique within a particular\n     * domain of errors. This should be at most 63 characters and match a\n     * regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents\n     * UPPER_SNAKE_CASE.\n     *\n     * Generated from protobuf field <code>string reason = 1;</code>\n     * @return string\n     */\n    public function getReason()\n    {\n        return $this->reason;\n    }\n\n    /**\n     * The reason of the error. This is a constant value that identifies the\n     * proximate cause of the error. Error reasons are unique within a particular\n     * domain of errors. This should be at most 63 characters and match a\n     * regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents\n     * UPPER_SNAKE_CASE.\n     *\n     * Generated from protobuf field <code>string reason = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setReason($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->reason = $var;\n\n        return $this;\n    }\n\n    /**\n     * The logical grouping to which the \"reason\" belongs. The error domain\n     * is typically the registered service name of the tool or product that\n     * generates the error. Example: \"pubsub.googleapis.com\". If the error is\n     * generated by some common infrastructure, the error domain must be a\n     * globally unique value that identifies the infrastructure. For Google API\n     * infrastructure, the error domain is \"googleapis.com\".\n     *\n     * Generated from protobuf field <code>string domain = 2;</code>\n     * @return string\n     */\n    public function getDomain()\n    {\n        return $this->domain;\n    }\n\n    /**\n     * The logical grouping to which the \"reason\" belongs. The error domain\n     * is typically the registered service name of the tool or product that\n     * generates the error. Example: \"pubsub.googleapis.com\". If the error is\n     * generated by some common infrastructure, the error domain must be a\n     * globally unique value that identifies the infrastructure. For Google API\n     * infrastructure, the error domain is \"googleapis.com\".\n     *\n     * Generated from protobuf field <code>string domain = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDomain($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->domain = $var;\n\n        return $this;\n    }\n\n    /**\n     * Additional structured details about this error.\n     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should\n     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in\n     * length. When identifying the current value of an exceeded limit, the units\n     * should be contained in the key, not the value.  For example, rather than\n     * `{\"instanceLimit\": \"100/request\"}`, should be returned as,\n     * `{\"instanceLimitPerRequest\": \"100\"}`, if the client exceeds the number of\n     * instances that can be created in a single (batch) request.\n     *\n     * Generated from protobuf field <code>map<string, string> metadata = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n\n    /**\n     * Additional structured details about this error.\n     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should\n     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in\n     * length. When identifying the current value of an exceeded limit, the units\n     * should be contained in the key, not the value.  For example, rather than\n     * `{\"instanceLimit\": \"100/request\"}`, should be returned as,\n     * `{\"instanceLimitPerRequest\": \"100\"}`, if the client exceeds the number of\n     * instances that can be created in a single (batch) request.\n     *\n     * Generated from protobuf field <code>map<string, string> metadata = 3;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setMetadata($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->metadata = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Help/Link.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc\\Help;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes a URL link.\n *\n * Generated from protobuf message <code>google.rpc.Help.Link</code>\n */\nclass Link extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Describes what the link offers.\n     *\n     * Generated from protobuf field <code>string description = 1;</code>\n     */\n    protected $description = '';\n    /**\n     * The URL of the link.\n     *\n     * Generated from protobuf field <code>string url = 2;</code>\n     */\n    protected $url = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $description\n     *           Describes what the link offers.\n     *     @type string $url\n     *           The URL of the link.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Describes what the link offers.\n     *\n     * Generated from protobuf field <code>string description = 1;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Describes what the link offers.\n     *\n     * Generated from protobuf field <code>string description = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * The URL of the link.\n     *\n     * Generated from protobuf field <code>string url = 2;</code>\n     * @return string\n     */\n    public function getUrl()\n    {\n        return $this->url;\n    }\n\n    /**\n     * The URL of the link.\n     *\n     * Generated from protobuf field <code>string url = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->url = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Help.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Provides links to documentation or for performing an out of band action.\n * For example, if a quota check failed with an error indicating the calling\n * project hasn't enabled the accessed service, this can contain a URL pointing\n * directly to the right place in the developer console to flip the bit.\n *\n * Generated from protobuf message <code>google.rpc.Help</code>\n */\nclass Help extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * URL(s) pointing to additional information on handling the current error.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.Help.Link links = 1;</code>\n     */\n    private $links;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Rpc\\Help\\Link>|\\Google\\Protobuf\\Internal\\RepeatedField $links\n     *           URL(s) pointing to additional information on handling the current error.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * URL(s) pointing to additional information on handling the current error.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.Help.Link links = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getLinks()\n    {\n        return $this->links;\n    }\n\n    /**\n     * URL(s) pointing to additional information on handling the current error.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.Help.Link links = 1;</code>\n     * @param array<\\Google\\Rpc\\Help\\Link>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setLinks($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Rpc\\Help\\Link::class);\n        $this->links = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/LocalizedMessage.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Provides a localized error message that is safe to return to the user\n * which can be attached to an RPC error.\n *\n * Generated from protobuf message <code>google.rpc.LocalizedMessage</code>\n */\nclass LocalizedMessage extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The locale used following the specification defined at\n     * https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n     * Examples are: \"en-US\", \"fr-CH\", \"es-MX\"\n     *\n     * Generated from protobuf field <code>string locale = 1;</code>\n     */\n    protected $locale = '';\n    /**\n     * The localized error message in the above locale.\n     *\n     * Generated from protobuf field <code>string message = 2;</code>\n     */\n    protected $message = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $locale\n     *           The locale used following the specification defined at\n     *           https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n     *           Examples are: \"en-US\", \"fr-CH\", \"es-MX\"\n     *     @type string $message\n     *           The localized error message in the above locale.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The locale used following the specification defined at\n     * https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n     * Examples are: \"en-US\", \"fr-CH\", \"es-MX\"\n     *\n     * Generated from protobuf field <code>string locale = 1;</code>\n     * @return string\n     */\n    public function getLocale()\n    {\n        return $this->locale;\n    }\n\n    /**\n     * The locale used following the specification defined at\n     * https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n     * Examples are: \"en-US\", \"fr-CH\", \"es-MX\"\n     *\n     * Generated from protobuf field <code>string locale = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLocale($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->locale = $var;\n\n        return $this;\n    }\n\n    /**\n     * The localized error message in the above locale.\n     *\n     * Generated from protobuf field <code>string message = 2;</code>\n     * @return string\n     */\n    public function getMessage()\n    {\n        return $this->message;\n    }\n\n    /**\n     * The localized error message in the above locale.\n     *\n     * Generated from protobuf field <code>string message = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMessage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->message = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/PreconditionFailure/Violation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc\\PreconditionFailure;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A message type used to describe a single precondition failure.\n *\n * Generated from protobuf message <code>google.rpc.PreconditionFailure.Violation</code>\n */\nclass Violation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The type of PreconditionFailure. We recommend using a service-specific\n     * enum type to define the supported precondition violation subjects. For\n     * example, \"TOS\" for \"Terms of Service violation\".\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     */\n    protected $type = '';\n    /**\n     * The subject, relative to the type, that failed.\n     * For example, \"google.com/cloud\" relative to the \"TOS\" type would indicate\n     * which terms of service is being referenced.\n     *\n     * Generated from protobuf field <code>string subject = 2;</code>\n     */\n    protected $subject = '';\n    /**\n     * A description of how the precondition failed. Developers can use this\n     * description to understand how to fix the failure.\n     * For example: \"Terms of service not accepted\".\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     */\n    protected $description = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type\n     *           The type of PreconditionFailure. We recommend using a service-specific\n     *           enum type to define the supported precondition violation subjects. For\n     *           example, \"TOS\" for \"Terms of Service violation\".\n     *     @type string $subject\n     *           The subject, relative to the type, that failed.\n     *           For example, \"google.com/cloud\" relative to the \"TOS\" type would indicate\n     *           which terms of service is being referenced.\n     *     @type string $description\n     *           A description of how the precondition failed. Developers can use this\n     *           description to understand how to fix the failure.\n     *           For example: \"Terms of service not accepted\".\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The type of PreconditionFailure. We recommend using a service-specific\n     * enum type to define the supported precondition violation subjects. For\n     * example, \"TOS\" for \"Terms of Service violation\".\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * The type of PreconditionFailure. We recommend using a service-specific\n     * enum type to define the supported precondition violation subjects. For\n     * example, \"TOS\" for \"Terms of Service violation\".\n     *\n     * Generated from protobuf field <code>string type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The subject, relative to the type, that failed.\n     * For example, \"google.com/cloud\" relative to the \"TOS\" type would indicate\n     * which terms of service is being referenced.\n     *\n     * Generated from protobuf field <code>string subject = 2;</code>\n     * @return string\n     */\n    public function getSubject()\n    {\n        return $this->subject;\n    }\n\n    /**\n     * The subject, relative to the type, that failed.\n     * For example, \"google.com/cloud\" relative to the \"TOS\" type would indicate\n     * which terms of service is being referenced.\n     *\n     * Generated from protobuf field <code>string subject = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSubject($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->subject = $var;\n\n        return $this;\n    }\n\n    /**\n     * A description of how the precondition failed. Developers can use this\n     * description to understand how to fix the failure.\n     * For example: \"Terms of service not accepted\".\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * A description of how the precondition failed. Developers can use this\n     * description to understand how to fix the failure.\n     * For example: \"Terms of service not accepted\".\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/PreconditionFailure.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes what preconditions have failed.\n * For example, if an RPC failed because it required the Terms of Service to be\n * acknowledged, it could list the terms of service violation in the\n * PreconditionFailure message.\n *\n * Generated from protobuf message <code>google.rpc.PreconditionFailure</code>\n */\nclass PreconditionFailure extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Describes all precondition violations.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.PreconditionFailure.Violation violations = 1;</code>\n     */\n    private $violations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Rpc\\PreconditionFailure\\Violation>|\\Google\\Protobuf\\Internal\\RepeatedField $violations\n     *           Describes all precondition violations.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Describes all precondition violations.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.PreconditionFailure.Violation violations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getViolations()\n    {\n        return $this->violations;\n    }\n\n    /**\n     * Describes all precondition violations.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.PreconditionFailure.Violation violations = 1;</code>\n     * @param array<\\Google\\Rpc\\PreconditionFailure\\Violation>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setViolations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Rpc\\PreconditionFailure\\Violation::class);\n        $this->violations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/QuotaFailure/Violation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc\\QuotaFailure;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A message type used to describe a single quota violation.  For example, a\n * daily quota or a custom quota that was exceeded.\n *\n * Generated from protobuf message <code>google.rpc.QuotaFailure.Violation</code>\n */\nclass Violation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The subject on which the quota check failed.\n     * For example, \"clientip:<ip address of client>\" or \"project:<Google\n     * developer project id>\".\n     *\n     * Generated from protobuf field <code>string subject = 1;</code>\n     */\n    protected $subject = '';\n    /**\n     * A description of how the quota check failed. Clients can use this\n     * description to find more about the quota configuration in the service's\n     * public documentation, or find the relevant quota limit to adjust through\n     * developer console.\n     * For example: \"Service disabled\" or \"Daily Limit for read operations\n     * exceeded\".\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     */\n    protected $description = '';\n    /**\n     * The API Service from which the `QuotaFailure.Violation` orginates. In\n     * some cases, Quota issues originate from an API Service other than the one\n     * that was called. In other words, a dependency of the called API Service\n     * could be the cause of the `QuotaFailure`, and this field would have the\n     * dependency API service name.\n     * For example, if the called API is Kubernetes Engine API\n     * (container.googleapis.com), and a quota violation occurs in the\n     * Kubernetes Engine API itself, this field would be\n     * \"container.googleapis.com\". On the other hand, if the quota violation\n     * occurs when the Kubernetes Engine API creates VMs in the Compute Engine\n     * API (compute.googleapis.com), this field would be\n     * \"compute.googleapis.com\".\n     *\n     * Generated from protobuf field <code>string api_service = 3;</code>\n     */\n    protected $api_service = '';\n    /**\n     * The metric of the violated quota. A quota metric is a named counter to\n     * measure usage, such as API requests or CPUs. When an activity occurs in a\n     * service, such as Virtual Machine allocation, one or more quota metrics\n     * may be affected.\n     * For example, \"compute.googleapis.com/cpus_per_vm_family\",\n     * \"storage.googleapis.com/internet_egress_bandwidth\".\n     *\n     * Generated from protobuf field <code>string quota_metric = 4;</code>\n     */\n    protected $quota_metric = '';\n    /**\n     * The id of the violated quota. Also know as \"limit name\", this is the\n     * unique identifier of a quota in the context of an API service.\n     * For example, \"CPUS-PER-VM-FAMILY-per-project-region\".\n     *\n     * Generated from protobuf field <code>string quota_id = 5;</code>\n     */\n    protected $quota_id = '';\n    /**\n     * The dimensions of the violated quota. Every non-global quota is enforced\n     * on a set of dimensions. While quota metric defines what to count, the\n     * dimensions specify for what aspects the counter should be increased.\n     * For example, the quota \"CPUs per region per VM family\" enforces a limit\n     * on the metric \"compute.googleapis.com/cpus_per_vm_family\" on dimensions\n     * \"region\" and \"vm_family\". And if the violation occurred in region\n     * \"us-central1\" and for VM family \"n1\", the quota_dimensions would be,\n     * {\n     *   \"region\": \"us-central1\",\n     *   \"vm_family\": \"n1\",\n     * }\n     * When a quota is enforced globally, the quota_dimensions would always be\n     * empty.\n     *\n     * Generated from protobuf field <code>map<string, string> quota_dimensions = 6;</code>\n     */\n    private $quota_dimensions;\n    /**\n     * The enforced quota value at the time of the `QuotaFailure`.\n     * For example, if the enforced quota value at the time of the\n     * `QuotaFailure` on the number of CPUs is \"10\", then the value of this\n     * field would reflect this quantity.\n     *\n     * Generated from protobuf field <code>int64 quota_value = 7;</code>\n     */\n    protected $quota_value = 0;\n    /**\n     * The new quota value being rolled out at the time of the violation. At the\n     * completion of the rollout, this value will be enforced in place of\n     * quota_value. If no rollout is in progress at the time of the violation,\n     * this field is not set.\n     * For example, if at the time of the violation a rollout is in progress\n     * changing the number of CPUs quota from 10 to 20, 20 would be the value of\n     * this field.\n     *\n     * Generated from protobuf field <code>optional int64 future_quota_value = 8;</code>\n     */\n    protected $future_quota_value = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $subject\n     *           The subject on which the quota check failed.\n     *           For example, \"clientip:<ip address of client>\" or \"project:<Google\n     *           developer project id>\".\n     *     @type string $description\n     *           A description of how the quota check failed. Clients can use this\n     *           description to find more about the quota configuration in the service's\n     *           public documentation, or find the relevant quota limit to adjust through\n     *           developer console.\n     *           For example: \"Service disabled\" or \"Daily Limit for read operations\n     *           exceeded\".\n     *     @type string $api_service\n     *           The API Service from which the `QuotaFailure.Violation` orginates. In\n     *           some cases, Quota issues originate from an API Service other than the one\n     *           that was called. In other words, a dependency of the called API Service\n     *           could be the cause of the `QuotaFailure`, and this field would have the\n     *           dependency API service name.\n     *           For example, if the called API is Kubernetes Engine API\n     *           (container.googleapis.com), and a quota violation occurs in the\n     *           Kubernetes Engine API itself, this field would be\n     *           \"container.googleapis.com\". On the other hand, if the quota violation\n     *           occurs when the Kubernetes Engine API creates VMs in the Compute Engine\n     *           API (compute.googleapis.com), this field would be\n     *           \"compute.googleapis.com\".\n     *     @type string $quota_metric\n     *           The metric of the violated quota. A quota metric is a named counter to\n     *           measure usage, such as API requests or CPUs. When an activity occurs in a\n     *           service, such as Virtual Machine allocation, one or more quota metrics\n     *           may be affected.\n     *           For example, \"compute.googleapis.com/cpus_per_vm_family\",\n     *           \"storage.googleapis.com/internet_egress_bandwidth\".\n     *     @type string $quota_id\n     *           The id of the violated quota. Also know as \"limit name\", this is the\n     *           unique identifier of a quota in the context of an API service.\n     *           For example, \"CPUS-PER-VM-FAMILY-per-project-region\".\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $quota_dimensions\n     *           The dimensions of the violated quota. Every non-global quota is enforced\n     *           on a set of dimensions. While quota metric defines what to count, the\n     *           dimensions specify for what aspects the counter should be increased.\n     *           For example, the quota \"CPUs per region per VM family\" enforces a limit\n     *           on the metric \"compute.googleapis.com/cpus_per_vm_family\" on dimensions\n     *           \"region\" and \"vm_family\". And if the violation occurred in region\n     *           \"us-central1\" and for VM family \"n1\", the quota_dimensions would be,\n     *           {\n     *             \"region\": \"us-central1\",\n     *             \"vm_family\": \"n1\",\n     *           }\n     *           When a quota is enforced globally, the quota_dimensions would always be\n     *           empty.\n     *     @type int|string $quota_value\n     *           The enforced quota value at the time of the `QuotaFailure`.\n     *           For example, if the enforced quota value at the time of the\n     *           `QuotaFailure` on the number of CPUs is \"10\", then the value of this\n     *           field would reflect this quantity.\n     *     @type int|string $future_quota_value\n     *           The new quota value being rolled out at the time of the violation. At the\n     *           completion of the rollout, this value will be enforced in place of\n     *           quota_value. If no rollout is in progress at the time of the violation,\n     *           this field is not set.\n     *           For example, if at the time of the violation a rollout is in progress\n     *           changing the number of CPUs quota from 10 to 20, 20 would be the value of\n     *           this field.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The subject on which the quota check failed.\n     * For example, \"clientip:<ip address of client>\" or \"project:<Google\n     * developer project id>\".\n     *\n     * Generated from protobuf field <code>string subject = 1;</code>\n     * @return string\n     */\n    public function getSubject()\n    {\n        return $this->subject;\n    }\n\n    /**\n     * The subject on which the quota check failed.\n     * For example, \"clientip:<ip address of client>\" or \"project:<Google\n     * developer project id>\".\n     *\n     * Generated from protobuf field <code>string subject = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSubject($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->subject = $var;\n\n        return $this;\n    }\n\n    /**\n     * A description of how the quota check failed. Clients can use this\n     * description to find more about the quota configuration in the service's\n     * public documentation, or find the relevant quota limit to adjust through\n     * developer console.\n     * For example: \"Service disabled\" or \"Daily Limit for read operations\n     * exceeded\".\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * A description of how the quota check failed. Clients can use this\n     * description to find more about the quota configuration in the service's\n     * public documentation, or find the relevant quota limit to adjust through\n     * developer console.\n     * For example: \"Service disabled\" or \"Daily Limit for read operations\n     * exceeded\".\n     *\n     * Generated from protobuf field <code>string description = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * The API Service from which the `QuotaFailure.Violation` orginates. In\n     * some cases, Quota issues originate from an API Service other than the one\n     * that was called. In other words, a dependency of the called API Service\n     * could be the cause of the `QuotaFailure`, and this field would have the\n     * dependency API service name.\n     * For example, if the called API is Kubernetes Engine API\n     * (container.googleapis.com), and a quota violation occurs in the\n     * Kubernetes Engine API itself, this field would be\n     * \"container.googleapis.com\". On the other hand, if the quota violation\n     * occurs when the Kubernetes Engine API creates VMs in the Compute Engine\n     * API (compute.googleapis.com), this field would be\n     * \"compute.googleapis.com\".\n     *\n     * Generated from protobuf field <code>string api_service = 3;</code>\n     * @return string\n     */\n    public function getApiService()\n    {\n        return $this->api_service;\n    }\n\n    /**\n     * The API Service from which the `QuotaFailure.Violation` orginates. In\n     * some cases, Quota issues originate from an API Service other than the one\n     * that was called. In other words, a dependency of the called API Service\n     * could be the cause of the `QuotaFailure`, and this field would have the\n     * dependency API service name.\n     * For example, if the called API is Kubernetes Engine API\n     * (container.googleapis.com), and a quota violation occurs in the\n     * Kubernetes Engine API itself, this field would be\n     * \"container.googleapis.com\". On the other hand, if the quota violation\n     * occurs when the Kubernetes Engine API creates VMs in the Compute Engine\n     * API (compute.googleapis.com), this field would be\n     * \"compute.googleapis.com\".\n     *\n     * Generated from protobuf field <code>string api_service = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setApiService($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->api_service = $var;\n\n        return $this;\n    }\n\n    /**\n     * The metric of the violated quota. A quota metric is a named counter to\n     * measure usage, such as API requests or CPUs. When an activity occurs in a\n     * service, such as Virtual Machine allocation, one or more quota metrics\n     * may be affected.\n     * For example, \"compute.googleapis.com/cpus_per_vm_family\",\n     * \"storage.googleapis.com/internet_egress_bandwidth\".\n     *\n     * Generated from protobuf field <code>string quota_metric = 4;</code>\n     * @return string\n     */\n    public function getQuotaMetric()\n    {\n        return $this->quota_metric;\n    }\n\n    /**\n     * The metric of the violated quota. A quota metric is a named counter to\n     * measure usage, such as API requests or CPUs. When an activity occurs in a\n     * service, such as Virtual Machine allocation, one or more quota metrics\n     * may be affected.\n     * For example, \"compute.googleapis.com/cpus_per_vm_family\",\n     * \"storage.googleapis.com/internet_egress_bandwidth\".\n     *\n     * Generated from protobuf field <code>string quota_metric = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setQuotaMetric($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->quota_metric = $var;\n\n        return $this;\n    }\n\n    /**\n     * The id of the violated quota. Also know as \"limit name\", this is the\n     * unique identifier of a quota in the context of an API service.\n     * For example, \"CPUS-PER-VM-FAMILY-per-project-region\".\n     *\n     * Generated from protobuf field <code>string quota_id = 5;</code>\n     * @return string\n     */\n    public function getQuotaId()\n    {\n        return $this->quota_id;\n    }\n\n    /**\n     * The id of the violated quota. Also know as \"limit name\", this is the\n     * unique identifier of a quota in the context of an API service.\n     * For example, \"CPUS-PER-VM-FAMILY-per-project-region\".\n     *\n     * Generated from protobuf field <code>string quota_id = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setQuotaId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->quota_id = $var;\n\n        return $this;\n    }\n\n    /**\n     * The dimensions of the violated quota. Every non-global quota is enforced\n     * on a set of dimensions. While quota metric defines what to count, the\n     * dimensions specify for what aspects the counter should be increased.\n     * For example, the quota \"CPUs per region per VM family\" enforces a limit\n     * on the metric \"compute.googleapis.com/cpus_per_vm_family\" on dimensions\n     * \"region\" and \"vm_family\". And if the violation occurred in region\n     * \"us-central1\" and for VM family \"n1\", the quota_dimensions would be,\n     * {\n     *   \"region\": \"us-central1\",\n     *   \"vm_family\": \"n1\",\n     * }\n     * When a quota is enforced globally, the quota_dimensions would always be\n     * empty.\n     *\n     * Generated from protobuf field <code>map<string, string> quota_dimensions = 6;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getQuotaDimensions()\n    {\n        return $this->quota_dimensions;\n    }\n\n    /**\n     * The dimensions of the violated quota. Every non-global quota is enforced\n     * on a set of dimensions. While quota metric defines what to count, the\n     * dimensions specify for what aspects the counter should be increased.\n     * For example, the quota \"CPUs per region per VM family\" enforces a limit\n     * on the metric \"compute.googleapis.com/cpus_per_vm_family\" on dimensions\n     * \"region\" and \"vm_family\". And if the violation occurred in region\n     * \"us-central1\" and for VM family \"n1\", the quota_dimensions would be,\n     * {\n     *   \"region\": \"us-central1\",\n     *   \"vm_family\": \"n1\",\n     * }\n     * When a quota is enforced globally, the quota_dimensions would always be\n     * empty.\n     *\n     * Generated from protobuf field <code>map<string, string> quota_dimensions = 6;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setQuotaDimensions($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->quota_dimensions = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The enforced quota value at the time of the `QuotaFailure`.\n     * For example, if the enforced quota value at the time of the\n     * `QuotaFailure` on the number of CPUs is \"10\", then the value of this\n     * field would reflect this quantity.\n     *\n     * Generated from protobuf field <code>int64 quota_value = 7;</code>\n     * @return int|string\n     */\n    public function getQuotaValue()\n    {\n        return $this->quota_value;\n    }\n\n    /**\n     * The enforced quota value at the time of the `QuotaFailure`.\n     * For example, if the enforced quota value at the time of the\n     * `QuotaFailure` on the number of CPUs is \"10\", then the value of this\n     * field would reflect this quantity.\n     *\n     * Generated from protobuf field <code>int64 quota_value = 7;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setQuotaValue($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->quota_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * The new quota value being rolled out at the time of the violation. At the\n     * completion of the rollout, this value will be enforced in place of\n     * quota_value. If no rollout is in progress at the time of the violation,\n     * this field is not set.\n     * For example, if at the time of the violation a rollout is in progress\n     * changing the number of CPUs quota from 10 to 20, 20 would be the value of\n     * this field.\n     *\n     * Generated from protobuf field <code>optional int64 future_quota_value = 8;</code>\n     * @return int|string\n     */\n    public function getFutureQuotaValue()\n    {\n        return isset($this->future_quota_value) ? $this->future_quota_value : 0;\n    }\n\n    public function hasFutureQuotaValue()\n    {\n        return isset($this->future_quota_value);\n    }\n\n    public function clearFutureQuotaValue()\n    {\n        unset($this->future_quota_value);\n    }\n\n    /**\n     * The new quota value being rolled out at the time of the violation. At the\n     * completion of the rollout, this value will be enforced in place of\n     * quota_value. If no rollout is in progress at the time of the violation,\n     * this field is not set.\n     * For example, if at the time of the violation a rollout is in progress\n     * changing the number of CPUs quota from 10 to 20, 20 would be the value of\n     * this field.\n     *\n     * Generated from protobuf field <code>optional int64 future_quota_value = 8;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setFutureQuotaValue($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->future_quota_value = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/QuotaFailure.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes how a quota check failed.\n * For example if a daily limit was exceeded for the calling project,\n * a service could respond with a QuotaFailure detail containing the project\n * id and the description of the quota limit that was exceeded.  If the\n * calling project hasn't enabled the service in the developer console, then\n * a service could respond with the project id and set `service_disabled`\n * to true.\n * Also see RetryInfo and Help types for other details about handling a\n * quota failure.\n *\n * Generated from protobuf message <code>google.rpc.QuotaFailure</code>\n */\nclass QuotaFailure extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Describes all quota violations.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.QuotaFailure.Violation violations = 1;</code>\n     */\n    private $violations;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\Rpc\\QuotaFailure\\Violation>|\\Google\\Protobuf\\Internal\\RepeatedField $violations\n     *           Describes all quota violations.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Describes all quota violations.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.QuotaFailure.Violation violations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getViolations()\n    {\n        return $this->violations;\n    }\n\n    /**\n     * Describes all quota violations.\n     *\n     * Generated from protobuf field <code>repeated .google.rpc.QuotaFailure.Violation violations = 1;</code>\n     * @param array<\\Google\\Rpc\\QuotaFailure\\Violation>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setViolations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Rpc\\QuotaFailure\\Violation::class);\n        $this->violations = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/RequestInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Contains metadata about the request that clients can attach when filing a bug\n * or providing other forms of feedback.\n *\n * Generated from protobuf message <code>google.rpc.RequestInfo</code>\n */\nclass RequestInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * An opaque string that should only be interpreted by the service generating\n     * it. For example, it can be used to identify requests in the service's logs.\n     *\n     * Generated from protobuf field <code>string request_id = 1;</code>\n     */\n    protected $request_id = '';\n    /**\n     * Any data that was used to serve this request. For example, an encrypted\n     * stack trace that can be sent back to the service provider for debugging.\n     *\n     * Generated from protobuf field <code>string serving_data = 2;</code>\n     */\n    protected $serving_data = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $request_id\n     *           An opaque string that should only be interpreted by the service generating\n     *           it. For example, it can be used to identify requests in the service's logs.\n     *     @type string $serving_data\n     *           Any data that was used to serve this request. For example, an encrypted\n     *           stack trace that can be sent back to the service provider for debugging.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * An opaque string that should only be interpreted by the service generating\n     * it. For example, it can be used to identify requests in the service's logs.\n     *\n     * Generated from protobuf field <code>string request_id = 1;</code>\n     * @return string\n     */\n    public function getRequestId()\n    {\n        return $this->request_id;\n    }\n\n    /**\n     * An opaque string that should only be interpreted by the service generating\n     * it. For example, it can be used to identify requests in the service's logs.\n     *\n     * Generated from protobuf field <code>string request_id = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRequestId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->request_id = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any data that was used to serve this request. For example, an encrypted\n     * stack trace that can be sent back to the service provider for debugging.\n     *\n     * Generated from protobuf field <code>string serving_data = 2;</code>\n     * @return string\n     */\n    public function getServingData()\n    {\n        return $this->serving_data;\n    }\n\n    /**\n     * Any data that was used to serve this request. For example, an encrypted\n     * stack trace that can be sent back to the service provider for debugging.\n     *\n     * Generated from protobuf field <code>string serving_data = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setServingData($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->serving_data = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/ResourceInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes the resource that is being accessed.\n *\n * Generated from protobuf message <code>google.rpc.ResourceInfo</code>\n */\nclass ResourceInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A name for the type of resource being accessed, e.g. \"sql table\",\n     * \"cloud storage bucket\", \"file\", \"Google calendar\"; or the type URL\n     * of the resource: e.g. \"type.googleapis.com/google.pubsub.v1.Topic\".\n     *\n     * Generated from protobuf field <code>string resource_type = 1;</code>\n     */\n    protected $resource_type = '';\n    /**\n     * The name of the resource being accessed.  For example, a shared calendar\n     * name: \"example.com_4fghdhgsrgh&#64;group.calendar.google.com\", if the current\n     * error is\n     * [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].\n     *\n     * Generated from protobuf field <code>string resource_name = 2;</code>\n     */\n    protected $resource_name = '';\n    /**\n     * The owner of the resource (optional).\n     * For example, \"user:<owner email>\" or \"project:<Google developer project\n     * id>\".\n     *\n     * Generated from protobuf field <code>string owner = 3;</code>\n     */\n    protected $owner = '';\n    /**\n     * Describes what error is encountered when accessing this resource.\n     * For example, updating a cloud project may require the `writer` permission\n     * on the developer console project.\n     *\n     * Generated from protobuf field <code>string description = 4;</code>\n     */\n    protected $description = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $resource_type\n     *           A name for the type of resource being accessed, e.g. \"sql table\",\n     *           \"cloud storage bucket\", \"file\", \"Google calendar\"; or the type URL\n     *           of the resource: e.g. \"type.googleapis.com/google.pubsub.v1.Topic\".\n     *     @type string $resource_name\n     *           The name of the resource being accessed.  For example, a shared calendar\n     *           name: \"example.com_4fghdhgsrgh&#64;group.calendar.google.com\", if the current\n     *           error is\n     *           [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].\n     *     @type string $owner\n     *           The owner of the resource (optional).\n     *           For example, \"user:<owner email>\" or \"project:<Google developer project\n     *           id>\".\n     *     @type string $description\n     *           Describes what error is encountered when accessing this resource.\n     *           For example, updating a cloud project may require the `writer` permission\n     *           on the developer console project.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A name for the type of resource being accessed, e.g. \"sql table\",\n     * \"cloud storage bucket\", \"file\", \"Google calendar\"; or the type URL\n     * of the resource: e.g. \"type.googleapis.com/google.pubsub.v1.Topic\".\n     *\n     * Generated from protobuf field <code>string resource_type = 1;</code>\n     * @return string\n     */\n    public function getResourceType()\n    {\n        return $this->resource_type;\n    }\n\n    /**\n     * A name for the type of resource being accessed, e.g. \"sql table\",\n     * \"cloud storage bucket\", \"file\", \"Google calendar\"; or the type URL\n     * of the resource: e.g. \"type.googleapis.com/google.pubsub.v1.Topic\".\n     *\n     * Generated from protobuf field <code>string resource_type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResourceType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * The name of the resource being accessed.  For example, a shared calendar\n     * name: \"example.com_4fghdhgsrgh&#64;group.calendar.google.com\", if the current\n     * error is\n     * [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].\n     *\n     * Generated from protobuf field <code>string resource_name = 2;</code>\n     * @return string\n     */\n    public function getResourceName()\n    {\n        return $this->resource_name;\n    }\n\n    /**\n     * The name of the resource being accessed.  For example, a shared calendar\n     * name: \"example.com_4fghdhgsrgh&#64;group.calendar.google.com\", if the current\n     * error is\n     * [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].\n     *\n     * Generated from protobuf field <code>string resource_name = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResourceName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->resource_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The owner of the resource (optional).\n     * For example, \"user:<owner email>\" or \"project:<Google developer project\n     * id>\".\n     *\n     * Generated from protobuf field <code>string owner = 3;</code>\n     * @return string\n     */\n    public function getOwner()\n    {\n        return $this->owner;\n    }\n\n    /**\n     * The owner of the resource (optional).\n     * For example, \"user:<owner email>\" or \"project:<Google developer project\n     * id>\".\n     *\n     * Generated from protobuf field <code>string owner = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setOwner($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->owner = $var;\n\n        return $this;\n    }\n\n    /**\n     * Describes what error is encountered when accessing this resource.\n     * For example, updating a cloud project may require the `writer` permission\n     * on the developer console project.\n     *\n     * Generated from protobuf field <code>string description = 4;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Describes what error is encountered when accessing this resource.\n     * For example, updating a cloud project may require the `writer` permission\n     * on the developer console project.\n     *\n     * Generated from protobuf field <code>string description = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/RetryInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/error_details.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Describes when the clients can retry a failed request. Clients could ignore\n * the recommendation here or retry when this information is missing from error\n * responses.\n * It's always recommended that clients should use exponential backoff when\n * retrying.\n * Clients should wait until `retry_delay` amount of time has passed since\n * receiving the error response before retrying.  If retrying requests also\n * fail, clients should use an exponential backoff scheme to gradually increase\n * the delay between retries based on `retry_delay`, until either a maximum\n * number of retries have been reached or a maximum retry delay cap has been\n * reached.\n *\n * Generated from protobuf message <code>google.rpc.RetryInfo</code>\n */\nclass RetryInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Clients should wait at least this long between retrying the same request.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration retry_delay = 1;</code>\n     */\n    protected $retry_delay = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Duration $retry_delay\n     *           Clients should wait at least this long between retrying the same request.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\ErrorDetails::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Clients should wait at least this long between retrying the same request.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration retry_delay = 1;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getRetryDelay()\n    {\n        return $this->retry_delay;\n    }\n\n    public function hasRetryDelay()\n    {\n        return isset($this->retry_delay);\n    }\n\n    public function clearRetryDelay()\n    {\n        unset($this->retry_delay);\n    }\n\n    /**\n     * Clients should wait at least this long between retrying the same request.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration retry_delay = 1;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setRetryDelay($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->retry_delay = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Rpc/Status.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/rpc/status.proto\n\nnamespace Google\\Rpc;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The `Status` type defines a logical error model that is suitable for\n * different programming environments, including REST APIs and RPC APIs. It is\n * used by [gRPC](https://github.com/grpc). Each `Status` message contains\n * three pieces of data: error code, error message, and error details.\n * You can find out more about this error model and how to work with it in the\n * [API Design Guide](https://cloud.google.com/apis/design/errors).\n *\n * Generated from protobuf message <code>google.rpc.Status</code>\n */\nclass Status extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The status code, which should be an enum value of\n     * [google.rpc.Code][google.rpc.Code].\n     *\n     * Generated from protobuf field <code>int32 code = 1;</code>\n     */\n    protected $code = 0;\n    /**\n     * A developer-facing error message, which should be in English. Any\n     * user-facing error message should be localized and sent in the\n     * [google.rpc.Status.details][google.rpc.Status.details] field, or localized\n     * by the client.\n     *\n     * Generated from protobuf field <code>string message = 2;</code>\n     */\n    protected $message = '';\n    /**\n     * A list of messages that carry the error details.  There is a common set of\n     * message types for APIs to use.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any details = 3;</code>\n     */\n    private $details;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $code\n     *           The status code, which should be an enum value of\n     *           [google.rpc.Code][google.rpc.Code].\n     *     @type string $message\n     *           A developer-facing error message, which should be in English. Any\n     *           user-facing error message should be localized and sent in the\n     *           [google.rpc.Status.details][google.rpc.Status.details] field, or localized\n     *           by the client.\n     *     @type array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $details\n     *           A list of messages that carry the error details.  There is a common set of\n     *           message types for APIs to use.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Rpc\\Status::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The status code, which should be an enum value of\n     * [google.rpc.Code][google.rpc.Code].\n     *\n     * Generated from protobuf field <code>int32 code = 1;</code>\n     * @return int\n     */\n    public function getCode()\n    {\n        return $this->code;\n    }\n\n    /**\n     * The status code, which should be an enum value of\n     * [google.rpc.Code][google.rpc.Code].\n     *\n     * Generated from protobuf field <code>int32 code = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setCode($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->code = $var;\n\n        return $this;\n    }\n\n    /**\n     * A developer-facing error message, which should be in English. Any\n     * user-facing error message should be localized and sent in the\n     * [google.rpc.Status.details][google.rpc.Status.details] field, or localized\n     * by the client.\n     *\n     * Generated from protobuf field <code>string message = 2;</code>\n     * @return string\n     */\n    public function getMessage()\n    {\n        return $this->message;\n    }\n\n    /**\n     * A developer-facing error message, which should be in English. Any\n     * user-facing error message should be localized and sent in the\n     * [google.rpc.Status.details][google.rpc.Status.details] field, or localized\n     * by the client.\n     *\n     * Generated from protobuf field <code>string message = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMessage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->message = $var;\n\n        return $this;\n    }\n\n    /**\n     * A list of messages that carry the error details.  There is a common set of\n     * message types for APIs to use.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any details = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getDetails()\n    {\n        return $this->details;\n    }\n\n    /**\n     * A list of messages that carry the error details.  There is a common set of\n     * message types for APIs to use.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Any details = 3;</code>\n     * @param array<\\Google\\Protobuf\\Any>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setDetails($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Any::class);\n        $this->details = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/CalendarPeriod.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/calendar_period.proto\n\nnamespace Google\\Type;\n\nuse UnexpectedValueException;\n\n/**\n * A `CalendarPeriod` represents the abstract concept of a time period that has\n * a canonical start. Grammatically, \"the start of the current\n * `CalendarPeriod`.\" All calendar times begin at midnight UTC.\n *\n * Protobuf type <code>google.type.CalendarPeriod</code>\n */\nclass CalendarPeriod\n{\n    /**\n     * Undefined period, raises an error.\n     *\n     * Generated from protobuf enum <code>CALENDAR_PERIOD_UNSPECIFIED = 0;</code>\n     */\n    const CALENDAR_PERIOD_UNSPECIFIED = 0;\n    /**\n     * A day.\n     *\n     * Generated from protobuf enum <code>DAY = 1;</code>\n     */\n    const DAY = 1;\n    /**\n     * A week. Weeks begin on Monday, following\n     * [ISO 8601](https://en.wikipedia.org/wiki/ISO_week_date).\n     *\n     * Generated from protobuf enum <code>WEEK = 2;</code>\n     */\n    const WEEK = 2;\n    /**\n     * A fortnight. The first calendar fortnight of the year begins at the start\n     * of week 1 according to\n     * [ISO 8601](https://en.wikipedia.org/wiki/ISO_week_date).\n     *\n     * Generated from protobuf enum <code>FORTNIGHT = 3;</code>\n     */\n    const FORTNIGHT = 3;\n    /**\n     * A month.\n     *\n     * Generated from protobuf enum <code>MONTH = 4;</code>\n     */\n    const MONTH = 4;\n    /**\n     * A quarter. Quarters start on dates 1-Jan, 1-Apr, 1-Jul, and 1-Oct of each\n     * year.\n     *\n     * Generated from protobuf enum <code>QUARTER = 5;</code>\n     */\n    const QUARTER = 5;\n    /**\n     * A half-year. Half-years start on dates 1-Jan and 1-Jul.\n     *\n     * Generated from protobuf enum <code>HALF = 6;</code>\n     */\n    const HALF = 6;\n    /**\n     * A year.\n     *\n     * Generated from protobuf enum <code>YEAR = 7;</code>\n     */\n    const YEAR = 7;\n\n    private static $valueToName = [\n        self::CALENDAR_PERIOD_UNSPECIFIED => 'CALENDAR_PERIOD_UNSPECIFIED',\n        self::DAY => 'DAY',\n        self::WEEK => 'WEEK',\n        self::FORTNIGHT => 'FORTNIGHT',\n        self::MONTH => 'MONTH',\n        self::QUARTER => 'QUARTER',\n        self::HALF => 'HALF',\n        self::YEAR => 'YEAR',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Color.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/color.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a color in the RGBA color space. This representation is designed\n * for simplicity of conversion to/from color representations in various\n * languages over compactness. For example, the fields of this representation\n * can be trivially provided to the constructor of `java.awt.Color` in Java; it\n * can also be trivially provided to UIColor's `+colorWithRed:green:blue:alpha`\n * method in iOS; and, with just a little work, it can be easily formatted into\n * a CSS `rgba()` string in JavaScript.\n * This reference page doesn't carry information about the absolute color\n * space\n * that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB,\n * DCI-P3, BT.2020, etc.). By default, applications should assume the sRGB color\n * space.\n * When color equality needs to be decided, implementations, unless\n * documented otherwise, treat two colors as equal if all their red,\n * green, blue, and alpha values each differ by at most 1e-5.\n * Example (Java):\n *      import com.google.type.Color;\n *      // ...\n *      public static java.awt.Color fromProto(Color protocolor) {\n *        float alpha = protocolor.hasAlpha()\n *            ? protocolor.getAlpha().getValue()\n *            : 1.0;\n *        return new java.awt.Color(\n *            protocolor.getRed(),\n *            protocolor.getGreen(),\n *            protocolor.getBlue(),\n *            alpha);\n *      }\n *      public static Color toProto(java.awt.Color color) {\n *        float red = (float) color.getRed();\n *        float green = (float) color.getGreen();\n *        float blue = (float) color.getBlue();\n *        float denominator = 255.0;\n *        Color.Builder resultBuilder =\n *            Color\n *                .newBuilder()\n *                .setRed(red / denominator)\n *                .setGreen(green / denominator)\n *                .setBlue(blue / denominator);\n *        int alpha = color.getAlpha();\n *        if (alpha != 255) {\n *          result.setAlpha(\n *              FloatValue\n *                  .newBuilder()\n *                  .setValue(((float) alpha) / denominator)\n *                  .build());\n *        }\n *        return resultBuilder.build();\n *      }\n *      // ...\n * Example (iOS / Obj-C):\n *      // ...\n *      static UIColor* fromProto(Color* protocolor) {\n *         float red = [protocolor red];\n *         float green = [protocolor green];\n *         float blue = [protocolor blue];\n *         FloatValue* alpha_wrapper = [protocolor alpha];\n *         float alpha = 1.0;\n *         if (alpha_wrapper != nil) {\n *           alpha = [alpha_wrapper value];\n *         }\n *         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];\n *      }\n *      static Color* toProto(UIColor* color) {\n *          CGFloat red, green, blue, alpha;\n *          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {\n *            return nil;\n *          }\n *          Color* result = [[Color alloc] init];\n *          [result setRed:red];\n *          [result setGreen:green];\n *          [result setBlue:blue];\n *          if (alpha <= 0.9999) {\n *            [result setAlpha:floatWrapperWithValue(alpha)];\n *          }\n *          [result autorelease];\n *          return result;\n *     }\n *     // ...\n *  Example (JavaScript):\n *     // ...\n *     var protoToCssColor = function(rgb_color) {\n *        var redFrac = rgb_color.red || 0.0;\n *        var greenFrac = rgb_color.green || 0.0;\n *        var blueFrac = rgb_color.blue || 0.0;\n *        var red = Math.floor(redFrac * 255);\n *        var green = Math.floor(greenFrac * 255);\n *        var blue = Math.floor(blueFrac * 255);\n *        if (!('alpha' in rgb_color)) {\n *           return rgbToCssColor(red, green, blue);\n *        }\n *        var alphaFrac = rgb_color.alpha.value || 0.0;\n *        var rgbParams = [red, green, blue].join(',');\n *        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');\n *     };\n *     var rgbToCssColor = function(red, green, blue) {\n *       var rgbNumber = new Number((red << 16) | (green << 8) | blue);\n *       var hexString = rgbNumber.toString(16);\n *       var missingZeros = 6 - hexString.length;\n *       var resultBuilder = ['#'];\n *       for (var i = 0; i < missingZeros; i++) {\n *          resultBuilder.push('0');\n *       }\n *       resultBuilder.push(hexString);\n *       return resultBuilder.join('');\n *     };\n *     // ...\n *\n * Generated from protobuf message <code>google.type.Color</code>\n */\nclass Color extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The amount of red in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float red = 1;</code>\n     */\n    protected $red = 0.0;\n    /**\n     * The amount of green in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float green = 2;</code>\n     */\n    protected $green = 0.0;\n    /**\n     * The amount of blue in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float blue = 3;</code>\n     */\n    protected $blue = 0.0;\n    /**\n     * The fraction of this color that should be applied to the pixel. That is,\n     * the final pixel color is defined by the equation:\n     *   `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)`\n     * This means that a value of 1.0 corresponds to a solid color, whereas\n     * a value of 0.0 corresponds to a completely transparent color. This\n     * uses a wrapper message rather than a simple float scalar so that it is\n     * possible to distinguish between a default value and the value being unset.\n     * If omitted, this color object is rendered as a solid color\n     * (as if the alpha value had been explicitly given a value of 1.0).\n     *\n     * Generated from protobuf field <code>.google.protobuf.FloatValue alpha = 4;</code>\n     */\n    protected $alpha = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $red\n     *           The amount of red in the color as a value in the interval [0, 1].\n     *     @type float $green\n     *           The amount of green in the color as a value in the interval [0, 1].\n     *     @type float $blue\n     *           The amount of blue in the color as a value in the interval [0, 1].\n     *     @type \\Google\\Protobuf\\FloatValue $alpha\n     *           The fraction of this color that should be applied to the pixel. That is,\n     *           the final pixel color is defined by the equation:\n     *             `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)`\n     *           This means that a value of 1.0 corresponds to a solid color, whereas\n     *           a value of 0.0 corresponds to a completely transparent color. This\n     *           uses a wrapper message rather than a simple float scalar so that it is\n     *           possible to distinguish between a default value and the value being unset.\n     *           If omitted, this color object is rendered as a solid color\n     *           (as if the alpha value had been explicitly given a value of 1.0).\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Color::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The amount of red in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float red = 1;</code>\n     * @return float\n     */\n    public function getRed()\n    {\n        return $this->red;\n    }\n\n    /**\n     * The amount of red in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float red = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setRed($var)\n    {\n        GPBUtil::checkFloat($var);\n        $this->red = $var;\n\n        return $this;\n    }\n\n    /**\n     * The amount of green in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float green = 2;</code>\n     * @return float\n     */\n    public function getGreen()\n    {\n        return $this->green;\n    }\n\n    /**\n     * The amount of green in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float green = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setGreen($var)\n    {\n        GPBUtil::checkFloat($var);\n        $this->green = $var;\n\n        return $this;\n    }\n\n    /**\n     * The amount of blue in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float blue = 3;</code>\n     * @return float\n     */\n    public function getBlue()\n    {\n        return $this->blue;\n    }\n\n    /**\n     * The amount of blue in the color as a value in the interval [0, 1].\n     *\n     * Generated from protobuf field <code>float blue = 3;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setBlue($var)\n    {\n        GPBUtil::checkFloat($var);\n        $this->blue = $var;\n\n        return $this;\n    }\n\n    /**\n     * The fraction of this color that should be applied to the pixel. That is,\n     * the final pixel color is defined by the equation:\n     *   `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)`\n     * This means that a value of 1.0 corresponds to a solid color, whereas\n     * a value of 0.0 corresponds to a completely transparent color. This\n     * uses a wrapper message rather than a simple float scalar so that it is\n     * possible to distinguish between a default value and the value being unset.\n     * If omitted, this color object is rendered as a solid color\n     * (as if the alpha value had been explicitly given a value of 1.0).\n     *\n     * Generated from protobuf field <code>.google.protobuf.FloatValue alpha = 4;</code>\n     * @return \\Google\\Protobuf\\FloatValue|null\n     */\n    public function getAlpha()\n    {\n        return $this->alpha;\n    }\n\n    public function hasAlpha()\n    {\n        return isset($this->alpha);\n    }\n\n    public function clearAlpha()\n    {\n        unset($this->alpha);\n    }\n\n    /**\n     * Returns the unboxed value from <code>getAlpha()</code>\n\n     * The fraction of this color that should be applied to the pixel. That is,\n     * the final pixel color is defined by the equation:\n     *   `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)`\n     * This means that a value of 1.0 corresponds to a solid color, whereas\n     * a value of 0.0 corresponds to a completely transparent color. This\n     * uses a wrapper message rather than a simple float scalar so that it is\n     * possible to distinguish between a default value and the value being unset.\n     * If omitted, this color object is rendered as a solid color\n     * (as if the alpha value had been explicitly given a value of 1.0).\n     *\n     * Generated from protobuf field <code>.google.protobuf.FloatValue alpha = 4;</code>\n     * @return float|null\n     */\n    public function getAlphaUnwrapped()\n    {\n        return $this->readWrapperValue(\"alpha\");\n    }\n\n    /**\n     * The fraction of this color that should be applied to the pixel. That is,\n     * the final pixel color is defined by the equation:\n     *   `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)`\n     * This means that a value of 1.0 corresponds to a solid color, whereas\n     * a value of 0.0 corresponds to a completely transparent color. This\n     * uses a wrapper message rather than a simple float scalar so that it is\n     * possible to distinguish between a default value and the value being unset.\n     * If omitted, this color object is rendered as a solid color\n     * (as if the alpha value had been explicitly given a value of 1.0).\n     *\n     * Generated from protobuf field <code>.google.protobuf.FloatValue alpha = 4;</code>\n     * @param \\Google\\Protobuf\\FloatValue $var\n     * @return $this\n     */\n    public function setAlpha($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\FloatValue::class);\n        $this->alpha = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the field by wrapping a primitive type in a Google\\Protobuf\\FloatValue object.\n\n     * The fraction of this color that should be applied to the pixel. That is,\n     * the final pixel color is defined by the equation:\n     *   `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)`\n     * This means that a value of 1.0 corresponds to a solid color, whereas\n     * a value of 0.0 corresponds to a completely transparent color. This\n     * uses a wrapper message rather than a simple float scalar so that it is\n     * possible to distinguish between a default value and the value being unset.\n     * If omitted, this color object is rendered as a solid color\n     * (as if the alpha value had been explicitly given a value of 1.0).\n     *\n     * Generated from protobuf field <code>.google.protobuf.FloatValue alpha = 4;</code>\n     * @param float|null $var\n     * @return $this\n     */\n    public function setAlphaUnwrapped($var)\n    {\n        $this->writeWrapperValue(\"alpha\", $var);\n        return $this;}\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Date.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/date.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a whole or partial calendar date, such as a birthday. The time of\n * day and time zone are either specified elsewhere or are insignificant. The\n * date is relative to the Gregorian Calendar. This can represent one of the\n * following:\n * * A full date, with non-zero year, month, and day values\n * * A month and day value, with a zero year, such as an anniversary\n * * A year on its own, with zero month and day values\n * * A year and month value, with a zero day, such as a credit card expiration\n * date\n * Related types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n * `google.protobuf.Timestamp`.\n *\n * Generated from protobuf message <code>google.type.Date</code>\n */\nclass Date extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Year of the date. Must be from 1 to 9999, or 0 to specify a date without\n     * a year.\n     *\n     * Generated from protobuf field <code>int32 year = 1;</code>\n     */\n    protected $year = 0;\n    /**\n     * Month of a year. Must be from 1 to 12, or 0 to specify a year without a\n     * month and day.\n     *\n     * Generated from protobuf field <code>int32 month = 2;</code>\n     */\n    protected $month = 0;\n    /**\n     * Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\n     * to specify a year by itself or a year and month where the day isn't\n     * significant.\n     *\n     * Generated from protobuf field <code>int32 day = 3;</code>\n     */\n    protected $day = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $year\n     *           Year of the date. Must be from 1 to 9999, or 0 to specify a date without\n     *           a year.\n     *     @type int $month\n     *           Month of a year. Must be from 1 to 12, or 0 to specify a year without a\n     *           month and day.\n     *     @type int $day\n     *           Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\n     *           to specify a year by itself or a year and month where the day isn't\n     *           significant.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Date::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Year of the date. Must be from 1 to 9999, or 0 to specify a date without\n     * a year.\n     *\n     * Generated from protobuf field <code>int32 year = 1;</code>\n     * @return int\n     */\n    public function getYear()\n    {\n        return $this->year;\n    }\n\n    /**\n     * Year of the date. Must be from 1 to 9999, or 0 to specify a date without\n     * a year.\n     *\n     * Generated from protobuf field <code>int32 year = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setYear($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->year = $var;\n\n        return $this;\n    }\n\n    /**\n     * Month of a year. Must be from 1 to 12, or 0 to specify a year without a\n     * month and day.\n     *\n     * Generated from protobuf field <code>int32 month = 2;</code>\n     * @return int\n     */\n    public function getMonth()\n    {\n        return $this->month;\n    }\n\n    /**\n     * Month of a year. Must be from 1 to 12, or 0 to specify a year without a\n     * month and day.\n     *\n     * Generated from protobuf field <code>int32 month = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMonth($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->month = $var;\n\n        return $this;\n    }\n\n    /**\n     * Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\n     * to specify a year by itself or a year and month where the day isn't\n     * significant.\n     *\n     * Generated from protobuf field <code>int32 day = 3;</code>\n     * @return int\n     */\n    public function getDay()\n    {\n        return $this->day;\n    }\n\n    /**\n     * Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\n     * to specify a year by itself or a year and month where the day isn't\n     * significant.\n     *\n     * Generated from protobuf field <code>int32 day = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setDay($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->day = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/DateTime.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/datetime.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents civil time (or occasionally physical time).\n * This type can represent a civil time in one of a few possible ways:\n *  * When utc_offset is set and time_zone is unset: a civil time on a calendar\n *    day with a particular offset from UTC.\n *  * When time_zone is set and utc_offset is unset: a civil time on a calendar\n *    day in a particular time zone.\n *  * When neither time_zone nor utc_offset is set: a civil time on a calendar\n *    day in local time.\n * The date is relative to the Proleptic Gregorian Calendar.\n * If year is 0, the DateTime is considered not to have a specific year. month\n * and day must have valid, non-zero values.\n * This type may also be used to represent a physical time if all the date and\n * time fields are set and either case of the `time_offset` oneof is set.\n * Consider using `Timestamp` message for physical time instead. If your use\n * case also would like to store the user's timezone, that can be done in\n * another field.\n * This type is more flexible than some applications may want. Make sure to\n * document and validate your application's limitations.\n *\n * Generated from protobuf message <code>google.type.DateTime</code>\n */\nclass DateTime extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\n     * datetime without a year.\n     *\n     * Generated from protobuf field <code>int32 year = 1;</code>\n     */\n    protected $year = 0;\n    /**\n     * Required. Month of year. Must be from 1 to 12.\n     *\n     * Generated from protobuf field <code>int32 month = 2;</code>\n     */\n    protected $month = 0;\n    /**\n     * Required. Day of month. Must be from 1 to 31 and valid for the year and\n     * month.\n     *\n     * Generated from protobuf field <code>int32 day = 3;</code>\n     */\n    protected $day = 0;\n    /**\n     * Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\n     * may choose to allow the value \"24:00:00\" for scenarios like business\n     * closing time.\n     *\n     * Generated from protobuf field <code>int32 hours = 4;</code>\n     */\n    protected $hours = 0;\n    /**\n     * Required. Minutes of hour of day. Must be from 0 to 59.\n     *\n     * Generated from protobuf field <code>int32 minutes = 5;</code>\n     */\n    protected $minutes = 0;\n    /**\n     * Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\n     * API may allow the value 60 if it allows leap-seconds.\n     *\n     * Generated from protobuf field <code>int32 seconds = 6;</code>\n     */\n    protected $seconds = 0;\n    /**\n     * Required. Fractions of seconds in nanoseconds. Must be from 0 to\n     * 999,999,999.\n     *\n     * Generated from protobuf field <code>int32 nanos = 7;</code>\n     */\n    protected $nanos = 0;\n    protected $time_offset;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $year\n     *           Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\n     *           datetime without a year.\n     *     @type int $month\n     *           Required. Month of year. Must be from 1 to 12.\n     *     @type int $day\n     *           Required. Day of month. Must be from 1 to 31 and valid for the year and\n     *           month.\n     *     @type int $hours\n     *           Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\n     *           may choose to allow the value \"24:00:00\" for scenarios like business\n     *           closing time.\n     *     @type int $minutes\n     *           Required. Minutes of hour of day. Must be from 0 to 59.\n     *     @type int $seconds\n     *           Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\n     *           API may allow the value 60 if it allows leap-seconds.\n     *     @type int $nanos\n     *           Required. Fractions of seconds in nanoseconds. Must be from 0 to\n     *           999,999,999.\n     *     @type \\Google\\Protobuf\\Duration $utc_offset\n     *           UTC offset. Must be whole seconds, between -18 hours and +18 hours.\n     *           For example, a UTC offset of -4:00 would be represented as\n     *           { seconds: -14400 }.\n     *     @type \\Google\\Type\\TimeZone $time_zone\n     *           Time zone.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Datetime::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\n     * datetime without a year.\n     *\n     * Generated from protobuf field <code>int32 year = 1;</code>\n     * @return int\n     */\n    public function getYear()\n    {\n        return $this->year;\n    }\n\n    /**\n     * Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a\n     * datetime without a year.\n     *\n     * Generated from protobuf field <code>int32 year = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setYear($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->year = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Month of year. Must be from 1 to 12.\n     *\n     * Generated from protobuf field <code>int32 month = 2;</code>\n     * @return int\n     */\n    public function getMonth()\n    {\n        return $this->month;\n    }\n\n    /**\n     * Required. Month of year. Must be from 1 to 12.\n     *\n     * Generated from protobuf field <code>int32 month = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMonth($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->month = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Day of month. Must be from 1 to 31 and valid for the year and\n     * month.\n     *\n     * Generated from protobuf field <code>int32 day = 3;</code>\n     * @return int\n     */\n    public function getDay()\n    {\n        return $this->day;\n    }\n\n    /**\n     * Required. Day of month. Must be from 1 to 31 and valid for the year and\n     * month.\n     *\n     * Generated from protobuf field <code>int32 day = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setDay($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->day = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\n     * may choose to allow the value \"24:00:00\" for scenarios like business\n     * closing time.\n     *\n     * Generated from protobuf field <code>int32 hours = 4;</code>\n     * @return int\n     */\n    public function getHours()\n    {\n        return $this->hours;\n    }\n\n    /**\n     * Required. Hours of day in 24 hour format. Should be from 0 to 23. An API\n     * may choose to allow the value \"24:00:00\" for scenarios like business\n     * closing time.\n     *\n     * Generated from protobuf field <code>int32 hours = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setHours($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->hours = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Minutes of hour of day. Must be from 0 to 59.\n     *\n     * Generated from protobuf field <code>int32 minutes = 5;</code>\n     * @return int\n     */\n    public function getMinutes()\n    {\n        return $this->minutes;\n    }\n\n    /**\n     * Required. Minutes of hour of day. Must be from 0 to 59.\n     *\n     * Generated from protobuf field <code>int32 minutes = 5;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMinutes($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->minutes = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\n     * API may allow the value 60 if it allows leap-seconds.\n     *\n     * Generated from protobuf field <code>int32 seconds = 6;</code>\n     * @return int\n     */\n    public function getSeconds()\n    {\n        return $this->seconds;\n    }\n\n    /**\n     * Required. Seconds of minutes of the time. Must normally be from 0 to 59. An\n     * API may allow the value 60 if it allows leap-seconds.\n     *\n     * Generated from protobuf field <code>int32 seconds = 6;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setSeconds($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->seconds = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. Fractions of seconds in nanoseconds. Must be from 0 to\n     * 999,999,999.\n     *\n     * Generated from protobuf field <code>int32 nanos = 7;</code>\n     * @return int\n     */\n    public function getNanos()\n    {\n        return $this->nanos;\n    }\n\n    /**\n     * Required. Fractions of seconds in nanoseconds. Must be from 0 to\n     * 999,999,999.\n     *\n     * Generated from protobuf field <code>int32 nanos = 7;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNanos($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->nanos = $var;\n\n        return $this;\n    }\n\n    /**\n     * UTC offset. Must be whole seconds, between -18 hours and +18 hours.\n     * For example, a UTC offset of -4:00 would be represented as\n     * { seconds: -14400 }.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration utc_offset = 8;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getUtcOffset()\n    {\n        return $this->readOneof(8);\n    }\n\n    public function hasUtcOffset()\n    {\n        return $this->hasOneof(8);\n    }\n\n    /**\n     * UTC offset. Must be whole seconds, between -18 hours and +18 hours.\n     * For example, a UTC offset of -4:00 would be represented as\n     * { seconds: -14400 }.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration utc_offset = 8;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setUtcOffset($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->writeOneof(8, $var);\n\n        return $this;\n    }\n\n    /**\n     * Time zone.\n     *\n     * Generated from protobuf field <code>.google.type.TimeZone time_zone = 9;</code>\n     * @return \\Google\\Type\\TimeZone|null\n     */\n    public function getTimeZone()\n    {\n        return $this->readOneof(9);\n    }\n\n    public function hasTimeZone()\n    {\n        return $this->hasOneof(9);\n    }\n\n    /**\n     * Time zone.\n     *\n     * Generated from protobuf field <code>.google.type.TimeZone time_zone = 9;</code>\n     * @param \\Google\\Type\\TimeZone $var\n     * @return $this\n     */\n    public function setTimeZone($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Type\\TimeZone::class);\n        $this->writeOneof(9, $var);\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getTimeOffset()\n    {\n        return $this->whichOneof(\"time_offset\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/DayOfWeek.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/dayofweek.proto\n\nnamespace Google\\Type;\n\nuse UnexpectedValueException;\n\n/**\n * Represents a day of the week.\n *\n * Protobuf type <code>google.type.DayOfWeek</code>\n */\nclass DayOfWeek\n{\n    /**\n     * The day of the week is unspecified.\n     *\n     * Generated from protobuf enum <code>DAY_OF_WEEK_UNSPECIFIED = 0;</code>\n     */\n    const DAY_OF_WEEK_UNSPECIFIED = 0;\n    /**\n     * Monday\n     *\n     * Generated from protobuf enum <code>MONDAY = 1;</code>\n     */\n    const MONDAY = 1;\n    /**\n     * Tuesday\n     *\n     * Generated from protobuf enum <code>TUESDAY = 2;</code>\n     */\n    const TUESDAY = 2;\n    /**\n     * Wednesday\n     *\n     * Generated from protobuf enum <code>WEDNESDAY = 3;</code>\n     */\n    const WEDNESDAY = 3;\n    /**\n     * Thursday\n     *\n     * Generated from protobuf enum <code>THURSDAY = 4;</code>\n     */\n    const THURSDAY = 4;\n    /**\n     * Friday\n     *\n     * Generated from protobuf enum <code>FRIDAY = 5;</code>\n     */\n    const FRIDAY = 5;\n    /**\n     * Saturday\n     *\n     * Generated from protobuf enum <code>SATURDAY = 6;</code>\n     */\n    const SATURDAY = 6;\n    /**\n     * Sunday\n     *\n     * Generated from protobuf enum <code>SUNDAY = 7;</code>\n     */\n    const SUNDAY = 7;\n\n    private static $valueToName = [\n        self::DAY_OF_WEEK_UNSPECIFIED => 'DAY_OF_WEEK_UNSPECIFIED',\n        self::MONDAY => 'MONDAY',\n        self::TUESDAY => 'TUESDAY',\n        self::WEDNESDAY => 'WEDNESDAY',\n        self::THURSDAY => 'THURSDAY',\n        self::FRIDAY => 'FRIDAY',\n        self::SATURDAY => 'SATURDAY',\n        self::SUNDAY => 'SUNDAY',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Decimal.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/decimal.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A representation of a decimal value, such as 2.5. Clients may convert values\n * into language-native decimal formats, such as Java's [BigDecimal][] or\n * Python's [decimal.Decimal][].\n * [BigDecimal]:\n * https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html\n * [decimal.Decimal]: https://docs.python.org/3/library/decimal.html\n *\n * Generated from protobuf message <code>google.type.Decimal</code>\n */\nclass Decimal extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The decimal value, as a string.\n     * The string representation consists of an optional sign, `+` (`U+002B`)\n     * or `-` (`U+002D`), followed by a sequence of zero or more decimal digits\n     * (\"the integer\"), optionally followed by a fraction, optionally followed\n     * by an exponent.\n     * The fraction consists of a decimal point followed by zero or more decimal\n     * digits. The string must contain at least one digit in either the integer\n     * or the fraction. The number formed by the sign, the integer and the\n     * fraction is referred to as the significand.\n     * The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)\n     * followed by one or more decimal digits.\n     * Services **should** normalize decimal values before storing them by:\n     *   - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).\n     *   - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).\n     *   - Coercing the exponent character to lower-case (`2.5E8` -> `2.5e8`).\n     *   - Removing an explicitly-provided zero exponent (`2.5e0` -> `2.5`).\n     * Services **may** perform additional normalization based on its own needs\n     * and the internal decimal implementation selected, such as shifting the\n     * decimal point and exponent value together (example: `2.5e-1` <-> `0.25`).\n     * Additionally, services **may** preserve trailing zeroes in the fraction\n     * to indicate increased precision, but are not required to do so.\n     * Note that only the `.` character is supported to divide the integer\n     * and the fraction; `,` **should not** be supported regardless of locale.\n     * Additionally, thousand separators **should not** be supported. If a\n     * service does support them, values **must** be normalized.\n     * The ENBF grammar is:\n     *     DecimalString =\n     *       [Sign] Significand [Exponent];\n     *     Sign = '+' | '-';\n     *     Significand =\n     *       Digits ['.'] [Digits] | [Digits] '.' Digits;\n     *     Exponent = ('e' | 'E') [Sign] Digits;\n     *     Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };\n     * Services **should** clearly document the range of supported values, the\n     * maximum supported precision (total number of digits), and, if applicable,\n     * the scale (number of digits after the decimal point), as well as how it\n     * behaves when receiving out-of-bounds values.\n     * Services **may** choose to accept values passed as input even when the\n     * value has a higher precision or scale than the service supports, and\n     * **should** round the value to fit the supported scale. Alternatively, the\n     * service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)\n     * if precision would be lost.\n     * Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in\n     * gRPC) if the service receives a value outside of the supported range.\n     *\n     * Generated from protobuf field <code>string value = 1;</code>\n     */\n    protected $value = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $value\n     *           The decimal value, as a string.\n     *           The string representation consists of an optional sign, `+` (`U+002B`)\n     *           or `-` (`U+002D`), followed by a sequence of zero or more decimal digits\n     *           (\"the integer\"), optionally followed by a fraction, optionally followed\n     *           by an exponent.\n     *           The fraction consists of a decimal point followed by zero or more decimal\n     *           digits. The string must contain at least one digit in either the integer\n     *           or the fraction. The number formed by the sign, the integer and the\n     *           fraction is referred to as the significand.\n     *           The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)\n     *           followed by one or more decimal digits.\n     *           Services **should** normalize decimal values before storing them by:\n     *             - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).\n     *             - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).\n     *             - Coercing the exponent character to lower-case (`2.5E8` -> `2.5e8`).\n     *             - Removing an explicitly-provided zero exponent (`2.5e0` -> `2.5`).\n     *           Services **may** perform additional normalization based on its own needs\n     *           and the internal decimal implementation selected, such as shifting the\n     *           decimal point and exponent value together (example: `2.5e-1` <-> `0.25`).\n     *           Additionally, services **may** preserve trailing zeroes in the fraction\n     *           to indicate increased precision, but are not required to do so.\n     *           Note that only the `.` character is supported to divide the integer\n     *           and the fraction; `,` **should not** be supported regardless of locale.\n     *           Additionally, thousand separators **should not** be supported. If a\n     *           service does support them, values **must** be normalized.\n     *           The ENBF grammar is:\n     *               DecimalString =\n     *                 [Sign] Significand [Exponent];\n     *               Sign = '+' | '-';\n     *               Significand =\n     *                 Digits ['.'] [Digits] | [Digits] '.' Digits;\n     *               Exponent = ('e' | 'E') [Sign] Digits;\n     *               Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };\n     *           Services **should** clearly document the range of supported values, the\n     *           maximum supported precision (total number of digits), and, if applicable,\n     *           the scale (number of digits after the decimal point), as well as how it\n     *           behaves when receiving out-of-bounds values.\n     *           Services **may** choose to accept values passed as input even when the\n     *           value has a higher precision or scale than the service supports, and\n     *           **should** round the value to fit the supported scale. Alternatively, the\n     *           service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)\n     *           if precision would be lost.\n     *           Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in\n     *           gRPC) if the service receives a value outside of the supported range.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Decimal::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The decimal value, as a string.\n     * The string representation consists of an optional sign, `+` (`U+002B`)\n     * or `-` (`U+002D`), followed by a sequence of zero or more decimal digits\n     * (\"the integer\"), optionally followed by a fraction, optionally followed\n     * by an exponent.\n     * The fraction consists of a decimal point followed by zero or more decimal\n     * digits. The string must contain at least one digit in either the integer\n     * or the fraction. The number formed by the sign, the integer and the\n     * fraction is referred to as the significand.\n     * The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)\n     * followed by one or more decimal digits.\n     * Services **should** normalize decimal values before storing them by:\n     *   - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).\n     *   - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).\n     *   - Coercing the exponent character to lower-case (`2.5E8` -> `2.5e8`).\n     *   - Removing an explicitly-provided zero exponent (`2.5e0` -> `2.5`).\n     * Services **may** perform additional normalization based on its own needs\n     * and the internal decimal implementation selected, such as shifting the\n     * decimal point and exponent value together (example: `2.5e-1` <-> `0.25`).\n     * Additionally, services **may** preserve trailing zeroes in the fraction\n     * to indicate increased precision, but are not required to do so.\n     * Note that only the `.` character is supported to divide the integer\n     * and the fraction; `,` **should not** be supported regardless of locale.\n     * Additionally, thousand separators **should not** be supported. If a\n     * service does support them, values **must** be normalized.\n     * The ENBF grammar is:\n     *     DecimalString =\n     *       [Sign] Significand [Exponent];\n     *     Sign = '+' | '-';\n     *     Significand =\n     *       Digits ['.'] [Digits] | [Digits] '.' Digits;\n     *     Exponent = ('e' | 'E') [Sign] Digits;\n     *     Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };\n     * Services **should** clearly document the range of supported values, the\n     * maximum supported precision (total number of digits), and, if applicable,\n     * the scale (number of digits after the decimal point), as well as how it\n     * behaves when receiving out-of-bounds values.\n     * Services **may** choose to accept values passed as input even when the\n     * value has a higher precision or scale than the service supports, and\n     * **should** round the value to fit the supported scale. Alternatively, the\n     * service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)\n     * if precision would be lost.\n     * Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in\n     * gRPC) if the service receives a value outside of the supported range.\n     *\n     * Generated from protobuf field <code>string value = 1;</code>\n     * @return string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The decimal value, as a string.\n     * The string representation consists of an optional sign, `+` (`U+002B`)\n     * or `-` (`U+002D`), followed by a sequence of zero or more decimal digits\n     * (\"the integer\"), optionally followed by a fraction, optionally followed\n     * by an exponent.\n     * The fraction consists of a decimal point followed by zero or more decimal\n     * digits. The string must contain at least one digit in either the integer\n     * or the fraction. The number formed by the sign, the integer and the\n     * fraction is referred to as the significand.\n     * The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)\n     * followed by one or more decimal digits.\n     * Services **should** normalize decimal values before storing them by:\n     *   - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).\n     *   - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).\n     *   - Coercing the exponent character to lower-case (`2.5E8` -> `2.5e8`).\n     *   - Removing an explicitly-provided zero exponent (`2.5e0` -> `2.5`).\n     * Services **may** perform additional normalization based on its own needs\n     * and the internal decimal implementation selected, such as shifting the\n     * decimal point and exponent value together (example: `2.5e-1` <-> `0.25`).\n     * Additionally, services **may** preserve trailing zeroes in the fraction\n     * to indicate increased precision, but are not required to do so.\n     * Note that only the `.` character is supported to divide the integer\n     * and the fraction; `,` **should not** be supported regardless of locale.\n     * Additionally, thousand separators **should not** be supported. If a\n     * service does support them, values **must** be normalized.\n     * The ENBF grammar is:\n     *     DecimalString =\n     *       [Sign] Significand [Exponent];\n     *     Sign = '+' | '-';\n     *     Significand =\n     *       Digits ['.'] [Digits] | [Digits] '.' Digits;\n     *     Exponent = ('e' | 'E') [Sign] Digits;\n     *     Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };\n     * Services **should** clearly document the range of supported values, the\n     * maximum supported precision (total number of digits), and, if applicable,\n     * the scale (number of digits after the decimal point), as well as how it\n     * behaves when receiving out-of-bounds values.\n     * Services **may** choose to accept values passed as input even when the\n     * value has a higher precision or scale than the service supports, and\n     * **should** round the value to fit the supported scale. Alternatively, the\n     * service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)\n     * if precision would be lost.\n     * Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in\n     * gRPC) if the service receives a value outside of the supported range.\n     *\n     * Generated from protobuf field <code>string value = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Expr.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/expr.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a textual expression in the Common Expression Language (CEL)\n * syntax. CEL is a C-like expression language. The syntax and semantics of CEL\n * are documented at https://github.com/google/cel-spec.\n * Example (Comparison):\n *     title: \"Summary size limit\"\n *     description: \"Determines if a summary is less than 100 chars\"\n *     expression: \"document.summary.size() < 100\"\n * Example (Equality):\n *     title: \"Requestor is owner\"\n *     description: \"Determines if requestor is the document owner\"\n *     expression: \"document.owner == request.auth.claims.email\"\n * Example (Logic):\n *     title: \"Public documents\"\n *     description: \"Determine whether the document should be publicly visible\"\n *     expression: \"document.type != 'private' && document.type != 'internal'\"\n * Example (Data Manipulation):\n *     title: \"Notification string\"\n *     description: \"Create a notification string with a timestamp.\"\n *     expression: \"'New message received at ' + string(document.create_time)\"\n * The exact variables and functions that may be referenced within an expression\n * are determined by the service that evaluates it. See the service\n * documentation for additional information.\n *\n * Generated from protobuf message <code>google.type.Expr</code>\n */\nclass Expr extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Textual representation of an expression in Common Expression Language\n     * syntax.\n     *\n     * Generated from protobuf field <code>string expression = 1;</code>\n     */\n    protected $expression = '';\n    /**\n     * Optional. Title for the expression, i.e. a short string describing\n     * its purpose. This can be used e.g. in UIs which allow to enter the\n     * expression.\n     *\n     * Generated from protobuf field <code>string title = 2;</code>\n     */\n    protected $title = '';\n    /**\n     * Optional. Description of the expression. This is a longer text which\n     * describes the expression, e.g. when hovered over it in a UI.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     */\n    protected $description = '';\n    /**\n     * Optional. String indicating the location of the expression for error\n     * reporting, e.g. a file name and a position in the file.\n     *\n     * Generated from protobuf field <code>string location = 4;</code>\n     */\n    protected $location = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $expression\n     *           Textual representation of an expression in Common Expression Language\n     *           syntax.\n     *     @type string $title\n     *           Optional. Title for the expression, i.e. a short string describing\n     *           its purpose. This can be used e.g. in UIs which allow to enter the\n     *           expression.\n     *     @type string $description\n     *           Optional. Description of the expression. This is a longer text which\n     *           describes the expression, e.g. when hovered over it in a UI.\n     *     @type string $location\n     *           Optional. String indicating the location of the expression for error\n     *           reporting, e.g. a file name and a position in the file.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Expr::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Textual representation of an expression in Common Expression Language\n     * syntax.\n     *\n     * Generated from protobuf field <code>string expression = 1;</code>\n     * @return string\n     */\n    public function getExpression()\n    {\n        return $this->expression;\n    }\n\n    /**\n     * Textual representation of an expression in Common Expression Language\n     * syntax.\n     *\n     * Generated from protobuf field <code>string expression = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setExpression($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->expression = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Title for the expression, i.e. a short string describing\n     * its purpose. This can be used e.g. in UIs which allow to enter the\n     * expression.\n     *\n     * Generated from protobuf field <code>string title = 2;</code>\n     * @return string\n     */\n    public function getTitle()\n    {\n        return $this->title;\n    }\n\n    /**\n     * Optional. Title for the expression, i.e. a short string describing\n     * its purpose. This can be used e.g. in UIs which allow to enter the\n     * expression.\n     *\n     * Generated from protobuf field <code>string title = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTitle($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->title = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Description of the expression. This is a longer text which\n     * describes the expression, e.g. when hovered over it in a UI.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->description;\n    }\n\n    /**\n     * Optional. Description of the expression. This is a longer text which\n     * describes the expression, e.g. when hovered over it in a UI.\n     *\n     * Generated from protobuf field <code>string description = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDescription($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->description = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. String indicating the location of the expression for error\n     * reporting, e.g. a file name and a position in the file.\n     *\n     * Generated from protobuf field <code>string location = 4;</code>\n     * @return string\n     */\n    public function getLocation()\n    {\n        return $this->location;\n    }\n\n    /**\n     * Optional. String indicating the location of the expression for error\n     * reporting, e.g. a file name and a position in the file.\n     *\n     * Generated from protobuf field <code>string location = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLocation($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->location = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Fraction.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/fraction.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a fraction in terms of a numerator divided by a denominator.\n *\n * Generated from protobuf message <code>google.type.Fraction</code>\n */\nclass Fraction extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The numerator in the fraction, e.g. 2 in 2/3.\n     *\n     * Generated from protobuf field <code>int64 numerator = 1;</code>\n     */\n    protected $numerator = 0;\n    /**\n     * The value by which the numerator is divided, e.g. 3 in 2/3. Must be\n     * positive.\n     *\n     * Generated from protobuf field <code>int64 denominator = 2;</code>\n     */\n    protected $denominator = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $numerator\n     *           The numerator in the fraction, e.g. 2 in 2/3.\n     *     @type int|string $denominator\n     *           The value by which the numerator is divided, e.g. 3 in 2/3. Must be\n     *           positive.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Fraction::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The numerator in the fraction, e.g. 2 in 2/3.\n     *\n     * Generated from protobuf field <code>int64 numerator = 1;</code>\n     * @return int|string\n     */\n    public function getNumerator()\n    {\n        return $this->numerator;\n    }\n\n    /**\n     * The numerator in the fraction, e.g. 2 in 2/3.\n     *\n     * Generated from protobuf field <code>int64 numerator = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setNumerator($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->numerator = $var;\n\n        return $this;\n    }\n\n    /**\n     * The value by which the numerator is divided, e.g. 3 in 2/3. Must be\n     * positive.\n     *\n     * Generated from protobuf field <code>int64 denominator = 2;</code>\n     * @return int|string\n     */\n    public function getDenominator()\n    {\n        return $this->denominator;\n    }\n\n    /**\n     * The value by which the numerator is divided, e.g. 3 in 2/3. Must be\n     * positive.\n     *\n     * Generated from protobuf field <code>int64 denominator = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setDenominator($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->denominator = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Interval.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/interval.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a time interval, encoded as a Timestamp start (inclusive) and a\n * Timestamp end (exclusive).\n * The start must be less than or equal to the end.\n * When the start equals the end, the interval is empty (matches no time).\n * When both start and end are unspecified, the interval matches any time.\n *\n * Generated from protobuf message <code>google.type.Interval</code>\n */\nclass Interval extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Optional. Inclusive start of the interval.\n     * If specified, a Timestamp matching this interval will have to be the same\n     * or after the start.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp start_time = 1;</code>\n     */\n    protected $start_time = null;\n    /**\n     * Optional. Exclusive end of the interval.\n     * If specified, a Timestamp matching this interval will have to be before the\n     * end.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp end_time = 2;</code>\n     */\n    protected $end_time = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Timestamp $start_time\n     *           Optional. Inclusive start of the interval.\n     *           If specified, a Timestamp matching this interval will have to be the same\n     *           or after the start.\n     *     @type \\Google\\Protobuf\\Timestamp $end_time\n     *           Optional. Exclusive end of the interval.\n     *           If specified, a Timestamp matching this interval will have to be before the\n     *           end.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Interval::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Optional. Inclusive start of the interval.\n     * If specified, a Timestamp matching this interval will have to be the same\n     * or after the start.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp start_time = 1;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getStartTime()\n    {\n        return $this->start_time;\n    }\n\n    public function hasStartTime()\n    {\n        return isset($this->start_time);\n    }\n\n    public function clearStartTime()\n    {\n        unset($this->start_time);\n    }\n\n    /**\n     * Optional. Inclusive start of the interval.\n     * If specified, a Timestamp matching this interval will have to be the same\n     * or after the start.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp start_time = 1;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setStartTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->start_time = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Exclusive end of the interval.\n     * If specified, a Timestamp matching this interval will have to be before the\n     * end.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp end_time = 2;</code>\n     * @return \\Google\\Protobuf\\Timestamp|null\n     */\n    public function getEndTime()\n    {\n        return $this->end_time;\n    }\n\n    public function hasEndTime()\n    {\n        return isset($this->end_time);\n    }\n\n    public function clearEndTime()\n    {\n        unset($this->end_time);\n    }\n\n    /**\n     * Optional. Exclusive end of the interval.\n     * If specified, a Timestamp matching this interval will have to be before the\n     * end.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Timestamp end_time = 2;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setEndTime($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->end_time = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/LatLng.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/latlng.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * An object that represents a latitude/longitude pair. This is expressed as a\n * pair of doubles to represent degrees latitude and degrees longitude. Unless\n * specified otherwise, this must conform to the\n * <a href=\"http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf\">WGS84\n * standard</a>. Values must be within normalized ranges.\n *\n * Generated from protobuf message <code>google.type.LatLng</code>\n */\nclass LatLng extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The latitude in degrees. It must be in the range [-90.0, +90.0].\n     *\n     * Generated from protobuf field <code>double latitude = 1;</code>\n     */\n    protected $latitude = 0.0;\n    /**\n     * The longitude in degrees. It must be in the range [-180.0, +180.0].\n     *\n     * Generated from protobuf field <code>double longitude = 2;</code>\n     */\n    protected $longitude = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $latitude\n     *           The latitude in degrees. It must be in the range [-90.0, +90.0].\n     *     @type float $longitude\n     *           The longitude in degrees. It must be in the range [-180.0, +180.0].\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Latlng::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The latitude in degrees. It must be in the range [-90.0, +90.0].\n     *\n     * Generated from protobuf field <code>double latitude = 1;</code>\n     * @return float\n     */\n    public function getLatitude()\n    {\n        return $this->latitude;\n    }\n\n    /**\n     * The latitude in degrees. It must be in the range [-90.0, +90.0].\n     *\n     * Generated from protobuf field <code>double latitude = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setLatitude($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->latitude = $var;\n\n        return $this;\n    }\n\n    /**\n     * The longitude in degrees. It must be in the range [-180.0, +180.0].\n     *\n     * Generated from protobuf field <code>double longitude = 2;</code>\n     * @return float\n     */\n    public function getLongitude()\n    {\n        return $this->longitude;\n    }\n\n    /**\n     * The longitude in degrees. It must be in the range [-180.0, +180.0].\n     *\n     * Generated from protobuf field <code>double longitude = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setLongitude($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->longitude = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/LocalizedText.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/localized_text.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Localized variant of a text in a particular language.\n *\n * Generated from protobuf message <code>google.type.LocalizedText</code>\n */\nclass LocalizedText extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Localized string in the language corresponding to `language_code' below.\n     *\n     * Generated from protobuf field <code>string text = 1;</code>\n     */\n    protected $text = '';\n    /**\n     * The text's BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\n     * For more information, see\n     * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\n     *\n     * Generated from protobuf field <code>string language_code = 2;</code>\n     */\n    protected $language_code = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $text\n     *           Localized string in the language corresponding to `language_code' below.\n     *     @type string $language_code\n     *           The text's BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\n     *           For more information, see\n     *           http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\LocalizedText::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Localized string in the language corresponding to `language_code' below.\n     *\n     * Generated from protobuf field <code>string text = 1;</code>\n     * @return string\n     */\n    public function getText()\n    {\n        return $this->text;\n    }\n\n    /**\n     * Localized string in the language corresponding to `language_code' below.\n     *\n     * Generated from protobuf field <code>string text = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setText($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->text = $var;\n\n        return $this;\n    }\n\n    /**\n     * The text's BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\n     * For more information, see\n     * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\n     *\n     * Generated from protobuf field <code>string language_code = 2;</code>\n     * @return string\n     */\n    public function getLanguageCode()\n    {\n        return $this->language_code;\n    }\n\n    /**\n     * The text's BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\n     * For more information, see\n     * http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\n     *\n     * Generated from protobuf field <code>string language_code = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLanguageCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->language_code = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Money.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/money.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents an amount of money with its currency type.\n *\n * Generated from protobuf message <code>google.type.Money</code>\n */\nclass Money extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The three-letter currency code defined in ISO 4217.\n     *\n     * Generated from protobuf field <code>string currency_code = 1;</code>\n     */\n    protected $currency_code = '';\n    /**\n     * The whole units of the amount.\n     * For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n     *\n     * Generated from protobuf field <code>int64 units = 2;</code>\n     */\n    protected $units = 0;\n    /**\n     * Number of nano (10^-9) units of the amount.\n     * The value must be between -999,999,999 and +999,999,999 inclusive.\n     * If `units` is positive, `nanos` must be positive or zero.\n     * If `units` is zero, `nanos` can be positive, zero, or negative.\n     * If `units` is negative, `nanos` must be negative or zero.\n     * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n     *\n     * Generated from protobuf field <code>int32 nanos = 3;</code>\n     */\n    protected $nanos = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $currency_code\n     *           The three-letter currency code defined in ISO 4217.\n     *     @type int|string $units\n     *           The whole units of the amount.\n     *           For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n     *     @type int $nanos\n     *           Number of nano (10^-9) units of the amount.\n     *           The value must be between -999,999,999 and +999,999,999 inclusive.\n     *           If `units` is positive, `nanos` must be positive or zero.\n     *           If `units` is zero, `nanos` can be positive, zero, or negative.\n     *           If `units` is negative, `nanos` must be negative or zero.\n     *           For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Money::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The three-letter currency code defined in ISO 4217.\n     *\n     * Generated from protobuf field <code>string currency_code = 1;</code>\n     * @return string\n     */\n    public function getCurrencyCode()\n    {\n        return $this->currency_code;\n    }\n\n    /**\n     * The three-letter currency code defined in ISO 4217.\n     *\n     * Generated from protobuf field <code>string currency_code = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setCurrencyCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->currency_code = $var;\n\n        return $this;\n    }\n\n    /**\n     * The whole units of the amount.\n     * For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n     *\n     * Generated from protobuf field <code>int64 units = 2;</code>\n     * @return int|string\n     */\n    public function getUnits()\n    {\n        return $this->units;\n    }\n\n    /**\n     * The whole units of the amount.\n     * For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.\n     *\n     * Generated from protobuf field <code>int64 units = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setUnits($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->units = $var;\n\n        return $this;\n    }\n\n    /**\n     * Number of nano (10^-9) units of the amount.\n     * The value must be between -999,999,999 and +999,999,999 inclusive.\n     * If `units` is positive, `nanos` must be positive or zero.\n     * If `units` is zero, `nanos` can be positive, zero, or negative.\n     * If `units` is negative, `nanos` must be negative or zero.\n     * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n     *\n     * Generated from protobuf field <code>int32 nanos = 3;</code>\n     * @return int\n     */\n    public function getNanos()\n    {\n        return $this->nanos;\n    }\n\n    /**\n     * Number of nano (10^-9) units of the amount.\n     * The value must be between -999,999,999 and +999,999,999 inclusive.\n     * If `units` is positive, `nanos` must be positive or zero.\n     * If `units` is zero, `nanos` can be positive, zero, or negative.\n     * If `units` is negative, `nanos` must be negative or zero.\n     * For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.\n     *\n     * Generated from protobuf field <code>int32 nanos = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNanos($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->nanos = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Month.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/month.proto\n\nnamespace Google\\Type;\n\nuse UnexpectedValueException;\n\n/**\n * Represents a month in the Gregorian calendar.\n *\n * Protobuf type <code>google.type.Month</code>\n */\nclass Month\n{\n    /**\n     * The unspecified month.\n     *\n     * Generated from protobuf enum <code>MONTH_UNSPECIFIED = 0;</code>\n     */\n    const MONTH_UNSPECIFIED = 0;\n    /**\n     * The month of January.\n     *\n     * Generated from protobuf enum <code>JANUARY = 1;</code>\n     */\n    const JANUARY = 1;\n    /**\n     * The month of February.\n     *\n     * Generated from protobuf enum <code>FEBRUARY = 2;</code>\n     */\n    const FEBRUARY = 2;\n    /**\n     * The month of March.\n     *\n     * Generated from protobuf enum <code>MARCH = 3;</code>\n     */\n    const MARCH = 3;\n    /**\n     * The month of April.\n     *\n     * Generated from protobuf enum <code>APRIL = 4;</code>\n     */\n    const APRIL = 4;\n    /**\n     * The month of May.\n     *\n     * Generated from protobuf enum <code>MAY = 5;</code>\n     */\n    const MAY = 5;\n    /**\n     * The month of June.\n     *\n     * Generated from protobuf enum <code>JUNE = 6;</code>\n     */\n    const JUNE = 6;\n    /**\n     * The month of July.\n     *\n     * Generated from protobuf enum <code>JULY = 7;</code>\n     */\n    const JULY = 7;\n    /**\n     * The month of August.\n     *\n     * Generated from protobuf enum <code>AUGUST = 8;</code>\n     */\n    const AUGUST = 8;\n    /**\n     * The month of September.\n     *\n     * Generated from protobuf enum <code>SEPTEMBER = 9;</code>\n     */\n    const SEPTEMBER = 9;\n    /**\n     * The month of October.\n     *\n     * Generated from protobuf enum <code>OCTOBER = 10;</code>\n     */\n    const OCTOBER = 10;\n    /**\n     * The month of November.\n     *\n     * Generated from protobuf enum <code>NOVEMBER = 11;</code>\n     */\n    const NOVEMBER = 11;\n    /**\n     * The month of December.\n     *\n     * Generated from protobuf enum <code>DECEMBER = 12;</code>\n     */\n    const DECEMBER = 12;\n\n    private static $valueToName = [\n        self::MONTH_UNSPECIFIED => 'MONTH_UNSPECIFIED',\n        self::JANUARY => 'JANUARY',\n        self::FEBRUARY => 'FEBRUARY',\n        self::MARCH => 'MARCH',\n        self::APRIL => 'APRIL',\n        self::MAY => 'MAY',\n        self::JUNE => 'JUNE',\n        self::JULY => 'JULY',\n        self::AUGUST => 'AUGUST',\n        self::SEPTEMBER => 'SEPTEMBER',\n        self::OCTOBER => 'OCTOBER',\n        self::NOVEMBER => 'NOVEMBER',\n        self::DECEMBER => 'DECEMBER',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/PhoneNumber/ShortCode.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/phone_number.proto\n\nnamespace Google\\Type\\PhoneNumber;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * An object representing a short code, which is a phone number that is\n * typically much shorter than regular phone numbers and can be used to\n * address messages in MMS and SMS systems, as well as for abbreviated dialing\n * (e.g. \"Text 611 to see how many minutes you have remaining on your plan.\").\n * Short codes are restricted to a region and are not internationally\n * dialable, which means the same short code can exist in different regions,\n * with different usage and pricing, even if those regions share the same\n * country calling code (e.g. US and CA).\n *\n * Generated from protobuf message <code>google.type.PhoneNumber.ShortCode</code>\n */\nclass ShortCode extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Required. The BCP-47 region code of the location where calls to this\n     * short code can be made, such as \"US\" and \"BB\".\n     * Reference(s):\n     *  - http://www.unicode.org/reports/tr35/#unicode_region_subtag\n     *\n     * Generated from protobuf field <code>string region_code = 1;</code>\n     */\n    protected $region_code = '';\n    /**\n     * Required. The short code digits, without a leading plus ('+') or country\n     * calling code, e.g. \"611\".\n     *\n     * Generated from protobuf field <code>string number = 2;</code>\n     */\n    protected $number = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $region_code\n     *           Required. The BCP-47 region code of the location where calls to this\n     *           short code can be made, such as \"US\" and \"BB\".\n     *           Reference(s):\n     *            - http://www.unicode.org/reports/tr35/#unicode_region_subtag\n     *     @type string $number\n     *           Required. The short code digits, without a leading plus ('+') or country\n     *           calling code, e.g. \"611\".\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\PhoneNumber::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Required. The BCP-47 region code of the location where calls to this\n     * short code can be made, such as \"US\" and \"BB\".\n     * Reference(s):\n     *  - http://www.unicode.org/reports/tr35/#unicode_region_subtag\n     *\n     * Generated from protobuf field <code>string region_code = 1;</code>\n     * @return string\n     */\n    public function getRegionCode()\n    {\n        return $this->region_code;\n    }\n\n    /**\n     * Required. The BCP-47 region code of the location where calls to this\n     * short code can be made, such as \"US\" and \"BB\".\n     * Reference(s):\n     *  - http://www.unicode.org/reports/tr35/#unicode_region_subtag\n     *\n     * Generated from protobuf field <code>string region_code = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRegionCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->region_code = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. The short code digits, without a leading plus ('+') or country\n     * calling code, e.g. \"611\".\n     *\n     * Generated from protobuf field <code>string number = 2;</code>\n     * @return string\n     */\n    public function getNumber()\n    {\n        return $this->number;\n    }\n\n    /**\n     * Required. The short code digits, without a leading plus ('+') or country\n     * calling code, e.g. \"611\".\n     *\n     * Generated from protobuf field <code>string number = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->number = $var;\n\n        return $this;\n    }\n\n}\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/PhoneNumber.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/phone_number.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * An object representing a phone number, suitable as an API wire format.\n * This representation:\n *  - should not be used for locale-specific formatting of a phone number, such\n *    as \"+1 (650) 253-0000 ext. 123\"\n *  - is not designed for efficient storage\n *  - may not be suitable for dialing - specialized libraries (see references)\n *    should be used to parse the number for that purpose\n * To do something meaningful with this number, such as format it for various\n * use-cases, convert it to an `i18n.phonenumbers.PhoneNumber` object first.\n * For instance, in Java this would be:\n *    com.google.type.PhoneNumber wireProto =\n *        com.google.type.PhoneNumber.newBuilder().build();\n *    com.google.i18n.phonenumbers.Phonenumber.PhoneNumber phoneNumber =\n *        PhoneNumberUtil.getInstance().parse(wireProto.getE164Number(), \"ZZ\");\n *    if (!wireProto.getExtension().isEmpty()) {\n *      phoneNumber.setExtension(wireProto.getExtension());\n *    }\n *  Reference(s):\n *   - https://github.com/google/libphonenumber\n *\n * Generated from protobuf message <code>google.type.PhoneNumber</code>\n */\nclass PhoneNumber extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The phone number's extension. The extension is not standardized in ITU\n     * recommendations, except for being defined as a series of numbers with a\n     * maximum length of 40 digits. Other than digits, some other dialing\n     * characters such as ',' (indicating a wait) or '#' may be stored here.\n     * Note that no regions currently use extensions with short codes, so this\n     * field is normally only set in conjunction with an E.164 number. It is held\n     * separately from the E.164 number to allow for short code extensions in the\n     * future.\n     *\n     * Generated from protobuf field <code>string extension = 3;</code>\n     */\n    protected $extension = '';\n    protected $kind;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $e164_number\n     *           The phone number, represented as a leading plus sign ('+'), followed by a\n     *           phone number that uses a relaxed ITU E.164 format consisting of the\n     *           country calling code (1 to 3 digits) and the subscriber number, with no\n     *           additional spaces or formatting, e.g.:\n     *            - correct: \"+15552220123\"\n     *            - incorrect: \"+1 (555) 222-01234 x123\".\n     *           The ITU E.164 format limits the latter to 12 digits, but in practice not\n     *           all countries respect that, so we relax that restriction here.\n     *           National-only numbers are not allowed.\n     *           References:\n     *            - https://www.itu.int/rec/T-REC-E.164-201011-I\n     *            - https://en.wikipedia.org/wiki/E.164.\n     *            - https://en.wikipedia.org/wiki/List_of_country_calling_codes\n     *     @type \\Google\\Type\\PhoneNumber\\ShortCode $short_code\n     *           A short code.\n     *           Reference(s):\n     *            - https://en.wikipedia.org/wiki/Short_code\n     *     @type string $extension\n     *           The phone number's extension. The extension is not standardized in ITU\n     *           recommendations, except for being defined as a series of numbers with a\n     *           maximum length of 40 digits. Other than digits, some other dialing\n     *           characters such as ',' (indicating a wait) or '#' may be stored here.\n     *           Note that no regions currently use extensions with short codes, so this\n     *           field is normally only set in conjunction with an E.164 number. It is held\n     *           separately from the E.164 number to allow for short code extensions in the\n     *           future.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\PhoneNumber::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The phone number, represented as a leading plus sign ('+'), followed by a\n     * phone number that uses a relaxed ITU E.164 format consisting of the\n     * country calling code (1 to 3 digits) and the subscriber number, with no\n     * additional spaces or formatting, e.g.:\n     *  - correct: \"+15552220123\"\n     *  - incorrect: \"+1 (555) 222-01234 x123\".\n     * The ITU E.164 format limits the latter to 12 digits, but in practice not\n     * all countries respect that, so we relax that restriction here.\n     * National-only numbers are not allowed.\n     * References:\n     *  - https://www.itu.int/rec/T-REC-E.164-201011-I\n     *  - https://en.wikipedia.org/wiki/E.164.\n     *  - https://en.wikipedia.org/wiki/List_of_country_calling_codes\n     *\n     * Generated from protobuf field <code>string e164_number = 1;</code>\n     * @return string\n     */\n    public function getE164Number()\n    {\n        return $this->readOneof(1);\n    }\n\n    public function hasE164Number()\n    {\n        return $this->hasOneof(1);\n    }\n\n    /**\n     * The phone number, represented as a leading plus sign ('+'), followed by a\n     * phone number that uses a relaxed ITU E.164 format consisting of the\n     * country calling code (1 to 3 digits) and the subscriber number, with no\n     * additional spaces or formatting, e.g.:\n     *  - correct: \"+15552220123\"\n     *  - incorrect: \"+1 (555) 222-01234 x123\".\n     * The ITU E.164 format limits the latter to 12 digits, but in practice not\n     * all countries respect that, so we relax that restriction here.\n     * National-only numbers are not allowed.\n     * References:\n     *  - https://www.itu.int/rec/T-REC-E.164-201011-I\n     *  - https://en.wikipedia.org/wiki/E.164.\n     *  - https://en.wikipedia.org/wiki/List_of_country_calling_codes\n     *\n     * Generated from protobuf field <code>string e164_number = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setE164Number($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(1, $var);\n\n        return $this;\n    }\n\n    /**\n     * A short code.\n     * Reference(s):\n     *  - https://en.wikipedia.org/wiki/Short_code\n     *\n     * Generated from protobuf field <code>.google.type.PhoneNumber.ShortCode short_code = 2;</code>\n     * @return \\Google\\Type\\PhoneNumber\\ShortCode|null\n     */\n    public function getShortCode()\n    {\n        return $this->readOneof(2);\n    }\n\n    public function hasShortCode()\n    {\n        return $this->hasOneof(2);\n    }\n\n    /**\n     * A short code.\n     * Reference(s):\n     *  - https://en.wikipedia.org/wiki/Short_code\n     *\n     * Generated from protobuf field <code>.google.type.PhoneNumber.ShortCode short_code = 2;</code>\n     * @param \\Google\\Type\\PhoneNumber\\ShortCode $var\n     * @return $this\n     */\n    public function setShortCode($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Type\\PhoneNumber\\ShortCode::class);\n        $this->writeOneof(2, $var);\n\n        return $this;\n    }\n\n    /**\n     * The phone number's extension. The extension is not standardized in ITU\n     * recommendations, except for being defined as a series of numbers with a\n     * maximum length of 40 digits. Other than digits, some other dialing\n     * characters such as ',' (indicating a wait) or '#' may be stored here.\n     * Note that no regions currently use extensions with short codes, so this\n     * field is normally only set in conjunction with an E.164 number. It is held\n     * separately from the E.164 number to allow for short code extensions in the\n     * future.\n     *\n     * Generated from protobuf field <code>string extension = 3;</code>\n     * @return string\n     */\n    public function getExtension()\n    {\n        return $this->extension;\n    }\n\n    /**\n     * The phone number's extension. The extension is not standardized in ITU\n     * recommendations, except for being defined as a series of numbers with a\n     * maximum length of 40 digits. Other than digits, some other dialing\n     * characters such as ',' (indicating a wait) or '#' may be stored here.\n     * Note that no regions currently use extensions with short codes, so this\n     * field is normally only set in conjunction with an E.164 number. It is held\n     * separately from the E.164 number to allow for short code extensions in the\n     * future.\n     *\n     * Generated from protobuf field <code>string extension = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setExtension($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->extension = $var;\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getKind()\n    {\n        return $this->whichOneof(\"kind\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/PostalAddress.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/postal_address.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a postal address, e.g. for postal delivery or payments addresses.\n * Given a postal address, a postal service can deliver items to a premise, P.O.\n * Box or similar.\n * It is not intended to model geographical locations (roads, towns,\n * mountains).\n * In typical usage an address would be created via user input or from importing\n * existing data, depending on the type of process.\n * Advice on address input / editing:\n *  - Use an i18n-ready address widget such as\n *    https://github.com/google/libaddressinput)\n * - Users should not be presented with UI elements for input or editing of\n *   fields outside countries where that field is used.\n * For more guidance on how to use this schema, please see:\n * https://support.google.com/business/answer/6397478\n *\n * Generated from protobuf message <code>google.type.PostalAddress</code>\n */\nclass PostalAddress extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The schema revision of the `PostalAddress`. This must be set to 0, which is\n     * the latest revision.\n     * All new revisions **must** be backward compatible with old revisions.\n     *\n     * Generated from protobuf field <code>int32 revision = 1;</code>\n     */\n    protected $revision = 0;\n    /**\n     * Required. CLDR region code of the country/region of the address. This\n     * is never inferred and it is up to the user to ensure the value is\n     * correct. See http://cldr.unicode.org/ and\n     * http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html\n     * for details. Example: \"CH\" for Switzerland.\n     *\n     * Generated from protobuf field <code>string region_code = 2;</code>\n     */\n    protected $region_code = '';\n    /**\n     * Optional. BCP-47 language code of the contents of this address (if\n     * known). This is often the UI language of the input form or is expected\n     * to match one of the languages used in the address' country/region, or their\n     * transliterated equivalents.\n     * This can affect formatting in certain countries, but is not critical\n     * to the correctness of the data and will never affect any validation or\n     * other non-formatting related operations.\n     * If this value is not known, it should be omitted (rather than specifying a\n     * possibly incorrect default).\n     * Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".\n     *\n     * Generated from protobuf field <code>string language_code = 3;</code>\n     */\n    protected $language_code = '';\n    /**\n     * Optional. Postal code of the address. Not all countries use or require\n     * postal codes to be present, but where they are used, they may trigger\n     * additional validation with other parts of the address (e.g. state/zip\n     * validation in the U.S.A.).\n     *\n     * Generated from protobuf field <code>string postal_code = 4;</code>\n     */\n    protected $postal_code = '';\n    /**\n     * Optional. Additional, country-specific, sorting code. This is not used\n     * in most regions. Where it is used, the value is either a string like\n     * \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number\n     * alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\"\n     * (Malawi) or \"post office indicator\" (e.g. Côte d'Ivoire).\n     *\n     * Generated from protobuf field <code>string sorting_code = 5;</code>\n     */\n    protected $sorting_code = '';\n    /**\n     * Optional. Highest administrative subdivision which is used for postal\n     * addresses of a country or region.\n     * For example, this can be a state, a province, an oblast, or a prefecture.\n     * Specifically, for Spain this is the province and not the autonomous\n     * community (e.g. \"Barcelona\" and not \"Catalonia\").\n     * Many countries don't use an administrative area in postal addresses. E.g.\n     * in Switzerland this should be left unpopulated.\n     *\n     * Generated from protobuf field <code>string administrative_area = 6;</code>\n     */\n    protected $administrative_area = '';\n    /**\n     * Optional. Generally refers to the city/town portion of the address.\n     * Examples: US city, IT comune, UK post town.\n     * In regions of the world where localities are not well defined or do not fit\n     * into this structure well, leave locality empty and use address_lines.\n     *\n     * Generated from protobuf field <code>string locality = 7;</code>\n     */\n    protected $locality = '';\n    /**\n     * Optional. Sublocality of the address.\n     * For example, this can be neighborhoods, boroughs, districts.\n     *\n     * Generated from protobuf field <code>string sublocality = 8;</code>\n     */\n    protected $sublocality = '';\n    /**\n     * Unstructured address lines describing the lower levels of an address.\n     * Because values in address_lines do not have type information and may\n     * sometimes contain multiple values in a single field (e.g.\n     * \"Austin, TX\"), it is important that the line order is clear. The order of\n     * address lines should be \"envelope order\" for the country/region of the\n     * address. In places where this can vary (e.g. Japan), address_language is\n     * used to make it explicit (e.g. \"ja\" for large-to-small ordering and\n     * \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of\n     * an address can be selected based on the language.\n     * The minimum permitted structural representation of an address consists\n     * of a region_code with all remaining information placed in the\n     * address_lines. It would be possible to format such an address very\n     * approximately without geocoding, but no semantic reasoning could be\n     * made about any of the address components until it was at least\n     * partially resolved.\n     * Creating an address only containing a region_code and address_lines, and\n     * then geocoding is the recommended way to handle completely unstructured\n     * addresses (as opposed to guessing which parts of the address should be\n     * localities or administrative areas).\n     *\n     * Generated from protobuf field <code>repeated string address_lines = 9;</code>\n     */\n    private $address_lines;\n    /**\n     * Optional. The recipient at the address.\n     * This field may, under certain circumstances, contain multiline information.\n     * For example, it might contain \"care of\" information.\n     *\n     * Generated from protobuf field <code>repeated string recipients = 10;</code>\n     */\n    private $recipients;\n    /**\n     * Optional. The name of the organization at the address.\n     *\n     * Generated from protobuf field <code>string organization = 11;</code>\n     */\n    protected $organization = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $revision\n     *           The schema revision of the `PostalAddress`. This must be set to 0, which is\n     *           the latest revision.\n     *           All new revisions **must** be backward compatible with old revisions.\n     *     @type string $region_code\n     *           Required. CLDR region code of the country/region of the address. This\n     *           is never inferred and it is up to the user to ensure the value is\n     *           correct. See http://cldr.unicode.org/ and\n     *           http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html\n     *           for details. Example: \"CH\" for Switzerland.\n     *     @type string $language_code\n     *           Optional. BCP-47 language code of the contents of this address (if\n     *           known). This is often the UI language of the input form or is expected\n     *           to match one of the languages used in the address' country/region, or their\n     *           transliterated equivalents.\n     *           This can affect formatting in certain countries, but is not critical\n     *           to the correctness of the data and will never affect any validation or\n     *           other non-formatting related operations.\n     *           If this value is not known, it should be omitted (rather than specifying a\n     *           possibly incorrect default).\n     *           Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".\n     *     @type string $postal_code\n     *           Optional. Postal code of the address. Not all countries use or require\n     *           postal codes to be present, but where they are used, they may trigger\n     *           additional validation with other parts of the address (e.g. state/zip\n     *           validation in the U.S.A.).\n     *     @type string $sorting_code\n     *           Optional. Additional, country-specific, sorting code. This is not used\n     *           in most regions. Where it is used, the value is either a string like\n     *           \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number\n     *           alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\"\n     *           (Malawi) or \"post office indicator\" (e.g. Côte d'Ivoire).\n     *     @type string $administrative_area\n     *           Optional. Highest administrative subdivision which is used for postal\n     *           addresses of a country or region.\n     *           For example, this can be a state, a province, an oblast, or a prefecture.\n     *           Specifically, for Spain this is the province and not the autonomous\n     *           community (e.g. \"Barcelona\" and not \"Catalonia\").\n     *           Many countries don't use an administrative area in postal addresses. E.g.\n     *           in Switzerland this should be left unpopulated.\n     *     @type string $locality\n     *           Optional. Generally refers to the city/town portion of the address.\n     *           Examples: US city, IT comune, UK post town.\n     *           In regions of the world where localities are not well defined or do not fit\n     *           into this structure well, leave locality empty and use address_lines.\n     *     @type string $sublocality\n     *           Optional. Sublocality of the address.\n     *           For example, this can be neighborhoods, boroughs, districts.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $address_lines\n     *           Unstructured address lines describing the lower levels of an address.\n     *           Because values in address_lines do not have type information and may\n     *           sometimes contain multiple values in a single field (e.g.\n     *           \"Austin, TX\"), it is important that the line order is clear. The order of\n     *           address lines should be \"envelope order\" for the country/region of the\n     *           address. In places where this can vary (e.g. Japan), address_language is\n     *           used to make it explicit (e.g. \"ja\" for large-to-small ordering and\n     *           \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of\n     *           an address can be selected based on the language.\n     *           The minimum permitted structural representation of an address consists\n     *           of a region_code with all remaining information placed in the\n     *           address_lines. It would be possible to format such an address very\n     *           approximately without geocoding, but no semantic reasoning could be\n     *           made about any of the address components until it was at least\n     *           partially resolved.\n     *           Creating an address only containing a region_code and address_lines, and\n     *           then geocoding is the recommended way to handle completely unstructured\n     *           addresses (as opposed to guessing which parts of the address should be\n     *           localities or administrative areas).\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $recipients\n     *           Optional. The recipient at the address.\n     *           This field may, under certain circumstances, contain multiline information.\n     *           For example, it might contain \"care of\" information.\n     *     @type string $organization\n     *           Optional. The name of the organization at the address.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\PostalAddress::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The schema revision of the `PostalAddress`. This must be set to 0, which is\n     * the latest revision.\n     * All new revisions **must** be backward compatible with old revisions.\n     *\n     * Generated from protobuf field <code>int32 revision = 1;</code>\n     * @return int\n     */\n    public function getRevision()\n    {\n        return $this->revision;\n    }\n\n    /**\n     * The schema revision of the `PostalAddress`. This must be set to 0, which is\n     * the latest revision.\n     * All new revisions **must** be backward compatible with old revisions.\n     *\n     * Generated from protobuf field <code>int32 revision = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setRevision($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->revision = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. CLDR region code of the country/region of the address. This\n     * is never inferred and it is up to the user to ensure the value is\n     * correct. See http://cldr.unicode.org/ and\n     * http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html\n     * for details. Example: \"CH\" for Switzerland.\n     *\n     * Generated from protobuf field <code>string region_code = 2;</code>\n     * @return string\n     */\n    public function getRegionCode()\n    {\n        return $this->region_code;\n    }\n\n    /**\n     * Required. CLDR region code of the country/region of the address. This\n     * is never inferred and it is up to the user to ensure the value is\n     * correct. See http://cldr.unicode.org/ and\n     * http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html\n     * for details. Example: \"CH\" for Switzerland.\n     *\n     * Generated from protobuf field <code>string region_code = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRegionCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->region_code = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. BCP-47 language code of the contents of this address (if\n     * known). This is often the UI language of the input form or is expected\n     * to match one of the languages used in the address' country/region, or their\n     * transliterated equivalents.\n     * This can affect formatting in certain countries, but is not critical\n     * to the correctness of the data and will never affect any validation or\n     * other non-formatting related operations.\n     * If this value is not known, it should be omitted (rather than specifying a\n     * possibly incorrect default).\n     * Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".\n     *\n     * Generated from protobuf field <code>string language_code = 3;</code>\n     * @return string\n     */\n    public function getLanguageCode()\n    {\n        return $this->language_code;\n    }\n\n    /**\n     * Optional. BCP-47 language code of the contents of this address (if\n     * known). This is often the UI language of the input form or is expected\n     * to match one of the languages used in the address' country/region, or their\n     * transliterated equivalents.\n     * This can affect formatting in certain countries, but is not critical\n     * to the correctness of the data and will never affect any validation or\n     * other non-formatting related operations.\n     * If this value is not known, it should be omitted (rather than specifying a\n     * possibly incorrect default).\n     * Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".\n     *\n     * Generated from protobuf field <code>string language_code = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLanguageCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->language_code = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Postal code of the address. Not all countries use or require\n     * postal codes to be present, but where they are used, they may trigger\n     * additional validation with other parts of the address (e.g. state/zip\n     * validation in the U.S.A.).\n     *\n     * Generated from protobuf field <code>string postal_code = 4;</code>\n     * @return string\n     */\n    public function getPostalCode()\n    {\n        return $this->postal_code;\n    }\n\n    /**\n     * Optional. Postal code of the address. Not all countries use or require\n     * postal codes to be present, but where they are used, they may trigger\n     * additional validation with other parts of the address (e.g. state/zip\n     * validation in the U.S.A.).\n     *\n     * Generated from protobuf field <code>string postal_code = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPostalCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->postal_code = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Additional, country-specific, sorting code. This is not used\n     * in most regions. Where it is used, the value is either a string like\n     * \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number\n     * alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\"\n     * (Malawi) or \"post office indicator\" (e.g. Côte d'Ivoire).\n     *\n     * Generated from protobuf field <code>string sorting_code = 5;</code>\n     * @return string\n     */\n    public function getSortingCode()\n    {\n        return $this->sorting_code;\n    }\n\n    /**\n     * Optional. Additional, country-specific, sorting code. This is not used\n     * in most regions. Where it is used, the value is either a string like\n     * \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number\n     * alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\"\n     * (Malawi) or \"post office indicator\" (e.g. Côte d'Ivoire).\n     *\n     * Generated from protobuf field <code>string sorting_code = 5;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSortingCode($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->sorting_code = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Highest administrative subdivision which is used for postal\n     * addresses of a country or region.\n     * For example, this can be a state, a province, an oblast, or a prefecture.\n     * Specifically, for Spain this is the province and not the autonomous\n     * community (e.g. \"Barcelona\" and not \"Catalonia\").\n     * Many countries don't use an administrative area in postal addresses. E.g.\n     * in Switzerland this should be left unpopulated.\n     *\n     * Generated from protobuf field <code>string administrative_area = 6;</code>\n     * @return string\n     */\n    public function getAdministrativeArea()\n    {\n        return $this->administrative_area;\n    }\n\n    /**\n     * Optional. Highest administrative subdivision which is used for postal\n     * addresses of a country or region.\n     * For example, this can be a state, a province, an oblast, or a prefecture.\n     * Specifically, for Spain this is the province and not the autonomous\n     * community (e.g. \"Barcelona\" and not \"Catalonia\").\n     * Many countries don't use an administrative area in postal addresses. E.g.\n     * in Switzerland this should be left unpopulated.\n     *\n     * Generated from protobuf field <code>string administrative_area = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAdministrativeArea($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->administrative_area = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Generally refers to the city/town portion of the address.\n     * Examples: US city, IT comune, UK post town.\n     * In regions of the world where localities are not well defined or do not fit\n     * into this structure well, leave locality empty and use address_lines.\n     *\n     * Generated from protobuf field <code>string locality = 7;</code>\n     * @return string\n     */\n    public function getLocality()\n    {\n        return $this->locality;\n    }\n\n    /**\n     * Optional. Generally refers to the city/town portion of the address.\n     * Examples: US city, IT comune, UK post town.\n     * In regions of the world where localities are not well defined or do not fit\n     * into this structure well, leave locality empty and use address_lines.\n     *\n     * Generated from protobuf field <code>string locality = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLocality($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->locality = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. Sublocality of the address.\n     * For example, this can be neighborhoods, boroughs, districts.\n     *\n     * Generated from protobuf field <code>string sublocality = 8;</code>\n     * @return string\n     */\n    public function getSublocality()\n    {\n        return $this->sublocality;\n    }\n\n    /**\n     * Optional. Sublocality of the address.\n     * For example, this can be neighborhoods, boroughs, districts.\n     *\n     * Generated from protobuf field <code>string sublocality = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSublocality($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->sublocality = $var;\n\n        return $this;\n    }\n\n    /**\n     * Unstructured address lines describing the lower levels of an address.\n     * Because values in address_lines do not have type information and may\n     * sometimes contain multiple values in a single field (e.g.\n     * \"Austin, TX\"), it is important that the line order is clear. The order of\n     * address lines should be \"envelope order\" for the country/region of the\n     * address. In places where this can vary (e.g. Japan), address_language is\n     * used to make it explicit (e.g. \"ja\" for large-to-small ordering and\n     * \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of\n     * an address can be selected based on the language.\n     * The minimum permitted structural representation of an address consists\n     * of a region_code with all remaining information placed in the\n     * address_lines. It would be possible to format such an address very\n     * approximately without geocoding, but no semantic reasoning could be\n     * made about any of the address components until it was at least\n     * partially resolved.\n     * Creating an address only containing a region_code and address_lines, and\n     * then geocoding is the recommended way to handle completely unstructured\n     * addresses (as opposed to guessing which parts of the address should be\n     * localities or administrative areas).\n     *\n     * Generated from protobuf field <code>repeated string address_lines = 9;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getAddressLines()\n    {\n        return $this->address_lines;\n    }\n\n    /**\n     * Unstructured address lines describing the lower levels of an address.\n     * Because values in address_lines do not have type information and may\n     * sometimes contain multiple values in a single field (e.g.\n     * \"Austin, TX\"), it is important that the line order is clear. The order of\n     * address lines should be \"envelope order\" for the country/region of the\n     * address. In places where this can vary (e.g. Japan), address_language is\n     * used to make it explicit (e.g. \"ja\" for large-to-small ordering and\n     * \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of\n     * an address can be selected based on the language.\n     * The minimum permitted structural representation of an address consists\n     * of a region_code with all remaining information placed in the\n     * address_lines. It would be possible to format such an address very\n     * approximately without geocoding, but no semantic reasoning could be\n     * made about any of the address components until it was at least\n     * partially resolved.\n     * Creating an address only containing a region_code and address_lines, and\n     * then geocoding is the recommended way to handle completely unstructured\n     * addresses (as opposed to guessing which parts of the address should be\n     * localities or administrative areas).\n     *\n     * Generated from protobuf field <code>repeated string address_lines = 9;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setAddressLines($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->address_lines = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The recipient at the address.\n     * This field may, under certain circumstances, contain multiline information.\n     * For example, it might contain \"care of\" information.\n     *\n     * Generated from protobuf field <code>repeated string recipients = 10;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getRecipients()\n    {\n        return $this->recipients;\n    }\n\n    /**\n     * Optional. The recipient at the address.\n     * This field may, under certain circumstances, contain multiline information.\n     * For example, it might contain \"care of\" information.\n     *\n     * Generated from protobuf field <code>repeated string recipients = 10;</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setRecipients($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->recipients = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Optional. The name of the organization at the address.\n     *\n     * Generated from protobuf field <code>string organization = 11;</code>\n     * @return string\n     */\n    public function getOrganization()\n    {\n        return $this->organization;\n    }\n\n    /**\n     * Optional. The name of the organization at the address.\n     *\n     * Generated from protobuf field <code>string organization = 11;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setOrganization($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->organization = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/Quaternion.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/quaternion.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A quaternion is defined as the quotient of two directed lines in a\n * three-dimensional space or equivalently as the quotient of two Euclidean\n * vectors (https://en.wikipedia.org/wiki/Quaternion).\n * Quaternions are often used in calculations involving three-dimensional\n * rotations (https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation),\n * as they provide greater mathematical robustness by avoiding the gimbal lock\n * problems that can be encountered when using Euler angles\n * (https://en.wikipedia.org/wiki/Gimbal_lock).\n * Quaternions are generally represented in this form:\n *     w + xi + yj + zk\n * where x, y, z, and w are real numbers, and i, j, and k are three imaginary\n * numbers.\n * Our naming choice `(x, y, z, w)` comes from the desire to avoid confusion for\n * those interested in the geometric properties of the quaternion in the 3D\n * Cartesian space. Other texts often use alternative names or subscripts, such\n * as `(a, b, c, d)`, `(1, i, j, k)`, or `(0, 1, 2, 3)`, which are perhaps\n * better suited for mathematical interpretations.\n * To avoid any confusion, as well as to maintain compatibility with a large\n * number of software libraries, the quaternions represented using the protocol\n * buffer below *must* follow the Hamilton convention, which defines `ij = k`\n * (i.e. a right-handed algebra), and therefore:\n *     i^2 = j^2 = k^2 = ijk = −1\n *     ij = −ji = k\n *     jk = −kj = i\n *     ki = −ik = j\n * Please DO NOT use this to represent quaternions that follow the JPL\n * convention, or any of the other quaternion flavors out there.\n * Definitions:\n *   - Quaternion norm (or magnitude): `sqrt(x^2 + y^2 + z^2 + w^2)`.\n *   - Unit (or normalized) quaternion: a quaternion whose norm is 1.\n *   - Pure quaternion: a quaternion whose scalar component (`w`) is 0.\n *   - Rotation quaternion: a unit quaternion used to represent rotation.\n *   - Orientation quaternion: a unit quaternion used to represent orientation.\n * A quaternion can be normalized by dividing it by its norm. The resulting\n * quaternion maintains the same direction, but has a norm of 1, i.e. it moves\n * on the unit sphere. This is generally necessary for rotation and orientation\n * quaternions, to avoid rounding errors:\n * https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions\n * Note that `(x, y, z, w)` and `(-x, -y, -z, -w)` represent the same rotation,\n * but normalization would be even more useful, e.g. for comparison purposes, if\n * it would produce a unique representation. It is thus recommended that `w` be\n * kept positive, which can be achieved by changing all the signs when `w` is\n * negative.\n *\n * Generated from protobuf message <code>google.type.Quaternion</code>\n */\nclass Quaternion extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The x component.\n     *\n     * Generated from protobuf field <code>double x = 1;</code>\n     */\n    protected $x = 0.0;\n    /**\n     * The y component.\n     *\n     * Generated from protobuf field <code>double y = 2;</code>\n     */\n    protected $y = 0.0;\n    /**\n     * The z component.\n     *\n     * Generated from protobuf field <code>double z = 3;</code>\n     */\n    protected $z = 0.0;\n    /**\n     * The scalar component.\n     *\n     * Generated from protobuf field <code>double w = 4;</code>\n     */\n    protected $w = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $x\n     *           The x component.\n     *     @type float $y\n     *           The y component.\n     *     @type float $z\n     *           The z component.\n     *     @type float $w\n     *           The scalar component.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Quaternion::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The x component.\n     *\n     * Generated from protobuf field <code>double x = 1;</code>\n     * @return float\n     */\n    public function getX()\n    {\n        return $this->x;\n    }\n\n    /**\n     * The x component.\n     *\n     * Generated from protobuf field <code>double x = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setX($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->x = $var;\n\n        return $this;\n    }\n\n    /**\n     * The y component.\n     *\n     * Generated from protobuf field <code>double y = 2;</code>\n     * @return float\n     */\n    public function getY()\n    {\n        return $this->y;\n    }\n\n    /**\n     * The y component.\n     *\n     * Generated from protobuf field <code>double y = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setY($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->y = $var;\n\n        return $this;\n    }\n\n    /**\n     * The z component.\n     *\n     * Generated from protobuf field <code>double z = 3;</code>\n     * @return float\n     */\n    public function getZ()\n    {\n        return $this->z;\n    }\n\n    /**\n     * The z component.\n     *\n     * Generated from protobuf field <code>double z = 3;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setZ($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->z = $var;\n\n        return $this;\n    }\n\n    /**\n     * The scalar component.\n     *\n     * Generated from protobuf field <code>double w = 4;</code>\n     * @return float\n     */\n    public function getW()\n    {\n        return $this->w;\n    }\n\n    /**\n     * The scalar component.\n     *\n     * Generated from protobuf field <code>double w = 4;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setW($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->w = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/TimeOfDay.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/timeofday.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a time of day. The date and time zone are either not significant\n * or are specified elsewhere. An API may choose to allow leap seconds. Related\n * types are [google.type.Date][google.type.Date] and\n * `google.protobuf.Timestamp`.\n *\n * Generated from protobuf message <code>google.type.TimeOfDay</code>\n */\nclass TimeOfDay extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\n     * to allow the value \"24:00:00\" for scenarios like business closing time.\n     *\n     * Generated from protobuf field <code>int32 hours = 1;</code>\n     */\n    protected $hours = 0;\n    /**\n     * Minutes of hour of day. Must be from 0 to 59.\n     *\n     * Generated from protobuf field <code>int32 minutes = 2;</code>\n     */\n    protected $minutes = 0;\n    /**\n     * Seconds of minutes of the time. Must normally be from 0 to 59. An API may\n     * allow the value 60 if it allows leap-seconds.\n     *\n     * Generated from protobuf field <code>int32 seconds = 3;</code>\n     */\n    protected $seconds = 0;\n    /**\n     * Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n     *\n     * Generated from protobuf field <code>int32 nanos = 4;</code>\n     */\n    protected $nanos = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $hours\n     *           Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\n     *           to allow the value \"24:00:00\" for scenarios like business closing time.\n     *     @type int $minutes\n     *           Minutes of hour of day. Must be from 0 to 59.\n     *     @type int $seconds\n     *           Seconds of minutes of the time. Must normally be from 0 to 59. An API may\n     *           allow the value 60 if it allows leap-seconds.\n     *     @type int $nanos\n     *           Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Timeofday::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\n     * to allow the value \"24:00:00\" for scenarios like business closing time.\n     *\n     * Generated from protobuf field <code>int32 hours = 1;</code>\n     * @return int\n     */\n    public function getHours()\n    {\n        return $this->hours;\n    }\n\n    /**\n     * Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\n     * to allow the value \"24:00:00\" for scenarios like business closing time.\n     *\n     * Generated from protobuf field <code>int32 hours = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setHours($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->hours = $var;\n\n        return $this;\n    }\n\n    /**\n     * Minutes of hour of day. Must be from 0 to 59.\n     *\n     * Generated from protobuf field <code>int32 minutes = 2;</code>\n     * @return int\n     */\n    public function getMinutes()\n    {\n        return $this->minutes;\n    }\n\n    /**\n     * Minutes of hour of day. Must be from 0 to 59.\n     *\n     * Generated from protobuf field <code>int32 minutes = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMinutes($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->minutes = $var;\n\n        return $this;\n    }\n\n    /**\n     * Seconds of minutes of the time. Must normally be from 0 to 59. An API may\n     * allow the value 60 if it allows leap-seconds.\n     *\n     * Generated from protobuf field <code>int32 seconds = 3;</code>\n     * @return int\n     */\n    public function getSeconds()\n    {\n        return $this->seconds;\n    }\n\n    /**\n     * Seconds of minutes of the time. Must normally be from 0 to 59. An API may\n     * allow the value 60 if it allows leap-seconds.\n     *\n     * Generated from protobuf field <code>int32 seconds = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setSeconds($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->seconds = $var;\n\n        return $this;\n    }\n\n    /**\n     * Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n     *\n     * Generated from protobuf field <code>int32 nanos = 4;</code>\n     * @return int\n     */\n    public function getNanos()\n    {\n        return $this->nanos;\n    }\n\n    /**\n     * Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.\n     *\n     * Generated from protobuf field <code>int32 nanos = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNanos($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->nanos = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/common-protos/src/Type/TimeZone.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/type/datetime.proto\n\nnamespace Google\\Type;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Represents a time zone from the\n * [IANA Time Zone Database](https://www.iana.org/time-zones).\n *\n * Generated from protobuf message <code>google.type.TimeZone</code>\n */\nclass TimeZone extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * IANA Time Zone Database time zone, e.g. \"America/New_York\".\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     */\n    protected $id = '';\n    /**\n     * Optional. IANA Time Zone Database version number, e.g. \"2019a\".\n     *\n     * Generated from protobuf field <code>string version = 2;</code>\n     */\n    protected $version = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $id\n     *           IANA Time Zone Database time zone, e.g. \"America/New_York\".\n     *     @type string $version\n     *           Optional. IANA Time Zone Database version number, e.g. \"2019a\".\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Type\\Datetime::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * IANA Time Zone Database time zone, e.g. \"America/New_York\".\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     * @return string\n     */\n    public function getId()\n    {\n        return $this->id;\n    }\n\n    /**\n     * IANA Time Zone Database time zone, e.g. \"America/New_York\".\n     *\n     * Generated from protobuf field <code>string id = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setId($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->id = $var;\n\n        return $this;\n    }\n\n    /**\n     * Optional. IANA Time Zone Database version number, e.g. \"2019a\".\n     *\n     * Generated from protobuf field <code>string version = 2;</code>\n     * @return string\n     */\n    public function getVersion()\n    {\n        return $this->version;\n    }\n\n    /**\n     * Optional. IANA Time Zone Database version number, e.g. \"2019a\".\n     *\n     * Generated from protobuf field <code>string version = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setVersion($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->version = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/.repo-metadata.json",
    "content": "{\n    \"language\": \"php\",\n    \"distribution_name\": \"google/gax\",\n    \"release_level\": \"stable\",\n    \"client_documentation\": \"https://cloud.google.com/php/docs/reference/gax/latest\",\n    \"library_type\": \"CORE\"\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/CHANGELOG.md",
    "content": "# Changelog\n\n## [1.40.0](https://github.com/googleapis/gax-php/compare/v1.39.0...v1.40.0) (2025-12-04)\n\n\n### Features\n\n* Add TransportCallMiddleware ([#640](https://github.com/googleapis/gax-php/issues/640)) ([a0f9d37](https://github.com/googleapis/gax-php/commit/a0f9d3740d62f6a776ac701631aa734046ceeb77))\n\n## [1.39.0](https://github.com/googleapis/gax-php/compare/v1.38.2...v1.39.0) (2025-12-02)\n\n\n### Features\n\n* Add GapicClientTrait::prependMiddleware ([#638](https://github.com/googleapis/gax-php/issues/638)) ([d46c06d](https://github.com/googleapis/gax-php/commit/d46c06d3bb551d9f7848bceebcfd78f80ec7890f))\n\n## [1.38.2](https://github.com/googleapis/gax-php/compare/v1.38.1...v1.38.2) (2025-11-14)\n\n\n### Bug Fixes\n\n* Don't override ApiException::__toString ([#388](https://github.com/googleapis/gax-php/issues/388)) ([db7cd2e](https://github.com/googleapis/gax-php/commit/db7cd2e55219463aa0f7d0bcc989f35d008d174b))\n\n## [1.38.1](https://github.com/googleapis/gax-php/compare/v1.38.0...v1.38.1) (2025-11-06)\n\n\n### Bug Fixes\n\n* Add return type to `offsetGet` ([#633](https://github.com/googleapis/gax-php/issues/633)) ([b77c12d](https://github.com/googleapis/gax-php/commit/b77c12dc959e8434fcd1f7f08cedaa84cdfb00a4))\n\n## [1.38.0](https://github.com/googleapis/gax-php/compare/v1.37.0...v1.38.0) (2025-09-17)\n\n\n### Features\n\n* Add the rpcName to the BIDI stream opening request ([#630](https://github.com/googleapis/gax-php/issues/630)) ([9c61d8f](https://github.com/googleapis/gax-php/commit/9c61d8f2bd09731d5f22c22eb81895eaf4db2031))\n* Make options classes fluid ([#618](https://github.com/googleapis/gax-php/issues/618)) ([427b46e](https://github.com/googleapis/gax-php/commit/427b46e91b3881fd0da361b5b351c6dda47e640a))\n\n\n### Bug Fixes\n\n* Update protobuf RepeatedField to new namespace ([#624](https://github.com/googleapis/gax-php/issues/624)) ([3558cc4](https://github.com/googleapis/gax-php/commit/3558cc49139861fa411c77b33f457467ec8daa97))\n\n## [1.37.0](https://github.com/googleapis/gax-php/compare/v1.36.1...v1.37.0) (2025-09-10)\n\n\n### Features\n\n* Support client options in ClientOptionsTrait::buildClientOptions ([#621](https://github.com/googleapis/gax-php/issues/621)) ([68e2336](https://github.com/googleapis/gax-php/commit/68e23369657b1740fffe480f96d9d7b04e3e38c2))\n\n\n### Bug Fixes\n\n* Ensure compute request build parameters have the operation ID last ([#625](https://github.com/googleapis/gax-php/issues/625)) ([f90ab28](https://github.com/googleapis/gax-php/commit/f90ab28cea6bbbd00f2a652a6d77babb69b2ada8))\n\n## [1.36.1](https://github.com/googleapis/gax-php/compare/v1.36.0...v1.36.1) (2025-05-20)\n\n\n### Bug Fixes\n\n* Protobuf 4.31 deprecations ([#616](https://github.com/googleapis/gax-php/issues/616)) ([b06048b](https://github.com/googleapis/gax-php/commit/b06048be5c29a2534ba1c908642c69798e145d99))\n\n## [1.36.0](https://github.com/googleapis/gax-php/compare/v1.35.1...v1.36.0) (2024-12-11)\n\n\n### Features\n\n* Add logging to the supported transports ([#585](https://github.com/googleapis/gax-php/issues/585)) ([819a677](https://github.com/googleapis/gax-php/commit/819a677e0d89d75662b30a1dbdd45f6a610d9f0c))\n\n## [1.35.1](https://github.com/googleapis/gax-php/compare/v1.35.0...v1.35.1) (2024-12-04)\n\n\n### Bug Fixes\n\n* Ensure hasEmulator client option is passed to createTransport ([#594](https://github.com/googleapis/gax-php/issues/594)) ([13bbe8a](https://github.com/googleapis/gax-php/commit/13bbe8a2e6df2bfd6c5febba735113f1abcba201))\n* Remove implicit null, add php 8.4 ([#599](https://github.com/googleapis/gax-php/issues/599)) ([af0a0e7](https://github.com/googleapis/gax-php/commit/af0a0e708dfbea46de627965db0f63114fcfb67f))\n\n## [1.35.0](https://github.com/googleapis/gax-php/compare/v1.34.1...v1.35.0) (2024-11-06)\n\n\n### Features\n\n* Add `InsecureRequestBuilder` for emulator ([#582](https://github.com/googleapis/gax-php/issues/582)) ([cc1d047](https://github.com/googleapis/gax-php/commit/cc1d0472a1caf31bb3ecd98da1d6b8588f95b63a))\n* **docs:** Use doctum shared workflow for reference docs ([#578](https://github.com/googleapis/gax-php/issues/578)) ([021763f](https://github.com/googleapis/gax-php/commit/021763f255acaffda6ebe34a9d1a01c2bd187326))\n* Support for API Key client option ([#351](https://github.com/googleapis/gax-php/issues/351)) ([ab7f04f](https://github.com/googleapis/gax-php/commit/ab7f04fd8c9f7ed33a58155ae6b9e740f365ac2a))\n\n\n### Bug Fixes\n\n* **tests:** Skip docs tests from forks ([#591](https://github.com/googleapis/gax-php/issues/591)) ([35ae9f7](https://github.com/googleapis/gax-php/commit/35ae9f708d3ef937308d266e3a012296ce8606fc))\n\n## [1.34.1](https://github.com/googleapis/gax-php/compare/v1.34.0...v1.34.1) (2024-08-13)\n\n\n### Bug Fixes\n\n* Disable universe domain check for MDS ([#575](https://github.com/googleapis/gax-php/issues/575)) ([a47a469](https://github.com/googleapis/gax-php/commit/a47a469d9ef76613c5d320539646323a5e7b978d))\n\n## [1.34.0](https://github.com/googleapis/gax-php/compare/v1.33.0...v1.34.0) (2024-05-29)\n\n\n### Features\n\n* Support new surface operations clients ([#569](https://github.com/googleapis/gax-php/issues/569)) ([fa06e73](https://github.com/googleapis/gax-php/commit/fa06e738fc63a3b9f70a26e6d20f30c582ef1870))\n\n## [1.33.0](https://github.com/googleapis/gax-php/compare/v1.32.0...v1.33.0) (2024-05-10)\n\n\n### Features\n\n* Support V2 OperationsClient in OperationResponse ([#564](https://github.com/googleapis/gax-php/issues/564)) ([7f8bb13](https://github.com/googleapis/gax-php/commit/7f8bb13f78463b1e7f2289ce5514763992806e5e))\n\n## [1.32.0](https://github.com/googleapis/gax-php/compare/v1.31.0...v1.32.0) (2024-04-24)\n\n\n### Features\n\n* Add a custom encoder in Serializer ([#554](https://github.com/googleapis/gax-php/issues/554)) ([be28b5a](https://github.com/googleapis/gax-php/commit/be28b5a859b674a3d398bdaab7ed86b93dd7a593))\n\n## [1.31.0](https://github.com/googleapis/gax-php/compare/v1.30.1...v1.31.0) (2024-04-22)\n\n\n### Features\n\n* Add the api header to the GapicClientTrait ([#553](https://github.com/googleapis/gax-php/issues/553)) ([cc102eb](https://github.com/googleapis/gax-php/commit/cc102ebdfd63019b1e6bcd51515be2a2cb13534d))\n\n\n### Bug Fixes\n\n* Add caching and micro optimizations in Serializer ([5a5d8a7](https://github.com/googleapis/gax-php/commit/5a5d8a763d8e2d470a6d960b788e7d2a938cd64f))\n* Pass auth http handler to update metadata call ([#557](https://github.com/googleapis/gax-php/issues/557)) ([6e04a50](https://github.com/googleapis/gax-php/commit/6e04a50d013f5686ec5e66c457b9b440b9bcde9e))\n\n## [1.30.0](https://github.com/googleapis/gax-php/compare/v1.29.1...v1.30.0) (2024-02-28)\n\n\n### Features\n\n* Auto Populate fields configured for auto population in Rpc Request Message ([#543](https://github.com/googleapis/gax-php/issues/543)) ([99d6b89](https://github.com/googleapis/gax-php/commit/99d6b899ddf55d51fab976844c1e0f8fe9918a52))\n* Make the default authHttpHandler in CredentialsWrapper null ([#544](https://github.com/googleapis/gax-php/issues/544)) ([2a25eea](https://github.com/googleapis/gax-php/commit/2a25eeacadf2f783f64b4eca4f94e067ddef3eaa))\n\n## [1.29.1](https://github.com/googleapis/gax-php/compare/v1.29.0...v1.29.1) (2024-02-26)\n\n\n### Bug Fixes\n\n* Allow InsecureCredentialsWrapper::getAuthorizationHeaderCallback to return null ([#541](https://github.com/googleapis/gax-php/issues/541)) ([676f4f7](https://github.com/googleapis/gax-php/commit/676f4f7e3d8925d8aba00285616fdf89440b45f9))\n\n## [1.29.0](https://github.com/googleapis/gax-php/compare/v1.28.1...v1.29.0) (2024-02-26)\n\n\n### Features\n\n* Add InsecureCredentialsWrapper for Emulator connection ([#538](https://github.com/googleapis/gax-php/issues/538)) ([b5dbeaf](https://github.com/googleapis/gax-php/commit/b5dbeaf33594b300a0c678ffc6a6946b09fce7dd))\n\n## [1.28.1](https://github.com/googleapis/gax-php/compare/v1.28.0...v1.28.1) (2024-02-20)\n\n\n### Bug Fixes\n\n* Universe domain check for grpc transport ([#534](https://github.com/googleapis/gax-php/issues/534)) ([1026d8a](https://github.com/googleapis/gax-php/commit/1026d8aec73e0aad8949a86ee7575e3edb3d56be))\n\n## [1.28.0](https://github.com/googleapis/gax-php/compare/v1.27.2...v1.28.0) (2024-02-15)\n\n\n### Features\n\n* Allow setting of universe domain in environment variable ([#520](https://github.com/googleapis/gax-php/issues/520)) ([6e6603b](https://github.com/googleapis/gax-php/commit/6e6603b03285f3f8d1072776cd206720e3990f50))\n\n## [1.27.2](https://github.com/googleapis/gax-php/compare/v1.27.1...v1.27.2) (2024-02-14)\n\n\n### Bug Fixes\n\n* Typo in TransportOptions option name ([#530](https://github.com/googleapis/gax-php/issues/530)) ([6914fe0](https://github.com/googleapis/gax-php/commit/6914fe04554867bd827be6596fafc751a3d7621a))\n\n## [1.27.1](https://github.com/googleapis/gax-php/compare/v1.27.0...v1.27.1) (2024-02-14)\n\n\n### Bug Fixes\n\n* Issues in Options classes ([#528](https://github.com/googleapis/gax-php/issues/528)) ([aa9ba3a](https://github.com/googleapis/gax-php/commit/aa9ba3a6bac9324ad894d9677da0e897497ebab2))\n\n## [1.27.0](https://github.com/googleapis/gax-php/compare/v1.26.3...v1.27.0) (2024-02-07)\n\n\n### Features\n\n* Create ClientOptionsTrait ([#527](https://github.com/googleapis/gax-php/issues/527)) ([cfe2c60](https://github.com/googleapis/gax-php/commit/cfe2c60a36233f74259c96a6799d8492ed7c45d0))\n* Implement ProjectIdProviderInterface in CredentialsWrapper ([#523](https://github.com/googleapis/gax-php/issues/523)) ([b56a463](https://github.com/googleapis/gax-php/commit/b56a4635abfeeec08895202da8218e9ba915413e))\n* Update ArrayTrait to be consistent with Core ([#526](https://github.com/googleapis/gax-php/issues/526)) ([8e44185](https://github.com/googleapis/gax-php/commit/8e44185dd6f8f8f9ef5b136776cba61ec7a8b8f6))\n\n\n### Bug Fixes\n\n* Correct exception type for Guzzle promise ([#521](https://github.com/googleapis/gax-php/issues/521)) ([7129373](https://github.com/googleapis/gax-php/commit/712937339c134e1d92cab5fa736cfe1bbcd7f343))\n\n## [1.26.3](https://github.com/googleapis/gax-php/compare/v1.26.2...v1.26.3) (2024-01-18)\n\n\n### Bug Fixes\n\n* CallOptions should use transportOptions ([#513](https://github.com/googleapis/gax-php/issues/513)) ([2d45ee1](https://github.com/googleapis/gax-php/commit/2d45ee187cdc3619b30c51b653b508718baf3af4))\n\n## [1.26.2](https://github.com/googleapis/gax-php/compare/v1.26.1...v1.26.2) (2024-01-09)\n\n\n### Bug Fixes\n\n* Ensure modifyClientOptions is called for new surface clients ([#515](https://github.com/googleapis/gax-php/issues/515)) ([68231b8](https://github.com/googleapis/gax-php/commit/68231b896dec8efb86f8986aefba3d247d2a2d1c))\n\n## [1.26.1](https://github.com/googleapis/gax-php/compare/v1.26.0...v1.26.1) (2024-01-04)\n\n\n### Bug Fixes\n\n* Widen google/longrunning version ([#511](https://github.com/googleapis/gax-php/issues/511)) ([b93096d](https://github.com/googleapis/gax-php/commit/b93096d0e10bde14c50480ea9f0423c292fbd5a6))\n\n## [1.26.0](https://github.com/googleapis/gax-php/compare/v1.25.0...v1.26.0) (2024-01-03)\n\n\n### Features\n\n* Add support for universe domain ([#502](https://github.com/googleapis/gax-php/issues/502)) ([5a26fac](https://github.com/googleapis/gax-php/commit/5a26facad5c2e5c30945987c422bb78a3fffb9b1))\n* Interface and methods for middleware stack ([#473](https://github.com/googleapis/gax-php/issues/473)) ([766da7b](https://github.com/googleapis/gax-php/commit/766da7b369409ec1b29376b533e7f22ee7f745f4))\n\n\n### Bug Fixes\n\n* Accept throwable for retry settings ([#509](https://github.com/googleapis/gax-php/issues/509)) ([5af9c3c](https://github.com/googleapis/gax-php/commit/5af9c3c650419c8f1a590783e954cd11dc1f0d56))\n\n## [1.25.0](https://github.com/googleapis/gax-php/compare/v1.24.0...v1.25.0) (2023-11-02)\n\n\n### Features\n\n* Add custom retries ([#489](https://github.com/googleapis/gax-php/issues/489)) ([ef0789b](https://github.com/googleapis/gax-php/commit/ef0789b73ef28d79a08c354d1361a9ccc6206088))\n\n## [1.24.0](https://github.com/googleapis/gax-php/compare/v1.23.0...v1.24.0) (2023-10-10)\n\n\n### Features\n\n* Ensure NewClientSurface works for consoldiated v2 clients ([#493](https://github.com/googleapis/gax-php/issues/493)) ([cb8706e](https://github.com/googleapis/gax-php/commit/cb8706ef9211a1e43f733d2c8f272a330c2fa792))\n\n## [1.23.0](https://github.com/googleapis/gax-php/compare/v1.22.1...v1.23.0) (2023-09-14)\n\n\n### Features\n\n* Typesafety for new surface client options ([#450](https://github.com/googleapis/gax-php/issues/450)) ([21550c5](https://github.com/googleapis/gax-php/commit/21550c5bf07f178f2043b0630f3ac34fcc3a05e0))\n\n## [1.22.1](https://github.com/googleapis/gax-php/compare/v1.22.0...v1.22.1) (2023-08-04)\n\n\n### Bug Fixes\n\n* Deprecation notice while GapicClientTrait-&gt;setClientOptions ([#483](https://github.com/googleapis/gax-php/issues/483)) ([1c66d34](https://github.com/googleapis/gax-php/commit/1c66d3445dca4d43831a2f4e26e59b9bd1cb76dd))\n\n## [1.22.0](https://github.com/googleapis/gax-php/compare/v1.21.1...v1.22.0) (2023-07-31)\n\n\n### Features\n\n* Sets api headers for \"gcloud-php-new\" and \"gcloud-php-legacy\"  surface versions ([#470](https://github.com/googleapis/gax-php/issues/470)) ([2d8ccff](https://github.com/googleapis/gax-php/commit/2d8ccff419a076ee2fe9d3dc7ecd5509c74afb4c))\n\n## [1.21.1](https://github.com/googleapis/gax-php/compare/v1.21.0...v1.21.1) (2023-06-28)\n\n\n### Bug Fixes\n\n* Revert \"chore: remove unnecessary api endpoint check\" ([#476](https://github.com/googleapis/gax-php/issues/476)) ([13e773f](https://github.com/googleapis/gax-php/commit/13e773f5b09f9a99b8425835815746d37e9c1da3))\n\n## [1.21.0](https://github.com/googleapis/gax-php/compare/v1.20.2...v1.21.0) (2023-06-09)\n\n\n### Features\n\n* Support guzzle/promises:v2 ([753eae9](https://github.com/googleapis/gax-php/commit/753eae9acf638f3356f8149acf84444eb399a699))\n\n## [1.20.2](https://github.com/googleapis/gax-php/compare/v1.20.1...v1.20.2) (2023-05-12)\n\n\n### Bug Fixes\n\n* Ensure timeout set by RetryMiddleware is int not float ([#462](https://github.com/googleapis/gax-php/issues/462)) ([9d4c7fa](https://github.com/googleapis/gax-php/commit/9d4c7fa89445c63ec0bf4745ed9d98fd185ef51f))\n\n## [1.20.1](https://github.com/googleapis/gax-php/compare/v1.20.0...v1.20.1) (2023-05-12)\n\n\n### Bug Fixes\n\n* Default value for error message in createFromRequestException ([#463](https://github.com/googleapis/gax-php/issues/463)) ([7552d22](https://github.com/googleapis/gax-php/commit/7552d22241c2f488606e9546efdd6edea356ee9a))\n\n## [1.20.0](https://github.com/googleapis/gax-php/compare/v1.19.1...v1.20.0) (2023-05-01)\n\n\n### Features\n\n* **deps:** Support google/common-protos 4.0 ([af1db80](https://github.com/googleapis/gax-php/commit/af1db80c22307597f0dfcb9fafa86caf466588ba))\n* **deps:** Support google/grpc-gcp 0.3 ([18edc2c](https://github.com/googleapis/gax-php/commit/18edc2ce6a1a615e3ea7c00ede313c32cec4b799))\n\n## [1.19.1](https://github.com/googleapis/gax-php/compare/v1.19.0...v1.19.1) (2023-03-16)\n\n\n### Bug Fixes\n\n* Simplify ResourceHelperTrait registration ([#447](https://github.com/googleapis/gax-php/issues/447)) ([4949dc0](https://github.com/googleapis/gax-php/commit/4949dc0c4cd5e58af7933a1d2ecab90832c0b036))\n\n## [1.19.0](https://github.com/googleapis/gax-php/compare/v1.18.2...v1.19.0) (2023-01-27)\n\n\n### Features\n\n* Ensure cache is used in calls to ADC::onGCE ([#441](https://github.com/googleapis/gax-php/issues/441)) ([64a4184](https://github.com/googleapis/gax-php/commit/64a4184ab69d13104d269b15a55d4b8b2515b5a6))\n\n## [1.18.2](https://github.com/googleapis/gax-php/compare/v1.18.1...v1.18.2) (2023-01-06)\n\n\n### Bug Fixes\n\n* Ensure metadata return type is loaded into descriptor pool ([#439](https://github.com/googleapis/gax-php/issues/439)) ([a40cf8d](https://github.com/googleapis/gax-php/commit/a40cf8d87ac9aa45d18239456e2e4c96653f1a6c))\n* Implicit conversion from float to int warning ([#438](https://github.com/googleapis/gax-php/issues/438)) ([1cb62ad](https://github.com/googleapis/gax-php/commit/1cb62ad3d92ace0518017abc972e912b339f1b56))\n\n## [1.18.1](https://github.com/googleapis/gax-php/compare/v1.18.0...v1.18.1) (2022-12-06)\n\n\n### Bug Fixes\n\n* Message parameters in required querystring ([#430](https://github.com/googleapis/gax-php/issues/430)) ([77bc5e1](https://github.com/googleapis/gax-php/commit/77bc5e1cb8f347601d9237bf5164cf8b8ad8aa0f))\n\n## [1.18.0](https://github.com/googleapis/gax-php/compare/v1.17.0...v1.18.0) (2022-12-05)\n\n\n### Features\n\n* Add ResourceHelperTrait ([#428](https://github.com/googleapis/gax-php/issues/428)) ([0439efa](https://github.com/googleapis/gax-php/commit/0439efa926865be5fea25b699469b0c1f8c1c768))\n\n## [1.17.0](https://github.com/googleapis/gax-php/compare/v1.16.4...v1.17.0) (2022-09-08)\n\n\n### Features\n\n* Add startAsyncCall support ([#418](https://github.com/googleapis/gax-php/issues/418)) ([fc90693](https://github.com/googleapis/gax-php/commit/fc9069373c329183e07f8d174084c305b2308209))\n\n## [1.16.4](https://github.com/googleapis/gax-php/compare/v1.16.3...v1.16.4) (2022-08-25)\n\n\n### Bug Fixes\n\n* use interfaceOverride instead of param ([#419](https://github.com/googleapis/gax-php/issues/419)) ([9dd5bc9](https://github.com/googleapis/gax-php/commit/9dd5bc91c4becfd2a0832288ab2406c3d224618e))\n\n## [1.16.3](https://github.com/googleapis/gax-php/compare/v1.16.2...v1.16.3) (2022-08-23)\n\n\n### Bug Fixes\n\n* add eager threshold ([#416](https://github.com/googleapis/gax-php/issues/416)) ([99eb172](https://github.com/googleapis/gax-php/commit/99eb172280f301b117fde9dcc92079ca03aa28bd))\n\n## [1.16.2](https://github.com/googleapis/gax-php/compare/v1.16.1...v1.16.2) (2022-08-16)\n\n\n### Bug Fixes\n\n* use responseType for custom operations ([#413](https://github.com/googleapis/gax-php/issues/413)) ([b643adf](https://github.com/googleapis/gax-php/commit/b643adfc44dd9fe82b0919e5b34edd00c7cdbb1f))\n\n## [1.16.1](https://github.com/googleapis/gax-php/compare/v1.16.0...v1.16.1) (2022-08-11)\n\n\n### Bug Fixes\n\n* remove typehint from extended method ([#411](https://github.com/googleapis/gax-php/issues/411)) ([fb37f73](https://github.com/googleapis/gax-php/commit/fb37f7365e888465d84fca304ca83360ddbae6c3))\n\n## [1.16.0](https://github.com/googleapis/gax-php/compare/v1.15.0...v1.16.0) (2022-08-10)\n\n\n### Features\n\n* additional typehinting ([#403](https://github.com/googleapis/gax-php/issues/403)) ([6597a07](https://github.com/googleapis/gax-php/commit/6597a07019665d91e07ea0a016c7d99c8a099cd2))\n* drop support for PHP 5.6 ([#397](https://github.com/googleapis/gax-php/issues/397)) ([b888b24](https://github.com/googleapis/gax-php/commit/b888b24e0e223784e22dbbbe27fe0284cdcdfc35))\n* introduce startApiCall ([#406](https://github.com/googleapis/gax-php/issues/406)) ([1cfeb62](https://github.com/googleapis/gax-php/commit/1cfeb628070c9c6e57b2dde854b0a973a888a2bc))\n\n\n### Bug Fixes\n\n* **deps:** update dependency google/longrunning to ^0.2 ([#407](https://github.com/googleapis/gax-php/issues/407)) ([54d4f32](https://github.com/googleapis/gax-php/commit/54d4f32ba5464d1f5da33e1c99a020174cae367c))\n\n## [1.15.0](https://github.com/googleapis/gax-php/compare/v1.14.0...v1.15.0) (2022-08-02)\n\n\n### Features\n\n* move LongRunning classes to a standalone package ([#401](https://github.com/googleapis/gax-php/issues/401)) ([1747125](https://github.com/googleapis/gax-php/commit/1747125c84dcc6d42390de7e78d2e326884e1073))\n\n## [1.14.0](https://github.com/googleapis/gax-php/compare/v1.13.0...v1.14.0) (2022-07-26)\n\n\n### Features\n\n* support requesting numeric enum rest encoding ([#395](https://github.com/googleapis/gax-php/issues/395)) ([0d74a48](https://github.com/googleapis/gax-php/commit/0d74a4877c5198cfaf534c4e55d7e418b50bc6ab))\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project,\nand in the interest of fostering an open and welcoming community,\nwe pledge to respect all people who contribute through reporting issues,\nposting feature requests, updating documentation,\nsubmitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project\na harassment-free experience for everyone,\nregardless of level of experience, gender, gender identity and expression,\nsexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery\n* Personal attacks\n* Trolling or insulting/derogatory comments\n* Public or private harassment\n* Publishing other's private information,\nsuch as physical or electronic\naddresses, without explicit permission\n* Other unethical or unprofessional conduct.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct.\nBy adopting this Code of Conduct,\nproject maintainers commit themselves to fairly and consistently\napplying these principles to every aspect of managing this project.\nProject maintainers who do not follow or enforce the Code of Conduct\nmay be permanently removed from the project team.\n\nThis code of conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior\nmay be reported by opening an issue\nor contacting one or more of the project maintainers.\n\nThis Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,\navailable at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/LICENSE",
    "content": "Copyright 2016, Google Inc.\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/README.md",
    "content": "# Google API Core for PHP\n\n![Build Status](https://github.com/googleapis/gax-php/actions/workflows/tests.yml/badge.svg)\n\n-   [Documentation](https://cloud.google.com/php/docs/reference/gax/latest)\n\nGoogle API Core for PHP (gax-php) is a set of modules which aids the development\nof APIs for clients based on [gRPC][] and Google API conventions.\n\nApplication code will rarely need to use most of the classes within this library\ndirectly, but code generated automatically from the API definition files in\n[Google APIs][] can use services such as page streaming and retry to provide a\nmore convenient and idiomatic API surface to callers.\n\n[gRPC]: http://grpc.io\n[Google APIs]: https://github.com/googleapis/googleapis/\n\n## PHP Versions\n\ngax-php currently requires PHP 8.1 or higher.\n\n## Contributing\n\nContributions to this library are always welcome and highly encouraged.\n\nSee the [CONTRIBUTING][] documentation for more information on how to get\nstarted.\n\n[CONTRIBUTING]: https://github.com/googleapis/gax-php/blob/main/.github/CONTRIBUTING.md\n\n## Versioning\n\nThis library follows [Semantic Versioning][].\n\nThis library is considered GA (generally available). As such, it will not\nintroduce backwards-incompatible changes in any minor or patch releases. We will\naddress issues and requests with the highest priority.\n\n[Semantic Versioning]: http://semver.org/\n\n## Repository Structure\n\nAll code lives under the src/ directory. Handwritten code lives in the\nsrc/ApiCore directory and is contained in the `Google\\ApiCore` namespace.\n\nGenerated classes for protobuf common types and LongRunning client live under\nthe src/ directory, in the appropriate directory and namespace.\n\nCode in the metadata/ directory is provided to support generated protobuf\nclasses, and should not be used directly.\n\n## Development Set-Up\n\nThese steps describe the dependencies to install for Linux, and equivalents can\nbe found for Mac or Windows.\n\n1.  Install dependencies.\n\n    ```sh\n    > cd ~/\n    > sudo apt-get install php php-dev libcurl3-openssl-dev php-pear php-bcmath php-xml\n    > curl -sS https://getcomposer.org/installer | php\n    > sudo pecl install protobuf\n    ```\n\n2.  Set up this repo.\n\n    ```sh\n    > cd /path/to/gax-php\n    > composer install\n    ```\n\n3.  Run tests.\n\n    ```sh\n    > composer test\n    ```\n\n4.  Updating dependencies after changing `composer.json`:\n\n    ```sh\n    > composer update\n    `\n    ```\n\n5.  Formatting source:\n\n    ```sh\n    > composer cs-lint\n    > composer cs-fix\n    ```\n\n## License\n\nBSD - See [LICENSE][] for more information.\n\n[LICENSE]: https://github.com/googleapis/gax-php/blob/main/LICENSE\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/VERSION",
    "content": "1.40.0\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/composer.json",
    "content": "{\n    \"name\": \"google/gax\",\n    \"type\": \"library\",\n    \"description\": \"Google API Core for PHP\",\n    \"keywords\": [\"google\"],\n    \"homepage\": \"https://github.com/googleapis/gax-php\",\n    \"license\": \"BSD-3-Clause\",\n    \"require\": {\n        \"php\": \"^8.1\",\n        \"google/auth\": \"^1.49\",\n        \"google/grpc-gcp\": \"^0.4\",\n        \"grpc/grpc\": \"^1.13\",\n        \"google/protobuf\": \"^4.31\",\n        \"guzzlehttp/promises\": \"^2.0\",\n        \"guzzlehttp/psr7\": \"^2.0\",\n        \"google/common-protos\": \"^4.4\",\n        \"google/longrunning\": \"~0.4\",\n        \"ramsey/uuid\": \"^4.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^9.6\",\n        \"squizlabs/php_codesniffer\": \"4.*\",\n        \"phpspec/prophecy-phpunit\": \"^2.1\",\n        \"phpstan/phpstan\": \"^2.0\"\n    },\n    \"conflict\": {\n        \"ext-protobuf\": \"<4.31.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Google\\\\ApiCore\\\\\": \"src\",\n            \"GPBMetadata\\\\ApiCore\\\\\": \"metadata/ApiCore\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Google\\\\ApiCore\\\\Dev\\\\\": \"dev/src\",\n            \"Google\\\\ApiCore\\\\Tests\\\\\": \"tests\",\n            \"GPBMetadata\\\\Google\\\\\": \"metadata/Google\"\n        }\n    },\n    \"scripts\": {\n        \"regenerate-test-protos\": \"dev/sh/regenerate-test-protos.sh\",\n        \"test\": \"./vendor/bin/phpunit\",\n        \"cs-lint\": \"vendor/bin/phpcs --standard=./ruleset.xml\",\n        \"cs-fix\": \"vendor/bin/phpcbf --standard=./ruleset.xml\"\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/metadata/Google/ApiCore/Tests/Unit/Example.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: example.proto\n\nnamespace GPBMetadata\\Google\\ApiCore\\Tests\\Unit;\n\nclass Example\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(hex2bin(\n            \"0a85010a0d6578616d706c652e70726f746f1219676f6f676c652e617069\" .\n            \"636f72652e74657374732e756e6974220b0a094d794d6573736167654244\" .\n            \"ca0219476f6f676c655c417069436f72655c54657374735c556e6974e202\" .\n            \"254750424d657461646174615c476f6f676c655c417069436f72655c5465\" .\n            \"7374735c556e6974620670726f746f33\"\n        ));\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/metadata/README.md",
    "content": "# Google Protobuf Metadata Classes\n\n## WARNING!\n\nThese classes are not intended for direct use - they exist only to support\nthe generated protobuf classes in src/\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/phpstan.neon.dist",
    "content": "parameters:\n    treatPhpDocTypesAsCertain: false\n    level: 5\n    paths:\n    - src\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/phpunit.xml.dist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" bootstrap=\"tests/bootstrap.php\" xsi:noNamespaceSchemaLocation=\"https://schema.phpunit.de/9.3/phpunit.xsd\" colors=\"true\">\n  <php>\n    <env name=\"GOOGLE_APPLICATION_CREDENTIALS\" value=\"tests/Unit/testdata/json-key-file.json\"/>\n  </php>\n  <coverage>\n    <include>\n      <directory suffix=\".php\">src/ApiCore</directory>\n    </include>\n  </coverage>\n  <testsuites>\n    <testsuite name=\"unit\">\n      <directory>tests/Unit</directory>\n    </testsuite>\n  </testsuites>\n</phpunit>\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/renovate.json",
    "content": "{\n  \"extends\": [\n    \"config:base\",\n    \":preserveSemverRanges\",\n    \":disableDependencyDashboard\"\n  ]\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/AgentHeader.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * Class containing functions used to build the Agent header.\n */\nclass AgentHeader\n{\n    const AGENT_HEADER_KEY = 'x-goog-api-client';\n    const UNKNOWN_VERSION = '';\n\n    /**\n     * @param array $headerInfo {\n     *     Optional.\n     *\n     *     @type string $phpVersion the PHP version.\n     *     @type string $libName the name of the client application.\n     *     @type string $libVersion the version of the client application.\n     *     @type string $gapicVersion the code generator version of the GAPIC library.\n     *     @type string $apiCoreVersion the ApiCore version.\n     *     @type string $grpcVersion the gRPC version.\n     *     @type string $restVersion the REST transport version (typically same as the\n     *           ApiCore version).\n     *     @type string $protobufVersion the protobuf version in format 'x.y.z+a' where both 'x.y.z'\n     *           and '+a' are optional, and where 'a' is a single letter representing the\n     *           implementation type of the protobuf runtime. It is recommended to use 'c' for a C\n     *           implementation, and 'n' for the native language implementation (PHP).\n     * }\n     * @return array Agent header array\n     */\n    public static function buildAgentHeader(array $headerInfo)\n    {\n        $metricsHeaders = [];\n\n        // The ordering of the headers is important. We use the fact that $metricsHeaders is an\n        // ordered dict. The desired ordering is:\n        //      - phpVersion (gl-php/)\n        //      - clientName (e.g. gccl/)\n        //      - gapicVersion (gapic/)\n        //      - apiCoreVersion (gax/)\n        //      - grpcVersion (grpc/)\n        //      - restVersion (rest/)\n        //      - protobufVersion (pb/)\n\n        $metricsHeaders['gl-php'] = $headerInfo['phpVersion'] ?? phpversion();\n\n        if (isset($headerInfo['libName'])) {\n            $metricsHeaders[$headerInfo['libName']] =\n                $headerInfo['libVersion'] ?? self::UNKNOWN_VERSION;\n        }\n\n        $apiCoreVersion = $headerInfo['apiCoreVersion'] ?? Version::getApiCoreVersion();\n        $metricsHeaders['gapic'] = $headerInfo['gapicVersion'] ?? self::UNKNOWN_VERSION;\n        $metricsHeaders['gax'] = $apiCoreVersion;\n\n        // Context on library type identification (between gRPC+REST and REST-only):\n        // This uses the gRPC extension's version if 'grpcVersion' is not set, so we\n        // cannot use the presence of 'grpcVersion' to determine whether or not a library\n        // is gRPC+REST or REST-only. However, we cannot use the extension's presence\n        // either, since some clients may have the extension installed but opt to use a\n        // REST-only library (e.g. GCE).\n        // TODO: Should we stop sending empty gRPC headers?\n        $metricsHeaders['grpc'] = $headerInfo['grpcVersion'] ?? phpversion('grpc');\n        $metricsHeaders['rest'] = $headerInfo['restVersion'] ?? $apiCoreVersion;\n\n        // The native version is not set by default because it is complex and costly to retrieve.\n        // Users can override this default behavior if needed.\n        $metricsHeaders['pb'] = $headerInfo['protobufVersion']\n            ?? (phpversion('protobuf') ? phpversion('protobuf') . '+c' : '+n');\n\n        $metricsList = [];\n        foreach ($metricsHeaders as $key => $value) {\n            $metricsList[] = $key . '/' . $value;\n        }\n        return [self::AGENT_HEADER_KEY => [implode(' ', $metricsList)]];\n    }\n\n    /**\n     * Reads the gapic version string from a VERSION file. In order to determine the file\n     * location, this method follows this procedure:\n     * - accepts a class name $callingClass\n     * - identifies the file defining that class\n     * - searches up the directory structure for the 'src' directory\n     * - looks in the directory above 'src' for a file named VERSION\n     *\n     * @param string $callingClass\n     * @return string the gapic version\n     * @throws \\ReflectionException\n     */\n    public static function readGapicVersionFromFile(string $callingClass)\n    {\n        $callingClassFile = (new \\ReflectionClass($callingClass))->getFileName();\n        $versionFile = substr(\n            $callingClassFile,\n            0,\n            strrpos($callingClassFile, DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR)\n        ) . DIRECTORY_SEPARATOR . 'VERSION';\n\n        return Version::readVersionFile($versionFile);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ApiException.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Exception;\nuse Google\\Protobuf\\RepeatedField;\nuse Google\\Rpc\\Status;\nuse GuzzleHttp\\Exception\\RequestException;\nuse stdClass;\n\n/**\n * Represents an exception thrown during an RPC.\n */\nclass ApiException extends Exception\n{\n    private $status;\n    private $metadata;\n    private $basicMessage;\n    private $decodedMetadataErrorInfo;\n\n    /**\n     * ApiException constructor.\n     * @param string $message\n     * @param int $code\n     * @param string|null $status\n     * @param array $optionalArgs {\n     *     @type Exception|null $previous\n     *     @type array|null $metadata\n     *     @type string|null $basicMessage\n     * }\n     */\n    public function __construct(\n        string $message,\n        int $code,\n        ?string $status = null,\n        array $optionalArgs = []\n    ) {\n        $optionalArgs += [\n            'previous' => null,\n            'metadata' => null,\n            'basicMessage' => $message,\n        ];\n        parent::__construct($message, $code, $optionalArgs['previous']);\n        $this->status = $status;\n        $this->metadata = $optionalArgs['metadata'];\n        $this->basicMessage = $optionalArgs['basicMessage'];\n        if ($this->metadata) {\n            $this->decodedMetadataErrorInfo = self::decodeMetadataErrorInfo($this->metadata);\n        }\n    }\n\n    public function getStatus()\n    {\n        return $this->status;\n    }\n\n    /**\n     * Returns null if metadata does not contain error info, or returns containsErrorInfo() array\n     * if the metadata does contain error info.\n     * @param array $metadata\n     * @return array $details {\n     *     @type string|null $reason\n     *     @type string|null $domain\n     *     @type array|null $errorInfoMetadata\n     * }\n     */\n    private static function decodeMetadataErrorInfo(array $metadata)\n    {\n        $details = [];\n        // ApiExceptions created from RPC status have metadata that is an array of objects.\n        if (is_object(reset($metadata))) {\n            $metadataRpcStatus = Serializer::decodeAnyMessages($metadata);\n            $details = self::containsErrorInfo($metadataRpcStatus);\n        } elseif (self::containsErrorInfo($metadata)) {\n            $details = self::containsErrorInfo($metadata);\n        } else {\n            // For GRPC-based responses, the $metadata needs to be decoded.\n            $metadataGrpc = Serializer::decodeMetadata($metadata);\n            $details = self::containsErrorInfo($metadataGrpc);\n        }\n        return $details;\n    }\n\n    /**\n     * Returns the `reason` in ErrorInfo for an exception, or null if there is no ErrorInfo.\n     * @return string|null $reason\n     */\n    public function getReason()\n    {\n        return ($this->decodedMetadataErrorInfo) ? $this->decodedMetadataErrorInfo['reason'] : null;\n    }\n\n    /**\n     * Returns the `domain` in ErrorInfo for an exception, or null if there is no ErrorInfo.\n     * @return string|null $domain\n     */\n    public function getDomain()\n    {\n        return ($this->decodedMetadataErrorInfo) ? $this->decodedMetadataErrorInfo['domain'] : null;\n    }\n\n    /**\n     * Returns the `metadata` in ErrorInfo for an exception, or null if there is no ErrorInfo.\n     * @return array|null $errorInfoMetadata\n     */\n    public function getErrorInfoMetadata()\n    {\n        return ($this->decodedMetadataErrorInfo) ? $this->decodedMetadataErrorInfo['errorInfoMetadata'] : null;\n    }\n\n    /**\n     * @param stdClass $status\n     * @return ApiException\n     */\n    public static function createFromStdClass(stdClass $status)\n    {\n        $metadata = property_exists($status, 'metadata') ? $status->metadata : null;\n        return self::create(\n            $status->details,\n            $status->code,\n            $metadata,\n            Serializer::decodeMetadata((array) $metadata)\n        );\n    }\n\n    /**\n     * @param string $basicMessage\n     * @param int $rpcCode\n     * @param array|null $metadata\n     * @param Exception $previous\n     * @return ApiException\n     */\n    public static function createFromApiResponse(\n        $basicMessage,\n        $rpcCode,\n        ?array $metadata = null,\n        ?Exception $previous = null\n    ) {\n        return self::create(\n            $basicMessage,\n            $rpcCode,\n            $metadata,\n            Serializer::decodeMetadata((array) $metadata),\n            $previous\n        );\n    }\n\n    /**\n     * For REST-based responses, the metadata does not need to be decoded.\n     *\n     * @param string $basicMessage\n     * @param int $rpcCode\n     * @param array|null $metadata\n     * @param Exception $previous\n     * @return ApiException\n     */\n    public static function createFromRestApiResponse(\n        $basicMessage,\n        $rpcCode,\n        ?array $metadata = null,\n        ?Exception $previous = null\n    ) {\n        return self::create(\n            $basicMessage,\n            $rpcCode,\n            $metadata,\n            is_null($metadata) ? [] : $metadata,\n            $previous\n        );\n    }\n\n    /**\n     * Checks if decoded metadata includes errorInfo message.\n     * If errorInfo is set, it will always contain `reason`, `domain`, and `metadata` keys.\n     * @param array $decodedMetadata\n     * @return array {\n     *     @type string $reason\n     *     @type string $domain\n     *     @type array $errorInfoMetadata\n     * }\n     */\n    private static function containsErrorInfo(array $decodedMetadata)\n    {\n        if (empty($decodedMetadata)) {\n            return [];\n        }\n        foreach ($decodedMetadata as $value) {\n            $isErrorInfoArray = isset($value['reason']) && isset($value['domain']) && isset($value['metadata']);\n            if ($isErrorInfoArray) {\n                return [\n                    'reason' => $value['reason'],\n                    'domain' => $value['domain'],\n                    'errorInfoMetadata' => $value['metadata'],\n                ];\n            }\n        }\n        return [];\n    }\n\n    /**\n     * Construct an ApiException with a useful message, including decoded metadata.\n     * If the decoded metadata includes an errorInfo message, then the domain, reason,\n     * and metadata fields from that message are hoisted directly into the error.\n     *\n     * @param string $basicMessage\n     * @param int $rpcCode\n     * @param iterable|null $metadata\n     * @param array $decodedMetadata\n     * @param Exception|null $previous\n     * @return ApiException\n     */\n    private static function create(\n        string $basicMessage,\n        int $rpcCode,\n        $metadata,\n        array $decodedMetadata,\n        ?Exception $previous = null\n    ) {\n        $containsErrorInfo = self::containsErrorInfo($decodedMetadata);\n        $rpcStatus = ApiStatus::statusFromRpcCode($rpcCode);\n        $messageData = [\n            'message' => $basicMessage,\n            'code' => $rpcCode,\n            'status' => $rpcStatus,\n            'details' => $decodedMetadata\n        ];\n        if ($containsErrorInfo) {\n            $messageData = array_merge($containsErrorInfo, $messageData);\n        }\n\n        $message = json_encode($messageData, JSON_PRETTY_PRINT);\n\n        if ($metadata instanceof RepeatedField) {\n            $metadata = iterator_to_array($metadata);\n        }\n\n        return new ApiException($message, $rpcCode, $rpcStatus, [\n            'previous' => $previous,\n            'metadata' => $metadata,\n            'basicMessage' => $basicMessage,\n        ]);\n    }\n\n    /**\n     * @param Status $status\n     * @return ApiException\n     */\n    public static function createFromRpcStatus(Status $status)\n    {\n        return self::create(\n            $status->getMessage(),\n            $status->getCode(),\n            $status->getDetails(),\n            Serializer::decodeAnyMessages($status->getDetails())\n        );\n    }\n\n    /**\n     * Creates an ApiException from a GuzzleHttp RequestException.\n     *\n     * @param RequestException $ex\n     * @param boolean $isStream\n     * @return ApiException\n     * @throws ValidationException\n     */\n    public static function createFromRequestException(RequestException $ex, bool $isStream = false)\n    {\n        $res = $ex->getResponse();\n        $body = (string) $res->getBody();\n        $decoded = json_decode($body, true);\n\n        // A streaming response body will return one error in an array. Parse\n        // that first (and only) error message, if provided.\n        if ($isStream && isset($decoded[0])) {\n            $decoded = $decoded[0];\n        }\n\n        if (isset($decoded['error']) && $decoded['error']) {\n            $error = $decoded['error'];\n            $basicMessage = $error['message'] ?? '';\n            $code = isset($error['status'])\n                ? ApiStatus::rpcCodeFromStatus($error['status'])\n                : $ex->getCode();\n            $metadata = $error['details'] ?? null;\n            return static::createFromRestApiResponse($basicMessage, $code, $metadata);\n        }\n        // Use the RPC code instead of the HTTP Status Code.\n        $code = ApiStatus::rpcCodeFromHttpStatusCode($res->getStatusCode());\n        return static::createFromApiResponse($body, $code);\n    }\n\n    /**\n     * @return null|string\n     */\n    public function getBasicMessage()\n    {\n        return $this->basicMessage;\n    }\n\n    /**\n     * @return mixed[]\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ApiKeyHeaderCredentials.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Google\\Auth\\GetQuotaProjectInterface;\n\n/**\n * The ApiKeyHeaderCredentials object provides a wrapper around an API key.\n */\nclass ApiKeyHeaderCredentials implements HeaderCredentialsInterface, GetQuotaProjectInterface\n{\n    private string $apiKey;\n    private ?string $quotaProject;\n\n    /**\n     * ApiKeyHeaderCredentials constructor.\n     * @param string $apiKey The API key to set in the header for the request\n     * @param string|null $quotaProject The quota project associated with the API key.\n     * @throws ValidationException\n     */\n    public function __construct(string $apiKey, ?string $quotaProject = null)\n    {\n        if (empty($apiKey)) {\n            throw new ValidationException('API key cannot be empty');\n        }\n        $this->apiKey = $apiKey;\n        $this->quotaProject = $quotaProject;\n    }\n\n    /**\n     * @return string|null The quota project associated with the credentials.\n     */\n    public function getQuotaProject(): ?string\n    {\n        return $this->quotaProject;\n    }\n\n    /**\n     * @param string|null $unusedAudience audiences are not supported for API keys.\n     *\n     * @return callable|null Callable function that returns the API key header.\n     */\n    public function getAuthorizationHeaderCallback(?string $unusedAudience = null): ?callable\n    {\n        $apiKey = $this->apiKey;\n\n        // NOTE: changes to this function should be treated carefully and tested thoroughly. It will\n        // be passed into the gRPC c extension, and changes have the potential to trigger very\n        // difficult-to-diagnose segmentation faults.\n        return function () use ($apiKey) {\n            return ['x-goog-api-key' => [$apiKey]];\n        };\n    }\n\n    /**\n     * Verify that the expected universe domain matches the universe domain from the credentials.\n     *\n     * @throws ValidationException if the universe domain does not match.\n     */\n    public function checkUniverseDomain(): void\n    {\n        // This is a no-op, as API keys are not tied to a universe domain. As a result, the\n        // potential for leaking API keys to the GDU is higher, and it's recommended to specify\n        // the \"universeDomain\" option with the GAPIC client.\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ApiStatus.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Google\\Rpc\\Code;\n\nclass ApiStatus\n{\n    const OK = 'OK';\n    const CANCELLED = 'CANCELLED';\n    const UNKNOWN = 'UNKNOWN';\n    const INVALID_ARGUMENT = 'INVALID_ARGUMENT';\n    const DEADLINE_EXCEEDED = 'DEADLINE_EXCEEDED';\n    const NOT_FOUND = 'NOT_FOUND';\n    const ALREADY_EXISTS = 'ALREADY_EXISTS';\n    const PERMISSION_DENIED = 'PERMISSION_DENIED';\n    const RESOURCE_EXHAUSTED = 'RESOURCE_EXHAUSTED';\n    const FAILED_PRECONDITION = 'FAILED_PRECONDITION';\n    const ABORTED = 'ABORTED';\n    const OUT_OF_RANGE = 'OUT_OF_RANGE';\n    const UNIMPLEMENTED = 'UNIMPLEMENTED';\n    const INTERNAL = 'INTERNAL';\n    const UNAVAILABLE = 'UNAVAILABLE';\n    const DATA_LOSS = 'DATA_LOSS';\n    const UNAUTHENTICATED = 'UNAUTHENTICATED';\n\n    const UNRECOGNIZED_STATUS = 'UNRECOGNIZED_STATUS';\n    const UNRECOGNIZED_CODE = -1;\n\n    private static $apiStatusToCodeMap = [\n        ApiStatus::OK => Code::OK,\n        ApiStatus::CANCELLED => Code::CANCELLED,\n        ApiStatus::UNKNOWN => Code::UNKNOWN,\n        ApiStatus::INVALID_ARGUMENT => Code::INVALID_ARGUMENT,\n        ApiStatus::DEADLINE_EXCEEDED => Code::DEADLINE_EXCEEDED,\n        ApiStatus::NOT_FOUND => Code::NOT_FOUND,\n        ApiStatus::ALREADY_EXISTS => Code::ALREADY_EXISTS,\n        ApiStatus::PERMISSION_DENIED => Code::PERMISSION_DENIED,\n        ApiStatus::RESOURCE_EXHAUSTED => Code::RESOURCE_EXHAUSTED,\n        ApiStatus::FAILED_PRECONDITION => Code::FAILED_PRECONDITION,\n        ApiStatus::ABORTED => Code::ABORTED,\n        ApiStatus::OUT_OF_RANGE => Code::OUT_OF_RANGE,\n        ApiStatus::UNIMPLEMENTED => Code::UNIMPLEMENTED,\n        ApiStatus::INTERNAL => Code::INTERNAL,\n        ApiStatus::UNAVAILABLE => Code::UNAVAILABLE,\n        ApiStatus::DATA_LOSS => Code::DATA_LOSS,\n        ApiStatus::UNAUTHENTICATED => Code::UNAUTHENTICATED,\n    ];\n    private static $codeToApiStatusMap = [\n        Code::OK => ApiStatus::OK,\n        Code::CANCELLED => ApiStatus::CANCELLED,\n        Code::UNKNOWN => ApiStatus::UNKNOWN,\n        Code::INVALID_ARGUMENT => ApiStatus::INVALID_ARGUMENT,\n        Code::DEADLINE_EXCEEDED => ApiStatus::DEADLINE_EXCEEDED,\n        Code::NOT_FOUND => ApiStatus::NOT_FOUND,\n        Code::ALREADY_EXISTS => ApiStatus::ALREADY_EXISTS,\n        Code::PERMISSION_DENIED => ApiStatus::PERMISSION_DENIED,\n        Code::RESOURCE_EXHAUSTED => ApiStatus::RESOURCE_EXHAUSTED,\n        Code::FAILED_PRECONDITION => ApiStatus::FAILED_PRECONDITION,\n        Code::ABORTED => ApiStatus::ABORTED,\n        Code::OUT_OF_RANGE => ApiStatus::OUT_OF_RANGE,\n        Code::UNIMPLEMENTED => ApiStatus::UNIMPLEMENTED,\n        Code::INTERNAL => ApiStatus::INTERNAL,\n        Code::UNAVAILABLE => ApiStatus::UNAVAILABLE,\n        Code::DATA_LOSS => ApiStatus::DATA_LOSS,\n        Code::UNAUTHENTICATED => ApiStatus::UNAUTHENTICATED,\n    ];\n    private static $httpStatusCodeToRpcCodeMap = [\n        400 => Code::INVALID_ARGUMENT,\n        401 => Code::UNAUTHENTICATED,\n        403 => Code::PERMISSION_DENIED,\n        404 => Code::NOT_FOUND,\n        409 => Code::ABORTED,\n        416 => Code::OUT_OF_RANGE,\n        429 => Code::RESOURCE_EXHAUSTED,\n        499 => Code::CANCELLED,\n        501 => Code::UNIMPLEMENTED,\n        503 => Code::UNAVAILABLE,\n        504 => Code::DEADLINE_EXCEEDED,\n    ];\n\n    /**\n     * @param string $status\n     * @return bool\n     */\n    public static function isValidStatus(string $status)\n    {\n        return array_key_exists($status, self::$apiStatusToCodeMap);\n    }\n\n    /**\n     * @param int $code\n     * @return string\n     */\n    public static function statusFromRpcCode(int $code)\n    {\n        if (array_key_exists($code, self::$codeToApiStatusMap)) {\n            return self::$codeToApiStatusMap[$code];\n        }\n        return ApiStatus::UNRECOGNIZED_STATUS;\n    }\n\n    /**\n     * @param string $status\n     * @return int\n     */\n    public static function rpcCodeFromStatus(string $status)\n    {\n        if (array_key_exists($status, self::$apiStatusToCodeMap)) {\n            return self::$apiStatusToCodeMap[$status];\n        }\n        return ApiStatus::UNRECOGNIZED_CODE;\n    }\n\n    /**\n     * Maps HTTP status codes to Google\\Rpc\\Code codes.\n     * Some codes are left out because they map to multiple gRPC codes (e.g. 500).\n     *\n     * @param int $httpStatusCode\n     * @return int\n     */\n    public static function rpcCodeFromHttpStatusCode(int $httpStatusCode)\n    {\n        if (array_key_exists($httpStatusCode, self::$httpStatusCodeToRpcCodeMap)) {\n            return self::$httpStatusCodeToRpcCodeMap[$httpStatusCode];\n        }\n        // All 2xx\n        if ($httpStatusCode >= 200 && $httpStatusCode < 300) {\n            return Code::OK;\n        }\n        // All 4xx\n        if ($httpStatusCode >= 400 && $httpStatusCode < 500) {\n            return Code::FAILED_PRECONDITION;\n        }\n        // All 5xx\n        if ($httpStatusCode >= 500 && $httpStatusCode < 600) {\n            return Code::INTERNAL;\n        }\n        // Everything else (We cannot change this to Code::UNKNOWN because it would break BC)\n        return ApiStatus::UNRECOGNIZED_CODE;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ArrayTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * Provides basic array helper methods.\n *\n * @internal\n */\ntrait ArrayTrait\n{\n    /**\n     * Pluck a value out of an array.\n     *\n     * @param string $key\n     * @param array $arr\n     * @param bool $isRequired\n     * @return mixed|null\n     * @throws \\InvalidArgumentException\n     */\n    private function pluck(string $key, array &$arr, bool $isRequired = true)\n    {\n        if (!array_key_exists($key, $arr)) {\n            if ($isRequired) {\n                throw new \\InvalidArgumentException(\n                    \"Key $key does not exist in the provided array.\"\n                );\n            }\n\n            return null;\n        }\n\n        $value = $arr[$key];\n        unset($arr[$key]);\n        return $value;\n    }\n\n    /**\n     * Pluck a subset of an array.\n     *\n     * @param array $keys\n     * @param array $arr\n     * @return array\n     */\n    private function pluckArray(array $keys, array &$arr)\n    {\n        $values = [];\n\n        foreach ($keys as $key) {\n            if (array_key_exists($key, $arr)) {\n                $values[$key] = $this->pluck($key, $arr, false);\n            }\n        }\n\n        return $values;\n    }\n\n    /**\n     * Determine whether given array is associative.\n     *\n     * @param array $arr\n     * @return bool\n     */\n    private function isAssoc(array $arr)\n    {\n        return array_keys($arr) !== range(0, count($arr) - 1);\n    }\n\n    /**\n     * Just like array_filter(), but preserves falsey values except null.\n     *\n     * @param array $arr\n     * @return array\n     */\n    private function arrayFilterRemoveNull(array $arr)\n    {\n        return array_filter($arr, function ($element) {\n            if (!is_null($element)) {\n                return true;\n            }\n\n            return false;\n        });\n    }\n\n    /**\n     * Return a subset of an array, like pluckArray, without modifying the original array.\n     *\n     * @param array $keys\n     * @param array $arr\n     * @return array\n     */\n    private function subsetArray(array $keys, array $arr)\n    {\n        return array_intersect_key(\n            $arr,\n            array_flip($keys)\n        );\n    }\n\n    /**\n     * A method, similar to PHP's `array_merge_recursive`, with two differences.\n     *\n     * 1. Keys in $array2 take precedence over keys in $array1.\n     * 2. Non-array keys found in both inputs are not transformed into an array\n     *    and appended. Rather, the value in $array2 is used.\n     *\n     * @param array $array1\n     * @param array $array2\n     * @return array\n     */\n    private function arrayMergeRecursive(array $array1, array $array2)\n    {\n        foreach ($array2 as $key => $value) {\n            if (array_key_exists($key, $array1) && is_array($array1[$key]) && is_array($value)) {\n                $array1[$key] = ($this->isAssoc($array1[$key]) && $this->isAssoc($value))\n                    ? $this->arrayMergeRecursive($array1[$key], $value)\n                    : array_merge($array1[$key], $value);\n            } else {\n                $array1[$key] = $value;\n            }\n        }\n\n        return $array1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/BidiStream.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Google\\Auth\\Logging\\LoggingTrait;\nuse Google\\Auth\\Logging\\RpcLogEvent;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Code;\nuse Grpc\\BidiStreamingCall;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * BidiStream is the response object from a gRPC bidirectional streaming API call.\n */\nclass BidiStream\n{\n    use LoggingTrait;\n\n    private $call;\n    private $isComplete = false;\n    private $writesClosed = false;\n    private $resourcesGetMethod = null;\n    private $pendingResources = [];\n    private null|LoggerInterface $logger = null;\n\n    /**\n     * BidiStream constructor.\n     *\n     * @param BidiStreamingCall $bidiStreamingCall The gRPC bidirectional streaming call object\n     * @param array $streamingDescriptor\n     * @param null|LoggerInterface $logger\n     */\n    public function __construct(\n        BidiStreamingCall $bidiStreamingCall,\n        array $streamingDescriptor = [],\n        null|LoggerInterface $logger = null,\n    ) {\n        $this->call = $bidiStreamingCall;\n        if (array_key_exists('resourcesGetMethod', $streamingDescriptor)) {\n            $this->resourcesGetMethod = $streamingDescriptor['resourcesGetMethod'];\n        }\n        $this->logger = $logger;\n    }\n\n    /**\n     * Write request to the server.\n     *\n     * @param mixed $request The request to write\n     * @throws ValidationException\n     */\n    public function write($request)\n    {\n        if ($this->isComplete) {\n            throw new ValidationException('Cannot call write() after streaming call is complete.');\n        }\n        if ($this->writesClosed) {\n            throw new ValidationException('Cannot call write() after calling closeWrite().');\n        }\n\n        if ($this->logger && $request instanceof Message) {\n            $logEvent = new RpcLogEvent();\n\n            $logEvent->headers = null;\n            $logEvent->payload = $request->serializeToJsonString();\n            $logEvent->processId = (int) getmypid();\n            $logEvent->requestId = crc32((string) spl_object_id($this) . getmypid());\n\n            $this->logRequest($logEvent);\n        }\n\n        $this->call->write($request);\n    }\n\n    /**\n     * Write all requests in $requests.\n     *\n     * @param iterable $requests An Iterable of request objects to write to the server\n     *\n     * @throws ValidationException\n     */\n    public function writeAll($requests = [])\n    {\n        foreach ($requests as $request) {\n            $this->write($request);\n        }\n    }\n\n    /**\n     * Inform the server that no more requests will be written. The write() function cannot be\n     * called after closeWrite() is called.\n     * @throws ValidationException\n     */\n    public function closeWrite()\n    {\n        if ($this->isComplete) {\n            throw new ValidationException(\n                'Cannot call closeWrite() after streaming call is complete.'\n            );\n        }\n        if (!$this->writesClosed) {\n            $this->call->writesDone();\n            $this->writesClosed = true;\n        }\n    }\n\n    /**\n     * Read the next response from the server. Returns null if the streaming call completed\n     * successfully. Throws an ApiException if the streaming call failed.\n     *\n     * @throws ValidationException\n     * @throws ApiException\n     * @return mixed\n     */\n    public function read()\n    {\n        if ($this->isComplete) {\n            throw new ValidationException('Cannot call read() after streaming call is complete.');\n        }\n        $resourcesGetMethod = $this->resourcesGetMethod;\n        if (!is_null($resourcesGetMethod)) {\n            if (count($this->pendingResources) === 0) {\n                $response = $this->call->read();\n                if (!is_null($response)) {\n                    $pendingResources = [];\n                    foreach ($response->$resourcesGetMethod() as $resource) {\n                        $pendingResources[] = $resource;\n                    }\n                    $this->pendingResources = array_reverse($pendingResources);\n                }\n            }\n            $result = array_pop($this->pendingResources);\n        } else {\n            $result = $this->call->read();\n        }\n        if (is_null($result)) {\n            $status = $this->call->getStatus();\n            $this->isComplete = true;\n            if (!($status->code == Code::OK)) {\n                throw ApiException::createFromStdClass($status);\n            }\n        }\n\n        if ($this->logger) {\n            $responseEvent = new RpcLogEvent();\n\n            $responseEvent->headers = $this->call->getMetadata();\n            $responseEvent->status = $status->code ?? null;\n            $responseEvent->processId = (int) getmypid();\n            $responseEvent->requestId = crc32((string) spl_object_id($this) . getmypid());\n\n            if ($result instanceof Message) {\n                $responseEvent->payload = $result->serializeToJsonString();\n            }\n\n            $this->logResponse($responseEvent);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Call closeWrite(), and read all responses from the server, until the streaming call is\n     * completed. Throws an ApiException if the streaming call failed.\n     *\n     * @throws ValidationException\n     * @throws ApiException\n     * @return \\Generator|mixed[]\n     */\n    public function closeWriteAndReadAll()\n    {\n        $this->closeWrite();\n        $response = $this->read();\n        while (!is_null($response)) {\n            yield $response;\n            $response = $this->read();\n        }\n    }\n\n    /**\n     * Return the underlying gRPC call object\n     *\n     * @return \\Grpc\\BidiStreamingCall|mixed\n     */\n    public function getBidiStreamingCall()\n    {\n        return $this->call;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Call.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse Google\\Protobuf\\Internal\\Message;\n\n/**\n * Contains information necessary to manage a network request.\n */\nclass Call\n{\n    const UNARY_CALL = 0;\n    const BIDI_STREAMING_CALL = 1;\n    const CLIENT_STREAMING_CALL = 2;\n    const SERVER_STREAMING_CALL = 3;\n    const LONGRUNNING_CALL = 4;\n    const PAGINATED_CALL = 5;\n\n    private $method;\n    private $callType;\n    private $decodeType;\n    private $message;\n    private $descriptor;\n\n    /**\n     * @param string $method\n     * @param string $decodeType\n     * @param mixed|Message $message\n     * @param array|null $descriptor\n     * @param int $callType\n     */\n    public function __construct(\n        string $method,\n        ?string $decodeType = null,\n        $message = null,\n        $descriptor = [],\n        int $callType = Call::UNARY_CALL\n    ) {\n        $this->method = $method;\n        $this->decodeType = $decodeType;\n        $this->message = $message;\n        $this->descriptor = $descriptor;\n        $this->callType = $callType;\n    }\n\n    /**\n     * @return string\n     */\n    public function getMethod()\n    {\n        return $this->method;\n    }\n\n    /**\n     * @return int\n     */\n    public function getCallType()\n    {\n        return $this->callType;\n    }\n\n    /**\n     * @return string\n     */\n    public function getDecodeType()\n    {\n        return $this->decodeType;\n    }\n\n    /**\n     * @return mixed|Message\n     */\n    public function getMessage()\n    {\n        return $this->message;\n    }\n\n    /**\n     * @return array|null\n     */\n    public function getDescriptor()\n    {\n        return $this->descriptor;\n    }\n\n    /**\n     * @param mixed|Message $message\n     * @return Call\n     */\n    public function withMessage($message)\n    {\n        // @phpstan-ignore-next-line\n        return new static(\n            $this->method,\n            $this->decodeType,\n            $message,\n            $this->descriptor,\n            $this->callType\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ClientOptionsTrait.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse Google\\ApiCore\\Options\\ClientOptions;\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Grpc\\Gcp\\ApiConfig;\nuse Grpc\\Gcp\\Config;\nuse Psr\\Log\\LoggerInterface;\nuse Psr\\Log\\LogLevel;\n\n/**\n * Common functions used to work with various clients.\n *\n * @internal\n */\ntrait ClientOptionsTrait\n{\n    use ArrayTrait;\n\n    private static $gapicVersionFromFile;\n\n    private static function getGapicVersion(array $options)\n    {\n        if (isset($options['libVersion'])) {\n            return $options['libVersion'];\n        }\n        if (!isset(self::$gapicVersionFromFile)) {\n            self::$gapicVersionFromFile = AgentHeader::readGapicVersionFromFile(__CLASS__);\n        }\n        return self::$gapicVersionFromFile;\n    }\n\n    private static function initGrpcGcpConfig(string $hostName, string $confPath)\n    {\n        $apiConfig = new ApiConfig();\n        $apiConfig->mergeFromJsonString(file_get_contents($confPath));\n        $config = new Config($hostName, $apiConfig);\n        return $config;\n    }\n\n    /**\n     * Get default options. This function should be \"overridden\" by clients using late static\n     * binding to provide default options to the client.\n     *\n     * @return array\n     * @access private\n     */\n    private static function getClientDefaults()\n    {\n        return [];\n    }\n\n    /**\n     * Resolve client options based on the client's default\n     * ({@see ClientOptionsTrait::getClientDefault}) and the default for all\n     * Google APIs.\n     *\n     * 1. Set default client option values\n     * 2. Set default logger (and log user-supplied configuration options)\n     * 3. Set default transport configuration\n     * 4. Call \"modifyClientOptions\" (for backwards compatibility)\n     * 5. Use \"defaultScopes\" when custom endpoint is supplied\n     * 6. Load mTLS from the environment if configured\n     * 7. Resolve endpoint based on universe domain template when possible\n     * 8. Load sysvshm grpc config when possible\n     */\n    private function buildClientOptions(array|ClientOptions $options)\n    {\n        if ($options instanceof ClientOptions) {\n            $options = $options->toArray();\n        }\n\n        // Build $defaultOptions starting from top level\n        // variables, then going into deeper nesting, so that\n        // we will not encounter missing keys\n        $defaultOptions = self::getClientDefaults();\n        $defaultOptions += [\n            'disableRetries' => false,\n            'credentials' => null,\n            'credentialsConfig' => [],\n            'transport' => null,\n            'transportConfig' => [],\n            'gapicVersion' => self::getGapicVersion($options),\n            'libName' => null,\n            'libVersion' => null,\n            'apiEndpoint' => null,\n            'clientCertSource' => null,\n            'universeDomain' => null,\n            'logger' => null,\n        ];\n\n        $supportedTransports = $this->supportedTransports();\n        foreach ($supportedTransports as $transportName) {\n            if (!array_key_exists($transportName, $defaultOptions['transportConfig'])) {\n                $defaultOptions['transportConfig'][$transportName] = [];\n            }\n        }\n        if (in_array('grpc', $supportedTransports)) {\n            $defaultOptions['transportConfig']['grpc'] = [\n                'stubOpts' => ['grpc.service_config_disable_resolution' => 1]\n            ];\n        }\n\n        // Keep track of the API Endpoint\n        $apiEndpoint = $options['apiEndpoint'] ?? null;\n\n        // Keep track of the original user supplied options for logging the configuration\n        $clientSuppliedOptions = $options;\n\n        // Merge defaults into $options starting from top level\n        // variables, then going into deeper nesting, so that\n        // we will not encounter missing keys\n        $options += $defaultOptions;\n\n        // If logger is explicitly set to false, logging is disabled\n        if (is_null($options['logger'])) {\n            $options['logger'] = ApplicationDefaultCredentials::getDefaultLogger();\n        }\n\n        if (\n            $options['logger'] !== null\n            && $options['logger'] !== false\n            && !$options['logger'] instanceof LoggerInterface\n        ) {\n            throw new ValidationException(\n                'The \"logger\" option in the options array should be PSR-3 LoggerInterface compatible'\n            );\n        }\n\n        // Log the user supplied configuration.\n        $this->logConfiguration($options['logger'], $clientSuppliedOptions);\n\n        if (isset($options['logger'])) {\n            $options['credentialsConfig']['authHttpHandler'] = HttpHandlerFactory::build(\n                logger: $options['logger']\n            );\n        }\n\n        $options['credentialsConfig'] += $defaultOptions['credentialsConfig'];\n        $options['transportConfig'] += $defaultOptions['transportConfig'];  // @phpstan-ignore-line\n        if (isset($options['transportConfig']['grpc'])) {\n            $options['transportConfig']['grpc'] += $defaultOptions['transportConfig']['grpc'];\n            $options['transportConfig']['grpc']['stubOpts'] += $defaultOptions['transportConfig']['grpc']['stubOpts'];\n            $options['transportConfig']['grpc']['logger'] = $options['logger'] ?? null;\n        }\n        if (isset($options['transportConfig']['rest'])) {\n            $options['transportConfig']['rest'] += $defaultOptions['transportConfig']['rest'];\n            $options['transportConfig']['rest']['logger'] = $options['logger'] ?? null;\n        }\n        if (isset($options['transportConfig']['grpc-fallback'])) {\n            $options['transportConfig']['grpc-fallback']['logger'] = $options['logger'] ?? null;\n        }\n\n        // These calls do not apply to \"New Surface\" clients.\n        if ($this->isBackwardsCompatibilityMode()) {\n            $preModifiedOptions = $options;\n            $this->modifyClientOptions($options);\n            // NOTE: this is required to ensure backwards compatiblity with $options['apiEndpoint']\n            if ($options['apiEndpoint'] !== $preModifiedOptions['apiEndpoint']) {\n                $apiEndpoint = $options['apiEndpoint'];\n            }\n\n            // serviceAddress is now deprecated and acts as an alias for apiEndpoint\n            if (isset($options['serviceAddress'])) {\n                $apiEndpoint = $this->pluck('serviceAddress', $options, false);\n            }\n        } else {\n            // Ads is using this method in their new surface clients, so we need to call it.\n            // However, this method is not used anywhere else for the new surface clients\n            // @TODO: Remove this in GAX V2\n            $this->modifyClientOptions($options);\n        }\n        // If an API endpoint is different form the default, ensure the \"audience\" does not conflict\n        // with the custom endpoint by setting \"user defined\" scopes.\n        if ($apiEndpoint\n            && $apiEndpoint != $defaultOptions['apiEndpoint']\n            && empty($options['credentialsConfig']['scopes'])\n            && !empty($options['credentialsConfig']['defaultScopes'])\n        ) {\n            $options['credentialsConfig']['scopes'] = $options['credentialsConfig']['defaultScopes'];\n        }\n\n        // mTLS: detect and load the default clientCertSource if the environment variable\n        // \"GOOGLE_API_USE_CLIENT_CERTIFICATE\" is true, and the cert source is available\n        if (empty($options['clientCertSource']) && CredentialsLoader::shouldLoadClientCertSource()) {\n            if ($defaultCertSource = CredentialsLoader::getDefaultClientCertSource()) {\n                $options['clientCertSource'] = function () use ($defaultCertSource) {\n                    $cert = call_user_func($defaultCertSource);\n\n                    // the key and the cert are returned in one string\n                    return [$cert, $cert];\n                };\n            }\n        }\n\n        // mTLS: If no apiEndpoint has been supplied by the user, and either\n        // GOOGLE_API_USE_MTLS_ENDPOINT tells us to, or mTLS is available, use the mTLS endpoint.\n        if (is_null($apiEndpoint) && $this->shouldUseMtlsEndpoint($options)) {\n            $apiEndpoint = self::determineMtlsEndpoint($options['apiEndpoint']);\n        }\n\n        // If the user has not supplied a universe domain, use the environment variable if set.\n        // Otherwise, use the default (\"googleapis.com\").\n        $options['universeDomain'] ??= getenv('GOOGLE_CLOUD_UNIVERSE_DOMAIN')\n            ?: GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN;\n\n        // mTLS: It is not valid to configure mTLS outside of \"googleapis.com\" (yet)\n        if (isset($options['clientCertSource'])\n            && $options['universeDomain'] !== GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN\n        ) {\n            throw new ValidationException(\n                'mTLS is not supported outside the \"googleapis.com\" universe'\n            );\n        }\n\n        if (is_null($apiEndpoint)) {\n            if (defined('self::SERVICE_ADDRESS_TEMPLATE')) {\n                // Derive the endpoint from the service address template and the universe domain\n                $apiEndpoint = str_replace(\n                    'UNIVERSE_DOMAIN',\n                    $options['universeDomain'],\n                    self::SERVICE_ADDRESS_TEMPLATE\n                );\n            } else {\n                // For older clients, the service address template does not exist. Use the default\n                // endpoint instead.\n                $apiEndpoint = $defaultOptions['apiEndpoint'];\n            }\n        }\n\n        if (extension_loaded('sysvshm')\n            && isset($options['gcpApiConfigPath'])\n            && file_exists($options['gcpApiConfigPath'])\n            && !empty($apiEndpoint)\n        ) {\n            $grpcGcpConfig = self::initGrpcGcpConfig(\n                $apiEndpoint,\n                $options['gcpApiConfigPath']\n            );\n\n            if (!array_key_exists('stubOpts', $options['transportConfig']['grpc'])) {\n                $options['transportConfig']['grpc']['stubOpts'] = [];\n            }\n\n            $options['transportConfig']['grpc']['stubOpts'] += [\n                'grpc_call_invoker' => $grpcGcpConfig->callInvoker()\n            ];\n        }\n\n        $options['apiEndpoint'] = $apiEndpoint;\n\n        return $options;\n    }\n\n    private function shouldUseMtlsEndpoint(array $options)\n    {\n        $mtlsEndpointEnvVar = getenv('GOOGLE_API_USE_MTLS_ENDPOINT');\n        if ('always' === $mtlsEndpointEnvVar) {\n            return true;\n        }\n        if ('never' === $mtlsEndpointEnvVar) {\n            return false;\n        }\n        // For all other cases, assume \"auto\" and return true if clientCertSource exists\n        return !empty($options['clientCertSource']);\n    }\n\n    private static function determineMtlsEndpoint(string $apiEndpoint)\n    {\n        $parts = explode('.', $apiEndpoint);\n        if (count($parts) < 3) {\n            return $apiEndpoint; // invalid endpoint!\n        }\n        return sprintf('%s.mtls.%s', array_shift($parts), implode('.', $parts));\n    }\n\n    /**\n     * @param mixed $credentials\n     * @param array $credentialsConfig\n     * @return CredentialsWrapper\n     * @throws ValidationException\n     */\n    private function createCredentialsWrapper($credentials, array $credentialsConfig, string $universeDomain)\n    {\n        if (is_null($credentials)) {\n            // If the user has explicitly set the apiKey option, use Api Key credentials\n            return CredentialsWrapper::build($credentialsConfig, $universeDomain);\n        }\n\n        if (is_string($credentials) || is_array($credentials)) {\n            return CredentialsWrapper::build(['keyFile' => $credentials] + $credentialsConfig, $universeDomain);\n        }\n\n        if ($credentials instanceof FetchAuthTokenInterface) {\n            $authHttpHandler = $credentialsConfig['authHttpHandler'] ?? null;\n            return new CredentialsWrapper($credentials, $authHttpHandler, $universeDomain);\n        }\n\n        if ($credentials instanceof CredentialsWrapper) {\n            return $credentials;\n        }\n\n        throw new ValidationException(sprintf(\n            'Unexpected value in $auth option, got: %s',\n            print_r($credentials, true)\n        ));\n    }\n\n    /**\n     * This defaults to all three transports, which One-Platform supports.\n     * Discovery clients should define this function and only return ['rest'].\n     */\n    private static function supportedTransports()\n    {\n        return ['grpc', 'grpc-fallback', 'rest'];\n    }\n\n    // Gapic Client Extension Points\n    // The methods below provide extension points that can be used to customize client\n    // functionality. These extension points are currently considered\n    // private and may change at any time.\n\n    /**\n     * Modify options passed to the client before calling setClientOptions.\n     *\n     * @param array $options\n     * @access private\n     * @internal\n     */\n    protected function modifyClientOptions(array &$options)\n    {\n        // Do nothing - this method exists to allow option modification by partial veneers.\n    }\n\n    /**\n     * @internal\n     */\n    private function isBackwardsCompatibilityMode(): bool\n    {\n        return false;\n    }\n\n    /**\n     * @param null|false|LoggerInterface $logger\n     * @param string $options\n     */\n    private function logConfiguration(null|false|LoggerInterface $logger, array $options): void\n    {\n        if (!$logger) {\n            return;\n        }\n\n        $configurationLog = [\n            'timestamp' => date(DATE_RFC3339),\n            'severity' => strtoupper(LogLevel::DEBUG),\n            'processId' => getmypid(),\n            'jsonPayload' => [\n                'serviceName' => self::SERVICE_NAME, // @phpstan-ignore-line\n                'clientConfiguration' => $options,\n            ]\n        ];\n\n        $logger->debug(json_encode($configurationLog));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ClientStream.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Google\\Auth\\Logging\\LoggingTrait;\nuse Google\\Auth\\Logging\\RpcLogEvent;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Code;\nuse Grpc\\ClientStreamingCall;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * ClientStream is the response object from a gRPC client streaming API call.\n */\nclass ClientStream\n{\n    use LoggingTrait;\n\n    private $call;\n    private null|LoggerInterface $logger;\n\n    /**\n     * ClientStream constructor.\n     *\n     * @param ClientStreamingCall $clientStreamingCall The gRPC client streaming call object\n     * @param array $streamingDescriptor\n     * @param null|LoggerInterface $logger A PSR-3 compliant logger.\n     */\n    public function __construct(// @phpstan-ignore-line\n        ClientStreamingCall $clientStreamingCall,\n        array $streamingDescriptor = [],\n        null|LoggerInterface $logger = null,\n    ) {\n        $this->call = $clientStreamingCall;\n        $this->logger = $logger;\n    }\n\n    /**\n     * Write request to the server.\n     *\n     * @param mixed $request The request to write\n     */\n    public function write($request)\n    {\n        // In some cases, $request can be a string\n        if ($this->logger && $request instanceof Message) {\n            $requestEvent = new RpcLogEvent();\n\n            $requestEvent->payload = $request->serializeToJsonString();\n            $requestEvent->processId = (int) getmypid();\n            $requestEvent->requestId = crc32((string) spl_object_id($this) . getmypid());\n\n            $this->logRequest($requestEvent);\n        }\n\n        $this->call->write($request);\n    }\n\n    /**\n     * Read the response from the server, completing the streaming call.\n     *\n     * @throws ApiException\n     * @return mixed The response object from the server\n     */\n    public function readResponse()\n    {\n        list($response, $status) = $this->call->wait();\n        if ($status->code == Code::OK) {\n            if ($this->logger) {\n                $responseEvent = new RpcLogEvent();\n\n                $responseEvent->headers = $status->metadata;\n                $responseEvent->status = $status->code;\n                $responseEvent->processId = (int) getmypid();\n                $responseEvent->requestId = crc32((string) spl_object_id($this) . getmypid());\n\n                if ($response instanceof Message) {\n                    $response->serializeToJsonString();\n                }\n\n                $this->logResponse($responseEvent);\n            }\n\n            return $response;\n        } else {\n            throw ApiException::createFromStdClass($status);\n        }\n    }\n\n    /**\n     * Write all data in $dataArray and read the response from the server, completing the streaming\n     * call.\n     *\n     * @param mixed[] $requests An iterator of request objects to write to the server\n     * @return mixed The response object from the server\n     */\n    public function writeAllAndReadResponse(array $requests)\n    {\n        foreach ($requests as $request) {\n            $this->write($request);\n        }\n        return $this->readResponse();\n    }\n\n    /**\n     * Return the underlying gRPC call object\n     *\n     * @return \\Grpc\\ClientStreamingCall|mixed\n     */\n    public function getClientStreamingCall()\n    {\n        return $this->call;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/CredentialsWrapper.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse DomainException;\nuse Exception;\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Google\\Auth\\Cache\\MemoryCacheItemPool;\nuse Google\\Auth\\Credentials\\GCECredentials;\nuse Google\\Auth\\Credentials\\ServiceAccountCredentials;\nuse Google\\Auth\\CredentialsLoader;\nuse Google\\Auth\\FetchAuthTokenCache;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\Auth\\GetQuotaProjectInterface;\nuse Google\\Auth\\GetUniverseDomainInterface;\nuse Google\\Auth\\ProjectIdProviderInterface;\nuse Google\\Auth\\UpdateMetadataInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * The CredentialsWrapper object provides a wrapper around a FetchAuthTokenInterface.\n */\nclass CredentialsWrapper implements HeaderCredentialsInterface, ProjectIdProviderInterface\n{\n    use ValidationTrait;\n\n    /** @var FetchAuthTokenInterface $credentialsFetcher */\n    private ?FetchAuthTokenInterface $credentialsFetcher = null;\n    /** @var callable $authHttpHandle */\n    private $authHttpHandler;\n\n    private string $universeDomain;\n    private bool $hasCheckedUniverse = false;\n\n    /** @var int */\n    private static int $eagerRefreshThresholdSeconds = 10;\n\n    /**\n     * CredentialsWrapper constructor.\n     * @param FetchAuthTokenInterface $credentialsFetcher A credentials loader\n     *        used to fetch access tokens.\n     * @param callable $authHttpHandler A handler used to deliver PSR-7 requests\n     *        specifically for authentication. Should match a signature of\n     *        `function (RequestInterface $request, array $options) : ResponseInterface`.\n     * @throws ValidationException\n     */\n    public function __construct(\n        FetchAuthTokenInterface $credentialsFetcher,\n        ?callable $authHttpHandler = null,\n        string $universeDomain = GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN\n    ) {\n        $this->credentialsFetcher = $credentialsFetcher;\n        $this->authHttpHandler = $authHttpHandler;\n        if (empty($universeDomain)) {\n            throw new ValidationException('The universe domain cannot be empty');\n        }\n        $this->universeDomain = $universeDomain;\n    }\n\n    /**\n     * Factory method to create a CredentialsWrapper from an array of options.\n     *\n     * @param array $args {\n     *     An array of optional arguments.\n     *\n     *     @type string|array $keyFile\n     *           Credentials to be used. Accepts either a path to a credentials file, or a decoded\n     *           credentials file as a PHP array. If this is not specified, application default\n     *           credentials will be used.\n     *     @type string[] $scopes\n     *           A string array of scopes to use when acquiring credentials.\n     *     @type callable $authHttpHandler\n     *           A handler used to deliver PSR-7 requests specifically\n     *           for authentication. Should match a signature of\n     *           `function (RequestInterface $request, array $options) : ResponseInterface`.\n     *     @type bool $enableCaching\n     *           Enable caching of access tokens. Defaults to true.\n     *     @type CacheItemPoolInterface $authCache\n     *           A cache for storing access tokens. Defaults to a simple in memory implementation.\n     *     @type array $authCacheOptions\n     *           Cache configuration options.\n     *     @type string $quotaProject\n     *           Specifies a user project to bill for access charges associated with the request.\n     *     @type string[] $defaultScopes\n     *           A string array of default scopes to use when acquiring\n     *           credentials.\n     *     @type bool $useJwtAccessWithScope\n     *           Ensures service account credentials use JWT Access (also known as self-signed\n     *           JWTs), even when user-defined scopes are supplied.\n     * }\n     * @param string $universeDomain The expected universe of the credentials. Defaults to\n     *                               \"googleapis.com\"\n     * @return CredentialsWrapper\n     * @throws ValidationException\n     */\n    public static function build(\n        array $args = [],\n        string $universeDomain = GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN\n    ) {\n        $args += [\n            'keyFile'           => null,\n            'scopes'            => null,\n            'authHttpHandler'   => null,\n            'enableCaching'     => true,\n            'authCache'         => null,\n            'authCacheOptions'  => [],\n            'quotaProject'      => null,\n            'defaultScopes'     => null,\n            'useJwtAccessWithScope' => true,\n        ];\n\n        $keyFile = $args['keyFile'];\n\n        if (is_null($keyFile)) {\n            $loader = self::buildApplicationDefaultCredentials(\n                $args['scopes'],\n                $args['authHttpHandler'],\n                $args['authCacheOptions'],\n                $args['authCache'],\n                $args['quotaProject'],\n                $args['defaultScopes']\n            );\n            if ($loader instanceof FetchAuthTokenCache) {\n                $loader = $loader->getFetcher();\n            }\n        } else {\n            if (is_string($keyFile)) {\n                if (!file_exists($keyFile)) {\n                    throw new ValidationException(\"Could not find keyfile: $keyFile\");\n                }\n                $keyFile = json_decode(file_get_contents($keyFile), true);\n            }\n\n            if (isset($args['quotaProject'])) {\n                $keyFile['quota_project_id'] = $args['quotaProject'];\n            }\n\n            $loader = CredentialsLoader::makeCredentials(\n                $args['scopes'],\n                $keyFile,\n                $args['defaultScopes']\n            );\n        }\n\n        if ($loader instanceof ServiceAccountCredentials && $args['useJwtAccessWithScope']) {\n            // Ensures the ServiceAccountCredentials uses JWT Access, also known\n            // as self-signed JWTs, even when user-defined scopes are supplied.\n            $loader->useJwtAccessWithScope();\n        }\n\n        if ($args['enableCaching']) {\n            $authCache = $args['authCache'] ?: new MemoryCacheItemPool();\n            $loader = new FetchAuthTokenCache(\n                $loader,\n                $args['authCacheOptions'],\n                $authCache\n            );\n        }\n\n        return new CredentialsWrapper($loader, $args['authHttpHandler'], $universeDomain);\n    }\n\n    /**\n     * @return string|null The quota project associated with the credentials.\n     */\n    public function getQuotaProject(): ?string\n    {\n        if ($this->credentialsFetcher instanceof GetQuotaProjectInterface) {\n            return $this->credentialsFetcher->getQuotaProject();\n        }\n        return null;\n    }\n\n    public function getProjectId(?callable $httpHandler = null): ?string\n    {\n        // Ensure that FetchAuthTokenCache does not throw an exception\n        if ($this->credentialsFetcher instanceof FetchAuthTokenCache\n            && !$this->credentialsFetcher->getFetcher() instanceof ProjectIdProviderInterface) {\n            return null;\n        }\n\n        if ($this->credentialsFetcher instanceof ProjectIdProviderInterface) {\n            return $this->credentialsFetcher->getProjectId($httpHandler);\n        }\n        return null;\n    }\n\n    /**\n     * @deprecated\n     * @return string Bearer string containing access token.\n     */\n    public function getBearerString()\n    {\n        $token = $this->credentialsFetcher->getLastReceivedToken();\n        if (self::isExpired($token)) {\n            $this->checkUniverseDomain();\n\n            $token = $this->credentialsFetcher->fetchAuthToken($this->authHttpHandler);\n            if (!self::isValid($token)) {\n                return '';\n            }\n        }\n        return empty($token['access_token']) ? '' : 'Bearer ' . $token['access_token'];\n    }\n\n    /**\n     * @param string $audience optional audience for self-signed JWTs.\n     * @return callable Callable function that returns an authorization header.\n     */\n    public function getAuthorizationHeaderCallback($audience = null): ?callable\n    {\n        // NOTE: changes to this function should be treated carefully and tested thoroughly. It will\n        // be passed into the gRPC c extension, and changes have the potential to trigger very\n        // difficult-to-diagnose segmentation faults.\n        return function () use ($audience) {\n            $token = $this->credentialsFetcher->getLastReceivedToken();\n            if (self::isExpired($token)) {\n                $this->checkUniverseDomain();\n\n                // Call updateMetadata to take advantage of self-signed JWTs\n                if ($this->credentialsFetcher instanceof UpdateMetadataInterface) {\n                    return $this->credentialsFetcher->updateMetadata([], $audience, $this->authHttpHandler);\n                }\n\n                // In case a custom fetcher is provided (unlikely) which doesn't\n                // implement UpdateMetadataInterface\n                $token = $this->credentialsFetcher->fetchAuthToken($this->authHttpHandler);\n                if (!self::isValid($token)) {\n                    return [];\n                }\n            }\n            $tokenString = $token['access_token'];\n            if (!empty($tokenString)) {\n                return ['authorization' => [\"Bearer $tokenString\"]];\n            }\n            return [];\n        };\n    }\n\n    /**\n     * Verify that the expected universe domain matches the universe domain from the credentials.\n     *\n     * @throws ValidationException if the universe domain does not match.\n     */\n    public function checkUniverseDomain(): void\n    {\n        if (false === $this->hasCheckedUniverse && $this->shouldCheckUniverseDomain()) {\n            $credentialsUniverse = $this->credentialsFetcher instanceof GetUniverseDomainInterface\n                ? $this->credentialsFetcher->getUniverseDomain()\n                : GetUniverseDomainInterface::DEFAULT_UNIVERSE_DOMAIN;\n            if ($credentialsUniverse !== $this->universeDomain) {\n                throw new ValidationException(sprintf(\n                    'The configured universe domain (%s) does not match the credential universe domain (%s)',\n                    $this->universeDomain,\n                    $credentialsUniverse\n                ));\n            }\n            $this->hasCheckedUniverse = true;\n        }\n    }\n\n    /**\n     * Skip universe domain check for Metadata server (e.g. GCE) credentials.\n     *\n     * @return bool\n     */\n    private function shouldCheckUniverseDomain(): bool\n    {\n        $fetcher = $this->credentialsFetcher instanceof FetchAuthTokenCache\n            ? $this->credentialsFetcher->getFetcher()\n            : $this->credentialsFetcher;\n\n        if ($fetcher instanceof GCECredentials) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * @param array $scopes\n     * @param callable $authHttpHandler\n     * @param array $authCacheOptions\n     * @param CacheItemPoolInterface $authCache\n     * @param string $quotaProject\n     * @param array $defaultScopes\n     * @return FetchAuthTokenInterface\n     * @throws ValidationException\n     */\n    private static function buildApplicationDefaultCredentials(\n        ?array $scopes = null,\n        ?callable $authHttpHandler = null,\n        ?array $authCacheOptions = null,\n        ?CacheItemPoolInterface $authCache = null,\n        $quotaProject = null,\n        ?array $defaultScopes = null\n    ) {\n        try {\n            return ApplicationDefaultCredentials::getCredentials(\n                $scopes,\n                $authHttpHandler,\n                $authCacheOptions,\n                $authCache,\n                $quotaProject,\n                $defaultScopes\n            );\n        } catch (DomainException $ex) {\n            throw new ValidationException('Could not construct ApplicationDefaultCredentials', $ex->getCode(), $ex);\n        }\n    }\n\n    /**\n     * @param mixed $token\n     */\n    private static function isValid($token)\n    {\n        return is_array($token)\n            && array_key_exists('access_token', $token);\n    }\n\n    /**\n     * @param mixed $token\n     */\n    private static function isExpired($token)\n    {\n        return !(self::isValid($token)\n            && array_key_exists('expires_at', $token)\n            && $token['expires_at'] > time() + self::$eagerRefreshThresholdSeconds);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/FixedSizeCollection.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Generator;\nuse InvalidArgumentException;\nuse IteratorAggregate;\nuse LengthException;\n\n/**\n * A collection of elements retrieved using one or more API calls. The\n * collection will attempt to retrieve a fixed number of elements, and\n * will make API calls until that fixed number is reached, or there\n * are no more elements to retrieve.\n */\nclass FixedSizeCollection implements IteratorAggregate\n{\n    private $collectionSize;\n    private $pageList;\n\n    /**\n     * FixedSizeCollection constructor.\n     * @param Page $initialPage\n     * @param int $collectionSize\n     */\n    public function __construct(Page $initialPage, int $collectionSize)\n    {\n        if ($collectionSize <= 0) {\n            throw new InvalidArgumentException(\n                \"collectionSize must be > 0. collectionSize: $collectionSize\"\n            );\n        }\n        if ($collectionSize < $initialPage->getPageElementCount()) {\n            $ipc = $initialPage->getPageElementCount();\n            throw new InvalidArgumentException(\n                'collectionSize must be greater than or equal to the number of ' .\n                \"elements in initialPage. collectionSize: $collectionSize, \" .\n                \"initialPage size: $ipc\"\n            );\n        }\n        $this->collectionSize = $collectionSize;\n\n        $this->pageList = FixedSizeCollection::createPageArray($initialPage, $collectionSize);\n    }\n\n    /**\n     * Returns the number of elements in the collection. This will be\n     * equal to the collectionSize parameter used at construction\n     * unless there are no elements remaining to be retrieved.\n     *\n     * @return int\n     */\n    public function getCollectionSize()\n    {\n        $size = 0;\n        foreach ($this->pageList as $page) {\n            $size += $page->getPageElementCount();\n        }\n        return $size;\n    }\n\n    /**\n     * Returns true if there are more elements that can be retrieved\n     * from the API.\n     *\n     * @return bool\n     */\n    public function hasNextCollection()\n    {\n        return $this->getLastPage()->hasNextPage();\n    }\n\n    /**\n     * Returns a page token that can be passed into the API list\n     * method to retrieve additional elements.\n     *\n     * @return string\n     */\n    public function getNextPageToken()\n    {\n        return $this->getLastPage()->getNextPageToken();\n    }\n\n    /**\n     * Retrieves the next FixedSizeCollection using one or more API calls.\n     *\n     * @return FixedSizeCollection\n     */\n    public function getNextCollection()\n    {\n        $lastPage = $this->getLastPage();\n        $nextPage = $lastPage->getNextPage($this->collectionSize);\n        return new FixedSizeCollection($nextPage, $this->collectionSize);\n    }\n\n    /**\n     * Returns an iterator over the elements of the collection.\n     *\n     * @return Generator\n     */\n    #[\\ReturnTypeWillChange]\n    public function getIterator()\n    {\n        foreach ($this->pageList as $page) {\n            foreach ($page as $element) {\n                yield $element;\n            }\n        }\n    }\n\n    /**\n     * Returns an iterator over FixedSizeCollections, starting with this\n     * and making API calls as required until all of the elements have\n     * been retrieved.\n     *\n     * @return Generator|FixedSizeCollection[]\n     */\n    public function iterateCollections()\n    {\n        $currentCollection = $this;\n        yield $this;\n        while ($currentCollection->hasNextCollection()) {\n            $currentCollection = $currentCollection->getNextCollection();\n            yield $currentCollection;\n        }\n    }\n\n    private function getLastPage()\n    {\n        $pageList = $this->pageList;\n        // Get last element in array...\n        $lastPage = end($pageList);\n        reset($pageList);\n        return $lastPage;\n    }\n\n    /**\n     * @param Page $initialPage\n     * @param int $collectionSize\n     * @return Page[]\n     */\n    private static function createPageArray(Page $initialPage, int $collectionSize)\n    {\n        $pageList = [$initialPage];\n        $currentPage = $initialPage;\n        $itemCount = $currentPage->getPageElementCount();\n        while ($itemCount < $collectionSize && $currentPage->hasNextPage()) {\n            $remainingCount = $collectionSize - $itemCount;\n            $currentPage = $currentPage->getNextPage($remainingCount);\n            $rxElementCount = $currentPage->getPageElementCount();\n            if ($rxElementCount > $remainingCount) {\n                throw new LengthException('API returned a number of elements ' .\n                    'exceeding the specified page size limit. page size: ' .\n                    \"$remainingCount, elements received: $rxElementCount\");\n            }\n            array_push($pageList, $currentPage);\n            $itemCount += $rxElementCount;\n        }\n        return $pageList;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/GPBLabel.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\n/**\n * Container class for Protobuf label constants. See FieldDescriptorProto.Label in\n * https://github.com/google/protobuf/blob/master/src/google/protobuf/descriptor.proto\n */\nclass GPBLabel\n{\n    const OPTIONAL = 1;\n    const REQUIRED = 2;\n    const REPEATED = 3;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/GPBType.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\n/**\n * Container class for Protobuf type constants. See FieldDescriptorProto.Type in\n * https://github.com/google/protobuf/blob/master/src/google/protobuf/descriptor.proto\n */\nclass GPBType\n{\n    const DOUBLE   =  1;\n    const FLOAT    =  2;\n    const INT64    =  3;\n    const UINT64   =  4;\n    const INT32    =  5;\n    const FIXED64  =  6;\n    const FIXED32  =  7;\n    const BOOL     =  8;\n    const STRING   =  9;\n    const GROUP    = 10;\n    const MESSAGE  = 11;\n    const BYTES    = 12;\n    const UINT32   = 13;\n    const ENUM     = 14;\n    const SFIXED32 = 15;\n    const SFIXED64 = 16;\n    const SINT32   = 17;\n    const SINT64   = 18;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/GapicClientTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse Google\\ApiCore\\LongRunning\\OperationsClient;\nuse Google\\ApiCore\\Middleware\\CredentialsWrapperMiddleware;\nuse Google\\ApiCore\\Middleware\\FixedHeaderMiddleware;\nuse Google\\ApiCore\\Middleware\\OperationsMiddleware;\nuse Google\\ApiCore\\Middleware\\OptionsFilterMiddleware;\nuse Google\\ApiCore\\Middleware\\PagedMiddleware;\nuse Google\\ApiCore\\Middleware\\RequestAutoPopulationMiddleware;\nuse Google\\ApiCore\\Middleware\\RetryMiddleware;\nuse Google\\ApiCore\\Middleware\\TransportCallMiddleware;\nuse Google\\ApiCore\\Options\\CallOptions;\nuse Google\\ApiCore\\Options\\ClientOptions;\nuse Google\\ApiCore\\Options\\TransportOptions;\nuse Google\\ApiCore\\Transport\\GrpcFallbackTransport;\nuse Google\\ApiCore\\Transport\\GrpcTransport;\nuse Google\\ApiCore\\Transport\\RestTransport;\nuse Google\\ApiCore\\Transport\\TransportInterface;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\LongRunning\\Operation;\nuse Google\\Protobuf\\Internal\\Message;\nuse GuzzleHttp\\Promise\\PromiseInterface;\n\n/**\n * Common functions used to work with various clients.\n *\n * @internal\n */\ntrait GapicClientTrait\n{\n    use ClientOptionsTrait;\n    use ValidationTrait {\n        ValidationTrait::validate as traitValidate;\n    }\n    use GrpcSupportTrait;\n\n    private ?TransportInterface $transport = null;\n    private ?HeaderCredentialsInterface $credentialsWrapper = null;\n    /** @var RetrySettings[] $retrySettings */\n    private array $retrySettings = [];\n    private string $serviceName = '';\n    private array $agentHeader = [];\n    private array $descriptors = [];\n    /** @var array<callable> $prependMiddlewareCallables */\n    private array $prependMiddlewareCallables = [];\n    /** @var array<callable> $middlewareCallables */\n    private array $middlewareCallables = [];\n    private array $transportCallMethods = [\n        Call::UNARY_CALL => 'startUnaryCall',\n        Call::BIDI_STREAMING_CALL => 'startBidiStreamingCall',\n        Call::CLIENT_STREAMING_CALL => 'startClientStreamingCall',\n        Call::SERVER_STREAMING_CALL => 'startServerStreamingCall',\n    ];\n    private bool $backwardsCompatibilityMode;\n\n    /**\n     * Add a middleware to the call stack by providing a callable which will be\n     * invoked at the start of each call, and will return an instance of\n     * {@see MiddlewareInterface} when invoked.\n     *\n     * The callable must have the following method signature:\n     *\n     *     callable(MiddlewareInterface): MiddlewareInterface\n     *\n     * An implementation may look something like this:\n     * ```\n     * $client->addMiddleware(function (MiddlewareInterface $handler) {\n     *     return new class ($handler) implements MiddlewareInterface {\n     *         public function __construct(private MiddlewareInterface $handler) {\n     *         }\n     *\n     *         public function __invoke(Call $call, array $options) {\n     *             // modify call and options (pre-request)\n     *             $response = ($this->handler)($call, $options);\n     *             // modify the response (post-request)\n     *             return $response;\n     *         }\n     *     };\n     * });\n     * ```\n     *\n     * @param callable $middlewareCallable A callable which returns an instance\n     *                 of {@see MiddlewareInterface} when invoked with a\n     *                 MiddlewareInterface instance as its first argument.\n     * @return void\n     */\n    public function addMiddleware(callable $middlewareCallable): void\n    {\n        $this->middlewareCallables[] = $middlewareCallable;\n    }\n\n     /**\n     * Prepend a middleware to the call stack by providing a callable which will be\n     * invoked at the end of each call, and will return an instance of\n     * {@see MiddlewareInterface} when invoked.\n     *\n     * The callable must have the following method signature:\n     *\n     *     callable(MiddlewareInterface): MiddlewareInterface\n     *\n     * An implementation may look something like this:\n     * ```\n     * $client->prependMiddleware(function (MiddlewareInterface $handler) {\n     *     return new class ($handler) implements MiddlewareInterface {\n     *         public function __construct(private MiddlewareInterface $handler) {\n     *         }\n     *\n     *         public function __invoke(Call $call, array $options) {\n     *             // modify call and options (pre-request)\n     *             $response = ($this->handler)($call, $options);\n     *             // modify the response (post-request)\n     *             return $response;\n     *         }\n     *     };\n     * });\n     * ```\n     *\n     * @param callable $middlewareCallable A callable which returns an instance\n     *                 of {@see MiddlewareInterface} when invoked with a\n     *                 MiddlewareInterface instance as its first argument.\n     * @return void\n     */\n    public function prependMiddleware(callable $middlewareCallable): void\n    {\n        $this->prependMiddlewareCallables[] = $middlewareCallable;\n    }\n\n    /**\n     * Initiates an orderly shutdown in which preexisting calls continue but new\n     * calls are immediately cancelled.\n     *\n     * @experimental\n     */\n    public function close()\n    {\n        $this->transport->close();\n    }\n\n    /**\n     * Get the transport for the client. This method is protected to support\n     * use by customized clients.\n     *\n     * @access private\n     * @return TransportInterface\n     */\n    protected function getTransport()\n    {\n        return $this->transport;\n    }\n\n    /**\n     * Get the credentials for the client. This method is protected to support\n     * use by customized clients.\n     *\n     * @access private\n     * @return CredentialsWrapper\n     */\n    protected function getCredentialsWrapper()\n    {\n        return $this->credentialsWrapper;\n    }\n\n    /**\n     * Configures the GAPIC client based on an array of options.\n     *\n     * @param array $options {\n     *     An array of required and optional arguments.\n     *\n     *     @type string $apiEndpoint\n     *           The address of the API remote host, for example \"example.googleapis.com. May also\n     *           include the port, for example \"example.googleapis.com:443\"\n     *     @type bool $disableRetries\n     *           Determines whether or not retries defined by the client configuration should be\n     *           disabled. Defaults to `false`.\n     *     @type string|array $clientConfig\n     *           Client method configuration, including retry settings. This option can be either a\n     *           path to a JSON file, or a PHP array containing the decoded JSON data.\n     *           By default this settings points to the default client config file, which is provided\n     *           in the resources folder.\n     *     @type string|array|FetchAuthTokenInterface|CredentialsWrapper $credentials\n     *           The credentials to be used by the client to authorize API calls. This option\n     *           accepts either a path to a credentials file, or a decoded credentials file as a\n     *           PHP array.\n     *           *Advanced usage*: In addition, this option can also accept a pre-constructed\n     *           \\Google\\Auth\\FetchAuthTokenInterface object or \\Google\\ApiCore\\CredentialsWrapper\n     *           object. Note that when one of these objects are provided, any settings in\n     *           $authConfig will be ignored.\n     *     @type array $credentialsConfig\n     *           Options used to configure credentials, including auth token caching, for the client.\n     *           For a full list of supporting configuration options, see\n     *           \\Google\\ApiCore\\CredentialsWrapper::build.\n     *     @type string|TransportInterface $transport\n     *           The transport used for executing network requests. May be either the string `rest`,\n     *           `grpc`, or 'grpc-fallback'. Defaults to `grpc` if gRPC support is detected on the system.\n     *           *Advanced usage*: Additionally, it is possible to pass in an already instantiated\n     *           TransportInterface object. Note that when this objects is provided, any settings in\n     *           $transportConfig, and any `$apiEndpoint` setting, will be ignored.\n     *     @type array $transportConfig\n     *           Configuration options that will be used to construct the transport. Options for\n     *           each supported transport type should be passed in a key for that transport. For\n     *           example:\n     *           $transportConfig = [\n     *               'grpc' => [...],\n     *               'rest' => [...],\n     *               'grpc-fallback' => [...],\n     *           ];\n     *           See the GrpcTransport::build and RestTransport::build\n     *           methods for the supported options.\n     *     @type string $versionFile\n     *           The path to a file which contains the current version of the client.\n     *     @type string $descriptorsConfigPath\n     *           The path to a descriptor configuration file.\n     *     @type string $serviceName\n     *           The name of the service.\n     *     @type string $libName\n     *           The name of the client application.\n     *     @type string $libVersion\n     *           The version of the client application.\n     *     @type string $gapicVersion\n     *           The code generator version of the GAPIC library.\n     *     @type callable $clientCertSource\n     *           A callable which returns the client cert as a string.\n     * }\n     * @throws ValidationException\n     */\n    private function setClientOptions(array $options)\n    {\n        // serviceAddress is now deprecated and acts as an alias for apiEndpoint\n        if (isset($options['serviceAddress'])) {\n            $options['apiEndpoint'] = $this->pluck('serviceAddress', $options, false);\n        }\n        $this->validateNotNull($options, [\n            'apiEndpoint',\n            'serviceName',\n            'descriptorsConfigPath',\n            'clientConfig',\n            'disableRetries',\n            'credentialsConfig',\n            'transportConfig',\n        ]);\n        $this->traitValidate($options, [\n            'credentials',\n            'transport',\n            'gapicVersion',\n            'libName',\n            'libVersion',\n        ]);\n\n        // \"hasEmulator\" is not a supported Client Option, but is used\n        // internally to determine if the client is running in emulator mode.\n        // Therefore, we need to remove it from the $options array before\n        // creating the ClientOptions.\n        $hasEmulator = $this->pluck('hasEmulator', $options, false) ?? false;\n        if ($this->isBackwardsCompatibilityMode()) {\n            if (is_string($options['clientConfig'])) {\n                // perform validation for V1 surfaces which is done in the\n                // ClientOptions class for v2 surfaces.\n                $options['clientConfig'] = json_decode(\n                    file_get_contents($options['clientConfig']),\n                    true\n                );\n                self::validateFileExists($options['descriptorsConfigPath']);\n            }\n        } else {\n            // cast to ClientOptions for new surfaces only\n            $options = new ClientOptions($options);\n        }\n        $this->serviceName = $options['serviceName'];\n        $this->retrySettings = RetrySettings::load(\n            $this->serviceName,\n            $options['clientConfig'],\n            $options['disableRetries']\n        );\n\n        $headerInfo = [\n            'libName' => $options['libName'],\n            'libVersion' => $options['libVersion'],\n            'gapicVersion' => $options['gapicVersion'],\n        ];\n        // Edge case: If the client has the gRPC extension installed, but is\n        // a REST-only library, then the grpcVersion header should not be set.\n        if ($this->transport instanceof GrpcTransport) {\n            $headerInfo['grpcVersion'] = phpversion('grpc');\n        } elseif ($this->transport instanceof RestTransport\n            || $this->transport instanceof GrpcFallbackTransport) {\n            $headerInfo['restVersion'] = Version::getApiCoreVersion();\n        }\n        $this->agentHeader = AgentHeader::buildAgentHeader($headerInfo);\n\n        // Set \"client_library_name\" depending on client library surface being used\n        $userAgentHeader = sprintf(\n            'gcloud-php-%s/%s',\n            $this->isBackwardsCompatibilityMode() ? 'legacy' : 'new',\n            $options['gapicVersion']\n        );\n        $this->agentHeader['User-Agent'] = [$userAgentHeader];\n\n        self::validateFileExists($options['descriptorsConfigPath']);\n\n        $descriptors = require($options['descriptorsConfigPath']);\n        $this->descriptors = $descriptors['interfaces'][$this->serviceName];\n\n        if (isset($options['apiKey'], $options['credentials'])) {\n            throw new ValidationException(\n                'API Keys and Credentials are mutually exclusive authentication methods and cannot be used together.'\n            );\n        }\n        // Set the credentialsWrapper\n        if (isset($options['apiKey'])) {\n            $this->credentialsWrapper = new ApiKeyHeaderCredentials(\n                $options['apiKey'],\n                $options['credentialsConfig']['quotaProject'] ?? null\n            );\n        } else {\n            $this->credentialsWrapper = $this->createCredentialsWrapper(\n                $options['credentials'],\n                $options['credentialsConfig'],\n                $options['universeDomain']\n            );\n        }\n\n        $transport = $options['transport'] ?: self::defaultTransport();\n        $this->transport = $transport instanceof TransportInterface\n            ? $transport\n            : $this->createTransport(\n                $options['apiEndpoint'],\n                $transport,\n                $options['transportConfig'],\n                $options['clientCertSource'],\n                $hasEmulator\n            );\n    }\n\n    /**\n     * @param string $apiEndpoint\n     * @param string $transport\n     * @param TransportOptions|array $transportConfig\n     * @param callable $clientCertSource\n     * @param bool $hasEmulator\n     * @return TransportInterface\n     * @throws ValidationException\n     */\n    private function createTransport(\n        string $apiEndpoint,\n        $transport,\n        $transportConfig,\n        ?callable $clientCertSource = null,\n        bool $hasEmulator = false\n    ) {\n        if (!is_string($transport)) {\n            throw new ValidationException(\n                \"'transport' must be a string, instead got:\" .\n                print_r($transport, true)\n            );\n        }\n        $supportedTransports = self::supportedTransports();\n        if (!in_array($transport, $supportedTransports)) {\n            throw new ValidationException(sprintf(\n                'Unexpected transport option \"%s\". Supported transports: %s',\n                $transport,\n                implode(', ', $supportedTransports)\n            ));\n        }\n        $configForSpecifiedTransport = $transportConfig[$transport] ?? [];\n        if (is_array($configForSpecifiedTransport)) {\n            $configForSpecifiedTransport['clientCertSource'] = $clientCertSource;\n        } else {\n            $configForSpecifiedTransport->setClientCertSource($clientCertSource);\n            $configForSpecifiedTransport = $configForSpecifiedTransport->toArray();\n        }\n        switch ($transport) {\n            case 'grpc':\n                // Setting the user agent for gRPC requires special handling\n                if (isset($this->agentHeader['User-Agent'])) {\n                    if ($configForSpecifiedTransport['stubOpts']['grpc.primary_user_agent'] ??= '') {\n                        $configForSpecifiedTransport['stubOpts']['grpc.primary_user_agent'] .= ' ';\n                    }\n                    $configForSpecifiedTransport['stubOpts']['grpc.primary_user_agent'] .=\n                        $this->agentHeader['User-Agent'][0];\n                }\n                return GrpcTransport::build($apiEndpoint, $configForSpecifiedTransport);\n            case 'grpc-fallback':\n                return GrpcFallbackTransport::build($apiEndpoint, $configForSpecifiedTransport);\n            case 'rest':\n                if (!isset($configForSpecifiedTransport['restClientConfigPath'])) {\n                    throw new ValidationException(\n                        \"The 'restClientConfigPath' config is required for 'rest' transport.\"\n                    );\n                }\n                $restConfigPath = $configForSpecifiedTransport['restClientConfigPath'];\n                $configForSpecifiedTransport['hasEmulator'] = $hasEmulator;\n\n                return RestTransport::build($apiEndpoint, $restConfigPath, $configForSpecifiedTransport);\n            default:\n                throw new ValidationException(\n                    \"Unexpected 'transport' option: $transport. \" .\n                    \"Supported values: ['grpc', 'rest', 'grpc-fallback']\"\n                );\n        }\n    }\n\n    /**\n     * @param array $options\n     * @return OperationsClient\n     */\n    private function createOperationsClient(array $options)\n    {\n        $this->pluckArray([\n            'serviceName',\n            'clientConfig',\n            'descriptorsConfigPath',\n        ], $options);\n\n        // User-supplied operations client\n        if ($operationsClient = $this->pluck('operationsClient', $options, false)) {\n            return $operationsClient;\n        }\n\n        // operationsClientClass option\n        $operationsClientClass = $this->pluck('operationsClientClass', $options, false)\n            ?: OperationsCLient::class;\n        return new $operationsClientClass($options);\n    }\n\n    /**\n     * @return string\n     */\n    private static function defaultTransport()\n    {\n        return self::getGrpcDependencyStatus()\n            ? 'grpc'\n            : 'rest';\n    }\n\n    private function validateCallConfig(string $methodName)\n    {\n        // Ensure a method descriptor exists for the target method.\n        if (!isset($this->descriptors[$methodName])) {\n            throw new ValidationException(\"Requested method '$methodName' does not exist in descriptor configuration.\");\n        }\n        $methodDescriptors = $this->descriptors[$methodName];\n\n        // Ensure required descriptor configuration exists.\n        if (!isset($methodDescriptors['callType'])) {\n            throw new ValidationException(\"Requested method '$methodName' does not have a callType \" .\n                'in descriptor configuration.');\n        }\n        $callType = $methodDescriptors['callType'];\n\n        // Validate various callType specific configurations.\n        if ($callType == Call::LONGRUNNING_CALL) {\n            if (!isset($methodDescriptors['longRunning'])) {\n                throw new ValidationException(\"Requested method '$methodName' does not have a longRunning config \" .\n                    'in descriptor configuration.');\n            }\n            // @TODO: check if the client implements `OperationsClientInterface` instead\n            if (!method_exists($this, 'getOperationsClient')) {\n                throw new ValidationException('Client missing required getOperationsClient ' .\n                    \"for longrunning call '$methodName'\");\n            }\n        } elseif ($callType == Call::PAGINATED_CALL) {\n            if (!isset($methodDescriptors['pageStreaming'])) {\n                throw new ValidationException(\"Requested method '$methodName' with callType PAGINATED_CALL does not \" .\n                    'have a pageStreaming in descriptor configuration.');\n            }\n        }\n\n        // LRO are either Standard LRO response type or custom, which are handled by\n        // startOperationCall, so no need to validate responseType for those callType.\n        if ($callType != Call::LONGRUNNING_CALL) {\n            if (!isset($methodDescriptors['responseType'])) {\n                throw new ValidationException(\"Requested method '$methodName' does not have a responseType \" .\n                    'in descriptor configuration.');\n            }\n        }\n\n        return $methodDescriptors;\n    }\n\n    /**\n     * @param string $methodName\n     * @param Message $request\n     * @param array $optionalArgs {\n     *     Call Options\n     *\n     *     @type array $headers                     [optional] key-value array containing headers\n     *     @type int $timeoutMillis                 [optional] the timeout in milliseconds for the call\n     *     @type array $transportOptions            [optional] transport-specific call options\n     *     @type RetrySettings|array $retrySettings [optional] A retry settings override for the call.\n     * }\n     *\n     * @experimental\n     *\n     * @return PromiseInterface\n     */\n    private function startAsyncCall(\n        string $methodName,\n        Message $request,\n        array $optionalArgs = []\n    ) {\n        // Convert method name to the UpperCamelCase of RPC names from lowerCamelCase of GAPIC method names\n        // in order to find the method in the descriptor config.\n        $methodName = ucfirst($methodName);\n        $methodDescriptors = $this->validateCallConfig($methodName);\n\n        $callType = $methodDescriptors['callType'];\n\n        switch ($callType) {\n            case Call::PAGINATED_CALL:\n                return $this->getPagedListResponseAsync(\n                    $methodName,\n                    $optionalArgs,\n                    $methodDescriptors['responseType'],\n                    $request,\n                    $methodDescriptors['interfaceOverride'] ?? $this->serviceName\n                );\n            case Call::SERVER_STREAMING_CALL:\n            case Call::CLIENT_STREAMING_CALL:\n            case Call::BIDI_STREAMING_CALL:\n                throw new ValidationException(\"Call type '$callType' of requested method \" .\n                    \"'$methodName' is not supported for async execution.\");\n        }\n\n        return $this->startApiCall($methodName, $request, $optionalArgs);\n    }\n\n    /**\n     * @param string $methodName\n     * @param Message $request\n     * @param array $optionalArgs {\n     *     Call Options\n     *\n     *     @type array $headers [optional] key-value array containing headers\n     *     @type int $timeoutMillis [optional] the timeout in milliseconds for the call\n     *     @type array $transportOptions [optional] transport-specific call options\n     *     @type RetrySettings|array $retrySettings [optional] A retry settings\n     *           override for the call.\n     * }\n     *\n     * @experimental\n     *\n     * @return PromiseInterface|PagedListResponse|BidiStream|ClientStream|ServerStream\n     */\n    private function startApiCall(\n        string $methodName,\n        ?Message $request = null,\n        array $optionalArgs = []\n    ) {\n        $methodDescriptors = $this->validateCallConfig($methodName);\n        $callType = $methodDescriptors['callType'];\n\n        // Prepare request-based headers, merge with user-provided headers,\n        // which take precedence.\n        $headerParams = $methodDescriptors['headerParams'] ?? [];\n        $requestHeaders = $this->buildRequestParamsHeader($headerParams, $request);\n        $optionalArgs['headers'] = array_merge($requestHeaders, $optionalArgs['headers'] ?? []);\n\n        // Default the interface name, if not set, to the client's protobuf service name.\n        $interfaceName = $methodDescriptors['interfaceOverride'] ?? $this->serviceName;\n\n        // Handle call based on call type configured in the method descriptor config.\n        if ($callType == Call::LONGRUNNING_CALL) {\n            return $this->startOperationsCall(\n                $methodName,\n                $optionalArgs,\n                $request,\n                $this->getOperationsClient(),\n                $interfaceName,\n                // Custom operations will define their own operation response type, whereas standard\n                // LRO defaults to the same type.\n                $methodDescriptors['responseType'] ?? null\n            );\n        }\n\n        // Fully-qualified name of the response message PHP class.\n        $decodeType = $methodDescriptors['responseType'];\n\n        if ($callType == Call::PAGINATED_CALL) {\n            return $this->getPagedListResponse($methodName, $optionalArgs, $decodeType, $request, $interfaceName);\n        }\n\n        // Unary, and all Streaming types handled by startCall.\n        return $this->startCall($methodName, $decodeType, $optionalArgs, $request, $callType, $interfaceName);\n    }\n\n    /**\n     * @param string $methodName\n     * @param string $decodeType\n     * @param array $optionalArgs {\n     *     Call Options\n     *\n     *     @type array $headers [optional] key-value array containing headers\n     *     @type int $timeoutMillis [optional] the timeout in milliseconds for the call\n     *     @type array $transportOptions [optional] transport-specific call options\n     *     @type RetrySettings|array $retrySettings [optional] A retry settings\n     *           override for the call.\n     * }\n     * @param Message $request\n     * @param int $callType\n     * @param string $interfaceName\n     *\n     * @return PromiseInterface|BidiStream|ClientStream|ServerStream\n     */\n    private function startCall(\n        string $methodName,\n        string $decodeType,\n        array $optionalArgs = [],\n        ?Message $request = null,\n        int $callType = Call::UNARY_CALL,\n        ?string $interfaceName = null\n    ) {\n        $optionalArgs = $this->configureCallOptions($optionalArgs);\n        $callStack = $this->createCallStack(\n            $this->configureCallConstructionOptions($methodName, $optionalArgs)\n        );\n\n        $descriptor = $this->descriptors[$methodName]['grpcStreaming'] ?? null;\n\n        $call = new Call(\n            $this->buildMethod($interfaceName, $methodName),\n            $decodeType,\n            $request,\n            $descriptor,\n            $callType\n        );\n        switch ($callType) {\n            case Call::UNARY_CALL:\n                $this->modifyUnaryCallable($callStack);\n                break;\n            case Call::BIDI_STREAMING_CALL:\n            case Call::CLIENT_STREAMING_CALL:\n            case Call::SERVER_STREAMING_CALL:\n                $this->modifyStreamingCallable($callStack);\n                break;\n        }\n\n        return $callStack($call, $optionalArgs + array_filter([\n            'audience' => self::getDefaultAudience()\n        ]));\n    }\n\n    /**\n     * @param array $callConstructionOptions {\n     *     Call Construction Options\n     *\n     *     @type RetrySettings $retrySettings [optional] A retry settings override\n     *           For the call.\n     *     @type array<string, string> $autoPopulationSettings Settings for\n     *           auto population of particular request fields if unset.\n     * }\n     *\n     * @return callable\n     */\n    private function createCallStack(array $callConstructionOptions)\n    {\n        $fixedHeaders = $this->agentHeader;\n        if ($quotaProject = $this->credentialsWrapper->getQuotaProject()) {\n            $fixedHeaders += [\n                'X-Goog-User-Project' => [$quotaProject]\n            ];\n        }\n\n        if (isset($this->apiVersion)) {\n            $fixedHeaders += [\n                'X-Goog-Api-Version' => [$this->apiVersion]\n            ];\n        }\n\n        $callStack = new TransportCallMiddleware($this->transport, $this->transportCallMethods);\n\n        foreach ($this->prependMiddlewareCallables as $fn) {\n            /** @var MiddlewareInterface $callStack */\n            $callStack = $fn($callStack);\n        }\n\n        $callStack = new CredentialsWrapperMiddleware($callStack, $this->credentialsWrapper);\n        $callStack = new FixedHeaderMiddleware($callStack, $fixedHeaders, true);\n        $callStack = new RetryMiddleware($callStack, $callConstructionOptions['retrySettings']);\n        $callStack = new RequestAutoPopulationMiddleware(\n            $callStack,\n            $callConstructionOptions['autoPopulationSettings'],\n        );\n        $callStack = new OptionsFilterMiddleware($callStack, [\n            'headers',\n            'timeoutMillis',\n            'transportOptions',\n            'metadataCallback',\n            'audience',\n            'metadataReturnType'\n        ]);\n\n        foreach (\\array_reverse($this->middlewareCallables) as $fn) {\n            /** @var MiddlewareInterface $callStack */\n            $callStack = $fn($callStack);\n        }\n\n        return $callStack;\n    }\n\n    /**\n     * @param string $methodName\n     * @param array $optionalArgs {\n     *     Optional arguments\n     *\n     *     @type RetrySettings|array $retrySettings [optional] A retry settings\n     *           override for the call.\n     * }\n     *\n     * @return array\n     */\n    private function configureCallConstructionOptions(string $methodName, array $optionalArgs)\n    {\n        $retrySettings = $this->retrySettings[$methodName];\n        $autoPopulatedFields = $this->descriptors[$methodName]['autoPopulatedFields'] ?? [];\n        // Allow for retry settings to be changed at call time\n        if (isset($optionalArgs['retrySettings'])) {\n            if ($optionalArgs['retrySettings'] instanceof RetrySettings) {\n                $retrySettings = $optionalArgs['retrySettings'];\n            } else {\n                $retrySettings = $retrySettings->with(\n                    $optionalArgs['retrySettings']\n                );\n            }\n        }\n        return [\n            'retrySettings' => $retrySettings,\n            'autoPopulationSettings' => $autoPopulatedFields,\n        ];\n    }\n\n    /**\n     * @return array\n     */\n    private function configureCallOptions(array $optionalArgs): array\n    {\n        if ($this->isBackwardsCompatibilityMode()) {\n            return $optionalArgs;\n        }\n        // cast to CallOptions for new surfaces only\n        return (new CallOptions($optionalArgs))->toArray();\n    }\n\n    /**\n     * @param string $methodName\n     * @param array $optionalArgs {\n     *     Call Options\n     *\n     *     @type array $headers [optional] key-value array containing headers\n     *     @type int $timeoutMillis [optional] the timeout in milliseconds for the call\n     *     @type array $transportOptions [optional] transport-specific call options\n     * }\n     * @param Message $request\n     * @param OperationsClient|object $client\n     * @param string $interfaceName\n     * @param string $operationClass If provided, will be used instead of the default\n     *                               operation response class of {@see \\Google\\LongRunning\\Operation}.\n     *\n     * @return PromiseInterface\n     */\n    private function startOperationsCall(\n        string $methodName,\n        array $optionalArgs,\n        Message $request,\n        $client,\n        ?string $interfaceName = null,\n        ?string $operationClass = null\n    ) {\n        $optionalArgs = $this->configureCallOptions($optionalArgs);\n        $callStack = $this->createCallStack(\n            $this->configureCallConstructionOptions($methodName, $optionalArgs)\n        );\n        $descriptor = $this->descriptors[$methodName]['longRunning'];\n        $metadataReturnType = null;\n\n        // Call the methods supplied in \"additionalArgumentMethods\" on the request Message object\n        // to build the \"additionalOperationArguments\" option for the operation response.\n        if (isset($descriptor['additionalArgumentMethods'])) {\n            $additionalArgs = [];\n            foreach ($descriptor['additionalArgumentMethods'] as $additionalArgsMethodName) {\n                $additionalArgs[] = $request->$additionalArgsMethodName();\n            }\n            $descriptor['additionalOperationArguments'] = $additionalArgs;\n            unset($descriptor['additionalArgumentMethods']);\n        }\n\n        if (isset($descriptor['metadataReturnType'])) {\n            $metadataReturnType = $descriptor['metadataReturnType'];\n        }\n\n        $callStack = new OperationsMiddleware($callStack, $client, $descriptor);\n\n        $call = new Call(\n            $this->buildMethod($interfaceName, $methodName),\n            $operationClass ?: Operation::class,\n            $request,\n            [],\n            Call::UNARY_CALL\n        );\n\n        $this->modifyUnaryCallable($callStack);\n        return $callStack($call, $optionalArgs + array_filter([\n            'metadataReturnType' => $metadataReturnType,\n            'audience' => self::getDefaultAudience()\n        ]));\n    }\n\n    /**\n     * @param string $methodName\n     * @param array $optionalArgs\n     * @param string $decodeType\n     * @param Message $request\n     * @param string $interfaceName\n     *\n     * @return PagedListResponse\n     */\n    private function getPagedListResponse(\n        string $methodName,\n        array $optionalArgs,\n        string $decodeType,\n        Message $request,\n        ?string $interfaceName = null\n    ) {\n        return $this->getPagedListResponseAsync(\n            $methodName,\n            $optionalArgs,\n            $decodeType,\n            $request,\n            $interfaceName\n        )->wait();\n    }\n\n    /**\n     * @param string $methodName\n     * @param array $optionalArgs\n     * @param string $decodeType\n     * @param Message $request\n     * @param string $interfaceName\n     *\n     * @return PromiseInterface\n     */\n    private function getPagedListResponseAsync(\n        string $methodName,\n        array $optionalArgs,\n        string $decodeType,\n        Message $request,\n        ?string $interfaceName = null\n    ) {\n        $optionalArgs = $this->configureCallOptions($optionalArgs);\n        $callStack = $this->createCallStack(\n            $this->configureCallConstructionOptions($methodName, $optionalArgs)\n        );\n        $descriptor = new PageStreamingDescriptor(\n            $this->descriptors[$methodName]['pageStreaming']\n        );\n        $callStack = new PagedMiddleware($callStack, $descriptor);\n\n        $call = new Call(\n            $this->buildMethod($interfaceName, $methodName),\n            $decodeType,\n            $request,\n            [],\n            Call::UNARY_CALL\n        );\n\n        $this->modifyUnaryCallable($callStack);\n        return $callStack($call, $optionalArgs + array_filter([\n            'audience' => self::getDefaultAudience()\n        ]));\n    }\n\n    /**\n     * @param string $interfaceName\n     * @param string $methodName\n     *\n     * @return string\n     */\n    private function buildMethod(?string $interfaceName = null, ?string $methodName = null)\n    {\n        return sprintf(\n            '%s/%s',\n            $interfaceName ?: $this->serviceName,\n            $methodName\n        );\n    }\n\n    /**\n     * @param array $headerParams\n     * @param Message|null $request\n     *\n     * @return array\n     */\n    private function buildRequestParamsHeader(array $headerParams, ?Message $request = null)\n    {\n        $headers = [];\n\n        // No request message means no request-based headers.\n        if (!$request) {\n            return $headers;\n        }\n\n        foreach ($headerParams as $headerParam) {\n            $msg = $request;\n            $value = null;\n            foreach ($headerParam['fieldAccessors'] as $accessor) {\n                $value = $msg->$accessor();\n\n                // In case the field in question is nested in another message,\n                // skip the header param when the nested message field is unset.\n                $msg = $value;\n                if (is_null($msg)) {\n                    break;\n                }\n            }\n\n            $keyName = $headerParam['keyName'];\n\n            // If there are value pattern matchers configured and the target\n            // field was set, evaluate the matchers in the order that they were\n            // annotated in with last one matching wins.\n            $original = $value;\n            $matchers = isset($headerParam['matchers']) && !is_null($value) ?\n                $headerParam['matchers'] :\n                [];\n            foreach ($matchers as $matcher) {\n                $matches = [];\n                if (preg_match($matcher, $original, $matches)) {\n                    $value = $matches[$keyName];\n                }\n            }\n\n            // If there are no matches or the target field was unset, skip this\n            // header param.\n            if (!$value) {\n                continue;\n            }\n\n            $headers[$keyName] = $value;\n        }\n\n        $requestParams = new RequestParamsHeaderDescriptor($headers);\n\n        return $requestParams->getHeader();\n    }\n\n    /**\n     * The SERVICE_ADDRESS constant is set by GAPIC clients\n     */\n    private static function getDefaultAudience()\n    {\n        if (!defined('self::SERVICE_ADDRESS')) {\n            return null;\n        }\n        return 'https://' . self::SERVICE_ADDRESS . '/'; // @phpstan-ignore-line\n    }\n\n    /**\n     * Modify the unary callable.\n     *\n     * @param callable $callable\n     * @access private\n     */\n    protected function modifyUnaryCallable(callable &$callable)\n    {\n        // Do nothing - this method exists to allow callable modification by partial veneers.\n    }\n\n    /**\n     * Modify the streaming callable.\n     *\n     * @param callable $callable\n     * @access private\n     */\n    protected function modifyStreamingCallable(callable &$callable)\n    {\n        // Do nothing - this method exists to allow callable modification by partial veneers.\n    }\n\n    /**\n     * @internal\n     */\n    private function isBackwardsCompatibilityMode(): bool\n    {\n        return $this->backwardsCompatibilityMode\n            ?? $this->backwardsCompatibilityMode = substr(__CLASS__, -11) === 'GapicClient';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/GrpcSupportTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * Provides helper methods for gRPC support.\n *\n * @internal\n */\ntrait GrpcSupportTrait\n{\n    /**\n     * @return bool\n     */\n    private static function getGrpcDependencyStatus()\n    {\n        return extension_loaded('grpc');\n    }\n\n    /**\n     * @throws ValidationException\n     */\n    private static function validateGrpcSupport()\n    {\n        if (!self::getGrpcDependencyStatus()) {\n            throw new ValidationException(\n                'gRPC support has been requested but required dependencies ' .\n                'have not been found. For details on how to install the ' .\n                'gRPC extension please see https://cloud.google.com/php/grpc.'\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/HeaderCredentialsInterface.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\ninterface HeaderCredentialsInterface\n{\n    /**\n     * @param string|null $audience optional audience for self-signed JWTs.\n     * @return callable|null Callable function that returns an authorization header.\n     */\n    public function getAuthorizationHeaderCallback(?string $audience = null): ?callable;\n\n    /**\n     * Verify that the expected universe domain matches the universe domain from the credentials.\n     *\n     * @throws ValidationException if the universe domain does not match.\n     */\n    public function checkUniverseDomain(): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/InsecureCredentialsWrapper.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * For connect to emulator.\n * @TODO: implement HeaderCredentialsInterface instead of extending CredentialsWrapper\n */\nclass InsecureCredentialsWrapper extends CredentialsWrapper\n{\n    public function __construct()\n    {\n    }\n\n    /**\n     * @param string $audience\n     * @return callable|null Returns null so the gRPC can accept it as an insecure channel.\n     */\n    public function getAuthorizationHeaderCallback($audience = null): ?callable\n    {\n        return null;\n    }\n\n    public function checkUniverseDomain(): void\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/InsecureRequestBuilder.php",
    "content": "<?php\n\nnamespace Google\\ApiCore;\n\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * @internal\n */\nclass InsecureRequestBuilder extends RequestBuilder\n{\n    /**\n     * @param string $path\n     * @param array $queryParams\n     * @return UriInterface\n     */\n    protected function buildUri(string $path, array $queryParams)\n    {\n        $uri = Utils::uriFor(sprintf(\n            'http://%s%s',\n            $this->baseUri,\n            $path\n        ));\n        if ($queryParams) {\n            $uri = $this->buildUriWithQuery(\n                $uri,\n                $queryParams\n            );\n        }\n        return $uri;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/CredentialsWrapperMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\CredentialsWrapper;\nuse Google\\ApiCore\\HeaderCredentialsInterface;\n\n/**\n* Middleware which adds a CredentialsWrapper object to the call options.\n*\n* @internal\n*/\nclass CredentialsWrapperMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n\n    /** @var HeaderCredentialsInterface */\n    private HeaderCredentialsInterface  $credentialsWrapper;\n\n    public function __construct(\n        callable $nextHandler,\n        HeaderCredentialsInterface $credentialsWrapper\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->credentialsWrapper = $credentialsWrapper;\n    }\n\n    public function __invoke(Call $call, array $options)\n    {\n        $next = $this->nextHandler;\n        return $next(\n            $call,\n            $options + ['credentialsWrapper' => $this->credentialsWrapper]\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/FixedHeaderMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\Call;\n\n/**\n * Middleware to add fixed headers to an API call.\n *\n * @internal\n */\nclass FixedHeaderMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n    private array $headers;\n    private bool $overrideUserHeaders;\n\n    public function __construct(\n        callable $nextHandler,\n        array $headers,\n        bool $overrideUserHeaders = false\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->headers = $headers;\n        $this->overrideUserHeaders = $overrideUserHeaders;\n    }\n\n    public function __invoke(Call $call, array $options)\n    {\n        $userHeaders = $options['headers'] ?? [];\n        if ($this->overrideUserHeaders) {\n            $options['headers'] = $this->headers + $userHeaders;\n        } else {\n            $options['headers'] = $userHeaders + $this->headers;\n        }\n\n        $next = $this->nextHandler;\n        return $next(\n            $call,\n            $options\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/MiddlewareInterface.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\BidiStream;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\ClientStream;\nuse Google\\ApiCore\\ServerStream;\nuse GuzzleHttp\\Promise\\PromiseInterface;\n\n/**\n * Middlewares must take a MiddlewareInterface as their first constructor\n * argument {@see Google\\ApiCore\\Middleware\\ResponseMetadataMiddleware}, which\n * represents the next middleware in the chain. This next middleware MUST be\n * invoked by this MiddlewareInterface, and the result must be returned as part\n * of the `__invoke` method implementation.\n *\n * To create your own middleware, first implement the interface, as well as pass the handler\n * in through the constructor:\n *\n * ```\n * use Google\\ApiCore\\Call;\n * use Google\\ApiCore\\Middleware\\MiddlewareInterface;\n *\n * class MyTestMiddleware implements MiddlewareInterface\n * {\n *     public function __construct(MiddlewareInterface $handler)\n *      {\n *.         $this->handler = $handler;\n *      }\n *      public function __invoke(Call $call, array $options)\n *      {\n *          echo \"Logging info about the call: \" . $call->getMethod();\n *          return ($this->handler)($call, $options);\n *      }\n * }\n * ```\n *\n * Next, add the middleware to any class implementing `GapicClientTrait` by passing in a\n * callable which returns the new middleware:\n *\n * ```\n * $client = new ExampleGoogleApiServiceClient();\n * $client->addMiddleware(function (MiddlewareInterface $handler) {\n *     return new MyTestMiddleware($handler);\n * });\n * ```\n */\ninterface MiddlewareInterface\n{\n    /**\n     * Modify or observe the API call request and response.\n     * The returned value must include the result of the next MiddlewareInterface invocation in the\n     * chain.\n     *\n     * @param Call $call\n     * @param array $options\n     * @return PromiseInterface|ClientStream|ServerStream|BidiStream\n     */\n    public function __invoke(Call $call, array $options);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/OperationsMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\OperationResponse;\nuse Google\\Protobuf\\Internal\\Message;\n\n/**\n * Middleware which wraps the response in an OperationResponse object.\n *\n * @internal\n */\nclass OperationsMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n    private object $operationsClient;\n    private array $descriptor;\n\n    public function __construct(\n        callable $nextHandler,\n        $operationsClient,\n        array $descriptor\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->operationsClient = $operationsClient;\n        $this->descriptor = $descriptor;\n    }\n\n    public function __invoke(Call $call, array $options)\n    {\n        $next = $this->nextHandler;\n        return $next(\n            $call,\n            $options\n        )->then(function (Message $response) {\n            $options = $this->descriptor + [\n                'lastProtoResponse' => $response\n            ];\n            $operationNameMethod = $options['operationNameMethod'] ?? 'getName';\n            $operationName = call_user_func([$response, $operationNameMethod]);\n            return new OperationResponse($operationName, $this->operationsClient, $options);\n        });\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/OptionsFilterMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\ArrayTrait;\nuse Google\\ApiCore\\Call;\n\n/**\n* Middleware which filters the $options array.\n*\n* @internal\n*/\nclass OptionsFilterMiddleware implements MiddlewareInterface\n{\n    use ArrayTrait;\n\n    /** @var callable */\n    private $nextHandler;\n    private array $permittedOptions;\n\n    public function __construct(\n        callable $nextHandler,\n        array $permittedOptions\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->permittedOptions = $permittedOptions;\n    }\n\n    public function __invoke(Call $call, array $options)\n    {\n        $next = $this->nextHandler;\n        $filteredOptions = $this->pluckArray($this->permittedOptions, $options);\n        return $next(\n            $call,\n            $filteredOptions\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/PagedMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\Page;\nuse Google\\ApiCore\\PagedListResponse;\nuse Google\\ApiCore\\PageStreamingDescriptor;\nuse Google\\Protobuf\\Internal\\Message;\n\n/**\n* Middleware which wraps the response in an PagedListResponses object.\n*\n* @internal\n*/\nclass PagedMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n    private PageStreamingDescriptor $descriptor;\n\n    /**\n     * @param callable $nextHandler\n     * @param PageStreamingDescriptor $descriptor\n     */\n    public function __construct(\n        callable $nextHandler,\n        PageStreamingDescriptor $descriptor\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->descriptor = $descriptor;\n    }\n\n    public function __invoke(Call $call, array $options)\n    {\n        $next = $this->nextHandler;\n        $descriptor = $this->descriptor;\n        return $next($call, $options)->then(\n            function (Message $response) use ($call, $next, $options, $descriptor) {\n                $page = new Page(\n                    $call,\n                    $options,\n                    $next,\n                    $descriptor,\n                    $response\n                );\n                return new PagedListResponse($page);\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/RequestAutoPopulationMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\Api\\FieldInfo\\Format;\nuse Google\\ApiCore\\Call;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Middleware that adds autopopulation functionality. This middlware is\n * added iff auto population settings are present in the resource\n * descriptor config for the rpc method in context.\n *\n * @internal\n */\nclass RequestAutoPopulationMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n\n    /** @var array<string, string> */\n    private $autoPopulationSettings;\n\n    public function __construct(\n        callable $nextHandler,\n        array $autoPopulationSettings\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->autoPopulationSettings = $autoPopulationSettings;\n    }\n\n    /**\n     * @param Call $call\n     * @param array $options\n     *\n     * @return PromiseInterface\n     */\n    public function __invoke(Call $call, array $options)\n    {\n        $next = $this->nextHandler;\n\n        if (empty($this->autoPopulationSettings)) {\n            return $next($call, $options);\n        }\n\n        $request = $call->getMessage();\n        foreach ($this->autoPopulationSettings as $fieldName => $valueType) {\n            $getFieldName = 'get' . ucwords($fieldName);\n            // We use a getter instead of a hazzer here because there's no need to\n            // differentiate between isset and an empty default value. Even if a\n            // field is explicitly set to an empty string, we want to autopopulate it.\n            if (empty($request->$getFieldName())) {\n                $setFieldName = 'set' . ucwords($fieldName);\n                switch ($valueType) {\n                    case Format::UUID4:\n                        $request->$setFieldName(Uuid::uuid4()->toString());\n                        break;\n                    default:\n                        throw new \\UnexpectedValueException(sprintf(\n                            'Value type %s::%s not supported for auto population of the field %s',\n                            Format::class,\n                            Format::name($valueType),\n                            $fieldName\n                        ));\n                }\n            }\n        }\n        $call = $call->withMessage($request);\n        return $next(\n            $call,\n            $options\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/ResponseMetadataMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\Call;\nuse GuzzleHttp\\Promise\\Promise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\n\n/**\n * Middleware which transforms $response into [$response, $metadata]\n *\n * @internal\n */\nclass ResponseMetadataMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n\n    /**\n     * @param callable $nextHandler\n     */\n    public function __construct(callable $nextHandler)\n    {\n        $this->nextHandler = $nextHandler;\n    }\n\n    public function __invoke(Call $call, array $options)\n    {\n        $metadataReceiver = new Promise();\n        $options['metadataCallback'] = function ($metadata) use ($metadataReceiver) {\n            $metadataReceiver->resolve($metadata);\n        };\n        $next = $this->nextHandler;\n        return $next($call, $options)->then(\n            function ($response) use ($metadataReceiver) {\n                if ($metadataReceiver->getState() === PromiseInterface::FULFILLED) {\n                    return [$response, $metadataReceiver->wait()];\n                } else {\n                    return [$response, []];\n                }\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/RetryMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\ApiStatus;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\RetrySettings;\nuse GuzzleHttp\\Promise\\PromiseInterface;\n\n/**\n * Middleware that adds retry functionality.\n *\n * @internal\n */\nclass RetryMiddleware implements MiddlewareInterface\n{\n    /** @var callable */\n    private $nextHandler;\n    private RetrySettings $retrySettings;\n    private ?float $deadlineMs;\n\n    /*\n     * The number of retries that have already been attempted.\n     * The original API call will have $retryAttempts set to 0.\n     */\n    private int $retryAttempts;\n\n    public function __construct(\n        callable $nextHandler,\n        RetrySettings $retrySettings,\n        $deadlineMs = null,\n        $retryAttempts = 0\n    ) {\n        $this->nextHandler = $nextHandler;\n        $this->retrySettings = $retrySettings;\n        $this->deadlineMs = $deadlineMs;\n        $this->retryAttempts = $retryAttempts;\n    }\n\n    /**\n     * @param Call $call\n     * @param array $options\n     *\n     * @return PromiseInterface\n     */\n    public function __invoke(Call $call, array $options)\n    {\n        $nextHandler = $this->nextHandler;\n\n        if (!isset($options['timeoutMillis'])) {\n            // default to \"noRetriesRpcTimeoutMillis\" when retries are disabled, otherwise use \"initialRpcTimeoutMillis\"\n            if (!$this->retrySettings->retriesEnabled() && $this->retrySettings->getNoRetriesRpcTimeoutMillis() > 0) {\n                $options['timeoutMillis'] = $this->retrySettings->getNoRetriesRpcTimeoutMillis();\n            } elseif ($this->retrySettings->getInitialRpcTimeoutMillis() > 0) {\n                $options['timeoutMillis'] = $this->retrySettings->getInitialRpcTimeoutMillis();\n            }\n        }\n\n        // Setting the retry attempt for logging\n        if ($this->retryAttempts > 0) {\n            $options['retryAttempt'] = $this->retryAttempts;\n        }\n\n        // Call the handler immediately if retry settings are disabled.\n        if (!$this->retrySettings->retriesEnabled()) {\n            return $nextHandler($call, $options);\n        }\n\n        return $nextHandler($call, $options)->then(null, function ($e) use ($call, $options) {\n            $retryFunction = $this->getRetryFunction();\n\n            // If the number of retries has surpassed the max allowed retries\n            // then throw the exception as we normally would.\n            // If the maxRetries is set to 0, then we don't check this condition.\n            if (0 !== $this->retrySettings->getMaxRetries()\n                && $this->retryAttempts >= $this->retrySettings->getMaxRetries()\n            ) {\n                throw $e;\n            }\n            // If the retry function returns false then throw the\n            // exception as we normally would.\n            if (!$retryFunction($e, $options)) {\n                throw $e;\n            }\n\n            // Retry function returned true, so we attempt another retry\n            return $this->retry($call, $options, $e->getStatus());\n        });\n    }\n\n    /**\n     * @param Call $call\n     * @param array $options\n     * @param string $status\n     *\n     * @return PromiseInterface\n     * @throws ApiException\n     */\n    private function retry(Call $call, array $options, string $status)\n    {\n        $delayMult = $this->retrySettings->getRetryDelayMultiplier();\n        $maxDelayMs = $this->retrySettings->getMaxRetryDelayMillis();\n        $timeoutMult = $this->retrySettings->getRpcTimeoutMultiplier();\n        $maxTimeoutMs = $this->retrySettings->getMaxRpcTimeoutMillis();\n        $totalTimeoutMs = $this->retrySettings->getTotalTimeoutMillis();\n\n        $delayMs = $this->retrySettings->getInitialRetryDelayMillis();\n        $timeoutMs = $options['timeoutMillis'];\n        $currentTimeMs = $this->getCurrentTimeMs();\n        $deadlineMs = $this->deadlineMs ?: $currentTimeMs + $totalTimeoutMs;\n\n        if ($currentTimeMs >= $deadlineMs) {\n            throw new ApiException(\n                'Retry total timeout exceeded.',\n                \\Google\\Rpc\\Code::DEADLINE_EXCEEDED,\n                ApiStatus::DEADLINE_EXCEEDED\n            );\n        }\n\n        $delayMs = min($delayMs * $delayMult, $maxDelayMs);\n        $timeoutMs = (int) min(\n            $timeoutMs * $timeoutMult,\n            $maxTimeoutMs,\n            $deadlineMs - $this->getCurrentTimeMs()\n        );\n\n        $nextHandler = new RetryMiddleware(\n            $this->nextHandler,\n            $this->retrySettings->with([\n                'initialRetryDelayMillis' => $delayMs,\n            ]),\n            $deadlineMs,\n            $this->retryAttempts + 1\n        );\n\n        // Set the timeout for the call\n        $options['timeoutMillis'] = $timeoutMs;\n\n        return $nextHandler(\n            $call,\n            $options\n        );\n    }\n\n    protected function getCurrentTimeMs()\n    {\n        return microtime(true) * 1000.0;\n    }\n\n    /**\n     * This is the default retry behaviour.\n     */\n    private function getRetryFunction()\n    {\n        return $this->retrySettings->getRetryFunction() ??\n            function (\\Throwable $e, array $options): bool {\n                // This is the default retry behaviour, i.e. we don't retry an ApiException\n                // and for other exception types, we only retry when the error code is in\n                // the list of retryable error codes.\n                if (!$e instanceof ApiException) {\n                    return false;\n                }\n\n                if (!in_array($e->getStatus(), $this->retrySettings->getRetryableCodes())) {\n                    return false;\n                }\n\n                return true;\n            };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Middleware/TransportCallMiddleware.php",
    "content": "<?php\n/*\n * Copyright 2025 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Middleware;\n\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\Transport\\TransportInterface;\n\n/**\n * A Middleware in charge of handling the end of the callstack to call the transport layer.\n * This middleware is made so the callstack in the GapicClientTrait is always a middleware.\n *\n * @internal\n */\nclass TransportCallMiddleware implements MiddlewareInterface\n{\n    /*\n     * @param TransportInterface $transport\n     * @param array $transportCallMethods\n     */\n    public function __construct(\n        private TransportInterface $transport,\n        private array $transportCallMethods\n    )\n    {}\n\n    public function __invoke(Call $call, array $options)\n    {\n        $startCallMethod = $this->transportCallMethods[$call->getCallType()];\n        return $this->transport->$startCallMethod($call, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/OperationResponse.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse Google\\LongRunning\\CancelOperationRequest;\nuse Google\\LongRunning\\Client\\OperationsClient;\nuse Google\\LongRunning\\DeleteOperationRequest;\nuse Google\\LongRunning\\GetOperationRequest;\nuse Google\\LongRunning\\Operation;\nuse Google\\LongRunning\\OperationsClient as LegacyOperationsClient;\nuse Google\\Protobuf\\Any;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Status;\nuse LogicException;\n\n/**\n * Response object from a long running API method.\n *\n * The OperationResponse object is returned by API methods that perform\n * a long running operation. It provides methods that can be used to\n * poll the status of the operation, retrieve the results, and cancel\n * the operation.\n *\n * To support a long running operation, the server must implement the\n * Operations API, which is used by the OperationResponse object. If\n * more control is required, it is possible to make calls against the\n * Operations API directly instead of via the OperationResponse object\n * using an Operations Client instance.\n *\n * @template T = mixed\n */\nclass OperationResponse\n{\n    use PollingTrait;\n\n    const DEFAULT_POLLING_INTERVAL = 1000;\n    const DEFAULT_POLLING_MULTIPLIER = 2;\n    const DEFAULT_MAX_POLLING_INTERVAL = 60000;\n    const DEFAULT_MAX_POLLING_DURATION = 0;\n    private const NEW_CLIENT_NAMESPACE = '\\\\Client\\\\';\n\n    private string $operationName;\n    private ?object $operationsClient;\n\n    private ?string $operationReturnType;\n    private ?string $metadataReturnType;\n    private array $defaultPollSettings = [\n        'initialPollDelayMillis' => self::DEFAULT_POLLING_INTERVAL,\n        'pollDelayMultiplier' => self::DEFAULT_POLLING_MULTIPLIER,\n        'maxPollDelayMillis' => self::DEFAULT_MAX_POLLING_INTERVAL,\n        'totalPollTimeoutMillis' => self::DEFAULT_MAX_POLLING_DURATION,\n    ];\n\n    private ?object $lastProtoResponse;\n    private bool $deleted = false;\n\n    private array $additionalArgs;\n    private string $getOperationMethod;\n    private ?string $cancelOperationMethod;\n    private ?string $deleteOperationMethod;\n    private string $getOperationRequest;\n    private ?string $cancelOperationRequest;\n    private ?string $deleteOperationRequest;\n    private string $operationStatusMethod;\n    /** @var mixed */\n    private $operationStatusDoneValue;\n    private ?string $operationErrorCodeMethod;\n    private ?string $operationErrorMessageMethod;\n\n    /**\n     * OperationResponse constructor.\n     *\n     * @param string $operationName\n     * @param object $operationsClient\n     * @param array $options {\n     *                       Optional. Options for configuring the operation response object.\n     *\n     *     @type string $operationReturnType The return type of the longrunning operation.\n     *     @type string $metadataReturnType The type of the metadata returned in the operation response.\n     *     @type int $initialPollDelayMillis    The initial polling interval to use, in milliseconds.\n     *     @type int $pollDelayMultiplier Multiplier applied to the polling interval on each retry.\n     *     @type int $maxPollDelayMillis The maximum polling interval to use, in milliseconds.\n     *     @type int $totalPollTimeoutMillis The maximum amount of time to continue polling.\n     *     @type object $lastProtoResponse A response already received from the server.\n     *     @type string $getOperationMethod The method on $operationsClient to get the operation.\n     *     @type string $cancelOperationMethod The method on $operationsClient to cancel the operation.\n     *     @type string $deleteOperationMethod The method on $operationsClient to delete the operation.\n     *     @type string $operationStatusMethod The method on the operation to get the status.\n     *     @type string $operationStatusDoneValue The method on the operation to determine if the status is done.\n     *     @type array $additionalOperationArguments Additional arguments to pass to $operationsClient methods.\n     *     @type string $operationErrorCodeMethod The method on the operation to get the error code\n     *     @type string $operationErrorMessageMethod The method on the operation to get the error status\n     * }\n     */\n    public function __construct(string $operationName, $operationsClient, array $options = [])\n    {\n        $this->operationName = $operationName;\n        $this->operationsClient = $operationsClient;\n        $options += [\n            'operationReturnType' => null,\n            'metadataReturnType' => null,\n            'lastProtoResponse' => null,\n            'getOperationMethod' => 'getOperation',\n            'cancelOperationMethod' => 'cancelOperation',\n            'deleteOperationMethod' => 'deleteOperation',\n            'operationStatusMethod' => 'getDone',\n            'operationStatusDoneValue' => true,\n            'additionalOperationArguments' => [],\n            'operationErrorCodeMethod' => null,\n            'operationErrorMessageMethod' => null,\n            'getOperationRequest' => GetOperationRequest::class,\n            'cancelOperationRequest' => CancelOperationRequest::class,\n            'deleteOperationRequest' => DeleteOperationRequest::class,\n        ];\n        $this->operationReturnType = $options['operationReturnType'];\n        $this->metadataReturnType = $options['metadataReturnType'];\n        $this->lastProtoResponse = $options['lastProtoResponse'];\n        $this->getOperationMethod = $options['getOperationMethod'];\n        $this->cancelOperationMethod = $options['cancelOperationMethod'];\n        $this->deleteOperationMethod = $options['deleteOperationMethod'];\n        $this->additionalArgs = $options['additionalOperationArguments'];\n        $this->operationStatusMethod = $options['operationStatusMethod'];\n        $this->operationStatusDoneValue = $options['operationStatusDoneValue'];\n        $this->operationErrorCodeMethod = $options['operationErrorCodeMethod'];\n        $this->operationErrorMessageMethod = $options['operationErrorMessageMethod'];\n        $this->getOperationRequest = $options['getOperationRequest'];\n        $this->cancelOperationRequest = $options['cancelOperationRequest'];\n        $this->deleteOperationRequest = $options['deleteOperationRequest'];\n\n        if (isset($options['initialPollDelayMillis'])) {\n            $this->defaultPollSettings['initialPollDelayMillis'] = $options['initialPollDelayMillis'];\n        }\n        if (isset($options['pollDelayMultiplier'])) {\n            $this->defaultPollSettings['pollDelayMultiplier'] = $options['pollDelayMultiplier'];\n        }\n        if (isset($options['maxPollDelayMillis'])) {\n            $this->defaultPollSettings['maxPollDelayMillis'] = $options['maxPollDelayMillis'];\n        }\n        if (isset($options['totalPollTimeoutMillis'])) {\n            $this->defaultPollSettings['totalPollTimeoutMillis'] = $options['totalPollTimeoutMillis'];\n        }\n    }\n\n    /**\n     * Check whether the operation has completed.\n     *\n     * @return bool\n     */\n    public function isDone()\n    {\n        if (!$this->hasProtoResponse()) {\n            return false;\n        }\n\n        $status = call_user_func([$this->lastProtoResponse, $this->operationStatusMethod]);\n        if (is_null($status)) {\n            return false;\n        }\n\n        return $status === $this->operationStatusDoneValue;\n    }\n\n    /**\n     * Check whether the operation completed successfully. If the operation is not complete, or if the operation\n     * failed, return false.\n     *\n     * @return bool\n     */\n    public function operationSucceeded()\n    {\n        if (!$this->hasProtoResponse()) {\n            return false;\n        }\n\n        if (!$this->canHaveResult()) {\n            // For Operations which do not have a result, we consider a successful\n            // operation when the operation has completed without errors.\n            return $this->isDone() && !$this->hasErrors();\n        }\n\n        return !is_null($this->getResult());\n    }\n\n    /**\n     * Check whether the operation failed. If the operation is not complete, or if the operation\n     * succeeded, return false.\n     *\n     * @return bool\n     */\n    public function operationFailed()\n    {\n        return $this->hasErrors();\n    }\n\n    /**\n     * Get the formatted name of the operation\n     *\n     * @return string The formatted name of the operation\n     */\n    public function getName()\n    {\n        return $this->operationName;\n    }\n\n    /**\n     * Poll the server in a loop until the operation is complete.\n     *\n     * Return true if the operation completed, otherwise return false. If the\n     * $options['totalPollTimeoutMillis'] setting is not set (or set <= 0) then\n     * pollUntilComplete will continue polling until the operation completes,\n     * and therefore will always return true.\n     *\n     * @param array $options {\n     *                       Options for configuring the polling behaviour.\n     *\n     *     @type int $initialPollDelayMillis The initial polling interval to use, in milliseconds.\n     *     @type int $pollDelayMultiplier    Multiplier applied to the polling interval on each retry.\n     *     @type int $maxPollDelayMillis     The maximum polling interval to use, in milliseconds.\n     *     @type int $totalPollTimeoutMillis The maximum amount of time to continue polling, in milliseconds.\n     * }\n     * @throws ApiException If an API call fails.\n     * @throws ValidationException\n     * @return bool Indicates if the operation completed.\n     */\n    public function pollUntilComplete(array $options = [])\n    {\n        if ($this->isDone()) {\n            return true;\n        }\n\n        $pollSettings = array_merge($this->defaultPollSettings, $options);\n        return $this->poll(function () {\n            $this->reload();\n            return $this->isDone();\n        }, $pollSettings);\n    }\n\n    /**\n     * Reload the status of the operation with a request to the service.\n     *\n     * @throws ApiException If the API call fails.\n     * @throws ValidationException If called on a deleted operation.\n     */\n    public function reload()\n    {\n        if ($this->deleted) {\n            throw new ValidationException('Cannot call reload() on a deleted operation');\n        }\n\n        $requestClass = $this->isNewSurfaceOperationsClient() ? $this->getOperationRequest : null;\n        $this->lastProtoResponse = $this->operationsCall($this->getOperationMethod, $requestClass);\n    }\n\n    /**\n     * Return the result of the operation. If operationSucceeded() is false,\n     * return null.\n     *\n     * @return T|null\n     */\n    public function getResult()\n    {\n        if (!$this->hasProtoResponse()) {\n            return null;\n        }\n\n        if (!$this->canHaveResult()) {\n            return null;\n        }\n\n        if (!$this->isDone()) {\n            return null;\n        }\n\n        /** @var Any|null $anyResponse */\n        $anyResponse = $this->lastProtoResponse->getResponse();\n        if (is_null($anyResponse)) {\n            return null;\n        }\n        if (is_null($this->operationReturnType)) {\n            return $anyResponse;\n        }\n        $operationReturnType = $this->operationReturnType;\n        /** @var Message $response */\n        $response = new $operationReturnType();\n        $response->mergeFromString($anyResponse->getValue());\n        return $response;\n    }\n\n    /**\n     * If the operation failed, return the status. If operationFailed() is false, return null.\n     *\n     * @return Status|null The status of the operation in case of failure, or null if\n     *                                 operationFailed() is false.\n     */\n    public function getError()\n    {\n        if (!$this->hasProtoResponse() || !$this->isDone()) {\n            return null;\n        }\n\n        if ($this->operationErrorCodeMethod || $this->operationErrorMessageMethod) {\n            $errorCode = $this->operationErrorCodeMethod\n                ? call_user_func([$this->lastProtoResponse, $this->operationErrorCodeMethod])\n                : null;\n            $errorMessage = $this->operationErrorMessageMethod\n                ? call_user_func([$this->lastProtoResponse, $this->operationErrorMessageMethod])\n                : null;\n            return (new Status())\n                ->setCode(ApiStatus::rpcCodeFromHttpStatusCode($errorCode))\n                ->setMessage($errorMessage);\n        }\n\n        if (method_exists($this->lastProtoResponse, 'getError')) {\n            return $this->lastProtoResponse->getError();\n        }\n\n        return null;\n    }\n\n    /**\n     * Get an array containing the values of 'operationReturnType', 'metadataReturnType', and\n     * the polling options `initialPollDelayMillis`, `pollDelayMultiplier`, `maxPollDelayMillis`,\n     * and `totalPollTimeoutMillis`. The array can be passed as the $options argument to the\n     * constructor when creating another OperationResponse object.\n     *\n     * @return array\n     */\n    public function getDescriptorOptions()\n    {\n        return [\n            'operationReturnType' => $this->operationReturnType,\n            'metadataReturnType' => $this->metadataReturnType,\n        ] + $this->defaultPollSettings;\n    }\n\n    /**\n     * @return Operation|mixed|null The last Operation object received from the server.\n     */\n    public function getLastProtoResponse()\n    {\n        return $this->lastProtoResponse;\n    }\n\n    /**\n     * @return object The OperationsClient object used to make\n     * requests to the operations API.\n     */\n    public function getOperationsClient()\n    {\n        return $this->operationsClient;\n    }\n\n    /**\n     * Cancel the long-running operation.\n     *\n     * For operations of type Google\\LongRunning\\Operation, this method starts\n     * asynchronous cancellation on a long-running operation. The server\n     * makes a best effort to cancel the operation, but success is not\n     * guaranteed. If the server doesn't support this method, it will throw an\n     * ApiException with code \\Google\\Rpc\\Code::UNIMPLEMENTED. Clients can continue\n     * to use reload and pollUntilComplete methods to check whether the cancellation\n     * succeeded or whether the operation completed despite cancellation.\n     * On successful cancellation, the operation is not deleted; instead, it becomes\n     * an operation with a getError() value with a \\Google\\Rpc\\Status code of 1,\n     * corresponding to \\Google\\Rpc\\Code::CANCELLED.\n     *\n     * @throws ApiException If the API call fails.\n     * @throws LogicException If the API call method has not been configured\n     */\n    public function cancel()\n    {\n        if (is_null($this->cancelOperationMethod)) {\n            throw new LogicException('The cancel operation is not supported by this API');\n        }\n\n        $requestClass = $this->isNewSurfaceOperationsClient() ? $this->cancelOperationRequest : null;\n        $this->operationsCall($this->cancelOperationMethod, $requestClass);\n    }\n\n    /**\n     * Delete the long-running operation.\n     *\n     * For operations of type Google\\LongRunning\\Operation, this method\n     * indicates that the client is no longer interested in the operation result.\n     * It does not cancel the operation. If the server doesn't support this method,\n     * it will throw an ApiException with code \\Google\\Rpc\\Code::UNIMPLEMENTED.\n     *\n     * @throws ApiException If the API call fails.\n     * @throws LogicException If the API call method has not been configured\n     */\n    public function delete()\n    {\n        if (is_null($this->deleteOperationMethod)) {\n            throw new LogicException('The delete operation is not supported by this API');\n        }\n\n        $requestClass = $this->isNewSurfaceOperationsClient() ? $this->deleteOperationRequest : null;\n        $this->operationsCall($this->deleteOperationMethod, $requestClass);\n        $this->deleted = true;\n    }\n\n    /**\n     * Get the metadata returned with the last proto response. If a metadata type was provided, then\n     * the return value will be of that type - otherwise, the return value will be of type Any. If\n     * no metadata object is available, returns null.\n     *\n     * @return mixed The metadata returned from the server in the last response.\n     */\n    public function getMetadata()\n    {\n        if (!$this->hasProtoResponse()) {\n            return null;\n        }\n\n        if (!method_exists($this->lastProtoResponse, 'getMetadata')) {\n            // The call to getMetadata is only for OnePlatform LROs, and is not\n            // supported by other LRO GAPIC clients (e.g. Compute)\n            return null;\n        }\n\n        /** @var Any|null $any */\n        $any = $this->lastProtoResponse->getMetadata();\n        if (is_null($this->metadataReturnType)) {\n            return $any;\n        }\n        if (is_null($any)) {\n            return null;\n        }\n        // @TODO: This is probably not doing anything and can be removed in the next release.\n        if (is_null($any->getValue())) {\n            return null;\n        }\n        $metadataReturnType = $this->metadataReturnType;\n        /** @var Message $metadata */\n        $metadata = new $metadataReturnType();\n        $metadata->mergeFromString($any->getValue());\n        return $metadata;\n    }\n\n    /**\n     * Call the operations client to perform an operation.\n     *\n     * @param string $method The method to call on the operations client.\n     * @param string|null $requestClass The request class to use for the call.\n     *                                  Will be null for legacy operations clients.\n     */\n    private function operationsCall(string $method, ?string $requestClass)\n    {\n        // V1 GAPIC clients have an empty $requestClass\n        if (empty($requestClass)) {\n            if ($this->additionalArgs) {\n                return $this->operationsClient->$method(\n                    $this->getName(),\n                    ...array_values($this->additionalArgs)\n                );\n            }\n            return $this->operationsClient->$method($this->getName());\n        }\n\n        if (!method_exists($requestClass, 'build')) {\n            throw new LogicException('Request class must support the static build method');\n        }\n        // In V2 of Compute, the Request \"build\" methods contain the operation ID last instead\n        // of first. Compute is the only API which uses $additionalArgs, so switching the order\n        // will not break anything.\n        $request = $requestClass::build(...array_merge(\n            array_values($this->additionalArgs),\n            [$this->getName()]\n        ));\n        return $this->operationsClient->$method($request);\n    }\n\n    private function canHaveResult()\n    {\n        // The call to getResponse is only for OnePlatform LROs, and is not\n        // supported by other LRO GAPIC clients (e.g. Compute)\n        return method_exists($this->lastProtoResponse, 'getResponse');\n    }\n\n    private function hasErrors()\n    {\n        if (!$this->hasProtoResponse()) {\n            return false;\n        }\n\n        if (method_exists($this->lastProtoResponse, 'getError')) {\n            return !empty($this->lastProtoResponse->getError());\n        }\n\n        if ($this->operationErrorCodeMethod) {\n            $errorCode = call_user_func([$this->lastProtoResponse, $this->operationErrorCodeMethod]);\n            return !empty($errorCode);\n        }\n\n        // This should never happen unless an API is misconfigured\n        throw new LogicException('Unable to determine operation error status for this service');\n    }\n\n    private function hasProtoResponse()\n    {\n        return !is_null($this->lastProtoResponse);\n    }\n\n    private function isNewSurfaceOperationsClient(): bool\n    {\n        return !$this->operationsClient instanceof LegacyOperationsClient\n            && false !== strpos(get_class($this->operationsClient), self::NEW_CLIENT_NAMESPACE);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/CallOptions.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options;\n\nuse ArrayAccess;\nuse Google\\ApiCore\\CredentialsWrapper;\nuse Google\\ApiCore\\RetrySettings;\n\n/**\n * The CallOptions class provides typing to the associative array of options\n * passed to transport RPC methods. See\n * {@see \\Google\\ApiCore\\Transport\\TransportInterface::startUnaryCall()},\n * {@see \\Google\\ApiCore\\Transport\\TransportInterface::startBidiStreamingCall()},\n * {@see \\Google\\ApiCore\\Transport\\TransportInterface::startClientStreamingCall()}, and\n * {@see \\Google\\ApiCore\\Transport\\TransportInterface::startServerStreamingCall()}.\n */\nclass CallOptions implements ArrayAccess, OptionsInterface\n{\n    use OptionsTrait;\n\n    private array $headers;\n    private ?int $timeoutMillis;\n    private array $transportOptions;\n\n    /** @var RetrySettings|array|null $retrySettings */\n    private $retrySettings;\n\n    /**\n     * @param array $options {\n     *     Call options\n     *\n     *     @type array<string, array<string>> $headers\n     *           Key-value array containing headers.\n     *     @type int $timeoutMillis\n     *           The timeout in milliseconds for the call.\n     *     @type array $transportOptions\n     *           Transport-specific call options. See {@see CallOptions::setTransportOptions}.\n     *     @type RetrySettings|array $retrySettings\n     *           A retry settings override for the call. If $retrySettings is an\n     *           array, the settings will be merged with the method's default\n     *           retry settings. If $retrySettings is a RetrySettings object,\n     *           that object will be used instead of the method defaults.\n     * }\n     */\n    public function __construct(array $options)\n    {\n        $this->fromArray($options);\n    }\n\n    /**\n     * Sets the array of options as class properites.\n     *\n     * @param array $arr See the constructor for the list of supported options.\n     */\n    private function fromArray(array $arr): void\n    {\n        $this->setHeaders($arr['headers'] ?? []);\n        $this->setTimeoutMillis($arr['timeoutMillis'] ?? null);\n        $this->setTransportOptions($arr['transportOptions'] ?? []);\n        $this->setRetrySettings($arr['retrySettings'] ?? null);\n    }\n\n    /**\n     * @param array $headers\n     */\n    public function setHeaders(array $headers): self\n    {\n        $this->headers = $headers;\n\n        return $this;\n    }\n\n    /**\n     * @param int|null $timeoutMillis\n     */\n    public function setTimeoutMillis(?int $timeoutMillis): self\n    {\n        $this->timeoutMillis = $timeoutMillis;\n\n        return $this;\n    }\n\n    /**\n     * @param array $transportOptions {\n     *     Transport-specific call-time options.\n     *\n     *     @type array $grpcOptions\n     *           Key-value pairs for gRPC-specific options passed as the `$options` argument to {@see \\Grpc\\BaseStub}\n     *           request methods. Current options are `call_credentials_callback` and `timeout`.\n     *           **NOTE**: This library sets `call_credentials_callback` using {@see CredentialsWrapper}, and `timeout`\n     *           using the `timeoutMillis` call option, so these options are not very useful.\n     *     @type array $grpcFallbackOptions\n     *           Key-value pairs for gRPC fallback specific options passed as the `$options` argument to the\n     *           `$httpHandler` callable. By default these are passed to {@see \\GuzzleHttp\\Client} as request options.\n     *           See {@link https://docs.guzzlephp.org/en/stable/request-options.html}.\n     *     @type array $restOptions\n     *           Key-value pairs for REST-specific options passed as the `$options` argument to the `$httpHandler`\n     *           callable. By default these are passed to {@see \\GuzzleHttp\\Client} as request options.\n     *           See {@link https://docs.guzzlephp.org/en/stable/request-options.html}.\n     * }\n     */\n    public function setTransportOptions(array $transportOptions): self\n    {\n        $this->transportOptions = $transportOptions;\n\n        return $this;\n    }\n\n    /**\n     * @deprecated use CallOptions::setTransportOptions\n     */\n    public function setTransportSpecificOptions(array $transportSpecificOptions): self\n    {\n        $this->setTransportOptions($transportSpecificOptions);\n\n        return $this;\n    }\n\n    /**\n     * @param RetrySettings|array|null $retrySettings\n     *\n     * @return $this\n     */\n    public function setRetrySettings($retrySettings): self\n    {\n        $this->retrySettings = $retrySettings;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/ClientOptions.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options;\n\nuse ArrayAccess;\nuse Closure;\nuse Google\\ApiCore\\CredentialsWrapper;\nuse Google\\ApiCore\\Transport\\TransportInterface;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse InvalidArgumentException;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * The ClientOptions class adds typing to the associative array of options\n * passed into each API client constructor. To use this class directly, pass\n * the result of {@see \\Google\\ApiCore\\Options\\ClientOptions::toArray()} to the\n * client constructor:\n *\n * ```\n * use Google\\ApiCore\\ClientOptions;\n * use Google\\Cloud\\SecretManager\\Client\\SecretManagerClient;\n *\n * $options = new ClientOptions([\n *     'credentials' => '/path/to/my/credentials.json'\n * ]);\n * $secretManager = new SecretManagerClient($options->toArray());\n * ```\n *\n * Note: It's possible to pass an associative array to the API clients as well,\n * as ClientOptions will still be used internally for validation.\n */\nclass ClientOptions implements ArrayAccess, OptionsInterface\n{\n    use OptionsTrait;\n\n    private ?string $apiEndpoint;\n\n    private bool $disableRetries;\n\n    private array $clientConfig;\n\n    /** @var string|array|FetchAuthTokenInterface|CredentialsWrapper|null */\n    private $credentials;\n\n    private array $credentialsConfig;\n\n    /** @var string|TransportInterface|null $transport */\n    private $transport;\n\n    private TransportOptions $transportConfig;\n\n    private ?string $versionFile;\n\n    private ?string $descriptorsConfigPath;\n\n    private ?string $serviceName;\n\n    private ?string $libName;\n\n    private ?string $libVersion;\n\n    private ?string $gapicVersion;\n\n    private ?Closure $clientCertSource;\n\n    private ?string $universeDomain;\n\n    private ?string $apiKey;\n\n    private null|false|LoggerInterface $logger;\n\n    /**\n     * @param array $options {\n     *     @type string $apiEndpoint\n     *           The address of the API remote host, for example \"example.googleapis.com. May also\n     *           include the port, for example \"example.googleapis.com:443\"\n     *     @type bool $disableRetries\n     *           Determines whether or not retries defined by the client configuration should be\n     *           disabled. Defaults to `false`.\n     *     @type string|array $clientConfig\n     *           Client method configuration, including retry settings. This option can be either a\n     *           path to a JSON file, or a PHP array containing the decoded JSON data.\n     *           By default this settings points to the default client config file, which is provided\n     *           in the resources folder.\n     *     @type FetchAuthTokenInterface|CredentialsWrapper $credentials\n     *           This option should only be used with a pre-constructed \\Google\\Auth\\FetchAuthTokenInterface\n     *           object or \\Google\\ApiCore\\CredentialsWrapper object. Note that when one of these objects\n     *           are provided, any settings in $authConfig will be ignored.\n     *           **Important**: If you are providing a path to a credentials file, or a decoded credentials\n     *           file as a PHP array, this usage is now DEPRECATED. Providing an unvalidated credential\n     *           configuration to Google APIs can compromise the security of your systems and data. It is now\n     *           recommended to create the credentials explicitly:\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           use Google\\ApiCore\\Options\\ClientOptions;\n     *           $creds = new ServiceAccountCredentials($scopes, $json);\n     *           $options = new ClientOptions(['credentials' => $creds]);\n     *           ```\n     *           For more information\n     *           {@see https://cloud.google.com/docs/authentication/external/externally-sourced-credentials}\n     *     @type array $credentialsConfig\n     *           Options used to configure credentials, including auth token caching, for the client.\n     *           For a full list of supporting configuration options, see\n     *           \\Google\\ApiCore\\CredentialsWrapper::build.\n     *     @type string|TransportInterface|null $transport\n     *           The transport used for executing network requests. May be either the string `rest`,\n     *           `grpc`, or 'grpc-fallback'. Defaults to `grpc` if gRPC support is detected on the system.\n     *           *Advanced usage*: Additionally, it is possible to pass in an already instantiated\n     *           TransportInterface object. Note that when this objects is provided, any settings in\n     *           $transportConfig, and any `$apiEndpoint` setting, will be ignored.\n     *     @type array $transportConfig\n     *           Configuration options that will be used to construct the transport. Options for\n     *           each supported transport type should be passed in a key for that transport. For\n     *           example:\n     *           $transportConfig = [\n     *               'grpc' => [...],\n     *               'rest' => [...],\n     *               'grpc-fallback' => [...],\n     *           ];\n     *           See the GrpcTransport::build and RestTransport::build\n     *           methods for the supported options.\n     *     @type string $versionFile\n     *           The path to a file which contains the current version of the client.\n     *     @type string $descriptorsConfigPath\n     *           The path to a descriptor configuration file.\n     *     @type string $serviceName\n     *           The name of the service.\n     *     @type string $libName\n     *           The name of the client application.\n     *     @type string $libVersion\n     *           The version of the client application.\n     *     @type string $gapicVersion\n     *           The code generator version of the GAPIC library.\n     *     @type callable $clientCertSource\n     *           A callable which returns the client cert as a string.\n     *     @type string $universeDomain\n     *           The default service domain for a given Cloud universe.\n     *     @type string $apiKey\n     *          The API key to be used for the client.\n     *     @type null|false|LoggerInterface\n     *           A PSR-3 compliant logger.\n     * }\n     */\n    public function __construct(array $options)\n    {\n        $this->fromArray($options);\n    }\n\n    /**\n     * Sets the array of options as class properites.\n     *\n     * @param array $arr See the constructor for the list of supported options.\n     */\n    private function fromArray(array $arr): void\n    {\n        $this->setApiEndpoint($arr['apiEndpoint'] ?? null);\n        $this->setDisableRetries($arr['disableRetries'] ?? false);\n        $this->setClientConfig($arr['clientConfig'] ?? []);\n        $this->setCredentials($arr['credentials'] ?? null);\n        $this->setCredentialsConfig($arr['credentialsConfig'] ?? []);\n        $this->setTransport($arr['transport'] ?? null);\n        $this->setTransportConfig(new TransportOptions($arr['transportConfig'] ?? []));\n        $this->setVersionFile($arr['versionFile'] ?? null);\n        $this->setDescriptorsConfigPath($arr['descriptorsConfigPath'] ?? null);\n        $this->setServiceName($arr['serviceName'] ?? null);\n        $this->setLibName($arr['libName'] ?? null);\n        $this->setLibVersion($arr['libVersion'] ?? null);\n        $this->setGapicVersion($arr['gapicVersion'] ?? null);\n        $this->setClientCertSource($arr['clientCertSource'] ?? null);\n        $this->setUniverseDomain($arr['universeDomain'] ?? null);\n        $this->setApiKey($arr['apiKey'] ?? null);\n        $this->setLogger($arr['logger'] ?? null);\n    }\n\n    /**\n     * @param ?string $apiEndpoint\n     *\n     * @return $this\n     */\n    public function setApiEndpoint(?string $apiEndpoint): self\n    {\n        $this->apiEndpoint = $apiEndpoint;\n\n        return $this;\n    }\n\n    /**\n     * @param bool $disableRetries\n     *\n     * @return $this\n     */\n    public function setDisableRetries(bool $disableRetries): self\n    {\n        $this->disableRetries = $disableRetries;\n\n        return $this;\n    }\n\n    /**\n     * @param string|array $clientConfig\n     *\n     * @return $this\n     * @throws InvalidArgumentException\n     */\n    public function setClientConfig($clientConfig): self\n    {\n        if (is_string($clientConfig)) {\n            $this->clientConfig = json_decode(file_get_contents($clientConfig), true);\n        } elseif (is_array($clientConfig)) {\n            $this->clientConfig = $clientConfig;\n        } else {\n            throw new InvalidArgumentException('Invalid client config');\n        }\n\n        return $this;\n    }\n\n    /**\n     * @param string|array|FetchAuthTokenInterface|CredentialsWrapper|null $credentials\n     *\n     * @return $this\n     */\n    public function setCredentials($credentials): self\n    {\n        $this->credentials = $credentials;\n\n        return $this;\n    }\n\n    /**\n     * @param array $credentialsConfig\n     *\n     * @return $this\n     */\n    public function setCredentialsConfig(array $credentialsConfig): self\n    {\n        $this->credentialsConfig = $credentialsConfig;\n\n        return $this;\n    }\n\n    /**\n     * @param string|TransportInterface|null $transport\n     *\n     * @return $this\n     */\n    public function setTransport($transport): self\n    {\n        $this->transport = $transport;\n\n        return $this;\n    }\n\n    /**\n     * @param TransportOptions $transportConfig\n     *\n     * @return $this\n     */\n    public function setTransportConfig(TransportOptions $transportConfig): self\n    {\n        $this->transportConfig = $transportConfig;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $versionFile\n     *\n     * @return $this\n     */\n    public function setVersionFile(?string $versionFile): self\n    {\n        $this->versionFile = $versionFile;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $descriptorsConfigPath\n     *\n     * @return $this\n     */\n    private function setDescriptorsConfigPath(?string $descriptorsConfigPath): self\n    {\n        if (!is_null($descriptorsConfigPath)) {\n            self::validateFileExists($descriptorsConfigPath);\n        }\n        $this->descriptorsConfigPath = $descriptorsConfigPath;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $serviceName\n     *\n     * @return $this\n     */\n    public function setServiceName(?string $serviceName): self\n    {\n        $this->serviceName = $serviceName;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $libName\n     *\n     * @return $this\n     */\n    public function setLibName(?string $libName): self\n    {\n        $this->libName = $libName;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $libVersion\n     *\n     * @return $this\n     */\n    public function setLibVersion(?string $libVersion): self\n    {\n        $this->libVersion = $libVersion;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $gapicVersion\n     *\n     * @return $this\n     */\n    public function setGapicVersion(?string $gapicVersion): self\n    {\n        $this->gapicVersion = $gapicVersion;\n\n        return $this;\n    }\n\n    /**\n     * @param ?callable $clientCertSource\n     *\n     * @return $this\n     */\n    public function setClientCertSource(?callable $clientCertSource): self\n    {\n        if (!is_null($clientCertSource)) {\n            $clientCertSource = Closure::fromCallable($clientCertSource);\n        }\n        $this->clientCertSource = $clientCertSource;\n\n        return $this;\n    }\n\n    /**\n     * @param string $universeDomain\n     *\n     * @return $this\n     */\n    public function setUniverseDomain(?string $universeDomain): self\n    {\n        $this->universeDomain = $universeDomain;\n\n        return $this;\n    }\n\n    /**\n     * @param string $apiKey\n     *\n     * @return $this\n     */\n    public function setApiKey(?string $apiKey): self\n    {\n        $this->apiKey = $apiKey;\n\n        return $this;\n    }\n\n    /**\n     * @param null|false|LoggerInterface $logger\n     *\n     * @return $this\n     */\n    public function setLogger(null|false|LoggerInterface $logger): self\n    {\n        $this->logger = $logger;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/OptionsInterface.php",
    "content": "<?php\n/*\n * Copyright 2025 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options;\n\ninterface OptionsInterface\n{\n    public function toArray(): array;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/OptionsTrait.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options;\n\nuse BadMethodCallException;\nuse Google\\ApiCore\\ValidationException;\n\n/**\n * Trait implemented by any class representing an associative array of PHP options.\n * This provides validation and typehinting to loosely typed associative arrays.\n */\ntrait OptionsTrait\n{\n    /**\n     * @param string $filePath\n     * @throws ValidationException\n     */\n    private static function validateFileExists(string $filePath)\n    {\n        if (!file_exists($filePath)) {\n            throw new ValidationException(\"Could not find specified file: $filePath\");\n        }\n    }\n\n    public function offsetExists($offset): bool\n    {\n        return isset($this->$offset);\n    }\n\n    /**\n     * @return mixed\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetGet($offset)\n    {\n        return $this->$offset;\n    }\n\n    /**\n     * @throws BadMethodCallException\n     */\n    public function offsetSet($offset, $value): void\n    {\n        throw new BadMethodCallException('Cannot set options through array access. Use the setters instead');\n    }\n\n    /**\n     * @throws BadMethodCallException\n     */\n    public function offsetUnset($offset): void\n    {\n        throw new BadMethodCallException('Cannot unset options through array access. Use the setters instead');\n    }\n\n    public function toArray(): array\n    {\n        $arr = [];\n        foreach (get_object_vars($this) as $key => $value) {\n            $arr[$key] = $value instanceof OptionsInterface\n                 ? $value->toArray()\n                 : $value;\n        }\n        return $arr;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/TransportOptions/GrpcFallbackTransportOptions.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options\\TransportOptions;\n\nuse ArrayAccess;\nuse Closure;\nuse Google\\ApiCore\\Options\\OptionsInterface;\nuse Google\\ApiCore\\Options\\OptionsTrait;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * The GrpcFallbackTransportOptions class provides typing to the associative array of options used\n * to configure {@see \\Google\\ApiCore\\Transport\\GrpcFallbackTransport}.\n */\nclass GrpcFallbackTransportOptions implements ArrayAccess, OptionsInterface\n{\n    use OptionsTrait;\n\n    private ?Closure $clientCertSource;\n\n    private ?Closure $httpHandler;\n\n    private null|false|LoggerInterface $logger;\n\n    /**\n     * @param array $options {\n     *    Config options used to construct the gRPC Fallback transport.\n     *\n     *    @type callable $clientCertSource\n     *          A callable which returns the client cert as a string.\n     *    @type callable $httpHandler\n     *          A handler used to deliver PSR-7 requests.\n     *    @type null|false|LoggerInterface\n     *          A PSR-3 logger interface instance.\n     * }\n     */\n    public function __construct(array $options)\n    {\n        $this->fromArray($options);\n    }\n\n    /**\n     * Sets the array of options as class properites.\n     *\n     * @param array $arr See the constructor for the list of supported options.\n     */\n    private function fromArray(array $arr): void\n    {\n        $this->setClientCertSource($arr['clientCertSource'] ?? null);\n        $this->setHttpHandler($arr['httpHandler'] ?? null);\n        $this->setLogger($arr['logger'] ?? null);\n    }\n\n    /**\n     * @param ?callable $httpHandler\n     *\n     * @return $this\n     */\n    public function setHttpHandler(?callable $httpHandler): self\n    {\n        if (!is_null($httpHandler)) {\n            $httpHandler = Closure::fromCallable($httpHandler);\n        }\n        $this->httpHandler = $httpHandler;\n\n        return $this;\n    }\n\n    /**\n     * @param ?callable $clientCertSource\n     *\n     * @return $this\n     */\n    public function setClientCertSource(?callable $clientCertSource): self\n    {\n        if (!is_null($clientCertSource)) {\n            $clientCertSource = Closure::fromCallable($clientCertSource);\n        }\n        $this->clientCertSource = $clientCertSource;\n\n        return $this;\n    }\n\n    /**\n     * @param null|false|LoggerInterface $logger\n     *\n     * @return $this\n     */\n    public function setLogger(null|false|LoggerInterface $logger): self\n    {\n        $this->logger = $logger;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/TransportOptions/GrpcTransportOptions.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options\\TransportOptions;\n\nuse ArrayAccess;\nuse Closure;\nuse Google\\ApiCore\\Options\\OptionsInterface;\nuse Google\\ApiCore\\Options\\OptionsTrait;\nuse Google\\ApiCore\\Transport\\Grpc\\UnaryInterceptorInterface;\nuse Grpc\\Channel;\nuse Grpc\\Interceptor;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * The GrpcTransportOptions class provides typing to the associative array of options used to\n * configure {@see \\Google\\ApiCore\\Transport\\GrpcTransport}.\n */\nclass GrpcTransportOptions implements ArrayAccess, OptionsInterface\n{\n    use OptionsTrait;\n\n    private array $stubOpts;\n\n    private ?Channel $channel;\n\n    private null|false|LoggerInterface $logger;\n\n    /**\n     * @var Interceptor[]|UnaryInterceptorInterface[]\n     */\n    private array $interceptors;\n\n    private ?Closure $clientCertSource;\n\n    /**\n     * @param array $options {\n     *    Config options used to construct the gRPC transport.\n     *\n     *    @type array $stubOpts Options used to construct the gRPC stub (see\n     *          {@link https://grpc.github.io/grpc/core/group__grpc__arg__keys.html}).\n     *    @type Channel $channel Grpc channel to be used.\n     *    @type Interceptor[]|UnaryInterceptorInterface[] $interceptors *EXPERIMENTAL*\n     *          Interceptors used to intercept RPC invocations before a call starts.\n     *          Please note that implementations of\n     *          {@see \\Google\\ApiCore\\Transport\\Grpc\\UnaryInterceptorInterface} are\n     *          considered deprecated and support will be removed in a future\n     *          release. To prepare for this, please take the time to convert\n     *          `UnaryInterceptorInterface` implementations over to a class which\n     *          extends {@see Grpc\\Interceptor}.\n     *    @type callable $clientCertSource A callable which returns the client cert as a string.\n     *    @type null|false|LoggerInterface A PSR-3 Logger Interface.\n     * }\n     */\n    public function __construct(array $options)\n    {\n        $this->fromArray($options);\n    }\n\n    /**\n     * Sets the array of options as class properites.\n     *\n     * @param array $arr See the constructor for the list of supported options.\n     */\n    private function fromArray(array $arr): void\n    {\n        $this->setStubOpts($arr['stubOpts'] ?? []);\n        $this->setChannel($arr['channel'] ?? null);\n        $this->setInterceptors($arr['interceptors'] ?? []);\n        $this->setClientCertSource($arr['clientCertSource'] ?? null);\n        $this->setLogger($arr['logger'] ?? null);\n    }\n\n    /**\n     * @param array $stubOpts\n     *\n     * @return $this\n     */\n    public function setStubOpts(array $stubOpts): self\n    {\n        $this->stubOpts = $stubOpts;\n\n        return $this;\n    }\n\n    /**\n     * @param ?Channel $channel\n     *\n     * @return $this\n     */\n    public function setChannel(?Channel $channel): self\n    {\n        $this->channel = $channel;\n\n        return $this;\n    }\n\n    /**\n     * @param Interceptor[]|UnaryInterceptorInterface[] $interceptors\n     *\n     * @return $this\n     */\n    public function setInterceptors(array $interceptors): self\n    {\n        $this->interceptors = $interceptors;\n\n        return $this;\n    }\n\n    /**\n     * @param ?callable $clientCertSource\n     *\n     * @return $this\n     */\n    public function setClientCertSource(?callable $clientCertSource): self\n    {\n        if (!is_null($clientCertSource)) {\n            $clientCertSource = Closure::fromCallable($clientCertSource);\n        }\n        $this->clientCertSource = $clientCertSource;\n\n        return $this;\n    }\n\n    /**\n     * @param null|false|LoggerInterface $logger\n     *\n     * @return $this\n     */\n    public function setLogger(null|false|LoggerInterface $logger): self\n    {\n        $this->logger = $logger;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/TransportOptions/RestTransportOptions.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options\\TransportOptions;\n\nuse ArrayAccess;\nuse Closure;\nuse Google\\ApiCore\\Options\\OptionsInterface;\nuse Google\\ApiCore\\Options\\OptionsTrait;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * The RestTransportOptions class provides typing to the associative array of options used to\n * configure {@see \\Google\\ApiCore\\Transport\\RestTransport}.\n */\nclass RestTransportOptions implements ArrayAccess, OptionsInterface\n{\n    use OptionsTrait;\n\n    private ?Closure $httpHandler;\n\n    private ?Closure $clientCertSource;\n\n    private ?string $restClientConfigPath;\n\n    private null|false|LoggerInterface $logger;\n\n    /**\n     * @param array $options {\n     *    Config options used to construct the REST transport.\n     *\n     *    @type callable $httpHandler\n     *          A handler used to deliver PSR-7 requests.\n     *    @type callable $clientCertSource\n     *          A callable which returns the client cert as a string.\n     *    @type string $restClientConfigPath\n     *          The path to the REST client config file.\n     *    @typo null|false|LoggerInterface\n     *          A PSR-3 compliant logger instance.\n     * }\n     */\n    public function __construct(array $options)\n    {\n        $this->fromArray($options);\n    }\n\n    /**\n     * Sets the array of options as class properites.\n     *\n     * @param array $arr See the constructor for the list of supported options.\n     */\n    private function fromArray(array $arr): void\n    {\n        $this->setHttpHandler($arr['httpHandler'] ?? null);\n        $this->setClientCertSource($arr['clientCertSource'] ?? null);\n        $this->setRestClientConfigPath($arr['restClientConfigPath'] ?? null);\n        $this->setLogger($arr['logger'] ?? null);\n    }\n\n    /**\n     * @param ?callable $httpHandler\n     *\n     * @return $this\n     */\n    public function setHttpHandler(?callable $httpHandler): self\n    {\n        if (!is_null($httpHandler)) {\n            $httpHandler = Closure::fromCallable($httpHandler);\n        }\n        $this->httpHandler = $httpHandler;\n\n        return $this;\n    }\n\n    /**\n     * @param ?callable $clientCertSource\n     *\n     * @return $this\n     */\n    public function setClientCertSource(?callable $clientCertSource): self\n    {\n        if (!is_null($clientCertSource)) {\n            $clientCertSource = Closure::fromCallable($clientCertSource);\n        }\n        $this->clientCertSource = $clientCertSource;\n\n        return $this;\n    }\n\n    /**\n     * @param ?string $restClientConfigPath\n     *\n     * @return $this\n     */\n    public function setRestClientConfigPath(?string $restClientConfigPath): self\n    {\n        $this->restClientConfigPath = $restClientConfigPath;\n\n        return $this;\n    }\n\n    /**\n     * @param null|false|LoggerInterface $logger\n     *\n     * @return $this\n     */\n    public function setLogger(null|false|LoggerInterface $logger): self\n    {\n        $this->logger = $logger;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Options/TransportOptions.php",
    "content": "<?php\n/*\n * Copyright 2023 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Options;\n\nuse ArrayAccess;\nuse Google\\ApiCore\\Options\\TransportOptions\\GrpcFallbackTransportOptions;\nuse Google\\ApiCore\\Options\\TransportOptions\\GrpcTransportOptions;\nuse Google\\ApiCore\\Options\\TransportOptions\\RestTransportOptions;\n\nclass TransportOptions implements ArrayAccess, OptionsInterface\n{\n    use OptionsTrait;\n\n    private GrpcTransportOptions $grpc;\n\n    private GrpcFallbackTransportOptions $grpcFallback;\n\n    private RestTransportOptions $rest;\n\n    /**\n     * @param array $options {\n     *    Config options used to construct the transport.\n     *\n     *    @type array $grpc\n     *    @type array $grpcFallback\n     *    @type array $rest\n     * }\n     */\n    public function __construct(array $options)\n    {\n        $this->fromArray($options);\n    }\n\n    /**\n     * Sets the array of options as class properites.\n     *\n     * @param array $arr See the constructor for the list of supported options.\n     */\n    private function fromArray(array $arr): void\n    {\n        $this->setGrpc(new GrpcTransportOptions($arr['grpc'] ?? []));\n        $this->setGrpcFallback(new GrpcFallbackTransportOptions($arr['grpc-fallback'] ?? []));\n        $this->setRest(new RestTransportOptions($arr['rest'] ?? []));\n    }\n\n    /**\n     * @param GrpcTransportOptions $grpc\n     *\n     * @return $this\n     */\n    public function setGrpc(GrpcTransportOptions $grpc): self\n    {\n        $this->grpc = $grpc;\n\n        return $this;\n    }\n\n    /**\n     * @param GrpcFallbackTransportOptions $grpcFallback\n     *\n     * @return $this\n     */\n    public function setGrpcFallback(GrpcFallbackTransportOptions $grpcFallback): self\n    {\n        $this->grpcFallback = $grpcFallback;\n\n        return $this;\n    }\n\n    /**\n     * @param RestTransportOptions $rest\n     *\n     * @return $this\n     */\n    public function setRest(RestTransportOptions $rest): self\n    {\n        $this->rest = $rest;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Page.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Generator;\nuse Google\\Protobuf\\Internal\\MapField;\nuse Google\\Protobuf\\Internal\\Message;\nuse IteratorAggregate;\n\n/**\n * A Page object wraps an API list method response and provides methods\n * to retrieve additional pages using the page token.\n */\nclass Page implements IteratorAggregate\n{\n    const FINAL_PAGE_TOKEN = '';\n\n    private $call;\n    private $callable;\n    private $options;\n    private $pageStreamingDescriptor;\n\n    private $pageToken; // @phpstan-ignore-line\n\n    private $response;\n\n    /**\n     * Page constructor.\n     *\n     * @param Call $call\n     * @param array $options\n     * @param callable $callable\n     * @param PageStreamingDescriptor $pageStreamingDescriptor\n     * @param Message $response\n     */\n    public function __construct(\n        Call $call,\n        array $options,\n        callable $callable,\n        PageStreamingDescriptor $pageStreamingDescriptor,\n        Message $response\n    ) {\n        $this->call = $call;\n        $this->options = $options;\n        $this->callable = $callable;\n        $this->pageStreamingDescriptor = $pageStreamingDescriptor;\n        $this->response = $response;\n\n        $requestPageTokenGetMethod = $this->pageStreamingDescriptor->getRequestPageTokenGetMethod();\n        $this->pageToken = $this->call->getMessage()->$requestPageTokenGetMethod();\n    }\n\n    /**\n     * Returns true if there are more pages that can be retrieved from the\n     * API.\n     *\n     * @return bool\n     */\n    public function hasNextPage()\n    {\n        return strcmp($this->getNextPageToken(), Page::FINAL_PAGE_TOKEN) != 0;\n    }\n\n    /**\n     * Returns the next page token from the response.\n     *\n     * @return string\n     */\n    public function getNextPageToken()\n    {\n        $responsePageTokenGetMethod = $this->pageStreamingDescriptor->getResponsePageTokenGetMethod();\n        return $this->getResponseObject()->$responsePageTokenGetMethod();\n    }\n\n    /**\n     * Retrieves the next Page object using the next page token.\n     *\n     * @param int|null $pageSize\n     * @throws ValidationException if there are no pages remaining, or if pageSize is supplied but\n     * is not supported by the API\n     * @throws ApiException if the call to fetch the next page fails.\n     * @return Page\n     */\n    public function getNextPage(?int $pageSize = null)\n    {\n        if (!$this->hasNextPage()) {\n            throw new ValidationException(\n                'Could not complete getNextPage operation: ' .\n                'there are no more pages to retrieve.'\n            );\n        }\n\n        $oldRequest = $this->getRequestObject();\n        $requestClass = get_class($oldRequest);\n        $newRequest = new $requestClass();\n        $newRequest->mergeFrom($oldRequest);\n\n        $requestPageTokenSetMethod = $this->pageStreamingDescriptor->getRequestPageTokenSetMethod();\n        $newRequest->$requestPageTokenSetMethod($this->getNextPageToken());\n\n        if (isset($pageSize)) {\n            if (!$this->pageStreamingDescriptor->requestHasPageSizeField()) {\n                throw new ValidationException(\n                    'pageSize argument was defined, but the method does not ' .\n                    'support a page size parameter in the optional array argument'\n                );\n            }\n            $requestPageSizeSetMethod = $this->pageStreamingDescriptor->getRequestPageSizeSetMethod();\n            $newRequest->$requestPageSizeSetMethod($pageSize);\n        }\n        $this->call = $this->call->withMessage($newRequest);\n\n        $callable = $this->callable;\n        $response = $callable(\n            $this->call,\n            $this->options\n        )->wait();\n\n        return new Page(\n            $this->call,\n            $this->options,\n            $this->callable,\n            $this->pageStreamingDescriptor,\n            $response\n        );\n    }\n\n    /**\n     * Return the number of elements in the response.\n     *\n     * @return int\n     */\n    public function getPageElementCount()\n    {\n        $resourcesGetMethod = $this->pageStreamingDescriptor->getResourcesGetMethod();\n        return count($this->getResponseObject()->$resourcesGetMethod());\n    }\n\n    /**\n     * Return an iterator over the elements in the response.\n     *\n     * @return Generator\n     */\n    #[\\ReturnTypeWillChange]\n    public function getIterator()\n    {\n        $resourcesGetMethod = $this->pageStreamingDescriptor->getResourcesGetMethod();\n        $items = $this->getResponseObject()->$resourcesGetMethod();\n        foreach ($items as $key => $element) {\n            if ($items instanceof MapField) {\n                yield $key => $element;\n            } else {\n                yield $element;\n            }\n        }\n    }\n\n    /**\n     * Return an iterator over Page objects, beginning with this object.\n     * Additional Page objects are retrieved lazily via API calls until\n     * all elements have been retrieved.\n     *\n     * @return Generator|array<Page>\n     * @throws ValidationException\n     * @throws ApiException\n     */\n    public function iteratePages()\n    {\n        $currentPage = $this;\n        yield $this;\n        while ($currentPage->hasNextPage()) {\n            $currentPage = $currentPage->getNextPage();\n            yield $currentPage;\n        }\n    }\n\n    /**\n     * Gets the request object used to generate the Page.\n     *\n     * @return mixed|Message\n     */\n    public function getRequestObject()\n    {\n        return $this->call->getMessage();\n    }\n\n    /**\n     * Gets the API response object.\n     *\n     * @return mixed|Message\n     */\n    public function getResponseObject()\n    {\n        return $this->response;\n    }\n\n    /**\n     * Returns a collection of elements with a fixed size set by\n     * the collectionSize parameter. The collection will only contain\n     * fewer than collectionSize elements if there are no more\n     * pages to be retrieved from the server.\n     *\n     * NOTE: it is an error to call this method if an optional parameter\n     * to set the page size is not supported or has not been set in the\n     * API call that was used to create this page. It is also an error\n     * if the collectionSize parameter is less than the page size that\n     * has been set.\n     *\n     * @param int $collectionSize\n     * @throws ValidationException if a FixedSizeCollection of the specified size cannot be constructed\n     * @return FixedSizeCollection\n     */\n    public function expandToFixedSizeCollection($collectionSize)\n    {\n        if (!$this->pageStreamingDescriptor->requestHasPageSizeField()) {\n            throw new ValidationException(\n                'FixedSizeCollection is not supported for this method, because ' .\n                'the method does not support an optional argument to set the ' .\n                'page size.'\n            );\n        }\n        $request = $this->getRequestObject();\n        $pageSizeGetMethod = $this->pageStreamingDescriptor->getRequestPageSizeGetMethod();\n        $pageSize = $request->$pageSizeGetMethod();\n        if (is_null($pageSize)) {\n            throw new ValidationException(\n                'Error while expanding Page to FixedSizeCollection: No page size ' .\n                'parameter found. The page size parameter must be set in the API ' .\n                'optional arguments array, and must be less than the collectionSize ' .\n                'parameter, in order to create a FixedSizeCollection object.'\n            );\n        }\n        if ($pageSize > $collectionSize) {\n            throw new ValidationException(\n                'Error while expanding Page to FixedSizeCollection: collectionSize ' .\n                'parameter is less than the page size optional argument specified in ' .\n                \"the API call. collectionSize: $collectionSize, page size: $pageSize\"\n            );\n        }\n        return new FixedSizeCollection($this, $collectionSize);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/PageStreamingDescriptor.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse InvalidArgumentException;\n\n/**\n * Holds the description information used for page streaming.\n */\nclass PageStreamingDescriptor\n{\n    private $descriptor;\n\n    /**\n     * @param array $descriptor {\n     *     Required.\n     *     @type string $requestPageTokenGetMethod the get method for the page token in the request object.\n     *     @type string $requestPageTokenSetMethod the set method for the page token in the request object.\n     *     @type string $responsePageTokenGetMethod the get method for the page token in the response object.\n     *     @type string resourcesGetMethod the get method for the resources in the response object.\n     *\n     *     Optional.\n     *     @type string $requestPageSizeGetMethod the get method for the page size in the request object.\n     * }\n     */\n    public function __construct(array $descriptor)\n    {\n        self::validate($descriptor);\n        $this->descriptor = $descriptor;\n    }\n\n    /**\n     * @param array $fields {\n     *     Required.\n     *\n     *     @type string $requestPageTokenField the page token field in the request object.\n     *     @type string $responsePageTokenField the page token field in the response object.\n     *     @type string $resourceField the resource field in the response object.\n     *\n     *     Optional.\n     *     @type string $requestPageSizeField the page size field in the request object.\n     * }\n     * @return PageStreamingDescriptor\n     */\n    public static function createFromFields(array $fields)\n    {\n        $requestPageToken = $fields['requestPageTokenField'];\n        $responsePageToken = $fields['responsePageTokenField'];\n        $resources = $fields['resourceField'];\n\n        $descriptor = [\n            'requestPageTokenGetMethod' => PageStreamingDescriptor::getMethod($requestPageToken),\n            'requestPageTokenSetMethod' => PageStreamingDescriptor::setMethod($requestPageToken),\n            'responsePageTokenGetMethod' => PageStreamingDescriptor::getMethod($responsePageToken),\n            'resourcesGetMethod' => PageStreamingDescriptor::getMethod($resources),\n        ];\n\n        if (isset($fields['requestPageSizeField'])) {\n            $requestPageSize = $fields['requestPageSizeField'];\n            $descriptor['requestPageSizeGetMethod'] = PageStreamingDescriptor::getMethod($requestPageSize);\n            $descriptor['requestPageSizeSetMethod'] = PageStreamingDescriptor::setMethod($requestPageSize);\n        }\n\n        return new PageStreamingDescriptor($descriptor);\n    }\n\n    private static function getMethod(string $field)\n    {\n        return 'get' . ucfirst($field);\n    }\n\n    private static function setMethod(string $field)\n    {\n        return 'set' . ucfirst($field);\n    }\n\n    /**\n     * @return string The page token get method on the request object\n     */\n    public function getRequestPageTokenGetMethod()\n    {\n        return $this->descriptor['requestPageTokenGetMethod'];\n    }\n\n    /**\n     * @return string The page size get method on the request object\n     */\n    public function getRequestPageSizeGetMethod()\n    {\n        return $this->descriptor['requestPageSizeGetMethod'];\n    }\n\n    /**\n     * @return bool True if the request object has a page size field\n     */\n    public function requestHasPageSizeField()\n    {\n        return array_key_exists('requestPageSizeGetMethod', $this->descriptor);\n    }\n\n    /**\n     * @return string The page token get method on the response object\n     */\n    public function getResponsePageTokenGetMethod()\n    {\n        return $this->descriptor['responsePageTokenGetMethod'];\n    }\n\n    /**\n     * @return string The resources get method on the response object\n     */\n    public function getResourcesGetMethod()\n    {\n        return $this->descriptor['resourcesGetMethod'];\n    }\n\n    /**\n     * @return string The page token set method on the request object\n     */\n    public function getRequestPageTokenSetMethod()\n    {\n        return $this->descriptor['requestPageTokenSetMethod'];\n    }\n\n    /**\n     * @return string The page size set method on the request object\n     */\n    public function getRequestPageSizeSetMethod()\n    {\n        return $this->descriptor['requestPageSizeSetMethod'];\n    }\n\n    private static function validate(array $descriptor)\n    {\n        $requiredFields = [\n            'requestPageTokenGetMethod',\n            'requestPageTokenSetMethod',\n            'responsePageTokenGetMethod',\n            'resourcesGetMethod',\n        ];\n        foreach ($requiredFields as $field) {\n            if (empty($descriptor[$field])) {\n                throw new InvalidArgumentException(\n                    \"$field is required for PageStreamingDescriptor\"\n                );\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/PagedListResponse.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Generator;\nuse IteratorAggregate;\n\n/**\n * Response object for paged results from a list API method\n *\n * The PagedListResponse object is returned by API methods that implement\n * pagination, and makes it easier to access multiple pages of results\n * without having to manually manipulate page tokens. Pages are retrieved\n * lazily, with additional API calls being made as additional results\n * are required.\n *\n * The list elements can be accessed in the following ways:\n *  - As a single iterable used in a foreach loop or via the getIterator method\n *  - As pages of elements, using the getPage and iteratePages methods\n *  - As fixed size collections of elements, using the\n *    getFixedSizeCollection and iterateFixedSizeCollections methods\n *\n * Example of using PagedListResponse as an iterator:\n * ```\n * $pagedListResponse = $client->getList(...);\n * foreach ($pagedListResponse as $element) {\n *     // doSomethingWith($element);\n * }\n * ```\n *\n * Example of iterating over each page of elements:\n * ```\n * $pagedListResponse = $client->getList(...);\n * foreach ($pagedListResponse->iteratePages() as $page) {\n *     foreach ($page as $element) {\n *         // doSomethingWith($element);\n *     }\n * }\n * ```\n *\n * Example of accessing the current page, and manually iterating\n * over pages:\n * ```\n * $pagedListResponse = $client->getList(...);\n * $page = $pagedListResponse->getPage();\n * // doSomethingWith($page);\n * while ($page->hasNextPage()) {\n *     $page = $page->getNextPage();\n *     // doSomethingWith($page);\n * }\n * ```\n */\nclass PagedListResponse implements IteratorAggregate\n{\n    private $firstPage;\n\n    /**\n     * PagedListResponse constructor.\n     *\n     * @param Page $firstPage A page containing response details.\n     */\n    public function __construct(\n        Page $firstPage\n    ) {\n        $this->firstPage = $firstPage;\n    }\n\n    /**\n     * Returns an iterator over the full list of elements. If the\n     * API response contains a (non-empty) next page token, then\n     * the PagedListResponse object will make calls to the underlying\n     * API to retrieve additional elements as required.\n     *\n     * NOTE: The result of this method is the same as getIterator().\n     * Prefer using getIterator(), or iterate directly on the\n     * PagedListResponse object.\n     *\n     * @return Generator\n     * @throws ValidationException\n     */\n    public function iterateAllElements()\n    {\n        return $this->getIterator();\n    }\n\n    /**\n     * Returns an iterator over the full list of elements. If the\n     * API response contains a (non-empty) next page token, then\n     * the PagedListResponse object will make calls to the underlying\n     * API to retrieve additional elements as required.\n     *\n     * @return Generator\n     * @throws ValidationException\n     */\n    #[\\ReturnTypeWillChange]\n    public function getIterator()\n    {\n        foreach ($this->iteratePages() as $page) {\n            foreach ($page as $key => $element) {\n                yield $key => $element;\n            }\n        }\n    }\n\n    /**\n     * Return the current page of results.\n     *\n     * @return Page\n     */\n    public function getPage()\n    {\n        return $this->firstPage;\n    }\n\n    /**\n     * Returns an iterator over pages of results. The pages are\n     * retrieved lazily from the underlying API.\n     *\n     * @return Page[]\n     * @throws ValidationException\n     */\n    public function iteratePages()\n    {\n        return $this->getPage()->iteratePages();\n    }\n\n    /**\n     * Returns a collection of elements with a fixed size set by\n     * the collectionSize parameter. The collection will only contain\n     * fewer than collectionSize elements if there are no more\n     * pages to be retrieved from the server.\n     *\n     * NOTE: it is an error to call this method if an optional parameter\n     * to set the page size is not supported or has not been set in the\n     * original API call. It is also an error if the collectionSize parameter\n     * is less than the page size that has been set.\n     *\n     * @param int $collectionSize\n     * @throws ValidationException if a FixedSizeCollection of the specified size cannot be constructed\n     * @return FixedSizeCollection\n     */\n    public function expandToFixedSizeCollection(int $collectionSize)\n    {\n        return $this->getPage()->expandToFixedSizeCollection($collectionSize);\n    }\n\n    /**\n     * Returns an iterator over fixed size collections of results.\n     * The collections are retrieved lazily from the underlying API.\n     *\n     * Each collection will have collectionSize elements, with the\n     * exception of the final collection which may contain fewer\n     * elements.\n     *\n     * NOTE: it is an error to call this method if an optional parameter\n     * to set the page size is not supported or has not been set in the\n     * original API call. It is also an error if the collectionSize parameter\n     * is less than the page size that has been set.\n     *\n     * @param int $collectionSize\n     * @throws ValidationException if a FixedSizeCollection of the specified size cannot be constructed\n     * @return Generator|FixedSizeCollection[]\n     */\n    public function iterateFixedSizeCollections(int $collectionSize)\n    {\n        return $this->expandToFixedSizeCollection($collectionSize)->iterateCollections();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/PathTemplate.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse Google\\ApiCore\\ResourceTemplate\\AbsoluteResourceTemplate;\nuse Google\\ApiCore\\ResourceTemplate\\RelativeResourceTemplate;\nuse Google\\ApiCore\\ResourceTemplate\\ResourceTemplateInterface;\n\n/**\n * Represents a path template.\n *\n * Templates use the syntax of the API platform; see the protobuf of HttpRule for\n * details. A template consists of a sequence of literals, wildcards, and variable bindings,\n * where each binding can have a sub-path. A string representation can be parsed into an\n * instance of PathTemplate, which can then be used to perform matching and instantiation.\n */\nclass PathTemplate implements ResourceTemplateInterface\n{\n    private $resourceTemplate;\n\n    /**\n     * PathTemplate constructor.\n     *\n     * @param string $path A path template string\n     * @throws ValidationException When $path cannot be parsed into a valid PathTemplate\n     */\n    public function __construct(?string $path = null)\n    {\n        if (empty($path)) {\n            throw new ValidationException('Cannot construct PathTemplate from empty string');\n        }\n\n        if ($path[0] === '/') {\n            $this->resourceTemplate = new AbsoluteResourceTemplate($path);\n        } else {\n            $this->resourceTemplate = new RelativeResourceTemplate($path);\n        }\n    }\n\n    /**\n     * @return string A string representation of the path template\n     */\n    public function __toString()\n    {\n        return $this->resourceTemplate->__toString();\n    }\n\n    /**\n     * Renders a path template using the provided bindings.\n     *\n     * @param array $bindings An array matching var names to binding strings.\n     * @throws ValidationException if a key isn't provided or if a sub-template\n     *    can't be parsed.\n     * @return string A rendered representation of this path template.\n     */\n    public function render(array $bindings)\n    {\n        return $this->resourceTemplate->render($bindings);\n    }\n\n    /**\n     * Check if $path matches a resource string.\n     *\n     * @param string $path A resource string.\n     * @return bool\n     */\n    public function matches(string $path)\n    {\n        return $this->resourceTemplate->matches($path);\n    }\n\n    /**\n     * Matches a fully qualified path template string.\n     *\n     * @param string $path A fully qualified path template string.\n     * @throws ValidationException if path can't be matched to the template.\n     * @return array Array matching var names to binding values.\n     */\n    public function match(string $path)\n    {\n        return $this->resourceTemplate->match($path);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/PollingTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * @internal\n */\ntrait PollingTrait\n{\n    /**\n     * @param callable $pollCallable The call to poll. Must return a boolean indicating whether the\n     *        operation has completed, and the polling loop can be terminated.\n     * @param array $options {\n     *                       Options for configuring the polling behaviour.\n     *\n     *     @type int $initialPollDelayMillis The initial polling interval to use, in milliseconds.\n     *     @type int $pollDelayMultiplier Multiplier applied to the polling interval on each retry.\n     *     @type int $maxPollDelayMillis The maximum polling interval to use, in milliseconds.\n     *     @type int $totalPollTimeoutMillis The maximum amount of time to continue polling, in milliseconds.\n     * }\n     * @return bool\n     */\n    private function poll(callable $pollCallable, array $options)\n    {\n        $currentPollDelayMillis = $options['initialPollDelayMillis'];\n        $pollDelayMultiplier = $options['pollDelayMultiplier'];\n        $maxPollDelayMillis = $options['maxPollDelayMillis'];\n        $totalPollTimeoutMillis = $options['totalPollTimeoutMillis'];\n\n        $hasTotalPollTimeout = $totalPollTimeoutMillis > 0.0;\n        $endTime = $this->getCurrentTimeMillis() + $totalPollTimeoutMillis;\n\n        while (true) {\n            if ($hasTotalPollTimeout && $this->getCurrentTimeMillis() > $endTime) {\n                return false;\n            }\n            $this->sleepMillis($currentPollDelayMillis);\n            if ($pollCallable()) {\n                return true;\n            }\n            $currentPollDelayMillis = (int) min([\n                $currentPollDelayMillis * $pollDelayMultiplier,\n                $maxPollDelayMillis\n            ]);\n        }\n    }\n\n    /**\n     * Protected to allow overriding for tests\n     *\n     * @return float Current time in milliseconds\n     */\n    protected function getCurrentTimeMillis()\n    {\n        return microtime(true) * 1000.0;\n    }\n\n    /**\n     * Protected to allow overriding for tests\n     *\n     * @param int $millis\n     */\n    protected function sleepMillis(int $millis)\n    {\n        usleep($millis * 1000);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/RequestBuilder.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse Google\\ApiCore\\ResourceTemplate\\AbsoluteResourceTemplate;\nuse Google\\Protobuf\\Internal\\Message;\nuse GuzzleHttp\\Psr7\\Request;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Builds a PSR-7 request from a set of request information.\n *\n * @internal\n */\nclass RequestBuilder\n{\n    use ArrayTrait;\n    use UriTrait;\n    use ValidationTrait;\n\n    protected $baseUri;\n    private $restConfig;\n\n    /**\n     * @param string $baseUri\n     * @param string $restConfigPath\n     * @throws ValidationException\n     */\n    public function __construct(string $baseUri, string $restConfigPath)\n    {\n        self::validateFileExists($restConfigPath);\n        $this->baseUri = $baseUri;\n        $this->restConfig = require($restConfigPath);\n    }\n\n    /**\n     * @param string $path\n     * @return bool\n     */\n    public function pathExists(string $path)\n    {\n        list($interface, $method) = explode('/', $path);\n        return isset($this->restConfig['interfaces'][$interface][$method]);\n    }\n\n    /**\n     * @param string $path\n     * @param Message $message\n     * @param array $headers\n     * @return RequestInterface\n     * @throws ValidationException\n     */\n    public function build(string $path, Message $message, array $headers = [])\n    {\n        list($interface, $method) = explode('/', $path);\n\n        if (!isset($this->restConfig['interfaces'][$interface][$method])) {\n            throw new ValidationException(\n                \"Failed to build request, as the provided path ($path) was not found in the configuration.\"\n            );\n        }\n\n        $numericEnums = isset($this->restConfig['numericEnums']) && $this->restConfig['numericEnums'];\n        $methodConfig = $this->restConfig['interfaces'][$interface][$method] + [\n            'placeholders' => [],\n            'body' => null,\n            'additionalBindings' => null,\n        ];\n        $bindings = $this->buildBindings($methodConfig['placeholders'], $message);\n        $uriTemplateConfigs = $this->getConfigsForUriTemplates($methodConfig);\n\n        foreach ($uriTemplateConfigs as $config) {\n            $pathTemplate = $this->tryRenderPathTemplate($config['uriTemplate'], $bindings);\n\n            if ($pathTemplate) {\n                // We found a valid uriTemplate - now build and return the Request\n\n                list($body, $queryParams) = $this->constructBodyAndQueryParameters($message, $config);\n\n                // Request enum fields will be encoded as numbers rather than strings  (in the response).\n                if ($numericEnums) {\n                    $queryParams['$alt'] = 'json;enum-encoding=int';\n                }\n\n                $uri = $this->buildUri($pathTemplate, $queryParams);\n\n                return new Request(\n                    $config['method'],\n                    $uri,\n                    ['Content-Type' => 'application/json'] + $headers,\n                    $body\n                );\n            }\n        }\n\n        // No valid uriTemplate found - construct an exception\n        $uriTemplates = [];\n        foreach ($uriTemplateConfigs as $config) {\n            $uriTemplates[] = $config['uriTemplate'];\n        }\n\n        throw new ValidationException(\"Could not map bindings for $path to any Uri template.\\n\" .\n            'Bindings: ' . print_r($bindings, true) .\n            'UriTemplates: ' . print_r($uriTemplates, true));\n    }\n\n    /**\n     * Create a list of all possible configs using the additionalBindings\n     *\n     * @param array $config\n     * @return array[] An array of configs\n     */\n    private function getConfigsForUriTemplates(array $config)\n    {\n        $configs = [$config];\n\n        if ($config['additionalBindings']) {\n            foreach ($config['additionalBindings'] as $additionalBinding) {\n                $configs[] = $additionalBinding + $config;\n            }\n        }\n\n        return $configs;\n    }\n\n    /**\n     * @param Message $message\n     * @param array $config\n     * @return array Tuple [$body, $queryParams]\n     */\n    private function constructBodyAndQueryParameters(Message $message, array $config)\n    {\n        $messageDataJson = $message->serializeToJsonString();\n\n        if ($config['body'] === '*') {\n            return [$messageDataJson, []];\n        }\n\n        $body = null;\n        $queryParams = [];\n        $messageData = json_decode($messageDataJson, true);\n        foreach ($messageData as $name => $value) {\n            if (array_key_exists($name, $config['placeholders'])) {\n                continue;\n            }\n\n            if (Serializer::toSnakeCase($name) === $config['body']) {\n                if (($bodyMessage = $message->{\"get$name\"}()) instanceof Message) {\n                    $body = $bodyMessage->serializeToJsonString();\n                } else {\n                    $body = json_encode($value);\n                }\n                continue;\n            }\n\n            if (is_array($value) && $this->isAssoc($value)) {\n                foreach ($value as $key => $value2) {\n                    $queryParams[$name . '.' . $key] = $value2;\n                }\n            } else {\n                $queryParams[$name] = $value;\n            }\n        }\n\n        // Ensures required query params with default values are always sent\n        // over the wire.\n        if (isset($config['queryParams'])) {\n            foreach ($config['queryParams'] as $requiredQueryParam) {\n                $requiredQueryParam = Serializer::toCamelCase($requiredQueryParam);\n                if (!array_key_exists($requiredQueryParam, $queryParams)) {\n                    $getter = Serializer::getGetter($requiredQueryParam);\n                    $queryParamValue = $message->$getter();\n                    if ($queryParamValue instanceof Message) {\n                        // Decode message for the query parameter.\n                        $queryParamValue = json_decode($queryParamValue->serializeToJsonString(), true);\n                    }\n                    if (is_array($queryParamValue)) {\n                        // If the message has properties, add them as nested querystring values.\n                        // NOTE: This only supports nesting at one level of depth.\n                        foreach ($queryParamValue as $key => $value) {\n                            $queryParams[$requiredQueryParam . '.' . $key] = $value;\n                        }\n                    } else {\n                        $queryParams[$requiredQueryParam] = $queryParamValue;\n                    }\n                }\n            }\n        }\n\n        return [$body, $queryParams];\n    }\n\n    /**\n     * @param array $placeholders\n     * @param Message $message\n     * @return array Bindings from path template fields to values from message\n     */\n    private function buildBindings(array $placeholders, Message $message)\n    {\n        $bindings = [];\n        foreach ($placeholders as $placeholder => $metadata) {\n            $value = array_reduce(\n                $metadata['getters'],\n                function (?Message $result = null, $getter = null) {\n                    if ($result && $getter) {\n                        return $result->$getter();\n                    }\n                },\n                $message\n            );\n\n            $bindings[$placeholder] = $value;\n        }\n        return $bindings;\n    }\n\n    /**\n     * Try to render the resource name. The rendered resource name will always contain a leading '/'\n     *\n     * @param string $uriTemplate\n     * @param array $bindings\n     * @return null|string\n     * @throws ValidationException\n     */\n    private function tryRenderPathTemplate(string $uriTemplate, array $bindings)\n    {\n        $template = new AbsoluteResourceTemplate($uriTemplate);\n\n        try {\n            return $template->render($bindings);\n        } catch (ValidationException $e) {\n            return null;\n        }\n    }\n\n    /**\n     * @param string $path\n     * @param array $queryParams\n     * @return UriInterface\n     */\n    protected function buildUri(string $path, array $queryParams)\n    {\n        $uri = Utils::uriFor(\n            sprintf(\n                'https://%s%s',\n                $this->baseUri,\n                $path\n            )\n        );\n        if ($queryParams) {\n            $uri = $this->buildUriWithQuery(\n                $uri,\n                $queryParams\n            );\n        }\n        return $uri;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/RequestParamsHeaderDescriptor.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * Encapsulates request params header metadata.\n */\nclass RequestParamsHeaderDescriptor\n{\n    const HEADER_KEY = 'x-goog-request-params';\n\n    /**\n     * @var array\n     */\n    private $header;\n\n    /**\n     * RequestParamsHeaderDescriptor constructor.\n     *\n     * @param array $requestParams An associative array which contains request params header data in\n     * a form ['field_name.subfield_name' => value].\n     */\n    public function __construct(array $requestParams)\n    {\n        $headerKey = self::HEADER_KEY;\n\n        $headerValue = '';\n        foreach ($requestParams as $key => $value) {\n            if ('' !== $headerValue) {\n                $headerValue .= '&';\n            }\n\n            $headerValue .= $key . '=' . urlencode(strval($value));\n        }\n\n        $this->header = [$headerKey => [$headerValue]];\n    }\n\n    /**\n     * Returns an associative array that contains request params header metadata.\n     *\n     * @return array\n     */\n    public function getHeader()\n    {\n        return $this->header;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ResourceHelperTrait.php",
    "content": "<?php\n/*\n * Copyright 2022 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * Provides functionality for loading a resource name template map from a descriptor config,\n * retrieving a PathTemplate, and parsing values using registered templates.\n *\n * @internal\n */\ntrait ResourceHelperTrait\n{\n    /** @var array|null */\n    private static $templateMap;\n\n    /**\n     * placeholder for this function like we have in GapicClientTrait\n     */\n    private static function getClientDefaults()\n    {\n        return [];\n    }\n\n    private static function registerPathTemplates()\n    {\n        $templateConfigPath = self::getClientDefaults()['descriptorsConfigPath'];\n        // self::SERVICE_NAME is a constant set per-client.\n        self::loadPathTemplates($templateConfigPath, self::SERVICE_NAME);\n    }\n\n    private static function loadPathTemplates(string $configPath, string $serviceName)\n    {\n        // TODO: Add void return type hint.\n        if (!is_null(self::$templateMap)) {\n            return;\n        }\n\n        $descriptors = require($configPath);\n        $templates = $descriptors['interfaces'][$serviceName]['templateMap'] ?? [];\n        self::$templateMap = [];\n        foreach ($templates as $name => $template) {\n            self::$templateMap[$name] = new PathTemplate($template);\n        }\n    }\n\n    private static function getPathTemplate(string $key)\n    {\n        // TODO: Add nullable return type reference once PHP 7.1 is minimum.\n        if (is_null(self::$templateMap)) {\n            self::registerPathTemplates();\n        }\n        return self::$templateMap[$key] ?? null;\n    }\n\n    private static function parseFormattedName(string $formattedName, ?string $template = null): array\n    {\n        if (is_null(self::$templateMap)) {\n            self::registerPathTemplates();\n        }\n        if ($template) {\n            if (!isset(self::$templateMap[$template])) {\n                throw new ValidationException(\"Template name $template does not exist\");\n            }\n\n            return self::$templateMap[$template]->match($formattedName);\n        }\n\n        foreach (self::$templateMap as $templateName => $pathTemplate) {\n            try {\n                return $pathTemplate->match($formattedName);\n            } catch (ValidationException $ex) {\n                // Swallow the exception to continue trying other path templates\n            }\n        }\n\n        throw new ValidationException(\"Input did not match any known format. Input: $formattedName\");\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ResourceTemplate/AbsoluteResourceTemplate.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\ResourceTemplate;\n\nuse Google\\ApiCore\\ValidationException;\n\n/**\n * Represents an absolute resource template, meaning that it will always contain a leading slash,\n * and may contain a trailing verb (\":<verb>\").\n *\n * Examples:\n *   /projects\n *   /projects/{project}\n *   /foo/{bar=**}/fizz/*:action\n *\n * Templates use the syntax of the API platform; see\n * https://github.com/googleapis/api-common-protos/blob/master/google/api/http.proto\n * for details. A template consists of a sequence of literals, wildcards, and variable bindings,\n * where each binding can have a sub-path. A string representation can be parsed into an\n * instance of AbsoluteResourceTemplate, which can then be used to perform matching and instantiation.\n *\n * @internal\n */\nclass AbsoluteResourceTemplate implements ResourceTemplateInterface\n{\n    private RelativeResourceTemplate $resourceTemplate;\n    /** @var string|bool */\n    private $verb;\n\n    /**\n     * AbsoluteResourceTemplate constructor.\n     * @param string $path\n     * @throws ValidationException\n     */\n    public function __construct(string $path)\n    {\n        if (empty($path)) {\n            throw new ValidationException('Cannot construct AbsoluteResourceTemplate from empty string');\n        }\n        if ($path[0] !== '/') {\n            throw new ValidationException(\n                \"Could not construct AbsoluteResourceTemplate from '$path': must begin with '/'\"\n            );\n        }\n        $verbSeparatorPos = $this->verbSeparatorPos($path);\n        $this->resourceTemplate = new RelativeResourceTemplate(substr($path, 1, $verbSeparatorPos - 1));\n        $this->verb = substr($path, $verbSeparatorPos + 1);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function __toString()\n    {\n        return sprintf('/%s%s', $this->resourceTemplate, $this->renderVerb());\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function render(array $bindings)\n    {\n        return sprintf('/%s%s', $this->resourceTemplate->render($bindings), $this->renderVerb());\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function matches(string $path)\n    {\n        try {\n            $this->match($path);\n            return true;\n        } catch (ValidationException $ex) {\n            return false;\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function match(string $path)\n    {\n        if (empty($path)) {\n            throw $this->matchException($path, 'path cannot be empty');\n        }\n        if ($path[0] !== '/') {\n            throw $this->matchException($path, \"missing leading '/'\");\n        }\n        $verbSeparatorPos = $this->verbSeparatorPos($path);\n        if (substr($path, $verbSeparatorPos + 1) !== $this->verb) {\n            throw $this->matchException($path, \"trailing verb did not match '{$this->verb}'\");\n        }\n        return $this->resourceTemplate->match(substr($path, 1, $verbSeparatorPos - 1));\n    }\n\n    private function matchException(string $path, string $reason)\n    {\n        return new ValidationException(\"Could not match path '$path' to template '$this': $reason\");\n    }\n\n    private function renderVerb()\n    {\n        return $this->verb ? ':' . $this->verb : '';\n    }\n\n    private function verbSeparatorPos(string $path)\n    {\n        $finalSeparatorPos = strrpos($path, '/');\n        $verbSeparatorPos = strrpos($path, ':', $finalSeparatorPos);\n        if ($verbSeparatorPos === false) {\n            $verbSeparatorPos = strlen($path);\n        }\n        return $verbSeparatorPos;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ResourceTemplate/Parser.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\ResourceTemplate;\n\nuse Google\\ApiCore\\ValidationException;\n\n/**\n * Collection of methods for parsing Segments.\n *\n * @internal\n */\nclass Parser\n{\n    /**\n     * Parses a path into an array of segments.\n     *\n     * @param string|null $path\n     * @return array\n     * @throws ValidationException\n     */\n    public static function parseSegments(?string $path = null)\n    {\n        if (empty($path)) {\n            throw new ValidationException('Cannot parse empty path');\n        }\n        $segments = [];\n        $index = 0;\n        $nextLiteral = '';\n        $segments[] = self::parseSegmentFromPath($path, $nextLiteral, $index);\n        while ($index < strlen($path)) {\n            self::parseLiteralFromPath($nextLiteral, $path, $index);\n            $segments[] = self::parseSegmentFromPath($path, $nextLiteral, $index);\n        }\n        return $segments;\n    }\n\n    /**\n     * Given a path and an index, reads a Segment from the path and updates\n     * the index.\n     *\n     * @param string $path\n     * @param string $nextLiteral\n     * @param int $index\n     * @return Segment\n     * @throws ValidationException\n     */\n    private static function parseSegmentFromPath(string $path, string &$nextLiteral, int &$index)\n    {\n        if ($index >= strlen($path)) {\n            // A trailing '/' has caused the index to exceed the bounds\n            // of the string - provide a helpful error message.\n            throw self::parseError($path, strlen($path) - 1, \"invalid trailing '/'\");\n        }\n        if ($path[$index] === '{') {\n            // Validate that the { has a matching }\n            $closingBraceIndex = strpos($path, '}', $index);\n            if ($closingBraceIndex === false) {\n                throw self::parseError(\n                    $path,\n                    strlen($path),\n                    \"Expected '}' to match '{' at index $index, got end of string\"\n                );\n            }\n\n            $segmentStringLengthWithoutBraces = $closingBraceIndex - $index - 1;\n            $segmentStringWithoutBraces = substr($path, $index + 1, $segmentStringLengthWithoutBraces);\n            $index = $closingBraceIndex + 1;\n\n            $nextLiteral = '/';\n            $remainingPath = substr($path, $index);\n            if (!empty($remainingPath)) {\n                // Find the firstnon-slash separator seen, if any.\n                $nextSlashIndex = strpos($remainingPath, '/', 0);\n                $nonSlashSeparators = ['-', '_', '~', '.'];\n                foreach ($nonSlashSeparators as $nonSlashSeparator) {\n                    $nonSlashSeparatorIndex = strpos($remainingPath, $nonSlashSeparator, 0);\n                    $nextOpenBraceIndex = strpos($remainingPath, '{', 0);\n                    if ($nonSlashSeparatorIndex !== false && $nonSlashSeparatorIndex === $nextOpenBraceIndex - 1) {\n                        $index += $nonSlashSeparatorIndex;\n                        $nextLiteral = $nonSlashSeparator;\n                        break;\n                    }\n                }\n            }\n\n            return self::parseVariableSegment($segmentStringWithoutBraces, $nextLiteral);\n        } else {\n            $nextSlash = strpos($path, '/', $index);\n            if ($nextSlash === false) {\n                $nextSlash = strlen($path);\n            }\n            $segmentString = substr($path, $index, $nextSlash - $index);\n            $nextLiteral = '/';\n            $index = $nextSlash;\n            return self::parse($segmentString, $path, $index);\n        }\n    }\n\n    /**\n     * @param string $segmentString\n     * @param string $path\n     * @param int $index\n     * @return Segment\n     * @throws ValidationException\n     */\n    private static function parse(string $segmentString, string $path, int $index)\n    {\n        if ($segmentString === '*') {\n            return new Segment(Segment::WILDCARD_SEGMENT);\n        } elseif ($segmentString === '**') {\n            return new Segment(Segment::DOUBLE_WILDCARD_SEGMENT);\n        } else {\n            if (!self::isValidLiteral($segmentString)) {\n                if (empty($segmentString)) {\n                    // Create user friendly message in case of empty segment\n                    throw self::parseError($path, $index, \"Unexpected empty segment (consecutive '/'s are invalid)\");\n                } else {\n                    throw self::parseError($path, $index, \"Unexpected characters in literal segment $segmentString\");\n                }\n            }\n            return new Segment(Segment::LITERAL_SEGMENT, $segmentString);\n        }\n    }\n\n    /**\n     * @param string $segmentStringWithoutBraces\n     * @param string $separatorLiteral\n     * @return Segment\n     * @throws ValidationException\n     */\n    private static function parseVariableSegment(string $segmentStringWithoutBraces, string $separatorLiteral)\n    {\n        // Validate there are no nested braces\n        $nestedOpenBracket = strpos($segmentStringWithoutBraces, '{');\n        if ($nestedOpenBracket !== false) {\n            throw new ValidationException(\n                \"Unexpected '{' parsing segment $segmentStringWithoutBraces at index $nestedOpenBracket\"\n            );\n        }\n\n        $equalsIndex = strpos($segmentStringWithoutBraces, '=');\n        if ($equalsIndex === false) {\n            // If the variable does not contain '=', we assume the pattern is '*' as per google.rpc.Http\n            $variableKey = $segmentStringWithoutBraces;\n            $nestedResource = new RelativeResourceTemplate('*');\n        } else {\n            $variableKey = substr($segmentStringWithoutBraces, 0, $equalsIndex);\n            $nestedResourceString = substr($segmentStringWithoutBraces, $equalsIndex + 1);\n            $nestedResource = new RelativeResourceTemplate($nestedResourceString);\n        }\n\n        if (!self::isValidLiteral($variableKey)) {\n            throw new ValidationException(\n                \"Unexpected characters in variable name $variableKey\"\n            );\n        }\n        return new Segment(Segment::VARIABLE_SEGMENT, null, $variableKey, $nestedResource, $separatorLiteral);\n    }\n\n    /**\n     * @param string $literal\n     * @param string $path\n     * @param int $index\n     * @return string\n     * @throws ValidationException\n     */\n    private static function parseLiteralFromPath(string $literal, string $path, int &$index)\n    {\n        $literalLength = strlen($literal);\n        if (strlen($path) < ($index + $literalLength)) {\n            throw self::parseError($path, $index, \"expected '$literal'\");\n        }\n        $consumedLiteral = substr($path, $index, $literalLength);\n        if ($consumedLiteral !== $literal) {\n            throw self::parseError($path, $index, \"expected '$literal'\");\n        }\n        $index += $literalLength;\n        return $consumedLiteral;\n    }\n\n    private static function parseError(string $path, int $index, string $reason)\n    {\n        return new ValidationException(\"Error parsing '$path' at index $index: $reason\");\n    }\n\n    /**\n     * Check if $literal is a valid segment literal. Segment literals may only contain numbers,\n     * letters, and any of the following: .-~_\n     *\n     * @param string $literal\n     * @return bool\n     */\n    private static function isValidLiteral(string $literal)\n    {\n        return preg_match('/^[0-9a-zA-Z\\\\.\\\\-~_]+$/', $literal) === 1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ResourceTemplate/RelativeResourceTemplate.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\ResourceTemplate;\n\nuse Google\\ApiCore\\ValidationException;\n\n/**\n * Represents a relative resource template, meaning that it will never contain a leading slash or\n * trailing verb (\":<verb>\").\n *\n * Examples:\n *   projects\n *   projects/{project}\n *   foo/{bar=**}/fizz/*\n *\n * Templates use the syntax of the API platform; see\n * https://github.com/googleapis/api-common-protos/blob/master/google/api/http.proto\n * for details. A template consists of a sequence of literals, wildcards, and variable bindings,\n * where each binding can have a sub-path. A string representation can be parsed into an\n * instance of AbsoluteResourceTemplate, which can then be used to perform matching and instantiation.\n *\n * @internal\n */\nclass RelativeResourceTemplate implements ResourceTemplateInterface\n{\n    /** @var Segment[] */\n    private array $segments;\n\n    /**\n     * RelativeResourceTemplate constructor.\n     *\n     * @param string $path\n     * @throws ValidationException\n     */\n    public function __construct(string $path)\n    {\n        if (empty($path)) {\n            throw new ValidationException('Cannot construct RelativeResourceTemplate from empty string');\n        }\n        $this->segments = Parser::parseSegments($path);\n\n        $doubleWildcardCount = self::countDoubleWildcards($this->segments);\n        if ($doubleWildcardCount > 1) {\n            throw new ValidationException(\n                \"Cannot parse '$path': cannot contain more than one path wildcard\"\n            );\n        }\n\n        // Check for duplicate keys\n        $keys = [];\n        foreach ($this->segments as $segment) {\n            if ($segment->getSegmentType() === Segment::VARIABLE_SEGMENT) {\n                if (isset($keys[$segment->getKey()])) {\n                    throw new ValidationException(\n                        \"Duplicate key '{$segment->getKey()}' in path $path\"\n                    );\n                }\n                $keys[$segment->getKey()] = true;\n            }\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function __toString()\n    {\n        return self::renderSegments($this->segments);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function render(array $bindings)\n    {\n        $literalSegments = [];\n        $keySegmentTuples = self::buildKeySegmentTuples($this->segments);\n        foreach ($keySegmentTuples as list($key, $segment)) {\n            /** @var Segment $segment */\n            if ($segment->getSegmentType() === Segment::LITERAL_SEGMENT) {\n                $literalSegments[] = $segment;\n                continue;\n            }\n            if (!array_key_exists($key, $bindings)) {\n                throw $this->renderingException($bindings, \"missing required binding '$key' for segment '$segment'\");\n            }\n            $value = $bindings[$key];\n            if (!is_null($value) && $segment->matches($value)) {\n                $literalSegments[] = new Segment(\n                    Segment::LITERAL_SEGMENT,\n                    $value,\n                    $segment->getValue(),\n                    $segment->getTemplate(),\n                    $segment->getSeparator()\n                );\n            } else {\n                $valueString = is_null($value) ? 'null' : \"'$value'\";\n                throw $this->renderingException(\n                    $bindings,\n                    \"expected binding '$key' to match segment '$segment', instead got $valueString\"\n                );\n            }\n        }\n        return self::renderSegments($literalSegments);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function matches(string $path)\n    {\n        try {\n            $this->match($path);\n            return true;\n        } catch (ValidationException $ex) {\n            return false;\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function match(string $path)\n    {\n        // High level strategy for matching:\n        // - Build a list of Segments from our template, where any variable segments are\n        //   flattened into a single, non-nested list\n        // - Break $path into pieces based on '/'.\n        //     - Use the segments to further subdivide the pieces using any applicable non-slash separators.\n        // - Match pieces of the path with Segments in the flattened list\n\n        // In order to build correct bindings after we match the $path against our template, we\n        // need to (a) calculate the correct positional keys for our wildcards, and (b) maintain\n        // information about the variable identifier of any flattened segments. To do this, we\n        // build a list of [string, Segment] tuples, where the string component is the appropriate\n        // key.\n        $keySegmentTuples = self::buildKeySegmentTuples($this->segments);\n\n        $flattenedKeySegmentTuples = self::flattenKeySegmentTuples($keySegmentTuples);\n        $flattenedKeySegmentTuplesCount = count($flattenedKeySegmentTuples);\n        assert($flattenedKeySegmentTuplesCount > 0);\n\n        $slashPathPieces = explode('/', $path);\n        $pathPieces = [];\n        $pathPiecesIndex = 0;\n        $startIndex = 0;\n        $slashPathPiecesCount = count($slashPathPieces);\n        $doubleWildcardPieceCount = $slashPathPiecesCount - $flattenedKeySegmentTuplesCount + 1;\n\n        for ($i = 0; $i < count($flattenedKeySegmentTuples); $i++) {\n            $segmentKey = $flattenedKeySegmentTuples[$i][0];\n            $segment = $flattenedKeySegmentTuples[$i][1];\n            // In our flattened list of segments, we should never encounter a variable segment\n            assert($segment->getSegmentType() !== Segment::VARIABLE_SEGMENT);\n\n            if ($segment->getSegmentType() == Segment::DOUBLE_WILDCARD_SEGMENT) {\n                $pathPiecesForSegment = array_slice($slashPathPieces, $pathPiecesIndex, $doubleWildcardPieceCount);\n                $pathPiece = implode('/', $pathPiecesForSegment);\n                $pathPiecesIndex += $doubleWildcardPieceCount;\n                $pathPieces[] = $pathPiece;\n                continue;\n            }\n\n            if ($segment->getSegmentType() == Segment::WILDCARD_SEGMENT) {\n                if ($pathPiecesIndex >= $slashPathPiecesCount) {\n                    break;\n                }\n            }\n            if ($segment->getSeparator() === '/') {\n                if ($pathPiecesIndex >= $slashPathPiecesCount) {\n                    throw $this->matchException($path, 'segment and path length mismatch');\n                }\n                $pathPiece = substr($slashPathPieces[$pathPiecesIndex++], $startIndex);\n                $startIndex = 0;\n            } else {\n                $rawPiece = substr($slashPathPieces[$pathPiecesIndex], $startIndex);\n                $pathPieceLength = strpos($rawPiece, $segment->getSeparator());\n                $pathPiece = substr($rawPiece, 0, $pathPieceLength);\n                $startIndex += $pathPieceLength + 1;\n            }\n            $pathPieces[] = $pathPiece;\n        }\n\n        if ($flattenedKeySegmentTuples[$i - 1][1]->getSegmentType() !== Segment::DOUBLE_WILDCARD_SEGMENT) {\n            // Process any remaining pieces. The binding logic will throw exceptions for any invalid paths.\n            for (; $pathPiecesIndex < count($slashPathPieces); $pathPiecesIndex++) {\n                $pathPieces[] = $slashPathPieces[$pathPiecesIndex];\n            }\n        }\n        $pathPiecesCount = count($pathPieces);\n\n        // We would like to match pieces of our path 1:1 with the segments of our template. However,\n        // this is confounded by the presence of double wildcards ('**') in the template, which can\n        // match multiple segments in the path.\n        // Because there can only be one '**' present, we can determine how many segments it must\n        // match by examining the difference in count between the template segments and the\n        // path pieces.\n\n        if ($pathPiecesCount < $flattenedKeySegmentTuplesCount) {\n            // Each segment in $flattenedKeyedSegments must consume at least one\n            // segment in $pathSegments, so matching must fail.\n            throw $this->matchException($path, 'path does not contain enough segments to be matched');\n        }\n\n        $doubleWildcardPieceCount = $pathPiecesCount - $flattenedKeySegmentTuplesCount + 1;\n\n        $bindings = [];\n        $pathPiecesIndex = 0;\n        /** @var Segment $segment */\n        foreach ($flattenedKeySegmentTuples as list($segmentKey, $segment)) {\n            $pathPiece = $pathPieces[$pathPiecesIndex++];\n            if (!$segment->matches($pathPiece)) {\n                throw $this->matchException($path, \"expected path element matching '$segment', got '$pathPiece'\");\n            }\n\n            // If we have a valid key, add our $pathPiece to the $bindings array. Note that there\n            // may be multiple copies of the same $segmentKey. This is because a flattened variable\n            // segment can match multiple pieces from the path. We can add these to an array and\n            // collapse them all once the bindings are complete.\n            if (isset($segmentKey)) {\n                $bindings += [$segmentKey => []];\n                $bindings[$segmentKey][] = $pathPiece;\n            }\n        }\n\n        // It is possible that we have left over path pieces, which can occur if our template does\n        // not have a double wildcard. In that case, the match should fail.\n        if ($pathPiecesIndex !== $pathPiecesCount) {\n            throw $this->matchException($path, \"expected end of path, got '$pathPieces[$pathPiecesIndex]'\");\n        }\n\n        // Collapse the bindings from lists into strings\n        $collapsedBindings = [];\n        foreach ($bindings as $key => $boundPieces) {\n            $collapsedBindings[$key] = implode('/', $boundPieces);\n        }\n\n        return $collapsedBindings;\n    }\n\n    private function matchException(string $path, string $reason)\n    {\n        return new ValidationException(\"Could not match path '$path' to template '$this': $reason\");\n    }\n\n    private function renderingException(array $bindings, string $reason)\n    {\n        $bindingsString = print_r($bindings, true);\n        return new ValidationException(\n            \"Error rendering '$this': $reason\\n\" .\n            \"Provided bindings: $bindingsString\"\n        );\n    }\n\n    /**\n     * @param Segment[] $segments\n     * @param string|null $separator An optional string separator\n     * @return array[] A list of [string, Segment] tuples\n     */\n    private static function buildKeySegmentTuples(array $segments, ?string $separator = null)\n    {\n        $keySegmentTuples = [];\n        $positionalArgumentCounter = 0;\n        foreach ($segments as $segment) {\n            switch ($segment->getSegmentType()) {\n                case Segment::WILDCARD_SEGMENT:\n                case Segment::DOUBLE_WILDCARD_SEGMENT:\n                    $positionalKey = \"\\$$positionalArgumentCounter\";\n                    $positionalArgumentCounter++;\n                    $newSegment = $segment;\n                    if ($separator !== null) {\n                        $newSegment = new Segment(\n                            $segment->getSegmentType(),\n                            $segment->getValue(),\n                            $segment->getKey(),\n                            $segment->getTemplate(),\n                            $separator\n                        );\n                    }\n                    $keySegmentTuples[] = [$positionalKey, $newSegment];\n                    break;\n                default:\n                    $keySegmentTuples[] = [$segment->getKey(), $segment];\n            }\n        }\n        return $keySegmentTuples;\n    }\n\n    /**\n     * @param array[] $keySegmentTuples A list of [string, Segment] tuples\n     * @return array[] A list of [string, Segment] tuples\n     */\n    private static function flattenKeySegmentTuples(array $keySegmentTuples)\n    {\n        $flattenedKeySegmentTuples = [];\n        foreach ($keySegmentTuples as list($key, $segment)) {\n            /** @var Segment $segment */\n            switch ($segment->getSegmentType()) {\n                case Segment::VARIABLE_SEGMENT:\n                    // For segment variables, replace the segment with the segments of its children\n                    $template = $segment->getTemplate();\n                    $nestedKeySegmentTuples = self::buildKeySegmentTuples(\n                        $template->segments,\n                        $segment->getSeparator()\n                    );\n                    foreach ($nestedKeySegmentTuples as list($nestedKey, $nestedSegment)) {\n                        /** @var Segment $nestedSegment */\n                        // Nested variables are not allowed\n                        assert($nestedSegment->getSegmentType() !== Segment::VARIABLE_SEGMENT);\n                        // Insert the nested segment with key set to the outer key of the\n                        // parent variable segment\n                        $flattenedKeySegmentTuples[] = [$key, $nestedSegment];\n                    }\n                    break;\n                default:\n                    // For all other segments, don't change the key or segment\n                    $flattenedKeySegmentTuples[] = [$key, $segment];\n            }\n        }\n        return $flattenedKeySegmentTuples;\n    }\n\n    /**\n     * @param Segment[] $segments\n     * @return int\n     */\n    private static function countDoubleWildcards(array $segments)\n    {\n        $doubleWildcardCount = 0;\n        foreach ($segments as $segment) {\n            switch ($segment->getSegmentType()) {\n                case Segment::DOUBLE_WILDCARD_SEGMENT:\n                    $doubleWildcardCount++;\n                    break;\n                case Segment::VARIABLE_SEGMENT:\n                    $doubleWildcardCount += self::countDoubleWildcards($segment->getTemplate()->segments);\n                    break;\n            }\n        }\n        return $doubleWildcardCount;\n    }\n\n    /**\n     * Joins segments using their separators.\n     * @param array $segmentsToRender\n     * @return string\n     */\n    private static function renderSegments(array $segmentsToRender)\n    {\n        $renderResult = '';\n        for ($i = 0; $i < count($segmentsToRender); $i++) {\n            $segment = $segmentsToRender[$i];\n            $renderResult .= $segment;\n            if ($i < count($segmentsToRender) - 1) {\n                $renderResult .= $segment->getSeparator();\n            }\n        }\n        return $renderResult;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ResourceTemplate/ResourceTemplateInterface.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\ResourceTemplate;\n\nuse Google\\ApiCore\\ValidationException;\n\n/**\n * Represents a resource template that may or may not contain a leading slash, and if a leading\n * slash is present may contain a trailing verb (\":<verb>\"). (Note that a trailing verb without a\n * leading slash is not permitted).\n *\n * Examples:\n *   projects\n *   /projects\n *   foo/{bar=**}/fizz/*\n *   /foo/{bar=**}/fizz/*:action\n *\n * Templates use the syntax of the API platform; see\n * https://github.com/googleapis/api-common-protos/blob/master/google/api/http.proto\n * for details. A template consists of a sequence of literals, wildcards, and variable bindings,\n * where each binding can have a sub-path. A string representation can be parsed into an\n * instance of AbsoluteResourceTemplate, which can then be used to perform matching and instantiation.\n *\n * @internal\n */\ninterface ResourceTemplateInterface\n{\n    /**\n     * @return string A string representation of the resource template\n     */\n    public function __toString();\n\n    /**\n     * Renders a resource template using the provided bindings.\n     *\n     * @param array $bindings An array matching var names to binding strings.\n     * @return string A rendered representation of this resource template.\n     * @throws ValidationException If $bindings does not contain all required keys\n     *         or if a sub-template can't be parsed.\n     */\n    public function render(array $bindings);\n\n    /**\n     * Check if $path matches a resource string.\n     *\n     * @param string $path A resource string.\n     * @return bool\n     */\n    public function matches(string $path);\n\n    /**\n     * Matches a given $path to a resource template, and returns an array of bindings between\n     * wildcards / variables in the template and values in the path. If $path does not match the\n     * template, then a ValidationException is thrown.\n     *\n     * @param string $path A resource string.\n     * @throws ValidationException if path can't be matched to the template.\n     * @return array Array matching var names to binding values.\n     */\n    public function match(string $path);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ResourceTemplate/Segment.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\ResourceTemplate;\n\nuse Google\\ApiCore\\ValidationException;\n\n/**\n * Represents a segment in a resource template. This is used internally by RelativeResourceTemplate,\n * but is not intended for public use and may change without notice.\n *\n * @internal\n */\nclass Segment\n{\n    const LITERAL_SEGMENT = 0;\n    const WILDCARD_SEGMENT = 1;\n    const DOUBLE_WILDCARD_SEGMENT = 2;\n    const VARIABLE_SEGMENT = 3;\n\n    private int $segmentType;\n    private ?string $value;\n    private ?string $key;\n    private ?RelativeResourceTemplate $template;\n    private ?string $stringRepr;\n    private ?string $separator;\n\n    /**\n     * Segment constructor.\n     * @param int $segmentType\n     * @param string|null $value\n     * @param string|null $key\n     * @param RelativeResourceTemplate|null $template\n     * @param string $separator The separator that belongs at the end of a segment. Ending segments should use '/'.\n     * @throws ValidationException\n     */\n    public function __construct(\n        int $segmentType,\n        ?string $value = null,\n        ?string $key = null,\n        ?RelativeResourceTemplate $template = null,\n        string $separator = '/'\n    ) {\n        $this->segmentType = $segmentType;\n        $this->value = $value;\n        $this->key = $key;\n        $this->template = $template;\n        $this->separator = $separator;\n\n        switch ($this->segmentType) {\n            case Segment::LITERAL_SEGMENT:\n                $this->stringRepr = \"{$this->value}\";\n                break;\n            case Segment::WILDCARD_SEGMENT:\n                $this->stringRepr = '*';\n                break;\n            case Segment::DOUBLE_WILDCARD_SEGMENT:\n                $this->stringRepr = '**';\n                break;\n            case Segment::VARIABLE_SEGMENT:\n                $this->stringRepr = \"{{$this->key}={$this->template}}\";\n                break;\n            default:\n                throw new ValidationException(\n                    \"Unexpected Segment type: {$this->segmentType}\"\n                );\n        }\n    }\n\n    /**\n     * @return string A string representation of the segment.\n     */\n    public function __toString()\n    {\n        return $this->stringRepr;\n    }\n\n    /**\n     * Checks if $value matches this Segment.\n     *\n     * @param string $value\n     * @return bool\n     * @throws ValidationException\n     */\n    public function matches(string $value)\n    {\n        switch ($this->segmentType) {\n            case Segment::LITERAL_SEGMENT:\n                return $this->value === $value;\n            case Segment::WILDCARD_SEGMENT:\n                return self::isValidBinding($value);\n            case Segment::DOUBLE_WILDCARD_SEGMENT:\n                return self::isValidDoubleWildcardBinding($value);\n            case Segment::VARIABLE_SEGMENT:\n                return $this->template->matches($value);\n            default:\n                throw new ValidationException(\n                    \"Unexpected Segment type: {$this->segmentType}\"\n                );\n        }\n    }\n\n    /**\n     * @return int\n     */\n    public function getSegmentType()\n    {\n        return $this->segmentType;\n    }\n\n    /**\n     * @return string|null\n     */\n    public function getKey()\n    {\n        return $this->key;\n    }\n\n    /**\n     * @return string|null\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * @return RelativeResourceTemplate|null\n     */\n    public function getTemplate()\n    {\n        return $this->template;\n    }\n\n    /**\n     * @return string\n     */\n    public function getSeparator()\n    {\n        return $this->separator;\n    }\n\n    /**\n     * Check if $binding is a valid segment binding. Segment bindings may contain any characters\n     * except a forward slash ('/'), and may not be empty.\n     *\n     * @param string $binding\n     * @return bool\n     */\n    private static function isValidBinding(string $binding)\n    {\n        return preg_match('-^[^/]+$-', $binding) === 1;\n    }\n\n    /**\n     * Check if $binding is a valid double wildcard binding. Segment bindings may contain any\n     * characters, but may not be empty.\n     *\n     * @param string $binding\n     * @return bool\n     */\n    private static function isValidDoubleWildcardBinding(string $binding)\n    {\n        return preg_match('-^.+$-', $binding) === 1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/RetrySettings.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Closure;\n\n/**\n * The RetrySettings class is used to configure retrying and timeouts for RPCs.\n * This class can be passed as an optional parameter to RPC methods, or as part\n * of an optional array in the constructor of a client object. In addition,\n * many RPCs and API clients accept a PHP array in place of a RetrySettings\n * object. This can be used to change particular retry parameters without\n * needing to construct a complete RetrySettings object.\n *\n * Constructing a RetrySettings object\n * -----------------------------------\n *\n * See the RetrySettings constructor for documentation about parameters that\n * can be passed to RetrySettings.\n *\n * Example of creating a RetrySettings object using the constructor:\n * ```\n * $retrySettings = new RetrySettings([\n *     'initialRetryDelayMillis' => 100,\n *     'retryDelayMultiplier' => 1.3,\n *     'maxRetryDelayMillis' => 60000,\n *     'initialRpcTimeoutMillis' => 20000,\n *     'rpcTimeoutMultiplier' => 1.0,\n *     'maxRpcTimeoutMillis' => 20000,\n *     'totalTimeoutMillis' => 600000,\n *     'retryableCodes' => [ApiStatus::DEADLINE_EXCEEDED, ApiStatus::UNAVAILABLE],\n * ]);\n * ```\n *\n * It is also possible to create a new RetrySettings object from an existing\n * object using the {@see \\Google\\ApiCore\\RetrySettings::with()} method.\n *\n * Example modifying an existing RetrySettings object using `with()`:\n * ```\n * $newRetrySettings = $retrySettings->with([\n *     'totalTimeoutMillis' => 700000,\n * ]);\n * ```\n *\n * Modifying the retry behavior of an RPC method\n * ---------------------------------------------\n *\n * RetrySettings objects can be used to control retries for many RPC methods in\n * [google-cloud-php](https://github.com/googleapis/google-cloud-php).\n * The examples below make use of the\n * [GroupServiceClient](https://cloud.google.com/php/docs/reference/cloud-monitoring/latest/V3.Client.GroupServiceClient)\n * from the [Monitoring V3 API](https://github.com/googleapis/google-cloud-php/tree/master/src/Monitoring/V3),\n * but they can be applied to other APIs in the\n * [google-cloud-php](https://github.com/googleapis/google-cloud-php) repository.\n *\n * It is possible to specify the retry behavior to be used by an RPC via the\n * `retrySettings` field in the `optionalArgs` parameter. The `retrySettings`\n * field can contain either a RetrySettings object, or a PHP array containing\n * the particular retry parameters to be updated.\n *\n * Example of disabling retries for a single call to the\n * [listGroups](https://cloud.google.com/php/docs/reference/cloud-monitoring/latest/V3.Client.GroupServiceClient#_Google_Cloud_Monitoring_V3_Client_GroupServiceClient__listGroups__)\n * method, and setting a custom timeout:\n * ```\n * $result = $client->listGroups($name, [\n *     'retrySettings' => [\n *         'retriesEnabled' => false,\n *         'noRetriesRpcTimeoutMillis' => 5000,\n *     ]\n * ]);\n * ```\n *\n * Example of creating a new RetrySettings object and using it to override\n * the retry settings for a call to the\n * [listGroups](https://cloud.google.com/php/docs/reference/cloud-monitoring/latest/V3.Client.GroupServiceClient#_Google_Cloud_Monitoring_V3_Client_GroupServiceClient__listGroups__)\n * method:\n * ```\n * $customRetrySettings = new RetrySettings([\n *     'initialRetryDelayMillis' => 100,\n *     'retryDelayMultiplier' => 1.3,\n *     'maxRetryDelayMillis' => 60000,\n *     'initialRpcTimeoutMillis' => 20000,\n *     'rpcTimeoutMultiplier' => 1.0,\n *     'maxRpcTimeoutMillis' => 20000,\n *     'totalTimeoutMillis' => 600000,\n *     'retryableCodes' => [ApiStatus::DEADLINE_EXCEEDED, ApiStatus::UNAVAILABLE],\n * ]);\n *\n * $result = $client->listGroups($name, [\n *     'retrySettings' => $customRetrySettings\n * ]);\n * ```\n *\n * Modifying the default retry behavior for RPC methods on a Client object\n * -----------------------------------------------------------------------\n *\n * It is also possible to specify the retry behavior for RPC methods when\n * constructing a client object using the 'retrySettingsArray'. The examples\n * below again make use of the\n * [GroupServiceClient](https://cloud.google.com/php/docs/reference/cloud-monitoring/latest/V3.Client.GroupServiceClient)\n * from the [Monitoring V3 API](https://github.com/googleapis/google-cloud-php/tree/main/Monitoring/src/V3),\n * but they can be applied to other APIs in the\n * [google-cloud-php](https://github.com/googleapis/google-cloud-php) repository.\n *\n * The GroupServiceClient object accepts an optional `retrySettingsArray`\n * parameter, which can be used to specify retry behavior for RPC methods\n * on the client. The `retrySettingsArray` accepts a PHP array in which keys\n * are the names of RPC methods on the client, and values are either a\n * RetrySettings object or a PHP array containing the particular retry\n * parameters to be updated.\n *\n * Example updating the retry settings for four methods of GroupServiceClient:\n * ```\n * use Google\\Cloud\\Monitoring\\V3\\GroupServiceClient;\n *\n * $customRetrySettings = new RetrySettings([\n *     'initialRetryDelayMillis' => 100,\n *     'retryDelayMultiplier' => 1.3,\n *     'maxRetryDelayMillis' => 60000,\n *     'initialRpcTimeoutMillis' => 20000,\n *     'rpcTimeoutMultiplier' => 1.0,\n *     'maxRpcTimeoutMillis' => 20000,\n *     'totalTimeoutMillis' => 600000,\n *     'retryableCodes' => [ApiStatus::DEADLINE_EXCEEDED, ApiStatus::UNAVAILABLE],\n * ]);\n *\n * $updatedCustomRetrySettings = $customRetrySettings->with([\n *     'totalTimeoutMillis' => 700000\n * ]);\n *\n * $client = new GroupServiceClient([\n *     'retrySettingsArray' => [\n *         'listGroups' => ['retriesEnabled' => false],\n *         'getGroup' => [\n *             'initialRpcTimeoutMillis' => 10000,\n *             'maxRpcTimeoutMillis' => 30000,\n *             'totalTimeoutMillis' => 60000,\n *         ],\n *         'deleteGroup' => $customRetrySettings,\n *         'updateGroup' => $updatedCustomRetrySettings\n *     ],\n * ]);\n * ```\n *\n * Configure the use of logical timeout\n * ------------------------------------\n *\n * To configure the use of a logical timeout, where a logical timeout is the\n * duration a method is given to complete one or more RPC attempts, with each\n * attempt using only the time remaining in the logical timeout, use\n * {@see \\Google\\ApiCore\\RetrySettings::logicalTimeout()} combined with\n * {@see \\Google\\ApiCore\\RetrySettings::with()}.\n *\n * ```\n * $timeoutSettings = RetrySettings::logicalTimeout(30000);\n *\n * $customRetrySettings = $customRetrySettings->with($timeoutSettings);\n *\n * $result = $client->listGroups($name, [\n *     'retrySettings' => $customRetrySettings\n * ]);\n * ```\n *\n * {@see \\Google\\ApiCore\\RetrySettings::logicalTimeout()} can also be used on a\n * method call independent of a RetrySettings instance.\n *\n * ```\n * $timeoutSettings = RetrySettings::logicalTimeout(30000);\n *\n * $result = $client->listGroups($name, [\n *     'retrySettings' => $timeoutSettings\n * ]);\n * ```\n */\nclass RetrySettings\n{\n    use ValidationTrait;\n\n    const DEFAULT_MAX_RETRIES = 0;\n\n    private $retriesEnabled;\n\n    private $retryableCodes;\n\n    private $initialRetryDelayMillis;\n    private $retryDelayMultiplier;\n    private $maxRetryDelayMillis;\n    private $initialRpcTimeoutMillis;\n    private $rpcTimeoutMultiplier;\n    private $maxRpcTimeoutMillis;\n    private $totalTimeoutMillis;\n\n    private $noRetriesRpcTimeoutMillis;\n\n    /**\n     * The number of maximum retries an operation can do.\n     * This doesn't include the original API call.\n     * Setting this to 0 means no limit.\n     */\n    private int $maxRetries;\n\n    /**\n     * When set, this function will be used to evaluate if the retry should\n     * take place or not. The callable will have the following signature:\n     * function (Exception $e, array $options): bool\n     */\n    private ?Closure $retryFunction;\n\n    /**\n     * Constructs an instance.\n     *\n     * @param array $settings {\n     *     Required. Settings for configuring the retry behavior. All parameters are required except\n     *     $retriesEnabled and $noRetriesRpcTimeoutMillis, which are optional and have defaults\n     *     determined based on the other settings provided.\n     *\n     *     @type bool     $retriesEnabled Optional. Enables retries. If not specified, the value is\n     *                    determined using the $retryableCodes setting. If $retryableCodes is empty,\n     *                    then $retriesEnabled is set to false; otherwise, it is set to true.\n     *     @type int      $noRetriesRpcTimeoutMillis Optional. The timeout of the rpc call to be used\n     *                    if $retriesEnabled is false, in milliseconds. It not specified, the value\n     *                    of $initialRpcTimeoutMillis is used.\n     *     @type array    $retryableCodes The Status codes that are retryable. Each status should be\n     *                    either one of the string constants defined on {@see \\Google\\ApiCore\\ApiStatus}\n     *                    or an integer constant defined on {@see \\Google\\Rpc\\Code}.\n     *     @type int      $initialRetryDelayMillis The initial delay of retry in milliseconds.\n     *     @type int      $retryDelayMultiplier The exponential multiplier of retry delay.\n     *     @type int      $maxRetryDelayMillis The max delay of retry in milliseconds.\n     *     @type int      $initialRpcTimeoutMillis The initial timeout of rpc call in milliseconds.\n     *     @type int      $rpcTimeoutMultiplier The exponential multiplier of rpc timeout.\n     *     @type int      $maxRpcTimeoutMillis The max timeout of rpc call in milliseconds.\n     *     @type int      $totalTimeoutMillis The max accumulative timeout in total.\n     *     @type int      $maxRetries The max retries allowed for an operation.\n     *                    Defaults to the value of the DEFAULT_MAX_RETRIES constant.\n     *                    This option is experimental.\n     *     @type callable $retryFunction This function will be used to decide if we should retry or not.\n     *                    Callable signature: `function (Exception $e, array $options): bool`\n     *                    This option is experimental.\n     * }\n     */\n    public function __construct(array $settings)\n    {\n        $this->validateNotNull($settings, [\n            'initialRetryDelayMillis',\n            'retryDelayMultiplier',\n            'maxRetryDelayMillis',\n            'initialRpcTimeoutMillis',\n            'rpcTimeoutMultiplier',\n            'maxRpcTimeoutMillis',\n            'totalTimeoutMillis',\n            'retryableCodes'\n        ]);\n        $this->initialRetryDelayMillis = $settings['initialRetryDelayMillis'];\n        $this->retryDelayMultiplier = $settings['retryDelayMultiplier'];\n        $this->maxRetryDelayMillis = $settings['maxRetryDelayMillis'];\n        $this->initialRpcTimeoutMillis = $settings['initialRpcTimeoutMillis'];\n        $this->rpcTimeoutMultiplier = $settings['rpcTimeoutMultiplier'];\n        $this->maxRpcTimeoutMillis = $settings['maxRpcTimeoutMillis'];\n        $this->totalTimeoutMillis = $settings['totalTimeoutMillis'];\n        $this->retryableCodes = $settings['retryableCodes'];\n        $this->retriesEnabled = array_key_exists('retriesEnabled', $settings)\n            ? $settings['retriesEnabled']\n            : (count($this->retryableCodes) > 0);\n        $this->noRetriesRpcTimeoutMillis = array_key_exists('noRetriesRpcTimeoutMillis', $settings)\n            ? $settings['noRetriesRpcTimeoutMillis']\n            : $this->initialRpcTimeoutMillis;\n        $this->maxRetries = $settings['maxRetries'] ?? self::DEFAULT_MAX_RETRIES;\n        $this->retryFunction = $settings['retryFunction'] ?? null;\n    }\n\n    /**\n     * Constructs an array mapping method names to CallSettings.\n     *\n     * @param string $serviceName\n     *     The fully-qualified name of this service, used as a key into\n     *     the client config file.\n     * @param array $clientConfig\n     *     An array parsed from the standard API client config file.\n     * @param bool $disableRetries\n     *     Disable retries in all loaded RetrySettings objects. Defaults to false.\n     * @throws ValidationException\n     * @return RetrySettings[] $retrySettings\n     */\n    public static function load(\n        string $serviceName,\n        array $clientConfig,\n        bool $disableRetries = false\n    ) {\n        $serviceRetrySettings = [];\n\n        $serviceConfig = $clientConfig['interfaces'][$serviceName];\n        $retryCodes = $serviceConfig['retry_codes'];\n        $retryParams = $serviceConfig['retry_params'];\n        foreach ($serviceConfig['methods'] as $methodName => $methodConfig) {\n            $timeoutMillis = $methodConfig['timeout_millis'];\n\n            if (empty($methodConfig['retry_codes_name']) || empty($methodConfig['retry_params_name'])) {\n                // Construct a RetrySettings object with retries disabled\n                $retrySettings = self::constructDefault()->with([\n                    'noRetriesRpcTimeoutMillis' => $timeoutMillis,\n                ]);\n            } else {\n                $retryCodesName = $methodConfig['retry_codes_name'];\n                $retryParamsName = $methodConfig['retry_params_name'];\n\n                if (!array_key_exists($retryCodesName, $retryCodes)) {\n                    throw new ValidationException(\"Invalid retry_codes_name setting: '$retryCodesName'\");\n                }\n                if (!array_key_exists($retryParamsName, $retryParams)) {\n                    throw new ValidationException(\"Invalid retry_params_name setting: '$retryParamsName'\");\n                }\n\n                foreach ($retryCodes[$retryCodesName] as $status) {\n                    if (!ApiStatus::isValidStatus($status)) {\n                        throw new ValidationException(\"Invalid status code: '$status'\");\n                    }\n                }\n\n                $retryParameters = self::convertArrayFromSnakeCase($retryParams[$retryParamsName]) + [\n                    'retryableCodes' => $retryCodes[$retryCodesName],\n                    'noRetriesRpcTimeoutMillis' => $timeoutMillis,\n                ];\n                if ($disableRetries) {\n                    $retryParameters['retriesEnabled'] = false;\n                }\n\n                $retrySettings = new RetrySettings($retryParameters);\n            }\n\n            $serviceRetrySettings[$methodName] = $retrySettings;\n        }\n\n        return $serviceRetrySettings;\n    }\n\n    public static function constructDefault()\n    {\n        return new RetrySettings([\n            'retriesEnabled' => false,\n            'noRetriesRpcTimeoutMillis' => 30000,\n            'initialRetryDelayMillis' => 100,\n            'retryDelayMultiplier' => 1.3,\n            'maxRetryDelayMillis' => 60000,\n            'initialRpcTimeoutMillis' => 20000,\n            'rpcTimeoutMultiplier' => 1,\n            'maxRpcTimeoutMillis' => 20000,\n            'totalTimeoutMillis' => 600000,\n            'retryableCodes' => [],\n            'maxRetries' => self::DEFAULT_MAX_RETRIES,\n            'retryFunction' => null]);\n    }\n\n    /**\n     * Creates a new instance of RetrySettings that updates the settings in the existing instance\n     * with the settings specified in the $settings parameter.\n     *\n     * @param array $settings {\n     *     Settings for configuring the retry behavior. Supports all of the options supported by\n     *     the constructor; see {@see \\Google\\ApiCore\\RetrySettings::__construct()}. All parameters\n     *     are optional - all unset parameters will default to the value in the existing instance.\n     * }\n     * @return RetrySettings\n     */\n    public function with(array $settings)\n    {\n        $existingSettings = [\n            'initialRetryDelayMillis' => $this->getInitialRetryDelayMillis(),\n            'retryDelayMultiplier' => $this->getRetryDelayMultiplier(),\n            'maxRetryDelayMillis' => $this->getMaxRetryDelayMillis(),\n            'initialRpcTimeoutMillis' => $this->getInitialRpcTimeoutMillis(),\n            'rpcTimeoutMultiplier' => $this->getRpcTimeoutMultiplier(),\n            'maxRpcTimeoutMillis' => $this->getMaxRpcTimeoutMillis(),\n            'totalTimeoutMillis' => $this->getTotalTimeoutMillis(),\n            'retryableCodes' => $this->getRetryableCodes(),\n            'retriesEnabled' => $this->retriesEnabled(),\n            'noRetriesRpcTimeoutMillis' => $this->getNoRetriesRpcTimeoutMillis(),\n            'maxRetries' => $this->getMaxRetries(),\n            'retryFunction' => $this->getRetryFunction(),\n        ];\n        return new RetrySettings($settings + $existingSettings);\n    }\n\n    /**\n     * Creates an associative array of the {@see \\Google\\ApiCore\\RetrySettings} timeout fields configured\n     * with the given timeout specified in the $timeout parameter interpreted as a logical timeout.\n     *\n     * @param int $timeout The timeout in milliseconds to be used as a logical call timeout.\n     * @return array\n     */\n    public static function logicalTimeout(int $timeout)\n    {\n        return [\n            'initialRpcTimeoutMillis' => $timeout,\n            'maxRpcTimeoutMillis' => $timeout,\n            'totalTimeoutMillis' => $timeout,\n            'noRetriesRpcTimeoutMillis' => $timeout,\n            'rpcTimeoutMultiplier' => 1.0\n        ];\n    }\n\n    /**\n     * @return bool Returns true if retries are enabled, otherwise returns false.\n     */\n    public function retriesEnabled()\n    {\n        return $this->retriesEnabled;\n    }\n\n    /**\n     * @return int The timeout of the rpc call to be used if $retriesEnabled is false,\n     *             in milliseconds.\n     */\n    public function getNoRetriesRpcTimeoutMillis()\n    {\n        return $this->noRetriesRpcTimeoutMillis;\n    }\n\n    /**\n     * @return int[] Status codes to retry\n     */\n    public function getRetryableCodes()\n    {\n        return $this->retryableCodes;\n    }\n\n    /**\n     * @return int The initial retry delay in milliseconds. If $this->retriesEnabled()\n     *             is false, this setting is unused.\n     */\n    public function getInitialRetryDelayMillis()\n    {\n        return $this->initialRetryDelayMillis;\n    }\n\n    /**\n     * @return float The retry delay multiplier. If $this->retriesEnabled()\n     *               is false, this setting is unused.\n     */\n    public function getRetryDelayMultiplier()\n    {\n        return $this->retryDelayMultiplier;\n    }\n\n    /**\n     * @return int The maximum retry delay in milliseconds. If $this->retriesEnabled()\n     *             is false, this setting is unused.\n     */\n    public function getMaxRetryDelayMillis()\n    {\n        return $this->maxRetryDelayMillis;\n    }\n\n    /**\n     * @return int The initial rpc timeout in milliseconds. If $this->retriesEnabled()\n     *             is false, this setting is unused - use noRetriesRpcTimeoutMillis to\n     *             set the timeout in that case.\n     */\n    public function getInitialRpcTimeoutMillis()\n    {\n        return $this->initialRpcTimeoutMillis;\n    }\n\n    /**\n     * @return float The rpc timeout multiplier. If $this->retriesEnabled()\n     *               is false, this setting is unused.\n     */\n    public function getRpcTimeoutMultiplier()\n    {\n        return $this->rpcTimeoutMultiplier;\n    }\n\n    /**\n     * @return int The maximum rpc timeout in milliseconds. If $this->retriesEnabled()\n     *             is false, this setting is unused - use noRetriesRpcTimeoutMillis to\n     *             set the timeout in that case.\n     */\n    public function getMaxRpcTimeoutMillis()\n    {\n        return $this->maxRpcTimeoutMillis;\n    }\n\n    /**\n     * @return int The total time in milliseconds to spend on the call, including all\n     *             retry attempts and delays between attempts. If $this->retriesEnabled()\n     *             is false, this setting is unused - use noRetriesRpcTimeoutMillis to\n     *             set the timeout in that case.\n     */\n    public function getTotalTimeoutMillis()\n    {\n        return $this->totalTimeoutMillis;\n    }\n\n    /**\n     * @experimental\n     */\n    public function getMaxRetries()\n    {\n        return $this->maxRetries;\n    }\n\n    /**\n     * @experimental\n     */\n    public function getRetryFunction()\n    {\n        return $this->retryFunction;\n    }\n\n    private static function convertArrayFromSnakeCase(array $settings)\n    {\n        $camelCaseSettings = [];\n        foreach ($settings as $key => $value) {\n            $camelCaseKey = str_replace(' ', '', ucwords(str_replace('_', ' ', $key)));\n            $camelCaseSettings[lcfirst($camelCaseKey)] = $value;\n        }\n        return $camelCaseSettings;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Serializer.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Google\\Protobuf\\Any;\nuse Google\\Protobuf\\Descriptor;\nuse Google\\Protobuf\\DescriptorPool;\nuse Google\\Protobuf\\FieldDescriptor;\nuse Google\\Protobuf\\Internal\\Message;\nuse RuntimeException;\n\n/**\n * Collection of methods to help with serialization of protobuf objects\n */\nclass Serializer\n{\n    const MAP_KEY_FIELD_NAME = 'key';\n    const MAP_VALUE_FIELD_NAME = 'value';\n\n    private static $phpArraySerializer;\n    // Caches for different helper functions\n    private static array $getterMap = [];\n    private static array $setterMap = [];\n    private static array $snakeCaseMap = [];\n    private static array $camelCaseMap = [];\n\n    private static $metadataKnownTypes = [\n        'google.rpc.retryinfo-bin' => \\Google\\Rpc\\RetryInfo::class,\n        'google.rpc.debuginfo-bin' => \\Google\\Rpc\\DebugInfo::class,\n        'google.rpc.quotafailure-bin' => \\Google\\Rpc\\QuotaFailure::class,\n        'google.rpc.badrequest-bin' => \\Google\\Rpc\\BadRequest::class,\n        'google.rpc.requestinfo-bin' => \\Google\\Rpc\\RequestInfo::class,\n        'google.rpc.resourceinfo-bin' => \\Google\\Rpc\\ResourceInfo::class,\n        'google.rpc.errorinfo-bin' => \\Google\\Rpc\\ErrorInfo::class,\n        'google.rpc.help-bin' => \\Google\\Rpc\\Help::class,\n        'google.rpc.localizedmessage-bin' => \\Google\\Rpc\\LocalizedMessage::class,\n    ];\n\n    private $fieldTransformers;\n    private $messageTypeTransformers;\n    private $decodeFieldTransformers;\n    private $decodeMessageTypeTransformers;\n    // Array of key-value pairs which specify a custom encoding function.\n    // The key is the proto class and the value is the function\n    // which will be used to convert the proto instead of the\n    // encodeMessage method from the Serializer class.\n    private $customEncoders;\n\n    private $descriptorMaps = [];\n\n    /**\n     * Serializer constructor.\n     *\n     * @param array $fieldTransformers An array mapping field names to transformation functions\n     * @param array $messageTypeTransformers An array mapping message names to transformation functions\n     * @param array $decodeFieldTransformers An array mapping field names to transformation functions\n     * @param array $decodeMessageTypeTransformers An array mapping message names to transformation functions\n     */\n    public function __construct(\n        $fieldTransformers = [],\n        $messageTypeTransformers = [],\n        $decodeFieldTransformers = [],\n        $decodeMessageTypeTransformers = [],\n        $customEncoders = [],\n    ) {\n        $this->fieldTransformers = $fieldTransformers;\n        $this->messageTypeTransformers = $messageTypeTransformers;\n        $this->decodeFieldTransformers = $decodeFieldTransformers;\n        $this->decodeMessageTypeTransformers = $decodeMessageTypeTransformers;\n        $this->customEncoders = $customEncoders;\n    }\n\n    /**\n     * Encode protobuf message as a PHP array\n     *\n     * @param mixed $message\n     * @return array\n     * @throws ValidationException\n     */\n    public function encodeMessage($message)\n    {\n        $cls = get_class($message);\n\n        // If we have supplied a customEncoder for this class type,\n        // then we use that instead of the general encodeMessage definition.\n        if (array_key_exists($cls, $this->customEncoders)) {\n            $func = $this->customEncoders[$cls];\n            return call_user_func($func, $message);\n        }\n        // Get message descriptor\n        $pool = DescriptorPool::getGeneratedPool();\n        $messageType = $pool->getDescriptorByClassName(get_class($message));\n        try {\n            return $this->encodeMessageImpl($message, $messageType);\n        } catch (\\Exception $e) {\n            throw new ValidationException(\n                'Error encoding message: ' . $e->getMessage(),\n                $e->getCode(),\n                $e\n            );\n        }\n    }\n\n    /**\n     * Decode PHP array into the specified protobuf message\n     *\n     * @param mixed $message\n     * @param array $data\n     * @return mixed\n     * @throws ValidationException\n     */\n    public function decodeMessage($message, array $data)\n    {\n        // Get message descriptor\n        $pool = DescriptorPool::getGeneratedPool();\n        $messageType = $pool->getDescriptorByClassName(get_class($message));\n        try {\n            return $this->decodeMessageImpl($message, $messageType, $data);\n        } catch (\\Exception $e) {\n            throw new ValidationException(\n                'Error decoding message: ' . $e->getMessage(),\n                $e->getCode(),\n                $e\n            );\n        }\n    }\n\n    /**\n     * @param Message $message\n     * @return string Json representation of $message\n     * @throws ValidationException\n     */\n    public static function serializeToJson(Message $message)\n    {\n        return json_encode(self::serializeToPhpArray($message), JSON_PRETTY_PRINT);\n    }\n\n    /**\n     * @param Message $message\n     * @return array PHP array representation of $message\n     * @throws ValidationException\n     */\n    public static function serializeToPhpArray(Message $message)\n    {\n        return self::getPhpArraySerializer()->encodeMessage($message);\n    }\n\n    /**\n     * Decode metadata received from gRPC status object\n     *\n     * @param array $metadata\n     * @return array\n     */\n    public static function decodeMetadata(array $metadata)\n    {\n        if (count($metadata) == 0) {\n            return [];\n        }\n        $result = [];\n        foreach ($metadata as $key => $values) {\n            foreach ($values as $value) {\n                $decodedValue = [\n                    '@type' => $key,\n                ];\n                if (self::hasBinaryHeaderSuffix($key)) {\n                    if (isset(self::$metadataKnownTypes[$key])) {\n                        $class = self::$metadataKnownTypes[$key];\n                        /** @var Message $message */\n                        $message = new $class();\n                        try {\n                            $message->mergeFromString($value);\n                            $decodedValue += self::serializeToPhpArray($message);\n                        } catch (\\Exception $e) {\n                            // We encountered an error trying to deserialize the data\n                            $decodedValue += [\n                                'data' => '<Unable to deserialize data>',\n                            ];\n                        }\n                    } else {\n                        // The metadata contains an unexpected binary type\n                        $decodedValue += [\n                            'data' => '<Unknown Binary Data>',\n                        ];\n                    }\n                } else {\n                    $decodedValue += [\n                        'data' => $value,\n                    ];\n                }\n                $result[] = $decodedValue;\n            }\n        }\n        return $result;\n    }\n\n    /**\n     * Decode an array of Any messages into a printable PHP array.\n     *\n     * @param iterable $anyArray\n     * @return array\n     */\n    public static function decodeAnyMessages($anyArray)\n    {\n        $results = [];\n        foreach ($anyArray as $any) {\n            try {\n                /** @var Any $any */\n                /** @var Message $unpacked */\n                $unpacked = $any->unpack();\n                $results[] = self::serializeToPhpArray($unpacked);\n            } catch (\\Exception $ex) {\n                echo \"$ex\\n\";\n                // failed to unpack the $any object - show as unknown binary data\n                $results[] = [\n                    'typeUrl' => $any->getTypeUrl(),\n                    'value' => '<Unknown Binary Data>',\n                ];\n            }\n        }\n        return $results;\n    }\n\n    /**\n     * @param FieldDescriptor $field\n     * @param Message|array|string $data\n     * @return mixed\n     * @throws \\Exception\n     */\n    private function encodeElement(FieldDescriptor $field, $data)\n    {\n        switch ($field->getType()) {\n            case GPBType::MESSAGE:\n                if (is_array($data)) {\n                    $result = $data;\n                } else {\n                    $result = $this->encodeMessageImpl($data, $field->getMessageType());\n                }\n                $messageType = $field->getMessageType()->getFullName();\n                if (isset($this->messageTypeTransformers[$messageType])) {\n                    $result = $this->messageTypeTransformers[$messageType]($result);\n                }\n                break;\n            default:\n                $result = $data;\n                break;\n        }\n\n        if (isset($this->fieldTransformers[$field->getName()])) {\n            $result = $this->fieldTransformers[$field->getName()]($result);\n        }\n        return $result;\n    }\n\n    private function getDescriptorMaps(Descriptor $descriptor)\n    {\n        if (!isset($this->descriptorMaps[$descriptor->getFullName()])) {\n            $fieldsByName = [];\n            $fieldCount = $descriptor->getFieldCount();\n            for ($i = 0; $i < $fieldCount; $i++) {\n                $field = $descriptor->getField($i);\n                $fieldsByName[$field->getName()] = $field;\n            }\n            $fieldToOneof = [];\n            $oneofCount = $descriptor->getOneofDeclCount();\n            for ($i = 0; $i < $oneofCount; $i++) {\n                $oneof = $descriptor->getOneofDecl($i);\n                $oneofFieldCount = $oneof->getFieldCount();\n                for ($j = 0; $j < $oneofFieldCount; $j++) {\n                    $field = $oneof->getField($j);\n                    $fieldToOneof[$field->getName()] = $oneof->getName();\n                }\n            }\n            $this->descriptorMaps[$descriptor->getFullName()] = [$fieldsByName, $fieldToOneof];\n        }\n        return $this->descriptorMaps[$descriptor->getFullName()];\n    }\n\n    /**\n     * @param Message $message\n     * @param Descriptor $messageType\n     * @return array\n     * @throws \\Exception\n     */\n    private function encodeMessageImpl(Message $message, Descriptor $messageType)\n    {\n        $data = [];\n\n        // Call the getDescriptorMaps outside of the loop to save processing.\n        // Use the same set of fields to loop over, instead of using field count.\n        list($fields, $fieldsToOneof) = $this->getDescriptorMaps($messageType);\n        foreach ($fields as $field) {\n            $key = $field->getName();\n            $getter = $this->getGetter($key);\n            $v = $message->$getter();\n\n            if (is_null($v)) {\n                continue;\n            }\n\n            // Check and skip unset fields inside oneofs\n            if (isset($fieldsToOneof[$key])) {\n                $oneofName = $fieldsToOneof[$key];\n                $oneofGetter =  $this->getGetter($oneofName);\n                if ($message->$oneofGetter() !== $key) {\n                    continue;\n                }\n            }\n\n            if ($field->isMap()) {\n                list($mapFieldsByName, $_) = $this->getDescriptorMaps($field->getMessageType());\n                $keyField = $mapFieldsByName[self::MAP_KEY_FIELD_NAME];\n                $valueField = $mapFieldsByName[self::MAP_VALUE_FIELD_NAME];\n                $arr = [];\n                foreach ($v as $k => $vv) {\n                    $arr[$this->encodeElement($keyField, $k)] = $this->encodeElement($valueField, $vv);\n                }\n                $v = $arr;\n            } elseif ($this->checkFieldRepeated($field)) {\n                $arr = [];\n                foreach ($v as $k => $vv) {\n                    $arr[$k] = $this->encodeElement($field, $vv);\n                }\n                $v = $arr;\n            } else {\n                $v = $this->encodeElement($field, $v);\n            }\n\n            $key = self::toCamelCase($key);\n            $data[$key] = $v;\n        }\n\n        return $data;\n    }\n\n    /**\n     * @param FieldDescriptor $field\n     * @param mixed $data\n     * @return mixed\n     * @throws \\Exception\n     */\n    private function decodeElement(FieldDescriptor $field, $data)\n    {\n        if (isset($this->decodeFieldTransformers[$field->getName()])) {\n            $data = $this->decodeFieldTransformers[$field->getName()]($data);\n        }\n\n        switch ($field->getType()) {\n            case GPBType::MESSAGE:\n                if ($data instanceof Message) {\n                    return $data;\n                }\n                $messageType = $field->getMessageType();\n                $messageTypeName = $messageType->getFullName();\n                $klass = $messageType->getClass();\n                $msg = new $klass();\n                if (isset($this->decodeMessageTypeTransformers[$messageTypeName])) {\n                    $data = $this->decodeMessageTypeTransformers[$messageTypeName]($data);\n                }\n\n                return $this->decodeMessageImpl($msg, $messageType, $data);\n            default:\n                return $data;\n        }\n    }\n\n    /**\n     * @param Message $message\n     * @param Descriptor $messageType\n     * @param array $data\n     * @return mixed\n     * @throws \\Exception\n     */\n    private function decodeMessageImpl(Message $message, Descriptor $messageType, array $data)\n    {\n        list($fieldsByName, $_) = $this->getDescriptorMaps($messageType);\n        foreach ($data as $key => $v) {\n            // Get the field by tag number or name\n            $fieldName = self::toSnakeCase($key);\n\n            // Unknown field found\n            if (!isset($fieldsByName[$fieldName])) {\n                throw new RuntimeException(sprintf(\n                    'cannot handle unknown field %s on message %s',\n                    $fieldName,\n                    $messageType->getFullName()\n                ));\n            }\n\n            /** @var FieldDescriptor $field */\n            $field = $fieldsByName[$fieldName];\n\n            if ($field->isMap()) {\n                list($mapFieldsByName, $_) = $this->getDescriptorMaps($field->getMessageType());\n                $keyField = $mapFieldsByName[self::MAP_KEY_FIELD_NAME];\n                $valueField = $mapFieldsByName[self::MAP_VALUE_FIELD_NAME];\n                $arr = [];\n                foreach ($v as $k => $vv) {\n                    $arr[$this->decodeElement($keyField, $k)] = $this->decodeElement($valueField, $vv);\n                }\n                $value = $arr;\n            } elseif ($this->checkFieldRepeated($field)) {\n                $arr = [];\n                foreach ($v as $k => $vv) {\n                    $arr[$k] = $this->decodeElement($field, $vv);\n                }\n                $value = $arr;\n            } else {\n                $value = $this->decodeElement($field, $v);\n            }\n\n            $setter = $this->getSetter($field->getName());\n            $message->$setter($value);\n\n            // We must unset $value here, otherwise the protobuf c extension will mix up the references\n            // and setting one value will change all others\n            unset($value);\n        }\n        return $message;\n    }\n\n    /**\n     * @param FieldDescriptor $field\n     * @return bool\n     */\n    private function checkFieldRepeated(FieldDescriptor $field): bool\n    {\n        return method_exists($field, 'isRepeated')\n            ? $field->isRepeated()\n            : $field->getLabel() === GPBLabel::REPEATED;\n    }\n\n    /**\n     * @param string $name\n     * @return string Getter function\n     */\n    public static function getGetter(string $name)\n    {\n        if (!isset(self::$getterMap[$name])) {\n            self::$getterMap[$name] = 'get' . ucfirst(self::toCamelCase($name));\n        }\n        return self::$getterMap[$name];\n    }\n\n    /**\n     * @param string $name\n     * @return string Setter function\n     */\n    public static function getSetter(string $name)\n    {\n        if (!isset(self::$setterMap[$name])) {\n            self::$setterMap[$name] = 'set' . ucfirst(self::toCamelCase($name));\n        }\n        return self::$setterMap[$name];\n    }\n\n    /**\n     * Convert string from camelCase to snake_case\n     *\n     * @param string $key\n     * @return string\n     */\n    public static function toSnakeCase(string $key)\n    {\n        if (!isset(self::$snakeCaseMap[$key])) {\n            self::$snakeCaseMap[$key] = strtolower(\n                preg_replace(['/([a-z\\d])([A-Z])/', '/([^_])([A-Z][a-z])/'], '$1_$2', $key)\n            );\n        }\n        return self::$snakeCaseMap[$key];\n    }\n\n    /**\n     * Convert string from snake_case to camelCase\n     *\n     * @param string $key\n     * @return string\n     */\n    public static function toCamelCase(string $key)\n    {\n        if (!isset(self::$camelCaseMap[$key])) {\n            self::$camelCaseMap[$key] = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $key))));\n        }\n        return self::$camelCaseMap[$key];\n    }\n\n    private static function hasBinaryHeaderSuffix(string $key)\n    {\n        return substr_compare($key, '-bin', strlen($key) - 4) === 0;\n    }\n\n    private static function getPhpArraySerializer()\n    {\n        if (is_null(self::$phpArraySerializer)) {\n            self::$phpArraySerializer = new Serializer();\n        }\n        return self::$phpArraySerializer;\n    }\n\n    public static function loadKnownMetadataTypes()\n    {\n        foreach (self::$metadataKnownTypes as $key => $class) {\n            new $class();\n        }\n    }\n}\n\n// It is necessary to call this when this file is included. Otherwise we cannot be\n// guaranteed that the relevant classes will be loaded into the protobuf descriptor\n// pool when we try to unpack an Any object containing that class.\n// phpcs:disable PSR1.Files.SideEffects\nSerializer::loadKnownMetadataTypes();\n// phpcs:enable\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ServerStream.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Google\\Auth\\Logging\\LoggingTrait;\nuse Google\\Auth\\Logging\\RpcLogEvent;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Code;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * ServerStream is the response object from a server streaming API call.\n *\n * @template T = mixed\n */\nclass ServerStream\n{\n    use LoggingTrait;\n\n    private $call;\n    private $resourcesGetMethod;\n    private null|LoggerInterface $logger;\n\n    /**\n     * ServerStream constructor.\n     *\n     * @param ServerStreamingCallInterface $serverStreamingCall The server streaming call object\n     * @param array $streamingDescriptor\n     * @param null|LoggerInterface $logger A PSR-3 compliant logger.\n     */\n    public function __construct(\n        $serverStreamingCall,\n        array $streamingDescriptor = [],\n        null|LoggerInterface $logger = null\n    ) {\n        $this->call = $serverStreamingCall;\n        if (array_key_exists('resourcesGetMethod', $streamingDescriptor)) {\n            $this->resourcesGetMethod = $streamingDescriptor['resourcesGetMethod'];\n        }\n        $this->logger = $logger;\n    }\n\n    /**\n     * A generator which yields results from the server until the streaming call\n     * completes. Throws an ApiException if the streaming call failed.\n     *\n     * @throws ApiException\n     * @return \\Generator<int, T>|mixed\n     */\n    public function readAll()\n    {\n        $resourcesGetMethod = $this->resourcesGetMethod;\n        foreach ($this->call->responses() as $response) {\n            if ($this->logger && $response instanceof Message) {\n                $responseEvent = new RpcLogEvent();\n                $responseEvent->payload = $response->serializeToJsonString();\n                $responseEvent->processId = (int) getmypid();\n                $responseEvent->requestId = crc32((string) spl_object_id($this) . getmypid());\n\n                $this->logResponse($responseEvent);\n            }\n\n            if (!is_null($resourcesGetMethod)) {\n                foreach ($response->$resourcesGetMethod() as $resource) {\n                    yield $resource;\n                }\n            } else {\n                yield $response;\n            }\n        }\n\n        // Errors in the REST transport will be thrown from there and not reach\n        // this handling. Successful REST server-streams will have an OK status.\n        $status = $this->call->getStatus();\n\n        if ($this->logger) {\n            $statusEvent = new RpcLogEvent();\n            $statusEvent->status = $status->code;\n            $statusEvent->processId = (int) getmypid();\n            $statusEvent->requestId = crc32((string) spl_object_id($this) . getmypid());\n\n            $this->logResponse($statusEvent);\n        }\n\n        if ($status->code !== Code::OK) {\n            throw ApiException::createFromStdClass($status);\n        }\n    }\n\n    /**\n     * Return the underlying call object.\n     *\n     * @return ServerStreamingCallInterface\n     */\n    public function getServerStreamingCall()\n    {\n        return $this->call;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ServerStreamingCallInterface.php",
    "content": "<?php\n/*\n * Copyright 2021 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * @internal\n */\ninterface ServerStreamingCallInterface\n{\n\n    /**\n     * Start the call.\n     *\n     * @param mixed $data     The data to send\n     * @param array<mixed> $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     * @param array<mixed> $options  An array of options, possible keys:\n     *                        'flags' => a number (optional)\n     * @return void\n     */\n    public function start($data, array $metadata = [], array $options = []);\n\n    /**\n     * @return mixed An iterator of response values.\n     */\n    public function responses();\n\n    /**\n     * Return the status of the server stream.\n     *\n     * @return \\stdClass The API status.\n     */\n    public function getStatus();\n\n    /**\n     * @return mixed The metadata sent by the server.\n     */\n    public function getMetadata();\n\n    /**\n     * @return mixed The trailing metadata sent by the server.\n     */\n    public function getTrailingMetadata();\n\n    /**\n     * @return string The URI of the endpoint.\n     */\n    public function getPeer();\n\n    /**\n     * Cancels the call.\n     *\n     * @return void\n     */\n    public function cancel();\n\n    /**\n     * Set the CallCredentials for the underlying Call.\n     *\n     * @param mixed $call_credentials The CallCredentials object\n     *\n     * @return void\n     */\n    public function setCallCredentials($call_credentials);\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ServiceAddressTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\n/**\n * Provides helper methods for service address handling.\n *\n * @deprecated\n * @todo (dwsupplee) serviceAddress is deprecated now in favor of\n *        apiEndpoint. Rename the trait/method in our next major release.\n */\ntrait ServiceAddressTrait\n{\n    private static $defaultPort = 443;\n\n    /**\n     * @param string $apiEndpoint\n     * @return array\n     * @throws ValidationException\n     */\n    private static function normalizeServiceAddress(string $apiEndpoint)\n    {\n        $components = explode(':', $apiEndpoint);\n        if (count($components) == 2) {\n            // Port is included in service address\n            return [$components[0], $components[1]];\n        } elseif (count($components) == 1) {\n            // Port is not included - append default port\n            return [$components[0], self::$defaultPort];\n        } else {\n            throw new ValidationException(\"Invalid apiEndpoint: $apiEndpoint\");\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/GeneratedTest.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\ApiCore\\Serializer;\nuse Google\\Protobuf\\DescriptorPool;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Protobuf\\RepeatedField;\nuse PHPUnit\\Framework\\TestCase;\n\n/**\n * @internal\n */\nabstract class GeneratedTest extends TestCase\n{\n    /**\n     * @param mixed $expected\n     * @param mixed $actual\n     */\n    public function assertProtobufEquals(&$expected, &$actual)\n    {\n        if ($expected === $actual) {\n            // This is not needed but reduces the number of \"This test did not perform any assertions\" messages\n            $this->assertSame($expected, $actual);\n\n            return;\n        }\n\n        if (is_array($expected) || $expected instanceof RepeatedField) {\n            if (is_array($expected) === is_array($actual)) {\n                $this->assertEquals($expected, $actual);\n            }\n\n            $this->assertCount(count($expected), $actual);\n\n            $expectedValues = $this->getValues($expected);\n            $actualValues = $this->getValues($actual);\n\n            for ($i = 0; $i < count($expectedValues); $i++) {\n                $expectedElement = $expectedValues[$i];\n                $actualElement = $actualValues[$i];\n                $this->assertProtobufEquals($expectedElement, $actualElement);\n            }\n        } else {\n            $this->assertEquals($expected, $actual);\n            if ($expected instanceof Message) {\n                $pool = DescriptorPool::getGeneratedPool();\n                $descriptor = $pool->getDescriptorByClassName(get_class($expected));\n\n                $fieldCount = $descriptor->getFieldCount();\n                for ($i = 0; $i < $fieldCount; $i++) {\n                    $field = $descriptor->getField($i);\n                    $getter = Serializer::getGetter($field->getName());\n                    $expectedFieldValue = $expected->$getter();\n                    $actualFieldValue = $actual->$getter();\n                    $this->assertProtobufEquals($expectedFieldValue, $actualFieldValue);\n                }\n            }\n        }\n    }\n\n    /**\n     * @param iterable $field\n     */\n    private function getValues($field)\n    {\n        return array_values(\n            is_array($field)\n                ? $field\n                : iterator_to_array($field)\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MessageAwareArrayComparator.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse SebastianBergmann\\Comparator\\ArrayComparator;\n\n/**\n * @internal\n */\nclass MessageAwareArrayComparator extends ArrayComparator\n{\n    public function __construct()\n    {\n        parent::__construct();\n        $this->exporter = new MessageAwareExporter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MessageAwareExporter.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\Message;\nuse SebastianBergmann\\Exporter\\Exporter;\n\n/**\n * @internal\n */\nclass MessageAwareExporter extends Exporter\n{\n    /**\n     * Exports a value into a single-line string\n     *\n     * @param mixed $value\n     * @return string\n     *\n     * @see    \\SebastianBergmann\\Exporter\\Exporter::export\n     */\n    public function shortenedExport($value)\n    {\n        if (\\is_object($value) && $value instanceof Message) {\n            return \\sprintf(\n                '%s Object (%s)',\n                \\get_class($value),\n                \\spl_object_hash($value)\n            );\n        }\n        return parent::shortenedExport($value);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockBidiStreamingCall.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Code;\nuse Grpc;\nuse stdClass;\n\n/**\n * The MockBidiStreamingCall class is used to mock out the \\Grpc\\BidiStreamingCall class\n * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/BidiStreamingCall.php)\n *\n * @internal\n */\nclass MockBidiStreamingCall extends Grpc\\BidiStreamingCall\n{\n    use SerializationTrait;\n\n    private $responses;\n    private $status;\n    private $writesDone = false;\n    private $receivedWrites = [];\n\n    /**\n     * MockBidiStreamingCall constructor.\n     * @param mixed[] $responses A list of response objects.\n     * @param mixed|null $deserialize An optional deserialize method for the response object.\n     * @param stdClass|null $status An optional status object. If set to null, a status of OK is used.\n     */\n    public function __construct(array $responses, $deserialize = null, ?stdClass $status = null)\n    {\n        $this->responses = $responses;\n        $this->deserialize = $deserialize;\n        if (is_null($status)) {\n            $status = new MockStatus(Code::OK);\n        }\n        $this->status = $status;\n    }\n\n    /**\n     * @return mixed|null\n     * @throws ApiException\n     */\n    public function read()\n    {\n        if (count($this->responses) > 0) {\n            $resp = array_shift($this->responses);\n            if (is_null($resp)) {\n                // Null was added to the responses list to simulate a failed stream\n                // To ensure that getStatus can now be called, we clear the remaining\n                // responses and set writesDone to true\n                $this->responses = [];\n                $this->writesDone();\n                return null;\n            }\n            $obj = $this->deserializeMessage($resp, $this->deserialize);\n            return $obj;\n        } elseif ($this->writesDone) {\n            return null;\n        } else {\n            throw new ApiException(\n                'No more responses to read, but closeWrite() not called - '\n                . 'this would be blocking',\n                Grpc\\STATUS_INTERNAL,\n                null\n            );\n        }\n    }\n\n    /**\n     * @return stdClass|null\n     * @throws ApiException\n     */\n    public function getStatus()\n    {\n        if (count($this->responses) > 0) {\n            throw new ApiException(\n                'Calls to getStatus() will block if all responses are not read',\n                Grpc\\STATUS_INTERNAL,\n                null\n            );\n        }\n        if (!$this->writesDone) {\n            throw new ApiException(\n                'Calls to getStatus() will block if closeWrite() not called',\n                Grpc\\STATUS_INTERNAL,\n                null\n            );\n        }\n        return $this->status;\n    }\n\n    /**\n     * Save the request object, to be retrieved via getReceivedCalls()\n     * @param Message|mixed $request The request object\n     * @param array $options An array of options.\n     * @throws ApiException\n     */\n    public function write($request, array $options = [])\n    {\n        if ($this->writesDone) {\n            throw new ApiException(\n                'Cannot call write() after writesDone()',\n                Grpc\\STATUS_INTERNAL,\n                null\n            );\n        }\n        if (is_a($request, '\\Google\\Protobuf\\Internal\\Message')) {\n            /** @var Message $newRequest */\n            $newRequest = new $request();\n            $newRequest->mergeFromString($request->serializeToString());\n            $request = $newRequest;\n        }\n        $this->receivedWrites[] = $request;\n    }\n\n    /**\n     * Set writesDone to true\n     */\n    public function writesDone()\n    {\n        $this->writesDone = true;\n    }\n\n    /**\n     * Return a list of calls made to write(), and clear $receivedFuncCalls.\n     *\n     * @return mixed[] An array of received requests\n     */\n    public function popReceivedCalls()\n    {\n        $receivedFuncCallsTemp = $this->receivedWrites;\n        $this->receivedWrites = [];\n        return $receivedFuncCallsTemp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockClientStreamingCall.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\ApiStatus;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Code;\nuse Grpc;\nuse stdClass;\n\n/**\n * The MockClientStreamingCall class is used to mock out the \\Grpc\\ClientStreamingCall class\n * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/ClientStreamingCall.php)\n *\n * The MockClientStreamingCall object is constructed with a response object, an optional deserialize\n * method, and an optional status. The response object and status are returned immediately from the\n * wait() method. It also provides a write() method that accepts request objects, and a\n * getAllRequests() method that returns all request objects passed to write(), and clears them.\n *\n * @internal\n */\nclass MockClientStreamingCall extends Grpc\\ClientStreamingCall\n{\n    private $mockUnaryCall;\n    private $waitCalled = false;\n    private $receivedWrites = [];\n\n    /**\n     * MockClientStreamingCall constructor.\n     * @param Message|string $response The response object.\n     * @param callable|array|null $deserialize An optional deserialize method for the response object.\n     * @param stdClass|null $status An optional status object. If set to null, a status of OK is used.\n     */\n    public function __construct($response, $deserialize = null, ?stdClass $status = null)\n    {\n        $this->mockUnaryCall = new MockUnaryCall($response, $deserialize, $status);\n    }\n\n    /**\n     * Immediately return the preset response object and status.\n     * @return array The response object and status.\n     */\n    public function wait()\n    {\n        $this->waitCalled = true;\n        return $this->mockUnaryCall->wait();\n    }\n\n    /**\n     * Save the request object, to be retrieved via getReceivedCalls()\n     * @param Message|mixed $request The request object\n     * @param array $options An array of options\n     * @throws ApiException\n     */\n    public function write($request, array $options = [])\n    {\n        if ($this->waitCalled) {\n            throw new ApiException('Cannot call write() after wait()', Code::INTERNAL, ApiStatus::INTERNAL);\n        }\n        if (is_a($request, '\\Google\\Protobuf\\Internal\\Message')) {\n            /** @var Message $newRequest */\n            $newRequest = new $request();\n            $newRequest->mergeFromString($request->serializeToString());\n            $request = $newRequest;\n        }\n        $this->receivedWrites[] = $request;\n    }\n\n    /**\n     * Return a list of calls made to write(), and clear $receivedFuncCalls.\n     *\n     * @return mixed[] An array of received requests\n     */\n    public function popReceivedCalls()\n    {\n        $receivedFuncCallsTemp = $this->receivedWrites;\n        $this->receivedWrites = [];\n        return $receivedFuncCallsTemp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockGrpcTransport.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\ApiCore\\Transport\\GrpcTransport;\nuse Grpc\\ChannelCredentials;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * @internal\n */\nclass MockGrpcTransport extends GrpcTransport\n{\n    private $requestArguments;\n    private $mockCall;\n\n    /**\n     * @param mixed $mockCall\n     */\n    public function __construct($mockCall = null, ?LoggerInterface $logger = null)\n    {\n        $this->mockCall = $mockCall;\n        $opts = ['credentials' => ChannelCredentials::createSsl()];\n        parent::__construct('', $opts, logger: $logger);\n    }\n\n    /**\n     * @param string $method\n     * @param array $arguments\n     * @param callable $deserialize\n     */\n    protected function _simpleRequest(\n        $method,\n        $arguments,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $this->logCall($method, $deserialize, $metadata, $options, $arguments);\n        return $this->mockCall;\n    }\n\n    /**\n     * @param string $method\n     * @param callable $deserialize\n     */\n    protected function _clientStreamRequest(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $this->logCall($method, $deserialize, $metadata, $options);\n        return $this->mockCall;\n    }\n\n    /**\n     * @param string $method\n     * @param array $arguments\n     * @param callable $deserialize\n     */\n    protected function _serverStreamRequest(\n        $method,\n        $arguments,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $this->logCall($method, $deserialize, $metadata, $options, $arguments);\n        return $this->mockCall;\n    }\n\n    /**\n     * @param string $method\n     * @param callable $deserialize\n     */\n    protected function _bidiRequest(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $this->logCall($method, $deserialize, $metadata, $options);\n        return $this->mockCall;\n    }\n\n    /**\n     * @param string $method\n     * @param callable $deserialize\n     * @param array $arguments\n     */\n    private function logCall(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = [],\n        $arguments = null\n    ) {\n        $this->requestArguments = [\n            'method' => $method,\n            'arguments' => $arguments,\n            'deserialize' => $deserialize,\n            'metadata' => $metadata,\n            'options' => $options,\n        ];\n    }\n\n    public function getRequestArguments()\n    {\n        return $this->requestArguments;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: Testing/mocks.proto\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse GPBMetadata\\ApiCore\\Testing\\Mocks;\n\n/**\n * Generated from protobuf message <code>google.apicore.testing.MockRequest</code>\n *\n * @internal\n */\nclass MockRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>string page_token = 1;</code>\n     */\n    protected $page_token = '';\n    /**\n     * Generated from protobuf field <code>uint64 page_size = 2;</code>\n     */\n    protected $page_size = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $page_token\n     *     @type int|string $page_size\n     * }\n     */\n    public function __construct($data = null)\n    {\n        Mocks::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>string page_token = 1;</code>\n     * @return string\n     */\n    public function getPageToken()\n    {\n        return $this->page_token;\n    }\n\n    /**\n     * Generated from protobuf field <code>string page_token = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPageToken($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->page_token = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>uint64 page_size = 2;</code>\n     * @return int|string\n     */\n    public function getPageSize()\n    {\n        return $this->page_size;\n    }\n\n    /**\n     * Generated from protobuf field <code>uint64 page_size = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setPageSize($var)\n    {\n        GPBUtil::checkUint64($var);\n        $this->page_size = $var;\n\n        return $this;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockRequestBody.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: Testing/mocks.proto\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated from protobuf message <code>google.apicore.testing.MockRequestBody</code>\n *\n * @internal\n */\nclass MockRequestBody extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * Generated from protobuf field <code>uint64 number = 2;</code>\n     */\n    protected $number = 0;\n    /**\n     * Generated from protobuf field <code>repeated string repeated_field = 3;</code>\n     */\n    private $repeated_field;\n    /**\n     * Generated from protobuf field <code>.google.apicore.testing.MockRequestBody nested_message = 4;</code>\n     */\n    protected $nested_message = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.BytesValue bytes_value = 5;</code>\n     */\n    protected $bytes_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Duration duration_value = 6;</code>\n     */\n    protected $duration_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.FieldMask field_mask = 7;</code>\n     */\n    protected $field_mask = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Int64Value int64_value = 8;</code>\n     */\n    protected $int64_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.ListValue list_value = 9;</code>\n     */\n    protected $list_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.StringValue string_value = 10;</code>\n     */\n    protected $string_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Struct struct_value = 11;</code>\n     */\n    protected $struct_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Timestamp timestamp_value = 12;</code>\n     */\n    protected $timestamp_value = null;\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Value value_value = 13;</code>\n     */\n    protected $value_value = null;\n    protected $oneof_field;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type int|string $number\n     *     @type string[]|\\Google\\Protobuf\\RepeatedField $repeated_field\n     *     @type \\Google\\ApiCore\\Testing\\MockRequestBody $nested_message\n     *     @type \\Google\\Protobuf\\BytesValue $bytes_value\n     *     @type \\Google\\Protobuf\\Duration $duration_value\n     *     @type \\Google\\Protobuf\\FieldMask $field_mask\n     *     @type \\Google\\Protobuf\\Int64Value $int64_value\n     *     @type \\Google\\Protobuf\\ListValue $list_value\n     *     @type \\Google\\Protobuf\\StringValue $string_value\n     *     @type \\Google\\Protobuf\\Struct $struct_value\n     *     @type \\Google\\Protobuf\\Timestamp $timestamp_value\n     *     @type \\Google\\Protobuf\\Value $value_value\n     *     @type string $field_1\n     *     @type string $field_2\n     *     @type string $field_3\n     * }\n     */\n    public function __construct($data = null)\n    {\n        \\GPBMetadata\\ApiCore\\Testing\\Mocks::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>uint64 number = 2;</code>\n     * @return int|string\n     */\n    public function getNumber()\n    {\n        return $this->number;\n    }\n\n    /**\n     * Generated from protobuf field <code>uint64 number = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkUint64($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated string repeated_field = 3;</code>\n     * @return \\Google\\Protobuf\\RepeatedField\n     */\n    public function getRepeatedField()\n    {\n        return $this->repeated_field;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated string repeated_field = 3;</code>\n     * @param string[]|\\Google\\Protobuf\\RepeatedField $var\n     * @return $this\n     */\n    public function setRepeatedField($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->repeated_field = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.apicore.testing.MockRequestBody nested_message = 4;</code>\n     * @return \\Google\\ApiCore\\Testing\\MockRequestBody\n     */\n    public function getNestedMessage()\n    {\n        return isset($this->nested_message) ? $this->nested_message : null;\n    }\n\n    public function hasNestedMessage()\n    {\n        return isset($this->nested_message);\n    }\n\n    public function clearNestedMessage()\n    {\n        unset($this->nested_message);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.apicore.testing.MockRequestBody nested_message = 4;</code>\n     * @param \\Google\\ApiCore\\Testing\\MockRequestBody $var\n     * @return $this\n     */\n    public function setNestedMessage($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\ApiCore\\Testing\\MockRequestBody::class);\n        $this->nested_message = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.BytesValue bytes_value = 5;</code>\n     * @return \\Google\\Protobuf\\BytesValue\n     */\n    public function getBytesValue()\n    {\n        return isset($this->bytes_value) ? $this->bytes_value : null;\n    }\n\n    public function hasBytesValue()\n    {\n        return isset($this->bytes_value);\n    }\n\n    public function clearBytesValue()\n    {\n        unset($this->bytes_value);\n    }\n\n    /**\n     * Returns the unboxed value from <code>getBytesValue()</code>\n\n     * Generated from protobuf field <code>.google.protobuf.BytesValue bytes_value = 5;</code>\n     * @return string|null\n     */\n    public function getBytesValueUnwrapped()\n    {\n        return $this->readWrapperValue('bytes_value');\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.BytesValue bytes_value = 5;</code>\n     * @param \\Google\\Protobuf\\BytesValue $var\n     * @return $this\n     */\n    public function setBytesValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\BytesValue::class);\n        $this->bytes_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the field by wrapping a primitive type in a Google\\Protobuf\\BytesValue object.\n\n     * Generated from protobuf field <code>.google.protobuf.BytesValue bytes_value = 5;</code>\n     * @param string|null $var\n     * @return $this\n     */\n    public function setBytesValueUnwrapped($var)\n    {\n        $this->writeWrapperValue('bytes_value', $var);\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Duration duration_value = 6;</code>\n     * @return \\Google\\Protobuf\\Duration\n     */\n    public function getDurationValue()\n    {\n        return isset($this->duration_value) ? $this->duration_value : null;\n    }\n\n    public function hasDurationValue()\n    {\n        return isset($this->duration_value);\n    }\n\n    public function clearDurationValue()\n    {\n        unset($this->duration_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Duration duration_value = 6;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setDurationValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->duration_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.FieldMask field_mask = 7;</code>\n     * @return \\Google\\Protobuf\\FieldMask\n     */\n    public function getFieldMask()\n    {\n        return isset($this->field_mask) ? $this->field_mask : null;\n    }\n\n    public function hasFieldMask()\n    {\n        return isset($this->field_mask);\n    }\n\n    public function clearFieldMask()\n    {\n        unset($this->field_mask);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.FieldMask field_mask = 7;</code>\n     * @param \\Google\\Protobuf\\FieldMask $var\n     * @return $this\n     */\n    public function setFieldMask($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\FieldMask::class);\n        $this->field_mask = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Int64Value int64_value = 8;</code>\n     * @return \\Google\\Protobuf\\Int64Value\n     */\n    public function getInt64Value()\n    {\n        return isset($this->int64_value) ? $this->int64_value : null;\n    }\n\n    public function hasInt64Value()\n    {\n        return isset($this->int64_value);\n    }\n\n    public function clearInt64Value()\n    {\n        unset($this->int64_value);\n    }\n\n    /**\n     * Returns the unboxed value from <code>getInt64Value()</code>\n\n     * Generated from protobuf field <code>.google.protobuf.Int64Value int64_value = 8;</code>\n     * @return int|string|null\n     */\n    public function getInt64ValueUnwrapped()\n    {\n        return $this->readWrapperValue('int64_value');\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Int64Value int64_value = 8;</code>\n     * @param \\Google\\Protobuf\\Int64Value $var\n     * @return $this\n     */\n    public function setInt64Value($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Int64Value::class);\n        $this->int64_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the field by wrapping a primitive type in a Google\\Protobuf\\Int64Value object.\n\n     * Generated from protobuf field <code>.google.protobuf.Int64Value int64_value = 8;</code>\n     * @param int|string|null $var\n     * @return $this\n     */\n    public function setInt64ValueUnwrapped($var)\n    {\n        $this->writeWrapperValue('int64_value', $var);\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.ListValue list_value = 9;</code>\n     * @return \\Google\\Protobuf\\ListValue\n     */\n    public function getListValue()\n    {\n        return isset($this->list_value) ? $this->list_value : null;\n    }\n\n    public function hasListValue()\n    {\n        return isset($this->list_value);\n    }\n\n    public function clearListValue()\n    {\n        unset($this->list_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.ListValue list_value = 9;</code>\n     * @param \\Google\\Protobuf\\ListValue $var\n     * @return $this\n     */\n    public function setListValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\ListValue::class);\n        $this->list_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.StringValue string_value = 10;</code>\n     * @return \\Google\\Protobuf\\StringValue\n     */\n    public function getStringValue()\n    {\n        return isset($this->string_value) ? $this->string_value : null;\n    }\n\n    public function hasStringValue()\n    {\n        return isset($this->string_value);\n    }\n\n    public function clearStringValue()\n    {\n        unset($this->string_value);\n    }\n\n    /**\n     * Returns the unboxed value from <code>getStringValue()</code>\n\n     * Generated from protobuf field <code>.google.protobuf.StringValue string_value = 10;</code>\n     * @return string|null\n     */\n    public function getStringValueUnwrapped()\n    {\n        return $this->readWrapperValue('string_value');\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.StringValue string_value = 10;</code>\n     * @param \\Google\\Protobuf\\StringValue $var\n     * @return $this\n     */\n    public function setStringValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\StringValue::class);\n        $this->string_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the field by wrapping a primitive type in a Google\\Protobuf\\StringValue object.\n\n     * Generated from protobuf field <code>.google.protobuf.StringValue string_value = 10;</code>\n     * @param string|null $var\n     * @return $this\n     */\n    public function setStringValueUnwrapped($var)\n    {\n        $this->writeWrapperValue('string_value', $var);\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Struct struct_value = 11;</code>\n     * @return \\Google\\Protobuf\\Struct\n     */\n    public function getStructValue()\n    {\n        return isset($this->struct_value) ? $this->struct_value : null;\n    }\n\n    public function hasStructValue()\n    {\n        return isset($this->struct_value);\n    }\n\n    public function clearStructValue()\n    {\n        unset($this->struct_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Struct struct_value = 11;</code>\n     * @param \\Google\\Protobuf\\Struct $var\n     * @return $this\n     */\n    public function setStructValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Struct::class);\n        $this->struct_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Timestamp timestamp_value = 12;</code>\n     * @return \\Google\\Protobuf\\Timestamp\n     */\n    public function getTimestampValue()\n    {\n        return isset($this->timestamp_value) ? $this->timestamp_value : null;\n    }\n\n    public function hasTimestampValue()\n    {\n        return isset($this->timestamp_value);\n    }\n\n    public function clearTimestampValue()\n    {\n        unset($this->timestamp_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Timestamp timestamp_value = 12;</code>\n     * @param \\Google\\Protobuf\\Timestamp $var\n     * @return $this\n     */\n    public function setTimestampValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Timestamp::class);\n        $this->timestamp_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Value value_value = 13;</code>\n     * @return \\Google\\Protobuf\\Value\n     */\n    public function getValueValue()\n    {\n        return isset($this->value_value) ? $this->value_value : null;\n    }\n\n    public function hasValueValue()\n    {\n        return isset($this->value_value);\n    }\n\n    public function clearValueValue()\n    {\n        unset($this->value_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>.google.protobuf.Value value_value = 13;</code>\n     * @param \\Google\\Protobuf\\Value $var\n     * @return $this\n     */\n    public function setValueValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Value::class);\n        $this->value_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>string field_1 = 14;</code>\n     * @return string\n     */\n    public function getField1()\n    {\n        return $this->readOneof(14);\n    }\n\n    public function hasField1()\n    {\n        return $this->hasOneof(14);\n    }\n\n    /**\n     * Generated from protobuf field <code>string field_1 = 14;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setField1($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->writeOneof(14, $var);\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>string field_2 = 15;</code>\n     * @return string\n     */\n    public function getField2()\n    {\n        return $this->readOneof(15);\n    }\n\n    public function hasField2()\n    {\n        return $this->hasOneof(15);\n    }\n\n    /**\n     * Generated from protobuf field <code>string field_2 = 15;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setField2($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->writeOneof(15, $var);\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>string field_3 = 16;</code>\n     * @return string\n     */\n    public function getField3()\n    {\n        return $this->readOneof(16);\n    }\n\n    public function hasField3()\n    {\n        return $this->hasOneof(16);\n    }\n\n    /**\n     * Generated from protobuf field <code>string field_3 = 16;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setField3($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->writeOneof(16, $var);\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getOneofField()\n    {\n        return $this->whichOneof('oneof_field');\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockResponse.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: Testing/mocks.proto\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated from protobuf message <code>google.apicore.testing.MockResponse</code>\n *\n * @internal\n */\nclass MockResponse extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * Generated from protobuf field <code>uint64 number = 2;</code>\n     */\n    protected $number = 0;\n    /**\n     * Generated from protobuf field <code>repeated string resources_list = 3;</code>\n     */\n    private $resources_list;\n    /**\n     * Generated from protobuf field <code>string next_page_token = 4;</code>\n     */\n    protected $next_page_token = '';\n    /**\n     * Generated from protobuf field <code>map<string, string> resources_map = 5;</code>\n     */\n    private $resources_map;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type int|string $number\n     *     @type string[]|\\Google\\Protobuf\\RepeatedField $resources_list\n     *     @type string $next_page_token\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $resources_map\n     * }\n     */\n    public function __construct($data = null)\n    {\n        \\GPBMetadata\\ApiCore\\Testing\\Mocks::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>uint64 number = 2;</code>\n     * @return int|string\n     */\n    public function getNumber()\n    {\n        return $this->number;\n    }\n\n    /**\n     * Generated from protobuf field <code>uint64 number = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkUint64($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated string resources_list = 3;</code>\n     * @return \\Google\\Protobuf\\RepeatedField\n     */\n    public function getResourcesList()\n    {\n        return $this->resources_list;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated string resources_list = 3;</code>\n     * @param string[]|\\Google\\Protobuf\\RepeatedField $var\n     * @return $this\n     */\n    public function setResourcesList($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->resources_list = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>string next_page_token = 4;</code>\n     * @return string\n     */\n    public function getNextPageToken()\n    {\n        return $this->next_page_token;\n    }\n\n    /**\n     * Generated from protobuf field <code>string next_page_token = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNextPageToken($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->next_page_token = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>map<string, string> resources_map = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getResourcesMap()\n    {\n        return $this->resources_map;\n    }\n\n    /**\n     * Generated from protobuf field <code>map<string, string> resources_map = 5;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setResourcesMap($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->resources_map = $arr;\n\n        return $this;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockServerStreamingCall.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\ApiStatus;\nuse Google\\ApiCore\\ServerStreamingCallInterface;\nuse Google\\Rpc\\Code;\nuse stdClass;\n\n/**\n * The MockServerStreamingCall class is used to mock out the \\Grpc\\ServerStreamingCall class\n * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/ServerStreamingCall.php)\n *\n * @internal\n */\nclass MockServerStreamingCall extends \\Grpc\\ServerStreamingCall implements ServerStreamingCallInterface\n{\n    use SerializationTrait;\n\n    private $responses;\n    private $status;\n\n    /**\n     * MockServerStreamingCall constructor.\n     * @param mixed[] $responses A list of response objects.\n     * @param callable|array|null $deserialize An optional deserialize method for the response object.\n     * @param stdClass|null $status An optional status object. If set to null, a status of OK is used.\n     */\n    public function __construct(array $responses, $deserialize = null, ?stdClass $status = null)\n    {\n        $this->responses = $responses;\n        $this->deserialize = $deserialize;\n        if (is_null($status)) {\n            $status = new MockStatus(Code::OK, 'OK', []);\n        } elseif ($status instanceof stdClass) {\n            if (!property_exists($status, 'metadata')) {\n                $status->metadata = [];\n            }\n        }\n        $this->status = $status;\n    }\n\n    public function responses()\n    {\n        while (count($this->responses) > 0) {\n            $resp = array_shift($this->responses);\n            $obj = $this->deserializeMessage($resp, $this->deserialize);\n            yield $obj;\n        }\n    }\n\n    /**\n     * @return stdClass|null\n     * @throws ApiException\n     */\n    public function getStatus()\n    {\n        if (count($this->responses) > 0) {\n            throw new ApiException(\n                'Calls to getStatus() will block if all responses are not read',\n                Code::INTERNAL,\n                ApiStatus::INTERNAL\n            );\n        }\n        return $this->status;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockStatus.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Rpc\\Code;\nuse stdClass;\n\n/**\n * @internal\n */\nclass MockStatus extends stdClass\n{\n    /** @var Code|int $code */\n    public $code;\n    public $details;\n    public $metadata;\n    public function __construct($code, ?string $details = null, array $metadata = [])\n    {\n        $this->code = $code;\n        $this->details = $details;\n        $this->metadata = $metadata;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockStubTrait.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\Message;\nuse stdClass;\nuse UnderflowException;\n\n/**\n * The MockStubTrait is used by generated mock stub classes which extent \\Grpc\\BaseStub\n * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/BaseStub.php)\n * It provides functionality to add responses, get received calls, and overrides the _simpleRequest\n * method so that the elements of $responses are returned instead of making a call to the API.\n *\n * @internal\n */\ntrait MockStubTrait\n{\n    private $receivedFuncCalls = [];\n    private $responses = [];\n    private $serverStreamingStatus = null;\n    private $callObjects = [];\n    private $deserialize;\n\n    public function __construct(?callable $deserialize = null)\n    {\n        $this->deserialize = $deserialize;\n    }\n\n    /**\n     * Overrides the _simpleRequest method in \\Grpc\\BaseStub\n     * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/BaseStub.php)\n     * Returns a MockUnaryCall object that will return the first item from $responses\n     * @param string $method The API method name to be called\n     * @param \\Google\\Protobuf\\Internal\\Message $argument The request object to the API method\n     * @param callable $deserialize A function to deserialize the response object\n     * @param array $metadata\n     * @param array $options\n     * @return MockUnaryCall\n     */\n    public function _simpleRequest(\n        $method,\n        $argument,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $this->receivedFuncCalls[] = new ReceivedRequest($method, $argument, $deserialize, $metadata, $options);\n        if (count($this->responses) < 1) {\n            throw new UnderflowException('ran out of responses');\n        }\n        list($response, $status) = array_shift($this->responses);\n        $call = new MockUnaryCall($response, $deserialize, $status);\n        $this->callObjects[] = $call;\n        return $call;\n    }\n\n    /**\n     * Overrides the _clientStreamRequest method in \\Grpc\\BaseStub\n     * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/BaseStub.php)\n     * Returns a MockClientStreamingCall object that will return the first item from $responses\n     *\n     * @param string   $method      The name of the method to call\n     * @param callable $deserialize A function that deserializes the responses\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return MockClientStreamingCall The active call object\n     */\n    public function _clientStreamRequest(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $this->receivedFuncCalls[] = new ReceivedRequest($method, null, $deserialize, $metadata, $options);\n        if (count($this->responses) < 1) {\n            throw new UnderflowException('ran out of responses');\n        }\n        list($response, $status) = array_shift($this->responses);\n        $call = new MockClientStreamingCall($response, $deserialize, $status);\n        $this->callObjects[] = $call;\n        return $call;\n    }\n\n    /**\n     * Overrides the _serverStreamRequest method in \\Grpc\\BaseStub\n     * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/BaseStub.php)\n     * Returns a MockServerStreamingCall object that will stream items from $responses, and return\n     * a final status of $serverStreamingStatus.\n     *\n     * @param string   $method      The name of the method to call\n     * @param \\Google\\Protobuf\\Internal\\Message    $argument    The argument to the method\n     * @param callable $deserialize A function that deserializes the responses\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return MockServerStreamingCall The active call object\n     */\n    public function _serverStreamRequest(\n        $method,\n        $argument,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n\n        if (is_a($argument, '\\Google\\Protobuf\\Internal\\Message')) {\n            /** @var Message $newArgument */\n            $newArgument = new $argument();\n            $newArgument->mergeFromString($argument->serializeToString());\n            $argument = $newArgument;\n        }\n        $this->receivedFuncCalls[] = new ReceivedRequest($method, $argument, $deserialize, $metadata, $options);\n        $responses = self::stripStatusFromResponses($this->responses);\n        $this->responses = [];\n        $call = new MockServerStreamingCall($responses, $deserialize, $this->serverStreamingStatus);\n        $this->callObjects[] = $call;\n        return $call;\n    }\n\n    /**\n     * Overrides the _bidiRequest method in \\Grpc\\BaseStub\n     * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/BaseStub.php)\n     * Returns a MockBidiStreamingCall object that will stream items from $responses, and return\n     * a final status of $serverStreamingStatus.\n     *\n     * @param string   $method      The name of the method to call\n     * @param callable $deserialize A function that deserializes the responses\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return MockBidiStreamingCall The active call object\n     */\n    public function _bidiRequest(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n\n        $this->receivedFuncCalls[] = new ReceivedRequest($method, null, $deserialize, $metadata, $options);\n        $responses = self::stripStatusFromResponses($this->responses);\n        $this->responses = [];\n        $call = new MockBidiStreamingCall($responses, $deserialize, $this->serverStreamingStatus);\n        $this->callObjects[] = $call;\n        return $call;\n    }\n\n    public static function stripStatusFromResponses($responses)\n    {\n        $strippedResponses = [];\n        foreach ($responses as $response) {\n            list($resp, $_) = $response;\n            $strippedResponses[] = $resp;\n        }\n        return $strippedResponses;\n    }\n\n    /**\n     * Add a response object, and an optional status, to the list of responses to be returned via\n     * _simpleRequest.\n     * @param \\Google\\Protobuf\\Internal\\Message $response\n     * @param stdClass $status\n     */\n    public function addResponse($response, ?stdClass $status = null)\n    {\n        if (!$this->deserialize && $response) {\n            $this->deserialize = [get_class($response), 'decode'];\n        }\n\n        if (is_a($response, '\\Google\\Protobuf\\Internal\\Message')) {\n            $response = $response->serializeToString();\n        }\n        $this->responses[] = [$response, $status];\n    }\n\n    /**\n     * Set the status object to be used when creating streaming calls.\n     *\n     * @param stdClass $status\n     */\n    public function setStreamingStatus(stdClass $status)\n    {\n        $this->serverStreamingStatus = $status;\n    }\n\n    /**\n     * Return a list of calls made to _simpleRequest, and clear $receivedFuncCalls.\n     *\n     * @return ReceivedRequest[] An array of received requests\n     */\n    public function popReceivedCalls()\n    {\n        $receivedFuncCallsTemp = $this->receivedFuncCalls;\n        $this->receivedFuncCalls = [];\n        return $receivedFuncCallsTemp;\n    }\n\n    /**\n     * @return int The number of calls received.\n     */\n    public function getReceivedCallCount()\n    {\n        return count($this->receivedFuncCalls);\n    }\n\n    /**\n     * @return mixed[] The call objects created by calls to the stub\n     */\n    public function popCallObjects()\n    {\n        $callObjectsTemp = $this->callObjects;\n        $this->callObjects = [];\n        return $callObjectsTemp;\n    }\n\n    /**\n     * @return bool True if $receivedFuncCalls and $response are empty.\n     */\n    public function isExhausted()\n    {\n        return count($this->receivedFuncCalls) === 0\n            && count($this->responses) === 0;\n    }\n\n    /**\n     * @param mixed $responseObject\n     * @param stdClass|null $status\n     * @param callable $deserialize\n     * @return static An instance of the current class type.\n     */\n    public static function create($responseObject, ?stdClass $status = null, ?callable $deserialize = null)\n    {\n        $stub = new static($deserialize); // @phpstan-ignore-line\n        $stub->addResponse($responseObject, $status);\n        return $stub;\n    }\n\n    /**\n     * Creates a sequence such that the responses are returned in order.\n     * @param mixed[] $sequence\n     * @param callable $deserialize\n     * @param stdClass $finalStatus\n     * @return static An instance of the current class type.\n     */\n    public static function createWithResponseSequence(array $sequence, ?callable $deserialize = null, ?stdClass $finalStatus = null)\n    {\n        $stub = new static($deserialize); // @phpstan-ignore-line\n        foreach ($sequence as $elem) {\n            if (count($elem) == 1) {\n                list($resp, $status) = [$elem, null];\n            } else {\n                list($resp, $status) = $elem;\n            }\n            $stub->addResponse($resp, $status);\n        }\n        if ($finalStatus) {\n            $stub->setStreamingStatus($finalStatus);\n        }\n        return $stub;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockTransport.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\BidiStream;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\ClientStream;\nuse Google\\ApiCore\\ServerStream;\nuse Google\\ApiCore\\Transport\\TransportInterface;\nuse Google\\Rpc\\Code;\nuse GuzzleHttp\\Promise\\Promise;\n\n/**\n * @internal\n */\nclass MockTransport implements TransportInterface\n{\n    use MockStubTrait;\n\n    private $agentHeaderDescriptor; // @phpstan-ignore-line\n\n    public function setAgentHeaderDescriptor($agentHeaderDescriptor)\n    {\n        $this->agentHeaderDescriptor = $agentHeaderDescriptor;\n    }\n\n    public function startUnaryCall(Call $call, array $options)\n    {\n        $call = call_user_func([$this, $call->getMethod()], $call, $options);\n        return $promise = new Promise(\n            function () use ($call, &$promise) {\n                list($response, $status) = $call->wait();\n\n                if ($status->code == Code::OK) {\n                    $promise->resolve($response);\n                } else {\n                    throw ApiException::createFromStdClass($status);\n                }\n            },\n            [$call, 'cancel']\n        );\n    }\n\n    public function startBidiStreamingCall(Call $call, array $options)\n    {\n        $newArgs = ['/' . $call->getMethod(), $this->deserialize, $options, $options];\n        $response = $this->_bidiRequest(...$newArgs);\n        return new BidiStream($response, $call->getDescriptor());\n    }\n\n    public function startClientStreamingCall(Call $call, array $options)\n    {\n        $newArgs = ['/' . $call->getMethod(), $this->deserialize, $options, $options];\n        $response = $this->_clientStreamRequest(...$newArgs);\n        return new ClientStream($response, $call->getDescriptor());\n    }\n\n    public function startServerStreamingCall(Call $call, array $options)\n    {\n        $newArgs = ['/' . $call->getMethod(), $call->getMessage(), $this->deserialize, $options, $options];\n        $response = $this->_serverStreamRequest(...$newArgs);\n        return new ServerStream($response, $call->getDescriptor());\n    }\n\n    public function __call(string $name, array $arguments)\n    {\n        $call = $arguments[0];\n        $options = $arguments[1];\n        $decode = $call->getDecodeType() ? [$call->getDecodeType(), 'decode'] : null;\n        return $this->_simpleRequest(\n            '/' . $call->getMethod(),\n            $call->getMessage(),\n            $decode,\n            isset($options['headers']) ? $options['headers'] : [],\n            $options\n        );\n    }\n\n    public function close()\n    {\n        // does nothing\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/MockUnaryCall.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Code;\nuse stdClass;\n\n/**\n * The MockUnaryCall class is used to mock out the \\Grpc\\UnaryCall class\n * (https://github.com/grpc/grpc/blob/master/src/php/lib/Grpc/UnaryCall.php)\n *\n * The MockUnaryCall object is constructed with a response object, an optional deserialize\n * method, and an optional status. The response object and status are returned immediately from the\n * wait() method.\n *\n * @internal\n */\nclass MockUnaryCall extends \\Grpc\\UnaryCall\n{\n    use SerializationTrait;\n\n    private $response;\n    private $status;\n\n    /**\n     * MockUnaryCall constructor.\n     * @param Message|string|null $response The response object.\n     * @param callable|array|null $deserialize An optional deserialize method for the response object.\n     * @param stdClass|null $status An optional status object. If set to null, a status of OK is used.\n     */\n    public function __construct($response = null, $deserialize = null, ?stdClass $status = null)\n    {\n        $this->response = $response;\n        $this->deserialize = $deserialize;\n        if (is_null($status)) {\n            $status = new MockStatus(Code::OK);\n        }\n        $this->status = $status;\n    }\n\n    /**\n     * Immediately return the preset response object and status.\n     * @return array The response object and status.\n     */\n    public function wait()\n    {\n        return [\n            $this->deserializeMessage($this->response, $this->deserialize),\n            $this->status,\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/ProtobufGPBEmptyComparator.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\GPBEmpty;\nuse Google\\Protobuf\\Internal\\Message;\nuse SebastianBergmann\\Comparator\\Comparator;\nuse SebastianBergmann\\Comparator\\ComparisonFailure;\n\n/**\n * @internal\n */\nclass ProtobufGPBEmptyComparator extends Comparator\n{\n    /**\n     * Returns whether the comparator can compare two values.\n     *\n     * @param mixed $expected The first value to compare\n     * @param mixed $actual The second value to compare\n     * @return boolean\n     */\n    public function accepts($expected, $actual)\n    {\n        return $expected instanceof GPBEmpty && $actual instanceof GPBEmpty;\n    }\n\n    /**\n     * Asserts that two values are equal.\n     *\n     * @param Message $expected The first value to compare\n     * @param Message $actual The second value to compare\n     * @param float|int $delta The allowed numerical distance between two values to\n     *                      consider them equal\n     * @param  bool $canonicalize If set to TRUE, arrays are sorted before\n     *                             comparison\n     * @param  bool $ignoreCase If set to TRUE, upper- and lowercasing is\n     *                           ignored when comparing string values\n     * @throws ComparisonFailure Thrown when the comparison\n     *                           fails. Contains information about the\n     *                           specific errors that lead to the failure.\n     */\n    public function assertEquals($expected, $actual, $delta = 0, $canonicalize = false, $ignoreCase = false)\n    {\n        // No need to do anything here.\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/ProtobufMessageComparator.php",
    "content": "<?php\n/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\Message;\nuse SebastianBergmann\\Comparator\\Comparator;\nuse SebastianBergmann\\Comparator\\ComparisonFailure;\nuse SebastianBergmann\\Exporter\\Exporter;\n\n/**\n * @internal\n */\nclass ProtobufMessageComparator extends Comparator\n{\n    /** @var Exporter */\n    protected $exporter;\n\n    public function __construct()\n    {\n        parent::__construct();\n        $this->exporter = new MessageAwareExporter();\n    }\n\n    /**\n     * Returns whether the comparator can compare two values.\n     *\n     * @param mixed $expected The first value to compare\n     * @param mixed $actual The second value to compare\n     * @return boolean\n     */\n    public function accepts($expected, $actual)\n    {\n        return $expected instanceof Message && $actual instanceof Message;\n    }\n\n    /**\n     * Asserts that two values are equal.\n     *\n     * @param Message $expected The first value to compare\n     * @param Message $actual The second value to compare\n     * @param float|int $delta The allowed numerical distance between two values to\n     *                      consider them equal\n     * @param  bool $canonicalize If set to TRUE, arrays are sorted before\n     *                             comparison\n     * @param  bool $ignoreCase If set to TRUE, upper- and lowercasing is\n     *                           ignored when comparing string values\n     * @throws ComparisonFailure Thrown when the comparison\n     *                           fails. Contains information about the\n     *                           specific errors that lead to the failure.\n     */\n    public function assertEquals($expected, $actual, $delta = 0, $canonicalize = false, $ignoreCase = false)\n    {\n        if ($expected->serializeToString() !== $actual->serializeToString()) {\n            throw new ComparisonFailure(\n                $expected,\n                $actual,\n                $this->exporter->shortenedExport($expected),\n                $this->exporter->shortenedExport($actual),\n                false,\n                'Given 2 Message objects are not the same'\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/ReceivedRequest.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Testing;\n\n/**\n * Class ReceivedRequest used to hold the function name and request object of a call\n * make to a mock gRPC stub.\n *\n * @internal\n */\nclass ReceivedRequest\n{\n    private $actualCall;\n\n    public function __construct($funcCall, $requestObject, $deserialize = null, $metadata = [], $options = [])\n    {\n        $this->actualCall = [\n            'funcCall' => $funcCall,\n            'request' => $requestObject,\n            'deserialize' => $deserialize,\n            'metadata' => $metadata,\n            'options' => $options,\n        ];\n    }\n\n    public function getArray()\n    {\n        return $this->actualCall;\n    }\n\n    public function getFuncCall()\n    {\n        return $this->actualCall['funcCall'];\n    }\n\n    public function getRequestObject()\n    {\n        return $this->actualCall['request'];\n    }\n\n    public function getMetadata()\n    {\n        return $this->actualCall['metadata'];\n    }\n\n    public function getOptions()\n    {\n        return $this->actualCall['options'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/SerializationTrait.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Testing;\n\nuse Google\\Protobuf\\Internal\\Message;\n\n/**\n * @internal\n */\ntrait SerializationTrait\n{\n    /**\n     * @param mixed $message\n     * @param mixed $deserialize\n     */\n    protected function deserializeMessage($message, $deserialize)\n    {\n        if ($message === null) {\n            return null;\n        }\n\n        if ($deserialize === null) {\n            return $message;\n        }\n\n        // Proto3 implementation\n        if (is_array($deserialize)) {\n            list($className, $deserializeFunc) = $deserialize;\n            /** @var Message $obj */\n            $obj = new $className();\n            if (method_exists($obj, $deserializeFunc)) {\n                $obj->$deserializeFunc($message);\n            } elseif (is_string($message)) {\n                $obj->mergeFromString($message);\n            }\n\n            return $obj;\n        }\n\n        // Protobuf-PHP implementation\n        return call_user_func($deserialize, $message);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Testing/mocks.proto",
    "content": "syntax = \"proto3\";\n\npackage google.apicore.testing;\n\nimport \"google/protobuf/field_mask.proto\";\nimport \"google/protobuf/timestamp.proto\";\nimport \"google/protobuf/duration.proto\";\nimport \"google/protobuf/struct.proto\";\nimport \"google/protobuf/wrappers.proto\";\n\noption php_namespace = \"Google\\\\ApiCore\\\\Testing\";\noption php_metadata_namespace = \"GPBMetadata\\\\ApiCore\\\\Testing\";\n\nmessage MockRequest {\n  string page_token = 1;\n  uint64 page_size = 2;\n}\n\nmessage MockResponse {\n  string name = 1;\n  uint64 number = 2;\n  repeated string resources_list = 3;\n  string next_page_token = 4;\n  map<string, string> resources_map = 5;\n}\n\nmessage MockRequestBody {\n  string name = 1;\n  uint64 number = 2;\n  repeated string repeated_field = 3;\n  MockRequestBody nested_message = 4;\n  google.protobuf.BytesValue bytes_value = 5;\n  google.protobuf.Duration duration_value = 6;\n  google.protobuf.FieldMask field_mask = 7;\n  google.protobuf.Int64Value int64_value = 8;\n  google.protobuf.ListValue list_value = 9;\n  google.protobuf.StringValue string_value = 10;\n  google.protobuf.Struct struct_value = 11;\n  google.protobuf.Timestamp timestamp_value = 12;\n  google.protobuf.Value value_value = 13;\n  oneof oneof_field {\n    string field_1 = 14;\n    string field_2 = 15;\n    string field_3 = 16;\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Grpc/ForwardingCall.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Grpc;\n\nuse Grpc\\AbstractCall;\n\n/**\n * Class ForwardingCall wraps a \\Grpc\\AbstractCall.\n *\n * @experimental\n */\nabstract class ForwardingCall\n{\n    /**\n     * @var AbstractCall|ForwardingCall\n     */\n    protected object $innerCall;\n\n    /**\n     * ForwardingCall constructor.\n     *\n     * @param AbstractCall|ForwardingCall $innerCall\n     */\n    public function __construct($innerCall)\n    {\n        $this->innerCall = $innerCall;\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        return $this->innerCall->getMetadata();\n    }\n\n    /**\n     * @return mixed The trailing metadata sent by the server\n     */\n    public function getTrailingMetadata()\n    {\n        return $this->innerCall->getTrailingMetadata();\n    }\n\n    /**\n     * @return string The URI of the endpoint\n     */\n    public function getPeer()\n    {\n        return $this->innerCall->getPeer();\n    }\n\n    /**\n     * Cancels the call.\n     */\n    public function cancel()\n    {\n        $this->innerCall->cancel();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Grpc/ForwardingServerStreamingCall.php",
    "content": "<?php\n/*\n * Copyright 2020 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Grpc;\n\nuse Grpc\\ServerStreamingCall;\n\n/**\n * Class ForwardingServerStreamingCall wraps a \\Grpc\\ServerStreamingCall.\n *\n * @experimental\n */\nclass ForwardingServerStreamingCall extends ForwardingCall\n{\n    /** @var ServerStreamingCall */\n    protected object $innerCall;\n\n    /**\n     * @return mixed An iterator of response values\n     */\n    public function responses()\n    {\n        return $this->innerCall->responses();\n    }\n\n    /**\n     * Wait for the server to send the status, and return it.\n     *\n     * @return \\stdClass The status object, with integer $code, string\n     *                   $details, and array $metadata members\n     */\n    public function getStatus()\n    {\n        return $this->innerCall->getStatus();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Grpc/ForwardingUnaryCall.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Grpc;\n\nuse Grpc\\UnaryCall;\n\n/**\n * Class ForwardingUnaryCall wraps a \\Grpc\\UnaryCall.\n *\n * @experimental\n */\nclass ForwardingUnaryCall extends ForwardingCall\n{\n    /** @var UnaryCall */\n    protected object $innerCall;\n\n    /**\n     * Wait for the server to respond with data and a status.\n     *\n     * @return array [response data, status]\n     */\n    public function wait()\n    {\n        return $this->innerCall->wait();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Grpc/ServerStreamingCallWrapper.php",
    "content": "<?php\n/*\n * Copyright 2021 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Grpc;\n\nuse Google\\ApiCore\\ServerStreamingCallInterface;\nuse Grpc\\Gcp\\GCPServerStreamCall;\nuse Grpc\\ServerStreamingCall;\n\n/**\n * Class ServerStreamingCallWrapper implements \\Google\\ApiCore\\ServerStreamingCallInterface.\n * This is essentially a wrapper class around the \\Grpc\\ServerStreamingCall.\n */\nclass ServerStreamingCallWrapper implements ServerStreamingCallInterface\n{\n    /**\n     * @var ServerStreamingCall|GCPServerStreamCall\n     */\n    private object $stream;\n\n    /**\n     * @param ServerStreamingCall|GCPServerStreamCall $stream\n     */\n    public function __construct($stream)\n    {\n        $this->stream = $stream;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function start($data, array $metadata = [], array $callOptions = [])\n    {\n        $this->stream->start($data, $metadata, $callOptions);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function responses()\n    {\n        foreach ($this->stream->responses() as $response) {\n            yield $response;\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getStatus()\n    {\n        return $this->stream->getStatus();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMetadata()\n    {\n        return $this->stream->getMetadata();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getTrailingMetadata()\n    {\n        return $this->stream->getTrailingMetadata();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getPeer()\n    {\n        return $this->stream->getPeer();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function cancel()\n    {\n        $this->stream->cancel();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setCallCredentials($call_credentials)\n    {\n        $this->stream->setCallCredentials($call_credentials);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Grpc/UnaryInterceptorInterface.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Grpc;\n\n/**\n * Temporary class to support an interceptor-like interface until gRPC interceptor support is\n * available.\n *\n * @experimental\n * @deprecated Deprecated in favor of implementations extending {@see \\Grpc\\Interceptor}.\n */\ninterface UnaryInterceptorInterface\n{\n    /**\n     * @param string $method\n     * @param \\Google\\Protobuf\\Internal\\Message $argument\n     * @param callable $deserialize\n     * @param array $metadata\n     * @param array $options\n     * @param callable $continuation\n     * @return mixed\n     */\n    public function interceptUnaryUnary(\n        $method,\n        $argument,\n        $deserialize,\n        array $metadata,\n        array $options,\n        callable $continuation\n    );\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/GrpcFallbackTransport.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Transport;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\ApiStatus;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\ServiceAddressTrait;\nuse Google\\ApiCore\\ValidationException;\nuse Google\\ApiCore\\ValidationTrait;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Rpc\\Status;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Psr7\\Request;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * A transport that sends protobuf over HTTP 1.1 that can be used when full gRPC support\n * is not available.\n */\nclass GrpcFallbackTransport implements TransportInterface\n{\n    use ValidationTrait;\n    use ServiceAddressTrait;\n    use HttpUnaryTransportTrait;\n\n    private string $baseUri;\n\n    /**\n     * @param string $baseUri\n     * @param callable $httpHandler A handler used to deliver PSR-7 requests.\n     */\n    public function __construct(\n        string $baseUri,\n        callable $httpHandler,\n    ) {\n        $this->baseUri = $baseUri;\n        $this->httpHandler = $httpHandler;\n        $this->transportName = 'grpc-fallback';\n    }\n\n    /**\n     * Builds a GrpcFallbackTransport.\n     *\n     * @param string $apiEndpoint\n     *        The address of the API remote host, for example \"example.googleapis.com\".\n     * @param array $config {\n     *    Config options used to construct the grpc-fallback transport.\n     *\n     *    @type callable $httpHandler A handler used to deliver PSR-7 requests.\n     * }\n     * @return GrpcFallbackTransport\n     * @throws ValidationException\n     */\n    public static function build(string $apiEndpoint, array $config = [])\n    {\n        $config += [\n            'httpHandler'  => null,\n            'clientCertSource' => null,\n            'logger' => null,\n        ];\n        list($baseUri, $port) = self::normalizeServiceAddress($apiEndpoint);\n        $httpHandler = $config['httpHandler'] ?: self::buildHttpHandlerAsync(logger: $config['logger']);\n        $transport = new GrpcFallbackTransport(\"$baseUri:$port\", $httpHandler);\n        if ($config['clientCertSource']) {\n            $transport->configureMtlsChannel($config['clientCertSource']);\n        }\n        return $transport;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startUnaryCall(Call $call, array $options)\n    {\n        $httpHandler = $this->httpHandler;\n\n        $options['requestId'] = crc32((string) spl_object_id($call) . getmypid());\n\n        return $httpHandler(\n            $this->buildRequest($call, $options),\n            $this->getCallOptions($options)\n        )->then(\n            function (ResponseInterface $response) use ($options) {\n                if (isset($options['metadataCallback'])) {\n                    $metadataCallback = $options['metadataCallback'];\n                    $metadataCallback($response->getHeaders());\n                }\n                return $response;\n            }\n        )->then(\n            function (ResponseInterface $response) use ($call) {\n                return $this->unpackResponse($call, $response);\n            },\n            function (\\Exception $ex) {\n                throw $this->transformException($ex);\n            }\n        );\n    }\n\n    /**\n     * @param Call $call\n     * @param array $options\n     * @return RequestInterface\n     */\n    private function buildRequest(Call $call, array $options)\n    {\n        // Build common headers and set the content type to 'application/x-protobuf'\n        $headers = ['Content-Type' => 'application/x-protobuf'] + self::buildCommonHeaders($options);\n\n        // It is necessary to supply 'grpc-web' in the 'x-goog-api-client' header\n        // when using the grpc-fallback protocol.\n        $headers += ['x-goog-api-client' => []];\n        $headers['x-goog-api-client'][] = 'grpc-web';\n\n        // Uri format: https://<service>/$rpc/<method>\n        $uri = \"https://{$this->baseUri}/\\$rpc/{$call->getMethod()}\";\n\n        return new Request(\n            'POST',\n            $uri,\n            $headers,\n            $call->getMessage()->serializeToString()\n        );\n    }\n\n    /**\n     * @param Call $call\n     * @param ResponseInterface $response\n     * @return Message\n     */\n    private function unpackResponse(Call $call, ResponseInterface $response)\n    {\n        $decodeType = $call->getDecodeType();\n        /** @var Message $responseMessage */\n        $responseMessage = new $decodeType();\n        $responseMessage->mergeFromString((string) $response->getBody());\n        return $responseMessage;\n    }\n\n    /**\n     * @param array $options\n     * @return array\n     */\n    private function getCallOptions(array $options)\n    {\n        $callOptions = $options['transportOptions']['grpcFallbackOptions'] ?? [];\n\n        if (isset($options['timeoutMillis'])) {\n            $callOptions['timeout'] = $options['timeoutMillis'] / 1000;\n        }\n\n        if (isset($options['retryAttempt'])) {\n            $callOptions['retryAttempt'] = $options['retryAttempt'];\n        }\n\n        if (isset($options['requestId'])) {\n            $callOptions['requestId'] = $options['requestId'];\n        }\n\n        if ($this->clientCertSource) {\n            list($cert, $key) = self::loadClientCertSource($this->clientCertSource);\n            $callOptions['cert'] = $cert;\n            $callOptions['key'] = $key;\n        }\n\n        return $callOptions;\n    }\n\n    /**\n     * @param \\Exception $ex\n     * @return \\Exception\n     */\n    private function transformException(\\Exception $ex)\n    {\n        if ($ex instanceof RequestException && $ex->hasResponse()) {\n            $res = $ex->getResponse();\n            $body = (string) $res->getBody();\n            $status = new Status();\n            try {\n                $status->mergeFromString($body);\n                return ApiException::createFromRpcStatus($status);\n            } catch (\\Exception $parseException) {\n                // We were unable to parse the response body into a $status object. Instead,\n                // create an ApiException using the unparsed $body as message.\n                $code = ApiStatus::rpcCodeFromHttpStatusCode($res->getStatusCode());\n                return ApiException::createFromApiResponse($body, $code, null, $parseException);\n            }\n        } else {\n            return $ex;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/GrpcTransport.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport;\n\nuse Exception;\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\BidiStream;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\ClientStream;\nuse Google\\ApiCore\\GrpcSupportTrait;\nuse Google\\ApiCore\\ServerStream;\nuse Google\\ApiCore\\ServiceAddressTrait;\nuse Google\\ApiCore\\Transport\\Grpc\\ServerStreamingCallWrapper;\nuse Google\\ApiCore\\Transport\\Grpc\\UnaryInterceptorInterface;\nuse Google\\ApiCore\\ValidationException;\nuse Google\\ApiCore\\ValidationTrait;\nuse Google\\Auth\\Logging\\LoggingTrait;\nuse Google\\Auth\\Logging\\RpcLogEvent;\nuse Google\\Rpc\\Code;\nuse Grpc\\BaseStub;\nuse Grpc\\Channel;\nuse Grpc\\ChannelCredentials;\nuse Grpc\\Interceptor;\nuse GuzzleHttp\\Promise\\Promise;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * A gRPC based transport implementation.\n */\nclass GrpcTransport extends BaseStub implements TransportInterface\n{\n    use ValidationTrait;\n    use GrpcSupportTrait;\n    use ServiceAddressTrait;\n    use LoggingTrait;\n\n    private null|LoggerInterface $logger;\n\n    /**\n     * @param string $hostname\n     * @param array $opts\n     *  - 'update_metadata': (optional) a callback function which takes in a\n     * metadata array, and returns an updated metadata array\n     *  - 'grpc.primary_user_agent': (optional) a user-agent string\n     * @param Channel $channel An already created Channel object (optional)\n     * @param Interceptor[]|UnaryInterceptorInterface[] $interceptors *EXPERIMENTAL*\n     *        Interceptors used to intercept RPC invocations before a call starts.\n     *        Please note that implementations of\n     *        {@see \\Google\\ApiCore\\Transport\\Grpc\\UnaryInterceptorInterface} are\n     *        considered deprecated and support will be removed in a future\n     *        release. To prepare for this, please take the time to convert\n     *        `UnaryInterceptorInterface` implementations over to a class which\n     *        extends {@see Grpc\\Interceptor}.\n     * @param null|false|LoggerInterface $logger A PSR-3 Compliant logger.\n     * @throws Exception\n     */\n    public function __construct(\n        string $hostname,\n        array $opts,\n        ?Channel $channel = null,\n        array $interceptors = [],\n        null|false|LoggerInterface $logger = null\n    ) {\n        if ($interceptors) {\n            $channel = Interceptor::intercept(\n                $channel ?: new Channel($hostname, $opts),\n                $interceptors\n            );\n        }\n\n        parent::__construct($hostname, $opts, $channel);\n        $this->logger = $logger;\n    }\n\n    /**\n     * Builds a GrpcTransport.\n     *\n     * @param string $apiEndpoint\n     *        The address of the API remote host, for example \"example.googleapis.com. May also\n     *        include the port, for example \"example.googleapis.com:443\"\n     * @param array $config {\n     *    Config options used to construct the gRPC transport.\n     *\n     *    @type array $stubOpts Options used to construct the gRPC stub (see\n     *          {@link https://grpc.github.io/grpc/core/group__grpc__arg__keys.html}).\n     *    @type Channel $channel Grpc channel to be used.\n     *    @type Interceptor[]|UnaryInterceptorInterface[] $interceptors *EXPERIMENTAL*\n     *          Interceptors used to intercept RPC invocations before a call starts.\n     *          Please note that implementations of\n     *          {@see \\Google\\ApiCore\\Transport\\Grpc\\UnaryInterceptorInterface} are\n     *          considered deprecated and support will be removed in a future\n     *          release. To prepare for this, please take the time to convert\n     *          `UnaryInterceptorInterface` implementations over to a class which\n     *          extends {@see Grpc\\Interceptor}.\n     *    @type callable $clientCertSource A callable which returns the client cert as a string.\n     * }\n     * @return GrpcTransport\n     * @throws ValidationException\n     */\n    public static function build(string $apiEndpoint, array $config = [])\n    {\n        self::validateGrpcSupport();\n        $config += [\n            'stubOpts'         => [],\n            'channel'          => null,\n            'interceptors'     => [],\n            'clientCertSource' => null,\n            'logger'           => null,\n        ];\n        list($addr, $port) = self::normalizeServiceAddress($apiEndpoint);\n        $host = \"$addr:$port\";\n        $stubOpts = $config['stubOpts'];\n        // Set the required 'credentials' key in stubOpts if it is not already set. Use\n        // array_key_exists because null is a valid value.\n        if (!array_key_exists('credentials', $stubOpts)) {\n            if (isset($config['clientCertSource'])) {\n                list($cert, $key) = self::loadClientCertSource($config['clientCertSource']);\n                $stubOpts['credentials'] = ChannelCredentials::createSsl(null, $key, $cert);\n            } else {\n                $stubOpts['credentials'] = ChannelCredentials::createSsl();\n            }\n        }\n        $channel = $config['channel'];\n        if (!is_null($channel) && !($channel instanceof Channel)) {\n            throw new ValidationException(\n                \"Channel argument to GrpcTransport must be of type \\Grpc\\Channel, \" .\n                'instead got: ' . print_r($channel, true)\n            );\n        }\n        try {\n            if ($config['logger'] === false) {\n                $config['logger'] = null;\n            }\n            return new GrpcTransport($host, $stubOpts, $channel, $config['interceptors'], $config['logger']);\n        } catch (Exception $ex) {\n            throw new ValidationException(\n                'Failed to build GrpcTransport: ' . $ex->getMessage(),\n                $ex->getCode(),\n                $ex\n            );\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startBidiStreamingCall(Call $call, array $options)\n    {\n        $this->verifyUniverseDomain($options);\n\n        $bidiStream = new BidiStream(\n            $this->_bidiRequest(\n                '/' . $call->getMethod(),\n                [$call->getDecodeType(), 'decode'],\n                isset($options['headers']) ? $options['headers'] : [],\n                $this->getCallOptions($options)\n            ),\n            $call->getDescriptor(),\n            $this->logger\n        );\n\n        if ($this->logger) {\n            $requestEvent = new RpcLogEvent();\n\n            $requestEvent->headers = $options['headers'] ?? [];\n            $requestEvent->retryAttempt = $options['retryAttempt'] ?? null;\n            $requestEvent->serviceName = $options['serviceName'] ?? null;\n            $requestEvent->rpcName = $call->getMethod();\n            $requestEvent->processId = (int) getmypid();\n            $requestEvent->requestId = crc32((string) spl_object_id($bidiStream) . getmypid());\n\n            $this->logRequest($requestEvent);\n        }\n\n        return $bidiStream;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startClientStreamingCall(Call $call, array $options)\n    {\n\n        $this->verifyUniverseDomain($options);\n\n        return new ClientStream(\n            $this->_clientStreamRequest(\n                '/' . $call->getMethod(),\n                [$call->getDecodeType(), 'decode'],\n                isset($options['headers']) ? $options['headers'] : [],\n                $this->getCallOptions($options)\n            ),\n            $call->getDescriptor(),\n            $this->logger\n        );\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startServerStreamingCall(Call $call, array $options)\n    {\n        $this->verifyUniverseDomain($options);\n\n        $message = $call->getMessage();\n\n        if (!$message) {\n            throw new \\InvalidArgumentException('A message is required for ServerStreaming calls.');\n        }\n\n        // This simultaenously creates and starts a \\Grpc\\ServerStreamingCall.\n        $stream = $this->_serverStreamRequest(\n            '/' . $call->getMethod(),\n            $message,\n            [$call->getDecodeType(), 'decode'],\n            isset($options['headers']) ? $options['headers'] : [],\n            $this->getCallOptions($options)\n        );\n\n        $serverStream = new ServerStream(\n            new ServerStreamingCallWrapper($stream),\n            $call->getDescriptor(),\n            $this->logger\n        );\n\n        if ($this->logger) {\n            $requestEvent = new RpcLogEvent();\n\n            $requestEvent->headers = $options['headers'];\n            $requestEvent->payload = $call->getMessage()->serializeToJsonString();\n            $requestEvent->retryAttempt = $options['retryAttempt'] ?? null;\n            $requestEvent->serviceName = $options['serviceName'] ?? null;\n            $requestEvent->rpcName = $call->getMethod();\n            $requestEvent->processId = (int) getmypid();\n            $requestEvent->requestId = crc32((string) spl_object_id($serverStream) . getmypid());\n\n            $this->logRequest($requestEvent);\n        }\n\n        return $serverStream;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startUnaryCall(Call $call, array $options)\n    {\n        $this->verifyUniverseDomain($options);\n        $headers = $options['headers'] ?? [];\n        $requestEvent = null;\n\n        $unaryCall = $this->_simpleRequest(\n            '/' . $call->getMethod(),\n            $call->getMessage(),\n            [$call->getDecodeType(), 'decode'],\n            isset($options['headers']) ? $options['headers'] : [],\n            $this->getCallOptions($options)\n        );\n\n        if ($this->logger) {\n            $requestEvent = new RpcLogEvent();\n\n            $requestEvent->headers = $headers;\n            $requestEvent->payload = $call->getMessage()->serializeToJsonString();\n            $requestEvent->retryAttempt = $options['retryAttempt'] ?? null;\n            $requestEvent->serviceName = $options['serviceName'] ?? null;\n            $requestEvent->rpcName = $call->getMethod();\n            $requestEvent->processId = (int) getmypid();\n            $requestEvent->requestId = crc32((string) spl_object_id($call) . getmypid());\n\n            $this->logRequest($requestEvent);\n        }\n\n        /** @var Promise $promise */\n        $promise = new Promise(\n            function () use ($unaryCall, $options, &$promise, $requestEvent) {\n                list($response, $status) = $unaryCall->wait();\n\n                if ($this->logger) {\n                    $responseEvent = new RpcLogEvent($requestEvent->milliseconds);\n\n                    $responseEvent->headers = $status->metadata;\n                    $responseEvent->payload = ($response) ? $response->serializeToJsonString() : null;\n                    $responseEvent->status = $status->code;\n                    $responseEvent->processId = $requestEvent->processId;\n                    $responseEvent->requestId = $requestEvent->requestId;\n\n                    $this->logResponse($responseEvent);\n                }\n\n                if ($status->code == Code::OK) {\n                    if (isset($options['metadataCallback'])) {\n                        $metadataCallback = $options['metadataCallback'];\n                        $metadataCallback($unaryCall->getMetadata());\n                    }\n                    $promise->resolve($response);\n                } else {\n                    throw ApiException::createFromStdClass($status);\n                }\n            },\n            [$unaryCall, 'cancel']\n        );\n\n        return $promise;\n    }\n\n    private function verifyUniverseDomain(array $options)\n    {\n        if (isset($options['credentialsWrapper'])) {\n            $options['credentialsWrapper']->checkUniverseDomain();\n        }\n    }\n\n    private function getCallOptions(array $options)\n    {\n        $callOptions = $options['transportOptions']['grpcOptions'] ?? [];\n\n        if (isset($options['credentialsWrapper'])) {\n            $audience = $options['audience'] ?? null;\n            $credentialsWrapper = $options['credentialsWrapper'];\n            $callOptions['call_credentials_callback'] = $credentialsWrapper\n                ->getAuthorizationHeaderCallback($audience);\n        }\n\n        if (isset($options['timeoutMillis'])) {\n            $callOptions['timeout'] = $options['timeoutMillis'] * 1000;\n        }\n\n        return $callOptions;\n    }\n\n    private static function loadClientCertSource(callable $clientCertSource)\n    {\n        return call_user_func($clientCertSource);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/HttpUnaryTransportTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Transport;\n\nuse Exception;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\ValidationException;\nuse Google\\Auth\\HttpHandler\\HttpHandlerFactory;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * A trait for shared functionality between transports that support only unary RPCs using simple\n * HTTP requests.\n *\n * @internal\n */\ntrait HttpUnaryTransportTrait\n{\n    private $httpHandler;\n    private $transportName;\n    private $clientCertSource;\n\n    /**\n     * {@inheritdoc}\n     * @return never\n     * @throws \\BadMethodCallException\n     */\n    public function startClientStreamingCall(Call $call, array $options)\n    {\n        $this->throwUnsupportedException();\n    }\n\n    /**\n     * {@inheritdoc}\n     * @return never\n     * @throws \\BadMethodCallException\n     */\n    public function startServerStreamingCall(Call $call, array $options)\n    {\n        $this->throwUnsupportedException();\n    }\n\n    /**\n     * {@inheritdoc}\n     * @return never\n     * @throws \\BadMethodCallException\n     */\n    public function startBidiStreamingCall(Call $call, array $options)\n    {\n        $this->throwUnsupportedException();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function close()\n    {\n        // Nothing to do.\n    }\n\n    /**\n     * @param array $options\n     * @return array\n     */\n    private static function buildCommonHeaders(array $options)\n    {\n        $headers = $options['headers'] ?? [];\n\n        if (!is_array($headers)) {\n            throw new \\InvalidArgumentException(\n                'The \"headers\" option must be an array'\n            );\n        }\n\n        // If not already set, add an auth header to the request\n        if (!isset($headers['Authorization']) && isset($options['credentialsWrapper'])) {\n            $credentialsWrapper = $options['credentialsWrapper'];\n            $audience = $options['audience'] ?? null;\n            $callback = $credentialsWrapper\n                ->getAuthorizationHeaderCallback($audience);\n            // Prevent unexpected behavior, as the authorization header callback\n            // uses lowercase \"authorization\"\n            unset($headers['authorization']);\n            // Mitigate scenario where InsecureCredentialsWrapper returns null.\n            $authHeaders = empty($callback) ? [] : $callback();\n            if (!is_array($authHeaders)) {\n                throw new \\UnexpectedValueException(\n                    'Expected array response from authorization header callback'\n                );\n            }\n            $headers += $authHeaders;\n        }\n\n        return $headers;\n    }\n\n    /**\n     * @return callable\n     * @throws ValidationException\n     */\n    private static function buildHttpHandlerAsync(null|false|LoggerInterface $logger = null)\n    {\n        try {\n            return [HttpHandlerFactory::build(logger: $logger), 'async'];\n        } catch (Exception $ex) {\n            throw new ValidationException('Failed to build HttpHandler', $ex->getCode(), $ex);\n        }\n    }\n\n    /**\n     * Set the path to a client certificate.\n     *\n     * @param callable $clientCertSource\n     */\n    private function configureMtlsChannel(callable $clientCertSource)\n    {\n        $this->clientCertSource = $clientCertSource;\n    }\n\n    /**\n     * @return never\n     * @throws \\BadMethodCallException\n     */\n    private function throwUnsupportedException()\n    {\n        throw new \\BadMethodCallException(\n            \"Streaming calls are not supported while using the {$this->transportName} transport.\"\n        );\n    }\n\n    private static function loadClientCertSource(callable $clientCertSource)\n    {\n        $certFile = tempnam(sys_get_temp_dir(), 'cert');\n        $keyFile = tempnam(sys_get_temp_dir(), 'key');\n        list($cert, $key) = call_user_func($clientCertSource);\n        file_put_contents($certFile, $cert);\n        file_put_contents($keyFile, $key);\n\n        // the key and the cert are returned in one temporary file\n        return [$certFile, $keyFile];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Rest/JsonStreamDecoder.php",
    "content": "<?php\n/*\n * Copyright 2021 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Rest;\n\nuse Psr\\Http\\Message\\StreamInterface;\nuse RuntimeException;\n\nclass JsonStreamDecoder\n{\n    const ESCAPE_CHAR = '\\\\';\n\n    private StreamInterface $stream;\n    private bool $closeCalled = false;\n    private string $decodeType;\n    private bool $ignoreUnknown = true;\n    private int $readChunkSize = 1024;\n\n    /**\n     * JsonStreamDecoder is a HTTP-JSON response stream decoder for JSON-ecoded\n     * protobuf messages. The response stream must be a JSON array, where the first\n     * byte is the opening of the array (i.e. '['), and the last byte is the closing\n     * of the array (i.e. ']'). Each array item must be a JSON object and comma\n     * separated.\n     *\n     * @param StreamInterface $stream The stream to decode.\n     * @param string $decodeType The type name of response messages to decode.\n     * @param array<mixed> $options {\n     *     An array of optional arguments.\n     *\n     *     @type bool $ignoreUnknown\n     *           Toggles whether or not to throw an exception when an unknown field\n     *           is encountered in a response message. The default is true.\n     *     @type int $readChunkSizeBytes\n     *           The upper size limit in bytes that can be read at a time from the\n     *           response stream. The default is 1 KB.\n     * }\n     *\n     * @experimental\n     */\n    public function __construct(StreamInterface $stream, string $decodeType, array $options = [])\n    {\n        $this->stream = $stream;\n        $this->decodeType = $decodeType;\n\n        if (isset($options['ignoreUnknown'])) {\n            $this->ignoreUnknown = $options['ignoreUnknown'];\n        }\n        if (isset($options['readChunkSize'])) {\n            $this->readChunkSize = $options['readChunkSizeBytes'];\n        }\n    }\n\n    /**\n     * Begins decoding the configured response stream. It is a generator which\n     * yields messages of the given decode type from the stream until the stream\n     * completes. Throws an Exception if the stream is closed before the closing\n     * byte is read or if it encounters an error while decoding a message.\n     *\n     * @throws RuntimeException\n     * @return \\Generator\n     */\n    public function decode()\n    {\n        try {\n            foreach ($this->_decode() as $response) {\n                yield $response;\n            }\n        } catch (RuntimeException $re) {\n            $msg = $re->getMessage();\n            $streamClosedException =\n                strpos($msg, 'Stream is detached') !== false ||\n                strpos($msg, 'Unexpected stream close') !== false;\n\n            // Only throw the exception if close() was not called and it was not\n            // a closing-related exception.\n            if (!$this->closeCalled || !$streamClosedException) {\n                throw $re;\n            }\n        }\n    }\n\n    /**\n     * @return \\Generator\n     */\n    private function _decode()\n    {\n        $decodeType = $this->decodeType;\n        $str = false;\n        $prev = $chunk = '';\n        $start = $end = $cursor = $level = 0;\n        while ($chunk !== '' || !$this->stream->eof()) {\n            // Read up to $readChunkSize bytes from the stream.\n            $chunk .= $this->stream->read($this->readChunkSize);\n\n            // If the response stream has been closed and the only byte\n            // remaining is the closing array bracket, we are done.\n            if ($this->stream->eof() && $chunk === ']') {\n                $level--;\n                break;\n            }\n\n            // Parse the freshly read data available in $chunk.\n            $chunkLength = strlen($chunk);\n            while ($cursor < $chunkLength) {\n                // Access the next byte for processing.\n                $b = $chunk[$cursor];\n\n                // Track open/close double quotes of a key or value. Do not\n                // toggle flag with the pervious byte was an escape character.\n                if ($b === '\"' && $prev !== self::ESCAPE_CHAR) {\n                    $str = !$str;\n                }\n\n                // Skip over new lines that break up items.\n                if ($b === \"\\n\" && $level === 1) {\n                    $start++;\n                }\n\n                // Ignore commas separating messages in the stream array.\n                if ($b === ',' && $level === 1) {\n                    $start++;\n                }\n                // Track the opening of a new array or object if not in a string\n                // value.\n                if (($b === '{' || $b === '[') && !$str) {\n                    $level++;\n                    // Opening of the array/root object.\n                    // Do not include it in the messageBuffer.\n                    if ($level === 1) {\n                        $start++;\n                    }\n                }\n                // Track the closing of an object if not in a string value.\n                if ($b === '}' && !$str) {\n                    $level--;\n                    if ($level === 1) {\n                        $end = $cursor + 1;\n                    }\n                }\n                // Track the closing of an array if not in a string value.\n                if ($b === ']' && !$str) {\n                    $level--;\n                    // If we are seeing a closing square bracket at the\n                    // response message level, e.g. {\"foo], there is a problem.\n                    if ($level === 1) {\n                        throw new \\RuntimeException('Received closing byte mid-message');\n                    }\n                }\n\n                // A message-closing byte was just buffered. Decode the\n                // message with the decode type, clearing the messageBuffer,\n                // and yield it.\n                //\n                // TODO(noahdietz): Support google.protobuf.*Value messages that\n                // are encoded as primitives and separated by commas.\n                if ($end !== 0) {\n                    $length = $end - $start;\n                    /** @var \\Google\\Protobuf\\Internal\\Message $return */\n                    $return = new $decodeType();\n                    $return->mergeFromJsonString(\n                        substr($chunk, $start, $length),\n                        $this->ignoreUnknown\n                    );\n                    yield $return;\n\n                    // Dump the part of the chunk used for parsing the message\n                    // and use the remaining for the next message.\n                    $remaining = $chunkLength - $length;\n                    $chunk = substr($chunk, $end, $remaining);\n\n                    // Reset all indices and exit chunk processing.\n                    $start = 0;\n                    $end = 0;\n                    $cursor = 0;\n                    break;\n                }\n\n                $cursor++;\n\n                // An escaped back slash should not escape the following character.\n                if ($b === self::ESCAPE_CHAR && $prev === self::ESCAPE_CHAR) {\n                    $b = '';\n                }\n                $prev = $b;\n            }\n            // If after attempting to process the chunk, no progress was made and the\n            // stream is closed, we must break as the stream has closed prematurely.\n            if ($cursor === $chunkLength && $this->stream->eof()) {\n                break;\n            }\n        }\n        if ($level > 0) {\n            throw new \\RuntimeException('Unexpected stream close before receiving the closing byte');\n        }\n    }\n\n    /**\n     * Closes the underlying stream. If the stream is actively being decoded, an\n     * exception will not be thrown due to the interruption.\n     *\n     * @return void\n     */\n    public function close()\n    {\n        $this->closeCalled = true;\n        $this->stream->close();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/Rest/RestServerStreamingCall.php",
    "content": "<?php\n/*\n * Copyright 2021 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport\\Rest;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\ApiStatus;\nuse Google\\ApiCore\\ServerStreamingCallInterface;\nuse Google\\Rpc\\Code;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse stdClass;\n\n/**\n * Class RestServerStreamingCall implements \\Google\\ApiCore\\ServerStreamingCallInterface.\n *\n * @experimental\n */\nclass RestServerStreamingCall implements ServerStreamingCallInterface\n{\n    /** @var callable */\n    private $httpHandler;\n\n    /** @var array<mixed> */\n    private array $decoderOptions;\n\n    private RequestInterface $originalRequest;\n    private ?JsonStreamDecoder $decoder;\n    private string $decodeType;\n    private ?ResponseInterface $response;\n    private stdClass $status;\n\n    /**\n     * @param callable $httpHandler\n     * @param string $decodeType\n     * @param array<mixed> $decoderOptions\n     */\n    public function __construct(callable $httpHandler, string $decodeType, array $decoderOptions)\n    {\n        $this->httpHandler = $httpHandler;\n        $this->decodeType = $decodeType;\n        $this->decoderOptions = $decoderOptions;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function start($request, array $headers = [], array $callOptions = [])\n    {\n        $this->originalRequest = $this->appendHeaders($request, $headers);\n\n        try {\n            $handler = $this->httpHandler;\n            $response = $handler(\n                $this->originalRequest,\n                $callOptions\n            )->wait();\n        } catch (\\Exception $ex) {\n            if ($ex instanceof RequestException && $ex->hasResponse()) {\n                $ex = ApiException::createFromRequestException($ex, /* isStream */ true);\n            }\n            throw $ex;\n        }\n\n        // Create an OK Status for a successful request just so that it\n        // has a return value.\n        $this->status = new stdClass();\n        $this->status->code = Code::OK;\n        $this->status->message = ApiStatus::OK;\n        $this->status->details = [];\n\n        $this->response = $response;\n    }\n\n    /**\n     * @param RequestInterface $request\n     * @param array<mixed> $headers\n     * @return RequestInterface\n     */\n    private function appendHeaders(RequestInterface $request, array $headers)\n    {\n        foreach ($headers as $key => $value) {\n            $request = $request->hasHeader($key) ?\n                        $request->withAddedHeader($key, $value) :\n                        $request->withHeader($key, $value);\n        }\n\n        return $request;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function responses()\n    {\n        if (is_null($this->response)) {\n            throw new \\Exception('Stream has not been started.');\n        }\n\n        // Decode the stream and yield responses as they are read.\n        $this->decoder = new JsonStreamDecoder(\n            $this->response->getBody(),\n            $this->decodeType,\n            $this->decoderOptions\n        );\n\n        foreach ($this->decoder->decode() as $message) {\n            yield $message;\n        }\n    }\n\n    /**\n     * Return the status of the server stream. If the call has not been started\n     * this will be null.\n     *\n     * @return stdClass The status, with integer $code, string\n     *                   $details, and array $metadata members\n     */\n    public function getStatus()\n    {\n        return $this->status;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMetadata()\n    {\n        return is_null($this->response) ? null : $this->response->getHeaders();\n    }\n\n    /**\n     * The Rest transport does not support trailing metadata. This is a\n     * passthrough to getMetadata().\n     */\n    public function getTrailingMetadata()\n    {\n        return $this->getMetadata();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getPeer()\n    {\n        return $this->originalRequest->getUri();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function cancel()\n    {\n        if (!is_null($this->decoder)) {\n            $this->decoder->close();\n        }\n    }\n\n    /**\n     * For the REST transport this is a no-op.\n     * {@inheritdoc}\n     */\n    public function setCallCredentials($call_credentials)\n    {\n        // Do nothing.\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/RestTransport.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore\\Transport;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\InsecureRequestBuilder;\nuse Google\\ApiCore\\RequestBuilder;\nuse Google\\ApiCore\\ServerStream;\nuse Google\\ApiCore\\ServiceAddressTrait;\nuse Google\\ApiCore\\Transport\\Rest\\RestServerStreamingCall;\nuse Google\\ApiCore\\ValidationException;\nuse Google\\ApiCore\\ValidationTrait;\nuse Google\\Protobuf\\Internal\\Message;\nuse GuzzleHttp\\Exception\\RequestException;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * A REST based transport implementation.\n */\nclass RestTransport implements TransportInterface\n{\n    use ValidationTrait;\n    use ServiceAddressTrait;\n    use HttpUnaryTransportTrait {\n        startServerStreamingCall as protected unsupportedServerStreamingCall;\n    }\n\n    private RequestBuilder $requestBuilder;\n\n    /**\n     * @param RequestBuilder $requestBuilder A builder responsible for creating\n     *        a PSR-7 request from a set of request information.\n     * @param callable $httpHandler A handler used to deliver PSR-7 requests.\n     */\n    public function __construct(\n        RequestBuilder $requestBuilder,\n        callable $httpHandler\n    ) {\n        $this->requestBuilder = $requestBuilder;\n        $this->httpHandler = $httpHandler;\n        $this->transportName = 'REST';\n    }\n\n    /**\n     * Builds a RestTransport.\n     *\n     * @param string $apiEndpoint\n     *        The address of the API remote host, for example \"example.googleapis.com\".\n     * @param string $restConfigPath\n     *        Path to rest config file.\n     * @param array<mixed> $config {\n     *    Config options used to construct the gRPC transport.\n     *\n     *    @type callable $httpHandler A handler used to deliver PSR-7 requests.\n     *    @type callable $clientCertSource A callable which returns the client cert as a string.\n     *    @type bool $hasEmulator True if the emulator is enabled.\n     * }\n     * @return RestTransport\n     * @throws ValidationException\n     */\n    public static function build(string $apiEndpoint, string $restConfigPath, array $config = [])\n    {\n        $config += [\n            'httpHandler'  => null,\n            'clientCertSource' => null,\n            'hasEmulator' => false,\n            'logger' => null,\n        ];\n        list($baseUri, $port) = self::normalizeServiceAddress($apiEndpoint);\n        $requestBuilder = $config['hasEmulator']\n            ? new InsecureRequestBuilder(\"$baseUri:$port\", $restConfigPath)\n            : new RequestBuilder(\"$baseUri:$port\", $restConfigPath);\n        $httpHandler = $config['httpHandler'] ?: self::buildHttpHandlerAsync($config['logger']);\n        $transport = new RestTransport($requestBuilder, $httpHandler);\n        if ($config['clientCertSource']) {\n            $transport->configureMtlsChannel($config['clientCertSource']);\n        }\n        return $transport;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startUnaryCall(Call $call, array $options)\n    {\n        $headers = self::buildCommonHeaders($options);\n\n        // Add the $call object ID for logging\n        $options['requestId'] = crc32((string) spl_object_id($call) . getmypid());\n\n        // call the HTTP handler\n        $httpHandler = $this->httpHandler;\n        return $httpHandler(\n            $this->requestBuilder->build(\n                $call->getMethod(),\n                $call->getMessage(),\n                $headers\n            ),\n            $this->getCallOptions($options)\n        )->then(\n            function (ResponseInterface $response) use ($call, $options) {\n                $decodeType = $call->getDecodeType();\n                /** @var Message $return */\n                $return = new $decodeType();\n                $body = (string) $response->getBody();\n\n                // In some rare cases LRO response metadata may not be loaded\n                // in the descriptor pool, triggering an exception. The catch\n                // statement handles this case and attempts to add the LRO\n                // metadata type to the pool by directly instantiating the\n                // metadata class.\n                try {\n                    $return->mergeFromJsonString(\n                        $body,\n                        true\n                    );\n                } catch (\\Exception $ex) {\n                    if (!isset($options['metadataReturnType'])) {\n                        throw $ex;\n                    }\n\n                    if (strpos($ex->getMessage(), 'Error occurred during parsing:') !== 0) {\n                        throw $ex;\n                    }\n\n                    new $options['metadataReturnType']();\n                    $return->mergeFromJsonString(\n                        $body,\n                        true\n                    );\n                }\n\n                if (isset($options['metadataCallback'])) {\n                    $metadataCallback = $options['metadataCallback'];\n                    $metadataCallback($response->getHeaders());\n                }\n\n                return $return;\n            },\n            function (\\Throwable $ex) {\n                if ($ex instanceof RequestException && $ex->hasResponse()) {\n                    throw ApiException::createFromRequestException($ex);\n                }\n\n                throw $ex;\n            }\n        );\n    }\n\n    /**\n     * {@inheritdoc}\n     * @throws \\BadMethodCallException for forwards compatibility with older GAPIC clients\n     */\n    public function startServerStreamingCall(Call $call, array $options)\n    {\n        $message = $call->getMessage();\n        if (!$message) {\n            throw new \\InvalidArgumentException('A message is required for ServerStreaming calls.');\n        }\n\n        // Maintain forwards compatibility with older GAPIC clients not configured for REST server streaming\n        // @see https://github.com/googleapis/gax-php/issues/370\n        if (!$this->requestBuilder->pathExists($call->getMethod())) {\n            $this->unsupportedServerStreamingCall($call, $options);\n        }\n\n        $headers = self::buildCommonHeaders($options);\n        $callOptions = $this->getCallOptions($options);\n        $request = $this->requestBuilder->build(\n            $call->getMethod(),\n            $call->getMessage()\n            // Exclude headers here because they will be added in _serverStreamRequest().\n        );\n\n        $decoderOptions = [];\n        if (isset($options['decoderOptions'])) {\n            $decoderOptions = $options['decoderOptions'];\n        }\n\n        return new ServerStream(\n            $this->_serverStreamRequest(\n                $this->httpHandler,\n                $request,\n                $headers,\n                $call->getDecodeType(),\n                $callOptions,\n                $decoderOptions\n            ),\n            $call->getDescriptor()\n        );\n    }\n\n    /**\n     * Creates and starts a RestServerStreamingCall.\n     *\n     * @param callable $httpHandler The HTTP Handler to invoke the request with.\n     * @param RequestInterface $request The request to invoke.\n     * @param array<mixed> $headers The headers to include in the request.\n     * @param string $decodeType The response stream message type to decode.\n     * @param array<mixed> $callOptions The call options to use when making the call.\n     * @param array<mixed> $decoderOptions The options to use for the JsonStreamDecoder.\n     *\n     * @return RestServerStreamingCall\n     */\n    private function _serverStreamRequest(\n        $httpHandler,\n        $request,\n        $headers,\n        $decodeType,\n        $callOptions,\n        $decoderOptions = []\n    ) {\n        $call = new RestServerStreamingCall(\n            $httpHandler,\n            $decodeType,\n            $decoderOptions\n        );\n        $call->start($request, $headers, $callOptions);\n\n        return $call;\n    }\n\n    /**\n     * @param array<mixed> $options\n     *\n     * @return array<mixed>\n     */\n    private function getCallOptions(array $options)\n    {\n        $callOptions = $options['transportOptions']['restOptions'] ?? [];\n\n        if (isset($options['timeoutMillis'])) {\n            $callOptions['timeout'] = $options['timeoutMillis'] / 1000;\n        }\n\n        if ($this->clientCertSource) {\n            list($cert, $key) = self::loadClientCertSource($this->clientCertSource);\n            $callOptions['cert'] = $cert;\n            $callOptions['key'] = $key;\n        }\n\n        if (isset($options['retryAttempt'])) {\n            $callOptions['retryAttempt'] = $options['retryAttempt'];\n        }\n\n        if (isset($options['requestId'])) {\n            $callOptions['requestId'] = $options['requestId'];\n        }\n\n        return $callOptions;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Transport/TransportInterface.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore\\Transport;\n\nuse Google\\ApiCore\\BidiStream;\nuse Google\\ApiCore\\Call;\nuse Google\\ApiCore\\ClientStream;\nuse Google\\ApiCore\\ServerStream;\nuse Google\\ApiCore\\ValidationException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\n\ninterface TransportInterface\n{\n    /**\n     * Starts a bidi streaming call.\n     *\n     * @param Call $call\n     * @param array<mixed> $options\n     *\n     * @return BidiStream\n     */\n    public function startBidiStreamingCall(Call $call, array $options);\n\n    /**\n     * Starts a client streaming call.\n     *\n     * @param Call $call\n     * @param array<mixed> $options\n     *\n     * @return ClientStream\n     */\n    public function startClientStreamingCall(Call $call, array $options);\n\n    /**\n     * Starts a server streaming call.\n     *\n     * @param Call $call\n     * @param array<mixed> $options\n     *\n     * @return ServerStream\n     */\n    public function startServerStreamingCall(Call $call, array $options);\n\n    /**\n     * Returns a promise used to execute network requests.\n     *\n     * @param Call $call\n     * @param array<mixed> $options\n     *\n     * @return PromiseInterface\n     * @throws ValidationException\n     */\n    public function startUnaryCall(Call $call, array $options);\n\n    /**\n     * Closes the connection, if one exists.\n     *\n     * @return void\n     */\n    public function close();\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/UriTrait.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nnamespace Google\\ApiCore;\n\nuse GuzzleHttp\\Psr7\\Query;\nuse GuzzleHttp\\Psr7\\Utils;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Provides a light wrapper around often used URI related functions.\n *\n * @internal\n */\ntrait UriTrait\n{\n    /**\n     * @param string|UriInterface $uri\n     * @param array $query\n     * @return UriInterface\n     */\n    public function buildUriWithQuery($uri, array $query)\n    {\n        $query = array_filter($query, function ($v) {\n            return $v !== null;\n        });\n\n        // Casts bools to their string representation\n        foreach ($query as $k => &$v) {\n            if (is_bool($v)) {\n                $v = $v ? 'true' : 'false';\n            }\n        }\n\n        return Utils::uriFor($uri)\n            ->withQuery(\n                Query::build($query)\n            );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ValidationException.php",
    "content": "<?php\n/*\n * Copyright 2016 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\nuse Exception;\n\n/**\n * ValidationException represents a local error (i.e. not during an RPC call).\n */\nclass ValidationException extends Exception\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/ValidationTrait.php",
    "content": "<?php\n/*\n * Copyright 2017 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\n/**\n * @internal\n */\ntrait ValidationTrait\n{\n    /**\n     * @param array $arr Associative array\n     * @param array $requiredKeys List of keys to check for in $arr\n     * @return array Returns $arr for fluent use\n     */\n    public static function validate(array $arr, array $requiredKeys)\n    {\n        return self::validateImpl($arr, $requiredKeys, true);\n    }\n\n    /**\n     * @param array $arr Associative array\n     * @param array $requiredKeys List of keys to check for in $arr\n     * @return array Returns $arr for fluent use\n     */\n    public static function validateNotNull(array $arr, array $requiredKeys)\n    {\n        return self::validateImpl($arr, $requiredKeys, false);\n    }\n\n    private static function validateImpl($arr, $requiredKeys, $allowNull)\n    {\n        foreach ($requiredKeys as $requiredKey) {\n            $valid = array_key_exists($requiredKey, $arr)\n                && ($allowNull || !is_null($arr[$requiredKey]));\n            if (!$valid) {\n                throw new ValidationException(\"Missing required argument $requiredKey\");\n            }\n        }\n        return $arr;\n    }\n\n    /**\n     * @param string $filePath\n     * @throws ValidationException\n     */\n    private static function validateFileExists(string $filePath)\n    {\n        if (!file_exists($filePath)) {\n            throw new ValidationException(\"Could not find specified file: $filePath\");\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/gax/src/Version.php",
    "content": "<?php\n/*\n * Copyright 2018 Google LLC\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nnamespace Google\\ApiCore;\n\n/**\n * @internal\n */\nclass Version\n{\n    /**\n     * @var ?string\n     */\n    private static $version = null;\n\n    /**\n     * @return string The version of the ApiCore library.\n     */\n    public static function getApiCoreVersion()\n    {\n        if (is_null(self::$version)) {\n            $versionFile = implode(DIRECTORY_SEPARATOR, [__DIR__, '..', 'VERSION']);\n            self::$version = self::readVersionFile($versionFile);\n        }\n        return self::$version;\n    }\n\n    /**\n     * Reads a VERSION file and returns the contents. If the file does not\n     * exist, returns \"\".\n     *\n     * @param string $file\n     * @return string\n     */\n    public static function readVersionFile(string $file)\n    {\n        $versionString = file_exists($file)\n            ? (string) file_get_contents($file)\n            : '';\n        return trim($versionString);\n    }\n\n    /**\n     * Private constructor.\n     */\n    private function __construct()\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/.github/release-please.yml",
    "content": "releaseType: simple\nhandleGHRelease: true\nprimaryBranch: main\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/.github/workflows/tests.yml",
    "content": "name: Test Suite\non:\n  push:\n    branches:\n      - master\n  pull_request:\njobs:\n  test:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        php: [ \"8.0\", \"8.1\", \"8.2\", \"8.3\", \"8.4\" ]\n    name: \"PHP ${{ matrix.php }} Unit Test\"\n    steps:\n      - uses: actions/checkout@v2\n      - uses: codecov/codecov-action@v1\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: ${{ matrix.php }}\n          tools: pecl\n          extensions: grpc-1.49.0\n      - name: Install composer dependencies\n        uses: nick-invision/retry@v1\n        with:\n          timeout_minutes: 10\n          max_attempts: 3\n          command: composer install\n      - name: Run PHPUnit\n        run: vendor/bin/phpunit -v\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/.gitmodules",
    "content": "[submodule \"third_party/googleapis\"]\n\tpath = third_party/googleapis\n\turl = https://github.com/googleapis/googleapis.git\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/.php_cs.dist",
    "content": "<?php\nreturn PhpCsFixer\\Config::create()\n    ->setRules([\n        '@PSR2' => true,\n        'concat_space' => ['spacing' => 'one'],\n        'no_unused_imports' => true,\n        'method_argument_space' => false,\n    ])\n    ->setFinder(\n        PhpCsFixer\\Finder::create()\n\t    ->notPath('firestore')\n            ->in(__DIR__)\n    )\n;\n\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/README.md",
    "content": "# gRPC for GCP extensions\n\nCopyright 2018\n[The gRPC Authors](https://github.com/grpc/grpc/blob/master/AUTHORS)\n\n## About This Repository\n\nThis repo is created to support GCP specific extensions for gRPC. To use the extension features, please refer to [src](src).\n\nThis repo also contains supporting infrastructures such as end2end tests and benchmarks for accessing cloud APIs with gRPC client libraries.\n\n## License\n\nApache 2.0 - See [LICENSE](LICENSE) for more information.\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/cloudprober.cfg",
    "content": "probe {\n  type: EXTERNAL\n  name: \"spanner\"\n  interval_msec: 1800000\n  timeout_msec: 30000\n  targets { dummy_targets {} }  # No targets for external probe\n  external_probe {\n    mode: ONCE\n    command: \"php grpc_gpc_prober/prober.php --api=spanner\"\n  }\n}\n\nprobe {\n  type: EXTERNAL\n  name: \"firestore\"\n  interval_msec: 1800000\n  timeout_msec: 30000\n  targets { dummy_targets {} }  # No targets for external probe\n  external_probe {\n    mode: ONCE\n    command: \"php grpc_gpc_prober/prober.php --api=firestore\"\n  }\n}\n\nsurfacer {\n  type: STACKDRIVER\n  name: \"stackdriver\"\n  stackdriver_surfacer {\n    monitoring_url: \"custom.googleapis.com/cloudprober/\"\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/codegen.sh",
    "content": "#!/usr/bin/env bash\ncd \"$(dirname \"$0\")\"\n\nrm -rf google\n\nfor p in $(find ../third_party/googleapis/google -type f -name *.proto); do\n\tprotoc \\\n    --proto_path=../third_party/googleapis \\\n    --php_out=./ \\\n    --grpc_out=./ \\\n    --plugin=protoc-gen-grpc=\"$(which grpc_php_plugin)\" \\\n    \"$p\"\ndone\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/composer.json",
    "content": "{\n  \"name\": \"grpc_gcp_prober\",\n  \"description\": \"grpc cloudprober for PHP\",\n  \"require\": {\n    \"grpc/grpc\": \"^v1.15.0\",\n    \"google/auth\": \"^v1.4.0\",\n    \"google/cloud\": \"^v0.86.0\"\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/grpc_gpc_prober/firestore_probes.php",
    "content": "<?php\n\nrequire('../vendor/autoload.php');\n\n$_PARENT_RESOURCE = 'projects/grpc-prober-testing/databases/(default)/documents';\n\n/*\nProbes to test ListDocuments grpc call from Firestore stub.\n\n  Args:\n    stub: An object of FirestoreStub.\n    metrics: A dict of metrics.\n*/\n\nfunction document($client, &$metrics){\n\tglobal $_PARENT_RESOURCE;\n\t\n\t$list_document_request = new Google\\Cloud\\Firestore\\V1beta1\\ListDocumentsRequest();\n\t$list_document_request->setParent($_PARENT_RESOURCE);\n\t$time_start = microtime_float();\n\n\t$client->ListDocuments($list_document_request);\n\n\t$lantency = (microtime_float()- $time_start) * 1000;\n\t$metrics['list_documents_latency_ms'] = $lantency;\n\n}\n\n$probFunctions = [\n\t'documents' => 'document'\n];\n\nreturn $probFunctions;"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/grpc_gpc_prober/prober.php",
    "content": "<?php\nchdir(dirname(__FILE__));\nrequire '../vendor/autoload.php';\n\n// require_once '../Google/Cloud/Firestore/V1beta1/FirestoreClient.php';\n// require_once '../Google/Cloud/Spanner/V1/SpannerClient.php';\n\n$firestore_probes = require './firestore_probes.php';\n$spanner_probes = require './spanner_probes.php';\nrequire './stackdriver_util.php';\n\n$_OAUTH_SCOPE = 'https://www.googleapis.com/auth/cloud-platform';\n$_FIRESTORE_TARGET = 'firestore.googleapis.com:443';\n$_SPANNER_TARGET = 'spanner.googleapis.com:443';\n\nuse Google\\Auth\\ApplicationDefaultCredentials;\nuse Google\\Cloud\\Firestore\\V1beta1\\FirestoreGrpcClient;\nuse Google\\Cloud\\Spanner\\V1\\SpannerGrpcClient;\n\nfunction getArgs(){\n\t$options = getopt('',['api:','extension:']);\n\treturn $options;\n}\n\n/*\nfunction secureAuthorizedChannel($credentials, $request, $target, $kwargs){\n\t$metadata_plugin = $transport_grpc->AuthMetadataPlugin($credentials, $request);\n\t$ssl_credentials = Grpc\\ChannelCredentials::createSsl();\n\t$composit_credentials = $grpc->composite_channel_credentials($ssl_credentials, $google_auth_credentials);\n\treturn $grpc_gcp->secure_channel($target, $composit_credentials, $kwargs);\n}\n\nfunction getStubChannel($target){\n\t$res = $auth->default([$_OAUTH_SCOPE]);\n\t$cred = $res[0];\n\treturn secureAuthorizedChannel($cred, Request(), $target);\n}*/\n\nfunction executeProbes($api){\n\tglobal $_OAUTH_SCOPE;\n\tglobal $_SPANNER_TARGET;\n\tglobal $_FIRESTORE_TARGET;\n\n\tglobal $spanner_probes;\n\tglobal $firestore_probes;\n\n\t$util = new StackdriverUtil($api);\n\t$auth = Google\\Auth\\ApplicationDefaultCredentials::getCredentials($_OAUTH_SCOPE);\n\t$opts = [\n  \t\t'credentials' => Grpc\\ChannelCredentials::createSsl(),\n  \t\t'update_metadata' => $auth->getUpdateMetadataFunc(),\n\t];\n\n\tif($api == 'spanner'){\n\t\t$client = new SpannerGrpcClient($_SPANNER_TARGET, $opts);\n\t\t$probe_functions = $spanner_probes;\n\t}\n\telse if($api == 'firestore'){\n\t\t$client = new FirestoreGrpcClient($_FIRESTORE_TARGET, $opts);\n\t\t$probe_functions = $firestore_probes;\n\t}\n\telse{\n\t\techo 'grpc not implemented for '.$api;\n\t\texit(1);\n\t}\n\n\t$total = sizeof($probe_functions);\n\t$success = 0;\n\t$metrics = [];\n\n\t# Execute all probes for given api\n\tforeach ($probe_functions as $probe_name => $probe_function) {\n\t\ttry{\n\t\t\t$probe_function($client, $metrics);\n\t\t\t$success++;\n\t\t}\n\t\tcatch(Exception $e){\n\t\t\t$util->reportError($e);\n\t\t}\n\n\t}\n\n\tif($success == $total){\n\t\t$util->setSuccess(True);\n\t}\n\n\t$util->addMetrics($metrics);\n\t$util->outputMetrics();\n\n\tif($success != $total){\n\t\t# TODO: exit system\n\t\texit(1);\n\t}\n\n}\n\nfunction main(){\n\t$args = getArgs();\n\texecuteProbes($args['api']);\n}\n\nmain();\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/grpc_gpc_prober/spanner_probes.php",
    "content": "<?php\n\nrequire('../vendor/autoload.php');\n\n$_DATABASE = 'projects/grpc-prober-testing/instances/test-instance/databases/test-db';\n$_TEST_USERNAME = 'test_username';\n\nfunction hardAssert($value, $error_message)\n{\n    if (!$value) {\n        echo $error_message.\"\\n\";\n        exit(1);\n    }\n}\nfunction hardAssertIfStatusOk($status)\n{\n    if ($status->code !== Grpc\\STATUS_OK) {\n        echo \"Call did not complete successfully. Status object:\\n\";\n        var_dump($status);\n        exit(1);\n    }\n}\n\nfunction microtime_float()\n{\n    list($usec, $sec) = explode(\" \", microtime());\n    return ((float)$usec + (float)$sec);\n}\n\n/*\nProbes to test session related grpc call from Spanner stub.\n\n  Includes tests against CreateSession, GetSession, ListSessions, and\n  DeleteSession of Spanner stub.\n\n  Args:\n    stub: An object of SpannerStub.\n    metrics: A list of metrics.\n\n*/\n\nfunction sessionManagement($client, &$metrics){\n\tglobal $_DATABASE;\n\n\t$createSessionRequest = new Google\\Cloud\\Spanner\\V1\\CreateSessionRequest();\n\t$createSessionRequest->setDatabase($_DATABASE);\n\t#Create Session test\n\t#Create\n\t$time_start = microtime_float();\n\tlist($session, $status) = $client->CreateSession($createSessionRequest)->wait();\n\n\thardAssertIfStatusOk($status);\n\thardAssert($session !== null, 'Call completed with a null response');\n\n\t$lantency =  (microtime_float()- $time_start) * 1000;\n\t$metrics['create_session_latency_ms'] = $lantency;\n\n\t#Get Session\n\t$getSessionRequest = new Google\\Cloud\\Spanner\\V1\\GetSessionRequest();\n\t$getSessionRequest->setName($session->getName());\n\t$time_start = microtime_float();\n\t$response = $client->GetSession($getSessionRequest);\n\t$response->wait();\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['get_session_latency_ms'] = $lantency;\n\n\t#List session\n\t$listSessionsRequest = new Google\\Cloud\\Spanner\\V1\\ListSessionsRequest();\n\t$listSessionsRequest->setDatabase($_DATABASE);\n\t$time_start = microtime_float();\n\t$response = $client->ListSessions($listSessionsRequest);\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['list_sessions_latency_ms'] = $lantency;\n\n\t#Delete session\n\t$deleteSessionRequest = new Google\\Cloud\\Spanner\\V1\\DeleteSessionRequest();\n\t$deleteSessionRequest->setName($session->getName());\n\t$time_start = microtime_float();\n\t$client->deleteSession($deleteSessionRequest);\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['delete_session_latency_ms'] = $lantency;\n\n}\n\n/*\nProbes to test ExecuteSql and ExecuteStreamingSql call from Spanner stub.\n\n  Args:\n    stub: An object of SpannerStub.\n    metrics: A list of metrics.\n\n*/\nfunction executeSql($client, &$metrics){\n\tglobal $_DATABASE;\n\n\t$createSessionRequest = new Google\\Cloud\\Spanner\\V1\\CreateSessionRequest();\n\t$createSessionRequest->setDatabase($_DATABASE);\n\tlist($session, $status) = $client->CreateSession($createSessionRequest)->wait();\n\n\thardAssertIfStatusOk($status);\n\thardAssert($session !== null, 'Call completed with a null response');\n\n\t# Probing ExecuteSql call\n\t$time_start = microtime_float();\n\t$executeSqlRequest = new Google\\Cloud\\Spanner\\V1\\ExecuteSqlRequest();\n\t$executeSqlRequest->setSession($session->getName());\n\t$executeSqlRequest->setSql('select * FROM users');\n\t$result_set = $client->ExecuteSql($executeSqlRequest);\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['execute_sql_latency_ms'] = $lantency;\n\n\t// TODO: Error check result_set\n\n\t# Probing ExecuteStreamingSql call\n\t$partial_result_set = $client->ExecuteStreamingSql($executeSqlRequest);\n\n\t$time_start = microtime_float();\n\t$first_result = array_values($partial_result_set->getMetadata())[0];\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['execute_streaming_sql_latency_ms'] = $lantency;\n\n\t// TODO: Error Check for sreaming sql first result\n\n\t$deleteSessionRequest = new Google\\Cloud\\Spanner\\V1\\DeleteSessionRequest();\n\t$deleteSessionRequest->setName($session->getName());\n\t$client->deleteSession($deleteSessionRequest);\n}\n\n/*\nProbe to test Read and StreamingRead grpc call from Spanner stub.\n\n  Args:\n    stub: An object of SpannerStub.\n    metrics: A list of metrics.\n*/\n\nfunction read($client, &$metrics){\n\tglobal $_DATABASE;\n\n\t$createSessionRequest = new Google\\Cloud\\Spanner\\V1\\CreateSessionRequest();\n\t$createSessionRequest->setDatabase($_DATABASE);\n\tlist($session, $status) = $client->CreateSession($createSessionRequest)->wait();\n\n\thardAssertIfStatusOk($status);\n\thardAssert($session !== null, 'Call completed with a null response');\n\n\t# Probing Read call\n\t$time_start = microtime_float();\n\t$readRequest = new Google\\Cloud\\Spanner\\V1\\ReadRequest();\n\t$readRequest->setSession($session->getName());\n\t$readRequest->setTable('users');\n\t$readRequest->setColumns(['username', 'firstname', 'lastname']);\n\t$keyset = new Google\\Cloud\\Spanner\\V1\\KeySet();\n\t$keyset->setAll(True);\n\t$readRequest->setKeySet($keyset);\n\t$result_set = $client->Read($readRequest);\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['read_latency_ms'] = $lantency;\n\n\t// TODO: Error Check for result_set\n\n\t# Probing StreamingRead call\n\t$partial_result_set = $client->StreamingRead($readRequest);\n\t$time_start = microtime_float();\n\t$first_result = array_values($partial_result_set->getMetadata())[0];\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['streaming_read_latency_ms'] = $lantency;\n\n\t//TODO: Error Check for streaming read first result\n\n\t$deleteSessionRequest = new Google\\Cloud\\Spanner\\V1\\DeleteSessionRequest();\n\t$deleteSessionRequest->setName($session->getName());\n\t$client->deleteSession($deleteSessionRequest);\n}\n\n/*\nProbe to test BeginTransaction, Commit and Rollback grpc from Spanner stub.\n\n  Args:\n    stub: An object of SpannerStub.\n    metrics: A list of metrics.\n*/\n\nfunction transaction($client, &$metrics){\n\tglobal $_DATABASE;\n\n\t$createSessionRequest = new Google\\Cloud\\Spanner\\V1\\CreateSessionRequest();\n\t$createSessionRequest->setDatabase($_DATABASE);\n\tlist($session, $status) = $client->CreateSession($createSessionRequest)->wait();\n\n\thardAssertIfStatusOk($status);\n\thardAssert($session !== null, 'Call completed with a null response');\n\n\t$txn_options = new Google\\Cloud\\Spanner\\V1\\TransactionOptions();\n\t$rw = new Google\\Cloud\\Spanner\\V1\\TransactionOptions\\ReadWrite();\n\t$txn_options->setReadWrite($rw);\n\t$txn_request = new Google\\Cloud\\Spanner\\V1\\BeginTransactionRequest();\n\t$txn_request->setSession($session->getName());\n\t$txn_request->setOptions($txn_options);\n\n\t# Probing BeginTransaction call\n\t$time_start = microtime_float();\n\tlist($txn, $status) = $client->BeginTransaction($txn_request)->wait();\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['begin_transaction_latency_ms'] = $lantency;\n\n\thardAssertIfStatusOk($status);\n\thardAssert($txn !== null, 'Call completed with a null response');\n\n\t# Probing Commit Call\n\t$commit_request = new Google\\Cloud\\Spanner\\V1\\CommitRequest();\n\t$commit_request->setSession($session->getName());\n\t$commit_request->setTransactionId($txn->getId());\n\n\t$time_start = microtime_float();\n\t$client->Commit($commit_request);\n\t$latency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['commit_latency_ms'] = $lantency;\n\n\t# Probing Rollback call\n\tlist($txn, $status) = $client->BeginTransaction($txn_request)->wait();\n\t$rollback_request = new Google\\Cloud\\Spanner\\V1\\RollbackRequest();\n\t$rollback_request->setSession($session->getName());\n\t$rollback_request->setTransactionId($txn->getId());\n\n\thardAssertIfStatusOk($status);\n\thardAssert($txn !== null, 'Call completed with a null response');\n\n\t$time_start = microtime_float();\n\t$client->Rollback($rollback_request);\n\t$latency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['rollback_latency_ms'] = $latency;\n\n\t$deleteSessionRequest = new Google\\Cloud\\Spanner\\V1\\DeleteSessionRequest();\n\t$deleteSessionRequest->setName($session->getName());\n\t$client->deleteSession($deleteSessionRequest);\n}\n\n/*\nProbe to test PartitionQuery and PartitionRead grpc call from Spanner stub.\n\n  Args:\n    stub: An object of SpannerStub.\n    metrics: A list of metrics.\n*/\n\nfunction partition($client, &$metrics){\n\tglobal $_DATABASE;\n\tglobal $_TEST_USERNAME;\n\n\t$createSessionRequest = new Google\\Cloud\\Spanner\\V1\\CreateSessionRequest();\n\t$createSessionRequest->setDatabase($_DATABASE);\n\tlist($session, $status) = $client->CreateSession($createSessionRequest)->wait();\n\n\thardAssertIfStatusOk($status);\n\thardAssert($session !== null, 'Call completed with a null response');\n\n\t$txn_options = new Google\\Cloud\\Spanner\\V1\\TransactionOptions();\n\t$ro = new Google\\Cloud\\Spanner\\V1\\TransactionOptions\\PBReadOnly();\n\t$txn_options->setReadOnly($ro);\n\t$txn_selector = new Google\\Cloud\\Spanner\\V1\\TransactionSelector();\n\t$txn_selector->setBegin($txn_options);\n\n\t#Probing PartitionQuery call\n\t$ptn_query_request = new Google\\Cloud\\Spanner\\V1\\PartitionQueryRequest();\n\t$ptn_query_request->setSession($session->getName());\n\t$ptn_query_request->setSql('select * FROM users');\n\t$ptn_query_request->setTransaction($txn_selector);\n\n\t$time_start = microtime_float();\n\t$client->PartitionQuery($ptn_query_request);\n\t$lantency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['partition_query_latency_ms'] = $lantency;\n\n\t#Probing PartitionRead call\n\t$ptn_read_request = new Google\\Cloud\\Spanner\\V1\\PartitionReadRequest();\n\t$ptn_read_request->setSession($session->getName());\n\t$ptn_read_request->setTable('users');\n\t$ptn_read_request->setTransaction($txn_selector);\n\t$keyset = new Google\\Cloud\\Spanner\\V1\\KeySet();\n\t$keyset->setAll(True);\n\t$ptn_read_request->setKeySet($keyset);\n\t$ptn_read_request->setColumns(['username', 'firstname', 'lastname']);\n\n\t$time_start = microtime_float();\n\t$client->PartitionRead($ptn_read_request);\n\t$latency =  (microtime_float() - $time_start) * 1000;\n\t$metrics['partition_read_latency_ms'] = $latency;\n\n\t# Delete Session\n\t$deleteSessionRequest = new Google\\Cloud\\Spanner\\V1\\DeleteSessionRequest();\n\t$deleteSessionRequest->setName($session->getName());\n\t$client->deleteSession($deleteSessionRequest);\n}\n\n$PROBE_FUNCTIONS = [\n\t'session_management' => 'sessionManagement',\n\t'execute_sql' => 'executeSql',\n\t'read' => 'read',\n\t'transaction' => 'transaction',\n\t'partition' => 'partition'\n];\n\nreturn $PROBE_FUNCTIONS;\n\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/cloudprober/grpc_gpc_prober/stackdriver_util.php",
    "content": "<?php\n\nrequire('../vendor/autoload.php');\n\nuse Google\\Cloud\\ErrorReporting\\V1beta1\\ReportErrorsServiceClient;\nuse Google\\Cloud\\ErrorReporting\\V1beta1\\ErrorContext;\nuse Google\\Cloud\\ErrorReporting\\V1beta1\\ReportedErrorEvent;\nuse Google\\Cloud\\ErrorReporting\\V1beta1\\SourceLocation;\n\nclass StackdriverUtil{\n\tprotected $api;\n\tprotected $metrics;\n\tprotected $success;\n\tprotected $err_client;\n\n\tfunction __construct($api){\n\t\t$this->api = $api;\n\t\t$this->metrics = [];\n\t\t$this->success = FALSE;\n\t\t$this->err_client = new ReportErrorsServiceClient();\n\t}\n\n\tfunction addMetric($key, $value){\n\t\t$this->matrics[$key] = $value;\n\t}\n\n\tfunction addMetrics($metrics){\n\t\t$this->metrics = array_merge($metrics, $this->metrics);\n\t}\n\n\tfunction setSuccess($result){\n\t\t$this->success = $result;\n\t}\n\n\tfunction outputMetrics(){\n\t\tif ($this->success){\n\t\t\techo $this->api.'_success 1'.\"\\n\";\n\t\t}\n\t\telse{\n\t\t\techo $this->api.'_success 0'.\"\\n\";\n\t\t}\n\t\tforeach ($this->metrics as $key => $value) {\n\t\t\techo $key.' '.$value.\"\\n\";\n\t\t}\n\t}\n\n\tfunction reportError($err){\n\t\terror_log($err);\n\t\t$projectId = '434076015357';\n\t\t$project_name = $this->err_client->projectName($projectId);\n\n\t\t$location = (new SourceLocation())\n    \t\t->setFunctionName($this->api);\n\t\t$context = (new ErrorContext())\n    \t\t->setReportLocation($location);\n\n\t\t$error_event = new ReportedErrorEvent();\n\t\t$error_event->setMessage('PHPProbeFailure: fails on '.$this->api.' API. Details: '.(string)$err.\"\\n\");\n\t\t$error_event->setContext($context);\n\n\t\t$this->err_client->reportErrorEvent($project_name, $error_event);\n\t}\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/composer.json",
    "content": "{\n    \"name\": \"google/grpc-gcp\",\n    \"description\": \"gRPC GCP library for channel management\",\n    \"license\": \"Apache-2.0\",\n    \"require\": {\n        \"php\": \"^8.0\",\n        \"google/protobuf\": \"^v3.25.3||^4.26.1\",\n        \"grpc/grpc\": \"^v1.13.0\",\n        \"google/auth\": \"^1.3\",\n        \"psr/cache\": \"^1.0.1||^2.0.0||^3.0.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^9.0\",\n        \"google/cloud-spanner\": \"^1.7\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Grpc\\\\Gcp\\\\\": \"src/\"\n        },\n        \"classmap\": [\n            \"src/generated/\"\n        ]\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/doc/gRPC-client-user-guide.md",
    "content": "# Instructions for create a gRPC client for google cloud services\n\n## Overview\n\nThis instruction includes a step by step guide for creating a gRPC \nclient to test the google cloud service from an empty linux \nVM, using GCE ubuntu 16.04 TLS instance.\n\nThe main steps are followed as steps below: \n\n- Environment prerequisite\n- Install protobuf plugin and gRPC-PHP/protobuf extension\n- Generate client API from .proto files\n- Create the client and send/receive RPC.\n\n## Environment Prerequisite\n\n**Linux**\n```sh\n$ [sudo] apt-get install build-essential autoconf libtool pkg-config zip unzip zlib1g-dev\n```\n**PHP**\n* `php` 5.5 or above, 7.0 or above\n* `pecl`\n* `composer`\n```sh\n$ [sudo] apt-get install php php-dev\n$ curl -sS https://getcomposer.org/installer | php\n$ [sudo] mv composer.phar /usr/local/bin/composer\n```\n\n## Install protobuf plugin and gRPC-PHP/protobuf extension\n`grpc_php_plugin` is used to generate client API from `*.proto `files. Currently,\nThe only way to install `grpc_php_plugin` is to build from the gRPC source.\n\n**Install protobuf, gRPC, which will install the plugin**\n```sh\n$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc\n$ cd grpc\n$ git submodule update --init\n# install protobuf\n$ cd third_party/protobuf\n$ ./autogen.sh && ./configure && make -j8\n$ [sudo] make install\n$ [sudo] ldconfig\n# install gRPC\n$ cd ../..\n$ make -j8\n$ [sudo] make install\n```\nIt will generate `grpc_php_plugin` under `/usr/local/bin`.\n\n\n**Install gRPC-PHP extension**\n```sh\n$ [sudo] pecl install protobuf\n$ [sudo] pecl install grpc\n```\nIt will generate `protobuf.so` and `grpc.so` under PHP's extension directory.\nNote gRPC-PHP extension installed by pecl doesn't work on RHEL6 system.\n\n## Generate client API from .proto files \nThe common way to generate the client API is to use `grpc_php_plugin` directly.\nSince the plugin won't find the dependency by itself. It works if all your\nservice proto files and dependent proto files are inside one directory. The \ncommand looks like:\n```sh\n$ mkdir $HOME/project\n$ protoc --proto_path=./ --php_out=$HOME/project \\  \n--grpc_out=$HOME/project \\\n--plugin=protoc-gen-grpc=./bins/opt/grpc_php_plugin \\\npath/to/your/proto_dependency_directory1/*.proto \\\npath/to/your/proto_dependency_directory2/*.proto \\\npath/to/your/proto_directory/*.proto\n\n```\n\nTake `Firestore` service under [googleapis github repo](https://github.com/googleapis/googleapis)\nfor example. The proto files required for generating client API are\n```\ngoogle/api/annotations.proto\ngoogle/api/http.proto\ngoogle/api/httpbody.proto\ngoogle/longrunning/operations.proto\ngoogle/rpc/code.proto\ngoogle/rpc/error_details.proto\ngoogle/rpc/status.proto\ngoogle/type/latlng.proto\ngoogle/firestore/v1beta1/firestore.proto\ngoogle/firestore/v1beta1/common.proto\ngoogle/firestore/v1beta1/query.proto\ngoogle/firestore/v1beta1/write.proto\ngoogle/firestore/v1beta1/document.proto\n```\nThus the command looks like:\n```sh\n$ protoc --proto_path=googleapis --plugin=protoc-gen-grpc=`which grpc_php_plugin` \\\n--php_out=./ --grpc_out=./ google/api/annotations.proto google/api/http.proto \\\ngoogle/api/httpbody.proto google/longrunning/operations.proto google/rpc/code.proto \\\ngoogle/rpc/error_details.proto google/rpc/status.proto google/type/latlng.proto \\\ngoogle/firestore/v1beta1/firestore.proto google/firestore/v1beta1/common.proto \\\ngoogle/firestore/v1beta1/query.proto google/firestore/v1beta1/write.proto \\\ngoogle/firestore/v1beta1/document.proto\n```\n\nSince most of cloud services already publish proto files under \n[googleapis github repo](https://github.com/googleapis/googleapis),\nyou can use it's Makefile to generate the client API.\nThe `Makefile` will help you generate the client API as\nwell as find the dependencies. The command will simply be:\n```sh\n$ cd $HOME\n$ mkdir project\n$ git clone https://github.com/googleapis/googleapis.git\n$ cd googleapis\n$ make LANGUAGE=php OUTPUT=$HOME/project\n# (It's okay if you see error like Please add 'syntax = \"proto3\";' \n# to the top of your .proto file.)\n```\nThe client API library is generated under `$HOME/project`.\nTake [`Firestore`](https://github.com/googleapis/googleapis/blob/master/google/firestore/v1beta1/firestore.proto)\nas example, the Client API is under \n`project/Google/Cloud/Firestore/V1beta1/FirestoreClient.php` depends on your \npackage name inside .proto file. An easy way to find your client is \n```sh\n$ find ./ -name [service_name]Client.php\n```\n\n## Create the client and send/receive RPC.\nNow it's time to use the client API to send and receive RPCs.\n```sh\n$ cd $HOME/project\n```\n**Install gRPC-PHP composer library**\n```sh\n$ vim composer.json\n######## you need to change the path and service namespace.\n{\n    \"require\": {\n        \"google/cloud\": \"^0.52.1\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"FireStore\\\\\": \"src/\",\n            \"Google\\\\Cloud\\\\Firestore\\\\V1beta1\\\\\": \"Google/Cloud/Firestore/V1beta1/\"\n        }\n    }\n}\n########\n$ composer install\n```\n**Set credentials file**\n``` sh\n$ vim $HOME/key.json\n## Paste you credential file downloaded from your cloud project\n## which you can find in APIs&Services => credentials => create credentials\n## => Service account key => your credentials\n$ export GOOGLE_APPLICATION_CREDENTIALS=$HOME/key.json\n```\n\n**Implement Service Client**\nTake a unary-unary RPC `listDocument` from `FirestoreClient` as example.\nCreate a file name `ListDocumentClient.php`.\n- import library\n```\nrequire_once __DIR__ . '/vendor/autoload.php';\nuse Google\\Cloud\\Firestore\\V1beta1\\FirestoreClient;\nuse Google\\Cloud\\Firestore\\V1beta1\\ListDocumentsRequest;\nuse Google\\Auth\\ApplicationDefaultCredentials;\n```\n- Google Auth\n```\n$host = \"firestore.googleapis.com\";\n$credentials = \\Grpc\\ChannelCredentials::createSsl();\n// WARNING: the environment variable \"GOOGLE_APPLICATION_CREDENTIALS\" needs to be set\n$auth = ApplicationDefaultCredentials::getCredentials();\n$opts = [\n    'credentials' => $credentials,\n    'update_metadata' => $auth->getUpdateMetadataFunc(),\n]\n```\n- Create Client\n```\n$firestoreClient = new FirestoreClient($host, $opts);\n```\n- Make and receive RPC call\n```\n$argument = new ListDocumentsRequest();\n$project_id = xxxxxxx;\n$argument->setParent(\"projects/$project_id/databases/(default)/documents\");\nlist($Response, $error) = $firestoreClient->ListDocuments($argument)->wait();\n```\n- print RPC response\n```\n$documents = $Response->getDocuments();\n$index = 0;\nforeach($documents as $document) {\n        $index++;\n        $name = $document->getName();\n        echo \"=> Document $index: $name\\n\";\n        $fields = $document->getFields();\n        foreach ($fields as $name => $value) {\n                echo \"$name => \".$value->getStringValue().\"\\n\";\n        }\n}\n```\n\n- run the script\n```sh\n$ php -d extension=grpc.so -d extension=protobuf.so ListDocumentClient.php\n```\n\nFor different kinds of RPC(unary-unary, unary-stream, stream-unary, stream-stream),\nplease check [grpc.io PHP part](https://grpc.io/docs/tutorials/basic/php.html#calling-service-methods)\nfor reference.\n\n\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/ChannelRef.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * ChannelRef is used to record how many active streams the channel has.\n * This is a private class\n */\nclass ChannelRef\n{\n    // $opts has all information except Credentials for creating a Grpc\\Channel.\n    private $opts;\n\n    private $channel_id;\n    private $affinity_ref;\n    private $active_stream_ref;\n    private $target;\n\n    private $has_deserialized;\n    private $real_channel;\n\n    public function __construct($target, $channel_id, $opts, $affinity_ref=0, $active_stream_ref=0)\n    {\n        $this->target = $target;\n        $this->channel_id = $channel_id;\n        $this->affinity_ref = $affinity_ref;\n        $this->active_stream_ref = $active_stream_ref;\n        $this->opts = $opts;\n        $this->has_deserialized = new CreatedByDeserializeCheck();\n    }\n\n    public function getRealChannel($credentials)\n    {\n        // TODO(ddyihai): remove this check once the serialize handler for\n        // \\Grpc\\Channel is implemented(issue https://github.com/grpc/grpc/issues/15870).\n        if (!$this->has_deserialized->getData()) {\n            // $real_channel exists and is not created by the deserialization.\n            return $this->real_channel;\n        }\n        // If this ChannelRef is created by deserialization, $real_channel is invalid\n        // thus needs to be recreated becasue Grpc\\Channel don't have serialize and\n        // deserialize handler.\n        // Since [target + augments + credentials] will be the same during the recreation,\n        // it will reuse the underline grpc channel in C extension without creating a\n        // new connection.\n\n        // 'credentials' in the array $opts will be unset during creating the channel.\n        if (!array_key_exists('credentials', $this->opts)) {\n            $this->opts['credentials'] = $credentials;\n        }\n        $real_channel = new \\Grpc\\Channel($this->target, $this->opts);\n        $this->real_channel = $real_channel;\n        // Set deserialization to false so it won't be recreated within the same script.\n        $this->has_deserialized->setData(0);\n        return $real_channel;\n    }\n\n    public function getAffinityRef()\n    {\n        return $this->affinity_ref;\n    }\n    public function getActiveStreamRef()\n    {\n        return $this->active_stream_ref;\n    }\n    public function affinityRefIncr()\n    {\n        $this->affinity_ref += 1;\n    }\n    public function affinityRefDecr()\n    {\n        $this->affinity_ref -= 1;\n    }\n    public function activeStreamRefIncr()\n    {\n        $this->active_stream_ref += 1;\n    }\n    public function activeStreamRefDecr()\n    {\n        $this->active_stream_ref -= 1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/Config.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\nuse Psr\\Cache\\CacheItemPoolInterface;\n\n/**\n * Config is used to enable the support for the channel management.\n */\nclass Config\n{\n    private $hostname;\n    private $gcp_call_invoker;\n    private $cross_script_shmem_enabled;\n    private $supported_sapis = ['fpm-fcgi', 'cli-server'];\n\n    /**\n     * @param string  $target The target API we want to manage the connection.\n     * @param \\Grpc\\Gcp\\ApiConfig   $conf\n     * @param CacheItemPoolInterface $cacheItemPool A pool for storing configuration and channels\n     *                                            cross requests within a single worker process.\n     * @throws \\RuntimeException When a failure occurs while attempting to attach to shared memory.\n     */\n    public function __construct($target, $conf = null, ?CacheItemPoolInterface $cacheItemPool = null)\n    {\n        if ($conf == null) {\n            // If there is no configure file, use the default gRPC channel.\n            $this->gcp_call_invoker = new \\Grpc\\DefaultCallInvoker();\n            return;\n        }\n\n        $gcp_channel = null;\n        $url_host = parse_url($target, PHP_URL_HOST);\n        $this->hostname = $url_host ? $url_host : $target;\n        $channel_pool_key = $this->hostname . '.gcp.channel.' . getmypid();\n\n        if (!$cacheItemPool) {\n            $affinity_conf = $this->parseConfObject($conf);\n            $gcp_call_invoker = new GCPCallInvoker($affinity_conf);\n            $this->gcp_call_invoker = $gcp_call_invoker;\n        } else {\n            $item = $cacheItemPool->getItem($channel_pool_key);\n            if ($item->isHit()) {\n                // Channel pool for the $hostname API has already created.\n                $gcp_call_invoker = unserialize($item->get());\n            } else {\n                $affinity_conf = $this->parseConfObject($conf);\n                // Create GCP channel based on the information.\n                $gcp_call_invoker = new GCPCallInvoker($affinity_conf);\n            }\n            $this->gcp_call_invoker = $gcp_call_invoker;\n            register_shutdown_function(function ($gcp_call_invoker, $cacheItemPool, $item) {\n                // Push the current gcp_channel back into the pool when the script finishes.\n                $item->set(serialize($gcp_call_invoker));\n                $cacheItemPool->save($item);\n            }, $gcp_call_invoker, $cacheItemPool, $item);\n        }\n    }\n\n    /**\n     * @return \\Grpc\\CallInvoker The call invoker to be hooked into the gRPC\n     */\n    public function callInvoker()\n    {\n        return $this->gcp_call_invoker;\n    }\n\n    /**\n     * @return string The URI of the endpoint\n     */\n    public function getTarget()\n    {\n        return $this->channel->getTarget();\n    }\n\n    private function parseConfObject($conf_object)\n    {\n        $config = json_decode($conf_object->serializeToJsonString(), true);\n        if (isset($config['channelPool'])) {\n            $affinity_conf['channelPool'] = $config['channelPool'];\n        }\n        $aff_by_method = array();\n        if (isset($config['method'])) {\n            for ($i = 0; $i < count($config['method']); $i++) {\n                // In proto3, if the value is default, eg 0 for int, it won't be serialized.\n                // Thus serialized string may not have `command` if the value is default 0(BOUND).\n                if (!array_key_exists('command', $config['method'][$i]['affinity'])) {\n                    $config['method'][$i]['affinity']['command'] = 'BOUND';\n                }\n                $aff_by_method[$config['method'][$i]['name'][0]] = $config['method'][$i]['affinity'];\n            }\n        }\n        $affinity_conf['affinity_by_method'] = $aff_by_method;\n        return $affinity_conf;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/CreatedByDeserializeCheck.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * DeserializeCheck is used to check whether _ChannelRef is created by deserialization or not.\n * If it is, $real_channel is invalid thus we need to recreate it using $opts.\n * If not, we can use $real_channel directly instead of creating a new one.\n * It is useful to handle 'force_new' channel option.\n * This is a private class\n */\nclass CreatedByDeserializeCheck implements \\Serializable\n{\n    // TODO(ddyihai): remove it once the serialzer handler for \\Grpc\\Channel is implemented.\n    private $data;\n    public function __construct()\n    {\n        $this->data = 1;\n    }\n\n    /**\n     * @return string\n     */\n    public function serialize()\n    {\n        return '0';\n    }\n\n    /**\n     * @return string\n     */\n    public function __serialize()\n    {\n        return $this->serialize();\n    }\n\n    /**\n     * @param string $data\n     */\n    public function unserialize($data)\n    {\n        $this->data = 1;\n    }\n\n    /**\n     * @param string $data\n     */\n    public function __unserialize($data)\n    {\n       $this->unserialize($data);\n    }\n\n    /**\n     * @param $data\n     */\n    public function setData($data)\n    {\n        $this->data = $data;\n    }\n\n    /**\n     * @return int\n     */\n    public function getData()\n    {\n        return $this->data;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GCPBidiStreamingCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * Represents an active call that allows for sending and recieving messages\n * in streams in any order.\n */\nclass GCPBidiStreamingCall extends GcpBaseCall\n{\n    private $response = null;\n\n    protected function createRealCall($data = null)\n    {\n        $channel_ref = $this->_rpcPreProcess($data);\n        $this->real_call = new \\Grpc\\BidiStreamingCall($channel_ref->getRealChannel(\n            $this->gcp_channel->credentials), $this->method, $this->deserialize, $this->options);\n        $this->real_call->start($this->metadata_rpc);\n        return $this->real_call;\n    }\n\n    /**\n     * Pick a channel and start the call.\n     *\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     */\n    public function start(array $metadata = [])\n    {\n        $this->metadata_rpc = $metadata;\n    }\n\n    /**\n     * Reads the next value from the server.\n     *\n     * @return mixed The next value from the server, or null if there is none\n     */\n    public function read()\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall();\n            $this->has_real_call = true;\n        }\n        $response = $this->real_call->read();\n        if ($response) {\n            $this->response = $response;\n        }\n        return $response;\n    }\n\n    /**\n     * Write a single message to the server. This cannot be called after\n     * writesDone is called.\n     *\n     * @param ByteBuffer $data    The data to write\n     * @param array      $options An array of options, possible keys:\n     *                            'flags' => a number (optional)\n     */\n    public function write($data, array $options = [])\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall($data);\n            $this->has_real_call = true;\n        }\n        $this->real_call->write($data, $options);\n    }\n\n    /**\n     * Indicate that no more writes will be sent.\n     */\n    public function writesDone()\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall();\n            $this->has_real_call = true;\n        }\n        $this->real_call->writesDone();\n    }\n\n    /**\n     * Wait for the server to send the status, and return it.\n     *\n     * @return \\stdClass The status object, with integer $code, string\n     *                   $details, and array $metadata members\n     */\n    public function getStatus()\n    {\n        $status = $this->real_call->getStatus();\n        $this->_rpcPostProcess($status, $this->response);\n        return $status;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GCPCallInvoker.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * GCPCallInvoker updates the channel pool(GcpExtensionChannel) for\n * each RPC. The idea is:\n * Before the RPC starts, pick a channel from the channel pool:\n *   - if the RPC is bound to a channel, use that channel.\n *   - if the RPC doesn't bound to a channel, use the one with minimum active streams.\n * After the RPC finishes, update the active stream ref count.\n *   - if the RPC is defined as bind, bind the channel with corresponding key like\n *     spanner session name.\n *   - if the RPC is defined as unbind, unbind the channel with the key.\n */\nclass GCPCallInvoker implements \\Grpc\\CallInvoker\n{\n    private $channel;\n    private $affinity_conf;\n\n    /**\n     * @param array  $affinity_conf Store the affinity config for process each RPC.\n     */\n    public function __construct($affinity_conf)\n    {\n        $this->affinity_conf = $affinity_conf;\n    }\n\n    /**\n     * @param string  $hostname\n     * @param array  $opts\n     * @return GcpExtensionChannel\n     */\n    public function createChannelFactory($hostname, $opts)\n    {\n        if ($this->channel) {\n            // $call_invoker object has already created from previews PHP-FPM scripts.\n            // Only need to update the $opts including the credentials.\n            $this->channel->updateOpts($opts);\n        } else {\n            $opts['affinity_conf'] = $this->affinity_conf;\n            $channel = new GcpExtensionChannel($hostname, $opts);\n            $this->channel = $channel;\n        }\n        return $this->channel;\n    }\n\n    // _getChannel is used for testing only.\n    public function GetChannel()\n    {\n        return $this->channel;\n    }\n\n    public function UnaryCall($channel, $method, $deserialize, $options)\n    {\n        return new GCPUnaryCall($channel, $method, $deserialize, $options);\n    }\n    public function ClientStreamingCall($channel, $method, $deserialize, $options)\n    {\n        return new GCPClientStreamCall($channel, $method, $deserialize, $options);\n    }\n    public function ServerStreamingCall($channel, $method, $deserialize, $options)\n    {\n        return new GCPServerStreamCall($channel, $method, $deserialize, $options);\n    }\n    public function BidiStreamingCall($channel, $method, $deserialize, $options)\n    {\n        return new GCPBidiStreamingCall($channel, $method, $deserialize, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GCPClientStreamCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * Represents an active call that sends a stream of messages and then gets\n * a single response.\n */\nclass GCPClientStreamCall extends GcpBaseCall\n{\n    protected function createRealCall($data = null)\n    {\n        $channel_ref = $this->_rpcPreProcess($data);\n        $this->real_call = new \\Grpc\\ClientStreamingCall($channel_ref->getRealChannel(\n          $this->gcp_channel->credentials), $this->method, $this->deserialize, $this->options);\n        $this->real_call->start($this->metadata_rpc);\n        return $this->real_call;\n    }\n    /**\n     * Pick a channel and start the call.\n     *\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     */\n    public function start(array $metadata = [])\n    {\n        // Postpone first rpc to write function(), where we can pick a channel\n        // from the channel pool.\n        $this->metadata_rpc = $metadata;\n    }\n\n    /**\n     * Write a single message to the server. This cannot be called after\n     * wait is called.\n     *\n     * @param ByteBuffer $data    The data to write\n     * @param array      $options An array of options, possible keys:\n     *                            'flags' => a number (optional)\n     */\n    public function write($data, array $options = [])\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall($data);\n            $this->has_real_call = true;\n        }\n        $this->real_call->write($data, $options);\n    }\n\n    /**\n     * Wait for the server to respond with data and a status.\n     *\n     * @return array [response data, status]\n     */\n    public function wait()\n    {\n        list($response, $status) = $this->real_call->wait();\n        $this->_rpcPostProcess($status, $response);\n        return [$response, $status];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GCPServerStreamCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * Represents an active call that sends a single message and then gets a\n * stream of responses.\n */\nclass GCPServerStreamCall extends GcpBaseCall\n{\n    private $response = null;\n\n    protected function createRealCall($channel)\n    {\n        $this->real_call = new \\Grpc\\ServerStreamingCall($channel, $this->method, $this->deserialize, $this->options);\n        $this->has_real_call = true;\n        return $this->real_call;\n    }\n\n    /**\n     * Pick a channel and start the call.\n     *\n     * @param mixed $data     The data to send\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     * @param array $options  An array of options, possible keys:\n     *                        'flags' => a number (optional)\n     */\n    public function start($argument, $metadata, $options)\n    {\n        $channel_ref = $this->_rpcPreProcess($argument);\n        $this->createRealCall($channel_ref->getRealChannel(\n            $this->gcp_channel->credentials));\n        $this->real_call->start($argument, $metadata, $options);\n    }\n\n    /**\n     * @return mixed An iterator of response values\n     */\n    public function responses()\n    {\n        $response = $this->real_call->responses();\n        // Since the last response is empty for the server streaming RPC,\n        // the second last one is the last RPC response with payload.\n        // Use this one for searching the affinity key.\n        // The same as BidiStreaming.\n        if ($response) {\n            $this->response = $response;\n        }\n        return $response;\n    }\n\n    /**\n     * Wait for the server to send the status, and return it.\n     *\n     * @return \\stdClass The status object, with integer $code, string\n     *                   $details, and array $metadata members\n     */\n    public function getStatus()\n    {\n        $status = $this->real_call->getStatus();\n        $this->_rpcPostProcess($status, $this->response);\n        return $status;\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        return $this->real_call->getMetadata();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GCPUnaryCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * Represents an active call that sends a single message and then gets a\n * single response.\n */\nclass GCPUnaryCall extends GcpBaseCall\n{\n    protected function createRealCall($channel)\n    {\n        $this->real_call = new \\Grpc\\UnaryCall($channel, $this->method, $this->deserialize, $this->options);\n        $this->has_real_call = true;\n        return $this->real_call;\n    }\n\n    /**\n     * Pick a channel and start the call.\n     *\n     * @param mixed $data     The data to send\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     * @param array $options  An array of options, possible keys:\n     *                        'flags' => a number (optional)\n     */\n    public function start($argument, $metadata, $options)\n    {\n        $channel_ref = $this->_rpcPreProcess($argument);\n        $real_channel = $channel_ref->getRealChannel($this->gcp_channel->credentials);\n        $this->createRealCall($real_channel);\n        $this->real_call->start($argument, $metadata, $options);\n    }\n\n    /**\n     * Wait for the server to respond with data and a status.\n     *\n     * @return array [response data, status]\n     */\n    public function wait()\n    {\n        list($response, $status) = $this->real_call->wait();\n        $this->_rpcPostProcess($status, $response);\n        return [$response, $status];\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        return $this->real_call->getMetadata();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GcpBaseCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\nabstract class GcpBaseCall\n{\n    const BOUND = 'BOUND';\n    const UNBIND = 'UNBIND';\n    const BIND = 'BIND';\n\n\n    protected $gcp_channel;\n    // It has the Grpc\\Channel and related ref_count information for this RPC.\n    protected $channel_ref;\n    // If this RPC is 'UNBIND', use it instead of the one from response.\n    protected $affinity_key;\n    // Array of [affinity_key, command]\n    protected $_affinity;\n\n    // Information needed to create Grpc\\Call object when the RPC starts.\n    protected $method;\n    protected $argument;\n    protected $metadata;\n    protected $options;\n    protected $deserialize;\n\n    // In GCP extension, it is when a RPC calls \"start\", we pick a channel.\n    // Thus we need to save the $me\n    protected $metadata_rpc = array();\n    // first_rpc is used to check whether the first request is sent for client\n    // streaming RPC.\n    protected $has_real_call = null;\n\n    protected $real_call;\n\n    /**\n     * Create a new Call wrapper object.\n     *\n     * @param Channel  $channel     The channel to communicate on\n     * @param string   $method      The method to call on the\n     *                              remote server\n     * @param callback $deserialize A callback function to deserialize\n     *                              the response\n     * @param array    $options     Call options (optional)\n     */\n    public function __construct($channel, $method, $deserialize, $options)\n    {\n        $this->gcp_channel = $channel;\n        $this->method = $method;\n        $this->deserialize = $deserialize;\n        $this->options = $options;\n        $this->_affinity = null;\n\n        if (isset($this->gcp_channel->affinity_conf['affinity_by_method'][$method])) {\n            $this->_affinity = $this->gcp_channel->affinity_conf['affinity_by_method'][$method];\n        }\n    }\n\n    /**\n     * Pick a ChannelRef from the channel pool based on the request and\n     * the affinity config.\n     *\n     * @param mixed $argument Requests.\n     *\n     * @return ChannelRef\n     */\n    protected function _rpcPreProcess($argument)\n    {\n        $this->affinity_key = null;\n        if ($this->_affinity) {\n            $command = $this->_affinity['command'];\n            if ($command == self::BOUND || $command == self::UNBIND) {\n                $this->affinity_key = $this->getAffinityKeyFromProto($argument);\n            }\n        }\n        $this->channel_ref = $this->gcp_channel->getChannelRef($this->affinity_key);\n        $this->channel_ref->activeStreamRefIncr();\n        return $this->channel_ref;\n    }\n\n    /**\n     * Update ChannelRef when RPC finishes.\n     *\n     * @param \\stdClass $status The status object, with integer $code, string\n     *                   $details, and array $metadata members\n     * @param mixed $response Response.\n     */\n    protected function _rpcPostProcess($status, $response)\n    {\n        if ($this->_affinity) {\n            $command = $this->_affinity['command'];\n            if ($command == self::BIND) {\n                if ($status->code != \\Grpc\\STATUS_OK) {\n                    return;\n                }\n                $affinity_key = $this->getAffinityKeyFromProto($response);\n                $this->gcp_channel->bind($this->channel_ref, $affinity_key);\n            } elseif ($command == self::UNBIND) {\n                $this->gcp_channel->unbind($this->affinity_key);\n            }\n        }\n        $this->channel_ref->activeStreamRefDecr();\n    }\n\n    /**\n     * Get the affinity key based on the affinity config.\n     *\n     * @param mixed $proto Objects may contain the affinity key.\n     *\n     * @return string Affinity key.\n     */\n    protected function getAffinityKeyFromProto($proto)\n    {\n        if ($this->_affinity) {\n            $names = $this->_affinity['affinityKey'];\n            $names_arr = explode(\".\", $names);\n            foreach ($names_arr as $name) {\n                $getAttrMethod = 'get' . ucfirst($name);\n                $proto = call_user_func_array(array($proto, $getAttrMethod), array());\n            }\n            return $proto;\n        }\n        echo \"Cannot find the field in the proto\\n\";\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall();\n            $this->has_real_call = true;\n        }\n        return $this->real_call->getMetadata();\n    }\n\n    /**\n     * @return mixed The trailing metadata sent by the server\n     */\n    public function getTrailingMetadata()\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall();\n            $this->has_real_call = true;\n        }\n        return $this->real_call->getTrailingMetadata();\n    }\n\n    /**\n     * @return string The URI of the endpoint\n     */\n    public function getPeer()\n    {\n        if (!$this->has_real_call) {\n            $this->createRealCall();\n            $this->has_real_call = true;\n        }\n        return $this->real_call->getPeer();\n    }\n\n    /**\n     * Cancels the call.\n     */\n    public function cancel()\n    {\n        if (!$this->has_real_call) {\n            $this->has_real_call = true;\n            $this->createRealCall();\n        }\n        $this->real_call->cancel();\n    }\n\n    /**\n     * Serialize a message to the protobuf binary format.\n     *\n     * @param mixed $data The Protobuf message\n     *\n     * @return string The protobuf binary format\n     */\n    protected function _serializeMessage($data)\n    {\n        return $this->real_call->_serializeMessage($data);\n    }\n\n    /**\n     * Deserialize a response value to an object.\n     *\n     * @param string $value The binary value to deserialize\n     *\n     * @return mixed The deserialized value\n     */\n    protected function _deserializeResponse($value)\n    {\n        return $this->real_call->_deserializeResponse($value);\n    }\n\n    /**\n     * Set the CallCredentials for the underlying Call.\n     *\n     * @param CallCredentials $call_credentials The CallCredentials object\n     */\n    public function setCallCredentials($call_credentials)\n    {\n        $this->call->setCredentials($call_credentials);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/GcpExtensionChannel.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc\\Gcp;\n\n/**\n * GcpExtensionChannel maintains an array of channels for certain API.\n */\nclass GcpExtensionChannel\n{\n    public $max_size;\n    public $max_concurrent_streams_low_watermark;\n    public $target;\n    public $options;\n    public $affinity_by_method;\n    public $affinity_key_to_channel_ref;\n    public $channel_refs;\n    public $credentials;\n    public $affinity_conf;\n\n    private $is_closed;\n\n    /**\n     * @return array An array of ChannelRefs created for certain API.\n     */\n    public function getChannelRefs()\n    {\n        return $this->channel_refs;\n    }\n\n    /**\n     * @param string $hostname\n     * @param array $opts Options to create a \\Grpc\\Channel and affinity config\n     */\n    public function __construct($hostname = null, $opts = array())\n    {\n        if ($hostname == null || !is_array($opts)) {\n            throw new \\InvalidArgumentException(\"Expected hostname is empty\");\n        }\n        $this->max_size = 10;\n        $this->max_concurrent_streams_low_watermark = 100;\n        if (isset($opts['affinity_conf'])) {\n            if (isset($opts['affinity_conf']['channelPool'])) {\n                if (isset($opts['affinity_conf']['channelPool']['maxSize'])) {\n                    $this->max_size = $opts['affinity_conf']['channelPool']['maxSize'];\n                }\n                if (isset($opts['affinity_conf']['channelPool']['maxConcurrentStreamsLowWatermark'])) {\n                    $this->max_concurrent_streams_low_watermark =\n                        $opts['affinity_conf']['channelPool']['maxConcurrentStreamsLowWatermark'];\n                }\n            }\n            $this->affinity_by_method = $opts['affinity_conf']['affinity_by_method'];\n            $this->affinity_conf = $opts['affinity_conf'];\n        }\n        $this->target = $hostname;\n        $this->affinity_key_to_channel_ref = array();\n        $this->channel_refs = array();\n        $this->updateOpts($opts);\n        // Initiate a Grpc\\Channel at the beginning in order to keep the same\n        // behavior as the Grpc.\n        $channel_ref = $this->getChannelRef();\n        $channel_ref->getRealChannel($this->credentials);\n    }\n\n    /**\n     * @param array $opts Options to create a \\Grpc\\Channel\n     */\n    public function updateOpts($opts)\n    {\n        if (isset($opts['credentials'])) {\n            $this->credentials = $opts['credentials'];\n        }\n        unset($opts['affinity_conf']);\n        unset($opts['credentials']);\n        $this->options = $opts;\n        $this->is_closed = false;\n    }\n\n    /**\n     * Bind the ChannelRef with the affinity key. This is a private method.\n     *\n     * @param ChannelRef $channel_ref\n     * @param string $affinity_key\n     *\n     * @return ChannelRef\n     */\n    public function bind($channel_ref, $affinity_key)\n    {\n        if (!array_key_exists($affinity_key, $this->affinity_key_to_channel_ref)) {\n            $this->affinity_key_to_channel_ref[$affinity_key] = $channel_ref;\n        }\n        $channel_ref->affinityRefIncr();\n        return $channel_ref;\n    }\n\n    /**\n     * Unbind the affinity key. This is a private method.\n     *\n     * @param string $affinity_key\n     *\n     * @return ChannelRef\n     */\n    public function unbind($affinity_key)\n    {\n        $channel_ref = null;\n        if (array_key_exists($affinity_key, $this->affinity_key_to_channel_ref)) {\n            $channel_ref =  $this->affinity_key_to_channel_ref[$affinity_key];\n            $channel_ref->affinityRefDecr();\n        }\n        unset($this->affinity_key_to_channel_ref[$affinity_key]);\n        return $channel_ref;\n    }\n\n\n    public function cmp_by_active_stream_ref($a, $b)\n    {\n        return $a->getActiveStreamRef() - $b->getActiveStreamRef();\n    }\n\n    /**\n     * Pick or create a ChannelRef from the pool by affinity key.\n     *\n     * @param string $affinity_key\n     *\n     * @return ChannelRef\n     */\n    public function getChannelRef($affinity_key = null)\n    {\n        if ($affinity_key) {\n            if (array_key_exists($affinity_key, $this->affinity_key_to_channel_ref)) {\n                return $this->affinity_key_to_channel_ref[$affinity_key];\n            }\n            return $this->getChannelRef();\n        }\n        usort($this->channel_refs, array($this, 'cmp_by_active_stream_ref'));\n\n        if (count($this->channel_refs) > 0 && $this->channel_refs[0]->getActiveStreamRef() <\n            $this->max_concurrent_streams_low_watermark) {\n            return $this->channel_refs[0];\n        }\n        $num_channel_refs = count($this->channel_refs);\n        if ($num_channel_refs < $this->max_size) {\n            // grpc_target_persist_bound stands for how many channels can be persisted for\n            // the same target in the C extension. It is possible that the user use the pure\n            // gRPC and this GCP extension at the same time, which share the same target. In this case\n            // pure gRPC channel may occupy positions in C extension, which deletes some channels created\n            // by this GCP extension.\n            // If that happens, it won't cause the script failure because we saves all arguments for creating\n            // a channel instead of a channel itself. If we watch to fetch a GCP channel already deleted,\n            // it will create a new channel. The only cons is the latency of the first RPC will high because\n            // it will establish the connection again.\n            if (!isset($this->options['grpc_target_persist_bound']) ||\n                $this->options['grpc_target_persist_bound'] < $this->max_size) {\n                $this->options['grpc_target_persist_bound'] = $this->max_size;\n            }\n            $cur_opts = array_merge($this->options,\n                ['grpc_gcp_channel_id' => $num_channel_refs]);\n            $channel_ref = new ChannelRef($this->target, $num_channel_refs, $cur_opts);\n            array_unshift($this->channel_refs, $channel_ref);\n        }\n        return $this->channel_refs[0];\n    }\n\n    /**\n     * Get the connectivity state of the channel\n     *\n     * @param bool $try_to_connect try to connect on the channel\n     *\n     * @return int The grpc connectivity state\n     * @throws \\InvalidArgumentException\n     */\n    public function getConnectivityState($try_to_connect = false)\n    {\n        // Since getRealChannel is creating a PHP Channel object. However in gRPC, when a Channel\n        // object is closed, we only mark this Object to be invalid. Thus, we need a global variable\n        // to mark whether this GCPExtensionChannel is close or not.\n        if ($this->is_closed) {\n            throw new \\RuntimeException(\"Channel has already been closed\");\n        }\n        $ready = 0;\n        $idle = 0;\n        $connecting = 0;\n        $transient_failure = 0;\n        $shutdown = 0;\n        foreach ($this->channel_refs as $channel_ref) {\n            $state = $channel_ref->getRealChannel($this->credentials)->getConnectivityState($try_to_connect);\n            switch ($state) {\n                case \\Grpc\\CHANNEL_READY:\n                    $ready += 1;\n                    break 2;\n                case \\Grpc\\CHANNEL_FATAL_FAILURE:\n                    $shutdown += 1;\n                    break;\n                case \\Grpc\\CHANNEL_CONNECTING:\n                    $connecting += 1;\n                    break;\n                case \\Grpc\\CHANNEL_TRANSIENT_FAILURE:\n                    $transient_failure += 1;\n                    break;\n                case \\Grpc\\CHANNEL_IDLE:\n                    $idle += 1;\n                    break;\n            }\n        }\n        if ($ready > 0) {\n            return \\Grpc\\CHANNEL_READY;\n        } elseif ($idle > 0) {\n            return \\Grpc\\CHANNEL_IDLE;\n        } elseif ($connecting > 0) {\n            return \\Grpc\\CHANNEL_CONNECTING;\n        } elseif ($transient_failure > 0) {\n            return \\Grpc\\CHANNEL_TRANSIENT_FAILURE;\n        } elseif ($shutdown > 0) {\n            return \\Grpc\\CHANNEL_SHUTDOWN;\n        }\n    }\n\n    /**\n     * Watch the connectivity state of the channel until it changed\n     *\n     * @param int     $last_state   The previous connectivity state of the channel\n     * @param Timeval $deadline_obj The deadline this function should wait until\n     *\n     * @return bool If the connectivity state changes from last_state\n     *              before deadline\n     * @throws \\InvalidArgumentException\n     */\n    public function watchConnectivityState($last_state, $deadline_obj = null)\n    {\n        if ($deadline_obj == null || !is_a($deadline_obj, '\\Grpc\\Timeval')) {\n            throw new \\InvalidArgumentException(\"\");\n        }\n        // Since getRealChannel is creating a PHP Channel object. However in gRPC, when a Channel\n        // object is closed, we only mark this Object to be invalid. Thus, we need a global variable\n        // to mark whether this GCPExtensionChannel is close or not.\n        if ($this->is_closed) {\n            throw new \\RuntimeException(\"Channel has already been closed\");\n        }\n        $state = 0;\n        foreach ($this->channel_refs as $channel_ref) {\n            $state = $channel_ref->getRealChannel($this->credentials)->watchConnectivityState($last_state, $deadline_obj);\n        }\n        return $state;\n    }\n\n    /**\n     * Get the endpoint this call/stream is connected to\n     *\n     * @return string The URI of the endpoint\n     */\n    public function getTarget()\n    {\n        return $this->target;\n    }\n\n    /**\n     * Close the channel\n     */\n    public function close()\n    {\n        foreach ($this->channel_refs as $channel_ref) {\n            $channel_ref->getRealChannel($this->credentials)->close();\n        }\n        $this->is_closed = true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/generated/GPBMetadata/GrpcGcp.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: grpc_gcp.proto\n\nnamespace GPBMetadata;\n\nclass GrpcGcp\n{\n    public static $is_initialized = false;\n\n    public static function initOnce()\n    {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n            return;\n        }\n        $pool->internalAddGeneratedFile(hex2bin(\n            \"0ac9030a0e677270635f6763702e70726f746f1208677270632e67637022\" .\n            \"670a09417069436f6e66696712310a0c6368616e6e656c5f706f6f6c1802\" .\n            \"2001280b321b2e677270632e6763702e4368616e6e656c506f6f6c436f6e\" .\n            \"66696712270a066d6574686f6418e9072003280b32162e677270632e6763\" .\n            \"702e4d6574686f64436f6e66696722690a114368616e6e656c506f6f6c43\" .\n            \"6f6e66696712100a086d61785f73697a6518012001280d12140a0c69646c\" .\n            \"655f74696d656f7574180220012804122c0a246d61785f636f6e63757272\" .\n            \"656e745f73747265616d735f6c6f775f77617465726d61726b1803200128\" .\n            \"0d22490a0c4d6574686f64436f6e666967120c0a046e616d651801200328\" .\n            \"09122b0a08616666696e69747918e9072001280b32182e677270632e6763\" .\n            \"702e416666696e697479436f6e6669672285010a0e416666696e69747943\" .\n            \"6f6e66696712310a07636f6d6d616e6418022001280e32202e677270632e\" .\n            \"6763702e416666696e697479436f6e6669672e436f6d6d616e6412140a0c\" .\n            \"616666696e6974795f6b6579180320012809222a0a07436f6d6d616e6412\" .\n            \"090a05424f554e44100012080a0442494e441001120a0a06554e42494e44\" .\n            \"1002620670726f746f33\"\n        ));\n\n        static::$is_initialized = true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/generated/Grpc/Gcp/AffinityConfig.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: grpc_gcp.proto\n\nnamespace Grpc\\Gcp;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated from protobuf message <code>grpc.gcp.AffinityConfig</code>\n */\nclass AffinityConfig extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The affinity command applies on the selected gRPC methods.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.AffinityConfig.Command command = 2;</code>\n     */\n    private $command = 0;\n    /**\n     * The field path of the affinity key in the request/response message.\n     * For example: \"f.a\", \"f.b.d\", etc.\n     *\n     * Generated from protobuf field <code>string affinity_key = 3;</code>\n     */\n    private $affinity_key = '';\n\n    public function __construct()\n    {\n        \\GPBMetadata\\GrpcGcp::initOnce();\n        parent::__construct();\n    }\n\n    /**\n     * The affinity command applies on the selected gRPC methods.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.AffinityConfig.Command command = 2;</code>\n     * @return int\n     */\n    public function getCommand()\n    {\n        return $this->command;\n    }\n\n    /**\n     * The affinity command applies on the selected gRPC methods.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.AffinityConfig.Command command = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setCommand($var)\n    {\n        GPBUtil::checkEnum($var, \\Grpc\\Gcp\\AffinityConfig_Command::class);\n        $this->command = $var;\n\n        return $this;\n    }\n\n    /**\n     * The field path of the affinity key in the request/response message.\n     * For example: \"f.a\", \"f.b.d\", etc.\n     *\n     * Generated from protobuf field <code>string affinity_key = 3;</code>\n     * @return string\n     */\n    public function getAffinityKey()\n    {\n        return $this->affinity_key;\n    }\n\n    /**\n     * The field path of the affinity key in the request/response message.\n     * For example: \"f.a\", \"f.b.d\", etc.\n     *\n     * Generated from protobuf field <code>string affinity_key = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAffinityKey($var)\n    {\n        GPBUtil::checkString($var, true);\n        $this->affinity_key = $var;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/generated/Grpc/Gcp/AffinityConfig_Command.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: grpc_gcp.proto\n\nnamespace Grpc\\Gcp;\n\n/**\n * Protobuf enum <code>Grpc\\Gcp\\AffinityConfig\\Command</code>\n */\nclass AffinityConfig_Command\n{\n    /**\n     * The annotated method will be required to be bound to an existing session\n     * to execute the RPC. The corresponding <affinity_key_field_path> will be\n     * used to find the affinity key from the request message.\n     *\n     * Generated from protobuf enum <code>BOUND = 0;</code>\n     */\n    const BOUND = 0;\n    /**\n     * The annotated method will establish the channel affinity with the channel\n     * which is used to execute the RPC. The corresponding\n     * <affinity_key_field_path> will be used to find the affinity key from the\n     * response message.\n     *\n     * Generated from protobuf enum <code>BIND = 1;</code>\n     */\n    const BIND = 1;\n    /**\n     * The annotated method will remove the channel affinity with the channel\n     * which is used to execute the RPC. The corresponding\n     * <affinity_key_field_path> will be used to find the affinity key from the\n     * request message.\n     *\n     * Generated from protobuf enum <code>UNBIND = 2;</code>\n     */\n    const UNBIND = 2;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/generated/Grpc/Gcp/ApiConfig.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: grpc_gcp.proto\n\nnamespace Grpc\\Gcp;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated from protobuf message <code>grpc.gcp.ApiConfig</code>\n */\nclass ApiConfig extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The channel pool configurations.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.ChannelPoolConfig channel_pool = 2;</code>\n     */\n    private $channel_pool = null;\n    /**\n     * The method configurations.\n     *\n     * Generated from protobuf field <code>repeated .grpc.gcp.MethodConfig method = 1001;</code>\n     */\n    private $method;\n\n    public function __construct()\n    {\n        \\GPBMetadata\\GrpcGcp::initOnce();\n        parent::__construct();\n    }\n\n    /**\n     * The channel pool configurations.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.ChannelPoolConfig channel_pool = 2;</code>\n     * @return \\Grpc\\Gcp\\ChannelPoolConfig\n     */\n    public function getChannelPool()\n    {\n        return $this->channel_pool;\n    }\n\n    /**\n     * The channel pool configurations.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.ChannelPoolConfig channel_pool = 2;</code>\n     * @param \\Grpc\\Gcp\\ChannelPoolConfig $var\n     * @return $this\n     */\n    public function setChannelPool($var)\n    {\n        GPBUtil::checkMessage($var, \\Grpc\\Gcp\\ChannelPoolConfig::class);\n        $this->channel_pool = $var;\n\n        return $this;\n    }\n\n    /**\n     * The method configurations.\n     *\n     * Generated from protobuf field <code>repeated .grpc.gcp.MethodConfig method = 1001;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getMethod()\n    {\n        return $this->method;\n    }\n\n    /**\n     * The method configurations.\n     *\n     * Generated from protobuf field <code>repeated .grpc.gcp.MethodConfig method = 1001;</code>\n     * @param \\Grpc\\Gcp\\MethodConfig[]|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setMethod($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Grpc\\Gcp\\MethodConfig::class);\n        $this->method = $arr;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/generated/Grpc/Gcp/ChannelPoolConfig.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: grpc_gcp.proto\n\nnamespace Grpc\\Gcp;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated from protobuf message <code>grpc.gcp.ChannelPoolConfig</code>\n */\nclass ChannelPoolConfig extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The max number of channels in the pool.\n     *\n     * Generated from protobuf field <code>uint32 max_size = 1;</code>\n     */\n    private $max_size = 0;\n    /**\n     * The idle timeout (seconds) of channels without bound affinity sessions.\n     *\n     * Generated from protobuf field <code>uint64 idle_timeout = 2;</code>\n     */\n    private $idle_timeout = 0;\n    /**\n     * The low watermark of max number of concurrent streams in a channel.\n     * New channel will be created once it get hit, until we reach the max size\n     * of the channel pool.\n     *\n     * Generated from protobuf field <code>uint32 max_concurrent_streams_low_watermark = 3;</code>\n     */\n    private $max_concurrent_streams_low_watermark = 0;\n\n    public function __construct()\n    {\n        \\GPBMetadata\\GrpcGcp::initOnce();\n        parent::__construct();\n    }\n\n    /**\n     * The max number of channels in the pool.\n     *\n     * Generated from protobuf field <code>uint32 max_size = 1;</code>\n     * @return int\n     */\n    public function getMaxSize()\n    {\n        return $this->max_size;\n    }\n\n    /**\n     * The max number of channels in the pool.\n     *\n     * Generated from protobuf field <code>uint32 max_size = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMaxSize($var)\n    {\n        GPBUtil::checkUint32($var);\n        $this->max_size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The idle timeout (seconds) of channels without bound affinity sessions.\n     *\n     * Generated from protobuf field <code>uint64 idle_timeout = 2;</code>\n     * @return int|string\n     */\n    public function getIdleTimeout()\n    {\n        return $this->idle_timeout;\n    }\n\n    /**\n     * The idle timeout (seconds) of channels without bound affinity sessions.\n     *\n     * Generated from protobuf field <code>uint64 idle_timeout = 2;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setIdleTimeout($var)\n    {\n        GPBUtil::checkUint64($var);\n        $this->idle_timeout = $var;\n\n        return $this;\n    }\n\n    /**\n     * The low watermark of max number of concurrent streams in a channel.\n     * New channel will be created once it get hit, until we reach the max size\n     * of the channel pool.\n     *\n     * Generated from protobuf field <code>uint32 max_concurrent_streams_low_watermark = 3;</code>\n     * @return int\n     */\n    public function getMaxConcurrentStreamsLowWatermark()\n    {\n        return $this->max_concurrent_streams_low_watermark;\n    }\n\n    /**\n     * The low watermark of max number of concurrent streams in a channel.\n     * New channel will be created once it get hit, until we reach the max size\n     * of the channel pool.\n     *\n     * Generated from protobuf field <code>uint32 max_concurrent_streams_low_watermark = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMaxConcurrentStreamsLowWatermark($var)\n    {\n        GPBUtil::checkUint32($var);\n        $this->max_concurrent_streams_low_watermark = $var;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/generated/Grpc/Gcp/MethodConfig.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: grpc_gcp.proto\n\nnamespace Grpc\\Gcp;\n\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * Generated from protobuf message <code>grpc.gcp.MethodConfig</code>\n */\nclass MethodConfig extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A fully qualified name of a gRPC method, or a wildcard pattern ending\n     * with .*, such as foo.bar.A, foo.bar.*. Method configs are evaluated\n     * sequentially, and the first one takes precedence.\n     *\n     * Generated from protobuf field <code>repeated string name = 1;</code>\n     */\n    private $name;\n    /**\n     * The channel affinity configurations.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.AffinityConfig affinity = 1001;</code>\n     */\n    private $affinity = null;\n\n    public function __construct()\n    {\n        \\GPBMetadata\\GrpcGcp::initOnce();\n        parent::__construct();\n    }\n\n    /**\n     * A fully qualified name of a gRPC method, or a wildcard pattern ending\n     * with .*, such as foo.bar.A, foo.bar.*. Method configs are evaluated\n     * sequentially, and the first one takes precedence.\n     *\n     * Generated from protobuf field <code>repeated string name = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * A fully qualified name of a gRPC method, or a wildcard pattern ending\n     * with .*, such as foo.bar.A, foo.bar.*. Method configs are evaluated\n     * sequentially, and the first one takes precedence.\n     *\n     * Generated from protobuf field <code>repeated string name = 1;</code>\n     * @param string[]|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->name = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The channel affinity configurations.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.AffinityConfig affinity = 1001;</code>\n     * @return \\Grpc\\Gcp\\AffinityConfig\n     */\n    public function getAffinity()\n    {\n        return $this->affinity;\n    }\n\n    /**\n     * The channel affinity configurations.\n     *\n     * Generated from protobuf field <code>.grpc.gcp.AffinityConfig affinity = 1001;</code>\n     * @param \\Grpc\\Gcp\\AffinityConfig $var\n     * @return $this\n     */\n    public function setAffinity($var)\n    {\n        GPBUtil::checkMessage($var, \\Grpc\\Gcp\\AffinityConfig::class);\n        $this->affinity = $var;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/grpc-gcp/src/grpc_gcp.proto",
    "content": "// Copyright 2018 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nsyntax = \"proto3\";\n\npackage grpc.gcp;\n\nmessage ApiConfig {\n  // The channel pool configurations.\n  ChannelPoolConfig channel_pool = 2;\n\n  // The method configurations.\n  repeated MethodConfig method = 1001;\n}\n\nmessage ChannelPoolConfig {\n  // The max number of channels in the pool.\n  uint32 max_size = 1;\n  // The idle timeout (seconds) of channels without bound affinity sessions.\n  uint64 idle_timeout = 2;\n  // The low watermark of max number of concurrent streams in a channel.\n  // New channel will be created once it get hit, until we reach the max size\n  // of the channel pool.\n  uint32 max_concurrent_streams_low_watermark = 3;\n}\n\nmessage MethodConfig {\n  // A fully qualified name of a gRPC method, or a wildcard pattern ending\n  // with .*, such as foo.bar.A, foo.bar.*. Method configs are evaluated\n  // sequentially, and the first one takes precedence.\n  repeated string name = 1;\n\n  // The channel affinity configurations.\n  AffinityConfig affinity = 1001;\n}\n\nmessage AffinityConfig {\n  enum Command {\n    // The annotated method will be required to be bound to an existing session\n    // to execute the RPC. The corresponding <affinity_key_field_path> will be\n    // used to find the affinity key from the request message.\n    BOUND = 0;\n    // The annotated method will establish the channel affinity with the channel\n    // which is used to execute the RPC. The corresponding\n    // <affinity_key_field_path> will be used to find the affinity key from the\n    // response message.\n    BIND = 1;\n    // The annotated method will remove the channel affinity with the channel\n    // which is used to execute the RPC. The corresponding\n    // <affinity_key_field_path> will be used to find the affinity key from the\n    // request message.\n    UNBIND = 2;\n  }\n  // The affinity command applies on the selected gRPC methods.\n  Command command = 2;\n  // The field path of the affinity key in the request/response message.\n  // For example: \"f.a\", \"f.b.d\", etc.\n  string affinity_key = 3;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/.gitattributes",
    "content": "/*.xml.dist export-ignore\n/tests export-ignore\n/.github export-ignore\n/.OwlBot.yaml export-ignore\n/owlbot.py export-ignore\n/src/**/gapic_metadata.json export-ignore\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/CODE_OF_CONDUCT.md",
    "content": "# Contributor Code of Conduct\n\nAs contributors and maintainers of this project,\nand in the interest of fostering an open and welcoming community,\nwe pledge to respect all people who contribute through reporting issues,\nposting feature requests, updating documentation,\nsubmitting pull requests or patches, and other activities.\n\nWe are committed to making participation in this project\na harassment-free experience for everyone,\nregardless of level of experience, gender, gender identity and expression,\nsexual orientation, disability, personal appearance,\nbody size, race, ethnicity, age, religion, or nationality.\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery\n* Personal attacks\n* Trolling or insulting/derogatory comments\n* Public or private harassment\n* Publishing other's private information,\nsuch as physical or electronic\naddresses, without explicit permission\n* Other unethical or unprofessional conduct.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct.\nBy adopting this Code of Conduct,\nproject maintainers commit themselves to fairly and consistently\napplying these principles to every aspect of managing this project.\nProject maintainers who do not follow or enforce the Code of Conduct\nmay be permanently removed from the project team.\n\nThis code of conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community.\n\nInstances of abusive, harassing, or otherwise unacceptable behavior\nmay be reported by opening an issue\nor contacting one or more of the project maintainers.\n\nThis Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0,\navailable at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/CONTRIBUTING.md",
    "content": "# How to Contribute\n\nWe'd love to accept your patches and contributions to this project. We accept\nand review pull requests against the main\n[Google Cloud PHP](https://github.com/googleapis/google-cloud-php)\nrepository, which contains all of our client libraries. You will also need to\nsign a Contributor License Agreement. For more details about how to contribute,\nsee the\n[CONTRIBUTING.md](https://github.com/googleapis/google-cloud-php/blob/main/CONTRIBUTING.md)\nfile in the main Google Cloud PHP repository.\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/README.md",
    "content": "# Google LongRunning API for PHP\n\n> Idiomatic PHP client for [Google LongRunning API](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.longrunning).\n\n[![Latest Stable Version](https://poser.pugx.org/google/longrunning/v/stable)](https://packagist.org/packages/google/longrunning) [![Packagist](https://img.shields.io/packagist/dm/google/longrunning.svg)](https://packagist.org/packages/google/longrunning)\n\n* [API documentation](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.longrunning)\n\n**NOTE:** This repository is part of [Google Cloud PHP](https://github.com/googleapis/google-cloud-php). Any\nsupport requests, bug reports, or development contributions should be directed to\nthat project.\n\n### Installation\n\nTo begin, install the preferred dependency manager for PHP, [Composer](https://getcomposer.org/).\n\nNow to install just this component:\n\n```sh\n$ composer require google/longrunning\n```\n\nThis component supports both REST over HTTP/1.1 and gRPC. In order to take advantage of the benefits offered by gRPC (such as streaming methods)\nplease see our [gRPC installation guide](https://cloud.google.com/php/grpc).\n\n### Authentication\n\nPlease see our [Authentication guide](https://github.com/googleapis/google-cloud-php/blob/main/AUTHENTICATION.md) for more information\non authenticating your client. Once authenticated, you'll be ready to start making requests.\n\n### Debugging\n\nPlease see our [Debugging guide](https://github.com/googleapis/google-cloud-php/blob/main/DEBUG.md)\nfor more information about the debugging tools.\n\n### Version\n\nThis component is considered beta. As such, it should be expected to be mostly\nstable and we're working towards a release candidate. We will address issues\nand requests with a higher priority.\n\n### Next Steps\n\n1. Understand the [official documentation](https://cloud.google.com/service-infrastructure/docs/service-management/reference/rpc/google.longrunning/docs).\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/SECURITY.md",
    "content": "# Security Policy\n\nTo report a security issue, please use [g.co/vulnz](https://g.co/vulnz).\n\nThe Google Security Team will respond within 5 working days of your report on g.co/vulnz.\n\nWe use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/VERSION",
    "content": "0.6.0\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/composer.json",
    "content": "{\n    \"name\": \"google/longrunning\",\n    \"description\": \"Google LongRunning Client for PHP\",\n    \"license\": \"Apache-2.0\",\n    \"minimum-stability\": \"stable\",\n    \"version\": \"0.6.0\",\n    \"autoload\": {\n        \"psr-4\": {\n            \"Google\\\\ApiCore\\\\LongRunning\\\\\": \"src/ApiCore/LongRunning\",\n            \"Google\\\\LongRunning\\\\\": \"src/LongRunning\",\n            \"GPBMetadata\\\\Google\\\\Longrunning\\\\\": \"metadata/Longrunning\"\n        }\n    },\n    \"extra\": {\n        \"component\": {\n            \"id\": \"longrunning\",\n            \"path\": \"LongRunning\",\n            \"entry\": null,\n            \"target\": \"googleapis/php-longrunning\"\n        }\n    },\n    \"require-dev\": {\n        \"google/gax\": \"^1.38.0\",\n        \"phpunit/phpunit\": \"^9.0\"\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/metadata/README.md",
    "content": "# Google Protobuf Metadata Classes\n\n## WARNING!\n\nThese classes are not intended for direct use - they exist only to support\nthe generated protobuf classes in src/\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/ApiCore/LongRunning/Gapic/OperationsGapicClient.php",
    "content": "<?php\n\nnamespace Google\\ApiCore\\LongRunning\\Gapic;\n\nif (false) {\n    /**\n     * This class is deprecated. Use Google\\LongRunning\\OperationsClient instead.\n     * @deprecated\n     */\n    class OperationsGapicClient extends\n        \\Google\\LongRunning\\Client\\OperationsClient\n    {\n    }\n}\n// Autoload the class and its alias\nclass_exists('\\Google\\LongRunning\\Gapic\\OperationsGapicClient');\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/ApiCore/LongRunning/OperationsClient.php",
    "content": "<?php\n\nnamespace Google\\ApiCore\\LongRunning;\n\nuse Google\\ApiCore\\LongRunning\\Gapic\\OperationsGapicClient;\n\nif (false) {\n    /**\n     * This class is deprecated. Use Google\\LongRunning\\OperationsClient instead.\n     * @deprecated\n     */\n    class OperationsClient extends OperationsGapicClient {}\n}\n// Autoload the class and its alias\nclass_exists('\\Google\\LongRunning\\OperationsClient');\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/CancelOperationRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for\n * [Operations.CancelOperation][google.longrunning.Operations.CancelOperation].\n *\n * Generated from protobuf message <code>google.longrunning.CancelOperationRequest</code>\n */\nclass CancelOperationRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the operation resource to be cancelled.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    private $name = '';\n\n    /**\n     * @param string $name The name of the operation resource to be cancelled.\n     *\n     * @return \\Google\\LongRunning\\CancelOperationRequest\n     *\n     * @experimental\n     */\n    public static function build(string $name): self\n    {\n        return (new self())\n            ->setName($name);\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the operation resource to be cancelled.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the operation resource to be cancelled.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the operation resource to be cancelled.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/Client/OperationsClient.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * GENERATED CODE WARNING\n * Generated by gapic-generator-php from the file\n * https://github.com/googleapis/googleapis/blob/master/google/longrunning/operations.proto\n * Updates to the above are reflected here through a refresh process.\n */\n\nnamespace Google\\LongRunning\\Client;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\CredentialsWrapper;\nuse Google\\ApiCore\\GapicClientTrait;\nuse Google\\ApiCore\\Options\\ClientOptions;\nuse Google\\ApiCore\\PagedListResponse;\nuse Google\\ApiCore\\RetrySettings;\nuse Google\\ApiCore\\Transport\\TransportInterface;\nuse Google\\ApiCore\\ValidationException;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\LongRunning\\CancelOperationRequest;\nuse Google\\LongRunning\\DeleteOperationRequest;\nuse Google\\LongRunning\\GetOperationRequest;\nuse Google\\LongRunning\\ListOperationsRequest;\nuse Google\\LongRunning\\Operation;\nuse Google\\LongRunning\\WaitOperationRequest;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * Service Description: Manages long-running operations with an API service.\n *\n * When an API method normally takes long time to complete, it can be designed\n * to return [Operation][google.longrunning.Operation] to the client, and the\n * client can use this interface to receive the real response asynchronously by\n * polling the operation resource, or pass the operation resource to another API\n * (such as Pub/Sub API) to receive the response.  Any API service that returns\n * long-running operations should implement the `Operations` interface so\n * developers can have a consistent client experience.\n *\n * This class provides the ability to make remote calls to the backing service through method\n * calls that map to API methods.\n *\n * @method PromiseInterface<void> cancelOperationAsync(CancelOperationRequest $request, array $optionalArgs = [])\n * @method PromiseInterface<void> deleteOperationAsync(DeleteOperationRequest $request, array $optionalArgs = [])\n * @method PromiseInterface<Operation> getOperationAsync(GetOperationRequest $request, array $optionalArgs = [])\n * @method PromiseInterface<PagedListResponse> listOperationsAsync(ListOperationsRequest $request, array $optionalArgs = [])\n * @method PromiseInterface<Operation> waitOperationAsync(WaitOperationRequest $request, array $optionalArgs = [])\n */\nclass OperationsClient\n{\n    use GapicClientTrait;\n\n    /** The name of the service. */\n    private const SERVICE_NAME = 'google.longrunning.Operations';\n\n    /**\n     * The default address of the service.\n     *\n     * @deprecated SERVICE_ADDRESS_TEMPLATE should be used instead.\n     */\n    private const SERVICE_ADDRESS = 'longrunning.googleapis.com';\n\n    /** The address template of the service. */\n    private const SERVICE_ADDRESS_TEMPLATE = 'longrunning.UNIVERSE_DOMAIN';\n\n    /** The default port of the service. */\n    private const DEFAULT_SERVICE_PORT = 443;\n\n    /** The name of the code generator, to be included in the agent header. */\n    private const CODEGEN_NAME = 'gapic';\n\n    /** The default scopes required by the service. */\n    public static $serviceScopes = [];\n\n    private static function getClientDefaults()\n    {\n        return [\n            'serviceName' => self::SERVICE_NAME,\n            'apiEndpoint' => self::SERVICE_ADDRESS . ':' . self::DEFAULT_SERVICE_PORT,\n            'clientConfig' => __DIR__ . '/../resources/operations_client_config.json',\n            'descriptorsConfigPath' => __DIR__ . '/../resources/operations_descriptor_config.php',\n            'gcpApiConfigPath' => __DIR__ . '/../resources/operations_grpc_config.json',\n            'credentialsConfig' => [\n                'defaultScopes' => self::$serviceScopes,\n            ],\n            'transportConfig' => [\n                'rest' => [\n                    'restClientConfigPath' => __DIR__ . '/../resources/operations_rest_client_config.php',\n                ],\n            ],\n        ];\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param array|ClientOptions $options {\n     *     Optional. Options for configuring the service API wrapper.\n     *\n     *     @type string $apiEndpoint\n     *           The address of the API remote host. May optionally include the port, formatted\n     *           as \"<uri>:<port>\". Default 'longrunning.googleapis.com:443'.\n     *     @type FetchAuthTokenInterface|CredentialsWrapper $credentials\n     *           This option should only be used with a pre-constructed\n     *           {@see FetchAuthTokenInterface} or {@see CredentialsWrapper} object. Note that\n     *           when one of these objects are provided, any settings in $credentialsConfig will\n     *           be ignored.\n     *           **Important**: If you are providing a path to a credentials file, or a decoded\n     *           credentials file as a PHP array, this usage is now DEPRECATED. Providing an\n     *           unvalidated credential configuration to Google APIs can compromise the security\n     *           of your systems and data. It is recommended to create the credentials explicitly\n     *           ```\n     *           use Google\\Auth\\Credentials\\ServiceAccountCredentials;\n     *           use Google\\LongRunning\\OperationsClient;\n     *           $creds = new ServiceAccountCredentials($scopes, $json);\n     *           $options = new OperationsClient(['credentials' => $creds]);\n     *           ```\n     *           {@see\n     *           https://cloud.google.com/docs/authentication/external/externally-sourced-credentials}\n     *     @type array $credentialsConfig\n     *           Options used to configure credentials, including auth token caching, for the\n     *           client. For a full list of supporting configuration options, see\n     *           {@see \\Google\\ApiCore\\CredentialsWrapper::build()} .\n     *     @type bool $disableRetries\n     *           Determines whether or not retries defined by the client configuration should be\n     *           disabled. Defaults to `false`.\n     *     @type string|array $clientConfig\n     *           Client method configuration, including retry settings. This option can be either\n     *           a path to a JSON file, or a PHP array containing the decoded JSON data. By\n     *           default this settings points to the default client config file, which is\n     *           provided in the resources folder.\n     *     @type string|TransportInterface $transport\n     *           The transport used for executing network requests. May be either the string\n     *           `rest` or `grpc`. Defaults to `grpc` if gRPC support is detected on the system.\n     *           *Advanced usage*: Additionally, it is possible to pass in an already\n     *           instantiated {@see \\Google\\ApiCore\\Transport\\TransportInterface} object. Note\n     *           that when this object is provided, any settings in $transportConfig, and any\n     *           $apiEndpoint setting, will be ignored.\n     *     @type array $transportConfig\n     *           Configuration options that will be used to construct the transport. Options for\n     *           each supported transport type should be passed in a key for that transport. For\n     *           example:\n     *           $transportConfig = [\n     *               'grpc' => [...],\n     *               'rest' => [...],\n     *           ];\n     *           See the {@see \\Google\\ApiCore\\Transport\\GrpcTransport::build()} and\n     *           {@see \\Google\\ApiCore\\Transport\\RestTransport::build()} methods for the\n     *           supported options.\n     *     @type callable $clientCertSource\n     *           A callable which returns the client cert as a string. This can be used to\n     *           provide a certificate and private key to the transport layer for mTLS.\n     *     @type false|LoggerInterface $logger\n     *           A PSR-3 compliant logger. If set to false, logging is disabled, ignoring the\n     *           'GOOGLE_SDK_PHP_LOGGING' environment flag\n     *     @type string $universeDomain\n     *           The service domain for the client. Defaults to 'googleapis.com'.\n     * }\n     *\n     * @throws ValidationException\n     */\n    public function __construct(array|ClientOptions $options = [])\n    {\n        $clientOptions = $this->buildClientOptions($options);\n        $this->setClientOptions($clientOptions);\n    }\n\n    /** Handles execution of the async variants for each documented method. */\n    public function __call($method, $args)\n    {\n        if (substr($method, -5) !== 'Async') {\n            trigger_error('Call to undefined method ' . __CLASS__ . \"::$method()\", E_USER_ERROR);\n        }\n\n        array_unshift($args, substr($method, 0, -5));\n        return call_user_func_array([$this, 'startAsyncCall'], $args);\n    }\n\n    /**\n     * Starts asynchronous cancellation on a long-running operation.  The server\n     * makes a best effort to cancel the operation, but success is not\n     * guaranteed.  If the server doesn't support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.  Clients can use\n     * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or\n     * other methods to check whether the cancellation succeeded or whether the\n     * operation completed despite cancellation. On successful cancellation,\n     * the operation is not deleted; instead, it becomes an operation with\n     * an [Operation.error][google.longrunning.Operation.error] value with a\n     * [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to\n     * `Code.CANCELLED`.\n     *\n     * The async variant is {@see OperationsClient::cancelOperationAsync()} .\n     *\n     * @example samples/OperationsClient/cancel_operation.php\n     *\n     * @param CancelOperationRequest $request     A request to house fields associated with the call.\n     * @param array                  $callOptions {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @throws ApiException Thrown if the API call fails.\n     */\n    public function cancelOperation(CancelOperationRequest $request, array $callOptions = []): void\n    {\n        $this->startApiCall('CancelOperation', $request, $callOptions)->wait();\n    }\n\n    /**\n     * Deletes a long-running operation. This method indicates that the client is\n     * no longer interested in the operation result. It does not cancel the\n     * operation. If the server doesn't support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.\n     *\n     * The async variant is {@see OperationsClient::deleteOperationAsync()} .\n     *\n     * @example samples/OperationsClient/delete_operation.php\n     *\n     * @param DeleteOperationRequest $request     A request to house fields associated with the call.\n     * @param array                  $callOptions {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @throws ApiException Thrown if the API call fails.\n     */\n    public function deleteOperation(DeleteOperationRequest $request, array $callOptions = []): void\n    {\n        $this->startApiCall('DeleteOperation', $request, $callOptions)->wait();\n    }\n\n    /**\n     * Gets the latest state of a long-running operation.  Clients can use this\n     * method to poll the operation result at intervals as recommended by the API\n     * service.\n     *\n     * The async variant is {@see OperationsClient::getOperationAsync()} .\n     *\n     * @example samples/OperationsClient/get_operation.php\n     *\n     * @param GetOperationRequest $request     A request to house fields associated with the call.\n     * @param array               $callOptions {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @return Operation\n     *\n     * @throws ApiException Thrown if the API call fails.\n     */\n    public function getOperation(GetOperationRequest $request, array $callOptions = []): Operation\n    {\n        return $this->startApiCall('GetOperation', $request, $callOptions)->wait();\n    }\n\n    /**\n     * Lists operations that match the specified filter in the request. If the\n     * server doesn't support this method, it returns `UNIMPLEMENTED`.\n     *\n     * The async variant is {@see OperationsClient::listOperationsAsync()} .\n     *\n     * @example samples/OperationsClient/list_operations.php\n     *\n     * @param ListOperationsRequest $request     A request to house fields associated with the call.\n     * @param array                 $callOptions {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @return PagedListResponse\n     *\n     * @throws ApiException Thrown if the API call fails.\n     */\n    public function listOperations(ListOperationsRequest $request, array $callOptions = []): PagedListResponse\n    {\n        return $this->startApiCall('ListOperations', $request, $callOptions);\n    }\n\n    /**\n     * Waits until the specified long-running operation is done or reaches at most\n     * a specified timeout, returning the latest state.  If the operation is\n     * already done, the latest state is immediately returned.  If the timeout\n     * specified is greater than the default HTTP/RPC timeout, the HTTP/RPC\n     * timeout is used.  If the server does not support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.\n     * Note that this method is on a best-effort basis.  It may return the latest\n     * state before the specified timeout (including immediately), meaning even an\n     * immediate response is no guarantee that the operation is done.\n     *\n     * The async variant is {@see OperationsClient::waitOperationAsync()} .\n     *\n     * @example samples/OperationsClient/wait_operation.php\n     *\n     * @param WaitOperationRequest $request     A request to house fields associated with the call.\n     * @param array                $callOptions {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @return Operation\n     *\n     * @throws ApiException Thrown if the API call fails.\n     */\n    public function waitOperation(WaitOperationRequest $request, array $callOptions = []): Operation\n    {\n        return $this->startApiCall('WaitOperation', $request, $callOptions)->wait();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/DeleteOperationRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for\n * [Operations.DeleteOperation][google.longrunning.Operations.DeleteOperation].\n *\n * Generated from protobuf message <code>google.longrunning.DeleteOperationRequest</code>\n */\nclass DeleteOperationRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the operation resource to be deleted.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    private $name = '';\n\n    /**\n     * @param string $name The name of the operation resource to be deleted.\n     *\n     * @return \\Google\\LongRunning\\DeleteOperationRequest\n     *\n     * @experimental\n     */\n    public static function build(string $name): self\n    {\n        return (new self())\n            ->setName($name);\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the operation resource to be deleted.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the operation resource to be deleted.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the operation resource to be deleted.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/Gapic/OperationsGapicClient.php",
    "content": "<?php\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * GENERATED CODE WARNING\n * Generated by gapic-generator-php from the file\n * https://github.com/googleapis/googleapis/blob/master/google/longrunning/operations.proto\n * Updates to the above are reflected here through a refresh process.\n */\n\nnamespace Google\\LongRunning\\Gapic;\n\nuse Google\\ApiCore\\ApiException;\nuse Google\\ApiCore\\CredentialsWrapper;\nuse Google\\ApiCore\\GapicClientTrait;\nuse Google\\ApiCore\\RequestParamsHeaderDescriptor;\nuse Google\\ApiCore\\RetrySettings;\nuse Google\\ApiCore\\Transport\\TransportInterface;\nuse Google\\ApiCore\\ValidationException;\nuse Google\\Auth\\FetchAuthTokenInterface;\nuse Google\\LongRunning\\CancelOperationRequest;\nuse Google\\LongRunning\\DeleteOperationRequest;\nuse Google\\LongRunning\\GetOperationRequest;\nuse Google\\LongRunning\\ListOperationsRequest;\nuse Google\\LongRunning\\ListOperationsResponse;\nuse Google\\LongRunning\\Operation;\nuse Google\\LongRunning\\WaitOperationRequest;\nuse Google\\Protobuf\\Duration;\nuse Google\\Protobuf\\GPBEmpty;\n\n/**\n * Service Description: Manages long-running operations with an API service.\n *\n * When an API method normally takes long time to complete, it can be designed\n * to return [Operation][google.longrunning.Operation] to the client, and the\n * client can use this interface to receive the real response asynchronously by\n * polling the operation resource, or pass the operation resource to another API\n * (such as Pub/Sub API) to receive the response.  Any API service that returns\n * long-running operations should implement the `Operations` interface so\n * developers can have a consistent client experience.\n *\n * This class provides the ability to make remote calls to the backing service through method\n * calls that map to API methods. Sample code to get started:\n *\n * ```\n * $operationsClient = new OperationsClient();\n * try {\n *     $name = 'name';\n *     $operationsClient->cancelOperation($name);\n * } finally {\n *     $operationsClient->close();\n * }\n * ```\n *\n * @deprecated Please use the new service client {@see \\Google\\LongRunning\\Client\\OperationsClient}.\n */\nclass OperationsGapicClient\n{\n    use GapicClientTrait;\n\n    /** The name of the service. */\n    const SERVICE_NAME = 'google.longrunning.Operations';\n\n    /**\n     * The default address of the service.\n     *\n     * @deprecated SERVICE_ADDRESS_TEMPLATE should be used instead.\n     */\n    const SERVICE_ADDRESS = 'longrunning.googleapis.com';\n\n    /** The address template of the service. */\n    private const SERVICE_ADDRESS_TEMPLATE = 'longrunning.UNIVERSE_DOMAIN';\n\n    /** The default port of the service. */\n    const DEFAULT_SERVICE_PORT = 443;\n\n    /** The name of the code generator, to be included in the agent header. */\n    const CODEGEN_NAME = 'gapic';\n\n    /** The default scopes required by the service. */\n    public static $serviceScopes = [];\n\n    private static function getClientDefaults()\n    {\n        return [\n            'serviceName' => self::SERVICE_NAME,\n            'apiEndpoint' =>\n                self::SERVICE_ADDRESS . ':' . self::DEFAULT_SERVICE_PORT,\n            'clientConfig' =>\n                __DIR__ . '/../resources/operations_client_config.json',\n            'descriptorsConfigPath' =>\n                __DIR__ . '/../resources/operations_descriptor_config.php',\n            'gcpApiConfigPath' =>\n                __DIR__ . '/../resources/operations_grpc_config.json',\n            'credentialsConfig' => [\n                'defaultScopes' => self::$serviceScopes,\n            ],\n            'transportConfig' => [\n                'rest' => [\n                    'restClientConfigPath' =>\n                        __DIR__ .\n                        '/../resources/operations_rest_client_config.php',\n                ],\n            ],\n        ];\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param array $options {\n     *     Optional. Options for configuring the service API wrapper.\n     *\n     *     @type string $apiEndpoint\n     *           The address of the API remote host. May optionally include the port, formatted\n     *           as \"<uri>:<port>\". Default 'longrunning.googleapis.com:443'.\n     *     @type string|array|FetchAuthTokenInterface|CredentialsWrapper $credentials\n     *           The credentials to be used by the client to authorize API calls. This option\n     *           accepts either a path to a credentials file, or a decoded credentials file as a\n     *           PHP array.\n     *           *Advanced usage*: In addition, this option can also accept a pre-constructed\n     *           {@see \\Google\\Auth\\FetchAuthTokenInterface} object or\n     *           {@see \\Google\\ApiCore\\CredentialsWrapper} object. Note that when one of these\n     *           objects are provided, any settings in $credentialsConfig will be ignored.\n     *     @type array $credentialsConfig\n     *           Options used to configure credentials, including auth token caching, for the\n     *           client. For a full list of supporting configuration options, see\n     *           {@see \\Google\\ApiCore\\CredentialsWrapper::build()} .\n     *     @type bool $disableRetries\n     *           Determines whether or not retries defined by the client configuration should be\n     *           disabled. Defaults to `false`.\n     *     @type string|array $clientConfig\n     *           Client method configuration, including retry settings. This option can be either\n     *           a path to a JSON file, or a PHP array containing the decoded JSON data. By\n     *           default this settings points to the default client config file, which is\n     *           provided in the resources folder.\n     *     @type string|TransportInterface $transport\n     *           The transport used for executing network requests. May be either the string\n     *           `rest` or `grpc`. Defaults to `grpc` if gRPC support is detected on the system.\n     *           *Advanced usage*: Additionally, it is possible to pass in an already\n     *           instantiated {@see \\Google\\ApiCore\\Transport\\TransportInterface} object. Note\n     *           that when this object is provided, any settings in $transportConfig, and any\n     *           $apiEndpoint setting, will be ignored.\n     *     @type array $transportConfig\n     *           Configuration options that will be used to construct the transport. Options for\n     *           each supported transport type should be passed in a key for that transport. For\n     *           example:\n     *           $transportConfig = [\n     *               'grpc' => [...],\n     *               'rest' => [...],\n     *           ];\n     *           See the {@see \\Google\\ApiCore\\Transport\\GrpcTransport::build()} and\n     *           {@see \\Google\\ApiCore\\Transport\\RestTransport::build()} methods for the\n     *           supported options.\n     *     @type callable $clientCertSource\n     *           A callable which returns the client cert as a string. This can be used to\n     *           provide a certificate and private key to the transport layer for mTLS.\n     * }\n     *\n     * @throws ValidationException\n     */\n    public function __construct(array $options = [])\n    {\n        $clientOptions = $this->buildClientOptions($options);\n        $this->setClientOptions($clientOptions);\n    }\n\n    /**\n     * Starts asynchronous cancellation on a long-running operation.  The server\n     * makes a best effort to cancel the operation, but success is not\n     * guaranteed.  If the server doesn't support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.  Clients can use\n     * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or\n     * other methods to check whether the cancellation succeeded or whether the\n     * operation completed despite cancellation. On successful cancellation,\n     * the operation is not deleted; instead, it becomes an operation with\n     * an [Operation.error][google.longrunning.Operation.error] value with a\n     * [google.rpc.Status.code][google.rpc.Status.code] of `1`, corresponding to\n     * `Code.CANCELLED`.\n     *\n     * Sample code:\n     * ```\n     * $operationsClient = new OperationsClient();\n     * try {\n     *     $name = 'name';\n     *     $operationsClient->cancelOperation($name);\n     * } finally {\n     *     $operationsClient->close();\n     * }\n     * ```\n     *\n     * @param string $name         The name of the operation resource to be cancelled.\n     * @param array  $optionalArgs {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @throws ApiException if the remote call fails\n     */\n    public function cancelOperation($name, array $optionalArgs = [])\n    {\n        $request = new CancelOperationRequest();\n        $requestParamHeaders = [];\n        $request->setName($name);\n        $requestParamHeaders['name'] = $name;\n        $requestParams = new RequestParamsHeaderDescriptor(\n            $requestParamHeaders\n        );\n        $optionalArgs['headers'] = isset($optionalArgs['headers'])\n            ? array_merge($requestParams->getHeader(), $optionalArgs['headers'])\n            : $requestParams->getHeader();\n        return $this->startCall(\n            'CancelOperation',\n            GPBEmpty::class,\n            $optionalArgs,\n            $request\n        )->wait();\n    }\n\n    /**\n     * Deletes a long-running operation. This method indicates that the client is\n     * no longer interested in the operation result. It does not cancel the\n     * operation. If the server doesn't support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.\n     *\n     * Sample code:\n     * ```\n     * $operationsClient = new OperationsClient();\n     * try {\n     *     $name = 'name';\n     *     $operationsClient->deleteOperation($name);\n     * } finally {\n     *     $operationsClient->close();\n     * }\n     * ```\n     *\n     * @param string $name         The name of the operation resource to be deleted.\n     * @param array  $optionalArgs {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @throws ApiException if the remote call fails\n     */\n    public function deleteOperation($name, array $optionalArgs = [])\n    {\n        $request = new DeleteOperationRequest();\n        $requestParamHeaders = [];\n        $request->setName($name);\n        $requestParamHeaders['name'] = $name;\n        $requestParams = new RequestParamsHeaderDescriptor(\n            $requestParamHeaders\n        );\n        $optionalArgs['headers'] = isset($optionalArgs['headers'])\n            ? array_merge($requestParams->getHeader(), $optionalArgs['headers'])\n            : $requestParams->getHeader();\n        return $this->startCall(\n            'DeleteOperation',\n            GPBEmpty::class,\n            $optionalArgs,\n            $request\n        )->wait();\n    }\n\n    /**\n     * Gets the latest state of a long-running operation.  Clients can use this\n     * method to poll the operation result at intervals as recommended by the API\n     * service.\n     *\n     * Sample code:\n     * ```\n     * $operationsClient = new OperationsClient();\n     * try {\n     *     $name = 'name';\n     *     $response = $operationsClient->getOperation($name);\n     * } finally {\n     *     $operationsClient->close();\n     * }\n     * ```\n     *\n     * @param string $name         The name of the operation resource.\n     * @param array  $optionalArgs {\n     *     Optional.\n     *\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @return \\Google\\LongRunning\\Operation\n     *\n     * @throws ApiException if the remote call fails\n     */\n    public function getOperation($name, array $optionalArgs = [])\n    {\n        $request = new GetOperationRequest();\n        $requestParamHeaders = [];\n        $request->setName($name);\n        $requestParamHeaders['name'] = $name;\n        $requestParams = new RequestParamsHeaderDescriptor(\n            $requestParamHeaders\n        );\n        $optionalArgs['headers'] = isset($optionalArgs['headers'])\n            ? array_merge($requestParams->getHeader(), $optionalArgs['headers'])\n            : $requestParams->getHeader();\n        return $this->startCall(\n            'GetOperation',\n            Operation::class,\n            $optionalArgs,\n            $request\n        )->wait();\n    }\n\n    /**\n     * Lists operations that match the specified filter in the request. If the\n     * server doesn't support this method, it returns `UNIMPLEMENTED`.\n     *\n     * Sample code:\n     * ```\n     * $operationsClient = new OperationsClient();\n     * try {\n     *     $name = 'name';\n     *     $filter = 'filter';\n     *     // Iterate over pages of elements\n     *     $pagedResponse = $operationsClient->listOperations($name, $filter);\n     *     foreach ($pagedResponse->iteratePages() as $page) {\n     *         foreach ($page as $element) {\n     *             // doSomethingWith($element);\n     *         }\n     *     }\n     *     // Alternatively:\n     *     // Iterate through all elements\n     *     $pagedResponse = $operationsClient->listOperations($name, $filter);\n     *     foreach ($pagedResponse->iterateAllElements() as $element) {\n     *         // doSomethingWith($element);\n     *     }\n     * } finally {\n     *     $operationsClient->close();\n     * }\n     * ```\n     *\n     * @param string $name         The name of the operation's parent resource.\n     * @param string $filter       The standard list filter.\n     * @param array  $optionalArgs {\n     *     Optional.\n     *\n     *     @type int $pageSize\n     *           The maximum number of resources contained in the underlying API\n     *           response. The API may return fewer values in a page, even if\n     *           there are additional values to be retrieved.\n     *     @type string $pageToken\n     *           A page token is used to specify a page of values to be returned.\n     *           If no page token is specified (the default), the first page\n     *           of values will be returned. Any page token used here must have\n     *           been generated by a previous call to the API.\n     *     @type bool $returnPartialSuccess\n     *           When set to `true`, operations that are reachable are returned as normal,\n     *           and those that are unreachable are returned in the\n     *           [ListOperationsResponse.unreachable] field.\n     *\n     *           This can only be `true` when reading across collections e.g. when `parent`\n     *           is set to `\"projects/example/locations/-\"`.\n     *\n     *           This field is not by default supported and will result in an\n     *           `UNIMPLEMENTED` error if set unless explicitly documented otherwise in\n     *           service or product specific documentation.\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @return \\Google\\ApiCore\\PagedListResponse\n     *\n     * @throws ApiException if the remote call fails\n     */\n    public function listOperations($name, $filter, array $optionalArgs = [])\n    {\n        $request = new ListOperationsRequest();\n        $requestParamHeaders = [];\n        $request->setName($name);\n        $request->setFilter($filter);\n        $requestParamHeaders['name'] = $name;\n        if (isset($optionalArgs['pageSize'])) {\n            $request->setPageSize($optionalArgs['pageSize']);\n        }\n\n        if (isset($optionalArgs['pageToken'])) {\n            $request->setPageToken($optionalArgs['pageToken']);\n        }\n\n        if (isset($optionalArgs['returnPartialSuccess'])) {\n            $request->setReturnPartialSuccess(\n                $optionalArgs['returnPartialSuccess']\n            );\n        }\n\n        $requestParams = new RequestParamsHeaderDescriptor(\n            $requestParamHeaders\n        );\n        $optionalArgs['headers'] = isset($optionalArgs['headers'])\n            ? array_merge($requestParams->getHeader(), $optionalArgs['headers'])\n            : $requestParams->getHeader();\n        return $this->getPagedListResponse(\n            'ListOperations',\n            $optionalArgs,\n            ListOperationsResponse::class,\n            $request\n        );\n    }\n\n    /**\n     * Waits until the specified long-running operation is done or reaches at most\n     * a specified timeout, returning the latest state.  If the operation is\n     * already done, the latest state is immediately returned.  If the timeout\n     * specified is greater than the default HTTP/RPC timeout, the HTTP/RPC\n     * timeout is used.  If the server does not support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.\n     * Note that this method is on a best-effort basis.  It may return the latest\n     * state before the specified timeout (including immediately), meaning even an\n     * immediate response is no guarantee that the operation is done.\n     *\n     * Sample code:\n     * ```\n     * $operationsClient = new OperationsClient();\n     * try {\n     *     $response = $operationsClient->waitOperation();\n     * } finally {\n     *     $operationsClient->close();\n     * }\n     * ```\n     *\n     * @param array $optionalArgs {\n     *     Optional.\n     *\n     *     @type string $name\n     *           The name of the operation resource to wait on.\n     *     @type Duration $timeout\n     *           The maximum duration to wait before timing out. If left blank, the wait\n     *           will be at most the time permitted by the underlying HTTP/RPC protocol.\n     *           If RPC context deadline is also specified, the shorter one will be used.\n     *     @type RetrySettings|array $retrySettings\n     *           Retry settings to use for this call. Can be a {@see RetrySettings} object, or an\n     *           associative array of retry settings parameters. See the documentation on\n     *           {@see RetrySettings} for example usage.\n     * }\n     *\n     * @return \\Google\\LongRunning\\Operation\n     *\n     * @throws ApiException if the remote call fails\n     */\n    public function waitOperation(array $optionalArgs = [])\n    {\n        $request = new WaitOperationRequest();\n        if (isset($optionalArgs['name'])) {\n            $request->setName($optionalArgs['name']);\n        }\n\n        if (isset($optionalArgs['timeout'])) {\n            $request->setTimeout($optionalArgs['timeout']);\n        }\n\n        return $this->startCall(\n            'WaitOperation',\n            Operation::class,\n            $optionalArgs,\n            $request\n        )->wait();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/GetOperationRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for\n * [Operations.GetOperation][google.longrunning.Operations.GetOperation].\n *\n * Generated from protobuf message <code>google.longrunning.GetOperationRequest</code>\n */\nclass GetOperationRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the operation resource.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    private $name = '';\n\n    /**\n     * @param string $name The name of the operation resource.\n     *\n     * @return \\Google\\LongRunning\\GetOperationRequest\n     *\n     * @experimental\n     */\n    public static function build(string $name): self\n    {\n        return (new self())\n            ->setName($name);\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the operation resource.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the operation resource.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the operation resource.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/ListOperationsRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for\n * [Operations.ListOperations][google.longrunning.Operations.ListOperations].\n *\n * Generated from protobuf message <code>google.longrunning.ListOperationsRequest</code>\n */\nclass ListOperationsRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the operation's parent resource.\n     *\n     * Generated from protobuf field <code>string name = 4;</code>\n     */\n    private $name = '';\n    /**\n     * The standard list filter.\n     *\n     * Generated from protobuf field <code>string filter = 1;</code>\n     */\n    private $filter = '';\n    /**\n     * The standard list page size.\n     *\n     * Generated from protobuf field <code>int32 page_size = 2;</code>\n     */\n    private $page_size = 0;\n    /**\n     * The standard list page token.\n     *\n     * Generated from protobuf field <code>string page_token = 3;</code>\n     */\n    private $page_token = '';\n    /**\n     * When set to `true`, operations that are reachable are returned as normal,\n     * and those that are unreachable are returned in the\n     * [ListOperationsResponse.unreachable] field.\n     * This can only be `true` when reading across collections e.g. when `parent`\n     * is set to `\"projects/example/locations/-\"`.\n     * This field is not by default supported and will result in an\n     * `UNIMPLEMENTED` error if set unless explicitly documented otherwise in\n     * service or product specific documentation.\n     *\n     * Generated from protobuf field <code>bool return_partial_success = 5;</code>\n     */\n    private $return_partial_success = false;\n\n    /**\n     * @param string $name   The name of the operation's parent resource.\n     * @param string $filter The standard list filter.\n     *\n     * @return \\Google\\LongRunning\\ListOperationsRequest\n     *\n     * @experimental\n     */\n    public static function build(string $name, string $filter): self\n    {\n        return (new self())\n            ->setName($name)\n            ->setFilter($filter);\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the operation's parent resource.\n     *     @type string $filter\n     *           The standard list filter.\n     *     @type int $page_size\n     *           The standard list page size.\n     *     @type string $page_token\n     *           The standard list page token.\n     *     @type bool $return_partial_success\n     *           When set to `true`, operations that are reachable are returned as normal,\n     *           and those that are unreachable are returned in the\n     *           [ListOperationsResponse.unreachable] field.\n     *           This can only be `true` when reading across collections e.g. when `parent`\n     *           is set to `\"projects/example/locations/-\"`.\n     *           This field is not by default supported and will result in an\n     *           `UNIMPLEMENTED` error if set unless explicitly documented otherwise in\n     *           service or product specific documentation.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the operation's parent resource.\n     *\n     * Generated from protobuf field <code>string name = 4;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the operation's parent resource.\n     *\n     * Generated from protobuf field <code>string name = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The standard list filter.\n     *\n     * Generated from protobuf field <code>string filter = 1;</code>\n     * @return string\n     */\n    public function getFilter()\n    {\n        return $this->filter;\n    }\n\n    /**\n     * The standard list filter.\n     *\n     * Generated from protobuf field <code>string filter = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setFilter($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->filter = $var;\n\n        return $this;\n    }\n\n    /**\n     * The standard list page size.\n     *\n     * Generated from protobuf field <code>int32 page_size = 2;</code>\n     * @return int\n     */\n    public function getPageSize()\n    {\n        return $this->page_size;\n    }\n\n    /**\n     * The standard list page size.\n     *\n     * Generated from protobuf field <code>int32 page_size = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setPageSize($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->page_size = $var;\n\n        return $this;\n    }\n\n    /**\n     * The standard list page token.\n     *\n     * Generated from protobuf field <code>string page_token = 3;</code>\n     * @return string\n     */\n    public function getPageToken()\n    {\n        return $this->page_token;\n    }\n\n    /**\n     * The standard list page token.\n     *\n     * Generated from protobuf field <code>string page_token = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPageToken($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->page_token = $var;\n\n        return $this;\n    }\n\n    /**\n     * When set to `true`, operations that are reachable are returned as normal,\n     * and those that are unreachable are returned in the\n     * [ListOperationsResponse.unreachable] field.\n     * This can only be `true` when reading across collections e.g. when `parent`\n     * is set to `\"projects/example/locations/-\"`.\n     * This field is not by default supported and will result in an\n     * `UNIMPLEMENTED` error if set unless explicitly documented otherwise in\n     * service or product specific documentation.\n     *\n     * Generated from protobuf field <code>bool return_partial_success = 5;</code>\n     * @return bool\n     */\n    public function getReturnPartialSuccess()\n    {\n        return $this->return_partial_success;\n    }\n\n    /**\n     * When set to `true`, operations that are reachable are returned as normal,\n     * and those that are unreachable are returned in the\n     * [ListOperationsResponse.unreachable] field.\n     * This can only be `true` when reading across collections e.g. when `parent`\n     * is set to `\"projects/example/locations/-\"`.\n     * This field is not by default supported and will result in an\n     * `UNIMPLEMENTED` error if set unless explicitly documented otherwise in\n     * service or product specific documentation.\n     *\n     * Generated from protobuf field <code>bool return_partial_success = 5;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setReturnPartialSuccess($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->return_partial_success = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/ListOperationsResponse.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The response message for\n * [Operations.ListOperations][google.longrunning.Operations.ListOperations].\n *\n * Generated from protobuf message <code>google.longrunning.ListOperationsResponse</code>\n */\nclass ListOperationsResponse extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A list of operations that matches the specified filter in the request.\n     *\n     * Generated from protobuf field <code>repeated .google.longrunning.Operation operations = 1;</code>\n     */\n    private $operations;\n    /**\n     * The standard List next-page token.\n     *\n     * Generated from protobuf field <code>string next_page_token = 2;</code>\n     */\n    private $next_page_token = '';\n    /**\n     * Unordered list. Unreachable resources. Populated when the request sets\n     * `ListOperationsRequest.return_partial_success` and reads across\n     * collections e.g. when attempting to list all resources across all supported\n     * locations.\n     *\n     * Generated from protobuf field <code>repeated string unreachable = 3 [(.google.api.field_behavior) = UNORDERED_LIST];</code>\n     */\n    private $unreachable;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array<\\Google\\LongRunning\\Operation>|\\Google\\Protobuf\\Internal\\RepeatedField $operations\n     *           A list of operations that matches the specified filter in the request.\n     *     @type string $next_page_token\n     *           The standard List next-page token.\n     *     @type array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $unreachable\n     *           Unordered list. Unreachable resources. Populated when the request sets\n     *           `ListOperationsRequest.return_partial_success` and reads across\n     *           collections e.g. when attempting to list all resources across all supported\n     *           locations.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A list of operations that matches the specified filter in the request.\n     *\n     * Generated from protobuf field <code>repeated .google.longrunning.Operation operations = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getOperations()\n    {\n        return $this->operations;\n    }\n\n    /**\n     * A list of operations that matches the specified filter in the request.\n     *\n     * Generated from protobuf field <code>repeated .google.longrunning.Operation operations = 1;</code>\n     * @param array<\\Google\\LongRunning\\Operation>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setOperations($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\LongRunning\\Operation::class);\n        $this->operations = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The standard List next-page token.\n     *\n     * Generated from protobuf field <code>string next_page_token = 2;</code>\n     * @return string\n     */\n    public function getNextPageToken()\n    {\n        return $this->next_page_token;\n    }\n\n    /**\n     * The standard List next-page token.\n     *\n     * Generated from protobuf field <code>string next_page_token = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNextPageToken($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->next_page_token = $var;\n\n        return $this;\n    }\n\n    /**\n     * Unordered list. Unreachable resources. Populated when the request sets\n     * `ListOperationsRequest.return_partial_success` and reads across\n     * collections e.g. when attempting to list all resources across all supported\n     * locations.\n     *\n     * Generated from protobuf field <code>repeated string unreachable = 3 [(.google.api.field_behavior) = UNORDERED_LIST];</code>\n     * @return \\Google\\Protobuf\\Internal\\RepeatedField\n     */\n    public function getUnreachable()\n    {\n        return $this->unreachable;\n    }\n\n    /**\n     * Unordered list. Unreachable resources. Populated when the request sets\n     * `ListOperationsRequest.return_partial_success` and reads across\n     * collections e.g. when attempting to list all resources across all supported\n     * locations.\n     *\n     * Generated from protobuf field <code>repeated string unreachable = 3 [(.google.api.field_behavior) = UNORDERED_LIST];</code>\n     * @param array<string>|\\Google\\Protobuf\\Internal\\RepeatedField $var\n     * @return $this\n     */\n    public function setUnreachable($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->unreachable = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/Operation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * This resource represents a long-running operation that is the result of a\n * network API call.\n *\n * Generated from protobuf message <code>google.longrunning.Operation</code>\n */\nclass Operation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The server-assigned name, which is only unique within the same service that\n     * originally returns it. If you use the default HTTP mapping, the\n     * `name` should be a resource name ending with `operations/{unique_id}`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    private $name = '';\n    /**\n     * Service-specific metadata associated with the operation.  It typically\n     * contains progress information and common metadata such as create time.\n     * Some services might not provide such metadata.  Any method that returns a\n     * long-running operation should document the metadata type, if any.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any metadata = 2;</code>\n     */\n    private $metadata = null;\n    /**\n     * If the value is `false`, it means the operation is still in progress.\n     * If `true`, the operation is completed, and either `error` or `response` is\n     * available.\n     *\n     * Generated from protobuf field <code>bool done = 3;</code>\n     */\n    private $done = false;\n    protected $result;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The server-assigned name, which is only unique within the same service that\n     *           originally returns it. If you use the default HTTP mapping, the\n     *           `name` should be a resource name ending with `operations/{unique_id}`.\n     *     @type \\Google\\Protobuf\\Any $metadata\n     *           Service-specific metadata associated with the operation.  It typically\n     *           contains progress information and common metadata such as create time.\n     *           Some services might not provide such metadata.  Any method that returns a\n     *           long-running operation should document the metadata type, if any.\n     *     @type bool $done\n     *           If the value is `false`, it means the operation is still in progress.\n     *           If `true`, the operation is completed, and either `error` or `response` is\n     *           available.\n     *     @type \\Google\\Rpc\\Status $error\n     *           The error result of the operation in case of failure or cancellation.\n     *     @type \\Google\\Protobuf\\Any $response\n     *           The normal, successful response of the operation.  If the original\n     *           method returns no data on success, such as `Delete`, the response is\n     *           `google.protobuf.Empty`.  If the original method is standard\n     *           `Get`/`Create`/`Update`, the response should be the resource.  For other\n     *           methods, the response should have the type `XxxResponse`, where `Xxx`\n     *           is the original method name.  For example, if the original method name\n     *           is `TakeSnapshot()`, the inferred response type is\n     *           `TakeSnapshotResponse`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The server-assigned name, which is only unique within the same service that\n     * originally returns it. If you use the default HTTP mapping, the\n     * `name` should be a resource name ending with `operations/{unique_id}`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The server-assigned name, which is only unique within the same service that\n     * originally returns it. If you use the default HTTP mapping, the\n     * `name` should be a resource name ending with `operations/{unique_id}`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Service-specific metadata associated with the operation.  It typically\n     * contains progress information and common metadata such as create time.\n     * Some services might not provide such metadata.  Any method that returns a\n     * long-running operation should document the metadata type, if any.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any metadata = 2;</code>\n     * @return \\Google\\Protobuf\\Any|null\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n\n    public function hasMetadata()\n    {\n        return isset($this->metadata);\n    }\n\n    public function clearMetadata()\n    {\n        unset($this->metadata);\n    }\n\n    /**\n     * Service-specific metadata associated with the operation.  It typically\n     * contains progress information and common metadata such as create time.\n     * Some services might not provide such metadata.  Any method that returns a\n     * long-running operation should document the metadata type, if any.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any metadata = 2;</code>\n     * @param \\Google\\Protobuf\\Any $var\n     * @return $this\n     */\n    public function setMetadata($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Any::class);\n        $this->metadata = $var;\n\n        return $this;\n    }\n\n    /**\n     * If the value is `false`, it means the operation is still in progress.\n     * If `true`, the operation is completed, and either `error` or `response` is\n     * available.\n     *\n     * Generated from protobuf field <code>bool done = 3;</code>\n     * @return bool\n     */\n    public function getDone()\n    {\n        return $this->done;\n    }\n\n    /**\n     * If the value is `false`, it means the operation is still in progress.\n     * If `true`, the operation is completed, and either `error` or `response` is\n     * available.\n     *\n     * Generated from protobuf field <code>bool done = 3;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDone($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->done = $var;\n\n        return $this;\n    }\n\n    /**\n     * The error result of the operation in case of failure or cancellation.\n     *\n     * Generated from protobuf field <code>.google.rpc.Status error = 4;</code>\n     * @return \\Google\\Rpc\\Status|null\n     */\n    public function getError()\n    {\n        return $this->readOneof(4);\n    }\n\n    public function hasError()\n    {\n        return $this->hasOneof(4);\n    }\n\n    /**\n     * The error result of the operation in case of failure or cancellation.\n     *\n     * Generated from protobuf field <code>.google.rpc.Status error = 4;</code>\n     * @param \\Google\\Rpc\\Status $var\n     * @return $this\n     */\n    public function setError($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Rpc\\Status::class);\n        $this->writeOneof(4, $var);\n\n        return $this;\n    }\n\n    /**\n     * The normal, successful response of the operation.  If the original\n     * method returns no data on success, such as `Delete`, the response is\n     * `google.protobuf.Empty`.  If the original method is standard\n     * `Get`/`Create`/`Update`, the response should be the resource.  For other\n     * methods, the response should have the type `XxxResponse`, where `Xxx`\n     * is the original method name.  For example, if the original method name\n     * is `TakeSnapshot()`, the inferred response type is\n     * `TakeSnapshotResponse`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any response = 5;</code>\n     * @return \\Google\\Protobuf\\Any|null\n     */\n    public function getResponse()\n    {\n        return $this->readOneof(5);\n    }\n\n    public function hasResponse()\n    {\n        return $this->hasOneof(5);\n    }\n\n    /**\n     * The normal, successful response of the operation.  If the original\n     * method returns no data on success, such as `Delete`, the response is\n     * `google.protobuf.Empty`.  If the original method is standard\n     * `Get`/`Create`/`Update`, the response should be the resource.  For other\n     * methods, the response should have the type `XxxResponse`, where `Xxx`\n     * is the original method name.  For example, if the original method name\n     * is `TakeSnapshot()`, the inferred response type is\n     * `TakeSnapshotResponse`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any response = 5;</code>\n     * @param \\Google\\Protobuf\\Any $var\n     * @return $this\n     */\n    public function setResponse($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Any::class);\n        $this->writeOneof(5, $var);\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getResult()\n    {\n        return $this->whichOneof(\"result\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/OperationInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * A message representing the message types used by a long-running operation.\n * Example:\n *     rpc Export(ExportRequest) returns (google.longrunning.Operation) {\n *       option (google.longrunning.operation_info) = {\n *         response_type: \"ExportResponse\"\n *         metadata_type: \"ExportMetadata\"\n *       };\n *     }\n *\n * Generated from protobuf message <code>google.longrunning.OperationInfo</code>\n */\nclass OperationInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Required. The message name of the primary return type for this\n     * long-running operation.\n     * This type will be used to deserialize the LRO's response.\n     * If the response is in a different package from the rpc, a fully-qualified\n     * message name must be used (e.g. `google.protobuf.Struct`).\n     * Note: Altering this value constitutes a breaking change.\n     *\n     * Generated from protobuf field <code>string response_type = 1;</code>\n     */\n    private $response_type = '';\n    /**\n     * Required. The message name of the metadata type for this long-running\n     * operation.\n     * If the response is in a different package from the rpc, a fully-qualified\n     * message name must be used (e.g. `google.protobuf.Struct`).\n     * Note: Altering this value constitutes a breaking change.\n     *\n     * Generated from protobuf field <code>string metadata_type = 2;</code>\n     */\n    private $metadata_type = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $response_type\n     *           Required. The message name of the primary return type for this\n     *           long-running operation.\n     *           This type will be used to deserialize the LRO's response.\n     *           If the response is in a different package from the rpc, a fully-qualified\n     *           message name must be used (e.g. `google.protobuf.Struct`).\n     *           Note: Altering this value constitutes a breaking change.\n     *     @type string $metadata_type\n     *           Required. The message name of the metadata type for this long-running\n     *           operation.\n     *           If the response is in a different package from the rpc, a fully-qualified\n     *           message name must be used (e.g. `google.protobuf.Struct`).\n     *           Note: Altering this value constitutes a breaking change.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Required. The message name of the primary return type for this\n     * long-running operation.\n     * This type will be used to deserialize the LRO's response.\n     * If the response is in a different package from the rpc, a fully-qualified\n     * message name must be used (e.g. `google.protobuf.Struct`).\n     * Note: Altering this value constitutes a breaking change.\n     *\n     * Generated from protobuf field <code>string response_type = 1;</code>\n     * @return string\n     */\n    public function getResponseType()\n    {\n        return $this->response_type;\n    }\n\n    /**\n     * Required. The message name of the primary return type for this\n     * long-running operation.\n     * This type will be used to deserialize the LRO's response.\n     * If the response is in a different package from the rpc, a fully-qualified\n     * message name must be used (e.g. `google.protobuf.Struct`).\n     * Note: Altering this value constitutes a breaking change.\n     *\n     * Generated from protobuf field <code>string response_type = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResponseType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->response_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Required. The message name of the metadata type for this long-running\n     * operation.\n     * If the response is in a different package from the rpc, a fully-qualified\n     * message name must be used (e.g. `google.protobuf.Struct`).\n     * Note: Altering this value constitutes a breaking change.\n     *\n     * Generated from protobuf field <code>string metadata_type = 2;</code>\n     * @return string\n     */\n    public function getMetadataType()\n    {\n        return $this->metadata_type;\n    }\n\n    /**\n     * Required. The message name of the metadata type for this long-running\n     * operation.\n     * If the response is in a different package from the rpc, a fully-qualified\n     * message name must be used (e.g. `google.protobuf.Struct`).\n     * Note: Altering this value constitutes a breaking change.\n     *\n     * Generated from protobuf field <code>string metadata_type = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setMetadataType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->metadata_type = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/OperationsClient.php",
    "content": "<?php\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * GENERATED CODE WARNING\n * Generated by gapic-generator-php from the file\n * https://github.com/googleapis/googleapis/blob/master/google/longrunning/operations.proto\n * Updates to the above are reflected here through a refresh process.\n */\n\nnamespace Google\\LongRunning;\n\nuse Google\\LongRunning\\Gapic\\OperationsGapicClient;\n\n/** {@inheritdoc} */\nclass OperationsClient extends OperationsGapicClient\n{\n    // This class is intentionally empty, and is intended to hold manual additions to\n    // the generated {@see OperationsGapicClient} class.\n}\n\nclass_alias('Google\\LongRunning\\OperationsClient', 'Google\\ApiCore\\LongRunning\\OperationsClient');\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/OperationsGrpcClient.php",
    "content": "<?php\n// GENERATED CODE -- DO NOT EDIT!\n\n// Original file comments:\n// Copyright 2020 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nnamespace Google\\LongRunning;\n\n/**\n * Manages long-running operations with an API service.\n *\n * When an API method normally takes long time to complete, it can be designed\n * to return [Operation][google.longrunning.Operation] to the client, and the client can use this\n * interface to receive the real response asynchronously by polling the\n * operation resource, or pass the operation resource to another API (such as\n * Google Cloud Pub/Sub API) to receive the response.  Any API service that\n * returns long-running operations should implement the `Operations` interface\n * so developers can have a consistent client experience.\n */\nclass OperationsGrpcClient extends \\Grpc\\BaseStub {\n\n    /**\n     * @param string $hostname hostname\n     * @param array $opts channel options\n     * @param \\Grpc\\Channel $channel (optional) re-use channel object\n     */\n    public function __construct($hostname, $opts, $channel = null) {\n        parent::__construct($hostname, $opts, $channel);\n    }\n\n    /**\n     * Lists operations that match the specified filter in the request. If the\n     * server doesn't support this method, it returns `UNIMPLEMENTED`.\n     *\n     * NOTE: the `name` binding allows API services to override the binding\n     * to use different resource name schemes, such as `users/&#42;/operations`. To\n     * override the binding, API services can add a binding such as\n     * `\"/v1/{name=users/*}/operations\"` to their service configuration.\n     * For backwards compatibility, the default name includes the operations\n     * collection id, however overriding users must ensure the name binding\n     * is the parent resource, without the operations collection id.\n     * @param \\Google\\LongRunning\\ListOperationsRequest $argument input argument\n     * @param array $metadata metadata\n     * @param array $options call options\n     * @return \\Grpc\\UnaryCall\n     */\n    public function ListOperations(\\Google\\LongRunning\\ListOperationsRequest $argument,\n      $metadata = [], $options = []) {\n        return $this->_simpleRequest('/google.longrunning.Operations/ListOperations',\n        $argument,\n        ['\\Google\\LongRunning\\ListOperationsResponse', 'decode'],\n        $metadata, $options);\n    }\n\n    /**\n     * Gets the latest state of a long-running operation.  Clients can use this\n     * method to poll the operation result at intervals as recommended by the API\n     * service.\n     * @param \\Google\\LongRunning\\GetOperationRequest $argument input argument\n     * @param array $metadata metadata\n     * @param array $options call options\n     * @return \\Grpc\\UnaryCall\n     */\n    public function GetOperation(\\Google\\LongRunning\\GetOperationRequest $argument,\n      $metadata = [], $options = []) {\n        return $this->_simpleRequest('/google.longrunning.Operations/GetOperation',\n        $argument,\n        ['\\Google\\LongRunning\\Operation', 'decode'],\n        $metadata, $options);\n    }\n\n    /**\n     * Deletes a long-running operation. This method indicates that the client is\n     * no longer interested in the operation result. It does not cancel the\n     * operation. If the server doesn't support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.\n     * @param \\Google\\LongRunning\\DeleteOperationRequest $argument input argument\n     * @param array $metadata metadata\n     * @param array $options call options\n     * @return \\Grpc\\UnaryCall\n     */\n    public function DeleteOperation(\\Google\\LongRunning\\DeleteOperationRequest $argument,\n      $metadata = [], $options = []) {\n        return $this->_simpleRequest('/google.longrunning.Operations/DeleteOperation',\n        $argument,\n        ['\\Google\\Protobuf\\GPBEmpty', 'decode'],\n        $metadata, $options);\n    }\n\n    /**\n     * Starts asynchronous cancellation on a long-running operation.  The server\n     * makes a best effort to cancel the operation, but success is not\n     * guaranteed.  If the server doesn't support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.  Clients can use\n     * [Operations.GetOperation][google.longrunning.Operations.GetOperation] or\n     * other methods to check whether the cancellation succeeded or whether the\n     * operation completed despite cancellation. On successful cancellation,\n     * the operation is not deleted; instead, it becomes an operation with\n     * an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1,\n     * corresponding to `Code.CANCELLED`.\n     * @param \\Google\\LongRunning\\CancelOperationRequest $argument input argument\n     * @param array $metadata metadata\n     * @param array $options call options\n     * @return \\Grpc\\UnaryCall\n     */\n    public function CancelOperation(\\Google\\LongRunning\\CancelOperationRequest $argument,\n      $metadata = [], $options = []) {\n        return $this->_simpleRequest('/google.longrunning.Operations/CancelOperation',\n        $argument,\n        ['\\Google\\Protobuf\\GPBEmpty', 'decode'],\n        $metadata, $options);\n    }\n\n    /**\n     * Waits until the specified long-running operation is done or reaches at most\n     * a specified timeout, returning the latest state.  If the operation is\n     * already done, the latest state is immediately returned.  If the timeout\n     * specified is greater than the default HTTP/RPC timeout, the HTTP/RPC\n     * timeout is used.  If the server does not support this method, it returns\n     * `google.rpc.Code.UNIMPLEMENTED`.\n     * Note that this method is on a best-effort basis.  It may return the latest\n     * state before the specified timeout (including immediately), meaning even an\n     * immediate response is no guarantee that the operation is done.\n     * @param \\Google\\LongRunning\\WaitOperationRequest $argument input argument\n     * @param array $metadata metadata\n     * @param array $options call options\n     * @return \\Grpc\\UnaryCall\n     */\n    public function WaitOperation(\\Google\\LongRunning\\WaitOperationRequest $argument,\n      $metadata = [], $options = []) {\n        return $this->_simpleRequest('/google.longrunning.Operations/WaitOperation',\n        $argument,\n        ['\\Google\\LongRunning\\Operation', 'decode'],\n        $metadata, $options);\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/WaitOperationRequest.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/longrunning/operations.proto\n\nnamespace Google\\LongRunning;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\RepeatedField;\nuse Google\\Protobuf\\Internal\\GPBUtil;\n\n/**\n * The request message for\n * [Operations.WaitOperation][google.longrunning.Operations.WaitOperation].\n *\n * Generated from protobuf message <code>google.longrunning.WaitOperationRequest</code>\n */\nclass WaitOperationRequest extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The name of the operation resource to wait on.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    private $name = '';\n    /**\n     * The maximum duration to wait before timing out. If left blank, the wait\n     * will be at most the time permitted by the underlying HTTP/RPC protocol.\n     * If RPC context deadline is also specified, the shorter one will be used.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration timeout = 2;</code>\n     */\n    private $timeout = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The name of the operation resource to wait on.\n     *     @type \\Google\\Protobuf\\Duration $timeout\n     *           The maximum duration to wait before timing out. If left blank, the wait\n     *           will be at most the time permitted by the underlying HTTP/RPC protocol.\n     *           If RPC context deadline is also specified, the shorter one will be used.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Longrunning\\Operations::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The name of the operation resource to wait on.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The name of the operation resource to wait on.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The maximum duration to wait before timing out. If left blank, the wait\n     * will be at most the time permitted by the underlying HTTP/RPC protocol.\n     * If RPC context deadline is also specified, the shorter one will be used.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration timeout = 2;</code>\n     * @return \\Google\\Protobuf\\Duration|null\n     */\n    public function getTimeout()\n    {\n        return $this->timeout;\n    }\n\n    public function hasTimeout()\n    {\n        return isset($this->timeout);\n    }\n\n    public function clearTimeout()\n    {\n        unset($this->timeout);\n    }\n\n    /**\n     * The maximum duration to wait before timing out. If left blank, the wait\n     * will be at most the time permitted by the underlying HTTP/RPC protocol.\n     * If RPC context deadline is also specified, the shorter one will be used.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Duration timeout = 2;</code>\n     * @param \\Google\\Protobuf\\Duration $var\n     * @return $this\n     */\n    public function setTimeout($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Duration::class);\n        $this->timeout = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/resources/operations_client_config.json",
    "content": "{\n    \"interfaces\": {\n        \"google.longrunning.Operations\": {\n            \"retry_codes\": {\n                \"no_retry_codes\": [],\n                \"retry_policy_1_codes\": [\n                    \"UNAVAILABLE\"\n                ]\n            },\n            \"retry_params\": {\n                \"no_retry_params\": {\n                    \"initial_retry_delay_millis\": 0,\n                    \"retry_delay_multiplier\": 0.0,\n                    \"max_retry_delay_millis\": 0,\n                    \"initial_rpc_timeout_millis\": 0,\n                    \"rpc_timeout_multiplier\": 1.0,\n                    \"max_rpc_timeout_millis\": 0,\n                    \"total_timeout_millis\": 0\n                },\n                \"retry_policy_1_params\": {\n                    \"initial_retry_delay_millis\": 500,\n                    \"retry_delay_multiplier\": 2.0,\n                    \"max_retry_delay_millis\": 10000,\n                    \"initial_rpc_timeout_millis\": 10000,\n                    \"rpc_timeout_multiplier\": 1.0,\n                    \"max_rpc_timeout_millis\": 10000,\n                    \"total_timeout_millis\": 10000\n                }\n            },\n            \"methods\": {\n                \"CancelOperation\": {\n                    \"timeout_millis\": 10000,\n                    \"retry_codes_name\": \"retry_policy_1_codes\",\n                    \"retry_params_name\": \"retry_policy_1_params\"\n                },\n                \"DeleteOperation\": {\n                    \"timeout_millis\": 10000,\n                    \"retry_codes_name\": \"retry_policy_1_codes\",\n                    \"retry_params_name\": \"retry_policy_1_params\"\n                },\n                \"GetOperation\": {\n                    \"timeout_millis\": 10000,\n                    \"retry_codes_name\": \"retry_policy_1_codes\",\n                    \"retry_params_name\": \"retry_policy_1_params\"\n                },\n                \"ListOperations\": {\n                    \"timeout_millis\": 10000,\n                    \"retry_codes_name\": \"retry_policy_1_codes\",\n                    \"retry_params_name\": \"retry_policy_1_params\"\n                },\n                \"WaitOperation\": {\n                    \"timeout_millis\": 60000,\n                    \"retry_codes_name\": \"no_retry_codes\",\n                    \"retry_params_name\": \"no_retry_params\"\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/resources/operations_descriptor_config.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * GENERATED CODE WARNING\n * This file was automatically generated - do not edit!\n */\n\nreturn [\n    'interfaces' => [\n        'google.longrunning.Operations' => [\n            'CancelOperation' => [\n                'callType' => \\Google\\ApiCore\\Call::UNARY_CALL,\n                'responseType' => 'Google\\Protobuf\\GPBEmpty',\n                'headerParams' => [\n                    [\n                        'keyName' => 'name',\n                        'fieldAccessors' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'DeleteOperation' => [\n                'callType' => \\Google\\ApiCore\\Call::UNARY_CALL,\n                'responseType' => 'Google\\Protobuf\\GPBEmpty',\n                'headerParams' => [\n                    [\n                        'keyName' => 'name',\n                        'fieldAccessors' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'GetOperation' => [\n                'callType' => \\Google\\ApiCore\\Call::UNARY_CALL,\n                'responseType' => 'Google\\LongRunning\\Operation',\n                'headerParams' => [\n                    [\n                        'keyName' => 'name',\n                        'fieldAccessors' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'ListOperations' => [\n                'pageStreaming' => [\n                    'requestPageTokenGetMethod' => 'getPageToken',\n                    'requestPageTokenSetMethod' => 'setPageToken',\n                    'requestPageSizeGetMethod' => 'getPageSize',\n                    'requestPageSizeSetMethod' => 'setPageSize',\n                    'responsePageTokenGetMethod' => 'getNextPageToken',\n                    'resourcesGetMethod' => 'getOperations',\n                ],\n                'callType' => \\Google\\ApiCore\\Call::PAGINATED_CALL,\n                'responseType' => 'Google\\LongRunning\\ListOperationsResponse',\n                'headerParams' => [\n                    [\n                        'keyName' => 'name',\n                        'fieldAccessors' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'WaitOperation' => [\n                'callType' => \\Google\\ApiCore\\Call::UNARY_CALL,\n                'responseType' => 'Google\\LongRunning\\Operation',\n            ],\n        ],\n    ],\n];\n"
  },
  {
    "path": "lib/Google/vendor/google/longrunning/src/LongRunning/resources/operations_rest_client_config.php",
    "content": "<?php\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * GENERATED CODE WARNING\n * This file was automatically generated - do not edit!\n */\n\nreturn [\n    'interfaces' => [\n        'google.longrunning.Operations' => [\n            'CancelOperation' => [\n                'method' => 'post',\n                'uriTemplate' => '/v1/{name=operations/**}:cancel',\n                'body' => '*',\n                'placeholders' => [\n                    'name' => [\n                        'getters' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'DeleteOperation' => [\n                'method' => 'delete',\n                'uriTemplate' => '/v1/{name=operations/**}',\n                'placeholders' => [\n                    'name' => [\n                        'getters' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'GetOperation' => [\n                'method' => 'get',\n                'uriTemplate' => '/v1/{name=operations/**}',\n                'placeholders' => [\n                    'name' => [\n                        'getters' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n            ],\n            'ListOperations' => [\n                'method' => 'get',\n                'uriTemplate' => '/v1/{name=operations}',\n                'placeholders' => [\n                    'name' => [\n                        'getters' => [\n                            'getName',\n                        ],\n                    ],\n                ],\n                'queryParams' => [\n                    'filter',\n                ],\n            ],\n        ],\n    ],\n];\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2019, Protocol Buffers\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/README.md",
    "content": "# protobuf-php\nThis repository contains only PHP files to support Composer installation. This repository is a mirror of [protobuf](https://github.com/protocolbuffers/protobuf). Any support requests, bug reports, or development contributions should be directed to that project. To install protobuf for PHP, please see https://github.com/protocolbuffers/protobuf/tree/master/php\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/composer.json",
    "content": "{\n  \"name\": \"google/protobuf\",\n  \"type\": \"library\",\n  \"description\": \"proto library for PHP\",\n  \"keywords\": [\"proto\"],\n  \"homepage\": \"https://developers.google.com/protocol-buffers/\",\n  \"license\": \"BSD-3-Clause\",\n  \"require\": {\n    \"php\": \">=8.1.0\"\n  },\n  \"require-dev\": {\n    \"phpunit/phpunit\": \">=5.0.0 <8.5.27\"\n  },\n  \"suggest\": {\n    \"ext-bcmath\": \"Need to support JSON deserialization\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"Google\\\\Protobuf\\\\\": \"src/Google/Protobuf\",\n      \"GPBMetadata\\\\Google\\\\Protobuf\\\\\": \"src/GPBMetadata/Google/Protobuf\"\n    }\n  }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Any.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/any.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Any\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xD4\\x01\\x0A\\x19google/protobuf/any.proto\\x12\\x0Fgoogle.protobuf\\\"&\\x0A\\x03Any\\x12\\x10\\x0A\\x08type_url\\x18\\x01 \\x01(\\x09\\x12\\x0D\\x0A\\x05value\\x18\\x02 \\x01(\\x0CBv\\x0A\\x13com.google.protobufB\\x08AnyProtoP\\x01Z,google.golang.org/protobuf/types/known/anypb\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Api.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/api.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Api\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\SourceContext::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xF3\\x05\\x0A\\x19google/protobuf/api.proto\\x12\\x0Fgoogle.protobuf\\x1A\\x1Agoogle/protobuf/type.proto\\\"\\x92\\x02\\x0A\\x03Api\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12(\\x0A\\x07methods\\x18\\x02 \\x03(\\x0B2\\x17.google.protobuf.Method\\x12(\\x0A\\x07options\\x18\\x03 \\x03(\\x0B2\\x17.google.protobuf.Option\\x12\\x0F\\x0A\\x07version\\x18\\x04 \\x01(\\x09\\x126\\x0A\\x0Esource_context\\x18\\x05 \\x01(\\x0B2\\x1E.google.protobuf.SourceContext\\x12&\\x0A\\x06mixins\\x18\\x06 \\x03(\\x0B2\\x16.google.protobuf.Mixin\\x12'\\x0A\\x06syntax\\x18\\x07 \\x01(\\x0E2\\x17.google.protobuf.Syntax\\x12\\x0F\\x0A\\x07edition\\x18\\x08 \\x01(\\x09\\\"\\xEE\\x01\\x0A\\x06Method\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12\\x18\\x0A\\x10request_type_url\\x18\\x02 \\x01(\\x09\\x12\\x19\\x0A\\x11request_streaming\\x18\\x03 \\x01(\\x08\\x12\\x19\\x0A\\x11response_type_url\\x18\\x04 \\x01(\\x09\\x12\\x1A\\x0A\\x12response_streaming\\x18\\x05 \\x01(\\x08\\x12(\\x0A\\x07options\\x18\\x06 \\x03(\\x0B2\\x17.google.protobuf.Option\\x12+\\x0A\\x06syntax\\x18\\x07 \\x01(\\x0E2\\x17.google.protobuf.SyntaxB\\x02\\x18\\x01\\x12\\x13\\x0A\\x07edition\\x18\\x08 \\x01(\\x09B\\x02\\x18\\x01\\\"#\\x0A\\x05Mixin\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12\\x0C\\x0A\\x04root\\x18\\x02 \\x01(\\x09Bv\\x0A\\x13com.google.protobufB\\x08ApiProtoP\\x01Z,google.golang.org/protobuf/types/known/apipb\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Duration.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/duration.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Duration\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xEB\\x01\\x0A\\x1Egoogle/protobuf/duration.proto\\x12\\x0Fgoogle.protobuf\\\"*\\x0A\\x08Duration\\x12\\x0F\\x0A\\x07seconds\\x18\\x01 \\x01(\\x03\\x12\\x0D\\x0A\\x05nanos\\x18\\x02 \\x01(\\x05B\\x83\\x01\\x0A\\x13com.google.protobufB\\x0DDurationProtoP\\x01Z1google.golang.org/protobuf/types/known/durationpb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/FieldMask.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/field_mask.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass FieldMask\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xDF\\x01\\x0A google/protobuf/field_mask.proto\\x12\\x0Fgoogle.protobuf\\\"\\x1A\\x0A\\x09FieldMask\\x12\\x0D\\x0A\\x05paths\\x18\\x01 \\x03(\\x09B\\x85\\x01\\x0A\\x13com.google.protobufB\\x0EFieldMaskProtoP\\x01Z2google.golang.org/protobuf/types/known/fieldmaskpb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/GPBEmpty.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/empty.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass GPBEmpty\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xBE\\x01\\x0A\\x1Bgoogle/protobuf/empty.proto\\x12\\x0Fgoogle.protobuf\\\"\\x07\\x0A\\x05EmptyB}\\x0A\\x13com.google.protobufB\\x0AEmptyProtoP\\x01Z.google.golang.org/protobuf/types/known/emptypb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace GPBMetadata\\Google\\Protobuf\\Internal;\n\nclass Descriptor\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->addMessage('google.protobuf.internal.FileDescriptorSet', \\Google\\Protobuf\\Internal\\FileDescriptorSet::class)\n            ->repeated('file', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 1, 'google.protobuf.internal.FileDescriptorProto')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FileDescriptorProto', \\Google\\Protobuf\\Internal\\FileDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->optional('package', \\Google\\Protobuf\\Internal\\GPBType::STRING, 2)\n            ->repeated('dependency', \\Google\\Protobuf\\Internal\\GPBType::STRING, 3)\n            ->repeated('public_dependency', \\Google\\Protobuf\\Internal\\GPBType::INT32, 10)\n            ->repeated('weak_dependency', \\Google\\Protobuf\\Internal\\GPBType::INT32, 11)\n            ->repeated('option_dependency', \\Google\\Protobuf\\Internal\\GPBType::STRING, 15)\n            ->repeated('message_type', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 4, 'google.protobuf.internal.DescriptorProto')\n            ->repeated('enum_type', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 5, 'google.protobuf.internal.EnumDescriptorProto')\n            ->repeated('service', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 6, 'google.protobuf.internal.ServiceDescriptorProto')\n            ->repeated('extension', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 7, 'google.protobuf.internal.FieldDescriptorProto')\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 8, 'google.protobuf.internal.FileOptions')\n            ->optional('source_code_info', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 9, 'google.protobuf.internal.SourceCodeInfo')\n            ->optional('syntax', \\Google\\Protobuf\\Internal\\GPBType::STRING, 12)\n            ->optional('edition', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 14, 'google.protobuf.internal.Edition')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.DescriptorProto', \\Google\\Protobuf\\Internal\\DescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->repeated('field', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.FieldDescriptorProto')\n            ->repeated('extension', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 6, 'google.protobuf.internal.FieldDescriptorProto')\n            ->repeated('nested_type', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 3, 'google.protobuf.internal.DescriptorProto')\n            ->repeated('enum_type', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 4, 'google.protobuf.internal.EnumDescriptorProto')\n            ->repeated('extension_range', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 5, 'google.protobuf.internal.DescriptorProto.ExtensionRange')\n            ->repeated('oneof_decl', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 8, 'google.protobuf.internal.OneofDescriptorProto')\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 7, 'google.protobuf.internal.MessageOptions')\n            ->repeated('reserved_range', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 9, 'google.protobuf.internal.DescriptorProto.ReservedRange')\n            ->repeated('reserved_name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 10)\n            ->optional('visibility', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 11, 'google.protobuf.internal.SymbolVisibility')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.DescriptorProto.ExtensionRange', \\Google\\Protobuf\\Internal\\DescriptorProto\\ExtensionRange::class)\n            ->optional('start', \\Google\\Protobuf\\Internal\\GPBType::INT32, 1)\n            ->optional('end', \\Google\\Protobuf\\Internal\\GPBType::INT32, 2)\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 3, 'google.protobuf.internal.ExtensionRangeOptions')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.DescriptorProto.ReservedRange', \\Google\\Protobuf\\Internal\\DescriptorProto\\ReservedRange::class)\n            ->optional('start', \\Google\\Protobuf\\Internal\\GPBType::INT32, 1)\n            ->optional('end', \\Google\\Protobuf\\Internal\\GPBType::INT32, 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.ExtensionRangeOptions', \\Google\\Protobuf\\Internal\\ExtensionRangeOptions::class)\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->repeated('declaration', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.ExtensionRangeOptions.Declaration')\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 50, 'google.protobuf.internal.FeatureSet')\n            ->optional('verification', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 3, 'google.protobuf.internal.ExtensionRangeOptions.VerificationState')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.ExtensionRangeOptions.Declaration', \\Google\\Protobuf\\Internal\\ExtensionRangeOptions\\Declaration::class)\n            ->optional('number', \\Google\\Protobuf\\Internal\\GPBType::INT32, 1)\n            ->optional('full_name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 2)\n            ->optional('type', \\Google\\Protobuf\\Internal\\GPBType::STRING, 3)\n            ->optional('reserved', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 5)\n            ->optional('repeated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 6)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.ExtensionRangeOptions.VerificationState', \\Google\\Protobuf\\Internal\\VerificationState::class)\n            ->value(\"DECLARATION\", 0)\n            ->value(\"UNVERIFIED\", 1)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FieldDescriptorProto', \\Google\\Protobuf\\Internal\\FieldDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->optional('number', \\Google\\Protobuf\\Internal\\GPBType::INT32, 3)\n            ->optional('label', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 4, 'google.protobuf.internal.FieldDescriptorProto.Label')\n            ->optional('type', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 5, 'google.protobuf.internal.FieldDescriptorProto.Type')\n            ->optional('type_name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 6)\n            ->optional('extendee', \\Google\\Protobuf\\Internal\\GPBType::STRING, 2)\n            ->optional('default_value', \\Google\\Protobuf\\Internal\\GPBType::STRING, 7)\n            ->optional('oneof_index', \\Google\\Protobuf\\Internal\\GPBType::INT32, 9)\n            ->optional('json_name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 10)\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 8, 'google.protobuf.internal.FieldOptions')\n            ->optional('proto3_optional', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 17)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FieldDescriptorProto.Type', \\Google\\Protobuf\\Internal\\Type::class)\n            ->value(\"TYPE_DOUBLE\", 1)\n            ->value(\"TYPE_FLOAT\", 2)\n            ->value(\"TYPE_INT64\", 3)\n            ->value(\"TYPE_UINT64\", 4)\n            ->value(\"TYPE_INT32\", 5)\n            ->value(\"TYPE_FIXED64\", 6)\n            ->value(\"TYPE_FIXED32\", 7)\n            ->value(\"TYPE_BOOL\", 8)\n            ->value(\"TYPE_STRING\", 9)\n            ->value(\"TYPE_GROUP\", 10)\n            ->value(\"TYPE_MESSAGE\", 11)\n            ->value(\"TYPE_BYTES\", 12)\n            ->value(\"TYPE_UINT32\", 13)\n            ->value(\"TYPE_ENUM\", 14)\n            ->value(\"TYPE_SFIXED32\", 15)\n            ->value(\"TYPE_SFIXED64\", 16)\n            ->value(\"TYPE_SINT32\", 17)\n            ->value(\"TYPE_SINT64\", 18)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FieldDescriptorProto.Label', \\Google\\Protobuf\\Internal\\Label::class)\n            ->value(\"LABEL_OPTIONAL\", 1)\n            ->value(\"LABEL_REPEATED\", 3)\n            ->value(\"LABEL_REQUIRED\", 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.OneofDescriptorProto', \\Google\\Protobuf\\Internal\\OneofDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.OneofOptions')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.EnumDescriptorProto', \\Google\\Protobuf\\Internal\\EnumDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->repeated('value', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.EnumValueDescriptorProto')\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 3, 'google.protobuf.internal.EnumOptions')\n            ->repeated('reserved_range', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 4, 'google.protobuf.internal.EnumDescriptorProto.EnumReservedRange')\n            ->repeated('reserved_name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 5)\n            ->optional('visibility', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 6, 'google.protobuf.internal.SymbolVisibility')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.EnumDescriptorProto.EnumReservedRange', \\Google\\Protobuf\\Internal\\EnumDescriptorProto\\EnumReservedRange::class)\n            ->optional('start', \\Google\\Protobuf\\Internal\\GPBType::INT32, 1)\n            ->optional('end', \\Google\\Protobuf\\Internal\\GPBType::INT32, 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.EnumValueDescriptorProto', \\Google\\Protobuf\\Internal\\EnumValueDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->optional('number', \\Google\\Protobuf\\Internal\\GPBType::INT32, 2)\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 3, 'google.protobuf.internal.EnumValueOptions')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.ServiceDescriptorProto', \\Google\\Protobuf\\Internal\\ServiceDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->repeated('method', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.MethodDescriptorProto')\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 3, 'google.protobuf.internal.ServiceOptions')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.MethodDescriptorProto', \\Google\\Protobuf\\Internal\\MethodDescriptorProto::class)\n            ->optional('name', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->optional('input_type', \\Google\\Protobuf\\Internal\\GPBType::STRING, 2)\n            ->optional('output_type', \\Google\\Protobuf\\Internal\\GPBType::STRING, 3)\n            ->optional('options', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 4, 'google.protobuf.internal.MethodOptions')\n            ->optional('client_streaming', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 5)\n            ->optional('server_streaming', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 6)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FileOptions', \\Google\\Protobuf\\Internal\\FileOptions::class)\n            ->optional('java_package', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->optional('java_outer_classname', \\Google\\Protobuf\\Internal\\GPBType::STRING, 8)\n            ->optional('java_multiple_files', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 10)\n            ->optional('java_generate_equals_and_hash', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 20)\n            ->optional('java_string_check_utf8', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 27)\n            ->optional('optimize_for', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 9, 'google.protobuf.internal.FileOptions.OptimizeMode')\n            ->optional('go_package', \\Google\\Protobuf\\Internal\\GPBType::STRING, 11)\n            ->optional('cc_generic_services', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 16)\n            ->optional('java_generic_services', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 17)\n            ->optional('py_generic_services', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 18)\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 23)\n            ->optional('cc_enable_arenas', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 31)\n            ->optional('objc_class_prefix', \\Google\\Protobuf\\Internal\\GPBType::STRING, 36)\n            ->optional('csharp_namespace', \\Google\\Protobuf\\Internal\\GPBType::STRING, 37)\n            ->optional('swift_prefix', \\Google\\Protobuf\\Internal\\GPBType::STRING, 39)\n            ->optional('php_class_prefix', \\Google\\Protobuf\\Internal\\GPBType::STRING, 40)\n            ->optional('php_namespace', \\Google\\Protobuf\\Internal\\GPBType::STRING, 41)\n            ->optional('php_metadata_namespace', \\Google\\Protobuf\\Internal\\GPBType::STRING, 44)\n            ->optional('ruby_package', \\Google\\Protobuf\\Internal\\GPBType::STRING, 45)\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 50, 'google.protobuf.internal.FeatureSet')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FileOptions.OptimizeMode', \\Google\\Protobuf\\Internal\\OptimizeMode::class)\n            ->value(\"SPEED\", 1)\n            ->value(\"CODE_SIZE\", 2)\n            ->value(\"LITE_RUNTIME\", 3)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.MessageOptions', \\Google\\Protobuf\\Internal\\MessageOptions::class)\n            ->optional('message_set_wire_format', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 1)\n            ->optional('no_standard_descriptor_accessor', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 2)\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 3)\n            ->optional('map_entry', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 7)\n            ->optional('deprecated_legacy_json_field_conflicts', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 11)\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 12, 'google.protobuf.internal.FeatureSet')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FieldOptions', \\Google\\Protobuf\\Internal\\FieldOptions::class)\n            ->optional('ctype', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 1, 'google.protobuf.internal.FieldOptions.CType')\n            ->optional('packed', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 2)\n            ->optional('jstype', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 6, 'google.protobuf.internal.FieldOptions.JSType')\n            ->optional('lazy', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 5)\n            ->optional('unverified_lazy', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 15)\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 3)\n            ->optional('weak', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 10)\n            ->optional('debug_redact', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 16)\n            ->optional('retention', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 17, 'google.protobuf.internal.FieldOptions.OptionRetention')\n            ->repeated('targets', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 19, 'google.protobuf.internal.FieldOptions.OptionTargetType')\n            ->repeated('edition_defaults', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 20, 'google.protobuf.internal.FieldOptions.EditionDefault')\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 21, 'google.protobuf.internal.FeatureSet')\n            ->optional('feature_support', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 22, 'google.protobuf.internal.FieldOptions.FeatureSupport')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FieldOptions.EditionDefault', \\Google\\Protobuf\\Internal\\FieldOptions\\EditionDefault::class)\n            ->optional('edition', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 3, 'google.protobuf.internal.Edition')\n            ->optional('value', \\Google\\Protobuf\\Internal\\GPBType::STRING, 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FieldOptions.FeatureSupport', \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport::class)\n            ->optional('edition_introduced', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 1, 'google.protobuf.internal.Edition')\n            ->optional('edition_deprecated', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 2, 'google.protobuf.internal.Edition')\n            ->optional('deprecation_warning', \\Google\\Protobuf\\Internal\\GPBType::STRING, 3)\n            ->optional('edition_removed', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 4, 'google.protobuf.internal.Edition')\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FieldOptions.CType', \\Google\\Protobuf\\Internal\\CType::class)\n            ->value(\"STRING\", 0)\n            ->value(\"CORD\", 1)\n            ->value(\"STRING_PIECE\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FieldOptions.JSType', \\Google\\Protobuf\\Internal\\JSType::class)\n            ->value(\"JS_NORMAL\", 0)\n            ->value(\"JS_STRING\", 1)\n            ->value(\"JS_NUMBER\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FieldOptions.OptionRetention', \\Google\\Protobuf\\Internal\\OptionRetention::class)\n            ->value(\"RETENTION_UNKNOWN\", 0)\n            ->value(\"RETENTION_RUNTIME\", 1)\n            ->value(\"RETENTION_SOURCE\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FieldOptions.OptionTargetType', \\Google\\Protobuf\\Internal\\OptionTargetType::class)\n            ->value(\"TARGET_TYPE_UNKNOWN\", 0)\n            ->value(\"TARGET_TYPE_FILE\", 1)\n            ->value(\"TARGET_TYPE_EXTENSION_RANGE\", 2)\n            ->value(\"TARGET_TYPE_MESSAGE\", 3)\n            ->value(\"TARGET_TYPE_FIELD\", 4)\n            ->value(\"TARGET_TYPE_ONEOF\", 5)\n            ->value(\"TARGET_TYPE_ENUM\", 6)\n            ->value(\"TARGET_TYPE_ENUM_ENTRY\", 7)\n            ->value(\"TARGET_TYPE_SERVICE\", 8)\n            ->value(\"TARGET_TYPE_METHOD\", 9)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.OneofOptions', \\Google\\Protobuf\\Internal\\OneofOptions::class)\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 1, 'google.protobuf.internal.FeatureSet')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.EnumOptions', \\Google\\Protobuf\\Internal\\EnumOptions::class)\n            ->optional('allow_alias', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 2)\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 3)\n            ->optional('deprecated_legacy_json_field_conflicts', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 6)\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 7, 'google.protobuf.internal.FeatureSet')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.EnumValueOptions', \\Google\\Protobuf\\Internal\\EnumValueOptions::class)\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 1)\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.FeatureSet')\n            ->optional('debug_redact', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 3)\n            ->optional('feature_support', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 4, 'google.protobuf.internal.FieldOptions.FeatureSupport')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.ServiceOptions', \\Google\\Protobuf\\Internal\\ServiceOptions::class)\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 34, 'google.protobuf.internal.FeatureSet')\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 33)\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.MethodOptions', \\Google\\Protobuf\\Internal\\MethodOptions::class)\n            ->optional('deprecated', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 33)\n            ->optional('idempotency_level', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 34, 'google.protobuf.internal.MethodOptions.IdempotencyLevel')\n            ->optional('features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 35, 'google.protobuf.internal.FeatureSet')\n            ->repeated('uninterpreted_option', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 999, 'google.protobuf.internal.UninterpretedOption')\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.MethodOptions.IdempotencyLevel', \\Google\\Protobuf\\Internal\\IdempotencyLevel::class)\n            ->value(\"IDEMPOTENCY_UNKNOWN\", 0)\n            ->value(\"NO_SIDE_EFFECTS\", 1)\n            ->value(\"IDEMPOTENT\", 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.UninterpretedOption', \\Google\\Protobuf\\Internal\\UninterpretedOption::class)\n            ->repeated('name', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 2, 'google.protobuf.internal.UninterpretedOption.NamePart')\n            ->optional('identifier_value', \\Google\\Protobuf\\Internal\\GPBType::STRING, 3)\n            ->optional('positive_int_value', \\Google\\Protobuf\\Internal\\GPBType::UINT64, 4)\n            ->optional('negative_int_value', \\Google\\Protobuf\\Internal\\GPBType::INT64, 5)\n            ->optional('double_value', \\Google\\Protobuf\\Internal\\GPBType::DOUBLE, 6)\n            ->optional('string_value', \\Google\\Protobuf\\Internal\\GPBType::BYTES, 7)\n            ->optional('aggregate_value', \\Google\\Protobuf\\Internal\\GPBType::STRING, 8)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.UninterpretedOption.NamePart', \\Google\\Protobuf\\Internal\\UninterpretedOption\\NamePart::class)\n            ->required('name_part', \\Google\\Protobuf\\Internal\\GPBType::STRING, 1)\n            ->required('is_extension', \\Google\\Protobuf\\Internal\\GPBType::BOOL, 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FeatureSet', \\Google\\Protobuf\\Internal\\FeatureSet::class)\n            ->optional('field_presence', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 1, 'google.protobuf.internal.FeatureSet.FieldPresence')\n            ->optional('enum_type', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 2, 'google.protobuf.internal.FeatureSet.EnumType')\n            ->optional('repeated_field_encoding', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 3, 'google.protobuf.internal.FeatureSet.RepeatedFieldEncoding')\n            ->optional('utf8_validation', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 4, 'google.protobuf.internal.FeatureSet.Utf8Validation')\n            ->optional('message_encoding', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 5, 'google.protobuf.internal.FeatureSet.MessageEncoding')\n            ->optional('json_format', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 6, 'google.protobuf.internal.FeatureSet.JsonFormat')\n            ->optional('enforce_naming_style', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 7, 'google.protobuf.internal.FeatureSet.EnforceNamingStyle')\n            ->optional('default_symbol_visibility', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 8, 'google.protobuf.internal.FeatureSet.VisibilityFeature.DefaultSymbolVisibility')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FeatureSet.VisibilityFeature', \\Google\\Protobuf\\Internal\\FeatureSet\\VisibilityFeature::class)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.VisibilityFeature.DefaultSymbolVisibility', \\Google\\Protobuf\\Internal\\DefaultSymbolVisibility::class)\n            ->value(\"DEFAULT_SYMBOL_VISIBILITY_UNKNOWN\", 0)\n            ->value(\"EXPORT_ALL\", 1)\n            ->value(\"EXPORT_TOP_LEVEL\", 2)\n            ->value(\"LOCAL_ALL\", 3)\n            ->value(\"STRICT\", 4)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.FieldPresence', \\Google\\Protobuf\\Internal\\FieldPresence::class)\n            ->value(\"FIELD_PRESENCE_UNKNOWN\", 0)\n            ->value(\"EXPLICIT\", 1)\n            ->value(\"IMPLICIT\", 2)\n            ->value(\"LEGACY_REQUIRED\", 3)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.EnumType', \\Google\\Protobuf\\Internal\\EnumType::class)\n            ->value(\"ENUM_TYPE_UNKNOWN\", 0)\n            ->value(\"OPEN\", 1)\n            ->value(\"CLOSED\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.RepeatedFieldEncoding', \\Google\\Protobuf\\Internal\\RepeatedFieldEncoding::class)\n            ->value(\"REPEATED_FIELD_ENCODING_UNKNOWN\", 0)\n            ->value(\"PACKED\", 1)\n            ->value(\"EXPANDED\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.Utf8Validation', \\Google\\Protobuf\\Internal\\Utf8Validation::class)\n            ->value(\"UTF8_VALIDATION_UNKNOWN\", 0)\n            ->value(\"VERIFY\", 2)\n            ->value(\"NONE\", 3)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.MessageEncoding', \\Google\\Protobuf\\Internal\\MessageEncoding::class)\n            ->value(\"MESSAGE_ENCODING_UNKNOWN\", 0)\n            ->value(\"LENGTH_PREFIXED\", 1)\n            ->value(\"DELIMITED\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.JsonFormat', \\Google\\Protobuf\\Internal\\JsonFormat::class)\n            ->value(\"JSON_FORMAT_UNKNOWN\", 0)\n            ->value(\"ALLOW\", 1)\n            ->value(\"LEGACY_BEST_EFFORT\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.FeatureSet.EnforceNamingStyle', \\Google\\Protobuf\\Internal\\EnforceNamingStyle::class)\n            ->value(\"ENFORCE_NAMING_STYLE_UNKNOWN\", 0)\n            ->value(\"STYLE2024\", 1)\n            ->value(\"STYLE_LEGACY\", 2)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FeatureSetDefaults', \\Google\\Protobuf\\Internal\\FeatureSetDefaults::class)\n            ->repeated('defaults', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 1, 'google.protobuf.internal.FeatureSetDefaults.FeatureSetEditionDefault')\n            ->optional('minimum_edition', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 4, 'google.protobuf.internal.Edition')\n            ->optional('maximum_edition', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 5, 'google.protobuf.internal.Edition')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.FeatureSetDefaults.FeatureSetEditionDefault', \\Google\\Protobuf\\Internal\\FeatureSetDefaults\\FeatureSetEditionDefault::class)\n            ->optional('edition', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 3, 'google.protobuf.internal.Edition')\n            ->optional('overridable_features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 4, 'google.protobuf.internal.FeatureSet')\n            ->optional('fixed_features', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 5, 'google.protobuf.internal.FeatureSet')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.SourceCodeInfo', \\Google\\Protobuf\\Internal\\SourceCodeInfo::class)\n            ->repeated('location', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 1, 'google.protobuf.internal.SourceCodeInfo.Location')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.SourceCodeInfo.Location', \\Google\\Protobuf\\Internal\\SourceCodeInfo\\Location::class)\n            ->repeated('path', \\Google\\Protobuf\\Internal\\GPBType::INT32, 1)\n            ->repeated('span', \\Google\\Protobuf\\Internal\\GPBType::INT32, 2)\n            ->optional('leading_comments', \\Google\\Protobuf\\Internal\\GPBType::STRING, 3)\n            ->optional('trailing_comments', \\Google\\Protobuf\\Internal\\GPBType::STRING, 4)\n            ->repeated('leading_detached_comments', \\Google\\Protobuf\\Internal\\GPBType::STRING, 6)\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.GeneratedCodeInfo', \\Google\\Protobuf\\Internal\\GeneratedCodeInfo::class)\n            ->repeated('annotation', \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, 1, 'google.protobuf.internal.GeneratedCodeInfo.Annotation')\n            ->finalizeToPool();\n\n        $pool->addMessage('google.protobuf.internal.GeneratedCodeInfo.Annotation', \\Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation::class)\n            ->repeated('path', \\Google\\Protobuf\\Internal\\GPBType::INT32, 1)\n            ->optional('source_file', \\Google\\Protobuf\\Internal\\GPBType::STRING, 2)\n            ->optional('begin', \\Google\\Protobuf\\Internal\\GPBType::INT32, 3)\n            ->optional('end', \\Google\\Protobuf\\Internal\\GPBType::INT32, 4)\n            ->optional('semantic', \\Google\\Protobuf\\Internal\\GPBType::ENUM, 5, 'google.protobuf.internal.GeneratedCodeInfo.Annotation.Semantic')\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.GeneratedCodeInfo.Annotation.Semantic', \\Google\\Protobuf\\Internal\\Semantic::class)\n            ->value(\"NONE\", 0)\n            ->value(\"SET\", 1)\n            ->value(\"ALIAS\", 2)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.Edition', \\Google\\Protobuf\\Internal\\Edition::class)\n            ->value(\"EDITION_UNKNOWN\", 0)\n            ->value(\"EDITION_LEGACY\", 900)\n            ->value(\"EDITION_PROTO2\", 998)\n            ->value(\"EDITION_PROTO3\", 999)\n            ->value(\"EDITION_2023\", 1000)\n            ->value(\"EDITION_2024\", 1001)\n            ->value(\"EDITION_UNSTABLE\", 9999)\n            ->value(\"EDITION_1_TEST_ONLY\", 1)\n            ->value(\"EDITION_2_TEST_ONLY\", 2)\n            ->value(\"EDITION_99997_TEST_ONLY\", 99997)\n            ->value(\"EDITION_99998_TEST_ONLY\", 99998)\n            ->value(\"EDITION_99999_TEST_ONLY\", 99999)\n            ->value(\"EDITION_MAX\", 2147483647)\n            ->finalizeToPool();\n\n        $pool->addEnum('google.protobuf.internal.SymbolVisibility', \\Google\\Protobuf\\Internal\\SymbolVisibility::class)\n            ->value(\"VISIBILITY_UNSET\", 0)\n            ->value(\"VISIBILITY_LOCAL\", 1)\n            ->value(\"VISIBILITY_EXPORT\", 2)\n            ->finalizeToPool();\n\n        $pool->finish();\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/SourceContext.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/source_context.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass SourceContext\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xF0\\x01\\x0A\\$google/protobuf/source_context.proto\\x12\\x0Fgoogle.protobuf\\\"\\\"\\x0A\\x0DSourceContext\\x12\\x11\\x0A\\x09file_name\\x18\\x01 \\x01(\\x09B\\x8A\\x01\\x0A\\x13com.google.protobufB\\x12SourceContextProtoP\\x01Z6google.golang.org/protobuf/types/known/sourcecontextpb\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Struct.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/struct.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Struct\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xFE\\x04\\x0A\\x1Cgoogle/protobuf/struct.proto\\x12\\x0Fgoogle.protobuf\\\"\\x84\\x01\\x0A\\x06Struct\\x123\\x0A\\x06fields\\x18\\x01 \\x03(\\x0B2#.google.protobuf.Struct.FieldsEntry\\x1AE\\x0A\\x0BFieldsEntry\\x12\\x0B\\x0A\\x03key\\x18\\x01 \\x01(\\x09\\x12%\\x0A\\x05value\\x18\\x02 \\x01(\\x0B2\\x16.google.protobuf.Value:\\x028\\x01\\\"\\xEA\\x01\\x0A\\x05Value\\x120\\x0A\\x0Anull_value\\x18\\x01 \\x01(\\x0E2\\x1A.google.protobuf.NullValueH\\x00\\x12\\x16\\x0A\\x0Cnumber_value\\x18\\x02 \\x01(\\x01H\\x00\\x12\\x16\\x0A\\x0Cstring_value\\x18\\x03 \\x01(\\x09H\\x00\\x12\\x14\\x0A\\x0Abool_value\\x18\\x04 \\x01(\\x08H\\x00\\x12/\\x0A\\x0Cstruct_value\\x18\\x05 \\x01(\\x0B2\\x17.google.protobuf.StructH\\x00\\x120\\x0A\\x0Alist_value\\x18\\x06 \\x01(\\x0B2\\x1A.google.protobuf.ListValueH\\x00B\\x06\\x0A\\x04kind\\\"3\\x0A\\x09ListValue\\x12&\\x0A\\x06values\\x18\\x01 \\x03(\\x0B2\\x16.google.protobuf.Value*\\x1B\\x0A\\x09NullValue\\x12\\x0E\\x0A\\x0ANULL_VALUE\\x10\\x00B\\x7F\\x0A\\x13com.google.protobufB\\x0BStructProtoP\\x01Z/google.golang.org/protobuf/types/known/structpb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Timestamp.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/timestamp.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Timestamp\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xEF\\x01\\x0A\\x1Fgoogle/protobuf/timestamp.proto\\x12\\x0Fgoogle.protobuf\\\"+\\x0A\\x09Timestamp\\x12\\x0F\\x0A\\x07seconds\\x18\\x01 \\x01(\\x03\\x12\\x0D\\x0A\\x05nanos\\x18\\x02 \\x01(\\x05B\\x85\\x01\\x0A\\x13com.google.protobufB\\x0ETimestampProtoP\\x01Z2google.golang.org/protobuf/types/known/timestamppb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Type.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Type\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        \\GPBMetadata\\Google\\Protobuf\\SourceContext::initOnce();\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xD4\\x0C\\x0A\\x1Agoogle/protobuf/type.proto\\x12\\x0Fgoogle.protobuf\\x1A\\$google/protobuf/source_context.proto\\\"\\xE8\\x01\\x0A\\x04Type\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12&\\x0A\\x06fields\\x18\\x02 \\x03(\\x0B2\\x16.google.protobuf.Field\\x12\\x0E\\x0A\\x06oneofs\\x18\\x03 \\x03(\\x09\\x12(\\x0A\\x07options\\x18\\x04 \\x03(\\x0B2\\x17.google.protobuf.Option\\x126\\x0A\\x0Esource_context\\x18\\x05 \\x01(\\x0B2\\x1E.google.protobuf.SourceContext\\x12'\\x0A\\x06syntax\\x18\\x06 \\x01(\\x0E2\\x17.google.protobuf.Syntax\\x12\\x0F\\x0A\\x07edition\\x18\\x07 \\x01(\\x09\\\"\\xD5\\x05\\x0A\\x05Field\\x12)\\x0A\\x04kind\\x18\\x01 \\x01(\\x0E2\\x1B.google.protobuf.Field.Kind\\x127\\x0A\\x0Bcardinality\\x18\\x02 \\x01(\\x0E2\\\".google.protobuf.Field.Cardinality\\x12\\x0E\\x0A\\x06number\\x18\\x03 \\x01(\\x05\\x12\\x0C\\x0A\\x04name\\x18\\x04 \\x01(\\x09\\x12\\x10\\x0A\\x08type_url\\x18\\x06 \\x01(\\x09\\x12\\x13\\x0A\\x0Boneof_index\\x18\\x07 \\x01(\\x05\\x12\\x0E\\x0A\\x06packed\\x18\\x08 \\x01(\\x08\\x12(\\x0A\\x07options\\x18\\x09 \\x03(\\x0B2\\x17.google.protobuf.Option\\x12\\x11\\x0A\\x09json_name\\x18\\x0A \\x01(\\x09\\x12\\x15\\x0A\\x0Ddefault_value\\x18\\x0B \\x01(\\x09\\\"\\xC8\\x02\\x0A\\x04Kind\\x12\\x10\\x0A\\x0CTYPE_UNKNOWN\\x10\\x00\\x12\\x0F\\x0A\\x0BTYPE_DOUBLE\\x10\\x01\\x12\\x0E\\x0A\\x0ATYPE_FLOAT\\x10\\x02\\x12\\x0E\\x0A\\x0ATYPE_INT64\\x10\\x03\\x12\\x0F\\x0A\\x0BTYPE_UINT64\\x10\\x04\\x12\\x0E\\x0A\\x0ATYPE_INT32\\x10\\x05\\x12\\x10\\x0A\\x0CTYPE_FIXED64\\x10\\x06\\x12\\x10\\x0A\\x0CTYPE_FIXED32\\x10\\x07\\x12\\x0D\\x0A\\x09TYPE_BOOL\\x10\\x08\\x12\\x0F\\x0A\\x0BTYPE_STRING\\x10\\x09\\x12\\x0E\\x0A\\x0ATYPE_GROUP\\x10\\x0A\\x12\\x10\\x0A\\x0CTYPE_MESSAGE\\x10\\x0B\\x12\\x0E\\x0A\\x0ATYPE_BYTES\\x10\\x0C\\x12\\x0F\\x0A\\x0BTYPE_UINT32\\x10\\x0D\\x12\\x0D\\x0A\\x09TYPE_ENUM\\x10\\x0E\\x12\\x11\\x0A\\x0DTYPE_SFIXED32\\x10\\x0F\\x12\\x11\\x0A\\x0DTYPE_SFIXED64\\x10\\x10\\x12\\x0F\\x0A\\x0BTYPE_SINT32\\x10\\x11\\x12\\x0F\\x0A\\x0BTYPE_SINT64\\x10\\x12\\\"t\\x0A\\x0BCardinality\\x12\\x17\\x0A\\x13CARDINALITY_UNKNOWN\\x10\\x00\\x12\\x18\\x0A\\x14CARDINALITY_OPTIONAL\\x10\\x01\\x12\\x18\\x0A\\x14CARDINALITY_REQUIRED\\x10\\x02\\x12\\x18\\x0A\\x14CARDINALITY_REPEATED\\x10\\x03\\\"\\xDF\\x01\\x0A\\x04Enum\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12-\\x0A\\x09enumvalue\\x18\\x02 \\x03(\\x0B2\\x1A.google.protobuf.EnumValue\\x12(\\x0A\\x07options\\x18\\x03 \\x03(\\x0B2\\x17.google.protobuf.Option\\x126\\x0A\\x0Esource_context\\x18\\x04 \\x01(\\x0B2\\x1E.google.protobuf.SourceContext\\x12'\\x0A\\x06syntax\\x18\\x05 \\x01(\\x0E2\\x17.google.protobuf.Syntax\\x12\\x0F\\x0A\\x07edition\\x18\\x06 \\x01(\\x09\\\"S\\x0A\\x09EnumValue\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12\\x0E\\x0A\\x06number\\x18\\x02 \\x01(\\x05\\x12(\\x0A\\x07options\\x18\\x03 \\x03(\\x0B2\\x17.google.protobuf.Option\\\";\\x0A\\x06Option\\x12\\x0C\\x0A\\x04name\\x18\\x01 \\x01(\\x09\\x12#\\x0A\\x05value\\x18\\x02 \\x01(\\x0B2\\x14.google.protobuf.Any*C\\x0A\\x06Syntax\\x12\\x11\\x0A\\x0DSYNTAX_PROTO2\\x10\\x00\\x12\\x11\\x0A\\x0DSYNTAX_PROTO3\\x10\\x01\\x12\\x13\\x0A\\x0FSYNTAX_EDITIONS\\x10\\x02B{\\x0A\\x13com.google.protobufB\\x09TypeProtoP\\x01Z-google.golang.org/protobuf/types/known/typepb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/GPBMetadata/Google/Protobuf/Wrappers.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace GPBMetadata\\Google\\Protobuf;\n\nclass Wrappers\n{\n    public static $is_initialized = false;\n\n    public static function initOnce() {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n\n        if (static::$is_initialized == true) {\n          return;\n        }\n        $pool->internalAddGeneratedFile(\n            \"\\x0A\\xC7\\x03\\x0A\\x1Egoogle/protobuf/wrappers.proto\\x12\\x0Fgoogle.protobuf\\\"\\x1C\\x0A\\x0BDoubleValue\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x01\\\"\\x1B\\x0A\\x0AFloatValue\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x02\\\"\\x1B\\x0A\\x0AInt64Value\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x03\\\"\\x1C\\x0A\\x0BUInt64Value\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x04\\\"\\x1B\\x0A\\x0AInt32Value\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x05\\\"\\x1C\\x0A\\x0BUInt32Value\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x0D\\\"\\x1A\\x0A\\x09BoolValue\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x08\\\"\\x1C\\x0A\\x0BStringValue\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x09\\\"\\x1B\\x0A\\x0ABytesValue\\x12\\x0D\\x0A\\x05value\\x18\\x01 \\x01(\\x0CB\\x83\\x01\\x0A\\x13com.google.protobufB\\x0DWrappersProtoP\\x01Z1google.golang.org/protobuf/types/known/wrapperspb\\xF8\\x01\\x01\\xA2\\x02\\x03GPB\\xAA\\x02\\x1EGoogle.Protobuf.WellKnownTypesb\\x06proto3\"\n        , true);\n\n        static::$is_initialized = true;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Any.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/any.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * `Any` contains an arbitrary serialized protocol buffer message along with a\n * URL that describes the type of the serialized message.\n * Protobuf library provides support to pack/unpack Any values in the form\n * of utility functions or additional generated methods of the Any type.\n * Example 1: Pack and unpack a message in C++.\n *     Foo foo = ...;\n *     Any any;\n *     any.PackFrom(foo);\n *     ...\n *     if (any.UnpackTo(&foo)) {\n *       ...\n *     }\n * Example 2: Pack and unpack a message in Java.\n *     Foo foo = ...;\n *     Any any = Any.pack(foo);\n *     ...\n *     if (any.is(Foo.class)) {\n *       foo = any.unpack(Foo.class);\n *     }\n *     // or ...\n *     if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n *       foo = any.unpack(Foo.getDefaultInstance());\n *     }\n *  Example 3: Pack and unpack a message in Python.\n *     foo = Foo(...)\n *     any = Any()\n *     any.Pack(foo)\n *     ...\n *     if any.Is(Foo.DESCRIPTOR):\n *       any.Unpack(foo)\n *       ...\n *  Example 4: Pack and unpack a message in Go\n *      foo := &pb.Foo{...}\n *      any, err := anypb.New(foo)\n *      if err != nil {\n *        ...\n *      }\n *      ...\n *      foo := &pb.Foo{}\n *      if err := any.UnmarshalTo(foo); err != nil {\n *        ...\n *      }\n * The pack methods provided by protobuf library will by default use\n * 'type.googleapis.com/full.type.name' as the type URL and the unpack\n * methods only use the fully qualified type name after the last '/'\n * in the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n * name \"y.z\".\n * JSON\n * ====\n * The JSON representation of an `Any` value uses the regular\n * representation of the deserialized, embedded message, with an\n * additional field `\\@type` which contains the type URL. Example:\n *     package google.profile;\n *     message Person {\n *       string first_name = 1;\n *       string last_name = 2;\n *     }\n *     {\n *       \"\\@type\": \"type.googleapis.com/google.profile.Person\",\n *       \"firstName\": <string>,\n *       \"lastName\": <string>\n *     }\n * If the embedded message type is well-known and has a custom JSON\n * representation, that representation will be embedded adding a field\n * `value` which holds the custom JSON in addition to the `\\@type`\n * field. Example (for message [google.protobuf.Duration][]):\n *     {\n *       \"\\@type\": \"type.googleapis.com/google.protobuf.Duration\",\n *       \"value\": \"1.212s\"\n *     }\n *\n * Generated from protobuf message <code>google.protobuf.Any</code>\n */\nclass Any extends \\Google\\Protobuf\\Internal\\AnyBase\n{\n    /**\n     * A URL/resource name that uniquely identifies the type of the serialized\n     * protocol buffer message. This string must contain at least\n     * one \"/\" character. The last segment of the URL's path must represent\n     * the fully qualified name of the type (as in\n     * `path/google.protobuf.Duration`). The name should be in a canonical form\n     * (e.g., leading \".\" is not accepted).\n     * In practice, teams usually precompile into the binary all types that they\n     * expect it to use in the context of Any. However, for URLs which use the\n     * scheme `http`, `https`, or no scheme, one can optionally set up a type\n     * server that maps type URLs to message definitions as follows:\n     * * If no scheme is provided, `https` is assumed.\n     * * An HTTP GET on the URL must yield a [google.protobuf.Type][]\n     *   value in binary format, or produce an error.\n     * * Applications are allowed to cache lookup results based on the\n     *   URL, or have them precompiled into a binary to avoid any\n     *   lookup. Therefore, binary compatibility needs to be preserved\n     *   on changes to types. (Use versioned type names to manage\n     *   breaking changes.)\n     * Note: this functionality is not currently available in the official\n     * protobuf release, and it is not used for type URLs beginning with\n     * type.googleapis.com. As of May 2023, there are no widely used type server\n     * implementations and no plans to implement one.\n     * Schemes other than `http`, `https` (or the empty scheme) might be\n     * used with implementation specific semantics.\n     *\n     * Generated from protobuf field <code>string type_url = 1;</code>\n     */\n    protected $type_url = '';\n    /**\n     * Must be a valid serialized protocol buffer of the above specified type.\n     *\n     * Generated from protobuf field <code>bytes value = 2;</code>\n     */\n    protected $value = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $type_url\n     *           A URL/resource name that uniquely identifies the type of the serialized\n     *           protocol buffer message. This string must contain at least\n     *           one \"/\" character. The last segment of the URL's path must represent\n     *           the fully qualified name of the type (as in\n     *           `path/google.protobuf.Duration`). The name should be in a canonical form\n     *           (e.g., leading \".\" is not accepted).\n     *           In practice, teams usually precompile into the binary all types that they\n     *           expect it to use in the context of Any. However, for URLs which use the\n     *           scheme `http`, `https`, or no scheme, one can optionally set up a type\n     *           server that maps type URLs to message definitions as follows:\n     *           * If no scheme is provided, `https` is assumed.\n     *           * An HTTP GET on the URL must yield a [google.protobuf.Type][]\n     *             value in binary format, or produce an error.\n     *           * Applications are allowed to cache lookup results based on the\n     *             URL, or have them precompiled into a binary to avoid any\n     *             lookup. Therefore, binary compatibility needs to be preserved\n     *             on changes to types. (Use versioned type names to manage\n     *             breaking changes.)\n     *           Note: this functionality is not currently available in the official\n     *           protobuf release, and it is not used for type URLs beginning with\n     *           type.googleapis.com. As of May 2023, there are no widely used type server\n     *           implementations and no plans to implement one.\n     *           Schemes other than `http`, `https` (or the empty scheme) might be\n     *           used with implementation specific semantics.\n     *     @type string $value\n     *           Must be a valid serialized protocol buffer of the above specified type.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Any::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A URL/resource name that uniquely identifies the type of the serialized\n     * protocol buffer message. This string must contain at least\n     * one \"/\" character. The last segment of the URL's path must represent\n     * the fully qualified name of the type (as in\n     * `path/google.protobuf.Duration`). The name should be in a canonical form\n     * (e.g., leading \".\" is not accepted).\n     * In practice, teams usually precompile into the binary all types that they\n     * expect it to use in the context of Any. However, for URLs which use the\n     * scheme `http`, `https`, or no scheme, one can optionally set up a type\n     * server that maps type URLs to message definitions as follows:\n     * * If no scheme is provided, `https` is assumed.\n     * * An HTTP GET on the URL must yield a [google.protobuf.Type][]\n     *   value in binary format, or produce an error.\n     * * Applications are allowed to cache lookup results based on the\n     *   URL, or have them precompiled into a binary to avoid any\n     *   lookup. Therefore, binary compatibility needs to be preserved\n     *   on changes to types. (Use versioned type names to manage\n     *   breaking changes.)\n     * Note: this functionality is not currently available in the official\n     * protobuf release, and it is not used for type URLs beginning with\n     * type.googleapis.com. As of May 2023, there are no widely used type server\n     * implementations and no plans to implement one.\n     * Schemes other than `http`, `https` (or the empty scheme) might be\n     * used with implementation specific semantics.\n     *\n     * Generated from protobuf field <code>string type_url = 1;</code>\n     * @return string\n     */\n    public function getTypeUrl()\n    {\n        return $this->type_url;\n    }\n\n    /**\n     * A URL/resource name that uniquely identifies the type of the serialized\n     * protocol buffer message. This string must contain at least\n     * one \"/\" character. The last segment of the URL's path must represent\n     * the fully qualified name of the type (as in\n     * `path/google.protobuf.Duration`). The name should be in a canonical form\n     * (e.g., leading \".\" is not accepted).\n     * In practice, teams usually precompile into the binary all types that they\n     * expect it to use in the context of Any. However, for URLs which use the\n     * scheme `http`, `https`, or no scheme, one can optionally set up a type\n     * server that maps type URLs to message definitions as follows:\n     * * If no scheme is provided, `https` is assumed.\n     * * An HTTP GET on the URL must yield a [google.protobuf.Type][]\n     *   value in binary format, or produce an error.\n     * * Applications are allowed to cache lookup results based on the\n     *   URL, or have them precompiled into a binary to avoid any\n     *   lookup. Therefore, binary compatibility needs to be preserved\n     *   on changes to types. (Use versioned type names to manage\n     *   breaking changes.)\n     * Note: this functionality is not currently available in the official\n     * protobuf release, and it is not used for type URLs beginning with\n     * type.googleapis.com. As of May 2023, there are no widely used type server\n     * implementations and no plans to implement one.\n     * Schemes other than `http`, `https` (or the empty scheme) might be\n     * used with implementation specific semantics.\n     *\n     * Generated from protobuf field <code>string type_url = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTypeUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * Must be a valid serialized protocol buffer of the above specified type.\n     *\n     * Generated from protobuf field <code>bytes value = 2;</code>\n     * @return string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Must be a valid serialized protocol buffer of the above specified type.\n     *\n     * Generated from protobuf field <code>bytes value = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkString($var, False);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Api.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/api.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Api is a light-weight descriptor for an API Interface.\n * Interfaces are also described as \"protocol buffer services\" in some contexts,\n * such as by the \"service\" keyword in a .proto file, but they are different\n * from API Services, which represent a concrete implementation of an interface\n * as opposed to simply a description of methods and bindings. They are also\n * sometimes simply referred to as \"APIs\" in other contexts, such as the name of\n * this message itself. See https://cloud.google.com/apis/design/glossary for\n * detailed terminology.\n * New usages of this message as an alternative to ServiceDescriptorProto are\n * strongly discouraged. This message does not reliability preserve all\n * information necessary to model the schema and preserve semantics. Instead\n * make use of FileDescriptorSet which preserves the necessary information.\n *\n * Generated from protobuf message <code>google.protobuf.Api</code>\n */\nclass Api extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The fully qualified name of this interface, including package name\n     * followed by the interface's simple name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The methods of this interface, in unspecified order.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Method methods = 2;</code>\n     */\n    private $methods;\n    /**\n     * Any metadata attached to the interface.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     */\n    private $options;\n    /**\n     * A version string for this interface. If specified, must have the form\n     * `major-version.minor-version`, as in `1.10`. If the minor version is\n     * omitted, it defaults to zero. If the entire version field is empty, the\n     * major version is derived from the package name, as outlined below. If the\n     * field is not empty, the version in the package name will be verified to be\n     * consistent with what is provided here.\n     * The versioning schema uses [semantic\n     * versioning](http://semver.org) where the major version number\n     * indicates a breaking change and the minor version an additive,\n     * non-breaking change. Both version numbers are signals to users\n     * what to expect from different versions, and should be carefully\n     * chosen based on the product plan.\n     * The major version is also reflected in the package name of the\n     * interface, which must end in `v<major-version>`, as in\n     * `google.feature.v1`. For major versions 0 and 1, the suffix can\n     * be omitted. Zero major versions must only be used for\n     * experimental, non-GA interfaces.\n     *\n     * Generated from protobuf field <code>string version = 4;</code>\n     */\n    protected $version = '';\n    /**\n     * Source context for the protocol buffer service represented by this\n     * message.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 5;</code>\n     */\n    protected $source_context = null;\n    /**\n     * Included interfaces. See [Mixin][].\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Mixin mixins = 6;</code>\n     */\n    private $mixins;\n    /**\n     * The source syntax of the service.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 7;</code>\n     */\n    protected $syntax = 0;\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 8;</code>\n     */\n    protected $edition = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The fully qualified name of this interface, including package name\n     *           followed by the interface's simple name.\n     *     @type \\Google\\Protobuf\\Method[] $methods\n     *           The methods of this interface, in unspecified order.\n     *     @type \\Google\\Protobuf\\Option[] $options\n     *           Any metadata attached to the interface.\n     *     @type string $version\n     *           A version string for this interface. If specified, must have the form\n     *           `major-version.minor-version`, as in `1.10`. If the minor version is\n     *           omitted, it defaults to zero. If the entire version field is empty, the\n     *           major version is derived from the package name, as outlined below. If the\n     *           field is not empty, the version in the package name will be verified to be\n     *           consistent with what is provided here.\n     *           The versioning schema uses [semantic\n     *           versioning](http://semver.org) where the major version number\n     *           indicates a breaking change and the minor version an additive,\n     *           non-breaking change. Both version numbers are signals to users\n     *           what to expect from different versions, and should be carefully\n     *           chosen based on the product plan.\n     *           The major version is also reflected in the package name of the\n     *           interface, which must end in `v<major-version>`, as in\n     *           `google.feature.v1`. For major versions 0 and 1, the suffix can\n     *           be omitted. Zero major versions must only be used for\n     *           experimental, non-GA interfaces.\n     *     @type \\Google\\Protobuf\\SourceContext $source_context\n     *           Source context for the protocol buffer service represented by this\n     *           message.\n     *     @type \\Google\\Protobuf\\Mixin[] $mixins\n     *           Included interfaces. See [Mixin][].\n     *     @type int $syntax\n     *           The source syntax of the service.\n     *     @type string $edition\n     *           The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Api::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The fully qualified name of this interface, including package name\n     * followed by the interface's simple name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The fully qualified name of this interface, including package name\n     * followed by the interface's simple name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The methods of this interface, in unspecified order.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Method methods = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Method>\n     */\n    public function getMethods()\n    {\n        return $this->methods;\n    }\n\n    /**\n     * The methods of this interface, in unspecified order.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Method methods = 2;</code>\n     * @param \\Google\\Protobuf\\Method[] $var\n     * @return $this\n     */\n    public function setMethods($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Method::class);\n        $this->methods = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Any metadata attached to the interface.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Option>\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * Any metadata attached to the interface.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     * @param \\Google\\Protobuf\\Option[] $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Option::class);\n        $this->options = $arr;\n\n        return $this;\n    }\n\n    /**\n     * A version string for this interface. If specified, must have the form\n     * `major-version.minor-version`, as in `1.10`. If the minor version is\n     * omitted, it defaults to zero. If the entire version field is empty, the\n     * major version is derived from the package name, as outlined below. If the\n     * field is not empty, the version in the package name will be verified to be\n     * consistent with what is provided here.\n     * The versioning schema uses [semantic\n     * versioning](http://semver.org) where the major version number\n     * indicates a breaking change and the minor version an additive,\n     * non-breaking change. Both version numbers are signals to users\n     * what to expect from different versions, and should be carefully\n     * chosen based on the product plan.\n     * The major version is also reflected in the package name of the\n     * interface, which must end in `v<major-version>`, as in\n     * `google.feature.v1`. For major versions 0 and 1, the suffix can\n     * be omitted. Zero major versions must only be used for\n     * experimental, non-GA interfaces.\n     *\n     * Generated from protobuf field <code>string version = 4;</code>\n     * @return string\n     */\n    public function getVersion()\n    {\n        return $this->version;\n    }\n\n    /**\n     * A version string for this interface. If specified, must have the form\n     * `major-version.minor-version`, as in `1.10`. If the minor version is\n     * omitted, it defaults to zero. If the entire version field is empty, the\n     * major version is derived from the package name, as outlined below. If the\n     * field is not empty, the version in the package name will be verified to be\n     * consistent with what is provided here.\n     * The versioning schema uses [semantic\n     * versioning](http://semver.org) where the major version number\n     * indicates a breaking change and the minor version an additive,\n     * non-breaking change. Both version numbers are signals to users\n     * what to expect from different versions, and should be carefully\n     * chosen based on the product plan.\n     * The major version is also reflected in the package name of the\n     * interface, which must end in `v<major-version>`, as in\n     * `google.feature.v1`. For major versions 0 and 1, the suffix can\n     * be omitted. Zero major versions must only be used for\n     * experimental, non-GA interfaces.\n     *\n     * Generated from protobuf field <code>string version = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setVersion($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->version = $var;\n\n        return $this;\n    }\n\n    /**\n     * Source context for the protocol buffer service represented by this\n     * message.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 5;</code>\n     * @return \\Google\\Protobuf\\SourceContext|null\n     */\n    public function getSourceContext()\n    {\n        return $this->source_context;\n    }\n\n    public function hasSourceContext()\n    {\n        return isset($this->source_context);\n    }\n\n    public function clearSourceContext()\n    {\n        unset($this->source_context);\n    }\n\n    /**\n     * Source context for the protocol buffer service represented by this\n     * message.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 5;</code>\n     * @param \\Google\\Protobuf\\SourceContext $var\n     * @return $this\n     */\n    public function setSourceContext($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\SourceContext::class);\n        $this->source_context = $var;\n\n        return $this;\n    }\n\n    /**\n     * Included interfaces. See [Mixin][].\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Mixin mixins = 6;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Mixin>\n     */\n    public function getMixins()\n    {\n        return $this->mixins;\n    }\n\n    /**\n     * Included interfaces. See [Mixin][].\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Mixin mixins = 6;</code>\n     * @param \\Google\\Protobuf\\Mixin[] $var\n     * @return $this\n     */\n    public function setMixins($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Mixin::class);\n        $this->mixins = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The source syntax of the service.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 7;</code>\n     * @return int\n     */\n    public function getSyntax()\n    {\n        return $this->syntax;\n    }\n\n    /**\n     * The source syntax of the service.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 7;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setSyntax($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Syntax::class);\n        $this->syntax = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 8;</code>\n     * @return string\n     */\n    public function getEdition()\n    {\n        return $this->edition;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setEdition($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/BoolValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `bool`.\n * The JSON representation for `BoolValue` is JSON `true` and `false`.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.BoolValue</code>\n */\nclass BoolValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The bool value.\n     *\n     * Generated from protobuf field <code>bool value = 1;</code>\n     */\n    protected $value = false;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type bool $value\n     *           The bool value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The bool value.\n     *\n     * Generated from protobuf field <code>bool value = 1;</code>\n     * @return bool\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The bool value.\n     *\n     * Generated from protobuf field <code>bool value = 1;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/BytesValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `bytes`.\n * The JSON representation for `BytesValue` is JSON string.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.BytesValue</code>\n */\nclass BytesValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The bytes value.\n     *\n     * Generated from protobuf field <code>bytes value = 1;</code>\n     */\n    protected $value = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $value\n     *           The bytes value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The bytes value.\n     *\n     * Generated from protobuf field <code>bytes value = 1;</code>\n     * @return string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The bytes value.\n     *\n     * Generated from protobuf field <code>bytes value = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkString($var, False);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Descriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2017 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GetPublicDescriptorTrait;\n\nclass Descriptor\n{\n    use GetPublicDescriptorTrait;\n\n    private $internal_desc;\n\n    /**\n     * @internal\n     */\n    public function __construct($internal_desc)\n    {\n        $this->internal_desc = $internal_desc;\n    }\n\n    /**\n     * @return string Full protobuf message name\n     */\n    public function getFullName()\n    {\n        return trim($this->internal_desc->getFullName(), \".\");\n    }\n\n    /**\n     * @return string PHP class name\n     */\n    public function getClass()\n    {\n        return $this->internal_desc->getClass();\n    }\n\n    /**\n     * @param int $index Must be >= 0 and < getFieldCount()\n     * @return FieldDescriptor\n     */\n    public function getField($index)\n    {\n        return $this->getPublicDescriptor($this->internal_desc->getFieldByIndex($index));\n    }\n\n    /**\n     * @return int Number of fields in message\n     */\n    public function getFieldCount()\n    {\n        return count($this->internal_desc->getField());\n    }\n\n    /**\n     * @param int $index Must be >= 0 and < getOneofDeclCount()\n     * @return OneofDescriptor\n     */\n    public function getOneofDecl($index)\n    {\n        return $this->getPublicDescriptor($this->internal_desc->getOneofDecl()[$index]);\n    }\n\n    /**\n     * @return int Number of oneofs in message\n     */\n    public function getOneofDeclCount()\n    {\n        return count($this->internal_desc->getOneofDecl());\n    }\n\n    /**\n     * @return int Number of real oneofs in message\n     */\n    public function getRealOneofDeclCount()\n    {\n        return $this->internal_desc->getRealOneofDeclCount();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/DescriptorPool.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2017 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nclass DescriptorPool\n{\n    private static $pool;\n\n    private $internal_pool;\n\n    /**\n     * @return DescriptorPool\n     */\n    public static function getGeneratedPool()\n    {\n        if (!isset(self::$pool)) {\n            self::$pool = new DescriptorPool(\\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool());\n        }\n        return self::$pool;\n    }\n\n    private function __construct($internal_pool)\n    {\n        $this->internal_pool = $internal_pool;\n    }\n\n    /**\n     * @param string $className A fully qualified protobuf class name\n     * @return Descriptor\n     */\n    public function getDescriptorByClassName($className)\n    {\n        $desc = $this->internal_pool->getDescriptorByClassName($className);\n        return is_null($desc) ? null : $desc->getPublicDescriptor();\n    }\n\n    /**\n     * @param string $className A fully qualified protobuf class name\n     * @return EnumDescriptor\n     */\n    public function getEnumDescriptorByClassName($className)\n    {\n        $desc = $this->internal_pool->getEnumDescriptorByClassName($className);\n        return is_null($desc) ? null : $desc->getPublicDescriptor();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/DoubleValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `double`.\n * The JSON representation for `DoubleValue` is JSON number.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.DoubleValue</code>\n */\nclass DoubleValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The double value.\n     *\n     * Generated from protobuf field <code>double value = 1;</code>\n     */\n    protected $value = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $value\n     *           The double value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The double value.\n     *\n     * Generated from protobuf field <code>double value = 1;</code>\n     * @return float\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The double value.\n     *\n     * Generated from protobuf field <code>double value = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Duration.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/duration.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A Duration represents a signed, fixed-length span of time represented\n * as a count of seconds and fractions of seconds at nanosecond\n * resolution. It is independent of any calendar and concepts like \"day\"\n * or \"month\". It is related to Timestamp in that the difference between\n * two Timestamp values is a Duration and it can be added or subtracted\n * from a Timestamp. Range is approximately +-10,000 years.\n * # Examples\n * Example 1: Compute Duration from two Timestamps in pseudo code.\n *     Timestamp start = ...;\n *     Timestamp end = ...;\n *     Duration duration = ...;\n *     duration.seconds = end.seconds - start.seconds;\n *     duration.nanos = end.nanos - start.nanos;\n *     if (duration.seconds < 0 && duration.nanos > 0) {\n *       duration.seconds += 1;\n *       duration.nanos -= 1000000000;\n *     } else if (duration.seconds > 0 && duration.nanos < 0) {\n *       duration.seconds -= 1;\n *       duration.nanos += 1000000000;\n *     }\n * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n *     Timestamp start = ...;\n *     Duration duration = ...;\n *     Timestamp end = ...;\n *     end.seconds = start.seconds + duration.seconds;\n *     end.nanos = start.nanos + duration.nanos;\n *     if (end.nanos < 0) {\n *       end.seconds -= 1;\n *       end.nanos += 1000000000;\n *     } else if (end.nanos >= 1000000000) {\n *       end.seconds += 1;\n *       end.nanos -= 1000000000;\n *     }\n * Example 3: Compute Duration from datetime.timedelta in Python.\n *     td = datetime.timedelta(days=3, minutes=10)\n *     duration = Duration()\n *     duration.FromTimedelta(td)\n * # JSON Mapping\n * In JSON format, the Duration type is encoded as a string rather than an\n * object, where the string ends in the suffix \"s\" (indicating seconds) and\n * is preceded by the number of seconds, with nanoseconds expressed as\n * fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n * encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n * be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n * microsecond should be expressed in JSON format as \"3.000001s\".\n *\n * Generated from protobuf message <code>google.protobuf.Duration</code>\n */\nclass Duration extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Signed seconds of the span of time. Must be from -315,576,000,000\n     * to +315,576,000,000 inclusive. Note: these bounds are computed from:\n     * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n     *\n     * Generated from protobuf field <code>int64 seconds = 1;</code>\n     */\n    protected $seconds = 0;\n    /**\n     * Signed fractions of a second at nanosecond resolution of the span\n     * of time. Durations less than one second are represented with a 0\n     * `seconds` field and a positive or negative `nanos` field. For durations\n     * of one second or more, a non-zero value for the `nanos` field must be\n     * of the same sign as the `seconds` field. Must be from -999,999,999\n     * to +999,999,999 inclusive.\n     *\n     * Generated from protobuf field <code>int32 nanos = 2;</code>\n     */\n    protected $nanos = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $seconds\n     *           Signed seconds of the span of time. Must be from -315,576,000,000\n     *           to +315,576,000,000 inclusive. Note: these bounds are computed from:\n     *           60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n     *     @type int $nanos\n     *           Signed fractions of a second at nanosecond resolution of the span\n     *           of time. Durations less than one second are represented with a 0\n     *           `seconds` field and a positive or negative `nanos` field. For durations\n     *           of one second or more, a non-zero value for the `nanos` field must be\n     *           of the same sign as the `seconds` field. Must be from -999,999,999\n     *           to +999,999,999 inclusive.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Duration::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Signed seconds of the span of time. Must be from -315,576,000,000\n     * to +315,576,000,000 inclusive. Note: these bounds are computed from:\n     * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n     *\n     * Generated from protobuf field <code>int64 seconds = 1;</code>\n     * @return int|string\n     */\n    public function getSeconds()\n    {\n        return $this->seconds;\n    }\n\n    /**\n     * Signed seconds of the span of time. Must be from -315,576,000,000\n     * to +315,576,000,000 inclusive. Note: these bounds are computed from:\n     * 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n     *\n     * Generated from protobuf field <code>int64 seconds = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setSeconds($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->seconds = $var;\n\n        return $this;\n    }\n\n    /**\n     * Signed fractions of a second at nanosecond resolution of the span\n     * of time. Durations less than one second are represented with a 0\n     * `seconds` field and a positive or negative `nanos` field. For durations\n     * of one second or more, a non-zero value for the `nanos` field must be\n     * of the same sign as the `seconds` field. Must be from -999,999,999\n     * to +999,999,999 inclusive.\n     *\n     * Generated from protobuf field <code>int32 nanos = 2;</code>\n     * @return int\n     */\n    public function getNanos()\n    {\n        return $this->nanos;\n    }\n\n    /**\n     * Signed fractions of a second at nanosecond resolution of the span\n     * of time. Durations less than one second are represented with a 0\n     * `seconds` field and a positive or negative `nanos` field. For durations\n     * of one second or more, a non-zero value for the `nanos` field must be\n     * of the same sign as the `seconds` field. Must be from -999,999,999\n     * to +999,999,999 inclusive.\n     *\n     * Generated from protobuf field <code>int32 nanos = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNanos($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->nanos = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Enum.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Enum type definition.\n * New usages of this message as an alternative to EnumDescriptorProto are\n * strongly discouraged. This message does not reliability preserve all\n * information necessary to model the schema and preserve semantics. Instead\n * make use of FileDescriptorSet which preserves the necessary information.\n *\n * Generated from protobuf message <code>google.protobuf.Enum</code>\n */\nclass Enum extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Enum type name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * Enum value definitions.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumValue enumvalue = 2;</code>\n     */\n    private $enumvalue;\n    /**\n     * Protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     */\n    private $options;\n    /**\n     * The source context.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 4;</code>\n     */\n    protected $source_context = null;\n    /**\n     * The source syntax.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 5;</code>\n     */\n    protected $syntax = 0;\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 6;</code>\n     */\n    protected $edition = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Enum type name.\n     *     @type \\Google\\Protobuf\\EnumValue[] $enumvalue\n     *           Enum value definitions.\n     *     @type \\Google\\Protobuf\\Option[] $options\n     *           Protocol buffer options.\n     *     @type \\Google\\Protobuf\\SourceContext $source_context\n     *           The source context.\n     *     @type int $syntax\n     *           The source syntax.\n     *     @type string $edition\n     *           The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Enum type name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Enum type name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Enum value definitions.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumValue enumvalue = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\EnumValue>\n     */\n    public function getEnumvalue()\n    {\n        return $this->enumvalue;\n    }\n\n    /**\n     * Enum value definitions.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumValue enumvalue = 2;</code>\n     * @param \\Google\\Protobuf\\EnumValue[] $var\n     * @return $this\n     */\n    public function setEnumvalue($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\EnumValue::class);\n        $this->enumvalue = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Option>\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * Protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     * @param \\Google\\Protobuf\\Option[] $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Option::class);\n        $this->options = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The source context.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 4;</code>\n     * @return \\Google\\Protobuf\\SourceContext|null\n     */\n    public function getSourceContext()\n    {\n        return $this->source_context;\n    }\n\n    public function hasSourceContext()\n    {\n        return isset($this->source_context);\n    }\n\n    public function clearSourceContext()\n    {\n        unset($this->source_context);\n    }\n\n    /**\n     * The source context.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 4;</code>\n     * @param \\Google\\Protobuf\\SourceContext $var\n     * @return $this\n     */\n    public function setSourceContext($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\SourceContext::class);\n        $this->source_context = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source syntax.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 5;</code>\n     * @return int\n     */\n    public function getSyntax()\n    {\n        return $this->syntax;\n    }\n\n    /**\n     * The source syntax.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 5;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setSyntax($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Syntax::class);\n        $this->syntax = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 6;</code>\n     * @return string\n     */\n    public function getEdition()\n    {\n        return $this->edition;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setEdition($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/EnumDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2017 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nclass EnumDescriptor\n{\n    private $internal_desc;\n\n    /**\n     * @internal\n     */\n    public function __construct($internal_desc)\n    {\n        $this->internal_desc = $internal_desc;\n    }\n\n    /**\n     * @return string Full protobuf message name\n     */\n    public function getFullName()\n    {\n        return $this->internal_desc->getFullName();\n    }\n\n    /**\n     * @return string PHP class name\n     */\n    public function getClass()\n    {\n        return $this->internal_desc->getClass();\n    }\n\n    /**\n     * @param int $index Must be >= 0 and < getValueCount()\n     * @return EnumValueDescriptor\n     */\n    public function getValue($index)\n    {\n        return $this->internal_desc->getValueDescriptorByIndex($index);\n    }\n\n    /**\n     * @return int Number of values in enum\n     */\n    public function getValueCount()\n    {\n        return $this->internal_desc->getValueCount();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/EnumValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Enum value definition.\n * New usages of this message as an alternative to EnumValueDescriptorProto are\n * strongly discouraged. This message does not reliability preserve all\n * information necessary to model the schema and preserve semantics. Instead\n * make use of FileDescriptorSet which preserves the necessary information.\n *\n * Generated from protobuf message <code>google.protobuf.EnumValue</code>\n */\nclass EnumValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Enum value name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * Enum value number.\n     *\n     * Generated from protobuf field <code>int32 number = 2;</code>\n     */\n    protected $number = 0;\n    /**\n     * Protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     */\n    private $options;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           Enum value name.\n     *     @type int $number\n     *           Enum value number.\n     *     @type \\Google\\Protobuf\\Option[] $options\n     *           Protocol buffer options.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Enum value name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Enum value name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Enum value number.\n     *\n     * Generated from protobuf field <code>int32 number = 2;</code>\n     * @return int\n     */\n    public function getNumber()\n    {\n        return $this->number;\n    }\n\n    /**\n     * Enum value number.\n     *\n     * Generated from protobuf field <code>int32 number = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * Protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Option>\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * Protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 3;</code>\n     * @param \\Google\\Protobuf\\Option[] $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Option::class);\n        $this->options = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/EnumValueDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nclass EnumValueDescriptor\n{\n    private $name;\n    private $number;\n\n    /**\n     * @internal\n     */\n    public function __construct($name, $number)\n    {\n        $this->name = $name;\n        $this->number = $number;\n    }\n\n    /**\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * @return int\n     */\n    public function getNumber()\n    {\n        return $this->number;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Field/Cardinality.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf\\Field;\n\nuse UnexpectedValueException;\n\n/**\n * Whether a field is optional, required, or repeated.\n *\n * Protobuf type <code>google.protobuf.Field.Cardinality</code>\n */\nclass Cardinality\n{\n    /**\n     * For fields with unknown cardinality.\n     *\n     * Generated from protobuf enum <code>CARDINALITY_UNKNOWN = 0;</code>\n     */\n    const CARDINALITY_UNKNOWN = 0;\n    /**\n     * For optional fields.\n     *\n     * Generated from protobuf enum <code>CARDINALITY_OPTIONAL = 1;</code>\n     */\n    const CARDINALITY_OPTIONAL = 1;\n    /**\n     * For required fields. Proto2 syntax only.\n     *\n     * Generated from protobuf enum <code>CARDINALITY_REQUIRED = 2;</code>\n     */\n    const CARDINALITY_REQUIRED = 2;\n    /**\n     * For repeated fields.\n     *\n     * Generated from protobuf enum <code>CARDINALITY_REPEATED = 3;</code>\n     */\n    const CARDINALITY_REPEATED = 3;\n\n    private static $valueToName = [\n        self::CARDINALITY_UNKNOWN => 'CARDINALITY_UNKNOWN',\n        self::CARDINALITY_OPTIONAL => 'CARDINALITY_OPTIONAL',\n        self::CARDINALITY_REQUIRED => 'CARDINALITY_REQUIRED',\n        self::CARDINALITY_REPEATED => 'CARDINALITY_REPEATED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Field/Kind.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf\\Field;\n\nuse UnexpectedValueException;\n\n/**\n * Basic field types.\n *\n * Protobuf type <code>google.protobuf.Field.Kind</code>\n */\nclass Kind\n{\n    /**\n     * Field type unknown.\n     *\n     * Generated from protobuf enum <code>TYPE_UNKNOWN = 0;</code>\n     */\n    const TYPE_UNKNOWN = 0;\n    /**\n     * Field type double.\n     *\n     * Generated from protobuf enum <code>TYPE_DOUBLE = 1;</code>\n     */\n    const TYPE_DOUBLE = 1;\n    /**\n     * Field type float.\n     *\n     * Generated from protobuf enum <code>TYPE_FLOAT = 2;</code>\n     */\n    const TYPE_FLOAT = 2;\n    /**\n     * Field type int64.\n     *\n     * Generated from protobuf enum <code>TYPE_INT64 = 3;</code>\n     */\n    const TYPE_INT64 = 3;\n    /**\n     * Field type uint64.\n     *\n     * Generated from protobuf enum <code>TYPE_UINT64 = 4;</code>\n     */\n    const TYPE_UINT64 = 4;\n    /**\n     * Field type int32.\n     *\n     * Generated from protobuf enum <code>TYPE_INT32 = 5;</code>\n     */\n    const TYPE_INT32 = 5;\n    /**\n     * Field type fixed64.\n     *\n     * Generated from protobuf enum <code>TYPE_FIXED64 = 6;</code>\n     */\n    const TYPE_FIXED64 = 6;\n    /**\n     * Field type fixed32.\n     *\n     * Generated from protobuf enum <code>TYPE_FIXED32 = 7;</code>\n     */\n    const TYPE_FIXED32 = 7;\n    /**\n     * Field type bool.\n     *\n     * Generated from protobuf enum <code>TYPE_BOOL = 8;</code>\n     */\n    const TYPE_BOOL = 8;\n    /**\n     * Field type string.\n     *\n     * Generated from protobuf enum <code>TYPE_STRING = 9;</code>\n     */\n    const TYPE_STRING = 9;\n    /**\n     * Field type group. Proto2 syntax only, and deprecated.\n     *\n     * Generated from protobuf enum <code>TYPE_GROUP = 10;</code>\n     */\n    const TYPE_GROUP = 10;\n    /**\n     * Field type message.\n     *\n     * Generated from protobuf enum <code>TYPE_MESSAGE = 11;</code>\n     */\n    const TYPE_MESSAGE = 11;\n    /**\n     * Field type bytes.\n     *\n     * Generated from protobuf enum <code>TYPE_BYTES = 12;</code>\n     */\n    const TYPE_BYTES = 12;\n    /**\n     * Field type uint32.\n     *\n     * Generated from protobuf enum <code>TYPE_UINT32 = 13;</code>\n     */\n    const TYPE_UINT32 = 13;\n    /**\n     * Field type enum.\n     *\n     * Generated from protobuf enum <code>TYPE_ENUM = 14;</code>\n     */\n    const TYPE_ENUM = 14;\n    /**\n     * Field type sfixed32.\n     *\n     * Generated from protobuf enum <code>TYPE_SFIXED32 = 15;</code>\n     */\n    const TYPE_SFIXED32 = 15;\n    /**\n     * Field type sfixed64.\n     *\n     * Generated from protobuf enum <code>TYPE_SFIXED64 = 16;</code>\n     */\n    const TYPE_SFIXED64 = 16;\n    /**\n     * Field type sint32.\n     *\n     * Generated from protobuf enum <code>TYPE_SINT32 = 17;</code>\n     */\n    const TYPE_SINT32 = 17;\n    /**\n     * Field type sint64.\n     *\n     * Generated from protobuf enum <code>TYPE_SINT64 = 18;</code>\n     */\n    const TYPE_SINT64 = 18;\n\n    private static $valueToName = [\n        self::TYPE_UNKNOWN => 'TYPE_UNKNOWN',\n        self::TYPE_DOUBLE => 'TYPE_DOUBLE',\n        self::TYPE_FLOAT => 'TYPE_FLOAT',\n        self::TYPE_INT64 => 'TYPE_INT64',\n        self::TYPE_UINT64 => 'TYPE_UINT64',\n        self::TYPE_INT32 => 'TYPE_INT32',\n        self::TYPE_FIXED64 => 'TYPE_FIXED64',\n        self::TYPE_FIXED32 => 'TYPE_FIXED32',\n        self::TYPE_BOOL => 'TYPE_BOOL',\n        self::TYPE_STRING => 'TYPE_STRING',\n        self::TYPE_GROUP => 'TYPE_GROUP',\n        self::TYPE_MESSAGE => 'TYPE_MESSAGE',\n        self::TYPE_BYTES => 'TYPE_BYTES',\n        self::TYPE_UINT32 => 'TYPE_UINT32',\n        self::TYPE_ENUM => 'TYPE_ENUM',\n        self::TYPE_SFIXED32 => 'TYPE_SFIXED32',\n        self::TYPE_SFIXED64 => 'TYPE_SFIXED64',\n        self::TYPE_SINT32 => 'TYPE_SINT32',\n        self::TYPE_SINT64 => 'TYPE_SINT64',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Field.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A single field of a message type.\n * New usages of this message as an alternative to FieldDescriptorProto are\n * strongly discouraged. This message does not reliability preserve all\n * information necessary to model the schema and preserve semantics. Instead\n * make use of FileDescriptorSet which preserves the necessary information.\n *\n * Generated from protobuf message <code>google.protobuf.Field</code>\n */\nclass Field extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The field type.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Field.Kind kind = 1;</code>\n     */\n    protected $kind = 0;\n    /**\n     * The field cardinality.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Field.Cardinality cardinality = 2;</code>\n     */\n    protected $cardinality = 0;\n    /**\n     * The field number.\n     *\n     * Generated from protobuf field <code>int32 number = 3;</code>\n     */\n    protected $number = 0;\n    /**\n     * The field name.\n     *\n     * Generated from protobuf field <code>string name = 4;</code>\n     */\n    protected $name = '';\n    /**\n     * The field type URL, without the scheme, for message or enumeration\n     * types. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.\n     *\n     * Generated from protobuf field <code>string type_url = 6;</code>\n     */\n    protected $type_url = '';\n    /**\n     * The index of the field type in `Type.oneofs`, for message or enumeration\n     * types. The first type has index 1; zero means the type is not in the list.\n     *\n     * Generated from protobuf field <code>int32 oneof_index = 7;</code>\n     */\n    protected $oneof_index = 0;\n    /**\n     * Whether to use alternative packed wire representation.\n     *\n     * Generated from protobuf field <code>bool packed = 8;</code>\n     */\n    protected $packed = false;\n    /**\n     * The protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 9;</code>\n     */\n    private $options;\n    /**\n     * The field JSON name.\n     *\n     * Generated from protobuf field <code>string json_name = 10;</code>\n     */\n    protected $json_name = '';\n    /**\n     * The string value of the default value of this field. Proto2 syntax only.\n     *\n     * Generated from protobuf field <code>string default_value = 11;</code>\n     */\n    protected $default_value = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $kind\n     *           The field type.\n     *     @type int $cardinality\n     *           The field cardinality.\n     *     @type int $number\n     *           The field number.\n     *     @type string $name\n     *           The field name.\n     *     @type string $type_url\n     *           The field type URL, without the scheme, for message or enumeration\n     *           types. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.\n     *     @type int $oneof_index\n     *           The index of the field type in `Type.oneofs`, for message or enumeration\n     *           types. The first type has index 1; zero means the type is not in the list.\n     *     @type bool $packed\n     *           Whether to use alternative packed wire representation.\n     *     @type \\Google\\Protobuf\\Option[] $options\n     *           The protocol buffer options.\n     *     @type string $json_name\n     *           The field JSON name.\n     *     @type string $default_value\n     *           The string value of the default value of this field. Proto2 syntax only.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The field type.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Field.Kind kind = 1;</code>\n     * @return int\n     */\n    public function getKind()\n    {\n        return $this->kind;\n    }\n\n    /**\n     * The field type.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Field.Kind kind = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setKind($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Field\\Kind::class);\n        $this->kind = $var;\n\n        return $this;\n    }\n\n    /**\n     * The field cardinality.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Field.Cardinality cardinality = 2;</code>\n     * @return int\n     */\n    public function getCardinality()\n    {\n        return $this->cardinality;\n    }\n\n    /**\n     * The field cardinality.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Field.Cardinality cardinality = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setCardinality($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Field\\Cardinality::class);\n        $this->cardinality = $var;\n\n        return $this;\n    }\n\n    /**\n     * The field number.\n     *\n     * Generated from protobuf field <code>int32 number = 3;</code>\n     * @return int\n     */\n    public function getNumber()\n    {\n        return $this->number;\n    }\n\n    /**\n     * The field number.\n     *\n     * Generated from protobuf field <code>int32 number = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * The field name.\n     *\n     * Generated from protobuf field <code>string name = 4;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The field name.\n     *\n     * Generated from protobuf field <code>string name = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The field type URL, without the scheme, for message or enumeration\n     * types. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.\n     *\n     * Generated from protobuf field <code>string type_url = 6;</code>\n     * @return string\n     */\n    public function getTypeUrl()\n    {\n        return $this->type_url;\n    }\n\n    /**\n     * The field type URL, without the scheme, for message or enumeration\n     * types. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.\n     *\n     * Generated from protobuf field <code>string type_url = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTypeUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * The index of the field type in `Type.oneofs`, for message or enumeration\n     * types. The first type has index 1; zero means the type is not in the list.\n     *\n     * Generated from protobuf field <code>int32 oneof_index = 7;</code>\n     * @return int\n     */\n    public function getOneofIndex()\n    {\n        return $this->oneof_index;\n    }\n\n    /**\n     * The index of the field type in `Type.oneofs`, for message or enumeration\n     * types. The first type has index 1; zero means the type is not in the list.\n     *\n     * Generated from protobuf field <code>int32 oneof_index = 7;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setOneofIndex($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->oneof_index = $var;\n\n        return $this;\n    }\n\n    /**\n     * Whether to use alternative packed wire representation.\n     *\n     * Generated from protobuf field <code>bool packed = 8;</code>\n     * @return bool\n     */\n    public function getPacked()\n    {\n        return $this->packed;\n    }\n\n    /**\n     * Whether to use alternative packed wire representation.\n     *\n     * Generated from protobuf field <code>bool packed = 8;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setPacked($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->packed = $var;\n\n        return $this;\n    }\n\n    /**\n     * The protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 9;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Option>\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * The protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 9;</code>\n     * @param \\Google\\Protobuf\\Option[] $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Option::class);\n        $this->options = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The field JSON name.\n     *\n     * Generated from protobuf field <code>string json_name = 10;</code>\n     * @return string\n     */\n    public function getJsonName()\n    {\n        return $this->json_name;\n    }\n\n    /**\n     * The field JSON name.\n     *\n     * Generated from protobuf field <code>string json_name = 10;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setJsonName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->json_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The string value of the default value of this field. Proto2 syntax only.\n     *\n     * Generated from protobuf field <code>string default_value = 11;</code>\n     * @return string\n     */\n    public function getDefaultValue()\n    {\n        return $this->default_value;\n    }\n\n    /**\n     * The string value of the default value of this field. Proto2 syntax only.\n     *\n     * Generated from protobuf field <code>string default_value = 11;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDefaultValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->default_value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/FieldDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2017 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GetPublicDescriptorTrait;\nuse Google\\Protobuf\\Internal\\GPBType;\n\nclass FieldDescriptor\n{\n    use GetPublicDescriptorTrait;\n\n    /** @var  \\Google\\Protobuf\\Internal\\FieldDescriptor $internal_desc */\n    private $internal_desc;\n\n    /**\n     * @internal\n     */\n    public function __construct($internal_desc)\n    {\n        $this->internal_desc = $internal_desc;\n    }\n\n    /**\n     * @return string Field name\n     */\n    public function getName()\n    {\n        return $this->internal_desc->getName();\n    }\n\n    /**\n     * @return int Protobuf field number\n     */\n    public function getNumber()\n    {\n        return $this->internal_desc->getNumber();\n    }\n\n    /**\n     * @deprecated Use isRepeated() or isRequired() instead.\n     *\n     * @return int\n     */\n    public function getLabel()\n    {\n        return $this->internal_desc->getLabel();\n    }\n\n    /**\n     * @return boolean\n     */\n    public function isRequired()\n    {\n        return $this->internal_desc->isRequired();\n    }\n\n    /**\n     * @return boolean\n     */\n    public function isRepeated()\n    {\n        return $this->internal_desc->isRepeated();\n    }\n\n    /**\n     * @return int\n     */\n    public function getType()\n    {\n        return $this->internal_desc->getType();\n    }\n\n    /**\n     * @return OneofDescriptor\n     */\n    public function getContainingOneof()\n    {\n        return $this->getPublicDescriptor($this->internal_desc->getContainingOneof());\n    }\n\n    /**\n     * Gets the field's containing oneof, only if non-synthetic.\n     *\n     * @return null|OneofDescriptor\n     */\n    public function getRealContainingOneof()\n    {\n        return $this->getPublicDescriptor($this->internal_desc->getRealContainingOneof());\n    }\n\n    /**\n     * @return boolean\n     */\n    public function hasOptionalKeyword()\n    {\n        return $this->internal_desc->hasOptionalKeyword();\n    }\n\n    /**\n     * @return Descriptor Returns a descriptor for the field type if the field type is a message, otherwise throws \\Exception\n     * @throws \\Exception\n     */\n    public function getMessageType()\n    {\n        if ($this->getType() == GPBType::MESSAGE) {\n            return $this->getPublicDescriptor($this->internal_desc->getMessageType());\n        } else {\n            throw new \\Exception(\"Cannot get message type for non-message field '\" . $this->getName() . \"'\");\n        }\n    }\n\n    /**\n     * @return EnumDescriptor Returns an enum descriptor if the field type is an enum, otherwise throws \\Exception\n     * @throws \\Exception\n     */\n    public function getEnumType()\n    {\n        if ($this->getType() == GPBType::ENUM) {\n            return $this->getPublicDescriptor($this->internal_desc->getEnumType());\n        } else {\n            throw new \\Exception(\"Cannot get enum type for non-enum field '\" . $this->getName() . \"'\");\n        }\n    }\n\n    /**\n     * @return boolean\n     */\n    public function isMap()\n    {\n        return $this->internal_desc->isMap();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/FieldMask.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/field_mask.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * `FieldMask` represents a set of symbolic field paths, for example:\n *     paths: \"f.a\"\n *     paths: \"f.b.d\"\n * Here `f` represents a field in some root message, `a` and `b`\n * fields in the message found in `f`, and `d` a field found in the\n * message in `f.b`.\n * Field masks are used to specify a subset of fields that should be\n * returned by a get operation or modified by an update operation.\n * Field masks also have a custom JSON encoding (see below).\n * # Field Masks in Projections\n * When used in the context of a projection, a response message or\n * sub-message is filtered by the API to only contain those fields as\n * specified in the mask. For example, if the mask in the previous\n * example is applied to a response message as follows:\n *     f {\n *       a : 22\n *       b {\n *         d : 1\n *         x : 2\n *       }\n *       y : 13\n *     }\n *     z: 8\n * The result will not contain specific values for fields x,y and z\n * (their value will be set to the default, and omitted in proto text\n * output):\n *     f {\n *       a : 22\n *       b {\n *         d : 1\n *       }\n *     }\n * A repeated field is not allowed except at the last position of a\n * paths string.\n * If a FieldMask object is not present in a get operation, the\n * operation applies to all fields (as if a FieldMask of all fields\n * had been specified).\n * Note that a field mask does not necessarily apply to the\n * top-level response message. In case of a REST get operation, the\n * field mask applies directly to the response, but in case of a REST\n * list operation, the mask instead applies to each individual message\n * in the returned resource list. In case of a REST custom method,\n * other definitions may be used. Where the mask applies will be\n * clearly documented together with its declaration in the API.  In\n * any case, the effect on the returned resource/resources is required\n * behavior for APIs.\n * # Field Masks in Update Operations\n * A field mask in update operations specifies which fields of the\n * targeted resource are going to be updated. The API is required\n * to only change the values of the fields as specified in the mask\n * and leave the others untouched. If a resource is passed in to\n * describe the updated values, the API ignores the values of all\n * fields not covered by the mask.\n * If a repeated field is specified for an update operation, new values will\n * be appended to the existing repeated field in the target resource. Note that\n * a repeated field is only allowed in the last position of a `paths` string.\n * If a sub-message is specified in the last position of the field mask for an\n * update operation, then new value will be merged into the existing sub-message\n * in the target resource.\n * For example, given the target message:\n *     f {\n *       b {\n *         d: 1\n *         x: 2\n *       }\n *       c: [1]\n *     }\n * And an update message:\n *     f {\n *       b {\n *         d: 10\n *       }\n *       c: [2]\n *     }\n * then if the field mask is:\n *  paths: [\"f.b\", \"f.c\"]\n * then the result will be:\n *     f {\n *       b {\n *         d: 10\n *         x: 2\n *       }\n *       c: [1, 2]\n *     }\n * An implementation may provide options to override this default behavior for\n * repeated and message fields.\n * In order to reset a field's value to the default, the field must\n * be in the mask and set to the default value in the provided resource.\n * Hence, in order to reset all fields of a resource, provide a default\n * instance of the resource and set all fields in the mask, or do\n * not provide a mask as described below.\n * If a field mask is not present on update, the operation applies to\n * all fields (as if a field mask of all fields has been specified).\n * Note that in the presence of schema evolution, this may mean that\n * fields the client does not know and has therefore not filled into\n * the request will be reset to their default. If this is unwanted\n * behavior, a specific service may require a client to always specify\n * a field mask, producing an error if not.\n * As with get operations, the location of the resource which\n * describes the updated values in the request message depends on the\n * operation kind. In any case, the effect of the field mask is\n * required to be honored by the API.\n * ## Considerations for HTTP REST\n * The HTTP kind of an update operation which uses a field mask must\n * be set to PATCH instead of PUT in order to satisfy HTTP semantics\n * (PUT must only be used for full updates).\n * # JSON Encoding of Field Masks\n * In JSON, a field mask is encoded as a single string where paths are\n * separated by a comma. Fields name in each path are converted\n * to/from lower-camel naming conventions.\n * As an example, consider the following message declarations:\n *     message Profile {\n *       User user = 1;\n *       Photo photo = 2;\n *     }\n *     message User {\n *       string display_name = 1;\n *       string address = 2;\n *     }\n * In proto a field mask for `Profile` may look as such:\n *     mask {\n *       paths: \"user.display_name\"\n *       paths: \"photo\"\n *     }\n * In JSON, the same mask is represented as below:\n *     {\n *       mask: \"user.displayName,photo\"\n *     }\n * # Field Masks and Oneof Fields\n * Field masks treat fields in oneofs just as regular fields. Consider the\n * following message:\n *     message SampleMessage {\n *       oneof test_oneof {\n *         string name = 4;\n *         SubMessage sub_message = 9;\n *       }\n *     }\n * The field mask can be:\n *     mask {\n *       paths: \"name\"\n *     }\n * Or:\n *     mask {\n *       paths: \"sub_message\"\n *     }\n * Note that oneof type names (\"test_oneof\" in this case) cannot be used in\n * paths.\n * ## Field Mask Verification\n * The implementation of any API method which has a FieldMask type field in the\n * request should verify the included field paths, and return an\n * `INVALID_ARGUMENT` error if any path is unmappable.\n *\n * Generated from protobuf message <code>google.protobuf.FieldMask</code>\n */\nclass FieldMask extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The set of field mask paths.\n     *\n     * Generated from protobuf field <code>repeated string paths = 1;</code>\n     */\n    private $paths;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string[] $paths\n     *           The set of field mask paths.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\FieldMask::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The set of field mask paths.\n     *\n     * Generated from protobuf field <code>repeated string paths = 1;</code>\n     * @return RepeatedField<string>\n     */\n    public function getPaths()\n    {\n        return $this->paths;\n    }\n\n    /**\n     * The set of field mask paths.\n     *\n     * Generated from protobuf field <code>repeated string paths = 1;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setPaths($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->paths = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Field_Cardinality.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nif (false) {\n    /**\n     * This class is deprecated. Use Google\\Protobuf\\Field\\Cardinality instead.\n     * @deprecated\n     */\n    class Field_Cardinality {}\n}\nclass_exists(Field\\Cardinality::class);\n@trigger_error('Google\\Protobuf\\Field_Cardinality is deprecated and will be removed in the next major release. Use Google\\Protobuf\\Field\\Cardinality instead', E_USER_DEPRECATED);\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Field_Kind.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nif (false) {\n    /**\n     * This class is deprecated. Use Google\\Protobuf\\Field\\Kind instead.\n     * @deprecated\n     */\n    class Field_Kind {}\n}\nclass_exists(Field\\Kind::class);\n@trigger_error('Google\\Protobuf\\Field_Kind is deprecated and will be removed in the next major release. Use Google\\Protobuf\\Field\\Kind instead', E_USER_DEPRECATED);\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/FloatValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `float`.\n * The JSON representation for `FloatValue` is JSON number.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.FloatValue</code>\n */\nclass FloatValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The float value.\n     *\n     * Generated from protobuf field <code>float value = 1;</code>\n     */\n    protected $value = 0.0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type float $value\n     *           The float value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The float value.\n     *\n     * Generated from protobuf field <code>float value = 1;</code>\n     * @return float\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The float value.\n     *\n     * Generated from protobuf field <code>float value = 1;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkFloat($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/GPBEmpty.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/empty.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A generic empty message that you can re-use to avoid defining duplicated\n * empty messages in your APIs. A typical example is to use it as the request\n * or the response type of an API method. For instance:\n *     service Foo {\n *       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n *     }\n *\n * Generated from protobuf message <code>google.protobuf.Empty</code>\n */\nclass GPBEmpty extends \\Google\\Protobuf\\Internal\\Message\n{\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\GPBEmpty::initOnce();\n        parent::__construct($data);\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Int32Value.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `int32`.\n * The JSON representation for `Int32Value` is JSON number.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.Int32Value</code>\n */\nclass Int32Value extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The int32 value.\n     *\n     * Generated from protobuf field <code>int32 value = 1;</code>\n     */\n    protected $value = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $value\n     *           The int32 value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The int32 value.\n     *\n     * Generated from protobuf field <code>int32 value = 1;</code>\n     * @return int\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The int32 value.\n     *\n     * Generated from protobuf field <code>int32 value = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Int64Value.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `int64`.\n * The JSON representation for `Int64Value` is JSON string.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.Int64Value</code>\n */\nclass Int64Value extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The int64 value.\n     *\n     * Generated from protobuf field <code>int64 value = 1;</code>\n     */\n    protected $value = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $value\n     *           The int64 value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The int64 value.\n     *\n     * Generated from protobuf field <code>int64 value = 1;</code>\n     * @return int|string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The int64 value.\n     *\n     * Generated from protobuf field <code>int64 value = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/AnyBase.php",
    "content": "<?php\n\nnamespace Google\\Protobuf\\Internal;\n\n/**\n * Base class for Google\\Protobuf\\Any, this contains hand-written convenience\n * methods like pack() and unpack().\n */\nclass AnyBase extends \\Google\\Protobuf\\Internal\\Message\n{\n    const TYPE_URL_PREFIX = 'type.googleapis.com/';\n\n    /**\n     * This method will try to resolve the type_url in Any message to get the\n     * targeted message type. If failed, an error will be thrown. Otherwise,\n     * the method will create a message of the targeted type and fill it with\n     * the decoded value in Any.\n     * @return Message unpacked message\n     * @throws \\Exception Type url needs to be type.googleapis.com/fully-qualified.\n     * @throws \\Exception Class hasn't been added to descriptor pool.\n     * @throws \\Exception cannot decode data in value field.\n     */\n    public function unpack()\n    {\n        // Get fully qualified name from type url.\n        $url_prifix_len = strlen(GPBUtil::TYPE_URL_PREFIX);\n        if (substr($this->type_url, 0, $url_prifix_len) !=\n                GPBUtil::TYPE_URL_PREFIX) {\n            throw new \\Exception(\n                \"Type url needs to be type.googleapis.com/fully-qulified\");\n        }\n        $fully_qualified_name =\n            substr($this->type_url, $url_prifix_len);\n\n        // Create message according to fully qualified name.\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n        $desc = $pool->getDescriptorByProtoName($fully_qualified_name);\n        if (is_null($desc)) {\n            throw new \\Exception(\"Class \".$fully_qualified_name\n                                     .\" hasn't been added to descriptor pool\");\n        }\n        $klass = $desc->getClass();\n        $msg = new $klass();\n\n        // Merge data into message.\n        $msg->mergeFromString($this->value);\n        return $msg;\n    }\n\n    /**\n     * The type_url will be created according to the given message’s type and\n     * the value is encoded data from the given message..\n     * @param Message $msg A proto message.\n     */\n    public function pack($msg)\n    {\n        if (!$msg instanceof Message) {\n            trigger_error(\"Given parameter is not a message instance.\",\n                          E_USER_ERROR);\n            return;\n        }\n\n        // Set value using serialized message.\n        $this->value = $msg->serializeToString();\n\n        // Set type url.\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n        $desc = $pool->getDescriptorByClassName(get_class($msg));\n        $fully_qualified_name = $desc->getFullName();\n        $this->type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualified_name;\n    }\n\n    /**\n     * This method returns whether the type_url in any_message is corresponded\n     * to the given class.\n     * @param string $klass The fully qualified PHP class name of a proto message type.\n     */\n    public function is($klass)\n    {\n        $pool = \\Google\\Protobuf\\Internal\\DescriptorPool::getGeneratedPool();\n        $desc = $pool->getDescriptorByClassName($klass);\n        $fully_qualified_name = $desc->getFullName();\n        $type_url = GPBUtil::TYPE_URL_PREFIX . $fully_qualified_name;\n        return $this->type_url === $type_url;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedInputStream.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\Uint64;\n\nclass CodedInputStream\n{\n\n    private $buffer;\n    private $buffer_size_after_limit;\n    private $buffer_end;\n    private $current;\n    private $current_limit;\n    private $legitimate_message_end;\n    private $recursion_budget;\n    private $recursion_limit;\n    private $total_bytes_limit;\n    private $total_bytes_read;\n\n    const MAX_VARINT_BYTES = 10;\n    const DEFAULT_RECURSION_LIMIT = 100;\n    const DEFAULT_TOTAL_BYTES_LIMIT = 33554432; // 32 << 20, 32MB\n\n    public function __construct($buffer)\n    {\n        $start = 0;\n        $end = strlen($buffer);\n        $this->buffer = $buffer;\n        $this->buffer_size_after_limit = 0;\n        $this->buffer_end = $end;\n        $this->current = $start;\n        $this->current_limit = $end;\n        $this->legitimate_message_end = false;\n        $this->recursion_budget = self::DEFAULT_RECURSION_LIMIT;\n        $this->recursion_limit = self::DEFAULT_RECURSION_LIMIT;\n        $this->total_bytes_limit = self::DEFAULT_TOTAL_BYTES_LIMIT;\n        $this->total_bytes_read = $end - $start;\n    }\n\n    private function advance($amount)\n    {\n        $this->current += $amount;\n    }\n\n    public function bufferSize()\n    {\n        return $this->buffer_end - $this->current;\n    }\n\n    public function current()\n    {\n        return $this->total_bytes_read -\n            ($this->buffer_end - $this->current +\n            $this->buffer_size_after_limit);\n    }\n\n    public function substr($start, $end)\n    {\n        return substr($this->buffer, $start, $end - $start);\n    }\n\n    private function recomputeBufferLimits()\n    {\n        $this->buffer_end += $this->buffer_size_after_limit;\n        $closest_limit = min($this->current_limit, $this->total_bytes_limit);\n        if ($closest_limit < $this->total_bytes_read) {\n            // The limit position is in the current buffer.  We must adjust the\n            // buffer size accordingly.\n            $this->buffer_size_after_limit = $this->total_bytes_read -\n                $closest_limit;\n            $this->buffer_end -= $this->buffer_size_after_limit;\n        } else {\n            $this->buffer_size_after_limit = 0;\n        }\n    }\n\n    private function consumedEntireMessage()\n    {\n        return $this->legitimate_message_end;\n    }\n\n    /**\n     * Read uint32 into $var. Advance buffer with consumed bytes. If the\n     * contained varint is larger than 32 bits, discard the high order bits.\n     * @param $var\n     */\n    public function readVarint32(&$var)\n    {\n        if (!$this->readVarint64($var)) {\n            return false;\n        }\n\n        if (PHP_INT_SIZE == 4) {\n            $var = bcmod($var, 4294967296);\n        } else {\n            $var &= 0xFFFFFFFF;\n        }\n\n        // Convert large uint32 to int32.\n        if ($var > 0x7FFFFFFF) {\n            if (PHP_INT_SIZE === 8) {\n                $var = $var | (0xFFFFFFFF << 32);\n            } else {\n                $var = bcsub($var, 4294967296);\n            }\n        }\n\n        $var = intval($var);\n        return true;\n    }\n\n    /**\n     * Read Uint64 into $var. Advance buffer with consumed bytes.\n     * @param $var\n     */\n    public function readVarint64(&$var)\n    {\n        $count = 0;\n\n        if (PHP_INT_SIZE == 4) {\n            $high = 0;\n            $low = 0;\n            $b = 0;\n\n            do {\n                if ($this->current === $this->buffer_end) {\n                    return false;\n                }\n                if ($count === self::MAX_VARINT_BYTES) {\n                    return false;\n                }\n                $b = ord($this->buffer[$this->current]);\n                $bits = 7 * $count;\n                if ($bits >= 32) {\n                    $high |= (($b & 0x7F) << ($bits - 32));\n                } else if ($bits > 25){\n                    // $bits is 28 in this case.\n                    $low |= (($b & 0x7F) << 28);\n                    $high = ($b & 0x7F) >> 4;\n                } else {\n                    $low |= (($b & 0x7F) << $bits);\n                }\n\n                $this->advance(1);\n                $count += 1;\n            } while ($b & 0x80);\n\n            $var = GPBUtil::combineInt32ToInt64($high, $low);\n            if (bccomp($var, 0) < 0) {\n                $var = bcadd($var, \"18446744073709551616\");\n            }\n        } else {\n            $result = 0;\n            $shift = 0;\n\n            do {\n                if ($this->current === $this->buffer_end) {\n                    return false;\n                }\n                if ($count === self::MAX_VARINT_BYTES) {\n                    return false;\n                }\n\n                $byte = ord($this->buffer[$this->current]);\n                $result |= ($byte & 0x7f) << $shift;\n                $shift += 7;\n                $this->advance(1);\n                $count += 1;\n            } while ($byte > 0x7f);\n\n            $var = $result;\n        }\n\n        return true;\n    }\n\n    /**\n     * Read int into $var. If the result is larger than the largest integer, $var\n     * will be -1. Advance buffer with consumed bytes.\n     * @param $var\n     */\n    public function readVarintSizeAsInt(&$var)\n    {\n        if (!$this->readVarint64($var)) {\n            return false;\n        }\n        $var = (int)$var;\n        return true;\n    }\n\n    /**\n     * Read 32-bit unsigned integer to $var. If the buffer has less than 4 bytes,\n     * return false. Advance buffer with consumed bytes.\n     * @param $var\n     */\n    public function readLittleEndian32(&$var)\n    {\n        $data = null;\n        if (!$this->readRaw(4, $data)) {\n            return false;\n        }\n        $var = unpack('V', $data);\n        $var = $var[1];\n        return true;\n    }\n\n    /**\n     * Read 64-bit unsigned integer to $var. If the buffer has less than 8 bytes,\n     * return false. Advance buffer with consumed bytes.\n     * @param $var\n     */\n    public function readLittleEndian64(&$var)\n    {\n        $data = null;\n        if (!$this->readRaw(4, $data)) {\n            return false;\n        }\n        $low = unpack('V', $data)[1];\n        if (!$this->readRaw(4, $data)) {\n            return false;\n        }\n        $high = unpack('V', $data)[1];\n        if (PHP_INT_SIZE == 4) {\n            $var = GPBUtil::combineInt32ToInt64($high, $low);\n        } else {\n            $var = ($high << 32) | $low;\n        }\n        return true;\n    }\n\n    /**\n     * Read tag into $var. Advance buffer with consumed bytes.\n     */\n    public function readTag()\n    {\n        if ($this->current === $this->buffer_end) {\n            // Make sure that it failed due to EOF, not because we hit\n            // total_bytes_limit, which, unlike normal limits, is not a valid\n            // place to end a message.\n            $current_position = $this->total_bytes_read -\n                $this->buffer_size_after_limit;\n            if ($current_position >= $this->total_bytes_limit) {\n                // Hit total_bytes_limit_.  But if we also hit the normal limit,\n                // we're still OK.\n                $this->legitimate_message_end =\n                    ($this->current_limit === $this->total_bytes_limit);\n            } else {\n                $this->legitimate_message_end = true;\n            }\n            return 0;\n        }\n\n        $result = 0;\n        // The largest tag is 2^29 - 1, which can be represented by int32.\n        $success = $this->readVarint32($result);\n        if ($success) {\n            return $result;\n        } else {\n            return 0;\n        }\n    }\n\n    public function readRaw($size, &$buffer)\n    {\n        $current_buffer_size = 0;\n        if ($this->bufferSize() < $size) {\n            return false;\n        }\n\n        if ($size === 0) {\n          $buffer = \"\";\n        } else {\n          $buffer = substr($this->buffer, $this->current, $size);\n          $this->advance($size);\n        }\n\n        return true;\n    }\n\n    /* Places a limit on the number of bytes that the stream may read, starting\n     * from the current position.  Once the stream hits this limit, it will act\n     * like the end of the input has been reached until popLimit() is called.\n     *\n     * As the names imply, the stream conceptually has a stack of limits.  The\n     * shortest limit on the stack is always enforced, even if it is not the top\n     * limit.\n     *\n     * The value returned by pushLimit() is opaque to the caller, and must be\n     * passed unchanged to the corresponding call to popLimit().\n     *\n     * @param integer $byte_limit\n     * @throws \\Exception Fail to push limit.\n     */\n    public function pushLimit($byte_limit)\n    {\n        // Current position relative to the beginning of the stream.\n        $current_position = $this->current();\n        $old_limit = $this->current_limit;\n\n        // security: byte_limit is possibly evil, so check for negative values\n        // and overflow.\n        if ($byte_limit >= 0 &&\n            $byte_limit <= PHP_INT_MAX - $current_position &&\n            $byte_limit <= $this->current_limit - $current_position) {\n            $this->current_limit = $current_position + $byte_limit;\n            $this->recomputeBufferLimits();\n        } else {\n            throw new GPBDecodeException(\"Fail to push limit.\");\n        }\n\n        return $old_limit;\n    }\n\n    /* The limit passed in is actually the *old* limit, which we returned from\n     * PushLimit().\n     *\n     * @param integer $byte_limit\n     */\n    public function popLimit($byte_limit)\n    {\n        $this->current_limit = $byte_limit;\n        $this->recomputeBufferLimits();\n        // We may no longer be at a legitimate message end.  ReadTag() needs to\n        // be called again to find out.\n        $this->legitimate_message_end = false;\n    }\n\n    public function incrementRecursionDepthAndPushLimit(\n        $byte_limit, &$old_limit, &$recursion_budget)\n    {\n        $old_limit = $this->pushLimit($byte_limit);\n        $recursion_limit = --$this->recursion_limit;\n    }\n\n    public function decrementRecursionDepthAndPopLimit($byte_limit)\n    {\n        $result = $this->consumedEntireMessage();\n        $this->popLimit($byte_limit);\n        ++$this->recursion_budget;\n        return $result;\n    }\n\n    public function bytesUntilLimit()\n    {\n        if ($this->current_limit === PHP_INT_MAX) {\n            return -1;\n        }\n        return $this->current_limit - $this->current;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/CodedOutputStream.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass CodedOutputStream\n{\n\n    private $buffer;\n    private $buffer_size;\n    private $current;\n    private $options;\n\n    const MAX_VARINT64_BYTES = 10;\n\n    public function __construct($size, $options = 0)\n    {\n        $this->current = 0;\n        $this->buffer_size = $size;\n        $this->buffer = str_repeat(chr(0), $this->buffer_size);\n        $this->options = $options;\n    }\n\n    public function getData()\n    {\n        return $this->buffer;\n    }\n\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function writeVarint32($value, $trim)\n    {\n        $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES);\n        $size = self::writeVarintToArray($value, $bytes, $trim);\n        return $this->writeRaw($bytes, $size);\n    }\n\n    public function writeVarint64($value)\n    {\n        $bytes = str_repeat(chr(0), self::MAX_VARINT64_BYTES);\n        $size = self::writeVarintToArray($value, $bytes);\n        return $this->writeRaw($bytes, $size);\n    }\n\n    public function writeLittleEndian32($value)\n    {\n        $bytes = str_repeat(chr(0), 4);\n        $size = self::writeLittleEndian32ToArray($value, $bytes);\n        return $this->writeRaw($bytes, $size);\n    }\n\n    public function writeLittleEndian64($value)\n    {\n        $bytes = str_repeat(chr(0), 8);\n        $size = self::writeLittleEndian64ToArray($value, $bytes);\n        return $this->writeRaw($bytes, $size);\n    }\n\n    public function writeTag($tag)\n    {\n        return $this->writeVarint32($tag, true);\n    }\n\n    public function writeRaw($data, $size)\n    {\n        if ($this->buffer_size < $size) {\n            trigger_error(\"Output stream doesn't have enough buffer.\");\n            return false;\n        }\n\n        for ($i = 0; $i < $size; $i++) {\n            $this->buffer[$this->current] = $data[$i];\n            $this->current++;\n            $this->buffer_size--;\n        }\n        return true;\n    }\n\n    public static function writeVarintToArray($value, &$buffer, $trim = false)\n    {\n        $current = 0;\n\n        $high = 0;\n        $low = 0;\n        if (PHP_INT_SIZE == 4) {\n            GPBUtil::divideInt64ToInt32($value, $high, $low, $trim);\n        } else {\n            $low = $value;\n        }\n\n        while (($low >= 0x80 || $low < 0) || $high != 0) {\n            $buffer[$current] = chr($low | 0x80);\n            $value = ($value >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7));\n            $carry = ($high & 0x7F) << ((PHP_INT_SIZE << 3) - 7);\n            $high = ($high >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7));\n            $low = (($low >> 7) & ~(0x7F << ((PHP_INT_SIZE << 3) - 7)) | $carry);\n            $current++;\n        }\n        $buffer[$current] = chr($low);\n        return $current + 1;\n    }\n\n    private static function writeLittleEndian32ToArray($value, &$buffer)\n    {\n        $buffer[0] = chr($value & 0x000000FF);\n        $buffer[1] = chr(($value >> 8) & 0x000000FF);\n        $buffer[2] = chr(($value >> 16) & 0x000000FF);\n        $buffer[3] = chr(($value >> 24) & 0x000000FF);\n        return 4;\n    }\n\n    private static function writeLittleEndian64ToArray($value, &$buffer)\n    {\n        $high = 0;\n        $low = 0;\n        if (PHP_INT_SIZE == 4) {\n            GPBUtil::divideInt64ToInt32($value, $high, $low);\n        } else {\n            $low = $value & 0xFFFFFFFF;\n            $high = ($value >> 32) & 0xFFFFFFFF;\n        }\n\n        $buffer[0] = chr($low & 0x000000FF);\n        $buffer[1] = chr(($low >> 8) & 0x000000FF);\n        $buffer[2] = chr(($low >> 16) & 0x000000FF);\n        $buffer[3] = chr(($low >> 24) & 0x000000FF);\n        $buffer[4] = chr($high & 0x000000FF);\n        $buffer[5] = chr(($high >> 8) & 0x000000FF);\n        $buffer[6] = chr(($high >> 16) & 0x000000FF);\n        $buffer[7] = chr(($high >> 24) & 0x000000FF);\n        return 8;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/Descriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass Descriptor\n{\n    use HasPublicDescriptorTrait;\n\n    private $full_name;\n    private $field = [];\n    private $json_to_field = [];\n    private $name_to_field = [];\n    private $index_to_field = [];\n    private $nested_type = [];\n    private $enum_type = [];\n    private $klass;\n    private $legacy_klass;\n    private $previous_klass;\n    private $options;\n    private $oneof_decl = [];\n\n    public function __construct()\n    {\n        $this->public_desc = new \\Google\\Protobuf\\Descriptor($this);\n    }\n\n    public function addOneofDecl($oneof)\n    {\n        $this->oneof_decl[] = $oneof;\n    }\n\n    public function getOneofDecl()\n    {\n        return $this->oneof_decl;\n    }\n\n    public function setFullName($full_name)\n    {\n        $this->full_name = $full_name;\n    }\n\n    public function getFullName()\n    {\n        return $this->full_name;\n    }\n\n    public function addField($field)\n    {\n        $this->field[$field->getNumber()] = $field;\n        $this->json_to_field[$field->getJsonName()] = $field;\n        $this->name_to_field[$field->getName()] = $field;\n        $this->index_to_field[] = $field;\n    }\n\n    public function getField()\n    {\n        return $this->field;\n    }\n\n    public function addNestedType($desc)\n    {\n        $this->nested_type[] = $desc;\n    }\n\n    public function getNestedType()\n    {\n        return $this->nested_type;\n    }\n\n    public function addEnumType($desc)\n    {\n        $this->enum_type[] = $desc;\n    }\n\n    public function getEnumType()\n    {\n        return $this->enum_type;\n    }\n\n    public function getFieldByNumber($number)\n    {\n        if (!isset($this->field[$number])) {\n          return NULL;\n        } else {\n          return $this->field[$number];\n        }\n    }\n\n    public function getFieldByJsonName($json_name)\n    {\n        if (!isset($this->json_to_field[$json_name])) {\n          return NULL;\n        } else {\n          return $this->json_to_field[$json_name];\n        }\n    }\n\n    public function getFieldByName($name)\n    {\n        if (!isset($this->name_to_field[$name])) {\n          return NULL;\n        } else {\n          return $this->name_to_field[$name];\n        }\n    }\n\n    public function getFieldByIndex($index)\n    {\n        if (count($this->index_to_field) <= $index) {\n            return NULL;\n        } else {\n            return $this->index_to_field[$index];\n        }\n    }\n\n    public function setClass($klass)\n    {\n        $this->klass = $klass;\n    }\n\n    public function getClass()\n    {\n        return $this->klass;\n    }\n\n    public function setLegacyClass($klass)\n    {\n        $this->legacy_klass = $klass;\n    }\n\n    public function getLegacyClass()\n    {\n        return $this->legacy_klass;\n    }\n\n    public function setPreviouslyUnreservedClass($klass)\n    {\n        $this->previous_klass = $klass;\n    }\n\n    public function getPreviouslyUnreservedClass()\n    {\n        return $this->previous_klass;\n    }\n\n    public function setOptions($options)\n    {\n        $this->options = $options;\n    }\n\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public static function buildFromProto($proto, $file_proto, $containing)\n    {\n        $desc = new Descriptor();\n\n        $message_name_without_package  = \"\";\n        $classname = \"\";\n        $legacy_classname = \"\";\n        $previous_classname = \"\";\n        $fullname = \"\";\n        GPBUtil::getFullClassName(\n            $proto,\n            $containing,\n            $file_proto,\n            $message_name_without_package,\n            $classname,\n            $legacy_classname,\n            $fullname,\n            $previous_classname);\n        $desc->setFullName($fullname);\n        $desc->setClass($classname);\n        $desc->setLegacyClass($legacy_classname);\n        $desc->setPreviouslyUnreservedClass($previous_classname);\n        $desc->setOptions($proto->getOptions());\n\n        foreach ($proto->getField() as $field_proto) {\n            $desc->addField(FieldDescriptor::buildFromProto($field_proto));\n        }\n\n        // Handle nested types.\n        foreach ($proto->getNestedType() as $nested_proto) {\n            $desc->addNestedType(Descriptor::buildFromProto(\n              $nested_proto, $file_proto, $message_name_without_package));\n        }\n\n        // Handle nested enum.\n        foreach ($proto->getEnumType() as $enum_proto) {\n            $desc->addEnumType(EnumDescriptor::buildFromProto(\n              $enum_proto, $file_proto, $message_name_without_package));\n        }\n\n        // Handle oneof fields.\n        $index = 0;\n        foreach ($proto->getOneofDecl() as $oneof_proto) {\n            $desc->addOneofDecl(\n                OneofDescriptor::buildFromProto($oneof_proto, $desc, $index));\n            $index++;\n        }\n\n        return $desc;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorPool.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\Descriptor;\nuse Google\\Protobuf\\Internal\\FileDescriptor;\nuse Google\\Protobuf\\Internal\\FileDescriptorSet;\nuse Google\\Protobuf\\Internal\\MessageBuilderContext;\nuse Google\\Protobuf\\Internal\\EnumBuilderContext;\n\nclass DescriptorPool\n{\n    private static $pool;\n    // Map from message names to sub-maps, which are maps from field numbers to\n    // field descriptors.\n    private $unique_descs = [];\n    private $class_to_desc = [];\n    private $class_to_enum_desc = [];\n    private $proto_to_class = [];\n\n    public static function getGeneratedPool()\n    {\n        if (!isset(self::$pool)) {\n            self::$pool = new DescriptorPool();\n        }\n        return self::$pool;\n    }\n\n    public function internalAddGeneratedFile($data, $use_nested = false)\n    {\n        $files = new FileDescriptorSet();\n        $files->mergeFromString($data);\n\n        foreach($files->getFile() as $file_proto) {\n            $file = FileDescriptor::buildFromProto($file_proto);\n\n            foreach ($file->getMessageType() as $desc) {\n                $this->addDescriptor($desc);\n            }\n            unset($desc);\n\n            foreach ($file->getEnumType() as $desc) {\n                $this->addEnumDescriptor($desc);\n            }\n            unset($desc);\n\n            foreach ($file->getMessageType() as $desc) {\n                $this->crossLink($desc);\n            }\n            unset($desc);\n        }\n    }\n\n    public function addMessage($name, $klass)\n    {\n        return new MessageBuilderContext($name, $klass, $this);\n    }\n\n    public function addEnum($name, $klass)\n    {\n        return new EnumBuilderContext($name, $klass, $this);\n    }\n\n    public function addDescriptor($descriptor)\n    {\n        $this->proto_to_class[$descriptor->getFullName()] =\n            $descriptor->getClass();\n        $this->unique_descs[$descriptor->getFullName()] =\n            $descriptor;\n        $this->class_to_desc[$descriptor->getClass()] = $descriptor;\n        $this->class_to_desc[$descriptor->getLegacyClass()] = $descriptor;\n        $this->class_to_desc[$descriptor->getPreviouslyUnreservedClass()] = $descriptor;\n        foreach ($descriptor->getNestedType() as $nested_type) {\n            $this->addDescriptor($nested_type);\n        }\n        foreach ($descriptor->getEnumType() as $enum_type) {\n            $this->addEnumDescriptor($enum_type);\n        }\n    }\n\n    public function addEnumDescriptor($descriptor)\n    {\n        $this->proto_to_class[$descriptor->getFullName()] =\n            $descriptor->getClass();\n        $this->class_to_enum_desc[$descriptor->getClass()] = $descriptor;\n        $this->class_to_enum_desc[$descriptor->getLegacyClass()] = $descriptor;\n    }\n\n    public function getDescriptorByClassName($klass)\n    {\n        if (isset($this->class_to_desc[$klass])) {\n            return $this->class_to_desc[$klass];\n        } else {\n            return null;\n        }\n    }\n\n    public function getEnumDescriptorByClassName($klass)\n    {\n        if (isset($this->class_to_enum_desc[$klass])) {\n            return $this->class_to_enum_desc[$klass];\n        } else {\n            return null;\n        }\n    }\n\n    public function getDescriptorByProtoName($proto)\n    {\n        if (isset($this->proto_to_class[$proto])) {\n            $klass = $this->proto_to_class[$proto];\n            return $this->class_to_desc[$klass];\n        } else {\n          return null;\n        }\n    }\n\n    public function getEnumDescriptorByProtoName($proto)\n    {\n        $klass = $this->proto_to_class[$proto];\n        return $this->class_to_enum_desc[$klass];\n    }\n\n    private function crossLink(Descriptor $desc)\n    {\n        foreach ($desc->getField() as $field) {\n            switch ($field->getType()) {\n                case GPBType::MESSAGE:\n                    $proto = $field->getMessageType();\n                    if ($proto[0] == '.') {\n                      $proto = substr($proto, 1);\n                    }\n                    $subdesc = $this->getDescriptorByProtoName($proto);\n                    if (is_null($subdesc)) {\n                        trigger_error(\n                            'proto not added: ' . $proto\n                            . \" for \" . $desc->getFullName(), E_USER_ERROR);\n                    }\n                    $field->setMessageType($subdesc);\n                    break;\n                case GPBType::ENUM:\n                    $proto = $field->getEnumType();\n                    if ($proto[0] == '.') {\n                      $proto = substr($proto, 1);\n                    }\n                    $field->setEnumType(\n                        $this->getEnumDescriptorByProtoName($proto));\n                    break;\n                default:\n                    break;\n            }\n        }\n        unset($field);\n\n        foreach ($desc->getNestedType() as $nested_type) {\n            $this->crossLink($nested_type);\n        }\n        unset($nested_type);\n    }\n\n    public function finish()\n    {\n        foreach ($this->unique_descs as $klass => $desc) {\n            $this->crossLink($desc);\n        }\n        unset($desc);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ExtensionRange.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\DescriptorProto;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.DescriptorProto.ExtensionRange</code>\n */\nclass ExtensionRange extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     */\n    protected $start = null;\n    /**\n     * Exclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     */\n    protected $end = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.ExtensionRangeOptions options = 3;</code>\n     */\n    protected $options = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $start\n     *           Inclusive.\n     *     @type int $end\n     *           Exclusive.\n     *     @type \\Google\\Protobuf\\Internal\\ExtensionRangeOptions $options\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     * @return int\n     */\n    public function getStart()\n    {\n        return isset($this->start) ? $this->start : 0;\n    }\n\n    public function hasStart()\n    {\n        return isset($this->start);\n    }\n\n    public function clearStart()\n    {\n        unset($this->start);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setStart($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->start = $var;\n\n        return $this;\n    }\n\n    /**\n     * Exclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     * @return int\n     */\n    public function getEnd()\n    {\n        return isset($this->end) ? $this->end : 0;\n    }\n\n    public function hasEnd()\n    {\n        return isset($this->end);\n    }\n\n    public function clearEnd()\n    {\n        unset($this->end);\n    }\n\n    /**\n     * Exclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEnd($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->end = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.ExtensionRangeOptions options = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\ExtensionRangeOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.ExtensionRangeOptions options = 3;</code>\n     * @param \\Google\\Protobuf\\Internal\\ExtensionRangeOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\ExtensionRangeOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto/ReservedRange.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\DescriptorProto;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Range of reserved tag numbers. Reserved tag numbers may not be used by\n * fields or extension ranges in the same message. Reserved ranges may\n * not overlap.\n *\n * Generated from protobuf message <code>google.protobuf.DescriptorProto.ReservedRange</code>\n */\nclass ReservedRange extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     */\n    protected $start = null;\n    /**\n     * Exclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     */\n    protected $end = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $start\n     *           Inclusive.\n     *     @type int $end\n     *           Exclusive.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     * @return int\n     */\n    public function getStart()\n    {\n        return isset($this->start) ? $this->start : 0;\n    }\n\n    public function hasStart()\n    {\n        return isset($this->start);\n    }\n\n    public function clearStart()\n    {\n        unset($this->start);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setStart($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->start = $var;\n\n        return $this;\n    }\n\n    /**\n     * Exclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     * @return int\n     */\n    public function getEnd()\n    {\n        return isset($this->end) ? $this->end : 0;\n    }\n\n    public function hasEnd()\n    {\n        return isset($this->end);\n    }\n\n    public function clearEnd()\n    {\n        unset($this->end);\n    }\n\n    /**\n     * Exclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEnd($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->end = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/DescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a message type.\n *\n * Generated from protobuf message <code>google.protobuf.DescriptorProto</code>\n */\nclass DescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>\n     */\n    private $field;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>\n     */\n    private $extension;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>\n     */\n    private $nested_type;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>\n     */\n    private $enum_type;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>\n     */\n    private $extension_range;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>\n     */\n    private $oneof_decl;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MessageOptions options = 7;</code>\n     */\n    protected $options = null;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9;</code>\n     */\n    private $reserved_range;\n    /**\n     * Reserved field names, which may not be used by fields in the same message.\n     * A given name may only be reserved once.\n     *\n     * Generated from protobuf field <code>repeated string reserved_name = 10;</code>\n     */\n    private $reserved_name;\n    /**\n     * Support for `export` and `local` keywords on enums.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SymbolVisibility visibility = 11;</code>\n     */\n    protected $visibility = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type \\Google\\Protobuf\\Internal\\FieldDescriptorProto[] $field\n     *     @type \\Google\\Protobuf\\Internal\\FieldDescriptorProto[] $extension\n     *     @type \\Google\\Protobuf\\Internal\\DescriptorProto[] $nested_type\n     *     @type \\Google\\Protobuf\\Internal\\EnumDescriptorProto[] $enum_type\n     *     @type \\Google\\Protobuf\\Internal\\DescriptorProto\\ExtensionRange[] $extension_range\n     *     @type \\Google\\Protobuf\\Internal\\OneofDescriptorProto[] $oneof_decl\n     *     @type \\Google\\Protobuf\\Internal\\MessageOptions $options\n     *     @type \\Google\\Protobuf\\Internal\\DescriptorProto\\ReservedRange[] $reserved_range\n     *     @type string[] $reserved_name\n     *           Reserved field names, which may not be used by fields in the same message.\n     *           A given name may only be reserved once.\n     *     @type int $visibility\n     *           Support for `export` and `local` keywords on enums.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\FieldDescriptorProto>\n     */\n    public function getField()\n    {\n        return $this->field;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldDescriptorProto[] $var\n     * @return $this\n     */\n    public function setField($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\FieldDescriptorProto::class);\n        $this->field = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\FieldDescriptorProto>\n     */\n    public function getExtension()\n    {\n        return $this->extension;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldDescriptorProto[] $var\n     * @return $this\n     */\n    public function setExtension($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\FieldDescriptorProto::class);\n        $this->extension = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\DescriptorProto>\n     */\n    public function getNestedType()\n    {\n        return $this->nested_type;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>\n     * @param \\Google\\Protobuf\\Internal\\DescriptorProto[] $var\n     * @return $this\n     */\n    public function setNestedType($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\DescriptorProto::class);\n        $this->nested_type = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\EnumDescriptorProto>\n     */\n    public function getEnumType()\n    {\n        return $this->enum_type;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>\n     * @param \\Google\\Protobuf\\Internal\\EnumDescriptorProto[] $var\n     * @return $this\n     */\n    public function setEnumType($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\EnumDescriptorProto::class);\n        $this->enum_type = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\DescriptorProto\\ExtensionRange>\n     */\n    public function getExtensionRange()\n    {\n        return $this->extension_range;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>\n     * @param \\Google\\Protobuf\\Internal\\DescriptorProto\\ExtensionRange[] $var\n     * @return $this\n     */\n    public function setExtensionRange($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\DescriptorProto\\ExtensionRange::class);\n        $this->extension_range = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\OneofDescriptorProto>\n     */\n    public function getOneofDecl()\n    {\n        return $this->oneof_decl;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>\n     * @param \\Google\\Protobuf\\Internal\\OneofDescriptorProto[] $var\n     * @return $this\n     */\n    public function setOneofDecl($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\OneofDescriptorProto::class);\n        $this->oneof_decl = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MessageOptions options = 7;</code>\n     * @return \\Google\\Protobuf\\Internal\\MessageOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MessageOptions options = 7;</code>\n     * @param \\Google\\Protobuf\\Internal\\MessageOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\MessageOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\DescriptorProto\\ReservedRange>\n     */\n    public function getReservedRange()\n    {\n        return $this->reserved_range;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9;</code>\n     * @param \\Google\\Protobuf\\Internal\\DescriptorProto\\ReservedRange[] $var\n     * @return $this\n     */\n    public function setReservedRange($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\DescriptorProto\\ReservedRange::class);\n        $this->reserved_range = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Reserved field names, which may not be used by fields in the same message.\n     * A given name may only be reserved once.\n     *\n     * Generated from protobuf field <code>repeated string reserved_name = 10;</code>\n     * @return RepeatedField<string>\n     */\n    public function getReservedName()\n    {\n        return $this->reserved_name;\n    }\n\n    /**\n     * Reserved field names, which may not be used by fields in the same message.\n     * A given name may only be reserved once.\n     *\n     * Generated from protobuf field <code>repeated string reserved_name = 10;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setReservedName($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->reserved_name = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Support for `export` and `local` keywords on enums.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SymbolVisibility visibility = 11;</code>\n     * @return int\n     */\n    public function getVisibility()\n    {\n        return isset($this->visibility) ? $this->visibility : 0;\n    }\n\n    public function hasVisibility()\n    {\n        return isset($this->visibility);\n    }\n\n    public function clearVisibility()\n    {\n        unset($this->visibility);\n    }\n\n    /**\n     * Support for `export` and `local` keywords on enums.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SymbolVisibility visibility = 11;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setVisibility($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\SymbolVisibility::class);\n        $this->visibility = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/Edition.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse UnexpectedValueException;\n\n/**\n * The full set of known editions.\n *\n * Protobuf type <code>google.protobuf.Edition</code>\n */\nclass Edition\n{\n    /**\n     * A placeholder for an unknown edition value.\n     *\n     * Generated from protobuf enum <code>EDITION_UNKNOWN = 0;</code>\n     */\n    const EDITION_UNKNOWN = 0;\n    /**\n     * A placeholder edition for specifying default behaviors *before* a feature\n     * was first introduced.  This is effectively an \"infinite past\".\n     *\n     * Generated from protobuf enum <code>EDITION_LEGACY = 900;</code>\n     */\n    const EDITION_LEGACY = 900;\n    /**\n     * Legacy syntax \"editions\".  These pre-date editions, but behave much like\n     * distinct editions.  These can't be used to specify the edition of proto\n     * files, but feature definitions must supply proto2/proto3 defaults for\n     * backwards compatibility.\n     *\n     * Generated from protobuf enum <code>EDITION_PROTO2 = 998;</code>\n     */\n    const EDITION_PROTO2 = 998;\n    /**\n     * Generated from protobuf enum <code>EDITION_PROTO3 = 999;</code>\n     */\n    const EDITION_PROTO3 = 999;\n    /**\n     * Editions that have been released.  The specific values are arbitrary and\n     * should not be depended on, but they will always be time-ordered for easy\n     * comparison.\n     *\n     * Generated from protobuf enum <code>EDITION_2023 = 1000;</code>\n     */\n    const EDITION_2023 = 1000;\n    /**\n     * Generated from protobuf enum <code>EDITION_2024 = 1001;</code>\n     */\n    const EDITION_2024 = 1001;\n    /**\n     * A placeholder edition for developing and testing unscheduled features.\n     *\n     * Generated from protobuf enum <code>EDITION_UNSTABLE = 9999;</code>\n     */\n    const EDITION_UNSTABLE = 9999;\n    /**\n     * Placeholder editions for testing feature resolution.  These should not be\n     * used or relied on outside of tests.\n     *\n     * Generated from protobuf enum <code>EDITION_1_TEST_ONLY = 1;</code>\n     */\n    const EDITION_1_TEST_ONLY = 1;\n    /**\n     * Generated from protobuf enum <code>EDITION_2_TEST_ONLY = 2;</code>\n     */\n    const EDITION_2_TEST_ONLY = 2;\n    /**\n     * Generated from protobuf enum <code>EDITION_99997_TEST_ONLY = 99997;</code>\n     */\n    const EDITION_99997_TEST_ONLY = 99997;\n    /**\n     * Generated from protobuf enum <code>EDITION_99998_TEST_ONLY = 99998;</code>\n     */\n    const EDITION_99998_TEST_ONLY = 99998;\n    /**\n     * Generated from protobuf enum <code>EDITION_99999_TEST_ONLY = 99999;</code>\n     */\n    const EDITION_99999_TEST_ONLY = 99999;\n    /**\n     * Placeholder for specifying unbounded edition support.  This should only\n     * ever be used by plugins that can expect to never require any changes to\n     * support a new edition.\n     *\n     * Generated from protobuf enum <code>EDITION_MAX = 2147483647;</code>\n     */\n    const EDITION_MAX = 2147483647;\n\n    private static $valueToName = [\n        self::EDITION_UNKNOWN => 'EDITION_UNKNOWN',\n        self::EDITION_LEGACY => 'EDITION_LEGACY',\n        self::EDITION_PROTO2 => 'EDITION_PROTO2',\n        self::EDITION_PROTO3 => 'EDITION_PROTO3',\n        self::EDITION_2023 => 'EDITION_2023',\n        self::EDITION_2024 => 'EDITION_2024',\n        self::EDITION_UNSTABLE => 'EDITION_UNSTABLE',\n        self::EDITION_1_TEST_ONLY => 'EDITION_1_TEST_ONLY',\n        self::EDITION_2_TEST_ONLY => 'EDITION_2_TEST_ONLY',\n        self::EDITION_99997_TEST_ONLY => 'EDITION_99997_TEST_ONLY',\n        self::EDITION_99998_TEST_ONLY => 'EDITION_99998_TEST_ONLY',\n        self::EDITION_99999_TEST_ONLY => 'EDITION_99999_TEST_ONLY',\n        self::EDITION_MAX => 'EDITION_MAX',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumBuilderContext.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\EnumDescriptor;\nuse Google\\Protobuf\\EnumValueDescriptor;\n\nclass EnumBuilderContext\n{\n\n    private $descriptor;\n    private $pool;\n\n    public function __construct($full_name, $klass, $pool)\n    {\n        $this->descriptor = new EnumDescriptor();\n        $this->descriptor->setFullName($full_name);\n        $this->descriptor->setClass($klass);\n        $this->pool = $pool;\n    }\n\n    public function value($name, $number)\n    {\n        $value = new EnumValueDescriptor($name, $number);\n        $this->descriptor->addValue($number, $value);\n        return $this;\n    }\n\n    public function finalizeToPool()\n    {\n        $this->pool->addEnumDescriptor($this->descriptor);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptor.php",
    "content": "<?php\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\EnumValueDescriptor;\n\nclass EnumDescriptor\n{\n    use HasPublicDescriptorTrait;\n\n    private $klass;\n    private $legacy_klass;\n    private $full_name;\n    private $value;\n    private $name_to_value;\n    private $value_descriptor = [];\n\n    public function __construct()\n    {\n        $this->public_desc = new \\Google\\Protobuf\\EnumDescriptor($this);\n    }\n\n    public function setFullName($full_name)\n    {\n        $this->full_name = $full_name;\n    }\n\n    public function getFullName()\n    {\n        return $this->full_name;\n    }\n\n    public function addValue($number, $value)\n    {\n        $this->value[$number] = $value;\n        $this->name_to_value[$value->getName()] = $value;\n        $this->value_descriptor[] = new EnumValueDescriptor($value->getName(), $number);\n    }\n\n    public function getValueByNumber($number)\n    {\n        if (isset($this->value[$number])) {\n            return $this->value[$number];\n        }\n        return null;\n    }\n\n    public function getValueByName($name)\n    {\n        if (isset($this->name_to_value[$name])) {\n            return $this->name_to_value[$name];\n        }\n        return null;\n    }\n\n    public function getValueDescriptorByIndex($index)\n    {\n        if (isset($this->value_descriptor[$index])) {\n            return $this->value_descriptor[$index];\n        }\n        return null;\n    }\n\n    public function getValueCount()\n    {\n        return count($this->value);\n    }\n\n    public function setClass($klass)\n    {\n        $this->klass = $klass;\n    }\n\n    public function getClass()\n    {\n        return $this->klass;\n    }\n\n    public function setLegacyClass($klass)\n    {\n        $this->legacy_klass = $klass;\n    }\n\n    public function getLegacyClass()\n    {\n        return $this->legacy_klass;\n    }\n\n    public static function buildFromProto($proto, $file_proto, $containing)\n    {\n        $desc = new EnumDescriptor();\n\n        $enum_name_without_package  = \"\";\n        $classname = \"\";\n        $legacy_classname = \"\";\n        $fullname = \"\";\n        GPBUtil::getFullClassName(\n            $proto,\n            $containing,\n            $file_proto,\n            $enum_name_without_package,\n            $classname,\n            $legacy_classname,\n            $fullname,\n            $unused_previous_classname);\n        $desc->setFullName($fullname);\n        $desc->setClass($classname);\n        $desc->setLegacyClass($legacy_classname);\n        $values = $proto->getValue();\n        foreach ($values as $value) {\n            $desc->addValue($value->getNumber(), $value);\n        }\n\n        return $desc;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto/EnumReservedRange.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\EnumDescriptorProto;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Range of reserved numeric values. Reserved values may not be used by\n * entries in the same enum. Reserved ranges may not overlap.\n * Note that this is distinct from DescriptorProto.ReservedRange in that it\n * is inclusive such that it can appropriately represent the entire int32\n * domain.\n *\n * Generated from protobuf message <code>google.protobuf.EnumDescriptorProto.EnumReservedRange</code>\n */\nclass EnumReservedRange extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     */\n    protected $start = null;\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     */\n    protected $end = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $start\n     *           Inclusive.\n     *     @type int $end\n     *           Inclusive.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     * @return int\n     */\n    public function getStart()\n    {\n        return isset($this->start) ? $this->start : 0;\n    }\n\n    public function hasStart()\n    {\n        return isset($this->start);\n    }\n\n    public function clearStart()\n    {\n        unset($this->start);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 start = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setStart($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->start = $var;\n\n        return $this;\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     * @return int\n     */\n    public function getEnd()\n    {\n        return isset($this->end) ? $this->end : 0;\n    }\n\n    public function hasEnd()\n    {\n        return isset($this->end);\n    }\n\n    public function clearEnd()\n    {\n        unset($this->end);\n    }\n\n    /**\n     * Inclusive.\n     *\n     * Generated from protobuf field <code>optional int32 end = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEnd($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->end = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes an enum type.\n *\n * Generated from protobuf message <code>google.protobuf.EnumDescriptorProto</code>\n */\nclass EnumDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>\n     */\n    private $value;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.EnumOptions options = 3;</code>\n     */\n    protected $options = null;\n    /**\n     * Range of reserved numeric values. Reserved numeric values may not be used\n     * by enum values in the same enum declaration. Reserved ranges may not\n     * overlap.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4;</code>\n     */\n    private $reserved_range;\n    /**\n     * Reserved enum value names, which may not be reused. A given name may only\n     * be reserved once.\n     *\n     * Generated from protobuf field <code>repeated string reserved_name = 5;</code>\n     */\n    private $reserved_name;\n    /**\n     * Support for `export` and `local` keywords on enums.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SymbolVisibility visibility = 6;</code>\n     */\n    protected $visibility = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type \\Google\\Protobuf\\Internal\\EnumValueDescriptorProto[] $value\n     *     @type \\Google\\Protobuf\\Internal\\EnumOptions $options\n     *     @type \\Google\\Protobuf\\Internal\\EnumDescriptorProto\\EnumReservedRange[] $reserved_range\n     *           Range of reserved numeric values. Reserved numeric values may not be used\n     *           by enum values in the same enum declaration. Reserved ranges may not\n     *           overlap.\n     *     @type string[] $reserved_name\n     *           Reserved enum value names, which may not be reused. A given name may only\n     *           be reserved once.\n     *     @type int $visibility\n     *           Support for `export` and `local` keywords on enums.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\EnumValueDescriptorProto>\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>\n     * @param \\Google\\Protobuf\\Internal\\EnumValueDescriptorProto[] $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\EnumValueDescriptorProto::class);\n        $this->value = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.EnumOptions options = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\EnumOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.EnumOptions options = 3;</code>\n     * @param \\Google\\Protobuf\\Internal\\EnumOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\EnumOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n    /**\n     * Range of reserved numeric values. Reserved numeric values may not be used\n     * by enum values in the same enum declaration. Reserved ranges may not\n     * overlap.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\EnumDescriptorProto\\EnumReservedRange>\n     */\n    public function getReservedRange()\n    {\n        return $this->reserved_range;\n    }\n\n    /**\n     * Range of reserved numeric values. Reserved numeric values may not be used\n     * by enum values in the same enum declaration. Reserved ranges may not\n     * overlap.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4;</code>\n     * @param \\Google\\Protobuf\\Internal\\EnumDescriptorProto\\EnumReservedRange[] $var\n     * @return $this\n     */\n    public function setReservedRange($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\EnumDescriptorProto\\EnumReservedRange::class);\n        $this->reserved_range = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Reserved enum value names, which may not be reused. A given name may only\n     * be reserved once.\n     *\n     * Generated from protobuf field <code>repeated string reserved_name = 5;</code>\n     * @return RepeatedField<string>\n     */\n    public function getReservedName()\n    {\n        return $this->reserved_name;\n    }\n\n    /**\n     * Reserved enum value names, which may not be reused. A given name may only\n     * be reserved once.\n     *\n     * Generated from protobuf field <code>repeated string reserved_name = 5;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setReservedName($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->reserved_name = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Support for `export` and `local` keywords on enums.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SymbolVisibility visibility = 6;</code>\n     * @return int\n     */\n    public function getVisibility()\n    {\n        return isset($this->visibility) ? $this->visibility : 0;\n    }\n\n    public function hasVisibility()\n    {\n        return isset($this->visibility);\n    }\n\n    public function clearVisibility()\n    {\n        unset($this->visibility);\n    }\n\n    /**\n     * Support for `export` and `local` keywords on enums.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SymbolVisibility visibility = 6;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setVisibility($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\SymbolVisibility::class);\n        $this->visibility = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.EnumOptions</code>\n */\nclass EnumOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Set this option to true to allow mapping different tag names to the same\n     * value.\n     *\n     * Generated from protobuf field <code>optional bool allow_alias = 2;</code>\n     */\n    protected $allow_alias = null;\n    /**\n     * Is this enum deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the enum, or it will be completely ignored; in the very least, this\n     * is a formalization for deprecating enums.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * Enable the legacy handling of JSON field name conflicts.  This lowercases\n     * and strips underscored from the fields before comparison in proto3 only.\n     * The new behavior takes `json_name` into account and applies to proto2 as\n     * well.\n     * TODO Remove this legacy behavior once downstream teams have\n     * had time to migrate.\n     *\n     * Generated from protobuf field <code>optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $deprecated_legacy_json_field_conflicts = null;\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 7;</code>\n     */\n    protected $features = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type bool $allow_alias\n     *           Set this option to true to allow mapping different tag names to the same\n     *           value.\n     *     @type bool $deprecated\n     *           Is this enum deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for the enum, or it will be completely ignored; in the very least, this\n     *           is a formalization for deprecating enums.\n     *     @type bool $deprecated_legacy_json_field_conflicts\n     *           Enable the legacy handling of JSON field name conflicts.  This lowercases\n     *           and strips underscored from the fields before comparison in proto3 only.\n     *           The new behavior takes `json_name` into account and applies to proto2 as\n     *           well.\n     *           TODO Remove this legacy behavior once downstream teams have\n     *           had time to migrate.\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Set this option to true to allow mapping different tag names to the same\n     * value.\n     *\n     * Generated from protobuf field <code>optional bool allow_alias = 2;</code>\n     * @return bool\n     */\n    public function getAllowAlias()\n    {\n        return isset($this->allow_alias) ? $this->allow_alias : false;\n    }\n\n    public function hasAllowAlias()\n    {\n        return isset($this->allow_alias);\n    }\n\n    public function clearAllowAlias()\n    {\n        unset($this->allow_alias);\n    }\n\n    /**\n     * Set this option to true to allow mapping different tag names to the same\n     * value.\n     *\n     * Generated from protobuf field <code>optional bool allow_alias = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setAllowAlias($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->allow_alias = $var;\n\n        return $this;\n    }\n\n    /**\n     * Is this enum deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the enum, or it will be completely ignored; in the very least, this\n     * is a formalization for deprecating enums.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this enum deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the enum, or it will be completely ignored; in the very least, this\n     * is a formalization for deprecating enums.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * Enable the legacy handling of JSON field name conflicts.  This lowercases\n     * and strips underscored from the fields before comparison in proto3 only.\n     * The new behavior takes `json_name` into account and applies to proto2 as\n     * well.\n     * TODO Remove this legacy behavior once downstream teams have\n     * had time to migrate.\n     *\n     * Generated from protobuf field <code>optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true];</code>\n     * @return bool\n     * @deprecated\n     */\n    public function getDeprecatedLegacyJsonFieldConflicts()\n    {\n        if (isset($this->deprecated_legacy_json_field_conflicts)) {\n            @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->deprecated_legacy_json_field_conflicts) ? $this->deprecated_legacy_json_field_conflicts : false;\n    }\n\n    public function hasDeprecatedLegacyJsonFieldConflicts()\n    {\n        if (isset($this->deprecated_legacy_json_field_conflicts)) {\n            @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->deprecated_legacy_json_field_conflicts);\n    }\n\n    public function clearDeprecatedLegacyJsonFieldConflicts()\n    {\n        @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        unset($this->deprecated_legacy_json_field_conflicts);\n    }\n\n    /**\n     * Enable the legacy handling of JSON field name conflicts.  This lowercases\n     * and strips underscored from the fields before comparison in proto3 only.\n     * The new behavior takes `json_name` into account and applies to proto2 as\n     * well.\n     * TODO Remove this legacy behavior once downstream teams have\n     * had time to migrate.\n     *\n     * Generated from protobuf field <code>optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true];</code>\n     * @param bool $var\n     * @return $this\n     * @deprecated\n     */\n    public function setDeprecatedLegacyJsonFieldConflicts($var)\n    {\n        @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkBool($var);\n        $this->deprecated_legacy_json_field_conflicts = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 7;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 7;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a value within an enum.\n *\n * Generated from protobuf message <code>google.protobuf.EnumValueDescriptorProto</code>\n */\nclass EnumValueDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Generated from protobuf field <code>optional int32 number = 2;</code>\n     */\n    protected $number = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.EnumValueOptions options = 3;</code>\n     */\n    protected $options = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type int $number\n     *     @type \\Google\\Protobuf\\Internal\\EnumValueOptions $options\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional int32 number = 2;</code>\n     * @return int\n     */\n    public function getNumber()\n    {\n        return isset($this->number) ? $this->number : 0;\n    }\n\n    public function hasNumber()\n    {\n        return isset($this->number);\n    }\n\n    public function clearNumber()\n    {\n        unset($this->number);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional int32 number = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.EnumValueOptions options = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\EnumValueOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.EnumValueOptions options = 3;</code>\n     * @param \\Google\\Protobuf\\Internal\\EnumValueOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\EnumValueOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/EnumValueOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.EnumValueOptions</code>\n */\nclass EnumValueOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Is this enum value deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the enum value, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating enum values.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 1 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 2;</code>\n     */\n    protected $features = null;\n    /**\n     * Indicate that fields annotated with this enum value should not be printed\n     * out when using debug formats, e.g. when the field contains sensitive\n     * credentials.\n     *\n     * Generated from protobuf field <code>optional bool debug_redact = 3 [default = false];</code>\n     */\n    protected $debug_redact = null;\n    /**\n     * Information about the support window of a feature value.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 4;</code>\n     */\n    protected $feature_support = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type bool $deprecated\n     *           Is this enum value deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for the enum value, or it will be completely ignored; in the very least,\n     *           this is a formalization for deprecating enum values.\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type bool $debug_redact\n     *           Indicate that fields annotated with this enum value should not be printed\n     *           out when using debug formats, e.g. when the field contains sensitive\n     *           credentials.\n     *     @type \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport $feature_support\n     *           Information about the support window of a feature value.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Is this enum value deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the enum value, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating enum values.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 1 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this enum value deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the enum value, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating enum values.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 1 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 2;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * Indicate that fields annotated with this enum value should not be printed\n     * out when using debug formats, e.g. when the field contains sensitive\n     * credentials.\n     *\n     * Generated from protobuf field <code>optional bool debug_redact = 3 [default = false];</code>\n     * @return bool\n     */\n    public function getDebugRedact()\n    {\n        return isset($this->debug_redact) ? $this->debug_redact : false;\n    }\n\n    public function hasDebugRedact()\n    {\n        return isset($this->debug_redact);\n    }\n\n    public function clearDebugRedact()\n    {\n        unset($this->debug_redact);\n    }\n\n    /**\n     * Indicate that fields annotated with this enum value should not be printed\n     * out when using debug formats, e.g. when the field contains sensitive\n     * credentials.\n     *\n     * Generated from protobuf field <code>optional bool debug_redact = 3 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDebugRedact($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->debug_redact = $var;\n\n        return $this;\n    }\n\n    /**\n     * Information about the support window of a feature value.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport|null\n     */\n    public function getFeatureSupport()\n    {\n        return $this->feature_support;\n    }\n\n    public function hasFeatureSupport()\n    {\n        return isset($this->feature_support);\n    }\n\n    public function clearFeatureSupport()\n    {\n        unset($this->feature_support);\n    }\n\n    /**\n     * Information about the support window of a feature value.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 4;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport $var\n     * @return $this\n     */\n    public function setFeatureSupport($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport::class);\n        $this->feature_support = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions/Declaration.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\ExtensionRangeOptions;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.ExtensionRangeOptions.Declaration</code>\n */\nclass Declaration extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The extension number declared within the extension range.\n     *\n     * Generated from protobuf field <code>optional int32 number = 1;</code>\n     */\n    protected $number = null;\n    /**\n     * The fully-qualified name of the extension field. There must be a leading\n     * dot in front of the full name.\n     *\n     * Generated from protobuf field <code>optional string full_name = 2;</code>\n     */\n    protected $full_name = null;\n    /**\n     * The fully-qualified type name of the extension field. Unlike\n     * Metadata.type, Declaration.type must have a leading dot for messages\n     * and enums.\n     *\n     * Generated from protobuf field <code>optional string type = 3;</code>\n     */\n    protected $type = null;\n    /**\n     * If true, indicates that the number is reserved in the extension range,\n     * and any extension field with the number will fail to compile. Set this\n     * when a declared extension field is deleted.\n     *\n     * Generated from protobuf field <code>optional bool reserved = 5;</code>\n     */\n    protected $reserved = null;\n    /**\n     * If true, indicates that the extension must be defined as repeated.\n     * Otherwise the extension must be defined as optional.\n     *\n     * Generated from protobuf field <code>optional bool repeated = 6;</code>\n     */\n    protected $repeated = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $number\n     *           The extension number declared within the extension range.\n     *     @type string $full_name\n     *           The fully-qualified name of the extension field. There must be a leading\n     *           dot in front of the full name.\n     *     @type string $type\n     *           The fully-qualified type name of the extension field. Unlike\n     *           Metadata.type, Declaration.type must have a leading dot for messages\n     *           and enums.\n     *     @type bool $reserved\n     *           If true, indicates that the number is reserved in the extension range,\n     *           and any extension field with the number will fail to compile. Set this\n     *           when a declared extension field is deleted.\n     *     @type bool $repeated\n     *           If true, indicates that the extension must be defined as repeated.\n     *           Otherwise the extension must be defined as optional.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The extension number declared within the extension range.\n     *\n     * Generated from protobuf field <code>optional int32 number = 1;</code>\n     * @return int\n     */\n    public function getNumber()\n    {\n        return isset($this->number) ? $this->number : 0;\n    }\n\n    public function hasNumber()\n    {\n        return isset($this->number);\n    }\n\n    public function clearNumber()\n    {\n        unset($this->number);\n    }\n\n    /**\n     * The extension number declared within the extension range.\n     *\n     * Generated from protobuf field <code>optional int32 number = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * The fully-qualified name of the extension field. There must be a leading\n     * dot in front of the full name.\n     *\n     * Generated from protobuf field <code>optional string full_name = 2;</code>\n     * @return string\n     */\n    public function getFullName()\n    {\n        return isset($this->full_name) ? $this->full_name : '';\n    }\n\n    public function hasFullName()\n    {\n        return isset($this->full_name);\n    }\n\n    public function clearFullName()\n    {\n        unset($this->full_name);\n    }\n\n    /**\n     * The fully-qualified name of the extension field. There must be a leading\n     * dot in front of the full name.\n     *\n     * Generated from protobuf field <code>optional string full_name = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setFullName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->full_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The fully-qualified type name of the extension field. Unlike\n     * Metadata.type, Declaration.type must have a leading dot for messages\n     * and enums.\n     *\n     * Generated from protobuf field <code>optional string type = 3;</code>\n     * @return string\n     */\n    public function getType()\n    {\n        return isset($this->type) ? $this->type : '';\n    }\n\n    public function hasType()\n    {\n        return isset($this->type);\n    }\n\n    public function clearType()\n    {\n        unset($this->type);\n    }\n\n    /**\n     * The fully-qualified type name of the extension field. Unlike\n     * Metadata.type, Declaration.type must have a leading dot for messages\n     * and enums.\n     *\n     * Generated from protobuf field <code>optional string type = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, indicates that the number is reserved in the extension range,\n     * and any extension field with the number will fail to compile. Set this\n     * when a declared extension field is deleted.\n     *\n     * Generated from protobuf field <code>optional bool reserved = 5;</code>\n     * @return bool\n     */\n    public function getReserved()\n    {\n        return isset($this->reserved) ? $this->reserved : false;\n    }\n\n    public function hasReserved()\n    {\n        return isset($this->reserved);\n    }\n\n    public function clearReserved()\n    {\n        unset($this->reserved);\n    }\n\n    /**\n     * If true, indicates that the number is reserved in the extension range,\n     * and any extension field with the number will fail to compile. Set this\n     * when a declared extension field is deleted.\n     *\n     * Generated from protobuf field <code>optional bool reserved = 5;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setReserved($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->reserved = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, indicates that the extension must be defined as repeated.\n     * Otherwise the extension must be defined as optional.\n     *\n     * Generated from protobuf field <code>optional bool repeated = 6;</code>\n     * @return bool\n     */\n    public function getRepeated()\n    {\n        return isset($this->repeated) ? $this->repeated : false;\n    }\n\n    public function hasRepeated()\n    {\n        return isset($this->repeated);\n    }\n\n    public function clearRepeated()\n    {\n        unset($this->repeated);\n    }\n\n    /**\n     * If true, indicates that the extension must be defined as repeated.\n     * Otherwise the extension must be defined as optional.\n     *\n     * Generated from protobuf field <code>optional bool repeated = 6;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setRepeated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->repeated = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions/VerificationState.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\ExtensionRangeOptions;\n\nuse UnexpectedValueException;\n\n/**\n * The verification state of the extension range.\n *\n * Protobuf type <code>google.protobuf.ExtensionRangeOptions.VerificationState</code>\n */\nclass VerificationState\n{\n    /**\n     * All the extensions of the range must be declared.\n     *\n     * Generated from protobuf enum <code>DECLARATION = 0;</code>\n     */\n    const DECLARATION = 0;\n    /**\n     * Generated from protobuf enum <code>UNVERIFIED = 1;</code>\n     */\n    const UNVERIFIED = 1;\n\n    private static $valueToName = [\n        self::DECLARATION => 'DECLARATION',\n        self::UNVERIFIED => 'UNVERIFIED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/ExtensionRangeOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.ExtensionRangeOptions</code>\n */\nclass ExtensionRangeOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n    /**\n     * For external users: DO NOT USE. We are in the process of open sourcing\n     * extension declaration and executing internal cleanups before it can be\n     * used externally.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.ExtensionRangeOptions.Declaration declaration = 2 [retention = RETENTION_SOURCE];</code>\n     */\n    private $declaration;\n    /**\n     * Any features defined in the specific edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 50;</code>\n     */\n    protected $features = null;\n    /**\n     * The verification state of the range.\n     * TODO: flip the default to DECLARATION once all empty ranges\n     * are marked as UNVERIFIED.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];</code>\n     */\n    protected $verification = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     *     @type \\Google\\Protobuf\\Internal\\ExtensionRangeOptions\\Declaration[] $declaration\n     *           For external users: DO NOT USE. We are in the process of open sourcing\n     *           extension declaration and executing internal cleanups before it can be\n     *           used externally.\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *     @type int $verification\n     *           The verification state of the range.\n     *           TODO: flip the default to DECLARATION once all empty ranges\n     *           are marked as UNVERIFIED.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n    /**\n     * For external users: DO NOT USE. We are in the process of open sourcing\n     * extension declaration and executing internal cleanups before it can be\n     * used externally.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.ExtensionRangeOptions.Declaration declaration = 2 [retention = RETENTION_SOURCE];</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\ExtensionRangeOptions\\Declaration>\n     */\n    public function getDeclaration()\n    {\n        return $this->declaration;\n    }\n\n    /**\n     * For external users: DO NOT USE. We are in the process of open sourcing\n     * extension declaration and executing internal cleanups before it can be\n     * used externally.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.ExtensionRangeOptions.Declaration declaration = 2 [retention = RETENTION_SOURCE];</code>\n     * @param \\Google\\Protobuf\\Internal\\ExtensionRangeOptions\\Declaration[] $var\n     * @return $this\n     */\n    public function setDeclaration($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\ExtensionRangeOptions\\Declaration::class);\n        $this->declaration = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 50;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 50;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * The verification state of the range.\n     * TODO: flip the default to DECLARATION once all empty ranges\n     * are marked as UNVERIFIED.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];</code>\n     * @return int\n     */\n    public function getVerification()\n    {\n        return isset($this->verification) ? $this->verification : 0;\n    }\n\n    public function hasVerification()\n    {\n        return isset($this->verification);\n    }\n\n    public function clearVerification()\n    {\n        unset($this->verification);\n    }\n\n    /**\n     * The verification state of the range.\n     * TODO: flip the default to DECLARATION once all empty ranges\n     * are marked as UNVERIFIED.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.ExtensionRangeOptions.VerificationState verification = 3 [default = UNVERIFIED, retention = RETENTION_SOURCE];</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setVerification($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\ExtensionRangeOptions\\VerificationState::class);\n        $this->verification = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/EnforceNamingStyle.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.EnforceNamingStyle</code>\n */\nclass EnforceNamingStyle\n{\n    /**\n     * Generated from protobuf enum <code>ENFORCE_NAMING_STYLE_UNKNOWN = 0;</code>\n     */\n    const ENFORCE_NAMING_STYLE_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>STYLE2024 = 1;</code>\n     */\n    const STYLE2024 = 1;\n    /**\n     * Generated from protobuf enum <code>STYLE_LEGACY = 2;</code>\n     */\n    const STYLE_LEGACY = 2;\n\n    private static $valueToName = [\n        self::ENFORCE_NAMING_STYLE_UNKNOWN => 'ENFORCE_NAMING_STYLE_UNKNOWN',\n        self::STYLE2024 => 'STYLE2024',\n        self::STYLE_LEGACY => 'STYLE_LEGACY',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/EnumType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.EnumType</code>\n */\nclass EnumType\n{\n    /**\n     * Generated from protobuf enum <code>ENUM_TYPE_UNKNOWN = 0;</code>\n     */\n    const ENUM_TYPE_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>OPEN = 1;</code>\n     */\n    const OPEN = 1;\n    /**\n     * Generated from protobuf enum <code>CLOSED = 2;</code>\n     */\n    const CLOSED = 2;\n\n    private static $valueToName = [\n        self::ENUM_TYPE_UNKNOWN => 'ENUM_TYPE_UNKNOWN',\n        self::OPEN => 'OPEN',\n        self::CLOSED => 'CLOSED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/FieldPresence.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.FieldPresence</code>\n */\nclass FieldPresence\n{\n    /**\n     * Generated from protobuf enum <code>FIELD_PRESENCE_UNKNOWN = 0;</code>\n     */\n    const FIELD_PRESENCE_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>EXPLICIT = 1;</code>\n     */\n    const EXPLICIT = 1;\n    /**\n     * Generated from protobuf enum <code>IMPLICIT = 2;</code>\n     */\n    const IMPLICIT = 2;\n    /**\n     * Generated from protobuf enum <code>LEGACY_REQUIRED = 3;</code>\n     */\n    const LEGACY_REQUIRED = 3;\n\n    private static $valueToName = [\n        self::FIELD_PRESENCE_UNKNOWN => 'FIELD_PRESENCE_UNKNOWN',\n        self::EXPLICIT => 'EXPLICIT',\n        self::IMPLICIT => 'IMPLICIT',\n        self::LEGACY_REQUIRED => 'LEGACY_REQUIRED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/JsonFormat.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.JsonFormat</code>\n */\nclass JsonFormat\n{\n    /**\n     * Generated from protobuf enum <code>JSON_FORMAT_UNKNOWN = 0;</code>\n     */\n    const JSON_FORMAT_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>ALLOW = 1;</code>\n     */\n    const ALLOW = 1;\n    /**\n     * Generated from protobuf enum <code>LEGACY_BEST_EFFORT = 2;</code>\n     */\n    const LEGACY_BEST_EFFORT = 2;\n\n    private static $valueToName = [\n        self::JSON_FORMAT_UNKNOWN => 'JSON_FORMAT_UNKNOWN',\n        self::ALLOW => 'ALLOW',\n        self::LEGACY_BEST_EFFORT => 'LEGACY_BEST_EFFORT',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/MessageEncoding.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.MessageEncoding</code>\n */\nclass MessageEncoding\n{\n    /**\n     * Generated from protobuf enum <code>MESSAGE_ENCODING_UNKNOWN = 0;</code>\n     */\n    const MESSAGE_ENCODING_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>LENGTH_PREFIXED = 1;</code>\n     */\n    const LENGTH_PREFIXED = 1;\n    /**\n     * Generated from protobuf enum <code>DELIMITED = 2;</code>\n     */\n    const DELIMITED = 2;\n\n    private static $valueToName = [\n        self::MESSAGE_ENCODING_UNKNOWN => 'MESSAGE_ENCODING_UNKNOWN',\n        self::LENGTH_PREFIXED => 'LENGTH_PREFIXED',\n        self::DELIMITED => 'DELIMITED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/RepeatedFieldEncoding.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.RepeatedFieldEncoding</code>\n */\nclass RepeatedFieldEncoding\n{\n    /**\n     * Generated from protobuf enum <code>REPEATED_FIELD_ENCODING_UNKNOWN = 0;</code>\n     */\n    const REPEATED_FIELD_ENCODING_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>PACKED = 1;</code>\n     */\n    const PACKED = 1;\n    /**\n     * Generated from protobuf enum <code>EXPANDED = 2;</code>\n     */\n    const EXPANDED = 2;\n\n    private static $valueToName = [\n        self::REPEATED_FIELD_ENCODING_UNKNOWN => 'REPEATED_FIELD_ENCODING_UNKNOWN',\n        self::PACKED => 'PACKED',\n        self::EXPANDED => 'EXPANDED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/Utf8Validation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.Utf8Validation</code>\n */\nclass Utf8Validation\n{\n    /**\n     * Generated from protobuf enum <code>UTF8_VALIDATION_UNKNOWN = 0;</code>\n     */\n    const UTF8_VALIDATION_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>VERIFY = 2;</code>\n     */\n    const VERIFY = 2;\n    /**\n     * Generated from protobuf enum <code>NONE = 3;</code>\n     */\n    const NONE = 3;\n\n    private static $valueToName = [\n        self::UTF8_VALIDATION_UNKNOWN => 'UTF8_VALIDATION_UNKNOWN',\n        self::VERIFY => 'VERIFY',\n        self::NONE => 'NONE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/VisibilityFeature/DefaultSymbolVisibility.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet\\VisibilityFeature;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility</code>\n */\nclass DefaultSymbolVisibility\n{\n    /**\n     * Generated from protobuf enum <code>DEFAULT_SYMBOL_VISIBILITY_UNKNOWN = 0;</code>\n     */\n    const DEFAULT_SYMBOL_VISIBILITY_UNKNOWN = 0;\n    /**\n     * Default pre-EDITION_2024, all UNSET visibility are export.\n     *\n     * Generated from protobuf enum <code>EXPORT_ALL = 1;</code>\n     */\n    const EXPORT_ALL = 1;\n    /**\n     * All top-level symbols default to export, nested default to local.\n     *\n     * Generated from protobuf enum <code>EXPORT_TOP_LEVEL = 2;</code>\n     */\n    const EXPORT_TOP_LEVEL = 2;\n    /**\n     * All symbols default to local.\n     *\n     * Generated from protobuf enum <code>LOCAL_ALL = 3;</code>\n     */\n    const LOCAL_ALL = 3;\n    /**\n     * All symbols local by default. Nested types cannot be exported.\n     * With special case caveat for message { enum {} reserved 1 to max; }\n     * This is the recommended setting for new protos.\n     *\n     * Generated from protobuf enum <code>STRICT = 4;</code>\n     */\n    const STRICT = 4;\n\n    private static $valueToName = [\n        self::DEFAULT_SYMBOL_VISIBILITY_UNKNOWN => 'DEFAULT_SYMBOL_VISIBILITY_UNKNOWN',\n        self::EXPORT_ALL => 'EXPORT_ALL',\n        self::EXPORT_TOP_LEVEL => 'EXPORT_TOP_LEVEL',\n        self::LOCAL_ALL => 'LOCAL_ALL',\n        self::STRICT => 'STRICT',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet/VisibilityFeature.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSet;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.FeatureSet.VisibilityFeature</code>\n */\nclass VisibilityFeature extends \\Google\\Protobuf\\Internal\\Message\n{\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSet.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * TODO Enums in C++ gencode (and potentially other languages) are\n * not well scoped.  This means that each of the feature enums below can clash\n * with each other.  The short names we've chosen maximize call-site\n * readability, but leave us very open to this scenario.  A future feature will\n * be designed and implemented to handle this, hopefully before we ever hit a\n * conflict here.\n *\n * Generated from protobuf message <code>google.protobuf.FeatureSet</code>\n */\nclass FeatureSet extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $field_presence = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $enum_type = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $repeated_field_encoding = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $utf8_validation = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $message_encoding = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $json_format = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.EnforceNamingStyle enforce_naming_style = 7 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_FILE, targets = TARGET_TYPE_EXTENSION_RANGE, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_ONEOF, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_ENUM_ENTRY, targets = TARGET_TYPE_SERVICE, targets = TARGET_TYPE_METHOD, edition_defaults = {</code>\n     */\n    protected $enforce_naming_style = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility default_symbol_visibility = 8 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     */\n    protected $default_symbol_visibility = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $field_presence\n     *     @type int $enum_type\n     *     @type int $repeated_field_encoding\n     *     @type int $utf8_validation\n     *     @type int $message_encoding\n     *     @type int $json_format\n     *     @type int $enforce_naming_style\n     *     @type int $default_symbol_visibility\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getFieldPresence()\n    {\n        return isset($this->field_presence) ? $this->field_presence : 0;\n    }\n\n    public function hasFieldPresence()\n    {\n        return isset($this->field_presence);\n    }\n\n    public function clearFieldPresence()\n    {\n        unset($this->field_presence);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setFieldPresence($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\FieldPresence::class);\n        $this->field_presence = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getEnumType()\n    {\n        return isset($this->enum_type) ? $this->enum_type : 0;\n    }\n\n    public function hasEnumType()\n    {\n        return isset($this->enum_type);\n    }\n\n    public function clearEnumType()\n    {\n        unset($this->enum_type);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEnumType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\EnumType::class);\n        $this->enum_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getRepeatedFieldEncoding()\n    {\n        return isset($this->repeated_field_encoding) ? $this->repeated_field_encoding : 0;\n    }\n\n    public function hasRepeatedFieldEncoding()\n    {\n        return isset($this->repeated_field_encoding);\n    }\n\n    public function clearRepeatedFieldEncoding()\n    {\n        unset($this->repeated_field_encoding);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setRepeatedFieldEncoding($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\RepeatedFieldEncoding::class);\n        $this->repeated_field_encoding = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getUtf8Validation()\n    {\n        return isset($this->utf8_validation) ? $this->utf8_validation : 0;\n    }\n\n    public function hasUtf8Validation()\n    {\n        return isset($this->utf8_validation);\n    }\n\n    public function clearUtf8Validation()\n    {\n        unset($this->utf8_validation);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setUtf8Validation($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\Utf8Validation::class);\n        $this->utf8_validation = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getMessageEncoding()\n    {\n        return isset($this->message_encoding) ? $this->message_encoding : 0;\n    }\n\n    public function hasMessageEncoding()\n    {\n        return isset($this->message_encoding);\n    }\n\n    public function clearMessageEncoding()\n    {\n        unset($this->message_encoding);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMessageEncoding($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\MessageEncoding::class);\n        $this->message_encoding = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getJsonFormat()\n    {\n        return isset($this->json_format) ? $this->json_format : 0;\n    }\n\n    public function hasJsonFormat()\n    {\n        return isset($this->json_format);\n    }\n\n    public function clearJsonFormat()\n    {\n        unset($this->json_format);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setJsonFormat($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\JsonFormat::class);\n        $this->json_format = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.EnforceNamingStyle enforce_naming_style = 7 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_FILE, targets = TARGET_TYPE_EXTENSION_RANGE, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_ONEOF, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_ENUM_ENTRY, targets = TARGET_TYPE_SERVICE, targets = TARGET_TYPE_METHOD, edition_defaults = {</code>\n     * @return int\n     */\n    public function getEnforceNamingStyle()\n    {\n        return isset($this->enforce_naming_style) ? $this->enforce_naming_style : 0;\n    }\n\n    public function hasEnforceNamingStyle()\n    {\n        return isset($this->enforce_naming_style);\n    }\n\n    public function clearEnforceNamingStyle()\n    {\n        unset($this->enforce_naming_style);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.EnforceNamingStyle enforce_naming_style = 7 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_FILE, targets = TARGET_TYPE_EXTENSION_RANGE, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_ONEOF, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_ENUM_ENTRY, targets = TARGET_TYPE_SERVICE, targets = TARGET_TYPE_METHOD, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEnforceNamingStyle($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\EnforceNamingStyle::class);\n        $this->enforce_naming_style = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility default_symbol_visibility = 8 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @return int\n     */\n    public function getDefaultSymbolVisibility()\n    {\n        return isset($this->default_symbol_visibility) ? $this->default_symbol_visibility : 0;\n    }\n\n    public function hasDefaultSymbolVisibility()\n    {\n        return isset($this->default_symbol_visibility);\n    }\n\n    public function clearDefaultSymbolVisibility()\n    {\n        unset($this->default_symbol_visibility);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility default_symbol_visibility = 8 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_FILE, edition_defaults = {</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setDefaultSymbolVisibility($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FeatureSet\\VisibilityFeature\\DefaultSymbolVisibility::class);\n        $this->default_symbol_visibility = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSetDefaults/FeatureSetEditionDefault.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FeatureSetDefaults;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A map from every known edition with a unique set of defaults to its\n * defaults. Not all editions may be contained here.  For a given edition,\n * the defaults at the closest matching edition ordered at or before it should\n * be used.  This field must be in strict ascending order by edition.\n *\n * Generated from protobuf message <code>google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault</code>\n */\nclass FeatureSetEditionDefault extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 3;</code>\n     */\n    protected $edition = null;\n    /**\n     * Defaults of features that can be overridden in this edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet overridable_features = 4;</code>\n     */\n    protected $overridable_features = null;\n    /**\n     * Defaults of features that can't be overridden in this edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet fixed_features = 5;</code>\n     */\n    protected $fixed_features = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $edition\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $overridable_features\n     *           Defaults of features that can be overridden in this edition.\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $fixed_features\n     *           Defaults of features that can't be overridden in this edition.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 3;</code>\n     * @return int\n     */\n    public function getEdition()\n    {\n        return isset($this->edition) ? $this->edition : 0;\n    }\n\n    public function hasEdition()\n    {\n        return isset($this->edition);\n    }\n\n    public function clearEdition()\n    {\n        unset($this->edition);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEdition($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n    /**\n     * Defaults of features that can be overridden in this edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet overridable_features = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getOverridableFeatures()\n    {\n        return $this->overridable_features;\n    }\n\n    public function hasOverridableFeatures()\n    {\n        return isset($this->overridable_features);\n    }\n\n    public function clearOverridableFeatures()\n    {\n        unset($this->overridable_features);\n    }\n\n    /**\n     * Defaults of features that can be overridden in this edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet overridable_features = 4;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setOverridableFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->overridable_features = $var;\n\n        return $this;\n    }\n\n    /**\n     * Defaults of features that can't be overridden in this edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet fixed_features = 5;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFixedFeatures()\n    {\n        return $this->fixed_features;\n    }\n\n    public function hasFixedFeatures()\n    {\n        return isset($this->fixed_features);\n    }\n\n    public function clearFixedFeatures()\n    {\n        unset($this->fixed_features);\n    }\n\n    /**\n     * Defaults of features that can't be overridden in this edition.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet fixed_features = 5;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFixedFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->fixed_features = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FeatureSetDefaults.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A compiled specification for the defaults of a set of features.  These\n * messages are generated from FeatureSet extensions and can be used to seed\n * feature resolution. The resolution with this object becomes a simple search\n * for the closest matching edition, followed by proto merges.\n *\n * Generated from protobuf message <code>google.protobuf.FeatureSetDefaults</code>\n */\nclass FeatureSetDefaults extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault defaults = 1;</code>\n     */\n    private $defaults;\n    /**\n     * The minimum supported edition (inclusive) when this was constructed.\n     * Editions before this will not have defaults.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition minimum_edition = 4;</code>\n     */\n    protected $minimum_edition = null;\n    /**\n     * The maximum known edition (inclusive) when this was constructed. Editions\n     * after this will not have reliable defaults.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition maximum_edition = 5;</code>\n     */\n    protected $maximum_edition = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSetDefaults\\FeatureSetEditionDefault[] $defaults\n     *     @type int $minimum_edition\n     *           The minimum supported edition (inclusive) when this was constructed.\n     *           Editions before this will not have defaults.\n     *     @type int $maximum_edition\n     *           The maximum known edition (inclusive) when this was constructed. Editions\n     *           after this will not have reliable defaults.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault defaults = 1;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\FeatureSetDefaults\\FeatureSetEditionDefault>\n     */\n    public function getDefaults()\n    {\n        return $this->defaults;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault defaults = 1;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSetDefaults\\FeatureSetEditionDefault[] $var\n     * @return $this\n     */\n    public function setDefaults($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\FeatureSetDefaults\\FeatureSetEditionDefault::class);\n        $this->defaults = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The minimum supported edition (inclusive) when this was constructed.\n     * Editions before this will not have defaults.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition minimum_edition = 4;</code>\n     * @return int\n     */\n    public function getMinimumEdition()\n    {\n        return isset($this->minimum_edition) ? $this->minimum_edition : 0;\n    }\n\n    public function hasMinimumEdition()\n    {\n        return isset($this->minimum_edition);\n    }\n\n    public function clearMinimumEdition()\n    {\n        unset($this->minimum_edition);\n    }\n\n    /**\n     * The minimum supported edition (inclusive) when this was constructed.\n     * Editions before this will not have defaults.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition minimum_edition = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMinimumEdition($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->minimum_edition = $var;\n\n        return $this;\n    }\n\n    /**\n     * The maximum known edition (inclusive) when this was constructed. Editions\n     * after this will not have reliable defaults.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition maximum_edition = 5;</code>\n     * @return int\n     */\n    public function getMaximumEdition()\n    {\n        return isset($this->maximum_edition) ? $this->maximum_edition : 0;\n    }\n\n    public function hasMaximumEdition()\n    {\n        return isset($this->maximum_edition);\n    }\n\n    public function clearMaximumEdition()\n    {\n        unset($this->maximum_edition);\n    }\n\n    /**\n     * The maximum known edition (inclusive) when this was constructed. Editions\n     * after this will not have reliable defaults.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition maximum_edition = 5;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setMaximumEdition($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->maximum_edition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass FieldDescriptor\n{\n    use HasPublicDescriptorTrait;\n\n    private $name;\n    private $json_name;\n    private $setter;\n    private $getter;\n    private $number;\n    private $label;\n    private $type;\n    private $message_type;\n    private $enum_type;\n    private $packed;\n    private $oneof_index = -1;\n    private $proto3_optional;\n\n    /** @var OneofDescriptor $containing_oneof */\n    private $containing_oneof;\n\n    public function __construct()\n    {\n        $this->public_desc = new \\Google\\Protobuf\\FieldDescriptor($this);\n    }\n\n    public function setOneofIndex($index)\n    {\n        $this->oneof_index = $index;\n    }\n\n    public function getOneofIndex()\n    {\n        return $this->oneof_index;\n    }\n\n    public function setName($name)\n    {\n        $this->name = $name;\n    }\n\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    public function setJsonName($json_name)\n    {\n        $this->json_name = $json_name;\n    }\n\n    public function getJsonName()\n    {\n        return $this->json_name;\n    }\n\n    public function setSetter($setter)\n    {\n        $this->setter = $setter;\n    }\n\n    public function getSetter()\n    {\n        return $this->setter;\n    }\n\n    public function setGetter($getter)\n    {\n        $this->getter = $getter;\n    }\n\n    public function getGetter()\n    {\n        return $this->getter;\n    }\n\n    public function setNumber($number)\n    {\n        $this->number = $number;\n    }\n\n    public function getNumber()\n    {\n        return $this->number;\n    }\n\n    public function setLabel($label)\n    {\n        $this->label = $label;\n    }\n\n    public function getLabel()\n    {\n        return $this->label;\n    }\n\n    public function isRequired()\n    {\n        return $this->label === GPBLabel::REQUIRED;\n    }\n\n    public function isRepeated()\n    {\n        return $this->label === GPBLabel::REPEATED;\n    }\n\n    public function setType($type)\n    {\n        $this->type = $type;\n    }\n\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    public function setMessageType($message_type)\n    {\n        $this->message_type = $message_type;\n    }\n\n    public function getMessageType()\n    {\n        return $this->message_type;\n    }\n\n    public function setEnumType($enum_type)\n    {\n        $this->enum_type = $enum_type;\n    }\n\n    public function getEnumType()\n    {\n        return $this->enum_type;\n    }\n\n    public function setPacked($packed)\n    {\n        $this->packed = $packed;\n    }\n\n    public function getPacked()\n    {\n        return $this->packed;\n    }\n\n    public function getProto3Optional()\n    {\n        return $this->proto3_optional;\n    }\n\n    public function setProto3Optional($proto3_optional)\n    {\n        $this->proto3_optional = $proto3_optional;\n    }\n\n    public function getContainingOneof()\n    {\n        return $this->containing_oneof;\n    }\n\n    public function setContainingOneof($containing_oneof)\n    {\n        $this->containing_oneof = $containing_oneof;\n    }\n\n    public function getRealContainingOneof()\n    {\n        return !is_null($this->containing_oneof) && !$this->containing_oneof->isSynthetic()\n            ? $this->containing_oneof : null;\n    }\n\n    public function isPackable()\n    {\n        return $this->isRepeated() && self::isTypePackable($this->type);\n    }\n\n    public function isMap()\n    {\n        return $this->getType() == GPBType::MESSAGE &&\n               !is_null($this->getMessageType()->getOptions()) &&\n               $this->getMessageType()->getOptions()->getMapEntry();\n    }\n\n    public function isTimestamp()\n    {\n        return $this->getType() == GPBType::MESSAGE &&\n            $this->getMessageType()->getClass() === \"Google\\Protobuf\\Timestamp\";\n    }\n\n    public function isWrapperType()\n    {\n        if ($this->getType() == GPBType::MESSAGE) {\n            $class = $this->getMessageType()->getClass();\n            return in_array($class, [\n                \"Google\\Protobuf\\DoubleValue\",\n                \"Google\\Protobuf\\FloatValue\",\n                \"Google\\Protobuf\\Int64Value\",\n                \"Google\\Protobuf\\UInt64Value\",\n                \"Google\\Protobuf\\Int32Value\",\n                \"Google\\Protobuf\\UInt32Value\",\n                \"Google\\Protobuf\\BoolValue\",\n                \"Google\\Protobuf\\StringValue\",\n                \"Google\\Protobuf\\BytesValue\",\n            ]);\n        }\n        return false;\n    }\n\n    private static function isTypePackable($field_type)\n    {\n        return ($field_type !== GPBType::STRING  &&\n            $field_type !== GPBType::GROUP   &&\n            $field_type !== GPBType::MESSAGE &&\n            $field_type !== GPBType::BYTES);\n    }\n\n    /**\n     * @param FieldDescriptorProto $proto\n     * @return FieldDescriptor\n     */\n    public static function getFieldDescriptor($proto)\n    {\n        $type_name = null;\n        $type = $proto->getType();\n        switch ($type) {\n            case GPBType::MESSAGE:\n            case GPBType::GROUP:\n            case GPBType::ENUM:\n                $type_name = $proto->getTypeName();\n                break;\n            default:\n                break;\n        }\n\n        $oneof_index = $proto->hasOneofIndex() ? $proto->getOneofIndex() : -1;\n        // TODO: once proto2 is supported, this default should be false\n        // for proto2.\n        if ($proto->getLabel() === GPBLabel::REPEATED &&\n            $proto->getType() !== GPBType::MESSAGE &&\n            $proto->getType() !== GPBType::GROUP &&\n            $proto->getType() !== GPBType::STRING &&\n            $proto->getType() !== GPBType::BYTES) {\n          $packed = true;\n        } else {\n          $packed = false;\n        }\n        $options = $proto->getOptions();\n        if ($options !== null) {\n            $packed = $options->getPacked();\n        }\n\n        $field = new FieldDescriptor();\n        $field->setName($proto->getName());\n\n        if ($proto->hasJsonName()) {\n            $json_name = $proto->getJsonName();\n        } else {\n            $proto_name = $proto->getName();\n            $json_name = implode('', array_map('ucwords', explode('_', $proto_name)));\n            if ($proto_name[0] !== \"_\" && !ctype_upper($proto_name[0])) {\n                $json_name = lcfirst($json_name);\n            }\n        }\n        $field->setJsonName($json_name);\n\n        $camel_name = implode('', array_map('ucwords', explode('_', $proto->getName())));\n        $field->setGetter('get' . $camel_name);\n        $field->setSetter('set' . $camel_name);\n        $field->setType($proto->getType());\n        $field->setNumber($proto->getNumber());\n        $field->setLabel($proto->getLabel());\n        $field->setPacked($packed);\n        $field->setOneofIndex($oneof_index);\n        $field->setProto3Optional($proto->getProto3Optional());\n\n        // At this time, the message/enum type may have not been added to pool.\n        // So we use the type name as place holder and will replace it with the\n        // actual descriptor in cross building.\n        switch ($type) {\n            case GPBType::MESSAGE:\n                $field->setMessageType($type_name);\n                break;\n            case GPBType::ENUM:\n                $field->setEnumType($type_name);\n                break;\n            default:\n                break;\n        }\n\n        return $field;\n    }\n\n    public static function buildFromProto($proto)\n    {\n        return FieldDescriptor::getFieldDescriptor($proto);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Label.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldDescriptorProto;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FieldDescriptorProto.Label</code>\n */\nclass Label\n{\n    /**\n     * 0 is reserved for errors\n     *\n     * Generated from protobuf enum <code>LABEL_OPTIONAL = 1;</code>\n     */\n    const LABEL_OPTIONAL = 1;\n    /**\n     * Generated from protobuf enum <code>LABEL_REPEATED = 3;</code>\n     */\n    const LABEL_REPEATED = 3;\n    /**\n     * The required label is only allowed in google.protobuf.  In proto3 and Editions\n     * it's explicitly prohibited.  In Editions, the `field_presence` feature\n     * can be used to get this behavior.\n     *\n     * Generated from protobuf enum <code>LABEL_REQUIRED = 2;</code>\n     */\n    const LABEL_REQUIRED = 2;\n\n    private static $valueToName = [\n        self::LABEL_OPTIONAL => 'LABEL_OPTIONAL',\n        self::LABEL_REPEATED => 'LABEL_REPEATED',\n        self::LABEL_REQUIRED => 'LABEL_REQUIRED',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto/Type.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldDescriptorProto;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FieldDescriptorProto.Type</code>\n */\nclass Type\n{\n    /**\n     * 0 is reserved for errors.\n     * Order is weird for historical reasons.\n     *\n     * Generated from protobuf enum <code>TYPE_DOUBLE = 1;</code>\n     */\n    const TYPE_DOUBLE = 1;\n    /**\n     * Generated from protobuf enum <code>TYPE_FLOAT = 2;</code>\n     */\n    const TYPE_FLOAT = 2;\n    /**\n     * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if\n     * negative values are likely.\n     *\n     * Generated from protobuf enum <code>TYPE_INT64 = 3;</code>\n     */\n    const TYPE_INT64 = 3;\n    /**\n     * Generated from protobuf enum <code>TYPE_UINT64 = 4;</code>\n     */\n    const TYPE_UINT64 = 4;\n    /**\n     * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if\n     * negative values are likely.\n     *\n     * Generated from protobuf enum <code>TYPE_INT32 = 5;</code>\n     */\n    const TYPE_INT32 = 5;\n    /**\n     * Generated from protobuf enum <code>TYPE_FIXED64 = 6;</code>\n     */\n    const TYPE_FIXED64 = 6;\n    /**\n     * Generated from protobuf enum <code>TYPE_FIXED32 = 7;</code>\n     */\n    const TYPE_FIXED32 = 7;\n    /**\n     * Generated from protobuf enum <code>TYPE_BOOL = 8;</code>\n     */\n    const TYPE_BOOL = 8;\n    /**\n     * Generated from protobuf enum <code>TYPE_STRING = 9;</code>\n     */\n    const TYPE_STRING = 9;\n    /**\n     * Tag-delimited aggregate.\n     * Group type is deprecated and not supported after google.protobuf. However, Proto3\n     * implementations should still be able to parse the group wire format and\n     * treat group fields as unknown fields.  In Editions, the group wire format\n     * can be enabled via the `message_encoding` feature.\n     *\n     * Generated from protobuf enum <code>TYPE_GROUP = 10;</code>\n     */\n    const TYPE_GROUP = 10;\n    /**\n     * Length-delimited aggregate.\n     *\n     * Generated from protobuf enum <code>TYPE_MESSAGE = 11;</code>\n     */\n    const TYPE_MESSAGE = 11;\n    /**\n     * New in version 2.\n     *\n     * Generated from protobuf enum <code>TYPE_BYTES = 12;</code>\n     */\n    const TYPE_BYTES = 12;\n    /**\n     * Generated from protobuf enum <code>TYPE_UINT32 = 13;</code>\n     */\n    const TYPE_UINT32 = 13;\n    /**\n     * Generated from protobuf enum <code>TYPE_ENUM = 14;</code>\n     */\n    const TYPE_ENUM = 14;\n    /**\n     * Generated from protobuf enum <code>TYPE_SFIXED32 = 15;</code>\n     */\n    const TYPE_SFIXED32 = 15;\n    /**\n     * Generated from protobuf enum <code>TYPE_SFIXED64 = 16;</code>\n     */\n    const TYPE_SFIXED64 = 16;\n    /**\n     * Uses ZigZag encoding.\n     *\n     * Generated from protobuf enum <code>TYPE_SINT32 = 17;</code>\n     */\n    const TYPE_SINT32 = 17;\n    /**\n     * Uses ZigZag encoding.\n     *\n     * Generated from protobuf enum <code>TYPE_SINT64 = 18;</code>\n     */\n    const TYPE_SINT64 = 18;\n\n    private static $valueToName = [\n        self::TYPE_DOUBLE => 'TYPE_DOUBLE',\n        self::TYPE_FLOAT => 'TYPE_FLOAT',\n        self::TYPE_INT64 => 'TYPE_INT64',\n        self::TYPE_UINT64 => 'TYPE_UINT64',\n        self::TYPE_INT32 => 'TYPE_INT32',\n        self::TYPE_FIXED64 => 'TYPE_FIXED64',\n        self::TYPE_FIXED32 => 'TYPE_FIXED32',\n        self::TYPE_BOOL => 'TYPE_BOOL',\n        self::TYPE_STRING => 'TYPE_STRING',\n        self::TYPE_GROUP => 'TYPE_GROUP',\n        self::TYPE_MESSAGE => 'TYPE_MESSAGE',\n        self::TYPE_BYTES => 'TYPE_BYTES',\n        self::TYPE_UINT32 => 'TYPE_UINT32',\n        self::TYPE_ENUM => 'TYPE_ENUM',\n        self::TYPE_SFIXED32 => 'TYPE_SFIXED32',\n        self::TYPE_SFIXED64 => 'TYPE_SFIXED64',\n        self::TYPE_SINT32 => 'TYPE_SINT32',\n        self::TYPE_SINT64 => 'TYPE_SINT64',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a field within a message.\n *\n * Generated from protobuf message <code>google.protobuf.FieldDescriptorProto</code>\n */\nclass FieldDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Generated from protobuf field <code>optional int32 number = 3;</code>\n     */\n    protected $number = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>\n     */\n    protected $label = null;\n    /**\n     * If type_name is set, this need not be set.  If both this and type_name\n     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>\n     */\n    protected $type = null;\n    /**\n     * For message and enum types, this is the name of the type.  If the name\n     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping\n     * rules are used to find the type (i.e. first the nested types within this\n     * message are searched, then within the parent, on up to the root\n     * namespace).\n     *\n     * Generated from protobuf field <code>optional string type_name = 6;</code>\n     */\n    protected $type_name = null;\n    /**\n     * For extensions, this is the name of the type being extended.  It is\n     * resolved in the same manner as type_name.\n     *\n     * Generated from protobuf field <code>optional string extendee = 2;</code>\n     */\n    protected $extendee = null;\n    /**\n     * For numeric types, contains the original text representation of the value.\n     * For booleans, \"true\" or \"false\".\n     * For strings, contains the default text contents (not escaped in any way).\n     * For bytes, contains the C escaped value.  All bytes >= 128 are escaped.\n     *\n     * Generated from protobuf field <code>optional string default_value = 7;</code>\n     */\n    protected $default_value = null;\n    /**\n     * If set, gives the index of a oneof in the containing type's oneof_decl\n     * list.  This field is a member of that oneof.\n     *\n     * Generated from protobuf field <code>optional int32 oneof_index = 9;</code>\n     */\n    protected $oneof_index = null;\n    /**\n     * JSON name of this field. The value is set by protocol compiler. If the\n     * user has set a \"json_name\" option on this field, that option's value\n     * will be used. Otherwise, it's deduced from the field's name by converting\n     * it to camelCase.\n     *\n     * Generated from protobuf field <code>optional string json_name = 10;</code>\n     */\n    protected $json_name = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions options = 8;</code>\n     */\n    protected $options = null;\n    /**\n     * If true, this is a proto3 \"optional\". When a proto3 field is optional, it\n     * tracks presence regardless of field type.\n     * When proto3_optional is true, this field must belong to a oneof to signal\n     * to old proto3 clients that presence is tracked for this field. This oneof\n     * is known as a \"synthetic\" oneof, and this field must be its sole member\n     * (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs\n     * exist in the descriptor only, and do not generate any API. Synthetic oneofs\n     * must be ordered after all \"real\" oneofs.\n     * For message fields, proto3_optional doesn't create any semantic change,\n     * since non-repeated message fields always track presence. However it still\n     * indicates the semantic detail of whether the user wrote \"optional\" or not.\n     * This can be useful for round-tripping the .proto file. For consistency we\n     * give message fields a synthetic oneof also, even though it is not required\n     * to track presence. This is especially important because the parser can't\n     * tell if a field is a message or an enum, so it must always create a\n     * synthetic oneof.\n     * Proto2 optional fields do not set this flag, because they already indicate\n     * optional with `LABEL_OPTIONAL`.\n     *\n     * Generated from protobuf field <code>optional bool proto3_optional = 17;</code>\n     */\n    protected $proto3_optional = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type int $number\n     *     @type int $label\n     *     @type int $type\n     *           If type_name is set, this need not be set.  If both this and type_name\n     *           are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.\n     *     @type string $type_name\n     *           For message and enum types, this is the name of the type.  If the name\n     *           starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping\n     *           rules are used to find the type (i.e. first the nested types within this\n     *           message are searched, then within the parent, on up to the root\n     *           namespace).\n     *     @type string $extendee\n     *           For extensions, this is the name of the type being extended.  It is\n     *           resolved in the same manner as type_name.\n     *     @type string $default_value\n     *           For numeric types, contains the original text representation of the value.\n     *           For booleans, \"true\" or \"false\".\n     *           For strings, contains the default text contents (not escaped in any way).\n     *           For bytes, contains the C escaped value.  All bytes >= 128 are escaped.\n     *     @type int $oneof_index\n     *           If set, gives the index of a oneof in the containing type's oneof_decl\n     *           list.  This field is a member of that oneof.\n     *     @type string $json_name\n     *           JSON name of this field. The value is set by protocol compiler. If the\n     *           user has set a \"json_name\" option on this field, that option's value\n     *           will be used. Otherwise, it's deduced from the field's name by converting\n     *           it to camelCase.\n     *     @type \\Google\\Protobuf\\Internal\\FieldOptions $options\n     *     @type bool $proto3_optional\n     *           If true, this is a proto3 \"optional\". When a proto3 field is optional, it\n     *           tracks presence regardless of field type.\n     *           When proto3_optional is true, this field must belong to a oneof to signal\n     *           to old proto3 clients that presence is tracked for this field. This oneof\n     *           is known as a \"synthetic\" oneof, and this field must be its sole member\n     *           (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs\n     *           exist in the descriptor only, and do not generate any API. Synthetic oneofs\n     *           must be ordered after all \"real\" oneofs.\n     *           For message fields, proto3_optional doesn't create any semantic change,\n     *           since non-repeated message fields always track presence. However it still\n     *           indicates the semantic detail of whether the user wrote \"optional\" or not.\n     *           This can be useful for round-tripping the .proto file. For consistency we\n     *           give message fields a synthetic oneof also, even though it is not required\n     *           to track presence. This is especially important because the parser can't\n     *           tell if a field is a message or an enum, so it must always create a\n     *           synthetic oneof.\n     *           Proto2 optional fields do not set this flag, because they already indicate\n     *           optional with `LABEL_OPTIONAL`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional int32 number = 3;</code>\n     * @return int\n     */\n    public function getNumber()\n    {\n        return isset($this->number) ? $this->number : 0;\n    }\n\n    public function hasNumber()\n    {\n        return isset($this->number);\n    }\n\n    public function clearNumber()\n    {\n        unset($this->number);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional int32 number = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNumber($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->number = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>\n     * @return int\n     */\n    public function getLabel()\n    {\n        return isset($this->label) ? $this->label : 0;\n    }\n\n    public function hasLabel()\n    {\n        return isset($this->label);\n    }\n\n    public function clearLabel()\n    {\n        unset($this->label);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setLabel($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FieldDescriptorProto\\Label::class);\n        $this->label = $var;\n\n        return $this;\n    }\n\n    /**\n     * If type_name is set, this need not be set.  If both this and type_name\n     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>\n     * @return int\n     */\n    public function getType()\n    {\n        return isset($this->type) ? $this->type : 0;\n    }\n\n    public function hasType()\n    {\n        return isset($this->type);\n    }\n\n    public function clearType()\n    {\n        unset($this->type);\n    }\n\n    /**\n     * If type_name is set, this need not be set.  If both this and type_name\n     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setType($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FieldDescriptorProto\\Type::class);\n        $this->type = $var;\n\n        return $this;\n    }\n\n    /**\n     * For message and enum types, this is the name of the type.  If the name\n     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping\n     * rules are used to find the type (i.e. first the nested types within this\n     * message are searched, then within the parent, on up to the root\n     * namespace).\n     *\n     * Generated from protobuf field <code>optional string type_name = 6;</code>\n     * @return string\n     */\n    public function getTypeName()\n    {\n        return isset($this->type_name) ? $this->type_name : '';\n    }\n\n    public function hasTypeName()\n    {\n        return isset($this->type_name);\n    }\n\n    public function clearTypeName()\n    {\n        unset($this->type_name);\n    }\n\n    /**\n     * For message and enum types, this is the name of the type.  If the name\n     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping\n     * rules are used to find the type (i.e. first the nested types within this\n     * message are searched, then within the parent, on up to the root\n     * namespace).\n     *\n     * Generated from protobuf field <code>optional string type_name = 6;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTypeName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->type_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * For extensions, this is the name of the type being extended.  It is\n     * resolved in the same manner as type_name.\n     *\n     * Generated from protobuf field <code>optional string extendee = 2;</code>\n     * @return string\n     */\n    public function getExtendee()\n    {\n        return isset($this->extendee) ? $this->extendee : '';\n    }\n\n    public function hasExtendee()\n    {\n        return isset($this->extendee);\n    }\n\n    public function clearExtendee()\n    {\n        unset($this->extendee);\n    }\n\n    /**\n     * For extensions, this is the name of the type being extended.  It is\n     * resolved in the same manner as type_name.\n     *\n     * Generated from protobuf field <code>optional string extendee = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setExtendee($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->extendee = $var;\n\n        return $this;\n    }\n\n    /**\n     * For numeric types, contains the original text representation of the value.\n     * For booleans, \"true\" or \"false\".\n     * For strings, contains the default text contents (not escaped in any way).\n     * For bytes, contains the C escaped value.  All bytes >= 128 are escaped.\n     *\n     * Generated from protobuf field <code>optional string default_value = 7;</code>\n     * @return string\n     */\n    public function getDefaultValue()\n    {\n        return isset($this->default_value) ? $this->default_value : '';\n    }\n\n    public function hasDefaultValue()\n    {\n        return isset($this->default_value);\n    }\n\n    public function clearDefaultValue()\n    {\n        unset($this->default_value);\n    }\n\n    /**\n     * For numeric types, contains the original text representation of the value.\n     * For booleans, \"true\" or \"false\".\n     * For strings, contains the default text contents (not escaped in any way).\n     * For bytes, contains the C escaped value.  All bytes >= 128 are escaped.\n     *\n     * Generated from protobuf field <code>optional string default_value = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDefaultValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->default_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * If set, gives the index of a oneof in the containing type's oneof_decl\n     * list.  This field is a member of that oneof.\n     *\n     * Generated from protobuf field <code>optional int32 oneof_index = 9;</code>\n     * @return int\n     */\n    public function getOneofIndex()\n    {\n        return isset($this->oneof_index) ? $this->oneof_index : 0;\n    }\n\n    public function hasOneofIndex()\n    {\n        return isset($this->oneof_index);\n    }\n\n    public function clearOneofIndex()\n    {\n        unset($this->oneof_index);\n    }\n\n    /**\n     * If set, gives the index of a oneof in the containing type's oneof_decl\n     * list.  This field is a member of that oneof.\n     *\n     * Generated from protobuf field <code>optional int32 oneof_index = 9;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setOneofIndex($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->oneof_index = $var;\n\n        return $this;\n    }\n\n    /**\n     * JSON name of this field. The value is set by protocol compiler. If the\n     * user has set a \"json_name\" option on this field, that option's value\n     * will be used. Otherwise, it's deduced from the field's name by converting\n     * it to camelCase.\n     *\n     * Generated from protobuf field <code>optional string json_name = 10;</code>\n     * @return string\n     */\n    public function getJsonName()\n    {\n        return isset($this->json_name) ? $this->json_name : '';\n    }\n\n    public function hasJsonName()\n    {\n        return isset($this->json_name);\n    }\n\n    public function clearJsonName()\n    {\n        unset($this->json_name);\n    }\n\n    /**\n     * JSON name of this field. The value is set by protocol compiler. If the\n     * user has set a \"json_name\" option on this field, that option's value\n     * will be used. Otherwise, it's deduced from the field's name by converting\n     * it to camelCase.\n     *\n     * Generated from protobuf field <code>optional string json_name = 10;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setJsonName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->json_name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions options = 8;</code>\n     * @return \\Google\\Protobuf\\Internal\\FieldOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions options = 8;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FieldOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, this is a proto3 \"optional\". When a proto3 field is optional, it\n     * tracks presence regardless of field type.\n     * When proto3_optional is true, this field must belong to a oneof to signal\n     * to old proto3 clients that presence is tracked for this field. This oneof\n     * is known as a \"synthetic\" oneof, and this field must be its sole member\n     * (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs\n     * exist in the descriptor only, and do not generate any API. Synthetic oneofs\n     * must be ordered after all \"real\" oneofs.\n     * For message fields, proto3_optional doesn't create any semantic change,\n     * since non-repeated message fields always track presence. However it still\n     * indicates the semantic detail of whether the user wrote \"optional\" or not.\n     * This can be useful for round-tripping the .proto file. For consistency we\n     * give message fields a synthetic oneof also, even though it is not required\n     * to track presence. This is especially important because the parser can't\n     * tell if a field is a message or an enum, so it must always create a\n     * synthetic oneof.\n     * Proto2 optional fields do not set this flag, because they already indicate\n     * optional with `LABEL_OPTIONAL`.\n     *\n     * Generated from protobuf field <code>optional bool proto3_optional = 17;</code>\n     * @return bool\n     */\n    public function getProto3Optional()\n    {\n        return isset($this->proto3_optional) ? $this->proto3_optional : false;\n    }\n\n    public function hasProto3Optional()\n    {\n        return isset($this->proto3_optional);\n    }\n\n    public function clearProto3Optional()\n    {\n        unset($this->proto3_optional);\n    }\n\n    /**\n     * If true, this is a proto3 \"optional\". When a proto3 field is optional, it\n     * tracks presence regardless of field type.\n     * When proto3_optional is true, this field must belong to a oneof to signal\n     * to old proto3 clients that presence is tracked for this field. This oneof\n     * is known as a \"synthetic\" oneof, and this field must be its sole member\n     * (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs\n     * exist in the descriptor only, and do not generate any API. Synthetic oneofs\n     * must be ordered after all \"real\" oneofs.\n     * For message fields, proto3_optional doesn't create any semantic change,\n     * since non-repeated message fields always track presence. However it still\n     * indicates the semantic detail of whether the user wrote \"optional\" or not.\n     * This can be useful for round-tripping the .proto file. For consistency we\n     * give message fields a synthetic oneof also, even though it is not required\n     * to track presence. This is especially important because the parser can't\n     * tell if a field is a message or an enum, so it must always create a\n     * synthetic oneof.\n     * Proto2 optional fields do not set this flag, because they already indicate\n     * optional with `LABEL_OPTIONAL`.\n     *\n     * Generated from protobuf field <code>optional bool proto3_optional = 17;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setProto3Optional($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->proto3_optional = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/CType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldOptions;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FieldOptions.CType</code>\n */\nclass CType\n{\n    /**\n     * Default mode.\n     *\n     * Generated from protobuf enum <code>STRING = 0;</code>\n     */\n    const STRING = 0;\n    /**\n     * The option [ctype=CORD] may be applied to a non-repeated field of type\n     * \"bytes\". It indicates that in C++, the data should be stored in a Cord\n     * instead of a string.  For very large strings, this may reduce memory\n     * fragmentation. It may also allow better performance when parsing from a\n     * Cord, or when parsing with aliasing enabled, as the parsed Cord may then\n     * alias the original buffer.\n     *\n     * Generated from protobuf enum <code>CORD = 1;</code>\n     */\n    const CORD = 1;\n    /**\n     * Generated from protobuf enum <code>STRING_PIECE = 2;</code>\n     */\n    const STRING_PIECE = 2;\n\n    private static $valueToName = [\n        self::STRING => 'STRING',\n        self::CORD => 'CORD',\n        self::STRING_PIECE => 'STRING_PIECE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/EditionDefault.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldOptions;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.FieldOptions.EditionDefault</code>\n */\nclass EditionDefault extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 3;</code>\n     */\n    protected $edition = null;\n    /**\n     * Textproto value.\n     *\n     * Generated from protobuf field <code>optional string value = 2;</code>\n     */\n    protected $value = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $edition\n     *     @type string $value\n     *           Textproto value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 3;</code>\n     * @return int\n     */\n    public function getEdition()\n    {\n        return isset($this->edition) ? $this->edition : 0;\n    }\n\n    public function hasEdition()\n    {\n        return isset($this->edition);\n    }\n\n    public function clearEdition()\n    {\n        unset($this->edition);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEdition($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n    /**\n     * Textproto value.\n     *\n     * Generated from protobuf field <code>optional string value = 2;</code>\n     * @return string\n     */\n    public function getValue()\n    {\n        return isset($this->value) ? $this->value : '';\n    }\n\n    public function hasValue()\n    {\n        return isset($this->value);\n    }\n\n    public function clearValue()\n    {\n        unset($this->value);\n    }\n\n    /**\n     * Textproto value.\n     *\n     * Generated from protobuf field <code>optional string value = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/FeatureSupport.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldOptions;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Information about the support window of a feature.\n *\n * Generated from protobuf message <code>google.protobuf.FieldOptions.FeatureSupport</code>\n */\nclass FeatureSupport extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The edition that this feature was first available in.  In editions\n     * earlier than this one, the default assigned to EDITION_LEGACY will be\n     * used, and proto files will not be able to override it.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_introduced = 1;</code>\n     */\n    protected $edition_introduced = null;\n    /**\n     * The edition this feature becomes deprecated in.  Using this after this\n     * edition may trigger warnings.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_deprecated = 2;</code>\n     */\n    protected $edition_deprecated = null;\n    /**\n     * The deprecation warning text if this feature is used after the edition it\n     * was marked deprecated in.\n     *\n     * Generated from protobuf field <code>optional string deprecation_warning = 3;</code>\n     */\n    protected $deprecation_warning = null;\n    /**\n     * The edition this feature is no longer available in.  In editions after\n     * this one, the last default assigned will be used, and proto files will\n     * not be able to override it.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_removed = 4;</code>\n     */\n    protected $edition_removed = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $edition_introduced\n     *           The edition that this feature was first available in.  In editions\n     *           earlier than this one, the default assigned to EDITION_LEGACY will be\n     *           used, and proto files will not be able to override it.\n     *     @type int $edition_deprecated\n     *           The edition this feature becomes deprecated in.  Using this after this\n     *           edition may trigger warnings.\n     *     @type string $deprecation_warning\n     *           The deprecation warning text if this feature is used after the edition it\n     *           was marked deprecated in.\n     *     @type int $edition_removed\n     *           The edition this feature is no longer available in.  In editions after\n     *           this one, the last default assigned will be used, and proto files will\n     *           not be able to override it.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The edition that this feature was first available in.  In editions\n     * earlier than this one, the default assigned to EDITION_LEGACY will be\n     * used, and proto files will not be able to override it.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_introduced = 1;</code>\n     * @return int\n     */\n    public function getEditionIntroduced()\n    {\n        return isset($this->edition_introduced) ? $this->edition_introduced : 0;\n    }\n\n    public function hasEditionIntroduced()\n    {\n        return isset($this->edition_introduced);\n    }\n\n    public function clearEditionIntroduced()\n    {\n        unset($this->edition_introduced);\n    }\n\n    /**\n     * The edition that this feature was first available in.  In editions\n     * earlier than this one, the default assigned to EDITION_LEGACY will be\n     * used, and proto files will not be able to override it.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_introduced = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEditionIntroduced($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->edition_introduced = $var;\n\n        return $this;\n    }\n\n    /**\n     * The edition this feature becomes deprecated in.  Using this after this\n     * edition may trigger warnings.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_deprecated = 2;</code>\n     * @return int\n     */\n    public function getEditionDeprecated()\n    {\n        return isset($this->edition_deprecated) ? $this->edition_deprecated : 0;\n    }\n\n    public function hasEditionDeprecated()\n    {\n        return isset($this->edition_deprecated);\n    }\n\n    public function clearEditionDeprecated()\n    {\n        unset($this->edition_deprecated);\n    }\n\n    /**\n     * The edition this feature becomes deprecated in.  Using this after this\n     * edition may trigger warnings.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_deprecated = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEditionDeprecated($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->edition_deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * The deprecation warning text if this feature is used after the edition it\n     * was marked deprecated in.\n     *\n     * Generated from protobuf field <code>optional string deprecation_warning = 3;</code>\n     * @return string\n     */\n    public function getDeprecationWarning()\n    {\n        return isset($this->deprecation_warning) ? $this->deprecation_warning : '';\n    }\n\n    public function hasDeprecationWarning()\n    {\n        return isset($this->deprecation_warning);\n    }\n\n    public function clearDeprecationWarning()\n    {\n        unset($this->deprecation_warning);\n    }\n\n    /**\n     * The deprecation warning text if this feature is used after the edition it\n     * was marked deprecated in.\n     *\n     * Generated from protobuf field <code>optional string deprecation_warning = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setDeprecationWarning($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->deprecation_warning = $var;\n\n        return $this;\n    }\n\n    /**\n     * The edition this feature is no longer available in.  In editions after\n     * this one, the last default assigned will be used, and proto files will\n     * not be able to override it.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_removed = 4;</code>\n     * @return int\n     */\n    public function getEditionRemoved()\n    {\n        return isset($this->edition_removed) ? $this->edition_removed : 0;\n    }\n\n    public function hasEditionRemoved()\n    {\n        return isset($this->edition_removed);\n    }\n\n    public function clearEditionRemoved()\n    {\n        unset($this->edition_removed);\n    }\n\n    /**\n     * The edition this feature is no longer available in.  In editions after\n     * this one, the last default assigned will be used, and proto files will\n     * not be able to override it.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition_removed = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEditionRemoved($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->edition_removed = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/JSType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldOptions;\n\nuse UnexpectedValueException;\n\n/**\n * Protobuf type <code>google.protobuf.FieldOptions.JSType</code>\n */\nclass JSType\n{\n    /**\n     * Use the default type.\n     *\n     * Generated from protobuf enum <code>JS_NORMAL = 0;</code>\n     */\n    const JS_NORMAL = 0;\n    /**\n     * Use JavaScript strings.\n     *\n     * Generated from protobuf enum <code>JS_STRING = 1;</code>\n     */\n    const JS_STRING = 1;\n    /**\n     * Use JavaScript numbers.\n     *\n     * Generated from protobuf enum <code>JS_NUMBER = 2;</code>\n     */\n    const JS_NUMBER = 2;\n\n    private static $valueToName = [\n        self::JS_NORMAL => 'JS_NORMAL',\n        self::JS_STRING => 'JS_STRING',\n        self::JS_NUMBER => 'JS_NUMBER',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/OptionRetention.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldOptions;\n\nuse UnexpectedValueException;\n\n/**\n * If set to RETENTION_SOURCE, the option will be omitted from the binary.\n *\n * Protobuf type <code>google.protobuf.FieldOptions.OptionRetention</code>\n */\nclass OptionRetention\n{\n    /**\n     * Generated from protobuf enum <code>RETENTION_UNKNOWN = 0;</code>\n     */\n    const RETENTION_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>RETENTION_RUNTIME = 1;</code>\n     */\n    const RETENTION_RUNTIME = 1;\n    /**\n     * Generated from protobuf enum <code>RETENTION_SOURCE = 2;</code>\n     */\n    const RETENTION_SOURCE = 2;\n\n    private static $valueToName = [\n        self::RETENTION_UNKNOWN => 'RETENTION_UNKNOWN',\n        self::RETENTION_RUNTIME => 'RETENTION_RUNTIME',\n        self::RETENTION_SOURCE => 'RETENTION_SOURCE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions/OptionTargetType.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FieldOptions;\n\nuse UnexpectedValueException;\n\n/**\n * This indicates the types of entities that the field may apply to when used\n * as an option. If it is unset, then the field may be freely used as an\n * option on any kind of entity.\n *\n * Protobuf type <code>google.protobuf.FieldOptions.OptionTargetType</code>\n */\nclass OptionTargetType\n{\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_UNKNOWN = 0;</code>\n     */\n    const TARGET_TYPE_UNKNOWN = 0;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_FILE = 1;</code>\n     */\n    const TARGET_TYPE_FILE = 1;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_EXTENSION_RANGE = 2;</code>\n     */\n    const TARGET_TYPE_EXTENSION_RANGE = 2;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_MESSAGE = 3;</code>\n     */\n    const TARGET_TYPE_MESSAGE = 3;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_FIELD = 4;</code>\n     */\n    const TARGET_TYPE_FIELD = 4;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_ONEOF = 5;</code>\n     */\n    const TARGET_TYPE_ONEOF = 5;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_ENUM = 6;</code>\n     */\n    const TARGET_TYPE_ENUM = 6;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_ENUM_ENTRY = 7;</code>\n     */\n    const TARGET_TYPE_ENUM_ENTRY = 7;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_SERVICE = 8;</code>\n     */\n    const TARGET_TYPE_SERVICE = 8;\n    /**\n     * Generated from protobuf enum <code>TARGET_TYPE_METHOD = 9;</code>\n     */\n    const TARGET_TYPE_METHOD = 9;\n\n    private static $valueToName = [\n        self::TARGET_TYPE_UNKNOWN => 'TARGET_TYPE_UNKNOWN',\n        self::TARGET_TYPE_FILE => 'TARGET_TYPE_FILE',\n        self::TARGET_TYPE_EXTENSION_RANGE => 'TARGET_TYPE_EXTENSION_RANGE',\n        self::TARGET_TYPE_MESSAGE => 'TARGET_TYPE_MESSAGE',\n        self::TARGET_TYPE_FIELD => 'TARGET_TYPE_FIELD',\n        self::TARGET_TYPE_ONEOF => 'TARGET_TYPE_ONEOF',\n        self::TARGET_TYPE_ENUM => 'TARGET_TYPE_ENUM',\n        self::TARGET_TYPE_ENUM_ENTRY => 'TARGET_TYPE_ENUM_ENTRY',\n        self::TARGET_TYPE_SERVICE => 'TARGET_TYPE_SERVICE',\n        self::TARGET_TYPE_METHOD => 'TARGET_TYPE_METHOD',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FieldOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.FieldOptions</code>\n */\nclass FieldOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.\n     * The ctype option instructs the C++ code generator to use a different\n     * representation of the field than it normally would.  See the specific\n     * options below.  This option is only implemented to support use of\n     * [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of\n     * type \"bytes\" in the open source release.\n     * TODO: make ctype actually deprecated.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>\n     */\n    protected $ctype = null;\n    /**\n     * The packed option can be enabled for repeated primitive fields to enable\n     * a more efficient representation on the wire. Rather than repeatedly\n     * writing the tag and type for each element, the entire array is encoded as\n     * a single length-delimited blob. In proto3, only explicit setting it to\n     * false will avoid using packed encoding.  This option is prohibited in\n     * Editions, but the `repeated_field_encoding` feature can be used to control\n     * the behavior.\n     *\n     * Generated from protobuf field <code>optional bool packed = 2;</code>\n     */\n    protected $packed = null;\n    /**\n     * The jstype option determines the JavaScript type used for values of the\n     * field.  The option is permitted only for 64 bit integral and fixed types\n     * (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING\n     * is represented as JavaScript string, which avoids loss of precision that\n     * can happen when a large value is converted to a floating point JavaScript.\n     * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to\n     * use the JavaScript \"number\" type.  The behavior of the default option\n     * JS_NORMAL is implementation dependent.\n     * This option is an enum to permit additional types to be added, e.g.\n     * goog.math.Integer.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];</code>\n     */\n    protected $jstype = null;\n    /**\n     * Should this field be parsed lazily?  Lazy applies only to message-type\n     * fields.  It means that when the outer message is initially parsed, the\n     * inner message's contents will not be parsed but instead stored in encoded\n     * form.  The inner message will actually be parsed when it is first accessed.\n     * This is only a hint.  Implementations are free to choose whether to use\n     * eager or lazy parsing regardless of the value of this option.  However,\n     * setting this option true suggests that the protocol author believes that\n     * using lazy parsing on this field is worth the additional bookkeeping\n     * overhead typically needed to implement it.\n     * This option does not affect the public interface of any generated code;\n     * all method signatures remain the same.  Furthermore, thread-safety of the\n     * interface is not affected by this option; const methods remain safe to\n     * call from multiple threads concurrently, while non-const methods continue\n     * to require exclusive access.\n     * Note that lazy message fields are still eagerly verified to check\n     * ill-formed wireformat or missing required fields. Calling IsInitialized()\n     * on the outer message would fail if the inner message has missing required\n     * fields. Failed verification would result in parsing failure (except when\n     * uninitialized messages are acceptable).\n     *\n     * Generated from protobuf field <code>optional bool lazy = 5 [default = false];</code>\n     */\n    protected $lazy = null;\n    /**\n     * unverified_lazy does no correctness checks on the byte stream. This should\n     * only be used where lazy with verification is prohibitive for performance\n     * reasons.\n     *\n     * Generated from protobuf field <code>optional bool unverified_lazy = 15 [default = false];</code>\n     */\n    protected $unverified_lazy = null;\n    /**\n     * Is this field deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for accessors, or it will be completely ignored; in the very least, this\n     * is a formalization for deprecating fields.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * DEPRECATED. DO NOT USE!\n     * For Google-internal migration only. Do not use.\n     *\n     * Generated from protobuf field <code>optional bool weak = 10 [default = false, deprecated = true];</code>\n     * @deprecated\n     */\n    protected $weak = null;\n    /**\n     * Indicate that the field value should not be printed out when using debug\n     * formats, e.g. when the field contains sensitive credentials.\n     *\n     * Generated from protobuf field <code>optional bool debug_redact = 16 [default = false];</code>\n     */\n    protected $debug_redact = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.OptionRetention retention = 17;</code>\n     */\n    protected $retention = null;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;</code>\n     */\n    private $targets;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;</code>\n     */\n    private $edition_defaults;\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 21;</code>\n     */\n    protected $features = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;</code>\n     */\n    protected $feature_support = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $ctype\n     *           NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.\n     *           The ctype option instructs the C++ code generator to use a different\n     *           representation of the field than it normally would.  See the specific\n     *           options below.  This option is only implemented to support use of\n     *           [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of\n     *           type \"bytes\" in the open source release.\n     *           TODO: make ctype actually deprecated.\n     *     @type bool $packed\n     *           The packed option can be enabled for repeated primitive fields to enable\n     *           a more efficient representation on the wire. Rather than repeatedly\n     *           writing the tag and type for each element, the entire array is encoded as\n     *           a single length-delimited blob. In proto3, only explicit setting it to\n     *           false will avoid using packed encoding.  This option is prohibited in\n     *           Editions, but the `repeated_field_encoding` feature can be used to control\n     *           the behavior.\n     *     @type int $jstype\n     *           The jstype option determines the JavaScript type used for values of the\n     *           field.  The option is permitted only for 64 bit integral and fixed types\n     *           (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING\n     *           is represented as JavaScript string, which avoids loss of precision that\n     *           can happen when a large value is converted to a floating point JavaScript.\n     *           Specifying JS_NUMBER for the jstype causes the generated JavaScript code to\n     *           use the JavaScript \"number\" type.  The behavior of the default option\n     *           JS_NORMAL is implementation dependent.\n     *           This option is an enum to permit additional types to be added, e.g.\n     *           goog.math.Integer.\n     *     @type bool $lazy\n     *           Should this field be parsed lazily?  Lazy applies only to message-type\n     *           fields.  It means that when the outer message is initially parsed, the\n     *           inner message's contents will not be parsed but instead stored in encoded\n     *           form.  The inner message will actually be parsed when it is first accessed.\n     *           This is only a hint.  Implementations are free to choose whether to use\n     *           eager or lazy parsing regardless of the value of this option.  However,\n     *           setting this option true suggests that the protocol author believes that\n     *           using lazy parsing on this field is worth the additional bookkeeping\n     *           overhead typically needed to implement it.\n     *           This option does not affect the public interface of any generated code;\n     *           all method signatures remain the same.  Furthermore, thread-safety of the\n     *           interface is not affected by this option; const methods remain safe to\n     *           call from multiple threads concurrently, while non-const methods continue\n     *           to require exclusive access.\n     *           Note that lazy message fields are still eagerly verified to check\n     *           ill-formed wireformat or missing required fields. Calling IsInitialized()\n     *           on the outer message would fail if the inner message has missing required\n     *           fields. Failed verification would result in parsing failure (except when\n     *           uninitialized messages are acceptable).\n     *     @type bool $unverified_lazy\n     *           unverified_lazy does no correctness checks on the byte stream. This should\n     *           only be used where lazy with verification is prohibitive for performance\n     *           reasons.\n     *     @type bool $deprecated\n     *           Is this field deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for accessors, or it will be completely ignored; in the very least, this\n     *           is a formalization for deprecating fields.\n     *     @type bool $weak\n     *           DEPRECATED. DO NOT USE!\n     *           For Google-internal migration only. Do not use.\n     *     @type bool $debug_redact\n     *           Indicate that the field value should not be printed out when using debug\n     *           formats, e.g. when the field contains sensitive credentials.\n     *     @type int $retention\n     *     @type int[] $targets\n     *     @type \\Google\\Protobuf\\Internal\\FieldOptions\\EditionDefault[] $edition_defaults\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport $feature_support\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.\n     * The ctype option instructs the C++ code generator to use a different\n     * representation of the field than it normally would.  See the specific\n     * options below.  This option is only implemented to support use of\n     * [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of\n     * type \"bytes\" in the open source release.\n     * TODO: make ctype actually deprecated.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>\n     * @return int\n     */\n    public function getCtype()\n    {\n        return isset($this->ctype) ? $this->ctype : 0;\n    }\n\n    public function hasCtype()\n    {\n        return isset($this->ctype);\n    }\n\n    public function clearCtype()\n    {\n        unset($this->ctype);\n    }\n\n    /**\n     * NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.\n     * The ctype option instructs the C++ code generator to use a different\n     * representation of the field than it normally would.  See the specific\n     * options below.  This option is only implemented to support use of\n     * [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of\n     * type \"bytes\" in the open source release.\n     * TODO: make ctype actually deprecated.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setCtype($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FieldOptions\\CType::class);\n        $this->ctype = $var;\n\n        return $this;\n    }\n\n    /**\n     * The packed option can be enabled for repeated primitive fields to enable\n     * a more efficient representation on the wire. Rather than repeatedly\n     * writing the tag and type for each element, the entire array is encoded as\n     * a single length-delimited blob. In proto3, only explicit setting it to\n     * false will avoid using packed encoding.  This option is prohibited in\n     * Editions, but the `repeated_field_encoding` feature can be used to control\n     * the behavior.\n     *\n     * Generated from protobuf field <code>optional bool packed = 2;</code>\n     * @return bool\n     */\n    public function getPacked()\n    {\n        return isset($this->packed) ? $this->packed : false;\n    }\n\n    public function hasPacked()\n    {\n        return isset($this->packed);\n    }\n\n    public function clearPacked()\n    {\n        unset($this->packed);\n    }\n\n    /**\n     * The packed option can be enabled for repeated primitive fields to enable\n     * a more efficient representation on the wire. Rather than repeatedly\n     * writing the tag and type for each element, the entire array is encoded as\n     * a single length-delimited blob. In proto3, only explicit setting it to\n     * false will avoid using packed encoding.  This option is prohibited in\n     * Editions, but the `repeated_field_encoding` feature can be used to control\n     * the behavior.\n     *\n     * Generated from protobuf field <code>optional bool packed = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setPacked($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->packed = $var;\n\n        return $this;\n    }\n\n    /**\n     * The jstype option determines the JavaScript type used for values of the\n     * field.  The option is permitted only for 64 bit integral and fixed types\n     * (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING\n     * is represented as JavaScript string, which avoids loss of precision that\n     * can happen when a large value is converted to a floating point JavaScript.\n     * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to\n     * use the JavaScript \"number\" type.  The behavior of the default option\n     * JS_NORMAL is implementation dependent.\n     * This option is an enum to permit additional types to be added, e.g.\n     * goog.math.Integer.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];</code>\n     * @return int\n     */\n    public function getJstype()\n    {\n        return isset($this->jstype) ? $this->jstype : 0;\n    }\n\n    public function hasJstype()\n    {\n        return isset($this->jstype);\n    }\n\n    public function clearJstype()\n    {\n        unset($this->jstype);\n    }\n\n    /**\n     * The jstype option determines the JavaScript type used for values of the\n     * field.  The option is permitted only for 64 bit integral and fixed types\n     * (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING\n     * is represented as JavaScript string, which avoids loss of precision that\n     * can happen when a large value is converted to a floating point JavaScript.\n     * Specifying JS_NUMBER for the jstype causes the generated JavaScript code to\n     * use the JavaScript \"number\" type.  The behavior of the default option\n     * JS_NORMAL is implementation dependent.\n     * This option is an enum to permit additional types to be added, e.g.\n     * goog.math.Integer.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setJstype($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FieldOptions\\JSType::class);\n        $this->jstype = $var;\n\n        return $this;\n    }\n\n    /**\n     * Should this field be parsed lazily?  Lazy applies only to message-type\n     * fields.  It means that when the outer message is initially parsed, the\n     * inner message's contents will not be parsed but instead stored in encoded\n     * form.  The inner message will actually be parsed when it is first accessed.\n     * This is only a hint.  Implementations are free to choose whether to use\n     * eager or lazy parsing regardless of the value of this option.  However,\n     * setting this option true suggests that the protocol author believes that\n     * using lazy parsing on this field is worth the additional bookkeeping\n     * overhead typically needed to implement it.\n     * This option does not affect the public interface of any generated code;\n     * all method signatures remain the same.  Furthermore, thread-safety of the\n     * interface is not affected by this option; const methods remain safe to\n     * call from multiple threads concurrently, while non-const methods continue\n     * to require exclusive access.\n     * Note that lazy message fields are still eagerly verified to check\n     * ill-formed wireformat or missing required fields. Calling IsInitialized()\n     * on the outer message would fail if the inner message has missing required\n     * fields. Failed verification would result in parsing failure (except when\n     * uninitialized messages are acceptable).\n     *\n     * Generated from protobuf field <code>optional bool lazy = 5 [default = false];</code>\n     * @return bool\n     */\n    public function getLazy()\n    {\n        return isset($this->lazy) ? $this->lazy : false;\n    }\n\n    public function hasLazy()\n    {\n        return isset($this->lazy);\n    }\n\n    public function clearLazy()\n    {\n        unset($this->lazy);\n    }\n\n    /**\n     * Should this field be parsed lazily?  Lazy applies only to message-type\n     * fields.  It means that when the outer message is initially parsed, the\n     * inner message's contents will not be parsed but instead stored in encoded\n     * form.  The inner message will actually be parsed when it is first accessed.\n     * This is only a hint.  Implementations are free to choose whether to use\n     * eager or lazy parsing regardless of the value of this option.  However,\n     * setting this option true suggests that the protocol author believes that\n     * using lazy parsing on this field is worth the additional bookkeeping\n     * overhead typically needed to implement it.\n     * This option does not affect the public interface of any generated code;\n     * all method signatures remain the same.  Furthermore, thread-safety of the\n     * interface is not affected by this option; const methods remain safe to\n     * call from multiple threads concurrently, while non-const methods continue\n     * to require exclusive access.\n     * Note that lazy message fields are still eagerly verified to check\n     * ill-formed wireformat or missing required fields. Calling IsInitialized()\n     * on the outer message would fail if the inner message has missing required\n     * fields. Failed verification would result in parsing failure (except when\n     * uninitialized messages are acceptable).\n     *\n     * Generated from protobuf field <code>optional bool lazy = 5 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setLazy($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->lazy = $var;\n\n        return $this;\n    }\n\n    /**\n     * unverified_lazy does no correctness checks on the byte stream. This should\n     * only be used where lazy with verification is prohibitive for performance\n     * reasons.\n     *\n     * Generated from protobuf field <code>optional bool unverified_lazy = 15 [default = false];</code>\n     * @return bool\n     */\n    public function getUnverifiedLazy()\n    {\n        return isset($this->unverified_lazy) ? $this->unverified_lazy : false;\n    }\n\n    public function hasUnverifiedLazy()\n    {\n        return isset($this->unverified_lazy);\n    }\n\n    public function clearUnverifiedLazy()\n    {\n        unset($this->unverified_lazy);\n    }\n\n    /**\n     * unverified_lazy does no correctness checks on the byte stream. This should\n     * only be used where lazy with verification is prohibitive for performance\n     * reasons.\n     *\n     * Generated from protobuf field <code>optional bool unverified_lazy = 15 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setUnverifiedLazy($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->unverified_lazy = $var;\n\n        return $this;\n    }\n\n    /**\n     * Is this field deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for accessors, or it will be completely ignored; in the very least, this\n     * is a formalization for deprecating fields.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this field deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for accessors, or it will be completely ignored; in the very least, this\n     * is a formalization for deprecating fields.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * DEPRECATED. DO NOT USE!\n     * For Google-internal migration only. Do not use.\n     *\n     * Generated from protobuf field <code>optional bool weak = 10 [default = false, deprecated = true];</code>\n     * @return bool\n     * @deprecated\n     */\n    public function getWeak()\n    {\n        if (isset($this->weak)) {\n            @trigger_error('weak is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->weak) ? $this->weak : false;\n    }\n\n    public function hasWeak()\n    {\n        if (isset($this->weak)) {\n            @trigger_error('weak is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->weak);\n    }\n\n    public function clearWeak()\n    {\n        @trigger_error('weak is deprecated.', E_USER_DEPRECATED);\n        unset($this->weak);\n    }\n\n    /**\n     * DEPRECATED. DO NOT USE!\n     * For Google-internal migration only. Do not use.\n     *\n     * Generated from protobuf field <code>optional bool weak = 10 [default = false, deprecated = true];</code>\n     * @param bool $var\n     * @return $this\n     * @deprecated\n     */\n    public function setWeak($var)\n    {\n        @trigger_error('weak is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkBool($var);\n        $this->weak = $var;\n\n        return $this;\n    }\n\n    /**\n     * Indicate that the field value should not be printed out when using debug\n     * formats, e.g. when the field contains sensitive credentials.\n     *\n     * Generated from protobuf field <code>optional bool debug_redact = 16 [default = false];</code>\n     * @return bool\n     */\n    public function getDebugRedact()\n    {\n        return isset($this->debug_redact) ? $this->debug_redact : false;\n    }\n\n    public function hasDebugRedact()\n    {\n        return isset($this->debug_redact);\n    }\n\n    public function clearDebugRedact()\n    {\n        unset($this->debug_redact);\n    }\n\n    /**\n     * Indicate that the field value should not be printed out when using debug\n     * formats, e.g. when the field contains sensitive credentials.\n     *\n     * Generated from protobuf field <code>optional bool debug_redact = 16 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDebugRedact($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->debug_redact = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.OptionRetention retention = 17;</code>\n     * @return int\n     */\n    public function getRetention()\n    {\n        return isset($this->retention) ? $this->retention : 0;\n    }\n\n    public function hasRetention()\n    {\n        return isset($this->retention);\n    }\n\n    public function clearRetention()\n    {\n        unset($this->retention);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.OptionRetention retention = 17;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setRetention($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FieldOptions\\OptionRetention::class);\n        $this->retention = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;</code>\n     * @return RepeatedField<int>\n     */\n    public function getTargets()\n    {\n        return $this->targets;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;</code>\n     * @param int[] $var\n     * @return $this\n     */\n    public function setTargets($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::ENUM, \\Google\\Protobuf\\Internal\\FieldOptions\\OptionTargetType::class);\n        $this->targets = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\FieldOptions\\EditionDefault>\n     */\n    public function getEditionDefaults()\n    {\n        return $this->edition_defaults;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldOptions\\EditionDefault[] $var\n     * @return $this\n     */\n    public function setEditionDefaults($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\FieldOptions\\EditionDefault::class);\n        $this->edition_defaults = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 21;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 21;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;</code>\n     * @return \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport|null\n     */\n    public function getFeatureSupport()\n    {\n        return $this->feature_support;\n    }\n\n    public function hasFeatureSupport()\n    {\n        return isset($this->feature_support);\n    }\n\n    public function clearFeatureSupport()\n    {\n        unset($this->feature_support);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport $var\n     * @return $this\n     */\n    public function setFeatureSupport($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FieldOptions\\FeatureSupport::class);\n        $this->feature_support = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass FileDescriptor\n{\n\n    private $package;\n    private $message_type = [];\n    private $enum_type = [];\n\n    public function setPackage($package)\n    {\n        $this->package = $package;\n    }\n\n    public function getPackage()\n    {\n        return $this->package;\n    }\n\n    public function getMessageType()\n    {\n        return $this->message_type;\n    }\n\n    public function addMessageType($desc)\n    {\n        $this->message_type[] = $desc;\n    }\n\n    public function getEnumType()\n    {\n        return $this->enum_type;\n    }\n\n    public function addEnumType($desc)\n    {\n        $this->enum_type[]= $desc;\n    }\n\n    public static function buildFromProto($proto)\n    {\n        $file = new FileDescriptor();\n        $file->setPackage($proto->getPackage());\n        foreach ($proto->getMessageType() as $message_proto) {\n            $file->addMessageType(Descriptor::buildFromProto(\n                $message_proto, $proto, \"\"));\n        }\n        foreach ($proto->getEnumType() as $enum_proto) {\n            $file->addEnumType(\n                EnumDescriptor::buildFromProto(\n                    $enum_proto,\n                    $proto,\n                    \"\"));\n        }\n        return $file;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a complete .proto file.\n *\n * Generated from protobuf message <code>google.protobuf.FileDescriptorProto</code>\n */\nclass FileDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * file name, relative to root of source tree\n     *\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * e.g. \"foo\", \"foo.bar\", etc.\n     *\n     * Generated from protobuf field <code>optional string package = 2;</code>\n     */\n    protected $package = null;\n    /**\n     * Names of files imported by this file.\n     *\n     * Generated from protobuf field <code>repeated string dependency = 3;</code>\n     */\n    private $dependency;\n    /**\n     * Indexes of the public imported files in the dependency list above.\n     *\n     * Generated from protobuf field <code>repeated int32 public_dependency = 10;</code>\n     */\n    private $public_dependency;\n    /**\n     * Indexes of the weak imported files in the dependency list.\n     * For Google-internal migration only. Do not use.\n     *\n     * Generated from protobuf field <code>repeated int32 weak_dependency = 11;</code>\n     */\n    private $weak_dependency;\n    /**\n     * Names of files imported by this file purely for the purpose of providing\n     * option extensions. These are excluded from the dependency list above.\n     *\n     * Generated from protobuf field <code>repeated string option_dependency = 15;</code>\n     */\n    private $option_dependency;\n    /**\n     * All top-level definitions in this file.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>\n     */\n    private $message_type;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>\n     */\n    private $enum_type;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>\n     */\n    private $service;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>\n     */\n    private $extension;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FileOptions options = 8;</code>\n     */\n    protected $options = null;\n    /**\n     * This field contains optional information about the original source code.\n     * You may safely remove this entire field without harming runtime\n     * functionality of the descriptors -- the information is needed only by\n     * development tools.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>\n     */\n    protected $source_code_info = null;\n    /**\n     * The syntax of the proto file.\n     * The supported values are \"proto2\", \"proto3\", and \"editions\".\n     * If `edition` is present, this value must be \"editions\".\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional string syntax = 12;</code>\n     */\n    protected $syntax = null;\n    /**\n     * The edition of the proto file.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 14;</code>\n     */\n    protected $edition = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           file name, relative to root of source tree\n     *     @type string $package\n     *           e.g. \"foo\", \"foo.bar\", etc.\n     *     @type string[] $dependency\n     *           Names of files imported by this file.\n     *     @type int[] $public_dependency\n     *           Indexes of the public imported files in the dependency list above.\n     *     @type int[] $weak_dependency\n     *           Indexes of the weak imported files in the dependency list.\n     *           For Google-internal migration only. Do not use.\n     *     @type string[] $option_dependency\n     *           Names of files imported by this file purely for the purpose of providing\n     *           option extensions. These are excluded from the dependency list above.\n     *     @type \\Google\\Protobuf\\Internal\\DescriptorProto[] $message_type\n     *           All top-level definitions in this file.\n     *     @type \\Google\\Protobuf\\Internal\\EnumDescriptorProto[] $enum_type\n     *     @type \\Google\\Protobuf\\Internal\\ServiceDescriptorProto[] $service\n     *     @type \\Google\\Protobuf\\Internal\\FieldDescriptorProto[] $extension\n     *     @type \\Google\\Protobuf\\Internal\\FileOptions $options\n     *     @type \\Google\\Protobuf\\Internal\\SourceCodeInfo $source_code_info\n     *           This field contains optional information about the original source code.\n     *           You may safely remove this entire field without harming runtime\n     *           functionality of the descriptors -- the information is needed only by\n     *           development tools.\n     *     @type string $syntax\n     *           The syntax of the proto file.\n     *           The supported values are \"proto2\", \"proto3\", and \"editions\".\n     *           If `edition` is present, this value must be \"editions\".\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type int $edition\n     *           The edition of the proto file.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * file name, relative to root of source tree\n     *\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * file name, relative to root of source tree\n     *\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * e.g. \"foo\", \"foo.bar\", etc.\n     *\n     * Generated from protobuf field <code>optional string package = 2;</code>\n     * @return string\n     */\n    public function getPackage()\n    {\n        return isset($this->package) ? $this->package : '';\n    }\n\n    public function hasPackage()\n    {\n        return isset($this->package);\n    }\n\n    public function clearPackage()\n    {\n        unset($this->package);\n    }\n\n    /**\n     * e.g. \"foo\", \"foo.bar\", etc.\n     *\n     * Generated from protobuf field <code>optional string package = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPackage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->package = $var;\n\n        return $this;\n    }\n\n    /**\n     * Names of files imported by this file.\n     *\n     * Generated from protobuf field <code>repeated string dependency = 3;</code>\n     * @return RepeatedField<string>\n     */\n    public function getDependency()\n    {\n        return $this->dependency;\n    }\n\n    /**\n     * Names of files imported by this file.\n     *\n     * Generated from protobuf field <code>repeated string dependency = 3;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setDependency($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->dependency = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Indexes of the public imported files in the dependency list above.\n     *\n     * Generated from protobuf field <code>repeated int32 public_dependency = 10;</code>\n     * @return RepeatedField<int>\n     */\n    public function getPublicDependency()\n    {\n        return $this->public_dependency;\n    }\n\n    /**\n     * Indexes of the public imported files in the dependency list above.\n     *\n     * Generated from protobuf field <code>repeated int32 public_dependency = 10;</code>\n     * @param int[] $var\n     * @return $this\n     */\n    public function setPublicDependency($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::INT32);\n        $this->public_dependency = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Indexes of the weak imported files in the dependency list.\n     * For Google-internal migration only. Do not use.\n     *\n     * Generated from protobuf field <code>repeated int32 weak_dependency = 11;</code>\n     * @return RepeatedField<int>\n     */\n    public function getWeakDependency()\n    {\n        return $this->weak_dependency;\n    }\n\n    /**\n     * Indexes of the weak imported files in the dependency list.\n     * For Google-internal migration only. Do not use.\n     *\n     * Generated from protobuf field <code>repeated int32 weak_dependency = 11;</code>\n     * @param int[] $var\n     * @return $this\n     */\n    public function setWeakDependency($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::INT32);\n        $this->weak_dependency = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Names of files imported by this file purely for the purpose of providing\n     * option extensions. These are excluded from the dependency list above.\n     *\n     * Generated from protobuf field <code>repeated string option_dependency = 15;</code>\n     * @return RepeatedField<string>\n     */\n    public function getOptionDependency()\n    {\n        return $this->option_dependency;\n    }\n\n    /**\n     * Names of files imported by this file purely for the purpose of providing\n     * option extensions. These are excluded from the dependency list above.\n     *\n     * Generated from protobuf field <code>repeated string option_dependency = 15;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setOptionDependency($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->option_dependency = $arr;\n\n        return $this;\n    }\n\n    /**\n     * All top-level definitions in this file.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\DescriptorProto>\n     */\n    public function getMessageType()\n    {\n        return $this->message_type;\n    }\n\n    /**\n     * All top-level definitions in this file.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>\n     * @param \\Google\\Protobuf\\Internal\\DescriptorProto[] $var\n     * @return $this\n     */\n    public function setMessageType($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\DescriptorProto::class);\n        $this->message_type = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\EnumDescriptorProto>\n     */\n    public function getEnumType()\n    {\n        return $this->enum_type;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>\n     * @param \\Google\\Protobuf\\Internal\\EnumDescriptorProto[] $var\n     * @return $this\n     */\n    public function setEnumType($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\EnumDescriptorProto::class);\n        $this->enum_type = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\ServiceDescriptorProto>\n     */\n    public function getService()\n    {\n        return $this->service;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>\n     * @param \\Google\\Protobuf\\Internal\\ServiceDescriptorProto[] $var\n     * @return $this\n     */\n    public function setService($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\ServiceDescriptorProto::class);\n        $this->service = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\FieldDescriptorProto>\n     */\n    public function getExtension()\n    {\n        return $this->extension;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>\n     * @param \\Google\\Protobuf\\Internal\\FieldDescriptorProto[] $var\n     * @return $this\n     */\n    public function setExtension($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\FieldDescriptorProto::class);\n        $this->extension = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FileOptions options = 8;</code>\n     * @return \\Google\\Protobuf\\Internal\\FileOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FileOptions options = 8;</code>\n     * @param \\Google\\Protobuf\\Internal\\FileOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FileOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n    /**\n     * This field contains optional information about the original source code.\n     * You may safely remove this entire field without harming runtime\n     * functionality of the descriptors -- the information is needed only by\n     * development tools.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>\n     * @return \\Google\\Protobuf\\Internal\\SourceCodeInfo|null\n     */\n    public function getSourceCodeInfo()\n    {\n        return $this->source_code_info;\n    }\n\n    public function hasSourceCodeInfo()\n    {\n        return isset($this->source_code_info);\n    }\n\n    public function clearSourceCodeInfo()\n    {\n        unset($this->source_code_info);\n    }\n\n    /**\n     * This field contains optional information about the original source code.\n     * You may safely remove this entire field without harming runtime\n     * functionality of the descriptors -- the information is needed only by\n     * development tools.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>\n     * @param \\Google\\Protobuf\\Internal\\SourceCodeInfo $var\n     * @return $this\n     */\n    public function setSourceCodeInfo($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\SourceCodeInfo::class);\n        $this->source_code_info = $var;\n\n        return $this;\n    }\n\n    /**\n     * The syntax of the proto file.\n     * The supported values are \"proto2\", \"proto3\", and \"editions\".\n     * If `edition` is present, this value must be \"editions\".\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional string syntax = 12;</code>\n     * @return string\n     */\n    public function getSyntax()\n    {\n        return isset($this->syntax) ? $this->syntax : '';\n    }\n\n    public function hasSyntax()\n    {\n        return isset($this->syntax);\n    }\n\n    public function clearSyntax()\n    {\n        unset($this->syntax);\n    }\n\n    /**\n     * The syntax of the proto file.\n     * The supported values are \"proto2\", \"proto3\", and \"editions\".\n     * If `edition` is present, this value must be \"editions\".\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional string syntax = 12;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSyntax($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->syntax = $var;\n\n        return $this;\n    }\n\n    /**\n     * The edition of the proto file.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 14;</code>\n     * @return int\n     */\n    public function getEdition()\n    {\n        return isset($this->edition) ? $this->edition : 0;\n    }\n\n    public function hasEdition()\n    {\n        return isset($this->edition);\n    }\n\n    public function clearEdition()\n    {\n        unset($this->edition);\n    }\n\n    /**\n     * The edition of the proto file.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.Edition edition = 14;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEdition($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\Edition::class);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FileDescriptorSet.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * The protocol compiler can output a FileDescriptorSet containing the .proto\n * files it parses.\n *\n * Generated from protobuf message <code>google.protobuf.FileDescriptorSet</code>\n */\nclass FileDescriptorSet extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>\n     */\n    private $file;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\FileDescriptorProto[] $file\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\FileDescriptorProto>\n     */\n    public function getFile()\n    {\n        return $this->file;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>\n     * @param \\Google\\Protobuf\\Internal\\FileDescriptorProto[] $var\n     * @return $this\n     */\n    public function setFile($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\FileDescriptorProto::class);\n        $this->file = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions/OptimizeMode.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\FileOptions;\n\nuse UnexpectedValueException;\n\n/**\n * Generated classes can be optimized for speed or code size.\n *\n * Protobuf type <code>google.protobuf.FileOptions.OptimizeMode</code>\n */\nclass OptimizeMode\n{\n    /**\n     * Generate complete code for parsing, serialization,\n     *\n     * Generated from protobuf enum <code>SPEED = 1;</code>\n     */\n    const SPEED = 1;\n    /**\n     * etc.\n     *\n     * Generated from protobuf enum <code>CODE_SIZE = 2;</code>\n     */\n    const CODE_SIZE = 2;\n    /**\n     * Generate code using MessageLite and the lite runtime.\n     *\n     * Generated from protobuf enum <code>LITE_RUNTIME = 3;</code>\n     */\n    const LITE_RUNTIME = 3;\n\n    private static $valueToName = [\n        self::SPEED => 'SPEED',\n        self::CODE_SIZE => 'CODE_SIZE',\n        self::LITE_RUNTIME => 'LITE_RUNTIME',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/FileOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.FileOptions</code>\n */\nclass FileOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Sets the Java package where classes generated from this .proto will be\n     * placed.  By default, the proto package is used, but this is often\n     * inappropriate because proto packages do not normally start with backwards\n     * domain names.\n     *\n     * Generated from protobuf field <code>optional string java_package = 1;</code>\n     */\n    protected $java_package = null;\n    /**\n     * Controls the name of the wrapper Java class generated for the .proto file.\n     * That class will always contain the .proto file's getDescriptor() method as\n     * well as any top-level extensions defined in the .proto file.\n     * If java_multiple_files is disabled, then all the other classes from the\n     * .proto file will be nested inside the single wrapper outer class.\n     *\n     * Generated from protobuf field <code>optional string java_outer_classname = 8;</code>\n     */\n    protected $java_outer_classname = null;\n    /**\n     * If enabled, then the Java code generator will generate a separate .java\n     * file for each top-level message, enum, and service defined in the .proto\n     * file.  Thus, these types will *not* be nested inside the wrapper class\n     * named by java_outer_classname.  However, the wrapper class will still be\n     * generated to contain the file's getDescriptor() method as well as any\n     * top-level extensions defined in the file.\n     *\n     * Generated from protobuf field <code>optional bool java_multiple_files = 10 [default = false];</code>\n     */\n    protected $java_multiple_files = null;\n    /**\n     * This option does nothing.\n     *\n     * Generated from protobuf field <code>optional bool java_generate_equals_and_hash = 20 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $java_generate_equals_and_hash = null;\n    /**\n     * A proto2 file can set this to true to opt in to UTF-8 checking for Java,\n     * which will throw an exception if invalid UTF-8 is parsed from the wire or\n     * assigned to a string field.\n     * TODO: clarify exactly what kinds of field types this option\n     * applies to, and update these docs accordingly.\n     * Proto3 files already perform these checks. Setting the option explicitly to\n     * false has no effect: it cannot be used to opt proto3 files out of UTF-8\n     * checks.\n     *\n     * Generated from protobuf field <code>optional bool java_string_check_utf8 = 27 [default = false];</code>\n     */\n    protected $java_string_check_utf8 = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>\n     */\n    protected $optimize_for = null;\n    /**\n     * Sets the Go package where structs generated from this .proto will be\n     * placed. If omitted, the Go package will be derived from the following:\n     *   - The basename of the package import path, if provided.\n     *   - Otherwise, the package statement in the .proto file, if present.\n     *   - Otherwise, the basename of the .proto file, without extension.\n     *\n     * Generated from protobuf field <code>optional string go_package = 11;</code>\n     */\n    protected $go_package = null;\n    /**\n     * Should generic services be generated in each language?  \"Generic\" services\n     * are not specific to any particular RPC system.  They are generated by the\n     * main code generators in each language (without additional plugins).\n     * Generic services were the only kind of service generation supported by\n     * early versions of google.protobuf.\n     * Generic services are now considered deprecated in favor of using plugins\n     * that generate code specific to your particular RPC system.  Therefore,\n     * these default to false.  Old code which depends on generic services should\n     * explicitly set them to true.\n     *\n     * Generated from protobuf field <code>optional bool cc_generic_services = 16 [default = false];</code>\n     */\n    protected $cc_generic_services = null;\n    /**\n     * Generated from protobuf field <code>optional bool java_generic_services = 17 [default = false];</code>\n     */\n    protected $java_generic_services = null;\n    /**\n     * Generated from protobuf field <code>optional bool py_generic_services = 18 [default = false];</code>\n     */\n    protected $py_generic_services = null;\n    /**\n     * Is this file deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for everything in the file, or it will be completely ignored; in the very\n     * least, this is a formalization for deprecating files.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 23 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * Enables the use of arenas for the proto messages in this file. This applies\n     * only to generated classes for C++.\n     *\n     * Generated from protobuf field <code>optional bool cc_enable_arenas = 31 [default = true];</code>\n     */\n    protected $cc_enable_arenas = null;\n    /**\n     * Sets the objective c class prefix which is prepended to all objective c\n     * generated classes from this .proto. There is no default.\n     *\n     * Generated from protobuf field <code>optional string objc_class_prefix = 36;</code>\n     */\n    protected $objc_class_prefix = null;\n    /**\n     * Namespace for generated classes; defaults to the package.\n     *\n     * Generated from protobuf field <code>optional string csharp_namespace = 37;</code>\n     */\n    protected $csharp_namespace = null;\n    /**\n     * By default Swift generators will take the proto package and CamelCase it\n     * replacing '.' with underscore and use that to prefix the types/symbols\n     * defined. When this options is provided, they will use this value instead\n     * to prefix the types/symbols defined.\n     *\n     * Generated from protobuf field <code>optional string swift_prefix = 39;</code>\n     */\n    protected $swift_prefix = null;\n    /**\n     * Sets the php class prefix which is prepended to all php generated classes\n     * from this .proto. Default is empty.\n     *\n     * Generated from protobuf field <code>optional string php_class_prefix = 40;</code>\n     */\n    protected $php_class_prefix = null;\n    /**\n     * Use this option to change the namespace of php generated classes. Default\n     * is empty. When this option is empty, the package name will be used for\n     * determining the namespace.\n     *\n     * Generated from protobuf field <code>optional string php_namespace = 41;</code>\n     */\n    protected $php_namespace = null;\n    /**\n     * Use this option to change the namespace of php generated metadata classes.\n     * Default is empty. When this option is empty, the proto file name will be\n     * used for determining the namespace.\n     *\n     * Generated from protobuf field <code>optional string php_metadata_namespace = 44;</code>\n     */\n    protected $php_metadata_namespace = null;\n    /**\n     * Use this option to change the package of ruby generated classes. Default\n     * is empty. When this option is not set, the package name will be used for\n     * determining the ruby package.\n     *\n     * Generated from protobuf field <code>optional string ruby_package = 45;</code>\n     */\n    protected $ruby_package = null;\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 50;</code>\n     */\n    protected $features = null;\n    /**\n     * The parser stores options it doesn't recognize here.\n     * See the documentation for the \"Options\" section above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $java_package\n     *           Sets the Java package where classes generated from this .proto will be\n     *           placed.  By default, the proto package is used, but this is often\n     *           inappropriate because proto packages do not normally start with backwards\n     *           domain names.\n     *     @type string $java_outer_classname\n     *           Controls the name of the wrapper Java class generated for the .proto file.\n     *           That class will always contain the .proto file's getDescriptor() method as\n     *           well as any top-level extensions defined in the .proto file.\n     *           If java_multiple_files is disabled, then all the other classes from the\n     *           .proto file will be nested inside the single wrapper outer class.\n     *     @type bool $java_multiple_files\n     *           If enabled, then the Java code generator will generate a separate .java\n     *           file for each top-level message, enum, and service defined in the .proto\n     *           file.  Thus, these types will *not* be nested inside the wrapper class\n     *           named by java_outer_classname.  However, the wrapper class will still be\n     *           generated to contain the file's getDescriptor() method as well as any\n     *           top-level extensions defined in the file.\n     *     @type bool $java_generate_equals_and_hash\n     *           This option does nothing.\n     *     @type bool $java_string_check_utf8\n     *           A proto2 file can set this to true to opt in to UTF-8 checking for Java,\n     *           which will throw an exception if invalid UTF-8 is parsed from the wire or\n     *           assigned to a string field.\n     *           TODO: clarify exactly what kinds of field types this option\n     *           applies to, and update these docs accordingly.\n     *           Proto3 files already perform these checks. Setting the option explicitly to\n     *           false has no effect: it cannot be used to opt proto3 files out of UTF-8\n     *           checks.\n     *     @type int $optimize_for\n     *     @type string $go_package\n     *           Sets the Go package where structs generated from this .proto will be\n     *           placed. If omitted, the Go package will be derived from the following:\n     *             - The basename of the package import path, if provided.\n     *             - Otherwise, the package statement in the .proto file, if present.\n     *             - Otherwise, the basename of the .proto file, without extension.\n     *     @type bool $cc_generic_services\n     *           Should generic services be generated in each language?  \"Generic\" services\n     *           are not specific to any particular RPC system.  They are generated by the\n     *           main code generators in each language (without additional plugins).\n     *           Generic services were the only kind of service generation supported by\n     *           early versions of google.protobuf.\n     *           Generic services are now considered deprecated in favor of using plugins\n     *           that generate code specific to your particular RPC system.  Therefore,\n     *           these default to false.  Old code which depends on generic services should\n     *           explicitly set them to true.\n     *     @type bool $java_generic_services\n     *     @type bool $py_generic_services\n     *     @type bool $deprecated\n     *           Is this file deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for everything in the file, or it will be completely ignored; in the very\n     *           least, this is a formalization for deprecating files.\n     *     @type bool $cc_enable_arenas\n     *           Enables the use of arenas for the proto messages in this file. This applies\n     *           only to generated classes for C++.\n     *     @type string $objc_class_prefix\n     *           Sets the objective c class prefix which is prepended to all objective c\n     *           generated classes from this .proto. There is no default.\n     *     @type string $csharp_namespace\n     *           Namespace for generated classes; defaults to the package.\n     *     @type string $swift_prefix\n     *           By default Swift generators will take the proto package and CamelCase it\n     *           replacing '.' with underscore and use that to prefix the types/symbols\n     *           defined. When this options is provided, they will use this value instead\n     *           to prefix the types/symbols defined.\n     *     @type string $php_class_prefix\n     *           Sets the php class prefix which is prepended to all php generated classes\n     *           from this .proto. Default is empty.\n     *     @type string $php_namespace\n     *           Use this option to change the namespace of php generated classes. Default\n     *           is empty. When this option is empty, the package name will be used for\n     *           determining the namespace.\n     *     @type string $php_metadata_namespace\n     *           Use this option to change the namespace of php generated metadata classes.\n     *           Default is empty. When this option is empty, the proto file name will be\n     *           used for determining the namespace.\n     *     @type string $ruby_package\n     *           Use this option to change the package of ruby generated classes. Default\n     *           is empty. When this option is not set, the package name will be used for\n     *           determining the ruby package.\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here.\n     *           See the documentation for the \"Options\" section above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Sets the Java package where classes generated from this .proto will be\n     * placed.  By default, the proto package is used, but this is often\n     * inappropriate because proto packages do not normally start with backwards\n     * domain names.\n     *\n     * Generated from protobuf field <code>optional string java_package = 1;</code>\n     * @return string\n     */\n    public function getJavaPackage()\n    {\n        return isset($this->java_package) ? $this->java_package : '';\n    }\n\n    public function hasJavaPackage()\n    {\n        return isset($this->java_package);\n    }\n\n    public function clearJavaPackage()\n    {\n        unset($this->java_package);\n    }\n\n    /**\n     * Sets the Java package where classes generated from this .proto will be\n     * placed.  By default, the proto package is used, but this is often\n     * inappropriate because proto packages do not normally start with backwards\n     * domain names.\n     *\n     * Generated from protobuf field <code>optional string java_package = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setJavaPackage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->java_package = $var;\n\n        return $this;\n    }\n\n    /**\n     * Controls the name of the wrapper Java class generated for the .proto file.\n     * That class will always contain the .proto file's getDescriptor() method as\n     * well as any top-level extensions defined in the .proto file.\n     * If java_multiple_files is disabled, then all the other classes from the\n     * .proto file will be nested inside the single wrapper outer class.\n     *\n     * Generated from protobuf field <code>optional string java_outer_classname = 8;</code>\n     * @return string\n     */\n    public function getJavaOuterClassname()\n    {\n        return isset($this->java_outer_classname) ? $this->java_outer_classname : '';\n    }\n\n    public function hasJavaOuterClassname()\n    {\n        return isset($this->java_outer_classname);\n    }\n\n    public function clearJavaOuterClassname()\n    {\n        unset($this->java_outer_classname);\n    }\n\n    /**\n     * Controls the name of the wrapper Java class generated for the .proto file.\n     * That class will always contain the .proto file's getDescriptor() method as\n     * well as any top-level extensions defined in the .proto file.\n     * If java_multiple_files is disabled, then all the other classes from the\n     * .proto file will be nested inside the single wrapper outer class.\n     *\n     * Generated from protobuf field <code>optional string java_outer_classname = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setJavaOuterClassname($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->java_outer_classname = $var;\n\n        return $this;\n    }\n\n    /**\n     * If enabled, then the Java code generator will generate a separate .java\n     * file for each top-level message, enum, and service defined in the .proto\n     * file.  Thus, these types will *not* be nested inside the wrapper class\n     * named by java_outer_classname.  However, the wrapper class will still be\n     * generated to contain the file's getDescriptor() method as well as any\n     * top-level extensions defined in the file.\n     *\n     * Generated from protobuf field <code>optional bool java_multiple_files = 10 [default = false];</code>\n     * @return bool\n     */\n    public function getJavaMultipleFiles()\n    {\n        return isset($this->java_multiple_files) ? $this->java_multiple_files : false;\n    }\n\n    public function hasJavaMultipleFiles()\n    {\n        return isset($this->java_multiple_files);\n    }\n\n    public function clearJavaMultipleFiles()\n    {\n        unset($this->java_multiple_files);\n    }\n\n    /**\n     * If enabled, then the Java code generator will generate a separate .java\n     * file for each top-level message, enum, and service defined in the .proto\n     * file.  Thus, these types will *not* be nested inside the wrapper class\n     * named by java_outer_classname.  However, the wrapper class will still be\n     * generated to contain the file's getDescriptor() method as well as any\n     * top-level extensions defined in the file.\n     *\n     * Generated from protobuf field <code>optional bool java_multiple_files = 10 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setJavaMultipleFiles($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->java_multiple_files = $var;\n\n        return $this;\n    }\n\n    /**\n     * This option does nothing.\n     *\n     * Generated from protobuf field <code>optional bool java_generate_equals_and_hash = 20 [deprecated = true];</code>\n     * @return bool\n     * @deprecated\n     */\n    public function getJavaGenerateEqualsAndHash()\n    {\n        if (isset($this->java_generate_equals_and_hash)) {\n            @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->java_generate_equals_and_hash) ? $this->java_generate_equals_and_hash : false;\n    }\n\n    public function hasJavaGenerateEqualsAndHash()\n    {\n        if (isset($this->java_generate_equals_and_hash)) {\n            @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->java_generate_equals_and_hash);\n    }\n\n    public function clearJavaGenerateEqualsAndHash()\n    {\n        @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED);\n        unset($this->java_generate_equals_and_hash);\n    }\n\n    /**\n     * This option does nothing.\n     *\n     * Generated from protobuf field <code>optional bool java_generate_equals_and_hash = 20 [deprecated = true];</code>\n     * @param bool $var\n     * @return $this\n     * @deprecated\n     */\n    public function setJavaGenerateEqualsAndHash($var)\n    {\n        @trigger_error('java_generate_equals_and_hash is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkBool($var);\n        $this->java_generate_equals_and_hash = $var;\n\n        return $this;\n    }\n\n    /**\n     * A proto2 file can set this to true to opt in to UTF-8 checking for Java,\n     * which will throw an exception if invalid UTF-8 is parsed from the wire or\n     * assigned to a string field.\n     * TODO: clarify exactly what kinds of field types this option\n     * applies to, and update these docs accordingly.\n     * Proto3 files already perform these checks. Setting the option explicitly to\n     * false has no effect: it cannot be used to opt proto3 files out of UTF-8\n     * checks.\n     *\n     * Generated from protobuf field <code>optional bool java_string_check_utf8 = 27 [default = false];</code>\n     * @return bool\n     */\n    public function getJavaStringCheckUtf8()\n    {\n        return isset($this->java_string_check_utf8) ? $this->java_string_check_utf8 : false;\n    }\n\n    public function hasJavaStringCheckUtf8()\n    {\n        return isset($this->java_string_check_utf8);\n    }\n\n    public function clearJavaStringCheckUtf8()\n    {\n        unset($this->java_string_check_utf8);\n    }\n\n    /**\n     * A proto2 file can set this to true to opt in to UTF-8 checking for Java,\n     * which will throw an exception if invalid UTF-8 is parsed from the wire or\n     * assigned to a string field.\n     * TODO: clarify exactly what kinds of field types this option\n     * applies to, and update these docs accordingly.\n     * Proto3 files already perform these checks. Setting the option explicitly to\n     * false has no effect: it cannot be used to opt proto3 files out of UTF-8\n     * checks.\n     *\n     * Generated from protobuf field <code>optional bool java_string_check_utf8 = 27 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setJavaStringCheckUtf8($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->java_string_check_utf8 = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>\n     * @return int\n     */\n    public function getOptimizeFor()\n    {\n        return isset($this->optimize_for) ? $this->optimize_for : 0;\n    }\n\n    public function hasOptimizeFor()\n    {\n        return isset($this->optimize_for);\n    }\n\n    public function clearOptimizeFor()\n    {\n        unset($this->optimize_for);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setOptimizeFor($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\FileOptions\\OptimizeMode::class);\n        $this->optimize_for = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the Go package where structs generated from this .proto will be\n     * placed. If omitted, the Go package will be derived from the following:\n     *   - The basename of the package import path, if provided.\n     *   - Otherwise, the package statement in the .proto file, if present.\n     *   - Otherwise, the basename of the .proto file, without extension.\n     *\n     * Generated from protobuf field <code>optional string go_package = 11;</code>\n     * @return string\n     */\n    public function getGoPackage()\n    {\n        return isset($this->go_package) ? $this->go_package : '';\n    }\n\n    public function hasGoPackage()\n    {\n        return isset($this->go_package);\n    }\n\n    public function clearGoPackage()\n    {\n        unset($this->go_package);\n    }\n\n    /**\n     * Sets the Go package where structs generated from this .proto will be\n     * placed. If omitted, the Go package will be derived from the following:\n     *   - The basename of the package import path, if provided.\n     *   - Otherwise, the package statement in the .proto file, if present.\n     *   - Otherwise, the basename of the .proto file, without extension.\n     *\n     * Generated from protobuf field <code>optional string go_package = 11;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setGoPackage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->go_package = $var;\n\n        return $this;\n    }\n\n    /**\n     * Should generic services be generated in each language?  \"Generic\" services\n     * are not specific to any particular RPC system.  They are generated by the\n     * main code generators in each language (without additional plugins).\n     * Generic services were the only kind of service generation supported by\n     * early versions of google.protobuf.\n     * Generic services are now considered deprecated in favor of using plugins\n     * that generate code specific to your particular RPC system.  Therefore,\n     * these default to false.  Old code which depends on generic services should\n     * explicitly set them to true.\n     *\n     * Generated from protobuf field <code>optional bool cc_generic_services = 16 [default = false];</code>\n     * @return bool\n     */\n    public function getCcGenericServices()\n    {\n        return isset($this->cc_generic_services) ? $this->cc_generic_services : false;\n    }\n\n    public function hasCcGenericServices()\n    {\n        return isset($this->cc_generic_services);\n    }\n\n    public function clearCcGenericServices()\n    {\n        unset($this->cc_generic_services);\n    }\n\n    /**\n     * Should generic services be generated in each language?  \"Generic\" services\n     * are not specific to any particular RPC system.  They are generated by the\n     * main code generators in each language (without additional plugins).\n     * Generic services were the only kind of service generation supported by\n     * early versions of google.protobuf.\n     * Generic services are now considered deprecated in favor of using plugins\n     * that generate code specific to your particular RPC system.  Therefore,\n     * these default to false.  Old code which depends on generic services should\n     * explicitly set them to true.\n     *\n     * Generated from protobuf field <code>optional bool cc_generic_services = 16 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setCcGenericServices($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->cc_generic_services = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional bool java_generic_services = 17 [default = false];</code>\n     * @return bool\n     */\n    public function getJavaGenericServices()\n    {\n        return isset($this->java_generic_services) ? $this->java_generic_services : false;\n    }\n\n    public function hasJavaGenericServices()\n    {\n        return isset($this->java_generic_services);\n    }\n\n    public function clearJavaGenericServices()\n    {\n        unset($this->java_generic_services);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional bool java_generic_services = 17 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setJavaGenericServices($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->java_generic_services = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional bool py_generic_services = 18 [default = false];</code>\n     * @return bool\n     */\n    public function getPyGenericServices()\n    {\n        return isset($this->py_generic_services) ? $this->py_generic_services : false;\n    }\n\n    public function hasPyGenericServices()\n    {\n        return isset($this->py_generic_services);\n    }\n\n    public function clearPyGenericServices()\n    {\n        unset($this->py_generic_services);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional bool py_generic_services = 18 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setPyGenericServices($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->py_generic_services = $var;\n\n        return $this;\n    }\n\n    /**\n     * Is this file deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for everything in the file, or it will be completely ignored; in the very\n     * least, this is a formalization for deprecating files.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 23 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this file deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for everything in the file, or it will be completely ignored; in the very\n     * least, this is a formalization for deprecating files.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 23 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * Enables the use of arenas for the proto messages in this file. This applies\n     * only to generated classes for C++.\n     *\n     * Generated from protobuf field <code>optional bool cc_enable_arenas = 31 [default = true];</code>\n     * @return bool\n     */\n    public function getCcEnableArenas()\n    {\n        return isset($this->cc_enable_arenas) ? $this->cc_enable_arenas : false;\n    }\n\n    public function hasCcEnableArenas()\n    {\n        return isset($this->cc_enable_arenas);\n    }\n\n    public function clearCcEnableArenas()\n    {\n        unset($this->cc_enable_arenas);\n    }\n\n    /**\n     * Enables the use of arenas for the proto messages in this file. This applies\n     * only to generated classes for C++.\n     *\n     * Generated from protobuf field <code>optional bool cc_enable_arenas = 31 [default = true];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setCcEnableArenas($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->cc_enable_arenas = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the objective c class prefix which is prepended to all objective c\n     * generated classes from this .proto. There is no default.\n     *\n     * Generated from protobuf field <code>optional string objc_class_prefix = 36;</code>\n     * @return string\n     */\n    public function getObjcClassPrefix()\n    {\n        return isset($this->objc_class_prefix) ? $this->objc_class_prefix : '';\n    }\n\n    public function hasObjcClassPrefix()\n    {\n        return isset($this->objc_class_prefix);\n    }\n\n    public function clearObjcClassPrefix()\n    {\n        unset($this->objc_class_prefix);\n    }\n\n    /**\n     * Sets the objective c class prefix which is prepended to all objective c\n     * generated classes from this .proto. There is no default.\n     *\n     * Generated from protobuf field <code>optional string objc_class_prefix = 36;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setObjcClassPrefix($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->objc_class_prefix = $var;\n\n        return $this;\n    }\n\n    /**\n     * Namespace for generated classes; defaults to the package.\n     *\n     * Generated from protobuf field <code>optional string csharp_namespace = 37;</code>\n     * @return string\n     */\n    public function getCsharpNamespace()\n    {\n        return isset($this->csharp_namespace) ? $this->csharp_namespace : '';\n    }\n\n    public function hasCsharpNamespace()\n    {\n        return isset($this->csharp_namespace);\n    }\n\n    public function clearCsharpNamespace()\n    {\n        unset($this->csharp_namespace);\n    }\n\n    /**\n     * Namespace for generated classes; defaults to the package.\n     *\n     * Generated from protobuf field <code>optional string csharp_namespace = 37;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setCsharpNamespace($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->csharp_namespace = $var;\n\n        return $this;\n    }\n\n    /**\n     * By default Swift generators will take the proto package and CamelCase it\n     * replacing '.' with underscore and use that to prefix the types/symbols\n     * defined. When this options is provided, they will use this value instead\n     * to prefix the types/symbols defined.\n     *\n     * Generated from protobuf field <code>optional string swift_prefix = 39;</code>\n     * @return string\n     */\n    public function getSwiftPrefix()\n    {\n        return isset($this->swift_prefix) ? $this->swift_prefix : '';\n    }\n\n    public function hasSwiftPrefix()\n    {\n        return isset($this->swift_prefix);\n    }\n\n    public function clearSwiftPrefix()\n    {\n        unset($this->swift_prefix);\n    }\n\n    /**\n     * By default Swift generators will take the proto package and CamelCase it\n     * replacing '.' with underscore and use that to prefix the types/symbols\n     * defined. When this options is provided, they will use this value instead\n     * to prefix the types/symbols defined.\n     *\n     * Generated from protobuf field <code>optional string swift_prefix = 39;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSwiftPrefix($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->swift_prefix = $var;\n\n        return $this;\n    }\n\n    /**\n     * Sets the php class prefix which is prepended to all php generated classes\n     * from this .proto. Default is empty.\n     *\n     * Generated from protobuf field <code>optional string php_class_prefix = 40;</code>\n     * @return string\n     */\n    public function getPhpClassPrefix()\n    {\n        return isset($this->php_class_prefix) ? $this->php_class_prefix : '';\n    }\n\n    public function hasPhpClassPrefix()\n    {\n        return isset($this->php_class_prefix);\n    }\n\n    public function clearPhpClassPrefix()\n    {\n        unset($this->php_class_prefix);\n    }\n\n    /**\n     * Sets the php class prefix which is prepended to all php generated classes\n     * from this .proto. Default is empty.\n     *\n     * Generated from protobuf field <code>optional string php_class_prefix = 40;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPhpClassPrefix($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->php_class_prefix = $var;\n\n        return $this;\n    }\n\n    /**\n     * Use this option to change the namespace of php generated classes. Default\n     * is empty. When this option is empty, the package name will be used for\n     * determining the namespace.\n     *\n     * Generated from protobuf field <code>optional string php_namespace = 41;</code>\n     * @return string\n     */\n    public function getPhpNamespace()\n    {\n        return isset($this->php_namespace) ? $this->php_namespace : '';\n    }\n\n    public function hasPhpNamespace()\n    {\n        return isset($this->php_namespace);\n    }\n\n    public function clearPhpNamespace()\n    {\n        unset($this->php_namespace);\n    }\n\n    /**\n     * Use this option to change the namespace of php generated classes. Default\n     * is empty. When this option is empty, the package name will be used for\n     * determining the namespace.\n     *\n     * Generated from protobuf field <code>optional string php_namespace = 41;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPhpNamespace($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->php_namespace = $var;\n\n        return $this;\n    }\n\n    /**\n     * Use this option to change the namespace of php generated metadata classes.\n     * Default is empty. When this option is empty, the proto file name will be\n     * used for determining the namespace.\n     *\n     * Generated from protobuf field <code>optional string php_metadata_namespace = 44;</code>\n     * @return string\n     */\n    public function getPhpMetadataNamespace()\n    {\n        return isset($this->php_metadata_namespace) ? $this->php_metadata_namespace : '';\n    }\n\n    public function hasPhpMetadataNamespace()\n    {\n        return isset($this->php_metadata_namespace);\n    }\n\n    public function clearPhpMetadataNamespace()\n    {\n        unset($this->php_metadata_namespace);\n    }\n\n    /**\n     * Use this option to change the namespace of php generated metadata classes.\n     * Default is empty. When this option is empty, the proto file name will be\n     * used for determining the namespace.\n     *\n     * Generated from protobuf field <code>optional string php_metadata_namespace = 44;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setPhpMetadataNamespace($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->php_metadata_namespace = $var;\n\n        return $this;\n    }\n\n    /**\n     * Use this option to change the package of ruby generated classes. Default\n     * is empty. When this option is not set, the package name will be used for\n     * determining the ruby package.\n     *\n     * Generated from protobuf field <code>optional string ruby_package = 45;</code>\n     * @return string\n     */\n    public function getRubyPackage()\n    {\n        return isset($this->ruby_package) ? $this->ruby_package : '';\n    }\n\n    public function hasRubyPackage()\n    {\n        return isset($this->ruby_package);\n    }\n\n    public function clearRubyPackage()\n    {\n        unset($this->ruby_package);\n    }\n\n    /**\n     * Use this option to change the package of ruby generated classes. Default\n     * is empty. When this option is not set, the package name will be used for\n     * determining the ruby package.\n     *\n     * Generated from protobuf field <code>optional string ruby_package = 45;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRubyPackage($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->ruby_package = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 50;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 50;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here.\n     * See the documentation for the \"Options\" section above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here.\n     * See the documentation for the \"Options\" section above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBDecodeException.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass GPBDecodeException extends \\Exception\n{\n    public function __construct(\n        $message,\n        $code = 0,\n        ?\\Exception $previous = null)\n    {\n        parent::__construct(\n            \"Error occurred during parsing: \" . $message,\n            $code,\n            $previous);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBJsonWire.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\PrintOptions;\n\nclass GPBJsonWire\n{\n\n    public static function serializeFieldToStream(\n        $value,\n        $field,\n        &$output, $has_field_name = true)\n    {\n        if ($has_field_name) {\n            $output->writeRaw(\"\\\"\", 1);\n            $field_name = GPBJsonWire::formatFieldName($field, $output->getOptions());\n            $output->writeRaw($field_name, strlen($field_name));\n            $output->writeRaw(\"\\\":\", 2);\n        }\n        return static::serializeFieldValueToStream(\n            $value,\n            $field,\n            $output,\n            !$has_field_name);\n    }\n\n    public static function serializeFieldValueToStream(\n        $values,\n        $field,\n        &$output,\n        $is_well_known = false)\n    {\n        if ($field->isMap()) {\n            $output->writeRaw(\"{\", 1);\n            $first = true;\n            $map_entry = $field->getMessageType();\n            $key_field = $map_entry->getFieldByNumber(1);\n            $value_field = $map_entry->getFieldByNumber(2);\n\n            switch ($key_field->getType()) {\n            case GPBType::STRING:\n            case GPBType::SFIXED64:\n            case GPBType::INT64:\n            case GPBType::SINT64:\n            case GPBType::FIXED64:\n            case GPBType::UINT64:\n                $additional_quote = false;\n                break;\n            default:\n                $additional_quote = true;\n            }\n\n            foreach ($values as $key => $value) {\n                if ($first) {\n                    $first = false;\n                } else {\n                    $output->writeRaw(\",\", 1);\n                }\n                if ($additional_quote) {\n                    $output->writeRaw(\"\\\"\", 1);\n                }\n                if (!static::serializeSingularFieldValueToStream(\n                    $key,\n                    $key_field,\n                    $output,\n                    $is_well_known)) {\n                    return false;\n                }\n                if ($additional_quote) {\n                    $output->writeRaw(\"\\\"\", 1);\n                }\n                $output->writeRaw(\":\", 1);\n                if (!static::serializeSingularFieldValueToStream(\n                    $value,\n                    $value_field,\n                    $output,\n                    $is_well_known)) {\n                    return false;\n                }\n            }\n            $output->writeRaw(\"}\", 1);\n            return true;\n        } elseif ($field->isRepeated()) {\n            $output->writeRaw(\"[\", 1);\n            $first = true;\n            foreach ($values as $value) {\n                if ($first) {\n                    $first = false;\n                } else {\n                    $output->writeRaw(\",\", 1);\n                }\n                if (!static::serializeSingularFieldValueToStream(\n                    $value,\n                    $field,\n                    $output,\n                    $is_well_known)) {\n                    return false;\n                }\n            }\n            $output->writeRaw(\"]\", 1);\n            return true;\n        } else {\n            return static::serializeSingularFieldValueToStream(\n                $values,\n                $field,\n                $output,\n                $is_well_known);\n        }\n    }\n\n    private static function serializeSingularFieldValueToStream(\n        $value,\n        $field,\n        &$output, $is_well_known = false)\n    {\n        switch ($field->getType()) {\n            case GPBType::SFIXED32:\n            case GPBType::SINT32:\n            case GPBType::INT32:\n                $str_value = strval($value);\n                $output->writeRaw($str_value, strlen($str_value));\n                break;\n            case GPBType::FIXED32:\n            case GPBType::UINT32:\n                if ($value < 0) {\n                    $value = bcadd($value, \"4294967296\");\n                }\n                $str_value = strval($value);\n                $output->writeRaw($str_value, strlen($str_value));\n                break;\n            case GPBType::FIXED64:\n            case GPBType::UINT64:\n                if ($value < 0) {\n                    $value = bcadd($value, \"18446744073709551616\");\n                }\n                // Intentional fall through.\n            case GPBType::SFIXED64:\n            case GPBType::INT64:\n            case GPBType::SINT64:\n                $output->writeRaw(\"\\\"\", 1);\n                $str_value = strval($value);\n                $output->writeRaw($str_value, strlen($str_value));\n                $output->writeRaw(\"\\\"\", 1);\n                break;\n            case GPBType::FLOAT:\n                if (is_nan($value)) {\n                    $str_value = \"\\\"NaN\\\"\";\n                } elseif ($value === INF) {\n                    $str_value = \"\\\"Infinity\\\"\";\n                } elseif ($value === -INF) {\n                    $str_value = \"\\\"-Infinity\\\"\";\n                } else {\n                    $str_value = sprintf(\"%.8g\", $value);\n                }\n                $output->writeRaw($str_value, strlen($str_value));\n                break;\n            case GPBType::DOUBLE:\n                if (is_nan($value)) {\n                    $str_value = \"\\\"NaN\\\"\";\n                } elseif ($value === INF) {\n                    $str_value = \"\\\"Infinity\\\"\";\n                } elseif ($value === -INF) {\n                    $str_value = \"\\\"-Infinity\\\"\";\n                } else {\n                    $str_value = sprintf(\"%.17g\", $value);\n                }\n                $output->writeRaw($str_value, strlen($str_value));\n                break;\n            case GPBType::ENUM:\n                $enum_desc = $field->getEnumType();\n                if ($enum_desc->getClass() === \"Google\\Protobuf\\NullValue\") {\n                    $output->writeRaw(\"null\", 4);\n                    break;\n                }\n                if ($output->getOptions() & PrintOptions::ALWAYS_PRINT_ENUMS_AS_INTS) {\n                    $str_value = strval($value);\n                    $output->writeRaw($str_value, strlen($str_value));\n                    break;\n                }\n                $enum_value_desc = $enum_desc->getValueByNumber($value);\n                if (!is_null($enum_value_desc)) {\n                    $str_value = $enum_value_desc->getName();\n                    $output->writeRaw(\"\\\"\", 1);\n                    $output->writeRaw($str_value, strlen($str_value));\n                    $output->writeRaw(\"\\\"\", 1);\n                } else {\n                    $str_value = strval($value);\n                    $output->writeRaw($str_value, strlen($str_value));\n                }\n                break;\n            case GPBType::BOOL:\n                if ($value) {\n                    $output->writeRaw(\"true\", 4);\n                } else {\n                    $output->writeRaw(\"false\", 5);\n                }\n                break;\n            case GPBType::BYTES:\n                $bytes_value = base64_encode($value);\n                $output->writeRaw(\"\\\"\", 1);\n                $output->writeRaw($bytes_value, strlen($bytes_value));\n                $output->writeRaw(\"\\\"\", 1);\n                break;\n            case GPBType::STRING:\n                $value = json_encode($value, JSON_UNESCAPED_UNICODE);\n                $output->writeRaw($value, strlen($value));\n                break;\n            //    case GPBType::GROUP:\n            //      echo \"GROUP\\xA\";\n            //      trigger_error(\"Not implemented.\", E_ERROR);\n            //      break;\n            case GPBType::MESSAGE:\n                $value->serializeToJsonStream($output);\n                break;\n            default:\n                user_error(\"Unsupported type.\");\n                return false;\n        }\n        return true;\n    }\n\n    private static function formatFieldName($field, $options)\n    {\n        if ($options & PrintOptions::PRESERVE_PROTO_FIELD_NAMES) {\n            return $field->getName();\n        }\n        return $field->getJsonName();\n    }\n\n    // Used for escaping control chars in strings.\n    private static $k_control_char_limit = 0x20;\n\n    private static function jsonNiceEscape($c)\n    {\n      switch ($c) {\n          case '\"':  return \"\\\\\\\"\";\n          case '\\\\': return \"\\\\\\\\\";\n          case '/': return \"\\\\/\";\n          case '\\b': return \"\\\\b\";\n          case '\\f': return \"\\\\f\";\n          case '\\n': return \"\\\\n\";\n          case '\\r': return \"\\\\r\";\n          case '\\t': return \"\\\\t\";\n          default:   return NULL;\n      }\n    }\n\n    private static function isJsonEscaped($c)\n    {\n        // See RFC 4627.\n        return $c < chr($k_control_char_limit) || $c === \"\\\"\" || $c === \"\\\\\";\n    }\n\n    public static function escapedJson($value)\n    {\n        $escaped_value = \"\";\n        $unescaped_run = \"\";\n        for ($i = 0; $i < strlen($value); $i++) {\n            $c = $value[$i];\n            // Handle escaping.\n            if (static::isJsonEscaped($c)) {\n                // Use a \"nice\" escape, like \\n, if one exists for this\n                // character.\n                $escape = static::jsonNiceEscape($c);\n                if (is_null($escape)) {\n                    $escape = \"\\\\u00\" . bin2hex($c);\n                }\n                if ($unescaped_run !== \"\") {\n                    $escaped_value .= $unescaped_run;\n                    $unescaped_run = \"\";\n                }\n                $escaped_value .= $escape;\n            } else {\n              if ($unescaped_run === \"\") {\n                $unescaped_run .= $c;\n              }\n            }\n        }\n        $escaped_value .= $unescaped_run;\n        return $escaped_value;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBLabel.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass GPBLabel\n{\n    const OPTIONAL = 1;\n    const REQUIRED = 2;\n    const REPEATED = 3;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBType.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass GPBType\n{\n    const DOUBLE   =  1;\n    const FLOAT    =  2;\n    const INT64    =  3;\n    const UINT64   =  4;\n    const INT32    =  5;\n    const FIXED64  =  6;\n    const FIXED32  =  7;\n    const BOOL     =  8;\n    const STRING   =  9;\n    const GROUP    = 10;\n    const MESSAGE  = 11;\n    const BYTES    = 12;\n    const UINT32   = 13;\n    const ENUM     = 14;\n    const SFIXED32 = 15;\n    const SFIXED64 = 16;\n    const SINT32   = 17;\n    const SINT64   = 18;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBUtil.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Duration;\nuse Google\\Protobuf\\FieldMask;\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\MapField;\nuse Google\\Protobuf\\RepeatedField;\nuse function bccomp;\n\nfunction camel2underscore($input) {\n    preg_match_all(\n        '!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!',\n        $input,\n        $matches);\n    $ret = $matches[0];\n    foreach ($ret as &$match) {\n        $match = $match == strtoupper($match) ? strtolower($match) : lcfirst($match);\n    }\n    return implode('_', $ret);\n}\n\nclass GPBUtil\n{\n    const NANOS_PER_MILLISECOND = 1000000;\n    const NANOS_PER_MICROSECOND = 1000;\n    const TYPE_URL_PREFIX = 'type.googleapis.com/';\n\n    public static function divideInt64ToInt32($value, &$high, &$low, $trim = false)\n    {\n        $isNeg = (bccomp($value, 0) < 0);\n        if ($isNeg) {\n            $value = bcsub(0, $value);\n        }\n\n        $high = bcdiv($value, 4294967296);\n        $low = bcmod($value, 4294967296);\n        if (bccomp($high, 2147483647) > 0) {\n            $high = (int) bcsub($high, 4294967296);\n        } else {\n            $high = (int) $high;\n        }\n        if (bccomp($low, 2147483647) > 0) {\n            $low = (int) bcsub($low, 4294967296);\n        } else {\n            $low = (int) $low;\n        }\n\n        if ($isNeg) {\n            $high = ~$high;\n            $low = ~$low;\n            $low++;\n            if (!$low) {\n                $high = (int)($high + 1);\n            }\n        }\n\n        if ($trim) {\n            $high = 0;\n        }\n    }\n\n    public static function checkString(&$var, $check_utf8)\n    {\n        if (is_array($var) || is_object($var)) {\n            throw new \\InvalidArgumentException(\"Expect string.\");\n        }\n        if (!is_string($var)) {\n            $var = strval($var);\n        }\n        if ($check_utf8 && !preg_match('//u', $var)) {\n            throw new \\Exception(\"Expect utf-8 encoding.\");\n        }\n    }\n\n    public static function checkEnum(&$var)\n    {\n      static::checkInt32($var);\n    }\n\n    public static function checkInt32(&$var)\n    {\n        if (is_numeric($var)) {\n            $var = intval($var);\n        } else {\n            throw new \\Exception(\"Expect integer.\");\n        }\n    }\n\n    public static function checkUint32(&$var)\n    {\n        if (is_numeric($var)) {\n            if (PHP_INT_SIZE === 8) {\n                $var = intval($var);\n                $var |= ((-(($var >> 31) & 0x1)) & ~0xFFFFFFFF);\n            } else {\n                if (bccomp($var, 0x7FFFFFFF) > 0) {\n                    $var = bcsub($var, \"4294967296\");\n                }\n                $var = (int) $var;\n            }\n        } else {\n            throw new \\Exception(\"Expect integer.\");\n        }\n    }\n\n    public static function checkInt64(&$var)\n    {\n        if (is_numeric($var)) {\n            if (PHP_INT_SIZE == 8) {\n                $var = intval($var);\n            } else {\n                if (is_float($var) ||\n                    is_integer($var) ||\n                    (is_string($var) &&\n                         bccomp($var, \"9223372036854774784\") < 0)) {\n                    $var = number_format($var, 0, \".\", \"\");\n                }\n            }\n        } else {\n            throw new \\Exception(\"Expect integer.\");\n        }\n    }\n\n    public static function checkUint64(&$var)\n    {\n        if (is_numeric($var)) {\n            if (PHP_INT_SIZE == 8) {\n                $var = intval($var);\n            } else {\n                $var = number_format($var, 0, \".\", \"\");\n            }\n        } else {\n            throw new \\Exception(\"Expect integer.\");\n        }\n    }\n\n    public static function checkFloat(&$var)\n    {\n        if (is_float($var) || is_numeric($var)) {\n            $var = unpack(\"f\", pack(\"f\", $var))[1];\n        } else {\n            throw new \\Exception(\"Expect float.\");\n        }\n    }\n\n    public static function checkDouble(&$var)\n    {\n        if (is_float($var) || is_numeric($var)) {\n            $var = floatval($var);\n        } else {\n            throw new \\Exception(\"Expect float.\");\n        }\n    }\n\n    public static function checkBool(&$var)\n    {\n        if (is_array($var) || is_object($var)) {\n            throw new \\Exception(\"Expect boolean.\");\n        }\n        $var = boolval($var);\n    }\n\n    public static function checkMessage(&$var, $klass, $newClass = null)\n    {\n        if (!$var instanceof $klass && !is_null($var)) {\n            throw new \\Exception(\"Expect $klass.\");\n        }\n    }\n\n    public static function checkRepeatedField(&$var, $type, $klass = null)\n    {\n        if (!$var instanceof RepeatedField && !is_array($var)) {\n            throw new \\Exception(\"Expect array.\");\n        }\n        if (is_array($var)) {\n            $tmp = new RepeatedField($type, $klass);\n            foreach ($var as $value) {\n                $tmp[] = $value;\n            }\n            return $tmp;\n        } else {\n            if ($var->getType() != $type) {\n                throw new \\Exception(\n                    \"Expect repeated field of different type.\");\n            }\n            if ($var->getType() === GPBType::MESSAGE &&\n                $var->getClass() !== $klass &&\n                $var->getLegacyClass() !== $klass) {\n                throw new \\Exception(\n                    \"Expect repeated field of \" . $klass . \".\");\n            }\n            return $var;\n        }\n    }\n\n    public static function checkMapField(&$var, $key_type, $value_type, $klass = null)\n    {\n        if (!$var instanceof MapField && !is_array($var)) {\n            throw new \\Exception(\"Expect dict.\");\n        }\n        if (is_array($var)) {\n            $tmp = new MapField($key_type, $value_type, $klass);\n            foreach ($var as $key => $value) {\n                $tmp[$key] = $value;\n            }\n            return $tmp;\n        } else {\n            if ($var->getKeyType() != $key_type) {\n                throw new \\Exception(\"Expect map field of key type.\");\n            }\n            if ($var->getValueType() != $value_type) {\n                throw new \\Exception(\"Expect map field of value type.\");\n            }\n            if ($var->getValueType() === GPBType::MESSAGE &&\n                $var->getValueClass() !== $klass &&\n                $var->getLegacyValueClass() !== $klass) {\n                throw new \\Exception(\n                    \"Expect map field of \" . $klass . \".\");\n            }\n            return $var;\n        }\n    }\n\n    public static function Int64($value)\n    {\n        return new Int64($value);\n    }\n\n    public static function Uint64($value)\n    {\n        return new Uint64($value);\n    }\n\n    public static function getClassNamePrefix(\n        $classname,\n        $file_proto)\n    {\n        $option = $file_proto->getOptions();\n        $prefix = is_null($option) ? \"\" : $option->getPhpClassPrefix();\n        if ($prefix !== \"\") {\n            return $prefix;\n        }\n\n        $reserved_words = array(\n            \"abstract\"=>0, \"and\"=>0, \"array\"=>0, \"as\"=>0, \"break\"=>0,\n            \"callable\"=>0, \"case\"=>0, \"catch\"=>0, \"class\"=>0, \"clone\"=>0,\n            \"const\"=>0, \"continue\"=>0, \"declare\"=>0, \"default\"=>0, \"die\"=>0,\n            \"do\"=>0, \"echo\"=>0, \"else\"=>0, \"elseif\"=>0, \"empty\"=>0,\n            \"enddeclare\"=>0, \"endfor\"=>0, \"endforeach\"=>0, \"endif\"=>0,\n            \"endswitch\"=>0, \"endwhile\"=>0, \"eval\"=>0, \"exit\"=>0, \"extends\"=>0,\n            \"final\"=>0, \"finally\"=>0, \"fn\"=>0, \"for\"=>0, \"foreach\"=>0,\n            \"function\"=>0, \"global\"=>0, \"goto\"=>0, \"if\"=>0, \"implements\"=>0,\n            \"include\"=>0, \"include_once\"=>0, \"instanceof\"=>0, \"insteadof\"=>0,\n            \"interface\"=>0, \"isset\"=>0, \"list\"=>0, \"match\"=>0, \"namespace\"=>0,\n            \"new\"=>0, \"or\"=>0, \"parent\"=>0, \"print\"=>0, \"private\"=>0,\n            \"protected\"=>0,\"public\"=>0, \"readonly\" => 0,\"require\"=>0,\n            \"require_once\"=>0,\"return\"=>0, \"self\"=>0, \"static\"=>0, \"switch\"=>0,\n            \"throw\"=>0,\"trait\"=>0, \"try\"=>0,\"unset\"=>0, \"use\"=>0, \"var\"=>0,\n            \"while\"=>0,\"xor\"=>0, \"yield\"=>0, \"int\"=>0, \"float\"=>0, \"bool\"=>0,\n            \"string\"=>0,\"true\"=>0, \"false\"=>0, \"null\"=>0, \"void\"=>0,\n            \"iterable\"=>0\n        );\n\n        if (array_key_exists(strtolower($classname), $reserved_words)) {\n            if ($file_proto->getPackage() === \"google.protobuf\") {\n                return \"GPB\";\n            } else {\n                return \"PB\";\n            }\n        }\n\n        return \"\";\n    }\n\n    private static function getPreviouslyUnreservedClassNamePrefix(\n        $classname,\n        $file_proto)\n    {\n        $previously_unreserved_words = array(\n            \"readonly\"=>0\n        );\n\n        if (array_key_exists(strtolower($classname), $previously_unreserved_words)) {\n            $option = $file_proto->getOptions();\n            $prefix = is_null($option) ? \"\" : $option->getPhpClassPrefix();\n            if ($prefix !== \"\") {\n                return $prefix;\n            }\n\n            return \"\";\n        }\n\n        return self::getClassNamePrefix($classname, $file_proto);\n    }\n\n    public static function getLegacyClassNameWithoutPackage(\n        $name,\n        $file_proto)\n    {\n        $classname = implode('_', explode('.', $name));\n        return static::getClassNamePrefix($classname, $file_proto) . $classname;\n    }\n\n    public static function getClassNameWithoutPackage(\n        $name,\n        $file_proto)\n    {\n        $parts = explode('.', $name);\n        foreach ($parts as $i => $part) {\n            $parts[$i] = static::getClassNamePrefix($parts[$i], $file_proto) . $parts[$i];\n        }\n        return implode('\\\\', $parts);\n    }\n\n    private static function getPreviouslyUnreservedClassNameWithoutPackage(\n        $name,\n        $file_proto)\n    {\n        $parts = explode('.', $name);\n        foreach ($parts as $i => $part) {\n            $parts[$i] = static::getPreviouslyUnreservedClassNamePrefix($parts[$i], $file_proto) . $parts[$i];\n        }\n        return implode('\\\\', $parts);\n    }\n\n    public static function getFullClassName(\n        $proto,\n        $containing,\n        $file_proto,\n        &$message_name_without_package,\n        &$classname,\n        &$legacy_classname,\n        &$fullname,\n        &$previous_classname)\n    {\n        // Full name needs to start with '.'.\n        $message_name_without_package = $proto->getName();\n        if ($containing !== \"\") {\n            $message_name_without_package =\n                $containing . \".\" . $message_name_without_package;\n        }\n\n        $package = $file_proto->getPackage();\n        if ($package === \"\") {\n            $fullname = $message_name_without_package;\n        } else {\n            $fullname = $package . \".\" . $message_name_without_package;\n        }\n\n        $class_name_without_package =\n            static::getClassNameWithoutPackage($message_name_without_package, $file_proto);\n        $legacy_class_name_without_package =\n            static::getLegacyClassNameWithoutPackage(\n                $message_name_without_package, $file_proto);\n        $previous_class_name_without_package =\n            static::getPreviouslyUnreservedClassNameWithoutPackage(\n                $message_name_without_package, $file_proto);\n\n        $option = $file_proto->getOptions();\n        if (!is_null($option) && $option->hasPhpNamespace()) {\n            $namespace = $option->getPhpNamespace();\n            if ($namespace !== \"\") {\n                $classname = $namespace . \"\\\\\" . $class_name_without_package;\n                $legacy_classname =\n                    $namespace . \"\\\\\" . $legacy_class_name_without_package;\n                $previous_classname =\n                    $namespace . \"\\\\\" . $previous_class_name_without_package;\n                return;\n            } else {\n                $classname = $class_name_without_package;\n                $legacy_classname = $legacy_class_name_without_package;\n                $previous_classname = $previous_class_name_without_package;\n                return;\n            }\n        }\n\n        if ($package === \"\") {\n            $classname = $class_name_without_package;\n            $legacy_classname = $legacy_class_name_without_package;\n            $previous_classname = $previous_class_name_without_package;\n        } else {\n            $parts = array_map('ucwords', explode('.', $package));\n            foreach ($parts as $i => $part) {\n                $parts[$i] = self::getClassNamePrefix($part, $file_proto).$part;\n            }\n            $classname =\n                implode('\\\\', $parts) .\n                \"\\\\\".self::getClassNamePrefix($class_name_without_package,$file_proto).\n                $class_name_without_package;\n            $legacy_classname =\n                implode('\\\\', array_map('ucwords', explode('.', $package))).\n                \"\\\\\".$legacy_class_name_without_package;\n            $previous_classname =\n                implode('\\\\', array_map('ucwords', explode('.', $package))).\n                \"\\\\\".self::getPreviouslyUnreservedClassNamePrefix(\n                    $previous_class_name_without_package, $file_proto).\n                    $previous_class_name_without_package;\n        }\n    }\n\n    public static function combineInt32ToInt64($high, $low)\n    {\n        $isNeg = $high < 0;\n        if ($isNeg) {\n            $high = ~$high;\n            $low = ~$low;\n            $low++;\n            if (!$low) {\n                $high = (int) ($high + 1);\n            }\n        }\n        $result = bcadd(bcmul($high, 4294967296), $low);\n        if ($low < 0) {\n            $result = bcadd($result, 4294967296);\n        }\n        if ($isNeg) {\n          $result = bcsub(0, $result);\n        }\n        return $result;\n    }\n\n    public static function parseTimestamp($timestamp)\n    {\n        // prevent parsing timestamps containing with the non-existent year \"0000\"\n        // DateTime::createFromFormat parses without failing but as a nonsensical date\n        if (substr($timestamp, 0, 4) === \"0000\") {\n            throw new \\Exception(\"Year cannot be zero.\");\n        }\n        // prevent parsing timestamps ending with a lowercase z\n        if (substr($timestamp, -1, 1) === \"z\") {\n            throw new \\Exception(\"Timezone cannot be a lowercase z.\");\n        }\n\n        $nanoseconds = 0;\n        $periodIndex = strpos($timestamp, \".\");\n        if ($periodIndex !== false) {\n            $nanosecondsLength = 0;\n            // find the next non-numeric character in the timestamp to calculate\n            // the length of the nanoseconds text\n            for ($i = $periodIndex + 1, $length = strlen($timestamp); $i < $length; $i++) {\n                if (!is_numeric($timestamp[$i])) {\n                    $nanosecondsLength = $i - ($periodIndex + 1);\n                    break;\n                }\n            }\n            if ($nanosecondsLength % 3 !== 0) {\n                throw new \\Exception(\"Nanoseconds must be disible by 3.\");\n            }\n            if ($nanosecondsLength > 9) {\n                throw new \\Exception(\"Nanoseconds must be in the range of 0 to 999,999,999 nanoseconds.\");\n            }\n            if ($nanosecondsLength > 0) {\n                $nanoseconds = substr($timestamp, $periodIndex + 1, $nanosecondsLength);\n                $nanoseconds = intval($nanoseconds);\n\n                if ($nanosecondsLength < 9) {\n                    $nanoseconds = $nanoseconds * pow(10, 9 - $nanosecondsLength);\n                }\n\n                // remove the nanoseconds and preceding period from the timestamp\n                $date = substr($timestamp, 0, $periodIndex);\n                $timezone = substr($timestamp, $periodIndex + $nanosecondsLength + 1);\n                $timestamp = $date.$timezone;\n            }\n        }\n\n        $date = \\DateTime::createFromFormat(\\DateTime::RFC3339, $timestamp, new \\DateTimeZone(\"UTC\"));\n        if ($date === false) {\n            throw new \\Exception(\"Invalid RFC 3339 timestamp.\");\n        }\n\n        $value = new \\Google\\Protobuf\\Timestamp();\n        $seconds = $date->format(\"U\");\n        $value->setSeconds($seconds);\n        $value->setNanos($nanoseconds);\n        return $value;\n    }\n\n    public static function formatTimestamp($value)\n    {\n        if (bccomp($value->getSeconds(), \"253402300800\") != -1) {\n          throw new GPBDecodeException(\"Duration number too large.\");\n        }\n        if (bccomp($value->getSeconds(), \"-62135596801\") != 1) {\n          throw new GPBDecodeException(\"Duration number too small.\");\n        }\n        $nanoseconds = static::getNanosecondsForTimestamp($value->getNanos());\n        if (!empty($nanoseconds)) {\n            $nanoseconds = \".\".$nanoseconds;\n        }\n        $date = new \\DateTime('@'.$value->getSeconds(), new \\DateTimeZone(\"UTC\"));\n        return $date->format(\"Y-m-d\\TH:i:s\".$nanoseconds.\"\\Z\");\n    }\n\n    public static function parseDuration($value)\n    {\n        if (strlen($value) < 2 || substr($value, -1) !== \"s\") {\n          throw new GPBDecodeException(\"Missing s after duration string\");\n        }\n        $number = substr($value, 0, -1);\n        if (bccomp($number, \"315576000001\") != -1) {\n          throw new GPBDecodeException(\"Duration number too large.\");\n        }\n        if (bccomp($number, \"-315576000001\") != 1) {\n          throw new GPBDecodeException(\"Duration number too small.\");\n        }\n        $pos = strrpos($number, \".\");\n        if ($pos !== false) {\n            $seconds = substr($number, 0, $pos);\n            if (bccomp($seconds, 0) < 0) {\n                $nanos = bcmul(\"0\" . substr($number, $pos), -1000000000);\n            } else {\n                $nanos = bcmul(\"0\" . substr($number, $pos), 1000000000);\n            }\n        } else {\n            $seconds = $number;\n            $nanos = 0;\n        }\n        $duration = new Duration();\n        $duration->setSeconds($seconds);\n        $duration->setNanos($nanos);\n        return $duration;\n    }\n\n    public static function formatDuration($value)\n    {\n        if (bccomp($value->getSeconds(), '315576000001') != -1) {\n            throw new GPBDecodeException('Duration number too large.');\n        }\n        if (bccomp($value->getSeconds(), '-315576000001') != 1) {\n            throw new GPBDecodeException('Duration number too small.');\n        }\n\n        $nanos = $value->getNanos();\n        if ($nanos === 0) {\n            return (string) $value->getSeconds();\n        }\n\n        if ($nanos % 1000000 === 0) {\n            $digits = 3;\n        } elseif ($nanos % 1000 === 0) {\n            $digits = 6;\n        } else {\n            $digits = 9;\n        }\n\n        $nanos = bcdiv($nanos, '1000000000', $digits);\n        return bcadd($value->getSeconds(), $nanos, $digits);\n    }\n\n    public static function parseFieldMask($paths_string)\n    {\n        $field_mask = new FieldMask();\n        if (strlen($paths_string) === 0) {\n            return $field_mask;\n        }\n        $path_strings = explode(\",\", $paths_string);\n        $paths = $field_mask->getPaths();\n        foreach($path_strings as &$path_string) {\n            $field_strings = explode(\".\", $path_string);\n            foreach($field_strings as &$field_string) {\n                $field_string = camel2underscore($field_string);\n            }\n            $path_string = implode(\".\", $field_strings);\n            $paths[] = $path_string;\n        }\n        return $field_mask;\n    }\n\n    public static function formatFieldMask($field_mask)\n    {\n        $converted_paths = [];\n        foreach($field_mask->getPaths() as $path) {\n            $fields = explode('.', $path);\n            $converted_path = [];\n            foreach ($fields as $field) {\n                $segments = explode('_', $field);\n                $start = true;\n                $converted_segments = \"\";\n                foreach($segments as $segment) {\n                  if (!$start) {\n                    $converted = ucfirst($segment);\n                  } else {\n                    $converted = $segment;\n                    $start = false;\n                  }\n                  $converted_segments .= $converted;\n                }\n                $converted_path []= $converted_segments;\n            }\n            $converted_path = implode(\".\", $converted_path);\n            $converted_paths []= $converted_path;\n        }\n        return implode(\",\", $converted_paths);\n    }\n\n    public static function getNanosecondsForTimestamp($nanoseconds)\n    {\n        if ($nanoseconds == 0) {\n            return '';\n        }\n        if ($nanoseconds % static::NANOS_PER_MILLISECOND == 0) {\n            return sprintf('%03d', $nanoseconds / static::NANOS_PER_MILLISECOND);\n        }\n        if ($nanoseconds % static::NANOS_PER_MICROSECOND == 0) {\n            return sprintf('%06d', $nanoseconds / static::NANOS_PER_MICROSECOND);\n        }\n        return sprintf('%09d', $nanoseconds);\n    }\n\n    public static function hasSpecialJsonMapping($msg)\n    {\n        return is_a($msg, 'Google\\Protobuf\\Any')         ||\n               is_a($msg, \"Google\\Protobuf\\ListValue\")   ||\n               is_a($msg, \"Google\\Protobuf\\Struct\")      ||\n               is_a($msg, \"Google\\Protobuf\\Value\")       ||\n               is_a($msg, \"Google\\Protobuf\\Duration\")    ||\n               is_a($msg, \"Google\\Protobuf\\Timestamp\")   ||\n               is_a($msg, \"Google\\Protobuf\\FieldMask\")   ||\n               static::hasJsonValue($msg);\n    }\n\n    public static function hasJsonValue($msg)\n    {\n        return is_a($msg, \"Google\\Protobuf\\DoubleValue\") ||\n               is_a($msg, \"Google\\Protobuf\\FloatValue\")  ||\n               is_a($msg, \"Google\\Protobuf\\Int64Value\")  ||\n               is_a($msg, \"Google\\Protobuf\\UInt64Value\") ||\n               is_a($msg, \"Google\\Protobuf\\Int32Value\")  ||\n               is_a($msg, \"Google\\Protobuf\\UInt32Value\") ||\n               is_a($msg, \"Google\\Protobuf\\BoolValue\")   ||\n               is_a($msg, \"Google\\Protobuf\\StringValue\") ||\n               is_a($msg, \"Google\\Protobuf\\BytesValue\");\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWire.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass GPBWire\n{\n\n    const TAG_TYPE_BITS = 3;\n\n    const WIRETYPE_VARINT  = 0;\n    const WIRETYPE_FIXED64 = 1;\n    const WIRETYPE_LENGTH_DELIMITED = 2;\n    const WIRETYPE_START_GROUP = 3;\n    const WIRETYPE_END_GROUP = 4;\n    const WIRETYPE_FIXED32 = 5;\n\n    const UNKNOWN = 0;\n    const NORMAL_FORMAT = 1;\n    const PACKED_FORMAT = 2;\n\n    public static function getTagFieldNumber($tag)\n    {\n        // We have to mask because PHP has no arithmetic shift.\n        return ($tag >> self::TAG_TYPE_BITS) & 0x1fffffff;\n    }\n\n    public static function getTagWireType($tag)\n    {\n        return $tag & 0x7;\n    }\n\n    public static function getWireType($type)\n    {\n        switch ($type) {\n            case GPBType::FLOAT:\n            case GPBType::FIXED32:\n            case GPBType::SFIXED32:\n                return self::WIRETYPE_FIXED32;\n            case GPBType::DOUBLE:\n            case GPBType::FIXED64:\n            case GPBType::SFIXED64:\n                return self::WIRETYPE_FIXED64;\n            case GPBType::UINT32:\n            case GPBType::UINT64:\n            case GPBType::INT32:\n            case GPBType::INT64:\n            case GPBType::SINT32:\n            case GPBType::SINT64:\n            case GPBType::ENUM:\n            case GPBType::BOOL:\n                return self::WIRETYPE_VARINT;\n            case GPBType::STRING:\n            case GPBType::BYTES:\n            case GPBType::MESSAGE:\n                return self::WIRETYPE_LENGTH_DELIMITED;\n            case GPBType::GROUP:\n                user_error(\"Unsupported type.\");\n                return 0;\n            default:\n                user_error(\"Unsupported type.\");\n                return 0;\n        }\n    }\n\n  // ZigZag Transform:  Encodes signed integers so that they can be effectively\n  // used with varint encoding.\n  //\n  // varint operates on unsigned integers, encoding smaller numbers into fewer\n  // bytes.  If you try to use it on a signed integer, it will treat this\n  // number as a very large unsigned integer, which means that even small\n  // signed numbers like -1 will take the maximum number of bytes (10) to\n  // encode.  zigZagEncode() maps signed integers to unsigned in such a way\n  // that those with a small absolute value will have smaller encoded values,\n  // making them appropriate for encoding using varint.\n  //\n  // int32 ->     uint32\n  // -------------------------\n  //           0 ->          0\n  //          -1 ->          1\n  //           1 ->          2\n  //          -2 ->          3\n  //         ... ->        ...\n  //  2147483647 -> 4294967294\n  // -2147483648 -> 4294967295\n  //\n  //        >> encode >>\n  //        << decode <<\n  public static function zigZagEncode32($int32)\n  {\n      if (PHP_INT_SIZE == 8) {\n          $trim_int32 = $int32 & 0xFFFFFFFF;\n          return (($trim_int32 << 1) ^ ($int32 << 32 >> 63)) & 0xFFFFFFFF;\n      } else {\n          return ($int32 << 1) ^ ($int32 >> 31);\n      }\n  }\n\n    public static function zigZagDecode32($uint32)\n    {\n        // Fill high 32 bits.\n        if (PHP_INT_SIZE === 8) {\n            $uint32 |= ($uint32 & 0xFFFFFFFF);\n        }\n\n        $int32 = (($uint32 >> 1) & 0x7FFFFFFF) ^ (-($uint32 & 1));\n\n        return $int32;\n    }\n\n    public static function zigZagEncode64($int64)\n    {\n        if (PHP_INT_SIZE == 4) {\n            if (bccomp($int64, 0) >= 0) {\n                return bcmul($int64, 2);\n            } else {\n                return bcsub(bcmul(bcsub(0, $int64), 2), 1);\n            }\n        } else {\n            return ((int)$int64 << 1) ^ ((int)$int64 >> 63);\n        }\n    }\n\n    public static function zigZagDecode64($uint64)\n    {\n        if (PHP_INT_SIZE == 4) {\n            if (bcmod($uint64, 2) == 0) {\n                return bcdiv($uint64, 2, 0);\n            } else {\n                return bcsub(0, bcdiv(bcadd($uint64, 1), 2, 0));\n            }\n        } else {\n            return (($uint64 >> 1) & 0x7FFFFFFFFFFFFFFF) ^ (-($uint64 & 1));\n        }\n    }\n\n    public static function readInt32(&$input, &$value)\n    {\n        return $input->readVarint32($value);\n    }\n\n    public static function readInt64(&$input, &$value)\n    {\n        $success = $input->readVarint64($value);\n        if (PHP_INT_SIZE == 4 && bccomp($value, \"9223372036854775807\") > 0) {\n            $value = bcsub($value, \"18446744073709551616\");\n        }\n        return $success;\n    }\n\n    public static function readUint32(&$input, &$value)\n    {\n        return self::readInt32($input, $value);\n    }\n\n    public static function readUint64(&$input, &$value)\n    {\n        return self::readInt64($input, $value);\n    }\n\n    public static function readSint32(&$input, &$value)\n    {\n        if (!$input->readVarint32($value)) {\n            return false;\n        }\n        $value = GPBWire::zigZagDecode32($value);\n        return true;\n    }\n\n    public static function readSint64(&$input, &$value)\n    {\n        if (!$input->readVarint64($value)) {\n            return false;\n        }\n        $value = GPBWire::zigZagDecode64($value);\n        return true;\n    }\n\n    public static function readFixed32(&$input, &$value)\n    {\n        return $input->readLittleEndian32($value);\n    }\n\n    public static function readFixed64(&$input, &$value)\n    {\n        return $input->readLittleEndian64($value);\n    }\n\n    public static function readSfixed32(&$input, &$value)\n    {\n        if (!self::readFixed32($input, $value)) {\n            return false;\n        }\n        if (PHP_INT_SIZE === 8) {\n            $value |= (-($value >> 31) << 32);\n        }\n        return true;\n    }\n\n    public static function readSfixed64(&$input, &$value)\n    {\n        $success = $input->readLittleEndian64($value);\n        if (PHP_INT_SIZE == 4 && bccomp($value, \"9223372036854775807\") > 0) {\n            $value = bcsub($value, \"18446744073709551616\");\n        }\n        return $success;\n    }\n\n    public static function readFloat(&$input, &$value)\n    {\n        $data = null;\n        if (!$input->readRaw(4, $data)) {\n            return false;\n        }\n        $value = unpack('g', $data)[1];\n        return true;\n    }\n\n    public static function readDouble(&$input, &$value)\n    {\n        $data = null;\n        if (!$input->readRaw(8, $data)) {\n            return false;\n        }\n        $value = unpack('e', $data)[1];\n        return true;\n    }\n\n    public static function readBool(&$input, &$value)\n    {\n        if (!$input->readVarint64($value)) {\n            return false;\n        }\n        if ($value == 0) {\n            $value = false;\n        } else {\n            $value = true;\n        }\n        return true;\n    }\n\n    public static function readString(&$input, &$value)\n    {\n        $length = 0;\n        return $input->readVarintSizeAsInt($length) && $input->readRaw($length, $value);\n    }\n\n    public static function readMessage(&$input, &$message)\n    {\n        $length = 0;\n        if (!$input->readVarintSizeAsInt($length)) {\n            return false;\n        }\n        $old_limit = 0;\n        $recursion_limit = 0;\n        $input->incrementRecursionDepthAndPushLimit(\n            $length,\n            $old_limit,\n            $recursion_limit);\n        if ($recursion_limit < 0 || !$message->parseFromStream($input)) {\n            return false;\n        }\n        return $input->decrementRecursionDepthAndPopLimit($old_limit);\n    }\n\n    public static function writeTag(&$output, $tag)\n    {\n        return $output->writeTag($tag);\n    }\n\n    public static function writeInt32(&$output, $value)\n    {\n        return $output->writeVarint32($value, false);\n    }\n\n    public static function writeInt64(&$output, $value)\n    {\n        return $output->writeVarint64($value);\n    }\n\n    public static function writeUint32(&$output, $value)\n    {\n        return $output->writeVarint32($value, true);\n    }\n\n    public static function writeUint64(&$output, $value)\n    {\n        return $output->writeVarint64($value);\n    }\n\n    public static function writeSint32(&$output, $value)\n    {\n        $value = GPBWire::zigZagEncode32($value);\n        return $output->writeVarint32($value, true);\n    }\n\n    public static function writeSint64(&$output, $value)\n    {\n        $value = GPBWire::zigZagEncode64($value);\n        return $output->writeVarint64($value);\n    }\n\n    public static function writeFixed32(&$output, $value)\n    {\n        return $output->writeLittleEndian32($value);\n    }\n\n    public static function writeFixed64(&$output, $value)\n    {\n        return $output->writeLittleEndian64($value);\n    }\n\n    public static function writeSfixed32(&$output, $value)\n    {\n        return $output->writeLittleEndian32($value);\n    }\n\n    public static function writeSfixed64(&$output, $value)\n    {\n        return $output->writeLittleEndian64($value);\n    }\n\n    public static function writeBool(&$output, $value)\n    {\n        if ($value) {\n            return $output->writeVarint32(1, true);\n        } else {\n            return $output->writeVarint32(0, true);\n        }\n    }\n\n    public static function writeFloat(&$output, $value)\n    {\n        $data = pack(\"g\", $value);\n        return $output->writeRaw($data, 4);\n    }\n\n    public static function writeDouble(&$output, $value)\n    {\n        $data = pack(\"e\", $value);\n        return $output->writeRaw($data, 8);\n    }\n\n    public static function writeString(&$output, $value)\n    {\n        return self::writeBytes($output, $value);\n    }\n\n    public static function writeBytes(&$output, $value)\n    {\n        $size = strlen($value);\n        if (!$output->writeVarint32($size, true)) {\n            return false;\n        }\n        return $output->writeRaw($value, $size);\n    }\n\n    public static function writeMessage(&$output, $value)\n    {\n        $size = $value->byteSize();\n        if (!$output->writeVarint32($size, true)) {\n            return false;\n        }\n        return $value->serializeToStream($output);\n    }\n\n    public static function makeTag($number, $type)\n    {\n        return ($number << 3) | self::getWireType($type);\n    }\n\n    public static function tagSize($field)\n    {\n        $tag = self::makeTag($field->getNumber(), $field->getType());\n        return self::varint32Size($tag);\n    }\n\n    public static function varint32Size($value, $sign_extended = false)\n    {\n        if ($value < 0) {\n            if ($sign_extended) {\n                return 10;\n            } else {\n                return 5;\n            }\n        }\n        if ($value < (1 <<  7)) {\n            return 1;\n        }\n        if ($value < (1 << 14)) {\n            return 2;\n        }\n        if ($value < (1 << 21)) {\n            return 3;\n        }\n        if ($value < (1 << 28)) {\n            return 4;\n        }\n        return 5;\n    }\n\n    public static function sint32Size($value)\n    {\n        $value = self::zigZagEncode32($value);\n        return self::varint32Size($value);\n    }\n\n    public static function sint64Size($value)\n    {\n        $value = self::zigZagEncode64($value);\n        return self::varint64Size($value);\n    }\n\n    public static function varint64Size($value)\n    {\n        if (PHP_INT_SIZE == 4) {\n            if (bccomp($value, 0) < 0 ||\n                bccomp($value, \"9223372036854775807\") > 0) {\n                return 10;\n            }\n            if (bccomp($value, 1 << 7) < 0) {\n                return 1;\n            }\n            if (bccomp($value, 1 << 14) < 0) {\n                return 2;\n            }\n            if (bccomp($value, 1 << 21) < 0) {\n                return 3;\n            }\n            if (bccomp($value, 1 << 28) < 0) {\n                return 4;\n            }\n            if (bccomp($value, '34359738368') < 0) {\n                return 5;\n            }\n            if (bccomp($value, '4398046511104') < 0) {\n                return 6;\n            }\n            if (bccomp($value, '562949953421312') < 0) {\n                return 7;\n            }\n            if (bccomp($value, '72057594037927936') < 0) {\n                return 8;\n            }\n            return 9;\n        } else {\n            if ($value < 0) {\n                return 10;\n            }\n            if ($value < (1 <<  7)) {\n                return 1;\n            }\n            if ($value < (1 << 14)) {\n                return 2;\n            }\n            if ($value < (1 << 21)) {\n                return 3;\n            }\n            if ($value < (1 << 28)) {\n                return 4;\n            }\n            if ($value < (1 << 35)) {\n                return 5;\n            }\n            if ($value < (1 << 42)) {\n                return 6;\n            }\n            if ($value < (1 << 49)) {\n                return 7;\n            }\n            if ($value < (1 << 56)) {\n                return 8;\n            }\n            return 9;\n        }\n    }\n\n    public static function serializeFieldToStream(\n        $value,\n        $field,\n        $need_tag,\n        &$output)\n    {\n        if ($need_tag) {\n            if (!GPBWire::writeTag(\n                $output,\n                self::makeTag(\n                    $field->getNumber(),\n                    $field->getType()))) {\n                return false;\n            }\n        }\n        switch ($field->getType()) {\n            case GPBType::DOUBLE:\n                if (!GPBWire::writeDouble($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::FLOAT:\n                if (!GPBWire::writeFloat($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::INT64:\n                if (!GPBWire::writeInt64($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::UINT64:\n                if (!GPBWire::writeUint64($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::INT32:\n                if (!GPBWire::writeInt32($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::FIXED32:\n                if (!GPBWire::writeFixed32($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::FIXED64:\n                if (!GPBWire::writeFixed64($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::BOOL:\n                if (!GPBWire::writeBool($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::STRING:\n                if (!GPBWire::writeString($output, $value)) {\n                    return false;\n                }\n                break;\n            //    case GPBType::GROUP:\n            //      echo \"GROUP\\xA\";\n            //      trigger_error(\"Not implemented.\", E_ERROR);\n            //      break;\n            case GPBType::MESSAGE:\n                if (!GPBWire::writeMessage($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::BYTES:\n                if (!GPBWire::writeBytes($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::UINT32:\n                if (PHP_INT_SIZE === 8 && $value < 0) {\n                    $value += 4294967296;\n                }\n                if (!GPBWire::writeUint32($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::ENUM:\n                if (!GPBWire::writeInt32($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::SFIXED32:\n                if (!GPBWire::writeSfixed32($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::SFIXED64:\n                if (!GPBWire::writeSfixed64($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::SINT32:\n                if (!GPBWire::writeSint32($output, $value)) {\n                    return false;\n                }\n                break;\n            case GPBType::SINT64:\n                if (!GPBWire::writeSint64($output, $value)) {\n                    return false;\n                }\n                break;\n            default:\n                user_error(\"Unsupported type.\");\n                return false;\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GPBWireType.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass GPBWireType\n{\n    const VARINT           = 0;\n    const FIXED64          = 1;\n    const LENGTH_DELIMITED = 2;\n    const START_GROUP      = 3;\n    const END_GROUP        = 4;\n    const FIXED32          = 5;\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation/Semantic.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation;\n\nuse UnexpectedValueException;\n\n/**\n * Represents the identified object's effect on the element in the original\n * .proto file.\n *\n * Protobuf type <code>google.protobuf.GeneratedCodeInfo.Annotation.Semantic</code>\n */\nclass Semantic\n{\n    /**\n     * There is no effect or the effect is indescribable.\n     *\n     * Generated from protobuf enum <code>NONE = 0;</code>\n     */\n    const NONE = 0;\n    /**\n     * The element is set or otherwise mutated.\n     *\n     * Generated from protobuf enum <code>SET = 1;</code>\n     */\n    const SET = 1;\n    /**\n     * An alias to the element is returned.\n     *\n     * Generated from protobuf enum <code>ALIAS = 2;</code>\n     */\n    const ALIAS = 2;\n\n    private static $valueToName = [\n        self::NONE => 'NONE',\n        self::SET => 'SET',\n        self::ALIAS => 'ALIAS',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo/Annotation.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\GeneratedCodeInfo;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.GeneratedCodeInfo.Annotation</code>\n */\nclass Annotation extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Identifies the element in the original source .proto file. This field\n     * is formatted the same as SourceCodeInfo.Location.path.\n     *\n     * Generated from protobuf field <code>repeated int32 path = 1 [packed = true];</code>\n     */\n    private $path;\n    /**\n     * Identifies the filesystem path to the original source .proto.\n     *\n     * Generated from protobuf field <code>optional string source_file = 2;</code>\n     */\n    protected $source_file = null;\n    /**\n     * Identifies the starting offset in bytes in the generated code\n     * that relates to the identified object.\n     *\n     * Generated from protobuf field <code>optional int32 begin = 3;</code>\n     */\n    protected $begin = null;\n    /**\n     * Identifies the ending offset in bytes in the generated code that\n     * relates to the identified object. The end offset should be one past\n     * the last relevant byte (so the length of the text = end - begin).\n     *\n     * Generated from protobuf field <code>optional int32 end = 4;</code>\n     */\n    protected $end = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.GeneratedCodeInfo.Annotation.Semantic semantic = 5;</code>\n     */\n    protected $semantic = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int[] $path\n     *           Identifies the element in the original source .proto file. This field\n     *           is formatted the same as SourceCodeInfo.Location.path.\n     *     @type string $source_file\n     *           Identifies the filesystem path to the original source .proto.\n     *     @type int $begin\n     *           Identifies the starting offset in bytes in the generated code\n     *           that relates to the identified object.\n     *     @type int $end\n     *           Identifies the ending offset in bytes in the generated code that\n     *           relates to the identified object. The end offset should be one past\n     *           the last relevant byte (so the length of the text = end - begin).\n     *     @type int $semantic\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Identifies the element in the original source .proto file. This field\n     * is formatted the same as SourceCodeInfo.Location.path.\n     *\n     * Generated from protobuf field <code>repeated int32 path = 1 [packed = true];</code>\n     * @return RepeatedField<int>\n     */\n    public function getPath()\n    {\n        return $this->path;\n    }\n\n    /**\n     * Identifies the element in the original source .proto file. This field\n     * is formatted the same as SourceCodeInfo.Location.path.\n     *\n     * Generated from protobuf field <code>repeated int32 path = 1 [packed = true];</code>\n     * @param int[] $var\n     * @return $this\n     */\n    public function setPath($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::INT32);\n        $this->path = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Identifies the filesystem path to the original source .proto.\n     *\n     * Generated from protobuf field <code>optional string source_file = 2;</code>\n     * @return string\n     */\n    public function getSourceFile()\n    {\n        return isset($this->source_file) ? $this->source_file : '';\n    }\n\n    public function hasSourceFile()\n    {\n        return isset($this->source_file);\n    }\n\n    public function clearSourceFile()\n    {\n        unset($this->source_file);\n    }\n\n    /**\n     * Identifies the filesystem path to the original source .proto.\n     *\n     * Generated from protobuf field <code>optional string source_file = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setSourceFile($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->source_file = $var;\n\n        return $this;\n    }\n\n    /**\n     * Identifies the starting offset in bytes in the generated code\n     * that relates to the identified object.\n     *\n     * Generated from protobuf field <code>optional int32 begin = 3;</code>\n     * @return int\n     */\n    public function getBegin()\n    {\n        return isset($this->begin) ? $this->begin : 0;\n    }\n\n    public function hasBegin()\n    {\n        return isset($this->begin);\n    }\n\n    public function clearBegin()\n    {\n        unset($this->begin);\n    }\n\n    /**\n     * Identifies the starting offset in bytes in the generated code\n     * that relates to the identified object.\n     *\n     * Generated from protobuf field <code>optional int32 begin = 3;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setBegin($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->begin = $var;\n\n        return $this;\n    }\n\n    /**\n     * Identifies the ending offset in bytes in the generated code that\n     * relates to the identified object. The end offset should be one past\n     * the last relevant byte (so the length of the text = end - begin).\n     *\n     * Generated from protobuf field <code>optional int32 end = 4;</code>\n     * @return int\n     */\n    public function getEnd()\n    {\n        return isset($this->end) ? $this->end : 0;\n    }\n\n    public function hasEnd()\n    {\n        return isset($this->end);\n    }\n\n    public function clearEnd()\n    {\n        unset($this->end);\n    }\n\n    /**\n     * Identifies the ending offset in bytes in the generated code that\n     * relates to the identified object. The end offset should be one past\n     * the last relevant byte (so the length of the text = end - begin).\n     *\n     * Generated from protobuf field <code>optional int32 end = 4;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setEnd($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->end = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.GeneratedCodeInfo.Annotation.Semantic semantic = 5;</code>\n     * @return int\n     */\n    public function getSemantic()\n    {\n        return isset($this->semantic) ? $this->semantic : 0;\n    }\n\n    public function hasSemantic()\n    {\n        return isset($this->semantic);\n    }\n\n    public function clearSemantic()\n    {\n        unset($this->semantic);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.GeneratedCodeInfo.Annotation.Semantic semantic = 5;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setSemantic($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation\\Semantic::class);\n        $this->semantic = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GeneratedCodeInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes the relationship between generated code and its original source\n * file. A GeneratedCodeInfo message is associated with only one generated\n * source file, but may contain references to different source .proto files.\n *\n * Generated from protobuf message <code>google.protobuf.GeneratedCodeInfo</code>\n */\nclass GeneratedCodeInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * An Annotation connects some span of text in generated code to an element\n     * of its generating .proto file.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1;</code>\n     */\n    private $annotation;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation[] $annotation\n     *           An Annotation connects some span of text in generated code to an element\n     *           of its generating .proto file.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * An Annotation connects some span of text in generated code to an element\n     * of its generating .proto file.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation>\n     */\n    public function getAnnotation()\n    {\n        return $this->annotation;\n    }\n\n    /**\n     * An Annotation connects some span of text in generated code to an element\n     * of its generating .proto file.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1;</code>\n     * @param \\Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation[] $var\n     * @return $this\n     */\n    public function setAnnotation($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\GeneratedCodeInfo\\Annotation::class);\n        $this->annotation = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/GetPublicDescriptorTrait.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2017 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\ntrait GetPublicDescriptorTrait\n{\n    private function getPublicDescriptor($desc)\n    {\n        return is_null($desc) ? null : $desc->getPublicDescriptor();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/HasPublicDescriptorTrait.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\ntrait HasPublicDescriptorTrait\n{\n    private $public_desc;\n\n    public function getPublicDescriptor()\n    {\n        return $this->public_desc;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MapEntry.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\Message;\n\nclass MapEntry extends Message\n{\n    public $key;\n    public $value;\n\n    public function __construct($desc) {\n        parent::__construct($desc);\n        // For MapEntry, getValue should always return a valid value. Thus, we\n        // need to create a default instance value if the value type is\n        // message, in case no value is provided in data.\n        $value_field = $desc->getFieldByNumber(2);\n        if ($value_field->getType() == GPBType::MESSAGE) {\n            $klass = $value_field->getMessageType()->getClass();\n            $value = new $klass;\n            $this->setValue($value);\n        }\n    }\n\n    public function setKey($key) {\n      $this->key = $key;\n    }\n\n    public function getKey() {\n      return $this->key;\n    }\n\n    public function setValue($value) {\n      $this->value = $value;\n    }\n\n    public function getValue() {\n      return $this->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MapField.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\n/**\n * MapField and MapFieldIter are used by generated protocol message classes to\n * manipulate map fields.\n */\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Traversable;\n\n/**\n * MapField is used by generated protocol message classes to manipulate map\n * fields. It can be used like native PHP array.\n */\nclass MapField implements \\ArrayAccess, \\IteratorAggregate, \\Countable\n{\n    /**\n     * @ignore\n     */\n    private $container;\n    /**\n     * @ignore\n     */\n    private $key_type;\n    /**\n     * @ignore\n     */\n    private $value_type;\n    /**\n     * @ignore\n     */\n    private $klass;\n    /**\n     * @ignore\n     */\n    private $legacy_klass;\n\n    /**\n     * Constructs an instance of MapField.\n     *\n     * @param long $key_type Type of the stored key element.\n     * @param long $value_type Type of the stored value element.\n     * @param string $klass Message/Enum class name of value instance\n     * (message/enum fields only).\n     * @ignore\n     */\n    public function __construct($key_type, $value_type, $klass = null)\n    {\n        $this->container = [];\n        $this->key_type = $key_type;\n        $this->value_type = $value_type;\n        $this->klass = $klass;\n\n        if ($this->value_type == GPBType::MESSAGE) {\n            $pool = DescriptorPool::getGeneratedPool();\n            $desc = $pool->getDescriptorByClassName($klass);\n            if ($desc == NULL) {\n                new $klass;  // No msg class instance has been created before.\n                $desc = $pool->getDescriptorByClassName($klass);\n            }\n            $this->klass = $desc->getClass();\n            $this->legacy_klass = $desc->getLegacyClass();\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    public function getKeyType()\n    {\n        return $this->key_type;\n    }\n\n    /**\n     * @ignore\n     */\n    public function getValueType()\n    {\n        return $this->value_type;\n    }\n\n    /**\n     * @ignore\n     */\n    public function getValueClass()\n    {\n        return $this->klass;\n    }\n\n    /**\n     * @ignore\n     */\n    public function getLegacyValueClass()\n    {\n        return $this->legacy_klass;\n    }\n\n    /**\n     * Return the element at the given key.\n     *\n     * This will also be called for: $ele = $arr[$key]\n     *\n     * @param int|string $key The key of the element to be fetched.\n     * @return object The stored element at given key.\n     * @throws \\ErrorException Invalid type for index.\n     * @throws \\ErrorException Non-existing index.\n     * @todo need to add return type mixed (require update php version to 8.0)\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetGet($key)\n    {\n        return $this->container[$key];\n    }\n\n    /**\n     * Assign the element at the given key.\n     *\n     * This will also be called for: $arr[$key] = $value\n     *\n     * @param int|string $key The key of the element to be fetched.\n     * @param object $value The element to be assigned.\n     * @return void\n     * @throws \\ErrorException Invalid type for key.\n     * @throws \\ErrorException Invalid type for value.\n     * @throws \\ErrorException Non-existing key.\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetSet($key, $value)\n    {\n        $this->checkKey($this->key_type, $key);\n\n        switch ($this->value_type) {\n            case GPBType::SFIXED32:\n            case GPBType::SINT32:\n            case GPBType::INT32:\n            case GPBType::ENUM:\n                GPBUtil::checkInt32($value);\n                break;\n            case GPBType::FIXED32:\n            case GPBType::UINT32:\n                GPBUtil::checkUint32($value);\n                break;\n            case GPBType::SFIXED64:\n            case GPBType::SINT64:\n            case GPBType::INT64:\n                GPBUtil::checkInt64($value);\n                break;\n            case GPBType::FIXED64:\n            case GPBType::UINT64:\n                GPBUtil::checkUint64($value);\n                break;\n            case GPBType::FLOAT:\n                GPBUtil::checkFloat($value);\n                break;\n            case GPBType::DOUBLE:\n                GPBUtil::checkDouble($value);\n                break;\n            case GPBType::BOOL:\n                GPBUtil::checkBool($value);\n                break;\n            case GPBType::STRING:\n                GPBUtil::checkString($value, true);\n                break;\n            case GPBType::MESSAGE:\n                if (is_null($value)) {\n                  trigger_error(\"Map element cannot be null.\", E_USER_ERROR);\n                }\n                GPBUtil::checkMessage($value, $this->klass);\n                break;\n            default:\n                break;\n        }\n\n        $this->container[$key] = $value;\n    }\n\n    /**\n     * Remove the element at the given key.\n     *\n     * This will also be called for: unset($arr)\n     *\n     * @param int|string $key The key of the element to be removed.\n     * @return void\n     * @throws \\ErrorException Invalid type for key.\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetUnset($key)\n    {\n        $this->checkKey($this->key_type, $key);\n        unset($this->container[$key]);\n    }\n\n    /**\n     * Check the existence of the element at the given key.\n     *\n     * This will also be called for: isset($arr)\n     *\n     * @param int|string $key The key of the element to be removed.\n     * @return bool True if the element at the given key exists.\n     * @throws \\ErrorException Invalid type for key.\n     */\n    public function offsetExists($key): bool\n    {\n        $this->checkKey($this->key_type, $key);\n        return isset($this->container[$key]);\n    }\n\n    /**\n     * @ignore\n     */\n    public function getIterator(): Traversable\n    {\n        return new MapFieldIter($this->container, $this->key_type);\n    }\n\n    /**\n     * Return the number of stored elements.\n     *\n     * This will also be called for: count($arr)\n     *\n     * @return integer The number of stored elements.\n     */\n    public function count(): int\n    {\n        return count($this->container);\n    }\n\n    /**\n     * @ignore\n     */\n    private function checkKey($key_type, &$key)\n    {\n        switch ($key_type) {\n            case GPBType::SFIXED32:\n            case GPBType::SINT32:\n            case GPBType::INT32:\n                GPBUtil::checkInt32($key);\n                break;\n            case GPBType::FIXED32:\n            case GPBType::UINT32:\n                GPBUtil::checkUint32($key);\n                break;\n            case GPBType::SFIXED64:\n            case GPBType::SINT64:\n            case GPBType::INT64:\n                GPBUtil::checkInt64($key);\n                break;\n            case GPBType::FIXED64:\n            case GPBType::UINT64:\n                GPBUtil::checkUint64($key);\n                break;\n            case GPBType::BOOL:\n                GPBUtil::checkBool($key);\n                break;\n            case GPBType::STRING:\n                GPBUtil::checkString($key, true);\n                break;\n            default:\n                trigger_error(\n                    \"Given type cannot be map key.\",\n                    E_USER_ERROR);\n                break;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MapFieldIter.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\n/**\n * MapField and MapFieldIter are used by generated protocol message classes to\n * manipulate map fields.\n */\n\nnamespace Google\\Protobuf\\Internal;\n\n/**\n * MapFieldIter is used to iterate MapField. It is also need for the foreach\n * syntax.\n */\nclass MapFieldIter implements \\Iterator\n{\n\n    /**\n     * @ignore\n     */\n    private $container;\n\n    /**\n     * @ignore\n     */\n    private $key_type;\n\n    /**\n     * Create iterator instance for MapField.\n     *\n     * @param array $container\n     * @param GPBType $key_type Map key type.\n     * @ignore\n     */\n    public function __construct($container, $key_type)\n    {\n        $this->container = $container;\n        $this->key_type = $key_type;\n    }\n\n    /**\n     * Reset the status of the iterator\n     *\n     * @return void\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function rewind()\n    {\n        reset($this->container);\n    }\n\n    /**\n     * Return the element at the current position.\n     *\n     * @return object The element at the current position.\n     * @todo need to add return type mixed (require update php version to 8.0)\n     */\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        return current($this->container);\n    }\n\n    /**\n     * Return the current key.\n     *\n     * @return object The current key.\n     * @todo need to add return type mixed (require update php version to 8.0)\n     */\n    #[\\ReturnTypeWillChange]\n    public function key()\n    {\n        $key = key($this->container);\n        switch ($this->key_type) {\n            case GPBType::INT64:\n            case GPBType::UINT64:\n            case GPBType::FIXED64:\n            case GPBType::SFIXED64:\n            case GPBType::SINT64:\n                if (PHP_INT_SIZE === 8) {\n                    return $key;\n                }\n                // Intentionally fall through\n            case GPBType::STRING:\n                // PHP associative array stores int string as int for key.\n                return strval($key);\n            case GPBType::BOOL:\n                // PHP associative array stores bool as integer for key.\n                return boolval($key);\n            default:\n                return $key;\n        }\n    }\n\n    /**\n     * Move to the next position.\n     *\n     * @return void\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function next()\n    {\n        next($this->container);\n    }\n\n    /**\n     * Check whether there are more elements to iterate.\n     *\n     * @return bool True if there are more elements to iterate.\n     */\n    public function valid(): bool\n    {\n        return key($this->container) !== null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\n/**\n * Defines Message, the parent class extended by all protocol message classes.\n */\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\CodedInputStream;\nuse Google\\Protobuf\\Internal\\CodedOutputStream;\nuse Google\\Protobuf\\Internal\\DescriptorPool;\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\MapEntry;\nuse Google\\Protobuf\\ListValue;\nuse Google\\Protobuf\\RepeatedField;\nuse Google\\Protobuf\\PrintOptions;\nuse Google\\Protobuf\\Value;\nuse Google\\Protobuf\\Struct;\nuse Google\\Protobuf\\NullValue;\n\n/**\n * Parent class of all proto messages. Users should not instantiate this class\n * or extend this class or its child classes by their own.  See the comment of\n * specific functions for more details.\n */\n#[\\AllowDynamicProperties]\nclass Message\n{\n\n    /**\n     * @ignore\n     */\n    private $desc;\n    private $unknown = \"\";\n\n    /**\n     * @ignore\n     */\n    public function __construct($data = NULL)\n    {\n        // MapEntry message is shared by all types of map fields, whose\n        // descriptors are different from each other. Thus, we cannot find a\n        // specific descriptor from the descriptor pool.\n        if ($this instanceof MapEntry) {\n            $this->initWithDescriptor($data);\n        } else {\n            $this->initWithGeneratedPool();\n            if (is_array($data)) {\n                $this->mergeFromArray($data);\n            } else if (!empty($data)) {\n                throw new \\InvalidArgumentException(\n                    'Message constructor must be an array or null.'\n                );\n            }\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function initWithGeneratedPool()\n    {\n        $pool = DescriptorPool::getGeneratedPool();\n        $this->desc = $pool->getDescriptorByClassName(get_class($this));\n        if (is_null($this->desc)) {\n          throw new \\InvalidArgumentException(\n            get_class($this) .\" is not found in descriptor pool. \" .\n            'Only generated classes may derive from Message.');\n        }\n        foreach ($this->desc->getField() as $field) {\n            $setter = $field->getSetter();\n            if ($field->isMap()) {\n                $message_type = $field->getMessageType();\n                $key_field = $message_type->getFieldByNumber(1);\n                $value_field = $message_type->getFieldByNumber(2);\n                switch ($value_field->getType()) {\n                    case GPBType::MESSAGE:\n                    case GPBType::GROUP:\n                        $map_field = new MapField(\n                            $key_field->getType(),\n                            $value_field->getType(),\n                            $value_field->getMessageType()->getClass());\n                        $this->$setter($map_field);\n                        break;\n                    case GPBType::ENUM:\n                        $map_field = new MapField(\n                            $key_field->getType(),\n                            $value_field->getType(),\n                            $value_field->getEnumType()->getClass());\n                        $this->$setter($map_field);\n                        break;\n                    default:\n                        $map_field = new MapField(\n                            $key_field->getType(),\n                            $value_field->getType());\n                        $this->$setter($map_field);\n                        break;\n                }\n            } else if ($field->isRepeated()) {\n                switch ($field->getType()) {\n                    case GPBType::MESSAGE:\n                    case GPBType::GROUP:\n                        $repeated_field = new RepeatedField(\n                            $field->getType(),\n                            $field->getMessageType()->getClass());\n                        $this->$setter($repeated_field);\n                        break;\n                    case GPBType::ENUM:\n                        $repeated_field = new RepeatedField(\n                            $field->getType(),\n                            $field->getEnumType()->getClass());\n                        $this->$setter($repeated_field);\n                        break;\n                    default:\n                        $repeated_field = new RepeatedField($field->getType());\n                        $this->$setter($repeated_field);\n                        break;\n                }\n            } else if ($field->getOneofIndex() !== -1) {\n                $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()];\n                $oneof_name = $oneof->getName();\n                $this->$oneof_name = new OneofField($oneof);\n            } else if (!$field->isRequired() && !$field->isRepeated() &&\n                       PHP_INT_SIZE == 4) {\n                switch ($field->getType()) {\n                    case GPBType::INT64:\n                    case GPBType::UINT64:\n                    case GPBType::FIXED64:\n                    case GPBType::SFIXED64:\n                    case GPBType::SINT64:\n                        $this->$setter(\"0\");\n                }\n            }\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function initWithDescriptor(Descriptor $desc)\n    {\n        $this->desc = $desc;\n        foreach ($desc->getField() as $field) {\n            $setter = $field->getSetter();\n            $defaultValue = $this->defaultValue($field);\n            $this->$setter($defaultValue);\n        }\n    }\n\n    protected function readWrapperValue($member)\n    {\n        $field = $this->desc->getFieldByName($member);\n        $oneof_index = $field->getOneofIndex();\n        if ($oneof_index === -1) {\n            $wrapper = $this->$member;\n        } else {\n            $wrapper = $this->readOneof($field->getNumber());\n        }\n\n        if (is_null($wrapper)) {\n            return NULL;\n        } else {\n            return $wrapper->getValue();\n        }\n    }\n\n    protected function writeWrapperValue($member, $value)\n    {\n        $field = $this->desc->getFieldByName($member);\n        $wrapped_value = $value;\n        if (!is_null($value)) {\n            $desc = $field->getMessageType();\n            $klass = $desc->getClass();\n            $wrapped_value = new $klass;\n            $wrapped_value->setValue($value);\n        }\n\n        $oneof_index = $field->getOneofIndex();\n        if ($oneof_index === -1) {\n            $this->$member = $wrapped_value;\n        } else {\n            $this->writeOneof($field->getNumber(), $wrapped_value);\n        }\n    }\n\n    protected function readOneof($number)\n    {\n        $field = $this->desc->getFieldByNumber($number);\n        $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()];\n        $oneof_name = $oneof->getName();\n        $oneof_field = $this->$oneof_name;\n        if ($number === $oneof_field->getNumber()) {\n            return $oneof_field->getValue();\n        } else {\n            return $this->defaultValue($field);\n        }\n    }\n\n    protected function hasOneof($number)\n    {\n        $field = $this->desc->getFieldByNumber($number);\n        $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()];\n        $oneof_name = $oneof->getName();\n        $oneof_field = $this->$oneof_name;\n        return $number === $oneof_field->getNumber();\n    }\n\n    protected function writeOneof($number, $value)\n    {\n        $field = $this->desc->getFieldByNumber($number);\n        $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()];\n        $oneof_name = $oneof->getName();\n        if ($value === null) {\n            $this->$oneof_name = new OneofField($oneof);\n        } else {\n            $oneof_field = $this->$oneof_name;\n            $oneof_field->setValue($value);\n            $oneof_field->setFieldName($field->getName());\n            $oneof_field->setNumber($number);\n        }\n    }\n\n    protected function whichOneof($oneof_name)\n    {\n        $oneof_field = $this->$oneof_name;\n        $number = $oneof_field->getNumber();\n        if ($number == 0) {\n          return \"\";\n        }\n        $field = $this->desc->getFieldByNumber($number);\n        return $field->getName();\n    }\n\n    /**\n     * @ignore\n     */\n    private function defaultValue($field)\n    {\n        $value = null;\n\n        switch ($field->getType()) {\n            case GPBType::DOUBLE:\n            case GPBType::FLOAT:\n                return 0.0;\n            case GPBType::UINT32:\n            case GPBType::INT32:\n            case GPBType::FIXED32:\n            case GPBType::SFIXED32:\n            case GPBType::SINT32:\n            case GPBType::ENUM:\n                return 0;\n            case GPBType::INT64:\n            case GPBType::UINT64:\n            case GPBType::FIXED64:\n            case GPBType::SFIXED64:\n            case GPBType::SINT64:\n                if (PHP_INT_SIZE === 4) {\n                    return '0';\n                } else {\n                    return 0;\n                }\n            case GPBType::BOOL:\n                return false;\n            case GPBType::STRING:\n            case GPBType::BYTES:\n                return \"\";\n            case GPBType::GROUP:\n            case GPBType::MESSAGE:\n                return null;\n            default:\n                user_error(\"Unsupported type.\");\n                return false;\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function skipField($input, $tag)\n    {\n        $number = GPBWire::getTagFieldNumber($tag);\n        if ($number === 0) {\n            throw new GPBDecodeException(\"Illegal field number zero.\");\n        }\n\n        $start = $input->current();\n        switch (GPBWire::getTagWireType($tag)) {\n            case GPBWireType::VARINT:\n                $uint64 = 0;\n                if (!$input->readVarint64($uint64)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside varint.\");\n                }\n                break;\n            case GPBWireType::FIXED64:\n                $uint64 = 0;\n                if (!$input->readLittleEndian64($uint64)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside fixed64.\");\n                }\n                break;\n            case GPBWireType::FIXED32:\n                $uint32 = 0;\n                if (!$input->readLittleEndian32($uint32)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside fixed32.\");\n                }\n                break;\n            case GPBWireType::LENGTH_DELIMITED:\n                $length = 0;\n                if (!$input->readVarint32($length)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside length.\");\n                }\n                $data = NULL;\n                if (!$input->readRaw($length, $data)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside length delimited data.\");\n                }\n                break;\n            case GPBWireType::START_GROUP:\n            case GPBWireType::END_GROUP:\n                throw new GPBDecodeException(\"Unexpected wire type.\");\n            default:\n                throw new GPBDecodeException(\"Unexpected wire type.\");\n        }\n        $end = $input->current();\n\n        $bytes = str_repeat(chr(0), CodedOutputStream::MAX_VARINT64_BYTES);\n        $size = CodedOutputStream::writeVarintToArray($tag, $bytes, true);\n        $this->unknown .= substr($bytes, 0, $size) . $input->substr($start, $end);\n    }\n\n    /**\n     * @ignore\n     */\n    private static function parseFieldFromStreamNoTag($input, $field, &$value)\n    {\n        switch ($field->getType()) {\n            case GPBType::DOUBLE:\n                if (!GPBWire::readDouble($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside double field.\");\n                }\n                break;\n            case GPBType::FLOAT:\n                if (!GPBWire::readFloat($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside float field.\");\n                }\n                break;\n            case GPBType::INT64:\n                if (!GPBWire::readInt64($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside int64 field.\");\n                }\n                break;\n            case GPBType::UINT64:\n                if (!GPBWire::readUint64($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside uint64 field.\");\n                }\n                break;\n            case GPBType::INT32:\n                if (!GPBWire::readInt32($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside int32 field.\");\n                }\n                break;\n            case GPBType::FIXED64:\n                if (!GPBWire::readFixed64($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside fixed64 field.\");\n                }\n                break;\n            case GPBType::FIXED32:\n                if (!GPBWire::readFixed32($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside fixed32 field.\");\n                }\n                break;\n            case GPBType::BOOL:\n                if (!GPBWire::readBool($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside bool field.\");\n                }\n                break;\n            case GPBType::STRING:\n                // We don't check UTF-8 here; that will be validated by the\n                // setter later.\n                if (!GPBWire::readString($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside string field.\");\n                }\n                break;\n            case GPBType::GROUP:\n                trigger_error(\"Not implemented.\", E_USER_ERROR);\n                break;\n            case GPBType::MESSAGE:\n                if ($field->isMap()) {\n                    $value = new MapEntry($field->getMessageType());\n                } else {\n                    $klass = $field->getMessageType()->getClass();\n                    $value = new $klass;\n                }\n                if (!GPBWire::readMessage($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside message.\");\n                }\n                break;\n            case GPBType::BYTES:\n                if (!GPBWire::readString($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside bytes field.\");\n                }\n                break;\n            case GPBType::UINT32:\n                if (!GPBWire::readUint32($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside uint32 field.\");\n                }\n                break;\n            case GPBType::ENUM:\n                // TODO: Check unknown enum value.\n                if (!GPBWire::readInt32($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside enum field.\");\n                }\n                break;\n            case GPBType::SFIXED32:\n                if (!GPBWire::readSfixed32($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside sfixed32 field.\");\n                }\n                break;\n            case GPBType::SFIXED64:\n                if (!GPBWire::readSfixed64($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside sfixed64 field.\");\n                }\n                break;\n            case GPBType::SINT32:\n                if (!GPBWire::readSint32($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside sint32 field.\");\n                }\n                break;\n            case GPBType::SINT64:\n                if (!GPBWire::readSint64($input, $value)) {\n                    throw new GPBDecodeException(\n                        \"Unexpected EOF inside sint64 field.\");\n                }\n                break;\n            default:\n                user_error(\"Unsupported type.\");\n                return false;\n        }\n        return true;\n    }\n\n    /**\n     * @ignore\n     */\n    private function parseFieldFromStream($tag, $input, $field)\n    {\n        $value = null;\n\n        if (is_null($field)) {\n            $value_format = GPBWire::UNKNOWN;\n        } elseif (GPBWire::getTagWireType($tag) ===\n            GPBWire::getWireType($field->getType())) {\n            $value_format = GPBWire::NORMAL_FORMAT;\n        } elseif ($field->isPackable() &&\n            GPBWire::getTagWireType($tag) ===\n            GPBWire::WIRETYPE_LENGTH_DELIMITED) {\n            $value_format = GPBWire::PACKED_FORMAT;\n        } else {\n            // the wire type doesn't match. Put it in our unknown field set.\n            $value_format = GPBWire::UNKNOWN;\n        }\n\n        if ($value_format === GPBWire::UNKNOWN) {\n            $this->skipField($input, $tag);\n            return;\n        } elseif ($value_format === GPBWire::NORMAL_FORMAT) {\n            self::parseFieldFromStreamNoTag($input, $field, $value);\n        } elseif ($value_format === GPBWire::PACKED_FORMAT) {\n            $length = 0;\n            if (!GPBWire::readInt32($input, $length)) {\n                throw new GPBDecodeException(\n                    \"Unexpected EOF inside packed length.\");\n            }\n            $limit = $input->pushLimit($length);\n            $getter = $field->getGetter();\n            while ($input->bytesUntilLimit() > 0) {\n                self::parseFieldFromStreamNoTag($input, $field, $value);\n                $this->appendHelper($field, $value);\n            }\n            $input->popLimit($limit);\n            return;\n        } else {\n            return;\n        }\n\n        if ($field->isMap()) {\n            $this->kvUpdateHelper($field, $value->getKey(), $value->getValue());\n        } else if ($field->isRepeated()) {\n            $this->appendHelper($field, $value);\n        } else {\n            $setter = $field->getSetter();\n            $this->$setter($value);\n        }\n    }\n\n    /**\n     * Clear all containing fields.\n     * @return null\n     */\n    public function clear()\n    {\n        $this->unknown = \"\";\n        foreach ($this->desc->getField() as $field) {\n            $setter = $field->getSetter();\n            if ($field->isMap()) {\n                $message_type = $field->getMessageType();\n                $key_field = $message_type->getFieldByNumber(1);\n                $value_field = $message_type->getFieldByNumber(2);\n                switch ($value_field->getType()) {\n                    case GPBType::MESSAGE:\n                    case GPBType::GROUP:\n                        $map_field = new MapField(\n                            $key_field->getType(),\n                            $value_field->getType(),\n                            $value_field->getMessageType()->getClass());\n                        $this->$setter($map_field);\n                        break;\n                    case GPBType::ENUM:\n                        $map_field = new MapField(\n                            $key_field->getType(),\n                            $value_field->getType(),\n                            $value_field->getEnumType()->getClass());\n                        $this->$setter($map_field);\n                        break;\n                    default:\n                        $map_field = new MapField(\n                            $key_field->getType(),\n                            $value_field->getType());\n                        $this->$setter($map_field);\n                        break;\n                }\n            } else if ($field->isRepeated()) {\n                switch ($field->getType()) {\n                    case GPBType::MESSAGE:\n                    case GPBType::GROUP:\n                        $repeated_field = new RepeatedField(\n                            $field->getType(),\n                            $field->getMessageType()->getClass());\n                        $this->$setter($repeated_field);\n                        break;\n                    case GPBType::ENUM:\n                        $repeated_field = new RepeatedField(\n                            $field->getType(),\n                            $field->getEnumType()->getClass());\n                        $this->$setter($repeated_field);\n                        break;\n                    default:\n                        $repeated_field = new RepeatedField($field->getType());\n                        $this->$setter($repeated_field);\n                        break;\n                }\n            } else if ($field->getOneofIndex() !== -1) {\n                $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()];\n                $oneof_name = $oneof->getName();\n                $this->$oneof_name = new OneofField($oneof);\n            } else if (!$field->isRequired() && !$field->isRepeated()) {\n                switch ($field->getType()) {\n                    case GPBType::DOUBLE   :\n                    case GPBType::FLOAT    :\n                        $this->$setter(0.0);\n                        break;\n                    case GPBType::INT32    :\n                    case GPBType::FIXED32  :\n                    case GPBType::UINT32   :\n                    case GPBType::SFIXED32 :\n                    case GPBType::SINT32   :\n                    case GPBType::ENUM     :\n                        $this->$setter(0);\n                        break;\n                    case GPBType::BOOL     :\n                        $this->$setter(false);\n                        break;\n                    case GPBType::STRING   :\n                    case GPBType::BYTES    :\n                        $this->$setter(\"\");\n                        break;\n                    case GPBType::GROUP    :\n                    case GPBType::MESSAGE  :\n                        $null = null;\n                        $this->$setter($null);\n                        break;\n                }\n                if (PHP_INT_SIZE == 4) {\n                    switch ($field->getType()) {\n                        case GPBType::INT64:\n                        case GPBType::UINT64:\n                        case GPBType::FIXED64:\n                        case GPBType::SFIXED64:\n                        case GPBType::SINT64:\n                            $this->$setter(\"0\");\n                    }\n                } else {\n                    switch ($field->getType()) {\n                        case GPBType::INT64:\n                        case GPBType::UINT64:\n                        case GPBType::FIXED64:\n                        case GPBType::SFIXED64:\n                        case GPBType::SINT64:\n                            $this->$setter(0);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Clear all unknown fields previously parsed.\n     * @return null\n     */\n    public function discardUnknownFields()\n    {\n        $this->unknown = \"\";\n        foreach ($this->desc->getField() as $field) {\n            if ($field->getType() != GPBType::MESSAGE) {\n                continue;\n            }\n            if ($field->isMap()) {\n                $value_field = $field->getMessageType()->getFieldByNumber(2);\n                if ($value_field->getType() != GPBType::MESSAGE) {\n                    continue;\n                }\n                $getter = $field->getGetter();\n                $map = $this->$getter();\n                foreach ($map as $key => $value) {\n                    $value->discardUnknownFields();\n                }\n            } else if ($field->isRepeated()) {\n                $getter = $field->getGetter();\n                $arr = $this->$getter();\n                foreach ($arr as $sub) {\n                    $sub->discardUnknownFields();\n                }\n            } else if (!$field->isRequired() && !$field->isRepeated()) {\n                $getter = $field->getGetter();\n                $sub = $this->$getter();\n                if (!is_null($sub)) {\n                    $sub->discardUnknownFields();\n                }\n            }\n        }\n    }\n\n    /**\n     * Merges the contents of the specified message into current message.\n     *\n     * This method merges the contents of the specified message into the\n     * current message. Singular fields that are set in the specified message\n     * overwrite the corresponding fields in the current message.  Repeated\n     * fields are appended. Map fields key-value pairs are overwritten.\n     * Singular/Oneof sub-messages are recursively merged. All overwritten\n     * sub-messages are deep-copied.\n     *\n     * @param object $msg Protobuf message to be merged from.\n     * @return null\n     */\n    public function mergeFrom($msg)\n    {\n        if (get_class($this) !== get_class($msg)) {\n            user_error(\"Cannot merge messages with different class.\");\n            return;\n        }\n\n        foreach ($this->desc->getField() as $field) {\n            $setter = $field->getSetter();\n            $getter = $field->getGetter();\n            if ($field->isMap()) {\n                if (count($msg->$getter()) != 0) {\n                    $value_field = $field->getMessageType()->getFieldByNumber(2);\n                    foreach ($msg->$getter() as $key => $value) {\n                        if ($value_field->getType() == GPBType::MESSAGE) {\n                            $klass = $value_field->getMessageType()->getClass();\n                            $copy = new $klass;\n                            $copy->mergeFrom($value);\n\n                            $this->kvUpdateHelper($field, $key, $copy);\n                        } else {\n                            $this->kvUpdateHelper($field, $key, $value);\n                        }\n                    }\n                }\n            } else if ($field->isRepeated()) {\n                if (count($msg->$getter()) != 0) {\n                    foreach ($msg->$getter() as $tmp) {\n                        if ($field->getType() == GPBType::MESSAGE) {\n                            $klass = $field->getMessageType()->getClass();\n                            $copy = new $klass;\n                            $copy->mergeFrom($tmp);\n                            $this->appendHelper($field, $copy);\n                        } else {\n                            $this->appendHelper($field, $tmp);\n                        }\n                    }\n                }\n            } else if (!$field->isRequired() && !$field->isRepeated()) {\n                if($msg->$getter() !== $this->defaultValue($field)) {\n                    $tmp = $msg->$getter();\n                    if ($field->getType() == GPBType::MESSAGE) {\n                        if (is_null($this->$getter())) {\n                            $klass = $field->getMessageType()->getClass();\n                            $new_msg = new $klass;\n                            $this->$setter($new_msg);\n                        }\n                        $this->$getter()->mergeFrom($tmp);\n                    } else {\n                        $this->$setter($tmp);\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Parses a protocol buffer contained in a string.\n     *\n     * This function takes a string in the (non-human-readable) binary wire\n     * format, matching the encoding output by serializeToString().\n     * See mergeFrom() for merging behavior, if the field is already set in the\n     * specified message.\n     *\n     * @param string $data Binary protobuf data.\n     * @return null\n     * @throws \\Exception Invalid data.\n     */\n    public function mergeFromString($data)\n    {\n        $input = new CodedInputStream($data);\n        $this->parseFromStream($input);\n    }\n\n    /**\n     * Parses a json string to protobuf message.\n     *\n     * This function takes a string in the json wire format, matching the\n     * encoding output by serializeToJsonString().\n     * See mergeFrom() for merging behavior, if the field is already set in the\n     * specified message.\n     *\n     * @param string $data Json protobuf data.\n     * @param bool $ignore_unknown\n     * @return null\n     * @throws \\Exception Invalid data.\n     */\n    public function mergeFromJsonString($data, $ignore_unknown = false)\n    {\n        $input = new RawInputStream($data);\n        $this->parseFromJsonStream($input, $ignore_unknown);\n    }\n\n    /**\n     * @ignore\n     */\n    public function parseFromStream($input)\n    {\n        while (true) {\n            $tag = $input->readTag();\n            // End of input.  This is a valid place to end, so return true.\n            if ($tag === 0) {\n                return true;\n            }\n\n            $number = GPBWire::getTagFieldNumber($tag);\n            $field = $this->desc->getFieldByNumber($number);\n\n            $this->parseFieldFromStream($tag, $input, $field);\n        }\n    }\n\n    private function convertJsonValueToProtoValue(\n        $value,\n        $field,\n        $ignore_unknown,\n        $is_map_key = false)\n    {\n        switch ($field->getType()) {\n            case GPBType::MESSAGE:\n                $klass = $field->getMessageType()->getClass();\n                $submsg = new $klass;\n\n                if (is_a($submsg, \"Google\\Protobuf\\Duration\")) {\n                    if (is_null($value)) {\n                        return $this->defaultValue($field);\n                    } else if (!is_string($value)) {\n                        throw new GPBDecodeException(\"Expect string.\");\n                    }\n                    return GPBUtil::parseDuration($value);\n                } else if ($field->isTimestamp()) {\n                    if (is_null($value)) {\n                        return $this->defaultValue($field);\n                    } else if (!is_string($value)) {\n                        throw new GPBDecodeException(\"Expect string.\");\n                    }\n                    try {\n                        $timestamp = GPBUtil::parseTimestamp($value);\n                    } catch (\\Exception $e) {\n                        throw new GPBDecodeException(\n                            \"Invalid RFC 3339 timestamp: \".$e->getMessage());\n                    }\n\n                    $submsg->setSeconds($timestamp->getSeconds());\n                    $submsg->setNanos($timestamp->getNanos());\n                } else if (is_a($submsg, \"Google\\Protobuf\\FieldMask\")) {\n                    if (is_null($value)) {\n                        return $this->defaultValue($field);\n                    }\n                    try {\n                        return GPBUtil::parseFieldMask($value);\n                    } catch (\\Exception $e) {\n                        throw new GPBDecodeException(\n                            \"Invalid FieldMask: \".$e->getMessage());\n                    }\n                } else {\n                    if (is_null($value) &&\n                        !is_a($submsg, \"Google\\Protobuf\\Value\")) {\n                        return $this->defaultValue($field);\n                    }\n                    if (GPBUtil::hasSpecialJsonMapping($submsg)) {\n                    } elseif (!is_object($value) && !is_array($value)) {\n                        throw new GPBDecodeException(\"Expect message.\");\n                    }\n                    $submsg->mergeFromJsonArray($value, $ignore_unknown);\n                }\n                return $submsg;\n            case GPBType::ENUM:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (is_integer($value)) {\n                    return $value;\n                }\n                $enum_value = $field->getEnumType()->getValueByName($value);\n                if (!is_null($enum_value)) {\n                    return $enum_value->getNumber();\n                } else if ($ignore_unknown) {\n                    return $this->defaultValue($field);\n                } else {\n                  throw new GPBDecodeException(\n                          \"Enum field only accepts integer or enum value name\");\n                }\n            case GPBType::STRING:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (is_numeric($value)) {\n                    return strval($value);\n                }\n                if (!is_string($value)) {\n                    throw new GPBDecodeException(\n                        \"String field only accepts string value\");\n                }\n                return $value;\n            case GPBType::BYTES:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (!is_string($value)) {\n                    throw new GPBDecodeException(\n                        \"Byte field only accepts string value\");\n                }\n                $proto_value = base64_decode($value, true);\n                if ($proto_value === false) {\n                    throw new GPBDecodeException(\"Invalid base64 characters\");\n                }\n                return $proto_value;\n            case GPBType::BOOL:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if ($is_map_key) {\n                    if ($value === \"true\") {\n                        return true;\n                    }\n                    if ($value === \"false\") {\n                        return false;\n                    }\n                    throw new GPBDecodeException(\n                        \"Bool field only accepts bool value\");\n                }\n                if (!is_bool($value)) {\n                    throw new GPBDecodeException(\n                        \"Bool field only accepts bool value\");\n                }\n                return $value;\n            case GPBType::FLOAT:\n            case GPBType::DOUBLE:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if ($value === \"Infinity\") {\n                    return INF;\n                }\n                if ($value === \"-Infinity\") {\n                    return -INF;\n                }\n                if ($value === \"NaN\") {\n                    return NAN;\n                }\n                return $value;\n            case GPBType::INT32:\n            case GPBType::SINT32:\n            case GPBType::SFIXED32:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (!is_numeric($value)) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int32 field\");\n                }\n                if (is_string($value) && trim($value) !== $value) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int32 field\");\n                }\n                if (bccomp($value, \"2147483647\") > 0) {\n                   throw new GPBDecodeException(\n                       \"Int32 too large\");\n                }\n                if (bccomp($value, \"-2147483648\") < 0) {\n                   throw new GPBDecodeException(\n                       \"Int32 too small\");\n                }\n                return $value;\n            case GPBType::UINT32:\n            case GPBType::FIXED32:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (!is_numeric($value)) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for uint32 field\");\n                }\n                if (is_string($value) && trim($value) !== $value) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int32 field\");\n                }\n                if (bccomp($value, 4294967295) > 0) {\n                    throw new GPBDecodeException(\n                        \"Uint32 too large\");\n                }\n                return $value;\n            case GPBType::INT64:\n            case GPBType::SINT64:\n            case GPBType::SFIXED64:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (!is_numeric($value)) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int64 field\");\n                }\n                if (is_string($value) && trim($value) !== $value) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int64 field\");\n                }\n                if (bccomp($value, \"9223372036854775807\") > 0) {\n                    throw new GPBDecodeException(\n                        \"Int64 too large\");\n                }\n                if (bccomp($value, \"-9223372036854775808\") < 0) {\n                    throw new GPBDecodeException(\n                        \"Int64 too small\");\n                }\n                return $value;\n            case GPBType::UINT64:\n            case GPBType::FIXED64:\n                if (is_null($value)) {\n                    return $this->defaultValue($field);\n                }\n                if (!is_numeric($value)) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int64 field\");\n                }\n                if (is_string($value) && trim($value) !== $value) {\n                   throw new GPBDecodeException(\n                       \"Invalid data type for int64 field\");\n                }\n                if (bccomp($value, \"18446744073709551615\") > 0) {\n                    throw new GPBDecodeException(\n                        \"Uint64 too large\");\n                }\n                if (bccomp($value, \"9223372036854775807\") > 0) {\n                    $value = bcsub($value, \"18446744073709551616\");\n                }\n                return $value;\n            default:\n                return $value;\n        }\n    }\n\n    /**\n     * Populates the message from a user-supplied PHP array. Array keys\n     * correspond to Message properties and nested message properties.\n     *\n     * Example:\n     * ```\n     * $message->mergeFromArray([\n     *     'name' => 'This is a message name',\n     *     'interval' => [\n     *          'startTime' => time() - 60,\n     *          'endTime' => time(),\n     *     ]\n     * ]);\n     * ```\n     *\n     * This method will trigger an error if it is passed data that cannot\n     * be converted to the correct type. For example, a StringValue field\n     * must receive data that is either a string or a StringValue object.\n     *\n     * @param array $array An array containing message properties and values.\n     * @return null\n     */\n    protected function mergeFromArray(array $array)\n    {\n        // Just call the setters for the field names\n        foreach ($array as $key => $value) {\n            $field = $this->desc->getFieldByName($key);\n            if (is_null($field)) {\n                throw new \\UnexpectedValueException(\n                    'Invalid message property: ' . $key);\n            }\n            $setter = $field->getSetter();\n            if ($field->isMap()) {\n                $valueField = $field->getMessageType()->getFieldByName('value');\n                if (!is_null($valueField) && $valueField->isWrapperType()) {\n                    self::normalizeArrayElementsToMessageType($value, $valueField->getMessageType()->getClass());\n                }\n            } elseif ($field->isWrapperType()) {\n                $class = $field->getMessageType()->getClass();\n                if ($field->isRepeated()) {\n                    self::normalizeArrayElementsToMessageType($value, $class);\n                } else {\n                    self::normalizeToMessageType($value, $class);\n                }\n            }\n            $this->$setter($value);\n        }\n    }\n\n    /**\n     * Tries to normalize the elements in $value into a provided protobuf\n     * wrapper type $class. If $value is any type other than array, we do\n     * not do any conversion, and instead rely on the existing protobuf\n     * type checking. If $value is an array, we process each element and\n     * try to convert it to an instance of $class.\n     *\n     * @param mixed $value The array of values to normalize.\n     * @param string $class The expected wrapper class name\n     */\n    private static function normalizeArrayElementsToMessageType(&$value, $class)\n    {\n        if (!is_array($value)) {\n            // In the case that $value is not an array, we do not want to\n            // attempt any conversion. Note that this includes the cases\n            // when $value is a RepeatedField of MapField. In those cases,\n            // we do not need to convert the elements, as they should\n            // already be the correct types.\n            return;\n        } else {\n            // Normalize each element in the array.\n            foreach ($value as $key => &$elementValue) {\n              self::normalizeToMessageType($elementValue, $class);\n            }\n        }\n    }\n\n    /**\n     * Tries to normalize $value into a provided protobuf wrapper type $class.\n     * If $value is any type other than an object, we attempt to construct an\n     * instance of $class and assign $value to it using the setValue method\n     * shared by all wrapper types.\n     *\n     * This method will raise an error if it receives a type that cannot be\n     * assigned to the wrapper type via setValue.\n     *\n     * @param mixed $value The value to normalize.\n     * @param string $class The expected wrapper class name\n     */\n    private static function normalizeToMessageType(&$value, $class)\n    {\n        if (is_null($value) || is_object($value)) {\n            // This handles the case that $value is an instance of $class. We\n            // choose not to do any more strict checking here, relying on the\n            // existing type checking done by GPBUtil.\n            return;\n        } else {\n            // Try to instantiate $class and set the value\n            try {\n                $msg = new $class;\n                $msg->setValue($value);\n                $value = $msg;\n                return;\n            } catch (\\Exception $exception) {\n                trigger_error(\n                    \"Error normalizing value to type '$class': \" . $exception->getMessage(),\n                    E_USER_ERROR\n                );\n            }\n        }\n    }\n\n    protected function mergeFromJsonArray($array, $ignore_unknown)\n    {\n        if (is_a($this, \"Google\\Protobuf\\Any\")) {\n            $this->clear();\n            $this->setTypeUrl($array[\"@type\"]);\n            $msg = $this->unpack();\n            if (GPBUtil::hasSpecialJsonMapping($msg)) {\n                $msg->mergeFromJsonArray($array[\"value\"], $ignore_unknown);\n            } else {\n                unset($array[\"@type\"]);\n                $msg->mergeFromJsonArray($array, $ignore_unknown);\n            }\n            $this->setValue($msg->serializeToString());\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\DoubleValue\") ||\n            is_a($this, \"Google\\Protobuf\\FloatValue\")  ||\n            is_a($this, \"Google\\Protobuf\\Int64Value\")  ||\n            is_a($this, \"Google\\Protobuf\\UInt64Value\") ||\n            is_a($this, \"Google\\Protobuf\\Int32Value\")  ||\n            is_a($this, \"Google\\Protobuf\\UInt32Value\") ||\n            is_a($this, \"Google\\Protobuf\\BoolValue\")   ||\n            is_a($this, \"Google\\Protobuf\\StringValue\")) {\n            $this->setValue($array);\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\BytesValue\")) {\n            $this->setValue(base64_decode($array));\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\Duration\")) {\n            $this->mergeFrom(GPBUtil::parseDuration($array));\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\FieldMask\")) {\n            $this->mergeFrom(GPBUtil::parseFieldMask($array));\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\Timestamp\")) {\n            $this->mergeFrom(GPBUtil::parseTimestamp($array));\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\Struct\")) {\n            $fields = $this->getFields();\n            foreach($array as $key => $value) {\n                $v = new Value();\n                $v->mergeFromJsonArray($value, $ignore_unknown);\n                $fields[$key] = $v;\n            }\n            return;\n        }\n        if (is_a($this, \"Google\\Protobuf\\Value\")) {\n            if (is_bool($array)) {\n                $this->setBoolValue($array);\n            } elseif (is_string($array)) {\n                $this->setStringValue($array);\n            } elseif (is_null($array)) {\n                $this->setNullValue(0);\n            } elseif (is_double($array) || is_integer($array)) {\n                $this->setNumberValue($array);\n            } elseif (is_array($array)) {\n                if (array_values($array) !== $array) {\n                    // Associative array\n                    $struct_value = $this->getStructValue();\n                    if (is_null($struct_value)) {\n                        $struct_value = new Struct();\n                        $this->setStructValue($struct_value);\n                    }\n                    foreach ($array as $key => $v) {\n                        $value = new Value();\n                        $value->mergeFromJsonArray($v, $ignore_unknown);\n                        $values = $struct_value->getFields();\n                        $values[$key]= $value;\n                    }\n                } else {\n                    // Array\n                    $list_value = $this->getListValue();\n                    if (is_null($list_value)) {\n                        $list_value = new ListValue();\n                        $this->setListValue($list_value);\n                    }\n                    foreach ($array as $v) {\n                        $value = new Value();\n                        $value->mergeFromJsonArray($v, $ignore_unknown);\n                        $values = $list_value->getValues();\n                        $values[]= $value;\n                    }\n                }\n            } else {\n                throw new GPBDecodeException(\"Invalid type for Value.\");\n            }\n            return;\n        }\n        $this->mergeFromArrayJsonImpl($array, $ignore_unknown);\n    }\n\n    private function mergeFromArrayJsonImpl($array, $ignore_unknown)\n    {\n        foreach ($array as $key => $value) {\n            $field = $this->desc->getFieldByJsonName($key);\n            if (is_null($field)) {\n                $field = $this->desc->getFieldByName($key);\n                if (is_null($field)) {\n                    if ($ignore_unknown) {\n                        continue;\n                    } else {\n                        throw new GPBDecodeException(\n                            $key . ' is unknown.'\n                        );\n                    }\n                }\n            }\n            if ($field->isMap()) {\n                if (is_null($value)) {\n                    continue;\n                }\n                $key_field = $field->getMessageType()->getFieldByNumber(1);\n                $value_field = $field->getMessageType()->getFieldByNumber(2);\n                foreach ($value as $tmp_key => $tmp_value) {\n                    if (is_null($tmp_value)) {\n                        throw new \\Exception(\n                            \"Map value field element cannot be null.\");\n                    }\n                    $proto_key = $this->convertJsonValueToProtoValue(\n                        $tmp_key,\n                        $key_field,\n                        $ignore_unknown,\n                        true);\n                    $proto_value = $this->convertJsonValueToProtoValue(\n                        $tmp_value,\n                        $value_field,\n                        $ignore_unknown);\n\n                    // Mapped unknown enum string values should be silently\n                    // ignored if ignore_unknown is set.\n                    if ($value_field->getType() == GPBType::ENUM &&\n                        is_string($tmp_value) &&\n                        is_null(\n                          $value_field->getEnumType()->getValueByName($tmp_value)\n                        ) &&\n                        $ignore_unknown) {\n                        continue;\n                    }\n\n                    self::kvUpdateHelper($field, $proto_key, $proto_value);\n                }\n            } else if ($field->isRepeated()) {\n                if (is_null($value)) {\n                    continue;\n                }\n                foreach ($value as $tmp) {\n                    if (is_null($tmp)) {\n                        throw new \\Exception(\n                            \"Repeated field elements cannot be null.\");\n                    }\n                    $proto_value = $this->convertJsonValueToProtoValue(\n                        $tmp,\n                        $field,\n                        $ignore_unknown);\n\n                    // Repeated unknown enum string values should be silently\n                    // ignored if ignore_unknown is set.\n                    if ($field->getType() == GPBType::ENUM &&\n                        is_string($tmp) &&\n                        is_null($field->getEnumType()->getValueByName($tmp)) &&\n                        $ignore_unknown) {\n                        continue;\n                    }\n\n                    self::appendHelper($field, $proto_value);\n                }\n            } else {\n                $setter = $field->getSetter();\n                $proto_value = $this->convertJsonValueToProtoValue(\n                    $value,\n                    $field,\n                    $ignore_unknown);\n                if ($field->getType() === GPBType::MESSAGE) {\n                    if (is_null($proto_value)) {\n                        continue;\n                    }\n                    $getter = $field->getGetter();\n                    $submsg = $this->$getter();\n                    if (!is_null($submsg)) {\n                        $submsg->mergeFrom($proto_value);\n                        continue;\n                    }\n                }\n                $this->$setter($proto_value);\n            }\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    public function parseFromJsonStream($input, $ignore_unknown)\n    {\n        $array = json_decode($input->getData(), true, 512, JSON_BIGINT_AS_STRING);\n        if ($this instanceof \\Google\\Protobuf\\ListValue) {\n            $array = [\"values\"=>$array];\n        }\n        if (is_null($array)) {\n            if ($this instanceof \\Google\\Protobuf\\Value) {\n              $this->setNullValue(\\Google\\Protobuf\\NullValue::NULL_VALUE);\n              return;\n            } else {\n              throw new GPBDecodeException(\n                  \"Cannot decode json string: \" . $input->getData());\n            }\n        }\n        try {\n            $this->mergeFromJsonArray($array, $ignore_unknown);\n        } catch (\\Exception $e) {\n            throw new GPBDecodeException($e->getMessage(), $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function serializeSingularFieldToStream($field, &$output)\n    {\n        if (!$this->existField($field)) {\n            return true;\n        }\n        $getter = $field->getGetter();\n        $value = $this->$getter();\n        if (!GPBWire::serializeFieldToStream($value, $field, true, $output)) {\n            return false;\n        }\n        return true;\n    }\n\n    /**\n     * @ignore\n     */\n    private function serializeRepeatedFieldToStream($field, &$output)\n    {\n        $getter = $field->getGetter();\n        $values = $this->$getter();\n        $count = count($values);\n        if ($count === 0) {\n            return true;\n        }\n\n        $packed = $field->getPacked();\n        if ($packed) {\n            if (!GPBWire::writeTag(\n                $output,\n                GPBWire::makeTag($field->getNumber(), GPBType::STRING))) {\n                return false;\n            }\n            $size = 0;\n            foreach ($values as $value) {\n                $size += $this->fieldDataOnlyByteSize($field, $value);\n            }\n            if (!$output->writeVarint32($size, true)) {\n                return false;\n            }\n        }\n\n        foreach ($values as $value) {\n            if (!GPBWire::serializeFieldToStream(\n                $value,\n                $field,\n                !$packed,\n                $output)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * @ignore\n     */\n    private function serializeMapFieldToStream($field, $output)\n    {\n        $getter = $field->getGetter();\n        $values = $this->$getter();\n        $count = count($values);\n        if ($count === 0) {\n            return true;\n        }\n\n        foreach ($values as $key => $value) {\n            $map_entry = new MapEntry($field->getMessageType());\n            $map_entry->setKey($key);\n            $map_entry->setValue($value);\n            if (!GPBWire::serializeFieldToStream(\n                $map_entry,\n                $field,\n                true,\n                $output)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * @ignore\n     */\n    private function serializeFieldToStream(&$output, $field)\n    {\n        if ($field->isMap()) {\n            return $this->serializeMapFieldToStream($field, $output);\n        } elseif ($field->isRepeated()) {\n            return $this->serializeRepeatedFieldToStream($field, $output);\n        } else {\n            return $this->serializeSingularFieldToStream($field, $output);\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function serializeFieldToJsonStream(&$output, $field)\n    {\n        $getter = $field->getGetter();\n        $values = $this->$getter();\n        return GPBJsonWire::serializeFieldToStream(\n            $values, $field, $output, !GPBUtil::hasSpecialJsonMapping($this));\n    }\n\n    /**\n     * @ignore\n     */\n    public function serializeToStream(&$output)\n    {\n        $fields = $this->desc->getField();\n        foreach ($fields as $field) {\n            if (!$this->serializeFieldToStream($output, $field)) {\n                return false;\n            }\n        }\n        $output->writeRaw($this->unknown, strlen($this->unknown));\n        return true;\n    }\n\n    /**\n     * @ignore\n     */\n    public function serializeToJsonStream(&$output)\n    {\n        if (is_a($this, 'Google\\Protobuf\\Any')) {\n            $output->writeRaw(\"{\", 1);\n            $type_field = $this->desc->getFieldByNumber(1);\n            $value_msg = $this->unpack();\n\n            // Serialize type url.\n            $output->writeRaw(\"\\\"@type\\\":\", 8);\n            $output->writeRaw(\"\\\"\", 1);\n            $output->writeRaw($this->getTypeUrl(), strlen($this->getTypeUrl()));\n            $output->writeRaw(\"\\\"\", 1);\n\n            // Serialize value\n            if (GPBUtil::hasSpecialJsonMapping($value_msg)) {\n                $output->writeRaw(\",\\\"value\\\":\", 9);\n                $value_msg->serializeToJsonStream($output);\n            } else {\n                $value_fields = $value_msg->desc->getField();\n                foreach ($value_fields as $field) {\n                    if ($value_msg->existField($field)) {\n                        $output->writeRaw(\",\", 1);\n                        if (!$value_msg->serializeFieldToJsonStream($output, $field)) {\n                            return false;\n                        }\n                    }\n                }\n            }\n\n            $output->writeRaw(\"}\", 1);\n        } elseif (is_a($this, 'Google\\Protobuf\\FieldMask')) {\n            $field_mask = GPBUtil::formatFieldMask($this);\n            $output->writeRaw(\"\\\"\", 1);\n            $output->writeRaw($field_mask, strlen($field_mask));\n            $output->writeRaw(\"\\\"\", 1);\n        } elseif (is_a($this, 'Google\\Protobuf\\Duration')) {\n            $duration = GPBUtil::formatDuration($this) . \"s\";\n            $output->writeRaw(\"\\\"\", 1);\n            $output->writeRaw($duration, strlen($duration));\n            $output->writeRaw(\"\\\"\", 1);\n        } elseif (get_class($this) === 'Google\\Protobuf\\Timestamp') {\n            $timestamp = GPBUtil::formatTimestamp($this);\n            $timestamp = json_encode($timestamp);\n            $output->writeRaw($timestamp, strlen($timestamp));\n        } elseif (get_class($this) === 'Google\\Protobuf\\ListValue') {\n            $field = $this->desc->getField()[1];\n            if (!$this->existField($field)) {\n                $output->writeRaw(\"[]\", 2);\n            } else {\n                if (!$this->serializeFieldToJsonStream($output, $field)) {\n                    return false;\n                }\n            }\n        } elseif (get_class($this) === 'Google\\Protobuf\\Struct') {\n            $field = $this->desc->getField()[1];\n            if (!$this->existField($field)) {\n                $output->writeRaw(\"{}\", 2);\n            } else {\n                if (!$this->serializeFieldToJsonStream($output, $field)) {\n                    return false;\n                }\n            }\n        } else {\n            if (!GPBUtil::hasSpecialJsonMapping($this)) {\n                $output->writeRaw(\"{\", 1);\n            }\n            $fields = $this->desc->getField();\n            $first = true;\n            foreach ($fields as $field) {\n                if ($this->existField($field) ||\n                    GPBUtil::hasJsonValue($this)) {\n                    if ($first) {\n                        $first = false;\n                    } else {\n                        $output->writeRaw(\",\", 1);\n                    }\n                    if (!$this->serializeFieldToJsonStream($output, $field)) {\n                        return false;\n                    }\n                }\n            }\n            if (!GPBUtil::hasSpecialJsonMapping($this)) {\n                $output->writeRaw(\"}\", 1);\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Serialize the message to string.\n     * @return string Serialized binary protobuf data.\n     */\n    public function serializeToString()\n    {\n        $output = new CodedOutputStream($this->byteSize());\n        $this->serializeToStream($output);\n        return $output->getData();\n    }\n\n    /**\n     * Serialize the message to json string.\n     * @return string Serialized json protobuf data.\n     */\n    public function serializeToJsonString($options = 0)\n    {\n        $output = new CodedOutputStream($this->jsonByteSize($options), $options);\n        $this->serializeToJsonStream($output);\n        return $output->getData();\n    }\n\n    /**\n     * @ignore\n     */\n    private function existField($field)\n    {\n        $getter = $field->getGetter();\n        $hazzer = \"has\" . substr($getter, 3);\n\n        if (method_exists($this, $hazzer)) {\n          return $this->$hazzer();\n        } else if ($field->getOneofIndex() !== -1) {\n          // For old generated code, which does not have hazzers for oneof\n          // fields.\n          $oneof = $this->desc->getOneofDecl()[$field->getOneofIndex()];\n          $oneof_name = $oneof->getName();\n          return $this->$oneof_name->getNumber() === $field->getNumber();\n        }\n\n        $values = $this->$getter();\n        if ($field->isMap()) {\n            return count($values) !== 0;\n        } elseif ($field->isRepeated()) {\n            return count($values) !== 0;\n        } else {\n            return $values !== $this->defaultValue($field);\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function repeatedFieldDataOnlyByteSize($field)\n    {\n        $size = 0;\n\n        $getter = $field->getGetter();\n        $values = $this->$getter();\n        $count = count($values);\n        if ($count !== 0) {\n            $size += $count * GPBWire::tagSize($field);\n            foreach ($values as $value) {\n                $size += $this->singularFieldDataOnlyByteSize($field);\n            }\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    private function fieldDataOnlyByteSize($field, $value)\n    {\n        $size = 0;\n\n        switch ($field->getType()) {\n            case GPBType::BOOL:\n                $size += 1;\n                break;\n            case GPBType::FLOAT:\n            case GPBType::FIXED32:\n            case GPBType::SFIXED32:\n                $size += 4;\n                break;\n            case GPBType::DOUBLE:\n            case GPBType::FIXED64:\n            case GPBType::SFIXED64:\n                $size += 8;\n                break;\n            case GPBType::INT32:\n            case GPBType::ENUM:\n                $size += GPBWire::varint32Size($value, true);\n                break;\n            case GPBType::UINT32:\n                $size += GPBWire::varint32Size($value);\n                break;\n            case GPBType::UINT64:\n            case GPBType::INT64:\n                $size += GPBWire::varint64Size($value);\n                break;\n            case GPBType::SINT32:\n                $size += GPBWire::sint32Size($value);\n                break;\n            case GPBType::SINT64:\n                $size += GPBWire::sint64Size($value);\n                break;\n            case GPBType::STRING:\n            case GPBType::BYTES:\n                $size += strlen($value);\n                $size += GPBWire::varint32Size($size);\n                break;\n            case GPBType::MESSAGE:\n                $size += $value->byteSize();\n                $size += GPBWire::varint32Size($size);\n                break;\n            case GPBType::GROUP:\n                // TODO: Add support.\n                user_error(\"Unsupported type.\");\n                break;\n            default:\n                user_error(\"Unsupported type.\");\n                return 0;\n        }\n\n        return $size;\n    }\n\n    /**\n     * @ignore\n     */\n    private function fieldDataOnlyJsonByteSize($field, $value, $options = 0)\n    {\n        $size = 0;\n\n        switch ($field->getType()) {\n            case GPBType::SFIXED32:\n            case GPBType::SINT32:\n            case GPBType::INT32:\n                $size += strlen(strval($value));\n                break;\n            case GPBType::FIXED32:\n            case GPBType::UINT32:\n                if ($value < 0) {\n                    $value = bcadd($value, \"4294967296\");\n                }\n                $size += strlen(strval($value));\n                break;\n            case GPBType::FIXED64:\n            case GPBType::UINT64:\n                if ($value < 0) {\n                    $value = bcadd($value, \"18446744073709551616\");\n                }\n                // Intentional fall through.\n            case GPBType::SFIXED64:\n            case GPBType::INT64:\n            case GPBType::SINT64:\n                $size += 2;  // size for \"\"\n                $size += strlen(strval($value));\n                break;\n            case GPBType::FLOAT:\n                if (is_nan($value)) {\n                    $size += strlen(\"NaN\") + 2;\n                } elseif ($value === INF) {\n                    $size += strlen(\"Infinity\") + 2;\n                } elseif ($value === -INF) {\n                    $size += strlen(\"-Infinity\") + 2;\n                } else {\n                    $size += strlen(sprintf(\"%.8g\", $value));\n                }\n                break;\n            case GPBType::DOUBLE:\n                if (is_nan($value)) {\n                    $size += strlen(\"NaN\") + 2;\n                } elseif ($value === INF) {\n                    $size += strlen(\"Infinity\") + 2;\n                } elseif ($value === -INF) {\n                    $size += strlen(\"-Infinity\") + 2;\n                } else {\n                    $size += strlen(sprintf(\"%.17g\", $value));\n                }\n                break;\n            case GPBType::ENUM:\n                $enum_desc = $field->getEnumType();\n                if ($enum_desc->getClass() === \"Google\\Protobuf\\NullValue\") {\n                    $size += 4;\n                    break;\n                }\n                if ($options & PrintOptions::ALWAYS_PRINT_ENUMS_AS_INTS) {\n                    $size += strlen(strval($value)); // size for integer length\n                } else {\n                    $enum_value_desc = $enum_desc->getValueByNumber($value);\n                    if (!is_null($enum_value_desc)) {\n                        $size += 2;  // size for \"\"\n                        $size += strlen($enum_value_desc->getName());\n                    } else {\n                        $str_value = strval($value);\n                        $size += strlen($str_value);\n                    }\n                }\n                break;\n            case GPBType::BOOL:\n                if ($value) {\n                    $size += 4;\n                } else {\n                    $size += 5;\n                }\n                break;\n            case GPBType::STRING:\n                $value = json_encode($value, JSON_UNESCAPED_UNICODE);\n                $size += strlen($value);\n                break;\n            case GPBType::BYTES:\n                # if (is_a($this, \"Google\\Protobuf\\BytesValue\")) {\n                #     $size += strlen(json_encode($value));\n                # } else {\n                #     $size += strlen(base64_encode($value));\n                #     $size += 2;  // size for \\\"\\\"\n                # }\n                $size += strlen(base64_encode($value));\n                $size += 2;  // size for \\\"\\\"\n                break;\n            case GPBType::MESSAGE:\n                $size += $value->jsonByteSize($options);\n                break;\n#             case GPBType::GROUP:\n#                 // TODO: Add support.\n#                 user_error(\"Unsupported type.\");\n#                 break;\n            default:\n                user_error(\"Unsupported type \" . $field->getType());\n                return 0;\n        }\n\n        return $size;\n    }\n\n    /**\n     * @ignore\n     */\n    private function fieldByteSize($field)\n    {\n        $size = 0;\n        if ($field->isMap()) {\n            $getter = $field->getGetter();\n            $values = $this->$getter();\n            $count = count($values);\n            if ($count !== 0) {\n                $size += $count * GPBWire::tagSize($field);\n                $message_type = $field->getMessageType();\n                $key_field = $message_type->getFieldByNumber(1);\n                $value_field = $message_type->getFieldByNumber(2);\n                foreach ($values as $key => $value) {\n                    $data_size = 0;\n                    if ($key != $this->defaultValue($key_field)) {\n                        $data_size += $this->fieldDataOnlyByteSize(\n                            $key_field,\n                            $key);\n                        $data_size += GPBWire::tagSize($key_field);\n                    }\n                    if ($value != $this->defaultValue($value_field)) {\n                        $data_size += $this->fieldDataOnlyByteSize(\n                            $value_field,\n                            $value);\n                        $data_size += GPBWire::tagSize($value_field);\n                    }\n                    $size += GPBWire::varint32Size($data_size) + $data_size;\n                }\n            }\n        } elseif ($field->isRepeated()) {\n            $getter = $field->getGetter();\n            $values = $this->$getter();\n            $count = count($values);\n            if ($count !== 0) {\n                if ($field->getPacked()) {\n                    $data_size = 0;\n                    foreach ($values as $value) {\n                        $data_size += $this->fieldDataOnlyByteSize($field, $value);\n                    }\n                    $size += GPBWire::tagSize($field);\n                    $size += GPBWire::varint32Size($data_size);\n                    $size += $data_size;\n                } else {\n                    $size += $count * GPBWire::tagSize($field);\n                    foreach ($values as $value) {\n                        $size += $this->fieldDataOnlyByteSize($field, $value);\n                    }\n                }\n            }\n        } elseif ($this->existField($field)) {\n            $size += GPBWire::tagSize($field);\n            $getter = $field->getGetter();\n            $value = $this->$getter();\n            $size += $this->fieldDataOnlyByteSize($field, $value);\n        }\n        return $size;\n    }\n\n    /**\n     * @ignore\n     */\n    private function fieldJsonByteSize($field, $options = 0)\n    {\n        $size = 0;\n\n        if ($field->isMap()) {\n            $getter = $field->getGetter();\n            $values = $this->$getter();\n            $count = count($values);\n            if ($count !== 0) {\n                if (!GPBUtil::hasSpecialJsonMapping($this)) {\n                    $size += 3;                              // size for \"\\\"\\\":\".\n                    if ($options & PrintOptions::PRESERVE_PROTO_FIELD_NAMES) {\n                        $size += strlen($field->getName());\n                    } else {\n                        $size += strlen($field->getJsonName());\n                    } // size for field name\n                }\n                $size += 2;  // size for \"{}\".\n                $size += $count - 1;                     // size for commas\n                $getter = $field->getGetter();\n                $map_entry = $field->getMessageType();\n                $key_field = $map_entry->getFieldByNumber(1);\n                $value_field = $map_entry->getFieldByNumber(2);\n                switch ($key_field->getType()) {\n                case GPBType::STRING:\n                case GPBType::SFIXED64:\n                case GPBType::INT64:\n                case GPBType::SINT64:\n                case GPBType::FIXED64:\n                case GPBType::UINT64:\n                    $additional_quote = false;\n                    break;\n                default:\n                    $additional_quote = true;\n                }\n                foreach ($values as $key => $value) {\n                    if ($additional_quote) {\n                        $size += 2;  // size for \"\"\n                    }\n                    $size += $this->fieldDataOnlyJsonByteSize($key_field, $key, $options);\n                    $size += $this->fieldDataOnlyJsonByteSize($value_field, $value, $options);\n                    $size += 1;  // size for :\n                }\n            }\n        } elseif ($field->isRepeated()) {\n            $getter = $field->getGetter();\n            $values = $this->$getter();\n            $count = count($values);\n            if ($count !== 0) {\n                if (!GPBUtil::hasSpecialJsonMapping($this)) {\n                    $size += 3;                              // size for \"\\\"\\\":\".\n                    if ($options & PrintOptions::PRESERVE_PROTO_FIELD_NAMES) {\n                        $size += strlen($field->getName());\n                    } else {\n                        $size += strlen($field->getJsonName());\n                    } // size for field name\n                }\n                $size += 2;  // size for \"[]\".\n                $size += $count - 1;                     // size for commas\n                $getter = $field->getGetter();\n                foreach ($values as $value) {\n                    $size += $this->fieldDataOnlyJsonByteSize($field, $value, $options);\n                }\n            }\n        } elseif ($this->existField($field) || GPBUtil::hasJsonValue($this)) {\n            if (!GPBUtil::hasSpecialJsonMapping($this)) {\n                $size += 3;                              // size for \"\\\"\\\":\".\n                if ($options & PrintOptions::PRESERVE_PROTO_FIELD_NAMES) {\n                    $size += strlen($field->getName());\n                } else {\n                    $size += strlen($field->getJsonName());\n                } // size for field name\n            }\n            $getter = $field->getGetter();\n            $value = $this->$getter();\n            $size += $this->fieldDataOnlyJsonByteSize($field, $value, $options);\n        }\n        return $size;\n    }\n\n    /**\n     * @ignore\n     */\n    public function byteSize()\n    {\n        $size = 0;\n\n        $fields = $this->desc->getField();\n        foreach ($fields as $field) {\n            $size += $this->fieldByteSize($field);\n        }\n        $size += strlen($this->unknown);\n        return $size;\n    }\n\n    private function appendHelper($field, $append_value)\n    {\n        $getter = $field->getGetter();\n        $setter = $field->getSetter();\n\n        $field_arr_value = $this->$getter();\n        $field_arr_value[] = $append_value;\n\n        if (!is_object($field_arr_value)) {\n            $this->$setter($field_arr_value);\n        }\n    }\n\n    private function kvUpdateHelper($field, $update_key, $update_value)\n    {\n        $getter = $field->getGetter();\n        $setter = $field->getSetter();\n\n        $field_arr_value = $this->$getter();\n        $field_arr_value[$update_key] = $update_value;\n\n        if (!is_object($field_arr_value)) {\n            $this->$setter($field_arr_value);\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    public function jsonByteSize($options = 0)\n    {\n        $size = 0;\n        if (is_a($this, 'Google\\Protobuf\\Any')) {\n            // Size for \"{}\".\n            $size += 2;\n\n            // Size for \"\\\"@type\\\":\".\n            $size += 8;\n\n            // Size for url. +2 for \"\" /.\n            $size += strlen($this->getTypeUrl()) + 2;\n\n            $value_msg = $this->unpack();\n            if (GPBUtil::hasSpecialJsonMapping($value_msg)) {\n                // Size for \"\\\",value\\\":\".\n                $size += 9;\n                $size += $value_msg->jsonByteSize($options);\n            } else {\n                $value_size = $value_msg->jsonByteSize($options);\n                // size === 2 it's empty message {} which is not serialized inside any\n                if ($value_size !== 2) {\n                    // Size for value. +1 for comma, -2 for \"{}\".\n                    $size += $value_size -1;\n                }\n            }\n        } elseif (get_class($this) === 'Google\\Protobuf\\FieldMask') {\n            $field_mask = GPBUtil::formatFieldMask($this);\n            $size += strlen($field_mask) + 2;  // 2 for \"\"\n        } elseif (get_class($this) === 'Google\\Protobuf\\Duration') {\n            $duration = GPBUtil::formatDuration($this) . \"s\";\n            $size += strlen($duration) + 2;  // 2 for \"\"\n        } elseif (get_class($this) === 'Google\\Protobuf\\Timestamp') {\n            $timestamp = GPBUtil::formatTimestamp($this);\n            $timestamp = json_encode($timestamp);\n            $size += strlen($timestamp);\n        } elseif (get_class($this) === 'Google\\Protobuf\\ListValue') {\n            $field = $this->desc->getField()[1];\n            if ($this->existField($field)) {\n                $field_size = $this->fieldJsonByteSize($field, $options);\n                $size += $field_size;\n            } else {\n                // Size for \"[]\".\n                $size += 2;\n            }\n        } elseif (get_class($this) === 'Google\\Protobuf\\Struct') {\n            $field = $this->desc->getField()[1];\n            if ($this->existField($field)) {\n                $field_size = $this->fieldJsonByteSize($field, $options);\n                $size += $field_size;\n            } else {\n                // Size for \"{}\".\n                $size += 2;\n            }\n        } else {\n            if (!GPBUtil::hasSpecialJsonMapping($this)) {\n                // Size for \"{}\".\n                $size += 2;\n            }\n\n            $fields = $this->desc->getField();\n            $count = 0;\n            foreach ($fields as $field) {\n                $field_size = $this->fieldJsonByteSize($field, $options);\n                $size += $field_size;\n                if ($field_size != 0) {\n                  $count++;\n                }\n            }\n            // size for comma\n            $size += $count > 0 ? ($count - 1) : 0;\n        }\n        return $size;\n    }\n\n    public function __debugInfo()\n    {\n        if (is_a($this, 'Google\\Protobuf\\FieldMask')) {\n            return ['paths' => $this->getPaths()->__debugInfo()];\n        }\n\n        if (is_a($this, 'Google\\Protobuf\\Value')) {\n            switch ($this->getKind()) {\n                case 'null_value':\n                    return ['nullValue' => $this->getNullValue()];\n                case 'number_value':\n                    return ['numberValue' => $this->getNumberValue()];\n                case 'string_value':\n                    return ['stringValue' => $this->getStringValue()];\n                case 'bool_value':\n                    return ['boolValue' => $this->getBoolValue()];\n                case 'struct_value':\n                    return ['structValue' => $this->getStructValue()->__debugInfo()];\n                case 'list_value':\n                    return ['listValue' => $this->getListValue()->__debugInfo()];\n            }\n            return [];\n        }\n\n        if (is_a($this, 'Google\\Protobuf\\BoolValue')\n            || is_a($this, 'Google\\Protobuf\\BytesValue')\n            || is_a($this, 'Google\\Protobuf\\DoubleValue')\n            || is_a($this, 'Google\\Protobuf\\FloatValue')\n            || is_a($this, 'Google\\Protobuf\\StringValue')\n            || is_a($this, 'Google\\Protobuf\\Int32Value')\n            || is_a($this, 'Google\\Protobuf\\Int64Value')\n            || is_a($this, 'Google\\Protobuf\\UInt32Value')\n            || is_a($this, 'Google\\Protobuf\\UInt64Value')\n        ) {\n            return [\n                'value' => json_decode($this->serializeToJsonString(), true),\n            ];\n        }\n\n        if (\n            is_a($this, 'Google\\Protobuf\\Duration')\n            || is_a($this, 'Google\\Protobuf\\Timestamp')\n        ) {\n            return [\n                'seconds' => $this->getSeconds(),\n                'nanos' => $this->getNanos(),\n            ];\n        }\n\n        return json_decode($this->serializeToJsonString(), true);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageBuilderContext.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBLabel;\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\Descriptor;\nuse Google\\Protobuf\\Internal\\FieldDescriptor;\n\nclass MessageBuilderContext\n{\n\n    private $descriptor;\n    private $pool;\n\n    public function __construct($full_name, $klass, $pool)\n    {\n        $this->descriptor = new Descriptor();\n        $this->descriptor->setFullName($full_name);\n        $this->descriptor->setClass($klass);\n        $this->pool = $pool;\n    }\n\n    private function getFieldDescriptor($name, $label, $type,\n                                      $number, $type_name = null)\n    {\n        $field = new FieldDescriptor();\n        $field->setName($name);\n        $camel_name = implode('', array_map('ucwords', explode('_', $name)));\n        $field->setGetter('get' . $camel_name);\n        $field->setSetter('set' . $camel_name);\n        $field->setType($type);\n        $field->setNumber($number);\n        $field->setLabel($label);\n\n        // At this time, the message/enum type may have not been added to pool.\n        // So we use the type name as place holder and will replace it with the\n        // actual descriptor in cross building.\n        switch ($type) {\n        case GPBType::MESSAGE:\n          $field->setMessageType($type_name);\n          break;\n        case GPBType::ENUM:\n          $field->setEnumType($type_name);\n          break;\n        default:\n          break;\n        }\n\n        return $field;\n    }\n\n    public function optional($name, $type, $number, $type_name = null)\n    {\n        $this->descriptor->addField($this->getFieldDescriptor(\n            $name,\n            GPBLabel::OPTIONAL,\n            $type,\n            $number,\n            $type_name));\n        return $this;\n    }\n\n    public function repeated($name, $type, $number, $type_name = null)\n    {\n        $this->descriptor->addField($this->getFieldDescriptor(\n            $name,\n            GPBLabel::REPEATED,\n            $type,\n            $number,\n            $type_name));\n        return $this;\n    }\n\n    public function required($name, $type, $number, $type_name = null)\n    {\n        $this->descriptor->addField($this->getFieldDescriptor(\n            $name,\n            GPBLabel::REQUIRED,\n            $type,\n            $number,\n            $type_name));\n        return $this;\n    }\n\n    public function finalizeToPool()\n    {\n        $this->pool->addDescriptor($this->descriptor);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MessageOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.MessageOptions</code>\n */\nclass MessageOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Set true to use the old proto1 MessageSet wire format for extensions.\n     * This is provided for backwards-compatibility with the MessageSet wire\n     * format.  You should not use this for any other reason:  It's less\n     * efficient, has fewer features, and is more complicated.\n     * The message must be defined exactly as follows:\n     *   message Foo {\n     *     option message_set_wire_format = true;\n     *     extensions 4 to max;\n     *   }\n     * Note that the message cannot have any defined fields; MessageSets only\n     * have extensions.\n     * All extensions of your type must be singular messages; e.g. they cannot\n     * be int32s, enums, or repeated messages.\n     * Because this is an option, the above two restrictions are not enforced by\n     * the protocol compiler.\n     *\n     * Generated from protobuf field <code>optional bool message_set_wire_format = 1 [default = false];</code>\n     */\n    protected $message_set_wire_format = null;\n    /**\n     * Disables the generation of the standard \"descriptor()\" accessor, which can\n     * conflict with a field of the same name.  This is meant to make migration\n     * from proto1 easier; new code should avoid fields named \"descriptor\".\n     *\n     * Generated from protobuf field <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>\n     */\n    protected $no_standard_descriptor_accessor = null;\n    /**\n     * Is this message deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the message, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating messages.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * Whether the message is an automatically generated map entry type for the\n     * maps field.\n     * For maps fields:\n     *     map<KeyType, ValueType> map_field = 1;\n     * The parsed descriptor looks like:\n     *     message MapFieldEntry {\n     *         option map_entry = true;\n     *         optional KeyType key = 1;\n     *         optional ValueType value = 2;\n     *     }\n     *     repeated MapFieldEntry map_field = 1;\n     * Implementations may choose not to generate the map_entry=true message, but\n     * use a native map in the target language to hold the keys and values.\n     * The reflection APIs in such implementations still need to work as\n     * if the field is a repeated message field.\n     * NOTE: Do not set the option in .proto files. Always use the maps syntax\n     * instead. The option should only be implicitly set by the proto compiler\n     * parser.\n     *\n     * Generated from protobuf field <code>optional bool map_entry = 7;</code>\n     */\n    protected $map_entry = null;\n    /**\n     * Enable the legacy handling of JSON field name conflicts.  This lowercases\n     * and strips underscored from the fields before comparison in proto3 only.\n     * The new behavior takes `json_name` into account and applies to proto2 as\n     * well.\n     * This should only be used as a temporary measure against broken builds due\n     * to the change in behavior for JSON field name conflicts.\n     * TODO This is legacy behavior we plan to remove once downstream\n     * teams have had time to migrate.\n     *\n     * Generated from protobuf field <code>optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $deprecated_legacy_json_field_conflicts = null;\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 12;</code>\n     */\n    protected $features = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type bool $message_set_wire_format\n     *           Set true to use the old proto1 MessageSet wire format for extensions.\n     *           This is provided for backwards-compatibility with the MessageSet wire\n     *           format.  You should not use this for any other reason:  It's less\n     *           efficient, has fewer features, and is more complicated.\n     *           The message must be defined exactly as follows:\n     *             message Foo {\n     *               option message_set_wire_format = true;\n     *               extensions 4 to max;\n     *             }\n     *           Note that the message cannot have any defined fields; MessageSets only\n     *           have extensions.\n     *           All extensions of your type must be singular messages; e.g. they cannot\n     *           be int32s, enums, or repeated messages.\n     *           Because this is an option, the above two restrictions are not enforced by\n     *           the protocol compiler.\n     *     @type bool $no_standard_descriptor_accessor\n     *           Disables the generation of the standard \"descriptor()\" accessor, which can\n     *           conflict with a field of the same name.  This is meant to make migration\n     *           from proto1 easier; new code should avoid fields named \"descriptor\".\n     *     @type bool $deprecated\n     *           Is this message deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for the message, or it will be completely ignored; in the very least,\n     *           this is a formalization for deprecating messages.\n     *     @type bool $map_entry\n     *           Whether the message is an automatically generated map entry type for the\n     *           maps field.\n     *           For maps fields:\n     *               map<KeyType, ValueType> map_field = 1;\n     *           The parsed descriptor looks like:\n     *               message MapFieldEntry {\n     *                   option map_entry = true;\n     *                   optional KeyType key = 1;\n     *                   optional ValueType value = 2;\n     *               }\n     *               repeated MapFieldEntry map_field = 1;\n     *           Implementations may choose not to generate the map_entry=true message, but\n     *           use a native map in the target language to hold the keys and values.\n     *           The reflection APIs in such implementations still need to work as\n     *           if the field is a repeated message field.\n     *           NOTE: Do not set the option in .proto files. Always use the maps syntax\n     *           instead. The option should only be implicitly set by the proto compiler\n     *           parser.\n     *     @type bool $deprecated_legacy_json_field_conflicts\n     *           Enable the legacy handling of JSON field name conflicts.  This lowercases\n     *           and strips underscored from the fields before comparison in proto3 only.\n     *           The new behavior takes `json_name` into account and applies to proto2 as\n     *           well.\n     *           This should only be used as a temporary measure against broken builds due\n     *           to the change in behavior for JSON field name conflicts.\n     *           TODO This is legacy behavior we plan to remove once downstream\n     *           teams have had time to migrate.\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Set true to use the old proto1 MessageSet wire format for extensions.\n     * This is provided for backwards-compatibility with the MessageSet wire\n     * format.  You should not use this for any other reason:  It's less\n     * efficient, has fewer features, and is more complicated.\n     * The message must be defined exactly as follows:\n     *   message Foo {\n     *     option message_set_wire_format = true;\n     *     extensions 4 to max;\n     *   }\n     * Note that the message cannot have any defined fields; MessageSets only\n     * have extensions.\n     * All extensions of your type must be singular messages; e.g. they cannot\n     * be int32s, enums, or repeated messages.\n     * Because this is an option, the above two restrictions are not enforced by\n     * the protocol compiler.\n     *\n     * Generated from protobuf field <code>optional bool message_set_wire_format = 1 [default = false];</code>\n     * @return bool\n     */\n    public function getMessageSetWireFormat()\n    {\n        return isset($this->message_set_wire_format) ? $this->message_set_wire_format : false;\n    }\n\n    public function hasMessageSetWireFormat()\n    {\n        return isset($this->message_set_wire_format);\n    }\n\n    public function clearMessageSetWireFormat()\n    {\n        unset($this->message_set_wire_format);\n    }\n\n    /**\n     * Set true to use the old proto1 MessageSet wire format for extensions.\n     * This is provided for backwards-compatibility with the MessageSet wire\n     * format.  You should not use this for any other reason:  It's less\n     * efficient, has fewer features, and is more complicated.\n     * The message must be defined exactly as follows:\n     *   message Foo {\n     *     option message_set_wire_format = true;\n     *     extensions 4 to max;\n     *   }\n     * Note that the message cannot have any defined fields; MessageSets only\n     * have extensions.\n     * All extensions of your type must be singular messages; e.g. they cannot\n     * be int32s, enums, or repeated messages.\n     * Because this is an option, the above two restrictions are not enforced by\n     * the protocol compiler.\n     *\n     * Generated from protobuf field <code>optional bool message_set_wire_format = 1 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setMessageSetWireFormat($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->message_set_wire_format = $var;\n\n        return $this;\n    }\n\n    /**\n     * Disables the generation of the standard \"descriptor()\" accessor, which can\n     * conflict with a field of the same name.  This is meant to make migration\n     * from proto1 easier; new code should avoid fields named \"descriptor\".\n     *\n     * Generated from protobuf field <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>\n     * @return bool\n     */\n    public function getNoStandardDescriptorAccessor()\n    {\n        return isset($this->no_standard_descriptor_accessor) ? $this->no_standard_descriptor_accessor : false;\n    }\n\n    public function hasNoStandardDescriptorAccessor()\n    {\n        return isset($this->no_standard_descriptor_accessor);\n    }\n\n    public function clearNoStandardDescriptorAccessor()\n    {\n        unset($this->no_standard_descriptor_accessor);\n    }\n\n    /**\n     * Disables the generation of the standard \"descriptor()\" accessor, which can\n     * conflict with a field of the same name.  This is meant to make migration\n     * from proto1 easier; new code should avoid fields named \"descriptor\".\n     *\n     * Generated from protobuf field <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setNoStandardDescriptorAccessor($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->no_standard_descriptor_accessor = $var;\n\n        return $this;\n    }\n\n    /**\n     * Is this message deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the message, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating messages.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this message deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the message, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating messages.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 3 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * Whether the message is an automatically generated map entry type for the\n     * maps field.\n     * For maps fields:\n     *     map<KeyType, ValueType> map_field = 1;\n     * The parsed descriptor looks like:\n     *     message MapFieldEntry {\n     *         option map_entry = true;\n     *         optional KeyType key = 1;\n     *         optional ValueType value = 2;\n     *     }\n     *     repeated MapFieldEntry map_field = 1;\n     * Implementations may choose not to generate the map_entry=true message, but\n     * use a native map in the target language to hold the keys and values.\n     * The reflection APIs in such implementations still need to work as\n     * if the field is a repeated message field.\n     * NOTE: Do not set the option in .proto files. Always use the maps syntax\n     * instead. The option should only be implicitly set by the proto compiler\n     * parser.\n     *\n     * Generated from protobuf field <code>optional bool map_entry = 7;</code>\n     * @return bool\n     */\n    public function getMapEntry()\n    {\n        return isset($this->map_entry) ? $this->map_entry : false;\n    }\n\n    public function hasMapEntry()\n    {\n        return isset($this->map_entry);\n    }\n\n    public function clearMapEntry()\n    {\n        unset($this->map_entry);\n    }\n\n    /**\n     * Whether the message is an automatically generated map entry type for the\n     * maps field.\n     * For maps fields:\n     *     map<KeyType, ValueType> map_field = 1;\n     * The parsed descriptor looks like:\n     *     message MapFieldEntry {\n     *         option map_entry = true;\n     *         optional KeyType key = 1;\n     *         optional ValueType value = 2;\n     *     }\n     *     repeated MapFieldEntry map_field = 1;\n     * Implementations may choose not to generate the map_entry=true message, but\n     * use a native map in the target language to hold the keys and values.\n     * The reflection APIs in such implementations still need to work as\n     * if the field is a repeated message field.\n     * NOTE: Do not set the option in .proto files. Always use the maps syntax\n     * instead. The option should only be implicitly set by the proto compiler\n     * parser.\n     *\n     * Generated from protobuf field <code>optional bool map_entry = 7;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setMapEntry($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->map_entry = $var;\n\n        return $this;\n    }\n\n    /**\n     * Enable the legacy handling of JSON field name conflicts.  This lowercases\n     * and strips underscored from the fields before comparison in proto3 only.\n     * The new behavior takes `json_name` into account and applies to proto2 as\n     * well.\n     * This should only be used as a temporary measure against broken builds due\n     * to the change in behavior for JSON field name conflicts.\n     * TODO This is legacy behavior we plan to remove once downstream\n     * teams have had time to migrate.\n     *\n     * Generated from protobuf field <code>optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true];</code>\n     * @return bool\n     * @deprecated\n     */\n    public function getDeprecatedLegacyJsonFieldConflicts()\n    {\n        if (isset($this->deprecated_legacy_json_field_conflicts)) {\n            @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->deprecated_legacy_json_field_conflicts) ? $this->deprecated_legacy_json_field_conflicts : false;\n    }\n\n    public function hasDeprecatedLegacyJsonFieldConflicts()\n    {\n        if (isset($this->deprecated_legacy_json_field_conflicts)) {\n            @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        }\n        return isset($this->deprecated_legacy_json_field_conflicts);\n    }\n\n    public function clearDeprecatedLegacyJsonFieldConflicts()\n    {\n        @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        unset($this->deprecated_legacy_json_field_conflicts);\n    }\n\n    /**\n     * Enable the legacy handling of JSON field name conflicts.  This lowercases\n     * and strips underscored from the fields before comparison in proto3 only.\n     * The new behavior takes `json_name` into account and applies to proto2 as\n     * well.\n     * This should only be used as a temporary measure against broken builds due\n     * to the change in behavior for JSON field name conflicts.\n     * TODO This is legacy behavior we plan to remove once downstream\n     * teams have had time to migrate.\n     *\n     * Generated from protobuf field <code>optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true];</code>\n     * @param bool $var\n     * @return $this\n     * @deprecated\n     */\n    public function setDeprecatedLegacyJsonFieldConflicts($var)\n    {\n        @trigger_error('deprecated_legacy_json_field_conflicts is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkBool($var);\n        $this->deprecated_legacy_json_field_conflicts = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 12;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 12;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a method of a service.\n *\n * Generated from protobuf message <code>google.protobuf.MethodDescriptorProto</code>\n */\nclass MethodDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Input and output type names.  These are resolved in the same way as\n     * FieldDescriptorProto.type_name, but must refer to a message type.\n     *\n     * Generated from protobuf field <code>optional string input_type = 2;</code>\n     */\n    protected $input_type = null;\n    /**\n     * Generated from protobuf field <code>optional string output_type = 3;</code>\n     */\n    protected $output_type = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MethodOptions options = 4;</code>\n     */\n    protected $options = null;\n    /**\n     * Identifies if client streams multiple client messages\n     *\n     * Generated from protobuf field <code>optional bool client_streaming = 5 [default = false];</code>\n     */\n    protected $client_streaming = null;\n    /**\n     * Identifies if server streams multiple server messages\n     *\n     * Generated from protobuf field <code>optional bool server_streaming = 6 [default = false];</code>\n     */\n    protected $server_streaming = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type string $input_type\n     *           Input and output type names.  These are resolved in the same way as\n     *           FieldDescriptorProto.type_name, but must refer to a message type.\n     *     @type string $output_type\n     *     @type \\Google\\Protobuf\\Internal\\MethodOptions $options\n     *     @type bool $client_streaming\n     *           Identifies if client streams multiple client messages\n     *     @type bool $server_streaming\n     *           Identifies if server streams multiple server messages\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Input and output type names.  These are resolved in the same way as\n     * FieldDescriptorProto.type_name, but must refer to a message type.\n     *\n     * Generated from protobuf field <code>optional string input_type = 2;</code>\n     * @return string\n     */\n    public function getInputType()\n    {\n        return isset($this->input_type) ? $this->input_type : '';\n    }\n\n    public function hasInputType()\n    {\n        return isset($this->input_type);\n    }\n\n    public function clearInputType()\n    {\n        unset($this->input_type);\n    }\n\n    /**\n     * Input and output type names.  These are resolved in the same way as\n     * FieldDescriptorProto.type_name, but must refer to a message type.\n     *\n     * Generated from protobuf field <code>optional string input_type = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setInputType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->input_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string output_type = 3;</code>\n     * @return string\n     */\n    public function getOutputType()\n    {\n        return isset($this->output_type) ? $this->output_type : '';\n    }\n\n    public function hasOutputType()\n    {\n        return isset($this->output_type);\n    }\n\n    public function clearOutputType()\n    {\n        unset($this->output_type);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string output_type = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setOutputType($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->output_type = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MethodOptions options = 4;</code>\n     * @return \\Google\\Protobuf\\Internal\\MethodOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MethodOptions options = 4;</code>\n     * @param \\Google\\Protobuf\\Internal\\MethodOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\MethodOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n    /**\n     * Identifies if client streams multiple client messages\n     *\n     * Generated from protobuf field <code>optional bool client_streaming = 5 [default = false];</code>\n     * @return bool\n     */\n    public function getClientStreaming()\n    {\n        return isset($this->client_streaming) ? $this->client_streaming : false;\n    }\n\n    public function hasClientStreaming()\n    {\n        return isset($this->client_streaming);\n    }\n\n    public function clearClientStreaming()\n    {\n        unset($this->client_streaming);\n    }\n\n    /**\n     * Identifies if client streams multiple client messages\n     *\n     * Generated from protobuf field <code>optional bool client_streaming = 5 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setClientStreaming($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->client_streaming = $var;\n\n        return $this;\n    }\n\n    /**\n     * Identifies if server streams multiple server messages\n     *\n     * Generated from protobuf field <code>optional bool server_streaming = 6 [default = false];</code>\n     * @return bool\n     */\n    public function getServerStreaming()\n    {\n        return isset($this->server_streaming) ? $this->server_streaming : false;\n    }\n\n    public function hasServerStreaming()\n    {\n        return isset($this->server_streaming);\n    }\n\n    public function clearServerStreaming()\n    {\n        unset($this->server_streaming);\n    }\n\n    /**\n     * Identifies if server streams multiple server messages\n     *\n     * Generated from protobuf field <code>optional bool server_streaming = 6 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setServerStreaming($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->server_streaming = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions/IdempotencyLevel.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\MethodOptions;\n\nuse UnexpectedValueException;\n\n/**\n * Is this method side-effect-free (or safe in HTTP parlance), or idempotent,\n * or neither? HTTP based RPC implementation may choose GET verb for safe\n * methods, and PUT verb for idempotent methods instead of the default POST.\n *\n * Protobuf type <code>google.protobuf.MethodOptions.IdempotencyLevel</code>\n */\nclass IdempotencyLevel\n{\n    /**\n     * Generated from protobuf enum <code>IDEMPOTENCY_UNKNOWN = 0;</code>\n     */\n    const IDEMPOTENCY_UNKNOWN = 0;\n    /**\n     * implies idempotent\n     *\n     * Generated from protobuf enum <code>NO_SIDE_EFFECTS = 1;</code>\n     */\n    const NO_SIDE_EFFECTS = 1;\n    /**\n     * idempotent, but may have side effects\n     *\n     * Generated from protobuf enum <code>IDEMPOTENT = 2;</code>\n     */\n    const IDEMPOTENT = 2;\n\n    private static $valueToName = [\n        self::IDEMPOTENCY_UNKNOWN => 'IDEMPOTENCY_UNKNOWN',\n        self::NO_SIDE_EFFECTS => 'NO_SIDE_EFFECTS',\n        self::IDEMPOTENT => 'IDEMPOTENT',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/MethodOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.MethodOptions</code>\n */\nclass MethodOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Is this method deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the method, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating methods.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 33 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN];</code>\n     */\n    protected $idempotency_level = null;\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 35;</code>\n     */\n    protected $features = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type bool $deprecated\n     *           Is this method deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for the method, or it will be completely ignored; in the very least,\n     *           this is a formalization for deprecating methods.\n     *     @type int $idempotency_level\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Is this method deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the method, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating methods.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 33 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this method deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the method, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating methods.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 33 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN];</code>\n     * @return int\n     */\n    public function getIdempotencyLevel()\n    {\n        return isset($this->idempotency_level) ? $this->idempotency_level : 0;\n    }\n\n    public function hasIdempotencyLevel()\n    {\n        return isset($this->idempotency_level);\n    }\n\n    public function clearIdempotencyLevel()\n    {\n        unset($this->idempotency_level);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34 [default = IDEMPOTENCY_UNKNOWN];</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setIdempotencyLevel($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Internal\\MethodOptions\\IdempotencyLevel::class);\n        $this->idempotency_level = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 35;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 35;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass OneofDescriptor\n{\n    use HasPublicDescriptorTrait;\n\n    private $name;\n    /** @var \\Google\\Protobuf\\FieldDescriptor[] $fields */\n    private $fields;\n\n    public function __construct()\n    {\n        $this->public_desc = new \\Google\\Protobuf\\OneofDescriptor($this);\n    }\n\n    public function setName($name)\n    {\n        $this->name = $name;\n    }\n\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    public function addField(FieldDescriptor $field)\n    {\n        $this->fields[] = $field;\n    }\n\n    public function getFields()\n    {\n        return $this->fields;\n    }\n\n    public function isSynthetic()\n    {\n        return !is_null($this->fields) && count($this->fields) === 1\n            && $this->fields[0]->getProto3Optional();\n    }\n\n    public static function buildFromProto($oneof_proto, $desc, $index)\n    {\n        $oneof = new OneofDescriptor();\n        $oneof->setName($oneof_proto->getName());\n        foreach ($desc->getField() as $field) {\n            /** @var FieldDescriptor $field */\n            if ($field->getOneofIndex() == $index) {\n                $oneof->addField($field);\n                $field->setContainingOneof($oneof);\n            }\n        }\n        return $oneof;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a oneof.\n *\n * Generated from protobuf message <code>google.protobuf.OneofDescriptorProto</code>\n */\nclass OneofDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.OneofOptions options = 2;</code>\n     */\n    protected $options = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type \\Google\\Protobuf\\Internal\\OneofOptions $options\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.OneofOptions options = 2;</code>\n     * @return \\Google\\Protobuf\\Internal\\OneofOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.OneofOptions options = 2;</code>\n     * @param \\Google\\Protobuf\\Internal\\OneofOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\OneofOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofField.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass OneofField\n{\n\n    private $desc;\n    private $field_name;\n    private $number = 0;\n    private $value;\n\n    public function __construct($desc)\n    {\n        $this->desc = $desc;\n    }\n\n    public function setValue($value)\n    {\n        $this->value = $value;\n    }\n\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    public function setFieldName($field_name)\n    {\n        $this->field_name = $field_name;\n    }\n\n    public function getFieldName()\n    {\n        return $this->field_name;\n    }\n\n    public function setNumber($number)\n    {\n        $this->number = $number;\n    }\n\n    public function getNumber()\n    {\n        return $this->number;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/OneofOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.OneofOptions</code>\n */\nclass OneofOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 1;</code>\n     */\n    protected $features = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 1;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/RawInputStream.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf\\Internal;\n\nclass RawInputStream\n{\n\n    private $buffer;\n\n    public function __construct($buffer)\n    {\n        $this->buffer = $buffer;\n    }\n\n    public function getData()\n    {\n        return $this->buffer;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedField.php",
    "content": "<?php\n\nnamespace Google\\Protobuf\\Internal;\n\nif (false) {\n    /**\n     * This class is deprecated. Use Google\\Protobuf\\RepeatedField instead.\n     * @deprecated\n     */\n    class RepeatedField extends \\Google\\Protobuf\\RepeatedField {}\n}\nclass_exists(\\Google\\Protobuf\\RepeatedField::class);\n@trigger_error('Google\\Protobuf\\Internal\\RepeatedField is deprecated and will be removed in the next major release. Use Google\\Protobuf\\RepeatedField instead', E_USER_DEPRECATED);\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/RepeatedFieldIter.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\n/**\n * RepeatedField and RepeatedFieldIter are used by generated protocol message\n * classes to manipulate repeated fields.\n */\n\nnamespace Google\\Protobuf\\Internal;\n\n/**\n * RepeatedFieldIter is used to iterate RepeatedField. It is also need for the\n * foreach syntax.\n */\nclass RepeatedFieldIter implements \\Iterator\n{\n\n    /**\n     * @ignore\n     */\n    private $position;\n    /**\n     * @ignore\n     */\n    private $container;\n\n    /**\n     * Create iterator instance for RepeatedField.\n     *\n     * @param array $container\n     * @ignore\n     */\n    public function __construct($container)\n    {\n        $this->position = 0;\n        $this->container = $container;\n    }\n\n    /**\n     * Reset the status of the iterator\n     *\n     * @return void\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function rewind()\n    {\n        $this->position = 0;\n    }\n\n    /**\n     * Return the element at the current position.\n     *\n     * @return object The element at the current position.\n     * @todo need to add return type mixed (require update php version to 8.0)\n     */\n    #[\\ReturnTypeWillChange]\n    public function current()\n    {\n        return $this->container[$this->position];\n    }\n\n    /**\n     * Return the current position.\n     *\n     * @return integer The current position.\n     * @todo need to add return type mixed (require update php version to 8.0)\n     */\n    #[\\ReturnTypeWillChange]\n    public function key()\n    {\n        return $this->position;\n    }\n\n    /**\n     * Move to the next position.\n     *\n     * @return void\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function next()\n    {\n        ++$this->position;\n    }\n\n    /**\n     * Check whether there are more elements to iterate.\n     *\n     * @return bool True if there are more elements to iterate.\n     */\n    public function valid(): bool\n    {\n        return isset($this->container[$this->position]);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceDescriptorProto.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Describes a service.\n *\n * Generated from protobuf message <code>google.protobuf.ServiceDescriptorProto</code>\n */\nclass ServiceDescriptorProto extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     */\n    protected $name = null;\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>\n     */\n    private $method;\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.ServiceOptions options = 3;</code>\n     */\n    protected $options = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *     @type \\Google\\Protobuf\\Internal\\MethodDescriptorProto[] $method\n     *     @type \\Google\\Protobuf\\Internal\\ServiceOptions $options\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return isset($this->name) ? $this->name : '';\n    }\n\n    public function hasName()\n    {\n        return isset($this->name);\n    }\n\n    public function clearName()\n    {\n        unset($this->name);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\MethodDescriptorProto>\n     */\n    public function getMethod()\n    {\n        return $this->method;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>\n     * @param \\Google\\Protobuf\\Internal\\MethodDescriptorProto[] $var\n     * @return $this\n     */\n    public function setMethod($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\MethodDescriptorProto::class);\n        $this->method = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.ServiceOptions options = 3;</code>\n     * @return \\Google\\Protobuf\\Internal\\ServiceOptions|null\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    public function hasOptions()\n    {\n        return isset($this->options);\n    }\n\n    public function clearOptions()\n    {\n        unset($this->options);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional .google.protobuf.ServiceOptions options = 3;</code>\n     * @param \\Google\\Protobuf\\Internal\\ServiceOptions $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\ServiceOptions::class);\n        $this->options = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/ServiceOptions.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.ServiceOptions</code>\n */\nclass ServiceOptions extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 34;</code>\n     */\n    protected $features = null;\n    /**\n     * Is this service deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the service, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating services.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 33 [default = false];</code>\n     */\n    protected $deprecated = null;\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     */\n    private $uninterpreted_option;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\FeatureSet $features\n     *           Any features defined in the specific edition.\n     *           WARNING: This field should only be used by protobuf plugins or special\n     *           cases like the proto compiler. Other uses are discouraged and\n     *           developers should rely on the protoreflect APIs for their client language.\n     *     @type bool $deprecated\n     *           Is this service deprecated?\n     *           Depending on the target platform, this can emit Deprecated annotations\n     *           for the service, or it will be completely ignored; in the very least,\n     *           this is a formalization for deprecating services.\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption[] $uninterpreted_option\n     *           The parser stores options it doesn't recognize here. See above.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 34;</code>\n     * @return \\Google\\Protobuf\\Internal\\FeatureSet|null\n     */\n    public function getFeatures()\n    {\n        return $this->features;\n    }\n\n    public function hasFeatures()\n    {\n        return isset($this->features);\n    }\n\n    public function clearFeatures()\n    {\n        unset($this->features);\n    }\n\n    /**\n     * Any features defined in the specific edition.\n     * WARNING: This field should only be used by protobuf plugins or special\n     * cases like the proto compiler. Other uses are discouraged and\n     * developers should rely on the protoreflect APIs for their client language.\n     *\n     * Generated from protobuf field <code>optional .google.protobuf.FeatureSet features = 34;</code>\n     * @param \\Google\\Protobuf\\Internal\\FeatureSet $var\n     * @return $this\n     */\n    public function setFeatures($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Internal\\FeatureSet::class);\n        $this->features = $var;\n\n        return $this;\n    }\n\n    /**\n     * Is this service deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the service, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating services.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 33 [default = false];</code>\n     * @return bool\n     */\n    public function getDeprecated()\n    {\n        return isset($this->deprecated) ? $this->deprecated : false;\n    }\n\n    public function hasDeprecated()\n    {\n        return isset($this->deprecated);\n    }\n\n    public function clearDeprecated()\n    {\n        unset($this->deprecated);\n    }\n\n    /**\n     * Is this service deprecated?\n     * Depending on the target platform, this can emit Deprecated annotations\n     * for the service, or it will be completely ignored; in the very least,\n     * this is a formalization for deprecating services.\n     *\n     * Generated from protobuf field <code>optional bool deprecated = 33 [default = false];</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setDeprecated($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->deprecated = $var;\n\n        return $this;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption>\n     */\n    public function getUninterpretedOption()\n    {\n        return $this->uninterpreted_option;\n    }\n\n    /**\n     * The parser stores options it doesn't recognize here. See above.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption[] $var\n     * @return $this\n     */\n    public function setUninterpretedOption($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption::class);\n        $this->uninterpreted_option = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo/Location.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\SourceCodeInfo;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Generated from protobuf message <code>google.protobuf.SourceCodeInfo.Location</code>\n */\nclass Location extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Identifies which part of the FileDescriptorProto was defined at this\n     * location.\n     * Each element is a field number or an index.  They form a path from\n     * the root FileDescriptorProto to the place where the definition appears.\n     * For example, this path:\n     *   [ 4, 3, 2, 7, 1 ]\n     * refers to:\n     *   file.message_type(3)  // 4, 3\n     *       .field(7)         // 2, 7\n     *       .name()           // 1\n     * This is because FileDescriptorProto.message_type has field number 4:\n     *   repeated DescriptorProto message_type = 4;\n     * and DescriptorProto.field has field number 2:\n     *   repeated FieldDescriptorProto field = 2;\n     * and FieldDescriptorProto.name has field number 1:\n     *   optional string name = 1;\n     * Thus, the above path gives the location of a field name.  If we removed\n     * the last element:\n     *   [ 4, 3, 2, 7 ]\n     * this path refers to the whole field declaration (from the beginning\n     * of the label to the terminating semicolon).\n     *\n     * Generated from protobuf field <code>repeated int32 path = 1 [packed = true];</code>\n     */\n    private $path;\n    /**\n     * Always has exactly three or four elements: start line, start column,\n     * end line (optional, otherwise assumed same as start line), end column.\n     * These are packed into a single field for efficiency.  Note that line\n     * and column numbers are zero-based -- typically you will want to add\n     * 1 to each before displaying to a user.\n     *\n     * Generated from protobuf field <code>repeated int32 span = 2 [packed = true];</code>\n     */\n    private $span;\n    /**\n     * If this SourceCodeInfo represents a complete declaration, these are any\n     * comments appearing before and after the declaration which appear to be\n     * attached to the declaration.\n     * A series of line comments appearing on consecutive lines, with no other\n     * tokens appearing on those lines, will be treated as a single comment.\n     * leading_detached_comments will keep paragraphs of comments that appear\n     * before (but not connected to) the current element. Each paragraph,\n     * separated by empty lines, will be one comment element in the repeated\n     * field.\n     * Only the comment content is provided; comment markers (e.g. //) are\n     * stripped out.  For block comments, leading whitespace and an asterisk\n     * will be stripped from the beginning of each line other than the first.\n     * Newlines are included in the output.\n     * Examples:\n     *   optional int32 foo = 1;  // Comment attached to foo.\n     *   // Comment attached to bar.\n     *   optional int32 bar = 2;\n     *   optional string baz = 3;\n     *   // Comment attached to baz.\n     *   // Another line attached to baz.\n     *   // Comment attached to moo.\n     *   //\n     *   // Another line attached to moo.\n     *   optional double moo = 4;\n     *   // Detached comment for corge. This is not leading or trailing comments\n     *   // to moo or corge because there are blank lines separating it from\n     *   // both.\n     *   // Detached comment for corge paragraph 2.\n     *   optional string corge = 5;\n     *   /* Block comment attached\n     *    * to corge.  Leading asterisks\n     *    * will be removed. {@*}\n     *   /* Block comment attached to\n     *    * grault. {@*}\n     *   optional int32 grault = 6;\n     *   // ignored detached comments.\n     *\n     * Generated from protobuf field <code>optional string leading_comments = 3;</code>\n     */\n    protected $leading_comments = null;\n    /**\n     * Generated from protobuf field <code>optional string trailing_comments = 4;</code>\n     */\n    protected $trailing_comments = null;\n    /**\n     * Generated from protobuf field <code>repeated string leading_detached_comments = 6;</code>\n     */\n    private $leading_detached_comments;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int[] $path\n     *           Identifies which part of the FileDescriptorProto was defined at this\n     *           location.\n     *           Each element is a field number or an index.  They form a path from\n     *           the root FileDescriptorProto to the place where the definition appears.\n     *           For example, this path:\n     *             [ 4, 3, 2, 7, 1 ]\n     *           refers to:\n     *             file.message_type(3)  // 4, 3\n     *                 .field(7)         // 2, 7\n     *                 .name()           // 1\n     *           This is because FileDescriptorProto.message_type has field number 4:\n     *             repeated DescriptorProto message_type = 4;\n     *           and DescriptorProto.field has field number 2:\n     *             repeated FieldDescriptorProto field = 2;\n     *           and FieldDescriptorProto.name has field number 1:\n     *             optional string name = 1;\n     *           Thus, the above path gives the location of a field name.  If we removed\n     *           the last element:\n     *             [ 4, 3, 2, 7 ]\n     *           this path refers to the whole field declaration (from the beginning\n     *           of the label to the terminating semicolon).\n     *     @type int[] $span\n     *           Always has exactly three or four elements: start line, start column,\n     *           end line (optional, otherwise assumed same as start line), end column.\n     *           These are packed into a single field for efficiency.  Note that line\n     *           and column numbers are zero-based -- typically you will want to add\n     *           1 to each before displaying to a user.\n     *     @type string $leading_comments\n     *           If this SourceCodeInfo represents a complete declaration, these are any\n     *           comments appearing before and after the declaration which appear to be\n     *           attached to the declaration.\n     *           A series of line comments appearing on consecutive lines, with no other\n     *           tokens appearing on those lines, will be treated as a single comment.\n     *           leading_detached_comments will keep paragraphs of comments that appear\n     *           before (but not connected to) the current element. Each paragraph,\n     *           separated by empty lines, will be one comment element in the repeated\n     *           field.\n     *           Only the comment content is provided; comment markers (e.g. //) are\n     *           stripped out.  For block comments, leading whitespace and an asterisk\n     *           will be stripped from the beginning of each line other than the first.\n     *           Newlines are included in the output.\n     *           Examples:\n     *             optional int32 foo = 1;  // Comment attached to foo.\n     *             // Comment attached to bar.\n     *             optional int32 bar = 2;\n     *             optional string baz = 3;\n     *             // Comment attached to baz.\n     *             // Another line attached to baz.\n     *             // Comment attached to moo.\n     *             //\n     *             // Another line attached to moo.\n     *             optional double moo = 4;\n     *             // Detached comment for corge. This is not leading or trailing comments\n     *             // to moo or corge because there are blank lines separating it from\n     *             // both.\n     *             // Detached comment for corge paragraph 2.\n     *             optional string corge = 5;\n     *             /* Block comment attached\n     *              * to corge.  Leading asterisks\n     *              * will be removed. {@*}\n     *             /* Block comment attached to\n     *              * grault. {@*}\n     *             optional int32 grault = 6;\n     *             // ignored detached comments.\n     *     @type string $trailing_comments\n     *     @type string[] $leading_detached_comments\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Identifies which part of the FileDescriptorProto was defined at this\n     * location.\n     * Each element is a field number or an index.  They form a path from\n     * the root FileDescriptorProto to the place where the definition appears.\n     * For example, this path:\n     *   [ 4, 3, 2, 7, 1 ]\n     * refers to:\n     *   file.message_type(3)  // 4, 3\n     *       .field(7)         // 2, 7\n     *       .name()           // 1\n     * This is because FileDescriptorProto.message_type has field number 4:\n     *   repeated DescriptorProto message_type = 4;\n     * and DescriptorProto.field has field number 2:\n     *   repeated FieldDescriptorProto field = 2;\n     * and FieldDescriptorProto.name has field number 1:\n     *   optional string name = 1;\n     * Thus, the above path gives the location of a field name.  If we removed\n     * the last element:\n     *   [ 4, 3, 2, 7 ]\n     * this path refers to the whole field declaration (from the beginning\n     * of the label to the terminating semicolon).\n     *\n     * Generated from protobuf field <code>repeated int32 path = 1 [packed = true];</code>\n     * @return RepeatedField<int>\n     */\n    public function getPath()\n    {\n        return $this->path;\n    }\n\n    /**\n     * Identifies which part of the FileDescriptorProto was defined at this\n     * location.\n     * Each element is a field number or an index.  They form a path from\n     * the root FileDescriptorProto to the place where the definition appears.\n     * For example, this path:\n     *   [ 4, 3, 2, 7, 1 ]\n     * refers to:\n     *   file.message_type(3)  // 4, 3\n     *       .field(7)         // 2, 7\n     *       .name()           // 1\n     * This is because FileDescriptorProto.message_type has field number 4:\n     *   repeated DescriptorProto message_type = 4;\n     * and DescriptorProto.field has field number 2:\n     *   repeated FieldDescriptorProto field = 2;\n     * and FieldDescriptorProto.name has field number 1:\n     *   optional string name = 1;\n     * Thus, the above path gives the location of a field name.  If we removed\n     * the last element:\n     *   [ 4, 3, 2, 7 ]\n     * this path refers to the whole field declaration (from the beginning\n     * of the label to the terminating semicolon).\n     *\n     * Generated from protobuf field <code>repeated int32 path = 1 [packed = true];</code>\n     * @param int[] $var\n     * @return $this\n     */\n    public function setPath($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::INT32);\n        $this->path = $arr;\n\n        return $this;\n    }\n\n    /**\n     * Always has exactly three or four elements: start line, start column,\n     * end line (optional, otherwise assumed same as start line), end column.\n     * These are packed into a single field for efficiency.  Note that line\n     * and column numbers are zero-based -- typically you will want to add\n     * 1 to each before displaying to a user.\n     *\n     * Generated from protobuf field <code>repeated int32 span = 2 [packed = true];</code>\n     * @return RepeatedField<int>\n     */\n    public function getSpan()\n    {\n        return $this->span;\n    }\n\n    /**\n     * Always has exactly three or four elements: start line, start column,\n     * end line (optional, otherwise assumed same as start line), end column.\n     * These are packed into a single field for efficiency.  Note that line\n     * and column numbers are zero-based -- typically you will want to add\n     * 1 to each before displaying to a user.\n     *\n     * Generated from protobuf field <code>repeated int32 span = 2 [packed = true];</code>\n     * @param int[] $var\n     * @return $this\n     */\n    public function setSpan($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::INT32);\n        $this->span = $arr;\n\n        return $this;\n    }\n\n    /**\n     * If this SourceCodeInfo represents a complete declaration, these are any\n     * comments appearing before and after the declaration which appear to be\n     * attached to the declaration.\n     * A series of line comments appearing on consecutive lines, with no other\n     * tokens appearing on those lines, will be treated as a single comment.\n     * leading_detached_comments will keep paragraphs of comments that appear\n     * before (but not connected to) the current element. Each paragraph,\n     * separated by empty lines, will be one comment element in the repeated\n     * field.\n     * Only the comment content is provided; comment markers (e.g. //) are\n     * stripped out.  For block comments, leading whitespace and an asterisk\n     * will be stripped from the beginning of each line other than the first.\n     * Newlines are included in the output.\n     * Examples:\n     *   optional int32 foo = 1;  // Comment attached to foo.\n     *   // Comment attached to bar.\n     *   optional int32 bar = 2;\n     *   optional string baz = 3;\n     *   // Comment attached to baz.\n     *   // Another line attached to baz.\n     *   // Comment attached to moo.\n     *   //\n     *   // Another line attached to moo.\n     *   optional double moo = 4;\n     *   // Detached comment for corge. This is not leading or trailing comments\n     *   // to moo or corge because there are blank lines separating it from\n     *   // both.\n     *   // Detached comment for corge paragraph 2.\n     *   optional string corge = 5;\n     *   /* Block comment attached\n     *    * to corge.  Leading asterisks\n     *    * will be removed. {@*}\n     *   /* Block comment attached to\n     *    * grault. {@*}\n     *   optional int32 grault = 6;\n     *   // ignored detached comments.\n     *\n     * Generated from protobuf field <code>optional string leading_comments = 3;</code>\n     * @return string\n     */\n    public function getLeadingComments()\n    {\n        return isset($this->leading_comments) ? $this->leading_comments : '';\n    }\n\n    public function hasLeadingComments()\n    {\n        return isset($this->leading_comments);\n    }\n\n    public function clearLeadingComments()\n    {\n        unset($this->leading_comments);\n    }\n\n    /**\n     * If this SourceCodeInfo represents a complete declaration, these are any\n     * comments appearing before and after the declaration which appear to be\n     * attached to the declaration.\n     * A series of line comments appearing on consecutive lines, with no other\n     * tokens appearing on those lines, will be treated as a single comment.\n     * leading_detached_comments will keep paragraphs of comments that appear\n     * before (but not connected to) the current element. Each paragraph,\n     * separated by empty lines, will be one comment element in the repeated\n     * field.\n     * Only the comment content is provided; comment markers (e.g. //) are\n     * stripped out.  For block comments, leading whitespace and an asterisk\n     * will be stripped from the beginning of each line other than the first.\n     * Newlines are included in the output.\n     * Examples:\n     *   optional int32 foo = 1;  // Comment attached to foo.\n     *   // Comment attached to bar.\n     *   optional int32 bar = 2;\n     *   optional string baz = 3;\n     *   // Comment attached to baz.\n     *   // Another line attached to baz.\n     *   // Comment attached to moo.\n     *   //\n     *   // Another line attached to moo.\n     *   optional double moo = 4;\n     *   // Detached comment for corge. This is not leading or trailing comments\n     *   // to moo or corge because there are blank lines separating it from\n     *   // both.\n     *   // Detached comment for corge paragraph 2.\n     *   optional string corge = 5;\n     *   /* Block comment attached\n     *    * to corge.  Leading asterisks\n     *    * will be removed. {@*}\n     *   /* Block comment attached to\n     *    * grault. {@*}\n     *   optional int32 grault = 6;\n     *   // ignored detached comments.\n     *\n     * Generated from protobuf field <code>optional string leading_comments = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setLeadingComments($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->leading_comments = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string trailing_comments = 4;</code>\n     * @return string\n     */\n    public function getTrailingComments()\n    {\n        return isset($this->trailing_comments) ? $this->trailing_comments : '';\n    }\n\n    public function hasTrailingComments()\n    {\n        return isset($this->trailing_comments);\n    }\n\n    public function clearTrailingComments()\n    {\n        unset($this->trailing_comments);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string trailing_comments = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setTrailingComments($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->trailing_comments = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated string leading_detached_comments = 6;</code>\n     * @return RepeatedField<string>\n     */\n    public function getLeadingDetachedComments()\n    {\n        return $this->leading_detached_comments;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated string leading_detached_comments = 6;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setLeadingDetachedComments($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->leading_detached_comments = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/SourceCodeInfo.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Encapsulates information about the original source file from which a\n * FileDescriptorProto was generated.\n *\n * Generated from protobuf message <code>google.protobuf.SourceCodeInfo</code>\n */\nclass SourceCodeInfo extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * A Location identifies a piece of source code in a .proto file which\n     * corresponds to a particular definition.  This information is intended\n     * to be useful to IDEs, code indexers, documentation generators, and similar\n     * tools.\n     * For example, say we have a file like:\n     *   message Foo {\n     *     optional string foo = 1;\n     *   }\n     * Let's look at just the field definition:\n     *   optional string foo = 1;\n     *   ^       ^^     ^^  ^  ^^^\n     *   a       bc     de  f  ghi\n     * We have the following locations:\n     *   span   path               represents\n     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.\n     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).\n     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).\n     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).\n     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).\n     * Notes:\n     * - A location may refer to a repeated field itself (i.e. not to any\n     *   particular index within it).  This is used whenever a set of elements are\n     *   logically enclosed in a single code segment.  For example, an entire\n     *   extend block (possibly containing multiple extension definitions) will\n     *   have an outer location whose path refers to the \"extensions\" repeated\n     *   field without an index.\n     * - Multiple locations may have the same path.  This happens when a single\n     *   logical declaration is spread out across multiple places.  The most\n     *   obvious example is the \"extend\" block again -- there may be multiple\n     *   extend blocks in the same scope, each of which will have the same path.\n     * - A location's span is not always a subset of its parent's span.  For\n     *   example, the \"extendee\" of an extension declaration appears at the\n     *   beginning of the \"extend\" block and is shared by all extensions within\n     *   the block.\n     * - Just because a location's span is a subset of some other location's span\n     *   does not mean that it is a descendant.  For example, a \"group\" defines\n     *   both a type and a field in a single declaration.  Thus, the locations\n     *   corresponding to the type and field and their components will overlap.\n     * - Code which tries to interpret locations should probably be designed to\n     *   ignore those that it doesn't understand, as more types of locations could\n     *   be recorded in the future.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>\n     */\n    private $location;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\SourceCodeInfo\\Location[] $location\n     *           A Location identifies a piece of source code in a .proto file which\n     *           corresponds to a particular definition.  This information is intended\n     *           to be useful to IDEs, code indexers, documentation generators, and similar\n     *           tools.\n     *           For example, say we have a file like:\n     *             message Foo {\n     *               optional string foo = 1;\n     *             }\n     *           Let's look at just the field definition:\n     *             optional string foo = 1;\n     *             ^       ^^     ^^  ^  ^^^\n     *             a       bc     de  f  ghi\n     *           We have the following locations:\n     *             span   path               represents\n     *             [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.\n     *             [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).\n     *             [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).\n     *             [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).\n     *             [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).\n     *           Notes:\n     *           - A location may refer to a repeated field itself (i.e. not to any\n     *             particular index within it).  This is used whenever a set of elements are\n     *             logically enclosed in a single code segment.  For example, an entire\n     *             extend block (possibly containing multiple extension definitions) will\n     *             have an outer location whose path refers to the \"extensions\" repeated\n     *             field without an index.\n     *           - Multiple locations may have the same path.  This happens when a single\n     *             logical declaration is spread out across multiple places.  The most\n     *             obvious example is the \"extend\" block again -- there may be multiple\n     *             extend blocks in the same scope, each of which will have the same path.\n     *           - A location's span is not always a subset of its parent's span.  For\n     *             example, the \"extendee\" of an extension declaration appears at the\n     *             beginning of the \"extend\" block and is shared by all extensions within\n     *             the block.\n     *           - Just because a location's span is a subset of some other location's span\n     *             does not mean that it is a descendant.  For example, a \"group\" defines\n     *             both a type and a field in a single declaration.  Thus, the locations\n     *             corresponding to the type and field and their components will overlap.\n     *           - Code which tries to interpret locations should probably be designed to\n     *             ignore those that it doesn't understand, as more types of locations could\n     *             be recorded in the future.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * A Location identifies a piece of source code in a .proto file which\n     * corresponds to a particular definition.  This information is intended\n     * to be useful to IDEs, code indexers, documentation generators, and similar\n     * tools.\n     * For example, say we have a file like:\n     *   message Foo {\n     *     optional string foo = 1;\n     *   }\n     * Let's look at just the field definition:\n     *   optional string foo = 1;\n     *   ^       ^^     ^^  ^  ^^^\n     *   a       bc     de  f  ghi\n     * We have the following locations:\n     *   span   path               represents\n     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.\n     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).\n     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).\n     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).\n     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).\n     * Notes:\n     * - A location may refer to a repeated field itself (i.e. not to any\n     *   particular index within it).  This is used whenever a set of elements are\n     *   logically enclosed in a single code segment.  For example, an entire\n     *   extend block (possibly containing multiple extension definitions) will\n     *   have an outer location whose path refers to the \"extensions\" repeated\n     *   field without an index.\n     * - Multiple locations may have the same path.  This happens when a single\n     *   logical declaration is spread out across multiple places.  The most\n     *   obvious example is the \"extend\" block again -- there may be multiple\n     *   extend blocks in the same scope, each of which will have the same path.\n     * - A location's span is not always a subset of its parent's span.  For\n     *   example, the \"extendee\" of an extension declaration appears at the\n     *   beginning of the \"extend\" block and is shared by all extensions within\n     *   the block.\n     * - Just because a location's span is a subset of some other location's span\n     *   does not mean that it is a descendant.  For example, a \"group\" defines\n     *   both a type and a field in a single declaration.  Thus, the locations\n     *   corresponding to the type and field and their components will overlap.\n     * - Code which tries to interpret locations should probably be designed to\n     *   ignore those that it doesn't understand, as more types of locations could\n     *   be recorded in the future.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\SourceCodeInfo\\Location>\n     */\n    public function getLocation()\n    {\n        return $this->location;\n    }\n\n    /**\n     * A Location identifies a piece of source code in a .proto file which\n     * corresponds to a particular definition.  This information is intended\n     * to be useful to IDEs, code indexers, documentation generators, and similar\n     * tools.\n     * For example, say we have a file like:\n     *   message Foo {\n     *     optional string foo = 1;\n     *   }\n     * Let's look at just the field definition:\n     *   optional string foo = 1;\n     *   ^       ^^     ^^  ^  ^^^\n     *   a       bc     de  f  ghi\n     * We have the following locations:\n     *   span   path               represents\n     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.\n     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).\n     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).\n     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).\n     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).\n     * Notes:\n     * - A location may refer to a repeated field itself (i.e. not to any\n     *   particular index within it).  This is used whenever a set of elements are\n     *   logically enclosed in a single code segment.  For example, an entire\n     *   extend block (possibly containing multiple extension definitions) will\n     *   have an outer location whose path refers to the \"extensions\" repeated\n     *   field without an index.\n     * - Multiple locations may have the same path.  This happens when a single\n     *   logical declaration is spread out across multiple places.  The most\n     *   obvious example is the \"extend\" block again -- there may be multiple\n     *   extend blocks in the same scope, each of which will have the same path.\n     * - A location's span is not always a subset of its parent's span.  For\n     *   example, the \"extendee\" of an extension declaration appears at the\n     *   beginning of the \"extend\" block and is shared by all extensions within\n     *   the block.\n     * - Just because a location's span is a subset of some other location's span\n     *   does not mean that it is a descendant.  For example, a \"group\" defines\n     *   both a type and a field in a single declaration.  Thus, the locations\n     *   corresponding to the type and field and their components will overlap.\n     * - Code which tries to interpret locations should probably be designed to\n     *   ignore those that it doesn't understand, as more types of locations could\n     *   be recorded in the future.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>\n     * @param \\Google\\Protobuf\\Internal\\SourceCodeInfo\\Location[] $var\n     * @return $this\n     */\n    public function setLocation($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\SourceCodeInfo\\Location::class);\n        $this->location = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/SymbolVisibility.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse UnexpectedValueException;\n\n/**\n * Describes the 'visibility' of a symbol with respect to the proto import\n * system. Symbols can only be imported when the visibility rules do not prevent\n * it (ex: local symbols cannot be imported).  Visibility modifiers can only set\n * on `message` and `enum` as they are the only types available to be referenced\n * from other files.\n *\n * Protobuf type <code>google.protobuf.SymbolVisibility</code>\n */\nclass SymbolVisibility\n{\n    /**\n     * Generated from protobuf enum <code>VISIBILITY_UNSET = 0;</code>\n     */\n    const VISIBILITY_UNSET = 0;\n    /**\n     * Generated from protobuf enum <code>VISIBILITY_LOCAL = 1;</code>\n     */\n    const VISIBILITY_LOCAL = 1;\n    /**\n     * Generated from protobuf enum <code>VISIBILITY_EXPORT = 2;</code>\n     */\n    const VISIBILITY_EXPORT = 2;\n\n    private static $valueToName = [\n        self::VISIBILITY_UNSET => 'VISIBILITY_UNSET',\n        self::VISIBILITY_LOCAL => 'VISIBILITY_LOCAL',\n        self::VISIBILITY_EXPORT => 'VISIBILITY_EXPORT',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/TimestampBase.php",
    "content": "<?php\n\nnamespace Google\\Protobuf\\Internal;\n\n/**\n * Base class for Google\\Protobuf\\Timestamp, this contains hand-written\n * convenience methods.\n */\nclass TimestampBase extends \\Google\\Protobuf\\Internal\\Message\n{\n    /*\n     * Converts PHP DateTime to Timestamp.\n     *\n     * @param \\DateTime $datetime\n     */\n    public function fromDateTime(\\DateTime $datetime)\n    {\n        $this->seconds = $datetime->getTimestamp();\n        $this->nanos = 1000 * $datetime->format('u');\n    }\n\n    /**\n     * Converts Timestamp to PHP DateTime.\n     *\n     * @return \\DateTime $datetime\n     */\n    public function toDateTime()\n    {\n        $time = sprintf('%s.%06d', $this->seconds, $this->nanos / 1000);\n        return \\DateTime::createFromFormat('U.u', $time);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption/NamePart.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal\\UninterpretedOption;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * The name of the uninterpreted option.  Each string represents a segment in\n * a dot-separated name.  is_extension is true iff a segment represents an\n * extension (denoted with parentheses in options specs in .proto files).\n * E.g.,{ [\"foo\", false], [\"bar.baz\", true], [\"moo\", false] } represents\n * \"foo.(bar.baz).moo\".\n *\n * Generated from protobuf message <code>google.protobuf.UninterpretedOption.NamePart</code>\n */\nclass NamePart extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>required string name_part = 1;</code>\n     */\n    protected $name_part = null;\n    /**\n     * Generated from protobuf field <code>required bool is_extension = 2;</code>\n     */\n    protected $is_extension = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name_part\n     *     @type bool $is_extension\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>required string name_part = 1;</code>\n     * @return string\n     */\n    public function getNamePart()\n    {\n        return isset($this->name_part) ? $this->name_part : '';\n    }\n\n    public function hasNamePart()\n    {\n        return isset($this->name_part);\n    }\n\n    public function clearNamePart()\n    {\n        unset($this->name_part);\n    }\n\n    /**\n     * Generated from protobuf field <code>required string name_part = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setNamePart($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name_part = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>required bool is_extension = 2;</code>\n     * @return bool\n     */\n    public function getIsExtension()\n    {\n        return isset($this->is_extension) ? $this->is_extension : false;\n    }\n\n    public function hasIsExtension()\n    {\n        return isset($this->is_extension);\n    }\n\n    public function clearIsExtension()\n    {\n        unset($this->is_extension);\n    }\n\n    /**\n     * Generated from protobuf field <code>required bool is_extension = 2;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setIsExtension($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->is_extension = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Internal/UninterpretedOption.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/descriptor.proto\n\nnamespace Google\\Protobuf\\Internal;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBWire;\nuse Google\\Protobuf\\Internal\\InputStream;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A message representing a option the parser does not recognize. This only\n * appears in options protos created by the compiler::Parser class.\n * DescriptorPool resolves these when building Descriptor objects. Therefore,\n * options protos in descriptor objects (e.g. returned by Descriptor::options(),\n * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions\n * in them.\n *\n * Generated from protobuf message <code>google.protobuf.UninterpretedOption</code>\n */\nclass UninterpretedOption extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>\n     */\n    private $name;\n    /**\n     * The value of the uninterpreted option, in whatever type the tokenizer\n     * identified it as during parsing. Exactly one of these should be set.\n     *\n     * Generated from protobuf field <code>optional string identifier_value = 3;</code>\n     */\n    protected $identifier_value = null;\n    /**\n     * Generated from protobuf field <code>optional uint64 positive_int_value = 4;</code>\n     */\n    protected $positive_int_value = null;\n    /**\n     * Generated from protobuf field <code>optional int64 negative_int_value = 5;</code>\n     */\n    protected $negative_int_value = null;\n    /**\n     * Generated from protobuf field <code>optional double double_value = 6;</code>\n     */\n    protected $double_value = null;\n    /**\n     * Generated from protobuf field <code>optional bytes string_value = 7;</code>\n     */\n    protected $string_value = null;\n    /**\n     * Generated from protobuf field <code>optional string aggregate_value = 8;</code>\n     */\n    protected $aggregate_value = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Internal\\UninterpretedOption\\NamePart[] $name\n     *     @type string $identifier_value\n     *           The value of the uninterpreted option, in whatever type the tokenizer\n     *           identified it as during parsing. Exactly one of these should be set.\n     *     @type int|string $positive_int_value\n     *     @type int|string $negative_int_value\n     *     @type float $double_value\n     *     @type string $string_value\n     *     @type string $aggregate_value\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Internal\\Descriptor::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Internal\\UninterpretedOption\\NamePart>\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Generated from protobuf field <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>\n     * @param \\Google\\Protobuf\\Internal\\UninterpretedOption\\NamePart[] $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Internal\\UninterpretedOption\\NamePart::class);\n        $this->name = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The value of the uninterpreted option, in whatever type the tokenizer\n     * identified it as during parsing. Exactly one of these should be set.\n     *\n     * Generated from protobuf field <code>optional string identifier_value = 3;</code>\n     * @return string\n     */\n    public function getIdentifierValue()\n    {\n        return isset($this->identifier_value) ? $this->identifier_value : '';\n    }\n\n    public function hasIdentifierValue()\n    {\n        return isset($this->identifier_value);\n    }\n\n    public function clearIdentifierValue()\n    {\n        unset($this->identifier_value);\n    }\n\n    /**\n     * The value of the uninterpreted option, in whatever type the tokenizer\n     * identified it as during parsing. Exactly one of these should be set.\n     *\n     * Generated from protobuf field <code>optional string identifier_value = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setIdentifierValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->identifier_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional uint64 positive_int_value = 4;</code>\n     * @return int|string\n     */\n    public function getPositiveIntValue()\n    {\n        return isset($this->positive_int_value) ? $this->positive_int_value : 0;\n    }\n\n    public function hasPositiveIntValue()\n    {\n        return isset($this->positive_int_value);\n    }\n\n    public function clearPositiveIntValue()\n    {\n        unset($this->positive_int_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional uint64 positive_int_value = 4;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setPositiveIntValue($var)\n    {\n        GPBUtil::checkUint64($var);\n        $this->positive_int_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional int64 negative_int_value = 5;</code>\n     * @return int|string\n     */\n    public function getNegativeIntValue()\n    {\n        return isset($this->negative_int_value) ? $this->negative_int_value : 0;\n    }\n\n    public function hasNegativeIntValue()\n    {\n        return isset($this->negative_int_value);\n    }\n\n    public function clearNegativeIntValue()\n    {\n        unset($this->negative_int_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional int64 negative_int_value = 5;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setNegativeIntValue($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->negative_int_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional double double_value = 6;</code>\n     * @return float\n     */\n    public function getDoubleValue()\n    {\n        return isset($this->double_value) ? $this->double_value : 0.0;\n    }\n\n    public function hasDoubleValue()\n    {\n        return isset($this->double_value);\n    }\n\n    public function clearDoubleValue()\n    {\n        unset($this->double_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional double double_value = 6;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setDoubleValue($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->double_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional bytes string_value = 7;</code>\n     * @return string\n     */\n    public function getStringValue()\n    {\n        return isset($this->string_value) ? $this->string_value : '';\n    }\n\n    public function hasStringValue()\n    {\n        return isset($this->string_value);\n    }\n\n    public function clearStringValue()\n    {\n        unset($this->string_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional bytes string_value = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setStringValue($var)\n    {\n        GPBUtil::checkString($var, False);\n        $this->string_value = $var;\n\n        return $this;\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string aggregate_value = 8;</code>\n     * @return string\n     */\n    public function getAggregateValue()\n    {\n        return isset($this->aggregate_value) ? $this->aggregate_value : '';\n    }\n\n    public function hasAggregateValue()\n    {\n        return isset($this->aggregate_value);\n    }\n\n    public function clearAggregateValue()\n    {\n        unset($this->aggregate_value);\n    }\n\n    /**\n     * Generated from protobuf field <code>optional string aggregate_value = 8;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setAggregateValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->aggregate_value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/ListValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/struct.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * `ListValue` is a wrapper around a repeated field of values.\n * The JSON representation for `ListValue` is JSON array.\n *\n * Generated from protobuf message <code>google.protobuf.ListValue</code>\n */\nclass ListValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Repeated field of dynamically typed values.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Value values = 1;</code>\n     */\n    private $values;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type \\Google\\Protobuf\\Value[] $values\n     *           Repeated field of dynamically typed values.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Struct::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Repeated field of dynamically typed values.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Value values = 1;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Value>\n     */\n    public function getValues()\n    {\n        return $this->values;\n    }\n\n    /**\n     * Repeated field of dynamically typed values.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Value values = 1;</code>\n     * @param \\Google\\Protobuf\\Value[] $var\n     * @return $this\n     */\n    public function setValues($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Value::class);\n        $this->values = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Method.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/api.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Method represents a method of an API interface.\n * New usages of this message as an alternative to MethodDescriptorProto are\n * strongly discouraged. This message does not reliability preserve all\n * information necessary to model the schema and preserve semantics. Instead\n * make use of FileDescriptorSet which preserves the necessary information.\n *\n * Generated from protobuf message <code>google.protobuf.Method</code>\n */\nclass Method extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The simple name of this method.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * A URL of the input message type.\n     *\n     * Generated from protobuf field <code>string request_type_url = 2;</code>\n     */\n    protected $request_type_url = '';\n    /**\n     * If true, the request is streamed.\n     *\n     * Generated from protobuf field <code>bool request_streaming = 3;</code>\n     */\n    protected $request_streaming = false;\n    /**\n     * The URL of the output message type.\n     *\n     * Generated from protobuf field <code>string response_type_url = 4;</code>\n     */\n    protected $response_type_url = '';\n    /**\n     * If true, the response is streamed.\n     *\n     * Generated from protobuf field <code>bool response_streaming = 5;</code>\n     */\n    protected $response_streaming = false;\n    /**\n     * Any metadata attached to the method.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 6;</code>\n     */\n    private $options;\n    /**\n     * The source syntax of this method.\n     * This field should be ignored, instead the syntax should be inherited from\n     * Api. This is similar to Field and EnumValue.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 7 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $syntax = 0;\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     * This field should be ignored, instead the edition should be inherited from\n     * Api. This is similar to Field and EnumValue.\n     *\n     * Generated from protobuf field <code>string edition = 8 [deprecated = true];</code>\n     * @deprecated\n     */\n    protected $edition = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The simple name of this method.\n     *     @type string $request_type_url\n     *           A URL of the input message type.\n     *     @type bool $request_streaming\n     *           If true, the request is streamed.\n     *     @type string $response_type_url\n     *           The URL of the output message type.\n     *     @type bool $response_streaming\n     *           If true, the response is streamed.\n     *     @type \\Google\\Protobuf\\Option[] $options\n     *           Any metadata attached to the method.\n     *     @type int $syntax\n     *           The source syntax of this method.\n     *           This field should be ignored, instead the syntax should be inherited from\n     *           Api. This is similar to Field and EnumValue.\n     *     @type string $edition\n     *           The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *           This field should be ignored, instead the edition should be inherited from\n     *           Api. This is similar to Field and EnumValue.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Api::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The simple name of this method.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The simple name of this method.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * A URL of the input message type.\n     *\n     * Generated from protobuf field <code>string request_type_url = 2;</code>\n     * @return string\n     */\n    public function getRequestTypeUrl()\n    {\n        return $this->request_type_url;\n    }\n\n    /**\n     * A URL of the input message type.\n     *\n     * Generated from protobuf field <code>string request_type_url = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRequestTypeUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->request_type_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, the request is streamed.\n     *\n     * Generated from protobuf field <code>bool request_streaming = 3;</code>\n     * @return bool\n     */\n    public function getRequestStreaming()\n    {\n        return $this->request_streaming;\n    }\n\n    /**\n     * If true, the request is streamed.\n     *\n     * Generated from protobuf field <code>bool request_streaming = 3;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setRequestStreaming($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->request_streaming = $var;\n\n        return $this;\n    }\n\n    /**\n     * The URL of the output message type.\n     *\n     * Generated from protobuf field <code>string response_type_url = 4;</code>\n     * @return string\n     */\n    public function getResponseTypeUrl()\n    {\n        return $this->response_type_url;\n    }\n\n    /**\n     * The URL of the output message type.\n     *\n     * Generated from protobuf field <code>string response_type_url = 4;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setResponseTypeUrl($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->response_type_url = $var;\n\n        return $this;\n    }\n\n    /**\n     * If true, the response is streamed.\n     *\n     * Generated from protobuf field <code>bool response_streaming = 5;</code>\n     * @return bool\n     */\n    public function getResponseStreaming()\n    {\n        return $this->response_streaming;\n    }\n\n    /**\n     * If true, the response is streamed.\n     *\n     * Generated from protobuf field <code>bool response_streaming = 5;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setResponseStreaming($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->response_streaming = $var;\n\n        return $this;\n    }\n\n    /**\n     * Any metadata attached to the method.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 6;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Option>\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * Any metadata attached to the method.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 6;</code>\n     * @param \\Google\\Protobuf\\Option[] $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Option::class);\n        $this->options = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The source syntax of this method.\n     * This field should be ignored, instead the syntax should be inherited from\n     * Api. This is similar to Field and EnumValue.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 7 [deprecated = true];</code>\n     * @return int\n     * @deprecated\n     */\n    public function getSyntax()\n    {\n        if ($this->syntax !== 0) {\n            @trigger_error('syntax is deprecated.', E_USER_DEPRECATED);\n        }\n        return $this->syntax;\n    }\n\n    /**\n     * The source syntax of this method.\n     * This field should be ignored, instead the syntax should be inherited from\n     * Api. This is similar to Field and EnumValue.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 7 [deprecated = true];</code>\n     * @param int $var\n     * @return $this\n     * @deprecated\n     */\n    public function setSyntax($var)\n    {\n        @trigger_error('syntax is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Syntax::class);\n        $this->syntax = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     * This field should be ignored, instead the edition should be inherited from\n     * Api. This is similar to Field and EnumValue.\n     *\n     * Generated from protobuf field <code>string edition = 8 [deprecated = true];</code>\n     * @return string\n     * @deprecated\n     */\n    public function getEdition()\n    {\n        if ($this->edition !== '') {\n            @trigger_error('edition is deprecated.', E_USER_DEPRECATED);\n        }\n        return $this->edition;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     * This field should be ignored, instead the edition should be inherited from\n     * Api. This is similar to Field and EnumValue.\n     *\n     * Generated from protobuf field <code>string edition = 8 [deprecated = true];</code>\n     * @param string $var\n     * @return $this\n     * @deprecated\n     */\n    public function setEdition($var)\n    {\n        @trigger_error('edition is deprecated.', E_USER_DEPRECATED);\n        GPBUtil::checkString($var, True);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Mixin.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/api.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Declares an API Interface to be included in this interface. The including\n * interface must redeclare all the methods from the included interface, but\n * documentation and options are inherited as follows:\n * - If after comment and whitespace stripping, the documentation\n *   string of the redeclared method is empty, it will be inherited\n *   from the original method.\n * - Each annotation belonging to the service config (http,\n *   visibility) which is not set in the redeclared method will be\n *   inherited.\n * - If an http annotation is inherited, the path pattern will be\n *   modified as follows. Any version prefix will be replaced by the\n *   version of the including interface plus the [root][] path if\n *   specified.\n * Example of a simple mixin:\n *     package google.acl.v1;\n *     service AccessControl {\n *       // Get the underlying ACL object.\n *       rpc GetAcl(GetAclRequest) returns (Acl) {\n *         option (google.api.http).get = \"/v1/{resource=**}:getAcl\";\n *       }\n *     }\n *     package google.storage.v2;\n *     service Storage {\n *       rpc GetAcl(GetAclRequest) returns (Acl);\n *       // Get a data record.\n *       rpc GetData(GetDataRequest) returns (Data) {\n *         option (google.api.http).get = \"/v2/{resource=**}\";\n *       }\n *     }\n * Example of a mixin configuration:\n *     apis:\n *     - name: google.storage.v2.Storage\n *       mixins:\n *       - name: google.acl.v1.AccessControl\n * The mixin construct implies that all methods in `AccessControl` are\n * also declared with same name and request/response types in\n * `Storage`. A documentation generator or annotation processor will\n * see the effective `Storage.GetAcl` method after inheriting\n * documentation and annotations as follows:\n *     service Storage {\n *       // Get the underlying ACL object.\n *       rpc GetAcl(GetAclRequest) returns (Acl) {\n *         option (google.api.http).get = \"/v2/{resource=**}:getAcl\";\n *       }\n *       ...\n *     }\n * Note how the version in the path pattern changed from `v1` to `v2`.\n * If the `root` field in the mixin is specified, it should be a\n * relative path under which inherited HTTP paths are placed. Example:\n *     apis:\n *     - name: google.storage.v2.Storage\n *       mixins:\n *       - name: google.acl.v1.AccessControl\n *         root: acls\n * This implies the following inherited HTTP annotation:\n *     service Storage {\n *       // Get the underlying ACL object.\n *       rpc GetAcl(GetAclRequest) returns (Acl) {\n *         option (google.api.http).get = \"/v2/acls/{resource=**}:getAcl\";\n *       }\n *       ...\n *     }\n *\n * Generated from protobuf message <code>google.protobuf.Mixin</code>\n */\nclass Mixin extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The fully qualified name of the interface which is included.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * If non-empty specifies a path under which inherited HTTP paths\n     * are rooted.\n     *\n     * Generated from protobuf field <code>string root = 2;</code>\n     */\n    protected $root = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The fully qualified name of the interface which is included.\n     *     @type string $root\n     *           If non-empty specifies a path under which inherited HTTP paths\n     *           are rooted.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Api::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The fully qualified name of the interface which is included.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The fully qualified name of the interface which is included.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * If non-empty specifies a path under which inherited HTTP paths\n     * are rooted.\n     *\n     * Generated from protobuf field <code>string root = 2;</code>\n     * @return string\n     */\n    public function getRoot()\n    {\n        return $this->root;\n    }\n\n    /**\n     * If non-empty specifies a path under which inherited HTTP paths\n     * are rooted.\n     *\n     * Generated from protobuf field <code>string root = 2;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setRoot($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->root = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/NullValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/struct.proto\n\nnamespace Google\\Protobuf;\n\nuse UnexpectedValueException;\n\n/**\n * `NullValue` is a singleton enumeration to represent the null value for the\n * `Value` type union.\n * The JSON representation for `NullValue` is JSON `null`.\n *\n * Protobuf type <code>google.protobuf.NullValue</code>\n */\nclass NullValue\n{\n    /**\n     * Null value.\n     *\n     * Generated from protobuf enum <code>NULL_VALUE = 0;</code>\n     */\n    const NULL_VALUE = 0;\n\n    private static $valueToName = [\n        self::NULL_VALUE => 'NULL_VALUE',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/OneofDescriptor.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2017 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GetPublicDescriptorTrait;\n\nclass OneofDescriptor\n{\n    use GetPublicDescriptorTrait;\n\n    /** @var  \\Google\\Protobuf\\Internal\\OneofDescriptor $internal_desc */\n    private $internal_desc;\n\n    /**\n     * @internal\n     */\n    public function __construct($internal_desc)\n    {\n        $this->internal_desc = $internal_desc;\n    }\n\n    /**\n     * @return string The name of the oneof\n     */\n    public function getName()\n    {\n        return $this->internal_desc->getName();\n    }\n\n    /**\n     * @param int $index Must be >= 0 and < getFieldCount()\n     * @return FieldDescriptor\n     */\n    public function getField($index)\n    {\n        if (\n            is_null($this->internal_desc->getFields())\n            || !isset($this->internal_desc->getFields()[$index])\n        ) {\n            return null;\n        }\n        return $this->getPublicDescriptor($this->internal_desc->getFields()[$index]);\n    }\n\n    /**\n     * @return int Number of fields in the oneof\n     */\n    public function getFieldCount()\n    {\n        return count($this->internal_desc->getFields());\n    }\n\n    public function isSynthetic()\n    {\n        return $this->internal_desc->isSynthetic();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Option.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A protocol buffer option, which can be attached to a message, field,\n * enumeration, etc.\n * New usages of this message as an alternative to FileOptions, MessageOptions,\n * FieldOptions, EnumOptions, EnumValueOptions, ServiceOptions, or MethodOptions\n * are strongly discouraged.\n *\n * Generated from protobuf message <code>google.protobuf.Option</code>\n */\nclass Option extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The option's name. For protobuf built-in options (options defined in\n     * descriptor.proto), this is the short name. For example, `\"map_entry\"`.\n     * For custom options, it should be the fully-qualified name. For example,\n     * `\"google.api.http\"`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The option's value packed in an Any message. If the value is a primitive,\n     * the corresponding wrapper type defined in google/protobuf/wrappers.proto\n     * should be used. If the value is an enum, it should be stored as an int32\n     * value using the google.protobuf.Int32Value type.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any value = 2;</code>\n     */\n    protected $value = null;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The option's name. For protobuf built-in options (options defined in\n     *           descriptor.proto), this is the short name. For example, `\"map_entry\"`.\n     *           For custom options, it should be the fully-qualified name. For example,\n     *           `\"google.api.http\"`.\n     *     @type \\Google\\Protobuf\\Any $value\n     *           The option's value packed in an Any message. If the value is a primitive,\n     *           the corresponding wrapper type defined in google/protobuf/wrappers.proto\n     *           should be used. If the value is an enum, it should be stored as an int32\n     *           value using the google.protobuf.Int32Value type.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The option's name. For protobuf built-in options (options defined in\n     * descriptor.proto), this is the short name. For example, `\"map_entry\"`.\n     * For custom options, it should be the fully-qualified name. For example,\n     * `\"google.api.http\"`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The option's name. For protobuf built-in options (options defined in\n     * descriptor.proto), this is the short name. For example, `\"map_entry\"`.\n     * For custom options, it should be the fully-qualified name. For example,\n     * `\"google.api.http\"`.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The option's value packed in an Any message. If the value is a primitive,\n     * the corresponding wrapper type defined in google/protobuf/wrappers.proto\n     * should be used. If the value is an enum, it should be stored as an int32\n     * value using the google.protobuf.Int32Value type.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any value = 2;</code>\n     * @return \\Google\\Protobuf\\Any|null\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    public function hasValue()\n    {\n        return isset($this->value);\n    }\n\n    public function clearValue()\n    {\n        unset($this->value);\n    }\n\n    /**\n     * The option's value packed in an Any message. If the value is a primitive,\n     * the corresponding wrapper type defined in google/protobuf/wrappers.proto\n     * should be used. If the value is an enum, it should be stored as an int32\n     * value using the google.protobuf.Int32Value type.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Any value = 2;</code>\n     * @param \\Google\\Protobuf\\Any $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Any::class);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/PrintOptions.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\nnamespace Google\\Protobuf;\n\nclass PrintOptions\n{\n    const PRESERVE_PROTO_FIELD_NAMES = 1 << 0;\n    const ALWAYS_PRINT_ENUMS_AS_INTS = 1 << 1;\n}"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/RepeatedField.php",
    "content": "<?php\n\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file or at\n// https://developers.google.com/open-source/licenses/bsd\n\n/**\n * RepeatedField and RepeatedFieldIter are used by generated protocol message\n * classes to manipulate repeated fields.\n */\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\DescriptorPool;\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\Internal\\Message;\nuse Google\\Protobuf\\Internal\\RepeatedFieldIter;\nuse Traversable;\n\n/**\n * RepeatedField is used by generated protocol message classes to manipulate\n * repeated fields. It can be used like native PHP array.\n *\n * @template T\n * @implements \\ArrayAccess<int, T>\n * @implements \\IteratorAggregate<T>\n */\nclass RepeatedField implements \\ArrayAccess, \\IteratorAggregate, \\Countable\n{\n\n    /**\n     * @ignore\n     */\n    private $container;\n    /**\n     * @ignore\n     */\n    private $type;\n    /**\n     * @ignore\n     * @var string|class-string<T>\n     */\n    private $klass;\n\n    /**\n     * Constructs an instance of RepeatedField.\n     *\n     * @param integer $type Type of the stored element.\n     * @param string|class-string<T> $klass Message/Enum class name (message/enum fields only).\n     * @ignore\n     */\n    public function __construct($type, $klass = null)\n    {\n        $this->container = [];\n        $this->type = $type;\n        if ($this->type == GPBType::MESSAGE) {\n            $pool = DescriptorPool::getGeneratedPool();\n            $desc = $pool->getDescriptorByClassName($klass);\n            if ($desc == NULL) {\n                new $klass;  // No msg class instance has been created before.\n                $desc = $pool->getDescriptorByClassName($klass);\n            }\n            $this->klass = $desc->getClass();\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * @ignore\n     * @return string|class-string<T>\n     */\n    public function getClass()\n    {\n        return $this->klass;\n    }\n\n    /**\n     * Return the element at the given index.\n     *\n     * This will also be called for: $ele = $arr[0]\n     *\n     * @param integer $offset The index of the element to be fetched.\n\t * @return T The stored element at given index.\n     * @throws \\ErrorException Invalid type for index.\n     * @throws \\ErrorException Non-existing index.\n     * @todo need to add return type mixed (require update php version to 8.0)\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetGet($offset)\n    {\n        return $this->container[$offset];\n    }\n\n    /**\n     * Assign the element at the given index.\n     *\n     * This will also be called for: $arr []= $ele and $arr[0] = ele\n     *\n     * @param int|null $offset The index of the element to be assigned.\n     * @param T $value The element to be assigned.\n     * @return void\n     * @throws \\ErrorException Invalid type for index.\n     * @throws \\ErrorException Non-existing index.\n     * @throws \\ErrorException Incorrect type of the element.\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetSet($offset, $value)\n    {\n        switch ($this->type) {\n            case GPBType::SFIXED32:\n            case GPBType::SINT32:\n            case GPBType::INT32:\n            case GPBType::ENUM:\n                GPBUtil::checkInt32($value);\n                break;\n            case GPBType::FIXED32:\n            case GPBType::UINT32:\n                GPBUtil::checkUint32($value);\n                break;\n            case GPBType::SFIXED64:\n            case GPBType::SINT64:\n            case GPBType::INT64:\n                GPBUtil::checkInt64($value);\n                break;\n            case GPBType::FIXED64:\n            case GPBType::UINT64:\n                GPBUtil::checkUint64($value);\n                break;\n            case GPBType::FLOAT:\n                GPBUtil::checkFloat($value);\n                break;\n            case GPBType::DOUBLE:\n                GPBUtil::checkDouble($value);\n                break;\n            case GPBType::BOOL:\n                GPBUtil::checkBool($value);\n                break;\n            case GPBType::BYTES:\n                GPBUtil::checkString($value, false);\n                break;\n            case GPBType::STRING:\n                GPBUtil::checkString($value, true);\n                break;\n            case GPBType::MESSAGE:\n                if (is_null($value)) {\n                    throw new \\TypeError(\"RepeatedField element cannot be null.\");\n                }\n                GPBUtil::checkMessage($value, $this->klass);\n                break;\n            default:\n                break;\n        }\n        if (is_null($offset)) {\n            $this->container[] = $value;\n        } else {\n            $count = count($this->container);\n            if (!is_numeric($offset) || $offset < 0 || $offset >= $count) {\n                trigger_error(\n                    \"Cannot modify element at the given index\",\n                    E_USER_ERROR);\n                return;\n            }\n            $this->container[$offset] = $value;\n        }\n    }\n\n    /**\n     * Remove the element at the given index.\n     *\n     * This will also be called for: unset($arr)\n     *\n     * @param integer $offset The index of the element to be removed.\n     * @return void\n     * @throws \\ErrorException Invalid type for index.\n     * @throws \\ErrorException The element to be removed is not at the end of the\n     * RepeatedField.\n     * @todo need to add return type void (require update php version to 7.1)\n     */\n    #[\\ReturnTypeWillChange]\n    public function offsetUnset($offset)\n    {\n        $count = count($this->container);\n        if (!is_numeric($offset) || $count === 0 || $offset < 0 || $offset >= $count) {\n            trigger_error(\n                \"Cannot remove element at the given index\",\n                E_USER_ERROR);\n            return;\n        }\n        array_splice($this->container, $offset, 1);\n    }\n\n    /**\n     * Check the existence of the element at the given index.\n     *\n     * This will also be called for: isset($arr)\n     *\n     * @param integer $offset The index of the element to be removed.\n     * @return bool True if the element at the given offset exists.\n     * @throws \\ErrorException Invalid type for index.\n     */\n    public function offsetExists($offset): bool\n    {\n        return isset($this->container[$offset]);\n    }\n\n    /**\n     * @ignore\n     */\n    public function getIterator(): Traversable\n    {\n        return new RepeatedFieldIter($this->container);\n    }\n\n    /**\n     * Return the number of stored elements.\n     *\n     * This will also be called for: count($arr)\n     *\n     * @return integer The number of stored elements.\n     */\n    public function count(): int\n    {\n        return count($this->container);\n    }\n\n    public function __debugInfo()\n    {\n        return array_map(\n            function ($item) {\n                if ($item instanceof Message || $item instanceof RepeatedField) {\n                    return $item->__debugInfo();\n                }\n                return $item;\n            },\n            iterator_to_array($this)\n        );\n    }\n}\n\nclass_alias(RepeatedField::class, Internal\\RepeatedField::class);\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/SourceContext.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/source_context.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * `SourceContext` represents information about the source of a\n * protobuf element, like the file in which it is defined.\n *\n * Generated from protobuf message <code>google.protobuf.SourceContext</code>\n */\nclass SourceContext extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The path-qualified name of the .proto file that contained the associated\n     * protobuf element.  For example: `\"google/protobuf/source_context.proto\"`.\n     *\n     * Generated from protobuf field <code>string file_name = 1;</code>\n     */\n    protected $file_name = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $file_name\n     *           The path-qualified name of the .proto file that contained the associated\n     *           protobuf element.  For example: `\"google/protobuf/source_context.proto\"`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\SourceContext::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The path-qualified name of the .proto file that contained the associated\n     * protobuf element.  For example: `\"google/protobuf/source_context.proto\"`.\n     *\n     * Generated from protobuf field <code>string file_name = 1;</code>\n     * @return string\n     */\n    public function getFileName()\n    {\n        return $this->file_name;\n    }\n\n    /**\n     * The path-qualified name of the .proto file that contained the associated\n     * protobuf element.  For example: `\"google/protobuf/source_context.proto\"`.\n     *\n     * Generated from protobuf field <code>string file_name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setFileName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->file_name = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/StringValue.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `string`.\n * The JSON representation for `StringValue` is JSON string.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.StringValue</code>\n */\nclass StringValue extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The string value.\n     *\n     * Generated from protobuf field <code>string value = 1;</code>\n     */\n    protected $value = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $value\n     *           The string value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The string value.\n     *\n     * Generated from protobuf field <code>string value = 1;</code>\n     * @return string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The string value.\n     *\n     * Generated from protobuf field <code>string value = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Struct.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/struct.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * `Struct` represents a structured data value, consisting of fields\n * which map to dynamically typed values. In some languages, `Struct`\n * might be supported by a native representation. For example, in\n * scripting languages like JS a struct is represented as an\n * object. The details of that representation are described together\n * with the proto support for the language.\n * The JSON representation for `Struct` is JSON object.\n *\n * Generated from protobuf message <code>google.protobuf.Struct</code>\n */\nclass Struct extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * Unordered map of dynamically typed values.\n     *\n     * Generated from protobuf field <code>map<string, .google.protobuf.Value> fields = 1;</code>\n     */\n    private $fields;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type array|\\Google\\Protobuf\\Internal\\MapField $fields\n     *           Unordered map of dynamically typed values.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Struct::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Unordered map of dynamically typed values.\n     *\n     * Generated from protobuf field <code>map<string, .google.protobuf.Value> fields = 1;</code>\n     * @return \\Google\\Protobuf\\Internal\\MapField\n     */\n    public function getFields()\n    {\n        return $this->fields;\n    }\n\n    /**\n     * Unordered map of dynamically typed values.\n     *\n     * Generated from protobuf field <code>map<string, .google.protobuf.Value> fields = 1;</code>\n     * @param array|\\Google\\Protobuf\\Internal\\MapField $var\n     * @return $this\n     */\n    public function setFields($var)\n    {\n        $arr = GPBUtil::checkMapField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Value::class);\n        $this->fields = $arr;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Syntax.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nuse UnexpectedValueException;\n\n/**\n * The syntax in which a protocol buffer element is defined.\n *\n * Protobuf type <code>google.protobuf.Syntax</code>\n */\nclass Syntax\n{\n    /**\n     * Syntax `proto2`.\n     *\n     * Generated from protobuf enum <code>SYNTAX_PROTO2 = 0;</code>\n     */\n    const SYNTAX_PROTO2 = 0;\n    /**\n     * Syntax `proto3`.\n     *\n     * Generated from protobuf enum <code>SYNTAX_PROTO3 = 1;</code>\n     */\n    const SYNTAX_PROTO3 = 1;\n    /**\n     * Syntax `editions`.\n     *\n     * Generated from protobuf enum <code>SYNTAX_EDITIONS = 2;</code>\n     */\n    const SYNTAX_EDITIONS = 2;\n\n    private static $valueToName = [\n        self::SYNTAX_PROTO2 => 'SYNTAX_PROTO2',\n        self::SYNTAX_PROTO3 => 'SYNTAX_PROTO3',\n        self::SYNTAX_EDITIONS => 'SYNTAX_EDITIONS',\n    ];\n\n    public static function name($value)\n    {\n        if (!isset(self::$valueToName[$value])) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no name defined for value %s', __CLASS__, $value));\n        }\n        return self::$valueToName[$value];\n    }\n\n\n    public static function value($name)\n    {\n        $const = __CLASS__ . '::' . strtoupper($name);\n        if (!defined($const)) {\n            throw new UnexpectedValueException(sprintf(\n                    'Enum %s has no value defined for name %s', __CLASS__, $name));\n        }\n        return constant($const);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Timestamp.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/timestamp.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n * # Examples\n * Example 1: Compute Timestamp from POSIX `time()`.\n *     Timestamp timestamp;\n *     timestamp.set_seconds(time(NULL));\n *     timestamp.set_nanos(0);\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *     struct timeval tv;\n *     gettimeofday(&tv, NULL);\n *     Timestamp timestamp;\n *     timestamp.set_seconds(tv.tv_sec);\n *     timestamp.set_nanos(tv.tv_usec * 1000);\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *     FILETIME ft;\n *     GetSystemTimeAsFileTime(&ft);\n *     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n *     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n *     Timestamp timestamp;\n *     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n *     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *     long millis = System.currentTimeMillis();\n *     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n *         .setNanos((int) ((millis % 1000) * 1000000)).build();\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *     Instant now = Instant.now();\n *     Timestamp timestamp =\n *         Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n *             .setNanos(now.getNano()).build();\n * Example 6: Compute Timestamp from current time in Python.\n *     timestamp = Timestamp()\n *     timestamp.GetCurrentTime()\n * # JSON Mapping\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n * Generated from protobuf message <code>google.protobuf.Timestamp</code>\n */\nclass Timestamp extends \\Google\\Protobuf\\Internal\\TimestampBase\n{\n    /**\n     * Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must\n     * be between -315576000000 and 315576000000 inclusive (which corresponds to\n     * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).\n     *\n     * Generated from protobuf field <code>int64 seconds = 1;</code>\n     */\n    protected $seconds = 0;\n    /**\n     * Non-negative fractions of a second at nanosecond resolution. This field is\n     * the nanosecond portion of the duration, not an alternative to seconds.\n     * Negative second values with fractions must still have non-negative nanos\n     * values that count forward in time. Must be between 0 and 999,999,999\n     * inclusive.\n     *\n     * Generated from protobuf field <code>int32 nanos = 2;</code>\n     */\n    protected $nanos = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $seconds\n     *           Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must\n     *           be between -315576000000 and 315576000000 inclusive (which corresponds to\n     *           0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).\n     *     @type int $nanos\n     *           Non-negative fractions of a second at nanosecond resolution. This field is\n     *           the nanosecond portion of the duration, not an alternative to seconds.\n     *           Negative second values with fractions must still have non-negative nanos\n     *           values that count forward in time. Must be between 0 and 999,999,999\n     *           inclusive.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Timestamp::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must\n     * be between -315576000000 and 315576000000 inclusive (which corresponds to\n     * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).\n     *\n     * Generated from protobuf field <code>int64 seconds = 1;</code>\n     * @return int|string\n     */\n    public function getSeconds()\n    {\n        return $this->seconds;\n    }\n\n    /**\n     * Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must\n     * be between -315576000000 and 315576000000 inclusive (which corresponds to\n     * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).\n     *\n     * Generated from protobuf field <code>int64 seconds = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setSeconds($var)\n    {\n        GPBUtil::checkInt64($var);\n        $this->seconds = $var;\n\n        return $this;\n    }\n\n    /**\n     * Non-negative fractions of a second at nanosecond resolution. This field is\n     * the nanosecond portion of the duration, not an alternative to seconds.\n     * Negative second values with fractions must still have non-negative nanos\n     * values that count forward in time. Must be between 0 and 999,999,999\n     * inclusive.\n     *\n     * Generated from protobuf field <code>int32 nanos = 2;</code>\n     * @return int\n     */\n    public function getNanos()\n    {\n        return $this->nanos;\n    }\n\n    /**\n     * Non-negative fractions of a second at nanosecond resolution. This field is\n     * the nanosecond portion of the duration, not an alternative to seconds.\n     * Negative second values with fractions must still have non-negative nanos\n     * values that count forward in time. Must be between 0 and 999,999,999\n     * inclusive.\n     *\n     * Generated from protobuf field <code>int32 nanos = 2;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNanos($var)\n    {\n        GPBUtil::checkInt32($var);\n        $this->nanos = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Type.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/type.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * A protocol buffer message type.\n * New usages of this message as an alternative to DescriptorProto are strongly\n * discouraged. This message does not reliability preserve all information\n * necessary to model the schema and preserve semantics. Instead make use of\n * FileDescriptorSet which preserves the necessary information.\n *\n * Generated from protobuf message <code>google.protobuf.Type</code>\n */\nclass Type extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The fully qualified message name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     */\n    protected $name = '';\n    /**\n     * The list of fields.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Field fields = 2;</code>\n     */\n    private $fields;\n    /**\n     * The list of types appearing in `oneof` definitions in this type.\n     *\n     * Generated from protobuf field <code>repeated string oneofs = 3;</code>\n     */\n    private $oneofs;\n    /**\n     * The protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 4;</code>\n     */\n    private $options;\n    /**\n     * The source context.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 5;</code>\n     */\n    protected $source_context = null;\n    /**\n     * The source syntax.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 6;</code>\n     */\n    protected $syntax = 0;\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 7;</code>\n     */\n    protected $edition = '';\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type string $name\n     *           The fully qualified message name.\n     *     @type \\Google\\Protobuf\\Field[] $fields\n     *           The list of fields.\n     *     @type string[] $oneofs\n     *           The list of types appearing in `oneof` definitions in this type.\n     *     @type \\Google\\Protobuf\\Option[] $options\n     *           The protocol buffer options.\n     *     @type \\Google\\Protobuf\\SourceContext $source_context\n     *           The source context.\n     *     @type int $syntax\n     *           The source syntax.\n     *     @type string $edition\n     *           The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Type::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The fully qualified message name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * The fully qualified message name.\n     *\n     * Generated from protobuf field <code>string name = 1;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setName($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->name = $var;\n\n        return $this;\n    }\n\n    /**\n     * The list of fields.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Field fields = 2;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Field>\n     */\n    public function getFields()\n    {\n        return $this->fields;\n    }\n\n    /**\n     * The list of fields.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Field fields = 2;</code>\n     * @param \\Google\\Protobuf\\Field[] $var\n     * @return $this\n     */\n    public function setFields($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Field::class);\n        $this->fields = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The list of types appearing in `oneof` definitions in this type.\n     *\n     * Generated from protobuf field <code>repeated string oneofs = 3;</code>\n     * @return RepeatedField<string>\n     */\n    public function getOneofs()\n    {\n        return $this->oneofs;\n    }\n\n    /**\n     * The list of types appearing in `oneof` definitions in this type.\n     *\n     * Generated from protobuf field <code>repeated string oneofs = 3;</code>\n     * @param string[] $var\n     * @return $this\n     */\n    public function setOneofs($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::STRING);\n        $this->oneofs = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 4;</code>\n     * @return RepeatedField<\\Google\\Protobuf\\Option>\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * The protocol buffer options.\n     *\n     * Generated from protobuf field <code>repeated .google.protobuf.Option options = 4;</code>\n     * @param \\Google\\Protobuf\\Option[] $var\n     * @return $this\n     */\n    public function setOptions($var)\n    {\n        $arr = GPBUtil::checkRepeatedField($var, \\Google\\Protobuf\\Internal\\GPBType::MESSAGE, \\Google\\Protobuf\\Option::class);\n        $this->options = $arr;\n\n        return $this;\n    }\n\n    /**\n     * The source context.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 5;</code>\n     * @return \\Google\\Protobuf\\SourceContext|null\n     */\n    public function getSourceContext()\n    {\n        return $this->source_context;\n    }\n\n    public function hasSourceContext()\n    {\n        return isset($this->source_context);\n    }\n\n    public function clearSourceContext()\n    {\n        unset($this->source_context);\n    }\n\n    /**\n     * The source context.\n     *\n     * Generated from protobuf field <code>.google.protobuf.SourceContext source_context = 5;</code>\n     * @param \\Google\\Protobuf\\SourceContext $var\n     * @return $this\n     */\n    public function setSourceContext($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\SourceContext::class);\n        $this->source_context = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source syntax.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 6;</code>\n     * @return int\n     */\n    public function getSyntax()\n    {\n        return $this->syntax;\n    }\n\n    /**\n     * The source syntax.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Syntax syntax = 6;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setSyntax($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\Syntax::class);\n        $this->syntax = $var;\n\n        return $this;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 7;</code>\n     * @return string\n     */\n    public function getEdition()\n    {\n        return $this->edition;\n    }\n\n    /**\n     * The source edition string, only valid when syntax is SYNTAX_EDITIONS.\n     *\n     * Generated from protobuf field <code>string edition = 7;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setEdition($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->edition = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/UInt32Value.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `uint32`.\n * The JSON representation for `UInt32Value` is JSON number.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.UInt32Value</code>\n */\nclass UInt32Value extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The uint32 value.\n     *\n     * Generated from protobuf field <code>uint32 value = 1;</code>\n     */\n    protected $value = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $value\n     *           The uint32 value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The uint32 value.\n     *\n     * Generated from protobuf field <code>uint32 value = 1;</code>\n     * @return int\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The uint32 value.\n     *\n     * Generated from protobuf field <code>uint32 value = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkUint32($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/UInt64Value.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/wrappers.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * Wrapper message for `uint64`.\n * The JSON representation for `UInt64Value` is JSON string.\n * Not recommended for use in new APIs, but still useful for legacy APIs and\n * has no plan to be removed.\n *\n * Generated from protobuf message <code>google.protobuf.UInt64Value</code>\n */\nclass UInt64Value extends \\Google\\Protobuf\\Internal\\Message\n{\n    /**\n     * The uint64 value.\n     *\n     * Generated from protobuf field <code>uint64 value = 1;</code>\n     */\n    protected $value = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int|string $value\n     *           The uint64 value.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Wrappers::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * The uint64 value.\n     *\n     * Generated from protobuf field <code>uint64 value = 1;</code>\n     * @return int|string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * The uint64 value.\n     *\n     * Generated from protobuf field <code>uint64 value = 1;</code>\n     * @param int|string $var\n     * @return $this\n     */\n    public function setValue($var)\n    {\n        GPBUtil::checkUint64($var);\n        $this->value = $var;\n\n        return $this;\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/Google/Protobuf/Value.php",
    "content": "<?php\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# NO CHECKED-IN PROTOBUF GENCODE\n# source: google/protobuf/struct.proto\n\nnamespace Google\\Protobuf;\n\nuse Google\\Protobuf\\Internal\\GPBType;\nuse Google\\Protobuf\\Internal\\GPBUtil;\nuse Google\\Protobuf\\RepeatedField;\n\n/**\n * `Value` represents a dynamically typed value which can be either\n * null, a number, a string, a boolean, a recursive struct value, or a\n * list of values. A producer of value is expected to set one of these\n * variants. Absence of any variant indicates an error.\n * The JSON representation for `Value` is JSON value.\n *\n * Generated from protobuf message <code>google.protobuf.Value</code>\n */\nclass Value extends \\Google\\Protobuf\\Internal\\Message\n{\n    protected $kind;\n\n    /**\n     * Constructor.\n     *\n     * @param array $data {\n     *     Optional. Data for populating the Message object.\n     *\n     *     @type int $null_value\n     *           Represents a null value.\n     *     @type float $number_value\n     *           Represents a double value.\n     *     @type string $string_value\n     *           Represents a string value.\n     *     @type bool $bool_value\n     *           Represents a boolean value.\n     *     @type \\Google\\Protobuf\\Struct $struct_value\n     *           Represents a structured value.\n     *     @type \\Google\\Protobuf\\ListValue $list_value\n     *           Represents a repeated `Value`.\n     * }\n     */\n    public function __construct($data = NULL) {\n        \\GPBMetadata\\Google\\Protobuf\\Struct::initOnce();\n        parent::__construct($data);\n    }\n\n    /**\n     * Represents a null value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.NullValue null_value = 1;</code>\n     * @return int\n     */\n    public function getNullValue()\n    {\n        return $this->readOneof(1);\n    }\n\n    public function hasNullValue()\n    {\n        return $this->hasOneof(1);\n    }\n\n    /**\n     * Represents a null value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.NullValue null_value = 1;</code>\n     * @param int $var\n     * @return $this\n     */\n    public function setNullValue($var)\n    {\n        GPBUtil::checkEnum($var, \\Google\\Protobuf\\NullValue::class);\n        $this->writeOneof(1, $var);\n\n        return $this;\n    }\n\n    /**\n     * Represents a double value.\n     *\n     * Generated from protobuf field <code>double number_value = 2;</code>\n     * @return float\n     */\n    public function getNumberValue()\n    {\n        return $this->readOneof(2);\n    }\n\n    public function hasNumberValue()\n    {\n        return $this->hasOneof(2);\n    }\n\n    /**\n     * Represents a double value.\n     *\n     * Generated from protobuf field <code>double number_value = 2;</code>\n     * @param float $var\n     * @return $this\n     */\n    public function setNumberValue($var)\n    {\n        GPBUtil::checkDouble($var);\n        $this->writeOneof(2, $var);\n\n        return $this;\n    }\n\n    /**\n     * Represents a string value.\n     *\n     * Generated from protobuf field <code>string string_value = 3;</code>\n     * @return string\n     */\n    public function getStringValue()\n    {\n        return $this->readOneof(3);\n    }\n\n    public function hasStringValue()\n    {\n        return $this->hasOneof(3);\n    }\n\n    /**\n     * Represents a string value.\n     *\n     * Generated from protobuf field <code>string string_value = 3;</code>\n     * @param string $var\n     * @return $this\n     */\n    public function setStringValue($var)\n    {\n        GPBUtil::checkString($var, True);\n        $this->writeOneof(3, $var);\n\n        return $this;\n    }\n\n    /**\n     * Represents a boolean value.\n     *\n     * Generated from protobuf field <code>bool bool_value = 4;</code>\n     * @return bool\n     */\n    public function getBoolValue()\n    {\n        return $this->readOneof(4);\n    }\n\n    public function hasBoolValue()\n    {\n        return $this->hasOneof(4);\n    }\n\n    /**\n     * Represents a boolean value.\n     *\n     * Generated from protobuf field <code>bool bool_value = 4;</code>\n     * @param bool $var\n     * @return $this\n     */\n    public function setBoolValue($var)\n    {\n        GPBUtil::checkBool($var);\n        $this->writeOneof(4, $var);\n\n        return $this;\n    }\n\n    /**\n     * Represents a structured value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct struct_value = 5;</code>\n     * @return \\Google\\Protobuf\\Struct|null\n     */\n    public function getStructValue()\n    {\n        return $this->readOneof(5);\n    }\n\n    public function hasStructValue()\n    {\n        return $this->hasOneof(5);\n    }\n\n    /**\n     * Represents a structured value.\n     *\n     * Generated from protobuf field <code>.google.protobuf.Struct struct_value = 5;</code>\n     * @param \\Google\\Protobuf\\Struct $var\n     * @return $this\n     */\n    public function setStructValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\Struct::class);\n        $this->writeOneof(5, $var);\n\n        return $this;\n    }\n\n    /**\n     * Represents a repeated `Value`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.ListValue list_value = 6;</code>\n     * @return \\Google\\Protobuf\\ListValue|null\n     */\n    public function getListValue()\n    {\n        return $this->readOneof(6);\n    }\n\n    public function hasListValue()\n    {\n        return $this->hasOneof(6);\n    }\n\n    /**\n     * Represents a repeated `Value`.\n     *\n     * Generated from protobuf field <code>.google.protobuf.ListValue list_value = 6;</code>\n     * @param \\Google\\Protobuf\\ListValue $var\n     * @return $this\n     */\n    public function setListValue($var)\n    {\n        GPBUtil::checkMessage($var, \\Google\\Protobuf\\ListValue::class);\n        $this->writeOneof(6, $var);\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getKind()\n    {\n        return $this->whichOneof(\"kind\");\n    }\n\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/google/protobuf/src/phpdoc.dist.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Install phpDocumentor to generate docs. -->\n<phpdoc>\n  <parser>\n    <target>doc</target>\n  </parser>\n  <transformer>\n    <target>doc</target>\n  </transformer>\n  <files>\n    <file>Google/Protobuf/Internal/MapField.php</file>\n    <file>Google/Protobuf/Internal/Message.php</file>\n    <file>Google/Protobuf/Internal/RepeatedField.php</file>\n  </files>\n</phpdoc>\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/MAINTAINERS.md",
    "content": "This page lists all active maintainers of this repository. If you were a\nmaintainer and would like to add your name to the Emeritus list, please send us a\nPR.\n\nSee [GOVERNANCE.md](https://github.com/grpc/grpc-community/blob/master/governance.md)\nfor governance guidelines and how to become a maintainer.\nSee [CONTRIBUTING.md](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md)\nfor general contribution guidelines.\n\n## Maintainers (in alphabetical order)\n- [stanley-cheung](https://github.com/stanley-cheung), Google Inc.\n- [wenbozhu](https://github.com/wenbozhu), Google Inc.\n- [zhouyihaiding](https://github.com/zhouyihaiding), Google Inc.\n\n## Emeritus Maintainers (in alphabetical order)\n- [murgatroid99](https://github.com/murgatroid99), Google Inc.\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/README.md",
    "content": "# gRPC PHP Client Library\n\nThis repository contains only PHP files to support Composer installation.\n\nThis repository is a mirror of [gRPC](https://github.com/grpc/grpc). Any support\nrequests, bug reports, or development contributions should be directed to\nthat project.\n\nTo install gRPC for PHP, please see https://github.com/grpc/grpc/tree/master/src/php\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/composer.json",
    "content": "{\n  \"name\": \"grpc/grpc\",\n  \"type\": \"library\",\n  \"description\": \"gRPC library for PHP\",\n  \"keywords\": [\"rpc\"],\n  \"homepage\": \"https://grpc.io\",\n  \"license\": \"Apache-2.0\",\n  \"version\": \"1.74.0\",\n  \"require\": {\n    \"php\": \">=7.0.0\"\n  },\n  \"require-dev\": {\n    \"google/auth\": \"^v1.3.0\"\n  },\n  \"suggest\": {\n    \"ext-protobuf\": \"For better performance, install the protobuf C extension.\",\n    \"google/protobuf\": \"To get started using grpc quickly, install the native protobuf library.\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"Grpc\\\\\": \"src/lib/\"\n    }\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/etc/roots.pem",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\n# License, v. 2.0. If a copy of the MPL was not distributed with this\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA\n# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA\n# Label: \"GlobalSign Root CA\"\n# Serial: 4835703278459707669005204\n# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a\n# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c\n# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99\n-----BEGIN CERTIFICATE-----\nMIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\nA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\nb3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\nMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\nYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\naWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\njc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\nxy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\n1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\nsnUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\nU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\n9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E\nBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B\nAQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz\nyj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE\n38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP\nAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad\nDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME\nHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2\n# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2\n# Label: \"GlobalSign Root CA - R2\"\n# Serial: 4835703278459682885658125\n# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30\n# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe\n# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e\n-----BEGIN CERTIFICATE-----\nMIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1\nMDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL\nv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8\neoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq\ntTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\nC9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa\nzq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB\nmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH\nV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n\nbG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG\n3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs\nJ0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO\n291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS\not+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\nAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\nTBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited\n# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited\n# Label: \"Entrust.net Premium 2048 Secure Server CA\"\n# Serial: 946069240\n# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90\n# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31\n# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77\n-----BEGIN CERTIFICATE-----\nMIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML\nRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp\nbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5\nIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp\nZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3\nMjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3\nLmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp\nYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG\nA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq\nK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe\nsYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX\nMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT\nXTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/\nHoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH\n4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV\nHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub\nj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo\nU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf\nzX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b\nu/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+\nbYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er\nfF6adulZkMV8gzURZVE=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust\n# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust\n# Label: \"Baltimore CyberTrust Root\"\n# Serial: 33554617\n# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4\n# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74\n# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb\n-----BEGIN CERTIFICATE-----\nMIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\nRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\nVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\nDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\nZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\nVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\nmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\nIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\nmpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\nXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\ndc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\njl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\nBE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\nDQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\njkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\nEpn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\nksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\nR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n-----END CERTIFICATE-----\n\n# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.\n# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.\n# Label: \"Entrust Root Certification Authority\"\n# Serial: 1164660820\n# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4\n# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9\n# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c\n-----BEGIN CERTIFICATE-----\nMIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC\nVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0\nLm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW\nKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl\ncnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw\nNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw\nNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy\nZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV\nBAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ\nKoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo\nNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4\n4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9\nKlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI\nrb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi\n94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB\nsDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi\ngA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo\nkORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE\nvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA\nA4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t\nO1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua\nAGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP\n9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/\neu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m\n0vdXcDazv/wor3ElhVsT/h5/WrQ8\n-----END CERTIFICATE-----\n\n# Issuer: CN=AAA Certificate Services O=Comodo CA Limited\n# Subject: CN=AAA Certificate Services O=Comodo CA Limited\n# Label: \"Comodo AAA Services root\"\n# Serial: 1\n# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0\n# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49\n# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4\n-----BEGIN CERTIFICATE-----\nMIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb\nMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\nGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj\nYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL\nMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\nBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM\nGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP\nADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua\nBtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe\n3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4\nYgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR\nrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm\nez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU\noBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\nMAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v\nQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t\nb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF\nAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q\nGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz\nRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2\nG9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi\nl2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3\nsmPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited\n# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited\n# Label: \"QuoVadis Root CA 2\"\n# Serial: 1289\n# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b\n# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7\n# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86\n-----BEGIN CERTIFICATE-----\nMIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x\nGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv\nb3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV\nBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W\nYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa\nGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg\nFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J\nWpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB\nrrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp\n+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1\nksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i\nUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz\nPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og\n/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH\noycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI\nyV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud\nEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2\nA8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL\nMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT\nElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f\nBluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn\ng/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl\nfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K\nWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha\nB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc\nhLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR\nTUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD\nmbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z\nohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y\n4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza\n8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u\n-----END CERTIFICATE-----\n\n# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited\n# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited\n# Label: \"QuoVadis Root CA 3\"\n# Serial: 1478\n# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf\n# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85\n# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35\n-----BEGIN CERTIFICATE-----\nMIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x\nGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv\nb3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV\nBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W\nYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM\nV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB\n4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr\nH556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd\n8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv\nvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT\nmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe\nbtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc\nT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt\nWAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ\nc6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A\n4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD\nVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG\nCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0\naXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0\naWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu\ndC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw\nczALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G\nA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC\nTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg\nUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0\n7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem\nd1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd\n+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B\n4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN\nt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x\nDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57\nk8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s\nzHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j\nWy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT\nmJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK\n4SVhM7JZG+Ju1zdXtg2pEto=\n-----END CERTIFICATE-----\n\n# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1\n# Subject: O=SECOM Trust.net OU=Security Communication RootCA1\n# Label: \"Security Communication Root CA\"\n# Serial: 0\n# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a\n# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7\n# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c\n-----BEGIN CERTIFICATE-----\nMIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY\nMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t\ndW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5\nWjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD\nVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8\n9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ\nDKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9\nMs+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N\nQV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ\nxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G\nA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T\nAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG\nkl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr\nUj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5\nBw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU\nJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot\nRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com\n# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com\n# Label: \"XRamp Global CA Root\"\n# Serial: 107108908803651509692980124233745014957\n# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1\n# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6\n# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2\n-----BEGIN CERTIFICATE-----\nMIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB\ngjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk\nMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY\nUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx\nNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3\ndy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy\ndmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB\ndXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6\n38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP\nKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q\nDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4\nqEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa\nJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi\nPvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P\nBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs\njVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0\neS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD\nggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR\nvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt\nqZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa\nIR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy\ni6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ\nO+7ETPTsJ3xCwnR8gooJybQDJbw=\n-----END CERTIFICATE-----\n\n# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority\n# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority\n# Label: \"Go Daddy Class 2 CA\"\n# Serial: 0\n# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67\n# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4\n# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4\n-----BEGIN CERTIFICATE-----\nMIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh\nMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE\nYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3\nMDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo\nZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg\nMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN\nADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA\nPVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w\nwdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi\nEqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY\navx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+\nYihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE\nsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h\n/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5\nIEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj\nYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD\nggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy\nOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P\nTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ\nHmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER\ndEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf\nReYNnyicsbkqWletNw+vHX/bvZ8=\n-----END CERTIFICATE-----\n\n# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority\n# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority\n# Label: \"Starfield Class 2 CA\"\n# Serial: 0\n# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24\n# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a\n# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58\n-----BEGIN CERTIFICATE-----\nMIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl\nMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp\nU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw\nNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE\nChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp\nZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3\nDQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf\n8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN\n+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0\nX9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa\nK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA\n1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G\nA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR\nzt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0\nYXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD\nbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w\nDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3\nL7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D\neruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl\nxy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp\nVSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY\nWQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Assured ID Root CA\"\n# Serial: 17154717934120587862167794914071425081\n# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72\n# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43\n# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c\n-----BEGIN CERTIFICATE-----\nMIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv\nb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG\nEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl\ncnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c\nJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP\nmDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+\nwRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4\nVYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/\nAUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB\nAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\nBBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun\npyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC\ndWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf\nfwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm\nNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx\nH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe\n+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Global Root CA\"\n# Serial: 10944719598952040374951832963794454346\n# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e\n# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36\n# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61\n-----BEGIN CERTIFICATE-----\nMIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\nQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\nCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\nnh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\nT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\ngdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\nTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\nDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\nhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\nPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\nYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\nCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert High Assurance EV Root CA\"\n# Serial: 3553400076410547919724730734378100087\n# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a\n# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25\n# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf\n-----BEGIN CERTIFICATE-----\nMIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\nZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL\nMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\nLmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug\nRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm\n+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW\nPNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM\nxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB\nIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3\nhzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg\nEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF\nMAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA\nFLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec\nnzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z\neM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF\nhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2\nYzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\nvEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep\n+OkuE6N36B9K\n-----END CERTIFICATE-----\n\n# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG\n# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG\n# Label: \"SwissSign Gold CA - G2\"\n# Serial: 13492815561806991280\n# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93\n# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61\n# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95\n-----BEGIN CERTIFICATE-----\nMIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV\nBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln\nbiBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF\nMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT\nd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC\nCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8\n76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+\nbbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c\n6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE\nemA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd\nMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt\nMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y\nMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y\nFGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi\naG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM\ngI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB\nqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7\nlqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn\n8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov\nL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6\n45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO\nUYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5\nO1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC\nbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv\nGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a\n77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC\nhdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3\n92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp\nLd6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w\nZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt\nQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ\n-----END CERTIFICATE-----\n\n# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG\n# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG\n# Label: \"SwissSign Silver CA - G2\"\n# Serial: 5700383053117599563\n# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13\n# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb\n# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5\n-----BEGIN CERTIFICATE-----\nMIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE\nBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu\nIFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow\nRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY\nU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A\nMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv\nFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br\nYT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF\nnbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH\n6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt\neJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/\nc8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ\nMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH\nHTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf\njNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6\n5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB\nrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\nF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c\nwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0\ncDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB\nAHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp\nWJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9\nxCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ\n2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ\nIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8\naRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X\nem1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR\ndAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/\nOMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+\nhAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy\ntGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u\n-----END CERTIFICATE-----\n\n# Issuer: CN=SecureTrust CA O=SecureTrust Corporation\n# Subject: CN=SecureTrust CA O=SecureTrust Corporation\n# Label: \"SecureTrust CA\"\n# Serial: 17199774589125277788362757014266862032\n# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1\n# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11\n# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73\n-----BEGIN CERTIFICATE-----\nMIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz\nMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv\ncnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz\nZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO\n0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao\nwW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj\n7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS\n8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT\nBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB\n/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg\nJYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC\nNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3\n6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/\n3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm\nD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS\nCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR\n3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Secure Global CA O=SecureTrust Corporation\n# Subject: CN=Secure Global CA O=SecureTrust Corporation\n# Label: \"Secure Global CA\"\n# Serial: 9751836167731051554232119481456978597\n# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de\n# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b\n# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69\n-----BEGIN CERTIFICATE-----\nMIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx\nMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg\nQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ\niQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa\n/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ\njnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI\nHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7\nsFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w\ngZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF\nMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw\nKaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG\nAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L\nURYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO\nH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm\nI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY\niNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc\nf8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW\n-----END CERTIFICATE-----\n\n# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited\n# Subject: CN=COMODO Certification Authority O=COMODO CA Limited\n# Label: \"COMODO Certification Authority\"\n# Serial: 104350513648249232941998508985834464573\n# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75\n# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b\n# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66\n-----BEGIN CERTIFICATE-----\nMIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB\ngTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G\nA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV\nBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw\nMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl\nYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P\nRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0\naG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3\nUcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI\n2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8\nQ5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp\n+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+\nDT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O\nnKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW\n/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g\nPKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u\nQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY\nSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv\nIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/\nRxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4\nzJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd\nBA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB\nZQ==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.\n# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C.\n# Label: \"Network Solutions Certificate Authority\"\n# Serial: 116697915152937497490437556386812487904\n# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e\n# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce\n# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c\n-----BEGIN CERTIFICATE-----\nMIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi\nMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu\nMTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp\ndHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV\nUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO\nZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz\nc7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP\nOCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl\nmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF\nBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4\nqY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw\ngZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB\nBjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu\nbmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp\ndHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8\n6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/\nh1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH\n/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv\nwKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN\npGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey\n-----END CERTIFICATE-----\n\n# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited\n# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited\n# Label: \"COMODO ECC Certification Authority\"\n# Serial: 41578283867086692638256921589707938090\n# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23\n# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11\n# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7\n-----BEGIN CERTIFICATE-----\nMIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL\nMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\nBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT\nIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw\nMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy\nZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N\nT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv\nbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR\nFtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J\ncfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW\nBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/\nBAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm\nfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv\nGDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Certigna O=Dhimyotis\n# Subject: CN=Certigna O=Dhimyotis\n# Label: \"Certigna\"\n# Serial: 18364802974209362175\n# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff\n# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97\n# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d\n-----BEGIN CERTIFICATE-----\nMIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV\nBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X\nDTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ\nBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4\nQCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny\ngQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw\nzBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q\n130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2\nJsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw\nDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw\nZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT\nAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj\nAQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG\n9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h\nbV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc\nfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu\nHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w\nt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw\nWyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc\n# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc\n# Label: \"Cybertrust Global Root\"\n# Serial: 4835703278459682877484360\n# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1\n# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6\n# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3\n-----BEGIN CERTIFICATE-----\nMIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG\nA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh\nbCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE\nChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS\nb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5\n7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS\nJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y\nHLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP\nt3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz\nFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY\nXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/\nMB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw\nhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js\nMB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA\nA4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj\nWqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx\nXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o\nomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc\nA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW\nWL1WMRJOEcgh4LMRkWXbtKaIOM5V\n-----END CERTIFICATE-----\n\n# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority\n# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority\n# Label: \"ePKI Root Certification Authority\"\n# Serial: 28956088682735189655030529057352760477\n# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3\n# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0\n# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5\n-----BEGIN CERTIFICATE-----\nMIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe\nMQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0\nZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe\nFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw\nIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL\nSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF\nAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH\nSyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh\nijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X\nDZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1\nTBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ\nfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA\nsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU\nWH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS\nnT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH\ndmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip\nNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC\nAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF\nMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH\nClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB\nuvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl\nPwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP\nJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/\ngpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2\nj6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6\n5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB\no2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS\n/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z\nGp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE\nW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D\nhNQ+IIX3Sj0rnP0qCglN6oH4EZw=\n-----END CERTIFICATE-----\n\n# Issuer: O=certSIGN OU=certSIGN ROOT CA\n# Subject: O=certSIGN OU=certSIGN ROOT CA\n# Label: \"certSIGN ROOT CA\"\n# Serial: 35210227249154\n# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17\n# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b\n# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb\n-----BEGIN CERTIFICATE-----\nMIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT\nAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD\nQTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP\nMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC\nASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do\n0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ\nUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d\nRdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ\nOA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv\nJoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C\nAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O\nBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ\nLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY\nMnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ\n44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I\nJd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw\ni/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN\n9u6wWk5JRFRYX0KD\n-----END CERTIFICATE-----\n\n# Issuer: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services)\n# Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services)\n# Label: \"NetLock Arany (Class Gold) Főtanúsítvány\"\n# Serial: 80544274841616\n# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88\n# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91\n# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98\n-----BEGIN CERTIFICATE-----\nMIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG\nEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3\nMDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl\ncnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR\ndGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB\npzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM\nb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm\naWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz\nIEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT\nlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz\nAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5\nVA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG\nILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2\nBJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG\nAQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M\nU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh\nbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C\n+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC\nbLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F\nuLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2\nXjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post\n# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post\n# Label: \"Hongkong Post Root CA 1\"\n# Serial: 1000\n# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca\n# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58\n# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2\n-----BEGIN CERTIFICATE-----\nMIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx\nFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg\nUm9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG\nA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr\nb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ\njVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn\nPzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh\nZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9\nnnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h\nq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED\nMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC\nmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3\n7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB\noiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs\nEhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO\nfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi\nAmvZWg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc.\n# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc.\n# Label: \"SecureSign RootCA11\"\n# Serial: 1\n# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26\n# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3\n# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12\n-----BEGIN CERTIFICATE-----\nMIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr\nMCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG\nA1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0\nMDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp\nY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD\nQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz\ni1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8\nh9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV\nMdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9\nUK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni\n8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC\nh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD\nVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB\nAKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm\nKbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ\nX5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr\nQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5\npPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN\nQSdJQO7e5iNEOdyhIta6A/I=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd.\n# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd.\n# Label: \"Microsec e-Szigno Root CA 2009\"\n# Serial: 14014712776195784473\n# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1\n# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e\n# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78\n-----BEGIN CERTIFICATE-----\nMIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD\nVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0\nZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G\nCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y\nOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx\nFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp\nZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o\ndTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP\nkd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc\ncbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U\nfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7\nN4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC\nxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1\n+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM\nPcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG\nSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h\nmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk\nddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775\ntyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c\n2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t\nHMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3\n# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3\n# Label: \"GlobalSign Root CA - R3\"\n# Serial: 4835703278459759426209954\n# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28\n# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad\n# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b\n-----BEGIN CERTIFICATE-----\nMIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4\nMTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8\nRgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT\ngHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm\nKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd\nQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ\nXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o\nLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU\nRUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp\njjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK\n6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX\nmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs\nMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH\nWD9f\n-----END CERTIFICATE-----\n\n# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068\n# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068\n# Label: \"Autoridad de Certificacion Firmaprofesional CIF A62634068\"\n# Serial: 6047274297262753887\n# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3\n# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa\n# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef\n-----BEGIN CERTIFICATE-----\nMIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE\nBhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h\ncHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy\nMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg\nQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi\nMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9\nthDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM\ncas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG\nL9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i\nNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h\nX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b\nm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy\nZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja\nEbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T\nKI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF\n6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh\nOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD\nVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD\nVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp\ncm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv\nACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl\nAGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF\n661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9\nam58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1\nILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481\nPyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS\n3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k\nSeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF\n3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM\nZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g\nStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz\nQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB\njLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V\n-----END CERTIFICATE-----\n\n# Issuer: CN=Izenpe.com O=IZENPE S.A.\n# Subject: CN=Izenpe.com O=IZENPE S.A.\n# Label: \"Izenpe.com\"\n# Serial: 917563065490389241595536686991402621\n# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73\n# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19\n# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f\n-----BEGIN CERTIFICATE-----\nMIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4\nMQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6\nZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD\nVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j\nb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq\nscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO\nxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H\nLmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX\nuaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD\nyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+\nJrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q\nrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN\nBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L\nhij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB\nQFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+\nHMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu\nZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg\nQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB\nBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx\nMCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\nAQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA\nA4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb\nlaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56\nawmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo\nJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw\nLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT\nVyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk\nLhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb\nUjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/\nQnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+\nnaM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls\nQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.\n# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.\n# Label: \"Go Daddy Root Certificate Authority - G2\"\n# Serial: 0\n# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01\n# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b\n# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da\n-----BEGIN CERTIFICATE-----\nMIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx\nEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT\nEUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp\nZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz\nNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH\nEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE\nAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD\nE6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH\n/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy\nDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh\nGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR\ntDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA\nAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE\nFDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX\nWWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu\n9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr\ngIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo\n2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO\nLPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI\n4uJEvlz36hz1\n-----END CERTIFICATE-----\n\n# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.\n# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc.\n# Label: \"Starfield Root Certificate Authority - G2\"\n# Serial: 0\n# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96\n# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e\n# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5\n-----BEGIN CERTIFICATE-----\nMIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx\nEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\nHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs\nZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw\nMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6\nb25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj\naG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp\nY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg\nnLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1\nHOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N\nHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN\ndloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0\nHZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO\nBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G\nCSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU\nsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3\n4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg\n8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K\npL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1\nmMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0\n-----END CERTIFICATE-----\n\n# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.\n# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc.\n# Label: \"Starfield Services Root Certificate Authority - G2\"\n# Serial: 0\n# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2\n# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f\n# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5\n-----BEGIN CERTIFICATE-----\nMIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx\nEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\nHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs\nZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\nMDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD\nVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy\nZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy\ndmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p\nOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2\n8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K\nTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe\nhRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk\n6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw\nDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q\nAdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI\nbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB\nve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z\nqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\niEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn\n0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN\nsSi6\n-----END CERTIFICATE-----\n\n# Issuer: CN=AffirmTrust Commercial O=AffirmTrust\n# Subject: CN=AffirmTrust Commercial O=AffirmTrust\n# Label: \"AffirmTrust Commercial\"\n# Serial: 8608355977964138876\n# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7\n# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7\n# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7\n-----BEGIN CERTIFICATE-----\nMIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE\nBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz\ndCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL\nMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp\ncm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP\nHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr\nba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL\nMeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1\nyHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr\nVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/\nnx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ\nKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG\nXUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj\nvbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt\nZ8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g\nN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC\nnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=\n-----END CERTIFICATE-----\n\n# Issuer: CN=AffirmTrust Networking O=AffirmTrust\n# Subject: CN=AffirmTrust Networking O=AffirmTrust\n# Label: \"AffirmTrust Networking\"\n# Serial: 8957382827206547757\n# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f\n# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f\n# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b\n-----BEGIN CERTIFICATE-----\nMIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE\nBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz\ndCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL\nMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp\ncm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y\nYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua\nkCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL\nQESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp\n6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG\nyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i\nQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ\nKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO\ntDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu\nQY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ\nLgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u\nolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48\nx3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=\n-----END CERTIFICATE-----\n\n# Issuer: CN=AffirmTrust Premium O=AffirmTrust\n# Subject: CN=AffirmTrust Premium O=AffirmTrust\n# Label: \"AffirmTrust Premium\"\n# Serial: 7893706540734352110\n# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57\n# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27\n# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a\n-----BEGIN CERTIFICATE-----\nMIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE\nBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz\ndCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG\nA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U\ncnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf\nqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ\nJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ\n+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS\ns8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5\nHMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7\n70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG\nV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S\nqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S\n5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia\nC1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX\nOwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE\nFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/\nBAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2\nKI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg\nNt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B\n8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ\nMKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc\n0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ\nu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF\nu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH\nYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8\nGKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO\nRtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e\nKeC2uAloGRwYQw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust\n# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust\n# Label: \"AffirmTrust Premium ECC\"\n# Serial: 8401224907861490260\n# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d\n# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb\n# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23\n-----BEGIN CERTIFICATE-----\nMIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC\nVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ\ncmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ\nBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt\nVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D\n0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9\nss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G\nA1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G\nA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs\naobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I\nflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority\n# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority\n# Label: \"Certum Trusted Network CA\"\n# Serial: 279744\n# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78\n# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e\n# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e\n-----BEGIN CERTIFICATE-----\nMIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM\nMSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D\nZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU\ncnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3\nWjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg\nUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw\nIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH\nUV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM\nTXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU\nBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM\nkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x\nAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV\nHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y\nsHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL\nI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8\nJ9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY\nVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI\n03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=\n-----END CERTIFICATE-----\n\n# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA\n# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA\n# Label: \"TWCA Root Certification Authority\"\n# Serial: 1\n# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79\n# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48\n# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44\n-----BEGIN CERTIFICATE-----\nMIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES\nMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU\nV0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz\nWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO\nLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm\naWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE\nAcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH\nK3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX\nRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z\nrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx\n3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq\nhkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC\nMErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls\nXebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D\nlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn\naspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ\nYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==\n-----END CERTIFICATE-----\n\n# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2\n# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2\n# Label: \"Security Communication RootCA2\"\n# Serial: 0\n# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43\n# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74\n# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6\n-----BEGIN CERTIFICATE-----\nMIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl\nMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe\nU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX\nDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy\ndXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj\nYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV\nOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr\nzbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM\nVAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ\nhNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO\nojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw\nawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs\nOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3\nDQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF\ncoJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc\nokgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8\nt/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy\n1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/\nSjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03\n-----END CERTIFICATE-----\n\n# Issuer: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes\n# Subject: CN=EC-ACC O=Agencia Catalana de Certificacio (NIF Q-0801176-I) OU=Serveis Publics de Certificacio/Vegeu https://www.catcert.net/verarrel (c)03/Jerarquia Entitats de Certificacio Catalanes\n# Label: \"EC-ACC\"\n# Serial: -23701579247955709139626555126524820479\n# MD5 Fingerprint: eb:f5:9d:29:0d:61:f9:42:1f:7c:c2:ba:6d:e3:15:09\n# SHA1 Fingerprint: 28:90:3a:63:5b:52:80:fa:e6:77:4c:0b:6d:a7:d6:ba:a6:4a:f2:e8\n# SHA256 Fingerprint: 88:49:7f:01:60:2f:31:54:24:6a:e2:8c:4d:5a:ef:10:f1:d8:7e:bb:76:62:6f:4a:e0:b7:f9:5b:a7:96:87:99\n-----BEGIN CERTIFICATE-----\nMIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB\n8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy\ndGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1\nYmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3\ndy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh\nIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD\nLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG\nEwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g\nKE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD\nZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu\nbmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg\nZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R\n85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm\n4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV\nHMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd\nQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t\nlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB\no4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E\nBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4\nopvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo\ndHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW\nZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN\nAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y\n/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k\nSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy\nRp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS\nAgu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl\nnJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority\n# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority\n# Label: \"Hellenic Academic and Research Institutions RootCA 2011\"\n# Serial: 0\n# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9\n# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d\n# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71\n-----BEGIN CERTIFICATE-----\nMIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix\nRDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1\ndGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p\nYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw\nNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK\nEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl\ncnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl\nc2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz\ndYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ\nfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns\nbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD\n75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP\nFEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV\nHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp\n5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu\nb3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA\nA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p\n6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8\nTqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7\ndIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys\nNnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI\nl7WdmplNsDz4SgCbZN2fOUvRJ9e4\n-----END CERTIFICATE-----\n\n# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967\n# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967\n# Label: \"Actalis Authentication Root CA\"\n# Serial: 6271844772424770508\n# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6\n# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac\n# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66\n-----BEGIN CERTIFICATE-----\nMIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE\nBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w\nMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290\nIENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC\nSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1\nODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv\nUTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX\n4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9\nKK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/\ngCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb\nrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ\n51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F\nbe8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe\nKF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F\nv6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn\nfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7\njPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz\nezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt\nifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL\ne3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70\njsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz\nWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V\nSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j\npwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX\nX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok\nfcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R\nK4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU\nZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU\nLysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT\nLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327\n# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327\n# Label: \"Buypass Class 2 Root CA\"\n# Serial: 2\n# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29\n# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99\n# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48\n-----BEGIN CERTIFICATE-----\nMIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd\nMBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg\nQ2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow\nTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw\nHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB\nBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr\n6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV\nL4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91\n1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx\nMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ\nQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB\narcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr\nUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi\nFRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS\nP/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN\n9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP\nAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz\nuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h\n9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s\nA20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t\nOluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo\n+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7\nKcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2\nDISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us\nH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ\nI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7\n5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h\n3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz\nY11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327\n# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327\n# Label: \"Buypass Class 3 Root CA\"\n# Serial: 2\n# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec\n# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57\n# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d\n-----BEGIN CERTIFICATE-----\nMIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd\nMBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg\nQ2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow\nTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw\nHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB\nBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y\nZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E\nN3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9\ntznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX\n0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c\n/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X\nKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY\nzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS\nO1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D\n34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP\nK9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3\nAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv\nTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj\nQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV\ncSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS\nIGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2\nHJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa\nO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv\n033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u\ndmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE\nkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41\n3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD\nu79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq\n4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc=\n-----END CERTIFICATE-----\n\n# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center\n# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center\n# Label: \"T-TeleSec GlobalRoot Class 3\"\n# Serial: 1\n# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef\n# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1\n# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd\n-----BEGIN CERTIFICATE-----\nMIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx\nKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd\nBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl\nYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1\nOTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy\naXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50\nZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN\n8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/\nRLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4\nhqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5\nZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM\nEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj\nQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1\nA/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy\nWL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ\n1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30\n6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT\n91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml\ne9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p\nTpPDpFQUWw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH\n# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH\n# Label: \"D-TRUST Root Class 3 CA 2 2009\"\n# Serial: 623603\n# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f\n# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0\n# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1\n-----BEGIN CERTIFICATE-----\nMIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF\nMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD\nbGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha\nME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM\nHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB\nBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03\nUAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42\ntSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R\nySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM\nlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp\n/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G\nA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G\nA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj\ndG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy\nMENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl\ncmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js\nL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL\nBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni\nacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0\no3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K\nzCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8\nPIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y\nJohw1+qRzT65ysCQblrGXnRl11z+o+I=\n-----END CERTIFICATE-----\n\n# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH\n# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH\n# Label: \"D-TRUST Root Class 3 CA 2 EV 2009\"\n# Serial: 623604\n# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6\n# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83\n# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81\n-----BEGIN CERTIFICATE-----\nMIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF\nMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD\nbGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw\nNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV\nBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn\nljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0\n3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z\nqQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR\np75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8\nHgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw\nggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea\nHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw\nOi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh\nc3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E\nRT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt\ndHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku\nY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp\n3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05\nnsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF\nCSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na\nxpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX\nKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1\n-----END CERTIFICATE-----\n\n# Issuer: CN=CA Disig Root R2 O=Disig a.s.\n# Subject: CN=CA Disig Root R2 O=Disig a.s.\n# Label: \"CA Disig Root R2\"\n# Serial: 10572350602393338211\n# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03\n# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71\n# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03\n-----BEGIN CERTIFICATE-----\nMIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV\nBAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu\nMRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy\nMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx\nEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw\nggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe\nNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH\nPWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I\nx2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe\nQTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR\nyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO\nQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912\nH9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ\nQfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD\ni/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs\nnLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1\nrqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud\nDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI\nhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM\ntCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf\nGopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb\nlvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka\n+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal\nTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i\nnSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3\ngzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr\nG5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os\nzMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x\nL4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL\n-----END CERTIFICATE-----\n\n# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV\n# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV\n# Label: \"ACCVRAIZ1\"\n# Serial: 6828503384748696800\n# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02\n# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17\n# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13\n-----BEGIN CERTIFICATE-----\nMIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE\nAwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw\nCQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ\nBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND\nVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb\nqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY\nHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo\nG2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA\nlHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr\nIA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/\n0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH\nk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47\n4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO\nm3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa\ncXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl\nuUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI\nKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls\nZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG\nAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2\nVuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT\nVfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG\nCCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA\ncgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA\nQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA\n7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA\ncgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA\nQwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA\nczAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu\naHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt\naW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud\nDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF\nBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp\nD70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU\nJyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m\nAM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD\nvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms\ntn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH\n7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h\nI6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA\nh1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF\nd3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H\npPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7\n-----END CERTIFICATE-----\n\n# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA\n# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA\n# Label: \"TWCA Global Root CA\"\n# Serial: 3262\n# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96\n# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65\n# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b\n-----BEGIN CERTIFICATE-----\nMIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx\nEjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT\nVFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5\nNTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT\nB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF\n10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz\n0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh\nMBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH\nzIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc\n46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2\nyKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi\nlaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP\noA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA\nBDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE\nqYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm\n4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL\n1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn\nLhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF\nH6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo\nRI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+\nnile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh\n15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW\n6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW\nnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j\nwa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz\naGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy\nKwbQBM0=\n-----END CERTIFICATE-----\n\n# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera\n# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera\n# Label: \"TeliaSonera Root CA v1\"\n# Serial: 199041966741090107964904287217786801558\n# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c\n# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37\n# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89\n-----BEGIN CERTIFICATE-----\nMIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw\nNzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv\nb3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD\nVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2\nMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F\nVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1\n7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X\nZ75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+\n/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs\n81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm\ndtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe\nOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu\nsDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4\npgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs\nslESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ\narMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD\nVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG\n9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl\ndxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx\n0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj\nTQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed\nY2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7\nQ4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI\nOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7\nvVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW\nt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn\nHL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx\nSK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=\n-----END CERTIFICATE-----\n\n# Issuer: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi\n# Subject: CN=E-Tugra Certification Authority O=E-Tuğra EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. OU=E-Tugra Sertifikasyon Merkezi\n# Label: \"E-Tugra Certification Authority\"\n# Serial: 7667447206703254355\n# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49\n# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39\n# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c\n-----BEGIN CERTIFICATE-----\nMIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV\nBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC\naWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV\nBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1\nZ3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz\nMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+\nBgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp\nem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN\nZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY\nB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH\nD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF\nQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo\nq1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D\nk14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH\nfC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut\ndEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM\nti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8\nzLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn\nrFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX\nU8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6\nJyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5\nXPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF\nNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR\nHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY\nGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c\n77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3\n+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK\nvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6\nFiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl\nyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P\nAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD\ny4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d\nNL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA==\n-----END CERTIFICATE-----\n\n# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center\n# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center\n# Label: \"T-TeleSec GlobalRoot Class 2\"\n# Serial: 1\n# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a\n# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9\n# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52\n-----BEGIN CERTIFICATE-----\nMIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx\nKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd\nBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl\nYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1\nOTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy\naXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50\nZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd\nAqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC\nFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi\n1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq\njnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ\nwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj\nQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/\nWSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy\nNsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC\nuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw\nIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6\ng1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN\n9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP\nBSeOE6Fuwg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Atos TrustedRoot 2011 O=Atos\n# Subject: CN=Atos TrustedRoot 2011 O=Atos\n# Label: \"Atos TrustedRoot 2011\"\n# Serial: 6643877497813316402\n# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56\n# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21\n# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74\n-----BEGIN CERTIFICATE-----\nMIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE\nAwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG\nEwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM\nFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC\nREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp\nNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM\nVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+\nSZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ\n4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L\ncp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi\neowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV\nHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG\nA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3\nDQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j\nvZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP\nDpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc\nmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D\nlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv\nKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed\n-----END CERTIFICATE-----\n\n# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited\n# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited\n# Label: \"QuoVadis Root CA 1 G3\"\n# Serial: 687049649626669250736271037606554624078720034195\n# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab\n# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67\n# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74\n-----BEGIN CERTIFICATE-----\nMIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL\nBQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc\nBgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00\nMjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM\naW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV\nwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe\nrNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341\n68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh\n4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp\nUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o\nabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc\n3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G\nKubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt\nhfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO\nTk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt\nzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\nBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD\nggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC\nMTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2\ncDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN\nqXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5\nYCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv\nb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2\n8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k\nNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj\nZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp\nq1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt\nnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD\n-----END CERTIFICATE-----\n\n# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited\n# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited\n# Label: \"QuoVadis Root CA 2 G3\"\n# Serial: 390156079458959257446133169266079962026824725800\n# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06\n# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36\n# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40\n-----BEGIN CERTIFICATE-----\nMIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL\nBQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc\nBgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00\nMjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM\naW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf\nqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW\nn4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym\nc5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+\nO7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1\no9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j\nIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq\nIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz\n8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh\nvNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l\n7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG\ncC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\nBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD\nggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66\nAarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC\nroijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga\nW/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n\nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE\n+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV\ncsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd\ndbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg\nKCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM\nHVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4\nWSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M\n-----END CERTIFICATE-----\n\n# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited\n# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited\n# Label: \"QuoVadis Root CA 3 G3\"\n# Serial: 268090761170461462463995952157327242137089239581\n# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7\n# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d\n# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46\n-----BEGIN CERTIFICATE-----\nMIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL\nBQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc\nBgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00\nMjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM\naW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR\n/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu\nFoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR\nU7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c\nra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR\nFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k\nA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw\neyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl\nsSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp\nVzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q\nA4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+\nydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\nBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD\nggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px\nKGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI\nFUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv\noxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg\nu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP\n0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf\n3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl\n8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+\nDhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN\nPlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/\nywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Assured ID Root G2\"\n# Serial: 15385348160840213938643033620894905419\n# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d\n# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f\n# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85\n-----BEGIN CERTIFICATE-----\nMIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv\nb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG\nEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl\ncnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA\nn61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc\nbiJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp\nEgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA\nbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu\nYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB\nAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW\nBBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI\nQW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I\n0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni\nlmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9\nB5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv\nON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo\nIhNzbM8m9Yop5w==\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Assured ID Root G3\"\n# Serial: 15459312981008553731928384953135426796\n# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb\n# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89\n# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2\n-----BEGIN CERTIFICATE-----\nMIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw\nCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu\nZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg\nRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV\nUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu\nY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq\nhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf\nZn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q\nRSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/\nBAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD\nAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY\nJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv\n6pZjamVFkpUBtA==\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Global Root G2\"\n# Serial: 4293743540046975378534879503202253541\n# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44\n# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4\n# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f\n-----BEGIN CERTIFICATE-----\nMIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\nMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT\nMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\nb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI\n2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx\n1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ\nq2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz\ntCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ\nvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP\nBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV\n5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY\n1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4\nNeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG\nFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91\n8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe\npLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl\nMrY=\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Global Root G3\"\n# Serial: 7089244469030293291760083333884364146\n# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca\n# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e\n# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0\n-----BEGIN CERTIFICATE-----\nMIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw\nCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu\nZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe\nFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw\nEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x\nIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF\nK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG\nfp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO\nZ9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd\nBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx\nAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/\noAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8\nsycX\n-----END CERTIFICATE-----\n\n# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com\n# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com\n# Label: \"DigiCert Trusted Root G4\"\n# Serial: 7451500558977370777930084869016614236\n# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49\n# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4\n# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88\n-----BEGIN CERTIFICATE-----\nMIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi\nMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\nd3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg\nRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV\nUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu\nY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y\nithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If\nxp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV\nySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO\nDCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ\njdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/\nCNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi\nEhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM\nfRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY\nuKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK\nchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t\n9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\nhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD\nggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2\nSV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd\n+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc\nfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa\nsjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N\ncCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N\n0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie\n4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI\nr/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1\n/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm\ngKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+\n-----END CERTIFICATE-----\n\n# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited\n# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited\n# Label: \"COMODO RSA Certification Authority\"\n# Serial: 101909084537582093308941363524873193117\n# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18\n# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4\n# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34\n-----BEGIN CERTIFICATE-----\nMIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB\nhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G\nA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV\nBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5\nMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT\nEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR\nQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh\ndGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR\n6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X\npz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC\n9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV\n/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf\nZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z\n+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w\nqP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah\nSL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC\nu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf\nFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq\ncrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E\nFgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB\n/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl\nwFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM\n4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV\n2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna\nFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ\nCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK\nboHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke\njkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL\nS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb\nQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl\n0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB\nNVOFBkpdn627G190\n-----END CERTIFICATE-----\n\n# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network\n# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network\n# Label: \"USERTrust RSA Certification Authority\"\n# Serial: 2645093764781058787591871645665788717\n# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5\n# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e\n# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2\n-----BEGIN CERTIFICATE-----\nMIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB\niDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl\ncnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV\nBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw\nMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV\nBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU\naGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy\ndGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B\n3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY\ntJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/\nFp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2\nVN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT\n79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6\nc0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT\nYo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l\nc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee\nUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE\nHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd\nBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G\nA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF\nUp/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO\nVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3\nATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs\n8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR\niQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze\nSf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ\nXHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/\nqS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB\nVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB\nL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG\njjxDah2nGN59PRbxYvnKkKj9\n-----END CERTIFICATE-----\n\n# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network\n# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network\n# Label: \"USERTrust ECC Certification Authority\"\n# Serial: 123013823720199481456569720443997572134\n# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1\n# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0\n# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a\n-----BEGIN CERTIFICATE-----\nMIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl\neSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT\nJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx\nMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT\nCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg\nVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm\naWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo\nI+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng\no4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G\nA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD\nVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB\nzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW\nRNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4\n# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4\n# Label: \"GlobalSign ECC Root CA - R4\"\n# Serial: 14367148294922964480859022125800977897474\n# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e\n# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb\n# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c\n-----BEGIN CERTIFICATE-----\nMIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk\nMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH\nbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX\nDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD\nQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ\nFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F\nuOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX\nkPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs\newv4n4Q=\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5\n# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5\n# Label: \"GlobalSign ECC Root CA - R5\"\n# Serial: 32785792099990507226680698011560947931244\n# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08\n# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa\n# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24\n-----BEGIN CERTIFICATE-----\nMIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk\nMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH\nbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX\nDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD\nQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc\n8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke\nhOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD\nVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI\nKoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg\n515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO\nxwy8p2Fp8fc74SrL+SvzZpA3\n-----END CERTIFICATE-----\n\n# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden\n# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden\n# Label: \"Staat der Nederlanden EV Root CA\"\n# Serial: 10000013\n# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba\n# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb\n# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a\n-----BEGIN CERTIFICATE-----\nMIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO\nTDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh\ndCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y\nMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg\nTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS\nb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS\nM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC\nUiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d\nZ//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p\nrfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l\npJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb\nj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC\nKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS\n/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X\ncgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH\n1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP\npx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7\nMA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI\neK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u\n2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS\nv4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC\nwPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy\nCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e\nvTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6\nZ2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa\nGl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL\neG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8\nFVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc\n7uzXLg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust\n# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust\n# Label: \"IdenTrust Commercial Root CA 1\"\n# Serial: 13298821034946342390520003877796839426\n# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7\n# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25\n# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae\n-----BEGIN CERTIFICATE-----\nMIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK\nMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu\nVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw\nMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw\nJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT\n3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU\n+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp\nS0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1\nbVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi\nT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL\nvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK\nVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK\ndHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT\nc+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv\nl7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N\niGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD\nggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH\n6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt\nLRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93\nnAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3\n+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK\nW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT\nAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq\nl1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG\n4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ\nmUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A\n7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H\n-----END CERTIFICATE-----\n\n# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust\n# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust\n# Label: \"IdenTrust Public Sector Root CA 1\"\n# Serial: 13298821034946342390521976156843933698\n# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba\n# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd\n# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f\n-----BEGIN CERTIFICATE-----\nMIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN\nMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu\nVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN\nMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0\nMSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi\nMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7\nekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy\nRBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS\nbdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF\n/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R\n3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw\nEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy\n9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V\nGxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ\n2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV\nWaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD\nW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/\nBAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN\nAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj\nt2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV\nDRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9\nTaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G\nlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW\nmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df\nWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5\n+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ\ntshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA\nGaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv\n8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c\n-----END CERTIFICATE-----\n\n# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only\n# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only\n# Label: \"Entrust Root Certification Authority - G2\"\n# Serial: 1246989352\n# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2\n# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4\n# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39\n-----BEGIN CERTIFICATE-----\nMIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC\nVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50\ncnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs\nIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz\ndCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy\nNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu\ndHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt\ndGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0\naG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj\nYXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\nAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T\nRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN\ncCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW\nwcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1\nU1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0\njaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP\nBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN\nBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/\njTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ\nRkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v\n1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R\nnAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH\nVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only\n# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only\n# Label: \"Entrust Root Certification Authority - EC1\"\n# Serial: 51543124481930649114116133369\n# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc\n# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47\n# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5\n-----BEGIN CERTIFICATE-----\nMIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG\nA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3\nd3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu\ndHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq\nRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy\nMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD\nVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0\nL2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g\nZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD\nZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi\nA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt\nByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH\nBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O\nBBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC\nR98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX\nhTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G\n-----END CERTIFICATE-----\n\n# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority\n# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority\n# Label: \"CFCA EV ROOT\"\n# Serial: 407555286\n# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30\n# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83\n# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd\n-----BEGIN CERTIFICATE-----\nMIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD\nTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y\naXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx\nMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j\naWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP\nT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03\nsQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL\nTIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5\n/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp\n7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz\nEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt\nhxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP\na931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot\naK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg\nTnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV\nPKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv\ncWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL\ntbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd\nBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB\nACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT\nej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL\njOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS\nESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy\nP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19\nxIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d\nCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN\n5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe\n/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z\nAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ\n5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su\n-----END CERTIFICATE-----\n\n# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed\n# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed\n# Label: \"OISTE WISeKey Global Root GB CA\"\n# Serial: 157768595616588414422159278966750757568\n# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d\n# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed\n# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6\n-----BEGIN CERTIFICATE-----\nMIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt\nMQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg\nRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i\nYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x\nCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG\nb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh\nbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3\nHEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx\nWuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX\n1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk\nu7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P\n99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r\nM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw\nAwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB\nBAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh\ncViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5\ngSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO\nZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf\naPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic\nNc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=\n-----END CERTIFICATE-----\n\n# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A.\n# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A.\n# Label: \"SZAFIR ROOT CA2\"\n# Serial: 357043034767186914217277344587386743377558296292\n# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99\n# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de\n# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe\n-----BEGIN CERTIFICATE-----\nMIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL\nBQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6\nZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw\nNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L\ncmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg\nUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN\nQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT\n3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw\n3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6\n3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5\nBSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN\nXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD\nAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF\nAAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw\n8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG\nnXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP\noky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy\nd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg\nLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority\n# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority\n# Label: \"Certum Trusted Network CA 2\"\n# Serial: 44979900017204383099463764357512596969\n# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2\n# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92\n# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04\n-----BEGIN CERTIFICATE-----\nMIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB\ngDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu\nQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG\nA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz\nOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ\nVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp\nZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3\nb3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA\nDGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn\n0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB\nOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE\nfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E\nSv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m\no130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i\nsx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW\nOZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez\nTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS\nadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n\n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD\nAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC\nAQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ\nF/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf\nCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29\nXN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm\ndjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/\nWjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb\nAoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq\nP/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko\nb7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj\nXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P\n5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi\nDrW5viSP\n-----END CERTIFICATE-----\n\n# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority\n# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority\n# Label: \"Hellenic Academic and Research Institutions RootCA 2015\"\n# Serial: 0\n# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce\n# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6\n# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36\n-----BEGIN CERTIFICATE-----\nMIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix\nDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k\nIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT\nN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v\ndENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG\nA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh\nZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx\nQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1\ndGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\nAQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA\n4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0\nAoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10\n4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C\nojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV\n9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD\ngfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6\nY5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq\nNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko\nLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc\nBw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV\nHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd\nctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I\nXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI\nM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot\n9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V\nZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea\nj8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh\nX9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ\nl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf\nbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4\npcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK\ne7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0\nvm9qp/UsQu0yrbYhnr68\n-----END CERTIFICATE-----\n\n# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority\n# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority\n# Label: \"Hellenic Academic and Research Institutions ECC RootCA 2015\"\n# Serial: 0\n# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef\n# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66\n# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33\n-----BEGIN CERTIFICATE-----\nMIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN\nBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl\nc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl\nbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv\nb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ\nBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj\nYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5\nMUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0\ndXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg\nQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa\njq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC\nMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi\nC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep\nlSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof\nTUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR\n-----END CERTIFICATE-----\n\n# Issuer: CN=ISRG Root X1 O=Internet Security Research Group\n# Subject: CN=ISRG Root X1 O=Internet Security Research Group\n# Label: \"ISRG Root X1\"\n# Serial: 172886928669790476064670243504169061120\n# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e\n# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8\n# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6\n-----BEGIN CERTIFICATE-----\nMIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw\nTzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\ncmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4\nWhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu\nZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY\nMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc\nh77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+\n0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U\nA5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW\nT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH\nB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC\nB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv\nKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn\nOlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn\njh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw\nqHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI\nrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq\nhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL\nubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ\n3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK\nNFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5\nORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur\nTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC\njNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc\noyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq\n4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA\nmRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d\nemyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n-----END CERTIFICATE-----\n\n# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM\n# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM\n# Label: \"AC RAIZ FNMT-RCM\"\n# Serial: 485876308206448804701554682760554759\n# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d\n# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20\n# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa\n-----BEGIN CERTIFICATE-----\nMIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx\nCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ\nWiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ\nBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG\nTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/\nyBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf\nBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz\nWHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF\ntBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z\n374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC\nIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL\nmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7\nwk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS\nMKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2\nZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet\nUqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw\nAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H\nYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3\nLmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD\nnFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1\nRXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM\nLVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf\n77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N\nJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm\nfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp\n6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp\n1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B\n9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok\nRqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv\nuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Amazon Root CA 1 O=Amazon\n# Subject: CN=Amazon Root CA 1 O=Amazon\n# Label: \"Amazon Root CA 1\"\n# Serial: 143266978916655856878034712317230054538369994\n# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6\n# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16\n# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e\n-----BEGIN CERTIFICATE-----\nMIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\nADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\nb24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\nMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\nb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\nca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\nIFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\nVOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\njgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\nAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\nA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\nU5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\nN+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\no/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\nrqXRfboQnoZsG4q5WTP468SQvvG5\n-----END CERTIFICATE-----\n\n# Issuer: CN=Amazon Root CA 2 O=Amazon\n# Subject: CN=Amazon Root CA 2 O=Amazon\n# Label: \"Amazon Root CA 2\"\n# Serial: 143266982885963551818349160658925006970653239\n# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66\n# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a\n# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4\n-----BEGIN CERTIFICATE-----\nMIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF\nADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\nb24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL\nMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\nb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK\ngXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ\nW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg\n1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K\n8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r\n2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me\nz/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR\n8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj\nmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz\n7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6\n+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI\n0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\nAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm\nUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2\nLIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY\n+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS\nk5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl\n7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm\nbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl\nurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+\nfUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63\nn749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE\n76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H\n9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT\n4PsJYGw=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Amazon Root CA 3 O=Amazon\n# Subject: CN=Amazon Root CA 3 O=Amazon\n# Label: \"Amazon Root CA 3\"\n# Serial: 143266986699090766294700635381230934788665930\n# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87\n# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e\n# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4\n-----BEGIN CERTIFICATE-----\nMIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\nMQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\nUm9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\nA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\nQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\nui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\nQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\nttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\nBqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\nYyRIHN8wfdVoOw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Amazon Root CA 4 O=Amazon\n# Subject: CN=Amazon Root CA 4 O=Amazon\n# Label: \"Amazon Root CA 4\"\n# Serial: 143266989758080763974105200630763877849284878\n# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd\n# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be\n# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92\n-----BEGIN CERTIFICATE-----\nMIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\nMQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\nUm9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\nA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\nQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\n9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\nM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\n/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\nMAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\nCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\n1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n-----END CERTIFICATE-----\n\n# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM\n# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM\n# Label: \"TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1\"\n# Serial: 1\n# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49\n# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca\n# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16\n-----BEGIN CERTIFICATE-----\nMIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx\nGDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp\nbXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w\nKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0\nBgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy\ndW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG\nEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll\nIEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU\nQUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT\nTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg\nLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7\na9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr\nLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr\nN3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X\nYacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/\niSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f\nAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH\nV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL\nBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh\nAHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf\nIPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4\nlzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c\n8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf\nlo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=\n-----END CERTIFICATE-----\n\n# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.\n# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.\n# Label: \"GDCA TrustAUTH R5 ROOT\"\n# Serial: 9009899650740120186\n# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4\n# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4\n# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93\n-----BEGIN CERTIFICATE-----\nMIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE\nBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ\nIENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0\nMTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV\nBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w\nHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF\nAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj\nDp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj\nTnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u\nKU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj\nqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm\nMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12\nZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP\nzgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk\nL30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC\njGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA\nHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC\nAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB\n/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg\np8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm\nDRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5\nCOmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry\nL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf\nJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg\nIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io\n2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV\n09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ\nXR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq\nT8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe\nMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==\n-----END CERTIFICATE-----\n\n# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority\n# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority\n# Label: \"TrustCor RootCert CA-1\"\n# Serial: 15752444095811006489\n# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45\n# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a\n# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c\n-----BEGIN CERTIFICATE-----\nMIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD\nVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk\nMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U\ncnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y\nIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB\npDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h\nIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG\nA1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU\ncnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\nCgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid\nRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V\nseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme\n9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV\nEY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW\nhnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/\nDeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw\nDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\nggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I\n/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf\nke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ\nyonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts\nL1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN\nzl/HHk484IkzlQsPpTLWPFp5LBk=\n-----END CERTIFICATE-----\n\n# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority\n# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority\n# Label: \"TrustCor RootCert CA-2\"\n# Serial: 2711694510199101698\n# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64\n# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0\n# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65\n-----BEGIN CERTIFICATE-----\nMIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV\nBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw\nIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy\ndXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig\nUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk\nMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg\nQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD\nVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy\ndXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+\nQVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq\n1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp\n2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK\nDOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape\naz6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF\n3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88\noWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM\ng9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3\nmjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh\n8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd\nBgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U\nnrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw\nDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX\ndKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+\nMWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL\n/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX\nCI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa\nZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW\n2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7\nN6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3\nSewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB\nAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp\n5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu\n1uwJ\n-----END CERTIFICATE-----\n\n# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority\n# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority\n# Label: \"TrustCor ECA-1\"\n# Serial: 9548242946988625984\n# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c\n# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd\n# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c\n-----BEGIN CERTIFICATE-----\nMIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD\nVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk\nMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U\ncnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y\nIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV\nBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw\nIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy\ndXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig\nRUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb\n3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA\nBoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5\n3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou\nowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/\nwZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF\nZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf\nBgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/\nMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv\ncivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2\nAHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F\nhcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50\nsoIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI\nWJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi\ntJ/X5g==\n-----END CERTIFICATE-----\n\n# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation\n# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation\n# Label: \"SSL.com Root Certification Authority RSA\"\n# Serial: 8875640296558310041\n# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29\n# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb\n# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69\n-----BEGIN CERTIFICATE-----\nMIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE\nBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK\nDA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp\nY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz\nOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv\ndXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv\nbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN\nAQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R\nxFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX\nqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC\nC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3\n6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh\n/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF\nYD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E\nJNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc\nUS4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8\nZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm\n+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi\nM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV\nHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G\nA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV\ncpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc\nHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs\nPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/\nq5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0\ncuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr\na6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I\nH37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y\nK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu\nnLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf\noYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY\nIc2wBlX7Jz9TkHCpBB5XJ7k=\n-----END CERTIFICATE-----\n\n# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation\n# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation\n# Label: \"SSL.com Root Certification Authority ECC\"\n# Serial: 8495723813297216424\n# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e\n# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a\n# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65\n-----BEGIN CERTIFICATE-----\nMIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC\nVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T\nU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0\naW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz\nWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0\nb24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS\nb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB\nBAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI\n7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg\nCemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud\nEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD\nVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T\nkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+\ngA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl\n-----END CERTIFICATE-----\n\n# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation\n# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation\n# Label: \"SSL.com EV Root Certification Authority RSA R2\"\n# Serial: 6248227494352943350\n# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95\n# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a\n# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c\n-----BEGIN CERTIFICATE-----\nMIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV\nBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE\nCgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy\ndGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy\nMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G\nA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD\nDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq\nM0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf\nOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa\n4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9\nHSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR\naZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA\nb9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ\nGp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV\nPWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO\npgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu\nUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY\nMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV\nHSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4\n9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW\ns47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5\nSm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg\ncLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM\n79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz\n/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt\nll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm\nKf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK\nQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ\nw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi\nS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07\nmKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w==\n-----END CERTIFICATE-----\n\n# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation\n# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation\n# Label: \"SSL.com EV Root Certification Authority ECC\"\n# Serial: 3182246526754555285\n# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90\n# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d\n# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8\n-----BEGIN CERTIFICATE-----\nMIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC\nVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T\nU0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp\nY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx\nNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv\ndXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv\nbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49\nAgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA\nVIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku\nWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP\nMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX\n5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ\nytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg\nh5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6\n# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6\n# Label: \"GlobalSign Root CA - R6\"\n# Serial: 1417766617973444989252670301619537\n# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae\n# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1\n# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69\n-----BEGIN CERTIFICATE-----\nMIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg\nMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh\nbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx\nMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET\nMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI\nxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k\nZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD\naNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw\nLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw\n1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX\nk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2\nSXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h\nbguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n\nWUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY\nrZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce\nMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD\nAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu\nbAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN\nnsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt\nIxg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61\n55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj\nvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf\ncDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz\noHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp\nnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs\npA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v\nJJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R\n8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4\n5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA=\n-----END CERTIFICATE-----\n\n# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed\n# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed\n# Label: \"OISTE WISeKey Global Root GC CA\"\n# Serial: 44084345621038548146064804565436152554\n# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23\n# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31\n# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d\n-----BEGIN CERTIFICATE-----\nMIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw\nCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91\nbmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg\nUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ\nBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu\nZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS\nb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni\neUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W\np2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E\nBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T\nrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV\n57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg\nMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9\n-----END CERTIFICATE-----\n\n# Issuer: CN=GTS Root R1 O=Google Trust Services LLC\n# Subject: CN=GTS Root R1 O=Google Trust Services LLC\n# Label: \"GTS Root R1\"\n# Serial: 146587175971765017618439757810265552097\n# MD5 Fingerprint: 82:1a:ef:d4:d2:4a:f2:9f:e2:3d:97:06:14:70:72:85\n# SHA1 Fingerprint: e1:c9:50:e6:ef:22:f8:4c:56:45:72:8b:92:20:60:d7:d5:a7:a3:e8\n# SHA256 Fingerprint: 2a:57:54:71:e3:13:40:bc:21:58:1c:bd:2c:f1:3e:15:84:63:20:3e:ce:94:bc:f9:d3:cc:19:6b:f0:9a:54:72\n-----BEGIN CERTIFICATE-----\nMIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBH\nMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM\nQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy\nMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl\ncnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEB\nAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM\nf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vX\nmX7wCl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7\nzUjwTcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0P\nfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtc\nvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4\nZor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUsp\nzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOO\nRc92wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYW\nk70paDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+\nDVrNVjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgF\nlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV\nHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBADiW\nCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1\nd5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6Z\nXPYfcX3v73svfuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZR\ngyFmxhE+885H7pwoHyXa/6xmld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3\nd8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9bgsiG1eGZbYwE8na6SfZu6W0eX6Dv\nJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq4BjFbkerQUIpm/Zg\nDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWErtXvM\n+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyy\nF62ARPBopY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9\nSQ98POyDGCBDTtWTurQ0sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdws\nE3PYJ/HQcu51OyLemGhmW/HGY0dVHLqlCFF1pkgl\n-----END CERTIFICATE-----\n\n# Issuer: CN=GTS Root R2 O=Google Trust Services LLC\n# Subject: CN=GTS Root R2 O=Google Trust Services LLC\n# Label: \"GTS Root R2\"\n# Serial: 146587176055767053814479386953112547951\n# MD5 Fingerprint: 44:ed:9a:0e:a4:09:3b:00:f2:ae:4c:a3:c6:61:b0:8b\n# SHA1 Fingerprint: d2:73:96:2a:2a:5e:39:9f:73:3f:e1:c7:1e:64:3f:03:38:34:fc:4d\n# SHA256 Fingerprint: c4:5d:7b:b0:8e:6d:67:e6:2e:42:35:11:0b:56:4e:5f:78:fd:92:ef:05:8c:84:0a:ea:4e:64:55:d7:58:5c:60\n-----BEGIN CERTIFICATE-----\nMIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBH\nMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM\nQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIy\nMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNl\ncnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEB\nAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv\nCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3Kg\nGjSY6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9Bu\nXvAuMC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOd\nre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXu\nPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1\nmKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K\n8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqj\nx5RWIr9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsR\nnTKaG73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0\nkzCqgc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9Ok\ntwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV\nHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBALZp\n8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT\nvhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiT\nz9D2PGcDFWEJ+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiA\npJiS4wGWAqoC7o87xdFtCjMwc3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvb\npxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3DaWsYDQvTtN6LwG1BUSw7YhN4ZKJmB\nR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5rn/WkhLx3+WuXrD5R\nRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56GtmwfuNmsk\n0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC\n5AwiWVIQ7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiF\nizoHCBy69Y9Vmhh1fuXsgWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLn\nyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ldo/DUhgkC\n-----END CERTIFICATE-----\n\n# Issuer: CN=GTS Root R3 O=Google Trust Services LLC\n# Subject: CN=GTS Root R3 O=Google Trust Services LLC\n# Label: \"GTS Root R3\"\n# Serial: 146587176140553309517047991083707763997\n# MD5 Fingerprint: 1a:79:5b:6b:04:52:9c:5d:c7:74:33:1b:25:9a:f9:25\n# SHA1 Fingerprint: 30:d4:24:6f:07:ff:db:91:89:8a:0b:e9:49:66:11:eb:8c:5e:46:e5\n# SHA256 Fingerprint: 15:d5:b8:77:46:19:ea:7d:54:ce:1c:a6:d0:b0:c4:03:e0:37:a9:17:f1:31:e8:a0:4e:1e:6b:7a:71:ba:bc:e5\n-----BEGIN CERTIFICATE-----\nMIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQsw\nCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU\nMBIGA1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw\nMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp\nY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQA\nIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout\n736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2A\nDDL24CejQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\nDgQWBBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFuk\nfCPAlaUs3L6JbyO5o91lAFJekazInXJ0glMLfalAvWhgxeG4VDvBNhcl2MG9AjEA\nnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOaKaqW04MjyaR7YbPMAuhd\n-----END CERTIFICATE-----\n\n# Issuer: CN=GTS Root R4 O=Google Trust Services LLC\n# Subject: CN=GTS Root R4 O=Google Trust Services LLC\n# Label: \"GTS Root R4\"\n# Serial: 146587176229350439916519468929765261721\n# MD5 Fingerprint: 5d:b6:6a:c4:60:17:24:6a:1a:99:a8:4b:ee:5e:b4:26\n# SHA1 Fingerprint: 2a:1d:60:27:d9:4a:b1:0a:1c:4d:91:5c:cd:33:a0:cb:3e:2d:54:cb\n# SHA256 Fingerprint: 71:cc:a5:39:1f:9e:79:4b:04:80:25:30:b3:63:e1:21:da:8a:30:43:bb:26:66:2f:ea:4d:ca:7f:c9:51:a4:bd\n-----BEGIN CERTIFICATE-----\nMIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQsw\nCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU\nMBIGA1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw\nMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp\nY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQA\nIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu\nhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/l\nxKvRHYqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\nDgQWBBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0\nCMRw3J5QdCHojXohw0+WbhXRIjVhLfoIN+4Zba3bssx9BzT1YBkstTTZbyACMANx\nsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11xzPKwTdb+mciUqXWi4w==\n-----END CERTIFICATE-----\n\n# Issuer: CN=UCA Global G2 Root O=UniTrust\n# Subject: CN=UCA Global G2 Root O=UniTrust\n# Label: \"UCA Global G2 Root\"\n# Serial: 124779693093741543919145257850076631279\n# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8\n# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a\n# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c\n-----BEGIN CERTIFICATE-----\nMIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9\nMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH\nbG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x\nCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds\nb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr\nb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9\nkmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm\nVHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R\nVogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc\nC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj\ntm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY\nD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv\nj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl\nNaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6\niIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP\nO6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/\nBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV\nZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj\nL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5\n1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl\n1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU\nb3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV\nPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj\ny88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb\nEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg\nDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI\n+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy\nYiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX\nUB+K+wb1whnw0A==\n-----END CERTIFICATE-----\n\n# Issuer: CN=UCA Extended Validation Root O=UniTrust\n# Subject: CN=UCA Extended Validation Root O=UniTrust\n# Label: \"UCA Extended Validation Root\"\n# Serial: 106100277556486529736699587978573607008\n# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2\n# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a\n# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24\n-----BEGIN CERTIFICATE-----\nMIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH\nMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF\neHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx\nMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV\nBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB\nAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog\nD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS\nsPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop\nO2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk\nsHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi\nc0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj\nVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz\nKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/\nTuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G\nsx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs\n1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD\nfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T\nAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN\nl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR\nap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ\nVBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5\nc6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp\n4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s\nt2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj\n2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO\nvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C\nxR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx\ncmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM\nfjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax\n-----END CERTIFICATE-----\n\n# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036\n# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036\n# Label: \"Certigna Root CA\"\n# Serial: 269714418870597844693661054334862075617\n# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77\n# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43\n# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68\n-----BEGIN CERTIFICATE-----\nMIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw\nWjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw\nMiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x\nMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD\nVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX\nBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw\nggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO\nty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M\nCiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu\nI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm\nTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh\nC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf\nePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz\nIoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT\nCo/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k\nJWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5\nhwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB\nGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE\nFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of\n1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov\nL3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo\ndHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr\naHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq\nhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L\n6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG\nHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6\n0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB\nlA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi\no2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1\ngPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v\nfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63\nNwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh\njWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw\n3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0=\n-----END CERTIFICATE-----\n\n# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI\n# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI\n# Label: \"emSign Root CA - G1\"\n# Serial: 235931866688319308814040\n# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac\n# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c\n# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67\n-----BEGIN CERTIFICATE-----\nMIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD\nVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU\nZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH\nMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO\nMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv\nZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz\nf2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO\n8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq\nd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM\ntTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt\nOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB\no0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD\nAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x\nPaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM\nwiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d\nGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH\n6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby\nRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx\niN66zB+Afko=\n-----END CERTIFICATE-----\n\n# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI\n# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI\n# Label: \"emSign ECC Root CA - G3\"\n# Serial: 287880440101571086945156\n# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40\n# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1\n# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b\n-----BEGIN CERTIFICATE-----\nMIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG\nEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo\nbm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g\nRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ\nTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s\nb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw\ndjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0\nWXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS\nfvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB\nzhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq\nhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB\nCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD\n+JbNR6iC8hZVdyR+EhCVBCyj\n-----END CERTIFICATE-----\n\n# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI\n# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI\n# Label: \"emSign Root CA - C1\"\n# Serial: 825510296613316004955058\n# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68\n# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01\n# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f\n-----BEGIN CERTIFICATE-----\nMIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG\nA1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg\nSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw\nMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln\nbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v\ndCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ\nBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ\nHdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH\n3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH\nGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c\nxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1\naylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq\nTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL\nBQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87\n/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4\nkqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG\nYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT\n+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo\nWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=\n-----END CERTIFICATE-----\n\n# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI\n# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI\n# Label: \"emSign ECC Root CA - C3\"\n# Serial: 582948710642506000014504\n# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5\n# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66\n# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3\n-----BEGIN CERTIFICATE-----\nMIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG\nEwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx\nIDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw\nMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln\nbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND\nIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci\nMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti\nsIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O\nBBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c\n3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J\n0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post\n# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post\n# Label: \"Hongkong Post Root CA 3\"\n# Serial: 46170865288971385588281144162979347873371282084\n# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0\n# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02\n# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6\n-----BEGIN CERTIFICATE-----\nMIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL\nBQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ\nSG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n\na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5\nNDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT\nCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u\nZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO\ndem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI\nVoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV\n9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY\n2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY\nvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt\nbNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb\nx39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+\nl2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK\nTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj\nHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP\nBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e\ni9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw\nDQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG\n7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk\nMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr\ngZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk\nGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS\n3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm\nOzj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+\nl6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c\nJfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP\nL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa\nLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG\nmpv0\n-----END CERTIFICATE-----\n\n# Issuer: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only\n# Subject: CN=Entrust Root Certification Authority - G4 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2015 Entrust, Inc. - for authorized use only\n# Label: \"Entrust Root Certification Authority - G4\"\n# Serial: 289383649854506086828220374796556676440\n# MD5 Fingerprint: 89:53:f1:83:23:b7:7c:8e:05:f1:8c:71:38:4e:1f:88\n# SHA1 Fingerprint: 14:88:4e:86:26:37:b0:26:af:59:62:5c:40:77:ec:35:29:ba:96:01\n# SHA256 Fingerprint: db:35:17:d1:f6:73:2a:2d:5a:b9:7c:53:3e:c7:07:79:ee:32:70:a6:2f:b4:ac:42:38:37:24:60:e6:f0:1e:88\n-----BEGIN CERTIFICATE-----\nMIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAw\ngb4xCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQL\nEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykg\nMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAw\nBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0\nMB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYTAlVT\nMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1\nc3QubmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJ\nbmMuIC0gZm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3Qg\nUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0MIICIjANBgkqhkiG9w0B\nAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3DumSXbcr3DbVZwbPLqGgZ\n2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV3imz/f3E\nT+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j\n5pds8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAM\nC1rlLAHGVK/XqsEQe9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73T\nDtTUXm6Hnmo9RR3RXRv06QqsYJn7ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNX\nwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5XxNMhIWNlUpEbsZmOeX7m640A\n2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV7rtNOzK+mndm\nnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8\ndWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwl\nN4y6mACXi0mWHv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNj\nc0kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD\nVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9nMA0GCSqGSIb3DQEBCwUAA4ICAQAS\n5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4QjbRaZIxowLByQzTS\nGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht7LGr\nhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/\nB7NTeLUKYvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uI\nAeV8KEsD+UmDfLJ/fOPtjqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbw\nH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+\nb7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKWRGhXxNUzzxkvFMSUHHuk\n2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjAJOgc47Ol\nIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk\n5F6G+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuY\nn/PIjhs4ViFqUZPTkcpG2om3PVODLAgfi49T3f+sHw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation\n# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation\n# Label: \"Microsoft ECC Root Certificate Authority 2017\"\n# Serial: 136839042543790627607696632466672567020\n# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67\n# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5\n# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02\n-----BEGIN CERTIFICATE-----\nMIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw\nCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD\nVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw\nMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV\nUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy\nb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq\nhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR\nogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb\nhGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E\nBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3\nFQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV\nL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB\niudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation\n# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation\n# Label: \"Microsoft RSA Root Certificate Authority 2017\"\n# Serial: 40975477897264996090493496164228220339\n# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47\n# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74\n# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0\n-----BEGIN CERTIFICATE-----\nMIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl\nMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw\nNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5\nIDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG\nEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N\naWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi\nMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ\nNt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0\nZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1\nHLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm\ngGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ\njEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc\naDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG\nYaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6\nW6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K\nUGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH\n+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q\nW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/\nBAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC\nNxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC\nLgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC\ngMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6\ntZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh\nSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2\nTaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3\npvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR\nxpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp\nGWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9\ndOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN\nAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB\nRA+GsCyRxj3qrg+E\n-----END CERTIFICATE-----\n\n# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd.\n# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd.\n# Label: \"e-Szigno Root CA 2017\"\n# Serial: 411379200276854331539784714\n# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98\n# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1\n# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99\n-----BEGIN CERTIFICATE-----\nMIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV\nBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk\nLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv\nb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ\nBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg\nTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v\nIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv\nxie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H\nWyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB\neAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo\njbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ\n+efcMQ==\n-----END CERTIFICATE-----\n\n# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2\n# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2\n# Label: \"certSIGN Root CA G2\"\n# Serial: 313609486401300475190\n# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7\n# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32\n# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05\n-----BEGIN CERTIFICATE-----\nMIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV\nBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g\nUk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ\nBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ\nR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF\ndRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw\nvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ\nuIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp\nn+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs\ncpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW\nxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P\nrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF\nDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx\nDTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy\nLcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C\neWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB\n/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ\nd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq\nkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC\nb6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl\nqiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0\nOJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c\nNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk\nltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO\npwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj\n03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk\nPuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE\n1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX\nQRBdJ3NghVdJIgc=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc.\n# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc.\n# Label: \"Trustwave Global Certification Authority\"\n# Serial: 1846098327275375458322922162\n# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e\n# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5\n# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8\n-----BEGIN CERTIFICATE-----\nMIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw\nCQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x\nITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1\nc3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx\nOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI\nSWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI\nb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp\nY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\nALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn\nswuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu\n7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8\n1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW\n80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP\nJqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l\nRtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw\nhI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10\ncoos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc\nBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n\ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud\nEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud\nDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W\n0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe\nuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q\nlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB\naCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE\nsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT\nMaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe\nqu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh\nVicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8\nh6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9\nEEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK\nyeC2nOnOcXHebD8WpHk=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc.\n# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc.\n# Label: \"Trustwave Global ECC P256 Certification Authority\"\n# Serial: 4151900041497450638097112925\n# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54\n# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf\n# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4\n-----BEGIN CERTIFICATE-----\nMIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD\nVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf\nBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3\nYXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x\nNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G\nA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0\nd2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF\nQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN\nFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w\nDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw\nCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh\nDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7\n-----END CERTIFICATE-----\n\n# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc.\n# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc.\n# Label: \"Trustwave Global ECC P384 Certification Authority\"\n# Serial: 2704997926503831671788816187\n# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6\n# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2\n# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97\n-----BEGIN CERTIFICATE-----\nMIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD\nVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf\nBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3\nYXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x\nNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G\nA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0\nd2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF\nQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB\nBAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ\nj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF\n1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G\nA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3\nAZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC\nMGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu\nSw==\n-----END CERTIFICATE-----\n\n# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp.\n# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp.\n# Label: \"NAVER Global Root Certification Authority\"\n# Serial: 9013692873798656336226253319739695165984492813\n# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b\n# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1\n# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65\n-----BEGIN CERTIFICATE-----\nMIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM\nBQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG\nT1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0\naW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx\nCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD\nb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB\ndXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA\niQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH\n38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE\nHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz\nkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP\nszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq\nvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf\nnZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG\nYQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo\n0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a\nCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K\nAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I\n36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB\nAf8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN\nqo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj\ncu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm\n+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL\nhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe\nlHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7\np/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8\npiKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR\nLBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX\n5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO\ndh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul\n9XXeifdy\n-----END CERTIFICATE-----\n\n# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres\n# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres\n# Label: \"AC RAIZ FNMT-RCM SERVIDORES SEGUROS\"\n# Serial: 131542671362353147877283741781055151509\n# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb\n# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a\n# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb\n-----BEGIN CERTIFICATE-----\nMIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw\nCQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw\nFgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S\nQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5\nMzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL\nDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS\nQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB\nBAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH\nsbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK\nUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD\nVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu\nSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC\nMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy\nv+c=\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa\n# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa\n# Label: \"GlobalSign Root R46\"\n# Serial: 1552617688466950547958867513931858518042577\n# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef\n# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90\n# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9\n-----BEGIN CERTIFICATE-----\nMIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA\nMEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD\nVQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy\nMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt\nc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB\nAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ\nOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG\nvGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud\n316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo\n0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE\ny132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF\nzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE\n+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN\nI/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs\nx2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa\nByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC\n4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV\nHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4\n7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg\nJuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti\n2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk\npnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF\nFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt\nrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk\nZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5\nu+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP\n4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6\nN3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3\nvouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6\n-----END CERTIFICATE-----\n\n# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa\n# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa\n# Label: \"GlobalSign Root E46\"\n# Serial: 1552617690338932563915843282459653771421763\n# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f\n# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84\n# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58\n-----BEGIN CERTIFICATE-----\nMIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx\nCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD\nExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw\nMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex\nHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA\nIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq\nR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd\nyXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\nDgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ\n7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8\n+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A=\n-----END CERTIFICATE-----\n\n# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH\n# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH\n# Label: \"GLOBALTRUST 2020\"\n# Serial: 109160994242082918454945253\n# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8\n# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2\n# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a\n-----BEGIN CERTIFICATE-----\nMIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG\nA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw\nFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx\nMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u\naXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq\nhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b\nRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z\nYybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3\nQWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw\nyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+\nBlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ\nSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH\nr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0\n4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me\ndKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw\nq7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2\nnKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\nAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu\nH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA\nVC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC\nXtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd\n6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf\n+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi\nkvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7\nwry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB\nTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C\nMUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn\n4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I\naFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy\nqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==\n-----END CERTIFICATE-----\n\n# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz\n# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz\n# Label: \"ANF Secure Server Root CA\"\n# Serial: 996390341000653745\n# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96\n# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74\n# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99\n-----BEGIN CERTIFICATE-----\nMIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV\nBAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk\nYWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV\nBAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN\nMzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF\nUzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD\nVQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v\ndCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj\ncqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q\nyGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH\n2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX\nH1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL\nzc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR\np1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz\nW7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/\nSiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn\nLNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3\nn5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B\nu8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj\no1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO\nBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC\nAgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L\n9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej\nrw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK\npFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0\nvPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq\nOknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ\n/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9\n2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI\n+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2\nMjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo\ntt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority\n# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority\n# Label: \"Certum EC-384 CA\"\n# Serial: 160250656287871593594747141429395092468\n# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1\n# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed\n# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6\n-----BEGIN CERTIFICATE-----\nMIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw\nCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw\nJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT\nEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0\nWjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT\nLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX\nBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE\nKI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm\nFy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj\nQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8\nEF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J\nUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn\nnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=\n-----END CERTIFICATE-----\n\n# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority\n# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority\n# Label: \"Certum Trusted Root CA\"\n# Serial: 40870380103424195783807378461123655149\n# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29\n# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5\n# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd\n-----BEGIN CERTIFICATE-----\nMIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6\nMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu\nMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV\nBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw\nMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg\nU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo\nb3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG\nSIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ\nn0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q\np1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq\nNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF\n8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3\nHAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa\nmqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi\n7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF\nytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P\nqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ\nv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6\nTsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1\nvALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD\nggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4\nWxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo\nzMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR\n5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ\nGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf\n5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq\n0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D\nP78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM\nqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP\n0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf\nE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb\n-----END CERTIFICATE-----\n\n# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique\n# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique\n# Label: \"TunTrust Root CA\"\n# Serial: 108534058042236574382096126452369648152337120275\n# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4\n# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb\n# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL\nBQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg\nQ2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv\nb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG\nEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u\nIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ\nn56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd\n2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF\nVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ\nGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF\nli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU\nr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2\neY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb\nMlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg\njwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB\n7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW\n5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE\nITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0\n90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z\nxiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu\nQEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4\nFstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH\n22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP\nxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn\ndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5\nXc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b\nnV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ\nCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH\nu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj\nd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=\n-----END CERTIFICATE-----\n\n# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA\n# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA\n# Label: \"HARICA TLS RSA Root CA 2021\"\n# Serial: 76817823531813593706434026085292783742\n# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91\n# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d\n# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d\n-----BEGIN CERTIFICATE-----\nMIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs\nMQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl\nc2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg\nUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL\nMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl\nYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv\nb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l\nmwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE\n4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv\na9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M\npbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw\nKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b\nLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY\nAuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB\nAGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq\nE613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr\nW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ\nCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF\nMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE\nAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU\nX15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3\nf5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja\nH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP\nJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P\nzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt\njBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0\n/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT\nBGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79\naPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW\nxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU\n63ZTGI0RmLo=\n-----END CERTIFICATE-----\n\n# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA\n# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA\n# Label: \"HARICA TLS ECC Root CA 2021\"\n# Serial: 137515985548005187474074462014555733966\n# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0\n# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48\n# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01\n-----BEGIN CERTIFICATE-----\nMIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw\nCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh\ncmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v\ndCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG\nA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj\naCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg\nQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7\nKKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y\nSTHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw\nAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD\nAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw\nSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN\nnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/AbstractCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Class AbstractCall.\n * @package Grpc\n */\nabstract class AbstractCall\n{\n    /**\n     * @var Call\n     */\n    protected $call;\n    protected $deserialize;\n    protected $metadata;\n    protected $trailing_metadata;\n\n    /**\n     * Create a new Call wrapper object.\n     *\n     * @param Channel  $channel     The channel to communicate on\n     * @param string   $method      The method to call on the\n     *                              remote server\n     * @param callback $deserialize A callback function to deserialize\n     *                              the response\n     * @param array    $options     Call options (optional)\n     */\n    public function __construct(Channel $channel,\n                                $method,\n                                $deserialize,\n                                array $options = [])\n    {\n        if (array_key_exists('timeout', $options) &&\n            is_numeric($timeout = $options['timeout'])\n        ) {\n            $now = Timeval::now();\n            $delta = new Timeval($timeout);\n            $deadline = $now->add($delta);\n        } else {\n            $deadline = Timeval::infFuture();\n        }\n        $this->call = new Call($channel, $method, $deadline);\n        $this->deserialize = $deserialize;\n        $this->metadata = null;\n        $this->trailing_metadata = null;\n        if (array_key_exists('call_credentials_callback', $options) &&\n            is_callable($call_credentials_callback =\n                $options['call_credentials_callback'])\n        ) {\n            $call_credentials = CallCredentials::createFromPlugin(\n                $call_credentials_callback\n            );\n            $this->call->setCredentials($call_credentials);\n        }\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        return $this->metadata;\n    }\n\n    /**\n     * @return mixed The trailing metadata sent by the server\n     */\n    public function getTrailingMetadata()\n    {\n        return $this->trailing_metadata;\n    }\n\n    /**\n     * @return string The URI of the endpoint\n     */\n    public function getPeer()\n    {\n        return $this->call->getPeer();\n    }\n\n    /**\n     * Cancels the call.\n     */\n    public function cancel()\n    {\n        $this->call->cancel();\n    }\n\n    /**\n     * Serialize a message to the protobuf binary format.\n     *\n     * @param mixed $data The Protobuf message\n     *\n     * @return string The protobuf binary format\n     */\n    protected function _serializeMessage($data)\n    {\n        // Proto3 implementation\n        return $data->serializeToString();\n    }\n\n    /**\n     * Deserialize a response value to an object.\n     *\n     * @param string $value The binary value to deserialize\n     *\n     * @return mixed The deserialized value\n     */\n    protected function _deserializeResponse($value)\n    {\n        if ($value === null) {\n            return;\n        }\n        list($className, $deserializeFunc) = $this->deserialize;\n        $obj = new $className();\n        $obj->mergeFromString($value);\n        return $obj;\n    }\n\n    /**\n     * Set the CallCredentials for the underlying Call.\n     *\n     * @param CallCredentials $call_credentials The CallCredentials object\n     */\n    public function setCallCredentials($call_credentials)\n    {\n        $this->call->setCredentials($call_credentials);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/BaseStub.php",
    "content": "<?php\n/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Base class for generated client stubs. Stub methods are expected to call\n * _simpleRequest or _streamRequest and return the result.\n */\nclass BaseStub\n{\n    private $hostname;\n    private $hostname_override;\n    private $channel;\n    private $call_invoker;\n\n    // a callback function\n    private $update_metadata;\n\n    /**\n     * @param string  $hostname\n     * @param array   $opts\n     *  - 'update_metadata': (optional) a callback function which takes in a\n     * metadata array, and returns an updated metadata array\n     *  - 'grpc.primary_user_agent': (optional) a user-agent string\n     * @param Channel|InterceptorChannel $channel An already created Channel or InterceptorChannel object (optional)\n     */\n    public function __construct($hostname, $opts, $channel = null)\n    {\n        if (!method_exists('Grpc\\ChannelCredentials', 'isDefaultRootsPemSet') ||\n            !ChannelCredentials::isDefaultRootsPemSet()) {\n            $ssl_roots = file_get_contents(\n                dirname(__FILE__).'/../../etc/roots.pem'\n            );\n            ChannelCredentials::setDefaultRootsPem($ssl_roots);\n        }\n\n        $this->hostname = $hostname;\n        $this->update_metadata = null;\n        if (isset($opts['update_metadata'])) {\n            if (is_callable($opts['update_metadata'])) {\n                $this->update_metadata = $opts['update_metadata'];\n            }\n            unset($opts['update_metadata']);\n        }\n        if (!empty($opts['grpc.ssl_target_name_override'])) {\n            $this->hostname_override = $opts['grpc.ssl_target_name_override'];\n        }\n        if (isset($opts['grpc_call_invoker'])) {\n            $this->call_invoker = $opts['grpc_call_invoker'];\n            unset($opts['grpc_call_invoker']);\n            $channel_opts = $this->updateOpts($opts);\n            // If the grpc_call_invoker is defined, use the channel created by the call invoker.\n            $this->channel = $this->call_invoker->createChannelFactory($hostname, $channel_opts);\n            return;\n        }\n        $this->call_invoker = new DefaultCallInvoker();\n        if ($channel) {\n            if (!is_a($channel, 'Grpc\\Channel') &&\n                !is_a($channel, 'Grpc\\Internal\\InterceptorChannel')) {\n                throw new \\Exception('The channel argument is not a Channel object '.\n                    'or an InterceptorChannel object created by '.\n                    'Interceptor::intercept($channel, Interceptor|Interceptor[] $interceptors)');\n            }\n            $this->channel = $channel;\n            return;\n        }\n\n        $this->channel = static::getDefaultChannel($hostname, $opts);\n    }\n\n    private static function updateOpts($opts) {\n        if (!empty($opts['grpc.primary_user_agent'])) {\n            $opts['grpc.primary_user_agent'] .= ' ';\n        } else {\n            $opts['grpc.primary_user_agent'] = '';\n        }\n        if (defined('\\Grpc\\VERSION')) {\n            $version_str = \\Grpc\\VERSION;\n        } else {\n            if (!file_exists($composerFile = __DIR__.'/../../composer.json')) {\n                // for grpc/grpc-php subpackage\n                $composerFile = __DIR__.'/../composer.json';\n            }\n            $package_config = json_decode(file_get_contents($composerFile), true);\n            $version_str = $package_config['version'];\n        }\n        $opts['grpc.primary_user_agent'] .= 'grpc-php/'.$version_str;\n        if (!array_key_exists('credentials', $opts)) {\n            throw new \\Exception(\"The opts['credentials'] key is now \".\n                'required. Please see one of the '.\n                'ChannelCredentials::create methods');\n        }\n        return $opts;\n    }\n\n    /**\n     * Creates and returns the default Channel\n     *\n     * @param array $opts Channel constructor options\n     *\n     * @return Channel The channel\n     */\n    public static function getDefaultChannel($hostname, array $opts)\n    {\n        $channel_opts = self::updateOpts($opts);\n        return new Channel($hostname, $channel_opts);\n    }\n\n    /**\n     * @return string The URI of the endpoint\n     */\n    public function getTarget()\n    {\n        return $this->channel->getTarget();\n    }\n\n    /**\n     * @param bool $try_to_connect (optional)\n     *\n     * @return int The grpc connectivity state\n     */\n    public function getConnectivityState($try_to_connect = false)\n    {\n        return $this->channel->getConnectivityState($try_to_connect);\n    }\n\n    /**\n     * @param int $timeout in microseconds\n     *\n     * @return bool true if channel is ready\n     * @throws Exception if channel is in FATAL_ERROR state\n     */\n    public function waitForReady($timeout)\n    {\n        $new_state = $this->getConnectivityState(true);\n        if ($this->_checkConnectivityState($new_state)) {\n            return true;\n        }\n\n        $now = Timeval::now();\n        $delta = new Timeval($timeout);\n        $deadline = $now->add($delta);\n\n        while ($this->channel->watchConnectivityState($new_state, $deadline)) {\n            // state has changed before deadline\n            $new_state = $this->getConnectivityState();\n            if ($this->_checkConnectivityState($new_state)) {\n                return true;\n            }\n        }\n        // deadline has passed\n        $new_state = $this->getConnectivityState();\n\n        return $this->_checkConnectivityState($new_state);\n    }\n\n    /**\n     * Close the communication channel associated with this stub.\n     */\n    public function close()\n    {\n        $this->channel->close();\n    }\n\n    /**\n     * @param $new_state Connect state\n     *\n     * @return bool true if state is CHANNEL_READY\n     * @throws Exception if state is CHANNEL_FATAL_FAILURE\n     */\n    private function _checkConnectivityState($new_state)\n    {\n        if ($new_state == \\Grpc\\CHANNEL_READY) {\n            return true;\n        }\n        if ($new_state == \\Grpc\\CHANNEL_FATAL_FAILURE) {\n            throw new \\Exception('Failed to connect to server');\n        }\n\n        return false;\n    }\n\n    /**\n     * constructs the auth uri for the jwt.\n     *\n     * @param string $method The method string\n     *\n     * @return string The URL string\n     */\n    private function _get_jwt_aud_uri($method)\n    {\n        // TODO(jtattermusch): This is not the correct implementation\n        // of extracting JWT \"aud\" claim. We should rely on\n        // grpc_metadata_credentials_plugin which\n        // also provides the correct value of \"aud\" claim\n        // in the grpc_auth_metadata_context.service_url field.\n        // Trying to do the construction of \"aud\" field ourselves\n        // is bad.\n        $last_slash_idx = strrpos($method, '/');\n        if ($last_slash_idx === false) {\n            throw new \\InvalidArgumentException(\n                'service name must have a slash'\n            );\n        }\n        $service_name = substr($method, 0, $last_slash_idx);\n\n        if ($this->hostname_override) {\n            $hostname = $this->hostname_override;\n        } else {\n            $hostname = $this->hostname;\n        }\n\n        // Remove the port if it is 443\n        // See https://github.com/grpc/grpc/blob/07c9f7a36b2a0d34fcffebc85649cf3b8c339b5d/src/core/filter/auth/client_auth_filter.cc#L205\n        if ((strlen($hostname) > 4) && (substr($hostname, -4) === \":443\")) {\n            $hostname = substr($hostname, 0, -4);\n        }\n\n        return 'https://'.$hostname.$service_name;\n    }\n\n    /**\n     * validate and normalize the metadata array.\n     *\n     * @param array $metadata The metadata map\n     *\n     * @return array $metadata Validated and key-normalized metadata map\n     * @throws InvalidArgumentException if key contains invalid characters\n     */\n    private function _validate_and_normalize_metadata($metadata)\n    {\n        $metadata_copy = [];\n        foreach ($metadata as $key => $value) {\n            if (!preg_match('/^[.A-Za-z\\d_-]+$/', $key)) {\n                throw new \\InvalidArgumentException(\n                    'Metadata keys must be nonempty strings containing only '.\n                    'alphanumeric characters, hyphens, underscores and dots'\n                );\n            }\n            $metadata_copy[strtolower($key)] = $value;\n        }\n\n        return $metadata_copy;\n    }\n\n    /**\n     * Create a function which can be used to create UnaryCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _GrpcUnaryUnary($channel)\n    {\n        return function ($method,\n                         $argument,\n                         $deserialize,\n                         array $metadata = [],\n                         array $options = []) use ($channel) {\n            $call = $this->call_invoker->UnaryCall(\n                $channel,\n                $method,\n                $deserialize,\n                $options\n            );\n            $jwt_aud_uri = $this->_get_jwt_aud_uri($method);\n            if (is_callable($this->update_metadata)) {\n                $metadata = call_user_func(\n                    $this->update_metadata,\n                    $metadata,\n                    $jwt_aud_uri\n                );\n            }\n            $metadata = $this->_validate_and_normalize_metadata(\n                $metadata\n            );\n            $call->start($argument, $metadata, $options);\n            return $call;\n        };\n    }\n\n    /**\n     * Create a function which can be used to create ServerStreamingCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _GrpcStreamUnary($channel)\n    {\n        return function ($method,\n                         $deserialize,\n                         array $metadata = [],\n                         array $options = []) use ($channel) {\n            $call = $this->call_invoker->ClientStreamingCall(\n                $channel,\n                $method,\n                $deserialize,\n                $options\n            );\n            $jwt_aud_uri = $this->_get_jwt_aud_uri($method);\n            if (is_callable($this->update_metadata)) {\n                $metadata = call_user_func(\n                    $this->update_metadata,\n                    $metadata,\n                    $jwt_aud_uri\n                );\n            }\n            $metadata = $this->_validate_and_normalize_metadata(\n                $metadata\n            );\n            $call->start($metadata);\n            return $call;\n        };\n    }\n\n    /**\n     * Create a function which can be used to create ClientStreamingCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _GrpcUnaryStream($channel)\n    {\n        return function ($method,\n                         $argument,\n                         $deserialize,\n                         array $metadata = [],\n                         array $options = []) use ($channel) {\n            $call = $this->call_invoker->ServerStreamingCall(\n                $channel,\n                $method,\n                $deserialize,\n                $options\n            );\n            $jwt_aud_uri = $this->_get_jwt_aud_uri($method);\n            if (is_callable($this->update_metadata)) {\n                $metadata = call_user_func(\n                    $this->update_metadata,\n                    $metadata,\n                    $jwt_aud_uri\n                );\n            }\n            $metadata = $this->_validate_and_normalize_metadata(\n                $metadata\n            );\n            $call->start($argument, $metadata, $options);\n            return $call;\n        };\n    }\n\n    /**\n     * Create a function which can be used to create BidiStreamingCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _GrpcStreamStream($channel)\n    {\n        return function ($method,\n                         $deserialize,\n                         array $metadata = [],\n                         array $options = []) use ($channel) {\n            $call = $this->call_invoker->BidiStreamingCall(\n                $channel,\n                $method,\n                $deserialize,\n                $options\n            );\n            $jwt_aud_uri = $this->_get_jwt_aud_uri($method);\n            if (is_callable($this->update_metadata)) {\n                $metadata = call_user_func(\n                    $this->update_metadata,\n                    $metadata,\n                    $jwt_aud_uri\n                );\n            }\n            $metadata = $this->_validate_and_normalize_metadata(\n                $metadata\n            );\n            $call->start($metadata);\n\n            return $call;\n        };\n    }\n\n    /**\n     * Create a function which can be used to create UnaryCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _UnaryUnaryCallFactory($channel)\n    {\n        if (is_a($channel, 'Grpc\\Internal\\InterceptorChannel')) {\n            return function ($method,\n                             $argument,\n                             $deserialize,\n                             array $metadata = [],\n                             array $options = []) use ($channel) {\n                return $channel->getInterceptor()->interceptUnaryUnary(\n                    $method,\n                    $argument,\n                    $deserialize,\n                    $this->_UnaryUnaryCallFactory($channel->getNext()),\n                    $metadata,\n                    $options\n                );\n            };\n        }\n        return $this->_GrpcUnaryUnary($channel);\n    }\n\n    /**\n     * Create a function which can be used to create ServerStreamingCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _UnaryStreamCallFactory($channel)\n    {\n        if (is_a($channel, 'Grpc\\Internal\\InterceptorChannel')) {\n            return function ($method,\n                             $argument,\n                             $deserialize,\n                             array $metadata = [],\n                             array $options = []) use ($channel) {\n                return $channel->getInterceptor()->interceptUnaryStream(\n                    $method,\n                    $argument,\n                    $deserialize,\n                    $this->_UnaryStreamCallFactory($channel->getNext()),\n                    $metadata,\n                    $options\n                );\n            };\n        }\n        return $this->_GrpcUnaryStream($channel);\n    }\n\n    /**\n     * Create a function which can be used to create ClientStreamingCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _StreamUnaryCallFactory($channel)\n    {\n        if (is_a($channel, 'Grpc\\Internal\\InterceptorChannel')) {\n            return function ($method,\n                             $deserialize,\n                             array $metadata = [],\n                             array $options = []) use ($channel) {\n                return $channel->getInterceptor()->interceptStreamUnary(\n                    $method,\n                    $deserialize,\n                    $this->_StreamUnaryCallFactory($channel->getNext()),\n                    $metadata,\n                    $options\n                );\n            };\n        }\n        return $this->_GrpcStreamUnary($channel);\n    }\n\n    /**\n     * Create a function which can be used to create BidiStreamingCall\n     *\n     * @param Channel|InterceptorChannel   $channel\n     * @param callable $deserialize A function that deserializes the response\n     *\n     * @return \\Closure\n     */\n    private function _StreamStreamCallFactory($channel)\n    {\n        if (is_a($channel, 'Grpc\\Internal\\InterceptorChannel')) {\n            return function ($method,\n                             $deserialize,\n                             array $metadata = [],\n                             array $options = []) use ($channel) {\n                return $channel->getInterceptor()->interceptStreamStream(\n                    $method,\n                    $deserialize,\n                    $this->_StreamStreamCallFactory($channel->getNext()),\n                    $metadata,\n                    $options\n                );\n            };\n        }\n        return $this->_GrpcStreamStream($channel);\n    }\n\n    /* This class is intended to be subclassed by generated code, so\n     * all functions begin with \"_\" to avoid name collisions. */\n    /**\n     * Call a remote method that takes a single argument and has a\n     * single output.\n     *\n     * @param string   $method      The name of the method to call\n     * @param mixed    $argument    The argument to the method\n     * @param callable $deserialize A function that deserializes the response\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return UnaryCall The active call object\n     */\n    protected function _simpleRequest(\n        $method,\n        $argument,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $call_factory = $this->_UnaryUnaryCallFactory($this->channel);\n        $call = $call_factory($method, $argument, $deserialize, $metadata, $options);\n        return $call;\n    }\n\n    /**\n     * Call a remote method that takes a stream of arguments and has a single\n     * output.\n     *\n     * @param string   $method      The name of the method to call\n     * @param callable $deserialize A function that deserializes the response\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return ClientStreamingCall The active call object\n     */\n    protected function _clientStreamRequest(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $call_factory = $this->_StreamUnaryCallFactory($this->channel);\n        $call = $call_factory($method, $deserialize, $metadata, $options);\n        return $call;\n    }\n\n    /**\n     * Call a remote method that takes a single argument and returns a stream\n     * of responses.\n     *\n     * @param string   $method      The name of the method to call\n     * @param mixed    $argument    The argument to the method\n     * @param callable $deserialize A function that deserializes the responses\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return ServerStreamingCall The active call object\n     */\n    protected function _serverStreamRequest(\n        $method,\n        $argument,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $call_factory = $this->_UnaryStreamCallFactory($this->channel);\n        $call = $call_factory($method, $argument, $deserialize, $metadata, $options);\n        return $call;\n    }\n\n    /**\n     * Call a remote method with messages streaming in both directions.\n     *\n     * @param string   $method      The name of the method to call\n     * @param callable $deserialize A function that deserializes the responses\n     * @param array    $metadata    A metadata map to send to the server\n     *                              (optional)\n     * @param array    $options     An array of options (optional)\n     *\n     * @return BidiStreamingCall The active call object\n     */\n    protected function _bidiRequest(\n        $method,\n        $deserialize,\n        array $metadata = [],\n        array $options = []\n    ) {\n        $call_factory = $this->_StreamStreamCallFactory($this->channel);\n        $call = $call_factory($method, $deserialize, $metadata, $options);\n        return $call;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/BidiStreamingCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Represents an active call that allows for sending and receiving messages\n * in streams in any order.\n */\nclass BidiStreamingCall extends AbstractCall\n{\n    /**\n     * Start the call.\n     *\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     */\n    public function start(array $metadata = [])\n    {\n        $this->call->startBatch([\n            OP_SEND_INITIAL_METADATA => $metadata,\n        ]);\n    }\n\n    /**\n     * Reads the next value from the server.\n     *\n     * @return mixed The next value from the server, or null if there is none\n     */\n    public function read()\n    {\n        $batch = [OP_RECV_MESSAGE => true];\n        if ($this->metadata === null) {\n            $batch[OP_RECV_INITIAL_METADATA] = true;\n        }\n        $read_event = $this->call->startBatch($batch);\n        if ($this->metadata === null) {\n            $this->metadata = $read_event->metadata;\n        }\n\n        return $this->_deserializeResponse($read_event->message);\n    }\n\n    /**\n     * Write a single message to the server. This cannot be called after\n     * writesDone is called.\n     *\n     * @param ByteBuffer $data    The data to write\n     * @param array      $options An array of options, possible keys:\n     *                            'flags' => a number (optional)\n     */\n    public function write($data, array $options = [])\n    {\n        $message_array = ['message' => $this->_serializeMessage($data)];\n        if (array_key_exists('flags', $options)) {\n            $message_array['flags'] = $options['flags'];\n        }\n        $this->call->startBatch([\n            OP_SEND_MESSAGE => $message_array,\n        ]);\n    }\n\n    /**\n     * Indicate that no more writes will be sent.\n     */\n    public function writesDone()\n    {\n        $this->call->startBatch([\n            OP_SEND_CLOSE_FROM_CLIENT => true,\n        ]);\n    }\n\n    /**\n     * Wait for the server to send the status, and return it.\n     *\n     * @return \\stdClass The status object, with integer $code, string\n     *                   $details, and array $metadata members\n     */\n    public function getStatus()\n    {\n        $status_event = $this->call->startBatch([\n            OP_RECV_STATUS_ON_CLIENT => true,\n        ]);\n\n        $this->trailing_metadata = $status_event->status->metadata;\n\n        return $status_event->status;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/CallInvoker.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc;\n\n/**\n * CallInvoker is used to pass the self defined channel into the stub,\n * while intercept each RPC with the channel accessible.\n */\ninterface CallInvoker\n{\n    public function createChannelFactory($hostname, $opts);\n    public function UnaryCall($channel, $method, $deserialize, $options);\n    public function ClientStreamingCall($channel, $method, $deserialize, $options);\n    public function ServerStreamingCall($channel, $method, $deserialize, $options);\n    public function BidiStreamingCall($channel, $method, $deserialize, $options);\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/ClientStreamingCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Represents an active call that sends a stream of messages and then gets\n * a single response.\n */\nclass ClientStreamingCall extends AbstractCall\n{\n    /**\n     * Start the call.\n     *\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     */\n    public function start(array $metadata = [])\n    {\n        $this->call->startBatch([\n            OP_SEND_INITIAL_METADATA => $metadata,\n        ]);\n    }\n\n    /**\n     * Write a single message to the server. This cannot be called after\n     * wait is called.\n     *\n     * @param ByteBuffer $data    The data to write\n     * @param array      $options An array of options, possible keys:\n     *                            'flags' => a number (optional)\n     */\n    public function write($data, array $options = [])\n    {\n        $message_array = ['message' => $this->_serializeMessage($data)];\n        if (array_key_exists('flags', $options)) {\n            $message_array['flags'] = $options['flags'];\n        }\n        $this->call->startBatch([\n            OP_SEND_MESSAGE => $message_array,\n        ]);\n    }\n\n    /**\n     * Wait for the server to respond with data and a status.\n     *\n     * @return array [response data, status]\n     */\n    public function wait()\n    {\n        $event = $this->call->startBatch([\n            OP_SEND_CLOSE_FROM_CLIENT => true,\n            OP_RECV_INITIAL_METADATA => true,\n            OP_RECV_MESSAGE => true,\n            OP_RECV_STATUS_ON_CLIENT => true,\n        ]);\n        $this->metadata = $event->metadata;\n\n        $status = $event->status;\n        $this->trailing_metadata = $status->metadata;\n\n        return [$this->_deserializeResponse($event->message), $status];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/DefaultCallInvoker.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nnamespace Grpc;\n\n/**\n * Default call invoker in the gRPC stub.\n */\nclass DefaultCallInvoker implements CallInvoker\n{\n    public function createChannelFactory($hostname, $opts) {\n        return new Channel($hostname, $opts);\n    }\n\n    public function UnaryCall($channel, $method, $deserialize, $options) {\n        return new UnaryCall($channel, $method, $deserialize, $options);\n    }\n\n    public function ClientStreamingCall($channel, $method, $deserialize, $options) {\n        return new ClientStreamingCall($channel, $method, $deserialize, $options);\n    }\n\n    public function ServerStreamingCall($channel, $method, $deserialize, $options) {\n        return new ServerStreamingCall($channel, $method, $deserialize, $options);\n    }\n\n    public function BidiStreamingCall($channel, $method, $deserialize, $options) {\n        return new BidiStreamingCall($channel, $method, $deserialize, $options);\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/Interceptor.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Represents an interceptor that intercept RPC invocations before call starts.\n * There is one proposal related to the argument $deserialize under the review.\n * The proposal link is https://github.com/grpc/proposal/pull/86.\n */\nclass Interceptor\n{\n    public function interceptUnaryUnary(\n        $method,\n        $argument,\n        $deserialize,\n        $continuation,\n        array $metadata = [],\n        array $options = []\n    ) {\n        return $continuation($method, $argument, $deserialize, $metadata, $options);\n    }\n\n    public function interceptStreamUnary(\n        $method,\n        $deserialize,\n        $continuation,\n        array $metadata = [],\n        array $options = []\n    ) {\n        return $continuation($method, $deserialize, $metadata, $options);\n    }\n\n    public function interceptUnaryStream(\n        $method,\n        $argument,\n        $deserialize,\n        $continuation,\n        array $metadata = [],\n        array $options = []\n    ) {\n        return $continuation($method, $argument, $deserialize, $metadata, $options);\n    }\n\n    public function interceptStreamStream(\n        $method,\n        $deserialize,\n        $continuation,\n        array $metadata = [],\n        array $options = []\n    ) {\n        return $continuation($method, $deserialize, $metadata, $options);\n    }\n\n    /**\n     * Intercept the methods with Channel\n     *\n     * @param Channel|InterceptorChannel $channel An already created Channel or InterceptorChannel object (optional)\n     * @param Interceptor|Interceptor[] $interceptors interceptors to be added\n     *\n     * @return InterceptorChannel\n     */\n    public static function intercept($channel, $interceptors)\n    {\n        if (is_array($interceptors)) {\n            for ($i = count($interceptors) - 1; $i >= 0; $i--) {\n                $channel = new Internal\\InterceptorChannel($channel, $interceptors[$i]);\n            }\n        } else {\n            $channel =  new Internal\\InterceptorChannel($channel, $interceptors);\n        }\n        return $channel;\n    }\n}\n\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/Internal/InterceptorChannel.php",
    "content": "<?php\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc\\Internal;\n\n/**\n * This is a PRIVATE API and can change without notice.\n */\nclass InterceptorChannel extends \\Grpc\\Channel\n{\n    private $next = null;\n    private $interceptor;\n\n    /**\n     * @param Channel|InterceptorChannel $channel An already created Channel\n     * or InterceptorChannel object (optional)\n     * @param Interceptor  $interceptor\n     */\n    public function __construct($channel, $interceptor)\n    {\n        if (!is_a($channel, 'Grpc\\Channel') &&\n            !is_a($channel, 'Grpc\\Internal\\InterceptorChannel')) {\n            throw new \\Exception('The channel argument is not a Channel object '.\n                'or an InterceptorChannel object created by '.\n                'Interceptor::intercept($channel, Interceptor|Interceptor[] $interceptors)');\n        }\n        $this->interceptor = $interceptor;\n        $this->next = $channel;\n    }\n\n    public function getNext()\n    {\n        return $this->next;\n    }\n\n    public function getInterceptor()\n    {\n        return $this->interceptor;\n    }\n\n    public function getTarget()\n    {\n        return $this->getNext()->getTarget();\n    }\n\n    public function watchConnectivityState($new_state, $deadline)\n    {\n        return $this->getNext()->watchConnectivityState($new_state, $deadline);\n    }\n\n    public function getConnectivityState($try_to_connect = false)\n    {\n        return $this->getNext()->getConnectivityState($try_to_connect);\n    }\n\n    public function close()\n    {\n        return $this->getNext()->close();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/MethodDescriptor.php",
    "content": "<?php\n/*\n *\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * This is an experimental and incomplete implementation of gRPC server\n * for PHP. APIs are _definitely_ going to be changed.\n *\n * DO NOT USE in production.\n */\n\nclass MethodDescriptor\n{\n    public function __construct(\n        object $service,\n        string $method_name,\n        string $request_type,\n        int $call_type\n    ) {\n        $this->service = $service;\n        $this->method_name = $method_name;\n        $this->request_type = $request_type;\n        $this->call_type = $call_type;\n    }\n\n    public const UNARY_CALL = 0;\n    public const SERVER_STREAMING_CALL = 1;\n    public const CLIENT_STREAMING_CALL = 2;\n    public const BIDI_STREAMING_CALL = 3;\n\n    public $service;\n    public $method_name;\n    public $request_type;\n    public $call_type;\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/RpcServer.php",
    "content": "<?php\n/*\n *\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * This is an experimental and incomplete implementation of gRPC server\n * for PHP. APIs are _definitely_ going to be changed.\n *\n * DO NOT USE in production.\n */\n\n/**\n * Class RpcServer\n * @package Grpc\n */\nclass RpcServer extends Server\n{\n    // [ <String method_full_path> => MethodDescriptor ]\n    private $paths_map = [];\n\n    private function waitForNextEvent()\n    {\n        return $this->requestCall();\n    }\n\n    /**\n     * Add a service to this server\n     *\n     * @param Object   $service      The service to be added\n     */\n    public function handle($service)\n    {\n        $methodDescriptors = $service->getMethodDescriptors();\n        $exist_methods = array_intersect_key($this->paths_map, $methodDescriptors);\n        if (!empty($exist_methods)) {\n            fwrite(STDERR, \"WARNING: \" . 'override already registered methods: ' .\n                implode(', ', array_keys($exist_methods)) . PHP_EOL);\n        }\n\n        $this->paths_map = array_merge($this->paths_map, $methodDescriptors);\n        return $this->paths_map;\n    }\n\n    public function run()\n    {\n        $this->start();\n        while (true) try {\n            // This blocks until the server receives a request\n            $event = $this->waitForNextEvent();\n\n            $full_path = $event->method;\n            $context = new ServerContext($event);\n            $server_writer = new ServerCallWriter($event->call, $context);\n\n            if (!array_key_exists($full_path, $this->paths_map)) {\n                $context->setStatus(Status::unimplemented());\n                $server_writer->finish();\n                continue;\n            };\n\n            $method_desc = $this->paths_map[$full_path];\n            $server_reader = new ServerCallReader(\n                $event->call,\n                $method_desc->request_type\n            );\n\n            try {\n                $this->processCall(\n                    $method_desc,\n                    $server_reader,\n                    $server_writer,\n                    $context\n                );\n            } catch (\\Exception $e) {\n                $context->setStatus(Status::status(\n                    STATUS_INTERNAL,\n                    $e->getMessage()\n                ));\n                $server_writer->finish();\n            }\n        } catch (\\Exception $e) {\n            fwrite(STDERR, \"ERROR: \" . $e->getMessage() . PHP_EOL);\n            exit(1);\n        }\n    }\n\n    private function processCall(\n        MethodDescriptor $method_desc,\n        ServerCallReader $server_reader,\n        ServerCallWriter $server_writer,\n        ServerContext $context\n    ) {\n        // Dispatch to actual server logic\n        switch ($method_desc->call_type) {\n            case MethodDescriptor::UNARY_CALL:\n                $request = $server_reader->read();\n                $response =\n                    call_user_func(\n                        array($method_desc->service, $method_desc->method_name),\n                        $request ?? new $method_desc->request_type,\n                        $context\n                    );\n                $server_writer->finish($response);\n                break;\n            case MethodDescriptor::SERVER_STREAMING_CALL:\n                $request = $server_reader->read();\n                call_user_func(\n                    array($method_desc->service, $method_desc->method_name),\n                    $request ?? new $method_desc->request_type,\n                    $server_writer,\n                    $context\n                );\n                break;\n            case MethodDescriptor::CLIENT_STREAMING_CALL:\n                $response = call_user_func(\n                    array($method_desc->service, $method_desc->method_name),\n                    $server_reader,\n                    $context\n                );\n                $server_writer->finish($response);\n                break;\n            case MethodDescriptor::BIDI_STREAMING_CALL:\n                call_user_func(\n                    array($method_desc->service, $method_desc->method_name),\n                    $server_reader,\n                    $server_writer,\n                    $context\n                );\n                break;\n            default:\n                throw new \\Exception();\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/ServerCallReader.php",
    "content": "<?php\n/*\n *\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * This is an experimental and incomplete implementation of gRPC server\n * for PHP. APIs are _definitely_ going to be changed.\n *\n * DO NOT USE in production.\n */\n\nclass ServerCallReader\n{\n    public function __construct($call, string $request_type)\n    {\n        $this->call_ = $call;\n        $this->request_type_ = $request_type;\n    }\n\n    public function read()\n    {\n        $event = $this->call_->startBatch([\n            OP_RECV_MESSAGE => true,\n        ]);\n        if ($event->message === null) {\n            return null;\n        }\n        $data = new $this->request_type_;\n        $data->mergeFromString($event->message);\n        return $data;\n    }\n\n    private $call_;\n    private $request_type_;\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/ServerCallWriter.php",
    "content": "<?php\n/*\n *\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * This is an experimental and incomplete implementation of gRPC server\n * for PHP. APIs are _definitely_ going to be changed.\n *\n * DO NOT USE in production.\n */\n\nclass ServerCallWriter\n{\n    public function __construct($call, $serverContext)\n    {\n        $this->call_ = $call;\n        $this->serverContext_ = $serverContext;\n    }\n\n    public function start(\n        $data = null,\n        array $options = []\n    ) {\n        $batch = [];\n        $this->addSendInitialMetadataOpIfNotSent(\n            $batch,\n            $this->serverContext_->initialMetadata()\n        );\n        $this->addSendMessageOpIfHasData($batch, $data, $options);\n        $this->call_->startBatch($batch);\n    }\n\n    public function write(\n        $data,\n        array $options = []\n    ) {\n        $batch = [];\n        $this->addSendInitialMetadataOpIfNotSent(\n            $batch,\n            $this->serverContext_->initialMetadata()\n        );\n        $this->addSendMessageOpIfHasData($batch, $data, $options);\n        $this->call_->startBatch($batch);\n    }\n\n    public function finish(\n        $data = null,\n        array $options = []\n    ) {\n        $batch = [\n            OP_SEND_STATUS_FROM_SERVER =>\n            $this->serverContext_->status() ?? Status::ok(),\n            OP_RECV_CLOSE_ON_SERVER => true,\n        ];\n        $this->addSendInitialMetadataOpIfNotSent(\n            $batch,\n            $this->serverContext_->initialMetadata()\n        );\n        $this->addSendMessageOpIfHasData($batch, $data, $options);\n        $this->call_->startBatch($batch);\n    }\n\n    ////////////////////////////\n\n    private function addSendInitialMetadataOpIfNotSent(\n        array &$batch,\n        ?array $initialMetadata = null\n    ) {\n        if (!$this->initialMetadataSent_) {\n            $batch[OP_SEND_INITIAL_METADATA] = $initialMetadata ?? [];\n            $this->initialMetadataSent_ = true;\n        }\n    }\n\n    private function addSendMessageOpIfHasData(\n        array &$batch,\n        $data = null,\n        array $options = []\n    ) {\n        if ($data) {\n            $message_array = ['message' => $data->serializeToString()];\n            if (array_key_exists('flags', $options)) {\n                $message_array['flags'] = $options['flags'];\n            }\n            $batch[OP_SEND_MESSAGE] = $message_array;\n        }\n    }\n\n    private $call_;\n    private $initialMetadataSent_ = false;\n    private $serverContext_;\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/ServerContext.php",
    "content": "<?php\n/*\n *\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * This is an experimental and incomplete implementation of gRPC server\n * for PHP. APIs are _definitely_ going to be changed.\n *\n * DO NOT USE in production.\n */\n\nclass ServerContext\n{\n    public function __construct($event)\n    {\n        $this->event = $event;\n    }\n\n    public function clientMetadata()\n    {\n        return $this->event->metadata;\n    }\n    public function deadline()\n    {\n        return $this->event->absolute_deadline;\n    }\n    public function host()\n    {\n        return $this->event->host;\n    }\n    public function method()\n    {\n        return $this->event->method;\n    }\n\n    public function setInitialMetadata($initialMetadata)\n    {\n        $this->initialMetadata_ = $initialMetadata;\n    }\n\n    public function initialMetadata()\n    {\n        return $this->initialMetadata_;\n    }\n\n    public function setStatus($status)\n    {\n        $this->status_ = $status;\n    }\n\n    public function status()\n    {\n        return $this->status_;\n    }\n\n    private $event;\n    private $initialMetadata_;\n    private $status_;\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/ServerStreamingCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Represents an active call that sends a single message and then gets a\n * stream of responses.\n */\nclass ServerStreamingCall extends AbstractCall\n{\n    /**\n     * Start the call.\n     *\n     * @param mixed $data     The data to send\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     * @param array $options  An array of options, possible keys:\n     *                        'flags' => a number (optional)\n     */\n    public function start($data, array $metadata = [], array $options = [])\n    {\n        $message_array = ['message' => $this->_serializeMessage($data)];\n        if (array_key_exists('flags', $options)) {\n            $message_array['flags'] = $options['flags'];\n        }\n        $this->call->startBatch([\n            OP_SEND_INITIAL_METADATA => $metadata,\n            OP_SEND_MESSAGE => $message_array,\n            OP_SEND_CLOSE_FROM_CLIENT => true,\n        ]);\n    }\n\n    /**\n     * @return mixed An iterator of response values\n     */\n    public function responses()\n    {\n        $batch = [OP_RECV_MESSAGE => true];\n        if ($this->metadata === null) {\n            $batch[OP_RECV_INITIAL_METADATA] = true;\n        }\n        $read_event = $this->call->startBatch($batch);\n        if ($this->metadata === null) {\n            $this->metadata = $read_event->metadata;\n        }\n        $response = $read_event->message;\n        while ($response !== null) {\n            yield $this->_deserializeResponse($response);\n            $response = $this->call->startBatch([\n                OP_RECV_MESSAGE => true,\n            ])->message;\n        }\n    }\n\n    /**\n     * Wait for the server to send the status, and return it.\n     *\n     * @return \\stdClass The status object, with integer $code, string\n     *                   $details, and array $metadata members\n     */\n    public function getStatus()\n    {\n        $status_event = $this->call->startBatch([\n            OP_RECV_STATUS_ON_CLIENT => true,\n        ]);\n\n        $this->trailing_metadata = $status_event->status->metadata;\n\n        return $status_event->status;\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        if ($this->metadata === null) {\n            $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]);\n            $this->metadata = $event->metadata;\n        }\n        return $this->metadata;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/Status.php",
    "content": "<?php\n/*\n *\n * Copyright 2020 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * This is an experimental and incomplete implementation of gRPC server\n * for PHP. APIs are _definitely_ going to be changed.\n *\n * DO NOT USE in production.\n */\n\n/**\n * Class Status\n * @package Grpc\n */\nclass Status\n{\n    public static function status(int $code, string $details, ?array $metadata = null): array\n    {\n        $status = [\n            'code' => $code,\n            'details' => $details,\n        ];\n        if ($metadata) {\n            $status['metadata'] = $metadata;\n        }\n        return $status;\n    }\n\n    public static function ok(?array $metadata = null): array\n    {\n        return Status::status(STATUS_OK, 'OK', $metadata);\n    }\n    public static function unimplemented(): array\n    {\n        return Status::status(STATUS_UNIMPLEMENTED, 'UNIMPLEMENTED');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/grpc/grpc/src/lib/UnaryCall.php",
    "content": "<?php\n/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nnamespace Grpc;\n\n/**\n * Represents an active call that sends a single message and then gets a\n * single response.\n * \n * @template T of \\Google\\Protobuf\\Internal\\Message\n */\nclass UnaryCall extends AbstractCall\n{\n    /**\n     * Start the call.\n     *\n     * @param mixed $data     The data to send\n     * @param array $metadata Metadata to send with the call, if applicable\n     *                        (optional)\n     * @param array $options  An array of options, possible keys:\n     *                        'flags' => a number (optional)\n     */\n    public function start($data, array $metadata = [], array $options = [])\n    {\n        $message_array = ['message' => $this->_serializeMessage($data)];\n        if (isset($options['flags'])) {\n            $message_array['flags'] = $options['flags'];\n        }\n        $this->call->startBatch([\n            OP_SEND_INITIAL_METADATA => $metadata,\n            OP_SEND_MESSAGE => $message_array,\n            OP_SEND_CLOSE_FROM_CLIENT => true,\n        ]);\n    }\n\n    /**\n     * Wait for the server to respond with data and a status.\n     *\n     * @return array{0: T|null, 1: \\stdClass} [response data, status]\n     */\n    public function wait()\n    {\n        $batch = [\n            OP_RECV_MESSAGE => true,\n            OP_RECV_STATUS_ON_CLIENT => true,\n        ];\n        if ($this->metadata === null) {\n            $batch[OP_RECV_INITIAL_METADATA] = true;\n        }\n        $event = $this->call->startBatch($batch);\n        if ($this->metadata === null) {\n            $this->metadata = $event->metadata;\n        }\n        $status = $event->status;\n        $this->trailing_metadata = $status->metadata;\n\n        return [$this->_deserializeResponse($event->message), $status];\n    }\n\n    /**\n     * @return mixed The metadata sent by the server\n     */\n    public function getMetadata()\n    {\n        if ($this->metadata === null) {\n            $event = $this->call->startBatch([OP_RECV_INITIAL_METADATA => true]);\n            $this->metadata = $event->metadata;\n        }\n        return $this->metadata;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/CHANGELOG.md",
    "content": "# Change Log\n\nPlease refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.\n\n## 7.10.0 - 2025-08-23\n\n### Added\n\n- Support for PHP 8.5\n\n### Changed\n\n- Adjusted `guzzlehttp/promises` version constraint to `^2.3`\n- Adjusted `guzzlehttp/psr7` version constraint to `^2.8`\n\n\n## 7.9.3 - 2025-03-27\n\n### Changed\n\n- Remove explicit content-length header for GET requests\n- Improve compatibility with bad servers for boolean cookie values\n\n\n## 7.9.2 - 2024-07-24\n\n### Fixed\n\n- Adjusted handler selection to use cURL if its version is 7.21.2 or higher, rather than 7.34.0\n\n\n## 7.9.1 - 2024-07-19\n\n### Fixed\n\n- Fix TLS 1.3 check for HTTP/2 requests\n\n\n## 7.9.0 - 2024-07-18\n\n### Changed\n\n- Improve protocol version checks to provide feedback around unsupported protocols\n- Only select the cURL handler by default if 7.34.0 or higher is linked\n- Improved `CurlMultiHandler` to avoid busy wait if possible\n- Dropped support for EOL `guzzlehttp/psr7` v1\n- Improved URI user info redaction in errors\n\n## 7.8.2 - 2024-07-18\n\n### Added\n\n- Support for PHP 8.4\n\n\n## 7.8.1 - 2023-12-03\n\n### Changed\n\n- Updated links in docs to their canonical versions\n- Replaced `call_user_func*` with native calls\n\n\n## 7.8.0 - 2023-08-27\n\n### Added\n\n- Support for PHP 8.3\n- Added automatic closing of handles on `CurlFactory` object destruction\n\n\n## 7.7.1 - 2023-08-27\n\n### Changed\n\n- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler`\n\n\n## 7.7.0 - 2023-05-21\n\n### Added\n\n- Support `guzzlehttp/promises` v2\n\n\n## 7.6.1 - 2023-05-15\n\n### Fixed\n\n- Fix `SetCookie::fromString` MaxAge deprecation warning and skip invalid MaxAge values\n\n\n## 7.6.0 - 2023-05-14\n\n### Added\n\n- Support for setting the minimum TLS version in a unified way\n- Apply on request the version set in options parameters\n\n\n## 7.5.2 - 2023-05-14\n\n### Fixed\n\n- Fixed set cookie constructor validation\n- Fixed handling of files with `'0'` body\n\n### Changed\n\n- Corrected docs and default connect timeout value to 300 seconds\n\n\n## 7.5.1 - 2023-04-17\n\n### Fixed\n\n- Fixed `NO_PROXY` settings so that setting the `proxy` option to `no` overrides the env variable\n\n### Changed\n\n- Adjusted `guzzlehttp/psr7` version constraint to `^1.9.1 || ^2.4.5`\n\n\n## 7.5.0 - 2022-08-28\n\n### Added\n\n- Support PHP 8.2\n- Add request to delay closure params\n\n\n## 7.4.5 - 2022-06-20\n\n### Fixed\n\n* Fix change in port should be considered a change in origin\n* Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin\n\n\n## 7.4.4 - 2022-06-09\n\n### Fixed\n\n* Fix failure to strip Authorization header on HTTP downgrade\n* Fix failure to strip the Cookie header on change in host or HTTP downgrade\n\n\n## 7.4.3 - 2022-05-25\n\n### Fixed\n\n* Fix cross-domain cookie leakage\n\n\n## 7.4.2 - 2022-03-20\n\n### Fixed\n\n- Remove curl auth on cross-domain redirects to align with the Authorization HTTP header\n- Reject non-HTTP schemes in StreamHandler\n- Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`\n\n\n## 7.4.1 - 2021-12-06\n\n### Changed\n\n- Replaced implicit URI to string coercion [#2946](https://github.com/guzzle/guzzle/pull/2946)\n- Allow `symfony/deprecation-contracts` version 3 [#2961](https://github.com/guzzle/guzzle/pull/2961)\n\n### Fixed\n\n- Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)\n\n\n## 7.4.0 - 2021-10-18\n\n### Added\n\n- Support PHP 8.1 [#2929](https://github.com/guzzle/guzzle/pull/2929), [#2939](https://github.com/guzzle/guzzle/pull/2939)\n- Support `psr/log` version 2 and 3 [#2943](https://github.com/guzzle/guzzle/pull/2943)\n\n### Fixed\n\n- Make sure we always call `restore_error_handler()` [#2915](https://github.com/guzzle/guzzle/pull/2915)\n- Fix progress parameter type compatibility between the cURL and stream handlers [#2936](https://github.com/guzzle/guzzle/pull/2936)\n- Throw `InvalidArgumentException` when an incorrect `headers` array is provided [#2916](https://github.com/guzzle/guzzle/pull/2916), [#2942](https://github.com/guzzle/guzzle/pull/2942)\n\n### Changed\n\n- Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945)\n\n\n## 7.3.0 - 2021-03-23\n\n### Added\n\n- Support for DER and P12 certificates [#2413](https://github.com/guzzle/guzzle/pull/2413)\n- Support the cURL (http://) scheme for StreamHandler proxies [#2850](https://github.com/guzzle/guzzle/pull/2850)\n- Support for `guzzlehttp/psr7:^2.0` [#2878](https://github.com/guzzle/guzzle/pull/2878)\n\n### Fixed\n\n- Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)\n\n\n## 7.2.0 - 2020-10-10\n\n### Added\n\n- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789)\n- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795)\n\n### Fixed\n\n- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591)\n- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595)\n- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804)\n\n### Changed\n\n- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660)\n- Avoid \"functions\" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712)\n\n### Deprecated\n\n- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)\n\n\n## 7.1.1 - 2020-09-30\n\n### Fixed\n\n- Incorrect EOF detection for response body streams on Windows.\n\n### Changed\n\n- We dont connect curl `sink` on HEAD requests.\n- Removed some PHP 5 workarounds\n\n\n## 7.1.0 - 2020-09-22\n\n### Added\n\n- `GuzzleHttp\\MessageFormatterInterface`\n\n### Fixed\n\n- Fixed issue that caused cookies with no value not to be stored.\n- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.\n- Fixed logging on empty responses.\n- Make sure MessageFormatter::format returns string\n\n### Deprecated\n\n- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead.\n- `ClientInterface::getConfig()`\n- `Client::getConfig()`\n- `Client::__call()`\n- `Utils::defaultCaBundle()`\n- `CurlFactory::LOW_CURL_VERSION_NUMBER`\n\n\n## 7.0.1 - 2020-06-27\n\n* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)\n\n\n## 7.0.0 - 2020-06-27\n\nNo changes since 7.0.0-rc1.\n\n\n## 7.0.0-rc1 - 2020-06-15\n\n### Changed\n\n* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)\n* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)\n\n\n## 7.0.0-beta2 - 2020-05-25\n\n### Added\n\n* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546)\n* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583)\n\n### Changed\n\n* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531)\n* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529)\n* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546)\n* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550)\n* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529)\n* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541)\n* Updated the default User Agent to \"GuzzleHttp/7\" [#2654](https://github.com/guzzle/guzzle/pull/2654)\n\n### Fixed\n\n* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626)\n\n### Removed\n\n* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)\n\n\n## 7.0.0-beta1 - 2019-12-30\n\nThe diff might look very big but 95% of Guzzle users will be able to upgrade without modification.\nPlease see [the upgrade document](UPGRADING.md) that describes all BC breaking changes.\n\n### Added\n\n* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474)\n* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499)\n* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424)\n\n### Changed\n\n* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427)\n* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450)\n* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444)\n* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454)\n* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462)\n* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461)\n* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495)\n\n### Fixed\n\n* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311)\n\n### Removed\n\n* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162)\n* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425)\n* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433)\n* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)\n* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)\n\n\n## 6.5.2 - 2019-12-23\n\n* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)\n\n\n## 6.5.1 - 2019-12-21\n\n* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)\n* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)\n\n\n## 6.5.0 - 2019-12-07\n\n* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)\n* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)\n* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)\n* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)\n* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)\n* Deprecated `ClientInterface::VERSION`\n\n\n## 6.4.1 - 2019-10-23\n\n* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that\n* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`\n\n\n## 6.4.0 - 2019-10-23\n\n* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)\n* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)\n* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)\n* Improvement: Added `GuzzleHttp\\Exception\\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)\n* Improvement: Added `GuzzleHttp\\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)\n* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)\n* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)\n* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)\n* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)\n\n\n## 6.3.3 - 2018-04-22\n\n* Fix: Default headers when decode_content is specified\n\n\n## 6.3.2 - 2018-03-26\n\n* Fix: Release process\n\n\n## 6.3.1 - 2018-03-26\n\n* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014)\n* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012)\n* Bug fix: Malformed domain that contains a \"/\" [#1999](https://github.com/guzzle/guzzle/pull/1999)\n* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998)\n* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953)\n* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915)\n* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916)\n\n+ Minor code cleanups, documentation fixes and clarifications.\n\n\n## 6.3.0 - 2017-06-22\n\n* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659)\n* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621)\n* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580)\n* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609)\n* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641)\n* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611)\n* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811)\n* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642)\n* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569)\n* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711)\n* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745)\n* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721)\n* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318)\n* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)\n* Improvement:  \tUse `\\GuzzleHttp\\Promise\\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)\n\n+ Minor code cleanups, documentation fixes and clarifications.\n\n\n## 6.2.3 - 2017-02-28\n\n* Fix deprecations with guzzle/psr7 version 1.4\n\n\n## 6.2.2 - 2016-10-08\n\n* Allow to pass nullable Response to delay callable\n* Only add scheme when host is present\n* Fix drain case where content-length is the literal string zero\n* Obfuscate in-URL credentials in exceptions\n\n\n## 6.2.1 - 2016-07-18\n\n* Address HTTP_PROXY security vulnerability, CVE-2016-5385:\n  https://httpoxy.org/\n* Fixing timeout bug with StreamHandler:\n  https://github.com/guzzle/guzzle/pull/1488\n* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when\n  a server does not honor `Connection: close`.\n* Ignore URI fragment when sending requests.\n\n\n## 6.2.0 - 2016-03-21\n\n* Feature: added `GuzzleHttp\\json_encode` and `GuzzleHttp\\json_decode`.\n  https://github.com/guzzle/guzzle/pull/1389\n* Bug fix: Fix sleep calculation when waiting for delayed requests.\n  https://github.com/guzzle/guzzle/pull/1324\n* Feature: More flexible history containers.\n  https://github.com/guzzle/guzzle/pull/1373\n* Bug fix: defer sink stream opening in StreamHandler.\n  https://github.com/guzzle/guzzle/pull/1377\n* Bug fix: do not attempt to escape cookie values.\n  https://github.com/guzzle/guzzle/pull/1406\n* Feature: report original content encoding and length on decoded responses.\n  https://github.com/guzzle/guzzle/pull/1409\n* Bug fix: rewind seekable request bodies before dispatching to cURL.\n  https://github.com/guzzle/guzzle/pull/1422\n* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.\n  https://github.com/guzzle/guzzle/pull/1367\n\n\n## 6.1.1 - 2015-11-22\n\n* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler\n  https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4\n* Feature: HandlerStack is now more generic.\n  https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e\n* Bug fix: setting verify to false in the StreamHandler now disables peer\n  verification. https://github.com/guzzle/guzzle/issues/1256\n* Feature: Middleware now uses an exception factory, including more error\n  context. https://github.com/guzzle/guzzle/pull/1282\n* Feature: better support for disabled functions.\n  https://github.com/guzzle/guzzle/pull/1287\n* Bug fix: fixed regression where MockHandler was not using `sink`.\n  https://github.com/guzzle/guzzle/pull/1292\n\n\n## 6.1.0 - 2015-09-08\n\n* Feature: Added the `on_stats` request option to provide access to transfer\n  statistics for requests. https://github.com/guzzle/guzzle/pull/1202\n* Feature: Added the ability to persist session cookies in CookieJars.\n  https://github.com/guzzle/guzzle/pull/1195\n* Feature: Some compatibility updates for Google APP Engine\n  https://github.com/guzzle/guzzle/pull/1216\n* Feature: Added support for NO_PROXY to prevent the use of a proxy based on\n  a simple set of rules. https://github.com/guzzle/guzzle/pull/1197\n* Feature: Cookies can now contain square brackets.\n  https://github.com/guzzle/guzzle/pull/1237\n* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.\n  https://github.com/guzzle/guzzle/pull/1232\n* Bug fix: Cusotm cURL options now correctly override curl options of the\n  same name. https://github.com/guzzle/guzzle/pull/1221\n* Bug fix: Content-Type header is now added when using an explicitly provided\n  multipart body. https://github.com/guzzle/guzzle/pull/1218\n* Bug fix: Now ignoring Set-Cookie headers that have no name.\n* Bug fix: Reason phrase is no longer cast to an int in some cases in the\n  cURL handler. https://github.com/guzzle/guzzle/pull/1187\n* Bug fix: Remove the Authorization header when redirecting if the Host\n  header changes. https://github.com/guzzle/guzzle/pull/1207\n* Bug fix: Cookie path matching fixes\n  https://github.com/guzzle/guzzle/issues/1129\n* Bug fix: Fixing the cURL `body_as_string` setting\n  https://github.com/guzzle/guzzle/pull/1201\n* Bug fix: quotes are no longer stripped when parsing cookies.\n  https://github.com/guzzle/guzzle/issues/1172\n* Bug fix: `form_params` and `query` now always uses the `&` separator.\n  https://github.com/guzzle/guzzle/pull/1163\n* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.\n  https://github.com/guzzle/guzzle/pull/1189\n\n\n## 6.0.2 - 2015-07-04\n\n* Fixed a memory leak in the curl handlers in which references to callbacks\n  were not being removed by `curl_reset`.\n* Cookies are now extracted properly before redirects.\n* Cookies now allow more character ranges.\n* Decoded Content-Encoding responses are now modified to correctly reflect\n  their state if the encoding was automatically removed by a handler. This\n  means that the `Content-Encoding` header may be removed an the\n  `Content-Length` modified to reflect the message size after removing the\n  encoding.\n* Added a more explicit error message when trying to use `form_params` and\n  `multipart` in the same request.\n* Several fixes for HHVM support.\n* Functions are now conditionally required using an additional level of\n  indirection to help with global Composer installations.\n\n\n## 6.0.1 - 2015-05-27\n\n* Fixed a bug with serializing the `query` request option where the `&`\n  separator was missing.\n* Added a better error message for when `body` is provided as an array. Please\n  use `form_params` or `multipart` instead.\n* Various doc fixes.\n\n\n## 6.0.0 - 2015-05-26\n\n* See the UPGRADING.md document for more information.\n* Added `multipart` and `form_params` request options.\n* Added `synchronous` request option.\n* Added the `on_headers` request option.\n* Fixed `expect` handling.\n* No longer adding default middlewares in the client ctor. These need to be\n  present on the provided handler in order to work.\n* Requests are no longer initiated when sending async requests with the\n  CurlMultiHandler. This prevents unexpected recursion from requests completing\n  while ticking the cURL loop.\n* Removed the semantics of setting `default` to `true`. This is no longer\n  required now that the cURL loop is not ticked for async requests.\n* Added request and response logging middleware.\n* No longer allowing self signed certificates when using the StreamHandler.\n* Ensuring that `sink` is valid if saving to a file.\n* Request exceptions now include a \"handler context\" which provides handler\n  specific contextual information.\n* Added `GuzzleHttp\\RequestOptions` to allow request options to be applied\n  using constants.\n* `$maxHandles` has been removed from CurlMultiHandler.\n* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.\n\n\n## 5.3.0 - 2015-05-19\n\n* Mock now supports `save_to`\n* Marked `AbstractRequestEvent::getTransaction()` as public.\n* Fixed a bug in which multiple headers using different casing would overwrite\n  previous headers in the associative array.\n* Added `Utils::getDefaultHandler()`\n* Marked `GuzzleHttp\\Client::getDefaultUserAgent` as deprecated.\n* URL scheme is now always lowercased.\n\n\n## 6.0.0-beta.1\n\n* Requires PHP >= 5.5\n* Updated to use PSR-7\n  * Requires immutable messages, which basically means an event based system\n    owned by a request instance is no longer possible.\n  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).\n  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions\n    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\\Psr7`\n    namespace.\n* Added middleware and handler system\n  * Replaced the Guzzle event and subscriber system with a middleware system.\n  * No longer depends on RingPHP, but rather places the HTTP handlers directly\n    in Guzzle, operating on PSR-7 messages.\n  * Retry logic is now encapsulated in `GuzzleHttp\\Middleware::retry`, which\n    means the `guzzlehttp/retry-subscriber` is now obsolete.\n  * Mocking responses is now handled using `GuzzleHttp\\Handler\\MockHandler`.\n* Asynchronous responses\n  * No longer supports the `future` request option to send an async request.\n    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,\n    `getAsync`, etc.).\n  * Utilizing `GuzzleHttp\\Promise` instead of React's promise library to avoid\n    recursion required by chaining and forwarding react promises. See\n    https://github.com/guzzle/promises\n  * Added `requestAsync` and `sendAsync` to send request asynchronously.\n  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests\n    asynchronously.\n* Request options\n  * POST and form updates\n    * Added the `form_fields` and `form_files` request options.\n    * Removed the `GuzzleHttp\\Post` namespace.\n    * The `body` request option no longer accepts an array for POST requests.\n  * The `exceptions` request option has been deprecated in favor of the\n    `http_errors` request options.\n  * The `save_to` request option has been deprecated in favor of `sink` request\n    option.\n* Clients no longer accept an array of URI template string and variables for\n  URI variables. You will need to expand URI templates before passing them\n  into a client constructor or request method.\n* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are\n  now magic methods that will send synchronous requests.\n* Replaced `Utils.php` with plain functions in `functions.php`.\n* Removed `GuzzleHttp\\Collection`.\n* Removed `GuzzleHttp\\BatchResults`. Batched pool results are now returned as\n  an array.\n* Removed `GuzzleHttp\\Query`. Query string handling is now handled using an\n  associative array passed into the `query` request option. The query string\n  is serialized using PHP's `http_build_query`. If you need more control, you\n  can pass the query string in as a string.\n* `GuzzleHttp\\QueryParser` has been replaced with the\n  `GuzzleHttp\\Psr7\\parse_query`.\n\n\n## 5.2.0 - 2015-01-27\n\n* Added `AppliesHeadersInterface` to make applying headers to a request based\n  on the body more generic and not specific to `PostBodyInterface`.\n* Reduced the number of stack frames needed to send requests.\n* Nested futures are now resolved in the client rather than the RequestFsm\n* Finishing state transitions is now handled in the RequestFsm rather than the\n  RingBridge.\n* Added a guard in the Pool class to not use recursion for request retries.\n\n\n## 5.1.0 - 2014-12-19\n\n* Pool class no longer uses recursion when a request is intercepted.\n* The size of a Pool can now be dynamically adjusted using a callback.\n  See https://github.com/guzzle/guzzle/pull/943.\n* Setting a request option to `null` when creating a request with a client will\n  ensure that the option is not set. This allows you to overwrite default\n  request options on a per-request basis.\n  See https://github.com/guzzle/guzzle/pull/937.\n* Added the ability to limit which protocols are allowed for redirects by\n  specifying a `protocols` array in the `allow_redirects` request option.\n* Nested futures due to retries are now resolved when waiting for synchronous\n  responses. See https://github.com/guzzle/guzzle/pull/947.\n* `\"0\"` is now an allowed URI path. See\n  https://github.com/guzzle/guzzle/pull/935.\n* `Query` no longer typehints on the `$query` argument in the constructor,\n  allowing for strings and arrays.\n* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle\n  specific exceptions if necessary.\n\n\n## 5.0.3 - 2014-11-03\n\nThis change updates query strings so that they are treated as un-encoded values\nby default where the value represents an un-encoded value to send over the\nwire. A Query object then encodes the value before sending over the wire. This\nmeans that even value query string values (e.g., \":\") are url encoded. This\nmakes the Query class match PHP's http_build_query function. However, if you\nwant to send requests over the wire using valid query string characters that do\nnot need to be encoded, then you can provide a string to Url::setQuery() and\npass true as the second argument to specify that the query string is a raw\nstring that should not be parsed or encoded (unless a call to getQuery() is\nsubsequently made, forcing the query-string to be converted into a Query\nobject).\n\n\n## 5.0.2 - 2014-10-30\n\n* Added a trailing `\\r\\n` to multipart/form-data payloads. See\n  https://github.com/guzzle/guzzle/pull/871\n* Added a `GuzzleHttp\\Pool::send()` convenience method to match the docs.\n* Status codes are now returned as integers. See\n  https://github.com/guzzle/guzzle/issues/881\n* No longer overwriting an existing `application/x-www-form-urlencoded` header\n  when sending POST requests, allowing for customized headers. See\n  https://github.com/guzzle/guzzle/issues/877\n* Improved path URL serialization.\n\n  * No longer double percent-encoding characters in the path or query string if\n    they are already encoded.\n  * Now properly encoding the supplied path to a URL object, instead of only\n    encoding ' ' and '?'.\n  * Note: This has been changed in 5.0.3 to now encode query string values by\n    default unless the `rawString` argument is provided when setting the query\n    string on a URL: Now allowing many more characters to be present in the\n    query string without being percent encoded. See\n    https://datatracker.ietf.org/doc/html/rfc3986#appendix-A\n\n\n## 5.0.1 - 2014-10-16\n\nBugfix release.\n\n* Fixed an issue where connection errors still returned response object in\n  error and end events event though the response is unusable. This has been\n  corrected so that a response is not returned in the `getResponse` method of\n  these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867\n* Fixed an issue where transfer statistics were not being populated in the\n  RingBridge. https://github.com/guzzle/guzzle/issues/866\n\n\n## 5.0.0 - 2014-10-12\n\nAdding support for non-blocking responses and some minor API cleanup.\n\n### New Features\n\n* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.\n* Added a public API for creating a default HTTP adapter.\n* Updated the redirect plugin to be non-blocking so that redirects are sent\n  concurrently. Other plugins like this can now be updated to be non-blocking.\n* Added a \"progress\" event so that you can get upload and download progress\n  events.\n* Added `GuzzleHttp\\Pool` which implements FutureInterface and transfers\n  requests concurrently using a capped pool size as efficiently as possible.\n* Added `hasListeners()` to EmitterInterface.\n* Removed `GuzzleHttp\\ClientInterface::sendAll` and marked\n  `GuzzleHttp\\Client::sendAll` as deprecated (it's still there, just not the\n  recommended way).\n\n### Breaking changes\n\nThe breaking changes in this release are relatively minor. The biggest thing to\nlook out for is that request and response objects no longer implement fluent\ninterfaces.\n\n* Removed the fluent interfaces (i.e., `return $this`) from requests,\n  responses, `GuzzleHttp\\Collection`, `GuzzleHttp\\Url`,\n  `GuzzleHttp\\Query`, `GuzzleHttp\\Post\\PostBody`, and\n  `GuzzleHttp\\Cookie\\SetCookie`. This blog post provides a good outline of\n  why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.\n  This also makes the Guzzle message interfaces compatible with the current\n  PSR-7 message proposal.\n* Removed \"functions.php\", so that Guzzle is truly PSR-4 compliant. Except\n  for the HTTP request functions from function.php, these functions are now\n  implemented in `GuzzleHttp\\Utils` using camelCase. `GuzzleHttp\\json_decode`\n  moved to `GuzzleHttp\\Utils::jsonDecode`. `GuzzleHttp\\get_path` moved to\n  `GuzzleHttp\\Utils::getPath`. `GuzzleHttp\\set_path` moved to\n  `GuzzleHttp\\Utils::setPath`. `GuzzleHttp\\batch` should now be\n  `GuzzleHttp\\Pool::batch`, which returns an `objectStorage`. Using functions.php\n  caused problems for many users: they aren't PSR-4 compliant, require an\n  explicit include, and needed an if-guard to ensure that the functions are not\n  declared multiple times.\n* Rewrote adapter layer.\n    * Removing all classes from `GuzzleHttp\\Adapter`, these are now\n      implemented as callables that are stored in `GuzzleHttp\\Ring\\Client`.\n    * Removed the concept of \"parallel adapters\". Sending requests serially or\n      concurrently is now handled using a single adapter.\n    * Moved `GuzzleHttp\\Adapter\\Transaction` to `GuzzleHttp\\Transaction`. The\n      Transaction object now exposes the request, response, and client as public\n      properties. The getters and setters have been removed.\n* Removed the \"headers\" event. This event was only useful for changing the\n  body a response once the headers of the response were known. You can implement\n  a similar behavior in a number of ways. One example might be to use a\n  FnStream that has access to the transaction being sent. For example, when the\n  first byte is written, you could check if the response headers match your\n  expectations, and if so, change the actual stream body that is being\n  written to.\n* Removed the `asArray` parameter from\n  `GuzzleHttp\\Message\\MessageInterface::getHeader`. If you want to get a header\n  value as an array, then use the newly added `getHeaderAsArray()` method of\n  `MessageInterface`. This change makes the Guzzle interfaces compatible with\n  the PSR-7 interfaces.\n* `GuzzleHttp\\Message\\MessageFactory` no longer allows subclasses to add\n  custom request options using double-dispatch (this was an implementation\n  detail). Instead, you should now provide an associative array to the\n  constructor which is a mapping of the request option name mapping to a\n  function that applies the option value to a request.\n* Removed the concept of \"throwImmediately\" from exceptions and error events.\n  This control mechanism was used to stop a transfer of concurrent requests\n  from completing. This can now be handled by throwing the exception or by\n  cancelling a pool of requests or each outstanding future request individually.\n* Updated to \"GuzzleHttp\\Streams\" 3.0.\n    * `GuzzleHttp\\Stream\\StreamInterface::getContents()` no longer accepts a\n      `maxLen` parameter. This update makes the Guzzle streams project\n      compatible with the current PSR-7 proposal.\n    * `GuzzleHttp\\Stream\\Stream::__construct`,\n      `GuzzleHttp\\Stream\\Stream::factory`, and\n      `GuzzleHttp\\Stream\\Utils::create` no longer accept a size in the second\n      argument. They now accept an associative array of options, including the\n      \"size\" key and \"metadata\" key which can be used to provide custom metadata.\n\n\n## 4.2.2 - 2014-09-08\n\n* Fixed a memory leak in the CurlAdapter when reusing cURL handles.\n* No longer using `request_fulluri` in stream adapter proxies.\n* Relative redirects are now based on the last response, not the first response.\n\n## 4.2.1 - 2014-08-19\n\n* Ensuring that the StreamAdapter does not always add a Content-Type header\n* Adding automated github releases with a phar and zip\n\n## 4.2.0 - 2014-08-17\n\n* Now merging in default options using a case-insensitive comparison.\n  Closes https://github.com/guzzle/guzzle/issues/767\n* Added the ability to automatically decode `Content-Encoding` response bodies\n  using the `decode_content` request option. This is set to `true` by default\n  to decode the response body if it comes over the wire with a\n  `Content-Encoding`. Set this value to `false` to disable decoding the\n  response content, and pass a string to provide a request `Accept-Encoding`\n  header and turn on automatic response decoding. This feature now allows you\n  to pass an `Accept-Encoding` header in the headers of a request but still\n  disable automatic response decoding.\n  Closes https://github.com/guzzle/guzzle/issues/764\n* Added the ability to throw an exception immediately when transferring\n  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760\n* Updating guzzlehttp/streams dependency to ~2.1\n* No longer utilizing the now deprecated namespaced methods from the stream\n  package.\n\n## 4.1.8 - 2014-08-14\n\n* Fixed an issue in the CurlFactory that caused setting the `stream=false`\n  request option to throw an exception.\n  See: https://github.com/guzzle/guzzle/issues/769\n* TransactionIterator now calls rewind on the inner iterator.\n  See: https://github.com/guzzle/guzzle/pull/765\n* You can now set the `Content-Type` header to `multipart/form-data`\n  when creating POST requests to force multipart bodies.\n  See https://github.com/guzzle/guzzle/issues/768\n\n## 4.1.7 - 2014-08-07\n\n* Fixed an error in the HistoryPlugin that caused the same request and response\n  to be logged multiple times when an HTTP protocol error occurs.\n* Ensuring that cURL does not add a default Content-Type when no Content-Type\n  has been supplied by the user. This prevents the adapter layer from modifying\n  the request that is sent over the wire after any listeners may have already\n  put the request in a desired state (e.g., signed the request).\n* Throwing an exception when you attempt to send requests that have the\n  \"stream\" set to true in parallel using the MultiAdapter.\n* Only calling curl_multi_select when there are active cURL handles. This was\n  previously changed and caused performance problems on some systems due to PHP\n  always selecting until the maximum select timeout.\n* Fixed a bug where multipart/form-data POST fields were not correctly\n  aggregated (e.g., values with \"&\").\n\n## 4.1.6 - 2014-08-03\n\n* Added helper methods to make it easier to represent messages as strings,\n  including getting the start line and getting headers as a string.\n\n## 4.1.5 - 2014-08-02\n\n* Automatically retrying cURL \"Connection died, retrying a fresh connect\"\n  errors when possible.\n* cURL implementation cleanup\n* Allowing multiple event subscriber listeners to be registered per event by\n  passing an array of arrays of listener configuration.\n\n## 4.1.4 - 2014-07-22\n\n* Fixed a bug that caused multi-part POST requests with more than one field to\n  serialize incorrectly.\n* Paths can now be set to \"0\"\n* `ResponseInterface::xml` now accepts a `libxml_options` option and added a\n  missing default argument that was required when parsing XML response bodies.\n* A `save_to` stream is now created lazily, which means that files are not\n  created on disk unless a request succeeds.\n\n## 4.1.3 - 2014-07-15\n\n* Various fixes to multipart/form-data POST uploads\n* Wrapping function.php in an if-statement to ensure Guzzle can be used\n  globally and in a Composer install\n* Fixed an issue with generating and merging in events to an event array\n* POST headers are only applied before sending a request to allow you to change\n  the query aggregator used before uploading\n* Added much more robust query string parsing\n* Fixed various parsing and normalization issues with URLs\n* Fixing an issue where multi-valued headers were not being utilized correctly\n  in the StreamAdapter\n\n## 4.1.2 - 2014-06-18\n\n* Added support for sending payloads with GET requests\n\n## 4.1.1 - 2014-06-08\n\n* Fixed an issue related to using custom message factory options in subclasses\n* Fixed an issue with nested form fields in a multi-part POST\n* Fixed an issue with using the `json` request option for POST requests\n* Added `ToArrayInterface` to `GuzzleHttp\\Cookie\\CookieJar`\n\n## 4.1.0 - 2014-05-27\n\n* Added a `json` request option to easily serialize JSON payloads.\n* Added a `GuzzleHttp\\json_decode()` wrapper to safely parse JSON.\n* Added `setPort()` and `getPort()` to `GuzzleHttp\\Message\\RequestInterface`.\n* Added the ability to provide an emitter to a client in the client constructor.\n* Added the ability to persist a cookie session using $_SESSION.\n* Added a trait that can be used to add event listeners to an iterator.\n* Removed request method constants from RequestInterface.\n* Fixed warning when invalid request start-lines are received.\n* Updated MessageFactory to work with custom request option methods.\n* Updated cacert bundle to latest build.\n\n4.0.2 (2014-04-16)\n------------------\n\n* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)\n* Added the ability to set scalars as POST fields (#628)\n\n## 4.0.1 - 2014-04-04\n\n* The HTTP status code of a response is now set as the exception code of\n  RequestException objects.\n* 303 redirects will now correctly switch from POST to GET requests.\n* The default parallel adapter of a client now correctly uses the MultiAdapter.\n* HasDataTrait now initializes the internal data array as an empty array so\n  that the toArray() method always returns an array.\n\n## 4.0.0 - 2014-03-29\n\n* For information on changes and upgrading, see:\n  https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40\n* Added `GuzzleHttp\\batch()` as a convenience function for sending requests in\n  parallel without needing to write asynchronous code.\n* Restructured how events are added to `GuzzleHttp\\ClientInterface::sendAll()`.\n  You can now pass a callable or an array of associative arrays where each\n  associative array contains the \"fn\", \"priority\", and \"once\" keys.\n\n## 4.0.0.rc-2 - 2014-03-25\n\n* Removed `getConfig()` and `setConfig()` from clients to avoid confusion\n  around whether things like base_url, message_factory, etc. should be able to\n  be retrieved or modified.\n* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface\n* functions.php functions were renamed using snake_case to match PHP idioms\n* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and\n  `GUZZLE_CURL_SELECT_TIMEOUT` environment variables\n* Added the ability to specify custom `sendAll()` event priorities\n* Added the ability to specify custom stream context options to the stream\n  adapter.\n* Added a functions.php function for `get_path()` and `set_path()`\n* CurlAdapter and MultiAdapter now use a callable to generate curl resources\n* MockAdapter now properly reads a body and emits a `headers` event\n* Updated Url class to check if a scheme and host are set before adding \":\"\n  and \"//\". This allows empty Url (e.g., \"\") to be serialized as \"\".\n* Parsing invalid XML no longer emits warnings\n* Curl classes now properly throw AdapterExceptions\n* Various performance optimizations\n* Streams are created with the faster `Stream\\create()` function\n* Marked deprecation_proxy() as internal\n* Test server is now a collection of static methods on a class\n\n## 4.0.0-rc.1 - 2014-03-15\n\n* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40\n\n## 3.8.1 - 2014-01-28\n\n* Bug: Always using GET requests when redirecting from a 303 response\n* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in\n  `Guzzle\\Http\\ClientInterface::setSslVerification()`\n* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL\n* Bug: The body of a request can now be set to `\"0\"`\n* Sending PHP stream requests no longer forces `HTTP/1.0`\n* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of\n  each sub-exception\n* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than\n  clobbering everything).\n* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)\n* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.\n  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.\n* Now properly escaping the regular expression delimiter when matching Cookie domains.\n* Network access is now disabled when loading XML documents\n\n## 3.8.0 - 2013-12-05\n\n* Added the ability to define a POST name for a file\n* JSON response parsing now properly walks additionalProperties\n* cURL error code 18 is now retried automatically in the BackoffPlugin\n* Fixed a cURL error when URLs contain fragments\n* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were\n  CurlExceptions\n* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)\n* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`\n* Fixed a bug that was encountered when parsing empty header parameters\n* UriTemplate now has a `setRegex()` method to match the docs\n* The `debug` request parameter now checks if it is truthy rather than if it exists\n* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin\n* Added the ability to combine URLs using strict RFC 3986 compliance\n* Command objects can now return the validation errors encountered by the command\n* Various fixes to cache revalidation (#437 and 29797e5)\n* Various fixes to the AsyncPlugin\n* Cleaned up build scripts\n\n## 3.7.4 - 2013-10-02\n\n* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)\n* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp\n  (see https://github.com/aws/aws-sdk-php/issues/147)\n* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots\n* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)\n* Updated the bundled cacert.pem (#419)\n* OauthPlugin now supports adding authentication to headers or query string (#425)\n\n## 3.7.3 - 2013-09-08\n\n* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and\n  `CommandTransferException`.\n* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description\n* Schemas are only injected into response models when explicitly configured.\n* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of\n  an EntityBody.\n* Bug fix: ChunkedIterator can now properly chunk a \\Traversable as well as an \\Iterator.\n* Bug fix: FilterIterator now relies on `\\Iterator` instead of `\\Traversable`.\n* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()\n* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin\n* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests\n* Bug fix: Properly parsing headers that contain commas contained in quotes\n* Bug fix: mimetype guessing based on a filename is now case-insensitive\n\n## 3.7.2 - 2013-08-02\n\n* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander\n  See https://github.com/guzzle/guzzle/issues/371\n* Bug fix: Cookie domains are now matched correctly according to RFC 6265\n  See https://github.com/guzzle/guzzle/issues/377\n* Bug fix: GET parameters are now used when calculating an OAuth signature\n* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted\n* `Guzzle\\Common\\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched\n* `Guzzle\\Http\\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.\n  See https://github.com/guzzle/guzzle/issues/379\n* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See\n  https://github.com/guzzle/guzzle/pull/380\n* cURL multi cleanup and optimizations\n\n## 3.7.1 - 2013-07-05\n\n* Bug fix: Setting default options on a client now works\n* Bug fix: Setting options on HEAD requests now works. See #352\n* Bug fix: Moving stream factory before send event to before building the stream. See #353\n* Bug fix: Cookies no longer match on IP addresses per RFC 6265\n* Bug fix: Correctly parsing header parameters that are in `<>` and quotes\n* Added `cert` and `ssl_key` as request options\n* `Host` header can now diverge from the host part of a URL if the header is set manually\n* `Guzzle\\Service\\Command\\LocationVisitor\\Request\\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter\n* OAuth parameters are only added via the plugin if they aren't already set\n* Exceptions are now thrown when a URL cannot be parsed\n* Returning `false` if `Guzzle\\Http\\EntityBody::getContentMd5()` fails\n* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin\n\n## 3.7.0 - 2013-06-10\n\n* See UPGRADING.md for more information on how to upgrade.\n* Requests now support the ability to specify an array of $options when creating a request to more easily modify a\n  request. You can pass a 'request.options' configuration setting to a client to apply default request options to\n  every request created by a client (e.g. default query string variables, headers, curl options, etc.).\n* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\\Guzzle`.\n  See `Guzzle\\Http\\StaticClient::mount`.\n* Added `command.request_options` to `Guzzle\\Service\\Command\\AbstractCommand` to pass request options to requests\n      created by a command (e.g. custom headers, query string variables, timeout settings, etc.).\n* Stream size in `Guzzle\\Stream\\PhpStreamRequestFactory` will now be set if Content-Length is returned in the\n  headers of a response\n* Added `Guzzle\\Common\\Collection::setPath($path, $value)` to set a value into an array using a nested key\n  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)\n* ServiceBuilders now support storing and retrieving arbitrary data\n* CachePlugin can now purge all resources for a given URI\n* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource\n* CachePlugin now uses the Vary header to determine if a resource is a cache hit\n* `Guzzle\\Http\\Message\\Response` now implements `\\Serializable`\n* Added `Guzzle\\Cache\\CacheAdapterFactory::fromCache()` to more easily create cache adapters\n* `Guzzle\\Service\\ClientInterface::execute()` now accepts an array, single command, or Traversable\n* Fixed a bug in `Guzzle\\Http\\Message\\Header\\Link::addLink()`\n* Better handling of calculating the size of a stream in `Guzzle\\Stream\\Stream` using fstat() and caching the size\n* `Guzzle\\Common\\Exception\\ExceptionCollection` now creates a more readable exception message\n* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older\n  Symfony users can still use the old version of Monolog.\n* Fixing BC break: Added the implementation back in for `Guzzle\\Http\\Message\\AbstractMessage::getTokenizedHeader()`.\n  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.\n* Several performance improvements to `Guzzle\\Common\\Collection`\n* Added an `$options` argument to the end of the following methods of `Guzzle\\Http\\ClientInterface`:\n  createRequest, head, delete, put, patch, post, options, prepareRequest\n* Added an `$options` argument to the end of `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface::createRequest()`\n* Added an `applyOptions()` method to `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface`\n* Changed `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $body = null)` to\n  `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a\n  resource, string, or EntityBody into the $options parameter to specify the download location of the response.\n* Changed `Guzzle\\Common\\Collection::__construct($data)` to no longer accepts a null value for `$data` but a\n  default `array()`\n* Added `Guzzle\\Stream\\StreamInterface::isRepeatable`\n* Removed `Guzzle\\Http\\ClientInterface::setDefaultHeaders(). Use\n  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or\n  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.\n* Removed `Guzzle\\Http\\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.\n* Removed `Guzzle\\Http\\ClientInterface::expandTemplate()`\n* Removed `Guzzle\\Http\\ClientInterface::setRequestFactory()`\n* Removed `Guzzle\\Http\\ClientInterface::getCurlMulti()`\n* Removed `Guzzle\\Http\\Message\\RequestInterface::canCache`\n* Removed `Guzzle\\Http\\Message\\RequestInterface::setIsRedirect`\n* Removed `Guzzle\\Http\\Message\\RequestInterface::isRedirect`\n* Made `Guzzle\\Http\\Client::expandTemplate` and `getUriTemplate` protected methods.\n* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting\n  `Guzzle\\Common\\Version::$emitWarnings` to true.\n* Marked `Guzzle\\Http\\Message\\Request::isResponseBodyRepeatable()` as deprecated. Use\n      `$request->getResponseBody()->isRepeatable()` instead.\n* Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use\n  `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n* Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use\n  `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n* Marked `Guzzle\\Http\\Message\\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.\n* Marked `Guzzle\\Http\\Message\\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.\n* Marked `Guzzle\\Cache\\CacheAdapterFactory::factory()` as deprecated\n* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.\n  These will work through Guzzle 4.0\n* Marked 'request.params' for `Guzzle\\Http\\Client` as deprecated. Use [request.options][params].\n* Marked `Guzzle\\Service\\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\\Service\\Client.\n* Marked `Guzzle\\Service\\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.\n* Marked `Guzzle\\Service\\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.\n* Marked `Guzzle\\Parser\\Url\\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.\n* Marked `Guzzle\\Common\\Collection::inject()` as deprecated.\n* Marked `Guzzle\\Plugin\\CurlAuth\\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`\n* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a\n  CacheStorageInterface. These two objects and interface will be removed in a future version.\n* Always setting X-cache headers on cached responses\n* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin\n* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface\n  $request, Response $response);`\n* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`\n* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`\n* Added `CacheStorageInterface::purge($url)`\n* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin\n  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,\n  CanCacheStrategyInterface $canCache = null)`\n* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`\n\n## 3.6.0 - 2013-05-29\n\n* ServiceDescription now implements ToArrayInterface\n* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters\n* Guzzle can now correctly parse incomplete URLs\n* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.\n* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution\n* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().\n* Specific header implementations can be created for complex headers. When a message creates a header, it uses a\n  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and\n  CacheControl header implementation.\n* Removed from interface: Guzzle\\Http\\ClientInterface::setUriTemplate\n* Removed from interface: Guzzle\\Http\\ClientInterface::setCurlMulti()\n* Removed Guzzle\\Http\\Message\\Request::receivedRequestHeader() and implemented this functionality in\n  Guzzle\\Http\\Curl\\RequestMediator\n* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.\n* Removed the optional $tryChunkedTransfer option from Guzzle\\Http\\Message\\EntityEnclosingRequestInterface\n* Removed the $asObjects argument from Guzzle\\Http\\Message\\MessageInterface::getHeaders()\n* Removed Guzzle\\Parser\\ParserRegister::get(). Use getParser()\n* Removed Guzzle\\Parser\\ParserRegister::set(). Use registerParser().\n* All response header helper functions return a string rather than mixing Header objects and strings inconsistently\n* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle\n  directly via interfaces\n* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist\n  but are a no-op until removed.\n* Most classes that used to require a `Guzzle\\Service\\Command\\CommandInterface` typehint now request a\n  `Guzzle\\Service\\Command\\ArrayCommandInterface`.\n* Added `Guzzle\\Http\\Message\\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response\n  on a request while the request is still being transferred\n* The ability to case-insensitively search for header values\n* Guzzle\\Http\\Message\\Header::hasExactHeader\n* Guzzle\\Http\\Message\\Header::raw. Use getAll()\n* Deprecated cache control specific methods on Guzzle\\Http\\Message\\AbstractMessage. Use the CacheControl header object\n  instead.\n* `Guzzle\\Service\\Command\\CommandInterface` now extends from ToArrayInterface and ArrayAccess\n* Added the ability to cast Model objects to a string to view debug information.\n\n## 3.5.0 - 2013-05-13\n\n* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times\n* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove\n  itself from the EventDispatcher)\n* Bug: `Guzzle\\Log\\MessageFormatter` now properly writes \"total_time\" and \"connect_time\" values\n* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too\n* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a\n  non-existent key\n* Bug: All __call() method arguments are now required (helps with mocking frameworks)\n* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference\n  to help with refcount based garbage collection of resources created by sending a request\n* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.\n* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the\n  HistoryPlugin for a history.\n* Added a `responseBody` alias for the `response_body` location\n* Refactored internals to no longer rely on Response::getRequest()\n* HistoryPlugin can now be cast to a string\n* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests\n  and responses that are sent over the wire\n* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects\n\n## 3.4.3 - 2013-04-30\n\n* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response\n* Added a check to re-extract the temp cacert bundle from the phar before sending each request\n\n## 3.4.2 - 2013-04-29\n\n* Bug fix: Stream objects now work correctly with \"a\" and \"a+\" modes\n* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present\n* Bug fix: AsyncPlugin no longer forces HEAD requests\n* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter\n* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails\n* Setting a response on a request will write to the custom request body from the response body if one is specified\n* LogPlugin now writes to php://output when STDERR is undefined\n* Added the ability to set multiple POST files for the same key in a single call\n* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default\n* Added the ability to queue CurlExceptions to the MockPlugin\n* Cleaned up how manual responses are queued on requests (removed \"queued_response\" and now using request.before_send)\n* Configuration loading now allows remote files\n\n## 3.4.1 - 2013-04-16\n\n* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti\n  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.\n* Exceptions are now properly grouped when sending requests in parallel\n* Redirects are now properly aggregated when a multi transaction fails\n* Redirects now set the response on the original object even in the event of a failure\n* Bug fix: Model names are now properly set even when using $refs\n* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax\n* Added support for oauth_callback in OAuth signatures\n* Added support for oauth_verifier in OAuth signatures\n* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection\n\n## 3.4.0 - 2013-04-11\n\n* Bug fix: URLs are now resolved correctly based on https://datatracker.ietf.org/doc/html/rfc3986#section-5.2. #289\n* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289\n* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263\n* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.\n* Bug fix: Added `number` type to service descriptions.\n* Bug fix: empty parameters are removed from an OAuth signature\n* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header\n* Bug fix: Fixed \"array to string\" error when validating a union of types in a service description\n* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream\n* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.\n* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.\n* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.\n* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if\n  the Content-Type can be determined based on the entity body or the path of the request.\n* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.\n* Added support for a PSR-3 LogAdapter.\n* Added a `command.after_prepare` event\n* Added `oauth_callback` parameter to the OauthPlugin\n* Added the ability to create a custom stream class when using a stream factory\n* Added a CachingEntityBody decorator\n* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.\n* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.\n* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies\n* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This\n  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use\n  POST fields or files (the latter is only used when emulating a form POST in the browser).\n* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest\n\n## 3.3.1 - 2013-03-10\n\n* Added the ability to create PHP streaming responses from HTTP requests\n* Bug fix: Running any filters when parsing response headers with service descriptions\n* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing\n* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across\n  response location visitors.\n* Bug fix: Removed the possibility of creating configuration files with circular dependencies\n* RequestFactory::create() now uses the key of a POST file when setting the POST file name\n* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set\n\n## 3.3.0 - 2013-03-03\n\n* A large number of performance optimizations have been made\n* Bug fix: Added 'wb' as a valid write mode for streams\n* Bug fix: `Guzzle\\Http\\Message\\Response::json()` now allows scalar values to be returned\n* Bug fix: Fixed bug in `Guzzle\\Http\\Message\\Response` where wrapping quotes were stripped from `getEtag()`\n* BC: Removed `Guzzle\\Http\\Utils` class\n* BC: Setting a service description on a client will no longer modify the client's command factories.\n* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using\n  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'\n* BC: `Guzzle\\Stream\\Stream::getWrapper()` and `Guzzle\\Stream\\Stream::getSteamType()` are no longer converted to\n  lowercase\n* Operation parameter objects are now lazy loaded internally\n* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses\n* Added support for instantiating responseType=class responseClass classes. Classes must implement\n  `Guzzle\\Service\\Command\\ResponseClassInterface`\n* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These\n  additional properties also support locations and can be used to parse JSON responses where the outermost part of the\n  JSON is an array\n* Added support for nested renaming of JSON models (rename sentAs to name)\n* CachePlugin\n    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error\n    * Debug headers can now added to cached response in the CachePlugin\n\n## 3.2.0 - 2013-02-14\n\n* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.\n* URLs with no path no longer contain a \"/\" by default\n* Guzzle\\Http\\QueryString does no longer manages the leading \"?\". This is now handled in Guzzle\\Http\\Url.\n* BadResponseException no longer includes the full request and response message\n* Adding setData() to Guzzle\\Service\\Description\\ServiceDescriptionInterface\n* Adding getResponseBody() to Guzzle\\Http\\Message\\RequestInterface\n* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription\n* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list\n* xmlEncoding can now be customized for the XML declaration of a XML service description operation\n* Guzzle\\Http\\QueryString now uses Guzzle\\Http\\QueryAggregator\\QueryAggregatorInterface objects to add custom value\n  aggregation and no longer uses callbacks\n* The URL encoding implementation of Guzzle\\Http\\QueryString can now be customized\n* Bug fix: Filters were not always invoked for array service description parameters\n* Bug fix: Redirects now use a target response body rather than a temporary response body\n* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded\n* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives\n\n## 3.1.2 - 2013-01-27\n\n* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the\n  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.\n* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent\n* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)\n* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()\n* Setting default headers on a client after setting the user-agent will not erase the user-agent setting\n\n## 3.1.1 - 2013-01-20\n\n* Adding wildcard support to Guzzle\\Common\\Collection::getPath()\n* Adding alias support to ServiceBuilder configs\n* Adding Guzzle\\Service\\Resource\\CompositeResourceIteratorFactory and cleaning up factory interface\n\n## 3.1.0 - 2013-01-12\n\n* BC: CurlException now extends from RequestException rather than BadResponseException\n* BC: Renamed Guzzle\\Plugin\\Cache\\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()\n* Added getData to ServiceDescriptionInterface\n* Added context array to RequestInterface::setState()\n* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\\Http\n* Bug: Adding required content-type when JSON request visitor adds JSON to a command\n* Bug: Fixing the serialization of a service description with custom data\n* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing\n  an array of successful and failed responses\n* Moved getPath from Guzzle\\Service\\Resource\\Model to Guzzle\\Common\\Collection\n* Added Guzzle\\Http\\IoEmittingEntityBody\n* Moved command filtration from validators to location visitors\n* Added `extends` attributes to service description parameters\n* Added getModels to ServiceDescriptionInterface\n\n## 3.0.7 - 2012-12-19\n\n* Fixing phar detection when forcing a cacert to system if null or true\n* Allowing filename to be passed to `Guzzle\\Http\\Message\\Request::setResponseBody()`\n* Cleaning up `Guzzle\\Common\\Collection::inject` method\n* Adding a response_body location to service descriptions\n\n## 3.0.6 - 2012-12-09\n\n* CurlMulti performance improvements\n* Adding setErrorResponses() to Operation\n* composer.json tweaks\n\n## 3.0.5 - 2012-11-18\n\n* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin\n* Bug: Response body can now be a string containing \"0\"\n* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert\n* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs\n* Added support for XML attributes in service description responses\n* DefaultRequestSerializer now supports array URI parameter values for URI template expansion\n* Added better mimetype guessing to requests and post files\n\n## 3.0.4 - 2012-11-11\n\n* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value\n* Bug: Cookies can now be added that have a name, domain, or value set to \"0\"\n* Bug: Using the system cacert bundle when using the Phar\n* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures\n* Enhanced cookie jar de-duplication\n* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added\n* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies\n* Added the ability to create any sort of hash for a stream rather than just an MD5 hash\n\n## 3.0.3 - 2012-11-04\n\n* Implementing redirects in PHP rather than cURL\n* Added PECL URI template extension and using as default parser if available\n* Bug: Fixed Content-Length parsing of Response factory\n* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.\n* Adding ToArrayInterface throughout library\n* Fixing OauthPlugin to create unique nonce values per request\n\n## 3.0.2 - 2012-10-25\n\n* Magic methods are enabled by default on clients\n* Magic methods return the result of a command\n* Service clients no longer require a base_url option in the factory\n* Bug: Fixed an issue with URI templates where null template variables were being expanded\n\n## 3.0.1 - 2012-10-22\n\n* Models can now be used like regular collection objects by calling filter, map, etc.\n* Models no longer require a Parameter structure or initial data in the constructor\n* Added a custom AppendIterator to get around a PHP bug with the `\\AppendIterator`\n\n## 3.0.0 - 2012-10-15\n\n* Rewrote service description format to be based on Swagger\n    * Now based on JSON schema\n    * Added nested input structures and nested response models\n    * Support for JSON and XML input and output models\n    * Renamed `commands` to `operations`\n    * Removed dot class notation\n    * Removed custom types\n* Broke the project into smaller top-level namespaces to be more component friendly\n* Removed support for XML configs and descriptions. Use arrays or JSON files.\n* Removed the Validation component and Inspector\n* Moved all cookie code to Guzzle\\Plugin\\Cookie\n* Magic methods on a Guzzle\\Service\\Client now return the command un-executed.\n* Calling getResult() or getResponse() on a command will lazily execute the command if needed.\n* Now shipping with cURL's CA certs and using it by default\n* Added previousResponse() method to response objects\n* No longer sending Accept and Accept-Encoding headers on every request\n* Only sending an Expect header by default when a payload is greater than 1MB\n* Added/moved client options:\n    * curl.blacklist to curl.option.blacklist\n    * Added ssl.certificate_authority\n* Added a Guzzle\\Iterator component\n* Moved plugins from Guzzle\\Http\\Plugin to Guzzle\\Plugin\n* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)\n* Added a more robust caching plugin\n* Added setBody to response objects\n* Updating LogPlugin to use a more flexible MessageFormatter\n* Added a completely revamped build process\n* Cleaning up Collection class and removing default values from the get method\n* Fixed ZF2 cache adapters\n\n## 2.8.8 - 2012-10-15\n\n* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did\n\n## 2.8.7 - 2012-09-30\n\n* Bug: Fixed config file aliases for JSON includes\n* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests\n* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload\n* Bug: Hardening request and response parsing to account for missing parts\n* Bug: Fixed PEAR packaging\n* Bug: Fixed Request::getInfo\n* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail\n* Adding the ability for the namespace Iterator factory to look in multiple directories\n* Added more getters/setters/removers from service descriptions\n* Added the ability to remove POST fields from OAuth signatures\n* OAuth plugin now supports 2-legged OAuth\n\n## 2.8.6 - 2012-09-05\n\n* Added the ability to modify and build service descriptions\n* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command\n* Added a `json` parameter location\n* Now allowing dot notation for classes in the CacheAdapterFactory\n* Using the union of two arrays rather than an array_merge when extending service builder services and service params\n* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references\n  in service builder config files.\n* Services defined in two different config files that include one another will by default replace the previously\n  defined service, but you can now create services that extend themselves and merge their settings over the previous\n* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like\n  '_default' with a default JSON configuration file.\n\n## 2.8.5 - 2012-08-29\n\n* Bug: Suppressed empty arrays from URI templates\n* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching\n* Added support for HTTP responses that do not contain a reason phrase in the start-line\n* AbstractCommand commands are now invokable\n* Added a way to get the data used when signing an Oauth request before a request is sent\n\n## 2.8.4 - 2012-08-15\n\n* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin\n* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.\n* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\\Common\\Stream\n* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream\n* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())\n* Added additional response status codes\n* Removed SSL information from the default User-Agent header\n* DELETE requests can now send an entity body\n* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries\n* Added the ability of the MockPlugin to consume mocked request bodies\n* LogPlugin now exposes request and response objects in the extras array\n\n## 2.8.3 - 2012-07-30\n\n* Bug: Fixed a case where empty POST requests were sent as GET requests\n* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body\n* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new\n* Added multiple inheritance to service description commands\n* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`\n* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything\n* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles\n\n## 2.8.2 - 2012-07-24\n\n* Bug: Query string values set to 0 are no longer dropped from the query string\n* Bug: A Collection object is no longer created each time a call is made to `Guzzle\\Service\\Command\\AbstractCommand::getRequestHeaders()`\n* Bug: `+` is now treated as an encoded space when parsing query strings\n* QueryString and Collection performance improvements\n* Allowing dot notation for class paths in filters attribute of a service descriptions\n\n## 2.8.1 - 2012-07-16\n\n* Loosening Event Dispatcher dependency\n* POST redirects can now be customized using CURLOPT_POSTREDIR\n\n## 2.8.0 - 2012-07-15\n\n* BC: Guzzle\\Http\\Query\n    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)\n    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()\n    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)\n    * Changed the aggregation functions of QueryString to be static methods\n    * Can now use fromString() with querystrings that have a leading ?\n* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters\n* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body\n* Cookies are no longer URL decoded by default\n* Bug: URI template variables set to null are no longer expanded\n\n## 2.7.2 - 2012-07-02\n\n* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\\Http\\Parser to Guzzle\\Parser.\n* BC: Removing Guzzle\\Common\\Batch\\Batch::count() and replacing it with isEmpty()\n* CachePlugin now allows for a custom request parameter function to check if a request can be cached\n* Bug fix: CachePlugin now only caches GET and HEAD requests by default\n* Bug fix: Using header glue when transferring headers over the wire\n* Allowing deeply nested arrays for composite variables in URI templates\n* Batch divisors can now return iterators or arrays\n\n## 2.7.1 - 2012-06-26\n\n* Minor patch to update version number in UA string\n* Updating build process\n\n## 2.7.0 - 2012-06-25\n\n* BC: Inflection classes moved to Guzzle\\Inflection. No longer static methods. Can now inject custom inflectors into classes.\n* BC: Removed magic setX methods from commands\n* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method\n* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.\n* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)\n* Guzzle\\Service\\Resource\\ResourceIteratorApplyBatched now internally uses the Guzzle\\Common\\Batch namespace\n* Added Guzzle\\Service\\Plugin namespace and a PluginCollectionPlugin\n* Added the ability to set POST fields and files in a service description\n* Guzzle\\Http\\EntityBody::factory() now accepts objects with a __toString() method\n* Adding a command.before_prepare event to clients\n* Added BatchClosureTransfer and BatchClosureDivisor\n* BatchTransferException now includes references to the batch divisor and transfer strategies\n* Fixed some tests so that they pass more reliably\n* Added Guzzle\\Common\\Log\\ArrayLogAdapter\n\n## 2.6.6 - 2012-06-10\n\n* BC: Removing Guzzle\\Http\\Plugin\\BatchQueuePlugin\n* BC: Removing Guzzle\\Service\\Command\\CommandSet\n* Adding generic batching system (replaces the batch queue plugin and command set)\n* Updating ZF cache and log adapters and now using ZF's composer repository\n* Bug: Setting the name of each ApiParam when creating through an ApiCommand\n* Adding result_type, result_doc, deprecated, and doc_url to service descriptions\n* Bug: Changed the default cookie header casing back to 'Cookie'\n\n## 2.6.5 - 2012-06-03\n\n* BC: Renaming Guzzle\\Http\\Message\\RequestInterface::getResourceUri() to getResource()\n* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from\n* BC: Guzzle\\Http\\Cookie is now used to manage Set-Cookie data, not Cookie data\n* BC: Renaming methods in the CookieJarInterface\n* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations\n* Making the default glue for HTTP headers ';' instead of ','\n* Adding a removeValue to Guzzle\\Http\\Message\\Header\n* Adding getCookies() to request interface.\n* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()\n\n## 2.6.4 - 2012-05-30\n\n* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.\n* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand\n* Bug: Fixing magic method command calls on clients\n* Bug: Email constraint only validates strings\n* Bug: Aggregate POST fields when POST files are present in curl handle\n* Bug: Fixing default User-Agent header\n* Bug: Only appending or prepending parameters in commands if they are specified\n* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes\n* Allowing the use of dot notation for class namespaces when using instance_of constraint\n* Added any_match validation constraint\n* Added an AsyncPlugin\n* Passing request object to the calculateWait method of the ExponentialBackoffPlugin\n* Allowing the result of a command object to be changed\n* Parsing location and type sub values when instantiating a service description rather than over and over at runtime\n\n## 2.6.3 - 2012-05-23\n\n* [BC] Guzzle\\Common\\FromConfigInterface no longer requires any config options.\n* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.\n* You can now use an array of data when creating PUT request bodies in the request factory.\n* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.\n* [Http] Adding support for Content-Type in multipart POST uploads per upload\n* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])\n* Adding more POST data operations for easier manipulation of POST data.\n* You can now set empty POST fields.\n* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.\n* Split the Guzzle\\Service\\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.\n* CS updates\n\n## 2.6.2 - 2012-05-19\n\n* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.\n\n## 2.6.1 - 2012-05-19\n\n* [BC] Removing 'path' support in service descriptions.  Use 'uri'.\n* [BC] Guzzle\\Service\\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.\n* [BC] Removing Guzzle\\Common\\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.\n* [BC] Removing Guzzle\\Common\\XmlElement.\n* All commands, both dynamic and concrete, have ApiCommand objects.\n* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.\n* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.\n* Making the method signature of Guzzle\\Service\\Builder\\ServiceBuilder::factory more flexible.\n\n## 2.6.0 - 2012-05-15\n\n* [BC] Moving Guzzle\\Service\\Builder to Guzzle\\Service\\Builder\\ServiceBuilder\n* [BC] Executing a Command returns the result of the command rather than the command\n* [BC] Moving all HTTP parsing logic to Guzzle\\Http\\Parsers. Allows for faster C implementations if needed.\n* [BC] Changing the Guzzle\\Http\\Message\\Response::setProtocol() method to accept a protocol and version in separate args.\n* [BC] Moving ResourceIterator* to Guzzle\\Service\\Resource\n* [BC] Completely refactored ResourceIterators to iterate over a cloned command object\n* [BC] Moved Guzzle\\Http\\UriTemplate to Guzzle\\Http\\Parser\\UriTemplate\\UriTemplate\n* [BC] Guzzle\\Guzzle is now deprecated\n* Moving Guzzle\\Common\\Guzzle::inject to Guzzle\\Common\\Collection::inject\n* Adding Guzzle\\Version class to give version information about Guzzle\n* Adding Guzzle\\Http\\Utils class to provide getDefaultUserAgent() and getHttpDate()\n* Adding Guzzle\\Curl\\CurlVersion to manage caching curl_version() data\n* ServiceDescription and ServiceBuilder are now cacheable using similar configs\n* Changing the format of XML and JSON service builder configs.  Backwards compatible.\n* Cleaned up Cookie parsing\n* Trimming the default Guzzle User-Agent header\n* Adding a setOnComplete() method to Commands that is called when a command completes\n* Keeping track of requests that were mocked in the MockPlugin\n* Fixed a caching bug in the CacheAdapterFactory\n* Inspector objects can be injected into a Command object\n* Refactoring a lot of code and tests to be case insensitive when dealing with headers\n* Adding Guzzle\\Http\\Message\\HeaderComparison for easy comparison of HTTP headers using a DSL\n* Adding the ability to set global option overrides to service builder configs\n* Adding the ability to include other service builder config files from within XML and JSON files\n* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.\n\n## 2.5.0 - 2012-05-08\n\n* Major performance improvements\n* [BC] Simplifying Guzzle\\Common\\Collection.  Please check to see if you are using features that are now deprecated.\n* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.\n* [BC] No longer supporting \"{{ }}\" for injecting into command or UriTemplates.  Use \"{}\"\n* Added the ability to passed parameters to all requests created by a client\n* Added callback functionality to the ExponentialBackoffPlugin\n* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.\n* Rewinding request stream bodies when retrying requests\n* Exception is thrown when JSON response body cannot be decoded\n* Added configurable magic method calls to clients and commands.  This is off by default.\n* Fixed a defect that added a hash to every parsed URL part\n* Fixed duplicate none generation for OauthPlugin.\n* Emitting an event each time a client is generated by a ServiceBuilder\n* Using an ApiParams object instead of a Collection for parameters of an ApiCommand\n* cache.* request parameters should be renamed to params.cache.*\n* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.\n* Added the ability to disable type validation of service descriptions\n* ServiceDescriptions and ServiceBuilders are now Serializable\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2011 Michael Dowling <mtdowling@gmail.com>\nCopyright (c) 2012 Jeremy Lindblom <jeremeamia@gmail.com>\nCopyright (c) 2014 Graham Campbell <hello@gjcampbell.co.uk>\nCopyright (c) 2015 Márk Sági-Kazár <mark.sagikazar@gmail.com>\nCopyright (c) 2015 Tobias Schultze <webmaster@tubo-world.de>\nCopyright (c) 2016 Tobias Nyholm <tobias.nyholm@gmail.com>\nCopyright (c) 2016 George Mponos <gmponos@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/README.md",
    "content": "![Guzzle](.github/logo.png?raw=true)\n\n# Guzzle, PHP HTTP client\n\n[![Latest Version](https://img.shields.io/github/release/guzzle/guzzle.svg?style=flat-square)](https://github.com/guzzle/guzzle/releases)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/guzzle/guzzle/ci.yml?label=ci%20build&style=flat-square)](https://github.com/guzzle/guzzle/actions?query=workflow%3ACI)\n[![Total Downloads](https://img.shields.io/packagist/dt/guzzlehttp/guzzle.svg?style=flat-square)](https://packagist.org/packages/guzzlehttp/guzzle)\n\nGuzzle is a PHP HTTP client that makes it easy to send HTTP requests and\ntrivial to integrate with web services.\n\n- Simple interface for building query strings, POST requests, streaming large\n  uploads, streaming large downloads, using HTTP cookies, uploading JSON data,\n  etc...\n- Can send both synchronous and asynchronous requests using the same interface.\n- Uses PSR-7 interfaces for requests, responses, and streams. This allows you\n  to utilize other PSR-7 compatible libraries with Guzzle.\n- Supports PSR-18 allowing interoperability between other PSR-18 HTTP Clients.\n- Abstracts away the underlying HTTP transport, allowing you to write\n  environment and transport agnostic code; i.e., no hard dependency on cURL,\n  PHP streams, sockets, or non-blocking event loops.\n- Middleware system allows you to augment and compose client behavior.\n\n```php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');\n\necho $response->getStatusCode(); // 200\necho $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'\necho $response->getBody(); // '{\"id\": 1420053, \"name\": \"guzzle\", ...}'\n\n// Send an asynchronous request.\n$request = new \\GuzzleHttp\\Psr7\\Request('GET', 'http://httpbin.org');\n$promise = $client->sendAsync($request)->then(function ($response) {\n    echo 'I completed! ' . $response->getBody();\n});\n\n$promise->wait();\n```\n\n## Help and docs\n\nWe use GitHub issues only to discuss bugs and new features. For support please refer to:\n\n- [Documentation](https://docs.guzzlephp.org)\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/guzzle)\n- [#guzzle](https://app.slack.com/client/T0D2S9JCT/CE6UAAKL4) channel on [PHP-HTTP Slack](https://slack.httplug.io/)\n- [Gitter](https://gitter.im/guzzle/guzzle)\n\n\n## Installing Guzzle\n\nThe recommended way to install Guzzle is through\n[Composer](https://getcomposer.org/).\n\n```bash\ncomposer require guzzlehttp/guzzle\n```\n\n\n## Version Guidance\n\n| Version | Status              | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |\n|---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------|\n| 3.x     | EOL (2016-10-31)    | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |\n| 4.x     | EOL (2016-10-31)    | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |\n| 5.x     | EOL (2019-10-31)    | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |\n| 6.x     | EOL (2023-10-31)    | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |\n| 7.x     | Latest              | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.5 |\n\n[guzzle-3-repo]: https://github.com/guzzle/guzzle3\n[guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x\n[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3\n[guzzle-6-repo]: https://github.com/guzzle/guzzle/tree/6.5\n[guzzle-7-repo]: https://github.com/guzzle/guzzle\n[guzzle-3-docs]: https://guzzle3.readthedocs.io/\n[guzzle-5-docs]: https://docs.guzzlephp.org/en/5.3/\n[guzzle-6-docs]: https://docs.guzzlephp.org/en/6.5/\n[guzzle-7-docs]: https://docs.guzzlephp.org/en/latest/\n\n\n## Security\n\nIf you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/guzzle/security/policy) for more information.\n\n## License\n\nGuzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-guzzle?utm_source=packagist-guzzlehttp-guzzle&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/UPGRADING.md",
    "content": "Guzzle Upgrade Guide\n====================\n\n6.0 to 7.0\n----------\n\nIn order to take advantage of the new features of PHP, Guzzle dropped the support\nof PHP 5. The minimum supported PHP version is now PHP 7.2. Type hints and return\ntypes for functions and methods have been added wherever possible. \n\nPlease make sure:\n- You are calling a function or a method with the correct type.\n- If you extend a class of Guzzle; update all signatures on methods you override.\n\n#### Other backwards compatibility breaking changes\n\n- Class `GuzzleHttp\\UriTemplate` is removed.\n- Class `GuzzleHttp\\Exception\\SeekException` is removed.\n- Classes `GuzzleHttp\\Exception\\BadResponseException`, `GuzzleHttp\\Exception\\ClientException`, \n  `GuzzleHttp\\Exception\\ServerException` can no longer be initialized with an empty\n  Response as argument.\n- Class `GuzzleHttp\\Exception\\ConnectException` now extends `GuzzleHttp\\Exception\\TransferException`\n  instead of `GuzzleHttp\\Exception\\RequestException`.\n- Function `GuzzleHttp\\Exception\\ConnectException::getResponse()` is removed.\n- Function `GuzzleHttp\\Exception\\ConnectException::hasResponse()` is removed.\n- Constant `GuzzleHttp\\ClientInterface::VERSION` is removed. Added `GuzzleHttp\\ClientInterface::MAJOR_VERSION` instead.\n- Function `GuzzleHttp\\Exception\\RequestException::getResponseBodySummary` is removed.\n  Use `\\GuzzleHttp\\Psr7\\get_message_body_summary` as an alternative.\n- Function `GuzzleHttp\\Cookie\\CookieJar::getCookieValue` is removed.\n- Request option `exceptions` is removed. Please use `http_errors`.\n- Request option `save_to` is removed. Please use `sink`.\n- Pool option `pool_size` is removed. Please use `concurrency`.\n- We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility.\n- The `get`, `head`, `put`, `post`, `patch`, `delete`, `getAsync`, `headAsync`, `putAsync`, `postAsync`, `patchAsync`, and `deleteAsync` methods are now implemented as genuine methods on `GuzzleHttp\\Client`, with strong typing. The original `__call` implementation remains unchanged for now, for maximum backwards compatibility, but won't be invoked under normal operation.\n- The `log` middleware will log the errors with level `error` instead of `notice` \n- Support for international domain names (IDN) is now disabled by default, and enabling it requires installing ext-intl, linked against a modern version of the C library (ICU 4.6 or higher).\n\n#### Native functions calls\n\nAll internal native functions calls of Guzzle are now prefixed with a slash. This\nchange makes it impossible for method overloading by other libraries or applications.\nExample:\n\n```php\n// Before:\ncurl_version();\n\n// After:\n\\curl_version();\n```\n\nFor the full diff you can check [here](https://github.com/guzzle/guzzle/compare/6.5.4..master).\n\n5.0 to 6.0\n----------\n\nGuzzle now uses [PSR-7](https://www.php-fig.org/psr/psr-7/) for HTTP messages.\nDue to the fact that these messages are immutable, this prompted a refactoring\nof Guzzle to use a middleware based system rather than an event system. Any\nHTTP message interaction (e.g., `GuzzleHttp\\Message\\Request`) need to be\nupdated to work with the new immutable PSR-7 request and response objects. Any\nevent listeners or subscribers need to be updated to become middleware\nfunctions that wrap handlers (or are injected into a\n`GuzzleHttp\\HandlerStack`).\n\n- Removed `GuzzleHttp\\BatchResults`\n- Removed `GuzzleHttp\\Collection`\n- Removed `GuzzleHttp\\HasDataTrait`\n- Removed `GuzzleHttp\\ToArrayInterface`\n- The `guzzlehttp/streams` dependency has been removed. Stream functionality\n  is now present in the `GuzzleHttp\\Psr7` namespace provided by the\n  `guzzlehttp/psr7` package.\n- Guzzle no longer uses ReactPHP promises and now uses the\n  `guzzlehttp/promises` library. We use a custom promise library for three\n  significant reasons:\n  1. React promises (at the time of writing this) are recursive. Promise\n     chaining and promise resolution will eventually blow the stack. Guzzle\n     promises are not recursive as they use a sort of trampolining technique.\n     Note: there has been movement in the React project to modify promises to\n     no longer utilize recursion.\n  2. Guzzle needs to have the ability to synchronously block on a promise to\n     wait for a result. Guzzle promises allows this functionality (and does\n     not require the use of recursion).\n  3. Because we need to be able to wait on a result, doing so using React\n     promises requires wrapping react promises with RingPHP futures. This\n     overhead is no longer needed, reducing stack sizes, reducing complexity,\n     and improving performance.\n- `GuzzleHttp\\Mimetypes` has been moved to a function in\n  `GuzzleHttp\\Psr7\\mimetype_from_extension` and\n  `GuzzleHttp\\Psr7\\mimetype_from_filename`.\n- `GuzzleHttp\\Query` and `GuzzleHttp\\QueryParser` have been removed. Query\n  strings must now be passed into request objects as strings, or provided to\n  the `query` request option when creating requests with clients. The `query`\n  option uses PHP's `http_build_query` to convert an array to a string. If you\n  need a different serialization technique, you will need to pass the query\n  string in as a string. There are a couple helper functions that will make\n  working with query strings easier: `GuzzleHttp\\Psr7\\parse_query` and\n  `GuzzleHttp\\Psr7\\build_query`.\n- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware\n  system based on PSR-7, using RingPHP and it's middleware system as well adds\n  more complexity than the benefits it provides. All HTTP handlers that were\n  present in RingPHP have been modified to work directly with PSR-7 messages\n  and placed in the `GuzzleHttp\\Handler` namespace. This significantly reduces\n  complexity in Guzzle, removes a dependency, and improves performance. RingPHP\n  will be maintained for Guzzle 5 support, but will no longer be a part of\n  Guzzle 6.\n- As Guzzle now uses a middleware based systems the event system and RingPHP\n  integration has been removed. Note: while the event system has been removed,\n  it is possible to add your own type of event system that is powered by the\n  middleware system.\n  - Removed the `Event` namespace.\n  - Removed the `Subscriber` namespace.\n  - Removed `Transaction` class\n  - Removed `RequestFsm`\n  - Removed `RingBridge`\n  - `GuzzleHttp\\Subscriber\\Cookie` is now provided by\n    `GuzzleHttp\\Middleware::cookies`\n  - `GuzzleHttp\\Subscriber\\HttpError` is now provided by\n    `GuzzleHttp\\Middleware::httpError`\n  - `GuzzleHttp\\Subscriber\\History` is now provided by\n    `GuzzleHttp\\Middleware::history`\n  - `GuzzleHttp\\Subscriber\\Mock` is now provided by\n    `GuzzleHttp\\Handler\\MockHandler`\n  - `GuzzleHttp\\Subscriber\\Prepare` is now provided by\n    `GuzzleHttp\\PrepareBodyMiddleware`\n  - `GuzzleHttp\\Subscriber\\Redirect` is now provided by\n    `GuzzleHttp\\RedirectMiddleware`\n- Guzzle now uses `Psr\\Http\\Message\\UriInterface` (implements in\n  `GuzzleHttp\\Psr7\\Uri`) for URI support. `GuzzleHttp\\Url` is now gone.\n- Static functions in `GuzzleHttp\\Utils` have been moved to namespaced\n  functions under the `GuzzleHttp` namespace. This requires either a Composer\n  based autoloader or you to include functions.php.\n- `GuzzleHttp\\ClientInterface::getDefaultOption` has been renamed to\n  `GuzzleHttp\\ClientInterface::getConfig`.\n- `GuzzleHttp\\ClientInterface::setDefaultOption` has been removed.\n- The `json` and `xml` methods of response objects has been removed. With the\n  migration to strictly adhering to PSR-7 as the interface for Guzzle messages,\n  adding methods to message interfaces would actually require Guzzle messages\n  to extend from PSR-7 messages rather then work with them directly.\n\n## Migrating to middleware\n\nThe change to PSR-7 unfortunately required significant refactoring to Guzzle\ndue to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event\nsystem from plugins. The event system relied on mutability of HTTP messages and\nside effects in order to work. With immutable messages, you have to change your\nworkflow to become more about either returning a value (e.g., functional\nmiddlewares) or setting a value on an object. Guzzle v6 has chosen the\nfunctional middleware approach.\n\nInstead of using the event system to listen for things like the `before` event,\nyou now create a stack based middleware function that intercepts a request on\nthe way in and the promise of the response on the way out. This is a much\nsimpler and more predictable approach than the event system and works nicely\nwith PSR-7 middleware. Due to the use of promises, the middleware system is\nalso asynchronous.\n\nv5:\n\n```php\nuse GuzzleHttp\\Event\\BeforeEvent;\n$client = new GuzzleHttp\\Client();\n// Get the emitter and listen to the before event.\n$client->getEmitter()->on('before', function (BeforeEvent $e) {\n    // Guzzle v5 events relied on mutation\n    $e->getRequest()->setHeader('X-Foo', 'Bar');\n});\n```\n\nv6:\n\nIn v6, you can modify the request before it is sent using the `mapRequest`\nmiddleware. The idiomatic way in v6 to modify the request/response lifecycle is\nto setup a handler middleware stack up front and inject the handler into a\nclient.\n\n```php\nuse GuzzleHttp\\Middleware;\n// Create a handler stack that has all of the default middlewares attached\n$handler = GuzzleHttp\\HandlerStack::create();\n// Push the handler onto the handler stack\n$handler->push(Middleware::mapRequest(function (RequestInterface $request) {\n    // Notice that we have to return a request object\n    return $request->withHeader('X-Foo', 'Bar');\n}));\n// Inject the handler into the client\n$client = new GuzzleHttp\\Client(['handler' => $handler]);\n```\n\n## POST Requests\n\nThis version added the [`form_params`](https://docs.guzzlephp.org/en/latest/request-options.html#form_params)\nand `multipart` request options. `form_params` is an associative array of\nstrings or array of strings and is used to serialize an\n`application/x-www-form-urlencoded` POST request. The\n[`multipart`](https://docs.guzzlephp.org/en/latest/request-options.html#multipart)\noption is now used to send a multipart/form-data POST request.\n\n`GuzzleHttp\\Post\\PostFile` has been removed. Use the `multipart` option to add\nPOST files to a multipart/form-data request.\n\nThe `body` option no longer accepts an array to send POST requests. Please use\n`multipart` or `form_params` instead.\n\nThe `base_url` option has been renamed to `base_uri`.\n\n4.x to 5.0\n----------\n\n## Rewritten Adapter Layer\n\nGuzzle now uses [RingPHP](https://ringphp.readthedocs.org/en/latest) to send\nHTTP requests. The `adapter` option in a `GuzzleHttp\\Client` constructor\nis still supported, but it has now been renamed to `handler`. Instead of\npassing a `GuzzleHttp\\Adapter\\AdapterInterface`, you must now pass a PHP\n`callable` that follows the RingPHP specification.\n\n## Removed Fluent Interfaces\n\n[Fluent interfaces were removed](https://ocramius.github.io/blog/fluent-interfaces-are-evil/)\nfrom the following classes:\n\n- `GuzzleHttp\\Collection`\n- `GuzzleHttp\\Url`\n- `GuzzleHttp\\Query`\n- `GuzzleHttp\\Post\\PostBody`\n- `GuzzleHttp\\Cookie\\SetCookie`\n\n## Removed functions.php\n\nRemoved \"functions.php\", so that Guzzle is truly PSR-4 compliant. The following\nfunctions can be used as replacements.\n\n- `GuzzleHttp\\json_decode` -> `GuzzleHttp\\Utils::jsonDecode`\n- `GuzzleHttp\\get_path` -> `GuzzleHttp\\Utils::getPath`\n- `GuzzleHttp\\Utils::setPath` -> `GuzzleHttp\\set_path`\n- `GuzzleHttp\\Pool::batch` -> `GuzzleHttp\\batch`. This function is, however,\n  deprecated in favor of using `GuzzleHttp\\Pool::batch()`.\n\nThe \"procedural\" global client has been removed with no replacement (e.g.,\n`GuzzleHttp\\get()`, `GuzzleHttp\\post()`, etc.). Use a `GuzzleHttp\\Client`\nobject as a replacement.\n\n## `throwImmediately` has been removed\n\nThe concept of \"throwImmediately\" has been removed from exceptions and error\nevents. This control mechanism was used to stop a transfer of concurrent\nrequests from completing. This can now be handled by throwing the exception or\nby cancelling a pool of requests or each outstanding future request\nindividually.\n\n## headers event has been removed\n\nRemoved the \"headers\" event. This event was only useful for changing the\nbody a response once the headers of the response were known. You can implement\na similar behavior in a number of ways. One example might be to use a\nFnStream that has access to the transaction being sent. For example, when the\nfirst byte is written, you could check if the response headers match your\nexpectations, and if so, change the actual stream body that is being\nwritten to.\n\n## Updates to HTTP Messages\n\nRemoved the `asArray` parameter from\n`GuzzleHttp\\Message\\MessageInterface::getHeader`. If you want to get a header\nvalue as an array, then use the newly added `getHeaderAsArray()` method of\n`MessageInterface`. This change makes the Guzzle interfaces compatible with\nthe PSR-7 interfaces.\n\n3.x to 4.0\n----------\n\n## Overarching changes:\n\n- Now requires PHP 5.4 or greater.\n- No longer requires cURL to send requests.\n- Guzzle no longer wraps every exception it throws. Only exceptions that are\n  recoverable are now wrapped by Guzzle.\n- Various namespaces have been removed or renamed.\n- No longer requiring the Symfony EventDispatcher. A custom event dispatcher\n  based on the Symfony EventDispatcher is\n  now utilized in `GuzzleHttp\\Event\\EmitterInterface` (resulting in significant\n  speed and functionality improvements).\n\nChanges per Guzzle 3.x namespace are described below.\n\n## Batch\n\nThe `Guzzle\\Batch` namespace has been removed. This is best left to\nthird-parties to implement on top of Guzzle's core HTTP library.\n\n## Cache\n\nThe `Guzzle\\Cache` namespace has been removed. (Todo: No suitable replacement\nhas been implemented yet, but hoping to utilize a PSR cache interface).\n\n## Common\n\n- Removed all of the wrapped exceptions. It's better to use the standard PHP\n  library for unrecoverable exceptions.\n- `FromConfigInterface` has been removed.\n- `Guzzle\\Common\\Version` has been removed. The VERSION constant can be found\n  at `GuzzleHttp\\ClientInterface::VERSION`.\n\n### Collection\n\n- `getAll` has been removed. Use `toArray` to convert a collection to an array.\n- `inject` has been removed.\n- `keySearch` has been removed.\n- `getPath` no longer supports wildcard expressions. Use something better like\n  JMESPath for this.\n- `setPath` now supports appending to an existing array via the `[]` notation.\n\n### Events\n\nGuzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses\n`GuzzleHttp\\Event\\Emitter`.\n\n- `Symfony\\Component\\EventDispatcher\\EventDispatcherInterface` is replaced by\n  `GuzzleHttp\\Event\\EmitterInterface`.\n- `Symfony\\Component\\EventDispatcher\\EventDispatcher` is replaced by\n  `GuzzleHttp\\Event\\Emitter`.\n- `Symfony\\Component\\EventDispatcher\\Event` is replaced by\n  `GuzzleHttp\\Event\\Event`, and Guzzle now has an EventInterface in\n  `GuzzleHttp\\Event\\EventInterface`.\n- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and\n  `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the\n  event emitter of a request, client, etc. now uses the `getEmitter` method\n  rather than the `getDispatcher` method.\n\n#### Emitter\n\n- Use the `once()` method to add a listener that automatically removes itself\n  the first time it is invoked.\n- Use the `listeners()` method to retrieve a list of event listeners rather than\n  the `getListeners()` method.\n- Use `emit()` instead of `dispatch()` to emit an event from an emitter.\n- Use `attach()` instead of `addSubscriber()` and `detach()` instead of\n  `removeSubscriber()`.\n\n```php\n$mock = new Mock();\n// 3.x\n$request->getEventDispatcher()->addSubscriber($mock);\n$request->getEventDispatcher()->removeSubscriber($mock);\n// 4.x\n$request->getEmitter()->attach($mock);\n$request->getEmitter()->detach($mock);\n```\n\nUse the `on()` method to add a listener rather than the `addListener()` method.\n\n```php\n// 3.x\n$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } );\n// 4.x\n$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } );\n```\n\n## Http\n\n### General changes\n\n- The cacert.pem certificate has been moved to `src/cacert.pem`.\n- Added the concept of adapters that are used to transfer requests over the\n  wire.\n- Simplified the event system.\n- Sending requests in parallel is still possible, but batching is no longer a\n  concept of the HTTP layer. Instead, you must use the `complete` and `error`\n  events to asynchronously manage parallel request transfers.\n- `Guzzle\\Http\\Url` has moved to `GuzzleHttp\\Url`.\n- `Guzzle\\Http\\QueryString` has moved to `GuzzleHttp\\Query`.\n- QueryAggregators have been rewritten so that they are simply callable\n  functions.\n- `GuzzleHttp\\StaticClient` has been removed. Use the functions provided in\n  `functions.php` for an easy to use static client instance.\n- Exceptions in `GuzzleHttp\\Exception` have been updated to all extend from\n  `GuzzleHttp\\Exception\\TransferException`.\n\n### Client\n\nCalling methods like `get()`, `post()`, `head()`, etc. no longer create and\nreturn a request, but rather creates a request, sends the request, and returns\nthe response.\n\n```php\n// 3.0\n$request = $client->get('/');\n$response = $request->send();\n\n// 4.0\n$response = $client->get('/');\n\n// or, to mirror the previous behavior\n$request = $client->createRequest('GET', '/');\n$response = $client->send($request);\n```\n\n`GuzzleHttp\\ClientInterface` has changed.\n\n- The `send` method no longer accepts more than one request. Use `sendAll` to\n  send multiple requests in parallel.\n- `setUserAgent()` has been removed. Use a default request option instead. You\n  could, for example, do something like:\n  `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`.\n- `setSslVerification()` has been removed. Use default request options instead,\n  like `$client->setConfig('defaults/verify', true)`.\n\n`GuzzleHttp\\Client` has changed.\n\n- The constructor now accepts only an associative array. You can include a\n  `base_url` string or array to use a URI template as the base URL of a client.\n  You can also specify a `defaults` key that is an associative array of default\n  request options. You can pass an `adapter` to use a custom adapter,\n  `batch_adapter` to use a custom adapter for sending requests in parallel, or\n  a `message_factory` to change the factory used to create HTTP requests and\n  responses.\n- The client no longer emits a `client.create_request` event.\n- Creating requests with a client no longer automatically utilize a URI\n  template. You must pass an array into a creational method (e.g.,\n  `createRequest`, `get`, `put`, etc.) in order to expand a URI template.\n\n### Messages\n\nMessages no longer have references to their counterparts (i.e., a request no\nlonger has a reference to it's response, and a response no loger has a\nreference to its request). This association is now managed through a\n`GuzzleHttp\\Adapter\\TransactionInterface` object. You can get references to\nthese transaction objects using request events that are emitted over the\nlifecycle of a request.\n\n#### Requests with a body\n\n- `GuzzleHttp\\Message\\EntityEnclosingRequest` and\n  `GuzzleHttp\\Message\\EntityEnclosingRequestInterface` have been removed. The\n  separation between requests that contain a body and requests that do not\n  contain a body has been removed, and now `GuzzleHttp\\Message\\RequestInterface`\n  handles both use cases.\n- Any method that previously accepts a `GuzzleHttp\\Response` object now accept a\n  `GuzzleHttp\\Message\\ResponseInterface`.\n- `GuzzleHttp\\Message\\RequestFactoryInterface` has been renamed to\n  `GuzzleHttp\\Message\\MessageFactoryInterface`. This interface is used to create\n  both requests and responses and is implemented in\n  `GuzzleHttp\\Message\\MessageFactory`.\n- POST field and file methods have been removed from the request object. You\n  must now use the methods made available to `GuzzleHttp\\Post\\PostBodyInterface`\n  to control the format of a POST body. Requests that are created using a\n  standard `GuzzleHttp\\Message\\MessageFactoryInterface` will automatically use\n  a `GuzzleHttp\\Post\\PostBody` body if the body was passed as an array or if\n  the method is POST and no body is provided.\n\n```php\n$request = $client->createRequest('POST', '/');\n$request->getBody()->setField('foo', 'bar');\n$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r')));\n```\n\n#### Headers\n\n- `GuzzleHttp\\Message\\Header` has been removed. Header values are now simply\n  represented by an array of values or as a string. Header values are returned\n  as a string by default when retrieving a header value from a message. You can\n  pass an optional argument of `true` to retrieve a header value as an array\n  of strings instead of a single concatenated string.\n- `GuzzleHttp\\PostFile` and `GuzzleHttp\\PostFileInterface` have been moved to\n  `GuzzleHttp\\Post`. This interface has been simplified and now allows the\n  addition of arbitrary headers.\n- Custom headers like `GuzzleHttp\\Message\\Header\\Link` have been removed. Most\n  of the custom headers are now handled separately in specific\n  subscribers/plugins, and `GuzzleHttp\\Message\\HeaderValues::parseParams()` has\n  been updated to properly handle headers that contain parameters (like the\n  `Link` header).\n\n#### Responses\n\n- `GuzzleHttp\\Message\\Response::getInfo()` and\n  `GuzzleHttp\\Message\\Response::setInfo()` have been removed. Use the event\n  system to retrieve this type of information.\n- `GuzzleHttp\\Message\\Response::getRawHeaders()` has been removed.\n- `GuzzleHttp\\Message\\Response::getMessage()` has been removed.\n- `GuzzleHttp\\Message\\Response::calculateAge()` and other cache specific\n  methods have moved to the CacheSubscriber.\n- Header specific helper functions like `getContentMd5()` have been removed.\n  Just use `getHeader('Content-MD5')` instead.\n- `GuzzleHttp\\Message\\Response::setRequest()` and\n  `GuzzleHttp\\Message\\Response::getRequest()` have been removed. Use the event\n  system to work with request and response objects as a transaction.\n- `GuzzleHttp\\Message\\Response::getRedirectCount()` has been removed. Use the\n  Redirect subscriber instead.\n- `GuzzleHttp\\Message\\Response::isSuccessful()` and other related methods have\n  been removed. Use `getStatusCode()` instead.\n\n#### Streaming responses\n\nStreaming requests can now be created by a client directly, returning a\n`GuzzleHttp\\Message\\ResponseInterface` object that contains a body stream\nreferencing an open PHP HTTP stream.\n\n```php\n// 3.0\nuse Guzzle\\Stream\\PhpStreamRequestFactory;\n$request = $client->get('/');\n$factory = new PhpStreamRequestFactory();\n$stream = $factory->fromRequest($request);\n$data = $stream->read(1024);\n\n// 4.0\n$response = $client->get('/', ['stream' => true]);\n// Read some data off of the stream in the response body\n$data = $response->getBody()->read(1024);\n```\n\n#### Redirects\n\nThe `configureRedirects()` method has been removed in favor of a\n`allow_redirects` request option.\n\n```php\n// Standard redirects with a default of a max of 5 redirects\n$request = $client->createRequest('GET', '/', ['allow_redirects' => true]);\n\n// Strict redirects with a custom number of redirects\n$request = $client->createRequest('GET', '/', [\n    'allow_redirects' => ['max' => 5, 'strict' => true]\n]);\n```\n\n#### EntityBody\n\nEntityBody interfaces and classes have been removed or moved to\n`GuzzleHttp\\Stream`. All classes and interfaces that once required\n`GuzzleHttp\\EntityBodyInterface` now require\n`GuzzleHttp\\Stream\\StreamInterface`. Creating a new body for a request no\nlonger uses `GuzzleHttp\\EntityBody::factory` but now uses\n`GuzzleHttp\\Stream\\Stream::factory` or even better:\n`GuzzleHttp\\Stream\\create()`.\n\n- `Guzzle\\Http\\EntityBodyInterface` is now `GuzzleHttp\\Stream\\StreamInterface`\n- `Guzzle\\Http\\EntityBody` is now `GuzzleHttp\\Stream\\Stream`\n- `Guzzle\\Http\\CachingEntityBody` is now `GuzzleHttp\\Stream\\CachingStream`\n- `Guzzle\\Http\\ReadLimitEntityBody` is now `GuzzleHttp\\Stream\\LimitStream`\n- `Guzzle\\Http\\IoEmittyinEntityBody` has been removed.\n\n#### Request lifecycle events\n\nRequests previously submitted a large number of requests. The number of events\nemitted over the lifecycle of a request has been significantly reduced to make\nit easier to understand how to extend the behavior of a request. All events\nemitted during the lifecycle of a request now emit a custom\n`GuzzleHttp\\Event\\EventInterface` object that contains context providing\nmethods and a way in which to modify the transaction at that specific point in\ntime (e.g., intercept the request and set a response on the transaction).\n\n- `request.before_send` has been renamed to `before` and now emits a\n  `GuzzleHttp\\Event\\BeforeEvent`\n- `request.complete` has been renamed to `complete` and now emits a\n  `GuzzleHttp\\Event\\CompleteEvent`.\n- `request.sent` has been removed. Use `complete`.\n- `request.success` has been removed. Use `complete`.\n- `error` is now an event that emits a `GuzzleHttp\\Event\\ErrorEvent`.\n- `request.exception` has been removed. Use `error`.\n- `request.receive.status_line` has been removed.\n- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to\n  maintain a status update.\n- `curl.callback.write` has been removed. Use a custom `StreamInterface` to\n  intercept writes.\n- `curl.callback.read` has been removed. Use a custom `StreamInterface` to\n  intercept reads.\n\n`headers` is a new event that is emitted after the response headers of a\nrequest have been received before the body of the response is downloaded. This\nevent emits a `GuzzleHttp\\Event\\HeadersEvent`.\n\nYou can intercept a request and inject a response using the `intercept()` event\nof a `GuzzleHttp\\Event\\BeforeEvent`, `GuzzleHttp\\Event\\CompleteEvent`, and\n`GuzzleHttp\\Event\\ErrorEvent` event.\n\nSee: https://docs.guzzlephp.org/en/latest/events.html\n\n## Inflection\n\nThe `Guzzle\\Inflection` namespace has been removed. This is not a core concern\nof Guzzle.\n\n## Iterator\n\nThe `Guzzle\\Iterator` namespace has been removed.\n\n- `Guzzle\\Iterator\\AppendIterator`, `Guzzle\\Iterator\\ChunkedIterator`, and\n  `Guzzle\\Iterator\\MethodProxyIterator` are nice, but not a core requirement of\n  Guzzle itself.\n- `Guzzle\\Iterator\\FilterIterator` is no longer needed because an equivalent\n  class is shipped with PHP 5.4.\n- `Guzzle\\Iterator\\MapIterator` is not really needed when using PHP 5.5 because\n  it's easier to just wrap an iterator in a generator that maps values.\n\nFor a replacement of these iterators, see https://github.com/nikic/iter\n\n## Log\n\nThe LogPlugin has moved to https://github.com/guzzle/log-subscriber. The\n`Guzzle\\Log` namespace has been removed. Guzzle now relies on\n`Psr\\Log\\LoggerInterface` for all logging. The MessageFormatter class has been\nmoved to `GuzzleHttp\\Subscriber\\Log\\Formatter`.\n\n## Parser\n\nThe `Guzzle\\Parser` namespace has been removed. This was previously used to\nmake it possible to plug in custom parsers for cookies, messages, URI\ntemplates, and URLs; however, this level of complexity is not needed in Guzzle\nso it has been removed.\n\n- Cookie: Cookie parsing logic has been moved to\n  `GuzzleHttp\\Cookie\\SetCookie::fromString`.\n- Message: Message parsing logic for both requests and responses has been moved\n  to `GuzzleHttp\\Message\\MessageFactory::fromMessage`. Message parsing is only\n  used in debugging or deserializing messages, so it doesn't make sense for\n  Guzzle as a library to add this level of complexity to parsing messages.\n- UriTemplate: URI template parsing has been moved to\n  `GuzzleHttp\\UriTemplate`. The Guzzle library will automatically use the PECL\n  URI template library if it is installed.\n- Url: URL parsing is now performed in `GuzzleHttp\\Url::fromString` (previously\n  it was `Guzzle\\Http\\Url::factory()`). If custom URL parsing is necessary,\n  then developers are free to subclass `GuzzleHttp\\Url`.\n\n## Plugin\n\nThe `Guzzle\\Plugin` namespace has been renamed to `GuzzleHttp\\Subscriber`.\nSeveral plugins are shipping with the core Guzzle library under this namespace.\n\n- `GuzzleHttp\\Subscriber\\Cookie`: Replaces the old CookiePlugin. Cookie jar\n  code has moved to `GuzzleHttp\\Cookie`.\n- `GuzzleHttp\\Subscriber\\History`: Replaces the old HistoryPlugin.\n- `GuzzleHttp\\Subscriber\\HttpError`: Throws errors when a bad HTTP response is\n  received.\n- `GuzzleHttp\\Subscriber\\Mock`: Replaces the old MockPlugin.\n- `GuzzleHttp\\Subscriber\\Prepare`: Prepares the body of a request just before\n  sending. This subscriber is attached to all requests by default.\n- `GuzzleHttp\\Subscriber\\Redirect`: Replaces the RedirectPlugin.\n\nThe following plugins have been removed (third-parties are free to re-implement\nthese if needed):\n\n- `GuzzleHttp\\Plugin\\Async` has been removed.\n- `GuzzleHttp\\Plugin\\CurlAuth` has been removed.\n- `GuzzleHttp\\Plugin\\ErrorResponse\\ErrorResponsePlugin` has been removed. This\n  functionality should instead be implemented with event listeners that occur\n  after normal response parsing occurs in the guzzle/command package.\n\nThe following plugins are not part of the core Guzzle package, but are provided\nin separate repositories:\n\n- `Guzzle\\Http\\Plugin\\BackoffPlugin` has been rewritten to be much simpler\n  to build custom retry policies using simple functions rather than various\n  chained classes. See: https://github.com/guzzle/retry-subscriber\n- `Guzzle\\Http\\Plugin\\Cache\\CachePlugin` has moved to\n  https://github.com/guzzle/cache-subscriber\n- `Guzzle\\Http\\Plugin\\Log\\LogPlugin` has moved to\n  https://github.com/guzzle/log-subscriber\n- `Guzzle\\Http\\Plugin\\Md5\\Md5Plugin` has moved to\n  https://github.com/guzzle/message-integrity-subscriber\n- `Guzzle\\Http\\Plugin\\Mock\\MockPlugin` has moved to\n  `GuzzleHttp\\Subscriber\\MockSubscriber`.\n- `Guzzle\\Http\\Plugin\\Oauth\\OauthPlugin` has moved to\n  https://github.com/guzzle/oauth-subscriber\n\n## Service\n\nThe service description layer of Guzzle has moved into two separate packages:\n\n- https://github.com/guzzle/command Provides a high level abstraction over web\n  services by representing web service operations using commands.\n- https://github.com/guzzle/guzzle-services Provides an implementation of\n  guzzle/command that provides request serialization and response parsing using\n  Guzzle service descriptions.\n\n## Stream\n\nStream have moved to a separate package available at\nhttps://github.com/guzzle/streams.\n\n`Guzzle\\Stream\\StreamInterface` has been given a large update to cleanly take\non the responsibilities of `Guzzle\\Http\\EntityBody` and\n`Guzzle\\Http\\EntityBodyInterface` now that they have been removed. The number\nof methods implemented by the `StreamInterface` has been drastically reduced to\nallow developers to more easily extend and decorate stream behavior.\n\n## Removed methods from StreamInterface\n\n- `getStream` and `setStream` have been removed to better encapsulate streams.\n- `getMetadata` and `setMetadata` have been removed in favor of\n  `GuzzleHttp\\Stream\\MetadataStreamInterface`.\n- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been\n  removed. This data is accessible when\n  using streams that implement `GuzzleHttp\\Stream\\MetadataStreamInterface`.\n- `rewind` has been removed. Use `seek(0)` for a similar behavior.\n\n## Renamed methods\n\n- `detachStream` has been renamed to `detach`.\n- `feof` has been renamed to `eof`.\n- `ftell` has been renamed to `tell`.\n- `readLine` has moved from an instance method to a static class method of\n  `GuzzleHttp\\Stream\\Stream`.\n\n## Metadata streams\n\n`GuzzleHttp\\Stream\\MetadataStreamInterface` has been added to denote streams\nthat contain additional metadata accessible via `getMetadata()`.\n`GuzzleHttp\\Stream\\StreamInterface::getMetadata` and\n`GuzzleHttp\\Stream\\StreamInterface::setMetadata` have been removed.\n\n## StreamRequestFactory\n\nThe entire concept of the StreamRequestFactory has been removed. The way this\nwas used in Guzzle 3 broke the actual interface of sending streaming requests\n(instead of getting back a Response, you got a StreamInterface). Streaming\nPHP requests are now implemented through the `GuzzleHttp\\Adapter\\StreamAdapter`.\n\n3.6 to 3.7\n----------\n\n### Deprecations\n\n- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.:\n\n```php\n\\Guzzle\\Common\\Version::$emitWarnings = true;\n```\n\nThe following APIs and options have been marked as deprecated:\n\n- Marked `Guzzle\\Http\\Message\\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead.\n- Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n- Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n- Marked `Guzzle\\Http\\Message\\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.\n- Marked `Guzzle\\Http\\Message\\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.\n- Marked `Guzzle\\Cache\\CacheAdapterFactory::factory()` as deprecated\n- Marked `Guzzle\\Service\\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\\Service\\Client.\n- Marked `Guzzle\\Parser\\Url\\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.\n- Marked `Guzzle\\Common\\Collection::inject()` as deprecated.\n- Marked `Guzzle\\Plugin\\CurlAuth\\CurlAuthPlugin` as deprecated. Use\n  `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or\n  `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));`\n\n3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational\nrequest methods. When paired with a client's configuration settings, these options allow you to specify default settings\nfor various aspects of a request. Because these options make other previous configuration options redundant, several\nconfiguration options and methods of a client and AbstractCommand have been deprecated.\n\n- Marked `Guzzle\\Service\\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`.\n- Marked `Guzzle\\Service\\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`.\n- Marked 'request.params' for `Guzzle\\Http\\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')`\n- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0\n\n        $command = $client->getCommand('foo', array(\n            'command.headers' => array('Test' => '123'),\n            'command.response_body' => '/path/to/file'\n        ));\n\n        // Should be changed to:\n\n        $command = $client->getCommand('foo', array(\n            'command.request_options' => array(\n                'headers' => array('Test' => '123'),\n                'save_as' => '/path/to/file'\n            )\n        ));\n\n### Interface changes\n\nAdditions and changes (you will need to update any implementations or subclasses you may have created):\n\n- Added an `$options` argument to the end of the following methods of `Guzzle\\Http\\ClientInterface`:\n  createRequest, head, delete, put, patch, post, options, prepareRequest\n- Added an `$options` argument to the end of `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface::createRequest()`\n- Added an `applyOptions()` method to `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface`\n- Changed `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $body = null)` to\n  `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a\n  resource, string, or EntityBody into the $options parameter to specify the download location of the response.\n- Changed `Guzzle\\Common\\Collection::__construct($data)` to no longer accepts a null value for `$data` but a\n  default `array()`\n- Added `Guzzle\\Stream\\StreamInterface::isRepeatable`\n- Made `Guzzle\\Http\\Client::expandTemplate` and `getUriTemplate` protected methods.\n\nThe following methods were removed from interfaces. All of these methods are still available in the concrete classes\nthat implement them, but you should update your code to use alternative methods:\n\n- Removed `Guzzle\\Http\\ClientInterface::setDefaultHeaders(). Use\n  `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or\n  `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or\n  `$client->setDefaultOption('headers/{header_name}', 'value')`. or\n  `$client->setDefaultOption('headers', array('header_name' => 'value'))`.\n- Removed `Guzzle\\Http\\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`.\n- Removed `Guzzle\\Http\\ClientInterface::expandTemplate()`. This is an implementation detail.\n- Removed `Guzzle\\Http\\ClientInterface::setRequestFactory()`. This is an implementation detail.\n- Removed `Guzzle\\Http\\ClientInterface::getCurlMulti()`. This is a very specific implementation detail.\n- Removed `Guzzle\\Http\\Message\\RequestInterface::canCache`. Use the CachePlugin.\n- Removed `Guzzle\\Http\\Message\\RequestInterface::setIsRedirect`. Use the HistoryPlugin.\n- Removed `Guzzle\\Http\\Message\\RequestInterface::isRedirect`. Use the HistoryPlugin.\n\n### Cache plugin breaking changes\n\n- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a\n  CacheStorageInterface. These two objects and interface will be removed in a future version.\n- Always setting X-cache headers on cached responses\n- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin\n- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface\n  $request, Response $response);`\n- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`\n- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`\n- Added `CacheStorageInterface::purge($url)`\n- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin\n  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,\n  CanCacheStrategyInterface $canCache = null)`\n- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`\n\n3.5 to 3.6\n----------\n\n* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.\n* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution\n* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().\n  For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader().\n  Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request.\n* Specific header implementations can be created for complex headers. When a message creates a header, it uses a\n  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and\n  CacheControl header implementation.\n* Moved getLinks() from Response to just be used on a Link header object.\n\nIf you previously relied on Guzzle\\Http\\Message\\Header::raw(), then you will need to update your code to use the\nHeaderInterface (e.g. toArray(), getAll(), etc.).\n\n### Interface changes\n\n* Removed from interface: Guzzle\\Http\\ClientInterface::setUriTemplate\n* Removed from interface: Guzzle\\Http\\ClientInterface::setCurlMulti()\n* Removed Guzzle\\Http\\Message\\Request::receivedRequestHeader() and implemented this functionality in\n  Guzzle\\Http\\Curl\\RequestMediator\n* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.\n* Removed the optional $tryChunkedTransfer option from Guzzle\\Http\\Message\\EntityEnclosingRequestInterface\n* Removed the $asObjects argument from Guzzle\\Http\\Message\\MessageInterface::getHeaders()\n\n### Removed deprecated functions\n\n* Removed Guzzle\\Parser\\ParserRegister::get(). Use getParser()\n* Removed Guzzle\\Parser\\ParserRegister::set(). Use registerParser().\n\n### Deprecations\n\n* The ability to case-insensitively search for header values\n* Guzzle\\Http\\Message\\Header::hasExactHeader\n* Guzzle\\Http\\Message\\Header::raw. Use getAll()\n* Deprecated cache control specific methods on Guzzle\\Http\\Message\\AbstractMessage. Use the CacheControl header object\n  instead.\n\n### Other changes\n\n* All response header helper functions return a string rather than mixing Header objects and strings inconsistently\n* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle\n  directly via interfaces\n* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist\n  but are a no-op until removed.\n* Most classes that used to require a `Guzzle\\Service\\Command\\CommandInterface` typehint now request a\n  `Guzzle\\Service\\Command\\ArrayCommandInterface`.\n* Added `Guzzle\\Http\\Message\\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response\n  on a request while the request is still being transferred\n* `Guzzle\\Service\\Command\\CommandInterface` now extends from ToArrayInterface and ArrayAccess\n\n3.3 to 3.4\n----------\n\nBase URLs of a client now follow the rules of https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.2 when merging URLs.\n\n3.2 to 3.3\n----------\n\n### Response::getEtag() quote stripping removed\n\n`Guzzle\\Http\\Message\\Response::getEtag()` no longer strips quotes around the ETag response header\n\n### Removed `Guzzle\\Http\\Utils`\n\nThe `Guzzle\\Http\\Utils` class was removed. This class was only used for testing.\n\n### Stream wrapper and type\n\n`Guzzle\\Stream\\Stream::getWrapper()` and `Guzzle\\Stream\\Stream::getStreamType()` are no longer converted to lowercase.\n\n### curl.emit_io became emit_io\n\nEmitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the\n'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'\n\n3.1 to 3.2\n----------\n\n### CurlMulti is no longer reused globally\n\nBefore 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added\nto a single client can pollute requests dispatched from other clients.\n\nIf you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the\nServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is\ncreated.\n\n```php\n$multi = new Guzzle\\Http\\Curl\\CurlMulti();\n$builder = Guzzle\\Service\\Builder\\ServiceBuilder::factory('/path/to/config.json');\n$builder->addListener('service_builder.create_client', function ($event) use ($multi) {\n    $event['client']->setCurlMulti($multi);\n}\n});\n```\n\n### No default path\n\nURLs no longer have a default path value of '/' if no path was specified.\n\nBefore:\n\n```php\n$request = $client->get('http://www.foo.com');\necho $request->getUrl();\n// >> http://www.foo.com/\n```\n\nAfter:\n\n```php\n$request = $client->get('http://www.foo.com');\necho $request->getUrl();\n// >> http://www.foo.com\n```\n\n### Less verbose BadResponseException\n\nThe exception message for `Guzzle\\Http\\Exception\\BadResponseException` no longer contains the full HTTP request and\nresponse information. You can, however, get access to the request and response object by calling `getRequest()` or\n`getResponse()` on the exception object.\n\n### Query parameter aggregation\n\nMulti-valued query parameters are no longer aggregated using a callback function. `Guzzle\\Http\\Query` now has a\nsetAggregator() method that accepts a `Guzzle\\Http\\QueryAggregator\\QueryAggregatorInterface` object. This object is\nresponsible for handling the aggregation of multi-valued query string variables into a flattened hash.\n\n2.8 to 3.x\n----------\n\n### Guzzle\\Service\\Inspector\n\nChange `\\Guzzle\\Service\\Inspector::fromConfig` to `\\Guzzle\\Common\\Collection::fromConfig`\n\n**Before**\n\n```php\nuse Guzzle\\Service\\Inspector;\n\nclass YourClient extends \\Guzzle\\Service\\Client\n{\n    public static function factory($config = array())\n    {\n        $default = array();\n        $required = array('base_url', 'username', 'api_key');\n        $config = Inspector::fromConfig($config, $default, $required);\n\n        $client = new self(\n            $config->get('base_url'),\n            $config->get('username'),\n            $config->get('api_key')\n        );\n        $client->setConfig($config);\n\n        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));\n\n        return $client;\n    }\n```\n\n**After**\n\n```php\nuse Guzzle\\Common\\Collection;\n\nclass YourClient extends \\Guzzle\\Service\\Client\n{\n    public static function factory($config = array())\n    {\n        $default = array();\n        $required = array('base_url', 'username', 'api_key');\n        $config = Collection::fromConfig($config, $default, $required);\n\n        $client = new self(\n            $config->get('base_url'),\n            $config->get('username'),\n            $config->get('api_key')\n        );\n        $client->setConfig($config);\n\n        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));\n\n        return $client;\n    }\n```\n\n### Convert XML Service Descriptions to JSON\n\n**Before**\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<client>\n    <commands>\n        <!-- Groups -->\n        <command name=\"list_groups\" method=\"GET\" uri=\"groups.json\">\n            <doc>Get a list of groups</doc>\n        </command>\n        <command name=\"search_groups\" method=\"GET\" uri='search.json?query=\"{{query}} type:group\"'>\n            <doc>Uses a search query to get a list of groups</doc>\n            <param name=\"query\" type=\"string\" required=\"true\" />\n        </command>\n        <command name=\"create_group\" method=\"POST\" uri=\"groups.json\">\n            <doc>Create a group</doc>\n            <param name=\"data\" type=\"array\" location=\"body\" filters=\"json_encode\" doc=\"Group JSON\"/>\n            <param name=\"Content-Type\" location=\"header\" static=\"application/json\"/>\n        </command>\n        <command name=\"delete_group\" method=\"DELETE\" uri=\"groups/{{id}}.json\">\n            <doc>Delete a group by ID</doc>\n            <param name=\"id\" type=\"integer\" required=\"true\"/>\n        </command>\n        <command name=\"get_group\" method=\"GET\" uri=\"groups/{{id}}.json\">\n            <param name=\"id\" type=\"integer\" required=\"true\"/>\n        </command>\n        <command name=\"update_group\" method=\"PUT\" uri=\"groups/{{id}}.json\">\n            <doc>Update a group</doc>\n            <param name=\"id\" type=\"integer\" required=\"true\"/>\n            <param name=\"data\" type=\"array\" location=\"body\" filters=\"json_encode\" doc=\"Group JSON\"/>\n            <param name=\"Content-Type\" location=\"header\" static=\"application/json\"/>\n        </command>\n    </commands>\n</client>\n```\n\n**After**\n\n```json\n{\n    \"name\":       \"Zendesk REST API v2\",\n    \"apiVersion\": \"2012-12-31\",\n    \"description\":\"Provides access to Zendesk views, groups, tickets, ticket fields, and users\",\n    \"operations\": {\n        \"list_groups\":  {\n            \"httpMethod\":\"GET\",\n            \"uri\":       \"groups.json\",\n            \"summary\":   \"Get a list of groups\"\n        },\n        \"search_groups\":{\n            \"httpMethod\":\"GET\",\n            \"uri\":       \"search.json?query=\\\"{query} type:group\\\"\",\n            \"summary\":   \"Uses a search query to get a list of groups\",\n            \"parameters\":{\n                \"query\":{\n                    \"location\":   \"uri\",\n                    \"description\":\"Zendesk Search Query\",\n                    \"type\":       \"string\",\n                    \"required\":   true\n                }\n            }\n        },\n        \"create_group\": {\n            \"httpMethod\":\"POST\",\n            \"uri\":       \"groups.json\",\n            \"summary\":   \"Create a group\",\n            \"parameters\":{\n                \"data\":        {\n                    \"type\":       \"array\",\n                    \"location\":   \"body\",\n                    \"description\":\"Group JSON\",\n                    \"filters\":    \"json_encode\",\n                    \"required\":   true\n                },\n                \"Content-Type\":{\n                    \"type\":    \"string\",\n                    \"location\":\"header\",\n                    \"static\":  \"application/json\"\n                }\n            }\n        },\n        \"delete_group\": {\n            \"httpMethod\":\"DELETE\",\n            \"uri\":       \"groups/{id}.json\",\n            \"summary\":   \"Delete a group\",\n            \"parameters\":{\n                \"id\":{\n                    \"location\":   \"uri\",\n                    \"description\":\"Group to delete by ID\",\n                    \"type\":       \"integer\",\n                    \"required\":   true\n                }\n            }\n        },\n        \"get_group\":    {\n            \"httpMethod\":\"GET\",\n            \"uri\":       \"groups/{id}.json\",\n            \"summary\":   \"Get a ticket\",\n            \"parameters\":{\n                \"id\":{\n                    \"location\":   \"uri\",\n                    \"description\":\"Group to get by ID\",\n                    \"type\":       \"integer\",\n                    \"required\":   true\n                }\n            }\n        },\n        \"update_group\": {\n            \"httpMethod\":\"PUT\",\n            \"uri\":       \"groups/{id}.json\",\n            \"summary\":   \"Update a group\",\n            \"parameters\":{\n                \"id\":          {\n                    \"location\":   \"uri\",\n                    \"description\":\"Group to update by ID\",\n                    \"type\":       \"integer\",\n                    \"required\":   true\n                },\n                \"data\":        {\n                    \"type\":       \"array\",\n                    \"location\":   \"body\",\n                    \"description\":\"Group JSON\",\n                    \"filters\":    \"json_encode\",\n                    \"required\":   true\n                },\n                \"Content-Type\":{\n                    \"type\":    \"string\",\n                    \"location\":\"header\",\n                    \"static\":  \"application/json\"\n                }\n            }\n        }\n}\n```\n\n### Guzzle\\Service\\Description\\ServiceDescription\n\nCommands are now called Operations\n\n**Before**\n\n```php\nuse Guzzle\\Service\\Description\\ServiceDescription;\n\n$sd = new ServiceDescription();\n$sd->getCommands();     // @returns ApiCommandInterface[]\n$sd->hasCommand($name);\n$sd->getCommand($name); // @returns ApiCommandInterface|null\n$sd->addCommand($command); // @param ApiCommandInterface $command\n```\n\n**After**\n\n```php\nuse Guzzle\\Service\\Description\\ServiceDescription;\n\n$sd = new ServiceDescription();\n$sd->getOperations();           // @returns OperationInterface[]\n$sd->hasOperation($name);\n$sd->getOperation($name);       // @returns OperationInterface|null\n$sd->addOperation($operation);  // @param OperationInterface $operation\n```\n\n### Guzzle\\Common\\Inflection\\Inflector\n\nNamespace is now `Guzzle\\Inflection\\Inflector`\n\n### Guzzle\\Http\\Plugin\n\nNamespace is now `Guzzle\\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below.\n\n### Guzzle\\Http\\Plugin\\LogPlugin and Guzzle\\Common\\Log\n\nNow `Guzzle\\Plugin\\Log\\LogPlugin` and `Guzzle\\Log` respectively.\n\n**Before**\n\n```php\nuse Guzzle\\Common\\Log\\ClosureLogAdapter;\nuse Guzzle\\Http\\Plugin\\LogPlugin;\n\n/** @var \\Guzzle\\Http\\Client */\n$client;\n\n// $verbosity is an integer indicating desired message verbosity level\n$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE);\n```\n\n**After**\n\n```php\nuse Guzzle\\Log\\ClosureLogAdapter;\nuse Guzzle\\Log\\MessageFormatter;\nuse Guzzle\\Plugin\\Log\\LogPlugin;\n\n/** @var \\Guzzle\\Http\\Client */\n$client;\n\n// $format is a string indicating desired message format -- @see MessageFormatter\n$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT);\n```\n\n### Guzzle\\Http\\Plugin\\CurlAuthPlugin\n\nNow `Guzzle\\Plugin\\CurlAuth\\CurlAuthPlugin`.\n\n### Guzzle\\Http\\Plugin\\ExponentialBackoffPlugin\n\nNow `Guzzle\\Plugin\\Backoff\\BackoffPlugin`, and other changes.\n\n**Before**\n\n```php\nuse Guzzle\\Http\\Plugin\\ExponentialBackoffPlugin;\n\n$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge(\n        ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429)\n    ));\n\n$client->addSubscriber($backoffPlugin);\n```\n\n**After**\n\n```php\nuse Guzzle\\Plugin\\Backoff\\BackoffPlugin;\nuse Guzzle\\Plugin\\Backoff\\HttpBackoffStrategy;\n\n// Use convenient factory method instead -- see implementation for ideas of what\n// you can do with chaining backoff strategies\n$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge(\n        HttpBackoffStrategy::getDefaultFailureCodes(), array(429)\n    ));\n$client->addSubscriber($backoffPlugin);\n```\n\n### Known Issues\n\n#### [BUG] Accept-Encoding header behavior changed unintentionally.\n\n(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e)\n\nIn version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to\nproperly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen.\nSee issue #217 for a workaround, or use a version containing the fix.\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/composer.json",
    "content": "{\n    \"name\": \"guzzlehttp/guzzle\",\n    \"description\": \"Guzzle is a PHP HTTP client library\",\n    \"keywords\": [\n        \"framework\",\n        \"http\",\n        \"rest\",\n        \"web service\",\n        \"curl\",\n        \"client\",\n        \"HTTP client\",\n        \"PSR-7\",\n        \"PSR-18\"\n    ],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"hello@gjcampbell.co.uk\",\n            \"homepage\": \"https://github.com/GrahamCampbell\"\n        },\n        {\n            \"name\": \"Michael Dowling\",\n            \"email\": \"mtdowling@gmail.com\",\n            \"homepage\": \"https://github.com/mtdowling\"\n        },\n        {\n            \"name\": \"Jeremy Lindblom\",\n            \"email\": \"jeremeamia@gmail.com\",\n            \"homepage\": \"https://github.com/jeremeamia\"\n        },\n        {\n            \"name\": \"George Mponos\",\n            \"email\": \"gmponos@gmail.com\",\n            \"homepage\": \"https://github.com/gmponos\"\n        },\n        {\n            \"name\": \"Tobias Nyholm\",\n            \"email\": \"tobias.nyholm@gmail.com\",\n            \"homepage\": \"https://github.com/Nyholm\"\n        },\n        {\n            \"name\": \"Márk Sági-Kazár\",\n            \"email\": \"mark.sagikazar@gmail.com\",\n            \"homepage\": \"https://github.com/sagikazarmark\"\n        },\n        {\n            \"name\": \"Tobias Schultze\",\n            \"email\": \"webmaster@tubo-world.de\",\n            \"homepage\": \"https://github.com/Tobion\"\n        }\n    ],\n    \"repositories\": [\n        {\n            \"type\": \"package\",\n            \"package\": {\n                \"name\": \"guzzle/client-integration-tests\",\n                \"version\": \"v3.0.2\",\n                \"dist\": {\n                    \"url\": \"https://codeload.github.com/guzzle/client-integration-tests/zip/2c025848417c1135031fdf9c728ee53d0a7ceaee\",\n                    \"type\": \"zip\"\n                },\n                \"require\": {\n                    \"php\": \"^7.2.5 || ^8.0\",\n                    \"phpunit/phpunit\": \"^7.5.20 || ^8.5.8 || ^9.3.11\",\n                    \"php-http/message\": \"^1.0 || ^2.0\",\n                    \"guzzlehttp/psr7\": \"^1.7 || ^2.0\",\n                    \"th3n3rd/cartesian-product\": \"^0.3\"\n                },\n                \"autoload\": {\n                    \"psr-4\": {\n                        \"Http\\\\Client\\\\Tests\\\\\": \"src/\"\n                    }\n                },\n                \"bin\": [\n                    \"bin/http_test_server\"\n                ]\n            }\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.2.5 || ^8.0\",\n        \"ext-json\": \"*\",\n        \"guzzlehttp/promises\": \"^2.3\",\n        \"guzzlehttp/psr7\": \"^2.8\",\n        \"psr/http-client\": \"^1.0\",\n        \"symfony/deprecation-contracts\": \"^2.2 || ^3.0\"\n    },\n    \"provide\": {\n        \"psr/http-client-implementation\": \"1.0\"\n    },\n    \"require-dev\": {\n        \"ext-curl\": \"*\",\n        \"bamarni/composer-bin-plugin\": \"^1.8.2\",\n        \"guzzle/client-integration-tests\": \"3.0.2\",\n        \"php-http/message-factory\": \"^1.1\",\n        \"phpunit/phpunit\": \"^8.5.39 || ^9.6.20\",\n        \"psr/log\": \"^1.1 || ^2.0 || ^3.0\"\n    },\n    \"suggest\": {\n        \"ext-curl\": \"Required for CURL handler support\",\n        \"ext-intl\": \"Required for Internationalized Domain Name (IDN) support\",\n        \"psr/log\": \"Required for using the Log middleware\"\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"bamarni/composer-bin-plugin\": true\n        },\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"bamarni-bin\": {\n            \"bin-links\": true,\n            \"forward-command\": false\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\\": \"src/\"\n        },\n        \"files\": [\n            \"src/functions_include.php\"\n        ]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Tests\\\\\": \"tests/\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/BodySummarizer.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\MessageInterface;\n\nfinal class BodySummarizer implements BodySummarizerInterface\n{\n    /**\n     * @var int|null\n     */\n    private $truncateAt;\n\n    public function __construct(?int $truncateAt = null)\n    {\n        $this->truncateAt = $truncateAt;\n    }\n\n    /**\n     * Returns a summarized message body.\n     */\n    public function summarize(MessageInterface $message): ?string\n    {\n        return $this->truncateAt === null\n            ? Psr7\\Message::bodySummary($message)\n            : Psr7\\Message::bodySummary($message, $this->truncateAt);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\MessageInterface;\n\ninterface BodySummarizerInterface\n{\n    /**\n     * Returns a summarized message body.\n     */\n    public function summarize(MessageInterface $message): ?string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Client.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Cookie\\CookieJar;\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse GuzzleHttp\\Exception\\InvalidArgumentException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * @final\n */\nclass Client implements ClientInterface, \\Psr\\Http\\Client\\ClientInterface\n{\n    use ClientTrait;\n\n    /**\n     * @var array Default request options\n     */\n    private $config;\n\n    /**\n     * Clients accept an array of constructor parameters.\n     *\n     * Here's an example of creating a client using a base_uri and an array of\n     * default request options to apply to each request:\n     *\n     *     $client = new Client([\n     *         'base_uri'        => 'http://www.foo.com/1.0/',\n     *         'timeout'         => 0,\n     *         'allow_redirects' => false,\n     *         'proxy'           => '192.168.16.1:10'\n     *     ]);\n     *\n     * Client configuration settings include the following options:\n     *\n     * - handler: (callable) Function that transfers HTTP requests over the\n     *   wire. The function is called with a Psr7\\Http\\Message\\RequestInterface\n     *   and array of transfer options, and must return a\n     *   GuzzleHttp\\Promise\\PromiseInterface that is fulfilled with a\n     *   Psr7\\Http\\Message\\ResponseInterface on success.\n     *   If no handler is provided, a default handler will be created\n     *   that enables all of the request options below by attaching all of the\n     *   default middleware to the handler.\n     * - base_uri: (string|UriInterface) Base URI of the client that is merged\n     *   into relative URIs. Can be a string or instance of UriInterface.\n     * - **: any request option\n     *\n     * @param array $config Client configuration settings.\n     *\n     * @see RequestOptions for a list of available request options.\n     */\n    public function __construct(array $config = [])\n    {\n        if (!isset($config['handler'])) {\n            $config['handler'] = HandlerStack::create();\n        } elseif (!\\is_callable($config['handler'])) {\n            throw new InvalidArgumentException('handler must be a callable');\n        }\n\n        // Convert the base_uri to a UriInterface\n        if (isset($config['base_uri'])) {\n            $config['base_uri'] = Psr7\\Utils::uriFor($config['base_uri']);\n        }\n\n        $this->configureDefaults($config);\n    }\n\n    /**\n     * @param string $method\n     * @param array  $args\n     *\n     * @return PromiseInterface|ResponseInterface\n     *\n     * @deprecated Client::__call will be removed in guzzlehttp/guzzle:8.0.\n     */\n    public function __call($method, $args)\n    {\n        if (\\count($args) < 1) {\n            throw new InvalidArgumentException('Magic request methods require a URI and optional options array');\n        }\n\n        $uri = $args[0];\n        $opts = $args[1] ?? [];\n\n        return \\substr($method, -5) === 'Async'\n            ? $this->requestAsync(\\substr($method, 0, -5), $uri, $opts)\n            : $this->request($method, $uri, $opts);\n    }\n\n    /**\n     * Asynchronously send an HTTP request.\n     *\n     * @param array $options Request options to apply to the given\n     *                       request and to the transfer. See \\GuzzleHttp\\RequestOptions.\n     */\n    public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface\n    {\n        // Merge the base URI into the request URI if needed.\n        $options = $this->prepareDefaults($options);\n\n        return $this->transfer(\n            $request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')),\n            $options\n        );\n    }\n\n    /**\n     * Send an HTTP request.\n     *\n     * @param array $options Request options to apply to the given\n     *                       request and to the transfer. See \\GuzzleHttp\\RequestOptions.\n     *\n     * @throws GuzzleException\n     */\n    public function send(RequestInterface $request, array $options = []): ResponseInterface\n    {\n        $options[RequestOptions::SYNCHRONOUS] = true;\n\n        return $this->sendAsync($request, $options)->wait();\n    }\n\n    /**\n     * The HttpClient PSR (PSR-18) specify this method.\n     *\n     * {@inheritDoc}\n     */\n    public function sendRequest(RequestInterface $request): ResponseInterface\n    {\n        $options[RequestOptions::SYNCHRONOUS] = true;\n        $options[RequestOptions::ALLOW_REDIRECTS] = false;\n        $options[RequestOptions::HTTP_ERRORS] = false;\n\n        return $this->sendAsync($request, $options)->wait();\n    }\n\n    /**\n     * Create and send an asynchronous HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string              $method  HTTP method\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply. See \\GuzzleHttp\\RequestOptions.\n     */\n    public function requestAsync(string $method, $uri = '', array $options = []): PromiseInterface\n    {\n        $options = $this->prepareDefaults($options);\n        // Remove request modifying parameter because it can be done up-front.\n        $headers = $options['headers'] ?? [];\n        $body = $options['body'] ?? null;\n        $version = $options['version'] ?? '1.1';\n        // Merge the URI into the base URI.\n        $uri = $this->buildUri(Psr7\\Utils::uriFor($uri), $options);\n        if (\\is_array($body)) {\n            throw $this->invalidBody();\n        }\n        $request = new Psr7\\Request($method, $uri, $headers, $body, $version);\n        // Remove the option so that they are not doubly-applied.\n        unset($options['headers'], $options['body'], $options['version']);\n\n        return $this->transfer($request, $options);\n    }\n\n    /**\n     * Create and send an HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string              $method  HTTP method.\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply. See \\GuzzleHttp\\RequestOptions.\n     *\n     * @throws GuzzleException\n     */\n    public function request(string $method, $uri = '', array $options = []): ResponseInterface\n    {\n        $options[RequestOptions::SYNCHRONOUS] = true;\n\n        return $this->requestAsync($method, $uri, $options)->wait();\n    }\n\n    /**\n     * Get a client configuration option.\n     *\n     * These options include default request options of the client, a \"handler\"\n     * (if utilized by the concrete client), and a \"base_uri\" if utilized by\n     * the concrete client.\n     *\n     * @param string|null $option The config option to retrieve.\n     *\n     * @return mixed\n     *\n     * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.\n     */\n    public function getConfig(?string $option = null)\n    {\n        return $option === null\n            ? $this->config\n            : ($this->config[$option] ?? null);\n    }\n\n    private function buildUri(UriInterface $uri, array $config): UriInterface\n    {\n        if (isset($config['base_uri'])) {\n            $uri = Psr7\\UriResolver::resolve(Psr7\\Utils::uriFor($config['base_uri']), $uri);\n        }\n\n        if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) {\n            $idnOptions = ($config['idn_conversion'] === true) ? \\IDNA_DEFAULT : $config['idn_conversion'];\n            $uri = Utils::idnUriConvert($uri, $idnOptions);\n        }\n\n        return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;\n    }\n\n    /**\n     * Configures the default options for a client.\n     */\n    private function configureDefaults(array $config): void\n    {\n        $defaults = [\n            'allow_redirects' => RedirectMiddleware::$defaultSettings,\n            'http_errors' => true,\n            'decode_content' => true,\n            'verify' => true,\n            'cookies' => false,\n            'idn_conversion' => false,\n        ];\n\n        // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.\n\n        // We can only trust the HTTP_PROXY environment variable in a CLI\n        // process due to the fact that PHP has no reliable mechanism to\n        // get environment variables that start with \"HTTP_\".\n        if (\\PHP_SAPI === 'cli' && ($proxy = Utils::getenv('HTTP_PROXY'))) {\n            $defaults['proxy']['http'] = $proxy;\n        }\n\n        if ($proxy = Utils::getenv('HTTPS_PROXY')) {\n            $defaults['proxy']['https'] = $proxy;\n        }\n\n        if ($noProxy = Utils::getenv('NO_PROXY')) {\n            $cleanedNoProxy = \\str_replace(' ', '', $noProxy);\n            $defaults['proxy']['no'] = \\explode(',', $cleanedNoProxy);\n        }\n\n        $this->config = $config + $defaults;\n\n        if (!empty($config['cookies']) && $config['cookies'] === true) {\n            $this->config['cookies'] = new CookieJar();\n        }\n\n        // Add the default user-agent header.\n        if (!isset($this->config['headers'])) {\n            $this->config['headers'] = ['User-Agent' => Utils::defaultUserAgent()];\n        } else {\n            // Add the User-Agent header if one was not already set.\n            foreach (\\array_keys($this->config['headers']) as $name) {\n                if (\\strtolower($name) === 'user-agent') {\n                    return;\n                }\n            }\n            $this->config['headers']['User-Agent'] = Utils::defaultUserAgent();\n        }\n    }\n\n    /**\n     * Merges default options into the array.\n     *\n     * @param array $options Options to modify by reference\n     */\n    private function prepareDefaults(array $options): array\n    {\n        $defaults = $this->config;\n\n        if (!empty($defaults['headers'])) {\n            // Default headers are only added if they are not present.\n            $defaults['_conditional'] = $defaults['headers'];\n            unset($defaults['headers']);\n        }\n\n        // Special handling for headers is required as they are added as\n        // conditional headers and as headers passed to a request ctor.\n        if (\\array_key_exists('headers', $options)) {\n            // Allows default headers to be unset.\n            if ($options['headers'] === null) {\n                $defaults['_conditional'] = [];\n                unset($options['headers']);\n            } elseif (!\\is_array($options['headers'])) {\n                throw new InvalidArgumentException('headers must be an array');\n            }\n        }\n\n        // Shallow merge defaults underneath options.\n        $result = $options + $defaults;\n\n        // Remove null values.\n        foreach ($result as $k => $v) {\n            if ($v === null) {\n                unset($result[$k]);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Transfers the given request and applies request options.\n     *\n     * The URI of the request is not modified and the request options are used\n     * as-is without merging in default options.\n     *\n     * @param array $options See \\GuzzleHttp\\RequestOptions.\n     */\n    private function transfer(RequestInterface $request, array $options): PromiseInterface\n    {\n        $request = $this->applyOptions($request, $options);\n        /** @var HandlerStack $handler */\n        $handler = $options['handler'];\n\n        try {\n            return P\\Create::promiseFor($handler($request, $options));\n        } catch (\\Exception $e) {\n            return P\\Create::rejectionFor($e);\n        }\n    }\n\n    /**\n     * Applies the array of request options to a request.\n     */\n    private function applyOptions(RequestInterface $request, array &$options): RequestInterface\n    {\n        $modify = [\n            'set_headers' => [],\n        ];\n\n        if (isset($options['headers'])) {\n            if (array_keys($options['headers']) === range(0, count($options['headers']) - 1)) {\n                throw new InvalidArgumentException('The headers array must have header name as keys.');\n            }\n            $modify['set_headers'] = $options['headers'];\n            unset($options['headers']);\n        }\n\n        if (isset($options['form_params'])) {\n            if (isset($options['multipart'])) {\n                throw new InvalidArgumentException('You cannot use '\n                    .'form_params and multipart at the same time. Use the '\n                    .'form_params option if you want to send application/'\n                    .'x-www-form-urlencoded requests, and the multipart '\n                    .'option to send multipart/form-data requests.');\n            }\n            $options['body'] = \\http_build_query($options['form_params'], '', '&');\n            unset($options['form_params']);\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Content-Type'], $options['_conditional']);\n            $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded';\n        }\n\n        if (isset($options['multipart'])) {\n            $options['body'] = new Psr7\\MultipartStream($options['multipart']);\n            unset($options['multipart']);\n        }\n\n        if (isset($options['json'])) {\n            $options['body'] = Utils::jsonEncode($options['json']);\n            unset($options['json']);\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Content-Type'], $options['_conditional']);\n            $options['_conditional']['Content-Type'] = 'application/json';\n        }\n\n        if (!empty($options['decode_content'])\n            && $options['decode_content'] !== true\n        ) {\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Accept-Encoding'], $options['_conditional']);\n            $modify['set_headers']['Accept-Encoding'] = $options['decode_content'];\n        }\n\n        if (isset($options['body'])) {\n            if (\\is_array($options['body'])) {\n                throw $this->invalidBody();\n            }\n            $modify['body'] = Psr7\\Utils::streamFor($options['body']);\n            unset($options['body']);\n        }\n\n        if (!empty($options['auth']) && \\is_array($options['auth'])) {\n            $value = $options['auth'];\n            $type = isset($value[2]) ? \\strtolower($value[2]) : 'basic';\n            switch ($type) {\n                case 'basic':\n                    // Ensure that we don't have the header in different case and set the new value.\n                    $modify['set_headers'] = Psr7\\Utils::caselessRemove(['Authorization'], $modify['set_headers']);\n                    $modify['set_headers']['Authorization'] = 'Basic '\n                        .\\base64_encode(\"$value[0]:$value[1]\");\n                    break;\n                case 'digest':\n                    // @todo: Do not rely on curl\n                    $options['curl'][\\CURLOPT_HTTPAUTH] = \\CURLAUTH_DIGEST;\n                    $options['curl'][\\CURLOPT_USERPWD] = \"$value[0]:$value[1]\";\n                    break;\n                case 'ntlm':\n                    $options['curl'][\\CURLOPT_HTTPAUTH] = \\CURLAUTH_NTLM;\n                    $options['curl'][\\CURLOPT_USERPWD] = \"$value[0]:$value[1]\";\n                    break;\n            }\n        }\n\n        if (isset($options['query'])) {\n            $value = $options['query'];\n            if (\\is_array($value)) {\n                $value = \\http_build_query($value, '', '&', \\PHP_QUERY_RFC3986);\n            }\n            if (!\\is_string($value)) {\n                throw new InvalidArgumentException('query must be a string or array');\n            }\n            $modify['query'] = $value;\n            unset($options['query']);\n        }\n\n        // Ensure that sink is not an invalid value.\n        if (isset($options['sink'])) {\n            // TODO: Add more sink validation?\n            if (\\is_bool($options['sink'])) {\n                throw new InvalidArgumentException('sink must not be a boolean');\n            }\n        }\n\n        if (isset($options['version'])) {\n            $modify['version'] = $options['version'];\n        }\n\n        $request = Psr7\\Utils::modifyRequest($request, $modify);\n        if ($request->getBody() instanceof Psr7\\MultipartStream) {\n            // Use a multipart/form-data POST if a Content-Type is not set.\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Content-Type'], $options['_conditional']);\n            $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='\n                .$request->getBody()->getBoundary();\n        }\n\n        // Merge in conditional headers if they are not present.\n        if (isset($options['_conditional'])) {\n            // Build up the changes so it's in a single clone of the message.\n            $modify = [];\n            foreach ($options['_conditional'] as $k => $v) {\n                if (!$request->hasHeader($k)) {\n                    $modify['set_headers'][$k] = $v;\n                }\n            }\n            $request = Psr7\\Utils::modifyRequest($request, $modify);\n            // Don't pass this internal value along to middleware/handlers.\n            unset($options['_conditional']);\n        }\n\n        return $request;\n    }\n\n    /**\n     * Return an InvalidArgumentException with pre-set message.\n     */\n    private function invalidBody(): InvalidArgumentException\n    {\n        return new InvalidArgumentException('Passing in the \"body\" request '\n            .'option as an array to send a request is not supported. '\n            .'Please use the \"form_params\" request option to send a '\n            .'application/x-www-form-urlencoded request, or the \"multipart\" '\n            .'request option to send a multipart/form-data request.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/ClientInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Client interface for sending HTTP requests.\n */\ninterface ClientInterface\n{\n    /**\n     * The Guzzle major version.\n     */\n    public const MAJOR_VERSION = 7;\n\n    /**\n     * Send an HTTP request.\n     *\n     * @param RequestInterface $request Request to send\n     * @param array            $options Request options to apply to the given\n     *                                  request and to the transfer.\n     *\n     * @throws GuzzleException\n     */\n    public function send(RequestInterface $request, array $options = []): ResponseInterface;\n\n    /**\n     * Asynchronously send an HTTP request.\n     *\n     * @param RequestInterface $request Request to send\n     * @param array            $options Request options to apply to the given\n     *                                  request and to the transfer.\n     */\n    public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface;\n\n    /**\n     * Create and send an HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string              $method  HTTP method.\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function request(string $method, $uri, array $options = []): ResponseInterface;\n\n    /**\n     * Create and send an asynchronous HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string              $method  HTTP method\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function requestAsync(string $method, $uri, array $options = []): PromiseInterface;\n\n    /**\n     * Get a client configuration option.\n     *\n     * These options include default request options of the client, a \"handler\"\n     * (if utilized by the concrete client), and a \"base_uri\" if utilized by\n     * the concrete client.\n     *\n     * @param string|null $option The config option to retrieve.\n     *\n     * @return mixed\n     *\n     * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.\n     */\n    public function getConfig(?string $option = null);\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/ClientTrait.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Client interface for sending HTTP requests.\n */\ntrait ClientTrait\n{\n    /**\n     * Create and send an HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string              $method  HTTP method.\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    abstract public function request(string $method, $uri, array $options = []): ResponseInterface;\n\n    /**\n     * Create and send an HTTP GET request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function get($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('GET', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP HEAD request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function head($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('HEAD', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP PUT request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function put($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('PUT', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP POST request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function post($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('POST', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP PATCH request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function patch($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('PATCH', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP DELETE request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function delete($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('DELETE', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string              $method  HTTP method\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    abstract public function requestAsync(string $method, $uri, array $options = []): PromiseInterface;\n\n    /**\n     * Create and send an asynchronous HTTP GET request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function getAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('GET', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP HEAD request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function headAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('HEAD', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP PUT request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function putAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('PUT', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP POST request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function postAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('POST', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP PATCH request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function patchAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('PATCH', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP DELETE request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function deleteAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('DELETE', $uri, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Cookie jar that stores cookies as an array\n */\nclass CookieJar implements CookieJarInterface\n{\n    /**\n     * @var SetCookie[] Loaded cookie data\n     */\n    private $cookies = [];\n\n    /**\n     * @var bool\n     */\n    private $strictMode;\n\n    /**\n     * @param bool  $strictMode  Set to true to throw exceptions when invalid\n     *                           cookies are added to the cookie jar.\n     * @param array $cookieArray Array of SetCookie objects or a hash of\n     *                           arrays that can be used with the SetCookie\n     *                           constructor\n     */\n    public function __construct(bool $strictMode = false, array $cookieArray = [])\n    {\n        $this->strictMode = $strictMode;\n\n        foreach ($cookieArray as $cookie) {\n            if (!($cookie instanceof SetCookie)) {\n                $cookie = new SetCookie($cookie);\n            }\n            $this->setCookie($cookie);\n        }\n    }\n\n    /**\n     * Create a new Cookie jar from an associative array and domain.\n     *\n     * @param array  $cookies Cookies to create the jar from\n     * @param string $domain  Domain to set the cookies to\n     */\n    public static function fromArray(array $cookies, string $domain): self\n    {\n        $cookieJar = new self();\n        foreach ($cookies as $name => $value) {\n            $cookieJar->setCookie(new SetCookie([\n                'Domain' => $domain,\n                'Name' => $name,\n                'Value' => $value,\n                'Discard' => true,\n            ]));\n        }\n\n        return $cookieJar;\n    }\n\n    /**\n     * Evaluate if this cookie should be persisted to storage\n     * that survives between requests.\n     *\n     * @param SetCookie $cookie              Being evaluated.\n     * @param bool      $allowSessionCookies If we should persist session cookies\n     */\n    public static function shouldPersist(SetCookie $cookie, bool $allowSessionCookies = false): bool\n    {\n        if ($cookie->getExpires() || $allowSessionCookies) {\n            if (!$cookie->getDiscard()) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Finds and returns the cookie based on the name\n     *\n     * @param string $name cookie name to search for\n     *\n     * @return SetCookie|null cookie that was found or null if not found\n     */\n    public function getCookieByName(string $name): ?SetCookie\n    {\n        foreach ($this->cookies as $cookie) {\n            if ($cookie->getName() !== null && \\strcasecmp($cookie->getName(), $name) === 0) {\n                return $cookie;\n            }\n        }\n\n        return null;\n    }\n\n    public function toArray(): array\n    {\n        return \\array_map(static function (SetCookie $cookie): array {\n            return $cookie->toArray();\n        }, $this->getIterator()->getArrayCopy());\n    }\n\n    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void\n    {\n        if (!$domain) {\n            $this->cookies = [];\n\n            return;\n        } elseif (!$path) {\n            $this->cookies = \\array_filter(\n                $this->cookies,\n                static function (SetCookie $cookie) use ($domain): bool {\n                    return !$cookie->matchesDomain($domain);\n                }\n            );\n        } elseif (!$name) {\n            $this->cookies = \\array_filter(\n                $this->cookies,\n                static function (SetCookie $cookie) use ($path, $domain): bool {\n                    return !($cookie->matchesPath($path)\n                        && $cookie->matchesDomain($domain));\n                }\n            );\n        } else {\n            $this->cookies = \\array_filter(\n                $this->cookies,\n                static function (SetCookie $cookie) use ($path, $domain, $name) {\n                    return !($cookie->getName() == $name\n                        && $cookie->matchesPath($path)\n                        && $cookie->matchesDomain($domain));\n                }\n            );\n        }\n    }\n\n    public function clearSessionCookies(): void\n    {\n        $this->cookies = \\array_filter(\n            $this->cookies,\n            static function (SetCookie $cookie): bool {\n                return !$cookie->getDiscard() && $cookie->getExpires();\n            }\n        );\n    }\n\n    public function setCookie(SetCookie $cookie): bool\n    {\n        // If the name string is empty (but not 0), ignore the set-cookie\n        // string entirely.\n        $name = $cookie->getName();\n        if (!$name && $name !== '0') {\n            return false;\n        }\n\n        // Only allow cookies with set and valid domain, name, value\n        $result = $cookie->validate();\n        if ($result !== true) {\n            if ($this->strictMode) {\n                throw new \\RuntimeException('Invalid cookie: '.$result);\n            }\n            $this->removeCookieIfEmpty($cookie);\n\n            return false;\n        }\n\n        // Resolve conflicts with previously set cookies\n        foreach ($this->cookies as $i => $c) {\n            // Two cookies are identical, when their path, and domain are\n            // identical.\n            if ($c->getPath() != $cookie->getPath()\n                || $c->getDomain() != $cookie->getDomain()\n                || $c->getName() != $cookie->getName()\n            ) {\n                continue;\n            }\n\n            // The previously set cookie is a discard cookie and this one is\n            // not so allow the new cookie to be set\n            if (!$cookie->getDiscard() && $c->getDiscard()) {\n                unset($this->cookies[$i]);\n                continue;\n            }\n\n            // If the new cookie's expiration is further into the future, then\n            // replace the old cookie\n            if ($cookie->getExpires() > $c->getExpires()) {\n                unset($this->cookies[$i]);\n                continue;\n            }\n\n            // If the value has changed, we better change it\n            if ($cookie->getValue() !== $c->getValue()) {\n                unset($this->cookies[$i]);\n                continue;\n            }\n\n            // The cookie exists, so no need to continue\n            return false;\n        }\n\n        $this->cookies[] = $cookie;\n\n        return true;\n    }\n\n    public function count(): int\n    {\n        return \\count($this->cookies);\n    }\n\n    /**\n     * @return \\ArrayIterator<int, SetCookie>\n     */\n    public function getIterator(): \\ArrayIterator\n    {\n        return new \\ArrayIterator(\\array_values($this->cookies));\n    }\n\n    public function extractCookies(RequestInterface $request, ResponseInterface $response): void\n    {\n        if ($cookieHeader = $response->getHeader('Set-Cookie')) {\n            foreach ($cookieHeader as $cookie) {\n                $sc = SetCookie::fromString($cookie);\n                if (!$sc->getDomain()) {\n                    $sc->setDomain($request->getUri()->getHost());\n                }\n                if (0 !== \\strpos($sc->getPath(), '/')) {\n                    $sc->setPath($this->getCookiePathFromRequest($request));\n                }\n                if (!$sc->matchesDomain($request->getUri()->getHost())) {\n                    continue;\n                }\n                // Note: At this point `$sc->getDomain()` being a public suffix should\n                // be rejected, but we don't want to pull in the full PSL dependency.\n                $this->setCookie($sc);\n            }\n        }\n    }\n\n    /**\n     * Computes cookie path following RFC 6265 section 5.1.4\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4\n     */\n    private function getCookiePathFromRequest(RequestInterface $request): string\n    {\n        $uriPath = $request->getUri()->getPath();\n        if ('' === $uriPath) {\n            return '/';\n        }\n        if (0 !== \\strpos($uriPath, '/')) {\n            return '/';\n        }\n        if ('/' === $uriPath) {\n            return '/';\n        }\n        $lastSlashPos = \\strrpos($uriPath, '/');\n        if (0 === $lastSlashPos || false === $lastSlashPos) {\n            return '/';\n        }\n\n        return \\substr($uriPath, 0, $lastSlashPos);\n    }\n\n    public function withCookieHeader(RequestInterface $request): RequestInterface\n    {\n        $values = [];\n        $uri = $request->getUri();\n        $scheme = $uri->getScheme();\n        $host = $uri->getHost();\n        $path = $uri->getPath() ?: '/';\n\n        foreach ($this->cookies as $cookie) {\n            if ($cookie->matchesPath($path)\n                && $cookie->matchesDomain($host)\n                && !$cookie->isExpired()\n                && (!$cookie->getSecure() || $scheme === 'https')\n            ) {\n                $values[] = $cookie->getName().'='\n                    .$cookie->getValue();\n            }\n        }\n\n        return $values\n            ? $request->withHeader('Cookie', \\implode('; ', $values))\n            : $request;\n    }\n\n    /**\n     * If a cookie already exists and the server asks to set it again with a\n     * null value, the cookie must be deleted.\n     */\n    private function removeCookieIfEmpty(SetCookie $cookie): void\n    {\n        $cookieValue = $cookie->getValue();\n        if ($cookieValue === null || $cookieValue === '') {\n            $this->clear(\n                $cookie->getDomain(),\n                $cookie->getPath(),\n                $cookie->getName()\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Stores HTTP cookies.\n *\n * It extracts cookies from HTTP requests, and returns them in HTTP responses.\n * CookieJarInterface instances automatically expire contained cookies when\n * necessary. Subclasses are also responsible for storing and retrieving\n * cookies from a file, database, etc.\n *\n * @see https://docs.python.org/2/library/cookielib.html Inspiration\n *\n * @extends \\IteratorAggregate<SetCookie>\n */\ninterface CookieJarInterface extends \\Countable, \\IteratorAggregate\n{\n    /**\n     * Create a request with added cookie headers.\n     *\n     * If no matching cookies are found in the cookie jar, then no Cookie\n     * header is added to the request and the same request is returned.\n     *\n     * @param RequestInterface $request Request object to modify.\n     *\n     * @return RequestInterface returns the modified request.\n     */\n    public function withCookieHeader(RequestInterface $request): RequestInterface;\n\n    /**\n     * Extract cookies from an HTTP response and store them in the CookieJar.\n     *\n     * @param RequestInterface  $request  Request that was sent\n     * @param ResponseInterface $response Response that was received\n     */\n    public function extractCookies(RequestInterface $request, ResponseInterface $response): void;\n\n    /**\n     * Sets a cookie in the cookie jar.\n     *\n     * @param SetCookie $cookie Cookie to set.\n     *\n     * @return bool Returns true on success or false on failure\n     */\n    public function setCookie(SetCookie $cookie): bool;\n\n    /**\n     * Remove cookies currently held in the cookie jar.\n     *\n     * Invoking this method without arguments will empty the whole cookie jar.\n     * If given a $domain argument only cookies belonging to that domain will\n     * be removed. If given a $domain and $path argument, cookies belonging to\n     * the specified path within that domain are removed. If given all three\n     * arguments, then the cookie with the specified name, path and domain is\n     * removed.\n     *\n     * @param string|null $domain Clears cookies matching a domain\n     * @param string|null $path   Clears cookies matching a domain and path\n     * @param string|null $name   Clears cookies matching a domain, path, and name\n     */\n    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void;\n\n    /**\n     * Discard all sessions cookies.\n     *\n     * Removes cookies that don't have an expire field or a have a discard\n     * field set to true. To be called when the user agent shuts down according\n     * to RFC 2965.\n     */\n    public function clearSessionCookies(): void;\n\n    /**\n     * Converts the cookie jar to an array.\n     */\n    public function toArray(): array;\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\nuse GuzzleHttp\\Utils;\n\n/**\n * Persists non-session cookies using a JSON formatted file\n */\nclass FileCookieJar extends CookieJar\n{\n    /**\n     * @var string filename\n     */\n    private $filename;\n\n    /**\n     * @var bool Control whether to persist session cookies or not.\n     */\n    private $storeSessionCookies;\n\n    /**\n     * Create a new FileCookieJar object\n     *\n     * @param string $cookieFile          File to store the cookie data\n     * @param bool   $storeSessionCookies Set to true to store session cookies\n     *                                    in the cookie jar.\n     *\n     * @throws \\RuntimeException if the file cannot be found or created\n     */\n    public function __construct(string $cookieFile, bool $storeSessionCookies = false)\n    {\n        parent::__construct();\n        $this->filename = $cookieFile;\n        $this->storeSessionCookies = $storeSessionCookies;\n\n        if (\\file_exists($cookieFile)) {\n            $this->load($cookieFile);\n        }\n    }\n\n    /**\n     * Saves the file when shutting down\n     */\n    public function __destruct()\n    {\n        $this->save($this->filename);\n    }\n\n    /**\n     * Saves the cookies to a file.\n     *\n     * @param string $filename File to save\n     *\n     * @throws \\RuntimeException if the file cannot be found or created\n     */\n    public function save(string $filename): void\n    {\n        $json = [];\n        /** @var SetCookie $cookie */\n        foreach ($this as $cookie) {\n            if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {\n                $json[] = $cookie->toArray();\n            }\n        }\n\n        $jsonStr = Utils::jsonEncode($json);\n        if (false === \\file_put_contents($filename, $jsonStr, \\LOCK_EX)) {\n            throw new \\RuntimeException(\"Unable to save file {$filename}\");\n        }\n    }\n\n    /**\n     * Load cookies from a JSON formatted file.\n     *\n     * Old cookies are kept unless overwritten by newly loaded ones.\n     *\n     * @param string $filename Cookie file to load.\n     *\n     * @throws \\RuntimeException if the file cannot be loaded.\n     */\n    public function load(string $filename): void\n    {\n        $json = \\file_get_contents($filename);\n        if (false === $json) {\n            throw new \\RuntimeException(\"Unable to load file {$filename}\");\n        }\n        if ($json === '') {\n            return;\n        }\n\n        $data = Utils::jsonDecode($json, true);\n        if (\\is_array($data)) {\n            foreach ($data as $cookie) {\n                $this->setCookie(new SetCookie($cookie));\n            }\n        } elseif (\\is_scalar($data) && !empty($data)) {\n            throw new \\RuntimeException(\"Invalid cookie file: {$filename}\");\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\n/**\n * Persists cookies in the client session\n */\nclass SessionCookieJar extends CookieJar\n{\n    /**\n     * @var string session key\n     */\n    private $sessionKey;\n\n    /**\n     * @var bool Control whether to persist session cookies or not.\n     */\n    private $storeSessionCookies;\n\n    /**\n     * Create a new SessionCookieJar object\n     *\n     * @param string $sessionKey          Session key name to store the cookie\n     *                                    data in session\n     * @param bool   $storeSessionCookies Set to true to store session cookies\n     *                                    in the cookie jar.\n     */\n    public function __construct(string $sessionKey, bool $storeSessionCookies = false)\n    {\n        parent::__construct();\n        $this->sessionKey = $sessionKey;\n        $this->storeSessionCookies = $storeSessionCookies;\n        $this->load();\n    }\n\n    /**\n     * Saves cookies to session when shutting down\n     */\n    public function __destruct()\n    {\n        $this->save();\n    }\n\n    /**\n     * Save cookies to the client session\n     */\n    public function save(): void\n    {\n        $json = [];\n        /** @var SetCookie $cookie */\n        foreach ($this as $cookie) {\n            if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {\n                $json[] = $cookie->toArray();\n            }\n        }\n\n        $_SESSION[$this->sessionKey] = \\json_encode($json);\n    }\n\n    /**\n     * Load the contents of the client session into the data array\n     */\n    protected function load(): void\n    {\n        if (!isset($_SESSION[$this->sessionKey])) {\n            return;\n        }\n        $data = \\json_decode($_SESSION[$this->sessionKey], true);\n        if (\\is_array($data)) {\n            foreach ($data as $cookie) {\n                $this->setCookie(new SetCookie($cookie));\n            }\n        } elseif (\\strlen($data)) {\n            throw new \\RuntimeException('Invalid cookie data');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\n/**\n * Set-Cookie object\n */\nclass SetCookie\n{\n    /**\n     * @var array\n     */\n    private static $defaults = [\n        'Name' => null,\n        'Value' => null,\n        'Domain' => null,\n        'Path' => '/',\n        'Max-Age' => null,\n        'Expires' => null,\n        'Secure' => false,\n        'Discard' => false,\n        'HttpOnly' => false,\n    ];\n\n    /**\n     * @var array Cookie data\n     */\n    private $data;\n\n    /**\n     * Create a new SetCookie object from a string.\n     *\n     * @param string $cookie Set-Cookie header string\n     */\n    public static function fromString(string $cookie): self\n    {\n        // Create the default return array\n        $data = self::$defaults;\n        // Explode the cookie string using a series of semicolons\n        $pieces = \\array_filter(\\array_map('trim', \\explode(';', $cookie)));\n        // The name of the cookie (first kvp) must exist and include an equal sign.\n        if (!isset($pieces[0]) || \\strpos($pieces[0], '=') === false) {\n            return new self($data);\n        }\n\n        // Add the cookie pieces into the parsed data array\n        foreach ($pieces as $part) {\n            $cookieParts = \\explode('=', $part, 2);\n            $key = \\trim($cookieParts[0]);\n            $value = isset($cookieParts[1])\n                ? \\trim($cookieParts[1], \" \\n\\r\\t\\0\\x0B\")\n                : true;\n\n            // Only check for non-cookies when cookies have been found\n            if (!isset($data['Name'])) {\n                $data['Name'] = $key;\n                $data['Value'] = $value;\n            } else {\n                foreach (\\array_keys(self::$defaults) as $search) {\n                    if (!\\strcasecmp($search, $key)) {\n                        if ($search === 'Max-Age') {\n                            if (is_numeric($value)) {\n                                $data[$search] = (int) $value;\n                            }\n                        } elseif ($search === 'Secure' || $search === 'Discard' || $search === 'HttpOnly') {\n                            if ($value) {\n                                $data[$search] = true;\n                            }\n                        } else {\n                            $data[$search] = $value;\n                        }\n                        continue 2;\n                    }\n                }\n                $data[$key] = $value;\n            }\n        }\n\n        return new self($data);\n    }\n\n    /**\n     * @param array $data Array of cookie data provided by a Cookie parser\n     */\n    public function __construct(array $data = [])\n    {\n        $this->data = self::$defaults;\n\n        if (isset($data['Name'])) {\n            $this->setName($data['Name']);\n        }\n\n        if (isset($data['Value'])) {\n            $this->setValue($data['Value']);\n        }\n\n        if (isset($data['Domain'])) {\n            $this->setDomain($data['Domain']);\n        }\n\n        if (isset($data['Path'])) {\n            $this->setPath($data['Path']);\n        }\n\n        if (isset($data['Max-Age'])) {\n            $this->setMaxAge($data['Max-Age']);\n        }\n\n        if (isset($data['Expires'])) {\n            $this->setExpires($data['Expires']);\n        }\n\n        if (isset($data['Secure'])) {\n            $this->setSecure($data['Secure']);\n        }\n\n        if (isset($data['Discard'])) {\n            $this->setDiscard($data['Discard']);\n        }\n\n        if (isset($data['HttpOnly'])) {\n            $this->setHttpOnly($data['HttpOnly']);\n        }\n\n        // Set the remaining values that don't have extra validation logic\n        foreach (array_diff(array_keys($data), array_keys(self::$defaults)) as $key) {\n            $this->data[$key] = $data[$key];\n        }\n\n        // Extract the Expires value and turn it into a UNIX timestamp if needed\n        if (!$this->getExpires() && $this->getMaxAge()) {\n            // Calculate the Expires date\n            $this->setExpires(\\time() + $this->getMaxAge());\n        } elseif (null !== ($expires = $this->getExpires()) && !\\is_numeric($expires)) {\n            $this->setExpires($expires);\n        }\n    }\n\n    public function __toString()\n    {\n        $str = $this->data['Name'].'='.($this->data['Value'] ?? '').'; ';\n        foreach ($this->data as $k => $v) {\n            if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {\n                if ($k === 'Expires') {\n                    $str .= 'Expires='.\\gmdate('D, d M Y H:i:s \\G\\M\\T', $v).'; ';\n                } else {\n                    $str .= ($v === true ? $k : \"{$k}={$v}\").'; ';\n                }\n            }\n        }\n\n        return \\rtrim($str, '; ');\n    }\n\n    public function toArray(): array\n    {\n        return $this->data;\n    }\n\n    /**\n     * Get the cookie name.\n     *\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->data['Name'];\n    }\n\n    /**\n     * Set the cookie name.\n     *\n     * @param string $name Cookie name\n     */\n    public function setName($name): void\n    {\n        if (!is_string($name)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Name'] = (string) $name;\n    }\n\n    /**\n     * Get the cookie value.\n     *\n     * @return string|null\n     */\n    public function getValue()\n    {\n        return $this->data['Value'];\n    }\n\n    /**\n     * Set the cookie value.\n     *\n     * @param string $value Cookie value\n     */\n    public function setValue($value): void\n    {\n        if (!is_string($value)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Value'] = (string) $value;\n    }\n\n    /**\n     * Get the domain.\n     *\n     * @return string|null\n     */\n    public function getDomain()\n    {\n        return $this->data['Domain'];\n    }\n\n    /**\n     * Set the domain of the cookie.\n     *\n     * @param string|null $domain\n     */\n    public function setDomain($domain): void\n    {\n        if (!is_string($domain) && null !== $domain) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Domain'] = null === $domain ? null : (string) $domain;\n    }\n\n    /**\n     * Get the path.\n     *\n     * @return string\n     */\n    public function getPath()\n    {\n        return $this->data['Path'];\n    }\n\n    /**\n     * Set the path of the cookie.\n     *\n     * @param string $path Path of the cookie\n     */\n    public function setPath($path): void\n    {\n        if (!is_string($path)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Path'] = (string) $path;\n    }\n\n    /**\n     * Maximum lifetime of the cookie in seconds.\n     *\n     * @return int|null\n     */\n    public function getMaxAge()\n    {\n        return null === $this->data['Max-Age'] ? null : (int) $this->data['Max-Age'];\n    }\n\n    /**\n     * Set the max-age of the cookie.\n     *\n     * @param int|null $maxAge Max age of the cookie in seconds\n     */\n    public function setMaxAge($maxAge): void\n    {\n        if (!is_int($maxAge) && null !== $maxAge) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Max-Age'] = $maxAge === null ? null : (int) $maxAge;\n    }\n\n    /**\n     * The UNIX timestamp when the cookie Expires.\n     *\n     * @return string|int|null\n     */\n    public function getExpires()\n    {\n        return $this->data['Expires'];\n    }\n\n    /**\n     * Set the unix timestamp for which the cookie will expire.\n     *\n     * @param int|string|null $timestamp Unix timestamp or any English textual datetime description.\n     */\n    public function setExpires($timestamp): void\n    {\n        if (!is_int($timestamp) && !is_string($timestamp) && null !== $timestamp) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int, string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Expires'] = null === $timestamp ? null : (\\is_numeric($timestamp) ? (int) $timestamp : \\strtotime((string) $timestamp));\n    }\n\n    /**\n     * Get whether or not this is a secure cookie.\n     *\n     * @return bool\n     */\n    public function getSecure()\n    {\n        return $this->data['Secure'];\n    }\n\n    /**\n     * Set whether or not the cookie is secure.\n     *\n     * @param bool $secure Set to true or false if secure\n     */\n    public function setSecure($secure): void\n    {\n        if (!is_bool($secure)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Secure'] = (bool) $secure;\n    }\n\n    /**\n     * Get whether or not this is a session cookie.\n     *\n     * @return bool|null\n     */\n    public function getDiscard()\n    {\n        return $this->data['Discard'];\n    }\n\n    /**\n     * Set whether or not this is a session cookie.\n     *\n     * @param bool $discard Set to true or false if this is a session cookie\n     */\n    public function setDiscard($discard): void\n    {\n        if (!is_bool($discard)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Discard'] = (bool) $discard;\n    }\n\n    /**\n     * Get whether or not this is an HTTP only cookie.\n     *\n     * @return bool\n     */\n    public function getHttpOnly()\n    {\n        return $this->data['HttpOnly'];\n    }\n\n    /**\n     * Set whether or not this is an HTTP only cookie.\n     *\n     * @param bool $httpOnly Set to true or false if this is HTTP only\n     */\n    public function setHttpOnly($httpOnly): void\n    {\n        if (!is_bool($httpOnly)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['HttpOnly'] = (bool) $httpOnly;\n    }\n\n    /**\n     * Check if the cookie matches a path value.\n     *\n     * A request-path path-matches a given cookie-path if at least one of\n     * the following conditions holds:\n     *\n     * - The cookie-path and the request-path are identical.\n     * - The cookie-path is a prefix of the request-path, and the last\n     *   character of the cookie-path is %x2F (\"/\").\n     * - The cookie-path is a prefix of the request-path, and the first\n     *   character of the request-path that is not included in the cookie-\n     *   path is a %x2F (\"/\") character.\n     *\n     * @param string $requestPath Path to check against\n     */\n    public function matchesPath(string $requestPath): bool\n    {\n        $cookiePath = $this->getPath();\n\n        // Match on exact matches or when path is the default empty \"/\"\n        if ($cookiePath === '/' || $cookiePath == $requestPath) {\n            return true;\n        }\n\n        // Ensure that the cookie-path is a prefix of the request path.\n        if (0 !== \\strpos($requestPath, $cookiePath)) {\n            return false;\n        }\n\n        // Match if the last character of the cookie-path is \"/\"\n        if (\\substr($cookiePath, -1, 1) === '/') {\n            return true;\n        }\n\n        // Match if the first character not included in cookie path is \"/\"\n        return \\substr($requestPath, \\strlen($cookiePath), 1) === '/';\n    }\n\n    /**\n     * Check if the cookie matches a domain value.\n     *\n     * @param string $domain Domain to check against\n     */\n    public function matchesDomain(string $domain): bool\n    {\n        $cookieDomain = $this->getDomain();\n        if (null === $cookieDomain) {\n            return true;\n        }\n\n        // Remove the leading '.' as per spec in RFC 6265.\n        // https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.3\n        $cookieDomain = \\ltrim(\\strtolower($cookieDomain), '.');\n\n        $domain = \\strtolower($domain);\n\n        // Domain not set or exact match.\n        if ('' === $cookieDomain || $domain === $cookieDomain) {\n            return true;\n        }\n\n        // Matching the subdomain according to RFC 6265.\n        // https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.3\n        if (\\filter_var($domain, \\FILTER_VALIDATE_IP)) {\n            return false;\n        }\n\n        return (bool) \\preg_match('/\\.'.\\preg_quote($cookieDomain, '/').'$/', $domain);\n    }\n\n    /**\n     * Check if the cookie is expired.\n     */\n    public function isExpired(): bool\n    {\n        return $this->getExpires() !== null && \\time() > $this->getExpires();\n    }\n\n    /**\n     * Check if the cookie is valid according to RFC 6265.\n     *\n     * @return bool|string Returns true if valid or an error message if invalid\n     */\n    public function validate()\n    {\n        $name = $this->getName();\n        if ($name === '') {\n            return 'The cookie name must not be empty';\n        }\n\n        // Check if any of the invalid characters are present in the cookie name\n        if (\\preg_match(\n            '/[\\x00-\\x20\\x22\\x28-\\x29\\x2c\\x2f\\x3a-\\x40\\x5c\\x7b\\x7d\\x7f]/',\n            $name\n        )) {\n            return 'Cookie name must not contain invalid characters: ASCII '\n                .'Control characters (0-31;127), space, tab and the '\n                .'following characters: ()<>@,;:\\\"/?={}';\n        }\n\n        // Value must not be null. 0 and empty string are valid. Empty strings\n        // are technically against RFC 6265, but known to happen in the wild.\n        $value = $this->getValue();\n        if ($value === null) {\n            return 'The cookie value must not be empty';\n        }\n\n        // Domains must not be empty, but can be 0. \"0\" is not a valid internet\n        // domain, but may be used as server name in a private network.\n        $domain = $this->getDomain();\n        if ($domain === null || $domain === '') {\n            return 'The cookie domain must not be empty';\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Exception when an HTTP error occurs (4xx or 5xx error)\n */\nclass BadResponseException extends RequestException\n{\n    public function __construct(\n        string $message,\n        RequestInterface $request,\n        ResponseInterface $response,\n        ?\\Throwable $previous = null,\n        array $handlerContext = []\n    ) {\n        parent::__construct($message, $request, $response, $previous, $handlerContext);\n    }\n\n    /**\n     * Current exception and the ones that extend it will always have a response.\n     */\n    public function hasResponse(): bool\n    {\n        return true;\n    }\n\n    /**\n     * This function narrows the return type from the parent class and does not allow it to be nullable.\n     */\n    public function getResponse(): ResponseInterface\n    {\n        /** @var ResponseInterface */\n        return parent::getResponse();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\n/**\n * Exception when a client error is encountered (4xx codes)\n */\nclass ClientException extends BadResponseException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse Psr\\Http\\Client\\NetworkExceptionInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Exception thrown when a connection cannot be established.\n *\n * Note that no response is present for a ConnectException\n */\nclass ConnectException extends TransferException implements NetworkExceptionInterface\n{\n    /**\n     * @var RequestInterface\n     */\n    private $request;\n\n    /**\n     * @var array\n     */\n    private $handlerContext;\n\n    public function __construct(\n        string $message,\n        RequestInterface $request,\n        ?\\Throwable $previous = null,\n        array $handlerContext = []\n    ) {\n        parent::__construct($message, 0, $previous);\n        $this->request = $request;\n        $this->handlerContext = $handlerContext;\n    }\n\n    /**\n     * Get the request that caused the exception\n     */\n    public function getRequest(): RequestInterface\n    {\n        return $this->request;\n    }\n\n    /**\n     * Get contextual information about the error from the underlying handler.\n     *\n     * The contents of this array will vary depending on which handler you are\n     * using. It may also be just an empty array. Relying on this data will\n     * couple you to a specific handler, but can give more debug information\n     * when needed.\n     */\n    public function getHandlerContext(): array\n    {\n        return $this->handlerContext;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse Psr\\Http\\Client\\ClientExceptionInterface;\n\ninterface GuzzleException extends ClientExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nfinal class InvalidArgumentException extends \\InvalidArgumentException implements GuzzleException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse GuzzleHttp\\BodySummarizer;\nuse GuzzleHttp\\BodySummarizerInterface;\nuse Psr\\Http\\Client\\RequestExceptionInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * HTTP Request exception\n */\nclass RequestException extends TransferException implements RequestExceptionInterface\n{\n    /**\n     * @var RequestInterface\n     */\n    private $request;\n\n    /**\n     * @var ResponseInterface|null\n     */\n    private $response;\n\n    /**\n     * @var array\n     */\n    private $handlerContext;\n\n    public function __construct(\n        string $message,\n        RequestInterface $request,\n        ?ResponseInterface $response = null,\n        ?\\Throwable $previous = null,\n        array $handlerContext = []\n    ) {\n        // Set the code of the exception if the response is set and not future.\n        $code = $response ? $response->getStatusCode() : 0;\n        parent::__construct($message, $code, $previous);\n        $this->request = $request;\n        $this->response = $response;\n        $this->handlerContext = $handlerContext;\n    }\n\n    /**\n     * Wrap non-RequestExceptions with a RequestException\n     */\n    public static function wrapException(RequestInterface $request, \\Throwable $e): RequestException\n    {\n        return $e instanceof RequestException ? $e : new RequestException($e->getMessage(), $request, null, $e);\n    }\n\n    /**\n     * Factory method to create a new exception with a normalized error message\n     *\n     * @param RequestInterface             $request        Request sent\n     * @param ResponseInterface            $response       Response received\n     * @param \\Throwable|null              $previous       Previous exception\n     * @param array                        $handlerContext Optional handler context\n     * @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer\n     */\n    public static function create(\n        RequestInterface $request,\n        ?ResponseInterface $response = null,\n        ?\\Throwable $previous = null,\n        array $handlerContext = [],\n        ?BodySummarizerInterface $bodySummarizer = null\n    ): self {\n        if (!$response) {\n            return new self(\n                'Error completing request',\n                $request,\n                null,\n                $previous,\n                $handlerContext\n            );\n        }\n\n        $level = (int) \\floor($response->getStatusCode() / 100);\n        if ($level === 4) {\n            $label = 'Client error';\n            $className = ClientException::class;\n        } elseif ($level === 5) {\n            $label = 'Server error';\n            $className = ServerException::class;\n        } else {\n            $label = 'Unsuccessful request';\n            $className = __CLASS__;\n        }\n\n        $uri = \\GuzzleHttp\\Psr7\\Utils::redactUserInfo($request->getUri());\n\n        // Client Error: `GET /` resulted in a `404 Not Found` response:\n        // <html> ... (truncated)\n        $message = \\sprintf(\n            '%s: `%s %s` resulted in a `%s %s` response',\n            $label,\n            $request->getMethod(),\n            $uri->__toString(),\n            $response->getStatusCode(),\n            $response->getReasonPhrase()\n        );\n\n        $summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response);\n\n        if ($summary !== null) {\n            $message .= \":\\n{$summary}\\n\";\n        }\n\n        return new $className($message, $request, $response, $previous, $handlerContext);\n    }\n\n    /**\n     * Get the request that caused the exception\n     */\n    public function getRequest(): RequestInterface\n    {\n        return $this->request;\n    }\n\n    /**\n     * Get the associated response\n     */\n    public function getResponse(): ?ResponseInterface\n    {\n        return $this->response;\n    }\n\n    /**\n     * Check if a response was received\n     */\n    public function hasResponse(): bool\n    {\n        return $this->response !== null;\n    }\n\n    /**\n     * Get contextual information about the error from the underlying handler.\n     *\n     * The contents of this array will vary depending on which handler you are\n     * using. It may also be just an empty array. Relying on this data will\n     * couple you to a specific handler, but can give more debug information\n     * when needed.\n     */\n    public function getHandlerContext(): array\n    {\n        return $this->handlerContext;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\n/**\n * Exception when a server error is encountered (5xx codes)\n */\nclass ServerException extends BadResponseException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nclass TooManyRedirectsException extends RequestException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nclass TransferException extends \\RuntimeException implements GuzzleException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Exception\\ConnectException;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\FulfilledPromise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\LazyOpenStream;\nuse GuzzleHttp\\TransferStats;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Creates curl resources from a request\n *\n * @final\n */\nclass CurlFactory implements CurlFactoryInterface\n{\n    public const CURL_VERSION_STR = 'curl_version';\n\n    /**\n     * @deprecated\n     */\n    public const LOW_CURL_VERSION_NUMBER = '7.21.2';\n\n    /**\n     * @var resource[]|\\CurlHandle[]\n     */\n    private $handles = [];\n\n    /**\n     * @var int Total number of idle handles to keep in cache\n     */\n    private $maxHandles;\n\n    /**\n     * @param int $maxHandles Maximum number of idle handles.\n     */\n    public function __construct(int $maxHandles)\n    {\n        $this->maxHandles = $maxHandles;\n    }\n\n    public function create(RequestInterface $request, array $options): EasyHandle\n    {\n        $protocolVersion = $request->getProtocolVersion();\n\n        if ('2' === $protocolVersion || '2.0' === $protocolVersion) {\n            if (!self::supportsHttp2()) {\n                throw new ConnectException('HTTP/2 is supported by the cURL handler, however libcurl is built without HTTP/2 support.', $request);\n            }\n        } elseif ('1.0' !== $protocolVersion && '1.1' !== $protocolVersion) {\n            throw new ConnectException(sprintf('HTTP/%s is not supported by the cURL handler.', $protocolVersion), $request);\n        }\n\n        if (isset($options['curl']['body_as_string'])) {\n            $options['_body_as_string'] = $options['curl']['body_as_string'];\n            unset($options['curl']['body_as_string']);\n        }\n\n        $easy = new EasyHandle();\n        $easy->request = $request;\n        $easy->options = $options;\n        $conf = $this->getDefaultConf($easy);\n        $this->applyMethod($easy, $conf);\n        $this->applyHandlerOptions($easy, $conf);\n        $this->applyHeaders($easy, $conf);\n        unset($conf['_headers']);\n\n        // Add handler options from the request configuration options\n        if (isset($options['curl'])) {\n            $conf = \\array_replace($conf, $options['curl']);\n        }\n\n        $conf[\\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy);\n        $easy->handle = $this->handles ? \\array_pop($this->handles) : \\curl_init();\n        curl_setopt_array($easy->handle, $conf);\n\n        return $easy;\n    }\n\n    private static function supportsHttp2(): bool\n    {\n        static $supportsHttp2 = null;\n\n        if (null === $supportsHttp2) {\n            $supportsHttp2 = self::supportsTls12()\n                && defined('CURL_VERSION_HTTP2')\n                && (\\CURL_VERSION_HTTP2 & \\curl_version()['features']);\n        }\n\n        return $supportsHttp2;\n    }\n\n    private static function supportsTls12(): bool\n    {\n        static $supportsTls12 = null;\n\n        if (null === $supportsTls12) {\n            $supportsTls12 = \\CURL_SSLVERSION_TLSv1_2 & \\curl_version()['features'];\n        }\n\n        return $supportsTls12;\n    }\n\n    private static function supportsTls13(): bool\n    {\n        static $supportsTls13 = null;\n\n        if (null === $supportsTls13) {\n            $supportsTls13 = defined('CURL_SSLVERSION_TLSv1_3')\n                && (\\CURL_SSLVERSION_TLSv1_3 & \\curl_version()['features']);\n        }\n\n        return $supportsTls13;\n    }\n\n    public function release(EasyHandle $easy): void\n    {\n        $resource = $easy->handle;\n        unset($easy->handle);\n\n        if (\\count($this->handles) >= $this->maxHandles) {\n            if (PHP_VERSION_ID < 80000) {\n                \\curl_close($resource);\n            }\n        } else {\n            // Remove all callback functions as they can hold onto references\n            // and are not cleaned up by curl_reset. Using curl_setopt_array\n            // does not work for some reason, so removing each one\n            // individually.\n            \\curl_setopt($resource, \\CURLOPT_HEADERFUNCTION, null);\n            \\curl_setopt($resource, \\CURLOPT_READFUNCTION, null);\n            \\curl_setopt($resource, \\CURLOPT_WRITEFUNCTION, null);\n            \\curl_setopt($resource, \\CURLOPT_PROGRESSFUNCTION, null);\n            \\curl_reset($resource);\n            $this->handles[] = $resource;\n        }\n    }\n\n    /**\n     * Completes a cURL transaction, either returning a response promise or a\n     * rejected promise.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $handler\n     * @param CurlFactoryInterface                                $factory Dictates how the handle is released\n     */\n    public static function finish(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface\n    {\n        if (isset($easy->options['on_stats'])) {\n            self::invokeStats($easy);\n        }\n\n        if (!$easy->response || $easy->errno) {\n            return self::finishError($handler, $easy, $factory);\n        }\n\n        // Return the response if it is present and there is no error.\n        $factory->release($easy);\n\n        // Rewind the body of the response if possible.\n        $body = $easy->response->getBody();\n        if ($body->isSeekable()) {\n            $body->rewind();\n        }\n\n        return new FulfilledPromise($easy->response);\n    }\n\n    private static function invokeStats(EasyHandle $easy): void\n    {\n        $curlStats = \\curl_getinfo($easy->handle);\n        $curlStats['appconnect_time'] = \\curl_getinfo($easy->handle, \\CURLINFO_APPCONNECT_TIME);\n        $stats = new TransferStats(\n            $easy->request,\n            $easy->response,\n            $curlStats['total_time'],\n            $easy->errno,\n            $curlStats\n        );\n        ($easy->options['on_stats'])($stats);\n    }\n\n    /**\n     * @param callable(RequestInterface, array): PromiseInterface $handler\n     */\n    private static function finishError(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface\n    {\n        // Get error information and release the handle to the factory.\n        $ctx = [\n            'errno' => $easy->errno,\n            'error' => \\curl_error($easy->handle),\n            'appconnect_time' => \\curl_getinfo($easy->handle, \\CURLINFO_APPCONNECT_TIME),\n        ] + \\curl_getinfo($easy->handle);\n        $ctx[self::CURL_VERSION_STR] = self::getCurlVersion();\n        $factory->release($easy);\n\n        // Retry when nothing is present or when curl failed to rewind.\n        if (empty($easy->options['_err_message']) && (!$easy->errno || $easy->errno == 65)) {\n            return self::retryFailedRewind($handler, $easy, $ctx);\n        }\n\n        return self::createRejection($easy, $ctx);\n    }\n\n    private static function getCurlVersion(): string\n    {\n        static $curlVersion = null;\n\n        if (null === $curlVersion) {\n            $curlVersion = \\curl_version()['version'];\n        }\n\n        return $curlVersion;\n    }\n\n    private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface\n    {\n        static $connectionErrors = [\n            \\CURLE_OPERATION_TIMEOUTED => true,\n            \\CURLE_COULDNT_RESOLVE_HOST => true,\n            \\CURLE_COULDNT_CONNECT => true,\n            \\CURLE_SSL_CONNECT_ERROR => true,\n            \\CURLE_GOT_NOTHING => true,\n        ];\n\n        if ($easy->createResponseException) {\n            return P\\Create::rejectionFor(\n                new RequestException(\n                    'An error was encountered while creating the response',\n                    $easy->request,\n                    $easy->response,\n                    $easy->createResponseException,\n                    $ctx\n                )\n            );\n        }\n\n        // If an exception was encountered during the onHeaders event, then\n        // return a rejected promise that wraps that exception.\n        if ($easy->onHeadersException) {\n            return P\\Create::rejectionFor(\n                new RequestException(\n                    'An error was encountered during the on_headers event',\n                    $easy->request,\n                    $easy->response,\n                    $easy->onHeadersException,\n                    $ctx\n                )\n            );\n        }\n\n        $uri = $easy->request->getUri();\n\n        $sanitizedError = self::sanitizeCurlError($ctx['error'] ?? '', $uri);\n\n        $message = \\sprintf(\n            'cURL error %s: %s (%s)',\n            $ctx['errno'],\n            $sanitizedError,\n            'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'\n        );\n\n        if ('' !== $sanitizedError) {\n            $redactedUriString = \\GuzzleHttp\\Psr7\\Utils::redactUserInfo($uri)->__toString();\n            if ($redactedUriString !== '' && false === \\strpos($sanitizedError, $redactedUriString)) {\n                $message .= \\sprintf(' for %s', $redactedUriString);\n            }\n        }\n\n        // Create a connection exception if it was a specific error code.\n        $error = isset($connectionErrors[$easy->errno])\n            ? new ConnectException($message, $easy->request, null, $ctx)\n            : new RequestException($message, $easy->request, $easy->response, null, $ctx);\n\n        return P\\Create::rejectionFor($error);\n    }\n\n    private static function sanitizeCurlError(string $error, UriInterface $uri): string\n    {\n        if ('' === $error) {\n            return $error;\n        }\n\n        $baseUri = $uri->withQuery('')->withFragment('');\n        $baseUriString = $baseUri->__toString();\n\n        if ('' === $baseUriString) {\n            return $error;\n        }\n\n        $redactedUriString = \\GuzzleHttp\\Psr7\\Utils::redactUserInfo($baseUri)->__toString();\n\n        return str_replace($baseUriString, $redactedUriString, $error);\n    }\n\n    /**\n     * @return array<int|string, mixed>\n     */\n    private function getDefaultConf(EasyHandle $easy): array\n    {\n        $conf = [\n            '_headers' => $easy->request->getHeaders(),\n            \\CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(),\n            \\CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''),\n            \\CURLOPT_RETURNTRANSFER => false,\n            \\CURLOPT_HEADER => false,\n            \\CURLOPT_CONNECTTIMEOUT => 300,\n        ];\n\n        if (\\defined('CURLOPT_PROTOCOLS')) {\n            $conf[\\CURLOPT_PROTOCOLS] = \\CURLPROTO_HTTP | \\CURLPROTO_HTTPS;\n        }\n\n        $version = $easy->request->getProtocolVersion();\n\n        if ('2' === $version || '2.0' === $version) {\n            $conf[\\CURLOPT_HTTP_VERSION] = \\CURL_HTTP_VERSION_2_0;\n        } elseif ('1.1' === $version) {\n            $conf[\\CURLOPT_HTTP_VERSION] = \\CURL_HTTP_VERSION_1_1;\n        } else {\n            $conf[\\CURLOPT_HTTP_VERSION] = \\CURL_HTTP_VERSION_1_0;\n        }\n\n        return $conf;\n    }\n\n    private function applyMethod(EasyHandle $easy, array &$conf): void\n    {\n        $body = $easy->request->getBody();\n        $size = $body->getSize();\n\n        if ($size === null || $size > 0) {\n            $this->applyBody($easy->request, $easy->options, $conf);\n\n            return;\n        }\n\n        $method = $easy->request->getMethod();\n        if ($method === 'PUT' || $method === 'POST') {\n            // See https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2\n            if (!$easy->request->hasHeader('Content-Length')) {\n                $conf[\\CURLOPT_HTTPHEADER][] = 'Content-Length: 0';\n            }\n        } elseif ($method === 'HEAD') {\n            $conf[\\CURLOPT_NOBODY] = true;\n            unset(\n                $conf[\\CURLOPT_WRITEFUNCTION],\n                $conf[\\CURLOPT_READFUNCTION],\n                $conf[\\CURLOPT_FILE],\n                $conf[\\CURLOPT_INFILE]\n            );\n        }\n    }\n\n    private function applyBody(RequestInterface $request, array $options, array &$conf): void\n    {\n        $size = $request->hasHeader('Content-Length')\n            ? (int) $request->getHeaderLine('Content-Length')\n            : null;\n\n        // Send the body as a string if the size is less than 1MB OR if the\n        // [curl][body_as_string] request value is set.\n        if (($size !== null && $size < 1000000) || !empty($options['_body_as_string'])) {\n            $conf[\\CURLOPT_POSTFIELDS] = (string) $request->getBody();\n            // Don't duplicate the Content-Length header\n            $this->removeHeader('Content-Length', $conf);\n            $this->removeHeader('Transfer-Encoding', $conf);\n        } else {\n            $conf[\\CURLOPT_UPLOAD] = true;\n            if ($size !== null) {\n                $conf[\\CURLOPT_INFILESIZE] = $size;\n                $this->removeHeader('Content-Length', $conf);\n            }\n            $body = $request->getBody();\n            if ($body->isSeekable()) {\n                $body->rewind();\n            }\n            $conf[\\CURLOPT_READFUNCTION] = static function ($ch, $fd, $length) use ($body) {\n                return $body->read($length);\n            };\n        }\n\n        // If the Expect header is not present, prevent curl from adding it\n        if (!$request->hasHeader('Expect')) {\n            $conf[\\CURLOPT_HTTPHEADER][] = 'Expect:';\n        }\n\n        // cURL sometimes adds a content-type by default. Prevent this.\n        if (!$request->hasHeader('Content-Type')) {\n            $conf[\\CURLOPT_HTTPHEADER][] = 'Content-Type:';\n        }\n    }\n\n    private function applyHeaders(EasyHandle $easy, array &$conf): void\n    {\n        foreach ($conf['_headers'] as $name => $values) {\n            foreach ($values as $value) {\n                $value = (string) $value;\n                if ($value === '') {\n                    // cURL requires a special format for empty headers.\n                    // See https://github.com/guzzle/guzzle/issues/1882 for more details.\n                    $conf[\\CURLOPT_HTTPHEADER][] = \"$name;\";\n                } else {\n                    $conf[\\CURLOPT_HTTPHEADER][] = \"$name: $value\";\n                }\n            }\n        }\n\n        // Remove the Accept header if one was not set\n        if (!$easy->request->hasHeader('Accept')) {\n            $conf[\\CURLOPT_HTTPHEADER][] = 'Accept:';\n        }\n    }\n\n    /**\n     * Remove a header from the options array.\n     *\n     * @param string $name    Case-insensitive header to remove\n     * @param array  $options Array of options to modify\n     */\n    private function removeHeader(string $name, array &$options): void\n    {\n        foreach (\\array_keys($options['_headers']) as $key) {\n            if (!\\strcasecmp($key, $name)) {\n                unset($options['_headers'][$key]);\n\n                return;\n            }\n        }\n    }\n\n    private function applyHandlerOptions(EasyHandle $easy, array &$conf): void\n    {\n        $options = $easy->options;\n        if (isset($options['verify'])) {\n            if ($options['verify'] === false) {\n                unset($conf[\\CURLOPT_CAINFO]);\n                $conf[\\CURLOPT_SSL_VERIFYHOST] = 0;\n                $conf[\\CURLOPT_SSL_VERIFYPEER] = false;\n            } else {\n                $conf[\\CURLOPT_SSL_VERIFYHOST] = 2;\n                $conf[\\CURLOPT_SSL_VERIFYPEER] = true;\n                if (\\is_string($options['verify'])) {\n                    // Throw an error if the file/folder/link path is not valid or doesn't exist.\n                    if (!\\file_exists($options['verify'])) {\n                        throw new \\InvalidArgumentException(\"SSL CA bundle not found: {$options['verify']}\");\n                    }\n                    // If it's a directory or a link to a directory use CURLOPT_CAPATH.\n                    // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO.\n                    if (\n                        \\is_dir($options['verify'])\n                        || (\n                            \\is_link($options['verify']) === true\n                            && ($verifyLink = \\readlink($options['verify'])) !== false\n                            && \\is_dir($verifyLink)\n                        )\n                    ) {\n                        $conf[\\CURLOPT_CAPATH] = $options['verify'];\n                    } else {\n                        $conf[\\CURLOPT_CAINFO] = $options['verify'];\n                    }\n                }\n            }\n        }\n\n        if (!isset($options['curl'][\\CURLOPT_ENCODING]) && !empty($options['decode_content'])) {\n            $accept = $easy->request->getHeaderLine('Accept-Encoding');\n            if ($accept) {\n                $conf[\\CURLOPT_ENCODING] = $accept;\n            } else {\n                // The empty string enables all available decoders and implicitly\n                // sets a matching 'Accept-Encoding' header.\n                $conf[\\CURLOPT_ENCODING] = '';\n                // But as the user did not specify any encoding preference,\n                // let's leave it up to server by preventing curl from sending\n                // the header, which will be interpreted as 'Accept-Encoding: *'.\n                // https://www.rfc-editor.org/rfc/rfc9110#field.accept-encoding\n                $conf[\\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';\n            }\n        }\n\n        if (!isset($options['sink'])) {\n            // Use a default temp stream if no sink was set.\n            $options['sink'] = \\GuzzleHttp\\Psr7\\Utils::tryFopen('php://temp', 'w+');\n        }\n        $sink = $options['sink'];\n        if (!\\is_string($sink)) {\n            $sink = \\GuzzleHttp\\Psr7\\Utils::streamFor($sink);\n        } elseif (!\\is_dir(\\dirname($sink))) {\n            // Ensure that the directory exists before failing in curl.\n            throw new \\RuntimeException(\\sprintf('Directory %s does not exist for sink value of %s', \\dirname($sink), $sink));\n        } else {\n            $sink = new LazyOpenStream($sink, 'w+');\n        }\n        $easy->sink = $sink;\n        $conf[\\CURLOPT_WRITEFUNCTION] = static function ($ch, $write) use ($sink): int {\n            return $sink->write($write);\n        };\n\n        $timeoutRequiresNoSignal = false;\n        if (isset($options['timeout'])) {\n            $timeoutRequiresNoSignal |= $options['timeout'] < 1;\n            $conf[\\CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;\n        }\n\n        // CURL default value is CURL_IPRESOLVE_WHATEVER\n        if (isset($options['force_ip_resolve'])) {\n            if ('v4' === $options['force_ip_resolve']) {\n                $conf[\\CURLOPT_IPRESOLVE] = \\CURL_IPRESOLVE_V4;\n            } elseif ('v6' === $options['force_ip_resolve']) {\n                $conf[\\CURLOPT_IPRESOLVE] = \\CURL_IPRESOLVE_V6;\n            }\n        }\n\n        if (isset($options['connect_timeout'])) {\n            $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1;\n            $conf[\\CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;\n        }\n\n        if ($timeoutRequiresNoSignal && \\strtoupper(\\substr(\\PHP_OS, 0, 3)) !== 'WIN') {\n            $conf[\\CURLOPT_NOSIGNAL] = true;\n        }\n\n        if (isset($options['proxy'])) {\n            if (!\\is_array($options['proxy'])) {\n                $conf[\\CURLOPT_PROXY] = $options['proxy'];\n            } else {\n                $scheme = $easy->request->getUri()->getScheme();\n                if (isset($options['proxy'][$scheme])) {\n                    $host = $easy->request->getUri()->getHost();\n                    if (isset($options['proxy']['no']) && Utils::isHostInNoProxy($host, $options['proxy']['no'])) {\n                        unset($conf[\\CURLOPT_PROXY]);\n                    } else {\n                        $conf[\\CURLOPT_PROXY] = $options['proxy'][$scheme];\n                    }\n                }\n            }\n        }\n\n        if (isset($options['crypto_method'])) {\n            $protocolVersion = $easy->request->getProtocolVersion();\n\n            // If HTTP/2, upgrade TLS 1.0 and 1.1 to 1.2\n            if ('2' === $protocolVersion || '2.0' === $protocolVersion) {\n                if (\n                    \\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']\n                    || \\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']\n                    || \\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']\n                ) {\n                    $conf[\\CURLOPT_SSLVERSION] = \\CURL_SSLVERSION_TLSv1_2;\n                } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \\STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {\n                    if (!self::supportsTls13()) {\n                        throw new \\InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');\n                    }\n                    $conf[\\CURLOPT_SSLVERSION] = \\CURL_SSLVERSION_TLSv1_3;\n                } else {\n                    throw new \\InvalidArgumentException('Invalid crypto_method request option: unknown version provided');\n                }\n            } elseif (\\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) {\n                $conf[\\CURLOPT_SSLVERSION] = \\CURL_SSLVERSION_TLSv1_0;\n            } elseif (\\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) {\n                $conf[\\CURLOPT_SSLVERSION] = \\CURL_SSLVERSION_TLSv1_1;\n            } elseif (\\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) {\n                if (!self::supportsTls12()) {\n                    throw new \\InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL');\n                }\n                $conf[\\CURLOPT_SSLVERSION] = \\CURL_SSLVERSION_TLSv1_2;\n            } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \\STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {\n                if (!self::supportsTls13()) {\n                    throw new \\InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');\n                }\n                $conf[\\CURLOPT_SSLVERSION] = \\CURL_SSLVERSION_TLSv1_3;\n            } else {\n                throw new \\InvalidArgumentException('Invalid crypto_method request option: unknown version provided');\n            }\n        }\n\n        if (isset($options['cert'])) {\n            $cert = $options['cert'];\n            if (\\is_array($cert)) {\n                $conf[\\CURLOPT_SSLCERTPASSWD] = $cert[1];\n                $cert = $cert[0];\n            }\n            if (!\\file_exists($cert)) {\n                throw new \\InvalidArgumentException(\"SSL certificate not found: {$cert}\");\n            }\n            // OpenSSL (versions 0.9.3 and later) also support \"P12\" for PKCS#12-encoded files.\n            // see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html\n            $ext = pathinfo($cert, \\PATHINFO_EXTENSION);\n            if (preg_match('#^(der|p12)$#i', $ext)) {\n                $conf[\\CURLOPT_SSLCERTTYPE] = strtoupper($ext);\n            }\n            $conf[\\CURLOPT_SSLCERT] = $cert;\n        }\n\n        if (isset($options['ssl_key'])) {\n            if (\\is_array($options['ssl_key'])) {\n                if (\\count($options['ssl_key']) === 2) {\n                    [$sslKey, $conf[\\CURLOPT_SSLKEYPASSWD]] = $options['ssl_key'];\n                } else {\n                    [$sslKey] = $options['ssl_key'];\n                }\n            }\n\n            $sslKey = $sslKey ?? $options['ssl_key'];\n\n            if (!\\file_exists($sslKey)) {\n                throw new \\InvalidArgumentException(\"SSL private key not found: {$sslKey}\");\n            }\n            $conf[\\CURLOPT_SSLKEY] = $sslKey;\n        }\n\n        if (isset($options['progress'])) {\n            $progress = $options['progress'];\n            if (!\\is_callable($progress)) {\n                throw new \\InvalidArgumentException('progress client option must be callable');\n            }\n            $conf[\\CURLOPT_NOPROGRESS] = false;\n            $conf[\\CURLOPT_PROGRESSFUNCTION] = static function ($resource, int $downloadSize, int $downloaded, int $uploadSize, int $uploaded) use ($progress) {\n                $progress($downloadSize, $downloaded, $uploadSize, $uploaded);\n            };\n        }\n\n        if (!empty($options['debug'])) {\n            $conf[\\CURLOPT_STDERR] = Utils::debugResource($options['debug']);\n            $conf[\\CURLOPT_VERBOSE] = true;\n        }\n    }\n\n    /**\n     * This function ensures that a response was set on a transaction. If one\n     * was not set, then the request is retried if possible. This error\n     * typically means you are sending a payload, curl encountered a\n     * \"Connection died, retrying a fresh connect\" error, tried to rewind the\n     * stream, and then encountered a \"necessary data rewind wasn't possible\"\n     * error, causing the request to be sent through curl_multi_info_read()\n     * without an error status.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $handler\n     */\n    private static function retryFailedRewind(callable $handler, EasyHandle $easy, array $ctx): PromiseInterface\n    {\n        try {\n            // Only rewind if the body has been read from.\n            $body = $easy->request->getBody();\n            if ($body->tell() > 0) {\n                $body->rewind();\n            }\n        } catch (\\RuntimeException $e) {\n            $ctx['error'] = 'The connection unexpectedly failed without '\n                .'providing an error. The request would have been retried, '\n                .'but attempting to rewind the request body failed. '\n                .'Exception: '.$e;\n\n            return self::createRejection($easy, $ctx);\n        }\n\n        // Retry no more than 3 times before giving up.\n        if (!isset($easy->options['_curl_retries'])) {\n            $easy->options['_curl_retries'] = 1;\n        } elseif ($easy->options['_curl_retries'] == 2) {\n            $ctx['error'] = 'The cURL request was retried 3 times '\n                .'and did not succeed. The most likely reason for the failure '\n                .'is that cURL was unable to rewind the body of the request '\n                .'and subsequent retries resulted in the same error. Turn on '\n                .'the debug option to see what went wrong. See '\n                .'https://bugs.php.net/bug.php?id=47204 for more information.';\n\n            return self::createRejection($easy, $ctx);\n        } else {\n            ++$easy->options['_curl_retries'];\n        }\n\n        return $handler($easy->request, $easy->options);\n    }\n\n    private function createHeaderFn(EasyHandle $easy): callable\n    {\n        if (isset($easy->options['on_headers'])) {\n            $onHeaders = $easy->options['on_headers'];\n\n            if (!\\is_callable($onHeaders)) {\n                throw new \\InvalidArgumentException('on_headers must be callable');\n            }\n        } else {\n            $onHeaders = null;\n        }\n\n        return static function ($ch, $h) use (\n            $onHeaders,\n            $easy,\n            &$startingResponse\n        ) {\n            $value = \\trim($h);\n            if ($value === '') {\n                $startingResponse = true;\n                try {\n                    $easy->createResponse();\n                } catch (\\Exception $e) {\n                    $easy->createResponseException = $e;\n\n                    return -1;\n                }\n                if ($onHeaders !== null) {\n                    try {\n                        $onHeaders($easy->response);\n                    } catch (\\Exception $e) {\n                        // Associate the exception with the handle and trigger\n                        // a curl header write error by returning 0.\n                        $easy->onHeadersException = $e;\n\n                        return -1;\n                    }\n                }\n            } elseif ($startingResponse) {\n                $startingResponse = false;\n                $easy->headers = [$value];\n            } else {\n                $easy->headers[] = $value;\n            }\n\n            return \\strlen($h);\n        };\n    }\n\n    public function __destruct()\n    {\n        foreach ($this->handles as $id => $handle) {\n            if (PHP_VERSION_ID < 80000) {\n                \\curl_close($handle);\n            }\n\n            unset($this->handles[$id]);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse Psr\\Http\\Message\\RequestInterface;\n\ninterface CurlFactoryInterface\n{\n    /**\n     * Creates a cURL handle resource.\n     *\n     * @param RequestInterface $request Request\n     * @param array            $options Transfer options\n     *\n     * @throws \\RuntimeException when an option cannot be applied\n     */\n    public function create(RequestInterface $request, array $options): EasyHandle;\n\n    /**\n     * Release an easy handle, allowing it to be reused or closed.\n     *\n     * This function must call unset on the easy handle's \"handle\" property.\n     */\n    public function release(EasyHandle $easy): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * HTTP handler that uses cURL easy handles as a transport layer.\n *\n * When using the CurlHandler, custom curl options can be specified as an\n * associative array of curl option constants mapping to values in the\n * **curl** key of the \"client\" key of the request.\n *\n * @final\n */\nclass CurlHandler\n{\n    /**\n     * @var CurlFactoryInterface\n     */\n    private $factory;\n\n    /**\n     * Accepts an associative array of options:\n     *\n     * - handle_factory: Optional curl factory used to create cURL handles.\n     *\n     * @param array{handle_factory?: ?CurlFactoryInterface} $options Array of options to use with the handler\n     */\n    public function __construct(array $options = [])\n    {\n        $this->factory = $options['handle_factory']\n            ?? new CurlFactory(3);\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        if (isset($options['delay'])) {\n            \\usleep($options['delay'] * 1000);\n        }\n\n        $easy = $this->factory->create($request, $options);\n        \\curl_exec($easy->handle);\n        $easy->errno = \\curl_errno($easy->handle);\n\n        return CurlFactory::finish($this, $easy, $this->factory);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse Closure;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\Promise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Returns an asynchronous response using curl_multi_* functions.\n *\n * When using the CurlMultiHandler, custom curl options can be specified as an\n * associative array of curl option constants mapping to values in the\n * **curl** key of the provided request options.\n *\n * @final\n */\nclass CurlMultiHandler\n{\n    /**\n     * @var CurlFactoryInterface\n     */\n    private $factory;\n\n    /**\n     * @var int\n     */\n    private $selectTimeout;\n\n    /**\n     * @var int Will be higher than 0 when `curl_multi_exec` is still running.\n     */\n    private $active = 0;\n\n    /**\n     * @var array Request entry handles, indexed by handle id in `addRequest`.\n     *\n     * @see CurlMultiHandler::addRequest\n     */\n    private $handles = [];\n\n    /**\n     * @var array<int, float> An array of delay times, indexed by handle id in `addRequest`.\n     *\n     * @see CurlMultiHandler::addRequest\n     */\n    private $delays = [];\n\n    /**\n     * @var array<mixed> An associative array of CURLMOPT_* options and corresponding values for curl_multi_setopt()\n     */\n    private $options = [];\n\n    /** @var resource|\\CurlMultiHandle */\n    private $_mh;\n\n    /**\n     * This handler accepts the following options:\n     *\n     * - handle_factory: An optional factory  used to create curl handles\n     * - select_timeout: Optional timeout (in seconds) to block before timing\n     *   out while selecting curl handles. Defaults to 1 second.\n     * - options: An associative array of CURLMOPT_* options and\n     *   corresponding values for curl_multi_setopt()\n     */\n    public function __construct(array $options = [])\n    {\n        $this->factory = $options['handle_factory'] ?? new CurlFactory(50);\n\n        if (isset($options['select_timeout'])) {\n            $this->selectTimeout = $options['select_timeout'];\n        } elseif ($selectTimeout = Utils::getenv('GUZZLE_CURL_SELECT_TIMEOUT')) {\n            @trigger_error('Since guzzlehttp/guzzle 7.2.0: Using environment variable GUZZLE_CURL_SELECT_TIMEOUT is deprecated. Use option \"select_timeout\" instead.', \\E_USER_DEPRECATED);\n            $this->selectTimeout = (int) $selectTimeout;\n        } else {\n            $this->selectTimeout = 1;\n        }\n\n        $this->options = $options['options'] ?? [];\n\n        // unsetting the property forces the first access to go through\n        // __get().\n        unset($this->_mh);\n    }\n\n    /**\n     * @param string $name\n     *\n     * @return resource|\\CurlMultiHandle\n     *\n     * @throws \\BadMethodCallException when another field as `_mh` will be gotten\n     * @throws \\RuntimeException       when curl can not initialize a multi handle\n     */\n    public function __get($name)\n    {\n        if ($name !== '_mh') {\n            throw new \\BadMethodCallException(\"Can not get other property as '_mh'.\");\n        }\n\n        $multiHandle = \\curl_multi_init();\n\n        if (false === $multiHandle) {\n            throw new \\RuntimeException('Can not initialize curl multi handle.');\n        }\n\n        $this->_mh = $multiHandle;\n\n        foreach ($this->options as $option => $value) {\n            // A warning is raised in case of a wrong option.\n            curl_multi_setopt($this->_mh, $option, $value);\n        }\n\n        return $this->_mh;\n    }\n\n    public function __destruct()\n    {\n        if (isset($this->_mh)) {\n            \\curl_multi_close($this->_mh);\n            unset($this->_mh);\n        }\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        $easy = $this->factory->create($request, $options);\n        $id = (int) $easy->handle;\n\n        $promise = new Promise(\n            [$this, 'execute'],\n            function () use ($id) {\n                return $this->cancel($id);\n            }\n        );\n\n        $this->addRequest(['easy' => $easy, 'deferred' => $promise]);\n\n        return $promise;\n    }\n\n    /**\n     * Ticks the curl event loop.\n     */\n    public function tick(): void\n    {\n        // Add any delayed handles if needed.\n        if ($this->delays) {\n            $currentTime = Utils::currentTime();\n            foreach ($this->delays as $id => $delay) {\n                if ($currentTime >= $delay) {\n                    unset($this->delays[$id]);\n                    \\curl_multi_add_handle(\n                        $this->_mh,\n                        $this->handles[$id]['easy']->handle\n                    );\n                }\n            }\n        }\n\n        // Run curl_multi_exec in the queue to enable other async tasks to run\n        P\\Utils::queue()->add(Closure::fromCallable([$this, 'tickInQueue']));\n\n        // Step through the task queue which may add additional requests.\n        P\\Utils::queue()->run();\n\n        if ($this->active && \\curl_multi_select($this->_mh, $this->selectTimeout) === -1) {\n            // Perform a usleep if a select returns -1.\n            // See: https://bugs.php.net/bug.php?id=61141\n            \\usleep(250);\n        }\n\n        while (\\curl_multi_exec($this->_mh, $this->active) === \\CURLM_CALL_MULTI_PERFORM) {\n            // Prevent busy looping for slow HTTP requests.\n            \\curl_multi_select($this->_mh, $this->selectTimeout);\n        }\n\n        $this->processMessages();\n    }\n\n    /**\n     * Runs \\curl_multi_exec() inside the event loop, to prevent busy looping\n     */\n    private function tickInQueue(): void\n    {\n        if (\\curl_multi_exec($this->_mh, $this->active) === \\CURLM_CALL_MULTI_PERFORM) {\n            \\curl_multi_select($this->_mh, 0);\n            P\\Utils::queue()->add(Closure::fromCallable([$this, 'tickInQueue']));\n        }\n    }\n\n    /**\n     * Runs until all outstanding connections have completed.\n     */\n    public function execute(): void\n    {\n        $queue = P\\Utils::queue();\n\n        while ($this->handles || !$queue->isEmpty()) {\n            // If there are no transfers, then sleep for the next delay\n            if (!$this->active && $this->delays) {\n                \\usleep($this->timeToNext());\n            }\n            $this->tick();\n        }\n    }\n\n    private function addRequest(array $entry): void\n    {\n        $easy = $entry['easy'];\n        $id = (int) $easy->handle;\n        $this->handles[$id] = $entry;\n        if (empty($easy->options['delay'])) {\n            \\curl_multi_add_handle($this->_mh, $easy->handle);\n        } else {\n            $this->delays[$id] = Utils::currentTime() + ($easy->options['delay'] / 1000);\n        }\n    }\n\n    /**\n     * Cancels a handle from sending and removes references to it.\n     *\n     * @param int $id Handle ID to cancel and remove.\n     *\n     * @return bool True on success, false on failure.\n     */\n    private function cancel($id): bool\n    {\n        if (!is_int($id)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an integer to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        // Cannot cancel if it has been processed.\n        if (!isset($this->handles[$id])) {\n            return false;\n        }\n\n        $handle = $this->handles[$id]['easy']->handle;\n        unset($this->delays[$id], $this->handles[$id]);\n        \\curl_multi_remove_handle($this->_mh, $handle);\n\n        if (PHP_VERSION_ID < 80000) {\n            \\curl_close($handle);\n        }\n\n        return true;\n    }\n\n    private function processMessages(): void\n    {\n        while ($done = \\curl_multi_info_read($this->_mh)) {\n            if ($done['msg'] !== \\CURLMSG_DONE) {\n                // if it's not done, then it would be premature to remove the handle. ref https://github.com/guzzle/guzzle/pull/2892#issuecomment-945150216\n                continue;\n            }\n            $id = (int) $done['handle'];\n            \\curl_multi_remove_handle($this->_mh, $done['handle']);\n\n            if (!isset($this->handles[$id])) {\n                // Probably was cancelled.\n                continue;\n            }\n\n            $entry = $this->handles[$id];\n            unset($this->handles[$id], $this->delays[$id]);\n            $entry['easy']->errno = $done['result'];\n            $entry['deferred']->resolve(\n                CurlFactory::finish($this, $entry['easy'], $this->factory)\n            );\n        }\n    }\n\n    private function timeToNext(): int\n    {\n        $currentTime = Utils::currentTime();\n        $nextTime = \\PHP_INT_MAX;\n        foreach ($this->delays as $time) {\n            if ($time < $nextTime) {\n                $nextTime = $time;\n            }\n        }\n\n        return ((int) \\max(0, $nextTime - $currentTime)) * 1000000;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Psr7\\Response;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Represents a cURL easy handle and the data it populates.\n *\n * @internal\n */\nfinal class EasyHandle\n{\n    /**\n     * @var resource|\\CurlHandle cURL resource\n     */\n    public $handle;\n\n    /**\n     * @var StreamInterface Where data is being written\n     */\n    public $sink;\n\n    /**\n     * @var array Received HTTP headers so far\n     */\n    public $headers = [];\n\n    /**\n     * @var ResponseInterface|null Received response (if any)\n     */\n    public $response;\n\n    /**\n     * @var RequestInterface Request being sent\n     */\n    public $request;\n\n    /**\n     * @var array Request options\n     */\n    public $options = [];\n\n    /**\n     * @var int cURL error number (if any)\n     */\n    public $errno = 0;\n\n    /**\n     * @var \\Throwable|null Exception during on_headers (if any)\n     */\n    public $onHeadersException;\n\n    /**\n     * @var \\Exception|null Exception during createResponse (if any)\n     */\n    public $createResponseException;\n\n    /**\n     * Attach a response to the easy handle based on the received headers.\n     *\n     * @throws \\RuntimeException if no headers have been received or the first\n     *                           header line is invalid.\n     */\n    public function createResponse(): void\n    {\n        [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($this->headers);\n\n        $normalizedKeys = Utils::normalizeHeaderKeys($headers);\n\n        if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) {\n            $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];\n            unset($headers[$normalizedKeys['content-encoding']]);\n            if (isset($normalizedKeys['content-length'])) {\n                $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];\n\n                $bodyLength = (int) $this->sink->getSize();\n                if ($bodyLength) {\n                    $headers[$normalizedKeys['content-length']] = $bodyLength;\n                } else {\n                    unset($headers[$normalizedKeys['content-length']]);\n                }\n            }\n        }\n\n        // Attach a response to the easy handle with the parsed headers.\n        $this->response = new Response(\n            $status,\n            $headers,\n            $this->sink,\n            $ver,\n            $reason\n        );\n    }\n\n    /**\n     * @param string $name\n     *\n     * @return void\n     *\n     * @throws \\BadMethodCallException\n     */\n    public function __get($name)\n    {\n        $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: '.$name;\n        throw new \\BadMethodCallException($msg);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Utils;\n\n/**\n * @internal\n */\nfinal class HeaderProcessor\n{\n    /**\n     * Returns the HTTP version, status code, reason phrase, and headers.\n     *\n     * @param string[] $headers\n     *\n     * @return array{0:string, 1:int, 2:?string, 3:array}\n     *\n     * @throws \\RuntimeException\n     */\n    public static function parseHeaders(array $headers): array\n    {\n        if ($headers === []) {\n            throw new \\RuntimeException('Expected a non-empty array of header data');\n        }\n\n        $parts = \\explode(' ', \\array_shift($headers), 3);\n        $version = \\explode('/', $parts[0])[1] ?? null;\n\n        if ($version === null) {\n            throw new \\RuntimeException('HTTP version missing from header data');\n        }\n\n        $status = $parts[1] ?? null;\n\n        if ($status === null) {\n            throw new \\RuntimeException('HTTP status code missing from header data');\n        }\n\n        return [$version, (int) $status, $parts[2] ?? null, Utils::headersFromLines($headers)];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\HandlerStack;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\TransferStats;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Handler that returns responses or throw exceptions from a queue.\n *\n * @final\n */\nclass MockHandler implements \\Countable\n{\n    /**\n     * @var array\n     */\n    private $queue = [];\n\n    /**\n     * @var RequestInterface|null\n     */\n    private $lastRequest;\n\n    /**\n     * @var array\n     */\n    private $lastOptions = [];\n\n    /**\n     * @var callable|null\n     */\n    private $onFulfilled;\n\n    /**\n     * @var callable|null\n     */\n    private $onRejected;\n\n    /**\n     * Creates a new MockHandler that uses the default handler stack list of\n     * middlewares.\n     *\n     * @param array|null    $queue       Array of responses, callables, or exceptions.\n     * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled.\n     * @param callable|null $onRejected  Callback to invoke when the return value is rejected.\n     */\n    public static function createWithMiddleware(?array $queue = null, ?callable $onFulfilled = null, ?callable $onRejected = null): HandlerStack\n    {\n        return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));\n    }\n\n    /**\n     * The passed in value must be an array of\n     * {@see ResponseInterface} objects, Exceptions,\n     * callables, or Promises.\n     *\n     * @param array<int, mixed>|null $queue       The parameters to be passed to the append function, as an indexed array.\n     * @param callable|null          $onFulfilled Callback to invoke when the return value is fulfilled.\n     * @param callable|null          $onRejected  Callback to invoke when the return value is rejected.\n     */\n    public function __construct(?array $queue = null, ?callable $onFulfilled = null, ?callable $onRejected = null)\n    {\n        $this->onFulfilled = $onFulfilled;\n        $this->onRejected = $onRejected;\n\n        if ($queue) {\n            // array_values included for BC\n            $this->append(...array_values($queue));\n        }\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        if (!$this->queue) {\n            throw new \\OutOfBoundsException('Mock queue is empty');\n        }\n\n        if (isset($options['delay']) && \\is_numeric($options['delay'])) {\n            \\usleep((int) $options['delay'] * 1000);\n        }\n\n        $this->lastRequest = $request;\n        $this->lastOptions = $options;\n        $response = \\array_shift($this->queue);\n\n        if (isset($options['on_headers'])) {\n            if (!\\is_callable($options['on_headers'])) {\n                throw new \\InvalidArgumentException('on_headers must be callable');\n            }\n            try {\n                $options['on_headers']($response);\n            } catch (\\Exception $e) {\n                $msg = 'An error was encountered during the on_headers event';\n                $response = new RequestException($msg, $request, $response, $e);\n            }\n        }\n\n        if (\\is_callable($response)) {\n            $response = $response($request, $options);\n        }\n\n        $response = $response instanceof \\Throwable\n            ? P\\Create::rejectionFor($response)\n            : P\\Create::promiseFor($response);\n\n        return $response->then(\n            function (?ResponseInterface $value) use ($request, $options) {\n                $this->invokeStats($request, $options, $value);\n                if ($this->onFulfilled) {\n                    ($this->onFulfilled)($value);\n                }\n\n                if ($value !== null && isset($options['sink'])) {\n                    $contents = (string) $value->getBody();\n                    $sink = $options['sink'];\n\n                    if (\\is_resource($sink)) {\n                        \\fwrite($sink, $contents);\n                    } elseif (\\is_string($sink)) {\n                        \\file_put_contents($sink, $contents);\n                    } elseif ($sink instanceof StreamInterface) {\n                        $sink->write($contents);\n                    }\n                }\n\n                return $value;\n            },\n            function ($reason) use ($request, $options) {\n                $this->invokeStats($request, $options, null, $reason);\n                if ($this->onRejected) {\n                    ($this->onRejected)($reason);\n                }\n\n                return P\\Create::rejectionFor($reason);\n            }\n        );\n    }\n\n    /**\n     * Adds one or more variadic requests, exceptions, callables, or promises\n     * to the queue.\n     *\n     * @param mixed ...$values\n     */\n    public function append(...$values): void\n    {\n        foreach ($values as $value) {\n            if ($value instanceof ResponseInterface\n                || $value instanceof \\Throwable\n                || $value instanceof PromiseInterface\n                || \\is_callable($value)\n            ) {\n                $this->queue[] = $value;\n            } else {\n                throw new \\TypeError('Expected a Response, Promise, Throwable or callable. Found '.Utils::describeType($value));\n            }\n        }\n    }\n\n    /**\n     * Get the last received request.\n     */\n    public function getLastRequest(): ?RequestInterface\n    {\n        return $this->lastRequest;\n    }\n\n    /**\n     * Get the last received request options.\n     */\n    public function getLastOptions(): array\n    {\n        return $this->lastOptions;\n    }\n\n    /**\n     * Returns the number of remaining items in the queue.\n     */\n    public function count(): int\n    {\n        return \\count($this->queue);\n    }\n\n    public function reset(): void\n    {\n        $this->queue = [];\n    }\n\n    /**\n     * @param mixed $reason Promise or reason.\n     */\n    private function invokeStats(\n        RequestInterface $request,\n        array $options,\n        ?ResponseInterface $response = null,\n        $reason = null\n    ): void {\n        if (isset($options['on_stats'])) {\n            $transferTime = $options['transfer_time'] ?? 0;\n            $stats = new TransferStats($request, $response, $transferTime, $reason);\n            ($options['on_stats'])($stats);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\RequestOptions;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Provides basic proxies for handlers.\n *\n * @final\n */\nclass Proxy\n{\n    /**\n     * Sends synchronous requests to a specific handler while sending all other\n     * requests to another handler.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $default Handler used for normal responses\n     * @param callable(RequestInterface, array): PromiseInterface $sync    Handler used for synchronous responses.\n     *\n     * @return callable(RequestInterface, array): PromiseInterface Returns the composed handler.\n     */\n    public static function wrapSync(callable $default, callable $sync): callable\n    {\n        return static function (RequestInterface $request, array $options) use ($default, $sync): PromiseInterface {\n            return empty($options[RequestOptions::SYNCHRONOUS]) ? $default($request, $options) : $sync($request, $options);\n        };\n    }\n\n    /**\n     * Sends streaming requests to a streaming compatible handler while sending\n     * all other requests to a default handler.\n     *\n     * This, for example, could be useful for taking advantage of the\n     * performance benefits of curl while still supporting true streaming\n     * through the StreamHandler.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $default   Handler used for non-streaming responses\n     * @param callable(RequestInterface, array): PromiseInterface $streaming Handler used for streaming responses\n     *\n     * @return callable(RequestInterface, array): PromiseInterface Returns the composed handler.\n     */\n    public static function wrapStreaming(callable $default, callable $streaming): callable\n    {\n        return static function (RequestInterface $request, array $options) use ($default, $streaming): PromiseInterface {\n            return empty($options['stream']) ? $default($request, $options) : $streaming($request, $options);\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Exception\\ConnectException;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\FulfilledPromise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\TransferStats;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * HTTP handler that uses PHP's HTTP stream wrapper.\n *\n * @final\n */\nclass StreamHandler\n{\n    /**\n     * @var array\n     */\n    private $lastHeaders = [];\n\n    /**\n     * Sends an HTTP request.\n     *\n     * @param RequestInterface $request Request to send.\n     * @param array            $options Request transfer options.\n     */\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        // Sleep if there is a delay specified.\n        if (isset($options['delay'])) {\n            \\usleep($options['delay'] * 1000);\n        }\n\n        $protocolVersion = $request->getProtocolVersion();\n\n        if ('1.0' !== $protocolVersion && '1.1' !== $protocolVersion) {\n            throw new ConnectException(sprintf('HTTP/%s is not supported by the stream handler.', $protocolVersion), $request);\n        }\n\n        $startTime = isset($options['on_stats']) ? Utils::currentTime() : null;\n\n        try {\n            // Does not support the expect header.\n            $request = $request->withoutHeader('Expect');\n\n            // Append a content-length header if body size is zero to match\n            // the behavior of `CurlHandler`\n            if (\n                (\n                    0 === \\strcasecmp('PUT', $request->getMethod())\n                    || 0 === \\strcasecmp('POST', $request->getMethod())\n                )\n                && 0 === $request->getBody()->getSize()\n            ) {\n                $request = $request->withHeader('Content-Length', '0');\n            }\n\n            return $this->createResponse(\n                $request,\n                $options,\n                $this->createStream($request, $options),\n                $startTime\n            );\n        } catch (\\InvalidArgumentException $e) {\n            throw $e;\n        } catch (\\Exception $e) {\n            // Determine if the error was a networking error.\n            $message = $e->getMessage();\n            // This list can probably get more comprehensive.\n            if (false !== \\strpos($message, 'getaddrinfo') // DNS lookup failed\n                || false !== \\strpos($message, 'Connection refused')\n                || false !== \\strpos($message, \"couldn't connect to host\") // error on HHVM\n                || false !== \\strpos($message, 'connection attempt failed')\n            ) {\n                $e = new ConnectException($e->getMessage(), $request, $e);\n            } else {\n                $e = RequestException::wrapException($request, $e);\n            }\n            $this->invokeStats($options, $request, $startTime, null, $e);\n\n            return P\\Create::rejectionFor($e);\n        }\n    }\n\n    private function invokeStats(\n        array $options,\n        RequestInterface $request,\n        ?float $startTime,\n        ?ResponseInterface $response = null,\n        ?\\Throwable $error = null\n    ): void {\n        if (isset($options['on_stats'])) {\n            $stats = new TransferStats($request, $response, Utils::currentTime() - $startTime, $error, []);\n            ($options['on_stats'])($stats);\n        }\n    }\n\n    /**\n     * @param resource $stream\n     */\n    private function createResponse(RequestInterface $request, array $options, $stream, ?float $startTime): PromiseInterface\n    {\n        $hdrs = $this->lastHeaders;\n        $this->lastHeaders = [];\n\n        try {\n            [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($hdrs);\n        } catch (\\Exception $e) {\n            return P\\Create::rejectionFor(\n                new RequestException('An error was encountered while creating the response', $request, null, $e)\n            );\n        }\n\n        [$stream, $headers] = $this->checkDecode($options, $headers, $stream);\n        $stream = Psr7\\Utils::streamFor($stream);\n        $sink = $stream;\n\n        if (\\strcasecmp('HEAD', $request->getMethod())) {\n            $sink = $this->createSink($stream, $options);\n        }\n\n        try {\n            $response = new Psr7\\Response($status, $headers, $sink, $ver, $reason);\n        } catch (\\Exception $e) {\n            return P\\Create::rejectionFor(\n                new RequestException('An error was encountered while creating the response', $request, null, $e)\n            );\n        }\n\n        if (isset($options['on_headers'])) {\n            try {\n                $options['on_headers']($response);\n            } catch (\\Exception $e) {\n                return P\\Create::rejectionFor(\n                    new RequestException('An error was encountered during the on_headers event', $request, $response, $e)\n                );\n            }\n        }\n\n        // Do not drain when the request is a HEAD request because they have\n        // no body.\n        if ($sink !== $stream) {\n            $this->drain($stream, $sink, $response->getHeaderLine('Content-Length'));\n        }\n\n        $this->invokeStats($options, $request, $startTime, $response, null);\n\n        return new FulfilledPromise($response);\n    }\n\n    private function createSink(StreamInterface $stream, array $options): StreamInterface\n    {\n        if (!empty($options['stream'])) {\n            return $stream;\n        }\n\n        $sink = $options['sink'] ?? Psr7\\Utils::tryFopen('php://temp', 'r+');\n\n        return \\is_string($sink) ? new Psr7\\LazyOpenStream($sink, 'w+') : Psr7\\Utils::streamFor($sink);\n    }\n\n    /**\n     * @param resource $stream\n     */\n    private function checkDecode(array $options, array $headers, $stream): array\n    {\n        // Automatically decode responses when instructed.\n        if (!empty($options['decode_content'])) {\n            $normalizedKeys = Utils::normalizeHeaderKeys($headers);\n            if (isset($normalizedKeys['content-encoding'])) {\n                $encoding = $headers[$normalizedKeys['content-encoding']];\n                if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') {\n                    $stream = new Psr7\\InflateStream(Psr7\\Utils::streamFor($stream));\n                    $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];\n\n                    // Remove content-encoding header\n                    unset($headers[$normalizedKeys['content-encoding']]);\n\n                    // Fix content-length header\n                    if (isset($normalizedKeys['content-length'])) {\n                        $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];\n                        $length = (int) $stream->getSize();\n                        if ($length === 0) {\n                            unset($headers[$normalizedKeys['content-length']]);\n                        } else {\n                            $headers[$normalizedKeys['content-length']] = [$length];\n                        }\n                    }\n                }\n            }\n        }\n\n        return [$stream, $headers];\n    }\n\n    /**\n     * Drains the source stream into the \"sink\" client option.\n     *\n     * @param string $contentLength Header specifying the amount of\n     *                              data to read.\n     *\n     * @throws \\RuntimeException when the sink option is invalid.\n     */\n    private function drain(StreamInterface $source, StreamInterface $sink, string $contentLength): StreamInterface\n    {\n        // If a content-length header is provided, then stop reading once\n        // that number of bytes has been read. This can prevent infinitely\n        // reading from a stream when dealing with servers that do not honor\n        // Connection: Close headers.\n        Psr7\\Utils::copyToStream(\n            $source,\n            $sink,\n            (\\strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1\n        );\n\n        $sink->seek(0);\n        $source->close();\n\n        return $sink;\n    }\n\n    /**\n     * Create a resource and check to ensure it was created successfully\n     *\n     * @param callable $callback Callable that returns stream resource\n     *\n     * @return resource\n     *\n     * @throws \\RuntimeException on error\n     */\n    private function createResource(callable $callback)\n    {\n        $errors = [];\n        \\set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool {\n            $errors[] = [\n                'message' => $msg,\n                'file' => $file,\n                'line' => $line,\n            ];\n\n            return true;\n        });\n\n        try {\n            $resource = $callback();\n        } finally {\n            \\restore_error_handler();\n        }\n\n        if (!$resource) {\n            $message = 'Error creating resource: ';\n            foreach ($errors as $err) {\n                foreach ($err as $key => $value) {\n                    $message .= \"[$key] $value\".\\PHP_EOL;\n                }\n            }\n            throw new \\RuntimeException(\\trim($message));\n        }\n\n        return $resource;\n    }\n\n    /**\n     * @return resource\n     */\n    private function createStream(RequestInterface $request, array $options)\n    {\n        static $methods;\n        if (!$methods) {\n            $methods = \\array_flip(\\get_class_methods(__CLASS__));\n        }\n\n        if (!\\in_array($request->getUri()->getScheme(), ['http', 'https'])) {\n            throw new RequestException(\\sprintf(\"The scheme '%s' is not supported.\", $request->getUri()->getScheme()), $request);\n        }\n\n        // HTTP/1.1 streams using the PHP stream wrapper require a\n        // Connection: close header\n        if ($request->getProtocolVersion() === '1.1'\n            && !$request->hasHeader('Connection')\n        ) {\n            $request = $request->withHeader('Connection', 'close');\n        }\n\n        // Ensure SSL is verified by default\n        if (!isset($options['verify'])) {\n            $options['verify'] = true;\n        }\n\n        $params = [];\n        $context = $this->getDefaultContext($request);\n\n        if (isset($options['on_headers']) && !\\is_callable($options['on_headers'])) {\n            throw new \\InvalidArgumentException('on_headers must be callable');\n        }\n\n        if (!empty($options)) {\n            foreach ($options as $key => $value) {\n                $method = \"add_{$key}\";\n                if (isset($methods[$method])) {\n                    $this->{$method}($request, $context, $value, $params);\n                }\n            }\n        }\n\n        if (isset($options['stream_context'])) {\n            if (!\\is_array($options['stream_context'])) {\n                throw new \\InvalidArgumentException('stream_context must be an array');\n            }\n            $context = \\array_replace_recursive($context, $options['stream_context']);\n        }\n\n        // Microsoft NTLM authentication only supported with curl handler\n        if (isset($options['auth'][2]) && 'ntlm' === $options['auth'][2]) {\n            throw new \\InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler');\n        }\n\n        $uri = $this->resolveHost($request, $options);\n\n        $contextResource = $this->createResource(\n            static function () use ($context, $params) {\n                return \\stream_context_create($context, $params);\n            }\n        );\n\n        return $this->createResource(\n            function () use ($uri, $contextResource, $context, $options, $request) {\n                $resource = @\\fopen((string) $uri, 'r', false, $contextResource);\n\n                // See https://wiki.php.net/rfc/deprecations_php_8_5#deprecate_the_http_response_header_predefined_variable\n                if (function_exists('http_get_last_response_headers')) {\n                    /** @var array|null */\n                    $http_response_header = \\http_get_last_response_headers();\n                }\n\n                $this->lastHeaders = $http_response_header ?? [];\n\n                if (false === $resource) {\n                    throw new ConnectException(sprintf('Connection refused for URI %s', $uri), $request, null, $context);\n                }\n\n                if (isset($options['read_timeout'])) {\n                    $readTimeout = $options['read_timeout'];\n                    $sec = (int) $readTimeout;\n                    $usec = ($readTimeout - $sec) * 100000;\n                    \\stream_set_timeout($resource, $sec, $usec);\n                }\n\n                return $resource;\n            }\n        );\n    }\n\n    private function resolveHost(RequestInterface $request, array $options): UriInterface\n    {\n        $uri = $request->getUri();\n\n        if (isset($options['force_ip_resolve']) && !\\filter_var($uri->getHost(), \\FILTER_VALIDATE_IP)) {\n            if ('v4' === $options['force_ip_resolve']) {\n                $records = \\dns_get_record($uri->getHost(), \\DNS_A);\n                if (false === $records || !isset($records[0]['ip'])) {\n                    throw new ConnectException(\\sprintf(\"Could not resolve IPv4 address for host '%s'\", $uri->getHost()), $request);\n                }\n\n                return $uri->withHost($records[0]['ip']);\n            }\n            if ('v6' === $options['force_ip_resolve']) {\n                $records = \\dns_get_record($uri->getHost(), \\DNS_AAAA);\n                if (false === $records || !isset($records[0]['ipv6'])) {\n                    throw new ConnectException(\\sprintf(\"Could not resolve IPv6 address for host '%s'\", $uri->getHost()), $request);\n                }\n\n                return $uri->withHost('['.$records[0]['ipv6'].']');\n            }\n        }\n\n        return $uri;\n    }\n\n    private function getDefaultContext(RequestInterface $request): array\n    {\n        $headers = '';\n        foreach ($request->getHeaders() as $name => $value) {\n            foreach ($value as $val) {\n                $headers .= \"$name: $val\\r\\n\";\n            }\n        }\n\n        $context = [\n            'http' => [\n                'method' => $request->getMethod(),\n                'header' => $headers,\n                'protocol_version' => $request->getProtocolVersion(),\n                'ignore_errors' => true,\n                'follow_location' => 0,\n            ],\n            'ssl' => [\n                'peer_name' => $request->getUri()->getHost(),\n            ],\n        ];\n\n        $body = (string) $request->getBody();\n\n        if ('' !== $body) {\n            $context['http']['content'] = $body;\n            // Prevent the HTTP handler from adding a Content-Type header.\n            if (!$request->hasHeader('Content-Type')) {\n                $context['http']['header'] .= \"Content-Type:\\r\\n\";\n            }\n        }\n\n        $context['http']['header'] = \\rtrim($context['http']['header']);\n\n        return $context;\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_proxy(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        $uri = null;\n\n        if (!\\is_array($value)) {\n            $uri = $value;\n        } else {\n            $scheme = $request->getUri()->getScheme();\n            if (isset($value[$scheme])) {\n                if (!isset($value['no']) || !Utils::isHostInNoProxy($request->getUri()->getHost(), $value['no'])) {\n                    $uri = $value[$scheme];\n                }\n            }\n        }\n\n        if (!$uri) {\n            return;\n        }\n\n        $parsed = $this->parse_proxy($uri);\n        $options['http']['proxy'] = $parsed['proxy'];\n\n        if ($parsed['auth']) {\n            if (!isset($options['http']['header'])) {\n                $options['http']['header'] = [];\n            }\n            $options['http']['header'] .= \"\\r\\nProxy-Authorization: {$parsed['auth']}\";\n        }\n    }\n\n    /**\n     * Parses the given proxy URL to make it compatible with the format PHP's stream context expects.\n     */\n    private function parse_proxy(string $url): array\n    {\n        $parsed = \\parse_url($url);\n\n        if ($parsed !== false && isset($parsed['scheme']) && $parsed['scheme'] === 'http') {\n            if (isset($parsed['host']) && isset($parsed['port'])) {\n                $auth = null;\n                if (isset($parsed['user']) && isset($parsed['pass'])) {\n                    $auth = \\base64_encode(\"{$parsed['user']}:{$parsed['pass']}\");\n                }\n\n                return [\n                    'proxy' => \"tcp://{$parsed['host']}:{$parsed['port']}\",\n                    'auth' => $auth ? \"Basic {$auth}\" : null,\n                ];\n            }\n        }\n\n        // Return proxy as-is.\n        return [\n            'proxy' => $url,\n            'auth' => null,\n        ];\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_timeout(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if ($value > 0) {\n            $options['http']['timeout'] = $value;\n        }\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_crypto_method(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if (\n            $value === \\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT\n            || $value === \\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT\n            || $value === \\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT\n            || (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && $value === \\STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT)\n        ) {\n            $options['http']['crypto_method'] = $value;\n\n            return;\n        }\n\n        throw new \\InvalidArgumentException('Invalid crypto_method request option: unknown version provided');\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_verify(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if ($value === false) {\n            $options['ssl']['verify_peer'] = false;\n            $options['ssl']['verify_peer_name'] = false;\n\n            return;\n        }\n\n        if (\\is_string($value)) {\n            $options['ssl']['cafile'] = $value;\n            if (!\\file_exists($value)) {\n                throw new \\RuntimeException(\"SSL CA bundle not found: $value\");\n            }\n        } elseif ($value !== true) {\n            throw new \\InvalidArgumentException('Invalid verify request option');\n        }\n\n        $options['ssl']['verify_peer'] = true;\n        $options['ssl']['verify_peer_name'] = true;\n        $options['ssl']['allow_self_signed'] = false;\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_cert(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if (\\is_array($value)) {\n            $options['ssl']['passphrase'] = $value[1];\n            $value = $value[0];\n        }\n\n        if (!\\file_exists($value)) {\n            throw new \\RuntimeException(\"SSL certificate not found: {$value}\");\n        }\n\n        $options['ssl']['local_cert'] = $value;\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_progress(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        self::addNotification(\n            $params,\n            static function ($code, $a, $b, $c, $transferred, $total) use ($value) {\n                if ($code == \\STREAM_NOTIFY_PROGRESS) {\n                    // The upload progress cannot be determined. Use 0 for cURL compatibility:\n                    // https://curl.se/libcurl/c/CURLOPT_PROGRESSFUNCTION.html\n                    $value($total, $transferred, 0, 0);\n                }\n            }\n        );\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_debug(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if ($value === false) {\n            return;\n        }\n\n        static $map = [\n            \\STREAM_NOTIFY_CONNECT => 'CONNECT',\n            \\STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',\n            \\STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT',\n            \\STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS',\n            \\STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS',\n            \\STREAM_NOTIFY_REDIRECTED => 'REDIRECTED',\n            \\STREAM_NOTIFY_PROGRESS => 'PROGRESS',\n            \\STREAM_NOTIFY_FAILURE => 'FAILURE',\n            \\STREAM_NOTIFY_COMPLETED => 'COMPLETED',\n            \\STREAM_NOTIFY_RESOLVE => 'RESOLVE',\n        ];\n        static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];\n\n        $value = Utils::debugResource($value);\n        $ident = $request->getMethod().' '.$request->getUri()->withFragment('');\n        self::addNotification(\n            $params,\n            static function (int $code, ...$passed) use ($ident, $value, $map, $args): void {\n                \\fprintf($value, '<%s> [%s] ', $ident, $map[$code]);\n                foreach (\\array_filter($passed) as $i => $v) {\n                    \\fwrite($value, $args[$i].': \"'.$v.'\" ');\n                }\n                \\fwrite($value, \"\\n\");\n            }\n        );\n    }\n\n    private static function addNotification(array &$params, callable $notify): void\n    {\n        // Wrap the existing function if needed.\n        if (!isset($params['notification'])) {\n            $params['notification'] = $notify;\n        } else {\n            $params['notification'] = self::callArray([\n                $params['notification'],\n                $notify,\n            ]);\n        }\n    }\n\n    private static function callArray(array $functions): callable\n    {\n        return static function (...$args) use ($functions) {\n            foreach ($functions as $fn) {\n                $fn(...$args);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/HandlerStack.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Creates a composed Guzzle handler function by stacking middlewares on top of\n * an HTTP handler function.\n *\n * @final\n */\nclass HandlerStack\n{\n    /**\n     * @var (callable(RequestInterface, array): PromiseInterface)|null\n     */\n    private $handler;\n\n    /**\n     * @var array{(callable(callable(RequestInterface, array): PromiseInterface): callable), (string|null)}[]\n     */\n    private $stack = [];\n\n    /**\n     * @var (callable(RequestInterface, array): PromiseInterface)|null\n     */\n    private $cached;\n\n    /**\n     * Creates a default handler stack that can be used by clients.\n     *\n     * The returned handler will wrap the provided handler or use the most\n     * appropriate default handler for your system. The returned HandlerStack has\n     * support for cookies, redirects, HTTP error exceptions, and preparing a body\n     * before sending.\n     *\n     * The returned handler stack can be passed to a client in the \"handler\"\n     * option.\n     *\n     * @param (callable(RequestInterface, array): PromiseInterface)|null $handler HTTP handler function to use with the stack. If no\n     *                                                                            handler is provided, the best handler for your\n     *                                                                            system will be utilized.\n     */\n    public static function create(?callable $handler = null): self\n    {\n        $stack = new self($handler ?: Utils::chooseHandler());\n        $stack->push(Middleware::httpErrors(), 'http_errors');\n        $stack->push(Middleware::redirect(), 'allow_redirects');\n        $stack->push(Middleware::cookies(), 'cookies');\n        $stack->push(Middleware::prepareBody(), 'prepare_body');\n\n        return $stack;\n    }\n\n    /**\n     * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler.\n     */\n    public function __construct(?callable $handler = null)\n    {\n        $this->handler = $handler;\n    }\n\n    /**\n     * Invokes the handler stack as a composed handler\n     *\n     * @return ResponseInterface|PromiseInterface\n     */\n    public function __invoke(RequestInterface $request, array $options)\n    {\n        $handler = $this->resolve();\n\n        return $handler($request, $options);\n    }\n\n    /**\n     * Dumps a string representation of the stack.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        $depth = 0;\n        $stack = [];\n\n        if ($this->handler !== null) {\n            $stack[] = '0) Handler: '.$this->debugCallable($this->handler);\n        }\n\n        $result = '';\n        foreach (\\array_reverse($this->stack) as $tuple) {\n            ++$depth;\n            $str = \"{$depth}) Name: '{$tuple[1]}', \";\n            $str .= 'Function: '.$this->debugCallable($tuple[0]);\n            $result = \"> {$str}\\n{$result}\";\n            $stack[] = $str;\n        }\n\n        foreach (\\array_keys($stack) as $k) {\n            $result .= \"< {$stack[$k]}\\n\";\n        }\n\n        return $result;\n    }\n\n    /**\n     * Set the HTTP handler that actually returns a promise.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $handler Accepts a request and array of options and\n     *                                                                     returns a Promise.\n     */\n    public function setHandler(callable $handler): void\n    {\n        $this->handler = $handler;\n        $this->cached = null;\n    }\n\n    /**\n     * Returns true if the builder has a handler.\n     */\n    public function hasHandler(): bool\n    {\n        return $this->handler !== null;\n    }\n\n    /**\n     * Unshift a middleware to the bottom of the stack.\n     *\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $name       Name to register for this middleware.\n     */\n    public function unshift(callable $middleware, ?string $name = null): void\n    {\n        \\array_unshift($this->stack, [$middleware, $name]);\n        $this->cached = null;\n    }\n\n    /**\n     * Push a middleware to the top of the stack.\n     *\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $name       Name to register for this middleware.\n     */\n    public function push(callable $middleware, string $name = ''): void\n    {\n        $this->stack[] = [$middleware, $name];\n        $this->cached = null;\n    }\n\n    /**\n     * Add a middleware before another middleware by name.\n     *\n     * @param string                       $findName   Middleware to find\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $withName   Name to register for this middleware.\n     */\n    public function before(string $findName, callable $middleware, string $withName = ''): void\n    {\n        $this->splice($findName, $withName, $middleware, true);\n    }\n\n    /**\n     * Add a middleware after another middleware by name.\n     *\n     * @param string                       $findName   Middleware to find\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $withName   Name to register for this middleware.\n     */\n    public function after(string $findName, callable $middleware, string $withName = ''): void\n    {\n        $this->splice($findName, $withName, $middleware, false);\n    }\n\n    /**\n     * Remove a middleware by instance or name from the stack.\n     *\n     * @param callable|string $remove Middleware to remove by instance or name.\n     */\n    public function remove($remove): void\n    {\n        if (!is_string($remove) && !is_callable($remove)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a callable or string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->cached = null;\n        $idx = \\is_callable($remove) ? 0 : 1;\n        $this->stack = \\array_values(\\array_filter(\n            $this->stack,\n            static function ($tuple) use ($idx, $remove) {\n                return $tuple[$idx] !== $remove;\n            }\n        ));\n    }\n\n    /**\n     * Compose the middleware and handler into a single callable function.\n     *\n     * @return callable(RequestInterface, array): PromiseInterface\n     */\n    public function resolve(): callable\n    {\n        if ($this->cached === null) {\n            if (($prev = $this->handler) === null) {\n                throw new \\LogicException('No handler has been specified');\n            }\n\n            foreach (\\array_reverse($this->stack) as $fn) {\n                /** @var callable(RequestInterface, array): PromiseInterface $prev */\n                $prev = $fn[0]($prev);\n            }\n\n            $this->cached = $prev;\n        }\n\n        return $this->cached;\n    }\n\n    private function findByName(string $name): int\n    {\n        foreach ($this->stack as $k => $v) {\n            if ($v[1] === $name) {\n                return $k;\n            }\n        }\n\n        throw new \\InvalidArgumentException(\"Middleware not found: $name\");\n    }\n\n    /**\n     * Splices a function into the middleware list at a specific position.\n     */\n    private function splice(string $findName, string $withName, callable $middleware, bool $before): void\n    {\n        $this->cached = null;\n        $idx = $this->findByName($findName);\n        $tuple = [$middleware, $withName];\n\n        if ($before) {\n            if ($idx === 0) {\n                \\array_unshift($this->stack, $tuple);\n            } else {\n                $replacement = [$tuple, $this->stack[$idx]];\n                \\array_splice($this->stack, $idx, 1, $replacement);\n            }\n        } elseif ($idx === \\count($this->stack) - 1) {\n            $this->stack[] = $tuple;\n        } else {\n            $replacement = [$this->stack[$idx], $tuple];\n            \\array_splice($this->stack, $idx, 1, $replacement);\n        }\n    }\n\n    /**\n     * Provides a debug string for a given callable.\n     *\n     * @param callable|string $fn Function to write as a string.\n     */\n    private function debugCallable($fn): string\n    {\n        if (\\is_string($fn)) {\n            return \"callable({$fn})\";\n        }\n\n        if (\\is_array($fn)) {\n            return \\is_string($fn[0])\n                ? \"callable({$fn[0]}::{$fn[1]})\"\n                : \"callable(['\".\\get_class($fn[0]).\"', '{$fn[1]}'])\";\n        }\n\n        /** @var object $fn */\n        return 'callable('.\\spl_object_hash($fn).')';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/MessageFormatter.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\MessageInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Formats log messages using variable substitutions for requests, responses,\n * and other transactional data.\n *\n * The following variable substitutions are supported:\n *\n * - {request}:        Full HTTP request message\n * - {response}:       Full HTTP response message\n * - {ts}:             ISO 8601 date in GMT\n * - {date_iso_8601}   ISO 8601 date in GMT\n * - {date_common_log} Apache common log date using the configured timezone.\n * - {host}:           Host of the request\n * - {method}:         Method of the request\n * - {uri}:            URI of the request\n * - {version}:        Protocol version\n * - {target}:         Request target of the request (path + query + fragment)\n * - {hostname}:       Hostname of the machine that sent the request\n * - {code}:           Status code of the response (if available)\n * - {phrase}:         Reason phrase of the response  (if available)\n * - {error}:          Any error messages (if available)\n * - {req_header_*}:   Replace `*` with the lowercased name of a request header to add to the message\n * - {res_header_*}:   Replace `*` with the lowercased name of a response header to add to the message\n * - {req_headers}:    Request headers\n * - {res_headers}:    Response headers\n * - {req_body}:       Request body\n * - {res_body}:       Response body\n *\n * @final\n */\nclass MessageFormatter implements MessageFormatterInterface\n{\n    /**\n     * Apache Common Log Format.\n     *\n     * @see https://httpd.apache.org/docs/2.4/logs.html#common\n     *\n     * @var string\n     */\n    public const CLF = '{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}';\n    public const DEBUG = \">>>>>>>>\\n{request}\\n<<<<<<<<\\n{response}\\n--------\\n{error}\";\n    public const SHORT = '[{ts}] \"{method} {target} HTTP/{version}\" {code}';\n\n    /**\n     * @var string Template used to format log messages\n     */\n    private $template;\n\n    /**\n     * @param string $template Log message template\n     */\n    public function __construct(?string $template = self::CLF)\n    {\n        $this->template = $template ?: self::CLF;\n    }\n\n    /**\n     * Returns a formatted message string.\n     *\n     * @param RequestInterface       $request  Request that was sent\n     * @param ResponseInterface|null $response Response that was received\n     * @param \\Throwable|null        $error    Exception that was received\n     */\n    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\\Throwable $error = null): string\n    {\n        $cache = [];\n\n        /** @var string */\n        return \\preg_replace_callback(\n            '/{\\s*([A-Za-z_\\-\\.0-9]+)\\s*}/',\n            function (array $matches) use ($request, $response, $error, &$cache) {\n                if (isset($cache[$matches[1]])) {\n                    return $cache[$matches[1]];\n                }\n\n                $result = '';\n                switch ($matches[1]) {\n                    case 'request':\n                        $result = Psr7\\Message::toString($request);\n                        break;\n                    case 'response':\n                        $result = $response ? Psr7\\Message::toString($response) : '';\n                        break;\n                    case 'req_headers':\n                        $result = \\trim($request->getMethod()\n                                .' '.$request->getRequestTarget())\n                            .' HTTP/'.$request->getProtocolVersion().\"\\r\\n\"\n                            .$this->headers($request);\n                        break;\n                    case 'res_headers':\n                        $result = $response ?\n                            \\sprintf(\n                                'HTTP/%s %d %s',\n                                $response->getProtocolVersion(),\n                                $response->getStatusCode(),\n                                $response->getReasonPhrase()\n                            ).\"\\r\\n\".$this->headers($response)\n                            : 'NULL';\n                        break;\n                    case 'req_body':\n                        $result = $request->getBody()->__toString();\n                        break;\n                    case 'res_body':\n                        if (!$response instanceof ResponseInterface) {\n                            $result = 'NULL';\n                            break;\n                        }\n\n                        $body = $response->getBody();\n\n                        if (!$body->isSeekable()) {\n                            $result = 'RESPONSE_NOT_LOGGEABLE';\n                            break;\n                        }\n\n                        $result = $response->getBody()->__toString();\n                        break;\n                    case 'ts':\n                    case 'date_iso_8601':\n                        $result = \\gmdate('c');\n                        break;\n                    case 'date_common_log':\n                        $result = \\date('d/M/Y:H:i:s O');\n                        break;\n                    case 'method':\n                        $result = $request->getMethod();\n                        break;\n                    case 'version':\n                        $result = $request->getProtocolVersion();\n                        break;\n                    case 'uri':\n                    case 'url':\n                        $result = $request->getUri()->__toString();\n                        break;\n                    case 'target':\n                        $result = $request->getRequestTarget();\n                        break;\n                    case 'req_version':\n                        $result = $request->getProtocolVersion();\n                        break;\n                    case 'res_version':\n                        $result = $response\n                            ? $response->getProtocolVersion()\n                            : 'NULL';\n                        break;\n                    case 'host':\n                        $result = $request->getHeaderLine('Host');\n                        break;\n                    case 'hostname':\n                        $result = \\gethostname();\n                        break;\n                    case 'code':\n                        $result = $response ? $response->getStatusCode() : 'NULL';\n                        break;\n                    case 'phrase':\n                        $result = $response ? $response->getReasonPhrase() : 'NULL';\n                        break;\n                    case 'error':\n                        $result = $error ? $error->getMessage() : 'NULL';\n                        break;\n                    default:\n                        // handle prefixed dynamic headers\n                        if (\\strpos($matches[1], 'req_header_') === 0) {\n                            $result = $request->getHeaderLine(\\substr($matches[1], 11));\n                        } elseif (\\strpos($matches[1], 'res_header_') === 0) {\n                            $result = $response\n                                ? $response->getHeaderLine(\\substr($matches[1], 11))\n                                : 'NULL';\n                        }\n                }\n\n                $cache[$matches[1]] = $result;\n\n                return $result;\n            },\n            $this->template\n        );\n    }\n\n    /**\n     * Get headers from message as string\n     */\n    private function headers(MessageInterface $message): string\n    {\n        $result = '';\n        foreach ($message->getHeaders() as $name => $values) {\n            $result .= $name.': '.\\implode(', ', $values).\"\\r\\n\";\n        }\n\n        return \\trim($result);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\ninterface MessageFormatterInterface\n{\n    /**\n     * Returns a formatted message string.\n     *\n     * @param RequestInterface       $request  Request that was sent\n     * @param ResponseInterface|null $response Response that was received\n     * @param \\Throwable|null        $error    Exception that was received\n     */\n    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\\Throwable $error = null): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Middleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Cookie\\CookieJarInterface;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * Functions used to create and wrap handlers with handler middleware.\n */\nfinal class Middleware\n{\n    /**\n     * Middleware that adds cookies to requests.\n     *\n     * The options array must be set to a CookieJarInterface in order to use\n     * cookies. This is typically handled for you by a client.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function cookies(): callable\n    {\n        return static function (callable $handler): callable {\n            return static function ($request, array $options) use ($handler) {\n                if (empty($options['cookies'])) {\n                    return $handler($request, $options);\n                } elseif (!($options['cookies'] instanceof CookieJarInterface)) {\n                    throw new \\InvalidArgumentException('cookies must be an instance of GuzzleHttp\\Cookie\\CookieJarInterface');\n                }\n                $cookieJar = $options['cookies'];\n                $request = $cookieJar->withCookieHeader($request);\n\n                return $handler($request, $options)\n                    ->then(\n                        static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface {\n                            $cookieJar->extractCookies($request, $response);\n\n                            return $response;\n                        }\n                    );\n            };\n        };\n    }\n\n    /**\n     * Middleware that throws exceptions for 4xx or 5xx responses when the\n     * \"http_errors\" request option is set to true.\n     *\n     * @param BodySummarizerInterface|null $bodySummarizer The body summarizer to use in exception messages.\n     *\n     * @return callable(callable): callable Returns a function that accepts the next handler.\n     */\n    public static function httpErrors(?BodySummarizerInterface $bodySummarizer = null): callable\n    {\n        return static function (callable $handler) use ($bodySummarizer): callable {\n            return static function ($request, array $options) use ($handler, $bodySummarizer) {\n                if (empty($options['http_errors'])) {\n                    return $handler($request, $options);\n                }\n\n                return $handler($request, $options)->then(\n                    static function (ResponseInterface $response) use ($request, $bodySummarizer) {\n                        $code = $response->getStatusCode();\n                        if ($code < 400) {\n                            return $response;\n                        }\n                        throw RequestException::create($request, $response, null, [], $bodySummarizer);\n                    }\n                );\n            };\n        };\n    }\n\n    /**\n     * Middleware that pushes history data to an ArrayAccess container.\n     *\n     * @param array|\\ArrayAccess<int, array> $container Container to hold the history (by reference).\n     *\n     * @return callable(callable): callable Returns a function that accepts the next handler.\n     *\n     * @throws \\InvalidArgumentException if container is not an array or ArrayAccess.\n     */\n    public static function history(&$container): callable\n    {\n        if (!\\is_array($container) && !$container instanceof \\ArrayAccess) {\n            throw new \\InvalidArgumentException('history container must be an array or object implementing ArrayAccess');\n        }\n\n        return static function (callable $handler) use (&$container): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, &$container) {\n                return $handler($request, $options)->then(\n                    static function ($value) use ($request, &$container, $options) {\n                        $container[] = [\n                            'request' => $request,\n                            'response' => $value,\n                            'error' => null,\n                            'options' => $options,\n                        ];\n\n                        return $value;\n                    },\n                    static function ($reason) use ($request, &$container, $options) {\n                        $container[] = [\n                            'request' => $request,\n                            'response' => null,\n                            'error' => $reason,\n                            'options' => $options,\n                        ];\n\n                        return P\\Create::rejectionFor($reason);\n                    }\n                );\n            };\n        };\n    }\n\n    /**\n     * Middleware that invokes a callback before and after sending a request.\n     *\n     * The provided listener cannot modify or alter the response. It simply\n     * \"taps\" into the chain to be notified before returning the promise. The\n     * before listener accepts a request and options array, and the after\n     * listener accepts a request, options array, and response promise.\n     *\n     * @param callable $before Function to invoke before forwarding the request.\n     * @param callable $after  Function invoked after forwarding.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function tap(?callable $before = null, ?callable $after = null): callable\n    {\n        return static function (callable $handler) use ($before, $after): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, $before, $after) {\n                if ($before) {\n                    $before($request, $options);\n                }\n                $response = $handler($request, $options);\n                if ($after) {\n                    $after($request, $options, $response);\n                }\n\n                return $response;\n            };\n        };\n    }\n\n    /**\n     * Middleware that handles request redirects.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function redirect(): callable\n    {\n        return static function (callable $handler): RedirectMiddleware {\n            return new RedirectMiddleware($handler);\n        };\n    }\n\n    /**\n     * Middleware that retries requests based on the boolean result of\n     * invoking the provided \"decider\" function.\n     *\n     * If no delay function is provided, a simple implementation of exponential\n     * backoff will be utilized.\n     *\n     * @param callable $decider Function that accepts the number of retries,\n     *                          a request, [response], and [exception] and\n     *                          returns true if the request is to be retried.\n     * @param callable $delay   Function that accepts the number of retries and\n     *                          returns the number of milliseconds to delay.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function retry(callable $decider, ?callable $delay = null): callable\n    {\n        return static function (callable $handler) use ($decider, $delay): RetryMiddleware {\n            return new RetryMiddleware($decider, $handler, $delay);\n        };\n    }\n\n    /**\n     * Middleware that logs requests, responses, and errors using a message\n     * formatter.\n     *\n     * @param LoggerInterface                            $logger    Logs messages.\n     * @param MessageFormatterInterface|MessageFormatter $formatter Formatter used to create message strings.\n     * @param string                                     $logLevel  Level at which to log requests.\n     *\n     * @phpstan-param \\Psr\\Log\\LogLevel::* $logLevel Level at which to log requests.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function log(LoggerInterface $logger, $formatter, string $logLevel = 'info'): callable\n    {\n        // To be compatible with Guzzle 7.1.x we need to allow users to pass a MessageFormatter\n        if (!$formatter instanceof MessageFormatter && !$formatter instanceof MessageFormatterInterface) {\n            throw new \\LogicException(sprintf('Argument 2 to %s::log() must be of type %s', self::class, MessageFormatterInterface::class));\n        }\n\n        return static function (callable $handler) use ($logger, $formatter, $logLevel): callable {\n            return static function (RequestInterface $request, array $options = []) use ($handler, $logger, $formatter, $logLevel) {\n                return $handler($request, $options)->then(\n                    static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface {\n                        $message = $formatter->format($request, $response);\n                        $logger->log($logLevel, $message);\n\n                        return $response;\n                    },\n                    static function ($reason) use ($logger, $request, $formatter): PromiseInterface {\n                        $response = $reason instanceof RequestException ? $reason->getResponse() : null;\n                        $message = $formatter->format($request, $response, P\\Create::exceptionFor($reason));\n                        $logger->error($message);\n\n                        return P\\Create::rejectionFor($reason);\n                    }\n                );\n            };\n        };\n    }\n\n    /**\n     * This middleware adds a default content-type if possible, a default\n     * content-length or transfer-encoding header, and the expect header.\n     */\n    public static function prepareBody(): callable\n    {\n        return static function (callable $handler): PrepareBodyMiddleware {\n            return new PrepareBodyMiddleware($handler);\n        };\n    }\n\n    /**\n     * Middleware that applies a map function to the request before passing to\n     * the next handler.\n     *\n     * @param callable $fn Function that accepts a RequestInterface and returns\n     *                     a RequestInterface.\n     */\n    public static function mapRequest(callable $fn): callable\n    {\n        return static function (callable $handler) use ($fn): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, $fn) {\n                return $handler($fn($request), $options);\n            };\n        };\n    }\n\n    /**\n     * Middleware that applies a map function to the resolved promise's\n     * response.\n     *\n     * @param callable $fn Function that accepts a ResponseInterface and\n     *                     returns a ResponseInterface.\n     */\n    public static function mapResponse(callable $fn): callable\n    {\n        return static function (callable $handler) use ($fn): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, $fn) {\n                return $handler($request, $options)->then($fn);\n            };\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Pool.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\EachPromise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Promise\\PromisorInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Sends an iterator of requests concurrently using a capped pool size.\n *\n * The pool will read from an iterator until it is cancelled or until the\n * iterator is consumed. When a request is yielded, the request is sent after\n * applying the \"request_options\" request options (if provided in the ctor).\n *\n * When a function is yielded by the iterator, the function is provided the\n * \"request_options\" array that should be merged on top of any existing\n * options, and the function MUST then return a wait-able promise.\n *\n * @final\n */\nclass Pool implements PromisorInterface\n{\n    /**\n     * @var EachPromise\n     */\n    private $each;\n\n    /**\n     * @param ClientInterface $client   Client used to send the requests.\n     * @param array|\\Iterator $requests Requests or functions that return\n     *                                  requests to send concurrently.\n     * @param array           $config   Associative array of options\n     *                                  - concurrency: (int) Maximum number of requests to send concurrently\n     *                                  - options: Array of request options to apply to each request.\n     *                                  - fulfilled: (callable) Function to invoke when a request completes.\n     *                                  - rejected: (callable) Function to invoke when a request is rejected.\n     */\n    public function __construct(ClientInterface $client, $requests, array $config = [])\n    {\n        if (!isset($config['concurrency'])) {\n            $config['concurrency'] = 25;\n        }\n\n        if (isset($config['options'])) {\n            $opts = $config['options'];\n            unset($config['options']);\n        } else {\n            $opts = [];\n        }\n\n        $iterable = P\\Create::iterFor($requests);\n        $requests = static function () use ($iterable, $client, $opts) {\n            foreach ($iterable as $key => $rfn) {\n                if ($rfn instanceof RequestInterface) {\n                    yield $key => $client->sendAsync($rfn, $opts);\n                } elseif (\\is_callable($rfn)) {\n                    yield $key => $rfn($opts);\n                } else {\n                    throw new \\InvalidArgumentException('Each value yielded by the iterator must be a Psr7\\Http\\Message\\RequestInterface or a callable that returns a promise that fulfills with a Psr7\\Message\\Http\\ResponseInterface object.');\n                }\n            }\n        };\n\n        $this->each = new EachPromise($requests(), $config);\n    }\n\n    /**\n     * Get promise\n     */\n    public function promise(): PromiseInterface\n    {\n        return $this->each->promise();\n    }\n\n    /**\n     * Sends multiple requests concurrently and returns an array of responses\n     * and exceptions that uses the same ordering as the provided requests.\n     *\n     * IMPORTANT: This method keeps every request and response in memory, and\n     * as such, is NOT recommended when sending a large number or an\n     * indeterminate number of requests concurrently.\n     *\n     * @param ClientInterface $client   Client used to send the requests\n     * @param array|\\Iterator $requests Requests to send concurrently.\n     * @param array           $options  Passes through the options available in\n     *                                  {@see Pool::__construct}\n     *\n     * @return array Returns an array containing the response or an exception\n     *               in the same order that the requests were sent.\n     *\n     * @throws \\InvalidArgumentException if the event format is incorrect.\n     */\n    public static function batch(ClientInterface $client, $requests, array $options = []): array\n    {\n        $res = [];\n        self::cmpCallback($options, 'fulfilled', $res);\n        self::cmpCallback($options, 'rejected', $res);\n        $pool = new static($client, $requests, $options);\n        $pool->promise()->wait();\n        \\ksort($res);\n\n        return $res;\n    }\n\n    /**\n     * Execute callback(s)\n     */\n    private static function cmpCallback(array &$options, string $name, array &$results): void\n    {\n        if (!isset($options[$name])) {\n            $options[$name] = static function ($v, $k) use (&$results) {\n                $results[$k] = $v;\n            };\n        } else {\n            $currentFn = $options[$name];\n            $options[$name] = static function ($v, $k) use (&$results, $currentFn) {\n                $currentFn($v, $k);\n                $results[$k] = $v;\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Prepares requests that contain a body, adding the Content-Length,\n * Content-Type, and Expect headers.\n *\n * @final\n */\nclass PrepareBodyMiddleware\n{\n    /**\n     * @var callable(RequestInterface, array): PromiseInterface\n     */\n    private $nextHandler;\n\n    /**\n     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.\n     */\n    public function __construct(callable $nextHandler)\n    {\n        $this->nextHandler = $nextHandler;\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        $fn = $this->nextHandler;\n\n        // Don't do anything if the request has no body.\n        if ($request->getBody()->getSize() === 0) {\n            return $fn($request, $options);\n        }\n\n        $modify = [];\n\n        // Add a default content-type if possible.\n        if (!$request->hasHeader('Content-Type')) {\n            if ($uri = $request->getBody()->getMetadata('uri')) {\n                if (is_string($uri) && $type = Psr7\\MimeType::fromFilename($uri)) {\n                    $modify['set_headers']['Content-Type'] = $type;\n                }\n            }\n        }\n\n        // Add a default content-length or transfer-encoding header.\n        if (!$request->hasHeader('Content-Length')\n            && !$request->hasHeader('Transfer-Encoding')\n        ) {\n            $size = $request->getBody()->getSize();\n            if ($size !== null) {\n                $modify['set_headers']['Content-Length'] = $size;\n            } else {\n                $modify['set_headers']['Transfer-Encoding'] = 'chunked';\n            }\n        }\n\n        // Add the expect header if needed.\n        $this->addExpectHeader($request, $options, $modify);\n\n        return $fn(Psr7\\Utils::modifyRequest($request, $modify), $options);\n    }\n\n    /**\n     * Add expect header\n     */\n    private function addExpectHeader(RequestInterface $request, array $options, array &$modify): void\n    {\n        // Determine if the Expect header should be used\n        if ($request->hasHeader('Expect')) {\n            return;\n        }\n\n        $expect = $options['expect'] ?? null;\n\n        // Return if disabled or using HTTP/1.0\n        if ($expect === false || $request->getProtocolVersion() === '1.0') {\n            return;\n        }\n\n        // The expect header is unconditionally enabled\n        if ($expect === true) {\n            $modify['set_headers']['Expect'] = '100-Continue';\n\n            return;\n        }\n\n        // By default, send the expect header when the payload is > 1mb\n        if ($expect === null) {\n            $expect = 1048576;\n        }\n\n        // Always add if the body cannot be rewound, the size cannot be\n        // determined, or the size is greater than the cutoff threshold\n        $body = $request->getBody();\n        $size = $body->getSize();\n\n        if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {\n            $modify['set_headers']['Expect'] = '100-Continue';\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\BadResponseException;\nuse GuzzleHttp\\Exception\\TooManyRedirectsException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Request redirect middleware.\n *\n * Apply this middleware like other middleware using\n * {@see \\GuzzleHttp\\Middleware::redirect()}.\n *\n * @final\n */\nclass RedirectMiddleware\n{\n    public const HISTORY_HEADER = 'X-Guzzle-Redirect-History';\n\n    public const STATUS_HISTORY_HEADER = 'X-Guzzle-Redirect-Status-History';\n\n    /**\n     * @var array\n     */\n    public static $defaultSettings = [\n        'max' => 5,\n        'protocols' => ['http', 'https'],\n        'strict' => false,\n        'referer' => false,\n        'track_redirects' => false,\n    ];\n\n    /**\n     * @var callable(RequestInterface, array): PromiseInterface\n     */\n    private $nextHandler;\n\n    /**\n     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.\n     */\n    public function __construct(callable $nextHandler)\n    {\n        $this->nextHandler = $nextHandler;\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        $fn = $this->nextHandler;\n\n        if (empty($options['allow_redirects'])) {\n            return $fn($request, $options);\n        }\n\n        if ($options['allow_redirects'] === true) {\n            $options['allow_redirects'] = self::$defaultSettings;\n        } elseif (!\\is_array($options['allow_redirects'])) {\n            throw new \\InvalidArgumentException('allow_redirects must be true, false, or array');\n        } else {\n            // Merge the default settings with the provided settings\n            $options['allow_redirects'] += self::$defaultSettings;\n        }\n\n        if (empty($options['allow_redirects']['max'])) {\n            return $fn($request, $options);\n        }\n\n        return $fn($request, $options)\n            ->then(function (ResponseInterface $response) use ($request, $options) {\n                return $this->checkRedirect($request, $options, $response);\n            });\n    }\n\n    /**\n     * @return ResponseInterface|PromiseInterface\n     */\n    public function checkRedirect(RequestInterface $request, array $options, ResponseInterface $response)\n    {\n        if (\\strpos((string) $response->getStatusCode(), '3') !== 0\n            || !$response->hasHeader('Location')\n        ) {\n            return $response;\n        }\n\n        $this->guardMax($request, $response, $options);\n        $nextRequest = $this->modifyRequest($request, $options, $response);\n\n        // If authorization is handled by curl, unset it if URI is cross-origin.\n        if (Psr7\\UriComparator::isCrossOrigin($request->getUri(), $nextRequest->getUri()) && defined('\\CURLOPT_HTTPAUTH')) {\n            unset(\n                $options['curl'][\\CURLOPT_HTTPAUTH],\n                $options['curl'][\\CURLOPT_USERPWD]\n            );\n        }\n\n        if (isset($options['allow_redirects']['on_redirect'])) {\n            ($options['allow_redirects']['on_redirect'])(\n                $request,\n                $response,\n                $nextRequest->getUri()\n            );\n        }\n\n        $promise = $this($nextRequest, $options);\n\n        // Add headers to be able to track history of redirects.\n        if (!empty($options['allow_redirects']['track_redirects'])) {\n            return $this->withTracking(\n                $promise,\n                (string) $nextRequest->getUri(),\n                $response->getStatusCode()\n            );\n        }\n\n        return $promise;\n    }\n\n    /**\n     * Enable tracking on promise.\n     */\n    private function withTracking(PromiseInterface $promise, string $uri, int $statusCode): PromiseInterface\n    {\n        return $promise->then(\n            static function (ResponseInterface $response) use ($uri, $statusCode) {\n                // Note that we are pushing to the front of the list as this\n                // would be an earlier response than what is currently present\n                // in the history header.\n                $historyHeader = $response->getHeader(self::HISTORY_HEADER);\n                $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER);\n                \\array_unshift($historyHeader, $uri);\n                \\array_unshift($statusHeader, (string) $statusCode);\n\n                return $response->withHeader(self::HISTORY_HEADER, $historyHeader)\n                                ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader);\n            }\n        );\n    }\n\n    /**\n     * Check for too many redirects.\n     *\n     * @throws TooManyRedirectsException Too many redirects.\n     */\n    private function guardMax(RequestInterface $request, ResponseInterface $response, array &$options): void\n    {\n        $current = $options['__redirect_count']\n            ?? 0;\n        $options['__redirect_count'] = $current + 1;\n        $max = $options['allow_redirects']['max'];\n\n        if ($options['__redirect_count'] > $max) {\n            throw new TooManyRedirectsException(\"Will not follow more than {$max} redirects\", $request, $response);\n        }\n    }\n\n    public function modifyRequest(RequestInterface $request, array $options, ResponseInterface $response): RequestInterface\n    {\n        // Request modifications to apply.\n        $modify = [];\n        $protocols = $options['allow_redirects']['protocols'];\n\n        // Use a GET request if this is an entity enclosing request and we are\n        // not forcing RFC compliance, but rather emulating what all browsers\n        // would do.\n        $statusCode = $response->getStatusCode();\n        if ($statusCode == 303\n            || ($statusCode <= 302 && !$options['allow_redirects']['strict'])\n        ) {\n            $safeMethods = ['GET', 'HEAD', 'OPTIONS'];\n            $requestMethod = $request->getMethod();\n\n            $modify['method'] = in_array($requestMethod, $safeMethods) ? $requestMethod : 'GET';\n            $modify['body'] = '';\n        }\n\n        $uri = self::redirectUri($request, $response, $protocols);\n        if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) {\n            $idnOptions = ($options['idn_conversion'] === true) ? \\IDNA_DEFAULT : $options['idn_conversion'];\n            $uri = Utils::idnUriConvert($uri, $idnOptions);\n        }\n\n        $modify['uri'] = $uri;\n        Psr7\\Message::rewindBody($request);\n\n        // Add the Referer header if it is told to do so and only\n        // add the header if we are not redirecting from https to http.\n        if ($options['allow_redirects']['referer']\n            && $modify['uri']->getScheme() === $request->getUri()->getScheme()\n        ) {\n            $uri = $request->getUri()->withUserInfo('');\n            $modify['set_headers']['Referer'] = (string) $uri;\n        } else {\n            $modify['remove_headers'][] = 'Referer';\n        }\n\n        // Remove Authorization and Cookie headers if URI is cross-origin.\n        if (Psr7\\UriComparator::isCrossOrigin($request->getUri(), $modify['uri'])) {\n            $modify['remove_headers'][] = 'Authorization';\n            $modify['remove_headers'][] = 'Cookie';\n        }\n\n        return Psr7\\Utils::modifyRequest($request, $modify);\n    }\n\n    /**\n     * Set the appropriate URL on the request based on the location header.\n     */\n    private static function redirectUri(\n        RequestInterface $request,\n        ResponseInterface $response,\n        array $protocols\n    ): UriInterface {\n        $location = Psr7\\UriResolver::resolve(\n            $request->getUri(),\n            new Psr7\\Uri($response->getHeaderLine('Location'))\n        );\n\n        // Ensure that the redirect URI is allowed based on the protocols.\n        if (!\\in_array($location->getScheme(), $protocols)) {\n            throw new BadResponseException(\\sprintf('Redirect URI, %s, does not use one of the allowed redirect protocols: %s', $location, \\implode(', ', $protocols)), $request, $response);\n        }\n\n        return $location;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/RequestOptions.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\n/**\n * This class contains a list of built-in Guzzle request options.\n *\n * @see https://docs.guzzlephp.org/en/latest/request-options.html\n */\nfinal class RequestOptions\n{\n    /**\n     * allow_redirects: (bool|array) Controls redirect behavior. Pass false\n     * to disable redirects, pass true to enable redirects, pass an\n     * associative to provide custom redirect settings. Defaults to \"false\".\n     * This option only works if your handler has the RedirectMiddleware. When\n     * passing an associative array, you can provide the following key value\n     * pairs:\n     *\n     * - max: (int, default=5) maximum number of allowed redirects.\n     * - strict: (bool, default=false) Set to true to use strict redirects\n     *   meaning redirect POST requests with POST requests vs. doing what most\n     *   browsers do which is redirect POST requests with GET requests\n     * - referer: (bool, default=false) Set to true to enable the Referer\n     *   header.\n     * - protocols: (array, default=['http', 'https']) Allowed redirect\n     *   protocols.\n     * - on_redirect: (callable) PHP callable that is invoked when a redirect\n     *   is encountered. The callable is invoked with the request, the redirect\n     *   response that was received, and the effective URI. Any return value\n     *   from the on_redirect function is ignored.\n     */\n    public const ALLOW_REDIRECTS = 'allow_redirects';\n\n    /**\n     * auth: (array) Pass an array of HTTP authentication parameters to use\n     * with the request. The array must contain the username in index [0],\n     * the password in index [1], and you can optionally provide a built-in\n     * authentication type in index [2]. Pass null to disable authentication\n     * for a request.\n     */\n    public const AUTH = 'auth';\n\n    /**\n     * body: (resource|string|null|int|float|StreamInterface|callable|\\Iterator)\n     * Body to send in the request.\n     */\n    public const BODY = 'body';\n\n    /**\n     * cert: (string|array) Set to a string to specify the path to a file\n     * containing a PEM formatted SSL client side certificate. If a password\n     * is required, then set cert to an array containing the path to the PEM\n     * file in the first array element followed by the certificate password\n     * in the second array element.\n     */\n    public const CERT = 'cert';\n\n    /**\n     * cookies: (bool|GuzzleHttp\\Cookie\\CookieJarInterface, default=false)\n     * Specifies whether or not cookies are used in a request or what cookie\n     * jar to use or what cookies to send. This option only works if your\n     * handler has the `cookie` middleware. Valid values are `false` and\n     * an instance of {@see Cookie\\CookieJarInterface}.\n     */\n    public const COOKIES = 'cookies';\n\n    /**\n     * connect_timeout: (float, default=0) Float describing the number of\n     * seconds to wait while trying to connect to a server. Use 0 to wait\n     * 300 seconds (the default behavior).\n     */\n    public const CONNECT_TIMEOUT = 'connect_timeout';\n\n    /**\n     * crypto_method: (int) A value describing the minimum TLS protocol\n     * version to use.\n     *\n     * This setting must be set to one of the\n     * ``STREAM_CRYPTO_METHOD_TLS*_CLIENT`` constants. PHP 7.4 or higher is\n     * required in order to use TLS 1.3, and cURL 7.34.0 or higher is required\n     * in order to specify a crypto method, with cURL 7.52.0 or higher being\n     * required to use TLS 1.3.\n     */\n    public const CRYPTO_METHOD = 'crypto_method';\n\n    /**\n     * debug: (bool|resource) Set to true or set to a PHP stream returned by\n     * fopen()  enable debug output with the HTTP handler used to send a\n     * request.\n     */\n    public const DEBUG = 'debug';\n\n    /**\n     * decode_content: (bool, default=true) Specify whether or not\n     * Content-Encoding responses (gzip, deflate, etc.) are automatically\n     * decoded.\n     */\n    public const DECODE_CONTENT = 'decode_content';\n\n    /**\n     * delay: (int) The amount of time to delay before sending in milliseconds.\n     */\n    public const DELAY = 'delay';\n\n    /**\n     * expect: (bool|integer) Controls the behavior of the\n     * \"Expect: 100-Continue\" header.\n     *\n     * Set to `true` to enable the \"Expect: 100-Continue\" header for all\n     * requests that sends a body. Set to `false` to disable the\n     * \"Expect: 100-Continue\" header for all requests. Set to a number so that\n     * the size of the payload must be greater than the number in order to send\n     * the Expect header. Setting to a number will send the Expect header for\n     * all requests in which the size of the payload cannot be determined or\n     * where the body is not rewindable.\n     *\n     * By default, Guzzle will add the \"Expect: 100-Continue\" header when the\n     * size of the body of a request is greater than 1 MB and a request is\n     * using HTTP/1.1.\n     */\n    public const EXPECT = 'expect';\n\n    /**\n     * form_params: (array) Associative array of form field names to values\n     * where each value is a string or array of strings. Sets the Content-Type\n     * header to application/x-www-form-urlencoded when no Content-Type header\n     * is already present.\n     */\n    public const FORM_PARAMS = 'form_params';\n\n    /**\n     * headers: (array) Associative array of HTTP headers. Each value MUST be\n     * a string or array of strings.\n     */\n    public const HEADERS = 'headers';\n\n    /**\n     * http_errors: (bool, default=true) Set to false to disable exceptions\n     * when a non- successful HTTP response is received. By default,\n     * exceptions will be thrown for 4xx and 5xx responses. This option only\n     * works if your handler has the `httpErrors` middleware.\n     */\n    public const HTTP_ERRORS = 'http_errors';\n\n    /**\n     * idn: (bool|int, default=true) A combination of IDNA_* constants for\n     * idn_to_ascii() PHP's function (see \"options\" parameter). Set to false to\n     * disable IDN support completely, or to true to use the default\n     * configuration (IDNA_DEFAULT constant).\n     */\n    public const IDN_CONVERSION = 'idn_conversion';\n\n    /**\n     * json: (mixed) Adds JSON data to a request. The provided value is JSON\n     * encoded and a Content-Type header of application/json will be added to\n     * the request if no Content-Type header is already present.\n     */\n    public const JSON = 'json';\n\n    /**\n     * multipart: (array) Array of associative arrays, each containing a\n     * required \"name\" key mapping to the form field, name, a required\n     * \"contents\" key mapping to a StreamInterface|resource|string, an\n     * optional \"headers\" associative array of custom headers, and an\n     * optional \"filename\" key mapping to a string to send as the filename in\n     * the part. If no \"filename\" key is present, then no \"filename\" attribute\n     * will be added to the part.\n     */\n    public const MULTIPART = 'multipart';\n\n    /**\n     * on_headers: (callable) A callable that is invoked when the HTTP headers\n     * of the response have been received but the body has not yet begun to\n     * download.\n     */\n    public const ON_HEADERS = 'on_headers';\n\n    /**\n     * on_stats: (callable) allows you to get access to transfer statistics of\n     * a request and access the lower level transfer details of the handler\n     * associated with your client. ``on_stats`` is a callable that is invoked\n     * when a handler has finished sending a request. The callback is invoked\n     * with transfer statistics about the request, the response received, or\n     * the error encountered. Included in the data is the total amount of time\n     * taken to send the request.\n     */\n    public const ON_STATS = 'on_stats';\n\n    /**\n     * progress: (callable) Defines a function to invoke when transfer\n     * progress is made. The function accepts the following positional\n     * arguments: the total number of bytes expected to be downloaded, the\n     * number of bytes downloaded so far, the number of bytes expected to be\n     * uploaded, the number of bytes uploaded so far.\n     */\n    public const PROGRESS = 'progress';\n\n    /**\n     * proxy: (string|array) Pass a string to specify an HTTP proxy, or an\n     * array to specify different proxies for different protocols (where the\n     * key is the protocol and the value is a proxy string).\n     */\n    public const PROXY = 'proxy';\n\n    /**\n     * query: (array|string) Associative array of query string values to add\n     * to the request. This option uses PHP's http_build_query() to create\n     * the string representation. Pass a string value if you need more\n     * control than what this method provides\n     */\n    public const QUERY = 'query';\n\n    /**\n     * sink: (resource|string|StreamInterface) Where the data of the\n     * response is written to. Defaults to a PHP temp stream. Providing a\n     * string will write data to a file by the given name.\n     */\n    public const SINK = 'sink';\n\n    /**\n     * synchronous: (bool) Set to true to inform HTTP handlers that you intend\n     * on waiting on the response. This can be useful for optimizations. Note\n     * that a promise is still returned if you are using one of the async\n     * client methods.\n     */\n    public const SYNCHRONOUS = 'synchronous';\n\n    /**\n     * ssl_key: (array|string) Specify the path to a file containing a private\n     * SSL key in PEM format. If a password is required, then set to an array\n     * containing the path to the SSL key in the first array element followed\n     * by the password required for the certificate in the second element.\n     */\n    public const SSL_KEY = 'ssl_key';\n\n    /**\n     * stream: Set to true to attempt to stream a response rather than\n     * download it all up-front.\n     */\n    public const STREAM = 'stream';\n\n    /**\n     * verify: (bool|string, default=true) Describes the SSL certificate\n     * verification behavior of a request. Set to true to enable SSL\n     * certificate verification using the system CA bundle when available\n     * (the default). Set to false to disable certificate verification (this\n     * is insecure!). Set to a string to provide the path to a CA bundle on\n     * disk to enable verification using a custom certificate.\n     */\n    public const VERIFY = 'verify';\n\n    /**\n     * timeout: (float, default=0) Float describing the timeout of the\n     * request in seconds. Use 0 to wait indefinitely (the default behavior).\n     */\n    public const TIMEOUT = 'timeout';\n\n    /**\n     * read_timeout: (float, default=default_socket_timeout ini setting) Float describing\n     * the body read timeout, for stream requests.\n     */\n    public const READ_TIMEOUT = 'read_timeout';\n\n    /**\n     * version: (float) Specifies the HTTP protocol version to attempt to use.\n     */\n    public const VERSION = 'version';\n\n    /**\n     * force_ip_resolve: (bool) Force client to use only ipv4 or ipv6 protocol\n     */\n    public const FORCE_IP_RESOLVE = 'force_ip_resolve';\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Middleware that retries requests based on the boolean result of\n * invoking the provided \"decider\" function.\n *\n * @final\n */\nclass RetryMiddleware\n{\n    /**\n     * @var callable(RequestInterface, array): PromiseInterface\n     */\n    private $nextHandler;\n\n    /**\n     * @var callable\n     */\n    private $decider;\n\n    /**\n     * @var callable(int)\n     */\n    private $delay;\n\n    /**\n     * @param callable                                            $decider     Function that accepts the number of retries,\n     *                                                                         a request, [response], and [exception] and\n     *                                                                         returns true if the request is to be\n     *                                                                         retried.\n     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.\n     * @param (callable(int): int)|null                           $delay       Function that accepts the number of retries\n     *                                                                         and returns the number of\n     *                                                                         milliseconds to delay.\n     */\n    public function __construct(callable $decider, callable $nextHandler, ?callable $delay = null)\n    {\n        $this->decider = $decider;\n        $this->nextHandler = $nextHandler;\n        $this->delay = $delay ?: __CLASS__.'::exponentialDelay';\n    }\n\n    /**\n     * Default exponential backoff delay function.\n     *\n     * @return int milliseconds.\n     */\n    public static function exponentialDelay(int $retries): int\n    {\n        return (int) 2 ** ($retries - 1) * 1000;\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        if (!isset($options['retries'])) {\n            $options['retries'] = 0;\n        }\n\n        $fn = $this->nextHandler;\n\n        return $fn($request, $options)\n            ->then(\n                $this->onFulfilled($request, $options),\n                $this->onRejected($request, $options)\n            );\n    }\n\n    /**\n     * Execute fulfilled closure\n     */\n    private function onFulfilled(RequestInterface $request, array $options): callable\n    {\n        return function ($value) use ($request, $options) {\n            if (!($this->decider)(\n                $options['retries'],\n                $request,\n                $value,\n                null\n            )) {\n                return $value;\n            }\n\n            return $this->doRetry($request, $options, $value);\n        };\n    }\n\n    /**\n     * Execute rejected closure\n     */\n    private function onRejected(RequestInterface $req, array $options): callable\n    {\n        return function ($reason) use ($req, $options) {\n            if (!($this->decider)(\n                $options['retries'],\n                $req,\n                null,\n                $reason\n            )) {\n                return P\\Create::rejectionFor($reason);\n            }\n\n            return $this->doRetry($req, $options);\n        };\n    }\n\n    private function doRetry(RequestInterface $request, array $options, ?ResponseInterface $response = null): PromiseInterface\n    {\n        $options['delay'] = ($this->delay)(++$options['retries'], $response, $request);\n\n        return $this($request, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/TransferStats.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Represents data at the point after it was transferred either successfully\n * or after a network error.\n */\nfinal class TransferStats\n{\n    /**\n     * @var RequestInterface\n     */\n    private $request;\n\n    /**\n     * @var ResponseInterface|null\n     */\n    private $response;\n\n    /**\n     * @var float|null\n     */\n    private $transferTime;\n\n    /**\n     * @var array\n     */\n    private $handlerStats;\n\n    /**\n     * @var mixed|null\n     */\n    private $handlerErrorData;\n\n    /**\n     * @param RequestInterface       $request          Request that was sent.\n     * @param ResponseInterface|null $response         Response received (if any)\n     * @param float|null             $transferTime     Total handler transfer time.\n     * @param mixed                  $handlerErrorData Handler error data.\n     * @param array                  $handlerStats     Handler specific stats.\n     */\n    public function __construct(\n        RequestInterface $request,\n        ?ResponseInterface $response = null,\n        ?float $transferTime = null,\n        $handlerErrorData = null,\n        array $handlerStats = []\n    ) {\n        $this->request = $request;\n        $this->response = $response;\n        $this->transferTime = $transferTime;\n        $this->handlerErrorData = $handlerErrorData;\n        $this->handlerStats = $handlerStats;\n    }\n\n    public function getRequest(): RequestInterface\n    {\n        return $this->request;\n    }\n\n    /**\n     * Returns the response that was received (if any).\n     */\n    public function getResponse(): ?ResponseInterface\n    {\n        return $this->response;\n    }\n\n    /**\n     * Returns true if a response was received.\n     */\n    public function hasResponse(): bool\n    {\n        return $this->response !== null;\n    }\n\n    /**\n     * Gets handler specific error data.\n     *\n     * This might be an exception, a integer representing an error code, or\n     * anything else. Relying on this value assumes that you know what handler\n     * you are using.\n     *\n     * @return mixed\n     */\n    public function getHandlerErrorData()\n    {\n        return $this->handlerErrorData;\n    }\n\n    /**\n     * Get the effective URI the request was sent to.\n     */\n    public function getEffectiveUri(): UriInterface\n    {\n        return $this->request->getUri();\n    }\n\n    /**\n     * Get the estimated time the request was being transferred by the handler.\n     *\n     * @return float|null Time in seconds.\n     */\n    public function getTransferTime(): ?float\n    {\n        return $this->transferTime;\n    }\n\n    /**\n     * Gets an array of all of the handler specific transfer data.\n     */\n    public function getHandlerStats(): array\n    {\n        return $this->handlerStats;\n    }\n\n    /**\n     * Get a specific handler statistic from the handler by name.\n     *\n     * @param string $stat Handler specific transfer stat to retrieve.\n     *\n     * @return mixed|null\n     */\n    public function getHandlerStat(string $stat)\n    {\n        return $this->handlerStats[$stat] ?? null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/Utils.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\InvalidArgumentException;\nuse GuzzleHttp\\Handler\\CurlHandler;\nuse GuzzleHttp\\Handler\\CurlMultiHandler;\nuse GuzzleHttp\\Handler\\Proxy;\nuse GuzzleHttp\\Handler\\StreamHandler;\nuse Psr\\Http\\Message\\UriInterface;\n\nfinal class Utils\n{\n    /**\n     * Debug function used to describe the provided value type and class.\n     *\n     * @param mixed $input\n     *\n     * @return string Returns a string containing the type of the variable and\n     *                if a class is provided, the class name.\n     */\n    public static function describeType($input): string\n    {\n        switch (\\gettype($input)) {\n            case 'object':\n                return 'object('.\\get_class($input).')';\n            case 'array':\n                return 'array('.\\count($input).')';\n            default:\n                \\ob_start();\n                \\var_dump($input);\n                // normalize float vs double\n                /** @var string $varDumpContent */\n                $varDumpContent = \\ob_get_clean();\n\n                return \\str_replace('double(', 'float(', \\rtrim($varDumpContent));\n        }\n    }\n\n    /**\n     * Parses an array of header lines into an associative array of headers.\n     *\n     * @param iterable $lines Header lines array of strings in the following\n     *                        format: \"Name: Value\"\n     */\n    public static function headersFromLines(iterable $lines): array\n    {\n        $headers = [];\n\n        foreach ($lines as $line) {\n            $parts = \\explode(':', $line, 2);\n            $headers[\\trim($parts[0])][] = isset($parts[1]) ? \\trim($parts[1]) : null;\n        }\n\n        return $headers;\n    }\n\n    /**\n     * Returns a debug stream based on the provided variable.\n     *\n     * @param mixed $value Optional value\n     *\n     * @return resource\n     */\n    public static function debugResource($value = null)\n    {\n        if (\\is_resource($value)) {\n            return $value;\n        }\n        if (\\defined('STDOUT')) {\n            return \\STDOUT;\n        }\n\n        return Psr7\\Utils::tryFopen('php://output', 'w');\n    }\n\n    /**\n     * Chooses and creates a default handler to use based on the environment.\n     *\n     * The returned handler is not wrapped by any default middlewares.\n     *\n     * @return callable(\\Psr\\Http\\Message\\RequestInterface, array): Promise\\PromiseInterface Returns the best handler for the given system.\n     *\n     * @throws \\RuntimeException if no viable Handler is available.\n     */\n    public static function chooseHandler(): callable\n    {\n        $handler = null;\n\n        if (\\defined('CURLOPT_CUSTOMREQUEST') && \\function_exists('curl_version') && version_compare(curl_version()['version'], '7.21.2') >= 0) {\n            if (\\function_exists('curl_multi_exec') && \\function_exists('curl_exec')) {\n                $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());\n            } elseif (\\function_exists('curl_exec')) {\n                $handler = new CurlHandler();\n            } elseif (\\function_exists('curl_multi_exec')) {\n                $handler = new CurlMultiHandler();\n            }\n        }\n\n        if (\\ini_get('allow_url_fopen')) {\n            $handler = $handler\n                ? Proxy::wrapStreaming($handler, new StreamHandler())\n                : new StreamHandler();\n        } elseif (!$handler) {\n            throw new \\RuntimeException('GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler.');\n        }\n\n        return $handler;\n    }\n\n    /**\n     * Get the default User-Agent string to use with Guzzle.\n     */\n    public static function defaultUserAgent(): string\n    {\n        return sprintf('GuzzleHttp/%d', ClientInterface::MAJOR_VERSION);\n    }\n\n    /**\n     * Returns the default cacert bundle for the current system.\n     *\n     * First, the openssl.cafile and curl.cainfo php.ini settings are checked.\n     * If those settings are not configured, then the common locations for\n     * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X\n     * and Windows are checked. If any of these file locations are found on\n     * disk, they will be utilized.\n     *\n     * Note: the result of this function is cached for subsequent calls.\n     *\n     * @throws \\RuntimeException if no bundle can be found.\n     *\n     * @deprecated Utils::defaultCaBundle will be removed in guzzlehttp/guzzle:8.0. This method is not needed in PHP 5.6+.\n     */\n    public static function defaultCaBundle(): string\n    {\n        static $cached = null;\n        static $cafiles = [\n            // Red Hat, CentOS, Fedora (provided by the ca-certificates package)\n            '/etc/pki/tls/certs/ca-bundle.crt',\n            // Ubuntu, Debian (provided by the ca-certificates package)\n            '/etc/ssl/certs/ca-certificates.crt',\n            // FreeBSD (provided by the ca_root_nss package)\n            '/usr/local/share/certs/ca-root-nss.crt',\n            // SLES 12 (provided by the ca-certificates package)\n            '/var/lib/ca-certificates/ca-bundle.pem',\n            // OS X provided by homebrew (using the default path)\n            '/usr/local/etc/openssl/cert.pem',\n            // Google app engine\n            '/etc/ca-certificates.crt',\n            // Windows?\n            'C:\\\\windows\\\\system32\\\\curl-ca-bundle.crt',\n            'C:\\\\windows\\\\curl-ca-bundle.crt',\n        ];\n\n        if ($cached) {\n            return $cached;\n        }\n\n        if ($ca = \\ini_get('openssl.cafile')) {\n            return $cached = $ca;\n        }\n\n        if ($ca = \\ini_get('curl.cainfo')) {\n            return $cached = $ca;\n        }\n\n        foreach ($cafiles as $filename) {\n            if (\\file_exists($filename)) {\n                return $cached = $filename;\n            }\n        }\n\n        throw new \\RuntimeException(\n            <<< EOT\nNo system CA bundle could be found in any of the the common system locations.\nPHP versions earlier than 5.6 are not properly configured to use the system's\nCA bundle by default. In order to verify peer certificates, you will need to\nsupply the path on disk to a certificate bundle to the 'verify' request\noption: https://docs.guzzlephp.org/en/latest/request-options.html#verify. If\nyou do not need a specific certificate bundle, then Mozilla provides a commonly\nused CA bundle which can be downloaded here (provided by the maintainer of\ncURL): https://curl.haxx.se/ca/cacert.pem. Once you have a CA bundle available\non disk, you can set the 'openssl.cafile' PHP ini setting to point to the path\nto the file, allowing you to omit the 'verify' request option. See\nhttps://curl.haxx.se/docs/sslcerts.html for more information.\nEOT\n        );\n    }\n\n    /**\n     * Creates an associative array of lowercase header names to the actual\n     * header casing.\n     */\n    public static function normalizeHeaderKeys(array $headers): array\n    {\n        $result = [];\n        foreach (\\array_keys($headers) as $key) {\n            $result[\\strtolower($key)] = $key;\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns true if the provided host matches any of the no proxy areas.\n     *\n     * This method will strip a port from the host if it is present. Each pattern\n     * can be matched with an exact match (e.g., \"foo.com\" == \"foo.com\") or a\n     * partial match: (e.g., \"foo.com\" == \"baz.foo.com\" and \".foo.com\" ==\n     * \"baz.foo.com\", but \".foo.com\" != \"foo.com\").\n     *\n     * Areas are matched in the following cases:\n     * 1. \"*\" (without quotes) always matches any hosts.\n     * 2. An exact match.\n     * 3. The area starts with \".\" and the area is the last part of the host. e.g.\n     *    '.mit.edu' will match any host that ends with '.mit.edu'.\n     *\n     * @param string   $host         Host to check against the patterns.\n     * @param string[] $noProxyArray An array of host patterns.\n     *\n     * @throws InvalidArgumentException\n     */\n    public static function isHostInNoProxy(string $host, array $noProxyArray): bool\n    {\n        if (\\strlen($host) === 0) {\n            throw new InvalidArgumentException('Empty host provided');\n        }\n\n        // Strip port if present.\n        [$host] = \\explode(':', $host, 2);\n\n        foreach ($noProxyArray as $area) {\n            // Always match on wildcards.\n            if ($area === '*') {\n                return true;\n            }\n\n            if (empty($area)) {\n                // Don't match on empty values.\n                continue;\n            }\n\n            if ($area === $host) {\n                // Exact matches.\n                return true;\n            }\n            // Special match if the area when prefixed with \".\". Remove any\n            // existing leading \".\" and add a new leading \".\".\n            $area = '.'.\\ltrim($area, '.');\n            if (\\substr($host, -\\strlen($area)) === $area) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Wrapper for json_decode that throws when an error occurs.\n     *\n     * @param string $json    JSON data to parse\n     * @param bool   $assoc   When true, returned objects will be converted\n     *                        into associative arrays.\n     * @param int    $depth   User specified recursion depth.\n     * @param int    $options Bitmask of JSON decode options.\n     *\n     * @return object|array|string|int|float|bool|null\n     *\n     * @throws InvalidArgumentException if the JSON cannot be decoded.\n     *\n     * @see https://www.php.net/manual/en/function.json-decode.php\n     */\n    public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)\n    {\n        $data = \\json_decode($json, $assoc, $depth, $options);\n        if (\\JSON_ERROR_NONE !== \\json_last_error()) {\n            throw new InvalidArgumentException('json_decode error: '.\\json_last_error_msg());\n        }\n\n        return $data;\n    }\n\n    /**\n     * Wrapper for JSON encoding that throws when an error occurs.\n     *\n     * @param mixed $value   The value being encoded\n     * @param int   $options JSON encode option bitmask\n     * @param int   $depth   Set the maximum depth. Must be greater than zero.\n     *\n     * @throws InvalidArgumentException if the JSON cannot be encoded.\n     *\n     * @see https://www.php.net/manual/en/function.json-encode.php\n     */\n    public static function jsonEncode($value, int $options = 0, int $depth = 512): string\n    {\n        $json = \\json_encode($value, $options, $depth);\n        if (\\JSON_ERROR_NONE !== \\json_last_error()) {\n            throw new InvalidArgumentException('json_encode error: '.\\json_last_error_msg());\n        }\n\n        /** @var string */\n        return $json;\n    }\n\n    /**\n     * Wrapper for the hrtime() or microtime() functions\n     * (depending on the PHP version, one of the two is used)\n     *\n     * @return float UNIX timestamp\n     *\n     * @internal\n     */\n    public static function currentTime(): float\n    {\n        return (float) \\function_exists('hrtime') ? \\hrtime(true) / 1e9 : \\microtime(true);\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     *\n     * @internal\n     */\n    public static function idnUriConvert(UriInterface $uri, int $options = 0): UriInterface\n    {\n        if ($uri->getHost()) {\n            $asciiHost = self::idnToAsci($uri->getHost(), $options, $info);\n            if ($asciiHost === false) {\n                $errorBitSet = $info['errors'] ?? 0;\n\n                $errorConstants = array_filter(array_keys(get_defined_constants()), static function (string $name): bool {\n                    return substr($name, 0, 11) === 'IDNA_ERROR_';\n                });\n\n                $errors = [];\n                foreach ($errorConstants as $errorConstant) {\n                    if ($errorBitSet & constant($errorConstant)) {\n                        $errors[] = $errorConstant;\n                    }\n                }\n\n                $errorMessage = 'IDN conversion failed';\n                if ($errors) {\n                    $errorMessage .= ' (errors: '.implode(', ', $errors).')';\n                }\n\n                throw new InvalidArgumentException($errorMessage);\n            }\n            if ($uri->getHost() !== $asciiHost) {\n                // Replace URI only if the ASCII version is different\n                $uri = $uri->withHost($asciiHost);\n            }\n        }\n\n        return $uri;\n    }\n\n    /**\n     * @internal\n     */\n    public static function getenv(string $name): ?string\n    {\n        if (isset($_SERVER[$name])) {\n            return (string) $_SERVER[$name];\n        }\n\n        if (\\PHP_SAPI === 'cli' && ($value = \\getenv($name)) !== false && $value !== null) {\n            return (string) $value;\n        }\n\n        return null;\n    }\n\n    /**\n     * @return string|false\n     */\n    private static function idnToAsci(string $domain, int $options, ?array &$info = [])\n    {\n        if (\\function_exists('idn_to_ascii') && \\defined('INTL_IDNA_VARIANT_UTS46')) {\n            return \\idn_to_ascii($domain, $options, \\INTL_IDNA_VARIANT_UTS46, $info);\n        }\n\n        throw new \\Error('ext-idn or symfony/polyfill-intl-idn not loaded or too old');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/functions.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\n/**\n * Debug function used to describe the provided value type and class.\n *\n * @param mixed $input Any type of variable to describe the type of. This\n *                     parameter misses a typehint because of that.\n *\n * @return string Returns a string containing the type of the variable and\n *                if a class is provided, the class name.\n *\n * @deprecated describe_type will be removed in guzzlehttp/guzzle:8.0. Use Utils::describeType instead.\n */\nfunction describe_type($input): string\n{\n    return Utils::describeType($input);\n}\n\n/**\n * Parses an array of header lines into an associative array of headers.\n *\n * @param iterable $lines Header lines array of strings in the following\n *                        format: \"Name: Value\"\n *\n * @deprecated headers_from_lines will be removed in guzzlehttp/guzzle:8.0. Use Utils::headersFromLines instead.\n */\nfunction headers_from_lines(iterable $lines): array\n{\n    return Utils::headersFromLines($lines);\n}\n\n/**\n * Returns a debug stream based on the provided variable.\n *\n * @param mixed $value Optional value\n *\n * @return resource\n *\n * @deprecated debug_resource will be removed in guzzlehttp/guzzle:8.0. Use Utils::debugResource instead.\n */\nfunction debug_resource($value = null)\n{\n    return Utils::debugResource($value);\n}\n\n/**\n * Chooses and creates a default handler to use based on the environment.\n *\n * The returned handler is not wrapped by any default middlewares.\n *\n * @return callable(\\Psr\\Http\\Message\\RequestInterface, array): Promise\\PromiseInterface Returns the best handler for the given system.\n *\n * @throws \\RuntimeException if no viable Handler is available.\n *\n * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead.\n */\nfunction choose_handler(): callable\n{\n    return Utils::chooseHandler();\n}\n\n/**\n * Get the default User-Agent string to use with Guzzle.\n *\n * @deprecated default_user_agent will be removed in guzzlehttp/guzzle:8.0. Use Utils::defaultUserAgent instead.\n */\nfunction default_user_agent(): string\n{\n    return Utils::defaultUserAgent();\n}\n\n/**\n * Returns the default cacert bundle for the current system.\n *\n * First, the openssl.cafile and curl.cainfo php.ini settings are checked.\n * If those settings are not configured, then the common locations for\n * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X\n * and Windows are checked. If any of these file locations are found on\n * disk, they will be utilized.\n *\n * Note: the result of this function is cached for subsequent calls.\n *\n * @throws \\RuntimeException if no bundle can be found.\n *\n * @deprecated default_ca_bundle will be removed in guzzlehttp/guzzle:8.0. This function is not needed in PHP 5.6+.\n */\nfunction default_ca_bundle(): string\n{\n    return Utils::defaultCaBundle();\n}\n\n/**\n * Creates an associative array of lowercase header names to the actual\n * header casing.\n *\n * @deprecated normalize_header_keys will be removed in guzzlehttp/guzzle:8.0. Use Utils::normalizeHeaderKeys instead.\n */\nfunction normalize_header_keys(array $headers): array\n{\n    return Utils::normalizeHeaderKeys($headers);\n}\n\n/**\n * Returns true if the provided host matches any of the no proxy areas.\n *\n * This method will strip a port from the host if it is present. Each pattern\n * can be matched with an exact match (e.g., \"foo.com\" == \"foo.com\") or a\n * partial match: (e.g., \"foo.com\" == \"baz.foo.com\" and \".foo.com\" ==\n * \"baz.foo.com\", but \".foo.com\" != \"foo.com\").\n *\n * Areas are matched in the following cases:\n * 1. \"*\" (without quotes) always matches any hosts.\n * 2. An exact match.\n * 3. The area starts with \".\" and the area is the last part of the host. e.g.\n *    '.mit.edu' will match any host that ends with '.mit.edu'.\n *\n * @param string   $host         Host to check against the patterns.\n * @param string[] $noProxyArray An array of host patterns.\n *\n * @throws Exception\\InvalidArgumentException\n *\n * @deprecated is_host_in_noproxy will be removed in guzzlehttp/guzzle:8.0. Use Utils::isHostInNoProxy instead.\n */\nfunction is_host_in_noproxy(string $host, array $noProxyArray): bool\n{\n    return Utils::isHostInNoProxy($host, $noProxyArray);\n}\n\n/**\n * Wrapper for json_decode that throws when an error occurs.\n *\n * @param string $json    JSON data to parse\n * @param bool   $assoc   When true, returned objects will be converted\n *                        into associative arrays.\n * @param int    $depth   User specified recursion depth.\n * @param int    $options Bitmask of JSON decode options.\n *\n * @return object|array|string|int|float|bool|null\n *\n * @throws Exception\\InvalidArgumentException if the JSON cannot be decoded.\n *\n * @see https://www.php.net/manual/en/function.json-decode.php\n * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead.\n */\nfunction json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)\n{\n    return Utils::jsonDecode($json, $assoc, $depth, $options);\n}\n\n/**\n * Wrapper for JSON encoding that throws when an error occurs.\n *\n * @param mixed $value   The value being encoded\n * @param int   $options JSON encode option bitmask\n * @param int   $depth   Set the maximum depth. Must be greater than zero.\n *\n * @throws Exception\\InvalidArgumentException if the JSON cannot be encoded.\n *\n * @see https://www.php.net/manual/en/function.json-encode.php\n * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead.\n */\nfunction json_encode($value, int $options = 0, int $depth = 512): string\n{\n    return Utils::jsonEncode($value, $options, $depth);\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/guzzle/src/functions_include.php",
    "content": "<?php\n\n// Don't redefine the functions if included multiple times.\nif (!\\function_exists('GuzzleHttp\\describe_type')) {\n    require __DIR__.'/functions.php';\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/CHANGELOG.md",
    "content": "# CHANGELOG\n\n\n## 2.3.0 - 2025-08-22\n\n### Added\n\n- PHP 8.5 support\n\n\n## 2.2.0 - 2025-03-27\n\n### Fixed\n\n- Revert \"Allow an empty EachPromise to be resolved by running the queue\"\n\n\n## 2.1.0 - 2025-03-27\n\n### Added\n\n- Allow an empty EachPromise to be resolved by running the queue\n\n\n## 2.0.4 - 2024-10-17\n\n### Fixed\n\n- Once settled, don't allow further rejection of additional promises\n\n\n## 2.0.3 - 2024-07-18\n\n### Changed\n\n- PHP 8.4 support\n\n\n## 2.0.2 - 2023-12-03\n\n### Changed\n\n- Replaced `call_user_func*` with native calls\n\n\n## 2.0.1 - 2023-08-03\n\n### Changed\n\n- PHP 8.3 support\n\n\n## 2.0.0 - 2023-05-21\n\n### Added\n\n- Added PHP 7 type hints\n\n### Changed\n\n- All previously non-final non-exception classes have been marked as soft-final\n\n### Removed\n\n- Dropped PHP < 7.2 support\n- All functions in the `GuzzleHttp\\Promise` namespace\n\n\n## 1.5.3 - 2023-05-21\n\n### Changed\n\n- Removed remaining usage of deprecated functions\n\n\n## 1.5.2 - 2022-08-07\n\n### Changed\n\n- Officially support PHP 8.2\n\n\n## 1.5.1 - 2021-10-22\n\n### Fixed\n\n- Revert \"Call handler when waiting on fulfilled/rejected Promise\"\n- Fix pool memory leak when empty array of promises provided\n\n\n## 1.5.0 - 2021-10-07\n\n### Changed\n\n- Call handler when waiting on fulfilled/rejected Promise\n- Officially support PHP 8.1\n\n### Fixed\n\n- Fix manually settle promises generated with `Utils::task`\n\n\n## 1.4.1 - 2021-02-18\n\n### Fixed\n\n- Fixed `each_limit` skipping promises and failing\n\n\n## 1.4.0 - 2020-09-30\n\n### Added\n\n- Support for PHP 8\n- Optional `$recursive` flag to `all`\n- Replaced functions by static methods\n\n### Fixed\n\n- Fix empty `each` processing\n- Fix promise handling for Iterators of non-unique keys\n- Fixed `method_exists` crashes on PHP 8\n- Memory leak on exceptions\n\n\n## 1.3.1 - 2016-12-20\n\n### Fixed\n\n- `wait()` foreign promise compatibility\n\n\n## 1.3.0 - 2016-11-18\n\n### Added\n\n- Adds support for custom task queues.\n\n### Fixed\n\n- Fixed coroutine promise memory leak.\n\n\n## 1.2.0 - 2016-05-18\n\n### Changed\n\n- Update to now catch `\\Throwable` on PHP 7+\n\n\n## 1.1.0 - 2016-03-07\n\n### Changed\n\n- Update EachPromise to prevent recurring on a iterator when advancing, as this\n  could trigger fatal generator errors.\n- Update Promise to allow recursive waiting without unwrapping exceptions.\n\n\n## 1.0.3 - 2015-10-15\n\n### Changed\n\n- Update EachPromise to immediately resolve when the underlying promise iterator\n  is empty. Previously, such a promise would throw an exception when its `wait`\n  function was called.\n\n\n## 1.0.2 - 2015-05-15\n\n### Changed\n\n- Conditionally require functions.php.\n\n\n## 1.0.1 - 2015-06-24\n\n### Changed\n\n- Updating EachPromise to call next on the underlying promise iterator as late\n  as possible to ensure that generators that generate new requests based on\n  callbacks are not iterated until after callbacks are invoked.\n\n\n## 1.0.0 - 2015-05-12\n\n- Initial release\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Michael Dowling <mtdowling@gmail.com>\nCopyright (c) 2015 Graham Campbell <hello@gjcampbell.co.uk>\nCopyright (c) 2017 Tobias Schultze <webmaster@tubo-world.de>\nCopyright (c) 2020 Tobias Nyholm <tobias.nyholm@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/README.md",
    "content": "# Guzzle Promises\n\n[Promises/A+](https://promisesaplus.com/) implementation that handles promise\nchaining and resolution iteratively, allowing for \"infinite\" promise chaining\nwhile keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/)\nfor a general introduction to promises.\n\n- [Features](#features)\n- [Quick start](#quick-start)\n- [Synchronous wait](#synchronous-wait)\n- [Cancellation](#cancellation)\n- [API](#api)\n  - [Promise](#promise)\n  - [FulfilledPromise](#fulfilledpromise)\n  - [RejectedPromise](#rejectedpromise)\n- [Promise interop](#promise-interop)\n- [Implementation notes](#implementation-notes)\n\n\n## Features\n\n- [Promises/A+](https://promisesaplus.com/) implementation.\n- Promise resolution and chaining is handled iteratively, allowing for\n  \"infinite\" promise chaining.\n- Promises have a synchronous `wait` method.\n- Promises can be cancelled.\n- Works with any object that has a `then` function.\n- C# style async/await coroutine promises using\n  `GuzzleHttp\\Promise\\Coroutine::of()`.\n\n\n## Installation\n\n```shell\ncomposer require guzzlehttp/promises\n```\n\n\n## Version Guidance\n\n| Version | Status              | PHP Version  |\n|---------|---------------------|--------------|\n| 1.x     | Security fixes only | >=5.5,<8.3   |\n| 2.x     | Latest              | >=7.2.5,<8.6 |\n\n\n## Quick Start\n\nA *promise* represents the eventual result of an asynchronous operation. The\nprimary way of interacting with a promise is through its `then` method, which\nregisters callbacks to receive either a promise's eventual value or the reason\nwhy the promise cannot be fulfilled.\n\n### Callbacks\n\nCallbacks are registered with the `then` method by providing an optional \n`$onFulfilled` followed by an optional `$onRejected` function.\n\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise->then(\n    // $onFulfilled\n    function ($value) {\n        echo 'The promise was fulfilled.';\n    },\n    // $onRejected\n    function ($reason) {\n        echo 'The promise was rejected.';\n    }\n);\n```\n\n*Resolving* a promise means that you either fulfill a promise with a *value* or\nreject a promise with a *reason*. Resolving a promise triggers callbacks\nregistered with the promise's `then` method. These callbacks are triggered\nonly once and in the order in which they were added.\n\n### Resolving a Promise\n\nPromises are fulfilled using the `resolve($value)` method. Resolving a promise\nwith any value other than a `GuzzleHttp\\Promise\\RejectedPromise` will trigger\nall of the onFulfilled callbacks (resolving a promise with a rejected promise\nwill reject the promise and trigger the `$onRejected` callbacks).\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise\n    ->then(function ($value) {\n        // Return a value and don't break the chain\n        return \"Hello, \" . $value;\n    })\n    // This then is executed after the first then and receives the value\n    // returned from the first then.\n    ->then(function ($value) {\n        echo $value;\n    });\n\n// Resolving the promise triggers the $onFulfilled callbacks and outputs\n// \"Hello, reader.\"\n$promise->resolve('reader.');\n```\n\n### Promise Forwarding\n\nPromises can be chained one after the other. Each then in the chain is a new\npromise. The return value of a promise is what's forwarded to the next\npromise in the chain. Returning a promise in a `then` callback will cause the\nsubsequent promises in the chain to only be fulfilled when the returned promise\nhas been fulfilled. The next promise in the chain will be invoked with the\nresolved value of the promise.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$nextPromise = new Promise();\n\n$promise\n    ->then(function ($value) use ($nextPromise) {\n        echo $value;\n        return $nextPromise;\n    })\n    ->then(function ($value) {\n        echo $value;\n    });\n\n// Triggers the first callback and outputs \"A\"\n$promise->resolve('A');\n// Triggers the second callback and outputs \"B\"\n$nextPromise->resolve('B');\n```\n\n### Promise Rejection\n\nWhen a promise is rejected, the `$onRejected` callbacks are invoked with the\nrejection reason.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise->then(null, function ($reason) {\n    echo $reason;\n});\n\n$promise->reject('Error!');\n// Outputs \"Error!\"\n```\n\n### Rejection Forwarding\n\nIf an exception is thrown in an `$onRejected` callback, subsequent\n`$onRejected` callbacks are invoked with the thrown exception as the reason.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise->then(null, function ($reason) {\n    throw new Exception($reason);\n})->then(null, function ($reason) {\n    assert($reason->getMessage() === 'Error!');\n});\n\n$promise->reject('Error!');\n```\n\nYou can also forward a rejection down the promise chain by returning a\n`GuzzleHttp\\Promise\\RejectedPromise` in either an `$onFulfilled` or\n`$onRejected` callback.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\nuse GuzzleHttp\\Promise\\RejectedPromise;\n\n$promise = new Promise();\n$promise->then(null, function ($reason) {\n    return new RejectedPromise($reason);\n})->then(null, function ($reason) {\n    assert($reason === 'Error!');\n});\n\n$promise->reject('Error!');\n```\n\nIf an exception is not thrown in a `$onRejected` callback and the callback\ndoes not return a rejected promise, downstream `$onFulfilled` callbacks are\ninvoked using the value returned from the `$onRejected` callback.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise\n    ->then(null, function ($reason) {\n        return \"It's ok\";\n    })\n    ->then(function ($value) {\n        assert($value === \"It's ok\");\n    });\n\n$promise->reject('Error!');\n```\n\n\n## Synchronous Wait\n\nYou can synchronously force promises to complete using a promise's `wait`\nmethod. When creating a promise, you can provide a wait function that is used\nto synchronously force a promise to complete. When a wait function is invoked\nit is expected to deliver a value to the promise or reject the promise. If the\nwait function does not deliver a value, then an exception is thrown. The wait\nfunction provided to a promise constructor is invoked when the `wait` function\nof the promise is called.\n\n```php\n$promise = new Promise(function () use (&$promise) {\n    $promise->resolve('foo');\n});\n\n// Calling wait will return the value of the promise.\necho $promise->wait(); // outputs \"foo\"\n```\n\nIf an exception is encountered while invoking the wait function of a promise,\nthe promise is rejected with the exception and the exception is thrown.\n\n```php\n$promise = new Promise(function () use (&$promise) {\n    throw new Exception('foo');\n});\n\n$promise->wait(); // throws the exception.\n```\n\nCalling `wait` on a promise that has been fulfilled will not trigger the wait\nfunction. It will simply return the previously resolved value.\n\n```php\n$promise = new Promise(function () { die('this is not called!'); });\n$promise->resolve('foo');\necho $promise->wait(); // outputs \"foo\"\n```\n\nCalling `wait` on a promise that has been rejected will throw an exception. If\nthe rejection reason is an instance of `\\Exception` the reason is thrown.\nOtherwise, a `GuzzleHttp\\Promise\\RejectionException` is thrown and the reason\ncan be obtained by calling the `getReason` method of the exception.\n\n```php\n$promise = new Promise();\n$promise->reject('foo');\n$promise->wait();\n```\n\n> PHP Fatal error:  Uncaught exception 'GuzzleHttp\\Promise\\RejectionException' with message 'The promise was rejected with value: foo'\n\n### Unwrapping a Promise\n\nWhen synchronously waiting on a promise, you are joining the state of the\npromise into the current state of execution (i.e., return the value of the\npromise if it was fulfilled or throw an exception if it was rejected). This is\ncalled \"unwrapping\" the promise. Waiting on a promise will by default unwrap\nthe promise state.\n\nYou can force a promise to resolve and *not* unwrap the state of the promise\nby passing `false` to the first argument of the `wait` function:\n\n```php\n$promise = new Promise();\n$promise->reject('foo');\n// This will not throw an exception. It simply ensures the promise has\n// been resolved.\n$promise->wait(false);\n```\n\nWhen unwrapping a promise, the resolved value of the promise will be waited\nupon until the unwrapped value is not a promise. This means that if you resolve\npromise A with a promise B and unwrap promise A, the value returned by the\nwait function will be the value delivered to promise B.\n\n**Note**: when you do not unwrap the promise, no value is returned.\n\n\n## Cancellation\n\nYou can cancel a promise that has not yet been fulfilled using the `cancel()`\nmethod of a promise. When creating a promise you can provide an optional\ncancel function that when invoked cancels the action of computing a resolution\nof the promise.\n\n\n## API\n\n### Promise\n\nWhen creating a promise object, you can provide an optional `$waitFn` and\n`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is\nexpected to resolve the promise. `$cancelFn` is a function with no arguments\nthat is expected to cancel the computation of a promise. It is invoked when the\n`cancel()` method of a promise is called.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise(\n    function () use (&$promise) {\n        $promise->resolve('waited');\n    },\n    function () {\n        // do something that will cancel the promise computation (e.g., close\n        // a socket, cancel a database query, etc...)\n    }\n);\n\nassert('waited' === $promise->wait());\n```\n\nA promise has the following methods:\n\n- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface`\n  \n  Appends fulfillment and rejection handlers to the promise, and returns a new promise resolving to the return value of the called handler.\n\n- `otherwise(callable $onRejected) : PromiseInterface`\n  \n  Appends a rejection handler callback to the promise, and returns a new promise resolving to the return value of the callback if it is called, or to its original fulfillment value if the promise is instead fulfilled.\n\n- `wait($unwrap = true) : mixed`\n\n  Synchronously waits on the promise to complete.\n  \n  `$unwrap` controls whether or not the value of the promise is returned for a\n  fulfilled promise or if an exception is thrown if the promise is rejected.\n  This is set to `true` by default.\n\n- `cancel()`\n\n  Attempts to cancel the promise if possible. The promise being cancelled and\n  the parent most ancestor that has not yet been resolved will also be\n  cancelled. Any promises waiting on the cancelled promise to resolve will also\n  be cancelled.\n\n- `getState() : string`\n\n  Returns the state of the promise. One of `pending`, `fulfilled`, or\n  `rejected`.\n\n- `resolve($value)`\n\n  Fulfills the promise with the given `$value`.\n\n- `reject($reason)`\n\n  Rejects the promise with the given `$reason`.\n\n\n### FulfilledPromise\n\nA fulfilled promise can be created to represent a promise that has been\nfulfilled.\n\n```php\nuse GuzzleHttp\\Promise\\FulfilledPromise;\n\n$promise = new FulfilledPromise('value');\n\n// Fulfilled callbacks are immediately invoked.\n$promise->then(function ($value) {\n    echo $value;\n});\n```\n\n\n### RejectedPromise\n\nA rejected promise can be created to represent a promise that has been\nrejected.\n\n```php\nuse GuzzleHttp\\Promise\\RejectedPromise;\n\n$promise = new RejectedPromise('Error');\n\n// Rejected callbacks are immediately invoked.\n$promise->then(null, function ($reason) {\n    echo $reason;\n});\n```\n\n\n## Promise Interoperability\n\nThis library works with foreign promises that have a `then` method. This means\nyou can use Guzzle promises with [React promises](https://github.com/reactphp/promise)\nfor example. When a foreign promise is returned inside of a then method\ncallback, promise resolution will occur recursively.\n\n```php\n// Create a React promise\n$deferred = new React\\Promise\\Deferred();\n$reactPromise = $deferred->promise();\n\n// Create a Guzzle promise that is fulfilled with a React promise.\n$guzzlePromise = new GuzzleHttp\\Promise\\Promise();\n$guzzlePromise->then(function ($value) use ($reactPromise) {\n    // Do something something with the value...\n    // Return the React promise\n    return $reactPromise;\n});\n```\n\nPlease note that wait and cancel chaining is no longer possible when forwarding\na foreign promise. You will need to wrap a third-party promise with a Guzzle\npromise in order to utilize wait and cancel functions with foreign promises.\n\n\n### Event Loop Integration\n\nIn order to keep the stack size constant, Guzzle promises are resolved\nasynchronously using a task queue. When waiting on promises synchronously, the\ntask queue will be automatically run to ensure that the blocking promise and\nany forwarded promises are resolved. When using promises asynchronously in an\nevent loop, you will need to run the task queue on each tick of the loop. If\nyou do not run the task queue, then promises will not be resolved.\n\nYou can run the task queue using the `run()` method of the global task queue\ninstance.\n\n```php\n// Get the global task queue\n$queue = GuzzleHttp\\Promise\\Utils::queue();\n$queue->run();\n```\n\nFor example, you could use Guzzle promises with React using a periodic timer:\n\n```php\n$loop = React\\EventLoop\\Factory::create();\n$loop->addPeriodicTimer(0, [$queue, 'run']);\n```\n\n\n## Implementation Notes\n\n### Promise Resolution and Chaining is Handled Iteratively\n\nBy shuffling pending handlers from one owner to another, promises are\nresolved iteratively, allowing for \"infinite\" then chaining.\n\n```php\n<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Promise\\Promise;\n\n$parent = new Promise();\n$p = $parent;\n\nfor ($i = 0; $i < 1000; $i++) {\n    $p = $p->then(function ($v) {\n        // The stack size remains constant (a good thing)\n        echo xdebug_get_stack_depth() . ', ';\n        return $v + 1;\n    });\n}\n\n$parent->resolve(0);\nvar_dump($p->wait()); // int(1000)\n\n```\n\nWhen a promise is fulfilled or rejected with a non-promise value, the promise\nthen takes ownership of the handlers of each child promise and delivers values\ndown the chain without using recursion.\n\nWhen a promise is resolved with another promise, the original promise transfers\nall of its pending handlers to the new promise. When the new promise is\neventually resolved, all of the pending handlers are delivered the forwarded\nvalue.\n\n### A Promise is the Deferred\n\nSome promise libraries implement promises using a deferred object to represent\na computation and a promise object to represent the delivery of the result of\nthe computation. This is a nice separation of computation and delivery because\nconsumers of the promise cannot modify the value that will be eventually\ndelivered.\n\nOne side effect of being able to implement promise resolution and chaining\niteratively is that you need to be able for one promise to reach into the state\nof another promise to shuffle around ownership of handlers. In order to achieve\nthis without making the handlers of a promise publicly mutable, a promise is\nalso the deferred value, allowing promises of the same parent class to reach\ninto and modify the private properties of promises of the same type. While this\ndoes allow consumers of the value to modify the resolution or rejection of the\ndeferred, it is a small price to pay for keeping the stack size constant.\n\n```php\n$promise = new Promise();\n$promise->then(function ($value) { echo $value; });\n// The promise is the deferred value, so you can deliver a value to it.\n$promise->resolve('foo');\n// prints \"foo\"\n```\n\n\n## Upgrading from Function API\n\nA static API was first introduced in 1.4.0, in order to mitigate problems with\nfunctions conflicting between global and local copies of the package. The\nfunction API was removed in 2.0.0. A migration table has been provided here for\nyour convenience:\n\n| Original Function | Replacement Method |\n|----------------|----------------|\n| `queue` | `Utils::queue` |\n| `task` | `Utils::task` |\n| `promise_for` | `Create::promiseFor` |\n| `rejection_for` | `Create::rejectionFor` |\n| `exception_for` | `Create::exceptionFor` |\n| `iter_for` | `Create::iterFor` |\n| `inspect` | `Utils::inspect` |\n| `inspect_all` | `Utils::inspectAll` |\n| `unwrap` | `Utils::unwrap` |\n| `all` | `Utils::all` |\n| `some` | `Utils::some` |\n| `any` | `Utils::any` |\n| `settle` | `Utils::settle` |\n| `each` | `Each::of` |\n| `each_limit` | `Each::ofLimit` |\n| `each_limit_all` | `Each::ofLimitAll` |\n| `!is_fulfilled` | `Is::pending` |\n| `is_fulfilled` | `Is::fulfilled` |\n| `is_rejected` | `Is::rejected` |\n| `is_settled` | `Is::settled` |\n| `coroutine` | `Coroutine::of` |\n\n\n## Security\n\nIf you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/promises/security/policy) for more information.\n\n\n## License\n\nGuzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.\n\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-promises?utm_source=packagist-guzzlehttp-promises&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/composer.json",
    "content": "{\n    \"name\": \"guzzlehttp/promises\",\n    \"description\": \"Guzzle promises library\",\n    \"keywords\": [\"promise\"],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"hello@gjcampbell.co.uk\",\n            \"homepage\": \"https://github.com/GrahamCampbell\"\n        },\n        {\n            \"name\": \"Michael Dowling\",\n            \"email\": \"mtdowling@gmail.com\",\n            \"homepage\": \"https://github.com/mtdowling\"\n        },\n        {\n            \"name\": \"Tobias Nyholm\",\n            \"email\": \"tobias.nyholm@gmail.com\",\n            \"homepage\": \"https://github.com/Nyholm\"\n        },\n        {\n            \"name\": \"Tobias Schultze\",\n            \"email\": \"webmaster@tubo-world.de\",\n            \"homepage\": \"https://github.com/Tobion\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.2.5 || ^8.0\"\n    },\n    \"require-dev\": {\n        \"bamarni/composer-bin-plugin\": \"^1.8.2\",\n        \"phpunit/phpunit\": \"^8.5.44 || ^9.6.25\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Promise\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Promise\\\\Tests\\\\\": \"tests/\"\n        }\n    },\n    \"extra\": {\n        \"bamarni-bin\": {\n            \"bin-links\": true,\n            \"forward-command\": false\n        }\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"bamarni/composer-bin-plugin\": true\n        },\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/AggregateException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Exception thrown when too many errors occur in the some() or any() methods.\n */\nclass AggregateException extends RejectionException\n{\n    public function __construct(string $msg, array $reasons)\n    {\n        parent::__construct(\n            $reasons,\n            sprintf('%s; %d rejected promises', $msg, count($reasons))\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/CancellationException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Exception that is set as the reason for a promise that has been cancelled.\n */\nclass CancellationException extends RejectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/Coroutine.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\nuse Generator;\nuse Throwable;\n\n/**\n * Creates a promise that is resolved using a generator that yields values or\n * promises (somewhat similar to C#'s async keyword).\n *\n * When called, the Coroutine::of method will start an instance of the generator\n * and returns a promise that is fulfilled with its final yielded value.\n *\n * Control is returned back to the generator when the yielded promise settles.\n * This can lead to less verbose code when doing lots of sequential async calls\n * with minimal processing in between.\n *\n *     use GuzzleHttp\\Promise;\n *\n *     function createPromise($value) {\n *         return new Promise\\FulfilledPromise($value);\n *     }\n *\n *     $promise = Promise\\Coroutine::of(function () {\n *         $value = (yield createPromise('a'));\n *         try {\n *             $value = (yield createPromise($value . 'b'));\n *         } catch (\\Throwable $e) {\n *             // The promise was rejected.\n *         }\n *         yield $value . 'c';\n *     });\n *\n *     // Outputs \"abc\"\n *     $promise->then(function ($v) { echo $v; });\n *\n * @param callable $generatorFn Generator function to wrap into a promise.\n *\n * @return Promise\n *\n * @see https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration\n */\nfinal class Coroutine implements PromiseInterface\n{\n    /**\n     * @var PromiseInterface|null\n     */\n    private $currentPromise;\n\n    /**\n     * @var Generator\n     */\n    private $generator;\n\n    /**\n     * @var Promise\n     */\n    private $result;\n\n    public function __construct(callable $generatorFn)\n    {\n        $this->generator = $generatorFn();\n        $this->result = new Promise(function (): void {\n            while (isset($this->currentPromise)) {\n                $this->currentPromise->wait();\n            }\n        });\n        try {\n            $this->nextCoroutine($this->generator->current());\n        } catch (Throwable $throwable) {\n            $this->result->reject($throwable);\n        }\n    }\n\n    /**\n     * Create a new coroutine.\n     */\n    public static function of(callable $generatorFn): self\n    {\n        return new self($generatorFn);\n    }\n\n    public function then(\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface {\n        return $this->result->then($onFulfilled, $onRejected);\n    }\n\n    public function otherwise(callable $onRejected): PromiseInterface\n    {\n        return $this->result->otherwise($onRejected);\n    }\n\n    public function wait(bool $unwrap = true)\n    {\n        return $this->result->wait($unwrap);\n    }\n\n    public function getState(): string\n    {\n        return $this->result->getState();\n    }\n\n    public function resolve($value): void\n    {\n        $this->result->resolve($value);\n    }\n\n    public function reject($reason): void\n    {\n        $this->result->reject($reason);\n    }\n\n    public function cancel(): void\n    {\n        $this->currentPromise->cancel();\n        $this->result->cancel();\n    }\n\n    private function nextCoroutine($yielded): void\n    {\n        $this->currentPromise = Create::promiseFor($yielded)\n            ->then([$this, '_handleSuccess'], [$this, '_handleFailure']);\n    }\n\n    /**\n     * @internal\n     */\n    public function _handleSuccess($value): void\n    {\n        unset($this->currentPromise);\n        try {\n            $next = $this->generator->send($value);\n            if ($this->generator->valid()) {\n                $this->nextCoroutine($next);\n            } else {\n                $this->result->resolve($value);\n            }\n        } catch (Throwable $throwable) {\n            $this->result->reject($throwable);\n        }\n    }\n\n    /**\n     * @internal\n     */\n    public function _handleFailure($reason): void\n    {\n        unset($this->currentPromise);\n        try {\n            $nextYield = $this->generator->throw(Create::exceptionFor($reason));\n            // The throw was caught, so keep iterating on the coroutine\n            $this->nextCoroutine($nextYield);\n        } catch (Throwable $throwable) {\n            $this->result->reject($throwable);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/Create.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Create\n{\n    /**\n     * Creates a promise for a value if the value is not a promise.\n     *\n     * @param mixed $value Promise or value.\n     */\n    public static function promiseFor($value): PromiseInterface\n    {\n        if ($value instanceof PromiseInterface) {\n            return $value;\n        }\n\n        // Return a Guzzle promise that shadows the given promise.\n        if (is_object($value) && method_exists($value, 'then')) {\n            $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null;\n            $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;\n            $promise = new Promise($wfn, $cfn);\n            $value->then([$promise, 'resolve'], [$promise, 'reject']);\n\n            return $promise;\n        }\n\n        return new FulfilledPromise($value);\n    }\n\n    /**\n     * Creates a rejected promise for a reason if the reason is not a promise.\n     * If the provided reason is a promise, then it is returned as-is.\n     *\n     * @param mixed $reason Promise or reason.\n     */\n    public static function rejectionFor($reason): PromiseInterface\n    {\n        if ($reason instanceof PromiseInterface) {\n            return $reason;\n        }\n\n        return new RejectedPromise($reason);\n    }\n\n    /**\n     * Create an exception for a rejected promise value.\n     *\n     * @param mixed $reason\n     */\n    public static function exceptionFor($reason): \\Throwable\n    {\n        if ($reason instanceof \\Throwable) {\n            return $reason;\n        }\n\n        return new RejectionException($reason);\n    }\n\n    /**\n     * Returns an iterator for the given value.\n     *\n     * @param mixed $value\n     */\n    public static function iterFor($value): \\Iterator\n    {\n        if ($value instanceof \\Iterator) {\n            return $value;\n        }\n\n        if (is_array($value)) {\n            return new \\ArrayIterator($value);\n        }\n\n        return new \\ArrayIterator([$value]);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/Each.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Each\n{\n    /**\n     * Given an iterator that yields promises or values, returns a promise that\n     * is fulfilled with a null value when the iterator has been consumed or\n     * the aggregate promise has been fulfilled or rejected.\n     *\n     * $onFulfilled is a function that accepts the fulfilled value, iterator\n     * index, and the aggregate promise. The callback can invoke any necessary\n     * side effects and choose to resolve or reject the aggregate if needed.\n     *\n     * $onRejected is a function that accepts the rejection reason, iterator\n     * index, and the aggregate promise. The callback can invoke any necessary\n     * side effects and choose to resolve or reject the aggregate if needed.\n     *\n     * @param mixed $iterable Iterator or array to iterate over.\n     */\n    public static function of(\n        $iterable,\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface {\n        return (new EachPromise($iterable, [\n            'fulfilled' => $onFulfilled,\n            'rejected' => $onRejected,\n        ]))->promise();\n    }\n\n    /**\n     * Like of, but only allows a certain number of outstanding promises at any\n     * given time.\n     *\n     * $concurrency may be an integer or a function that accepts the number of\n     * pending promises and returns a numeric concurrency limit value to allow\n     * for dynamic a concurrency size.\n     *\n     * @param mixed        $iterable\n     * @param int|callable $concurrency\n     */\n    public static function ofLimit(\n        $iterable,\n        $concurrency,\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface {\n        return (new EachPromise($iterable, [\n            'fulfilled' => $onFulfilled,\n            'rejected' => $onRejected,\n            'concurrency' => $concurrency,\n        ]))->promise();\n    }\n\n    /**\n     * Like limit, but ensures that no promise in the given $iterable argument\n     * is rejected. If any promise is rejected, then the aggregate promise is\n     * rejected with the encountered rejection.\n     *\n     * @param mixed        $iterable\n     * @param int|callable $concurrency\n     */\n    public static function ofLimitAll(\n        $iterable,\n        $concurrency,\n        ?callable $onFulfilled = null\n    ): PromiseInterface {\n        return self::ofLimit(\n            $iterable,\n            $concurrency,\n            $onFulfilled,\n            function ($reason, $idx, PromiseInterface $aggregate): void {\n                $aggregate->reject($reason);\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/EachPromise.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Represents a promise that iterates over many promises and invokes\n * side-effect functions in the process.\n *\n * @final\n */\nclass EachPromise implements PromisorInterface\n{\n    private $pending = [];\n\n    private $nextPendingIndex = 0;\n\n    /** @var \\Iterator|null */\n    private $iterable;\n\n    /** @var callable|int|null */\n    private $concurrency;\n\n    /** @var callable|null */\n    private $onFulfilled;\n\n    /** @var callable|null */\n    private $onRejected;\n\n    /** @var Promise|null */\n    private $aggregate;\n\n    /** @var bool|null */\n    private $mutex;\n\n    /**\n     * Configuration hash can include the following key value pairs:\n     *\n     * - fulfilled: (callable) Invoked when a promise fulfills. The function\n     *   is invoked with three arguments: the fulfillment value, the index\n     *   position from the iterable list of the promise, and the aggregate\n     *   promise that manages all of the promises. The aggregate promise may\n     *   be resolved from within the callback to short-circuit the promise.\n     * - rejected: (callable) Invoked when a promise is rejected. The\n     *   function is invoked with three arguments: the rejection reason, the\n     *   index position from the iterable list of the promise, and the\n     *   aggregate promise that manages all of the promises. The aggregate\n     *   promise may be resolved from within the callback to short-circuit\n     *   the promise.\n     * - concurrency: (integer) Pass this configuration option to limit the\n     *   allowed number of outstanding concurrently executing promises,\n     *   creating a capped pool of promises. There is no limit by default.\n     *\n     * @param mixed $iterable Promises or values to iterate.\n     * @param array $config   Configuration options\n     */\n    public function __construct($iterable, array $config = [])\n    {\n        $this->iterable = Create::iterFor($iterable);\n\n        if (isset($config['concurrency'])) {\n            $this->concurrency = $config['concurrency'];\n        }\n\n        if (isset($config['fulfilled'])) {\n            $this->onFulfilled = $config['fulfilled'];\n        }\n\n        if (isset($config['rejected'])) {\n            $this->onRejected = $config['rejected'];\n        }\n    }\n\n    /** @psalm-suppress InvalidNullableReturnType */\n    public function promise(): PromiseInterface\n    {\n        if ($this->aggregate) {\n            return $this->aggregate;\n        }\n\n        try {\n            $this->createPromise();\n            /** @psalm-assert Promise $this->aggregate */\n            $this->iterable->rewind();\n            $this->refillPending();\n        } catch (\\Throwable $e) {\n            $this->aggregate->reject($e);\n        }\n\n        /**\n         * @psalm-suppress NullableReturnStatement\n         */\n        return $this->aggregate;\n    }\n\n    private function createPromise(): void\n    {\n        $this->mutex = false;\n        $this->aggregate = new Promise(function (): void {\n            if ($this->checkIfFinished()) {\n                return;\n            }\n            reset($this->pending);\n            // Consume a potentially fluctuating list of promises while\n            // ensuring that indexes are maintained (precluding array_shift).\n            while ($promise = current($this->pending)) {\n                next($this->pending);\n                $promise->wait();\n                if (Is::settled($this->aggregate)) {\n                    return;\n                }\n            }\n        });\n\n        // Clear the references when the promise is resolved.\n        $clearFn = function (): void {\n            $this->iterable = $this->concurrency = $this->pending = null;\n            $this->onFulfilled = $this->onRejected = null;\n            $this->nextPendingIndex = 0;\n        };\n\n        $this->aggregate->then($clearFn, $clearFn);\n    }\n\n    private function refillPending(): void\n    {\n        if (!$this->concurrency) {\n            // Add all pending promises.\n            while ($this->addPending() && $this->advanceIterator()) {\n            }\n\n            return;\n        }\n\n        // Add only up to N pending promises.\n        $concurrency = is_callable($this->concurrency)\n            ? ($this->concurrency)(count($this->pending))\n            : $this->concurrency;\n        $concurrency = max($concurrency - count($this->pending), 0);\n        // Concurrency may be set to 0 to disallow new promises.\n        if (!$concurrency) {\n            return;\n        }\n        // Add the first pending promise.\n        $this->addPending();\n        // Note this is special handling for concurrency=1 so that we do\n        // not advance the iterator after adding the first promise. This\n        // helps work around issues with generators that might not have the\n        // next value to yield until promise callbacks are called.\n        while (--$concurrency\n            && $this->advanceIterator()\n            && $this->addPending()) {\n        }\n    }\n\n    private function addPending(): bool\n    {\n        if (!$this->iterable || !$this->iterable->valid()) {\n            return false;\n        }\n\n        $promise = Create::promiseFor($this->iterable->current());\n        $key = $this->iterable->key();\n\n        // Iterable keys may not be unique, so we use a counter to\n        // guarantee uniqueness\n        $idx = $this->nextPendingIndex++;\n\n        $this->pending[$idx] = $promise->then(\n            function ($value) use ($idx, $key): void {\n                if ($this->onFulfilled) {\n                    ($this->onFulfilled)(\n                        $value,\n                        $key,\n                        $this->aggregate\n                    );\n                }\n                $this->step($idx);\n            },\n            function ($reason) use ($idx, $key): void {\n                if ($this->onRejected) {\n                    ($this->onRejected)(\n                        $reason,\n                        $key,\n                        $this->aggregate\n                    );\n                }\n                $this->step($idx);\n            }\n        );\n\n        return true;\n    }\n\n    private function advanceIterator(): bool\n    {\n        // Place a lock on the iterator so that we ensure to not recurse,\n        // preventing fatal generator errors.\n        if ($this->mutex) {\n            return false;\n        }\n\n        $this->mutex = true;\n\n        try {\n            $this->iterable->next();\n            $this->mutex = false;\n\n            return true;\n        } catch (\\Throwable $e) {\n            $this->aggregate->reject($e);\n            $this->mutex = false;\n\n            return false;\n        }\n    }\n\n    private function step(int $idx): void\n    {\n        // If the promise was already resolved, then ignore this step.\n        if (Is::settled($this->aggregate)) {\n            return;\n        }\n\n        unset($this->pending[$idx]);\n\n        // Only refill pending promises if we are not locked, preventing the\n        // EachPromise to recursively invoke the provided iterator, which\n        // cause a fatal error: \"Cannot resume an already running generator\"\n        if ($this->advanceIterator() && !$this->checkIfFinished()) {\n            // Add more pending promises if possible.\n            $this->refillPending();\n        }\n    }\n\n    private function checkIfFinished(): bool\n    {\n        if (!$this->pending && !$this->iterable->valid()) {\n            // Resolve the promise if there's nothing left to do.\n            $this->aggregate->resolve(null);\n\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/FulfilledPromise.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A promise that has been fulfilled.\n *\n * Thenning off of this promise will invoke the onFulfilled callback\n * immediately and ignore other callbacks.\n *\n * @final\n */\nclass FulfilledPromise implements PromiseInterface\n{\n    private $value;\n\n    /**\n     * @param mixed $value\n     */\n    public function __construct($value)\n    {\n        if (is_object($value) && method_exists($value, 'then')) {\n            throw new \\InvalidArgumentException(\n                'You cannot create a FulfilledPromise with a promise.'\n            );\n        }\n\n        $this->value = $value;\n    }\n\n    public function then(\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface {\n        // Return itself if there is no onFulfilled function.\n        if (!$onFulfilled) {\n            return $this;\n        }\n\n        $queue = Utils::queue();\n        $p = new Promise([$queue, 'run']);\n        $value = $this->value;\n        $queue->add(static function () use ($p, $value, $onFulfilled): void {\n            if (Is::pending($p)) {\n                try {\n                    $p->resolve($onFulfilled($value));\n                } catch (\\Throwable $e) {\n                    $p->reject($e);\n                }\n            }\n        });\n\n        return $p;\n    }\n\n    public function otherwise(callable $onRejected): PromiseInterface\n    {\n        return $this->then(null, $onRejected);\n    }\n\n    public function wait(bool $unwrap = true)\n    {\n        return $unwrap ? $this->value : null;\n    }\n\n    public function getState(): string\n    {\n        return self::FULFILLED;\n    }\n\n    public function resolve($value): void\n    {\n        if ($value !== $this->value) {\n            throw new \\LogicException('Cannot resolve a fulfilled promise');\n        }\n    }\n\n    public function reject($reason): void\n    {\n        throw new \\LogicException('Cannot reject a fulfilled promise');\n    }\n\n    public function cancel(): void\n    {\n        // pass\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/Is.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Is\n{\n    /**\n     * Returns true if a promise is pending.\n     */\n    public static function pending(PromiseInterface $promise): bool\n    {\n        return $promise->getState() === PromiseInterface::PENDING;\n    }\n\n    /**\n     * Returns true if a promise is fulfilled or rejected.\n     */\n    public static function settled(PromiseInterface $promise): bool\n    {\n        return $promise->getState() !== PromiseInterface::PENDING;\n    }\n\n    /**\n     * Returns true if a promise is fulfilled.\n     */\n    public static function fulfilled(PromiseInterface $promise): bool\n    {\n        return $promise->getState() === PromiseInterface::FULFILLED;\n    }\n\n    /**\n     * Returns true if a promise is rejected.\n     */\n    public static function rejected(PromiseInterface $promise): bool\n    {\n        return $promise->getState() === PromiseInterface::REJECTED;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/Promise.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Promises/A+ implementation that avoids recursion when possible.\n *\n * @see https://promisesaplus.com/\n *\n * @final\n */\nclass Promise implements PromiseInterface\n{\n    private $state = self::PENDING;\n    private $result;\n    private $cancelFn;\n    private $waitFn;\n    private $waitList;\n    private $handlers = [];\n\n    /**\n     * @param callable $waitFn   Fn that when invoked resolves the promise.\n     * @param callable $cancelFn Fn that when invoked cancels the promise.\n     */\n    public function __construct(\n        ?callable $waitFn = null,\n        ?callable $cancelFn = null\n    ) {\n        $this->waitFn = $waitFn;\n        $this->cancelFn = $cancelFn;\n    }\n\n    public function then(\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface {\n        if ($this->state === self::PENDING) {\n            $p = new Promise(null, [$this, 'cancel']);\n            $this->handlers[] = [$p, $onFulfilled, $onRejected];\n            $p->waitList = $this->waitList;\n            $p->waitList[] = $this;\n\n            return $p;\n        }\n\n        // Return a fulfilled promise and immediately invoke any callbacks.\n        if ($this->state === self::FULFILLED) {\n            $promise = Create::promiseFor($this->result);\n\n            return $onFulfilled ? $promise->then($onFulfilled) : $promise;\n        }\n\n        // It's either cancelled or rejected, so return a rejected promise\n        // and immediately invoke any callbacks.\n        $rejection = Create::rejectionFor($this->result);\n\n        return $onRejected ? $rejection->then(null, $onRejected) : $rejection;\n    }\n\n    public function otherwise(callable $onRejected): PromiseInterface\n    {\n        return $this->then(null, $onRejected);\n    }\n\n    public function wait(bool $unwrap = true)\n    {\n        $this->waitIfPending();\n\n        if ($this->result instanceof PromiseInterface) {\n            return $this->result->wait($unwrap);\n        }\n        if ($unwrap) {\n            if ($this->state === self::FULFILLED) {\n                return $this->result;\n            }\n            // It's rejected so \"unwrap\" and throw an exception.\n            throw Create::exceptionFor($this->result);\n        }\n    }\n\n    public function getState(): string\n    {\n        return $this->state;\n    }\n\n    public function cancel(): void\n    {\n        if ($this->state !== self::PENDING) {\n            return;\n        }\n\n        $this->waitFn = $this->waitList = null;\n\n        if ($this->cancelFn) {\n            $fn = $this->cancelFn;\n            $this->cancelFn = null;\n            try {\n                $fn();\n            } catch (\\Throwable $e) {\n                $this->reject($e);\n            }\n        }\n\n        // Reject the promise only if it wasn't rejected in a then callback.\n        /** @psalm-suppress RedundantCondition */\n        if ($this->state === self::PENDING) {\n            $this->reject(new CancellationException('Promise has been cancelled'));\n        }\n    }\n\n    public function resolve($value): void\n    {\n        $this->settle(self::FULFILLED, $value);\n    }\n\n    public function reject($reason): void\n    {\n        $this->settle(self::REJECTED, $reason);\n    }\n\n    private function settle(string $state, $value): void\n    {\n        if ($this->state !== self::PENDING) {\n            // Ignore calls with the same resolution.\n            if ($state === $this->state && $value === $this->result) {\n                return;\n            }\n            throw $this->state === $state\n                ? new \\LogicException(\"The promise is already {$state}.\")\n                : new \\LogicException(\"Cannot change a {$this->state} promise to {$state}\");\n        }\n\n        if ($value === $this) {\n            throw new \\LogicException('Cannot fulfill or reject a promise with itself');\n        }\n\n        // Clear out the state of the promise but stash the handlers.\n        $this->state = $state;\n        $this->result = $value;\n        $handlers = $this->handlers;\n        $this->handlers = null;\n        $this->waitList = $this->waitFn = null;\n        $this->cancelFn = null;\n\n        if (!$handlers) {\n            return;\n        }\n\n        // If the value was not a settled promise or a thenable, then resolve\n        // it in the task queue using the correct ID.\n        if (!is_object($value) || !method_exists($value, 'then')) {\n            $id = $state === self::FULFILLED ? 1 : 2;\n            // It's a success, so resolve the handlers in the queue.\n            Utils::queue()->add(static function () use ($id, $value, $handlers): void {\n                foreach ($handlers as $handler) {\n                    self::callHandler($id, $value, $handler);\n                }\n            });\n        } elseif ($value instanceof Promise && Is::pending($value)) {\n            // We can just merge our handlers onto the next promise.\n            $value->handlers = array_merge($value->handlers, $handlers);\n        } else {\n            // Resolve the handlers when the forwarded promise is resolved.\n            $value->then(\n                static function ($value) use ($handlers): void {\n                    foreach ($handlers as $handler) {\n                        self::callHandler(1, $value, $handler);\n                    }\n                },\n                static function ($reason) use ($handlers): void {\n                    foreach ($handlers as $handler) {\n                        self::callHandler(2, $reason, $handler);\n                    }\n                }\n            );\n        }\n    }\n\n    /**\n     * Call a stack of handlers using a specific callback index and value.\n     *\n     * @param int   $index   1 (resolve) or 2 (reject).\n     * @param mixed $value   Value to pass to the callback.\n     * @param array $handler Array of handler data (promise and callbacks).\n     */\n    private static function callHandler(int $index, $value, array $handler): void\n    {\n        /** @var PromiseInterface $promise */\n        $promise = $handler[0];\n\n        // The promise may have been cancelled or resolved before placing\n        // this thunk in the queue.\n        if (Is::settled($promise)) {\n            return;\n        }\n\n        try {\n            if (isset($handler[$index])) {\n                /*\n                 * If $f throws an exception, then $handler will be in the exception\n                 * stack trace. Since $handler contains a reference to the callable\n                 * itself we get a circular reference. We clear the $handler\n                 * here to avoid that memory leak.\n                 */\n                $f = $handler[$index];\n                unset($handler);\n                $promise->resolve($f($value));\n            } elseif ($index === 1) {\n                // Forward resolution values as-is.\n                $promise->resolve($value);\n            } else {\n                // Forward rejections down the chain.\n                $promise->reject($value);\n            }\n        } catch (\\Throwable $reason) {\n            $promise->reject($reason);\n        }\n    }\n\n    private function waitIfPending(): void\n    {\n        if ($this->state !== self::PENDING) {\n            return;\n        } elseif ($this->waitFn) {\n            $this->invokeWaitFn();\n        } elseif ($this->waitList) {\n            $this->invokeWaitList();\n        } else {\n            // If there's no wait function, then reject the promise.\n            $this->reject('Cannot wait on a promise that has '\n                .'no internal wait function. You must provide a wait '\n                .'function when constructing the promise to be able to '\n                .'wait on a promise.');\n        }\n\n        Utils::queue()->run();\n\n        /** @psalm-suppress RedundantCondition */\n        if ($this->state === self::PENDING) {\n            $this->reject('Invoking the wait callback did not resolve the promise');\n        }\n    }\n\n    private function invokeWaitFn(): void\n    {\n        try {\n            $wfn = $this->waitFn;\n            $this->waitFn = null;\n            $wfn(true);\n        } catch (\\Throwable $reason) {\n            if ($this->state === self::PENDING) {\n                // The promise has not been resolved yet, so reject the promise\n                // with the exception.\n                $this->reject($reason);\n            } else {\n                // The promise was already resolved, so there's a problem in\n                // the application.\n                throw $reason;\n            }\n        }\n    }\n\n    private function invokeWaitList(): void\n    {\n        $waitList = $this->waitList;\n        $this->waitList = null;\n\n        foreach ($waitList as $result) {\n            do {\n                $result->waitIfPending();\n                $result = $result->result;\n            } while ($result instanceof Promise);\n\n            if ($result instanceof PromiseInterface) {\n                $result->wait(false);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/PromiseInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A promise represents the eventual result of an asynchronous operation.\n *\n * The primary way of interacting with a promise is through its then method,\n * which registers callbacks to receive either a promise’s eventual value or\n * the reason why the promise cannot be fulfilled.\n *\n * @see https://promisesaplus.com/\n */\ninterface PromiseInterface\n{\n    public const PENDING = 'pending';\n    public const FULFILLED = 'fulfilled';\n    public const REJECTED = 'rejected';\n\n    /**\n     * Appends fulfillment and rejection handlers to the promise, and returns\n     * a new promise resolving to the return value of the called handler.\n     *\n     * @param callable $onFulfilled Invoked when the promise fulfills.\n     * @param callable $onRejected  Invoked when the promise is rejected.\n     */\n    public function then(\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface;\n\n    /**\n     * Appends a rejection handler callback to the promise, and returns a new\n     * promise resolving to the return value of the callback if it is called,\n     * or to its original fulfillment value if the promise is instead\n     * fulfilled.\n     *\n     * @param callable $onRejected Invoked when the promise is rejected.\n     */\n    public function otherwise(callable $onRejected): PromiseInterface;\n\n    /**\n     * Get the state of the promise (\"pending\", \"rejected\", or \"fulfilled\").\n     *\n     * The three states can be checked against the constants defined on\n     * PromiseInterface: PENDING, FULFILLED, and REJECTED.\n     */\n    public function getState(): string;\n\n    /**\n     * Resolve the promise with the given value.\n     *\n     * @param mixed $value\n     *\n     * @throws \\RuntimeException if the promise is already resolved.\n     */\n    public function resolve($value): void;\n\n    /**\n     * Reject the promise with the given reason.\n     *\n     * @param mixed $reason\n     *\n     * @throws \\RuntimeException if the promise is already resolved.\n     */\n    public function reject($reason): void;\n\n    /**\n     * Cancels the promise if possible.\n     *\n     * @see https://github.com/promises-aplus/cancellation-spec/issues/7\n     */\n    public function cancel(): void;\n\n    /**\n     * Waits until the promise completes if possible.\n     *\n     * Pass $unwrap as true to unwrap the result of the promise, either\n     * returning the resolved value or throwing the rejected exception.\n     *\n     * If the promise cannot be waited on, then the promise will be rejected.\n     *\n     * @return mixed\n     *\n     * @throws \\LogicException if the promise has no wait function or if the\n     *                         promise does not settle after waiting.\n     */\n    public function wait(bool $unwrap = true);\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/PromisorInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Interface used with classes that return a promise.\n */\ninterface PromisorInterface\n{\n    /**\n     * Returns a promise.\n     */\n    public function promise(): PromiseInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/RejectedPromise.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A promise that has been rejected.\n *\n * Thenning off of this promise will invoke the onRejected callback\n * immediately and ignore other callbacks.\n *\n * @final\n */\nclass RejectedPromise implements PromiseInterface\n{\n    private $reason;\n\n    /**\n     * @param mixed $reason\n     */\n    public function __construct($reason)\n    {\n        if (is_object($reason) && method_exists($reason, 'then')) {\n            throw new \\InvalidArgumentException(\n                'You cannot create a RejectedPromise with a promise.'\n            );\n        }\n\n        $this->reason = $reason;\n    }\n\n    public function then(\n        ?callable $onFulfilled = null,\n        ?callable $onRejected = null\n    ): PromiseInterface {\n        // If there's no onRejected callback then just return self.\n        if (!$onRejected) {\n            return $this;\n        }\n\n        $queue = Utils::queue();\n        $reason = $this->reason;\n        $p = new Promise([$queue, 'run']);\n        $queue->add(static function () use ($p, $reason, $onRejected): void {\n            if (Is::pending($p)) {\n                try {\n                    // Return a resolved promise if onRejected does not throw.\n                    $p->resolve($onRejected($reason));\n                } catch (\\Throwable $e) {\n                    // onRejected threw, so return a rejected promise.\n                    $p->reject($e);\n                }\n            }\n        });\n\n        return $p;\n    }\n\n    public function otherwise(callable $onRejected): PromiseInterface\n    {\n        return $this->then(null, $onRejected);\n    }\n\n    public function wait(bool $unwrap = true)\n    {\n        if ($unwrap) {\n            throw Create::exceptionFor($this->reason);\n        }\n\n        return null;\n    }\n\n    public function getState(): string\n    {\n        return self::REJECTED;\n    }\n\n    public function resolve($value): void\n    {\n        throw new \\LogicException('Cannot resolve a rejected promise');\n    }\n\n    public function reject($reason): void\n    {\n        if ($reason !== $this->reason) {\n            throw new \\LogicException('Cannot reject a rejected promise');\n        }\n    }\n\n    public function cancel(): void\n    {\n        // pass\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/RejectionException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A special exception that is thrown when waiting on a rejected promise.\n *\n * The reason value is available via the getReason() method.\n */\nclass RejectionException extends \\RuntimeException\n{\n    /** @var mixed Rejection reason. */\n    private $reason;\n\n    /**\n     * @param mixed       $reason      Rejection reason.\n     * @param string|null $description Optional description.\n     */\n    public function __construct($reason, ?string $description = null)\n    {\n        $this->reason = $reason;\n\n        $message = 'The promise was rejected';\n\n        if ($description) {\n            $message .= ' with reason: '.$description;\n        } elseif (is_string($reason)\n            || (is_object($reason) && method_exists($reason, '__toString'))\n        ) {\n            $message .= ' with reason: '.$this->reason;\n        } elseif ($reason instanceof \\JsonSerializable) {\n            $message .= ' with reason: '.json_encode($this->reason, JSON_PRETTY_PRINT);\n        }\n\n        parent::__construct($message);\n    }\n\n    /**\n     * Returns the rejection reason.\n     *\n     * @return mixed\n     */\n    public function getReason()\n    {\n        return $this->reason;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/TaskQueue.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A task queue that executes tasks in a FIFO order.\n *\n * This task queue class is used to settle promises asynchronously and\n * maintains a constant stack size. You can use the task queue asynchronously\n * by calling the `run()` function of the global task queue in an event loop.\n *\n *     GuzzleHttp\\Promise\\Utils::queue()->run();\n *\n * @final\n */\nclass TaskQueue implements TaskQueueInterface\n{\n    private $enableShutdown = true;\n    private $queue = [];\n\n    public function __construct(bool $withShutdown = true)\n    {\n        if ($withShutdown) {\n            register_shutdown_function(function (): void {\n                if ($this->enableShutdown) {\n                    // Only run the tasks if an E_ERROR didn't occur.\n                    $err = error_get_last();\n                    if (!$err || ($err['type'] ^ E_ERROR)) {\n                        $this->run();\n                    }\n                }\n            });\n        }\n    }\n\n    public function isEmpty(): bool\n    {\n        return !$this->queue;\n    }\n\n    public function add(callable $task): void\n    {\n        $this->queue[] = $task;\n    }\n\n    public function run(): void\n    {\n        while ($task = array_shift($this->queue)) {\n            /** @var callable $task */\n            $task();\n        }\n    }\n\n    /**\n     * The task queue will be run and exhausted by default when the process\n     * exits IFF the exit is not the result of a PHP E_ERROR error.\n     *\n     * You can disable running the automatic shutdown of the queue by calling\n     * this function. If you disable the task queue shutdown process, then you\n     * MUST either run the task queue (as a result of running your event loop\n     * or manually using the run() method) or wait on each outstanding promise.\n     *\n     * Note: This shutdown will occur before any destructors are triggered.\n     */\n    public function disableShutdown(): void\n    {\n        $this->enableShutdown = false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/TaskQueueInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\ninterface TaskQueueInterface\n{\n    /**\n     * Returns true if the queue is empty.\n     */\n    public function isEmpty(): bool;\n\n    /**\n     * Adds a task to the queue that will be executed the next time run is\n     * called.\n     */\n    public function add(callable $task): void;\n\n    /**\n     * Execute all of the pending task in the queue.\n     */\n    public function run(): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/promises/src/Utils.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Utils\n{\n    /**\n     * Get the global task queue used for promise resolution.\n     *\n     * This task queue MUST be run in an event loop in order for promises to be\n     * settled asynchronously. It will be automatically run when synchronously\n     * waiting on a promise.\n     *\n     * <code>\n     * while ($eventLoop->isRunning()) {\n     *     GuzzleHttp\\Promise\\Utils::queue()->run();\n     * }\n     * </code>\n     *\n     * @param TaskQueueInterface|null $assign Optionally specify a new queue instance.\n     */\n    public static function queue(?TaskQueueInterface $assign = null): TaskQueueInterface\n    {\n        static $queue;\n\n        if ($assign) {\n            $queue = $assign;\n        } elseif (!$queue) {\n            $queue = new TaskQueue();\n        }\n\n        return $queue;\n    }\n\n    /**\n     * Adds a function to run in the task queue when it is next `run()` and\n     * returns a promise that is fulfilled or rejected with the result.\n     *\n     * @param callable $task Task function to run.\n     */\n    public static function task(callable $task): PromiseInterface\n    {\n        $queue = self::queue();\n        $promise = new Promise([$queue, 'run']);\n        $queue->add(function () use ($task, $promise): void {\n            try {\n                if (Is::pending($promise)) {\n                    $promise->resolve($task());\n                }\n            } catch (\\Throwable $e) {\n                $promise->reject($e);\n            }\n        });\n\n        return $promise;\n    }\n\n    /**\n     * Synchronously waits on a promise to resolve and returns an inspection\n     * state array.\n     *\n     * Returns a state associative array containing a \"state\" key mapping to a\n     * valid promise state. If the state of the promise is \"fulfilled\", the\n     * array will contain a \"value\" key mapping to the fulfilled value of the\n     * promise. If the promise is rejected, the array will contain a \"reason\"\n     * key mapping to the rejection reason of the promise.\n     *\n     * @param PromiseInterface $promise Promise or value.\n     */\n    public static function inspect(PromiseInterface $promise): array\n    {\n        try {\n            return [\n                'state' => PromiseInterface::FULFILLED,\n                'value' => $promise->wait(),\n            ];\n        } catch (RejectionException $e) {\n            return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];\n        } catch (\\Throwable $e) {\n            return ['state' => PromiseInterface::REJECTED, 'reason' => $e];\n        }\n    }\n\n    /**\n     * Waits on all of the provided promises, but does not unwrap rejected\n     * promises as thrown exception.\n     *\n     * Returns an array of inspection state arrays.\n     *\n     * @see inspect for the inspection state array format.\n     *\n     * @param PromiseInterface[] $promises Traversable of promises to wait upon.\n     */\n    public static function inspectAll($promises): array\n    {\n        $results = [];\n        foreach ($promises as $key => $promise) {\n            $results[$key] = self::inspect($promise);\n        }\n\n        return $results;\n    }\n\n    /**\n     * Waits on all of the provided promises and returns the fulfilled values.\n     *\n     * Returns an array that contains the value of each promise (in the same\n     * order the promises were provided). An exception is thrown if any of the\n     * promises are rejected.\n     *\n     * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.\n     *\n     * @throws \\Throwable on error\n     */\n    public static function unwrap($promises): array\n    {\n        $results = [];\n        foreach ($promises as $key => $promise) {\n            $results[$key] = $promise->wait();\n        }\n\n        return $results;\n    }\n\n    /**\n     * Given an array of promises, return a promise that is fulfilled when all\n     * the items in the array are fulfilled.\n     *\n     * The promise's fulfillment value is an array with fulfillment values at\n     * respective positions to the original array. If any promise in the array\n     * rejects, the returned promise is rejected with the rejection reason.\n     *\n     * @param mixed $promises  Promises or values.\n     * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.\n     */\n    public static function all($promises, bool $recursive = false): PromiseInterface\n    {\n        $results = [];\n        $promise = Each::of(\n            $promises,\n            function ($value, $idx) use (&$results): void {\n                $results[$idx] = $value;\n            },\n            function ($reason, $idx, Promise $aggregate): void {\n                if (Is::pending($aggregate)) {\n                    $aggregate->reject($reason);\n                }\n            }\n        )->then(function () use (&$results) {\n            ksort($results);\n\n            return $results;\n        });\n\n        if (true === $recursive) {\n            $promise = $promise->then(function ($results) use ($recursive, &$promises) {\n                foreach ($promises as $promise) {\n                    if (Is::pending($promise)) {\n                        return self::all($promises, $recursive);\n                    }\n                }\n\n                return $results;\n            });\n        }\n\n        return $promise;\n    }\n\n    /**\n     * Initiate a competitive race between multiple promises or values (values\n     * will become immediately fulfilled promises).\n     *\n     * When count amount of promises have been fulfilled, the returned promise\n     * is fulfilled with an array that contains the fulfillment values of the\n     * winners in order of resolution.\n     *\n     * This promise is rejected with a {@see AggregateException} if the number\n     * of fulfilled promises is less than the desired $count.\n     *\n     * @param int   $count    Total number of promises.\n     * @param mixed $promises Promises or values.\n     */\n    public static function some(int $count, $promises): PromiseInterface\n    {\n        $results = [];\n        $rejections = [];\n\n        return Each::of(\n            $promises,\n            function ($value, $idx, PromiseInterface $p) use (&$results, $count): void {\n                if (Is::settled($p)) {\n                    return;\n                }\n                $results[$idx] = $value;\n                if (count($results) >= $count) {\n                    $p->resolve(null);\n                }\n            },\n            function ($reason) use (&$rejections): void {\n                $rejections[] = $reason;\n            }\n        )->then(\n            function () use (&$results, &$rejections, $count) {\n                if (count($results) !== $count) {\n                    throw new AggregateException(\n                        'Not enough promises to fulfill count',\n                        $rejections\n                    );\n                }\n                ksort($results);\n\n                return array_values($results);\n            }\n        );\n    }\n\n    /**\n     * Like some(), with 1 as count. However, if the promise fulfills, the\n     * fulfillment value is not an array of 1 but the value directly.\n     *\n     * @param mixed $promises Promises or values.\n     */\n    public static function any($promises): PromiseInterface\n    {\n        return self::some(1, $promises)->then(function ($values) {\n            return $values[0];\n        });\n    }\n\n    /**\n     * Returns a promise that is fulfilled when all of the provided promises have\n     * been fulfilled or rejected.\n     *\n     * The returned promise is fulfilled with an array of inspection state arrays.\n     *\n     * @see inspect for the inspection state array format.\n     *\n     * @param mixed $promises Promises or values.\n     */\n    public static function settle($promises): PromiseInterface\n    {\n        $results = [];\n\n        return Each::of(\n            $promises,\n            function ($value, $idx) use (&$results): void {\n                $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];\n            },\n            function ($reason, $idx) use (&$results): void {\n                $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];\n            }\n        )->then(function () use (&$results) {\n            ksort($results);\n\n            return $results;\n        });\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## 2.8.0 - 2025-08-23\n\n### Added\n\n- Allow empty lists as header values\n\n### Changed\n\n- PHP 8.5 support\n\n## 2.7.1 - 2025-03-27\n\n### Fixed\n\n- Fixed uppercase IPv6 addresses in URI\n\n### Changed\n\n- Improve uploaded file error message\n\n## 2.7.0 - 2024-07-18\n\n### Added\n\n- Add `Utils::redactUserInfo()` method\n- Add ability to encode bools as ints in `Query::build`\n\n## 2.6.3 - 2024-07-18\n\n### Fixed\n\n- Make `StreamWrapper::stream_stat()` return `false` if inner stream's size is `null` \n\n### Changed\n\n- PHP 8.4 support\n\n## 2.6.2 - 2023-12-03\n\n### Fixed\n\n- Fixed another issue with the fact that PHP transforms numeric strings in array keys to ints\n\n### Changed\n\n- Updated links in docs to their canonical versions\n- Replaced `call_user_func*` with native calls\n\n## 2.6.1 - 2023-08-27\n\n### Fixed\n\n- Properly handle the fact that PHP transforms numeric strings in array keys to ints\n\n## 2.6.0 - 2023-08-03\n\n### Changed\n\n- Updated the mime type map to add some new entries, fix a couple of invalid entries, and remove an invalid entry\n- Fallback to `application/octet-stream` if we are unable to guess the content type for a multipart file upload\n\n## 2.5.1 - 2023-08-03\n\n### Fixed\n\n- Corrected mime type for `.acc` files to `audio/aac`\n\n### Changed\n\n- PHP 8.3 support\n\n## 2.5.0 - 2023-04-17\n\n### Changed\n\n- Adjusted `psr/http-message` version constraint to `^1.1 || ^2.0`\n\n## 2.4.5 - 2023-04-17\n\n### Fixed\n\n- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec`\n- Fixed `Message::bodySummary` when `preg_match` fails\n- Fixed header validation issue\n\n## 2.4.4 - 2023-03-09\n\n### Changed\n\n- Removed the need for `AllowDynamicProperties` in `LazyOpenStream`\n\n## 2.4.3 - 2022-10-26\n\n### Changed\n\n- Replaced `sha1(uniqid())` by `bin2hex(random_bytes(20))`\n\n## 2.4.2 - 2022-10-25\n\n### Fixed\n\n- Fixed erroneous behaviour when combining host and relative path\n\n## 2.4.1 - 2022-08-28\n\n### Fixed\n\n- Rewind body before reading in `Message::bodySummary`\n\n## 2.4.0 - 2022-06-20\n\n### Added\n\n- Added provisional PHP 8.2 support\n- Added `UriComparator::isCrossOrigin` method\n\n## 2.3.0 - 2022-06-09\n\n### Fixed\n\n- Added `Header::splitList` method\n- Added `Utils::tryGetContents` method\n- Improved `Stream::getContents` method\n- Updated mimetype mappings\n\n## 2.2.2 - 2022-06-08\n\n### Fixed\n\n- Fix `Message::parseRequestUri` for numeric headers\n- Re-wrap exceptions thrown in `fread` into runtime exceptions\n- Throw an exception when multipart options is misformatted\n\n## 2.2.1 - 2022-03-20\n\n### Fixed\n\n- Correct header value validation\n\n## 2.2.0 - 2022-03-20\n\n### Added\n\n- A more compressive list of mime types\n- Add JsonSerializable to Uri\n- Missing return types\n\n### Fixed\n\n- Bug MultipartStream no `uri` metadata\n- Bug MultipartStream with filename for `data://` streams\n- Fixed new line handling in MultipartStream\n- Reduced RAM usage when copying streams\n- Updated parsing in `Header::normalize()`\n\n## 2.1.1 - 2022-03-20\n\n### Fixed\n\n- Validate header values properly\n\n## 2.1.0 - 2021-10-06\n\n### Changed\n\n- Attempting to create a `Uri` object from a malformed URI will no longer throw a generic\n  `InvalidArgumentException`, but rather a `MalformedUriException`, which inherits from the former\n  for backwards compatibility. Callers relying on the exception being thrown to detect invalid\n  URIs should catch the new exception.\n\n### Fixed\n\n- Return `null` in caching stream size if remote size is `null`\n\n## 2.0.0 - 2021-06-30\n\nIdentical to the RC release.\n\n## 2.0.0@RC-1 - 2021-04-29\n\n### Fixed\n\n- Handle possibly unset `url` in `stream_get_meta_data`\n\n## 2.0.0@beta-1 - 2021-03-21\n\n### Added\n\n- PSR-17 factories\n- Made classes final\n- PHP7 type hints\n\n### Changed\n\n- When building a query string, booleans are represented as 1 and 0.\n\n### Removed\n\n- PHP < 7.2 support\n- All functions in the `GuzzleHttp\\Psr7` namespace\n\n## 1.8.1 - 2021-03-21\n\n### Fixed\n\n- Issue parsing IPv6 URLs\n- Issue modifying ServerRequest lost all its attributes\n\n## 1.8.0 - 2021-03-21\n\n### Added\n\n- Locale independent URL parsing\n- Most classes got a `@final` annotation to prepare for 2.0\n\n### Fixed\n\n- Issue when creating stream from `php://input` and curl-ext is not installed\n- Broken `Utils::tryFopen()` on PHP 8\n\n## 1.7.0 - 2020-09-30\n\n### Added\n\n- Replaced functions by static methods\n\n### Fixed\n\n- Converting a non-seekable stream to a string\n- Handle multiple Set-Cookie correctly\n- Ignore array keys in header values when merging\n- Allow multibyte characters to be parsed in `Message:bodySummary()`\n\n### Changed\n\n- Restored partial HHVM 3 support\n\n\n## [1.6.1] - 2019-07-02\n\n### Fixed\n\n- Accept null and bool header values again\n\n\n## [1.6.0] - 2019-06-30\n\n### Added\n\n- Allowed version `^3.0` of `ralouphie/getallheaders` dependency (#244)\n- Added MIME type for WEBP image format (#246)\n- Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272)\n\n### Changed\n\n- Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262)\n- Accept port number 0 to be valid (#270)\n\n### Fixed\n\n- Fixed subsequent reads from `php://input` in ServerRequest (#247)\n- Fixed readable/writable detection for certain stream modes (#248)\n- Fixed encoding of special characters in the `userInfo` component of an URI (#253)\n\n\n## [1.5.2] - 2018-12-04\n\n### Fixed\n\n- Check body size when getting the message summary\n\n\n## [1.5.1] - 2018-12-04\n\n### Fixed\n\n- Get the summary of a body only if it is readable\n\n\n## [1.5.0] - 2018-12-03\n\n### Added\n\n- Response first-line to response string exception (fixes #145)\n- A test for #129 behavior\n- `get_message_body_summary` function in order to get the message summary\n- `3gp` and `mkv` mime types\n\n### Changed\n\n- Clarify exception message when stream is detached\n\n### Deprecated\n\n- Deprecated parsing folded header lines as per RFC 7230\n\n### Fixed\n\n- Fix `AppendStream::detach` to not close streams\n- `InflateStream` preserves `isSeekable` attribute of the underlying stream\n- `ServerRequest::getUriFromGlobals` to support URLs in query parameters\n\n\nSeveral other fixes and improvements.\n\n\n## [1.4.2] - 2017-03-20\n\n### Fixed\n\n- Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing\n  calls to `trigger_error` when deprecated methods are invoked.\n\n\n## [1.4.1] - 2017-02-27\n\n### Added\n\n- Rriggering of silenced deprecation warnings.\n\n### Fixed\n\n- Reverted BC break by reintroducing behavior to automagically fix a URI with a\n  relative path and an authority by adding a leading slash to the path. It's only\n  deprecated now.\n\n\n## [1.4.0] - 2017-02-21\n\n### Added\n\n- Added common URI utility methods based on RFC 3986 (see documentation in the readme):\n  - `Uri::isDefaultPort`\n  - `Uri::isAbsolute`\n  - `Uri::isNetworkPathReference`\n  - `Uri::isAbsolutePathReference`\n  - `Uri::isRelativePathReference`\n  - `Uri::isSameDocumentReference`\n  - `Uri::composeComponents`\n  - `UriNormalizer::normalize`\n  - `UriNormalizer::isEquivalent`\n  - `UriResolver::relativize`\n\n### Changed\n\n- Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form.\n- Allow `parse_response` to parse a response without delimiting space and reason.\n- Ensure each URI modification results in a valid URI according to PSR-7 discussions.\n  Invalid modifications will throw an exception instead of returning a wrong URI or\n  doing some magic.\n  - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception\n    because the path of a URI with an authority must start with a slash \"/\" or be empty\n  - `(new Uri())->withScheme('http')` will return `'http://localhost'`\n\n### Deprecated\n\n- `Uri::resolve` in favor of `UriResolver::resolve`\n- `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments`\n\n### Fixed\n\n- `Stream::read` when length parameter <= 0.\n- `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory.\n- `ServerRequest::getUriFromGlobals` when `Host` header contains port.\n- Compatibility of URIs with `file` scheme and empty host.\n\n\n## [1.3.1] - 2016-06-25\n\n### Fixed\n\n- `Uri::__toString` for network path references, e.g. `//example.org`.\n- Missing lowercase normalization for host.\n- Handling of URI components in case they are `'0'` in a lot of places,\n  e.g. as a user info password.\n- `Uri::withAddedHeader` to correctly merge headers with different case.\n- Trimming of header values in `Uri::withAddedHeader`. Header values may\n  be surrounded by whitespace which should be ignored according to RFC 7230\n  Section 3.2.4. This does not apply to header names.\n- `Uri::withAddedHeader` with an array of header values.\n- `Uri::resolve` when base path has no slash and handling of fragment.\n- Handling of encoding in `Uri::with(out)QueryValue` so one can pass the\n  key/value both in encoded as well as decoded form to those methods. This is\n  consistent with withPath, withQuery etc.\n- `ServerRequest::withoutAttribute` when attribute value is null.\n\n\n## [1.3.0] - 2016-04-13\n\n### Added\n\n- Remaining interfaces needed for full PSR7 compatibility\n  (ServerRequestInterface, UploadedFileInterface, etc.).\n- Support for stream_for from scalars.\n\n### Changed\n\n- Can now extend Uri.\n\n### Fixed\n- A bug in validating request methods by making it more permissive.\n\n\n## [1.2.3] - 2016-02-18\n\n### Fixed\n\n- Support in `GuzzleHttp\\Psr7\\CachingStream` for seeking forward on remote\n  streams, which can sometimes return fewer bytes than requested with `fread`.\n- Handling of gzipped responses with FNAME headers.\n\n\n## [1.2.2] - 2016-01-22\n\n### Added\n\n- Support for URIs without any authority.\n- Support for HTTP 451 'Unavailable For Legal Reasons.'\n- Support for using '0' as a filename.\n- Support for including non-standard ports in Host headers.\n\n\n## [1.2.1] - 2015-11-02\n\n### Changes\n\n- Now supporting negative offsets when seeking to SEEK_END.\n\n\n## [1.2.0] - 2015-08-15\n\n### Changed\n\n- Body as `\"0\"` is now properly added to a response.\n- Now allowing forward seeking in CachingStream.\n- Now properly parsing HTTP requests that contain proxy targets in\n  `parse_request`.\n- functions.php is now conditionally required.\n- user-info is no longer dropped when resolving URIs.\n\n\n## [1.1.0] - 2015-06-24\n\n### Changed\n\n- URIs can now be relative.\n- `multipart/form-data` headers are now overridden case-insensitively.\n- URI paths no longer encode the following characters because they are allowed\n  in URIs: \"(\", \")\", \"*\", \"!\", \"'\"\n- A port is no longer added to a URI when the scheme is missing and no port is\n  present.\n\n\n## 1.0.0 - 2015-05-19\n\nInitial release.\n\nCurrently unsupported:\n\n- `Psr\\Http\\Message\\ServerRequestInterface`\n- `Psr\\Http\\Message\\UploadedFileInterface`\n\n\n\n[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0\n[1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2\n[1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1\n[1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0\n[1.4.2]: https://github.com/guzzle/psr7/compare/1.4.1...1.4.2\n[1.4.1]: https://github.com/guzzle/psr7/compare/1.4.0...1.4.1\n[1.4.0]: https://github.com/guzzle/psr7/compare/1.3.1...1.4.0\n[1.3.1]: https://github.com/guzzle/psr7/compare/1.3.0...1.3.1\n[1.3.0]: https://github.com/guzzle/psr7/compare/1.2.3...1.3.0\n[1.2.3]: https://github.com/guzzle/psr7/compare/1.2.2...1.2.3\n[1.2.2]: https://github.com/guzzle/psr7/compare/1.2.1...1.2.2\n[1.2.1]: https://github.com/guzzle/psr7/compare/1.2.0...1.2.1\n[1.2.0]: https://github.com/guzzle/psr7/compare/1.1.0...1.2.0\n[1.1.0]: https://github.com/guzzle/psr7/compare/1.0.0...1.1.0\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Michael Dowling <mtdowling@gmail.com>\nCopyright (c) 2015 Márk Sági-Kazár <mark.sagikazar@gmail.com>\nCopyright (c) 2015 Graham Campbell <hello@gjcampbell.co.uk>\nCopyright (c) 2016 Tobias Schultze <webmaster@tubo-world.de>\nCopyright (c) 2016 George Mponos <gmponos@gmail.com>\nCopyright (c) 2018 Tobias Nyholm <tobias.nyholm@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/README.md",
    "content": "# PSR-7 Message Implementation\n\nThis repository contains a full [PSR-7](https://www.php-fig.org/psr/psr-7/)\nmessage implementation, several stream decorators, and some helpful\nfunctionality like query string parsing.\n\n![CI](https://github.com/guzzle/psr7/workflows/CI/badge.svg)\n![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg)\n\n\n## Features\n\nThis package comes with a number of stream implementations and stream\ndecorators.\n\n\n## Installation\n\n```shell\ncomposer require guzzlehttp/psr7\n```\n\n## Version Guidance\n\n| Version | Status              | PHP Version  |\n|---------|---------------------|--------------|\n| 1.x     | EOL (2024-06-30)    | >=5.4,<8.2   |\n| 2.x     | Latest              | >=7.2.5,<8.6 |\n\n\n## AppendStream\n\n`GuzzleHttp\\Psr7\\AppendStream`\n\nReads from multiple streams, one after the other.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$a = Psr7\\Utils::streamFor('abc, ');\n$b = Psr7\\Utils::streamFor('123.');\n$composed = new Psr7\\AppendStream([$a, $b]);\n\n$composed->addStream(Psr7\\Utils::streamFor(' Above all listen to me'));\n\necho $composed; // abc, 123. Above all listen to me.\n```\n\n\n## BufferStream\n\n`GuzzleHttp\\Psr7\\BufferStream`\n\nProvides a buffer stream that can be written to fill a buffer, and read\nfrom to remove bytes from the buffer.\n\nThis stream returns a \"hwm\" metadata value that tells upstream consumers\nwhat the configured high water mark of the stream is, or the maximum\npreferred size of the buffer.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n// When more than 1024 bytes are in the buffer, it will begin returning\n// false to writes. This is an indication that writers should slow down.\n$buffer = new Psr7\\BufferStream(1024);\n```\n\n\n## CachingStream\n\nThe CachingStream is used to allow seeking over previously read bytes on\nnon-seekable streams. This can be useful when transferring a non-seekable\nentity body fails due to needing to rewind the stream (for example, resulting\nfrom a redirect). Data that is read from the remote stream will be buffered in\na PHP temp stream so that previously read bytes are cached first in memory,\nthen on disk.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor(fopen('http://www.google.com', 'r'));\n$stream = new Psr7\\CachingStream($original);\n\n$stream->read(1024);\necho $stream->tell();\n// 1024\n\n$stream->seek(0);\necho $stream->tell();\n// 0\n```\n\n\n## DroppingStream\n\n`GuzzleHttp\\Psr7\\DroppingStream`\n\nStream decorator that begins dropping data once the size of the underlying\nstream becomes too full.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n// Create an empty stream\n$stream = Psr7\\Utils::streamFor();\n\n// Start dropping data when the stream has more than 10 bytes\n$dropping = new Psr7\\DroppingStream($stream, 10);\n\n$dropping->write('01234567890123456789');\necho $stream; // 0123456789\n```\n\n\n## FnStream\n\n`GuzzleHttp\\Psr7\\FnStream`\n\nCompose stream implementations based on a hash of functions.\n\nAllows for easy testing and extension of a provided stream without needing\nto create a concrete class for a simple extension point.\n\n```php\n\nuse GuzzleHttp\\Psr7;\n\n$stream = Psr7\\Utils::streamFor('hi');\n$fnStream = Psr7\\FnStream::decorate($stream, [\n    'rewind' => function () use ($stream) {\n        echo 'About to rewind - ';\n        $stream->rewind();\n        echo 'rewound!';\n    }\n]);\n\n$fnStream->rewind();\n// Outputs: About to rewind - rewound!\n```\n\n\n## InflateStream\n\n`GuzzleHttp\\Psr7\\InflateStream`\n\nUses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.\n\nThis stream decorator converts the provided stream to a PHP stream resource,\nthen appends the zlib.inflate filter. The stream is then converted back\nto a Guzzle stream resource to be used as a Guzzle stream.\n\n\n## LazyOpenStream\n\n`GuzzleHttp\\Psr7\\LazyOpenStream`\n\nLazily reads or writes to a file that is opened only after an IO operation\ntake place on the stream.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$stream = new Psr7\\LazyOpenStream('/path/to/file', 'r');\n// The file has not yet been opened...\n\necho $stream->read(10);\n// The file is opened and read from only when needed.\n```\n\n\n## LimitStream\n\n`GuzzleHttp\\Psr7\\LimitStream`\n\nLimitStream can be used to read a subset or slice of an existing stream object.\nThis can be useful for breaking a large file into smaller pieces to be sent in\nchunks (e.g. Amazon S3's multipart upload API).\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor(fopen('/tmp/test.txt', 'r+'));\necho $original->getSize();\n// >>> 1048576\n\n// Limit the size of the body to 1024 bytes and start reading from byte 2048\n$stream = new Psr7\\LimitStream($original, 1024, 2048);\necho $stream->getSize();\n// >>> 1024\necho $stream->tell();\n// >>> 0\n```\n\n\n## MultipartStream\n\n`GuzzleHttp\\Psr7\\MultipartStream`\n\nStream that when read returns bytes for a streaming multipart or\nmultipart/form-data stream.\n\n\n## NoSeekStream\n\n`GuzzleHttp\\Psr7\\NoSeekStream`\n\nNoSeekStream wraps a stream and does not allow seeking.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor('foo');\n$noSeek = new Psr7\\NoSeekStream($original);\n\necho $noSeek->read(3);\n// foo\nvar_export($noSeek->isSeekable());\n// false\n$noSeek->seek(0);\nvar_export($noSeek->read(3));\n// NULL\n```\n\n\n## PumpStream\n\n`GuzzleHttp\\Psr7\\PumpStream`\n\nProvides a read only stream that pumps data from a PHP callable.\n\nWhen invoking the provided callable, the PumpStream will pass the amount of\ndata requested to read to the callable. The callable can choose to ignore\nthis value and return fewer or more bytes than requested. Any extra data\nreturned by the provided callable is buffered internally until drained using\nthe read() function of the PumpStream. The provided callable MUST return\nfalse when there is no more data to read.\n\n\n## Implementing stream decorators\n\nCreating a stream decorator is very easy thanks to the\n`GuzzleHttp\\Psr7\\StreamDecoratorTrait`. This trait provides methods that\nimplement `Psr\\Http\\Message\\StreamInterface` by proxying to an underlying\nstream. Just `use` the `StreamDecoratorTrait` and implement your custom\nmethods.\n\nFor example, let's say we wanted to call a specific function each time the last\nbyte is read from a stream. This could be implemented by overriding the\n`read()` method.\n\n```php\nuse Psr\\Http\\Message\\StreamInterface;\nuse GuzzleHttp\\Psr7\\StreamDecoratorTrait;\n\nclass EofCallbackStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    private $callback;\n\n    private $stream;\n\n    public function __construct(StreamInterface $stream, callable $cb)\n    {\n        $this->stream = $stream;\n        $this->callback = $cb;\n    }\n\n    public function read($length)\n    {\n        $result = $this->stream->read($length);\n\n        // Invoke the callback when EOF is hit.\n        if ($this->eof()) {\n            ($this->callback)();\n        }\n\n        return $result;\n    }\n}\n```\n\nThis decorator could be added to any existing stream and used like so:\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor('foo');\n\n$eofStream = new EofCallbackStream($original, function () {\n    echo 'EOF!';\n});\n\n$eofStream->read(2);\n$eofStream->read(1);\n// echoes \"EOF!\"\n$eofStream->seek(0);\n$eofStream->read(3);\n// echoes \"EOF!\"\n```\n\n\n## PHP StreamWrapper\n\nYou can use the `GuzzleHttp\\Psr7\\StreamWrapper` class if you need to use a\nPSR-7 stream as a PHP stream resource.\n\nUse the `GuzzleHttp\\Psr7\\StreamWrapper::getResource()` method to create a PHP\nstream from a PSR-7 stream.\n\n```php\nuse GuzzleHttp\\Psr7\\StreamWrapper;\n\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor('hello!');\n$resource = StreamWrapper::getResource($stream);\necho fread($resource, 6); // outputs hello!\n```\n\n\n# Static API\n\nThere are various static methods available under the `GuzzleHttp\\Psr7` namespace.\n\n\n## `GuzzleHttp\\Psr7\\Message::toString`\n\n`public static function toString(MessageInterface $message): string`\n\nReturns the string representation of an HTTP message.\n\n```php\n$request = new GuzzleHttp\\Psr7\\Request('GET', 'http://example.com');\necho GuzzleHttp\\Psr7\\Message::toString($request);\n```\n\n\n## `GuzzleHttp\\Psr7\\Message::bodySummary`\n\n`public static function bodySummary(MessageInterface $message, int $truncateAt = 120): string|null`\n\nGet a short summary of the message body.\n\nWill return `null` if the response is not printable.\n\n\n## `GuzzleHttp\\Psr7\\Message::rewindBody`\n\n`public static function rewindBody(MessageInterface $message): void`\n\nAttempts to rewind a message body and throws an exception on failure.\n\nThe body of the message will only be rewound if a call to `tell()`\nreturns a value other than `0`.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseMessage`\n\n`public static function parseMessage(string $message): array`\n\nParses an HTTP message into an associative array.\n\nThe array contains the \"start-line\" key containing the start line of\nthe message, \"headers\" key containing an associative array of header\narray values, and a \"body\" key containing the body of the message.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseRequestUri`\n\n`public static function parseRequestUri(string $path, array $headers): string`\n\nConstructs a URI for an HTTP request message.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseRequest`\n\n`public static function parseRequest(string $message): Request`\n\nParses a request message string into a request object.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseResponse`\n\n`public static function parseResponse(string $message): Response`\n\nParses a response message string into a response object.\n\n\n## `GuzzleHttp\\Psr7\\Header::parse`\n\n`public static function parse(string|array $header): array`\n\nParse an array of header values containing \";\" separated data into an\narray of associative arrays representing the header key value pair data\nof the header. When a parameter does not contain a value, but just\ncontains a key, this function will inject a key with a '' string value.\n\n\n## `GuzzleHttp\\Psr7\\Header::splitList`\n\n`public static function splitList(string|string[] $header): string[]`\n\nSplits a HTTP header defined to contain a comma-separated list into\neach individual value:\n\n```\n$knownEtags = Header::splitList($request->getHeader('if-none-match'));\n```\n\nExample headers include `accept`, `cache-control` and `if-none-match`.\n\n\n## `GuzzleHttp\\Psr7\\Header::normalize` (deprecated)\n\n`public static function normalize(string|array $header): array`\n\n`Header::normalize()` is deprecated in favor of [`Header::splitList()`](README.md#guzzlehttppsr7headersplitlist)\nwhich performs the same operation with a cleaned up API and improved\ndocumentation.\n\nConverts an array of header values that may contain comma separated\nheaders into an array of headers with no comma separated values.\n\n\n## `GuzzleHttp\\Psr7\\Query::parse`\n\n`public static function parse(string $str, int|bool $urlEncoding = true): array`\n\nParse a query string into an associative array.\n\nIf multiple values are found for the same key, the value of that key\nvalue pair will become an array. This function does not parse nested\nPHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`\nwill be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.\n\n\n## `GuzzleHttp\\Psr7\\Query::build`\n\n`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986, bool $treatBoolsAsInts = true): string`\n\nBuild a query string from an array of key value pairs.\n\nThis function can use the return value of `parse()` to build a query\nstring. This function does not modify the provided keys when an array is\nencountered (like `http_build_query()` would).\n\n\n## `GuzzleHttp\\Psr7\\Utils::caselessRemove`\n\n`public static function caselessRemove(iterable<string> $keys, $keys, array $data): array`\n\nRemove the items given by the keys, case insensitively from the data.\n\n\n## `GuzzleHttp\\Psr7\\Utils::copyToStream`\n\n`public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void`\n\nCopy the contents of a stream into another stream until the given number\nof bytes have been read.\n\n\n## `GuzzleHttp\\Psr7\\Utils::copyToString`\n\n`public static function copyToString(StreamInterface $stream, int $maxLen = -1): string`\n\nCopy the contents of a stream into a string until the given number of\nbytes have been read.\n\n\n## `GuzzleHttp\\Psr7\\Utils::hash`\n\n`public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string`\n\nCalculate a hash of a stream.\n\nThis method reads the entire stream to calculate a rolling hash, based on\nPHP's `hash_init` functions.\n\n\n## `GuzzleHttp\\Psr7\\Utils::modifyRequest`\n\n`public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface`\n\nClone and modify a request with the given changes.\n\nThis method is useful for reducing the number of clones needed to mutate\na message.\n\n- method: (string) Changes the HTTP method.\n- set_headers: (array) Sets the given headers.\n- remove_headers: (array) Remove the given headers.\n- body: (mixed) Sets the given body.\n- uri: (UriInterface) Set the URI.\n- query: (string) Set the query string value of the URI.\n- version: (string) Set the protocol version.\n\n\n## `GuzzleHttp\\Psr7\\Utils::readLine`\n\n`public static function readLine(StreamInterface $stream, ?int $maxLength = null): string`\n\nRead a line from the stream up to the maximum allowed buffer length.\n\n\n## `GuzzleHttp\\Psr7\\Utils::redactUserInfo`\n\n`public static function redactUserInfo(UriInterface $uri): UriInterface`\n\nRedact the password in the user info part of a URI.\n\n\n## `GuzzleHttp\\Psr7\\Utils::streamFor`\n\n`public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\\Iterator $resource = '', array $options = []): StreamInterface`\n\nCreate a new stream based on the input type.\n\nOptions is an associative array that can contain the following keys:\n\n- metadata: Array of custom metadata.\n- size: Size of the stream.\n\nThis method accepts the following `$resource` types:\n\n- `Psr\\Http\\Message\\StreamInterface`: Returns the value as-is.\n- `string`: Creates a stream object that uses the given string as the contents.\n- `resource`: Creates a stream object that wraps the given PHP stream resource.\n- `Iterator`: If the provided value implements `Iterator`, then a read-only\n  stream object will be created that wraps the given iterable. Each time the\n  stream is read from, data from the iterator will fill a buffer and will be\n  continuously called until the buffer is equal to the requested read size.\n  Subsequent read calls will first read from the buffer and then call `next`\n  on the underlying iterator until it is exhausted.\n- `object` with `__toString()`: If the object has the `__toString()` method,\n  the object will be cast to a string and then a stream will be returned that\n  uses the string value.\n- `NULL`: When `null` is passed, an empty stream object is returned.\n- `callable` When a callable is passed, a read-only stream object will be\n  created that invokes the given callable. The callable is invoked with the\n  number of suggested bytes to read. The callable can return any number of\n  bytes, but MUST return `false` when there is no more data to return. The\n  stream object that wraps the callable will invoke the callable until the\n  number of requested bytes are available. Any additional bytes will be\n  buffered and used in subsequent reads.\n\n```php\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor('foo');\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor(fopen('/path/to/file', 'r'));\n\n$generator = function ($bytes) {\n    for ($i = 0; $i < $bytes; $i++) {\n        yield ' ';\n    }\n}\n\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor($generator(100));\n```\n\n\n## `GuzzleHttp\\Psr7\\Utils::tryFopen`\n\n`public static function tryFopen(string $filename, string $mode): resource`\n\nSafely opens a PHP stream resource using a filename.\n\nWhen fopen fails, PHP normally raises a warning. This function adds an\nerror handler that checks for errors and throws an exception instead.\n\n\n## `GuzzleHttp\\Psr7\\Utils::tryGetContents`\n\n`public static function tryGetContents(resource $stream): string`\n\nSafely gets the contents of a given stream.\n\nWhen stream_get_contents fails, PHP normally raises a warning. This\nfunction adds an error handler that checks for errors and throws an\nexception instead.\n\n\n## `GuzzleHttp\\Psr7\\Utils::uriFor`\n\n`public static function uriFor(string|UriInterface $uri): UriInterface`\n\nReturns a UriInterface for the given value.\n\nThis function accepts a string or UriInterface and returns a\nUriInterface for the given value. If the value is already a\nUriInterface, it is returned as-is.\n\n\n## `GuzzleHttp\\Psr7\\MimeType::fromFilename`\n\n`public static function fromFilename(string $filename): string|null`\n\nDetermines the mimetype of a file by looking at its extension.\n\n\n## `GuzzleHttp\\Psr7\\MimeType::fromExtension`\n\n`public static function fromExtension(string $extension): string|null`\n\nMaps a file extensions to a mimetype.\n\n\n## Upgrading from Function API\n\nThe static API was first introduced in 1.7.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API was removed in 2.0.0. A migration table has been provided here for your convenience:\n\n| Original Function | Replacement Method |\n|----------------|----------------|\n| `str` | `Message::toString` |\n| `uri_for` | `Utils::uriFor` |\n| `stream_for` | `Utils::streamFor` |\n| `parse_header` | `Header::parse` |\n| `normalize_header` | `Header::normalize` |\n| `modify_request` | `Utils::modifyRequest` |\n| `rewind_body` | `Message::rewindBody` |\n| `try_fopen` | `Utils::tryFopen` |\n| `copy_to_string` | `Utils::copyToString` |\n| `copy_to_stream` | `Utils::copyToStream` |\n| `hash` | `Utils::hash` |\n| `readline` | `Utils::readLine` |\n| `parse_request` | `Message::parseRequest` |\n| `parse_response` | `Message::parseResponse` |\n| `parse_query` | `Query::parse` |\n| `build_query` | `Query::build` |\n| `mimetype_from_filename` | `MimeType::fromFilename` |\n| `mimetype_from_extension` | `MimeType::fromExtension` |\n| `_parse_message` | `Message::parseMessage` |\n| `_parse_request_uri` | `Message::parseRequestUri` |\n| `get_message_body_summary` | `Message::bodySummary` |\n| `_caseless_remove` | `Utils::caselessRemove` |\n\n\n# Additional URI Methods\n\nAside from the standard `Psr\\Http\\Message\\UriInterface` implementation in form of the `GuzzleHttp\\Psr7\\Uri` class,\nthis library also provides additional functionality when working with URIs as static methods.\n\n## URI Types\n\nAn instance of `Psr\\Http\\Message\\UriInterface` can either be an absolute URI or a relative reference.\nAn absolute URI has a scheme. A relative reference is used to express a URI relative to another URI,\nthe base URI. Relative references can be divided into several forms according to\n[RFC 3986 Section 4.2](https://datatracker.ietf.org/doc/html/rfc3986#section-4.2):\n\n- network-path references, e.g. `//example.com/path`\n- absolute-path references, e.g. `/path`\n- relative-path references, e.g. `subpath`\n\nThe following methods can be used to identify the type of the URI.\n\n### `GuzzleHttp\\Psr7\\Uri::isAbsolute`\n\n`public static function isAbsolute(UriInterface $uri): bool`\n\nWhether the URI is absolute, i.e. it has a scheme.\n\n### `GuzzleHttp\\Psr7\\Uri::isNetworkPathReference`\n\n`public static function isNetworkPathReference(UriInterface $uri): bool`\n\nWhether the URI is a network-path reference. A relative reference that begins with two slash characters is\ntermed an network-path reference.\n\n### `GuzzleHttp\\Psr7\\Uri::isAbsolutePathReference`\n\n`public static function isAbsolutePathReference(UriInterface $uri): bool`\n\nWhether the URI is a absolute-path reference. A relative reference that begins with a single slash character is\ntermed an absolute-path reference.\n\n### `GuzzleHttp\\Psr7\\Uri::isRelativePathReference`\n\n`public static function isRelativePathReference(UriInterface $uri): bool`\n\nWhether the URI is a relative-path reference. A relative reference that does not begin with a slash character is\ntermed a relative-path reference.\n\n### `GuzzleHttp\\Psr7\\Uri::isSameDocumentReference`\n\n`public static function isSameDocumentReference(UriInterface $uri, ?UriInterface $base = null): bool`\n\nWhether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its\nfragment component, identical to the base URI. When no base URI is given, only an empty URI reference\n(apart from its fragment) is considered a same-document reference.\n\n## URI Components\n\nAdditional methods to work with URI components.\n\n### `GuzzleHttp\\Psr7\\Uri::isDefaultPort`\n\n`public static function isDefaultPort(UriInterface $uri): bool`\n\nWhether the URI has the default port of the current scheme. `Psr\\Http\\Message\\UriInterface::getPort` may return null\nor the standard port. This method can be used independently of the implementation.\n\n### `GuzzleHttp\\Psr7\\Uri::composeComponents`\n\n`public static function composeComponents($scheme, $authority, $path, $query, $fragment): string`\n\nComposes a URI reference string from its various components according to\n[RFC 3986 Section 5.3](https://datatracker.ietf.org/doc/html/rfc3986#section-5.3). Usually this method does not need\nto be called manually but instead is used indirectly via `Psr\\Http\\Message\\UriInterface::__toString`.\n\n### `GuzzleHttp\\Psr7\\Uri::fromParts`\n\n`public static function fromParts(array $parts): UriInterface`\n\nCreates a URI from a hash of [`parse_url`](https://www.php.net/manual/en/function.parse-url.php) components.\n\n\n### `GuzzleHttp\\Psr7\\Uri::withQueryValue`\n\n`public static function withQueryValue(UriInterface $uri, $key, $value): UriInterface`\n\nCreates a new URI with a specific query string value. Any existing query string values that exactly match the\nprovided key are removed and replaced with the given key value pair. A value of null will set the query string\nkey without a value, e.g. \"key\" instead of \"key=value\".\n\n### `GuzzleHttp\\Psr7\\Uri::withQueryValues`\n\n`public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface`\n\nCreates a new URI with multiple query string values. It has the same behavior as `withQueryValue()` but for an\nassociative array of key => value.\n\n### `GuzzleHttp\\Psr7\\Uri::withoutQueryValue`\n\n`public static function withoutQueryValue(UriInterface $uri, $key): UriInterface`\n\nCreates a new URI with a specific query string value removed. Any existing query string values that exactly match the\nprovided key are removed.\n\n## Cross-Origin Detection\n\n`GuzzleHttp\\Psr7\\UriComparator` provides methods to determine if a modified URL should be considered cross-origin.\n\n### `GuzzleHttp\\Psr7\\UriComparator::isCrossOrigin`\n\n`public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool`\n\nDetermines if a modified URL should be considered cross-origin with respect to an original URL.\n\n## Reference Resolution\n\n`GuzzleHttp\\Psr7\\UriResolver` provides methods to resolve a URI reference in the context of a base URI according\nto [RFC 3986 Section 5](https://datatracker.ietf.org/doc/html/rfc3986#section-5). This is for example also what web\nbrowsers do when resolving a link in a website based on the current request URI.\n\n### `GuzzleHttp\\Psr7\\UriResolver::resolve`\n\n`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface`\n\nConverts the relative URI into a new URI that is resolved against the base URI.\n\n### `GuzzleHttp\\Psr7\\UriResolver::removeDotSegments`\n\n`public static function removeDotSegments(string $path): string`\n\nRemoves dot segments from a path and returns the new path according to\n[RFC 3986 Section 5.2.4](https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4).\n\n### `GuzzleHttp\\Psr7\\UriResolver::relativize`\n\n`public static function relativize(UriInterface $base, UriInterface $target): UriInterface`\n\nReturns the target URI as a relative reference from the base URI. This method is the counterpart to resolve():\n\n```php\n(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))\n```\n\nOne use-case is to use the current request URI as base URI and then generate relative links in your documents\nto reduce the document size or offer self-contained downloadable document archives.\n\n```php\n$base = new Uri('http://example.com/a/b/');\necho UriResolver::relativize($base, new Uri('http://example.com/a/b/c'));  // prints 'c'.\necho UriResolver::relativize($base, new Uri('http://example.com/a/x/y'));  // prints '../x/y'.\necho UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.\necho UriResolver::relativize($base, new Uri('http://example.org/a/b/'));   // prints '//example.org/a/b/'.\n```\n\n## Normalization and Comparison\n\n`GuzzleHttp\\Psr7\\UriNormalizer` provides methods to normalize and compare URIs according to\n[RFC 3986 Section 6](https://datatracker.ietf.org/doc/html/rfc3986#section-6).\n\n### `GuzzleHttp\\Psr7\\UriNormalizer::normalize`\n\n`public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS): UriInterface`\n\nReturns a normalized URI. The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.\nThis methods adds additional normalizations that can be configured with the `$flags` parameter which is a bitmask\nof normalizations to apply. The following normalizations are available:\n\n- `UriNormalizer::PRESERVING_NORMALIZATIONS`\n\n    Default normalizations which only include the ones that preserve semantics.\n\n- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING`\n\n    All letters within a percent-encoding triplet (e.g., \"%3A\") are case-insensitive, and should be capitalized.\n\n    Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b`\n\n- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS`\n\n    Decodes percent-encoded octets of unreserved characters. For consistency, percent-encoded octets in the ranges of\n    ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should\n    not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved\n    characters by URI normalizers.\n\n    Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/`\n\n- `UriNormalizer::CONVERT_EMPTY_PATH`\n\n    Converts the empty path to \"/\" for http and https URIs.\n\n    Example: `http://example.org` → `http://example.org/`\n\n- `UriNormalizer::REMOVE_DEFAULT_HOST`\n\n    Removes the default host of the given URI scheme from the URI. Only the \"file\" scheme defines the default host\n    \"localhost\". All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` are equivalent according to\n    RFC 3986.\n\n    Example: `file://localhost/myfile` → `file:///myfile`\n\n- `UriNormalizer::REMOVE_DEFAULT_PORT`\n\n    Removes the default port of the given URI scheme from the URI.\n\n    Example: `http://example.org:80/` → `http://example.org/`\n\n- `UriNormalizer::REMOVE_DOT_SEGMENTS`\n\n    Removes unnecessary dot-segments. Dot-segments in relative-path references are not removed as it would\n    change the semantics of the URI reference.\n\n    Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html`\n\n- `UriNormalizer::REMOVE_DUPLICATE_SLASHES`\n\n    Paths which include two or more adjacent slashes are converted to one. Webservers usually ignore duplicate slashes\n    and treat those URIs equivalent. But in theory those URIs do not need to be equivalent. So this normalization\n    may change the semantics. Encoded slashes (%2F) are not removed.\n\n    Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html`\n\n- `UriNormalizer::SORT_QUERY_PARAMETERS`\n\n    Sort query parameters with their values in alphabetical order. However, the order of parameters in a URI may be\n    significant (this is not defined by the standard). So this normalization is not safe and may change the semantics\n    of the URI.\n\n    Example: `?lang=en&article=fred` → `?article=fred&lang=en`\n\n### `GuzzleHttp\\Psr7\\UriNormalizer::isEquivalent`\n\n`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS): bool`\n\nWhether two URIs can be considered equivalent. Both URIs are normalized automatically before comparison with the given\n`$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent.\nThis of course assumes they will be resolved against the same base URI. If this is not the case, determination of\nequivalence or difference of relative references does not mean anything.\n\n\n## Security\n\nIf you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information.\n\n\n## License\n\nGuzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.\n\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-psr7?utm_source=packagist-guzzlehttp-psr7&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/composer.json",
    "content": "{\n    \"name\": \"guzzlehttp/psr7\",\n    \"description\": \"PSR-7 message implementation that also provides common utility methods\",\n    \"keywords\": [\n        \"request\",\n        \"response\",\n        \"message\",\n        \"stream\",\n        \"http\",\n        \"uri\",\n        \"url\",\n        \"psr-7\"\n    ],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"hello@gjcampbell.co.uk\",\n            \"homepage\": \"https://github.com/GrahamCampbell\"\n        },\n        {\n            \"name\": \"Michael Dowling\",\n            \"email\": \"mtdowling@gmail.com\",\n            \"homepage\": \"https://github.com/mtdowling\"\n        },\n        {\n            \"name\": \"George Mponos\",\n            \"email\": \"gmponos@gmail.com\",\n            \"homepage\": \"https://github.com/gmponos\"\n        },\n        {\n            \"name\": \"Tobias Nyholm\",\n            \"email\": \"tobias.nyholm@gmail.com\",\n            \"homepage\": \"https://github.com/Nyholm\"\n        },\n        {\n            \"name\": \"Márk Sági-Kazár\",\n            \"email\": \"mark.sagikazar@gmail.com\",\n            \"homepage\": \"https://github.com/sagikazarmark\"\n        },\n        {\n            \"name\": \"Tobias Schultze\",\n            \"email\": \"webmaster@tubo-world.de\",\n            \"homepage\": \"https://github.com/Tobion\"\n        },\n        {\n            \"name\": \"Márk Sági-Kazár\",\n            \"email\": \"mark.sagikazar@gmail.com\",\n            \"homepage\": \"https://sagikazarmark.hu\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.2.5 || ^8.0\",\n        \"psr/http-factory\": \"^1.0\",\n        \"psr/http-message\": \"^1.1 || ^2.0\",\n        \"ralouphie/getallheaders\": \"^3.0\"\n    },\n    \"provide\": {\n        \"psr/http-factory-implementation\": \"1.0\",\n        \"psr/http-message-implementation\": \"1.0\"\n    },\n    \"require-dev\": {\n        \"bamarni/composer-bin-plugin\": \"^1.8.2\",\n        \"http-interop/http-factory-tests\": \"0.9.0\",\n        \"phpunit/phpunit\": \"^8.5.44 || ^9.6.25\"\n    },\n    \"suggest\": {\n        \"laminas/laminas-httphandlerrunner\": \"Emit PSR-7 responses\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Psr7\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Tests\\\\Psr7\\\\\": \"tests/\"\n        }\n    },\n    \"extra\": {\n        \"bamarni-bin\": {\n            \"bin-links\": true,\n            \"forward-command\": false\n        }\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"bamarni/composer-bin-plugin\": true\n        },\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/AppendStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Reads from multiple streams, one after the other.\n *\n * This is a read-only stream decorator.\n */\nfinal class AppendStream implements StreamInterface\n{\n    /** @var StreamInterface[] Streams being decorated */\n    private $streams = [];\n\n    /** @var bool */\n    private $seekable = true;\n\n    /** @var int */\n    private $current = 0;\n\n    /** @var int */\n    private $pos = 0;\n\n    /**\n     * @param StreamInterface[] $streams Streams to decorate. Each stream must\n     *                                   be readable.\n     */\n    public function __construct(array $streams = [])\n    {\n        foreach ($streams as $stream) {\n            $this->addStream($stream);\n        }\n    }\n\n    public function __toString(): string\n    {\n        try {\n            $this->rewind();\n\n            return $this->getContents();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n\n            return '';\n        }\n    }\n\n    /**\n     * Add a stream to the AppendStream\n     *\n     * @param StreamInterface $stream Stream to append. Must be readable.\n     *\n     * @throws \\InvalidArgumentException if the stream is not readable\n     */\n    public function addStream(StreamInterface $stream): void\n    {\n        if (!$stream->isReadable()) {\n            throw new \\InvalidArgumentException('Each stream must be readable');\n        }\n\n        // The stream is only seekable if all streams are seekable\n        if (!$stream->isSeekable()) {\n            $this->seekable = false;\n        }\n\n        $this->streams[] = $stream;\n    }\n\n    public function getContents(): string\n    {\n        return Utils::copyToString($this);\n    }\n\n    /**\n     * Closes each attached stream.\n     */\n    public function close(): void\n    {\n        $this->pos = $this->current = 0;\n        $this->seekable = true;\n\n        foreach ($this->streams as $stream) {\n            $stream->close();\n        }\n\n        $this->streams = [];\n    }\n\n    /**\n     * Detaches each attached stream.\n     *\n     * Returns null as it's not clear which underlying stream resource to return.\n     */\n    public function detach()\n    {\n        $this->pos = $this->current = 0;\n        $this->seekable = true;\n\n        foreach ($this->streams as $stream) {\n            $stream->detach();\n        }\n\n        $this->streams = [];\n\n        return null;\n    }\n\n    public function tell(): int\n    {\n        return $this->pos;\n    }\n\n    /**\n     * Tries to calculate the size by adding the size of each stream.\n     *\n     * If any of the streams do not return a valid number, then the size of the\n     * append stream cannot be determined and null is returned.\n     */\n    public function getSize(): ?int\n    {\n        $size = 0;\n\n        foreach ($this->streams as $stream) {\n            $s = $stream->getSize();\n            if ($s === null) {\n                return null;\n            }\n            $size += $s;\n        }\n\n        return $size;\n    }\n\n    public function eof(): bool\n    {\n        return !$this->streams\n            || ($this->current >= count($this->streams) - 1\n             && $this->streams[$this->current]->eof());\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    /**\n     * Attempts to seek to the given position. Only supports SEEK_SET.\n     */\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        if (!$this->seekable) {\n            throw new \\RuntimeException('This AppendStream is not seekable');\n        } elseif ($whence !== SEEK_SET) {\n            throw new \\RuntimeException('The AppendStream can only seek with SEEK_SET');\n        }\n\n        $this->pos = $this->current = 0;\n\n        // Rewind each stream\n        foreach ($this->streams as $i => $stream) {\n            try {\n                $stream->rewind();\n            } catch (\\Exception $e) {\n                throw new \\RuntimeException('Unable to seek stream '\n                    .$i.' of the AppendStream', 0, $e);\n            }\n        }\n\n        // Seek to the actual position by reading from each stream\n        while ($this->pos < $offset && !$this->eof()) {\n            $result = $this->read(min(8096, $offset - $this->pos));\n            if ($result === '') {\n                break;\n            }\n        }\n    }\n\n    /**\n     * Reads from all of the appended streams until the length is met or EOF.\n     */\n    public function read($length): string\n    {\n        $buffer = '';\n        $total = count($this->streams) - 1;\n        $remaining = $length;\n        $progressToNext = false;\n\n        while ($remaining > 0) {\n            // Progress to the next stream if needed.\n            if ($progressToNext || $this->streams[$this->current]->eof()) {\n                $progressToNext = false;\n                if ($this->current === $total) {\n                    break;\n                }\n                ++$this->current;\n            }\n\n            $result = $this->streams[$this->current]->read($remaining);\n\n            if ($result === '') {\n                $progressToNext = true;\n                continue;\n            }\n\n            $buffer .= $result;\n            $remaining = $length - strlen($buffer);\n        }\n\n        $this->pos += strlen($buffer);\n\n        return $buffer;\n    }\n\n    public function isReadable(): bool\n    {\n        return true;\n    }\n\n    public function isWritable(): bool\n    {\n        return false;\n    }\n\n    public function isSeekable(): bool\n    {\n        return $this->seekable;\n    }\n\n    public function write($string): int\n    {\n        throw new \\RuntimeException('Cannot write to an AppendStream');\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        return $key ? null : [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/BufferStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Provides a buffer stream that can be written to to fill a buffer, and read\n * from to remove bytes from the buffer.\n *\n * This stream returns a \"hwm\" metadata value that tells upstream consumers\n * what the configured high water mark of the stream is, or the maximum\n * preferred size of the buffer.\n */\nfinal class BufferStream implements StreamInterface\n{\n    /** @var int */\n    private $hwm;\n\n    /** @var string */\n    private $buffer = '';\n\n    /**\n     * @param int $hwm High water mark, representing the preferred maximum\n     *                 buffer size. If the size of the buffer exceeds the high\n     *                 water mark, then calls to write will continue to succeed\n     *                 but will return 0 to inform writers to slow down\n     *                 until the buffer has been drained by reading from it.\n     */\n    public function __construct(int $hwm = 16384)\n    {\n        $this->hwm = $hwm;\n    }\n\n    public function __toString(): string\n    {\n        return $this->getContents();\n    }\n\n    public function getContents(): string\n    {\n        $buffer = $this->buffer;\n        $this->buffer = '';\n\n        return $buffer;\n    }\n\n    public function close(): void\n    {\n        $this->buffer = '';\n    }\n\n    public function detach()\n    {\n        $this->close();\n\n        return null;\n    }\n\n    public function getSize(): ?int\n    {\n        return strlen($this->buffer);\n    }\n\n    public function isReadable(): bool\n    {\n        return true;\n    }\n\n    public function isWritable(): bool\n    {\n        return true;\n    }\n\n    public function isSeekable(): bool\n    {\n        return false;\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        throw new \\RuntimeException('Cannot seek a BufferStream');\n    }\n\n    public function eof(): bool\n    {\n        return strlen($this->buffer) === 0;\n    }\n\n    public function tell(): int\n    {\n        throw new \\RuntimeException('Cannot determine the position of a BufferStream');\n    }\n\n    /**\n     * Reads data from the buffer.\n     */\n    public function read($length): string\n    {\n        $currentLength = strlen($this->buffer);\n\n        if ($length >= $currentLength) {\n            // No need to slice the buffer because we don't have enough data.\n            $result = $this->buffer;\n            $this->buffer = '';\n        } else {\n            // Slice up the result to provide a subset of the buffer.\n            $result = substr($this->buffer, 0, $length);\n            $this->buffer = substr($this->buffer, $length);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Writes data to the buffer.\n     */\n    public function write($string): int\n    {\n        $this->buffer .= $string;\n\n        if (strlen($this->buffer) >= $this->hwm) {\n            return 0;\n        }\n\n        return strlen($string);\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        if ($key === 'hwm') {\n            return $this->hwm;\n        }\n\n        return $key ? null : [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/CachingStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator that can cache previously read bytes from a sequentially\n * read stream.\n */\nfinal class CachingStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var StreamInterface Stream being wrapped */\n    private $remoteStream;\n\n    /** @var int Number of bytes to skip reading due to a write on the buffer */\n    private $skipReadBytes = 0;\n\n    /**\n     * @var StreamInterface\n     */\n    private $stream;\n\n    /**\n     * We will treat the buffer object as the body of the stream\n     *\n     * @param StreamInterface $stream Stream to cache. The cursor is assumed to be at the beginning of the stream.\n     * @param StreamInterface $target Optionally specify where data is cached\n     */\n    public function __construct(\n        StreamInterface $stream,\n        ?StreamInterface $target = null\n    ) {\n        $this->remoteStream = $stream;\n        $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+'));\n    }\n\n    public function getSize(): ?int\n    {\n        $remoteSize = $this->remoteStream->getSize();\n\n        if (null === $remoteSize) {\n            return null;\n        }\n\n        return max($this->stream->getSize(), $remoteSize);\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        if ($whence === SEEK_SET) {\n            $byte = $offset;\n        } elseif ($whence === SEEK_CUR) {\n            $byte = $offset + $this->tell();\n        } elseif ($whence === SEEK_END) {\n            $size = $this->remoteStream->getSize();\n            if ($size === null) {\n                $size = $this->cacheEntireStream();\n            }\n            $byte = $size + $offset;\n        } else {\n            throw new \\InvalidArgumentException('Invalid whence');\n        }\n\n        $diff = $byte - $this->stream->getSize();\n\n        if ($diff > 0) {\n            // Read the remoteStream until we have read in at least the amount\n            // of bytes requested, or we reach the end of the file.\n            while ($diff > 0 && !$this->remoteStream->eof()) {\n                $this->read($diff);\n                $diff = $byte - $this->stream->getSize();\n            }\n        } else {\n            // We can just do a normal seek since we've already seen this byte.\n            $this->stream->seek($byte);\n        }\n    }\n\n    public function read($length): string\n    {\n        // Perform a regular read on any previously read data from the buffer\n        $data = $this->stream->read($length);\n        $remaining = $length - strlen($data);\n\n        // More data was requested so read from the remote stream\n        if ($remaining) {\n            // If data was written to the buffer in a position that would have\n            // been filled from the remote stream, then we must skip bytes on\n            // the remote stream to emulate overwriting bytes from that\n            // position. This mimics the behavior of other PHP stream wrappers.\n            $remoteData = $this->remoteStream->read(\n                $remaining + $this->skipReadBytes\n            );\n\n            if ($this->skipReadBytes) {\n                $len = strlen($remoteData);\n                $remoteData = substr($remoteData, $this->skipReadBytes);\n                $this->skipReadBytes = max(0, $this->skipReadBytes - $len);\n            }\n\n            $data .= $remoteData;\n            $this->stream->write($remoteData);\n        }\n\n        return $data;\n    }\n\n    public function write($string): int\n    {\n        // When appending to the end of the currently read stream, you'll want\n        // to skip bytes from being read from the remote stream to emulate\n        // other stream wrappers. Basically replacing bytes of data of a fixed\n        // length.\n        $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell();\n        if ($overflow > 0) {\n            $this->skipReadBytes += $overflow;\n        }\n\n        return $this->stream->write($string);\n    }\n\n    public function eof(): bool\n    {\n        return $this->stream->eof() && $this->remoteStream->eof();\n    }\n\n    /**\n     * Close both the remote stream and buffer stream\n     */\n    public function close(): void\n    {\n        $this->remoteStream->close();\n        $this->stream->close();\n    }\n\n    private function cacheEntireStream(): int\n    {\n        $target = new FnStream(['write' => 'strlen']);\n        Utils::copyToStream($this, $target);\n\n        return $this->tell();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/DroppingStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator that begins dropping data once the size of the underlying\n * stream becomes too full.\n */\nfinal class DroppingStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var int */\n    private $maxLength;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /**\n     * @param StreamInterface $stream    Underlying stream to decorate.\n     * @param int             $maxLength Maximum size before dropping data.\n     */\n    public function __construct(StreamInterface $stream, int $maxLength)\n    {\n        $this->stream = $stream;\n        $this->maxLength = $maxLength;\n    }\n\n    public function write($string): int\n    {\n        $diff = $this->maxLength - $this->stream->getSize();\n\n        // Begin returning 0 when the underlying stream is too large.\n        if ($diff <= 0) {\n            return 0;\n        }\n\n        // Write the stream or a subset of the stream if needed.\n        if (strlen($string) < $diff) {\n            return $this->stream->write($string);\n        }\n\n        return $this->stream->write(substr($string, 0, $diff));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7\\Exception;\n\nuse InvalidArgumentException;\n\n/**\n * Exception thrown if a URI cannot be parsed because it's malformed.\n */\nclass MalformedUriException extends InvalidArgumentException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/FnStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Compose stream implementations based on a hash of functions.\n *\n * Allows for easy testing and extension of a provided stream without needing\n * to create a concrete class for a simple extension point.\n */\n#[\\AllowDynamicProperties]\nfinal class FnStream implements StreamInterface\n{\n    private const SLOTS = [\n        '__toString', 'close', 'detach', 'rewind',\n        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',\n        'isReadable', 'read', 'getContents', 'getMetadata',\n    ];\n\n    /** @var array<string, callable> */\n    private $methods;\n\n    /**\n     * @param array<string, callable> $methods Hash of method name to a callable.\n     */\n    public function __construct(array $methods)\n    {\n        $this->methods = $methods;\n\n        // Create the functions on the class\n        foreach ($methods as $name => $fn) {\n            $this->{'_fn_'.$name} = $fn;\n        }\n    }\n\n    /**\n     * Lazily determine which methods are not implemented.\n     *\n     * @throws \\BadMethodCallException\n     */\n    public function __get(string $name): void\n    {\n        throw new \\BadMethodCallException(str_replace('_fn_', '', $name)\n            .'() is not implemented in the FnStream');\n    }\n\n    /**\n     * The close method is called on the underlying stream only if possible.\n     */\n    public function __destruct()\n    {\n        if (isset($this->_fn_close)) {\n            ($this->_fn_close)();\n        }\n    }\n\n    /**\n     * An unserialize would allow the __destruct to run when the unserialized value goes out of scope.\n     *\n     * @throws \\LogicException\n     */\n    public function __wakeup(): void\n    {\n        throw new \\LogicException('FnStream should never be unserialized');\n    }\n\n    /**\n     * Adds custom functionality to an underlying stream by intercepting\n     * specific method calls.\n     *\n     * @param StreamInterface         $stream  Stream to decorate\n     * @param array<string, callable> $methods Hash of method name to a closure\n     *\n     * @return FnStream\n     */\n    public static function decorate(StreamInterface $stream, array $methods)\n    {\n        // If any of the required methods were not provided, then simply\n        // proxy to the decorated stream.\n        foreach (array_diff(self::SLOTS, array_keys($methods)) as $diff) {\n            /** @var callable $callable */\n            $callable = [$stream, $diff];\n            $methods[$diff] = $callable;\n        }\n\n        return new self($methods);\n    }\n\n    public function __toString(): string\n    {\n        try {\n            /** @var string */\n            return ($this->_fn___toString)();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n\n            return '';\n        }\n    }\n\n    public function close(): void\n    {\n        ($this->_fn_close)();\n    }\n\n    public function detach()\n    {\n        return ($this->_fn_detach)();\n    }\n\n    public function getSize(): ?int\n    {\n        return ($this->_fn_getSize)();\n    }\n\n    public function tell(): int\n    {\n        return ($this->_fn_tell)();\n    }\n\n    public function eof(): bool\n    {\n        return ($this->_fn_eof)();\n    }\n\n    public function isSeekable(): bool\n    {\n        return ($this->_fn_isSeekable)();\n    }\n\n    public function rewind(): void\n    {\n        ($this->_fn_rewind)();\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        ($this->_fn_seek)($offset, $whence);\n    }\n\n    public function isWritable(): bool\n    {\n        return ($this->_fn_isWritable)();\n    }\n\n    public function write($string): int\n    {\n        return ($this->_fn_write)($string);\n    }\n\n    public function isReadable(): bool\n    {\n        return ($this->_fn_isReadable)();\n    }\n\n    public function read($length): string\n    {\n        return ($this->_fn_read)($length);\n    }\n\n    public function getContents(): string\n    {\n        return ($this->_fn_getContents)();\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        return ($this->_fn_getMetadata)($key);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Header.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nfinal class Header\n{\n    /**\n     * Parse an array of header values containing \";\" separated data into an\n     * array of associative arrays representing the header key value pair data\n     * of the header. When a parameter does not contain a value, but just\n     * contains a key, this function will inject a key with a '' string value.\n     *\n     * @param string|array $header Header to parse into components.\n     */\n    public static function parse($header): array\n    {\n        static $trimmed = \"\\\"'  \\n\\t\\r\";\n        $params = $matches = [];\n\n        foreach ((array) $header as $value) {\n            foreach (self::splitList($value) as $val) {\n                $part = [];\n                foreach (preg_split('/;(?=([^\"]*\"[^\"]*\")*[^\"]*$)/', $val) ?: [] as $kvp) {\n                    if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {\n                        $m = $matches[0];\n                        if (isset($m[1])) {\n                            $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);\n                        } else {\n                            $part[] = trim($m[0], $trimmed);\n                        }\n                    }\n                }\n                if ($part) {\n                    $params[] = $part;\n                }\n            }\n        }\n\n        return $params;\n    }\n\n    /**\n     * Converts an array of header values that may contain comma separated\n     * headers into an array of headers with no comma separated values.\n     *\n     * @param string|array $header Header to normalize.\n     *\n     * @deprecated Use self::splitList() instead.\n     */\n    public static function normalize($header): array\n    {\n        $result = [];\n        foreach ((array) $header as $value) {\n            foreach (self::splitList($value) as $parsed) {\n                $result[] = $parsed;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Splits a HTTP header defined to contain a comma-separated list into\n     * each individual value. Empty values will be removed.\n     *\n     * Example headers include 'accept', 'cache-control' and 'if-none-match'.\n     *\n     * This method must not be used to parse headers that are not defined as\n     * a list, such as 'user-agent' or 'set-cookie'.\n     *\n     * @param string|string[] $values Header value as returned by MessageInterface::getHeader()\n     *\n     * @return string[]\n     */\n    public static function splitList($values): array\n    {\n        if (!\\is_array($values)) {\n            $values = [$values];\n        }\n\n        $result = [];\n        foreach ($values as $value) {\n            if (!\\is_string($value)) {\n                throw new \\TypeError('$header must either be a string or an array containing strings.');\n            }\n\n            $v = '';\n            $isQuoted = false;\n            $isEscaped = false;\n            for ($i = 0, $max = \\strlen($value); $i < $max; ++$i) {\n                if ($isEscaped) {\n                    $v .= $value[$i];\n                    $isEscaped = false;\n\n                    continue;\n                }\n\n                if (!$isQuoted && $value[$i] === ',') {\n                    $v = \\trim($v);\n                    if ($v !== '') {\n                        $result[] = $v;\n                    }\n\n                    $v = '';\n                    continue;\n                }\n\n                if ($isQuoted && $value[$i] === '\\\\') {\n                    $isEscaped = true;\n                    $v .= $value[$i];\n\n                    continue;\n                }\n                if ($value[$i] === '\"') {\n                    $isQuoted = !$isQuoted;\n                    $v .= $value[$i];\n\n                    continue;\n                }\n\n                $v .= $value[$i];\n            }\n\n            $v = \\trim($v);\n            if ($v !== '') {\n                $result[] = $v;\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/HttpFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseFactoryInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\ServerRequestFactoryInterface;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\StreamFactoryInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileFactoryInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Psr\\Http\\Message\\UriFactoryInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Implements all of the PSR-17 interfaces.\n *\n * Note: in consuming code it is recommended to require the implemented interfaces\n * and inject the instance of this class multiple times.\n */\nfinal class HttpFactory implements RequestFactoryInterface, ResponseFactoryInterface, ServerRequestFactoryInterface, StreamFactoryInterface, UploadedFileFactoryInterface, UriFactoryInterface\n{\n    public function createUploadedFile(\n        StreamInterface $stream,\n        ?int $size = null,\n        int $error = \\UPLOAD_ERR_OK,\n        ?string $clientFilename = null,\n        ?string $clientMediaType = null\n    ): UploadedFileInterface {\n        if ($size === null) {\n            $size = $stream->getSize();\n        }\n\n        return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType);\n    }\n\n    public function createStream(string $content = ''): StreamInterface\n    {\n        return Utils::streamFor($content);\n    }\n\n    public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface\n    {\n        try {\n            $resource = Utils::tryFopen($file, $mode);\n        } catch (\\RuntimeException $e) {\n            if ('' === $mode || false === \\in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) {\n                throw new \\InvalidArgumentException(sprintf('Invalid file opening mode \"%s\"', $mode), 0, $e);\n            }\n\n            throw $e;\n        }\n\n        return Utils::streamFor($resource);\n    }\n\n    public function createStreamFromResource($resource): StreamInterface\n    {\n        return Utils::streamFor($resource);\n    }\n\n    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface\n    {\n        if (empty($method)) {\n            if (!empty($serverParams['REQUEST_METHOD'])) {\n                $method = $serverParams['REQUEST_METHOD'];\n            } else {\n                throw new \\InvalidArgumentException('Cannot determine HTTP method');\n            }\n        }\n\n        return new ServerRequest($method, $uri, [], null, '1.1', $serverParams);\n    }\n\n    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface\n    {\n        return new Response($code, [], null, '1.1', $reasonPhrase);\n    }\n\n    public function createRequest(string $method, $uri): RequestInterface\n    {\n        return new Request($method, $uri);\n    }\n\n    public function createUri(string $uri = ''): UriInterface\n    {\n        return new Uri($uri);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/InflateStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.\n *\n * This stream decorator converts the provided stream to a PHP stream resource,\n * then appends the zlib.inflate filter. The stream is then converted back\n * to a Guzzle stream resource to be used as a Guzzle stream.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc1950\n * @see https://datatracker.ietf.org/doc/html/rfc1952\n * @see https://www.php.net/manual/en/filters.compression.php\n */\nfinal class InflateStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    public function __construct(StreamInterface $stream)\n    {\n        $resource = StreamWrapper::getResource($stream);\n        // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data\n        // See https://www.zlib.net/manual.html#Advanced definition of inflateInit2\n        // \"Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection\"\n        // Default window size is 15.\n        stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]);\n        $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/LazyOpenStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Lazily reads or writes to a file that is opened only after an IO operation\n * take place on the stream.\n */\nfinal class LazyOpenStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var string */\n    private $filename;\n\n    /** @var string */\n    private $mode;\n\n    /**\n     * @var StreamInterface\n     */\n    private $stream;\n\n    /**\n     * @param string $filename File to lazily open\n     * @param string $mode     fopen mode to use when opening the stream\n     */\n    public function __construct(string $filename, string $mode)\n    {\n        $this->filename = $filename;\n        $this->mode = $mode;\n\n        // unsetting the property forces the first access to go through\n        // __get().\n        unset($this->stream);\n    }\n\n    /**\n     * Creates the underlying stream lazily when required.\n     */\n    protected function createStream(): StreamInterface\n    {\n        return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/LimitStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Decorator used to return only a subset of a stream.\n */\nfinal class LimitStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var int Offset to start reading from */\n    private $offset;\n\n    /** @var int Limit the number of bytes that can be read */\n    private $limit;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /**\n     * @param StreamInterface $stream Stream to wrap\n     * @param int             $limit  Total number of bytes to allow to be read\n     *                                from the stream. Pass -1 for no limit.\n     * @param int             $offset Position to seek to before reading (only\n     *                                works on seekable streams).\n     */\n    public function __construct(\n        StreamInterface $stream,\n        int $limit = -1,\n        int $offset = 0\n    ) {\n        $this->stream = $stream;\n        $this->setLimit($limit);\n        $this->setOffset($offset);\n    }\n\n    public function eof(): bool\n    {\n        // Always return true if the underlying stream is EOF\n        if ($this->stream->eof()) {\n            return true;\n        }\n\n        // No limit and the underlying stream is not at EOF\n        if ($this->limit === -1) {\n            return false;\n        }\n\n        return $this->stream->tell() >= $this->offset + $this->limit;\n    }\n\n    /**\n     * Returns the size of the limited subset of data\n     */\n    public function getSize(): ?int\n    {\n        if (null === ($length = $this->stream->getSize())) {\n            return null;\n        } elseif ($this->limit === -1) {\n            return $length - $this->offset;\n        } else {\n            return min($this->limit, $length - $this->offset);\n        }\n    }\n\n    /**\n     * Allow for a bounded seek on the read limited stream\n     */\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        if ($whence !== SEEK_SET || $offset < 0) {\n            throw new \\RuntimeException(sprintf(\n                'Cannot seek to offset %s with whence %s',\n                $offset,\n                $whence\n            ));\n        }\n\n        $offset += $this->offset;\n\n        if ($this->limit !== -1) {\n            if ($offset > $this->offset + $this->limit) {\n                $offset = $this->offset + $this->limit;\n            }\n        }\n\n        $this->stream->seek($offset);\n    }\n\n    /**\n     * Give a relative tell()\n     */\n    public function tell(): int\n    {\n        return $this->stream->tell() - $this->offset;\n    }\n\n    /**\n     * Set the offset to start limiting from\n     *\n     * @param int $offset Offset to seek to and begin byte limiting from\n     *\n     * @throws \\RuntimeException if the stream cannot be seeked.\n     */\n    public function setOffset(int $offset): void\n    {\n        $current = $this->stream->tell();\n\n        if ($current !== $offset) {\n            // If the stream cannot seek to the offset position, then read to it\n            if ($this->stream->isSeekable()) {\n                $this->stream->seek($offset);\n            } elseif ($current > $offset) {\n                throw new \\RuntimeException(\"Could not seek to stream offset $offset\");\n            } else {\n                $this->stream->read($offset - $current);\n            }\n        }\n\n        $this->offset = $offset;\n    }\n\n    /**\n     * Set the limit of bytes that the decorator allows to be read from the\n     * stream.\n     *\n     * @param int $limit Number of bytes to allow to be read from the stream.\n     *                   Use -1 for no limit.\n     */\n    public function setLimit(int $limit): void\n    {\n        $this->limit = $limit;\n    }\n\n    public function read($length): string\n    {\n        if ($this->limit === -1) {\n            return $this->stream->read($length);\n        }\n\n        // Check if the current position is less than the total allowed\n        // bytes + original offset\n        $remaining = ($this->offset + $this->limit) - $this->stream->tell();\n        if ($remaining > 0) {\n            // Only return the amount of requested data, ensuring that the byte\n            // limit is not exceeded\n            return $this->stream->read(min($remaining, $length));\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Message.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\MessageInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\nfinal class Message\n{\n    /**\n     * Returns the string representation of an HTTP message.\n     *\n     * @param MessageInterface $message Message to convert to a string.\n     */\n    public static function toString(MessageInterface $message): string\n    {\n        if ($message instanceof RequestInterface) {\n            $msg = trim($message->getMethod().' '\n                    .$message->getRequestTarget())\n                .' HTTP/'.$message->getProtocolVersion();\n            if (!$message->hasHeader('host')) {\n                $msg .= \"\\r\\nHost: \".$message->getUri()->getHost();\n            }\n        } elseif ($message instanceof ResponseInterface) {\n            $msg = 'HTTP/'.$message->getProtocolVersion().' '\n                .$message->getStatusCode().' '\n                .$message->getReasonPhrase();\n        } else {\n            throw new \\InvalidArgumentException('Unknown message type');\n        }\n\n        foreach ($message->getHeaders() as $name => $values) {\n            if (is_string($name) && strtolower($name) === 'set-cookie') {\n                foreach ($values as $value) {\n                    $msg .= \"\\r\\n{$name}: \".$value;\n                }\n            } else {\n                $msg .= \"\\r\\n{$name}: \".implode(', ', $values);\n            }\n        }\n\n        return \"{$msg}\\r\\n\\r\\n\".$message->getBody();\n    }\n\n    /**\n     * Get a short summary of the message body.\n     *\n     * Will return `null` if the response is not printable.\n     *\n     * @param MessageInterface $message    The message to get the body summary\n     * @param int              $truncateAt The maximum allowed size of the summary\n     */\n    public static function bodySummary(MessageInterface $message, int $truncateAt = 120): ?string\n    {\n        $body = $message->getBody();\n\n        if (!$body->isSeekable() || !$body->isReadable()) {\n            return null;\n        }\n\n        $size = $body->getSize();\n\n        if ($size === 0) {\n            return null;\n        }\n\n        $body->rewind();\n        $summary = $body->read($truncateAt);\n        $body->rewind();\n\n        if ($size > $truncateAt) {\n            $summary .= ' (truncated...)';\n        }\n\n        // Matches any printable character, including unicode characters:\n        // letters, marks, numbers, punctuation, spacing, and separators.\n        if (preg_match('/[^\\pL\\pM\\pN\\pP\\pS\\pZ\\n\\r\\t]/u', $summary) !== 0) {\n            return null;\n        }\n\n        return $summary;\n    }\n\n    /**\n     * Attempts to rewind a message body and throws an exception on failure.\n     *\n     * The body of the message will only be rewound if a call to `tell()`\n     * returns a value other than `0`.\n     *\n     * @param MessageInterface $message Message to rewind\n     *\n     * @throws \\RuntimeException\n     */\n    public static function rewindBody(MessageInterface $message): void\n    {\n        $body = $message->getBody();\n\n        if ($body->tell()) {\n            $body->rewind();\n        }\n    }\n\n    /**\n     * Parses an HTTP message into an associative array.\n     *\n     * The array contains the \"start-line\" key containing the start line of\n     * the message, \"headers\" key containing an associative array of header\n     * array values, and a \"body\" key containing the body of the message.\n     *\n     * @param string $message HTTP request or response to parse.\n     */\n    public static function parseMessage(string $message): array\n    {\n        if (!$message) {\n            throw new \\InvalidArgumentException('Invalid message');\n        }\n\n        $message = ltrim($message, \"\\r\\n\");\n\n        $messageParts = preg_split(\"/\\r?\\n\\r?\\n/\", $message, 2);\n\n        if ($messageParts === false || count($messageParts) !== 2) {\n            throw new \\InvalidArgumentException('Invalid message: Missing header delimiter');\n        }\n\n        [$rawHeaders, $body] = $messageParts;\n        $rawHeaders .= \"\\r\\n\"; // Put back the delimiter we split previously\n        $headerParts = preg_split(\"/\\r?\\n/\", $rawHeaders, 2);\n\n        if ($headerParts === false || count($headerParts) !== 2) {\n            throw new \\InvalidArgumentException('Invalid message: Missing status line');\n        }\n\n        [$startLine, $rawHeaders] = $headerParts;\n\n        if (preg_match(\"/(?:^HTTP\\/|^[A-Z]+ \\S+ HTTP\\/)(\\d+(?:\\.\\d+)?)/i\", $startLine, $matches) && $matches[1] === '1.0') {\n            // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0\n            $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders);\n        }\n\n        /** @var array[] $headerLines */\n        $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER);\n\n        // If these aren't the same, then one line didn't match and there's an invalid header.\n        if ($count !== substr_count($rawHeaders, \"\\n\")) {\n            // Folding is deprecated, see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4\n            if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) {\n                throw new \\InvalidArgumentException('Invalid header syntax: Obsolete line folding');\n            }\n\n            throw new \\InvalidArgumentException('Invalid header syntax');\n        }\n\n        $headers = [];\n\n        foreach ($headerLines as $headerLine) {\n            $headers[$headerLine[1]][] = $headerLine[2];\n        }\n\n        return [\n            'start-line' => $startLine,\n            'headers' => $headers,\n            'body' => $body,\n        ];\n    }\n\n    /**\n     * Constructs a URI for an HTTP request message.\n     *\n     * @param string $path    Path from the start-line\n     * @param array  $headers Array of headers (each value an array).\n     */\n    public static function parseRequestUri(string $path, array $headers): string\n    {\n        $hostKey = array_filter(array_keys($headers), function ($k) {\n            // Numeric array keys are converted to int by PHP.\n            $k = (string) $k;\n\n            return strtolower($k) === 'host';\n        });\n\n        // If no host is found, then a full URI cannot be constructed.\n        if (!$hostKey) {\n            return $path;\n        }\n\n        $host = $headers[reset($hostKey)][0];\n        $scheme = substr($host, -4) === ':443' ? 'https' : 'http';\n\n        return $scheme.'://'.$host.'/'.ltrim($path, '/');\n    }\n\n    /**\n     * Parses a request message string into a request object.\n     *\n     * @param string $message Request message string.\n     */\n    public static function parseRequest(string $message): RequestInterface\n    {\n        $data = self::parseMessage($message);\n        $matches = [];\n        if (!preg_match('/^[\\S]+\\s+([a-zA-Z]+:\\/\\/|\\/).*/', $data['start-line'], $matches)) {\n            throw new \\InvalidArgumentException('Invalid request string');\n        }\n        $parts = explode(' ', $data['start-line'], 3);\n        $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1';\n\n        $request = new Request(\n            $parts[0],\n            $matches[1] === '/' ? self::parseRequestUri($parts[1], $data['headers']) : $parts[1],\n            $data['headers'],\n            $data['body'],\n            $version\n        );\n\n        return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]);\n    }\n\n    /**\n     * Parses a response message string into a response object.\n     *\n     * @param string $message Response message string.\n     */\n    public static function parseResponse(string $message): ResponseInterface\n    {\n        $data = self::parseMessage($message);\n        // According to https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2\n        // the space between status-code and reason-phrase is required. But\n        // browsers accept responses without space and reason as well.\n        if (!preg_match('/^HTTP\\/.* [0-9]{3}( .*|$)/', $data['start-line'])) {\n            throw new \\InvalidArgumentException('Invalid response string: '.$data['start-line']);\n        }\n        $parts = explode(' ', $data['start-line'], 3);\n\n        return new Response(\n            (int) $parts[1],\n            $data['headers'],\n            $data['body'],\n            explode('/', $parts[0])[1],\n            $parts[2] ?? null\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/MessageTrait.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\MessageInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Trait implementing functionality common to requests and responses.\n */\ntrait MessageTrait\n{\n    /** @var string[][] Map of all registered headers, as original name => array of values */\n    private $headers = [];\n\n    /** @var string[] Map of lowercase header name => original name at registration */\n    private $headerNames = [];\n\n    /** @var string */\n    private $protocol = '1.1';\n\n    /** @var StreamInterface|null */\n    private $stream;\n\n    public function getProtocolVersion(): string\n    {\n        return $this->protocol;\n    }\n\n    public function withProtocolVersion($version): MessageInterface\n    {\n        if ($this->protocol === $version) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->protocol = $version;\n\n        return $new;\n    }\n\n    public function getHeaders(): array\n    {\n        return $this->headers;\n    }\n\n    public function hasHeader($header): bool\n    {\n        return isset($this->headerNames[strtolower($header)]);\n    }\n\n    public function getHeader($header): array\n    {\n        $header = strtolower($header);\n\n        if (!isset($this->headerNames[$header])) {\n            return [];\n        }\n\n        $header = $this->headerNames[$header];\n\n        return $this->headers[$header];\n    }\n\n    public function getHeaderLine($header): string\n    {\n        return implode(', ', $this->getHeader($header));\n    }\n\n    public function withHeader($header, $value): MessageInterface\n    {\n        $this->assertHeader($header);\n        $value = $this->normalizeHeaderValue($value);\n        $normalized = strtolower($header);\n\n        $new = clone $this;\n        if (isset($new->headerNames[$normalized])) {\n            unset($new->headers[$new->headerNames[$normalized]]);\n        }\n        $new->headerNames[$normalized] = $header;\n        $new->headers[$header] = $value;\n\n        return $new;\n    }\n\n    public function withAddedHeader($header, $value): MessageInterface\n    {\n        $this->assertHeader($header);\n        $value = $this->normalizeHeaderValue($value);\n        $normalized = strtolower($header);\n\n        $new = clone $this;\n        if (isset($new->headerNames[$normalized])) {\n            $header = $this->headerNames[$normalized];\n            $new->headers[$header] = array_merge($this->headers[$header], $value);\n        } else {\n            $new->headerNames[$normalized] = $header;\n            $new->headers[$header] = $value;\n        }\n\n        return $new;\n    }\n\n    public function withoutHeader($header): MessageInterface\n    {\n        $normalized = strtolower($header);\n\n        if (!isset($this->headerNames[$normalized])) {\n            return $this;\n        }\n\n        $header = $this->headerNames[$normalized];\n\n        $new = clone $this;\n        unset($new->headers[$header], $new->headerNames[$normalized]);\n\n        return $new;\n    }\n\n    public function getBody(): StreamInterface\n    {\n        if (!$this->stream) {\n            $this->stream = Utils::streamFor('');\n        }\n\n        return $this->stream;\n    }\n\n    public function withBody(StreamInterface $body): MessageInterface\n    {\n        if ($body === $this->stream) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->stream = $body;\n\n        return $new;\n    }\n\n    /**\n     * @param (string|string[])[] $headers\n     */\n    private function setHeaders(array $headers): void\n    {\n        $this->headerNames = $this->headers = [];\n        foreach ($headers as $header => $value) {\n            // Numeric array keys are converted to int by PHP.\n            $header = (string) $header;\n\n            $this->assertHeader($header);\n            $value = $this->normalizeHeaderValue($value);\n            $normalized = strtolower($header);\n            if (isset($this->headerNames[$normalized])) {\n                $header = $this->headerNames[$normalized];\n                $this->headers[$header] = array_merge($this->headers[$header], $value);\n            } else {\n                $this->headerNames[$normalized] = $header;\n                $this->headers[$header] = $value;\n            }\n        }\n    }\n\n    /**\n     * @param mixed $value\n     *\n     * @return string[]\n     */\n    private function normalizeHeaderValue($value): array\n    {\n        if (!is_array($value)) {\n            return $this->trimAndValidateHeaderValues([$value]);\n        }\n\n        return $this->trimAndValidateHeaderValues($value);\n    }\n\n    /**\n     * Trims whitespace from the header values.\n     *\n     * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field.\n     *\n     * header-field = field-name \":\" OWS field-value OWS\n     * OWS          = *( SP / HTAB )\n     *\n     * @param mixed[] $values Header values\n     *\n     * @return string[] Trimmed header values\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4\n     */\n    private function trimAndValidateHeaderValues(array $values): array\n    {\n        return array_map(function ($value) {\n            if (!is_scalar($value) && null !== $value) {\n                throw new \\InvalidArgumentException(sprintf(\n                    'Header value must be scalar or null but %s provided.',\n                    is_object($value) ? get_class($value) : gettype($value)\n                ));\n            }\n\n            $trimmed = trim((string) $value, \" \\t\");\n            $this->assertValue($trimmed);\n\n            return $trimmed;\n        }, array_values($values));\n    }\n\n    /**\n     * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2\n     *\n     * @param mixed $header\n     */\n    private function assertHeader($header): void\n    {\n        if (!is_string($header)) {\n            throw new \\InvalidArgumentException(sprintf(\n                'Header name must be a string but %s provided.',\n                is_object($header) ? get_class($header) : gettype($header)\n            ));\n        }\n\n        if (!preg_match('/^[a-zA-Z0-9\\'`#$%&*+.^_|~!-]+$/D', $header)) {\n            throw new \\InvalidArgumentException(\n                sprintf('\"%s\" is not valid header name.', $header)\n            );\n        }\n    }\n\n    /**\n     * @see https://datatracker.ietf.org/doc/html/rfc7230#section-3.2\n     *\n     * field-value    = *( field-content / obs-fold )\n     * field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n     * field-vchar    = VCHAR / obs-text\n     * VCHAR          = %x21-7E\n     * obs-text       = %x80-FF\n     * obs-fold       = CRLF 1*( SP / HTAB )\n     */\n    private function assertValue(string $value): void\n    {\n        // The regular expression intentionally does not support the obs-fold production, because as\n        // per RFC 7230#3.2.4:\n        //\n        // A sender MUST NOT generate a message that includes\n        // line folding (i.e., that has any field-value that contains a match to\n        // the obs-fold rule) unless the message is intended for packaging\n        // within the message/http media type.\n        //\n        // Clients must not send a request with line folding and a server sending folded headers is\n        // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting\n        // folding is not likely to break any legitimate use case.\n        if (!preg_match('/^[\\x20\\x09\\x21-\\x7E\\x80-\\xFF]*$/D', $value)) {\n            throw new \\InvalidArgumentException(\n                sprintf('\"%s\" is not valid header value.', $value)\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/MimeType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nfinal class MimeType\n{\n    private const MIME_TYPES = [\n        '1km' => 'application/vnd.1000minds.decision-model+xml',\n        '3dml' => 'text/vnd.in3d.3dml',\n        '3ds' => 'image/x-3ds',\n        '3g2' => 'video/3gpp2',\n        '3gp' => 'video/3gp',\n        '3gpp' => 'video/3gpp',\n        '3mf' => 'model/3mf',\n        '7z' => 'application/x-7z-compressed',\n        '7zip' => 'application/x-7z-compressed',\n        '123' => 'application/vnd.lotus-1-2-3',\n        'aab' => 'application/x-authorware-bin',\n        'aac' => 'audio/aac',\n        'aam' => 'application/x-authorware-map',\n        'aas' => 'application/x-authorware-seg',\n        'abw' => 'application/x-abiword',\n        'ac' => 'application/vnd.nokia.n-gage.ac+xml',\n        'ac3' => 'audio/ac3',\n        'acc' => 'application/vnd.americandynamics.acc',\n        'ace' => 'application/x-ace-compressed',\n        'acu' => 'application/vnd.acucobol',\n        'acutc' => 'application/vnd.acucorp',\n        'adp' => 'audio/adpcm',\n        'adts' => 'audio/aac',\n        'aep' => 'application/vnd.audiograph',\n        'afm' => 'application/x-font-type1',\n        'afp' => 'application/vnd.ibm.modcap',\n        'age' => 'application/vnd.age',\n        'ahead' => 'application/vnd.ahead.space',\n        'ai' => 'application/pdf',\n        'aif' => 'audio/x-aiff',\n        'aifc' => 'audio/x-aiff',\n        'aiff' => 'audio/x-aiff',\n        'air' => 'application/vnd.adobe.air-application-installer-package+zip',\n        'ait' => 'application/vnd.dvb.ait',\n        'ami' => 'application/vnd.amiga.ami',\n        'aml' => 'application/automationml-aml+xml',\n        'amlx' => 'application/automationml-amlx+zip',\n        'amr' => 'audio/amr',\n        'apk' => 'application/vnd.android.package-archive',\n        'apng' => 'image/apng',\n        'appcache' => 'text/cache-manifest',\n        'appinstaller' => 'application/appinstaller',\n        'application' => 'application/x-ms-application',\n        'appx' => 'application/appx',\n        'appxbundle' => 'application/appxbundle',\n        'apr' => 'application/vnd.lotus-approach',\n        'arc' => 'application/x-freearc',\n        'arj' => 'application/x-arj',\n        'asc' => 'application/pgp-signature',\n        'asf' => 'video/x-ms-asf',\n        'asm' => 'text/x-asm',\n        'aso' => 'application/vnd.accpac.simply.aso',\n        'asx' => 'video/x-ms-asf',\n        'atc' => 'application/vnd.acucorp',\n        'atom' => 'application/atom+xml',\n        'atomcat' => 'application/atomcat+xml',\n        'atomdeleted' => 'application/atomdeleted+xml',\n        'atomsvc' => 'application/atomsvc+xml',\n        'atx' => 'application/vnd.antix.game-component',\n        'au' => 'audio/x-au',\n        'avci' => 'image/avci',\n        'avcs' => 'image/avcs',\n        'avi' => 'video/x-msvideo',\n        'avif' => 'image/avif',\n        'aw' => 'application/applixware',\n        'azf' => 'application/vnd.airzip.filesecure.azf',\n        'azs' => 'application/vnd.airzip.filesecure.azs',\n        'azv' => 'image/vnd.airzip.accelerator.azv',\n        'azw' => 'application/vnd.amazon.ebook',\n        'b16' => 'image/vnd.pco.b16',\n        'bat' => 'application/x-msdownload',\n        'bcpio' => 'application/x-bcpio',\n        'bdf' => 'application/x-font-bdf',\n        'bdm' => 'application/vnd.syncml.dm+wbxml',\n        'bdoc' => 'application/x-bdoc',\n        'bed' => 'application/vnd.realvnc.bed',\n        'bh2' => 'application/vnd.fujitsu.oasysprs',\n        'bin' => 'application/octet-stream',\n        'blb' => 'application/x-blorb',\n        'blorb' => 'application/x-blorb',\n        'bmi' => 'application/vnd.bmi',\n        'bmml' => 'application/vnd.balsamiq.bmml+xml',\n        'bmp' => 'image/bmp',\n        'book' => 'application/vnd.framemaker',\n        'box' => 'application/vnd.previewsystems.box',\n        'boz' => 'application/x-bzip2',\n        'bpk' => 'application/octet-stream',\n        'bpmn' => 'application/octet-stream',\n        'bsp' => 'model/vnd.valve.source.compiled-map',\n        'btf' => 'image/prs.btif',\n        'btif' => 'image/prs.btif',\n        'buffer' => 'application/octet-stream',\n        'bz' => 'application/x-bzip',\n        'bz2' => 'application/x-bzip2',\n        'c' => 'text/x-c',\n        'c4d' => 'application/vnd.clonk.c4group',\n        'c4f' => 'application/vnd.clonk.c4group',\n        'c4g' => 'application/vnd.clonk.c4group',\n        'c4p' => 'application/vnd.clonk.c4group',\n        'c4u' => 'application/vnd.clonk.c4group',\n        'c11amc' => 'application/vnd.cluetrust.cartomobile-config',\n        'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',\n        'cab' => 'application/vnd.ms-cab-compressed',\n        'caf' => 'audio/x-caf',\n        'cap' => 'application/vnd.tcpdump.pcap',\n        'car' => 'application/vnd.curl.car',\n        'cat' => 'application/vnd.ms-pki.seccat',\n        'cb7' => 'application/x-cbr',\n        'cba' => 'application/x-cbr',\n        'cbr' => 'application/x-cbr',\n        'cbt' => 'application/x-cbr',\n        'cbz' => 'application/x-cbr',\n        'cc' => 'text/x-c',\n        'cco' => 'application/x-cocoa',\n        'cct' => 'application/x-director',\n        'ccxml' => 'application/ccxml+xml',\n        'cdbcmsg' => 'application/vnd.contact.cmsg',\n        'cdf' => 'application/x-netcdf',\n        'cdfx' => 'application/cdfx+xml',\n        'cdkey' => 'application/vnd.mediastation.cdkey',\n        'cdmia' => 'application/cdmi-capability',\n        'cdmic' => 'application/cdmi-container',\n        'cdmid' => 'application/cdmi-domain',\n        'cdmio' => 'application/cdmi-object',\n        'cdmiq' => 'application/cdmi-queue',\n        'cdr' => 'application/cdr',\n        'cdx' => 'chemical/x-cdx',\n        'cdxml' => 'application/vnd.chemdraw+xml',\n        'cdy' => 'application/vnd.cinderella',\n        'cer' => 'application/pkix-cert',\n        'cfs' => 'application/x-cfs-compressed',\n        'cgm' => 'image/cgm',\n        'chat' => 'application/x-chat',\n        'chm' => 'application/vnd.ms-htmlhelp',\n        'chrt' => 'application/vnd.kde.kchart',\n        'cif' => 'chemical/x-cif',\n        'cii' => 'application/vnd.anser-web-certificate-issue-initiation',\n        'cil' => 'application/vnd.ms-artgalry',\n        'cjs' => 'application/node',\n        'cla' => 'application/vnd.claymore',\n        'class' => 'application/octet-stream',\n        'cld' => 'model/vnd.cld',\n        'clkk' => 'application/vnd.crick.clicker.keyboard',\n        'clkp' => 'application/vnd.crick.clicker.palette',\n        'clkt' => 'application/vnd.crick.clicker.template',\n        'clkw' => 'application/vnd.crick.clicker.wordbank',\n        'clkx' => 'application/vnd.crick.clicker',\n        'clp' => 'application/x-msclip',\n        'cmc' => 'application/vnd.cosmocaller',\n        'cmdf' => 'chemical/x-cmdf',\n        'cml' => 'chemical/x-cml',\n        'cmp' => 'application/vnd.yellowriver-custom-menu',\n        'cmx' => 'image/x-cmx',\n        'cod' => 'application/vnd.rim.cod',\n        'coffee' => 'text/coffeescript',\n        'com' => 'application/x-msdownload',\n        'conf' => 'text/plain',\n        'cpio' => 'application/x-cpio',\n        'cpl' => 'application/cpl+xml',\n        'cpp' => 'text/x-c',\n        'cpt' => 'application/mac-compactpro',\n        'crd' => 'application/x-mscardfile',\n        'crl' => 'application/pkix-crl',\n        'crt' => 'application/x-x509-ca-cert',\n        'crx' => 'application/x-chrome-extension',\n        'cryptonote' => 'application/vnd.rig.cryptonote',\n        'csh' => 'application/x-csh',\n        'csl' => 'application/vnd.citationstyles.style+xml',\n        'csml' => 'chemical/x-csml',\n        'csp' => 'application/vnd.commonspace',\n        'csr' => 'application/octet-stream',\n        'css' => 'text/css',\n        'cst' => 'application/x-director',\n        'csv' => 'text/csv',\n        'cu' => 'application/cu-seeme',\n        'curl' => 'text/vnd.curl',\n        'cwl' => 'application/cwl',\n        'cww' => 'application/prs.cww',\n        'cxt' => 'application/x-director',\n        'cxx' => 'text/x-c',\n        'dae' => 'model/vnd.collada+xml',\n        'daf' => 'application/vnd.mobius.daf',\n        'dart' => 'application/vnd.dart',\n        'dataless' => 'application/vnd.fdsn.seed',\n        'davmount' => 'application/davmount+xml',\n        'dbf' => 'application/vnd.dbf',\n        'dbk' => 'application/docbook+xml',\n        'dcr' => 'application/x-director',\n        'dcurl' => 'text/vnd.curl.dcurl',\n        'dd2' => 'application/vnd.oma.dd2+xml',\n        'ddd' => 'application/vnd.fujixerox.ddd',\n        'ddf' => 'application/vnd.syncml.dmddf+xml',\n        'dds' => 'image/vnd.ms-dds',\n        'deb' => 'application/x-debian-package',\n        'def' => 'text/plain',\n        'deploy' => 'application/octet-stream',\n        'der' => 'application/x-x509-ca-cert',\n        'dfac' => 'application/vnd.dreamfactory',\n        'dgc' => 'application/x-dgc-compressed',\n        'dib' => 'image/bmp',\n        'dic' => 'text/x-c',\n        'dir' => 'application/x-director',\n        'dis' => 'application/vnd.mobius.dis',\n        'disposition-notification' => 'message/disposition-notification',\n        'dist' => 'application/octet-stream',\n        'distz' => 'application/octet-stream',\n        'djv' => 'image/vnd.djvu',\n        'djvu' => 'image/vnd.djvu',\n        'dll' => 'application/octet-stream',\n        'dmg' => 'application/x-apple-diskimage',\n        'dmn' => 'application/octet-stream',\n        'dmp' => 'application/vnd.tcpdump.pcap',\n        'dms' => 'application/octet-stream',\n        'dna' => 'application/vnd.dna',\n        'doc' => 'application/msword',\n        'docm' => 'application/vnd.ms-word.template.macroEnabled.12',\n        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n        'dot' => 'application/msword',\n        'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',\n        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n        'dp' => 'application/vnd.osgi.dp',\n        'dpg' => 'application/vnd.dpgraph',\n        'dpx' => 'image/dpx',\n        'dra' => 'audio/vnd.dra',\n        'drle' => 'image/dicom-rle',\n        'dsc' => 'text/prs.lines.tag',\n        'dssc' => 'application/dssc+der',\n        'dtb' => 'application/x-dtbook+xml',\n        'dtd' => 'application/xml-dtd',\n        'dts' => 'audio/vnd.dts',\n        'dtshd' => 'audio/vnd.dts.hd',\n        'dump' => 'application/octet-stream',\n        'dvb' => 'video/vnd.dvb.file',\n        'dvi' => 'application/x-dvi',\n        'dwd' => 'application/atsc-dwd+xml',\n        'dwf' => 'model/vnd.dwf',\n        'dwg' => 'image/vnd.dwg',\n        'dxf' => 'image/vnd.dxf',\n        'dxp' => 'application/vnd.spotfire.dxp',\n        'dxr' => 'application/x-director',\n        'ear' => 'application/java-archive',\n        'ecelp4800' => 'audio/vnd.nuera.ecelp4800',\n        'ecelp7470' => 'audio/vnd.nuera.ecelp7470',\n        'ecelp9600' => 'audio/vnd.nuera.ecelp9600',\n        'ecma' => 'application/ecmascript',\n        'edm' => 'application/vnd.novadigm.edm',\n        'edx' => 'application/vnd.novadigm.edx',\n        'efif' => 'application/vnd.picsel',\n        'ei6' => 'application/vnd.pg.osasli',\n        'elc' => 'application/octet-stream',\n        'emf' => 'image/emf',\n        'eml' => 'message/rfc822',\n        'emma' => 'application/emma+xml',\n        'emotionml' => 'application/emotionml+xml',\n        'emz' => 'application/x-msmetafile',\n        'eol' => 'audio/vnd.digital-winds',\n        'eot' => 'application/vnd.ms-fontobject',\n        'eps' => 'application/postscript',\n        'epub' => 'application/epub+zip',\n        'es3' => 'application/vnd.eszigno3+xml',\n        'esa' => 'application/vnd.osgi.subsystem',\n        'esf' => 'application/vnd.epson.esf',\n        'et3' => 'application/vnd.eszigno3+xml',\n        'etx' => 'text/x-setext',\n        'eva' => 'application/x-eva',\n        'evy' => 'application/x-envoy',\n        'exe' => 'application/octet-stream',\n        'exi' => 'application/exi',\n        'exp' => 'application/express',\n        'exr' => 'image/aces',\n        'ext' => 'application/vnd.novadigm.ext',\n        'ez' => 'application/andrew-inset',\n        'ez2' => 'application/vnd.ezpix-album',\n        'ez3' => 'application/vnd.ezpix-package',\n        'f' => 'text/x-fortran',\n        'f4v' => 'video/mp4',\n        'f77' => 'text/x-fortran',\n        'f90' => 'text/x-fortran',\n        'fbs' => 'image/vnd.fastbidsheet',\n        'fcdt' => 'application/vnd.adobe.formscentral.fcdt',\n        'fcs' => 'application/vnd.isac.fcs',\n        'fdf' => 'application/vnd.fdf',\n        'fdt' => 'application/fdt+xml',\n        'fe_launch' => 'application/vnd.denovo.fcselayout-link',\n        'fg5' => 'application/vnd.fujitsu.oasysgp',\n        'fgd' => 'application/x-director',\n        'fh' => 'image/x-freehand',\n        'fh4' => 'image/x-freehand',\n        'fh5' => 'image/x-freehand',\n        'fh7' => 'image/x-freehand',\n        'fhc' => 'image/x-freehand',\n        'fig' => 'application/x-xfig',\n        'fits' => 'image/fits',\n        'flac' => 'audio/x-flac',\n        'fli' => 'video/x-fli',\n        'flo' => 'application/vnd.micrografx.flo',\n        'flv' => 'video/x-flv',\n        'flw' => 'application/vnd.kde.kivio',\n        'flx' => 'text/vnd.fmi.flexstor',\n        'fly' => 'text/vnd.fly',\n        'fm' => 'application/vnd.framemaker',\n        'fnc' => 'application/vnd.frogans.fnc',\n        'fo' => 'application/vnd.software602.filler.form+xml',\n        'for' => 'text/x-fortran',\n        'fpx' => 'image/vnd.fpx',\n        'frame' => 'application/vnd.framemaker',\n        'fsc' => 'application/vnd.fsc.weblaunch',\n        'fst' => 'image/vnd.fst',\n        'ftc' => 'application/vnd.fluxtime.clip',\n        'fti' => 'application/vnd.anser-web-funds-transfer-initiation',\n        'fvt' => 'video/vnd.fvt',\n        'fxp' => 'application/vnd.adobe.fxp',\n        'fxpl' => 'application/vnd.adobe.fxp',\n        'fzs' => 'application/vnd.fuzzysheet',\n        'g2w' => 'application/vnd.geoplan',\n        'g3' => 'image/g3fax',\n        'g3w' => 'application/vnd.geospace',\n        'gac' => 'application/vnd.groove-account',\n        'gam' => 'application/x-tads',\n        'gbr' => 'application/rpki-ghostbusters',\n        'gca' => 'application/x-gca-compressed',\n        'gdl' => 'model/vnd.gdl',\n        'gdoc' => 'application/vnd.google-apps.document',\n        'ged' => 'text/vnd.familysearch.gedcom',\n        'geo' => 'application/vnd.dynageo',\n        'geojson' => 'application/geo+json',\n        'gex' => 'application/vnd.geometry-explorer',\n        'ggb' => 'application/vnd.geogebra.file',\n        'ggt' => 'application/vnd.geogebra.tool',\n        'ghf' => 'application/vnd.groove-help',\n        'gif' => 'image/gif',\n        'gim' => 'application/vnd.groove-identity-message',\n        'glb' => 'model/gltf-binary',\n        'gltf' => 'model/gltf+json',\n        'gml' => 'application/gml+xml',\n        'gmx' => 'application/vnd.gmx',\n        'gnumeric' => 'application/x-gnumeric',\n        'gpg' => 'application/gpg-keys',\n        'gph' => 'application/vnd.flographit',\n        'gpx' => 'application/gpx+xml',\n        'gqf' => 'application/vnd.grafeq',\n        'gqs' => 'application/vnd.grafeq',\n        'gram' => 'application/srgs',\n        'gramps' => 'application/x-gramps-xml',\n        'gre' => 'application/vnd.geometry-explorer',\n        'grv' => 'application/vnd.groove-injector',\n        'grxml' => 'application/srgs+xml',\n        'gsf' => 'application/x-font-ghostscript',\n        'gsheet' => 'application/vnd.google-apps.spreadsheet',\n        'gslides' => 'application/vnd.google-apps.presentation',\n        'gtar' => 'application/x-gtar',\n        'gtm' => 'application/vnd.groove-tool-message',\n        'gtw' => 'model/vnd.gtw',\n        'gv' => 'text/vnd.graphviz',\n        'gxf' => 'application/gxf',\n        'gxt' => 'application/vnd.geonext',\n        'gz' => 'application/gzip',\n        'gzip' => 'application/gzip',\n        'h' => 'text/x-c',\n        'h261' => 'video/h261',\n        'h263' => 'video/h263',\n        'h264' => 'video/h264',\n        'hal' => 'application/vnd.hal+xml',\n        'hbci' => 'application/vnd.hbci',\n        'hbs' => 'text/x-handlebars-template',\n        'hdd' => 'application/x-virtualbox-hdd',\n        'hdf' => 'application/x-hdf',\n        'heic' => 'image/heic',\n        'heics' => 'image/heic-sequence',\n        'heif' => 'image/heif',\n        'heifs' => 'image/heif-sequence',\n        'hej2' => 'image/hej2k',\n        'held' => 'application/atsc-held+xml',\n        'hh' => 'text/x-c',\n        'hjson' => 'application/hjson',\n        'hlp' => 'application/winhlp',\n        'hpgl' => 'application/vnd.hp-hpgl',\n        'hpid' => 'application/vnd.hp-hpid',\n        'hps' => 'application/vnd.hp-hps',\n        'hqx' => 'application/mac-binhex40',\n        'hsj2' => 'image/hsj2',\n        'htc' => 'text/x-component',\n        'htke' => 'application/vnd.kenameaapp',\n        'htm' => 'text/html',\n        'html' => 'text/html',\n        'hvd' => 'application/vnd.yamaha.hv-dic',\n        'hvp' => 'application/vnd.yamaha.hv-voice',\n        'hvs' => 'application/vnd.yamaha.hv-script',\n        'i2g' => 'application/vnd.intergeo',\n        'icc' => 'application/vnd.iccprofile',\n        'ice' => 'x-conference/x-cooltalk',\n        'icm' => 'application/vnd.iccprofile',\n        'ico' => 'image/x-icon',\n        'ics' => 'text/calendar',\n        'ief' => 'image/ief',\n        'ifb' => 'text/calendar',\n        'ifm' => 'application/vnd.shana.informed.formdata',\n        'iges' => 'model/iges',\n        'igl' => 'application/vnd.igloader',\n        'igm' => 'application/vnd.insors.igm',\n        'igs' => 'model/iges',\n        'igx' => 'application/vnd.micrografx.igx',\n        'iif' => 'application/vnd.shana.informed.interchange',\n        'img' => 'application/octet-stream',\n        'imp' => 'application/vnd.accpac.simply.imp',\n        'ims' => 'application/vnd.ms-ims',\n        'in' => 'text/plain',\n        'ini' => 'text/plain',\n        'ink' => 'application/inkml+xml',\n        'inkml' => 'application/inkml+xml',\n        'install' => 'application/x-install-instructions',\n        'iota' => 'application/vnd.astraea-software.iota',\n        'ipfix' => 'application/ipfix',\n        'ipk' => 'application/vnd.shana.informed.package',\n        'irm' => 'application/vnd.ibm.rights-management',\n        'irp' => 'application/vnd.irepository.package+xml',\n        'iso' => 'application/x-iso9660-image',\n        'itp' => 'application/vnd.shana.informed.formtemplate',\n        'its' => 'application/its+xml',\n        'ivp' => 'application/vnd.immervision-ivp',\n        'ivu' => 'application/vnd.immervision-ivu',\n        'jad' => 'text/vnd.sun.j2me.app-descriptor',\n        'jade' => 'text/jade',\n        'jam' => 'application/vnd.jam',\n        'jar' => 'application/java-archive',\n        'jardiff' => 'application/x-java-archive-diff',\n        'java' => 'text/x-java-source',\n        'jhc' => 'image/jphc',\n        'jisp' => 'application/vnd.jisp',\n        'jls' => 'image/jls',\n        'jlt' => 'application/vnd.hp-jlyt',\n        'jng' => 'image/x-jng',\n        'jnlp' => 'application/x-java-jnlp-file',\n        'joda' => 'application/vnd.joost.joda-archive',\n        'jp2' => 'image/jp2',\n        'jpe' => 'image/jpeg',\n        'jpeg' => 'image/jpeg',\n        'jpf' => 'image/jpx',\n        'jpg' => 'image/jpeg',\n        'jpg2' => 'image/jp2',\n        'jpgm' => 'video/jpm',\n        'jpgv' => 'video/jpeg',\n        'jph' => 'image/jph',\n        'jpm' => 'video/jpm',\n        'jpx' => 'image/jpx',\n        'js' => 'application/javascript',\n        'json' => 'application/json',\n        'json5' => 'application/json5',\n        'jsonld' => 'application/ld+json',\n        'jsonml' => 'application/jsonml+json',\n        'jsx' => 'text/jsx',\n        'jt' => 'model/jt',\n        'jxr' => 'image/jxr',\n        'jxra' => 'image/jxra',\n        'jxrs' => 'image/jxrs',\n        'jxs' => 'image/jxs',\n        'jxsc' => 'image/jxsc',\n        'jxsi' => 'image/jxsi',\n        'jxss' => 'image/jxss',\n        'kar' => 'audio/midi',\n        'karbon' => 'application/vnd.kde.karbon',\n        'kdb' => 'application/octet-stream',\n        'kdbx' => 'application/x-keepass2',\n        'key' => 'application/x-iwork-keynote-sffkey',\n        'kfo' => 'application/vnd.kde.kformula',\n        'kia' => 'application/vnd.kidspiration',\n        'kml' => 'application/vnd.google-earth.kml+xml',\n        'kmz' => 'application/vnd.google-earth.kmz',\n        'kne' => 'application/vnd.kinar',\n        'knp' => 'application/vnd.kinar',\n        'kon' => 'application/vnd.kde.kontour',\n        'kpr' => 'application/vnd.kde.kpresenter',\n        'kpt' => 'application/vnd.kde.kpresenter',\n        'kpxx' => 'application/vnd.ds-keypoint',\n        'ksp' => 'application/vnd.kde.kspread',\n        'ktr' => 'application/vnd.kahootz',\n        'ktx' => 'image/ktx',\n        'ktx2' => 'image/ktx2',\n        'ktz' => 'application/vnd.kahootz',\n        'kwd' => 'application/vnd.kde.kword',\n        'kwt' => 'application/vnd.kde.kword',\n        'lasxml' => 'application/vnd.las.las+xml',\n        'latex' => 'application/x-latex',\n        'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',\n        'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',\n        'les' => 'application/vnd.hhe.lesson-player',\n        'less' => 'text/less',\n        'lgr' => 'application/lgr+xml',\n        'lha' => 'application/octet-stream',\n        'link66' => 'application/vnd.route66.link66+xml',\n        'list' => 'text/plain',\n        'list3820' => 'application/vnd.ibm.modcap',\n        'listafp' => 'application/vnd.ibm.modcap',\n        'litcoffee' => 'text/coffeescript',\n        'lnk' => 'application/x-ms-shortcut',\n        'log' => 'text/plain',\n        'lostxml' => 'application/lost+xml',\n        'lrf' => 'application/octet-stream',\n        'lrm' => 'application/vnd.ms-lrm',\n        'ltf' => 'application/vnd.frogans.ltf',\n        'lua' => 'text/x-lua',\n        'luac' => 'application/x-lua-bytecode',\n        'lvp' => 'audio/vnd.lucent.voice',\n        'lwp' => 'application/vnd.lotus-wordpro',\n        'lzh' => 'application/octet-stream',\n        'm1v' => 'video/mpeg',\n        'm2a' => 'audio/mpeg',\n        'm2v' => 'video/mpeg',\n        'm3a' => 'audio/mpeg',\n        'm3u' => 'text/plain',\n        'm3u8' => 'application/vnd.apple.mpegurl',\n        'm4a' => 'audio/x-m4a',\n        'm4p' => 'application/mp4',\n        'm4s' => 'video/iso.segment',\n        'm4u' => 'application/vnd.mpegurl',\n        'm4v' => 'video/x-m4v',\n        'm13' => 'application/x-msmediaview',\n        'm14' => 'application/x-msmediaview',\n        'm21' => 'application/mp21',\n        'ma' => 'application/mathematica',\n        'mads' => 'application/mads+xml',\n        'maei' => 'application/mmt-aei+xml',\n        'mag' => 'application/vnd.ecowin.chart',\n        'maker' => 'application/vnd.framemaker',\n        'man' => 'text/troff',\n        'manifest' => 'text/cache-manifest',\n        'map' => 'application/json',\n        'mar' => 'application/octet-stream',\n        'markdown' => 'text/markdown',\n        'mathml' => 'application/mathml+xml',\n        'mb' => 'application/mathematica',\n        'mbk' => 'application/vnd.mobius.mbk',\n        'mbox' => 'application/mbox',\n        'mc1' => 'application/vnd.medcalcdata',\n        'mcd' => 'application/vnd.mcd',\n        'mcurl' => 'text/vnd.curl.mcurl',\n        'md' => 'text/markdown',\n        'mdb' => 'application/x-msaccess',\n        'mdi' => 'image/vnd.ms-modi',\n        'mdx' => 'text/mdx',\n        'me' => 'text/troff',\n        'mesh' => 'model/mesh',\n        'meta4' => 'application/metalink4+xml',\n        'metalink' => 'application/metalink+xml',\n        'mets' => 'application/mets+xml',\n        'mfm' => 'application/vnd.mfmp',\n        'mft' => 'application/rpki-manifest',\n        'mgp' => 'application/vnd.osgeo.mapguide.package',\n        'mgz' => 'application/vnd.proteus.magazine',\n        'mid' => 'audio/midi',\n        'midi' => 'audio/midi',\n        'mie' => 'application/x-mie',\n        'mif' => 'application/vnd.mif',\n        'mime' => 'message/rfc822',\n        'mj2' => 'video/mj2',\n        'mjp2' => 'video/mj2',\n        'mjs' => 'text/javascript',\n        'mk3d' => 'video/x-matroska',\n        'mka' => 'audio/x-matroska',\n        'mkd' => 'text/x-markdown',\n        'mks' => 'video/x-matroska',\n        'mkv' => 'video/x-matroska',\n        'mlp' => 'application/vnd.dolby.mlp',\n        'mmd' => 'application/vnd.chipnuts.karaoke-mmd',\n        'mmf' => 'application/vnd.smaf',\n        'mml' => 'text/mathml',\n        'mmr' => 'image/vnd.fujixerox.edmics-mmr',\n        'mng' => 'video/x-mng',\n        'mny' => 'application/x-msmoney',\n        'mobi' => 'application/x-mobipocket-ebook',\n        'mods' => 'application/mods+xml',\n        'mov' => 'video/quicktime',\n        'movie' => 'video/x-sgi-movie',\n        'mp2' => 'audio/mpeg',\n        'mp2a' => 'audio/mpeg',\n        'mp3' => 'audio/mpeg',\n        'mp4' => 'video/mp4',\n        'mp4a' => 'audio/mp4',\n        'mp4s' => 'application/mp4',\n        'mp4v' => 'video/mp4',\n        'mp21' => 'application/mp21',\n        'mpc' => 'application/vnd.mophun.certificate',\n        'mpd' => 'application/dash+xml',\n        'mpe' => 'video/mpeg',\n        'mpeg' => 'video/mpeg',\n        'mpf' => 'application/media-policy-dataset+xml',\n        'mpg' => 'video/mpeg',\n        'mpg4' => 'video/mp4',\n        'mpga' => 'audio/mpeg',\n        'mpkg' => 'application/vnd.apple.installer+xml',\n        'mpm' => 'application/vnd.blueice.multipass',\n        'mpn' => 'application/vnd.mophun.application',\n        'mpp' => 'application/vnd.ms-project',\n        'mpt' => 'application/vnd.ms-project',\n        'mpy' => 'application/vnd.ibm.minipay',\n        'mqy' => 'application/vnd.mobius.mqy',\n        'mrc' => 'application/marc',\n        'mrcx' => 'application/marcxml+xml',\n        'ms' => 'text/troff',\n        'mscml' => 'application/mediaservercontrol+xml',\n        'mseed' => 'application/vnd.fdsn.mseed',\n        'mseq' => 'application/vnd.mseq',\n        'msf' => 'application/vnd.epson.msf',\n        'msg' => 'application/vnd.ms-outlook',\n        'msh' => 'model/mesh',\n        'msi' => 'application/x-msdownload',\n        'msix' => 'application/msix',\n        'msixbundle' => 'application/msixbundle',\n        'msl' => 'application/vnd.mobius.msl',\n        'msm' => 'application/octet-stream',\n        'msp' => 'application/octet-stream',\n        'msty' => 'application/vnd.muvee.style',\n        'mtl' => 'model/mtl',\n        'mts' => 'model/vnd.mts',\n        'mus' => 'application/vnd.musician',\n        'musd' => 'application/mmt-usd+xml',\n        'musicxml' => 'application/vnd.recordare.musicxml+xml',\n        'mvb' => 'application/x-msmediaview',\n        'mvt' => 'application/vnd.mapbox-vector-tile',\n        'mwf' => 'application/vnd.mfer',\n        'mxf' => 'application/mxf',\n        'mxl' => 'application/vnd.recordare.musicxml',\n        'mxmf' => 'audio/mobile-xmf',\n        'mxml' => 'application/xv+xml',\n        'mxs' => 'application/vnd.triscape.mxs',\n        'mxu' => 'video/vnd.mpegurl',\n        'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',\n        'n3' => 'text/n3',\n        'nb' => 'application/mathematica',\n        'nbp' => 'application/vnd.wolfram.player',\n        'nc' => 'application/x-netcdf',\n        'ncx' => 'application/x-dtbncx+xml',\n        'nfo' => 'text/x-nfo',\n        'ngdat' => 'application/vnd.nokia.n-gage.data',\n        'nitf' => 'application/vnd.nitf',\n        'nlu' => 'application/vnd.neurolanguage.nlu',\n        'nml' => 'application/vnd.enliven',\n        'nnd' => 'application/vnd.noblenet-directory',\n        'nns' => 'application/vnd.noblenet-sealer',\n        'nnw' => 'application/vnd.noblenet-web',\n        'npx' => 'image/vnd.net-fpx',\n        'nq' => 'application/n-quads',\n        'nsc' => 'application/x-conference',\n        'nsf' => 'application/vnd.lotus-notes',\n        'nt' => 'application/n-triples',\n        'ntf' => 'application/vnd.nitf',\n        'numbers' => 'application/x-iwork-numbers-sffnumbers',\n        'nzb' => 'application/x-nzb',\n        'oa2' => 'application/vnd.fujitsu.oasys2',\n        'oa3' => 'application/vnd.fujitsu.oasys3',\n        'oas' => 'application/vnd.fujitsu.oasys',\n        'obd' => 'application/x-msbinder',\n        'obgx' => 'application/vnd.openblox.game+xml',\n        'obj' => 'model/obj',\n        'oda' => 'application/oda',\n        'odb' => 'application/vnd.oasis.opendocument.database',\n        'odc' => 'application/vnd.oasis.opendocument.chart',\n        'odf' => 'application/vnd.oasis.opendocument.formula',\n        'odft' => 'application/vnd.oasis.opendocument.formula-template',\n        'odg' => 'application/vnd.oasis.opendocument.graphics',\n        'odi' => 'application/vnd.oasis.opendocument.image',\n        'odm' => 'application/vnd.oasis.opendocument.text-master',\n        'odp' => 'application/vnd.oasis.opendocument.presentation',\n        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',\n        'odt' => 'application/vnd.oasis.opendocument.text',\n        'oga' => 'audio/ogg',\n        'ogex' => 'model/vnd.opengex',\n        'ogg' => 'audio/ogg',\n        'ogv' => 'video/ogg',\n        'ogx' => 'application/ogg',\n        'omdoc' => 'application/omdoc+xml',\n        'onepkg' => 'application/onenote',\n        'onetmp' => 'application/onenote',\n        'onetoc' => 'application/onenote',\n        'onetoc2' => 'application/onenote',\n        'opf' => 'application/oebps-package+xml',\n        'opml' => 'text/x-opml',\n        'oprc' => 'application/vnd.palm',\n        'opus' => 'audio/ogg',\n        'org' => 'text/x-org',\n        'osf' => 'application/vnd.yamaha.openscoreformat',\n        'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',\n        'osm' => 'application/vnd.openstreetmap.data+xml',\n        'otc' => 'application/vnd.oasis.opendocument.chart-template',\n        'otf' => 'font/otf',\n        'otg' => 'application/vnd.oasis.opendocument.graphics-template',\n        'oth' => 'application/vnd.oasis.opendocument.text-web',\n        'oti' => 'application/vnd.oasis.opendocument.image-template',\n        'otp' => 'application/vnd.oasis.opendocument.presentation-template',\n        'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',\n        'ott' => 'application/vnd.oasis.opendocument.text-template',\n        'ova' => 'application/x-virtualbox-ova',\n        'ovf' => 'application/x-virtualbox-ovf',\n        'owl' => 'application/rdf+xml',\n        'oxps' => 'application/oxps',\n        'oxt' => 'application/vnd.openofficeorg.extension',\n        'p' => 'text/x-pascal',\n        'p7a' => 'application/x-pkcs7-signature',\n        'p7b' => 'application/x-pkcs7-certificates',\n        'p7c' => 'application/pkcs7-mime',\n        'p7m' => 'application/pkcs7-mime',\n        'p7r' => 'application/x-pkcs7-certreqresp',\n        'p7s' => 'application/pkcs7-signature',\n        'p8' => 'application/pkcs8',\n        'p10' => 'application/x-pkcs10',\n        'p12' => 'application/x-pkcs12',\n        'pac' => 'application/x-ns-proxy-autoconfig',\n        'pages' => 'application/x-iwork-pages-sffpages',\n        'pas' => 'text/x-pascal',\n        'paw' => 'application/vnd.pawaafile',\n        'pbd' => 'application/vnd.powerbuilder6',\n        'pbm' => 'image/x-portable-bitmap',\n        'pcap' => 'application/vnd.tcpdump.pcap',\n        'pcf' => 'application/x-font-pcf',\n        'pcl' => 'application/vnd.hp-pcl',\n        'pclxl' => 'application/vnd.hp-pclxl',\n        'pct' => 'image/x-pict',\n        'pcurl' => 'application/vnd.curl.pcurl',\n        'pcx' => 'image/x-pcx',\n        'pdb' => 'application/x-pilot',\n        'pde' => 'text/x-processing',\n        'pdf' => 'application/pdf',\n        'pem' => 'application/x-x509-user-cert',\n        'pfa' => 'application/x-font-type1',\n        'pfb' => 'application/x-font-type1',\n        'pfm' => 'application/x-font-type1',\n        'pfr' => 'application/font-tdpfr',\n        'pfx' => 'application/x-pkcs12',\n        'pgm' => 'image/x-portable-graymap',\n        'pgn' => 'application/x-chess-pgn',\n        'pgp' => 'application/pgp',\n        'phar' => 'application/octet-stream',\n        'php' => 'application/x-httpd-php',\n        'php3' => 'application/x-httpd-php',\n        'php4' => 'application/x-httpd-php',\n        'phps' => 'application/x-httpd-php-source',\n        'phtml' => 'application/x-httpd-php',\n        'pic' => 'image/x-pict',\n        'pkg' => 'application/octet-stream',\n        'pki' => 'application/pkixcmp',\n        'pkipath' => 'application/pkix-pkipath',\n        'pkpass' => 'application/vnd.apple.pkpass',\n        'pl' => 'application/x-perl',\n        'plb' => 'application/vnd.3gpp.pic-bw-large',\n        'plc' => 'application/vnd.mobius.plc',\n        'plf' => 'application/vnd.pocketlearn',\n        'pls' => 'application/pls+xml',\n        'pm' => 'application/x-perl',\n        'pml' => 'application/vnd.ctc-posml',\n        'png' => 'image/png',\n        'pnm' => 'image/x-portable-anymap',\n        'portpkg' => 'application/vnd.macports.portpkg',\n        'pot' => 'application/vnd.ms-powerpoint',\n        'potm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n        'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',\n        'ppa' => 'application/vnd.ms-powerpoint',\n        'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n        'ppd' => 'application/vnd.cups-ppd',\n        'ppm' => 'image/x-portable-pixmap',\n        'pps' => 'application/vnd.ms-powerpoint',\n        'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n        'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n        'ppt' => 'application/powerpoint',\n        'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n        'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n        'pqa' => 'application/vnd.palm',\n        'prc' => 'model/prc',\n        'pre' => 'application/vnd.lotus-freelance',\n        'prf' => 'application/pics-rules',\n        'provx' => 'application/provenance+xml',\n        'ps' => 'application/postscript',\n        'psb' => 'application/vnd.3gpp.pic-bw-small',\n        'psd' => 'application/x-photoshop',\n        'psf' => 'application/x-font-linux-psf',\n        'pskcxml' => 'application/pskc+xml',\n        'pti' => 'image/prs.pti',\n        'ptid' => 'application/vnd.pvi.ptid1',\n        'pub' => 'application/x-mspublisher',\n        'pvb' => 'application/vnd.3gpp.pic-bw-var',\n        'pwn' => 'application/vnd.3m.post-it-notes',\n        'pya' => 'audio/vnd.ms-playready.media.pya',\n        'pyo' => 'model/vnd.pytha.pyox',\n        'pyox' => 'model/vnd.pytha.pyox',\n        'pyv' => 'video/vnd.ms-playready.media.pyv',\n        'qam' => 'application/vnd.epson.quickanime',\n        'qbo' => 'application/vnd.intu.qbo',\n        'qfx' => 'application/vnd.intu.qfx',\n        'qps' => 'application/vnd.publishare-delta-tree',\n        'qt' => 'video/quicktime',\n        'qwd' => 'application/vnd.quark.quarkxpress',\n        'qwt' => 'application/vnd.quark.quarkxpress',\n        'qxb' => 'application/vnd.quark.quarkxpress',\n        'qxd' => 'application/vnd.quark.quarkxpress',\n        'qxl' => 'application/vnd.quark.quarkxpress',\n        'qxt' => 'application/vnd.quark.quarkxpress',\n        'ra' => 'audio/x-realaudio',\n        'ram' => 'audio/x-pn-realaudio',\n        'raml' => 'application/raml+yaml',\n        'rapd' => 'application/route-apd+xml',\n        'rar' => 'application/x-rar',\n        'ras' => 'image/x-cmu-raster',\n        'rcprofile' => 'application/vnd.ipunplugged.rcprofile',\n        'rdf' => 'application/rdf+xml',\n        'rdz' => 'application/vnd.data-vision.rdz',\n        'relo' => 'application/p2p-overlay+xml',\n        'rep' => 'application/vnd.businessobjects',\n        'res' => 'application/x-dtbresource+xml',\n        'rgb' => 'image/x-rgb',\n        'rif' => 'application/reginfo+xml',\n        'rip' => 'audio/vnd.rip',\n        'ris' => 'application/x-research-info-systems',\n        'rl' => 'application/resource-lists+xml',\n        'rlc' => 'image/vnd.fujixerox.edmics-rlc',\n        'rld' => 'application/resource-lists-diff+xml',\n        'rm' => 'audio/x-pn-realaudio',\n        'rmi' => 'audio/midi',\n        'rmp' => 'audio/x-pn-realaudio-plugin',\n        'rms' => 'application/vnd.jcp.javame.midlet-rms',\n        'rmvb' => 'application/vnd.rn-realmedia-vbr',\n        'rnc' => 'application/relax-ng-compact-syntax',\n        'rng' => 'application/xml',\n        'roa' => 'application/rpki-roa',\n        'roff' => 'text/troff',\n        'rp9' => 'application/vnd.cloanto.rp9',\n        'rpm' => 'audio/x-pn-realaudio-plugin',\n        'rpss' => 'application/vnd.nokia.radio-presets',\n        'rpst' => 'application/vnd.nokia.radio-preset',\n        'rq' => 'application/sparql-query',\n        'rs' => 'application/rls-services+xml',\n        'rsa' => 'application/x-pkcs7',\n        'rsat' => 'application/atsc-rsat+xml',\n        'rsd' => 'application/rsd+xml',\n        'rsheet' => 'application/urc-ressheet+xml',\n        'rss' => 'application/rss+xml',\n        'rtf' => 'text/rtf',\n        'rtx' => 'text/richtext',\n        'run' => 'application/x-makeself',\n        'rusd' => 'application/route-usd+xml',\n        'rv' => 'video/vnd.rn-realvideo',\n        's' => 'text/x-asm',\n        's3m' => 'audio/s3m',\n        'saf' => 'application/vnd.yamaha.smaf-audio',\n        'sass' => 'text/x-sass',\n        'sbml' => 'application/sbml+xml',\n        'sc' => 'application/vnd.ibm.secure-container',\n        'scd' => 'application/x-msschedule',\n        'scm' => 'application/vnd.lotus-screencam',\n        'scq' => 'application/scvp-cv-request',\n        'scs' => 'application/scvp-cv-response',\n        'scss' => 'text/x-scss',\n        'scurl' => 'text/vnd.curl.scurl',\n        'sda' => 'application/vnd.stardivision.draw',\n        'sdc' => 'application/vnd.stardivision.calc',\n        'sdd' => 'application/vnd.stardivision.impress',\n        'sdkd' => 'application/vnd.solent.sdkm+xml',\n        'sdkm' => 'application/vnd.solent.sdkm+xml',\n        'sdp' => 'application/sdp',\n        'sdw' => 'application/vnd.stardivision.writer',\n        'sea' => 'application/octet-stream',\n        'see' => 'application/vnd.seemail',\n        'seed' => 'application/vnd.fdsn.seed',\n        'sema' => 'application/vnd.sema',\n        'semd' => 'application/vnd.semd',\n        'semf' => 'application/vnd.semf',\n        'senmlx' => 'application/senml+xml',\n        'sensmlx' => 'application/sensml+xml',\n        'ser' => 'application/java-serialized-object',\n        'setpay' => 'application/set-payment-initiation',\n        'setreg' => 'application/set-registration-initiation',\n        'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',\n        'sfs' => 'application/vnd.spotfire.sfs',\n        'sfv' => 'text/x-sfv',\n        'sgi' => 'image/sgi',\n        'sgl' => 'application/vnd.stardivision.writer-global',\n        'sgm' => 'text/sgml',\n        'sgml' => 'text/sgml',\n        'sh' => 'application/x-sh',\n        'shar' => 'application/x-shar',\n        'shex' => 'text/shex',\n        'shf' => 'application/shf+xml',\n        'shtml' => 'text/html',\n        'sid' => 'image/x-mrsid-image',\n        'sieve' => 'application/sieve',\n        'sig' => 'application/pgp-signature',\n        'sil' => 'audio/silk',\n        'silo' => 'model/mesh',\n        'sis' => 'application/vnd.symbian.install',\n        'sisx' => 'application/vnd.symbian.install',\n        'sit' => 'application/x-stuffit',\n        'sitx' => 'application/x-stuffitx',\n        'siv' => 'application/sieve',\n        'skd' => 'application/vnd.koan',\n        'skm' => 'application/vnd.koan',\n        'skp' => 'application/vnd.koan',\n        'skt' => 'application/vnd.koan',\n        'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',\n        'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',\n        'slim' => 'text/slim',\n        'slm' => 'text/slim',\n        'sls' => 'application/route-s-tsid+xml',\n        'slt' => 'application/vnd.epson.salt',\n        'sm' => 'application/vnd.stepmania.stepchart',\n        'smf' => 'application/vnd.stardivision.math',\n        'smi' => 'application/smil',\n        'smil' => 'application/smil',\n        'smv' => 'video/x-smv',\n        'smzip' => 'application/vnd.stepmania.package',\n        'snd' => 'audio/basic',\n        'snf' => 'application/x-font-snf',\n        'so' => 'application/octet-stream',\n        'spc' => 'application/x-pkcs7-certificates',\n        'spdx' => 'text/spdx',\n        'spf' => 'application/vnd.yamaha.smaf-phrase',\n        'spl' => 'application/x-futuresplash',\n        'spot' => 'text/vnd.in3d.spot',\n        'spp' => 'application/scvp-vp-response',\n        'spq' => 'application/scvp-vp-request',\n        'spx' => 'audio/ogg',\n        'sql' => 'application/x-sql',\n        'src' => 'application/x-wais-source',\n        'srt' => 'application/x-subrip',\n        'sru' => 'application/sru+xml',\n        'srx' => 'application/sparql-results+xml',\n        'ssdl' => 'application/ssdl+xml',\n        'sse' => 'application/vnd.kodak-descriptor',\n        'ssf' => 'application/vnd.epson.ssf',\n        'ssml' => 'application/ssml+xml',\n        'sst' => 'application/octet-stream',\n        'st' => 'application/vnd.sailingtracker.track',\n        'stc' => 'application/vnd.sun.xml.calc.template',\n        'std' => 'application/vnd.sun.xml.draw.template',\n        'step' => 'application/STEP',\n        'stf' => 'application/vnd.wt.stf',\n        'sti' => 'application/vnd.sun.xml.impress.template',\n        'stk' => 'application/hyperstudio',\n        'stl' => 'model/stl',\n        'stp' => 'application/STEP',\n        'stpx' => 'model/step+xml',\n        'stpxz' => 'model/step-xml+zip',\n        'stpz' => 'model/step+zip',\n        'str' => 'application/vnd.pg.format',\n        'stw' => 'application/vnd.sun.xml.writer.template',\n        'styl' => 'text/stylus',\n        'stylus' => 'text/stylus',\n        'sub' => 'text/vnd.dvb.subtitle',\n        'sus' => 'application/vnd.sus-calendar',\n        'susp' => 'application/vnd.sus-calendar',\n        'sv4cpio' => 'application/x-sv4cpio',\n        'sv4crc' => 'application/x-sv4crc',\n        'svc' => 'application/vnd.dvb.service',\n        'svd' => 'application/vnd.svd',\n        'svg' => 'image/svg+xml',\n        'svgz' => 'image/svg+xml',\n        'swa' => 'application/x-director',\n        'swf' => 'application/x-shockwave-flash',\n        'swi' => 'application/vnd.aristanetworks.swi',\n        'swidtag' => 'application/swid+xml',\n        'sxc' => 'application/vnd.sun.xml.calc',\n        'sxd' => 'application/vnd.sun.xml.draw',\n        'sxg' => 'application/vnd.sun.xml.writer.global',\n        'sxi' => 'application/vnd.sun.xml.impress',\n        'sxm' => 'application/vnd.sun.xml.math',\n        'sxw' => 'application/vnd.sun.xml.writer',\n        't' => 'text/troff',\n        't3' => 'application/x-t3vm-image',\n        't38' => 'image/t38',\n        'taglet' => 'application/vnd.mynfc',\n        'tao' => 'application/vnd.tao.intent-module-archive',\n        'tap' => 'image/vnd.tencent.tap',\n        'tar' => 'application/x-tar',\n        'tcap' => 'application/vnd.3gpp2.tcap',\n        'tcl' => 'application/x-tcl',\n        'td' => 'application/urc-targetdesc+xml',\n        'teacher' => 'application/vnd.smart.teacher',\n        'tei' => 'application/tei+xml',\n        'teicorpus' => 'application/tei+xml',\n        'tex' => 'application/x-tex',\n        'texi' => 'application/x-texinfo',\n        'texinfo' => 'application/x-texinfo',\n        'text' => 'text/plain',\n        'tfi' => 'application/thraud+xml',\n        'tfm' => 'application/x-tex-tfm',\n        'tfx' => 'image/tiff-fx',\n        'tga' => 'image/x-tga',\n        'tgz' => 'application/x-tar',\n        'thmx' => 'application/vnd.ms-officetheme',\n        'tif' => 'image/tiff',\n        'tiff' => 'image/tiff',\n        'tk' => 'application/x-tcl',\n        'tmo' => 'application/vnd.tmobile-livetv',\n        'toml' => 'application/toml',\n        'torrent' => 'application/x-bittorrent',\n        'tpl' => 'application/vnd.groove-tool-template',\n        'tpt' => 'application/vnd.trid.tpt',\n        'tr' => 'text/troff',\n        'tra' => 'application/vnd.trueapp',\n        'trig' => 'application/trig',\n        'trm' => 'application/x-msterminal',\n        'ts' => 'video/mp2t',\n        'tsd' => 'application/timestamped-data',\n        'tsv' => 'text/tab-separated-values',\n        'ttc' => 'font/collection',\n        'ttf' => 'font/ttf',\n        'ttl' => 'text/turtle',\n        'ttml' => 'application/ttml+xml',\n        'twd' => 'application/vnd.simtech-mindmapper',\n        'twds' => 'application/vnd.simtech-mindmapper',\n        'txd' => 'application/vnd.genomatix.tuxedo',\n        'txf' => 'application/vnd.mobius.txf',\n        'txt' => 'text/plain',\n        'u3d' => 'model/u3d',\n        'u8dsn' => 'message/global-delivery-status',\n        'u8hdr' => 'message/global-headers',\n        'u8mdn' => 'message/global-disposition-notification',\n        'u8msg' => 'message/global',\n        'u32' => 'application/x-authorware-bin',\n        'ubj' => 'application/ubjson',\n        'udeb' => 'application/x-debian-package',\n        'ufd' => 'application/vnd.ufdl',\n        'ufdl' => 'application/vnd.ufdl',\n        'ulx' => 'application/x-glulx',\n        'umj' => 'application/vnd.umajin',\n        'unityweb' => 'application/vnd.unity',\n        'uo' => 'application/vnd.uoml+xml',\n        'uoml' => 'application/vnd.uoml+xml',\n        'uri' => 'text/uri-list',\n        'uris' => 'text/uri-list',\n        'urls' => 'text/uri-list',\n        'usda' => 'model/vnd.usda',\n        'usdz' => 'model/vnd.usdz+zip',\n        'ustar' => 'application/x-ustar',\n        'utz' => 'application/vnd.uiq.theme',\n        'uu' => 'text/x-uuencode',\n        'uva' => 'audio/vnd.dece.audio',\n        'uvd' => 'application/vnd.dece.data',\n        'uvf' => 'application/vnd.dece.data',\n        'uvg' => 'image/vnd.dece.graphic',\n        'uvh' => 'video/vnd.dece.hd',\n        'uvi' => 'image/vnd.dece.graphic',\n        'uvm' => 'video/vnd.dece.mobile',\n        'uvp' => 'video/vnd.dece.pd',\n        'uvs' => 'video/vnd.dece.sd',\n        'uvt' => 'application/vnd.dece.ttml+xml',\n        'uvu' => 'video/vnd.uvvu.mp4',\n        'uvv' => 'video/vnd.dece.video',\n        'uvva' => 'audio/vnd.dece.audio',\n        'uvvd' => 'application/vnd.dece.data',\n        'uvvf' => 'application/vnd.dece.data',\n        'uvvg' => 'image/vnd.dece.graphic',\n        'uvvh' => 'video/vnd.dece.hd',\n        'uvvi' => 'image/vnd.dece.graphic',\n        'uvvm' => 'video/vnd.dece.mobile',\n        'uvvp' => 'video/vnd.dece.pd',\n        'uvvs' => 'video/vnd.dece.sd',\n        'uvvt' => 'application/vnd.dece.ttml+xml',\n        'uvvu' => 'video/vnd.uvvu.mp4',\n        'uvvv' => 'video/vnd.dece.video',\n        'uvvx' => 'application/vnd.dece.unspecified',\n        'uvvz' => 'application/vnd.dece.zip',\n        'uvx' => 'application/vnd.dece.unspecified',\n        'uvz' => 'application/vnd.dece.zip',\n        'vbox' => 'application/x-virtualbox-vbox',\n        'vbox-extpack' => 'application/x-virtualbox-vbox-extpack',\n        'vcard' => 'text/vcard',\n        'vcd' => 'application/x-cdlink',\n        'vcf' => 'text/x-vcard',\n        'vcg' => 'application/vnd.groove-vcard',\n        'vcs' => 'text/x-vcalendar',\n        'vcx' => 'application/vnd.vcx',\n        'vdi' => 'application/x-virtualbox-vdi',\n        'vds' => 'model/vnd.sap.vds',\n        'vhd' => 'application/x-virtualbox-vhd',\n        'vis' => 'application/vnd.visionary',\n        'viv' => 'video/vnd.vivo',\n        'vlc' => 'application/videolan',\n        'vmdk' => 'application/x-virtualbox-vmdk',\n        'vob' => 'video/x-ms-vob',\n        'vor' => 'application/vnd.stardivision.writer',\n        'vox' => 'application/x-authorware-bin',\n        'vrml' => 'model/vrml',\n        'vsd' => 'application/vnd.visio',\n        'vsf' => 'application/vnd.vsf',\n        'vss' => 'application/vnd.visio',\n        'vst' => 'application/vnd.visio',\n        'vsw' => 'application/vnd.visio',\n        'vtf' => 'image/vnd.valve.source.texture',\n        'vtt' => 'text/vtt',\n        'vtu' => 'model/vnd.vtu',\n        'vxml' => 'application/voicexml+xml',\n        'w3d' => 'application/x-director',\n        'wad' => 'application/x-doom',\n        'wadl' => 'application/vnd.sun.wadl+xml',\n        'war' => 'application/java-archive',\n        'wasm' => 'application/wasm',\n        'wav' => 'audio/x-wav',\n        'wax' => 'audio/x-ms-wax',\n        'wbmp' => 'image/vnd.wap.wbmp',\n        'wbs' => 'application/vnd.criticaltools.wbs+xml',\n        'wbxml' => 'application/wbxml',\n        'wcm' => 'application/vnd.ms-works',\n        'wdb' => 'application/vnd.ms-works',\n        'wdp' => 'image/vnd.ms-photo',\n        'weba' => 'audio/webm',\n        'webapp' => 'application/x-web-app-manifest+json',\n        'webm' => 'video/webm',\n        'webmanifest' => 'application/manifest+json',\n        'webp' => 'image/webp',\n        'wg' => 'application/vnd.pmi.widget',\n        'wgsl' => 'text/wgsl',\n        'wgt' => 'application/widget',\n        'wif' => 'application/watcherinfo+xml',\n        'wks' => 'application/vnd.ms-works',\n        'wm' => 'video/x-ms-wm',\n        'wma' => 'audio/x-ms-wma',\n        'wmd' => 'application/x-ms-wmd',\n        'wmf' => 'image/wmf',\n        'wml' => 'text/vnd.wap.wml',\n        'wmlc' => 'application/wmlc',\n        'wmls' => 'text/vnd.wap.wmlscript',\n        'wmlsc' => 'application/vnd.wap.wmlscriptc',\n        'wmv' => 'video/x-ms-wmv',\n        'wmx' => 'video/x-ms-wmx',\n        'wmz' => 'application/x-msmetafile',\n        'woff' => 'font/woff',\n        'woff2' => 'font/woff2',\n        'word' => 'application/msword',\n        'wpd' => 'application/vnd.wordperfect',\n        'wpl' => 'application/vnd.ms-wpl',\n        'wps' => 'application/vnd.ms-works',\n        'wqd' => 'application/vnd.wqd',\n        'wri' => 'application/x-mswrite',\n        'wrl' => 'model/vrml',\n        'wsc' => 'message/vnd.wfa.wsc',\n        'wsdl' => 'application/wsdl+xml',\n        'wspolicy' => 'application/wspolicy+xml',\n        'wtb' => 'application/vnd.webturbo',\n        'wvx' => 'video/x-ms-wvx',\n        'x3d' => 'model/x3d+xml',\n        'x3db' => 'model/x3d+fastinfoset',\n        'x3dbz' => 'model/x3d+binary',\n        'x3dv' => 'model/x3d-vrml',\n        'x3dvz' => 'model/x3d+vrml',\n        'x3dz' => 'model/x3d+xml',\n        'x32' => 'application/x-authorware-bin',\n        'x_b' => 'model/vnd.parasolid.transmit.binary',\n        'x_t' => 'model/vnd.parasolid.transmit.text',\n        'xaml' => 'application/xaml+xml',\n        'xap' => 'application/x-silverlight-app',\n        'xar' => 'application/vnd.xara',\n        'xav' => 'application/xcap-att+xml',\n        'xbap' => 'application/x-ms-xbap',\n        'xbd' => 'application/vnd.fujixerox.docuworks.binder',\n        'xbm' => 'image/x-xbitmap',\n        'xca' => 'application/xcap-caps+xml',\n        'xcs' => 'application/calendar+xml',\n        'xdf' => 'application/xcap-diff+xml',\n        'xdm' => 'application/vnd.syncml.dm+xml',\n        'xdp' => 'application/vnd.adobe.xdp+xml',\n        'xdssc' => 'application/dssc+xml',\n        'xdw' => 'application/vnd.fujixerox.docuworks',\n        'xel' => 'application/xcap-el+xml',\n        'xenc' => 'application/xenc+xml',\n        'xer' => 'application/patch-ops-error+xml',\n        'xfdf' => 'application/xfdf',\n        'xfdl' => 'application/vnd.xfdl',\n        'xht' => 'application/xhtml+xml',\n        'xhtm' => 'application/vnd.pwg-xhtml-print+xml',\n        'xhtml' => 'application/xhtml+xml',\n        'xhvml' => 'application/xv+xml',\n        'xif' => 'image/vnd.xiff',\n        'xl' => 'application/excel',\n        'xla' => 'application/vnd.ms-excel',\n        'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',\n        'xlc' => 'application/vnd.ms-excel',\n        'xlf' => 'application/xliff+xml',\n        'xlm' => 'application/vnd.ms-excel',\n        'xls' => 'application/vnd.ms-excel',\n        'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n        'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',\n        'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n        'xlt' => 'application/vnd.ms-excel',\n        'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',\n        'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n        'xlw' => 'application/vnd.ms-excel',\n        'xm' => 'audio/xm',\n        'xml' => 'application/xml',\n        'xns' => 'application/xcap-ns+xml',\n        'xo' => 'application/vnd.olpc-sugar',\n        'xop' => 'application/xop+xml',\n        'xpi' => 'application/x-xpinstall',\n        'xpl' => 'application/xproc+xml',\n        'xpm' => 'image/x-xpixmap',\n        'xpr' => 'application/vnd.is-xpr',\n        'xps' => 'application/vnd.ms-xpsdocument',\n        'xpw' => 'application/vnd.intercon.formnet',\n        'xpx' => 'application/vnd.intercon.formnet',\n        'xsd' => 'application/xml',\n        'xsf' => 'application/prs.xsf+xml',\n        'xsl' => 'application/xml',\n        'xslt' => 'application/xslt+xml',\n        'xsm' => 'application/vnd.syncml+xml',\n        'xspf' => 'application/xspf+xml',\n        'xul' => 'application/vnd.mozilla.xul+xml',\n        'xvm' => 'application/xv+xml',\n        'xvml' => 'application/xv+xml',\n        'xwd' => 'image/x-xwindowdump',\n        'xyz' => 'chemical/x-xyz',\n        'xz' => 'application/x-xz',\n        'yaml' => 'text/yaml',\n        'yang' => 'application/yang',\n        'yin' => 'application/yin+xml',\n        'yml' => 'text/yaml',\n        'ymp' => 'text/x-suse-ymp',\n        'z' => 'application/x-compress',\n        'z1' => 'application/x-zmachine',\n        'z2' => 'application/x-zmachine',\n        'z3' => 'application/x-zmachine',\n        'z4' => 'application/x-zmachine',\n        'z5' => 'application/x-zmachine',\n        'z6' => 'application/x-zmachine',\n        'z7' => 'application/x-zmachine',\n        'z8' => 'application/x-zmachine',\n        'zaz' => 'application/vnd.zzazz.deck+xml',\n        'zip' => 'application/zip',\n        'zir' => 'application/vnd.zul',\n        'zirz' => 'application/vnd.zul',\n        'zmm' => 'application/vnd.handheld-entertainment+xml',\n        'zsh' => 'text/x-scriptzsh',\n    ];\n\n    /**\n     * Determines the mimetype of a file by looking at its extension.\n     *\n     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json\n     */\n    public static function fromFilename(string $filename): ?string\n    {\n        return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION));\n    }\n\n    /**\n     * Maps a file extensions to a mimetype.\n     *\n     * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json\n     */\n    public static function fromExtension(string $extension): ?string\n    {\n        return self::MIME_TYPES[strtolower($extension)] ?? null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/MultipartStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream that when read returns bytes for a streaming multipart or\n * multipart/form-data stream.\n */\nfinal class MultipartStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var string */\n    private $boundary;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /**\n     * @param array  $elements Array of associative arrays, each containing a\n     *                         required \"name\" key mapping to the form field,\n     *                         name, a required \"contents\" key mapping to a\n     *                         StreamInterface/resource/string, an optional\n     *                         \"headers\" associative array of custom headers,\n     *                         and an optional \"filename\" key mapping to a\n     *                         string to send as the filename in the part.\n     * @param string $boundary You can optionally provide a specific boundary\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function __construct(array $elements = [], ?string $boundary = null)\n    {\n        $this->boundary = $boundary ?: bin2hex(random_bytes(20));\n        $this->stream = $this->createStream($elements);\n    }\n\n    public function getBoundary(): string\n    {\n        return $this->boundary;\n    }\n\n    public function isWritable(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Get the headers needed before transferring the content of a POST file\n     *\n     * @param string[] $headers\n     */\n    private function getHeaders(array $headers): string\n    {\n        $str = '';\n        foreach ($headers as $key => $value) {\n            $str .= \"{$key}: {$value}\\r\\n\";\n        }\n\n        return \"--{$this->boundary}\\r\\n\".trim($str).\"\\r\\n\\r\\n\";\n    }\n\n    /**\n     * Create the aggregate stream that will be used to upload the POST data\n     */\n    protected function createStream(array $elements = []): StreamInterface\n    {\n        $stream = new AppendStream();\n\n        foreach ($elements as $element) {\n            if (!is_array($element)) {\n                throw new \\UnexpectedValueException('An array is expected');\n            }\n            $this->addElement($stream, $element);\n        }\n\n        // Add the trailing boundary with CRLF\n        $stream->addStream(Utils::streamFor(\"--{$this->boundary}--\\r\\n\"));\n\n        return $stream;\n    }\n\n    private function addElement(AppendStream $stream, array $element): void\n    {\n        foreach (['contents', 'name'] as $key) {\n            if (!array_key_exists($key, $element)) {\n                throw new \\InvalidArgumentException(\"A '{$key}' key is required\");\n            }\n        }\n\n        $element['contents'] = Utils::streamFor($element['contents']);\n\n        if (empty($element['filename'])) {\n            $uri = $element['contents']->getMetadata('uri');\n            if ($uri && \\is_string($uri) && \\substr($uri, 0, 6) !== 'php://' && \\substr($uri, 0, 7) !== 'data://') {\n                $element['filename'] = $uri;\n            }\n        }\n\n        [$body, $headers] = $this->createElement(\n            $element['name'],\n            $element['contents'],\n            $element['filename'] ?? null,\n            $element['headers'] ?? []\n        );\n\n        $stream->addStream(Utils::streamFor($this->getHeaders($headers)));\n        $stream->addStream($body);\n        $stream->addStream(Utils::streamFor(\"\\r\\n\"));\n    }\n\n    /**\n     * @param string[] $headers\n     *\n     * @return array{0: StreamInterface, 1: string[]}\n     */\n    private function createElement(string $name, StreamInterface $stream, ?string $filename, array $headers): array\n    {\n        // Set a default content-disposition header if one was no provided\n        $disposition = self::getHeader($headers, 'content-disposition');\n        if (!$disposition) {\n            $headers['Content-Disposition'] = ($filename === '0' || $filename)\n                ? sprintf(\n                    'form-data; name=\"%s\"; filename=\"%s\"',\n                    $name,\n                    basename($filename)\n                )\n                : \"form-data; name=\\\"{$name}\\\"\";\n        }\n\n        // Set a default content-length header if one was no provided\n        $length = self::getHeader($headers, 'content-length');\n        if (!$length) {\n            if ($length = $stream->getSize()) {\n                $headers['Content-Length'] = (string) $length;\n            }\n        }\n\n        // Set a default Content-Type if one was not supplied\n        $type = self::getHeader($headers, 'content-type');\n        if (!$type && ($filename === '0' || $filename)) {\n            $headers['Content-Type'] = MimeType::fromFilename($filename) ?? 'application/octet-stream';\n        }\n\n        return [$stream, $headers];\n    }\n\n    /**\n     * @param string[] $headers\n     */\n    private static function getHeader(array $headers, string $key): ?string\n    {\n        $lowercaseHeader = strtolower($key);\n        foreach ($headers as $k => $v) {\n            if (strtolower((string) $k) === $lowercaseHeader) {\n                return $v;\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/NoSeekStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator that prevents a stream from being seeked.\n */\nfinal class NoSeekStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        throw new \\RuntimeException('Cannot seek a NoSeekStream');\n    }\n\n    public function isSeekable(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/PumpStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Provides a read only stream that pumps data from a PHP callable.\n *\n * When invoking the provided callable, the PumpStream will pass the amount of\n * data requested to read to the callable. The callable can choose to ignore\n * this value and return fewer or more bytes than requested. Any extra data\n * returned by the provided callable is buffered internally until drained using\n * the read() function of the PumpStream. The provided callable MUST return\n * false when there is no more data to read.\n */\nfinal class PumpStream implements StreamInterface\n{\n    /** @var callable(int): (string|false|null)|null */\n    private $source;\n\n    /** @var int|null */\n    private $size;\n\n    /** @var int */\n    private $tellPos = 0;\n\n    /** @var array */\n    private $metadata;\n\n    /** @var BufferStream */\n    private $buffer;\n\n    /**\n     * @param callable(int): (string|false|null)  $source  Source of the stream data. The callable MAY\n     *                                                     accept an integer argument used to control the\n     *                                                     amount of data to return. The callable MUST\n     *                                                     return a string when called, or false|null on error\n     *                                                     or EOF.\n     * @param array{size?: int, metadata?: array} $options Stream options:\n     *                                                     - metadata: Hash of metadata to use with stream.\n     *                                                     - size: Size of the stream, if known.\n     */\n    public function __construct(callable $source, array $options = [])\n    {\n        $this->source = $source;\n        $this->size = $options['size'] ?? null;\n        $this->metadata = $options['metadata'] ?? [];\n        $this->buffer = new BufferStream();\n    }\n\n    public function __toString(): string\n    {\n        try {\n            return Utils::copyToString($this);\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n\n            return '';\n        }\n    }\n\n    public function close(): void\n    {\n        $this->detach();\n    }\n\n    public function detach()\n    {\n        $this->tellPos = 0;\n        $this->source = null;\n\n        return null;\n    }\n\n    public function getSize(): ?int\n    {\n        return $this->size;\n    }\n\n    public function tell(): int\n    {\n        return $this->tellPos;\n    }\n\n    public function eof(): bool\n    {\n        return $this->source === null;\n    }\n\n    public function isSeekable(): bool\n    {\n        return false;\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        throw new \\RuntimeException('Cannot seek a PumpStream');\n    }\n\n    public function isWritable(): bool\n    {\n        return false;\n    }\n\n    public function write($string): int\n    {\n        throw new \\RuntimeException('Cannot write to a PumpStream');\n    }\n\n    public function isReadable(): bool\n    {\n        return true;\n    }\n\n    public function read($length): string\n    {\n        $data = $this->buffer->read($length);\n        $readLen = strlen($data);\n        $this->tellPos += $readLen;\n        $remaining = $length - $readLen;\n\n        if ($remaining) {\n            $this->pump($remaining);\n            $data .= $this->buffer->read($remaining);\n            $this->tellPos += strlen($data) - $readLen;\n        }\n\n        return $data;\n    }\n\n    public function getContents(): string\n    {\n        $result = '';\n        while (!$this->eof()) {\n            $result .= $this->read(1000000);\n        }\n\n        return $result;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        if (!$key) {\n            return $this->metadata;\n        }\n\n        return $this->metadata[$key] ?? null;\n    }\n\n    private function pump(int $length): void\n    {\n        if ($this->source !== null) {\n            do {\n                $data = ($this->source)($length);\n                if ($data === false || $data === null) {\n                    $this->source = null;\n\n                    return;\n                }\n                $this->buffer->write($data);\n                $length -= strlen($data);\n            } while ($length > 0);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Query.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nfinal class Query\n{\n    /**\n     * Parse a query string into an associative array.\n     *\n     * If multiple values are found for the same key, the value of that key\n     * value pair will become an array. This function does not parse nested\n     * PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`\n     * will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.\n     *\n     * @param string   $str         Query string to parse\n     * @param int|bool $urlEncoding How the query string is encoded\n     */\n    public static function parse(string $str, $urlEncoding = true): array\n    {\n        $result = [];\n\n        if ($str === '') {\n            return $result;\n        }\n\n        if ($urlEncoding === true) {\n            $decoder = function ($value) {\n                return rawurldecode(str_replace('+', ' ', (string) $value));\n            };\n        } elseif ($urlEncoding === PHP_QUERY_RFC3986) {\n            $decoder = 'rawurldecode';\n        } elseif ($urlEncoding === PHP_QUERY_RFC1738) {\n            $decoder = 'urldecode';\n        } else {\n            $decoder = function ($str) {\n                return $str;\n            };\n        }\n\n        foreach (explode('&', $str) as $kvp) {\n            $parts = explode('=', $kvp, 2);\n            $key = $decoder($parts[0]);\n            $value = isset($parts[1]) ? $decoder($parts[1]) : null;\n            if (!array_key_exists($key, $result)) {\n                $result[$key] = $value;\n            } else {\n                if (!is_array($result[$key])) {\n                    $result[$key] = [$result[$key]];\n                }\n                $result[$key][] = $value;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Build a query string from an array of key value pairs.\n     *\n     * This function can use the return value of `parse()` to build a query\n     * string. This function does not modify the provided keys when an array is\n     * encountered (like `http_build_query()` would).\n     *\n     * @param array     $params           Query string parameters.\n     * @param int|false $encoding         Set to false to not encode,\n     *                                    PHP_QUERY_RFC3986 to encode using\n     *                                    RFC3986, or PHP_QUERY_RFC1738 to\n     *                                    encode using RFC1738.\n     * @param bool      $treatBoolsAsInts Set to true to encode as 0/1, and\n     *                                    false as false/true.\n     */\n    public static function build(array $params, $encoding = PHP_QUERY_RFC3986, bool $treatBoolsAsInts = true): string\n    {\n        if (!$params) {\n            return '';\n        }\n\n        if ($encoding === false) {\n            $encoder = function (string $str): string {\n                return $str;\n            };\n        } elseif ($encoding === PHP_QUERY_RFC3986) {\n            $encoder = 'rawurlencode';\n        } elseif ($encoding === PHP_QUERY_RFC1738) {\n            $encoder = 'urlencode';\n        } else {\n            throw new \\InvalidArgumentException('Invalid type');\n        }\n\n        $castBool = $treatBoolsAsInts ? static function ($v) { return (int) $v; } : static function ($v) { return $v ? 'true' : 'false'; };\n\n        $qs = '';\n        foreach ($params as $k => $v) {\n            $k = $encoder((string) $k);\n            if (!is_array($v)) {\n                $qs .= $k;\n                $v = is_bool($v) ? $castBool($v) : $v;\n                if ($v !== null) {\n                    $qs .= '='.$encoder((string) $v);\n                }\n                $qs .= '&';\n            } else {\n                foreach ($v as $vv) {\n                    $qs .= $k;\n                    $vv = is_bool($vv) ? $castBool($vv) : $vv;\n                    if ($vv !== null) {\n                        $qs .= '='.$encoder((string) $vv);\n                    }\n                    $qs .= '&';\n                }\n            }\n        }\n\n        return $qs ? (string) substr($qs, 0, -1) : '';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Request.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * PSR-7 request implementation.\n */\nclass Request implements RequestInterface\n{\n    use MessageTrait;\n\n    /** @var string */\n    private $method;\n\n    /** @var string|null */\n    private $requestTarget;\n\n    /** @var UriInterface */\n    private $uri;\n\n    /**\n     * @param string                               $method  HTTP method\n     * @param string|UriInterface                  $uri     URI\n     * @param (string|string[])[]                  $headers Request headers\n     * @param string|resource|StreamInterface|null $body    Request body\n     * @param string                               $version Protocol version\n     */\n    public function __construct(\n        string $method,\n        $uri,\n        array $headers = [],\n        $body = null,\n        string $version = '1.1'\n    ) {\n        $this->assertMethod($method);\n        if (!($uri instanceof UriInterface)) {\n            $uri = new Uri($uri);\n        }\n\n        $this->method = strtoupper($method);\n        $this->uri = $uri;\n        $this->setHeaders($headers);\n        $this->protocol = $version;\n\n        if (!isset($this->headerNames['host'])) {\n            $this->updateHostFromUri();\n        }\n\n        if ($body !== '' && $body !== null) {\n            $this->stream = Utils::streamFor($body);\n        }\n    }\n\n    public function getRequestTarget(): string\n    {\n        if ($this->requestTarget !== null) {\n            return $this->requestTarget;\n        }\n\n        $target = $this->uri->getPath();\n        if ($target === '') {\n            $target = '/';\n        }\n        if ($this->uri->getQuery() != '') {\n            $target .= '?'.$this->uri->getQuery();\n        }\n\n        return $target;\n    }\n\n    public function withRequestTarget($requestTarget): RequestInterface\n    {\n        if (preg_match('#\\s#', $requestTarget)) {\n            throw new InvalidArgumentException(\n                'Invalid request target provided; cannot contain whitespace'\n            );\n        }\n\n        $new = clone $this;\n        $new->requestTarget = $requestTarget;\n\n        return $new;\n    }\n\n    public function getMethod(): string\n    {\n        return $this->method;\n    }\n\n    public function withMethod($method): RequestInterface\n    {\n        $this->assertMethod($method);\n        $new = clone $this;\n        $new->method = strtoupper($method);\n\n        return $new;\n    }\n\n    public function getUri(): UriInterface\n    {\n        return $this->uri;\n    }\n\n    public function withUri(UriInterface $uri, $preserveHost = false): RequestInterface\n    {\n        if ($uri === $this->uri) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->uri = $uri;\n\n        if (!$preserveHost || !isset($this->headerNames['host'])) {\n            $new->updateHostFromUri();\n        }\n\n        return $new;\n    }\n\n    private function updateHostFromUri(): void\n    {\n        $host = $this->uri->getHost();\n\n        if ($host == '') {\n            return;\n        }\n\n        if (($port = $this->uri->getPort()) !== null) {\n            $host .= ':'.$port;\n        }\n\n        if (isset($this->headerNames['host'])) {\n            $header = $this->headerNames['host'];\n        } else {\n            $header = 'Host';\n            $this->headerNames['host'] = 'Host';\n        }\n        // Ensure Host is the first header.\n        // See: https://datatracker.ietf.org/doc/html/rfc7230#section-5.4\n        $this->headers = [$header => [$host]] + $this->headers;\n    }\n\n    /**\n     * @param mixed $method\n     */\n    private function assertMethod($method): void\n    {\n        if (!is_string($method) || $method === '') {\n            throw new InvalidArgumentException('Method must be a non-empty string.');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Response.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * PSR-7 response implementation.\n */\nclass Response implements ResponseInterface\n{\n    use MessageTrait;\n\n    /** Map of standard HTTP status code/reason phrases */\n    private const PHRASES = [\n        100 => 'Continue',\n        101 => 'Switching Protocols',\n        102 => 'Processing',\n        200 => 'OK',\n        201 => 'Created',\n        202 => 'Accepted',\n        203 => 'Non-Authoritative Information',\n        204 => 'No Content',\n        205 => 'Reset Content',\n        206 => 'Partial Content',\n        207 => 'Multi-status',\n        208 => 'Already Reported',\n        300 => 'Multiple Choices',\n        301 => 'Moved Permanently',\n        302 => 'Found',\n        303 => 'See Other',\n        304 => 'Not Modified',\n        305 => 'Use Proxy',\n        306 => 'Switch Proxy',\n        307 => 'Temporary Redirect',\n        308 => 'Permanent Redirect',\n        400 => 'Bad Request',\n        401 => 'Unauthorized',\n        402 => 'Payment Required',\n        403 => 'Forbidden',\n        404 => 'Not Found',\n        405 => 'Method Not Allowed',\n        406 => 'Not Acceptable',\n        407 => 'Proxy Authentication Required',\n        408 => 'Request Time-out',\n        409 => 'Conflict',\n        410 => 'Gone',\n        411 => 'Length Required',\n        412 => 'Precondition Failed',\n        413 => 'Request Entity Too Large',\n        414 => 'Request-URI Too Large',\n        415 => 'Unsupported Media Type',\n        416 => 'Requested range not satisfiable',\n        417 => 'Expectation Failed',\n        418 => 'I\\'m a teapot',\n        422 => 'Unprocessable Entity',\n        423 => 'Locked',\n        424 => 'Failed Dependency',\n        425 => 'Unordered Collection',\n        426 => 'Upgrade Required',\n        428 => 'Precondition Required',\n        429 => 'Too Many Requests',\n        431 => 'Request Header Fields Too Large',\n        451 => 'Unavailable For Legal Reasons',\n        500 => 'Internal Server Error',\n        501 => 'Not Implemented',\n        502 => 'Bad Gateway',\n        503 => 'Service Unavailable',\n        504 => 'Gateway Time-out',\n        505 => 'HTTP Version not supported',\n        506 => 'Variant Also Negotiates',\n        507 => 'Insufficient Storage',\n        508 => 'Loop Detected',\n        510 => 'Not Extended',\n        511 => 'Network Authentication Required',\n    ];\n\n    /** @var string */\n    private $reasonPhrase;\n\n    /** @var int */\n    private $statusCode;\n\n    /**\n     * @param int                                  $status  Status code\n     * @param (string|string[])[]                  $headers Response headers\n     * @param string|resource|StreamInterface|null $body    Response body\n     * @param string                               $version Protocol version\n     * @param string|null                          $reason  Reason phrase (when empty a default will be used based on the status code)\n     */\n    public function __construct(\n        int $status = 200,\n        array $headers = [],\n        $body = null,\n        string $version = '1.1',\n        ?string $reason = null\n    ) {\n        $this->assertStatusCodeRange($status);\n\n        $this->statusCode = $status;\n\n        if ($body !== '' && $body !== null) {\n            $this->stream = Utils::streamFor($body);\n        }\n\n        $this->setHeaders($headers);\n        if ($reason == '' && isset(self::PHRASES[$this->statusCode])) {\n            $this->reasonPhrase = self::PHRASES[$this->statusCode];\n        } else {\n            $this->reasonPhrase = (string) $reason;\n        }\n\n        $this->protocol = $version;\n    }\n\n    public function getStatusCode(): int\n    {\n        return $this->statusCode;\n    }\n\n    public function getReasonPhrase(): string\n    {\n        return $this->reasonPhrase;\n    }\n\n    public function withStatus($code, $reasonPhrase = ''): ResponseInterface\n    {\n        $this->assertStatusCodeIsInteger($code);\n        $code = (int) $code;\n        $this->assertStatusCodeRange($code);\n\n        $new = clone $this;\n        $new->statusCode = $code;\n        if ($reasonPhrase == '' && isset(self::PHRASES[$new->statusCode])) {\n            $reasonPhrase = self::PHRASES[$new->statusCode];\n        }\n        $new->reasonPhrase = (string) $reasonPhrase;\n\n        return $new;\n    }\n\n    /**\n     * @param mixed $statusCode\n     */\n    private function assertStatusCodeIsInteger($statusCode): void\n    {\n        if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) {\n            throw new \\InvalidArgumentException('Status code must be an integer value.');\n        }\n    }\n\n    private function assertStatusCodeRange(int $statusCode): void\n    {\n        if ($statusCode < 100 || $statusCode >= 600) {\n            throw new \\InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Rfc7230.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\n/**\n * @internal\n */\nfinal class Rfc7230\n{\n    /**\n     * Header related regular expressions (based on amphp/http package)\n     *\n     * Note: header delimiter (\\r\\n) is modified to \\r?\\n to accept line feed only delimiters for BC reasons.\n     *\n     * @see https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15\n     *\n     * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE\n     */\n    public const HEADER_REGEX = \"(^([^()<>@,;:\\\\\\\"/[\\]?={}\\x01-\\x20\\x7F]++):[ \\t]*+((?:[ \\t]*+[\\x21-\\x7E\\x80-\\xFF]++)*+)[ \\t]*+\\r?\\n)m\";\n    public const HEADER_FOLD_REGEX = \"(\\r?\\n[ \\t]++)\";\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/ServerRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Server-side HTTP request\n *\n * Extends the Request definition to add methods for accessing incoming data,\n * specifically server parameters, cookies, matched path parameters, query\n * string arguments, body parameters, and upload file information.\n *\n * \"Attributes\" are discovered via decomposing the request (and usually\n * specifically the URI path), and typically will be injected by the application.\n *\n * Requests are considered immutable; all methods that might change state are\n * implemented such that they retain the internal state of the current\n * message and return a new instance that contains the changed state.\n */\nclass ServerRequest extends Request implements ServerRequestInterface\n{\n    /**\n     * @var array\n     */\n    private $attributes = [];\n\n    /**\n     * @var array\n     */\n    private $cookieParams = [];\n\n    /**\n     * @var array|object|null\n     */\n    private $parsedBody;\n\n    /**\n     * @var array\n     */\n    private $queryParams = [];\n\n    /**\n     * @var array\n     */\n    private $serverParams;\n\n    /**\n     * @var array\n     */\n    private $uploadedFiles = [];\n\n    /**\n     * @param string                               $method       HTTP method\n     * @param string|UriInterface                  $uri          URI\n     * @param (string|string[])[]                  $headers      Request headers\n     * @param string|resource|StreamInterface|null $body         Request body\n     * @param string                               $version      Protocol version\n     * @param array                                $serverParams Typically the $_SERVER superglobal\n     */\n    public function __construct(\n        string $method,\n        $uri,\n        array $headers = [],\n        $body = null,\n        string $version = '1.1',\n        array $serverParams = []\n    ) {\n        $this->serverParams = $serverParams;\n\n        parent::__construct($method, $uri, $headers, $body, $version);\n    }\n\n    /**\n     * Return an UploadedFile instance array.\n     *\n     * @param array $files An array which respect $_FILES structure\n     *\n     * @throws InvalidArgumentException for unrecognized values\n     */\n    public static function normalizeFiles(array $files): array\n    {\n        $normalized = [];\n\n        foreach ($files as $key => $value) {\n            if ($value instanceof UploadedFileInterface) {\n                $normalized[$key] = $value;\n            } elseif (is_array($value) && isset($value['tmp_name'])) {\n                $normalized[$key] = self::createUploadedFileFromSpec($value);\n            } elseif (is_array($value)) {\n                $normalized[$key] = self::normalizeFiles($value);\n                continue;\n            } else {\n                throw new InvalidArgumentException('Invalid value in files specification');\n            }\n        }\n\n        return $normalized;\n    }\n\n    /**\n     * Create and return an UploadedFile instance from a $_FILES specification.\n     *\n     * If the specification represents an array of values, this method will\n     * delegate to normalizeNestedFileSpec() and return that return value.\n     *\n     * @param array $value $_FILES struct\n     *\n     * @return UploadedFileInterface|UploadedFileInterface[]\n     */\n    private static function createUploadedFileFromSpec(array $value)\n    {\n        if (is_array($value['tmp_name'])) {\n            return self::normalizeNestedFileSpec($value);\n        }\n\n        return new UploadedFile(\n            $value['tmp_name'],\n            (int) $value['size'],\n            (int) $value['error'],\n            $value['name'],\n            $value['type']\n        );\n    }\n\n    /**\n     * Normalize an array of file specifications.\n     *\n     * Loops through all nested files and returns a normalized array of\n     * UploadedFileInterface instances.\n     *\n     * @return UploadedFileInterface[]\n     */\n    private static function normalizeNestedFileSpec(array $files = []): array\n    {\n        $normalizedFiles = [];\n\n        foreach (array_keys($files['tmp_name']) as $key) {\n            $spec = [\n                'tmp_name' => $files['tmp_name'][$key],\n                'size' => $files['size'][$key] ?? null,\n                'error' => $files['error'][$key] ?? null,\n                'name' => $files['name'][$key] ?? null,\n                'type' => $files['type'][$key] ?? null,\n            ];\n            $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);\n        }\n\n        return $normalizedFiles;\n    }\n\n    /**\n     * Return a ServerRequest populated with superglobals:\n     * $_GET\n     * $_POST\n     * $_COOKIE\n     * $_FILES\n     * $_SERVER\n     */\n    public static function fromGlobals(): ServerRequestInterface\n    {\n        $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';\n        $headers = getallheaders();\n        $uri = self::getUriFromGlobals();\n        $body = new CachingStream(new LazyOpenStream('php://input', 'r+'));\n        $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1';\n\n        $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER);\n\n        return $serverRequest\n            ->withCookieParams($_COOKIE)\n            ->withQueryParams($_GET)\n            ->withParsedBody($_POST)\n            ->withUploadedFiles(self::normalizeFiles($_FILES));\n    }\n\n    private static function extractHostAndPortFromAuthority(string $authority): array\n    {\n        $uri = 'http://'.$authority;\n        $parts = parse_url($uri);\n        if (false === $parts) {\n            return [null, null];\n        }\n\n        $host = $parts['host'] ?? null;\n        $port = $parts['port'] ?? null;\n\n        return [$host, $port];\n    }\n\n    /**\n     * Get a Uri populated with values from $_SERVER.\n     */\n    public static function getUriFromGlobals(): UriInterface\n    {\n        $uri = new Uri('');\n\n        $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http');\n\n        $hasPort = false;\n        if (isset($_SERVER['HTTP_HOST'])) {\n            [$host, $port] = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']);\n            if ($host !== null) {\n                $uri = $uri->withHost($host);\n            }\n\n            if ($port !== null) {\n                $hasPort = true;\n                $uri = $uri->withPort($port);\n            }\n        } elseif (isset($_SERVER['SERVER_NAME'])) {\n            $uri = $uri->withHost($_SERVER['SERVER_NAME']);\n        } elseif (isset($_SERVER['SERVER_ADDR'])) {\n            $uri = $uri->withHost($_SERVER['SERVER_ADDR']);\n        }\n\n        if (!$hasPort && isset($_SERVER['SERVER_PORT'])) {\n            $uri = $uri->withPort($_SERVER['SERVER_PORT']);\n        }\n\n        $hasQuery = false;\n        if (isset($_SERVER['REQUEST_URI'])) {\n            $requestUriParts = explode('?', $_SERVER['REQUEST_URI'], 2);\n            $uri = $uri->withPath($requestUriParts[0]);\n            if (isset($requestUriParts[1])) {\n                $hasQuery = true;\n                $uri = $uri->withQuery($requestUriParts[1]);\n            }\n        }\n\n        if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) {\n            $uri = $uri->withQuery($_SERVER['QUERY_STRING']);\n        }\n\n        return $uri;\n    }\n\n    public function getServerParams(): array\n    {\n        return $this->serverParams;\n    }\n\n    public function getUploadedFiles(): array\n    {\n        return $this->uploadedFiles;\n    }\n\n    public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->uploadedFiles = $uploadedFiles;\n\n        return $new;\n    }\n\n    public function getCookieParams(): array\n    {\n        return $this->cookieParams;\n    }\n\n    public function withCookieParams(array $cookies): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->cookieParams = $cookies;\n\n        return $new;\n    }\n\n    public function getQueryParams(): array\n    {\n        return $this->queryParams;\n    }\n\n    public function withQueryParams(array $query): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->queryParams = $query;\n\n        return $new;\n    }\n\n    /**\n     * @return array|object|null\n     */\n    public function getParsedBody()\n    {\n        return $this->parsedBody;\n    }\n\n    public function withParsedBody($data): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->parsedBody = $data;\n\n        return $new;\n    }\n\n    public function getAttributes(): array\n    {\n        return $this->attributes;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getAttribute($attribute, $default = null)\n    {\n        if (false === array_key_exists($attribute, $this->attributes)) {\n            return $default;\n        }\n\n        return $this->attributes[$attribute];\n    }\n\n    public function withAttribute($attribute, $value): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->attributes[$attribute] = $value;\n\n        return $new;\n    }\n\n    public function withoutAttribute($attribute): ServerRequestInterface\n    {\n        if (false === array_key_exists($attribute, $this->attributes)) {\n            return $this;\n        }\n\n        $new = clone $this;\n        unset($new->attributes[$attribute]);\n\n        return $new;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Stream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * PHP stream implementation.\n */\nclass Stream implements StreamInterface\n{\n    /**\n     * @see https://www.php.net/manual/en/function.fopen.php\n     * @see https://www.php.net/manual/en/function.gzopen.php\n     */\n    private const READABLE_MODES = '/r|a\\+|ab\\+|w\\+|wb\\+|x\\+|xb\\+|c\\+|cb\\+/';\n    private const WRITABLE_MODES = '/a|w|r\\+|rb\\+|rw|x|c/';\n\n    /** @var resource */\n    private $stream;\n    /** @var int|null */\n    private $size;\n    /** @var bool */\n    private $seekable;\n    /** @var bool */\n    private $readable;\n    /** @var bool */\n    private $writable;\n    /** @var string|null */\n    private $uri;\n    /** @var mixed[] */\n    private $customMetadata;\n\n    /**\n     * This constructor accepts an associative array of options.\n     *\n     * - size: (int) If a read stream would otherwise have an indeterminate\n     *   size, but the size is known due to foreknowledge, then you can\n     *   provide that size, in bytes.\n     * - metadata: (array) Any additional metadata to return when the metadata\n     *   of the stream is accessed.\n     *\n     * @param resource                            $stream  Stream resource to wrap.\n     * @param array{size?: int, metadata?: array} $options Associative array of options.\n     *\n     * @throws \\InvalidArgumentException if the stream is not a stream resource\n     */\n    public function __construct($stream, array $options = [])\n    {\n        if (!is_resource($stream)) {\n            throw new \\InvalidArgumentException('Stream must be a resource');\n        }\n\n        if (isset($options['size'])) {\n            $this->size = $options['size'];\n        }\n\n        $this->customMetadata = $options['metadata'] ?? [];\n        $this->stream = $stream;\n        $meta = stream_get_meta_data($this->stream);\n        $this->seekable = $meta['seekable'];\n        $this->readable = (bool) preg_match(self::READABLE_MODES, $meta['mode']);\n        $this->writable = (bool) preg_match(self::WRITABLE_MODES, $meta['mode']);\n        $this->uri = $this->getMetadata('uri');\n    }\n\n    /**\n     * Closes the stream when the destructed\n     */\n    public function __destruct()\n    {\n        $this->close();\n    }\n\n    public function __toString(): string\n    {\n        try {\n            if ($this->isSeekable()) {\n                $this->seek(0);\n            }\n\n            return $this->getContents();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n\n            return '';\n        }\n    }\n\n    public function getContents(): string\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n\n        if (!$this->readable) {\n            throw new \\RuntimeException('Cannot read from non-readable stream');\n        }\n\n        return Utils::tryGetContents($this->stream);\n    }\n\n    public function close(): void\n    {\n        if (isset($this->stream)) {\n            if (is_resource($this->stream)) {\n                fclose($this->stream);\n            }\n            $this->detach();\n        }\n    }\n\n    public function detach()\n    {\n        if (!isset($this->stream)) {\n            return null;\n        }\n\n        $result = $this->stream;\n        unset($this->stream);\n        $this->size = $this->uri = null;\n        $this->readable = $this->writable = $this->seekable = false;\n\n        return $result;\n    }\n\n    public function getSize(): ?int\n    {\n        if ($this->size !== null) {\n            return $this->size;\n        }\n\n        if (!isset($this->stream)) {\n            return null;\n        }\n\n        // Clear the stat cache if the stream has a URI\n        if ($this->uri) {\n            clearstatcache(true, $this->uri);\n        }\n\n        $stats = fstat($this->stream);\n        if (is_array($stats) && isset($stats['size'])) {\n            $this->size = $stats['size'];\n\n            return $this->size;\n        }\n\n        return null;\n    }\n\n    public function isReadable(): bool\n    {\n        return $this->readable;\n    }\n\n    public function isWritable(): bool\n    {\n        return $this->writable;\n    }\n\n    public function isSeekable(): bool\n    {\n        return $this->seekable;\n    }\n\n    public function eof(): bool\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n\n        return feof($this->stream);\n    }\n\n    public function tell(): int\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n\n        $result = ftell($this->stream);\n\n        if ($result === false) {\n            throw new \\RuntimeException('Unable to determine stream position');\n        }\n\n        return $result;\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        $whence = (int) $whence;\n\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n        if (!$this->seekable) {\n            throw new \\RuntimeException('Stream is not seekable');\n        }\n        if (fseek($this->stream, $offset, $whence) === -1) {\n            throw new \\RuntimeException('Unable to seek to stream position '\n                .$offset.' with whence '.var_export($whence, true));\n        }\n    }\n\n    public function read($length): string\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n        if (!$this->readable) {\n            throw new \\RuntimeException('Cannot read from non-readable stream');\n        }\n        if ($length < 0) {\n            throw new \\RuntimeException('Length parameter cannot be negative');\n        }\n\n        if (0 === $length) {\n            return '';\n        }\n\n        try {\n            $string = fread($this->stream, $length);\n        } catch (\\Exception $e) {\n            throw new \\RuntimeException('Unable to read from stream', 0, $e);\n        }\n\n        if (false === $string) {\n            throw new \\RuntimeException('Unable to read from stream');\n        }\n\n        return $string;\n    }\n\n    public function write($string): int\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n        if (!$this->writable) {\n            throw new \\RuntimeException('Cannot write to a non-writable stream');\n        }\n\n        // We can't know the size after writing anything\n        $this->size = null;\n        $result = fwrite($this->stream, $string);\n\n        if ($result === false) {\n            throw new \\RuntimeException('Unable to write to stream');\n        }\n\n        return $result;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        if (!isset($this->stream)) {\n            return $key ? null : [];\n        } elseif (!$key) {\n            return $this->customMetadata + stream_get_meta_data($this->stream);\n        } elseif (isset($this->customMetadata[$key])) {\n            return $this->customMetadata[$key];\n        }\n\n        $meta = stream_get_meta_data($this->stream);\n\n        return $meta[$key] ?? null;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator trait\n *\n * @property StreamInterface $stream\n */\ntrait StreamDecoratorTrait\n{\n    /**\n     * @param StreamInterface $stream Stream to decorate\n     */\n    public function __construct(StreamInterface $stream)\n    {\n        $this->stream = $stream;\n    }\n\n    /**\n     * Magic method used to create a new stream if streams are not added in\n     * the constructor of a decorator (e.g., LazyOpenStream).\n     *\n     * @return StreamInterface\n     */\n    public function __get(string $name)\n    {\n        if ($name === 'stream') {\n            $this->stream = $this->createStream();\n\n            return $this->stream;\n        }\n\n        throw new \\UnexpectedValueException(\"$name not found on class\");\n    }\n\n    public function __toString(): string\n    {\n        try {\n            if ($this->isSeekable()) {\n                $this->seek(0);\n            }\n\n            return $this->getContents();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n\n            return '';\n        }\n    }\n\n    public function getContents(): string\n    {\n        return Utils::copyToString($this);\n    }\n\n    /**\n     * Allow decorators to implement custom methods\n     *\n     * @return mixed\n     */\n    public function __call(string $method, array $args)\n    {\n        /** @var callable $callable */\n        $callable = [$this->stream, $method];\n        $result = ($callable)(...$args);\n\n        // Always return the wrapped object if the result is a return $this\n        return $result === $this->stream ? $this : $result;\n    }\n\n    public function close(): void\n    {\n        $this->stream->close();\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        return $this->stream->getMetadata($key);\n    }\n\n    public function detach()\n    {\n        return $this->stream->detach();\n    }\n\n    public function getSize(): ?int\n    {\n        return $this->stream->getSize();\n    }\n\n    public function eof(): bool\n    {\n        return $this->stream->eof();\n    }\n\n    public function tell(): int\n    {\n        return $this->stream->tell();\n    }\n\n    public function isReadable(): bool\n    {\n        return $this->stream->isReadable();\n    }\n\n    public function isWritable(): bool\n    {\n        return $this->stream->isWritable();\n    }\n\n    public function isSeekable(): bool\n    {\n        return $this->stream->isSeekable();\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        $this->stream->seek($offset, $whence);\n    }\n\n    public function read($length): string\n    {\n        return $this->stream->read($length);\n    }\n\n    public function write($string): int\n    {\n        return $this->stream->write($string);\n    }\n\n    /**\n     * Implement in subclasses to dynamically create streams when requested.\n     *\n     * @throws \\BadMethodCallException\n     */\n    protected function createStream(): StreamInterface\n    {\n        throw new \\BadMethodCallException('Not implemented');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/StreamWrapper.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Converts Guzzle streams into PHP stream resources.\n *\n * @see https://www.php.net/streamwrapper\n */\nfinal class StreamWrapper\n{\n    /** @var resource */\n    public $context;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /** @var string r, r+, or w */\n    private $mode;\n\n    /**\n     * Returns a resource representing the stream.\n     *\n     * @param StreamInterface $stream The stream to get a resource for\n     *\n     * @return resource\n     *\n     * @throws \\InvalidArgumentException if stream is not readable or writable\n     */\n    public static function getResource(StreamInterface $stream)\n    {\n        self::register();\n\n        if ($stream->isReadable()) {\n            $mode = $stream->isWritable() ? 'r+' : 'r';\n        } elseif ($stream->isWritable()) {\n            $mode = 'w';\n        } else {\n            throw new \\InvalidArgumentException('The stream must be readable, '\n                .'writable, or both.');\n        }\n\n        return fopen('guzzle://stream', $mode, false, self::createStreamContext($stream));\n    }\n\n    /**\n     * Creates a stream context that can be used to open a stream as a php stream resource.\n     *\n     * @return resource\n     */\n    public static function createStreamContext(StreamInterface $stream)\n    {\n        return stream_context_create([\n            'guzzle' => ['stream' => $stream],\n        ]);\n    }\n\n    /**\n     * Registers the stream wrapper if needed\n     */\n    public static function register(): void\n    {\n        if (!in_array('guzzle', stream_get_wrappers())) {\n            stream_wrapper_register('guzzle', __CLASS__);\n        }\n    }\n\n    public function stream_open(string $path, string $mode, int $options, ?string &$opened_path = null): bool\n    {\n        $options = stream_context_get_options($this->context);\n\n        if (!isset($options['guzzle']['stream'])) {\n            return false;\n        }\n\n        $this->mode = $mode;\n        $this->stream = $options['guzzle']['stream'];\n\n        return true;\n    }\n\n    public function stream_read(int $count): string\n    {\n        return $this->stream->read($count);\n    }\n\n    public function stream_write(string $data): int\n    {\n        return $this->stream->write($data);\n    }\n\n    public function stream_tell(): int\n    {\n        return $this->stream->tell();\n    }\n\n    public function stream_eof(): bool\n    {\n        return $this->stream->eof();\n    }\n\n    public function stream_seek(int $offset, int $whence): bool\n    {\n        $this->stream->seek($offset, $whence);\n\n        return true;\n    }\n\n    /**\n     * @return resource|false\n     */\n    public function stream_cast(int $cast_as)\n    {\n        $stream = clone $this->stream;\n        $resource = $stream->detach();\n\n        return $resource ?? false;\n    }\n\n    /**\n     * @return array{\n     *   dev: int,\n     *   ino: int,\n     *   mode: int,\n     *   nlink: int,\n     *   uid: int,\n     *   gid: int,\n     *   rdev: int,\n     *   size: int,\n     *   atime: int,\n     *   mtime: int,\n     *   ctime: int,\n     *   blksize: int,\n     *   blocks: int\n     * }|false\n     */\n    public function stream_stat()\n    {\n        if ($this->stream->getSize() === null) {\n            return false;\n        }\n\n        static $modeMap = [\n            'r' => 33060,\n            'rb' => 33060,\n            'r+' => 33206,\n            'w' => 33188,\n            'wb' => 33188,\n        ];\n\n        return [\n            'dev' => 0,\n            'ino' => 0,\n            'mode' => $modeMap[$this->mode],\n            'nlink' => 0,\n            'uid' => 0,\n            'gid' => 0,\n            'rdev' => 0,\n            'size' => $this->stream->getSize() ?: 0,\n            'atime' => 0,\n            'mtime' => 0,\n            'ctime' => 0,\n            'blksize' => 0,\n            'blocks' => 0,\n        ];\n    }\n\n    /**\n     * @return array{\n     *   dev: int,\n     *   ino: int,\n     *   mode: int,\n     *   nlink: int,\n     *   uid: int,\n     *   gid: int,\n     *   rdev: int,\n     *   size: int,\n     *   atime: int,\n     *   mtime: int,\n     *   ctime: int,\n     *   blksize: int,\n     *   blocks: int\n     * }\n     */\n    public function url_stat(string $path, int $flags): array\n    {\n        return [\n            'dev' => 0,\n            'ino' => 0,\n            'mode' => 0,\n            'nlink' => 0,\n            'uid' => 0,\n            'gid' => 0,\n            'rdev' => 0,\n            'size' => 0,\n            'atime' => 0,\n            'mtime' => 0,\n            'ctime' => 0,\n            'blksize' => 0,\n            'blocks' => 0,\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/UploadedFile.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse RuntimeException;\n\nclass UploadedFile implements UploadedFileInterface\n{\n    private const ERROR_MAP = [\n        UPLOAD_ERR_OK => 'UPLOAD_ERR_OK',\n        UPLOAD_ERR_INI_SIZE => 'UPLOAD_ERR_INI_SIZE',\n        UPLOAD_ERR_FORM_SIZE => 'UPLOAD_ERR_FORM_SIZE',\n        UPLOAD_ERR_PARTIAL => 'UPLOAD_ERR_PARTIAL',\n        UPLOAD_ERR_NO_FILE => 'UPLOAD_ERR_NO_FILE',\n        UPLOAD_ERR_NO_TMP_DIR => 'UPLOAD_ERR_NO_TMP_DIR',\n        UPLOAD_ERR_CANT_WRITE => 'UPLOAD_ERR_CANT_WRITE',\n        UPLOAD_ERR_EXTENSION => 'UPLOAD_ERR_EXTENSION',\n    ];\n\n    /**\n     * @var string|null\n     */\n    private $clientFilename;\n\n    /**\n     * @var string|null\n     */\n    private $clientMediaType;\n\n    /**\n     * @var int\n     */\n    private $error;\n\n    /**\n     * @var string|null\n     */\n    private $file;\n\n    /**\n     * @var bool\n     */\n    private $moved = false;\n\n    /**\n     * @var int|null\n     */\n    private $size;\n\n    /**\n     * @var StreamInterface|null\n     */\n    private $stream;\n\n    /**\n     * @param StreamInterface|string|resource $streamOrFile\n     */\n    public function __construct(\n        $streamOrFile,\n        ?int $size,\n        int $errorStatus,\n        ?string $clientFilename = null,\n        ?string $clientMediaType = null\n    ) {\n        $this->setError($errorStatus);\n        $this->size = $size;\n        $this->clientFilename = $clientFilename;\n        $this->clientMediaType = $clientMediaType;\n\n        if ($this->isOk()) {\n            $this->setStreamOrFile($streamOrFile);\n        }\n    }\n\n    /**\n     * Depending on the value set file or stream variable\n     *\n     * @param StreamInterface|string|resource $streamOrFile\n     *\n     * @throws InvalidArgumentException\n     */\n    private function setStreamOrFile($streamOrFile): void\n    {\n        if (is_string($streamOrFile)) {\n            $this->file = $streamOrFile;\n        } elseif (is_resource($streamOrFile)) {\n            $this->stream = new Stream($streamOrFile);\n        } elseif ($streamOrFile instanceof StreamInterface) {\n            $this->stream = $streamOrFile;\n        } else {\n            throw new InvalidArgumentException(\n                'Invalid stream or file provided for UploadedFile'\n            );\n        }\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     */\n    private function setError(int $error): void\n    {\n        if (!isset(UploadedFile::ERROR_MAP[$error])) {\n            throw new InvalidArgumentException(\n                'Invalid error status for UploadedFile'\n            );\n        }\n\n        $this->error = $error;\n    }\n\n    private static function isStringNotEmpty($param): bool\n    {\n        return is_string($param) && false === empty($param);\n    }\n\n    /**\n     * Return true if there is no upload error\n     */\n    private function isOk(): bool\n    {\n        return $this->error === UPLOAD_ERR_OK;\n    }\n\n    public function isMoved(): bool\n    {\n        return $this->moved;\n    }\n\n    /**\n     * @throws RuntimeException if is moved or not ok\n     */\n    private function validateActive(): void\n    {\n        if (false === $this->isOk()) {\n            throw new RuntimeException(\\sprintf('Cannot retrieve stream due to upload error (%s)', self::ERROR_MAP[$this->error]));\n        }\n\n        if ($this->isMoved()) {\n            throw new RuntimeException('Cannot retrieve stream after it has already been moved');\n        }\n    }\n\n    public function getStream(): StreamInterface\n    {\n        $this->validateActive();\n\n        if ($this->stream instanceof StreamInterface) {\n            return $this->stream;\n        }\n\n        /** @var string $file */\n        $file = $this->file;\n\n        return new LazyOpenStream($file, 'r+');\n    }\n\n    public function moveTo($targetPath): void\n    {\n        $this->validateActive();\n\n        if (false === self::isStringNotEmpty($targetPath)) {\n            throw new InvalidArgumentException(\n                'Invalid path provided for move operation; must be a non-empty string'\n            );\n        }\n\n        if ($this->file) {\n            $this->moved = PHP_SAPI === 'cli'\n                ? rename($this->file, $targetPath)\n                : move_uploaded_file($this->file, $targetPath);\n        } else {\n            Utils::copyToStream(\n                $this->getStream(),\n                new LazyOpenStream($targetPath, 'w')\n            );\n\n            $this->moved = true;\n        }\n\n        if (false === $this->moved) {\n            throw new RuntimeException(\n                sprintf('Uploaded file could not be moved to %s', $targetPath)\n            );\n        }\n    }\n\n    public function getSize(): ?int\n    {\n        return $this->size;\n    }\n\n    public function getError(): int\n    {\n        return $this->error;\n    }\n\n    public function getClientFilename(): ?string\n    {\n        return $this->clientFilename;\n    }\n\n    public function getClientMediaType(): ?string\n    {\n        return $this->clientMediaType;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Uri.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse GuzzleHttp\\Psr7\\Exception\\MalformedUriException;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * PSR-7 URI implementation.\n *\n * @author Michael Dowling\n * @author Tobias Schultze\n * @author Matthew Weier O'Phinney\n */\nclass Uri implements UriInterface, \\JsonSerializable\n{\n    /**\n     * Absolute http and https URIs require a host per RFC 7230 Section 2.7\n     * but in generic URIs the host can be empty. So for http(s) URIs\n     * we apply this default host when no host is given yet to form a\n     * valid URI.\n     */\n    private const HTTP_DEFAULT_HOST = 'localhost';\n\n    private const DEFAULT_PORTS = [\n        'http' => 80,\n        'https' => 443,\n        'ftp' => 21,\n        'gopher' => 70,\n        'nntp' => 119,\n        'news' => 119,\n        'telnet' => 23,\n        'tn3270' => 23,\n        'imap' => 143,\n        'pop' => 110,\n        'ldap' => 389,\n    ];\n\n    /**\n     * Unreserved characters for use in a regex.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.3\n     */\n    private const CHAR_UNRESERVED = 'a-zA-Z0-9_\\-\\.~';\n\n    /**\n     * Sub-delims for use in a regex.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-2.2\n     */\n    private const CHAR_SUB_DELIMS = '!\\$&\\'\\(\\)\\*\\+,;=';\n    private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26'];\n\n    /** @var string Uri scheme. */\n    private $scheme = '';\n\n    /** @var string Uri user info. */\n    private $userInfo = '';\n\n    /** @var string Uri host. */\n    private $host = '';\n\n    /** @var int|null Uri port. */\n    private $port;\n\n    /** @var string Uri path. */\n    private $path = '';\n\n    /** @var string Uri query string. */\n    private $query = '';\n\n    /** @var string Uri fragment. */\n    private $fragment = '';\n\n    /** @var string|null String representation */\n    private $composedComponents;\n\n    public function __construct(string $uri = '')\n    {\n        if ($uri !== '') {\n            $parts = self::parse($uri);\n            if ($parts === false) {\n                throw new MalformedUriException(\"Unable to parse URI: $uri\");\n            }\n            $this->applyParts($parts);\n        }\n    }\n\n    /**\n     * UTF-8 aware \\parse_url() replacement.\n     *\n     * The internal function produces broken output for non ASCII domain names\n     * (IDN) when used with locales other than \"C\".\n     *\n     * On the other hand, cURL understands IDN correctly only when UTF-8 locale\n     * is configured (\"C.UTF-8\", \"en_US.UTF-8\", etc.).\n     *\n     * @see https://bugs.php.net/bug.php?id=52923\n     * @see https://www.php.net/manual/en/function.parse-url.php#114817\n     * @see https://curl.haxx.se/libcurl/c/CURLOPT_URL.html#ENCODING\n     *\n     * @return array|false\n     */\n    private static function parse(string $url)\n    {\n        // If IPv6\n        $prefix = '';\n        if (preg_match('%^(.*://\\[[0-9:a-fA-F]+\\])(.*?)$%', $url, $matches)) {\n            /** @var array{0:string, 1:string, 2:string} $matches */\n            $prefix = $matches[1];\n            $url = $matches[2];\n        }\n\n        /** @var string */\n        $encodedUrl = preg_replace_callback(\n            '%[^:/@?&=#]+%usD',\n            static function ($matches) {\n                return urlencode($matches[0]);\n            },\n            $url\n        );\n\n        $result = parse_url($prefix.$encodedUrl);\n\n        if ($result === false) {\n            return false;\n        }\n\n        return array_map('urldecode', $result);\n    }\n\n    public function __toString(): string\n    {\n        if ($this->composedComponents === null) {\n            $this->composedComponents = self::composeComponents(\n                $this->scheme,\n                $this->getAuthority(),\n                $this->path,\n                $this->query,\n                $this->fragment\n            );\n        }\n\n        return $this->composedComponents;\n    }\n\n    /**\n     * Composes a URI reference string from its various components.\n     *\n     * Usually this method does not need to be called manually but instead is used indirectly via\n     * `Psr\\Http\\Message\\UriInterface::__toString`.\n     *\n     * PSR-7 UriInterface treats an empty component the same as a missing component as\n     * getQuery(), getFragment() etc. always return a string. This explains the slight\n     * difference to RFC 3986 Section 5.3.\n     *\n     * Another adjustment is that the authority separator is added even when the authority is missing/empty\n     * for the \"file\" scheme. This is because PHP stream functions like `file_get_contents` only work with\n     * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But\n     * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to\n     * that format).\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.3\n     */\n    public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string\n    {\n        $uri = '';\n\n        // weak type checks to also accept null until we can add scalar type hints\n        if ($scheme != '') {\n            $uri .= $scheme.':';\n        }\n\n        if ($authority != '' || $scheme === 'file') {\n            $uri .= '//'.$authority;\n        }\n\n        if ($authority != '' && $path != '' && $path[0] != '/') {\n            $path = '/'.$path;\n        }\n\n        $uri .= $path;\n\n        if ($query != '') {\n            $uri .= '?'.$query;\n        }\n\n        if ($fragment != '') {\n            $uri .= '#'.$fragment;\n        }\n\n        return $uri;\n    }\n\n    /**\n     * Whether the URI has the default port of the current scheme.\n     *\n     * `Psr\\Http\\Message\\UriInterface::getPort` may return null or the standard port. This method can be used\n     * independently of the implementation.\n     */\n    public static function isDefaultPort(UriInterface $uri): bool\n    {\n        return $uri->getPort() === null\n            || (isset(self::DEFAULT_PORTS[$uri->getScheme()]) && $uri->getPort() === self::DEFAULT_PORTS[$uri->getScheme()]);\n    }\n\n    /**\n     * Whether the URI is absolute, i.e. it has a scheme.\n     *\n     * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true\n     * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative\n     * to another URI, the base URI. Relative references can be divided into several forms:\n     * - network-path references, e.g. '//example.com/path'\n     * - absolute-path references, e.g. '/path'\n     * - relative-path references, e.g. 'subpath'\n     *\n     * @see Uri::isNetworkPathReference\n     * @see Uri::isAbsolutePathReference\n     * @see Uri::isRelativePathReference\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4\n     */\n    public static function isAbsolute(UriInterface $uri): bool\n    {\n        return $uri->getScheme() !== '';\n    }\n\n    /**\n     * Whether the URI is a network-path reference.\n     *\n     * A relative reference that begins with two slash characters is termed an network-path reference.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2\n     */\n    public static function isNetworkPathReference(UriInterface $uri): bool\n    {\n        return $uri->getScheme() === '' && $uri->getAuthority() !== '';\n    }\n\n    /**\n     * Whether the URI is a absolute-path reference.\n     *\n     * A relative reference that begins with a single slash character is termed an absolute-path reference.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2\n     */\n    public static function isAbsolutePathReference(UriInterface $uri): bool\n    {\n        return $uri->getScheme() === ''\n            && $uri->getAuthority() === ''\n            && isset($uri->getPath()[0])\n            && $uri->getPath()[0] === '/';\n    }\n\n    /**\n     * Whether the URI is a relative-path reference.\n     *\n     * A relative reference that does not begin with a slash character is termed a relative-path reference.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.2\n     */\n    public static function isRelativePathReference(UriInterface $uri): bool\n    {\n        return $uri->getScheme() === ''\n            && $uri->getAuthority() === ''\n            && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/');\n    }\n\n    /**\n     * Whether the URI is a same-document reference.\n     *\n     * A same-document reference refers to a URI that is, aside from its fragment\n     * component, identical to the base URI. When no base URI is given, only an empty\n     * URI reference (apart from its fragment) is considered a same-document reference.\n     *\n     * @param UriInterface      $uri  The URI to check\n     * @param UriInterface|null $base An optional base URI to compare against\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.4\n     */\n    public static function isSameDocumentReference(UriInterface $uri, ?UriInterface $base = null): bool\n    {\n        if ($base !== null) {\n            $uri = UriResolver::resolve($base, $uri);\n\n            return ($uri->getScheme() === $base->getScheme())\n                && ($uri->getAuthority() === $base->getAuthority())\n                && ($uri->getPath() === $base->getPath())\n                && ($uri->getQuery() === $base->getQuery());\n        }\n\n        return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === '';\n    }\n\n    /**\n     * Creates a new URI with a specific query string value removed.\n     *\n     * Any existing query string values that exactly match the provided key are\n     * removed.\n     *\n     * @param UriInterface $uri URI to use as a base.\n     * @param string       $key Query string key to remove.\n     */\n    public static function withoutQueryValue(UriInterface $uri, string $key): UriInterface\n    {\n        $result = self::getFilteredQueryString($uri, [$key]);\n\n        return $uri->withQuery(implode('&', $result));\n    }\n\n    /**\n     * Creates a new URI with a specific query string value.\n     *\n     * Any existing query string values that exactly match the provided key are\n     * removed and replaced with the given key value pair.\n     *\n     * A value of null will set the query string key without a value, e.g. \"key\"\n     * instead of \"key=value\".\n     *\n     * @param UriInterface $uri   URI to use as a base.\n     * @param string       $key   Key to set.\n     * @param string|null  $value Value to set\n     */\n    public static function withQueryValue(UriInterface $uri, string $key, ?string $value): UriInterface\n    {\n        $result = self::getFilteredQueryString($uri, [$key]);\n\n        $result[] = self::generateQueryString($key, $value);\n\n        return $uri->withQuery(implode('&', $result));\n    }\n\n    /**\n     * Creates a new URI with multiple specific query string values.\n     *\n     * It has the same behavior as withQueryValue() but for an associative array of key => value.\n     *\n     * @param UriInterface    $uri           URI to use as a base.\n     * @param (string|null)[] $keyValueArray Associative array of key and values\n     */\n    public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface\n    {\n        $result = self::getFilteredQueryString($uri, array_keys($keyValueArray));\n\n        foreach ($keyValueArray as $key => $value) {\n            $result[] = self::generateQueryString((string) $key, $value !== null ? (string) $value : null);\n        }\n\n        return $uri->withQuery(implode('&', $result));\n    }\n\n    /**\n     * Creates a URI from a hash of `parse_url` components.\n     *\n     * @see https://www.php.net/manual/en/function.parse-url.php\n     *\n     * @throws MalformedUriException If the components do not form a valid URI.\n     */\n    public static function fromParts(array $parts): UriInterface\n    {\n        $uri = new self();\n        $uri->applyParts($parts);\n        $uri->validateState();\n\n        return $uri;\n    }\n\n    public function getScheme(): string\n    {\n        return $this->scheme;\n    }\n\n    public function getAuthority(): string\n    {\n        $authority = $this->host;\n        if ($this->userInfo !== '') {\n            $authority = $this->userInfo.'@'.$authority;\n        }\n\n        if ($this->port !== null) {\n            $authority .= ':'.$this->port;\n        }\n\n        return $authority;\n    }\n\n    public function getUserInfo(): string\n    {\n        return $this->userInfo;\n    }\n\n    public function getHost(): string\n    {\n        return $this->host;\n    }\n\n    public function getPort(): ?int\n    {\n        return $this->port;\n    }\n\n    public function getPath(): string\n    {\n        return $this->path;\n    }\n\n    public function getQuery(): string\n    {\n        return $this->query;\n    }\n\n    public function getFragment(): string\n    {\n        return $this->fragment;\n    }\n\n    public function withScheme($scheme): UriInterface\n    {\n        $scheme = $this->filterScheme($scheme);\n\n        if ($this->scheme === $scheme) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->scheme = $scheme;\n        $new->composedComponents = null;\n        $new->removeDefaultPort();\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withUserInfo($user, $password = null): UriInterface\n    {\n        $info = $this->filterUserInfoComponent($user);\n        if ($password !== null) {\n            $info .= ':'.$this->filterUserInfoComponent($password);\n        }\n\n        if ($this->userInfo === $info) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->userInfo = $info;\n        $new->composedComponents = null;\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withHost($host): UriInterface\n    {\n        $host = $this->filterHost($host);\n\n        if ($this->host === $host) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->host = $host;\n        $new->composedComponents = null;\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withPort($port): UriInterface\n    {\n        $port = $this->filterPort($port);\n\n        if ($this->port === $port) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->port = $port;\n        $new->composedComponents = null;\n        $new->removeDefaultPort();\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withPath($path): UriInterface\n    {\n        $path = $this->filterPath($path);\n\n        if ($this->path === $path) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->path = $path;\n        $new->composedComponents = null;\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withQuery($query): UriInterface\n    {\n        $query = $this->filterQueryAndFragment($query);\n\n        if ($this->query === $query) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->query = $query;\n        $new->composedComponents = null;\n\n        return $new;\n    }\n\n    public function withFragment($fragment): UriInterface\n    {\n        $fragment = $this->filterQueryAndFragment($fragment);\n\n        if ($this->fragment === $fragment) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->fragment = $fragment;\n        $new->composedComponents = null;\n\n        return $new;\n    }\n\n    public function jsonSerialize(): string\n    {\n        return $this->__toString();\n    }\n\n    /**\n     * Apply parse_url parts to a URI.\n     *\n     * @param array $parts Array of parse_url parts to apply.\n     */\n    private function applyParts(array $parts): void\n    {\n        $this->scheme = isset($parts['scheme'])\n            ? $this->filterScheme($parts['scheme'])\n            : '';\n        $this->userInfo = isset($parts['user'])\n            ? $this->filterUserInfoComponent($parts['user'])\n            : '';\n        $this->host = isset($parts['host'])\n            ? $this->filterHost($parts['host'])\n            : '';\n        $this->port = isset($parts['port'])\n            ? $this->filterPort($parts['port'])\n            : null;\n        $this->path = isset($parts['path'])\n            ? $this->filterPath($parts['path'])\n            : '';\n        $this->query = isset($parts['query'])\n            ? $this->filterQueryAndFragment($parts['query'])\n            : '';\n        $this->fragment = isset($parts['fragment'])\n            ? $this->filterQueryAndFragment($parts['fragment'])\n            : '';\n        if (isset($parts['pass'])) {\n            $this->userInfo .= ':'.$this->filterUserInfoComponent($parts['pass']);\n        }\n\n        $this->removeDefaultPort();\n    }\n\n    /**\n     * @param mixed $scheme\n     *\n     * @throws \\InvalidArgumentException If the scheme is invalid.\n     */\n    private function filterScheme($scheme): string\n    {\n        if (!is_string($scheme)) {\n            throw new \\InvalidArgumentException('Scheme must be a string');\n        }\n\n        return \\strtr($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n    }\n\n    /**\n     * @param mixed $component\n     *\n     * @throws \\InvalidArgumentException If the user info is invalid.\n     */\n    private function filterUserInfoComponent($component): string\n    {\n        if (!is_string($component)) {\n            throw new \\InvalidArgumentException('User info must be a string');\n        }\n\n        return preg_replace_callback(\n            '/(?:[^%'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.']+|%(?![A-Fa-f0-9]{2}))/',\n            [$this, 'rawurlencodeMatchZero'],\n            $component\n        );\n    }\n\n    /**\n     * @param mixed $host\n     *\n     * @throws \\InvalidArgumentException If the host is invalid.\n     */\n    private function filterHost($host): string\n    {\n        if (!is_string($host)) {\n            throw new \\InvalidArgumentException('Host must be a string');\n        }\n\n        return \\strtr($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n    }\n\n    /**\n     * @param mixed $port\n     *\n     * @throws \\InvalidArgumentException If the port is invalid.\n     */\n    private function filterPort($port): ?int\n    {\n        if ($port === null) {\n            return null;\n        }\n\n        $port = (int) $port;\n        if (0 > $port || 0xFFFF < $port) {\n            throw new \\InvalidArgumentException(\n                sprintf('Invalid port: %d. Must be between 0 and 65535', $port)\n            );\n        }\n\n        return $port;\n    }\n\n    /**\n     * @param (string|int)[] $keys\n     *\n     * @return string[]\n     */\n    private static function getFilteredQueryString(UriInterface $uri, array $keys): array\n    {\n        $current = $uri->getQuery();\n\n        if ($current === '') {\n            return [];\n        }\n\n        $decodedKeys = array_map(function ($k): string {\n            return rawurldecode((string) $k);\n        }, $keys);\n\n        return array_filter(explode('&', $current), function ($part) use ($decodedKeys) {\n            return !in_array(rawurldecode(explode('=', $part)[0]), $decodedKeys, true);\n        });\n    }\n\n    private static function generateQueryString(string $key, ?string $value): string\n    {\n        // Query string separators (\"=\", \"&\") within the key or value need to be encoded\n        // (while preventing double-encoding) before setting the query string. All other\n        // chars that need percent-encoding will be encoded by withQuery().\n        $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT);\n\n        if ($value !== null) {\n            $queryString .= '='.strtr($value, self::QUERY_SEPARATORS_REPLACEMENT);\n        }\n\n        return $queryString;\n    }\n\n    private function removeDefaultPort(): void\n    {\n        if ($this->port !== null && self::isDefaultPort($this)) {\n            $this->port = null;\n        }\n    }\n\n    /**\n     * Filters the path of a URI\n     *\n     * @param mixed $path\n     *\n     * @throws \\InvalidArgumentException If the path is invalid.\n     */\n    private function filterPath($path): string\n    {\n        if (!is_string($path)) {\n            throw new \\InvalidArgumentException('Path must be a string');\n        }\n\n        return preg_replace_callback(\n            '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\\/]++|%(?![A-Fa-f0-9]{2}))/',\n            [$this, 'rawurlencodeMatchZero'],\n            $path\n        );\n    }\n\n    /**\n     * Filters the query string or fragment of a URI.\n     *\n     * @param mixed $str\n     *\n     * @throws \\InvalidArgumentException If the query or fragment is invalid.\n     */\n    private function filterQueryAndFragment($str): string\n    {\n        if (!is_string($str)) {\n            throw new \\InvalidArgumentException('Query and fragment must be a string');\n        }\n\n        return preg_replace_callback(\n            '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\\/\\?]++|%(?![A-Fa-f0-9]{2}))/',\n            [$this, 'rawurlencodeMatchZero'],\n            $str\n        );\n    }\n\n    private function rawurlencodeMatchZero(array $match): string\n    {\n        return rawurlencode($match[0]);\n    }\n\n    private function validateState(): void\n    {\n        if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) {\n            $this->host = self::HTTP_DEFAULT_HOST;\n        }\n\n        if ($this->getAuthority() === '') {\n            if (0 === strpos($this->path, '//')) {\n                throw new MalformedUriException('The path of a URI without an authority must not start with two slashes \"//\"');\n            }\n            if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) {\n                throw new MalformedUriException('A relative URI must not have a path beginning with a segment containing a colon');\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/UriComparator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Provides methods to determine if a modified URL should be considered cross-origin.\n *\n * @author Graham Campbell\n */\nfinal class UriComparator\n{\n    /**\n     * Determines if a modified URL should be considered cross-origin with\n     * respect to an original URL.\n     */\n    public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool\n    {\n        if (\\strcasecmp($original->getHost(), $modified->getHost()) !== 0) {\n            return true;\n        }\n\n        if ($original->getScheme() !== $modified->getScheme()) {\n            return true;\n        }\n\n        if (self::computePort($original) !== self::computePort($modified)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    private static function computePort(UriInterface $uri): int\n    {\n        $port = $uri->getPort();\n\n        if (null !== $port) {\n            return $port;\n        }\n\n        return 'https' === $uri->getScheme() ? 443 : 80;\n    }\n\n    private function __construct()\n    {\n        // cannot be instantiated\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/UriNormalizer.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Provides methods to normalize and compare URIs.\n *\n * @author Tobias Schultze\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6\n */\nfinal class UriNormalizer\n{\n    /**\n     * Default normalizations which only include the ones that preserve semantics.\n     */\n    public const PRESERVING_NORMALIZATIONS =\n        self::CAPITALIZE_PERCENT_ENCODING |\n        self::DECODE_UNRESERVED_CHARACTERS |\n        self::CONVERT_EMPTY_PATH |\n        self::REMOVE_DEFAULT_HOST |\n        self::REMOVE_DEFAULT_PORT |\n        self::REMOVE_DOT_SEGMENTS;\n\n    /**\n     * All letters within a percent-encoding triplet (e.g., \"%3A\") are case-insensitive, and should be capitalized.\n     *\n     * Example: http://example.org/a%c2%b1b → http://example.org/a%C2%B1b\n     */\n    public const CAPITALIZE_PERCENT_ENCODING = 1;\n\n    /**\n     * Decodes percent-encoded octets of unreserved characters.\n     *\n     * For consistency, percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39),\n     * hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and,\n     * when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers.\n     *\n     * Example: http://example.org/%7Eusern%61me/ → http://example.org/~username/\n     */\n    public const DECODE_UNRESERVED_CHARACTERS = 2;\n\n    /**\n     * Converts the empty path to \"/\" for http and https URIs.\n     *\n     * Example: http://example.org → http://example.org/\n     */\n    public const CONVERT_EMPTY_PATH = 4;\n\n    /**\n     * Removes the default host of the given URI scheme from the URI.\n     *\n     * Only the \"file\" scheme defines the default host \"localhost\".\n     * All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile`\n     * are equivalent according to RFC 3986. The first format is not accepted\n     * by PHPs stream functions and thus already normalized implicitly to the\n     * second format in the Uri class. See `GuzzleHttp\\Psr7\\Uri::composeComponents`.\n     *\n     * Example: file://localhost/myfile → file:///myfile\n     */\n    public const REMOVE_DEFAULT_HOST = 8;\n\n    /**\n     * Removes the default port of the given URI scheme from the URI.\n     *\n     * Example: http://example.org:80/ → http://example.org/\n     */\n    public const REMOVE_DEFAULT_PORT = 16;\n\n    /**\n     * Removes unnecessary dot-segments.\n     *\n     * Dot-segments in relative-path references are not removed as it would\n     * change the semantics of the URI reference.\n     *\n     * Example: http://example.org/../a/b/../c/./d.html → http://example.org/a/c/d.html\n     */\n    public const REMOVE_DOT_SEGMENTS = 32;\n\n    /**\n     * Paths which include two or more adjacent slashes are converted to one.\n     *\n     * Webservers usually ignore duplicate slashes and treat those URIs equivalent.\n     * But in theory those URIs do not need to be equivalent. So this normalization\n     * may change the semantics. Encoded slashes (%2F) are not removed.\n     *\n     * Example: http://example.org//foo///bar.html → http://example.org/foo/bar.html\n     */\n    public const REMOVE_DUPLICATE_SLASHES = 64;\n\n    /**\n     * Sort query parameters with their values in alphabetical order.\n     *\n     * However, the order of parameters in a URI may be significant (this is not defined by the standard).\n     * So this normalization is not safe and may change the semantics of the URI.\n     *\n     * Example: ?lang=en&article=fred → ?article=fred&lang=en\n     *\n     * Note: The sorting is neither locale nor Unicode aware (the URI query does not get decoded at all) as the\n     * purpose is to be able to compare URIs in a reproducible way, not to have the params sorted perfectly.\n     */\n    public const SORT_QUERY_PARAMETERS = 128;\n\n    /**\n     * Returns a normalized URI.\n     *\n     * The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.\n     * This methods adds additional normalizations that can be configured with the $flags parameter.\n     *\n     * PSR-7 UriInterface cannot distinguish between an empty component and a missing component as\n     * getQuery(), getFragment() etc. always return a string. This means the URIs \"/?#\" and \"/\" are\n     * treated equivalent which is not necessarily true according to RFC 3986. But that difference\n     * is highly uncommon in reality. So this potential normalization is implied in PSR-7 as well.\n     *\n     * @param UriInterface $uri   The URI to normalize\n     * @param int          $flags A bitmask of normalizations to apply, see constants\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6.2\n     */\n    public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface\n    {\n        if ($flags & self::CAPITALIZE_PERCENT_ENCODING) {\n            $uri = self::capitalizePercentEncoding($uri);\n        }\n\n        if ($flags & self::DECODE_UNRESERVED_CHARACTERS) {\n            $uri = self::decodeUnreservedCharacters($uri);\n        }\n\n        if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === ''\n            && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')\n        ) {\n            $uri = $uri->withPath('/');\n        }\n\n        if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') {\n            $uri = $uri->withHost('');\n        }\n\n        if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) {\n            $uri = $uri->withPort(null);\n        }\n\n        if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) {\n            $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath()));\n        }\n\n        if ($flags & self::REMOVE_DUPLICATE_SLASHES) {\n            $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath()));\n        }\n\n        if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') {\n            $queryKeyValues = explode('&', $uri->getQuery());\n            sort($queryKeyValues);\n            $uri = $uri->withQuery(implode('&', $queryKeyValues));\n        }\n\n        return $uri;\n    }\n\n    /**\n     * Whether two URIs can be considered equivalent.\n     *\n     * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also\n     * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be\n     * resolved against the same base URI. If this is not the case, determination of equivalence or difference of\n     * relative references does not mean anything.\n     *\n     * @param UriInterface $uri1           An URI to compare\n     * @param UriInterface $uri2           An URI to compare\n     * @param int          $normalizations A bitmask of normalizations to apply, see constants\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-6.1\n     */\n    public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool\n    {\n        return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations);\n    }\n\n    private static function capitalizePercentEncoding(UriInterface $uri): UriInterface\n    {\n        $regex = '/(?:%[A-Fa-f0-9]{2})++/';\n\n        $callback = function (array $match): string {\n            return strtoupper($match[0]);\n        };\n\n        return\n            $uri->withPath(\n                preg_replace_callback($regex, $callback, $uri->getPath())\n            )->withQuery(\n                preg_replace_callback($regex, $callback, $uri->getQuery())\n            );\n    }\n\n    private static function decodeUnreservedCharacters(UriInterface $uri): UriInterface\n    {\n        $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i';\n\n        $callback = function (array $match): string {\n            return rawurldecode($match[0]);\n        };\n\n        return\n            $uri->withPath(\n                preg_replace_callback($regex, $callback, $uri->getPath())\n            )->withQuery(\n                preg_replace_callback($regex, $callback, $uri->getQuery())\n            );\n    }\n\n    private function __construct()\n    {\n        // cannot be instantiated\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/UriResolver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Resolves a URI reference in the context of a base URI and the opposite way.\n *\n * @author Tobias Schultze\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5\n */\nfinal class UriResolver\n{\n    /**\n     * Removes dot segments from a path and returns the new path.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n     */\n    public static function removeDotSegments(string $path): string\n    {\n        if ($path === '' || $path === '/') {\n            return $path;\n        }\n\n        $results = [];\n        $segments = explode('/', $path);\n        foreach ($segments as $segment) {\n            if ($segment === '..') {\n                array_pop($results);\n            } elseif ($segment !== '.') {\n                $results[] = $segment;\n            }\n        }\n\n        $newPath = implode('/', $results);\n\n        if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) {\n            // Re-add the leading slash if necessary for cases like \"/..\"\n            $newPath = '/'.$newPath;\n        } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) {\n            // Add the trailing slash if necessary\n            // If newPath is not empty, then $segment must be set and is the last segment from the foreach\n            $newPath .= '/';\n        }\n\n        return $newPath;\n    }\n\n    /**\n     * Converts the relative URI into a new URI that is resolved against the base URI.\n     *\n     * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2\n     */\n    public static function resolve(UriInterface $base, UriInterface $rel): UriInterface\n    {\n        if ((string) $rel === '') {\n            // we can simply return the same base URI instance for this same-document reference\n            return $base;\n        }\n\n        if ($rel->getScheme() != '') {\n            return $rel->withPath(self::removeDotSegments($rel->getPath()));\n        }\n\n        if ($rel->getAuthority() != '') {\n            $targetAuthority = $rel->getAuthority();\n            $targetPath = self::removeDotSegments($rel->getPath());\n            $targetQuery = $rel->getQuery();\n        } else {\n            $targetAuthority = $base->getAuthority();\n            if ($rel->getPath() === '') {\n                $targetPath = $base->getPath();\n                $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery();\n            } else {\n                if ($rel->getPath()[0] === '/') {\n                    $targetPath = $rel->getPath();\n                } else {\n                    if ($targetAuthority != '' && $base->getPath() === '') {\n                        $targetPath = '/'.$rel->getPath();\n                    } else {\n                        $lastSlashPos = strrpos($base->getPath(), '/');\n                        if ($lastSlashPos === false) {\n                            $targetPath = $rel->getPath();\n                        } else {\n                            $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1).$rel->getPath();\n                        }\n                    }\n                }\n                $targetPath = self::removeDotSegments($targetPath);\n                $targetQuery = $rel->getQuery();\n            }\n        }\n\n        return new Uri(Uri::composeComponents(\n            $base->getScheme(),\n            $targetAuthority,\n            $targetPath,\n            $targetQuery,\n            $rel->getFragment()\n        ));\n    }\n\n    /**\n     * Returns the target URI as a relative reference from the base URI.\n     *\n     * This method is the counterpart to resolve():\n     *\n     *    (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))\n     *\n     * One use-case is to use the current request URI as base URI and then generate relative links in your documents\n     * to reduce the document size or offer self-contained downloadable document archives.\n     *\n     *    $base = new Uri('http://example.com/a/b/');\n     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c'));  // prints 'c'.\n     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y'));  // prints '../x/y'.\n     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.\n     *    echo UriResolver::relativize($base, new Uri('http://example.org/a/b/'));   // prints '//example.org/a/b/'.\n     *\n     * This method also accepts a target that is already relative and will try to relativize it further. Only a\n     * relative-path reference will be returned as-is.\n     *\n     *    echo UriResolver::relativize($base, new Uri('/a/b/c'));  // prints 'c' as well\n     */\n    public static function relativize(UriInterface $base, UriInterface $target): UriInterface\n    {\n        if ($target->getScheme() !== ''\n            && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')\n        ) {\n            return $target;\n        }\n\n        if (Uri::isRelativePathReference($target)) {\n            // As the target is already highly relative we return it as-is. It would be possible to resolve\n            // the target with `$target = self::resolve($base, $target);` and then try make it more relative\n            // by removing a duplicate query. But let's not do that automatically.\n            return $target;\n        }\n\n        if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) {\n            return $target->withScheme('');\n        }\n\n        // We must remove the path before removing the authority because if the path starts with two slashes, the URI\n        // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also\n        // invalid.\n        $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost('');\n\n        if ($base->getPath() !== $target->getPath()) {\n            return $emptyPathUri->withPath(self::getRelativePath($base, $target));\n        }\n\n        if ($base->getQuery() === $target->getQuery()) {\n            // Only the target fragment is left. And it must be returned even if base and target fragment are the same.\n            return $emptyPathUri->withQuery('');\n        }\n\n        // If the base URI has a query but the target has none, we cannot return an empty path reference as it would\n        // inherit the base query component when resolving.\n        if ($target->getQuery() === '') {\n            $segments = explode('/', $target->getPath());\n            /** @var string $lastSegment */\n            $lastSegment = end($segments);\n\n            return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment);\n        }\n\n        return $emptyPathUri;\n    }\n\n    private static function getRelativePath(UriInterface $base, UriInterface $target): string\n    {\n        $sourceSegments = explode('/', $base->getPath());\n        $targetSegments = explode('/', $target->getPath());\n        array_pop($sourceSegments);\n        $targetLastSegment = array_pop($targetSegments);\n        foreach ($sourceSegments as $i => $segment) {\n            if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) {\n                unset($sourceSegments[$i], $targetSegments[$i]);\n            } else {\n                break;\n            }\n        }\n        $targetSegments[] = $targetLastSegment;\n        $relativePath = str_repeat('../', count($sourceSegments)).implode('/', $targetSegments);\n\n        // A reference to am empty last segment or an empty first sub-segment must be prefixed with \"./\".\n        // This also applies to a segment with a colon character (e.g., \"file:colon\") that cannot be used\n        // as the first segment of a relative-path reference, as it would be mistaken for a scheme name.\n        if ('' === $relativePath || false !== strpos(explode('/', $relativePath, 2)[0], ':')) {\n            $relativePath = \"./$relativePath\";\n        } elseif ('/' === $relativePath[0]) {\n            if ($base->getAuthority() != '' && $base->getPath() === '') {\n                // In this case an extra slash is added by resolve() automatically. So we must not add one here.\n                $relativePath = \".$relativePath\";\n            } else {\n                $relativePath = \"./$relativePath\";\n            }\n        }\n\n        return $relativePath;\n    }\n\n    private function __construct()\n    {\n        // cannot be instantiated\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/guzzlehttp/psr7/src/Utils.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\nfinal class Utils\n{\n    /**\n     * Remove the items given by the keys, case insensitively from the data.\n     *\n     * @param (string|int)[] $keys\n     */\n    public static function caselessRemove(array $keys, array $data): array\n    {\n        $result = [];\n\n        foreach ($keys as &$key) {\n            $key = strtolower((string) $key);\n        }\n\n        foreach ($data as $k => $v) {\n            if (!in_array(strtolower((string) $k), $keys)) {\n                $result[$k] = $v;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Copy the contents of a stream into another stream until the given number\n     * of bytes have been read.\n     *\n     * @param StreamInterface $source Stream to read from\n     * @param StreamInterface $dest   Stream to write to\n     * @param int             $maxLen Maximum number of bytes to read. Pass -1\n     *                                to read the entire stream.\n     *\n     * @throws \\RuntimeException on error.\n     */\n    public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void\n    {\n        $bufferSize = 8192;\n\n        if ($maxLen === -1) {\n            while (!$source->eof()) {\n                if (!$dest->write($source->read($bufferSize))) {\n                    break;\n                }\n            }\n        } else {\n            $remaining = $maxLen;\n            while ($remaining > 0 && !$source->eof()) {\n                $buf = $source->read(min($bufferSize, $remaining));\n                $len = strlen($buf);\n                if (!$len) {\n                    break;\n                }\n                $remaining -= $len;\n                $dest->write($buf);\n            }\n        }\n    }\n\n    /**\n     * Copy the contents of a stream into a string until the given number of\n     * bytes have been read.\n     *\n     * @param StreamInterface $stream Stream to read\n     * @param int             $maxLen Maximum number of bytes to read. Pass -1\n     *                                to read the entire stream.\n     *\n     * @throws \\RuntimeException on error.\n     */\n    public static function copyToString(StreamInterface $stream, int $maxLen = -1): string\n    {\n        $buffer = '';\n\n        if ($maxLen === -1) {\n            while (!$stream->eof()) {\n                $buf = $stream->read(1048576);\n                if ($buf === '') {\n                    break;\n                }\n                $buffer .= $buf;\n            }\n\n            return $buffer;\n        }\n\n        $len = 0;\n        while (!$stream->eof() && $len < $maxLen) {\n            $buf = $stream->read($maxLen - $len);\n            if ($buf === '') {\n                break;\n            }\n            $buffer .= $buf;\n            $len = strlen($buffer);\n        }\n\n        return $buffer;\n    }\n\n    /**\n     * Calculate a hash of a stream.\n     *\n     * This method reads the entire stream to calculate a rolling hash, based\n     * on PHP's `hash_init` functions.\n     *\n     * @param StreamInterface $stream    Stream to calculate the hash for\n     * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)\n     * @param bool            $rawOutput Whether or not to use raw output\n     *\n     * @throws \\RuntimeException on error.\n     */\n    public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string\n    {\n        $pos = $stream->tell();\n\n        if ($pos > 0) {\n            $stream->rewind();\n        }\n\n        $ctx = hash_init($algo);\n        while (!$stream->eof()) {\n            hash_update($ctx, $stream->read(1048576));\n        }\n\n        $out = hash_final($ctx, $rawOutput);\n        $stream->seek($pos);\n\n        return $out;\n    }\n\n    /**\n     * Clone and modify a request with the given changes.\n     *\n     * This method is useful for reducing the number of clones needed to mutate\n     * a message.\n     *\n     * The changes can be one of:\n     * - method: (string) Changes the HTTP method.\n     * - set_headers: (array) Sets the given headers.\n     * - remove_headers: (array) Remove the given headers.\n     * - body: (mixed) Sets the given body.\n     * - uri: (UriInterface) Set the URI.\n     * - query: (string) Set the query string value of the URI.\n     * - version: (string) Set the protocol version.\n     *\n     * @param RequestInterface $request Request to clone and modify.\n     * @param array            $changes Changes to apply.\n     */\n    public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface\n    {\n        if (!$changes) {\n            return $request;\n        }\n\n        $headers = $request->getHeaders();\n\n        if (!isset($changes['uri'])) {\n            $uri = $request->getUri();\n        } else {\n            // Remove the host header if one is on the URI\n            if ($host = $changes['uri']->getHost()) {\n                $changes['set_headers']['Host'] = $host;\n\n                if ($port = $changes['uri']->getPort()) {\n                    $standardPorts = ['http' => 80, 'https' => 443];\n                    $scheme = $changes['uri']->getScheme();\n                    if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) {\n                        $changes['set_headers']['Host'] .= ':'.$port;\n                    }\n                }\n            }\n            $uri = $changes['uri'];\n        }\n\n        if (!empty($changes['remove_headers'])) {\n            $headers = self::caselessRemove($changes['remove_headers'], $headers);\n        }\n\n        if (!empty($changes['set_headers'])) {\n            $headers = self::caselessRemove(array_keys($changes['set_headers']), $headers);\n            $headers = $changes['set_headers'] + $headers;\n        }\n\n        if (isset($changes['query'])) {\n            $uri = $uri->withQuery($changes['query']);\n        }\n\n        if ($request instanceof ServerRequestInterface) {\n            $new = (new ServerRequest(\n                $changes['method'] ?? $request->getMethod(),\n                $uri,\n                $headers,\n                $changes['body'] ?? $request->getBody(),\n                $changes['version'] ?? $request->getProtocolVersion(),\n                $request->getServerParams()\n            ))\n            ->withParsedBody($request->getParsedBody())\n            ->withQueryParams($request->getQueryParams())\n            ->withCookieParams($request->getCookieParams())\n            ->withUploadedFiles($request->getUploadedFiles());\n\n            foreach ($request->getAttributes() as $key => $value) {\n                $new = $new->withAttribute($key, $value);\n            }\n\n            return $new;\n        }\n\n        return new Request(\n            $changes['method'] ?? $request->getMethod(),\n            $uri,\n            $headers,\n            $changes['body'] ?? $request->getBody(),\n            $changes['version'] ?? $request->getProtocolVersion()\n        );\n    }\n\n    /**\n     * Read a line from the stream up to the maximum allowed buffer length.\n     *\n     * @param StreamInterface $stream    Stream to read from\n     * @param int|null        $maxLength Maximum buffer length\n     */\n    public static function readLine(StreamInterface $stream, ?int $maxLength = null): string\n    {\n        $buffer = '';\n        $size = 0;\n\n        while (!$stream->eof()) {\n            if ('' === ($byte = $stream->read(1))) {\n                return $buffer;\n            }\n            $buffer .= $byte;\n            // Break when a new line is found or the max length - 1 is reached\n            if ($byte === \"\\n\" || ++$size === $maxLength - 1) {\n                break;\n            }\n        }\n\n        return $buffer;\n    }\n\n    /**\n     * Redact the password in the user info part of a URI.\n     */\n    public static function redactUserInfo(UriInterface $uri): UriInterface\n    {\n        $userInfo = $uri->getUserInfo();\n\n        if (false !== ($pos = \\strpos($userInfo, ':'))) {\n            return $uri->withUserInfo(\\substr($userInfo, 0, $pos), '***');\n        }\n\n        return $uri;\n    }\n\n    /**\n     * Create a new stream based on the input type.\n     *\n     * Options is an associative array that can contain the following keys:\n     * - metadata: Array of custom metadata.\n     * - size: Size of the stream.\n     *\n     * This method accepts the following `$resource` types:\n     * - `Psr\\Http\\Message\\StreamInterface`: Returns the value as-is.\n     * - `string`: Creates a stream object that uses the given string as the contents.\n     * - `resource`: Creates a stream object that wraps the given PHP stream resource.\n     * - `Iterator`: If the provided value implements `Iterator`, then a read-only\n     *   stream object will be created that wraps the given iterable. Each time the\n     *   stream is read from, data from the iterator will fill a buffer and will be\n     *   continuously called until the buffer is equal to the requested read size.\n     *   Subsequent read calls will first read from the buffer and then call `next`\n     *   on the underlying iterator until it is exhausted.\n     * - `object` with `__toString()`: If the object has the `__toString()` method,\n     *   the object will be cast to a string and then a stream will be returned that\n     *   uses the string value.\n     * - `NULL`: When `null` is passed, an empty stream object is returned.\n     * - `callable` When a callable is passed, a read-only stream object will be\n     *   created that invokes the given callable. The callable is invoked with the\n     *   number of suggested bytes to read. The callable can return any number of\n     *   bytes, but MUST return `false` when there is no more data to return. The\n     *   stream object that wraps the callable will invoke the callable until the\n     *   number of requested bytes are available. Any additional bytes will be\n     *   buffered and used in subsequent reads.\n     *\n     * @param resource|string|int|float|bool|StreamInterface|callable|\\Iterator|null $resource Entity body data\n     * @param array{size?: int, metadata?: array}                                    $options  Additional options\n     *\n     * @throws \\InvalidArgumentException if the $resource arg is not valid.\n     */\n    public static function streamFor($resource = '', array $options = []): StreamInterface\n    {\n        if (is_scalar($resource)) {\n            $stream = self::tryFopen('php://temp', 'r+');\n            if ($resource !== '') {\n                fwrite($stream, (string) $resource);\n                fseek($stream, 0);\n            }\n\n            return new Stream($stream, $options);\n        }\n\n        switch (gettype($resource)) {\n            case 'resource':\n                /*\n                 * The 'php://input' is a special stream with quirks and inconsistencies.\n                 * We avoid using that stream by reading it into php://temp\n                 */\n\n                /** @var resource $resource */\n                if ((\\stream_get_meta_data($resource)['uri'] ?? '') === 'php://input') {\n                    $stream = self::tryFopen('php://temp', 'w+');\n                    stream_copy_to_stream($resource, $stream);\n                    fseek($stream, 0);\n                    $resource = $stream;\n                }\n\n                return new Stream($resource, $options);\n            case 'object':\n                /** @var object $resource */\n                if ($resource instanceof StreamInterface) {\n                    return $resource;\n                } elseif ($resource instanceof \\Iterator) {\n                    return new PumpStream(function () use ($resource) {\n                        if (!$resource->valid()) {\n                            return false;\n                        }\n                        $result = $resource->current();\n                        $resource->next();\n\n                        return $result;\n                    }, $options);\n                } elseif (method_exists($resource, '__toString')) {\n                    return self::streamFor((string) $resource, $options);\n                }\n                break;\n            case 'NULL':\n                return new Stream(self::tryFopen('php://temp', 'r+'), $options);\n        }\n\n        if (is_callable($resource)) {\n            return new PumpStream($resource, $options);\n        }\n\n        throw new \\InvalidArgumentException('Invalid resource type: '.gettype($resource));\n    }\n\n    /**\n     * Safely opens a PHP stream resource using a filename.\n     *\n     * When fopen fails, PHP normally raises a warning. This function adds an\n     * error handler that checks for errors and throws an exception instead.\n     *\n     * @param string $filename File to open\n     * @param string $mode     Mode used to open the file\n     *\n     * @return resource\n     *\n     * @throws \\RuntimeException if the file cannot be opened\n     */\n    public static function tryFopen(string $filename, string $mode)\n    {\n        $ex = null;\n        set_error_handler(static function (int $errno, string $errstr) use ($filename, $mode, &$ex): bool {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to open \"%s\" using mode \"%s\": %s',\n                $filename,\n                $mode,\n                $errstr\n            ));\n\n            return true;\n        });\n\n        try {\n            /** @var resource $handle */\n            $handle = fopen($filename, $mode);\n        } catch (\\Throwable $e) {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to open \"%s\" using mode \"%s\": %s',\n                $filename,\n                $mode,\n                $e->getMessage()\n            ), 0, $e);\n        }\n\n        restore_error_handler();\n\n        if ($ex) {\n            /** @var \\RuntimeException $ex */\n            throw $ex;\n        }\n\n        return $handle;\n    }\n\n    /**\n     * Safely gets the contents of a given stream.\n     *\n     * When stream_get_contents fails, PHP normally raises a warning. This\n     * function adds an error handler that checks for errors and throws an\n     * exception instead.\n     *\n     * @param resource $stream\n     *\n     * @throws \\RuntimeException if the stream cannot be read\n     */\n    public static function tryGetContents($stream): string\n    {\n        $ex = null;\n        set_error_handler(static function (int $errno, string $errstr) use (&$ex): bool {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to read stream contents: %s',\n                $errstr\n            ));\n\n            return true;\n        });\n\n        try {\n            /** @var string|false $contents */\n            $contents = stream_get_contents($stream);\n\n            if ($contents === false) {\n                $ex = new \\RuntimeException('Unable to read stream contents');\n            }\n        } catch (\\Throwable $e) {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to read stream contents: %s',\n                $e->getMessage()\n            ), 0, $e);\n        }\n\n        restore_error_handler();\n\n        if ($ex) {\n            /** @var \\RuntimeException $ex */\n            throw $ex;\n        }\n\n        return $contents;\n    }\n\n    /**\n     * Returns a UriInterface for the given value.\n     *\n     * This function accepts a string or UriInterface and returns a\n     * UriInterface for the given value. If the value is already a\n     * UriInterface, it is returned as-is.\n     *\n     * @param string|UriInterface $uri\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public static function uriFor($uri): UriInterface\n    {\n        if ($uri instanceof UriInterface) {\n            return $uri;\n        }\n\n        if (is_string($uri)) {\n            return new Uri($uri);\n        }\n\n        throw new \\InvalidArgumentException('URI must be a string or UriInterface');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/CHANGELOG.md",
    "content": "### 3.10.0 (2026-01-02)\n\n  * Added automatic directory cleanup in RotatingFileHandler (#2000)\n  * Added timezone-aware file rotation to RotatingFileHandler (#1982)\n  * Added support for mongodb/mongodb 2.0+ (#1998)\n  * Added NoDiscard attribute to TestHandler methods to ensure the result is used (#2013)\n  * Fixed JsonFormatter crashing if __toString throws while normalizing data (#1968)\n  * Fixed PHP 8.5 deprecation warnings (#1997, #2009)\n  * Fixed DeduplicatingHandler collecting duplicate logs if the file cannot be locked (2e97231)\n  * Fixed GelfMessageFormatter to use integers instead of bool for gelf 1.1 support (#1973)\n  * Fixed empty stack traces being output anyway (#1979)\n  * Fixed StreamHandler not reopening the file if the inode changed (#1963)\n  * Fixed TelegramBotHandler sending empty messages (#1992)\n  * Fixed file paths in stack traces containing backslashes on windows, always using / now to unify logs (#1980)\n  * Fixed RotatingFileHandler unlink errors not being suppressed correctly (#1999)\n\n### 3.9.0 (2025-03-24)\n\n  * BC Warning: Fixed SendGridHandler to use the V3 API as V2 is now shut down, but this requires a new API key (#1952)\n  * Deprecated Monolog\\Test\\TestCase in favor of Monolog\\Test\\MonologTestCase (#1953)\n  * Added extension point for NativeMailerHandler::mail (#1948)\n  * Added setHandler method to BufferHandler to modify the nested handler at runtime (#1946)\n  * Fixed date format in ElasticsearchFormatter to use +00:00 vs +0000 tz identifiers (#1942)\n  * Fixed GelfMessageFormatter handling numeric context/extra keys (#1932)\n\n### 3.8.1 (2024-12-05)\n\n  * Deprecated Monolog\\DateTimeImmutable in favor of Monolog\\JsonSerializableDateTimeImmutable (#1928)\n  * Fixed gelf keys not being valid when context/extra data keys have spaces in them (#1927)\n  * Fixed empty lines appearing in the stack traces when a custom formatter returned null (#1925)\n\n### 3.8.0 (2024-11-12)\n\n  * Added `$fileOpenMode` param to `StreamHandler` to define a custom fopen mode to open the log file (#1913)\n  * Fixed PHP 8.4 deprecation notices (#1903)\n  * Added ability to extend/override `IntrospectionProcessor` (#1899)\n  * Added `$timeout` param to `ProcessHandler` to configure the stream_select() timeout to avoid blocking too long (default is 1.0 sec) (#1916)\n  * Fixed JsonFormatter batch handling to normalize records individually to make sure they look the same as if they were handled one by one (#1906)\n  * Fixed `StreamHandler` handling of write failures so that it now closes/reopens the stream and retries the write once before failing (#1882)\n  * Fixed `StreamHandler` error handler causing issues if a stream handler triggers an error (#1866)\n  * Fixed `StreamHandler::reset` not closing the stream, so that it would fail to write in some cases with long running processes (#1862)\n  * Fixed `RotatingFileHandler` issue where rotation does not happen in some long running processes (#1905)\n  * Fixed `JsonFormatter` handling of incomplete classes (#1834)\n  * Fixed `RotatingFileHandler` bug where rotation could sometimes not happen correctly (#1905)\n\n### 3.7.0 (2024-06-28)\n\n  * Added `NormalizerFormatter->setBasePath(...)` (and `JsonFormatter` by extension) that allows removing the project's path from the stack trace output (47e301d3e)\n  * Fixed JsonFormatter handling of incomplete classes (#1834)\n  * Fixed private error handlers causing problems with custom StreamHandler implementations (#1866)\n\n### 3.6.0 (2024-04-12)\n\n  * Added `LineFormatter->setBasePath(...)` that allows removing the project's path from the stack trace output (#1873)\n  * Added `$includeExtra` option in `PsrHandler` to also use extra data to replace placeholder values in the message (#1852)\n  * Added ability to customize what is a duplicated message by extending the `DeduplicationHandler` (#1879)\n  * Added handling for using `GelfMessageFormatter` together with the `AmqpHandler` (#1869)\n  * Added ability to extend `GoogleCloudLoggingFormatter` (#1859)\n  * Fixed `__toString` failures in context data crashing the normalization process (#1868)\n  * Fixed PHP 8.4 deprecation warnings (#1874)\n\n### 3.5.0 (2023-10-27)\n\n  * Added ability to indent stack traces in LineFormatter via e.g. `indentStacktraces('  ')` (#1835)\n  * Added ability to configure a max level name length in LineFormatter via e.g. `setMaxLevelNameLength(3)` (#1850)\n  * Added support for indexed arrays (i.e. `[]` and not `{}` arrays once json serialized) containing inline linebreaks in LineFormatter (#1818)\n  * Added `WithMonologChannel` attribute for integrators to use to configure autowiring (#1847)\n  * Fixed log record `extra` data leaking between handlers that have handler-specific processors set (#1819)\n  * Fixed LogglyHandler issue with record level filtering (#1841)\n  * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804)\n  * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815)\n  * Fixed normalization error when normalizing incomplete classes (#1833)\n\n### 3.4.0 (2023-06-21)\n\n  * Added `LoadAverageProcessor` to track one of the 1, 5 or 15min load averages (#1803)\n  * Added support for priority to the `AsMonologProcessor` attribute (#1797)\n  * Added `TelegramBotHandler` `topic`/`message_thread_id` support (#1802)\n  * Fixed `FingersCrossedHandler` passthruLevel checking (#1801)\n  * Fixed support of yearly and monthly rotation log file to rotate only once a month/year (#1805)\n  * Fixed `TestHandler` method docs (#1794)\n  * Fixed handling of falsey `display_errors` string values (#1804)\n\n### 3.3.1 (2023-02-06)\n\n  * Fixed Logger not being serializable anymore (#1792)\n\n### 3.3.0 (2023-02-06)\n\n  * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748)\n  * Added `ClosureContextProcessor` to allow delaying the creation of context data by setting a Closure in context which is called when the log record is used (#1745)\n  * Added an ElasticsearchHandler option to set the `op_type` to `create` instead of the default `index` (#1766)\n  * Added support for enum context values in PsrLogMessageProcessor (#1773)\n  * Added graylog2/gelf-php 2.x support (#1747)\n  * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739)\n  * Fixed GitProcessor not filtering correctly based on Level (#1749)\n  * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791)\n  * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758)\n  * Fixed infinite loop detection within Fibers (#1753)\n  * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781)\n\n### 3.2.0 (2022-07-24)\n\n  * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734)\n  * Marked `Logger` `@final` as it should not be extended, prefer composition or talk to us if you are missing something\n  * Added RFC 5424 level (`7` to `0`) support to `Logger::log` and `Logger::addRecord` to increase interoperability (#1723)\n  * Added `SyslogFormatter` to output syslog-like files which can be consumed by tools like [lnav](https://lnav.org/) (#1689)\n  * Added support for `__toString` for objects which are not json serializable in `JsonFormatter` (#1733)\n  * Added `GoogleCloudLoggingFormatter` (#1719)\n  * Added support for Predis 2.x (#1732)\n  * Added `AmqpHandler->setExtraAttributes` to allow configuring attributes when using an AMQPExchange (#1724)\n  * Fixed serialization/unserialization of handlers to make sure private properties are included (#1727)\n  * Fixed allowInlineLineBreaks in LineFormatter causing issues with windows paths containing `\\n` or `\\r` sequences (#1720)\n  * Fixed max normalization depth not being taken into account when formatting exceptions with a deep chain of previous exceptions (#1726)\n  * Fixed PHP 8.2 deprecation warnings (#1722)\n  * Fixed rare race condition or filesystem issue where StreamHandler is unable to create the directory the log should go into yet it exists already (#1678)\n\n### 3.1.0 (2022-06-09)\n\n  * Added `$datetime` parameter to `Logger::addRecord` as low level API to allow logging into the past or future (#1682)\n  * Added `Logger::useLoggingLoopDetection` to allow disabling cyclic logging detection in concurrent frameworks (#1681)\n  * Fixed handling of fatal errors if callPrevious is disabled in ErrorHandler (#1670)\n  * Fixed interop issue by removing the need for a return type in ProcessorInterface (#1680)\n  * Marked the reusable `Monolog\\Test\\TestCase` class as `@internal` to make sure PHPStorm does not show it above PHPUnit, you may still use it to test your own handlers/etc though (#1677)\n  * Fixed RotatingFileHandler issue when the date format contained slashes (#1671)\n\n### 3.0.0 (2022-05-10)\n\nChanges from RC1\n\n- The `Monolog\\LevelName` enum does not exist anymore, use `Monolog\\Level->getName()` instead.\n\n### 3.0.0-RC1 (2022-05-08)\n\nThis is mostly a cleanup release offering stronger type guarantees for integrators with the\narray->object/enum changes, but there is no big new feature for end users.\n\nSee [UPGRADE notes](UPGRADE.md#300) for details on all breaking changes especially if you are extending/implementing Monolog classes/interfaces.\n\nNoteworthy BC Breaks:\n\n- The minimum supported PHP version is now `8.1.0`.\n- Log records have been converted from an array to a [`Monolog\\LogRecord` object](src/Monolog/LogRecord.php)\n  with public (and mostly readonly) properties. e.g. instead of doing\n  `$record['context']` use `$record->context`.\n  In formatters or handlers if you rather need an array to work with you can use `$record->toArray()`\n  to get back a Monolog 1/2 style record array. This will contain the enum values instead of enum cases\n  in the `level` and `level_name` keys to be more backwards compatible and use simpler data types.\n- `FormatterInterface`, `HandlerInterface`, `ProcessorInterface`, etc. changed to contain `LogRecord $record`\n  instead of `array $record` parameter types. If you want to support multiple Monolog versions this should\n  be possible by type-hinting nothing, or `array|LogRecord` if you support PHP 8.0+. You can then code\n  against the $record using Monolog 2 style as LogRecord implements ArrayAccess for BC.\n  The interfaces do not require a `LogRecord` return type even where it would be applicable, but if you only\n  support Monolog 3 in integration code I would recommend you use `LogRecord` return types wherever fitting\n  to ensure forward compatibility as it may be added in Monolog 4.\n- Log levels are now enums [`Monolog\\Level`](src/Monolog/Level.php) and [`Monolog\\LevelName`](src/Monolog/LevelName.php)\n- Removed deprecated SwiftMailerHandler, migrate to SymfonyMailerHandler instead.\n- `ResettableInterface::reset()` now requires a void return type.\n- All properties have had types added, which may require you to do so as well if you extended\n  a Monolog class and declared the same property.\n\nNew deprecations:\n\n- `Logger::DEBUG`, `Logger::ERROR`, etc. are now deprecated in favor of the `Monolog\\Level` enum.\n  e.g. instead of `Logger::WARNING` use `Level::Warning` if you need to pass the enum case\n  to Monolog or one of its handlers, or `Level::Warning->value` if you need the integer\n  value equal to what `Logger::WARNING` was giving you.\n- `Logger::getLevelName()` is now deprecated.\n\n### 2.10.0 (2024-11-12)\n\n  * Added `$fileOpenMode` to `StreamHandler` to define a custom fopen mode to open the log file (#1913)\n  * Fixed `StreamHandler` handling of write failures so that it now closes/reopens the stream and retries the write once before failing (#1882)\n  * Fixed `StreamHandler` error handler causing issues if a stream handler triggers an error (#1866)\n  * Fixed `JsonFormatter` handling of incomplete classes (#1834)\n  * Fixed `RotatingFileHandler` bug where rotation could sometimes not happen correctly (#1905)\n\n### 2.9.3 (2024-04-12)\n\n  * Fixed PHP 8.4 deprecation warnings (#1874)\n\n### 2.9.2 (2023-10-27)\n\n  * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804)\n  * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815)\n  * Fixed normalization error when normalizing incomplete classes (#1833)\n\n### 2.9.1 (2023-02-06)\n\n  * Fixed Logger not being serializable anymore (#1792)\n\n### 2.9.0 (2023-02-05)\n\n  * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748)\n  * Added support for enum context values in PsrLogMessageProcessor (#1773)\n  * Added graylog2/gelf-php 2.x support (#1747)\n  * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739)\n  * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791)\n  * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758)\n  * Fixed infinite loop detection within Fibers (#1753)\n  * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781)\n\n### 2.8.0 (2022-07-24)\n\n  * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734)\n  * Added RFC 5424 level (`7` to `0`) support to `Logger::log` and `Logger::addRecord` to increase interoperability (#1723)\n  * Added support for `__toString` for objects which are not json serializable in `JsonFormatter` (#1733)\n  * Added `GoogleCloudLoggingFormatter` (#1719)\n  * Added support for Predis 2.x (#1732)\n  * Added `AmqpHandler->setExtraAttributes` to allow configuring attributes when using an AMQPExchange (#1724)\n  * Fixed serialization/unserialization of handlers to make sure private properties are included (#1727)\n  * Fixed allowInlineLineBreaks in LineFormatter causing issues with windows paths containing `\\n` or `\\r` sequences (#1720)\n  * Fixed max normalization depth not being taken into account when formatting exceptions with a deep chain of previous exceptions (#1726)\n  * Fixed PHP 8.2 deprecation warnings (#1722)\n  * Fixed rare race condition or filesystem issue where StreamHandler is unable to create the directory the log should go into yet it exists already (#1678)\n\n### 2.7.0 (2022-06-09)\n\n  * Added `$datetime` parameter to `Logger::addRecord` as low level API to allow logging into the past or future (#1682)\n  * Added `Logger::useLoggingLoopDetection` to allow disabling cyclic logging detection in concurrent frameworks (#1681)\n  * Fixed handling of fatal errors if callPrevious is disabled in ErrorHandler (#1670)\n  * Marked the reusable `Monolog\\Test\\TestCase` class as `@internal` to make sure PHPStorm does not show it above PHPUnit, you may still use it to test your own handlers/etc though (#1677)\n  * Fixed RotatingFileHandler issue when the date format contained slashes (#1671)\n\n### 2.6.0 (2022-05-10)\n\n  * Deprecated `SwiftMailerHandler`, use `SymfonyMailerHandler` instead\n  * Added `SymfonyMailerHandler` (#1663)\n  * Added ElasticSearch 8.x support to the ElasticsearchHandler (#1662)\n  * Added a way to filter/modify stack traces in LineFormatter (#1665)\n  * Fixed UdpSocket not being able to reopen/reconnect after close()\n  * Fixed infinite loops if a Handler is triggering logging while handling log records\n\n### 2.5.0 (2022-04-08)\n\n  * Added `callType` to IntrospectionProcessor (#1612)\n  * Fixed AsMonologProcessor syntax to be compatible with PHP 7.2 (#1651)\n\n### 2.4.0 (2022-03-14)\n\n  * Added [`Monolog\\LogRecord`](src/Monolog/LogRecord.php) interface that can be used to type-hint records like `array|\\Monolog\\LogRecord $record` to be forward compatible with the upcoming Monolog 3 changes\n  * Added `includeStacktraces` constructor params to LineFormatter & JsonFormatter (#1603)\n  * Added `persistent`, `timeout`, `writingTimeout`, `connectionTimeout`, `chunkSize` constructor params to SocketHandler and derivatives (#1600)\n  * Added `AsMonologProcessor` PHP attribute which can help autowiring / autoconfiguration of processors if frameworks / integrations decide to make use of it. This is useless when used purely with Monolog (#1637)\n  * Added support for keeping native BSON types as is in MongoDBFormatter (#1620)\n  * Added support for a `user_agent` key in WebProcessor, disabled by default but you can use it by configuring the $extraFields you want (#1613)\n  * Added support for username/userIcon in SlackWebhookHandler (#1617)\n  * Added extension points to BrowserConsoleHandler (#1593)\n  * Added record message/context/extra info to exceptions thrown when a StreamHandler cannot open its stream to avoid completely losing the data logged (#1630)\n  * Fixed error handler signature to accept a null $context which happens with internal PHP errors (#1614)\n  * Fixed a few setter methods not returning `self` (#1609)\n  * Fixed handling of records going over the max Telegram message length (#1616)\n\n### 2.3.5 (2021-10-01)\n\n  * Fixed regression in StreamHandler since 2.3.3 on systems with the memory_limit set to >=20GB (#1592)\n\n### 2.3.4 (2021-09-15)\n\n  * Fixed support for psr/log 3.x (#1589)\n\n### 2.3.3 (2021-09-14)\n\n  * Fixed memory usage when using StreamHandler and calling stream_get_contents on the resource you passed to it (#1578, #1577)\n  * Fixed support for psr/log 2.x (#1587)\n  * Fixed some type annotations\n\n### 2.3.2 (2021-07-23)\n\n  * Fixed compatibility with PHP 7.2 - 7.4 when experiencing PCRE errors (#1568)\n\n### 2.3.1 (2021-07-14)\n\n  * Fixed Utils::getClass handling of anonymous classes not being fully compatible with PHP 8 (#1563)\n  * Fixed some `@inheritDoc` annotations having the wrong case\n\n### 2.3.0 (2021-07-05)\n\n  * Added a ton of PHPStan type annotations as well as type aliases on Monolog\\Logger for Record, Level and LevelName that you can import (#1557)\n  * Added ability to customize date format when using JsonFormatter (#1561)\n  * Fixed FilterHandler not calling reset on its internal handler when reset() is called on it (#1531)\n  * Fixed SyslogUdpHandler not setting the timezone correctly on DateTimeImmutable instances (#1540)\n  * Fixed StreamHandler thread safety - chunk size set to 2GB now to avoid interlacing when doing concurrent writes (#1553)\n\n### 2.2.0 (2020-12-14)\n\n  * Added JSON_PARTIAL_OUTPUT_ON_ERROR to default json encoding flags, to avoid dropping entire context data or even records due to an invalid subset of it somewhere\n  * Added setDateFormat to NormalizerFormatter (and Line/Json formatters by extension) to allow changing this after object creation\n  * Added RedisPubSubHandler to log records to a Redis channel using PUBLISH\n  * Added support for Elastica 7, and deprecated the $type argument of ElasticaFormatter which is not in use anymore as of Elastica 7\n  * Added support for millisecond write timeouts in SocketHandler, you can now pass floats to setWritingTimeout, e.g. 0.2 is 200ms\n  * Added support for unix sockets in SyslogUdpHandler (set $port to 0 to make the $host a unix socket)\n  * Added handleBatch support for TelegramBotHandler\n  * Added RFC5424e extended date format including milliseconds to SyslogUdpHandler\n  * Added support for configuring handlers with numeric level values in strings (coming from e.g. env vars)\n  * Fixed Wildfire/FirePHP/ChromePHP handling of unicode characters\n  * Fixed PHP 8 issues in SyslogUdpHandler\n  * Fixed internal type error when mbstring is missing\n\n### 2.1.1 (2020-07-23)\n\n  * Fixed removing of json encoding options\n  * Fixed type hint of $level not accepting strings in SendGridHandler and OverflowHandler\n  * Fixed SwiftMailerHandler not accepting email templates with an empty subject\n  * Fixed array access on null in RavenHandler\n  * Fixed unique_id in WebProcessor not being disableable\n\n### 2.1.0 (2020-05-22)\n\n  * Added `JSON_INVALID_UTF8_SUBSTITUTE` to default json flags, so that invalid UTF8 characters now get converted to [�](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) instead of being converted from ISO-8859-15 to UTF8 as it was before, which was hardly a comprehensive solution\n  * Added `$ignoreEmptyContextAndExtra` option to JsonFormatter to skip empty context/extra entirely from the output\n  * Added `$parseMode`, `$disableWebPagePreview` and `$disableNotification` options to TelegramBotHandler\n  * Added tentative support for PHP 8\n  * NormalizerFormatter::addJsonEncodeOption and removeJsonEncodeOption are now public to allow modifying default json flags\n  * Fixed GitProcessor type error when there is no git repo present\n  * Fixed normalization of SoapFault objects containing deeply nested objects as \"detail\"\n  * Fixed support for relative paths in RotatingFileHandler\n\n### 2.0.2 (2019-12-20)\n\n  * Fixed ElasticsearchHandler swallowing exceptions details when failing to index log records\n  * Fixed normalization of SoapFault objects containing non-strings as \"detail\" in LineFormatter\n  * Fixed formatting of resources in JsonFormatter\n  * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services)\n  * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it\n  * Fixed Turkish locale messing up the conversion of level names to their constant values\n\n### 2.0.1 (2019-11-13)\n\n  * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable\n  * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler, OverflowHandler and SamplingHandler\n  * Fixed BrowserConsoleHandler formatting when using multiple styles\n  * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings\n  * Fixed normalization of SoapFault objects containing non-strings as \"detail\"\n  * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding\n  * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB).\n  * Fixed type error in BrowserConsoleHandler when the context array of log records was not associative.\n\n### 2.0.0 (2019-08-30)\n\n  * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release\n  * BC Break: Logger methods log/debug/info/notice/warning/error/critical/alert/emergency now have explicit void return types\n  * Added FallbackGroupHandler which works like the WhatFailureGroupHandler but stops dispatching log records as soon as one handler accepted it\n  * Fixed support for UTF-8 when cutting strings to avoid cutting a multibyte-character in half\n  * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases\n  * Fixed date timezone handling in SyslogUdpHandler\n\n### 2.0.0-beta2 (2019-07-06)\n\n  * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release\n  * BC Break: PHP 7.2 is now the minimum required PHP version.\n  * BC Break: Removed SlackbotHandler, RavenHandler and HipChatHandler, see [UPGRADE.md](UPGRADE.md) for details\n  * Added OverflowHandler which will only flush log records to its nested handler when reaching a certain amount of logs (i.e. only pass through when things go really bad)\n  * Added TelegramBotHandler to log records to a [Telegram](https://core.telegram.org/bots/api) bot account\n  * Added support for JsonSerializable when normalizing exceptions\n  * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler\n  * Added SoapFault details to formatted exceptions\n  * Fixed DeduplicationHandler silently failing to start when file could not be opened\n  * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records\n  * Fixed GelfFormatter losing some data when one attachment was too long\n  * Fixed issue in SignalHandler restarting syscalls functionality\n  * Improved performance of LogglyHandler when sending multiple logs in a single request\n\n### 2.0.0-beta1 (2018-12-08)\n\n  * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release\n  * BC Break: PHP 7.1 is now the minimum required PHP version.\n  * BC Break: Quite a few interface changes, only relevant if you implemented your own handlers/processors/formatters\n  * BC Break: Removed non-PSR-3 methods to add records, all the `add*` (e.g. `addWarning`) methods as well as `emerg`, `crit`, `err` and `warn`\n  * BC Break: The record timezone is now set per Logger instance and not statically anymore\n  * BC Break: There is no more default handler configured on empty Logger instances\n  * BC Break: ElasticSearchHandler renamed to ElasticaHandler\n  * BC Break: Various handler-specific breaks, see [UPGRADE.md](UPGRADE.md) for details\n  * Added scalar type hints and return hints in all the places it was possible. Switched strict_types on for more reliability.\n  * Added DateTimeImmutable support, all record datetime are now immutable, and will toString/json serialize with the correct date format, including microseconds (unless disabled)\n  * Added timezone and microseconds to the default date format\n  * Added SendGridHandler to use the SendGrid API to send emails\n  * Added LogmaticHandler to use the Logmatic.io API to store log records\n  * Added SqsHandler to send log records to an AWS SQS queue\n  * Added ElasticsearchHandler to send records via the official ES library. Elastica users should now use ElasticaHandler instead of ElasticSearchHandler\n  * Added NoopHandler which is similar to the NullHandle but does not prevent the bubbling of log records to handlers further down the configuration, useful for temporarily disabling a handler in configuration files\n  * Added ProcessHandler to write log output to the STDIN of a given process\n  * Added HostnameProcessor that adds the machine's hostname to log records\n  * Added a `$dateFormat` option to the PsrLogMessageProcessor which lets you format DateTime instances nicely\n  * Added support for the PHP 7.x `mongodb` extension in the MongoDBHandler\n  * Fixed many minor issues in various handlers, and probably added a few regressions too\n\n### 1.26.1 (2021-05-28)\n\n  * Fixed PHP 8.1 deprecation warning\n\n### 1.26.0 (2020-12-14)\n\n  * Added $dateFormat and $removeUsedContextFields arguments to PsrLogMessageProcessor (backport from 2.x)\n\n### 1.25.5 (2020-07-23)\n\n  * Fixed array access on null in RavenHandler\n  * Fixed unique_id in WebProcessor not being disableable\n\n### 1.25.4 (2020-05-22)\n\n  * Fixed GitProcessor type error when there is no git repo present\n  * Fixed normalization of SoapFault objects containing deeply nested objects as \"detail\"\n  * Fixed support for relative paths in RotatingFileHandler\n\n### 1.25.3 (2019-12-20)\n\n  * Fixed formatting of resources in JsonFormatter\n  * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services)\n  * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it\n  * Fixed Turkish locale messing up the conversion of level names to their constant values\n\n### 1.25.2 (2019-11-13)\n\n  * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable\n  * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler and SamplingHandler\n  * Fixed BrowserConsoleHandler formatting when using multiple styles\n  * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings\n  * Fixed normalization of SoapFault objects containing non-strings as \"detail\"\n  * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding\n\n### 1.25.1 (2019-09-06)\n\n  * Fixed forward-compatible interfaces to be compatible with Monolog 1.x too.\n\n### 1.25.0 (2019-09-06)\n\n  * Deprecated SlackbotHandler, use SlackWebhookHandler or SlackHandler instead\n  * Deprecated RavenHandler, use sentry/sentry 2.x and their Sentry\\Monolog\\Handler instead\n  * Deprecated HipChatHandler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead\n  * Added forward-compatible interfaces and traits FormattableHandlerInterface, FormattableHandlerTrait, ProcessableHandlerInterface, ProcessableHandlerTrait. If you use modern PHP and want to make code compatible with Monolog 1 and 2 this can help. You will have to require at least Monolog 1.25 though.\n  * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler\n  * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records\n  * Fixed issue in SignalHandler restarting syscalls functionality\n  * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases\n  * Fixed ZendMonitorHandler to work with the latest Zend Server versions\n  * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB).\n\n### 1.24.0 (2018-11-05)\n\n  * BC Notice: If you are extending any of the Monolog's Formatters' `normalize` method, make sure you add the new `$depth = 0` argument to your function signature to avoid strict PHP warnings.\n  * Added a `ResettableInterface` in order to reset/reset/clear/flush handlers and processors\n  * Added a `ProcessorInterface` as an optional way to label a class as being a processor (mostly useful for autowiring dependency containers)\n  * Added a way to log signals being received using Monolog\\SignalHandler\n  * Added ability to customize error handling at the Logger level using Logger::setExceptionHandler\n  * Added InsightOpsHandler to migrate users of the LogEntriesHandler\n  * Added protection to NormalizerFormatter against circular and very deep structures, it now stops normalizing at a depth of 9\n  * Added capture of stack traces to ErrorHandler when logging PHP errors\n  * Added RavenHandler support for a `contexts` context or extra key to forward that to Sentry's contexts\n  * Added forwarding of context info to FluentdFormatter\n  * Added SocketHandler::setChunkSize to override the default chunk size in case you must send large log lines to rsyslog for example\n  * Added ability to extend/override BrowserConsoleHandler\n  * Added SlackWebhookHandler::getWebhookUrl and SlackHandler::getToken to enable class extensibility\n  * Added SwiftMailerHandler::getSubjectFormatter to enable class extensibility\n  * Dropped official support for HHVM in test builds\n  * Fixed normalization of exception traces when call_user_func is used to avoid serializing objects and the data they contain\n  * Fixed naming of fields in Slack handler, all field names are now capitalized in all cases\n  * Fixed HipChatHandler bug where slack dropped messages randomly\n  * Fixed normalization of objects in Slack handlers\n  * Fixed support for PHP7's Throwable in NewRelicHandler\n  * Fixed race bug when StreamHandler sometimes incorrectly reported it failed to create a directory\n  * Fixed table row styling issues in HtmlFormatter\n  * Fixed RavenHandler dropping the message when logging exception\n  * Fixed WhatFailureGroupHandler skipping processors when using handleBatch\n    and implement it where possible\n  * Fixed display of anonymous class names\n\n### 1.23.0 (2017-06-19)\n\n  * Improved SyslogUdpHandler's support for RFC5424 and added optional `$ident` argument\n  * Fixed GelfHandler truncation to be per field and not per message\n  * Fixed compatibility issue with PHP <5.3.6\n  * Fixed support for headless Chrome in ChromePHPHandler\n  * Fixed support for latest Aws SDK in DynamoDbHandler\n  * Fixed support for SwiftMailer 6.0+ in SwiftMailerHandler\n\n### 1.22.1 (2017-03-13)\n\n  * Fixed lots of minor issues in the new Slack integrations\n  * Fixed support for allowInlineLineBreaks in LineFormatter when formatting exception backtraces\n\n### 1.22.0 (2016-11-26)\n\n  * Added SlackbotHandler and SlackWebhookHandler to set up Slack integration more easily\n  * Added MercurialProcessor to add mercurial revision and branch names to log records\n  * Added support for AWS SDK v3 in DynamoDbHandler\n  * Fixed fatal errors occurring when normalizing generators that have been fully consumed\n  * Fixed RollbarHandler to include a level (rollbar level), monolog_level (original name), channel and datetime (unix)\n  * Fixed RollbarHandler not flushing records automatically, calling close() explicitly is not necessary anymore\n  * Fixed SyslogUdpHandler to avoid sending empty frames\n  * Fixed a few PHP 7.0 and 7.1 compatibility issues\n\n### 1.21.0 (2016-07-29)\n\n  * Break: Reverted the addition of $context when the ErrorHandler handles regular php errors from 1.20.0 as it was causing issues\n  * Added support for more formats in RotatingFileHandler::setFilenameFormat as long as they have Y, m and d in order\n  * Added ability to format the main line of text the SlackHandler sends by explicitly setting a formatter on the handler\n  * Added information about SoapFault instances in NormalizerFormatter\n  * Added $handleOnlyReportedErrors option on ErrorHandler::registerErrorHandler (default true) to allow logging of all errors no matter the error_reporting level\n\n### 1.20.0 (2016-07-02)\n\n  * Added FingersCrossedHandler::activate() to manually trigger the handler regardless of the activation policy\n  * Added StreamHandler::getUrl to retrieve the stream's URL\n  * Added ability to override addRow/addTitle in HtmlFormatter\n  * Added the $context to context information when the ErrorHandler handles a regular php error\n  * Deprecated RotatingFileHandler::setFilenameFormat to only support 3 formats: Y, Y-m and Y-m-d\n  * Fixed WhatFailureGroupHandler to work with PHP7 throwables\n  * Fixed a few minor bugs\n\n### 1.19.0 (2016-04-12)\n\n  * Break: StreamHandler will not close streams automatically that it does not own. If you pass in a stream (not a path/url), then it will not close it for you. You can retrieve those using getStream() if needed\n  * Added DeduplicationHandler to remove duplicate records from notifications across multiple requests, useful for email or other notifications on errors\n  * Added ability to use `%message%` and other LineFormatter replacements in the subject line of emails sent with NativeMailHandler and SwiftMailerHandler\n  * Fixed HipChatHandler handling of long messages\n\n### 1.18.2 (2016-04-02)\n\n  * Fixed ElasticaFormatter to use more precise dates\n  * Fixed GelfMessageFormatter sending too long messages\n\n### 1.18.1 (2016-03-13)\n\n  * Fixed SlackHandler bug where slack dropped messages randomly\n  * Fixed RedisHandler issue when using with the PHPRedis extension\n  * Fixed AmqpHandler content-type being incorrectly set when using with the AMQP extension\n  * Fixed BrowserConsoleHandler regression\n\n### 1.18.0 (2016-03-01)\n\n  * Added optional reduction of timestamp precision via `Logger->useMicrosecondTimestamps(false)`, disabling it gets you a bit of performance boost but reduces the precision to the second instead of microsecond\n  * Added possibility to skip some extra stack frames in IntrospectionProcessor if you have some library wrapping Monolog that is always adding frames\n  * Added `Logger->withName` to clone a logger (keeping all handlers) with a new name\n  * Added FluentdFormatter for the Fluentd unix socket protocol\n  * Added HandlerWrapper base class to ease the creation of handler wrappers, just extend it and override as needed\n  * Added support for replacing context sub-keys using `%context.*%` in LineFormatter\n  * Added support for `payload` context value in RollbarHandler\n  * Added setRelease to RavenHandler to describe the application version, sent with every log\n  * Added support for `fingerprint` context value in RavenHandler\n  * Fixed JSON encoding errors that would gobble up the whole log record, we now handle those more gracefully by dropping chars as needed\n  * Fixed write timeouts in SocketHandler and derivatives, set to 10sec by default, lower it with `setWritingTimeout()`\n  * Fixed PHP7 compatibility with regard to Exception/Throwable handling in a few places\n\n### 1.17.2 (2015-10-14)\n\n  * Fixed ErrorHandler compatibility with non-Monolog PSR-3 loggers\n  * Fixed SlackHandler handling to use slack functionalities better\n  * Fixed SwiftMailerHandler bug when sending multiple emails they all had the same id\n  * Fixed 5.3 compatibility regression\n\n### 1.17.1 (2015-08-31)\n\n  * Fixed RollbarHandler triggering PHP notices\n\n### 1.17.0 (2015-08-30)\n\n  * Added support for `checksum` and `release` context/extra values in RavenHandler\n  * Added better support for exceptions in RollbarHandler\n  * Added UidProcessor::getUid\n  * Added support for showing the resource type in NormalizedFormatter\n  * Fixed IntrospectionProcessor triggering PHP notices\n\n### 1.16.0 (2015-08-09)\n\n  * Added IFTTTHandler to notify ifttt.com triggers\n  * Added Logger::setHandlers() to allow setting/replacing all handlers\n  * Added $capSize in RedisHandler to cap the log size\n  * Fixed StreamHandler creation of directory to only trigger when the first log write happens\n  * Fixed bug in the handling of curl failures\n  * Fixed duplicate logging of fatal errors when both error and fatal error handlers are registered in monolog's ErrorHandler\n  * Fixed missing fatal errors records with handlers that need to be closed to flush log records\n  * Fixed TagProcessor::addTags support for associative arrays\n\n### 1.15.0 (2015-07-12)\n\n  * Added addTags and setTags methods to change a TagProcessor\n  * Added automatic creation of directories if they are missing for a StreamHandler to open a log file\n  * Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure\n  * Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used\n  * Fixed HTML/JS escaping in BrowserConsoleHandler\n  * Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only)\n\n### 1.14.0 (2015-06-19)\n\n  * Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library\n  * Added support for objects implementing __toString in the NormalizerFormatter\n  * Added support for HipChat's v2 API in HipChatHandler\n  * Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app\n  * Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true)\n  * Fixed curl errors being silently suppressed\n\n### 1.13.1 (2015-03-09)\n\n  * Fixed regression in HipChat requiring a new token to be created\n\n### 1.13.0 (2015-03-05)\n\n  * Added Registry::hasLogger to check for the presence of a logger instance\n  * Added context.user support to RavenHandler\n  * Added HipChat API v2 support in the HipChatHandler\n  * Added NativeMailerHandler::addParameter to pass params to the mail() process\n  * Added context data to SlackHandler when $includeContextAndExtra is true\n  * Added ability to customize the Swift_Message per-email in SwiftMailerHandler\n  * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided\n  * Fixed serialization of INF and NaN values in Normalizer and LineFormatter\n\n### 1.12.0 (2014-12-29)\n\n  * Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers.\n  * Added PsrHandler to forward records to another PSR-3 logger\n  * Added SamplingHandler to wrap around a handler and include only every Nth record\n  * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now)\n  * Added exception codes in the output of most formatters\n  * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line)\n  * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data\n  * Added $host to HipChatHandler for users of private instances\n  * Added $transactionName to NewRelicHandler and support for a transaction_name context value\n  * Fixed MandrillHandler to avoid outputting API call responses\n  * Fixed some non-standard behaviors in SyslogUdpHandler\n\n### 1.11.0 (2014-09-30)\n\n  * Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names\n  * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails\n  * Added MandrillHandler to send emails via the Mandrillapp.com API\n  * Added SlackHandler to log records to a Slack.com account\n  * Added FleepHookHandler to log records to a Fleep.io account\n  * Added LogglyHandler::addTag to allow adding tags to an existing handler\n  * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end\n  * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing\n  * Added support for PhpAmqpLib in the AmqpHandler\n  * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs\n  * Added support for adding extra fields from $_SERVER in the WebProcessor\n  * Fixed support for non-string values in PrsLogMessageProcessor\n  * Fixed SwiftMailer messages being sent with the wrong date in long running scripts\n  * Fixed minor PHP 5.6 compatibility issues\n  * Fixed BufferHandler::close being called twice\n\n### 1.10.0 (2014-06-04)\n\n  * Added Logger::getHandlers() and Logger::getProcessors() methods\n  * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached\n  * Added support for extra data in NewRelicHandler\n  * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines\n\n### 1.9.1 (2014-04-24)\n\n  * Fixed regression in RotatingFileHandler file permissions\n  * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records\n  * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative\n\n### 1.9.0 (2014-04-20)\n\n  * Added LogEntriesHandler to send logs to a LogEntries account\n  * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler\n  * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes\n  * Added support for table formatting in FirePHPHandler via the table context key\n  * Added a TagProcessor to add tags to records, and support for tags in RavenHandler\n  * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files\n  * Added sound support to the PushoverHandler\n  * Fixed multi-threading support in StreamHandler\n  * Fixed empty headers issue when ChromePHPHandler received no records\n  * Fixed default format of the ErrorLogHandler\n\n### 1.8.0 (2014-03-23)\n\n  * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them\n  * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output\n  * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler\n  * Added FlowdockHandler to send logs to a Flowdock account\n  * Added RollbarHandler to send logs to a Rollbar account\n  * Added HtmlFormatter to send prettier log emails with colors for each log level\n  * Added GitProcessor to add the current branch/commit to extra record data\n  * Added a Monolog\\Registry class to allow easier global access to pre-configured loggers\n  * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement\n  * Added support for HHVM\n  * Added support for Loggly batch uploads\n  * Added support for tweaking the content type and encoding in NativeMailerHandler\n  * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor\n  * Fixed batch request support in GelfHandler\n\n### 1.7.0 (2013-11-14)\n\n  * Added ElasticSearchHandler to send logs to an Elastic Search server\n  * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB\n  * Added SyslogUdpHandler to send logs to a remote syslogd server\n  * Added LogglyHandler to send logs to a Loggly account\n  * Added $level to IntrospectionProcessor so it only adds backtraces when needed\n  * Added $version to LogstashFormatter to allow using the new v1 Logstash format\n  * Added $appName to NewRelicHandler\n  * Added configuration of Pushover notification retries/expiry\n  * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default\n  * Added chainability to most setters for all handlers\n  * Fixed RavenHandler batch processing so it takes the message from the record with highest priority\n  * Fixed HipChatHandler batch processing so it sends all messages at once\n  * Fixed issues with eAccelerator\n  * Fixed and improved many small things\n\n### 1.6.0 (2013-07-29)\n\n  * Added HipChatHandler to send logs to a HipChat chat room\n  * Added ErrorLogHandler to send logs to PHP's error_log function\n  * Added NewRelicHandler to send logs to NewRelic's service\n  * Added Monolog\\ErrorHandler helper class to register a Logger as exception/error/fatal handler\n  * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel\n  * Added stack traces output when normalizing exceptions (json output & co)\n  * Added Monolog\\Logger::API constant (currently 1)\n  * Added support for ChromePHP's v4.0 extension\n  * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel\n  * Added support for sending messages to multiple users at once with the PushoverHandler\n  * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler)\n  * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now\n  * Fixed issue in RotatingFileHandler when an open_basedir restriction is active\n  * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0\n  * Fixed SyslogHandler issue when many were used concurrently with different facilities\n\n### 1.5.0 (2013-04-23)\n\n  * Added ProcessIdProcessor to inject the PID in log records\n  * Added UidProcessor to inject a unique identifier to all log records of one request/run\n  * Added support for previous exceptions in the LineFormatter exception serialization\n  * Added Monolog\\Logger::getLevels() to get all available levels\n  * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle\n\n### 1.4.1 (2013-04-01)\n\n  * Fixed exception formatting in the LineFormatter to be more minimalistic\n  * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0\n  * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days\n  * Fixed WebProcessor array access so it checks for data presence\n  * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors\n\n### 1.4.0 (2013-02-13)\n\n  * Added RedisHandler to log to Redis via the Predis library or the phpredis extension\n  * Added ZendMonitorHandler to log to the Zend Server monitor\n  * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor\n  * Added `$useSSL` option to the PushoverHandler which is enabled by default\n  * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously\n  * Fixed header injection capability in the NativeMailHandler\n\n### 1.3.1 (2013-01-11)\n\n  * Fixed LogstashFormatter to be usable with stream handlers\n  * Fixed GelfMessageFormatter levels on Windows\n\n### 1.3.0 (2013-01-08)\n\n  * Added PSR-3 compliance, the `Monolog\\Logger` class is now an instance of `Psr\\Log\\LoggerInterface`\n  * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance\n  * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash)\n  * Added PushoverHandler to send mobile notifications\n  * Added CouchDBHandler and DoctrineCouchDBHandler\n  * Added RavenHandler to send data to Sentry servers\n  * Added support for the new MongoClient class in MongoDBHandler\n  * Added microsecond precision to log records' timestamps\n  * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing\n    the oldest entries\n  * Fixed normalization of objects with cyclic references\n\n### 1.2.1 (2012-08-29)\n\n  * Added new $logopts arg to SyslogHandler to provide custom openlog options\n  * Fixed fatal error in SyslogHandler\n\n### 1.2.0 (2012-08-18)\n\n  * Added AmqpHandler (for use with AMQP servers)\n  * Added CubeHandler\n  * Added NativeMailerHandler::addHeader() to send custom headers in mails\n  * Added the possibility to specify more than one recipient in NativeMailerHandler\n  * Added the possibility to specify float timeouts in SocketHandler\n  * Added NOTICE and EMERGENCY levels to conform with RFC 5424\n  * Fixed the log records to use the php default timezone instead of UTC\n  * Fixed BufferHandler not being flushed properly on PHP fatal errors\n  * Fixed normalization of exotic resource types\n  * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog\n\n### 1.1.0 (2012-04-23)\n\n  * Added Monolog\\Logger::isHandling() to check if a handler will\n    handle the given log level\n  * Added ChromePHPHandler\n  * Added MongoDBHandler\n  * Added GelfHandler (for use with Graylog2 servers)\n  * Added SocketHandler (for use with syslog-ng for example)\n  * Added NormalizerFormatter\n  * Added the possibility to change the activation strategy of the FingersCrossedHandler\n  * Added possibility to show microseconds in logs\n  * Added `server` and `referer` to WebProcessor output\n\n### 1.0.2 (2011-10-24)\n\n  * Fixed bug in IE with large response headers and FirePHPHandler\n\n### 1.0.1 (2011-08-25)\n\n  * Added MemoryPeakUsageProcessor and MemoryUsageProcessor\n  * Added Monolog\\Logger::getName() to get a logger's channel name\n\n### 1.0.0 (2011-07-06)\n\n  * Added IntrospectionProcessor to get info from where the logger was called\n  * Fixed WebProcessor in CLI\n\n### 1.0.0-RC1 (2011-07-01)\n\n  * Initial release\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/LICENSE",
    "content": "Copyright (c) 2011-2020 Jordi Boggiano\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/README.md",
    "content": "<p align=\"center\"><img src=\"logo.jpg\" alt=\"Monolog\" width=\"400\"></p>\n\n# Monolog - Logging for PHP [![Continuous Integration](https://github.com/Seldaek/monolog/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/Seldaek/monolog/actions)\n\n[![Total Downloads](https://img.shields.io/packagist/dt/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog)\n[![Latest Stable Version](https://img.shields.io/packagist/v/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog)\n\n>**Note** This is the **documentation for Monolog 3.x**, if you are using older releases\n>see the documentation for [Monolog 2.x](https://github.com/Seldaek/monolog/blob/2.x/README.md) or [Monolog 1.x](https://github.com/Seldaek/monolog/blob/1.x/README.md)\n\nMonolog sends your logs to files, sockets, inboxes, databases and various\nweb services. See the complete list of handlers below. Special handlers\nallow you to build advanced logging strategies.\n\nThis library implements the [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)\ninterface that you can type-hint against in your own libraries to keep\na maximum of interoperability. You can also use it in your applications to\nmake sure you can always use another compatible logger at a later time.\nAs of 1.11.0 Monolog public APIs will also accept PSR-3 log levels.\nInternally Monolog still uses its own level scheme since it predates PSR-3.\n\n<div align=\"center\">\n  <hr>\n  <sup><b>Sponsored by:</b></sup>\n  <br>\n  <a href=\"https://betterstack.com\">\n    <div>\n      <img src=\"https://github.com/Seldaek/monolog/assets/183678/7de58ce0-2fa2-45c0-b3e8-e60cebb3c4cf\" width=\"200\" alt=\"Better Stack\">\n    </div>\n    <div>\n      Better Stack lets you centralize, search, and visualize your logs.\n    </div>\n  </a>\n  <br>\n  <hr>\n</div>\n\n## Installation\n\nInstall the latest version with\n\n```bash\ncomposer require monolog/monolog\n```\n\n## Basic Usage\n\n```php\n<?php\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n// create a log channel\n$log = new Logger('name');\n$log->pushHandler(new StreamHandler('path/to/your.log', Level::Warning));\n\n// add records to the log\n$log->warning('Foo');\n$log->error('Bar');\n```\n\n## Documentation\n\n- [Usage Instructions](doc/01-usage.md)\n- [Handlers, Formatters and Processors](doc/02-handlers-formatters-processors.md)\n- [Utility Classes](doc/03-utilities.md)\n- [Extending Monolog](doc/04-extending.md)\n- [Log Record Structure](doc/message-structure.md)\n\n## Support Monolog Financially\n\nGet supported Monolog and help fund the project with the [Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-monolog-monolog?utm_source=packagist-monolog-monolog&utm_medium=referral&utm_campaign=enterprise) or via [GitHub sponsorship](https://github.com/sponsors/Seldaek).\n\nTidelift delivers commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use.\n\n## Third Party Packages\n\nThird party handlers, formatters and processors are\n[listed in the wiki](https://github.com/Seldaek/monolog/wiki/Third-Party-Packages). You\ncan also add your own there if you publish one.\n\n## About\n\n### Requirements\n\n- Monolog `^3.0` works with PHP 8.1 or above.\n- Monolog `^2.5` works with PHP 7.2 or above.\n- Monolog `^1.25` works with PHP 5.3 up to 8.1, but is not very maintained anymore and will not receive PHP support fixes anymore.\n\n### Support\n\nMonolog 1.x support is somewhat limited at this point and only important fixes will be done. You should migrate to Monolog 2 or 3 where possible to benefit from all the latest features and fixes.\n\n### Submitting bugs and feature requests\n\nBugs and feature request are tracked on [GitHub](https://github.com/Seldaek/monolog/issues)\n\n### Framework Integrations\n\n- Frameworks and libraries using [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)\n  can be used very easily with Monolog since it implements the interface.\n- [Symfony](http://symfony.com) comes out of the box with Monolog.\n- [Laravel](http://laravel.com/) comes out of the box with Monolog.\n- [Lumen](http://lumen.laravel.com/) comes out of the box with Monolog.\n- [PPI](https://github.com/ppi/framework) comes out of the box with Monolog.\n- [CakePHP](http://cakephp.org/) is usable with Monolog via the [cakephp-monolog](https://github.com/jadb/cakephp-monolog) plugin.\n- [XOOPS 2.6](http://xoops.org/) comes out of the box with Monolog.\n- [Aura.Web_Project](https://github.com/auraphp/Aura.Web_Project) comes out of the box with Monolog.\n- [Nette Framework](http://nette.org/en/) is usable with Monolog via the [contributte/monolog](https://github.com/contributte/monolog) or [orisai/nette-monolog](https://github.com/orisai/nette-monolog) extensions.\n- [Proton Micro Framework](https://github.com/alexbilbie/Proton) comes out of the box with Monolog.\n- [FuelPHP](http://fuelphp.com/) comes out of the box with Monolog.\n- [Equip Framework](https://github.com/equip/framework) comes out of the box with Monolog.\n- [Yii 2](http://www.yiiframework.com/) is usable with Monolog via the [yii2-monolog](https://github.com/merorafael/yii2-monolog) or [yii2-psr-log-target](https://github.com/samdark/yii2-psr-log-target) plugins.\n- [Hawkbit Micro Framework](https://github.com/HawkBitPhp/hawkbit) comes out of the box with Monolog.\n- [SilverStripe 4](https://www.silverstripe.org/) comes out of the box with Monolog.\n- [Drupal](https://www.drupal.org/) is usable with Monolog via the [monolog](https://www.drupal.org/project/monolog) module.\n- [Aimeos ecommerce framework](https://aimeos.org/) is usable with Monolog via the [ai-monolog](https://github.com/aimeos/ai-monolog) extension.\n- [Magento](https://magento.com/) comes out of the box with Monolog.\n- [Spiral Framework](https://spiral.dev) comes out of the box with Monolog bridge.\n- [WebFramework](https://web-framework.com/) comes out of the box with Monolog.\n\n### Author\n\nJordi Boggiano - <j.boggiano@seld.be> - <http://twitter.com/seldaek><br />\nSee also the list of [contributors](https://github.com/Seldaek/monolog/contributors) who participated in this project.\n\n### License\n\nMonolog is licensed under the MIT License - see the [LICENSE](LICENSE) file for details\n\n### Acknowledgements\n\nThis library is heavily inspired by Python's [Logbook](https://logbook.readthedocs.io/en/stable/)\nlibrary, although most concepts have been adjusted to fit to the PHP world.\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/composer.json",
    "content": "{\n    \"name\": \"monolog/monolog\",\n    \"description\": \"Sends your logs to files, sockets, inboxes, databases and various web services\",\n    \"keywords\": [\"log\", \"logging\", \"psr-3\"],\n    \"homepage\": \"https://github.com/Seldaek/monolog\",\n    \"type\": \"library\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Jordi Boggiano\",\n            \"email\": \"j.boggiano@seld.be\",\n            \"homepage\": \"https://seld.be\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.1\",\n        \"psr/log\": \"^2.0 || ^3.0\"\n    },\n    \"require-dev\": {\n        \"ext-json\": \"*\",\n        \"aws/aws-sdk-php\": \"^3.0\",\n        \"doctrine/couchdb\": \"~1.0@dev\",\n        \"elasticsearch/elasticsearch\": \"^7 || ^8\",\n        \"graylog2/gelf-php\": \"^1.4.2 || ^2.0\",\n        \"guzzlehttp/guzzle\": \"^7.4.5\",\n        \"guzzlehttp/psr7\": \"^2.2\",\n        \"mongodb/mongodb\": \"^1.8 || ^2.0\",\n        \"php-amqplib/php-amqplib\": \"~2.4 || ^3\",\n        \"php-console/php-console\": \"^3.1.8\",\n        \"phpstan/phpstan\": \"^2\",\n        \"phpstan/phpstan-deprecation-rules\": \"^2\",\n        \"phpstan/phpstan-strict-rules\": \"^2\",\n        \"phpunit/phpunit\": \"^10.5.17 || ^11.0.7\",\n        \"predis/predis\": \"^1.1 || ^2\",\n        \"rollbar/rollbar\": \"^4.0\",\n        \"ruflin/elastica\": \"^7 || ^8\",\n        \"symfony/mailer\": \"^5.4 || ^6\",\n        \"symfony/mime\": \"^5.4 || ^6\"\n    },\n    \"suggest\": {\n        \"graylog2/gelf-php\": \"Allow sending log messages to a GrayLog2 server\",\n        \"doctrine/couchdb\": \"Allow sending log messages to a CouchDB server\",\n        \"ruflin/elastica\": \"Allow sending log messages to an Elastic Search server\",\n        \"elasticsearch/elasticsearch\": \"Allow sending log messages to an Elasticsearch server via official client\",\n        \"php-amqplib/php-amqplib\": \"Allow sending log messages to an AMQP server using php-amqplib\",\n        \"ext-amqp\": \"Allow sending log messages to an AMQP server (1.0+ required)\",\n        \"ext-mongodb\": \"Allow sending log messages to a MongoDB server (via driver)\",\n        \"mongodb/mongodb\": \"Allow sending log messages to a MongoDB server (via library)\",\n        \"aws/aws-sdk-php\": \"Allow sending log messages to AWS services like DynamoDB\",\n        \"rollbar/rollbar\": \"Allow sending log messages to Rollbar\",\n        \"ext-mbstring\": \"Allow to work properly with unicode symbols\",\n        \"ext-sockets\": \"Allow sending log messages to a Syslog server (via UDP driver)\",\n        \"ext-curl\": \"Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler\",\n        \"ext-openssl\": \"Required to send log messages using SSL\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\"Monolog\\\\\": \"src/Monolog\"}\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\"Monolog\\\\\": \"tests/Monolog\"}\n    },\n    \"provide\": {\n        \"psr/log-implementation\": \"3.0.0\"\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-main\": \"3.x-dev\"\n        }\n    },\n    \"scripts\": {\n        \"test\": \"@php vendor/bin/phpunit\",\n        \"phpstan\": \"@php vendor/bin/phpstan analyse\"\n    },\n    \"config\": {\n        \"lock\": false,\n        \"sort-packages\": true,\n        \"platform-check\": false,\n        \"allow-plugins\": {\n            \"php-http/discovery\": false\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Attribute;\n\n/**\n * A reusable attribute to help configure a class or a method as a processor.\n *\n * Using it offers no guarantee: it needs to be leveraged by a Monolog third-party consumer.\n *\n * Using it with the Monolog library only has no effect at all: processors should still be turned into a callable if\n * needed and manually pushed to the loggers and to the processable handlers.\n */\n#[\\Attribute(\\Attribute::TARGET_CLASS | \\Attribute::TARGET_METHOD | \\Attribute::IS_REPEATABLE)]\nclass AsMonologProcessor\n{\n    /**\n     * @param string|null $channel  The logging channel the processor should be pushed to.\n     * @param string|null $handler  The handler the processor should be pushed to.\n     * @param string|null $method   The method that processes the records (if the attribute is used at the class level).\n     * @param int|null    $priority The priority of the processor so the order can be determined.\n     */\n    public function __construct(\n        public readonly ?string $channel = null,\n        public readonly ?string $handler = null,\n        public readonly ?string $method = null,\n        public readonly ?int $priority = null\n    ) {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Attribute;\n\n/**\n * A reusable attribute to help configure a class as expecting a given logger channel.\n *\n * Using it offers no guarantee: it needs to be leveraged by a Monolog third-party consumer.\n *\n * Using it with the Monolog library only has no effect at all: wiring the logger instance into\n * other classes is not managed by Monolog.\n */\n#[\\Attribute(\\Attribute::TARGET_CLASS)]\nfinal class WithMonologChannel\n{\n    public function __construct(\n        public readonly string $channel\n    ) {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nclass_alias(JsonSerializableDateTimeImmutable::class, 'Monolog\\DateTimeImmutable');\n\n// @phpstan-ignore-next-line\nif (false) {\n    /**\n     * @deprecated Use \\Monolog\\JsonSerializableDateTimeImmutable instead.\n     */\n    class DateTimeImmutable extends JsonSerializableDateTimeImmutable\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/ErrorHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse Closure;\nuse Psr\\Log\\LoggerInterface;\nuse Psr\\Log\\LogLevel;\n\n/**\n * Monolog error handler\n *\n * A facility to enable logging of runtime errors, exceptions and fatal errors.\n *\n * Quick setup: <code>ErrorHandler::register($logger);</code>\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass ErrorHandler\n{\n    private Closure|null $previousExceptionHandler = null;\n\n    /** @var array<class-string, LogLevel::*> an array of class name to LogLevel::* constant mapping */\n    private array $uncaughtExceptionLevelMap = [];\n\n    /** @var Closure|true|null */\n    private Closure|bool|null $previousErrorHandler = null;\n\n    /** @var array<int, LogLevel::*> an array of E_* constant to LogLevel::* constant mapping */\n    private array $errorLevelMap = [];\n\n    private bool $handleOnlyReportedErrors = true;\n\n    private bool $hasFatalErrorHandler = false;\n\n    private string $fatalLevel = LogLevel::ALERT;\n\n    private string|null $reservedMemory = null;\n\n    /** @var ?array{type: int, message: string, file: string, line: int, trace: mixed} */\n    private array|null $lastFatalData = null;\n\n    private const FATAL_ERRORS = [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR];\n\n    public function __construct(\n        private LoggerInterface $logger\n    ) {\n    }\n\n    /**\n     * Registers a new ErrorHandler for a given Logger\n     *\n     * By default it will handle errors, exceptions and fatal errors\n     *\n     * @param  array<int, LogLevel::*>|false          $errorLevelMap     an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling\n     * @param  array<class-string, LogLevel::*>|false $exceptionLevelMap an array of class name to LogLevel::* constant mapping, or false to disable exception handling\n     * @param  LogLevel::*|null|false                 $fatalLevel        a LogLevel::* constant, null to use the default LogLevel::ALERT or false to disable fatal error handling\n     * @return static\n     */\n    public static function register(LoggerInterface $logger, $errorLevelMap = [], $exceptionLevelMap = [], $fatalLevel = null): self\n    {\n        /** @phpstan-ignore-next-line */\n        $handler = new static($logger);\n        if ($errorLevelMap !== false) {\n            $handler->registerErrorHandler($errorLevelMap);\n        }\n        if ($exceptionLevelMap !== false) {\n            $handler->registerExceptionHandler($exceptionLevelMap);\n        }\n        if ($fatalLevel !== false) {\n            $handler->registerFatalHandler($fatalLevel);\n        }\n\n        return $handler;\n    }\n\n    /**\n     * @param  array<class-string, LogLevel::*> $levelMap an array of class name to LogLevel::* constant mapping\n     * @return $this\n     */\n    public function registerExceptionHandler(array $levelMap = [], bool $callPrevious = true): self\n    {\n        $prev = set_exception_handler(function (\\Throwable $e): void {\n            $this->handleException($e);\n        });\n        $this->uncaughtExceptionLevelMap = $levelMap;\n        foreach ($this->defaultExceptionLevelMap() as $class => $level) {\n            if (!isset($this->uncaughtExceptionLevelMap[$class])) {\n                $this->uncaughtExceptionLevelMap[$class] = $level;\n            }\n        }\n        if ($callPrevious && null !== $prev) {\n            $this->previousExceptionHandler = $prev(...);\n        }\n\n        return $this;\n    }\n\n    /**\n     * @param  array<int, LogLevel::*> $levelMap an array of E_* constant to LogLevel::* constant mapping\n     * @return $this\n     */\n    public function registerErrorHandler(array $levelMap = [], bool $callPrevious = true, int $errorTypes = -1, bool $handleOnlyReportedErrors = true): self\n    {\n        $prev = set_error_handler($this->handleError(...), $errorTypes);\n        $this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap);\n        if ($callPrevious) {\n            $this->previousErrorHandler = $prev !== null ? $prev(...) : true;\n        } else {\n            $this->previousErrorHandler = null;\n        }\n\n        $this->handleOnlyReportedErrors = $handleOnlyReportedErrors;\n\n        return $this;\n    }\n\n    /**\n     * @param  LogLevel::*|null $level              a LogLevel::* constant, null to use the default LogLevel::ALERT\n     * @param  int              $reservedMemorySize Amount of KBs to reserve in memory so that it can be freed when handling fatal errors giving Monolog some room in memory to get its job done\n     * @return $this\n     */\n    public function registerFatalHandler($level = null, int $reservedMemorySize = 20): self\n    {\n        register_shutdown_function($this->handleFatalError(...));\n\n        $this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize);\n        $this->fatalLevel = null === $level ? LogLevel::ALERT : $level;\n        $this->hasFatalErrorHandler = true;\n\n        return $this;\n    }\n\n    /**\n     * @return array<class-string, LogLevel::*>\n     */\n    protected function defaultExceptionLevelMap(): array\n    {\n        return [\n            'ParseError' => LogLevel::CRITICAL,\n            'Throwable' => LogLevel::ERROR,\n        ];\n    }\n\n    /**\n     * @return array<int, LogLevel::*>\n     */\n    protected function defaultErrorLevelMap(): array\n    {\n        return [\n            E_ERROR             => LogLevel::CRITICAL,\n            E_WARNING           => LogLevel::WARNING,\n            E_PARSE             => LogLevel::ALERT,\n            E_NOTICE            => LogLevel::NOTICE,\n            E_CORE_ERROR        => LogLevel::CRITICAL,\n            E_CORE_WARNING      => LogLevel::WARNING,\n            E_COMPILE_ERROR     => LogLevel::ALERT,\n            E_COMPILE_WARNING   => LogLevel::WARNING,\n            E_USER_ERROR        => LogLevel::ERROR,\n            E_USER_WARNING      => LogLevel::WARNING,\n            E_USER_NOTICE       => LogLevel::NOTICE,\n            2048                => LogLevel::NOTICE, // E_STRICT\n            E_RECOVERABLE_ERROR => LogLevel::ERROR,\n            E_DEPRECATED        => LogLevel::NOTICE,\n            E_USER_DEPRECATED   => LogLevel::NOTICE,\n        ];\n    }\n\n    private function handleException(\\Throwable $e): never\n    {\n        $level = LogLevel::ERROR;\n        foreach ($this->uncaughtExceptionLevelMap as $class => $candidate) {\n            if ($e instanceof $class) {\n                $level = $candidate;\n                break;\n            }\n        }\n\n        $this->logger->log(\n            $level,\n            sprintf('Uncaught Exception %s: \"%s\" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()),\n            ['exception' => $e]\n        );\n\n        if (null !== $this->previousExceptionHandler) {\n            ($this->previousExceptionHandler)($e);\n        }\n\n        if (!headers_sent() && \\in_array(strtolower((string) \\ini_get('display_errors')), ['0', '', 'false', 'off', 'none', 'no'], true)) {\n            http_response_code(500);\n        }\n\n        exit(255);\n    }\n\n    private function handleError(int $code, string $message, string $file = '', int $line = 0): bool\n    {\n        if ($this->handleOnlyReportedErrors && 0 === (error_reporting() & $code)) {\n            return false;\n        }\n\n        // fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries\n        if (!$this->hasFatalErrorHandler || !\\in_array($code, self::FATAL_ERRORS, true)) {\n            $level = $this->errorLevelMap[$code] ?? LogLevel::CRITICAL;\n            $this->logger->log($level, self::codeToString($code).': '.$message, ['code' => $code, 'message' => $message, 'file' => $file, 'line' => $line]);\n        } else {\n            $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);\n            array_shift($trace); // Exclude handleError from trace\n            $this->lastFatalData = ['type' => $code, 'message' => $message, 'file' => $file, 'line' => $line, 'trace' => $trace];\n        }\n\n        if ($this->previousErrorHandler === true) {\n            return false;\n        }\n        if ($this->previousErrorHandler instanceof Closure) {\n            return (bool) ($this->previousErrorHandler)($code, $message, $file, $line);\n        }\n\n        return true;\n    }\n\n    /**\n     * @private\n     */\n    public function handleFatalError(): void\n    {\n        $this->reservedMemory = '';\n\n        if (\\is_array($this->lastFatalData)) {\n            $lastError = $this->lastFatalData;\n        } else {\n            $lastError = error_get_last();\n        }\n        if (\\is_array($lastError) && \\in_array($lastError['type'], self::FATAL_ERRORS, true)) {\n            $trace = $lastError['trace'] ?? null;\n            $this->logger->log(\n                $this->fatalLevel,\n                'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'],\n                ['code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'], 'trace' => $trace]\n            );\n\n            if ($this->logger instanceof Logger) {\n                foreach ($this->logger->getHandlers() as $handler) {\n                    $handler->close();\n                }\n            }\n        }\n    }\n\n    private static function codeToString(int $code): string\n    {\n        return match ($code) {\n            E_ERROR => 'E_ERROR',\n            E_WARNING => 'E_WARNING',\n            E_PARSE => 'E_PARSE',\n            E_NOTICE => 'E_NOTICE',\n            E_CORE_ERROR => 'E_CORE_ERROR',\n            E_CORE_WARNING => 'E_CORE_WARNING',\n            E_COMPILE_ERROR => 'E_COMPILE_ERROR',\n            E_COMPILE_WARNING => 'E_COMPILE_WARNING',\n            E_USER_ERROR => 'E_USER_ERROR',\n            E_USER_WARNING => 'E_USER_WARNING',\n            E_USER_NOTICE => 'E_USER_NOTICE',\n            2048 => 'E_STRICT',\n            E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',\n            E_DEPRECATED => 'E_DEPRECATED',\n            E_USER_DEPRECATED => 'E_USER_DEPRECATED',\n            default => 'Unknown PHP error',\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Formats a log message according to the ChromePHP array format\n *\n * @author Christophe Coevoet <stof@notk.org>\n */\nclass ChromePHPFormatter implements FormatterInterface\n{\n    /**\n     * Translates Monolog log levels to Wildfire levels.\n     *\n     * @return 'log'|'info'|'warn'|'error'\n     */\n    private function toWildfireLevel(Level $level): string\n    {\n        return match ($level) {\n            Level::Debug     => 'log',\n            Level::Info      => 'info',\n            Level::Notice    => 'info',\n            Level::Warning   => 'warn',\n            Level::Error     => 'error',\n            Level::Critical  => 'error',\n            Level::Alert     => 'error',\n            Level::Emergency => 'error',\n        };\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record)\n    {\n        // Retrieve the line and file if set and remove them from the formatted extra\n        $backtrace = 'unknown';\n        if (isset($record->extra['file'], $record->extra['line'])) {\n            $backtrace = $record->extra['file'].' : '.$record->extra['line'];\n            unset($record->extra['file'], $record->extra['line']);\n        }\n\n        $message = ['message' => $record->message];\n        if (\\count($record->context) > 0) {\n            $message['context'] = $record->context;\n        }\n        if (\\count($record->extra) > 0) {\n            $message['extra'] = $record->extra;\n        }\n        if (\\count($message) === 1) {\n            $message = reset($message);\n        }\n\n        return [\n            $record->channel,\n            $message,\n            $backtrace,\n            $this->toWildfireLevel($record->level),\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function formatBatch(array $records)\n    {\n        $formatted = [];\n\n        foreach ($records as $record) {\n            $formatted[] = $this->format($record);\n        }\n\n        return $formatted;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Elastica\\Document;\nuse Monolog\\LogRecord;\n\n/**\n * Format a log message into an Elastica Document\n *\n * @author Jelle Vink <jelle.vink@gmail.com>\n */\nclass ElasticaFormatter extends NormalizerFormatter\n{\n    /**\n     * @var string Elastic search index name\n     */\n    protected string $index;\n\n    /**\n     * @var string|null Elastic search document type\n     */\n    protected string|null $type;\n\n    /**\n     * @param string  $index Elastic Search index name\n     * @param ?string $type  Elastic Search document type, deprecated as of Elastica 7\n     */\n    public function __construct(string $index, ?string $type)\n    {\n        // elasticsearch requires a ISO 8601 format date with optional millisecond precision.\n        parent::__construct('Y-m-d\\TH:i:s.uP');\n\n        $this->index = $index;\n        $this->type = $type;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record)\n    {\n        $record = parent::format($record);\n\n        return $this->getDocument($record);\n    }\n\n    public function getIndex(): string\n    {\n        return $this->index;\n    }\n\n    /**\n     * @deprecated since Elastica 7 type has no effect\n     */\n    public function getType(): string\n    {\n        /** @phpstan-ignore-next-line */\n        return $this->type;\n    }\n\n    /**\n     * Convert a log message into an Elastica Document\n     *\n     * @param mixed[] $record\n     */\n    protected function getDocument(array $record): Document\n    {\n        $document = new Document();\n        $document->setData($record);\n        $document->setIndex($this->index);\n\n        return $document;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse DateTimeInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Format a log message into an Elasticsearch record\n *\n * @author Avtandil Kikabidze <akalongman@gmail.com>\n */\nclass ElasticsearchFormatter extends NormalizerFormatter\n{\n    /**\n     * @var string Elasticsearch index name\n     */\n    protected string $index;\n\n    /**\n     * @var string Elasticsearch record type\n     */\n    protected string $type;\n\n    /**\n     * @param string $index Elasticsearch index name\n     * @param string $type  Elasticsearch record type\n     */\n    public function __construct(string $index, string $type)\n    {\n        // Elasticsearch requires an ISO 8601 format date with optional millisecond precision.\n        parent::__construct(DateTimeInterface::ATOM);\n\n        $this->index = $index;\n        $this->type = $type;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record)\n    {\n        $record = parent::format($record);\n\n        return $this->getDocument($record);\n    }\n\n    /**\n     * Getter index\n     */\n    public function getIndex(): string\n    {\n        return $this->index;\n    }\n\n    /**\n     * Getter type\n     */\n    public function getType(): string\n    {\n        return $this->type;\n    }\n\n    /**\n     * Convert a log message into an Elasticsearch record\n     *\n     * @param  mixed[] $record Log message\n     * @return mixed[]\n     */\n    protected function getDocument(array $record): array\n    {\n        $record['_index'] = $this->index;\n        $record['_type'] = $this->type;\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\LogRecord;\n\n/**\n * formats the record to be used in the FlowdockHandler\n *\n * @author Dominik Liebler <liebler.dominik@gmail.com>\n * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4\n */\nclass FlowdockFormatter implements FormatterInterface\n{\n    private string $source;\n\n    private string $sourceEmail;\n\n    public function __construct(string $source, string $sourceEmail)\n    {\n        $this->source = $source;\n        $this->sourceEmail = $sourceEmail;\n    }\n\n    /**\n     * @inheritDoc\n     *\n     * @return mixed[]\n     */\n    public function format(LogRecord $record): array\n    {\n        $tags = [\n            '#logs',\n            '#' . $record->level->toPsrLogLevel(),\n            '#' . $record->channel,\n        ];\n\n        foreach ($record->extra as $value) {\n            $tags[] = '#' . $value;\n        }\n\n        $subject = sprintf(\n            'in %s: %s - %s',\n            $this->source,\n            $record->level->getName(),\n            $this->getShortMessage($record->message)\n        );\n\n        return [\n            'source' => $this->source,\n            'from_address' => $this->sourceEmail,\n            'subject' => $subject,\n            'content' => $record->message,\n            'tags' => $tags,\n            'project' => $this->source,\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     *\n     * @return mixed[][]\n     */\n    public function formatBatch(array $records): array\n    {\n        $formatted = [];\n\n        foreach ($records as $record) {\n            $formatted[] = $this->format($record);\n        }\n\n        return $formatted;\n    }\n\n    public function getShortMessage(string $message): string\n    {\n        static $hasMbString;\n\n        if (null === $hasMbString) {\n            $hasMbString = \\function_exists('mb_strlen');\n        }\n\n        $maxLength = 45;\n\n        if ($hasMbString) {\n            if (mb_strlen($message, 'UTF-8') > $maxLength) {\n                $message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...';\n            }\n        } else {\n            if (\\strlen($message) > $maxLength) {\n                $message = substr($message, 0, $maxLength - 4) . ' ...';\n            }\n        }\n\n        return $message;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Class FluentdFormatter\n *\n * Serializes a log message to Fluentd unix socket protocol\n *\n * Fluentd config:\n *\n * <source>\n *  type unix\n *  path /var/run/td-agent/td-agent.sock\n * </source>\n *\n * Monolog setup:\n *\n * $logger = new Monolog\\Logger('fluent.tag');\n * $fluentHandler = new Monolog\\Handler\\SocketHandler('unix:///var/run/td-agent/td-agent.sock');\n * $fluentHandler->setFormatter(new Monolog\\Formatter\\FluentdFormatter());\n * $logger->pushHandler($fluentHandler);\n *\n * @author Andrius Putna <fordnox@gmail.com>\n */\nclass FluentdFormatter implements FormatterInterface\n{\n    /**\n     * @var bool $levelTag should message level be a part of the fluentd tag\n     */\n    protected bool $levelTag = false;\n\n    public function __construct(bool $levelTag = false)\n    {\n        $this->levelTag = $levelTag;\n    }\n\n    public function isUsingLevelsInTag(): bool\n    {\n        return $this->levelTag;\n    }\n\n    public function format(LogRecord $record): string\n    {\n        $tag = $record->channel;\n        if ($this->levelTag) {\n            $tag .= '.' . $record->level->toPsrLogLevel();\n        }\n\n        $message = [\n            'message' => $record->message,\n            'context' => $record->context,\n            'extra' => $record->extra,\n        ];\n\n        if (!$this->levelTag) {\n            $message['level'] = $record->level->value;\n            $message['level_name'] = $record->level->getName();\n        }\n\n        return Utils::jsonEncode([$tag, $record->datetime->getTimestamp(), $message]);\n    }\n\n    public function formatBatch(array $records): string\n    {\n        $message = '';\n        foreach ($records as $record) {\n            $message .= $this->format($record);\n        }\n\n        return $message;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\LogRecord;\n\n/**\n * Interface for formatters\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\ninterface FormatterInterface\n{\n    /**\n     * Formats a log record.\n     *\n     * @param  LogRecord $record A record to format\n     * @return mixed     The formatted record\n     */\n    public function format(LogRecord $record);\n\n    /**\n     * Formats a set of log records.\n     *\n     * @param  array<LogRecord> $records A set of records to format\n     * @return mixed            The formatted set of records\n     */\n    public function formatBatch(array $records);\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\Level;\nuse Gelf\\Message;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Serializes a log message to GELF\n * @see http://docs.graylog.org/en/latest/pages/gelf.html\n *\n * @author Matt Lehner <mlehner@gmail.com>\n */\nclass GelfMessageFormatter extends NormalizerFormatter\n{\n    protected const DEFAULT_MAX_LENGTH = 32766;\n\n    /**\n     * @var string the name of the system for the Gelf log message\n     */\n    protected string $systemName;\n\n    /**\n     * @var string a prefix for 'extra' fields from the Monolog record (optional)\n     */\n    protected string $extraPrefix;\n\n    /**\n     * @var string a prefix for 'context' fields from the Monolog record (optional)\n     */\n    protected string $contextPrefix;\n\n    /**\n     * @var int max length per field\n     */\n    protected int $maxLength;\n\n    /**\n     * Translates Monolog log levels to Graylog2 log priorities.\n     */\n    private function getGraylog2Priority(Level $level): int\n    {\n        return match ($level) {\n            Level::Debug     => 7,\n            Level::Info      => 6,\n            Level::Notice    => 5,\n            Level::Warning   => 4,\n            Level::Error     => 3,\n            Level::Critical  => 2,\n            Level::Alert     => 1,\n            Level::Emergency => 0,\n        };\n    }\n\n    /**\n     * @throws \\RuntimeException\n     */\n    public function __construct(?string $systemName = null, ?string $extraPrefix = null, string $contextPrefix = 'ctxt_', ?int $maxLength = null)\n    {\n        if (!class_exists(Message::class)) {\n            throw new \\RuntimeException('Composer package graylog2/gelf-php is required to use Monolog\\'s GelfMessageFormatter');\n        }\n\n        parent::__construct('U.u');\n\n        $this->systemName = (null === $systemName || $systemName === '') ? (string) gethostname() : $systemName;\n\n        $this->extraPrefix = null === $extraPrefix ? '' : $extraPrefix;\n        $this->contextPrefix = $contextPrefix;\n        $this->maxLength = null === $maxLength ? self::DEFAULT_MAX_LENGTH : $maxLength;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record): Message\n    {\n        $context = $extra = [];\n        if (isset($record->context)) {\n            /** @var array<array<mixed>|bool|float|int|string|null> $context */\n            $context = parent::normalize($record->context);\n        }\n        if (isset($record->extra)) {\n            /** @var array<array<mixed>|bool|float|int|string|null> $extra */\n            $extra = parent::normalize($record->extra);\n        }\n\n        $message = new Message();\n        $message\n            ->setTimestamp($record->datetime)\n            ->setShortMessage($record->message)\n            ->setHost($this->systemName)\n            ->setLevel($this->getGraylog2Priority($record->level));\n\n        // message length + system name length + 200 for padding / metadata\n        $len = 200 + \\strlen($record->message) + \\strlen($this->systemName);\n\n        if ($len > $this->maxLength) {\n            $message->setShortMessage(Utils::substr($record->message, 0, $this->maxLength));\n        }\n\n        if (isset($record->channel)) {\n            $message->setAdditional('facility', $record->channel);\n        }\n\n        foreach ($extra as $key => $val) {\n            $key = (string) preg_replace('#[^\\w.-]#', '-', (string) $key);\n            $val = \\is_bool($val) ? ($val ? 1 : 0) : $val;\n            $val = \\is_scalar($val) || null === $val ? $val : $this->toJson($val);\n            $len = \\strlen($this->extraPrefix . $key . $val);\n            if ($len > $this->maxLength) {\n                $message->setAdditional($this->extraPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength));\n\n                continue;\n            }\n            $message->setAdditional($this->extraPrefix . $key, $val);\n        }\n\n        foreach ($context as $key => $val) {\n            $key = (string) preg_replace('#[^\\w.-]#', '-', (string) $key);\n            $val = \\is_bool($val) ? ($val ? 1 : 0) : $val;\n            $val = \\is_scalar($val) || null === $val ? $val : $this->toJson($val);\n            $len = \\strlen($this->contextPrefix . $key . $val);\n            if ($len > $this->maxLength) {\n                $message->setAdditional($this->contextPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength));\n\n                continue;\n            }\n            $message->setAdditional($this->contextPrefix . $key, $val);\n        }\n\n        if (!$message->hasAdditional('file') && isset($context['exception']['file'])) {\n            if (1 === preg_match(\"/^(.+):([0-9]+)$/\", $context['exception']['file'], $matches)) {\n                $message->setAdditional('file', $matches[1]);\n                $message->setAdditional('line', $matches[2]);\n            }\n        }\n\n        return $message;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse DateTimeInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Encodes message information into JSON in a format compatible with Cloud logging.\n *\n * @see https://cloud.google.com/logging/docs/structured-logging\n * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry\n *\n * @author Luís Cobucci <lcobucci@gmail.com>\n */\nclass GoogleCloudLoggingFormatter extends JsonFormatter\n{\n    protected function normalizeRecord(LogRecord $record): array\n    {\n        $normalized = parent::normalizeRecord($record);\n\n        // Re-key level for GCP logging\n        $normalized['severity'] = $normalized['level_name'];\n        $normalized['time'] = $record->datetime->format(DateTimeInterface::RFC3339_EXTENDED);\n\n        // Remove keys that are not used by GCP\n        unset($normalized['level'], $normalized['level_name'], $normalized['datetime']);\n\n        return $normalized;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Formats incoming records into an HTML table\n *\n * This is especially useful for html email logging\n *\n * @author Tiago Brito <tlfbrito@gmail.com>\n */\nclass HtmlFormatter extends NormalizerFormatter\n{\n    /**\n     * Translates Monolog log levels to html color priorities.\n     */\n    protected function getLevelColor(Level $level): string\n    {\n        return match ($level) {\n            Level::Debug     => '#CCCCCC',\n            Level::Info      => '#28A745',\n            Level::Notice    => '#17A2B8',\n            Level::Warning   => '#FFC107',\n            Level::Error     => '#FD7E14',\n            Level::Critical  => '#DC3545',\n            Level::Alert     => '#821722',\n            Level::Emergency => '#000000',\n        };\n    }\n\n    /**\n     * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format\n     */\n    public function __construct(?string $dateFormat = null)\n    {\n        parent::__construct($dateFormat);\n    }\n\n    /**\n     * Creates an HTML table row\n     *\n     * @param string $th       Row header content\n     * @param string $td       Row standard cell content\n     * @param bool   $escapeTd false if td content must not be html escaped\n     */\n    protected function addRow(string $th, string $td = ' ', bool $escapeTd = true): string\n    {\n        $th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8');\n        if ($escapeTd) {\n            $td = '<pre>'.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').'</pre>';\n        }\n\n        return \"<tr style=\\\"padding: 4px;text-align: left;\\\">\\n<th style=\\\"vertical-align: top;background: #ccc;color: #000\\\" width=\\\"100\\\">$th:</th>\\n<td style=\\\"padding: 4px;text-align: left;vertical-align: top;background: #eee;color: #000\\\">\".$td.\"</td>\\n</tr>\";\n    }\n\n    /**\n     * Create a HTML h1 tag\n     *\n     * @param string $title Text to be in the h1\n     */\n    protected function addTitle(string $title, Level $level): string\n    {\n        $title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8');\n\n        return '<h1 style=\"background: '.$this->getLevelColor($level).';color: #ffffff;padding: 5px;\" class=\"monolog-output\">'.$title.'</h1>';\n    }\n\n    /**\n     * Formats a log record.\n     *\n     * @return string The formatted record\n     */\n    public function format(LogRecord $record): string\n    {\n        $output = $this->addTitle($record->level->getName(), $record->level);\n        $output .= '<table cellspacing=\"1\" width=\"100%\" class=\"monolog-output\">';\n\n        $output .= $this->addRow('Message', $record->message);\n        $output .= $this->addRow('Time', $this->formatDate($record->datetime));\n        $output .= $this->addRow('Channel', $record->channel);\n        if (\\count($record->context) > 0) {\n            $embeddedTable = '<table cellspacing=\"1\" width=\"100%\">';\n            foreach ($record->context as $key => $value) {\n                $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value));\n            }\n            $embeddedTable .= '</table>';\n            $output .= $this->addRow('Context', $embeddedTable, false);\n        }\n        if (\\count($record->extra) > 0) {\n            $embeddedTable = '<table cellspacing=\"1\" width=\"100%\">';\n            foreach ($record->extra as $key => $value) {\n                $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value));\n            }\n            $embeddedTable .= '</table>';\n            $output .= $this->addRow('Extra', $embeddedTable, false);\n        }\n\n        return $output.'</table>';\n    }\n\n    /**\n     * Formats a set of log records.\n     *\n     * @return string The formatted set of records\n     */\n    public function formatBatch(array $records): string\n    {\n        $message = '';\n        foreach ($records as $record) {\n            $message .= $this->format($record);\n        }\n\n        return $message;\n    }\n\n    /**\n     * @param mixed $data\n     */\n    protected function convertToString($data): string\n    {\n        if (null === $data || \\is_scalar($data)) {\n            return (string) $data;\n        }\n\n        $data = $this->normalize($data);\n\n        return Utils::jsonEncode($data, JSON_PRETTY_PRINT | Utils::DEFAULT_JSON_FLAGS, true);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Stringable;\nuse Throwable;\nuse Monolog\\LogRecord;\n\n/**\n * Encodes whatever record data is passed to it as json\n *\n * This can be useful to log to databases or remote APIs\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass JsonFormatter extends NormalizerFormatter\n{\n    public const BATCH_MODE_JSON = 1;\n    public const BATCH_MODE_NEWLINES = 2;\n\n    /** @var self::BATCH_MODE_* */\n    protected int $batchMode;\n\n    protected bool $appendNewline;\n\n    protected bool $ignoreEmptyContextAndExtra;\n\n    protected bool $includeStacktraces = false;\n\n    /**\n     * @param self::BATCH_MODE_* $batchMode\n     */\n    public function __construct(int $batchMode = self::BATCH_MODE_JSON, bool $appendNewline = true, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false)\n    {\n        $this->batchMode = $batchMode;\n        $this->appendNewline = $appendNewline;\n        $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra;\n        $this->includeStacktraces = $includeStacktraces;\n\n        parent::__construct();\n    }\n\n    /**\n     * The batch mode option configures the formatting style for\n     * multiple records. By default, multiple records will be\n     * formatted as a JSON-encoded array. However, for\n     * compatibility with some API endpoints, alternative styles\n     * are available.\n     */\n    public function getBatchMode(): int\n    {\n        return $this->batchMode;\n    }\n\n    /**\n     * True if newlines are appended to every formatted record\n     */\n    public function isAppendingNewlines(): bool\n    {\n        return $this->appendNewline;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record): string\n    {\n        $normalized = $this->normalizeRecord($record);\n\n        return $this->toJson($normalized, true) . ($this->appendNewline ? \"\\n\" : '');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function formatBatch(array $records): string\n    {\n        return match ($this->batchMode) {\n            static::BATCH_MODE_NEWLINES => $this->formatBatchNewlines($records),\n            default => $this->formatBatchJson($records),\n        };\n    }\n\n    /**\n     * @return $this\n     */\n    public function includeStacktraces(bool $include = true): self\n    {\n        $this->includeStacktraces = $include;\n\n        return $this;\n    }\n\n    /**\n     * @return array<array<mixed>|bool|float|int|\\stdClass|string|null>\n     */\n    protected function normalizeRecord(LogRecord $record): array\n    {\n        $normalized = parent::normalizeRecord($record);\n\n        if (isset($normalized['context']) && $normalized['context'] === []) {\n            if ($this->ignoreEmptyContextAndExtra) {\n                unset($normalized['context']);\n            } else {\n                $normalized['context'] = new \\stdClass;\n            }\n        }\n        if (isset($normalized['extra']) && $normalized['extra'] === []) {\n            if ($this->ignoreEmptyContextAndExtra) {\n                unset($normalized['extra']);\n            } else {\n                $normalized['extra'] = new \\stdClass;\n            }\n        }\n\n        return $normalized;\n    }\n\n    /**\n     * Return a JSON-encoded array of records.\n     *\n     * @phpstan-param LogRecord[] $records\n     */\n    protected function formatBatchJson(array $records): string\n    {\n        $formatted = array_map(fn (LogRecord $record) => $this->normalizeRecord($record), $records);\n\n        return $this->toJson($formatted, true);\n    }\n\n    /**\n     * Use new lines to separate records instead of a\n     * JSON-encoded array.\n     *\n     * @phpstan-param LogRecord[] $records\n     */\n    protected function formatBatchNewlines(array $records): string\n    {\n        $oldNewline = $this->appendNewline;\n        $this->appendNewline = false;\n        $formatted = array_map(fn (LogRecord $record) => $this->format($record), $records);\n        $this->appendNewline = $oldNewline;\n\n        return implode(\"\\n\", $formatted);\n    }\n\n    /**\n     * Normalizes given $data.\n     *\n     * @return null|scalar|array<mixed[]|scalar|null|object>|object\n     */\n    protected function normalize(mixed $data, int $depth = 0): mixed\n    {\n        if ($depth > $this->maxNormalizeDepth) {\n            return 'Over '.$this->maxNormalizeDepth.' levels deep, aborting normalization';\n        }\n\n        if (\\is_array($data)) {\n            $normalized = [];\n\n            $count = 1;\n            foreach ($data as $key => $value) {\n                if ($count++ > $this->maxNormalizeItemCount) {\n                    $normalized['...'] = 'Over '.$this->maxNormalizeItemCount.' items ('.\\count($data).' total), aborting normalization';\n                    break;\n                }\n\n                $normalized[$key] = $this->normalize($value, $depth + 1);\n            }\n\n            return $normalized;\n        }\n\n        if (\\is_object($data)) {\n            if ($data instanceof \\DateTimeInterface) {\n                return $this->formatDate($data);\n            }\n\n            if ($data instanceof Throwable) {\n                return $this->normalizeException($data, $depth);\n            }\n\n            // if the object has specific json serializability we want to make sure we skip the __toString treatment below\n            if ($data instanceof \\JsonSerializable) {\n                return $data;\n            }\n\n            if ($data instanceof Stringable) {\n                try {\n                    return $data->__toString();\n                } catch (Throwable) {\n                    return $data::class;\n                }\n            }\n\n            if (\\get_class($data) === '__PHP_Incomplete_Class') {\n                return new \\ArrayObject($data);\n            }\n\n            return $data;\n        }\n\n        if (\\is_resource($data)) {\n            return parent::normalize($data);\n        }\n\n        return $data;\n    }\n\n    /**\n     * Normalizes given exception with or without its own stack trace based on\n     * `includeStacktraces` property.\n     *\n     * @return array<array-key, string|int|array<string|int|array<string>>>\n     */\n    protected function normalizeException(Throwable $e, int $depth = 0): array\n    {\n        $data = parent::normalizeException($e, $depth);\n        if (!$this->includeStacktraces) {\n            unset($data['trace']);\n        }\n\n        return $data;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Closure;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Formats incoming records into a one-line string\n *\n * This is especially useful for logging to files\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @author Christophe Coevoet <stof@notk.org>\n */\nclass LineFormatter extends NormalizerFormatter\n{\n    public const SIMPLE_FORMAT = \"[%datetime%] %channel%.%level_name%: %message% %context% %extra%\\n\";\n\n    protected string $format;\n    protected bool $allowInlineLineBreaks;\n    protected bool $ignoreEmptyContextAndExtra;\n    protected bool $includeStacktraces;\n    protected ?int $maxLevelNameLength = null;\n    protected string $indentStacktraces = '';\n    protected Closure|null $stacktracesParser = null;\n    protected string $basePath = '';\n\n    /**\n     * @param string|null $format                The format of the message\n     * @param string|null $dateFormat            The format of the timestamp: one supported by DateTime::format\n     * @param bool        $allowInlineLineBreaks Whether to allow inline line breaks in log entries\n     */\n    public function __construct(?string $format = null, ?string $dateFormat = null, bool $allowInlineLineBreaks = false, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false)\n    {\n        $this->format = $format === null ? static::SIMPLE_FORMAT : $format;\n        $this->allowInlineLineBreaks = $allowInlineLineBreaks;\n        $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra;\n        $this->includeStacktraces($includeStacktraces);\n        parent::__construct($dateFormat);\n    }\n\n    /**\n     * Setting a base path will hide the base path from exception and stack trace file names to shorten them\n     * @return $this\n     */\n    public function setBasePath(string $path = ''): self\n    {\n        if ($path !== '') {\n            $path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;\n        }\n\n        $this->basePath = $path;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function includeStacktraces(bool $include = true, ?Closure $parser = null): self\n    {\n        $this->includeStacktraces = $include;\n        if ($this->includeStacktraces) {\n            $this->allowInlineLineBreaks = true;\n            $this->stacktracesParser = $parser;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Indent stack traces to separate them a bit from the main log record messages\n     *\n     * @param  string $indent The string used to indent, for example \"    \"\n     * @return $this\n     */\n    public function indentStacktraces(string $indent): self\n    {\n        $this->indentStacktraces = $indent;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function allowInlineLineBreaks(bool $allow = true): self\n    {\n        $this->allowInlineLineBreaks = $allow;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function ignoreEmptyContextAndExtra(bool $ignore = true): self\n    {\n        $this->ignoreEmptyContextAndExtra = $ignore;\n\n        return $this;\n    }\n\n    /**\n     * Allows cutting the level name to get fixed-length levels like INF for INFO, ERR for ERROR if you set this to 3 for example\n     *\n     * @param  int|null $maxLevelNameLength Maximum characters for the level name. Set null for infinite length (default)\n     * @return $this\n     */\n    public function setMaxLevelNameLength(?int $maxLevelNameLength = null): self\n    {\n        $this->maxLevelNameLength = $maxLevelNameLength;\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record): string\n    {\n        $vars = parent::format($record);\n\n        if ($this->maxLevelNameLength !== null) {\n            $vars['level_name'] = substr($vars['level_name'], 0, $this->maxLevelNameLength);\n        }\n\n        $output = $this->format;\n        foreach ($vars['extra'] as $var => $val) {\n            if (false !== strpos($output, '%extra.'.$var.'%')) {\n                $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output);\n                unset($vars['extra'][$var]);\n            }\n        }\n\n        foreach ($vars['context'] as $var => $val) {\n            if (false !== strpos($output, '%context.'.$var.'%')) {\n                $output = str_replace('%context.'.$var.'%', $this->stringify($val), $output);\n                unset($vars['context'][$var]);\n            }\n        }\n\n        if ($this->ignoreEmptyContextAndExtra) {\n            if (\\count($vars['context']) === 0) {\n                unset($vars['context']);\n                $output = str_replace('%context%', '', $output);\n            }\n\n            if (\\count($vars['extra']) === 0) {\n                unset($vars['extra']);\n                $output = str_replace('%extra%', '', $output);\n            }\n        }\n\n        foreach ($vars as $var => $val) {\n            if (false !== strpos($output, '%'.$var.'%')) {\n                $output = str_replace('%'.$var.'%', $this->stringify($val), $output);\n            }\n        }\n\n        // remove leftover %extra.xxx% and %context.xxx% if any\n        if (false !== strpos($output, '%')) {\n            $output = preg_replace('/%(?:extra|context)\\..+?%/', '', $output);\n            if (null === $output) {\n                $pcreErrorCode = preg_last_error();\n\n                throw new \\RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . preg_last_error_msg());\n            }\n        }\n\n        return $output;\n    }\n\n    public function formatBatch(array $records): string\n    {\n        $message = '';\n        foreach ($records as $record) {\n            $message .= $this->format($record);\n        }\n\n        return $message;\n    }\n\n    /**\n     * @param mixed $value\n     */\n    public function stringify($value): string\n    {\n        return $this->replaceNewlines($this->convertToString($value));\n    }\n\n    protected function normalizeException(\\Throwable $e, int $depth = 0): string\n    {\n        $str = $this->formatException($e);\n\n        $previous = $e->getPrevious();\n        while ($previous instanceof \\Throwable) {\n            $depth++;\n            if ($depth > $this->maxNormalizeDepth) {\n                $str .= \"\\n[previous exception] Over \" . $this->maxNormalizeDepth . ' levels deep, aborting normalization';\n                break;\n            }\n            $str .= \"\\n[previous exception] \" . $this->formatException($previous);\n            $previous = $previous->getPrevious();\n        }\n\n        return $str;\n    }\n\n    /**\n     * @param mixed $data\n     */\n    protected function convertToString($data): string\n    {\n        if (null === $data || \\is_bool($data)) {\n            return var_export($data, true);\n        }\n\n        if (\\is_scalar($data)) {\n            return (string) $data;\n        }\n\n        return $this->toJson($data, true);\n    }\n\n    protected function replaceNewlines(string $str): string\n    {\n        if ($this->allowInlineLineBreaks) {\n            if (0 === strpos($str, '{') || 0 === strpos($str, '[')) {\n                $str = preg_replace('/(?<!\\\\\\\\)\\\\\\\\[rn]/', \"\\n\", $str);\n                if (null === $str) {\n                    $pcreErrorCode = preg_last_error();\n\n                    throw new \\RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . preg_last_error_msg());\n                }\n            }\n\n            return $str;\n        }\n\n        return str_replace([\"\\r\\n\", \"\\r\", \"\\n\"], ' ', $str);\n    }\n\n    private function formatException(\\Throwable $e): string\n    {\n        $str = '[object] (' . Utils::getClass($e) . '(code: ' . $e->getCode();\n        if ($e instanceof \\SoapFault) {\n            if (isset($e->faultcode)) {\n                $str .= ' faultcode: ' . $e->faultcode;\n            }\n\n            if (isset($e->faultactor)) {\n                $str .= ' faultactor: ' . $e->faultactor;\n            }\n\n            if (isset($e->detail)) {\n                if (\\is_string($e->detail)) {\n                    $str .= ' detail: ' . $e->detail;\n                } elseif (\\is_object($e->detail) || \\is_array($e->detail)) {\n                    $str .= ' detail: ' . $this->toJson($e->detail, true);\n                }\n            }\n        }\n\n        $file = $e->getFile();\n        if ($this->basePath !== '') {\n            $file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file);\n        }\n\n        $str .= '): ' . $e->getMessage() . ' at ' . strtr((string) $file, DIRECTORY_SEPARATOR, '/') . ':' . $e->getLine() . ')';\n\n        if ($this->includeStacktraces) {\n            $str .= $this->stacktracesParser($e);\n        }\n\n        return $str;\n    }\n\n    private function stacktracesParser(\\Throwable $e): string\n    {\n        $trace = $e->getTraceAsString();\n\n        if ($this->basePath !== '') {\n            $trace = preg_replace('{^(#\\d+ )' . preg_quote($this->basePath) . '}m', '$1', $trace) ?? $trace;\n        }\n\n        if ($this->stacktracesParser !== null) {\n            $trace = $this->stacktracesParserCustom($trace);\n        }\n\n        if ($this->indentStacktraces !== '') {\n            $trace = str_replace(\"\\n\", \"\\n{$this->indentStacktraces}\", $trace);\n        }\n\n        if (trim($trace) === '') {\n            return '';\n        }\n\n        return \"\\n{$this->indentStacktraces}[stacktrace]\\n{$this->indentStacktraces}\" . strtr($trace, DIRECTORY_SEPARATOR, '/') . \"\\n\";\n    }\n\n    private function stacktracesParserCustom(string $trace): string\n    {\n        return implode(\"\\n\", array_filter(array_map($this->stacktracesParser, explode(\"\\n\", $trace)), fn ($line) => is_string($line) && trim($line) !== ''));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\LogRecord;\n\n/**\n * Encodes message information into JSON in a format compatible with Loggly.\n *\n * @author Adam Pancutt <adam@pancutt.com>\n */\nclass LogglyFormatter extends JsonFormatter\n{\n    /**\n     * Overrides the default batch mode to new lines for compatibility with the\n     * Loggly bulk API.\n     */\n    public function __construct(int $batchMode = self::BATCH_MODE_NEWLINES, bool $appendNewline = false)\n    {\n        parent::__construct($batchMode, $appendNewline);\n    }\n\n    /**\n     * Appends the 'timestamp' parameter for indexing by Loggly.\n     *\n     * @see https://www.loggly.com/docs/automated-parsing/#json\n     * @see \\Monolog\\Formatter\\JsonFormatter::format()\n     */\n    protected function normalizeRecord(LogRecord $record): array\n    {\n        $recordData = parent::normalizeRecord($record);\n\n        $recordData[\"timestamp\"] = $record->datetime->format(\"Y-m-d\\TH:i:s.uO\");\n        unset($recordData[\"datetime\"]);\n\n        return $recordData;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\LogRecord;\n\n/**\n * Encodes message information into JSON in a format compatible with Logmatic.\n *\n * @author Julien Breux <julien.breux@gmail.com>\n */\nclass LogmaticFormatter extends JsonFormatter\n{\n    protected const MARKERS = [\"sourcecode\", \"php\"];\n\n    protected string $hostname = '';\n\n    protected string $appName = '';\n\n    /**\n     * @return $this\n     */\n    public function setHostname(string $hostname): self\n    {\n        $this->hostname = $hostname;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setAppName(string $appName): self\n    {\n        $this->appName = $appName;\n\n        return $this;\n    }\n\n    /**\n     * Appends the 'hostname' and 'appname' parameter for indexing by Logmatic.\n     *\n     * @see http://doc.logmatic.io/docs/basics-to-send-data\n     * @see \\Monolog\\Formatter\\JsonFormatter::format()\n     */\n    public function normalizeRecord(LogRecord $record): array\n    {\n        $record = parent::normalizeRecord($record);\n\n        if ($this->hostname !== '') {\n            $record[\"hostname\"] = $this->hostname;\n        }\n        if ($this->appName !== '') {\n            $record[\"appname\"] = $this->appName;\n        }\n\n        $record[\"@marker\"] = static::MARKERS;\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\LogRecord;\n\n/**\n * Serializes a log message to Logstash Event Format\n *\n * @see https://www.elastic.co/products/logstash\n * @see https://github.com/elastic/logstash/blob/master/logstash-core/src/main/java/org/logstash/Event.java\n *\n * @author Tim Mower <timothy.mower@gmail.com>\n */\nclass LogstashFormatter extends NormalizerFormatter\n{\n    /**\n     * @var string the name of the system for the Logstash log message, used to fill the @source field\n     */\n    protected string $systemName;\n\n    /**\n     * @var string an application name for the Logstash log message, used to fill the @type field\n     */\n    protected string $applicationName;\n\n    /**\n     * @var string the key for 'extra' fields from the Monolog record\n     */\n    protected string $extraKey;\n\n    /**\n     * @var string the key for 'context' fields from the Monolog record\n     */\n    protected string $contextKey;\n\n    /**\n     * @param string      $applicationName The application that sends the data, used as the \"type\" field of logstash\n     * @param string|null $systemName      The system/machine name, used as the \"source\" field of logstash, defaults to the hostname of the machine\n     * @param string      $extraKey        The key for extra keys inside logstash \"fields\", defaults to extra\n     * @param string      $contextKey      The key for context keys inside logstash \"fields\", defaults to context\n     */\n    public function __construct(string $applicationName, ?string $systemName = null, string $extraKey = 'extra', string $contextKey = 'context')\n    {\n        // logstash requires a ISO 8601 format date with optional millisecond precision.\n        parent::__construct('Y-m-d\\TH:i:s.uP');\n\n        $this->systemName = $systemName === null ? (string) gethostname() : $systemName;\n        $this->applicationName = $applicationName;\n        $this->extraKey = $extraKey;\n        $this->contextKey = $contextKey;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record): string\n    {\n        $recordData = parent::format($record);\n\n        $message = [\n            '@timestamp' => $recordData['datetime'],\n            '@version' => 1,\n            'host' => $this->systemName,\n        ];\n        if (isset($recordData['message'])) {\n            $message['message'] = $recordData['message'];\n        }\n        if (isset($recordData['channel'])) {\n            $message['type'] = $recordData['channel'];\n            $message['channel'] = $recordData['channel'];\n        }\n        if (isset($recordData['level_name'])) {\n            $message['level'] = $recordData['level_name'];\n        }\n        if (isset($recordData['level'])) {\n            $message['monolog_level'] = $recordData['level'];\n        }\n        if ('' !== $this->applicationName) {\n            $message['type'] = $this->applicationName;\n        }\n        if (\\count($recordData['extra']) > 0) {\n            $message[$this->extraKey] = $recordData['extra'];\n        }\n        if (\\count($recordData['context']) > 0) {\n            $message[$this->contextKey] = $recordData['context'];\n        }\n\n        return $this->toJson($message) . \"\\n\";\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse MongoDB\\BSON\\Type;\nuse MongoDB\\BSON\\UTCDateTime;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Formats a record for use with the MongoDBHandler.\n *\n * @author Florian Plattner <me@florianplattner.de>\n */\nclass MongoDBFormatter implements FormatterInterface\n{\n    private bool $exceptionTraceAsString;\n    private int $maxNestingLevel;\n\n    /**\n     * @param int  $maxNestingLevel        0 means infinite nesting, the $record itself is level 1, $record->context is 2\n     * @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings\n     */\n    public function __construct(int $maxNestingLevel = 3, bool $exceptionTraceAsString = true)\n    {\n        $this->maxNestingLevel = max($maxNestingLevel, 0);\n        $this->exceptionTraceAsString = $exceptionTraceAsString;\n    }\n\n    /**\n     * @inheritDoc\n     *\n     * @return mixed[]\n     */\n    public function format(LogRecord $record): array\n    {\n        /** @var mixed[] $res */\n        $res = $this->formatArray($record->toArray());\n\n        return $res;\n    }\n\n    /**\n     * @inheritDoc\n     *\n     * @return array<mixed[]>\n     */\n    public function formatBatch(array $records): array\n    {\n        $formatted = [];\n        foreach ($records as $key => $record) {\n            $formatted[$key] = $this->format($record);\n        }\n\n        return $formatted;\n    }\n\n    /**\n     * @param  mixed[]        $array\n     * @return mixed[]|string Array except when max nesting level is reached then a string \"[...]\"\n     */\n    protected function formatArray(array $array, int $nestingLevel = 0)\n    {\n        if ($this->maxNestingLevel > 0 && $nestingLevel > $this->maxNestingLevel) {\n            return '[...]';\n        }\n\n        foreach ($array as $name => $value) {\n            if ($value instanceof \\DateTimeInterface) {\n                $array[$name] = $this->formatDate($value, $nestingLevel + 1);\n            } elseif ($value instanceof \\Throwable) {\n                $array[$name] = $this->formatException($value, $nestingLevel + 1);\n            } elseif (\\is_array($value)) {\n                $array[$name] = $this->formatArray($value, $nestingLevel + 1);\n            } elseif (\\is_object($value) && !$value instanceof Type) {\n                $array[$name] = $this->formatObject($value, $nestingLevel + 1);\n            }\n        }\n\n        return $array;\n    }\n\n    /**\n     * @param  mixed          $value\n     * @return mixed[]|string\n     */\n    protected function formatObject($value, int $nestingLevel)\n    {\n        $objectVars = get_object_vars($value);\n        $objectVars['class'] = Utils::getClass($value);\n\n        return $this->formatArray($objectVars, $nestingLevel);\n    }\n\n    /**\n     * @return mixed[]|string\n     */\n    protected function formatException(\\Throwable $exception, int $nestingLevel)\n    {\n        $formattedException = [\n            'class' => Utils::getClass($exception),\n            'message' => $exception->getMessage(),\n            'code' => (int) $exception->getCode(),\n            'file' => $exception->getFile() . ':' . $exception->getLine(),\n        ];\n\n        if ($this->exceptionTraceAsString === true) {\n            $formattedException['trace'] = $exception->getTraceAsString();\n        } else {\n            $formattedException['trace'] = $exception->getTrace();\n        }\n\n        return $this->formatArray($formattedException, $nestingLevel);\n    }\n\n    protected function formatDate(\\DateTimeInterface $value, int $nestingLevel): UTCDateTime\n    {\n        return new UTCDateTime((int) floor(((float) $value->format('U.u')) * 1000));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\JsonSerializableDateTimeImmutable;\nuse Monolog\\Utils;\nuse Throwable;\nuse Monolog\\LogRecord;\n\n/**\n * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass NormalizerFormatter implements FormatterInterface\n{\n    public const SIMPLE_DATE = \"Y-m-d\\TH:i:sP\";\n\n    protected string $dateFormat;\n    protected int $maxNormalizeDepth = 9;\n    protected int $maxNormalizeItemCount = 1000;\n\n    private int $jsonEncodeOptions = Utils::DEFAULT_JSON_FLAGS;\n\n    protected string $basePath = '';\n\n    /**\n     * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format\n     */\n    public function __construct(?string $dateFormat = null)\n    {\n        $this->dateFormat = null === $dateFormat ? static::SIMPLE_DATE : $dateFormat;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record)\n    {\n        return $this->normalizeRecord($record);\n    }\n\n    /**\n     * Normalize an arbitrary value to a scalar|array|null\n     *\n     * @return null|scalar|array<mixed[]|scalar|null>\n     */\n    public function normalizeValue(mixed $data): mixed\n    {\n        return $this->normalize($data);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function formatBatch(array $records)\n    {\n        foreach ($records as $key => $record) {\n            $records[$key] = $this->format($record);\n        }\n\n        return $records;\n    }\n\n    public function getDateFormat(): string\n    {\n        return $this->dateFormat;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setDateFormat(string $dateFormat): self\n    {\n        $this->dateFormat = $dateFormat;\n\n        return $this;\n    }\n\n    /**\n     * The maximum number of normalization levels to go through\n     */\n    public function getMaxNormalizeDepth(): int\n    {\n        return $this->maxNormalizeDepth;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setMaxNormalizeDepth(int $maxNormalizeDepth): self\n    {\n        $this->maxNormalizeDepth = $maxNormalizeDepth;\n\n        return $this;\n    }\n\n    /**\n     * The maximum number of items to normalize per level\n     */\n    public function getMaxNormalizeItemCount(): int\n    {\n        return $this->maxNormalizeItemCount;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setMaxNormalizeItemCount(int $maxNormalizeItemCount): self\n    {\n        $this->maxNormalizeItemCount = $maxNormalizeItemCount;\n\n        return $this;\n    }\n\n    /**\n     * Enables `json_encode` pretty print.\n     *\n     * @return $this\n     */\n    public function setJsonPrettyPrint(bool $enable): self\n    {\n        if ($enable) {\n            $this->jsonEncodeOptions |= JSON_PRETTY_PRINT;\n        } else {\n            $this->jsonEncodeOptions &= ~JSON_PRETTY_PRINT;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Setting a base path will hide the base path from exception and stack trace file names to shorten them\n     * @return $this\n     */\n    public function setBasePath(string $path = ''): self\n    {\n        if ($path !== '') {\n            $path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;\n        }\n\n        $this->basePath = $path;\n\n        return $this;\n    }\n\n    /**\n     * Provided as extension point\n     *\n     * Because normalize is called with sub-values of context data etc, normalizeRecord can be\n     * extended when data needs to be appended on the record array but not to other normalized data.\n     *\n     * @return array<mixed[]|scalar|null>\n     */\n    protected function normalizeRecord(LogRecord $record): array\n    {\n        /** @var array<mixed[]|scalar|null> $normalized */\n        $normalized = $this->normalize($record->toArray());\n\n        return $normalized;\n    }\n\n    /**\n     * @return null|scalar|array<mixed[]|scalar|null>\n     */\n    protected function normalize(mixed $data, int $depth = 0): mixed\n    {\n        if ($depth > $this->maxNormalizeDepth) {\n            return 'Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization';\n        }\n\n        if (null === $data || \\is_scalar($data)) {\n            if (\\is_float($data)) {\n                if (is_infinite($data)) {\n                    return ($data > 0 ? '' : '-') . 'INF';\n                }\n                if (is_nan($data)) {\n                    return 'NaN';\n                }\n            }\n\n            return $data;\n        }\n\n        if (\\is_array($data)) {\n            $normalized = [];\n\n            $count = 1;\n            foreach ($data as $key => $value) {\n                if ($count++ > $this->maxNormalizeItemCount) {\n                    $normalized['...'] = 'Over ' . $this->maxNormalizeItemCount . ' items ('.\\count($data).' total), aborting normalization';\n                    break;\n                }\n\n                $normalized[$key] = $this->normalize($value, $depth + 1);\n            }\n\n            return $normalized;\n        }\n\n        if ($data instanceof \\DateTimeInterface) {\n            return $this->formatDate($data);\n        }\n\n        if (\\is_object($data)) {\n            if ($data instanceof Throwable) {\n                return $this->normalizeException($data, $depth);\n            }\n\n            if ($data instanceof \\JsonSerializable) {\n                /** @var null|scalar|array<mixed[]|scalar|null> $value */\n                $value = $data->jsonSerialize();\n            } elseif (\\get_class($data) === '__PHP_Incomplete_Class') {\n                $accessor = new \\ArrayObject($data);\n                $value = (string) $accessor['__PHP_Incomplete_Class_Name'];\n            } elseif (method_exists($data, '__toString')) {\n                try {\n                    /** @var string $value */\n                    $value = $data->__toString();\n                } catch (\\Throwable) {\n                    // if the toString method is failing, use the default behavior\n                    /** @var null|scalar|array<mixed[]|scalar|null> $value */\n                    $value = json_decode($this->toJson($data, true), true);\n                }\n            } else {\n                // the rest is normalized by json encoding and decoding it\n                /** @var null|scalar|array<mixed[]|scalar|null> $value */\n                $value = json_decode($this->toJson($data, true), true);\n            }\n\n            return [Utils::getClass($data) => $value];\n        }\n\n        if (\\is_resource($data)) {\n            return sprintf('[resource(%s)]', get_resource_type($data));\n        }\n\n        return '[unknown('.\\gettype($data).')]';\n    }\n\n    /**\n     * @return array<array-key, string|int|array<string|int|array<string>>>\n     */\n    protected function normalizeException(Throwable $e, int $depth = 0)\n    {\n        if ($depth > $this->maxNormalizeDepth) {\n            return ['Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization'];\n        }\n\n        if ($e instanceof \\JsonSerializable) {\n            return (array) $e->jsonSerialize();\n        }\n\n        $file = $e->getFile();\n        if ($this->basePath !== '') {\n            $file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file);\n        }\n\n        $data = [\n            'class' => Utils::getClass($e),\n            'message' => $e->getMessage(),\n            'code' => (int) $e->getCode(),\n            'file' => $file.':'.$e->getLine(),\n        ];\n\n        if ($e instanceof \\SoapFault) {\n            if (isset($e->faultcode)) {\n                $data['faultcode'] = $e->faultcode;\n            }\n\n            if (isset($e->faultactor)) {\n                $data['faultactor'] = $e->faultactor;\n            }\n\n            if (isset($e->detail)) {\n                if (\\is_string($e->detail)) {\n                    $data['detail'] = $e->detail;\n                } elseif (\\is_object($e->detail) || \\is_array($e->detail)) {\n                    $data['detail'] = $this->toJson($e->detail, true);\n                }\n            }\n        }\n\n        $trace = $e->getTrace();\n        foreach ($trace as $frame) {\n            if (isset($frame['file'], $frame['line'])) {\n                $file = $frame['file'];\n                if ($this->basePath !== '') {\n                    $file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file);\n                }\n                $data['trace'][] = $file.':'.$frame['line'];\n            }\n        }\n\n        if (($previous = $e->getPrevious()) instanceof \\Throwable) {\n            $data['previous'] = $this->normalizeException($previous, $depth + 1);\n        }\n\n        return $data;\n    }\n\n    /**\n     * Return the JSON representation of a value\n     *\n     * @param  mixed             $data\n     * @throws \\RuntimeException if encoding fails and errors are not ignored\n     * @return string            if encoding fails and ignoreErrors is true 'null' is returned\n     */\n    protected function toJson($data, bool $ignoreErrors = false): string\n    {\n        return Utils::jsonEncode($data, $this->jsonEncodeOptions, $ignoreErrors);\n    }\n\n    protected function formatDate(\\DateTimeInterface $date): string\n    {\n        // in case the date format isn't custom then we defer to the custom JsonSerializableDateTimeImmutable\n        // formatting logic, which will pick the right format based on whether useMicroseconds is on\n        if ($this->dateFormat === self::SIMPLE_DATE && $date instanceof JsonSerializableDateTimeImmutable) {\n            return (string) $date;\n        }\n\n        return $date->format($this->dateFormat);\n    }\n\n    /**\n     * @return $this\n     */\n    public function addJsonEncodeOption(int $option): self\n    {\n        $this->jsonEncodeOptions |= $option;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function removeJsonEncodeOption(int $option): self\n    {\n        $this->jsonEncodeOptions &= ~$option;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\LogRecord;\n\n/**\n * Formats data into an associative array of scalar (+ null) values.\n * Objects and arrays will be JSON encoded.\n *\n * @author Andrew Lawson <adlawson@gmail.com>\n */\nclass ScalarFormatter extends NormalizerFormatter\n{\n    /**\n     * @inheritDoc\n     *\n     * @phpstan-return array<string, scalar|null> $record\n     */\n    public function format(LogRecord $record): array\n    {\n        $result = [];\n        foreach ($record->toArray() as $key => $value) {\n            $result[$key] = $this->toScalar($value);\n        }\n\n        return $result;\n    }\n\n    protected function toScalar(mixed $value): string|int|float|bool|null\n    {\n        $normalized = $this->normalize($value);\n\n        if (\\is_array($normalized)) {\n            return $this->toJson($normalized, true);\n        }\n\n        return $normalized;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Serializes a log message according to RFC 5424\n *\n * @author Dalibor Karlović <dalibor.karlovic@sigwin.hr>\n * @author Renat Gabdullin <renatobyj@gmail.com>\n */\nclass SyslogFormatter extends LineFormatter\n{\n    private const SYSLOG_FACILITY_USER = 1;\n    private const FORMAT = \"<%extra.priority%>1 %datetime% %extra.hostname% %extra.app-name% %extra.procid% %channel% %extra.structured-data% %level_name%: %message% %context% %extra%\\n\";\n    private const NILVALUE = '-';\n\n    private string $hostname;\n    private int $procid;\n\n    public function __construct(private string $applicationName = self::NILVALUE)\n    {\n        parent::__construct(self::FORMAT, 'Y-m-d\\TH:i:s.uP', true, true);\n        $this->hostname = (string) gethostname();\n        $this->procid = (int) getmypid();\n    }\n\n    public function format(LogRecord $record): string\n    {\n        $record->extra = $this->formatExtra($record);\n\n        return parent::format($record);\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    private function formatExtra(LogRecord $record): array\n    {\n        $extra = $record->extra;\n        $extra['app-name'] = $this->applicationName;\n        $extra['hostname'] = $this->hostname;\n        $extra['procid'] = $this->procid;\n        $extra['priority'] = self::calculatePriority($record->level);\n        $extra['structured-data'] = self::NILVALUE;\n\n        return $extra;\n    }\n\n    private static function calculatePriority(Level $level): int\n    {\n        return (self::SYSLOG_FACILITY_USER * 8) + $level->toRFC5424Level();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Formatter;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Serializes a log message according to Wildfire's header requirements\n *\n * @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com>\n * @author Christophe Coevoet <stof@notk.org>\n * @author Kirill chEbba Chebunin <iam@chebba.org>\n */\nclass WildfireFormatter extends NormalizerFormatter\n{\n    /**\n     * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format\n     */\n    public function __construct(?string $dateFormat = null)\n    {\n        parent::__construct($dateFormat);\n\n        // http headers do not like non-ISO-8559-1 characters\n        $this->removeJsonEncodeOption(JSON_UNESCAPED_UNICODE);\n    }\n\n    /**\n     * Translates Monolog log levels to Wildfire levels.\n     *\n     * @return 'LOG'|'INFO'|'WARN'|'ERROR'\n     */\n    private function toWildfireLevel(Level $level): string\n    {\n        return match ($level) {\n            Level::Debug     => 'LOG',\n            Level::Info      => 'INFO',\n            Level::Notice    => 'INFO',\n            Level::Warning   => 'WARN',\n            Level::Error     => 'ERROR',\n            Level::Critical  => 'ERROR',\n            Level::Alert     => 'ERROR',\n            Level::Emergency => 'ERROR',\n        };\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function format(LogRecord $record): string\n    {\n        // Retrieve the line and file if set and remove them from the formatted extra\n        $file = $line = '';\n        if (isset($record->extra['file'])) {\n            $file = $record->extra['file'];\n            unset($record->extra['file']);\n        }\n        if (isset($record->extra['line'])) {\n            $line = $record->extra['line'];\n            unset($record->extra['line']);\n        }\n\n        $message = ['message' => $record->message];\n        $handleError = false;\n        if (\\count($record->context) > 0) {\n            $message['context'] = $this->normalize($record->context);\n            $handleError = true;\n        }\n        if (\\count($record->extra) > 0) {\n            $message['extra'] = $this->normalize($record->extra);\n            $handleError = true;\n        }\n        if (\\count($message) === 1) {\n            $message = reset($message);\n        }\n\n        if (is_array($message) && isset($message['context']) && \\is_array($message['context']) && isset($message['context']['table'])) {\n            $type  = 'TABLE';\n            $label = $record->channel .': '. $record->message;\n            $message = $message['context']['table'];\n        } else {\n            $type  = $this->toWildfireLevel($record->level);\n            $label = $record->channel;\n        }\n\n        // Create JSON object describing the appearance of the message in the console\n        $json = $this->toJson([\n            [\n                'Type'  => $type,\n                'File'  => $file,\n                'Line'  => $line,\n                'Label' => $label,\n            ],\n            $message,\n        ], $handleError);\n\n        // The message itself is a serialization of the above JSON object + it's length\n        return sprintf(\n            '%d|%s|',\n            \\strlen($json),\n            $json\n        );\n    }\n\n    /**\n     * @inheritDoc\n     *\n     * @phpstan-return never\n     */\n    public function formatBatch(array $records)\n    {\n        throw new \\BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter');\n    }\n\n    /**\n     * @inheritDoc\n     *\n     * @return null|scalar|array<mixed[]|scalar|null>|object\n     */\n    protected function normalize(mixed $data, int $depth = 0): mixed\n    {\n        if (\\is_object($data) && !$data instanceof \\DateTimeInterface) {\n            return $data;\n        }\n\n        return parent::normalize($data, $depth);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Monolog\\ResettableInterface;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Base Handler class providing basic level/bubble support\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nabstract class AbstractHandler extends Handler implements ResettableInterface\n{\n    protected Level $level = Level::Debug;\n    protected bool $bubble = true;\n\n    /**\n     * @param int|string|Level|LogLevel::* $level  The minimum logging level at which this handler will be triggered\n     * @param bool                         $bubble Whether the messages that are handled can bubble up the stack or not\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        $this->setLevel($level);\n        $this->bubble = $bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        return $record->level->value >= $this->level->value;\n    }\n\n    /**\n     * Sets minimum logging level at which this handler will be triggered.\n     *\n     * @param  Level|LogLevel::* $level Level or level name\n     * @return $this\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function setLevel(int|string|Level $level): self\n    {\n        $this->level = Logger::toMonologLevel($level);\n\n        return $this;\n    }\n\n    /**\n     * Gets minimum logging level at which this handler will be triggered.\n     */\n    public function getLevel(): Level\n    {\n        return $this->level;\n    }\n\n    /**\n     * Sets the bubbling behavior.\n     *\n     * @param  bool  $bubble true means that this handler allows bubbling.\n     *                       false means that bubbling is not permitted.\n     * @return $this\n     */\n    public function setBubble(bool $bubble): self\n    {\n        $this->bubble = $bubble;\n\n        return $this;\n    }\n\n    /**\n     * Gets the bubbling behavior.\n     *\n     * @return bool true means that this handler allows bubbling.\n     *              false means that bubbling is not permitted.\n     */\n    public function getBubble(): bool\n    {\n        return $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function reset(): void\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\LogRecord;\n\n/**\n * Base Handler class providing the Handler structure, including processors and formatters\n *\n * Classes extending it should (in most cases) only implement write($record)\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @author Christophe Coevoet <stof@notk.org>\n */\nabstract class AbstractProcessingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface\n{\n    use ProcessableHandlerTrait;\n    use FormattableHandlerTrait;\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (!$this->isHandling($record)) {\n            return false;\n        }\n\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n\n        $record->formatted = $this->getFormatter()->format($record);\n\n        $this->write($record);\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * Writes the (already formatted) record down to the log of the implementing handler\n     */\n    abstract protected function write(LogRecord $record): void;\n\n    public function reset(): void\n    {\n        parent::reset();\n\n        $this->resetProcessors();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LineFormatter;\n\n/**\n * Common syslog functionality\n */\nabstract class AbstractSyslogHandler extends AbstractProcessingHandler\n{\n    protected int $facility;\n\n    /**\n     * List of valid log facility names.\n     * @var array<string, int>\n     */\n    protected array $facilities = [\n        'auth'     => \\LOG_AUTH,\n        'authpriv' => \\LOG_AUTHPRIV,\n        'cron'     => \\LOG_CRON,\n        'daemon'   => \\LOG_DAEMON,\n        'kern'     => \\LOG_KERN,\n        'lpr'      => \\LOG_LPR,\n        'mail'     => \\LOG_MAIL,\n        'news'     => \\LOG_NEWS,\n        'syslog'   => \\LOG_SYSLOG,\n        'user'     => \\LOG_USER,\n        'uucp'     => \\LOG_UUCP,\n    ];\n\n    /**\n     * Translates Monolog log levels to syslog log priorities.\n     */\n    protected function toSyslogPriority(Level $level): int\n    {\n        return $level->toRFC5424Level();\n    }\n\n    /**\n     * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant\n     */\n    public function __construct(string|int $facility = \\LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n\n        if (!\\defined('PHP_WINDOWS_VERSION_BUILD')) {\n            $this->facilities['local0'] = \\LOG_LOCAL0;\n            $this->facilities['local1'] = \\LOG_LOCAL1;\n            $this->facilities['local2'] = \\LOG_LOCAL2;\n            $this->facilities['local3'] = \\LOG_LOCAL3;\n            $this->facilities['local4'] = \\LOG_LOCAL4;\n            $this->facilities['local5'] = \\LOG_LOCAL5;\n            $this->facilities['local6'] = \\LOG_LOCAL6;\n            $this->facilities['local7'] = \\LOG_LOCAL7;\n        } else {\n            $this->facilities['local0'] = 128; // LOG_LOCAL0\n            $this->facilities['local1'] = 136; // LOG_LOCAL1\n            $this->facilities['local2'] = 144; // LOG_LOCAL2\n            $this->facilities['local3'] = 152; // LOG_LOCAL3\n            $this->facilities['local4'] = 160; // LOG_LOCAL4\n            $this->facilities['local5'] = 168; // LOG_LOCAL5\n            $this->facilities['local6'] = 176; // LOG_LOCAL6\n            $this->facilities['local7'] = 184; // LOG_LOCAL7\n        }\n\n        // convert textual description of facility to syslog constant\n        if (\\is_string($facility) && \\array_key_exists(strtolower($facility), $this->facilities)) {\n            $facility = $this->facilities[strtolower($facility)];\n        } elseif (!\\in_array($facility, array_values($this->facilities), true)) {\n            throw new \\UnexpectedValueException('Unknown facility value \"'.$facility.'\" given');\n        }\n\n        $this->facility = $facility;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter('%channel%.%level_name%: %message% %context% %extra%');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Gelf\\Message as GelfMessage;\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\JsonFormatter;\nuse PhpAmqpLib\\Message\\AMQPMessage;\nuse PhpAmqpLib\\Channel\\AMQPChannel;\nuse AMQPExchange;\nuse Monolog\\LogRecord;\n\nclass AmqpHandler extends AbstractProcessingHandler\n{\n    protected AMQPExchange|AMQPChannel $exchange;\n\n    /** @var array<string, mixed> */\n    private array $extraAttributes = [];\n\n    protected string $exchangeName;\n\n    /**\n     * @param AMQPExchange|AMQPChannel $exchange     AMQPExchange (php AMQP ext) or PHP AMQP lib channel, ready for use\n     * @param string|null              $exchangeName Optional exchange name, for AMQPChannel (PhpAmqpLib) only\n     */\n    public function __construct(AMQPExchange|AMQPChannel $exchange, ?string $exchangeName = null, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        if ($exchange instanceof AMQPChannel) {\n            $this->exchangeName = (string) $exchangeName;\n        } elseif ($exchangeName !== null) {\n            @trigger_error('The $exchangeName parameter can only be passed when using PhpAmqpLib, if using an AMQPExchange instance configure it beforehand', E_USER_DEPRECATED);\n        }\n        $this->exchange = $exchange;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function getExtraAttributes(): array\n    {\n        return $this->extraAttributes;\n    }\n\n    /**\n     * Configure extra attributes to pass to the AMQPExchange (if you are using the amqp extension)\n     *\n     * @param  array<string, mixed> $extraAttributes One of content_type, content_encoding,\n     *                                               message_id, user_id, app_id, delivery_mode,\n     *                                               priority, timestamp, expiration, type\n     *                                               or reply_to, headers.\n     * @return $this\n     */\n    public function setExtraAttributes(array $extraAttributes): self\n    {\n        $this->extraAttributes = $extraAttributes;\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $data = $record->formatted;\n        $routingKey = $this->getRoutingKey($record);\n\n        if($data instanceof GelfMessage) {\n            $data = json_encode($data->toArray());\n        }\n\n        if ($this->exchange instanceof AMQPExchange) {\n            $attributes = [\n                'delivery_mode' => 2,\n                'content_type'  => 'application/json',\n            ];\n            if (\\count($this->extraAttributes) > 0) {\n                $attributes = array_merge($attributes, $this->extraAttributes);\n            }\n            $this->exchange->publish(\n                $data,\n                $routingKey,\n                0,\n                $attributes\n            );\n        } else {\n            $this->exchange->basic_publish(\n                $this->createAmqpMessage($data),\n                $this->exchangeName,\n                $routingKey\n            );\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        if ($this->exchange instanceof AMQPExchange) {\n            parent::handleBatch($records);\n\n            return;\n        }\n\n        foreach ($records as $record) {\n            if (!$this->isHandling($record)) {\n                continue;\n            }\n\n            $record = $this->processRecord($record);\n            $data = $this->getFormatter()->format($record);\n\n            if($data instanceof GelfMessage) {\n                $data = json_encode($data->toArray());\n            }\n\n            $this->exchange->batch_basic_publish(\n                $this->createAmqpMessage($data),\n                $this->exchangeName,\n                $this->getRoutingKey($record)\n            );\n        }\n\n        $this->exchange->publish_batch();\n    }\n\n    /**\n     * Gets the routing key for the AMQP exchange\n     */\n    protected function getRoutingKey(LogRecord $record): string\n    {\n        $routingKey = sprintf('%s.%s', $record->level->name, $record->channel);\n\n        return strtolower($routingKey);\n    }\n\n    private function createAmqpMessage(string $data): AMQPMessage\n    {\n        $attributes = [\n            'delivery_mode' => 2,\n            'content_type' => 'application/json',\n        ];\n        if (\\count($this->extraAttributes) > 0) {\n            $attributes = array_merge($attributes, $this->extraAttributes);\n        }\n\n        return new AMQPMessage($data, $attributes);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\nuse Monolog\\Level;\n\nuse function headers_list;\nuse function stripos;\n\n/**\n * Handler sending logs to browser's javascript console with no browser extension required\n *\n * @author Olivier Poitrey <rs@dailymotion.com>\n */\nclass BrowserConsoleHandler extends AbstractProcessingHandler\n{\n    protected static bool $initialized = false;\n\n    /** @var LogRecord[] */\n    protected static array $records = [];\n\n    protected const FORMAT_HTML = 'html';\n    protected const FORMAT_JS = 'js';\n    protected const FORMAT_UNKNOWN = 'unknown';\n\n    /**\n     * @inheritDoc\n     *\n     * Formatted output may contain some formatting markers to be transferred to `console.log` using the %c format.\n     *\n     * Example of formatted string:\n     *\n     *     You can do [[blue text]]{color: blue} or [[green background]]{background-color: green; color: white}\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter('[[%channel%]]{macro: autolabel} [[%level_name%]]{font-weight: bold} %message%');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        // Accumulate records\n        static::$records[] = $record;\n\n        // Register shutdown handler if not already done\n        if (!static::$initialized) {\n            static::$initialized = true;\n            $this->registerShutdownFunction();\n        }\n    }\n\n    /**\n     * Convert records to javascript console commands and send it to the browser.\n     * This method is automatically called on PHP shutdown if output is HTML or Javascript.\n     */\n    public static function send(): void\n    {\n        $format = static::getResponseFormat();\n        if ($format === self::FORMAT_UNKNOWN) {\n            return;\n        }\n\n        if (\\count(static::$records) > 0) {\n            if ($format === self::FORMAT_HTML) {\n                static::writeOutput('<script>' . self::generateScript() . '</script>');\n            } else { // js format\n                static::writeOutput(self::generateScript());\n            }\n            static::resetStatic();\n        }\n    }\n\n    public function close(): void\n    {\n        self::resetStatic();\n    }\n\n    public function reset(): void\n    {\n        parent::reset();\n\n        self::resetStatic();\n    }\n\n    /**\n     * Forget all logged records\n     */\n    public static function resetStatic(): void\n    {\n        static::$records = [];\n    }\n\n    /**\n     * Wrapper for register_shutdown_function to allow overriding\n     */\n    protected function registerShutdownFunction(): void\n    {\n        if (PHP_SAPI !== 'cli') {\n            register_shutdown_function(['Monolog\\Handler\\BrowserConsoleHandler', 'send']);\n        }\n    }\n\n    /**\n     * Wrapper for echo to allow overriding\n     */\n    protected static function writeOutput(string $str): void\n    {\n        echo $str;\n    }\n\n    /**\n     * Checks the format of the response\n     *\n     * If Content-Type is set to application/javascript or text/javascript -> js\n     * If Content-Type is set to text/html, or is unset -> html\n     * If Content-Type is anything else -> unknown\n     *\n     * @return string One of 'js', 'html' or 'unknown'\n     * @phpstan-return self::FORMAT_*\n     */\n    protected static function getResponseFormat(): string\n    {\n        // Check content type\n        foreach (headers_list() as $header) {\n            if (stripos($header, 'content-type:') === 0) {\n                return static::getResponseFormatFromContentType($header);\n            }\n        }\n\n        return self::FORMAT_HTML;\n    }\n\n    /**\n     * @return string One of 'js', 'html' or 'unknown'\n     * @phpstan-return self::FORMAT_*\n     */\n    protected static function getResponseFormatFromContentType(string $contentType): string\n    {\n        // This handler only works with HTML and javascript outputs\n        // text/javascript is obsolete in favour of application/javascript, but still used\n        if (stripos($contentType, 'application/javascript') !== false || stripos($contentType, 'text/javascript') !== false) {\n            return self::FORMAT_JS;\n        }\n\n        if (stripos($contentType, 'text/html') !== false) {\n            return self::FORMAT_HTML;\n        }\n\n        return self::FORMAT_UNKNOWN;\n    }\n\n    private static function generateScript(): string\n    {\n        $script = [];\n        foreach (static::$records as $record) {\n            $context = self::dump('Context', $record->context);\n            $extra = self::dump('Extra', $record->extra);\n\n            if (\\count($context) === 0 && \\count($extra) === 0) {\n                $script[] = self::call_array(self::getConsoleMethodForLevel($record->level), self::handleStyles($record->formatted));\n            } else {\n                $script = array_merge(\n                    $script,\n                    [self::call_array('groupCollapsed', self::handleStyles($record->formatted))],\n                    $context,\n                    $extra,\n                    [self::call('groupEnd')]\n                );\n            }\n        }\n\n        return \"(function (c) {if (c && c.groupCollapsed) {\\n\" . implode(\"\\n\", $script) . \"\\n}})(console);\";\n    }\n\n    private static function getConsoleMethodForLevel(Level $level): string\n    {\n        return match ($level) {\n            Level::Debug => 'debug',\n            Level::Info, Level::Notice => 'info',\n            Level::Warning => 'warn',\n            Level::Error, Level::Critical, Level::Alert, Level::Emergency => 'error',\n        };\n    }\n\n    /**\n     * @return string[]\n     */\n    private static function handleStyles(string $formatted): array\n    {\n        $args = [];\n        $format = '%c' . $formatted;\n        preg_match_all('/\\[\\[(.*?)\\]\\]\\{([^}]*)\\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);\n\n        foreach (array_reverse($matches) as $match) {\n            $args[] = '\"font-weight: normal\"';\n            $args[] = self::quote(self::handleCustomStyles($match[2][0], $match[1][0]));\n\n            $pos = $match[0][1];\n            $format = Utils::substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . Utils::substr($format, $pos + \\strlen($match[0][0]));\n        }\n\n        $args[] = self::quote('font-weight: normal');\n        $args[] = self::quote($format);\n\n        return array_reverse($args);\n    }\n\n    private static function handleCustomStyles(string $style, string $string): string\n    {\n        static $colors = ['blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey'];\n        static $labels = [];\n\n        $style = preg_replace_callback('/macro\\s*:(.*?)(?:;|$)/', function (array $m) use ($string, &$colors, &$labels) {\n            if (trim($m[1]) === 'autolabel') {\n                // Format the string as a label with consistent auto assigned background color\n                if (!isset($labels[$string])) {\n                    $labels[$string] = $colors[\\count($labels) % \\count($colors)];\n                }\n                $color = $labels[$string];\n\n                return \"background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px\";\n            }\n\n            return $m[1];\n        }, $style);\n\n        if (null === $style) {\n            $pcreErrorCode = preg_last_error();\n\n            throw new \\RuntimeException('Failed to run preg_replace_callback: ' . $pcreErrorCode . ' / ' . preg_last_error_msg());\n        }\n\n        return $style;\n    }\n\n    /**\n     * @param  mixed[] $dict\n     * @return mixed[]\n     */\n    private static function dump(string $title, array $dict): array\n    {\n        $script = [];\n        $dict = array_filter($dict, fn ($value) => $value !== null);\n        if (\\count($dict) === 0) {\n            return $script;\n        }\n        $script[] = self::call('log', self::quote('%c%s'), self::quote('font-weight: bold'), self::quote($title));\n        foreach ($dict as $key => $value) {\n            $value = json_encode($value);\n            if (false === $value) {\n                $value = self::quote('');\n            }\n            $script[] = self::call('log', self::quote('%s: %o'), self::quote((string) $key), $value);\n        }\n\n        return $script;\n    }\n\n    private static function quote(string $arg): string\n    {\n        return '\"' . addcslashes($arg, \"\\\"\\n\\\\\") . '\"';\n    }\n\n    /**\n     * @param mixed $args\n     */\n    private static function call(...$args): string\n    {\n        $method = array_shift($args);\n        if (!\\is_string($method)) {\n            throw new \\UnexpectedValueException('Expected the first arg to be a string, got: '.var_export($method, true));\n        }\n\n        return self::call_array($method, $args);\n    }\n\n    /**\n     * @param mixed[] $args\n     */\n    private static function call_array(string $method, array $args): string\n    {\n        return 'c.' . $method . '(' . implode(', ', $args) . ');';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\ResettableInterface;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Buffers all records until closing the handler and then pass them as batch.\n *\n * This is useful for a MailHandler to send only one mail per request instead of\n * sending one per log message.\n *\n * @author Christophe Coevoet <stof@notk.org>\n */\nclass BufferHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface\n{\n    use ProcessableHandlerTrait;\n\n    protected HandlerInterface $handler;\n\n    protected int $bufferSize = 0;\n\n    protected int $bufferLimit;\n\n    protected bool $flushOnOverflow;\n\n    /** @var LogRecord[] */\n    protected array $buffer = [];\n\n    protected bool $initialized = false;\n\n    /**\n     * @param HandlerInterface $handler         Handler.\n     * @param int              $bufferLimit     How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.\n     * @param bool             $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded\n     */\n    public function __construct(HandlerInterface $handler, int $bufferLimit = 0, int|string|Level $level = Level::Debug, bool $bubble = true, bool $flushOnOverflow = false)\n    {\n        parent::__construct($level, $bubble);\n        $this->handler = $handler;\n        $this->bufferLimit = $bufferLimit;\n        $this->flushOnOverflow = $flushOnOverflow;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if ($record->level->isLowerThan($this->level)) {\n            return false;\n        }\n\n        if (!$this->initialized) {\n            // __destructor() doesn't get called on Fatal errors\n            register_shutdown_function([$this, 'close']);\n            $this->initialized = true;\n        }\n\n        if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) {\n            if ($this->flushOnOverflow) {\n                $this->flush();\n            } else {\n                array_shift($this->buffer);\n                $this->bufferSize--;\n            }\n        }\n\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n\n        $this->buffer[] = $record;\n        $this->bufferSize++;\n\n        return false === $this->bubble;\n    }\n\n    public function flush(): void\n    {\n        if ($this->bufferSize === 0) {\n            return;\n        }\n\n        $this->handler->handleBatch($this->buffer);\n        $this->clear();\n    }\n\n    public function __destruct()\n    {\n        // suppress the parent behavior since we already have register_shutdown_function()\n        // to call close(), and the reference contained there will prevent this from being\n        // GC'd until the end of the request\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        $this->flush();\n\n        $this->handler->close();\n    }\n\n    /**\n     * Clears the buffer without flushing any messages down to the wrapped handler.\n     */\n    public function clear(): void\n    {\n        $this->bufferSize = 0;\n        $this->buffer = [];\n    }\n\n    public function reset(): void\n    {\n        $this->flush();\n\n        parent::reset();\n\n        $this->resetProcessors();\n\n        if ($this->handler instanceof ResettableInterface) {\n            $this->handler->reset();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        if ($this->handler instanceof FormattableHandlerInterface) {\n            $this->handler->setFormatter($formatter);\n\n            return $this;\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($this->handler).' does not support formatters.');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        if ($this->handler instanceof FormattableHandlerInterface) {\n            return $this->handler->getFormatter();\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($this->handler).' does not support formatters.');\n    }\n\n    public function setHandler(HandlerInterface $handler): void\n    {\n        $this->handler = $handler;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\ChromePHPFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\nuse Monolog\\JsonSerializableDateTimeImmutable;\n\n/**\n * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/)\n *\n * This also works out of the box with Firefox 43+\n *\n * @author Christophe Coevoet <stof@notk.org>\n */\nclass ChromePHPHandler extends AbstractProcessingHandler\n{\n    use WebRequestRecognizerTrait;\n\n    /**\n     * Version of the extension\n     */\n    protected const VERSION = '4.0';\n\n    /**\n     * Header name\n     */\n    protected const HEADER_NAME = 'X-ChromeLogger-Data';\n\n    /**\n     * Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+)\n     */\n    protected const USER_AGENT_REGEX = '{\\b(?:Chrome/\\d+(?:\\.\\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\\d|\\d{3,})(?:\\.\\d)*)\\b}';\n\n    protected static bool $initialized = false;\n\n    /**\n     * Tracks whether we sent too much data\n     *\n     * Chrome limits the headers to 4KB, so when we sent 3KB we stop sending\n     */\n    protected static bool $overflowed = false;\n\n    /** @var mixed[] */\n    protected static array $json = [\n        'version' => self::VERSION,\n        'columns' => ['label', 'log', 'backtrace', 'type'],\n        'rows' => [],\n    ];\n\n    protected static bool $sendHeaders = true;\n\n    public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        if (!$this->isWebRequest()) {\n            return;\n        }\n\n        $messages = [];\n\n        foreach ($records as $record) {\n            if ($record->level < $this->level) {\n                continue;\n            }\n\n            $message = $this->processRecord($record);\n            $messages[] = $message;\n        }\n\n        if (\\count($messages) > 0) {\n            $messages = $this->getFormatter()->formatBatch($messages);\n            self::$json['rows'] = array_merge(self::$json['rows'], $messages);\n            $this->send();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new ChromePHPFormatter();\n    }\n\n    /**\n     * Creates & sends header for a record\n     *\n     * @see sendHeader()\n     * @see send()\n     */\n    protected function write(LogRecord $record): void\n    {\n        if (!$this->isWebRequest()) {\n            return;\n        }\n\n        self::$json['rows'][] = $record->formatted;\n\n        $this->send();\n    }\n\n    /**\n     * Sends the log header\n     *\n     * @see sendHeader()\n     */\n    protected function send(): void\n    {\n        if (self::$overflowed || !self::$sendHeaders) {\n            return;\n        }\n\n        if (!self::$initialized) {\n            self::$initialized = true;\n\n            self::$sendHeaders = $this->headersAccepted();\n            if (!self::$sendHeaders) {\n                return;\n            }\n\n            self::$json['request_uri'] = $_SERVER['REQUEST_URI'] ?? '';\n        }\n\n        $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true);\n        $data = base64_encode($json);\n        if (\\strlen($data) > 3 * 1024) {\n            self::$overflowed = true;\n\n            $record = new LogRecord(\n                message: 'Incomplete logs, chrome header size limit reached',\n                level: Level::Warning,\n                channel: 'monolog',\n                datetime: new JsonSerializableDateTimeImmutable(true),\n            );\n            self::$json['rows'][\\count(self::$json['rows']) - 1] = $this->getFormatter()->format($record);\n            $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true);\n            $data = base64_encode($json);\n        }\n\n        if (trim($data) !== '') {\n            $this->sendHeader(static::HEADER_NAME, $data);\n        }\n    }\n\n    /**\n     * Send header string to the client\n     */\n    protected function sendHeader(string $header, string $content): void\n    {\n        if (!headers_sent() && self::$sendHeaders) {\n            header(sprintf('%s: %s', $header, $content));\n        }\n    }\n\n    /**\n     * Verifies if the headers are accepted by the current user agent\n     */\n    protected function headersAccepted(): bool\n    {\n        if (!isset($_SERVER['HTTP_USER_AGENT'])) {\n            return false;\n        }\n\n        return preg_match(static::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']) === 1;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\JsonFormatter;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * CouchDB handler\n *\n * @author Markus Bachmann <markus.bachmann@bachi.biz>\n * @phpstan-type Options array{\n *     host: string,\n *     port: int,\n *     dbname: string,\n *     username: string|null,\n *     password: string|null\n * }\n * @phpstan-type InputOptions array{\n *     host?: string,\n *     port?: int,\n *     dbname?: string,\n *     username?: string|null,\n *     password?: string|null\n * }\n */\nclass CouchDBHandler extends AbstractProcessingHandler\n{\n    /**\n     * @var mixed[]\n     * @phpstan-var Options\n     */\n    private array $options;\n\n    /**\n     * @param mixed[] $options\n     *\n     * @phpstan-param InputOptions $options\n     */\n    public function __construct(array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        $this->options = array_merge([\n            'host'     => 'localhost',\n            'port'     => 5984,\n            'dbname'   => 'logger',\n            'username' => null,\n            'password' => null,\n        ], $options);\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $basicAuth = null;\n        if (null !== $this->options['username'] && null !== $this->options['password']) {\n            $basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']);\n        }\n\n        $url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname'];\n        $context = stream_context_create([\n            'http' => [\n                'method'        => 'POST',\n                'content'       => $record->formatted,\n                'ignore_errors' => true,\n                'max_redirects' => 0,\n                'header'        => 'Content-type: application/json',\n            ],\n        ]);\n\n        if (false === @file_get_contents($url, false, $context)) {\n            throw new \\RuntimeException(sprintf('Could not connect to %s', $url));\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Logs to Cube.\n *\n * @link https://github.com/square/cube/wiki\n * @author Wan Chen <kami@kamisama.me>\n * @deprecated Since 2.8.0 and 3.2.0, Cube appears abandoned and thus we will drop this handler in Monolog 4\n */\nclass CubeHandler extends AbstractProcessingHandler\n{\n    private ?\\Socket $udpConnection = null;\n    private ?\\CurlHandle $httpConnection = null;\n    private string $scheme;\n    private string $host;\n    private int $port;\n    /** @var string[] */\n    private array $acceptedSchemes = ['http', 'udp'];\n\n    /**\n     * Create a Cube handler\n     *\n     * @throws \\UnexpectedValueException when given url is not a valid url.\n     *                                   A valid url must consist of three parts : protocol://host:port\n     *                                   Only valid protocols used by Cube are http and udp\n     */\n    public function __construct(string $url, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        $urlInfo = parse_url($url);\n\n        if ($urlInfo === false || !isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) {\n            throw new \\UnexpectedValueException('URL \"'.$url.'\" is not valid');\n        }\n\n        if (!\\in_array($urlInfo['scheme'], $this->acceptedSchemes, true)) {\n            throw new \\UnexpectedValueException(\n                'Invalid protocol (' . $urlInfo['scheme']  . ').'\n                . ' Valid options are ' . implode(', ', $this->acceptedSchemes)\n            );\n        }\n\n        $this->scheme = $urlInfo['scheme'];\n        $this->host = $urlInfo['host'];\n        $this->port = $urlInfo['port'];\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * Establish a connection to an UDP socket\n     *\n     * @throws \\LogicException           when unable to connect to the socket\n     * @throws MissingExtensionException when there is no socket extension\n     */\n    protected function connectUdp(): void\n    {\n        if (!\\extension_loaded('sockets')) {\n            throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler');\n        }\n\n        $udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0);\n        if (false === $udpConnection) {\n            throw new \\LogicException('Unable to create a socket');\n        }\n\n        $this->udpConnection = $udpConnection;\n        if (!socket_connect($this->udpConnection, $this->host, $this->port)) {\n            throw new \\LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port);\n        }\n    }\n\n    /**\n     * Establish a connection to an http server\n     *\n     * @throws \\LogicException           when unable to connect to the socket\n     * @throws MissingExtensionException when no curl extension\n     */\n    protected function connectHttp(): void\n    {\n        if (!\\extension_loaded('curl')) {\n            throw new MissingExtensionException('The curl extension is required to use http URLs with the CubeHandler');\n        }\n\n        $httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put');\n        if (false === $httpConnection) {\n            throw new \\LogicException('Unable to connect to ' . $this->host . ':' . $this->port);\n        }\n\n        $this->httpConnection = $httpConnection;\n        curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, \"POST\");\n        curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $date = $record->datetime;\n\n        $data = ['time' => $date->format('Y-m-d\\TH:i:s.uO')];\n        $context = $record->context;\n\n        if (isset($context['type'])) {\n            $data['type'] = $context['type'];\n            unset($context['type']);\n        } else {\n            $data['type'] = $record->channel;\n        }\n\n        $data['data'] = $context;\n        $data['data']['level'] = $record->level;\n\n        if ($this->scheme === 'http') {\n            $this->writeHttp(Utils::jsonEncode($data));\n        } else {\n            $this->writeUdp(Utils::jsonEncode($data));\n        }\n    }\n\n    private function writeUdp(string $data): void\n    {\n        if (null === $this->udpConnection) {\n            $this->connectUdp();\n        }\n\n        if (null === $this->udpConnection) {\n            throw new \\LogicException('No UDP socket could be opened');\n        }\n\n        socket_send($this->udpConnection, $data, \\strlen($data), 0);\n    }\n\n    private function writeHttp(string $data): void\n    {\n        if (null === $this->httpConnection) {\n            $this->connectHttp();\n        }\n\n        if (null === $this->httpConnection) {\n            throw new \\LogicException('No connection could be established');\n        }\n\n        curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']');\n        curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, [\n            'Content-Type: application/json',\n            'Content-Length: ' . \\strlen('['.$data.']'),\n        ]);\n\n        Curl\\Util::execute($this->httpConnection, 5);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler\\Curl;\n\nuse CurlHandle;\n\n/**\n * This class is marked as internal and it is not under the BC promise of the package.\n *\n * @internal\n */\nfinal class Util\n{\n    /** @var array<int> */\n    private static array $retriableErrorCodes = [\n        CURLE_COULDNT_RESOLVE_HOST,\n        CURLE_COULDNT_CONNECT,\n        CURLE_HTTP_NOT_FOUND,\n        CURLE_READ_ERROR,\n        CURLE_OPERATION_TIMEOUTED,\n        CURLE_HTTP_POST_ERROR,\n        CURLE_SSL_CONNECT_ERROR,\n    ];\n\n    /**\n     * Executes a CURL request with optional retries and exception on failure\n     *\n     * @param  CurlHandle  $ch curl handler\n     * @return bool|string @see curl_exec\n     */\n    public static function execute(CurlHandle $ch, int $retries = 5): bool|string\n    {\n        while ($retries > 0) {\n            $retries--;\n            $curlResponse = curl_exec($ch);\n            if ($curlResponse === false) {\n                $curlErrno = curl_errno($ch);\n\n                if (false === \\in_array($curlErrno, self::$retriableErrorCodes, true) || $retries === 0) {\n                    $curlError = curl_error($ch);\n\n                    throw new \\RuntimeException(sprintf('Curl error (code %d): %s', $curlErrno, $curlError));\n                }\n                continue;\n            }\n\n            return $curlResponse;\n        }\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Simple handler wrapper that deduplicates log records across multiple requests\n *\n * It also includes the BufferHandler functionality and will buffer\n * all messages until the end of the request or flush() is called.\n *\n * This works by storing all log records' messages above $deduplicationLevel\n * to the file specified by $deduplicationStore. When further logs come in at the end of the\n * request (or when flush() is called), all those above $deduplicationLevel are checked\n * against the existing stored logs. If they match and the timestamps in the stored log is\n * not older than $time seconds, the new log record is discarded. If no log record is new, the\n * whole data set is discarded.\n *\n * This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers\n * that send messages to people, to avoid spamming with the same message over and over in case of\n * a major component failure like a database server being down which makes all requests fail in the\n * same way.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass DeduplicationHandler extends BufferHandler\n{\n    protected string $deduplicationStore;\n\n    protected Level $deduplicationLevel;\n\n    protected int $time;\n    protected bool $gc = false;\n\n    /**\n     * @param HandlerInterface             $handler            Handler.\n     * @param string|null                  $deduplicationStore The file/path where the deduplication log should be kept\n     * @param int|string|Level|LogLevel::* $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes\n     * @param int                          $time               The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through\n     * @param bool                         $bubble             Whether the messages that are handled can bubble up the stack or not\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $deduplicationLevel\n     */\n    public function __construct(HandlerInterface $handler, ?string $deduplicationStore = null, int|string|Level $deduplicationLevel = Level::Error, int $time = 60, bool $bubble = true)\n    {\n        parent::__construct($handler, 0, Level::Debug, $bubble, false);\n\n        $this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore;\n        $this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel);\n        $this->time = $time;\n    }\n\n    public function flush(): void\n    {\n        if ($this->bufferSize === 0) {\n            return;\n        }\n\n        $store = null;\n\n        if (file_exists($this->deduplicationStore)) {\n            $store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);\n        }\n\n        $passthru = null;\n\n        foreach ($this->buffer as $record) {\n            if ($record->level->value >= $this->deduplicationLevel->value) {\n                $passthru = $passthru === true || !\\is_array($store) || !$this->isDuplicate($store, $record);\n                if ($passthru) {\n                    $line = $this->buildDeduplicationStoreEntry($record);\n                    file_put_contents($this->deduplicationStore, $line . \"\\n\", FILE_APPEND);\n                    if (!\\is_array($store)) {\n                        $store = [];\n                    }\n                    $store[] = $line;\n                }\n            }\n        }\n\n        // default of null is valid as well as if no record matches duplicationLevel we just pass through\n        if ($passthru === true || $passthru === null) {\n            $this->handler->handleBatch($this->buffer);\n        }\n\n        $this->clear();\n\n        if ($this->gc) {\n            $this->collectLogs();\n        }\n    }\n\n    /**\n     * If there is a store entry older than e.g. a day, this method should set `$this->gc` to `true` to trigger garbage collection.\n     * @param string[] $store The deduplication store\n     */\n    protected function isDuplicate(array $store, LogRecord $record): bool\n    {\n        $timestampValidity = $record->datetime->getTimestamp() - $this->time;\n        $expectedMessage = preg_replace('{[\\r\\n].*}', '', $record->message);\n        $yesterday = time() - 86400;\n\n        for ($i = \\count($store) - 1; $i >= 0; $i--) {\n            list($timestamp, $level, $message) = explode(':', $store[$i], 3);\n\n            if ($level === $record->level->getName() && $message === $expectedMessage && $timestamp > $timestampValidity) {\n                return true;\n            }\n\n            if ($timestamp < $yesterday) {\n                $this->gc = true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * @return string The given record serialized as a single line of text\n     */\n    protected function buildDeduplicationStoreEntry(LogRecord $record): string\n    {\n        return $record->datetime->getTimestamp() . ':' . $record->level->getName() . ':' . preg_replace('{[\\r\\n].*}', '', $record->message);\n    }\n\n    private function collectLogs(): void\n    {\n        if (!file_exists($this->deduplicationStore)) {\n            return;\n        }\n\n        $handle = fopen($this->deduplicationStore, 'rw+');\n\n        if (false === $handle) {\n            throw new \\RuntimeException('Failed to open file for reading and writing: ' . $this->deduplicationStore);\n        }\n\n        if (false === flock($handle, LOCK_EX)) {\n            return;\n        }\n        $validLogs = [];\n\n        $timestampValidity = time() - $this->time;\n\n        while (!feof($handle)) {\n            $log = fgets($handle);\n            if (\\is_string($log) && '' !== $log && substr($log, 0, 10) >= $timestampValidity) {\n                $validLogs[] = $log;\n            }\n        }\n\n        ftruncate($handle, 0);\n        rewind($handle);\n        foreach ($validLogs as $log) {\n            fwrite($handle, $log);\n        }\n\n        flock($handle, LOCK_UN);\n        fclose($handle);\n\n        $this->gc = false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Formatter\\NormalizerFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Doctrine\\CouchDB\\CouchDBClient;\nuse Monolog\\LogRecord;\n\n/**\n * CouchDB handler for Doctrine CouchDB ODM\n *\n * @author Markus Bachmann <markus.bachmann@bachi.biz>\n */\nclass DoctrineCouchDBHandler extends AbstractProcessingHandler\n{\n    private CouchDBClient $client;\n\n    public function __construct(CouchDBClient $client, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        $this->client = $client;\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->client->postDocument($record->formatted);\n    }\n\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new NormalizerFormatter;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Aws\\Sdk;\nuse Aws\\DynamoDb\\DynamoDbClient;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Aws\\DynamoDb\\Marshaler;\nuse Monolog\\Formatter\\ScalarFormatter;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/)\n *\n * @link https://github.com/aws/aws-sdk-php/\n * @author Andrew Lawson <adlawson@gmail.com>\n */\nclass DynamoDbHandler extends AbstractProcessingHandler\n{\n    public const DATE_FORMAT = 'Y-m-d\\TH:i:s.uO';\n\n    protected DynamoDbClient $client;\n\n    protected string $table;\n\n    protected Marshaler $marshaler;\n\n    public function __construct(DynamoDbClient $client, string $table, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        $this->marshaler = new Marshaler;\n\n        $this->client = $client;\n        $this->table = $table;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $filtered = $this->filterEmptyFields($record->formatted);\n        $formatted = $this->marshaler->marshalItem($filtered);\n\n        $this->client->putItem([\n            'TableName' => $this->table,\n            'Item' => $formatted,\n        ]);\n    }\n\n    /**\n     * @param  mixed[] $record\n     * @return mixed[]\n     */\n    protected function filterEmptyFields(array $record): array\n    {\n        return array_filter($record, function ($value) {\n            return [] !== $value;\n        });\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new ScalarFormatter(self::DATE_FORMAT);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Elastic\\Transport\\Exception\\TransportException;\nuse Elastica\\Document;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\ElasticaFormatter;\nuse Monolog\\Level;\nuse Elastica\\Client;\nuse Elastica\\Exception\\ExceptionInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Elastic Search handler\n *\n * Usage example:\n *\n *    $client = new \\Elastica\\Client();\n *    $options = array(\n *        'index' => 'elastic_index_name',\n *        'type' => 'elastic_doc_type', Types have been removed in Elastica 7\n *    );\n *    $handler = new ElasticaHandler($client, $options);\n *    $log = new Logger('application');\n *    $log->pushHandler($handler);\n *\n * @author Jelle Vink <jelle.vink@gmail.com>\n * @phpstan-type Options array{\n *     index: string,\n *     type: string,\n *     ignore_error: bool\n * }\n * @phpstan-type InputOptions array{\n *     index?: string,\n *     type?: string,\n *     ignore_error?: bool\n * }\n */\nclass ElasticaHandler extends AbstractProcessingHandler\n{\n    protected Client $client;\n\n    /**\n     * @var mixed[] Handler config options\n     * @phpstan-var Options\n     */\n    protected array $options;\n\n    /**\n     * @param Client  $client  Elastica Client object\n     * @param mixed[] $options Handler configuration\n     *\n     * @phpstan-param InputOptions $options\n     */\n    public function __construct(Client $client, array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n        $this->client = $client;\n        $this->options = array_merge(\n            [\n                'index'          => 'monolog',      // Elastic index name\n                'type'           => 'record',       // Elastic document type\n                'ignore_error'   => false,          // Suppress Elastica exceptions\n            ],\n            $options\n        );\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->bulkSend([$record->formatted]);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        if ($formatter instanceof ElasticaFormatter) {\n            return parent::setFormatter($formatter);\n        }\n\n        throw new \\InvalidArgumentException('ElasticaHandler is only compatible with ElasticaFormatter');\n    }\n\n    /**\n     * @return mixed[]\n     *\n     * @phpstan-return Options\n     */\n    public function getOptions(): array\n    {\n        return $this->options;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new ElasticaFormatter($this->options['index'], $this->options['type']);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        $documents = $this->getFormatter()->formatBatch($records);\n        $this->bulkSend($documents);\n    }\n\n    /**\n     * Use Elasticsearch bulk API to send list of documents\n     *\n     * @param Document[] $documents\n     *\n     * @throws \\RuntimeException\n     */\n    protected function bulkSend(array $documents): void\n    {\n        try {\n            $this->client->addDocuments($documents);\n        } catch (ExceptionInterface | TransportException $e) {\n            if (!$this->options['ignore_error']) {\n                throw new \\RuntimeException(\"Error sending messages to Elasticsearch\", 0, $e);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Elastic\\Elasticsearch\\Response\\Elasticsearch;\nuse Throwable;\nuse RuntimeException;\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\ElasticsearchFormatter;\nuse InvalidArgumentException;\nuse Elasticsearch\\Common\\Exceptions\\RuntimeException as ElasticsearchRuntimeException;\nuse Elasticsearch\\Client;\nuse Monolog\\LogRecord;\nuse Elastic\\Elasticsearch\\Exception\\InvalidArgumentException as ElasticInvalidArgumentException;\nuse Elastic\\Elasticsearch\\Client as Client8;\n\n/**\n * Elasticsearch handler\n *\n * @link https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html\n *\n * Simple usage example:\n *\n *    $client = \\Elasticsearch\\ClientBuilder::create()\n *        ->setHosts($hosts)\n *        ->build();\n *\n *    $options = array(\n *        'index' => 'elastic_index_name',\n *        'type'  => 'elastic_doc_type',\n *    );\n *    $handler = new ElasticsearchHandler($client, $options);\n *    $log = new Logger('application');\n *    $log->pushHandler($handler);\n *\n * @author Avtandil Kikabidze <akalongman@gmail.com>\n * @phpstan-type Options array{\n *     index: string,\n *     type: string,\n *     ignore_error: bool,\n *     op_type: 'index'|'create'\n * }\n * @phpstan-type InputOptions array{\n *     index?: string,\n *     type?: string,\n *     ignore_error?: bool,\n *     op_type?: 'index'|'create'\n * }\n */\nclass ElasticsearchHandler extends AbstractProcessingHandler\n{\n    protected Client|Client8 $client;\n\n    /**\n     * @var mixed[] Handler config options\n     * @phpstan-var Options\n     */\n    protected array $options;\n\n    /**\n     * @var bool\n     */\n    private $needsType;\n\n    /**\n     * @param Client|Client8 $client  Elasticsearch Client object\n     * @param mixed[]        $options Handler configuration\n     *\n     * @phpstan-param InputOptions $options\n     */\n    public function __construct(Client|Client8 $client, array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n        $this->client = $client;\n        $this->options = array_merge(\n            [\n                'index'        => 'monolog', // Elastic index name\n                'type'         => '_doc',    // Elastic document type\n                'ignore_error' => false,     // Suppress Elasticsearch exceptions\n                'op_type'      => 'index',   // Elastic op_type (index or create) (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#docs-index-api-op_type)\n            ],\n            $options\n        );\n\n        if ($client instanceof Client8 || $client::VERSION[0] === '7') {\n            $this->needsType = false;\n            // force the type to _doc for ES8/ES7\n            $this->options['type'] = '_doc';\n        } else {\n            $this->needsType = true;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->bulkSend([$record->formatted]);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        if ($formatter instanceof ElasticsearchFormatter) {\n            return parent::setFormatter($formatter);\n        }\n\n        throw new InvalidArgumentException('ElasticsearchHandler is only compatible with ElasticsearchFormatter');\n    }\n\n    /**\n     * Getter options\n     *\n     * @return mixed[]\n     *\n     * @phpstan-return Options\n     */\n    public function getOptions(): array\n    {\n        return $this->options;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new ElasticsearchFormatter($this->options['index'], $this->options['type']);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        $documents = $this->getFormatter()->formatBatch($records);\n        $this->bulkSend($documents);\n    }\n\n    /**\n     * Use Elasticsearch bulk API to send list of documents\n     *\n     * @param  array<array<mixed>> $records Records + _index/_type keys\n     * @throws \\RuntimeException\n     */\n    protected function bulkSend(array $records): void\n    {\n        try {\n            $params = [\n                'body' => [],\n            ];\n\n            foreach ($records as $record) {\n                $params['body'][] = [\n                    $this->options['op_type'] => $this->needsType ? [\n                        '_index' => $record['_index'],\n                        '_type'  => $record['_type'],\n                    ] : [\n                        '_index' => $record['_index'],\n                    ],\n                ];\n                unset($record['_index'], $record['_type']);\n\n                $params['body'][] = $record;\n            }\n\n            /** @var Elasticsearch */\n            $responses = $this->client->bulk($params);\n\n            if ($responses['errors'] === true) {\n                throw $this->createExceptionFromResponses($responses);\n            }\n        } catch (Throwable $e) {\n            if (! $this->options['ignore_error']) {\n                throw new RuntimeException('Error sending messages to Elasticsearch', 0, $e);\n            }\n        }\n    }\n\n    /**\n     * Creates elasticsearch exception from responses array\n     *\n     * Only the first error is converted into an exception.\n     *\n     * @param mixed[]|Elasticsearch $responses returned by $this->client->bulk()\n     */\n    protected function createExceptionFromResponses($responses): Throwable\n    {\n        foreach ($responses['items'] ?? [] as $item) {\n            if (isset($item['index']['error'])) {\n                return $this->createExceptionFromError($item['index']['error']);\n            }\n        }\n\n        if (class_exists(ElasticInvalidArgumentException::class)) {\n            return new ElasticInvalidArgumentException('Elasticsearch failed to index one or more records.');\n        }\n\n        if (class_exists(ElasticsearchRuntimeException::class)) {\n            return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.');\n        }\n\n        throw new \\LogicException('Unsupported elastic search client version');\n    }\n\n    /**\n     * Creates elasticsearch exception from error array\n     *\n     * @param mixed[] $error\n     */\n    protected function createExceptionFromError(array $error): Throwable\n    {\n        $previous = isset($error['caused_by']) ? $this->createExceptionFromError($error['caused_by']) : null;\n\n        if (class_exists(ElasticInvalidArgumentException::class)) {\n            return new ElasticInvalidArgumentException($error['type'] . ': ' . $error['reason'], 0, $previous);\n        }\n\n        if (class_exists(ElasticsearchRuntimeException::class)) {\n            return new ElasticsearchRuntimeException($error['type'].': '.$error['reason'], 0, $previous);\n        }\n\n        throw new \\LogicException('Unsupported elastic search client version');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Stores to PHP error_log() handler.\n *\n * @author Elan Ruusamäe <glen@delfi.ee>\n */\nclass ErrorLogHandler extends AbstractProcessingHandler\n{\n    public const OPERATING_SYSTEM = 0;\n    public const SAPI = 4;\n\n    /** @var 0|4 */\n    protected int $messageType;\n    protected bool $expandNewlines;\n\n    /**\n     * @param 0|4 $messageType    Says where the error should go.\n     * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries\n     *\n     * @throws \\InvalidArgumentException If an unsupported message type is set\n     */\n    public function __construct(int $messageType = self::OPERATING_SYSTEM, int|string|Level $level = Level::Debug, bool $bubble = true, bool $expandNewlines = false)\n    {\n        parent::__construct($level, $bubble);\n\n        if (false === \\in_array($messageType, self::getAvailableTypes(), true)) {\n            $message = sprintf('The given message type \"%s\" is not supported', print_r($messageType, true));\n\n            throw new \\InvalidArgumentException($message);\n        }\n\n        $this->messageType = $messageType;\n        $this->expandNewlines = $expandNewlines;\n    }\n\n    /**\n     * @return int[] With all available types\n     */\n    public static function getAvailableTypes(): array\n    {\n        return [\n            self::OPERATING_SYSTEM,\n            self::SAPI,\n        ];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        if (!$this->expandNewlines) {\n            error_log((string) $record->formatted, $this->messageType);\n\n            return;\n        }\n\n        $lines = preg_split('{[\\r\\n]+}', (string) $record->formatted);\n        if ($lines === false) {\n            $pcreErrorCode = preg_last_error();\n\n            throw new \\RuntimeException('Failed to preg_split formatted string: ' . $pcreErrorCode . ' / '. preg_last_error_msg());\n        }\n        foreach ($lines as $line) {\n            error_log($line, $this->messageType);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Throwable;\nuse Monolog\\LogRecord;\n\n/**\n * Forwards records to at most one handler\n *\n * If a handler fails, the exception is suppressed and the record is forwarded to the next handler.\n *\n * As soon as one handler handles a record successfully, the handling stops there.\n */\nclass FallbackGroupHandler extends GroupHandler\n{\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n        foreach ($this->handlers as $handler) {\n            try {\n                $handler->handle(clone $record);\n                break;\n            } catch (Throwable $e) {\n                // What throwable?\n            }\n        }\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        if (\\count($this->processors) > 0) {\n            $processed = [];\n            foreach ($records as $record) {\n                $processed[] = $this->processRecord($record);\n            }\n            $records = $processed;\n        }\n\n        foreach ($this->handlers as $handler) {\n            try {\n                $handler->handleBatch(array_map(fn ($record) => clone $record, $records));\n                break;\n            } catch (Throwable $e) {\n                // What throwable?\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Closure;\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Monolog\\ResettableInterface;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Simple handler wrapper that filters records based on a list of levels\n *\n * It can be configured with an exact list of levels to allow, or a min/max level.\n *\n * @author Hennadiy Verkh\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass FilterHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface\n{\n    use ProcessableHandlerTrait;\n\n    /**\n     * Handler or factory Closure($record, $this)\n     *\n     * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface\n     */\n    protected Closure|HandlerInterface $handler;\n\n    /**\n     * Minimum level for logs that are passed to handler\n     *\n     * @var bool[] Map of Level value => true\n     * @phpstan-var array<value-of<Level::VALUES>, true>\n     */\n    protected array $acceptedLevels;\n\n    /**\n     * Whether the messages that are handled can bubble up the stack or not\n     */\n    protected bool $bubble;\n\n    /**\n     * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler\n     *\n     * @param Closure|HandlerInterface                             $handler        Handler or factory Closure($record|null, $filterHandler).\n     * @param int|string|Level|array<int|string|Level|LogLevel::*> $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided\n     * @param int|string|Level|LogLevel::*                         $maxLevel       Maximum level to accept, only used if $minLevelOrList is not an array\n     * @param bool                                                 $bubble         Whether the messages that are handled can bubble up the stack or not\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*|array<value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*> $minLevelOrList\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $maxLevel\n     */\n    public function __construct(Closure|HandlerInterface $handler, int|string|Level|array $minLevelOrList = Level::Debug, int|string|Level $maxLevel = Level::Emergency, bool $bubble = true)\n    {\n        $this->handler  = $handler;\n        $this->bubble   = $bubble;\n        $this->setAcceptedLevels($minLevelOrList, $maxLevel);\n    }\n\n    /**\n     * @phpstan-return list<Level> List of levels\n     */\n    public function getAcceptedLevels(): array\n    {\n        return array_map(fn (int $level) => Level::from($level), array_keys($this->acceptedLevels));\n    }\n\n    /**\n     * @param  int|string|Level|LogLevel::*|array<int|string|Level|LogLevel::*> $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided\n     * @param  int|string|Level|LogLevel::*                                     $maxLevel       Maximum level or level name to accept, only used if $minLevelOrList is not an array\n     * @return $this\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*|array<value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*> $minLevelOrList\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $maxLevel\n     */\n    public function setAcceptedLevels(int|string|Level|array $minLevelOrList = Level::Debug, int|string|Level $maxLevel = Level::Emergency): self\n    {\n        if (\\is_array($minLevelOrList)) {\n            $acceptedLevels = array_map(Logger::toMonologLevel(...), $minLevelOrList);\n        } else {\n            $minLevelOrList = Logger::toMonologLevel($minLevelOrList);\n            $maxLevel = Logger::toMonologLevel($maxLevel);\n            $acceptedLevels = array_values(array_filter(Level::cases(), fn (Level $level) => $level->value >= $minLevelOrList->value && $level->value <= $maxLevel->value));\n        }\n        $this->acceptedLevels = [];\n        foreach ($acceptedLevels as $level) {\n            $this->acceptedLevels[$level->value] = true;\n        }\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        return isset($this->acceptedLevels[$record->level->value]);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (!$this->isHandling($record)) {\n            return false;\n        }\n\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n\n        $this->getHandler($record)->handle($record);\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        $filtered = [];\n        foreach ($records as $record) {\n            if ($this->isHandling($record)) {\n                $filtered[] = $record;\n            }\n        }\n\n        if (\\count($filtered) > 0) {\n            $this->getHandler($filtered[\\count($filtered) - 1])->handleBatch($filtered);\n        }\n    }\n\n    /**\n     * Return the nested handler\n     *\n     * If the handler was provided as a factory, this will trigger the handler's instantiation.\n     */\n    public function getHandler(LogRecord|null $record = null): HandlerInterface\n    {\n        if (!$this->handler instanceof HandlerInterface) {\n            $handler = ($this->handler)($record, $this);\n            if (!$handler instanceof HandlerInterface) {\n                throw new \\RuntimeException(\"The factory Closure should return a HandlerInterface\");\n            }\n            $this->handler = $handler;\n        }\n\n        return $this->handler;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        $handler = $this->getHandler();\n        if ($handler instanceof FormattableHandlerInterface) {\n            $handler->setFormatter($formatter);\n\n            return $this;\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($handler).' does not support formatters.');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        $handler = $this->getHandler();\n        if ($handler instanceof FormattableHandlerInterface) {\n            return $handler->getFormatter();\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($handler).' does not support formatters.');\n    }\n\n    public function reset(): void\n    {\n        $this->resetProcessors();\n\n        if ($this->getHandler() instanceof ResettableInterface) {\n            $this->getHandler()->reset();\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler\\FingersCrossed;\n\nuse Monolog\\LogRecord;\n\n/**\n * Interface for activation strategies for the FingersCrossedHandler.\n *\n * @author Johannes M. Schmitt <schmittjoh@gmail.com>\n */\ninterface ActivationStrategyInterface\n{\n    /**\n     * Returns whether the given record activates the handler.\n     */\n    public function isHandlerActivated(LogRecord $record): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler\\FingersCrossed;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Channel and Error level based monolog activation strategy. Allows to trigger activation\n * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except\n * for records of the 'sql' channel; those should trigger activation on level 'WARN'.\n *\n * Example:\n *\n * <code>\n *   $activationStrategy = new ChannelLevelActivationStrategy(\n *       Level::Critical,\n *       array(\n *           'request' => Level::Alert,\n *           'sensitive' => Level::Error,\n *       )\n *   );\n *   $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy);\n * </code>\n *\n * @author Mike Meessen <netmikey@gmail.com>\n */\nclass ChannelLevelActivationStrategy implements ActivationStrategyInterface\n{\n    private Level $defaultActionLevel;\n\n    /**\n     * @var array<string, Level>\n     */\n    private array $channelToActionLevel;\n\n    /**\n     * @param int|string|Level|LogLevel::*                $defaultActionLevel   The default action level to be used if the record's category doesn't match any\n     * @param array<string, int|string|Level|LogLevel::*> $channelToActionLevel An array that maps channel names to action levels.\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $defaultActionLevel\n     * @phpstan-param array<string, value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*> $channelToActionLevel\n     */\n    public function __construct(int|string|Level $defaultActionLevel, array $channelToActionLevel = [])\n    {\n        $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel);\n        $this->channelToActionLevel = array_map(Logger::toMonologLevel(...), $channelToActionLevel);\n    }\n\n    public function isHandlerActivated(LogRecord $record): bool\n    {\n        if (isset($this->channelToActionLevel[$record->channel])) {\n            return $record->level->value >= $this->channelToActionLevel[$record->channel]->value;\n        }\n\n        return $record->level->value >= $this->defaultActionLevel->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler\\FingersCrossed;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\n\n/**\n * Error level based activation strategy.\n *\n * @author Johannes M. Schmitt <schmittjoh@gmail.com>\n */\nclass ErrorLevelActivationStrategy implements ActivationStrategyInterface\n{\n    private Level $actionLevel;\n\n    /**\n     * @param int|string|Level $actionLevel Level or name or value\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $actionLevel\n     */\n    public function __construct(int|string|Level $actionLevel)\n    {\n        $this->actionLevel = Logger::toMonologLevel($actionLevel);\n    }\n\n    public function isHandlerActivated(LogRecord $record): bool\n    {\n        return $record->level->value >= $this->actionLevel->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Closure;\nuse Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy;\nuse Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface;\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Monolog\\ResettableInterface;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Buffers all records until a certain level is reached\n *\n * The advantage of this approach is that you don't get any clutter in your log files.\n * Only requests which actually trigger an error (or whatever your actionLevel is) will be\n * in the logs, but they will contain all records, not only those above the level threshold.\n *\n * You can then have a passthruLevel as well which means that at the end of the request,\n * even if it did not get activated, it will still send through log records of e.g. at least a\n * warning level.\n *\n * You can find the various activation strategies in the\n * Monolog\\Handler\\FingersCrossed\\ namespace.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass FingersCrossedHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface\n{\n    use ProcessableHandlerTrait;\n\n    /**\n     * Handler or factory Closure($record, $this)\n     *\n     * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface\n     */\n    protected Closure|HandlerInterface $handler;\n\n    protected ActivationStrategyInterface $activationStrategy;\n\n    protected bool $buffering = true;\n\n    protected int $bufferSize;\n\n    /** @var LogRecord[] */\n    protected array $buffer = [];\n\n    protected bool $stopBuffering;\n\n    protected Level|null $passthruLevel = null;\n\n    protected bool $bubble;\n\n    /**\n     * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler\n     *\n     * @param Closure|HandlerInterface          $handler            Handler or factory Closure($record|null, $fingersCrossedHandler).\n     * @param int|string|Level|LogLevel::*|null $activationStrategy Strategy which determines when this handler takes action, or a level name/value at which the handler is activated\n     * @param int                               $bufferSize         How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.\n     * @param bool                              $bubble             Whether the messages that are handled can bubble up the stack or not\n     * @param bool                              $stopBuffering      Whether the handler should stop buffering after being triggered (default true)\n     * @param int|string|Level|LogLevel::*|null $passthruLevel      Minimum level to always flush to handler on close, even if strategy not triggered\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*|ActivationStrategyInterface|null $activationStrategy\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*|null $passthruLevel\n     */\n    public function __construct(Closure|HandlerInterface $handler, int|string|Level|ActivationStrategyInterface|null $activationStrategy = null, int $bufferSize = 0, bool $bubble = true, bool $stopBuffering = true, int|string|Level|null $passthruLevel = null)\n    {\n        if (null === $activationStrategy) {\n            $activationStrategy = new ErrorLevelActivationStrategy(Level::Warning);\n        }\n\n        // convert simple int activationStrategy to an object\n        if (!$activationStrategy instanceof ActivationStrategyInterface) {\n            $activationStrategy = new ErrorLevelActivationStrategy($activationStrategy);\n        }\n\n        $this->handler = $handler;\n        $this->activationStrategy = $activationStrategy;\n        $this->bufferSize = $bufferSize;\n        $this->bubble = $bubble;\n        $this->stopBuffering = $stopBuffering;\n\n        if ($passthruLevel !== null) {\n            $this->passthruLevel = Logger::toMonologLevel($passthruLevel);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        return true;\n    }\n\n    /**\n     * Manually activate this logger regardless of the activation strategy\n     */\n    public function activate(): void\n    {\n        if ($this->stopBuffering) {\n            $this->buffering = false;\n        }\n\n        $this->getHandler(end($this->buffer) ?: null)->handleBatch($this->buffer);\n        $this->buffer = [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n\n        if ($this->buffering) {\n            $this->buffer[] = $record;\n            if ($this->bufferSize > 0 && \\count($this->buffer) > $this->bufferSize) {\n                array_shift($this->buffer);\n            }\n            if ($this->activationStrategy->isHandlerActivated($record)) {\n                $this->activate();\n            }\n        } else {\n            $this->getHandler($record)->handle($record);\n        }\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        $this->flushBuffer();\n\n        $this->getHandler()->close();\n    }\n\n    public function reset(): void\n    {\n        $this->flushBuffer();\n\n        $this->resetProcessors();\n\n        if ($this->getHandler() instanceof ResettableInterface) {\n            $this->getHandler()->reset();\n        }\n    }\n\n    /**\n     * Clears the buffer without flushing any messages down to the wrapped handler.\n     *\n     * It also resets the handler to its initial buffering state.\n     */\n    public function clear(): void\n    {\n        $this->buffer = [];\n        $this->reset();\n    }\n\n    /**\n     * Resets the state of the handler. Stops forwarding records to the wrapped handler.\n     */\n    private function flushBuffer(): void\n    {\n        if (null !== $this->passthruLevel) {\n            $passthruLevel = $this->passthruLevel;\n            $this->buffer = array_filter($this->buffer, static function ($record) use ($passthruLevel) {\n                return $passthruLevel->includes($record->level);\n            });\n            if (\\count($this->buffer) > 0) {\n                $this->getHandler(end($this->buffer))->handleBatch($this->buffer);\n            }\n        }\n\n        $this->buffer = [];\n        $this->buffering = true;\n    }\n\n    /**\n     * Return the nested handler\n     *\n     * If the handler was provided as a factory, this will trigger the handler's instantiation.\n     */\n    public function getHandler(LogRecord|null $record = null): HandlerInterface\n    {\n        if (!$this->handler instanceof HandlerInterface) {\n            $handler = ($this->handler)($record, $this);\n            if (!$handler instanceof HandlerInterface) {\n                throw new \\RuntimeException(\"The factory Closure should return a HandlerInterface\");\n            }\n            $this->handler = $handler;\n        }\n\n        return $this->handler;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        $handler = $this->getHandler();\n        if ($handler instanceof FormattableHandlerInterface) {\n            $handler->setFormatter($formatter);\n\n            return $this;\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($handler).' does not support formatters.');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        $handler = $this->getHandler();\n        if ($handler instanceof FormattableHandlerInterface) {\n            return $handler->getFormatter();\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($handler).' does not support formatters.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\WildfireFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol.\n *\n * @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com>\n */\nclass FirePHPHandler extends AbstractProcessingHandler\n{\n    use WebRequestRecognizerTrait;\n\n    /**\n     * WildFire JSON header message format\n     */\n    protected const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2';\n\n    /**\n     * FirePHP structure for parsing messages & their presentation\n     */\n    protected const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1';\n\n    /**\n     * Must reference a \"known\" plugin, otherwise headers won't display in FirePHP\n     */\n    protected const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3';\n\n    /**\n     * Header prefix for Wildfire to recognize & parse headers\n     */\n    protected const HEADER_PREFIX = 'X-Wf';\n\n    /**\n     * Whether or not Wildfire vendor-specific headers have been generated & sent yet\n     */\n    protected static bool $initialized = false;\n\n    /**\n     * Shared static message index between potentially multiple handlers\n     */\n    protected static int $messageIndex = 1;\n\n    protected static bool $sendHeaders = true;\n\n    /**\n     * Base header creation function used by init headers & record headers\n     *\n     * @param array<int|string> $meta    Wildfire Plugin, Protocol & Structure Indexes\n     * @param string            $message Log message\n     *\n     * @return array<string, string> Complete header string ready for the client as key and message as value\n     *\n     * @phpstan-return non-empty-array<string, string>\n     */\n    protected function createHeader(array $meta, string $message): array\n    {\n        $header = sprintf('%s-%s', static::HEADER_PREFIX, join('-', $meta));\n\n        return [$header => $message];\n    }\n\n    /**\n     * Creates message header from record\n     *\n     * @return array<string, string>\n     *\n     * @phpstan-return non-empty-array<string, string>\n     *\n     * @see createHeader()\n     */\n    protected function createRecordHeader(LogRecord $record): array\n    {\n        // Wildfire is extensible to support multiple protocols & plugins in a single request,\n        // but we're not taking advantage of that (yet), so we're using \"1\" for simplicity's sake.\n        return $this->createHeader(\n            [1, 1, 1, self::$messageIndex++],\n            $record->formatted\n        );\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new WildfireFormatter();\n    }\n\n    /**\n     * Wildfire initialization headers to enable message parsing\n     *\n     * @see createHeader()\n     * @see sendHeader()\n     *\n     * @return array<string, string>\n     */\n    protected function getInitHeaders(): array\n    {\n        // Initial payload consists of required headers for Wildfire\n        return array_merge(\n            $this->createHeader(['Protocol', 1], static::PROTOCOL_URI),\n            $this->createHeader([1, 'Structure', 1], static::STRUCTURE_URI),\n            $this->createHeader([1, 'Plugin', 1], static::PLUGIN_URI)\n        );\n    }\n\n    /**\n     * Send header string to the client\n     */\n    protected function sendHeader(string $header, string $content): void\n    {\n        if (!headers_sent() && self::$sendHeaders) {\n            header(sprintf('%s: %s', $header, $content));\n        }\n    }\n\n    /**\n     * Creates & sends header for a record, ensuring init headers have been sent prior\n     *\n     * @see sendHeader()\n     * @see sendInitHeaders()\n     */\n    protected function write(LogRecord $record): void\n    {\n        if (!self::$sendHeaders || !$this->isWebRequest()) {\n            return;\n        }\n\n        // WildFire-specific headers must be sent prior to any messages\n        if (!self::$initialized) {\n            self::$initialized = true;\n\n            self::$sendHeaders = $this->headersAccepted();\n            if (!self::$sendHeaders) {\n                return;\n            }\n\n            foreach ($this->getInitHeaders() as $header => $content) {\n                $this->sendHeader($header, $content);\n            }\n        }\n\n        $header = $this->createRecordHeader($record);\n        if (trim(current($header)) !== '') {\n            $this->sendHeader(key($header), current($header));\n        }\n    }\n\n    /**\n     * Verifies if the headers are accepted by the current user agent\n     */\n    protected function headersAccepted(): bool\n    {\n        if (isset($_SERVER['HTTP_USER_AGENT']) && 1 === preg_match('{\\bFirePHP/\\d+\\.\\d+\\b}', $_SERVER['HTTP_USER_AGENT'])) {\n            return true;\n        }\n\n        return isset($_SERVER['HTTP_X_FIREPHP_VERSION']);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Sends logs to Fleep.io using Webhook integrations\n *\n * You'll need a Fleep.io account to use this handler.\n *\n * @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation\n * @author Ando Roots <ando@sqroot.eu>\n */\nclass FleepHookHandler extends SocketHandler\n{\n    protected const FLEEP_HOST = 'fleep.io';\n\n    protected const FLEEP_HOOK_URI = '/hook/';\n\n    /**\n     * @var string Webhook token (specifies the conversation where logs are sent)\n     */\n    protected string $token;\n\n    /**\n     * Construct a new Fleep.io Handler.\n     *\n     * For instructions on how to create a new web hook in your conversations\n     * see https://fleep.io/integrations/webhooks/\n     *\n     * @param  string                    $token Webhook token\n     * @throws MissingExtensionException if OpenSSL is missing\n     */\n    public function __construct(\n        string $token,\n        $level = Level::Debug,\n        bool $bubble = true,\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        if (!\\extension_loaded('openssl')) {\n            throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler');\n        }\n\n        $this->token = $token;\n\n        $connectionString = 'ssl://' . static::FLEEP_HOST . ':443';\n        parent::__construct(\n            $connectionString,\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n    }\n\n    /**\n     * Returns the default formatter to use with this handler\n     *\n     * Overloaded to remove empty context and extra arrays from the end of the log message.\n     *\n     * @return LineFormatter\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter(null, null, true, true);\n    }\n\n    /**\n     * Handles a log record\n     */\n    public function write(LogRecord $record): void\n    {\n        parent::write($record);\n        $this->closeSocket();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function generateDataStream(LogRecord $record): string\n    {\n        $content = $this->buildContent($record);\n\n        return $this->buildHeader($content) . $content;\n    }\n\n    /**\n     * Builds the header of the API Call\n     */\n    private function buildHeader(string $content): string\n    {\n        $header = \"POST \" . static::FLEEP_HOOK_URI . $this->token . \" HTTP/1.1\\r\\n\";\n        $header .= \"Host: \" . static::FLEEP_HOST . \"\\r\\n\";\n        $header .= \"Content-Type: application/x-www-form-urlencoded\\r\\n\";\n        $header .= \"Content-Length: \" . \\strlen($content) . \"\\r\\n\";\n        $header .= \"\\r\\n\";\n\n        return $header;\n    }\n\n    /**\n     * Builds the body of API call\n     */\n    private function buildContent(LogRecord $record): string\n    {\n        $dataArray = [\n            'message' => $record->formatted,\n        ];\n\n        return http_build_query($dataArray);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\Formatter\\FlowdockFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Sends notifications through the Flowdock push API\n *\n * This must be configured with a FlowdockFormatter instance via setFormatter()\n *\n * Notes:\n * API token - Flowdock API token\n *\n * @author Dominik Liebler <liebler.dominik@gmail.com>\n * @see https://www.flowdock.com/api/push\n * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4\n */\nclass FlowdockHandler extends SocketHandler\n{\n    protected string $apiToken;\n\n    /**\n     * @throws MissingExtensionException if OpenSSL is missing\n     */\n    public function __construct(\n        string $apiToken,\n        $level = Level::Debug,\n        bool $bubble = true,\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        if (!\\extension_loaded('openssl')) {\n            throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler');\n        }\n\n        parent::__construct(\n            'ssl://api.flowdock.com:443',\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n        $this->apiToken = $apiToken;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        if (!$formatter instanceof FlowdockFormatter) {\n            throw new \\InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\\Formatter\\FlowdockFormatter to function correctly');\n        }\n\n        return parent::setFormatter($formatter);\n    }\n\n    /**\n     * Gets the default formatter.\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        throw new \\InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\\Formatter\\FlowdockFormatter to function correctly');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        parent::write($record);\n\n        $this->closeSocket();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function generateDataStream(LogRecord $record): string\n    {\n        $content = $this->buildContent($record);\n\n        return $this->buildHeader($content) . $content;\n    }\n\n    /**\n     * Builds the body of API call\n     */\n    private function buildContent(LogRecord $record): string\n    {\n        return Utils::jsonEncode($record->formatted);\n    }\n\n    /**\n     * Builds the header of the API Call\n     */\n    private function buildHeader(string $content): string\n    {\n        $header = \"POST /v1/messages/team_inbox/\" . $this->apiToken . \" HTTP/1.1\\r\\n\";\n        $header .= \"Host: api.flowdock.com\\r\\n\";\n        $header .= \"Content-Type: application/json\\r\\n\";\n        $header .= \"Content-Length: \" . \\strlen($content) . \"\\r\\n\";\n        $header .= \"\\r\\n\";\n\n        return $header;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\n\n/**\n * Interface to describe loggers that have a formatter\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\ninterface FormattableHandlerInterface\n{\n    /**\n     * Sets the formatter.\n     *\n     * @return HandlerInterface self\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface;\n\n    /**\n     * Gets the formatter.\n     */\n    public function getFormatter(): FormatterInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LineFormatter;\n\n/**\n * Helper trait for implementing FormattableInterface\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\ntrait FormattableHandlerTrait\n{\n    protected FormatterInterface|null $formatter = null;\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        $this->formatter = $formatter;\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        if (null === $this->formatter) {\n            $this->formatter = $this->getDefaultFormatter();\n        }\n\n        return $this->formatter;\n    }\n\n    /**\n     * Gets the default formatter.\n     *\n     * Overwrite this if the LineFormatter is not a good default for your handler.\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Gelf\\PublisherInterface;\nuse Monolog\\Level;\nuse Monolog\\Formatter\\GelfMessageFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Handler to send messages to a Graylog2 (http://www.graylog2.org) server\n *\n * @author Matt Lehner <mlehner@gmail.com>\n * @author Benjamin Zikarsky <benjamin@zikarsky.de>\n */\nclass GelfHandler extends AbstractProcessingHandler\n{\n    /**\n     * @var PublisherInterface the publisher object that sends the message to the server\n     */\n    protected PublisherInterface $publisher;\n\n    /**\n     * @param PublisherInterface $publisher a gelf publisher object\n     */\n    public function __construct(PublisherInterface $publisher, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n\n        $this->publisher = $publisher;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->publisher->publish($record->formatted);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new GelfMessageFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\ResettableInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Forwards records to multiple handlers\n *\n * @author Lenar Lõhmus <lenar@city.ee>\n */\nclass GroupHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface\n{\n    use ProcessableHandlerTrait;\n\n    /** @var HandlerInterface[] */\n    protected array $handlers;\n    protected bool $bubble;\n\n    /**\n     * @param HandlerInterface[] $handlers Array of Handlers.\n     * @param bool               $bubble   Whether the messages that are handled can bubble up the stack or not\n     *\n     * @throws \\InvalidArgumentException if an unsupported handler is set\n     */\n    public function __construct(array $handlers, bool $bubble = true)\n    {\n        foreach ($handlers as $handler) {\n            if (!$handler instanceof HandlerInterface) {\n                throw new \\InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.');\n            }\n        }\n\n        $this->handlers = $handlers;\n        $this->bubble = $bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        foreach ($this->handlers as $handler) {\n            if ($handler->isHandling($record)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n\n        foreach ($this->handlers as $handler) {\n            $handler->handle(clone $record);\n        }\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        if (\\count($this->processors) > 0) {\n            $processed = [];\n            foreach ($records as $record) {\n                $processed[] = $this->processRecord($record);\n            }\n            $records = $processed;\n        }\n\n        foreach ($this->handlers as $handler) {\n            $handler->handleBatch(array_map(fn ($record) => clone $record, $records));\n        }\n    }\n\n    public function reset(): void\n    {\n        $this->resetProcessors();\n\n        foreach ($this->handlers as $handler) {\n            if ($handler instanceof ResettableInterface) {\n                $handler->reset();\n            }\n        }\n    }\n\n    public function close(): void\n    {\n        parent::close();\n\n        foreach ($this->handlers as $handler) {\n            $handler->close();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        foreach ($this->handlers as $handler) {\n            if ($handler instanceof FormattableHandlerInterface) {\n                $handler->setFormatter($formatter);\n            }\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/Handler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\n/**\n * Base Handler class providing basic close() support as well as handleBatch\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nabstract class Handler implements HandlerInterface\n{\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        foreach ($records as $record) {\n            $this->handle($record);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n    }\n\n    public function __destruct()\n    {\n        try {\n            $this->close();\n        } catch (\\Throwable $e) {\n            // do nothing\n        }\n    }\n\n    public function __serialize(): array\n    {\n        $this->close();\n\n        return (array) $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\LogRecord;\n\n/**\n * Interface that all Monolog Handlers must implement\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\ninterface HandlerInterface\n{\n    /**\n     * Checks whether the given record will be handled by this handler.\n     *\n     * This is mostly done for performance reasons, to avoid calling processors for nothing.\n     *\n     * Handlers should still check the record levels within handle(), returning false in isHandling()\n     * is no guarantee that handle() will not be called, and isHandling() might not be called\n     * for a given record.\n     *\n     * @param LogRecord $record Partial log record having only a level initialized\n     */\n    public function isHandling(LogRecord $record): bool;\n\n    /**\n     * Handles a record.\n     *\n     * All records may be passed to this method, and the handler should discard\n     * those that it does not want to handle.\n     *\n     * The return value of this function controls the bubbling process of the handler stack.\n     * Unless the bubbling is interrupted (by returning true), the Logger class will keep on\n     * calling further handlers in the stack with a given log record.\n     *\n     * @param  LogRecord $record The record to handle\n     * @return bool      true means that this handler handled the record, and that bubbling is not permitted.\n     *                   false means the record was either not processed or that this handler allows bubbling.\n     */\n    public function handle(LogRecord $record): bool;\n\n    /**\n     * Handles a set of records at once.\n     *\n     * @param array<LogRecord> $records The records to handle\n     */\n    public function handleBatch(array $records): void;\n\n    /**\n     * Closes the handler.\n     *\n     * Ends a log cycle and frees all resources used by the handler.\n     *\n     * Closing a Handler means flushing all buffers and freeing any open resources/handles.\n     *\n     * Implementations have to be idempotent (i.e. it should be possible to call close several times without breakage)\n     * and ideally handlers should be able to reopen themselves on handle() after they have been closed.\n     *\n     * This is useful at the end of a request and will be called automatically when the object\n     * is destroyed if you extend Monolog\\Handler\\Handler.\n     *\n     * If you are thinking of calling this method yourself, most likely you should be\n     * calling ResettableInterface::reset instead. Have a look.\n     */\n    public function close(): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\ResettableInterface;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * This simple wrapper class can be used to extend handlers functionality.\n *\n * Example: A custom filtering that can be applied to any handler.\n *\n * Inherit from this class and override handle() like this:\n *\n *   public function handle(LogRecord $record)\n *   {\n *        if ($record meets certain conditions) {\n *            return false;\n *        }\n *        return $this->handler->handle($record);\n *   }\n *\n * @author Alexey Karapetov <alexey@karapetov.com>\n */\nclass HandlerWrapper implements HandlerInterface, ProcessableHandlerInterface, FormattableHandlerInterface, ResettableInterface\n{\n    protected HandlerInterface $handler;\n\n    public function __construct(HandlerInterface $handler)\n    {\n        $this->handler = $handler;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        return $this->handler->isHandling($record);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        return $this->handler->handle($record);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        $this->handler->handleBatch($records);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        $this->handler->close();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function pushProcessor(callable $callback): HandlerInterface\n    {\n        if ($this->handler instanceof ProcessableHandlerInterface) {\n            $this->handler->pushProcessor($callback);\n\n            return $this;\n        }\n\n        throw new \\LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function popProcessor(): callable\n    {\n        if ($this->handler instanceof ProcessableHandlerInterface) {\n            return $this->handler->popProcessor();\n        }\n\n        throw new \\LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        if ($this->handler instanceof FormattableHandlerInterface) {\n            $this->handler->setFormatter($formatter);\n\n            return $this;\n        }\n\n        throw new \\LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        if ($this->handler instanceof FormattableHandlerInterface) {\n            return $this->handler->getFormatter();\n        }\n\n        throw new \\LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class);\n    }\n\n    public function reset(): void\n    {\n        if ($this->handler instanceof ResettableInterface) {\n            $this->handler->reset();\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * IFTTTHandler uses cURL to trigger IFTTT Maker actions\n *\n * Register a secret key and trigger/event name at https://ifttt.com/maker\n *\n * value1 will be the channel from monolog's Logger constructor,\n * value2 will be the level name (ERROR, WARNING, ..)\n * value3 will be the log record's message\n *\n * @author Nehal Patel <nehal@nehalpatel.me>\n */\nclass IFTTTHandler extends AbstractProcessingHandler\n{\n    private string $eventName;\n    private string $secretKey;\n\n    /**\n     * @param string $eventName The name of the IFTTT Maker event that should be triggered\n     * @param string $secretKey A valid IFTTT secret key\n     *\n     * @throws MissingExtensionException If the curl extension is missing\n     */\n    public function __construct(string $eventName, string $secretKey, int|string|Level $level = Level::Error, bool $bubble = true)\n    {\n        if (!\\extension_loaded('curl')) {\n            throw new MissingExtensionException('The curl extension is needed to use the IFTTTHandler');\n        }\n\n        $this->eventName = $eventName;\n        $this->secretKey = $secretKey;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function write(LogRecord $record): void\n    {\n        $postData = [\n            \"value1\" => $record->channel,\n            \"value2\" => $record[\"level_name\"],\n            \"value3\" => $record->message,\n        ];\n        $postString = Utils::jsonEncode($postData);\n\n        $ch = curl_init();\n        curl_setopt($ch, CURLOPT_URL, \"https://maker.ifttt.com/trigger/\" . $this->eventName . \"/with/key/\" . $this->secretKey);\n        curl_setopt($ch, CURLOPT_POST, true);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n        curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);\n        curl_setopt($ch, CURLOPT_HTTPHEADER, [\n            \"Content-Type: application/json\",\n        ]);\n\n        Curl\\Util::execute($ch);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Inspired on LogEntriesHandler.\n *\n * @author Robert Kaufmann III <rok3@rok3.me>\n * @author Gabriel Machado <gabriel.ms1@hotmail.com>\n */\nclass InsightOpsHandler extends SocketHandler\n{\n    protected string $logToken;\n\n    /**\n     * @param string $token  Log token supplied by InsightOps\n     * @param string $region Region where InsightOps account is hosted. Could be 'us' or 'eu'.\n     * @param bool   $useSSL Whether or not SSL encryption should be used\n     *\n     * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing\n     */\n    public function __construct(\n        string $token,\n        string $region = 'us',\n        bool $useSSL = true,\n        $level = Level::Debug,\n        bool $bubble = true,\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        if ($useSSL && !\\extension_loaded('openssl')) {\n            throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for InsightOpsHandler');\n        }\n\n        $endpoint = $useSSL\n            ? 'ssl://' . $region . '.data.logs.insight.rapid7.com:443'\n            : $region . '.data.logs.insight.rapid7.com:80';\n\n        parent::__construct(\n            $endpoint,\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n        $this->logToken = $token;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function generateDataStream(LogRecord $record): string\n    {\n        return $this->logToken . ' ' . $record->formatted;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * @author Robert Kaufmann III <rok3@rok3.me>\n */\nclass LogEntriesHandler extends SocketHandler\n{\n    protected string $logToken;\n\n    /**\n     * @param string $token  Log token supplied by LogEntries\n     * @param bool   $useSSL Whether or not SSL encryption should be used.\n     * @param string $host   Custom hostname to send the data to if needed\n     *\n     * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing\n     */\n    public function __construct(\n        string $token,\n        bool $useSSL = true,\n        $level = Level::Debug,\n        bool $bubble = true,\n        string $host = 'data.logentries.com',\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        if ($useSSL && !\\extension_loaded('openssl')) {\n            throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler');\n        }\n\n        $endpoint = $useSSL ? 'ssl://' . $host . ':443' : $host . ':80';\n        parent::__construct(\n            $endpoint,\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n        $this->logToken = $token;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function generateDataStream(LogRecord $record): string\n    {\n        return $this->logToken . ' ' . $record->formatted;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LogglyFormatter;\nuse CurlHandle;\nuse Monolog\\LogRecord;\n\n/**\n * Sends errors to Loggly.\n *\n * @author Przemek Sobstel <przemek@sobstel.org>\n * @author Adam Pancutt <adam@pancutt.com>\n * @author Gregory Barchard <gregory@barchard.net>\n */\nclass LogglyHandler extends AbstractProcessingHandler\n{\n    protected const HOST = 'logs-01.loggly.com';\n    protected const ENDPOINT_SINGLE = 'inputs';\n    protected const ENDPOINT_BATCH = 'bulk';\n\n    /**\n     * Caches the curl handlers for every given endpoint.\n     *\n     * @var CurlHandle[]\n     */\n    protected array $curlHandlers = [];\n\n    protected string $token;\n\n    /** @var string[] */\n    protected array $tag = [];\n\n    /**\n     * @param string $token API token supplied by Loggly\n     *\n     * @throws MissingExtensionException If the curl extension is missing\n     */\n    public function __construct(string $token, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        if (!\\extension_loaded('curl')) {\n            throw new MissingExtensionException('The curl extension is needed to use the LogglyHandler');\n        }\n\n        $this->token = $token;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * Loads and returns the shared curl handler for the given endpoint.\n     */\n    protected function getCurlHandler(string $endpoint): CurlHandle\n    {\n        if (!\\array_key_exists($endpoint, $this->curlHandlers)) {\n            $this->curlHandlers[$endpoint] = $this->loadCurlHandle($endpoint);\n        }\n\n        return $this->curlHandlers[$endpoint];\n    }\n\n    /**\n     * Starts a fresh curl session for the given endpoint and returns its handler.\n     */\n    private function loadCurlHandle(string $endpoint): CurlHandle\n    {\n        $url = sprintf(\"https://%s/%s/%s/\", static::HOST, $endpoint, $this->token);\n\n        $ch = curl_init();\n\n        curl_setopt($ch, CURLOPT_URL, $url);\n        curl_setopt($ch, CURLOPT_POST, true);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n\n        return $ch;\n    }\n\n    /**\n     * @param  string[]|string $tag\n     * @return $this\n     */\n    public function setTag(string|array $tag): self\n    {\n        if ('' === $tag || [] === $tag) {\n            $this->tag = [];\n        } else {\n            $this->tag = \\is_array($tag) ? $tag : [$tag];\n        }\n\n        return $this;\n    }\n\n    /**\n     * @param  string[]|string $tag\n     * @return $this\n     */\n    public function addTag(string|array $tag): self\n    {\n        if ('' !== $tag) {\n            $tag = \\is_array($tag) ? $tag : [$tag];\n            $this->tag = array_unique(array_merge($this->tag, $tag));\n        }\n\n        return $this;\n    }\n\n    protected function write(LogRecord $record): void\n    {\n        $this->send($record->formatted, static::ENDPOINT_SINGLE);\n    }\n\n    public function handleBatch(array $records): void\n    {\n        $level = $this->level;\n\n        $records = array_filter($records, function ($record) use ($level) {\n            return ($record->level->value >= $level->value);\n        });\n\n        if (\\count($records) > 0) {\n            $this->send($this->getFormatter()->formatBatch($records), static::ENDPOINT_BATCH);\n        }\n    }\n\n    protected function send(string $data, string $endpoint): void\n    {\n        $ch = $this->getCurlHandler($endpoint);\n\n        $headers = ['Content-Type: application/json'];\n\n        if (\\count($this->tag) > 0) {\n            $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag);\n        }\n\n        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);\n        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);\n\n        Curl\\Util::execute($ch, 5);\n    }\n\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LogglyFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LogmaticFormatter;\nuse Monolog\\LogRecord;\n\n/**\n * @author Julien Breux <julien.breux@gmail.com>\n */\nclass LogmaticHandler extends SocketHandler\n{\n    private string $logToken;\n\n    private string $hostname;\n\n    private string $appName;\n\n    /**\n     * @param string $token    Log token supplied by Logmatic.\n     * @param string $hostname Host name supplied by Logmatic.\n     * @param string $appName  Application name supplied by Logmatic.\n     * @param bool   $useSSL   Whether or not SSL encryption should be used.\n     *\n     * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing\n     */\n    public function __construct(\n        string $token,\n        string $hostname = '',\n        string $appName = '',\n        bool $useSSL = true,\n        $level = Level::Debug,\n        bool $bubble = true,\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        if ($useSSL && !\\extension_loaded('openssl')) {\n            throw new MissingExtensionException('The OpenSSL PHP extension is required to use SSL encrypted connection for LogmaticHandler');\n        }\n\n        $endpoint = $useSSL ? 'ssl://api.logmatic.io:10515' : 'api.logmatic.io:10514';\n        $endpoint .= '/v1/';\n\n        parent::__construct(\n            $endpoint,\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n\n        $this->logToken = $token;\n        $this->hostname = $hostname;\n        $this->appName  = $appName;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function generateDataStream(LogRecord $record): string\n    {\n        return $this->logToken . ' ' . $record->formatted;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        $formatter = new LogmaticFormatter();\n\n        if ($this->hostname !== '') {\n            $formatter->setHostname($this->hostname);\n        }\n        if ($this->appName !== '') {\n            $formatter->setAppName($this->appName);\n        }\n\n        return $formatter;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\HtmlFormatter;\nuse Monolog\\LogRecord;\n\n/**\n * Base class for all mail handlers\n *\n * @author Gyula Sallai\n */\nabstract class MailHandler extends AbstractProcessingHandler\n{\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        $messages = [];\n\n        foreach ($records as $record) {\n            if ($record->level->isLowerThan($this->level)) {\n                continue;\n            }\n\n            $message = $this->processRecord($record);\n            $messages[] = $message;\n        }\n\n        if (\\count($messages) > 0) {\n            $this->send((string) $this->getFormatter()->formatBatch($messages), $messages);\n        }\n    }\n\n    /**\n     * Send a mail with the given content\n     *\n     * @param string $content formatted email body to be sent\n     * @param array  $records the array of log records that formed this content\n     *\n     * @phpstan-param non-empty-array<LogRecord> $records\n     */\n    abstract protected function send(string $content, array $records): void;\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->send((string) $record->formatted, [$record]);\n    }\n\n    /**\n     * @phpstan-param non-empty-array<LogRecord> $records\n     */\n    protected function getHighestRecord(array $records): LogRecord\n    {\n        $highestRecord = null;\n        foreach ($records as $record) {\n            if ($highestRecord === null || $record->level->isHigherThan($highestRecord->level)) {\n                $highestRecord = $record;\n            }\n        }\n\n        return $highestRecord;\n    }\n\n    protected function isHtmlBody(string $body): bool\n    {\n        return ($body[0] ?? null) === '<';\n    }\n\n    /**\n     * Gets the default formatter.\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new HtmlFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Swift;\nuse Swift_Message;\n\n/**\n * MandrillHandler uses cURL to send the emails to the Mandrill API\n *\n * @author Adam Nicholson <adamnicholson10@gmail.com>\n */\nclass MandrillHandler extends MailHandler\n{\n    protected Swift_Message $message;\n    protected string $apiKey;\n\n    /**\n     * @phpstan-param (Swift_Message|callable(): Swift_Message) $message\n     *\n     * @param string                 $apiKey  A valid Mandrill API key\n     * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced\n     *\n     * @throws \\InvalidArgumentException if not a Swift Message is set\n     */\n    public function __construct(string $apiKey, callable|Swift_Message $message, int|string|Level $level = Level::Error, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n\n        if (!$message instanceof Swift_Message) {\n            $message = $message();\n        }\n        if (!$message instanceof Swift_Message) {\n            throw new \\InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it');\n        }\n        $this->message = $message;\n        $this->apiKey = $apiKey;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function send(string $content, array $records): void\n    {\n        $mime = 'text/plain';\n        if ($this->isHtmlBody($content)) {\n            $mime = 'text/html';\n        }\n\n        $message = clone $this->message;\n        $message->setBody($content, $mime);\n        /** @phpstan-ignore-next-line */\n        if (version_compare(Swift::VERSION, '6.0.0', '>=')) {\n            $message->setDate(new \\DateTimeImmutable());\n        } else {\n            /** @phpstan-ignore-next-line */\n            $message->setDate(time());\n        }\n\n        $ch = curl_init();\n\n        curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json');\n        curl_setopt($ch, CURLOPT_POST, true);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([\n            'key' => $this->apiKey,\n            'raw_message' => (string) $message,\n            'async' => false,\n        ]));\n\n        Curl\\Util::execute($ch);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\n/**\n * Exception can be thrown if an extension for a handler is missing\n *\n * @author Christian Bergau <cbergau86@gmail.com>\n */\nclass MissingExtensionException extends \\Exception\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse MongoDB\\Client;\nuse MongoDB\\Collection;\nuse MongoDB\\Driver\\BulkWrite;\nuse MongoDB\\Driver\\Manager;\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\MongoDBFormatter;\nuse Monolog\\LogRecord;\n\n/**\n * Logs to a MongoDB database.\n *\n * Usage example:\n *\n *   $log = new \\Monolog\\Logger('application');\n *   $client = new \\MongoDB\\Client('mongodb://localhost:27017');\n *   $mongodb = new \\Monolog\\Handler\\MongoDBHandler($client, 'logs', 'prod');\n *   $log->pushHandler($mongodb);\n *\n * The above examples uses the MongoDB PHP library's client class; however, the\n * MongoDB\\Driver\\Manager class from ext-mongodb is also supported.\n */\nclass MongoDBHandler extends AbstractProcessingHandler\n{\n    private Collection $collection;\n\n    private Client|Manager $manager;\n\n    private string|null $namespace = null;\n\n    /**\n     * Constructor.\n     *\n     * @param Client|Manager $mongodb    MongoDB library or driver client\n     * @param string         $database   Database name\n     * @param string         $collection Collection name\n     */\n    public function __construct(Client|Manager $mongodb, string $database, string $collection, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        if ($mongodb instanceof Client) {\n            $this->collection = method_exists($mongodb, 'getCollection') ? $mongodb->getCollection($database, $collection) : $mongodb->selectCollection($database, $collection);\n        } else {\n            $this->manager = $mongodb;\n            $this->namespace = $database . '.' . $collection;\n        }\n\n        parent::__construct($level, $bubble);\n    }\n\n    protected function write(LogRecord $record): void\n    {\n        if (isset($this->collection)) {\n            $this->collection->insertOne($record->formatted);\n        }\n\n        if (isset($this->manager, $this->namespace)) {\n            $bulk = new BulkWrite;\n            $bulk->insert($record->formatted);\n            $this->manager->executeBulkWrite($this->namespace, $bulk);\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new MongoDBFormatter;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Formatter\\LineFormatter;\n\n/**\n * NativeMailerHandler uses the mail() function to send the emails\n *\n * @author Christophe Coevoet <stof@notk.org>\n * @author Mark Garrett <mark@moderndeveloperllc.com>\n */\nclass NativeMailerHandler extends MailHandler\n{\n    /**\n     * The email addresses to which the message will be sent\n     * @var string[]\n     */\n    protected array $to;\n\n    /**\n     * The subject of the email\n     */\n    protected string $subject;\n\n    /**\n     * Optional headers for the message\n     * @var string[]\n     */\n    protected array $headers = [];\n\n    /**\n     * Optional parameters for the message\n     * @var string[]\n     */\n    protected array $parameters = [];\n\n    /**\n     * The wordwrap length for the message\n     */\n    protected int $maxColumnWidth;\n\n    /**\n     * The Content-type for the message\n     */\n    protected string|null $contentType = null;\n\n    /**\n     * The encoding for the message\n     */\n    protected string $encoding = 'utf-8';\n\n    /**\n     * @param string|string[] $to             The receiver of the mail\n     * @param string          $subject        The subject of the mail\n     * @param string          $from           The sender of the mail\n     * @param int             $maxColumnWidth The maximum column width that the message lines will have\n     */\n    public function __construct(string|array $to, string $subject, string $from, int|string|Level $level = Level::Error, bool $bubble = true, int $maxColumnWidth = 70)\n    {\n        parent::__construct($level, $bubble);\n        $this->to = (array) $to;\n        $this->subject = $subject;\n        $this->addHeader(sprintf('From: %s', $from));\n        $this->maxColumnWidth = $maxColumnWidth;\n    }\n\n    /**\n     * Add headers to the message\n     *\n     * @param  string|string[] $headers Custom added headers\n     * @return $this\n     */\n    public function addHeader($headers): self\n    {\n        foreach ((array) $headers as $header) {\n            if (strpos($header, \"\\n\") !== false || strpos($header, \"\\r\") !== false) {\n                throw new \\InvalidArgumentException('Headers can not contain newline characters for security reasons');\n            }\n            $this->headers[] = $header;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add parameters to the message\n     *\n     * @param  string|string[] $parameters Custom added parameters\n     * @return $this\n     */\n    public function addParameter($parameters): self\n    {\n        $this->parameters = array_merge($this->parameters, (array) $parameters);\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function send(string $content, array $records): void\n    {\n        $contentType = $this->getContentType() ?? ($this->isHtmlBody($content) ? 'text/html' : 'text/plain');\n\n        if ($contentType !== 'text/html') {\n            $content = wordwrap($content, $this->maxColumnWidth);\n        }\n\n        $headers = ltrim(implode(\"\\r\\n\", $this->headers) . \"\\r\\n\", \"\\r\\n\");\n        $headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . \"\\r\\n\";\n        if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) {\n            $headers .= 'MIME-Version: 1.0' . \"\\r\\n\";\n        }\n\n        $subjectFormatter = new LineFormatter($this->subject);\n        $subject = $subjectFormatter->format($this->getHighestRecord($records));\n\n        $parameters = implode(' ', $this->parameters);\n        foreach ($this->to as $to) {\n            $this->mail($to, $subject, $content, $headers, $parameters);\n        }\n    }\n\n    public function getContentType(): ?string\n    {\n        return $this->contentType;\n    }\n\n    public function getEncoding(): string\n    {\n        return $this->encoding;\n    }\n\n    /**\n     * @param  string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML messages.\n     * @return $this\n     */\n    public function setContentType(string $contentType): self\n    {\n        if (strpos($contentType, \"\\n\") !== false || strpos($contentType, \"\\r\") !== false) {\n            throw new \\InvalidArgumentException('The content type can not contain newline characters to prevent email header injection');\n        }\n\n        $this->contentType = $contentType;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setEncoding(string $encoding): self\n    {\n        if (strpos($encoding, \"\\n\") !== false || strpos($encoding, \"\\r\") !== false) {\n            throw new \\InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection');\n        }\n\n        $this->encoding = $encoding;\n\n        return $this;\n    }\n\n\n    protected function mail(string $to, string $subject, string $content, string $headers, string $parameters): void\n    {\n        mail($to, $subject, $content, $headers, $parameters);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\Formatter\\NormalizerFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Class to record a log on a NewRelic application.\n * Enabling New Relic High Security mode may prevent capture of useful information.\n *\n * This handler requires a NormalizerFormatter to function and expects an array in $record->formatted\n *\n * @see https://docs.newrelic.com/docs/agents/php-agent\n * @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security\n */\nclass NewRelicHandler extends AbstractProcessingHandler\n{\n    /**\n     * @inheritDoc\n     */\n    public function __construct(\n        int|string|Level $level = Level::Error,\n        bool $bubble = true,\n\n        /**\n         * Name of the New Relic application that will receive logs from this handler.\n         */\n        protected string|null $appName = null,\n\n        /**\n         * Some context and extra data is passed into the handler as arrays of values. Do we send them as is\n         * (useful if we are using the API), or explode them for display on the NewRelic RPM website?\n         */\n        protected bool $explodeArrays = false,\n\n        /**\n         * Name of the current transaction\n         */\n        protected string|null $transactionName = null\n    ) {\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        if (!$this->isNewRelicEnabled()) {\n            throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler');\n        }\n\n        if (null !== ($appName = $this->getAppName($record->context))) {\n            $this->setNewRelicAppName($appName);\n        }\n\n        if (null !== ($transactionName = $this->getTransactionName($record->context))) {\n            $this->setNewRelicTransactionName($transactionName);\n            unset($record->formatted['context']['transaction_name']);\n        }\n\n        if (isset($record->context['exception']) && $record->context['exception'] instanceof \\Throwable) {\n            newrelic_notice_error($record->message, $record->context['exception']);\n            unset($record->formatted['context']['exception']);\n        } else {\n            newrelic_notice_error($record->message);\n        }\n\n        if (isset($record->formatted['context']) && \\is_array($record->formatted['context'])) {\n            foreach ($record->formatted['context'] as $key => $parameter) {\n                if (\\is_array($parameter) && $this->explodeArrays) {\n                    foreach ($parameter as $paramKey => $paramValue) {\n                        $this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue);\n                    }\n                } else {\n                    $this->setNewRelicParameter('context_' . $key, $parameter);\n                }\n            }\n        }\n\n        if (isset($record->formatted['extra']) && \\is_array($record->formatted['extra'])) {\n            foreach ($record->formatted['extra'] as $key => $parameter) {\n                if (\\is_array($parameter) && $this->explodeArrays) {\n                    foreach ($parameter as $paramKey => $paramValue) {\n                        $this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue);\n                    }\n                } else {\n                    $this->setNewRelicParameter('extra_' . $key, $parameter);\n                }\n            }\n        }\n    }\n\n    /**\n     * Checks whether the NewRelic extension is enabled in the system.\n     */\n    protected function isNewRelicEnabled(): bool\n    {\n        return \\extension_loaded('newrelic');\n    }\n\n    /**\n     * Returns the appname where this log should be sent. Each log can override the default appname, set in this\n     * handler's constructor, by providing the appname in it's context.\n     *\n     * @param mixed[] $context\n     */\n    protected function getAppName(array $context): ?string\n    {\n        if (isset($context['appname'])) {\n            return $context['appname'];\n        }\n\n        return $this->appName;\n    }\n\n    /**\n     * Returns the name of the current transaction. Each log can override the default transaction name, set in this\n     * handler's constructor, by providing the transaction_name in it's context\n     *\n     * @param mixed[] $context\n     */\n    protected function getTransactionName(array $context): ?string\n    {\n        if (isset($context['transaction_name'])) {\n            return $context['transaction_name'];\n        }\n\n        return $this->transactionName;\n    }\n\n    /**\n     * Sets the NewRelic application that should receive this log.\n     */\n    protected function setNewRelicAppName(string $appName): void\n    {\n        newrelic_set_appname($appName);\n    }\n\n    /**\n     * Overwrites the name of the current transaction\n     */\n    protected function setNewRelicTransactionName(string $transactionName): void\n    {\n        newrelic_name_transaction($transactionName);\n    }\n\n    /**\n     * @param mixed $value\n     */\n    protected function setNewRelicParameter(string $key, $value): void\n    {\n        if (null === $value || \\is_scalar($value)) {\n            newrelic_add_custom_parameter($key, $value);\n        } else {\n            newrelic_add_custom_parameter($key, Utils::jsonEncode($value, null, true));\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new NormalizerFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\LogRecord;\n\n/**\n * No-op\n *\n * This handler handles anything, but does nothing, and does not stop bubbling to the rest of the stack.\n * This can be used for testing, or to disable a handler when overriding a configuration without\n * influencing the rest of the stack.\n *\n * @author Roel Harbers <roelharbers@gmail.com>\n */\nclass NoopHandler extends Handler\n{\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        return true;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\Logger;\nuse Monolog\\LogRecord;\n\n/**\n * Blackhole\n *\n * Any record it can handle will be thrown away. This can be used\n * to put on top of an existing stack to override it temporarily.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass NullHandler extends Handler\n{\n    private Level $level;\n\n    /**\n     * @param string|int|Level $level The minimum logging level at which this handler will be triggered\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function __construct(string|int|Level $level = Level::Debug)\n    {\n        $this->level = Logger::toMonologLevel($level);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function isHandling(LogRecord $record): bool\n    {\n        return $record->level->value >= $this->level->value;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        return $record->level->value >= $this->level->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Handler to only pass log messages when a certain threshold of number of messages is reached.\n *\n * This can be useful in cases of processing a batch of data, but you're for example only interested\n * in case it fails catastrophically instead of a warning for 1 or 2 events. Worse things can happen, right?\n *\n * Usage example:\n *\n * ```\n *   $log = new Logger('application');\n *   $handler = new SomeHandler(...)\n *\n *   // Pass all warnings to the handler when more than 10 & all error messages when more then 5\n *   $overflow = new OverflowHandler($handler, [Level::Warning->value => 10, Level::Error->value => 5]);\n *\n *   $log->pushHandler($overflow);\n *```\n *\n * @author Kris Buist <krisbuist@gmail.com>\n */\nclass OverflowHandler extends AbstractHandler implements FormattableHandlerInterface\n{\n    private HandlerInterface $handler;\n\n    /** @var array<int, int> */\n    private array $thresholdMap = [];\n\n    /**\n     * Buffer of all messages passed to the handler before the threshold was reached\n     *\n     * @var mixed[][]\n     */\n    private array $buffer = [];\n\n    /**\n     * @param array<int, int> $thresholdMap Dictionary of log level value => threshold\n     */\n    public function __construct(\n        HandlerInterface $handler,\n        array $thresholdMap = [],\n        $level = Level::Debug,\n        bool $bubble = true\n    ) {\n        $this->handler = $handler;\n        foreach ($thresholdMap as $thresholdLevel => $threshold) {\n            $this->thresholdMap[$thresholdLevel] = $threshold;\n        }\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * Handles a record.\n     *\n     * All records may be passed to this method, and the handler should discard\n     * those that it does not want to handle.\n     *\n     * The return value of this function controls the bubbling process of the handler stack.\n     * Unless the bubbling is interrupted (by returning true), the Logger class will keep on\n     * calling further handlers in the stack with a given log record.\n     *\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if ($record->level->isLowerThan($this->level)) {\n            return false;\n        }\n\n        $level = $record->level->value;\n\n        if (!isset($this->thresholdMap[$level])) {\n            $this->thresholdMap[$level] = 0;\n        }\n\n        if ($this->thresholdMap[$level] > 0) {\n            // The overflow threshold is not yet reached, so we're buffering the record and lowering the threshold by 1\n            $this->thresholdMap[$level]--;\n            $this->buffer[$level][] = $record;\n\n            return false === $this->bubble;\n        }\n\n        if ($this->thresholdMap[$level] === 0) {\n            // This current message is breaking the threshold. Flush the buffer and continue handling the current record\n            foreach ($this->buffer[$level] ?? [] as $buffered) {\n                $this->handler->handle($buffered);\n            }\n            $this->thresholdMap[$level]--;\n            unset($this->buffer[$level]);\n        }\n\n        $this->handler->handle($record);\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        if ($this->handler instanceof FormattableHandlerInterface) {\n            $this->handler->setFormatter($formatter);\n\n            return $this;\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($this->handler).' does not support formatters.');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        if ($this->handler instanceof FormattableHandlerInterface) {\n            return $this->handler->getFormatter();\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($this->handler).' does not support formatters.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse PhpConsole\\Connector;\nuse PhpConsole\\Handler as VendorPhpConsoleHandler;\nuse PhpConsole\\Helper;\nuse Monolog\\LogRecord;\nuse PhpConsole\\Storage;\n\n/**\n * Monolog handler for Google Chrome extension \"PHP Console\"\n *\n * Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely\n *\n * Usage:\n * 1. Install Google Chrome extension [now dead and removed from the chrome store]\n * 2. See overview https://github.com/barbushin/php-console#overview\n * 3. Install PHP Console library https://github.com/barbushin/php-console#installation\n * 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png)\n *\n *      $logger = new \\Monolog\\Logger('all', array(new \\Monolog\\Handler\\PHPConsoleHandler()));\n *      \\Monolog\\ErrorHandler::register($logger);\n *      echo $undefinedVar;\n *      $logger->debug('SELECT * FROM users', array('db', 'time' => 0.012));\n *      PC::debug($_SERVER); // PHP Console debugger for any type of vars\n *\n * @author Sergey Barbushin https://www.linkedin.com/in/barbushin\n * @phpstan-type Options array{\n *     enabled: bool,\n *     classesPartialsTraceIgnore: string[],\n *     debugTagsKeysInContext: array<int|string>,\n *     useOwnErrorsHandler: bool,\n *     useOwnExceptionsHandler: bool,\n *     sourcesBasePath: string|null,\n *     registerHelper: bool,\n *     serverEncoding: string|null,\n *     headersLimit: int|null,\n *     password: string|null,\n *     enableSslOnlyMode: bool,\n *     ipMasks: string[],\n *     enableEvalListener: bool,\n *     dumperDetectCallbacks: bool,\n *     dumperLevelLimit: int,\n *     dumperItemsCountLimit: int,\n *     dumperItemSizeLimit: int,\n *     dumperDumpSizeLimit: int,\n *     detectDumpTraceAndSource: bool,\n *     dataStorage: Storage|null\n * }\n * @phpstan-type InputOptions array{\n *     enabled?: bool,\n *     classesPartialsTraceIgnore?: string[],\n *     debugTagsKeysInContext?: array<int|string>,\n *     useOwnErrorsHandler?: bool,\n *     useOwnExceptionsHandler?: bool,\n *     sourcesBasePath?: string|null,\n *     registerHelper?: bool,\n *     serverEncoding?: string|null,\n *     headersLimit?: int|null,\n *     password?: string|null,\n *     enableSslOnlyMode?: bool,\n *     ipMasks?: string[],\n *     enableEvalListener?: bool,\n *     dumperDetectCallbacks?: bool,\n *     dumperLevelLimit?: int,\n *     dumperItemsCountLimit?: int,\n *     dumperItemSizeLimit?: int,\n *     dumperDumpSizeLimit?: int,\n *     detectDumpTraceAndSource?: bool,\n *     dataStorage?: Storage|null\n * }\n *\n * @deprecated Since 2.8.0 and 3.2.0, PHPConsole is abandoned and thus we will drop this handler in Monolog 4\n */\nclass PHPConsoleHandler extends AbstractProcessingHandler\n{\n    /**\n     * @phpstan-var Options\n     */\n    private array $options = [\n        'enabled' => true, // bool Is PHP Console server enabled\n        'classesPartialsTraceIgnore' => ['Monolog\\\\'], // array Hide calls of classes started with...\n        'debugTagsKeysInContext' => [0, 'tag'], // bool Is PHP Console server enabled\n        'useOwnErrorsHandler' => false, // bool Enable errors handling\n        'useOwnExceptionsHandler' => false, // bool Enable exceptions handling\n        'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths\n        'registerHelper' => true, // bool Register PhpConsole\\Helper that allows short debug calls like PC::debug($var, 'ta.g.s')\n        'serverEncoding' => null, // string|null Server internal encoding\n        'headersLimit' => null, // int|null Set headers size limit for your web-server\n        'password' => null, // string|null Protect PHP Console connection by password\n        'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed\n        'ipMasks' => [], // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1')\n        'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required)\n        'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings\n        'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level\n        'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number\n        'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item\n        'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON\n        'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug\n        'dataStorage' => null, // \\PhpConsole\\Storage|null Fixes problem with custom $_SESSION handler (see https://github.com/barbushin/php-console#troubleshooting-with-_session-handler-overridden-in-some-frameworks)\n    ];\n\n    private Connector $connector;\n\n    /**\n     * @param  array<string, mixed> $options   See \\Monolog\\Handler\\PHPConsoleHandler::$options for more details\n     * @param  Connector|null       $connector Instance of \\PhpConsole\\Connector class (optional)\n     * @throws \\RuntimeException\n     * @phpstan-param InputOptions $options\n     */\n    public function __construct(array $options = [], ?Connector $connector = null, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        if (!class_exists('PhpConsole\\Connector')) {\n            throw new \\RuntimeException('PHP Console library not found. See https://github.com/barbushin/php-console#installation');\n        }\n        parent::__construct($level, $bubble);\n        $this->options = $this->initOptions($options);\n        $this->connector = $this->initConnector($connector);\n    }\n\n    /**\n     * @param  array<string, mixed> $options\n     * @return array<string, mixed>\n     *\n     * @phpstan-param InputOptions $options\n     * @phpstan-return Options\n     */\n    private function initOptions(array $options): array\n    {\n        $wrongOptions = array_diff(array_keys($options), array_keys($this->options));\n        if (\\count($wrongOptions) > 0) {\n            throw new \\RuntimeException('Unknown options: ' . implode(', ', $wrongOptions));\n        }\n\n        return array_replace($this->options, $options);\n    }\n\n    private function initConnector(?Connector $connector = null): Connector\n    {\n        if (null === $connector) {\n            if ($this->options['dataStorage'] instanceof Storage) {\n                Connector::setPostponeStorage($this->options['dataStorage']);\n            }\n            $connector = Connector::getInstance();\n        }\n\n        if ($this->options['registerHelper'] && !Helper::isRegistered()) {\n            Helper::register();\n        }\n\n        if ($this->options['enabled'] && $connector->isActiveClient()) {\n            if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) {\n                $handler = VendorPhpConsoleHandler::getInstance();\n                $handler->setHandleErrors($this->options['useOwnErrorsHandler']);\n                $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']);\n                $handler->start();\n            }\n            if (null !== $this->options['sourcesBasePath']) {\n                $connector->setSourcesBasePath($this->options['sourcesBasePath']);\n            }\n            if (null !== $this->options['serverEncoding']) {\n                $connector->setServerEncoding($this->options['serverEncoding']);\n            }\n            if (null !== $this->options['password']) {\n                $connector->setPassword($this->options['password']);\n            }\n            if ($this->options['enableSslOnlyMode']) {\n                $connector->enableSslOnlyMode();\n            }\n            if (\\count($this->options['ipMasks']) > 0) {\n                $connector->setAllowedIpMasks($this->options['ipMasks']);\n            }\n            if (null !== $this->options['headersLimit'] && $this->options['headersLimit'] > 0) {\n                $connector->setHeadersLimit($this->options['headersLimit']);\n            }\n            if ($this->options['detectDumpTraceAndSource']) {\n                $connector->getDebugDispatcher()->detectTraceAndSource = true;\n            }\n            $dumper = $connector->getDumper();\n            $dumper->levelLimit = $this->options['dumperLevelLimit'];\n            $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit'];\n            $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit'];\n            $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit'];\n            $dumper->detectCallbacks = $this->options['dumperDetectCallbacks'];\n            if ($this->options['enableEvalListener']) {\n                $connector->startEvalRequestsListener();\n            }\n        }\n\n        return $connector;\n    }\n\n    public function getConnector(): Connector\n    {\n        return $this->connector;\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function getOptions(): array\n    {\n        return $this->options;\n    }\n\n    public function handle(LogRecord $record): bool\n    {\n        if ($this->options['enabled'] && $this->connector->isActiveClient()) {\n            return parent::handle($record);\n        }\n\n        return !$this->bubble;\n    }\n\n    /**\n     * Writes the record down to the log of the implementing handler\n     */\n    protected function write(LogRecord $record): void\n    {\n        if ($record->level->isLowerThan(Level::Notice)) {\n            $this->handleDebugRecord($record);\n        } elseif (isset($record->context['exception']) && $record->context['exception'] instanceof \\Throwable) {\n            $this->handleExceptionRecord($record);\n        } else {\n            $this->handleErrorRecord($record);\n        }\n    }\n\n    private function handleDebugRecord(LogRecord $record): void\n    {\n        [$tags, $filteredContext] = $this->getRecordTags($record);\n        $message = $record->message;\n        if (\\count($filteredContext) > 0) {\n            $message .= ' ' . Utils::jsonEncode($this->connector->getDumper()->dump(array_filter($filteredContext)), null, true);\n        }\n        $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']);\n    }\n\n    private function handleExceptionRecord(LogRecord $record): void\n    {\n        $this->connector->getErrorsDispatcher()->dispatchException($record->context['exception']);\n    }\n\n    private function handleErrorRecord(LogRecord $record): void\n    {\n        $context = $record->context;\n\n        $this->connector->getErrorsDispatcher()->dispatchError(\n            $context['code'] ?? null,\n            $context['message'] ?? $record->message,\n            $context['file'] ?? null,\n            $context['line'] ?? null,\n            $this->options['classesPartialsTraceIgnore']\n        );\n    }\n\n    /**\n     * @return array{string, mixed[]}\n     */\n    private function getRecordTags(LogRecord $record): array\n    {\n        $tags = null;\n        $filteredContext = [];\n        if ($record->context !== []) {\n            $filteredContext = $record->context;\n            foreach ($this->options['debugTagsKeysInContext'] as $key) {\n                if (isset($filteredContext[$key])) {\n                    $tags = $filteredContext[$key];\n                    if ($key === 0) {\n                        array_shift($filteredContext);\n                    } else {\n                        unset($filteredContext[$key]);\n                    }\n                    break;\n                }\n            }\n        }\n\n        return [$tags ?? $record->level->toPsrLogLevel(), $filteredContext];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter('%message%');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Stores to STDIN of any process, specified by a command.\n *\n * Usage example:\n * <pre>\n * $log = new Logger('myLogger');\n * $log->pushHandler(new ProcessHandler('/usr/bin/php /var/www/monolog/someScript.php'));\n * </pre>\n *\n * @author Kolja Zuelsdorf <koljaz@web.de>\n */\nclass ProcessHandler extends AbstractProcessingHandler\n{\n    /**\n     * Holds the process to receive data on its STDIN.\n     *\n     * @var resource|bool|null\n     */\n    private $process;\n\n    private string $command;\n\n    private ?string $cwd;\n\n    /**\n     * @var resource[]\n     */\n    private array $pipes = [];\n\n    private float $timeout;\n\n    /**\n     * @var array<int, list<string>>\n     */\n    protected const DESCRIPTOR_SPEC = [\n        0 => ['pipe', 'r'],  // STDIN is a pipe that the child will read from\n        1 => ['pipe', 'w'],  // STDOUT is a pipe that the child will write to\n        2 => ['pipe', 'w'],  // STDERR is a pipe to catch the any errors\n    ];\n\n    /**\n     * @param  string                    $command Command for the process to start. Absolute paths are recommended,\n     *                                            especially if you do not use the $cwd parameter.\n     * @param  string|null               $cwd     \"Current working directory\" (CWD) for the process to be executed in.\n     * @param  float                     $timeout The maximum timeout (in seconds) for the stream_select() function.\n     * @throws \\InvalidArgumentException\n     */\n    public function __construct(string $command, int|string|Level $level = Level::Debug, bool $bubble = true, ?string $cwd = null, float $timeout = 1.0)\n    {\n        if ($command === '') {\n            throw new \\InvalidArgumentException('The command argument must be a non-empty string.');\n        }\n        if ($cwd === '') {\n            throw new \\InvalidArgumentException('The optional CWD argument must be a non-empty string or null.');\n        }\n\n        parent::__construct($level, $bubble);\n\n        $this->command = $command;\n        $this->cwd = $cwd;\n        $this->timeout = $timeout;\n    }\n\n    /**\n     * Writes the record down to the log of the implementing handler\n     *\n     * @throws \\UnexpectedValueException\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->ensureProcessIsStarted();\n\n        $this->writeProcessInput($record->formatted);\n\n        $errors = $this->readProcessErrors();\n        if ($errors !== '') {\n            throw new \\UnexpectedValueException(sprintf('Errors while writing to process: %s', $errors));\n        }\n    }\n\n    /**\n     * Makes sure that the process is actually started, and if not, starts it,\n     * assigns the stream pipes, and handles startup errors, if any.\n     */\n    private function ensureProcessIsStarted(): void\n    {\n        if (\\is_resource($this->process) === false) {\n            $this->startProcess();\n\n            $this->handleStartupErrors();\n        }\n    }\n\n    /**\n     * Starts the actual process and sets all streams to non-blocking.\n     */\n    private function startProcess(): void\n    {\n        $this->process = proc_open($this->command, static::DESCRIPTOR_SPEC, $this->pipes, $this->cwd);\n\n        foreach ($this->pipes as $pipe) {\n            stream_set_blocking($pipe, false);\n        }\n    }\n\n    /**\n     * Selects the STDERR stream, handles upcoming startup errors, and throws an exception, if any.\n     *\n     * @throws \\UnexpectedValueException\n     */\n    private function handleStartupErrors(): void\n    {\n        $selected = $this->selectErrorStream();\n        if (false === $selected) {\n            throw new \\UnexpectedValueException('Something went wrong while selecting a stream.');\n        }\n\n        $errors = $this->readProcessErrors();\n\n        if (\\is_resource($this->process) === false || $errors !== '') {\n            throw new \\UnexpectedValueException(\n                sprintf('The process \"%s\" could not be opened: ' . $errors, $this->command)\n            );\n        }\n    }\n\n    /**\n     * Selects the STDERR stream.\n     *\n     * @return int|bool\n     */\n    protected function selectErrorStream()\n    {\n        $empty = [];\n        $errorPipes = [$this->pipes[2]];\n\n        $seconds = (int) $this->timeout;\n        return stream_select($errorPipes, $empty, $empty, $seconds, (int) (($this->timeout - $seconds) * 1000000));\n    }\n\n    /**\n     * Reads the errors of the process, if there are any.\n     *\n     * @codeCoverageIgnore\n     * @return string Empty string if there are no errors.\n     */\n    protected function readProcessErrors(): string\n    {\n        return (string) stream_get_contents($this->pipes[2]);\n    }\n\n    /**\n     * Writes to the input stream of the opened process.\n     *\n     * @codeCoverageIgnore\n     */\n    protected function writeProcessInput(string $string): void\n    {\n        fwrite($this->pipes[0], $string);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        if (\\is_resource($this->process)) {\n            foreach ($this->pipes as $pipe) {\n                fclose($pipe);\n            }\n            proc_close($this->process);\n            $this->process = null;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Processor\\ProcessorInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Interface to describe loggers that have processors\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\ninterface ProcessableHandlerInterface\n{\n    /**\n     * Adds a processor in the stack.\n     *\n     * @phpstan-param ProcessorInterface|(callable(LogRecord): LogRecord) $callback\n     *\n     * @param  ProcessorInterface|callable $callback\n     * @return HandlerInterface            self\n     */\n    public function pushProcessor(callable $callback): HandlerInterface;\n\n    /**\n     * Removes the processor on top of the stack and returns it.\n     *\n     * @phpstan-return ProcessorInterface|(callable(LogRecord): LogRecord) $callback\n     *\n     * @throws \\LogicException             In case the processor stack is empty\n     * @return callable|ProcessorInterface\n     */\n    public function popProcessor(): callable;\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\ResettableInterface;\nuse Monolog\\Processor\\ProcessorInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Helper trait for implementing ProcessableInterface\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\ntrait ProcessableHandlerTrait\n{\n    /**\n     * @var callable[]\n     * @phpstan-var array<(callable(LogRecord): LogRecord)|ProcessorInterface>\n     */\n    protected array $processors = [];\n\n    /**\n     * @inheritDoc\n     */\n    public function pushProcessor(callable $callback): HandlerInterface\n    {\n        array_unshift($this->processors, $callback);\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function popProcessor(): callable\n    {\n        if (\\count($this->processors) === 0) {\n            throw new \\LogicException('You tried to pop from an empty processor stack.');\n        }\n\n        return array_shift($this->processors);\n    }\n\n    protected function processRecord(LogRecord $record): LogRecord\n    {\n        foreach ($this->processors as $processor) {\n            $record = $processor($record);\n        }\n\n        return $record;\n    }\n\n    protected function resetProcessors(): void\n    {\n        foreach ($this->processors as $processor) {\n            if ($processor instanceof ResettableInterface) {\n                $processor->reset();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Psr\\Log\\LoggerInterface;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Proxies log messages to an existing PSR-3 compliant logger.\n *\n * If a formatter is configured, the formatter's output MUST be a string and the\n * formatted message will be fed to the wrapped PSR logger instead of the original\n * log record's message.\n *\n * @author Michael Moussa <michael.moussa@gmail.com>\n */\nclass PsrHandler extends AbstractHandler implements FormattableHandlerInterface\n{\n    /**\n     * PSR-3 compliant logger\n     */\n    protected LoggerInterface $logger;\n\n    protected FormatterInterface|null $formatter = null;\n    private bool $includeExtra;\n\n    /**\n     * @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied\n     */\n    public function __construct(LoggerInterface $logger, int|string|Level $level = Level::Debug, bool $bubble = true, bool $includeExtra = false)\n    {\n        parent::__construct($level, $bubble);\n\n        $this->logger = $logger;\n        $this->includeExtra = $includeExtra;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (!$this->isHandling($record)) {\n            return false;\n        }\n\n        $message = $this->formatter !== null\n            ? (string) $this->formatter->format($record)\n            : $record->message;\n\n        $context = $this->includeExtra\n            ? [...$record->extra, ...$record->context]\n            : $record->context;\n\n        $this->logger->log($record->level->toPsrLogLevel(), $message, $context);\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * Sets the formatter.\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        $this->formatter = $formatter;\n\n        return $this;\n    }\n\n    /**\n     * Gets the formatter.\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        if ($this->formatter === null) {\n            throw new \\LogicException('No formatter has been set and this handler does not have a default formatter');\n        }\n\n        return $this->formatter;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Monolog\\Utils;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Sends notifications through the pushover api to mobile phones\n *\n * @author Sebastian Göttschkes <sebastian.goettschkes@googlemail.com>\n * @see    https://www.pushover.net/api\n */\nclass PushoverHandler extends SocketHandler\n{\n    private string $token;\n\n    /** @var array<int|string> */\n    private array $users;\n\n    private string $title;\n\n    private string|int|null $user = null;\n\n    private int $retry;\n\n    private int $expire;\n\n    private Level $highPriorityLevel;\n\n    private Level $emergencyLevel;\n\n    private bool $useFormattedMessage = false;\n\n    /**\n     * All parameters that can be sent to Pushover\n     * @see https://pushover.net/api\n     * @var array<string, bool>\n     */\n    private array $parameterNames = [\n        'token' => true,\n        'user' => true,\n        'message' => true,\n        'device' => true,\n        'title' => true,\n        'url' => true,\n        'url_title' => true,\n        'priority' => true,\n        'timestamp' => true,\n        'sound' => true,\n        'retry' => true,\n        'expire' => true,\n        'callback' => true,\n    ];\n\n    /**\n     * Sounds the api supports by default\n     * @see https://pushover.net/api#sounds\n     * @var string[]\n     */\n    private array $sounds = [\n        'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming',\n        'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb',\n        'persistent', 'echo', 'updown', 'none',\n    ];\n\n    /**\n     * @param string       $token  Pushover api token\n     * @param string|array $users  Pushover user id or array of ids the message will be sent to\n     * @param string|null  $title  Title sent to the Pushover API\n     * @param bool         $useSSL Whether to connect via SSL. Required when pushing messages to users that are not\n     *                             the pushover.net app owner. OpenSSL is required for this option.\n     * @param int          $retry  The retry parameter specifies how often (in seconds) the Pushover servers will\n     *                             send the same notification to the user.\n     * @param int          $expire The expire parameter specifies how many seconds your notification will continue\n     *                             to be retried for (every retry seconds).\n     *\n     * @param int|string|Level|LogLevel::* $highPriorityLevel The minimum logging level at which this handler will start\n     *                                                        sending \"high priority\" requests to the Pushover API\n     * @param int|string|Level|LogLevel::* $emergencyLevel    The minimum logging level at which this handler will start\n     *                                                        sending \"emergency\" requests to the Pushover API\n     *\n     *\n     * @phpstan-param string|array<int|string>    $users\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $highPriorityLevel\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $emergencyLevel\n     */\n    public function __construct(\n        string $token,\n        $users,\n        ?string $title = null,\n        int|string|Level $level = Level::Critical,\n        bool $bubble = true,\n        bool $useSSL = true,\n        int|string|Level $highPriorityLevel = Level::Critical,\n        int|string|Level $emergencyLevel = Level::Emergency,\n        int $retry = 30,\n        int $expire = 25200,\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80';\n        parent::__construct(\n            $connectionString,\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n\n        $this->token = $token;\n        $this->users = (array) $users;\n        $this->title = $title ?? (string) gethostname();\n        $this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel);\n        $this->emergencyLevel = Logger::toMonologLevel($emergencyLevel);\n        $this->retry = $retry;\n        $this->expire = $expire;\n    }\n\n    protected function generateDataStream(LogRecord $record): string\n    {\n        $content = $this->buildContent($record);\n\n        return $this->buildHeader($content) . $content;\n    }\n\n    private function buildContent(LogRecord $record): string\n    {\n        // Pushover has a limit of 512 characters on title and message combined.\n        $maxMessageLength = 512 - \\strlen($this->title);\n\n        $message = ($this->useFormattedMessage) ? $record->formatted : $record->message;\n        $message = Utils::substr($message, 0, $maxMessageLength);\n\n        $timestamp = $record->datetime->getTimestamp();\n\n        $dataArray = [\n            'token' => $this->token,\n            'user' => $this->user,\n            'message' => $message,\n            'title' => $this->title,\n            'timestamp' => $timestamp,\n        ];\n\n        if ($record->level->value >= $this->emergencyLevel->value) {\n            $dataArray['priority'] = 2;\n            $dataArray['retry'] = $this->retry;\n            $dataArray['expire'] = $this->expire;\n        } elseif ($record->level->value >= $this->highPriorityLevel->value) {\n            $dataArray['priority'] = 1;\n        }\n\n        // First determine the available parameters\n        $context = array_intersect_key($record->context, $this->parameterNames);\n        $extra = array_intersect_key($record->extra, $this->parameterNames);\n\n        // Least important info should be merged with subsequent info\n        $dataArray = array_merge($extra, $context, $dataArray);\n\n        // Only pass sounds that are supported by the API\n        if (isset($dataArray['sound']) && !\\in_array($dataArray['sound'], $this->sounds, true)) {\n            unset($dataArray['sound']);\n        }\n\n        return http_build_query($dataArray);\n    }\n\n    private function buildHeader(string $content): string\n    {\n        $header = \"POST /1/messages.json HTTP/1.1\\r\\n\";\n        $header .= \"Host: api.pushover.net\\r\\n\";\n        $header .= \"Content-Type: application/x-www-form-urlencoded\\r\\n\";\n        $header .= \"Content-Length: \" . \\strlen($content) . \"\\r\\n\";\n        $header .= \"\\r\\n\";\n\n        return $header;\n    }\n\n    protected function write(LogRecord $record): void\n    {\n        foreach ($this->users as $user) {\n            $this->user = $user;\n\n            parent::write($record);\n            $this->closeSocket();\n        }\n\n        $this->user = null;\n    }\n\n    /**\n     * @param  int|string|Level|LogLevel::* $level\n     * @return $this\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function setHighPriorityLevel(int|string|Level $level): self\n    {\n        $this->highPriorityLevel = Logger::toMonologLevel($level);\n\n        return $this;\n    }\n\n    /**\n     * @param  int|string|Level|LogLevel::* $level\n     * @return $this\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function setEmergencyLevel(int|string|Level $level): self\n    {\n        $this->emergencyLevel = Logger::toMonologLevel($level);\n\n        return $this;\n    }\n\n    /**\n     * Use the formatted message?\n     *\n     * @return $this\n     */\n    public function useFormattedMessage(bool $useFormattedMessage): self\n    {\n        $this->useFormattedMessage = $useFormattedMessage;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\nuse Predis\\Client as Predis;\nuse Redis;\n\n/**\n * Logs to a Redis key using rpush\n *\n * usage example:\n *\n *   $log = new Logger('application');\n *   $redis = new RedisHandler(new Predis\\Client(\"tcp://localhost:6379\"), \"logs\");\n *   $log->pushHandler($redis);\n *\n * @author Thomas Tourlourat <thomas@tourlourat.com>\n */\nclass RedisHandler extends AbstractProcessingHandler\n{\n    /** @var Predis<Predis>|Redis */\n    private Predis|Redis $redisClient;\n    private string $redisKey;\n    protected int $capSize;\n\n    /**\n     * @param Predis<Predis>|Redis $redis   The redis instance\n     * @param string               $key     The key name to push records to\n     * @param int                  $capSize Number of entries to limit list size to, 0 = unlimited\n     */\n    public function __construct(Predis|Redis $redis, string $key, int|string|Level $level = Level::Debug, bool $bubble = true, int $capSize = 0)\n    {\n        $this->redisClient = $redis;\n        $this->redisKey = $key;\n        $this->capSize = $capSize;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        if ($this->capSize > 0) {\n            $this->writeCapped($record);\n        } else {\n            $this->redisClient->rpush($this->redisKey, $record->formatted);\n        }\n    }\n\n    /**\n     * Write and cap the collection\n     * Writes the record to the redis list and caps its\n     */\n    protected function writeCapped(LogRecord $record): void\n    {\n        if ($this->redisClient instanceof Redis) {\n            $mode = \\defined('Redis::MULTI') ? Redis::MULTI : 1;\n            $this->redisClient->multi($mode)\n                ->rPush($this->redisKey, $record->formatted)\n                ->ltrim($this->redisKey, -$this->capSize, -1)\n                ->exec();\n        } else {\n            $redisKey = $this->redisKey;\n            $capSize = $this->capSize;\n            $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) {\n                $tx->rpush($redisKey, $record->formatted);\n                $tx->ltrim($redisKey, -$capSize, -1);\n            });\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\LineFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\nuse Predis\\Client as Predis;\nuse Redis;\n\n/**\n * Sends the message to a Redis Pub/Sub channel using PUBLISH\n *\n * usage example:\n *\n *   $log = new Logger('application');\n *   $redis = new RedisPubSubHandler(new Predis\\Client(\"tcp://localhost:6379\"), \"logs\", Level::Warning);\n *   $log->pushHandler($redis);\n *\n * @author Gaëtan Faugère <gaetan@fauge.re>\n */\nclass RedisPubSubHandler extends AbstractProcessingHandler\n{\n    /** @var Predis<Predis>|Redis */\n    private Predis|Redis $redisClient;\n    private string $channelKey;\n\n    /**\n     * @param Predis<Predis>|Redis $redis The redis instance\n     * @param string               $key   The channel key to publish records to\n     */\n    public function __construct(Predis|Redis $redis, string $key, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        $this->redisClient = $redis;\n        $this->channelKey = $key;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->redisClient->publish($this->channelKey, $record->formatted);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function getDefaultFormatter(): FormatterInterface\n    {\n        return new LineFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Rollbar\\RollbarLogger;\nuse Throwable;\nuse Monolog\\LogRecord;\n\n/**\n * Sends errors to Rollbar\n *\n * If the context data contains a `payload` key, that is used as an array\n * of payload options to RollbarLogger's log method.\n *\n * Rollbar's context info will contain the context + extra keys from the log record\n * merged, and then on top of that a few keys:\n *\n *  - level (rollbar level name)\n *  - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8)\n *  - channel\n *  - datetime (unix timestamp)\n *\n * @author Paul Statezny <paulstatezny@gmail.com>\n */\nclass RollbarHandler extends AbstractProcessingHandler\n{\n    protected RollbarLogger $rollbarLogger;\n\n    /**\n     * Records whether any log records have been added since the last flush of the rollbar notifier\n     */\n    private bool $hasRecords = false;\n\n    protected bool $initialized = false;\n\n    /**\n     * @param RollbarLogger $rollbarLogger RollbarLogger object constructed with valid token\n     */\n    public function __construct(RollbarLogger $rollbarLogger, int|string|Level $level = Level::Error, bool $bubble = true)\n    {\n        $this->rollbarLogger = $rollbarLogger;\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * Translates Monolog log levels to Rollbar levels.\n     *\n     * @return 'debug'|'info'|'warning'|'error'|'critical'\n     */\n    protected function toRollbarLevel(Level $level): string\n    {\n        return match ($level) {\n            Level::Debug     => 'debug',\n            Level::Info      => 'info',\n            Level::Notice    => 'info',\n            Level::Warning   => 'warning',\n            Level::Error     => 'error',\n            Level::Critical  => 'critical',\n            Level::Alert     => 'critical',\n            Level::Emergency => 'critical',\n        };\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        if (!$this->initialized) {\n            // __destructor() doesn't get called on Fatal errors\n            register_shutdown_function([$this, 'close']);\n            $this->initialized = true;\n        }\n\n        $context = $record->context;\n        $context = array_merge($context, $record->extra, [\n            'level' => $this->toRollbarLevel($record->level),\n            'monolog_level' => $record->level->getName(),\n            'channel' => $record->channel,\n            'datetime' => $record->datetime->format('U'),\n        ]);\n\n        if (isset($context['exception']) && $context['exception'] instanceof Throwable) {\n            $exception = $context['exception'];\n            unset($context['exception']);\n            $toLog = $exception;\n        } else {\n            $toLog = $record->message;\n        }\n\n        $this->rollbarLogger->log($context['level'], $toLog, $context);\n\n        $this->hasRecords = true;\n    }\n\n    public function flush(): void\n    {\n        if ($this->hasRecords) {\n            $this->rollbarLogger->flush();\n            $this->hasRecords = false;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        $this->flush();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function reset(): void\n    {\n        $this->flush();\n\n        parent::reset();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse DateTimeZone;\nuse InvalidArgumentException;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Stores logs to files that are rotated every day and a limited number of files are kept.\n *\n * This rotation is only intended to be used as a workaround. Using logrotate to\n * handle the rotation is strongly encouraged when you can use it.\n *\n * @author Christophe Coevoet <stof@notk.org>\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass RotatingFileHandler extends StreamHandler\n{\n    public const FILE_PER_DAY = 'Y-m-d';\n    public const FILE_PER_MONTH = 'Y-m';\n    public const FILE_PER_YEAR = 'Y';\n\n    protected string $filename;\n    protected int $maxFiles;\n    protected bool|null $mustRotate = null;\n    protected \\DateTimeImmutable $nextRotation;\n    protected string $filenameFormat;\n    protected string $dateFormat;\n    protected DateTimeZone|null $timezone = null;\n\n    /**\n     * @param int      $maxFiles       The maximal amount of files to keep (0 means unlimited)\n     * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write)\n     * @param bool     $useLocking     Try to lock log file before doing any writes\n     */\n    public function __construct(string $filename, int $maxFiles = 0, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, string $dateFormat = self::FILE_PER_DAY, string $filenameFormat  = '{filename}-{date}', DateTimeZone|null $timezone = null)\n    {\n        $this->filename = Utils::canonicalizePath($filename);\n        $this->maxFiles = $maxFiles;\n        $this->setFilenameFormat($filenameFormat, $dateFormat);\n        $this->nextRotation = $this->getNextRotation();\n        $this->timezone = $timezone;\n\n        parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        parent::close();\n\n        if (true === $this->mustRotate) {\n            $this->rotate();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function reset(): void\n    {\n        parent::reset();\n    }\n\n    /**\n     * @return $this\n     */\n    public function setFilenameFormat(string $filenameFormat, string $dateFormat): self\n    {\n        $this->setDateFormat($dateFormat);\n        if (substr_count($filenameFormat, '{date}') === 0) {\n            throw new InvalidArgumentException(\n                'Invalid filename format - format must contain at least `{date}`, because otherwise rotating is impossible.'\n            );\n        }\n        $this->filenameFormat = $filenameFormat;\n        $this->url = $this->getTimedFilename();\n        $this->close();\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        // on the first record written, if the log is new, we rotate (once per day) after the log has been written so that the new file exists\n        if (null === $this->mustRotate) {\n            $this->mustRotate = null === $this->url || !file_exists($this->url);\n        }\n\n        // if the next rotation is expired, then we rotate immediately\n        if ($this->nextRotation <= $record->datetime) {\n            $this->mustRotate = true;\n            $this->close(); // triggers rotation\n        }\n\n        parent::write($record);\n\n        if (true === $this->mustRotate) {\n            $this->close(); // triggers rotation\n        }\n    }\n\n    /**\n     * Rotates the files.\n     */\n    protected function rotate(): void\n    {\n        // update filename\n        $this->url = $this->getTimedFilename();\n        $this->nextRotation = $this->getNextRotation();\n\n        $this->mustRotate = false;\n\n        // skip GC of old logs if files are unlimited\n        if (0 === $this->maxFiles) {\n            return;\n        }\n\n        $logFiles = glob($this->getGlobPattern());\n        if (false === $logFiles) {\n            // failed to glob\n            return;\n        }\n\n        if ($this->maxFiles >= \\count($logFiles)) {\n            // no files to remove\n            return;\n        }\n\n        // Sorting the files by name to remove the older ones\n        usort($logFiles, function ($a, $b) {\n            return strcmp($b, $a);\n        });\n\n        $basePath = dirname($this->filename);\n\n        foreach (\\array_slice($logFiles, $this->maxFiles) as $file) {\n            if (is_writable($file)) {\n                // suppress errors here as unlink() might fail if two processes\n                // are cleaning up/rotating at the same time\n                set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool {\n                    return true;\n                });\n                unlink($file);\n\n                $dir = dirname($file);\n                while ($dir !== $basePath) {\n                    $entries = scandir($dir);\n                    if ($entries === false || \\count(array_diff($entries, ['.', '..'])) > 0) {\n                        break;\n                    }\n\n                    rmdir($dir);\n                    $dir = dirname($dir);\n                }\n                restore_error_handler();\n            }\n        }\n    }\n\n    protected function getTimedFilename(): string\n    {\n        $fileInfo = pathinfo($this->filename);\n        $timedFilename = str_replace(\n            ['{filename}', '{date}'],\n            [$fileInfo['filename'], (new \\DateTimeImmutable(timezone: $this->timezone))->format($this->dateFormat)],\n            ($fileInfo['dirname'] ?? '') . '/' . $this->filenameFormat\n        );\n\n        if (isset($fileInfo['extension'])) {\n            $timedFilename .= '.'.$fileInfo['extension'];\n        }\n\n        return $timedFilename;\n    }\n\n    protected function getGlobPattern(): string\n    {\n        $fileInfo = pathinfo($this->filename);\n        $glob = str_replace(\n            ['{filename}', '{date}'],\n            [$fileInfo['filename'], str_replace(\n                ['Y', 'y', 'm', 'd'],\n                ['[0-9][0-9][0-9][0-9]', '[0-9][0-9]', '[0-9][0-9]', '[0-9][0-9]'],\n                $this->dateFormat\n            )],\n            ($fileInfo['dirname'] ?? '') . '/' . $this->filenameFormat\n        );\n        if (isset($fileInfo['extension'])) {\n            $glob .= '.'.$fileInfo['extension'];\n        }\n\n        return $glob;\n    }\n\n    protected function setDateFormat(string $dateFormat): void\n    {\n        if (0 === preg_match('{^[Yy](([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) {\n            throw new InvalidArgumentException(\n                'Invalid date format - format must be one of '.\n                'RotatingFileHandler::FILE_PER_DAY (\"Y-m-d\"), RotatingFileHandler::FILE_PER_MONTH (\"Y-m\") '.\n                'or RotatingFileHandler::FILE_PER_YEAR (\"Y\"), or you can set one of the '.\n                'date formats using slashes, underscores and/or dots instead of dashes.'\n            );\n        }\n        $this->dateFormat = $dateFormat;\n    }\n\n    protected function getNextRotation(): \\DateTimeImmutable\n    {\n        return match (str_replace(['/','_','.'], '-', $this->dateFormat)) {\n            self::FILE_PER_MONTH => (new \\DateTimeImmutable('first day of next month'))->setTime(0, 0, 0),\n            self::FILE_PER_YEAR => (new \\DateTimeImmutable('first day of January next year'))->setTime(0, 0, 0),\n            default => (new \\DateTimeImmutable('tomorrow'))->setTime(0, 0, 0),\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Closure;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Sampling handler\n *\n * A sampled event stream can be useful for logging high frequency events in\n * a production environment where you only need an idea of what is happening\n * and are not concerned with capturing every occurrence. Since the decision to\n * handle or not handle a particular event is determined randomly, the\n * resulting sampled log is not guaranteed to contain 1/N of the events that\n * occurred in the application, but based on the Law of large numbers, it will\n * tend to be close to this ratio with a large number of attempts.\n *\n * @author Bryan Davis <bd808@wikimedia.org>\n * @author Kunal Mehta <legoktm@gmail.com>\n */\nclass SamplingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface\n{\n    use ProcessableHandlerTrait;\n\n    /**\n     * Handler or factory Closure($record, $this)\n     *\n     * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface\n     */\n    protected Closure|HandlerInterface $handler;\n\n    protected int $factor;\n\n    /**\n     * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler\n     *\n     * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $samplingHandler).\n     * @param int                      $factor  Sample factor (e.g. 10 means every ~10th record is sampled)\n     */\n    public function __construct(Closure|HandlerInterface $handler, int $factor)\n    {\n        parent::__construct();\n        $this->handler = $handler;\n        $this->factor = $factor;\n    }\n\n    public function isHandling(LogRecord $record): bool\n    {\n        return $this->getHandler($record)->isHandling($record);\n    }\n\n    public function handle(LogRecord $record): bool\n    {\n        if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) {\n            if (\\count($this->processors) > 0) {\n                $record = $this->processRecord($record);\n            }\n\n            $this->getHandler($record)->handle($record);\n        }\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * Return the nested handler\n     *\n     * If the handler was provided as a factory, this will trigger the handler's instantiation.\n     */\n    public function getHandler(LogRecord|null $record = null): HandlerInterface\n    {\n        if (!$this->handler instanceof HandlerInterface) {\n            $handler = ($this->handler)($record, $this);\n            if (!$handler instanceof HandlerInterface) {\n                throw new \\RuntimeException(\"The factory Closure should return a HandlerInterface\");\n            }\n            $this->handler = $handler;\n        }\n\n        return $this->handler;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        $handler = $this->getHandler();\n        if ($handler instanceof FormattableHandlerInterface) {\n            $handler->setFormatter($formatter);\n\n            return $this;\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($handler).' does not support formatters.');\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFormatter(): FormatterInterface\n    {\n        $handler = $this->getHandler();\n        if ($handler instanceof FormattableHandlerInterface) {\n            return $handler->getFormatter();\n        }\n\n        throw new \\UnexpectedValueException('The nested handler of type '.\\get_class($handler).' does not support formatters.');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\n\n/**\n * SendGridHandler uses the SendGrid API v3 function to send Log emails, more information in https://www.twilio.com/docs/sendgrid/for-developers/sending-email/api-getting-started\n *\n * @author Ricardo Fontanelli <ricardo.fontanelli@hotmail.com>\n */\nclass SendGridHandler extends MailHandler\n{\n    /**\n     * The SendGrid API User\n     * @deprecated this is not used anymore as of SendGrid API v3\n     */\n    protected string $apiUser;\n    /**\n     * The email addresses to which the message will be sent\n     * @var string[]\n     */\n    protected array $to;\n\n    /**\n     * @param string|null $apiUser Unused user as of SendGrid API v3, you can pass null or any string\n     * @param list<string>|string $to\n     * @param non-empty-string $apiHost Allows you to use another endpoint (e.g. api.eu.sendgrid.com)\n     * @throws MissingExtensionException If the curl extension is missing\n     */\n    public function __construct(\n        string|null $apiUser,\n        protected string $apiKey,\n        protected string $from,\n        array|string $to,\n        protected string $subject,\n        int|string|Level $level = Level::Error,\n        bool $bubble = true,\n        /** @var non-empty-string */\n        private readonly string $apiHost = 'api.sendgrid.com',\n    ) {\n        if (!\\extension_loaded('curl')) {\n            throw new MissingExtensionException('The curl extension is needed to use the SendGridHandler');\n        }\n\n        $this->to = (array) $to;\n        // @phpstan-ignore property.deprecated\n        $this->apiUser = $apiUser ?? '';\n        parent::__construct($level, $bubble);\n    }\n\n    protected function send(string $content, array $records): void\n    {\n        $body = [];\n        $body['personalizations'] = [];\n        $body['from']['email'] = $this->from;\n        foreach ($this->to as $recipient) {\n            $body['personalizations'][]['to'][]['email'] = $recipient;\n        }\n        $body['subject'] = $this->subject;\n\n        if ($this->isHtmlBody($content)) {\n            $body['content'][] = [\n                'type' => 'text/html',\n                'value' => $content,\n            ];\n        } else {\n            $body['content'][] = [\n                'type' => 'text/plain',\n                'value' => $content,\n            ];\n        }\n        $ch = curl_init();\n        curl_setopt($ch, CURLOPT_HTTPHEADER, [\n            'Content-Type: application/json',\n            'Authorization: Bearer '.$this->apiKey,\n        ]);\n        curl_setopt($ch, CURLOPT_URL, 'https://'.$this->apiHost.'/v3/mail/send');\n        curl_setopt($ch, CURLOPT_POST, true);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n        curl_setopt($ch, CURLOPT_POSTFIELDS, Utils::jsonEncode($body));\n\n        Curl\\Util::execute($ch, 2);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler\\Slack;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\Formatter\\NormalizerFormatter;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Slack record utility helping to log to Slack webhooks or API.\n *\n * @author Greg Kedzierski <greg@gregkedzierski.com>\n * @author Haralan Dobrev <hkdobrev@gmail.com>\n * @see    https://api.slack.com/incoming-webhooks\n * @see    https://api.slack.com/docs/message-attachments\n */\nclass SlackRecord\n{\n    public const COLOR_DANGER = 'danger';\n\n    public const COLOR_WARNING = 'warning';\n\n    public const COLOR_GOOD = 'good';\n\n    public const COLOR_DEFAULT = '#e3e4e6';\n\n    /**\n     * Slack channel (encoded ID or name)\n     */\n    private string|null $channel;\n\n    /**\n     * Name of a bot\n     */\n    private string|null $username;\n\n    /**\n     * User icon e.g. 'ghost', 'http://example.com/user.png'\n     */\n    private string|null $userIcon;\n\n    /**\n     * Whether the message should be added to Slack as attachment (plain text otherwise)\n     */\n    private bool $useAttachment;\n\n    /**\n     * Whether the the context/extra messages added to Slack as attachments are in a short style\n     */\n    private bool $useShortAttachment;\n\n    /**\n     * Whether the attachment should include context and extra data\n     */\n    private bool $includeContextAndExtra;\n\n    /**\n     * Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']\n     * @var string[]\n     */\n    private array $excludeFields;\n\n    private FormatterInterface|null $formatter;\n\n    private NormalizerFormatter $normalizerFormatter;\n\n    /**\n     * @param string[] $excludeFields\n     */\n    public function __construct(\n        ?string $channel = null,\n        ?string $username = null,\n        bool $useAttachment = true,\n        ?string $userIcon = null,\n        bool $useShortAttachment = false,\n        bool $includeContextAndExtra = false,\n        array $excludeFields = [],\n        FormatterInterface|null $formatter = null\n    ) {\n        $this\n            ->setChannel($channel)\n            ->setUsername($username)\n            ->useAttachment($useAttachment)\n            ->setUserIcon($userIcon)\n            ->useShortAttachment($useShortAttachment)\n            ->includeContextAndExtra($includeContextAndExtra)\n            ->excludeFields($excludeFields)\n            ->setFormatter($formatter);\n\n        if ($this->includeContextAndExtra) {\n            $this->normalizerFormatter = new NormalizerFormatter();\n        }\n    }\n\n    /**\n     * Returns required data in format that Slack\n     * is expecting.\n     *\n     * @phpstan-return mixed[]\n     */\n    public function getSlackData(LogRecord $record): array\n    {\n        $dataArray = [];\n\n        if ($this->username !== null) {\n            $dataArray['username'] = $this->username;\n        }\n\n        if ($this->channel !== null) {\n            $dataArray['channel'] = $this->channel;\n        }\n\n        if ($this->formatter !== null && !$this->useAttachment) {\n            $message = $this->formatter->format($record);\n        } else {\n            $message = $record->message;\n        }\n\n        $recordData = $this->removeExcludedFields($record);\n\n        if ($this->useAttachment) {\n            $attachment = [\n                'fallback'  => $message,\n                'text'      => $message,\n                'color'     => $this->getAttachmentColor($record->level),\n                'fields'    => [],\n                'mrkdwn_in' => ['fields'],\n                'ts'        => $recordData['datetime']->getTimestamp(),\n                'footer'      => $this->username,\n                'footer_icon' => $this->userIcon,\n            ];\n\n            if ($this->useShortAttachment) {\n                $attachment['title'] = $recordData['level_name'];\n            } else {\n                $attachment['title'] = 'Message';\n                $attachment['fields'][] = $this->generateAttachmentField('Level', $recordData['level_name']);\n            }\n\n            if ($this->includeContextAndExtra) {\n                foreach (['extra', 'context'] as $key) {\n                    if (!isset($recordData[$key]) || \\count($recordData[$key]) === 0) {\n                        continue;\n                    }\n\n                    if ($this->useShortAttachment) {\n                        $attachment['fields'][] = $this->generateAttachmentField(\n                            $key,\n                            $recordData[$key]\n                        );\n                    } else {\n                        // Add all extra fields as individual fields in attachment\n                        $attachment['fields'] = array_merge(\n                            $attachment['fields'],\n                            $this->generateAttachmentFields($recordData[$key])\n                        );\n                    }\n                }\n            }\n\n            $dataArray['attachments'] = [$attachment];\n        } else {\n            $dataArray['text'] = $message;\n        }\n\n        if ($this->userIcon !== null) {\n            if (false !== ($iconUrl = filter_var($this->userIcon, FILTER_VALIDATE_URL))) {\n                $dataArray['icon_url'] = $iconUrl;\n            } else {\n                $dataArray['icon_emoji'] = \":{$this->userIcon}:\";\n            }\n        }\n\n        return $dataArray;\n    }\n\n    /**\n     * Returns a Slack message attachment color associated with\n     * provided level.\n     */\n    public function getAttachmentColor(Level $level): string\n    {\n        return match ($level) {\n            Level::Error, Level::Critical, Level::Alert, Level::Emergency => static::COLOR_DANGER,\n            Level::Warning => static::COLOR_WARNING,\n            Level::Info, Level::Notice => static::COLOR_GOOD,\n            Level::Debug => static::COLOR_DEFAULT\n        };\n    }\n\n    /**\n     * Stringifies an array of key/value pairs to be used in attachment fields\n     *\n     * @param mixed[] $fields\n     */\n    public function stringify(array $fields): string\n    {\n        /** @var array<array<mixed>|bool|float|int|string|null> $normalized */\n        $normalized = $this->normalizerFormatter->normalizeValue($fields);\n\n        $hasSecondDimension = \\count(array_filter($normalized, 'is_array')) > 0;\n        $hasOnlyNonNumericKeys = \\count(array_filter(array_keys($normalized), 'is_numeric')) === 0;\n\n        return $hasSecondDimension || $hasOnlyNonNumericKeys\n            ? Utils::jsonEncode($normalized, JSON_PRETTY_PRINT|Utils::DEFAULT_JSON_FLAGS)\n            : Utils::jsonEncode($normalized, Utils::DEFAULT_JSON_FLAGS);\n    }\n\n    /**\n     * Channel used by the bot when posting\n     *\n     * @param  ?string $channel\n     * @return $this\n     */\n    public function setChannel(?string $channel = null): self\n    {\n        $this->channel = $channel;\n\n        return $this;\n    }\n\n    /**\n     * Username used by the bot when posting\n     *\n     * @param  ?string $username\n     * @return $this\n     */\n    public function setUsername(?string $username = null): self\n    {\n        $this->username = $username;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function useAttachment(bool $useAttachment = true): self\n    {\n        $this->useAttachment = $useAttachment;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setUserIcon(?string $userIcon = null): self\n    {\n        $this->userIcon = $userIcon;\n\n        if (\\is_string($userIcon)) {\n            $this->userIcon = trim($userIcon, ':');\n        }\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function useShortAttachment(bool $useShortAttachment = false): self\n    {\n        $this->useShortAttachment = $useShortAttachment;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function includeContextAndExtra(bool $includeContextAndExtra = false): self\n    {\n        $this->includeContextAndExtra = $includeContextAndExtra;\n\n        if ($this->includeContextAndExtra) {\n            $this->normalizerFormatter = new NormalizerFormatter();\n        }\n\n        return $this;\n    }\n\n    /**\n     * @param  string[] $excludeFields\n     * @return $this\n     */\n    public function excludeFields(array $excludeFields = []): self\n    {\n        $this->excludeFields = $excludeFields;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setFormatter(?FormatterInterface $formatter = null): self\n    {\n        $this->formatter = $formatter;\n\n        return $this;\n    }\n\n    /**\n     * Generates attachment field\n     *\n     * @param string|mixed[] $value\n     *\n     * @return array{title: string, value: string, short: false}\n     */\n    private function generateAttachmentField(string $title, $value): array\n    {\n        $value = \\is_array($value)\n            ? sprintf('```%s```', substr($this->stringify($value), 0, 1990))\n            : $value;\n\n        return [\n            'title' => ucfirst($title),\n            'value' => $value,\n            'short' => false,\n        ];\n    }\n\n    /**\n     * Generates a collection of attachment fields from array\n     *\n     * @param mixed[] $data\n     *\n     * @return array<array{title: string, value: string, short: false}>\n     */\n    private function generateAttachmentFields(array $data): array\n    {\n        /** @var array<array<mixed>|string> $normalized */\n        $normalized = $this->normalizerFormatter->normalizeValue($data);\n\n        $fields = [];\n        foreach ($normalized as $key => $value) {\n            $fields[] = $this->generateAttachmentField((string) $key, $value);\n        }\n\n        return $fields;\n    }\n\n    /**\n     * Get a copy of record with fields excluded according to $this->excludeFields\n     *\n     * @return mixed[]\n     */\n    private function removeExcludedFields(LogRecord $record): array\n    {\n        $recordData = $record->toArray();\n        foreach ($this->excludeFields as $field) {\n            $keys = explode('.', $field);\n            $node = &$recordData;\n            $lastKey = end($keys);\n            foreach ($keys as $key) {\n                if (!isset($node[$key])) {\n                    break;\n                }\n                if ($lastKey === $key) {\n                    unset($node[$key]);\n                    break;\n                }\n                $node = &$node[$key];\n            }\n        }\n\n        return $recordData;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\Handler\\Slack\\SlackRecord;\nuse Monolog\\LogRecord;\n\n/**\n * Sends notifications through Slack API\n *\n * @author Greg Kedzierski <greg@gregkedzierski.com>\n * @see    https://api.slack.com/\n */\nclass SlackHandler extends SocketHandler\n{\n    /**\n     * Slack API token\n     */\n    private string $token;\n\n    /**\n     * Instance of the SlackRecord util class preparing data for Slack API.\n     */\n    private SlackRecord $slackRecord;\n\n    /**\n     * @param  string                    $token                  Slack API token\n     * @param  string                    $channel                Slack channel (encoded ID or name)\n     * @param  string|null               $username               Name of a bot\n     * @param  bool                      $useAttachment          Whether the message should be added to Slack as attachment (plain text otherwise)\n     * @param  string|null               $iconEmoji              The emoji name to use (or null)\n     * @param  bool                      $useShortAttachment     Whether the context/extra messages added to Slack as attachments are in a short style\n     * @param  bool                      $includeContextAndExtra Whether the attachment should include context and extra data\n     * @param  string[]                  $excludeFields          Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']\n     * @throws MissingExtensionException If no OpenSSL PHP extension configured\n     */\n    public function __construct(\n        string $token,\n        string $channel,\n        ?string $username = null,\n        bool $useAttachment = true,\n        ?string $iconEmoji = null,\n        $level = Level::Critical,\n        bool $bubble = true,\n        bool $useShortAttachment = false,\n        bool $includeContextAndExtra = false,\n        array $excludeFields = [],\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        if (!\\extension_loaded('openssl')) {\n            throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler');\n        }\n\n        parent::__construct(\n            'ssl://slack.com:443',\n            $level,\n            $bubble,\n            $persistent,\n            $timeout,\n            $writingTimeout,\n            $connectionTimeout,\n            $chunkSize\n        );\n\n        $this->slackRecord = new SlackRecord(\n            $channel,\n            $username,\n            $useAttachment,\n            $iconEmoji,\n            $useShortAttachment,\n            $includeContextAndExtra,\n            $excludeFields\n        );\n\n        $this->token = $token;\n    }\n\n    public function getSlackRecord(): SlackRecord\n    {\n        return $this->slackRecord;\n    }\n\n    public function getToken(): string\n    {\n        return $this->token;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function generateDataStream(LogRecord $record): string\n    {\n        $content = $this->buildContent($record);\n\n        return $this->buildHeader($content) . $content;\n    }\n\n    /**\n     * Builds the body of API call\n     */\n    private function buildContent(LogRecord $record): string\n    {\n        $dataArray = $this->prepareContentData($record);\n\n        return http_build_query($dataArray);\n    }\n\n    /**\n     * @return string[]\n     */\n    protected function prepareContentData(LogRecord $record): array\n    {\n        $dataArray = $this->slackRecord->getSlackData($record);\n        $dataArray['token'] = $this->token;\n\n        if (isset($dataArray['attachments']) && \\is_array($dataArray['attachments']) && \\count($dataArray['attachments']) > 0) {\n            $dataArray['attachments'] = Utils::jsonEncode($dataArray['attachments']);\n        }\n\n        return $dataArray;\n    }\n\n    /**\n     * Builds the header of the API Call\n     */\n    private function buildHeader(string $content): string\n    {\n        $header = \"POST /api/chat.postMessage HTTP/1.1\\r\\n\";\n        $header .= \"Host: slack.com\\r\\n\";\n        $header .= \"Content-Type: application/x-www-form-urlencoded\\r\\n\";\n        $header .= \"Content-Length: \" . \\strlen($content) . \"\\r\\n\";\n        $header .= \"\\r\\n\";\n\n        return $header;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        parent::write($record);\n        $this->finalizeWrite();\n    }\n\n    /**\n     * Finalizes the request by reading some bytes and then closing the socket\n     *\n     * If we do not read some but close the socket too early, slack sometimes\n     * drops the request entirely.\n     */\n    protected function finalizeWrite(): void\n    {\n        $res = $this->getResource();\n        if (\\is_resource($res)) {\n            @fread($res, 2048);\n        }\n        $this->closeSocket();\n    }\n\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        parent::setFormatter($formatter);\n        $this->slackRecord->setFormatter($formatter);\n\n        return $this;\n    }\n\n    public function getFormatter(): FormatterInterface\n    {\n        $formatter = parent::getFormatter();\n        $this->slackRecord->setFormatter($formatter);\n\n        return $formatter;\n    }\n\n    /**\n     * Channel used by the bot when posting\n     *\n     * @return $this\n     */\n    public function setChannel(string $channel): self\n    {\n        $this->slackRecord->setChannel($channel);\n\n        return $this;\n    }\n\n    /**\n     * Username used by the bot when posting\n     *\n     * @return $this\n     */\n    public function setUsername(string $username): self\n    {\n        $this->slackRecord->setUsername($username);\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function useAttachment(bool $useAttachment): self\n    {\n        $this->slackRecord->useAttachment($useAttachment);\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setIconEmoji(string $iconEmoji): self\n    {\n        $this->slackRecord->setUserIcon($iconEmoji);\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function useShortAttachment(bool $useShortAttachment): self\n    {\n        $this->slackRecord->useShortAttachment($useShortAttachment);\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function includeContextAndExtra(bool $includeContextAndExtra): self\n    {\n        $this->slackRecord->includeContextAndExtra($includeContextAndExtra);\n\n        return $this;\n    }\n\n    /**\n     * @param  string[] $excludeFields\n     * @return $this\n     */\n    public function excludeFields(array $excludeFields): self\n    {\n        $this->slackRecord->excludeFields($excludeFields);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\Handler\\Slack\\SlackRecord;\nuse Monolog\\LogRecord;\n\n/**\n * Sends notifications through Slack Webhooks\n *\n * @author Haralan Dobrev <hkdobrev@gmail.com>\n * @see    https://api.slack.com/incoming-webhooks\n */\nclass SlackWebhookHandler extends AbstractProcessingHandler\n{\n    /**\n     * Slack Webhook token\n     *\n     * @var non-empty-string\n     */\n    private string $webhookUrl;\n\n    /**\n     * Instance of the SlackRecord util class preparing data for Slack API.\n     */\n    private SlackRecord $slackRecord;\n\n    /**\n     * @param non-empty-string $webhookUrl             Slack Webhook URL\n     * @param string|null $channel                Slack channel (encoded ID or name)\n     * @param string|null $username               Name of a bot\n     * @param bool        $useAttachment          Whether the message should be added to Slack as attachment (plain text otherwise)\n     * @param string|null $iconEmoji              The emoji name to use (or null)\n     * @param bool        $useShortAttachment     Whether the the context/extra messages added to Slack as attachments are in a short style\n     * @param bool        $includeContextAndExtra Whether the attachment should include context and extra data\n     * @param string[]    $excludeFields          Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']\n     *\n     * @throws MissingExtensionException If the curl extension is missing\n     */\n    public function __construct(\n        string $webhookUrl,\n        ?string $channel = null,\n        ?string $username = null,\n        bool $useAttachment = true,\n        ?string $iconEmoji = null,\n        bool $useShortAttachment = false,\n        bool $includeContextAndExtra = false,\n        $level = Level::Critical,\n        bool $bubble = true,\n        array $excludeFields = []\n    ) {\n        if (!\\extension_loaded('curl')) {\n            throw new MissingExtensionException('The curl extension is needed to use the SlackWebhookHandler');\n        }\n\n        parent::__construct($level, $bubble);\n\n        $this->webhookUrl = $webhookUrl;\n\n        $this->slackRecord = new SlackRecord(\n            $channel,\n            $username,\n            $useAttachment,\n            $iconEmoji,\n            $useShortAttachment,\n            $includeContextAndExtra,\n            $excludeFields\n        );\n    }\n\n    public function getSlackRecord(): SlackRecord\n    {\n        return $this->slackRecord;\n    }\n\n    public function getWebhookUrl(): string\n    {\n        return $this->webhookUrl;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $postData = $this->slackRecord->getSlackData($record);\n        $postString = Utils::jsonEncode($postData);\n\n        $ch = curl_init();\n        $options = [\n            CURLOPT_URL => $this->webhookUrl,\n            CURLOPT_POST => true,\n            CURLOPT_RETURNTRANSFER => true,\n            CURLOPT_HTTPHEADER => ['Content-type: application/json'],\n            CURLOPT_POSTFIELDS => $postString,\n        ];\n\n        curl_setopt_array($ch, $options);\n\n        Curl\\Util::execute($ch);\n    }\n\n    public function setFormatter(FormatterInterface $formatter): HandlerInterface\n    {\n        parent::setFormatter($formatter);\n        $this->slackRecord->setFormatter($formatter);\n\n        return $this;\n    }\n\n    public function getFormatter(): FormatterInterface\n    {\n        $formatter = parent::getFormatter();\n        $this->slackRecord->setFormatter($formatter);\n\n        return $formatter;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Stores to any socket - uses fsockopen() or pfsockopen().\n *\n * @author Pablo de Leon Belloc <pablolb@gmail.com>\n * @see    http://php.net/manual/en/function.fsockopen.php\n */\nclass SocketHandler extends AbstractProcessingHandler\n{\n    private string $connectionString;\n    private float $connectionTimeout;\n    /** @var resource|null */\n    private $resource;\n    private float $timeout;\n    private float $writingTimeout;\n    private int|null $lastSentBytes = null;\n    private int|null $chunkSize;\n    private bool $persistent;\n    private int|null $errno = null;\n    private string|null $errstr = null;\n    private float|null $lastWritingAt = null;\n\n    /**\n     * @param string     $connectionString  Socket connection string\n     * @param bool       $persistent        Flag to enable/disable persistent connections\n     * @param float      $timeout           Socket timeout to wait until the request is being aborted\n     * @param float      $writingTimeout    Socket timeout to wait until the request should've been sent/written\n     * @param float|null $connectionTimeout Socket connect timeout to wait until the connection should've been\n     *                                      established\n     * @param int|null   $chunkSize         Sets the chunk size. Only has effect during connection in the writing cycle\n     *\n     * @throws \\InvalidArgumentException If an invalid timeout value (less than 0) is passed.\n     */\n    public function __construct(\n        string $connectionString,\n        $level = Level::Debug,\n        bool $bubble = true,\n        bool $persistent = false,\n        float $timeout = 0.0,\n        float $writingTimeout = 10.0,\n        ?float $connectionTimeout = null,\n        ?int $chunkSize = null\n    ) {\n        parent::__construct($level, $bubble);\n        $this->connectionString = $connectionString;\n\n        if ($connectionTimeout !== null) {\n            $this->validateTimeout($connectionTimeout);\n        }\n\n        $this->connectionTimeout = $connectionTimeout ?? (float) \\ini_get('default_socket_timeout');\n        $this->persistent = $persistent;\n        $this->validateTimeout($timeout);\n        $this->timeout = $timeout;\n        $this->validateTimeout($writingTimeout);\n        $this->writingTimeout = $writingTimeout;\n        $this->chunkSize = $chunkSize;\n    }\n\n    /**\n     * Connect (if necessary) and write to the socket\n     *\n     * @inheritDoc\n     *\n     * @throws \\UnexpectedValueException\n     * @throws \\RuntimeException\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->connectIfNotConnected();\n        $data = $this->generateDataStream($record);\n        $this->writeToSocket($data);\n    }\n\n    /**\n     * We will not close a PersistentSocket instance so it can be reused in other requests.\n     */\n    public function close(): void\n    {\n        if (!$this->isPersistent()) {\n            $this->closeSocket();\n        }\n    }\n\n    /**\n     * Close socket, if open\n     */\n    public function closeSocket(): void\n    {\n        if (\\is_resource($this->resource)) {\n            fclose($this->resource);\n            $this->resource = null;\n        }\n    }\n\n    /**\n     * Set socket connection to be persistent. It only has effect before the connection is initiated.\n     *\n     * @return $this\n     */\n    public function setPersistent(bool $persistent): self\n    {\n        $this->persistent = $persistent;\n\n        return $this;\n    }\n\n    /**\n     * Set connection timeout.  Only has effect before we connect.\n     *\n     * @see http://php.net/manual/en/function.fsockopen.php\n     * @return $this\n     */\n    public function setConnectionTimeout(float $seconds): self\n    {\n        $this->validateTimeout($seconds);\n        $this->connectionTimeout = $seconds;\n\n        return $this;\n    }\n\n    /**\n     * Set write timeout. Only has effect before we connect.\n     *\n     * @see http://php.net/manual/en/function.stream-set-timeout.php\n     * @return $this\n     */\n    public function setTimeout(float $seconds): self\n    {\n        $this->validateTimeout($seconds);\n        $this->timeout = $seconds;\n\n        return $this;\n    }\n\n    /**\n     * Set writing timeout. Only has effect during connection in the writing cycle.\n     *\n     * @param  float $seconds 0 for no timeout\n     * @return $this\n     */\n    public function setWritingTimeout(float $seconds): self\n    {\n        $this->validateTimeout($seconds);\n        $this->writingTimeout = $seconds;\n\n        return $this;\n    }\n\n    /**\n     * Set chunk size. Only has effect during connection in the writing cycle.\n     *\n     * @return $this\n     */\n    public function setChunkSize(int $bytes): self\n    {\n        $this->chunkSize = $bytes;\n\n        return $this;\n    }\n\n    /**\n     * Get current connection string\n     */\n    public function getConnectionString(): string\n    {\n        return $this->connectionString;\n    }\n\n    /**\n     * Get persistent setting\n     */\n    public function isPersistent(): bool\n    {\n        return $this->persistent;\n    }\n\n    /**\n     * Get current connection timeout setting\n     */\n    public function getConnectionTimeout(): float\n    {\n        return $this->connectionTimeout;\n    }\n\n    /**\n     * Get current in-transfer timeout\n     */\n    public function getTimeout(): float\n    {\n        return $this->timeout;\n    }\n\n    /**\n     * Get current local writing timeout\n     */\n    public function getWritingTimeout(): float\n    {\n        return $this->writingTimeout;\n    }\n\n    /**\n     * Get current chunk size\n     */\n    public function getChunkSize(): ?int\n    {\n        return $this->chunkSize;\n    }\n\n    /**\n     * Check to see if the socket is currently available.\n     *\n     * UDP might appear to be connected but might fail when writing.  See http://php.net/fsockopen for details.\n     */\n    public function isConnected(): bool\n    {\n        return \\is_resource($this->resource)\n            && !feof($this->resource);  // on TCP - other party can close connection.\n    }\n\n    /**\n     * Wrapper to allow mocking\n     *\n     * @return resource|false\n     */\n    protected function pfsockopen()\n    {\n        return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout);\n    }\n\n    /**\n     * Wrapper to allow mocking\n     *\n     * @return resource|false\n     */\n    protected function fsockopen()\n    {\n        return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout);\n    }\n\n    /**\n     * Wrapper to allow mocking\n     *\n     * @see http://php.net/manual/en/function.stream-set-timeout.php\n     */\n    protected function streamSetTimeout(): bool\n    {\n        $seconds = floor($this->timeout);\n        $microseconds = round(($this->timeout - $seconds) * 1e6);\n\n        if (!\\is_resource($this->resource)) {\n            throw new \\LogicException('streamSetTimeout called but $this->resource is not a resource');\n        }\n\n        return stream_set_timeout($this->resource, (int) $seconds, (int) $microseconds);\n    }\n\n    /**\n     * Wrapper to allow mocking\n     *\n     * @see http://php.net/manual/en/function.stream-set-chunk-size.php\n     *\n     * @return int|false\n     */\n    protected function streamSetChunkSize(): int|bool\n    {\n        if (!\\is_resource($this->resource)) {\n            throw new \\LogicException('streamSetChunkSize called but $this->resource is not a resource');\n        }\n\n        if (null === $this->chunkSize) {\n            throw new \\LogicException('streamSetChunkSize called but $this->chunkSize is not set');\n        }\n\n        return stream_set_chunk_size($this->resource, $this->chunkSize);\n    }\n\n    /**\n     * Wrapper to allow mocking\n     *\n     * @return int|false\n     */\n    protected function fwrite(string $data): int|bool\n    {\n        if (!\\is_resource($this->resource)) {\n            throw new \\LogicException('fwrite called but $this->resource is not a resource');\n        }\n\n        return @fwrite($this->resource, $data);\n    }\n\n    /**\n     * Wrapper to allow mocking\n     *\n     * @return mixed[]|bool\n     */\n    protected function streamGetMetadata(): array|bool\n    {\n        if (!\\is_resource($this->resource)) {\n            throw new \\LogicException('streamGetMetadata called but $this->resource is not a resource');\n        }\n\n        return stream_get_meta_data($this->resource);\n    }\n\n    private function validateTimeout(float $value): void\n    {\n        if ($value < 0) {\n            throw new \\InvalidArgumentException(\"Timeout must be 0 or a positive float (got $value)\");\n        }\n    }\n\n    private function connectIfNotConnected(): void\n    {\n        if ($this->isConnected()) {\n            return;\n        }\n        $this->connect();\n    }\n\n    protected function generateDataStream(LogRecord $record): string\n    {\n        return (string) $record->formatted;\n    }\n\n    /**\n     * @return resource|null\n     */\n    protected function getResource()\n    {\n        return $this->resource;\n    }\n\n    private function connect(): void\n    {\n        $this->createSocketResource();\n        $this->setSocketTimeout();\n        $this->setStreamChunkSize();\n    }\n\n    private function createSocketResource(): void\n    {\n        if ($this->isPersistent()) {\n            $resource = $this->pfsockopen();\n        } else {\n            $resource = $this->fsockopen();\n        }\n        if (\\is_bool($resource)) {\n            throw new \\UnexpectedValueException(\"Failed connecting to $this->connectionString ($this->errno: $this->errstr)\");\n        }\n        $this->resource = $resource;\n    }\n\n    private function setSocketTimeout(): void\n    {\n        if (!$this->streamSetTimeout()) {\n            throw new \\UnexpectedValueException(\"Failed setting timeout with stream_set_timeout()\");\n        }\n    }\n\n    private function setStreamChunkSize(): void\n    {\n        if (null !== $this->chunkSize && false === $this->streamSetChunkSize()) {\n            throw new \\UnexpectedValueException(\"Failed setting chunk size with stream_set_chunk_size()\");\n        }\n    }\n\n    private function writeToSocket(string $data): void\n    {\n        $length = \\strlen($data);\n        $sent = 0;\n        $this->lastSentBytes = $sent;\n        while ($this->isConnected() && $sent < $length) {\n            if (0 === $sent) {\n                $chunk = $this->fwrite($data);\n            } else {\n                $chunk = $this->fwrite(substr($data, $sent));\n            }\n            if ($chunk === false) {\n                throw new \\RuntimeException(\"Could not write to socket\");\n            }\n            $sent += $chunk;\n            $socketInfo = $this->streamGetMetadata();\n            if (\\is_array($socketInfo) && (bool) $socketInfo['timed_out']) {\n                throw new \\RuntimeException(\"Write timed-out\");\n            }\n\n            if ($this->writingIsTimedOut($sent)) {\n                throw new \\RuntimeException(\"Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)\");\n            }\n        }\n        if (!$this->isConnected() && $sent < $length) {\n            throw new \\RuntimeException(\"End-of-file reached, probably we got disconnected (sent $sent of $length)\");\n        }\n    }\n\n    private function writingIsTimedOut(int $sent): bool\n    {\n        // convert to ms\n        if (0.0 === $this->writingTimeout) {\n            return false;\n        }\n\n        if ($sent !== $this->lastSentBytes) {\n            $this->lastWritingAt = microtime(true);\n            $this->lastSentBytes = $sent;\n\n            return false;\n        } else {\n            usleep(100);\n        }\n\n        if ((microtime(true) - (float) $this->lastWritingAt) >= $this->writingTimeout) {\n            $this->closeSocket();\n\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Aws\\Sqs\\SqsClient;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Writes to any sqs queue.\n *\n * @author Martijn van Calker <git@amvc.nl>\n */\nclass SqsHandler extends AbstractProcessingHandler\n{\n    /** 256 KB in bytes - maximum message size in SQS */\n    protected const MAX_MESSAGE_SIZE = 262144;\n    /** 100 KB in bytes - head message size for new error log */\n    protected const HEAD_MESSAGE_SIZE = 102400;\n\n    private SqsClient $client;\n    private string $queueUrl;\n\n    public function __construct(SqsClient $sqsClient, string $queueUrl, int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n\n        $this->client = $sqsClient;\n        $this->queueUrl = $queueUrl;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        if (!isset($record->formatted) || 'string' !== \\gettype($record->formatted)) {\n            throw new \\InvalidArgumentException('SqsHandler accepts only formatted records as a string' . Utils::getRecordMessageForException($record));\n        }\n\n        $messageBody = $record->formatted;\n        if (\\strlen($messageBody) >= static::MAX_MESSAGE_SIZE) {\n            $messageBody = Utils::substr($messageBody, 0, static::HEAD_MESSAGE_SIZE);\n        }\n\n        $this->client->sendMessage([\n            'QueueUrl' => $this->queueUrl,\n            'MessageBody' => $messageBody,\n        ]);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Stores to any stream resource\n *\n * Can be used to store into php://stderr, remote and local files, etc.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass StreamHandler extends AbstractProcessingHandler\n{\n    protected const MAX_CHUNK_SIZE = 2147483647;\n    /** 10MB */\n    protected const DEFAULT_CHUNK_SIZE = 10 * 1024 * 1024;\n    protected int $streamChunkSize;\n    /** @var resource|null */\n    protected $stream;\n    protected string|null $url = null;\n    private string|null $errorMessage = null;\n    protected int|null $filePermission;\n    protected bool $useLocking;\n    protected string $fileOpenMode;\n    /** @var true|null */\n    private bool|null $dirCreated = null;\n    private bool $retrying = false;\n    private int|null $inodeUrl = null;\n\n    /**\n     * @param resource|string $stream         If a missing path can't be created, an UnexpectedValueException will be thrown on first write\n     * @param int|null        $filePermission Optional file permissions (default (0644) are only for owner read/write)\n     * @param bool            $useLocking     Try to lock log file before doing any writes\n     * @param string          $fileOpenMode   The fopen() mode used when opening a file, if $stream is a file path\n     *\n     * @throws \\InvalidArgumentException If stream is not a resource or string\n     */\n    public function __construct($stream, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, string $fileOpenMode = 'a')\n    {\n        parent::__construct($level, $bubble);\n\n        if (($phpMemoryLimit = Utils::expandIniShorthandBytes(\\ini_get('memory_limit'))) !== false) {\n            if ($phpMemoryLimit > 0) {\n                // use max 10% of allowed memory for the chunk size, and at least 100KB\n                $this->streamChunkSize = min(static::MAX_CHUNK_SIZE, max((int) ($phpMemoryLimit / 10), 100 * 1024));\n            } else {\n                // memory is unlimited, set to the default 10MB\n                $this->streamChunkSize = static::DEFAULT_CHUNK_SIZE;\n            }\n        } else {\n            // no memory limit information, set to the default 10MB\n            $this->streamChunkSize = static::DEFAULT_CHUNK_SIZE;\n        }\n\n        if (\\is_resource($stream)) {\n            $this->stream = $stream;\n\n            stream_set_chunk_size($this->stream, $this->streamChunkSize);\n        } elseif (\\is_string($stream)) {\n            $this->url = Utils::canonicalizePath($stream);\n        } else {\n            throw new \\InvalidArgumentException('A stream must either be a resource or a string.');\n        }\n\n        $this->fileOpenMode = $fileOpenMode;\n        $this->filePermission = $filePermission;\n        $this->useLocking = $useLocking;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function reset(): void\n    {\n        parent::reset();\n\n        // auto-close on reset to make sure we periodically close the file in long running processes\n        // as long as they correctly call reset() between jobs\n        if ($this->url !== null && $this->url !== 'php://memory') {\n            $this->close();\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        if (null !== $this->url && \\is_resource($this->stream)) {\n            fclose($this->stream);\n        }\n        $this->stream = null;\n        $this->dirCreated = null;\n    }\n\n    /**\n     * Return the currently active stream if it is open\n     *\n     * @return resource|null\n     */\n    public function getStream()\n    {\n        return $this->stream;\n    }\n\n    /**\n     * Return the stream URL if it was configured with a URL and not an active resource\n     */\n    public function getUrl(): ?string\n    {\n        return $this->url;\n    }\n\n    public function getStreamChunkSize(): int\n    {\n        return $this->streamChunkSize;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        if ($this->hasUrlInodeWasChanged()) {\n            $this->close();\n            $this->write($record);\n\n            return;\n        }\n\n        if (!\\is_resource($this->stream)) {\n            $url = $this->url;\n            if (null === $url || '' === $url) {\n                throw new \\LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().' . Utils::getRecordMessageForException($record));\n            }\n            $this->createDir($url);\n            $this->errorMessage = null;\n            set_error_handler($this->customErrorHandler(...));\n\n            try {\n                $stream = fopen($url, $this->fileOpenMode);\n                if ($this->filePermission !== null) {\n                    @chmod($url, $this->filePermission);\n                }\n            } finally {\n                restore_error_handler();\n            }\n            if (!\\is_resource($stream)) {\n                $this->stream = null;\n\n                throw new \\UnexpectedValueException(sprintf('The stream or file \"%s\" could not be opened in append mode: '.$this->errorMessage, $url) . Utils::getRecordMessageForException($record));\n            }\n            stream_set_chunk_size($stream, $this->streamChunkSize);\n            $this->stream = $stream;\n            $this->inodeUrl = $this->getInodeFromUrl();\n        }\n\n        $stream = $this->stream;\n        if ($this->useLocking) {\n            // ignoring errors here, there's not much we can do about them\n            flock($stream, LOCK_EX);\n        }\n\n        $this->errorMessage = null;\n        set_error_handler($this->customErrorHandler(...));\n        try {\n            $this->streamWrite($stream, $record);\n        } finally {\n            restore_error_handler();\n        }\n        if ($this->errorMessage !== null) {\n            $error = $this->errorMessage;\n            // close the resource if possible to reopen it, and retry the failed write\n            if (!$this->retrying && $this->url !== null && $this->url !== 'php://memory') {\n                $this->retrying = true;\n                $this->close();\n                $this->write($record);\n\n                return;\n            }\n\n            throw new \\UnexpectedValueException('Writing to the log file failed: '.$error . Utils::getRecordMessageForException($record));\n        }\n\n        $this->retrying = false;\n        if ($this->useLocking) {\n            flock($stream, LOCK_UN);\n        }\n    }\n\n    /**\n     * Write to stream\n     * @param resource $stream\n     */\n    protected function streamWrite($stream, LogRecord $record): void\n    {\n        fwrite($stream, (string) $record->formatted);\n    }\n\n    /**\n     * @return true\n     */\n    private function customErrorHandler(int $code, string $msg): bool\n    {\n        $this->errorMessage = preg_replace('{^(fopen|mkdir|fwrite)\\(.*?\\): }', '', $msg);\n\n        return true;\n    }\n\n    private function getDirFromStream(string $stream): ?string\n    {\n        $pos = strpos($stream, '://');\n        if ($pos === false) {\n            return \\dirname($stream);\n        }\n\n        if ('file://' === substr($stream, 0, 7)) {\n            return \\dirname(substr($stream, 7));\n        }\n\n        return null;\n    }\n\n    private function createDir(string $url): void\n    {\n        // Do not try to create dir if it has already been tried.\n        if (true === $this->dirCreated) {\n            return;\n        }\n\n        $dir = $this->getDirFromStream($url);\n        if (null !== $dir && !is_dir($dir)) {\n            $this->errorMessage = null;\n            set_error_handler(function (...$args) {\n                return $this->customErrorHandler(...$args);\n            });\n            $status = mkdir($dir, 0777, true);\n            restore_error_handler();\n            if (false === $status && !is_dir($dir) && strpos((string) $this->errorMessage, 'File exists') === false) {\n                throw new \\UnexpectedValueException(sprintf('There is no existing directory at \"%s\" and it could not be created: '.$this->errorMessage, $dir));\n            }\n        }\n        $this->dirCreated = true;\n    }\n\n    private function getInodeFromUrl(): ?int\n    {\n        if ($this->url === null || str_starts_with($this->url, 'php://')) {\n            return null;\n        }\n\n        $inode = @fileinode($this->url);\n\n        return $inode === false ? null : $inode;\n    }\n\n    private function hasUrlInodeWasChanged(): bool\n    {\n        if ($this->inodeUrl === null || $this->retrying || $this->inodeUrl === $this->getInodeFromUrl()) {\n            return false;\n        }\n\n        $this->retrying = true;\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Closure;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\nuse Monolog\\Utils;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\LineFormatter;\nuse Symfony\\Component\\Mailer\\MailerInterface;\nuse Symfony\\Component\\Mailer\\Transport\\TransportInterface;\nuse Symfony\\Component\\Mime\\Email;\n\n/**\n * SymfonyMailerHandler uses Symfony's Mailer component to send the emails\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass SymfonyMailerHandler extends MailHandler\n{\n    protected MailerInterface|TransportInterface $mailer;\n    /** @var Email|Closure(string, LogRecord[]): Email */\n    private Email|Closure $emailTemplate;\n\n    /**\n     * @phpstan-param Email|Closure(string, LogRecord[]): Email $email\n     *\n     * @param MailerInterface|TransportInterface $mailer The mailer to use\n     * @param Closure|Email                      $email  An email template, the subject/body will be replaced\n     */\n    public function __construct($mailer, Email|Closure $email, int|string|Level $level = Level::Error, bool $bubble = true)\n    {\n        parent::__construct($level, $bubble);\n\n        $this->mailer = $mailer;\n        $this->emailTemplate = $email;\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    protected function send(string $content, array $records): void\n    {\n        $this->mailer->send($this->buildMessage($content, $records));\n    }\n\n    /**\n     * Gets the formatter for the Swift_Message subject.\n     *\n     * @param string|null $format The format of the subject\n     */\n    protected function getSubjectFormatter(?string $format): FormatterInterface\n    {\n        return new LineFormatter($format);\n    }\n\n    /**\n     * Creates instance of Email to be sent\n     *\n     * @param string      $content formatted email body to be sent\n     * @param LogRecord[] $records Log records that formed the content\n     */\n    protected function buildMessage(string $content, array $records): Email\n    {\n        $message = null;\n        if ($this->emailTemplate instanceof Email) {\n            $message = clone $this->emailTemplate;\n        } elseif (\\is_callable($this->emailTemplate)) {\n            $message = ($this->emailTemplate)($content, $records);\n        }\n\n        if (!$message instanceof Email) {\n            $record = reset($records);\n\n            throw new \\InvalidArgumentException('Could not resolve message as instance of Email or a callable returning it' . ($record instanceof LogRecord ? Utils::getRecordMessageForException($record) : ''));\n        }\n\n        if (\\count($records) > 0) {\n            $subjectFormatter = $this->getSubjectFormatter($message->getSubject());\n            $message->subject($subjectFormatter->format($this->getHighestRecord($records)));\n        }\n\n        if ($this->isHtmlBody($content)) {\n            if (null !== ($charset = $message->getHtmlCharset())) {\n                $message->html($content, $charset);\n            } else {\n                $message->html($content);\n            }\n        } else {\n            if (null !== ($charset = $message->getTextCharset())) {\n                $message->text($content, $charset);\n            } else {\n                $message->text($content);\n            }\n        }\n\n        return $message->date(new \\DateTimeImmutable());\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Logs to syslog service.\n *\n * usage example:\n *\n *   $log = new Logger('application');\n *   $syslog = new SyslogHandler('myfacility', 'local6');\n *   $formatter = new LineFormatter(\"%channel%.%level_name%: %message% %extra%\");\n *   $syslog->setFormatter($formatter);\n *   $log->pushHandler($syslog);\n *\n * @author Sven Paulus <sven@karlsruhe.org>\n */\nclass SyslogHandler extends AbstractSyslogHandler\n{\n    protected string $ident;\n    protected int $logopts;\n\n    /**\n     * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant\n     * @param int        $logopts  Option flags for the openlog() call, defaults to LOG_PID\n     */\n    public function __construct(string $ident, string|int $facility = LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true, int $logopts = LOG_PID)\n    {\n        parent::__construct($facility, $level, $bubble);\n\n        $this->ident = $ident;\n        $this->logopts = $logopts;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function close(): void\n    {\n        closelog();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        openlog($this->ident, $this->logopts, $this->facility);\n        syslog($this->toSyslogPriority($record->level), (string) $record->formatted);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler\\SyslogUdp;\n\nuse Monolog\\Utils;\nuse Socket;\n\nclass UdpSocket\n{\n    protected const DATAGRAM_MAX_LENGTH = 65023;\n\n    protected string $ip;\n    protected int $port;\n    protected ?Socket $socket = null;\n\n    public function __construct(string $ip, int $port = 514)\n    {\n        $this->ip = $ip;\n        $this->port = $port;\n    }\n\n    public function write(string $line, string $header = \"\"): void\n    {\n        $this->send($this->assembleMessage($line, $header));\n    }\n\n    public function close(): void\n    {\n        if ($this->socket instanceof Socket) {\n            socket_close($this->socket);\n            $this->socket = null;\n        }\n    }\n\n    protected function getSocket(): Socket\n    {\n        if (null !== $this->socket) {\n            return $this->socket;\n        }\n\n        $domain = AF_INET;\n        $protocol = SOL_UDP;\n        // Check if we are using unix sockets.\n        if ($this->port === 0) {\n            $domain = AF_UNIX;\n            $protocol = IPPROTO_IP;\n        }\n\n        $socket = socket_create($domain, SOCK_DGRAM, $protocol);\n        if ($socket instanceof Socket) {\n            return $this->socket = $socket;\n        }\n\n        throw new \\RuntimeException('The UdpSocket to '.$this->ip.':'.$this->port.' could not be opened via socket_create');\n    }\n\n    protected function send(string $chunk): void\n    {\n        socket_sendto($this->getSocket(), $chunk, \\strlen($chunk), $flags = 0, $this->ip, $this->port);\n    }\n\n    protected function assembleMessage(string $line, string $header): string\n    {\n        $chunkSize = static::DATAGRAM_MAX_LENGTH - \\strlen($header);\n\n        return $header . Utils::substr($line, 0, $chunkSize);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse DateTimeInterface;\nuse Monolog\\Handler\\SyslogUdp\\UdpSocket;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\nuse Monolog\\Utils;\n\n/**\n * A Handler for logging to a remote syslogd server.\n *\n * @author Jesper Skovgaard Nielsen <nulpunkt@gmail.com>\n * @author Dominik Kukacka <dominik.kukacka@gmail.com>\n */\nclass SyslogUdpHandler extends AbstractSyslogHandler\n{\n    const RFC3164 = 0;\n    const RFC5424 = 1;\n    const RFC5424e = 2;\n\n    /** @var array<self::RFC*, string> */\n    private array $dateFormats = [\n        self::RFC3164 => 'M d H:i:s',\n        self::RFC5424 => \\DateTime::RFC3339,\n        self::RFC5424e => \\DateTime::RFC3339_EXTENDED,\n    ];\n\n    protected UdpSocket $socket;\n    protected string $ident;\n    /** @var self::RFC* */\n    protected int $rfc;\n\n    /**\n     * @param  string                    $host     Either IP/hostname or a path to a unix socket (port must be 0 then)\n     * @param  int                       $port     Port number, or 0 if $host is a unix socket\n     * @param  string|int                $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant\n     * @param  bool                      $bubble   Whether the messages that are handled can bubble up the stack or not\n     * @param  string                    $ident    Program name or tag for each log message.\n     * @param  int                       $rfc      RFC to format the message for.\n     * @throws MissingExtensionException when there is no socket extension\n     *\n     * @phpstan-param self::RFC* $rfc\n     */\n    public function __construct(string $host, int $port = 514, string|int $facility = LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true, string $ident = 'php', int $rfc = self::RFC5424)\n    {\n        if (!\\extension_loaded('sockets')) {\n            throw new MissingExtensionException('The sockets extension is required to use the SyslogUdpHandler');\n        }\n\n        parent::__construct($facility, $level, $bubble);\n\n        $this->ident = $ident;\n        $this->rfc = $rfc;\n\n        $this->socket = new UdpSocket($host, $port);\n    }\n\n    protected function write(LogRecord $record): void\n    {\n        $lines = $this->splitMessageIntoLines($record->formatted);\n\n        $header = $this->makeCommonSyslogHeader($this->toSyslogPriority($record->level), $record->datetime);\n\n        foreach ($lines as $line) {\n            $this->socket->write($line, $header);\n        }\n    }\n\n    public function close(): void\n    {\n        $this->socket->close();\n    }\n\n    /**\n     * @param  string|string[] $message\n     * @return string[]\n     */\n    private function splitMessageIntoLines($message): array\n    {\n        if (\\is_array($message)) {\n            $message = implode(\"\\n\", $message);\n        }\n\n        $lines = preg_split('/$\\R?^/m', (string) $message, -1, PREG_SPLIT_NO_EMPTY);\n        if (false === $lines) {\n            $pcreErrorCode = preg_last_error();\n\n            throw new \\RuntimeException('Could not preg_split: ' . $pcreErrorCode . ' / ' . preg_last_error_msg());\n        }\n\n        return $lines;\n    }\n\n    /**\n     * Make common syslog header (see rfc5424 or rfc3164)\n     */\n    protected function makeCommonSyslogHeader(int $severity, DateTimeInterface $datetime): string\n    {\n        $priority = $severity + $this->facility;\n\n        $pid = getmypid();\n        if (false === $pid) {\n            $pid = '-';\n        }\n\n        $hostname = gethostname();\n        if (false === $hostname) {\n            $hostname = '-';\n        }\n\n        if ($this->rfc === self::RFC3164) {\n            // see https://github.com/phpstan/phpstan/issues/5348\n            // @phpstan-ignore-next-line\n            $dateNew = $datetime->setTimezone(new \\DateTimeZone('UTC'));\n            $date = $dateNew->format($this->dateFormats[$this->rfc]);\n\n            return \"<$priority>\" .\n                $date . \" \" .\n                $hostname . \" \" .\n                $this->ident . \"[\" . $pid . \"]: \";\n        }\n\n        $date = $datetime->format($this->dateFormats[$this->rfc]);\n\n        return \"<$priority>1 \" .\n            $date . \" \" .\n            $hostname . \" \" .\n            $this->ident . \" \" .\n            $pid . \" - - \";\n    }\n\n    /**\n     * Inject your own socket, mainly used for testing\n     *\n     * @return $this\n     */\n    public function setSocket(UdpSocket $socket): self\n    {\n        $this->socket = $socket;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse RuntimeException;\nuse Monolog\\Level;\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Handler sends logs to Telegram using Telegram Bot API.\n *\n * How to use:\n *  1) Create a Telegram bot with https://telegram.me/BotFather;\n *  2) Create a Telegram channel or a group where logs will be recorded;\n *  3) Add the created bot from step 1 to the created channel/group from step 2.\n *\n * In order to create an instance of TelegramBotHandler use\n *  1. The Telegram bot API key from step 1\n *  2. The channel name with the `@` prefix if you created a public channel (e.g. `@my_public_channel`),\n *     or the channel ID with the `-100` prefix if you created a private channel (e.g. `-1001234567890`),\n *     or the group ID from step 2 (e.g. `-1234567890`).\n *\n * @link https://core.telegram.org/bots/api\n *\n * @author Mazur Alexandr <alexandrmazur96@gmail.com>\n */\nclass TelegramBotHandler extends AbstractProcessingHandler\n{\n    private const BOT_API = 'https://api.telegram.org/bot';\n\n    /**\n     * The available values of parseMode according to the Telegram api documentation\n     */\n    private const AVAILABLE_PARSE_MODES = [\n        'HTML',\n        'MarkdownV2',\n        'Markdown', // legacy mode without underline and strikethrough, use MarkdownV2 instead\n    ];\n\n    /**\n     * The maximum number of characters allowed in a message according to the Telegram api documentation\n     */\n    private const MAX_MESSAGE_LENGTH = 4096;\n\n    /**\n     * Telegram bot access token provided by BotFather.\n     * Create telegram bot with https://telegram.me/BotFather and use access token from it.\n     */\n    private string $apiKey;\n\n    /**\n     * Telegram channel name.\n     * Since to start with '@' symbol as prefix.\n     */\n    private string $channel;\n\n    /**\n     * The kind of formatting that is used for the message.\n     * See available options at https://core.telegram.org/bots/api#formatting-options\n     * or in AVAILABLE_PARSE_MODES\n     */\n    private string|null $parseMode;\n\n    /**\n     * Disables link previews for links in the message.\n     */\n    private bool|null $disableWebPagePreview;\n\n    /**\n     * Sends the message silently. Users will receive a notification with no sound.\n     */\n    private bool|null $disableNotification;\n\n    /**\n     * True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages.\n     * False - truncates a message that is too long.\n     */\n    private bool $splitLongMessages;\n\n    /**\n     * Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests).\n     */\n    private bool $delayBetweenMessages;\n\n    /**\n     * Telegram message thread id, unique identifier for the target message thread (topic) of the forum; for forum supergroups only\n     * See how to get the `message_thread_id` https://stackoverflow.com/a/75178418\n     */\n    private int|null $topic;\n\n    /**\n     * @param  string                    $apiKey               Telegram bot access token provided by BotFather\n     * @param  string                    $channel              Telegram channel name\n     * @param  bool                      $splitLongMessages    Split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages\n     * @param  bool                      $delayBetweenMessages Adds delay between sending a split message according to Telegram API\n     * @param  int                       $topic                Telegram message thread id, unique identifier for the target message thread (topic) of the forum\n     * @throws MissingExtensionException If the curl extension is missing\n     */\n    public function __construct(\n        string $apiKey,\n        string $channel,\n        $level = Level::Debug,\n        bool   $bubble = true,\n        ?string $parseMode = null,\n        ?bool   $disableWebPagePreview = null,\n        ?bool   $disableNotification = null,\n        bool   $splitLongMessages = false,\n        bool   $delayBetweenMessages = false,\n        ?int   $topic = null\n    ) {\n        if (!\\extension_loaded('curl')) {\n            throw new MissingExtensionException('The curl extension is needed to use the TelegramBotHandler');\n        }\n\n        parent::__construct($level, $bubble);\n\n        $this->apiKey = $apiKey;\n        $this->channel = $channel;\n        $this->setParseMode($parseMode);\n        $this->disableWebPagePreview($disableWebPagePreview);\n        $this->disableNotification($disableNotification);\n        $this->splitLongMessages($splitLongMessages);\n        $this->delayBetweenMessages($delayBetweenMessages);\n        $this->setTopic($topic);\n    }\n\n    /**\n     * @return $this\n     */\n    public function setParseMode(string|null $parseMode = null): self\n    {\n        if ($parseMode !== null && !\\in_array($parseMode, self::AVAILABLE_PARSE_MODES, true)) {\n            throw new \\InvalidArgumentException('Unknown parseMode, use one of these: ' . implode(', ', self::AVAILABLE_PARSE_MODES) . '.');\n        }\n\n        $this->parseMode = $parseMode;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function disableWebPagePreview(bool|null $disableWebPagePreview = null): self\n    {\n        $this->disableWebPagePreview = $disableWebPagePreview;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function disableNotification(bool|null $disableNotification = null): self\n    {\n        $this->disableNotification = $disableNotification;\n\n        return $this;\n    }\n\n    /**\n     * True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages.\n     * False - truncates a message that is too long.\n     *\n     * @return $this\n     */\n    public function splitLongMessages(bool $splitLongMessages = false): self\n    {\n        $this->splitLongMessages = $splitLongMessages;\n\n        return $this;\n    }\n\n    /**\n     * Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests).\n     *\n     * @return $this\n     */\n    public function delayBetweenMessages(bool $delayBetweenMessages = false): self\n    {\n        $this->delayBetweenMessages = $delayBetweenMessages;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function setTopic(?int $topic = null): self\n    {\n        $this->topic = $topic;\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        $messages = [];\n\n        foreach ($records as $record) {\n            if (!$this->isHandling($record)) {\n                continue;\n            }\n\n            if (\\count($this->processors) > 0) {\n                $record = $this->processRecord($record);\n            }\n\n            $messages[] = $record;\n        }\n\n        if (\\count($messages) > 0) {\n            $this->send((string) $this->getFormatter()->formatBatch($messages));\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->send($record->formatted);\n    }\n\n    /**\n     * Send request to @link https://api.telegram.org/bot on SendMessage action.\n     */\n    protected function send(string $message): void\n    {\n        $messages = $this->handleMessageLength($message);\n\n        foreach ($messages as $key => $msg) {\n            if ($this->delayBetweenMessages && $key > 0) {\n                sleep(1);\n            }\n\n            $this->sendCurl($msg);\n        }\n    }\n\n    protected function sendCurl(string $message): void\n    {\n        if ('' === trim($message)) {\n            return;\n        }\n        \n        $ch = curl_init();\n        $url = self::BOT_API . $this->apiKey . '/SendMessage';\n        curl_setopt($ch, CURLOPT_URL, $url);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);\n        $params = [\n            'text' => $message,\n            'chat_id' => $this->channel,\n            'parse_mode' => $this->parseMode,\n            'disable_web_page_preview' => $this->disableWebPagePreview,\n            'disable_notification' => $this->disableNotification,\n        ];\n        if ($this->topic !== null) {\n            $params['message_thread_id'] = $this->topic;\n        }\n        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));\n\n        $result = Curl\\Util::execute($ch);\n        if (!\\is_string($result)) {\n            throw new RuntimeException('Telegram API error. Description: No response');\n        }\n        $result = json_decode($result, true);\n\n        if ($result['ok'] === false) {\n            throw new RuntimeException('Telegram API error. Description: ' . $result['description']);\n        }\n    }\n\n    /**\n     * Handle a message that is too long: truncates or splits into several\n     * @return string[]\n     */\n    private function handleMessageLength(string $message): array\n    {\n        $truncatedMarker = ' (…truncated)';\n        if (!$this->splitLongMessages && \\strlen($message) > self::MAX_MESSAGE_LENGTH) {\n            return [Utils::substr($message, 0, self::MAX_MESSAGE_LENGTH - \\strlen($truncatedMarker)) . $truncatedMarker];\n        }\n\n        return str_split($message, self::MAX_MESSAGE_LENGTH);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\nuse NoDiscard;\n\n/**\n * Used for testing purposes.\n *\n * It records all records and gives you access to them for verification.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n *\n * @method bool hasEmergency(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasAlert(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasCritical(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasError(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasWarning(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasNotice(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasInfo(array{message: string, context?: mixed[]}|string $recordAssertions)\n * @method bool hasDebug(array{message: string, context?: mixed[]}|string $recordAssertions)\n *\n * @method bool hasEmergencyRecords()\n * @method bool hasAlertRecords()\n * @method bool hasCriticalRecords()\n * @method bool hasErrorRecords()\n * @method bool hasWarningRecords()\n * @method bool hasNoticeRecords()\n * @method bool hasInfoRecords()\n * @method bool hasDebugRecords()\n *\n * @method bool hasEmergencyThatContains(string $message)\n * @method bool hasAlertThatContains(string $message)\n * @method bool hasCriticalThatContains(string $message)\n * @method bool hasErrorThatContains(string $message)\n * @method bool hasWarningThatContains(string $message)\n * @method bool hasNoticeThatContains(string $message)\n * @method bool hasInfoThatContains(string $message)\n * @method bool hasDebugThatContains(string $message)\n *\n * @method bool hasEmergencyThatMatches(string $regex)\n * @method bool hasAlertThatMatches(string $regex)\n * @method bool hasCriticalThatMatches(string $regex)\n * @method bool hasErrorThatMatches(string $regex)\n * @method bool hasWarningThatMatches(string $regex)\n * @method bool hasNoticeThatMatches(string $regex)\n * @method bool hasInfoThatMatches(string $regex)\n * @method bool hasDebugThatMatches(string $regex)\n *\n * @method bool hasEmergencyThatPasses(callable $predicate)\n * @method bool hasAlertThatPasses(callable $predicate)\n * @method bool hasCriticalThatPasses(callable $predicate)\n * @method bool hasErrorThatPasses(callable $predicate)\n * @method bool hasWarningThatPasses(callable $predicate)\n * @method bool hasNoticeThatPasses(callable $predicate)\n * @method bool hasInfoThatPasses(callable $predicate)\n * @method bool hasDebugThatPasses(callable $predicate)\n */\nclass TestHandler extends AbstractProcessingHandler\n{\n    /** @var LogRecord[] */\n    protected array $records = [];\n    /** @phpstan-var array<value-of<Level::VALUES>, LogRecord[]> */\n    protected array $recordsByLevel = [];\n    private bool $skipReset = false;\n\n    /**\n     * @return array<LogRecord>\n     */\n    #[NoDiscard]\n    public function getRecords(): array\n    {\n        return $this->records;\n    }\n\n    public function clear(): void\n    {\n        $this->records = [];\n        $this->recordsByLevel = [];\n    }\n\n    public function reset(): void\n    {\n        if (!$this->skipReset) {\n            $this->clear();\n        }\n    }\n\n    public function setSkipReset(bool $skipReset): void\n    {\n        $this->skipReset = $skipReset;\n    }\n\n    /**\n     * @param int|string|Level|LogLevel::* $level Logging level value or name\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    #[NoDiscard]\n    public function hasRecords(int|string|Level $level): bool\n    {\n        return isset($this->recordsByLevel[Logger::toMonologLevel($level)->value]);\n    }\n\n    /**\n     * @param string|array $recordAssertions Either a message string or an array containing message and optionally context keys that will be checked against all records\n     *\n     * @phpstan-param array{message: string, context?: mixed[]}|string $recordAssertions\n     */\n    #[NoDiscard]\n    public function hasRecord(string|array $recordAssertions, Level $level): bool\n    {\n        if (\\is_string($recordAssertions)) {\n            $recordAssertions = ['message' => $recordAssertions];\n        }\n\n        return $this->hasRecordThatPasses(function (LogRecord $rec) use ($recordAssertions) {\n            if ($rec->message !== $recordAssertions['message']) {\n                return false;\n            }\n            if (isset($recordAssertions['context']) && $rec->context !== $recordAssertions['context']) {\n                return false;\n            }\n\n            return true;\n        }, $level);\n    }\n\n    #[NoDiscard]\n    public function hasRecordThatContains(string $message, Level $level): bool\n    {\n        return $this->hasRecordThatPasses(fn (LogRecord $rec) => str_contains($rec->message, $message), $level);\n    }\n\n    #[NoDiscard]\n    public function hasRecordThatMatches(string $regex, Level $level): bool\n    {\n        return $this->hasRecordThatPasses(fn (LogRecord $rec) => preg_match($regex, $rec->message) > 0, $level);\n    }\n\n    /**\n     * @phpstan-param callable(LogRecord, int): mixed $predicate\n     */\n    #[NoDiscard]\n    public function hasRecordThatPasses(callable $predicate, Level $level): bool\n    {\n        $level = Logger::toMonologLevel($level);\n\n        if (!isset($this->recordsByLevel[$level->value])) {\n            return false;\n        }\n\n        foreach ($this->recordsByLevel[$level->value] as $i => $rec) {\n            if ((bool) $predicate($rec, $i)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->recordsByLevel[$record->level->value][] = $record;\n        $this->records[] = $record;\n    }\n\n    /**\n     * @param mixed[] $args\n     */\n    #[NoDiscard]\n    public function __call(string $method, array $args): bool\n    {\n        if ((bool) preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches)) {\n            $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];\n            $level = \\constant(Level::class.'::' . $matches[2]);\n            $callback = [$this, $genericMethod];\n            if (\\is_callable($callback)) {\n                $args[] = $level;\n\n                return \\call_user_func_array($callback, $args);\n            }\n        }\n\n        throw new \\BadMethodCallException('Call to undefined method ' . \\get_class($this) . '::' . $method . '()');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\ntrait WebRequestRecognizerTrait\n{\n    /**\n     * Checks if PHP's serving a web request\n     */\n    protected function isWebRequest(): bool\n    {\n        return 'cli' !== \\PHP_SAPI && 'phpdbg' !== \\PHP_SAPI;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\LogRecord;\nuse Throwable;\n\n/**\n * Forwards records to multiple handlers suppressing failures of each handler\n * and continuing through to give every handler a chance to succeed.\n *\n * @author Craig D'Amelio <craig@damelio.ca>\n */\nclass WhatFailureGroupHandler extends GroupHandler\n{\n    /**\n     * @inheritDoc\n     */\n    public function handle(LogRecord $record): bool\n    {\n        if (\\count($this->processors) > 0) {\n            $record = $this->processRecord($record);\n        }\n\n        foreach ($this->handlers as $handler) {\n            try {\n                $handler->handle(clone $record);\n            } catch (Throwable) {\n                // What failure?\n            }\n        }\n\n        return false === $this->bubble;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function handleBatch(array $records): void\n    {\n        if (\\count($this->processors) > 0) {\n            $processed = [];\n            foreach ($records as $record) {\n                $processed[] = $this->processRecord($record);\n            }\n            $records = $processed;\n        }\n\n        foreach ($this->handlers as $handler) {\n            try {\n                $handler->handleBatch(array_map(fn ($record) => clone $record, $records));\n            } catch (Throwable) {\n                // What failure?\n            }\n        }\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    public function close(): void\n    {\n        foreach ($this->handlers as $handler) {\n            try {\n                $handler->close();\n            } catch (\\Throwable $e) {\n                // What failure?\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Handler;\n\nuse Monolog\\Formatter\\FormatterInterface;\nuse Monolog\\Formatter\\NormalizerFormatter;\nuse Monolog\\Level;\nuse Monolog\\LogRecord;\n\n/**\n * Handler sending logs to Zend Monitor\n *\n * @author  Christian Bergau <cbergau86@gmail.com>\n * @author  Jason Davis <happydude@jasondavis.net>\n */\nclass ZendMonitorHandler extends AbstractProcessingHandler\n{\n    /**\n     * @throws MissingExtensionException\n     */\n    public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true)\n    {\n        if (!\\function_exists('zend_monitor_custom_event')) {\n            throw new MissingExtensionException(\n                'You must have Zend Server installed with Zend Monitor enabled in order to use this handler'\n            );\n        }\n\n        parent::__construct($level, $bubble);\n    }\n\n    /**\n     * Translates Monolog log levels to ZendMonitor levels.\n     */\n    protected function toZendMonitorLevel(Level $level): int\n    {\n        return match ($level) {\n            Level::Debug     => \\ZEND_MONITOR_EVENT_SEVERITY_INFO,\n            Level::Info      => \\ZEND_MONITOR_EVENT_SEVERITY_INFO,\n            Level::Notice    => \\ZEND_MONITOR_EVENT_SEVERITY_INFO,\n            Level::Warning   => \\ZEND_MONITOR_EVENT_SEVERITY_WARNING,\n            Level::Error     => \\ZEND_MONITOR_EVENT_SEVERITY_ERROR,\n            Level::Critical  => \\ZEND_MONITOR_EVENT_SEVERITY_ERROR,\n            Level::Alert     => \\ZEND_MONITOR_EVENT_SEVERITY_ERROR,\n            Level::Emergency => \\ZEND_MONITOR_EVENT_SEVERITY_ERROR,\n        };\n    }\n\n    /**\n     * @inheritDoc\n     */\n    protected function write(LogRecord $record): void\n    {\n        $this->writeZendMonitorCustomEvent(\n            $record->level->getName(),\n            $record->message,\n            $record->formatted,\n            $this->toZendMonitorLevel($record->level)\n        );\n    }\n\n    /**\n     * Write to Zend Monitor Events\n     * @param string       $type      Text displayed in \"Class Name (custom)\" field\n     * @param string       $message   Text displayed in \"Error String\"\n     * @param array<mixed> $formatted Displayed in Custom Variables tab\n     * @param int          $severity  Set the event severity level (-1,0,1)\n     */\n    protected function writeZendMonitorCustomEvent(string $type, string $message, array $formatted, int $severity): void\n    {\n        zend_monitor_custom_event($type, $message, $formatted, $severity);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getDefaultFormatter(): FormatterInterface\n    {\n        return new NormalizerFormatter();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/JsonSerializableDateTimeImmutable.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse DateTimeZone;\n\n/**\n * Overrides default json encoding of date time objects\n *\n * @author Menno Holtkamp\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass JsonSerializableDateTimeImmutable extends \\DateTimeImmutable implements \\JsonSerializable\n{\n    private bool $useMicroseconds;\n\n    public function __construct(bool $useMicroseconds, ?DateTimeZone $timezone = null)\n    {\n        $this->useMicroseconds = $useMicroseconds;\n\n        // if you like to use a custom time to pass to Logger::addRecord directly,\n        // call modify() or setTimestamp() on this instance to change the date after creating it\n        parent::__construct('now', $timezone);\n    }\n\n    public function jsonSerialize(): string\n    {\n        if ($this->useMicroseconds) {\n            return $this->format('Y-m-d\\TH:i:s.uP');\n        }\n\n        return $this->format('Y-m-d\\TH:i:sP');\n    }\n\n    public function __toString(): string\n    {\n        return $this->jsonSerialize();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Level.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse Psr\\Log\\LogLevel;\n\n/**\n * Represents the log levels\n *\n * Monolog supports the logging levels described by RFC 5424 {@see https://datatracker.ietf.org/doc/html/rfc5424}\n * but due to BC the severity values used internally are not 0-7.\n *\n * To get the level name/value out of a Level there are several options:\n *\n * - Use ->getName() to get the standard Monolog name which is full uppercased (e.g. \"DEBUG\")\n * - Use ->toPsrLogLevel() to get the standard PSR-3 name which is full lowercased (e.g. \"debug\")\n * - Use ->toRFC5424Level() to get the standard RFC 5424 value (e.g. 7 for debug, 0 for emergency)\n * - Use ->name to get the enum case's name which is capitalized (e.g. \"Debug\")\n *\n * To get the internal value for filtering, if the includes/isLowerThan/isHigherThan methods are\n * not enough, you can use ->value to get the enum case's integer value.\n */\nenum Level: int\n{\n    /**\n     * Detailed debug information\n     */\n    case Debug = 100;\n\n    /**\n     * Interesting events\n     *\n     * Examples: User logs in, SQL logs.\n     */\n    case Info = 200;\n\n    /**\n     * Uncommon events\n     */\n    case Notice = 250;\n\n    /**\n     * Exceptional occurrences that are not errors\n     *\n     * Examples: Use of deprecated APIs, poor use of an API,\n     * undesirable things that are not necessarily wrong.\n     */\n    case Warning = 300;\n\n    /**\n     * Runtime errors\n     */\n    case Error = 400;\n\n    /**\n     * Critical conditions\n     *\n     * Example: Application component unavailable, unexpected exception.\n     */\n    case Critical = 500;\n\n    /**\n     * Action must be taken immediately\n     *\n     * Example: Entire website down, database unavailable, etc.\n     * This should trigger the SMS alerts and wake you up.\n     */\n    case Alert = 550;\n\n    /**\n     * Urgent alert.\n     */\n    case Emergency = 600;\n\n    /**\n     * @param  value-of<self::NAMES>|LogLevel::*|'Debug'|'Info'|'Notice'|'Warning'|'Error'|'Critical'|'Alert'|'Emergency' $name\n     * @return static\n     */\n    public static function fromName(string $name): self\n    {\n        return match (strtolower($name)) {\n            'debug' => self::Debug,\n            'info' => self::Info,\n            'notice' => self::Notice,\n            'warning' => self::Warning,\n            'error' => self::Error,\n            'critical' => self::Critical,\n            'alert' => self::Alert,\n            'emergency' => self::Emergency,\n        };\n    }\n\n    /**\n     * @param  value-of<self::VALUES> $value\n     * @return static\n     */\n    public static function fromValue(int $value): self\n    {\n        return self::from($value);\n    }\n\n    /**\n     * Returns true if the passed $level is higher or equal to $this\n     */\n    public function includes(Level $level): bool\n    {\n        return $this->value <= $level->value;\n    }\n\n    public function isHigherThan(Level $level): bool\n    {\n        return $this->value > $level->value;\n    }\n\n    public function isLowerThan(Level $level): bool\n    {\n        return $this->value < $level->value;\n    }\n\n    /**\n     * Returns the monolog standardized all-capitals name of the level\n     *\n     * Use this instead of $level->name which returns the enum case name (e.g. Debug vs DEBUG if you use getName())\n     *\n     * @return value-of<self::NAMES>\n     */\n    public function getName(): string\n    {\n        return match ($this) {\n            self::Debug => 'DEBUG',\n            self::Info => 'INFO',\n            self::Notice => 'NOTICE',\n            self::Warning => 'WARNING',\n            self::Error => 'ERROR',\n            self::Critical => 'CRITICAL',\n            self::Alert => 'ALERT',\n            self::Emergency => 'EMERGENCY',\n        };\n    }\n\n    /**\n     * Returns the PSR-3 level matching this instance\n     *\n     * @phpstan-return \\Psr\\Log\\LogLevel::*\n     */\n    public function toPsrLogLevel(): string\n    {\n        return match ($this) {\n            self::Debug => LogLevel::DEBUG,\n            self::Info => LogLevel::INFO,\n            self::Notice => LogLevel::NOTICE,\n            self::Warning => LogLevel::WARNING,\n            self::Error => LogLevel::ERROR,\n            self::Critical => LogLevel::CRITICAL,\n            self::Alert => LogLevel::ALERT,\n            self::Emergency => LogLevel::EMERGENCY,\n        };\n    }\n\n    /**\n     * Returns the RFC 5424 level matching this instance\n     *\n     * @phpstan-return int<0, 7>\n     */\n    public function toRFC5424Level(): int\n    {\n        return match ($this) {\n            self::Debug => 7,\n            self::Info => 6,\n            self::Notice => 5,\n            self::Warning => 4,\n            self::Error => 3,\n            self::Critical => 2,\n            self::Alert => 1,\n            self::Emergency => 0,\n        };\n    }\n\n    public const VALUES = [\n        100,\n        200,\n        250,\n        300,\n        400,\n        500,\n        550,\n        600,\n    ];\n\n    public const NAMES = [\n        'DEBUG',\n        'INFO',\n        'NOTICE',\n        'WARNING',\n        'ERROR',\n        'CRITICAL',\n        'ALERT',\n        'EMERGENCY',\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/LogRecord.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse ArrayAccess;\n\n/**\n * Monolog log record\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @template-implements ArrayAccess<'message'|'level'|'context'|'level_name'|'channel'|'datetime'|'extra'|'formatted', int|string|\\DateTimeImmutable|array<mixed>>\n */\nclass LogRecord implements ArrayAccess\n{\n    private const MODIFIABLE_FIELDS = [\n        'extra' => true,\n        'formatted' => true,\n    ];\n\n    public function __construct(\n        public readonly \\DateTimeImmutable $datetime,\n        public readonly string $channel,\n        public readonly Level $level,\n        public readonly string $message,\n        /** @var array<mixed> */\n        public readonly array $context = [],\n        /** @var array<mixed> */\n        public array $extra = [],\n        public mixed $formatted = null,\n    ) {\n    }\n\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($offset === 'extra') {\n            if (!\\is_array($value)) {\n                throw new \\InvalidArgumentException('extra must be an array');\n            }\n\n            $this->extra = $value;\n\n            return;\n        }\n\n        if ($offset === 'formatted') {\n            $this->formatted = $value;\n\n            return;\n        }\n\n        throw new \\LogicException('Unsupported operation: setting '.$offset);\n    }\n\n    public function offsetExists(mixed $offset): bool\n    {\n        if ($offset === 'level_name') {\n            return true;\n        }\n\n        return isset($this->{$offset});\n    }\n\n    public function offsetUnset(mixed $offset): void\n    {\n        throw new \\LogicException('Unsupported operation');\n    }\n\n    public function &offsetGet(mixed $offset): mixed\n    {\n        // handle special cases for the level enum\n        if ($offset === 'level_name') {\n            // avoid returning readonly props by ref as this is illegal\n            $copy = $this->level->getName();\n\n            return $copy;\n        }\n        if ($offset === 'level') {\n            // avoid returning readonly props by ref as this is illegal\n            $copy = $this->level->value;\n\n            return $copy;\n        }\n\n        if (isset(self::MODIFIABLE_FIELDS[$offset])) {\n            return $this->{$offset};\n        }\n\n        // avoid returning readonly props by ref as this is illegal\n        $copy = $this->{$offset};\n\n        return $copy;\n    }\n\n    /**\n     * @phpstan-return array{message: string, context: mixed[], level: value-of<Level::VALUES>, level_name: value-of<Level::NAMES>, channel: string, datetime: \\DateTimeImmutable, extra: mixed[]}\n     */\n    public function toArray(): array\n    {\n        return [\n            'message' => $this->message,\n            'context' => $this->context,\n            'level' => $this->level->value,\n            'level_name' => $this->level->getName(),\n            'channel' => $this->channel,\n            'datetime' => $this->datetime,\n            'extra' => $this->extra,\n        ];\n    }\n\n    public function with(mixed ...$args): self\n    {\n        foreach (['message', 'context', 'level', 'channel', 'datetime', 'extra'] as $prop) {\n            $args[$prop] ??= $this->{$prop};\n        }\n\n        return new self(...$args);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Logger.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse Closure;\nuse DateTimeZone;\nuse Fiber;\nuse Monolog\\Handler\\HandlerInterface;\nuse Monolog\\Processor\\ProcessorInterface;\nuse Psr\\Log\\LoggerInterface;\nuse Psr\\Log\\InvalidArgumentException;\nuse Psr\\Log\\LogLevel;\nuse Throwable;\nuse Stringable;\nuse WeakMap;\n\n/**\n * Monolog log channel\n *\n * It contains a stack of Handlers and a stack of Processors,\n * and uses them to store records that are added to it.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @final\n */\nclass Logger implements LoggerInterface, ResettableInterface\n{\n    /**\n     * Detailed debug information\n     *\n     * @deprecated Use \\Monolog\\Level::Debug\n     */\n    public const DEBUG = 100;\n\n    /**\n     * Interesting events\n     *\n     * Examples: User logs in, SQL logs.\n     *\n     * @deprecated Use \\Monolog\\Level::Info\n     */\n    public const INFO = 200;\n\n    /**\n     * Uncommon events\n     *\n     * @deprecated Use \\Monolog\\Level::Notice\n     */\n    public const NOTICE = 250;\n\n    /**\n     * Exceptional occurrences that are not errors\n     *\n     * Examples: Use of deprecated APIs, poor use of an API,\n     * undesirable things that are not necessarily wrong.\n     *\n     * @deprecated Use \\Monolog\\Level::Warning\n     */\n    public const WARNING = 300;\n\n    /**\n     * Runtime errors\n     *\n     * @deprecated Use \\Monolog\\Level::Error\n     */\n    public const ERROR = 400;\n\n    /**\n     * Critical conditions\n     *\n     * Example: Application component unavailable, unexpected exception.\n     *\n     * @deprecated Use \\Monolog\\Level::Critical\n     */\n    public const CRITICAL = 500;\n\n    /**\n     * Action must be taken immediately\n     *\n     * Example: Entire website down, database unavailable, etc.\n     * This should trigger the SMS alerts and wake you up.\n     *\n     * @deprecated Use \\Monolog\\Level::Alert\n     */\n    public const ALERT = 550;\n\n    /**\n     * Urgent alert.\n     *\n     * @deprecated Use \\Monolog\\Level::Emergency\n     */\n    public const EMERGENCY = 600;\n\n    /**\n     * Monolog API version\n     *\n     * This is only bumped when API breaks are done and should\n     * follow the major version of the library\n     */\n    public const API = 3;\n\n    /**\n     * Mapping between levels numbers defined in RFC 5424 and Monolog ones\n     *\n     * @phpstan-var array<int, Level> $rfc_5424_levels\n     */\n    private const RFC_5424_LEVELS = [\n        7 => Level::Debug,\n        6 => Level::Info,\n        5 => Level::Notice,\n        4 => Level::Warning,\n        3 => Level::Error,\n        2 => Level::Critical,\n        1 => Level::Alert,\n        0 => Level::Emergency,\n    ];\n\n    protected string $name;\n\n    /**\n     * The handler stack\n     *\n     * @var list<HandlerInterface>\n     */\n    protected array $handlers;\n\n    /**\n     * Processors that will process all log records\n     *\n     * To process records of a single handler instead, add the processor on that specific handler\n     *\n     * @var array<(callable(LogRecord): LogRecord)|ProcessorInterface>\n     */\n    protected array $processors;\n\n    protected bool $microsecondTimestamps = true;\n\n    protected DateTimeZone $timezone;\n\n    protected Closure|null $exceptionHandler = null;\n\n    /**\n     * Keeps track of depth to prevent infinite logging loops\n     */\n    private int $logDepth = 0;\n\n    /**\n     * @var WeakMap<Fiber<mixed, mixed, mixed, mixed>, int> Keeps track of depth inside fibers to prevent infinite logging loops\n     */\n    private WeakMap $fiberLogDepth;\n\n    /**\n     * Whether to detect infinite logging loops\n     * This can be disabled via {@see useLoggingLoopDetection} if you have async handlers that do not play well with this\n     */\n    private bool $detectCycles = true;\n\n    /**\n     * @param string             $name       The logging channel, a simple descriptive name that is attached to all log records\n     * @param list<HandlerInterface> $handlers   Optional stack of handlers, the first one in the array is called first, etc.\n     * @param callable[]         $processors Optional array of processors\n     * @param DateTimeZone|null  $timezone   Optional timezone, if not provided date_default_timezone_get() will be used\n     *\n     * @phpstan-param array<(callable(LogRecord): LogRecord)|ProcessorInterface> $processors\n     */\n    public function __construct(string $name, array $handlers = [], array $processors = [], DateTimeZone|null $timezone = null)\n    {\n        $this->name = $name;\n        $this->setHandlers($handlers);\n        $this->processors = $processors;\n        $this->timezone = $timezone ?? new DateTimeZone(date_default_timezone_get());\n        $this->fiberLogDepth = new \\WeakMap();\n    }\n\n    public function getName(): string\n    {\n        return $this->name;\n    }\n\n    /**\n     * Return a new cloned instance with the name changed\n     *\n     * @return static\n     */\n    public function withName(string $name): self\n    {\n        $new = clone $this;\n        $new->name = $name;\n\n        return $new;\n    }\n\n    /**\n     * Pushes a handler on to the stack.\n     *\n     * @return $this\n     */\n    public function pushHandler(HandlerInterface $handler): self\n    {\n        array_unshift($this->handlers, $handler);\n\n        return $this;\n    }\n\n    /**\n     * Pops a handler from the stack\n     *\n     * @throws \\LogicException If empty handler stack\n     */\n    public function popHandler(): HandlerInterface\n    {\n        if (0 === \\count($this->handlers)) {\n            throw new \\LogicException('You tried to pop from an empty handler stack.');\n        }\n\n        return array_shift($this->handlers);\n    }\n\n    /**\n     * Set handlers, replacing all existing ones.\n     *\n     * If a map is passed, keys will be ignored.\n     *\n     * @param  list<HandlerInterface> $handlers\n     * @return $this\n     */\n    public function setHandlers(array $handlers): self\n    {\n        $this->handlers = [];\n        foreach (array_reverse($handlers) as $handler) {\n            $this->pushHandler($handler);\n        }\n\n        return $this;\n    }\n\n    /**\n     * @return list<HandlerInterface>\n     */\n    public function getHandlers(): array\n    {\n        return $this->handlers;\n    }\n\n    /**\n     * Adds a processor on to the stack.\n     *\n     * @phpstan-param ProcessorInterface|(callable(LogRecord): LogRecord) $callback\n     * @return $this\n     */\n    public function pushProcessor(ProcessorInterface|callable $callback): self\n    {\n        array_unshift($this->processors, $callback);\n\n        return $this;\n    }\n\n    /**\n     * Removes the processor on top of the stack and returns it.\n     *\n     * @phpstan-return ProcessorInterface|(callable(LogRecord): LogRecord)\n     * @throws \\LogicException If empty processor stack\n     */\n    public function popProcessor(): callable\n    {\n        if (0 === \\count($this->processors)) {\n            throw new \\LogicException('You tried to pop from an empty processor stack.');\n        }\n\n        return array_shift($this->processors);\n    }\n\n    /**\n     * @return callable[]\n     * @phpstan-return array<ProcessorInterface|(callable(LogRecord): LogRecord)>\n     */\n    public function getProcessors(): array\n    {\n        return $this->processors;\n    }\n\n    /**\n     * Control the use of microsecond resolution timestamps in the 'datetime'\n     * member of new records.\n     *\n     * As of PHP7.1 microseconds are always included by the engine, so\n     * there is no performance penalty and Monolog 2 enabled microseconds\n     * by default. This function lets you disable them though in case you want\n     * to suppress microseconds from the output.\n     *\n     * @param  bool  $micro True to use microtime() to create timestamps\n     * @return $this\n     */\n    public function useMicrosecondTimestamps(bool $micro): self\n    {\n        $this->microsecondTimestamps = $micro;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function useLoggingLoopDetection(bool $detectCycles): self\n    {\n        $this->detectCycles = $detectCycles;\n\n        return $this;\n    }\n\n    /**\n     * Adds a log record.\n     *\n     * @param  int                    $level    The logging level (a Monolog or RFC 5424 level)\n     * @param  string                 $message  The log message\n     * @param  mixed[]                $context  The log context\n     * @param  JsonSerializableDateTimeImmutable|null $datetime Optional log date to log into the past or future\n     *\n     * @return bool                   Whether the record has been processed\n     *\n     * @phpstan-param value-of<Level::VALUES>|Level $level\n     */\n    public function addRecord(int|Level $level, string $message, array $context = [], JsonSerializableDateTimeImmutable|null $datetime = null): bool\n    {\n        if (\\is_int($level) && isset(self::RFC_5424_LEVELS[$level])) {\n            $level = self::RFC_5424_LEVELS[$level];\n        }\n\n        if ($this->detectCycles) {\n            if (null !== ($fiber = Fiber::getCurrent())) {\n                $logDepth = $this->fiberLogDepth[$fiber] = ($this->fiberLogDepth[$fiber] ?? 0) + 1;\n            } else {\n                $logDepth = ++$this->logDepth;\n            }\n        } else {\n            $logDepth = 0;\n        }\n\n        if ($logDepth === 3) {\n            $this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.');\n\n            return false;\n        } elseif ($logDepth >= 5) { // log depth 4 is let through, so we can log the warning above\n            return false;\n        }\n\n        try {\n            $recordInitialized = \\count($this->processors) === 0;\n\n            $record = new LogRecord(\n                datetime: $datetime ?? new JsonSerializableDateTimeImmutable($this->microsecondTimestamps, $this->timezone),\n                channel: $this->name,\n                level: self::toMonologLevel($level),\n                message: $message,\n                context: $context,\n                extra: [],\n            );\n            $handled = false;\n\n            foreach ($this->handlers as $handler) {\n                if (false === $recordInitialized) {\n                    // skip initializing the record as long as no handler is going to handle it\n                    if (!$handler->isHandling($record)) {\n                        continue;\n                    }\n\n                    try {\n                        foreach ($this->processors as $processor) {\n                            $record = $processor($record);\n                        }\n                        $recordInitialized = true;\n                    } catch (Throwable $e) {\n                        $this->handleException($e, $record);\n\n                        return true;\n                    }\n                }\n\n                // once the record is initialized, send it to all handlers as long as the bubbling chain is not interrupted\n                try {\n                    $handled = true;\n                    if (true === $handler->handle(clone $record)) {\n                        break;\n                    }\n                } catch (Throwable $e) {\n                    $this->handleException($e, $record);\n\n                    return true;\n                }\n            }\n\n            return $handled;\n        } finally {\n            if ($this->detectCycles) {\n                if (isset($fiber)) {\n                    $this->fiberLogDepth[$fiber]--;\n                } else {\n                    $this->logDepth--;\n                }\n            }\n        }\n    }\n\n    /**\n     * Ends a log cycle and frees all resources used by handlers.\n     *\n     * Closing a Handler means flushing all buffers and freeing any open resources/handles.\n     * Handlers that have been closed should be able to accept log records again and re-open\n     * themselves on demand, but this may not always be possible depending on implementation.\n     *\n     * This is useful at the end of a request and will be called automatically on every handler\n     * when they get destructed.\n     */\n    public function close(): void\n    {\n        foreach ($this->handlers as $handler) {\n            $handler->close();\n        }\n    }\n\n    /**\n     * Ends a log cycle and resets all handlers and processors to their initial state.\n     *\n     * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal\n     * state, and getting it back to a state in which it can receive log records again.\n     *\n     * This is useful in case you want to avoid logs leaking between two requests or jobs when you\n     * have a long running process like a worker or an application server serving multiple requests\n     * in one process.\n     */\n    public function reset(): void\n    {\n        foreach ($this->handlers as $handler) {\n            if ($handler instanceof ResettableInterface) {\n                $handler->reset();\n            }\n        }\n\n        foreach ($this->processors as $processor) {\n            if ($processor instanceof ResettableInterface) {\n                $processor->reset();\n            }\n        }\n    }\n\n    /**\n     * Gets the name of the logging level as a string.\n     *\n     * This still returns a string instead of a Level for BC, but new code should not rely on this method.\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException If level is not defined\n     *\n     * @phpstan-param  value-of<Level::VALUES>|Level $level\n     * @phpstan-return value-of<Level::NAMES>\n     *\n     * @deprecated Since 3.0, use {@see toMonologLevel} or {@see \\Monolog\\Level->getName()} instead\n     */\n    public static function getLevelName(int|Level $level): string\n    {\n        return self::toMonologLevel($level)->getName();\n    }\n\n    /**\n     * Converts PSR-3 levels to Monolog ones if necessary\n     *\n     * @param  int|string|Level|LogLevel::*      $level Level number (monolog) or name (PSR-3)\n     * @throws \\Psr\\Log\\InvalidArgumentException If level is not defined\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public static function toMonologLevel(string|int|Level $level): Level\n    {\n        if ($level instanceof Level) {\n            return $level;\n        }\n\n        if (\\is_string($level)) {\n            if (is_numeric($level)) {\n                $levelEnum = Level::tryFrom((int) $level);\n                if ($levelEnum === null) {\n                    throw new InvalidArgumentException('Level \"'.$level.'\" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES));\n                }\n\n                return $levelEnum;\n            }\n\n            // Contains first char of all log levels and avoids using strtoupper() which may have\n            // strange results depending on locale (for example, \"i\" will become \"İ\" in Turkish locale)\n            $upper = strtr(substr($level, 0, 1), 'dinweca', 'DINWECA') . strtolower(substr($level, 1));\n            if (\\defined(Level::class.'::'.$upper)) {\n                return \\constant(Level::class . '::' . $upper);\n            }\n\n            throw new InvalidArgumentException('Level \"'.$level.'\" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES));\n        }\n\n        $levelEnum = Level::tryFrom($level);\n        if ($levelEnum === null) {\n            throw new InvalidArgumentException('Level \"'.var_export($level, true).'\" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES));\n        }\n\n        return $levelEnum;\n    }\n\n    /**\n     * Checks whether the Logger has a handler that listens on the given level\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function isHandling(int|string|Level $level): bool\n    {\n        $record = new LogRecord(\n            datetime: new JsonSerializableDateTimeImmutable($this->microsecondTimestamps, $this->timezone),\n            channel: $this->name,\n            message: '',\n            level: self::toMonologLevel($level),\n        );\n\n        foreach ($this->handlers as $handler) {\n            if ($handler->isHandling($record)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Set a custom exception handler that will be called if adding a new record fails\n     *\n     * The Closure will receive an exception object and the record that failed to be logged\n     *\n     * @return $this\n     */\n    public function setExceptionHandler(Closure|null $callback): self\n    {\n        $this->exceptionHandler = $callback;\n\n        return $this;\n    }\n\n    public function getExceptionHandler(): Closure|null\n    {\n        return $this->exceptionHandler;\n    }\n\n    /**\n     * Adds a log record at an arbitrary level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param mixed             $level   The log level (a Monolog, PSR-3 or RFC 5424 level)\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     *\n     * @phpstan-param Level|LogLevel::* $level\n     */\n    public function log($level, string|\\Stringable $message, array $context = []): void\n    {\n        if (!$level instanceof Level) {\n            if (!\\is_string($level) && !\\is_int($level)) {\n                throw new \\InvalidArgumentException('$level is expected to be a string, int or '.Level::class.' instance');\n            }\n\n            if (isset(self::RFC_5424_LEVELS[$level])) {\n                $level = self::RFC_5424_LEVELS[$level];\n            }\n\n            $level = static::toMonologLevel($level);\n        }\n\n        $this->addRecord($level, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the DEBUG level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function debug(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Debug, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the INFO level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function info(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Info, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the NOTICE level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function notice(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Notice, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the WARNING level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function warning(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Warning, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the ERROR level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function error(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Error, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the CRITICAL level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function critical(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Critical, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the ALERT level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function alert(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Alert, (string) $message, $context);\n    }\n\n    /**\n     * Adds a log record at the EMERGENCY level.\n     *\n     * This method allows for compatibility with common interfaces.\n     *\n     * @param string|Stringable $message The log message\n     * @param mixed[]           $context The log context\n     */\n    public function emergency(string|\\Stringable $message, array $context = []): void\n    {\n        $this->addRecord(Level::Emergency, (string) $message, $context);\n    }\n\n    /**\n     * Sets the timezone to be used for the timestamp of log records.\n     *\n     * @return $this\n     */\n    public function setTimezone(DateTimeZone $tz): self\n    {\n        $this->timezone = $tz;\n\n        return $this;\n    }\n\n    /**\n     * Returns the timezone to be used for the timestamp of log records.\n     */\n    public function getTimezone(): DateTimeZone\n    {\n        return $this->timezone;\n    }\n\n    /**\n     * Delegates exception management to the custom exception handler,\n     * or throws the exception if no custom handler is set.\n     */\n    protected function handleException(Throwable $e, LogRecord $record): void\n    {\n        if (null === $this->exceptionHandler) {\n            throw $e;\n        }\n\n        ($this->exceptionHandler)($e, $record);\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function __serialize(): array\n    {\n        return [\n            'name' => $this->name,\n            'handlers' => $this->handlers,\n            'processors' => $this->processors,\n            'microsecondTimestamps' => $this->microsecondTimestamps,\n            'timezone' => $this->timezone,\n            'exceptionHandler' => $this->exceptionHandler,\n            'logDepth' => $this->logDepth,\n            'detectCycles' => $this->detectCycles,\n        ];\n    }\n\n    /**\n     * @param array<string, mixed> $data\n     */\n    public function __unserialize(array $data): void\n    {\n        foreach (['name', 'handlers', 'processors', 'microsecondTimestamps', 'timezone', 'exceptionHandler', 'logDepth', 'detectCycles'] as $property) {\n            if (isset($data[$property])) {\n                $this->$property = $data[$property];\n            }\n        }\n\n        $this->fiberLogDepth = new \\WeakMap();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Generates a context from a Closure if the Closure is the only value\n * in the context\n *\n * It helps reduce the performance impact of debug logs if they do\n * need to create lots of context information. If this processor is added\n * on the correct handler the context data will only be generated\n * when the logs are actually logged to that handler, which is useful when\n * using FingersCrossedHandler or other filtering handlers to conditionally\n * log records.\n */\nclass ClosureContextProcessor implements ProcessorInterface\n{\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $context = $record->context;\n        if (isset($context[0]) && 1 === \\count($context) && $context[0] instanceof \\Closure) {\n            try {\n                $context = $context[0]();\n            } catch (\\Throwable $e) {\n                $context = [\n                    'error_on_context_generation' => $e->getMessage(),\n                    'exception' => $e,\n                ];\n            }\n\n            if (!\\is_array($context)) {\n                $context = [$context];\n            }\n\n            $record = $record->with(context: $context);\n        }\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Injects Git branch and Git commit SHA in all records\n *\n * @author Nick Otter\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass GitProcessor implements ProcessorInterface\n{\n    private Level $level;\n    /** @var array{branch: string, commit: string}|array<never>|null */\n    private static $cache = null;\n\n    /**\n     * @param int|string|Level|LogLevel::* $level The minimum logging level at which this Processor will be triggered\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function __construct(int|string|Level $level = Level::Debug)\n    {\n        $this->level = Logger::toMonologLevel($level);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        // return if the level is not high enough\n        if ($record->level->isLowerThan($this->level)) {\n            return $record;\n        }\n\n        $record->extra['git'] = self::getGitInfo();\n\n        return $record;\n    }\n\n    /**\n     * @return array{branch: string, commit: string}|array<never>\n     */\n    private static function getGitInfo(): array\n    {\n        if (self::$cache !== null) {\n            return self::$cache;\n        }\n\n        $branches = shell_exec('git branch -v --no-abbrev');\n        if (\\is_string($branches) && 1 === preg_match('{^\\* (.+?)\\s+([a-f0-9]{40})(?:\\s|$)}m', $branches, $matches)) {\n            return self::$cache = [\n                'branch' => $matches[1],\n                'commit' => $matches[2],\n            ];\n        }\n\n        return self::$cache = [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Injects value of gethostname in all records\n */\nclass HostnameProcessor implements ProcessorInterface\n{\n    private static string $host;\n\n    public function __construct()\n    {\n        self::$host = (string) gethostname();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $record->extra['hostname'] = self::$host;\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Injects line/file:class/function where the log message came from\n *\n * Warning: This only works if the handler processes the logs directly.\n * If you put the processor on a handler that is behind a FingersCrossedHandler\n * for example, the processor will only be called once the trigger level is reached,\n * and all the log records will have the same file/line/.. data from the call that\n * triggered the FingersCrossedHandler.\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass IntrospectionProcessor implements ProcessorInterface\n{\n    protected Level $level;\n\n    /** @var string[] */\n    protected array $skipClassesPartials;\n\n    protected int $skipStackFramesCount;\n\n    protected const SKIP_FUNCTIONS = [\n        'call_user_func',\n        'call_user_func_array',\n    ];\n\n    protected const SKIP_CLASSES = [\n        'Monolog\\\\',\n    ];\n\n    /**\n     * @param string|int|Level $level               The minimum logging level at which this Processor will be triggered\n     * @param string[]         $skipClassesPartials\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function __construct(int|string|Level $level = Level::Debug, array $skipClassesPartials = [], int $skipStackFramesCount = 0)\n    {\n        $this->level = Logger::toMonologLevel($level);\n        $this->skipClassesPartials = array_merge(static::SKIP_CLASSES, $skipClassesPartials);\n        $this->skipStackFramesCount = $skipStackFramesCount;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        // return if the level is not high enough\n        if ($record->level->isLowerThan($this->level)) {\n            return $record;\n        }\n\n        $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);\n\n        // skip first since it's always the current method\n        array_shift($trace);\n        // the call_user_func call is also skipped\n        array_shift($trace);\n\n        $i = 0;\n\n        while ($this->isTraceClassOrSkippedFunction($trace, $i)) {\n            if (isset($trace[$i]['class'])) {\n                foreach ($this->skipClassesPartials as $part) {\n                    if (strpos($trace[$i]['class'], $part) !== false) {\n                        $i++;\n\n                        continue 2;\n                    }\n                }\n            } elseif (\\in_array($trace[$i]['function'], self::SKIP_FUNCTIONS, true)) {\n                $i++;\n\n                continue;\n            }\n\n            break;\n        }\n\n        $i += $this->skipStackFramesCount;\n\n        // we should have the call source now\n        $record->extra = array_merge(\n            $record->extra,\n            [\n                'file'      => $trace[$i - 1]['file'] ?? null,\n                'line'      => $trace[$i - 1]['line'] ?? null,\n                'class'     => $trace[$i]['class'] ?? null,\n                'callType'  => $trace[$i]['type'] ?? null,\n                'function'  => $trace[$i]['function'] ?? null,\n            ]\n        );\n\n        return $record;\n    }\n\n    /**\n     * @param array<mixed> $trace\n     */\n    private function isTraceClassOrSkippedFunction(array $trace, int $index): bool\n    {\n        if (!isset($trace[$index])) {\n            return false;\n        }\n\n        return isset($trace[$index]['class']) || \\in_array($trace[$index]['function'], self::SKIP_FUNCTIONS, true);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Injects sys_getloadavg in all records @see https://www.php.net/manual/en/function.sys-getloadavg.php\n *\n * @author Johan Vlaar <johan.vlaar.1994@gmail.com>\n */\nclass LoadAverageProcessor implements ProcessorInterface\n{\n    public const LOAD_1_MINUTE = 0;\n    public const LOAD_5_MINUTE = 1;\n    public const LOAD_15_MINUTE = 2;\n\n    private const AVAILABLE_LOAD = [\n        self::LOAD_1_MINUTE,\n        self::LOAD_5_MINUTE,\n        self::LOAD_15_MINUTE,\n    ];\n\n    /**\n     * @var int\n     */\n    protected $avgSystemLoad;\n\n    /**\n     * @param self::LOAD_* $avgSystemLoad\n     */\n    public function __construct(int $avgSystemLoad = self::LOAD_1_MINUTE)\n    {\n        if (!\\in_array($avgSystemLoad, self::AVAILABLE_LOAD, true)) {\n            throw new \\InvalidArgumentException(sprintf('Invalid average system load: `%s`', $avgSystemLoad));\n        }\n        $this->avgSystemLoad = $avgSystemLoad;\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        if (!\\function_exists('sys_getloadavg')) {\n            return $record;\n        }\n        $usage = sys_getloadavg();\n        if (false === $usage) {\n            return $record;\n        }\n\n        $record->extra['load_average'] = $usage[$this->avgSystemLoad];\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Injects memory_get_peak_usage in all records\n *\n * @see Monolog\\Processor\\MemoryProcessor::__construct() for options\n * @author Rob Jensen\n */\nclass MemoryPeakUsageProcessor extends MemoryProcessor\n{\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $usage = memory_get_peak_usage($this->realUsage);\n\n        if ($this->useFormatting) {\n            $usage = $this->formatBytes($usage);\n        }\n\n        $record->extra['memory_peak_usage'] = $usage;\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\n/**\n * Some methods that are common for all memory processors\n *\n * @author Rob Jensen\n */\nabstract class MemoryProcessor implements ProcessorInterface\n{\n    /**\n     * @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported.\n     */\n    protected bool $realUsage;\n\n    /**\n     * @var bool If true, then format memory size to human readable string (MB, KB, B depending on size)\n     */\n    protected bool $useFormatting;\n\n    /**\n     * @param bool $realUsage     Set this to true to get the real size of memory allocated from system.\n     * @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size)\n     */\n    public function __construct(bool $realUsage = true, bool $useFormatting = true)\n    {\n        $this->realUsage = $realUsage;\n        $this->useFormatting = $useFormatting;\n    }\n\n    /**\n     * Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is\n     *\n     * @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as int\n     */\n    protected function formatBytes(int $bytes)\n    {\n        if (!$this->useFormatting) {\n            return $bytes;\n        }\n\n        if ($bytes > 1024 * 1024) {\n            return round($bytes / 1024 / 1024, 2).' MB';\n        } elseif ($bytes > 1024) {\n            return round($bytes / 1024, 2).' KB';\n        }\n\n        return $bytes . ' B';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Injects memory_get_usage in all records\n *\n * @see Monolog\\Processor\\MemoryProcessor::__construct() for options\n * @author Rob Jensen\n */\nclass MemoryUsageProcessor extends MemoryProcessor\n{\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $usage = memory_get_usage($this->realUsage);\n\n        if ($this->useFormatting) {\n            $usage = $this->formatBytes($usage);\n        }\n\n        $record->extra['memory_usage'] = $usage;\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Psr\\Log\\LogLevel;\nuse Monolog\\LogRecord;\n\n/**\n * Injects Hg branch and Hg revision number in all records\n *\n * @author Jonathan A. Schweder <jonathanschweder@gmail.com>\n */\nclass MercurialProcessor implements ProcessorInterface\n{\n    private Level $level;\n    /** @var array{branch: string, revision: string}|array<never>|null */\n    private static $cache = null;\n\n    /**\n     * @param int|string|Level $level The minimum logging level at which this Processor will be triggered\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function __construct(int|string|Level $level = Level::Debug)\n    {\n        $this->level = Logger::toMonologLevel($level);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        // return if the level is not high enough\n        if ($record->level->isLowerThan($this->level)) {\n            return $record;\n        }\n\n        $record->extra['hg'] = self::getMercurialInfo();\n\n        return $record;\n    }\n\n    /**\n     * @return array{branch: string, revision: string}|array<never>\n     */\n    private static function getMercurialInfo(): array\n    {\n        if (self::$cache !== null) {\n            return self::$cache;\n        }\n\n        $result = explode(' ', trim((string) shell_exec('hg id -nb')));\n        if (\\count($result) >= 3) {\n            return self::$cache = [\n                'branch' => $result[1],\n                'revision' => $result[2],\n            ];\n        }\n        if (\\count($result) === 2) {\n            return self::$cache = [\n                'branch' => $result[1],\n                'revision' => $result[0],\n            ];\n        }\n\n        return self::$cache = [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Adds value of getmypid into records\n *\n * @author Andreas Hörnicke\n */\nclass ProcessIdProcessor implements ProcessorInterface\n{\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $record->extra['process_id'] = getmypid();\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * An optional interface to allow labelling Monolog processors.\n *\n * @author Nicolas Grekas <p@tchwork.com>\n */\ninterface ProcessorInterface\n{\n    /**\n     * @return LogRecord The processed record\n     */\n    public function __invoke(LogRecord $record);\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\Utils;\nuse Monolog\\LogRecord;\n\n/**\n * Processes a record's message according to PSR-3 rules\n *\n * It replaces {foo} with the value from $context['foo']\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass PsrLogMessageProcessor implements ProcessorInterface\n{\n    public const SIMPLE_DATE = \"Y-m-d\\TH:i:s.uP\";\n\n    private ?string $dateFormat;\n\n    private bool $removeUsedContextFields;\n\n    /**\n     * @param string|null $dateFormat              The format of the timestamp: one supported by DateTime::format\n     * @param bool        $removeUsedContextFields If set to true the fields interpolated into message gets unset\n     */\n    public function __construct(?string $dateFormat = null, bool $removeUsedContextFields = false)\n    {\n        $this->dateFormat = $dateFormat;\n        $this->removeUsedContextFields = $removeUsedContextFields;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        if (false === strpos($record->message, '{')) {\n            return $record;\n        }\n\n        $replacements = [];\n        $context = $record->context;\n\n        foreach ($context as $key => $val) {\n            $placeholder = '{' . $key . '}';\n            if (strpos($record->message, $placeholder) === false) {\n                continue;\n            }\n\n            if (null === $val || \\is_scalar($val) || (\\is_object($val) && method_exists($val, \"__toString\"))) {\n                $replacements[$placeholder] = $val;\n            } elseif ($val instanceof \\DateTimeInterface) {\n                if (null === $this->dateFormat && $val instanceof \\Monolog\\JsonSerializableDateTimeImmutable) {\n                    // handle monolog dates using __toString if no specific dateFormat was asked for\n                    // so that it follows the useMicroseconds flag\n                    $replacements[$placeholder] = (string) $val;\n                } else {\n                    $replacements[$placeholder] = $val->format($this->dateFormat ?? static::SIMPLE_DATE);\n                }\n            } elseif ($val instanceof \\UnitEnum) {\n                $replacements[$placeholder] = $val instanceof \\BackedEnum ? $val->value : $val->name;\n            } elseif (\\is_object($val)) {\n                $replacements[$placeholder] = '[object '.Utils::getClass($val).']';\n            } elseif (\\is_array($val)) {\n                $replacements[$placeholder] = 'array'.Utils::jsonEncode($val, null, true);\n            } else {\n                $replacements[$placeholder] = '['.\\gettype($val).']';\n            }\n\n            if ($this->removeUsedContextFields) {\n                unset($context[$key]);\n            }\n        }\n\n        return $record->with(message: strtr($record->message, $replacements), context: $context);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\LogRecord;\n\n/**\n * Adds a tags array into record\n *\n * @author Martijn Riemers\n */\nclass TagProcessor implements ProcessorInterface\n{\n    /** @var string[] */\n    private array $tags;\n\n    /**\n     * @param string[] $tags\n     */\n    public function __construct(array $tags = [])\n    {\n        $this->setTags($tags);\n    }\n\n    /**\n     * @param  string[] $tags\n     * @return $this\n     */\n    public function addTags(array $tags = []): self\n    {\n        $this->tags = array_merge($this->tags, $tags);\n\n        return $this;\n    }\n\n    /**\n     * @param  string[] $tags\n     * @return $this\n     */\n    public function setTags(array $tags = []): self\n    {\n        $this->tags = $tags;\n\n        return $this;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $record->extra['tags'] = $this->tags;\n\n        return $record;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse Monolog\\ResettableInterface;\nuse Monolog\\LogRecord;\n\n/**\n * Adds a unique identifier into records\n *\n * @author Simon Mönch <sm@webfactory.de>\n */\nclass UidProcessor implements ProcessorInterface, ResettableInterface\n{\n    /** @var non-empty-string */\n    private string $uid;\n\n    /**\n     * @param int<1, 32> $length\n     */\n    public function __construct(int $length = 7)\n    {\n        if ($length > 32 || $length < 1) {\n            throw new \\InvalidArgumentException('The uid length must be an integer between 1 and 32');\n        }\n\n        $this->uid = $this->generateUid($length);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        $record->extra['uid'] = $this->uid;\n\n        return $record;\n    }\n\n    public function getUid(): string\n    {\n        return $this->uid;\n    }\n\n    public function reset(): void\n    {\n        $this->uid = $this->generateUid(\\strlen($this->uid));\n    }\n\n    /**\n     * @param  positive-int     $length\n     * @return non-empty-string\n     */\n    private function generateUid(int $length): string\n    {\n        return substr(bin2hex(random_bytes((int) ceil($length / 2))), 0, $length);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Processor;\n\nuse ArrayAccess;\nuse Monolog\\LogRecord;\n\n/**\n * Injects url/method and remote IP of the current web request in all records\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass WebProcessor implements ProcessorInterface\n{\n    /**\n     * @var array<string, mixed>|ArrayAccess<string, mixed>\n     */\n    protected array|ArrayAccess $serverData;\n\n    /**\n     * Default fields\n     *\n     * Array is structured as [key in record.extra => key in $serverData]\n     *\n     * @var array<string, string>\n     */\n    protected array $extraFields = [\n        'url'         => 'REQUEST_URI',\n        'ip'          => 'REMOTE_ADDR',\n        'http_method' => 'REQUEST_METHOD',\n        'server'      => 'SERVER_NAME',\n        'referrer'    => 'HTTP_REFERER',\n        'user_agent'  => 'HTTP_USER_AGENT',\n    ];\n\n    /**\n     * @param array<string, mixed>|ArrayAccess<string, mixed>|null $serverData  Array or object w/ ArrayAccess that provides access to the $_SERVER data\n     * @param array<string, string>|array<string>|null             $extraFields Field names and the related key inside $serverData to be added (or just a list of field names to use the default configured $serverData mapping). If not provided it defaults to: [url, ip, http_method, server, referrer] + unique_id if present in server data\n     */\n    public function __construct(array|ArrayAccess|null $serverData = null, array|null $extraFields = null)\n    {\n        if (null === $serverData) {\n            $this->serverData = &$_SERVER;\n        } else {\n            $this->serverData = $serverData;\n        }\n\n        $defaultEnabled = ['url', 'ip', 'http_method', 'server', 'referrer'];\n        if (isset($this->serverData['UNIQUE_ID'])) {\n            $this->extraFields['unique_id'] = 'UNIQUE_ID';\n            $defaultEnabled[] = 'unique_id';\n        }\n\n        if (null === $extraFields) {\n            $extraFields = $defaultEnabled;\n        }\n        if (isset($extraFields[0])) {\n            foreach (array_keys($this->extraFields) as $fieldName) {\n                if (!\\in_array($fieldName, $extraFields, true)) {\n                    unset($this->extraFields[$fieldName]);\n                }\n            }\n        } else {\n            $this->extraFields = $extraFields;\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function __invoke(LogRecord $record): LogRecord\n    {\n        // skip processing if for some reason request data\n        // is not present (CLI or wonky SAPIs)\n        if (!isset($this->serverData['REQUEST_URI'])) {\n            return $record;\n        }\n\n        $record->extra = $this->appendExtraFields($record->extra);\n\n        return $record;\n    }\n\n    /**\n     * @return $this\n     */\n    public function addExtraField(string $extraName, string $serverName): self\n    {\n        $this->extraFields[$extraName] = $serverName;\n\n        return $this;\n    }\n\n    /**\n     * @param  mixed[] $extra\n     * @return mixed[]\n     */\n    private function appendExtraFields(array $extra): array\n    {\n        foreach ($this->extraFields as $extraName => $serverName) {\n            $extra[$extraName] = $this->serverData[$serverName] ?? null;\n        }\n\n        return $extra;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Registry.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse InvalidArgumentException;\n\n/**\n * Monolog log registry\n *\n * Allows to get `Logger` instances in the global scope\n * via static method calls on this class.\n *\n * <code>\n * $application = new Monolog\\Logger('application');\n * $api = new Monolog\\Logger('api');\n *\n * Monolog\\Registry::addLogger($application);\n * Monolog\\Registry::addLogger($api);\n *\n * function testLogger()\n * {\n *     Monolog\\Registry::api()->error('Sent to $api Logger instance');\n *     Monolog\\Registry::application()->error('Sent to $application Logger instance');\n * }\n * </code>\n *\n * @author Tomas Tatarko <tomas@tatarko.sk>\n */\nclass Registry\n{\n    /**\n     * List of all loggers in the registry (by named indexes)\n     *\n     * @var Logger[]\n     */\n    private static array $loggers = [];\n\n    /**\n     * Adds new logging channel to the registry\n     *\n     * @param  Logger                    $logger    Instance of the logging channel\n     * @param  string|null               $name      Name of the logging channel ($logger->getName() by default)\n     * @param  bool                      $overwrite Overwrite instance in the registry if the given name already exists?\n     * @throws \\InvalidArgumentException If $overwrite set to false and named Logger instance already exists\n     */\n    public static function addLogger(Logger $logger, ?string $name = null, bool $overwrite = false): void\n    {\n        $name = $name ?? $logger->getName();\n\n        if (isset(self::$loggers[$name]) && !$overwrite) {\n            throw new InvalidArgumentException('Logger with the given name already exists');\n        }\n\n        self::$loggers[$name] = $logger;\n    }\n\n    /**\n     * Checks if such logging channel exists by name or instance\n     *\n     * @param string|Logger $logger Name or logger instance\n     */\n    public static function hasLogger($logger): bool\n    {\n        if ($logger instanceof Logger) {\n            $index = array_search($logger, self::$loggers, true);\n\n            return false !== $index;\n        }\n\n        return isset(self::$loggers[$logger]);\n    }\n\n    /**\n     * Removes instance from registry by name or instance\n     *\n     * @param string|Logger $logger Name or logger instance\n     */\n    public static function removeLogger($logger): void\n    {\n        if ($logger instanceof Logger) {\n            if (false !== ($idx = array_search($logger, self::$loggers, true))) {\n                unset(self::$loggers[$idx]);\n            }\n        } else {\n            unset(self::$loggers[$logger]);\n        }\n    }\n\n    /**\n     * Clears the registry\n     */\n    public static function clear(): void\n    {\n        self::$loggers = [];\n    }\n\n    /**\n     * Gets Logger instance from the registry\n     *\n     * @param  string                    $name Name of the requested Logger instance\n     * @throws \\InvalidArgumentException If named Logger instance is not in the registry\n     */\n    public static function getInstance(string $name): Logger\n    {\n        if (!isset(self::$loggers[$name])) {\n            throw new InvalidArgumentException(sprintf('Requested \"%s\" logger instance is not in the registry', $name));\n        }\n\n        return self::$loggers[$name];\n    }\n\n    /**\n     * Gets Logger instance from the registry via static method call\n     *\n     * @param  string                    $name      Name of the requested Logger instance\n     * @param  mixed[]                   $arguments Arguments passed to static method call\n     * @throws \\InvalidArgumentException If named Logger instance is not in the registry\n     * @return Logger                    Requested instance of Logger\n     */\n    public static function __callStatic(string $name, array $arguments): Logger\n    {\n        return self::getInstance($name);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/ResettableInterface.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\n/**\n * Handler or Processor implementing this interface will be reset when Logger::reset() is called.\n *\n * Resetting ends a log cycle gets them back to their initial state.\n *\n * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal\n * state, and getting it back to a state in which it can receive log records again.\n *\n * This is useful in case you want to avoid logs leaking between two requests or jobs when you\n * have a long running process like a worker or an application server serving multiple requests\n * in one process.\n *\n * @author Grégoire Pineau <lyrixx@lyrixx.info>\n */\ninterface ResettableInterface\n{\n    public function reset(): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/SignalHandler.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nuse Psr\\Log\\LoggerInterface;\nuse Psr\\Log\\LogLevel;\nuse ReflectionExtension;\n\n/**\n * Monolog POSIX signal handler\n *\n * @author Robert Gust-Bardon <robert@gust-bardon.org>\n */\nclass SignalHandler\n{\n    private LoggerInterface $logger;\n\n    /** @var array<int, callable|string|int> SIG_DFL, SIG_IGN or previous callable */\n    private array $previousSignalHandler = [];\n    /** @var array<int, \\Psr\\Log\\LogLevel::*> */\n    private array $signalLevelMap = [];\n    /** @var array<int, bool> */\n    private array $signalRestartSyscalls = [];\n\n    public function __construct(LoggerInterface $logger)\n    {\n        $this->logger = $logger;\n    }\n\n    /**\n     * @param  int|string|Level $level Level or level name\n     * @return $this\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    public function registerSignalHandler(int $signo, int|string|Level $level = LogLevel::CRITICAL, bool $callPrevious = true, bool $restartSyscalls = true, ?bool $async = true): self\n    {\n        if (!\\extension_loaded('pcntl') || !\\function_exists('pcntl_signal')) {\n            return $this;\n        }\n\n        $level = Logger::toMonologLevel($level)->toPsrLogLevel();\n\n        if ($callPrevious) {\n            $handler = pcntl_signal_get_handler($signo);\n            $this->previousSignalHandler[$signo] = $handler;\n        } else {\n            unset($this->previousSignalHandler[$signo]);\n        }\n        $this->signalLevelMap[$signo] = $level;\n        $this->signalRestartSyscalls[$signo] = $restartSyscalls;\n\n        if ($async !== null) {\n            pcntl_async_signals($async);\n        }\n\n        pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls);\n\n        return $this;\n    }\n\n    /**\n     * @param mixed $siginfo\n     */\n    public function handleSignal(int $signo, $siginfo = null): void\n    {\n        /** @var array<int, string> $signals */\n        static $signals = [];\n\n        if (\\count($signals) === 0 && \\extension_loaded('pcntl')) {\n            $pcntl = new ReflectionExtension('pcntl');\n            foreach ($pcntl->getConstants() as $name => $value) {\n                if (substr($name, 0, 3) === 'SIG' && $name[3] !== '_' && \\is_int($value)) {\n                    $signals[$value] = $name;\n                }\n            }\n        }\n\n        $level = $this->signalLevelMap[$signo] ?? LogLevel::CRITICAL;\n        $signal = $signals[$signo] ?? $signo;\n        $context = $siginfo ?? [];\n        $this->logger->log($level, sprintf('Program received signal %s', $signal), $context);\n\n        if (!isset($this->previousSignalHandler[$signo])) {\n            return;\n        }\n\n        if ($this->previousSignalHandler[$signo] === SIG_DFL) {\n            if (\\extension_loaded('pcntl') && \\function_exists('pcntl_signal') && \\function_exists('pcntl_sigprocmask') && \\function_exists('pcntl_signal_dispatch')\n                && \\extension_loaded('posix') && \\function_exists('posix_getpid') && \\function_exists('posix_kill')\n            ) {\n                $restartSyscalls = $this->signalRestartSyscalls[$signo] ?? true;\n                pcntl_signal($signo, SIG_DFL, $restartSyscalls);\n                pcntl_sigprocmask(SIG_UNBLOCK, [$signo], $oldset);\n                posix_kill(posix_getpid(), $signo);\n                pcntl_signal_dispatch();\n                pcntl_sigprocmask(SIG_SETMASK, $oldset);\n                pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls);\n            }\n        } elseif (\\is_callable($this->previousSignalHandler[$signo])) {\n            $this->previousSignalHandler[$signo]($signo, $siginfo);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Test/MonologTestCase.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Test;\n\nuse Monolog\\Level;\nuse Monolog\\Logger;\nuse Monolog\\LogRecord;\nuse Monolog\\JsonSerializableDateTimeImmutable;\nuse Monolog\\Formatter\\FormatterInterface;\nuse Psr\\Log\\LogLevel;\n\n/**\n * Lets you easily generate log records and a dummy formatter for testing purposes\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n */\nclass MonologTestCase extends \\PHPUnit\\Framework\\TestCase\n{\n    /**\n     * @param array<mixed> $context\n     * @param array<mixed> $extra\n     *\n     * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $level\n     */\n    protected function getRecord(int|string|Level $level = Level::Warning, string|\\Stringable $message = 'test', array $context = [], string $channel = 'test', \\DateTimeImmutable $datetime = new JsonSerializableDateTimeImmutable(true), array $extra = []): LogRecord\n    {\n        return new LogRecord(\n            message: (string) $message,\n            context: $context,\n            level: Logger::toMonologLevel($level),\n            channel: $channel,\n            datetime: $datetime,\n            extra: $extra,\n        );\n    }\n\n    /**\n     * @phpstan-return list<LogRecord>\n     */\n    protected function getMultipleRecords(): array\n    {\n        return [\n            $this->getRecord(Level::Debug, 'debug message 1'),\n            $this->getRecord(Level::Debug, 'debug message 2'),\n            $this->getRecord(Level::Info, 'information'),\n            $this->getRecord(Level::Warning, 'warning'),\n            $this->getRecord(Level::Error, 'error'),\n        ];\n    }\n\n    protected function getIdentityFormatter(): FormatterInterface\n    {\n        $formatter = $this->createMock(FormatterInterface::class);\n        $formatter->expects(self::any())\n            ->method('format')\n            ->willReturnCallback(function ($record) {\n                return $record->message;\n            });\n\n        return $formatter;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Test/TestCase.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog\\Test;\n\n/**\n * Lets you easily generate log records and a dummy formatter for testing purposes\n *\n * @author Jordi Boggiano <j.boggiano@seld.be>\n *\n * @deprecated use MonologTestCase instead.\n */\nclass TestCase extends MonologTestCase\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/monolog/monolog/src/Monolog/Utils.php",
    "content": "<?php declare(strict_types=1);\n\n/*\n * This file is part of the Monolog package.\n *\n * (c) Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Monolog;\n\nfinal class Utils\n{\n    const DEFAULT_JSON_FLAGS = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_INVALID_UTF8_SUBSTITUTE | JSON_PARTIAL_OUTPUT_ON_ERROR;\n\n    public static function getClass(object $object): string\n    {\n        $class = \\get_class($object);\n\n        if (false === ($pos = strpos($class, \"@anonymous\\0\"))) {\n            return $class;\n        }\n\n        if (false === ($parent = get_parent_class($class))) {\n            return substr($class, 0, $pos + 10);\n        }\n\n        return $parent . '@anonymous';\n    }\n\n    public static function substr(string $string, int $start, ?int $length = null): string\n    {\n        if (\\extension_loaded('mbstring')) {\n            return mb_strcut($string, $start, $length);\n        }\n\n        return substr($string, $start, (null === $length) ? \\strlen($string) : $length);\n    }\n\n    /**\n     * Makes sure if a relative path is passed in it is turned into an absolute path\n     *\n     * @param string $streamUrl stream URL or path without protocol\n     */\n    public static function canonicalizePath(string $streamUrl): string\n    {\n        $prefix = '';\n        if ('file://' === substr($streamUrl, 0, 7)) {\n            $streamUrl = substr($streamUrl, 7);\n            $prefix = 'file://';\n        }\n\n        // other type of stream, not supported\n        if (false !== strpos($streamUrl, '://')) {\n            return $streamUrl;\n        }\n\n        // already absolute\n        if (substr($streamUrl, 0, 1) === '/' || substr($streamUrl, 1, 1) === ':' || substr($streamUrl, 0, 2) === '\\\\\\\\') {\n            return $prefix.$streamUrl;\n        }\n\n        $streamUrl = getcwd() . '/' . $streamUrl;\n\n        return $prefix.$streamUrl;\n    }\n\n    /**\n     * Return the JSON representation of a value\n     *\n     * @param  mixed             $data\n     * @param  int               $encodeFlags  flags to pass to json encode, defaults to DEFAULT_JSON_FLAGS\n     * @param  bool              $ignoreErrors whether to ignore encoding errors or to throw on error, when ignored and the encoding fails, \"null\" is returned which is valid json for null\n     * @throws \\RuntimeException if encoding fails and errors are not ignored\n     * @return string            when errors are ignored and the encoding fails, \"null\" is returned which is valid json for null\n     */\n    public static function jsonEncode($data, ?int $encodeFlags = null, bool $ignoreErrors = false): string\n    {\n        if (null === $encodeFlags) {\n            $encodeFlags = self::DEFAULT_JSON_FLAGS;\n        }\n\n        if ($ignoreErrors) {\n            $json = @json_encode($data, $encodeFlags);\n            if (false === $json) {\n                return 'null';\n            }\n\n            return $json;\n        }\n\n        $json = json_encode($data, $encodeFlags);\n        if (false === $json) {\n            $json = self::handleJsonError(json_last_error(), $data);\n        }\n\n        return $json;\n    }\n\n    /**\n     * Handle a json_encode failure.\n     *\n     * If the failure is due to invalid string encoding, try to clean the\n     * input and encode again. If the second encoding attempt fails, the\n     * initial error is not encoding related or the input can't be cleaned then\n     * raise a descriptive exception.\n     *\n     * @param  int               $code        return code of json_last_error function\n     * @param  mixed             $data        data that was meant to be encoded\n     * @param  int               $encodeFlags flags to pass to json encode, defaults to JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION\n     * @throws \\RuntimeException if failure can't be corrected\n     * @return string            JSON encoded data after error correction\n     */\n    public static function handleJsonError(int $code, $data, ?int $encodeFlags = null): string\n    {\n        if ($code !== JSON_ERROR_UTF8) {\n            self::throwEncodeError($code, $data);\n        }\n\n        if (\\is_string($data)) {\n            self::detectAndCleanUtf8($data);\n        } elseif (\\is_array($data)) {\n            array_walk_recursive($data, ['Monolog\\Utils', 'detectAndCleanUtf8']);\n        } else {\n            self::throwEncodeError($code, $data);\n        }\n\n        if (null === $encodeFlags) {\n            $encodeFlags = self::DEFAULT_JSON_FLAGS;\n        }\n\n        $json = json_encode($data, $encodeFlags);\n\n        if ($json === false) {\n            self::throwEncodeError(json_last_error(), $data);\n        }\n\n        return $json;\n    }\n\n    /**\n     * Throws an exception according to a given code with a customized message\n     *\n     * @param  int               $code return code of json_last_error function\n     * @param  mixed             $data data that was meant to be encoded\n     * @throws \\RuntimeException\n     */\n    private static function throwEncodeError(int $code, $data): never\n    {\n        $msg = match ($code) {\n            JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',\n            JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch',\n            JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',\n            JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',\n            default => 'Unknown error',\n        };\n\n        throw new \\RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true));\n    }\n\n    /**\n     * Detect invalid UTF-8 string characters and convert to valid UTF-8.\n     *\n     * Valid UTF-8 input will be left unmodified, but strings containing\n     * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed\n     * original encoding of ISO-8859-15. This conversion may result in\n     * incorrect output if the actual encoding was not ISO-8859-15, but it\n     * will be clean UTF-8 output and will not rely on expensive and fragile\n     * detection algorithms.\n     *\n     * Function converts the input in place in the passed variable so that it\n     * can be used as a callback for array_walk_recursive.\n     *\n     * @param mixed $data Input to check and convert if needed, passed by ref\n     */\n    private static function detectAndCleanUtf8(&$data): void\n    {\n        if (\\is_string($data) && preg_match('//u', $data) !== 1) {\n            $data = preg_replace_callback(\n                '/[\\x80-\\xFF]+/',\n                function (array $m): string {\n                    return \\function_exists('mb_convert_encoding')\n                        ? mb_convert_encoding($m[0], 'UTF-8', 'ISO-8859-1')\n                        : (\\function_exists('utf8_encode') ? utf8_encode($m[0]) : '');\n                },\n                $data\n            );\n            if (!\\is_string($data)) {\n                $pcreErrorCode = preg_last_error();\n\n                throw new \\RuntimeException('Failed to preg_replace_callback: ' . $pcreErrorCode . ' / ' . preg_last_error_msg());\n            }\n            $data = str_replace(\n                ['¤', '¦', '¨', '´', '¸', '¼', '½', '¾'],\n                ['€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'],\n                $data\n            );\n        }\n    }\n\n    /**\n     * Converts a string with a valid 'memory_limit' format, to bytes.\n     *\n     * @param  string|false $val\n     * @return int|false    Returns an integer representing bytes. Returns FALSE in case of error.\n     */\n    public static function expandIniShorthandBytes($val)\n    {\n        if (!\\is_string($val)) {\n            return false;\n        }\n\n        // support -1\n        if ((int) $val < 0) {\n            return (int) $val;\n        }\n\n        if (!(bool) preg_match('/^\\s*(?<val>\\d+)(?:\\.\\d+)?\\s*(?<unit>[gmk]?)\\s*$/i', $val, $match)) {\n            return false;\n        }\n\n        $val = (int) $match['val'];\n        switch (strtolower($match['unit'])) {\n            case 'g':\n                $val *= 1024;\n                // no break\n            case 'm':\n                $val *= 1024;\n                // no break\n            case 'k':\n                $val *= 1024;\n        }\n\n        return $val;\n    }\n\n    public static function getRecordMessageForException(LogRecord $record): string\n    {\n        $context = '';\n        $extra = '';\n\n        try {\n            if (\\count($record->context) > 0) {\n                $context = \"\\nContext: \" . json_encode($record->context, JSON_THROW_ON_ERROR);\n            }\n            if (\\count($record->extra) > 0) {\n                $extra = \"\\nExtra: \" . json_encode($record->extra, JSON_THROW_ON_ERROR);\n            }\n        } catch (\\Throwable $e) {\n            // noop\n        }\n\n        return \"\\nThe exception occurred while attempting to log: \" . $record->message . $context . $extra;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 - 2022 Paragon Initiative Enterprises\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n------------------------------------------------------------------------------\nThis library was based on the work of Steve \"Sc00bz\" Thomas.\n------------------------------------------------------------------------------\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Steve Thomas\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/README.md",
    "content": "# Constant-Time Encoding\n\n[![Build Status](https://github.com/paragonie/constant_time_encoding/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)\n[![Static Analysis](https://github.com/paragonie/constant_time_encoding/actions/workflows/psalm.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)\n[![Latest Stable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/stable)](https://packagist.org/packages/paragonie/constant_time_encoding)\n[![Latest Unstable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/unstable)](https://packagist.org/packages/paragonie/constant_time_encoding)\n[![License](https://poser.pugx.org/paragonie/constant_time_encoding/license)](https://packagist.org/packages/paragonie/constant_time_encoding)\n[![Downloads](https://img.shields.io/packagist/dt/paragonie/constant_time_encoding.svg)](https://packagist.org/packages/paragonie/constant_time_encoding)\n\nBased on the [constant-time base64 implementation made by Steve \"Sc00bz\" Thomas](https://github.com/Sc00bz/ConstTimeEncoding),\nthis library aims to offer character encoding functions that do not leak\ninformation about what you are encoding/decoding via processor cache \nmisses. Further reading on [cache-timing attacks](http://blog.ircmaxell.com/2014/11/its-all-about-time.html).\n\nOur fork offers the following enhancements:\n\n* `mbstring.func_overload` resistance\n* Unit tests\n* Composer- and Packagist-ready\n* Base16 encoding\n* Base32 encoding\n* Uses `pack()` and `unpack()` instead of `chr()` and `ord()`\n\n## PHP Version Requirements\n\nVersion 3 of this library should work on **PHP 8** or newer.\n\nVersion 2 of this library should work on **PHP 7** or newer. See [the v2.x branch](https://github.com/paragonie/constant_time_encoding/tree/v2.x).\n\nFor PHP 5 support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).\n\nIf you are adding this as a dependency to a project intended to work on PHP 5 through 8.4, please set the required version to `^1|^2|^3`.\n\n## How to Install\n\n```sh\ncomposer require paragonie/constant_time_encoding\n```\n\n## How to Use\n\n```php\nuse ParagonIE\\ConstantTime\\Encoding;\n\n// possibly (if applicable): \n// require 'vendor/autoload.php';\n\n$data = random_bytes(32);\necho Encoding::base64Encode($data), \"\\n\";\necho Encoding::base32EncodeUpper($data), \"\\n\";\necho Encoding::base32Encode($data), \"\\n\";\necho Encoding::hexEncode($data), \"\\n\";\necho Encoding::hexEncodeUpper($data), \"\\n\";\n```\n\nExample output:\n \n```\n1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\n2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====\n2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====\nd558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1\nD558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1\n```\n\nIf you only need a particular variant, you can just reference the \nrequired class like so:\n\n```php\nuse ParagonIE\\ConstantTime\\Base64;\nuse ParagonIE\\ConstantTime\\Base32;\n\n$data = random_bytes(32);\necho Base64::encode($data), \"\\n\";\necho Base32::encode($data), \"\\n\";\n```\n\nExample output:\n\n```\n1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=\n2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====\n```\n\n## Support Contracts\n\nIf your company uses this library in their products or services, you may be\ninterested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/composer.json",
    "content": "{\n  \"name\": \"paragonie/constant_time_encoding\",\n  \"description\": \"Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)\",\n  \"keywords\": [\n    \"base64\",\n    \"encoding\",\n    \"rfc4648\",\n    \"base32\",\n    \"base16\",\n    \"hex\",\n    \"bin2hex\",\n    \"hex2bin\",\n    \"base64_encode\",\n    \"base64_decode\",\n    \"base32_encode\",\n    \"base32_decode\"\n  ],\n  \"license\": \"MIT\",\n  \"type\": \"library\",\n  \"authors\": [\n      {\n        \"name\":     \"Paragon Initiative Enterprises\",\n        \"email\":    \"security@paragonie.com\",\n        \"homepage\": \"https://paragonie.com\",\n        \"role\":     \"Maintainer\"\n      },\n      {\n        \"name\":     \"Steve 'Sc00bz' Thomas\",\n        \"email\":    \"steve@tobtu.com\",\n        \"homepage\": \"https://www.tobtu.com\",\n        \"role\":     \"Original Developer\"\n      }\n  ],\n  \"support\": {\n    \"issues\":   \"https://github.com/paragonie/constant_time_encoding/issues\",\n    \"email\":    \"info@paragonie.com\",\n    \"source\":   \"https://github.com/paragonie/constant_time_encoding\"\n  },\n  \"require\": {\n    \"php\": \"^8\"\n  },\n  \"require-dev\": {\n    \"infection/infection\": \"^0\",\n    \"nikic/php-fuzzer\": \"^0\",\n    \"phpunit/phpunit\": \"^9|^10|^11\",\n    \"vimeo/psalm\": \"^4|^5|^6\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"ParagonIE\\\\ConstantTime\\\\\": \"src/\"\n    }\n  },\n  \"autoload-dev\": {\n    \"psr-4\": {\n      \"ParagonIE\\\\ConstantTime\\\\Tests\\\\\": \"tests/\"\n    }\n  },\n  \"scripts\": {\n    \"mutation-test\": \"infection\"\n  },\n  \"config\": {\n    \"process-timeout\": 0,\n    \"allow-plugins\": {\n      \"infection/extension-installer\": true\n    }\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Base32.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse InvalidArgumentException;\nuse Override;\nuse RangeException;\nuse SensitiveParameter;\nuse TypeError;\nuse function pack;\nuse function rtrim;\nuse function strlen;\nuse function substr;\nuse function unpack;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Base32\n * [A-Z][2-7]\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Base32 implements EncoderInterface\n{\n    /**\n     * Decode a Base32-encoded string into raw binary\n     *\n     * @param string $encodedString\n     * @param bool $strictPadding\n     * @return string\n     */\n    #[Override]\n    public static function decode(\n        #[SensitiveParameter]\n        string $encodedString,\n        bool $strictPadding = false\n    ): string {\n        return static::doDecode($encodedString, false, $strictPadding);\n    }\n\n    /**\n     * Decode an uppercase Base32-encoded string into raw binary\n     *\n     * @param string $src\n     * @param bool $strictPadding\n     * @return string\n     */\n    public static function decodeUpper(\n        #[SensitiveParameter]\n        string $src,\n        bool $strictPadding = false\n    ): string {\n        return static::doDecode($src, true, $strictPadding);\n    }\n\n    /**\n     * Encode into Base32 (RFC 4648)\n     *\n     * @param string $binString\n     * @return string\n     * @throws TypeError\n     */\n    #[Override]\n    public static function encode(\n        #[SensitiveParameter]\n        string $binString\n    ): string {\n        return static::doEncode($binString, false, true);\n    }\n\n    /**\n     * Encode into Base32 (RFC 4648)\n     *\n     * @param string $src\n     * @return string\n     * @throws TypeError\n     * @api\n     */\n    public static function encodeUnpadded(\n        #[SensitiveParameter]\n        string $src\n    ): string {\n        return static::doEncode($src, false, false);\n    }\n\n    /**\n     * Encode into uppercase Base32 (RFC 4648)\n     *\n     * @param string $src\n     * @return string\n     * @throws TypeError\n     * @api\n     */\n    public static function encodeUpper(\n        #[SensitiveParameter]\n        string $src\n    ): string {\n        return static::doEncode($src, true, true);\n    }\n\n    /**\n     * Encode into uppercase Base32 (RFC 4648)\n     *\n     * @param string $src\n     * @return string\n     * @throws TypeError\n     * @api\n     */\n    public static function encodeUpperUnpadded(\n        #[SensitiveParameter]\n        string $src\n    ): string {\n        return static::doEncode($src, true, false);\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 5-bit integers\n     * into 8-bit integers.\n     *\n     * @param int $src\n     * @return int\n     * @api\n     */\n    protected static function decode5Bits(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64\n        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 96);\n\n        // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23\n        $ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 5-bit integers\n     * into 8-bit integers.\n     *\n     * Uppercase variant.\n     *\n     * @param int $src\n     * @return int\n     * @api\n     */\n    protected static function decode5BitsUpper(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64\n        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);\n\n        // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23\n        $ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 5-bit integers.\n     *\n     * @param int $src\n     * @return string\n     * @api\n     */\n    protected static function encode5Bits(int $src): string\n    {\n        $diff = 0x61;\n\n        // if ($src > 25) $ret -= 72;\n        $diff -= ((25 - $src) >> 8) & 73;\n\n        return pack('C', $src + $diff);\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 5-bit integers.\n     *\n     * Uppercase variant.\n     *\n     * @param int $src\n     * @return string\n     * @api\n     */\n    protected static function encode5BitsUpper(int $src): string\n    {\n        $diff = 0x41;\n\n        // if ($src > 25) $ret -= 40;\n        $diff -= ((25 - $src) >> 8) & 41;\n\n        return pack('C', $src + $diff);\n    }\n\n    /**\n     * @param string $encodedString\n     * @param bool $upper\n     * @return string\n     * @api\n     */\n    public static function decodeNoPadding(\n        #[SensitiveParameter]\n        string $encodedString,\n        bool $upper = false\n    ): string {\n        $srcLen = strlen($encodedString);\n        if ($srcLen === 0) {\n            return '';\n        }\n        if (($srcLen & 7) === 0) {\n            for ($j = 0; $j < 7 && $j < $srcLen; ++$j) {\n                if ($encodedString[$srcLen - $j - 1] === '=') {\n                    throw new InvalidArgumentException(\n                        \"decodeNoPadding() doesn't tolerate padding\"\n                    );\n                }\n            }\n        }\n        return static::doDecode(\n            $encodedString,\n            $upper,\n            true\n        );\n    }\n\n    /**\n     * Base32 decoding\n     *\n     * @param string $src\n     * @param bool $upper\n     * @param bool $strictPadding\n     * @return string\n     *\n     * @throws TypeError\n     */\n    protected static function doDecode(\n        #[SensitiveParameter]\n        string $src,\n        bool $upper = false,\n        bool $strictPadding = false\n    ): string {\n        // We do this to reduce code duplication:\n        $method = $upper\n            ? 'decode5BitsUpper'\n            : 'decode5Bits';\n\n        // Remove padding\n        $srcLen = strlen($src);\n        if ($srcLen === 0) {\n            return '';\n        }\n        if ($strictPadding) {\n            if (($srcLen & 7) === 0) {\n                for ($j = 0; $j < 7; ++$j) {\n                    if ($src[$srcLen - 1] === '=') {\n                        $srcLen--;\n                    } else {\n                        break;\n                    }\n                }\n            }\n            if (($srcLen & 7) === 1) {\n                throw new RangeException(\n                    'Incorrect padding'\n                );\n            }\n        } else {\n            $src = rtrim($src, '=');\n            $srcLen = strlen($src);\n        }\n\n        $err = 0;\n        $dest = '';\n        // Main loop (no padding):\n        for ($i = 0; $i + 8 <= $srcLen; $i += 8) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($src, $i, 8));\n            /** @var int $c0 */\n            $c0 = static::$method($chunk[1]);\n            /** @var int $c1 */\n            $c1 = static::$method($chunk[2]);\n            /** @var int $c2 */\n            $c2 = static::$method($chunk[3]);\n            /** @var int $c3 */\n            $c3 = static::$method($chunk[4]);\n            /** @var int $c4 */\n            $c4 = static::$method($chunk[5]);\n            /** @var int $c5 */\n            $c5 = static::$method($chunk[6]);\n            /** @var int $c6 */\n            $c6 = static::$method($chunk[7]);\n            /** @var int $c7 */\n            $c7 = static::$method($chunk[8]);\n\n            $dest .= pack(\n                'CCCCC',\n                (($c0 << 3) | ($c1 >> 2)             ) & 0xff,\n                (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,\n                (($c3 << 4) | ($c4 >> 1)             ) & 0xff,\n                (($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff,\n                (($c6 << 5) | ($c7     )             ) & 0xff\n            );\n            $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6 | $c7) >> 8;\n        }\n        // The last chunk, which may have padding:\n        if ($i < $srcLen) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($src, $i, $srcLen - $i));\n            /** @var int $c0 */\n            $c0 = static::$method($chunk[1]);\n\n            if ($i + 6 < $srcLen) {\n                /** @var int $c1 */\n                $c1 = static::$method($chunk[2]);\n                /** @var int $c2 */\n                $c2 = static::$method($chunk[3]);\n                /** @var int $c3 */\n                $c3 = static::$method($chunk[4]);\n                /** @var int $c4 */\n                $c4 = static::$method($chunk[5]);\n                /** @var int $c5 */\n                $c5 = static::$method($chunk[6]);\n                /** @var int $c6 */\n                $c6 = static::$method($chunk[7]);\n\n                $dest .= pack(\n                    'CCCC',\n                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,\n                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,\n                    (($c3 << 4) | ($c4 >> 1)             ) & 0xff,\n                    (($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff\n                );\n                $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c6 << 5) & 0xff;\n                }\n            } elseif ($i + 5 < $srcLen) {\n                /** @var int $c1 */\n                $c1 = static::$method($chunk[2]);\n                /** @var int $c2 */\n                $c2 = static::$method($chunk[3]);\n                /** @var int $c3 */\n                $c3 = static::$method($chunk[4]);\n                /** @var int $c4 */\n                $c4 = static::$method($chunk[5]);\n                /** @var int $c5 */\n                $c5 = static::$method($chunk[6]);\n\n                $dest .= pack(\n                    'CCCC',\n                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,\n                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,\n                    (($c3 << 4) | ($c4 >> 1)             ) & 0xff,\n                    (($c4 << 7) | ($c5 << 2)             ) & 0xff\n                );\n                $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5) >> 8;\n            } elseif ($i + 4 < $srcLen) {\n                /** @var int $c1 */\n                $c1 = static::$method($chunk[2]);\n                /** @var int $c2 */\n                $c2 = static::$method($chunk[3]);\n                /** @var int $c3 */\n                $c3 = static::$method($chunk[4]);\n                /** @var int $c4 */\n                $c4 = static::$method($chunk[5]);\n\n                $dest .= pack(\n                    'CCC',\n                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,\n                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,\n                    (($c3 << 4) | ($c4 >> 1)             ) & 0xff\n                );\n                $err |= ($c0 | $c1 | $c2 | $c3 | $c4) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c4 << 7) & 0xff;\n                }\n            } elseif ($i + 3 < $srcLen) {\n                /** @var int $c1 */\n                $c1 = static::$method($chunk[2]);\n                /** @var int $c2 */\n                $c2 = static::$method($chunk[3]);\n                /** @var int $c3 */\n                $c3 = static::$method($chunk[4]);\n\n                $dest .= pack(\n                    'CC',\n                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,\n                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff\n                );\n                $err |= ($c0 | $c1 | $c2 | $c3) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c3 << 4) & 0xff;\n                }\n            } elseif ($i + 2 < $srcLen) {\n                /** @var int $c1 */\n                $c1 = static::$method($chunk[2]);\n                /** @var int $c2 */\n                $c2 = static::$method($chunk[3]);\n\n                $dest .= pack(\n                    'CC',\n                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,\n                    (($c1 << 6) | ($c2 << 1)             ) & 0xff\n                );\n                $err |= ($c0 | $c1 | $c2) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c2 << 6) & 0xff;\n                }\n            } elseif ($i + 1 < $srcLen) {\n                /** @var int $c1 */\n                $c1 = static::$method($chunk[2]);\n\n                $dest .= pack(\n                    'C',\n                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff\n                );\n                $err |= ($c0 | $c1) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c1 << 6) & 0xff;\n                }\n            } else {\n                $dest .= pack(\n                    'C',\n                    (($c0 << 3)                          ) & 0xff\n                );\n                $err |= ($c0) >> 8;\n            }\n        }\n        $check = ($err === 0);\n        if (!$check) {\n            throw new RangeException(\n                'Base32::doDecode() only expects characters in the correct base32 alphabet'\n            );\n        }\n        return $dest;\n    }\n\n    /**\n     * Base32 Encoding\n     *\n     * @param string $src\n     * @param bool $upper\n     * @param bool $pad\n     * @return string\n     * @throws TypeError\n     */\n    protected static function doEncode(\n        #[SensitiveParameter]\n        string $src,\n        bool $upper = false,\n        bool $pad = true\n    ): string {\n        // We do this to reduce code duplication:\n        $method = $upper\n            ? 'encode5BitsUpper'\n            : 'encode5Bits';\n        \n        $dest = '';\n        $srcLen = strlen($src);\n\n        // Main loop (no padding):\n        for ($i = 0; $i + 5 <= $srcLen; $i += 5) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($src, $i, 5));\n            $b0 = $chunk[1];\n            $b1 = $chunk[2];\n            $b2 = $chunk[3];\n            $b3 = $chunk[4];\n            $b4 = $chunk[5];\n            $dest .=\n                static::$method(              ($b0 >> 3)  & 31) .\n                static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .\n                static::$method((($b1 >> 1)             ) & 31) .\n                static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .\n                static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .\n                static::$method((($b3 >> 2)             ) & 31) .\n                static::$method((($b3 << 3) | ($b4 >> 5)) & 31) .\n                static::$method(  $b4                     & 31);\n        }\n        // The last chunk, which may have padding:\n        if ($i < $srcLen) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($src, $i, $srcLen - $i));\n            $b0 = $chunk[1];\n            if ($i + 3 < $srcLen) {\n                $b1 = $chunk[2];\n                $b2 = $chunk[3];\n                $b3 = $chunk[4];\n                $dest .=\n                    static::$method(              ($b0 >> 3)  & 31) .\n                    static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .\n                    static::$method((($b1 >> 1)             ) & 31) .\n                    static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .\n                    static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .\n                    static::$method((($b3 >> 2)             ) & 31) .\n                    static::$method((($b3 << 3)             ) & 31);\n                if ($pad) {\n                    $dest .= '=';\n                }\n            } elseif ($i + 2 < $srcLen) {\n                $b1 = $chunk[2];\n                $b2 = $chunk[3];\n                $dest .=\n                    static::$method(              ($b0 >> 3)  & 31) .\n                    static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .\n                    static::$method((($b1 >> 1)             ) & 31) .\n                    static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .\n                    static::$method((($b2 << 1)             ) & 31);\n                if ($pad) {\n                    $dest .= '===';\n                }\n            } elseif ($i + 1 < $srcLen) {\n                $b1 = $chunk[2];\n                $dest .=\n                    static::$method(              ($b0 >> 3)  & 31) .\n                    static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .\n                    static::$method((($b1 >> 1)             ) & 31) .\n                    static::$method((($b1 << 4)             ) & 31);\n                if ($pad) {\n                    $dest .= '====';\n                }\n            } else {\n                $dest .=\n                    static::$method(              ($b0 >> 3)  & 31) .\n                    static::$method( ($b0 << 2)               & 31);\n                if ($pad) {\n                    $dest .= '======';\n                }\n            }\n        }\n        return $dest;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Base32Hex.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse Override;\nuse function pack;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Base32Hex\n * [0-9][A-V]\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Base32Hex extends Base32\n{\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 5-bit integers\n     * into 8-bit integers.\n     *\n     * @param int $src\n     * @return int\n     */\n    #[Override]\n    protected static function decode5Bits(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47\n        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);\n\n        // if ($src > 0x60 && $src < 0x77) ret += $src - 0x61 + 10 + 1; // -86\n        $ret += (((0x60 - $src) & ($src - 0x77)) >> 8) & ($src - 86);\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 5-bit integers\n     * into 8-bit integers.\n     *\n     * @param int $src\n     * @return int\n     */\n    #[Override]\n    protected static function decode5BitsUpper(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47\n        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);\n\n        // if ($src > 0x40 && $src < 0x57) ret += $src - 0x41 + 10 + 1; // -54\n        $ret += (((0x40 - $src) & ($src - 0x57)) >> 8) & ($src - 54);\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 5-bit integers.\n     *\n     * @param int $src\n     * @return string\n     */\n    #[Override]\n    protected static function encode5Bits(int $src): string\n    {\n        $src += 0x30;\n\n        // if ($src > 0x39) $src += 0x61 - 0x3a; // 39\n        $src += ((0x39 - $src) >> 8) & 39;\n\n        return pack('C', $src);\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 5-bit integers.\n     *\n     * Uppercase variant.\n     *\n     * @param int $src\n     * @return string\n     */\n    #[Override]\n    protected static function encode5BitsUpper(int $src): string\n    {\n        $src += 0x30;\n\n        // if ($src > 0x39) $src += 0x41 - 0x3a; // 7\n        $src += ((0x39 - $src) >> 8) & 7;\n\n        return pack('C', $src);\n    }\n}"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Base64.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse InvalidArgumentException;\nuse Override;\nuse RangeException;\nuse SensitiveParameter;\nuse SodiumException;\nuse TypeError;\nuse function extension_loaded;\nuse function pack;\nuse function rtrim;\nuse function sodium_base642bin;\nuse function sodium_bin2base64;\nuse function strlen;\nuse function substr;\nuse function unpack;\nuse const SODIUM_BASE64_VARIANT_ORIGINAL;\nuse const SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING;\nuse const SODIUM_BASE64_VARIANT_URLSAFE;\nuse const SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Base64\n * [A-Z][a-z][0-9]+/\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Base64 implements EncoderInterface\n{\n    /**\n     * Encode into Base64\n     *\n     * Base64 character set \"[A-Z][a-z][0-9]+/\"\n     *\n     * @param string $binString\n     * @return string\n     *\n     * @throws TypeError\n     */\n    #[Override]\n    public static function encode(\n        #[SensitiveParameter]\n        string $binString\n    ): string {\n        if (extension_loaded('sodium')) {\n            $variant = match(static::class) {\n                Base64::class => SODIUM_BASE64_VARIANT_ORIGINAL,\n                Base64UrlSafe::class => SODIUM_BASE64_VARIANT_URLSAFE,\n                default => 0,\n            };\n            if ($variant > 0) {\n                try {\n                    return sodium_bin2base64($binString, $variant);\n                } catch (SodiumException $ex) {\n                    throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);\n                }\n            }\n        }\n        return static::doEncode($binString, true);\n    }\n\n    /**\n     * Encode into Base64, no = padding\n     *\n     * Base64 character set \"[A-Z][a-z][0-9]+/\"\n     *\n     * @param string $src\n     * @return string\n     *\n     * @throws TypeError\n     * @api\n     */\n    public static function encodeUnpadded(\n        #[SensitiveParameter]\n        string $src\n    ): string {\n        if (extension_loaded('sodium')) {\n            $variant = match(static::class) {\n                Base64::class => SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING,\n                Base64UrlSafe::class => SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING,\n                default => 0,\n            };\n            if ($variant > 0) {\n                try {\n                    return sodium_bin2base64($src, $variant);\n                } catch (SodiumException $ex) {\n                    throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);\n                }\n            }\n        }\n        return static::doEncode($src, false);\n    }\n\n    /**\n     * @param string $src\n     * @param bool $pad   Include = padding?\n     * @return string\n     *\n     * @throws TypeError\n     */\n    protected static function doEncode(\n        #[SensitiveParameter]\n        string $src,\n        bool $pad = true\n    ): string {\n        $dest = '';\n        $srcLen = strlen($src);\n        // Main loop (no padding):\n        for ($i = 0; $i + 3 <= $srcLen; $i += 3) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($src, $i, 3));\n            $b0 = $chunk[1];\n            $b1 = $chunk[2];\n            $b2 = $chunk[3];\n\n            $dest .=\n                static::encode6Bits(               $b0 >> 2       ) .\n                static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .\n                static::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .\n                static::encode6Bits(  $b2                     & 63);\n        }\n        // The last chunk, which may have padding:\n        if ($i < $srcLen) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($src, $i, $srcLen - $i));\n            $b0 = $chunk[1];\n            if ($i + 1 < $srcLen) {\n                $b1 = $chunk[2];\n                $dest .=\n                    static::encode6Bits($b0 >> 2) .\n                    static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .\n                    static::encode6Bits(($b1 << 2) & 63);\n                if ($pad) {\n                    $dest .= '=';\n                }\n            } else {\n                $dest .=\n                    static::encode6Bits( $b0 >> 2) .\n                    static::encode6Bits(($b0 << 4) & 63);\n                if ($pad) {\n                    $dest .= '==';\n                }\n            }\n        }\n        return $dest;\n    }\n\n    /**\n     * decode from base64 into binary\n     *\n     * Base64 character set \"./[A-Z][a-z][0-9]\"\n     *\n     * @param string $encodedString\n     * @param bool $strictPadding\n     * @return string\n     *\n     * @throws RangeException\n     * @throws TypeError\n     */\n    #[Override]\n    public static function decode(\n        #[SensitiveParameter]\n        string $encodedString,\n        bool $strictPadding = false\n    ): string {\n        // Remove padding\n        $srcLen = strlen($encodedString);\n        if ($srcLen === 0) {\n            return '';\n        }\n\n        if ($strictPadding) {\n            if (($srcLen & 3) === 0) {\n                if ($encodedString[$srcLen - 1] === '=') {\n                    $srcLen--;\n                    if ($encodedString[$srcLen - 1] === '=') {\n                        $srcLen--;\n                    }\n                }\n            }\n            if (($srcLen & 3) === 1) {\n                throw new RangeException(\n                    'Incorrect padding'\n                );\n            }\n            if ($encodedString[$srcLen - 1] === '=') {\n                throw new RangeException(\n                    'Incorrect padding'\n                );\n            }\n            if (extension_loaded('sodium')) {\n                $variant = match(static::class) {\n                    Base64::class => SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING,\n                    Base64UrlSafe::class => SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING,\n                    default => 0,\n                };\n                if ($variant > 0) {\n                    try {\n                        return sodium_base642bin(substr($encodedString, 0, $srcLen), $variant);\n                    } catch (SodiumException $ex) {\n                        throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);\n                    }\n                }\n            }\n        } else {\n            // Just remove all padding.\n            $encodedString = rtrim($encodedString, '=');\n            $srcLen = strlen($encodedString);\n        }\n\n        $err = 0;\n        $dest = '';\n        // Main loop (no padding):\n        for ($i = 0; $i + 4 <= $srcLen; $i += 4) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($encodedString, $i, 4));\n            $c0 = static::decode6Bits($chunk[1]);\n            $c1 = static::decode6Bits($chunk[2]);\n            $c2 = static::decode6Bits($chunk[3]);\n            $c3 = static::decode6Bits($chunk[4]);\n\n            $dest .= pack(\n                'CCC',\n                ((($c0 << 2) | ($c1 >> 4)) & 0xff),\n                ((($c1 << 4) | ($c2 >> 2)) & 0xff),\n                ((($c2 << 6) |  $c3      ) & 0xff)\n            );\n            $err |= ($c0 | $c1 | $c2 | $c3) >> 8;\n        }\n        // The last chunk, which may have padding:\n        if ($i < $srcLen) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C*', substr($encodedString, $i, $srcLen - $i));\n            $c0 = static::decode6Bits($chunk[1]);\n\n            if ($i + 2 < $srcLen) {\n                $c1 = static::decode6Bits($chunk[2]);\n                $c2 = static::decode6Bits($chunk[3]);\n                $dest .= pack(\n                    'CC',\n                    ((($c0 << 2) | ($c1 >> 4)) & 0xff),\n                    ((($c1 << 4) | ($c2 >> 2)) & 0xff)\n                );\n                $err |= ($c0 | $c1 | $c2) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c2 << 6) & 0xff;\n                }\n            } elseif ($i + 1 < $srcLen) {\n                $c1 = static::decode6Bits($chunk[2]);\n                $dest .= pack(\n                    'C',\n                    ((($c0 << 2) | ($c1 >> 4)) & 0xff)\n                );\n                $err |= ($c0 | $c1) >> 8;\n                if ($strictPadding) {\n                    $err |= ($c1 << 4) & 0xff;\n                }\n            } elseif ($strictPadding) {\n                $err |= 1;\n            }\n        }\n        $check = ($err === 0);\n        if (!$check) {\n            throw new RangeException(\n                'Base64::decode() only expects characters in the correct base64 alphabet'\n            );\n        }\n        return $dest;\n    }\n\n    /**\n     * @param string $encodedString\n     * @return string\n     * @api\n     */\n    public static function decodeNoPadding(\n        #[SensitiveParameter]\n        string $encodedString\n    ): string {\n        $srcLen = strlen($encodedString);\n        if ($srcLen === 0) {\n            return '';\n        }\n        if (($srcLen & 3) === 0) {\n            // If $strLen is not zero, and it is divisible by 4, then it's at least 4.\n            if ($encodedString[$srcLen - 1] === '=' || $encodedString[$srcLen - 2] === '=') {\n                throw new InvalidArgumentException(\n                    \"decodeNoPadding() doesn't tolerate padding\"\n                );\n            }\n        }\n        return static::decode(\n            $encodedString,\n            true\n        );\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 6-bit integers\n     * into 8-bit integers.\n     *\n     * Base64 character set:\n     * [A-Z]      [a-z]      [0-9]      +     /\n     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f\n     *\n     * @param int $src\n     * @return int\n     */\n    protected static function decode6Bits(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64\n        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);\n\n        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70\n        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);\n\n        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5\n        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);\n\n        // if ($src == 0x2b) $ret += 62 + 1;\n        $ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;\n\n        // if ($src == 0x2f) ret += 63 + 1;\n        $ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 6-bit integers.\n     *\n     * @param int $src\n     * @return string\n     */\n    protected static function encode6Bits(int $src): string\n    {\n        $diff = 0x41;\n\n        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6\n        $diff += ((25 - $src) >> 8) & 6;\n\n        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75\n        $diff -= ((51 - $src) >> 8) & 75;\n\n        // if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15\n        $diff -= ((61 - $src) >> 8) & 15;\n\n        // if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3\n        $diff += ((62 - $src) >> 8) & 3;\n\n        return pack('C', $src + $diff);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse Override;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Base64DotSlash\n * ./[A-Z][a-z][0-9]\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Base64DotSlash extends Base64\n{\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 6-bit integers\n     * into 8-bit integers.\n     *\n     * Base64 character set:\n     * ./         [A-Z]      [a-z]     [0-9]\n     * 0x2e-0x2f, 0x41-0x5a, 0x61-0x7a, 0x30-0x39\n     *\n     * @param int $src\n     * @return int\n     */\n    #[Override]\n    protected static function decode6Bits(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 0x2d && $src < 0x30) ret += $src - 0x2e + 1; // -45\n        $ret += (((0x2d - $src) & ($src - 0x30)) >> 8) & ($src - 45);\n\n        // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 2 + 1; // -62\n        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 62);\n\n        // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 28 + 1; // -68\n        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 68);\n\n        // if ($src > 0x2f && $src < 0x3a) ret += $src - 0x30 + 54 + 1; // 7\n        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 7);\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 6-bit integers.\n     *\n     * @param int $src\n     * @return string\n     */\n    #[Override]\n    protected static function encode6Bits(int $src): string\n    {\n        $src += 0x2e;\n\n        // if ($src > 0x2f) $src += 0x41 - 0x30; // 17\n        $src += ((0x2f - $src) >> 8) & 17;\n\n        // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6\n        $src += ((0x5a - $src) >> 8) & 6;\n\n        // if ($src > 0x7a) $src += 0x30 - 0x7b; // -75\n        $src -= ((0x7a - $src) >> 8) & 75;\n\n        return \\pack('C', $src);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse Override;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Base64DotSlashOrdered\n * ./[0-9][A-Z][a-z]\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Base64DotSlashOrdered extends Base64\n{\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 6-bit integers\n     * into 8-bit integers.\n     *\n     * Base64 character set:\n     * [.-9]      [A-Z]      [a-z]\n     * 0x2e-0x39, 0x41-0x5a, 0x61-0x7a\n     *\n     * @param int $src\n     * @return int\n     */\n    #[Override]\n    protected static function decode6Bits(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 0x2d && $src < 0x3a) ret += $src - 0x2e + 1; // -45\n        $ret += (((0x2d - $src) & ($src - 0x3a)) >> 8) & ($src - 45);\n\n        // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 12 + 1; // -52\n        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 52);\n\n        // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 38 + 1; // -58\n        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 58);\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 6-bit integers.\n     *\n     * @param int $src\n     * @return string\n     */\n    #[Override]\n    protected static function encode6Bits(int $src): string\n    {\n        $src += 0x2e;\n\n        // if ($src > 0x39) $src += 0x41 - 0x3a; // 7\n        $src += ((0x39 - $src) >> 8) & 7;\n\n        // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6\n        $src += ((0x5a - $src) >> 8) & 6;\n\n        return \\pack('C', $src);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse Override;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Base64UrlSafe\n * [A-Z][a-z][0-9]\\-_\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Base64UrlSafe extends Base64\n{\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 6-bit integers\n     * into 8-bit integers.\n     *\n     * Base64 character set:\n     * [A-Z]      [a-z]      [0-9]      -     _\n     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2d, 0x5f\n     *\n     * @param int $src\n     * @return int\n     */\n    #[Override]\n    protected static function decode6Bits(int $src): int\n    {\n        $ret = -1;\n\n        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64\n        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);\n\n        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70\n        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);\n\n        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5\n        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);\n\n        // if ($src == 0x2c) $ret += 62 + 1;\n        $ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;\n\n        // if ($src == 0x5f) ret += 63 + 1;\n        $ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;\n\n        return $ret;\n    }\n\n    /**\n     * Uses bitwise operators instead of table-lookups to turn 8-bit integers\n     * into 6-bit integers.\n     *\n     * @param int $src\n     * @return string\n     */\n    #[Override]\n    protected static function encode6Bits(int $src): string\n    {\n        $diff = 0x41;\n\n        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6\n        $diff += ((25 - $src) >> 8) & 6;\n\n        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75\n        $diff -= ((51 - $src) >> 8) & 75;\n\n        // if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13\n        $diff -= ((61 - $src) >> 8) & 13;\n\n        // if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3\n        $diff += ((62 - $src) >> 8) & 49;\n\n        return \\pack('C', $src + $diff);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Binary.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse SensitiveParameter;\nuse TypeError;\nuse function strlen;\nuse function substr;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Binary\n *\n * Binary string operators that don't choke on\n * mbstring.func_overload\n *\n * @package ParagonIE\\ConstantTime\n */\nabstract class Binary\n{\n    /**\n     * Safe string length\n     *\n     * @ref mbstring.func_overload\n     *\n     * @param string $str\n     * @return int\n     */\n    public static function safeStrlen(\n        #[SensitiveParameter]\n        string $str\n    ): int {\n        return strlen($str);\n    }\n\n    /**\n     * Safe substring\n     *\n     * @ref mbstring.func_overload\n     *\n     * @staticvar boolean $exists\n     * @param string $str\n     * @param int $start\n     * @param ?int $length\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function safeSubstr(\n        #[SensitiveParameter]\n        string $str,\n        int $start = 0,\n        ?int $length = null\n    ): string {\n        if ($length === 0) {\n            return '';\n        }\n        // Unlike mb_substr(), substr() doesn't accept NULL for length\n        if ($length !== null) {\n            return substr($str, $start, $length);\n        } else {\n            return substr($str, $start);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse SensitiveParameter;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Interface EncoderInterface\n * @package ParagonIE\\ConstantTime\n */\ninterface EncoderInterface\n{\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks\n     *\n     * @param string $binString (raw binary)\n     * @return string\n     */\n    public static function encode(\n        #[SensitiveParameter]\n        string $binString\n    ): string;\n\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks\n     *\n     * @param string $encodedString\n     * @param bool $strictPadding Error on invalid padding\n     * @return string (raw binary)\n     */\n    public static function decode(\n        #[SensitiveParameter]\n        string $encodedString,\n        bool $strictPadding = false\n    ): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Encoding.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse RangeException;\nuse SensitiveParameter;\nuse TypeError;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Encoding\n * @package ParagonIE\\ConstantTime\n * @api\n */\nabstract class Encoding\n{\n    /**\n     * RFC 4648 Base32 encoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32Encode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::encode($str);\n    }\n\n    /**\n     * RFC 4648 Base32 encoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32EncodeUpper(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::encodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base32 decoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32Decode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::decode($str);\n    }\n\n    /**\n     * RFC 4648 Base32 decoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32DecodeUpper(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::decodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base32 encoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32HexEncode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32Hex::encode($str);\n    }\n\n    /**\n     * RFC 4648 Base32Hex encoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32HexEncodeUpper(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32Hex::encodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base32Hex decoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32HexDecode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32Hex::decode($str);\n    }\n\n    /**\n     * RFC 4648 Base32Hex decoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base32HexDecodeUpper(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32Hex::decodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base64 encoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base64Encode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64::encode($str);\n    }\n\n    /**\n     * RFC 4648 Base64 decoding\n     *\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base64Decode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64::decode($str);\n    }\n\n    /**\n     * Encode into Base64\n     *\n     * Base64 character set \"./[A-Z][a-z][0-9]\"\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base64EncodeDotSlash(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64DotSlash::encode($str);\n    }\n\n    /**\n     * Decode from base64 to raw binary\n     *\n     * Base64 character set \"./[A-Z][a-z][0-9]\"\n     *\n     * @param string $str\n     * @return string\n     * @throws RangeException\n     * @throws TypeError\n     */\n    public static function base64DecodeDotSlash(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64DotSlash::decode($str);\n    }\n\n    /**\n     * Encode into Base64\n     *\n     * Base64 character set \"[.-9][A-Z][a-z]\" or \"./[0-9][A-Z][a-z]\"\n     * @param string $str\n     * @return string\n     * @throws TypeError\n     */\n    public static function base64EncodeDotSlashOrdered(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64DotSlashOrdered::encode($str);\n    }\n\n    /**\n     * Decode from base64 to raw binary\n     *\n     * Base64 character set \"[.-9][A-Z][a-z]\" or \"./[0-9][A-Z][a-z]\"\n     *\n     * @param string $str\n     * @return string\n     * @throws RangeException\n     * @throws TypeError\n     */\n    public static function base64DecodeDotSlashOrdered(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64DotSlashOrdered::decode($str);\n    }\n\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks\n     *\n     * @param string $bin_string (raw binary)\n     * @return string\n     * @throws TypeError\n     */\n    public static function hexEncode(\n        #[SensitiveParameter]\n        string $bin_string\n    ): string {\n        return Hex::encode($bin_string);\n    }\n\n    /**\n     * Convert a hexadecimal string into a binary string without cache-timing\n     * leaks\n     *\n     * @param string $hex_string\n     * @return string (raw binary)\n     * @throws RangeException\n     */\n    public static function hexDecode(\n        #[SensitiveParameter]\n        string $hex_string\n    ): string {\n        return Hex::decode($hex_string);\n    }\n\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks\n     *\n     * @param string $bin_string (raw binary)\n     * @return string\n     * @throws TypeError\n     */\n    public static function hexEncodeUpper(\n        #[SensitiveParameter]\n        string $bin_string\n    ): string {\n        return Hex::encodeUpper($bin_string);\n    }\n\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks\n     *\n     * @param string $bin_string (raw binary)\n     * @return string\n     */\n    public static function hexDecodeUpper(\n        #[SensitiveParameter]\n        string $bin_string\n    ): string {\n        return Hex::decode($bin_string);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/Hex.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse Override;\nuse RangeException;\nuse SensitiveParameter;\nuse SodiumException;\nuse TypeError;\nuse function extension_loaded;\nuse function pack;\nuse function sodium_bin2hex;\nuse function sodium_hex2bin;\nuse function strlen;\nuse function unpack;\n\n/**\n *  Copyright (c) 2016 - 2025 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class Hex\n * @package ParagonIE\\ConstantTime\n */\nabstract class Hex implements EncoderInterface\n{\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks\n     *\n     * @param string $binString (raw binary)\n     * @return string\n     * @throws TypeError\n     */\n    #[Override]\n    public static function encode(\n        #[SensitiveParameter]\n        string $binString\n    ): string {\n        if (extension_loaded('sodium')) {\n            try {\n                return sodium_bin2hex($binString);\n            } catch (SodiumException $ex) {\n                throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);\n            }\n        }\n        $hex = '';\n        $len = strlen($binString);\n        for ($i = 0; $i < $len; ++$i) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C', $binString[$i]);\n            $c = $chunk[1] & 0xf;\n            $b = $chunk[1] >> 4;\n\n            $hex .= pack(\n                'CC',\n                (87 + $b + ((($b - 10) >> 8) & ~38)),\n                (87 + $c + ((($c - 10) >> 8) & ~38))\n            );\n        }\n        return $hex;\n    }\n\n    /**\n     * Convert a binary string into a hexadecimal string without cache-timing\n     * leaks, returning uppercase letters (as per RFC 4648)\n     *\n     * @param string $binString (raw binary)\n     * @return string\n     * @throws TypeError\n     */\n    public static function encodeUpper(\n        #[SensitiveParameter]\n        string $binString\n    ): string {\n        $hex = '';\n        $len = strlen($binString);\n\n        for ($i = 0; $i < $len; ++$i) {\n            /** @var array<int, int> $chunk */\n            $chunk = unpack('C', $binString[$i]);\n            $c = $chunk[1] & 0xf;\n            $b = $chunk[1] >> 4;\n\n            $hex .= pack(\n                'CC',\n                (55 + $b + ((($b - 10) >> 8) & ~6)),\n                (55 + $c + ((($c - 10) >> 8) & ~6))\n            );\n        }\n        return $hex;\n    }\n\n    /**\n     * Convert a hexadecimal string into a binary string without cache-timing\n     * leaks\n     *\n     * @param string $encodedString\n     * @param bool $strictPadding\n     * @return string (raw binary)\n     * @throws RangeException\n     */\n    #[Override]\n    public static function decode(\n        #[SensitiveParameter]\n        string $encodedString,\n        bool $strictPadding = false\n    ): string {\n        if (extension_loaded('sodium') && $strictPadding) {\n            try {\n                return sodium_hex2bin($encodedString);\n            } catch (SodiumException $ex) {\n                throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);\n            }\n        }\n        $hex_pos = 0;\n        $bin = '';\n        $c_acc = 0;\n        $hex_len = strlen($encodedString);\n        $state = 0;\n        if (($hex_len & 1) !== 0) {\n            if ($strictPadding) {\n                throw new RangeException(\n                    'Expected an even number of hexadecimal characters'\n                );\n            } else {\n                $encodedString = '0' . $encodedString;\n                ++$hex_len;\n            }\n        }\n\n        /** @var array<int, int> $chunk */\n        $chunk = unpack('C*', $encodedString);\n        while ($hex_pos < $hex_len) {\n            ++$hex_pos;\n            $c = $chunk[$hex_pos];\n            $c_num = $c ^ 48;\n            $c_num0 = ($c_num - 10) >> 8;\n            $c_alpha = ($c & ~32) - 55;\n            $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8;\n\n            if (($c_num0 | $c_alpha0) === 0) {\n                throw new RangeException(\n                    'Expected hexadecimal character'\n                );\n            }\n            $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0);\n            if ($state === 0) {\n                $c_acc = $c_val * 16;\n            } else {\n                $bin .= pack('C', $c_acc | $c_val);\n            }\n            $state ^= 1;\n        }\n        return $bin;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/constant_time_encoding/src/RFC4648.php",
    "content": "<?php\ndeclare(strict_types=1);\nnamespace ParagonIE\\ConstantTime;\n\nuse SensitiveParameter;\nuse TypeError;\n\n/**\n *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.\n *  Copyright (c) 2014 Steve \"Sc00bz\" Thomas (steve at tobtu dot com)\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a copy\n *  of this software and associated documentation files (the \"Software\"), to deal\n *  in the Software without restriction, including without limitation the rights\n *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n *  copies of the Software, and to permit persons to whom the Software is\n *  furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in all\n *  copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n *  SOFTWARE.\n */\n\n/**\n * Class RFC4648\n *\n * This class conforms strictly to the RFC\n *\n * @package ParagonIE\\ConstantTime\n * @api\n */\nabstract class RFC4648\n{\n    /**\n     * RFC 4648 Base64 encoding\n     *\n     * \"foo\" -> \"Zm9v\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base64Encode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64::encode($str);\n    }\n\n    /**\n     * RFC 4648 Base64 decoding\n     *\n     * \"Zm9v\" -> \"foo\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base64Decode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64::decode($str, true);\n    }\n\n    /**\n     * RFC 4648 Base64 (URL Safe) encoding\n     *\n     * \"foo\" -> \"Zm9v\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base64UrlSafeEncode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64UrlSafe::encode($str);\n    }\n\n    /**\n     * RFC 4648 Base64 (URL Safe) decoding\n     *\n     * \"Zm9v\" -> \"foo\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base64UrlSafeDecode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base64UrlSafe::decode($str, true);\n    }\n\n    /**\n     * RFC 4648 Base32 encoding\n     *\n     * \"foo\" -> \"MZXW6===\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base32Encode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::encodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base32 encoding\n     *\n     * \"MZXW6===\" -> \"foo\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base32Decode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::decodeUpper($str, true);\n    }\n\n    /**\n     * RFC 4648 Base32-Hex encoding\n     *\n     * \"foo\" -> \"CPNMU===\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base32HexEncode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::encodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base32-Hex decoding\n     *\n     * \"CPNMU===\" -> \"foo\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base32HexDecode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Base32::decodeUpper($str, true);\n    }\n\n    /**\n     * RFC 4648 Base16 decoding\n     *\n     * \"foo\" -> \"666F6F\"\n     *\n     * @param string $str\n     * @return string\n     *\n     * @throws TypeError\n     */\n    public static function base16Encode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Hex::encodeUpper($str);\n    }\n\n    /**\n     * RFC 4648 Base16 decoding\n     *\n     * \"666F6F\" -> \"foo\"\n     *\n     * @param string $str\n     * @return string\n     */\n    public static function base16Decode(\n        #[SensitiveParameter]\n        string $str\n    ): string {\n        return Hex::decode($str, true);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Paragon Initiative Enterprises\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/build-phar.sh",
    "content": "#!/usr/bin/env bash\n\nbasedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )\n\nphp -dphar.readonly=0 \"$basedir/other/build_phar.php\" $*"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/composer.json",
    "content": "{\n  \"name\":         \"paragonie/random_compat\",\n  \"description\":  \"PHP 5.x polyfill for random_bytes() and random_int() from PHP 7\",\n  \"keywords\": [\n    \"csprng\",\n    \"random\",\n    \"polyfill\",\n    \"pseudorandom\"\n  ],\n  \"license\":      \"MIT\",\n  \"type\":         \"library\",\n  \"authors\": [\n    {\n      \"name\":     \"Paragon Initiative Enterprises\",\n      \"email\":    \"security@paragonie.com\",\n      \"homepage\": \"https://paragonie.com\"\n    }\n  ],\n  \"support\": {\n    \"issues\":     \"https://github.com/paragonie/random_compat/issues\",\n    \"email\":      \"info@paragonie.com\",\n    \"source\":     \"https://github.com/paragonie/random_compat\"\n  },\n  \"require\": {\n    \"php\": \">= 7\"\n  },\n  \"require-dev\": {\n    \"vimeo/psalm\": \"^1\",\n    \"phpunit/phpunit\": \"4.*|5.*\"\n  },\n  \"suggest\": {\n    \"ext-libsodium\": \"Provides a modern crypto API that can be used to generate random bytes.\"\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey",
    "content": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm\npui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p\n+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc",
    "content": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v2.0.22 (MingW32)\n\niQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip\nQwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg\n1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW\nNDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA\nNNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV\nJHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74=\n=B6+8\n-----END PGP SIGNATURE-----\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/lib/random.php",
    "content": "<?php\n/**\n * Random_* Compatibility Library\n * for using the new PHP 7 random_* API in PHP 5 projects\n *\n * @version 2.99.99\n * @released 2018-06-06\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n// NOP\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/other/build_phar.php",
    "content": "<?php\n$dist = dirname(__DIR__).'/dist';\nif (!is_dir($dist)) {\n    mkdir($dist, 0755);\n}\nif (file_exists($dist.'/random_compat.phar')) {\n    unlink($dist.'/random_compat.phar');\n}\n$phar = new Phar(\n    $dist.'/random_compat.phar',\n    FilesystemIterator::CURRENT_AS_FILEINFO | \\FilesystemIterator::KEY_AS_FILENAME,\n    'random_compat.phar'\n);\nrename(\n    dirname(__DIR__).'/lib/random.php', \n    dirname(__DIR__).'/lib/index.php'\n);\n$phar->buildFromDirectory(dirname(__DIR__).'/lib');\nrename(\n    dirname(__DIR__).'/lib/index.php', \n    dirname(__DIR__).'/lib/random.php'\n);\n\n/**\n * If we pass an (optional) path to a private key as a second argument, we will\n * sign the Phar with OpenSSL.\n * \n * If you leave this out, it will produce an unsigned .phar!\n */\nif ($argc > 1) {\n    if (!@is_readable($argv[1])) {\n        echo 'Could not read the private key file:', $argv[1], \"\\n\";\n        exit(255);\n    }\n    $pkeyFile = file_get_contents($argv[1]);\n    \n    $private = openssl_get_privatekey($pkeyFile);\n    if ($private !== false) {\n        $pkey = '';\n        openssl_pkey_export($private, $pkey);\n        $phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey);\n        \n        /**\n         * Save the corresponding public key to the file\n         */\n        if (!@is_readable($dist.'/random_compat.phar.pubkey')) {\n            $details = openssl_pkey_get_details($private);\n            file_put_contents(\n                $dist.'/random_compat.phar.pubkey',\n                $details['key']\n            );\n        }\n    } else {\n        echo 'An error occurred reading the private key from OpenSSL.', \"\\n\";\n        exit(255);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/psalm-autoload.php",
    "content": "<?php\n\nrequire_once 'lib/byte_safe_strings.php';\nrequire_once 'lib/cast_to_int.php';\nrequire_once 'lib/error_polyfill.php';\nrequire_once 'other/ide_stubs/libsodium.php';\nrequire_once 'lib/random.php';\n\n$int = random_int(0, 65536);\n"
  },
  {
    "path": "lib/Google/vendor/paragonie/random_compat/psalm.xml",
    "content": "<?xml version=\"1.0\"?>\n<psalm\n    autoloader=\"psalm-autoload.php\"\n    stopOnFirstError=\"false\"\n    useDocblockTypes=\"true\"\n>\n    <projectFiles>\n        <directory name=\"lib\" />\n    </projectFiles>\n    <issueHandlers>\n        <RedundantConditionGivenDocblockType errorLevel=\"info\" />\n        <UnresolvableInclude errorLevel=\"info\" />\n        <DuplicateClass errorLevel=\"info\" />\n        <InvalidOperand errorLevel=\"info\" />\n        <UndefinedConstant errorLevel=\"info\" />\n        <MissingReturnType errorLevel=\"info\" />\n        <InvalidReturnType errorLevel=\"info\" />\n    </issueHandlers>\n</psalm>\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/AUTHORS",
    "content": "phpseclib Lead Developer:  TerraFrost (Jim Wigginton)\n\nphpseclib Developers:      monnerat (Patrick Monnerat)\n                           bantu (Andreas Fischer)\n                           petrich (Hans-Jürgen Petrich)\n                           GrahamCampbell (Graham Campbell)\n                           hc-jworman"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/BACKERS.md",
    "content": "# Backers\n\nphpseclib ongoing development is made possible by [Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) and by contributions by users like you. Thank you.\n\n## Backers\n\n- Allan Simon\n- [ChargeOver](https://chargeover.com/)\n- Raghu Veer Dendukuri\n- Zane Hooper\n- [Setasign](https://www.setasign.com/)\n- [Charles Severance](https://github.com/csev)\n- [Rachel Fish](https://github.com/itsrachelfish)\n- Tharyrok\n- [cjhaas](https://github.com/cjhaas)\n- [istiak-tridip](https://github.com/istiak-tridip)\n- [Anna Filina](https://github.com/afilina)\n- [blakemckeeby](https://github.com/blakemckeeby)\n- [ssddanbrown](https://github.com/ssddanbrown)\n- Stefan Beck"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/LICENSE",
    "content": "Copyright (c) 2011-2019 TerraFrost and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/README.md",
    "content": "# phpseclib - PHP Secure Communications Library\n\n[![CI Status](https://github.com/phpseclib/phpseclib/actions/workflows/ci.yml/badge.svg?branch=3.0&event=push \"CI Status\")](https://github.com/phpseclib/phpseclib)\n\n## Supporting phpseclib\n\n- [Become a backer or sponsor on Patreon](https://www.patreon.com/phpseclib)\n- [One-time donation via PayPal or crypto-currencies](http://sourceforge.net/donate/index.php?group_id=198487)\n- [Subscribe to Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme)\n\n## Introduction\n\nMIT-licensed pure-PHP implementations of the following:\n\nSSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / Ed449 / Curve25519 / Curve449, ECDSA / ECDH (with support for 66 curves), RSA (PKCS#1 v2.2 compliant), DSA / DH, DES / 3DES / RC4 / Rijndael / AES / Blowfish / Twofish / Salsa20 / ChaCha20, GCM / Poly1305\n\n* [Browse Git](https://github.com/phpseclib/phpseclib)\n\n## Documentation\n\n* [Documentation / Manual](https://phpseclib.com/)\n* [API Documentation](https://api.phpseclib.com/3.0/) (generated by Doctum)\n\n## Branches\n\n### master\n\n* Development Branch\n* Unstable API\n* Do not use in production\n\n### 3.0\n\n* Long term support (LTS) release\n* Major expansion of cryptographic primitives\n* Minimum PHP version: 5.6.1\n* PSR-4 autoloading with namespace rooted at `\\phpseclib3`\n* Install via Composer: `composer require phpseclib/phpseclib:~3.0`\n\n### 2.0\n\n* Long term support (LTS) release\n* Modernized version of 1.0\n* Minimum PHP version: 5.3.3\n* PSR-4 autoloading with namespace rooted at `\\phpseclib`\n* Install via Composer: `composer require phpseclib/phpseclib:~2.0`\n\n### 1.0\n\n* Long term support (LTS) release\n* PHP4 compatible\n* Composer compatible (PSR-0 autoloading)\n* Install using Composer: `composer require phpseclib/phpseclib:~1.0`\n* [Download 1.0.25 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.25.zip/download)\n\n## Security contact information\n\nTo report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\n## Support\n\nNeed Support?\n\n* [Checkout Questions and Answers on Stack Overflow](http://stackoverflow.com/questions/tagged/phpseclib)\n* [Create a Support Ticket on GitHub](https://github.com/phpseclib/phpseclib/issues/new)\n\n## Special Thanks\n\n<p align=\"left\">\n    <a target=\"_blank\" href=\"https://www.sovereign.tech/tech/phpseclib\">\n        <img src=\"https://phpseclib.com/img/sponsors/sovereign-tech-agency.webp\" alt=\"Sovereign Tech Agency\" style=\"width: 200px\">\n    </a>\n</p>\n\n## Additional Thanks\n\n- Allan Simon\n- [Anna Filina](https://afilina.com/)\n- delovelady\n- [ChargeOver](https://chargeover.com/)\n- <a href=\"https://jb.gg/OpenSource\"><img src=\"https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg\" height=\"20px\"></a>\n\n## Contributing\n\n1. Fork the Project\n\n2. Ensure you have Composer installed (see [Composer Download Instructions](https://getcomposer.org/download/))\n\n3. Install Development Dependencies\n    ```sh\n    composer install\n    ```\n\n4. Create a Feature Branch\n\n5. Run continuous integration checks:\n   ```sh\n   composer global require php:^8.1 squizlabs/php_codesniffer friendsofphp/php-cs-fixer vimeo/psalm\n   phpcs --standard=build/php_codesniffer.xml\n   php-cs-fixer fix --config=build/php-cs-fixer.php --diff --dry-run --using-cache=no\n   psalm --config=build/psalm.xml --no-cache --long-progress --report-show-info=false --output-format=text\n   vendor/bin/phpunit --verbose --configuration tests/phpunit.xml\n   ```\n   \n6. Send us a Pull Request\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 1.0.x   | :white_check_mark: |\n| 2.0.x   | :white_check_mark: |\n| 3.0.x   | :white_check_mark: |\n\n## Reporting a Vulnerability\n\nTo report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure."
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/composer.json",
    "content": "{\n    \"name\": \"phpseclib/phpseclib\",\n    \"type\": \"library\",\n    \"description\": \"PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.\",\n    \"keywords\": [\n        \"security\",\n        \"crypto\",\n        \"cryptography\",\n        \"encryption\",\n        \"signature\",\n        \"signing\",\n        \"rsa\",\n        \"aes\",\n        \"blowfish\",\n        \"twofish\",\n        \"ssh\",\n        \"sftp\",\n        \"x509\",\n        \"x.509\",\n        \"asn1\",\n        \"asn.1\",\n        \"BigInteger\"\n        ],\n    \"homepage\": \"http://phpseclib.sourceforge.net\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Jim Wigginton\",\n            \"email\": \"terrafrost@php.net\",\n            \"role\": \"Lead Developer\"\n        },\n        {\n            \"name\": \"Patrick Monnerat\",\n            \"email\": \"pm@datasphere.ch\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Andreas Fischer\",\n            \"email\": \"bantu@phpbb.com\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Hans-Jürgen Petrich\",\n            \"email\": \"petrich@tronic-media.com\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"graham@alt-three.com\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.6.1\",\n        \"paragonie/constant_time_encoding\": \"^1|^2|^3\",\n        \"paragonie/random_compat\": \"^1.4|^2.0|^9.99.99\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"*\"\n    },\n    \"suggest\": {\n        \"ext-libsodium\": \"SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.\",\n        \"ext-openssl\": \"Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.\",\n        \"ext-mcrypt\": \"Install the Mcrypt extension in order to speed up a few other cryptographic operations.\",\n        \"ext-gmp\": \"Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.\",\n        \"ext-dom\": \"Install the DOM extension to load XML formatted public keys.\"\n    },\n    \"autoload\": {\n        \"files\": [\n            \"phpseclib/bootstrap.php\"\n        ],\n        \"psr-4\": {\n            \"phpseclib3\\\\\": \"phpseclib/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"phpseclib3\\\\Tests\\\\\": \"tests/\"\n        }\n    },\n    \"config\": {\n        \"sort-packages\": true\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php",
    "content": "<?php\n\n/**\n * Common String Functions\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Common\\Functions;\n\nuse ParagonIE\\ConstantTime\\Base64;\nuse ParagonIE\\ConstantTime\\Base64UrlSafe;\nuse ParagonIE\\ConstantTime\\Hex;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\Common\\FiniteField;\n\n/**\n * Common String Functions\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Strings\n{\n    /**\n     * String Shift\n     *\n     * Inspired by array_shift\n     *\n     * @param string $string\n     * @param int $index\n     * @return string\n     */\n    public static function shift(&$string, $index = 1)\n    {\n        $substr = substr($string, 0, $index);\n        $string = substr($string, $index);\n        return $substr;\n    }\n\n    /**\n     * String Pop\n     *\n     * Inspired by array_pop\n     *\n     * @param string $string\n     * @param int $index\n     * @return string\n     */\n    public static function pop(&$string, $index = 1)\n    {\n        $substr = substr($string, -$index);\n        $string = substr($string, 0, -$index);\n        return $substr;\n    }\n\n    /**\n     * Parse SSH2-style string\n     *\n     * Returns either an array or a boolean if $data is malformed.\n     *\n     * Valid characters for $format are as follows:\n     *\n     * C = byte\n     * b = boolean (true/false)\n     * N = uint32\n     * Q = uint64\n     * s = string\n     * i = mpint\n     * L = name-list\n     *\n     * uint64 is not supported.\n     *\n     * @param string $format\n     * @param string $data\n     * @return mixed\n     */\n    public static function unpackSSH2($format, &$data)\n    {\n        $format = self::formatPack($format);\n        $result = [];\n        for ($i = 0; $i < strlen($format); $i++) {\n            switch ($format[$i]) {\n                case 'C':\n                case 'b':\n                    if (!strlen($data)) {\n                        throw new \\LengthException('At least one byte needs to be present for successful C / b decodes');\n                    }\n                    break;\n                case 'N':\n                case 'i':\n                case 's':\n                case 'L':\n                    if (strlen($data) < 4) {\n                        throw new \\LengthException('At least four byte needs to be present for successful N / i / s / L decodes');\n                    }\n                    break;\n                case 'Q':\n                    if (strlen($data) < 8) {\n                        throw new \\LengthException('At least eight byte needs to be present for successful N / i / s / L decodes');\n                    }\n                    break;\n\n                default:\n                    throw new \\InvalidArgumentException('$format contains an invalid character');\n            }\n            switch ($format[$i]) {\n                case 'C':\n                    $result[] = ord(self::shift($data));\n                    continue 2;\n                case 'b':\n                    $result[] = ord(self::shift($data)) != 0;\n                    continue 2;\n                case 'N':\n                    list(, $temp) = unpack('N', self::shift($data, 4));\n                    $result[] = $temp;\n                    continue 2;\n                case 'Q':\n                    // pack() added support for Q in PHP 5.6.3 and PHP 5.6 is phpseclib 3's minimum version\n                    // so in theory we could support this BUT, \"64-bit format codes are not available for\n                    // 32-bit versions\" and phpseclib works on 32-bit installs. on 32-bit installs\n                    // 64-bit floats can be used to get larger numbers then 32-bit signed ints would allow\n                    // for. sure, you're not gonna get the full precision of 64-bit numbers but just because\n                    // you need > 32-bit precision doesn't mean you need the full 64-bit precision\n                    $unpacked = unpack('Nupper/Nlower', self::shift($data, 8));\n                    $upper = $unpacked['upper'];\n                    $lower = $unpacked['lower'];\n                    $temp = $upper ? 4294967296 * $upper : 0;\n                    $temp += $lower < 0 ? ($lower & 0x7FFFFFFFF) + 0x80000000 : $lower;\n                    // $temp = hexdec(bin2hex(self::shift($data, 8)));\n                    $result[] = $temp;\n                    continue 2;\n            }\n            list(, $length) = unpack('N', self::shift($data, 4));\n            if (strlen($data) < $length) {\n                throw new \\LengthException(\"$length bytes needed; \" . strlen($data) . ' bytes available');\n            }\n            $temp = self::shift($data, $length);\n            switch ($format[$i]) {\n                case 'i':\n                    $result[] = new BigInteger($temp, -256);\n                    break;\n                case 's':\n                    $result[] = $temp;\n                    break;\n                case 'L':\n                    $result[] = explode(',', $temp);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Create SSH2-style string\n     *\n     * @param string $format\n     * @param string|int|float|array|bool ...$elements\n     * @return string\n     */\n    public static function packSSH2($format, ...$elements)\n    {\n        $format = self::formatPack($format);\n        if (strlen($format) != count($elements)) {\n            throw new \\InvalidArgumentException('There must be as many arguments as there are characters in the $format string');\n        }\n        $result = '';\n        for ($i = 0; $i < strlen($format); $i++) {\n            $element = $elements[$i];\n            switch ($format[$i]) {\n                case 'C':\n                    if (!is_int($element)) {\n                        throw new \\InvalidArgumentException('Bytes must be represented as an integer between 0 and 255, inclusive.');\n                    }\n                    $result .= pack('C', $element);\n                    break;\n                case 'b':\n                    if (!is_bool($element)) {\n                        throw new \\InvalidArgumentException('A boolean parameter was expected.');\n                    }\n                    $result .= $element ? \"\\1\" : \"\\0\";\n                    break;\n                case 'Q':\n                    if (!is_int($element) && !is_float($element)) {\n                        throw new \\InvalidArgumentException('An integer was expected.');\n                    }\n                    // 4294967296 == 1 << 32\n                    $result .= pack('NN', $element / 4294967296, $element);\n                    break;\n                case 'N':\n                    if (is_float($element)) {\n                        $element = (int) $element;\n                    }\n                    if (!is_int($element)) {\n                        throw new \\InvalidArgumentException('An integer was expected.');\n                    }\n                    $result .= pack('N', $element);\n                    break;\n                case 's':\n                    if (!self::is_stringable($element)) {\n                        throw new \\InvalidArgumentException('A string was expected.');\n                    }\n                    $result .= pack('Na*', strlen($element), $element);\n                    break;\n                case 'i':\n                    if (!$element instanceof BigInteger && !$element instanceof FiniteField\\Integer) {\n                        throw new \\InvalidArgumentException('A phpseclib3\\Math\\BigInteger or phpseclib3\\Math\\Common\\FiniteField\\Integer object was expected.');\n                    }\n                    $element = $element->toBytes(true);\n                    $result .= pack('Na*', strlen($element), $element);\n                    break;\n                case 'L':\n                    if (!is_array($element)) {\n                        throw new \\InvalidArgumentException('An array was expected.');\n                    }\n                    $element = implode(',', $element);\n                    $result .= pack('Na*', strlen($element), $element);\n                    break;\n                default:\n                    throw new \\InvalidArgumentException('$format contains an invalid character');\n            }\n        }\n        return $result;\n    }\n\n    /**\n     * Expand a pack string\n     *\n     * Converts C5 to CCCCC, for example.\n     *\n     * @param string $format\n     * @return string\n     */\n    private static function formatPack($format)\n    {\n        $parts = preg_split('#(\\d+)#', $format, -1, PREG_SPLIT_DELIM_CAPTURE);\n        $format = '';\n        for ($i = 1; $i < count($parts); $i += 2) {\n            $format .= substr($parts[$i - 1], 0, -1) . str_repeat(substr($parts[$i - 1], -1), $parts[$i]);\n        }\n        $format .= $parts[$i - 1];\n\n        return $format;\n    }\n\n    /**\n     * Convert binary data into bits\n     *\n     * bin2hex / hex2bin refer to base-256 encoded data as binary, whilst\n     * decbin / bindec refer to base-2 encoded data as binary. For the purposes\n     * of this function, bin refers to base-256 encoded data whilst bits refers\n     * to base-2 encoded data\n     *\n     * @param string $x\n     * @return string\n     */\n    public static function bits2bin($x)\n    {\n        /*\n        // the pure-PHP approach is faster than the GMP approach\n        if (function_exists('gmp_export')) {\n             return strlen($x) ? gmp_export(gmp_init($x, 2)) : gmp_init(0);\n        }\n        */\n\n        if (preg_match('#[^01]#', $x)) {\n            throw new \\RuntimeException('The only valid characters are 0 and 1');\n        }\n\n        if (!defined('PHP_INT_MIN')) {\n            define('PHP_INT_MIN', ~PHP_INT_MAX);\n        }\n\n        $length = strlen($x);\n        if (!$length) {\n            return '';\n        }\n        $block_size = PHP_INT_SIZE << 3;\n        $pad = $block_size - ($length % $block_size);\n        if ($pad != $block_size) {\n            $x = str_repeat('0', $pad) . $x;\n        }\n\n        $parts = str_split($x, $block_size);\n        $str = '';\n        foreach ($parts as $part) {\n            $xor = $part[0] == '1' ? PHP_INT_MIN : 0;\n            $part[0] = '0';\n            $str .= pack(\n                PHP_INT_SIZE == 4 ? 'N' : 'J',\n                $xor ^ eval('return 0b' . $part . ';')\n            );\n        }\n        return ltrim($str, \"\\0\");\n    }\n\n    /**\n     * Convert bits to binary data\n     *\n     * @param string $x\n     * @return string\n     */\n    public static function bin2bits($x, $trim = true)\n    {\n        /*\n        // the pure-PHP approach is slower than the GMP approach BUT\n        // i want to the pure-PHP version to be easily unit tested as well\n        if (function_exists('gmp_import')) {\n            return gmp_strval(gmp_import($x), 2);\n        }\n        */\n\n        $len = strlen($x);\n        $mod = $len % PHP_INT_SIZE;\n        if ($mod) {\n            $x = str_pad($x, $len + PHP_INT_SIZE - $mod, \"\\0\", STR_PAD_LEFT);\n        }\n\n        $bits = '';\n        if (PHP_INT_SIZE == 4) {\n            $digits = unpack('N*', $x);\n            foreach ($digits as $digit) {\n                $bits .= sprintf('%032b', $digit);\n            }\n        } else {\n            $digits = unpack('J*', $x);\n            foreach ($digits as $digit) {\n                $bits .= sprintf('%064b', $digit);\n            }\n        }\n\n        return $trim ? ltrim($bits, '0') : $bits;\n    }\n\n    /**\n     * Switch Endianness Bit Order\n     *\n     * @param string $x\n     * @return string\n     */\n    public static function switchEndianness($x)\n    {\n        $r = '';\n        for ($i = strlen($x) - 1; $i >= 0; $i--) {\n            $b = ord($x[$i]);\n            if (PHP_INT_SIZE === 8) {\n                // 3 operations\n                // from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv\n                $r .= chr((($b * 0x0202020202) & 0x010884422010) % 1023);\n            } else {\n                // 7 operations\n                // from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits\n                $p1 = ($b * 0x0802) & 0x22110;\n                $p2 = ($b * 0x8020) & 0x88440;\n                $r .= chr(\n                    (($p1 | $p2) * 0x10101) >> 16\n                );\n            }\n        }\n        return $r;\n    }\n\n    /**\n     * Increment the current string\n     *\n     * @param string $var\n     * @return string\n     */\n    public static function increment_str(&$var)\n    {\n        if (function_exists('sodium_increment')) {\n            $var = strrev($var);\n            sodium_increment($var);\n            $var = strrev($var);\n            return $var;\n        }\n\n        for ($i = 4; $i <= strlen($var); $i += 4) {\n            $temp = substr($var, -$i, 4);\n            switch ($temp) {\n                case \"\\xFF\\xFF\\xFF\\xFF\":\n                    $var = substr_replace($var, \"\\x00\\x00\\x00\\x00\", -$i, 4);\n                    break;\n                case \"\\x7F\\xFF\\xFF\\xFF\":\n                    $var = substr_replace($var, \"\\x80\\x00\\x00\\x00\", -$i, 4);\n                    return $var;\n                default:\n                    $temp = unpack('Nnum', $temp);\n                    $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);\n                    return $var;\n            }\n        }\n\n        $remainder = strlen($var) % 4;\n\n        if ($remainder == 0) {\n            return $var;\n        }\n\n        $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, \"\\0\", STR_PAD_LEFT));\n        $temp = substr(pack('N', $temp['num'] + 1), -$remainder);\n        $var = substr_replace($var, $temp, 0, $remainder);\n\n        return $var;\n    }\n\n    /**\n     * Find whether the type of a variable is string (or could be converted to one)\n     *\n     * @param mixed $var\n     * @return bool\n     * @psalm-assert-if-true string|\\Stringable $var\n     */\n    public static function is_stringable($var)\n    {\n        return is_string($var) || (is_object($var) && method_exists($var, '__toString'));\n    }\n\n    /**\n     * Constant Time Base64-decoding\n     *\n     * ParagoneIE\\ConstantTime doesn't use libsodium if it's available so we'll do so\n     * ourselves. see https://github.com/paragonie/constant_time_encoding/issues/39\n     *\n     * @param string $data\n     * @return string\n     */\n    public static function base64_decode($data)\n    {\n        return function_exists('sodium_base642bin') ?\n            sodium_base642bin($data, SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING, '=') :\n            Base64::decode($data);\n    }\n\n    /**\n     * Constant Time Base64-decoding (URL safe)\n     *\n     * @param string $data\n     * @return string\n     */\n    public static function base64url_decode($data)\n    {\n        // return self::base64_decode(str_replace(['-', '_'], ['+', '/'], $data));\n\n        return function_exists('sodium_base642bin') ?\n            sodium_base642bin($data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING, '=') :\n            Base64UrlSafe::decode($data);\n    }\n\n    /**\n     * Constant Time Base64-encoding\n     *\n     * @param string $data\n     * @return string\n     */\n    public static function base64_encode($data)\n    {\n        return function_exists('sodium_bin2base64') ?\n            sodium_bin2base64($data, SODIUM_BASE64_VARIANT_ORIGINAL) :\n            Base64::encode($data);\n    }\n\n    /**\n     * Constant Time Base64-encoding (URL safe)\n     *\n     * @param string $data\n     * @return string\n     */\n    public static function base64url_encode($data)\n    {\n        // return str_replace(['+', '/'], ['-', '_'], self::base64_encode($data));\n\n        return function_exists('sodium_bin2base64') ?\n            sodium_bin2base64($data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING) :\n            Base64UrlSafe::encode($data);\n    }\n\n    /**\n     * Constant Time Hex Decoder\n     *\n     * @param string $data\n     * @return string\n     */\n    public static function hex2bin($data)\n    {\n        return function_exists('sodium_hex2bin') ?\n            sodium_hex2bin($data) :\n            Hex::decode($data);\n    }\n\n    /**\n     * Constant Time Hex Encoder\n     *\n     * @param string $data\n     * @return string\n     */\n    public static function bin2hex($data)\n    {\n        return function_exists('sodium_bin2hex') ?\n            sodium_bin2hex($data) :\n            Hex::encode($data);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of AES.\n *\n * Uses mcrypt, if available/possible, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * NOTE: Since AES.php is (for compatibility and phpseclib-historical reasons) virtually\n * just a wrapper to Rijndael.php you may consider using Rijndael.php instead of\n * to save one include_once().\n *\n * If {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from\n * {@link self::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 136-bits\n * it'll be null-padded to 192-bits and 192 bits will be the key length until {@link self::setKey() setKey()}\n * is called, again, at which point, it'll be recalculated.\n *\n * Since \\phpseclib3\\Crypt\\AES extends \\phpseclib3\\Crypt\\Rijndael, some functions are available to be called that, in the context of AES, don't\n * make a whole lot of sense.  {@link self::setBlockLength() setBlockLength()}, for instance.  Calling that function,\n * however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $aes = new \\phpseclib3\\Crypt\\AES('ctr');\n *\n *    $aes->setKey('abcdefghijklmnop');\n *\n *    $size = 10 * 1024;\n *    $plaintext = '';\n *    for ($i = 0; $i < $size; $i++) {\n *        $plaintext.= 'a';\n *    }\n *\n *    echo $aes->decrypt($aes->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2008 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\n/**\n * Pure-PHP implementation of AES.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass AES extends Rijndael\n{\n    /**\n     * Dummy function\n     *\n     * Since \\phpseclib3\\Crypt\\AES extends \\phpseclib3\\Crypt\\Rijndael, this function is, technically, available, but it doesn't do anything.\n     *\n     * @see \\phpseclib3\\Crypt\\Rijndael::setBlockLength()\n     * @param int $length\n     * @throws \\BadMethodCallException anytime it's called\n     */\n    public function setBlockLength($length)\n    {\n        throw new \\BadMethodCallException('The block length cannot be set for AES.');\n    }\n\n    /**\n     * Sets the key length\n     *\n     * Valid key lengths are 128, 192, and 256.  Set the link to bool(false) to disable a fixed key length\n     *\n     * @see \\phpseclib3\\Crypt\\Rijndael:setKeyLength()\n     * @param int $length\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKeyLength($length)\n    {\n        switch ($length) {\n            case 128:\n            case 192:\n            case 256:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . $length . ' not supported by this algorithm. Only keys of sizes 128, 192 or 256 supported');\n        }\n        parent::setKeyLength($length);\n    }\n\n    /**\n     * Sets the key.\n     *\n     * Rijndael supports five different key lengths, AES only supports three.\n     *\n     * @see \\phpseclib3\\Crypt\\Rijndael:setKey()\n     * @see setKeyLength()\n     * @param string $key\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKey($key)\n    {\n        switch (strlen($key)) {\n            case 16:\n            case 24:\n            case 32:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');\n        }\n\n        parent::setKey($key);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of Blowfish.\n *\n * Uses mcrypt, if available, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * Useful resources are as follows:\n *\n *  - {@link http://en.wikipedia.org/wiki/Blowfish_(cipher) Wikipedia description of Blowfish}\n *\n * # An overview of bcrypt vs Blowfish\n *\n * OpenSSH private keys use a customized version of bcrypt. Specifically, instead of\n * encrypting OrpheanBeholderScryDoubt 64 times OpenSSH's bcrypt variant encrypts\n * OxychromaticBlowfishSwatDynamite 64 times. so we can't use crypt().\n *\n * bcrypt is basically Blowfish but instead of performing the key expansion once it performs\n * the expansion 129 times for each round, with the first key expansion interleaving the salt\n * and password. This renders OpenSSL unusable and forces us to use a pure-PHP implementation\n * of blowfish.\n *\n * # phpseclib's four different _encryptBlock() implementations\n *\n * When using Blowfish as an encryption algorithm, _encryptBlock() is called 9 + 512 +\n * (the number of blocks in the plaintext) times.\n *\n * Each of the first 9 calls to _encryptBlock() modify the P-array. Each of the next 512\n * calls modify the S-boxes. The remaining _encryptBlock() calls operate on the plaintext to\n * produce the ciphertext. In the pure-PHP implementation of Blowfish these remaining\n * _encryptBlock() calls are highly optimized through the use of eval(). Among other things,\n * P-array lookups are eliminated by hard-coding the key-dependent P-array values, and thus we\n * have explained 2 of the 4 different _encryptBlock() implementations.\n *\n * With bcrypt things are a bit different. _encryptBlock() is called 1,079,296 times,\n * assuming 16 rounds (which is what OpenSSH's bcrypt defaults to). The eval()-optimized\n * _encryptBlock() isn't as beneficial because the P-array values are not constant. Well, they\n * are constant, but only for, at most, 777 _encryptBlock() calls, which is equivalent to ~6KB\n * of data. The average length of back to back _encryptBlock() calls with a fixed P-array is\n * 514.12, which is ~4KB of data. Creating an eval()-optimized _encryptBlock() has an upfront\n * cost, which is CPU dependent and is probably not going to be worth it for just ~4KB of\n * data. Conseqeuently, bcrypt does not benefit from the eval()-optimized _encryptBlock().\n *\n * The regular _encryptBlock() does unpack() and pack() on every call, as well, and that can\n * begin to add up after one million function calls.\n *\n * In theory, one might think that it might be beneficial to rewrite all block ciphers so\n * that, instead of passing strings to _encryptBlock(), you convert the string to an array of\n * integers and then pass successive subarrays of that array to _encryptBlock. This, however,\n * kills PHP's memory use. Like let's say you have a 1MB long string. After doing\n * $in = str_repeat('a', 1024 * 1024); PHP's memory utilization jumps up by ~1MB. After doing\n * $blocks = str_split($in, 4); it jumps up by an additional ~16MB. After\n * $blocks = array_map(fn($x) => unpack('N*', $x), $blocks); it jumps up by an additional\n * ~90MB, yielding a 106x increase in memory usage. Consequently, it bcrypt calls a different\n * _encryptBlock() then the regular Blowfish does. That said, the Blowfish _encryptBlock() is\n * basically just a thin wrapper around the bcrypt _encryptBlock(), so there's that.\n *\n * This explains 3 of the 4 _encryptBlock() implementations. the last _encryptBlock()\n * implementation can best be understood by doing Ctrl + F and searching for where\n * self::$use_reg_intval is defined.\n *\n * # phpseclib's three different _setupKey() implementations\n *\n * Every bcrypt round is the equivalent of encrypting 512KB of data. Since OpenSSH uses 16\n * rounds by default that's ~8MB of data that's essentially being encrypted whenever\n * you use bcrypt. That's a lot of data, however, bcrypt operates within tighter constraints\n * than regular Blowfish, so we can use that to our advantage. In particular, whereas Blowfish\n * supports variable length keys, in bcrypt, the initial \"key\" is the sha512 hash of the\n * password. sha512 hashes are 512 bits or 64 bytes long and thus the bcrypt keys are of a\n * fixed length whereas Blowfish keys are not of a fixed length.\n *\n * bcrypt actually has two different key expansion steps. The first one (expandstate) is\n * constantly XOR'ing every _encryptBlock() parameter against the salt prior _encryptBlock()'s\n * being called. The second one (expand0state) is more similar to Blowfish's _setupKey()\n * but it can still use the fixed length key optimization discussed above and can do away with\n * the pack() / unpack() calls.\n *\n * I suppose _setupKey() could be made to be a thin wrapper around expandstate() but idk it's\n * just a lot of work for very marginal benefits as _setupKey() is only called once for\n * regular Blowfish vs the 128 times it's called --per round-- with bcrypt.\n *\n * # blowfish + bcrypt in the same class\n *\n * Altho there's a lot of Blowfish code that bcrypt doesn't re-use, bcrypt does re-use the\n * initial S-boxes, the initial P-array and the int-only _encryptBlock() implementation.\n *\n * # Credit\n *\n * phpseclib's bcrypt implementation is based losely off of OpenSSH's implementation:\n *\n * https://github.com/openssh/openssh-portable/blob/master/openbsd-compat/bcrypt_pbkdf.c\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $blowfish = new \\phpseclib3\\Crypt\\Blowfish('ctr');\n *\n *    $blowfish->setKey('12345678901234567890123456789012');\n *\n *    $plaintext = str_repeat('a', 1024);\n *\n *    echo $blowfish->decrypt($blowfish->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @author    Hans-Juergen Petrich <petrich@tronic-media.com>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\BlockCipher;\n\n/**\n * Pure-PHP implementation of Blowfish.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n * @author  Hans-Juergen Petrich <petrich@tronic-media.com>\n */\nclass Blowfish extends BlockCipher\n{\n    /**\n     * Block Length of the cipher\n     *\n     * @see Common\\SymmetricKey::block_size\n     * @var int\n     */\n    protected $block_size = 8;\n\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'blowfish';\n\n    /**\n     * Optimizing value while CFB-encrypting\n     *\n     * @see Common\\SymmetricKey::cfb_init_len\n     * @var int\n     */\n    protected $cfb_init_len = 500;\n\n    /**\n     * The fixed subkeys boxes\n     *\n     * S-Box\n     *\n     * @var    array\n     */\n    private static $sbox = [\n        0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,\n        0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,\n        0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n        0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,\n        0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\n        0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n        0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,\n        0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,\n        0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n        0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\n        0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,\n        0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n        0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,\n        0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,\n        0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n        0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,\n        0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,\n        0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n        0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,\n        0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\n        0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n        0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,\n        0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,\n        0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n        0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\n        0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,\n        0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n        0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,\n        0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,\n        0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n        0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,\n        0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,\n\n        0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n        0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,\n        0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n        0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n        0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,\n        0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n        0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n        0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\n        0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n        0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n        0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,\n        0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n        0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n        0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,\n        0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n        0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n        0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,\n        0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n        0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n        0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,\n        0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n        0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n        0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\n        0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n        0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n        0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,\n        0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n        0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n        0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,\n        0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n        0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n        0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,\n\n        0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\n        0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n        0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n        0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,\n        0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n        0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n        0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,\n        0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n        0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n        0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,\n        0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n        0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n        0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,\n        0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n        0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n        0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\n        0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n        0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n        0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,\n        0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n        0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n        0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,\n        0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n        0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n        0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,\n        0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n        0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n        0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,\n        0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n        0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n        0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\n        0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n\n        0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,\n        0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,\n        0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n        0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\n        0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,\n        0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n        0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,\n        0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,\n        0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n        0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,\n        0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,\n        0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n        0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,\n        0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\n        0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n        0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,\n        0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,\n        0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n        0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\n        0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,\n        0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n        0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,\n        0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,\n        0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n        0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,\n        0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,\n        0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n        0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,\n        0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\n        0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n        0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,\n        0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6\n    ];\n\n    /**\n     * P-Array consists of 18 32-bit subkeys\n     *\n     * @var array\n     */\n    private static $parray = [\n        0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,\n        0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n        0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b\n    ];\n\n    /**\n     * The BCTX-working Array\n     *\n     * Holds the expanded key [p] and the key-depended s-boxes [sb]\n     *\n     * @var array\n     */\n    private $bctx;\n\n    /**\n     * Holds the last used key\n     *\n     * @var array\n     */\n    private $kl;\n\n    /**\n     * The Key Length (in bytes)\n     * {@internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $Nk\n     *    because the encryption / decryption / key schedule creation requires this number and not $key_length.  We could\n     *    derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu\n     *    of that, we'll just precompute it once.}\n     *\n     * @see Common\\SymmetricKey::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 16;\n\n    /**\n     * Default Constructor.\n     *\n     * @param string $mode\n     * @throws \\InvalidArgumentException if an invalid / unsupported mode is provided\n     */\n    public function __construct($mode)\n    {\n        parent::__construct($mode);\n\n        if ($this->mode == self::MODE_STREAM) {\n            throw new \\InvalidArgumentException('Block ciphers cannot be ran in stream mode');\n        }\n    }\n\n    /**\n     * Sets the key length.\n     *\n     * Key lengths can be between 32 and 448 bits.\n     *\n     * @param int $length\n     */\n    public function setKeyLength($length)\n    {\n        if ($length < 32 || $length > 448) {\n                throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes between 32 and 448 bits are supported');\n        }\n\n        $this->key_length = $length >> 3;\n\n        parent::setKeyLength($length);\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see Common\\SymmetricKey::isValidEngine()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        if ($engine == self::ENGINE_OPENSSL) {\n            if ($this->key_length < 16) {\n                return false;\n            }\n            // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1\n            // \"Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider\"\n            // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not\n            if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\\d+\\.\\d+\\.\\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {\n                return false;\n            }\n            $this->cipher_name_openssl_ecb = 'bf-ecb';\n            $this->cipher_name_openssl = 'bf-' . $this->openssl_translate_mode();\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Setup the key (expansion)\n     *\n     * @see Common\\SymmetricKey::_setupKey()\n     */\n    protected function setupKey()\n    {\n        if (isset($this->kl['key']) && $this->key === $this->kl['key']) {\n            // already expanded\n            return;\n        }\n        $this->kl = ['key' => $this->key];\n\n        /* key-expanding p[] and S-Box building sb[] */\n        $this->bctx = [\n            'p'  => [],\n            'sb' => self::$sbox\n        ];\n\n        // unpack binary string in unsigned chars\n        $key  = array_values(unpack('C*', $this->key));\n        $keyl = count($key);\n        // with bcrypt $keyl will always be 16 (because the key is the sha512 of the key you provide)\n        for ($j = 0, $i = 0; $i < 18; ++$i) {\n            // xor P1 with the first 32-bits of the key, xor P2 with the second 32-bits ...\n            for ($data = 0, $k = 0; $k < 4; ++$k) {\n                $data = ($data << 8) | $key[$j];\n                if (++$j >= $keyl) {\n                    $j = 0;\n                }\n            }\n            $this->bctx['p'][] = self::$parray[$i] ^ intval($data);\n        }\n\n        // encrypt the zero-string, replace P1 and P2 with the encrypted data,\n        // encrypt P3 and P4 with the new P1 and P2, do it with all P-array and subkeys\n        $data = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n        for ($i = 0; $i < 18; $i += 2) {\n            list($l, $r) = array_values(unpack('N*', $data = $this->encryptBlock($data)));\n            $this->bctx['p'][$i    ] = $l;\n            $this->bctx['p'][$i + 1] = $r;\n        }\n        for ($i = 0; $i < 0x400; $i += 0x100) {\n            for ($j = 0; $j < 256; $j += 2) {\n                list($l, $r) = array_values(unpack('N*', $data = $this->encryptBlock($data)));\n                $this->bctx['sb'][$i | $j] = $l;\n                $this->bctx['sb'][$i | ($j + 1)] = $r;\n            }\n        }\n    }\n\n    /**\n     * Initialize Static Variables\n     */\n    protected static function initialize_static_variables()\n    {\n        if (is_float(self::$sbox[0x200])) {\n            self::$sbox = array_map('intval', self::$sbox);\n            self::$parray = array_map('intval', self::$parray);\n        }\n\n        parent::initialize_static_variables();\n    }\n\n    /**\n     * bcrypt\n     *\n     * @param string $sha2pass\n     * @param string $sha2salt\n     * @access private\n     * @return string\n     */\n    private static function bcrypt_hash($sha2pass, $sha2salt)\n    {\n        $p = self::$parray;\n        $sbox = self::$sbox;\n\n        $cdata = array_values(unpack('N*', 'OxychromaticBlowfishSwatDynamite'));\n        $sha2pass = array_values(unpack('N*', $sha2pass));\n        $sha2salt = array_values(unpack('N*', $sha2salt));\n\n        self::expandstate($sha2salt, $sha2pass, $sbox, $p);\n        for ($i = 0; $i < 64; $i++) {\n            self::expand0state($sha2salt, $sbox, $p);\n            self::expand0state($sha2pass, $sbox, $p);\n        }\n\n        for ($i = 0; $i < 64; $i++) {\n            for ($j = 0; $j < 8; $j += 2) { // count($cdata) == 8\n                list($cdata[$j], $cdata[$j + 1]) = self::encryptBlockHelperFast($cdata[$j], $cdata[$j + 1], $sbox, $p);\n            }\n        }\n\n        return pack('V*', ...$cdata);\n    }\n\n    /**\n     * Performs OpenSSH-style bcrypt\n     *\n     * @param string $pass\n     * @param string $salt\n     * @param int $keylen\n     * @param int $rounds\n     * @access public\n     * @return string\n     */\n    public static function bcrypt_pbkdf($pass, $salt, $keylen, $rounds)\n    {\n        self::initialize_static_variables();\n\n        if (PHP_INT_SIZE == 4) {\n            throw new \\RuntimeException('bcrypt is far too slow to be practical on 32-bit versions of PHP');\n        }\n\n        $sha2pass = hash('sha512', $pass, true);\n        $results = [];\n        $count = 1;\n        while (32 * count($results) < $keylen) {\n            $countsalt = $salt . pack('N', $count++);\n            $sha2salt = hash('sha512', $countsalt, true);\n            $out = $tmpout = self::bcrypt_hash($sha2pass, $sha2salt);\n            for ($i = 1; $i < $rounds; $i++) {\n                $sha2salt = hash('sha512', $tmpout, true);\n                $tmpout = self::bcrypt_hash($sha2pass, $sha2salt);\n                $out ^= $tmpout;\n            }\n            $results[] = $out;\n        }\n        $output = '';\n        for ($i = 0; $i < 32; $i++) {\n            foreach ($results as $result) {\n                $output .= $result[$i];\n            }\n        }\n        return substr($output, 0, $keylen);\n    }\n\n    /**\n     * Key expansion without salt\n     *\n     * @access private\n     * @param int[] $key\n     * @param int[] $sbox\n     * @param int[] $p\n     * @see self::_bcrypt_hash()\n     */\n    private static function expand0state(array $key, array &$sbox, array &$p)\n    {\n        // expand0state is basically the same thing as this:\n        //return self::expandstate(array_fill(0, 16, 0), $key);\n        // but this separate function eliminates a bunch of XORs and array lookups\n\n        $p = [\n            $p[0] ^ $key[0],\n            $p[1] ^ $key[1],\n            $p[2] ^ $key[2],\n            $p[3] ^ $key[3],\n            $p[4] ^ $key[4],\n            $p[5] ^ $key[5],\n            $p[6] ^ $key[6],\n            $p[7] ^ $key[7],\n            $p[8] ^ $key[8],\n            $p[9] ^ $key[9],\n            $p[10] ^ $key[10],\n            $p[11] ^ $key[11],\n            $p[12] ^ $key[12],\n            $p[13] ^ $key[13],\n            $p[14] ^ $key[14],\n            $p[15] ^ $key[15],\n            $p[16] ^ $key[0],\n            $p[17] ^ $key[1]\n        ];\n\n        // @codingStandardsIgnoreStart\n        list( $p[0],  $p[1]) = self::encryptBlockHelperFast(     0,      0, $sbox, $p);\n        list( $p[2],  $p[3]) = self::encryptBlockHelperFast($p[ 0], $p[ 1], $sbox, $p);\n        list( $p[4],  $p[5]) = self::encryptBlockHelperFast($p[ 2], $p[ 3], $sbox, $p);\n        list( $p[6],  $p[7]) = self::encryptBlockHelperFast($p[ 4], $p[ 5], $sbox, $p);\n        list( $p[8],  $p[9]) = self::encryptBlockHelperFast($p[ 6], $p[ 7], $sbox, $p);\n        list($p[10], $p[11]) = self::encryptBlockHelperFast($p[ 8], $p[ 9], $sbox, $p);\n        list($p[12], $p[13]) = self::encryptBlockHelperFast($p[10], $p[11], $sbox, $p);\n        list($p[14], $p[15]) = self::encryptBlockHelperFast($p[12], $p[13], $sbox, $p);\n        list($p[16], $p[17]) = self::encryptBlockHelperFast($p[14], $p[15], $sbox, $p);\n        // @codingStandardsIgnoreEnd\n\n        list($sbox[0], $sbox[1]) = self::encryptBlockHelperFast($p[16], $p[17], $sbox, $p);\n        for ($i = 2; $i < 1024; $i += 2) {\n            list($sbox[$i], $sbox[$i + 1]) = self::encryptBlockHelperFast($sbox[$i - 2], $sbox[$i - 1], $sbox, $p);\n        }\n    }\n\n    /**\n     * Key expansion with salt\n     *\n     * @access private\n     * @param int[] $data\n     * @param int[] $key\n     * @param int[] $sbox\n     * @param int[] $p\n     * @see self::_bcrypt_hash()\n     */\n    private static function expandstate(array $data, array $key, array &$sbox, array &$p)\n    {\n        $p = [\n            $p[0] ^ $key[0],\n            $p[1] ^ $key[1],\n            $p[2] ^ $key[2],\n            $p[3] ^ $key[3],\n            $p[4] ^ $key[4],\n            $p[5] ^ $key[5],\n            $p[6] ^ $key[6],\n            $p[7] ^ $key[7],\n            $p[8] ^ $key[8],\n            $p[9] ^ $key[9],\n            $p[10] ^ $key[10],\n            $p[11] ^ $key[11],\n            $p[12] ^ $key[12],\n            $p[13] ^ $key[13],\n            $p[14] ^ $key[14],\n            $p[15] ^ $key[15],\n            $p[16] ^ $key[0],\n            $p[17] ^ $key[1]\n        ];\n\n        // @codingStandardsIgnoreStart\n        list( $p[0],  $p[1]) = self::encryptBlockHelperFast($data[ 0]         , $data[ 1]         , $sbox, $p);\n        list( $p[2],  $p[3]) = self::encryptBlockHelperFast($data[ 2] ^ $p[ 0], $data[ 3] ^ $p[ 1], $sbox, $p);\n        list( $p[4],  $p[5]) = self::encryptBlockHelperFast($data[ 4] ^ $p[ 2], $data[ 5] ^ $p[ 3], $sbox, $p);\n        list( $p[6],  $p[7]) = self::encryptBlockHelperFast($data[ 6] ^ $p[ 4], $data[ 7] ^ $p[ 5], $sbox, $p);\n        list( $p[8],  $p[9]) = self::encryptBlockHelperFast($data[ 8] ^ $p[ 6], $data[ 9] ^ $p[ 7], $sbox, $p);\n        list($p[10], $p[11]) = self::encryptBlockHelperFast($data[10] ^ $p[ 8], $data[11] ^ $p[ 9], $sbox, $p);\n        list($p[12], $p[13]) = self::encryptBlockHelperFast($data[12] ^ $p[10], $data[13] ^ $p[11], $sbox, $p);\n        list($p[14], $p[15]) = self::encryptBlockHelperFast($data[14] ^ $p[12], $data[15] ^ $p[13], $sbox, $p);\n        list($p[16], $p[17]) = self::encryptBlockHelperFast($data[ 0] ^ $p[14], $data[ 1] ^ $p[15], $sbox, $p);\n        // @codingStandardsIgnoreEnd\n\n        list($sbox[0], $sbox[1]) = self::encryptBlockHelperFast($data[2] ^ $p[16], $data[3] ^ $p[17], $sbox, $p);\n        for ($i = 2, $j = 4; $i < 1024; $i += 2, $j = ($j + 2) % 16) { // instead of 16 maybe count($data) would be better?\n            list($sbox[$i], $sbox[$i + 1]) = self::encryptBlockHelperFast($data[$j] ^ $sbox[$i - 2], $data[$j + 1] ^ $sbox[$i - 1], $sbox, $p);\n        }\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @param string $in\n     * @return string\n     */\n    protected function encryptBlock($in)\n    {\n        $p = $this->bctx['p'];\n        // extract($this->bctx['sb'], EXTR_PREFIX_ALL, 'sb'); // slower\n        $sb = $this->bctx['sb'];\n\n        $in = unpack('N*', $in);\n        $l = $in[1];\n        $r = $in[2];\n\n        list($r, $l) = PHP_INT_SIZE == 4 ?\n            self::encryptBlockHelperSlow($l, $r, $sb, $p) :\n            self::encryptBlockHelperFast($l, $r, $sb, $p);\n\n        return pack(\"N*\", $r, $l);\n    }\n\n    /**\n     * Fast helper function for block encryption\n     *\n     * @access private\n     * @param int $x0\n     * @param int $x1\n     * @param int[] $sbox\n     * @param int[] $p\n     * @return int[]\n     */\n    private static function encryptBlockHelperFast($x0, $x1, array $sbox, array $p)\n    {\n        $x0 ^= $p[0];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[1];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[2];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[3];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[4];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[5];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[6];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[7];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[8];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[9];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[10];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[11];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[12];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[13];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[14];\n        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[15];\n        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[16];\n\n        return [$x1 & 0xFFFFFFFF ^ $p[17], $x0 & 0xFFFFFFFF];\n    }\n\n    /**\n     * Slow helper function for block encryption\n     *\n     * @access private\n     * @param int $x0\n     * @param int $x1\n     * @param int[] $sbox\n     * @param int[] $p\n     * @return int[]\n     */\n    private static function encryptBlockHelperSlow($x0, $x1, array $sbox, array $p)\n    {\n        // -16777216 == intval(0xFF000000) on 32-bit PHP installs\n        $x0 ^= $p[0];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[1];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[2];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[3];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[4];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[5];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[6];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[7];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[8];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[9];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[10];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[11];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[12];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[13];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[14];\n        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[15];\n        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[16];\n\n        return [$x1 ^ $p[17], $x0];\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @param string $in\n     * @return string\n     */\n    protected function decryptBlock($in)\n    {\n        $p = $this->bctx['p'];\n        $sb = $this->bctx['sb'];\n\n        $in = unpack('N*', $in);\n        $l = $in[1];\n        $r = $in[2];\n\n        for ($i = 17; $i > 2; $i -= 2) {\n            $l ^= $p[$i];\n            $r ^= self::safe_intval((self::safe_intval($sb[$l >> 24 & 0xff] + $sb[0x100 + ($l >> 16 & 0xff)]) ^\n                  $sb[0x200 + ($l >>  8 & 0xff)]) +\n                  $sb[0x300 + ($l       & 0xff)]);\n\n            $r ^= $p[$i - 1];\n            $l ^= self::safe_intval((self::safe_intval($sb[$r >> 24 & 0xff] + $sb[0x100 + ($r >> 16 & 0xff)]) ^\n                  $sb[0x200 + ($r >>  8 & 0xff)]) +\n                  $sb[0x300 + ($r       & 0xff)]);\n        }\n        return pack('N*', $r ^ $p[0], $l ^ $p[1]);\n    }\n\n    /**\n     * Setup the performance-optimized function for de/encrypt()\n     *\n     * @see Common\\SymmetricKey::_setupInlineCrypt()\n     */\n    protected function setupInlineCrypt()\n    {\n        $p = $this->bctx['p'];\n        $init_crypt = '\n            static $sb;\n            if (!$sb) {\n                $sb = $this->bctx[\"sb\"];\n            }\n        ';\n\n        $safeint = self::safe_intval_inline();\n\n        // Generating encrypt code:\n        $encrypt_block = '\n            $in = unpack(\"N*\", $in);\n            $l = $in[1];\n            $r = $in[2];\n        ';\n        for ($i = 0; $i < 16; $i += 2) {\n            $encrypt_block .= '\n                $l^= ' . $p[$i] . ';\n                $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$l >> 24 & 0xff] + $sb[0x100 + ($l >> 16 & 0xff)]') . ' ^\n                      $sb[0x200 + ($l >>  8 & 0xff)]) +\n                      $sb[0x300 + ($l       & 0xff)]') . ';\n\n                $r^= ' . $p[$i + 1] . ';\n                $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$r >> 24 & 0xff] + $sb[0x100 + ($r >> 16 & 0xff)]') . '  ^\n                      $sb[0x200 + ($r >>  8 & 0xff)]) +\n                      $sb[0x300 + ($r       & 0xff)]') . ';\n            ';\n        }\n        $encrypt_block .= '\n            $in = pack(\"N*\",\n                $r ^ ' . $p[17] . ',\n                $l ^ ' . $p[16] . '\n            );\n        ';\n         // Generating decrypt code:\n        $decrypt_block = '\n            $in = unpack(\"N*\", $in);\n            $l = $in[1];\n            $r = $in[2];\n        ';\n\n        for ($i = 17; $i > 2; $i -= 2) {\n            $decrypt_block .= '\n                $l^= ' . $p[$i] . ';\n                $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$l >> 24 & 0xff] + $sb[0x100 + ($l >> 16 & 0xff)]') . ' ^\n                      $sb[0x200 + ($l >>  8 & 0xff)]) +\n                      $sb[0x300 + ($l       & 0xff)]') . ';\n\n                $r^= ' . $p[$i - 1] . ';\n                $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$r >> 24 & 0xff] + $sb[0x100 + ($r >> 16 & 0xff)]') . ' ^\n                      $sb[0x200 + ($r >>  8 & 0xff)]) +\n                      $sb[0x300 + ($r       & 0xff)]') . ';\n            ';\n        }\n\n        $decrypt_block .= '\n            $in = pack(\"N*\",\n                $r ^ ' . $p[0] . ',\n                $l ^ ' . $p[1] . '\n            );\n        ';\n\n        $this->inline_crypt = $this->createInlineCryptFunction(\n            [\n               'init_crypt'    => $init_crypt,\n               'init_encrypt'  => '',\n               'init_decrypt'  => '',\n               'encrypt_block' => $encrypt_block,\n               'decrypt_block' => $decrypt_block\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of ChaCha20.\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2019 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Exception\\BadDecryptionException;\nuse phpseclib3\\Exception\\InsufficientSetupException;\n\n/**\n * Pure-PHP implementation of ChaCha20.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass ChaCha20 extends Salsa20\n{\n    /**\n     * The OpenSSL specific name of the cipher\n     *\n     * @var string\n     */\n    protected $cipher_name_openssl = 'chacha20';\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        switch ($engine) {\n            case self::ENGINE_LIBSODIUM:\n                // PHP 7.2.0 (30 Nov 2017) added support for libsodium\n\n                // we could probably make it so that if $this->counter == 0 then the first block would be done with either OpenSSL\n                // or PHP and then subsequent blocks would then be done with libsodium but idk - it's not a high priority atm\n\n                // we could also make it so that if $this->counter == 0 and $this->continuousBuffer then do the first string\n                // with libsodium and subsequent strings with openssl or pure-PHP but again not a high priority\n                return function_exists('sodium_crypto_aead_chacha20poly1305_ietf_encrypt') &&\n                       $this->key_length == 32 &&\n                       (($this->usePoly1305 && !isset($this->poly1305Key) && $this->counter == 0) || $this->counter == 1) &&\n                       !$this->continuousBuffer;\n            case self::ENGINE_OPENSSL:\n                // OpenSSL 1.1.0 (released 25 Aug 2016) added support for chacha20.\n                // PHP didn't support OpenSSL 1.1.0 until 7.0.19 (11 May 2017)\n\n                // if you attempt to provide openssl with a 128 bit key (as opposed to a 256 bit key) openssl will null\n                // pad the key to 256 bits and still use the expansion constant for 256-bit keys. the fact that\n                // openssl treats the IV as both the counter and nonce, however, let's us use openssl in continuous mode\n                // whereas libsodium does not\n                if ($this->key_length != 32) {\n                    return false;\n                }\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     * @see self::crypt()\n     * @param string $plaintext\n     * @return string $ciphertext\n     */\n    public function encrypt($plaintext)\n    {\n        $this->setup();\n\n        if ($this->engine == self::ENGINE_LIBSODIUM) {\n            return $this->encrypt_with_libsodium($plaintext);\n        }\n\n        return parent::encrypt($plaintext);\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).\n     * At least if the continuous buffer is disabled.\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see self::crypt()\n     * @param string $ciphertext\n     * @return string $plaintext\n     */\n    public function decrypt($ciphertext)\n    {\n        $this->setup();\n\n        if ($this->engine == self::ENGINE_LIBSODIUM) {\n            return $this->decrypt_with_libsodium($ciphertext);\n        }\n\n        return parent::decrypt($ciphertext);\n    }\n\n    /**\n     * Encrypts a message with libsodium\n     *\n     * @see self::encrypt()\n     * @param string $plaintext\n     * @return string $text\n     */\n    private function encrypt_with_libsodium($plaintext)\n    {\n        $params = [$plaintext, $this->aad, $this->nonce, $this->key];\n        $ciphertext = strlen($this->nonce) == 8 ?\n            sodium_crypto_aead_chacha20poly1305_encrypt(...$params) :\n            sodium_crypto_aead_chacha20poly1305_ietf_encrypt(...$params);\n        if (!$this->usePoly1305) {\n            return substr($ciphertext, 0, strlen($plaintext));\n        }\n\n        $newciphertext = substr($ciphertext, 0, strlen($plaintext));\n\n        $this->newtag = $this->usingGeneratedPoly1305Key && strlen($this->nonce) == 12 ?\n            substr($ciphertext, strlen($plaintext)) :\n            $this->poly1305($newciphertext);\n\n        return $newciphertext;\n    }\n\n    /**\n     * Decrypts a message with libsodium\n     *\n     * @see self::decrypt()\n     * @param string $ciphertext\n     * @return string $text\n     */\n    private function decrypt_with_libsodium($ciphertext)\n    {\n        $params = [$ciphertext, $this->aad, $this->nonce, $this->key];\n\n        if (isset($this->poly1305Key)) {\n            if ($this->oldtag === false) {\n                throw new InsufficientSetupException('Authentication Tag has not been set');\n            }\n            if ($this->usingGeneratedPoly1305Key && strlen($this->nonce) == 12) {\n                $plaintext = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(...$params);\n                $this->oldtag = false;\n                if ($plaintext === false) {\n                    throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');\n                }\n                return $plaintext;\n            }\n            $newtag = $this->poly1305($ciphertext);\n            if ($this->oldtag != substr($newtag, 0, strlen($this->oldtag))) {\n                $this->oldtag = false;\n                throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');\n            }\n            $this->oldtag = false;\n        }\n\n        $plaintext = strlen($this->nonce) == 8 ?\n            sodium_crypto_aead_chacha20poly1305_encrypt(...$params) :\n            sodium_crypto_aead_chacha20poly1305_ietf_encrypt(...$params);\n\n        return substr($plaintext, 0, strlen($ciphertext));\n    }\n\n    /**\n     * Sets the nonce.\n     *\n     * @param string $nonce\n     */\n    public function setNonce($nonce)\n    {\n        if (!is_string($nonce)) {\n            throw new \\UnexpectedValueException('The nonce should be a string');\n        }\n\n        /*\n          from https://tools.ietf.org/html/rfc7539#page-7\n\n          \"Note also that the original ChaCha had a 64-bit nonce and 64-bit\n           block count.  We have modified this here to be more consistent with\n           recommendations in Section 3.2 of [RFC5116].\"\n         */\n        switch (strlen($nonce)) {\n            case 8:  // 64 bits\n            case 12: // 96 bits\n                break;\n            default:\n                throw new \\LengthException('Nonce of size ' . strlen($nonce) . ' not supported by this algorithm. Only 64-bit nonces or 96-bit nonces are supported');\n        }\n\n        $this->nonce = $nonce;\n        $this->changed = true;\n        $this->setEngine();\n    }\n\n    /**\n     * Setup the self::ENGINE_INTERNAL $engine\n     *\n     * (re)init, if necessary, the internal cipher $engine\n     *\n     * _setup() will be called each time if $changed === true\n     * typically this happens when using one or more of following public methods:\n     *\n     * - setKey()\n     *\n     * - setNonce()\n     *\n     * - First run of encrypt() / decrypt() with no init-settings\n     *\n     * @see self::setKey()\n     * @see self::setNonce()\n     * @see self::disableContinuousBuffer()\n     */\n    protected function setup()\n    {\n        if (!$this->changed) {\n            return;\n        }\n\n        $this->enbuffer = $this->debuffer = ['ciphertext' => '', 'counter' => $this->counter];\n\n        $this->changed = $this->nonIVChanged = false;\n\n        if ($this->nonce === false) {\n            throw new InsufficientSetupException('No nonce has been defined');\n        }\n\n        if ($this->key === false) {\n            throw new InsufficientSetupException('No key has been defined');\n        }\n\n        if ($this->usePoly1305 && !isset($this->poly1305Key)) {\n            $this->usingGeneratedPoly1305Key = true;\n            if ($this->engine == self::ENGINE_LIBSODIUM) {\n                return;\n            }\n            $this->createPoly1305Key();\n        }\n\n        $key = $this->key;\n        if (strlen($key) == 16) {\n            $constant = 'expand 16-byte k';\n            $key .= $key;\n        } else {\n            $constant = 'expand 32-byte k';\n        }\n\n        $this->p1 = $constant . $key;\n        $this->p2 = $this->nonce;\n        if (strlen($this->nonce) == 8) {\n            $this->p2 = \"\\0\\0\\0\\0\" . $this->p2;\n        }\n    }\n\n    /**\n     * The quarterround function\n     *\n     * @param int $a\n     * @param int $b\n     * @param int $c\n     * @param int $d\n     */\n    protected static function quarterRound(&$a, &$b, &$c, &$d)\n    {\n        // in https://datatracker.ietf.org/doc/html/rfc7539#section-2.1 the addition,\n        // xor'ing and rotation are all on the same line so i'm keeping it on the same\n        // line here as well\n        // @codingStandardsIgnoreStart\n        $a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 16);\n        $c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 12);\n        $a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 8);\n        $c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 7);\n        // @codingStandardsIgnoreEnd\n    }\n\n    /**\n     * The doubleround function\n     *\n     * @param int $x0 (by reference)\n     * @param int $x1 (by reference)\n     * @param int $x2 (by reference)\n     * @param int $x3 (by reference)\n     * @param int $x4 (by reference)\n     * @param int $x5 (by reference)\n     * @param int $x6 (by reference)\n     * @param int $x7 (by reference)\n     * @param int $x8 (by reference)\n     * @param int $x9 (by reference)\n     * @param int $x10 (by reference)\n     * @param int $x11 (by reference)\n     * @param int $x12 (by reference)\n     * @param int $x13 (by reference)\n     * @param int $x14 (by reference)\n     * @param int $x15 (by reference)\n     */\n    protected static function doubleRound(&$x0, &$x1, &$x2, &$x3, &$x4, &$x5, &$x6, &$x7, &$x8, &$x9, &$x10, &$x11, &$x12, &$x13, &$x14, &$x15)\n    {\n        // columnRound\n        static::quarterRound($x0, $x4, $x8, $x12);\n        static::quarterRound($x1, $x5, $x9, $x13);\n        static::quarterRound($x2, $x6, $x10, $x14);\n        static::quarterRound($x3, $x7, $x11, $x15);\n        // rowRound\n        static::quarterRound($x0, $x5, $x10, $x15);\n        static::quarterRound($x1, $x6, $x11, $x12);\n        static::quarterRound($x2, $x7, $x8, $x13);\n        static::quarterRound($x3, $x4, $x9, $x14);\n    }\n\n    /**\n     * The Salsa20 hash function function\n     *\n     * On my laptop this loop unrolled / function dereferenced version of parent::salsa20 encrypts 1mb of text in\n     * 0.65s vs the 0.85s that it takes with the parent method.\n     *\n     * If we were free to assume that the host OS would always be 64-bits then the if condition in leftRotate could\n     * be eliminated and we could knock this done to 0.60s.\n     *\n     * For comparison purposes, RC4 takes 0.16s and AES in CTR mode with the Eval engine takes 0.48s.\n     * AES in CTR mode with the PHP engine takes 1.19s. Salsa20 / ChaCha20 do not benefit as much from the Eval\n     * approach due to the fact that there are a lot less variables to de-reference, fewer loops to unroll, etc\n     *\n     * @param string $x\n     */\n    protected static function salsa20($x)\n    {\n        list(, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15) = unpack('V*', $x);\n        $z0 = $x0;\n        $z1 = $x1;\n        $z2 = $x2;\n        $z3 = $x3;\n        $z4 = $x4;\n        $z5 = $x5;\n        $z6 = $x6;\n        $z7 = $x7;\n        $z8 = $x8;\n        $z9 = $x9;\n        $z10 = $x10;\n        $z11 = $x11;\n        $z12 = $x12;\n        $z13 = $x13;\n        $z14 = $x14;\n        $z15 = $x15;\n\n        // @codingStandardsIgnoreStart\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n\n        // columnRound\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);\n        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);\n        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);\n\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);\n        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);\n        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);\n\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);\n        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);\n        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);\n\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);\n        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);\n        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);\n\n        // rowRound\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);\n        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);\n        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);\n\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);\n        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);\n        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);\n\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);\n        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);\n        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);\n\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);\n        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);\n        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);\n        // @codingStandardsIgnoreEnd\n\n        $x0 += $z0;\n        $x1 += $z1;\n        $x2 += $z2;\n        $x3 += $z3;\n        $x4 += $z4;\n        $x5 += $z5;\n        $x6 += $z6;\n        $x7 += $z7;\n        $x8 += $z8;\n        $x9 += $z9;\n        $x10 += $z10;\n        $x11 += $z11;\n        $x12 += $z12;\n        $x13 += $z13;\n        $x14 += $z14;\n        $x15 += $z15;\n\n        return pack('V*', $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php",
    "content": "<?php\n\n/**\n * Base Class for all asymmetric key ciphers\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common;\n\nuse phpseclib3\\Crypt\\DSA;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Exception\\NoKeyLoadedException;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Base Class for all asymmetric cipher classes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AsymmetricKey\n{\n    /**\n     * Precomputed Zero\n     *\n     * @var BigInteger\n     */\n    protected static $zero;\n\n    /**\n     * Precomputed One\n     *\n     * @var BigInteger\n     */\n    protected static $one;\n\n    /**\n     * Format of the loaded key\n     *\n     * @var string\n     */\n    protected $format;\n\n    /**\n     * Hash function\n     *\n     * @var Hash\n     */\n    protected $hash;\n\n    /**\n     * HMAC function\n     *\n     * @var Hash\n     */\n    private $hmac;\n\n    /**\n     * Supported plugins (lower case)\n     *\n     * @see self::initialize_static_variables()\n     * @var array\n     */\n    private static $plugins = [];\n\n    /**\n     * Invisible plugins\n     *\n     * @see self::initialize_static_variables()\n     * @var array\n     */\n    private static $invisiblePlugins = [];\n\n    /**\n     * Available Engines\n     *\n     * @var boolean[]\n     */\n    protected static $engines = [];\n\n    /**\n     * Key Comment\n     *\n     * @var null|string\n     */\n    private $comment;\n\n    /**\n     * @param string $type\n     * @return array|string\n     */\n    abstract public function toString($type, array $options = []);\n\n    /**\n     * The constructor\n     */\n    protected function __construct()\n    {\n        self::initialize_static_variables();\n\n        $this->hash = new Hash('sha256');\n        $this->hmac = new Hash('sha256');\n    }\n\n    /**\n     * Initialize static variables\n     */\n    protected static function initialize_static_variables()\n    {\n        if (!isset(self::$zero)) {\n            self::$zero = new BigInteger(0);\n            self::$one = new BigInteger(1);\n        }\n\n        self::loadPlugins('Keys');\n        if (static::ALGORITHM != 'RSA' && static::ALGORITHM != 'DH') {\n            self::loadPlugins('Signature');\n        }\n    }\n\n    /**\n     * Load the key\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return PublicKey|PrivateKey\n     */\n    public static function load($key, $password = false)\n    {\n        self::initialize_static_variables();\n\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('load() should not be called from final classes (' . static::class . ')');\n        }\n\n        $components = false;\n        foreach (self::$plugins[static::ALGORITHM]['Keys'] as $format) {\n            if (isset(self::$invisiblePlugins[static::ALGORITHM]) && in_array($format, self::$invisiblePlugins[static::ALGORITHM])) {\n                continue;\n            }\n            try {\n                $components = $format::load($key, $password);\n            } catch (\\Exception $e) {\n                $components = false;\n            }\n            if ($components !== false) {\n                break;\n            }\n        }\n\n        if ($components === false) {\n            throw new NoKeyLoadedException('Unable to read key');\n        }\n\n        $components['format'] = $format;\n        $components['secret'] = isset($components['secret']) ? $components['secret'] : '';\n        $comment = isset($components['comment']) ? $components['comment'] : null;\n        $new = static::onLoad($components);\n        $new->format = $format;\n        $new->comment = $comment;\n        return $new instanceof PrivateKey ?\n            $new->withPassword($password) :\n            $new;\n    }\n\n    /**\n     * Loads a private key\n     *\n     * @return PrivateKey\n     * @param string|array $key\n     * @param string $password optional\n     */\n    public static function loadPrivateKey($key, $password = '')\n    {\n        $key = self::load($key, $password);\n        if (!$key instanceof PrivateKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a private key');\n        }\n        return $key;\n    }\n\n    /**\n     * Loads a public key\n     *\n     * @return PublicKey\n     * @param string|array $key\n     */\n    public static function loadPublicKey($key)\n    {\n        $key = self::load($key);\n        if (!$key instanceof PublicKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a public key');\n        }\n        return $key;\n    }\n\n    /**\n     * Loads parameters\n     *\n     * @return AsymmetricKey\n     * @param string|array $key\n     */\n    public static function loadParameters($key)\n    {\n        $key = self::load($key);\n        if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a parameter');\n        }\n        return $key;\n    }\n\n    /**\n     * Load the key, assuming a specific format\n     *\n     * @param string $type\n     * @param string $key\n     * @param string $password optional\n     * @return static\n     */\n    public static function loadFormat($type, $key, $password = false)\n    {\n        self::initialize_static_variables();\n\n        $components = false;\n        $format = strtolower($type);\n        if (isset(self::$plugins[static::ALGORITHM]['Keys'][$format])) {\n            $format = self::$plugins[static::ALGORITHM]['Keys'][$format];\n            $components = $format::load($key, $password);\n        }\n\n        if ($components === false) {\n            throw new NoKeyLoadedException('Unable to read key');\n        }\n\n        $components['format'] = $format;\n        $components['secret'] = isset($components['secret']) ? $components['secret'] : '';\n\n        $new = static::onLoad($components);\n        $new->format = $format;\n        return $new instanceof PrivateKey ?\n            $new->withPassword($password) :\n            $new;\n    }\n\n    /**\n     * Loads a private key\n     *\n     * @return PrivateKey\n     * @param string $type\n     * @param string $key\n     * @param string $password optional\n     */\n    public static function loadPrivateKeyFormat($type, $key, $password = false)\n    {\n        $key = self::loadFormat($type, $key, $password);\n        if (!$key instanceof PrivateKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a private key');\n        }\n        return $key;\n    }\n\n    /**\n     * Loads a public key\n     *\n     * @return PublicKey\n     * @param string $type\n     * @param string $key\n     */\n    public static function loadPublicKeyFormat($type, $key)\n    {\n        $key = self::loadFormat($type, $key);\n        if (!$key instanceof PublicKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a public key');\n        }\n        return $key;\n    }\n\n    /**\n     * Loads parameters\n     *\n     * @return AsymmetricKey\n     * @param string $type\n     * @param string|array $key\n     */\n    public static function loadParametersFormat($type, $key)\n    {\n        $key = self::loadFormat($type, $key);\n        if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a parameter');\n        }\n        return $key;\n    }\n\n    /**\n     * Validate Plugin\n     *\n     * @param string $format\n     * @param string $type\n     * @param string $method optional\n     * @return mixed\n     */\n    protected static function validatePlugin($format, $type, $method = null)\n    {\n        $type = strtolower($type);\n        if (!isset(self::$plugins[static::ALGORITHM][$format][$type])) {\n            throw new UnsupportedFormatException(\"$type is not a supported format\");\n        }\n        $type = self::$plugins[static::ALGORITHM][$format][$type];\n        if (isset($method) && !method_exists($type, $method)) {\n            throw new UnsupportedFormatException(\"$type does not implement $method\");\n        }\n\n        return $type;\n    }\n\n    /**\n     * Load Plugins\n     *\n     * @param string $format\n     */\n    private static function loadPlugins($format)\n    {\n        if (!isset(self::$plugins[static::ALGORITHM][$format])) {\n            self::$plugins[static::ALGORITHM][$format] = [];\n            foreach (new \\DirectoryIterator(__DIR__ . '/../' . static::ALGORITHM . '/Formats/' . $format . '/') as $file) {\n                if ($file->getExtension() != 'php') {\n                    continue;\n                }\n                $name = $file->getBasename('.php');\n                if ($name[0] == '.') {\n                    continue;\n                }\n                $type = 'phpseclib3\\Crypt\\\\' . static::ALGORITHM . '\\\\Formats\\\\' . $format . '\\\\' . $name;\n                $reflect = new \\ReflectionClass($type);\n                if ($reflect->isTrait()) {\n                    continue;\n                }\n                self::$plugins[static::ALGORITHM][$format][strtolower($name)] = $type;\n                if ($reflect->hasConstant('IS_INVISIBLE')) {\n                    self::$invisiblePlugins[static::ALGORITHM][] = $type;\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns a list of supported formats.\n     *\n     * @return array\n     */\n    public static function getSupportedKeyFormats()\n    {\n        self::initialize_static_variables();\n\n        return self::$plugins[static::ALGORITHM]['Keys'];\n    }\n\n    /**\n     * Add a fileformat plugin\n     *\n     * The plugin needs to either already be loaded or be auto-loadable.\n     * Loading a plugin whose shortname overwrite an existing shortname will overwrite the old plugin.\n     *\n     * @see self::load()\n     * @param string $fullname\n     * @return bool\n     */\n    public static function addFileFormat($fullname)\n    {\n        self::initialize_static_variables();\n\n        if (class_exists($fullname)) {\n            $meta = new \\ReflectionClass($fullname);\n            $shortname = $meta->getShortName();\n            self::$plugins[static::ALGORITHM]['Keys'][strtolower($shortname)] = $fullname;\n            if ($meta->hasConstant('IS_INVISIBLE')) {\n                self::$invisiblePlugins[static::ALGORITHM][] = strtolower($shortname);\n            }\n        }\n    }\n\n    /**\n     * Returns the format of the loaded key.\n     *\n     * If the key that was loaded wasn't in a valid or if the key was auto-generated\n     * with RSA::createKey() then this will throw an exception.\n     *\n     * @see self::load()\n     * @return mixed\n     */\n    public function getLoadedFormat()\n    {\n        if (empty($this->format)) {\n            throw new NoKeyLoadedException('This key was created with createKey - it was not loaded with load. Therefore there is no \"loaded format\"');\n        }\n\n        $meta = new \\ReflectionClass($this->format);\n        return $meta->getShortName();\n    }\n\n    /**\n     * Returns the key's comment\n     *\n     * Not all key formats support comments. If you want to set a comment use toString()\n     *\n     * @return null|string\n     */\n    public function getComment()\n    {\n        return $this->comment;\n    }\n\n    /**\n     * Tests engine validity\n     *\n     */\n    public static function useBestEngine()\n    {\n        static::$engines = [\n            'PHP' => true,\n            'OpenSSL' => extension_loaded('openssl'),\n            // this test can be satisfied by either of the following:\n            // http://php.net/manual/en/book.sodium.php\n            // https://github.com/paragonie/sodium_compat\n            'libsodium' => function_exists('sodium_crypto_sign_keypair')\n        ];\n\n        return static::$engines;\n    }\n\n    /**\n     * Flag to use internal engine only (useful for unit testing)\n     *\n     */\n    public static function useInternalEngine()\n    {\n        static::$engines = [\n            'PHP' => true,\n            'OpenSSL' => false,\n            'libsodium' => false\n        ];\n    }\n\n    /**\n     * __toString() magic method\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->toString('PKCS8');\n    }\n\n    /**\n     * Determines which hashing function should be used\n     *\n     * @param string $hash\n     */\n    public function withHash($hash)\n    {\n        $new = clone $this;\n\n        $new->hash = new Hash($hash);\n        $new->hmac = new Hash($hash);\n\n        return $new;\n    }\n\n    /**\n     * Returns the hash algorithm currently being used\n     *\n     */\n    public function getHash()\n    {\n        return clone $this->hash;\n    }\n\n    /**\n     * Compute the pseudorandom k for signature generation,\n     * using the process specified for deterministic DSA.\n     *\n     * @param string $h1\n     * @return string\n     */\n    protected function computek($h1)\n    {\n        $v = str_repeat(\"\\1\", strlen($h1));\n\n        $k = str_repeat(\"\\0\", strlen($h1));\n\n        $x = $this->int2octets($this->x);\n        $h1 = $this->bits2octets($h1);\n\n        $this->hmac->setKey($k);\n        $k = $this->hmac->hash($v . \"\\0\" . $x . $h1);\n        $this->hmac->setKey($k);\n        $v = $this->hmac->hash($v);\n        $k = $this->hmac->hash($v . \"\\1\" . $x . $h1);\n        $this->hmac->setKey($k);\n        $v = $this->hmac->hash($v);\n\n        $qlen = $this->q->getLengthInBytes();\n\n        while (true) {\n            $t = '';\n            while (strlen($t) < $qlen) {\n                $v = $this->hmac->hash($v);\n                $t = $t . $v;\n            }\n            $k = $this->bits2int($t);\n\n            if (!$k->equals(self::$zero) && $k->compare($this->q) < 0) {\n                break;\n            }\n            $k = $this->hmac->hash($v . \"\\0\");\n            $this->hmac->setKey($k);\n            $v = $this->hmac->hash($v);\n        }\n\n        return $k;\n    }\n\n    /**\n     * Integer to Octet String\n     *\n     * @param BigInteger $v\n     * @return string\n     */\n    private function int2octets($v)\n    {\n        $out = $v->toBytes();\n        $rolen = $this->q->getLengthInBytes();\n        if (strlen($out) < $rolen) {\n            return str_pad($out, $rolen, \"\\0\", STR_PAD_LEFT);\n        } elseif (strlen($out) > $rolen) {\n            return substr($out, -$rolen);\n        } else {\n            return $out;\n        }\n    }\n\n    /**\n     * Bit String to Integer\n     *\n     * @param string $in\n     * @return BigInteger\n     */\n    protected function bits2int($in)\n    {\n        $v = new BigInteger($in, 256);\n        $vlen = strlen($in) << 3;\n        $qlen = $this->q->getLength();\n        if ($vlen > $qlen) {\n            return $v->bitwise_rightShift($vlen - $qlen);\n        }\n        return $v;\n    }\n\n    /**\n     * Bit String to Octet String\n     *\n     * @param string $in\n     * @return string\n     */\n    private function bits2octets($in)\n    {\n        $z1 = $this->bits2int($in);\n        $z2 = $z1->subtract($this->q);\n        return $z2->compare(self::$zero) < 0 ?\n            $this->int2octets($z1) :\n            $this->int2octets($z2);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.php",
    "content": "<?php\n\n/**\n * Base Class for all block ciphers\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @author    Hans-Juergen Petrich <petrich@tronic-media.com>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common;\n\n/**\n * Base Class for all block cipher classes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BlockCipher extends SymmetricKey\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php",
    "content": "<?php\n\n/**\n * JSON Web Key (RFC7517) Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\n\n/**\n * JSON Web Key Formatted Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class JWK\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        $key = preg_replace('#\\s#', '', $key); // remove whitespace\n\n        if (PHP_VERSION_ID >= 73000) {\n            $key = json_decode($key, null, 512, JSON_THROW_ON_ERROR);\n        } else {\n            $key = json_decode($key);\n            if (!$key) {\n                throw new \\RuntimeException('Unable to decode JSON');\n            }\n        }\n\n        if (isset($key->kty)) {\n            return $key;\n        }\n\n        if (!is_object($key)) {\n            throw new \\RuntimeException('invalid JWK: not an object');\n        }\n\n        if (!isset($key->keys)) {\n            throw new \\RuntimeException('invalid JWK: object has no property \"keys\"');\n        }\n\n        if (count($key->keys) != 1) {\n            throw new \\RuntimeException('Although the JWK key format supports multiple keys phpseclib does not');\n        }\n\n        return $key->keys[0];\n    }\n\n    /**\n     * Wrap a key appropriately\n     *\n     * @return string\n     */\n    protected static function wrapKey(array $key, array $options)\n    {\n        return json_encode(['keys' => [$key + $options]]);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.php",
    "content": "<?php\n\n/**\n * OpenSSH Key Handler\n *\n * PHP version 5\n *\n * Place in $HOME/.ssh/authorized_keys\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\AES;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Exception\\BadDecryptionException;\n\n/**\n * OpenSSH Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSH\n{\n    /**\n     * Default comment\n     *\n     * @var string\n     */\n    protected static $comment = 'phpseclib-generated-key';\n\n    /**\n     * Binary key flag\n     *\n     * @var bool\n     */\n    protected static $binary = false;\n\n    /**\n     * Sets the default comment\n     *\n     * @param string $comment\n     */\n    public static function setComment($comment)\n    {\n        self::$comment = str_replace([\"\\r\", \"\\n\"], '', $comment);\n    }\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * $type can be either ssh-dss or ssh-rsa\n     *\n     * @param string $key\n     * @param string $password\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        // key format is described here:\n        // https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.key?annotate=HEAD\n\n        if (strpos($key, 'BEGIN OPENSSH PRIVATE KEY') !== false) {\n            $key = preg_replace('#(?:^-.*?-[\\r\\n]*$)|\\s#ms', '', $key);\n            $key = Strings::base64_decode($key);\n            $magic = Strings::shift($key, 15);\n            if ($magic != \"openssh-key-v1\\0\") {\n                throw new \\RuntimeException('Expected openssh-key-v1');\n            }\n            list($ciphername, $kdfname, $kdfoptions, $numKeys) = Strings::unpackSSH2('sssN', $key);\n            if ($numKeys != 1) {\n                // if we wanted to support multiple keys we could update PublicKeyLoader to preview what the # of keys\n                // would be; it'd then call Common\\Keys\\OpenSSH.php::load() and get the paddedKey. it'd then pass\n                // that to the appropriate key loading parser $numKey times or something\n                throw new \\RuntimeException('Although the OpenSSH private key format supports multiple keys phpseclib does not');\n            }\n            switch ($ciphername) {\n                case 'none':\n                    break;\n                case 'aes256-ctr':\n                    if ($kdfname != 'bcrypt') {\n                        throw new \\RuntimeException('Only the bcrypt kdf is supported (' . $kdfname . ' encountered)');\n                    }\n                    list($salt, $rounds) = Strings::unpackSSH2('sN', $kdfoptions);\n                    $crypto = new AES('ctr');\n                    //$crypto->setKeyLength(256);\n                    //$crypto->disablePadding();\n                    $crypto->setPassword($password, 'bcrypt', $salt, $rounds, 32);\n                    break;\n                default:\n                    throw new \\RuntimeException('The only supported ciphers are: none, aes256-ctr (' . $ciphername . ' is being used)');\n            }\n\n            list($publicKey, $paddedKey) = Strings::unpackSSH2('ss', $key);\n            list($type) = Strings::unpackSSH2('s', $publicKey);\n            if (isset($crypto)) {\n                $paddedKey = $crypto->decrypt($paddedKey);\n            }\n            list($checkint1, $checkint2) = Strings::unpackSSH2('NN', $paddedKey);\n            // any leftover bytes in $paddedKey are for padding? but they should be sequential bytes. eg. 1, 2, 3, etc.\n            if ($checkint1 != $checkint2) {\n                if (isset($crypto)) {\n                    throw new BadDecryptionException('Unable to decrypt key - please verify the password you are using');\n                }\n                throw new \\RuntimeException(\"The two checkints do not match ($checkint1 vs. $checkint2)\");\n            }\n            self::checkType($type);\n\n            return compact('type', 'publicKey', 'paddedKey');\n        }\n\n        $parts = explode(' ', $key, 3);\n\n        if (!isset($parts[1])) {\n            $key = base64_decode($parts[0]);\n            $comment = false;\n        } else {\n            $asciiType = $parts[0];\n            self::checkType($parts[0]);\n            $key = base64_decode($parts[1]);\n            $comment = isset($parts[2]) ? $parts[2] : false;\n        }\n        if ($key === false) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        list($type) = Strings::unpackSSH2('s', $key);\n        self::checkType($type);\n        if (isset($asciiType) && $asciiType != $type) {\n            throw new \\RuntimeException('Two different types of keys are claimed: ' . $asciiType . ' and ' . $type);\n        }\n        if (strlen($key) <= 4) {\n            throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        $publicKey = $key;\n\n        return compact('type', 'publicKey', 'comment');\n    }\n\n    /**\n     * Toggle between binary and printable keys\n     *\n     * Printable keys are what are generated by default. These are the ones that go in\n     * $HOME/.ssh/authorized_key.\n     *\n     * @param bool $enabled\n     */\n    public static function setBinaryOutput($enabled)\n    {\n        self::$binary = $enabled;\n    }\n\n    /**\n     * Checks to see if the type is valid\n     *\n     * @param string $candidate\n     */\n    private static function checkType($candidate)\n    {\n        if (!in_array($candidate, static::$types)) {\n            throw new \\RuntimeException(\"The key type ($candidate) is not equal to: \" . implode(',', static::$types));\n        }\n    }\n\n    /**\n     * Wrap a private key appropriately\n     *\n     * @param string $publicKey\n     * @param string $privateKey\n     * @param string $password\n     * @param array $options\n     * @return string\n     */\n    protected static function wrapPrivateKey($publicKey, $privateKey, $password, $options)\n    {\n        list(, $checkint) = unpack('N', Random::string(4));\n\n        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;\n        $paddedKey = Strings::packSSH2('NN', $checkint, $checkint) .\n                     $privateKey .\n                     Strings::packSSH2('s', $comment);\n\n        $usesEncryption = !empty($password) && is_string($password);\n\n        /*\n           from http://tools.ietf.org/html/rfc4253#section-6 :\n\n           Note that the length of the concatenation of 'packet_length',\n           'padding_length', 'payload', and 'random padding' MUST be a multiple\n           of the cipher block size or 8, whichever is larger.\n         */\n        $blockSize = $usesEncryption ? 16 : 8;\n        $paddingLength = (($blockSize - 1) * strlen($paddedKey)) % $blockSize;\n        for ($i = 1; $i <= $paddingLength; $i++) {\n            $paddedKey .= chr($i);\n        }\n        if (!$usesEncryption) {\n            $key = Strings::packSSH2('sssNss', 'none', 'none', '', 1, $publicKey, $paddedKey);\n        } else {\n            $rounds = isset($options['rounds']) ? $options['rounds'] : 16;\n            $salt = Random::string(16);\n            $kdfoptions = Strings::packSSH2('sN', $salt, $rounds);\n            $crypto = new AES('ctr');\n            $crypto->setPassword($password, 'bcrypt', $salt, $rounds, 32);\n            $paddedKey = $crypto->encrypt($paddedKey);\n            $key = Strings::packSSH2('sssNss', 'aes256-ctr', 'bcrypt', $kdfoptions, 1, $publicKey, $paddedKey);\n        }\n        $key = \"openssh-key-v1\\0$key\";\n\n        return \"-----BEGIN OPENSSH PRIVATE KEY-----\\n\" .\n               chunk_split(Strings::base64_encode($key), 70, \"\\n\") .\n               \"-----END OPENSSH PRIVATE KEY-----\\n\";\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.php",
    "content": "<?php\n\n/**\n * PKCS Formatted Key Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Keys;\n\n/**\n * PKCS1 Formatted Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS\n{\n    /**\n     * Auto-detect the format\n     */\n    const MODE_ANY = 0;\n    /**\n     * Require base64-encoded PEM's be supplied\n     */\n    const MODE_PEM = 1;\n    /**\n     * Require raw DER's be supplied\n     */\n    const MODE_DER = 2;\n    /**#@-*/\n\n    /**\n     * Is the key a base-64 encoded PEM, DER or should it be auto-detected?\n     *\n     * @var int\n     */\n    protected static $format = self::MODE_ANY;\n\n    /**\n     * Require base64-encoded PEM's be supplied\n     *\n     */\n    public static function requirePEM()\n    {\n        self::$format = self::MODE_PEM;\n    }\n\n    /**\n     * Require raw DER's be supplied\n     *\n     */\n    public static function requireDER()\n    {\n        self::$format = self::MODE_DER;\n    }\n\n    /**\n     * Accept any format and auto detect the format\n     *\n     * This is the default setting\n     *\n     */\n    public static function requireAny()\n    {\n        self::$format = self::MODE_ANY;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS1.php",
    "content": "<?php\n\n/**\n * PKCS1 Formatted Key Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\AES;\nuse phpseclib3\\Crypt\\DES;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Crypt\\TripleDES;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PKCS1 Formatted Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS1 extends PKCS\n{\n    /**\n     * Default encryption algorithm\n     *\n     * @var string\n     */\n    private static $defaultEncryptionAlgorithm = 'AES-128-CBC';\n\n    /**\n     * Sets the default encryption algorithm\n     *\n     * @param string $algo\n     */\n    public static function setEncryptionAlgorithm($algo)\n    {\n        self::$defaultEncryptionAlgorithm = $algo;\n    }\n\n    /**\n     * Returns the mode constant corresponding to the mode string\n     *\n     * @param string $mode\n     * @return int\n     * @throws \\UnexpectedValueException if the block cipher mode is unsupported\n     */\n    private static function getEncryptionMode($mode)\n    {\n        switch ($mode) {\n            case 'CBC':\n            case 'ECB':\n            case 'CFB':\n            case 'OFB':\n            case 'CTR':\n                return $mode;\n        }\n        throw new \\UnexpectedValueException('Unsupported block cipher mode of operation');\n    }\n\n    /**\n     * Returns a cipher object corresponding to a string\n     *\n     * @param string $algo\n     * @return string\n     * @throws \\UnexpectedValueException if the encryption algorithm is unsupported\n     */\n    private static function getEncryptionObject($algo)\n    {\n        $modes = '(CBC|ECB|CFB|OFB|CTR)';\n        switch (true) {\n            case preg_match(\"#^AES-(128|192|256)-$modes$#\", $algo, $matches):\n                $cipher = new AES(self::getEncryptionMode($matches[2]));\n                $cipher->setKeyLength($matches[1]);\n                return $cipher;\n            case preg_match(\"#^DES-EDE3-$modes$#\", $algo, $matches):\n                return new TripleDES(self::getEncryptionMode($matches[1]));\n            case preg_match(\"#^DES-$modes$#\", $algo, $matches):\n                return new DES(self::getEncryptionMode($matches[1]));\n            default:\n                throw new UnsupportedAlgorithmException($algo . ' is not a supported algorithm');\n        }\n    }\n\n    /**\n     * Generate a symmetric key for PKCS#1 keys\n     *\n     * @param string $password\n     * @param string $iv\n     * @param int $length\n     * @return string\n     */\n    private static function generateSymmetricKey($password, $iv, $length)\n    {\n        $symkey = '';\n        $iv = substr($iv, 0, 8);\n        while (strlen($symkey) < $length) {\n            $symkey .= md5($symkey . $password . $iv, true);\n        }\n        return substr($symkey, 0, $length);\n    }\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    protected static function load($key, $password)\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is\n           \"outside the scope\" of PKCS#1.  PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to\n           protect private keys, however, that's not what OpenSSL* does.  OpenSSL protects private keys by adding\n           two new \"fields\" to the key - DEK-Info and Proc-Type.  These fields are discussed here:\n\n           http://tools.ietf.org/html/rfc1421#section-4.6.1.1\n           http://tools.ietf.org/html/rfc1421#section-4.6.1.3\n\n           DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.\n           DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation\n           function.  As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's\n           own implementation.  ie. the implementation *is* the standard and any bugs that may exist in that\n           implementation are part of the standard, as well.\n\n           * OpenSSL is the de facto standard.  It's utilized by OpenSSH and other projects */\n        if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {\n            $iv = Strings::hex2bin(trim($matches[2]));\n            // remove the Proc-Type / DEK-Info sections as they're no longer needed\n            $key = preg_replace('#^(?:Proc-Type|DEK-Info): .*#m', '', $key);\n            $ciphertext = ASN1::extractBER($key);\n            if ($ciphertext === false) {\n                $ciphertext = $key;\n            }\n            $crypto = self::getEncryptionObject($matches[1]);\n            $crypto->setKey(self::generateSymmetricKey($password, $iv, $crypto->getKeyLength() >> 3));\n            $crypto->setIV($iv);\n            $key = $crypto->decrypt($ciphertext);\n        } else {\n            if (self::$format != self::MODE_DER) {\n                $decoded = ASN1::extractBER($key);\n                if ($decoded !== false) {\n                    $key = $decoded;\n                } elseif (self::$format == self::MODE_PEM) {\n                    throw new \\UnexpectedValueException('Expected base64-encoded PEM format but was unable to decode base64 text');\n                }\n            }\n        }\n\n        return $key;\n    }\n\n    /**\n     * Wrap a private key appropriately\n     *\n     * @param string $key\n     * @param string $type\n     * @param string $password\n     * @param array $options optional\n     * @return string\n     */\n    protected static function wrapPrivateKey($key, $type, $password, array $options = [])\n    {\n        if (empty($password) || !is_string($password)) {\n            return \"-----BEGIN $type PRIVATE KEY-----\\r\\n\" .\n                   chunk_split(Strings::base64_encode($key), 64) .\n                   \"-----END $type PRIVATE KEY-----\";\n        }\n\n        $encryptionAlgorithm = isset($options['encryptionAlgorithm']) ? $options['encryptionAlgorithm'] : self::$defaultEncryptionAlgorithm;\n\n        $cipher = self::getEncryptionObject($encryptionAlgorithm);\n        $iv = Random::string($cipher->getBlockLength() >> 3);\n        $cipher->setKey(self::generateSymmetricKey($password, $iv, $cipher->getKeyLength() >> 3));\n        $cipher->setIV($iv);\n        $iv = strtoupper(Strings::bin2hex($iv));\n        return \"-----BEGIN $type PRIVATE KEY-----\\r\\n\" .\n               \"Proc-Type: 4,ENCRYPTED\\r\\n\" .\n               \"DEK-Info: \" . $encryptionAlgorithm . \",$iv\\r\\n\" .\n               \"\\r\\n\" .\n               chunk_split(Strings::base64_encode($cipher->encrypt($key)), 64) .\n               \"-----END $type PRIVATE KEY-----\";\n    }\n\n    /**\n     * Wrap a public key appropriately\n     *\n     * @param string $key\n     * @param string $type\n     * @return string\n     */\n    protected static function wrapPublicKey($key, $type)\n    {\n        return \"-----BEGIN $type PUBLIC KEY-----\\r\\n\" .\n               chunk_split(Strings::base64_encode($key), 64) .\n               \"-----END $type PUBLIC KEY-----\";\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.php",
    "content": "<?php\n\n/**\n * PKCS#8 Formatted Key Handler\n *\n * PHP version 5\n *\n * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN ENCRYPTED PRIVATE KEY-----\n * -----BEGIN PRIVATE KEY-----\n * -----BEGIN PUBLIC KEY-----\n *\n * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8\n * is specific to private keys it's basically creating a DER-encoded wrapper\n * for keys. This just extends that same concept to public keys (much like ssh-keygen)\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\AES;\nuse phpseclib3\\Crypt\\DES;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Crypt\\RC2;\nuse phpseclib3\\Crypt\\RC4;\nuse phpseclib3\\Crypt\\TripleDES;\nuse phpseclib3\\Exception\\InsufficientSetupException;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\n\n/**\n * PKCS#8 Formatted Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS8 extends PKCS\n{\n    /**\n     * Default encryption algorithm\n     *\n     * @var string\n     */\n    private static $defaultEncryptionAlgorithm = 'id-PBES2';\n\n    /**\n     * Default encryption scheme\n     *\n     * Only used when defaultEncryptionAlgorithm is id-PBES2\n     *\n     * @var string\n     */\n    private static $defaultEncryptionScheme = 'aes128-CBC-PAD';\n\n    /**\n     * Default PRF\n     *\n     * Only used when defaultEncryptionAlgorithm is id-PBES2\n     *\n     * @var string\n     */\n    private static $defaultPRF = 'id-hmacWithSHA256';\n\n    /**\n     * Default Iteration Count\n     *\n     * @var int\n     */\n    private static $defaultIterationCount = 2048;\n\n    /**\n     * OIDs loaded\n     *\n     * @var bool\n     */\n    private static $oidsLoaded = false;\n\n    /**\n     * Binary key flag\n     *\n     * @var bool\n     */\n    private static $binary = false;\n\n    /**\n     * Sets the default encryption algorithm\n     *\n     * @param string $algo\n     */\n    public static function setEncryptionAlgorithm($algo)\n    {\n        self::$defaultEncryptionAlgorithm = $algo;\n    }\n\n    /**\n     * Sets the default encryption algorithm for PBES2\n     *\n     * @param string $algo\n     */\n    public static function setEncryptionScheme($algo)\n    {\n        self::$defaultEncryptionScheme = $algo;\n    }\n\n    /**\n     * Sets the iteration count\n     *\n     * @param int $count\n     */\n    public static function setIterationCount($count)\n    {\n        self::$defaultIterationCount = $count;\n    }\n\n    /**\n     * Sets the PRF for PBES2\n     *\n     * @param string $algo\n     */\n    public static function setPRF($algo)\n    {\n        self::$defaultPRF = $algo;\n    }\n\n    /**\n     * Returns a SymmetricKey object based on a PBES1 $algo\n     *\n     * @return \\phpseclib3\\Crypt\\Common\\SymmetricKey\n     * @param string $algo\n     */\n    private static function getPBES1EncryptionObject($algo)\n    {\n        $algo = preg_match('#^pbeWith(?:MD2|MD5|SHA1|SHA)And(.*?)-CBC$#', $algo, $matches) ?\n            $matches[1] :\n            substr($algo, 13); // strlen('pbeWithSHAAnd') == 13\n\n        switch ($algo) {\n            case 'DES':\n                $cipher = new DES('cbc');\n                break;\n            case 'RC2':\n                $cipher = new RC2('cbc');\n                $cipher->setKeyLength(64);\n                break;\n            case '3-KeyTripleDES':\n                $cipher = new TripleDES('cbc');\n                break;\n            case '2-KeyTripleDES':\n                $cipher = new TripleDES('cbc');\n                $cipher->setKeyLength(128);\n                break;\n            case '128BitRC2':\n                $cipher = new RC2('cbc');\n                $cipher->setKeyLength(128);\n                break;\n            case '40BitRC2':\n                $cipher = new RC2('cbc');\n                $cipher->setKeyLength(40);\n                break;\n            case '128BitRC4':\n                $cipher = new RC4();\n                $cipher->setKeyLength(128);\n                break;\n            case '40BitRC4':\n                $cipher = new RC4();\n                $cipher->setKeyLength(40);\n                break;\n            default:\n                throw new UnsupportedAlgorithmException(\"$algo is not a supported algorithm\");\n        }\n\n        return $cipher;\n    }\n\n    /**\n     * Returns a hash based on a PBES1 $algo\n     *\n     * @return string\n     * @param string $algo\n     */\n    private static function getPBES1Hash($algo)\n    {\n        if (preg_match('#^pbeWith(MD2|MD5|SHA1|SHA)And.*?-CBC$#', $algo, $matches)) {\n            return $matches[1] == 'SHA' ? 'sha1' : $matches[1];\n        }\n\n        return 'sha1';\n    }\n\n    /**\n     * Returns a KDF baesd on a PBES1 $algo\n     *\n     * @return string\n     * @param string $algo\n     */\n    private static function getPBES1KDF($algo)\n    {\n        switch ($algo) {\n            case 'pbeWithMD2AndDES-CBC':\n            case 'pbeWithMD2AndRC2-CBC':\n            case 'pbeWithMD5AndDES-CBC':\n            case 'pbeWithMD5AndRC2-CBC':\n            case 'pbeWithSHA1AndDES-CBC':\n            case 'pbeWithSHA1AndRC2-CBC':\n                return 'pbkdf1';\n        }\n\n        return 'pkcs12';\n    }\n\n    /**\n     * Returns a SymmetricKey object baesd on a PBES2 $algo\n     *\n     * @return SymmetricKey\n     * @param string $algo\n     */\n    private static function getPBES2EncryptionObject($algo)\n    {\n        switch ($algo) {\n            case 'desCBC':\n                $cipher = new DES('cbc');\n                break;\n            case 'des-EDE3-CBC':\n                $cipher = new TripleDES('cbc');\n                break;\n            case 'rc2CBC':\n                $cipher = new RC2('cbc');\n                // in theory this can be changed\n                $cipher->setKeyLength(128);\n                break;\n            case 'rc5-CBC-PAD':\n                throw new UnsupportedAlgorithmException('rc5-CBC-PAD is not supported for PBES2 PKCS#8 keys');\n            case 'aes128-CBC-PAD':\n            case 'aes192-CBC-PAD':\n            case 'aes256-CBC-PAD':\n                $cipher = new AES('cbc');\n                $cipher->setKeyLength(substr($algo, 3, 3));\n                break;\n            default:\n                throw new UnsupportedAlgorithmException(\"$algo is not supported\");\n        }\n\n        return $cipher;\n    }\n\n    /**\n     * Initialize static variables\n     *\n     */\n    private static function initialize_static_variables()\n    {\n        if (!isset(static::$childOIDsLoaded)) {\n            throw new InsufficientSetupException('This class should not be called directly');\n        }\n\n        if (!static::$childOIDsLoaded) {\n            ASN1::loadOIDs(is_array(static::OID_NAME) ?\n                array_combine(static::OID_NAME, static::OID_VALUE) :\n                [static::OID_NAME => static::OID_VALUE]);\n            static::$childOIDsLoaded = true;\n        }\n        if (!self::$oidsLoaded) {\n            // from https://tools.ietf.org/html/rfc2898\n            ASN1::loadOIDs([\n               // PBES1 encryption schemes\n               'pbeWithMD2AndDES-CBC' => '1.2.840.113549.1.5.1',\n               'pbeWithMD2AndRC2-CBC' => '1.2.840.113549.1.5.4',\n               'pbeWithMD5AndDES-CBC' => '1.2.840.113549.1.5.3',\n               'pbeWithMD5AndRC2-CBC' => '1.2.840.113549.1.5.6',\n               'pbeWithSHA1AndDES-CBC' => '1.2.840.113549.1.5.10',\n               'pbeWithSHA1AndRC2-CBC' => '1.2.840.113549.1.5.11',\n\n               // from PKCS#12:\n               // https://tools.ietf.org/html/rfc7292\n               'pbeWithSHAAnd128BitRC4' => '1.2.840.113549.1.12.1.1',\n               'pbeWithSHAAnd40BitRC4' => '1.2.840.113549.1.12.1.2',\n               'pbeWithSHAAnd3-KeyTripleDES-CBC' => '1.2.840.113549.1.12.1.3',\n               'pbeWithSHAAnd2-KeyTripleDES-CBC' => '1.2.840.113549.1.12.1.4',\n               'pbeWithSHAAnd128BitRC2-CBC' => '1.2.840.113549.1.12.1.5',\n               'pbeWithSHAAnd40BitRC2-CBC' => '1.2.840.113549.1.12.1.6',\n\n               'id-PBKDF2' => '1.2.840.113549.1.5.12',\n               'id-PBES2' => '1.2.840.113549.1.5.13',\n               'id-PBMAC1' => '1.2.840.113549.1.5.14',\n\n               // from PKCS#5 v2.1:\n               // http://www.rsa.com/rsalabs/pkcs/files/h11302-wp-pkcs5v2-1-password-based-cryptography-standard.pdf\n               'id-hmacWithSHA1' => '1.2.840.113549.2.7',\n               'id-hmacWithSHA224' => '1.2.840.113549.2.8',\n               'id-hmacWithSHA256' => '1.2.840.113549.2.9',\n               'id-hmacWithSHA384' => '1.2.840.113549.2.10',\n               'id-hmacWithSHA512' => '1.2.840.113549.2.11',\n               'id-hmacWithSHA512-224' => '1.2.840.113549.2.12',\n               'id-hmacWithSHA512-256' => '1.2.840.113549.2.13',\n\n               'desCBC'       => '1.3.14.3.2.7',\n               'des-EDE3-CBC' => '1.2.840.113549.3.7',\n               'rc2CBC' => '1.2.840.113549.3.2',\n               'rc5-CBC-PAD' => '1.2.840.113549.3.9',\n\n               'aes128-CBC-PAD' => '2.16.840.1.101.3.4.1.2',\n               'aes192-CBC-PAD' => '2.16.840.1.101.3.4.1.22',\n               'aes256-CBC-PAD' => '2.16.840.1.101.3.4.1.42'\n            ]);\n            self::$oidsLoaded = true;\n        }\n    }\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    protected static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        $isPublic = strpos($key, 'PUBLIC') !== false;\n        $isPrivate = strpos($key, 'PRIVATE') !== false;\n\n        $decoded = self::preParse($key);\n\n        $meta = [];\n\n        $decrypted = ASN1::asn1map($decoded[0], Maps\\EncryptedPrivateKeyInfo::MAP);\n        if (strlen($password) && is_array($decrypted)) {\n            $algorithm = $decrypted['encryptionAlgorithm']['algorithm'];\n            switch ($algorithm) {\n                // PBES1\n                case 'pbeWithMD2AndDES-CBC':\n                case 'pbeWithMD2AndRC2-CBC':\n                case 'pbeWithMD5AndDES-CBC':\n                case 'pbeWithMD5AndRC2-CBC':\n                case 'pbeWithSHA1AndDES-CBC':\n                case 'pbeWithSHA1AndRC2-CBC':\n                case 'pbeWithSHAAnd3-KeyTripleDES-CBC':\n                case 'pbeWithSHAAnd2-KeyTripleDES-CBC':\n                case 'pbeWithSHAAnd128BitRC2-CBC':\n                case 'pbeWithSHAAnd40BitRC2-CBC':\n                case 'pbeWithSHAAnd128BitRC4':\n                case 'pbeWithSHAAnd40BitRC4':\n                    $cipher = self::getPBES1EncryptionObject($algorithm);\n                    $hash = self::getPBES1Hash($algorithm);\n                    $kdf = self::getPBES1KDF($algorithm);\n\n                    $meta['meta']['algorithm'] = $algorithm;\n\n                    $temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);\n                    if (!$temp) {\n                        throw new \\RuntimeException('Unable to decode BER');\n                    }\n                    $map = ASN1::asn1map($temp[0], Maps\\PBEParameter::MAP);\n                    $salt = $map['salt'];\n                    $iterationCount = $map['iterationCount'];\n                    $iterationCount = (int) $iterationCount->toString();\n                    $cipher->setPassword($password, $kdf, $hash, $salt, $iterationCount);\n                    $key = $cipher->decrypt($decrypted['encryptedData']);\n                    $decoded = ASN1::decodeBER($key);\n                    if (!$decoded) {\n                        throw new \\RuntimeException('Unable to decode BER 2');\n                    }\n\n                    break;\n                case 'id-PBES2':\n                    $meta['meta']['algorithm'] = $algorithm;\n\n                    $temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);\n                    if (!$temp) {\n                        throw new \\RuntimeException('Unable to decode BER');\n                    }\n                    $temp = ASN1::asn1map($temp[0], Maps\\PBES2params::MAP);\n                    $keyDerivationFunc = $temp['keyDerivationFunc'];\n                    $encryptionScheme = $temp['encryptionScheme'];\n\n                    $cipher = self::getPBES2EncryptionObject($encryptionScheme['algorithm']);\n                    $meta['meta']['cipher'] = $encryptionScheme['algorithm'];\n\n                    $temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);\n                    if (!$temp) {\n                        throw new \\RuntimeException('Unable to decode BER');\n                    }\n                    $temp = ASN1::asn1map($temp[0], Maps\\PBES2params::MAP);\n                    $keyDerivationFunc = $temp['keyDerivationFunc'];\n                    $encryptionScheme = $temp['encryptionScheme'];\n\n                    if (!$cipher instanceof RC2) {\n                        $cipher->setIV($encryptionScheme['parameters']['octetString']);\n                    } else {\n                        $temp = ASN1::decodeBER($encryptionScheme['parameters']);\n                        if (!$temp) {\n                            throw new \\RuntimeException('Unable to decode BER');\n                        }\n                        $map = ASN1::asn1map($temp[0], Maps\\RC2CBCParameter::MAP);\n                        $rc2ParametersVersion = $map['rc2ParametersVersion'];\n                        $iv = $map['iv'];\n                        $effectiveKeyLength = (int) $rc2ParametersVersion->toString();\n                        switch ($effectiveKeyLength) {\n                            case 160:\n                                $effectiveKeyLength = 40;\n                                break;\n                            case 120:\n                                $effectiveKeyLength = 64;\n                                break;\n                            case 58:\n                                $effectiveKeyLength = 128;\n                                break;\n                            //default: // should be >= 256\n                        }\n                        $cipher->setIV($iv);\n                        $cipher->setKeyLength($effectiveKeyLength);\n                    }\n\n                    $meta['meta']['keyDerivationFunc'] = $keyDerivationFunc['algorithm'];\n                    switch ($keyDerivationFunc['algorithm']) {\n                        case 'id-PBKDF2':\n                            $temp = ASN1::decodeBER($keyDerivationFunc['parameters']);\n                            if (!$temp) {\n                                throw new \\RuntimeException('Unable to decode BER');\n                            }\n                            $params = ASN1::asn1map($temp[0], Maps\\PBKDF2params::MAP);\n                            if (empty($params['prf'])) {\n                                $params['prf'] = ['algorithm' => 'id-hmacWithSHA1'];\n                            }\n                            $salt = $params['salt'];\n                            $iterationCount = $params['iterationCount'];\n                            $prf = $params['prf'];\n                            $meta['meta']['prf'] = $prf['algorithm'];\n                            $hash = str_replace('-', '/', substr($prf['algorithm'], 11));\n                            $params = [\n                                $password,\n                                'pbkdf2',\n                                $hash,\n                                $salt,\n                                (int) $iterationCount->toString()\n                            ];\n                            if (isset($keyLength)) {\n                                $params[] = (int) $keyLength->toString();\n                            }\n                            $cipher->setPassword(...$params);\n                            $key = $cipher->decrypt($decrypted['encryptedData']);\n                            $decoded = ASN1::decodeBER($key);\n                            if (!$decoded) {\n                                throw new \\RuntimeException('Unable to decode BER 3');\n                            }\n                            break;\n                        default:\n                            throw new UnsupportedAlgorithmException('Only PBKDF2 is supported for PBES2 PKCS#8 keys');\n                    }\n                    break;\n                case 'id-PBMAC1':\n                    //$temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);\n                    //$value = ASN1::asn1map($temp[0], Maps\\PBMAC1params::MAP);\n                    // since i can't find any implementation that does PBMAC1 it is unsupported\n                    throw new UnsupportedAlgorithmException('Only PBES1 and PBES2 PKCS#8 keys are supported.');\n                // at this point we'll assume that the key conforms to PublicKeyInfo\n            }\n        }\n\n        $private = ASN1::asn1map($decoded[0], Maps\\OneAsymmetricKey::MAP);\n        if (is_array($private)) {\n            if ($isPublic) {\n                throw new \\UnexpectedValueException('Human readable string claims public key but DER encoded string claims private key');\n            }\n\n            if (isset($private['privateKeyAlgorithm']['parameters']) && !$private['privateKeyAlgorithm']['parameters'] instanceof ASN1\\Element && isset($decoded[0]['content'][1]['content'][1])) {\n                $temp = $decoded[0]['content'][1]['content'][1];\n                $private['privateKeyAlgorithm']['parameters'] = new ASN1\\Element(substr($key, $temp['start'], $temp['length']));\n            }\n            if (is_array(static::OID_NAME)) {\n                if (!in_array($private['privateKeyAlgorithm']['algorithm'], static::OID_NAME)) {\n                    throw new UnsupportedAlgorithmException($private['privateKeyAlgorithm']['algorithm'] . ' is not a supported key type');\n                }\n            } else {\n                if ($private['privateKeyAlgorithm']['algorithm'] != static::OID_NAME) {\n                    throw new UnsupportedAlgorithmException('Only ' . static::OID_NAME . ' keys are supported; this is a ' . $private['privateKeyAlgorithm']['algorithm'] . ' key');\n                }\n            }\n            if (isset($private['publicKey'])) {\n                if ($private['publicKey'][0] != \"\\0\") {\n                    throw new \\UnexpectedValueException('The first byte of the public key should be null - not ' . bin2hex($private['publicKey'][0]));\n                }\n                $private['publicKey'] = substr($private['publicKey'], 1);\n            }\n            return $private + $meta;\n        }\n\n        // EncryptedPrivateKeyInfo and PublicKeyInfo have largely identical \"signatures\". the only difference\n        // is that the former has an octet string and the later has a bit string. the first byte of a bit\n        // string represents the number of bits in the last byte that are to be ignored but, currently,\n        // bit strings wanting a non-zero amount of bits trimmed are not supported\n        $public = ASN1::asn1map($decoded[0], Maps\\PublicKeyInfo::MAP);\n\n        if (is_array($public)) {\n            if ($isPrivate) {\n                throw new \\UnexpectedValueException('Human readable string claims private key but DER encoded string claims public key');\n            }\n\n            if ($public['publicKey'][0] != \"\\0\") {\n                throw new \\UnexpectedValueException('The first byte of the public key should be null - not ' . bin2hex($public['publicKey'][0]));\n            }\n            if (is_array(static::OID_NAME)) {\n                if (!in_array($public['publicKeyAlgorithm']['algorithm'], static::OID_NAME)) {\n                    throw new UnsupportedAlgorithmException($public['publicKeyAlgorithm']['algorithm'] . ' is not a supported key type');\n                }\n            } else {\n                if ($public['publicKeyAlgorithm']['algorithm'] != static::OID_NAME) {\n                    throw new UnsupportedAlgorithmException('Only ' . static::OID_NAME . ' keys are supported; this is a ' . $public['publicKeyAlgorithm']['algorithm'] . ' key');\n                }\n            }\n            if (isset($public['publicKeyAlgorithm']['parameters']) && !$public['publicKeyAlgorithm']['parameters'] instanceof ASN1\\Element && isset($decoded[0]['content'][0]['content'][1])) {\n                $temp = $decoded[0]['content'][0]['content'][1];\n                $public['publicKeyAlgorithm']['parameters'] = new ASN1\\Element(substr($key, $temp['start'], $temp['length']));\n            }\n            $public['publicKey'] = substr($public['publicKey'], 1);\n            return $public;\n        }\n\n        throw new \\RuntimeException('Unable to parse using either OneAsymmetricKey or PublicKeyInfo ASN1 maps');\n    }\n\n    /**\n     * Toggle between binary (DER) and printable (PEM) keys\n     *\n     * Printable keys are what are generated by default.\n     *\n     * @param bool $enabled\n     */\n    public static function setBinaryOutput($enabled)\n    {\n        self::$binary = $enabled;\n    }\n\n    /**\n     * Wrap a private key appropriately\n     *\n     * @param string $key\n     * @param string $attr\n     * @param mixed $params\n     * @param string $password\n     * @param string $oid optional\n     * @param string $publicKey optional\n     * @param array $options optional\n     * @return string\n     */\n    protected static function wrapPrivateKey($key, $attr, $params, $password, $oid = null, $publicKey = '', array $options = [])\n    {\n        self::initialize_static_variables();\n\n        $key = [\n            'version' => 'v1',\n            'privateKeyAlgorithm' => [\n                'algorithm' => is_string(static::OID_NAME) ? static::OID_NAME : $oid\n             ],\n            'privateKey' => $key\n        ];\n        if ($oid != 'id-Ed25519' && $oid != 'id-Ed448') {\n            $key['privateKeyAlgorithm']['parameters'] = $params;\n        }\n        if (!empty($attr)) {\n            $key['attributes'] = $attr;\n        }\n        if (!empty($publicKey)) {\n            $key['version'] = 'v2';\n            $key['publicKey'] = $publicKey;\n        }\n        $key = ASN1::encodeDER($key, Maps\\OneAsymmetricKey::MAP);\n        if (!empty($password) && is_string($password)) {\n            $salt = Random::string(8);\n\n            $iterationCount = isset($options['iterationCount']) ? $options['iterationCount'] : self::$defaultIterationCount;\n            $encryptionAlgorithm = isset($options['encryptionAlgorithm']) ? $options['encryptionAlgorithm'] : self::$defaultEncryptionAlgorithm;\n            $encryptionScheme = isset($options['encryptionScheme']) ? $options['encryptionScheme'] : self::$defaultEncryptionScheme;\n            $prf = isset($options['PRF']) ? $options['PRF'] : self::$defaultPRF;\n\n            if ($encryptionAlgorithm == 'id-PBES2') {\n                $crypto = self::getPBES2EncryptionObject($encryptionScheme);\n                $hash = str_replace('-', '/', substr($prf, 11));\n                $kdf = 'pbkdf2';\n                $iv = Random::string($crypto->getBlockLength() >> 3);\n\n                $PBKDF2params = [\n                    'salt' => $salt,\n                    'iterationCount' => $iterationCount,\n                    'prf' => ['algorithm' => $prf, 'parameters' => null]\n                ];\n                $PBKDF2params = ASN1::encodeDER($PBKDF2params, Maps\\PBKDF2params::MAP);\n\n                if (!$crypto instanceof RC2) {\n                    $params = ['octetString' => $iv];\n                } else {\n                    $params = [\n                        'rc2ParametersVersion' => 58,\n                        'iv' => $iv\n                    ];\n                    $params = ASN1::encodeDER($params, Maps\\RC2CBCParameter::MAP);\n                    $params = new ASN1\\Element($params);\n                }\n\n                $params = [\n                    'keyDerivationFunc' => [\n                        'algorithm' => 'id-PBKDF2',\n                        'parameters' => new ASN1\\Element($PBKDF2params)\n                    ],\n                    'encryptionScheme' => [\n                        'algorithm' => $encryptionScheme,\n                        'parameters' => $params\n                    ]\n                ];\n                $params = ASN1::encodeDER($params, Maps\\PBES2params::MAP);\n\n                $crypto->setIV($iv);\n            } else {\n                $crypto = self::getPBES1EncryptionObject($encryptionAlgorithm);\n                $hash = self::getPBES1Hash($encryptionAlgorithm);\n                $kdf = self::getPBES1KDF($encryptionAlgorithm);\n\n                $params = [\n                    'salt' => $salt,\n                    'iterationCount' => $iterationCount\n                ];\n                $params = ASN1::encodeDER($params, Maps\\PBEParameter::MAP);\n            }\n            $crypto->setPassword($password, $kdf, $hash, $salt, $iterationCount);\n            $key = $crypto->encrypt($key);\n\n            $key = [\n                'encryptionAlgorithm' => [\n                    'algorithm' => $encryptionAlgorithm,\n                    'parameters' => new ASN1\\Element($params)\n                ],\n                'encryptedData' => $key\n            ];\n\n            $key = ASN1::encodeDER($key, Maps\\EncryptedPrivateKeyInfo::MAP);\n\n            if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n                return $key;\n            }\n\n            return \"-----BEGIN ENCRYPTED PRIVATE KEY-----\\r\\n\" .\n                   chunk_split(Strings::base64_encode($key), 64) .\n                   \"-----END ENCRYPTED PRIVATE KEY-----\";\n        }\n\n        if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n            return $key;\n        }\n\n        return \"-----BEGIN PRIVATE KEY-----\\r\\n\" .\n               chunk_split(Strings::base64_encode($key), 64) .\n               \"-----END PRIVATE KEY-----\";\n    }\n\n    /**\n     * Wrap a public key appropriately\n     *\n     * @param string $key\n     * @param mixed $params\n     * @param string $oid\n     * @return string\n     */\n    protected static function wrapPublicKey($key, $params, $oid = null, array $options = [])\n    {\n        self::initialize_static_variables();\n\n        $key = [\n            'publicKeyAlgorithm' => [\n                'algorithm' => is_string(static::OID_NAME) ? static::OID_NAME : $oid\n            ],\n            'publicKey' => \"\\0\" . $key\n        ];\n\n        if ($oid != 'id-Ed25519' && $oid != 'id-Ed448') {\n            $key['publicKeyAlgorithm']['parameters'] = $params;\n        }\n\n        $key = ASN1::encodeDER($key, Maps\\PublicKeyInfo::MAP);\n\n        if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n            return $key;\n        }\n\n        return \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n               chunk_split(Strings::base64_encode($key), 64) .\n               \"-----END PUBLIC KEY-----\";\n    }\n\n    /**\n     * Perform some preliminary parsing of the key\n     *\n     * @param string $key\n     * @return array\n     */\n    private static function preParse(&$key)\n    {\n        self::initialize_static_variables();\n\n        if (self::$format != self::MODE_DER) {\n            $decoded = ASN1::extractBER($key);\n            if ($decoded !== false) {\n                $key = $decoded;\n            } elseif (self::$format == self::MODE_PEM) {\n                throw new \\UnexpectedValueException('Expected base64-encoded PEM format but was unable to decode base64 text');\n            }\n        }\n\n        $decoded = ASN1::decodeBER($key);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n\n        return $decoded;\n    }\n\n    /**\n     * Returns the encryption parameters used by the key\n     *\n     * @param string $key\n     * @return array\n     */\n    public static function extractEncryptionAlgorithm($key)\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        $decoded = self::preParse($key);\n\n        $r = ASN1::asn1map($decoded[0], Maps\\EncryptedPrivateKeyInfo::MAP);\n        if (!is_array($r)) {\n            throw new \\RuntimeException('Unable to parse using EncryptedPrivateKeyInfo map');\n        }\n\n        if ($r['encryptionAlgorithm']['algorithm'] == 'id-PBES2') {\n            $decoded = ASN1::decodeBER($r['encryptionAlgorithm']['parameters']->element);\n            if (!$decoded) {\n                throw new \\RuntimeException('Unable to decode BER');\n            }\n            $r['encryptionAlgorithm']['parameters'] = ASN1::asn1map($decoded[0], Maps\\PBES2params::MAP);\n\n            $kdf = &$r['encryptionAlgorithm']['parameters']['keyDerivationFunc'];\n            switch ($kdf['algorithm']) {\n                case 'id-PBKDF2':\n                    $decoded = ASN1::decodeBER($kdf['parameters']->element);\n                    if (!$decoded) {\n                        throw new \\RuntimeException('Unable to decode BER');\n                    }\n                    $kdf['parameters'] = ASN1::asn1map($decoded[0], Maps\\PBKDF2params::MAP);\n            }\n        }\n\n        return $r['encryptionAlgorithm'];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.php",
    "content": "<?php\n\n/**\n * PuTTY Formatted Key Handler\n *\n * See PuTTY's SSHPUBK.C and https://tartarus.org/~simon/putty-snapshots/htmldoc/AppendixC.html\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\AES;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\n\n/**\n * PuTTY Formatted Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PuTTY\n{\n    /**\n     * Default comment\n     *\n     * @var string\n     */\n    private static $comment = 'phpseclib-generated-key';\n\n    /**\n     * Default version\n     *\n     * @var int\n     */\n    private static $version = 2;\n\n    /**\n     * Sets the default comment\n     *\n     * @param string $comment\n     */\n    public static function setComment($comment)\n    {\n        self::$comment = str_replace([\"\\r\", \"\\n\"], '', $comment);\n    }\n\n    /**\n     * Sets the default version\n     *\n     * @param int $version\n     */\n    public static function setVersion($version)\n    {\n        if ($version != 2 && $version != 3) {\n            throw new \\RuntimeException('Only supported versions are 2 and 3');\n        }\n        self::$version = $version;\n    }\n\n    /**\n     * Generate a symmetric key for PuTTY v2 keys\n     *\n     * @param string $password\n     * @param int $length\n     * @return string\n     */\n    private static function generateV2Key($password, $length)\n    {\n        $symkey = '';\n        $sequence = 0;\n        while (strlen($symkey) < $length) {\n            $temp = pack('Na*', $sequence++, $password);\n            $symkey .= Strings::hex2bin(sha1($temp));\n        }\n        return substr($symkey, 0, $length);\n    }\n\n    /**\n     * Generate a symmetric key for PuTTY v3 keys\n     *\n     * @param string $password\n     * @param string $flavour\n     * @param int $memory\n     * @param int $passes\n     * @param string $salt\n     * @return array\n     */\n    private static function generateV3Key($password, $flavour, $memory, $passes, $salt)\n    {\n        if (!function_exists('sodium_crypto_pwhash')) {\n            throw new \\RuntimeException('sodium_crypto_pwhash needs to exist for Argon2 password hasing');\n        }\n\n        switch ($flavour) {\n            case 'Argon2i':\n                $flavour = SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13;\n                break;\n            case 'Argon2id':\n                $flavour = SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13;\n                break;\n            default:\n                throw new UnsupportedAlgorithmException('Only Argon2i and Argon2id are supported');\n        }\n\n        $length = 80; // keylen + ivlen + mac_keylen\n        $temp = sodium_crypto_pwhash($length, $password, $salt, $passes, $memory << 10, $flavour);\n\n        $symkey = substr($temp, 0, 32);\n        $symiv = substr($temp, 32, 16);\n        $hashkey = substr($temp, -32);\n\n        return compact('symkey', 'symiv', 'hashkey');\n    }\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password\n     * @return array\n     */\n    public static function load($key, $password)\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        if (strpos($key, 'BEGIN SSH2 PUBLIC KEY') !== false) {\n            $lines = preg_split('#[\\r\\n]+#', $key);\n            switch (true) {\n                case $lines[0] != '---- BEGIN SSH2 PUBLIC KEY ----':\n                    throw new \\UnexpectedValueException('Key doesn\\'t start with ---- BEGIN SSH2 PUBLIC KEY ----');\n                case $lines[count($lines) - 1] != '---- END SSH2 PUBLIC KEY ----':\n                    throw new \\UnexpectedValueException('Key doesn\\'t end with ---- END SSH2 PUBLIC KEY ----');\n            }\n            $lines = array_splice($lines, 1, -1);\n            $lines = array_map(function ($line) {\n                return rtrim($line, \"\\r\\n\");\n            }, $lines);\n            $data = $current = '';\n            $values = [];\n            $in_value = false;\n            foreach ($lines as $line) {\n                switch (true) {\n                    case preg_match('#^(.*?): (.*)#', $line, $match):\n                        $in_value = $line[strlen($line) - 1] == '\\\\';\n                        $current = strtolower($match[1]);\n                        $values[$current] = $in_value ? substr($match[2], 0, -1) : $match[2];\n                        break;\n                    case $in_value:\n                        $in_value = $line[strlen($line) - 1] == '\\\\';\n                        $values[$current] .= $in_value ? substr($line, 0, -1) : $line;\n                        break;\n                    default:\n                        $data .= $line;\n                }\n            }\n\n            $components = call_user_func([static::PUBLIC_HANDLER, 'load'], $data);\n            if ($components === false) {\n                throw new \\UnexpectedValueException('Unable to decode public key');\n            }\n            $components += $values;\n            $components['comment'] = str_replace(['\\\\\\\\', '\\\"'], ['\\\\', '\"'], $values['comment']);\n\n            return $components;\n        }\n\n        $components = [];\n\n        $key = preg_split('#\\r\\n|\\r|\\n#', trim($key));\n        if (Strings::shift($key[0], strlen('PuTTY-User-Key-File-')) != 'PuTTY-User-Key-File-') {\n            return false;\n        }\n        $version = (int) Strings::shift($key[0], 3); // should be either \"2: \" or \"3: 0\" prior to int casting\n        if ($version != 2 && $version != 3) {\n            throw new \\RuntimeException('Only v2 and v3 PuTTY private keys are supported');\n        }\n        $components['type'] = $type = rtrim($key[0]);\n        if (!in_array($type, static::$types)) {\n            $error = count(static::$types) == 1 ?\n                'Only ' . static::$types[0] . ' keys are supported. ' :\n                '';\n            throw new UnsupportedAlgorithmException($error . 'This is an unsupported ' . $type . ' key');\n        }\n        $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1]));\n        $components['comment'] = trim(preg_replace('#Comment: (.+)#', '$1', $key[2]));\n\n        $publicLength = trim(preg_replace('#Public-Lines: (\\d+)#', '$1', $key[3]));\n        $public = Strings::base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength))));\n\n        $source = Strings::packSSH2('ssss', $type, $encryption, $components['comment'], $public);\n\n        $length = unpack('Nlength', Strings::shift($public, 4))['length'];\n        $newtype = Strings::shift($public, $length);\n        if ($newtype != $type) {\n            throw new \\RuntimeException('The binary type does not match the human readable type field');\n        }\n\n        $components['public'] = $public;\n\n        switch ($version) {\n            case 3:\n                $hashkey = '';\n                break;\n            case 2:\n                $hashkey = 'putty-private-key-file-mac-key';\n        }\n\n        $offset = $publicLength + 4;\n        switch ($encryption) {\n            case 'aes256-cbc':\n                $crypto = new AES('cbc');\n                switch ($version) {\n                    case 3:\n                        $flavour = trim(preg_replace('#Key-Derivation: (.*)#', '$1', $key[$offset++]));\n                        $memory = trim(preg_replace('#Argon2-Memory: (\\d+)#', '$1', $key[$offset++]));\n                        $passes = trim(preg_replace('#Argon2-Passes: (\\d+)#', '$1', $key[$offset++]));\n                        $parallelism = trim(preg_replace('#Argon2-Parallelism: (\\d+)#', '$1', $key[$offset++]));\n                        $salt = Strings::hex2bin(trim(preg_replace('#Argon2-Salt: ([0-9a-f]+)#', '$1', $key[$offset++])));\n\n                        $v3key = self::generateV3Key($password, $flavour, $memory, $passes, $salt);\n                        $symkey = $v3key['symkey'];\n                        $symiv = $v3key['symiv'];\n                        $hashkey = $v3key['hashkey'];\n\n                        break;\n                    case 2:\n                        $symkey = self::generateV2Key($password, 32);\n                        $symiv = str_repeat(\"\\0\", $crypto->getBlockLength() >> 3);\n                        $hashkey .= $password;\n                }\n        }\n\n        switch ($version) {\n            case 3:\n                $hash = new Hash('sha256');\n                $hash->setKey($hashkey);\n                break;\n            case 2:\n                $hash = new Hash('sha1');\n                $hash->setKey(sha1($hashkey, true));\n        }\n\n        $privateLength = trim(preg_replace('#Private-Lines: (\\d+)#', '$1', $key[$offset++]));\n        $private = Strings::base64_decode(implode('', array_map('trim', array_slice($key, $offset, $privateLength))));\n\n        if ($encryption != 'none') {\n            $crypto->setKey($symkey);\n            $crypto->setIV($symiv);\n            $crypto->disablePadding();\n            $private = $crypto->decrypt($private);\n        }\n\n        $source .= Strings::packSSH2('s', $private);\n\n        $hmac = trim(preg_replace('#Private-MAC: (.+)#', '$1', $key[$offset + $privateLength]));\n        $hmac = Strings::hex2bin($hmac);\n\n        if (!hash_equals($hash->hash($source), $hmac)) {\n            throw new \\UnexpectedValueException('MAC validation error');\n        }\n\n        $components['private'] = $private;\n\n        return $components;\n    }\n\n    /**\n     * Wrap a private key appropriately\n     *\n     * @param string $public\n     * @param string $private\n     * @param string $type\n     * @param string $password\n     * @param array $options optional\n     * @return string\n     */\n    protected static function wrapPrivateKey($public, $private, $type, $password, array $options = [])\n    {\n        $encryption = (!empty($password) || is_string($password)) ? 'aes256-cbc' : 'none';\n        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;\n        $version = isset($options['version']) ? $options['version'] : self::$version;\n\n        $key = \"PuTTY-User-Key-File-$version: $type\\r\\n\";\n        $key .= \"Encryption: $encryption\\r\\n\";\n        $key .= \"Comment: $comment\\r\\n\";\n\n        $public = Strings::packSSH2('s', $type) . $public;\n\n        $source = Strings::packSSH2('ssss', $type, $encryption, $comment, $public);\n\n        $public = Strings::base64_encode($public);\n        $key .= \"Public-Lines: \" . ((strlen($public) + 63) >> 6) . \"\\r\\n\";\n        $key .= chunk_split($public, 64);\n\n        if (empty($password) && !is_string($password)) {\n            $source .= Strings::packSSH2('s', $private);\n            switch ($version) {\n                case 3:\n                    $hash = new Hash('sha256');\n                    $hash->setKey('');\n                    break;\n                case 2:\n                    $hash = new Hash('sha1');\n                    $hash->setKey(sha1('putty-private-key-file-mac-key', true));\n            }\n        } else {\n            $private .= Random::string(16 - (strlen($private) & 15));\n            $source .= Strings::packSSH2('s', $private);\n            $crypto = new AES('cbc');\n\n            switch ($version) {\n                case 3:\n                    $salt = Random::string(16);\n                    $key .= \"Key-Derivation: Argon2id\\r\\n\";\n                    $key .= \"Argon2-Memory: 8192\\r\\n\";\n                    $key .= \"Argon2-Passes: 13\\r\\n\";\n                    $key .= \"Argon2-Parallelism: 1\\r\\n\";\n                    $key .= \"Argon2-Salt: \" . Strings::bin2hex($salt) . \"\\r\\n\";\n                    $v3key = self::generateV3Key($password, 'Argon2id', 8192, 13, $salt);\n                    $symkey = $v3key['symkey'];\n                    $symiv = $v3key['symiv'];\n                    $hashkey = $v3key['hashkey'];\n\n                    $hash = new Hash('sha256');\n                    $hash->setKey($hashkey);\n\n                    break;\n                case 2:\n                    $symkey = self::generateV2Key($password, 32);\n                    $symiv = str_repeat(\"\\0\", $crypto->getBlockLength() >> 3);\n                    $hashkey = 'putty-private-key-file-mac-key' . $password;\n\n                    $hash = new Hash('sha1');\n                    $hash->setKey(sha1($hashkey, true));\n            }\n\n            $crypto->setKey($symkey);\n            $crypto->setIV($symiv);\n            $crypto->disablePadding();\n            $private = $crypto->encrypt($private);\n            $mac = $hash->hash($source);\n        }\n\n        $private = Strings::base64_encode($private);\n        $key .= 'Private-Lines: ' . ((strlen($private) + 63) >> 6) . \"\\r\\n\";\n        $key .= chunk_split($private, 64);\n        $key .= 'Private-MAC: ' . Strings::bin2hex($hash->hash($source)) . \"\\r\\n\";\n\n        return $key;\n    }\n\n    /**\n     * Wrap a public key appropriately\n     *\n     * This is basically the format described in RFC 4716 (https://tools.ietf.org/html/rfc4716)\n     *\n     * @param string $key\n     * @param string $type\n     * @return string\n     */\n    protected static function wrapPublicKey($key, $type)\n    {\n        $key = pack('Na*a*', strlen($type), $type, $key);\n        $key = \"---- BEGIN SSH2 PUBLIC KEY ----\\r\\n\" .\n               'Comment: \"' . str_replace(['\\\\', '\"'], ['\\\\\\\\', '\\\"'], self::$comment) . \"\\\"\\r\\n\" .\n               chunk_split(Strings::base64_encode($key), 64) .\n               '---- END SSH2 PUBLIC KEY ----';\n        return $key;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Signature/Raw.php",
    "content": "<?php\n\n/**\n * Raw Signature Handler\n *\n * PHP version 5\n *\n * Handles signatures as arrays\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Formats\\Signature;\n\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Raw Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Raw\n{\n    /**\n     * Loads a signature\n     *\n     * @param array $sig\n     * @return array|bool\n     */\n    public static function load($sig)\n    {\n        switch (true) {\n            case !is_array($sig):\n            case !isset($sig['r']) || !isset($sig['s']):\n            case !$sig['r'] instanceof BigInteger:\n            case !$sig['s'] instanceof BigInteger:\n                return false;\n        }\n\n        return [\n            'r' => $sig['r'],\n            's' => $sig['s']\n        ];\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @param BigInteger $r\n     * @param BigInteger $s\n     * @return string\n     */\n    public static function save(BigInteger $r, BigInteger $s)\n    {\n        return compact('r', 's');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PrivateKey.php",
    "content": "<?php\n\n/**\n * PrivateKey interface\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common;\n\n/**\n * PrivateKey interface\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\ninterface PrivateKey\n{\n    public function sign($message);\n    //public function decrypt($ciphertext);\n    public function getPublicKey();\n    public function toString($type, array $options = []);\n\n    /**\n     * @param string|false $password\n     * @return mixed\n     */\n    public function withPassword($password = false);\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PublicKey.php",
    "content": "<?php\n\n/**\n * PublicKey interface\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common;\n\n/**\n * PublicKey interface\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\ninterface PublicKey\n{\n    public function verify($message, $signature);\n    //public function encrypt($plaintext);\n    public function toString($type, array $options = []);\n    public function getFingerprint($algorithm);\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.php",
    "content": "<?php\n\n/**\n * Base Class for all stream ciphers\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @author    Hans-Juergen Petrich <petrich@tronic-media.com>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common;\n\n/**\n * Base Class for all stream cipher classes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class StreamCipher extends SymmetricKey\n{\n    /**\n     * Block Length of the cipher\n     *\n     * Stream ciphers do not have a block size\n     *\n     * @see SymmetricKey::block_size\n     * @var int\n     */\n    protected $block_size = 0;\n\n    /**\n     * Default Constructor.\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     * @return StreamCipher\n     */\n    public function __construct()\n    {\n        parent::__construct('stream');\n    }\n\n    /**\n     * Stream ciphers not use an IV\n     *\n     * @return bool\n     */\n    public function usesIV()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.php",
    "content": "<?php\n\n/**\n * Base Class for all \\phpseclib3\\Crypt\\* cipher classes\n *\n * PHP version 5\n *\n * Internally for phpseclib developers:\n *  If you plan to add a new cipher class, please note following rules:\n *\n *  - The new \\phpseclib3\\Crypt\\* cipher class should extend \\phpseclib3\\Crypt\\Common\\SymmetricKey\n *\n *  - Following methods are then required to be overridden/overloaded:\n *\n *    - encryptBlock()\n *\n *    - decryptBlock()\n *\n *    - setupKey()\n *\n *  - All other methods are optional to be overridden/overloaded\n *\n *  - Look at the source code of the current ciphers how they extend \\phpseclib3\\Crypt\\Common\\SymmetricKey\n *    and take one of them as a start up for the new cipher class.\n *\n *  - Please read all the other comments/notes/hints here also for each class var/method\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @author    Hans-Juergen Petrich <petrich@tronic-media.com>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Blowfish;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Exception\\BadDecryptionException;\nuse phpseclib3\\Exception\\BadModeException;\nuse phpseclib3\\Exception\\InconsistentSetupException;\nuse phpseclib3\\Exception\\InsufficientSetupException;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\BinaryField;\nuse phpseclib3\\Math\\PrimeField;\n\n/**\n * Base Class for all \\phpseclib3\\Crypt\\* cipher classes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n * @author  Hans-Juergen Petrich <petrich@tronic-media.com>\n */\nabstract class SymmetricKey\n{\n    /**\n     * Encrypt / decrypt using the Counter mode.\n     *\n     * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.\n     *\n     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_CTR = -1;\n    /**\n     * Encrypt / decrypt using the Electronic Code Book mode.\n     *\n     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_ECB = 1;\n    /**\n     * Encrypt / decrypt using the Code Book Chaining mode.\n     *\n     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_CBC = 2;\n    /**\n     * Encrypt / decrypt using the Cipher Feedback mode.\n     *\n     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_CFB = 3;\n    /**\n     * Encrypt / decrypt using the Cipher Feedback mode (8bit)\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_CFB8 = 7;\n    /**\n     * Encrypt / decrypt using the Output Feedback mode (8bit)\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_OFB8 = 8;\n    /**\n     * Encrypt / decrypt using the Output Feedback mode.\n     *\n     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_OFB = 4;\n    /**\n     * Encrypt / decrypt using Galois/Counter mode.\n     *\n     * @link https://en.wikipedia.org/wiki/Galois/Counter_Mode\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_GCM = 5;\n    /**\n     * Encrypt / decrypt using streaming mode.\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     */\n    const MODE_STREAM = 6;\n\n    /**\n     * Mode Map\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const MODE_MAP = [\n        'ctr'    => self::MODE_CTR,\n        'ecb'    => self::MODE_ECB,\n        'cbc'    => self::MODE_CBC,\n        'cfb'    => self::MODE_CFB,\n        'cfb8'   => self::MODE_CFB8,\n        'ofb'    => self::MODE_OFB,\n        'ofb8'   => self::MODE_OFB8,\n        'gcm'    => self::MODE_GCM,\n        'stream' => self::MODE_STREAM\n    ];\n\n    /**\n     * Base value for the internal implementation $engine switch\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const ENGINE_INTERNAL = 1;\n    /**\n     * Base value for the eval() implementation $engine switch\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const ENGINE_EVAL = 2;\n    /**\n     * Base value for the mcrypt implementation $engine switch\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const ENGINE_MCRYPT = 3;\n    /**\n     * Base value for the openssl implementation $engine switch\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const ENGINE_OPENSSL = 4;\n    /**\n     * Base value for the libsodium implementation $engine switch\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const ENGINE_LIBSODIUM = 5;\n    /**\n     * Base value for the openssl / gcm implementation $engine switch\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     */\n    const ENGINE_OPENSSL_GCM = 6;\n\n    /**\n     * Engine Reverse Map\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::getEngine()\n     */\n    const ENGINE_MAP = [\n        self::ENGINE_INTERNAL    => 'PHP',\n        self::ENGINE_EVAL        => 'Eval',\n        self::ENGINE_MCRYPT      => 'mcrypt',\n        self::ENGINE_OPENSSL     => 'OpenSSL',\n        self::ENGINE_LIBSODIUM   => 'libsodium',\n        self::ENGINE_OPENSSL_GCM => 'OpenSSL (GCM)'\n    ];\n\n    /**\n     * The Encryption Mode\n     *\n     * @see self::__construct()\n     * @var int\n     */\n    protected $mode;\n\n    /**\n     * The Block Length of the block cipher\n     *\n     * @var int\n     */\n    protected $block_size = 16;\n\n    /**\n     * The Key\n     *\n     * @see self::setKey()\n     * @var string\n     */\n    protected $key = false;\n\n    /**\n     * HMAC Key\n     *\n     * @see self::setupGCM()\n     * @var ?string\n     */\n    protected $hKey = false;\n\n    /**\n     * The Initialization Vector\n     *\n     * @see self::setIV()\n     * @var string\n     */\n    protected $iv = false;\n\n    /**\n     * A \"sliding\" Initialization Vector\n     *\n     * @see self::enableContinuousBuffer()\n     * @see self::clearBuffers()\n     * @var string\n     */\n    protected $encryptIV;\n\n    /**\n     * A \"sliding\" Initialization Vector\n     *\n     * @see self::enableContinuousBuffer()\n     * @see self::clearBuffers()\n     * @var string\n     */\n    protected $decryptIV;\n\n    /**\n     * Continuous Buffer status\n     *\n     * @see self::enableContinuousBuffer()\n     * @var bool\n     */\n    protected $continuousBuffer = false;\n\n    /**\n     * Encryption buffer for CTR, OFB and CFB modes\n     *\n     * @see self::encrypt()\n     * @see self::clearBuffers()\n     * @var array\n     */\n    protected $enbuffer;\n\n    /**\n     * Decryption buffer for CTR, OFB and CFB modes\n     *\n     * @see self::decrypt()\n     * @see self::clearBuffers()\n     * @var array\n     */\n    protected $debuffer;\n\n    /**\n     * mcrypt resource for encryption\n     *\n     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.\n     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.\n     *\n     * @see self::encrypt()\n     * @var resource\n     */\n    private $enmcrypt;\n\n    /**\n     * mcrypt resource for decryption\n     *\n     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.\n     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.\n     *\n     * @see self::decrypt()\n     * @var resource\n     */\n    private $demcrypt;\n\n    /**\n     * Does the enmcrypt resource need to be (re)initialized?\n     *\n     * @see \\phpseclib3\\Crypt\\Twofish::setKey()\n     * @see \\phpseclib3\\Crypt\\Twofish::setIV()\n     * @var bool\n     */\n    private $enchanged = true;\n\n    /**\n     * Does the demcrypt resource need to be (re)initialized?\n     *\n     * @see \\phpseclib3\\Crypt\\Twofish::setKey()\n     * @see \\phpseclib3\\Crypt\\Twofish::setIV()\n     * @var bool\n     */\n    private $dechanged = true;\n\n    /**\n     * mcrypt resource for CFB mode\n     *\n     * mcrypt's CFB mode, in (and only in) buffered context,\n     * is broken, so phpseclib implements the CFB mode by it self,\n     * even when the mcrypt php extension is available.\n     *\n     * In order to do the CFB-mode work (fast) phpseclib\n     * use a separate ECB-mode mcrypt resource.\n     *\n     * @link http://phpseclib.sourceforge.net/cfb-demo.phps\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @see self::setupMcrypt()\n     * @var resource\n     */\n    private $ecb;\n\n    /**\n     * Optimizing value while CFB-encrypting\n     *\n     * Only relevant if $continuousBuffer enabled\n     * and $engine == self::ENGINE_MCRYPT\n     *\n     * It's faster to re-init $enmcrypt if\n     * $buffer bytes > $cfb_init_len than\n     * using the $ecb resource furthermore.\n     *\n     * This value depends of the chosen cipher\n     * and the time it would be needed for it's\n     * initialization [by mcrypt_generic_init()]\n     * which, typically, depends on the complexity\n     * on its internaly Key-expanding algorithm.\n     *\n     * @see self::encrypt()\n     * @var int\n     */\n    protected $cfb_init_len = 600;\n\n    /**\n     * Does internal cipher state need to be (re)initialized?\n     *\n     * @see self::setKey()\n     * @see self::setIV()\n     * @see self::disableContinuousBuffer()\n     * @var bool\n     */\n    protected $changed = true;\n\n    /**\n     * Does Eval engie need to be (re)initialized?\n     *\n     * @see self::setup()\n     * @var bool\n     */\n    protected $nonIVChanged = true;\n\n    /**\n     * Padding status\n     *\n     * @see self::enablePadding()\n     * @var bool\n     */\n    private $padding = true;\n\n    /**\n     * Is the mode one that is paddable?\n     *\n     * @see self::__construct()\n     * @var bool\n     */\n    private $paddable = false;\n\n    /**\n     * Holds which crypt engine internaly should be use,\n     * which will be determined automatically on __construct()\n     *\n     * Currently available $engines are:\n     * - self::ENGINE_LIBSODIUM   (very fast, php-extension: libsodium, extension_loaded('libsodium') required)\n     * - self::ENGINE_OPENSSL_GCM (very fast, php-extension: openssl, extension_loaded('openssl') required)\n     * - self::ENGINE_OPENSSL     (very fast, php-extension: openssl, extension_loaded('openssl') required)\n     * - self::ENGINE_MCRYPT      (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)\n     * - self::ENGINE_EVAL        (medium, pure php-engine, no php-extension required)\n     * - self::ENGINE_INTERNAL    (slower, pure php-engine, no php-extension required)\n     *\n     * @see self::setEngine()\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @var int\n     */\n    protected $engine;\n\n    /**\n     * Holds the preferred crypt engine\n     *\n     * @see self::setEngine()\n     * @see self::setPreferredEngine()\n     * @var int\n     */\n    private $preferredEngine;\n\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * Only used if $engine == self::ENGINE_MCRYPT\n     *\n     * @link http://www.php.net/mcrypt_module_open\n     * @link http://www.php.net/mcrypt_list_algorithms\n     * @see self::setupMcrypt()\n     * @var string\n     */\n    protected $cipher_name_mcrypt;\n\n    /**\n     * The openssl specific name of the cipher\n     *\n     * Only used if $engine == self::ENGINE_OPENSSL\n     *\n     * @link http://www.php.net/openssl-get-cipher-methods\n     * @var string\n     */\n    protected $cipher_name_openssl;\n\n    /**\n     * The openssl specific name of the cipher in ECB mode\n     *\n     * If OpenSSL does not support the mode we're trying to use (CTR)\n     * it can still be emulated with ECB mode.\n     *\n     * @link http://www.php.net/openssl-get-cipher-methods\n     * @var string\n     */\n    protected $cipher_name_openssl_ecb;\n\n    /**\n     * The default salt used by setPassword()\n     *\n     * @see self::setPassword()\n     * @var string\n     */\n    private $password_default_salt = 'phpseclib/salt';\n\n    /**\n     * The name of the performance-optimized callback function\n     *\n     * Used by encrypt() / decrypt()\n     * only if $engine == self::ENGINE_INTERNAL\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @see self::setupInlineCrypt()\n     * @var Callback\n     */\n    protected $inline_crypt;\n\n    /**\n     * If OpenSSL can be used in ECB but not in CTR we can emulate CTR\n     *\n     * @see self::openssl_ctr_process()\n     * @var bool\n     */\n    private $openssl_emulate_ctr = false;\n\n    /**\n     * Don't truncate / null pad key\n     *\n     * @see self::clearBuffers()\n     * @var bool\n     */\n    private $skip_key_adjustment = false;\n\n    /**\n     * Has the key length explicitly been set or should it be derived from the key, itself?\n     *\n     * @see self::setKeyLength()\n     * @var bool\n     */\n    protected $explicit_key_length = false;\n\n    /**\n     * Hash subkey for GHASH\n     *\n     * @see self::setupGCM()\n     * @see self::ghash()\n     * @var BinaryField\\Integer\n     */\n    private $h;\n\n    /**\n     * Additional authenticated data\n     *\n     * @var string\n     */\n    protected $aad = '';\n\n    /**\n     * Authentication Tag produced after a round of encryption\n     *\n     * @var string\n     */\n    protected $newtag = false;\n\n    /**\n     * Authentication Tag to be verified during decryption\n     *\n     * @var string\n     */\n    protected $oldtag = false;\n\n    /**\n     * GCM Binary Field\n     *\n     * @see self::__construct()\n     * @see self::ghash()\n     * @var BinaryField\n     */\n    private static $gcmField;\n\n    /**\n     * Poly1305 Prime Field\n     *\n     * @see self::enablePoly1305()\n     * @see self::poly1305()\n     * @var PrimeField\n     */\n    private static $poly1305Field;\n\n    /**\n     * Flag for using regular vs \"safe\" intval\n     *\n     * @see self::initialize_static_variables()\n     * @var boolean\n     */\n    protected static $use_reg_intval;\n\n    /**\n     * Poly1305 Key\n     *\n     * @see self::setPoly1305Key()\n     * @see self::poly1305()\n     * @var string\n     */\n    protected $poly1305Key;\n\n    /**\n     * Poly1305 Flag\n     *\n     * @see self::setPoly1305Key()\n     * @see self::enablePoly1305()\n     * @var boolean\n     */\n    protected $usePoly1305 = false;\n\n    /**\n     * The Original Initialization Vector\n     *\n     * GCM uses the nonce to build the IV but we want to be able to distinguish between nonce-derived\n     * IV's and user-set IV's\n     *\n     * @see self::setIV()\n     * @var string\n     */\n    private $origIV = false;\n\n    /**\n     * Nonce\n     *\n     * Only used with GCM. We could re-use setIV() but nonce's can be of a different length and\n     * toggling between GCM and other modes could be more complicated if we re-used setIV()\n     *\n     * @see self::setNonce()\n     * @var string\n     */\n    protected $nonce = false;\n\n    /**\n     * Default Constructor.\n     *\n     * $mode could be:\n     *\n     * - ecb\n     *\n     * - cbc\n     *\n     * - ctr\n     *\n     * - cfb\n     *\n     * - cfb8\n     *\n     * - ofb\n     *\n     * - ofb8\n     *\n     * - gcm\n     *\n     * @param string $mode\n     * @throws BadModeException if an invalid / unsupported mode is provided\n     */\n    public function __construct($mode)\n    {\n        $mode = strtolower($mode);\n        // necessary because of 5.6 compatibility; we can't do isset(self::MODE_MAP[$mode]) in 5.6\n        $map = self::MODE_MAP;\n        if (!isset($map[$mode])) {\n            throw new BadModeException('No valid mode has been specified');\n        }\n\n        $mode = self::MODE_MAP[$mode];\n\n        // $mode dependent settings\n        switch ($mode) {\n            case self::MODE_ECB:\n            case self::MODE_CBC:\n                $this->paddable = true;\n                break;\n            case self::MODE_CTR:\n            case self::MODE_CFB:\n            case self::MODE_CFB8:\n            case self::MODE_OFB:\n            case self::MODE_OFB8:\n            case self::MODE_STREAM:\n                $this->paddable = false;\n                break;\n            case self::MODE_GCM:\n                if ($this->block_size != 16) {\n                    throw new BadModeException('GCM is only valid for block ciphers with a block size of 128 bits');\n                }\n                if (!isset(self::$gcmField)) {\n                    self::$gcmField = new BinaryField(128, 7, 2, 1, 0);\n                }\n                $this->paddable = false;\n                break;\n            default:\n                throw new BadModeException('No valid mode has been specified');\n        }\n\n        $this->mode = $mode;\n\n        static::initialize_static_variables();\n    }\n\n    /**\n     * Initialize static variables\n     */\n    protected static function initialize_static_variables()\n    {\n        if (!isset(self::$use_reg_intval)) {\n            switch (true) {\n                // PHP_OS & \"\\xDF\\xDF\\xDF\" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster\n                case (PHP_OS & \"\\xDF\\xDF\\xDF\") === 'WIN':\n                case !function_exists('php_uname'):\n                case !is_string(php_uname('m')):\n                case (php_uname('m') & \"\\xDF\\xDF\\xDF\") != 'ARM':\n                case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:\n                    self::$use_reg_intval = true;\n                    break;\n                case (php_uname('m') & \"\\xDF\\xDF\\xDF\") == 'ARM':\n                    switch (true) {\n                        /* PHP 7.0.0 introduced a bug that affected 32-bit ARM processors:\n\n                           https://github.com/php/php-src/commit/716da71446ebbd40fa6cf2cea8a4b70f504cc3cd\n\n                           altho the changelogs make no mention of it, this bug was fixed with this commit:\n\n                           https://github.com/php/php-src/commit/c1729272b17a1fe893d1a54e423d3b71470f3ee8\n\n                           affected versions of PHP are: 7.0.x, 7.1.0 - 7.1.23 and 7.2.0 - 7.2.11 */\n                        case PHP_VERSION_ID >= 70000 && PHP_VERSION_ID <= 70123:\n                        case PHP_VERSION_ID >= 70200 && PHP_VERSION_ID <= 70211:\n                            self::$use_reg_intval = false;\n                            break;\n                        default:\n                            self::$use_reg_intval = true;\n                    }\n            }\n        }\n    }\n\n    /**\n     * Sets the initialization vector.\n     *\n     * setIV() is not required when ecb or gcm modes are being used.\n     *\n     * {@internal Can be overwritten by a sub class, but does not have to be}\n     *\n     * @param string $iv\n     * @throws \\LengthException if the IV length isn't equal to the block size\n     * @throws \\BadMethodCallException if an IV is provided when one shouldn't be\n     */\n    public function setIV($iv)\n    {\n        if ($this->mode == self::MODE_ECB) {\n            throw new \\BadMethodCallException('This mode does not require an IV.');\n        }\n\n        if ($this->mode == self::MODE_GCM) {\n            throw new \\BadMethodCallException('Use setNonce instead');\n        }\n\n        if (!$this->usesIV()) {\n            throw new \\BadMethodCallException('This algorithm does not use an IV.');\n        }\n\n        if (strlen($iv) != $this->block_size) {\n            throw new \\LengthException('Received initialization vector of size ' . strlen($iv) . ', but size ' . $this->block_size . ' is required');\n        }\n\n        $this->iv = $this->origIV = $iv;\n        $this->changed = true;\n    }\n\n    /**\n     * Enables Poly1305 mode.\n     *\n     * Once enabled Poly1305 cannot be disabled.\n     *\n     * @throws \\BadMethodCallException if Poly1305 is enabled whilst in GCM mode\n     */\n    public function enablePoly1305()\n    {\n        if ($this->mode == self::MODE_GCM) {\n            throw new \\BadMethodCallException('Poly1305 cannot be used in GCM mode');\n        }\n\n        $this->usePoly1305 = true;\n    }\n\n    /**\n     * Enables Poly1305 mode.\n     *\n     * Once enabled Poly1305 cannot be disabled. If $key is not passed then an attempt to call createPoly1305Key\n     * will be made.\n     *\n     * @param string $key optional\n     * @throws \\LengthException if the key isn't long enough\n     * @throws \\BadMethodCallException if Poly1305 is enabled whilst in GCM mode\n     */\n    public function setPoly1305Key($key = null)\n    {\n        if ($this->mode == self::MODE_GCM) {\n            throw new \\BadMethodCallException('Poly1305 cannot be used in GCM mode');\n        }\n\n        if (!is_string($key) || strlen($key) != 32) {\n            throw new \\LengthException('The Poly1305 key must be 32 bytes long (256 bits)');\n        }\n\n        if (!isset(self::$poly1305Field)) {\n            // 2^130-5\n            self::$poly1305Field = new PrimeField(new BigInteger('3fffffffffffffffffffffffffffffffb', 16));\n        }\n\n        $this->poly1305Key = $key;\n        $this->usePoly1305 = true;\n    }\n\n    /**\n     * Sets the nonce.\n     *\n     * setNonce() is only required when gcm is used\n     *\n     * @param string $nonce\n     * @throws \\BadMethodCallException if an nonce is provided when one shouldn't be\n     */\n    public function setNonce($nonce)\n    {\n        if ($this->mode != self::MODE_GCM) {\n            throw new \\BadMethodCallException('Nonces are only used in GCM mode.');\n        }\n\n        $this->nonce = $nonce;\n        $this->setEngine();\n    }\n\n    /**\n     * Sets additional authenticated data\n     *\n     * setAAD() is only used by gcm or in poly1305 mode\n     *\n     * @param string $aad\n     * @throws \\BadMethodCallException if mode isn't GCM or if poly1305 isn't being utilized\n     */\n    public function setAAD($aad)\n    {\n        if ($this->mode != self::MODE_GCM && !$this->usePoly1305) {\n            throw new \\BadMethodCallException('Additional authenticated data is only utilized in GCM mode or with Poly1305');\n        }\n\n        $this->aad = $aad;\n    }\n\n    /**\n     * Returns whether or not the algorithm uses an IV\n     *\n     * @return bool\n     */\n    public function usesIV()\n    {\n        return $this->mode != self::MODE_GCM && $this->mode != self::MODE_ECB;\n    }\n\n    /**\n     * Returns whether or not the algorithm uses a nonce\n     *\n     * @return bool\n     */\n    public function usesNonce()\n    {\n        return $this->mode == self::MODE_GCM;\n    }\n\n    /**\n     * Returns the current key length in bits\n     *\n     * @return int\n     */\n    public function getKeyLength()\n    {\n        return $this->key_length << 3;\n    }\n\n    /**\n     * Returns the current block length in bits\n     *\n     * @return int\n     */\n    public function getBlockLength()\n    {\n        return $this->block_size << 3;\n    }\n\n    /**\n     * Returns the current block length in bytes\n     *\n     * @return int\n     */\n    public function getBlockLengthInBytes()\n    {\n        return $this->block_size;\n    }\n\n    /**\n     * Sets the key length.\n     *\n     * Keys with explicitly set lengths need to be treated accordingly\n     *\n     * @param int $length\n     */\n    public function setKeyLength($length)\n    {\n        $this->explicit_key_length = $length >> 3;\n\n        if (is_string($this->key) && strlen($this->key) != $this->explicit_key_length) {\n            $this->key = false;\n            throw new InconsistentSetupException('Key has already been set and is not ' . $this->explicit_key_length . ' bytes long');\n        }\n    }\n\n    /**\n     * Sets the key.\n     *\n     * The min/max length(s) of the key depends on the cipher which is used.\n     * If the key not fits the length(s) of the cipher it will paded with null bytes\n     * up to the closest valid key length.  If the key is more than max length,\n     * we trim the excess bits.\n     *\n     * If the key is not explicitly set, it'll be assumed to be all null bytes.\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @param string $key\n     */\n    public function setKey($key)\n    {\n        if ($this->explicit_key_length !== false && strlen($key) != $this->explicit_key_length) {\n            throw new InconsistentSetupException('Key length has already been set to ' . $this->explicit_key_length . ' bytes and this key is ' . strlen($key) . ' bytes');\n        }\n\n        $this->key = $key;\n        $this->key_length = strlen($key);\n        $this->setEngine();\n    }\n\n    /**\n     * Sets the password.\n     *\n     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:\n     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:\n     *         $hash, $salt, $count, $dkLen\n     *\n     *         Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php\n     *     {@link https://en.wikipedia.org/wiki/Bcrypt bcypt}:\n     *         $salt, $rounds, $keylen\n     *\n     *         This is a modified version of bcrypt used by OpenSSH.\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see Crypt/Hash.php\n     * @param string $password\n     * @param string $method\n     * @param int|string ...$func_args\n     * @throws \\LengthException if pbkdf1 is being used and the derived key length exceeds the hash length\n     * @throws \\RuntimeException if bcrypt is being used and a salt isn't provided\n     * @return bool\n     */\n    public function setPassword($password, $method = 'pbkdf2', ...$func_args)\n    {\n        $key = '';\n\n        $method = strtolower($method);\n        switch ($method) {\n            case 'bcrypt':\n                if (!isset($func_args[2])) {\n                    throw new \\RuntimeException('A salt must be provided for bcrypt to work');\n                }\n\n                $salt = $func_args[0];\n\n                $rounds = isset($func_args[1]) ? $func_args[1] : 16;\n                $keylen = isset($func_args[2]) ? $func_args[2] : $this->key_length;\n\n                $key = Blowfish::bcrypt_pbkdf($password, $salt, $keylen + $this->block_size, $rounds);\n\n                $this->setKey(substr($key, 0, $keylen));\n                $this->setIV(substr($key, $keylen));\n\n                return true;\n            case 'pkcs12': // from https://tools.ietf.org/html/rfc7292#appendix-B.2\n            case 'pbkdf1':\n            case 'pbkdf2':\n                // Hash function\n                $hash = isset($func_args[0]) ? strtolower($func_args[0]) : 'sha1';\n                $hashObj = new Hash();\n                $hashObj->setHash($hash);\n\n                // WPA and WPA2 use the SSID as the salt\n                $salt = isset($func_args[1]) ? $func_args[1] : $this->password_default_salt;\n\n                // RFC2898#section-4.2 uses 1,000 iterations by default\n                // WPA and WPA2 use 4,096.\n                $count = isset($func_args[2]) ? $func_args[2] : 1000;\n\n                // Keylength\n                if (isset($func_args[3])) {\n                    if ($func_args[3] <= 0) {\n                        throw new \\LengthException('Derived key length cannot be longer 0 or less');\n                    }\n                    $dkLen = $func_args[3];\n                } else {\n                    $key_length = $this->explicit_key_length !== false ? $this->explicit_key_length : $this->key_length;\n                    $dkLen = $method == 'pbkdf1' ? 2 * $key_length : $key_length;\n                }\n\n                switch (true) {\n                    case $method == 'pkcs12':\n                        /*\n                         In this specification, however, all passwords are created from\n                         BMPStrings with a NULL terminator.  This means that each character in\n                         the original BMPString is encoded in 2 bytes in big-endian format\n                         (most-significant byte first).  There are no Unicode byte order\n                         marks.  The 2 bytes produced from the last character in the BMPString\n                         are followed by 2 additional bytes with the value 0x00.\n\n                         -- https://tools.ietf.org/html/rfc7292#appendix-B.1\n                         */\n                        $password = \"\\0\" . chunk_split($password, 1, \"\\0\") . \"\\0\";\n\n                        /*\n                         This standard specifies 3 different values for the ID byte mentioned\n                         above:\n\n                         1.  If ID=1, then the pseudorandom bits being produced are to be used\n                             as key material for performing encryption or decryption.\n\n                         2.  If ID=2, then the pseudorandom bits being produced are to be used\n                             as an IV (Initial Value) for encryption or decryption.\n\n                         3.  If ID=3, then the pseudorandom bits being produced are to be used\n                             as an integrity key for MACing.\n                         */\n                        // Construct a string, D (the \"diversifier\"), by concatenating v/8\n                        // copies of ID.\n                        $blockLength = $hashObj->getBlockLengthInBytes();\n                        $d1 = str_repeat(chr(1), $blockLength);\n                        $d2 = str_repeat(chr(2), $blockLength);\n                        $s = '';\n                        if (strlen($salt)) {\n                            while (strlen($s) < $blockLength) {\n                                $s .= $salt;\n                            }\n                        }\n                        $s = substr($s, 0, $blockLength);\n\n                        $p = '';\n                        if (strlen($password)) {\n                            while (strlen($p) < $blockLength) {\n                                $p .= $password;\n                            }\n                        }\n                        $p = substr($p, 0, $blockLength);\n\n                        $i = $s . $p;\n\n                        $this->setKey(self::pkcs12helper($dkLen, $hashObj, $i, $d1, $count));\n                        if ($this->usesIV()) {\n                            $this->setIV(self::pkcs12helper($this->block_size, $hashObj, $i, $d2, $count));\n                        }\n\n                        return true;\n                    case $method == 'pbkdf1':\n                        if ($dkLen > $hashObj->getLengthInBytes()) {\n                            throw new \\LengthException('Derived key length cannot be longer than the hash length');\n                        }\n                        $t = $password . $salt;\n                        for ($i = 0; $i < $count; ++$i) {\n                            $t = $hashObj->hash($t);\n                        }\n                        $key = substr($t, 0, $dkLen);\n\n                        $this->setKey(substr($key, 0, $dkLen >> 1));\n                        if ($this->usesIV()) {\n                            $this->setIV(substr($key, $dkLen >> 1));\n                        }\n\n                        return true;\n                    case !in_array($hash, hash_algos()):\n                        $i = 1;\n                        $hashObj->setKey($password);\n                        while (strlen($key) < $dkLen) {\n                            $f = $u = $hashObj->hash($salt . pack('N', $i++));\n                            for ($j = 2; $j <= $count; ++$j) {\n                                $u = $hashObj->hash($u);\n                                $f ^= $u;\n                            }\n                            $key .= $f;\n                        }\n                        $key = substr($key, 0, $dkLen);\n                        break;\n                    default:\n                        $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);\n                }\n                break;\n            default:\n                throw new UnsupportedAlgorithmException($method . ' is not a supported password hashing method');\n        }\n\n        $this->setKey($key);\n\n        return true;\n    }\n\n    /**\n     * PKCS#12 KDF Helper Function\n     *\n     * As discussed here:\n     *\n     * {@link https://tools.ietf.org/html/rfc7292#appendix-B}\n     *\n     * @see self::setPassword()\n     * @param int $n\n     * @param Hash $hashObj\n     * @param string $i\n     * @param string $d\n     * @param int $count\n     * @return string $a\n     */\n    private static function pkcs12helper($n, $hashObj, $i, $d, $count)\n    {\n        static $one;\n        if (!isset($one)) {\n            $one = new BigInteger(1);\n        }\n\n        $blockLength = $hashObj->getBlockLength() >> 3;\n\n        $c = ceil($n / $hashObj->getLengthInBytes());\n        $a = '';\n        for ($j = 1; $j <= $c; $j++) {\n            $ai = $d . $i;\n            for ($k = 0; $k < $count; $k++) {\n                $ai = $hashObj->hash($ai);\n            }\n            $b = '';\n            while (strlen($b) < $blockLength) {\n                $b .= $ai;\n            }\n            $b = substr($b, 0, $blockLength);\n            $b = new BigInteger($b, 256);\n            $newi = '';\n            for ($k = 0; $k < strlen($i); $k += $blockLength) {\n                $temp = substr($i, $k, $blockLength);\n                $temp = new BigInteger($temp, 256);\n                $temp->setPrecision($blockLength << 3);\n                $temp = $temp->add($b);\n                $temp = $temp->add($one);\n                $newi .= $temp->toBytes(false);\n            }\n            $i = $newi;\n            $a .= $ai;\n        }\n\n        return substr($a, 0, $n);\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher\n     * implementations may or may not pad in the same manner.  Other common approaches to padding and the reasons why it's\n     * necessary are discussed in the following\n     * URL:\n     *\n     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}\n     *\n     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.\n     * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that\n     * length.\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see self::decrypt()\n     * @param string $plaintext\n     * @return string $ciphertext\n     */\n    public function encrypt($plaintext)\n    {\n        if ($this->paddable) {\n            $plaintext = $this->pad($plaintext);\n        }\n\n        $this->setup();\n\n        if ($this->mode == self::MODE_GCM) {\n            $oldIV = $this->iv;\n            Strings::increment_str($this->iv);\n            $cipher = new static('ctr');\n            $cipher->setKey($this->key);\n            $cipher->setIV($this->iv);\n            $ciphertext = $cipher->encrypt($plaintext);\n\n            $s = $this->ghash(\n                self::nullPad128($this->aad) .\n                self::nullPad128($ciphertext) .\n                self::len64($this->aad) .\n                self::len64($ciphertext)\n            );\n            $cipher->encryptIV = $this->iv = $this->encryptIV = $this->decryptIV = $oldIV;\n            $this->newtag = $cipher->encrypt($s);\n            return $ciphertext;\n        }\n\n        if (isset($this->poly1305Key)) {\n            $cipher = clone $this;\n            unset($cipher->poly1305Key);\n            $this->usePoly1305 = false;\n            $ciphertext = $cipher->encrypt($plaintext);\n            $this->newtag = $this->poly1305($ciphertext);\n            return $ciphertext;\n        }\n\n        if ($this->engine === self::ENGINE_OPENSSL) {\n            switch ($this->mode) {\n                case self::MODE_STREAM:\n                    return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n                case self::MODE_ECB:\n                    return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n                case self::MODE_CBC:\n                    $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->encryptIV);\n                    if ($this->continuousBuffer) {\n                        $this->encryptIV = substr($result, -$this->block_size);\n                    }\n                    return $result;\n                case self::MODE_CTR:\n                    return $this->openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);\n                case self::MODE_CFB:\n                    // cfb loosely routines inspired by openssl's:\n                    // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}\n                    $ciphertext = '';\n                    if ($this->continuousBuffer) {\n                        $iv = &$this->encryptIV;\n                        $pos = &$this->enbuffer['pos'];\n                    } else {\n                        $iv = $this->encryptIV;\n                        $pos = 0;\n                    }\n                    $len = strlen($plaintext);\n                    $i = 0;\n                    if ($pos) {\n                        $orig_pos = $pos;\n                        $max = $this->block_size - $pos;\n                        if ($len >= $max) {\n                            $i = $max;\n                            $len -= $max;\n                            $pos = 0;\n                        } else {\n                            $i = $len;\n                            $pos += $len;\n                            $len = 0;\n                        }\n                        // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize\n                        $ciphertext = substr($iv, $orig_pos) ^ $plaintext;\n                        $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);\n                        $plaintext = substr($plaintext, $i);\n                    }\n\n                    $overflow = $len % $this->block_size;\n\n                    if ($overflow) {\n                        $ciphertext .= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat(\"\\0\", $this->block_size), $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);\n                        $iv = Strings::pop($ciphertext, $this->block_size);\n\n                        $size = $len - $overflow;\n                        $block = $iv ^ substr($plaintext, -$overflow);\n                        $iv = substr_replace($iv, $block, 0, $overflow);\n                        $ciphertext .= $block;\n                        $pos = $overflow;\n                    } elseif ($len) {\n                        $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);\n                        $iv = substr($ciphertext, -$this->block_size);\n                    }\n\n                    return $ciphertext;\n                case self::MODE_CFB8:\n                    $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->encryptIV);\n                    if ($this->continuousBuffer) {\n                        if (($len = strlen($ciphertext)) >= $this->block_size) {\n                            $this->encryptIV = substr($ciphertext, -$this->block_size);\n                        } else {\n                            $this->encryptIV = substr($this->encryptIV, $len - $this->block_size) . substr($ciphertext, -$len);\n                        }\n                    }\n                    return $ciphertext;\n                case self::MODE_OFB8:\n                    $ciphertext = '';\n                    $len = strlen($plaintext);\n                    $iv = $this->encryptIV;\n\n                    for ($i = 0; $i < $len; ++$i) {\n                        $xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV);\n                        $ciphertext .= $plaintext[$i] ^ $xor;\n                        $iv = substr($iv, 1) . $xor[0];\n                    }\n\n                    if ($this->continuousBuffer) {\n                        $this->encryptIV = $iv;\n                    }\n                    break;\n                case self::MODE_OFB:\n                    return $this->openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);\n            }\n        }\n\n        if ($this->engine === self::ENGINE_MCRYPT) {\n            set_error_handler(function () {\n            });\n            if ($this->enchanged) {\n                mcrypt_generic_init($this->enmcrypt, $this->key, $this->getIV($this->encryptIV));\n                $this->enchanged = false;\n            }\n\n            // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}\n            // using mcrypt's default handing of CFB the above would output two different things.  using phpseclib's\n            // rewritten CFB implementation the above outputs the same thing twice.\n            if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {\n                $block_size = $this->block_size;\n                $iv = &$this->encryptIV;\n                $pos = &$this->enbuffer['pos'];\n                $len = strlen($plaintext);\n                $ciphertext = '';\n                $i = 0;\n                if ($pos) {\n                    $orig_pos = $pos;\n                    $max = $block_size - $pos;\n                    if ($len >= $max) {\n                        $i = $max;\n                        $len -= $max;\n                        $pos = 0;\n                    } else {\n                        $i = $len;\n                        $pos += $len;\n                        $len = 0;\n                    }\n                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;\n                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);\n                    $this->enbuffer['enmcrypt_init'] = true;\n                }\n                if ($len >= $block_size) {\n                    if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {\n                        if ($this->enbuffer['enmcrypt_init'] === true) {\n                            mcrypt_generic_init($this->enmcrypt, $this->key, $iv);\n                            $this->enbuffer['enmcrypt_init'] = false;\n                        }\n                        $ciphertext .= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));\n                        $iv = substr($ciphertext, -$block_size);\n                        $len %= $block_size;\n                    } else {\n                        while ($len >= $block_size) {\n                            $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);\n                            $ciphertext .= $iv;\n                            $len -= $block_size;\n                            $i += $block_size;\n                        }\n                    }\n                }\n\n                if ($len) {\n                    $iv = mcrypt_generic($this->ecb, $iv);\n                    $block = $iv ^ substr($plaintext, -$len);\n                    $iv = substr_replace($iv, $block, 0, $len);\n                    $ciphertext .= $block;\n                    $pos = $len;\n                }\n\n                restore_error_handler();\n\n                return $ciphertext;\n            }\n\n            $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);\n\n            if (!$this->continuousBuffer) {\n                mcrypt_generic_init($this->enmcrypt, $this->key, $this->getIV($this->encryptIV));\n            }\n\n            restore_error_handler();\n\n            return $ciphertext;\n        }\n\n        if ($this->engine === self::ENGINE_EVAL) {\n            $inline = $this->inline_crypt;\n            return $inline('encrypt', $plaintext);\n        }\n\n        $buffer = &$this->enbuffer;\n        $block_size = $this->block_size;\n        $ciphertext = '';\n        switch ($this->mode) {\n            case self::MODE_ECB:\n                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                    $ciphertext .= $this->encryptBlock(substr($plaintext, $i, $block_size));\n                }\n                break;\n            case self::MODE_CBC:\n                $xor = $this->encryptIV;\n                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                    $block = substr($plaintext, $i, $block_size);\n                    $block = $this->encryptBlock($block ^ $xor);\n                    $xor = $block;\n                    $ciphertext .= $block;\n                }\n                if ($this->continuousBuffer) {\n                    $this->encryptIV = $xor;\n                }\n                break;\n            case self::MODE_CTR:\n                $xor = $this->encryptIV;\n                if (strlen($buffer['ciphertext'])) {\n                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                        $block = substr($plaintext, $i, $block_size);\n                        if (strlen($block) > strlen($buffer['ciphertext'])) {\n                            $buffer['ciphertext'] .= $this->encryptBlock($xor);\n                            Strings::increment_str($xor);\n                        }\n                        $key = Strings::shift($buffer['ciphertext'], $block_size);\n                        $ciphertext .= $block ^ $key;\n                    }\n                } else {\n                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                        $block = substr($plaintext, $i, $block_size);\n                        $key = $this->encryptBlock($xor);\n                        Strings::increment_str($xor);\n                        $ciphertext .= $block ^ $key;\n                    }\n                }\n                if ($this->continuousBuffer) {\n                    $this->encryptIV = $xor;\n                    if ($start = strlen($plaintext) % $block_size) {\n                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];\n                    }\n                }\n                break;\n            case self::MODE_CFB:\n                // cfb loosely routines inspired by openssl's:\n                // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}\n                if ($this->continuousBuffer) {\n                    $iv = &$this->encryptIV;\n                    $pos = &$buffer['pos'];\n                } else {\n                    $iv = $this->encryptIV;\n                    $pos = 0;\n                }\n                $len = strlen($plaintext);\n                $i = 0;\n                if ($pos) {\n                    $orig_pos = $pos;\n                    $max = $block_size - $pos;\n                    if ($len >= $max) {\n                        $i = $max;\n                        $len -= $max;\n                        $pos = 0;\n                    } else {\n                        $i = $len;\n                        $pos += $len;\n                        $len = 0;\n                    }\n                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize\n                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;\n                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);\n                }\n                while ($len >= $block_size) {\n                    $iv = $this->encryptBlock($iv) ^ substr($plaintext, $i, $block_size);\n                    $ciphertext .= $iv;\n                    $len -= $block_size;\n                    $i += $block_size;\n                }\n                if ($len) {\n                    $iv = $this->encryptBlock($iv);\n                    $block = $iv ^ substr($plaintext, $i);\n                    $iv = substr_replace($iv, $block, 0, $len);\n                    $ciphertext .= $block;\n                    $pos = $len;\n                }\n                break;\n            case self::MODE_CFB8:\n                $ciphertext = '';\n                $len = strlen($plaintext);\n                $iv = $this->encryptIV;\n\n                for ($i = 0; $i < $len; ++$i) {\n                    $ciphertext .= ($c = $plaintext[$i] ^ $this->encryptBlock($iv));\n                    $iv = substr($iv, 1) . $c;\n                }\n\n                if ($this->continuousBuffer) {\n                    if ($len >= $block_size) {\n                        $this->encryptIV = substr($ciphertext, -$block_size);\n                    } else {\n                        $this->encryptIV = substr($this->encryptIV, $len - $block_size) . substr($ciphertext, -$len);\n                    }\n                }\n                break;\n            case self::MODE_OFB8:\n                $ciphertext = '';\n                $len = strlen($plaintext);\n                $iv = $this->encryptIV;\n\n                for ($i = 0; $i < $len; ++$i) {\n                    $xor = $this->encryptBlock($iv);\n                    $ciphertext .= $plaintext[$i] ^ $xor;\n                    $iv = substr($iv, 1) . $xor[0];\n                }\n\n                if ($this->continuousBuffer) {\n                    $this->encryptIV = $iv;\n                }\n                break;\n            case self::MODE_OFB:\n                $xor = $this->encryptIV;\n                if (strlen($buffer['xor'])) {\n                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                        $block = substr($plaintext, $i, $block_size);\n                        if (strlen($block) > strlen($buffer['xor'])) {\n                            $xor = $this->encryptBlock($xor);\n                            $buffer['xor'] .= $xor;\n                        }\n                        $key = Strings::shift($buffer['xor'], $block_size);\n                        $ciphertext .= $block ^ $key;\n                    }\n                } else {\n                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                        $xor = $this->encryptBlock($xor);\n                        $ciphertext .= substr($plaintext, $i, $block_size) ^ $xor;\n                    }\n                    $key = $xor;\n                }\n                if ($this->continuousBuffer) {\n                    $this->encryptIV = $xor;\n                    if ($start = strlen($plaintext) % $block_size) {\n                        $buffer['xor'] = substr($key, $start) . $buffer['xor'];\n                    }\n                }\n                break;\n            case self::MODE_STREAM:\n                $ciphertext = $this->encryptBlock($plaintext);\n                break;\n        }\n\n        return $ciphertext;\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until\n     * it is.\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see self::encrypt()\n     * @param string $ciphertext\n     * @return string $plaintext\n     * @throws \\LengthException if we're inside a block cipher and the ciphertext length is not a multiple of the block size\n     */\n    public function decrypt($ciphertext)\n    {\n        if ($this->paddable && strlen($ciphertext) % $this->block_size) {\n            throw new \\LengthException('The ciphertext length (' . strlen($ciphertext) . ') needs to be a multiple of the block size (' . $this->block_size . ')');\n        }\n        $this->setup();\n\n        if ($this->mode == self::MODE_GCM || isset($this->poly1305Key)) {\n            if ($this->oldtag === false) {\n                throw new InsufficientSetupException('Authentication Tag has not been set');\n            }\n\n            if (isset($this->poly1305Key)) {\n                $newtag = $this->poly1305($ciphertext);\n            } else {\n                $oldIV = $this->iv;\n                Strings::increment_str($this->iv);\n                $cipher = new static('ctr');\n                $cipher->setKey($this->key);\n                $cipher->setIV($this->iv);\n                $plaintext = $cipher->decrypt($ciphertext);\n\n                $s = $this->ghash(\n                    self::nullPad128($this->aad) .\n                    self::nullPad128($ciphertext) .\n                    self::len64($this->aad) .\n                    self::len64($ciphertext)\n                );\n                $cipher->encryptIV = $this->iv = $this->encryptIV = $this->decryptIV = $oldIV;\n                $newtag = $cipher->encrypt($s);\n            }\n            if ($this->oldtag != substr($newtag, 0, strlen($newtag))) {\n                $cipher = clone $this;\n                unset($cipher->poly1305Key);\n                $this->usePoly1305 = false;\n                $plaintext = $cipher->decrypt($ciphertext);\n                $this->oldtag = false;\n                throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');\n            }\n            $this->oldtag = false;\n            return $plaintext;\n        }\n\n        if ($this->engine === self::ENGINE_OPENSSL) {\n            switch ($this->mode) {\n                case self::MODE_STREAM:\n                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n                    break;\n                case self::MODE_ECB:\n                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n                    break;\n                case self::MODE_CBC:\n                    $offset = $this->block_size;\n                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->decryptIV);\n                    if ($this->continuousBuffer) {\n                        $this->decryptIV = substr($ciphertext, -$offset, $this->block_size);\n                    }\n                    break;\n                case self::MODE_CTR:\n                    $plaintext = $this->openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);\n                    break;\n                case self::MODE_CFB:\n                    // cfb loosely routines inspired by openssl's:\n                    // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}\n                    $plaintext = '';\n                    if ($this->continuousBuffer) {\n                        $iv = &$this->decryptIV;\n                        $pos = &$this->debuffer['pos'];\n                    } else {\n                        $iv = $this->decryptIV;\n                        $pos = 0;\n                    }\n                    $len = strlen($ciphertext);\n                    $i = 0;\n                    if ($pos) {\n                        $orig_pos = $pos;\n                        $max = $this->block_size - $pos;\n                        if ($len >= $max) {\n                            $i = $max;\n                            $len -= $max;\n                            $pos = 0;\n                        } else {\n                            $i = $len;\n                            $pos += $len;\n                            $len = 0;\n                        }\n                        // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize\n                        $plaintext = substr($iv, $orig_pos) ^ $ciphertext;\n                        $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);\n                        $ciphertext = substr($ciphertext, $i);\n                    }\n                    $overflow = $len % $this->block_size;\n                    if ($overflow) {\n                        $plaintext .= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);\n                        if ($len - $overflow) {\n                            $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);\n                        }\n                        $iv = openssl_encrypt(str_repeat(\"\\0\", $this->block_size), $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);\n                        $plaintext .= $iv ^ substr($ciphertext, -$overflow);\n                        $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);\n                        $pos = $overflow;\n                    } elseif ($len) {\n                        $plaintext .= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);\n                        $iv = substr($ciphertext, -$this->block_size);\n                    }\n                    break;\n                case self::MODE_CFB8:\n                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->decryptIV);\n                    if ($this->continuousBuffer) {\n                        if (($len = strlen($ciphertext)) >= $this->block_size) {\n                            $this->decryptIV = substr($ciphertext, -$this->block_size);\n                        } else {\n                            $this->decryptIV = substr($this->decryptIV, $len - $this->block_size) . substr($ciphertext, -$len);\n                        }\n                    }\n                    break;\n                case self::MODE_OFB8:\n                    $plaintext = '';\n                    $len = strlen($ciphertext);\n                    $iv = $this->decryptIV;\n\n                    for ($i = 0; $i < $len; ++$i) {\n                        $xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV);\n                        $plaintext .= $ciphertext[$i] ^ $xor;\n                        $iv = substr($iv, 1) . $xor[0];\n                    }\n\n                    if ($this->continuousBuffer) {\n                        $this->decryptIV = $iv;\n                    }\n                    break;\n                case self::MODE_OFB:\n                    $plaintext = $this->openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);\n            }\n\n            return $this->paddable ? $this->unpad($plaintext) : $plaintext;\n        }\n\n        if ($this->engine === self::ENGINE_MCRYPT) {\n            set_error_handler(function () {\n            });\n            $block_size = $this->block_size;\n            if ($this->dechanged) {\n                mcrypt_generic_init($this->demcrypt, $this->key, $this->getIV($this->decryptIV));\n                $this->dechanged = false;\n            }\n\n            if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {\n                $iv = &$this->decryptIV;\n                $pos = &$this->debuffer['pos'];\n                $len = strlen($ciphertext);\n                $plaintext = '';\n                $i = 0;\n                if ($pos) {\n                    $orig_pos = $pos;\n                    $max = $block_size - $pos;\n                    if ($len >= $max) {\n                        $i = $max;\n                        $len -= $max;\n                        $pos = 0;\n                    } else {\n                        $i = $len;\n                        $pos += $len;\n                        $len = 0;\n                    }\n                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize\n                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;\n                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);\n                }\n                if ($len >= $block_size) {\n                    $cb = substr($ciphertext, $i, $len - $len % $block_size);\n                    $plaintext .= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;\n                    $iv = substr($cb, -$block_size);\n                    $len %= $block_size;\n                }\n                if ($len) {\n                    $iv = mcrypt_generic($this->ecb, $iv);\n                    $plaintext .= $iv ^ substr($ciphertext, -$len);\n                    $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);\n                    $pos = $len;\n                }\n\n                restore_error_handler();\n\n                return $plaintext;\n            }\n\n            $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);\n\n            if (!$this->continuousBuffer) {\n                mcrypt_generic_init($this->demcrypt, $this->key, $this->getIV($this->decryptIV));\n            }\n\n            restore_error_handler();\n\n            return $this->paddable ? $this->unpad($plaintext) : $plaintext;\n        }\n\n        if ($this->engine === self::ENGINE_EVAL) {\n            $inline = $this->inline_crypt;\n            return $inline('decrypt', $ciphertext);\n        }\n\n        $block_size = $this->block_size;\n\n        $buffer = &$this->debuffer;\n        $plaintext = '';\n        switch ($this->mode) {\n            case self::MODE_ECB:\n                for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {\n                    $plaintext .= $this->decryptBlock(substr($ciphertext, $i, $block_size));\n                }\n                break;\n            case self::MODE_CBC:\n                $xor = $this->decryptIV;\n                for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {\n                    $block = substr($ciphertext, $i, $block_size);\n                    $plaintext .= $this->decryptBlock($block) ^ $xor;\n                    $xor = $block;\n                }\n                if ($this->continuousBuffer) {\n                    $this->decryptIV = $xor;\n                }\n                break;\n            case self::MODE_CTR:\n                $xor = $this->decryptIV;\n                if (strlen($buffer['ciphertext'])) {\n                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {\n                        $block = substr($ciphertext, $i, $block_size);\n                        if (strlen($block) > strlen($buffer['ciphertext'])) {\n                            $buffer['ciphertext'] .= $this->encryptBlock($xor);\n                            Strings::increment_str($xor);\n                        }\n                        $key = Strings::shift($buffer['ciphertext'], $block_size);\n                        $plaintext .= $block ^ $key;\n                    }\n                } else {\n                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {\n                        $block = substr($ciphertext, $i, $block_size);\n                        $key = $this->encryptBlock($xor);\n                        Strings::increment_str($xor);\n                        $plaintext .= $block ^ $key;\n                    }\n                }\n                if ($this->continuousBuffer) {\n                    $this->decryptIV = $xor;\n                    if ($start = strlen($ciphertext) % $block_size) {\n                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];\n                    }\n                }\n                break;\n            case self::MODE_CFB:\n                if ($this->continuousBuffer) {\n                    $iv = &$this->decryptIV;\n                    $pos = &$buffer['pos'];\n                } else {\n                    $iv = $this->decryptIV;\n                    $pos = 0;\n                }\n                $len = strlen($ciphertext);\n                $i = 0;\n                if ($pos) {\n                    $orig_pos = $pos;\n                    $max = $block_size - $pos;\n                    if ($len >= $max) {\n                        $i = $max;\n                        $len -= $max;\n                        $pos = 0;\n                    } else {\n                        $i = $len;\n                        $pos += $len;\n                        $len = 0;\n                    }\n                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize\n                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;\n                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);\n                }\n                while ($len >= $block_size) {\n                    $iv = $this->encryptBlock($iv);\n                    $cb = substr($ciphertext, $i, $block_size);\n                    $plaintext .= $iv ^ $cb;\n                    $iv = $cb;\n                    $len -= $block_size;\n                    $i += $block_size;\n                }\n                if ($len) {\n                    $iv = $this->encryptBlock($iv);\n                    $plaintext .= $iv ^ substr($ciphertext, $i);\n                    $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);\n                    $pos = $len;\n                }\n                break;\n            case self::MODE_CFB8:\n                $plaintext = '';\n                $len = strlen($ciphertext);\n                $iv = $this->decryptIV;\n\n                for ($i = 0; $i < $len; ++$i) {\n                    $plaintext .= $ciphertext[$i] ^ $this->encryptBlock($iv);\n                    $iv = substr($iv, 1) . $ciphertext[$i];\n                }\n\n                if ($this->continuousBuffer) {\n                    if ($len >= $block_size) {\n                        $this->decryptIV = substr($ciphertext, -$block_size);\n                    } else {\n                        $this->decryptIV = substr($this->decryptIV, $len - $block_size) . substr($ciphertext, -$len);\n                    }\n                }\n                break;\n            case self::MODE_OFB8:\n                $plaintext = '';\n                $len = strlen($ciphertext);\n                $iv = $this->decryptIV;\n\n                for ($i = 0; $i < $len; ++$i) {\n                    $xor = $this->encryptBlock($iv);\n                    $plaintext .= $ciphertext[$i] ^ $xor;\n                    $iv = substr($iv, 1) . $xor[0];\n                }\n\n                if ($this->continuousBuffer) {\n                    $this->decryptIV = $iv;\n                }\n                break;\n            case self::MODE_OFB:\n                $xor = $this->decryptIV;\n                if (strlen($buffer['xor'])) {\n                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {\n                        $block = substr($ciphertext, $i, $block_size);\n                        if (strlen($block) > strlen($buffer['xor'])) {\n                            $xor = $this->encryptBlock($xor);\n                            $buffer['xor'] .= $xor;\n                        }\n                        $key = Strings::shift($buffer['xor'], $block_size);\n                        $plaintext .= $block ^ $key;\n                    }\n                } else {\n                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {\n                        $xor = $this->encryptBlock($xor);\n                        $plaintext .= substr($ciphertext, $i, $block_size) ^ $xor;\n                    }\n                    $key = $xor;\n                }\n                if ($this->continuousBuffer) {\n                    $this->decryptIV = $xor;\n                    if ($start = strlen($ciphertext) % $block_size) {\n                        $buffer['xor'] = substr($key, $start) . $buffer['xor'];\n                    }\n                }\n                break;\n            case self::MODE_STREAM:\n                $plaintext = $this->decryptBlock($ciphertext);\n                break;\n        }\n        return $this->paddable ? $this->unpad($plaintext) : $plaintext;\n    }\n\n    /**\n     * Get the authentication tag\n     *\n     * Only used in GCM or Poly1305 mode\n     *\n     * @see self::encrypt()\n     * @param int $length optional\n     * @return string\n     * @throws \\LengthException if $length isn't of a sufficient length\n     * @throws \\RuntimeException if GCM mode isn't being used\n     */\n    public function getTag($length = 16)\n    {\n        if ($this->mode != self::MODE_GCM && !$this->usePoly1305) {\n            throw new \\BadMethodCallException('Authentication tags are only utilized in GCM mode or with Poly1305');\n        }\n\n        if ($this->newtag === false) {\n            throw new \\BadMethodCallException('A tag can only be returned after a round of encryption has been performed');\n        }\n\n        // the tag is 128-bits. it can't be greater than 16 bytes because that's bigger than the tag is. if it\n        // were 0 you might as well be doing CTR and less than 4 provides minimal security that could be trivially\n        // easily brute forced.\n        // see https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=36\n        // for more info\n        if ($length < 4 || $length > 16) {\n            throw new \\LengthException('The authentication tag must be between 4 and 16 bytes long');\n        }\n\n        return $length == 16 ?\n            $this->newtag :\n            substr($this->newtag, 0, $length);\n    }\n\n    /**\n     * Sets the authentication tag\n     *\n     * Only used in GCM mode\n     *\n     * @see self::decrypt()\n     * @param string $tag\n     * @throws \\LengthException if $length isn't of a sufficient length\n     * @throws \\RuntimeException if GCM mode isn't being used\n     */\n    public function setTag($tag)\n    {\n        if ($this->usePoly1305 && !isset($this->poly1305Key) && method_exists($this, 'createPoly1305Key')) {\n            $this->createPoly1305Key();\n        }\n\n        if ($this->mode != self::MODE_GCM && !$this->usePoly1305) {\n            throw new \\BadMethodCallException('Authentication tags are only utilized in GCM mode or with Poly1305');\n        }\n\n        $length = strlen($tag);\n        if ($length < 4 || $length > 16) {\n            throw new \\LengthException('The authentication tag must be between 4 and 16 bytes long');\n        }\n        $this->oldtag = $tag;\n    }\n\n    /**\n     * Get the IV\n     *\n     * mcrypt requires an IV even if ECB is used\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @param string $iv\n     * @return string\n     */\n    protected function getIV($iv)\n    {\n        return $this->mode == self::MODE_ECB ? str_repeat(\"\\0\", $this->block_size) : $iv;\n    }\n\n    /**\n     * OpenSSL CTR Processor\n     *\n     * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream\n     * for CTR is the same for both encrypting and decrypting this function is re-used by both SymmetricKey::encrypt()\n     * and SymmetricKey::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this\n     * function will emulate CTR with ECB when necessary.\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @param string $plaintext\n     * @param string $encryptIV\n     * @param array $buffer\n     * @return string\n     */\n    private function openssl_ctr_process($plaintext, &$encryptIV, &$buffer)\n    {\n        $ciphertext = '';\n\n        $block_size = $this->block_size;\n        $key = $this->key;\n\n        if ($this->openssl_emulate_ctr) {\n            $xor = $encryptIV;\n            if (strlen($buffer['ciphertext'])) {\n                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                    $block = substr($plaintext, $i, $block_size);\n                    if (strlen($block) > strlen($buffer['ciphertext'])) {\n                        $buffer['ciphertext'] .= openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n                    }\n                    Strings::increment_str($xor);\n                    $otp = Strings::shift($buffer['ciphertext'], $block_size);\n                    $ciphertext .= $block ^ $otp;\n                }\n            } else {\n                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {\n                    $block = substr($plaintext, $i, $block_size);\n                    $otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n                    Strings::increment_str($xor);\n                    $ciphertext .= $block ^ $otp;\n                }\n            }\n            if ($this->continuousBuffer) {\n                $encryptIV = $xor;\n                if ($start = strlen($plaintext) % $block_size) {\n                    $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];\n                }\n            }\n\n            return $ciphertext;\n        }\n\n        if (strlen($buffer['ciphertext'])) {\n            $ciphertext = $plaintext ^ Strings::shift($buffer['ciphertext'], strlen($plaintext));\n            $plaintext = substr($plaintext, strlen($ciphertext));\n\n            if (!strlen($plaintext)) {\n                return $ciphertext;\n            }\n        }\n\n        $overflow = strlen($plaintext) % $block_size;\n        if ($overflow) {\n            $plaintext2 = Strings::pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2\n            $encrypted = openssl_encrypt($plaintext . str_repeat(\"\\0\", $block_size), $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);\n            $temp = Strings::pop($encrypted, $block_size);\n            $ciphertext .= $encrypted . ($plaintext2 ^ $temp);\n            if ($this->continuousBuffer) {\n                $buffer['ciphertext'] = substr($temp, $overflow);\n                $encryptIV = $temp;\n            }\n        } elseif (!strlen($buffer['ciphertext'])) {\n            $ciphertext .= openssl_encrypt($plaintext . str_repeat(\"\\0\", $block_size), $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);\n            $temp = Strings::pop($ciphertext, $block_size);\n            if ($this->continuousBuffer) {\n                $encryptIV = $temp;\n            }\n        }\n        if ($this->continuousBuffer) {\n            $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);\n            if ($overflow) {\n                Strings::increment_str($encryptIV);\n            }\n        }\n\n        return $ciphertext;\n    }\n\n    /**\n     * OpenSSL OFB Processor\n     *\n     * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream\n     * for OFB is the same for both encrypting and decrypting this function is re-used by both SymmetricKey::encrypt()\n     * and SymmetricKey::decrypt().\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @param string $plaintext\n     * @param string $encryptIV\n     * @param array $buffer\n     * @return string\n     */\n    private function openssl_ofb_process($plaintext, &$encryptIV, &$buffer)\n    {\n        if (strlen($buffer['xor'])) {\n            $ciphertext = $plaintext ^ $buffer['xor'];\n            $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));\n            $plaintext = substr($plaintext, strlen($ciphertext));\n        } else {\n            $ciphertext = '';\n        }\n\n        $block_size = $this->block_size;\n\n        $len = strlen($plaintext);\n        $key = $this->key;\n        $overflow = $len % $block_size;\n\n        if (strlen($plaintext)) {\n            if ($overflow) {\n                $ciphertext .= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat(\"\\0\", $block_size), $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);\n                $xor = Strings::pop($ciphertext, $block_size);\n                if ($this->continuousBuffer) {\n                    $encryptIV = $xor;\n                }\n                $ciphertext .= Strings::shift($xor, $overflow) ^ substr($plaintext, -$overflow);\n                if ($this->continuousBuffer) {\n                    $buffer['xor'] = $xor;\n                }\n            } else {\n                $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);\n                if ($this->continuousBuffer) {\n                    $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);\n                }\n            }\n        }\n\n        return $ciphertext;\n    }\n\n    /**\n     * phpseclib <-> OpenSSL Mode Mapper\n     *\n     * May need to be overwritten by classes extending this one in some cases\n     *\n     * @return string\n     */\n    protected function openssl_translate_mode()\n    {\n        switch ($this->mode) {\n            case self::MODE_ECB:\n                return 'ecb';\n            case self::MODE_CBC:\n                return 'cbc';\n            case self::MODE_CTR:\n            case self::MODE_GCM:\n                return 'ctr';\n            case self::MODE_CFB:\n                return 'cfb';\n            case self::MODE_CFB8:\n                return 'cfb8';\n            case self::MODE_OFB:\n                return 'ofb';\n        }\n    }\n\n    /**\n     * Pad \"packets\".\n     *\n     * Block ciphers working by encrypting between their specified [$this->]block_size at a time\n     * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to\n     * pad the input so that it is of the proper length.\n     *\n     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH,\n     * where \"packets\" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping\n     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is\n     * transmitted separately)\n     *\n     * @see self::disablePadding()\n     */\n    public function enablePadding()\n    {\n        $this->padding = true;\n    }\n\n    /**\n     * Do not pad packets.\n     *\n     * @see self::enablePadding()\n     */\n    public function disablePadding()\n    {\n        $this->padding = false;\n    }\n\n    /**\n     * Treat consecutive \"packets\" as if they are a continuous buffer.\n     *\n     * Say you have a 32-byte plaintext $plaintext.  Using the default behavior, the two following code snippets\n     * will yield different outputs:\n     *\n     * <code>\n     *    echo $rijndael->encrypt(substr($plaintext,  0, 16));\n     *    echo $rijndael->encrypt(substr($plaintext, 16, 16));\n     * </code>\n     * <code>\n     *    echo $rijndael->encrypt($plaintext);\n     * </code>\n     *\n     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates\n     * another, as demonstrated with the following:\n     *\n     * <code>\n     *    $rijndael->encrypt(substr($plaintext, 0, 16));\n     *    echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));\n     * </code>\n     * <code>\n     *    echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));\n     * </code>\n     *\n     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different\n     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /\n     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.\n     *\n     * Put another way, when the continuous buffer is enabled, the state of the \\phpseclib3\\Crypt\\*() object changes after each\n     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that\n     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),\n     * however, they are also less intuitive and more likely to cause you problems.\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see self::disableContinuousBuffer()\n     */\n    public function enableContinuousBuffer()\n    {\n        if ($this->mode == self::MODE_ECB) {\n            return;\n        }\n\n        if ($this->mode == self::MODE_GCM) {\n            throw new \\BadMethodCallException('This mode does not run in continuous mode');\n        }\n\n        $this->continuousBuffer = true;\n\n        $this->setEngine();\n    }\n\n    /**\n     * Treat consecutive packets as if they are a discontinuous buffer.\n     *\n     * The default behavior.\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see self::enableContinuousBuffer()\n     */\n    public function disableContinuousBuffer()\n    {\n        if ($this->mode == self::MODE_ECB) {\n            return;\n        }\n        if (!$this->continuousBuffer) {\n            return;\n        }\n\n        $this->continuousBuffer = false;\n\n        $this->setEngine();\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * @see self::__construct()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        switch ($engine) {\n            case self::ENGINE_OPENSSL:\n                $this->openssl_emulate_ctr = false;\n                $result = $this->cipher_name_openssl &&\n                          extension_loaded('openssl');\n                if (!$result) {\n                    return false;\n                }\n\n                $methods = openssl_get_cipher_methods();\n                if (in_array($this->cipher_name_openssl, $methods)) {\n                    return true;\n                }\n                // not all of openssl's symmetric cipher's support ctr. for those\n                // that don't we'll emulate it\n                switch ($this->mode) {\n                    case self::MODE_CTR:\n                        if (in_array($this->cipher_name_openssl_ecb, $methods)) {\n                            $this->openssl_emulate_ctr = true;\n                            return true;\n                        }\n                }\n                return false;\n            case self::ENGINE_MCRYPT:\n                set_error_handler(function () {\n                });\n                $result = $this->cipher_name_mcrypt &&\n                          extension_loaded('mcrypt') &&\n                          in_array($this->cipher_name_mcrypt, mcrypt_list_algorithms());\n                restore_error_handler();\n                return $result;\n            case self::ENGINE_EVAL:\n                return method_exists($this, 'setupInlineCrypt');\n            case self::ENGINE_INTERNAL:\n                return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * @see self::__construct()\n     * @param string $engine\n     * @return bool\n     */\n    public function isValidEngine($engine)\n    {\n        static $reverseMap;\n        if (!isset($reverseMap)) {\n            $reverseMap = array_map('strtolower', self::ENGINE_MAP);\n            $reverseMap = array_flip($reverseMap);\n        }\n        $engine = strtolower($engine);\n        if (!isset($reverseMap[$engine])) {\n            return false;\n        }\n\n        return $this->isValidEngineHelper($reverseMap[$engine]);\n    }\n\n    /**\n     * Sets the preferred crypt engine\n     *\n     * Currently, $engine could be:\n     *\n     * - libsodium[very fast]\n     *\n     * - OpenSSL  [very fast]\n     *\n     * - mcrypt   [fast]\n     *\n     * - Eval     [slow]\n     *\n     * - PHP      [slowest]\n     *\n     * If the preferred crypt engine is not available the fastest available one will be used\n     *\n     * @see self::__construct()\n     * @param string $engine\n     */\n    public function setPreferredEngine($engine)\n    {\n        static $reverseMap;\n        if (!isset($reverseMap)) {\n            $reverseMap = array_map('strtolower', self::ENGINE_MAP);\n            $reverseMap = array_flip($reverseMap);\n        }\n        $engine = is_string($engine) ? strtolower($engine) : '';\n        $this->preferredEngine = isset($reverseMap[$engine]) ? $reverseMap[$engine] : self::ENGINE_LIBSODIUM;\n\n        $this->setEngine();\n    }\n\n    /**\n     * Returns the engine currently being utilized\n     *\n     * @see self::setEngine()\n     */\n    public function getEngine()\n    {\n        return self::ENGINE_MAP[$this->engine];\n    }\n\n    /**\n     * Sets the engine as appropriate\n     *\n     * @see self::__construct()\n     */\n    protected function setEngine()\n    {\n        $this->engine = null;\n\n        $candidateEngines = [\n            self::ENGINE_LIBSODIUM,\n            self::ENGINE_OPENSSL_GCM,\n            self::ENGINE_OPENSSL,\n            self::ENGINE_MCRYPT,\n            self::ENGINE_EVAL\n        ];\n        if (isset($this->preferredEngine)) {\n            $temp = [$this->preferredEngine];\n            $candidateEngines = array_merge(\n                $temp,\n                array_diff($candidateEngines, $temp)\n            );\n        }\n        foreach ($candidateEngines as $engine) {\n            if ($this->isValidEngineHelper($engine)) {\n                $this->engine = $engine;\n                break;\n            }\n        }\n        if (!$this->engine) {\n            $this->engine = self::ENGINE_INTERNAL;\n        }\n\n        if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) {\n            set_error_handler(function () {\n            });\n            // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,\n            // (re)open them with the module named in $this->cipher_name_mcrypt\n            mcrypt_module_close($this->enmcrypt);\n            mcrypt_module_close($this->demcrypt);\n            $this->enmcrypt = null;\n            $this->demcrypt = null;\n\n            if ($this->ecb) {\n                mcrypt_module_close($this->ecb);\n                $this->ecb = null;\n            }\n            restore_error_handler();\n        }\n\n        $this->changed = $this->nonIVChanged = true;\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * Note: Must be extended by the child \\phpseclib3\\Crypt\\* class\n     *\n     * @param string $in\n     * @return string\n     */\n    abstract protected function encryptBlock($in);\n\n    /**\n     * Decrypts a block\n     *\n     * Note: Must be extended by the child \\phpseclib3\\Crypt\\* class\n     *\n     * @param string $in\n     * @return string\n     */\n    abstract protected function decryptBlock($in);\n\n    /**\n     * Setup the key (expansion)\n     *\n     * Only used if $engine == self::ENGINE_INTERNAL\n     *\n     * Note: Must extend by the child \\phpseclib3\\Crypt\\* class\n     *\n     * @see self::setup()\n     */\n    abstract protected function setupKey();\n\n    /**\n     * Setup the self::ENGINE_INTERNAL $engine\n     *\n     * (re)init, if necessary, the internal cipher $engine and flush all $buffers\n     * Used (only) if $engine == self::ENGINE_INTERNAL\n     *\n     * _setup() will be called each time if $changed === true\n     * typically this happens when using one or more of following public methods:\n     *\n     * - setKey()\n     *\n     * - setIV()\n     *\n     * - disableContinuousBuffer()\n     *\n     * - First run of encrypt() / decrypt() with no init-settings\n     *\n     * {@internal setup() is always called before en/decryption.}\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see self::setKey()\n     * @see self::setIV()\n     * @see self::disableContinuousBuffer()\n     */\n    protected function setup()\n    {\n        if (!$this->changed) {\n            return;\n        }\n\n        $this->changed = false;\n\n        if ($this->usePoly1305 && !isset($this->poly1305Key) && method_exists($this, 'createPoly1305Key')) {\n            $this->createPoly1305Key();\n        }\n\n        $this->enbuffer = $this->debuffer = ['ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true];\n        //$this->newtag = $this->oldtag = false;\n\n        if ($this->usesNonce()) {\n            if ($this->nonce === false) {\n                throw new InsufficientSetupException('No nonce has been defined');\n            }\n            if ($this->mode == self::MODE_GCM && !in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {\n                $this->setupGCM();\n            }\n        } else {\n            $this->iv = $this->origIV;\n        }\n\n        if ($this->iv === false && !in_array($this->mode, [self::MODE_STREAM, self::MODE_ECB])) {\n            if ($this->mode != self::MODE_GCM || !in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {\n                throw new InsufficientSetupException('No IV has been defined');\n            }\n        }\n\n        if ($this->key === false) {\n            throw new InsufficientSetupException('No key has been defined');\n        }\n\n        $this->encryptIV = $this->decryptIV = $this->iv;\n\n        switch ($this->engine) {\n            case self::ENGINE_MCRYPT:\n                $this->enchanged = $this->dechanged = true;\n\n                set_error_handler(function () {\n                });\n\n                if (!isset($this->enmcrypt)) {\n                    static $mcrypt_modes = [\n                        self::MODE_CTR    => 'ctr',\n                        self::MODE_ECB    => MCRYPT_MODE_ECB,\n                        self::MODE_CBC    => MCRYPT_MODE_CBC,\n                        self::MODE_CFB    => 'ncfb',\n                        self::MODE_CFB8   => MCRYPT_MODE_CFB,\n                        self::MODE_OFB    => MCRYPT_MODE_NOFB,\n                        self::MODE_OFB8   => MCRYPT_MODE_OFB,\n                        self::MODE_STREAM => MCRYPT_MODE_STREAM,\n                    ];\n\n                    $this->demcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');\n                    $this->enmcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');\n\n                    // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()\n                    // to workaround mcrypt's broken ncfb implementation in buffered mode\n                    // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}\n                    if ($this->mode == self::MODE_CFB) {\n                        $this->ecb = mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');\n                    }\n                } // else should mcrypt_generic_deinit be called?\n\n                if ($this->mode == self::MODE_CFB) {\n                    mcrypt_generic_init($this->ecb, $this->key, str_repeat(\"\\0\", $this->block_size));\n                }\n\n                restore_error_handler();\n\n                break;\n            case self::ENGINE_INTERNAL:\n                $this->setupKey();\n                break;\n            case self::ENGINE_EVAL:\n                if ($this->nonIVChanged) {\n                    $this->setupKey();\n                    $this->setupInlineCrypt();\n                }\n        }\n\n        $this->nonIVChanged = false;\n    }\n\n    /**\n     * Pads a string\n     *\n     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.\n     * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to\n     * chr($this->block_size - (strlen($text) % $this->block_size)\n     *\n     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless\n     * and padding will, hence forth, be enabled.\n     *\n     * @see self::unpad()\n     * @param string $text\n     * @throws \\LengthException if padding is disabled and the plaintext's length is not a multiple of the block size\n     * @return string\n     */\n    protected function pad($text)\n    {\n        $length = strlen($text);\n\n        if (!$this->padding) {\n            if ($length % $this->block_size == 0) {\n                return $text;\n            } else {\n                throw new \\LengthException(\"The plaintext's length ($length) is not a multiple of the block size ({$this->block_size}). Try enabling padding.\");\n            }\n        }\n\n        $pad = $this->block_size - ($length % $this->block_size);\n\n        return str_pad($text, $length + $pad, chr($pad));\n    }\n\n    /**\n     * Unpads a string.\n     *\n     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong\n     * and false will be returned.\n     *\n     * @see self::pad()\n     * @param string $text\n     * @throws \\LengthException if the ciphertext's length is not a multiple of the block size\n     * @return string\n     */\n    protected function unpad($text)\n    {\n        if (!$this->padding) {\n            return $text;\n        }\n\n        $length = ord($text[strlen($text) - 1]);\n\n        if (!$length || $length > $this->block_size) {\n            throw new BadDecryptionException(\"The ciphertext has an invalid padding length ($length) compared to the block size ({$this->block_size})\");\n        }\n\n        return substr($text, 0, -$length);\n    }\n\n    /**\n     * Setup the performance-optimized function for de/encrypt()\n     *\n     * Stores the created (or existing) callback function-name\n     * in $this->inline_crypt\n     *\n     * Internally for phpseclib developers:\n     *\n     *     _setupInlineCrypt() would be called only if:\n     *\n     *     - $this->engine === self::ENGINE_EVAL\n     *\n     *     - each time on _setup(), after(!) _setupKey()\n     *\n     *\n     *     This ensures that _setupInlineCrypt() has always a\n     *     full ready2go initializated internal cipher $engine state\n     *     where, for example, the keys already expanded,\n     *     keys/block_size calculated and such.\n     *\n     *     It is, each time if called, the responsibility of _setupInlineCrypt():\n     *\n     *     - to set $this->inline_crypt to a valid and fully working callback function\n     *       as a (faster) replacement for encrypt() / decrypt()\n     *\n     *     - NOT to create unlimited callback functions (for memory reasons!)\n     *       no matter how often _setupInlineCrypt() would be called. At some\n     *       point of amount they must be generic re-useable.\n     *\n     *     - the code of _setupInlineCrypt() it self,\n     *       and the generated callback code,\n     *       must be, in following order:\n     *       - 100% safe\n     *       - 100% compatible to encrypt()/decrypt()\n     *       - using only php5+ features/lang-constructs/php-extensions if\n     *         compatibility (down to php4) or fallback is provided\n     *       - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)\n     *       - >= 10% faster than encrypt()/decrypt() [which is, by the way,\n     *         the reason for the existence of _setupInlineCrypt() :-)]\n     *       - memory-nice\n     *       - short (as good as possible)\n     *\n     * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.\n     *       - In case of using inline crypting, _setupInlineCrypt() must extend by the child \\phpseclib3\\Crypt\\* class.\n     *       - The following variable names are reserved:\n     *         - $_*  (all variable names prefixed with an underscore)\n     *         - $self (object reference to it self. Do not use $this, but $self instead)\n     *         - $in (the content of $in has to en/decrypt by the generated code)\n     *       - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only\n     *\n     * {@internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()}\n     *\n     * @see self::setup()\n     * @see self::createInlineCryptFunction()\n     * @see self::encrypt()\n     * @see self::decrypt()\n     */\n    //protected function setupInlineCrypt();\n\n    /**\n     * Creates the performance-optimized function for en/decrypt()\n     *\n     * Internally for phpseclib developers:\n     *\n     *    _createInlineCryptFunction():\n     *\n     *    - merge the $cipher_code [setup'ed by _setupInlineCrypt()]\n     *      with the current [$this->]mode of operation code\n     *\n     *    - create the $inline function, which called by encrypt() / decrypt()\n     *      as its replacement to speed up the en/decryption operations.\n     *\n     *    - return the name of the created $inline callback function\n     *\n     *    - used to speed up en/decryption\n     *\n     *\n     *\n     *    The main reason why can speed up things [up to 50%] this way are:\n     *\n     *    - using variables more effective then regular.\n     *      (ie no use of expensive arrays but integers $k_0, $k_1 ...\n     *      or even, for example, the pure $key[] values hardcoded)\n     *\n     *    - avoiding 1000's of function calls of ie _encryptBlock()\n     *      but inlining the crypt operations.\n     *      in the mode of operation for() loop.\n     *\n     *    - full loop unroll the (sometimes key-dependent) rounds\n     *      avoiding this way ++$i counters and runtime-if's etc...\n     *\n     *    The basic code architectur of the generated $inline en/decrypt()\n     *    lambda function, in pseudo php, is:\n     *\n     *    <code>\n     *    +----------------------------------------------------------------------------------------------+\n     *    | callback $inline = create_function:                                                          |\n     *    | lambda_function_0001_crypt_ECB($action, $text)                                               |\n     *    | {                                                                                            |\n     *    |     INSERT PHP CODE OF:                                                                      |\n     *    |     $cipher_code['init_crypt'];                  // general init code.                       |\n     *    |                                                  // ie: $sbox'es declarations used for       |\n     *    |                                                  //     encrypt and decrypt'ing.             |\n     *    |                                                                                              |\n     *    |     switch ($action) {                                                                       |\n     *    |         case 'encrypt':                                                                      |\n     *    |             INSERT PHP CODE OF:                                                              |\n     *    |             $cipher_code['init_encrypt'];       // encrypt sepcific init code.               |\n     *    |                                                    ie: specified $key or $box                |\n     *    |                                                        declarations for encrypt'ing.         |\n     *    |                                                                                              |\n     *    |             foreach ($ciphertext) {                                                          |\n     *    |                 $in = $block_size of $ciphertext;                                            |\n     *    |                                                                                              |\n     *    |                 INSERT PHP CODE OF:                                                          |\n     *    |                 $cipher_code['encrypt_block'];  // encrypt's (string) $in, which is always:  |\n     *    |                                                 // strlen($in) == $this->block_size          |\n     *    |                                                 // here comes the cipher algorithm in action |\n     *    |                                                 // for encryption.                           |\n     *    |                                                 // $cipher_code['encrypt_block'] has to      |\n     *    |                                                 // encrypt the content of the $in variable   |\n     *    |                                                                                              |\n     *    |                 $plaintext .= $in;                                                           |\n     *    |             }                                                                                |\n     *    |             return $plaintext;                                                               |\n     *    |                                                                                              |\n     *    |         case 'decrypt':                                                                      |\n     *    |             INSERT PHP CODE OF:                                                              |\n     *    |             $cipher_code['init_decrypt'];       // decrypt sepcific init code                |\n     *    |                                                    ie: specified $key or $box                |\n     *    |                                                        declarations for decrypt'ing.         |\n     *    |             foreach ($plaintext) {                                                           |\n     *    |                 $in = $block_size of $plaintext;                                             |\n     *    |                                                                                              |\n     *    |                 INSERT PHP CODE OF:                                                          |\n     *    |                 $cipher_code['decrypt_block'];  // decrypt's (string) $in, which is always   |\n     *    |                                                 // strlen($in) == $this->block_size          |\n     *    |                                                 // here comes the cipher algorithm in action |\n     *    |                                                 // for decryption.                           |\n     *    |                                                 // $cipher_code['decrypt_block'] has to      |\n     *    |                                                 // decrypt the content of the $in variable   |\n     *    |                 $ciphertext .= $in;                                                          |\n     *    |             }                                                                                |\n     *    |             return $ciphertext;                                                              |\n     *    |     }                                                                                        |\n     *    | }                                                                                            |\n     *    +----------------------------------------------------------------------------------------------+\n     *    </code>\n     *\n     *    See also the \\phpseclib3\\Crypt\\*::_setupInlineCrypt()'s for\n     *    productive inline $cipher_code's how they works.\n     *\n     *    Structure of:\n     *    <code>\n     *    $cipher_code = [\n     *        'init_crypt'    => (string) '', // optional\n     *        'init_encrypt'  => (string) '', // optional\n     *        'init_decrypt'  => (string) '', // optional\n     *        'encrypt_block' => (string) '', // required\n     *        'decrypt_block' => (string) ''  // required\n     *    ];\n     *    </code>\n     *\n     * @see self::setupInlineCrypt()\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @param array $cipher_code\n     * @return string (the name of the created callback function)\n     */\n    protected function createInlineCryptFunction($cipher_code)\n    {\n        $block_size = $this->block_size;\n\n        // optional\n        $init_crypt    = isset($cipher_code['init_crypt'])    ? $cipher_code['init_crypt']    : '';\n        $init_encrypt  = isset($cipher_code['init_encrypt'])  ? $cipher_code['init_encrypt']  : '';\n        $init_decrypt  = isset($cipher_code['init_decrypt'])  ? $cipher_code['init_decrypt']  : '';\n        // required\n        $encrypt_block = $cipher_code['encrypt_block'];\n        $decrypt_block = $cipher_code['decrypt_block'];\n\n        // Generating mode of operation inline code,\n        // merged with the $cipher_code algorithm\n        // for encrypt- and decryption.\n        switch ($this->mode) {\n            case self::MODE_ECB:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_plaintext_len = strlen($_text);\n\n                    for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {\n                        $in = substr($_text, $_i, ' . $block_size . ');\n                        ' . $encrypt_block . '\n                        $_ciphertext.= $in;\n                    }\n\n                    return $_ciphertext;\n                    ';\n\n                $decrypt = $init_decrypt . '\n                    $_plaintext = \"\";\n                    $_text = str_pad($_text, strlen($_text) + (' . $block_size . ' - strlen($_text) % ' . $block_size . ') % ' . $block_size . ', chr(0));\n                    $_ciphertext_len = strlen($_text);\n\n                    for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {\n                        $in = substr($_text, $_i, ' . $block_size . ');\n                        ' . $decrypt_block . '\n                        $_plaintext.= $in;\n                    }\n\n                    return $this->unpad($_plaintext);\n                    ';\n                break;\n            case self::MODE_CTR:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_plaintext_len = strlen($_text);\n                    $_xor = $this->encryptIV;\n                    $_buffer = &$this->enbuffer;\n                    if (strlen($_buffer[\"ciphertext\"])) {\n                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {\n                            $_block = substr($_text, $_i, ' . $block_size . ');\n                            if (strlen($_block) > strlen($_buffer[\"ciphertext\"])) {\n                                $in = $_xor;\n                                ' . $encrypt_block . '\n                                \\phpseclib3\\Common\\Functions\\Strings::increment_str($_xor);\n                                $_buffer[\"ciphertext\"].= $in;\n                            }\n                            $_key = \\phpseclib3\\Common\\Functions\\Strings::shift($_buffer[\"ciphertext\"], ' . $block_size . ');\n                            $_ciphertext.= $_block ^ $_key;\n                        }\n                    } else {\n                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {\n                            $_block = substr($_text, $_i, ' . $block_size . ');\n                            $in = $_xor;\n                            ' . $encrypt_block . '\n                            \\phpseclib3\\Common\\Functions\\Strings::increment_str($_xor);\n                            $_key = $in;\n                            $_ciphertext.= $_block ^ $_key;\n                        }\n                    }\n                    if ($this->continuousBuffer) {\n                        $this->encryptIV = $_xor;\n                        if ($_start = $_plaintext_len % ' . $block_size . ') {\n                            $_buffer[\"ciphertext\"] = substr($_key, $_start) . $_buffer[\"ciphertext\"];\n                        }\n                    }\n\n                    return $_ciphertext;\n                ';\n\n                $decrypt = $init_encrypt . '\n                    $_plaintext = \"\";\n                    $_ciphertext_len = strlen($_text);\n                    $_xor = $this->decryptIV;\n                    $_buffer = &$this->debuffer;\n\n                    if (strlen($_buffer[\"ciphertext\"])) {\n                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {\n                            $_block = substr($_text, $_i, ' . $block_size . ');\n                            if (strlen($_block) > strlen($_buffer[\"ciphertext\"])) {\n                                $in = $_xor;\n                                ' . $encrypt_block . '\n                                \\phpseclib3\\Common\\Functions\\Strings::increment_str($_xor);\n                                $_buffer[\"ciphertext\"].= $in;\n                            }\n                            $_key = \\phpseclib3\\Common\\Functions\\Strings::shift($_buffer[\"ciphertext\"], ' . $block_size . ');\n                            $_plaintext.= $_block ^ $_key;\n                        }\n                    } else {\n                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {\n                            $_block = substr($_text, $_i, ' . $block_size . ');\n                            $in = $_xor;\n                            ' . $encrypt_block . '\n                            \\phpseclib3\\Common\\Functions\\Strings::increment_str($_xor);\n                            $_key = $in;\n                            $_plaintext.= $_block ^ $_key;\n                        }\n                    }\n                    if ($this->continuousBuffer) {\n                        $this->decryptIV = $_xor;\n                        if ($_start = $_ciphertext_len % ' . $block_size . ') {\n                            $_buffer[\"ciphertext\"] = substr($_key, $_start) . $_buffer[\"ciphertext\"];\n                        }\n                    }\n\n                    return $_plaintext;\n                    ';\n                break;\n            case self::MODE_CFB:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_buffer = &$this->enbuffer;\n\n                    if ($this->continuousBuffer) {\n                        $_iv = &$this->encryptIV;\n                        $_pos = &$_buffer[\"pos\"];\n                    } else {\n                        $_iv = $this->encryptIV;\n                        $_pos = 0;\n                    }\n                    $_len = strlen($_text);\n                    $_i = 0;\n                    if ($_pos) {\n                        $_orig_pos = $_pos;\n                        $_max = ' . $block_size . ' - $_pos;\n                        if ($_len >= $_max) {\n                            $_i = $_max;\n                            $_len-= $_max;\n                            $_pos = 0;\n                        } else {\n                            $_i = $_len;\n                            $_pos+= $_len;\n                            $_len = 0;\n                        }\n                        $_ciphertext = substr($_iv, $_orig_pos) ^ $_text;\n                        $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);\n                    }\n                    while ($_len >= ' . $block_size . ') {\n                        $in = $_iv;\n                        ' . $encrypt_block . ';\n                        $_iv = $in ^ substr($_text, $_i, ' . $block_size . ');\n                        $_ciphertext.= $_iv;\n                        $_len-= ' . $block_size . ';\n                        $_i+= ' . $block_size . ';\n                    }\n                    if ($_len) {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_iv = $in;\n                        $_block = $_iv ^ substr($_text, $_i);\n                        $_iv = substr_replace($_iv, $_block, 0, $_len);\n                        $_ciphertext.= $_block;\n                        $_pos = $_len;\n                    }\n                    return $_ciphertext;\n                ';\n\n                $decrypt = $init_encrypt . '\n                    $_plaintext = \"\";\n                    $_buffer = &$this->debuffer;\n\n                    if ($this->continuousBuffer) {\n                        $_iv = &$this->decryptIV;\n                        $_pos = &$_buffer[\"pos\"];\n                    } else {\n                        $_iv = $this->decryptIV;\n                        $_pos = 0;\n                    }\n                    $_len = strlen($_text);\n                    $_i = 0;\n                    if ($_pos) {\n                        $_orig_pos = $_pos;\n                        $_max = ' . $block_size . ' - $_pos;\n                        if ($_len >= $_max) {\n                            $_i = $_max;\n                            $_len-= $_max;\n                            $_pos = 0;\n                        } else {\n                            $_i = $_len;\n                            $_pos+= $_len;\n                            $_len = 0;\n                        }\n                        $_plaintext = substr($_iv, $_orig_pos) ^ $_text;\n                        $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);\n                    }\n                    while ($_len >= ' . $block_size . ') {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_iv = $in;\n                        $cb = substr($_text, $_i, ' . $block_size . ');\n                        $_plaintext.= $_iv ^ $cb;\n                        $_iv = $cb;\n                        $_len-= ' . $block_size . ';\n                        $_i+= ' . $block_size . ';\n                    }\n                    if ($_len) {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_iv = $in;\n                        $_plaintext.= $_iv ^ substr($_text, $_i);\n                        $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);\n                        $_pos = $_len;\n                    }\n\n                    return $_plaintext;\n                    ';\n                break;\n            case self::MODE_CFB8:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_len = strlen($_text);\n                    $_iv = $this->encryptIV;\n\n                    for ($_i = 0; $_i < $_len; ++$_i) {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_ciphertext .= ($_c = $_text[$_i] ^ $in);\n                        $_iv = substr($_iv, 1) . $_c;\n                    }\n\n                    if ($this->continuousBuffer) {\n                        if ($_len >= ' . $block_size . ') {\n                            $this->encryptIV = substr($_ciphertext, -' . $block_size . ');\n                        } else {\n                            $this->encryptIV = substr($this->encryptIV, $_len - ' . $block_size . ') . substr($_ciphertext, -$_len);\n                        }\n                    }\n\n                    return $_ciphertext;\n                    ';\n                $decrypt = $init_encrypt . '\n                    $_plaintext = \"\";\n                    $_len = strlen($_text);\n                    $_iv = $this->decryptIV;\n\n                    for ($_i = 0; $_i < $_len; ++$_i) {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_plaintext .= $_text[$_i] ^ $in;\n                        $_iv = substr($_iv, 1) . $_text[$_i];\n                    }\n\n                    if ($this->continuousBuffer) {\n                        if ($_len >= ' . $block_size . ') {\n                            $this->decryptIV = substr($_text, -' . $block_size . ');\n                        } else {\n                            $this->decryptIV = substr($this->decryptIV, $_len - ' . $block_size . ') . substr($_text, -$_len);\n                        }\n                    }\n\n                    return $_plaintext;\n                    ';\n                break;\n            case self::MODE_OFB8:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_len = strlen($_text);\n                    $_iv = $this->encryptIV;\n\n                    for ($_i = 0; $_i < $_len; ++$_i) {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_ciphertext.= $_text[$_i] ^ $in;\n                        $_iv = substr($_iv, 1) . $in[0];\n                    }\n\n                    if ($this->continuousBuffer) {\n                        $this->encryptIV = $_iv;\n                    }\n\n                    return $_ciphertext;\n                    ';\n                $decrypt = $init_encrypt . '\n                    $_plaintext = \"\";\n                    $_len = strlen($_text);\n                    $_iv = $this->decryptIV;\n\n                    for ($_i = 0; $_i < $_len; ++$_i) {\n                        $in = $_iv;\n                        ' . $encrypt_block . '\n                        $_plaintext.= $_text[$_i] ^ $in;\n                        $_iv = substr($_iv, 1) . $in[0];\n                    }\n\n                    if ($this->continuousBuffer) {\n                        $this->decryptIV = $_iv;\n                    }\n\n                    return $_plaintext;\n                    ';\n                break;\n            case self::MODE_OFB:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_plaintext_len = strlen($_text);\n                    $_xor = $this->encryptIV;\n                    $_buffer = &$this->enbuffer;\n\n                    if (strlen($_buffer[\"xor\"])) {\n                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {\n                            $_block = substr($_text, $_i, ' . $block_size . ');\n                            if (strlen($_block) > strlen($_buffer[\"xor\"])) {\n                                $in = $_xor;\n                                ' . $encrypt_block . '\n                                $_xor = $in;\n                                $_buffer[\"xor\"].= $_xor;\n                            }\n                            $_key = \\phpseclib3\\Common\\Functions\\Strings::shift($_buffer[\"xor\"], ' . $block_size . ');\n                            $_ciphertext.= $_block ^ $_key;\n                        }\n                    } else {\n                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {\n                            $in = $_xor;\n                            ' . $encrypt_block . '\n                            $_xor = $in;\n                            $_ciphertext.= substr($_text, $_i, ' . $block_size . ') ^ $_xor;\n                        }\n                        $_key = $_xor;\n                    }\n                    if ($this->continuousBuffer) {\n                        $this->encryptIV = $_xor;\n                        if ($_start = $_plaintext_len % ' . $block_size . ') {\n                             $_buffer[\"xor\"] = substr($_key, $_start) . $_buffer[\"xor\"];\n                        }\n                    }\n                    return $_ciphertext;\n                    ';\n\n                $decrypt = $init_encrypt . '\n                    $_plaintext = \"\";\n                    $_ciphertext_len = strlen($_text);\n                    $_xor = $this->decryptIV;\n                    $_buffer = &$this->debuffer;\n\n                    if (strlen($_buffer[\"xor\"])) {\n                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {\n                            $_block = substr($_text, $_i, ' . $block_size . ');\n                            if (strlen($_block) > strlen($_buffer[\"xor\"])) {\n                                $in = $_xor;\n                                ' . $encrypt_block . '\n                                $_xor = $in;\n                                $_buffer[\"xor\"].= $_xor;\n                            }\n                            $_key = \\phpseclib3\\Common\\Functions\\Strings::shift($_buffer[\"xor\"], ' . $block_size . ');\n                            $_plaintext.= $_block ^ $_key;\n                        }\n                    } else {\n                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {\n                            $in = $_xor;\n                            ' . $encrypt_block . '\n                            $_xor = $in;\n                            $_plaintext.= substr($_text, $_i, ' . $block_size . ') ^ $_xor;\n                        }\n                        $_key = $_xor;\n                    }\n                    if ($this->continuousBuffer) {\n                        $this->decryptIV = $_xor;\n                        if ($_start = $_ciphertext_len % ' . $block_size . ') {\n                             $_buffer[\"xor\"] = substr($_key, $_start) . $_buffer[\"xor\"];\n                        }\n                    }\n                    return $_plaintext;\n                    ';\n                break;\n            case self::MODE_STREAM:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    ' . $encrypt_block . '\n                    return $_ciphertext;\n                    ';\n                $decrypt = $init_decrypt . '\n                    $_plaintext = \"\";\n                    ' . $decrypt_block . '\n                    return $_plaintext;\n                    ';\n                break;\n            // case self::MODE_CBC:\n            default:\n                $encrypt = $init_encrypt . '\n                    $_ciphertext = \"\";\n                    $_plaintext_len = strlen($_text);\n\n                    $in = $this->encryptIV;\n\n                    for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {\n                        $in = substr($_text, $_i, ' . $block_size . ') ^ $in;\n                        ' . $encrypt_block . '\n                        $_ciphertext.= $in;\n                    }\n\n                    if ($this->continuousBuffer) {\n                        $this->encryptIV = $in;\n                    }\n\n                    return $_ciphertext;\n                    ';\n\n                $decrypt = $init_decrypt . '\n                    $_plaintext = \"\";\n                    $_text = str_pad($_text, strlen($_text) + (' . $block_size . ' - strlen($_text) % ' . $block_size . ') % ' . $block_size . ', chr(0));\n                    $_ciphertext_len = strlen($_text);\n\n                    $_iv = $this->decryptIV;\n\n                    for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {\n                        $in = $_block = substr($_text, $_i, ' . $block_size . ');\n                        ' . $decrypt_block . '\n                        $_plaintext.= $in ^ $_iv;\n                        $_iv = $_block;\n                    }\n\n                    if ($this->continuousBuffer) {\n                        $this->decryptIV = $_iv;\n                    }\n\n                    return $this->unpad($_plaintext);\n                    ';\n                break;\n        }\n\n        // Before discrediting this, please read the following:\n        // @see https://github.com/phpseclib/phpseclib/issues/1293\n        // @see https://github.com/phpseclib/phpseclib/pull/1143\n        eval('$func = function ($_action, $_text) { ' . $init_crypt . 'if ($_action == \"encrypt\") { ' . $encrypt . ' } else { ' . $decrypt . ' }};');\n\n        return \\Closure::bind($func, $this, static::class);\n    }\n\n    /**\n     * Convert float to int\n     *\n     * On ARM CPUs converting floats to ints doesn't always work\n     *\n     * @param string $x\n     * @return int\n     */\n    protected static function safe_intval($x)\n    {\n        if (is_int($x)) {\n            return $x;\n        }\n\n        if (self::$use_reg_intval) {\n            return PHP_INT_SIZE == 4 && PHP_VERSION_ID >= 80100 ? intval($x) : $x;\n        }\n\n        return (fmod($x, 0x80000000) & 0x7FFFFFFF) |\n            ((fmod(floor($x / 0x80000000), 2) & 1) << 31);\n    }\n\n    /**\n     * eval()'able string for in-line float to int\n     *\n     * @return string\n     */\n    protected static function safe_intval_inline()\n    {\n        if (self::$use_reg_intval) {\n            return PHP_INT_SIZE == 4 && PHP_VERSION_ID >= 80100 ? 'intval(%s)' : '%s';\n        }\n\n        $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';\n        return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';\n    }\n\n    /**\n     * Sets up GCM parameters\n     *\n     * See steps 1-2 of https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=23\n     * for more info\n     *\n     */\n    private function setupGCM()\n    {\n        // don't keep on re-calculating $this->h\n        if (!$this->h || $this->hKey != $this->key) {\n            $cipher = new static('ecb');\n            $cipher->setKey($this->key);\n            $cipher->disablePadding();\n\n            $this->h = self::$gcmField->newInteger(\n                Strings::switchEndianness($cipher->encrypt(\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\"))\n            );\n            $this->hKey = $this->key;\n        }\n\n        if (strlen($this->nonce) == 12) {\n            $this->iv = $this->nonce . \"\\0\\0\\0\\1\";\n        } else {\n            $this->iv = $this->ghash(\n                self::nullPad128($this->nonce) . str_repeat(\"\\0\", 8) . self::len64($this->nonce)\n            );\n        }\n    }\n\n    /**\n     * Performs GHASH operation\n     *\n     * See https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=20\n     * for more info\n     *\n     * @see self::decrypt()\n     * @see self::encrypt()\n     * @param string $x\n     * @return string\n     */\n    private function ghash($x)\n    {\n        $h = $this->h;\n        $y = [\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\"];\n        $x = str_split($x, 16);\n        $n = 0;\n        // the switchEndianness calls are necessary because the multiplication algorithm in BinaryField/Integer\n        // interprets strings as polynomials in big endian order whereas in GCM they're interpreted in little\n        // endian order per https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=19.\n        // big endian order is what binary field elliptic curves use per http://www.secg.org/sec1-v2.pdf#page=18.\n\n        // we could switchEndianness here instead of in the while loop but doing so in the while loop seems like it\n        // might be slightly more performant\n        //$x = Strings::switchEndianness($x);\n        foreach ($x as $xn) {\n            $xn = Strings::switchEndianness($xn);\n            $t = $y[$n] ^ $xn;\n            $temp = self::$gcmField->newInteger($t);\n            $y[++$n] = $temp->multiply($h)->toBytes();\n            $y[$n] = substr($y[$n], 1);\n        }\n        $y[$n] = Strings::switchEndianness($y[$n]);\n        return $y[$n];\n    }\n\n    /**\n     * Returns the bit length of a string in a packed format\n     *\n     * @see self::decrypt()\n     * @see self::encrypt()\n     * @see self::setupGCM()\n     * @param string $str\n     * @return string\n     */\n    private static function len64($str)\n    {\n        return \"\\0\\0\\0\\0\" . pack('N', 8 * strlen($str));\n    }\n\n    /**\n     * NULL pads a string to be a multiple of 128\n     *\n     * @see self::decrypt()\n     * @see self::encrypt()\n     * @see self::setupGCM()\n     * @param string $str\n     * @return string\n     */\n    protected static function nullPad128($str)\n    {\n        $len = strlen($str);\n        return $str . str_repeat(\"\\0\", 16 * ceil($len / 16) - $len);\n    }\n\n    /**\n     * Calculates Poly1305 MAC\n     *\n     * On my system ChaCha20, with libsodium, takes 0.5s. With this custom Poly1305 implementation\n     * it takes 1.2s.\n     *\n     * @see self::decrypt()\n     * @see self::encrypt()\n     * @param string $text\n     * @return string\n     */\n    protected function poly1305($text)\n    {\n        $s = $this->poly1305Key; // strlen($this->poly1305Key) == 32\n        $r = Strings::shift($s, 16);\n        $r = strrev($r);\n        $r &= \"\\x0f\\xff\\xff\\xfc\\x0f\\xff\\xff\\xfc\\x0f\\xff\\xff\\xfc\\x0f\\xff\\xff\\xff\";\n        $s = strrev($s);\n\n        $r = self::$poly1305Field->newInteger(new BigInteger($r, 256));\n        $s = self::$poly1305Field->newInteger(new BigInteger($s, 256));\n        $a = self::$poly1305Field->newInteger(new BigInteger());\n\n        $blocks = str_split($text, 16);\n        foreach ($blocks as $block) {\n            $n = strrev($block . chr(1));\n            $n = self::$poly1305Field->newInteger(new BigInteger($n, 256));\n            $a = $a->add($n);\n            $a = $a->multiply($r);\n        }\n        $r = $a->toBigInteger()->add($s->toBigInteger());\n        $mask = \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\";\n        return strrev($r->toBytes()) & $mask;\n    }\n\n    /**\n     * Return the mode\n     *\n     * You can do $obj instanceof AES or whatever to get the cipher but you can't do that to get the mode\n     *\n     * @return string\n     */\n    public function getMode()\n    {\n        return array_flip(self::MODE_MAP)[$this->mode];\n    }\n\n    /**\n     * Is the continuous buffer enabled?\n     *\n     * @return boolean\n     */\n    public function continuousBufferEnabled()\n    {\n        return $this->continuousBuffer;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/Fingerprint.php",
    "content": "<?php\n\n/**\n * Fingerprint Trait for Public Keys\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Traits;\n\nuse phpseclib3\\Crypt\\Hash;\n\n/**\n * Fingerprint Trait for Private Keys\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\ntrait Fingerprint\n{\n    /**\n     * Returns the public key's fingerprint\n     *\n     * The public key's fingerprint is returned, which is equivalent to running `ssh-keygen -lf rsa.pub`. If there is\n     * no public key currently loaded, false is returned.\n     * Example output (md5): \"c1:b1:30:29:d7:b8:de:6c:97:77:10:d7:46:41:63:87\" (as specified by RFC 4716)\n     *\n     * @param string $algorithm The hashing algorithm to be used. Valid options are 'md5' and 'sha256'. False is returned\n     * for invalid values.\n     * @return mixed\n     */\n    public function getFingerprint($algorithm = 'md5')\n    {\n        $type = self::validatePlugin('Keys', 'OpenSSH', 'savePublicKey');\n        if ($type === false) {\n            return false;\n        }\n        $key = $this->toString('OpenSSH', ['binary' => true]);\n        if ($key === false) {\n            return false;\n        }\n        switch ($algorithm) {\n            case 'sha256':\n                $hash = new Hash('sha256');\n                $base = base64_encode($hash->hash($key));\n                return substr($base, 0, strlen($base) - 1);\n            case 'md5':\n                return substr(chunk_split(md5($key), 2, ':'), 0, -1);\n            default:\n                return false;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PasswordProtected.php",
    "content": "<?php\n\n/**\n * Password Protected Trait for Private Keys\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\Common\\Traits;\n\n/**\n * Password Protected Trait for Private Keys\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\ntrait PasswordProtected\n{\n    /**\n     * Password\n     *\n     * @var string|bool\n     */\n    private $password = false;\n\n    /**\n     * Sets the password\n     *\n     * Private keys can be encrypted with a password.  To unset the password, pass in the empty string or false.\n     * Or rather, pass in $password such that empty($password) && !is_string($password) is true.\n     *\n     * @see self::createKey()\n     * @see self::load()\n     * @param string|bool $password\n     */\n    public function withPassword($password = false)\n    {\n        $new = clone $this;\n        $new->password = $password;\n        return $new;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of DES.\n *\n * Uses mcrypt, if available, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * Useful resources are as follows:\n *\n *  - {@link http://en.wikipedia.org/wiki/DES_supplementary_material Wikipedia: DES supplementary material}\n *  - {@link http://www.itl.nist.gov/fipspubs/fip46-2.htm FIPS 46-2 - (DES), Data Encryption Standard}\n *  - {@link http://www.cs.eku.edu/faculty/styer/460/Encrypt/JS-DES.html JavaScript DES Example}\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $des = new \\phpseclib3\\Crypt\\DES('ctr');\n *\n *    $des->setKey('abcdefgh');\n *\n *    $size = 10 * 1024;\n *    $plaintext = '';\n *    for ($i = 0; $i < $size; $i++) {\n *        $plaintext.= 'a';\n *    }\n *\n *    echo $des->decrypt($des->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\BlockCipher;\nuse phpseclib3\\Exception\\BadModeException;\n\n/**\n * Pure-PHP implementation of DES.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass DES extends BlockCipher\n{\n    /**\n     * Contains $keys[self::ENCRYPT]\n     *\n     * @see \\phpseclib3\\Crypt\\DES::setupKey()\n     * @see \\phpseclib3\\Crypt\\DES::processBlock()\n     */\n    const ENCRYPT = 0;\n    /**\n     * Contains $keys[self::DECRYPT]\n     *\n     * @see \\phpseclib3\\Crypt\\DES::setupKey()\n     * @see \\phpseclib3\\Crypt\\DES::processBlock()\n     */\n    const DECRYPT = 1;\n\n    /**\n     * Block Length of the cipher\n     *\n     * @see Common\\SymmetricKey::block_size\n     * @var int\n     */\n    protected $block_size = 8;\n\n    /**\n     * Key Length (in bytes)\n     *\n     * @see Common\\SymmetricKey::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 8;\n\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'des';\n\n    /**\n     * The OpenSSL names of the cipher / modes\n     *\n     * @see Common\\SymmetricKey::openssl_mode_names\n     * @var array\n     */\n    protected $openssl_mode_names = [\n        self::MODE_ECB => 'des-ecb',\n        self::MODE_CBC => 'des-cbc',\n        self::MODE_CFB => 'des-cfb',\n        self::MODE_OFB => 'des-ofb'\n        // self::MODE_CTR is undefined for DES\n    ];\n\n    /**\n     * Optimizing value while CFB-encrypting\n     *\n     * @see Common\\SymmetricKey::cfb_init_len\n     * @var int\n     */\n    protected $cfb_init_len = 500;\n\n    /**\n     * Switch for DES/3DES encryption\n     *\n     * Used only if $engine == self::ENGINE_INTERNAL\n     *\n     * @see self::setupKey()\n     * @see self::processBlock()\n     * @var int\n     */\n    protected $des_rounds = 1;\n\n    /**\n     * max possible size of $key\n     *\n     * @see self::setKey()\n     * @var string\n     */\n    protected $key_length_max = 8;\n\n    /**\n     * The Key Schedule\n     *\n     * @see self::setupKey()\n     * @var array\n     */\n    private $keys;\n\n    /**\n     * Key Cache \"key\"\n     *\n     * @see self::setupKey()\n     * @var array\n     */\n    private $kl;\n\n    /**\n     * Shuffle table.\n     *\n     * For each byte value index, the entry holds an 8-byte string\n     * with each byte containing all bits in the same state as the\n     * corresponding bit in the index value.\n     *\n     * @see self::processBlock()\n     * @see self::setupKey()\n     * @var array\n     */\n    protected static $shuffle = [\n        \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\", \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\x00\", \"\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\x00\\xFF\\x00\\x00\", \"\\x00\\x00\\x00\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\", \"\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\xFF\\x00\\x00\\x00\", \"\\x00\\x00\\x00\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\xFF\\x00\\xFF\\x00\", \"\\x00\\x00\\x00\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\", \"\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\x00\\xFF\\xFF\\xFF\\x00\", \"\\x00\\x00\\x00\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\x00\\x00\\x00\\x00\", \"\\x00\\x00\\x00\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\x00\\x00\\xFF\\x00\", \"\\x00\\x00\\x00\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\x00\\xFF\\x00\\x00\", \"\\x00\\x00\\x00\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\x00\\xFF\\xFF\\x00\", \"\\x00\\x00\\x00\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\", \"\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\xFF\\x00\\xFF\\x00\", \"\\x00\\x00\\x00\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\xFF\\xFF\\x00\\x00\", \"\\x00\\x00\\x00\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\x00\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\x00\\x00\\x00\\x00\", \"\\x00\\x00\\xFF\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\x00\\x00\\xFF\\x00\", \"\\x00\\x00\\xFF\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\x00\\xFF\\x00\\x00\", \"\\x00\\x00\\xFF\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\x00\\xFF\\xFF\\x00\", \"\\x00\\x00\\xFF\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\xFF\\x00\\x00\\x00\", \"\\x00\\x00\\xFF\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\xFF\\x00\\xFF\\x00\", \"\\x00\\x00\\xFF\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\xFF\\xFF\\x00\\x00\", \"\\x00\\x00\\xFF\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\x00\", \"\\x00\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\", \"\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\x00\\x00\\xFF\\x00\", \"\\x00\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\x00\\xFF\\x00\\x00\", \"\\x00\\x00\\xFF\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\x00\", \"\\x00\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\xFF\\x00\\x00\\x00\", \"\\x00\\x00\\xFF\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\x00\", \"\\x00\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\x00\", \"\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\", \"\\x00\\xFF\\x00\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\x00\\x00\\xFF\\x00\", \"\\x00\\xFF\\x00\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\x00\\xFF\\x00\\x00\", \"\\x00\\xFF\\x00\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\x00\\xFF\\xFF\\x00\", \"\\x00\\xFF\\x00\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\xFF\\x00\\x00\\x00\", \"\\x00\\xFF\\x00\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\xFF\\x00\\xFF\\x00\", \"\\x00\\xFF\\x00\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\", \"\\x00\\xFF\\x00\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\x00\", \"\\x00\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\x00\\x00\\x00\\x00\", \"\\x00\\xFF\\x00\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\x00\\x00\\xFF\\x00\", \"\\x00\\xFF\\x00\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\x00\\xFF\\x00\\x00\", \"\\x00\\xFF\\x00\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\x00\", \"\\x00\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\xFF\\x00\\x00\\x00\", \"\\x00\\xFF\\x00\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\x00\", \"\\x00\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\x00\", \"\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\", \"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\x00\\x00\\xFF\\x00\", \"\\x00\\xFF\\xFF\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\x00\\xFF\\x00\\x00\", \"\\x00\\xFF\\xFF\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\", \"\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\xFF\\x00\\x00\\x00\", \"\\x00\\xFF\\xFF\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\x00\", \"\\x00\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\x00\", \"\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\x00\", \"\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\x00\\x00\\x00\\x00\", \"\\x00\\xFF\\xFF\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\x00\", \"\\x00\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\x00\", \"\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\x00\", \"\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\x00\", \"\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\x00\", \"\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\x00\", \"\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\", \"\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\x00\\x00\\xFF\\x00\", \"\\xFF\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\x00\\xFF\\x00\\x00\", \"\\xFF\\x00\\x00\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\", \"\\xFF\\x00\\x00\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\xFF\\x00\\x00\\x00\", \"\\xFF\\x00\\x00\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\xFF\\x00\\xFF\\x00\", \"\\xFF\\x00\\x00\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\", \"\\xFF\\x00\\x00\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\x00\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\x00\\x00\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\x00\\x00\\x00\\x00\", \"\\xFF\\x00\\x00\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\x00\\x00\\xFF\\x00\", \"\\xFF\\x00\\x00\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\x00\\xFF\\x00\\x00\", \"\\xFF\\x00\\x00\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\x00\\xFF\\xFF\\x00\", \"\\xFF\\x00\\x00\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\", \"\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\xFF\\x00\\xFF\\x00\", \"\\xFF\\x00\\x00\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\x00\\x00\", \"\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\x00\\x00\\x00\\x00\", \"\\xFF\\x00\\xFF\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\x00\\x00\\xFF\\x00\", \"\\xFF\\x00\\xFF\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\x00\\xFF\\x00\\x00\", \"\\xFF\\x00\\xFF\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\x00\\xFF\\xFF\\x00\", \"\\xFF\\x00\\xFF\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\xFF\\x00\\x00\\x00\", \"\\xFF\\x00\\xFF\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\xFF\\x00\\xFF\\x00\", \"\\xFF\\x00\\xFF\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\x00\\x00\", \"\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\", \"\\xFF\\x00\\xFF\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\x00\\x00\\xFF\\x00\", \"\\xFF\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\x00\\x00\", \"\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\x00\", \"\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\x00\\x00\", \"\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\x00\", \"\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\x00\", \"\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\", \"\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\x00\\x00\\xFF\\x00\", \"\\xFF\\xFF\\x00\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\x00\\xFF\\x00\\x00\", \"\\xFF\\xFF\\x00\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\x00\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\x00\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\xFF\\x00\\x00\\x00\", \"\\xFF\\xFF\\x00\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\xFF\\x00\\xFF\\x00\", \"\\xFF\\xFF\\x00\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\", \"\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\x00\\x00\\x00\\x00\", \"\\xFF\\xFF\\x00\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\x00\\x00\\xFF\\x00\", \"\\xFF\\xFF\\x00\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\x00\\x00\", \"\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\x00\\x00\", \"\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\x00\", \"\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\x00\", \"\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\", \"\\xFF\\xFF\\xFF\\x00\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\x00\\x00\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\x00\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\x00\\x00\", \"\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\x00\\x00\", \"\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\x00\", \"\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\x00\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\\xFF\",\n        \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\x00\", \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\"\n    ];\n\n    /**\n     * IP mapping helper table.\n     *\n     * Indexing this table with each source byte performs the initial bit permutation.\n     *\n     * @var array\n     */\n    protected static $ipmap = [\n        0x00, 0x10, 0x01, 0x11, 0x20, 0x30, 0x21, 0x31,\n        0x02, 0x12, 0x03, 0x13, 0x22, 0x32, 0x23, 0x33,\n        0x40, 0x50, 0x41, 0x51, 0x60, 0x70, 0x61, 0x71,\n        0x42, 0x52, 0x43, 0x53, 0x62, 0x72, 0x63, 0x73,\n        0x04, 0x14, 0x05, 0x15, 0x24, 0x34, 0x25, 0x35,\n        0x06, 0x16, 0x07, 0x17, 0x26, 0x36, 0x27, 0x37,\n        0x44, 0x54, 0x45, 0x55, 0x64, 0x74, 0x65, 0x75,\n        0x46, 0x56, 0x47, 0x57, 0x66, 0x76, 0x67, 0x77,\n        0x80, 0x90, 0x81, 0x91, 0xA0, 0xB0, 0xA1, 0xB1,\n        0x82, 0x92, 0x83, 0x93, 0xA2, 0xB2, 0xA3, 0xB3,\n        0xC0, 0xD0, 0xC1, 0xD1, 0xE0, 0xF0, 0xE1, 0xF1,\n        0xC2, 0xD2, 0xC3, 0xD3, 0xE2, 0xF2, 0xE3, 0xF3,\n        0x84, 0x94, 0x85, 0x95, 0xA4, 0xB4, 0xA5, 0xB5,\n        0x86, 0x96, 0x87, 0x97, 0xA6, 0xB6, 0xA7, 0xB7,\n        0xC4, 0xD4, 0xC5, 0xD5, 0xE4, 0xF4, 0xE5, 0xF5,\n        0xC6, 0xD6, 0xC7, 0xD7, 0xE6, 0xF6, 0xE7, 0xF7,\n        0x08, 0x18, 0x09, 0x19, 0x28, 0x38, 0x29, 0x39,\n        0x0A, 0x1A, 0x0B, 0x1B, 0x2A, 0x3A, 0x2B, 0x3B,\n        0x48, 0x58, 0x49, 0x59, 0x68, 0x78, 0x69, 0x79,\n        0x4A, 0x5A, 0x4B, 0x5B, 0x6A, 0x7A, 0x6B, 0x7B,\n        0x0C, 0x1C, 0x0D, 0x1D, 0x2C, 0x3C, 0x2D, 0x3D,\n        0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,\n        0x4C, 0x5C, 0x4D, 0x5D, 0x6C, 0x7C, 0x6D, 0x7D,\n        0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,\n        0x88, 0x98, 0x89, 0x99, 0xA8, 0xB8, 0xA9, 0xB9,\n        0x8A, 0x9A, 0x8B, 0x9B, 0xAA, 0xBA, 0xAB, 0xBB,\n        0xC8, 0xD8, 0xC9, 0xD9, 0xE8, 0xF8, 0xE9, 0xF9,\n        0xCA, 0xDA, 0xCB, 0xDB, 0xEA, 0xFA, 0xEB, 0xFB,\n        0x8C, 0x9C, 0x8D, 0x9D, 0xAC, 0xBC, 0xAD, 0xBD,\n        0x8E, 0x9E, 0x8F, 0x9F, 0xAE, 0xBE, 0xAF, 0xBF,\n        0xCC, 0xDC, 0xCD, 0xDD, 0xEC, 0xFC, 0xED, 0xFD,\n        0xCE, 0xDE, 0xCF, 0xDF, 0xEE, 0xFE, 0xEF, 0xFF\n    ];\n\n    /**\n     * Inverse IP mapping helper table.\n     * Indexing this table with a byte value reverses the bit order.\n     *\n     * @var array\n     */\n    protected static $invipmap = [\n        0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,\n        0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,\n        0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,\n        0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,\n        0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,\n        0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,\n        0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,\n        0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,\n        0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,\n        0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,\n        0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,\n        0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,\n        0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,\n        0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,\n        0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,\n        0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,\n        0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,\n        0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,\n        0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,\n        0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,\n        0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,\n        0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,\n        0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,\n        0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,\n        0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,\n        0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,\n        0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,\n        0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,\n        0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,\n        0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,\n        0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,\n        0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF\n    ];\n\n    /**\n     * Pre-permuted S-box1\n     *\n     * Each box ($sbox1-$sbox8) has been vectorized, then each value pre-permuted using the\n     * P table: concatenation can then be replaced by exclusive ORs.\n     *\n     * @var array\n     */\n    protected static $sbox1 = [\n        0x00808200, 0x00000000, 0x00008000, 0x00808202,\n        0x00808002, 0x00008202, 0x00000002, 0x00008000,\n        0x00000200, 0x00808200, 0x00808202, 0x00000200,\n        0x00800202, 0x00808002, 0x00800000, 0x00000002,\n        0x00000202, 0x00800200, 0x00800200, 0x00008200,\n        0x00008200, 0x00808000, 0x00808000, 0x00800202,\n        0x00008002, 0x00800002, 0x00800002, 0x00008002,\n        0x00000000, 0x00000202, 0x00008202, 0x00800000,\n        0x00008000, 0x00808202, 0x00000002, 0x00808000,\n        0x00808200, 0x00800000, 0x00800000, 0x00000200,\n        0x00808002, 0x00008000, 0x00008200, 0x00800002,\n        0x00000200, 0x00000002, 0x00800202, 0x00008202,\n        0x00808202, 0x00008002, 0x00808000, 0x00800202,\n        0x00800002, 0x00000202, 0x00008202, 0x00808200,\n        0x00000202, 0x00800200, 0x00800200, 0x00000000,\n        0x00008002, 0x00008200, 0x00000000, 0x00808002\n    ];\n\n    /**\n     * Pre-permuted S-box2\n     *\n     * @var array\n     */\n    protected static $sbox2 = [\n        0x40084010, 0x40004000, 0x00004000, 0x00084010,\n        0x00080000, 0x00000010, 0x40080010, 0x40004010,\n        0x40000010, 0x40084010, 0x40084000, 0x40000000,\n        0x40004000, 0x00080000, 0x00000010, 0x40080010,\n        0x00084000, 0x00080010, 0x40004010, 0x00000000,\n        0x40000000, 0x00004000, 0x00084010, 0x40080000,\n        0x00080010, 0x40000010, 0x00000000, 0x00084000,\n        0x00004010, 0x40084000, 0x40080000, 0x00004010,\n        0x00000000, 0x00084010, 0x40080010, 0x00080000,\n        0x40004010, 0x40080000, 0x40084000, 0x00004000,\n        0x40080000, 0x40004000, 0x00000010, 0x40084010,\n        0x00084010, 0x00000010, 0x00004000, 0x40000000,\n        0x00004010, 0x40084000, 0x00080000, 0x40000010,\n        0x00080010, 0x40004010, 0x40000010, 0x00080010,\n        0x00084000, 0x00000000, 0x40004000, 0x00004010,\n        0x40000000, 0x40080010, 0x40084010, 0x00084000\n    ];\n\n    /**\n     * Pre-permuted S-box3\n     *\n     * @var array\n     */\n    protected static $sbox3 = [\n        0x00000104, 0x04010100, 0x00000000, 0x04010004,\n        0x04000100, 0x00000000, 0x00010104, 0x04000100,\n        0x00010004, 0x04000004, 0x04000004, 0x00010000,\n        0x04010104, 0x00010004, 0x04010000, 0x00000104,\n        0x04000000, 0x00000004, 0x04010100, 0x00000100,\n        0x00010100, 0x04010000, 0x04010004, 0x00010104,\n        0x04000104, 0x00010100, 0x00010000, 0x04000104,\n        0x00000004, 0x04010104, 0x00000100, 0x04000000,\n        0x04010100, 0x04000000, 0x00010004, 0x00000104,\n        0x00010000, 0x04010100, 0x04000100, 0x00000000,\n        0x00000100, 0x00010004, 0x04010104, 0x04000100,\n        0x04000004, 0x00000100, 0x00000000, 0x04010004,\n        0x04000104, 0x00010000, 0x04000000, 0x04010104,\n        0x00000004, 0x00010104, 0x00010100, 0x04000004,\n        0x04010000, 0x04000104, 0x00000104, 0x04010000,\n        0x00010104, 0x00000004, 0x04010004, 0x00010100\n    ];\n\n    /**\n     * Pre-permuted S-box4\n     *\n     * @var array\n     */\n    protected static $sbox4 = [\n        0x80401000, 0x80001040, 0x80001040, 0x00000040,\n        0x00401040, 0x80400040, 0x80400000, 0x80001000,\n        0x00000000, 0x00401000, 0x00401000, 0x80401040,\n        0x80000040, 0x00000000, 0x00400040, 0x80400000,\n        0x80000000, 0x00001000, 0x00400000, 0x80401000,\n        0x00000040, 0x00400000, 0x80001000, 0x00001040,\n        0x80400040, 0x80000000, 0x00001040, 0x00400040,\n        0x00001000, 0x00401040, 0x80401040, 0x80000040,\n        0x00400040, 0x80400000, 0x00401000, 0x80401040,\n        0x80000040, 0x00000000, 0x00000000, 0x00401000,\n        0x00001040, 0x00400040, 0x80400040, 0x80000000,\n        0x80401000, 0x80001040, 0x80001040, 0x00000040,\n        0x80401040, 0x80000040, 0x80000000, 0x00001000,\n        0x80400000, 0x80001000, 0x00401040, 0x80400040,\n        0x80001000, 0x00001040, 0x00400000, 0x80401000,\n        0x00000040, 0x00400000, 0x00001000, 0x00401040\n    ];\n\n    /**\n     * Pre-permuted S-box5\n     *\n     * @var array\n     */\n    protected static $sbox5 = [\n        0x00000080, 0x01040080, 0x01040000, 0x21000080,\n        0x00040000, 0x00000080, 0x20000000, 0x01040000,\n        0x20040080, 0x00040000, 0x01000080, 0x20040080,\n        0x21000080, 0x21040000, 0x00040080, 0x20000000,\n        0x01000000, 0x20040000, 0x20040000, 0x00000000,\n        0x20000080, 0x21040080, 0x21040080, 0x01000080,\n        0x21040000, 0x20000080, 0x00000000, 0x21000000,\n        0x01040080, 0x01000000, 0x21000000, 0x00040080,\n        0x00040000, 0x21000080, 0x00000080, 0x01000000,\n        0x20000000, 0x01040000, 0x21000080, 0x20040080,\n        0x01000080, 0x20000000, 0x21040000, 0x01040080,\n        0x20040080, 0x00000080, 0x01000000, 0x21040000,\n        0x21040080, 0x00040080, 0x21000000, 0x21040080,\n        0x01040000, 0x00000000, 0x20040000, 0x21000000,\n        0x00040080, 0x01000080, 0x20000080, 0x00040000,\n        0x00000000, 0x20040000, 0x01040080, 0x20000080\n    ];\n\n    /**\n     * Pre-permuted S-box6\n     *\n     * @var array\n     */\n    protected static $sbox6 = [\n        0x10000008, 0x10200000, 0x00002000, 0x10202008,\n        0x10200000, 0x00000008, 0x10202008, 0x00200000,\n        0x10002000, 0x00202008, 0x00200000, 0x10000008,\n        0x00200008, 0x10002000, 0x10000000, 0x00002008,\n        0x00000000, 0x00200008, 0x10002008, 0x00002000,\n        0x00202000, 0x10002008, 0x00000008, 0x10200008,\n        0x10200008, 0x00000000, 0x00202008, 0x10202000,\n        0x00002008, 0x00202000, 0x10202000, 0x10000000,\n        0x10002000, 0x00000008, 0x10200008, 0x00202000,\n        0x10202008, 0x00200000, 0x00002008, 0x10000008,\n        0x00200000, 0x10002000, 0x10000000, 0x00002008,\n        0x10000008, 0x10202008, 0x00202000, 0x10200000,\n        0x00202008, 0x10202000, 0x00000000, 0x10200008,\n        0x00000008, 0x00002000, 0x10200000, 0x00202008,\n        0x00002000, 0x00200008, 0x10002008, 0x00000000,\n        0x10202000, 0x10000000, 0x00200008, 0x10002008\n    ];\n\n    /**\n     * Pre-permuted S-box7\n     *\n     * @var array\n     */\n    protected static $sbox7 = [\n        0x00100000, 0x02100001, 0x02000401, 0x00000000,\n        0x00000400, 0x02000401, 0x00100401, 0x02100400,\n        0x02100401, 0x00100000, 0x00000000, 0x02000001,\n        0x00000001, 0x02000000, 0x02100001, 0x00000401,\n        0x02000400, 0x00100401, 0x00100001, 0x02000400,\n        0x02000001, 0x02100000, 0x02100400, 0x00100001,\n        0x02100000, 0x00000400, 0x00000401, 0x02100401,\n        0x00100400, 0x00000001, 0x02000000, 0x00100400,\n        0x02000000, 0x00100400, 0x00100000, 0x02000401,\n        0x02000401, 0x02100001, 0x02100001, 0x00000001,\n        0x00100001, 0x02000000, 0x02000400, 0x00100000,\n        0x02100400, 0x00000401, 0x00100401, 0x02100400,\n        0x00000401, 0x02000001, 0x02100401, 0x02100000,\n        0x00100400, 0x00000000, 0x00000001, 0x02100401,\n        0x00000000, 0x00100401, 0x02100000, 0x00000400,\n        0x02000001, 0x02000400, 0x00000400, 0x00100001\n    ];\n\n    /**\n     * Pre-permuted S-box8\n     *\n     * @var array\n     */\n    protected static $sbox8 = [\n        0x08000820, 0x00000800, 0x00020000, 0x08020820,\n        0x08000000, 0x08000820, 0x00000020, 0x08000000,\n        0x00020020, 0x08020000, 0x08020820, 0x00020800,\n        0x08020800, 0x00020820, 0x00000800, 0x00000020,\n        0x08020000, 0x08000020, 0x08000800, 0x00000820,\n        0x00020800, 0x00020020, 0x08020020, 0x08020800,\n        0x00000820, 0x00000000, 0x00000000, 0x08020020,\n        0x08000020, 0x08000800, 0x00020820, 0x00020000,\n        0x00020820, 0x00020000, 0x08020800, 0x00000800,\n        0x00000020, 0x08020020, 0x00000800, 0x00020820,\n        0x08000800, 0x00000020, 0x08000020, 0x08020000,\n        0x08020020, 0x08000000, 0x00020000, 0x08000820,\n        0x00000000, 0x08020820, 0x00020020, 0x08000020,\n        0x08020000, 0x08000800, 0x08000820, 0x00000000,\n        0x08020820, 0x00020800, 0x00020800, 0x00000820,\n        0x00000820, 0x00020020, 0x08000000, 0x08020800\n    ];\n\n    /**\n     * Default Constructor.\n     *\n     * @param string $mode\n     * @throws BadModeException if an invalid / unsupported mode is provided\n     */\n    public function __construct($mode)\n    {\n        parent::__construct($mode);\n\n        if ($this->mode == self::MODE_STREAM) {\n            throw new BadModeException('Block ciphers cannot be ran in stream mode');\n        }\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see Common\\SymmetricKey::isValidEngine()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        if ($this->key_length_max == 8) {\n            if ($engine == self::ENGINE_OPENSSL) {\n                // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1\n                // \"Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider\"\n                // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not\n                if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\\d+\\.\\d+\\.\\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {\n                    return false;\n                }\n                $this->cipher_name_openssl_ecb = 'des-ecb';\n                $this->cipher_name_openssl = 'des-' . $this->openssl_translate_mode();\n            }\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Sets the key.\n     *\n     * Keys must be 64-bits long or 8 bytes long.\n     *\n     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.\n     *\n     * @see Common\\SymmetricKey::setKey()\n     * @param string $key\n     */\n    public function setKey($key)\n    {\n        if (!($this instanceof TripleDES) && strlen($key) != 8) {\n            throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of size 8 are supported');\n        }\n\n        // Sets the key\n        parent::setKey($key);\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @see Common\\SymmetricKey::encryptBlock()\n     * @see Common\\SymmetricKey::encrypt()\n     * @see self::encrypt()\n     * @param string $in\n     * @return string\n     */\n    protected function encryptBlock($in)\n    {\n        return $this->processBlock($in, self::ENCRYPT);\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @see Common\\SymmetricKey::decryptBlock()\n     * @see Common\\SymmetricKey::decrypt()\n     * @see self::decrypt()\n     * @param string $in\n     * @return string\n     */\n    protected function decryptBlock($in)\n    {\n        return $this->processBlock($in, self::DECRYPT);\n    }\n\n    /**\n     * Encrypts or decrypts a 64-bit block\n     *\n     * $mode should be either self::ENCRYPT or self::DECRYPT.  See\n     * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general\n     * idea of what this function does.\n     *\n     * @see self::encryptBlock()\n     * @see self::decryptBlock()\n     * @param string $block\n     * @param int $mode\n     * @return string\n     */\n    private function processBlock($block, $mode)\n    {\n        static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;\n        if (!$sbox1) {\n            $sbox1 = array_map('intval', self::$sbox1);\n            $sbox2 = array_map('intval', self::$sbox2);\n            $sbox3 = array_map('intval', self::$sbox3);\n            $sbox4 = array_map('intval', self::$sbox4);\n            $sbox5 = array_map('intval', self::$sbox5);\n            $sbox6 = array_map('intval', self::$sbox6);\n            $sbox7 = array_map('intval', self::$sbox7);\n            $sbox8 = array_map('intval', self::$sbox8);\n            /* Merge $shuffle with $[inv]ipmap */\n            for ($i = 0; $i < 256; ++$i) {\n                $shuffleip[]    =  self::$shuffle[self::$ipmap[$i]];\n                $shuffleinvip[] =  self::$shuffle[self::$invipmap[$i]];\n            }\n        }\n\n        $keys  = $this->keys[$mode];\n        $ki    = -1;\n\n        // Do the initial IP permutation.\n        $t = unpack('Nl/Nr', $block);\n        list($l, $r) = [$t['l'], $t['r']];\n        $block = ($shuffleip[ $r        & 0xFF] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\") |\n                 ($shuffleip[($r >>  8) & 0xFF] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") |\n                 ($shuffleip[($r >> 16) & 0xFF] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\") |\n                 ($shuffleip[($r >> 24) & 0xFF] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\") |\n                 ($shuffleip[ $l        & 0xFF] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\") |\n                 ($shuffleip[($l >>  8) & 0xFF] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04\") |\n                 ($shuffleip[($l >> 16) & 0xFF] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\") |\n                 ($shuffleip[($l >> 24) & 0xFF] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\");\n\n        // Extract L0 and R0.\n        $t = unpack('Nl/Nr', $block);\n        list($l, $r) = [$t['l'], $t['r']];\n\n        for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {\n            // Perform the 16 steps.\n            for ($i = 0; $i < 16; $i++) {\n                // start of \"the Feistel (F) function\" - see the following URL:\n                // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png\n                // Merge key schedule.\n                $b1 = (($r >>  3) & 0x1FFFFFFF) ^ ($r << 29) ^ $keys[++$ki];\n                $b2 = (($r >> 31) & 0x00000001) ^ ($r <<  1) ^ $keys[++$ki];\n\n                // S-box indexing.\n                $t = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^\n                     $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^\n                     $sbox5[($b1 >>  8) & 0x3F] ^ $sbox6[($b2 >>  8) & 0x3F] ^\n                     $sbox7[ $b1        & 0x3F] ^ $sbox8[ $b2        & 0x3F] ^ $l;\n                // end of \"the Feistel (F) function\"\n\n                $l = $r;\n                $r = $t;\n            }\n\n            // Last step should not permute L & R.\n            $t = $l;\n            $l = $r;\n            $r = $t;\n        }\n\n        // Perform the inverse IP permutation.\n        return ($shuffleinvip[($r >> 24) & 0xFF] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\") |\n               ($shuffleinvip[($l >> 24) & 0xFF] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") |\n               ($shuffleinvip[($r >> 16) & 0xFF] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\") |\n               ($shuffleinvip[($l >> 16) & 0xFF] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\") |\n               ($shuffleinvip[($r >>  8) & 0xFF] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\") |\n               ($shuffleinvip[($l >>  8) & 0xFF] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04\") |\n               ($shuffleinvip[ $r        & 0xFF] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\") |\n               ($shuffleinvip[ $l        & 0xFF] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\");\n    }\n\n    /**\n     * Creates the key schedule\n     *\n     * @see Common\\SymmetricKey::setupKey()\n     */\n    protected function setupKey()\n    {\n        if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->des_rounds === $this->kl['des_rounds']) {\n            // already expanded\n            return;\n        }\n        $this->kl = ['key' => $this->key, 'des_rounds' => $this->des_rounds];\n\n        static $shifts = [ // number of key bits shifted per round\n            1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1\n        ];\n\n        static $pc1map = [\n            0x00, 0x00, 0x08, 0x08, 0x04, 0x04, 0x0C, 0x0C,\n            0x02, 0x02, 0x0A, 0x0A, 0x06, 0x06, 0x0E, 0x0E,\n            0x10, 0x10, 0x18, 0x18, 0x14, 0x14, 0x1C, 0x1C,\n            0x12, 0x12, 0x1A, 0x1A, 0x16, 0x16, 0x1E, 0x1E,\n            0x20, 0x20, 0x28, 0x28, 0x24, 0x24, 0x2C, 0x2C,\n            0x22, 0x22, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E,\n            0x30, 0x30, 0x38, 0x38, 0x34, 0x34, 0x3C, 0x3C,\n            0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x3E,\n            0x40, 0x40, 0x48, 0x48, 0x44, 0x44, 0x4C, 0x4C,\n            0x42, 0x42, 0x4A, 0x4A, 0x46, 0x46, 0x4E, 0x4E,\n            0x50, 0x50, 0x58, 0x58, 0x54, 0x54, 0x5C, 0x5C,\n            0x52, 0x52, 0x5A, 0x5A, 0x56, 0x56, 0x5E, 0x5E,\n            0x60, 0x60, 0x68, 0x68, 0x64, 0x64, 0x6C, 0x6C,\n            0x62, 0x62, 0x6A, 0x6A, 0x66, 0x66, 0x6E, 0x6E,\n            0x70, 0x70, 0x78, 0x78, 0x74, 0x74, 0x7C, 0x7C,\n            0x72, 0x72, 0x7A, 0x7A, 0x76, 0x76, 0x7E, 0x7E,\n            0x80, 0x80, 0x88, 0x88, 0x84, 0x84, 0x8C, 0x8C,\n            0x82, 0x82, 0x8A, 0x8A, 0x86, 0x86, 0x8E, 0x8E,\n            0x90, 0x90, 0x98, 0x98, 0x94, 0x94, 0x9C, 0x9C,\n            0x92, 0x92, 0x9A, 0x9A, 0x96, 0x96, 0x9E, 0x9E,\n            0xA0, 0xA0, 0xA8, 0xA8, 0xA4, 0xA4, 0xAC, 0xAC,\n            0xA2, 0xA2, 0xAA, 0xAA, 0xA6, 0xA6, 0xAE, 0xAE,\n            0xB0, 0xB0, 0xB8, 0xB8, 0xB4, 0xB4, 0xBC, 0xBC,\n            0xB2, 0xB2, 0xBA, 0xBA, 0xB6, 0xB6, 0xBE, 0xBE,\n            0xC0, 0xC0, 0xC8, 0xC8, 0xC4, 0xC4, 0xCC, 0xCC,\n            0xC2, 0xC2, 0xCA, 0xCA, 0xC6, 0xC6, 0xCE, 0xCE,\n            0xD0, 0xD0, 0xD8, 0xD8, 0xD4, 0xD4, 0xDC, 0xDC,\n            0xD2, 0xD2, 0xDA, 0xDA, 0xD6, 0xD6, 0xDE, 0xDE,\n            0xE0, 0xE0, 0xE8, 0xE8, 0xE4, 0xE4, 0xEC, 0xEC,\n            0xE2, 0xE2, 0xEA, 0xEA, 0xE6, 0xE6, 0xEE, 0xEE,\n            0xF0, 0xF0, 0xF8, 0xF8, 0xF4, 0xF4, 0xFC, 0xFC,\n            0xF2, 0xF2, 0xFA, 0xFA, 0xF6, 0xF6, 0xFE, 0xFE\n        ];\n\n        // Mapping tables for the PC-2 transformation.\n        static $pc2mapc1 = [\n            0x00000000, 0x00000400, 0x00200000, 0x00200400,\n            0x00000001, 0x00000401, 0x00200001, 0x00200401,\n            0x02000000, 0x02000400, 0x02200000, 0x02200400,\n            0x02000001, 0x02000401, 0x02200001, 0x02200401\n        ];\n        static $pc2mapc2 = [\n            0x00000000, 0x00000800, 0x08000000, 0x08000800,\n            0x00010000, 0x00010800, 0x08010000, 0x08010800,\n            0x00000000, 0x00000800, 0x08000000, 0x08000800,\n            0x00010000, 0x00010800, 0x08010000, 0x08010800,\n            0x00000100, 0x00000900, 0x08000100, 0x08000900,\n            0x00010100, 0x00010900, 0x08010100, 0x08010900,\n            0x00000100, 0x00000900, 0x08000100, 0x08000900,\n            0x00010100, 0x00010900, 0x08010100, 0x08010900,\n            0x00000010, 0x00000810, 0x08000010, 0x08000810,\n            0x00010010, 0x00010810, 0x08010010, 0x08010810,\n            0x00000010, 0x00000810, 0x08000010, 0x08000810,\n            0x00010010, 0x00010810, 0x08010010, 0x08010810,\n            0x00000110, 0x00000910, 0x08000110, 0x08000910,\n            0x00010110, 0x00010910, 0x08010110, 0x08010910,\n            0x00000110, 0x00000910, 0x08000110, 0x08000910,\n            0x00010110, 0x00010910, 0x08010110, 0x08010910,\n            0x00040000, 0x00040800, 0x08040000, 0x08040800,\n            0x00050000, 0x00050800, 0x08050000, 0x08050800,\n            0x00040000, 0x00040800, 0x08040000, 0x08040800,\n            0x00050000, 0x00050800, 0x08050000, 0x08050800,\n            0x00040100, 0x00040900, 0x08040100, 0x08040900,\n            0x00050100, 0x00050900, 0x08050100, 0x08050900,\n            0x00040100, 0x00040900, 0x08040100, 0x08040900,\n            0x00050100, 0x00050900, 0x08050100, 0x08050900,\n            0x00040010, 0x00040810, 0x08040010, 0x08040810,\n            0x00050010, 0x00050810, 0x08050010, 0x08050810,\n            0x00040010, 0x00040810, 0x08040010, 0x08040810,\n            0x00050010, 0x00050810, 0x08050010, 0x08050810,\n            0x00040110, 0x00040910, 0x08040110, 0x08040910,\n            0x00050110, 0x00050910, 0x08050110, 0x08050910,\n            0x00040110, 0x00040910, 0x08040110, 0x08040910,\n            0x00050110, 0x00050910, 0x08050110, 0x08050910,\n            0x01000000, 0x01000800, 0x09000000, 0x09000800,\n            0x01010000, 0x01010800, 0x09010000, 0x09010800,\n            0x01000000, 0x01000800, 0x09000000, 0x09000800,\n            0x01010000, 0x01010800, 0x09010000, 0x09010800,\n            0x01000100, 0x01000900, 0x09000100, 0x09000900,\n            0x01010100, 0x01010900, 0x09010100, 0x09010900,\n            0x01000100, 0x01000900, 0x09000100, 0x09000900,\n            0x01010100, 0x01010900, 0x09010100, 0x09010900,\n            0x01000010, 0x01000810, 0x09000010, 0x09000810,\n            0x01010010, 0x01010810, 0x09010010, 0x09010810,\n            0x01000010, 0x01000810, 0x09000010, 0x09000810,\n            0x01010010, 0x01010810, 0x09010010, 0x09010810,\n            0x01000110, 0x01000910, 0x09000110, 0x09000910,\n            0x01010110, 0x01010910, 0x09010110, 0x09010910,\n            0x01000110, 0x01000910, 0x09000110, 0x09000910,\n            0x01010110, 0x01010910, 0x09010110, 0x09010910,\n            0x01040000, 0x01040800, 0x09040000, 0x09040800,\n            0x01050000, 0x01050800, 0x09050000, 0x09050800,\n            0x01040000, 0x01040800, 0x09040000, 0x09040800,\n            0x01050000, 0x01050800, 0x09050000, 0x09050800,\n            0x01040100, 0x01040900, 0x09040100, 0x09040900,\n            0x01050100, 0x01050900, 0x09050100, 0x09050900,\n            0x01040100, 0x01040900, 0x09040100, 0x09040900,\n            0x01050100, 0x01050900, 0x09050100, 0x09050900,\n            0x01040010, 0x01040810, 0x09040010, 0x09040810,\n            0x01050010, 0x01050810, 0x09050010, 0x09050810,\n            0x01040010, 0x01040810, 0x09040010, 0x09040810,\n            0x01050010, 0x01050810, 0x09050010, 0x09050810,\n            0x01040110, 0x01040910, 0x09040110, 0x09040910,\n            0x01050110, 0x01050910, 0x09050110, 0x09050910,\n            0x01040110, 0x01040910, 0x09040110, 0x09040910,\n            0x01050110, 0x01050910, 0x09050110, 0x09050910\n        ];\n        static $pc2mapc3 = [\n            0x00000000, 0x00000004, 0x00001000, 0x00001004,\n            0x00000000, 0x00000004, 0x00001000, 0x00001004,\n            0x10000000, 0x10000004, 0x10001000, 0x10001004,\n            0x10000000, 0x10000004, 0x10001000, 0x10001004,\n            0x00000020, 0x00000024, 0x00001020, 0x00001024,\n            0x00000020, 0x00000024, 0x00001020, 0x00001024,\n            0x10000020, 0x10000024, 0x10001020, 0x10001024,\n            0x10000020, 0x10000024, 0x10001020, 0x10001024,\n            0x00080000, 0x00080004, 0x00081000, 0x00081004,\n            0x00080000, 0x00080004, 0x00081000, 0x00081004,\n            0x10080000, 0x10080004, 0x10081000, 0x10081004,\n            0x10080000, 0x10080004, 0x10081000, 0x10081004,\n            0x00080020, 0x00080024, 0x00081020, 0x00081024,\n            0x00080020, 0x00080024, 0x00081020, 0x00081024,\n            0x10080020, 0x10080024, 0x10081020, 0x10081024,\n            0x10080020, 0x10080024, 0x10081020, 0x10081024,\n            0x20000000, 0x20000004, 0x20001000, 0x20001004,\n            0x20000000, 0x20000004, 0x20001000, 0x20001004,\n            0x30000000, 0x30000004, 0x30001000, 0x30001004,\n            0x30000000, 0x30000004, 0x30001000, 0x30001004,\n            0x20000020, 0x20000024, 0x20001020, 0x20001024,\n            0x20000020, 0x20000024, 0x20001020, 0x20001024,\n            0x30000020, 0x30000024, 0x30001020, 0x30001024,\n            0x30000020, 0x30000024, 0x30001020, 0x30001024,\n            0x20080000, 0x20080004, 0x20081000, 0x20081004,\n            0x20080000, 0x20080004, 0x20081000, 0x20081004,\n            0x30080000, 0x30080004, 0x30081000, 0x30081004,\n            0x30080000, 0x30080004, 0x30081000, 0x30081004,\n            0x20080020, 0x20080024, 0x20081020, 0x20081024,\n            0x20080020, 0x20080024, 0x20081020, 0x20081024,\n            0x30080020, 0x30080024, 0x30081020, 0x30081024,\n            0x30080020, 0x30080024, 0x30081020, 0x30081024,\n            0x00000002, 0x00000006, 0x00001002, 0x00001006,\n            0x00000002, 0x00000006, 0x00001002, 0x00001006,\n            0x10000002, 0x10000006, 0x10001002, 0x10001006,\n            0x10000002, 0x10000006, 0x10001002, 0x10001006,\n            0x00000022, 0x00000026, 0x00001022, 0x00001026,\n            0x00000022, 0x00000026, 0x00001022, 0x00001026,\n            0x10000022, 0x10000026, 0x10001022, 0x10001026,\n            0x10000022, 0x10000026, 0x10001022, 0x10001026,\n            0x00080002, 0x00080006, 0x00081002, 0x00081006,\n            0x00080002, 0x00080006, 0x00081002, 0x00081006,\n            0x10080002, 0x10080006, 0x10081002, 0x10081006,\n            0x10080002, 0x10080006, 0x10081002, 0x10081006,\n            0x00080022, 0x00080026, 0x00081022, 0x00081026,\n            0x00080022, 0x00080026, 0x00081022, 0x00081026,\n            0x10080022, 0x10080026, 0x10081022, 0x10081026,\n            0x10080022, 0x10080026, 0x10081022, 0x10081026,\n            0x20000002, 0x20000006, 0x20001002, 0x20001006,\n            0x20000002, 0x20000006, 0x20001002, 0x20001006,\n            0x30000002, 0x30000006, 0x30001002, 0x30001006,\n            0x30000002, 0x30000006, 0x30001002, 0x30001006,\n            0x20000022, 0x20000026, 0x20001022, 0x20001026,\n            0x20000022, 0x20000026, 0x20001022, 0x20001026,\n            0x30000022, 0x30000026, 0x30001022, 0x30001026,\n            0x30000022, 0x30000026, 0x30001022, 0x30001026,\n            0x20080002, 0x20080006, 0x20081002, 0x20081006,\n            0x20080002, 0x20080006, 0x20081002, 0x20081006,\n            0x30080002, 0x30080006, 0x30081002, 0x30081006,\n            0x30080002, 0x30080006, 0x30081002, 0x30081006,\n            0x20080022, 0x20080026, 0x20081022, 0x20081026,\n            0x20080022, 0x20080026, 0x20081022, 0x20081026,\n            0x30080022, 0x30080026, 0x30081022, 0x30081026,\n            0x30080022, 0x30080026, 0x30081022, 0x30081026\n        ];\n        static $pc2mapc4 = [\n            0x00000000, 0x00100000, 0x00000008, 0x00100008,\n            0x00000200, 0x00100200, 0x00000208, 0x00100208,\n            0x00000000, 0x00100000, 0x00000008, 0x00100008,\n            0x00000200, 0x00100200, 0x00000208, 0x00100208,\n            0x04000000, 0x04100000, 0x04000008, 0x04100008,\n            0x04000200, 0x04100200, 0x04000208, 0x04100208,\n            0x04000000, 0x04100000, 0x04000008, 0x04100008,\n            0x04000200, 0x04100200, 0x04000208, 0x04100208,\n            0x00002000, 0x00102000, 0x00002008, 0x00102008,\n            0x00002200, 0x00102200, 0x00002208, 0x00102208,\n            0x00002000, 0x00102000, 0x00002008, 0x00102008,\n            0x00002200, 0x00102200, 0x00002208, 0x00102208,\n            0x04002000, 0x04102000, 0x04002008, 0x04102008,\n            0x04002200, 0x04102200, 0x04002208, 0x04102208,\n            0x04002000, 0x04102000, 0x04002008, 0x04102008,\n            0x04002200, 0x04102200, 0x04002208, 0x04102208,\n            0x00000000, 0x00100000, 0x00000008, 0x00100008,\n            0x00000200, 0x00100200, 0x00000208, 0x00100208,\n            0x00000000, 0x00100000, 0x00000008, 0x00100008,\n            0x00000200, 0x00100200, 0x00000208, 0x00100208,\n            0x04000000, 0x04100000, 0x04000008, 0x04100008,\n            0x04000200, 0x04100200, 0x04000208, 0x04100208,\n            0x04000000, 0x04100000, 0x04000008, 0x04100008,\n            0x04000200, 0x04100200, 0x04000208, 0x04100208,\n            0x00002000, 0x00102000, 0x00002008, 0x00102008,\n            0x00002200, 0x00102200, 0x00002208, 0x00102208,\n            0x00002000, 0x00102000, 0x00002008, 0x00102008,\n            0x00002200, 0x00102200, 0x00002208, 0x00102208,\n            0x04002000, 0x04102000, 0x04002008, 0x04102008,\n            0x04002200, 0x04102200, 0x04002208, 0x04102208,\n            0x04002000, 0x04102000, 0x04002008, 0x04102008,\n            0x04002200, 0x04102200, 0x04002208, 0x04102208,\n            0x00020000, 0x00120000, 0x00020008, 0x00120008,\n            0x00020200, 0x00120200, 0x00020208, 0x00120208,\n            0x00020000, 0x00120000, 0x00020008, 0x00120008,\n            0x00020200, 0x00120200, 0x00020208, 0x00120208,\n            0x04020000, 0x04120000, 0x04020008, 0x04120008,\n            0x04020200, 0x04120200, 0x04020208, 0x04120208,\n            0x04020000, 0x04120000, 0x04020008, 0x04120008,\n            0x04020200, 0x04120200, 0x04020208, 0x04120208,\n            0x00022000, 0x00122000, 0x00022008, 0x00122008,\n            0x00022200, 0x00122200, 0x00022208, 0x00122208,\n            0x00022000, 0x00122000, 0x00022008, 0x00122008,\n            0x00022200, 0x00122200, 0x00022208, 0x00122208,\n            0x04022000, 0x04122000, 0x04022008, 0x04122008,\n            0x04022200, 0x04122200, 0x04022208, 0x04122208,\n            0x04022000, 0x04122000, 0x04022008, 0x04122008,\n            0x04022200, 0x04122200, 0x04022208, 0x04122208,\n            0x00020000, 0x00120000, 0x00020008, 0x00120008,\n            0x00020200, 0x00120200, 0x00020208, 0x00120208,\n            0x00020000, 0x00120000, 0x00020008, 0x00120008,\n            0x00020200, 0x00120200, 0x00020208, 0x00120208,\n            0x04020000, 0x04120000, 0x04020008, 0x04120008,\n            0x04020200, 0x04120200, 0x04020208, 0x04120208,\n            0x04020000, 0x04120000, 0x04020008, 0x04120008,\n            0x04020200, 0x04120200, 0x04020208, 0x04120208,\n            0x00022000, 0x00122000, 0x00022008, 0x00122008,\n            0x00022200, 0x00122200, 0x00022208, 0x00122208,\n            0x00022000, 0x00122000, 0x00022008, 0x00122008,\n            0x00022200, 0x00122200, 0x00022208, 0x00122208,\n            0x04022000, 0x04122000, 0x04022008, 0x04122008,\n            0x04022200, 0x04122200, 0x04022208, 0x04122208,\n            0x04022000, 0x04122000, 0x04022008, 0x04122008,\n            0x04022200, 0x04122200, 0x04022208, 0x04122208\n        ];\n        static $pc2mapd1 = [\n            0x00000000, 0x00000001, 0x08000000, 0x08000001,\n            0x00200000, 0x00200001, 0x08200000, 0x08200001,\n            0x00000002, 0x00000003, 0x08000002, 0x08000003,\n            0x00200002, 0x00200003, 0x08200002, 0x08200003\n        ];\n        static $pc2mapd2 = [\n            0x00000000, 0x00100000, 0x00000800, 0x00100800,\n            0x00000000, 0x00100000, 0x00000800, 0x00100800,\n            0x04000000, 0x04100000, 0x04000800, 0x04100800,\n            0x04000000, 0x04100000, 0x04000800, 0x04100800,\n            0x00000004, 0x00100004, 0x00000804, 0x00100804,\n            0x00000004, 0x00100004, 0x00000804, 0x00100804,\n            0x04000004, 0x04100004, 0x04000804, 0x04100804,\n            0x04000004, 0x04100004, 0x04000804, 0x04100804,\n            0x00000000, 0x00100000, 0x00000800, 0x00100800,\n            0x00000000, 0x00100000, 0x00000800, 0x00100800,\n            0x04000000, 0x04100000, 0x04000800, 0x04100800,\n            0x04000000, 0x04100000, 0x04000800, 0x04100800,\n            0x00000004, 0x00100004, 0x00000804, 0x00100804,\n            0x00000004, 0x00100004, 0x00000804, 0x00100804,\n            0x04000004, 0x04100004, 0x04000804, 0x04100804,\n            0x04000004, 0x04100004, 0x04000804, 0x04100804,\n            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,\n            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,\n            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,\n            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,\n            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,\n            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,\n            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,\n            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,\n            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,\n            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,\n            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,\n            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,\n            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,\n            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,\n            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,\n            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,\n            0x00020000, 0x00120000, 0x00020800, 0x00120800,\n            0x00020000, 0x00120000, 0x00020800, 0x00120800,\n            0x04020000, 0x04120000, 0x04020800, 0x04120800,\n            0x04020000, 0x04120000, 0x04020800, 0x04120800,\n            0x00020004, 0x00120004, 0x00020804, 0x00120804,\n            0x00020004, 0x00120004, 0x00020804, 0x00120804,\n            0x04020004, 0x04120004, 0x04020804, 0x04120804,\n            0x04020004, 0x04120004, 0x04020804, 0x04120804,\n            0x00020000, 0x00120000, 0x00020800, 0x00120800,\n            0x00020000, 0x00120000, 0x00020800, 0x00120800,\n            0x04020000, 0x04120000, 0x04020800, 0x04120800,\n            0x04020000, 0x04120000, 0x04020800, 0x04120800,\n            0x00020004, 0x00120004, 0x00020804, 0x00120804,\n            0x00020004, 0x00120004, 0x00020804, 0x00120804,\n            0x04020004, 0x04120004, 0x04020804, 0x04120804,\n            0x04020004, 0x04120004, 0x04020804, 0x04120804,\n            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,\n            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,\n            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,\n            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,\n            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,\n            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,\n            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,\n            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,\n            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,\n            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,\n            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,\n            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,\n            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,\n            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,\n            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,\n            0x04020204, 0x04120204, 0x04020A04, 0x04120A04\n        ];\n        static $pc2mapd3 = [\n            0x00000000, 0x00010000, 0x02000000, 0x02010000,\n            0x00000020, 0x00010020, 0x02000020, 0x02010020,\n            0x00040000, 0x00050000, 0x02040000, 0x02050000,\n            0x00040020, 0x00050020, 0x02040020, 0x02050020,\n            0x00002000, 0x00012000, 0x02002000, 0x02012000,\n            0x00002020, 0x00012020, 0x02002020, 0x02012020,\n            0x00042000, 0x00052000, 0x02042000, 0x02052000,\n            0x00042020, 0x00052020, 0x02042020, 0x02052020,\n            0x00000000, 0x00010000, 0x02000000, 0x02010000,\n            0x00000020, 0x00010020, 0x02000020, 0x02010020,\n            0x00040000, 0x00050000, 0x02040000, 0x02050000,\n            0x00040020, 0x00050020, 0x02040020, 0x02050020,\n            0x00002000, 0x00012000, 0x02002000, 0x02012000,\n            0x00002020, 0x00012020, 0x02002020, 0x02012020,\n            0x00042000, 0x00052000, 0x02042000, 0x02052000,\n            0x00042020, 0x00052020, 0x02042020, 0x02052020,\n            0x00000010, 0x00010010, 0x02000010, 0x02010010,\n            0x00000030, 0x00010030, 0x02000030, 0x02010030,\n            0x00040010, 0x00050010, 0x02040010, 0x02050010,\n            0x00040030, 0x00050030, 0x02040030, 0x02050030,\n            0x00002010, 0x00012010, 0x02002010, 0x02012010,\n            0x00002030, 0x00012030, 0x02002030, 0x02012030,\n            0x00042010, 0x00052010, 0x02042010, 0x02052010,\n            0x00042030, 0x00052030, 0x02042030, 0x02052030,\n            0x00000010, 0x00010010, 0x02000010, 0x02010010,\n            0x00000030, 0x00010030, 0x02000030, 0x02010030,\n            0x00040010, 0x00050010, 0x02040010, 0x02050010,\n            0x00040030, 0x00050030, 0x02040030, 0x02050030,\n            0x00002010, 0x00012010, 0x02002010, 0x02012010,\n            0x00002030, 0x00012030, 0x02002030, 0x02012030,\n            0x00042010, 0x00052010, 0x02042010, 0x02052010,\n            0x00042030, 0x00052030, 0x02042030, 0x02052030,\n            0x20000000, 0x20010000, 0x22000000, 0x22010000,\n            0x20000020, 0x20010020, 0x22000020, 0x22010020,\n            0x20040000, 0x20050000, 0x22040000, 0x22050000,\n            0x20040020, 0x20050020, 0x22040020, 0x22050020,\n            0x20002000, 0x20012000, 0x22002000, 0x22012000,\n            0x20002020, 0x20012020, 0x22002020, 0x22012020,\n            0x20042000, 0x20052000, 0x22042000, 0x22052000,\n            0x20042020, 0x20052020, 0x22042020, 0x22052020,\n            0x20000000, 0x20010000, 0x22000000, 0x22010000,\n            0x20000020, 0x20010020, 0x22000020, 0x22010020,\n            0x20040000, 0x20050000, 0x22040000, 0x22050000,\n            0x20040020, 0x20050020, 0x22040020, 0x22050020,\n            0x20002000, 0x20012000, 0x22002000, 0x22012000,\n            0x20002020, 0x20012020, 0x22002020, 0x22012020,\n            0x20042000, 0x20052000, 0x22042000, 0x22052000,\n            0x20042020, 0x20052020, 0x22042020, 0x22052020,\n            0x20000010, 0x20010010, 0x22000010, 0x22010010,\n            0x20000030, 0x20010030, 0x22000030, 0x22010030,\n            0x20040010, 0x20050010, 0x22040010, 0x22050010,\n            0x20040030, 0x20050030, 0x22040030, 0x22050030,\n            0x20002010, 0x20012010, 0x22002010, 0x22012010,\n            0x20002030, 0x20012030, 0x22002030, 0x22012030,\n            0x20042010, 0x20052010, 0x22042010, 0x22052010,\n            0x20042030, 0x20052030, 0x22042030, 0x22052030,\n            0x20000010, 0x20010010, 0x22000010, 0x22010010,\n            0x20000030, 0x20010030, 0x22000030, 0x22010030,\n            0x20040010, 0x20050010, 0x22040010, 0x22050010,\n            0x20040030, 0x20050030, 0x22040030, 0x22050030,\n            0x20002010, 0x20012010, 0x22002010, 0x22012010,\n            0x20002030, 0x20012030, 0x22002030, 0x22012030,\n            0x20042010, 0x20052010, 0x22042010, 0x22052010,\n            0x20042030, 0x20052030, 0x22042030, 0x22052030\n        ];\n        static $pc2mapd4 = [\n            0x00000000, 0x00000400, 0x01000000, 0x01000400,\n            0x00000000, 0x00000400, 0x01000000, 0x01000400,\n            0x00000100, 0x00000500, 0x01000100, 0x01000500,\n            0x00000100, 0x00000500, 0x01000100, 0x01000500,\n            0x10000000, 0x10000400, 0x11000000, 0x11000400,\n            0x10000000, 0x10000400, 0x11000000, 0x11000400,\n            0x10000100, 0x10000500, 0x11000100, 0x11000500,\n            0x10000100, 0x10000500, 0x11000100, 0x11000500,\n            0x00080000, 0x00080400, 0x01080000, 0x01080400,\n            0x00080000, 0x00080400, 0x01080000, 0x01080400,\n            0x00080100, 0x00080500, 0x01080100, 0x01080500,\n            0x00080100, 0x00080500, 0x01080100, 0x01080500,\n            0x10080000, 0x10080400, 0x11080000, 0x11080400,\n            0x10080000, 0x10080400, 0x11080000, 0x11080400,\n            0x10080100, 0x10080500, 0x11080100, 0x11080500,\n            0x10080100, 0x10080500, 0x11080100, 0x11080500,\n            0x00000008, 0x00000408, 0x01000008, 0x01000408,\n            0x00000008, 0x00000408, 0x01000008, 0x01000408,\n            0x00000108, 0x00000508, 0x01000108, 0x01000508,\n            0x00000108, 0x00000508, 0x01000108, 0x01000508,\n            0x10000008, 0x10000408, 0x11000008, 0x11000408,\n            0x10000008, 0x10000408, 0x11000008, 0x11000408,\n            0x10000108, 0x10000508, 0x11000108, 0x11000508,\n            0x10000108, 0x10000508, 0x11000108, 0x11000508,\n            0x00080008, 0x00080408, 0x01080008, 0x01080408,\n            0x00080008, 0x00080408, 0x01080008, 0x01080408,\n            0x00080108, 0x00080508, 0x01080108, 0x01080508,\n            0x00080108, 0x00080508, 0x01080108, 0x01080508,\n            0x10080008, 0x10080408, 0x11080008, 0x11080408,\n            0x10080008, 0x10080408, 0x11080008, 0x11080408,\n            0x10080108, 0x10080508, 0x11080108, 0x11080508,\n            0x10080108, 0x10080508, 0x11080108, 0x11080508,\n            0x00001000, 0x00001400, 0x01001000, 0x01001400,\n            0x00001000, 0x00001400, 0x01001000, 0x01001400,\n            0x00001100, 0x00001500, 0x01001100, 0x01001500,\n            0x00001100, 0x00001500, 0x01001100, 0x01001500,\n            0x10001000, 0x10001400, 0x11001000, 0x11001400,\n            0x10001000, 0x10001400, 0x11001000, 0x11001400,\n            0x10001100, 0x10001500, 0x11001100, 0x11001500,\n            0x10001100, 0x10001500, 0x11001100, 0x11001500,\n            0x00081000, 0x00081400, 0x01081000, 0x01081400,\n            0x00081000, 0x00081400, 0x01081000, 0x01081400,\n            0x00081100, 0x00081500, 0x01081100, 0x01081500,\n            0x00081100, 0x00081500, 0x01081100, 0x01081500,\n            0x10081000, 0x10081400, 0x11081000, 0x11081400,\n            0x10081000, 0x10081400, 0x11081000, 0x11081400,\n            0x10081100, 0x10081500, 0x11081100, 0x11081500,\n            0x10081100, 0x10081500, 0x11081100, 0x11081500,\n            0x00001008, 0x00001408, 0x01001008, 0x01001408,\n            0x00001008, 0x00001408, 0x01001008, 0x01001408,\n            0x00001108, 0x00001508, 0x01001108, 0x01001508,\n            0x00001108, 0x00001508, 0x01001108, 0x01001508,\n            0x10001008, 0x10001408, 0x11001008, 0x11001408,\n            0x10001008, 0x10001408, 0x11001008, 0x11001408,\n            0x10001108, 0x10001508, 0x11001108, 0x11001508,\n            0x10001108, 0x10001508, 0x11001108, 0x11001508,\n            0x00081008, 0x00081408, 0x01081008, 0x01081408,\n            0x00081008, 0x00081408, 0x01081008, 0x01081408,\n            0x00081108, 0x00081508, 0x01081108, 0x01081508,\n            0x00081108, 0x00081508, 0x01081108, 0x01081508,\n            0x10081008, 0x10081408, 0x11081008, 0x11081408,\n            0x10081008, 0x10081408, 0x11081008, 0x11081408,\n            0x10081108, 0x10081508, 0x11081108, 0x11081508,\n            0x10081108, 0x10081508, 0x11081108, 0x11081508\n        ];\n\n        $keys = [];\n        for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {\n            // pad the key and remove extra characters as appropriate.\n            $key = str_pad(substr($this->key, $des_round * 8, 8), 8, \"\\0\");\n\n            // Perform the PC/1 transformation and compute C and D.\n            $t = unpack('Nl/Nr', $key);\n            list($l, $r) = [$t['l'], $t['r']];\n            $key = (self::$shuffle[$pc1map[ $r        & 0xFF]] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x00\") |\n                   (self::$shuffle[$pc1map[($r >>  8) & 0xFF]] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x00\") |\n                   (self::$shuffle[$pc1map[($r >> 16) & 0xFF]] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x00\") |\n                   (self::$shuffle[$pc1map[($r >> 24) & 0xFF]] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x00\") |\n                   (self::$shuffle[$pc1map[ $l        & 0xFF]] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x00\") |\n                   (self::$shuffle[$pc1map[($l >>  8) & 0xFF]] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x00\") |\n                   (self::$shuffle[$pc1map[($l >> 16) & 0xFF]] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x00\") |\n                   (self::$shuffle[$pc1map[($l >> 24) & 0xFF]] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00\");\n            $key = unpack('Nc/Nd', $key);\n            $c = ( $key['c'] >> 4) & 0x0FFFFFFF;\n            $d = (($key['d'] >> 4) & 0x0FFFFFF0) | ($key['c'] & 0x0F);\n\n            $keys[$des_round] = [\n                self::ENCRYPT => [],\n                self::DECRYPT => array_fill(0, 32, 0)\n            ];\n            for ($i = 0, $ki = 31; $i < 16; ++$i, $ki -= 2) {\n                $c <<= $shifts[$i];\n                $c = ($c | ($c >> 28)) & 0x0FFFFFFF;\n                $d <<= $shifts[$i];\n                $d = ($d | ($d >> 28)) & 0x0FFFFFFF;\n\n                // Perform the PC-2 transformation.\n                $cp = $pc2mapc1[ $c >> 24        ] | $pc2mapc2[($c >> 16) & 0xFF] |\n                      $pc2mapc3[($c >>  8) & 0xFF] | $pc2mapc4[ $c        & 0xFF];\n                $dp = $pc2mapd1[ $d >> 24        ] | $pc2mapd2[($d >> 16) & 0xFF] |\n                      $pc2mapd3[($d >>  8) & 0xFF] | $pc2mapd4[ $d        & 0xFF];\n\n                // Reorder: odd bytes/even bytes. Push the result in key schedule.\n                $val1 = ( $cp        & intval(0xFF000000)) | (($cp <<  8) & 0x00FF0000) |\n                        (($dp >> 16) & 0x0000FF00) | (($dp >>  8) & 0x000000FF);\n                $val2 = (($cp <<  8) & intval(0xFF000000)) | (($cp << 16) & 0x00FF0000) |\n                        (($dp >>  8) & 0x0000FF00) | ( $dp        & 0x000000FF);\n                $keys[$des_round][self::ENCRYPT][       ] = $val1;\n                $keys[$des_round][self::DECRYPT][$ki - 1] = $val1;\n                $keys[$des_round][self::ENCRYPT][       ] = $val2;\n                $keys[$des_round][self::DECRYPT][$ki    ] = $val2;\n            }\n        }\n\n        switch ($this->des_rounds) {\n            case 3: // 3DES keys\n                $this->keys = [\n                    self::ENCRYPT => array_merge(\n                        $keys[0][self::ENCRYPT],\n                        $keys[1][self::DECRYPT],\n                        $keys[2][self::ENCRYPT]\n                    ),\n                    self::DECRYPT => array_merge(\n                        $keys[2][self::DECRYPT],\n                        $keys[1][self::ENCRYPT],\n                        $keys[0][self::DECRYPT]\n                    )\n                ];\n                break;\n            // case 1: // DES keys\n            default:\n                $this->keys = [\n                    self::ENCRYPT => $keys[0][self::ENCRYPT],\n                    self::DECRYPT => $keys[0][self::DECRYPT]\n                ];\n        }\n    }\n\n    /**\n     * Setup the performance-optimized function for de/encrypt()\n     *\n     * @see Common\\SymmetricKey::setupInlineCrypt()\n     */\n    protected function setupInlineCrypt()\n    {\n        // Engine configuration for:\n        // -  DES ($des_rounds == 1) or\n        // - 3DES ($des_rounds == 3)\n        $des_rounds = $this->des_rounds;\n\n        $init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;\n            if (!$sbox1) {\n                $sbox1 = array_map(\"intval\", self::$sbox1);\n                $sbox2 = array_map(\"intval\", self::$sbox2);\n                $sbox3 = array_map(\"intval\", self::$sbox3);\n                $sbox4 = array_map(\"intval\", self::$sbox4);\n                $sbox5 = array_map(\"intval\", self::$sbox5);\n                $sbox6 = array_map(\"intval\", self::$sbox6);\n                $sbox7 = array_map(\"intval\", self::$sbox7);\n                $sbox8 = array_map(\"intval\", self::$sbox8);'\n                /* Merge $shuffle with $[inv]ipmap */ . '\n                for ($i = 0; $i < 256; ++$i) {\n                    $shuffleip[]    =  self::$shuffle[self::$ipmap[$i]];\n                    $shuffleinvip[] =  self::$shuffle[self::$invipmap[$i]];\n                }\n            }\n        ';\n\n        $k = [\n            self::ENCRYPT => $this->keys[self::ENCRYPT],\n            self::DECRYPT => $this->keys[self::DECRYPT]\n        ];\n        $init_encrypt = '';\n        $init_decrypt = '';\n\n        // Creating code for en- and decryption.\n        $crypt_block = [];\n        foreach ([self::ENCRYPT, self::DECRYPT] as $c) {\n            /* Do the initial IP permutation. */\n            $crypt_block[$c] = '\n                $in = unpack(\"N*\", $in);\n                $l  = $in[1];\n                $r  = $in[2];\n                $in = unpack(\"N*\",\n                    ($shuffleip[ $r        & 0xFF] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\") |\n                    ($shuffleip[($r >>  8) & 0xFF] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") |\n                    ($shuffleip[($r >> 16) & 0xFF] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\") |\n                    ($shuffleip[($r >> 24) & 0xFF] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\") |\n                    ($shuffleip[ $l        & 0xFF] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\") |\n                    ($shuffleip[($l >>  8) & 0xFF] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04\") |\n                    ($shuffleip[($l >> 16) & 0xFF] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\") |\n                    ($shuffleip[($l >> 24) & 0xFF] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\")\n                );\n                ' . /* Extract L0 and R0 */ '\n                $l = $in[1];\n                $r = $in[2];\n            ';\n\n            $l = '$l';\n            $r = '$r';\n\n            // Perform DES or 3DES.\n            for ($ki = -1, $des_round = 0; $des_round < $des_rounds; ++$des_round) {\n                // Perform the 16 steps.\n                for ($i = 0; $i < 16; ++$i) {\n                    // start of \"the Feistel (F) function\" - see the following URL:\n                    // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png\n                    // Merge key schedule.\n                    $crypt_block[$c] .= '\n                        $b1 = ((' . $r . ' >>  3) & 0x1FFFFFFF)  ^ (' . $r . ' << 29) ^ ' . $k[$c][++$ki] . ';\n                        $b2 = ((' . $r . ' >> 31) & 0x00000001)  ^ (' . $r . ' <<  1) ^ ' . $k[$c][++$ki] . ';' .\n                        /* S-box indexing. */\n                        $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^\n                                 $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^\n                                 $sbox5[($b1 >>  8) & 0x3F] ^ $sbox6[($b2 >>  8) & 0x3F] ^\n                                 $sbox7[ $b1        & 0x3F] ^ $sbox8[ $b2        & 0x3F] ^ ' . $l . ';\n                    ';\n                    // end of \"the Feistel (F) function\"\n\n                    // swap L & R\n                    list($l, $r) = [$r, $l];\n                }\n                list($l, $r) = [$r, $l];\n            }\n\n            // Perform the inverse IP permutation.\n            $crypt_block[$c] .= '$in =\n                ($shuffleinvip[($l >> 24) & 0xFF] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\") |\n                ($shuffleinvip[($r >> 24) & 0xFF] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") |\n                ($shuffleinvip[($l >> 16) & 0xFF] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\") |\n                ($shuffleinvip[($r >> 16) & 0xFF] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\") |\n                ($shuffleinvip[($l >>  8) & 0xFF] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\") |\n                ($shuffleinvip[($r >>  8) & 0xFF] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04\") |\n                ($shuffleinvip[ $l        & 0xFF] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\") |\n                ($shuffleinvip[ $r        & 0xFF] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\");\n            ';\n        }\n\n        // Creates the inline-crypt function\n        $this->inline_crypt = $this->createInlineCryptFunction(\n            [\n               'init_crypt'    => $init_crypt,\n               'init_encrypt'  => $init_encrypt,\n               'init_decrypt'  => $init_decrypt,\n               'encrypt_block' => $crypt_block[self::ENCRYPT],\n               'decrypt_block' => $crypt_block[self::DECRYPT]\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS1.php",
    "content": "<?php\n\n/**\n * \"PKCS1\" Formatted EC Key Handler\n *\n * PHP version 5\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN DH PARAMETERS-----\n *\n * Technically, PKCS1 is for RSA keys, only, but we're using PKCS1 to describe\n * DSA, whose format isn't really formally described anywhere, so might as well\n * use it to describe this, too.\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DH\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS1 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * \"PKCS1\" Formatted DH Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS1 extends Progenitor\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        $decoded = ASN1::decodeBER($key);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n\n        $components = ASN1::asn1map($decoded[0], Maps\\DHParameter::MAP);\n        if (!is_array($components)) {\n            throw new \\RuntimeException('Unable to perform ASN1 mapping on parameters');\n        }\n\n        return $components;\n    }\n\n    /**\n     * Convert EC parameters to the appropriate format\n     *\n     * @return string\n     */\n    public static function saveParameters(BigInteger $prime, BigInteger $base, array $options = [])\n    {\n        $params = [\n            'prime' => $prime,\n            'base' => $base\n        ];\n        $params = ASN1::encodeDER($params, Maps\\DHParameter::MAP);\n\n        return \"-----BEGIN DH PARAMETERS-----\\r\\n\" .\n               chunk_split(base64_encode($params), 64) .\n               \"-----END DH PARAMETERS-----\\r\\n\";\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS8.php",
    "content": "<?php\n\n/**\n * PKCS#8 Formatted DH Key Handler\n *\n * PHP version 5\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN ENCRYPTED PRIVATE KEY-----\n * -----BEGIN PRIVATE KEY-----\n * -----BEGIN PUBLIC KEY-----\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DH\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS8 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#8 Formatted DH Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS8 extends Progenitor\n{\n    /**\n     * OID Name\n     *\n     * @var string\n     */\n    const OID_NAME = 'dhKeyAgreement';\n\n    /**\n     * OID Value\n     *\n     * @var string\n     */\n    const OID_VALUE = '1.2.840.113549.1.3.1';\n\n    /**\n     * Child OIDs loaded\n     *\n     * @var bool\n     */\n    protected static $childOIDsLoaded = false;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        $type = isset($key['privateKey']) ? 'privateKey' : 'publicKey';\n\n        $decoded = ASN1::decodeBER($key[$type . 'Algorithm']['parameters']->element);\n        if (empty($decoded)) {\n            throw new \\RuntimeException('Unable to decode BER of parameters');\n        }\n        $components = ASN1::asn1map($decoded[0], Maps\\DHParameter::MAP);\n        if (!is_array($components)) {\n            throw new \\RuntimeException('Unable to perform ASN1 mapping on parameters');\n        }\n\n        $decoded = ASN1::decodeBER($key[$type]);\n        switch (true) {\n            case !isset($decoded):\n            case !isset($decoded[0]['content']):\n            case !$decoded[0]['content'] instanceof BigInteger:\n                throw new \\RuntimeException('Unable to decode BER of parameters');\n        }\n        $components[$type] = $decoded[0]['content'];\n\n        return $components;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $prime\n     * @param BigInteger $base\n     * @param BigInteger $privateKey\n     * @param BigInteger $publicKey\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $prime, BigInteger $base, BigInteger $privateKey, BigInteger $publicKey, $password = '', array $options = [])\n    {\n        $params = [\n            'prime' => $prime,\n            'base' => $base\n        ];\n        $params = ASN1::encodeDER($params, Maps\\DHParameter::MAP);\n        $params = new ASN1\\Element($params);\n        $key = ASN1::encodeDER($privateKey, ['type' => ASN1::TYPE_INTEGER]);\n        return self::wrapPrivateKey($key, [], $params, $password, null, '', $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $prime\n     * @param BigInteger $base\n     * @param BigInteger $publicKey\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $prime, BigInteger $base, BigInteger $publicKey, array $options = [])\n    {\n        $params = [\n            'prime' => $prime,\n            'base' => $base\n        ];\n        $params = ASN1::encodeDER($params, Maps\\DHParameter::MAP);\n        $params = new ASN1\\Element($params);\n        $key = ASN1::encodeDER($publicKey, ['type' => ASN1::TYPE_INTEGER]);\n        return self::wrapPublicKey($key, $params, null, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Parameters.php",
    "content": "<?php\n\n/**\n * DH Parameters\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DH;\n\nuse phpseclib3\\Crypt\\DH;\n\n/**\n * DH Parameters\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class Parameters extends DH\n{\n    /**\n     * Returns the parameters\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type = 'PKCS1', array $options = [])\n    {\n        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');\n\n        return $type::saveParameters($this->prime, $this->base, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PrivateKey.php",
    "content": "<?php\n\n/**\n * DH Private Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DH;\n\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\DH;\n\n/**\n * DH Private Key\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PrivateKey extends DH\n{\n    use Common\\Traits\\PasswordProtected;\n\n    /**\n     * Private Key\n     *\n     * @var \\phpseclib3\\Math\\BigInteger\n     */\n    protected $privateKey;\n\n    /**\n     * Public Key\n     *\n     * @var \\phpseclib3\\Math\\BigInteger\n     */\n    protected $publicKey;\n\n    /**\n     * Returns the public key\n     *\n     * @return PublicKey\n     */\n    public function getPublicKey()\n    {\n        $type = self::validatePlugin('Keys', 'PKCS8', 'savePublicKey');\n\n        if (!isset($this->publicKey)) {\n            $this->publicKey = $this->base->powMod($this->privateKey, $this->prime);\n        }\n\n        $key = $type::savePublicKey($this->prime, $this->base, $this->publicKey);\n\n        return DH::loadFormat('PKCS8', $key);\n    }\n\n    /**\n     * Returns the private key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePrivateKey');\n\n        if (!isset($this->publicKey)) {\n            $this->publicKey = $this->base->powMod($this->privateKey, $this->prime);\n        }\n\n        return $type::savePrivateKey($this->prime, $this->base, $this->privateKey, $this->publicKey, $this->password, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PublicKey.php",
    "content": "<?php\n\n/**\n * DH Public Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DH;\n\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\DH;\n\n/**\n * DH Public Key\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PublicKey extends DH\n{\n    use Common\\Traits\\Fingerprint;\n\n    /**\n     * Returns the public key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePublicKey');\n\n        return $type::savePublicKey($this->prime, $this->base, $this->publicKey, $options);\n    }\n\n    /**\n     * Returns the public key as a BigInteger\n     *\n     * @return \\phpseclib3\\Math\\BigInteger\n     */\n    public function toBigInteger()\n    {\n        return $this->publicKey;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.php",
    "content": "<?php\n\n/**\n * Pure-PHP (EC)DH implementation\n *\n * PHP version 5\n *\n * Here's an example of how to compute a shared secret with this library:\n * <code>\n * <?php\n * include 'vendor/autoload.php';\n *\n * $ourPrivate = \\phpseclib3\\Crypt\\DH::createKey();\n * $secret = DH::computeSecret($ourPrivate, $theirPublic);\n *\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\AsymmetricKey;\nuse phpseclib3\\Crypt\\DH\\Parameters;\nuse phpseclib3\\Crypt\\DH\\PrivateKey;\nuse phpseclib3\\Crypt\\DH\\PublicKey;\nuse phpseclib3\\Exception\\NoKeyLoadedException;\nuse phpseclib3\\Exception\\UnsupportedOperationException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Pure-PHP (EC)DH implementation\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DH extends AsymmetricKey\n{\n    /**\n     * Algorithm Name\n     *\n     * @var string\n     */\n    const ALGORITHM = 'DH';\n\n    /**\n     * DH prime\n     *\n     * @var BigInteger\n     */\n    protected $prime;\n\n    /**\n     * DH Base\n     *\n     * Prime divisor of p-1\n     *\n     * @var BigInteger\n     */\n    protected $base;\n\n    /**\n     * Public Key\n     *\n     * @var BigInteger\n     */\n    protected $publicKey;\n\n    /**\n     * Create DH parameters\n     *\n     * This method is a bit polymorphic. It can take any of the following:\n     *  - two BigInteger's (prime and base)\n     *  - an integer representing the size of the prime in bits (the base is assumed to be 2)\n     *  - a string (eg. diffie-hellman-group14-sha1)\n     *\n     * @return Parameters\n     */\n    public static function createParameters(...$args)\n    {\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('createParameters() should not be called from final classes (' . static::class . ')');\n        }\n\n        $params = new Parameters();\n        if (count($args) == 2 && $args[0] instanceof BigInteger && $args[1] instanceof BigInteger) {\n            //if (!$args[0]->isPrime()) {\n            //    throw new \\InvalidArgumentException('The first parameter should be a prime number');\n            //}\n            $params->prime = $args[0];\n            $params->base = $args[1];\n            return $params;\n        } elseif (count($args) == 1 && is_numeric($args[0])) {\n            $params->prime = BigInteger::randomPrime($args[0]);\n            $params->base = new BigInteger(2);\n            return $params;\n        } elseif (count($args) != 1 || !is_string($args[0])) {\n            throw new \\InvalidArgumentException('Valid parameters are either: two BigInteger\\'s (prime and base), a single integer (the length of the prime; base is assumed to be 2) or a string');\n        }\n        switch ($args[0]) {\n            // see http://tools.ietf.org/html/rfc2409#section-6.2 and\n            // http://tools.ietf.org/html/rfc2412, appendex E\n            case 'diffie-hellman-group1-sha1':\n                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .\n                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .\n                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .\n                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF';\n                break;\n            // see http://tools.ietf.org/html/rfc3526#section-3\n            case 'diffie-hellman-group14-sha1': // 2048-bit MODP Group\n            case 'diffie-hellman-group14-sha256':\n                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .\n                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .\n                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .\n                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .\n                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .\n                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .\n                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .\n                         '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF';\n                break;\n            // see https://tools.ietf.org/html/rfc3526#section-4\n            case 'diffie-hellman-group15-sha512': // 3072-bit MODP Group\n                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .\n                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .\n                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .\n                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .\n                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .\n                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .\n                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .\n                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .\n                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .\n                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .\n                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .\n                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\n                break;\n            // see https://tools.ietf.org/html/rfc3526#section-5\n            case 'diffie-hellman-group16-sha512': // 4096-bit MODP Group\n                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .\n                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .\n                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .\n                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .\n                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .\n                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .\n                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .\n                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .\n                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .\n                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .\n                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .\n                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7' .\n                         '88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8' .\n                         'DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2' .\n                         '233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9' .\n                         '93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF';\n                break;\n            // see https://tools.ietf.org/html/rfc3526#section-6\n            case 'diffie-hellman-group17-sha512': // 6144-bit MODP Group\n                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .\n                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .\n                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .\n                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .\n                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .\n                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .\n                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .\n                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .\n                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .\n                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .\n                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .\n                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7' .\n                         '88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8' .\n                         'DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2' .\n                         '233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9' .\n                         '93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C93402849236C3FAB4D27C7026' .\n                         'C1D4DCB2602646DEC9751E763DBA37BDF8FF9406AD9E530EE5DB382F413001AE' .\n                         'B06A53ED9027D831179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B' .\n                         'DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF5983CA01C64B92EC' .\n                         'F032EA15D1721D03F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E' .\n                         '59E7C97FBEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA' .\n                         'CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58BB7C5DA76' .\n                         'F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632387FE8D76E3C0468' .\n                         '043E8F663F4860EE12BF2D5B0B7474D6E694F91E6DCC4024FFFFFFFFFFFFFFFF';\n                break;\n            // see https://tools.ietf.org/html/rfc3526#section-7\n            case 'diffie-hellman-group18-sha512': // 8192-bit MODP Group\n                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .\n                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .\n                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .\n                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .\n                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .\n                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .\n                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .\n                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .\n                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .\n                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .\n                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .\n                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7' .\n                         '88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8' .\n                         'DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2' .\n                         '233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9' .\n                         '93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C93402849236C3FAB4D27C7026' .\n                         'C1D4DCB2602646DEC9751E763DBA37BDF8FF9406AD9E530EE5DB382F413001AE' .\n                         'B06A53ED9027D831179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B' .\n                         'DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF5983CA01C64B92EC' .\n                         'F032EA15D1721D03F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E' .\n                         '59E7C97FBEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA' .\n                         'CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58BB7C5DA76' .\n                         'F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632387FE8D76E3C0468' .\n                         '043E8F663F4860EE12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4' .\n                         '38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300741FA7BF8AFC47ED' .\n                         '2576F6936BA424663AAB639C5AE4F5683423B4742BF1C978238F16CBE39D652D' .\n                         'E3FDB8BEFC848AD922222E04A4037C0713EB57A81A23F0C73473FC646CEA306B' .\n                         '4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6' .\n                         '6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC50846851D' .\n                         'F9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92' .\n                         '4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E479558E4475677E9AA' .\n                         '9E3050E2765694DFC81F56E880B96E7160C980DD98EDD3DFFFFFFFFFFFFFFFFF';\n                break;\n            default:\n                throw new \\InvalidArgumentException('Invalid named prime provided');\n        }\n\n        $params->prime = new BigInteger($prime, 16);\n        $params->base = new BigInteger(2);\n\n        return $params;\n    }\n\n    /**\n     * Create public / private key pair.\n     *\n     * The rationale for the second parameter is described in http://tools.ietf.org/html/rfc4419#section-6.2 :\n     *\n     * \"To increase the speed of the key exchange, both client and server may\n     *  reduce the size of their private exponents.  It should be at least\n     *  twice as long as the key material that is generated from the shared\n     *  secret.  For more details, see the paper by van Oorschot and Wiener\n     *  [VAN-OORSCHOT].\"\n     *\n     * $length is in bits\n     *\n     * @param Parameters $params\n     * @param int $length optional\n     * @return PrivateKey\n     */\n    public static function createKey(Parameters $params, $length = 0)\n    {\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('createKey() should not be called from final classes (' . static::class . ')');\n        }\n\n        $one = new BigInteger(1);\n        if ($length) {\n            $max = $one->bitwise_leftShift($length);\n            $max = $max->subtract($one);\n        } else {\n            $max = $params->prime->subtract($one);\n        }\n\n        $key = new PrivateKey();\n        $key->prime = $params->prime;\n        $key->base = $params->base;\n        $key->privateKey = BigInteger::randomRange($one, $max);\n        $key->publicKey = $key->base->powMod($key->privateKey, $key->prime);\n        return $key;\n    }\n\n    /**\n     * Compute Shared Secret\n     *\n     * @param PrivateKey|EC $private\n     * @param PublicKey|BigInteger|string $public\n     * @return mixed\n     */\n    public static function computeSecret($private, $public)\n    {\n        if ($private instanceof PrivateKey) { // DH\\PrivateKey\n            switch (true) {\n                case $public instanceof PublicKey:\n                    if (!$private->prime->equals($public->prime) || !$private->base->equals($public->base)) {\n                        throw new \\InvalidArgumentException('The public and private key do not share the same prime and / or base numbers');\n                    }\n                    return $public->publicKey->powMod($private->privateKey, $private->prime)->toBytes(true);\n                case is_string($public):\n                    $public = new BigInteger($public, -256);\n                    // fall-through\n                case $public instanceof BigInteger:\n                    return $public->powMod($private->privateKey, $private->prime)->toBytes(true);\n                default:\n                    throw new \\InvalidArgumentException('$public needs to be an instance of DH\\PublicKey, a BigInteger or a string');\n            }\n        }\n\n        if ($private instanceof EC\\PrivateKey) {\n            switch (true) {\n                case $public instanceof EC\\PublicKey:\n                    $public = $public->getEncodedCoordinates();\n                    // fall-through\n                case is_string($public):\n                    $point = $private->multiply($public);\n                    switch ($private->getCurve()) {\n                        case 'Curve25519':\n                        case 'Curve448':\n                            $secret = $point;\n                            break;\n                        default:\n                            // according to https://www.secg.org/sec1-v2.pdf#page=33 only X is returned\n                            $secret = substr($point, 1, (strlen($point) - 1) >> 1);\n                    }\n                    /*\n                    if (($secret[0] & \"\\x80\") === \"\\x80\") {\n                        $secret = \"\\0$secret\";\n                    }\n                    */\n                    return $secret;\n                default:\n                    throw new \\InvalidArgumentException('$public needs to be an instance of EC\\PublicKey or a string (an encoded coordinate)');\n            }\n        }\n    }\n\n    /**\n     * Load the key\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return AsymmetricKey\n     */\n    public static function load($key, $password = false)\n    {\n        try {\n            return EC::load($key, $password);\n        } catch (NoKeyLoadedException $e) {\n        }\n\n        return parent::load($key, $password);\n    }\n\n    /**\n     * OnLoad Handler\n     *\n     * @return bool\n     */\n    protected static function onLoad(array $components)\n    {\n        if (!isset($components['privateKey']) && !isset($components['publicKey'])) {\n            $new = new Parameters();\n        } else {\n            $new = isset($components['privateKey']) ?\n                new PrivateKey() :\n                new PublicKey();\n        }\n\n        $new->prime = $components['prime'];\n        $new->base = $components['base'];\n\n        if (isset($components['privateKey'])) {\n            $new->privateKey = $components['privateKey'];\n        }\n        if (isset($components['publicKey'])) {\n            $new->publicKey = $components['publicKey'];\n        }\n\n        return $new;\n    }\n\n    /**\n     * Determines which hashing function should be used\n     *\n     * @param string $hash\n     */\n    public function withHash($hash)\n    {\n        throw new UnsupportedOperationException('DH does not use a hash algorithm');\n    }\n\n    /**\n     * Returns the hash algorithm currently being used\n     *\n     */\n    public function getHash()\n    {\n        throw new UnsupportedOperationException('DH does not use a hash algorithm');\n    }\n\n    /**\n     * Returns the parameters\n     *\n     * A public / private key is only returned if the currently loaded \"key\" contains an x or y\n     * value.\n     *\n     * @see self::getPublicKey()\n     * @return mixed\n     */\n    public function getParameters()\n    {\n        $type = DH::validatePlugin('Keys', 'PKCS1', 'saveParameters');\n\n        $key = $type::saveParameters($this->prime, $this->base);\n        return DH::load($key, 'PKCS1');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/OpenSSH.php",
    "content": "<?php\n\n/**\n * OpenSSH Formatted DSA Key Handler\n *\n * PHP version 5\n *\n * Place in $HOME/.ssh/authorized_keys\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\OpenSSH as Progenitor;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * OpenSSH Formatted DSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSH extends Progenitor\n{\n    /**\n     * Supported Key Types\n     *\n     * @var array\n     */\n    protected static $types = ['ssh-dss'];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $parsed = parent::load($key, $password);\n\n        if (isset($parsed['paddedKey'])) {\n            list($type) = Strings::unpackSSH2('s', $parsed['paddedKey']);\n            if ($type != $parsed['type']) {\n                throw new \\RuntimeException(\"The public and private keys are not of the same type ($type vs $parsed[type])\");\n            }\n\n            list($p, $q, $g, $y, $x, $comment) = Strings::unpackSSH2('i5s', $parsed['paddedKey']);\n\n            return compact('p', 'q', 'g', 'y', 'x', 'comment');\n        }\n\n        list($p, $q, $g, $y) = Strings::unpackSSH2('iiii', $parsed['publicKey']);\n\n        $comment = $parsed['comment'];\n\n        return compact('p', 'q', 'g', 'y', 'comment');\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, array $options = [])\n    {\n        if ($q->getLength() != 160) {\n            throw new \\InvalidArgumentException('SSH only supports keys with an N (length of Group Order q) of 160');\n        }\n\n        // from <http://tools.ietf.org/html/rfc4253#page-15>:\n        // string    \"ssh-dss\"\n        // mpint     p\n        // mpint     q\n        // mpint     g\n        // mpint     y\n        $DSAPublicKey = Strings::packSSH2('siiii', 'ssh-dss', $p, $q, $g, $y);\n\n        if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n            return $DSAPublicKey;\n        }\n\n        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;\n        $DSAPublicKey = 'ssh-dss ' . base64_encode($DSAPublicKey) . ' ' . $comment;\n\n        return $DSAPublicKey;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param BigInteger $x\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '', array $options = [])\n    {\n        $publicKey = self::savePublicKey($p, $q, $g, $y, ['binary' => true]);\n        $privateKey = Strings::packSSH2('si5', 'ssh-dss', $p, $q, $g, $y, $x);\n\n        return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.php",
    "content": "<?php\n\n/**\n * PKCS#1 Formatted DSA Key Handler\n *\n * PHP version 5\n *\n * Used by File/X509.php\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN DSA PRIVATE KEY-----\n * -----BEGIN DSA PUBLIC KEY-----\n * -----BEGIN DSA PARAMETERS-----\n *\n * Analogous to ssh-keygen's pem format (as specified by -m)\n *\n * Also, technically, PKCS1 decribes RSA but I am not aware of a formal specification for DSA.\n * The DSA private key format seems to have been adapted from the RSA private key format so\n * we're just re-using that as the name.\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS1 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#1 Formatted DSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS1 extends Progenitor\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        $decoded = ASN1::decodeBER($key);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\DSAParams::MAP);\n        if (is_array($key)) {\n            return $key;\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\DSAPrivateKey::MAP);\n        if (is_array($key)) {\n            return $key;\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\DSAPublicKey::MAP);\n        if (is_array($key)) {\n            return $key;\n        }\n\n        throw new \\RuntimeException('Unable to perform ASN1 mapping');\n    }\n\n    /**\n     * Convert DSA parameters to the appropriate format\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @return string\n     */\n    public static function saveParameters(BigInteger $p, BigInteger $q, BigInteger $g)\n    {\n        $key = [\n            'p' => $p,\n            'q' => $q,\n            'g' => $g\n        ];\n\n        $key = ASN1::encodeDER($key, Maps\\DSAParams::MAP);\n\n        return \"-----BEGIN DSA PARAMETERS-----\\r\\n\" .\n               chunk_split(Strings::base64_encode($key), 64) .\n               \"-----END DSA PARAMETERS-----\\r\\n\";\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param BigInteger $x\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '', array $options = [])\n    {\n        $key = [\n            'version' => 0,\n            'p' => $p,\n            'q' => $q,\n            'g' => $g,\n            'y' => $y,\n            'x' => $x\n        ];\n\n        $key = ASN1::encodeDER($key, Maps\\DSAPrivateKey::MAP);\n\n        return self::wrapPrivateKey($key, 'DSA', $password, $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)\n    {\n        $key = ASN1::encodeDER($y, Maps\\DSAPublicKey::MAP);\n\n        return self::wrapPublicKey($key, 'DSA');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS8.php",
    "content": "<?php\n\n/**\n * PKCS#8 Formatted DSA Key Handler\n *\n * PHP version 5\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN ENCRYPTED PRIVATE KEY-----\n * -----BEGIN PRIVATE KEY-----\n * -----BEGIN PUBLIC KEY-----\n *\n * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8\n * is specific to private keys it's basically creating a DER-encoded wrapper\n * for keys. This just extends that same concept to public keys (much like ssh-keygen)\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS8 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#8 Formatted DSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS8 extends Progenitor\n{\n    /**\n     * OID Name\n     *\n     * @var string\n     */\n    const OID_NAME = 'id-dsa';\n\n    /**\n     * OID Value\n     *\n     * @var string\n     */\n    const OID_VALUE = '1.2.840.10040.4.1';\n\n    /**\n     * Child OIDs loaded\n     *\n     * @var bool\n     */\n    protected static $childOIDsLoaded = false;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        $type = isset($key['privateKey']) ? 'privateKey' : 'publicKey';\n\n        $decoded = ASN1::decodeBER($key[$type . 'Algorithm']['parameters']->element);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER of parameters');\n        }\n        $components = ASN1::asn1map($decoded[0], Maps\\DSAParams::MAP);\n        if (!is_array($components)) {\n            throw new \\RuntimeException('Unable to perform ASN1 mapping on parameters');\n        }\n\n        $decoded = ASN1::decodeBER($key[$type]);\n        if (empty($decoded)) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n\n        $var = $type == 'privateKey' ? 'x' : 'y';\n        $components[$var] = ASN1::asn1map($decoded[0], Maps\\DSAPublicKey::MAP);\n        if (!$components[$var] instanceof BigInteger) {\n            throw new \\RuntimeException('Unable to perform ASN1 mapping');\n        }\n\n        if (isset($key['meta'])) {\n            $components['meta'] = $key['meta'];\n        }\n\n        return $components;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param BigInteger $x\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '', array $options = [])\n    {\n        $params = [\n            'p' => $p,\n            'q' => $q,\n            'g' => $g\n        ];\n        $params = ASN1::encodeDER($params, Maps\\DSAParams::MAP);\n        $params = new ASN1\\Element($params);\n        $key = ASN1::encodeDER($x, Maps\\DSAPublicKey::MAP);\n        return self::wrapPrivateKey($key, [], $params, $password, null, '', $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, array $options = [])\n    {\n        $params = [\n            'p' => $p,\n            'q' => $q,\n            'g' => $g\n        ];\n        $params = ASN1::encodeDER($params, Maps\\DSAParams::MAP);\n        $params = new ASN1\\Element($params);\n        $key = ASN1::encodeDER($y, Maps\\DSAPublicKey::MAP);\n        return self::wrapPublicKey($key, $params, null, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.php",
    "content": "<?php\n\n/**\n * PuTTY Formatted DSA Key Handler\n *\n * puttygen does not generate DSA keys with an N of anything other than 160, however,\n * it can still load them and convert them. PuTTY will load them, too, but SSH servers\n * won't accept them. Since PuTTY formatted keys are primarily used with SSH this makes\n * keys with N > 160 kinda useless, hence this handlers not supporting such keys.\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PuTTY as Progenitor;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PuTTY Formatted DSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PuTTY extends Progenitor\n{\n    /**\n     * Public Handler\n     *\n     * @var string\n     */\n    const PUBLIC_HANDLER = 'phpseclib3\\Crypt\\DSA\\Formats\\Keys\\OpenSSH';\n\n    /**\n     * Algorithm Identifier\n     *\n     * @var array\n     */\n    protected static $types = ['ssh-dss'];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $components = parent::load($key, $password);\n        if (!isset($components['private'])) {\n            return $components;\n        }\n        $type = $components['type'];\n        $comment = $components['comment'];\n        $public = $components['public'];\n        $private = $components['private'];\n        unset($components['public'], $components['private']);\n\n        list($p, $q, $g, $y) = Strings::unpackSSH2('iiii', $public);\n        list($x) = Strings::unpackSSH2('i', $private);\n\n        return compact('p', 'q', 'g', 'y', 'x', 'comment');\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param BigInteger $x\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = false, array $options = [])\n    {\n        if ($q->getLength() != 160) {\n            throw new \\InvalidArgumentException('SSH only supports keys with an N (length of Group Order q) of 160');\n        }\n\n        $public = Strings::packSSH2('iiii', $p, $q, $g, $y);\n        $private = Strings::packSSH2('i', $x);\n\n        return self::wrapPrivateKey($public, $private, 'ssh-dss', $password, $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)\n    {\n        if ($q->getLength() != 160) {\n            throw new \\InvalidArgumentException('SSH only supports keys with an N (length of Group Order q) of 160');\n        }\n\n        return self::wrapPublicKey(Strings::packSSH2('iiii', $p, $q, $g, $y), 'ssh-dss');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/Raw.php",
    "content": "<?php\n\n/**\n * Raw DSA Key Handler\n *\n * PHP version 5\n *\n * Reads and creates arrays as DSA keys\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Keys;\n\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Raw DSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Raw\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param array $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!is_array($key)) {\n            throw new \\UnexpectedValueException('Key should be a array - not a ' . gettype($key));\n        }\n\n        switch (true) {\n            case !isset($key['p']) || !isset($key['q']) || !isset($key['g']):\n            case !$key['p'] instanceof BigInteger:\n            case !$key['q'] instanceof BigInteger:\n            case !$key['g'] instanceof BigInteger:\n            case !isset($key['x']) && !isset($key['y']):\n            case isset($key['x']) && !$key['x'] instanceof BigInteger:\n            case isset($key['y']) && !$key['y'] instanceof BigInteger:\n                throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        $options = ['p' => 1, 'q' => 1, 'g' => 1, 'x' => 1, 'y' => 1];\n\n        return array_intersect_key($key, $options);\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @param BigInteger $x\n     * @param string $password optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '')\n    {\n        return compact('p', 'q', 'g', 'y', 'x');\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)\n    {\n        return compact('p', 'q', 'g', 'y');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/XML.php",
    "content": "<?php\n\n/**\n * XML Formatted DSA Key Handler\n *\n * While XKMS defines a private key format for RSA it does not do so for DSA. Quoting that standard:\n *\n * \"[XKMS] does not specify private key parameters for the DSA signature algorithm since the algorithm only\n *  supports signature modes and so the application of server generated keys and key recovery is of limited\n *  value\"\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\BadConfigurationException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * XML Formatted DSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class XML\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        if (!class_exists('DOMDocument')) {\n            throw new BadConfigurationException('The dom extension is not setup correctly on this system');\n        }\n\n        $use_errors = libxml_use_internal_errors(true);\n\n        $dom = new \\DOMDocument();\n        if (substr($key, 0, 5) != '<?xml') {\n            $key = '<xml>' . $key . '</xml>';\n        }\n        if (!$dom->loadXML($key)) {\n            libxml_use_internal_errors($use_errors);\n            throw new \\UnexpectedValueException('Key does not appear to contain XML');\n        }\n        $xpath = new \\DOMXPath($dom);\n        $keys = ['p', 'q', 'g', 'y', 'j', 'seed', 'pgencounter'];\n        foreach ($keys as $key) {\n            // $dom->getElementsByTagName($key) is case-sensitive\n            $temp = $xpath->query(\"//*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='$key']\");\n            if (!$temp->length) {\n                continue;\n            }\n            $value = new BigInteger(Strings::base64_decode($temp->item(0)->nodeValue), 256);\n            switch ($key) {\n                case 'p': // a prime modulus meeting the [DSS] requirements\n                    // Parameters P, Q, and G can be public and common to a group of users. They might be known\n                    // from application context. As such, they are optional but P and Q must either both appear\n                    // or both be absent\n                    $components['p'] = $value;\n                    break;\n                case 'q': // an integer in the range 2**159 < Q < 2**160 which is a prime divisor of P-1\n                    $components['q'] = $value;\n                    break;\n                case 'g': // an integer with certain properties with respect to P and Q\n                    $components['g'] = $value;\n                    break;\n                case 'y': // G**X mod P (where X is part of the private key and not made public)\n                    $components['y'] = $value;\n                    // the remaining options do not do anything\n                case 'j': // (P - 1) / Q\n                    // Parameter J is available for inclusion solely for efficiency as it is calculatable from\n                    // P and Q\n                case 'seed': // a DSA prime generation seed\n                    // Parameters seed and pgenCounter are used in the DSA prime number generation algorithm\n                    // specified in [DSS]. As such, they are optional but must either both be present or both\n                    // be absent\n                case 'pgencounter': // a DSA prime generation counter\n            }\n        }\n\n        libxml_use_internal_errors($use_errors);\n\n        if (!isset($components['y'])) {\n            throw new \\UnexpectedValueException('Key is missing y component');\n        }\n\n        switch (true) {\n            case !isset($components['p']):\n            case !isset($components['q']):\n            case !isset($components['g']):\n                return ['y' => $components['y']];\n        }\n\n        return $components;\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * See https://www.w3.org/TR/xmldsig-core/#sec-DSAKeyValue\n     *\n     * @param BigInteger $p\n     * @param BigInteger $q\n     * @param BigInteger $g\n     * @param BigInteger $y\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)\n    {\n        return \"<DSAKeyValue>\\r\\n\" .\n               '  <P>' . Strings::base64_encode($p->toBytes()) . \"</P>\\r\\n\" .\n               '  <Q>' . Strings::base64_encode($q->toBytes()) . \"</Q>\\r\\n\" .\n               '  <G>' . Strings::base64_encode($g->toBytes()) . \"</G>\\r\\n\" .\n               '  <Y>' . Strings::base64_encode($y->toBytes()) . \"</Y>\\r\\n\" .\n               '</DSAKeyValue>';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/ASN1.php",
    "content": "<?php\n\n/**\n * ASN1 Signature Handler\n *\n * PHP version 5\n *\n * Handles signatures in the format described in\n * https://tools.ietf.org/html/rfc3279#section-2.2.2\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Signature;\n\nuse phpseclib3\\File\\ASN1 as Encoder;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * ASN1 Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ASN1\n{\n    /**\n     * Loads a signature\n     *\n     * @param string $sig\n     * @return array|bool\n     */\n    public static function load($sig)\n    {\n        if (!is_string($sig)) {\n            return false;\n        }\n\n        $decoded = Encoder::decodeBER($sig);\n        if (empty($decoded)) {\n            return false;\n        }\n        $components = Encoder::asn1map($decoded[0], Maps\\DssSigValue::MAP);\n\n        return $components;\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @param BigInteger $r\n     * @param BigInteger $s\n     * @return string\n     */\n    public static function save(BigInteger $r, BigInteger $s)\n    {\n        return Encoder::encodeDER(compact('r', 's'), Maps\\DssSigValue::MAP);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/Raw.php",
    "content": "<?php\n\n/**\n * Raw DSA Signature Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Signature;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Signature\\Raw as Progenitor;\n\n/**\n * Raw DSA Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Raw extends Progenitor\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/SSH2.php",
    "content": "<?php\n\n/**\n * SSH2 Signature Handler\n *\n * PHP version 5\n *\n * Handles signatures in the format used by SSH2\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA\\Formats\\Signature;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * SSH2 Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SSH2\n{\n    /**\n     * Loads a signature\n     *\n     * @param string $sig\n     * @return mixed\n     */\n    public static function load($sig)\n    {\n        if (!is_string($sig)) {\n            return false;\n        }\n\n        $result = Strings::unpackSSH2('ss', $sig);\n        if ($result === false) {\n            return false;\n        }\n        list($type, $blob) = $result;\n        if ($type != 'ssh-dss' || strlen($blob) != 40) {\n            return false;\n        }\n\n        return [\n            'r' => new BigInteger(substr($blob, 0, 20), 256),\n            's' => new BigInteger(substr($blob, 20), 256)\n        ];\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @param BigInteger $r\n     * @param BigInteger $s\n     * @return string\n     */\n    public static function save(BigInteger $r, BigInteger $s)\n    {\n        if ($r->getLength() > 160 || $s->getLength() > 160) {\n            return false;\n        }\n        return Strings::packSSH2(\n            'ss',\n            'ssh-dss',\n            str_pad($r->toBytes(), 20, \"\\0\", STR_PAD_LEFT) .\n            str_pad($s->toBytes(), 20, \"\\0\", STR_PAD_LEFT)\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Parameters.php",
    "content": "<?php\n\n/**\n * DSA Parameters\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA;\n\nuse phpseclib3\\Crypt\\DSA;\n\n/**\n * DSA Parameters\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class Parameters extends DSA\n{\n    /**\n     * Returns the parameters\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type = 'PKCS1', array $options = [])\n    {\n        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');\n\n        return $type::saveParameters($this->p, $this->q, $this->g, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php",
    "content": "<?php\n\n/**\n * DSA Private Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA;\n\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\DSA;\nuse phpseclib3\\Crypt\\DSA\\Formats\\Signature\\ASN1 as ASN1Signature;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * DSA Private Key\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PrivateKey extends DSA implements Common\\PrivateKey\n{\n    use Common\\Traits\\PasswordProtected;\n\n    /**\n     * DSA secret exponent x\n     *\n     * @var BigInteger\n     */\n    protected $x;\n\n    /**\n     * Returns the public key\n     *\n     * If you do \"openssl rsa -in private.rsa -pubout -outform PEM\" you get a PKCS8 formatted key\n     * that contains a publicKeyAlgorithm AlgorithmIdentifier and a publicKey BIT STRING.\n     * An AlgorithmIdentifier contains an OID and a parameters field. With RSA public keys this\n     * parameters field is NULL. With DSA PKCS8 public keys it is not - it contains the p, q and g\n     * variables. The publicKey BIT STRING contains, simply, the y variable. This can be verified\n     * by getting a DSA PKCS8 public key:\n     *\n     * \"openssl dsa -in private.dsa -pubout -outform PEM\"\n     *\n     * ie. just swap out rsa with dsa in the rsa command above.\n     *\n     * A PKCS1 public key corresponds to the publicKey portion of the PKCS8 key. In the case of RSA\n     * the publicKey portion /is/ the key. In the case of DSA it is not. You cannot verify a signature\n     * without the parameters and the PKCS1 DSA public key format does not include the parameters.\n     *\n     * @see self::getPrivateKey()\n     * @return mixed\n     */\n    public function getPublicKey()\n    {\n        $type = self::validatePlugin('Keys', 'PKCS8', 'savePublicKey');\n\n        if (!isset($this->y)) {\n            $this->y = $this->g->powMod($this->x, $this->p);\n        }\n\n        $key = $type::savePublicKey($this->p, $this->q, $this->g, $this->y);\n\n        return DSA::loadFormat('PKCS8', $key)\n            ->withHash($this->hash->getHash())\n            ->withSignatureFormat($this->shortFormat);\n    }\n\n    /**\n     * Create a signature\n     *\n     * @see self::verify()\n     * @param string $message\n     * @return mixed\n     */\n    public function sign($message)\n    {\n        $format = $this->sigFormat;\n\n        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {\n            $signature = '';\n            $result = openssl_sign($message, $signature, $this->toString('PKCS8'), $this->hash->getHash());\n\n            if ($result) {\n                if ($this->shortFormat == 'ASN1') {\n                    return $signature;\n                }\n\n                $loaded = ASN1Signature::load($signature);\n                $r = $loaded['r'];\n                $s = $loaded['s'];\n\n                return $format::save($r, $s);\n            }\n        }\n\n        $h = $this->hash->hash($message);\n        $h = $this->bits2int($h);\n\n        while (true) {\n            $k = BigInteger::randomRange(self::$one, $this->q->subtract(self::$one));\n            $r = $this->g->powMod($k, $this->p);\n            list(, $r) = $r->divide($this->q);\n            if ($r->equals(self::$zero)) {\n                continue;\n            }\n            $kinv = $k->modInverse($this->q);\n            $temp = $h->add($this->x->multiply($r));\n            $temp = $kinv->multiply($temp);\n            list(, $s) = $temp->divide($this->q);\n            if (!$s->equals(self::$zero)) {\n                break;\n            }\n        }\n\n        // the following is an RFC6979 compliant implementation of deterministic DSA\n        // it's unused because it's mainly intended for use when a good CSPRNG isn't\n        // available. if phpseclib's CSPRNG isn't good then even key generation is\n        // suspect\n        /*\n        $h1 = $this->hash->hash($message);\n        $k = $this->computek($h1);\n        $r = $this->g->powMod($k, $this->p);\n        list(, $r) = $r->divide($this->q);\n        $kinv = $k->modInverse($this->q);\n        $h1 = $this->bits2int($h1);\n        $temp = $h1->add($this->x->multiply($r));\n        $temp = $kinv->multiply($temp);\n        list(, $s) = $temp->divide($this->q);\n        */\n\n        return $format::save($r, $s);\n    }\n\n    /**\n     * Returns the private key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePrivateKey');\n\n        if (!isset($this->y)) {\n            $this->y = $this->g->powMod($this->x, $this->p);\n        }\n\n        return $type::savePrivateKey($this->p, $this->q, $this->g, $this->y, $this->x, $this->password, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.php",
    "content": "<?php\n\n/**\n * DSA Public Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\DSA;\n\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\DSA;\nuse phpseclib3\\Crypt\\DSA\\Formats\\Signature\\ASN1 as ASN1Signature;\n\n/**\n * DSA Public Key\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PublicKey extends DSA implements Common\\PublicKey\n{\n    use Common\\Traits\\Fingerprint;\n\n    /**\n     * Verify a signature\n     *\n     * @see self::verify()\n     * @param string $message\n     * @param string $signature\n     * @return mixed\n     */\n    public function verify($message, $signature)\n    {\n        $format = $this->sigFormat;\n\n        $params = $format::load($signature);\n        if ($params === false || count($params) != 2) {\n            return false;\n        }\n        $r = $params['r'];\n        $s = $params['s'];\n\n        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {\n            $sig = $format != 'ASN1' ? ASN1Signature::save($r, $s) : $signature;\n\n            $result = openssl_verify($message, $sig, $this->toString('PKCS8'), $this->hash->getHash());\n\n            if ($result != -1) {\n                return (bool) $result;\n            }\n        }\n\n        $q_1 = $this->q->subtract(self::$one);\n        if (!$r->between(self::$one, $q_1) || !$s->between(self::$one, $q_1)) {\n            return false;\n        }\n\n        $w = $s->modInverse($this->q);\n        $h = $this->hash->hash($message);\n        $h = $this->bits2int($h);\n        list(, $u1) = $h->multiply($w)->divide($this->q);\n        list(, $u2) = $r->multiply($w)->divide($this->q);\n        $v1 = $this->g->powMod($u1, $this->p);\n        $v2 = $this->y->powMod($u2, $this->p);\n        list(, $v) = $v1->multiply($v2)->divide($this->p);\n        list(, $v) = $v->divide($this->q);\n\n        return $v->equals($r);\n    }\n\n    /**\n     * Returns the public key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePublicKey');\n\n        return $type::savePublicKey($this->p, $this->q, $this->g, $this->y, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.php",
    "content": "<?php\n\n/**\n * Pure-PHP FIPS 186-4 compliant implementation of DSA.\n *\n * PHP version 5\n *\n * Here's an example of how to create signatures and verify signatures with this library:\n * <code>\n * <?php\n * include 'vendor/autoload.php';\n *\n * $private = \\phpseclib3\\Crypt\\DSA::createKey();\n * $public = $private->getPublicKey();\n *\n * $plaintext = 'terrafrost';\n *\n * $signature = $private->sign($plaintext);\n *\n * echo $public->verify($plaintext, $signature) ? 'verified' : 'unverified';\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\AsymmetricKey;\nuse phpseclib3\\Crypt\\DSA\\Parameters;\nuse phpseclib3\\Crypt\\DSA\\PrivateKey;\nuse phpseclib3\\Crypt\\DSA\\PublicKey;\nuse phpseclib3\\Exception\\InsufficientSetupException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Pure-PHP FIPS 186-4 compliant implementation of DSA.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DSA extends AsymmetricKey\n{\n    /**\n     * Algorithm Name\n     *\n     * @var string\n     */\n    const ALGORITHM = 'DSA';\n\n    /**\n     * DSA Prime P\n     *\n     * @var BigInteger\n     */\n    protected $p;\n\n    /**\n     * DSA Group Order q\n     *\n     * Prime divisor of p-1\n     *\n     * @var BigInteger\n     */\n    protected $q;\n\n    /**\n     * DSA Group Generator G\n     *\n     * @var BigInteger\n     */\n    protected $g;\n\n    /**\n     * DSA public key value y\n     *\n     * @var BigInteger\n     */\n    protected $y;\n\n    /**\n     * Signature Format\n     *\n     * @var string\n     */\n    protected $sigFormat;\n\n    /**\n     * Signature Format (Short)\n     *\n     * @var string\n     */\n    protected $shortFormat;\n\n    /**\n     * Create DSA parameters\n     *\n     * @param int $L\n     * @param int $N\n     * @return DSA|bool\n     */\n    public static function createParameters($L = 2048, $N = 224)\n    {\n        self::initialize_static_variables();\n\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('createParameters() should not be called from final classes (' . static::class . ')');\n        }\n\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n\n        switch (true) {\n            case $N == 160:\n            /*\n              in FIPS 186-1 and 186-2 N was fixed at 160 whereas K had an upper bound of 1024.\n              RFC 4253 (SSH Transport Layer Protocol) references FIPS 186-2 and as such most\n              SSH DSA implementations only support keys with an N of 160.\n              puttygen let's you set the size of L (but not the size of N) and uses 2048 as the\n              default L value. that's not really compliant with any of the FIPS standards, however,\n              for the purposes of maintaining compatibility with puttygen, we'll support it\n            */\n            //case ($L >= 512 || $L <= 1024) && (($L & 0x3F) == 0) && $N == 160:\n            // FIPS 186-3 changed this as follows:\n            //case $L == 1024 && $N == 160:\n            case $L == 2048 && $N == 224:\n            case $L == 2048 && $N == 256:\n            case $L == 3072 && $N == 256:\n                break;\n            default:\n                throw new \\InvalidArgumentException('Invalid values for N and L');\n        }\n\n        $two = new BigInteger(2);\n\n        $q = BigInteger::randomPrime($N);\n        $divisor = $q->multiply($two);\n\n        do {\n            $x = BigInteger::random($L);\n            list(, $c) = $x->divide($divisor);\n            $p = $x->subtract($c->subtract(self::$one));\n        } while ($p->getLength() != $L || !$p->isPrime());\n\n        $p_1 = $p->subtract(self::$one);\n        list($e) = $p_1->divide($q);\n\n        // quoting http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf#page=50 ,\n        // \"h could be obtained from a random number generator or from a counter that\n        //  changes after each use\". PuTTY (sshdssg.c) starts h off at 1 and increments\n        // it on each loop. wikipedia says \"commonly h = 2 is used\" so we'll just do that\n        $h = clone $two;\n        while (true) {\n            $g = $h->powMod($e, $p);\n            if (!$g->equals(self::$one)) {\n                break;\n            }\n            $h = $h->add(self::$one);\n        }\n\n        $dsa = new Parameters();\n        $dsa->p = $p;\n        $dsa->q = $q;\n        $dsa->g = $g;\n\n        return $dsa;\n    }\n\n    /**\n     * Create public / private key pair.\n     *\n     * This method is a bit polymorphic. It can take a DSA/Parameters object, L / N as two distinct parameters or\n     * no parameters (at which point L and N will be generated with this method)\n     *\n     * Returns the private key, from which the publickey can be extracted\n     *\n     * @param int[] ...$args\n     * @return PrivateKey\n     */\n    public static function createKey(...$args)\n    {\n        self::initialize_static_variables();\n\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('createKey() should not be called from final classes (' . static::class . ')');\n        }\n\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n\n        if (count($args) == 2 && is_int($args[0]) && is_int($args[1])) {\n            $params = self::createParameters($args[0], $args[1]);\n        } elseif (count($args) == 1 && $args[0] instanceof Parameters) {\n            $params = $args[0];\n        } elseif (!count($args)) {\n            $params = self::createParameters();\n        } else {\n            throw new InsufficientSetupException('Valid parameters are either two integers (L and N), a single DSA object or no parameters at all.');\n        }\n\n        $private = new PrivateKey();\n        $private->p = $params->p;\n        $private->q = $params->q;\n        $private->g = $params->g;\n\n        $private->x = BigInteger::randomRange(self::$one, $private->q->subtract(self::$one));\n        $private->y = $private->g->powMod($private->x, $private->p);\n\n        //$public = clone $private;\n        //unset($public->x);\n\n        return $private\n            ->withHash($params->hash->getHash())\n            ->withSignatureFormat($params->shortFormat);\n    }\n\n    /**\n     * OnLoad Handler\n     *\n     * @return bool\n     */\n    protected static function onLoad(array $components)\n    {\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n\n        if (!isset($components['x']) && !isset($components['y'])) {\n            $new = new Parameters();\n        } elseif (isset($components['x'])) {\n            $new = new PrivateKey();\n            $new->x = $components['x'];\n        } else {\n            $new = new PublicKey();\n        }\n\n        $new->p = $components['p'];\n        $new->q = $components['q'];\n        $new->g = $components['g'];\n\n        if (isset($components['y'])) {\n            $new->y = $components['y'];\n        }\n\n        return $new;\n    }\n\n    /**\n     * Constructor\n     *\n     * PublicKey and PrivateKey objects can only be created from abstract RSA class\n     */\n    protected function __construct()\n    {\n        $this->sigFormat = self::validatePlugin('Signature', 'ASN1');\n        $this->shortFormat = 'ASN1';\n\n        parent::__construct();\n    }\n\n    /**\n     * Returns the key size\n     *\n     * More specifically, this L (the length of DSA Prime P) and N (the length of DSA Group Order q)\n     *\n     * @return array\n     */\n    public function getLength()\n    {\n        return ['L' => $this->p->getLength(), 'N' => $this->q->getLength()];\n    }\n\n    /**\n     * Returns the current engine being used\n     *\n     * @see self::useInternalEngine()\n     * @see self::useBestEngine()\n     * @return string\n     */\n    public function getEngine()\n    {\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n        return self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods()) ?\n            'OpenSSL' : 'PHP';\n    }\n\n    /**\n     * Returns the parameters\n     *\n     * A public / private key is only returned if the currently loaded \"key\" contains an x or y\n     * value.\n     *\n     * @see self::getPublicKey()\n     * @return mixed\n     */\n    public function getParameters()\n    {\n        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');\n\n        $key = $type::saveParameters($this->p, $this->q, $this->g);\n        return DSA::load($key, 'PKCS1')\n            ->withHash($this->hash->getHash())\n            ->withSignatureFormat($this->shortFormat);\n    }\n\n    /**\n     * Determines the signature padding mode\n     *\n     * Valid values are: ASN1, SSH2, Raw\n     *\n     * @param string $format\n     */\n    public function withSignatureFormat($format)\n    {\n        $new = clone $this;\n        $new->shortFormat = $format;\n        $new->sigFormat = self::validatePlugin('Signature', $format);\n        return $new;\n    }\n\n    /**\n     * Returns the signature format currently being used\n     *\n     */\n    public function getSignatureFormat()\n    {\n        return $this->shortFormat;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Base.php",
    "content": "<?php\n\n/**\n * Curve methods common to all curves\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\BaseCurves;\n\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Base\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Base\n{\n    /**\n     * The Order\n     *\n     * @var BigInteger\n     */\n    protected $order;\n\n    /**\n     * Finite Field Integer factory\n     *\n     * @var FiniteField\\Integer\n     */\n    protected $factory;\n\n    /**\n     * Returns a random integer\n     *\n     * @return object\n     */\n    public function randomInteger()\n    {\n        return $this->factory->randomInteger();\n    }\n\n    /**\n     * Converts a BigInteger to a FiniteField\\Integer integer\n     *\n     * @return object\n     */\n    public function convertInteger(BigInteger $x)\n    {\n        return $this->factory->newInteger($x);\n    }\n\n    /**\n     * Returns the length, in bytes, of the modulo\n     *\n     * @return integer\n     */\n    public function getLengthInBytes()\n    {\n        return $this->factory->getLengthInBytes();\n    }\n\n    /**\n     * Returns the length, in bits, of the modulo\n     *\n     * @return integer\n     */\n    public function getLength()\n    {\n        return $this->factory->getLength();\n    }\n\n    /**\n     * Multiply a point on the curve by a scalar\n     *\n     * Uses the montgomery ladder technique as described here:\n     *\n     * https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Montgomery_ladder\n     * https://github.com/phpecc/phpecc/issues/16#issuecomment-59176772\n     *\n     * @return array\n     */\n    public function multiplyPoint(array $p, BigInteger $d)\n    {\n        $alreadyInternal = isset($p[2]);\n        $r = $alreadyInternal ?\n            [[], $p] :\n            [[], $this->convertToInternal($p)];\n\n        $d = $d->toBits();\n        for ($i = 0; $i < strlen($d); $i++) {\n            $d_i = (int) $d[$i];\n            $r[1 - $d_i] = $this->addPoint($r[0], $r[1]);\n            $r[$d_i] = $this->doublePoint($r[$d_i]);\n        }\n\n        return $alreadyInternal ? $r[0] : $this->convertToAffine($r[0]);\n    }\n\n    /**\n     * Creates a random scalar multiplier\n     *\n     * @return BigInteger\n     */\n    public function createRandomMultiplier()\n    {\n        static $one;\n        if (!isset($one)) {\n            $one = new BigInteger(1);\n        }\n\n        return BigInteger::randomRange($one, $this->order->subtract($one));\n    }\n\n    /**\n     * Performs range check\n     */\n    public function rangeCheck(BigInteger $x)\n    {\n        static $zero;\n        if (!isset($zero)) {\n            $zero = new BigInteger();\n        }\n\n        if (!isset($this->order)) {\n            throw new \\RuntimeException('setOrder needs to be called before this method');\n        }\n        if ($x->compare($this->order) > 0 || $x->compare($zero) <= 0) {\n            throw new \\RangeException('x must be between 1 and the order of the curve');\n        }\n    }\n\n    /**\n     * Sets the Order\n     */\n    public function setOrder(BigInteger $order)\n    {\n        $this->order = $order;\n    }\n\n    /**\n     * Returns the Order\n     *\n     * @return BigInteger\n     */\n    public function getOrder()\n    {\n        return $this->order;\n    }\n\n    /**\n     * Use a custom defined modular reduction function\n     *\n     * @return object\n     */\n    public function setReduction(callable $func)\n    {\n        $this->factory->setReduction($func);\n    }\n\n    /**\n     * Returns the affine point\n     *\n     * @return object[]\n     */\n    public function convertToAffine(array $p)\n    {\n        return $p;\n    }\n\n    /**\n     * Converts an affine point to a jacobian coordinate\n     *\n     * @return object[]\n     */\n    public function convertToInternal(array $p)\n    {\n        return $p;\n    }\n\n    /**\n     * Negates a point\n     *\n     * @return object[]\n     */\n    public function negatePoint(array $p)\n    {\n        $temp = [\n            $p[0],\n            $p[1]->negate()\n        ];\n        if (isset($p[2])) {\n            $temp[] = $p[2];\n        }\n        return $temp;\n    }\n\n    /**\n     * Multiply and Add Points\n     *\n     * @return int[]\n     */\n    public function multiplyAddPoints(array $points, array $scalars)\n    {\n        $p1 = $this->convertToInternal($points[0]);\n        $p2 = $this->convertToInternal($points[1]);\n        $p1 = $this->multiplyPoint($p1, $scalars[0]);\n        $p2 = $this->multiplyPoint($p2, $scalars[1]);\n        $r = $this->addPoint($p1, $p2);\n        return $this->convertToAffine($r);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Binary.php",
    "content": "<?php\n\n/**\n * Curves over y^2 + x*y = x^3 + a*x^2 + b\n *\n * These are curves used in SEC 2 over prime fields: http://www.secg.org/SEC2-Ver-1.0.pdf\n * The curve is a weierstrass curve with a[3] and a[2] set to 0.\n *\n * Uses Jacobian Coordinates for speed if able:\n *\n * https://en.wikipedia.org/wiki/Jacobian_curve\n * https://en.wikibooks.org/wiki/Cryptography/Prime_Curve/Jacobian_Coordinates\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\BaseCurves;\n\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\BinaryField;\nuse phpseclib3\\Math\\BinaryField\\Integer as BinaryInteger;\n\n/**\n * Curves over y^2 + x*y = x^3 + a*x^2 + b\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Binary extends Base\n{\n    /**\n     * Binary Field Integer factory\n     *\n     * @var BinaryField\n     */\n    protected $factory;\n\n    /**\n     * Cofficient for x^1\n     *\n     * @var object\n     */\n    protected $a;\n\n    /**\n     * Cofficient for x^0\n     *\n     * @var object\n     */\n    protected $b;\n\n    /**\n     * Base Point\n     *\n     * @var object\n     */\n    protected $p;\n\n    /**\n     * The number one over the specified finite field\n     *\n     * @var object\n     */\n    protected $one;\n\n    /**\n     * The modulo\n     *\n     * @var BigInteger\n     */\n    protected $modulo;\n\n    /**\n     * The Order\n     *\n     * @var BigInteger\n     */\n    protected $order;\n\n    /**\n     * Sets the modulo\n     */\n    public function setModulo(...$modulo)\n    {\n        $this->modulo = $modulo;\n        $this->factory = new BinaryField(...$modulo);\n\n        $this->one = $this->factory->newInteger(\"\\1\");\n    }\n\n    /**\n     * Set coefficients a and b\n     *\n     * @param string $a\n     * @param string $b\n     */\n    public function setCoefficients($a, $b)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->a = $this->factory->newInteger(pack('H*', $a));\n        $this->b = $this->factory->newInteger(pack('H*', $b));\n    }\n\n    /**\n     * Set x and y coordinates for the base point\n     *\n     * @param string|BinaryInteger $x\n     * @param string|BinaryInteger $y\n     */\n    public function setBasePoint($x, $y)\n    {\n        switch (true) {\n            case !is_string($x) && !$x instanceof BinaryInteger:\n                throw new \\UnexpectedValueException('Argument 1 passed to Binary::setBasePoint() must be a string or an instance of BinaryField\\Integer');\n            case !is_string($y) && !$y instanceof BinaryInteger:\n                throw new \\UnexpectedValueException('Argument 2 passed to Binary::setBasePoint() must be a string or an instance of BinaryField\\Integer');\n        }\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->p = [\n            is_string($x) ? $this->factory->newInteger(pack('H*', $x)) : $x,\n            is_string($y) ? $this->factory->newInteger(pack('H*', $y)) : $y\n        ];\n    }\n\n    /**\n     * Retrieve the base point as an array\n     *\n     * @return array\n     */\n    public function getBasePoint()\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        /*\n        if (!isset($this->p)) {\n            throw new \\RuntimeException('setBasePoint needs to be called before this method');\n        }\n        */\n        return $this->p;\n    }\n\n    /**\n     * Adds two points on the curve\n     *\n     * @return FiniteField[]\n     */\n    public function addPoint(array $p, array $q)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p) || !count($q)) {\n            if (count($q)) {\n                return $q;\n            }\n            if (count($p)) {\n                return $p;\n            }\n            return [];\n        }\n\n        if (!isset($p[2]) || !isset($q[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to \"Jacobi\" coordinates or vice versa');\n        }\n\n        if ($p[0]->equals($q[0])) {\n            return !$p[1]->equals($q[1]) ? [] : $this->doublePoint($p);\n        }\n\n        // formulas from http://hyperelliptic.org/EFD/g12o/auto-shortw-jacobian.html\n\n        list($x1, $y1, $z1) = $p;\n        list($x2, $y2, $z2) = $q;\n\n        $o1 = $z1->multiply($z1);\n        $b = $x2->multiply($o1);\n\n        if ($z2->equals($this->one)) {\n            $d = $y2->multiply($o1)->multiply($z1);\n            $e = $x1->add($b);\n            $f = $y1->add($d);\n            $z3 = $e->multiply($z1);\n            $h = $f->multiply($x2)->add($z3->multiply($y2));\n            $i = $f->add($z3);\n            $g = $z3->multiply($z3);\n            $p1 = $this->a->multiply($g);\n            $p2 = $f->multiply($i);\n            $p3 = $e->multiply($e)->multiply($e);\n            $x3 = $p1->add($p2)->add($p3);\n            $y3 = $i->multiply($x3)->add($g->multiply($h));\n\n            return [$x3, $y3, $z3];\n        }\n\n        $o2 = $z2->multiply($z2);\n        $a = $x1->multiply($o2);\n        $c = $y1->multiply($o2)->multiply($z2);\n        $d = $y2->multiply($o1)->multiply($z1);\n        $e = $a->add($b);\n        $f = $c->add($d);\n        $g = $e->multiply($z1);\n        $h = $f->multiply($x2)->add($g->multiply($y2));\n        $z3 = $g->multiply($z2);\n        $i = $f->add($z3);\n        $p1 = $this->a->multiply($z3->multiply($z3));\n        $p2 = $f->multiply($i);\n        $p3 = $e->multiply($e)->multiply($e);\n        $x3 = $p1->add($p2)->add($p3);\n        $y3 = $i->multiply($x3)->add($g->multiply($g)->multiply($h));\n\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Doubles a point on a curve\n     *\n     * @return FiniteField[]\n     */\n    public function doublePoint(array $p)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p)) {\n            return [];\n        }\n\n        if (!isset($p[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to \"Jacobi\" coordinates or vice versa');\n        }\n\n        // formulas from http://hyperelliptic.org/EFD/g12o/auto-shortw-jacobian.html\n\n        list($x1, $y1, $z1) = $p;\n\n        $a = $x1->multiply($x1);\n        $b = $a->multiply($a);\n\n        if ($z1->equals($this->one)) {\n            $x3 = $b->add($this->b);\n            $z3 = clone $x1;\n            $p1 = $a->add($y1)->add($z3)->multiply($this->b);\n            $p2 = $a->add($y1)->multiply($b);\n            $y3 = $p1->add($p2);\n\n            return [$x3, $y3, $z3];\n        }\n\n        $c = $z1->multiply($z1);\n        $d = $c->multiply($c);\n        $x3 = $b->add($this->b->multiply($d->multiply($d)));\n        $z3 = $x1->multiply($c);\n        $p1 = $b->multiply($z3);\n        $p2 = $a->add($y1->multiply($z1))->add($z3)->multiply($x3);\n        $y3 = $p1->add($p2);\n\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Returns the X coordinate and the derived Y coordinate\n     *\n     * Not supported because it is covered by patents.\n     * Quoting https://www.openssl.org/docs/man1.1.0/apps/ecparam.html ,\n     *\n     * \"Due to patent issues the compressed option is disabled by default for binary curves\n     *  and can be enabled by defining the preprocessor macro OPENSSL_EC_BIN_PT_COMP at\n     *  compile time.\"\n     *\n     * @return array\n     */\n    public function derivePoint($m)\n    {\n        throw new \\RuntimeException('Point compression on binary finite field elliptic curves is not supported');\n    }\n\n    /**\n     * Tests whether or not the x / y values satisfy the equation\n     *\n     * @return boolean\n     */\n    public function verifyPoint(array $p)\n    {\n        list($x, $y) = $p;\n        $lhs = $y->multiply($y);\n        $lhs = $lhs->add($x->multiply($y));\n        $x2 = $x->multiply($x);\n        $x3 = $x2->multiply($x);\n        $rhs = $x3->add($this->a->multiply($x2))->add($this->b);\n\n        return $lhs->equals($rhs);\n    }\n\n    /**\n     * Returns the modulo\n     *\n     * @return BigInteger\n     */\n    public function getModulo()\n    {\n        return $this->modulo;\n    }\n\n    /**\n     * Returns the a coefficient\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer\n     */\n    public function getA()\n    {\n        return $this->a;\n    }\n\n    /**\n     * Returns the a coefficient\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer\n     */\n    public function getB()\n    {\n        return $this->b;\n    }\n\n    /**\n     * Returns the affine point\n     *\n     * A Jacobian Coordinate is of the form (x, y, z).\n     * To convert a Jacobian Coordinate to an Affine Point\n     * you do (x / z^2, y / z^3)\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer[]\n     */\n    public function convertToAffine(array $p)\n    {\n        if (!isset($p[2])) {\n            return $p;\n        }\n        list($x, $y, $z) = $p;\n        $z = $this->one->divide($z);\n        $z2 = $z->multiply($z);\n        return [\n            $x->multiply($z2),\n            $y->multiply($z2)->multiply($z)\n        ];\n    }\n\n    /**\n     * Converts an affine point to a jacobian coordinate\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer[]\n     */\n    public function convertToInternal(array $p)\n    {\n        if (isset($p[2])) {\n            return $p;\n        }\n\n        $p[2] = clone $this->one;\n        $p['fresh'] = true;\n        return $p;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/KoblitzPrime.php",
    "content": "<?php\n\n/**\n * Generalized Koblitz Curves over y^2 = x^3 + b.\n *\n * According to http://www.secg.org/SEC2-Ver-1.0.pdf Koblitz curves are over the GF(2**m)\n * finite field. Both the $a$ and $b$ coefficients are either 0 or 1. However, SEC2\n * generalizes the definition to include curves over GF(P) \"which possess an efficiently\n * computable endomorphism\".\n *\n * For these generalized Koblitz curves $b$ doesn't have to be 0 or 1. Whether or not $a$\n * has any restrictions on it is unclear, however, for all the GF(P) Koblitz curves defined\n * in SEC2 v1.0 $a$ is $0$ so all of the methods defined herein will assume that it is.\n *\n * I suppose we could rename the $b$ coefficient to $a$, however, the documentation refers\n * to $b$ so we'll just keep it.\n *\n * If a later version of SEC2 comes out wherein some $a$ values are non-zero we can create a\n * new method for those. eg. KoblitzA1Prime.php or something.\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\BaseCurves;\n\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\PrimeField;\n\n/**\n * Curves over y^2 = x^3 + b\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass KoblitzPrime extends Prime\n{\n    /**\n     * Basis\n     *\n     * @var list<array{a: BigInteger, b: BigInteger}>\n     */\n    protected $basis;\n\n    /**\n     * Beta\n     *\n     * @var PrimeField\\Integer\n     */\n    protected $beta;\n\n    // don't overwrite setCoefficients() with one that only accepts one parameter so that\n    // one might be able to switch between KoblitzPrime and Prime more easily (for benchmarking\n    // purposes).\n\n    /**\n     * Multiply and Add Points\n     *\n     * Uses a efficiently computable endomorphism to achieve a slight speedup\n     *\n     * Adapted from:\n     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/curve/short.js#L219\n     *\n     * @return int[]\n     */\n    public function multiplyAddPoints(array $points, array $scalars)\n    {\n        static $zero, $one, $two;\n        if (!isset($two)) {\n            $two = new BigInteger(2);\n            $one = new BigInteger(1);\n        }\n\n        if (!isset($this->beta)) {\n            // get roots\n            $inv = $this->one->divide($this->two)->negate();\n            $s = $this->three->negate()->squareRoot()->multiply($inv);\n            $betas = [\n                $inv->add($s),\n                $inv->subtract($s)\n            ];\n            $this->beta = $betas[0]->compare($betas[1]) < 0 ? $betas[0] : $betas[1];\n            //echo strtoupper($this->beta->toHex(true)) . \"\\n\"; exit;\n        }\n\n        if (!isset($this->basis)) {\n            $factory = new PrimeField($this->order);\n            $tempOne = $factory->newInteger($one);\n            $tempTwo = $factory->newInteger($two);\n            $tempThree = $factory->newInteger(new BigInteger(3));\n\n            $inv = $tempOne->divide($tempTwo)->negate();\n            $s = $tempThree->negate()->squareRoot()->multiply($inv);\n\n            $lambdas = [\n                $inv->add($s),\n                $inv->subtract($s)\n            ];\n\n            $lhs = $this->multiplyPoint($this->p, $lambdas[0])[0];\n            $rhs = $this->p[0]->multiply($this->beta);\n            $lambda = $lhs->equals($rhs) ? $lambdas[0] : $lambdas[1];\n\n            $this->basis = static::extendedGCD($lambda->toBigInteger(), $this->order);\n            ///*\n            foreach ($this->basis as $basis) {\n                echo strtoupper($basis['a']->toHex(true)) . \"\\n\";\n                echo strtoupper($basis['b']->toHex(true)) . \"\\n\\n\";\n            }\n            exit;\n            //*/\n        }\n\n        $npoints = $nscalars = [];\n        for ($i = 0; $i < count($points); $i++) {\n            $p = $points[$i];\n            $k = $scalars[$i]->toBigInteger();\n\n            // begin split\n            list($v1, $v2) = $this->basis;\n\n            $c1 = $v2['b']->multiply($k);\n            list($c1, $r) = $c1->divide($this->order);\n            if ($this->order->compare($r->multiply($two)) <= 0) {\n                $c1 = $c1->add($one);\n            }\n\n            $c2 = $v1['b']->negate()->multiply($k);\n            list($c2, $r) = $c2->divide($this->order);\n            if ($this->order->compare($r->multiply($two)) <= 0) {\n                $c2 = $c2->add($one);\n            }\n\n            $p1 = $c1->multiply($v1['a']);\n            $p2 = $c2->multiply($v2['a']);\n            $q1 = $c1->multiply($v1['b']);\n            $q2 = $c2->multiply($v2['b']);\n\n            $k1 = $k->subtract($p1)->subtract($p2);\n            $k2 = $q1->add($q2)->negate();\n            // end split\n\n            $beta = [\n                $p[0]->multiply($this->beta),\n                $p[1],\n                clone $this->one\n            ];\n\n            if (isset($p['naf'])) {\n                $beta['naf'] = array_map(function ($p) {\n                    return [\n                        $p[0]->multiply($this->beta),\n                        $p[1],\n                        clone $this->one\n                    ];\n                }, $p['naf']);\n                $beta['nafwidth'] = $p['nafwidth'];\n            }\n\n            if ($k1->isNegative()) {\n                $k1 = $k1->negate();\n                $p = $this->negatePoint($p);\n            }\n\n            if ($k2->isNegative()) {\n                $k2 = $k2->negate();\n                $beta = $this->negatePoint($beta);\n            }\n\n            $pos = 2 * $i;\n            $npoints[$pos] = $p;\n            $nscalars[$pos] = $this->factory->newInteger($k1);\n\n            $pos++;\n            $npoints[$pos] = $beta;\n            $nscalars[$pos] = $this->factory->newInteger($k2);\n        }\n\n        return parent::multiplyAddPoints($npoints, $nscalars);\n    }\n\n    /**\n     * Returns the numerator and denominator of the slope\n     *\n     * @return FiniteField[]\n     */\n    protected function doublePointHelper(array $p)\n    {\n        $numerator = $this->three->multiply($p[0])->multiply($p[0]);\n        $denominator = $this->two->multiply($p[1]);\n        return [$numerator, $denominator];\n    }\n\n    /**\n     * Doubles a jacobian coordinate on the curve\n     *\n     * See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianDoublePoint(array $p)\n    {\n        list($x1, $y1, $z1) = $p;\n        $a = $x1->multiply($x1);\n        $b = $y1->multiply($y1);\n        $c = $b->multiply($b);\n        $d = $x1->add($b);\n        $d = $d->multiply($d)->subtract($a)->subtract($c)->multiply($this->two);\n        $e = $this->three->multiply($a);\n        $f = $e->multiply($e);\n        $x3 = $f->subtract($this->two->multiply($d));\n        $y3 = $e->multiply($d->subtract($x3))->subtract(\n            $this->eight->multiply($c)\n        );\n        $z3 = $this->two->multiply($y1)->multiply($z1);\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Doubles a \"fresh\" jacobian coordinate on the curve\n     *\n     * See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianDoublePointMixed(array $p)\n    {\n        list($x1, $y1) = $p;\n        $xx = $x1->multiply($x1);\n        $yy = $y1->multiply($y1);\n        $yyyy = $yy->multiply($yy);\n        $s = $x1->add($yy);\n        $s = $s->multiply($s)->subtract($xx)->subtract($yyyy)->multiply($this->two);\n        $m = $this->three->multiply($xx);\n        $t = $m->multiply($m)->subtract($this->two->multiply($s));\n        $x3 = $t;\n        $y3 = $s->subtract($t);\n        $y3 = $m->multiply($y3)->subtract($this->eight->multiply($yyyy));\n        $z3 = $this->two->multiply($y1);\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Tests whether or not the x / y values satisfy the equation\n     *\n     * @return boolean\n     */\n    public function verifyPoint(array $p)\n    {\n        list($x, $y) = $p;\n        $lhs = $y->multiply($y);\n        $temp = $x->multiply($x)->multiply($x);\n        $rhs = $temp->add($this->b);\n\n        return $lhs->equals($rhs);\n    }\n\n    /**\n     * Calculates the parameters needed from the Euclidean algorithm as discussed at\n     * http://diamond.boisestate.edu/~liljanab/MATH308/GuideToECC.pdf#page=148\n     *\n     * @param BigInteger $u\n     * @param BigInteger $v\n     * @return BigInteger[]\n     */\n    protected static function extendedGCD(BigInteger $u, BigInteger $v)\n    {\n        $one = new BigInteger(1);\n        $zero = new BigInteger();\n\n        $a = clone $one;\n        $b = clone $zero;\n        $c = clone $zero;\n        $d = clone $one;\n\n        $stop = $v->bitwise_rightShift($v->getLength() >> 1);\n\n        $a1 = clone $zero;\n        $b1 = clone $zero;\n        $a2 = clone $zero;\n        $b2 = clone $zero;\n\n        $postGreatestIndex = 0;\n\n        while (!$v->equals($zero)) {\n            list($q) = $u->divide($v);\n\n            $temp = $u;\n            $u = $v;\n            $v = $temp->subtract($v->multiply($q));\n\n            $temp = $a;\n            $a = $c;\n            $c = $temp->subtract($a->multiply($q));\n\n            $temp = $b;\n            $b = $d;\n            $d = $temp->subtract($b->multiply($q));\n\n            if ($v->compare($stop) > 0) {\n                $a0 = $v;\n                $b0 = $c;\n            } else {\n                $postGreatestIndex++;\n            }\n\n            if ($postGreatestIndex == 1) {\n                $a1 = $v;\n                $b1 = $c->negate();\n            }\n\n            if ($postGreatestIndex == 2) {\n                $rhs = $a0->multiply($a0)->add($b0->multiply($b0));\n                $lhs = $v->multiply($v)->add($b->multiply($b));\n                if ($lhs->compare($rhs) <= 0) {\n                    $a2 = $a0;\n                    $b2 = $b0->negate();\n                } else {\n                    $a2 = $v;\n                    $b2 = $c->negate();\n                }\n\n                break;\n            }\n        }\n\n        return [\n            ['a' => $a1, 'b' => $b1],\n            ['a' => $a2, 'b' => $b2]\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Montgomery.php",
    "content": "<?php\n\n/**\n * Curves over y^2 = x^3 + a*x + x\n *\n * Technically, a Montgomery curve has a coefficient for y^2 but for Curve25519 and Curve448 that\n * coefficient is 1.\n *\n * Curve25519 and Curve448 do not make use of the y coordinate, which makes it unsuitable for use\n * with ECDSA / EdDSA. A few other differences between Curve25519 and Ed25519 are discussed at\n * https://crypto.stackexchange.com/a/43058/4520\n *\n * More info:\n *\n * https://en.wikipedia.org/wiki/Montgomery_curve\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2019 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\BaseCurves;\n\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve25519;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\PrimeField;\nuse phpseclib3\\Math\\PrimeField\\Integer as PrimeInteger;\n\n/**\n * Curves over y^2 = x^3 + a*x + x\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Montgomery extends Base\n{\n    /**\n     * Prime Field Integer factory\n     *\n     * @var PrimeField\n     */\n    protected $factory;\n\n    /**\n     * Cofficient for x\n     *\n     * @var object\n     */\n    protected $a;\n\n    /**\n     * Constant used for point doubling\n     *\n     * @var object\n     */\n    protected $a24;\n\n    /**\n     * The Number Zero\n     *\n     * @var object\n     */\n    protected $zero;\n\n    /**\n     * The Number One\n     *\n     * @var object\n     */\n    protected $one;\n\n    /**\n     * Base Point\n     *\n     * @var object\n     */\n    protected $p;\n\n    /**\n     * The modulo\n     *\n     * @var BigInteger\n     */\n    protected $modulo;\n\n    /**\n     * The Order\n     *\n     * @var BigInteger\n     */\n    protected $order;\n\n    /**\n     * Sets the modulo\n     */\n    public function setModulo(BigInteger $modulo)\n    {\n        $this->modulo = $modulo;\n        $this->factory = new PrimeField($modulo);\n        $this->zero = $this->factory->newInteger(new BigInteger());\n        $this->one = $this->factory->newInteger(new BigInteger(1));\n    }\n\n    /**\n     * Set coefficients a\n     */\n    public function setCoefficients(BigInteger $a)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->a = $this->factory->newInteger($a);\n        $two = $this->factory->newInteger(new BigInteger(2));\n        $four = $this->factory->newInteger(new BigInteger(4));\n        $this->a24 = $this->a->subtract($two)->divide($four);\n    }\n\n    /**\n     * Set x and y coordinates for the base point\n     *\n     * @param BigInteger|PrimeInteger $x\n     * @param BigInteger|PrimeInteger $y\n     * @return PrimeInteger[]\n     */\n    public function setBasePoint($x, $y)\n    {\n        switch (true) {\n            case !$x instanceof BigInteger && !$x instanceof PrimeInteger:\n                throw new \\UnexpectedValueException('Argument 1 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\\Integer');\n            case !$y instanceof BigInteger && !$y instanceof PrimeInteger:\n                throw new \\UnexpectedValueException('Argument 2 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\\Integer');\n        }\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->p = [\n            $x instanceof BigInteger ? $this->factory->newInteger($x) : $x,\n            $y instanceof BigInteger ? $this->factory->newInteger($y) : $y\n        ];\n    }\n\n    /**\n     * Retrieve the base point as an array\n     *\n     * @return array\n     */\n    public function getBasePoint()\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        /*\n        if (!isset($this->p)) {\n            throw new \\RuntimeException('setBasePoint needs to be called before this method');\n        }\n        */\n        return $this->p;\n    }\n\n    /**\n     * Doubles and adds a point on a curve\n     *\n     * See https://tools.ietf.org/html/draft-ietf-tls-curve25519-01#appendix-A.1.3\n     *\n     * @return FiniteField[][]\n     */\n    private function doubleAndAddPoint(array $p, array $q, PrimeInteger $x1)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p) || !count($q)) {\n            return [];\n        }\n\n        if (!isset($p[1])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to XZ coordinates');\n        }\n\n        list($x2, $z2) = $p;\n        list($x3, $z3) = $q;\n\n        $a = $x2->add($z2);\n        $aa = $a->multiply($a);\n        $b = $x2->subtract($z2);\n        $bb = $b->multiply($b);\n        $e = $aa->subtract($bb);\n        $c = $x3->add($z3);\n        $d = $x3->subtract($z3);\n        $da = $d->multiply($a);\n        $cb = $c->multiply($b);\n        $temp = $da->add($cb);\n        $x5 = $temp->multiply($temp);\n        $temp = $da->subtract($cb);\n        $z5 = $x1->multiply($temp->multiply($temp));\n        $x4 = $aa->multiply($bb);\n        $temp = static::class == Curve25519::class ? $bb : $aa;\n        $z4 = $e->multiply($temp->add($this->a24->multiply($e)));\n\n        return [\n            [$x4, $z4],\n            [$x5, $z5]\n        ];\n    }\n\n    /**\n     * Multiply a point on the curve by a scalar\n     *\n     * Uses the montgomery ladder technique as described here:\n     *\n     * https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Montgomery_ladder\n     * https://github.com/phpecc/phpecc/issues/16#issuecomment-59176772\n     *\n     * @return array\n     */\n    public function multiplyPoint(array $p, BigInteger $d)\n    {\n        $p1 = [$this->one, $this->zero];\n        $alreadyInternal = isset($p[1]);\n        $p2 = $this->convertToInternal($p);\n        $x = $p[0];\n\n        $b = $d->toBits();\n        $b = str_pad($b, 256, '0', STR_PAD_LEFT);\n        for ($i = 0; $i < strlen($b); $i++) {\n            $b_i = (int) $b[$i];\n            if ($b_i) {\n                list($p2, $p1) = $this->doubleAndAddPoint($p2, $p1, $x);\n            } else {\n                list($p1, $p2) = $this->doubleAndAddPoint($p1, $p2, $x);\n            }\n        }\n\n        return $alreadyInternal ? $p1 : $this->convertToAffine($p1);\n    }\n\n    /**\n     * Converts an affine point to an XZ coordinate\n     *\n     * From https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html\n     *\n     * XZ coordinates represent x y as X Z satsfying the following equations:\n     *\n     *   x=X/Z\n     *\n     * @return PrimeInteger[]\n     */\n    public function convertToInternal(array $p)\n    {\n        if (empty($p)) {\n            return [clone $this->zero, clone $this->one];\n        }\n\n        if (isset($p[1])) {\n            return $p;\n        }\n\n        $p[1] = clone $this->one;\n\n        return $p;\n    }\n\n    /**\n     * Returns the affine point\n     *\n     * @return PrimeInteger[]\n     */\n    public function convertToAffine(array $p)\n    {\n        if (!isset($p[1])) {\n            return $p;\n        }\n        list($x, $z) = $p;\n        return [$x->divide($z)];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Prime.php",
    "content": "<?php\n\n/**\n * Curves over y^2 = x^3 + a*x + b\n *\n * These are curves used in SEC 2 over prime fields: http://www.secg.org/SEC2-Ver-1.0.pdf\n * The curve is a weierstrass curve with a[1], a[3] and a[2] set to 0.\n *\n * Uses Jacobian Coordinates for speed if able:\n *\n * https://en.wikipedia.org/wiki/Jacobian_curve\n * https://en.wikibooks.org/wiki/Cryptography/Prime_Curve/Jacobian_Coordinates\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\BaseCurves;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\Common\\FiniteField\\Integer;\nuse phpseclib3\\Math\\PrimeField;\nuse phpseclib3\\Math\\PrimeField\\Integer as PrimeInteger;\n\n/**\n * Curves over y^2 = x^3 + a*x + b\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Prime extends Base\n{\n    /**\n     * Prime Field Integer factory\n     *\n     * @var \\phpseclib3\\Math\\PrimeFields\n     */\n    protected $factory;\n\n    /**\n     * Cofficient for x^1\n     *\n     * @var object\n     */\n    protected $a;\n\n    /**\n     * Cofficient for x^0\n     *\n     * @var object\n     */\n    protected $b;\n\n    /**\n     * Base Point\n     *\n     * @var object\n     */\n    protected $p;\n\n    /**\n     * The number one over the specified finite field\n     *\n     * @var object\n     */\n    protected $one;\n\n    /**\n     * The number two over the specified finite field\n     *\n     * @var object\n     */\n    protected $two;\n\n    /**\n     * The number three over the specified finite field\n     *\n     * @var object\n     */\n    protected $three;\n\n    /**\n     * The number four over the specified finite field\n     *\n     * @var object\n     */\n    protected $four;\n\n    /**\n     * The number eight over the specified finite field\n     *\n     * @var object\n     */\n    protected $eight;\n\n    /**\n     * The modulo\n     *\n     * @var BigInteger\n     */\n    protected $modulo;\n\n    /**\n     * The Order\n     *\n     * @var BigInteger\n     */\n    protected $order;\n\n    /**\n     * Sets the modulo\n     */\n    public function setModulo(BigInteger $modulo)\n    {\n        $this->modulo = $modulo;\n        $this->factory = new PrimeField($modulo);\n        $this->two = $this->factory->newInteger(new BigInteger(2));\n        $this->three = $this->factory->newInteger(new BigInteger(3));\n        // used by jacobian coordinates\n        $this->one = $this->factory->newInteger(new BigInteger(1));\n        $this->four = $this->factory->newInteger(new BigInteger(4));\n        $this->eight = $this->factory->newInteger(new BigInteger(8));\n    }\n\n    /**\n     * Set coefficients a and b\n     */\n    public function setCoefficients(BigInteger $a, BigInteger $b)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->a = $this->factory->newInteger($a);\n        $this->b = $this->factory->newInteger($b);\n    }\n\n    /**\n     * Set x and y coordinates for the base point\n     *\n     * @param BigInteger|PrimeInteger $x\n     * @param BigInteger|PrimeInteger $y\n     * @return PrimeInteger[]\n     */\n    public function setBasePoint($x, $y)\n    {\n        switch (true) {\n            case !$x instanceof BigInteger && !$x instanceof PrimeInteger:\n                throw new \\UnexpectedValueException('Argument 1 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\\Integer');\n            case !$y instanceof BigInteger && !$y instanceof PrimeInteger:\n                throw new \\UnexpectedValueException('Argument 2 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\\Integer');\n        }\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->p = [\n            $x instanceof BigInteger ? $this->factory->newInteger($x) : $x,\n            $y instanceof BigInteger ? $this->factory->newInteger($y) : $y\n        ];\n    }\n\n    /**\n     * Retrieve the base point as an array\n     *\n     * @return array\n     */\n    public function getBasePoint()\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        /*\n        if (!isset($this->p)) {\n            throw new \\RuntimeException('setBasePoint needs to be called before this method');\n        }\n        */\n        return $this->p;\n    }\n\n    /**\n     * Adds two \"fresh\" jacobian form on the curve\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianAddPointMixedXY(array $p, array $q)\n    {\n        list($u1, $s1) = $p;\n        list($u2, $s2) = $q;\n        if ($u1->equals($u2)) {\n            if (!$s1->equals($s2)) {\n                return [];\n            } else {\n                return $this->doublePoint($p);\n            }\n        }\n        $h = $u2->subtract($u1);\n        $r = $s2->subtract($s1);\n        $h2 = $h->multiply($h);\n        $h3 = $h2->multiply($h);\n        $v = $u1->multiply($h2);\n        $x3 = $r->multiply($r)->subtract($h3)->subtract($v->multiply($this->two));\n        $y3 = $r->multiply(\n            $v->subtract($x3)\n        )->subtract(\n            $s1->multiply($h3)\n        );\n        return [$x3, $y3, $h];\n    }\n\n    /**\n     * Adds one \"fresh\" jacobian form on the curve\n     *\n     * The second parameter should be the \"fresh\" one\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianAddPointMixedX(array $p, array $q)\n    {\n        list($u1, $s1, $z1) = $p;\n        list($x2, $y2) = $q;\n\n        $z12 = $z1->multiply($z1);\n\n        $u2 = $x2->multiply($z12);\n        $s2 = $y2->multiply($z12->multiply($z1));\n        if ($u1->equals($u2)) {\n            if (!$s1->equals($s2)) {\n                return [];\n            } else {\n                return $this->doublePoint($p);\n            }\n        }\n        $h = $u2->subtract($u1);\n        $r = $s2->subtract($s1);\n        $h2 = $h->multiply($h);\n        $h3 = $h2->multiply($h);\n        $v = $u1->multiply($h2);\n        $x3 = $r->multiply($r)->subtract($h3)->subtract($v->multiply($this->two));\n        $y3 = $r->multiply(\n            $v->subtract($x3)\n        )->subtract(\n            $s1->multiply($h3)\n        );\n        $z3 = $h->multiply($z1);\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Adds two jacobian coordinates on the curve\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianAddPoint(array $p, array $q)\n    {\n        list($x1, $y1, $z1) = $p;\n        list($x2, $y2, $z2) = $q;\n\n        $z12 = $z1->multiply($z1);\n        $z22 = $z2->multiply($z2);\n\n        $u1 = $x1->multiply($z22);\n        $u2 = $x2->multiply($z12);\n        $s1 = $y1->multiply($z22->multiply($z2));\n        $s2 = $y2->multiply($z12->multiply($z1));\n        if ($u1->equals($u2)) {\n            if (!$s1->equals($s2)) {\n                return [];\n            } else {\n                return $this->doublePoint($p);\n            }\n        }\n        $h = $u2->subtract($u1);\n        $r = $s2->subtract($s1);\n        $h2 = $h->multiply($h);\n        $h3 = $h2->multiply($h);\n        $v = $u1->multiply($h2);\n        $x3 = $r->multiply($r)->subtract($h3)->subtract($v->multiply($this->two));\n        $y3 = $r->multiply(\n            $v->subtract($x3)\n        )->subtract(\n            $s1->multiply($h3)\n        );\n        $z3 = $h->multiply($z1)->multiply($z2);\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Adds two points on the curve\n     *\n     * @return FiniteField[]\n     */\n    public function addPoint(array $p, array $q)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p) || !count($q)) {\n            if (count($q)) {\n                return $q;\n            }\n            if (count($p)) {\n                return $p;\n            }\n            return [];\n        }\n\n        // use jacobian coordinates\n        if (isset($p[2]) && isset($q[2])) {\n            if (isset($p['fresh']) && isset($q['fresh'])) {\n                return $this->jacobianAddPointMixedXY($p, $q);\n            }\n            if (isset($p['fresh'])) {\n                return $this->jacobianAddPointMixedX($q, $p);\n            }\n            if (isset($q['fresh'])) {\n                return $this->jacobianAddPointMixedX($p, $q);\n            }\n            return $this->jacobianAddPoint($p, $q);\n        }\n\n        if (isset($p[2]) || isset($q[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to Jacobi coordinates or vice versa');\n        }\n\n        if ($p[0]->equals($q[0])) {\n            if (!$p[1]->equals($q[1])) {\n                return [];\n            } else { // eg. doublePoint\n                list($numerator, $denominator) = $this->doublePointHelper($p);\n            }\n        } else {\n            $numerator = $q[1]->subtract($p[1]);\n            $denominator = $q[0]->subtract($p[0]);\n        }\n        $slope = $numerator->divide($denominator);\n        $x = $slope->multiply($slope)->subtract($p[0])->subtract($q[0]);\n        $y = $slope->multiply($p[0]->subtract($x))->subtract($p[1]);\n\n        return [$x, $y];\n    }\n\n    /**\n     * Returns the numerator and denominator of the slope\n     *\n     * @return FiniteField[]\n     */\n    protected function doublePointHelper(array $p)\n    {\n        $numerator = $this->three->multiply($p[0])->multiply($p[0])->add($this->a);\n        $denominator = $this->two->multiply($p[1]);\n        return [$numerator, $denominator];\n    }\n\n    /**\n     * Doubles a jacobian coordinate on the curve\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianDoublePoint(array $p)\n    {\n        list($x, $y, $z) = $p;\n        $x2 = $x->multiply($x);\n        $y2 = $y->multiply($y);\n        $z2 = $z->multiply($z);\n        $s = $this->four->multiply($x)->multiply($y2);\n        $m1 = $this->three->multiply($x2);\n        $m2 = $this->a->multiply($z2->multiply($z2));\n        $m = $m1->add($m2);\n        $x1 = $m->multiply($m)->subtract($this->two->multiply($s));\n        $y1 = $m->multiply($s->subtract($x1))->subtract(\n            $this->eight->multiply($y2->multiply($y2))\n        );\n        $z1 = $this->two->multiply($y)->multiply($z);\n        return [$x1, $y1, $z1];\n    }\n\n    /**\n     * Doubles a \"fresh\" jacobian coordinate on the curve\n     *\n     * @return FiniteField[]\n     */\n    protected function jacobianDoublePointMixed(array $p)\n    {\n        list($x, $y) = $p;\n        $x2 = $x->multiply($x);\n        $y2 = $y->multiply($y);\n        $s = $this->four->multiply($x)->multiply($y2);\n        $m1 = $this->three->multiply($x2);\n        $m = $m1->add($this->a);\n        $x1 = $m->multiply($m)->subtract($this->two->multiply($s));\n        $y1 = $m->multiply($s->subtract($x1))->subtract(\n            $this->eight->multiply($y2->multiply($y2))\n        );\n        $z1 = $this->two->multiply($y);\n        return [$x1, $y1, $z1];\n    }\n\n    /**\n     * Doubles a point on a curve\n     *\n     * @return FiniteField[]\n     */\n    public function doublePoint(array $p)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p)) {\n            return [];\n        }\n\n        // use jacobian coordinates\n        if (isset($p[2])) {\n            if (isset($p['fresh'])) {\n                return $this->jacobianDoublePointMixed($p);\n            }\n            return $this->jacobianDoublePoint($p);\n        }\n\n        list($numerator, $denominator) = $this->doublePointHelper($p);\n\n        $slope = $numerator->divide($denominator);\n\n        $x = $slope->multiply($slope)->subtract($p[0])->subtract($p[0]);\n        $y = $slope->multiply($p[0]->subtract($x))->subtract($p[1]);\n\n        return [$x, $y];\n    }\n\n    /**\n     * Returns the X coordinate and the derived Y coordinate\n     *\n     * @return array\n     */\n    public function derivePoint($m)\n    {\n        $y = ord(Strings::shift($m));\n        $x = new BigInteger($m, 256);\n        $xp = $this->convertInteger($x);\n        switch ($y) {\n            case 2:\n                $ypn = false;\n                break;\n            case 3:\n                $ypn = true;\n                break;\n            default:\n                throw new \\RuntimeException('Coordinate not in recognized format');\n        }\n        $temp = $xp->multiply($this->a);\n        $temp = $xp->multiply($xp)->multiply($xp)->add($temp);\n        $temp = $temp->add($this->b);\n        $b = $temp->squareRoot();\n        if (!$b) {\n            throw new \\RuntimeException('Unable to derive Y coordinate');\n        }\n        $bn = $b->isOdd();\n        $yp = $ypn == $bn ? $b : $b->negate();\n        return [$xp, $yp];\n    }\n\n    /**\n     * Tests whether or not the x / y values satisfy the equation\n     *\n     * @return boolean\n     */\n    public function verifyPoint(array $p)\n    {\n        list($x, $y) = $p;\n        $lhs = $y->multiply($y);\n        $temp = $x->multiply($this->a);\n        $temp = $x->multiply($x)->multiply($x)->add($temp);\n        $rhs = $temp->add($this->b);\n\n        return $lhs->equals($rhs);\n    }\n\n    /**\n     * Returns the modulo\n     *\n     * @return BigInteger\n     */\n    public function getModulo()\n    {\n        return $this->modulo;\n    }\n\n    /**\n     * Returns the a coefficient\n     *\n     * @return PrimeInteger\n     */\n    public function getA()\n    {\n        return $this->a;\n    }\n\n    /**\n     * Returns the a coefficient\n     *\n     * @return PrimeInteger\n     */\n    public function getB()\n    {\n        return $this->b;\n    }\n\n    /**\n     * Multiply and Add Points\n     *\n     * Adapted from:\n     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/curve/base.js#L125\n     *\n     * @return int[]\n     */\n    public function multiplyAddPoints(array $points, array $scalars)\n    {\n        $length = count($points);\n\n        foreach ($points as &$point) {\n            $point = $this->convertToInternal($point);\n        }\n\n        $wnd = [$this->getNAFPoints($points[0], 7)];\n        $wndWidth = [isset($points[0]['nafwidth']) ? $points[0]['nafwidth'] : 7];\n        for ($i = 1; $i < $length; $i++) {\n            $wnd[] = $this->getNAFPoints($points[$i], 1);\n            $wndWidth[] = isset($points[$i]['nafwidth']) ? $points[$i]['nafwidth'] : 1;\n        }\n\n        $naf = [];\n\n        // comb all window NAFs\n\n        $max = 0;\n        for ($i = $length - 1; $i >= 1; $i -= 2) {\n            $a = $i - 1;\n            $b = $i;\n            if ($wndWidth[$a] != 1 || $wndWidth[$b] != 1) {\n                $naf[$a] = $scalars[$a]->getNAF($wndWidth[$a]);\n                $naf[$b] = $scalars[$b]->getNAF($wndWidth[$b]);\n                $max = max(count($naf[$a]), count($naf[$b]), $max);\n                continue;\n            }\n\n            $comb = [\n                $points[$a], // 1\n                null,        // 3\n                null,        // 5\n                $points[$b]  // 7\n            ];\n\n            $comb[1] = $this->addPoint($points[$a], $points[$b]);\n            $comb[2] = $this->addPoint($points[$a], $this->negatePoint($points[$b]));\n\n            $index = [\n                -3, /* -1 -1 */\n                -1, /* -1  0 */\n                -5, /* -1  1 */\n                -7, /*  0 -1 */\n                 0, /*  0 -1 */\n                 7, /*  0  1 */\n                 5, /*  1 -1 */\n                 1, /*  1  0 */\n                 3  /*  1  1 */\n            ];\n\n            $jsf = self::getJSFPoints($scalars[$a], $scalars[$b]);\n\n            $max = max(count($jsf[0]), $max);\n            if ($max > 0) {\n                $naf[$a] = array_fill(0, $max, 0);\n                $naf[$b] = array_fill(0, $max, 0);\n            } else {\n                $naf[$a] = [];\n                $naf[$b] = [];\n            }\n\n            for ($j = 0; $j < $max; $j++) {\n                $ja = isset($jsf[0][$j]) ? $jsf[0][$j] : 0;\n                $jb = isset($jsf[1][$j]) ? $jsf[1][$j] : 0;\n\n                $naf[$a][$j] = $index[3 * ($ja + 1) + $jb + 1];\n                $naf[$b][$j] = 0;\n                $wnd[$a] = $comb;\n            }\n        }\n\n        $acc = [];\n        $temp = [0, 0, 0, 0];\n        for ($i = $max; $i >= 0; $i--) {\n            $k = 0;\n            while ($i >= 0) {\n                $zero = true;\n                for ($j = 0; $j < $length; $j++) {\n                    $temp[$j] = isset($naf[$j][$i]) ? $naf[$j][$i] : 0;\n                    if ($temp[$j] != 0) {\n                        $zero = false;\n                    }\n                }\n                if (!$zero) {\n                    break;\n                }\n                $k++;\n                $i--;\n            }\n\n            if ($i >= 0) {\n                $k++;\n            }\n            while ($k--) {\n                $acc = $this->doublePoint($acc);\n            }\n\n            if ($i < 0) {\n                break;\n            }\n\n            for ($j = 0; $j < $length; $j++) {\n                $z = $temp[$j];\n                $p = null;\n                if ($z == 0) {\n                    continue;\n                }\n                $p = $z > 0 ?\n                    $wnd[$j][($z - 1) >> 1] :\n                    $this->negatePoint($wnd[$j][(-$z - 1) >> 1]);\n                $acc = $this->addPoint($acc, $p);\n            }\n        }\n\n        return $this->convertToAffine($acc);\n    }\n\n    /**\n     * Precomputes NAF points\n     *\n     * Adapted from:\n     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/curve/base.js#L351\n     *\n     * @return int[]\n     */\n    private function getNAFPoints(array $point, $wnd)\n    {\n        if (isset($point['naf'])) {\n            return $point['naf'];\n        }\n\n        $res = [$point];\n        $max = (1 << $wnd) - 1;\n        $dbl = $max == 1 ? null : $this->doublePoint($point);\n        for ($i = 1; $i < $max; $i++) {\n            $res[] = $this->addPoint($res[$i - 1], $dbl);\n        }\n\n        $point['naf'] = $res;\n\n        /*\n        $str = '';\n        foreach ($res as $re) {\n            $re[0] = bin2hex($re[0]->toBytes());\n            $re[1] = bin2hex($re[1]->toBytes());\n            $str.= \"            ['$re[0]', '$re[1]'],\\r\\n\";\n        }\n        file_put_contents('temp.txt', $str);\n        exit;\n        */\n\n        return $res;\n    }\n\n    /**\n     * Precomputes points in Joint Sparse Form\n     *\n     * Adapted from:\n     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/utils.js#L96\n     *\n     * @return int[]\n     */\n    private static function getJSFPoints(Integer $k1, Integer $k2)\n    {\n        static $three;\n        if (!isset($three)) {\n            $three = new BigInteger(3);\n        }\n\n        $jsf = [[], []];\n        $k1 = $k1->toBigInteger();\n        $k2 = $k2->toBigInteger();\n        $d1 = 0;\n        $d2 = 0;\n\n        while ($k1->compare(new BigInteger(-$d1)) > 0 || $k2->compare(new BigInteger(-$d2)) > 0) {\n            // first phase\n            $m14 = $k1->testBit(0) + 2 * $k1->testBit(1);\n            $m14 += $d1;\n            $m14 &= 3;\n\n            $m24 = $k2->testBit(0) + 2 * $k2->testBit(1);\n            $m24 += $d2;\n            $m24 &= 3;\n\n            if ($m14 == 3) {\n                $m14 = -1;\n            }\n            if ($m24 == 3) {\n                $m24 = -1;\n            }\n\n            $u1 = 0;\n            if ($m14 & 1) { // if $m14 is odd\n                $m8 = $k1->testBit(0) + 2 * $k1->testBit(1) + 4 * $k1->testBit(2);\n                $m8 += $d1;\n                $m8 &= 7;\n                $u1 = ($m8 == 3 || $m8 == 5) && $m24 == 2 ? -$m14 : $m14;\n            }\n            $jsf[0][] = $u1;\n\n            $u2 = 0;\n            if ($m24 & 1) { // if $m24 is odd\n                $m8 = $k2->testBit(0) + 2 * $k2->testBit(1) + 4 * $k2->testBit(2);\n                $m8 += $d2;\n                $m8 &= 7;\n                $u2 = ($m8 == 3 || $m8 == 5) && $m14 == 2 ? -$m24 : $m24;\n            }\n            $jsf[1][] = $u2;\n\n            // second phase\n            if (2 * $d1 == $u1 + 1) {\n                $d1 = 1 - $d1;\n            }\n            if (2 * $d2 == $u2 + 1) {\n                $d2 = 1 - $d2;\n            }\n            $k1 = $k1->bitwise_rightShift(1);\n            $k2 = $k2->bitwise_rightShift(1);\n        }\n\n        return $jsf;\n    }\n\n    /**\n     * Returns the affine point\n     *\n     * A Jacobian Coordinate is of the form (x, y, z).\n     * To convert a Jacobian Coordinate to an Affine Point\n     * you do (x / z^2, y / z^3)\n     *\n     * @return PrimeInteger[]\n     */\n    public function convertToAffine(array $p)\n    {\n        if (!isset($p[2])) {\n            return $p;\n        }\n        list($x, $y, $z) = $p;\n        $z = $this->one->divide($z);\n        $z2 = $z->multiply($z);\n        return [\n            $x->multiply($z2),\n            $y->multiply($z2)->multiply($z)\n        ];\n    }\n\n    /**\n     * Converts an affine point to a jacobian coordinate\n     *\n     * @return PrimeInteger[]\n     */\n    public function convertToInternal(array $p)\n    {\n        if (isset($p[2])) {\n            return $p;\n        }\n\n        $p[2] = clone $this->one;\n        $p['fresh'] = true;\n        return $p;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/TwistedEdwards.php",
    "content": "<?php\n\n/**\n * Curves over a*x^2 + y^2 = 1 + d*x^2*y^2\n *\n * http://www.secg.org/SEC2-Ver-1.0.pdf provides for curves with custom parameters.\n * ie. the coefficients can be arbitrary set through specially formatted keys, etc.\n * As such, Prime.php is built very generically and it's not able to take full\n * advantage of curves with 0 coefficients to produce simplified point doubling,\n * point addition. Twisted Edwards curves, in contrast, do not have a way, currently,\n * to customize them. As such, we can omit the super generic stuff from this class\n * and let the named curves (Ed25519 and Ed448) define their own custom tailored\n * point addition and point doubling methods.\n *\n * More info:\n *\n * https://en.wikipedia.org/wiki/Twisted_Edwards_curve\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\BaseCurves;\n\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\PrimeField;\nuse phpseclib3\\Math\\PrimeField\\Integer as PrimeInteger;\n\n/**\n * Curves over a*x^2 + y^2 = 1 + d*x^2*y^2\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass TwistedEdwards extends Base\n{\n    /**\n     * The modulo\n     *\n     * @var BigInteger\n     */\n    protected $modulo;\n\n    /**\n     * Cofficient for x^2\n     *\n     * @var object\n     */\n    protected $a;\n\n    /**\n     * Cofficient for x^2*y^2\n     *\n     * @var object\n     */\n    protected $d;\n\n    /**\n     * Base Point\n     *\n     * @var object[]\n     */\n    protected $p;\n\n    /**\n     * The number zero over the specified finite field\n     *\n     * @var object\n     */\n    protected $zero;\n\n    /**\n     * The number one over the specified finite field\n     *\n     * @var object\n     */\n    protected $one;\n\n    /**\n     * The number two over the specified finite field\n     *\n     * @var object\n     */\n    protected $two;\n\n    /**\n     * Sets the modulo\n     */\n    public function setModulo(BigInteger $modulo)\n    {\n        $this->modulo = $modulo;\n        $this->factory = new PrimeField($modulo);\n        $this->zero = $this->factory->newInteger(new BigInteger(0));\n        $this->one = $this->factory->newInteger(new BigInteger(1));\n        $this->two = $this->factory->newInteger(new BigInteger(2));\n    }\n\n    /**\n     * Set coefficients a and b\n     */\n    public function setCoefficients(BigInteger $a, BigInteger $d)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->a = $this->factory->newInteger($a);\n        $this->d = $this->factory->newInteger($d);\n    }\n\n    /**\n     * Set x and y coordinates for the base point\n     */\n    public function setBasePoint($x, $y)\n    {\n        switch (true) {\n            case !$x instanceof BigInteger && !$x instanceof PrimeInteger:\n                throw new \\UnexpectedValueException('Argument 1 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\\Integer');\n            case !$y instanceof BigInteger && !$y instanceof PrimeInteger:\n                throw new \\UnexpectedValueException('Argument 2 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\\Integer');\n        }\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        $this->p = [\n            $x instanceof BigInteger ? $this->factory->newInteger($x) : $x,\n            $y instanceof BigInteger ? $this->factory->newInteger($y) : $y\n        ];\n    }\n\n    /**\n     * Returns the a coefficient\n     *\n     * @return PrimeInteger\n     */\n    public function getA()\n    {\n        return $this->a;\n    }\n\n    /**\n     * Returns the a coefficient\n     *\n     * @return PrimeInteger\n     */\n    public function getD()\n    {\n        return $this->d;\n    }\n\n    /**\n     * Retrieve the base point as an array\n     *\n     * @return array\n     */\n    public function getBasePoint()\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n        /*\n        if (!isset($this->p)) {\n            throw new \\RuntimeException('setBasePoint needs to be called before this method');\n        }\n        */\n        return $this->p;\n    }\n\n    /**\n     * Returns the affine point\n     *\n     * @return PrimeInteger[]\n     */\n    public function convertToAffine(array $p)\n    {\n        if (!isset($p[2])) {\n            return $p;\n        }\n        list($x, $y, $z) = $p;\n        $z = $this->one->divide($z);\n        return [\n            $x->multiply($z),\n            $y->multiply($z)\n        ];\n    }\n\n    /**\n     * Returns the modulo\n     *\n     * @return BigInteger\n     */\n    public function getModulo()\n    {\n        return $this->modulo;\n    }\n\n    /**\n     * Tests whether or not the x / y values satisfy the equation\n     *\n     * @return boolean\n     */\n    public function verifyPoint(array $p)\n    {\n        list($x, $y) = $p;\n        $x2 = $x->multiply($x);\n        $y2 = $y->multiply($y);\n\n        $lhs = $this->a->multiply($x2)->add($y2);\n        $rhs = $this->d->multiply($x2)->multiply($y2)->add($this->one);\n\n        return $lhs->equals($rhs);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.php",
    "content": "<?php\n\n/**\n * Curve25519\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2019 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery;\nuse phpseclib3\\Math\\BigInteger;\n\nclass Curve25519 extends Montgomery\n{\n    public function __construct()\n    {\n        // 2^255 - 19\n        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED', 16));\n        $this->a24 = $this->factory->newInteger(new BigInteger('121666'));\n        $this->p = [$this->factory->newInteger(new BigInteger(9))];\n        // 2^252 + 0x14def9dea2f79cd65812631a5cf5d3ed\n        $this->setOrder(new BigInteger('1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED', 16));\n\n        /*\n        $this->setCoefficients(\n            new BigInteger('486662'), // a\n        );\n        $this->setBasePoint(\n            new BigInteger(9),\n            new BigInteger('14781619447589544791020593568409986887264606134616475288964881837755586237401')\n        );\n        */\n    }\n\n    /**\n     * Multiply a point on the curve by a scalar\n     *\n     * Modifies the scalar as described at https://tools.ietf.org/html/rfc7748#page-8\n     *\n     * @return array\n     */\n    public function multiplyPoint(array $p, BigInteger $d)\n    {\n        //$r = strrev(sodium_crypto_scalarmult($d->toBytes(), strrev($p[0]->toBytes())));\n        //return [$this->factory->newInteger(new BigInteger($r, 256))];\n\n        $d = $d->toBytes();\n        $d &= \"\\xF8\" . str_repeat(\"\\xFF\", 30) . \"\\x7F\";\n        $d = strrev($d);\n        $d |= \"\\x40\";\n        $d = new BigInteger($d, -256);\n\n        return parent::multiplyPoint($p, $d);\n    }\n\n    /**\n     * Creates a random scalar multiplier\n     *\n     * @return BigInteger\n     */\n    public function createRandomMultiplier()\n    {\n        return BigInteger::random(256);\n    }\n\n    /**\n     * Performs range check\n     */\n    public function rangeCheck(BigInteger $x)\n    {\n        if ($x->getLength() > 256 || $x->isNegative()) {\n            throw new \\RangeException('x must be a positive integer less than 256 bytes in length');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.php",
    "content": "<?php\n\n/**\n * Curve448\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2019 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery;\nuse phpseclib3\\Math\\BigInteger;\n\nclass Curve448 extends Montgomery\n{\n    public function __construct()\n    {\n        // 2^448 - 2^224 - 1\n        $this->setModulo(new BigInteger(\n            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' .\n            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',\n            16\n        ));\n        $this->a24 = $this->factory->newInteger(new BigInteger('39081'));\n        $this->p = [$this->factory->newInteger(new BigInteger(5))];\n        // 2^446 - 0x8335dc163bb124b65129c96fde933d8d723a70aadc873d6d54a7bb0d\n        $this->setOrder(new BigInteger(\n            '3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n            '7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3',\n            16\n        ));\n\n        /*\n        $this->setCoefficients(\n            new BigInteger('156326'), // a\n        );\n        $this->setBasePoint(\n            new BigInteger(5),\n            new BigInteger(\n                '355293926785568175264127502063783334808976399387714271831880898' .\n                '435169088786967410002932673765864550910142774147268105838985595290' .\n                '606362')\n        );\n        */\n    }\n\n    /**\n     * Multiply a point on the curve by a scalar\n     *\n     * Modifies the scalar as described at https://tools.ietf.org/html/rfc7748#page-8\n     *\n     * @return array\n     */\n    public function multiplyPoint(array $p, BigInteger $d)\n    {\n        //$r = strrev(sodium_crypto_scalarmult($d->toBytes(), strrev($p[0]->toBytes())));\n        //return [$this->factory->newInteger(new BigInteger($r, 256))];\n\n        $d = $d->toBytes();\n        $d[0] = $d[0] & \"\\xFC\";\n        $d = strrev($d);\n        $d |= \"\\x80\";\n        $d = new BigInteger($d, 256);\n\n        return parent::multiplyPoint($p, $d);\n    }\n\n    /**\n     * Creates a random scalar multiplier\n     *\n     * @return BigInteger\n     */\n    public function createRandomMultiplier()\n    {\n        return BigInteger::random(446);\n    }\n\n    /**\n     * Performs range check\n     */\n    public function rangeCheck(BigInteger $x)\n    {\n        if ($x->getLength() > 448 || $x->isNegative()) {\n            throw new \\RangeException('x must be a positive integer less than 446 bytes in length');\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed25519.php",
    "content": "<?php\n\n/**\n * Ed25519\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Math\\BigInteger;\n\nclass Ed25519 extends TwistedEdwards\n{\n    const HASH = 'sha512';\n    /*\n      Per https://tools.ietf.org/html/rfc8032#page-6 EdDSA has several parameters, one of which is b:\n\n      2.   An integer b with 2^(b-1) > p.  EdDSA public keys have exactly b\n           bits, and EdDSA signatures have exactly 2*b bits.  b is\n           recommended to be a multiple of 8, so public key and signature\n           lengths are an integral number of octets.\n\n      SIZE corresponds to b\n    */\n    const SIZE = 32;\n\n    public function __construct()\n    {\n        // 2^255 - 19\n        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED', 16));\n        $this->setCoefficients(\n            // -1\n            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC', 16), // a\n            // -121665/121666\n            new BigInteger('52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3', 16)  // d\n        );\n        $this->setBasePoint(\n            new BigInteger('216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A', 16),\n            new BigInteger('6666666666666666666666666666666666666666666666666666666666666658', 16)\n        );\n        $this->setOrder(new BigInteger('1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED', 16));\n        // algorithm 14.47 from http://cacr.uwaterloo.ca/hac/about/chap14.pdf#page=16\n        /*\n        $this->setReduction(function($x) {\n            $parts = $x->bitwise_split(255);\n            $className = $this->className;\n\n            if (count($parts) > 2) {\n                list(, $r) = $x->divide($className::$modulo);\n                return $r;\n            }\n\n            $zero = new BigInteger();\n            $c = new BigInteger(19);\n\n            switch (count($parts)) {\n                case 2:\n                    list($qi, $ri) = $parts;\n                    break;\n                case 1:\n                    $qi = $zero;\n                    list($ri) = $parts;\n                    break;\n                case 0:\n                    return $zero;\n            }\n            $r = $ri;\n\n            while ($qi->compare($zero) > 0) {\n                $temp = $qi->multiply($c)->bitwise_split(255);\n                if (count($temp) == 2) {\n                    list($qi, $ri) = $temp;\n                } else {\n                    $qi = $zero;\n                    list($ri) = $temp;\n                }\n                $r = $r->add($ri);\n            }\n\n            while ($r->compare($className::$modulo) > 0) {\n                $r = $r->subtract($className::$modulo);\n            }\n            return $r;\n        });\n        */\n    }\n\n    /**\n     * Recover X from Y\n     *\n     * Implements steps 2-4 at https://tools.ietf.org/html/rfc8032#section-5.1.3\n     *\n     * Used by EC\\Keys\\Common.php\n     *\n     * @param BigInteger $y\n     * @param boolean $sign\n     * @return object[]\n     */\n    public function recoverX(BigInteger $y, $sign)\n    {\n        $y = $this->factory->newInteger($y);\n\n        $y2 = $y->multiply($y);\n        $u = $y2->subtract($this->one);\n        $v = $this->d->multiply($y2)->add($this->one);\n        $x2 = $u->divide($v);\n        if ($x2->equals($this->zero)) {\n            if ($sign) {\n                throw new \\RuntimeException('Unable to recover X coordinate (x2 = 0)');\n            }\n            return clone $this->zero;\n        }\n        // find the square root\n        /* we don't do $x2->squareRoot() because, quoting from\n           https://tools.ietf.org/html/rfc8032#section-5.1.1:\n\n           \"For point decoding or \"decompression\", square roots modulo p are\n            needed.  They can be computed using the Tonelli-Shanks algorithm or\n            the special case for p = 5 (mod 8).  To find a square root of a,\n            first compute the candidate root x = a^((p+3)/8) (mod p).\"\n         */\n        $exp = $this->getModulo()->add(new BigInteger(3));\n        $exp = $exp->bitwise_rightShift(3);\n        $x = $x2->pow($exp);\n\n        // If v x^2 = -u (mod p), set x <-- x * 2^((p-1)/4), which is a square root.\n        if (!$x->multiply($x)->subtract($x2)->equals($this->zero)) {\n            $temp = $this->getModulo()->subtract(new BigInteger(1));\n            $temp = $temp->bitwise_rightShift(2);\n            $temp = $this->two->pow($temp);\n            $x = $x->multiply($temp);\n            if (!$x->multiply($x)->subtract($x2)->equals($this->zero)) {\n                throw new \\RuntimeException('Unable to recover X coordinate');\n            }\n        }\n        if ($x->isOdd() != $sign) {\n            $x = $x->negate();\n        }\n\n        return [$x, $y];\n    }\n\n    /**\n     * Extract Secret Scalar\n     *\n     * Implements steps 1-3 at https://tools.ietf.org/html/rfc8032#section-5.1.5\n     *\n     * Used by the various key handlers\n     *\n     * @param string $str\n     * @return array\n     */\n    public function extractSecret($str)\n    {\n        if (strlen($str) != 32) {\n            throw new \\LengthException('Private Key should be 32-bytes long');\n        }\n        // 1.  Hash the 32-byte private key using SHA-512, storing the digest in\n        //     a 64-octet large buffer, denoted h.  Only the lower 32 bytes are\n        //     used for generating the public key.\n        $hash = new Hash('sha512');\n        $h = $hash->hash($str);\n        $h = substr($h, 0, 32);\n        // 2.  Prune the buffer: The lowest three bits of the first octet are\n        //     cleared, the highest bit of the last octet is cleared, and the\n        //     second highest bit of the last octet is set.\n        $h[0] = $h[0] & chr(0xF8);\n        $h = strrev($h);\n        $h[0] = ($h[0] & chr(0x3F)) | chr(0x40);\n        // 3.  Interpret the buffer as the little-endian integer, forming a\n        //     secret scalar s.\n        $dA = new BigInteger($h, 256);\n\n        return [\n            'dA' => $dA,\n            'secret' => $str\n        ];\n    }\n\n    /**\n     * Encode a point as a string\n     *\n     * @param array $point\n     * @return string\n     */\n    public function encodePoint($point)\n    {\n        list($x, $y) = $point;\n        $y = $y->toBytes();\n        $y[0] = $y[0] & chr(0x7F);\n        if ($x->isOdd()) {\n            $y[0] = $y[0] | chr(0x80);\n        }\n        $y = strrev($y);\n\n        return $y;\n    }\n\n    /**\n     * Creates a random scalar multiplier\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer\n     */\n    public function createRandomMultiplier()\n    {\n        return $this->extractSecret(Random::string(32))['dA'];\n    }\n\n    /**\n     * Converts an affine point to an extended homogeneous coordinate\n     *\n     * From https://tools.ietf.org/html/rfc8032#section-5.1.4 :\n     *\n     * A point (x,y) is represented in extended homogeneous coordinates (X, Y, Z, T),\n     * with x = X/Z, y = Y/Z, x * y = T/Z.\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer[]\n     */\n    public function convertToInternal(array $p)\n    {\n        if (empty($p)) {\n            return [clone $this->zero, clone $this->one, clone $this->one, clone $this->zero];\n        }\n\n        if (isset($p[2])) {\n            return $p;\n        }\n\n        $p[2] = clone $this->one;\n        $p[3] = $p[0]->multiply($p[1]);\n\n        return $p;\n    }\n\n    /**\n     * Doubles a point on a curve\n     *\n     * @return FiniteField[]\n     */\n    public function doublePoint(array $p)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p)) {\n            return [];\n        }\n\n        if (!isset($p[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to \"Jacobi\" coordinates or vice versa');\n        }\n\n        // from https://tools.ietf.org/html/rfc8032#page-12\n\n        list($x1, $y1, $z1, $t1) = $p;\n\n        $a = $x1->multiply($x1);\n        $b = $y1->multiply($y1);\n        $c = $this->two->multiply($z1)->multiply($z1);\n        $h = $a->add($b);\n        $temp = $x1->add($y1);\n        $e = $h->subtract($temp->multiply($temp));\n        $g = $a->subtract($b);\n        $f = $c->add($g);\n\n        $x3 = $e->multiply($f);\n        $y3 = $g->multiply($h);\n        $t3 = $e->multiply($h);\n        $z3 = $f->multiply($g);\n\n        return [$x3, $y3, $z3, $t3];\n    }\n\n    /**\n     * Adds two points on the curve\n     *\n     * @return FiniteField[]\n     */\n    public function addPoint(array $p, array $q)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p) || !count($q)) {\n            if (count($q)) {\n                return $q;\n            }\n            if (count($p)) {\n                return $p;\n            }\n            return [];\n        }\n\n        if (!isset($p[2]) || !isset($q[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to \"Jacobi\" coordinates or vice versa');\n        }\n\n        if ($p[0]->equals($q[0])) {\n            return !$p[1]->equals($q[1]) ? [] : $this->doublePoint($p);\n        }\n\n        // from https://tools.ietf.org/html/rfc8032#page-12\n\n        list($x1, $y1, $z1, $t1) = $p;\n        list($x2, $y2, $z2, $t2) = $q;\n\n        $a = $y1->subtract($x1)->multiply($y2->subtract($x2));\n        $b = $y1->add($x1)->multiply($y2->add($x2));\n        $c = $t1->multiply($this->two)->multiply($this->d)->multiply($t2);\n        $d = $z1->multiply($this->two)->multiply($z2);\n        $e = $b->subtract($a);\n        $f = $d->subtract($c);\n        $g = $d->add($c);\n        $h = $b->add($a);\n\n        $x3 = $e->multiply($f);\n        $y3 = $g->multiply($h);\n        $t3 = $e->multiply($h);\n        $z3 = $f->multiply($g);\n\n        return [$x3, $y3, $z3, $t3];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed448.php",
    "content": "<?php\n\n/**\n * Ed448\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Math\\BigInteger;\n\nclass Ed448 extends TwistedEdwards\n{\n    const HASH = 'shake256-912';\n    const SIZE = 57;\n\n    public function __construct()\n    {\n        // 2^448 - 2^224 - 1\n        $this->setModulo(new BigInteger(\n            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' .\n            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',\n            16\n        ));\n        $this->setCoefficients(\n            new BigInteger(1),\n            // -39081\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' .\n                           'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6756', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('4F1970C66BED0DED221D15A622BF36DA9E146570470F1767EA6DE324' .\n                           'A3D3A46412AE1AF72AB66511433B80E18B00938E2626A82BC70CC05E', 16),\n            new BigInteger('693F46716EB6BC248876203756C9C7624BEA73736CA3984087789C1E' .\n                           '05A0C2D73AD3FF1CE67C39C4FDBD132C4ED7C8AD9808795BF230FA14', 16)\n        );\n        $this->setOrder(new BigInteger(\n            '3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n            '7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3',\n            16\n        ));\n    }\n\n    /**\n     * Recover X from Y\n     *\n     * Implements steps 2-4 at https://tools.ietf.org/html/rfc8032#section-5.2.3\n     *\n     * Used by EC\\Keys\\Common.php\n     *\n     * @param BigInteger $y\n     * @param boolean $sign\n     * @return object[]\n     */\n    public function recoverX(BigInteger $y, $sign)\n    {\n        $y = $this->factory->newInteger($y);\n\n        $y2 = $y->multiply($y);\n        $u = $y2->subtract($this->one);\n        $v = $this->d->multiply($y2)->subtract($this->one);\n        $x2 = $u->divide($v);\n        if ($x2->equals($this->zero)) {\n            if ($sign) {\n                throw new \\RuntimeException('Unable to recover X coordinate (x2 = 0)');\n            }\n            return clone $this->zero;\n        }\n        // find the square root\n        $exp = $this->getModulo()->add(new BigInteger(1));\n        $exp = $exp->bitwise_rightShift(2);\n        $x = $x2->pow($exp);\n\n        if (!$x->multiply($x)->subtract($x2)->equals($this->zero)) {\n            throw new \\RuntimeException('Unable to recover X coordinate');\n        }\n        if ($x->isOdd() != $sign) {\n            $x = $x->negate();\n        }\n\n        return [$x, $y];\n    }\n\n    /**\n     * Extract Secret Scalar\n     *\n     * Implements steps 1-3 at https://tools.ietf.org/html/rfc8032#section-5.2.5\n     *\n     * Used by the various key handlers\n     *\n     * @param string $str\n     * @return array\n     */\n    public function extractSecret($str)\n    {\n        if (strlen($str) != 57) {\n            throw new \\LengthException('Private Key should be 57-bytes long');\n        }\n        // 1.  Hash the 57-byte private key using SHAKE256(x, 114), storing the\n        //     digest in a 114-octet large buffer, denoted h.  Only the lower 57\n        //     bytes are used for generating the public key.\n        $hash = new Hash('shake256-912');\n        $h = $hash->hash($str);\n        $h = substr($h, 0, 57);\n        // 2.  Prune the buffer: The two least significant bits of the first\n        //     octet are cleared, all eight bits the last octet are cleared, and\n        //     the highest bit of the second to last octet is set.\n        $h[0] = $h[0] & chr(0xFC);\n        $h = strrev($h);\n        $h[0] = \"\\0\";\n        $h[1] = $h[1] | chr(0x80);\n        // 3.  Interpret the buffer as the little-endian integer, forming a\n        //     secret scalar s.\n        $dA = new BigInteger($h, 256);\n\n        return [\n            'dA' => $dA,\n            'secret' => $str\n        ];\n\n        $dA->secret = $str;\n        return $dA;\n    }\n\n    /**\n     * Encode a point as a string\n     *\n     * @param array $point\n     * @return string\n     */\n    public function encodePoint($point)\n    {\n        list($x, $y) = $point;\n        $y = \"\\0\" . $y->toBytes();\n        if ($x->isOdd()) {\n            $y[0] = $y[0] | chr(0x80);\n        }\n        $y = strrev($y);\n\n        return $y;\n    }\n\n    /**\n     * Creates a random scalar multiplier\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer\n     */\n    public function createRandomMultiplier()\n    {\n        return $this->extractSecret(Random::string(57))['dA'];\n    }\n\n    /**\n     * Converts an affine point to an extended homogeneous coordinate\n     *\n     * From https://tools.ietf.org/html/rfc8032#section-5.2.4 :\n     *\n     * A point (x,y) is represented in extended homogeneous coordinates (X, Y, Z, T),\n     * with x = X/Z, y = Y/Z, x * y = T/Z.\n     *\n     * @return \\phpseclib3\\Math\\PrimeField\\Integer[]\n     */\n    public function convertToInternal(array $p)\n    {\n        if (empty($p)) {\n            return [clone $this->zero, clone $this->one, clone $this->one];\n        }\n\n        if (isset($p[2])) {\n            return $p;\n        }\n\n        $p[2] = clone $this->one;\n\n        return $p;\n    }\n\n    /**\n     * Doubles a point on a curve\n     *\n     * @return FiniteField[]\n     */\n    public function doublePoint(array $p)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p)) {\n            return [];\n        }\n\n        if (!isset($p[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to \"Jacobi\" coordinates or vice versa');\n        }\n\n        // from https://tools.ietf.org/html/rfc8032#page-18\n\n        list($x1, $y1, $z1) = $p;\n\n        $b = $x1->add($y1);\n        $b = $b->multiply($b);\n        $c = $x1->multiply($x1);\n        $d = $y1->multiply($y1);\n        $e = $c->add($d);\n        $h = $z1->multiply($z1);\n        $j = $e->subtract($this->two->multiply($h));\n\n        $x3 = $b->subtract($e)->multiply($j);\n        $y3 = $c->subtract($d)->multiply($e);\n        $z3 = $e->multiply($j);\n\n        return [$x3, $y3, $z3];\n    }\n\n    /**\n     * Adds two points on the curve\n     *\n     * @return FiniteField[]\n     */\n    public function addPoint(array $p, array $q)\n    {\n        if (!isset($this->factory)) {\n            throw new \\RuntimeException('setModulo needs to be called before this method');\n        }\n\n        if (!count($p) || !count($q)) {\n            if (count($q)) {\n                return $q;\n            }\n            if (count($p)) {\n                return $p;\n            }\n            return [];\n        }\n\n        if (!isset($p[2]) || !isset($q[2])) {\n            throw new \\RuntimeException('Affine coordinates need to be manually converted to \"Jacobi\" coordinates or vice versa');\n        }\n\n        if ($p[0]->equals($q[0])) {\n            return !$p[1]->equals($q[1]) ? [] : $this->doublePoint($p);\n        }\n\n        // from https://tools.ietf.org/html/rfc8032#page-17\n\n        list($x1, $y1, $z1) = $p;\n        list($x2, $y2, $z2) = $q;\n\n        $a = $z1->multiply($z2);\n        $b = $a->multiply($a);\n        $c = $x1->multiply($x2);\n        $d = $y1->multiply($y2);\n        $e = $this->d->multiply($c)->multiply($d);\n        $f = $b->subtract($e);\n        $g = $b->add($e);\n        $h = $x1->add($y1)->multiply($x2->add($y2));\n\n        $x3 = $a->multiply($f)->multiply($h->subtract($c)->subtract($d));\n        $y3 = $a->multiply($g)->multiply($d->subtract($c));\n        $z3 = $f->multiply($g);\n\n        return [$x3, $y3, $z3];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160r1.php",
    "content": "<?php\n\n/**\n * brainpoolP160r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP160r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('E95E4A5F737059DC60DFC7AD95B3D8139515620F', 16));\n        $this->setCoefficients(\n            new BigInteger('340E7BE2A280EB74E2BE61BADA745D97E8F7C300', 16),\n            new BigInteger('1E589A8595423412134FAA2DBDEC95C8D8675E58', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3', 16),\n            new BigInteger('1667CB477A1A8EC338F94741669C976316DA6321', 16)\n        );\n        $this->setOrder(new BigInteger('E95E4A5F737059DC60DF5991D45029409E60FC09', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160t1.php",
    "content": "<?php\n\n/**\n * brainpoolP160t1\n *\n * This curve is a twisted version of brainpoolP160r1 with A = -3. With brainpool,\n * the curves ending in r1 are the \"regular\" curves and the curves ending in \"t1\"\n * are the twisted version of the r1 curves. Per https://tools.ietf.org/html/rfc5639#page-7\n * you can convert a point on an r1 curve to a point on a t1 curve thusly:\n *\n *     F(x,y) := (x*Z^2, y*Z^3)\n *\n * The advantage of A = -3 is that some of the point doubling and point addition can be\n * slightly optimized. See http://hyperelliptic.org/EFD/g1p/auto-shortw-projective-3.html\n * vs http://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html for example.\n *\n * phpseclib does not currently take advantage of this optimization opportunity\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP160t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('E95E4A5F737059DC60DFC7AD95B3D8139515620F', 16));\n        $this->setCoefficients(\n            new BigInteger('E95E4A5F737059DC60DFC7AD95B3D8139515620C', 16), // eg. -3\n            new BigInteger('7A556B6DAE535B7B51ED2C4D7DAA7A0B5C55F380', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('B199B13B9B34EFC1397E64BAEB05ACC265FF2378', 16),\n            new BigInteger('ADD6718B7C7C1961F0991B842443772152C9E0AD', 16)\n        );\n        $this->setOrder(new BigInteger('E95E4A5F737059DC60DF5991D45029409E60FC09', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192r1.php",
    "content": "<?php\n\n/**\n * brainpoolP192r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP192r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297', 16));\n        $this->setCoefficients(\n            new BigInteger('6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF', 16),\n            new BigInteger('469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6', 16),\n            new BigInteger('14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F', 16)\n        );\n        $this->setOrder(new BigInteger('C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192t1.php",
    "content": "<?php\n\n/**\n * brainpoolP192t1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP192t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297', 16));\n        $this->setCoefficients(\n            new BigInteger('C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86294', 16), // eg. -3\n            new BigInteger('13D56FFAEC78681E68F9DEB43B35BEC2FB68542E27897B79', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('3AE9E58C82F63C30282E1FE7BBF43FA72C446AF6F4618129', 16),\n            new BigInteger('097E2C5667C2223A902AB5CA449D0084B7E5B3DE7CCC01C9', 16)\n        );\n        $this->setOrder(new BigInteger('C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224r1.php",
    "content": "<?php\n\n/**\n * brainpoolP224r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP224r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF', 16));\n        $this->setCoefficients(\n            new BigInteger('68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43', 16),\n            new BigInteger('2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('0D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D', 16),\n            new BigInteger('58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD', 16)\n        );\n        $this->setOrder(new BigInteger('D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224t1.php",
    "content": "<?php\n\n/**\n * brainpoolP224t1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP224t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF', 16));\n        $this->setCoefficients(\n            new BigInteger('D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FC', 16), // eg. -3\n            new BigInteger('4B337D934104CD7BEF271BF60CED1ED20DA14C08B3BB64F18A60888D', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('6AB1E344CE25FF3896424E7FFE14762ECB49F8928AC0C76029B4D580', 16),\n            new BigInteger('0374E9F5143E568CD23F3F4D7C0D4B1E41C8CC0D1C6ABD5F1A46DB4C', 16)\n        );\n        $this->setOrder(new BigInteger('D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256r1.php",
    "content": "<?php\n\n/**\n * brainpoolP256r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP256r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377', 16));\n        $this->setCoefficients(\n            new BigInteger('7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9', 16),\n            new BigInteger('26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262', 16),\n            new BigInteger('547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997', 16)\n        );\n        $this->setOrder(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256t1.php",
    "content": "<?php\n\n/**\n * brainpoolP256t1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP256t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377', 16));\n        $this->setCoefficients(\n            new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5374', 16), // eg. -3\n            new BigInteger('662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F4', 16),\n            new BigInteger('2D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE', 16)\n        );\n        $this->setOrder(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320r1.php",
    "content": "<?php\n\n/**\n * brainpoolP320r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP320r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F9' .\n                                        '2B9EC7893EC28FCD412B1F1B32E27', 16));\n        $this->setCoefficients(\n            new BigInteger('3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F4' .\n                           '92F375A97D860EB4', 16),\n            new BigInteger('520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD88453981' .\n                           '6F5EB4AC8FB1F1A6', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C7' .\n                           '10AF8D0D39E20611', 16),\n            new BigInteger('14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7' .\n                           'D35245D1692E8EE1', 16)\n        );\n        $this->setOrder(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D4' .\n                                       '82EC7EE8658E98691555B44C59311', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320t1.php",
    "content": "<?php\n\n/**\n * brainpoolP320t1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP320t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F9' .\n                                        '2B9EC7893EC28FCD412B1F1B32E27', 16));\n        $this->setCoefficients(\n            new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28' .\n                           'FCD412B1F1B32E24', 16), // eg. -3\n            new BigInteger('A7F561E038EB1ED560B3D147DB782013064C19F27ED27C6780AAF77FB8A547CE' .\n                           'B5B4FEF422340353', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('925BE9FB01AFC6FB4D3E7D4990010F813408AB106C4F09CB7EE07868CC136FFF' .\n                           '3357F624A21BED52', 16),\n            new BigInteger('63BA3A7A27483EBF6671DBEF7ABB30EBEE084E58A0B077AD42A5A0989D1EE71B' .\n                           '1B9BC0455FB0D2C3', 16)\n        );\n        $this->setOrder(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D4' .\n                                       '82EC7EE8658E98691555B44C59311', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384r1.php",
    "content": "<?php\n\n/**\n * brainpoolP384r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP384r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger(\n            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A7' .\n            '1874700133107EC53',\n            16\n        ));\n        $this->setCoefficients(\n            new BigInteger(\n                '7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503' .\n                'AD4EB04A8C7DD22CE2826',\n                16\n            ),\n            new BigInteger(\n                '4A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DB' .\n                'C9943AB78696FA504C11',\n                16\n            )\n        );\n        $this->setBasePoint(\n            new BigInteger(\n                '1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D' .\n                '646AAEF87B2E247D4AF1E',\n                16\n            ),\n            new BigInteger(\n                '8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E464621779' .\n                '1811142820341263C5315',\n                16\n            )\n        );\n        $this->setOrder(new BigInteger(\n            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC31' .\n            '03B883202E9046565',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384t1.php",
    "content": "<?php\n\n/**\n * brainpoolP384t1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP384t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger(\n            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A7' .\n            '1874700133107EC53',\n            16\n        ));\n        $this->setCoefficients(\n            new BigInteger(\n                '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901' .\n                'D1A71874700133107EC50',\n                16\n            ), // eg. -3\n            new BigInteger(\n                '7F519EADA7BDA81BD826DBA647910F8C4B9346ED8CCDC64E4B1ABD11756DCE1D2074AA263B8' .\n                '8805CED70355A33B471EE',\n                16\n            )\n        );\n        $this->setBasePoint(\n            new BigInteger(\n                '18DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946' .\n                'A5F54D8D0AA2F418808CC',\n                16\n            ),\n            new BigInteger(\n                '25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC' .\n                '2B2912675BF5B9E582928',\n                16\n            )\n        );\n        $this->setOrder(new BigInteger(\n            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC31' .\n            '03B883202E9046565',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512r1.php",
    "content": "<?php\n\n/**\n * brainpoolP512r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP512r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger(\n            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC' .\n            '66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3',\n            16\n        ));\n        $this->setCoefficients(\n            new BigInteger(\n                '7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA82' .\n                '53AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA',\n                16\n            ),\n            new BigInteger(\n                '3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C' .\n                '1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723',\n                16\n            )\n        );\n        $this->setBasePoint(\n            new BigInteger(\n                '81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D' .\n                '0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822',\n                16\n            ),\n            new BigInteger(\n                '7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5' .\n                'F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892',\n                16\n            )\n        );\n        $this->setOrder(new BigInteger(\n            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA' .\n            '92619418661197FAC10471DB1D381085DDADDB58796829CA90069',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512t1.php",
    "content": "<?php\n\n/**\n * brainpoolP512t1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass brainpoolP512t1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger(\n            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC' .\n            '66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3',\n            16\n        ));\n        $this->setCoefficients(\n            new BigInteger(\n                'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC' .\n                '66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F0',\n                16\n            ), // eg. -3\n            new BigInteger(\n                '7CBBBCF9441CFAB76E1890E46884EAE321F70C0BCB4981527897504BEC3E36A62BCDFA23049' .\n                '76540F6450085F2DAE145C22553B465763689180EA2571867423E',\n                16\n            )\n        );\n        $this->setBasePoint(\n            new BigInteger(\n                '640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CD' .\n                'B3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA',\n                16\n            ),\n            new BigInteger(\n                '5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEE' .\n                'F216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332',\n                16\n            )\n        );\n        $this->setOrder(new BigInteger(\n            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA' .\n            '92619418661197FAC10471DB1D381085DDADDB58796829CA90069',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb233.php",
    "content": "<?php\n\n/**\n * nistb233\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistb233 extends sect233r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb409.php",
    "content": "<?php\n\n/**\n * nistb409\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistb409 extends sect409r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk163.php",
    "content": "<?php\n\n/**\n * nistk163\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistk163 extends sect163k1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk233.php",
    "content": "<?php\n\n/**\n * nistk233\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistk233 extends sect233k1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk283.php",
    "content": "<?php\n\n/**\n * sect283k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistk283 extends sect283k1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk409.php",
    "content": "<?php\n\n/**\n * nistk409\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistk409 extends sect409k1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp192.php",
    "content": "<?php\n\n/**\n * nistp192\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistp192 extends secp192r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp224.php",
    "content": "<?php\n\n/**\n * nistp224\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistp224 extends secp224r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp256.php",
    "content": "<?php\n\n/**\n * nistp256\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistp256 extends secp256r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp384.php",
    "content": "<?php\n\n/**\n * nistp384\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistp384 extends secp384r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp521.php",
    "content": "<?php\n\n/**\n * nistp521\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistp521 extends secp521r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistt571.php",
    "content": "<?php\n\n/**\n * nistt571\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class nistt571 extends sect571k1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v1.php",
    "content": "<?php\n\n/**\n * prime192v1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class prime192v1 extends secp192r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v2.php",
    "content": "<?php\n\n/**\n * prime192v2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass prime192v2 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16),\n            new BigInteger('CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A', 16),\n            new BigInteger('6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v3.php",
    "content": "<?php\n\n/**\n * prime192v3\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass prime192v3 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16),\n            new BigInteger('22123DC2395A05CAA7423DAECCC94760A7D462256BD56916', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896', 16),\n            new BigInteger('38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v1.php",
    "content": "<?php\n\n/**\n * prime239v1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass prime239v1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', 16),\n            new BigInteger('6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF', 16),\n            new BigInteger('7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE', 16)\n        );\n        $this->setOrder(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v2.php",
    "content": "<?php\n\n/**\n * prime239v2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass prime239v2 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', 16),\n            new BigInteger('617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7', 16),\n            new BigInteger('5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA', 16)\n        );\n        $this->setOrder(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v3.php",
    "content": "<?php\n\n/**\n * prime239v3\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass prime239v3 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', 16),\n            new BigInteger('255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A', 16),\n            new BigInteger('1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3', 16)\n        );\n        $this->setOrder(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime256v1.php",
    "content": "<?php\n\n/**\n * prime256v1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nfinal class prime256v1 extends secp256r1\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r1.php",
    "content": "<?php\n\n/**\n * secp112r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp112r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('DB7C2ABF62E35E668076BEAD208B', 16));\n        $this->setCoefficients(\n            new BigInteger('DB7C2ABF62E35E668076BEAD2088', 16),\n            new BigInteger('659EF8BA043916EEDE8911702B22', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('09487239995A5EE76B55F9C2F098', 16),\n            new BigInteger('A89CE5AF8724C0A23E0E0FF77500', 16)\n        );\n        $this->setOrder(new BigInteger('DB7C2ABF62E35E7628DFAC6561C5', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r2.php",
    "content": "<?php\n\n/**\n * secp112r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp112r2 extends Prime\n{\n    public function __construct()\n    {\n        // same modulo as secp112r1\n        $this->setModulo(new BigInteger('DB7C2ABF62E35E668076BEAD208B', 16));\n        $this->setCoefficients(\n            new BigInteger('6127C24C05F38A0AAAF65C0EF02C', 16),\n            new BigInteger('51DEF1815DB5ED74FCC34C85D709', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('4BA30AB5E892B4E1649DD0928643', 16),\n            new BigInteger('ADCD46F5882E3747DEF36E956E97', 16)\n        );\n        $this->setOrder(new BigInteger('36DF0AAFD8B8D7597CA10520D04B', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r1.php",
    "content": "<?php\n\n/**\n * secp128r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp128r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC', 16),\n            new BigInteger('E87579C11079F43DD824993C2CEE5ED3', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('161FF7528B899B2D0C28607CA52C5B86', 16),\n            new BigInteger('CF5AC8395BAFEB13C02DA292DDED7A83', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFE0000000075A30D1B9038A115', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r2.php",
    "content": "<?php\n\n/**\n * secp128r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp128r2 extends Prime\n{\n    public function __construct()\n    {\n        // same as secp128r1\n        $this->setModulo(new BigInteger('FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('D6031998D1B3BBFEBF59CC9BBFF9AEE1', 16),\n            new BigInteger('5EEEFCA380D02919DC2C6558BB6D8A5D', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('7B6AA5D85E572983E6FB32A7CDEBC140', 16),\n            new BigInteger('27B6916A894D3AEE7106FE805FC34B44', 16)\n        );\n        $this->setOrder(new BigInteger('3FFFFFFF7FFFFFFFBE0024720613B5A3', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160k1.php",
    "content": "<?php\n\n/**\n * secp160k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\KoblitzPrime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp160k1 extends KoblitzPrime\n{\n    public function __construct()\n    {\n        // same as secp160r2\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73', 16));\n        $this->setCoefficients(\n            new BigInteger('0000000000000000000000000000000000000000', 16),\n            new BigInteger('0000000000000000000000000000000000000007', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('3B4C382CE37AA192A4019E763036F4F5DD4D7EBB', 16),\n            new BigInteger('938CF935318FDCED6BC28286531733C3F03C4FEE', 16)\n        );\n        $this->setOrder(new BigInteger('0100000000000000000001B8FA16DFAB9ACA16B6B3', 16));\n\n        $this->basis = [];\n        $this->basis[] = [\n            'a' => new BigInteger('0096341F1138933BC2F505', -16),\n            'b' => new BigInteger('FF6E9D0418C67BB8D5F562', -16)\n        ];\n        $this->basis[] = [\n            'a' => new BigInteger('01BDCB3A09AAAABEAFF4A8', -16),\n            'b' => new BigInteger('04D12329FF0EF498EA67', -16)\n        ];\n        $this->beta = $this->factory->newInteger(new BigInteger('645B7345A143464942CC46D7CF4D5D1E1E6CBB68', -16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r1.php",
    "content": "<?php\n\n/**\n * secp160r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp160r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC', 16),\n            new BigInteger('1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('4A96B5688EF573284664698968C38BB913CBFC82', 16),\n            new BigInteger('23A628553168947D59DCC912042351377AC5FB32', 16)\n        );\n        $this->setOrder(new BigInteger('0100000000000000000001F4C8F927AED3CA752257', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r2.php",
    "content": "<?php\n\n/**\n * secp160r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp160r2 extends Prime\n{\n    public function __construct()\n    {\n        // same as secp160k1\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70', 16),\n            new BigInteger('B4E134D3FB59EB8BAB57274904664D5AF50388BA', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('52DCB034293A117E1F4FF11B30F7199D3144CE6D', 16),\n            new BigInteger('FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E', 16)\n        );\n        $this->setOrder(new BigInteger('0100000000000000000000351EE786A818F3A1A16B', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192k1.php",
    "content": "<?php\n\n/**\n * secp192k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\KoblitzPrime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp192k1 extends KoblitzPrime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37', 16));\n        $this->setCoefficients(\n            new BigInteger('000000000000000000000000000000000000000000000000', 16),\n            new BigInteger('000000000000000000000000000000000000000000000003', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D', 16),\n            new BigInteger('9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D', 16));\n\n        $this->basis = [];\n        $this->basis[] = [\n            'a' => new BigInteger('00B3FB3400DEC5C4ADCEB8655C', -16),\n            'b' => new BigInteger('8EE96418CCF4CFC7124FDA0F', -16)\n        ];\n        $this->basis[] = [\n            'a' => new BigInteger('01D90D03E8F096B9948B20F0A9', -16),\n            'b' => new BigInteger('42E49819ABBA9474E1083F6B', -16)\n        ];\n        $this->beta = $this->factory->newInteger(new BigInteger('447A96E6C647963E2F7809FEAAB46947F34B0AA3CA0BBA74', -16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192r1.php",
    "content": "<?php\n\n/**\n * secp192r1\n *\n * This is the NIST P-192 curve\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp192r1 extends Prime\n{\n    public function __construct()\n    {\n        $modulo = new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16);\n        $this->setModulo($modulo);\n\n        // algorithm 2.27 from http://diamond.boisestate.edu/~liljanab/MATH308/GuideToECC.pdf#page=66\n        /* in theory this should be faster than regular modular reductions save for one small issue.\n           to convert to / from base-2**8 with BCMath you have to call bcmul() and bcdiv() a lot.\n           to convert to / from base-2**8 with PHP64 you have to call base256_rshift() a lot.\n           in short, converting to / from base-2**8 is pretty expensive and that expense is\n           enough to offset whatever else might be gained by a simplified reduction algorithm.\n           now, if PHP supported unsigned integers things might be different. no bit-shifting\n           would be required for the PHP engine and it'd be a lot faster. but as is, BigInteger\n           uses base-2**31 or base-2**26 depending on whether or not the system is has a 32-bit\n           or a 64-bit OS.\n        */\n        /*\n        $m_length = $this->getLengthInBytes();\n        $this->setReduction(function($c) use ($m_length) {\n            $cBytes = $c->toBytes();\n            $className = $this->className;\n\n            if (strlen($cBytes) > 2 * $m_length) {\n                list(, $r) = $c->divide($className::$modulo);\n                return $r;\n            }\n\n            $c = str_pad($cBytes, 48, \"\\0\", STR_PAD_LEFT);\n            $c = array_reverse(str_split($c, 8));\n\n            $null = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n            $s1 = new BigInteger($c[2] . $c[1] . $c[0], 256);\n            $s2 = new BigInteger($null . $c[3] . $c[3], 256);\n            $s3 = new BigInteger($c[4] . $c[4] . $null, 256);\n            $s4 = new BigInteger($c[5] . $c[5] . $c[5], 256);\n\n            $r = $s1->add($s2)->add($s3)->add($s4);\n            while ($r->compare($className::$modulo) >= 0) {\n                $r = $r->subtract($className::$modulo);\n            }\n\n            return $r;\n        });\n        */\n\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16),\n            new BigInteger('64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012', 16),\n            new BigInteger('07192B95FFC8DA78631011ED6B24CDD573F977A11E794811', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224k1.php",
    "content": "<?php\n\n/**\n * secp224k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\KoblitzPrime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp224k1 extends KoblitzPrime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D', 16));\n        $this->setCoefficients(\n            new BigInteger('00000000000000000000000000000000000000000000000000000000', 16),\n            new BigInteger('00000000000000000000000000000000000000000000000000000005', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C', 16),\n            new BigInteger('7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5', 16)\n        );\n        $this->setOrder(new BigInteger('010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7', 16));\n\n        $this->basis = [];\n        $this->basis[] = [\n            'a' => new BigInteger('00B8ADF1378A6EB73409FA6C9C637D', -16),\n            'b' => new BigInteger('94730F82B358A3776A826298FA6F', -16)\n        ];\n        $this->basis[] = [\n            'a' => new BigInteger('01DCE8D2EC6184CAF0A972769FCC8B', -16),\n            'b' => new BigInteger('4D2100BA3DC75AAB747CCF355DEC', -16)\n        ];\n        $this->beta = $this->factory->newInteger(new BigInteger('01F178FFA4B17C89E6F73AECE2AAD57AF4C0A748B63C830947B27E04', -16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224r1.php",
    "content": "<?php\n\n/**\n * secp224r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp224r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE', 16),\n            new BigInteger('B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21', 16),\n            new BigInteger('BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256k1.php",
    "content": "<?php\n\n/**\n * secp256k1\n *\n * This is the curve used in Bitcoin\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\n//use phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\KoblitzPrime;\nuse phpseclib3\\Math\\BigInteger;\n\n//class secp256k1 extends Prime\nclass secp256k1 extends KoblitzPrime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F', 16));\n        $this->setCoefficients(\n            new BigInteger('0000000000000000000000000000000000000000000000000000000000000000', 16),\n            new BigInteger('0000000000000000000000000000000000000000000000000000000000000007', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141', 16));\n        $this->setBasePoint(\n            new BigInteger('79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798', 16),\n            new BigInteger('483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8', 16)\n        );\n\n        $this->basis = [];\n        $this->basis[] = [\n            'a' => new BigInteger('3086D221A7D46BCDE86C90E49284EB15', -16),\n            'b' => new BigInteger('FF1BBC8129FEF177D790AB8056F5401B3D', -16)\n        ];\n        $this->basis[] = [\n            'a' => new BigInteger('114CA50F7A8E2F3F657C1108D9D44CFD8', -16),\n            'b' => new BigInteger('3086D221A7D46BCDE86C90E49284EB15', -16)\n        ];\n        $this->beta = $this->factory->newInteger(new BigInteger('7AE96A2B657C07106E64479EAC3434E99CF0497512F58995C1396C28719501EE', -16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256r1.php",
    "content": "<?php\n\n/**\n * secp256r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp256r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC', 16),\n            new BigInteger('5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296', 16),\n            new BigInteger('4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5', 16)\n        );\n        $this->setOrder(new BigInteger('FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp384r1.php",
    "content": "<?php\n\n/**\n * secp384r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp384r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger(\n            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF',\n            16\n        ));\n        $this->setCoefficients(\n            new BigInteger(\n                'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC',\n                16\n            ),\n            new BigInteger(\n                'B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF',\n                16\n            )\n        );\n        $this->setBasePoint(\n            new BigInteger(\n                'AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7',\n                16\n            ),\n            new BigInteger(\n                '3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F',\n                16\n            )\n        );\n        $this->setOrder(new BigInteger(\n            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp521r1.php",
    "content": "<?php\n\n/**\n * secp521r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime;\nuse phpseclib3\\Math\\BigInteger;\n\nclass secp521r1 extends Prime\n{\n    public function __construct()\n    {\n        $this->setModulo(new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n                                        'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n                                        'FFFF', 16));\n        $this->setCoefficients(\n            new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n                           'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n                           'FFFC', 16),\n            new BigInteger('0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF1' .\n                           '09E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B50' .\n                           '3F00', 16)\n        );\n        $this->setBasePoint(\n            new BigInteger('00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D' .\n                           '3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5' .\n                           'BD66', 16),\n            new BigInteger('011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E' .\n                           '662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD1' .\n                           '6650', 16)\n        );\n        $this->setOrder(new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n                                       'FFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E9138' .\n                                       '6409', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r1.php",
    "content": "<?php\n\n/**\n * sect113r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect113r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(113, 9, 0);\n        $this->setCoefficients(\n            '003088250CA6E7C7FE649CE85820F7',\n            '00E8BEE4D3E2260744188BE0E9C723'\n        );\n        $this->setBasePoint(\n            '009D73616F35F4AB1407D73562C10F',\n            '00A52830277958EE84D1315ED31886'\n        );\n        $this->setOrder(new BigInteger('0100000000000000D9CCEC8A39E56F', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r2.php",
    "content": "<?php\n\n/**\n * sect113r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect113r2 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(113, 9, 0);\n        $this->setCoefficients(\n            '00689918DBEC7E5A0DD6DFC0AA55C7',\n            '0095E9A9EC9B297BD4BF36E059184F'\n        );\n        $this->setBasePoint(\n            '01A57A6A7B26CA5EF52FCDB8164797',\n            '00B3ADC94ED1FE674C06E695BABA1D'\n        );\n        $this->setOrder(new BigInteger('010000000000000108789B2496AF93', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r1.php",
    "content": "<?php\n\n/**\n * sect131r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect131r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(131, 8, 3, 2, 0);\n        $this->setCoefficients(\n            '07A11B09A76B562144418FF3FF8C2570B8',\n            '0217C05610884B63B9C6C7291678F9D341'\n        );\n        $this->setBasePoint(\n            '0081BAF91FDF9833C40F9C181343638399',\n            '078C6E7EA38C001F73C8134B1B4EF9E150'\n        );\n        $this->setOrder(new BigInteger('0400000000000000023123953A9464B54D', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r2.php",
    "content": "<?php\n\n/**\n * sect131r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect131r2 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(131, 8, 3, 2, 0);\n        $this->setCoefficients(\n            '03E5A88919D7CAFCBF415F07C2176573B2',\n            '04B8266A46C55657AC734CE38F018F2192'\n        );\n        $this->setBasePoint(\n            '0356DCD8F2F95031AD652D23951BB366A8',\n            '0648F06D867940A5366D9E265DE9EB240F'\n        );\n        $this->setOrder(new BigInteger('0400000000000000016954A233049BA98F', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163k1.php",
    "content": "<?php\n\n/**\n * sect163k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect163k1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(163, 7, 6, 3, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000001',\n            '000000000000000000000000000000000000000001'\n        );\n        $this->setBasePoint(\n            '02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8',\n            '0289070FB05D38FF58321F2E800536D538CCDAA3D9'\n        );\n        $this->setOrder(new BigInteger('04000000000000000000020108A2E0CC0D99F8A5EF', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r1.php",
    "content": "<?php\n\n/**\n * sect163r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect163r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(163, 7, 6, 3, 0);\n        $this->setCoefficients(\n            '07B6882CAAEFA84F9554FF8428BD88E246D2782AE2',\n            '0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9'\n        );\n        $this->setBasePoint(\n            '0369979697AB43897789566789567F787A7876A654',\n            '00435EDB42EFAFB2989D51FEFCE3C80988F41FF883'\n        );\n        $this->setOrder(new BigInteger('03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r2.php",
    "content": "<?php\n\n/**\n * sect163r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect163r2 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(163, 7, 6, 3, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000001',\n            '020A601907B8C953CA1481EB10512F78744A3205FD'\n        );\n        $this->setBasePoint(\n            '03F0EBA16286A2D57EA0991168D4994637E8343E36',\n            '00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1'\n        );\n        $this->setOrder(new BigInteger('040000000000000000000292FE77E70C12A4234C33', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r1.php",
    "content": "<?php\n\n/**\n * sect193r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect193r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(193, 15, 0);\n        $this->setCoefficients(\n            '0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01',\n            '00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814'\n        );\n        $this->setBasePoint(\n            '01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1',\n            '0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05'\n        );\n        $this->setOrder(new BigInteger('01000000000000000000000000C7F34A778F443ACC920EBA49', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r2.php",
    "content": "<?php\n\n/**\n * sect193r2\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect193r2 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(193, 15, 0);\n        $this->setCoefficients(\n            '0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B',\n            '00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE'\n        );\n        $this->setBasePoint(\n            '00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F',\n            '01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C'\n        );\n        $this->setOrder(new BigInteger('010000000000000000000000015AAB561B005413CCD4EE99D5', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233k1.php",
    "content": "<?php\n\n/**\n * sect233k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect233k1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(233, 74, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000000',\n            '000000000000000000000000000000000000000000000000000000000001'\n        );\n        $this->setBasePoint(\n            '017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126',\n            '01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3'\n        );\n        $this->setOrder(new BigInteger('8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233r1.php",
    "content": "<?php\n\n/**\n * sect233r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect233r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(233, 74, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000001',\n            '0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD'\n        );\n        $this->setBasePoint(\n            '00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B',\n            '01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052'\n        );\n        $this->setOrder(new BigInteger('01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect239k1.php",
    "content": "<?php\n\n/**\n * sect239k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect239k1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(239, 158, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000000',\n            '000000000000000000000000000000000000000000000000000000000001'\n        );\n        $this->setBasePoint(\n            '29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC',\n            '76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA'\n        );\n        $this->setOrder(new BigInteger('2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283k1.php",
    "content": "<?php\n\n/**\n * sect283k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect283k1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(283, 12, 7, 5, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000000000000000000',\n            '000000000000000000000000000000000000000000000000000000000000000000000001'\n        );\n        $this->setBasePoint(\n            '0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836',\n            '01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259'\n        );\n        $this->setOrder(new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283r1.php",
    "content": "<?php\n\n/**\n * sect283r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect283r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(283, 12, 7, 5, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000000000000000001',\n            '027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5'\n        );\n        $this->setBasePoint(\n            '05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053',\n            '03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4'\n        );\n        $this->setOrder(new BigInteger('03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307', 16));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409k1.php",
    "content": "<?php\n\n/**\n * sect409k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect409k1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(409, 87, 0);\n        $this->setCoefficients(\n            '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n            '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001'\n        );\n        $this->setBasePoint(\n            '0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746',\n            '01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B'\n        );\n        $this->setOrder(new BigInteger(\n            '7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F' .\n            '83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409r1.php",
    "content": "<?php\n\n/**\n * sect409r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect409r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(409, 87, 0);\n        $this->setCoefficients(\n            '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001',\n            '0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F'\n        );\n        $this->setBasePoint(\n            '015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7',\n            '0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706'\n        );\n        $this->setOrder(new BigInteger(\n            '010000000000000000000000000000000000000000000000000001E2' .\n            'AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571k1.php",
    "content": "<?php\n\n/**\n * sect571k1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect571k1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(571, 10, 5, 2, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000000000000000000' .\n            '000000000000000000000000000000000000000000000000000000000000000000000000',\n            '000000000000000000000000000000000000000000000000000000000000000000000000' .\n            '000000000000000000000000000000000000000000000000000000000000000000000001'\n        );\n        $this->setBasePoint(\n            '026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA443709584' .\n            '93B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972',\n            '0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0' .\n            'AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3'\n        );\n        $this->setOrder(new BigInteger(\n            '020000000000000000000000000000000000000000000000000000000000000000000000' .\n            '131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571r1.php",
    "content": "<?php\n\n/**\n * sect571r1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wiggint  on <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Curves;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary;\nuse phpseclib3\\Math\\BigInteger;\n\nclass sect571r1 extends Binary\n{\n    public function __construct()\n    {\n        $this->setModulo(571, 10, 5, 2, 0);\n        $this->setCoefficients(\n            '000000000000000000000000000000000000000000000000000000000000000000000000' .\n            '000000000000000000000000000000000000000000000000000000000000000000000001',\n            '02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD' .\n            '8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A'\n        );\n        $this->setBasePoint(\n            '0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950' .\n            'F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19',\n            '037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43' .\n            'BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B'\n        );\n        $this->setOrder(new BigInteger(\n            '03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .\n            'E661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47',\n            16\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/Common.php",
    "content": "<?php\n\n/**\n * Generic EC Key Parsing Helper functions\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Binary as BinaryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime as PrimeCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Generic EC Key Parsing Helper functions\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\ntrait Common\n{\n    /**\n     * Curve OIDs\n     *\n     * @var array\n     */\n    private static $curveOIDs = [];\n\n    /**\n     * Child OIDs loaded\n     *\n     * @var bool\n     */\n    protected static $childOIDsLoaded = false;\n\n    /**\n     * Use Named Curves\n     *\n     * @var bool\n     */\n    private static $useNamedCurves = true;\n\n    /**\n     * Initialize static variables\n     */\n    private static function initialize_static_variables()\n    {\n        if (empty(self::$curveOIDs)) {\n            // the sec* curves are from the standards for efficient cryptography group\n            // sect* curves are curves over binary finite fields\n            // secp* curves are curves over prime finite fields\n            // sec*r* curves are regular curves; sec*k* curves are koblitz curves\n            // brainpool*r* curves are regular prime finite field curves\n            // brainpool*t* curves are twisted versions of the brainpool*r* curves\n            self::$curveOIDs = [\n                'prime192v1' => '1.2.840.10045.3.1.1', // J.5.1, example 1 (aka secp192r1)\n                'prime192v2' => '1.2.840.10045.3.1.2', // J.5.1, example 2\n                'prime192v3' => '1.2.840.10045.3.1.3', // J.5.1, example 3\n                'prime239v1' => '1.2.840.10045.3.1.4', // J.5.2, example 1\n                'prime239v2' => '1.2.840.10045.3.1.5', // J.5.2, example 2\n                'prime239v3' => '1.2.840.10045.3.1.6', // J.5.2, example 3\n                'prime256v1' => '1.2.840.10045.3.1.7', // J.5.3, example 1 (aka secp256r1)\n\n                // https://tools.ietf.org/html/rfc5656#section-10\n                'nistp256' => '1.2.840.10045.3.1.7', // aka secp256r1\n                'nistp384' => '1.3.132.0.34', // aka secp384r1\n                'nistp521' => '1.3.132.0.35', // aka secp521r1\n\n                'nistk163' => '1.3.132.0.1', // aka sect163k1\n                'nistp192' => '1.2.840.10045.3.1.1', // aka secp192r1\n                'nistp224' => '1.3.132.0.33', // aka secp224r1\n                'nistk233' => '1.3.132.0.26', // aka sect233k1\n                'nistb233' => '1.3.132.0.27', // aka sect233r1\n                'nistk283' => '1.3.132.0.16', // aka sect283k1\n                'nistk409' => '1.3.132.0.36', // aka sect409k1\n                'nistb409' => '1.3.132.0.37', // aka sect409r1\n                'nistt571' => '1.3.132.0.38', // aka sect571k1\n\n                // from https://tools.ietf.org/html/rfc5915\n                'secp192r1' => '1.2.840.10045.3.1.1', // aka prime192v1\n                'sect163k1' => '1.3.132.0.1',\n                'sect163r2' => '1.3.132.0.15',\n                'secp224r1' => '1.3.132.0.33',\n                'sect233k1' => '1.3.132.0.26',\n                'sect233r1' => '1.3.132.0.27',\n                'secp256r1' => '1.2.840.10045.3.1.7', // aka prime256v1\n                'sect283k1' => '1.3.132.0.16',\n                'sect283r1' => '1.3.132.0.17',\n                'secp384r1' => '1.3.132.0.34',\n                'sect409k1' => '1.3.132.0.36',\n                'sect409r1' => '1.3.132.0.37',\n                'secp521r1' => '1.3.132.0.35',\n                'sect571k1' => '1.3.132.0.38',\n                'sect571r1' => '1.3.132.0.39',\n                // from http://www.secg.org/SEC2-Ver-1.0.pdf\n                'secp112r1' => '1.3.132.0.6',\n                'secp112r2' => '1.3.132.0.7',\n                'secp128r1' => '1.3.132.0.28',\n                'secp128r2' => '1.3.132.0.29',\n                'secp160k1' => '1.3.132.0.9',\n                'secp160r1' => '1.3.132.0.8',\n                'secp160r2' => '1.3.132.0.30',\n                'secp192k1' => '1.3.132.0.31',\n                'secp224k1' => '1.3.132.0.32',\n                'secp256k1' => '1.3.132.0.10',\n\n                'sect113r1' => '1.3.132.0.4',\n                'sect113r2' => '1.3.132.0.5',\n                'sect131r1' => '1.3.132.0.22',\n                'sect131r2' => '1.3.132.0.23',\n                'sect163r1' => '1.3.132.0.2',\n                'sect193r1' => '1.3.132.0.24',\n                'sect193r2' => '1.3.132.0.25',\n                'sect239k1' => '1.3.132.0.3',\n\n                // from http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.202.2977&rep=rep1&type=pdf#page=36\n                /*\n                'c2pnb163v1' => '1.2.840.10045.3.0.1', // J.4.1, example 1\n                'c2pnb163v2' => '1.2.840.10045.3.0.2', // J.4.1, example 2\n                'c2pnb163v3' => '1.2.840.10045.3.0.3', // J.4.1, example 3\n                'c2pnb172w1' => '1.2.840.10045.3.0.4', // J.4.2, example 1\n                'c2tnb191v1' => '1.2.840.10045.3.0.5', // J.4.3, example 1\n                'c2tnb191v2' => '1.2.840.10045.3.0.6', // J.4.3, example 2\n                'c2tnb191v3' => '1.2.840.10045.3.0.7', // J.4.3, example 3\n                'c2onb191v4' => '1.2.840.10045.3.0.8', // J.4.3, example 4\n                'c2onb191v5' => '1.2.840.10045.3.0.9', // J.4.3, example 5\n                'c2pnb208w1' => '1.2.840.10045.3.0.10', // J.4.4, example 1\n                'c2tnb239v1' => '1.2.840.10045.3.0.11', // J.4.5, example 1\n                'c2tnb239v2' => '1.2.840.10045.3.0.12', // J.4.5, example 2\n                'c2tnb239v3' => '1.2.840.10045.3.0.13', // J.4.5, example 3\n                'c2onb239v4' => '1.2.840.10045.3.0.14', // J.4.5, example 4\n                'c2onb239v5' => '1.2.840.10045.3.0.15', // J.4.5, example 5\n                'c2pnb272w1' => '1.2.840.10045.3.0.16', // J.4.6, example 1\n                'c2pnb304w1' => '1.2.840.10045.3.0.17', // J.4.7, example 1\n                'c2tnb359v1' => '1.2.840.10045.3.0.18', // J.4.8, example 1\n                'c2pnb368w1' => '1.2.840.10045.3.0.19', // J.4.9, example 1\n                'c2tnb431r1' => '1.2.840.10045.3.0.20', // J.4.10, example 1\n                */\n\n                // http://www.ecc-brainpool.org/download/Domain-parameters.pdf\n                // https://tools.ietf.org/html/rfc5639\n                'brainpoolP160r1' => '1.3.36.3.3.2.8.1.1.1',\n                'brainpoolP160t1' => '1.3.36.3.3.2.8.1.1.2',\n                'brainpoolP192r1' => '1.3.36.3.3.2.8.1.1.3',\n                'brainpoolP192t1' => '1.3.36.3.3.2.8.1.1.4',\n                'brainpoolP224r1' => '1.3.36.3.3.2.8.1.1.5',\n                'brainpoolP224t1' => '1.3.36.3.3.2.8.1.1.6',\n                'brainpoolP256r1' => '1.3.36.3.3.2.8.1.1.7',\n                'brainpoolP256t1' => '1.3.36.3.3.2.8.1.1.8',\n                'brainpoolP320r1' => '1.3.36.3.3.2.8.1.1.9',\n                'brainpoolP320t1' => '1.3.36.3.3.2.8.1.1.10',\n                'brainpoolP384r1' => '1.3.36.3.3.2.8.1.1.11',\n                'brainpoolP384t1' => '1.3.36.3.3.2.8.1.1.12',\n                'brainpoolP512r1' => '1.3.36.3.3.2.8.1.1.13',\n                'brainpoolP512t1' => '1.3.36.3.3.2.8.1.1.14'\n            ];\n            ASN1::loadOIDs([\n                'prime-field' => '1.2.840.10045.1.1',\n                'characteristic-two-field' => '1.2.840.10045.1.2',\n                'characteristic-two-basis' => '1.2.840.10045.1.2.3',\n                // per http://www.secg.org/SEC1-Ver-1.0.pdf#page=84, gnBasis \"not used here\"\n                'gnBasis' => '1.2.840.10045.1.2.3.1', // NULL\n                'tpBasis' => '1.2.840.10045.1.2.3.2', // Trinomial\n                'ppBasis' => '1.2.840.10045.1.2.3.3'  // Pentanomial\n            ] + self::$curveOIDs);\n        }\n    }\n\n    /**\n     * Explicitly set the curve\n     *\n     * If the key contains an implicit curve phpseclib needs the curve\n     * to be explicitly provided\n     *\n     * @param BaseCurve $curve\n     */\n    public static function setImplicitCurve(BaseCurve $curve)\n    {\n        self::$implicitCurve = $curve;\n    }\n\n    /**\n     * Returns an instance of \\phpseclib3\\Crypt\\EC\\BaseCurves\\Base based\n     * on the curve parameters\n     *\n     * @param array $params\n     * @return BaseCurve|false\n     */\n    protected static function loadCurveByParam(array $params)\n    {\n        if (count($params) > 1) {\n            throw new \\RuntimeException('No parameters are present');\n        }\n        if (isset($params['namedCurve'])) {\n            $curve = '\\phpseclib3\\Crypt\\EC\\Curves\\\\' . $params['namedCurve'];\n            if (!class_exists($curve)) {\n                throw new UnsupportedCurveException('Named Curve of ' . $params['namedCurve'] . ' is not supported');\n            }\n            return new $curve();\n        }\n        if (isset($params['implicitCurve'])) {\n            if (!isset(self::$implicitCurve)) {\n                throw new \\RuntimeException('Implicit curves can be provided by calling setImplicitCurve');\n            }\n            return self::$implicitCurve;\n        }\n        if (isset($params['specifiedCurve'])) {\n            $data = $params['specifiedCurve'];\n            switch ($data['fieldID']['fieldType']) {\n                case 'prime-field':\n                    $curve = new PrimeCurve();\n                    $curve->setModulo($data['fieldID']['parameters']);\n                    $curve->setCoefficients(\n                        new BigInteger($data['curve']['a'], 256),\n                        new BigInteger($data['curve']['b'], 256)\n                    );\n                    $point = self::extractPoint(\"\\0\" . $data['base'], $curve);\n                    $curve->setBasePoint(...$point);\n                    $curve->setOrder($data['order']);\n                    return $curve;\n                case 'characteristic-two-field':\n                    $curve = new BinaryCurve();\n                    $params = ASN1::decodeBER($data['fieldID']['parameters']);\n                    $params = ASN1::asn1map($params[0], Maps\\Characteristic_two::MAP);\n                    $modulo = [(int) $params['m']->toString()];\n                    switch ($params['basis']) {\n                        case 'tpBasis':\n                            $modulo[] = (int) $params['parameters']->toString();\n                            break;\n                        case 'ppBasis':\n                            $temp = ASN1::decodeBER($params['parameters']);\n                            $temp = ASN1::asn1map($temp[0], Maps\\Pentanomial::MAP);\n                            $modulo[] = (int) $temp['k3']->toString();\n                            $modulo[] = (int) $temp['k2']->toString();\n                            $modulo[] = (int) $temp['k1']->toString();\n                    }\n                    $modulo[] = 0;\n                    $curve->setModulo(...$modulo);\n                    $len = ceil($modulo[0] / 8);\n                    $curve->setCoefficients(\n                        Strings::bin2hex($data['curve']['a']),\n                        Strings::bin2hex($data['curve']['b'])\n                    );\n                    $point = self::extractPoint(\"\\0\" . $data['base'], $curve);\n                    $curve->setBasePoint(...$point);\n                    $curve->setOrder($data['order']);\n                    return $curve;\n                default:\n                    throw new UnsupportedCurveException('Field Type of ' . $data['fieldID']['fieldType'] . ' is not supported');\n            }\n        }\n        throw new \\RuntimeException('No valid parameters are present');\n    }\n\n    /**\n     * Extract points from a string\n     *\n     * Supports both compressed and uncompressed points\n     *\n     * @param string $str\n     * @param BaseCurve $curve\n     * @return object[]\n     */\n    public static function extractPoint($str, BaseCurve $curve)\n    {\n        if ($curve instanceof TwistedEdwardsCurve) {\n            // first step of point deciding as discussed at the following URL's:\n            // https://tools.ietf.org/html/rfc8032#section-5.1.3\n            // https://tools.ietf.org/html/rfc8032#section-5.2.3\n            $y = $str;\n            $y = strrev($y);\n            $sign = (bool) (ord($y[0]) & 0x80);\n            $y[0] = $y[0] & chr(0x7F);\n            $y = new BigInteger($y, 256);\n            if ($y->compare($curve->getModulo()) >= 0) {\n                throw new \\RuntimeException('The Y coordinate should not be >= the modulo');\n            }\n            $point = $curve->recoverX($y, $sign);\n            if (!$curve->verifyPoint($point)) {\n                throw new \\RuntimeException('Unable to verify that point exists on curve');\n            }\n            return $point;\n        }\n\n        // the first byte of a bit string represents the number of bits in the last byte that are to be ignored but,\n        // currently, bit strings wanting a non-zero amount of bits trimmed are not supported\n        if (($val = Strings::shift($str)) != \"\\0\") {\n            throw new \\UnexpectedValueException('extractPoint expects the first byte to be null - not ' . Strings::bin2hex($val));\n        }\n        if ($str == \"\\0\") {\n            return [];\n        }\n\n        $keylen = strlen($str);\n        $order = $curve->getLengthInBytes();\n        // point compression is being used\n        if ($keylen == $order + 1) {\n            return $curve->derivePoint($str);\n        }\n\n        // point compression is not being used\n        if ($keylen == 2 * $order + 1) {\n            preg_match(\"#(.)(.{{$order}})(.{{$order}})#s\", $str, $matches);\n            list(, $w, $x, $y) = $matches;\n            if ($w != \"\\4\") {\n                throw new \\UnexpectedValueException('The first byte of an uncompressed point should be 04 - not ' . Strings::bin2hex($val));\n            }\n            $point = [\n                $curve->convertInteger(new BigInteger($x, 256)),\n                $curve->convertInteger(new BigInteger($y, 256))\n            ];\n\n            if (!$curve->verifyPoint($point)) {\n                throw new \\RuntimeException('Unable to verify that point exists on curve');\n            }\n\n            return $point;\n        }\n\n        throw new \\UnexpectedValueException('The string representation of the points is not of an appropriate length');\n    }\n\n    /**\n     * Encode Parameters\n     *\n     * @todo Maybe at some point this could be moved to __toString() for each of the curves?\n     * @param BaseCurve $curve\n     * @param bool $returnArray optional\n     * @param array $options optional\n     * @return string|false\n     */\n    private static function encodeParameters(BaseCurve $curve, $returnArray = false, array $options = [])\n    {\n        $useNamedCurves = isset($options['namedCurve']) ? $options['namedCurve'] : self::$useNamedCurves;\n\n        $reflect = new \\ReflectionClass($curve);\n        $name = $reflect->getShortName();\n        if ($useNamedCurves) {\n            if (isset(self::$curveOIDs[$name])) {\n                if ($reflect->isFinal()) {\n                    $reflect = $reflect->getParentClass();\n                    $name = $reflect->getShortName();\n                }\n                return $returnArray ?\n                    ['namedCurve' => $name] :\n                    ASN1::encodeDER(['namedCurve' => $name], Maps\\ECParameters::MAP);\n            }\n            foreach (new \\DirectoryIterator(__DIR__ . '/../../Curves/') as $file) {\n                if ($file->getExtension() != 'php') {\n                    continue;\n                }\n                $testName = $file->getBasename('.php');\n                $class = 'phpseclib3\\Crypt\\EC\\Curves\\\\' . $testName;\n                $reflect = new \\ReflectionClass($class);\n                if ($reflect->isFinal()) {\n                    continue;\n                }\n                $candidate = new $class();\n                switch ($name) {\n                    case 'Prime':\n                        if (!$candidate instanceof PrimeCurve) {\n                            break;\n                        }\n                        if (!$candidate->getModulo()->equals($curve->getModulo())) {\n                            break;\n                        }\n                        if ($candidate->getA()->toBytes() != $curve->getA()->toBytes()) {\n                            break;\n                        }\n                        if ($candidate->getB()->toBytes() != $curve->getB()->toBytes()) {\n                            break;\n                        }\n\n                        list($candidateX, $candidateY) = $candidate->getBasePoint();\n                        list($curveX, $curveY) = $curve->getBasePoint();\n                        if ($candidateX->toBytes() != $curveX->toBytes()) {\n                            break;\n                        }\n                        if ($candidateY->toBytes() != $curveY->toBytes()) {\n                            break;\n                        }\n\n                        return $returnArray ?\n                            ['namedCurve' => $testName] :\n                            ASN1::encodeDER(['namedCurve' => $testName], Maps\\ECParameters::MAP);\n                    case 'Binary':\n                        if (!$candidate instanceof BinaryCurve) {\n                            break;\n                        }\n                        if ($candidate->getModulo() != $curve->getModulo()) {\n                            break;\n                        }\n                        if ($candidate->getA()->toBytes() != $curve->getA()->toBytes()) {\n                            break;\n                        }\n                        if ($candidate->getB()->toBytes() != $curve->getB()->toBytes()) {\n                            break;\n                        }\n\n                        list($candidateX, $candidateY) = $candidate->getBasePoint();\n                        list($curveX, $curveY) = $curve->getBasePoint();\n                        if ($candidateX->toBytes() != $curveX->toBytes()) {\n                            break;\n                        }\n                        if ($candidateY->toBytes() != $curveY->toBytes()) {\n                            break;\n                        }\n\n                        return $returnArray ?\n                            ['namedCurve' => $testName] :\n                            ASN1::encodeDER(['namedCurve' => $testName], Maps\\ECParameters::MAP);\n                }\n            }\n        }\n\n        $order = $curve->getOrder();\n        // we could try to calculate the order thusly:\n        // https://crypto.stackexchange.com/a/27914/4520\n        // https://en.wikipedia.org/wiki/Schoof%E2%80%93Elkies%E2%80%93Atkin_algorithm\n        if (!$order) {\n            throw new \\RuntimeException('Specified Curves need the order to be specified');\n        }\n        $point = $curve->getBasePoint();\n        $x = $point[0]->toBytes();\n        $y = $point[1]->toBytes();\n\n        if ($curve instanceof PrimeCurve) {\n            /*\n             * valid versions are:\n             *\n             * ecdpVer1:\n             *   - neither the curve or the base point are generated verifiably randomly.\n             * ecdpVer2:\n             *   - curve and base point are generated verifiably at random and curve.seed is present\n             * ecdpVer3:\n             *   - base point is generated verifiably at random but curve is not. curve.seed is present\n             */\n            // other (optional) parameters can be calculated using the methods discused at\n            // https://crypto.stackexchange.com/q/28947/4520\n            $data = [\n                'version' => 'ecdpVer1',\n                'fieldID' => [\n                    'fieldType' => 'prime-field',\n                    'parameters' => $curve->getModulo()\n                ],\n                'curve' => [\n                    'a' => $curve->getA()->toBytes(),\n                    'b' => $curve->getB()->toBytes()\n                ],\n                'base' => \"\\4\" . $x . $y,\n                'order' => $order\n            ];\n\n            return $returnArray ?\n                ['specifiedCurve' => $data] :\n                ASN1::encodeDER(['specifiedCurve' => $data], Maps\\ECParameters::MAP);\n        }\n        if ($curve instanceof BinaryCurve) {\n            $modulo = $curve->getModulo();\n            $basis = count($modulo);\n            $m = array_shift($modulo);\n            array_pop($modulo); // the last parameter should always be 0\n            //rsort($modulo);\n            switch ($basis) {\n                case 3:\n                    $basis = 'tpBasis';\n                    $modulo = new BigInteger($modulo[0]);\n                    break;\n                case 5:\n                    $basis = 'ppBasis';\n                    // these should be in strictly ascending order (hence the commented out rsort above)\n                    $modulo = [\n                        'k1' => new BigInteger($modulo[2]),\n                        'k2' => new BigInteger($modulo[1]),\n                        'k3' => new BigInteger($modulo[0])\n                    ];\n                    $modulo = ASN1::encodeDER($modulo, Maps\\Pentanomial::MAP);\n                    $modulo = new ASN1\\Element($modulo);\n            }\n            $params = ASN1::encodeDER([\n                'm' => new BigInteger($m),\n                'basis' => $basis,\n                'parameters' => $modulo\n            ], Maps\\Characteristic_two::MAP);\n            $params = new ASN1\\Element($params);\n            $a = ltrim($curve->getA()->toBytes(), \"\\0\");\n            if (!strlen($a)) {\n                $a = \"\\0\";\n            }\n            $b = ltrim($curve->getB()->toBytes(), \"\\0\");\n            if (!strlen($b)) {\n                $b = \"\\0\";\n            }\n            $data = [\n                'version' => 'ecdpVer1',\n                'fieldID' => [\n                    'fieldType' => 'characteristic-two-field',\n                    'parameters' => $params\n                ],\n                'curve' => [\n                    'a' => $a,\n                    'b' => $b\n                ],\n                'base' => \"\\4\" . $x . $y,\n                'order' => $order\n            ];\n\n            return $returnArray ?\n                ['specifiedCurve' => $data] :\n                ASN1::encodeDER(['specifiedCurve' => $data], Maps\\ECParameters::MAP);\n        }\n\n        throw new UnsupportedCurveException('Curve cannot be serialized');\n    }\n\n    /**\n     * Use Specified Curve\n     *\n     * A specified curve has all the coefficients, the base points, etc, explicitely included.\n     * A specified curve is a more verbose way of representing a curve\n     */\n    public static function useSpecifiedCurve()\n    {\n        self::$useNamedCurves = false;\n    }\n\n    /**\n     * Use Named Curve\n     *\n     * A named curve does not include any parameters. It is up to the EC parameters to\n     * know what the coefficients, the base points, etc, are from the name of the curve.\n     * A named curve is a more concise way of representing a curve\n     */\n    public static function useNamedCurve()\n    {\n        self::$useNamedCurves = true;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/JWK.php",
    "content": "<?php\n\n/**\n * JSON Web Key (RFC7517 / RFC8037) Formatted EC Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\JWK as Progenitor;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\secp256k1;\nuse phpseclib3\\Crypt\\EC\\Curves\\secp256r1;\nuse phpseclib3\\Crypt\\EC\\Curves\\secp384r1;\nuse phpseclib3\\Crypt\\EC\\Curves\\secp521r1;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * JWK Formatted EC Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class JWK extends Progenitor\n{\n    use Common;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        switch ($key->kty) {\n            case 'EC':\n                switch ($key->crv) {\n                    case 'P-256':\n                    case 'P-384':\n                    case 'P-521':\n                    case 'secp256k1':\n                        break;\n                    default:\n                        throw new UnsupportedCurveException('Only P-256, P-384, P-521 and secp256k1 curves are accepted (' . $key->crv . ' provided)');\n                }\n                break;\n            case 'OKP':\n                switch ($key->crv) {\n                    case 'Ed25519':\n                    case 'Ed448':\n                        break;\n                    default:\n                        throw new UnsupportedCurveException('Only Ed25519 and Ed448 curves are accepted (' . $key->crv . ' provided)');\n                }\n                break;\n            default:\n                throw new \\Exception('Only EC and OKP JWK keys are supported');\n        }\n\n        $curve = '\\phpseclib3\\Crypt\\EC\\Curves\\\\' . str_replace('P-', 'nistp', $key->crv);\n        $curve = new $curve();\n\n        if ($curve instanceof TwistedEdwardsCurve) {\n            $QA = self::extractPoint(Strings::base64url_decode($key->x), $curve);\n            if (!isset($key->d)) {\n                return compact('curve', 'QA');\n            }\n            $arr = $curve->extractSecret(Strings::base64url_decode($key->d));\n            return compact('curve', 'QA') + $arr;\n        }\n\n        $QA = [\n            $curve->convertInteger(new BigInteger(Strings::base64url_decode($key->x), 256)),\n            $curve->convertInteger(new BigInteger(Strings::base64url_decode($key->y), 256))\n        ];\n\n        if (!$curve->verifyPoint($QA)) {\n            throw new \\RuntimeException('Unable to verify that point exists on curve');\n        }\n\n        if (!isset($key->d)) {\n            return compact('curve', 'QA');\n        }\n\n        $dA = new BigInteger(Strings::base64url_decode($key->d), 256);\n\n        $curve->rangeCheck($dA);\n\n        return compact('curve', 'dA', 'QA');\n    }\n\n    /**\n     * Returns the alias that corresponds to a curve\n     *\n     * @return string\n     */\n    private static function getAlias(BaseCurve $curve)\n    {\n        switch (true) {\n            case $curve instanceof secp256r1:\n                return 'P-256';\n            case $curve instanceof secp384r1:\n                return 'P-384';\n            case $curve instanceof secp521r1:\n                return 'P-521';\n            case $curve instanceof secp256k1:\n                return 'secp256k1';\n        }\n\n        $reflect = new \\ReflectionClass($curve);\n        $curveName = $reflect->isFinal() ?\n            $reflect->getParentClass()->getShortName() :\n            $reflect->getShortName();\n        throw new UnsupportedCurveException(\"$curveName is not a supported curve\");\n    }\n\n    /**\n     * Return the array superstructure for an EC public key\n     *\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @return array\n     */\n    private static function savePublicKeyHelper(BaseCurve $curve, array $publicKey)\n    {\n        if ($curve instanceof TwistedEdwardsCurve) {\n            return [\n                'kty' => 'OKP',\n                'crv' => $curve instanceof Ed25519 ? 'Ed25519' : 'Ed448',\n                'x' => Strings::base64url_encode($curve->encodePoint($publicKey))\n            ];\n        }\n\n        return [\n            'kty' => 'EC',\n            'crv' => self::getAlias($curve),\n            'x' => Strings::base64url_encode($publicKey[0]->toBytes()),\n            'y' => Strings::base64url_encode($publicKey[1]->toBytes())\n        ];\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])\n    {\n        $key = self::savePublicKeyHelper($curve, $publicKey);\n\n        return self::wrapKey($key, $options);\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param Ed25519 $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])\n    {\n        $key = self::savePublicKeyHelper($curve, $publicKey);\n        $key['d'] = $curve instanceof TwistedEdwardsCurve ? $secret : $privateKey->toBytes();\n        $key['d'] = Strings::base64url_encode($key['d']);\n\n        return self::wrapKey($key, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php",
    "content": "<?php\n\n/**\n * Montgomery Private Key Handler\n *\n * \"Naked\" Curve25519 private keys can pretty much be any sequence of random 32x bytes so unless\n * we have a \"hidden\" key handler pretty much every 32 byte string will be loaded as a curve25519\n * private key even if it probably isn't one by PublicKeyLoader.\n *\n * \"Naked\" Curve25519 public keys also a string of 32 bytes so distinguishing between a \"naked\"\n * curve25519 private key and a public key is nigh impossible, hence separate plugins for each\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve448;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Montgomery Curve Private Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class MontgomeryPrivate\n{\n    /**\n     * Is invisible flag\n     *\n     */\n    const IS_INVISIBLE = true;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        switch (strlen($key)) {\n            case 32:\n                $curve = new Curve25519();\n                break;\n            case 56:\n                $curve = new Curve448();\n                break;\n            default:\n                throw new \\LengthException('The only supported lengths are 32 and 56');\n        }\n\n        $components = ['curve' => $curve];\n        $components['dA'] = new BigInteger($key, 256);\n        $curve->rangeCheck($components['dA']);\n        // note that EC::getEncodedCoordinates does some additional \"magic\" (it does strrev on the result)\n        $components['QA'] = $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);\n\n        return $components;\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param MontgomeryCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @return string\n     */\n    public static function savePublicKey(MontgomeryCurve $curve, array $publicKey)\n    {\n        return strrev($publicKey[0]->toBytes());\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param MontgomeryCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, MontgomeryCurve $curve, array $publicKey, $secret = null, $password = '')\n    {\n        if (!empty($password) && is_string($password)) {\n            throw new UnsupportedFormatException('MontgomeryPrivate private keys do not support encryption');\n        }\n\n        return $privateKey->toBytes();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPublic.php",
    "content": "<?php\n\n/**\n * Montgomery Public Key Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve448;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Montgomery Public Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class MontgomeryPublic\n{\n    /**\n     * Is invisible flag\n     *\n     */\n    const IS_INVISIBLE = true;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        switch (strlen($key)) {\n            case 32:\n                $curve = new Curve25519();\n                break;\n            case 56:\n                $curve = new Curve448();\n                break;\n            default:\n                throw new \\LengthException('The only supported lengths are 32 and 56');\n        }\n\n        $components = ['curve' => $curve];\n        $components['QA'] = [$components['curve']->convertInteger(new BigInteger(strrev($key), 256))];\n\n        return $components;\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param MontgomeryCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @return string\n     */\n    public static function savePublicKey(MontgomeryCurve $curve, array $publicKey)\n    {\n        return strrev($publicKey[0]->toBytes());\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/OpenSSH.php",
    "content": "<?php\n\n/**\n * OpenSSH Formatted EC Key Handler\n *\n * PHP version 5\n *\n * Place in $HOME/.ssh/authorized_keys\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\OpenSSH as Progenitor;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * OpenSSH Formatted EC Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSH extends Progenitor\n{\n    use Common;\n\n    /**\n     * Supported Key Types\n     *\n     * @var array\n     */\n    protected static $types = [\n        'ecdsa-sha2-nistp256',\n        'ecdsa-sha2-nistp384',\n        'ecdsa-sha2-nistp521',\n        'ssh-ed25519'\n    ];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $parsed = parent::load($key, $password);\n\n        if (isset($parsed['paddedKey'])) {\n            $paddedKey = $parsed['paddedKey'];\n            list($type) = Strings::unpackSSH2('s', $paddedKey);\n            if ($type != $parsed['type']) {\n                throw new \\RuntimeException(\"The public and private keys are not of the same type ($type vs $parsed[type])\");\n            }\n            if ($type == 'ssh-ed25519') {\n                list(, $key, $comment) = Strings::unpackSSH2('sss', $paddedKey);\n                $key = libsodium::load($key);\n                $key['comment'] = $comment;\n                return $key;\n            }\n            list($curveName, $publicKey, $privateKey, $comment) = Strings::unpackSSH2('ssis', $paddedKey);\n            $curve = self::loadCurveByParam(['namedCurve' => $curveName]);\n            $curve->rangeCheck($privateKey);\n            return [\n                'curve' => $curve,\n                'dA' => $privateKey,\n                'QA' => self::extractPoint(\"\\0$publicKey\", $curve),\n                'comment' => $comment\n            ];\n        }\n\n        if ($parsed['type'] == 'ssh-ed25519') {\n            if (Strings::shift($parsed['publicKey'], 4) != \"\\0\\0\\0\\x20\") {\n                throw new \\RuntimeException('Length of ssh-ed25519 key should be 32');\n            }\n\n            $curve = new Ed25519();\n            $qa = self::extractPoint($parsed['publicKey'], $curve);\n        } else {\n            list($curveName, $publicKey) = Strings::unpackSSH2('ss', $parsed['publicKey']);\n            $curveName = '\\phpseclib3\\Crypt\\EC\\Curves\\\\' . $curveName;\n            $curve = new $curveName();\n\n            $qa = self::extractPoint(\"\\0\" . $publicKey, $curve);\n        }\n\n        return [\n            'curve' => $curve,\n            'QA' => $qa,\n            'comment' => $parsed['comment']\n        ];\n    }\n\n    /**\n     * Returns the alias that corresponds to a curve\n     *\n     * @return string\n     */\n    private static function getAlias(BaseCurve $curve)\n    {\n        self::initialize_static_variables();\n\n        $reflect = new \\ReflectionClass($curve);\n        $name = $reflect->getShortName();\n\n        $oid = self::$curveOIDs[$name];\n        $aliases = array_filter(self::$curveOIDs, function ($v) use ($oid) {\n            return $v == $oid;\n        });\n        $aliases = array_keys($aliases);\n\n        for ($i = 0; $i < count($aliases); $i++) {\n            if (in_array('ecdsa-sha2-' . $aliases[$i], self::$types)) {\n                $alias = $aliases[$i];\n                break;\n            }\n        }\n\n        if (!isset($alias)) {\n            throw new UnsupportedCurveException($name . ' is not a curve that the OpenSSH plugin supports');\n        }\n\n        return $alias;\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])\n    {\n        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;\n\n        if ($curve instanceof Ed25519) {\n            $key = Strings::packSSH2('ss', 'ssh-ed25519', $curve->encodePoint($publicKey));\n\n            if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n                return $key;\n            }\n\n            $key = 'ssh-ed25519 ' . base64_encode($key) . ' ' . $comment;\n            return $key;\n        }\n\n        $alias = self::getAlias($curve);\n\n        $points = \"\\4\" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();\n        $key = Strings::packSSH2('sss', 'ecdsa-sha2-' . $alias, $alias, $points);\n\n        if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n            return $key;\n        }\n\n        $key = 'ecdsa-sha2-' . $alias . ' ' . base64_encode($key) . ' ' . $comment;\n\n        return $key;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param Ed25519 $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])\n    {\n        if ($curve instanceof Ed25519) {\n            if (!isset($secret)) {\n                throw new \\RuntimeException('Private Key does not have a secret set');\n            }\n            if (strlen($secret) != 32) {\n                throw new \\RuntimeException('Private Key secret is not of the correct length');\n            }\n\n            $pubKey = $curve->encodePoint($publicKey);\n\n            $publicKey = Strings::packSSH2('ss', 'ssh-ed25519', $pubKey);\n            $privateKey = Strings::packSSH2('sss', 'ssh-ed25519', $pubKey, $secret . $pubKey);\n\n            return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);\n        }\n\n        $alias = self::getAlias($curve);\n\n        $points = \"\\4\" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();\n        $publicKey = self::savePublicKey($curve, $publicKey, ['binary' => true]);\n\n        $privateKey = Strings::packSSH2('sssi', 'ecdsa-sha2-' . $alias, $alias, $points, $privateKey);\n\n        return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS1.php",
    "content": "<?php\n\n/**\n * \"PKCS1\" (RFC5915) Formatted EC Key Handler\n *\n * PHP version 5\n *\n * Used by File/X509.php\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN EC PRIVATE KEY-----\n * -----BEGIN EC PARAMETERS-----\n *\n * Technically, PKCS1 is for RSA keys, only, but we're using PKCS1 to describe\n * DSA, whose format isn't really formally described anywhere, so might as well\n * use it to describe this, too. PKCS1 is easier to remember than RFC5915, after\n * all. I suppose this could also be named IETF but idk\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS1 as Progenitor;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * \"PKCS1\" (RFC5915) Formatted EC Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS1 extends Progenitor\n{\n    use Common;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        self::initialize_static_variables();\n\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        if (strpos($key, 'BEGIN EC PARAMETERS') && strpos($key, 'BEGIN EC PRIVATE KEY')) {\n            $components = [];\n\n            preg_match('#-*BEGIN EC PRIVATE KEY-*[^-]*-*END EC PRIVATE KEY-*#s', $key, $matches);\n            $decoded = parent::load($matches[0], $password);\n            $decoded = ASN1::decodeBER($decoded);\n            if (!$decoded) {\n                throw new \\RuntimeException('Unable to decode BER');\n            }\n\n            $ecPrivate = ASN1::asn1map($decoded[0], Maps\\ECPrivateKey::MAP);\n            if (!is_array($ecPrivate)) {\n                throw new \\RuntimeException('Unable to perform ASN1 mapping');\n            }\n\n            if (isset($ecPrivate['parameters'])) {\n                $components['curve'] = self::loadCurveByParam($ecPrivate['parameters']);\n            }\n\n            preg_match('#-*BEGIN EC PARAMETERS-*[^-]*-*END EC PARAMETERS-*#s', $key, $matches);\n            $decoded = parent::load($matches[0], '');\n            $decoded = ASN1::decodeBER($decoded);\n            if (!$decoded) {\n                throw new \\RuntimeException('Unable to decode BER');\n            }\n            $ecParams = ASN1::asn1map($decoded[0], Maps\\ECParameters::MAP);\n            if (!is_array($ecParams)) {\n                throw new \\RuntimeException('Unable to perform ASN1 mapping');\n            }\n            $ecParams = self::loadCurveByParam($ecParams);\n\n            // comparing $ecParams and $components['curve'] directly won't work because they'll have different Math\\Common\\FiniteField classes\n            // even if the modulo is the same\n            if (isset($components['curve']) && self::encodeParameters($ecParams, false, []) != self::encodeParameters($components['curve'], false, [])) {\n                throw new \\RuntimeException('EC PARAMETERS does not correspond to EC PRIVATE KEY');\n            }\n\n            if (!isset($components['curve'])) {\n                $components['curve'] = $ecParams;\n            }\n\n            $components['dA'] = new BigInteger($ecPrivate['privateKey'], 256);\n            $components['curve']->rangeCheck($components['dA']);\n            $components['QA'] = isset($ecPrivate['publicKey']) ?\n                self::extractPoint($ecPrivate['publicKey'], $components['curve']) :\n                $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);\n\n            return $components;\n        }\n\n        $key = parent::load($key, $password);\n\n        $decoded = ASN1::decodeBER($key);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\ECParameters::MAP);\n        if (is_array($key)) {\n            return ['curve' => self::loadCurveByParam($key)];\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\ECPrivateKey::MAP);\n        if (!is_array($key)) {\n            throw new \\RuntimeException('Unable to perform ASN1 mapping');\n        }\n        if (!isset($key['parameters'])) {\n            throw new \\RuntimeException('Key cannot be loaded without parameters');\n        }\n\n        $components = [];\n        $components['curve'] = self::loadCurveByParam($key['parameters']);\n        $components['dA'] = new BigInteger($key['privateKey'], 256);\n        $components['QA'] = isset($ecPrivate['publicKey']) ?\n            self::extractPoint($ecPrivate['publicKey'], $components['curve']) :\n            $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);\n\n        return $components;\n    }\n\n    /**\n     * Convert EC parameters to the appropriate format\n     *\n     * @return string\n     */\n    public static function saveParameters(BaseCurve $curve, array $options = [])\n    {\n        self::initialize_static_variables();\n\n        if ($curve instanceof TwistedEdwardsCurve || $curve instanceof MontgomeryCurve) {\n            throw new UnsupportedCurveException('TwistedEdwards and Montgomery Curves are not supported');\n        }\n\n        $key = self::encodeParameters($curve, false, $options);\n\n        return \"-----BEGIN EC PARAMETERS-----\\r\\n\" .\n               chunk_split(Strings::base64_encode($key), 64) .\n               \"-----END EC PARAMETERS-----\\r\\n\";\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])\n    {\n        self::initialize_static_variables();\n\n        if ($curve instanceof TwistedEdwardsCurve  || $curve instanceof MontgomeryCurve) {\n            throw new UnsupportedCurveException('TwistedEdwards Curves are not supported');\n        }\n\n        $publicKey = \"\\4\" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();\n\n        $key = [\n            'version' => 'ecPrivkeyVer1',\n            'privateKey' => $privateKey->toBytes(),\n            'parameters' => new ASN1\\Element(self::encodeParameters($curve)),\n            'publicKey' => \"\\0\" . $publicKey\n        ];\n\n        $key = ASN1::encodeDER($key, Maps\\ECPrivateKey::MAP);\n\n        return self::wrapPrivateKey($key, 'EC', $password, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS8.php",
    "content": "<?php\n\n/**\n * PKCS#8 Formatted EC Key Handler\n *\n * PHP version 5\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN ENCRYPTED PRIVATE KEY-----\n * -----BEGIN PRIVATE KEY-----\n * -----BEGIN PUBLIC KEY-----\n *\n * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8\n * is specific to private keys it's basically creating a DER-encoded wrapper\n * for keys. This just extends that same concept to public keys (much like ssh-keygen)\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS8 as Progenitor;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed448;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#8 Formatted EC Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS8 extends Progenitor\n{\n    use Common;\n\n    /**\n     * OID Name\n     *\n     * @var array\n     */\n    const OID_NAME = ['id-ecPublicKey', 'id-Ed25519', 'id-Ed448'];\n\n    /**\n     * OID Value\n     *\n     * @var string\n     */\n    const OID_VALUE = ['1.2.840.10045.2.1', '1.3.101.112', '1.3.101.113'];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        // initialize_static_variables() is defined in both the trait and the parent class\n        // when it's defined in two places it's the traits one that's called\n        // the parent one is needed, as well, but the parent one is called by other methods\n        // in the parent class as needed and in the context of the parent it's the parent\n        // one that's called\n        self::initialize_static_variables();\n\n        $key = parent::load($key, $password);\n\n        $type = isset($key['privateKey']) ? 'privateKey' : 'publicKey';\n\n        switch ($key[$type . 'Algorithm']['algorithm']) {\n            case 'id-Ed25519':\n            case 'id-Ed448':\n                return self::loadEdDSA($key);\n        }\n\n        $decoded = ASN1::decodeBER($key[$type . 'Algorithm']['parameters']->element);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n        $params = ASN1::asn1map($decoded[0], Maps\\ECParameters::MAP);\n        if (!$params) {\n            throw new \\RuntimeException('Unable to decode the parameters using Maps\\ECParameters');\n        }\n\n        $components = [];\n        $components['curve'] = self::loadCurveByParam($params);\n\n        if ($type == 'publicKey') {\n            $components['QA'] = self::extractPoint(\"\\0\" . $key['publicKey'], $components['curve']);\n\n            return $components;\n        }\n\n        $decoded = ASN1::decodeBER($key['privateKey']);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n        $key = ASN1::asn1map($decoded[0], Maps\\ECPrivateKey::MAP);\n        if (isset($key['parameters']) && $params != $key['parameters']) {\n            throw new \\RuntimeException('The PKCS8 parameter field does not match the private key parameter field');\n        }\n\n        $components['dA'] = new BigInteger($key['privateKey'], 256);\n        $components['curve']->rangeCheck($components['dA']);\n        $components['QA'] = isset($key['publicKey']) ?\n            self::extractPoint($key['publicKey'], $components['curve']) :\n            $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);\n\n        return $components;\n    }\n\n    /**\n     * Break a public or private EdDSA key down into its constituent components\n     *\n     * @return array\n     */\n    private static function loadEdDSA(array $key)\n    {\n        $components = [];\n\n        if (isset($key['privateKey'])) {\n            $components['curve'] = $key['privateKeyAlgorithm']['algorithm'] == 'id-Ed25519' ? new Ed25519() : new Ed448();\n            $expected = chr(ASN1::TYPE_OCTET_STRING) . ASN1::encodeLength($components['curve']::SIZE);\n            if (substr($key['privateKey'], 0, 2) != $expected) {\n                throw new \\RuntimeException(\n                    'The first two bytes of the ' .\n                    $key['privateKeyAlgorithm']['algorithm'] .\n                    ' private key field should be 0x' . bin2hex($expected)\n                );\n            }\n            $arr = $components['curve']->extractSecret(substr($key['privateKey'], 2));\n            $components['dA'] = $arr['dA'];\n            $components['secret'] = $arr['secret'];\n        }\n\n        if (isset($key['publicKey'])) {\n            if (!isset($components['curve'])) {\n                $components['curve'] = $key['publicKeyAlgorithm']['algorithm'] == 'id-Ed25519' ? new Ed25519() : new Ed448();\n            }\n\n            $components['QA'] = self::extractPoint($key['publicKey'], $components['curve']);\n        }\n\n        if (isset($key['privateKey']) && !isset($components['QA'])) {\n            $components['QA'] = $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);\n        }\n\n        return $components;\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])\n    {\n        self::initialize_static_variables();\n\n        if ($curve instanceof MontgomeryCurve) {\n            throw new UnsupportedCurveException('Montgomery Curves are not supported');\n        }\n\n        if ($curve instanceof TwistedEdwardsCurve) {\n            return self::wrapPublicKey(\n                $curve->encodePoint($publicKey),\n                null,\n                $curve instanceof Ed25519 ? 'id-Ed25519' : 'id-Ed448',\n                $options\n            );\n        }\n\n        $params = new ASN1\\Element(self::encodeParameters($curve, false, $options));\n\n        $key = \"\\4\" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();\n\n        return self::wrapPublicKey($key, $params, 'id-ecPublicKey', $options);\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])\n    {\n        self::initialize_static_variables();\n\n        if ($curve instanceof MontgomeryCurve) {\n            throw new UnsupportedCurveException('Montgomery Curves are not supported');\n        }\n\n        if ($curve instanceof TwistedEdwardsCurve) {\n            return self::wrapPrivateKey(\n                chr(ASN1::TYPE_OCTET_STRING) . ASN1::encodeLength($curve::SIZE) . $secret,\n                [],\n                null,\n                $password,\n                $curve instanceof Ed25519 ? 'id-Ed25519' : 'id-Ed448'\n            );\n        }\n\n        $publicKey = \"\\4\" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();\n\n        $params = new ASN1\\Element(self::encodeParameters($curve, false, $options));\n\n        $key = [\n            'version' => 'ecPrivkeyVer1',\n            'privateKey' => $privateKey->toBytes(),\n            //'parameters' => $params,\n            'publicKey' => \"\\0\" . $publicKey\n        ];\n\n        $key = ASN1::encodeDER($key, Maps\\ECPrivateKey::MAP);\n\n        return self::wrapPrivateKey($key, [], $params, $password, 'id-ecPublicKey', '', $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PuTTY.php",
    "content": "<?php\n\n/**\n * PuTTY Formatted EC Key Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PuTTY as Progenitor;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PuTTY Formatted EC Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PuTTY extends Progenitor\n{\n    use Common;\n\n    /**\n     * Public Handler\n     *\n     * @var string\n     */\n    const PUBLIC_HANDLER = 'phpseclib3\\Crypt\\EC\\Formats\\Keys\\OpenSSH';\n\n    /**\n     * Supported Key Types\n     *\n     * @var array\n     */\n    protected static $types = [\n        'ecdsa-sha2-nistp256',\n        'ecdsa-sha2-nistp384',\n        'ecdsa-sha2-nistp521',\n        'ssh-ed25519'\n    ];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $components = parent::load($key, $password);\n        if (!isset($components['private'])) {\n            return $components;\n        }\n\n        $private = $components['private'];\n\n        $temp = Strings::base64_encode(Strings::packSSH2('s', $components['type']) . $components['public']);\n        $components = OpenSSH::load($components['type'] . ' ' . $temp . ' ' . $components['comment']);\n\n        if ($components['curve'] instanceof TwistedEdwardsCurve) {\n            if (Strings::shift($private, 4) != \"\\0\\0\\0\\x20\") {\n                throw new \\RuntimeException('Length of ssh-ed25519 key should be 32');\n            }\n            $arr = $components['curve']->extractSecret($private);\n            $components['dA'] = $arr['dA'];\n            $components['secret'] = $arr['secret'];\n        } else {\n            list($components['dA']) = Strings::unpackSSH2('i', $private);\n            $components['curve']->rangeCheck($components['dA']);\n        }\n\n        return $components;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = false, array $options = [])\n    {\n        self::initialize_static_variables();\n\n        $public = explode(' ', OpenSSH::savePublicKey($curve, $publicKey));\n        $name = $public[0];\n        $public = Strings::base64_decode($public[1]);\n        list(, $length) = unpack('N', Strings::shift($public, 4));\n        Strings::shift($public, $length);\n\n        // PuTTY pads private keys with a null byte per the following:\n        // https://github.com/github/putty/blob/a3d14d77f566a41fc61dfdc5c2e0e384c9e6ae8b/sshecc.c#L1926\n        if (!$curve instanceof TwistedEdwardsCurve) {\n            $private = $privateKey->toBytes();\n            if (!(strlen($privateKey->toBits()) & 7)) {\n                $private = \"\\0$private\";\n            }\n        }\n\n        $private = $curve instanceof TwistedEdwardsCurve ?\n            Strings::packSSH2('s', $secret) :\n            Strings::packSSH2('s', $private);\n\n        return self::wrapPrivateKey($public, $private, $name, $password, $options);\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField[] $publicKey\n     * @return string\n     */\n    public static function savePublicKey(BaseCurve $curve, array $publicKey)\n    {\n        $public = explode(' ', OpenSSH::savePublicKey($curve, $publicKey));\n        $type = $public[0];\n        $public = Strings::base64_decode($public[1]);\n        list(, $length) = unpack('N', Strings::shift($public, 4));\n        Strings::shift($public, $length);\n\n        return self::wrapPublicKey($public, $type);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/XML.php",
    "content": "<?php\n\n/**\n * XML Formatted EC Key Handler\n *\n * More info:\n *\n * https://www.w3.org/TR/xmldsig-core/#sec-ECKeyValue\n * http://en.wikipedia.org/wiki/XML_Signature\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Base as BaseCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Prime as PrimeCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Exception\\BadConfigurationException;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * XML Formatted EC Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class XML\n{\n    use Common;\n\n    /**\n     * Default namespace\n     *\n     * @var string\n     */\n    private static $namespace;\n\n    /**\n     * Flag for using RFC4050 syntax\n     *\n     * @var bool\n     */\n    private static $rfc4050 = false;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        self::initialize_static_variables();\n\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        if (!class_exists('DOMDocument')) {\n            throw new BadConfigurationException('The dom extension is not setup correctly on this system');\n        }\n\n        $use_errors = libxml_use_internal_errors(true);\n\n        if (substr($key, 0, 5) != '<?xml') {\n            $key = '<xml>' . $key . '</xml>';\n        }\n\n        $temp = self::isolateNamespace($key, 'http://www.w3.org/2009/xmldsig11#');\n        if ($temp) {\n            $key = $temp;\n        }\n\n        $temp = self::isolateNamespace($key, 'http://www.w3.org/2001/04/xmldsig-more#');\n        if ($temp) {\n            $key = $temp;\n        }\n\n        $dom = new \\DOMDocument();\n\n        if (!$dom->loadXML($key)) {\n            libxml_use_internal_errors($use_errors);\n            throw new \\UnexpectedValueException('Key does not appear to contain XML');\n        }\n        $xpath = new \\DOMXPath($dom);\n        libxml_use_internal_errors($use_errors);\n        $curve = self::loadCurveByParam($xpath);\n\n        $pubkey = self::query($xpath, 'publickey', 'Public Key is not present');\n\n        $QA = self::query($xpath, 'ecdsakeyvalue')->length ?\n            self::extractPointRFC4050($xpath, $curve) :\n            self::extractPoint(\"\\0\" . $pubkey, $curve);\n\n        libxml_use_internal_errors($use_errors);\n\n        return compact('curve', 'QA');\n    }\n\n    /**\n     * Case-insensitive xpath query\n     *\n     * @param \\DOMXPath $xpath\n     * @param string $name\n     * @param string $error optional\n     * @param bool $decode optional\n     * @return \\DOMNodeList\n     */\n    private static function query(\\DOMXPath $xpath, $name, $error = null, $decode = true)\n    {\n        $query = '/';\n        $names = explode('/', $name);\n        foreach ($names as $name) {\n            $query .= \"/*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='$name']\";\n        }\n        $result = $xpath->query($query);\n        if (!isset($error)) {\n            return $result;\n        }\n\n        if (!$result->length) {\n            throw new \\RuntimeException($error);\n        }\n        return $decode ? self::decodeValue($result->item(0)->textContent) : $result->item(0)->textContent;\n    }\n\n    /**\n     * Finds the first element in the relevant namespace, strips the namespacing and returns the XML for that element.\n     *\n     * @param string $xml\n     * @param string $ns\n     */\n    private static function isolateNamespace($xml, $ns)\n    {\n        $dom = new \\DOMDocument();\n        if (!$dom->loadXML($xml)) {\n            return false;\n        }\n        $xpath = new \\DOMXPath($dom);\n        $nodes = $xpath->query(\"//*[namespace::*[.='$ns'] and not(../namespace::*[.='$ns'])]\");\n        if (!$nodes->length) {\n            return false;\n        }\n        $node = $nodes->item(0);\n        $ns_name = $node->lookupPrefix($ns);\n        if ($ns_name) {\n            $node->removeAttributeNS($ns, $ns_name);\n        }\n        return $dom->saveXML($node);\n    }\n\n    /**\n     * Decodes the value\n     *\n     * @param string $value\n     */\n    private static function decodeValue($value)\n    {\n        return Strings::base64_decode(str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $value));\n    }\n\n    /**\n     * Extract points from an XML document\n     *\n     * @param \\DOMXPath $xpath\n     * @param BaseCurve $curve\n     * @return object[]\n     */\n    private static function extractPointRFC4050(\\DOMXPath $xpath, BaseCurve $curve)\n    {\n        $x = self::query($xpath, 'publickey/x');\n        $y = self::query($xpath, 'publickey/y');\n        if (!$x->length || !$x->item(0)->hasAttribute('Value')) {\n            throw new \\RuntimeException('Public Key / X coordinate not found');\n        }\n        if (!$y->length || !$y->item(0)->hasAttribute('Value')) {\n            throw new \\RuntimeException('Public Key / Y coordinate not found');\n        }\n        $point = [\n            $curve->convertInteger(new BigInteger($x->item(0)->getAttribute('Value'))),\n            $curve->convertInteger(new BigInteger($y->item(0)->getAttribute('Value')))\n        ];\n        if (!$curve->verifyPoint($point)) {\n            throw new \\RuntimeException('Unable to verify that point exists on curve');\n        }\n        return $point;\n    }\n\n    /**\n     * Returns an instance of \\phpseclib3\\Crypt\\EC\\BaseCurves\\Base based\n     * on the curve parameters\n     *\n     * @param \\DomXPath $xpath\n     * @return BaseCurve|false\n     */\n    private static function loadCurveByParam(\\DOMXPath $xpath)\n    {\n        $namedCurve = self::query($xpath, 'namedcurve');\n        if ($namedCurve->length == 1) {\n            $oid = $namedCurve->item(0)->getAttribute('URN');\n            $oid = preg_replace('#[^\\d.]#', '', $oid);\n            $name = array_search($oid, self::$curveOIDs);\n            if ($name === false) {\n                throw new UnsupportedCurveException('Curve with OID of ' . $oid . ' is not supported');\n            }\n\n            $curve = '\\phpseclib3\\Crypt\\EC\\Curves\\\\' . $name;\n            if (!class_exists($curve)) {\n                throw new UnsupportedCurveException('Named Curve of ' . $name . ' is not supported');\n            }\n            return new $curve();\n        }\n\n        $params = self::query($xpath, 'explicitparams');\n        if ($params->length) {\n            return self::loadCurveByParamRFC4050($xpath);\n        }\n\n        $params = self::query($xpath, 'ecparameters');\n        if (!$params->length) {\n            throw new \\RuntimeException('No parameters are present');\n        }\n\n        $fieldTypes = [\n            'prime-field' => ['fieldid/prime/p'],\n            'gnb' => ['fieldid/gnb/m'],\n            'tnb' => ['fieldid/tnb/k'],\n            'pnb' => ['fieldid/pnb/k1', 'fieldid/pnb/k2', 'fieldid/pnb/k3'],\n            'unknown' => []\n        ];\n\n        foreach ($fieldTypes as $type => $queries) {\n            foreach ($queries as $query) {\n                $result = self::query($xpath, $query);\n                if (!$result->length) {\n                    continue 2;\n                }\n                $param = preg_replace('#.*/#', '', $query);\n                $$param = self::decodeValue($result->item(0)->textContent);\n            }\n            break;\n        }\n\n        $a = self::query($xpath, 'curve/a', 'A coefficient is not present');\n        $b = self::query($xpath, 'curve/b', 'B coefficient is not present');\n        $base = self::query($xpath, 'base', 'Base point is not present');\n        $order = self::query($xpath, 'order', 'Order is not present');\n\n        switch ($type) {\n            case 'prime-field':\n                $curve = new PrimeCurve();\n                $curve->setModulo(new BigInteger($p, 256));\n                $curve->setCoefficients(\n                    new BigInteger($a, 256),\n                    new BigInteger($b, 256)\n                );\n                $point = self::extractPoint(\"\\0\" . $base, $curve);\n                $curve->setBasePoint(...$point);\n                $curve->setOrder(new BigInteger($order, 256));\n                return $curve;\n            case 'gnb':\n            case 'tnb':\n            case 'pnb':\n            default:\n                throw new UnsupportedCurveException('Field Type of ' . $type . ' is not supported');\n        }\n    }\n\n    /**\n     * Returns an instance of \\phpseclib3\\Crypt\\EC\\BaseCurves\\Base based\n     * on the curve parameters\n     *\n     * @param \\DomXPath $xpath\n     * @return BaseCurve|false\n     */\n    private static function loadCurveByParamRFC4050(\\DOMXPath $xpath)\n    {\n        $fieldTypes = [\n            'prime-field' => ['primefieldparamstype/p'],\n            'unknown' => []\n        ];\n\n        foreach ($fieldTypes as $type => $queries) {\n            foreach ($queries as $query) {\n                $result = self::query($xpath, $query);\n                if (!$result->length) {\n                    continue 2;\n                }\n                $param = preg_replace('#.*/#', '', $query);\n                $$param = $result->item(0)->textContent;\n            }\n            break;\n        }\n\n        $a = self::query($xpath, 'curveparamstype/a', 'A coefficient is not present', false);\n        $b = self::query($xpath, 'curveparamstype/b', 'B coefficient is not present', false);\n        $x = self::query($xpath, 'basepointparams/basepoint/ecpointtype/x', 'Base Point X is not present', false);\n        $y = self::query($xpath, 'basepointparams/basepoint/ecpointtype/y', 'Base Point Y is not present', false);\n        $order = self::query($xpath, 'order', 'Order is not present', false);\n\n        switch ($type) {\n            case 'prime-field':\n                $curve = new PrimeCurve();\n\n                $p = str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $p);\n                $curve->setModulo(new BigInteger($p));\n\n                $a = str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $a);\n                $b = str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $b);\n                $curve->setCoefficients(\n                    new BigInteger($a),\n                    new BigInteger($b)\n                );\n\n                $x = str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $x);\n                $y = str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $y);\n                $curve->setBasePoint(\n                    new BigInteger($x),\n                    new BigInteger($y)\n                );\n\n                $order = str_replace([\"\\r\", \"\\n\", ' ', \"\\t\"], '', $order);\n                $curve->setOrder(new BigInteger($order));\n                return $curve;\n            default:\n                throw new UnsupportedCurveException('Field Type of ' . $type . ' is not supported');\n        }\n    }\n\n    /**\n     * Sets the namespace. dsig11 is the most common one.\n     *\n     * Set to null to unset. Used only for creating public keys.\n     *\n     * @param string $namespace\n     */\n    public static function setNamespace($namespace)\n    {\n        self::$namespace = $namespace;\n    }\n\n    /**\n     * Uses the XML syntax specified in https://tools.ietf.org/html/rfc4050\n     */\n    public static function enableRFC4050Syntax()\n    {\n        self::$rfc4050 = true;\n    }\n\n    /**\n     * Uses the XML syntax specified in https://www.w3.org/TR/xmldsig-core/#sec-ECParameters\n     */\n    public static function disableRFC4050Syntax()\n    {\n        self::$rfc4050 = false;\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BaseCurve $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])\n    {\n        self::initialize_static_variables();\n\n        if ($curve instanceof TwistedEdwardsCurve || $curve instanceof MontgomeryCurve) {\n            throw new UnsupportedCurveException('TwistedEdwards and Montgomery Curves are not supported');\n        }\n\n        if (empty(static::$namespace)) {\n            $pre = $post = '';\n        } else {\n            $pre = static::$namespace . ':';\n            $post = ':' . static::$namespace;\n        }\n\n        if (self::$rfc4050) {\n            return '<' . $pre . 'ECDSAKeyValue xmlns' . $post . '=\"http://www.w3.org/2001/04/xmldsig-more#\">' . \"\\r\\n\" .\n                   self::encodeXMLParameters($curve, $pre, $options) . \"\\r\\n\" .\n                   '<' . $pre . 'PublicKey>' . \"\\r\\n\" .\n                   '<' . $pre . 'X Value=\"' . $publicKey[0] . '\" />' . \"\\r\\n\" .\n                   '<' . $pre . 'Y Value=\"' . $publicKey[1] . '\" />' . \"\\r\\n\" .\n                   '</' . $pre . 'PublicKey>' . \"\\r\\n\" .\n                   '</' . $pre . 'ECDSAKeyValue>';\n        }\n\n        $publicKey = \"\\4\" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();\n\n        return '<' . $pre . 'ECDSAKeyValue xmlns' . $post . '=\"http://www.w3.org/2009/xmldsig11#\">' . \"\\r\\n\" .\n               self::encodeXMLParameters($curve, $pre, $options) . \"\\r\\n\" .\n               '<' . $pre . 'PublicKey>' . Strings::base64_encode($publicKey) . '</' . $pre . 'PublicKey>' . \"\\r\\n\" .\n               '</' . $pre . 'ECDSAKeyValue>';\n    }\n\n    /**\n     * Encode Parameters\n     *\n     * @param BaseCurve $curve\n     * @param string $pre\n     * @param array $options optional\n     * @return string|false\n     */\n    private static function encodeXMLParameters(BaseCurve $curve, $pre, array $options = [])\n    {\n        $result = self::encodeParameters($curve, true, $options);\n\n        if (isset($result['namedCurve'])) {\n            $namedCurve = '<' . $pre . 'NamedCurve URI=\"urn:oid:' . self::$curveOIDs[$result['namedCurve']] . '\" />';\n            return self::$rfc4050 ?\n                '<DomainParameters>' . str_replace('URI', 'URN', $namedCurve) . '</DomainParameters>' :\n                $namedCurve;\n        }\n\n        if (self::$rfc4050) {\n            $xml = '<' . $pre . 'ExplicitParams>' . \"\\r\\n\" .\n                  '<' . $pre . 'FieldParams>' . \"\\r\\n\";\n            $temp = $result['specifiedCurve'];\n            switch ($temp['fieldID']['fieldType']) {\n                case 'prime-field':\n                    $xml .= '<' . $pre . 'PrimeFieldParamsType>' . \"\\r\\n\" .\n                           '<' . $pre . 'P>' . $temp['fieldID']['parameters'] . '</' . $pre . 'P>' . \"\\r\\n\" .\n                           '</' . $pre . 'PrimeFieldParamsType>' . \"\\r\\n\";\n                    $a = $curve->getA();\n                    $b = $curve->getB();\n                    list($x, $y) = $curve->getBasePoint();\n                    break;\n                default:\n                    throw new UnsupportedCurveException('Field Type of ' . $temp['fieldID']['fieldType'] . ' is not supported');\n            }\n            $xml .= '</' . $pre . 'FieldParams>' . \"\\r\\n\" .\n                   '<' . $pre . 'CurveParamsType>' . \"\\r\\n\" .\n                   '<' . $pre . 'A>' . $a . '</' . $pre . 'A>' . \"\\r\\n\" .\n                   '<' . $pre . 'B>' . $b . '</' . $pre . 'B>' . \"\\r\\n\" .\n                   '</' . $pre . 'CurveParamsType>' . \"\\r\\n\" .\n                   '<' . $pre . 'BasePointParams>' . \"\\r\\n\" .\n                   '<' . $pre . 'BasePoint>' . \"\\r\\n\" .\n                   '<' . $pre . 'ECPointType>' . \"\\r\\n\" .\n                   '<' . $pre . 'X>' . $x . '</' . $pre . 'X>' . \"\\r\\n\" .\n                   '<' . $pre . 'Y>' . $y . '</' . $pre . 'Y>' . \"\\r\\n\" .\n                   '</' . $pre . 'ECPointType>' . \"\\r\\n\" .\n                   '</' . $pre . 'BasePoint>' . \"\\r\\n\" .\n                   '<' . $pre . 'Order>' . $curve->getOrder() . '</' . $pre . 'Order>' . \"\\r\\n\" .\n                   '</' . $pre . 'BasePointParams>' . \"\\r\\n\" .\n                   '</' . $pre . 'ExplicitParams>' . \"\\r\\n\";\n\n            return $xml;\n        }\n\n        if (isset($result['specifiedCurve'])) {\n            $xml = '<' . $pre . 'ECParameters>' . \"\\r\\n\" .\n                   '<' . $pre . 'FieldID>' . \"\\r\\n\";\n            $temp = $result['specifiedCurve'];\n            switch ($temp['fieldID']['fieldType']) {\n                case 'prime-field':\n                    $xml .= '<' . $pre . 'Prime>' . \"\\r\\n\" .\n                           '<' . $pre . 'P>' . Strings::base64_encode($temp['fieldID']['parameters']->toBytes()) . '</' . $pre . 'P>' . \"\\r\\n\" .\n                           '</' . $pre . 'Prime>' . \"\\r\\n\" ;\n                    break;\n                default:\n                    throw new UnsupportedCurveException('Field Type of ' . $temp['fieldID']['fieldType'] . ' is not supported');\n            }\n            $xml .= '</' . $pre . 'FieldID>' . \"\\r\\n\" .\n                   '<' . $pre . 'Curve>' . \"\\r\\n\" .\n                   '<' . $pre . 'A>' . Strings::base64_encode($temp['curve']['a']) . '</' . $pre . 'A>' . \"\\r\\n\" .\n                   '<' . $pre . 'B>' . Strings::base64_encode($temp['curve']['b']) . '</' . $pre . 'B>' . \"\\r\\n\" .\n                   '</' . $pre . 'Curve>' . \"\\r\\n\" .\n                   '<' . $pre . 'Base>' . Strings::base64_encode($temp['base']) . '</' . $pre . 'Base>' . \"\\r\\n\" .\n                   '<' . $pre . 'Order>' . Strings::base64_encode($temp['order']) . '</' . $pre . 'Order>' . \"\\r\\n\" .\n                   '</' . $pre . 'ECParameters>';\n            return $xml;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/libsodium.php",
    "content": "<?php\n\n/**\n * libsodium Key Handler\n *\n * Different NaCl implementations store the key differently.\n * https://blog.mozilla.org/warner/2011/11/29/ed25519-keys/ elaborates.\n * libsodium appears to use the same format as SUPERCOP.\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * libsodium Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class libsodium\n{\n    use Common;\n\n    /**\n     * Is invisible flag\n     *\n     */\n    const IS_INVISIBLE = true;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        switch (strlen($key)) {\n            case 32:\n                $public = $key;\n                break;\n            case 64:\n                $private = substr($key, 0, 32);\n                $public = substr($key, -32);\n                break;\n            case 96:\n                $public = substr($key, -32);\n                if (substr($key, 32, 32) != $public) {\n                    throw new \\RuntimeException('Keys with 96 bytes should have the 2nd and 3rd set of 32 bytes match');\n                }\n                $private = substr($key, 0, 32);\n                break;\n            default:\n                throw new \\RuntimeException('libsodium keys need to either be 32 bytes long, 64 bytes long or 96 bytes long');\n        }\n\n        $curve = new Ed25519();\n        $components = ['curve' => $curve];\n        if (isset($private)) {\n            $arr = $curve->extractSecret($private);\n            $components['dA'] = $arr['dA'];\n            $components['secret'] = $arr['secret'];\n        }\n        $components['QA'] = isset($public) ?\n            self::extractPoint($public, $curve) :\n            $curve->multiplyPoint($curve->getBasePoint(), $components['dA']);\n\n        return $components;\n    }\n\n    /**\n     * Convert an EC public key to the appropriate format\n     *\n     * @param Ed25519 $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @return string\n     */\n    public static function savePublicKey(Ed25519 $curve, array $publicKey)\n    {\n        return $curve->encodePoint($publicKey);\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $privateKey\n     * @param Ed25519 $curve\n     * @param \\phpseclib3\\Math\\Common\\FiniteField\\Integer[] $publicKey\n     * @param string $secret optional\n     * @param string $password optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $privateKey, Ed25519 $curve, array $publicKey, $secret = null, $password = '')\n    {\n        if (!isset($secret)) {\n            throw new \\RuntimeException('Private Key does not have a secret set');\n        }\n        if (strlen($secret) != 32) {\n            throw new \\RuntimeException('Private Key secret is not of the correct length');\n        }\n        if (!empty($password) && is_string($password)) {\n            throw new UnsupportedFormatException('libsodium private keys do not support encryption');\n        }\n        return $secret . $curve->encodePoint($publicKey);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/ASN1.php",
    "content": "<?php\n\n/**\n * ASN1 Signature Handler\n *\n * PHP version 5\n *\n * Handles signatures in the format described in\n * https://tools.ietf.org/html/rfc3279#section-2.2.3\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Signature;\n\nuse phpseclib3\\File\\ASN1 as Encoder;\nuse phpseclib3\\File\\ASN1\\Maps\\EcdsaSigValue;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * ASN1 Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ASN1\n{\n    /**\n     * Loads a signature\n     *\n     * @param string $sig\n     * @return array\n     */\n    public static function load($sig)\n    {\n        if (!is_string($sig)) {\n            return false;\n        }\n\n        $decoded = Encoder::decodeBER($sig);\n        if (empty($decoded)) {\n            return false;\n        }\n        $components = Encoder::asn1map($decoded[0], EcdsaSigValue::MAP);\n\n        return $components;\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @param BigInteger $r\n     * @param BigInteger $s\n     * @return string\n     */\n    public static function save(BigInteger $r, BigInteger $s)\n    {\n        return Encoder::encodeDER(compact('r', 's'), EcdsaSigValue::MAP);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/IEEE.php",
    "content": "<?php\n\n/**\n * IEEE P1363 Signature Handler\n *\n * PHP version 5\n *\n * Handles signatures in the format described in\n * https://standards.ieee.org/ieee/1363/2049/ and\n * https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/sign#ecdsa\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Signature;\n\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * ASN1 Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class IEEE\n{\n    /**\n     * Loads a signature\n     *\n     * @param string $sig\n     * @return array\n     */\n    public static function load($sig)\n    {\n        if (!is_string($sig)) {\n            return false;\n        }\n\n        $len = strlen($sig);\n        if ($len & 1) {\n            return false;\n        }\n\n        $r = new BigInteger(substr($sig, 0, $len >> 1), 256);\n        $s = new BigInteger(substr($sig, $len >> 1), 256);\n\n        return compact('r', 's');\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @param BigInteger $r\n     * @param BigInteger $s\n     * @param string $curve\n     * @param int $length\n     * @return string\n     */\n    public static function save(BigInteger $r, BigInteger $s, $curve, $length)\n    {\n        $r = $r->toBytes();\n        $s = $s->toBytes();\n        $length = (int) ceil($length / 8);\n        return str_pad($r, $length, \"\\0\", STR_PAD_LEFT) . str_pad($s, $length, \"\\0\", STR_PAD_LEFT);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/Raw.php",
    "content": "<?php\n\n/**\n * Raw EC Signature Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Signature;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Signature\\Raw as Progenitor;\n\n/**\n * Raw DSA Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Raw extends Progenitor\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/SSH2.php",
    "content": "<?php\n\n/**\n * SSH2 Signature Handler\n *\n * PHP version 5\n *\n * Handles signatures in the format used by SSH2\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC\\Formats\\Signature;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * SSH2 Signature Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SSH2\n{\n    /**\n     * Loads a signature\n     *\n     * @param string $sig\n     * @return mixed\n     */\n    public static function load($sig)\n    {\n        if (!is_string($sig)) {\n            return false;\n        }\n\n        $result = Strings::unpackSSH2('ss', $sig);\n        if ($result === false) {\n            return false;\n        }\n        list($type, $blob) = $result;\n        switch ($type) {\n            // see https://tools.ietf.org/html/rfc5656#section-3.1.2\n            case 'ecdsa-sha2-nistp256':\n            case 'ecdsa-sha2-nistp384':\n            case 'ecdsa-sha2-nistp521':\n                break;\n            default:\n                return false;\n        }\n\n        $result = Strings::unpackSSH2('ii', $blob);\n        if ($result === false) {\n            return false;\n        }\n\n        return [\n            'r' => $result[0],\n            's' => $result[1]\n        ];\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @param BigInteger $r\n     * @param BigInteger $s\n     * @param string $curve\n     * @return string\n     */\n    public static function save(BigInteger $r, BigInteger $s, $curve)\n    {\n        switch ($curve) {\n            case 'secp256r1':\n                $curve = 'nistp256';\n                break;\n            case 'secp384r1':\n                $curve = 'nistp384';\n                break;\n            case 'secp521r1':\n                $curve = 'nistp521';\n                break;\n            default:\n                return false;\n        }\n\n        $blob = Strings::packSSH2('ii', $r, $s);\n\n        return Strings::packSSH2('ss', 'ecdsa-sha2-' . $curve, $blob);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Parameters.php",
    "content": "<?php\n\n/**\n * EC Parameters\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC;\n\nuse phpseclib3\\Crypt\\EC;\n\n/**\n * EC Parameters\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class Parameters extends EC\n{\n    /**\n     * Returns the parameters\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type = 'PKCS1', array $options = [])\n    {\n        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');\n\n        return $type::saveParameters($this->curve, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.php",
    "content": "<?php\n\n/**\n * EC Private Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\EC;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Crypt\\EC\\Formats\\Keys\\PKCS1;\nuse phpseclib3\\Crypt\\EC\\Formats\\Signature\\ASN1 as ASN1Signature;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Exception\\UnsupportedOperationException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * EC Private Key\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PrivateKey extends EC implements Common\\PrivateKey\n{\n    use Common\\Traits\\PasswordProtected;\n\n    /**\n     * Private Key dA\n     *\n     * sign() converts this to a BigInteger so one might wonder why this is a FiniteFieldInteger instead of\n     * a BigInteger. That's because a FiniteFieldInteger, when converted to a byte string, is null padded by\n     * a certain amount whereas a BigInteger isn't.\n     *\n     * @var object\n     */\n    protected $dA;\n\n    /**\n     * @var string\n     */\n    protected $secret;\n\n    /**\n     * Multiplies an encoded point by the private key\n     *\n     * Used by ECDH\n     *\n     * @param string $coordinates\n     * @return string\n     */\n    public function multiply($coordinates)\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            if ($this->curve instanceof Curve25519 && self::$engines['libsodium']) {\n                return sodium_crypto_scalarmult($this->dA->toBytes(), $coordinates);\n            }\n\n            $point = [$this->curve->convertInteger(new BigInteger(strrev($coordinates), 256))];\n            $point = $this->curve->multiplyPoint($point, $this->dA);\n            return strrev($point[0]->toBytes(true));\n        }\n        if (!$this->curve instanceof TwistedEdwardsCurve) {\n            $coordinates = \"\\0$coordinates\";\n        }\n        $point = PKCS1::extractPoint($coordinates, $this->curve);\n        $point = $this->curve->multiplyPoint($point, $this->dA);\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            return $this->curve->encodePoint($point);\n        }\n        if (empty($point)) {\n            throw new \\RuntimeException('The infinity point is invalid');\n        }\n        return \"\\4\" . $point[0]->toBytes(true) . $point[1]->toBytes(true);\n    }\n\n    /**\n     * Create a signature\n     *\n     * @see self::verify()\n     * @param string $message\n     * @return mixed\n     */\n    public function sign($message)\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');\n        }\n\n        $dA = $this->dA;\n        $order = $this->curve->getOrder();\n\n        $shortFormat = $this->shortFormat;\n        $format = $this->sigFormat;\n        if ($format === false) {\n            return false;\n        }\n\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            if ($this->curve instanceof Ed25519 && self::$engines['libsodium'] && !isset($this->context)) {\n                $result = sodium_crypto_sign_detached($message, $this->withPassword()->toString('libsodium'));\n                return $shortFormat == 'SSH2' ? Strings::packSSH2('ss', 'ssh-' . strtolower($this->getCurve()), $result) : $result;\n            }\n\n            // contexts (Ed25519ctx) are supported but prehashing (Ed25519ph) is not.\n            // quoting https://tools.ietf.org/html/rfc8032#section-8.5 ,\n            // \"The Ed25519ph and Ed448ph variants ... SHOULD NOT be used\"\n            $A = $this->curve->encodePoint($this->QA);\n            $curve = $this->curve;\n            $hash = new Hash($curve::HASH);\n\n            $secret = substr($hash->hash($this->secret), $curve::SIZE);\n\n            if ($curve instanceof Ed25519) {\n                $dom = !isset($this->context) ? '' :\n                    'SigEd25519 no Ed25519 collisions' . \"\\0\" . chr(strlen($this->context)) . $this->context;\n            } else {\n                $context = isset($this->context) ? $this->context : '';\n                $dom = 'SigEd448' . \"\\0\" . chr(strlen($context)) . $context;\n            }\n            // SHA-512(dom2(F, C) || prefix || PH(M))\n            $r = $hash->hash($dom . $secret . $message);\n            $r = strrev($r);\n            $r = new BigInteger($r, 256);\n            list(, $r) = $r->divide($order);\n            $R = $curve->multiplyPoint($curve->getBasePoint(), $r);\n            $R = $curve->encodePoint($R);\n            $k = $hash->hash($dom . $R . $A . $message);\n            $k = strrev($k);\n            $k = new BigInteger($k, 256);\n            list(, $k) = $k->divide($order);\n            $S = $k->multiply($dA)->add($r);\n            list(, $S) = $S->divide($order);\n            $S = str_pad(strrev($S->toBytes()), $curve::SIZE, \"\\0\");\n            return $shortFormat == 'SSH2' ? Strings::packSSH2('ss', 'ssh-' . strtolower($this->getCurve()), $R . $S) : $R . $S;\n        }\n\n        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {\n            $signature = '';\n            // altho PHP's OpenSSL bindings only supported EC key creation in PHP 7.1 they've long\n            // supported signing / verification\n            // we use specified curves to avoid issues with OpenSSL possibly not supporting a given named curve;\n            // doing this may mean some curve-specific optimizations can't be used but idk if OpenSSL even\n            // has curve-specific optimizations\n            $result = openssl_sign($message, $signature, $this->withPassword()->toString('PKCS8', ['namedCurve' => false]), $this->hash->getHash());\n\n            if ($result) {\n                if ($shortFormat == 'ASN1') {\n                    return $signature;\n                }\n\n                $loaded = ASN1Signature::load($signature);\n                $r = $loaded['r'];\n                $s = $loaded['s'];\n\n\n                return $this->formatSignature($r, $s);\n            }\n        }\n\n        $e = $this->hash->hash($message);\n        $e = new BigInteger($e, 256);\n\n        $Ln = $this->hash->getLength() - $order->getLength();\n        $z = $Ln > 0 ? $e->bitwise_rightShift($Ln) : $e;\n\n        while (true) {\n            $k = BigInteger::randomRange(self::$one, $order->subtract(self::$one));\n            list($x, $y) = $this->curve->multiplyPoint($this->curve->getBasePoint(), $k);\n            $x = $x->toBigInteger();\n            list(, $r) = $x->divide($order);\n            if ($r->equals(self::$zero)) {\n                continue;\n            }\n            $kinv = $k->modInverse($order);\n            $temp = $z->add($dA->multiply($r));\n            $temp = $kinv->multiply($temp);\n            list(, $s) = $temp->divide($order);\n            if (!$s->equals(self::$zero)) {\n                break;\n            }\n        }\n\n        // the following is an RFC6979 compliant implementation of deterministic ECDSA\n        // it's unused because it's mainly intended for use when a good CSPRNG isn't\n        // available. if phpseclib's CSPRNG isn't good then even key generation is\n        // suspect\n        /*\n        // if this were actually being used it'd probably be better if this lived in load() and createKey()\n        $this->q = $this->curve->getOrder();\n        $dA = $this->dA->toBigInteger();\n        $this->x = $dA;\n\n        $h1 = $this->hash->hash($message);\n        $k = $this->computek($h1);\n        list($x, $y) = $this->curve->multiplyPoint($this->curve->getBasePoint(), $k);\n        $x = $x->toBigInteger();\n        list(, $r) = $x->divide($this->q);\n        $kinv = $k->modInverse($this->q);\n        $h1 = $this->bits2int($h1);\n        $temp = $h1->add($dA->multiply($r));\n        $temp = $kinv->multiply($temp);\n        list(, $s) = $temp->divide($this->q);\n        */\n\n        return $this->formatSignature($r, $s);\n    }\n\n    /**\n     * Returns the private key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePrivateKey');\n\n        return $type::savePrivateKey($this->dA, $this->curve, $this->QA, $this->secret, $this->password, $options);\n    }\n\n    /**\n     * Returns the public key\n     *\n     * @see self::getPrivateKey()\n     * @return mixed\n     */\n    public function getPublicKey()\n    {\n        $format = 'PKCS8';\n        if ($this->curve instanceof MontgomeryCurve) {\n            $format = 'MontgomeryPublic';\n        }\n\n        $type = self::validatePlugin('Keys', $format, 'savePublicKey');\n\n        $key = $type::savePublicKey($this->curve, $this->QA);\n        $key = EC::loadFormat($format, $key);\n        if ($this->curve instanceof MontgomeryCurve) {\n            return $key;\n        }\n        $key = $key\n            ->withHash($this->hash->getHash())\n            ->withSignatureFormat($this->shortFormat);\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            $key = $key->withContext($this->context);\n        }\n        return $key;\n    }\n\n    /**\n     * Returns a signature in the appropriate format\n     *\n     * @return string\n     */\n    private function formatSignature(BigInteger $r, BigInteger $s)\n    {\n        $format = $this->sigFormat;\n\n        $temp = new \\ReflectionMethod($format, 'save');\n        $paramCount = $temp->getNumberOfRequiredParameters();\n\n        // @codingStandardsIgnoreStart\n        switch ($paramCount) {\n            case 2: return $format::save($r, $s);\n            case 3: return $format::save($r, $s, $this->getCurve());\n            case 4: return $format::save($r, $s, $this->getCurve(), $this->getLength());\n        }\n        // @codingStandardsIgnoreEnd\n\n        // presumably the only way you could get to this is if you were using a custom plugin\n        throw new UnsupportedOperationException(\"$format::save() has $paramCount parameters - the only valid parameter counts are 2 or 3\");\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php",
    "content": "<?php\n\n/**\n * EC Public Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\EC;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\EC;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Crypt\\EC\\Formats\\Keys\\PKCS1;\nuse phpseclib3\\Crypt\\EC\\Formats\\Signature\\ASN1 as ASN1Signature;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Exception\\UnsupportedOperationException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * EC Public Key\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PublicKey extends EC implements Common\\PublicKey\n{\n    use Common\\Traits\\Fingerprint;\n\n    /**\n     * Verify a signature\n     *\n     * @see self::verify()\n     * @param string $message\n     * @param string $signature\n     * @return mixed\n     */\n    public function verify($message, $signature)\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');\n        }\n\n        $shortFormat = $this->shortFormat;\n        $format = $this->sigFormat;\n        if ($format === false) {\n            return false;\n        }\n\n        $order = $this->curve->getOrder();\n\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            if ($shortFormat == 'SSH2') {\n                list(, $signature) = Strings::unpackSSH2('ss', $signature);\n            }\n\n            if ($this->curve instanceof Ed25519 && self::$engines['libsodium'] && !isset($this->context)) {\n                return sodium_crypto_sign_verify_detached($signature, $message, $this->toString('libsodium'));\n            }\n\n            $curve = $this->curve;\n            if (strlen($signature) != 2 * $curve::SIZE) {\n                return false;\n            }\n\n            $R = substr($signature, 0, $curve::SIZE);\n            $S = substr($signature, $curve::SIZE);\n\n            try {\n                $R = PKCS1::extractPoint($R, $curve);\n                $R = $this->curve->convertToInternal($R);\n            } catch (\\Exception $e) {\n                return false;\n            }\n\n            $S = strrev($S);\n            $S = new BigInteger($S, 256);\n\n            if ($S->compare($order) >= 0) {\n                return false;\n            }\n\n            $A = $curve->encodePoint($this->QA);\n\n            if ($curve instanceof Ed25519) {\n                $dom2 = !isset($this->context) ? '' :\n                    'SigEd25519 no Ed25519 collisions' . \"\\0\" . chr(strlen($this->context)) . $this->context;\n            } else {\n                $context = isset($this->context) ? $this->context : '';\n                $dom2 = 'SigEd448' . \"\\0\" . chr(strlen($context)) . $context;\n            }\n\n            $hash = new Hash($curve::HASH);\n            $k = $hash->hash($dom2 . substr($signature, 0, $curve::SIZE) . $A . $message);\n            $k = strrev($k);\n            $k = new BigInteger($k, 256);\n            list(, $k) = $k->divide($order);\n\n            $qa = $curve->convertToInternal($this->QA);\n\n            $lhs = $curve->multiplyPoint($curve->getBasePoint(), $S);\n            $rhs = $curve->multiplyPoint($qa, $k);\n            $rhs = $curve->addPoint($rhs, $R);\n            $rhs = $curve->convertToAffine($rhs);\n\n            return $lhs[0]->equals($rhs[0]) && $lhs[1]->equals($rhs[1]);\n        }\n\n        $params = $format::load($signature);\n        if ($params === false || count($params) != 2) {\n            return false;\n        }\n        $r = $params['r'];\n        $s = $params['s'];\n\n        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {\n            $sig = $format != 'ASN1' ? ASN1Signature::save($r, $s) : $signature;\n\n            $result = openssl_verify($message, $sig, $this->toString('PKCS8', ['namedCurve' => false]), $this->hash->getHash());\n\n            if ($result != -1) {\n                return (bool) $result;\n            }\n        }\n\n        $n_1 = $order->subtract(self::$one);\n        if (!$r->between(self::$one, $n_1) || !$s->between(self::$one, $n_1)) {\n            return false;\n        }\n\n        $e = $this->hash->hash($message);\n        $e = new BigInteger($e, 256);\n\n        $Ln = $this->hash->getLength() - $order->getLength();\n        $z = $Ln > 0 ? $e->bitwise_rightShift($Ln) : $e;\n\n        $w = $s->modInverse($order);\n        list(, $u1) = $z->multiply($w)->divide($order);\n        list(, $u2) = $r->multiply($w)->divide($order);\n\n        $u1 = $this->curve->convertInteger($u1);\n        $u2 = $this->curve->convertInteger($u2);\n\n        list($x1, $y1) = $this->curve->multiplyAddPoints(\n            [$this->curve->getBasePoint(), $this->QA],\n            [$u1, $u2]\n        );\n\n        $x1 = $x1->toBigInteger();\n        list(, $x1) = $x1->divide($order);\n\n        return $x1->equals($r);\n    }\n\n    /**\n     * Returns the public key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePublicKey');\n\n        return $type::savePublicKey($this->curve, $this->QA, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of EC.\n *\n * PHP version 5\n *\n * Here's an example of how to create signatures and verify signatures with this library:\n * <code>\n * <?php\n * include 'vendor/autoload.php';\n *\n * $private = \\phpseclib3\\Crypt\\EC::createKey('secp256k1');\n * $public = $private->getPublicKey();\n *\n * $plaintext = 'terrafrost';\n *\n * $signature = $private->sign($plaintext);\n *\n * echo $public->verify($plaintext, $signature) ? 'verified' : 'unverified';\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\AsymmetricKey;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\Montgomery as MontgomeryCurve;\nuse phpseclib3\\Crypt\\EC\\BaseCurves\\TwistedEdwards as TwistedEdwardsCurve;\nuse phpseclib3\\Crypt\\EC\\Curves\\Curve25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed25519;\nuse phpseclib3\\Crypt\\EC\\Curves\\Ed448;\nuse phpseclib3\\Crypt\\EC\\Formats\\Keys\\PKCS1;\nuse phpseclib3\\Crypt\\EC\\Parameters;\nuse phpseclib3\\Crypt\\EC\\PrivateKey;\nuse phpseclib3\\Crypt\\EC\\PublicKey;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\Exception\\UnsupportedOperationException;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps\\ECParameters;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Pure-PHP implementation of EC.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EC extends AsymmetricKey\n{\n    /**\n     * Algorithm Name\n     *\n     * @var string\n     */\n    const ALGORITHM = 'EC';\n\n    /**\n     * Public Key QA\n     *\n     * @var object[]\n     */\n    protected $QA;\n\n    /**\n     * Curve\n     *\n     * @var EC\\BaseCurves\\Base\n     */\n    protected $curve;\n\n    /**\n     * Signature Format\n     *\n     * @var string\n     */\n    protected $format;\n\n    /**\n     * Signature Format (Short)\n     *\n     * @var string\n     */\n    protected $shortFormat;\n\n    /**\n     * Curve Name\n     *\n     * @var string\n     */\n    private $curveName;\n\n    /**\n     * Curve Order\n     *\n     * Used for deterministic ECDSA\n     *\n     * @var BigInteger\n     */\n    protected $q;\n\n    /**\n     * Alias for the private key\n     *\n     * Used for deterministic ECDSA. AsymmetricKey expects $x. I don't like x because\n     * with x you have x * the base point yielding an (x, y)-coordinate that is the\n     * public key. But the x is different depending on which side of the equal sign\n     * you're on. It's less ambiguous if you do dA * base point = (x, y)-coordinate.\n     *\n     * @var BigInteger\n     */\n    protected $x;\n\n    /**\n     * Context\n     *\n     * @var string\n     */\n    protected $context;\n\n    /**\n     * Signature Format\n     *\n     * @var string\n     */\n    protected $sigFormat;\n\n    /**\n     * Create public / private key pair.\n     *\n     * @param string $curve\n     * @return PrivateKey\n     */\n    public static function createKey($curve)\n    {\n        self::initialize_static_variables();\n\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('createKey() should not be called from final classes (' . static::class . ')');\n        }\n\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n\n        $curve = strtolower($curve);\n        if (self::$engines['libsodium'] && $curve == 'ed25519' && function_exists('sodium_crypto_sign_keypair')) {\n            $kp = sodium_crypto_sign_keypair();\n\n            $privatekey = EC::loadFormat('libsodium', sodium_crypto_sign_secretkey($kp));\n            //$publickey = EC::loadFormat('libsodium', sodium_crypto_sign_publickey($kp));\n\n            $privatekey->curveName = 'Ed25519';\n            //$publickey->curveName = $curve;\n\n            return $privatekey;\n        }\n\n        $privatekey = new PrivateKey();\n\n        $curveName = $curve;\n        if (preg_match('#(?:^curve|^ed)\\d+$#', $curveName)) {\n            $curveName = ucfirst($curveName);\n        } elseif (substr($curveName, 0, 10) == 'brainpoolp') {\n            $curveName = 'brainpoolP' . substr($curveName, 10);\n        }\n        $curve = '\\phpseclib3\\Crypt\\EC\\Curves\\\\' . $curveName;\n\n        if (!class_exists($curve)) {\n            throw new UnsupportedCurveException('Named Curve of ' . $curveName . ' is not supported');\n        }\n\n        $reflect = new \\ReflectionClass($curve);\n        $curveName = $reflect->isFinal() ?\n            $reflect->getParentClass()->getShortName() :\n            $reflect->getShortName();\n\n        $curve = new $curve();\n        if ($curve instanceof TwistedEdwardsCurve) {\n            $arr = $curve->extractSecret(Random::string($curve instanceof Ed448 ? 57 : 32));\n            $privatekey->dA = $dA = $arr['dA'];\n            $privatekey->secret = $arr['secret'];\n        } else {\n            $privatekey->dA = $dA = $curve->createRandomMultiplier();\n        }\n        if ($curve instanceof Curve25519 && self::$engines['libsodium']) {\n            //$r = pack('H*', '0900000000000000000000000000000000000000000000000000000000000000');\n            //$QA = sodium_crypto_scalarmult($dA->toBytes(), $r);\n            $QA = sodium_crypto_box_publickey_from_secretkey($dA->toBytes());\n            $privatekey->QA = [$curve->convertInteger(new BigInteger(strrev($QA), 256))];\n        } else {\n            $privatekey->QA = $curve->multiplyPoint($curve->getBasePoint(), $dA);\n        }\n        $privatekey->curve = $curve;\n\n        //$publickey = clone $privatekey;\n        //unset($publickey->dA);\n        //unset($publickey->x);\n\n        $privatekey->curveName = $curveName;\n        //$publickey->curveName = $curveName;\n\n        if ($privatekey->curve instanceof TwistedEdwardsCurve) {\n            return $privatekey->withHash($curve::HASH);\n        }\n\n        return $privatekey;\n    }\n\n    /**\n     * OnLoad Handler\n     *\n     * @return bool\n     */\n    protected static function onLoad(array $components)\n    {\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n\n        if (!isset($components['dA']) && !isset($components['QA'])) {\n            $new = new Parameters();\n            $new->curve = $components['curve'];\n            return $new;\n        }\n\n        $new = isset($components['dA']) ?\n            new PrivateKey() :\n            new PublicKey();\n        $new->curve = $components['curve'];\n        $new->QA = $components['QA'];\n\n        if (isset($components['dA'])) {\n            $new->dA = $components['dA'];\n            $new->secret = $components['secret'];\n        }\n\n        if ($new->curve instanceof TwistedEdwardsCurve) {\n            return $new->withHash($components['curve']::HASH);\n        }\n\n        return $new;\n    }\n\n    /**\n     * Constructor\n     *\n     * PublicKey and PrivateKey objects can only be created from abstract RSA class\n     */\n    protected function __construct()\n    {\n        $this->sigFormat = self::validatePlugin('Signature', 'ASN1');\n        $this->shortFormat = 'ASN1';\n\n        parent::__construct();\n    }\n\n    /**\n     * Returns the curve\n     *\n     * Returns a string if it's a named curve, an array if not\n     *\n     * @return string|array\n     */\n    public function getCurve()\n    {\n        if ($this->curveName) {\n            return $this->curveName;\n        }\n\n        if ($this->curve instanceof MontgomeryCurve) {\n            $this->curveName = $this->curve instanceof Curve25519 ? 'Curve25519' : 'Curve448';\n            return $this->curveName;\n        }\n\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            $this->curveName = $this->curve instanceof Ed25519 ? 'Ed25519' : 'Ed448';\n            return $this->curveName;\n        }\n\n        $params = $this->getParameters()->toString('PKCS8', ['namedCurve' => true]);\n        $decoded = ASN1::extractBER($params);\n        $decoded = ASN1::decodeBER($decoded);\n        $decoded = ASN1::asn1map($decoded[0], ECParameters::MAP);\n        if (isset($decoded['namedCurve'])) {\n            $this->curveName = $decoded['namedCurve'];\n            return $decoded['namedCurve'];\n        }\n\n        if (!$namedCurves) {\n            PKCS1::useSpecifiedCurve();\n        }\n\n        return $decoded;\n    }\n\n    /**\n     * Returns the key size\n     *\n     * Quoting https://tools.ietf.org/html/rfc5656#section-2,\n     *\n     * \"The size of a set of elliptic curve domain parameters on a prime\n     *  curve is defined as the number of bits in the binary representation\n     *  of the field order, commonly denoted by p.  Size on a\n     *  characteristic-2 curve is defined as the number of bits in the binary\n     *  representation of the field, commonly denoted by m.  A set of\n     *  elliptic curve domain parameters defines a group of order n generated\n     *  by a base point P\"\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return $this->curve->getLength();\n    }\n\n    /**\n     * Returns the current engine being used\n     *\n     * @see self::useInternalEngine()\n     * @see self::useBestEngine()\n     * @return string\n     */\n    public function getEngine()\n    {\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            return $this->curve instanceof Ed25519 && self::$engines['libsodium'] && !isset($this->context) ?\n                'libsodium' : 'PHP';\n        }\n\n        return self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods()) ?\n            'OpenSSL' : 'PHP';\n    }\n\n    /**\n     * Returns the public key coordinates as a string\n     *\n     * Used by ECDH\n     *\n     * @return string\n     */\n    public function getEncodedCoordinates()\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            return strrev($this->QA[0]->toBytes(true));\n        }\n        if ($this->curve instanceof TwistedEdwardsCurve) {\n            return $this->curve->encodePoint($this->QA);\n        }\n        return \"\\4\" . $this->QA[0]->toBytes(true) . $this->QA[1]->toBytes(true);\n    }\n\n    /**\n     * Returns the parameters\n     *\n     * @see self::getPublicKey()\n     * @param string $type optional\n     * @return mixed\n     */\n    public function getParameters($type = 'PKCS1')\n    {\n        $type = self::validatePlugin('Keys', $type, 'saveParameters');\n\n        $key = $type::saveParameters($this->curve);\n\n        return EC::load($key, 'PKCS1')\n            ->withHash($this->hash->getHash())\n            ->withSignatureFormat($this->shortFormat);\n    }\n\n    /**\n     * Determines the signature padding mode\n     *\n     * Valid values are: ASN1, SSH2, Raw\n     *\n     * @param string $format\n     */\n    public function withSignatureFormat($format)\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');\n        }\n\n        $new = clone $this;\n        $new->shortFormat = $format;\n        $new->sigFormat = self::validatePlugin('Signature', $format);\n        return $new;\n    }\n\n    /**\n     * Returns the signature format currently being used\n     *\n     */\n    public function getSignatureFormat()\n    {\n        return $this->shortFormat;\n    }\n\n    /**\n     * Sets the context\n     *\n     * Used by Ed25519 / Ed448.\n     *\n     * @see self::sign()\n     * @see self::verify()\n     * @param string $context optional\n     */\n    public function withContext($context = null)\n    {\n        if (!$this->curve instanceof TwistedEdwardsCurve) {\n            throw new UnsupportedCurveException('Only Ed25519 and Ed448 support contexts');\n        }\n\n        $new = clone $this;\n        if (!isset($context)) {\n            $new->context = null;\n            return $new;\n        }\n        if (!is_string($context)) {\n            throw new \\InvalidArgumentException('setContext expects a string');\n        }\n        if (strlen($context) > 255) {\n            throw new \\LengthException('The context is supposed to be, at most, 255 bytes long');\n        }\n        $new->context = $context;\n        return $new;\n    }\n\n    /**\n     * Returns the signature format currently being used\n     *\n     */\n    public function getContext()\n    {\n        return $this->context;\n    }\n\n    /**\n     * Determines which hashing function should be used\n     *\n     * @param string $hash\n     */\n    public function withHash($hash)\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');\n        }\n        if ($this->curve instanceof Ed25519 && $hash != 'sha512') {\n            throw new UnsupportedAlgorithmException('Ed25519 only supports sha512 as a hash');\n        }\n        if ($this->curve instanceof Ed448 && $hash != 'shake256-912') {\n            throw new UnsupportedAlgorithmException('Ed448 only supports shake256 with a length of 114 bytes');\n        }\n\n        return parent::withHash($hash);\n    }\n\n    /**\n     * __toString() magic method\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        if ($this->curve instanceof MontgomeryCurve) {\n            return '';\n        }\n\n        return parent::__toString();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php",
    "content": "<?php\n\n/**\n * Wrapper around hash() and hash_hmac() functions supporting truncated hashes\n * such as sha256-96.  Any hash algorithm returned by hash_algos() (and\n * truncated versions thereof) are supported.\n *\n * If {@link self::setKey() setKey()} is called, {@link self::hash() hash()} will\n * return the HMAC as opposed to the hash.\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $hash = new \\phpseclib3\\Crypt\\Hash('sha512');\n *\n *    $hash->setKey('abcdefg');\n *\n *    echo base64_encode($hash->hash('abcdefg'));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @author    Andreas Fischer <bantu@phpbb.com>\n * @copyright 2015 Andreas Fischer\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\InsufficientSetupException;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\PrimeField;\n\n/**\n * @author  Jim Wigginton <terrafrost@php.net>\n * @author  Andreas Fischer <bantu@phpbb.com>\n */\nclass Hash\n{\n    /**\n     * Padding Types\n     *\n     */\n    const PADDING_KECCAK = 1;\n\n    /**\n     * Padding Types\n     *\n     */\n    const PADDING_SHA3 = 2;\n\n    /**\n     * Padding Types\n     *\n     */\n    const PADDING_SHAKE = 3;\n\n    /**\n     * Padding Type\n     *\n     * Only used by SHA3\n     *\n     * @var int\n     */\n    private $paddingType = 0;\n\n    /**\n     * Hash Parameter\n     *\n     * @see self::setHash()\n     * @var int\n     */\n    private $hashParam;\n\n    /**\n     * Byte-length of hash output (Internal HMAC)\n     *\n     * @see self::setHash()\n     * @var int\n     */\n    private $length;\n\n    /**\n     * Hash Algorithm\n     *\n     * @see self::setHash()\n     * @var string\n     */\n    private $algo;\n\n    /**\n     * Key\n     *\n     * @see self::setKey()\n     * @var string\n     */\n    private $key = false;\n\n    /**\n     * Nonce\n     *\n     * @see self::setNonce()\n     * @var string\n     */\n    private $nonce = false;\n\n    /**\n     * Hash Parameters\n     *\n     * @var array\n     */\n    private $parameters = [];\n\n    /**\n     * Computed Key\n     *\n     * @see self::_computeKey()\n     * @var string\n     */\n    private $computedKey = false;\n\n    /**\n     * Outer XOR (Internal HMAC)\n     *\n     * Used only for sha512\n     *\n     * @see self::hash()\n     * @var string\n     */\n    private $opad;\n\n    /**\n     * Inner XOR (Internal HMAC)\n     *\n     * Used only for sha512\n     *\n     * @see self::hash()\n     * @var string\n     */\n    private $ipad;\n\n    /**\n     * Recompute AES Key\n     *\n     * Used only for umac\n     *\n     * @see self::hash()\n     * @var boolean\n     */\n    private $recomputeAESKey;\n\n    /**\n     * umac cipher object\n     *\n     * @see self::hash()\n     * @var AES\n     */\n    private $c;\n\n    /**\n     * umac pad\n     *\n     * @see self::hash()\n     * @var string\n     */\n    private $pad;\n\n    /**\n     * Block Size\n     *\n     * @var int\n     */\n    private $blockSize;\n\n    /**#@+\n     * UMAC variables\n     *\n     * @var PrimeField\n     */\n    private static $factory36;\n    private static $factory64;\n    private static $factory128;\n    private static $offset64;\n    private static $offset128;\n    private static $marker64;\n    private static $marker128;\n    private static $maxwordrange64;\n    private static $maxwordrange128;\n    /**#@-*/\n\n    /**#@+\n     * AES_CMAC variables\n     *\n     * @var string\n     */\n    private $k1;\n    private $k2;\n    /**#@-*/\n\n    /**\n     * Default Constructor.\n     *\n     * @param string $hash\n     */\n    public function __construct($hash = 'sha256')\n    {\n        $this->setHash($hash);\n    }\n\n    /**\n     * Sets the key for HMACs\n     *\n     * Keys can be of any length.\n     *\n     * @param string $key\n     */\n    public function setKey($key = false)\n    {\n        $this->key = $key;\n        $this->computeKey();\n        $this->recomputeAESKey = true;\n    }\n\n    /**\n     * Sets the nonce for UMACs\n     *\n     * Keys can be of any length.\n     *\n     * @param string $nonce\n     */\n    public function setNonce($nonce = false)\n    {\n        switch (true) {\n            case !is_string($nonce):\n            case strlen($nonce) > 0 && strlen($nonce) <= 16:\n                $this->recomputeAESKey = true;\n                $this->nonce = $nonce;\n                return;\n        }\n\n        throw new \\LengthException('The nonce length must be between 1 and 16 bytes, inclusive');\n    }\n\n    /**\n     * Pre-compute the key used by the HMAC\n     *\n     * Quoting http://tools.ietf.org/html/rfc2104#section-2, \"Applications that use keys longer than B bytes\n     * will first hash the key using H and then use the resultant L byte string as the actual key to HMAC.\"\n     *\n     * As documented in https://www.reddit.com/r/PHP/comments/9nct2l/symfonypolyfill_hash_pbkdf2_correct_fix_for/\n     * when doing an HMAC multiple times it's faster to compute the hash once instead of computing it during\n     * every call\n     *\n     */\n    private function computeKey()\n    {\n        if ($this->key === false) {\n            $this->computedKey = false;\n            return;\n        }\n\n        if (strlen($this->key) <= $this->getBlockLengthInBytes()) {\n            $this->computedKey = $this->key;\n            return;\n        }\n\n        $this->computedKey = is_array($this->algo) ?\n            call_user_func($this->algo, $this->key) :\n            hash($this->algo, $this->key, true);\n    }\n\n    /**\n     * Gets the hash function.\n     *\n     * As set by the constructor or by the setHash() method.\n     *\n     * @return string\n     */\n    public function getHash()\n    {\n        return $this->hashParam;\n    }\n\n    /**\n     * Sets the hash function.\n     *\n     * @param string $hash\n     */\n    public function setHash($hash)\n    {\n        $oldHash = $this->hashParam;\n        $this->hashParam = $hash = strtolower($hash);\n        switch ($hash) {\n            case 'umac-32':\n            case 'umac-64':\n            case 'umac-96':\n            case 'umac-128':\n                if ($oldHash != $this->hashParam) {\n                    $this->recomputeAESKey = true;\n                }\n                $this->blockSize = 128;\n                $this->length = abs(substr($hash, -3)) >> 3;\n                $this->algo = 'umac';\n                return;\n            case 'aes_cmac':\n                if ($oldHash != $this->hashParam) {\n                    $this->recomputeAESKey = true;\n                }\n                $this->blockSize = 128;\n                $this->length = 16;\n                $this->algo = 'aes_cmac';\n                return;\n            case 'md2-96':\n            case 'md5-96':\n            case 'sha1-96':\n            case 'sha224-96':\n            case 'sha256-96':\n            case 'sha384-96':\n            case 'sha512-96':\n            case 'sha512/224-96':\n            case 'sha512/256-96':\n                $hash = substr($hash, 0, -3);\n                $this->length = 12; // 96 / 8 = 12\n                break;\n            case 'md2':\n            case 'md5':\n                $this->length = 16;\n                break;\n            case 'sha1':\n                $this->length = 20;\n                break;\n            case 'sha224':\n            case 'sha512/224':\n            case 'sha3-224':\n                $this->length = 28;\n                break;\n            case 'keccak256':\n                $this->paddingType = self::PADDING_KECCAK;\n                // fall-through\n            case 'sha256':\n            case 'sha512/256':\n            case 'sha3-256':\n                $this->length = 32;\n                break;\n            case 'sha384':\n            case 'sha3-384':\n                $this->length = 48;\n                break;\n            case 'sha512':\n            case 'sha3-512':\n                $this->length = 64;\n                break;\n            default:\n                if (preg_match('#^(shake(?:128|256))-(\\d+)$#', $hash, $matches)) {\n                    $this->paddingType = self::PADDING_SHAKE;\n                    $hash = $matches[1];\n                    $this->length = $matches[2] >> 3;\n                } else {\n                    throw new UnsupportedAlgorithmException(\n                        \"$hash is not a supported algorithm\"\n                    );\n                }\n        }\n\n        switch ($hash) {\n            case 'md2':\n            case 'md2-96':\n                $this->blockSize = 128;\n                break;\n            case 'md5-96':\n            case 'sha1-96':\n            case 'sha224-96':\n            case 'sha256-96':\n            case 'md5':\n            case 'sha1':\n            case 'sha224':\n            case 'sha256':\n                $this->blockSize = 512;\n                break;\n            case 'sha3-224':\n                $this->blockSize = 1152; // 1600 - 2*224\n                break;\n            case 'sha3-256':\n            case 'shake256':\n            case 'keccak256':\n                $this->blockSize = 1088; // 1600 - 2*256\n                break;\n            case 'sha3-384':\n                $this->blockSize = 832; // 1600 - 2*384\n                break;\n            case 'sha3-512':\n                $this->blockSize = 576; // 1600 - 2*512\n                break;\n            case 'shake128':\n                $this->blockSize = 1344; // 1600 - 2*128\n                break;\n            default:\n                $this->blockSize = 1024;\n        }\n\n        if (in_array(substr($hash, 0, 5), ['sha3-', 'shake', 'kecca'])) {\n            // PHP 7.1.0 introduced support for \"SHA3 fixed mode algorithms\":\n            // http://php.net/ChangeLog-7.php#7.1.0\n            if (version_compare(PHP_VERSION, '7.1.0') < 0 || substr($hash, 0, 5) != 'sha3-') {\n                //preg_match('#(\\d+)$#', $hash, $matches);\n                //$this->parameters['capacity'] = 2 * $matches[1]; // 1600 - $this->blockSize\n                //$this->parameters['rate'] = 1600 - $this->parameters['capacity']; // == $this->blockSize\n                if (!$this->paddingType) {\n                    $this->paddingType = self::PADDING_SHA3;\n                }\n                $this->parameters = [\n                    'capacity' => 1600 - $this->blockSize,\n                    'rate' => $this->blockSize,\n                    'length' => $this->length,\n                    'padding' => $this->paddingType\n                ];\n                $hash = ['phpseclib3\\Crypt\\Hash', PHP_INT_SIZE == 8 ? 'sha3_64' : 'sha3_32'];\n            }\n        }\n\n        if ($hash == 'sha512/224' || $hash == 'sha512/256') {\n            // PHP 7.1.0 introduced sha512/224 and sha512/256 support:\n            // http://php.net/ChangeLog-7.php#7.1.0\n            if (version_compare(PHP_VERSION, '7.1.0') < 0) {\n                // from http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf#page=24\n                $initial = $hash == 'sha512/256' ?\n                    [\n                        '22312194FC2BF72C', '9F555FA3C84C64C2', '2393B86B6F53B151', '963877195940EABD',\n                        '96283EE2A88EFFE3', 'BE5E1E2553863992', '2B0199FC2C85B8AA', '0EB72DDC81C52CA2'\n                    ] :\n                    [\n                        '8C3D37C819544DA2', '73E1996689DCD4D6', '1DFAB7AE32FF9C82', '679DD514582F9FCF',\n                        '0F6D2B697BD44DA8', '77E36F7304C48942', '3F9D85A86A1D36C8', '1112E6AD91D692A1'\n                    ];\n                for ($i = 0; $i < 8; $i++) {\n                    if (PHP_INT_SIZE == 8) {\n                        list(, $initial[$i]) = unpack('J', pack('H*', $initial[$i]));\n                    } else {\n                        $initial[$i] = new BigInteger($initial[$i], 16);\n                        $initial[$i]->setPrecision(64);\n                    }\n                }\n\n                $this->parameters = compact('initial');\n\n                $hash = ['phpseclib3\\Crypt\\Hash', PHP_INT_SIZE == 8 ? 'sha512_64' : 'sha512'];\n            }\n        }\n\n        if (is_array($hash)) {\n            $b = $this->blockSize >> 3;\n            $this->ipad = str_repeat(chr(0x36), $b);\n            $this->opad = str_repeat(chr(0x5C), $b);\n        }\n\n        $this->algo = $hash;\n\n        $this->computeKey();\n    }\n\n    /**\n     * KDF: Key-Derivation Function\n     *\n     * The key-derivation function generates pseudorandom bits used to key the hash functions.\n     *\n     * @param int $index a non-negative integer less than 2^64\n     * @param int $numbytes a non-negative integer less than 2^64\n     * @return string string of length numbytes bytes\n     */\n    private function kdf($index, $numbytes)\n    {\n        $this->c->setIV(pack('N4', 0, $index, 0, 1));\n\n        return $this->c->encrypt(str_repeat(\"\\0\", $numbytes));\n    }\n\n    /**\n     * PDF Algorithm\n     *\n     * @return string string of length taglen bytes.\n     */\n    private function pdf()\n    {\n        $k = $this->key;\n        $nonce = $this->nonce;\n        $taglen = $this->length;\n\n        //\n        // Extract and zero low bit(s) of Nonce if needed\n        //\n        if ($taglen <= 8) {\n            $last = strlen($nonce) - 1;\n            $mask = $taglen == 4 ? \"\\3\" : \"\\1\";\n            $index = $nonce[$last] & $mask;\n            $nonce[$last] = $nonce[$last] ^ $index;\n        }\n\n        //\n        // Make Nonce BLOCKLEN bytes by appending zeroes if needed\n        //\n        $nonce = str_pad($nonce, 16, \"\\0\");\n\n        //\n        // Generate subkey, encipher and extract indexed substring\n        //\n        $kp = $this->kdf(0, 16);\n        $c = new AES('ctr');\n        $c->disablePadding();\n        $c->setKey($kp);\n        $c->setIV($nonce);\n        $t = $c->encrypt(\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\");\n\n        // we could use ord() but per https://paragonie.com/blog/2016/06/constant-time-encoding-boring-cryptography-rfc-4648-and-you\n        // unpack() doesn't leak timing info\n        return $taglen <= 8 ?\n            substr($t, unpack('C', $index)[1] * $taglen, $taglen) :\n            substr($t, 0, $taglen);\n    }\n\n    /**\n     * UHASH Algorithm\n     *\n     * @param string $m string of length less than 2^67 bits.\n     * @param int $taglen the integer 4, 8, 12 or 16.\n     * @return string string of length taglen bytes.\n     */\n    private function uhash($m, $taglen)\n    {\n        //\n        // One internal iteration per 4 bytes of output\n        //\n        $iters = $taglen >> 2;\n\n        //\n        // Define total key needed for all iterations using KDF.\n        // L1Key reuses most key material between iterations.\n        //\n        //$L1Key  = $this->kdf(1, 1024 + ($iters - 1) * 16);\n        $L1Key  = $this->kdf(1, (1024 + ($iters - 1)) * 16);\n        $L2Key  = $this->kdf(2, $iters * 24);\n        $L3Key1 = $this->kdf(3, $iters * 64);\n        $L3Key2 = $this->kdf(4, $iters * 4);\n\n        //\n        // For each iteration, extract key and do three-layer hash.\n        // If bytelength(M) <= 1024, then skip L2-HASH.\n        //\n        $y = '';\n        for ($i = 0; $i < $iters; $i++) {\n            $L1Key_i  = substr($L1Key, $i * 16, 1024);\n            $L2Key_i  = substr($L2Key, $i * 24, 24);\n            $L3Key1_i = substr($L3Key1, $i * 64, 64);\n            $L3Key2_i = substr($L3Key2, $i * 4, 4);\n\n            $a = self::L1Hash($L1Key_i, $m);\n            $b = strlen($m) <= 1024 ? \"\\0\\0\\0\\0\\0\\0\\0\\0$a\" : self::L2Hash($L2Key_i, $a);\n            $c = self::L3Hash($L3Key1_i, $L3Key2_i, $b);\n            $y .= $c;\n        }\n\n        return $y;\n    }\n\n    /**\n     * L1-HASH Algorithm\n     *\n     * The first-layer hash breaks the message into 1024-byte chunks and\n     * hashes each with a function called NH.  Concatenating the results\n     * forms a string, which is up to 128 times shorter than the original.\n     *\n     * @param string $k string of length 1024 bytes.\n     * @param string $m string of length less than 2^67 bits.\n     * @return string string of length (8 * ceil(bitlength(M)/8192)) bytes.\n     */\n    private static function L1Hash($k, $m)\n    {\n        //\n        // Break M into 1024 byte chunks (final chunk may be shorter)\n        //\n        $m = str_split($m, 1024);\n\n        //\n        // For each chunk, except the last: endian-adjust, NH hash\n        // and add bit-length.  Use results to build Y.\n        //\n        $length = 1024 * 8;\n        $y = '';\n\n        for ($i = 0; $i < count($m) - 1; $i++) {\n            $m[$i] = pack('N*', ...unpack('V*', $m[$i])); // ENDIAN-SWAP\n            $y .= PHP_INT_SIZE == 8 ?\n                static::nh64($k, $m[$i], $length) :\n                static::nh32($k, $m[$i], $length);\n        }\n\n        //\n        // For the last chunk: pad to 32-byte boundary, endian-adjust,\n        // NH hash and add bit-length.  Concatenate the result to Y.\n        //\n        $length = count($m) ? strlen($m[$i]) : 0;\n        $pad = 32 - ($length % 32);\n        $pad = max(32, $length + $pad % 32);\n        $m[$i] = str_pad(isset($m[$i]) ? $m[$i] : '', $pad, \"\\0\"); // zeropad\n        $m[$i] = pack('N*', ...unpack('V*', $m[$i])); // ENDIAN-SWAP\n\n        $y .= PHP_INT_SIZE == 8 ?\n            static::nh64($k, $m[$i], $length * 8) :\n            static::nh32($k, $m[$i], $length * 8);\n\n        return $y;\n    }\n\n    /**\n     * 32-bit safe 64-bit Multiply with 2x 32-bit ints\n     *\n     * @param int $x\n     * @param int $y\n     * @return string $x * $y\n     */\n    private static function mul32_64($x, $y)\n    {\n        // see mul64() for a more detailed explanation of how this works\n\n        $x1 = ($x >> 16) & 0xFFFF;\n        $x0 = $x & 0xFFFF;\n\n        $y1 = ($y >> 16) & 0xFFFF;\n        $y0 = $y & 0xFFFF;\n\n        // the following 3x lines will possibly yield floats\n        $z2 = $x1 * $y1;\n        $z0 = $x0 * $y0;\n        $z1 = $x1 * $y0 + $x0 * $y1;\n\n        $a = intval(fmod($z0, 65536));\n        $b = intval($z0 / 65536) + intval(fmod($z1, 65536));\n        $c = intval($z1 / 65536) + intval(fmod($z2, 65536)) + intval($b / 65536);\n        $b = intval(fmod($b, 65536));\n        $d = intval($z2 / 65536) + intval($c / 65536);\n        $c = intval(fmod($c, 65536));\n        $d = intval(fmod($d, 65536));\n\n        return pack('n4', $d, $c, $b, $a);\n    }\n\n    /**\n     * 32-bit safe 64-bit Addition with 2x 64-bit strings\n     *\n     * @param int $x\n     * @param int $y\n     * @return int $x * $y\n     */\n    private static function add32_64($x, $y)\n    {\n        list(, $x1, $x2, $x3, $x4) = unpack('n4', $x);\n        list(, $y1, $y2, $y3, $y4) = unpack('n4', $y);\n        $a = $x4 + $y4;\n        $b = $x3 + $y3 + ($a >> 16);\n        $c = $x2 + $y2 + ($b >> 16);\n        $d = $x1 + $y1 + ($c >> 16);\n        return pack('n4', $d, $c, $b, $a);\n    }\n\n    /**\n     * 32-bit safe 32-bit Addition with 2x 32-bit strings\n     *\n     * @param int $x\n     * @param int $y\n     * @return int $x * $y\n     */\n    private static function add32($x, $y)\n    {\n        // see add64() for a more detailed explanation of how this works\n\n        $x1 = $x & 0xFFFF;\n        $x2 = ($x >> 16) & 0xFFFF;\n        $y1 = $y & 0xFFFF;\n        $y2 = ($y >> 16) & 0xFFFF;\n\n        $a = $x1 + $y1;\n        $b = ($x2 + $y2 + ($a >> 16)) << 16;\n        $a &= 0xFFFF;\n\n        return $a | $b;\n    }\n\n    /**\n     * NH Algorithm / 32-bit safe\n     *\n     * @param string $k string of length 1024 bytes.\n     * @param string $m string with length divisible by 32 bytes.\n     * @return string string of length 8 bytes.\n     */\n    private static function nh32($k, $m, $length)\n    {\n        //\n        // Break M and K into 4-byte chunks\n        //\n        $k = unpack('N*', $k);\n        $m = unpack('N*', $m);\n        $t = count($m);\n\n        //\n        // Perform NH hash on the chunks, pairing words for multiplication\n        // which are 4 apart to accommodate vector-parallelism.\n        //\n        $i = 1;\n        $y = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n        while ($i <= $t) {\n            $temp  = self::add32($m[$i], $k[$i]);\n            $temp2 = self::add32($m[$i + 4], $k[$i + 4]);\n            $y = self::add32_64($y, self::mul32_64($temp, $temp2));\n\n            $temp  = self::add32($m[$i + 1], $k[$i + 1]);\n            $temp2 = self::add32($m[$i + 5], $k[$i + 5]);\n            $y = self::add32_64($y, self::mul32_64($temp, $temp2));\n\n            $temp  = self::add32($m[$i + 2], $k[$i + 2]);\n            $temp2 = self::add32($m[$i + 6], $k[$i + 6]);\n            $y = self::add32_64($y, self::mul32_64($temp, $temp2));\n\n            $temp  = self::add32($m[$i + 3], $k[$i + 3]);\n            $temp2 = self::add32($m[$i + 7], $k[$i + 7]);\n            $y = self::add32_64($y, self::mul32_64($temp, $temp2));\n\n            $i += 8;\n        }\n\n        return self::add32_64($y, pack('N2', 0, $length));\n    }\n\n    /**\n     * 64-bit Multiply with 2x 32-bit ints\n     *\n     * @param int $x\n     * @param int $y\n     * @return int $x * $y\n     */\n    private static function mul64($x, $y)\n    {\n        // since PHP doesn't implement unsigned integers we'll implement them with signed integers\n        // to do this we'll use karatsuba multiplication\n\n        $x1 = $x >> 16;\n        $x0 = $x & 0xFFFF;\n\n        $y1 = $y >> 16;\n        $y0 = $y & 0xFFFF;\n\n        $z2 = $x1 * $y1; // up to 32 bits long\n        $z0 = $x0 * $y0; // up to 32 bits long\n        $z1 = $x1 * $y0 + $x0 * $y1; // up to 33 bit long\n        // normally karatsuba multiplication calculates $z1 thusly:\n        //$z1 = ($x1 + $x0) * ($y0 + $y1) - $z2 - $z0;\n        // the idea being to eliminate one extra multiplication. for arbitrary precision math that makes sense\n        // but not for this purpose\n\n        // at this point karatsuba would normally return this:\n        //return ($z2 << 64) + ($z1 << 32) + $z0;\n        // the problem is that the output could be out of range for signed 64-bit ints,\n        // which would cause PHP to switch to floats, which would risk losing the lower few bits\n        // as such we'll OR 4x 16-bit blocks together like so:\n        /*\n          ........  |  ........  |  ........  |  ........\n          upper $z2 |  lower $z2 |  lower $z1 |  lower $z0\n                    | +upper $z1 | +upper $z0 |\n         +   $carry | +   $carry |            |\n        */\n        // technically upper $z1 is 17 bit - not 16 - but the most significant digit of that will\n        // just get added to $carry\n\n        $a = $z0 & 0xFFFF;\n        $b = ($z0 >> 16) + ($z1 & 0xFFFF);\n        $c = ($z1 >> 16) + ($z2 & 0xFFFF) + ($b >> 16);\n        $b = ($b & 0xFFFF) << 16;\n        $d = ($z2 >> 16) + ($c >> 16);\n        $c = ($c & 0xFFFF) << 32;\n        $d = ($d & 0xFFFF) << 48;\n\n        return $a | $b | $c | $d;\n    }\n\n    /**\n     * 64-bit Addition with 2x 64-bit ints\n     *\n     * @param int $x\n     * @param int $y\n     * @return int $x + $y\n     */\n    private static function add64($x, $y)\n    {\n        // doing $x + $y risks returning a result that's out of range for signed 64-bit ints\n        // in that event PHP would convert the result to a float and precision would be lost\n        // so we'll just add 2x 32-bit ints together like so:\n        /*\n           ........ | ........\n           upper $x | lower $x\n          +upper $y |+lower $y\n          +  $carry |\n        */\n        $x1 = $x & 0xFFFFFFFF;\n        $x2 = ($x >> 32) & 0xFFFFFFFF;\n        $y1 = $y & 0xFFFFFFFF;\n        $y2 = ($y >> 32) & 0xFFFFFFFF;\n\n        $a = $x1 + $y1;\n        $b = ($x2 + $y2 + ($a >> 32)) << 32;\n        $a &= 0xFFFFFFFF;\n\n        return $a | $b;\n    }\n\n    /**\n     * NH Algorithm / 64-bit safe\n     *\n     * @param string $k string of length 1024 bytes.\n     * @param string $m string with length divisible by 32 bytes.\n     * @return string string of length 8 bytes.\n     */\n    private static function nh64($k, $m, $length)\n    {\n        //\n        // Break M and K into 4-byte chunks\n        //\n        $k = unpack('N*', $k);\n        $m = unpack('N*', $m);\n        $t = count($m);\n\n        //\n        // Perform NH hash on the chunks, pairing words for multiplication\n        // which are 4 apart to accommodate vector-parallelism.\n        //\n        $i = 1;\n        $y = 0;\n        while ($i <= $t) {\n            $temp  = ($m[$i] + $k[$i]) & 0xFFFFFFFF;\n            $temp2 = ($m[$i + 4] + $k[$i + 4]) & 0xFFFFFFFF;\n            $y = self::add64($y, self::mul64($temp, $temp2));\n\n            $temp  = ($m[$i + 1] + $k[$i + 1]) & 0xFFFFFFFF;\n            $temp2 = ($m[$i + 5] + $k[$i + 5]) & 0xFFFFFFFF;\n            $y = self::add64($y, self::mul64($temp, $temp2));\n\n            $temp  = ($m[$i + 2] + $k[$i + 2]) & 0xFFFFFFFF;\n            $temp2 = ($m[$i + 6] + $k[$i + 6]) & 0xFFFFFFFF;\n            $y = self::add64($y, self::mul64($temp, $temp2));\n\n            $temp  = ($m[$i + 3] + $k[$i + 3]) & 0xFFFFFFFF;\n            $temp2 = ($m[$i + 7] + $k[$i + 7]) & 0xFFFFFFFF;\n            $y = self::add64($y, self::mul64($temp, $temp2));\n\n            $i += 8;\n        }\n\n        return pack('J', self::add64($y, $length));\n    }\n\n    /**\n     * L2-HASH: Second-Layer Hash\n     *\n     * The second-layer rehashes the L1-HASH output using a polynomial hash\n     * called POLY.  If the L1-HASH output is long, then POLY is called once\n     * on a prefix of the L1-HASH output and called using different settings\n     * on the remainder.  (This two-step hashing of the L1-HASH output is\n     * needed only if the message length is greater than 16 megabytes.)\n     * Careful implementation of POLY is necessary to avoid a possible\n     * timing attack (see Section 6.6 for more information).\n     *\n     * @param string $k string of length 24 bytes.\n     * @param string $m string of length less than 2^64 bytes.\n     * @return string string of length 16 bytes.\n     */\n    private static function L2Hash($k, $m)\n    {\n        //\n        //  Extract keys and restrict to special key-sets\n        //\n        $k64 = $k & \"\\x01\\xFF\\xFF\\xFF\\x01\\xFF\\xFF\\xFF\";\n        $k64 = new BigInteger($k64, 256);\n        $k128 = substr($k, 8) & \"\\x01\\xFF\\xFF\\xFF\\x01\\xFF\\xFF\\xFF\\x01\\xFF\\xFF\\xFF\\x01\\xFF\\xFF\\xFF\";\n        $k128 = new BigInteger($k128, 256);\n\n        //\n        // If M is no more than 2^17 bytes, hash under 64-bit prime,\n        // otherwise, hash first 2^17 bytes under 64-bit prime and\n        // remainder under 128-bit prime.\n        //\n        if (strlen($m) <= 0x20000) { // 2^14 64-bit words\n            $y = self::poly(64, self::$maxwordrange64, $k64, $m);\n        } else {\n            $m_1 = substr($m, 0, 0x20000); // 1 << 17\n            $m_2 = substr($m, 0x20000) . \"\\x80\";\n            $length = strlen($m_2);\n            $pad = 16 - ($length % 16);\n            $pad %= 16;\n            $m_2 = str_pad($m_2, $length + $pad, \"\\0\"); // zeropad\n            $y = self::poly(64, self::$maxwordrange64, $k64, $m_1);\n            $y = str_pad($y, 16, \"\\0\", STR_PAD_LEFT);\n            $y = self::poly(128, self::$maxwordrange128, $k128, $y . $m_2);\n        }\n\n        return str_pad($y, 16, \"\\0\", STR_PAD_LEFT);\n    }\n\n    /**\n     * POLY Algorithm\n     *\n     * @param int $wordbits the integer 64 or 128.\n     * @param BigInteger $maxwordrange positive integer less than 2^wordbits.\n     * @param BigInteger $k integer in the range 0 ... prime(wordbits) - 1.\n     * @param string $m string with length divisible by (wordbits / 8) bytes.\n     * @return integer in the range 0 ... prime(wordbits) - 1.\n     */\n    private static function poly($wordbits, $maxwordrange, $k, $m)\n    {\n        //\n        // Define constants used for fixing out-of-range words\n        //\n        $wordbytes = $wordbits >> 3;\n        if ($wordbits == 128) {\n            $factory = self::$factory128;\n            $offset = self::$offset128;\n            $marker = self::$marker128;\n        } else {\n            $factory = self::$factory64;\n            $offset = self::$offset64;\n            $marker = self::$marker64;\n        }\n\n        $k = $factory->newInteger($k);\n\n        //\n        // Break M into chunks of length wordbytes bytes\n        //\n        $m_i = str_split($m, $wordbytes);\n\n        //\n        // Each input word m is compared with maxwordrange.  If not smaller\n        // then 'marker' and (m - offset), both in range, are hashed.\n        //\n        $y = $factory->newInteger(new BigInteger(1));\n        foreach ($m_i as $m) {\n            $m = $factory->newInteger(new BigInteger($m, 256));\n            if ($m->compare($maxwordrange) >= 0) {\n                $y = $k->multiply($y)->add($marker);\n                $y = $k->multiply($y)->add($m->subtract($offset));\n            } else {\n                $y = $k->multiply($y)->add($m);\n            }\n        }\n\n        return $y->toBytes();\n    }\n\n    /**\n     * L3-HASH: Third-Layer Hash\n     *\n     * The output from L2-HASH is 16 bytes long.  This final hash function\n     * hashes the 16-byte string to a fixed length of 4 bytes.\n     *\n     * @param string $k1 string of length 64 bytes.\n     * @param string $k2 string of length 4 bytes.\n     * @param string $m string of length 16 bytes.\n     * @return string string of length 4 bytes.\n     */\n    private static function L3Hash($k1, $k2, $m)\n    {\n        $factory = self::$factory36;\n\n        $y = $factory->newInteger(new BigInteger());\n        for ($i = 0; $i < 8; $i++) {\n            $m_i = $factory->newInteger(new BigInteger(substr($m, 2 * $i, 2), 256));\n            $k_i = $factory->newInteger(new BigInteger(substr($k1, 8 * $i, 8), 256));\n            $y = $y->add($m_i->multiply($k_i));\n        }\n        $y = str_pad(substr($y->toBytes(), -4), 4, \"\\0\", STR_PAD_LEFT);\n        $y = $y ^ $k2;\n\n        return $y;\n    }\n\n    /**\n     * Compute the Hash / HMAC / UMAC.\n     *\n     * @param string $text\n     * @return string\n     */\n    public function hash($text)\n    {\n        $algo = $this->algo;\n        // https://www.rfc-editor.org/rfc/rfc4493.html\n        // https://en.wikipedia.org/wiki/One-key_MAC\n        if ($algo == 'aes_cmac') {\n            $constZero = \"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\";\n            if ($this->recomputeAESKey) {\n                if (!is_string($this->key)) {\n                    throw new InsufficientSetupException('No key has been set');\n                }\n                if (strlen($this->key) != 16) {\n                    throw new \\LengthException('Key must be 16 bytes long');\n                }\n                // Algorithm Generate_Subkey\n                $constRb = \"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x87\";\n                $this->c = new AES('ecb');\n                $this->c->setKey($this->key);\n                $this->c->disablePadding();\n                $l = $this->c->encrypt($constZero);\n                $msb = ($l & \"\\x80\") == \"\\x80\";\n                $l = new BigInteger($l, 256);\n                $l->setPrecision(128);\n                $l = $l->bitwise_leftShift(1)->toBytes();\n                // make it constant time\n                $k1 = $msb ? $l ^ $constRb : $l | $constZero;\n\n                $msb = ($k1 & \"\\x80\") == \"\\x80\";\n                $k2 = new BigInteger($k1, 256);\n                $k2->setPrecision(128);\n                $k2 = $k2->bitwise_leftShift(1)->toBytes();\n                // make it constant time\n                $k2 = $msb ? $k2 ^ $constRb : $k2 | $constZero;\n\n                $this->k1 = $k1;\n                $this->k2 = $k2;\n            }\n\n            $len = strlen($text);\n            $const_Bsize = 16;\n            $M = strlen($text) ? str_split($text, $const_Bsize) : [''];\n\n            // Step 2\n            $n = ceil($len / $const_Bsize);\n            // Step 3\n            if ($n == 0) {\n                $n = 1;\n                $flag = false;\n            } else {\n                $flag = $len % $const_Bsize == 0;\n            }\n            // Step 4\n            $M_last = $flag ?\n                $M[$n - 1] ^ $k1 :\n                self::OMAC_padding($M[$n - 1], $const_Bsize) ^ $k2;\n            // Step 5\n            $x = $constZero;\n            // Step 6\n            $c = &$this->c;\n            for ($i = 0; $i < $n - 1; $i++) {\n                $y = $x ^ $M[$i];\n                $x = $c->encrypt($y);\n            }\n            $y = $M_last ^ $x;\n            return $c->encrypt($y);\n        }\n        if ($algo == 'umac') {\n            if ($this->recomputeAESKey) {\n                if (!is_string($this->nonce)) {\n                    throw new InsufficientSetupException('No nonce has been set');\n                }\n                if (!is_string($this->key)) {\n                    throw new InsufficientSetupException('No key has been set');\n                }\n                if (strlen($this->key) != 16) {\n                    throw new \\LengthException('Key must be 16 bytes long');\n                }\n\n                if (!isset(self::$maxwordrange64)) {\n                    $one = new BigInteger(1);\n\n                    $prime36 = new BigInteger(\"\\x00\\x00\\x00\\x0F\\xFF\\xFF\\xFF\\xFB\", 256);\n                    self::$factory36 = new PrimeField($prime36);\n\n                    $prime64 = new BigInteger(\"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xC5\", 256);\n                    self::$factory64 = new PrimeField($prime64);\n\n                    $prime128 = new BigInteger(\"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\x61\", 256);\n                    self::$factory128 = new PrimeField($prime128);\n\n                    self::$offset64 = new BigInteger(\"\\1\\0\\0\\0\\0\\0\\0\\0\\0\", 256);\n                    self::$offset64 = self::$factory64->newInteger(self::$offset64->subtract($prime64));\n                    self::$offset128 = new BigInteger(\"\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\", 256);\n                    self::$offset128 = self::$factory128->newInteger(self::$offset128->subtract($prime128));\n\n                    self::$marker64 = self::$factory64->newInteger($prime64->subtract($one));\n                    self::$marker128 = self::$factory128->newInteger($prime128->subtract($one));\n\n                    $maxwordrange64 = $one->bitwise_leftShift(64)->subtract($one->bitwise_leftShift(32));\n                    self::$maxwordrange64 = self::$factory64->newInteger($maxwordrange64);\n\n                    $maxwordrange128 = $one->bitwise_leftShift(128)->subtract($one->bitwise_leftShift(96));\n                    self::$maxwordrange128 = self::$factory128->newInteger($maxwordrange128);\n                }\n\n                $this->c = new AES('ctr');\n                $this->c->disablePadding();\n                $this->c->setKey($this->key);\n\n                $this->pad = $this->pdf();\n\n                $this->recomputeAESKey = false;\n            }\n\n            $hashedmessage = $this->uhash($text, $this->length);\n            return $hashedmessage ^ $this->pad;\n        }\n\n        if (is_array($algo)) {\n            if (empty($this->key) || !is_string($this->key)) {\n                return substr($algo($text, ...array_values($this->parameters)), 0, $this->length);\n            }\n\n            // SHA3 HMACs are discussed at https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf#page=30\n\n            $key    = str_pad($this->computedKey, $b, chr(0));\n            $temp   = $this->ipad ^ $key;\n            $temp  .= $text;\n            $temp   = substr($algo($temp, ...array_values($this->parameters)), 0, $this->length);\n            $output = $this->opad ^ $key;\n            $output .= $temp;\n            $output = $algo($output, ...array_values($this->parameters));\n\n            return substr($output, 0, $this->length);\n        }\n\n        $output = !empty($this->key) || is_string($this->key) ?\n            hash_hmac($algo, $text, $this->computedKey, true) :\n            hash($algo, $text, true);\n\n        return strlen($output) > $this->length\n            ? substr($output, 0, $this->length)\n            : $output;\n    }\n\n    /**\n     * Returns the hash length (in bits)\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return $this->length << 3;\n    }\n\n    /**\n     * Returns the hash length (in bytes)\n     *\n     * @return int\n     */\n    public function getLengthInBytes()\n    {\n        return $this->length;\n    }\n\n    /**\n     * Returns the block length (in bits)\n     *\n     * @return int\n     */\n    public function getBlockLength()\n    {\n        return $this->blockSize;\n    }\n\n    /**\n     * Returns the block length (in bytes)\n     *\n     * @return int\n     */\n    public function getBlockLengthInBytes()\n    {\n        return $this->blockSize >> 3;\n    }\n\n    /**\n     * Pads SHA3 based on the mode\n     *\n     * @param int $padLength\n     * @param int $padType\n     * @return string\n     */\n    private static function sha3_pad($padLength, $padType)\n    {\n        switch ($padType) {\n            case self::PADDING_KECCAK:\n                $temp = chr(0x01) . str_repeat(\"\\0\", $padLength - 1);\n                $temp[$padLength - 1] = $temp[$padLength - 1] | chr(0x80);\n                return $temp;\n            case self::PADDING_SHAKE:\n                $temp = chr(0x1F) . str_repeat(\"\\0\", $padLength - 1);\n                $temp[$padLength - 1] = $temp[$padLength - 1] | chr(0x80);\n                return $temp;\n            //case self::PADDING_SHA3:\n            default:\n                // from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf#page=36\n                return $padLength == 1 ? chr(0x86) : chr(0x06) . str_repeat(\"\\0\", $padLength - 2) . chr(0x80);\n        }\n    }\n\n    /**\n     * Pure-PHP 32-bit implementation of SHA3\n     *\n     * Whereas BigInteger.php's 32-bit engine works on PHP 64-bit this 32-bit implementation\n     * of SHA3 will *not* work on PHP 64-bit. This is because this implementation\n     * employees bitwise NOTs and bitwise left shifts. And the round constants only work\n     * on 32-bit PHP. eg. dechex(-2147483648) returns 80000000 on 32-bit PHP and\n     * FFFFFFFF80000000 on 64-bit PHP. Sure, we could do bitwise ANDs but that would slow\n     * things down.\n     *\n     * SHA512 requires BigInteger to simulate 64-bit unsigned integers because SHA2 employees\n     * addition whereas SHA3 just employees bitwise operators. PHP64 only supports signed\n     * 64-bit integers, which complicates addition, whereas that limitation isn't an issue\n     * for SHA3.\n     *\n     * In https://ws680.nist.gov/publication/get_pdf.cfm?pub_id=919061#page=16 KECCAK[C] is\n     * defined as \"the KECCAK instance with KECCAK-f[1600] as the underlying permutation and\n     * capacity c\". This is relevant because, altho the KECCAK standard defines a mode\n     * (KECCAK-f[800]) designed for 32-bit machines that mode is incompatible with SHA3\n     *\n     * @param string $p\n     * @param int $c\n     * @param int $r\n     * @param int $d\n     * @param int $padType\n     */\n    private static function sha3_32($p, $c, $r, $d, $padType)\n    {\n        $block_size = $r >> 3;\n        $padLength = $block_size - (strlen($p) % $block_size);\n        $num_ints = $block_size >> 2;\n\n        $p .= static::sha3_pad($padLength, $padType);\n\n        $n = strlen($p) / $r; // number of blocks\n\n        $s = [\n            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],\n            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],\n            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],\n            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],\n            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]\n        ];\n\n        $p = str_split($p, $block_size);\n\n        foreach ($p as $pi) {\n            $pi = unpack('V*', $pi);\n            $x = $y = 0;\n            for ($i = 1; $i <= $num_ints; $i += 2) {\n                $s[$x][$y][0] ^= $pi[$i + 1];\n                $s[$x][$y][1] ^= $pi[$i];\n                if (++$y == 5) {\n                    $y = 0;\n                    $x++;\n                }\n            }\n            static::processSHA3Block32($s);\n        }\n\n        $z = '';\n        $i = $j = 0;\n        while (strlen($z) < $d) {\n            $z .= pack('V2', $s[$i][$j][1], $s[$i][$j++][0]);\n            if ($j == 5) {\n                $j = 0;\n                $i++;\n                if ($i == 5) {\n                    $i = 0;\n                    static::processSHA3Block32($s);\n                }\n            }\n        }\n\n        return $z;\n    }\n\n    /**\n     * 32-bit block processing method for SHA3\n     *\n     * @param array $s\n     */\n    private static function processSHA3Block32(&$s)\n    {\n        static $rotationOffsets = [\n            [ 0,  1, 62, 28, 27],\n            [36, 44,  6, 55, 20],\n            [ 3, 10, 43, 25, 39],\n            [41, 45, 15, 21,  8],\n            [18,  2, 61, 56, 14]\n        ];\n\n        // the standards give these constants in hexadecimal notation. it's tempting to want to use\n        // that same notation, here, however, we can't, because 0x80000000, on PHP32, is a positive\n        // float - not the negative int that we need to be in PHP32. so we use -2147483648 instead\n        static $roundConstants = [\n            [0, 1],\n            [0, 32898],\n            [-2147483648, 32906],\n            [-2147483648, -2147450880],\n            [0, 32907],\n            [0, -2147483647],\n            [-2147483648, -2147450751],\n            [-2147483648, 32777],\n            [0, 138],\n            [0, 136],\n            [0, -2147450871],\n            [0, -2147483638],\n            [0, -2147450741],\n            [-2147483648, 139],\n            [-2147483648, 32905],\n            [-2147483648, 32771],\n            [-2147483648, 32770],\n            [-2147483648, 128],\n            [0, 32778],\n            [-2147483648, -2147483638],\n            [-2147483648, -2147450751],\n            [-2147483648, 32896],\n            [0, -2147483647],\n            [-2147483648, -2147450872]\n        ];\n\n        for ($round = 0; $round < 24; $round++) {\n            // theta step\n            $parity = $rotated = [];\n            for ($i = 0; $i < 5; $i++) {\n                $parity[] = [\n                    $s[0][$i][0] ^ $s[1][$i][0] ^ $s[2][$i][0] ^ $s[3][$i][0] ^ $s[4][$i][0],\n                    $s[0][$i][1] ^ $s[1][$i][1] ^ $s[2][$i][1] ^ $s[3][$i][1] ^ $s[4][$i][1]\n                ];\n                $rotated[] = static::rotateLeft32($parity[$i], 1);\n            }\n\n            $temp = [\n                [$parity[4][0] ^ $rotated[1][0], $parity[4][1] ^ $rotated[1][1]],\n                [$parity[0][0] ^ $rotated[2][0], $parity[0][1] ^ $rotated[2][1]],\n                [$parity[1][0] ^ $rotated[3][0], $parity[1][1] ^ $rotated[3][1]],\n                [$parity[2][0] ^ $rotated[4][0], $parity[2][1] ^ $rotated[4][1]],\n                [$parity[3][0] ^ $rotated[0][0], $parity[3][1] ^ $rotated[0][1]]\n            ];\n            for ($i = 0; $i < 5; $i++) {\n                for ($j = 0; $j < 5; $j++) {\n                    $s[$i][$j][0] ^= $temp[$j][0];\n                    $s[$i][$j][1] ^= $temp[$j][1];\n                }\n            }\n\n            $st = $s;\n\n            // rho and pi steps\n            for ($i = 0; $i < 5; $i++) {\n                for ($j = 0; $j < 5; $j++) {\n                    $st[(2 * $i + 3 * $j) % 5][$j] = static::rotateLeft32($s[$j][$i], $rotationOffsets[$j][$i]);\n                }\n            }\n\n            // chi step\n            for ($i = 0; $i < 5; $i++) {\n                $s[$i][0] = [\n                    $st[$i][0][0] ^ (~$st[$i][1][0] & $st[$i][2][0]),\n                    $st[$i][0][1] ^ (~$st[$i][1][1] & $st[$i][2][1])\n                ];\n                $s[$i][1] = [\n                    $st[$i][1][0] ^ (~$st[$i][2][0] & $st[$i][3][0]),\n                    $st[$i][1][1] ^ (~$st[$i][2][1] & $st[$i][3][1])\n                ];\n                $s[$i][2] = [\n                    $st[$i][2][0] ^ (~$st[$i][3][0] & $st[$i][4][0]),\n                    $st[$i][2][1] ^ (~$st[$i][3][1] & $st[$i][4][1])\n                ];\n                $s[$i][3] = [\n                    $st[$i][3][0] ^ (~$st[$i][4][0] & $st[$i][0][0]),\n                    $st[$i][3][1] ^ (~$st[$i][4][1] & $st[$i][0][1])\n                ];\n                $s[$i][4] = [\n                    $st[$i][4][0] ^ (~$st[$i][0][0] & $st[$i][1][0]),\n                    $st[$i][4][1] ^ (~$st[$i][0][1] & $st[$i][1][1])\n                ];\n            }\n\n            // iota step\n            $s[0][0][0] ^= $roundConstants[$round][0];\n            $s[0][0][1] ^= $roundConstants[$round][1];\n        }\n    }\n\n    /**\n     * Rotate 32-bit int\n     *\n     * @param array $x\n     * @param int $shift\n     */\n    private static function rotateLeft32($x, $shift)\n    {\n        if ($shift < 32) {\n            list($hi, $lo) = $x;\n        } else {\n            $shift -= 32;\n            list($lo, $hi) = $x;\n        }\n\n        $mask = -1 ^ (-1 << $shift);\n        return [\n            ($hi << $shift) | (($lo >> (32 - $shift)) & $mask),\n            ($lo << $shift) | (($hi >> (32 - $shift)) & $mask)\n        ];\n    }\n\n    /**\n     * Pure-PHP 64-bit implementation of SHA3\n     *\n     * @param string $p\n     * @param int $c\n     * @param int $r\n     * @param int $d\n     * @param int $padType\n     */\n    private static function sha3_64($p, $c, $r, $d, $padType)\n    {\n        $block_size = $r >> 3;\n        $padLength = $block_size - (strlen($p) % $block_size);\n        $num_ints = $block_size >> 2;\n\n        $p .= static::sha3_pad($padLength, $padType);\n\n        $n = strlen($p) / $r; // number of blocks\n\n        $s = [\n            [0, 0, 0, 0, 0],\n            [0, 0, 0, 0, 0],\n            [0, 0, 0, 0, 0],\n            [0, 0, 0, 0, 0],\n            [0, 0, 0, 0, 0]\n        ];\n\n        $p = str_split($p, $block_size);\n\n        foreach ($p as $pi) {\n            $pi = unpack('P*', $pi);\n            $x = $y = 0;\n            foreach ($pi as $subpi) {\n                $s[$x][$y++] ^= $subpi;\n                if ($y == 5) {\n                    $y = 0;\n                    $x++;\n                }\n            }\n            static::processSHA3Block64($s);\n        }\n\n        $z = '';\n        $i = $j = 0;\n        while (strlen($z) < $d) {\n            $z .= pack('P', $s[$i][$j++]);\n            if ($j == 5) {\n                $j = 0;\n                $i++;\n                if ($i == 5) {\n                    $i = 0;\n                    static::processSHA3Block64($s);\n                }\n            }\n        }\n\n        return $z;\n    }\n\n    /**\n     * 64-bit block processing method for SHA3\n     *\n     * @param array $s\n     */\n    private static function processSHA3Block64(&$s)\n    {\n        static $rotationOffsets = [\n            [ 0,  1, 62, 28, 27],\n            [36, 44,  6, 55, 20],\n            [ 3, 10, 43, 25, 39],\n            [41, 45, 15, 21,  8],\n            [18,  2, 61, 56, 14]\n        ];\n\n        static $roundConstants = [\n            1,\n            32898,\n            -9223372036854742902,\n            -9223372034707259392,\n            32907,\n            2147483649,\n            -9223372034707259263,\n            -9223372036854743031,\n            138,\n            136,\n            2147516425,\n            2147483658,\n            2147516555,\n            -9223372036854775669,\n            -9223372036854742903,\n            -9223372036854743037,\n            -9223372036854743038,\n            -9223372036854775680,\n            32778,\n            -9223372034707292150,\n            -9223372034707259263,\n            -9223372036854742912,\n            2147483649,\n            -9223372034707259384\n        ];\n\n        for ($round = 0; $round < 24; $round++) {\n            // theta step\n            $parity = [];\n            for ($i = 0; $i < 5; $i++) {\n                $parity[] = $s[0][$i] ^ $s[1][$i] ^ $s[2][$i] ^ $s[3][$i] ^ $s[4][$i];\n            }\n            $temp = [\n                $parity[4] ^ static::rotateLeft64($parity[1], 1),\n                $parity[0] ^ static::rotateLeft64($parity[2], 1),\n                $parity[1] ^ static::rotateLeft64($parity[3], 1),\n                $parity[2] ^ static::rotateLeft64($parity[4], 1),\n                $parity[3] ^ static::rotateLeft64($parity[0], 1)\n            ];\n            for ($i = 0; $i < 5; $i++) {\n                for ($j = 0; $j < 5; $j++) {\n                    $s[$i][$j] ^= $temp[$j];\n                }\n            }\n\n            $st = $s;\n\n            // rho and pi steps\n            for ($i = 0; $i < 5; $i++) {\n                for ($j = 0; $j < 5; $j++) {\n                    $st[(2 * $i + 3 * $j) % 5][$j] = static::rotateLeft64($s[$j][$i], $rotationOffsets[$j][$i]);\n                }\n            }\n\n            // chi step\n            for ($i = 0; $i < 5; $i++) {\n                $s[$i] = [\n                    $st[$i][0] ^ (~$st[$i][1] & $st[$i][2]),\n                    $st[$i][1] ^ (~$st[$i][2] & $st[$i][3]),\n                    $st[$i][2] ^ (~$st[$i][3] & $st[$i][4]),\n                    $st[$i][3] ^ (~$st[$i][4] & $st[$i][0]),\n                    $st[$i][4] ^ (~$st[$i][0] & $st[$i][1])\n                ];\n            }\n\n            // iota step\n            $s[0][0] ^= $roundConstants[$round];\n        }\n    }\n\n    /**\n     * Left rotate 64-bit int\n     *\n     * @param int $x\n     * @param int $shift\n     */\n    private static function rotateLeft64($x, $shift)\n    {\n        $mask = -1 ^ (-1 << $shift);\n        return ($x << $shift) | (($x >> (64 - $shift)) & $mask);\n    }\n\n    /**\n     * Right rotate 64-bit int\n     *\n     * @param int $x\n     * @param int $shift\n     */\n    private static function rotateRight64($x, $shift)\n    {\n        $mask = -1 ^ (-1 << (64 - $shift));\n        return (($x >> $shift) & $mask) | ($x << (64 - $shift));\n    }\n\n    /**\n     * Pure-PHP implementation of SHA512\n     *\n     * @param string $m\n     * @param array $hash\n     * @return string\n     */\n    private static function sha512($m, $hash)\n    {\n        static $k;\n\n        if (!isset($k)) {\n            // Initialize table of round constants\n            // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)\n            $k = [\n                '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',\n                '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',\n                'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',\n                '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',\n                'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',\n                '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',\n                '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',\n                'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',\n                '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',\n                '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',\n                'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',\n                'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',\n                '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',\n                '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',\n                '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',\n                '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',\n                'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',\n                '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',\n                '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',\n                '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'\n            ];\n\n            for ($i = 0; $i < 80; $i++) {\n                $k[$i] = new BigInteger($k[$i], 16);\n            }\n        }\n\n        // Pre-processing\n        $length = strlen($m);\n        // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128\n        $m .= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));\n        $m[$length] = chr(0x80);\n        // we don't support hashing strings 512MB long\n        $m .= pack('N4', 0, 0, 0, $length << 3);\n\n        // Process the message in successive 1024-bit chunks\n        $chunks = str_split($m, 128);\n        foreach ($chunks as $chunk) {\n            $w = [];\n            for ($i = 0; $i < 16; $i++) {\n                $temp = new BigInteger(Strings::shift($chunk, 8), 256);\n                $temp->setPrecision(64);\n                $w[] = $temp;\n            }\n\n            // Extend the sixteen 32-bit words into eighty 32-bit words\n            for ($i = 16; $i < 80; $i++) {\n                $temp = [\n                          $w[$i - 15]->bitwise_rightRotate(1),\n                          $w[$i - 15]->bitwise_rightRotate(8),\n                          $w[$i - 15]->bitwise_rightShift(7)\n                ];\n                $s0 = $temp[0]->bitwise_xor($temp[1]);\n                $s0 = $s0->bitwise_xor($temp[2]);\n                $temp = [\n                          $w[$i - 2]->bitwise_rightRotate(19),\n                          $w[$i - 2]->bitwise_rightRotate(61),\n                          $w[$i - 2]->bitwise_rightShift(6)\n                ];\n                $s1 = $temp[0]->bitwise_xor($temp[1]);\n                $s1 = $s1->bitwise_xor($temp[2]);\n                $w[$i] = clone $w[$i - 16];\n                $w[$i] = $w[$i]->add($s0);\n                $w[$i] = $w[$i]->add($w[$i - 7]);\n                $w[$i] = $w[$i]->add($s1);\n            }\n\n            // Initialize hash value for this chunk\n            $a = clone $hash[0];\n            $b = clone $hash[1];\n            $c = clone $hash[2];\n            $d = clone $hash[3];\n            $e = clone $hash[4];\n            $f = clone $hash[5];\n            $g = clone $hash[6];\n            $h = clone $hash[7];\n\n            // Main loop\n            for ($i = 0; $i < 80; $i++) {\n                $temp = [\n                    $a->bitwise_rightRotate(28),\n                    $a->bitwise_rightRotate(34),\n                    $a->bitwise_rightRotate(39)\n                ];\n                $s0 = $temp[0]->bitwise_xor($temp[1]);\n                $s0 = $s0->bitwise_xor($temp[2]);\n                $temp = [\n                    $a->bitwise_and($b),\n                    $a->bitwise_and($c),\n                    $b->bitwise_and($c)\n                ];\n                $maj = $temp[0]->bitwise_xor($temp[1]);\n                $maj = $maj->bitwise_xor($temp[2]);\n                $t2 = $s0->add($maj);\n\n                $temp = [\n                    $e->bitwise_rightRotate(14),\n                    $e->bitwise_rightRotate(18),\n                    $e->bitwise_rightRotate(41)\n                ];\n                $s1 = $temp[0]->bitwise_xor($temp[1]);\n                $s1 = $s1->bitwise_xor($temp[2]);\n                $temp = [\n                    $e->bitwise_and($f),\n                    $g->bitwise_and($e->bitwise_not())\n                ];\n                $ch = $temp[0]->bitwise_xor($temp[1]);\n                $t1 = $h->add($s1);\n                $t1 = $t1->add($ch);\n                $t1 = $t1->add($k[$i]);\n                $t1 = $t1->add($w[$i]);\n\n                $h = clone $g;\n                $g = clone $f;\n                $f = clone $e;\n                $e = $d->add($t1);\n                $d = clone $c;\n                $c = clone $b;\n                $b = clone $a;\n                $a = $t1->add($t2);\n            }\n\n            // Add this chunk's hash to result so far\n            $hash = [\n                $hash[0]->add($a),\n                $hash[1]->add($b),\n                $hash[2]->add($c),\n                $hash[3]->add($d),\n                $hash[4]->add($e),\n                $hash[5]->add($f),\n                $hash[6]->add($g),\n                $hash[7]->add($h)\n            ];\n        }\n\n        // Produce the final hash value (big-endian)\n        // (\\phpseclib3\\Crypt\\Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)\n        $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .\n                $hash[4]->toBytes() . $hash[5]->toBytes() . $hash[6]->toBytes() . $hash[7]->toBytes();\n\n        return $temp;\n    }\n\n    /**\n     * Pure-PHP implementation of SHA512\n     *\n     * @param string $m\n     * @param array $hash\n     * @return string\n     */\n    private static function sha512_64($m, $hash)\n    {\n        static $k;\n\n        if (!isset($k)) {\n            // Initialize table of round constants\n            // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)\n            $k = [\n                '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',\n                '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',\n                'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',\n                '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',\n                'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',\n                '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',\n                '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',\n                'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',\n                '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',\n                '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',\n                'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',\n                'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',\n                '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',\n                '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',\n                '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',\n                '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',\n                'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',\n                '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',\n                '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',\n                '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'\n            ];\n\n            for ($i = 0; $i < 80; $i++) {\n                list(, $k[$i]) = unpack('J', pack('H*', $k[$i]));\n            }\n        }\n\n        // Pre-processing\n        $length = strlen($m);\n        // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128\n        $m .= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));\n        $m[$length] = chr(0x80);\n        // we don't support hashing strings 512MB long\n        $m .= pack('N4', 0, 0, 0, $length << 3);\n\n        // Process the message in successive 1024-bit chunks\n        $chunks = str_split($m, 128);\n        foreach ($chunks as $chunk) {\n            $w = [];\n            for ($i = 0; $i < 16; $i++) {\n                list(, $w[]) = unpack('J', Strings::shift($chunk, 8));\n            }\n\n            // Extend the sixteen 32-bit words into eighty 32-bit words\n            for ($i = 16; $i < 80; $i++) {\n                $temp = [\n                    self::rotateRight64($w[$i - 15], 1),\n                    self::rotateRight64($w[$i - 15], 8),\n                    ($w[$i - 15] >> 7) & 0x01FFFFFFFFFFFFFF,\n                ];\n                $s0 = $temp[0] ^ $temp[1] ^ $temp[2];\n                $temp = [\n                    self::rotateRight64($w[$i - 2], 19),\n                    self::rotateRight64($w[$i - 2], 61),\n                    ($w[$i - 2] >> 6) & 0x03FFFFFFFFFFFFFF,\n                ];\n                $s1 = $temp[0] ^ $temp[1] ^ $temp[2];\n\n                $w[$i] = $w[$i - 16];\n                $w[$i] = self::add64($w[$i], $s0);\n                $w[$i] = self::add64($w[$i], $w[$i - 7]);\n                $w[$i] = self::add64($w[$i], $s1);\n            }\n\n            // Initialize hash value for this chunk\n            list($a, $b, $c, $d, $e, $f, $g, $h) = $hash;\n\n            // Main loop\n            for ($i = 0; $i < 80; $i++) {\n                $temp = [\n                    self::rotateRight64($a, 28),\n                    self::rotateRight64($a, 34),\n                    self::rotateRight64($a, 39),\n                ];\n                $s0 = $temp[0] ^ $temp[1] ^ $temp[2];\n                $temp = [$a & $b, $a & $c, $b & $c];\n                $maj = $temp[0] ^ $temp[1] ^ $temp[2];\n                $t2 = self::add64($s0, $maj);\n\n                $temp = [\n                    self::rotateRight64($e, 14),\n                    self::rotateRight64($e, 18),\n                    self::rotateRight64($e, 41),\n                ];\n                $s1 = $temp[0] ^ $temp[1] ^ $temp[2];\n                $ch = ($e & $f) ^ ($g & ~$e);\n                $t1 = self::add64($h, $s1);\n                $t1 = self::add64($t1, $ch);\n                $t1 = self::add64($t1, $k[$i]);\n                $t1 = self::add64($t1, $w[$i]);\n\n                $h = $g;\n                $g = $f;\n                $f = $e;\n                $e = self::add64($d, $t1);\n                $d = $c;\n                $c = $b;\n                $b = $a;\n                $a = self::add64($t1, $t2);\n            }\n\n            // Add this chunk's hash to result so far\n            $hash = [\n                self::add64($hash[0], $a),\n                self::add64($hash[1], $b),\n                self::add64($hash[2], $c),\n                self::add64($hash[3], $d),\n                self::add64($hash[4], $e),\n                self::add64($hash[5], $f),\n                self::add64($hash[6], $g),\n                self::add64($hash[7], $h),\n            ];\n        }\n\n        // Produce the final hash value (big-endian)\n        // (\\phpseclib3\\Crypt\\Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)\n        return pack('J*', ...$hash);\n    }\n\n    /**\n     *  OMAC Padding\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc4493.html#section-2.4\n     */\n    private static function OMAC_padding($m, $length)\n    {\n        $count = $length - strlen($m) - 1;\n        return \"$m\\x80\" . str_repeat(\"\\0\", $count);\n    }\n\n    /**\n     *  __toString() magic method\n     */\n    public function __toString()\n    {\n        return $this->getHash();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.php",
    "content": "<?php\n\n/**\n * PublicKeyLoader\n *\n * Returns a PublicKey or PrivateKey object.\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\AsymmetricKey;\nuse phpseclib3\\Crypt\\Common\\PrivateKey;\nuse phpseclib3\\Crypt\\Common\\PublicKey;\nuse phpseclib3\\Exception\\NoKeyLoadedException;\nuse phpseclib3\\File\\X509;\n\n/**\n * PublicKeyLoader\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PublicKeyLoader\n{\n    /**\n     * Loads a public or private key\n     *\n     * @return AsymmetricKey\n     * @param string|array $key\n     * @param string $password optional\n     * @throws NoKeyLoadedException if key is not valid\n     */\n    public static function load($key, $password = false)\n    {\n        try {\n            return EC::load($key, $password);\n        } catch (NoKeyLoadedException $e) {\n        }\n\n        try {\n            return RSA::load($key, $password);\n        } catch (NoKeyLoadedException $e) {\n        }\n\n        try {\n            return DSA::load($key, $password);\n        } catch (NoKeyLoadedException $e) {\n        }\n\n        try {\n            $x509 = new X509();\n            $x509->loadX509($key);\n            $key = $x509->getPublicKey();\n            if ($key) {\n                return $key;\n            }\n        } catch (\\Exception $e) {\n        }\n\n        throw new NoKeyLoadedException('Unable to read key');\n    }\n\n    /**\n     * Loads a private key\n     *\n     * @return PrivateKey\n     * @param string|array $key\n     * @param string $password optional\n     */\n    public static function loadPrivateKey($key, $password = false)\n    {\n        $key = self::load($key, $password);\n        if (!$key instanceof PrivateKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a private key');\n        }\n        return $key;\n    }\n\n    /**\n     * Loads a public key\n     *\n     * @return PublicKey\n     * @param string|array $key\n     */\n    public static function loadPublicKey($key)\n    {\n        $key = self::load($key);\n        if (!$key instanceof PublicKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a public key');\n        }\n        return $key;\n    }\n\n    /**\n     * Loads parameters\n     *\n     * @return AsymmetricKey\n     * @param string|array $key\n     */\n    public static function loadParameters($key)\n    {\n        $key = self::load($key);\n        if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {\n            throw new NoKeyLoadedException('The key that was loaded was not a parameter');\n        }\n        return $key;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of RC2.\n *\n * Uses mcrypt, if available, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * Useful resources are as follows:\n *\n *  - {@link http://tools.ietf.org/html/rfc2268}\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $rc2 = new \\phpseclib3\\Crypt\\RC2('ctr');\n *\n *    $rc2->setKey('abcdefgh');\n *\n *    $plaintext = str_repeat('a', 1024);\n *\n *    echo $rc2->decrypt($rc2->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author   Patrick Monnerat <pm@datasphere.ch>\n * @license  http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link     http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\BlockCipher;\nuse phpseclib3\\Exception\\BadModeException;\n\n/**\n * Pure-PHP implementation of RC2.\n *\n */\nclass RC2 extends BlockCipher\n{\n    /**\n     * Block Length of the cipher\n     *\n     * @see Common\\SymmetricKey::block_size\n     * @var int\n     */\n    protected $block_size = 8;\n\n    /**\n     * The Key\n     *\n     * @see Common\\SymmetricKey::key\n     * @see self::setKey()\n     * @var string\n     */\n    protected $key;\n\n    /**\n     * The Original (unpadded) Key\n     *\n     * @see Common\\SymmetricKey::key\n     * @see self::setKey()\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @var string\n     */\n    private $orig_key;\n\n    /**\n     * Key Length (in bytes)\n     *\n     * @see \\phpseclib3\\Crypt\\RC2::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 16; // = 128 bits\n\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'rc2';\n\n    /**\n     * Optimizing value while CFB-encrypting\n     *\n     * @see Common\\SymmetricKey::cfb_init_len\n     * @var int\n     */\n    protected $cfb_init_len = 500;\n\n    /**\n     * The key length in bits.\n     *\n     * {@internal Should be in range [1..1024].}\n     *\n     * {@internal Changing this value after setting the key has no effect.}\n     *\n     * @see self::setKeyLength()\n     * @see self::setKey()\n     * @var int\n     */\n    private $default_key_length = 1024;\n\n    /**\n     * The key length in bits.\n     *\n     * {@internal Should be in range [1..1024].}\n     *\n     * @see self::isValidEnine()\n     * @see self::setKey()\n     * @var int\n     */\n    private $current_key_length;\n\n    /**\n     * The Key Schedule\n     *\n     * @see self::setupKey()\n     * @var array\n     */\n    private $keys;\n\n    /**\n     * Key expansion randomization table.\n     * Twice the same 256-value sequence to save a modulus in key expansion.\n     *\n     * @see self::setKey()\n     * @var array\n     */\n    private static $pitable = [\n        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,\n        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,\n        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,\n        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,\n        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,\n        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,\n        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,\n        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,\n        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,\n        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,\n        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,\n        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,\n        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,\n        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,\n        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,\n        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,\n        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,\n        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,\n        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,\n        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,\n        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,\n        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,\n        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,\n        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,\n        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,\n        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,\n        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,\n        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,\n        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,\n        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,\n        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,\n        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD,\n        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,\n        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,\n        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,\n        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,\n        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,\n        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,\n        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,\n        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,\n        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,\n        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,\n        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,\n        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,\n        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,\n        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,\n        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,\n        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,\n        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,\n        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,\n        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,\n        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,\n        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,\n        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,\n        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,\n        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,\n        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,\n        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,\n        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,\n        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,\n        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,\n        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,\n        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,\n        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD\n    ];\n\n    /**\n     * Inverse key expansion randomization table.\n     *\n     * @see self::setKey()\n     * @var array\n     */\n    private static $invpitable = [\n        0xD1, 0xDA, 0xB9, 0x6F, 0x9C, 0xC8, 0x78, 0x66,\n        0x80, 0x2C, 0xF8, 0x37, 0xEA, 0xE0, 0x62, 0xA4,\n        0xCB, 0x71, 0x50, 0x27, 0x4B, 0x95, 0xD9, 0x20,\n        0x9D, 0x04, 0x91, 0xE3, 0x47, 0x6A, 0x7E, 0x53,\n        0xFA, 0x3A, 0x3B, 0xB4, 0xA8, 0xBC, 0x5F, 0x68,\n        0x08, 0xCA, 0x8F, 0x14, 0xD7, 0xC0, 0xEF, 0x7B,\n        0x5B, 0xBF, 0x2F, 0xE5, 0xE2, 0x8C, 0xBA, 0x12,\n        0xE1, 0xAF, 0xB2, 0x54, 0x5D, 0x59, 0x76, 0xDB,\n        0x32, 0xA2, 0x58, 0x6E, 0x1C, 0x29, 0x64, 0xF3,\n        0xE9, 0x96, 0x0C, 0x98, 0x19, 0x8D, 0x3E, 0x26,\n        0xAB, 0xA5, 0x85, 0x16, 0x40, 0xBD, 0x49, 0x67,\n        0xDC, 0x22, 0x94, 0xBB, 0x3C, 0xC1, 0x9B, 0xEB,\n        0x45, 0x28, 0x18, 0xD8, 0x1A, 0x42, 0x7D, 0xCC,\n        0xFB, 0x65, 0x8E, 0x3D, 0xCD, 0x2A, 0xA3, 0x60,\n        0xAE, 0x93, 0x8A, 0x48, 0x97, 0x51, 0x15, 0xF7,\n        0x01, 0x0B, 0xB7, 0x36, 0xB1, 0x2E, 0x11, 0xFD,\n        0x84, 0x2D, 0x3F, 0x13, 0x88, 0xB3, 0x34, 0x24,\n        0x1B, 0xDE, 0xC5, 0x1D, 0x4D, 0x2B, 0x17, 0x31,\n        0x74, 0xA9, 0xC6, 0x43, 0x6D, 0x39, 0x90, 0xBE,\n        0xC3, 0xB0, 0x21, 0x6B, 0xF6, 0x0F, 0xD5, 0x99,\n        0x0D, 0xAC, 0x1F, 0x5C, 0x9E, 0xF5, 0xF9, 0x4C,\n        0xD6, 0xDF, 0x89, 0xE4, 0x8B, 0xFF, 0xC7, 0xAA,\n        0xE7, 0xED, 0x46, 0x25, 0xB6, 0x06, 0x5E, 0x35,\n        0xB5, 0xEC, 0xCE, 0xE8, 0x6C, 0x30, 0x55, 0x61,\n        0x4A, 0xFE, 0xA0, 0x79, 0x03, 0xF0, 0x10, 0x72,\n        0x7C, 0xCF, 0x52, 0xA6, 0xA7, 0xEE, 0x44, 0xD3,\n        0x9A, 0x57, 0x92, 0xD0, 0x5A, 0x7A, 0x41, 0x7F,\n        0x0E, 0x00, 0x63, 0xF2, 0x4F, 0x05, 0x83, 0xC9,\n        0xA1, 0xD4, 0xDD, 0xC4, 0x56, 0xF4, 0xD2, 0x77,\n        0x81, 0x09, 0x82, 0x33, 0x9F, 0x07, 0x86, 0x75,\n        0x38, 0x4E, 0x69, 0xF1, 0xAD, 0x23, 0x73, 0x87,\n        0x70, 0x02, 0xC2, 0x1E, 0xB8, 0x0A, 0xFC, 0xE6\n    ];\n\n    /**\n     * Default Constructor.\n     *\n     * @param string $mode\n     * @throws \\InvalidArgumentException if an invalid / unsupported mode is provided\n     */\n    public function __construct($mode)\n    {\n        parent::__construct($mode);\n\n        if ($this->mode == self::MODE_STREAM) {\n            throw new BadModeException('Block ciphers cannot be ran in stream mode');\n        }\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see Common\\SymmetricKey::__construct()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        switch ($engine) {\n            case self::ENGINE_OPENSSL:\n                if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) {\n                    return false;\n                }\n                // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1\n                // \"Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider\"\n                // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not\n                if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\\d+\\.\\d+\\.\\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {\n                    return false;\n                }\n                $this->cipher_name_openssl_ecb = 'rc2-ecb';\n                $this->cipher_name_openssl = 'rc2-' . $this->openssl_translate_mode();\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Sets the key length.\n     *\n     * Valid key lengths are 8 to 1024.\n     * Calling this function after setting the key has no effect until the next\n     *  \\phpseclib3\\Crypt\\RC2::setKey() call.\n     *\n     * @param int $length in bits\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKeyLength($length)\n    {\n        if ($length < 8 || $length > 1024) {\n            throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys between 1 and 1024 bits, inclusive, are supported');\n        }\n\n        $this->default_key_length = $this->current_key_length = $length;\n        $this->explicit_key_length = $length >> 3;\n    }\n\n    /**\n     * Returns the current key length\n     *\n     * @return int\n     */\n    public function getKeyLength()\n    {\n        return $this->current_key_length;\n    }\n\n    /**\n     * Sets the key.\n     *\n     * Keys can be of any length. RC2, itself, uses 8 to 1024 bit keys (eg.\n     * strlen($key) <= 128), however, we only use the first 128 bytes if $key\n     * has more then 128 bytes in it, and set $key to a single null byte if\n     * it is empty.\n     *\n     * @see Common\\SymmetricKey::setKey()\n     * @param string $key\n     * @param int|boolean $t1 optional Effective key length in bits.\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKey($key, $t1 = false)\n    {\n        $this->orig_key = $key;\n\n        if ($t1 === false) {\n            $t1 = $this->default_key_length;\n        }\n\n        if ($t1 < 1 || $t1 > 1024) {\n            throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys between 1 and 1024 bits, inclusive, are supported');\n        }\n\n        $this->current_key_length = $t1;\n        if (strlen($key) < 1 || strlen($key) > 128) {\n            throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes between 8 and 1024 bits, inclusive, are supported');\n        }\n\n        $t = strlen($key);\n\n        // The mcrypt RC2 implementation only supports effective key length\n        // of 1024 bits. It is however possible to handle effective key\n        // lengths in range 1..1024 by expanding the key and applying\n        // inverse pitable mapping to the first byte before submitting it\n        // to mcrypt.\n\n        // Key expansion.\n        $l = array_values(unpack('C*', $key));\n        $t8 = ($t1 + 7) >> 3;\n        $tm = 0xFF >> (8 * $t8 - $t1);\n\n        // Expand key.\n        $pitable = self::$pitable;\n        for ($i = $t; $i < 128; $i++) {\n            $l[$i] = $pitable[$l[$i - 1] + $l[$i - $t]];\n        }\n        $i = 128 - $t8;\n        $l[$i] = $pitable[$l[$i] & $tm];\n        while ($i--) {\n            $l[$i] = $pitable[$l[$i + 1] ^ $l[$i + $t8]];\n        }\n\n        // Prepare the key for mcrypt.\n        $l[0] = self::$invpitable[$l[0]];\n        array_unshift($l, 'C*');\n\n        $this->key = pack(...$l);\n        $this->key_length = strlen($this->key);\n        $this->changed = $this->nonIVChanged = true;\n        $this->setEngine();\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * Mostly a wrapper for \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt, with some additional OpenSSL handling code\n     *\n     * @see self::decrypt()\n     * @param string $plaintext\n     * @return string $ciphertext\n     */\n    public function encrypt($plaintext)\n    {\n        if ($this->engine == self::ENGINE_OPENSSL) {\n            $temp = $this->key;\n            $this->key = $this->orig_key;\n            $result = parent::encrypt($plaintext);\n            $this->key = $temp;\n            return $result;\n        }\n\n        return parent::encrypt($plaintext);\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * Mostly a wrapper for \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt, with some additional OpenSSL handling code\n     *\n     * @see self::encrypt()\n     * @param string $ciphertext\n     * @return string $plaintext\n     */\n    public function decrypt($ciphertext)\n    {\n        if ($this->engine == self::ENGINE_OPENSSL) {\n            $temp = $this->key;\n            $this->key = $this->orig_key;\n            $result = parent::decrypt($ciphertext);\n            $this->key = $temp;\n            return $result;\n        }\n\n        return parent::decrypt($ciphertext);\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @see Common\\SymmetricKey::encryptBlock()\n     * @see Common\\SymmetricKey::encrypt()\n     * @param string $in\n     * @return string\n     */\n    protected function encryptBlock($in)\n    {\n        list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));\n        $keys = $this->keys;\n        $limit = 20;\n        $actions = [$limit => 44, 44 => 64];\n        $j = 0;\n\n        for (;;) {\n            // Mixing round.\n            $r0 = (($r0 + $keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;\n            $r0 |= $r0 >> 16;\n            $r1 = (($r1 + $keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;\n            $r1 |= $r1 >> 16;\n            $r2 = (($r2 + $keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;\n            $r2 |= $r2 >> 16;\n            $r3 = (($r3 + $keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;\n            $r3 |= $r3 >> 16;\n\n            if ($j === $limit) {\n                if ($limit === 64) {\n                    break;\n                }\n\n                // Mashing round.\n                $r0 += $keys[$r3 & 0x3F];\n                $r1 += $keys[$r0 & 0x3F];\n                $r2 += $keys[$r1 & 0x3F];\n                $r3 += $keys[$r2 & 0x3F];\n                $limit = $actions[$limit];\n            }\n        }\n\n        return pack('vvvv', $r0, $r1, $r2, $r3);\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @see Common\\SymmetricKey::decryptBlock()\n     * @see Common\\SymmetricKey::decrypt()\n     * @param string $in\n     * @return string\n     */\n    protected function decryptBlock($in)\n    {\n        list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));\n        $keys = $this->keys;\n        $limit = 44;\n        $actions = [$limit => 20, 20 => 0];\n        $j = 64;\n\n        for (;;) {\n            // R-mixing round.\n            $r3 = ($r3 | ($r3 << 16)) >> 5;\n            $r3 = ($r3 - $keys[--$j] - ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;\n            $r2 = ($r2 | ($r2 << 16)) >> 3;\n            $r2 = ($r2 - $keys[--$j] - ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;\n            $r1 = ($r1 | ($r1 << 16)) >> 2;\n            $r1 = ($r1 - $keys[--$j] - ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;\n            $r0 = ($r0 | ($r0 << 16)) >> 1;\n            $r0 = ($r0 - $keys[--$j] - ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;\n\n            if ($j === $limit) {\n                if ($limit === 0) {\n                    break;\n                }\n\n                // R-mashing round.\n                $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;\n                $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;\n                $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;\n                $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;\n                $limit = $actions[$limit];\n            }\n        }\n\n        return pack('vvvv', $r0, $r1, $r2, $r3);\n    }\n\n    /**\n     * Creates the key schedule\n     *\n     * @see Common\\SymmetricKey::setupKey()\n     */\n    protected function setupKey()\n    {\n        if (!isset($this->key)) {\n            $this->setKey('');\n        }\n\n        // Key has already been expanded in \\phpseclib3\\Crypt\\RC2::setKey():\n        // Only the first value must be altered.\n        $l = unpack('Ca/Cb/v*', $this->key);\n        array_unshift($l, self::$pitable[$l['a']] | ($l['b'] << 8));\n        unset($l['a']);\n        unset($l['b']);\n        $this->keys = $l;\n    }\n\n    /**\n     * Setup the performance-optimized function for de/encrypt()\n     *\n     * @see Common\\SymmetricKey::setupInlineCrypt()\n     */\n    protected function setupInlineCrypt()\n    {\n        // Init code for both, encrypt and decrypt.\n        $init_crypt = '$keys = $this->keys;';\n\n        $keys = $this->keys;\n\n        // $in is the current 8 bytes block which has to be en/decrypt\n        $encrypt_block = $decrypt_block = '\n            $in = unpack(\"v4\", $in);\n            $r0 = $in[1];\n            $r1 = $in[2];\n            $r2 = $in[3];\n            $r3 = $in[4];\n        ';\n\n        // Create code for encryption.\n        $limit = 20;\n        $actions = [$limit => 44, 44 => 64];\n        $j = 0;\n\n        for (;;) {\n            // Mixing round.\n            $encrypt_block .= '\n                $r0 = (($r0 + ' . $keys[$j++] . ' +\n                       ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;\n                $r0 |= $r0 >> 16;\n                $r1 = (($r1 + ' . $keys[$j++] . ' +\n                       ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;\n                $r1 |= $r1 >> 16;\n                $r2 = (($r2 + ' . $keys[$j++] . ' +\n                       ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;\n                $r2 |= $r2 >> 16;\n                $r3 = (($r3 + ' . $keys[$j++] . ' +\n                       ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;\n                $r3 |= $r3 >> 16;';\n\n            if ($j === $limit) {\n                if ($limit === 64) {\n                    break;\n                }\n\n                // Mashing round.\n                $encrypt_block .= '\n                    $r0 += $keys[$r3 & 0x3F];\n                    $r1 += $keys[$r0 & 0x3F];\n                    $r2 += $keys[$r1 & 0x3F];\n                    $r3 += $keys[$r2 & 0x3F];';\n                $limit = $actions[$limit];\n            }\n        }\n\n        $encrypt_block .= '$in = pack(\"v4\", $r0, $r1, $r2, $r3);';\n\n        // Create code for decryption.\n        $limit = 44;\n        $actions = [$limit => 20, 20 => 0];\n        $j = 64;\n\n        for (;;) {\n            // R-mixing round.\n            $decrypt_block .= '\n                $r3 = ($r3 | ($r3 << 16)) >> 5;\n                $r3 = ($r3 - ' . $keys[--$j] . ' -\n                       ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;\n                $r2 = ($r2 | ($r2 << 16)) >> 3;\n                $r2 = ($r2 - ' . $keys[--$j] . ' -\n                       ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;\n                $r1 = ($r1 | ($r1 << 16)) >> 2;\n                $r1 = ($r1 - ' . $keys[--$j] . ' -\n                       ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;\n                $r0 = ($r0 | ($r0 << 16)) >> 1;\n                $r0 = ($r0 - ' . $keys[--$j] . ' -\n                       ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;';\n\n            if ($j === $limit) {\n                if ($limit === 0) {\n                    break;\n                }\n\n                // R-mashing round.\n                $decrypt_block .= '\n                    $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;\n                    $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;\n                    $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;\n                    $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;';\n                $limit = $actions[$limit];\n            }\n        }\n\n        $decrypt_block .= '$in = pack(\"v4\", $r0, $r1, $r2, $r3);';\n\n        // Creates the inline-crypt function\n        $this->inline_crypt = $this->createInlineCryptFunction(\n            [\n               'init_crypt'    => $init_crypt,\n               'encrypt_block' => $encrypt_block,\n               'decrypt_block' => $decrypt_block\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of RC4.\n *\n * Uses mcrypt, if available, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * Useful resources are as follows:\n *\n *  - {@link http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt ARCFOUR Algorithm}\n *  - {@link http://en.wikipedia.org/wiki/RC4 - Wikipedia: RC4}\n *\n * RC4 is also known as ARCFOUR or ARC4.  The reason is elaborated upon at Wikipedia.  This class is named RC4 and not\n * ARCFOUR or ARC4 because RC4 is how it is referred to in the SSH1 specification.\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $rc4 = new \\phpseclib3\\Crypt\\RC4();\n *\n *    $rc4->setKey('abcdefgh');\n *\n *    $size = 10 * 1024;\n *    $plaintext = '';\n *    for ($i = 0; $i < $size; $i++) {\n *        $plaintext.= 'a';\n *    }\n *\n *    echo $rc4->decrypt($rc4->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\StreamCipher;\n\n/**\n * Pure-PHP implementation of RC4.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass RC4 extends StreamCipher\n{\n    /**\n     * @see \\phpseclib3\\Crypt\\RC4::_crypt()\n     */\n    const ENCRYPT = 0;\n\n    /**\n     * @see \\phpseclib3\\Crypt\\RC4::_crypt()\n     */\n    const DECRYPT = 1;\n\n    /**\n     * Key Length (in bytes)\n     *\n     * @see \\phpseclib3\\Crypt\\RC4::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 128; // = 1024 bits\n\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'arcfour';\n\n    /**\n     * The Key\n     *\n     * @see self::setKey()\n     * @var string\n     */\n    protected $key;\n\n    /**\n     * The Key Stream for decryption and encryption\n     *\n     * @see self::setKey()\n     * @var array\n     */\n    private $stream;\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see Common\\SymmetricKey::__construct()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        if ($engine == self::ENGINE_OPENSSL) {\n            if ($this->continuousBuffer) {\n                return false;\n            }\n            // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1\n            // \"Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider\"\n            // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not\n            if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\\d+\\.\\d+\\.\\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {\n                return false;\n            }\n            $this->cipher_name_openssl = 'rc4-40';\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Sets the key length\n     *\n     * Keys can be between 1 and 256 bytes long.\n     *\n     * @param int $length\n     * @throws \\LengthException if the key length is invalid\n     */\n    public function setKeyLength($length)\n    {\n        if ($length < 8 || $length > 2048) {\n            throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys between 1 and 256 bytes are supported');\n        }\n\n        $this->key_length = $length >> 3;\n\n        parent::setKeyLength($length);\n    }\n\n    /**\n     * Sets the key length\n     *\n     * Keys can be between 1 and 256 bytes long.\n     *\n     * @param string $key\n     */\n    public function setKey($key)\n    {\n        $length = strlen($key);\n        if ($length < 1 || $length > 256) {\n            throw new \\LengthException('Key size of ' . $length . ' bytes is not supported by RC4. Keys must be between 1 and 256 bytes long');\n        }\n\n        parent::setKey($key);\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * @see Common\\SymmetricKey::decrypt()\n     * @see self::crypt()\n     * @param string $plaintext\n     * @return string $ciphertext\n     */\n    public function encrypt($plaintext)\n    {\n        if ($this->engine != self::ENGINE_INTERNAL) {\n            return parent::encrypt($plaintext);\n        }\n        return $this->crypt($plaintext, self::ENCRYPT);\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).\n     * At least if the continuous buffer is disabled.\n     *\n     * @see Common\\SymmetricKey::encrypt()\n     * @see self::crypt()\n     * @param string $ciphertext\n     * @return string $plaintext\n     */\n    public function decrypt($ciphertext)\n    {\n        if ($this->engine != self::ENGINE_INTERNAL) {\n            return parent::decrypt($ciphertext);\n        }\n        return $this->crypt($ciphertext, self::DECRYPT);\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @param string $in\n     */\n    protected function encryptBlock($in)\n    {\n        // RC4 does not utilize this method\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @param string $in\n     */\n    protected function decryptBlock($in)\n    {\n        // RC4 does not utilize this method\n    }\n\n    /**\n     * Setup the key (expansion)\n     *\n     * @see Common\\SymmetricKey::_setupKey()\n     */\n    protected function setupKey()\n    {\n        $key = $this->key;\n        $keyLength = strlen($key);\n        $keyStream = range(0, 255);\n        $j = 0;\n        for ($i = 0; $i < 256; $i++) {\n            $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;\n            $temp = $keyStream[$i];\n            $keyStream[$i] = $keyStream[$j];\n            $keyStream[$j] = $temp;\n        }\n\n        $this->stream = [];\n        $this->stream[self::DECRYPT] = $this->stream[self::ENCRYPT] = [\n            0, // index $i\n            0, // index $j\n            $keyStream\n        ];\n    }\n\n    /**\n     * Encrypts or decrypts a message.\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @param string $text\n     * @param int $mode\n     * @return string $text\n     */\n    private function crypt($text, $mode)\n    {\n        if ($this->changed) {\n            $this->setup();\n        }\n\n        $stream = &$this->stream[$mode];\n        if ($this->continuousBuffer) {\n            $i = &$stream[0];\n            $j = &$stream[1];\n            $keyStream = &$stream[2];\n        } else {\n            $i = $stream[0];\n            $j = $stream[1];\n            $keyStream = $stream[2];\n        }\n\n        $len = strlen($text);\n        for ($k = 0; $k < $len; ++$k) {\n            $i = ($i + 1) & 255;\n            $ksi = $keyStream[$i];\n            $j = ($j + $ksi) & 255;\n            $ksj = $keyStream[$j];\n\n            $keyStream[$i] = $ksj;\n            $keyStream[$j] = $ksi;\n            $text[$k] = $text[$k] ^ chr($keyStream[($ksj + $ksi) & 255]);\n        }\n\n        return $text;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/JWK.php",
    "content": "<?php\n\n/**\n * JSON Web Key (RFC7517) Formatted RSA Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\JWK as Progenitor;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * JWK Formatted RSA Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class JWK extends Progenitor\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        if ($key->kty != 'RSA') {\n            throw new \\RuntimeException('Only RSA JWK keys are supported');\n        }\n\n        $count = $publicCount = 0;\n        $vars = ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi'];\n        foreach ($vars as $var) {\n            if (!isset($key->$var) || !is_string($key->$var)) {\n                continue;\n            }\n            $count++;\n            $value = new BigInteger(Strings::base64url_decode($key->$var), 256);\n            switch ($var) {\n                case 'n':\n                    $publicCount++;\n                    $components['modulus'] = $value;\n                    break;\n                case 'e':\n                    $publicCount++;\n                    $components['publicExponent'] = $value;\n                    break;\n                case 'd':\n                    $components['privateExponent'] = $value;\n                    break;\n                case 'p':\n                    $components['primes'][1] = $value;\n                    break;\n                case 'q':\n                    $components['primes'][2] = $value;\n                    break;\n                case 'dp':\n                    $components['exponents'][1] = $value;\n                    break;\n                case 'dq':\n                    $components['exponents'][2] = $value;\n                    break;\n                case 'qi':\n                    $components['coefficients'][2] = $value;\n            }\n        }\n\n        if ($count == count($vars)) {\n            return $components + ['isPublicKey' => false];\n        }\n\n        if ($count == 2 && $publicCount == 2) {\n            return $components + ['isPublicKey' => true];\n        }\n\n        throw new \\UnexpectedValueException('Key does not have an appropriate number of RSA parameters');\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        if (count($primes) != 2) {\n            throw new \\InvalidArgumentException('JWK does not support multi-prime RSA keys');\n        }\n\n        $key = [\n            'kty' => 'RSA',\n            'n' => Strings::base64url_encode($n->toBytes()),\n            'e' => Strings::base64url_encode($e->toBytes()),\n            'd' => Strings::base64url_encode($d->toBytes()),\n            'p' => Strings::base64url_encode($primes[1]->toBytes()),\n            'q' => Strings::base64url_encode($primes[2]->toBytes()),\n            'dp' => Strings::base64url_encode($exponents[1]->toBytes()),\n            'dq' => Strings::base64url_encode($exponents[2]->toBytes()),\n            'qi' => Strings::base64url_encode($coefficients[2]->toBytes())\n        ];\n\n        return self::wrapKey($key, $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])\n    {\n        $key = [\n            'kty' => 'RSA',\n            'n' => Strings::base64url_encode($n->toBytes()),\n            'e' => Strings::base64url_encode($e->toBytes())\n        ];\n\n        return self::wrapKey($key, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.php",
    "content": "<?php\n\n/**\n * Miccrosoft BLOB Formatted RSA Key Handler\n *\n * More info:\n *\n * https://msdn.microsoft.com/en-us/library/windows/desktop/aa375601(v=vs.85).aspx\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Microsoft BLOB Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class MSBLOB\n{\n    /**\n     * Public/Private Key Pair\n     *\n     */\n    const PRIVATEKEYBLOB = 0x7;\n    /**\n     * Public Key\n     *\n     */\n    const PUBLICKEYBLOB = 0x6;\n    /**\n     * Public Key\n     *\n     */\n    const PUBLICKEYBLOBEX = 0xA;\n    /**\n     * RSA public key exchange algorithm\n     *\n     */\n    const CALG_RSA_KEYX = 0x0000A400;\n    /**\n     * RSA public key exchange algorithm\n     *\n     */\n    const CALG_RSA_SIGN = 0x00002400;\n    /**\n     * Public Key\n     *\n     */\n    const RSA1 = 0x31415352;\n    /**\n     * Private Key\n     *\n     */\n    const RSA2 = 0x32415352;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        $key = Strings::base64_decode($key);\n\n        if (!is_string($key)) {\n            throw new \\UnexpectedValueException('Base64 decoding produced an error');\n        }\n        if (strlen($key) < 20) {\n            throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        // PUBLICKEYSTRUC  publickeystruc\n        // https://msdn.microsoft.com/en-us/library/windows/desktop/aa387453(v=vs.85).aspx\n        $unpacked = unpack('atype/aversion/vreserved/Valgo', Strings::shift($key, 8));\n        $type = $unpacked['type'];\n        $version = $unpacked['version'];\n        $reserved = $unpacked['reserved'];\n        $algo = $unpacked['algo'];\n        switch (ord($type)) {\n            case self::PUBLICKEYBLOB:\n            case self::PUBLICKEYBLOBEX:\n                $publickey = true;\n                break;\n            case self::PRIVATEKEYBLOB:\n                $publickey = false;\n                break;\n            default:\n                throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        $components = ['isPublicKey' => $publickey];\n\n        // https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549(v=vs.85).aspx\n        switch ($algo) {\n            case self::CALG_RSA_KEYX:\n            case self::CALG_RSA_SIGN:\n                break;\n            default:\n                throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        // RSAPUBKEY rsapubkey\n        // https://msdn.microsoft.com/en-us/library/windows/desktop/aa387685(v=vs.85).aspx\n        // could do V for pubexp but that's unsigned 32-bit whereas some PHP installs only do signed 32-bit\n        $unpacked = unpack('Vmagic/Vbitlen/a4pubexp', Strings::shift($key, 12));\n        $magic = $unpacked['magic'];\n        $bitlen = $unpacked['bitlen'];\n        $pubexp = $unpacked['pubexp'];\n        switch ($magic) {\n            case self::RSA2:\n                $components['isPublicKey'] = false;\n                // fall-through\n            case self::RSA1:\n                break;\n            default:\n                throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        $baseLength = $bitlen / 16;\n        if (strlen($key) != 2 * $baseLength && strlen($key) != 9 * $baseLength) {\n            throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n\n        $components[$components['isPublicKey'] ? 'publicExponent' : 'privateExponent'] = new BigInteger(strrev($pubexp), 256);\n        // BYTE modulus[rsapubkey.bitlen/8]\n        $components['modulus'] = new BigInteger(strrev(Strings::shift($key, $bitlen / 8)), 256);\n\n        if ($publickey) {\n            return $components;\n        }\n\n        $components['isPublicKey'] = false;\n\n        // BYTE prime1[rsapubkey.bitlen/16]\n        $components['primes'] = [1 => new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256)];\n        // BYTE prime2[rsapubkey.bitlen/16]\n        $components['primes'][] = new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256);\n        // BYTE exponent1[rsapubkey.bitlen/16]\n        $components['exponents'] = [1 => new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256)];\n        // BYTE exponent2[rsapubkey.bitlen/16]\n        $components['exponents'][] = new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256);\n        // BYTE coefficient[rsapubkey.bitlen/16]\n        $components['coefficients'] = [2 => new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256)];\n        if (isset($components['privateExponent'])) {\n            $components['publicExponent'] = $components['privateExponent'];\n        }\n        // BYTE privateExponent[rsapubkey.bitlen/8]\n        $components['privateExponent'] = new BigInteger(strrev(Strings::shift($key, $bitlen / 8)), 256);\n\n        return $components;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '')\n    {\n        if (count($primes) != 2) {\n            throw new \\InvalidArgumentException('MSBLOB does not support multi-prime RSA keys');\n        }\n\n        if (!empty($password) && is_string($password)) {\n            throw new UnsupportedFormatException('MSBLOB private keys do not support encryption');\n        }\n\n        $n = strrev($n->toBytes());\n        $e = str_pad(strrev($e->toBytes()), 4, \"\\0\");\n        $key = pack('aavV', chr(self::PRIVATEKEYBLOB), chr(2), 0, self::CALG_RSA_KEYX);\n        $key .= pack('VVa*', self::RSA2, 8 * strlen($n), $e);\n        $key .= $n;\n        $key .= strrev($primes[1]->toBytes());\n        $key .= strrev($primes[2]->toBytes());\n        $key .= strrev($exponents[1]->toBytes());\n        $key .= strrev($exponents[2]->toBytes());\n        $key .= strrev($coefficients[2]->toBytes());\n        $key .= strrev($d->toBytes());\n\n        return Strings::base64_encode($key);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e)\n    {\n        $n = strrev($n->toBytes());\n        $e = str_pad(strrev($e->toBytes()), 4, \"\\0\");\n        $key = pack('aavV', chr(self::PUBLICKEYBLOB), chr(2), 0, self::CALG_RSA_KEYX);\n        $key .= pack('VVa*', self::RSA1, 8 * strlen($n), $e);\n        $key .= $n;\n\n        return Strings::base64_encode($key);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/OpenSSH.php",
    "content": "<?php\n\n/**\n * OpenSSH Formatted RSA Key Handler\n *\n * PHP version 5\n *\n * Place in $HOME/.ssh/authorized_keys\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\OpenSSH as Progenitor;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * OpenSSH Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSH extends Progenitor\n{\n    /**\n     * Supported Key Types\n     *\n     * @var array\n     */\n    protected static $types = ['ssh-rsa'];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        static $one;\n        if (!isset($one)) {\n            $one = new BigInteger(1);\n        }\n\n        $parsed = parent::load($key, $password);\n\n        if (isset($parsed['paddedKey'])) {\n            list($type) = Strings::unpackSSH2('s', $parsed['paddedKey']);\n            if ($type != $parsed['type']) {\n                throw new \\RuntimeException(\"The public and private keys are not of the same type ($type vs $parsed[type])\");\n            }\n\n            $primes = $coefficients = [];\n\n            list(\n                $modulus,\n                $publicExponent,\n                $privateExponent,\n                $coefficients[2],\n                $primes[1],\n                $primes[2],\n                $comment,\n            ) = Strings::unpackSSH2('i6s', $parsed['paddedKey']);\n\n            $temp = $primes[1]->subtract($one);\n            $exponents = [1 => $publicExponent->modInverse($temp)];\n            $temp = $primes[2]->subtract($one);\n            $exponents[] = $publicExponent->modInverse($temp);\n\n            $isPublicKey = false;\n\n            return compact('publicExponent', 'modulus', 'privateExponent', 'primes', 'coefficients', 'exponents', 'comment', 'isPublicKey');\n        }\n\n        list($publicExponent, $modulus) = Strings::unpackSSH2('ii', $parsed['publicKey']);\n\n        return [\n            'isPublicKey' => true,\n            'modulus' => $modulus,\n            'publicExponent' => $publicExponent,\n            'comment' => $parsed['comment']\n        ];\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])\n    {\n        $RSAPublicKey = Strings::packSSH2('sii', 'ssh-rsa', $e, $n);\n\n        if (isset($options['binary']) ? $options['binary'] : self::$binary) {\n            return $RSAPublicKey;\n        }\n\n        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;\n        $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . $comment;\n\n        return $RSAPublicKey;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        $publicKey = self::savePublicKey($n, $e, ['binary' => true]);\n        $privateKey = Strings::packSSH2('si6', 'ssh-rsa', $n, $e, $d, $coefficients[2], $primes[1], $primes[2]);\n\n        return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.php",
    "content": "<?php\n\n/**\n * PKCS#1 Formatted RSA Key Handler\n *\n * PHP version 5\n *\n * Used by File/X509.php\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN RSA PRIVATE KEY-----\n * -----BEGIN RSA PUBLIC KEY-----\n *\n * Analogous to ssh-keygen's pem format (as specified by -m)\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS1 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#1 Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS1 extends Progenitor\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        if (strpos($key, 'PUBLIC') !== false) {\n            $components = ['isPublicKey' => true];\n        } elseif (strpos($key, 'PRIVATE') !== false) {\n            $components = ['isPublicKey' => false];\n        } else {\n            $components = [];\n        }\n\n        $key = parent::load($key, $password);\n\n        $decoded = ASN1::decodeBER($key);\n        if (!$decoded) {\n            throw new \\RuntimeException('Unable to decode BER');\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\RSAPrivateKey::MAP);\n        if (is_array($key)) {\n            $components += [\n                'modulus' => $key['modulus'],\n                'publicExponent' => $key['publicExponent'],\n                'privateExponent' => $key['privateExponent'],\n                'primes' => [1 => $key['prime1'], $key['prime2']],\n                'exponents' => [1 => $key['exponent1'], $key['exponent2']],\n                'coefficients' => [2 => $key['coefficient']]\n            ];\n            if ($key['version'] == 'multi') {\n                foreach ($key['otherPrimeInfos'] as $primeInfo) {\n                    $components['primes'][] = $primeInfo['prime'];\n                    $components['exponents'][] = $primeInfo['exponent'];\n                    $components['coefficients'][] = $primeInfo['coefficient'];\n                }\n            }\n            if (!isset($components['isPublicKey'])) {\n                $components['isPublicKey'] = false;\n            }\n            return $components;\n        }\n\n        $key = ASN1::asn1map($decoded[0], Maps\\RSAPublicKey::MAP);\n\n        if (!is_array($key)) {\n            throw new \\RuntimeException('Unable to perform ASN1 mapping');\n        }\n\n        if (!isset($components['isPublicKey'])) {\n            $components['isPublicKey'] = true;\n        }\n\n        $components = $components + $key;\n        foreach ($components as &$val) {\n            if ($val instanceof BigInteger) {\n                $val = self::makePositive($val);\n            }\n            if (is_array($val)) {\n                foreach ($val as &$subval) {\n                    if ($subval instanceof BigInteger) {\n                        $subval = self::makePositive($subval);\n                    }\n                }\n            }\n        }\n\n        return $components + $key;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        $num_primes = count($primes);\n        $key = [\n            'version' => $num_primes == 2 ? 'two-prime' : 'multi',\n            'modulus' => $n,\n            'publicExponent' => $e,\n            'privateExponent' => $d,\n            'prime1' => $primes[1],\n            'prime2' => $primes[2],\n            'exponent1' => $exponents[1],\n            'exponent2' => $exponents[2],\n            'coefficient' => $coefficients[2]\n        ];\n        for ($i = 3; $i <= $num_primes; $i++) {\n            $key['otherPrimeInfos'][] = [\n                'prime' => $primes[$i],\n                'exponent' => $exponents[$i],\n                'coefficient' => $coefficients[$i]\n            ];\n        }\n\n        $key = ASN1::encodeDER($key, Maps\\RSAPrivateKey::MAP);\n\n        return self::wrapPrivateKey($key, 'RSA', $password, $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e)\n    {\n        $key = [\n            'modulus' => $n,\n            'publicExponent' => $e\n        ];\n\n        $key = ASN1::encodeDER($key, Maps\\RSAPublicKey::MAP);\n\n        return self::wrapPublicKey($key, 'RSA');\n    }\n\n    /**\n     * Negative numbers make no sense in RSA so convert them to positive\n     *\n     * @param BigInteger $x\n     * @return string\n     */\n    private static function makePositive(BigInteger $x)\n    {\n        return $x->isNegative() ?\n            new BigInteger($x->toBytes(true), 256) :\n            $x;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS8.php",
    "content": "<?php\n\n/**\n * PKCS#8 Formatted RSA Key Handler\n *\n * PHP version 5\n *\n * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN ENCRYPTED PRIVATE KEY-----\n * -----BEGIN PRIVATE KEY-----\n * -----BEGIN PUBLIC KEY-----\n *\n * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8\n * is specific to private keys it's basically creating a DER-encoded wrapper\n * for keys. This just extends that same concept to public keys (much like ssh-keygen)\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS8 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#8 Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS8 extends Progenitor\n{\n    /**\n     * OID Name\n     *\n     * @var string\n     */\n    const OID_NAME = 'rsaEncryption';\n\n    /**\n     * OID Value\n     *\n     * @var string\n     */\n    const OID_VALUE = '1.2.840.113549.1.1.1';\n\n    /**\n     * Child OIDs loaded\n     *\n     * @var bool\n     */\n    protected static $childOIDsLoaded = false;\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        $key = parent::load($key, $password);\n\n        if (isset($key['privateKey'])) {\n            $components['isPublicKey'] = false;\n            $type = 'private';\n        } else {\n            $components['isPublicKey'] = true;\n            $type = 'public';\n        }\n\n        $result = $components + PKCS1::load($key[$type . 'Key']);\n\n        if (isset($key['meta'])) {\n            $result['meta'] = $key['meta'];\n        }\n\n        return $result;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        $key = PKCS1::savePrivateKey($n, $e, $d, $primes, $exponents, $coefficients);\n        $key = ASN1::extractBER($key);\n        return self::wrapPrivateKey($key, [], null, $password, null, '', $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])\n    {\n        $key = PKCS1::savePublicKey($n, $e);\n        $key = ASN1::extractBER($key);\n        return self::wrapPublicKey($key, null, null, $options);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php",
    "content": "<?php\n\n/**\n * PKCS#8 Formatted RSA-PSS Key Handler\n *\n * PHP version 5\n *\n * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)\n *\n * Processes keys with the following headers:\n *\n * -----BEGIN ENCRYPTED PRIVATE KEY-----\n * -----BEGIN PRIVATE KEY-----\n * -----BEGIN PUBLIC KEY-----\n *\n * Analogous to \"openssl genpkey -algorithm rsa-pss\".\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PKCS8 as Progenitor;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PKCS#8 Formatted RSA-PSS Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PSS extends Progenitor\n{\n    /**\n     * OID Name\n     *\n     * @var string\n     */\n    const OID_NAME = 'id-RSASSA-PSS';\n\n    /**\n     * OID Value\n     *\n     * @var string\n     */\n    const OID_VALUE = '1.2.840.113549.1.1.10';\n\n    /**\n     * OIDs loaded\n     *\n     * @var bool\n     */\n    private static $oidsLoaded = false;\n\n    /**\n     * Child OIDs loaded\n     *\n     * @var bool\n     */\n    protected static $childOIDsLoaded = false;\n\n    /**\n     * Initialize static variables\n     */\n    private static function initialize_static_variables()\n    {\n        if (!self::$oidsLoaded) {\n            ASN1::loadOIDs([\n                'md2' => '1.2.840.113549.2.2',\n                'md4' => '1.2.840.113549.2.4',\n                'md5' => '1.2.840.113549.2.5',\n                'id-sha1' => '1.3.14.3.2.26',\n                'id-sha256' => '2.16.840.1.101.3.4.2.1',\n                'id-sha384' => '2.16.840.1.101.3.4.2.2',\n                'id-sha512' => '2.16.840.1.101.3.4.2.3',\n                'id-sha224' => '2.16.840.1.101.3.4.2.4',\n                'id-sha512/224' => '2.16.840.1.101.3.4.2.5',\n                'id-sha512/256' => '2.16.840.1.101.3.4.2.6',\n\n                'id-mgf1' => '1.2.840.113549.1.1.8'\n            ]);\n            self::$oidsLoaded = true;\n        }\n    }\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        self::initialize_static_variables();\n\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        $components = ['isPublicKey' => strpos($key, 'PUBLIC') !== false];\n\n        $key = parent::load($key, $password);\n\n        $type = isset($key['privateKey']) ? 'private' : 'public';\n\n        $result = $components + PKCS1::load($key[$type . 'Key']);\n\n        if (isset($key[$type . 'KeyAlgorithm']['parameters'])) {\n            $decoded = ASN1::decodeBER($key[$type . 'KeyAlgorithm']['parameters']);\n            if ($decoded === false) {\n                throw new \\UnexpectedValueException('Unable to decode parameters');\n            }\n            $params = ASN1::asn1map($decoded[0], Maps\\RSASSA_PSS_params::MAP);\n        } else {\n            $params = [];\n        }\n\n        if (isset($params['maskGenAlgorithm']['parameters'])) {\n            $decoded = ASN1::decodeBER($params['maskGenAlgorithm']['parameters']);\n            if ($decoded === false) {\n                throw new \\UnexpectedValueException('Unable to decode parameters');\n            }\n            $params['maskGenAlgorithm']['parameters'] = ASN1::asn1map($decoded[0], Maps\\HashAlgorithm::MAP);\n        } else {\n            $params['maskGenAlgorithm'] = [\n                'algorithm' => 'id-mgf1',\n                'parameters' => ['algorithm' => 'id-sha1']\n            ];\n        }\n\n        if (!isset($params['hashAlgorithm']['algorithm'])) {\n            $params['hashAlgorithm']['algorithm'] = 'id-sha1';\n        }\n\n        $result['hash'] = str_replace('id-', '', $params['hashAlgorithm']['algorithm']);\n        $result['MGFHash'] = str_replace('id-', '', $params['maskGenAlgorithm']['parameters']['algorithm']);\n        if (isset($params['saltLength'])) {\n            $result['saltLength'] = (int) \"$params[saltLength]\";\n        }\n\n        if (isset($key['meta'])) {\n            $result['meta'] = $key['meta'];\n        }\n\n        return $result;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        self::initialize_static_variables();\n\n        $key = PKCS1::savePrivateKey($n, $e, $d, $primes, $exponents, $coefficients);\n        $key = ASN1::extractBER($key);\n        $params = self::savePSSParams($options);\n        return self::wrapPrivateKey($key, [], $params, $password, null, '', $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])\n    {\n        self::initialize_static_variables();\n\n        $key = PKCS1::savePublicKey($n, $e);\n        $key = ASN1::extractBER($key);\n        $params = self::savePSSParams($options);\n        return self::wrapPublicKey($key, $params);\n    }\n\n    /**\n     * Encodes PSS parameters\n     *\n     * @param array $options\n     * @return string\n     */\n    public static function savePSSParams(array $options)\n    {\n        /*\n         The trailerField field is an integer.  It provides\n         compatibility with IEEE Std 1363a-2004 [P1363A].  The value\n         MUST be 1, which represents the trailer field with hexadecimal\n         value 0xBC.  Other trailer fields, including the trailer field\n         composed of HashID concatenated with 0xCC that is specified in\n         IEEE Std 1363a, are not supported.  Implementations that\n         perform signature generation MUST omit the trailerField field,\n         indicating that the default trailer field value was used.\n         Implementations that perform signature validation MUST\n         recognize both a present trailerField field with value 1 and an\n         absent trailerField field.\n\n         source: https://tools.ietf.org/html/rfc4055#page-9\n        */\n        $params = [\n            'trailerField' => new BigInteger(1)\n        ];\n        if (isset($options['hash'])) {\n            $params['hashAlgorithm']['algorithm'] = 'id-' . $options['hash'];\n        }\n        if (isset($options['MGFHash'])) {\n            $temp = ['algorithm' => 'id-' . $options['MGFHash']];\n            $temp = ASN1::encodeDER($temp, Maps\\HashAlgorithm::MAP);\n            $params['maskGenAlgorithm'] = [\n                'algorithm' => 'id-mgf1',\n                'parameters' => new ASN1\\Element($temp)\n            ];\n        }\n        if (isset($options['saltLength'])) {\n            $params['saltLength'] = new BigInteger($options['saltLength']);\n        }\n\n        return new ASN1\\Element(ASN1::encodeDER($params, Maps\\RSASSA_PSS_params::MAP));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.php",
    "content": "<?php\n\n/**\n * PuTTY Formatted RSA Key Handler\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\Formats\\Keys\\PuTTY as Progenitor;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * PuTTY Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PuTTY extends Progenitor\n{\n    /**\n     * Public Handler\n     *\n     * @var string\n     */\n    const PUBLIC_HANDLER = 'phpseclib3\\Crypt\\RSA\\Formats\\Keys\\OpenSSH';\n\n    /**\n     * Algorithm Identifier\n     *\n     * @var array\n     */\n    protected static $types = ['ssh-rsa'];\n\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        static $one;\n        if (!isset($one)) {\n            $one = new BigInteger(1);\n        }\n\n        $components = parent::load($key, $password);\n        if (!isset($components['private'])) {\n            return $components;\n        }\n        $type = $components['type'];\n        $comment = $components['comment'];\n        $public = $components['public'];\n        $private = $components['private'];\n        unset($components['public'], $components['private']);\n\n        $isPublicKey = false;\n\n        $result = Strings::unpackSSH2('ii', $public);\n        if ($result === false) {\n            throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n        list($publicExponent, $modulus) = $result;\n\n        $result = Strings::unpackSSH2('iiii', $private);\n        if ($result === false) {\n            throw new \\UnexpectedValueException('Key appears to be malformed');\n        }\n        $primes = $coefficients = [];\n        list($privateExponent, $primes[1], $primes[2], $coefficients[2]) = $result;\n\n        $temp = $primes[1]->subtract($one);\n        $exponents = [1 => $publicExponent->modInverse($temp)];\n        $temp = $primes[2]->subtract($one);\n        $exponents[] = $publicExponent->modInverse($temp);\n\n        return compact('publicExponent', 'modulus', 'privateExponent', 'primes', 'coefficients', 'exponents', 'comment', 'isPublicKey');\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        if (count($primes) != 2) {\n            throw new \\InvalidArgumentException('PuTTY does not support multi-prime RSA keys');\n        }\n\n        $public =  Strings::packSSH2('ii', $e, $n);\n        $private = Strings::packSSH2('iiii', $d, $primes[1], $primes[2], $coefficients[2]);\n\n        return self::wrapPrivateKey($public, $private, 'ssh-rsa', $password, $options);\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e)\n    {\n        return self::wrapPublicKey(Strings::packSSH2('ii', $e, $n), 'ssh-rsa');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/Raw.php",
    "content": "<?php\n\n/**\n * Raw RSA Key Handler\n *\n * PHP version 5\n *\n * An array containing two \\phpseclib3\\Math\\BigInteger objects.\n *\n * The exponent can be indexed with any of the following:\n *\n * 0, e, exponent, publicExponent\n *\n * The modulus can be indexed with any of the following:\n *\n * 1, n, modulo, modulus\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Raw RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Raw\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!is_array($key)) {\n            throw new \\UnexpectedValueException('Key should be a array - not a ' . gettype($key));\n        }\n\n        $key = array_change_key_case($key, CASE_LOWER);\n\n        $components = ['isPublicKey' => false];\n\n        foreach (['e', 'exponent', 'publicexponent', 0, 'privateexponent', 'd'] as $index) {\n            if (isset($key[$index])) {\n                $components['publicExponent'] = $key[$index];\n                break;\n            }\n        }\n\n        foreach (['n', 'modulo', 'modulus', 1] as $index) {\n            if (isset($key[$index])) {\n                $components['modulus'] = $key[$index];\n                break;\n            }\n        }\n\n        if (!isset($components['publicExponent']) || !isset($components['modulus'])) {\n            throw new \\UnexpectedValueException('Modulus / exponent not present');\n        }\n\n        if (isset($key['primes'])) {\n            $components['primes'] = $key['primes'];\n        } elseif (isset($key['p']) && isset($key['q'])) {\n            $indices = [\n                ['p', 'q'],\n                ['prime1', 'prime2']\n            ];\n            foreach ($indices as $index) {\n                list($i0, $i1) = $index;\n                if (isset($key[$i0]) && isset($key[$i1])) {\n                    $components['primes'] = [1 => $key[$i0], $key[$i1]];\n                }\n            }\n        }\n\n        if (isset($key['exponents'])) {\n            $components['exponents'] = $key['exponents'];\n        } else {\n            $indices = [\n                ['dp', 'dq'],\n                ['exponent1', 'exponent2']\n            ];\n            foreach ($indices as $index) {\n                list($i0, $i1) = $index;\n                if (isset($key[$i0]) && isset($key[$i1])) {\n                    $components['exponents'] = [1 => $key[$i0], $key[$i1]];\n                }\n            }\n        }\n\n        if (isset($key['coefficients'])) {\n            $components['coefficients'] = $key['coefficients'];\n        } else {\n            foreach (['inverseq', 'q\\'', 'coefficient'] as $index) {\n                if (isset($key[$index])) {\n                    $components['coefficients'] = [2 => $key[$index]];\n                }\n            }\n        }\n\n        if (!isset($components['primes'])) {\n            $components['isPublicKey'] = true;\n            return $components;\n        }\n\n        if (!isset($components['exponents'])) {\n            $one = new BigInteger(1);\n            $temp = $components['primes'][1]->subtract($one);\n            $exponents = [1 => $components['publicExponent']->modInverse($temp)];\n            $temp = $components['primes'][2]->subtract($one);\n            $exponents[] = $components['publicExponent']->modInverse($temp);\n            $components['exponents'] = $exponents;\n        }\n\n        if (!isset($components['coefficients'])) {\n            $components['coefficients'] = [2 => $components['primes'][2]->modInverse($components['primes'][1])];\n        }\n\n        foreach (['privateexponent', 'd'] as $index) {\n            if (isset($key[$index])) {\n                $components['privateExponent'] = $key[$index];\n                break;\n            }\n        }\n\n        return $components;\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @param array $options optional\n     * @return array\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])\n    {\n        if (!empty($password) && is_string($password)) {\n            throw new UnsupportedFormatException('Raw private keys do not support encryption');\n        }\n\n        return [\n            'e' => clone $e,\n            'n' => clone $n,\n            'd' => clone $d,\n            'primes' => array_map(function ($var) {\n                return clone $var;\n            }, $primes),\n            'exponents' => array_map(function ($var) {\n                return clone $var;\n            }, $exponents),\n            'coefficients' => array_map(function ($var) {\n                return clone $var;\n            }, $coefficients)\n        ];\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @return array\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e)\n    {\n        return ['e' => clone $e, 'n' => clone $n];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/XML.php",
    "content": "<?php\n\n/**\n * XML Formatted RSA Key Handler\n *\n * More info:\n *\n * http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue\n * http://www.w3.org/TR/xkms2/#XKMS_2_0_Paragraph_269\n * http://en.wikipedia.org/wiki/XML_Signature\n * http://en.wikipedia.org/wiki/XKMS\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA\\Formats\\Keys;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\BadConfigurationException;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * XML Formatted RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class XML\n{\n    /**\n     * Break a public or private key down into its constituent components\n     *\n     * @param string $key\n     * @param string $password optional\n     * @return array\n     */\n    public static function load($key, $password = '')\n    {\n        if (!Strings::is_stringable($key)) {\n            throw new \\UnexpectedValueException('Key should be a string - not a ' . gettype($key));\n        }\n\n        if (!class_exists('DOMDocument')) {\n            throw new BadConfigurationException('The dom extension is not setup correctly on this system');\n        }\n\n        $components = [\n            'isPublicKey' => false,\n            'primes' => [],\n            'exponents' => [],\n            'coefficients' => []\n        ];\n\n        $use_errors = libxml_use_internal_errors(true);\n\n        $dom = new \\DOMDocument();\n        if (substr($key, 0, 5) != '<?xml') {\n            $key = '<xml>' . $key . '</xml>';\n        }\n        if (!$dom->loadXML($key)) {\n            libxml_use_internal_errors($use_errors);\n            throw new \\UnexpectedValueException('Key does not appear to contain XML');\n        }\n        $xpath = new \\DOMXPath($dom);\n        $keys = ['modulus', 'exponent', 'p', 'q', 'dp', 'dq', 'inverseq', 'd'];\n        foreach ($keys as $key) {\n            // $dom->getElementsByTagName($key) is case-sensitive\n            $temp = $xpath->query(\"//*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='$key']\");\n            if (!$temp->length) {\n                continue;\n            }\n            $value = new BigInteger(Strings::base64_decode($temp->item(0)->nodeValue), 256);\n            switch ($key) {\n                case 'modulus':\n                    $components['modulus'] = $value;\n                    break;\n                case 'exponent':\n                    $components['publicExponent'] = $value;\n                    break;\n                case 'p':\n                    $components['primes'][1] = $value;\n                    break;\n                case 'q':\n                    $components['primes'][2] = $value;\n                    break;\n                case 'dp':\n                    $components['exponents'][1] = $value;\n                    break;\n                case 'dq':\n                    $components['exponents'][2] = $value;\n                    break;\n                case 'inverseq':\n                    $components['coefficients'][2] = $value;\n                    break;\n                case 'd':\n                    $components['privateExponent'] = $value;\n            }\n        }\n\n        libxml_use_internal_errors($use_errors);\n\n        foreach ($components as $key => $value) {\n            if (is_array($value) && !count($value)) {\n                unset($components[$key]);\n            }\n        }\n\n        if (isset($components['modulus']) && isset($components['publicExponent'])) {\n            if (count($components) == 3) {\n                $components['isPublicKey'] = true;\n            }\n            return $components;\n        }\n\n        throw new \\UnexpectedValueException('Modulus / exponent not present');\n    }\n\n    /**\n     * Convert a private key to the appropriate format.\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @param BigInteger $d\n     * @param array $primes\n     * @param array $exponents\n     * @param array $coefficients\n     * @param string $password optional\n     * @return string\n     */\n    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '')\n    {\n        if (count($primes) != 2) {\n            throw new \\InvalidArgumentException('XML does not support multi-prime RSA keys');\n        }\n\n        if (!empty($password) && is_string($password)) {\n            throw new UnsupportedFormatException('XML private keys do not support encryption');\n        }\n\n        return \"<RSAKeyPair>\\r\\n\" .\n               '  <Modulus>' . Strings::base64_encode($n->toBytes()) . \"</Modulus>\\r\\n\" .\n               '  <Exponent>' . Strings::base64_encode($e->toBytes()) . \"</Exponent>\\r\\n\" .\n               '  <P>' . Strings::base64_encode($primes[1]->toBytes()) . \"</P>\\r\\n\" .\n               '  <Q>' . Strings::base64_encode($primes[2]->toBytes()) . \"</Q>\\r\\n\" .\n               '  <DP>' . Strings::base64_encode($exponents[1]->toBytes()) . \"</DP>\\r\\n\" .\n               '  <DQ>' . Strings::base64_encode($exponents[2]->toBytes()) . \"</DQ>\\r\\n\" .\n               '  <InverseQ>' . Strings::base64_encode($coefficients[2]->toBytes()) . \"</InverseQ>\\r\\n\" .\n               '  <D>' . Strings::base64_encode($d->toBytes()) . \"</D>\\r\\n\" .\n               '</RSAKeyPair>';\n    }\n\n    /**\n     * Convert a public key to the appropriate format\n     *\n     * @param BigInteger $n\n     * @param BigInteger $e\n     * @return string\n     */\n    public static function savePublicKey(BigInteger $n, BigInteger $e)\n    {\n        return \"<RSAKeyValue>\\r\\n\" .\n               '  <Modulus>' . Strings::base64_encode($n->toBytes()) . \"</Modulus>\\r\\n\" .\n               '  <Exponent>' . Strings::base64_encode($e->toBytes()) . \"</Exponent>\\r\\n\" .\n               '</RSAKeyValue>';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php",
    "content": "<?php\n\n/**\n * RSA Private Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA;\n\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Crypt\\RSA\\Formats\\Keys\\PSS;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Raw RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PrivateKey extends RSA implements Common\\PrivateKey\n{\n    use Common\\Traits\\PasswordProtected;\n\n    /**\n     * Primes for Chinese Remainder Theorem (ie. p and q)\n     *\n     * @var array\n     */\n    protected $primes;\n\n    /**\n     * Exponents for Chinese Remainder Theorem (ie. dP and dQ)\n     *\n     * @var array\n     */\n    protected $exponents;\n\n    /**\n     * Coefficients for Chinese Remainder Theorem (ie. qInv)\n     *\n     * @var array\n     */\n    protected $coefficients;\n\n    /**\n     * Private Exponent\n     *\n     * @var BigInteger\n     */\n    protected $privateExponent;\n\n    /**\n     * RSADP\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}.\n     *\n     * @return bool|BigInteger\n     */\n    private function rsadp(BigInteger $c)\n    {\n        if ($c->compare(self::$zero) < 0 || $c->compare($this->modulus) > 0) {\n            throw new \\OutOfRangeException('Ciphertext representative out of range');\n        }\n        return $this->exponentiate($c);\n    }\n\n    /**\n     * RSASP1\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}.\n     *\n     * @return bool|BigInteger\n     */\n    private function rsasp1(BigInteger $m)\n    {\n        if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {\n            throw new \\OutOfRangeException('Signature representative out of range');\n        }\n        return $this->exponentiate($m);\n    }\n\n    /**\n     * Exponentiate\n     *\n     * @param BigInteger $x\n     * @return BigInteger\n     */\n    protected function exponentiate(BigInteger $x)\n    {\n        switch (true) {\n            case empty($this->primes):\n            case $this->primes[1]->equals(self::$zero):\n            case empty($this->coefficients):\n            case $this->coefficients[2]->equals(self::$zero):\n            case empty($this->exponents):\n            case $this->exponents[1]->equals(self::$zero):\n                return $x->modPow($this->exponent, $this->modulus);\n        }\n\n        $num_primes = count($this->primes);\n\n        if (!static::$enableBlinding) {\n            $m_i = [\n                1 => $x->modPow($this->exponents[1], $this->primes[1]),\n                2 => $x->modPow($this->exponents[2], $this->primes[2])\n            ];\n            $h = $m_i[1]->subtract($m_i[2]);\n            $h = $h->multiply($this->coefficients[2]);\n            list(, $h) = $h->divide($this->primes[1]);\n            $m = $m_i[2]->add($h->multiply($this->primes[2]));\n\n            $r = $this->primes[1];\n            for ($i = 3; $i <= $num_primes; $i++) {\n                $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]);\n\n                $r = $r->multiply($this->primes[$i - 1]);\n\n                $h = $m_i->subtract($m);\n                $h = $h->multiply($this->coefficients[$i]);\n                list(, $h) = $h->divide($this->primes[$i]);\n\n                $m = $m->add($r->multiply($h));\n            }\n        } else {\n            $smallest = $this->primes[1];\n            for ($i = 2; $i <= $num_primes; $i++) {\n                if ($smallest->compare($this->primes[$i]) > 0) {\n                    $smallest = $this->primes[$i];\n                }\n            }\n\n            $r = BigInteger::randomRange(self::$one, $smallest->subtract(self::$one));\n\n            $m_i = [\n                1 => $this->blind($x, $r, 1),\n                2 => $this->blind($x, $r, 2)\n            ];\n            $h = $m_i[1]->subtract($m_i[2]);\n            $h = $h->multiply($this->coefficients[2]);\n            list(, $h) = $h->divide($this->primes[1]);\n            $m = $m_i[2]->add($h->multiply($this->primes[2]));\n\n            $r = $this->primes[1];\n            for ($i = 3; $i <= $num_primes; $i++) {\n                $m_i = $this->blind($x, $r, $i);\n\n                $r = $r->multiply($this->primes[$i - 1]);\n\n                $h = $m_i->subtract($m);\n                $h = $h->multiply($this->coefficients[$i]);\n                list(, $h) = $h->divide($this->primes[$i]);\n\n                $m = $m->add($r->multiply($h));\n            }\n        }\n\n        return $m;\n    }\n\n    /**\n     * Performs RSA Blinding\n     *\n     * Protects against timing attacks by employing RSA Blinding.\n     * Returns $x->modPow($this->exponents[$i], $this->primes[$i])\n     *\n     * @param BigInteger $x\n     * @param BigInteger $r\n     * @param int $i\n     * @return BigInteger\n     */\n    private function blind(BigInteger $x, BigInteger $r, $i)\n    {\n        $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));\n        $x = $x->modPow($this->exponents[$i], $this->primes[$i]);\n\n        $r = $r->modInverse($this->primes[$i]);\n        $x = $x->multiply($r);\n        list(, $x) = $x->divide($this->primes[$i]);\n\n        return $x;\n    }\n\n    /**\n     * EMSA-PSS-ENCODE\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.\n     *\n     * @return string\n     * @param string $m\n     * @throws \\RuntimeException on encoding error\n     * @param int $emBits\n     */\n    private function emsa_pss_encode($m, $emBits)\n    {\n        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a \"Label too long\" error\n        // be output.\n\n        $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)\n        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;\n\n        $mHash = $this->hash->hash($m);\n        if ($emLen < $this->hLen + $sLen + 2) {\n            throw new \\LengthException('RSA modulus too short');\n        }\n\n        $salt = Random::string($sLen);\n        $m2 = \"\\0\\0\\0\\0\\0\\0\\0\\0\" . $mHash . $salt;\n        $h = $this->hash->hash($m2);\n        $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);\n        $db = $ps . chr(1) . $salt;\n        $dbMask = $this->mgf1($h, $emLen - $this->hLen - 1); // ie. stlren($db)\n        $maskedDB = $db ^ $dbMask;\n        $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];\n        $em = $maskedDB . $h . chr(0xBC);\n\n        return $em;\n    }\n\n    /**\n     * RSASSA-PSS-SIGN\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}.\n     *\n     * @param string $m\n     * @return bool|string\n     */\n    private function rsassa_pss_sign($m)\n    {\n        // EMSA-PSS encoding\n\n        $em = $this->emsa_pss_encode($m, 8 * $this->k - 1);\n\n        // RSA signature\n\n        $m = $this->os2ip($em);\n        $s = $this->rsasp1($m);\n        $s = $this->i2osp($s, $this->k);\n\n        // Output the signature S\n\n        return $s;\n    }\n\n    /**\n     * RSASSA-PKCS1-V1_5-SIGN\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}.\n     *\n     * @param string $m\n     * @throws \\LengthException if the RSA modulus is too short\n     * @return bool|string\n     */\n    private function rsassa_pkcs1_v1_5_sign($m)\n    {\n        // EMSA-PKCS1-v1_5 encoding\n\n        // If the encoding operation outputs \"intended encoded message length too short,\" output \"RSA modulus\n        // too short\" and stop.\n        try {\n            $em = $this->emsa_pkcs1_v1_5_encode($m, $this->k);\n        } catch (\\LengthException $e) {\n            throw new \\LengthException('RSA modulus too short');\n        }\n\n        // RSA signature\n\n        $m = $this->os2ip($em);\n        $s = $this->rsasp1($m);\n        $s = $this->i2osp($s, $this->k);\n\n        // Output the signature S\n\n        return $s;\n    }\n\n    /**\n     * Create a signature\n     *\n     * @see self::verify()\n     * @param string $message\n     * @return string\n     */\n    public function sign($message)\n    {\n        switch ($this->signaturePadding) {\n            case self::SIGNATURE_PKCS1:\n            case self::SIGNATURE_RELAXED_PKCS1:\n                return $this->rsassa_pkcs1_v1_5_sign($message);\n            //case self::SIGNATURE_PSS:\n            default:\n                return $this->rsassa_pss_sign($message);\n        }\n    }\n\n    /**\n     * RSAES-PKCS1-V1_5-DECRYPT\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}.\n     *\n     * @param string $c\n     * @return bool|string\n     */\n    private function rsaes_pkcs1_v1_5_decrypt($c)\n    {\n        // Length checking\n\n        if (strlen($c) != $this->k) { // or if k < 11\n            throw new \\LengthException('Ciphertext representative too long');\n        }\n\n        // RSA decryption\n\n        $c = $this->os2ip($c);\n        $m = $this->rsadp($c);\n        $em = $this->i2osp($m, $this->k);\n\n        // EME-PKCS1-v1_5 decoding\n\n        if (ord($em[0]) != 0 || ord($em[1]) > 2) {\n            throw new \\RuntimeException('Decryption error');\n        }\n\n        $ps = substr($em, 2, strpos($em, chr(0), 2) - 2);\n        $m = substr($em, strlen($ps) + 3);\n\n        if (strlen($ps) < 8) {\n            throw new \\RuntimeException('Decryption error');\n        }\n\n        // Output M\n\n        return $m;\n    }\n\n    /**\n     * RSAES-OAEP-DECRYPT\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}.  The fact that the error\n     * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2:\n     *\n     *    Note.  Care must be taken to ensure that an opponent cannot\n     *    distinguish the different error conditions in Step 3.g, whether by\n     *    error message or timing, or, more generally, learn partial\n     *    information about the encoded message EM.  Otherwise an opponent may\n     *    be able to obtain useful information about the decryption of the\n     *    ciphertext C, leading to a chosen-ciphertext attack such as the one\n     *    observed by Manger [36].\n     *\n     * @param string $c\n     * @return bool|string\n     */\n    private function rsaes_oaep_decrypt($c)\n    {\n        // Length checking\n\n        // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a \"Label too long\" error\n        // be output.\n\n        if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) {\n            throw new \\LengthException('Ciphertext representative too long');\n        }\n\n        // RSA decryption\n\n        $c = $this->os2ip($c);\n        $m = $this->rsadp($c);\n        $em = $this->i2osp($m, $this->k);\n\n        // EME-OAEP decoding\n\n        $lHash = $this->hash->hash($this->label);\n        $y = ord($em[0]);\n        $maskedSeed = substr($em, 1, $this->hLen);\n        $maskedDB = substr($em, $this->hLen + 1);\n        $seedMask = $this->mgf1($maskedDB, $this->hLen);\n        $seed = $maskedSeed ^ $seedMask;\n        $dbMask = $this->mgf1($seed, $this->k - $this->hLen - 1);\n        $db = $maskedDB ^ $dbMask;\n        $lHash2 = substr($db, 0, $this->hLen);\n        $m = substr($db, $this->hLen);\n        $hashesMatch = hash_equals($lHash, $lHash2);\n        $leadingZeros = 1;\n        $patternMatch = 0;\n        $offset = 0;\n        for ($i = 0; $i < strlen($m); $i++) {\n            $patternMatch |= $leadingZeros & ($m[$i] === \"\\1\");\n            $leadingZeros &= $m[$i] === \"\\0\";\n            $offset += $patternMatch ? 0 : 1;\n        }\n\n        // we do | instead of || to avoid https://en.wikipedia.org/wiki/Short-circuit_evaluation\n        // to protect against timing attacks\n        if (!$hashesMatch | !$patternMatch) {\n            throw new \\RuntimeException('Decryption error');\n        }\n\n        // Output the message M\n\n        return substr($m, $offset + 1);\n    }\n\n    /**\n     * Raw Encryption / Decryption\n     *\n     * Doesn't use padding and is not recommended.\n     *\n     * @param string $m\n     * @return bool|string\n     * @throws \\LengthException if strlen($m) > $this->k\n     */\n    private function raw_encrypt($m)\n    {\n        if (strlen($m) > $this->k) {\n            throw new \\LengthException('Ciphertext representative too long');\n        }\n\n        $temp = $this->os2ip($m);\n        $temp = $this->rsadp($temp);\n        return  $this->i2osp($temp, $this->k);\n    }\n\n    /**\n     * Decryption\n     *\n     * @see self::encrypt()\n     * @param string $ciphertext\n     * @return bool|string\n     */\n    public function decrypt($ciphertext)\n    {\n        switch ($this->encryptionPadding) {\n            case self::ENCRYPTION_NONE:\n                return $this->raw_encrypt($ciphertext);\n            case self::ENCRYPTION_PKCS1:\n                return $this->rsaes_pkcs1_v1_5_decrypt($ciphertext);\n            //case self::ENCRYPTION_OAEP:\n            default:\n                return $this->rsaes_oaep_decrypt($ciphertext);\n        }\n    }\n\n    /**\n     * Returns the public key\n     *\n     * @return mixed\n     */\n    public function getPublicKey()\n    {\n        $type = self::validatePlugin('Keys', 'PKCS8', 'savePublicKey');\n        if (empty($this->modulus) || empty($this->publicExponent)) {\n            throw new \\RuntimeException('Public key components not found');\n        }\n\n        $key = $type::savePublicKey($this->modulus, $this->publicExponent);\n        return RSA::loadFormat('PKCS8', $key)\n            ->withHash($this->hash->getHash())\n            ->withMGFHash($this->mgfHash->getHash())\n            ->withSaltLength($this->sLen)\n            ->withLabel($this->label)\n            ->withPadding($this->signaturePadding | $this->encryptionPadding);\n    }\n\n    /**\n     * Returns the private key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin(\n            'Keys',\n            $type,\n            empty($this->primes) ? 'savePublicKey' : 'savePrivateKey'\n        );\n\n        if ($type == PSS::class) {\n            if ($this->signaturePadding == self::SIGNATURE_PSS) {\n                $options += [\n                    'hash' => $this->hash->getHash(),\n                    'MGFHash' => $this->mgfHash->getHash(),\n                    'saltLength' => $this->getSaltLength()\n                ];\n            } else {\n                throw new UnsupportedFormatException('The PSS format can only be used when the signature method has been explicitly set to PSS');\n            }\n        }\n\n        if (empty($this->primes)) {\n            return $type::savePublicKey($this->modulus, $this->exponent, $options);\n        }\n\n        return $type::savePrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients, $this->password, $options);\n\n        /*\n        $key = $type::savePrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients, $this->password, $options);\n        if ($key !== false || count($this->primes) == 2) {\n            return $key;\n        }\n\n        $nSize = $this->getSize() >> 1;\n\n        $primes = [1 => clone self::$one, clone self::$one];\n        $i = 1;\n        foreach ($this->primes as $prime) {\n            $primes[$i] = $primes[$i]->multiply($prime);\n            if ($primes[$i]->getLength() >= $nSize) {\n                $i++;\n            }\n        }\n\n        $exponents = [];\n        $coefficients = [2 => $primes[2]->modInverse($primes[1])];\n\n        foreach ($primes as $i => $prime) {\n            $temp = $prime->subtract(self::$one);\n            $exponents[$i] = $this->modulus->modInverse($temp);\n        }\n\n        return $type::savePrivateKey($this->modulus, $this->publicExponent, $this->exponent, $primes, $exponents, $coefficients, $this->password, $options);\n        */\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php",
    "content": "<?php\n\n/**\n * RSA Public Key\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt\\RSA;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Crypt\\RSA\\Formats\\Keys\\PSS;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\Exception\\UnsupportedFormatException;\nuse phpseclib3\\File\\ASN1;\nuse phpseclib3\\File\\ASN1\\Maps\\DigestInfo;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Raw RSA Key Handler\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nfinal class PublicKey extends RSA implements Common\\PublicKey\n{\n    use Common\\Traits\\Fingerprint;\n\n    /**\n     * Exponentiate\n     *\n     * @param BigInteger $x\n     * @return BigInteger\n     */\n    private function exponentiate(BigInteger $x)\n    {\n        return $x->modPow($this->exponent, $this->modulus);\n    }\n\n    /**\n     * RSAVP1\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}.\n     *\n     * @param BigInteger $s\n     * @return bool|BigInteger\n     */\n    private function rsavp1($s)\n    {\n        if ($s->compare(self::$zero) < 0 || $s->compare($this->modulus) > 0) {\n            return false;\n        }\n        return $this->exponentiate($s);\n    }\n\n    /**\n     * RSASSA-PKCS1-V1_5-VERIFY\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}.\n     *\n     * @param string $m\n     * @param string $s\n     * @throws \\LengthException if the RSA modulus is too short\n     * @return bool\n     */\n    private function rsassa_pkcs1_v1_5_verify($m, $s)\n    {\n        // Length checking\n\n        if (strlen($s) != $this->k) {\n            return false;\n        }\n\n        // RSA verification\n\n        $s = $this->os2ip($s);\n        $m2 = $this->rsavp1($s);\n        if ($m2 === false) {\n            return false;\n        }\n        $em = $this->i2osp($m2, $this->k);\n        if ($em === false) {\n            return false;\n        }\n\n        // EMSA-PKCS1-v1_5 encoding\n\n        $exception = false;\n\n        // If the encoding operation outputs \"intended encoded message length too short,\" output \"RSA modulus\n        // too short\" and stop.\n        try {\n            $em2 = $this->emsa_pkcs1_v1_5_encode($m, $this->k);\n            $r1 = hash_equals($em, $em2);\n        } catch (\\LengthException $e) {\n            $exception = true;\n        }\n\n        try {\n            $em3 = $this->emsa_pkcs1_v1_5_encode_without_null($m, $this->k);\n            $r2 = hash_equals($em, $em3);\n        } catch (\\LengthException $e) {\n            $exception = true;\n        } catch (UnsupportedAlgorithmException $e) {\n            $r2 = false;\n        }\n\n        if ($exception) {\n            throw new \\LengthException('RSA modulus too short');\n        }\n\n        // Compare\n        return $r1 || $r2;\n    }\n\n    /**\n     * RSASSA-PKCS1-V1_5-VERIFY (relaxed matching)\n     *\n     * Per {@link http://tools.ietf.org/html/rfc3447#page-43 RFC3447#page-43} PKCS1 v1.5\n     * specified the use BER encoding rather than DER encoding that PKCS1 v2.0 specified.\n     * This means that under rare conditions you can have a perfectly valid v1.5 signature\n     * that fails to validate with _rsassa_pkcs1_v1_5_verify(). PKCS1 v2.1 also recommends\n     * that if you're going to validate these types of signatures you \"should indicate\n     * whether the underlying BER encoding is a DER encoding and hence whether the signature\n     * is valid with respect to the specification given in [PKCS1 v2.0+]\". so if you do\n     * $rsa->getLastPadding() and get RSA::PADDING_RELAXED_PKCS1 back instead of\n     * RSA::PADDING_PKCS1... that means BER encoding was used.\n     *\n     * @param string $m\n     * @param string $s\n     * @return bool\n     */\n    private function rsassa_pkcs1_v1_5_relaxed_verify($m, $s)\n    {\n        // Length checking\n\n        if (strlen($s) != $this->k) {\n            return false;\n        }\n\n        // RSA verification\n\n        $s = $this->os2ip($s);\n        $m2 = $this->rsavp1($s);\n        if ($m2 === false) {\n            return false;\n        }\n        $em = $this->i2osp($m2, $this->k);\n        if ($em === false) {\n            return false;\n        }\n\n        if (Strings::shift($em, 2) != \"\\0\\1\") {\n            return false;\n        }\n\n        $em = ltrim($em, \"\\xFF\");\n        if (Strings::shift($em) != \"\\0\") {\n            return false;\n        }\n\n        $decoded = ASN1::decodeBER($em);\n        if (!is_array($decoded) || empty($decoded[0]) || strlen($em) > $decoded[0]['length']) {\n            return false;\n        }\n\n        static $oids;\n        if (!isset($oids)) {\n            $oids = [\n                'md2' => '1.2.840.113549.2.2',\n                'md4' => '1.2.840.113549.2.4', // from PKCS1 v1.5\n                'md5' => '1.2.840.113549.2.5',\n                'id-sha1' => '1.3.14.3.2.26',\n                'id-sha256' => '2.16.840.1.101.3.4.2.1',\n                'id-sha384' => '2.16.840.1.101.3.4.2.2',\n                'id-sha512' => '2.16.840.1.101.3.4.2.3',\n                // from PKCS1 v2.2\n                'id-sha224' => '2.16.840.1.101.3.4.2.4',\n                'id-sha512/224' => '2.16.840.1.101.3.4.2.5',\n                'id-sha512/256' => '2.16.840.1.101.3.4.2.6',\n            ];\n            ASN1::loadOIDs($oids);\n        }\n\n        $decoded = ASN1::asn1map($decoded[0], DigestInfo::MAP);\n        if (!isset($decoded) || $decoded === false) {\n            return false;\n        }\n\n        if (!isset($oids[$decoded['digestAlgorithm']['algorithm']])) {\n            return false;\n        }\n\n        if (isset($decoded['digestAlgorithm']['parameters']) && $decoded['digestAlgorithm']['parameters'] !== ['null' => '']) {\n            return false;\n        }\n\n        $hash = $decoded['digestAlgorithm']['algorithm'];\n        $hash = substr($hash, 0, 3) == 'id-' ?\n            substr($hash, 3) :\n            $hash;\n        $hash = new Hash($hash);\n        $em = $hash->hash($m);\n        $em2 = $decoded['digest'];\n\n        return hash_equals($em, $em2);\n    }\n\n    /**\n     * EMSA-PSS-VERIFY\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}.\n     *\n     * @param string $m\n     * @param string $em\n     * @param int $emBits\n     * @return string\n     */\n    private function emsa_pss_verify($m, $em, $emBits)\n    {\n        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a \"Label too long\" error\n        // be output.\n\n        $emLen = ($emBits + 7) >> 3; // ie. ceil($emBits / 8);\n        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;\n\n        $mHash = $this->hash->hash($m);\n        if ($emLen < $this->hLen + $sLen + 2) {\n            return false;\n        }\n\n        if ($em[strlen($em) - 1] != chr(0xBC)) {\n            return false;\n        }\n\n        $maskedDB = substr($em, 0, -$this->hLen - 1);\n        $h = substr($em, -$this->hLen - 1, $this->hLen);\n        $temp = chr(0xFF << ($emBits & 7));\n        if ((~$maskedDB[0] & $temp) != $temp) {\n            return false;\n        }\n        $dbMask = $this->mgf1($h, $emLen - $this->hLen - 1);\n        $db = $maskedDB ^ $dbMask;\n        $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];\n        $temp = $emLen - $this->hLen - $sLen - 2;\n        if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) {\n            return false;\n        }\n        $salt = substr($db, $temp + 1); // should be $sLen long\n        $m2 = \"\\0\\0\\0\\0\\0\\0\\0\\0\" . $mHash . $salt;\n        $h2 = $this->hash->hash($m2);\n        return hash_equals($h, $h2);\n    }\n\n    /**\n     * RSASSA-PSS-VERIFY\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}.\n     *\n     * @param string $m\n     * @param string $s\n     * @return bool|string\n     */\n    private function rsassa_pss_verify($m, $s)\n    {\n        // Length checking\n\n        if (strlen($s) != $this->k) {\n            return false;\n        }\n\n        // RSA verification\n\n        $modBits = strlen($this->modulus->toBits());\n\n        $s2 = $this->os2ip($s);\n        $m2 = $this->rsavp1($s2);\n        $em = $this->i2osp($m2, $this->k);\n        if ($em === false) {\n            return false;\n        }\n\n        // EMSA-PSS verification\n\n        return $this->emsa_pss_verify($m, $em, $modBits - 1);\n    }\n\n    /**\n     * Verifies a signature\n     *\n     * @see self::sign()\n     * @param string $message\n     * @param string $signature\n     * @return bool\n     */\n    public function verify($message, $signature)\n    {\n        switch ($this->signaturePadding) {\n            case self::SIGNATURE_RELAXED_PKCS1:\n                return $this->rsassa_pkcs1_v1_5_relaxed_verify($message, $signature);\n            case self::SIGNATURE_PKCS1:\n                return $this->rsassa_pkcs1_v1_5_verify($message, $signature);\n            //case self::SIGNATURE_PSS:\n            default:\n                return $this->rsassa_pss_verify($message, $signature);\n        }\n    }\n\n    /**\n     * RSAES-PKCS1-V1_5-ENCRYPT\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}.\n     *\n     * @param string $m\n     * @param bool $pkcs15_compat optional\n     * @throws \\LengthException if strlen($m) > $this->k - 11\n     * @return bool|string\n     */\n    private function rsaes_pkcs1_v1_5_encrypt($m, $pkcs15_compat = false)\n    {\n        $mLen = strlen($m);\n\n        // Length checking\n\n        if ($mLen > $this->k - 11) {\n            throw new \\LengthException('Message too long');\n        }\n\n        // EME-PKCS1-v1_5 encoding\n\n        $psLen = $this->k - $mLen - 3;\n        $ps = '';\n        while (strlen($ps) != $psLen) {\n            $temp = Random::string($psLen - strlen($ps));\n            $temp = str_replace(\"\\x00\", '', $temp);\n            $ps .= $temp;\n        }\n        $type = 2;\n        $em = chr(0) . chr($type) . $ps . chr(0) . $m;\n\n        // RSA encryption\n        $m = $this->os2ip($em);\n        $c = $this->rsaep($m);\n        $c = $this->i2osp($c, $this->k);\n\n        // Output the ciphertext C\n\n        return $c;\n    }\n\n    /**\n     * RSAES-OAEP-ENCRYPT\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and\n     * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}.\n     *\n     * @param string $m\n     * @throws \\LengthException if strlen($m) > $this->k - 2 * $this->hLen - 2\n     * @return string\n     */\n    private function rsaes_oaep_encrypt($m)\n    {\n        $mLen = strlen($m);\n\n        // Length checking\n\n        // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a \"Label too long\" error\n        // be output.\n\n        if ($mLen > $this->k - 2 * $this->hLen - 2) {\n            throw new \\LengthException('Message too long');\n        }\n\n        // EME-OAEP encoding\n\n        $lHash = $this->hash->hash($this->label);\n        $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);\n        $db = $lHash . $ps . chr(1) . $m;\n        $seed = Random::string($this->hLen);\n        $dbMask = $this->mgf1($seed, $this->k - $this->hLen - 1);\n        $maskedDB = $db ^ $dbMask;\n        $seedMask = $this->mgf1($maskedDB, $this->hLen);\n        $maskedSeed = $seed ^ $seedMask;\n        $em = chr(0) . $maskedSeed . $maskedDB;\n\n        // RSA encryption\n\n        $m = $this->os2ip($em);\n        $c = $this->rsaep($m);\n        $c = $this->i2osp($c, $this->k);\n\n        // Output the ciphertext C\n\n        return $c;\n    }\n\n    /**\n     * RSAEP\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}.\n     *\n     * @param BigInteger $m\n     * @return bool|BigInteger\n     */\n    private function rsaep($m)\n    {\n        if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {\n            throw new \\OutOfRangeException('Message representative out of range');\n        }\n        return $this->exponentiate($m);\n    }\n\n    /**\n     * Raw Encryption / Decryption\n     *\n     * Doesn't use padding and is not recommended.\n     *\n     * @param string $m\n     * @return bool|string\n     * @throws \\LengthException if strlen($m) > $this->k\n     */\n    private function raw_encrypt($m)\n    {\n        if (strlen($m) > $this->k) {\n            throw new \\LengthException('Message too long');\n        }\n\n        $temp = $this->os2ip($m);\n        $temp = $this->rsaep($temp);\n        return  $this->i2osp($temp, $this->k);\n    }\n\n    /**\n     * Encryption\n     *\n     * Both self::PADDING_OAEP and self::PADDING_PKCS1 both place limits on how long $plaintext can be.\n     * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will\n     * be concatenated together.\n     *\n     * @see self::decrypt()\n     * @param string $plaintext\n     * @return bool|string\n     * @throws \\LengthException if the RSA modulus is too short\n     */\n    public function encrypt($plaintext)\n    {\n        switch ($this->encryptionPadding) {\n            case self::ENCRYPTION_NONE:\n                return $this->raw_encrypt($plaintext);\n            case self::ENCRYPTION_PKCS1:\n                return $this->rsaes_pkcs1_v1_5_encrypt($plaintext);\n            //case self::ENCRYPTION_OAEP:\n            default:\n                return $this->rsaes_oaep_encrypt($plaintext);\n        }\n    }\n\n    /**\n     * Returns the public key\n     *\n     * The public key is only returned under two circumstances - if the private key had the public key embedded within it\n     * or if the public key was set via setPublicKey().  If the currently loaded key is supposed to be the public key this\n     * function won't return it since this library, for the most part, doesn't distinguish between public and private keys.\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return mixed\n     */\n    public function toString($type, array $options = [])\n    {\n        $type = self::validatePlugin('Keys', $type, 'savePublicKey');\n\n        if ($type == PSS::class) {\n            if ($this->signaturePadding == self::SIGNATURE_PSS) {\n                $options += [\n                    'hash' => $this->hash->getHash(),\n                    'MGFHash' => $this->mgfHash->getHash(),\n                    'saltLength' => $this->getSaltLength()\n                ];\n            } else {\n                throw new UnsupportedFormatException('The PSS format can only be used when the signature method has been explicitly set to PSS');\n            }\n        }\n\n        return $type::savePublicKey($this->modulus, $this->publicExponent, $options);\n    }\n\n    /**\n     * Converts a public key to a private key\n     *\n     * @return RSA\n     */\n    public function asPrivateKey()\n    {\n        $new = new PrivateKey();\n        $new->exponent = $this->exponent;\n        $new->modulus = $this->modulus;\n        $new->k = $this->k;\n        $new->format = $this->format;\n        return $new\n            ->withHash($this->hash->getHash())\n            ->withMGFHash($this->mgfHash->getHash())\n            ->withSaltLength($this->sLen)\n            ->withLabel($this->label)\n            ->withPadding($this->signaturePadding | $this->encryptionPadding);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php",
    "content": "<?php\n\n/**\n * Pure-PHP PKCS#1 (v2.1) compliant implementation of RSA.\n *\n * PHP version 5\n *\n * Here's an example of how to encrypt and decrypt text with this library:\n * <code>\n * <?php\n * include 'vendor/autoload.php';\n *\n * $private = Crypt\\RSA::createKey();\n * $public = $private->getPublicKey();\n *\n * $plaintext = 'terrafrost';\n *\n * $ciphertext = $public->encrypt($plaintext);\n *\n * echo $private->decrypt($ciphertext);\n * ?>\n * </code>\n *\n * Here's an example of how to create signatures and verify signatures with this library:\n * <code>\n * <?php\n * include 'vendor/autoload.php';\n *\n * $private = Crypt\\RSA::createKey();\n * $public = $private->getPublicKey();\n *\n * $plaintext = 'terrafrost';\n *\n * $signature = $private->sign($plaintext);\n *\n * echo $public->verify($plaintext, $signature) ? 'verified' : 'unverified';\n * ?>\n * </code>\n *\n * One thing to consider when using this: so phpseclib uses PSS mode by default.\n * Technically, id-RSASSA-PSS has a different key format than rsaEncryption. So\n * should phpseclib save to the id-RSASSA-PSS format by default or the\n * rsaEncryption format? For stand-alone keys I figure rsaEncryption is better\n * because SSH doesn't use PSS and idk how many SSH servers would be able to\n * decode an id-RSASSA-PSS key. For X.509 certificates the id-RSASSA-PSS\n * format is used by default (unless you change it up to use PKCS1 instead)\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\AsymmetricKey;\nuse phpseclib3\\Crypt\\RSA\\Formats\\Keys\\PSS;\nuse phpseclib3\\Crypt\\RSA\\PrivateKey;\nuse phpseclib3\\Crypt\\RSA\\PublicKey;\nuse phpseclib3\\Exception\\InconsistentSetupException;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Pure-PHP PKCS#1 compliant implementation of RSA.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RSA extends AsymmetricKey\n{\n    /**\n     * Algorithm Name\n     *\n     * @var string\n     */\n    const ALGORITHM = 'RSA';\n\n    /**\n     * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}\n     * (OAEP) for encryption / decryption.\n     *\n     * Uses sha256 by default\n     *\n     * @see self::setHash()\n     * @see self::setMGFHash()\n     * @see self::encrypt()\n     * @see self::decrypt()\n     */\n    const ENCRYPTION_OAEP = 1;\n\n    /**\n     * Use PKCS#1 padding.\n     *\n     * Although self::PADDING_OAEP / self::PADDING_PSS  offers more security, including PKCS#1 padding is necessary for purposes of backwards\n     * compatibility with protocols (like SSH-1) written before OAEP's introduction.\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     */\n    const ENCRYPTION_PKCS1 = 2;\n\n    /**\n     * Do not use any padding\n     *\n     * Although this method is not recommended it can none-the-less sometimes be useful if you're trying to decrypt some legacy\n     * stuff, if you're trying to diagnose why an encrypted message isn't decrypting, etc.\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     */\n    const ENCRYPTION_NONE = 4;\n\n    /**\n     * Use the Probabilistic Signature Scheme for signing\n     *\n     * Uses sha256 and 0 as the salt length\n     *\n     * @see self::setSaltLength()\n     * @see self::setMGFHash()\n     * @see self::setHash()\n     * @see self::sign()\n     * @see self::verify()\n     * @see self::setHash()\n     */\n    const SIGNATURE_PSS = 16;\n\n    /**\n     * Use a relaxed version of PKCS#1 padding for signature verification\n     *\n     * @see self::sign()\n     * @see self::verify()\n     * @see self::setHash()\n     */\n    const SIGNATURE_RELAXED_PKCS1 = 32;\n\n    /**\n     * Use PKCS#1 padding for signature verification\n     *\n     * @see self::sign()\n     * @see self::verify()\n     * @see self::setHash()\n     */\n    const SIGNATURE_PKCS1 = 64;\n\n    /**\n     * Encryption padding mode\n     *\n     * @var int\n     */\n    protected $encryptionPadding = self::ENCRYPTION_OAEP;\n\n    /**\n     * Signature padding mode\n     *\n     * @var int\n     */\n    protected $signaturePadding = self::SIGNATURE_PSS;\n\n    /**\n     * Length of hash function output\n     *\n     * @var int\n     */\n    protected $hLen;\n\n    /**\n     * Length of salt\n     *\n     * @var int\n     */\n    protected $sLen;\n\n    /**\n     * Label\n     *\n     * @var string\n     */\n    protected $label = '';\n\n    /**\n     * Hash function for the Mask Generation Function\n     *\n     * @var Hash\n     */\n    protected $mgfHash;\n\n    /**\n     * Length of MGF hash function output\n     *\n     * @var int\n     */\n    protected $mgfHLen;\n\n    /**\n     * Modulus (ie. n)\n     *\n     * @var Math\\BigInteger\n     */\n    protected $modulus;\n\n    /**\n     * Modulus length\n     *\n     * @var Math\\BigInteger\n     */\n    protected $k;\n\n    /**\n     * Exponent (ie. e or d)\n     *\n     * @var Math\\BigInteger\n     */\n    protected $exponent;\n\n    /**\n     * Default public exponent\n     *\n     * @var int\n     * @link http://en.wikipedia.org/wiki/65537_%28number%29\n     */\n    private static $defaultExponent = 65537;\n\n    /**\n     * Enable Blinding?\n     *\n     * @var bool\n     */\n    protected static $enableBlinding = true;\n\n    /**\n     * OpenSSL configuration file name.\n     *\n     * @see self::createKey()\n     * @var ?string\n     */\n    protected static $configFile;\n\n    /**\n     * Smallest Prime\n     *\n     * Per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller\n     * than 256 bits. As a consequence if the key you're trying to create is 1024 bits and you've set smallestPrime\n     * to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). At least if\n     * engine is set to self::ENGINE_INTERNAL. If Engine is set to self::ENGINE_OPENSSL then smallest Prime is\n     * ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key generation when there's\n     * a chance neither gmp nor OpenSSL are installed)\n     *\n     * @var int\n     */\n    private static $smallestPrime = 4096;\n\n    /**\n     * Public Exponent\n     *\n     * @var Math\\BigInteger\n     */\n    protected $publicExponent;\n\n    /**\n     * Sets the public exponent for key generation\n     *\n     * This will be 65537 unless changed.\n     *\n     * @param int $val\n     */\n    public static function setExponent($val)\n    {\n        self::$defaultExponent = $val;\n    }\n\n    /**\n     * Sets the smallest prime number in bits. Used for key generation\n     *\n     * This will be 4096 unless changed.\n     *\n     * @param int $val\n     */\n    public static function setSmallestPrime($val)\n    {\n        self::$smallestPrime = $val;\n    }\n\n    /**\n     * Sets the OpenSSL config file path\n     *\n     * Set to the empty string to use the default config file\n     *\n     * @param string $val\n     */\n    public static function setOpenSSLConfigPath($val)\n    {\n        self::$configFile = $val;\n    }\n\n    /**\n     * Create a private key\n     *\n     * The public key can be extracted from the private key\n     *\n     * @return PrivateKey\n     * @param int $bits\n     */\n    public static function createKey($bits = 2048)\n    {\n        self::initialize_static_variables();\n\n        $class = new \\ReflectionClass(static::class);\n        if ($class->isFinal()) {\n            throw new \\RuntimeException('createKey() should not be called from final classes (' . static::class . ')');\n        }\n\n        $regSize = $bits >> 1; // divide by two to see how many bits P and Q would be\n        if ($regSize > self::$smallestPrime) {\n            $num_primes = floor($bits / self::$smallestPrime);\n            $regSize = self::$smallestPrime;\n        } else {\n            $num_primes = 2;\n        }\n\n        if ($num_primes == 2 && $bits >= 384 && self::$defaultExponent == 65537) {\n            if (!isset(self::$engines['PHP'])) {\n                self::useBestEngine();\n            }\n\n            // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum\n            if (self::$engines['OpenSSL']) {\n                $config = [];\n                if (self::$configFile) {\n                    $config['config'] = self::$configFile;\n                }\n                $rsa = openssl_pkey_new(['private_key_bits' => $bits] + $config);\n                openssl_pkey_export($rsa, $privatekeystr, null, $config);\n\n                // clear the buffer of error strings stemming from a minimalistic openssl.cnf\n                // https://github.com/php/php-src/issues/11054 talks about other errors this'll pick up\n                while (openssl_error_string() !== false) {\n                }\n\n                return RSA::load($privatekeystr);\n            }\n        }\n\n        static $e;\n        if (!isset($e)) {\n            $e = new BigInteger(self::$defaultExponent);\n        }\n\n        $n = clone self::$one;\n        $exponents = $coefficients = $primes = [];\n        $lcm = [\n            'top' => clone self::$one,\n            'bottom' => false\n        ];\n\n        do {\n            for ($i = 1; $i <= $num_primes; $i++) {\n                if ($i != $num_primes) {\n                    $primes[$i] = BigInteger::randomPrime($regSize);\n                } else {\n                    $minMax = BigInteger::minMaxBits($bits);\n                    $min = $minMax['min'];\n                    $max = $minMax['max'];\n                    list($min) = $min->divide($n);\n                    $min = $min->add(self::$one);\n                    list($max) = $max->divide($n);\n                    $primes[$i] = BigInteger::randomRangePrime($min, $max);\n                }\n\n                // the first coefficient is calculated differently from the rest\n                // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1])\n                if ($i > 2) {\n                    $coefficients[$i] = $n->modInverse($primes[$i]);\n                }\n\n                $n = $n->multiply($primes[$i]);\n\n                $temp = $primes[$i]->subtract(self::$one);\n\n                // textbook RSA implementations use Euler's totient function instead of the least common multiple.\n                // see http://en.wikipedia.org/wiki/Euler%27s_totient_function\n                $lcm['top'] = $lcm['top']->multiply($temp);\n                $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp);\n            }\n\n            list($temp) = $lcm['top']->divide($lcm['bottom']);\n            $gcd = $temp->gcd($e);\n            $i0 = 1;\n        } while (!$gcd->equals(self::$one));\n\n        $coefficients[2] = $primes[2]->modInverse($primes[1]);\n\n        $d = $e->modInverse($temp);\n\n        foreach ($primes as $i => $prime) {\n            $temp = $prime->subtract(self::$one);\n            $exponents[$i] = $e->modInverse($temp);\n        }\n\n        // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.2>:\n        // RSAPrivateKey ::= SEQUENCE {\n        //     version           Version,\n        //     modulus           INTEGER,  -- n\n        //     publicExponent    INTEGER,  -- e\n        //     privateExponent   INTEGER,  -- d\n        //     prime1            INTEGER,  -- p\n        //     prime2            INTEGER,  -- q\n        //     exponent1         INTEGER,  -- d mod (p-1)\n        //     exponent2         INTEGER,  -- d mod (q-1)\n        //     coefficient       INTEGER,  -- (inverse of q) mod p\n        //     otherPrimeInfos   OtherPrimeInfos OPTIONAL\n        // }\n        $privatekey = new PrivateKey();\n        $privatekey->modulus = $n;\n        $privatekey->k = $bits >> 3;\n        $privatekey->publicExponent = $e;\n        $privatekey->exponent = $d;\n        $privatekey->primes = $primes;\n        $privatekey->exponents = $exponents;\n        $privatekey->coefficients = $coefficients;\n\n        /*\n        $publickey = new PublicKey;\n        $publickey->modulus = $n;\n        $publickey->k = $bits >> 3;\n        $publickey->exponent = $e;\n        $publickey->publicExponent = $e;\n        $publickey->isPublic = true;\n        */\n\n        return $privatekey;\n    }\n\n    /**\n     * OnLoad Handler\n     *\n     * @return bool\n     */\n    protected static function onLoad(array $components)\n    {\n        $key = $components['isPublicKey'] ?\n            new PublicKey() :\n            new PrivateKey();\n\n        $key->modulus = $components['modulus'];\n        $key->publicExponent = $components['publicExponent'];\n        $key->k = $key->modulus->getLengthInBytes();\n\n        if ($components['isPublicKey'] || !isset($components['privateExponent'])) {\n            $key->exponent = $key->publicExponent;\n        } else {\n            $key->privateExponent = $components['privateExponent'];\n            $key->exponent = $key->privateExponent;\n            $key->primes = $components['primes'];\n            $key->exponents = $components['exponents'];\n            $key->coefficients = $components['coefficients'];\n        }\n\n        if ($components['format'] == PSS::class) {\n            // in the X509 world RSA keys are assumed to use PKCS1 padding by default. only if the key is\n            // explicitly a PSS key is the use of PSS assumed. phpseclib does not work like this. phpseclib\n            // uses PSS padding by default. it assumes the more secure method by default and altho it provides\n            // for the less secure PKCS1 method you have to go out of your way to use it. this is consistent\n            // with the latest trends in crypto. libsodium (NaCl) is actually a little more extreme in that\n            // not only does it defaults to the most secure methods - it doesn't even let you choose less\n            // secure methods\n            //$key = $key->withPadding(self::SIGNATURE_PSS);\n            if (isset($components['hash'])) {\n                $key = $key->withHash($components['hash']);\n            }\n            if (isset($components['MGFHash'])) {\n                $key = $key->withMGFHash($components['MGFHash']);\n            }\n            if (isset($components['saltLength'])) {\n                $key = $key->withSaltLength($components['saltLength']);\n            }\n        }\n\n        return $key;\n    }\n\n    /**\n     * Initialize static variables\n     */\n    protected static function initialize_static_variables()\n    {\n        if (!isset(self::$configFile)) {\n            self::$configFile = dirname(__FILE__) . '/../openssl.cnf';\n        }\n\n        parent::initialize_static_variables();\n    }\n\n    /**\n     * Constructor\n     *\n     * PublicKey and PrivateKey objects can only be created from abstract RSA class\n     */\n    protected function __construct()\n    {\n        parent::__construct();\n\n        $this->hLen = $this->hash->getLengthInBytes();\n        $this->mgfHash = new Hash('sha256');\n        $this->mgfHLen = $this->mgfHash->getLengthInBytes();\n    }\n\n    /**\n     * Integer-to-Octet-String primitive\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}.\n     *\n     * @param bool|Math\\BigInteger $x\n     * @param int $xLen\n     * @return bool|string\n     */\n    protected function i2osp($x, $xLen)\n    {\n        if ($x === false) {\n            return false;\n        }\n        $x = $x->toBytes();\n        if (strlen($x) > $xLen) {\n            throw new \\OutOfRangeException('Resultant string length out of range');\n        }\n        return str_pad($x, $xLen, chr(0), STR_PAD_LEFT);\n    }\n\n    /**\n     * Octet-String-to-Integer primitive\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}.\n     *\n     * @param string $x\n     * @return Math\\BigInteger\n     */\n    protected function os2ip($x)\n    {\n        return new BigInteger($x, 256);\n    }\n\n    /**\n     * EMSA-PKCS1-V1_5-ENCODE\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}.\n     *\n     * @param string $m\n     * @param int $emLen\n     * @throws \\LengthException if the intended encoded message length is too short\n     * @return string\n     */\n    protected function emsa_pkcs1_v1_5_encode($m, $emLen)\n    {\n        $h = $this->hash->hash($m);\n\n        // see http://tools.ietf.org/html/rfc3447#page-43\n        switch ($this->hash->getHash()) {\n            case 'md2':\n                $t = \"\\x30\\x20\\x30\\x0c\\x06\\x08\\x2a\\x86\\x48\\x86\\xf7\\x0d\\x02\\x02\\x05\\x00\\x04\\x10\";\n                break;\n            case 'md5':\n                $t = \"\\x30\\x20\\x30\\x0c\\x06\\x08\\x2a\\x86\\x48\\x86\\xf7\\x0d\\x02\\x05\\x05\\x00\\x04\\x10\";\n                break;\n            case 'sha1':\n                $t = \"\\x30\\x21\\x30\\x09\\x06\\x05\\x2b\\x0e\\x03\\x02\\x1a\\x05\\x00\\x04\\x14\";\n                break;\n            case 'sha256':\n                $t = \"\\x30\\x31\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x01\\x05\\x00\\x04\\x20\";\n                break;\n            case 'sha384':\n                $t = \"\\x30\\x41\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x02\\x05\\x00\\x04\\x30\";\n                break;\n            case 'sha512':\n                $t = \"\\x30\\x51\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x03\\x05\\x00\\x04\\x40\";\n                break;\n            // from https://www.emc.com/collateral/white-papers/h11300-pkcs-1v2-2-rsa-cryptography-standard-wp.pdf#page=40\n            case 'sha224':\n                $t = \"\\x30\\x2d\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x04\\x05\\x00\\x04\\x1c\";\n                break;\n            case 'sha512/224':\n                $t = \"\\x30\\x2d\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x05\\x05\\x00\\x04\\x1c\";\n                break;\n            case 'sha512/256':\n                $t = \"\\x30\\x31\\x30\\x0d\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x06\\x05\\x00\\x04\\x20\";\n        }\n        $t .= $h;\n        $tLen = strlen($t);\n\n        if ($emLen < $tLen + 11) {\n            throw new \\LengthException('Intended encoded message length too short');\n        }\n\n        $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);\n\n        $em = \"\\0\\1$ps\\0$t\";\n\n        return $em;\n    }\n\n    /**\n     * EMSA-PKCS1-V1_5-ENCODE (without NULL)\n     *\n     * Quoting https://tools.ietf.org/html/rfc8017#page-65,\n     *\n     * \"The parameters field associated with id-sha1, id-sha224, id-sha256,\n     *  id-sha384, id-sha512, id-sha512/224, and id-sha512/256 should\n     *  generally be omitted, but if present, it shall have a value of type\n     *  NULL\"\n     *\n     * @param string $m\n     * @param int $emLen\n     * @return string\n     */\n    protected function emsa_pkcs1_v1_5_encode_without_null($m, $emLen)\n    {\n        $h = $this->hash->hash($m);\n\n        // see http://tools.ietf.org/html/rfc3447#page-43\n        switch ($this->hash->getHash()) {\n            case 'sha1':\n                $t = \"\\x30\\x1f\\x30\\x07\\x06\\x05\\x2b\\x0e\\x03\\x02\\x1a\\x04\\x14\";\n                break;\n            case 'sha256':\n                $t = \"\\x30\\x2f\\x30\\x0b\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x01\\x04\\x20\";\n                break;\n            case 'sha384':\n                $t = \"\\x30\\x3f\\x30\\x0b\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x02\\x04\\x30\";\n                break;\n            case 'sha512':\n                $t = \"\\x30\\x4f\\x30\\x0b\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x03\\x04\\x40\";\n                break;\n            // from https://www.emc.com/collateral/white-papers/h11300-pkcs-1v2-2-rsa-cryptography-standard-wp.pdf#page=40\n            case 'sha224':\n                $t = \"\\x30\\x2b\\x30\\x0b\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x04\\x04\\x1c\";\n                break;\n            case 'sha512/224':\n                $t = \"\\x30\\x2b\\x30\\x0b\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x05\\x04\\x1c\";\n                break;\n            case 'sha512/256':\n                $t = \"\\x30\\x2f\\x30\\x0b\\x06\\x09\\x60\\x86\\x48\\x01\\x65\\x03\\x04\\x02\\x06\\x04\\x20\";\n                break;\n            default:\n                throw new UnsupportedAlgorithmException('md2 and md5 require NULLs');\n        }\n        $t .= $h;\n        $tLen = strlen($t);\n\n        if ($emLen < $tLen + 11) {\n            throw new \\LengthException('Intended encoded message length too short');\n        }\n\n        $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);\n\n        $em = \"\\0\\1$ps\\0$t\";\n\n        return $em;\n    }\n\n    /**\n     * MGF1\n     *\n     * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}.\n     *\n     * @param string $mgfSeed\n     * @param int $maskLen\n     * @return string\n     */\n    protected function mgf1($mgfSeed, $maskLen)\n    {\n        // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a \"Mask too long\" error be output.\n\n        $t = '';\n        $count = ceil($maskLen / $this->mgfHLen);\n        for ($i = 0; $i < $count; $i++) {\n            $c = pack('N', $i);\n            $t .= $this->mgfHash->hash($mgfSeed . $c);\n        }\n\n        return substr($t, 0, $maskLen);\n    }\n\n    /**\n     * Returns the key size\n     *\n     * More specifically, this returns the size of the modulo in bits.\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return !isset($this->modulus) ? 0 : $this->modulus->getLength();\n    }\n\n    /**\n     * Determines which hashing function should be used\n     *\n     * Used with signature production / verification and (if the encryption mode is self::PADDING_OAEP) encryption and\n     * decryption.\n     *\n     * @param string $hash\n     */\n    public function withHash($hash)\n    {\n        $new = clone $this;\n\n        // Crypt\\Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.\n        switch (strtolower($hash)) {\n            case 'md2':\n            case 'md5':\n            case 'sha1':\n            case 'sha256':\n            case 'sha384':\n            case 'sha512':\n            case 'sha224':\n            case 'sha512/224':\n            case 'sha512/256':\n                $new->hash = new Hash($hash);\n                break;\n            default:\n                throw new UnsupportedAlgorithmException(\n                    'The only supported hash algorithms are: md2, md5, sha1, sha256, sha384, sha512, sha224, sha512/224, sha512/256'\n                );\n        }\n        $new->hLen = $new->hash->getLengthInBytes();\n\n        return $new;\n    }\n\n    /**\n     * Determines which hashing function should be used for the mask generation function\n     *\n     * The mask generation function is used by self::PADDING_OAEP and self::PADDING_PSS and although it's\n     * best if Hash and MGFHash are set to the same thing this is not a requirement.\n     *\n     * @param string $hash\n     */\n    public function withMGFHash($hash)\n    {\n        $new = clone $this;\n\n        // Crypt\\Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.\n        switch (strtolower($hash)) {\n            case 'md2':\n            case 'md5':\n            case 'sha1':\n            case 'sha256':\n            case 'sha384':\n            case 'sha512':\n            case 'sha224':\n            case 'sha512/224':\n            case 'sha512/256':\n                $new->mgfHash = new Hash($hash);\n                break;\n            default:\n                throw new UnsupportedAlgorithmException(\n                    'The only supported hash algorithms are: md2, md5, sha1, sha256, sha384, sha512, sha224, sha512/224, sha512/256'\n                );\n        }\n        $new->mgfHLen = $new->mgfHash->getLengthInBytes();\n\n        return $new;\n    }\n\n    /**\n     * Returns the MGF hash algorithm currently being used\n     *\n     */\n    public function getMGFHash()\n    {\n        return clone $this->mgfHash;\n    }\n\n    /**\n     * Determines the salt length\n     *\n     * Used by RSA::PADDING_PSS\n     *\n     * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}:\n     *\n     *    Typical salt lengths in octets are hLen (the length of the output\n     *    of the hash function Hash) and 0.\n     *\n     * @param int $sLen\n     */\n    public function withSaltLength($sLen)\n    {\n        $new = clone $this;\n        $new->sLen = $sLen;\n        return $new;\n    }\n\n    /**\n     * Returns the salt length currently being used\n     *\n     */\n    public function getSaltLength()\n    {\n        return $this->sLen !== null ? $this->sLen : $this->hLen;\n    }\n\n    /**\n     * Determines the label\n     *\n     * Used by RSA::PADDING_OAEP\n     *\n     * To quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}:\n     *\n     *    Both the encryption and the decryption operations of RSAES-OAEP take\n     *    the value of a label L as input.  In this version of PKCS #1, L is\n     *    the empty string; other uses of the label are outside the scope of\n     *    this document.\n     *\n     * @param string $label\n     */\n    public function withLabel($label)\n    {\n        $new = clone $this;\n        $new->label = $label;\n        return $new;\n    }\n\n    /**\n     * Returns the label currently being used\n     *\n     */\n    public function getLabel()\n    {\n        return $this->label;\n    }\n\n    /**\n     * Determines the padding modes\n     *\n     * Example: $key->withPadding(RSA::ENCRYPTION_PKCS1 | RSA::SIGNATURE_PKCS1);\n     *\n     * @param int $padding\n     */\n    public function withPadding($padding)\n    {\n        $masks = [\n            self::ENCRYPTION_OAEP,\n            self::ENCRYPTION_PKCS1,\n            self::ENCRYPTION_NONE\n        ];\n        $encryptedCount = 0;\n        $selected = 0;\n        foreach ($masks as $mask) {\n            if ($padding & $mask) {\n                $selected = $mask;\n                $encryptedCount++;\n            }\n        }\n        if ($encryptedCount > 1) {\n            throw new InconsistentSetupException('Multiple encryption padding modes have been selected; at most only one should be selected');\n        }\n        $encryptionPadding = $selected;\n\n        $masks = [\n            self::SIGNATURE_PSS,\n            self::SIGNATURE_RELAXED_PKCS1,\n            self::SIGNATURE_PKCS1\n        ];\n        $signatureCount = 0;\n        $selected = 0;\n        foreach ($masks as $mask) {\n            if ($padding & $mask) {\n                $selected = $mask;\n                $signatureCount++;\n            }\n        }\n        if ($signatureCount > 1) {\n            throw new InconsistentSetupException('Multiple signature padding modes have been selected; at most only one should be selected');\n        }\n        $signaturePadding = $selected;\n\n        $new = clone $this;\n        if ($encryptedCount) {\n            $new->encryptionPadding = $encryptionPadding;\n        }\n        if ($signatureCount) {\n            $new->signaturePadding = $signaturePadding;\n        }\n        return $new;\n    }\n\n    /**\n     * Returns the padding currently being used\n     *\n     */\n    public function getPadding()\n    {\n        return $this->signaturePadding | $this->encryptionPadding;\n    }\n\n    /**\n     * Returns the current engine being used\n     *\n     * OpenSSL is only used in this class (and it's subclasses) for key generation\n     * Even then it depends on the parameters you're using. It's not used for\n     * multi-prime RSA nor is it used if the key length is outside of the range\n     * supported by OpenSSL\n     *\n     * @see self::useInternalEngine()\n     * @see self::useBestEngine()\n     * @return string\n     */\n    public function getEngine()\n    {\n        if (!isset(self::$engines['PHP'])) {\n            self::useBestEngine();\n        }\n        return self::$engines['OpenSSL'] && self::$defaultExponent == 65537 ?\n            'OpenSSL' :\n            'PHP';\n    }\n\n    /**\n     * Enable RSA Blinding\n     *\n     */\n    public static function enableBlinding()\n    {\n        static::$enableBlinding = true;\n    }\n\n    /**\n     * Disable RSA Blinding\n     *\n     */\n    public static function disableBlinding()\n    {\n        static::$enableBlinding = false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php",
    "content": "<?php\n\n/**\n * Random Number Generator\n *\n * PHP version 5\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    echo bin2hex(\\phpseclib3\\Crypt\\Random::string(8));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\n/**\n * Pure-PHP Random Number Generator\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Random\n{\n    /**\n     * Generate a random string.\n     *\n     * Although microoptimizations are generally discouraged as they impair readability this function is ripe with\n     * microoptimizations because this function has the potential of being called a huge number of times.\n     * eg. for RSA key generation.\n     *\n     * @param int $length\n     * @throws \\RuntimeException if a symmetric cipher is needed but not loaded\n     * @return string\n     */\n    public static function string($length)\n    {\n        if (!$length) {\n            return '';\n        }\n\n        try {\n            return random_bytes($length);\n        } catch (\\Exception $e) {\n            // random_compat will throw an Exception, which in PHP 5 does not implement Throwable\n        } catch (\\Throwable $e) {\n            // If a sufficient source of randomness is unavailable, random_bytes() will throw an\n            // object that implements the Throwable interface (Exception, TypeError, Error).\n            // We don't actually need to do anything here. The string() method should just continue\n            // as normal. Note, however, that if we don't have a sufficient source of randomness for\n            // random_bytes(), most of the other calls here will fail too, so we'll end up using\n            // the PHP implementation.\n        }\n        // at this point we have no choice but to use a pure-PHP CSPRNG\n\n        // cascade entropy across multiple PHP instances by fixing the session and collecting all\n        // environmental variables, including the previous session data and the current session\n        // data.\n        //\n        // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)\n        // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but\n        // PHP isn't low level to be able to use those as sources and on a web server there's not likely\n        // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use\n        // however, a ton of people visiting the website. obviously you don't want to base your seeding\n        // solely on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled\n        // by the user and (2) this isn't just looking at the data sent by the current user - it's based\n        // on the data sent by all users. one user requests the page and a hash of their info is saved.\n        // another user visits the page and the serialization of their data is utilized along with the\n        // server environment stuff and a hash of the previous http request data (which itself utilizes\n        // a hash of the session data before that). certainly an attacker should be assumed to have\n        // full control over his own http requests. he, however, is not going to have control over\n        // everyone's http requests.\n        static $crypto = false, $v;\n        if ($crypto === false) {\n            // save old session data\n            $old_session_id = session_id();\n            $old_use_cookies = ini_get('session.use_cookies');\n            $old_session_cache_limiter = session_cache_limiter();\n            $_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;\n            if ($old_session_id != '') {\n                session_write_close();\n            }\n\n            session_id(1);\n            ini_set('session.use_cookies', 0);\n            session_cache_limiter('');\n            session_start();\n\n            $v = (isset($_SERVER) ? self::safe_serialize($_SERVER) : '') .\n                 (isset($_POST) ? self::safe_serialize($_POST) : '') .\n                 (isset($_GET) ? self::safe_serialize($_GET) : '') .\n                 (isset($_COOKIE) ? self::safe_serialize($_COOKIE) : '') .\n                 // as of PHP 8.1 $GLOBALS can't be accessed by reference, which eliminates\n                 // the need for phpseclib_safe_serialize. see https://wiki.php.net/rfc/restrict_globals_usage\n                 // for more info\n                 (version_compare(PHP_VERSION, '8.1.0', '>=') ? serialize($GLOBALS) : self::safe_serialize($GLOBALS)) .\n                 self::safe_serialize($_SESSION) .\n                 self::safe_serialize($_OLD_SESSION);\n            $v = $seed = $_SESSION['seed'] = sha1($v, true);\n            if (!isset($_SESSION['count'])) {\n                $_SESSION['count'] = 0;\n            }\n            $_SESSION['count']++;\n\n            session_write_close();\n\n            // restore old session data\n            if ($old_session_id != '') {\n                session_id($old_session_id);\n                session_start();\n                ini_set('session.use_cookies', $old_use_cookies);\n                session_cache_limiter($old_session_cache_limiter);\n            } else {\n                if ($_OLD_SESSION !== false) {\n                    $_SESSION = $_OLD_SESSION;\n                    unset($_OLD_SESSION);\n                } else {\n                    unset($_SESSION);\n                }\n            }\n\n            // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.\n            // the IV client to server is the hash of that \"nonce\" with the letter A and for the encryption key it's the letter C.\n            // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the\n            // original hash and the current hash. we'll be emulating that. for more info see the following URL:\n            //\n            // http://tools.ietf.org/html/rfc4253#section-7.2\n            //\n            // see the is_string($crypto) part for an example of how to expand the keys\n            $key = sha1($seed . 'A', true);\n            $iv = sha1($seed . 'C', true);\n\n            // ciphers are used as per the nist.gov link below. also, see this link:\n            //\n            // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives\n            switch (true) {\n                case class_exists('\\phpseclib3\\Crypt\\AES'):\n                    $crypto = new AES('ctr');\n                    break;\n                case class_exists('\\phpseclib3\\Crypt\\Twofish'):\n                    $crypto = new Twofish('ctr');\n                    break;\n                case class_exists('\\phpseclib3\\Crypt\\Blowfish'):\n                    $crypto = new Blowfish('ctr');\n                    break;\n                case class_exists('\\phpseclib3\\Crypt\\TripleDES'):\n                    $crypto = new TripleDES('ctr');\n                    break;\n                case class_exists('\\phpseclib3\\Crypt\\DES'):\n                    $crypto = new DES('ctr');\n                    break;\n                case class_exists('\\phpseclib3\\Crypt\\RC4'):\n                    $crypto = new RC4();\n                    break;\n                default:\n                    throw new \\RuntimeException(__CLASS__ . ' requires at least one symmetric cipher be loaded');\n            }\n\n            $crypto->setKey(substr($key, 0, $crypto->getKeyLength() >> 3));\n            $crypto->setIV(substr($iv, 0, $crypto->getBlockLength() >> 3));\n            $crypto->enableContinuousBuffer();\n        }\n\n        //return $crypto->encrypt(str_repeat(\"\\0\", $length));\n\n        // the following is based off of ANSI X9.31:\n        //\n        // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf\n        //\n        // OpenSSL uses that same standard for it's random numbers:\n        //\n        // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c\n        // (do a search for \"ANS X9.31 A.2.4\")\n        $result = '';\n        while (strlen($result) < $length) {\n            $i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21\n            $r = $crypto->encrypt($i ^ $v); // strlen($v) == 20\n            $v = $crypto->encrypt($r ^ $i); // strlen($r) == 20\n            $result .= $r;\n        }\n\n        return substr($result, 0, $length);\n    }\n\n    /**\n     * Safely serialize variables\n     *\n     * If a class has a private __sleep() it'll emit a warning\n     * @return mixed\n     * @param mixed $arr\n     */\n    private static function safe_serialize(&$arr)\n    {\n        if (is_object($arr)) {\n            return '';\n        }\n        if (!is_array($arr)) {\n            return serialize($arr);\n        }\n        // prevent circular array recursion\n        if (isset($arr['__phpseclib_marker'])) {\n            return '';\n        }\n        $safearr = [];\n        $arr['__phpseclib_marker'] = true;\n        foreach (array_keys($arr) as $key) {\n            // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage\n            if ($key !== '__phpseclib_marker') {\n                $safearr[$key] = self::safe_serialize($arr[$key]);\n            }\n        }\n        unset($arr['__phpseclib_marker']);\n        return serialize($safearr);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of Rijndael.\n *\n * Uses mcrypt, if available/possible, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits.  If\n * {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from\n * {@link self::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's\n * 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until\n * {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.\n *\n * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length.  mcrypt, for example,\n * does not.  AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.\n * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the\n * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224.  Indeed, 160 and 224\n * are first defined as valid key / block lengths in\n * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:\n * Extensions: Other block and Cipher Key lengths.\n * Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).\n *\n * {@internal The variable names are the same as those in\n * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $rijndael = new \\phpseclib3\\Crypt\\Rijndael('ctr');\n *\n *    $rijndael->setKey('abcdefghijklmnop');\n *\n *    $size = 10 * 1024;\n *    $plaintext = '';\n *    for ($i = 0; $i < $size; $i++) {\n *        $plaintext.= 'a';\n *    }\n *\n *    echo $rijndael->decrypt($rijndael->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2008 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\BlockCipher;\nuse phpseclib3\\Exception\\BadDecryptionException;\nuse phpseclib3\\Exception\\BadModeException;\nuse phpseclib3\\Exception\\InconsistentSetupException;\nuse phpseclib3\\Exception\\InsufficientSetupException;\n\n/**\n * Pure-PHP implementation of Rijndael.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Rijndael extends BlockCipher\n{\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.\n     * \\phpseclib3\\Crypt\\Rijndael determines automatically whether mcrypt is useable\n     * or not for the current $block_size/$key_length.\n     * In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.\n     *\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @see Common\\SymmetricKey::engine\n     * @see self::isValidEngine()\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'rijndael-128';\n\n    /**\n     * The Key Schedule\n     *\n     * @see self::setup()\n     * @var array\n     */\n    private $w;\n\n    /**\n     * The Inverse Key Schedule\n     *\n     * @see self::setup()\n     * @var array\n     */\n    private $dw;\n\n    /**\n     * The Block Length divided by 32\n     *\n     * {@internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4.  Exists in conjunction with $block_size\n     *    because the encryption / decryption / key schedule creation requires this number and not $block_size.  We could\n     *    derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu\n     *    of that, we'll just precompute it once.}\n     *\n     * @see self::setBlockLength()\n     * @var int\n     */\n    private $Nb = 4;\n\n    /**\n     * The Key Length (in bytes)\n     *\n     * {@internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $Nk\n     *    because the encryption / decryption / key schedule creation requires this number and not $key_length.  We could\n     *    derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu\n     *    of that, we'll just precompute it once.}\n     *\n     * @see self::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 16;\n\n    /**\n     * The Key Length divided by 32\n     *\n     * @see self::setKeyLength()\n     * @var int\n     * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4\n     */\n    private $Nk = 4;\n\n    /**\n     * The Number of Rounds\n     *\n     * {@internal The max value is 14, the min value is 10.}\n     *\n     * @var int\n     */\n    private $Nr;\n\n    /**\n     * Shift offsets\n     *\n     * @var array\n     */\n    private $c;\n\n    /**\n     * Holds the last used key- and block_size information\n     *\n     * @var array\n     */\n    private $kl;\n\n    /**\n     * Default Constructor.\n     *\n     * @param string $mode\n     * @throws \\InvalidArgumentException if an invalid / unsupported mode is provided\n     */\n    public function __construct($mode)\n    {\n        parent::__construct($mode);\n\n        if ($this->mode == self::MODE_STREAM) {\n            throw new BadModeException('Block ciphers cannot be ran in stream mode');\n        }\n    }\n\n    /**\n     * Sets the key length.\n     *\n     * Valid key lengths are 128, 160, 192, 224, and 256.\n     *\n     * Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined\n     *       and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to\n     *       192/256 bits as, for example, mcrypt will do.\n     *\n     *       That said, if you want be compatible with other Rijndael and AES implementations,\n     *       you should not setKeyLength(160) or setKeyLength(224).\n     *\n     * Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use\n     *             the mcrypt php extension, even if available.\n     *             This results then in slower encryption.\n     *\n     * @throws \\LengthException if the key length is invalid\n     * @param int $length\n     */\n    public function setKeyLength($length)\n    {\n        switch ($length) {\n            case 128:\n            case 160:\n            case 192:\n            case 224:\n            case 256:\n                $this->key_length = $length >> 3;\n                break;\n            default:\n                throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes 128, 160, 192, 224 or 256 bits are supported');\n        }\n\n        parent::setKeyLength($length);\n    }\n\n    /**\n     * Sets the key.\n     *\n     * Rijndael supports five different key lengths\n     *\n     * @see setKeyLength()\n     * @param string $key\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKey($key)\n    {\n        switch (strlen($key)) {\n            case 16:\n            case 20:\n            case 24:\n            case 28:\n            case 32:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 20, 24, 28 or 32 are supported');\n        }\n\n        parent::setKey($key);\n    }\n\n    /**\n     * Sets the block length\n     *\n     * Valid block lengths are 128, 160, 192, 224, and 256.\n     *\n     * @param int $length\n     */\n    public function setBlockLength($length)\n    {\n        switch ($length) {\n            case 128:\n            case 160:\n            case 192:\n            case 224:\n            case 256:\n                break;\n            default:\n                throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes 128, 160, 192, 224 or 256 bits are supported');\n        }\n\n        $this->Nb = $length >> 5;\n        $this->block_size = $length >> 3;\n        $this->changed = $this->nonIVChanged = true;\n        $this->setEngine();\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::__construct()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        switch ($engine) {\n            case self::ENGINE_LIBSODIUM:\n                return function_exists('sodium_crypto_aead_aes256gcm_is_available') &&\n                       sodium_crypto_aead_aes256gcm_is_available() &&\n                       $this->mode == self::MODE_GCM &&\n                       $this->key_length == 32 &&\n                       $this->nonce && strlen($this->nonce) == 12 &&\n                       $this->block_size == 16;\n            case self::ENGINE_OPENSSL_GCM:\n                if (!extension_loaded('openssl')) {\n                    return false;\n                }\n                $methods = openssl_get_cipher_methods();\n                return $this->mode == self::MODE_GCM &&\n                       version_compare(PHP_VERSION, '7.1.0', '>=') &&\n                       in_array('aes-' . $this->getKeyLength() . '-gcm', $methods) &&\n                       $this->block_size == 16;\n            case self::ENGINE_OPENSSL:\n                if ($this->block_size != 16) {\n                    return false;\n                }\n                $this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';\n                $this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->openssl_translate_mode();\n                break;\n            case self::ENGINE_MCRYPT:\n                $this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);\n                if ($this->key_length % 8) { // is it a 160/224-bit key?\n                    // mcrypt is not usable for them, only for 128/192/256-bit keys\n                    return false;\n                }\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @param string $in\n     * @return string\n     */\n    protected function encryptBlock($in)\n    {\n        static $tables;\n        if (empty($tables)) {\n            $tables = &$this->getTables();\n        }\n        $t0   = $tables[0];\n        $t1   = $tables[1];\n        $t2   = $tables[2];\n        $t3   = $tables[3];\n        $sbox = $tables[4];\n\n        $state = [];\n        $words = unpack('N*', $in);\n\n        $c = $this->c;\n        $w = $this->w;\n        $Nb = $this->Nb;\n        $Nr = $this->Nr;\n\n        // addRoundKey\n        $wc = $Nb - 1;\n        foreach ($words as $word) {\n            $state[] = $word ^ $w[++$wc];\n        }\n\n        // fips-197.pdf#page=19, \"Figure 5. Pseudo Code for the Cipher\", states that this loop has four components -\n        // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, \"Implementation Suggestions Regarding\n        // Various Platforms\" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.\n        // Rijndael-ammended.pdf#page=20, \"Implementation aspects / 32-bit processor\", discusses such an optimization.\n        // Unfortunately, the description given there is not quite correct.  Per aes.spec.v316.pdf#page=19 [1],\n        // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.\n\n        // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf\n        $temp = [];\n        for ($round = 1; $round < $Nr; ++$round) {\n            $i = 0; // $c[0] == 0\n            $j = $c[1];\n            $k = $c[2];\n            $l = $c[3];\n\n            while ($i < $Nb) {\n                $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^\n                            $t1[$state[$j] >> 16 & 0x000000FF] ^\n                            $t2[$state[$k] >>  8 & 0x000000FF] ^\n                            $t3[$state[$l]       & 0x000000FF] ^\n                            $w[++$wc];\n                ++$i;\n                $j = ($j + 1) % $Nb;\n                $k = ($k + 1) % $Nb;\n                $l = ($l + 1) % $Nb;\n            }\n            $state = $temp;\n        }\n\n        // subWord\n        for ($i = 0; $i < $Nb; ++$i) {\n            $state[$i] =   $sbox[$state[$i]       & 0x000000FF]        |\n                          ($sbox[$state[$i] >>  8 & 0x000000FF] <<  8) |\n                          ($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |\n                          ($sbox[$state[$i] >> 24 & 0x000000FF] << 24);\n        }\n\n        // shiftRows + addRoundKey\n        $i = 0; // $c[0] == 0\n        $j = $c[1];\n        $k = $c[2];\n        $l = $c[3];\n        while ($i < $Nb) {\n            $temp[$i] = ($state[$i] & intval(0xFF000000)) ^\n                        ($state[$j] & 0x00FF0000) ^\n                        ($state[$k] & 0x0000FF00) ^\n                        ($state[$l] & 0x000000FF) ^\n                         $w[$i];\n            ++$i;\n            $j = ($j + 1) % $Nb;\n            $k = ($k + 1) % $Nb;\n            $l = ($l + 1) % $Nb;\n        }\n\n        return pack('N*', ...$temp);\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @param string $in\n     * @return string\n     */\n    protected function decryptBlock($in)\n    {\n        static $invtables;\n        if (empty($invtables)) {\n            $invtables = &$this->getInvTables();\n        }\n        $dt0   = $invtables[0];\n        $dt1   = $invtables[1];\n        $dt2   = $invtables[2];\n        $dt3   = $invtables[3];\n        $isbox = $invtables[4];\n\n        $state = [];\n        $words = unpack('N*', $in);\n\n        $c  = $this->c;\n        $dw = $this->dw;\n        $Nb = $this->Nb;\n        $Nr = $this->Nr;\n\n        // addRoundKey\n        $wc = $Nb - 1;\n        foreach ($words as $word) {\n            $state[] = $word ^ $dw[++$wc];\n        }\n\n        $temp = [];\n        for ($round = $Nr - 1; $round > 0; --$round) {\n            $i = 0; // $c[0] == 0\n            $j = $Nb - $c[1];\n            $k = $Nb - $c[2];\n            $l = $Nb - $c[3];\n\n            while ($i < $Nb) {\n                $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^\n                            $dt1[$state[$j] >> 16 & 0x000000FF] ^\n                            $dt2[$state[$k] >>  8 & 0x000000FF] ^\n                            $dt3[$state[$l]       & 0x000000FF] ^\n                            $dw[++$wc];\n                ++$i;\n                $j = ($j + 1) % $Nb;\n                $k = ($k + 1) % $Nb;\n                $l = ($l + 1) % $Nb;\n            }\n            $state = $temp;\n        }\n\n        // invShiftRows + invSubWord + addRoundKey\n        $i = 0; // $c[0] == 0\n        $j = $Nb - $c[1];\n        $k = $Nb - $c[2];\n        $l = $Nb - $c[3];\n\n        while ($i < $Nb) {\n            $word = ($state[$i] & intval(0xFF000000)) |\n                    ($state[$j] & 0x00FF0000) |\n                    ($state[$k] & 0x0000FF00) |\n                    ($state[$l] & 0x000000FF);\n\n            $temp[$i] = $dw[$i] ^ ($isbox[$word       & 0x000000FF]        |\n                                  ($isbox[$word >>  8 & 0x000000FF] <<  8) |\n                                  ($isbox[$word >> 16 & 0x000000FF] << 16) |\n                                  ($isbox[$word >> 24 & 0x000000FF] << 24));\n            ++$i;\n            $j = ($j + 1) % $Nb;\n            $k = ($k + 1) % $Nb;\n            $l = ($l + 1) % $Nb;\n        }\n\n        return pack('N*', ...$temp);\n    }\n\n    /**\n     * Setup the self::ENGINE_INTERNAL $engine\n     *\n     * (re)init, if necessary, the internal cipher $engine and flush all $buffers\n     * Used (only) if $engine == self::ENGINE_INTERNAL\n     *\n     * _setup() will be called each time if $changed === true\n     * typically this happens when using one or more of following public methods:\n     *\n     * - setKey()\n     *\n     * - setIV()\n     *\n     * - disableContinuousBuffer()\n     *\n     * - First run of encrypt() / decrypt() with no init-settings\n     *\n     * {@internal setup() is always called before en/decryption.}\n     *\n     * {@internal Could, but not must, extend by the child Crypt_* class}\n     *\n     * @see self::setKey()\n     * @see self::setIV()\n     * @see self::disableContinuousBuffer()\n     */\n    protected function setup()\n    {\n        if (!$this->changed) {\n            return;\n        }\n\n        parent::setup();\n\n        if (is_string($this->iv) && strlen($this->iv) != $this->block_size) {\n            throw new InconsistentSetupException('The IV length (' . strlen($this->iv) . ') does not match the block size (' . $this->block_size . ')');\n        }\n    }\n\n    /**\n     * Setup the key (expansion)\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::setupKey()\n     */\n    protected function setupKey()\n    {\n        // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.\n        // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse\n        static $rcon;\n\n        if (!isset($rcon)) {\n            $rcon = [0,\n                0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,\n                0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,\n                0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,\n                0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,\n                0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,\n                0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000\n            ];\n            $rcon = array_map('intval', $rcon);\n        }\n\n        if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {\n            // already expanded\n            return;\n        }\n        $this->kl = ['key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size];\n\n        $this->Nk = $this->key_length >> 2;\n        // see Rijndael-ammended.pdf#page=44\n        $this->Nr = max($this->Nk, $this->Nb) + 6;\n\n        // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,\n        //     \"Table 8: Shift offsets in Shiftrow for the alternative block lengths\"\n        // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,\n        //     \"Table 2: Shift offsets for different block lengths\"\n        switch ($this->Nb) {\n            case 4:\n            case 5:\n            case 6:\n                $this->c = [0, 1, 2, 3];\n                break;\n            case 7:\n                $this->c = [0, 1, 2, 4];\n                break;\n            case 8:\n                $this->c = [0, 1, 3, 4];\n        }\n\n        $w = array_values(unpack('N*words', $this->key));\n\n        $length = $this->Nb * ($this->Nr + 1);\n        for ($i = $this->Nk; $i < $length; $i++) {\n            $temp = $w[$i - 1];\n            if ($i % $this->Nk == 0) {\n                // according to <http://php.net/language.types.integer>, \"the size of an integer is platform-dependent\".\n                // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,\n                // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'\n                // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.\n                $temp = (($temp << 8) & intval(0xFFFFFF00)) | (($temp >> 24) & 0x000000FF); // rotWord\n                $temp = $this->subWord($temp) ^ $rcon[$i / $this->Nk];\n            } elseif ($this->Nk > 6 && $i % $this->Nk == 4) {\n                $temp = $this->subWord($temp);\n            }\n            $w[$i] = $w[$i - $this->Nk] ^ $temp;\n        }\n\n        // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns\n        // and generate the inverse key schedule.  more specifically,\n        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),\n        // \"The key expansion for the Inverse Cipher is defined as follows:\n        //        1. Apply the Key Expansion.\n        //        2. Apply InvMixColumn to all Round Keys except the first and the last one.\"\n        // also, see fips-197.pdf#page=27, \"5.3.5 Equivalent Inverse Cipher\"\n        list($dt0, $dt1, $dt2, $dt3) = $this->getInvTables();\n        $temp = $this->w = $this->dw = [];\n        for ($i = $row = $col = 0; $i < $length; $i++, $col++) {\n            if ($col == $this->Nb) {\n                if ($row == 0) {\n                    $this->dw[0] = $this->w[0];\n                } else {\n                    // subWord + invMixColumn + invSubWord = invMixColumn\n                    $j = 0;\n                    while ($j < $this->Nb) {\n                        $dw = $this->subWord($this->w[$row][$j]);\n                        $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^\n                                    $dt1[$dw >> 16 & 0x000000FF] ^\n                                    $dt2[$dw >>  8 & 0x000000FF] ^\n                                    $dt3[$dw       & 0x000000FF];\n                        $j++;\n                    }\n                    $this->dw[$row] = $temp;\n                }\n\n                $col = 0;\n                $row++;\n            }\n            $this->w[$row][$col] = $w[$i];\n        }\n\n        $this->dw[$row] = $this->w[$row];\n\n        // Converting to 1-dim key arrays (both ascending)\n        $this->dw = array_reverse($this->dw);\n        $w  = array_pop($this->w);\n        $dw = array_pop($this->dw);\n        foreach ($this->w as $r => $wr) {\n            foreach ($wr as $c => $wc) {\n                $w[]  = $wc;\n                $dw[] = $this->dw[$r][$c];\n            }\n        }\n        $this->w  = $w;\n        $this->dw = $dw;\n    }\n\n    /**\n     * Performs S-Box substitutions\n     *\n     * @return array\n     * @param int $word\n     */\n    private function subWord($word)\n    {\n        static $sbox;\n        if (empty($sbox)) {\n            list(, , , , $sbox) = self::getTables();\n        }\n\n        return  $sbox[$word       & 0x000000FF]        |\n               ($sbox[$word >>  8 & 0x000000FF] <<  8) |\n               ($sbox[$word >> 16 & 0x000000FF] << 16) |\n               ($sbox[$word >> 24 & 0x000000FF] << 24);\n    }\n\n    /**\n     * Provides the mixColumns and sboxes tables\n     *\n     * @see self::encryptBlock()\n     * @see self::setupInlineCrypt()\n     * @see self::subWord()\n     * @return array &$tables\n     */\n    protected function &getTables()\n    {\n        static $tables;\n        if (empty($tables)) {\n            // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),\n            // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so\n            // those are the names we'll use.\n            $t3 = array_map('intval', [\n                // with array_map('intval', ...) we ensure we have only int's and not\n                // some slower floats converted by php automatically on high values\n                0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,\n                0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,\n                0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,\n                0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,\n                0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,\n                0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,\n                0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,\n                0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,\n                0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,\n                0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,\n                0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,\n                0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,\n                0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,\n                0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,\n                0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,\n                0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,\n                0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,\n                0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,\n                0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,\n                0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,\n                0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,\n                0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,\n                0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,\n                0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,\n                0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,\n                0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,\n                0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,\n                0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,\n                0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,\n                0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,\n                0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,\n                0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C\n            ]);\n\n            foreach ($t3 as $t3i) {\n                $t0[] = (($t3i << 24) & intval(0xFF000000)) | (($t3i >>  8) & 0x00FFFFFF);\n                $t1[] = (($t3i << 16) & intval(0xFFFF0000)) | (($t3i >> 16) & 0x0000FFFF);\n                $t2[] = (($t3i <<  8) & intval(0xFFFFFF00)) | (($t3i >> 24) & 0x000000FF);\n            }\n\n            $tables = [\n                // The Precomputed mixColumns tables t0 - t3\n                $t0,\n                $t1,\n                $t2,\n                $t3,\n                // The SubByte S-Box\n                [\n                    0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,\n                    0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,\n                    0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,\n                    0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,\n                    0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,\n                    0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,\n                    0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,\n                    0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,\n                    0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,\n                    0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,\n                    0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,\n                    0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,\n                    0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,\n                    0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,\n                    0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,\n                    0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16\n                ]\n            ];\n        }\n        return $tables;\n    }\n\n    /**\n     * Provides the inverse mixColumns and inverse sboxes tables\n     *\n     * @see self::decryptBlock()\n     * @see self::setupInlineCrypt()\n     * @see self::setupKey()\n     * @return array &$tables\n     */\n    protected function &getInvTables()\n    {\n        static $tables;\n        if (empty($tables)) {\n            $dt3 = array_map('intval', [\n                0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,\n                0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,\n                0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,\n                0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,\n                0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,\n                0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,\n                0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,\n                0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,\n                0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,\n                0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,\n                0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,\n                0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,\n                0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,\n                0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,\n                0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,\n                0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,\n                0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,\n                0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,\n                0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,\n                0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,\n                0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,\n                0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,\n                0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,\n                0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,\n                0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,\n                0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,\n                0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,\n                0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,\n                0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,\n                0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,\n                0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,\n                0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0\n            ]);\n\n            foreach ($dt3 as $dt3i) {\n                $dt0[] = (($dt3i << 24) & intval(0xFF000000)) | (($dt3i >>  8) & 0x00FFFFFF);\n                $dt1[] = (($dt3i << 16) & intval(0xFFFF0000)) | (($dt3i >> 16) & 0x0000FFFF);\n                $dt2[] = (($dt3i <<  8) & intval(0xFFFFFF00)) | (($dt3i >> 24) & 0x000000FF);\n            };\n\n            $tables = [\n                // The Precomputed inverse mixColumns tables dt0 - dt3\n                $dt0,\n                $dt1,\n                $dt2,\n                $dt3,\n                // The inverse SubByte S-Box\n                [\n                    0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,\n                    0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,\n                    0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,\n                    0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,\n                    0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,\n                    0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,\n                    0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,\n                    0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,\n                    0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,\n                    0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,\n                    0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,\n                    0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,\n                    0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,\n                    0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,\n                    0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,\n                    0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D\n                ]\n            ];\n        }\n        return $tables;\n    }\n\n    /**\n     * Setup the performance-optimized function for de/encrypt()\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::setupInlineCrypt()\n     */\n    protected function setupInlineCrypt()\n    {\n        $w  = $this->w;\n        $dw = $this->dw;\n        $init_encrypt = '';\n        $init_decrypt = '';\n\n        $Nr = $this->Nr;\n        $Nb = $this->Nb;\n        $c  = $this->c;\n\n        // Generating encrypt code:\n        $init_encrypt .= '\n            if (empty($tables)) {\n                $tables = &$this->getTables();\n            }\n            $t0   = $tables[0];\n            $t1   = $tables[1];\n            $t2   = $tables[2];\n            $t3   = $tables[3];\n            $sbox = $tables[4];\n        ';\n\n        $s  = 'e';\n        $e  = 's';\n        $wc = $Nb - 1;\n\n        // Preround: addRoundKey\n        $encrypt_block = '$in = unpack(\"N*\", $in);' . \"\\n\";\n        for ($i = 0; $i < $Nb; ++$i) {\n            $encrypt_block .= '$s' . $i . ' = $in[' . ($i + 1) . '] ^ ' . $w[++$wc] . \";\\n\";\n        }\n\n        // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey\n        for ($round = 1; $round < $Nr; ++$round) {\n            list($s, $e) = [$e, $s];\n            for ($i = 0; $i < $Nb; ++$i) {\n                $encrypt_block .=\n                    '$' . $e . $i . ' =\n                    $t0[($' . $s . $i                  . ' >> 24) & 0xff] ^\n                    $t1[($' . $s . (($i + $c[1]) % $Nb) . ' >> 16) & 0xff] ^\n                    $t2[($' . $s . (($i + $c[2]) % $Nb) . ' >>  8) & 0xff] ^\n                    $t3[ $' . $s . (($i + $c[3]) % $Nb) . '        & 0xff] ^\n                    ' . $w[++$wc] . \";\\n\";\n            }\n        }\n\n        // Finalround: subWord + shiftRows + addRoundKey\n        for ($i = 0; $i < $Nb; ++$i) {\n            $encrypt_block .=\n                '$' . $e . $i . ' =\n                 $sbox[ $' . $e . $i . '        & 0xff]        |\n                ($sbox[($' . $e . $i . ' >>  8) & 0xff] <<  8) |\n                ($sbox[($' . $e . $i . ' >> 16) & 0xff] << 16) |\n                ($sbox[($' . $e . $i . ' >> 24) & 0xff] << 24);' . \"\\n\";\n        }\n        $encrypt_block .= '$in = pack(\"N*\"' . \"\\n\";\n        for ($i = 0; $i < $Nb; ++$i) {\n            $encrypt_block .= ',\n                ($' . $e . $i                  . ' & ' . ((int)0xFF000000) . ') ^\n                ($' . $e . (($i + $c[1]) % $Nb) . ' &         0x00FF0000   ) ^\n                ($' . $e . (($i + $c[2]) % $Nb) . ' &         0x0000FF00   ) ^\n                ($' . $e . (($i + $c[3]) % $Nb) . ' &         0x000000FF   ) ^\n                ' . $w[$i] . \"\\n\";\n        }\n        $encrypt_block .= ');';\n\n        // Generating decrypt code:\n        $init_decrypt .= '\n            if (empty($invtables)) {\n                $invtables = &$this->getInvTables();\n            }\n            $dt0   = $invtables[0];\n            $dt1   = $invtables[1];\n            $dt2   = $invtables[2];\n            $dt3   = $invtables[3];\n            $isbox = $invtables[4];\n        ';\n\n        $s  = 'e';\n        $e  = 's';\n        $wc = $Nb - 1;\n\n        // Preround: addRoundKey\n        $decrypt_block = '$in = unpack(\"N*\", $in);' . \"\\n\";\n        for ($i = 0; $i < $Nb; ++$i) {\n            $decrypt_block .= '$s' . $i . ' = $in[' . ($i + 1) . '] ^ ' . $dw[++$wc] . ';' . \"\\n\";\n        }\n\n        // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey\n        for ($round = 1; $round < $Nr; ++$round) {\n            list($s, $e) = [$e, $s];\n            for ($i = 0; $i < $Nb; ++$i) {\n                $decrypt_block .=\n                    '$' . $e . $i . ' =\n                    $dt0[($' . $s . $i                        . ' >> 24) & 0xff] ^\n                    $dt1[($' . $s . (($Nb + $i - $c[1]) % $Nb) . ' >> 16) & 0xff] ^\n                    $dt2[($' . $s . (($Nb + $i - $c[2]) % $Nb) . ' >>  8) & 0xff] ^\n                    $dt3[ $' . $s . (($Nb + $i - $c[3]) % $Nb) . '        & 0xff] ^\n                    ' . $dw[++$wc] . \";\\n\";\n            }\n        }\n\n        // Finalround: subWord + shiftRows + addRoundKey\n        for ($i = 0; $i < $Nb; ++$i) {\n            $decrypt_block .=\n                '$' . $e . $i . ' =\n                 $isbox[ $' . $e . $i . '        & 0xff]        |\n                ($isbox[($' . $e . $i . ' >>  8) & 0xff] <<  8) |\n                ($isbox[($' . $e . $i . ' >> 16) & 0xff] << 16) |\n                ($isbox[($' . $e . $i . ' >> 24) & 0xff] << 24);' . \"\\n\";\n        }\n        $decrypt_block .= '$in = pack(\"N*\"' . \"\\n\";\n        for ($i = 0; $i < $Nb; ++$i) {\n            $decrypt_block .= ',\n                ($' . $e . $i .                        ' & ' . ((int)0xFF000000) . ') ^\n                ($' . $e . (($Nb + $i - $c[1]) % $Nb) . ' &         0x00FF0000   ) ^\n                ($' . $e . (($Nb + $i - $c[2]) % $Nb) . ' &         0x0000FF00   ) ^\n                ($' . $e . (($Nb + $i - $c[3]) % $Nb) . ' &         0x000000FF   ) ^\n                ' . $dw[$i] . \"\\n\";\n        }\n        $decrypt_block .= ');';\n\n        $this->inline_crypt = $this->createInlineCryptFunction(\n            [\n               'init_crypt'    => 'static $tables; static $invtables;',\n               'init_encrypt'  => $init_encrypt,\n               'init_decrypt'  => $init_decrypt,\n               'encrypt_block' => $encrypt_block,\n               'decrypt_block' => $decrypt_block\n            ]\n        );\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * @see self::decrypt()\n     * @see parent::encrypt()\n     * @param string $plaintext\n     * @return string\n     */\n    public function encrypt($plaintext)\n    {\n        $this->setup();\n\n        switch ($this->engine) {\n            case self::ENGINE_LIBSODIUM:\n                $this->newtag = sodium_crypto_aead_aes256gcm_encrypt($plaintext, $this->aad, $this->nonce, $this->key);\n                return Strings::shift($this->newtag, strlen($plaintext));\n            case self::ENGINE_OPENSSL_GCM:\n                return openssl_encrypt(\n                    $plaintext,\n                    'aes-' . $this->getKeyLength() . '-gcm',\n                    $this->key,\n                    OPENSSL_RAW_DATA,\n                    $this->nonce,\n                    $this->newtag,\n                    $this->aad\n                );\n        }\n\n        return parent::encrypt($plaintext);\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * @see self::encrypt()\n     * @see parent::decrypt()\n     * @param string $ciphertext\n     * @return string\n     */\n    public function decrypt($ciphertext)\n    {\n        $this->setup();\n\n        switch ($this->engine) {\n            case self::ENGINE_LIBSODIUM:\n                if ($this->oldtag === false) {\n                    throw new InsufficientSetupException('Authentication Tag has not been set');\n                }\n                if (strlen($this->oldtag) != 16) {\n                    break;\n                }\n                $plaintext = sodium_crypto_aead_aes256gcm_decrypt($ciphertext . $this->oldtag, $this->aad, $this->nonce, $this->key);\n                if ($plaintext === false) {\n                    $this->oldtag = false;\n                    throw new BadDecryptionException('Error decrypting ciphertext with libsodium');\n                }\n                return $plaintext;\n            case self::ENGINE_OPENSSL_GCM:\n                if ($this->oldtag === false) {\n                    throw new InsufficientSetupException('Authentication Tag has not been set');\n                }\n                $plaintext = openssl_decrypt(\n                    $ciphertext,\n                    'aes-' . $this->getKeyLength() . '-gcm',\n                    $this->key,\n                    OPENSSL_RAW_DATA,\n                    $this->nonce,\n                    $this->oldtag,\n                    $this->aad\n                );\n                if ($plaintext === false) {\n                    $this->oldtag = false;\n                    throw new BadDecryptionException('Error decrypting ciphertext with OpenSSL');\n                }\n                return $plaintext;\n        }\n\n        return parent::decrypt($ciphertext);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Salsa20.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of Salsa20.\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2019 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\StreamCipher;\nuse phpseclib3\\Exception\\BadDecryptionException;\nuse phpseclib3\\Exception\\InsufficientSetupException;\n\n/**\n * Pure-PHP implementation of Salsa20.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Salsa20 extends StreamCipher\n{\n    /**\n     * Part 1 of the state\n     *\n     * @var string|false\n     */\n    protected $p1 = false;\n\n    /**\n     * Part 2 of the state\n     *\n     * @var string|false\n     */\n    protected $p2 = false;\n\n    /**\n     * Key Length (in bytes)\n     *\n     * @var int\n     */\n    protected $key_length = 32; // = 256 bits\n\n    /**\n     * @see \\phpseclib3\\Crypt\\Salsa20::crypt()\n     */\n    const ENCRYPT = 0;\n\n    /**\n     * @see \\phpseclib3\\Crypt\\Salsa20::crypt()\n     */\n    const DECRYPT = 1;\n\n    /**\n     * Encryption buffer for continuous mode\n     *\n     * @var array\n     */\n    protected $enbuffer;\n\n    /**\n     * Decryption buffer for continuous mode\n     *\n     * @var array\n     */\n    protected $debuffer;\n\n    /**\n     * Counter\n     *\n     * @var int\n     */\n    protected $counter = 0;\n\n    /**\n     * Using Generated Poly1305 Key\n     *\n     * @var boolean\n     */\n    protected $usingGeneratedPoly1305Key = false;\n\n    /**\n     * Salsa20 uses a nonce\n     *\n     * @return bool\n     */\n    public function usesNonce()\n    {\n        return true;\n    }\n\n    /**\n     * Sets the key.\n     *\n     * @param string $key\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKey($key)\n    {\n        switch (strlen($key)) {\n            case 16:\n            case 32:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16 or 32 are supported');\n        }\n\n        parent::setKey($key);\n    }\n\n    /**\n     * Sets the nonce.\n     *\n     * @param string $nonce\n     */\n    public function setNonce($nonce)\n    {\n        if (strlen($nonce) != 8) {\n            throw new \\LengthException('Nonce of size ' . strlen($key) . ' not supported by this algorithm. Only an 64-bit nonce is supported');\n        }\n\n        $this->nonce = $nonce;\n        $this->changed = true;\n        $this->setEngine();\n    }\n\n    /**\n     * Sets the counter.\n     *\n     * @param int $counter\n     */\n    public function setCounter($counter)\n    {\n        $this->counter = $counter;\n        $this->setEngine();\n    }\n\n    /**\n     * Creates a Poly1305 key using the method discussed in RFC8439\n     *\n     * See https://tools.ietf.org/html/rfc8439#section-2.6.1\n     */\n    protected function createPoly1305Key()\n    {\n        if ($this->nonce === false) {\n            throw new InsufficientSetupException('No nonce has been defined');\n        }\n\n        if ($this->key === false) {\n            throw new InsufficientSetupException('No key has been defined');\n        }\n\n        $c = clone $this;\n        $c->setCounter(0);\n        $c->usePoly1305 = false;\n        $block = $c->encrypt(str_repeat(\"\\0\", 256));\n        $this->setPoly1305Key(substr($block, 0, 32));\n\n        if ($this->counter == 0) {\n            $this->counter++;\n        }\n    }\n\n    /**\n     * Setup the self::ENGINE_INTERNAL $engine\n     *\n     * (re)init, if necessary, the internal cipher $engine\n     *\n     * _setup() will be called each time if $changed === true\n     * typically this happens when using one or more of following public methods:\n     *\n     * - setKey()\n     *\n     * - setNonce()\n     *\n     * - First run of encrypt() / decrypt() with no init-settings\n     *\n     * @see self::setKey()\n     * @see self::setNonce()\n     * @see self::disableContinuousBuffer()\n     */\n    protected function setup()\n    {\n        if (!$this->changed) {\n            return;\n        }\n\n        $this->enbuffer = $this->debuffer = ['ciphertext' => '', 'counter' => $this->counter];\n\n        $this->changed = $this->nonIVChanged = false;\n\n        if ($this->nonce === false) {\n            throw new InsufficientSetupException('No nonce has been defined');\n        }\n\n        if ($this->key === false) {\n            throw new InsufficientSetupException('No key has been defined');\n        }\n\n        if ($this->usePoly1305 && !isset($this->poly1305Key)) {\n            $this->usingGeneratedPoly1305Key = true;\n            $this->createPoly1305Key();\n        }\n\n        $key = $this->key;\n        if (strlen($key) == 16) {\n            $constant = 'expand 16-byte k';\n            $key .= $key;\n        } else {\n            $constant = 'expand 32-byte k';\n        }\n\n        $this->p1 = substr($constant, 0, 4) .\n                    substr($key, 0, 16) .\n                    substr($constant, 4, 4) .\n                    $this->nonce .\n                    \"\\0\\0\\0\\0\";\n        $this->p2 = substr($constant, 8, 4) .\n                    substr($key, 16, 16) .\n                    substr($constant, 12, 4);\n    }\n\n    /**\n     * Setup the key (expansion)\n     */\n    protected function setupKey()\n    {\n        // Salsa20 does not utilize this method\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::decrypt()\n     * @see self::crypt()\n     * @param string $plaintext\n     * @return string $ciphertext\n     */\n    public function encrypt($plaintext)\n    {\n        $ciphertext = $this->crypt($plaintext, self::ENCRYPT);\n        if (isset($this->poly1305Key)) {\n            $this->newtag = $this->poly1305($ciphertext);\n        }\n        return $ciphertext;\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).\n     * At least if the continuous buffer is disabled.\n     *\n     * @see \\phpseclib3\\Crypt\\Common\\SymmetricKey::encrypt()\n     * @see self::crypt()\n     * @param string $ciphertext\n     * @return string $plaintext\n     */\n    public function decrypt($ciphertext)\n    {\n        if (isset($this->poly1305Key)) {\n            if ($this->oldtag === false) {\n                throw new InsufficientSetupException('Authentication Tag has not been set');\n            }\n            $newtag = $this->poly1305($ciphertext);\n            if ($this->oldtag != substr($newtag, 0, strlen($this->oldtag))) {\n                $this->oldtag = false;\n                throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');\n            }\n            $this->oldtag = false;\n        }\n\n        return $this->crypt($ciphertext, self::DECRYPT);\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @param string $in\n     */\n    protected function encryptBlock($in)\n    {\n        // Salsa20 does not utilize this method\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @param string $in\n     */\n    protected function decryptBlock($in)\n    {\n        // Salsa20 does not utilize this method\n    }\n\n    /**\n     * Encrypts or decrypts a message.\n     *\n     * @see self::encrypt()\n     * @see self::decrypt()\n     * @param string $text\n     * @param int $mode\n     * @return string $text\n     */\n    private function crypt($text, $mode)\n    {\n        $this->setup();\n        if (!$this->continuousBuffer) {\n            if ($this->engine == self::ENGINE_OPENSSL) {\n                $iv = pack('V', $this->counter) . $this->p2;\n                return openssl_encrypt(\n                    $text,\n                    $this->cipher_name_openssl,\n                    $this->key,\n                    OPENSSL_RAW_DATA,\n                    $iv\n                );\n            }\n            $i = $this->counter;\n            $blocks = str_split($text, 64);\n            foreach ($blocks as &$block) {\n                $block ^= static::salsa20($this->p1 . pack('V', $i++) . $this->p2);\n            }\n            unset($block);\n            return implode('', $blocks);\n        }\n\n        if ($mode == self::ENCRYPT) {\n            $buffer = &$this->enbuffer;\n        } else {\n            $buffer = &$this->debuffer;\n        }\n        if (!strlen($buffer['ciphertext'])) {\n            $ciphertext = '';\n        } else {\n            $ciphertext = $text ^ Strings::shift($buffer['ciphertext'], strlen($text));\n            $text = substr($text, strlen($ciphertext));\n            if (!strlen($text)) {\n                return $ciphertext;\n            }\n        }\n\n        $overflow = strlen($text) % 64; // & 0x3F\n        if ($overflow) {\n            $text2 = Strings::pop($text, $overflow);\n            if ($this->engine == self::ENGINE_OPENSSL) {\n                $iv = pack('V', $buffer['counter']) . $this->p2;\n                // at this point $text should be a multiple of 64\n                $buffer['counter'] += (strlen($text) >> 6) + 1; // ie. divide by 64\n                $encrypted = openssl_encrypt(\n                    $text . str_repeat(\"\\0\", 64),\n                    $this->cipher_name_openssl,\n                    $this->key,\n                    OPENSSL_RAW_DATA,\n                    $iv\n                );\n                $temp = Strings::pop($encrypted, 64);\n            } else {\n                $blocks = str_split($text, 64);\n                if (strlen($text)) {\n                    foreach ($blocks as &$block) {\n                        $block ^= static::salsa20($this->p1 . pack('V', $buffer['counter']++) . $this->p2);\n                    }\n                    unset($block);\n                }\n                $encrypted = implode('', $blocks);\n                $temp = static::salsa20($this->p1 . pack('V', $buffer['counter']++) . $this->p2);\n            }\n            $ciphertext .= $encrypted . ($text2 ^ $temp);\n            $buffer['ciphertext'] = substr($temp, $overflow);\n        } elseif (!strlen($buffer['ciphertext'])) {\n            if ($this->engine == self::ENGINE_OPENSSL) {\n                $iv = pack('V', $buffer['counter']) . $this->p2;\n                $buffer['counter'] += (strlen($text) >> 6);\n                $ciphertext .= openssl_encrypt(\n                    $text,\n                    $this->cipher_name_openssl,\n                    $this->key,\n                    OPENSSL_RAW_DATA,\n                    $iv\n                );\n            } else {\n                $blocks = str_split($text, 64);\n                foreach ($blocks as &$block) {\n                    $block ^= static::salsa20($this->p1 . pack('V', $buffer['counter']++) . $this->p2);\n                }\n                unset($block);\n                $ciphertext .= implode('', $blocks);\n            }\n        }\n\n        return $ciphertext;\n    }\n\n    /**\n     * Left Rotate\n     *\n     * @param int $x\n     * @param int $n\n     * @return int\n     */\n    protected static function leftRotate($x, $n)\n    {\n        if (PHP_INT_SIZE == 8) {\n            $r1 = $x << $n;\n            $r1 &= 0xFFFFFFFF;\n            $r2 = ($x & 0xFFFFFFFF) >> (32 - $n);\n        } else {\n            $x = (int) $x;\n            $r1 = $x << $n;\n            $r2 = $x >> (32 - $n);\n            $r2 &= (1 << $n) - 1;\n        }\n        return $r1 | $r2;\n    }\n\n    /**\n     * The quarterround function\n     *\n     * @param int $a\n     * @param int $b\n     * @param int $c\n     * @param int $d\n     */\n    protected static function quarterRound(&$a, &$b, &$c, &$d)\n    {\n        $b ^= self::leftRotate($a + $d, 7);\n        $c ^= self::leftRotate($b + $a, 9);\n        $d ^= self::leftRotate($c + $b, 13);\n        $a ^= self::leftRotate($d + $c, 18);\n    }\n\n    /**\n     * The doubleround function\n     *\n     * @param int $x0 (by reference)\n     * @param int $x1 (by reference)\n     * @param int $x2 (by reference)\n     * @param int $x3 (by reference)\n     * @param int $x4 (by reference)\n     * @param int $x5 (by reference)\n     * @param int $x6 (by reference)\n     * @param int $x7 (by reference)\n     * @param int $x8 (by reference)\n     * @param int $x9 (by reference)\n     * @param int $x10 (by reference)\n     * @param int $x11 (by reference)\n     * @param int $x12 (by reference)\n     * @param int $x13 (by reference)\n     * @param int $x14 (by reference)\n     * @param int $x15 (by reference)\n     */\n    protected static function doubleRound(&$x0, &$x1, &$x2, &$x3, &$x4, &$x5, &$x6, &$x7, &$x8, &$x9, &$x10, &$x11, &$x12, &$x13, &$x14, &$x15)\n    {\n        // columnRound\n        static::quarterRound($x0, $x4, $x8, $x12);\n        static::quarterRound($x5, $x9, $x13, $x1);\n        static::quarterRound($x10, $x14, $x2, $x6);\n        static::quarterRound($x15, $x3, $x7, $x11);\n        // rowRound\n        static::quarterRound($x0, $x1, $x2, $x3);\n        static::quarterRound($x5, $x6, $x7, $x4);\n        static::quarterRound($x10, $x11, $x8, $x9);\n        static::quarterRound($x15, $x12, $x13, $x14);\n    }\n\n    /**\n     * The Salsa20 hash function function\n     *\n     * @param string $x\n     */\n    protected static function salsa20($x)\n    {\n        $z = $x = unpack('V*', $x);\n        for ($i = 0; $i < 10; $i++) {\n            static::doubleRound($z[1], $z[2], $z[3], $z[4], $z[5], $z[6], $z[7], $z[8], $z[9], $z[10], $z[11], $z[12], $z[13], $z[14], $z[15], $z[16]);\n        }\n\n        for ($i = 1; $i <= 16; $i++) {\n            $x[$i] += $z[$i];\n        }\n\n        return pack('V*', ...$x);\n    }\n\n    /**\n     * Calculates Poly1305 MAC\n     *\n     * @see self::decrypt()\n     * @see self::encrypt()\n     * @param string $ciphertext\n     * @return string\n     */\n    protected function poly1305($ciphertext)\n    {\n        if (!$this->usingGeneratedPoly1305Key) {\n            return parent::poly1305($this->aad . $ciphertext);\n        } else {\n            /*\n            sodium_crypto_aead_chacha20poly1305_encrypt does not calculate the poly1305 tag\n            the same way sodium_crypto_aead_chacha20poly1305_ietf_encrypt does. you can see\n            how the latter encrypts it in Salsa20::encrypt(). here's how the former encrypts\n            it:\n\n            $this->newtag = $this->poly1305(\n                $this->aad .\n                pack('V', strlen($this->aad)) . \"\\0\\0\\0\\0\" .\n                $ciphertext .\n                pack('V', strlen($ciphertext)) . \"\\0\\0\\0\\0\"\n            );\n\n            phpseclib opts to use the IETF construction, even when the nonce is 64-bits\n            instead of 96-bits\n            */\n            return parent::poly1305(\n                self::nullPad128($this->aad) .\n                self::nullPad128($ciphertext) .\n                pack('V', strlen($this->aad)) . \"\\0\\0\\0\\0\" .\n                pack('V', strlen($ciphertext)) . \"\\0\\0\\0\\0\"\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of Triple DES.\n *\n * Uses mcrypt, if available, and an internal implementation, otherwise.  Operates in the EDE3 mode (encrypt-decrypt-encrypt).\n *\n * PHP version 5\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $des = new \\phpseclib3\\Crypt\\TripleDES('ctr');\n *\n *    $des->setKey('abcdefghijklmnopqrstuvwx');\n *\n *    $size = 10 * 1024;\n *    $plaintext = '';\n *    for ($i = 0; $i < $size; $i++) {\n *        $plaintext.= 'a';\n *    }\n *\n *    echo $des->decrypt($des->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\n/**\n * Pure-PHP implementation of Triple DES.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass TripleDES extends DES\n{\n    /**\n     * Encrypt / decrypt using inner chaining\n     *\n     * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (self::MODE_CBC3).\n     */\n    const MODE_3CBC = -2;\n\n    /**\n     * Encrypt / decrypt using outer chaining\n     *\n     * Outer chaining is used by SSH-2 and when the mode is set to \\phpseclib3\\Crypt\\Common\\BlockCipher::MODE_CBC.\n     */\n    const MODE_CBC3 = self::MODE_CBC;\n\n    /**\n     * Key Length (in bytes)\n     *\n     * @see \\phpseclib3\\Crypt\\TripleDES::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 24;\n\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * @see DES::cipher_name_mcrypt\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'tripledes';\n\n    /**\n     * Optimizing value while CFB-encrypting\n     *\n     * @see Common\\SymmetricKey::cfb_init_len\n     * @var int\n     */\n    protected $cfb_init_len = 750;\n\n    /**\n     * max possible size of $key\n     *\n     * @see self::setKey()\n     * @see DES::setKey()\n     * @var string\n     */\n    protected $key_length_max = 24;\n\n    /**\n     * Internal flag whether using self::MODE_3CBC or not\n     *\n     * @var bool\n     */\n    private $mode_3cbc;\n\n    /**\n     * The \\phpseclib3\\Crypt\\DES objects\n     *\n     * Used only if $mode_3cbc === true\n     *\n     * @var array\n     */\n    private $des;\n\n    /**\n     * Default Constructor.\n     *\n     * Determines whether or not the mcrypt or OpenSSL extensions should be used.\n     *\n     * $mode could be:\n     *\n     * - ecb\n     *\n     * - cbc\n     *\n     * - ctr\n     *\n     * - cfb\n     *\n     * - ofb\n     *\n     * - 3cbc\n     *\n     * - cbc3 (same as cbc)\n     *\n     * @see Crypt\\DES::__construct()\n     * @see Common\\SymmetricKey::__construct()\n     * @param string $mode\n     */\n    public function __construct($mode)\n    {\n        switch (strtolower($mode)) {\n            // In case of self::MODE_3CBC, we init as CRYPT_DES_MODE_CBC\n            // and additional flag us internally as 3CBC\n            case '3cbc':\n                parent::__construct('cbc');\n                $this->mode_3cbc = true;\n\n                // This three $des'es will do the 3CBC work (if $key > 64bits)\n                $this->des = [\n                    new DES('cbc'),\n                    new DES('cbc'),\n                    new DES('cbc'),\n                ];\n\n                // we're going to be doing the padding, ourselves, so disable it in the \\phpseclib3\\Crypt\\DES objects\n                $this->des[0]->disablePadding();\n                $this->des[1]->disablePadding();\n                $this->des[2]->disablePadding();\n                break;\n            case 'cbc3':\n                $mode = 'cbc';\n                // fall-through\n            // If not 3CBC, we init as usual\n            default:\n                parent::__construct($mode);\n\n                if ($this->mode == self::MODE_STREAM) {\n                    throw new BadModeException('Block ciphers cannot be ran in stream mode');\n                }\n        }\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * This is mainly just a wrapper to set things up for \\phpseclib3\\Crypt\\Common\\SymmetricKey::isValidEngine()\n     *\n     * @see Common\\SymmetricKey::__construct()\n     * @param int $engine\n     * @return bool\n     */\n    protected function isValidEngineHelper($engine)\n    {\n        if ($engine == self::ENGINE_OPENSSL) {\n            $this->cipher_name_openssl_ecb = 'des-ede3';\n            $mode = $this->openssl_translate_mode();\n            $this->cipher_name_openssl = $mode == 'ecb' ? 'des-ede3' : 'des-ede3-' . $mode;\n        }\n\n        return parent::isValidEngineHelper($engine);\n    }\n\n    /**\n     * Sets the initialization vector.\n     *\n     * SetIV is not required when \\phpseclib3\\Crypt\\Common\\SymmetricKey::MODE_ECB is being used.\n     *\n     * @see Common\\SymmetricKey::setIV()\n     * @param string $iv\n     */\n    public function setIV($iv)\n    {\n        parent::setIV($iv);\n        if ($this->mode_3cbc) {\n            $this->des[0]->setIV($iv);\n            $this->des[1]->setIV($iv);\n            $this->des[2]->setIV($iv);\n        }\n    }\n\n    /**\n     * Sets the key length.\n     *\n     * Valid key lengths are 128 and 192 bits.\n     *\n     * If you want to use a 64-bit key use DES.php\n     *\n     * @see Common\\SymmetricKey:setKeyLength()\n     * @throws \\LengthException if the key length is invalid\n     * @param int $length\n     */\n    public function setKeyLength($length)\n    {\n        switch ($length) {\n            case 128:\n            case 192:\n                break;\n            default:\n                throw new \\LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes 128 or 192 bits are supported');\n        }\n\n        parent::setKeyLength($length);\n    }\n\n    /**\n     * Sets the key.\n     *\n     * Triple DES can use 128-bit (eg. strlen($key) == 16) or 192-bit (eg. strlen($key) == 24) keys.\n     *\n     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.\n     *\n     * @see DES::setKey()\n     * @see Common\\SymmetricKey::setKey()\n     * @throws \\LengthException if the key length is invalid\n     * @param string $key\n     */\n    public function setKey($key)\n    {\n        if ($this->explicit_key_length !== false && strlen($key) != $this->explicit_key_length) {\n            throw new \\LengthException('Key length has already been set to ' . $this->explicit_key_length . ' bytes and this key is ' . strlen($key) . ' bytes');\n        }\n\n        switch (strlen($key)) {\n            case 16:\n                $key .= substr($key, 0, 8);\n                break;\n            case 24:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16 or 24 are supported');\n        }\n\n        // copied from self::setKey()\n        $this->key = $key;\n        $this->key_length = strlen($key);\n        $this->changed = $this->nonIVChanged = true;\n        $this->setEngine();\n\n        if ($this->mode_3cbc) {\n            $this->des[0]->setKey(substr($key, 0, 8));\n            $this->des[1]->setKey(substr($key, 8, 8));\n            $this->des[2]->setKey(substr($key, 16, 8));\n        }\n    }\n\n    /**\n     * Encrypts a message.\n     *\n     * @see Common\\SymmetricKey::encrypt()\n     * @param string $plaintext\n     * @return string $cipertext\n     */\n    public function encrypt($plaintext)\n    {\n        // parent::en/decrypt() is able to do all the work for all modes and keylengths,\n        // except for: self::MODE_3CBC (inner chaining CBC) with a key > 64bits\n\n        // if the key is smaller then 8, do what we'd normally do\n        if ($this->mode_3cbc && strlen($this->key) > 8) {\n            return $this->des[2]->encrypt(\n                $this->des[1]->decrypt(\n                    $this->des[0]->encrypt(\n                        $this->pad($plaintext)\n                    )\n                )\n            );\n        }\n\n        return parent::encrypt($plaintext);\n    }\n\n    /**\n     * Decrypts a message.\n     *\n     * @see Common\\SymmetricKey::decrypt()\n     * @param string $ciphertext\n     * @return string $plaintext\n     */\n    public function decrypt($ciphertext)\n    {\n        if ($this->mode_3cbc && strlen($this->key) > 8) {\n            return $this->unpad(\n                $this->des[0]->decrypt(\n                    $this->des[1]->encrypt(\n                        $this->des[2]->decrypt(\n                            str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, \"\\0\")\n                        )\n                    )\n                )\n            );\n        }\n\n        return parent::decrypt($ciphertext);\n    }\n\n    /**\n     * Treat consecutive \"packets\" as if they are a continuous buffer.\n     *\n     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets\n     * will yield different outputs:\n     *\n     * <code>\n     *    echo $des->encrypt(substr($plaintext, 0, 8));\n     *    echo $des->encrypt(substr($plaintext, 8, 8));\n     * </code>\n     * <code>\n     *    echo $des->encrypt($plaintext);\n     * </code>\n     *\n     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates\n     * another, as demonstrated with the following:\n     *\n     * <code>\n     *    $des->encrypt(substr($plaintext, 0, 8));\n     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));\n     * </code>\n     * <code>\n     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));\n     * </code>\n     *\n     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different\n     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /\n     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.\n     *\n     * Put another way, when the continuous buffer is enabled, the state of the \\phpseclib3\\Crypt\\DES() object changes after each\n     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that\n     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),\n     * however, they are also less intuitive and more likely to cause you problems.\n     *\n     * @see Common\\SymmetricKey::enableContinuousBuffer()\n     * @see self::disableContinuousBuffer()\n     */\n    public function enableContinuousBuffer()\n    {\n        parent::enableContinuousBuffer();\n        if ($this->mode_3cbc) {\n            $this->des[0]->enableContinuousBuffer();\n            $this->des[1]->enableContinuousBuffer();\n            $this->des[2]->enableContinuousBuffer();\n        }\n    }\n\n    /**\n     * Treat consecutive packets as if they are a discontinuous buffer.\n     *\n     * The default behavior.\n     *\n     * @see Common\\SymmetricKey::disableContinuousBuffer()\n     * @see self::enableContinuousBuffer()\n     */\n    public function disableContinuousBuffer()\n    {\n        parent::disableContinuousBuffer();\n        if ($this->mode_3cbc) {\n            $this->des[0]->disableContinuousBuffer();\n            $this->des[1]->disableContinuousBuffer();\n            $this->des[2]->disableContinuousBuffer();\n        }\n    }\n\n    /**\n     * Creates the key schedule\n     *\n     * @see DES::setupKey()\n     * @see Common\\SymmetricKey::setupKey()\n     */\n    protected function setupKey()\n    {\n        switch (true) {\n            // if $key <= 64bits we configure our internal pure-php cipher engine\n            // to act as regular [1]DES, not as 3DES. mcrypt.so::tripledes does the same.\n            case strlen($this->key) <= 8:\n                $this->des_rounds = 1;\n                break;\n\n            // otherwise, if $key > 64bits, we configure our engine to work as 3DES.\n            default:\n                $this->des_rounds = 3;\n\n                // (only) if 3CBC is used we have, of course, to setup the $des[0-2] keys also separately.\n                if ($this->mode_3cbc) {\n                    $this->des[0]->setupKey();\n                    $this->des[1]->setupKey();\n                    $this->des[2]->setupKey();\n\n                    // because $des[0-2] will, now, do all the work we can return here\n                    // not need unnecessary stress parent::setupKey() with our, now unused, $key.\n                    return;\n                }\n        }\n        // setup our key\n        parent::setupKey();\n    }\n\n    /**\n     * Sets the internal crypt engine\n     *\n     * @see Common\\SymmetricKey::__construct()\n     * @see Common\\SymmetricKey::setPreferredEngine()\n     * @param int $engine\n     */\n    public function setPreferredEngine($engine)\n    {\n        if ($this->mode_3cbc) {\n            $this->des[0]->setPreferredEngine($engine);\n            $this->des[1]->setPreferredEngine($engine);\n            $this->des[2]->setPreferredEngine($engine);\n        }\n\n        parent::setPreferredEngine($engine);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of Twofish.\n *\n * Uses mcrypt, if available, and an internal implementation, otherwise.\n *\n * PHP version 5\n *\n * Useful resources are as follows:\n *\n *  - {@link http://en.wikipedia.org/wiki/Twofish Wikipedia description of Twofish}\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $twofish = new \\phpseclib3\\Crypt\\Twofish('ctr');\n *\n *    $twofish->setKey('12345678901234567890123456789012');\n *\n *    $plaintext = str_repeat('a', 1024);\n *\n *    echo $twofish->decrypt($twofish->encrypt($plaintext));\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @author    Hans-Juergen Petrich <petrich@tronic-media.com>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Crypt;\n\nuse phpseclib3\\Crypt\\Common\\BlockCipher;\nuse phpseclib3\\Exception\\BadModeException;\n\n/**\n * Pure-PHP implementation of Twofish.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n * @author  Hans-Juergen Petrich <petrich@tronic-media.com>\n */\nclass Twofish extends BlockCipher\n{\n    /**\n     * The mcrypt specific name of the cipher\n     *\n     * @see Common\\SymmetricKey::cipher_name_mcrypt\n     * @var string\n     */\n    protected $cipher_name_mcrypt = 'twofish';\n\n    /**\n     * Optimizing value while CFB-encrypting\n     *\n     * @see Common\\SymmetricKey::cfb_init_len\n     * @var int\n     */\n    protected $cfb_init_len = 800;\n\n    /**\n     * Q-Table\n     *\n     * @var array\n     */\n    private static $q0 = [\n        0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76,\n        0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38,\n        0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,\n        0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48,\n        0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23,\n        0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,\n        0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C,\n        0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61,\n        0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,\n        0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1,\n        0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66,\n        0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,\n        0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA,\n        0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71,\n        0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,\n        0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7,\n        0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2,\n        0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,\n        0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB,\n        0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF,\n        0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,\n        0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64,\n        0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A,\n        0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,\n        0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02,\n        0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D,\n        0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,\n        0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34,\n        0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8,\n        0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,\n        0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00,\n        0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0\n    ];\n\n    /**\n     * Q-Table\n     *\n     * @var array\n     */\n    private static $q1 = [\n        0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8,\n        0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B,\n        0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,\n        0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F,\n        0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D,\n        0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,\n        0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3,\n        0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51,\n        0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,\n        0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C,\n        0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70,\n        0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,\n        0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC,\n        0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2,\n        0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,\n        0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17,\n        0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3,\n        0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,\n        0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49,\n        0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9,\n        0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,\n        0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48,\n        0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19,\n        0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,\n        0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5,\n        0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69,\n        0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,\n        0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC,\n        0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB,\n        0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,\n        0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2,\n        0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91\n    ];\n\n    /**\n     * M-Table\n     *\n     * @var array\n     */\n    private static $m0 = [\n        0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, 0xE2E22BFB, 0x9E9EFAC8,\n        0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B,\n        0x3C3C57D6, 0x93938A32, 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,\n        0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, 0xB0B0B306, 0x7575DE3F,\n        0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D,\n        0xAEAE2C6D, 0x7F7FABC1, 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,\n        0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, 0x3131272C, 0x808065A3,\n        0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51,\n        0x2A2A3638, 0xC4C49CB0, 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,\n        0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, 0x6767C027, 0xE9E9AF8C,\n        0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70,\n        0x29294CCA, 0xF0F035E3, 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,\n        0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, 0xC8C81DC3, 0x9999FFCC,\n        0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2,\n        0xB5B53D79, 0x09090F0C, 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,\n        0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, 0xEDEDD07A, 0x4343FC17,\n        0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3,\n        0x5656E70B, 0xE3E3DA72, 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,\n        0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, 0x8181942A, 0x91910149,\n        0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9,\n        0x7878AEC5, 0xC5C56D39, 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,\n        0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, 0x55559DF9, 0x7E7E5A48,\n        0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519,\n        0x0606F48D, 0x404086E5, 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,\n        0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, 0x2D2D333C, 0x3030D6A5,\n        0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969,\n        0xD9D97929, 0x8686912E, 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,\n        0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, 0xC1C112CF, 0x8585EBDC,\n        0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB,\n        0xABABA212, 0x6F6F3EA2, 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,\n        0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, 0x04047FF6, 0x272746C2,\n        0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91\n    ];\n\n    /**\n     * M-Table\n     *\n     * @var array\n     */\n    private static $m1 = [\n        0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, 0xA3658080, 0x76DFE4E4,\n        0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A,\n        0x0D54E6E6, 0xC6432020, 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,\n        0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, 0x94B1FBFB, 0x485A7E7E,\n        0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060,\n        0x1945FDFD, 0x5BA33A3A, 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,\n        0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, 0x9B53AAAA, 0x7C635D5D,\n        0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7,\n        0xC0F09090, 0x8CAFE9E9, 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,\n        0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, 0xB499C3C3, 0xF1975B5B,\n        0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8,\n        0xCCFF9999, 0x95EA1414, 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,\n        0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, 0xBF7E9595, 0xBA207D7D,\n        0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB,\n        0x81FB0F0F, 0x793DB5B5, 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,\n        0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, 0x86135050, 0xE730F7F7,\n        0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B,\n        0x410B9F9F, 0x7B8B0202, 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,\n        0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, 0xB1C72B2B, 0xAB6F8E8E,\n        0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9,\n        0x91EF1313, 0x85FE0808, 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,\n        0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, 0x6929A9A9, 0x647D4F4F,\n        0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED,\n        0xAC87D1D1, 0x7F8E0505, 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,\n        0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, 0x4C5F7979, 0x02B6B7B7,\n        0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2,\n        0x57AC3333, 0xC718CFCF, 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,\n        0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, 0x99E51D1D, 0x34392323,\n        0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA,\n        0xC8FA9E9E, 0xA882D6D6, 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,\n        0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, 0x0FE25151, 0x00000000,\n        0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8\n    ];\n\n    /**\n     * M-Table\n     *\n     * @var array\n     */\n    private static $m2 = [\n        0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, 0xE2FBE22B, 0x9EC89EFA,\n        0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7,\n        0x3CD63C57, 0x9332938A, 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,\n        0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, 0xB006B0B3, 0x753F75DE,\n        0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0,\n        0xAE6DAE2C, 0x7FC17FAB, 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,\n        0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, 0x312C3127, 0x80A38065,\n        0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F,\n        0x2A382A36, 0xC4B0C49C, 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,\n        0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, 0x672767C0, 0xE98CE9AF,\n        0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C,\n        0x29CA294C, 0xF0E3F035, 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,\n        0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, 0xC8C3C81D, 0x99CC99FF,\n        0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E,\n        0xB579B53D, 0x090C090F, 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,\n        0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, 0xED7AEDD0, 0x431743FC,\n        0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71,\n        0x560B56E7, 0xE372E3DA, 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,\n        0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, 0x812A8194, 0x91499101,\n        0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5,\n        0x78C578AE, 0xC539C56D, 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,\n        0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, 0x55F9559D, 0x7E487E5A,\n        0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45,\n        0x068D06F4, 0x40E54086, 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,\n        0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, 0x2D3C2D33, 0x30A530D6,\n        0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929,\n        0xD929D979, 0x862E8691, 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,\n        0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, 0xC1CFC112, 0x85DC85EB,\n        0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F,\n        0xAB12ABA2, 0x6FA26F3E, 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,\n        0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, 0x04F6047F, 0x27C22746,\n        0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF\n    ];\n\n    /**\n     * M-Table\n     *\n     * @var array\n     */\n    private static $m3 = [\n        0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, 0x6580A365, 0xDFE476DF,\n        0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836,\n        0x54E60D54, 0x4320C643, 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,\n        0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, 0xB1FB94B1, 0x5A7E485A,\n        0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5,\n        0x45FD1945, 0xA33A5BA3, 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,\n        0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, 0x53AA9B53, 0x635D7C63,\n        0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123,\n        0xF090C0F0, 0xAFE98CAF, 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,\n        0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, 0x99C3B499, 0x975BF197,\n        0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB,\n        0xFF99CCFF, 0xEA1495EA, 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,\n        0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, 0x7E95BF7E, 0x207DBA20,\n        0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137,\n        0xFB0F81FB, 0x3DB5793D, 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,\n        0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, 0x13508613, 0x30F7E730,\n        0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252,\n        0x0B9F410B, 0x8B027B8B, 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,\n        0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, 0xC72BB1C7, 0x6F8EAB6F,\n        0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A,\n        0xEF1391EF, 0xFE0885FE, 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,\n        0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, 0x29A96929, 0x7D4F647D,\n        0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0,\n        0x87D1AC87, 0x8E057F8E, 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,\n        0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, 0x5F794C5F, 0xB6B702B6,\n        0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38,\n        0xAC3357AC, 0x18CFC718, 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,\n        0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, 0xE51D99E5, 0x39233439,\n        0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6,\n        0xFA9EC8FA, 0x82D6A882, 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,\n        0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, 0xE2510FE2, 0x00000000,\n        0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8\n    ];\n\n    /**\n     * The Key Schedule Array\n     *\n     * @var array\n     */\n    private $K = [];\n\n    /**\n     * The Key depended S-Table 0\n     *\n     * @var array\n     */\n    private $S0 = [];\n\n    /**\n     * The Key depended S-Table 1\n     *\n     * @var array\n     */\n    private $S1 = [];\n\n    /**\n     * The Key depended S-Table 2\n     *\n     * @var array\n     */\n    private $S2 = [];\n\n    /**\n     * The Key depended S-Table 3\n     *\n     * @var array\n     */\n    private $S3 = [];\n\n    /**\n     * Holds the last used key\n     *\n     * @var array\n     */\n    private $kl;\n\n    /**\n     * The Key Length (in bytes)\n     *\n     * @see Crypt_Twofish::setKeyLength()\n     * @var int\n     */\n    protected $key_length = 16;\n\n    /**\n     * Default Constructor.\n     *\n     * @param string $mode\n     * @throws BadModeException if an invalid / unsupported mode is provided\n     */\n    public function __construct($mode)\n    {\n        parent::__construct($mode);\n\n        if ($this->mode == self::MODE_STREAM) {\n            throw new BadModeException('Block ciphers cannot be ran in stream mode');\n        }\n    }\n\n    /**\n     * Initialize Static Variables\n     */\n    protected static function initialize_static_variables()\n    {\n        if (is_float(self::$m3[0])) {\n            self::$m0 = array_map('intval', self::$m0);\n            self::$m1 = array_map('intval', self::$m1);\n            self::$m2 = array_map('intval', self::$m2);\n            self::$m3 = array_map('intval', self::$m3);\n            self::$q0 = array_map('intval', self::$q0);\n            self::$q1 = array_map('intval', self::$q1);\n        }\n\n        parent::initialize_static_variables();\n    }\n\n    /**\n     * Sets the key length.\n     *\n     * Valid key lengths are 128, 192 or 256 bits\n     *\n     * @param int $length\n     */\n    public function setKeyLength($length)\n    {\n        switch ($length) {\n            case 128:\n            case 192:\n            case 256:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . $length . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');\n        }\n\n        parent::setKeyLength($length);\n    }\n\n    /**\n     * Sets the key.\n     *\n     * Rijndael supports five different key lengths\n     *\n     * @see setKeyLength()\n     * @param string $key\n     * @throws \\LengthException if the key length isn't supported\n     */\n    public function setKey($key)\n    {\n        switch (strlen($key)) {\n            case 16:\n            case 24:\n            case 32:\n                break;\n            default:\n                throw new \\LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');\n        }\n\n        parent::setKey($key);\n    }\n\n    /**\n     * Setup the key (expansion)\n     *\n     * @see Common\\SymmetricKey::_setupKey()\n     */\n    protected function setupKey()\n    {\n        if (isset($this->kl['key']) && $this->key === $this->kl['key']) {\n            // already expanded\n            return;\n        }\n        $this->kl = ['key' => $this->key];\n\n        /* Key expanding and generating the key-depended s-boxes */\n        $le_longs = unpack('V*', $this->key);\n        $key = unpack('C*', $this->key);\n        $m0 = self::$m0;\n        $m1 = self::$m1;\n        $m2 = self::$m2;\n        $m3 = self::$m3;\n        $q0 = self::$q0;\n        $q1 = self::$q1;\n\n        $K = $S0 = $S1 = $S2 = $S3 = [];\n\n        switch (strlen($this->key)) {\n            case 16:\n                list($s7, $s6, $s5, $s4) = $this->mdsrem($le_longs[1], $le_longs[2]);\n                list($s3, $s2, $s1, $s0) = $this->mdsrem($le_longs[3], $le_longs[4]);\n                for ($i = 0, $j = 1; $i < 40; $i += 2, $j += 2) {\n                    $A = $m0[$q0[$q0[$i] ^ $key[ 9]] ^ $key[1]] ^\n                         $m1[$q0[$q1[$i] ^ $key[10]] ^ $key[2]] ^\n                         $m2[$q1[$q0[$i] ^ $key[11]] ^ $key[3]] ^\n                         $m3[$q1[$q1[$i] ^ $key[12]] ^ $key[4]];\n                    $B = $m0[$q0[$q0[$j] ^ $key[13]] ^ $key[5]] ^\n                         $m1[$q0[$q1[$j] ^ $key[14]] ^ $key[6]] ^\n                         $m2[$q1[$q0[$j] ^ $key[15]] ^ $key[7]] ^\n                         $m3[$q1[$q1[$j] ^ $key[16]] ^ $key[8]];\n                    $B = ($B << 8) | ($B >> 24 & 0xff);\n                    $A = self::safe_intval($A + $B);\n                    $K[] = $A;\n                    $A = self::safe_intval($A + $B);\n                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);\n                }\n                for ($i = 0; $i < 256; ++$i) {\n                    $S0[$i] = $m0[$q0[$q0[$i] ^ $s4] ^ $s0];\n                    $S1[$i] = $m1[$q0[$q1[$i] ^ $s5] ^ $s1];\n                    $S2[$i] = $m2[$q1[$q0[$i] ^ $s6] ^ $s2];\n                    $S3[$i] = $m3[$q1[$q1[$i] ^ $s7] ^ $s3];\n                }\n                break;\n            case 24:\n                list($sb, $sa, $s9, $s8) = $this->mdsrem($le_longs[1], $le_longs[2]);\n                list($s7, $s6, $s5, $s4) = $this->mdsrem($le_longs[3], $le_longs[4]);\n                list($s3, $s2, $s1, $s0) = $this->mdsrem($le_longs[5], $le_longs[6]);\n                for ($i = 0, $j = 1; $i < 40; $i += 2, $j += 2) {\n                    $A = $m0[$q0[$q0[$q1[$i] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^\n                         $m1[$q0[$q1[$q1[$i] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^\n                         $m2[$q1[$q0[$q0[$i] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^\n                         $m3[$q1[$q1[$q0[$i] ^ $key[20]] ^ $key[12]] ^ $key[4]];\n                    $B = $m0[$q0[$q0[$q1[$j] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^\n                         $m1[$q0[$q1[$q1[$j] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^\n                         $m2[$q1[$q0[$q0[$j] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^\n                         $m3[$q1[$q1[$q0[$j] ^ $key[24]] ^ $key[16]] ^ $key[8]];\n                    $B = ($B << 8) | ($B >> 24 & 0xff);\n                    $A = self::safe_intval($A + $B);\n                    $K[] = $A;\n                    $A = self::safe_intval($A + $B);\n                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);\n                }\n                for ($i = 0; $i < 256; ++$i) {\n                    $S0[$i] = $m0[$q0[$q0[$q1[$i] ^ $s8] ^ $s4] ^ $s0];\n                    $S1[$i] = $m1[$q0[$q1[$q1[$i] ^ $s9] ^ $s5] ^ $s1];\n                    $S2[$i] = $m2[$q1[$q0[$q0[$i] ^ $sa] ^ $s6] ^ $s2];\n                    $S3[$i] = $m3[$q1[$q1[$q0[$i] ^ $sb] ^ $s7] ^ $s3];\n                }\n                break;\n            default: // 32\n                list($sf, $se, $sd, $sc) = $this->mdsrem($le_longs[1], $le_longs[2]);\n                list($sb, $sa, $s9, $s8) = $this->mdsrem($le_longs[3], $le_longs[4]);\n                list($s7, $s6, $s5, $s4) = $this->mdsrem($le_longs[5], $le_longs[6]);\n                list($s3, $s2, $s1, $s0) = $this->mdsrem($le_longs[7], $le_longs[8]);\n                for ($i = 0, $j = 1; $i < 40; $i += 2, $j += 2) {\n                    $A = $m0[$q0[$q0[$q1[$q1[$i] ^ $key[25]] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^\n                         $m1[$q0[$q1[$q1[$q0[$i] ^ $key[26]] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^\n                         $m2[$q1[$q0[$q0[$q0[$i] ^ $key[27]] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^\n                         $m3[$q1[$q1[$q0[$q1[$i] ^ $key[28]] ^ $key[20]] ^ $key[12]] ^ $key[4]];\n                    $B = $m0[$q0[$q0[$q1[$q1[$j] ^ $key[29]] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^\n                         $m1[$q0[$q1[$q1[$q0[$j] ^ $key[30]] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^\n                         $m2[$q1[$q0[$q0[$q0[$j] ^ $key[31]] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^\n                         $m3[$q1[$q1[$q0[$q1[$j] ^ $key[32]] ^ $key[24]] ^ $key[16]] ^ $key[8]];\n                    $B = ($B << 8) | ($B >> 24 & 0xff);\n                    $A = self::safe_intval($A + $B);\n                    $K[] = $A;\n                    $A = self::safe_intval($A + $B);\n                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);\n                }\n                for ($i = 0; $i < 256; ++$i) {\n                    $S0[$i] = $m0[$q0[$q0[$q1[$q1[$i] ^ $sc] ^ $s8] ^ $s4] ^ $s0];\n                    $S1[$i] = $m1[$q0[$q1[$q1[$q0[$i] ^ $sd] ^ $s9] ^ $s5] ^ $s1];\n                    $S2[$i] = $m2[$q1[$q0[$q0[$q0[$i] ^ $se] ^ $sa] ^ $s6] ^ $s2];\n                    $S3[$i] = $m3[$q1[$q1[$q0[$q1[$i] ^ $sf] ^ $sb] ^ $s7] ^ $s3];\n                }\n        }\n\n        $this->K  = $K;\n        $this->S0 = $S0;\n        $this->S1 = $S1;\n        $this->S2 = $S2;\n        $this->S3 = $S3;\n    }\n\n    /**\n     * _mdsrem function using by the twofish cipher algorithm\n     *\n     * @param string $A\n     * @param string $B\n     * @return array\n     */\n    private function mdsrem($A, $B)\n    {\n        // No gain by unrolling this loop.\n        for ($i = 0; $i < 8; ++$i) {\n            // Get most significant coefficient.\n            $t = 0xff & ($B >> 24);\n\n            // Shift the others up.\n            $B = ($B << 8) | (0xff & ($A >> 24));\n            $A <<= 8;\n\n            $u = $t << 1;\n\n            // Subtract the modular polynomial on overflow.\n            if ($t & 0x80) {\n                $u ^= 0x14d;\n            }\n\n            // Remove t * (a * x^2 + 1).\n            $B ^= $t ^ ($u << 16);\n\n            // Form u = a*t + t/a = t*(a + 1/a).\n            $u ^= 0x7fffffff & ($t >> 1);\n\n            // Add the modular polynomial on underflow.\n            if ($t & 0x01) {\n                $u ^= 0xa6 ;\n            }\n\n            // Remove t * (a + 1/a) * (x^3 + x).\n            $B ^= ($u << 24) | ($u << 8);\n        }\n\n        return [\n            0xff & $B >> 24,\n            0xff & $B >> 16,\n            0xff & $B >>  8,\n            0xff & $B];\n    }\n\n    /**\n     * Encrypts a block\n     *\n     * @param string $in\n     * @return string\n     */\n    protected function encryptBlock($in)\n    {\n        $S0 = $this->S0;\n        $S1 = $this->S1;\n        $S2 = $this->S2;\n        $S3 = $this->S3;\n        $K  = $this->K;\n\n        $in = unpack(\"V4\", $in);\n        $R0 = $K[0] ^ $in[1];\n        $R1 = $K[1] ^ $in[2];\n        $R2 = $K[2] ^ $in[3];\n        $R3 = $K[3] ^ $in[4];\n\n        $ki = 7;\n        while ($ki < 39) {\n            $t0 = $S0[ $R0        & 0xff] ^\n                  $S1[($R0 >>  8) & 0xff] ^\n                  $S2[($R0 >> 16) & 0xff] ^\n                  $S3[($R0 >> 24) & 0xff];\n            $t1 = $S0[($R1 >> 24) & 0xff] ^\n                  $S1[ $R1        & 0xff] ^\n                  $S2[($R1 >>  8) & 0xff] ^\n                  $S3[($R1 >> 16) & 0xff];\n            $R2 ^= self::safe_intval($t0 + $t1 + $K[++$ki]);\n            $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);\n            $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ self::safe_intval($t0 + ($t1 << 1) + $K[++$ki]);\n\n            $t0 = $S0[ $R2        & 0xff] ^\n                  $S1[($R2 >>  8) & 0xff] ^\n                  $S2[($R2 >> 16) & 0xff] ^\n                  $S3[($R2 >> 24) & 0xff];\n            $t1 = $S0[($R3 >> 24) & 0xff] ^\n                  $S1[ $R3        & 0xff] ^\n                  $S2[($R3 >>  8) & 0xff] ^\n                  $S3[($R3 >> 16) & 0xff];\n            $R0 ^= self::safe_intval($t0 + $t1 + $K[++$ki]);\n            $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);\n            $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ self::safe_intval($t0 + ($t1 << 1) + $K[++$ki]);\n        }\n\n        // @codingStandardsIgnoreStart\n        return pack(\"V4\", $K[4] ^ $R2,\n                          $K[5] ^ $R3,\n                          $K[6] ^ $R0,\n                          $K[7] ^ $R1);\n        // @codingStandardsIgnoreEnd\n    }\n\n    /**\n     * Decrypts a block\n     *\n     * @param string $in\n     * @return string\n     */\n    protected function decryptBlock($in)\n    {\n        $S0 = $this->S0;\n        $S1 = $this->S1;\n        $S2 = $this->S2;\n        $S3 = $this->S3;\n        $K  = $this->K;\n\n        $in = unpack(\"V4\", $in);\n        $R0 = $K[4] ^ $in[1];\n        $R1 = $K[5] ^ $in[2];\n        $R2 = $K[6] ^ $in[3];\n        $R3 = $K[7] ^ $in[4];\n\n        $ki = 40;\n        while ($ki > 8) {\n            $t0 = $S0[$R0       & 0xff] ^\n                  $S1[$R0 >>  8 & 0xff] ^\n                  $S2[$R0 >> 16 & 0xff] ^\n                  $S3[$R0 >> 24 & 0xff];\n            $t1 = $S0[$R1 >> 24 & 0xff] ^\n                  $S1[$R1       & 0xff] ^\n                  $S2[$R1 >>  8 & 0xff] ^\n                  $S3[$R1 >> 16 & 0xff];\n            $R3 ^= self::safe_intval($t0 + ($t1 << 1) + $K[--$ki]);\n            $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;\n            $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ self::safe_intval($t0 + $t1 + $K[--$ki]);\n\n            $t0 = $S0[$R2       & 0xff] ^\n                  $S1[$R2 >>  8 & 0xff] ^\n                  $S2[$R2 >> 16 & 0xff] ^\n                  $S3[$R2 >> 24 & 0xff];\n            $t1 = $S0[$R3 >> 24 & 0xff] ^\n                  $S1[$R3       & 0xff] ^\n                  $S2[$R3 >>  8 & 0xff] ^\n                  $S3[$R3 >> 16 & 0xff];\n            $R1 ^= self::safe_intval($t0 + ($t1 << 1) + $K[--$ki]);\n            $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;\n            $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ self::safe_intval($t0 + $t1 + $K[--$ki]);\n        }\n\n        // @codingStandardsIgnoreStart\n        return pack(\"V4\", $K[0] ^ $R2,\n                          $K[1] ^ $R3,\n                          $K[2] ^ $R0,\n                          $K[3] ^ $R1);\n        // @codingStandardsIgnoreEnd\n    }\n\n    /**\n     * Setup the performance-optimized function for de/encrypt()\n     *\n     * @see Common\\SymmetricKey::_setupInlineCrypt()\n     */\n    protected function setupInlineCrypt()\n    {\n        $K = $this->K;\n        $init_crypt = '\n            static $S0, $S1, $S2, $S3;\n            if (!$S0) {\n                for ($i = 0; $i < 256; ++$i) {\n                    $S0[] = (int)$this->S0[$i];\n                    $S1[] = (int)$this->S1[$i];\n                    $S2[] = (int)$this->S2[$i];\n                    $S3[] = (int)$this->S3[$i];\n                }\n            }\n        ';\n\n        $safeint = self::safe_intval_inline();\n\n        // Generating encrypt code:\n        $encrypt_block = '\n            $in = unpack(\"V4\", $in);\n            $R0 = ' . $K[0] . ' ^ $in[1];\n            $R1 = ' . $K[1] . ' ^ $in[2];\n            $R2 = ' . $K[2] . ' ^ $in[3];\n            $R3 = ' . $K[3] . ' ^ $in[4];\n        ';\n        for ($ki = 7, $i = 0; $i < 8; ++$i) {\n            $encrypt_block .= '\n                $t0 = $S0[ $R0        & 0xff] ^\n                      $S1[($R0 >>  8) & 0xff] ^\n                      $S2[($R0 >> 16) & 0xff] ^\n                      $S3[($R0 >> 24) & 0xff];\n                $t1 = $S0[($R1 >> 24) & 0xff] ^\n                      $S1[ $R1        & 0xff] ^\n                      $S2[($R1 >>  8) & 0xff] ^\n                      $S3[($R1 >> 16) & 0xff];\n                    $R2^= ' . sprintf($safeint, '$t0 + $t1 + ' . $K[++$ki]) . ';\n                $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);\n                $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . ';\n\n                $t0 = $S0[ $R2        & 0xff] ^\n                      $S1[($R2 >>  8) & 0xff] ^\n                      $S2[($R2 >> 16) & 0xff] ^\n                      $S3[($R2 >> 24) & 0xff];\n                $t1 = $S0[($R3 >> 24) & 0xff] ^\n                      $S1[ $R3        & 0xff] ^\n                      $S2[($R3 >>  8) & 0xff] ^\n                      $S3[($R3 >> 16) & 0xff];\n                $R0^= ' . sprintf($safeint, '($t0 + $t1 + ' . $K[++$ki] . ')') . ';\n                $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);\n                $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . ';\n            ';\n        }\n        $encrypt_block .= '\n            $in = pack(\"V4\", ' . $K[4] . ' ^ $R2,\n                             ' . $K[5] . ' ^ $R3,\n                             ' . $K[6] . ' ^ $R0,\n                             ' . $K[7] . ' ^ $R1);\n        ';\n\n        // Generating decrypt code:\n        $decrypt_block = '\n            $in = unpack(\"V4\", $in);\n            $R0 = ' . $K[4] . ' ^ $in[1];\n            $R1 = ' . $K[5] . ' ^ $in[2];\n            $R2 = ' . $K[6] . ' ^ $in[3];\n            $R3 = ' . $K[7] . ' ^ $in[4];\n        ';\n        for ($ki = 40, $i = 0; $i < 8; ++$i) {\n            $decrypt_block .= '\n                $t0 = $S0[$R0       & 0xff] ^\n                      $S1[$R0 >>  8 & 0xff] ^\n                      $S2[$R0 >> 16 & 0xff] ^\n                      $S3[$R0 >> 24 & 0xff];\n                $t1 = $S0[$R1 >> 24 & 0xff] ^\n                      $S1[$R1       & 0xff] ^\n                      $S2[$R1 >>  8 & 0xff] ^\n                      $S3[$R1 >> 16 & 0xff];\n                $R3^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . ';\n                $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;\n                $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + ' . $K[--$ki] . ')') . ';\n\n                $t0 = $S0[$R2       & 0xff] ^\n                      $S1[$R2 >>  8 & 0xff] ^\n                      $S2[$R2 >> 16 & 0xff] ^\n                      $S3[$R2 >> 24 & 0xff];\n                $t1 = $S0[$R3 >> 24 & 0xff] ^\n                      $S1[$R3       & 0xff] ^\n                      $S2[$R3 >>  8 & 0xff] ^\n                      $S3[$R3 >> 16 & 0xff];\n                $R1^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . ';\n                $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;\n                $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + ' . $K[--$ki] . ')') . ';\n            ';\n        }\n        $decrypt_block .= '\n            $in = pack(\"V4\", ' . $K[0] . ' ^ $R2,\n                             ' . $K[1] . ' ^ $R3,\n                             ' . $K[2] . ' ^ $R0,\n                             ' . $K[3] . ' ^ $R1);\n        ';\n\n        $this->inline_crypt = $this->createInlineCryptFunction(\n            [\n               'init_crypt'    => $init_crypt,\n               'init_encrypt'  => '',\n               'init_decrypt'  => '',\n               'encrypt_block' => $encrypt_block,\n               'decrypt_block' => $decrypt_block\n            ]\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/BadConfigurationException.php",
    "content": "<?php\n\n/**\n * BadConfigurationException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * BadConfigurationException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass BadConfigurationException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/BadDecryptionException.php",
    "content": "<?php\n\n/**\n * BadDecryptionException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * BadDecryptionException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass BadDecryptionException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/BadModeException.php",
    "content": "<?php\n\n/**\n * BadModeException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * BadModeException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass BadModeException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/ConnectionClosedException.php",
    "content": "<?php\n\n/**\n * ConnectionClosedException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * ConnectionClosedException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass ConnectionClosedException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/FileNotFoundException.php",
    "content": "<?php\n\n/**\n * FileNotFoundException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * FileNotFoundException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass FileNotFoundException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/InconsistentSetupException.php",
    "content": "<?php\n\n/**\n * InconsistentSetupException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * InconsistentSetupException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass InconsistentSetupException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/InsufficientSetupException.php",
    "content": "<?php\n\n/**\n * InsufficientSetupException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * InsufficientSetupException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass InsufficientSetupException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidPacketLengthException.php",
    "content": "<?php\n\nnamespace phpseclib3\\Exception;\n\n/**\n * Indicates an absent or malformed packet length header\n */\nclass InvalidPacketLengthException extends ConnectionClosedException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.php",
    "content": "<?php\n\n/**\n * NoKeyLoadedException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * NoKeyLoadedException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass NoKeyLoadedException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.php",
    "content": "<?php\n\n/**\n * NoSupportedAlgorithmsException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * NoSupportedAlgorithmsException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass NoSupportedAlgorithmsException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/TimeoutException.php",
    "content": "<?php\n\nnamespace phpseclib3\\Exception;\n\n/**\n * Indicates a timeout awaiting server response\n */\nclass TimeoutException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/UnableToConnectException.php",
    "content": "<?php\n\n/**\n * UnableToConnectException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * UnableToConnectException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass UnableToConnectException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.php",
    "content": "<?php\n\n/**\n * UnsupportedAlgorithmException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * UnsupportedAlgorithmException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass UnsupportedAlgorithmException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.php",
    "content": "<?php\n\n/**\n * UnsupportedCurveException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * UnsupportedCurveException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass UnsupportedCurveException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedFormatException.php",
    "content": "<?php\n\n/**\n * UnsupportedFormatException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * UnsupportedFormatException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass UnsupportedFormatException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedOperationException.php",
    "content": "<?php\n\n/**\n * UnsupportedOperationException\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Exception;\n\n/**\n * UnsupportedOperationException\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass UnsupportedOperationException extends \\RuntimeException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php",
    "content": "<?php\n\n/**\n * Pure-PHP ANSI Decoder\n *\n * PHP version 5\n *\n * If you call read() in \\phpseclib3\\Net\\SSH2 you may get {@link http://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape codes} back.\n * They'd look like chr(0x1B) . '[00m' or whatever (0x1B = ESC).  They tell a\n * {@link http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator} how to format the characters, what\n * color to display them in, etc. \\phpseclib3\\File\\ANSI is a {@link http://en.wikipedia.org/wiki/VT100 VT100} terminal emulator.\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2012 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File;\n\n/**\n * Pure-PHP ANSI Decoder\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass ANSI\n{\n    /**\n     * Max Width\n     *\n     * @var int\n     */\n    private $max_x;\n\n    /**\n     * Max Height\n     *\n     * @var int\n     */\n    private $max_y;\n\n    /**\n     * Max History\n     *\n     * @var int\n     */\n    private $max_history;\n\n    /**\n     * History\n     *\n     * @var array\n     */\n    private $history;\n\n    /**\n     * History Attributes\n     *\n     * @var array\n     */\n    private $history_attrs;\n\n    /**\n     * Current Column\n     *\n     * @var int\n     */\n    private $x;\n\n    /**\n     * Current Row\n     *\n     * @var int\n     */\n    private $y;\n\n    /**\n     * Old Column\n     *\n     * @var int\n     */\n    private $old_x;\n\n    /**\n     * Old Row\n     *\n     * @var int\n     */\n    private $old_y;\n\n    /**\n     * An empty attribute cell\n     *\n     * @var object\n     */\n    private $base_attr_cell;\n\n    /**\n     * The current attribute cell\n     *\n     * @var object\n     */\n    private $attr_cell;\n\n    /**\n     * An empty attribute row\n     *\n     * @var array\n     */\n    private $attr_row;\n\n    /**\n     * The current screen text\n     *\n     * @var list<string>\n     */\n    private $screen;\n\n    /**\n     * The current screen attributes\n     *\n     * @var array\n     */\n    private $attrs;\n\n    /**\n     * Current ANSI code\n     *\n     * @var string\n     */\n    private $ansi;\n\n    /**\n     * Tokenization\n     *\n     * @var array\n     */\n    private $tokenization;\n\n    /**\n     * Default Constructor.\n     *\n     * @return ANSI\n     */\n    public function __construct()\n    {\n        $attr_cell = new \\stdClass();\n        $attr_cell->bold = false;\n        $attr_cell->underline = false;\n        $attr_cell->blink = false;\n        $attr_cell->background = 'black';\n        $attr_cell->foreground = 'white';\n        $attr_cell->reverse = false;\n        $this->base_attr_cell = clone $attr_cell;\n        $this->attr_cell = clone $attr_cell;\n\n        $this->setHistory(200);\n        $this->setDimensions(80, 24);\n    }\n\n    /**\n     * Set terminal width and height\n     *\n     * Resets the screen as well\n     *\n     * @param int $x\n     * @param int $y\n     */\n    public function setDimensions($x, $y)\n    {\n        $this->max_x = $x - 1;\n        $this->max_y = $y - 1;\n        $this->x = $this->y = 0;\n        $this->history = $this->history_attrs = [];\n        $this->attr_row = array_fill(0, $this->max_x + 2, $this->base_attr_cell);\n        $this->screen = array_fill(0, $this->max_y + 1, '');\n        $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row);\n        $this->ansi = '';\n    }\n\n    /**\n     * Set the number of lines that should be logged past the terminal height\n     *\n     * @param int $history\n     */\n    public function setHistory($history)\n    {\n        $this->max_history = $history;\n    }\n\n    /**\n     * Load a string\n     *\n     * @param string $source\n     */\n    public function loadString($source)\n    {\n        $this->setDimensions($this->max_x + 1, $this->max_y + 1);\n        $this->appendString($source);\n    }\n\n    /**\n     * Appdend a string\n     *\n     * @param string $source\n     */\n    public function appendString($source)\n    {\n        $this->tokenization = [''];\n        for ($i = 0; $i < strlen($source); $i++) {\n            if (strlen($this->ansi)) {\n                $this->ansi .= $source[$i];\n                $chr = ord($source[$i]);\n                // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements\n                // single character CSI's not currently supported\n                switch (true) {\n                    case $this->ansi == \"\\x1B=\":\n                        $this->ansi = '';\n                        continue 2;\n                    case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['):\n                    case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126:\n                        break;\n                    default:\n                        continue 2;\n                }\n                $this->tokenization[] = $this->ansi;\n                $this->tokenization[] = '';\n                // http://ascii-table.com/ansi-escape-sequences-vt-100.php\n                switch ($this->ansi) {\n                    case \"\\x1B[H\": // Move cursor to upper left corner\n                        $this->old_x = $this->x;\n                        $this->old_y = $this->y;\n                        $this->x = $this->y = 0;\n                        break;\n                    case \"\\x1B[J\": // Clear screen from cursor down\n                        $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y));\n                        $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, ''));\n\n                        $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y));\n                        $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row));\n\n                        if (count($this->history) == $this->max_history) {\n                            array_shift($this->history);\n                            array_shift($this->history_attrs);\n                        }\n                        // fall-through\n                    case \"\\x1B[K\": // Clear screen from cursor right\n                        $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x);\n\n                        array_splice($this->attrs[$this->y], $this->x + 1, $this->max_x - $this->x, array_fill($this->x, $this->max_x - ($this->x - 1), $this->base_attr_cell));\n                        break;\n                    case \"\\x1B[2K\": // Clear entire line\n                        $this->screen[$this->y] = str_repeat(' ', $this->x);\n                        $this->attrs[$this->y] = $this->attr_row;\n                        break;\n                    case \"\\x1B[?1h\": // set cursor key to application\n                    case \"\\x1B[?25h\": // show the cursor\n                    case \"\\x1B(B\": // set united states g0 character set\n                        break;\n                    case \"\\x1BE\": // Move to next line\n                        $this->newLine();\n                        $this->x = 0;\n                        break;\n                    default:\n                        switch (true) {\n                            case preg_match('#\\x1B\\[(\\d+)B#', $this->ansi, $match): // Move cursor down n lines\n                                $this->old_y = $this->y;\n                                $this->y += (int) $match[1];\n                                break;\n                            case preg_match('#\\x1B\\[(\\d+);(\\d+)H#', $this->ansi, $match): // Move cursor to screen location v,h\n                                $this->old_x = $this->x;\n                                $this->old_y = $this->y;\n                                $this->x = $match[2] - 1;\n                                $this->y = (int) $match[1] - 1;\n                                break;\n                            case preg_match('#\\x1B\\[(\\d+)C#', $this->ansi, $match): // Move cursor right n lines\n                                $this->old_x = $this->x;\n                                $this->x += $match[1];\n                                break;\n                            case preg_match('#\\x1B\\[(\\d+)D#', $this->ansi, $match): // Move cursor left n lines\n                                $this->old_x = $this->x;\n                                $this->x -= $match[1];\n                                if ($this->x < 0) {\n                                    $this->x = 0;\n                                }\n                                break;\n                            case preg_match('#\\x1B\\[(\\d+);(\\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window\n                                break;\n                            case preg_match('#\\x1B\\[(\\d*(?:;\\d*)*)m#', $this->ansi, $match): // character attributes\n                                $attr_cell = &$this->attr_cell;\n                                $mods = explode(';', $match[1]);\n                                foreach ($mods as $mod) {\n                                    switch ($mod) {\n                                        case '':\n                                        case '0': // Turn off character attributes\n                                            $attr_cell = clone $this->base_attr_cell;\n                                            break;\n                                        case '1': // Turn bold mode on\n                                            $attr_cell->bold = true;\n                                            break;\n                                        case '4': // Turn underline mode on\n                                            $attr_cell->underline = true;\n                                            break;\n                                        case '5': // Turn blinking mode on\n                                            $attr_cell->blink = true;\n                                            break;\n                                        case '7': // Turn reverse video on\n                                            $attr_cell->reverse = !$attr_cell->reverse;\n                                            $temp = $attr_cell->background;\n                                            $attr_cell->background = $attr_cell->foreground;\n                                            $attr_cell->foreground = $temp;\n                                            break;\n                                        default: // set colors\n                                            //$front = $attr_cell->reverse ? &$attr_cell->background : &$attr_cell->foreground;\n                                            $front = &$attr_cell->{ $attr_cell->reverse ? 'background' : 'foreground' };\n                                            //$back = $attr_cell->reverse ? &$attr_cell->foreground : &$attr_cell->background;\n                                            $back = &$attr_cell->{ $attr_cell->reverse ? 'foreground' : 'background' };\n                                            switch ($mod) {\n                                                // @codingStandardsIgnoreStart\n                                                case '30': $front = 'black'; break;\n                                                case '31': $front = 'red'; break;\n                                                case '32': $front = 'green'; break;\n                                                case '33': $front = 'yellow'; break;\n                                                case '34': $front = 'blue'; break;\n                                                case '35': $front = 'magenta'; break;\n                                                case '36': $front = 'cyan'; break;\n                                                case '37': $front = 'white'; break;\n\n                                                case '40': $back = 'black'; break;\n                                                case '41': $back = 'red'; break;\n                                                case '42': $back = 'green'; break;\n                                                case '43': $back = 'yellow'; break;\n                                                case '44': $back = 'blue'; break;\n                                                case '45': $back = 'magenta'; break;\n                                                case '46': $back = 'cyan'; break;\n                                                case '47': $back = 'white'; break;\n                                                // @codingStandardsIgnoreEnd\n\n                                                default:\n                                                    //user_error('Unsupported attribute: ' . $mod);\n                                                    $this->ansi = '';\n                                                    break 2;\n                                            }\n                                    }\n                                }\n                                break;\n                            default:\n                                //user_error(\"{$this->ansi} is unsupported\\r\\n\");\n                        }\n                }\n                $this->ansi = '';\n                continue;\n            }\n\n            $this->tokenization[count($this->tokenization) - 1] .= $source[$i];\n            switch ($source[$i]) {\n                case \"\\r\":\n                    $this->x = 0;\n                    break;\n                case \"\\n\":\n                    $this->newLine();\n                    break;\n                case \"\\x08\": // backspace\n                    if ($this->x) {\n                        $this->x--;\n                        $this->attrs[$this->y][$this->x] = clone $this->base_attr_cell;\n                        $this->screen[$this->y] = substr_replace(\n                            $this->screen[$this->y],\n                            $source[$i],\n                            $this->x,\n                            1\n                        );\n                    }\n                    break;\n                case \"\\x0F\": // shift\n                    break;\n                case \"\\x1B\": // start ANSI escape code\n                    $this->tokenization[count($this->tokenization) - 1] = substr($this->tokenization[count($this->tokenization) - 1], 0, -1);\n                    //if (!strlen($this->tokenization[count($this->tokenization) - 1])) {\n                    //    array_pop($this->tokenization);\n                    //}\n                    $this->ansi .= \"\\x1B\";\n                    break;\n                default:\n                    $this->attrs[$this->y][$this->x] = clone $this->attr_cell;\n                    if ($this->x > strlen($this->screen[$this->y])) {\n                        $this->screen[$this->y] = str_repeat(' ', $this->x);\n                    }\n                    $this->screen[$this->y] = substr_replace(\n                        $this->screen[$this->y],\n                        $source[$i],\n                        $this->x,\n                        1\n                    );\n\n                    if ($this->x > $this->max_x) {\n                        $this->x = 0;\n                        $this->newLine();\n                    } else {\n                        $this->x++;\n                    }\n            }\n        }\n    }\n\n    /**\n     * Add a new line\n     *\n     * Also update the $this->screen and $this->history buffers\n     *\n     */\n    private function newLine()\n    {\n        //if ($this->y < $this->max_y) {\n        //    $this->y++;\n        //}\n\n        while ($this->y >= $this->max_y) {\n            $this->history = array_merge($this->history, [array_shift($this->screen)]);\n            $this->screen[] = '';\n\n            $this->history_attrs = array_merge($this->history_attrs, [array_shift($this->attrs)]);\n            $this->attrs[] = $this->attr_row;\n\n            if (count($this->history) >= $this->max_history) {\n                array_shift($this->history);\n                array_shift($this->history_attrs);\n            }\n\n            $this->y--;\n        }\n        $this->y++;\n    }\n\n    /**\n     * Returns the current coordinate without preformating\n     *\n     * @param \\stdClass $last_attr\n     * @param \\stdClass $cur_attr\n     * @param string $char\n     * @return string\n     */\n    private function processCoordinate(\\stdClass $last_attr, \\stdClass $cur_attr, $char)\n    {\n        $output = '';\n\n        if ($last_attr != $cur_attr) {\n            $close = $open = '';\n            if ($last_attr->foreground != $cur_attr->foreground) {\n                if ($cur_attr->foreground != 'white') {\n                    $open .= '<span style=\"color: ' . $cur_attr->foreground . '\">';\n                }\n                if ($last_attr->foreground != 'white') {\n                    $close = '</span>' . $close;\n                }\n            }\n            if ($last_attr->background != $cur_attr->background) {\n                if ($cur_attr->background != 'black') {\n                    $open .= '<span style=\"background: ' . $cur_attr->background . '\">';\n                }\n                if ($last_attr->background != 'black') {\n                    $close = '</span>' . $close;\n                }\n            }\n            if ($last_attr->bold != $cur_attr->bold) {\n                if ($cur_attr->bold) {\n                    $open .= '<b>';\n                } else {\n                    $close = '</b>' . $close;\n                }\n            }\n            if ($last_attr->underline != $cur_attr->underline) {\n                if ($cur_attr->underline) {\n                    $open .= '<u>';\n                } else {\n                    $close = '</u>' . $close;\n                }\n            }\n            if ($last_attr->blink != $cur_attr->blink) {\n                if ($cur_attr->blink) {\n                    $open .= '<blink>';\n                } else {\n                    $close = '</blink>' . $close;\n                }\n            }\n            $output .= $close . $open;\n        }\n\n        $output .= htmlspecialchars($char);\n\n        return $output;\n    }\n\n    /**\n     * Returns the current screen without preformating\n     *\n     * @return string\n     */\n    private function getScreenHelper()\n    {\n        $output = '';\n        $last_attr = $this->base_attr_cell;\n        for ($i = 0; $i <= $this->max_y; $i++) {\n            for ($j = 0; $j <= $this->max_x; $j++) {\n                $cur_attr = $this->attrs[$i][$j];\n                $output .= $this->processCoordinate($last_attr, $cur_attr, isset($this->screen[$i][$j]) ? $this->screen[$i][$j] : '');\n                $last_attr = $this->attrs[$i][$j];\n            }\n            $output .= \"\\r\\n\";\n        }\n        $output = substr($output, 0, -2);\n        // close any remaining open tags\n        $output .= $this->processCoordinate($last_attr, $this->base_attr_cell, '');\n        return rtrim($output);\n    }\n\n    /**\n     * Returns the current screen\n     *\n     * @return string\n     */\n    public function getScreen()\n    {\n        return '<pre width=\"' . ($this->max_x + 1) . '\" style=\"color: white; background: black\">' . $this->getScreenHelper() . '</pre>';\n    }\n\n    /**\n     * Returns the current screen and the x previous lines\n     *\n     * @return string\n     */\n    public function getHistory()\n    {\n        $scrollback = '';\n        $last_attr = $this->base_attr_cell;\n        for ($i = 0; $i < count($this->history); $i++) {\n            for ($j = 0; $j <= $this->max_x + 1; $j++) {\n                $cur_attr = $this->history_attrs[$i][$j];\n                $scrollback .= $this->processCoordinate($last_attr, $cur_attr, isset($this->history[$i][$j]) ? $this->history[$i][$j] : '');\n                $last_attr = $this->history_attrs[$i][$j];\n            }\n            $scrollback .= \"\\r\\n\";\n        }\n        $base_attr_cell = $this->base_attr_cell;\n        $this->base_attr_cell = $last_attr;\n        $scrollback .= $this->getScreen();\n        $this->base_attr_cell = $base_attr_cell;\n\n        return '<pre width=\"' . ($this->max_x + 1) . '\" style=\"color: white; background: black\">' . $scrollback . '</span></pre>';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php",
    "content": "<?php\n\n/**\n * ASN.1 Raw Element\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2012 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1;\n\n/**\n * ASN.1 Raw Element\n *\n * An ASN.1 ANY mapping will return an ASN1\\Element object. Use of this object\n * will also bypass the normal encoding rules in ASN1::encodeDER()\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Element\n{\n    /**\n     * Raw element value\n     *\n     * @var string\n     */\n    public $element;\n\n    /**\n     * Constructor\n     *\n     * @param string $encoded\n     * @return Element\n     */\n    public function __construct($encoded)\n    {\n        $this->element = $encoded;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AccessDescription.php",
    "content": "<?php\n\n/**\n * AccessDescription\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AccessDescription\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AccessDescription\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'accessMethod' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'accessLocation' => GeneralName::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AdministrationDomainName.php",
    "content": "<?php\n\n/**\n * AdministrationDomainName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AdministrationDomainName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AdministrationDomainName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        // if class isn't present it's assumed to be \\phpseclib3\\File\\ASN1::CLASS_UNIVERSAL or\n        // (if constant is present) \\phpseclib3\\File\\ASN1::CLASS_CONTEXT_SPECIFIC\n        'class' => ASN1::CLASS_APPLICATION,\n        'cast' => 2,\n        'children' => [\n            'numeric' => ['type' => ASN1::TYPE_NUMERIC_STRING],\n            'printable' => ['type' => ASN1::TYPE_PRINTABLE_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AlgorithmIdentifier.php",
    "content": "<?php\n\n/**\n * AlgorithmIdentifier\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AlgorithmIdentifier\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AlgorithmIdentifier\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'algorithm' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'parameters' => [\n                'type' => ASN1::TYPE_ANY,\n                'optional' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AnotherName.php",
    "content": "<?php\n\n/**\n * AnotherName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AnotherName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AnotherName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'type-id' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'value' => [\n                'type' => ASN1::TYPE_ANY,\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attribute.php",
    "content": "<?php\n\n/**\n * Attribute\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Attribute\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Attribute\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'type' => AttributeType::MAP,\n            'value' => [\n                'type' => ASN1::TYPE_SET,\n                'min' => 1,\n                'max' => -1,\n                'children' => AttributeValue::MAP\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeType.php",
    "content": "<?php\n\n/**\n * AttributeType\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AttributeType\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AttributeType\n{\n    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeTypeAndValue.php",
    "content": "<?php\n\n/**\n * AttributeTypeAndValue\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AttributeTypeAndValue\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AttributeTypeAndValue\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'type' => AttributeType::MAP,\n            'value' => AttributeValue::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeValue.php",
    "content": "<?php\n\n/**\n * AttributeValue\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AttributeValue\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AttributeValue\n{\n    const MAP = ['type' => ASN1::TYPE_ANY];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attributes.php",
    "content": "<?php\n\n/**\n * Attributes\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Attributes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Attributes\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SET,\n        'min' => 1,\n        'max' => -1,\n        'children' => Attribute::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityInfoAccessSyntax.php",
    "content": "<?php\n\n/**\n * AuthorityInfoAccessSyntax\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AuthorityInfoAccessSyntax\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AuthorityInfoAccessSyntax\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => AccessDescription::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityKeyIdentifier.php",
    "content": "<?php\n\n/**\n * AuthorityKeyIdentifier\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * AuthorityKeyIdentifier\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class AuthorityKeyIdentifier\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'keyIdentifier' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + KeyIdentifier::MAP,\n            'authorityCertIssuer' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + GeneralNames::MAP,\n            'authorityCertSerialNumber' => [\n                'constant' => 2,\n                'optional' => true,\n                'implicit' => true\n            ] + CertificateSerialNumber::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BaseDistance.php",
    "content": "<?php\n\n/**\n * BaseDistance\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * BaseDistance\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BaseDistance\n{\n    const MAP = ['type' => ASN1::TYPE_INTEGER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BasicConstraints.php",
    "content": "<?php\n\n/**\n * BasicConstraints\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * BasicConstraints\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BasicConstraints\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'cA' => [\n                'type' => ASN1::TYPE_BOOLEAN,\n                'optional' => true,\n                'default' => false\n            ],\n            'pathLenConstraint' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'optional' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttribute.php",
    "content": "<?php\n\n/**\n * BuiltInDomainDefinedAttribute\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * BuiltInDomainDefinedAttribute\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BuiltInDomainDefinedAttribute\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'type' => ['type' => ASN1::TYPE_PRINTABLE_STRING],\n            'value' => ['type' => ASN1::TYPE_PRINTABLE_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttributes.php",
    "content": "<?php\n\n/**\n * BuiltInDomainDefinedAttributes\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * BuiltInDomainDefinedAttributes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BuiltInDomainDefinedAttributes\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => 4, // ub-domain-defined-attributes\n        'children' => BuiltInDomainDefinedAttribute::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInStandardAttributes.php",
    "content": "<?php\n\n/**\n * BuiltInStandardAttributes\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * BuiltInStandardAttributes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BuiltInStandardAttributes\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'country-name' => ['optional' => true] + CountryName::MAP,\n            'administration-domain-name' => ['optional' => true] + AdministrationDomainName::MAP,\n            'network-address' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + NetworkAddress::MAP,\n            'terminal-identifier' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + TerminalIdentifier::MAP,\n            'private-domain-name' => [\n                'constant' => 2,\n                'optional' => true,\n                'explicit' => true\n            ] + PrivateDomainName::MAP,\n            'organization-name' => [\n                'constant' => 3,\n                'optional' => true,\n                'implicit' => true\n            ] + OrganizationName::MAP,\n            'numeric-user-identifier' => [\n                'constant' => 4,\n                'optional' => true,\n                'implicit' => true\n            ] + NumericUserIdentifier::MAP,\n            'personal-name' => [\n                'constant' => 5,\n                'optional' => true,\n                'implicit' => true\n            ] + PersonalName::MAP,\n            'organizational-unit-names' => [\n                'constant' => 6,\n                'optional' => true,\n                'implicit' => true\n            ] + OrganizationalUnitNames::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CPSuri.php",
    "content": "<?php\n\n/**\n * CPSuri\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CPSuri\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CPSuri\n{\n    const MAP = ['type' => ASN1::TYPE_IA5_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLDistributionPoints.php",
    "content": "<?php\n\n/**\n * CRLDistributionPoints\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CRLDistributionPoints\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CRLDistributionPoints\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => DistributionPoint::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLNumber.php",
    "content": "<?php\n\n/**\n * CRLNumber\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CRLNumber\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CRLNumber\n{\n    const MAP = ['type' => ASN1::TYPE_INTEGER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLReason.php",
    "content": "<?php\n\n/**\n * CRLReason\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CRLReason\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CRLReason\n{\n    const MAP = [\n        'type' => ASN1::TYPE_ENUMERATED,\n        'mapping' => [\n            'unspecified',\n            'keyCompromise',\n            'cACompromise',\n            'affiliationChanged',\n            'superseded',\n            'cessationOfOperation',\n            'certificateHold',\n            // Value 7 is not used.\n            8 => 'removeFromCRL',\n            'privilegeWithdrawn',\n            'aACompromise'\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertPolicyId.php",
    "content": "<?php\n\n/**\n * CertPolicyId\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CertPolicyId\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertPolicyId\n{\n    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Certificate.php",
    "content": "<?php\n\n/**\n * Certificate\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Certificate\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Certificate\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'tbsCertificate' => TBSCertificate::MAP,\n            'signatureAlgorithm' => AlgorithmIdentifier::MAP,\n            'signature' => ['type' => ASN1::TYPE_BIT_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateIssuer.php",
    "content": "<?php\n\n/**\n * CertificateIssuer\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\n/**\n * CertificateIssuer\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertificateIssuer\n{\n    const MAP = GeneralNames::MAP;\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateList.php",
    "content": "<?php\n\n/**\n * CertificateList\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CertificateList\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertificateList\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'tbsCertList' => TBSCertList::MAP,\n            'signatureAlgorithm' => AlgorithmIdentifier::MAP,\n            'signature' => ['type' => ASN1::TYPE_BIT_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificatePolicies.php",
    "content": "<?php\n\n/**\n * CertificatePolicies\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CertificatePolicies\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertificatePolicies\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => PolicyInformation::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSerialNumber.php",
    "content": "<?php\n\n/**\n * CertificateSerialNumber\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CertificateSerialNumber\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertificateSerialNumber\n{\n    const MAP = ['type' => ASN1::TYPE_INTEGER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequest.php",
    "content": "<?php\n\n/**\n * CertificationRequest\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CertificationRequest\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertificationRequest\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'certificationRequestInfo' => CertificationRequestInfo::MAP,\n            'signatureAlgorithm' => AlgorithmIdentifier::MAP,\n            'signature' => ['type' => ASN1::TYPE_BIT_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequestInfo.php",
    "content": "<?php\n\n/**\n * CertificationRequestInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CertificationRequestInfo\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CertificationRequestInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => ['v1']\n            ],\n            'subject' => Name::MAP,\n            'subjectPKInfo' => SubjectPublicKeyInfo::MAP,\n            'attributes' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + Attributes::MAP,\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Characteristic_two.php",
    "content": "<?php\n\n/**\n * Characteristic_two\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Characteristic_two\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Characteristic_two\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'm' => ['type' => ASN1::TYPE_INTEGER], // field size 2**m\n            'basis' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'parameters' => [\n                'type' => ASN1::TYPE_ANY,\n                'optional' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CountryName.php",
    "content": "<?php\n\n/**\n * CountryName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * CountryName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class CountryName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        // if class isn't present it's assumed to be \\phpseclib3\\File\\ASN1::CLASS_UNIVERSAL or\n        // (if constant is present) \\phpseclib3\\File\\ASN1::CLASS_CONTEXT_SPECIFIC\n        'class' => ASN1::CLASS_APPLICATION,\n        'cast' => 1,\n        'children' => [\n            'x121-dcc-code' => ['type' => ASN1::TYPE_NUMERIC_STRING],\n            'iso-3166-alpha2-code' => ['type' => ASN1::TYPE_PRINTABLE_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Curve.php",
    "content": "<?php\n\n/**\n * Curve\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Curve\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Curve\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'a' => FieldElement::MAP,\n            'b' => FieldElement::MAP,\n            'seed' => [\n                'type' => ASN1::TYPE_BIT_STRING,\n                'optional' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DHParameter.php",
    "content": "<?php\n\n/**\n * DHParameter\n *\n * From: https://www.teletrust.de/fileadmin/files/oid/oid_pkcs-3v1-4.pdf#page=6\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DHParameter\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DHParameter\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'prime' => ['type' => ASN1::TYPE_INTEGER],\n            'base' => ['type' => ASN1::TYPE_INTEGER],\n            'privateValueLength' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'optional' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAParams.php",
    "content": "<?php\n\n/**\n * DSAParams\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DSAParams\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DSAParams\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'p' => ['type' => ASN1::TYPE_INTEGER],\n            'q' => ['type' => ASN1::TYPE_INTEGER],\n            'g' => ['type' => ASN1::TYPE_INTEGER]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPrivateKey.php",
    "content": "<?php\n\n/**\n * DSAPrivateKey\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DSAPrivateKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DSAPrivateKey\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => ['type' => ASN1::TYPE_INTEGER],\n            'p' => ['type' => ASN1::TYPE_INTEGER],\n            'q' => ['type' => ASN1::TYPE_INTEGER],\n            'g' => ['type' => ASN1::TYPE_INTEGER],\n            'y' => ['type' => ASN1::TYPE_INTEGER],\n            'x' => ['type' => ASN1::TYPE_INTEGER]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPublicKey.php",
    "content": "<?php\n\n/**\n * DSAPublicKey\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DSAPublicKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DSAPublicKey\n{\n    const MAP = ['type' => ASN1::TYPE_INTEGER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestInfo.php",
    "content": "<?php\n\n/**\n * DigestInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DigestInfo\n *\n * from https://tools.ietf.org/html/rfc2898#appendix-A.3\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DigestInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'digestAlgorithm' => AlgorithmIdentifier::MAP,\n            'digest' => ['type' => ASN1::TYPE_OCTET_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DirectoryString.php",
    "content": "<?php\n\n/**\n * DirectoryString\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DirectoryString\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DirectoryString\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'teletexString' => ['type' => ASN1::TYPE_TELETEX_STRING],\n            'printableString' => ['type' => ASN1::TYPE_PRINTABLE_STRING],\n            'universalString' => ['type' => ASN1::TYPE_UNIVERSAL_STRING],\n            'utf8String' => ['type' => ASN1::TYPE_UTF8_STRING],\n            'bmpString' => ['type' => ASN1::TYPE_BMP_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DisplayText.php",
    "content": "<?php\n\n/**\n * DisplayText\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DisplayText\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DisplayText\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'ia5String' => ['type' => ASN1::TYPE_IA5_STRING],\n            'visibleString' => ['type' => ASN1::TYPE_VISIBLE_STRING],\n            'bmpString' => ['type' => ASN1::TYPE_BMP_STRING],\n            'utf8String' => ['type' => ASN1::TYPE_UTF8_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPoint.php",
    "content": "<?php\n\n/**\n * DistributionPoint\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DistributionPoint\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DistributionPoint\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'distributionPoint' => [\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true\n            ] + DistributionPointName::MAP,\n            'reasons' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + ReasonFlags::MAP,\n            'cRLIssuer' => [\n                'constant' => 2,\n                'optional' => true,\n                'implicit' => true\n            ] + GeneralNames::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPointName.php",
    "content": "<?php\n\n/**\n * DistributionPointName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DistributionPointName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DistributionPointName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'fullName' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + GeneralNames::MAP,\n            'nameRelativeToCRLIssuer' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + RelativeDistinguishedName::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DssSigValue.php",
    "content": "<?php\n\n/**\n * DssSigValue\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * DssSigValue\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DssSigValue\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'r' => ['type' => ASN1::TYPE_INTEGER],\n            's' => ['type' => ASN1::TYPE_INTEGER]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECParameters.php",
    "content": "<?php\n\n/**\n * ECParameters\n *\n * From: https://tools.ietf.org/html/rfc5915\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ECParameters\n *\n *  ECParameters ::= CHOICE {\n *    namedCurve         OBJECT IDENTIFIER\n *    -- implicitCurve   NULL\n *    -- specifiedCurve  SpecifiedECDomain\n *  }\n *    -- implicitCurve and specifiedCurve MUST NOT be used in PKIX.\n *    -- Details for SpecifiedECDomain can be found in [X9.62].\n *    -- Any future additions to this CHOICE should be coordinated\n *    -- with ANSI X9.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ECParameters\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'namedCurve' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'implicitCurve' => ['type' => ASN1::TYPE_NULL],\n            'specifiedCurve' => SpecifiedECDomain::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPoint.php",
    "content": "<?php\n\n/**\n * ECPoint\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ECPoint\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ECPoint\n{\n    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPrivateKey.php",
    "content": "<?php\n\n/**\n * ECPrivateKey\n *\n * From: https://tools.ietf.org/html/rfc5915\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ECPrivateKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ECPrivateKey\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => [1 => 'ecPrivkeyVer1']\n            ],\n            'privateKey' => ['type' => ASN1::TYPE_OCTET_STRING],\n            'parameters' => [\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true\n            ] + ECParameters::MAP,\n            'publicKey' => [\n                'type' => ASN1::TYPE_BIT_STRING,\n                'constant' => 1,\n                'optional' => true,\n                'explicit' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EDIPartyName.php",
    "content": "<?php\n\n/**\n * EDIPartyName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * EDIPartyName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EDIPartyName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'nameAssigner' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + DirectoryString::MAP,\n            // partyName is technically required but \\phpseclib3\\File\\ASN1 doesn't currently support non-optional constants and\n            // setting it to optional gets the job done in any event.\n            'partyName' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + DirectoryString::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EcdsaSigValue.php",
    "content": "<?php\n\n/**\n * EcdsaSigValue\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * EcdsaSigValue\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EcdsaSigValue\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'r' => ['type' => ASN1::TYPE_INTEGER],\n            's' => ['type' => ASN1::TYPE_INTEGER]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedData.php",
    "content": "<?php\n\n/**\n * EncryptedData\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * EncryptedData\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EncryptedData\n{\n    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedPrivateKeyInfo.php",
    "content": "<?php\n\n/**\n * EncryptedPrivateKeyInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * EncryptedPrivateKeyInfo\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EncryptedPrivateKeyInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'encryptionAlgorithm' => AlgorithmIdentifier::MAP,\n            'encryptedData' => EncryptedData::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtKeyUsageSyntax.php",
    "content": "<?php\n\n/**\n * ExtKeyUsageSyntax\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ExtKeyUsageSyntax\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ExtKeyUsageSyntax\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => KeyPurposeId::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extension.php",
    "content": "<?php\n\n/**\n * Extension\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Extension\n *\n * A certificate using system MUST reject the certificate if it encounters\n * a critical extension it does not recognize; however, a non-critical\n * extension may be ignored if it is not recognized.\n *\n * http://tools.ietf.org/html/rfc5280#section-4.2\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Extension\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'extnId' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'critical' => [\n                'type' => ASN1::TYPE_BOOLEAN,\n                'optional' => true,\n                'default' => false\n            ],\n            'extnValue' => ['type' => ASN1::TYPE_OCTET_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttribute.php",
    "content": "<?php\n\n/**\n * ExtensionAttribute\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ExtensionAttribute\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ExtensionAttribute\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'extension-attribute-type' => [\n                'type' => ASN1::TYPE_PRINTABLE_STRING,\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'extension-attribute-value' => [\n                'type' => ASN1::TYPE_ANY,\n                'constant' => 1,\n                'optional' => true,\n                'explicit' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttributes.php",
    "content": "<?php\n\n/**\n * ExtensionAttributes\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ExtensionAttributes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ExtensionAttributes\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SET,\n        'min' => 1,\n        'max' => 256, // ub-extension-attributes\n        'children' => ExtensionAttribute::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extensions.php",
    "content": "<?php\n\n/**\n * Extensions\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Extensions\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Extensions\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        // technically, it's MAX, but we'll assume anything < 0 is MAX\n        'max' => -1,\n        // if 'children' isn't an array then 'min' and 'max' must be defined\n        'children' => Extension::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldElement.php",
    "content": "<?php\n\n/**\n * FieldElement\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * FieldElement\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class FieldElement\n{\n    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldID.php",
    "content": "<?php\n\n/**\n * FieldID\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * FieldID\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class FieldID\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'fieldType' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],\n            'parameters' => [\n                'type' => ASN1::TYPE_ANY,\n                'optional' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralName.php",
    "content": "<?php\n\n/**\n * GeneralName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * GeneralName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class GeneralName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'otherName' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + AnotherName::MAP,\n            'rfc822Name' => [\n                'type' => ASN1::TYPE_IA5_STRING,\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'dNSName' => [\n                'type' => ASN1::TYPE_IA5_STRING,\n                'constant' => 2,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'x400Address' => [\n                'constant' => 3,\n                'optional' => true,\n                'implicit' => true\n            ] + ORAddress::MAP,\n            'directoryName' => [\n                'constant' => 4,\n                'optional' => true,\n                'explicit' => true\n            ] + Name::MAP,\n            'ediPartyName' => [\n                'constant' => 5,\n                'optional' => true,\n                'implicit' => true\n            ] + EDIPartyName::MAP,\n            'uniformResourceIdentifier' => [\n                'type' => ASN1::TYPE_IA5_STRING,\n                'constant' => 6,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'iPAddress' => [\n                'type' => ASN1::TYPE_OCTET_STRING,\n                'constant' => 7,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'registeredID' => [\n                'type' => ASN1::TYPE_OBJECT_IDENTIFIER,\n                'constant' => 8,\n                'optional' => true,\n                'implicit' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralNames.php",
    "content": "<?php\n\n/**\n * GeneralNames\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * GeneralNames\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class GeneralNames\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => GeneralName::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtree.php",
    "content": "<?php\n\n/**\n * GeneralSubtree\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * GeneralSubtree\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class GeneralSubtree\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'base' => GeneralName::MAP,\n            'minimum' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true,\n                'default' => '0'\n            ] + BaseDistance::MAP,\n            'maximum' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true,\n            ] + BaseDistance::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtrees.php",
    "content": "<?php\n\n/**\n * GeneralSubtrees\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * GeneralSubtrees\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class GeneralSubtrees\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => GeneralSubtree::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HashAlgorithm.php",
    "content": "<?php\n\n/**\n * HashAglorithm\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\n/**\n * HashAglorithm\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class HashAlgorithm\n{\n    const MAP = AlgorithmIdentifier::MAP;\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HoldInstructionCode.php",
    "content": "<?php\n\n/**\n * HoldInstructionCode\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * HoldInstructionCode\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class HoldInstructionCode\n{\n    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/InvalidityDate.php",
    "content": "<?php\n\n/**\n * InvalidityDate\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * InvalidityDate\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class InvalidityDate\n{\n    const MAP = ['type' => ASN1::TYPE_GENERALIZED_TIME];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAltName.php",
    "content": "<?php\n\n/**\n * IssuerAltName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\n/**\n * IssuerAltName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class IssuerAltName\n{\n    const MAP = GeneralNames::MAP;\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuingDistributionPoint.php",
    "content": "<?php\n\n/**\n * IssuingDistributionPoint\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * IssuingDistributionPoint\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class IssuingDistributionPoint\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'distributionPoint' => [\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true\n            ] + DistributionPointName::MAP,\n            'onlyContainsUserCerts' => [\n                'type' => ASN1::TYPE_BOOLEAN,\n                'constant' => 1,\n                'optional' => true,\n                'default' => false,\n                'implicit' => true\n            ],\n            'onlyContainsCACerts' => [\n                'type' => ASN1::TYPE_BOOLEAN,\n                'constant' => 2,\n                'optional' => true,\n                'default' => false,\n                'implicit' => true\n            ],\n            'onlySomeReasons' => [\n                'constant' => 3,\n                'optional' => true,\n                'implicit' => true\n            ] + ReasonFlags::MAP,\n            'indirectCRL' => [\n                'type' => ASN1::TYPE_BOOLEAN,\n                'constant' => 4,\n                'optional' => true,\n                'default' => false,\n                'implicit' => true\n            ],\n            'onlyContainsAttributeCerts' => [\n                'type' => ASN1::TYPE_BOOLEAN,\n                'constant' => 5,\n                'optional' => true,\n                'default' => false,\n                'implicit' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyIdentifier.php",
    "content": "<?php\n\n/**\n * KeyIdentifier\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * KeyIdentifier\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class KeyIdentifier\n{\n    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyPurposeId.php",
    "content": "<?php\n\n/**\n * KeyPurposeId\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * KeyPurposeId\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class KeyPurposeId\n{\n    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyUsage.php",
    "content": "<?php\n\n/**\n * KeyUsage\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * KeyUsage\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class KeyUsage\n{\n    const MAP = [\n        'type' => ASN1::TYPE_BIT_STRING,\n        'mapping' => [\n            'digitalSignature',\n            'nonRepudiation',\n            'keyEncipherment',\n            'dataEncipherment',\n            'keyAgreement',\n            'keyCertSign',\n            'cRLSign',\n            'encipherOnly',\n            'decipherOnly'\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MaskGenAlgorithm.php",
    "content": "<?php\n\n/**\n * MaskGenAglorithm\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\n/**\n * MaskGenAglorithm\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class MaskGenAlgorithm\n{\n    const MAP = AlgorithmIdentifier::MAP;\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Name.php",
    "content": "<?php\n\n/**\n * Name\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Name\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Name\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'rdnSequence' => RDNSequence::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NameConstraints.php",
    "content": "<?php\n\n/**\n * NameConstraints\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * NameConstraints\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class NameConstraints\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'permittedSubtrees' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + GeneralSubtrees::MAP,\n            'excludedSubtrees' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + GeneralSubtrees::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NetworkAddress.php",
    "content": "<?php\n\n/**\n * NetworkAddress\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * NetworkAddress\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class NetworkAddress\n{\n    const MAP = ['type' => ASN1::TYPE_NUMERIC_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NoticeReference.php",
    "content": "<?php\n\n/**\n * NoticeReference\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * NoticeReference\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class NoticeReference\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'organization' => DisplayText::MAP,\n            'noticeNumbers' => [\n                'type' => ASN1::TYPE_SEQUENCE,\n                'min' => 1,\n                'max' => 200,\n                'children' => ['type' => ASN1::TYPE_INTEGER]\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NumericUserIdentifier.php",
    "content": "<?php\n\n/**\n * NumericUserIdentifier\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * NumericUserIdentifier\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class NumericUserIdentifier\n{\n    const MAP = ['type' => ASN1::TYPE_NUMERIC_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ORAddress.php",
    "content": "<?php\n\n/**\n * ORAddress\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ORAddress\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ORAddress\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'built-in-standard-attributes' => BuiltInStandardAttributes::MAP,\n            'built-in-domain-defined-attributes' => ['optional' => true] + BuiltInDomainDefinedAttributes::MAP,\n            'extension-attributes' => ['optional' => true] + ExtensionAttributes::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OneAsymmetricKey.php",
    "content": "<?php\n\n/**\n * OneAsymmetricKey\n *\n * See https://tools.ietf.org/html/rfc5958\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * OneAsymmetricKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OneAsymmetricKey\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => ['v1', 'v2']\n            ],\n            'privateKeyAlgorithm' => AlgorithmIdentifier::MAP,\n            'privateKey' => PrivateKey::MAP,\n            'attributes' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + Attributes::MAP,\n            'publicKey' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + PublicKey::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationName.php",
    "content": "<?php\n\n/**\n * OrganizationName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * OrganizationName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OrganizationName\n{\n    const MAP = ['type' => ASN1::TYPE_PRINTABLE_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationalUnitNames.php",
    "content": "<?php\n\n/**\n * OrganizationalUnitNames\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * OrganizationalUnitNames\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OrganizationalUnitNames\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => 4, // ub-organizational-units\n        'children' => ['type' => ASN1::TYPE_PRINTABLE_STRING]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfo.php",
    "content": "<?php\n\n/**\n * OtherPrimeInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * OtherPrimeInfo\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OtherPrimeInfo\n{\n    // version must be multi if otherPrimeInfos present\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'prime' => ['type' => ASN1::TYPE_INTEGER],      // ri\n            'exponent' => ['type' => ASN1::TYPE_INTEGER],   // di\n            'coefficient' => ['type' => ASN1::TYPE_INTEGER] // ti\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfos.php",
    "content": "<?php\n\n/**\n * OtherPrimeInfos\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * OtherPrimeInfos\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OtherPrimeInfos\n{\n    // version must be multi if otherPrimeInfos present\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => OtherPrimeInfo::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBEParameter.php",
    "content": "<?php\n\n/**\n * PBEParameter\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PBEParameter\n *\n * from https://tools.ietf.org/html/rfc2898#appendix-A.3\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PBEParameter\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'salt' => ['type' => ASN1::TYPE_OCTET_STRING],\n            'iterationCount' => ['type' => ASN1::TYPE_INTEGER]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBES2params.php",
    "content": "<?php\n\n/**\n * PBES2params\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PBES2params\n *\n * from https://tools.ietf.org/html/rfc2898#appendix-A.3\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PBES2params\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'keyDerivationFunc' => AlgorithmIdentifier::MAP,\n            'encryptionScheme' => AlgorithmIdentifier::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBKDF2params.php",
    "content": "<?php\n\n/**\n * PBKDF2params\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PBKDF2params\n *\n * from https://tools.ietf.org/html/rfc2898#appendix-A.3\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PBKDF2params\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            // technically, this is a CHOICE in RFC2898 but the other \"choice\" is, currently, more of a placeholder\n            // in the RFC\n            'salt' => ['type' => ASN1::TYPE_OCTET_STRING],\n            'iterationCount' => ['type' => ASN1::TYPE_INTEGER],\n            'keyLength' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'optional' => true\n            ],\n            'prf' => AlgorithmIdentifier::MAP + ['optional' => true]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBMAC1params.php",
    "content": "<?php\n\n/**\n * PBMAC1params\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PBMAC1params\n *\n * from https://tools.ietf.org/html/rfc2898#appendix-A.3\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PBMAC1params\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'keyDerivationFunc' => AlgorithmIdentifier::MAP,\n            'messageAuthScheme' => AlgorithmIdentifier::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PKCS9String.php",
    "content": "<?php\n\n/**\n * PKCS9String\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PKCS9String\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PKCS9String\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'ia5String' => ['type' => ASN1::TYPE_IA5_STRING],\n            'directoryString' => DirectoryString::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Pentanomial.php",
    "content": "<?php\n\n/**\n * Pentanomial\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Pentanomial\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Pentanomial\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'k1' => ['type' => ASN1::TYPE_INTEGER], // k1 > 0\n            'k2' => ['type' => ASN1::TYPE_INTEGER], // k2 > k1\n            'k3' => ['type' => ASN1::TYPE_INTEGER], // k3 > h2\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PersonalName.php",
    "content": "<?php\n\n/**\n * PersonalName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PersonalName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PersonalName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SET,\n        'children' => [\n            'surname' => [\n                'type' => ASN1::TYPE_PRINTABLE_STRING,\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'given-name' => [\n                'type' => ASN1::TYPE_PRINTABLE_STRING,\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'initials' => [\n                'type' => ASN1::TYPE_PRINTABLE_STRING,\n                'constant' => 2,\n                'optional' => true,\n                'implicit' => true\n            ],\n            'generation-qualifier' => [\n                'type' => ASN1::TYPE_PRINTABLE_STRING,\n                'constant' => 3,\n                'optional' => true,\n                'implicit' => true\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyInformation.php",
    "content": "<?php\n\n/**\n * PolicyInformation\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PolicyInformation\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PolicyInformation\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'policyIdentifier' => CertPolicyId::MAP,\n            'policyQualifiers' => [\n                'type' => ASN1::TYPE_SEQUENCE,\n                'min' => 0,\n                'max' => -1,\n                'optional' => true,\n                'children' => PolicyQualifierInfo::MAP\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyMappings.php",
    "content": "<?php\n\n/**\n * PolicyMappings\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PolicyMappings\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PolicyMappings\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => [\n            'type' => ASN1::TYPE_SEQUENCE,\n            'children' => [\n                'issuerDomainPolicy' => CertPolicyId::MAP,\n                'subjectDomainPolicy' => CertPolicyId::MAP\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierId.php",
    "content": "<?php\n\n/**\n * PolicyQualifierId\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PolicyQualifierId\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PolicyQualifierId\n{\n    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierInfo.php",
    "content": "<?php\n\n/**\n * PolicyQualifierInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PolicyQualifierInfo\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PolicyQualifierInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'policyQualifierId' => PolicyQualifierId::MAP,\n            'qualifier' => ['type' => ASN1::TYPE_ANY]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PostalAddress.php",
    "content": "<?php\n\n/**\n * PostalAddress\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PostalAddress\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PostalAddress\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'optional' => true,\n        'min' => 1,\n        'max' => -1,\n        'children' => DirectoryString::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Prime_p.php",
    "content": "<?php\n\n/**\n * Prime_p\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Prime_p\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Prime_p\n{\n    const MAP = ['type' => ASN1::TYPE_INTEGER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateDomainName.php",
    "content": "<?php\n\n/**\n * PrivateDomainName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PrivateDomainName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PrivateDomainName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'numeric' => ['type' => ASN1::TYPE_NUMERIC_STRING],\n            'printable' => ['type' => ASN1::TYPE_PRINTABLE_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKey.php",
    "content": "<?php\n\n/**\n * PrivateKey\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PrivateKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PrivateKey\n{\n    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyInfo.php",
    "content": "<?php\n\n/**\n * PrivateKeyInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PrivateKeyInfo\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PrivateKeyInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => ['v1']\n            ],\n            'privateKeyAlgorithm' => AlgorithmIdentifier::MAP,\n            'privateKey' => PrivateKey::MAP,\n            'attributes' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true\n            ] + Attributes::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyUsagePeriod.php",
    "content": "<?php\n\n/**\n * PrivateKeyUsagePeriod\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PrivateKeyUsagePeriod\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PrivateKeyUsagePeriod\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'notBefore' => [\n                'constant' => 0,\n                'optional' => true,\n                'implicit' => true,\n                'type' => ASN1::TYPE_GENERALIZED_TIME],\n            'notAfter' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true,\n                'type' => ASN1::TYPE_GENERALIZED_TIME]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKey.php",
    "content": "<?php\n\n/**\n * PublicKey\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PublicKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PublicKey\n{\n    const MAP = ['type' => ASN1::TYPE_BIT_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyAndChallenge.php",
    "content": "<?php\n\n/**\n * PublicKeyAndChallenge\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PublicKeyAndChallenge\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PublicKeyAndChallenge\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'spki' => SubjectPublicKeyInfo::MAP,\n            'challenge' => ['type' => ASN1::TYPE_IA5_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyInfo.php",
    "content": "<?php\n\n/**\n * PublicKeyInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * PublicKeyInfo\n *\n * this format is not formally defined anywhere but is none-the-less the form you\n * get when you do \"openssl rsa -in private.pem -outform PEM -pubout\"\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PublicKeyInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'publicKeyAlgorithm' => AlgorithmIdentifier::MAP,\n            'publicKey' => ['type' => ASN1::TYPE_BIT_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RC2CBCParameter.php",
    "content": "<?php\n\n/**\n * RC2CBCParameter\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RC2CBCParameter\n *\n * from https://tools.ietf.org/html/rfc2898#appendix-A.3\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RC2CBCParameter\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'rc2ParametersVersion' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'optional' => true\n            ],\n            'iv' => ['type' => ASN1::TYPE_OCTET_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RDNSequence.php",
    "content": "<?php\n\n/**\n * RDNSequence\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RDNSequence\n *\n * In practice, RDNs containing multiple name-value pairs (called \"multivalued RDNs\") are rare,\n * but they can be useful at times when either there is no unique attribute in the entry or you\n * want to ensure that the entry's DN contains some useful identifying information.\n *\n * - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RDNSequence\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        // RDNSequence does not define a min or a max, which means it doesn't have one\n        'min' => 0,\n        'max' => -1,\n        'children' => RelativeDistinguishedName::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPrivateKey.php",
    "content": "<?php\n\n/**\n * RSAPrivateKey\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RSAPrivateKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RSAPrivateKey\n{\n    // version must be multi if otherPrimeInfos present\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => ['two-prime', 'multi']\n            ],\n            'modulus' => ['type' => ASN1::TYPE_INTEGER],         // n\n            'publicExponent' => ['type' => ASN1::TYPE_INTEGER],  // e\n            'privateExponent' => ['type' => ASN1::TYPE_INTEGER], // d\n            'prime1' => ['type' => ASN1::TYPE_INTEGER],          // p\n            'prime2' => ['type' => ASN1::TYPE_INTEGER],          // q\n            'exponent1' => ['type' => ASN1::TYPE_INTEGER],       // d mod (p-1)\n            'exponent2' => ['type' => ASN1::TYPE_INTEGER],       // d mod (q-1)\n            'coefficient' => ['type' => ASN1::TYPE_INTEGER],     // (inverse of q) mod p\n            'otherPrimeInfos' => OtherPrimeInfos::MAP + ['optional' => true]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPublicKey.php",
    "content": "<?php\n\n/**\n * RSAPublicKey\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RSAPublicKey\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RSAPublicKey\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'modulus' => ['type' => ASN1::TYPE_INTEGER],\n            'publicExponent' => ['type' => ASN1::TYPE_INTEGER]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSASSA_PSS_params.php",
    "content": "<?php\n\n/**\n * RSASSA_PSS_params\n *\n * As defined in https://tools.ietf.org/html/rfc4055#section-3.1\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RSASSA_PSS_params\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RSASSA_PSS_params\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'hashAlgorithm' => [\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true,\n                //'default'  => 'sha1Identifier'\n            ] + HashAlgorithm::MAP,\n            'maskGenAlgorithm' => [\n                'constant' => 1,\n                'optional' => true,\n                'explicit' => true,\n                //'default'  => 'mgf1SHA1Identifier'\n            ] + MaskGenAlgorithm::MAP,\n            'saltLength' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'constant' => 2,\n                'optional' => true,\n                'explicit' => true,\n                'default' => 20\n            ],\n            'trailerField' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'constant' => 3,\n                'optional' => true,\n                'explicit' => true,\n                'default' => 1\n            ]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ReasonFlags.php",
    "content": "<?php\n\n/**\n * ReasonFlags\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * ReasonFlags\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ReasonFlags\n{\n    const MAP = [\n        'type' => ASN1::TYPE_BIT_STRING,\n        'mapping' => [\n            'unused',\n            'keyCompromise',\n            'cACompromise',\n            'affiliationChanged',\n            'superseded',\n            'cessationOfOperation',\n            'certificateHold',\n            'privilegeWithdrawn',\n            'aACompromise'\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RelativeDistinguishedName.php",
    "content": "<?php\n\n/**\n * RelativeDistinguishedName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RelativeDistinguishedName\n *\n * In practice, RDNs containing multiple name-value pairs (called \"multivalued RDNs\") are rare,\n * but they can be useful at times when either there is no unique attribute in the entry or you\n * want to ensure that the entry's DN contains some useful identifying information.\n *\n * - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RelativeDistinguishedName\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SET,\n        'min' => 1,\n        'max' => -1,\n        'children' => AttributeTypeAndValue::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevokedCertificate.php",
    "content": "<?php\n\n/**\n * RevokedCertificate\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * RevokedCertificate\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class RevokedCertificate\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'userCertificate' => CertificateSerialNumber::MAP,\n            'revocationDate' => Time::MAP,\n            'crlEntryExtensions' => [\n                'optional' => true\n            ] + Extensions::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedPublicKeyAndChallenge.php",
    "content": "<?php\n\n/**\n * SignedPublicKeyAndChallenge\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * SignedPublicKeyAndChallenge\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SignedPublicKeyAndChallenge\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'publicKeyAndChallenge' => PublicKeyAndChallenge::MAP,\n            'signatureAlgorithm' => AlgorithmIdentifier::MAP,\n            'signature' => ['type' => ASN1::TYPE_BIT_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SpecifiedECDomain.php",
    "content": "<?php\n\n/**\n * SpecifiedECDomain\n *\n * From: http://www.secg.org/sec1-v2.pdf#page=109\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * SpecifiedECDomain\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SpecifiedECDomain\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => [1 => 'ecdpVer1', 'ecdpVer2', 'ecdpVer3']\n            ],\n            'fieldID' => FieldID::MAP,\n            'curve' => Curve::MAP,\n            'base' => ECPoint::MAP,\n            'order' => ['type' => ASN1::TYPE_INTEGER],\n            'cofactor' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'optional' => true\n            ],\n            'hash' => ['optional' => true] + HashAlgorithm::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectAltName.php",
    "content": "<?php\n\n/**\n * SubjectAltName\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\n/**\n * SubjectAltName\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SubjectAltName\n{\n    const MAP = GeneralNames::MAP;\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectDirectoryAttributes.php",
    "content": "<?php\n\n/**\n * SubjectDirectoryAttributes\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * SubjectDirectoryAttributes\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SubjectDirectoryAttributes\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => Attribute::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectInfoAccessSyntax.php",
    "content": "<?php\n\n/**\n * SubjectInfoAccessSyntax\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * SubjectInfoAccessSyntax\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SubjectInfoAccessSyntax\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'min' => 1,\n        'max' => -1,\n        'children' => AccessDescription::MAP\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectPublicKeyInfo.php",
    "content": "<?php\n\n/**\n * SubjectPublicKeyInfo\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * SubjectPublicKeyInfo\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class SubjectPublicKeyInfo\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'algorithm' => AlgorithmIdentifier::MAP,\n            'subjectPublicKey' => ['type' => ASN1::TYPE_BIT_STRING]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php",
    "content": "<?php\n\n/**\n * TBSCertList\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * TBSCertList\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class TBSCertList\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'mapping' => ['v1', 'v2'],\n                'optional' => true,\n                'default' => 'v1'\n            ],\n            'signature' => AlgorithmIdentifier::MAP,\n            'issuer' => Name::MAP,\n            'thisUpdate' => Time::MAP,\n            'nextUpdate' => [\n                'optional' => true\n            ] + Time::MAP,\n            'revokedCertificates' => [\n                'type' => ASN1::TYPE_SEQUENCE,\n                'optional' => true,\n                'min' => 0,\n                'max' => -1,\n                'children' => RevokedCertificate::MAP\n            ],\n            'crlExtensions' => [\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true\n            ] + Extensions::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertificate.php",
    "content": "<?php\n\n/**\n * TBSCertificate\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * TBSCertificate\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class TBSCertificate\n{\n    // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm'])\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            // technically, default implies optional, but we'll define it as being optional, none-the-less, just to\n            // reenforce that fact\n            'version' => [\n                'type' => ASN1::TYPE_INTEGER,\n                'constant' => 0,\n                'optional' => true,\n                'explicit' => true,\n                'mapping' => ['v1', 'v2', 'v3'],\n                'default' => 'v1'\n            ],\n            'serialNumber' => CertificateSerialNumber::MAP,\n            'signature' => AlgorithmIdentifier::MAP,\n            'issuer' => Name::MAP,\n            'validity' => Validity::MAP,\n            'subject' => Name::MAP,\n            'subjectPublicKeyInfo' => SubjectPublicKeyInfo::MAP,\n            // implicit means that the T in the TLV structure is to be rewritten, regardless of the type\n            'issuerUniqueID' => [\n                'constant' => 1,\n                'optional' => true,\n                'implicit' => true\n            ] + UniqueIdentifier::MAP,\n            'subjectUniqueID' => [\n                'constant' => 2,\n                'optional' => true,\n                'implicit' => true\n            ] + UniqueIdentifier::MAP,\n            // <http://tools.ietf.org/html/rfc2459#page-74> doesn't use the EXPLICIT keyword but if\n            // it's not IMPLICIT, it's EXPLICIT\n            'extensions' => [\n                'constant' => 3,\n                'optional' => true,\n                'explicit' => true\n            ] + Extensions::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TerminalIdentifier.php",
    "content": "<?php\n\n/**\n * TerminalIdentifier\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * TerminalIdentifier\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class TerminalIdentifier\n{\n    const MAP = ['type' => ASN1::TYPE_PRINTABLE_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Time.php",
    "content": "<?php\n\n/**\n * Time\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Time\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Time\n{\n    const MAP = [\n        'type' => ASN1::TYPE_CHOICE,\n        'children' => [\n            'utcTime' => ['type' => ASN1::TYPE_UTC_TIME],\n            'generalTime' => ['type' => ASN1::TYPE_GENERALIZED_TIME]\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Trinomial.php",
    "content": "<?php\n\n/**\n * Trinomial\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Trinomial\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Trinomial\n{\n    const MAP = ['type' => ASN1::TYPE_INTEGER];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UniqueIdentifier.php",
    "content": "<?php\n\n/**\n * UniqueIdentifier\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * UniqueIdentifier\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class UniqueIdentifier\n{\n    const MAP = ['type' => ASN1::TYPE_BIT_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UserNotice.php",
    "content": "<?php\n\n/**\n * UserNotice\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * UserNotice\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class UserNotice\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'noticeRef' => [\n                'optional' => true,\n                'implicit' => true\n            ] + NoticeReference::MAP,\n            'explicitText' => [\n                'optional' => true,\n                'implicit' => true\n            ] + DisplayText::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Validity.php",
    "content": "<?php\n\n/**\n * Validity\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * Validity\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Validity\n{\n    const MAP = [\n        'type' => ASN1::TYPE_SEQUENCE,\n        'children' => [\n            'notBefore' => Time::MAP,\n            'notAfter' => Time::MAP\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_ca_policy_url.php",
    "content": "<?php\n\n/**\n * netscape_ca_policy_url\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * netscape_ca_policy_url\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class netscape_ca_policy_url\n{\n    const MAP = ['type' => ASN1::TYPE_IA5_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_cert_type.php",
    "content": "<?php\n\n/**\n * netscape_cert_type\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * netscape_cert_type\n *\n * mapping is from <http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html>\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class netscape_cert_type\n{\n    const MAP = [\n        'type' => ASN1::TYPE_BIT_STRING,\n        'mapping' => [\n            'SSLClient',\n            'SSLServer',\n            'Email',\n            'ObjectSigning',\n            'Reserved',\n            'SSLCA',\n            'EmailCA',\n            'ObjectSigningCA'\n        ]\n    ];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_comment.php",
    "content": "<?php\n\n/**\n * netscape_comment\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2016 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File\\ASN1\\Maps;\n\nuse phpseclib3\\File\\ASN1;\n\n/**\n * netscape_comment\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class netscape_comment\n{\n    const MAP = ['type' => ASN1::TYPE_IA5_STRING];\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php",
    "content": "<?php\n\n/**\n * Pure-PHP ASN.1 Parser\n *\n * PHP version 5\n *\n * ASN.1 provides the semantics for data encoded using various schemes.  The most commonly\n * utilized scheme is DER or the \"Distinguished Encoding Rules\".  PEM's are base64 encoded\n * DER blobs.\n *\n * \\phpseclib3\\File\\ASN1 decodes and encodes DER formatted messages and places them in a semantic context.\n *\n * Uses the 1988 ASN.1 syntax.\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2012 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\File\\ASN1\\Element;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Pure-PHP ASN.1 Parser\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class ASN1\n{\n    // Tag Classes\n    // http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12\n    const CLASS_UNIVERSAL        = 0;\n    const CLASS_APPLICATION      = 1;\n    const CLASS_CONTEXT_SPECIFIC = 2;\n    const CLASS_PRIVATE          = 3;\n\n    // Tag Classes\n    // http://www.obj-sys.com/asn1tutorial/node124.html\n    const TYPE_BOOLEAN           = 1;\n    const TYPE_INTEGER           = 2;\n    const TYPE_BIT_STRING        = 3;\n    const TYPE_OCTET_STRING      = 4;\n    const TYPE_NULL              = 5;\n    const TYPE_OBJECT_IDENTIFIER = 6;\n    //const TYPE_OBJECT_DESCRIPTOR = 7;\n    //const TYPE_INSTANCE_OF       = 8; // EXTERNAL\n    const TYPE_REAL              = 9;\n    const TYPE_ENUMERATED        = 10;\n    //const TYPE_EMBEDDED          = 11;\n    const TYPE_UTF8_STRING       = 12;\n    //const TYPE_RELATIVE_OID      = 13;\n    const TYPE_SEQUENCE          = 16; // SEQUENCE OF\n    const TYPE_SET               = 17; // SET OF\n\n    // More Tag Classes\n    // http://www.obj-sys.com/asn1tutorial/node10.html\n    const TYPE_NUMERIC_STRING   = 18;\n    const TYPE_PRINTABLE_STRING = 19;\n    const TYPE_TELETEX_STRING   = 20; // T61String\n    const TYPE_VIDEOTEX_STRING  = 21;\n    const TYPE_IA5_STRING       = 22;\n    const TYPE_UTC_TIME         = 23;\n    const TYPE_GENERALIZED_TIME = 24;\n    const TYPE_GRAPHIC_STRING   = 25;\n    const TYPE_VISIBLE_STRING   = 26; // ISO646String\n    const TYPE_GENERAL_STRING   = 27;\n    const TYPE_UNIVERSAL_STRING = 28;\n    //const TYPE_CHARACTER_STRING = 29;\n    const TYPE_BMP_STRING       = 30;\n\n    // Tag Aliases\n    // These tags are kinda place holders for other tags.\n    const TYPE_CHOICE = -1;\n    const TYPE_ANY    = -2;\n\n    /**\n     * ASN.1 object identifiers\n     *\n     * @var array\n     * @link http://en.wikipedia.org/wiki/Object_identifier\n     */\n    private static $oids = [];\n\n    /**\n     * ASN.1 object identifier reverse mapping\n     *\n     * @var array\n     */\n    private static $reverseOIDs = [];\n\n    /**\n     * Default date format\n     *\n     * @var string\n     * @link http://php.net/class.datetime\n     */\n    private static $format = 'D, d M Y H:i:s O';\n\n    /**\n     * Filters\n     *\n     * If the mapping type is self::TYPE_ANY what do we actually encode it as?\n     *\n     * @var array\n     * @see self::encode_der()\n     */\n    private static $filters;\n\n    /**\n     * Current Location of most recent ASN.1 encode process\n     *\n     * Useful for debug purposes\n     *\n     * @var array\n     * @see self::encode_der()\n     */\n    private static $location;\n\n    /**\n     * DER Encoded String\n     *\n     * In case we need to create ASN1\\Element object's..\n     *\n     * @var string\n     * @see self::decodeDER()\n     */\n    private static $encoded;\n\n    /**\n     * Type mapping table for the ANY type.\n     *\n     * Structured or unknown types are mapped to a \\phpseclib3\\File\\ASN1\\Element.\n     * Unambiguous types get the direct mapping (int/real/bool).\n     * Others are mapped as a choice, with an extra indexing level.\n     *\n     * @var array\n     */\n    const ANY_MAP = [\n        self::TYPE_BOOLEAN              => true,\n        self::TYPE_INTEGER              => true,\n        self::TYPE_BIT_STRING           => 'bitString',\n        self::TYPE_OCTET_STRING         => 'octetString',\n        self::TYPE_NULL                 => 'null',\n        self::TYPE_OBJECT_IDENTIFIER    => 'objectIdentifier',\n        self::TYPE_REAL                 => true,\n        self::TYPE_ENUMERATED           => 'enumerated',\n        self::TYPE_UTF8_STRING          => 'utf8String',\n        self::TYPE_NUMERIC_STRING       => 'numericString',\n        self::TYPE_PRINTABLE_STRING     => 'printableString',\n        self::TYPE_TELETEX_STRING       => 'teletexString',\n        self::TYPE_VIDEOTEX_STRING      => 'videotexString',\n        self::TYPE_IA5_STRING           => 'ia5String',\n        self::TYPE_UTC_TIME             => 'utcTime',\n        self::TYPE_GENERALIZED_TIME     => 'generalTime',\n        self::TYPE_GRAPHIC_STRING       => 'graphicString',\n        self::TYPE_VISIBLE_STRING       => 'visibleString',\n        self::TYPE_GENERAL_STRING       => 'generalString',\n        self::TYPE_UNIVERSAL_STRING     => 'universalString',\n        //self::TYPE_CHARACTER_STRING     => 'characterString',\n        self::TYPE_BMP_STRING           => 'bmpString'\n    ];\n\n    /**\n     * String type to character size mapping table.\n     *\n     * Non-convertable types are absent from this table.\n     * size == 0 indicates variable length encoding.\n     *\n     * @var array\n     */\n    const STRING_TYPE_SIZE = [\n        self::TYPE_UTF8_STRING      => 0,\n        self::TYPE_BMP_STRING       => 2,\n        self::TYPE_UNIVERSAL_STRING => 4,\n        self::TYPE_PRINTABLE_STRING => 1,\n        self::TYPE_TELETEX_STRING   => 1,\n        self::TYPE_IA5_STRING       => 1,\n        self::TYPE_VISIBLE_STRING   => 1,\n    ];\n\n    /**\n     * Parse BER-encoding\n     *\n     * Serves a similar purpose to openssl's asn1parse\n     *\n     * @param Element|string $encoded\n     * @return ?array\n     */\n    public static function decodeBER($encoded)\n    {\n        if ($encoded instanceof Element) {\n            $encoded = $encoded->element;\n        }\n\n        self::$encoded = $encoded;\n\n        $decoded = self::decode_ber($encoded);\n        if ($decoded === false) {\n            return null;\n        }\n\n        return [$decoded];\n    }\n\n    /**\n     * Parse BER-encoding (Helper function)\n     *\n     * Sometimes we want to get the BER encoding of a particular tag.  $start lets us do that without having to reencode.\n     * $encoded is passed by reference for the recursive calls done for self::TYPE_BIT_STRING and\n     * self::TYPE_OCTET_STRING. In those cases, the indefinite length is used.\n     *\n     * @param string $encoded\n     * @param int $start\n     * @param int $encoded_pos\n     * @return array|bool\n     */\n    private static function decode_ber($encoded, $start = 0, $encoded_pos = 0)\n    {\n        $current = ['start' => $start];\n\n        if (!isset($encoded[$encoded_pos])) {\n            return false;\n        }\n        $type = ord($encoded[$encoded_pos++]);\n        $startOffset = 1;\n\n        $constructed = ($type >> 5) & 1;\n\n        $tag = $type & 0x1F;\n        if ($tag == 0x1F) {\n            $tag = 0;\n            // process septets (since the eighth bit is ignored, it's not an octet)\n            do {\n                if (!isset($encoded[$encoded_pos])) {\n                    return false;\n                }\n                $temp = ord($encoded[$encoded_pos++]);\n                $startOffset++;\n                $loop = $temp >> 7;\n                $tag <<= 7;\n                $temp &= 0x7F;\n                // \"bits 7 to 1 of the first subsequent octet shall not all be zero\"\n                if ($startOffset == 2 && $temp == 0) {\n                    return false;\n                }\n                $tag |= $temp;\n            } while ($loop);\n        }\n\n        $start += $startOffset;\n\n        // Length, as discussed in paragraph 8.1.3 of X.690-0207.pdf#page=13\n        if (!isset($encoded[$encoded_pos])) {\n            return false;\n        }\n        $length = ord($encoded[$encoded_pos++]);\n        $start++;\n        if ($length == 0x80) { // indefinite length\n            // \"[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all\n            //  immediately available.\" -- paragraph 8.1.3.2.c\n            $length = strlen($encoded) - $encoded_pos;\n        } elseif ($length & 0x80) { // definite length, long form\n            // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only\n            // support it up to four.\n            $length &= 0x7F;\n            $temp = substr($encoded, $encoded_pos, $length);\n            $encoded_pos += $length;\n            // tags of indefinte length don't really have a header length; this length includes the tag\n            $current += ['headerlength' => $length + 2];\n            $start += $length;\n            $length = unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4))['length'];\n        } else {\n            $current += ['headerlength' => 2];\n        }\n\n        if ($length > (strlen($encoded) - $encoded_pos)) {\n            return false;\n        }\n\n        $content = substr($encoded, $encoded_pos, $length);\n        $content_pos = 0;\n\n        // at this point $length can be overwritten. it's only accurate for definite length things as is\n\n        /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1\n           built-in types. It defines an application-independent data type that must be distinguishable from all other\n           data types. The other three classes are user defined. The APPLICATION class distinguishes data types that\n           have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within\n           a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the\n           alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this\n           data type; the term CONTEXT-SPECIFIC does not appear.\n\n             -- http://www.obj-sys.com/asn1tutorial/node12.html */\n        $class = ($type >> 6) & 3;\n        switch ($class) {\n            case self::CLASS_APPLICATION:\n            case self::CLASS_PRIVATE:\n            case self::CLASS_CONTEXT_SPECIFIC:\n                if (!$constructed) {\n                    return [\n                        'type'     => $class,\n                        'constant' => $tag,\n                        'content'  => $content,\n                        'length'   => $length + $start - $current['start']\n                    ] + $current;\n                }\n\n                $newcontent = [];\n                $remainingLength = $length;\n                while ($remainingLength > 0) {\n                    $temp = self::decode_ber($content, $start, $content_pos);\n                    if ($temp === false) {\n                        break;\n                    }\n                    $length = $temp['length'];\n                    // end-of-content octets - see paragraph 8.1.5\n                    if (substr($content, $content_pos + $length, 2) == \"\\0\\0\") {\n                        $length += 2;\n                        $start += $length;\n                        $newcontent[] = $temp;\n                        break;\n                    }\n                    $start += $length;\n                    $remainingLength -= $length;\n                    $newcontent[] = $temp;\n                    $content_pos += $length;\n                }\n\n                return [\n                    'type'     => $class,\n                    'constant' => $tag,\n                    // the array encapsulation is for BC with the old format\n                    'content'  => $newcontent,\n                    // the only time when $content['headerlength'] isn't defined is when the length is indefinite.\n                    // the absence of $content['headerlength'] is how we know if something is indefinite or not.\n                    // technically, it could be defined to be 2 and then another indicator could be used but whatever.\n                    'length'   => $start - $current['start']\n                ] + $current;\n        }\n\n        $current += ['type' => $tag];\n\n        // decode UNIVERSAL tags\n        switch ($tag) {\n            case self::TYPE_BOOLEAN:\n                // \"The contents octets shall consist of a single octet.\" -- paragraph 8.2.1\n                if ($constructed || strlen($content) != 1) {\n                    return false;\n                }\n                $current['content'] = (bool) ord($content[$content_pos]);\n                break;\n            case self::TYPE_INTEGER:\n            case self::TYPE_ENUMERATED:\n                if ($constructed) {\n                    return false;\n                }\n                $current['content'] = new BigInteger(substr($content, $content_pos), -256);\n                break;\n            case self::TYPE_REAL: // not currently supported\n                return false;\n            case self::TYPE_BIT_STRING:\n                // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,\n                // the number of unused bits in the final subsequent octet. The number shall be in the range zero to\n                // seven.\n                if (!$constructed) {\n                    $current['content'] = substr($content, $content_pos);\n                } else {\n                    $temp = self::decode_ber($content, $start, $content_pos);\n                    if ($temp === false) {\n                        return false;\n                    }\n                    $length -= (strlen($content) - $content_pos);\n                    $last = count($temp) - 1;\n                    for ($i = 0; $i < $last; $i++) {\n                        // all subtags should be bit strings\n                        if ($temp[$i]['type'] != self::TYPE_BIT_STRING) {\n                            return false;\n                        }\n                        $current['content'] .= substr($temp[$i]['content'], 1);\n                    }\n                    // all subtags should be bit strings\n                    if ($temp[$last]['type'] != self::TYPE_BIT_STRING) {\n                        return false;\n                    }\n                    $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1);\n                }\n                break;\n            case self::TYPE_OCTET_STRING:\n                if (!$constructed) {\n                    $current['content'] = substr($content, $content_pos);\n                } else {\n                    $current['content'] = '';\n                    $length = 0;\n                    while (substr($content, $content_pos, 2) != \"\\0\\0\") {\n                        $temp = self::decode_ber($content, $length + $start, $content_pos);\n                        if ($temp === false) {\n                            return false;\n                        }\n                        $content_pos += $temp['length'];\n                        // all subtags should be octet strings\n                        if ($temp['type'] != self::TYPE_OCTET_STRING) {\n                            return false;\n                        }\n                        $current['content'] .= $temp['content'];\n                        $length += $temp['length'];\n                    }\n                    if (substr($content, $content_pos, 2) == \"\\0\\0\") {\n                        $length += 2; // +2 for the EOC\n                    }\n                }\n                break;\n            case self::TYPE_NULL:\n                // \"The contents octets shall not contain any octets.\" -- paragraph 8.8.2\n                if ($constructed || strlen($content)) {\n                    return false;\n                }\n                break;\n            case self::TYPE_SEQUENCE:\n            case self::TYPE_SET:\n                if (!$constructed) {\n                    return false;\n                }\n                $offset = 0;\n                $current['content'] = [];\n                $content_len = strlen($content);\n                while ($content_pos < $content_len) {\n                    // if indefinite length construction was used and we have an end-of-content string next\n                    // see paragraphs 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2\n                    if (!isset($current['headerlength']) && substr($content, $content_pos, 2) == \"\\0\\0\") {\n                        $length = $offset + 2; // +2 for the EOC\n                        break 2;\n                    }\n                    $temp = self::decode_ber($content, $start + $offset, $content_pos);\n                    if ($temp === false) {\n                        return false;\n                    }\n                    $content_pos += $temp['length'];\n                    $current['content'][] = $temp;\n                    $offset += $temp['length'];\n                }\n                break;\n            case self::TYPE_OBJECT_IDENTIFIER:\n                if ($constructed) {\n                    return false;\n                }\n                $current['content'] = self::decodeOID(substr($content, $content_pos));\n                if ($current['content'] === false) {\n                    return false;\n                }\n                break;\n            /* Each character string type shall be encoded as if it had been declared:\n               [UNIVERSAL x] IMPLICIT OCTET STRING\n\n                 -- X.690-0207.pdf#page=23 (paragraph 8.21.3)\n\n               Per that, we're not going to do any validation.  If there are any illegal characters in the string,\n               we don't really care */\n            case self::TYPE_NUMERIC_STRING:\n                // 0,1,2,3,4,5,6,7,8,9, and space\n            case self::TYPE_PRINTABLE_STRING:\n                // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma,\n                // hyphen, full stop, solidus, colon, equal sign, question mark\n            case self::TYPE_TELETEX_STRING:\n                // The Teletex character set in CCITT's T61, space, and delete\n                // see http://en.wikipedia.org/wiki/Teletex#Character_sets\n            case self::TYPE_VIDEOTEX_STRING:\n                // The Videotex character set in CCITT's T.100 and T.101, space, and delete\n            case self::TYPE_VISIBLE_STRING:\n                // Printing character sets of international ASCII, and space\n            case self::TYPE_IA5_STRING:\n                // International Alphabet 5 (International ASCII)\n            case self::TYPE_GRAPHIC_STRING:\n                // All registered G sets, and space\n            case self::TYPE_GENERAL_STRING:\n                // All registered C and G sets, space and delete\n            case self::TYPE_UTF8_STRING:\n                // ????\n            case self::TYPE_BMP_STRING:\n                if ($constructed) {\n                    return false;\n                }\n                $current['content'] = substr($content, $content_pos);\n                break;\n            case self::TYPE_UTC_TIME:\n            case self::TYPE_GENERALIZED_TIME:\n                if ($constructed) {\n                    return false;\n                }\n                $current['content'] = self::decodeTime(substr($content, $content_pos), $tag);\n                break;\n            default:\n                return false;\n        }\n\n        $start += $length;\n\n        // ie. length is the length of the full TLV encoding - it's not just the length of the value\n        return $current + ['length' => $start - $current['start']];\n    }\n\n    /**\n     * ASN.1 Map\n     *\n     * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.\n     *\n     * \"Special\" mappings may be applied on a per tag-name basis via $special.\n     *\n     * @param array $decoded\n     * @param array $mapping\n     * @param array $special\n     * @return array|bool|Element|string|null\n     */\n    public static function asn1map(array $decoded, $mapping, $special = [])\n    {\n        if (isset($mapping['explicit']) && is_array($decoded['content'])) {\n            $decoded = $decoded['content'][0];\n        }\n\n        switch (true) {\n            case $mapping['type'] == self::TYPE_ANY:\n                $intype = $decoded['type'];\n                // !isset(self::ANY_MAP[$intype]) produces a fatal error on PHP 5.6\n                if (isset($decoded['constant']) || !array_key_exists($intype, self::ANY_MAP) || (ord(self::$encoded[$decoded['start']]) & 0x20)) {\n                    return new Element(substr(self::$encoded, $decoded['start'], $decoded['length']));\n                }\n                $inmap = self::ANY_MAP[$intype];\n                if (is_string($inmap)) {\n                    return [$inmap => self::asn1map($decoded, ['type' => $intype] + $mapping, $special)];\n                }\n                break;\n            case $mapping['type'] == self::TYPE_CHOICE:\n                foreach ($mapping['children'] as $key => $option) {\n                    switch (true) {\n                        case isset($option['constant']) && $option['constant'] == $decoded['constant']:\n                        case !isset($option['constant']) && $option['type'] == $decoded['type']:\n                            $value = self::asn1map($decoded, $option, $special);\n                            break;\n                        case !isset($option['constant']) && $option['type'] == self::TYPE_CHOICE:\n                            $v = self::asn1map($decoded, $option, $special);\n                            if (isset($v)) {\n                                $value = $v;\n                            }\n                    }\n                    if (isset($value)) {\n                        if (isset($special[$key])) {\n                            $value = $special[$key]($value);\n                        }\n                        return [$key => $value];\n                    }\n                }\n                return null;\n            case isset($mapping['implicit']):\n            case isset($mapping['explicit']):\n            case $decoded['type'] == $mapping['type']:\n                break;\n            default:\n                // if $decoded['type'] and $mapping['type'] are both strings, but different types of strings,\n                // let it through\n                switch (true) {\n                    case $decoded['type'] < 18: // self::TYPE_NUMERIC_STRING == 18\n                    case $decoded['type'] > 30: // self::TYPE_BMP_STRING == 30\n                    case $mapping['type'] < 18:\n                    case $mapping['type'] > 30:\n                        return null;\n                }\n        }\n\n        if (isset($mapping['implicit'])) {\n            $decoded['type'] = $mapping['type'];\n        }\n\n        switch ($decoded['type']) {\n            case self::TYPE_SEQUENCE:\n                $map = [];\n\n                // ignore the min and max\n                if (isset($mapping['min']) && isset($mapping['max'])) {\n                    $child = $mapping['children'];\n                    foreach ($decoded['content'] as $content) {\n                        if (($map[] = self::asn1map($content, $child, $special)) === null) {\n                            return null;\n                        }\n                    }\n\n                    return $map;\n                }\n\n                $n = count($decoded['content']);\n                $i = 0;\n\n                foreach ($mapping['children'] as $key => $child) {\n                    $maymatch = $i < $n; // Match only existing input.\n                    if ($maymatch) {\n                        $temp = $decoded['content'][$i];\n\n                        if ($child['type'] != self::TYPE_CHOICE) {\n                            // Get the mapping and input class & constant.\n                            $childClass = $tempClass = self::CLASS_UNIVERSAL;\n                            $constant = null;\n                            if (isset($temp['constant'])) {\n                                $tempClass = $temp['type'];\n                            }\n                            if (isset($child['class'])) {\n                                $childClass = $child['class'];\n                                $constant = $child['cast'];\n                            } elseif (isset($child['constant'])) {\n                                $childClass = self::CLASS_CONTEXT_SPECIFIC;\n                                $constant = $child['constant'];\n                            }\n\n                            if (isset($constant) && isset($temp['constant'])) {\n                                // Can only match if constants and class match.\n                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;\n                            } else {\n                                // Can only match if no constant expected and type matches or is generic.\n                                $maymatch = !isset($child['constant']) && array_search($child['type'], [$temp['type'], self::TYPE_ANY, self::TYPE_CHOICE]) !== false;\n                            }\n                        }\n                    }\n\n                    if ($maymatch) {\n                        // Attempt submapping.\n                        $candidate = self::asn1map($temp, $child, $special);\n                        $maymatch = $candidate !== null;\n                    }\n\n                    if ($maymatch) {\n                        // Got the match: use it.\n                        if (isset($special[$key])) {\n                            $candidate = $special[$key]($candidate);\n                        }\n                        $map[$key] = $candidate;\n                        $i++;\n                    } elseif (isset($child['default'])) {\n                        $map[$key] = $child['default'];\n                    } elseif (!isset($child['optional'])) {\n                        return null; // Syntax error.\n                    }\n                }\n\n                // Fail mapping if all input items have not been consumed.\n                return $i < $n ? null : $map;\n\n            // the main diff between sets and sequences is the encapsulation of the foreach in another for loop\n            case self::TYPE_SET:\n                $map = [];\n\n                // ignore the min and max\n                if (isset($mapping['min']) && isset($mapping['max'])) {\n                    $child = $mapping['children'];\n                    foreach ($decoded['content'] as $content) {\n                        if (($map[] = self::asn1map($content, $child, $special)) === null) {\n                            return null;\n                        }\n                    }\n\n                    return $map;\n                }\n\n                for ($i = 0; $i < count($decoded['content']); $i++) {\n                    $temp = $decoded['content'][$i];\n                    $tempClass = self::CLASS_UNIVERSAL;\n                    if (isset($temp['constant'])) {\n                        $tempClass = $temp['type'];\n                    }\n\n                    foreach ($mapping['children'] as $key => $child) {\n                        if (isset($map[$key])) {\n                            continue;\n                        }\n                        $maymatch = true;\n                        if ($child['type'] != self::TYPE_CHOICE) {\n                            $childClass = self::CLASS_UNIVERSAL;\n                            $constant = null;\n                            if (isset($child['class'])) {\n                                $childClass = $child['class'];\n                                $constant = $child['cast'];\n                            } elseif (isset($child['constant'])) {\n                                $childClass = self::CLASS_CONTEXT_SPECIFIC;\n                                $constant = $child['constant'];\n                            }\n\n                            if (isset($constant) && isset($temp['constant'])) {\n                                // Can only match if constants and class match.\n                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;\n                            } else {\n                                // Can only match if no constant expected and type matches or is generic.\n                                $maymatch = !isset($child['constant']) && array_search($child['type'], [$temp['type'], self::TYPE_ANY, self::TYPE_CHOICE]) !== false;\n                            }\n                        }\n\n                        if ($maymatch) {\n                            // Attempt submapping.\n                            $candidate = self::asn1map($temp, $child, $special);\n                            $maymatch = $candidate !== null;\n                        }\n\n                        if (!$maymatch) {\n                            break;\n                        }\n\n                        // Got the match: use it.\n                        if (isset($special[$key])) {\n                            $candidate = $special[$key]($candidate);\n                        }\n                        $map[$key] = $candidate;\n                        break;\n                    }\n                }\n\n                foreach ($mapping['children'] as $key => $child) {\n                    if (!isset($map[$key])) {\n                        if (isset($child['default'])) {\n                            $map[$key] = $child['default'];\n                        } elseif (!isset($child['optional'])) {\n                            return null;\n                        }\n                    }\n                }\n                return $map;\n            case self::TYPE_OBJECT_IDENTIFIER:\n                return isset(self::$oids[$decoded['content']]) ? self::$oids[$decoded['content']] : $decoded['content'];\n            case self::TYPE_UTC_TIME:\n            case self::TYPE_GENERALIZED_TIME:\n                // for explicitly tagged optional stuff\n                if (is_array($decoded['content'])) {\n                    $decoded['content'] = $decoded['content'][0]['content'];\n                }\n                // for implicitly tagged optional stuff\n                // in theory, doing isset($mapping['implicit']) would work but malformed certs do exist\n                // in the wild that OpenSSL decodes without issue so we'll support them as well\n                if (!is_object($decoded['content'])) {\n                    $decoded['content'] = self::decodeTime($decoded['content'], $decoded['type']);\n                }\n                return $decoded['content'] ? $decoded['content']->format(self::$format) : false;\n            case self::TYPE_BIT_STRING:\n                if (isset($mapping['mapping'])) {\n                    $offset = ord($decoded['content'][0]);\n                    $size = (strlen($decoded['content']) - 1) * 8 - $offset;\n                    /*\n                       From X.680-0207.pdf#page=46 (21.7):\n\n                       \"When a \"NamedBitList\" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove)\n                        arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should\n                        therefore ensure that different semantics are not associated with such values which differ only in the number of trailing\n                        0 bits.\"\n                    */\n                    $bits = count($mapping['mapping']) == $size ? [] : array_fill(0, count($mapping['mapping']) - $size, false);\n                    for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) {\n                        $current = ord($decoded['content'][$i]);\n                        for ($j = $offset; $j < 8; $j++) {\n                            $bits[] = (bool) ($current & (1 << $j));\n                        }\n                        $offset = 0;\n                    }\n                    $values = [];\n                    $map = array_reverse($mapping['mapping']);\n                    foreach ($map as $i => $value) {\n                        if ($bits[$i]) {\n                            $values[] = $value;\n                        }\n                    }\n                    return $values;\n                }\n                // fall-through\n            case self::TYPE_OCTET_STRING:\n                return $decoded['content'];\n            case self::TYPE_NULL:\n                return '';\n            case self::TYPE_BOOLEAN:\n            case self::TYPE_NUMERIC_STRING:\n            case self::TYPE_PRINTABLE_STRING:\n            case self::TYPE_TELETEX_STRING:\n            case self::TYPE_VIDEOTEX_STRING:\n            case self::TYPE_IA5_STRING:\n            case self::TYPE_GRAPHIC_STRING:\n            case self::TYPE_VISIBLE_STRING:\n            case self::TYPE_GENERAL_STRING:\n            case self::TYPE_UNIVERSAL_STRING:\n            case self::TYPE_UTF8_STRING:\n            case self::TYPE_BMP_STRING:\n                return $decoded['content'];\n            case self::TYPE_INTEGER:\n            case self::TYPE_ENUMERATED:\n                $temp = $decoded['content'];\n                if (isset($mapping['implicit'])) {\n                    $temp = new BigInteger($temp, -256);\n                }\n                if (!$temp instanceof BigInteger) {\n                    return false;\n                }\n                if (isset($mapping['mapping'])) {\n                    $temp = $temp->toString();\n                    if (strlen($temp) > 1) {\n                        return false;\n                    }\n                    $temp = (int) $temp;\n                    return isset($mapping['mapping'][$temp]) ?\n                        $mapping['mapping'][$temp] :\n                        false;\n                }\n                return $temp;\n        }\n    }\n\n    /**\n     * DER-decode the length\n     *\n     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See\n     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.\n     *\n     * @param string $string\n     * @return int\n     */\n    public static function decodeLength(&$string)\n    {\n        $length = ord(Strings::shift($string));\n        if ($length & 0x80) { // definite length, long form\n            $length &= 0x7F;\n            $temp = Strings::shift($string, $length);\n            list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4));\n        }\n        return $length;\n    }\n\n    /**\n     * ASN.1 Encode\n     *\n     * DER-encodes an ASN.1 semantic mapping ($mapping).  Some libraries would probably call this function\n     * an ASN.1 compiler.\n     *\n     * \"Special\" mappings can be applied via $special.\n     *\n     * @param Element|string|array $source\n     * @param array $mapping\n     * @param array $special\n     * @return string\n     */\n    public static function encodeDER($source, $mapping, $special = [])\n    {\n        self::$location = [];\n        return self::encode_der($source, $mapping, null, $special);\n    }\n\n    /**\n     * ASN.1 Encode (Helper function)\n     *\n     * @param Element|string|array|null $source\n     * @param array $mapping\n     * @param int $idx\n     * @param array $special\n     * @return string\n     */\n    private static function encode_der($source, array $mapping, $idx = null, array $special = [])\n    {\n        if ($source instanceof Element) {\n            return $source->element;\n        }\n\n        // do not encode (implicitly optional) fields with value set to default\n        if (isset($mapping['default']) && $source === $mapping['default']) {\n            return '';\n        }\n\n        if (isset($idx)) {\n            if (isset($special[$idx])) {\n                $source = $special[$idx]($source);\n            }\n            self::$location[] = $idx;\n        }\n\n        $tag = $mapping['type'];\n\n        switch ($tag) {\n            case self::TYPE_SET:    // Children order is not important, thus process in sequence.\n            case self::TYPE_SEQUENCE:\n                $tag |= 0x20; // set the constructed bit\n\n                // ignore the min and max\n                if (isset($mapping['min']) && isset($mapping['max'])) {\n                    $value = [];\n                    $child = $mapping['children'];\n\n                    foreach ($source as $content) {\n                        $temp = self::encode_der($content, $child, null, $special);\n                        if ($temp === false) {\n                            return false;\n                        }\n                        $value[] = $temp;\n                    }\n                    /* \"The encodings of the component values of a set-of value shall appear in ascending order, the encodings being compared\n                        as octet strings with the shorter components being padded at their trailing end with 0-octets.\n                        NOTE - The padding octets are for comparison purposes only and do not appear in the encodings.\"\n\n                       -- sec 11.6 of http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf  */\n                    if ($mapping['type'] == self::TYPE_SET) {\n                        sort($value);\n                    }\n                    $value = implode('', $value);\n                    break;\n                }\n\n                $value = '';\n                foreach ($mapping['children'] as $key => $child) {\n                    if (!array_key_exists($key, $source)) {\n                        if (!isset($child['optional'])) {\n                            return false;\n                        }\n                        continue;\n                    }\n\n                    $temp = self::encode_der($source[$key], $child, $key, $special);\n                    if ($temp === false) {\n                        return false;\n                    }\n\n                    // An empty child encoding means it has been optimized out.\n                    // Else we should have at least one tag byte.\n                    if ($temp === '') {\n                        continue;\n                    }\n\n                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well\n                    if (isset($child['constant'])) {\n                        /*\n                           From X.680-0207.pdf#page=58 (30.6):\n\n                           \"The tagging construction specifies explicit tagging if any of the following holds:\n                            ...\n                            c) the \"Tag Type\" alternative is used and the value of \"TagDefault\" for the module is IMPLICIT TAGS or\n                            AUTOMATIC TAGS, but the type defined by \"Type\" is an untagged choice type, an untagged open type, or\n                            an untagged \"DummyReference\" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3).\"\n                         */\n                        if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) {\n                            if ($child['constant'] <= 30) {\n                                $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);\n                            } else {\n                                $constant = $child['constant'];\n                                $subtag = '';\n                                while ($constant > 0) {\n                                    $subtagvalue = $constant & 0x7F;\n                                    $subtag = (chr(0x80 | $subtagvalue)) . $subtag;\n                                    $constant = $constant >> 7;\n                                }\n                                $subtag[strlen($subtag) - 1] = $subtag[strlen($subtag) - 1] & chr(0x7F);\n                                $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | 0x1f) . $subtag;\n                            }\n                            $temp = $subtag . self::encodeLength(strlen($temp)) . $temp;\n                        } else {\n                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);\n                            $temp = $subtag . substr($temp, 1);\n                        }\n                    }\n                    $value .= $temp;\n                }\n                break;\n            case self::TYPE_CHOICE:\n                $temp = false;\n\n                foreach ($mapping['children'] as $key => $child) {\n                    if (!isset($source[$key])) {\n                        continue;\n                    }\n\n                    $temp = self::encode_der($source[$key], $child, $key, $special);\n                    if ($temp === false) {\n                        return false;\n                    }\n\n                    // An empty child encoding means it has been optimized out.\n                    // Else we should have at least one tag byte.\n                    if ($temp === '') {\n                        continue;\n                    }\n\n                    $tag = ord($temp[0]);\n\n                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well\n                    if (isset($child['constant'])) {\n                        if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) {\n                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);\n                            $temp = $subtag . self::encodeLength(strlen($temp)) . $temp;\n                        } else {\n                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);\n                            $temp = $subtag . substr($temp, 1);\n                        }\n                    }\n                }\n\n                if (isset($idx)) {\n                    array_pop(self::$location);\n                }\n\n                if ($temp && isset($mapping['cast'])) {\n                    $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']);\n                }\n\n                return $temp;\n            case self::TYPE_INTEGER:\n            case self::TYPE_ENUMERATED:\n                if (!isset($mapping['mapping'])) {\n                    if (is_numeric($source)) {\n                        $source = new BigInteger($source);\n                    }\n                    $value = $source->toBytes(true);\n                } else {\n                    $value = array_search($source, $mapping['mapping']);\n                    if ($value === false) {\n                        return false;\n                    }\n                    $value = new BigInteger($value);\n                    $value = $value->toBytes(true);\n                }\n                if (!strlen($value)) {\n                    $value = chr(0);\n                }\n                break;\n            case self::TYPE_UTC_TIME:\n            case self::TYPE_GENERALIZED_TIME:\n                $format = $mapping['type'] == self::TYPE_UTC_TIME ? 'y' : 'Y';\n                $format .= 'mdHis';\n                // if $source does _not_ include timezone information within it then assume that the timezone is GMT\n                $date = new \\DateTime($source, new \\DateTimeZone('GMT'));\n                // if $source _does_ include timezone information within it then convert the time to GMT\n                $date->setTimezone(new \\DateTimeZone('GMT'));\n                $value = $date->format($format) . 'Z';\n                break;\n            case self::TYPE_BIT_STRING:\n                if (isset($mapping['mapping'])) {\n                    $bits = array_fill(0, count($mapping['mapping']), 0);\n                    $size = 0;\n                    for ($i = 0; $i < count($mapping['mapping']); $i++) {\n                        if (in_array($mapping['mapping'][$i], $source)) {\n                            $bits[$i] = 1;\n                            $size = $i;\n                        }\n                    }\n\n                    if (isset($mapping['min']) && $mapping['min'] >= 1 && $size < $mapping['min']) {\n                        $size = $mapping['min'] - 1;\n                    }\n\n                    $offset = 8 - (($size + 1) & 7);\n                    $offset = $offset !== 8 ? $offset : 0;\n\n                    $value = chr($offset);\n\n                    for ($i = $size + 1; $i < count($mapping['mapping']); $i++) {\n                        unset($bits[$i]);\n                    }\n\n                    $bits = implode('', array_pad($bits, $size + $offset + 1, 0));\n                    $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' ')));\n                    foreach ($bytes as $byte) {\n                        $value .= chr(bindec($byte));\n                    }\n\n                    break;\n                }\n                // fall-through\n            case self::TYPE_OCTET_STRING:\n                /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,\n                   the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven.\n\n                   -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */\n                $value = $source;\n                break;\n            case self::TYPE_OBJECT_IDENTIFIER:\n                $value = self::encodeOID($source);\n                break;\n            case self::TYPE_ANY:\n                $loc = self::$location;\n                if (isset($idx)) {\n                    array_pop(self::$location);\n                }\n\n                switch (true) {\n                    case !isset($source):\n                        return self::encode_der(null, ['type' => self::TYPE_NULL] + $mapping, null, $special);\n                    case is_int($source):\n                    case $source instanceof BigInteger:\n                        return self::encode_der($source, ['type' => self::TYPE_INTEGER] + $mapping, null, $special);\n                    case is_float($source):\n                        return self::encode_der($source, ['type' => self::TYPE_REAL] + $mapping, null, $special);\n                    case is_bool($source):\n                        return self::encode_der($source, ['type' => self::TYPE_BOOLEAN] + $mapping, null, $special);\n                    case is_array($source) && count($source) == 1:\n                        $typename = implode('', array_keys($source));\n                        $outtype = array_search($typename, self::ANY_MAP, true);\n                        if ($outtype !== false) {\n                            return self::encode_der($source[$typename], ['type' => $outtype] + $mapping, null, $special);\n                        }\n                }\n\n                $filters = self::$filters;\n                foreach ($loc as $part) {\n                    if (!isset($filters[$part])) {\n                        $filters = false;\n                        break;\n                    }\n                    $filters = $filters[$part];\n                }\n                if ($filters === false) {\n                    throw new \\RuntimeException('No filters defined for ' . implode('/', $loc));\n                }\n                return self::encode_der($source, $filters + $mapping, null, $special);\n            case self::TYPE_NULL:\n                $value = '';\n                break;\n            case self::TYPE_NUMERIC_STRING:\n            case self::TYPE_TELETEX_STRING:\n            case self::TYPE_PRINTABLE_STRING:\n            case self::TYPE_UNIVERSAL_STRING:\n            case self::TYPE_UTF8_STRING:\n            case self::TYPE_BMP_STRING:\n            case self::TYPE_IA5_STRING:\n            case self::TYPE_VISIBLE_STRING:\n            case self::TYPE_VIDEOTEX_STRING:\n            case self::TYPE_GRAPHIC_STRING:\n            case self::TYPE_GENERAL_STRING:\n                $value = $source;\n                break;\n            case self::TYPE_BOOLEAN:\n                $value = $source ? \"\\xFF\" : \"\\x00\";\n                break;\n            default:\n                throw new \\RuntimeException('Mapping provides no type definition for ' . implode('/', self::$location));\n        }\n\n        if (isset($idx)) {\n            array_pop(self::$location);\n        }\n\n        if (isset($mapping['cast'])) {\n            if (isset($mapping['explicit']) || $mapping['type'] == self::TYPE_CHOICE) {\n                $value = chr($tag) . self::encodeLength(strlen($value)) . $value;\n                $tag = ($mapping['class'] << 6) | 0x20 | $mapping['cast'];\n            } else {\n                $tag = ($mapping['class'] << 6) | (ord($temp[0]) & 0x20) | $mapping['cast'];\n            }\n        }\n\n        return chr($tag) . self::encodeLength(strlen($value)) . $value;\n    }\n\n    /**\n     * BER-decode the OID\n     *\n     * Called by _decode_ber()\n     *\n     * @param string $content\n     * @return string\n     */\n    public static function decodeOID($content)\n    {\n        // BigInteger's are used because of OIDs like 2.25.329800735698586629295641978511506172918\n        // https://healthcaresecprivacy.blogspot.com/2011/02/creating-and-using-unique-id-uuid-oid.html elaborates.\n        static $eighty;\n        if (!$eighty) {\n            $eighty = new BigInteger(80);\n        }\n\n        $oid = [];\n        $pos = 0;\n        $len = strlen($content);\n        // see https://github.com/openjdk/jdk/blob/2deb318c9f047ec5a4b160d66a4b52f93688ec42/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java#L55\n        if ($len > 4096) {\n            //throw new \\RuntimeException(\"Object identifier size is limited to 4096 bytes ($len bytes present)\");\n            return false;\n        }\n\n        if (ord($content[$len - 1]) & 0x80) {\n            return false;\n        }\n\n        $n = new BigInteger();\n        while ($pos < $len) {\n            $temp = ord($content[$pos++]);\n            $n = $n->bitwise_leftShift(7);\n            $n = $n->bitwise_or(new BigInteger($temp & 0x7F));\n            if (~$temp & 0x80) {\n                $oid[] = $n;\n                $n = new BigInteger();\n            }\n        }\n        $part1 = array_shift($oid);\n        $first = floor(ord($content[0]) / 40);\n        /*\n          \"This packing of the first two object identifier components recognizes that only three values are allocated from the root\n           node, and at most 39 subsequent values from nodes reached by X = 0 and X = 1.\"\n\n          -- https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=22\n        */\n        if ($first <= 2) { // ie. 0 <= ord($content[0]) < 120 (0x78)\n            array_unshift($oid, ord($content[0]) % 40);\n            array_unshift($oid, $first);\n        } else {\n            array_unshift($oid, $part1->subtract($eighty));\n            array_unshift($oid, 2);\n        }\n\n        return implode('.', $oid);\n    }\n\n    /**\n     * DER-encode the OID\n     *\n     * Called by _encode_der()\n     *\n     * @param string $source\n     * @return string\n     */\n    public static function encodeOID($source)\n    {\n        static $mask, $zero, $forty;\n        if (!$mask) {\n            $mask = new BigInteger(0x7F);\n            $zero = new BigInteger();\n            $forty = new BigInteger(40);\n        }\n\n        if (!preg_match('#(?:\\d+\\.)+#', $source)) {\n            $oid = isset(self::$reverseOIDs[$source]) ? self::$reverseOIDs[$source] : false;\n        } else {\n            $oid = $source;\n        }\n        if ($oid === false) {\n            throw new \\RuntimeException('Invalid OID');\n        }\n\n        $parts = explode('.', $oid);\n        $part1 = array_shift($parts);\n        $part2 = array_shift($parts);\n\n        $first = new BigInteger($part1);\n        $first = $first->multiply($forty);\n        $first = $first->add(new BigInteger($part2));\n\n        array_unshift($parts, $first->toString());\n\n        $value = '';\n        foreach ($parts as $part) {\n            if (!$part) {\n                $temp = \"\\0\";\n            } else {\n                $temp = '';\n                $part = new BigInteger($part);\n                while (!$part->equals($zero)) {\n                    $submask = $part->bitwise_and($mask);\n                    $submask->setPrecision(8);\n                    $temp = (chr(0x80) | $submask->toBytes()) . $temp;\n                    $part = $part->bitwise_rightShift(7);\n                }\n                $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);\n            }\n            $value .= $temp;\n        }\n\n        return $value;\n    }\n\n    /**\n     * BER-decode the time\n     *\n     * Called by _decode_ber() and in the case of implicit tags asn1map().\n     *\n     * @param string $content\n     * @param int $tag\n     * @return \\DateTime|false\n     */\n    private static function decodeTime($content, $tag)\n    {\n        /* UTCTime:\n           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1\n           http://www.obj-sys.com/asn1tutorial/node15.html\n\n           GeneralizedTime:\n           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2\n           http://www.obj-sys.com/asn1tutorial/node14.html */\n\n        $format = 'YmdHis';\n\n        if ($tag == self::TYPE_UTC_TIME) {\n            // https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=28 says \"the seconds\n            // element shall always be present\" but none-the-less I've seen X509 certs where it isn't and if the\n            // browsers parse it phpseclib ought to too\n            if (preg_match('#^(\\d{10})(Z|[+-]\\d{4})$#', $content, $matches)) {\n                $content = $matches[1] . '00' . $matches[2];\n            }\n            $prefix = substr($content, 0, 2) >= 50 ? '19' : '20';\n            $content = $prefix . $content;\n        } elseif (strpos($content, '.') !== false) {\n            $format .= '.u';\n        }\n\n        if ($content[strlen($content) - 1] == 'Z') {\n            $content = substr($content, 0, -1) . '+0000';\n        }\n\n        if (strpos($content, '-') !== false || strpos($content, '+') !== false) {\n            $format .= 'O';\n        }\n\n        // error supression isn't necessary as of PHP 7.0:\n        // http://php.net/manual/en/migration70.other-changes.php\n        return @\\DateTime::createFromFormat($format, $content);\n    }\n\n    /**\n     * Set the time format\n     *\n     * Sets the time / date format for asn1map().\n     *\n     * @param string $format\n     */\n    public static function setTimeFormat($format)\n    {\n        self::$format = $format;\n    }\n\n    /**\n     * Load OIDs\n     *\n     * Load the relevant OIDs for a particular ASN.1 semantic mapping.\n     * Previously loaded OIDs are retained.\n     *\n     * @param array $oids\n     */\n    public static function loadOIDs(array $oids)\n    {\n        self::$reverseOIDs += $oids;\n        self::$oids = array_flip(self::$reverseOIDs);\n    }\n\n    /**\n     * Set filters\n     *\n     * See \\phpseclib3\\File\\X509, etc, for an example.\n     * Previously loaded filters are not retained.\n     *\n     * @param array $filters\n     */\n    public static function setFilters(array $filters)\n    {\n        self::$filters = $filters;\n    }\n\n    /**\n     * String type conversion\n     *\n     * This is a lazy conversion, dealing only with character size.\n     * No real conversion table is used.\n     *\n     * @param string $in\n     * @param int $from\n     * @param int $to\n     * @return string\n     */\n    public static function convert($in, $from = self::TYPE_UTF8_STRING, $to = self::TYPE_UTF8_STRING)\n    {\n        // isset(self::STRING_TYPE_SIZE[$from] returns a fatal error on PHP 5.6\n        if (!array_key_exists($from, self::STRING_TYPE_SIZE) || !array_key_exists($to, self::STRING_TYPE_SIZE)) {\n            return false;\n        }\n        $insize = self::STRING_TYPE_SIZE[$from];\n        $outsize = self::STRING_TYPE_SIZE[$to];\n        $inlength = strlen($in);\n        $out = '';\n\n        for ($i = 0; $i < $inlength;) {\n            if ($inlength - $i < $insize) {\n                return false;\n            }\n\n            // Get an input character as a 32-bit value.\n            $c = ord($in[$i++]);\n            switch (true) {\n                case $insize == 4:\n                    $c = ($c << 8) | ord($in[$i++]);\n                    $c = ($c << 8) | ord($in[$i++]);\n                    // fall-through\n                case $insize == 2:\n                    $c = ($c << 8) | ord($in[$i++]);\n                    // fall-through\n                case $insize == 1:\n                    break;\n                case ($c & 0x80) == 0x00:\n                    break;\n                case ($c & 0x40) == 0x00:\n                    return false;\n                default:\n                    $bit = 6;\n                    do {\n                        if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) {\n                            return false;\n                        }\n                        $c = ($c << 6) | (ord($in[$i++]) & 0x3F);\n                        $bit += 5;\n                        $mask = 1 << $bit;\n                    } while ($c & $bit);\n                    $c &= $mask - 1;\n                    break;\n            }\n\n            // Convert and append the character to output string.\n            $v = '';\n            switch (true) {\n                case $outsize == 4:\n                    $v .= chr($c & 0xFF);\n                    $c >>= 8;\n                    $v .= chr($c & 0xFF);\n                    $c >>= 8;\n                    // fall-through\n                case $outsize == 2:\n                    $v .= chr($c & 0xFF);\n                    $c >>= 8;\n                    // fall-through\n                case $outsize == 1:\n                    $v .= chr($c & 0xFF);\n                    $c >>= 8;\n                    if ($c) {\n                        return false;\n                    }\n                    break;\n                case ($c & (PHP_INT_SIZE == 8 ? 0x80000000 : (1 << 31))) != 0:\n                    return false;\n                case $c >= 0x04000000:\n                    $v .= chr(0x80 | ($c & 0x3F));\n                    $c = ($c >> 6) | 0x04000000;\n                    // fall-through\n                case $c >= 0x00200000:\n                    $v .= chr(0x80 | ($c & 0x3F));\n                    $c = ($c >> 6) | 0x00200000;\n                    // fall-through\n                case $c >= 0x00010000:\n                    $v .= chr(0x80 | ($c & 0x3F));\n                    $c = ($c >> 6) | 0x00010000;\n                    // fall-through\n                case $c >= 0x00000800:\n                    $v .= chr(0x80 | ($c & 0x3F));\n                    $c = ($c >> 6) | 0x00000800;\n                    // fall-through\n                case $c >= 0x00000080:\n                    $v .= chr(0x80 | ($c & 0x3F));\n                    $c = ($c >> 6) | 0x000000C0;\n                    // fall-through\n                default:\n                    $v .= chr($c);\n                    break;\n            }\n            $out .= strrev($v);\n        }\n        return $out;\n    }\n\n    /**\n     * Extract raw BER from Base64 encoding\n     *\n     * @param string $str\n     * @return string\n     */\n    public static function extractBER($str)\n    {\n        /* X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them\n         * above and beyond the ceritificate.\n         * ie. some may have the following preceding the -----BEGIN CERTIFICATE----- line:\n         *\n         * Bag Attributes\n         *     localKeyID: 01 00 00 00\n         * subject=/O=organization/OU=org unit/CN=common name\n         * issuer=/O=organization/CN=common name\n         */\n        if (strlen($str) > ini_get('pcre.backtrack_limit')) {\n            $temp = $str;\n        } else {\n            $temp = preg_replace('#.*?^-+[^-]+-+[\\r\\n ]*$#ms', '', $str, 1);\n            $temp = preg_replace('#-+END.*[\\r\\n ]*.*#ms', '', $temp, 1);\n        }\n        // remove new lines\n        $temp = str_replace([\"\\r\", \"\\n\", ' '], '', $temp);\n        // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff\n        $temp = preg_replace('#^-+[^-]+-+|-+[^-]+-+$#', '', $temp);\n        $temp = preg_match('#^[a-zA-Z\\d/+]*={0,2}$#', $temp) ? Strings::base64_decode($temp) : false;\n        return $temp != false ? $temp : $str;\n    }\n\n    /**\n     * DER-encode the length\n     *\n     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See\n     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.\n     *\n     * @param int $length\n     * @return string\n     */\n    public static function encodeLength($length)\n    {\n        if ($length <= 0x7F) {\n            return chr($length);\n        }\n\n        $temp = ltrim(pack('N', $length), chr(0));\n        return pack('Ca*', 0x80 | strlen($temp), $temp);\n    }\n\n    /**\n     * Returns the OID corresponding to a name\n     *\n     * What's returned in the associative array returned by loadX509() (or load*()) is either a name or an OID if\n     * no OID to name mapping is available. The problem with this is that what may be an unmapped OID in one version\n     * of phpseclib may not be unmapped in the next version, so apps that are looking at this OID may not be able\n     * to work from version to version.\n     *\n     * This method will return the OID if a name is passed to it and if no mapping is avialable it'll assume that\n     * what's being passed to it already is an OID and return that instead. A few examples.\n     *\n     * getOID('2.16.840.1.101.3.4.2.1') == '2.16.840.1.101.3.4.2.1'\n     * getOID('id-sha256') == '2.16.840.1.101.3.4.2.1'\n     * getOID('zzz') == 'zzz'\n     *\n     * @param string $name\n     * @return string\n     */\n    public static function getOID($name)\n    {\n        return isset(self::$reverseOIDs[$name]) ? self::$reverseOIDs[$name] : $name;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/File/X509.php",
    "content": "<?php\n\n/**\n * Pure-PHP X.509 Parser\n *\n * PHP version 5\n *\n * Encode and decode X.509 certificates.\n *\n * The extensions are from {@link http://tools.ietf.org/html/rfc5280 RFC5280} and\n * {@link http://web.archive.org/web/19961027104704/http://www3.netscape.com/eng/security/cert-exts.html Netscape Certificate Extensions}.\n *\n * Note that loading an X.509 certificate and resaving it may invalidate the signature.  The reason being that the signature is based on a\n * portion of the certificate that contains optional parameters with default values.  ie. if the parameter isn't there the default value is\n * used.  Problem is, if the parameter is there and it just so happens to have the default value there are two ways that that parameter can\n * be encoded.  It can be encoded explicitly or left out all together.  This would effect the signature value and thus may invalidate the\n * the certificate all together unless the certificate is re-signed.\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2012 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\File;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\PrivateKey;\nuse phpseclib3\\Crypt\\Common\\PublicKey;\nuse phpseclib3\\Crypt\\DSA;\nuse phpseclib3\\Crypt\\EC;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\PublicKeyLoader;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Crypt\\RSA\\Formats\\Keys\\PSS;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\File\\ASN1\\Element;\nuse phpseclib3\\File\\ASN1\\Maps;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Pure-PHP X.509 Parser\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass X509\n{\n    /**\n     * Flag to only accept signatures signed by certificate authorities\n     *\n     * Not really used anymore but retained all the same to suppress E_NOTICEs from old installs\n     *\n     */\n    const VALIDATE_SIGNATURE_BY_CA = 1;\n\n    /**\n     * Return internal array representation\n     *\n     * @see \\phpseclib3\\File\\X509::getDN()\n     */\n    const DN_ARRAY = 0;\n    /**\n     * Return string\n     *\n     * @see \\phpseclib3\\File\\X509::getDN()\n     */\n    const DN_STRING = 1;\n    /**\n     * Return ASN.1 name string\n     *\n     * @see \\phpseclib3\\File\\X509::getDN()\n     */\n    const DN_ASN1 = 2;\n    /**\n     * Return OpenSSL compatible array\n     *\n     * @see \\phpseclib3\\File\\X509::getDN()\n     */\n    const DN_OPENSSL = 3;\n    /**\n     * Return canonical ASN.1 RDNs string\n     *\n     * @see \\phpseclib3\\File\\X509::getDN()\n     */\n    const DN_CANON = 4;\n    /**\n     * Return name hash for file indexing\n     *\n     * @see \\phpseclib3\\File\\X509::getDN()\n     */\n    const DN_HASH = 5;\n\n    /**\n     * Save as PEM\n     *\n     * ie. a base64-encoded PEM with a header and a footer\n     *\n     * @see \\phpseclib3\\File\\X509::saveX509()\n     * @see \\phpseclib3\\File\\X509::saveCSR()\n     * @see \\phpseclib3\\File\\X509::saveCRL()\n     */\n    const FORMAT_PEM = 0;\n    /**\n     * Save as DER\n     *\n     * @see \\phpseclib3\\File\\X509::saveX509()\n     * @see \\phpseclib3\\File\\X509::saveCSR()\n     * @see \\phpseclib3\\File\\X509::saveCRL()\n     */\n    const FORMAT_DER = 1;\n    /**\n     * Save as a SPKAC\n     *\n     * @see \\phpseclib3\\File\\X509::saveX509()\n     * @see \\phpseclib3\\File\\X509::saveCSR()\n     * @see \\phpseclib3\\File\\X509::saveCRL()\n     *\n     * Only works on CSRs. Not currently supported.\n     */\n    const FORMAT_SPKAC = 2;\n    /**\n     * Auto-detect the format\n     *\n     * Used only by the load*() functions\n     *\n     * @see \\phpseclib3\\File\\X509::saveX509()\n     * @see \\phpseclib3\\File\\X509::saveCSR()\n     * @see \\phpseclib3\\File\\X509::saveCRL()\n     */\n    const FORMAT_AUTO_DETECT = 3;\n\n    /**\n     * Attribute value disposition.\n     * If disposition is >= 0, this is the index of the target value.\n     */\n    const ATTR_ALL = -1; // All attribute values (array).\n    const ATTR_APPEND = -2; // Add a value.\n    const ATTR_REPLACE = -3; // Clear first, then add a value.\n\n    /**\n     * Distinguished Name\n     *\n     * @var array\n     */\n    private $dn;\n\n    /**\n     * Public key\n     *\n     * @var string|PublicKey\n     */\n    private $publicKey;\n\n    /**\n     * Private key\n     *\n     * @var string|PrivateKey\n     */\n    private $privateKey;\n\n    /**\n     * The certificate authorities\n     *\n     * @var array\n     */\n    private $CAs = [];\n\n    /**\n     * The currently loaded certificate\n     *\n     * @var array\n     */\n    private $currentCert;\n\n    /**\n     * The signature subject\n     *\n     * There's no guarantee \\phpseclib3\\File\\X509 is going to re-encode an X.509 cert in the same way it was originally\n     * encoded so we take save the portion of the original cert that the signature would have made for.\n     *\n     * @var string\n     */\n    private $signatureSubject;\n\n    /**\n     * Certificate Start Date\n     *\n     * @var string\n     */\n    private $startDate;\n\n    /**\n     * Certificate End Date\n     *\n     * @var string|Element\n     */\n    private $endDate;\n\n    /**\n     * Serial Number\n     *\n     * @var string\n     */\n    private $serialNumber;\n\n    /**\n     * Key Identifier\n     *\n     * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and\n     * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}.\n     *\n     * @var string\n     */\n    private $currentKeyIdentifier;\n\n    /**\n     * CA Flag\n     *\n     * @var bool\n     */\n    private $caFlag = false;\n\n    /**\n     * SPKAC Challenge\n     *\n     * @var string\n     */\n    private $challenge;\n\n    /**\n     * @var array\n     */\n    private $extensionValues = [];\n\n    /**\n     * OIDs loaded\n     *\n     * @var bool\n     */\n    private static $oidsLoaded = false;\n\n    /**\n     * Recursion Limit\n     *\n     * @var int\n     */\n    private static $recur_limit = 5;\n\n    /**\n     * URL fetch flag\n     *\n     * @var bool\n     */\n    private static $disable_url_fetch = false;\n\n    /**\n     * @var array\n     */\n    private static $extensions = [];\n\n    /**\n     * @var ?array\n     */\n    private $ipAddresses = null;\n\n    /**\n     * @var ?array\n     */\n    private $domains = null;\n\n    /**\n     * Default Constructor.\n     *\n     * @return X509\n     */\n    public function __construct()\n    {\n        // Explicitly Tagged Module, 1988 Syntax\n        // http://tools.ietf.org/html/rfc5280#appendix-A.1\n\n        if (!self::$oidsLoaded) {\n            // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2\n            ASN1::loadOIDs([\n                //'id-pkix' => '1.3.6.1.5.5.7',\n                //'id-pe' => '1.3.6.1.5.5.7.1',\n                //'id-qt' => '1.3.6.1.5.5.7.2',\n                //'id-kp' => '1.3.6.1.5.5.7.3',\n                //'id-ad' => '1.3.6.1.5.5.7.48',\n                'id-qt-cps' => '1.3.6.1.5.5.7.2.1',\n                'id-qt-unotice' => '1.3.6.1.5.5.7.2.2',\n                'id-ad-ocsp' => '1.3.6.1.5.5.7.48.1',\n                'id-ad-caIssuers' => '1.3.6.1.5.5.7.48.2',\n                'id-ad-timeStamping' => '1.3.6.1.5.5.7.48.3',\n                'id-ad-caRepository' => '1.3.6.1.5.5.7.48.5',\n                //'id-at' => '2.5.4',\n                'id-at-name' => '2.5.4.41',\n                'id-at-surname' => '2.5.4.4',\n                'id-at-givenName' => '2.5.4.42',\n                'id-at-initials' => '2.5.4.43',\n                'id-at-generationQualifier' => '2.5.4.44',\n                'id-at-commonName' => '2.5.4.3',\n                'id-at-localityName' => '2.5.4.7',\n                'id-at-stateOrProvinceName' => '2.5.4.8',\n                'id-at-organizationName' => '2.5.4.10',\n                'id-at-organizationalUnitName' => '2.5.4.11',\n                'id-at-title' => '2.5.4.12',\n                'id-at-description' => '2.5.4.13',\n                'id-at-dnQualifier' => '2.5.4.46',\n                'id-at-countryName' => '2.5.4.6',\n                'id-at-serialNumber' => '2.5.4.5',\n                'id-at-pseudonym' => '2.5.4.65',\n                'id-at-postalCode' => '2.5.4.17',\n                'id-at-streetAddress' => '2.5.4.9',\n                'id-at-uniqueIdentifier' => '2.5.4.45',\n                'id-at-role' => '2.5.4.72',\n                'id-at-postalAddress' => '2.5.4.16',\n                'jurisdictionOfIncorporationCountryName' => '1.3.6.1.4.1.311.60.2.1.3',\n                'jurisdictionOfIncorporationStateOrProvinceName' => '1.3.6.1.4.1.311.60.2.1.2',\n                'jurisdictionLocalityName' => '1.3.6.1.4.1.311.60.2.1.1',\n                'id-at-businessCategory' => '2.5.4.15',\n\n                //'id-domainComponent' => '0.9.2342.19200300.100.1.25',\n                //'pkcs-9' => '1.2.840.113549.1.9',\n                'pkcs-9-at-emailAddress' => '1.2.840.113549.1.9.1',\n                //'id-ce' => '2.5.29',\n                'id-ce-authorityKeyIdentifier' => '2.5.29.35',\n                'id-ce-subjectKeyIdentifier' => '2.5.29.14',\n                'id-ce-keyUsage' => '2.5.29.15',\n                'id-ce-privateKeyUsagePeriod' => '2.5.29.16',\n                'id-ce-certificatePolicies' => '2.5.29.32',\n                //'anyPolicy' => '2.5.29.32.0',\n\n                'id-ce-policyMappings' => '2.5.29.33',\n\n                'id-ce-subjectAltName' => '2.5.29.17',\n                'id-ce-issuerAltName' => '2.5.29.18',\n                'id-ce-subjectDirectoryAttributes' => '2.5.29.9',\n                'id-ce-basicConstraints' => '2.5.29.19',\n                'id-ce-nameConstraints' => '2.5.29.30',\n                'id-ce-policyConstraints' => '2.5.29.36',\n                'id-ce-cRLDistributionPoints' => '2.5.29.31',\n                'id-ce-extKeyUsage' => '2.5.29.37',\n                //'anyExtendedKeyUsage' => '2.5.29.37.0',\n                'id-kp-serverAuth' => '1.3.6.1.5.5.7.3.1',\n                'id-kp-clientAuth' => '1.3.6.1.5.5.7.3.2',\n                'id-kp-codeSigning' => '1.3.6.1.5.5.7.3.3',\n                'id-kp-emailProtection' => '1.3.6.1.5.5.7.3.4',\n                'id-kp-timeStamping' => '1.3.6.1.5.5.7.3.8',\n                'id-kp-OCSPSigning' => '1.3.6.1.5.5.7.3.9',\n                'id-ce-inhibitAnyPolicy' => '2.5.29.54',\n                'id-ce-freshestCRL' => '2.5.29.46',\n                'id-pe-authorityInfoAccess' => '1.3.6.1.5.5.7.1.1',\n                'id-pe-subjectInfoAccess' => '1.3.6.1.5.5.7.1.11',\n                'id-ce-cRLNumber' => '2.5.29.20',\n                'id-ce-issuingDistributionPoint' => '2.5.29.28',\n                'id-ce-deltaCRLIndicator' => '2.5.29.27',\n                'id-ce-cRLReasons' => '2.5.29.21',\n                'id-ce-certificateIssuer' => '2.5.29.29',\n                'id-ce-holdInstructionCode' => '2.5.29.23',\n                //'holdInstruction' => '1.2.840.10040.2',\n                'id-holdinstruction-none' => '1.2.840.10040.2.1',\n                'id-holdinstruction-callissuer' => '1.2.840.10040.2.2',\n                'id-holdinstruction-reject' => '1.2.840.10040.2.3',\n                'id-ce-invalidityDate' => '2.5.29.24',\n\n                'rsaEncryption' => '1.2.840.113549.1.1.1',\n                'md2WithRSAEncryption' => '1.2.840.113549.1.1.2',\n                'md5WithRSAEncryption' => '1.2.840.113549.1.1.4',\n                'sha1WithRSAEncryption' => '1.2.840.113549.1.1.5',\n                'sha224WithRSAEncryption' => '1.2.840.113549.1.1.14',\n                'sha256WithRSAEncryption' => '1.2.840.113549.1.1.11',\n                'sha384WithRSAEncryption' => '1.2.840.113549.1.1.12',\n                'sha512WithRSAEncryption' => '1.2.840.113549.1.1.13',\n\n                'id-ecPublicKey' => '1.2.840.10045.2.1',\n                'ecdsa-with-SHA1' => '1.2.840.10045.4.1',\n                // from https://tools.ietf.org/html/rfc5758#section-3.2\n                'ecdsa-with-SHA224' => '1.2.840.10045.4.3.1',\n                'ecdsa-with-SHA256' => '1.2.840.10045.4.3.2',\n                'ecdsa-with-SHA384' => '1.2.840.10045.4.3.3',\n                'ecdsa-with-SHA512' => '1.2.840.10045.4.3.4',\n\n                'id-dsa' => '1.2.840.10040.4.1',\n                'id-dsa-with-sha1' => '1.2.840.10040.4.3',\n                // from https://tools.ietf.org/html/rfc5758#section-3.1\n                'id-dsa-with-sha224' => '2.16.840.1.101.3.4.3.1',\n                'id-dsa-with-sha256' => '2.16.840.1.101.3.4.3.2',\n\n                // from https://tools.ietf.org/html/rfc8410:\n                'id-Ed25519' => '1.3.101.112',\n                'id-Ed448' => '1.3.101.113',\n\n                'id-RSASSA-PSS' => '1.2.840.113549.1.1.10',\n\n                //'id-sha224' => '2.16.840.1.101.3.4.2.4',\n                //'id-sha256' => '2.16.840.1.101.3.4.2.1',\n                //'id-sha384' => '2.16.840.1.101.3.4.2.2',\n                //'id-sha512' => '2.16.840.1.101.3.4.2.3',\n                //'id-GostR3411-94-with-GostR3410-94' => '1.2.643.2.2.4',\n                //'id-GostR3411-94-with-GostR3410-2001' => '1.2.643.2.2.3',\n                //'id-GostR3410-2001' => '1.2.643.2.2.20',\n                //'id-GostR3410-94' => '1.2.643.2.2.19',\n                // Netscape Object Identifiers from \"Netscape Certificate Extensions\"\n                'netscape' => '2.16.840.1.113730',\n                'netscape-cert-extension' => '2.16.840.1.113730.1',\n                'netscape-cert-type' => '2.16.840.1.113730.1.1',\n                'netscape-comment' => '2.16.840.1.113730.1.13',\n                'netscape-ca-policy-url' => '2.16.840.1.113730.1.8',\n                // the following are X.509 extensions not supported by phpseclib\n                'id-pe-logotype' => '1.3.6.1.5.5.7.1.12',\n                'entrustVersInfo' => '1.2.840.113533.7.65.0',\n                'verisignPrivate' => '2.16.840.1.113733.1.6.9',\n                // for Certificate Signing Requests\n                // see http://tools.ietf.org/html/rfc2985\n                'pkcs-9-at-unstructuredName' => '1.2.840.113549.1.9.2', // PKCS #9 unstructured name\n                'pkcs-9-at-challengePassword' => '1.2.840.113549.1.9.7', // Challenge password for certificate revocations\n                'pkcs-9-at-extensionRequest' => '1.2.840.113549.1.9.14' // Certificate extension request\n            ]);\n        }\n    }\n\n    /**\n     * Load X.509 certificate\n     *\n     * Returns an associative array describing the X.509 cert or a false if the cert failed to load\n     *\n     * @param array|string $cert\n     * @param int $mode\n     * @return mixed\n     */\n    public function loadX509($cert, $mode = self::FORMAT_AUTO_DETECT)\n    {\n        if (is_array($cert) && isset($cert['tbsCertificate'])) {\n            unset($this->currentCert);\n            unset($this->currentKeyIdentifier);\n            $this->dn = $cert['tbsCertificate']['subject'];\n            if (!isset($this->dn)) {\n                return false;\n            }\n            $this->currentCert = $cert;\n\n            $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');\n            $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null;\n\n            unset($this->signatureSubject);\n\n            return $cert;\n        }\n\n        if ($mode != self::FORMAT_DER) {\n            $newcert = ASN1::extractBER($cert);\n            if ($mode == self::FORMAT_PEM && $cert == $newcert) {\n                return false;\n            }\n            $cert = $newcert;\n        }\n\n        if ($cert === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $decoded = ASN1::decodeBER($cert);\n\n        if ($decoded) {\n            $x509 = ASN1::asn1map($decoded[0], Maps\\Certificate::MAP);\n        }\n        if (!isset($x509) || $x509 === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);\n\n        if ($this->isSubArrayValid($x509, 'tbsCertificate/extensions')) {\n            $this->mapInExtensions($x509, 'tbsCertificate/extensions');\n        }\n        $this->mapInDNs($x509, 'tbsCertificate/issuer/rdnSequence');\n        $this->mapInDNs($x509, 'tbsCertificate/subject/rdnSequence');\n\n        $key = $x509['tbsCertificate']['subjectPublicKeyInfo'];\n        $key = ASN1::encodeDER($key, Maps\\SubjectPublicKeyInfo::MAP);\n        $x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'] =\n            \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n            chunk_split(base64_encode($key), 64) .\n            \"-----END PUBLIC KEY-----\";\n\n        $this->currentCert = $x509;\n        $this->dn = $x509['tbsCertificate']['subject'];\n\n        $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');\n        $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null;\n\n        return $x509;\n    }\n\n    /**\n     * Save X.509 certificate\n     *\n     * @param array $cert\n     * @param int $format optional\n     * @return string\n     */\n    public function saveX509(array $cert, $format = self::FORMAT_PEM)\n    {\n        if (!is_array($cert) || !isset($cert['tbsCertificate'])) {\n            return false;\n        }\n\n        switch (true) {\n            // \"case !$a: case !$b: break; default: whatever();\" is the same thing as \"if ($a && $b) whatever()\"\n            case !($algorithm = $this->subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')):\n            case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):\n                break;\n            default:\n                $cert['tbsCertificate']['subjectPublicKeyInfo'] = new Element(\n                    base64_decode(preg_replace('#-.+-|[\\r\\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']))\n                );\n        }\n\n        $filters = [];\n        $type_utf8_string = ['type' => ASN1::TYPE_UTF8_STRING];\n        $filters['tbsCertificate']['signature']['parameters'] = $type_utf8_string;\n        $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] = $type_utf8_string;\n        $filters['tbsCertificate']['issuer']['rdnSequence']['value'] = $type_utf8_string;\n        $filters['tbsCertificate']['subject']['rdnSequence']['value'] = $type_utf8_string;\n        $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = $type_utf8_string;\n        $filters['signatureAlgorithm']['parameters'] = $type_utf8_string;\n        $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] = $type_utf8_string;\n        //$filters['policyQualifiers']['qualifier'] = $type_utf8_string;\n        $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] = $type_utf8_string;\n        $filters['directoryName']['rdnSequence']['value'] = $type_utf8_string;\n\n        foreach (self::$extensions as $extension) {\n            $filters['tbsCertificate']['extensions'][] = $extension;\n        }\n\n        /* in the case of policyQualifiers/qualifier, the type has to be \\phpseclib3\\File\\ASN1::TYPE_IA5_STRING.\n           \\phpseclib3\\File\\ASN1::TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random\n           characters.\n         */\n        $filters['policyQualifiers']['qualifier']\n            = ['type' => ASN1::TYPE_IA5_STRING];\n\n        ASN1::setFilters($filters);\n\n        $this->mapOutExtensions($cert, 'tbsCertificate/extensions');\n        $this->mapOutDNs($cert, 'tbsCertificate/issuer/rdnSequence');\n        $this->mapOutDNs($cert, 'tbsCertificate/subject/rdnSequence');\n\n        $cert = ASN1::encodeDER($cert, Maps\\Certificate::MAP);\n\n        switch ($format) {\n            case self::FORMAT_DER:\n                return $cert;\n            // case self::FORMAT_PEM:\n            default:\n                return \"-----BEGIN CERTIFICATE-----\\r\\n\" . chunk_split(Strings::base64_encode($cert), 64) . '-----END CERTIFICATE-----';\n        }\n    }\n\n    /**\n     * Map extension values from octet string to extension-specific internal\n     *   format.\n     *\n     * @param array $root (by reference)\n     * @param string $path\n     */\n    private function mapInExtensions(array &$root, $path)\n    {\n        $extensions = &$this->subArrayUnchecked($root, $path);\n\n        if ($extensions) {\n            for ($i = 0; $i < count($extensions); $i++) {\n                $id = $extensions[$i]['extnId'];\n                $value = &$extensions[$i]['extnValue'];\n                /* [extnValue] contains the DER encoding of an ASN.1 value\n                   corresponding to the extension type identified by extnID */\n                $map = $this->getMapping($id);\n                if (!is_bool($map)) {\n                    $decoder = $id == 'id-ce-nameConstraints' ?\n                        [static::class, 'decodeNameConstraintIP'] :\n                        [static::class, 'decodeIP'];\n                    $decoded = ASN1::decodeBER($value);\n                    if (!$decoded) {\n                        continue;\n                    }\n                    $mapped = ASN1::asn1map($decoded[0], $map, ['iPAddress' => $decoder]);\n                    $value = $mapped === false ? $decoded[0] : $mapped;\n\n                    if ($id == 'id-ce-certificatePolicies') {\n                        for ($j = 0; $j < count($value); $j++) {\n                            if (!isset($value[$j]['policyQualifiers'])) {\n                                continue;\n                            }\n                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {\n                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];\n                                $map = $this->getMapping($subid);\n                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];\n                                if ($map !== false) {\n                                    $decoded = ASN1::decodeBER($subvalue);\n                                    if (!$decoded) {\n                                        continue;\n                                    }\n                                    $mapped = ASN1::asn1map($decoded[0], $map);\n                                    $subvalue = $mapped === false ? $decoded[0] : $mapped;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Map extension values from extension-specific internal format to\n     *   octet string.\n     *\n     * @param array $root (by reference)\n     * @param string $path\n     */\n    private function mapOutExtensions(array &$root, $path)\n    {\n        $extensions = &$this->subArray($root, $path, !empty($this->extensionValues));\n\n        foreach ($this->extensionValues as $id => $data) {\n            $critical = $data['critical'];\n            $replace = $data['replace'];\n            $value = $data['value'];\n            $newext = [\n                'extnId' => $id,\n                'extnValue' => $value,\n                'critical' => $critical\n            ];\n            if ($replace) {\n                foreach ($extensions as $key => $value) {\n                    if ($value['extnId'] == $id) {\n                        $extensions[$key] = $newext;\n                        continue 2;\n                    }\n                }\n            }\n            $extensions[] = $newext;\n        }\n\n        if (is_array($extensions)) {\n            $size = count($extensions);\n            for ($i = 0; $i < $size; $i++) {\n                if ($extensions[$i] instanceof Element) {\n                    continue;\n                }\n\n                $id = $extensions[$i]['extnId'];\n                $value = &$extensions[$i]['extnValue'];\n\n                switch ($id) {\n                    case 'id-ce-certificatePolicies':\n                        for ($j = 0; $j < count($value); $j++) {\n                            if (!isset($value[$j]['policyQualifiers'])) {\n                                continue;\n                            }\n                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {\n                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];\n                                $map = $this->getMapping($subid);\n                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];\n                                if ($map !== false) {\n                                    // by default \\phpseclib3\\File\\ASN1 will try to render qualifier as a \\phpseclib3\\File\\ASN1::TYPE_IA5_STRING since it's\n                                    // actual type is \\phpseclib3\\File\\ASN1::TYPE_ANY\n                                    $subvalue = new Element(ASN1::encodeDER($subvalue, $map));\n                                }\n                            }\n                        }\n                        break;\n                    case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string\n                        if (isset($value['authorityCertSerialNumber'])) {\n                            if ($value['authorityCertSerialNumber']->toBytes() == '') {\n                                $temp = chr((ASN1::CLASS_CONTEXT_SPECIFIC << 6) | 2) . \"\\1\\0\";\n                                $value['authorityCertSerialNumber'] = new Element($temp);\n                            }\n                        }\n                }\n\n                /* [extnValue] contains the DER encoding of an ASN.1 value\n                   corresponding to the extension type identified by extnID */\n                $map = $this->getMapping($id);\n                if (is_bool($map)) {\n                    if (!$map) {\n                        //user_error($id . ' is not a currently supported extension');\n                        unset($extensions[$i]);\n                    }\n                } else {\n                    $value = ASN1::encodeDER($value, $map, ['iPAddress' => [static::class, 'encodeIP']]);\n                }\n            }\n        }\n    }\n\n    /**\n     * Map attribute values from ANY type to attribute-specific internal\n     *   format.\n     *\n     * @param array $root (by reference)\n     * @param string $path\n     */\n    private function mapInAttributes(&$root, $path)\n    {\n        $attributes = &$this->subArray($root, $path);\n\n        if (is_array($attributes)) {\n            for ($i = 0; $i < count($attributes); $i++) {\n                $id = $attributes[$i]['type'];\n                /* $value contains the DER encoding of an ASN.1 value\n                   corresponding to the attribute type identified by type */\n                $map = $this->getMapping($id);\n                if (is_array($attributes[$i]['value'])) {\n                    $values = &$attributes[$i]['value'];\n                    for ($j = 0; $j < count($values); $j++) {\n                        $value = ASN1::encodeDER($values[$j], Maps\\AttributeValue::MAP);\n                        $decoded = ASN1::decodeBER($value);\n                        if (!is_bool($map)) {\n                            if (!$decoded) {\n                                continue;\n                            }\n                            $mapped = ASN1::asn1map($decoded[0], $map);\n                            if ($mapped !== false) {\n                                $values[$j] = $mapped;\n                            }\n                            if ($id == 'pkcs-9-at-extensionRequest' && $this->isSubArrayValid($values, $j)) {\n                                $this->mapInExtensions($values, $j);\n                            }\n                        } elseif ($map) {\n                            $values[$j] = $value;\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Map attribute values from attribute-specific internal format to\n     *   ANY type.\n     *\n     * @param array $root (by reference)\n     * @param string $path\n     */\n    private function mapOutAttributes(&$root, $path)\n    {\n        $attributes = &$this->subArray($root, $path);\n\n        if (is_array($attributes)) {\n            $size = count($attributes);\n            for ($i = 0; $i < $size; $i++) {\n                /* [value] contains the DER encoding of an ASN.1 value\n                   corresponding to the attribute type identified by type */\n                $id = $attributes[$i]['type'];\n                $map = $this->getMapping($id);\n                if ($map === false) {\n                    //user_error($id . ' is not a currently supported attribute', E_USER_NOTICE);\n                    unset($attributes[$i]);\n                } elseif (is_array($attributes[$i]['value'])) {\n                    $values = &$attributes[$i]['value'];\n                    for ($j = 0; $j < count($values); $j++) {\n                        switch ($id) {\n                            case 'pkcs-9-at-extensionRequest':\n                                $this->mapOutExtensions($values, $j);\n                                break;\n                        }\n\n                        if (!is_bool($map)) {\n                            $temp = ASN1::encodeDER($values[$j], $map);\n                            $decoded = ASN1::decodeBER($temp);\n                            if (!$decoded) {\n                                continue;\n                            }\n                            $values[$j] = ASN1::asn1map($decoded[0], Maps\\AttributeValue::MAP);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Map DN values from ANY type to DN-specific internal\n     *   format.\n     *\n     * @param array $root (by reference)\n     * @param string $path\n     */\n    private function mapInDNs(array &$root, $path)\n    {\n        $dns = &$this->subArray($root, $path);\n\n        if (is_array($dns)) {\n            for ($i = 0; $i < count($dns); $i++) {\n                for ($j = 0; $j < count($dns[$i]); $j++) {\n                    $type = $dns[$i][$j]['type'];\n                    $value = &$dns[$i][$j]['value'];\n                    if (is_object($value) && $value instanceof Element) {\n                        $map = $this->getMapping($type);\n                        if (!is_bool($map)) {\n                            $decoded = ASN1::decodeBER($value);\n                            if (!$decoded) {\n                                continue;\n                            }\n                            $value = ASN1::asn1map($decoded[0], $map);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Map DN values from DN-specific internal format to\n     *   ANY type.\n     *\n     * @param array $root (by reference)\n     * @param string $path\n     */\n    private function mapOutDNs(array &$root, $path)\n    {\n        $dns = &$this->subArray($root, $path);\n\n        if (is_array($dns)) {\n            $size = count($dns);\n            for ($i = 0; $i < $size; $i++) {\n                for ($j = 0; $j < count($dns[$i]); $j++) {\n                    $type = $dns[$i][$j]['type'];\n                    $value = &$dns[$i][$j]['value'];\n                    if (is_object($value) && $value instanceof Element) {\n                        continue;\n                    }\n\n                    $map = $this->getMapping($type);\n                    if (!is_bool($map)) {\n                        $value = new Element(ASN1::encodeDER($value, $map));\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * Associate an extension ID to an extension mapping\n     *\n     * @param string $extnId\n     * @return mixed\n     */\n    private function getMapping($extnId)\n    {\n        if (!is_string($extnId)) { // eg. if it's a \\phpseclib3\\File\\ASN1\\Element object\n            return true;\n        }\n\n        if (isset(self::$extensions[$extnId])) {\n            return self::$extensions[$extnId];\n        }\n\n        switch ($extnId) {\n            case 'id-ce-keyUsage':\n                return Maps\\KeyUsage::MAP;\n            case 'id-ce-basicConstraints':\n                return Maps\\BasicConstraints::MAP;\n            case 'id-ce-subjectKeyIdentifier':\n                return Maps\\KeyIdentifier::MAP;\n            case 'id-ce-cRLDistributionPoints':\n                return Maps\\CRLDistributionPoints::MAP;\n            case 'id-ce-authorityKeyIdentifier':\n                return Maps\\AuthorityKeyIdentifier::MAP;\n            case 'id-ce-certificatePolicies':\n                return Maps\\CertificatePolicies::MAP;\n            case 'id-ce-extKeyUsage':\n                return Maps\\ExtKeyUsageSyntax::MAP;\n            case 'id-pe-authorityInfoAccess':\n                return Maps\\AuthorityInfoAccessSyntax::MAP;\n            case 'id-ce-subjectAltName':\n                return Maps\\SubjectAltName::MAP;\n            case 'id-ce-subjectDirectoryAttributes':\n                return Maps\\SubjectDirectoryAttributes::MAP;\n            case 'id-ce-privateKeyUsagePeriod':\n                return Maps\\PrivateKeyUsagePeriod::MAP;\n            case 'id-ce-issuerAltName':\n                return Maps\\IssuerAltName::MAP;\n            case 'id-ce-policyMappings':\n                return Maps\\PolicyMappings::MAP;\n            case 'id-ce-nameConstraints':\n                return Maps\\NameConstraints::MAP;\n\n            case 'netscape-cert-type':\n                return Maps\\netscape_cert_type::MAP;\n            case 'netscape-comment':\n                return Maps\\netscape_comment::MAP;\n            case 'netscape-ca-policy-url':\n                return Maps\\netscape_ca_policy_url::MAP;\n\n            // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets\n            // back around to asn1map() and we don't want it decoded again.\n            //case 'id-qt-cps':\n            //    return Maps\\CPSuri::MAP;\n            case 'id-qt-unotice':\n                return Maps\\UserNotice::MAP;\n\n            // the following OIDs are unsupported but we don't want them to give notices when calling saveX509().\n            case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt\n            case 'entrustVersInfo':\n            // http://support.microsoft.com/kb/287547\n            case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION\n            case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION\n            // \"SET Secure Electronic Transaction Specification\"\n            // http://www.maithean.com/docs/set_bk3.pdf\n            case '2.23.42.7.0': // id-set-hashedRootKey\n            // \"Certificate Transparency\"\n            // https://tools.ietf.org/html/rfc6962\n            case '1.3.6.1.4.1.11129.2.4.2':\n            // \"Qualified Certificate statements\"\n            // https://tools.ietf.org/html/rfc3739#section-3.2.6\n            case '1.3.6.1.5.5.7.1.3':\n                return true;\n\n            // CSR attributes\n            case 'pkcs-9-at-unstructuredName':\n                return Maps\\PKCS9String::MAP;\n            case 'pkcs-9-at-challengePassword':\n                return Maps\\DirectoryString::MAP;\n            case 'pkcs-9-at-extensionRequest':\n                return Maps\\Extensions::MAP;\n\n            // CRL extensions.\n            case 'id-ce-cRLNumber':\n                return Maps\\CRLNumber::MAP;\n            case 'id-ce-deltaCRLIndicator':\n                return Maps\\CRLNumber::MAP;\n            case 'id-ce-issuingDistributionPoint':\n                return Maps\\IssuingDistributionPoint::MAP;\n            case 'id-ce-freshestCRL':\n                return Maps\\CRLDistributionPoints::MAP;\n            case 'id-ce-cRLReasons':\n                return Maps\\CRLReason::MAP;\n            case 'id-ce-invalidityDate':\n                return Maps\\InvalidityDate::MAP;\n            case 'id-ce-certificateIssuer':\n                return Maps\\CertificateIssuer::MAP;\n            case 'id-ce-holdInstructionCode':\n                return Maps\\HoldInstructionCode::MAP;\n            case 'id-at-postalAddress':\n                return Maps\\PostalAddress::MAP;\n        }\n\n        return false;\n    }\n\n    /**\n     * Load an X.509 certificate as a certificate authority\n     *\n     * @param string $cert\n     * @return bool\n     */\n    public function loadCA($cert)\n    {\n        $olddn = $this->dn;\n        $oldcert = $this->currentCert;\n        $oldsigsubj = $this->signatureSubject;\n        $oldkeyid = $this->currentKeyIdentifier;\n\n        $cert = $this->loadX509($cert);\n        if (!$cert) {\n            $this->dn = $olddn;\n            $this->currentCert = $oldcert;\n            $this->signatureSubject = $oldsigsubj;\n            $this->currentKeyIdentifier = $oldkeyid;\n\n            return false;\n        }\n\n        /* From RFC5280 \"PKIX Certificate and CRL Profile\":\n\n           If the keyUsage extension is present, then the subject public key\n           MUST NOT be used to verify signatures on certificates or CRLs unless\n           the corresponding keyCertSign or cRLSign bit is set. */\n        //$keyUsage = $this->getExtension('id-ce-keyUsage');\n        //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) {\n        //    return false;\n        //}\n\n        /* From RFC5280 \"PKIX Certificate and CRL Profile\":\n\n           The cA boolean indicates whether the certified public key may be used\n           to verify certificate signatures.  If the cA boolean is not asserted,\n           then the keyCertSign bit in the key usage extension MUST NOT be\n           asserted.  If the basic constraints extension is not present in a\n           version 3 certificate, or the extension is present but the cA boolean\n           is not asserted, then the certified public key MUST NOT be used to\n           verify certificate signatures. */\n        //$basicConstraints = $this->getExtension('id-ce-basicConstraints');\n        //if (!$basicConstraints || !$basicConstraints['cA']) {\n        //    return false;\n        //}\n\n        $this->CAs[] = $cert;\n\n        $this->dn = $olddn;\n        $this->currentCert = $oldcert;\n        $this->signatureSubject = $oldsigsubj;\n\n        return true;\n    }\n\n    /**\n     * Validate an X.509 certificate against a URL\n     *\n     * From RFC2818 \"HTTP over TLS\":\n     *\n     * Matching is performed using the matching rules specified by\n     * [RFC2459].  If more than one identity of a given type is present in\n     * the certificate (e.g., more than one dNSName name, a match in any one\n     * of the set is considered acceptable.) Names may contain the wildcard\n     * character * which is considered to match any single domain name\n     * component or component fragment. E.g., *.a.com matches foo.a.com but\n     * not bar.foo.a.com. f*.com matches foo.com but not bar.com.\n     *\n     * @param string $url\n     * @return bool\n     */\n    public function validateURL($url)\n    {\n        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {\n            return false;\n        }\n\n        $components = parse_url($url);\n        if (!isset($components['host'])) {\n            return false;\n        }\n\n        if ($names = $this->getExtension('id-ce-subjectAltName')) {\n            foreach ($names as $name) {\n                foreach ($name as $key => $value) {\n                    $value = preg_quote($value);\n                    $value = str_replace('\\*', '[^.]*', $value);\n                    switch ($key) {\n                        case 'dNSName':\n                            /* From RFC2818 \"HTTP over TLS\":\n\n                               If a subjectAltName extension of type dNSName is present, that MUST\n                               be used as the identity. Otherwise, the (most specific) Common Name\n                               field in the Subject field of the certificate MUST be used. Although\n                               the use of the Common Name is existing practice, it is deprecated and\n                               Certification Authorities are encouraged to use the dNSName instead. */\n                            if (preg_match('#^' . $value . '$#', $components['host'])) {\n                                return true;\n                            }\n                            break;\n                        case 'iPAddress':\n                            /* From RFC2818 \"HTTP over TLS\":\n\n                               In some cases, the URI is specified as an IP address rather than a\n                               hostname. In this case, the iPAddress subjectAltName must be present\n                               in the certificate and must exactly match the IP in the URI. */\n                            if (preg_match('#(?:\\d{1-3}\\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) {\n                                return true;\n                            }\n                    }\n                }\n            }\n            return false;\n        }\n\n        if ($value = $this->getDNProp('id-at-commonName')) {\n            $value = str_replace(['.', '*'], ['\\.', '[^.]*'], $value[0]);\n            return preg_match('#^' . $value . '$#', $components['host']) === 1;\n        }\n\n        return false;\n    }\n\n    /**\n     * Validate a date\n     *\n     * If $date isn't defined it is assumed to be the current date.\n     *\n     * @param \\DateTimeInterface|string $date optional\n     * @return bool\n     */\n    public function validateDate($date = null)\n    {\n        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {\n            return false;\n        }\n\n        if (!isset($date)) {\n            $date = new \\DateTimeImmutable('now', new \\DateTimeZone(@date_default_timezone_get()));\n        }\n\n        $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore'];\n        $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime'];\n\n        $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];\n        $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];\n\n        if (is_string($date)) {\n            $date = new \\DateTimeImmutable($date, new \\DateTimeZone(@date_default_timezone_get()));\n        }\n\n        $notBefore = new \\DateTimeImmutable($notBefore, new \\DateTimeZone(@date_default_timezone_get()));\n        $notAfter = new \\DateTimeImmutable($notAfter, new \\DateTimeZone(@date_default_timezone_get()));\n\n        return $date >= $notBefore && $date <= $notAfter;\n    }\n\n    /**\n     * Fetches a URL\n     *\n     * @param string $url\n     * @return bool|string\n     */\n    private static function fetchURL($url)\n    {\n        if (self::$disable_url_fetch) {\n            return false;\n        }\n\n        $parts = parse_url($url);\n        $data = '';\n        switch ($parts['scheme']) {\n            case 'http':\n                $fsock = @fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80);\n                if (!$fsock) {\n                    return false;\n                }\n                $path = $parts['path'];\n                if (isset($parts['query'])) {\n                    $path .= '?' . $parts['query'];\n                }\n                fputs($fsock, \"GET $path HTTP/1.0\\r\\n\");\n                fputs($fsock, \"Host: $parts[host]\\r\\n\\r\\n\");\n                $line = fgets($fsock, 1024);\n                if (strlen($line) < 3) {\n                    return false;\n                }\n                preg_match('#HTTP/1.\\d (\\d{3})#', $line, $temp);\n                if ($temp[1] != '200') {\n                    return false;\n                }\n\n                // skip the rest of the headers in the http response\n                while (!feof($fsock) && fgets($fsock, 1024) != \"\\r\\n\") {\n                }\n\n                while (!feof($fsock)) {\n                    $temp = fread($fsock, 1024);\n                    if ($temp === false) {\n                        return false;\n                    }\n                    $data .= $temp;\n                }\n\n                break;\n            //case 'ftp':\n            //case 'ldap':\n            //default:\n        }\n\n        return $data;\n    }\n\n    /**\n     * Validates an intermediate cert as identified via authority info access extension\n     *\n     * See https://tools.ietf.org/html/rfc4325 for more info\n     *\n     * @param bool $caonly\n     * @param int $count\n     * @return bool\n     */\n    private function testForIntermediate($caonly, $count)\n    {\n        $opts = $this->getExtension('id-pe-authorityInfoAccess');\n        if (!is_array($opts)) {\n            return false;\n        }\n        foreach ($opts as $opt) {\n            if ($opt['accessMethod'] == 'id-ad-caIssuers') {\n                // accessLocation is a GeneralName. GeneralName fields support stuff like email addresses, IP addresses, LDAP,\n                // etc, but we're only supporting URI's. URI's and LDAP are the only thing https://tools.ietf.org/html/rfc4325\n                // discusses\n                if (isset($opt['accessLocation']['uniformResourceIdentifier'])) {\n                    $url = $opt['accessLocation']['uniformResourceIdentifier'];\n                    break;\n                }\n            }\n        }\n\n        if (!isset($url)) {\n            return false;\n        }\n\n        $cert = static::fetchURL($url);\n        if (!is_string($cert)) {\n            return false;\n        }\n\n        $parent = new static();\n        $parent->CAs = $this->CAs;\n        /*\n         \"Conforming applications that support HTTP or FTP for accessing\n          certificates MUST be able to accept .cer files and SHOULD be able\n          to accept .p7c files.\" -- https://tools.ietf.org/html/rfc4325\n\n         A .p7c file is 'a \"certs-only\" CMS message as specified in RFC 2797\"\n\n         These are currently unsupported\n        */\n        if (!is_array($parent->loadX509($cert))) {\n            return false;\n        }\n\n        if (!$parent->validateSignatureCountable($caonly, ++$count)) {\n            return false;\n        }\n\n        $this->CAs[] = $parent->currentCert;\n        //$this->loadCA($cert);\n\n        return true;\n    }\n\n    /**\n     * Validate a signature\n     *\n     * Works on X.509 certs, CSR's and CRL's.\n     * Returns true if the signature is verified, false if it is not correct or null on error\n     *\n     * By default returns false for self-signed certs. Call validateSignature(false) to make this support\n     * self-signed.\n     *\n     * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}.\n     *\n     * @param bool $caonly optional\n     * @return mixed\n     */\n    public function validateSignature($caonly = true)\n    {\n        return $this->validateSignatureCountable($caonly, 0);\n    }\n\n    /**\n     * Validate a signature\n     *\n     * Performs said validation whilst keeping track of how many times validation method is called\n     *\n     * @param bool $caonly\n     * @param int $count\n     * @return mixed\n     */\n    private function validateSignatureCountable($caonly, $count)\n    {\n        if (!is_array($this->currentCert) || !isset($this->signatureSubject)) {\n            return null;\n        }\n\n        if ($count == self::$recur_limit) {\n            return false;\n        }\n\n        /* TODO:\n           \"emailAddress attribute values are not case-sensitive (e.g., \"subscriber@example.com\" is the same as \"SUBSCRIBER@EXAMPLE.COM\").\"\n            -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6\n\n           implement pathLenConstraint in the id-ce-basicConstraints extension */\n\n        switch (true) {\n            case isset($this->currentCert['tbsCertificate']):\n                // self-signed cert\n                switch (true) {\n                    case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']:\n                    case defined('FILE_X509_IGNORE_TYPE') && $this->getIssuerDN(self::DN_STRING) === $this->getDN(self::DN_STRING):\n                        $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');\n                        $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier');\n                        switch (true) {\n                            case !is_array($authorityKey):\n                            case !$subjectKeyID:\n                            case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:\n                                $signingCert = $this->currentCert; // working cert\n                        }\n                }\n\n                if (!empty($this->CAs)) {\n                    for ($i = 0; $i < count($this->CAs); $i++) {\n                        // even if the cert is a self-signed one we still want to see if it's a CA;\n                        // if not, we'll conditionally return an error\n                        $ca = $this->CAs[$i];\n                        switch (true) {\n                            case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']:\n                            case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertificate']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']):\n                                $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');\n                                $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);\n                                switch (true) {\n                                    case !is_array($authorityKey):\n                                    case !$subjectKeyID:\n                                    case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:\n                                        if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) {\n                                            break 2; // serial mismatch - check other ca\n                                        }\n                                        $signingCert = $ca; // working cert\n                                        break 3;\n                                }\n                        }\n                    }\n                    if (count($this->CAs) == $i && $caonly) {\n                        return $this->testForIntermediate($caonly, $count) && $this->validateSignature($caonly);\n                    }\n                } elseif (!isset($signingCert) || $caonly) {\n                    return $this->testForIntermediate($caonly, $count) && $this->validateSignature($caonly);\n                }\n                return $this->validateSignatureHelper(\n                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],\n                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],\n                    $this->currentCert['signatureAlgorithm']['algorithm'],\n                    substr($this->currentCert['signature'], 1),\n                    $this->signatureSubject\n                );\n            case isset($this->currentCert['certificationRequestInfo']):\n                return $this->validateSignatureHelper(\n                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'],\n                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'],\n                    $this->currentCert['signatureAlgorithm']['algorithm'],\n                    substr($this->currentCert['signature'], 1),\n                    $this->signatureSubject\n                );\n            case isset($this->currentCert['publicKeyAndChallenge']):\n                return $this->validateSignatureHelper(\n                    $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'],\n                    $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'],\n                    $this->currentCert['signatureAlgorithm']['algorithm'],\n                    substr($this->currentCert['signature'], 1),\n                    $this->signatureSubject\n                );\n            case isset($this->currentCert['tbsCertList']):\n                if (!empty($this->CAs)) {\n                    for ($i = 0; $i < count($this->CAs); $i++) {\n                        $ca = $this->CAs[$i];\n                        switch (true) {\n                            case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']:\n                            case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertList']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']):\n                                $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');\n                                $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);\n                                switch (true) {\n                                    case !is_array($authorityKey):\n                                    case !$subjectKeyID:\n                                    case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:\n                                        if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) {\n                                            break 2; // serial mismatch - check other ca\n                                        }\n                                        $signingCert = $ca; // working cert\n                                        break 3;\n                                }\n                        }\n                    }\n                }\n                if (!isset($signingCert)) {\n                    return false;\n                }\n                return $this->validateSignatureHelper(\n                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],\n                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],\n                    $this->currentCert['signatureAlgorithm']['algorithm'],\n                    substr($this->currentCert['signature'], 1),\n                    $this->signatureSubject\n                );\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * Validates a signature\n     *\n     * Returns true if the signature is verified and false if it is not correct.\n     * If the algorithms are unsupposed an exception is thrown.\n     *\n     * @param string $publicKeyAlgorithm\n     * @param string $publicKey\n     * @param string $signatureAlgorithm\n     * @param string $signature\n     * @param string $signatureSubject\n     * @throws UnsupportedAlgorithmException if the algorithm is unsupported\n     * @return bool\n     */\n    private function validateSignatureHelper($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject)\n    {\n        switch ($publicKeyAlgorithm) {\n            case 'id-RSASSA-PSS':\n                $key = RSA::loadFormat('PSS', $publicKey);\n                break;\n            case 'rsaEncryption':\n                $key = RSA::loadFormat('PKCS8', $publicKey);\n                switch ($signatureAlgorithm) {\n                    case 'id-RSASSA-PSS':\n                        break;\n                    case 'md2WithRSAEncryption':\n                    case 'md5WithRSAEncryption':\n                    case 'sha1WithRSAEncryption':\n                    case 'sha224WithRSAEncryption':\n                    case 'sha256WithRSAEncryption':\n                    case 'sha384WithRSAEncryption':\n                    case 'sha512WithRSAEncryption':\n                        $key = $key\n                            ->withHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm))\n                            ->withPadding(RSA::SIGNATURE_PKCS1);\n                        break;\n                    default:\n                        throw new UnsupportedAlgorithmException('Signature algorithm unsupported');\n                }\n                break;\n            case 'id-Ed25519':\n            case 'id-Ed448':\n                $key = EC::loadFormat('PKCS8', $publicKey);\n                break;\n            case 'id-ecPublicKey':\n                $key = EC::loadFormat('PKCS8', $publicKey);\n                switch ($signatureAlgorithm) {\n                    case 'ecdsa-with-SHA1':\n                    case 'ecdsa-with-SHA224':\n                    case 'ecdsa-with-SHA256':\n                    case 'ecdsa-with-SHA384':\n                    case 'ecdsa-with-SHA512':\n                        $key = $key\n                            ->withHash(preg_replace('#^ecdsa-with-#', '', strtolower($signatureAlgorithm)));\n                        break;\n                    default:\n                        throw new UnsupportedAlgorithmException('Signature algorithm unsupported');\n                }\n                break;\n            case 'id-dsa':\n                $key = DSA::loadFormat('PKCS8', $publicKey);\n                switch ($signatureAlgorithm) {\n                    case 'id-dsa-with-sha1':\n                    case 'id-dsa-with-sha224':\n                    case 'id-dsa-with-sha256':\n                        $key = $key\n                            ->withHash(preg_replace('#^id-dsa-with-#', '', strtolower($signatureAlgorithm)));\n                        break;\n                    default:\n                        throw new UnsupportedAlgorithmException('Signature algorithm unsupported');\n                }\n                break;\n            default:\n                throw new UnsupportedAlgorithmException('Public key algorithm unsupported');\n        }\n\n        return $key->verify($signatureSubject, $signature);\n    }\n\n    /**\n     * Sets the recursion limit\n     *\n     * When validating a signature it may be necessary to download intermediate certs from URI's.\n     * An intermediate cert that linked to itself would result in an infinite loop so to prevent\n     * that we set a recursion limit. A negative number means that there is no recursion limit.\n     *\n     * @param int $count\n     */\n    public static function setRecurLimit($count)\n    {\n        self::$recur_limit = $count;\n    }\n\n    /**\n     * Prevents URIs from being automatically retrieved\n     *\n     */\n    public static function disableURLFetch()\n    {\n        self::$disable_url_fetch = true;\n    }\n\n    /**\n     * Allows URIs to be automatically retrieved\n     *\n     */\n    public static function enableURLFetch()\n    {\n        self::$disable_url_fetch = false;\n    }\n\n    /**\n     * Decodes an IP address\n     *\n     * Takes in a base64 encoded \"blob\" and returns a human readable IP address\n     *\n     * @param string $ip\n     * @return string\n     */\n    public static function decodeIP($ip)\n    {\n        return inet_ntop($ip);\n    }\n\n    /**\n     * Decodes an IP address in a name constraints extension\n     *\n     * Takes in a base64 encoded \"blob\" and returns a human readable IP address / mask\n     *\n     * @param string $ip\n     * @return array\n     */\n    public static function decodeNameConstraintIP($ip)\n    {\n        $size = strlen($ip) >> 1;\n        $mask = substr($ip, $size);\n        $ip = substr($ip, 0, $size);\n        return [inet_ntop($ip), inet_ntop($mask)];\n    }\n\n    /**\n     * Encodes an IP address\n     *\n     * Takes a human readable IP address into a base64-encoded \"blob\"\n     *\n     * @param string|array $ip\n     * @return string\n     */\n    public static function encodeIP($ip)\n    {\n        return is_string($ip) ?\n            inet_pton($ip) :\n            inet_pton($ip[0]) . inet_pton($ip[1]);\n    }\n\n    /**\n     * \"Normalizes\" a Distinguished Name property\n     *\n     * @param string $propName\n     * @return mixed\n     */\n    private function translateDNProp($propName)\n    {\n        switch (strtolower($propName)) {\n            case 'jurisdictionofincorporationcountryname':\n            case 'jurisdictioncountryname':\n            case 'jurisdictionc':\n                return 'jurisdictionOfIncorporationCountryName';\n            case 'jurisdictionofincorporationstateorprovincename':\n            case 'jurisdictionstateorprovincename':\n            case 'jurisdictionst':\n                return 'jurisdictionOfIncorporationStateOrProvinceName';\n            case 'jurisdictionlocalityname':\n            case 'jurisdictionl':\n                return 'jurisdictionLocalityName';\n            case 'id-at-businesscategory':\n            case 'businesscategory':\n                return 'id-at-businessCategory';\n            case 'id-at-countryname':\n            case 'countryname':\n            case 'c':\n                return 'id-at-countryName';\n            case 'id-at-organizationname':\n            case 'organizationname':\n            case 'o':\n                return 'id-at-organizationName';\n            case 'id-at-dnqualifier':\n            case 'dnqualifier':\n                return 'id-at-dnQualifier';\n            case 'id-at-commonname':\n            case 'commonname':\n            case 'cn':\n                return 'id-at-commonName';\n            case 'id-at-stateorprovincename':\n            case 'stateorprovincename':\n            case 'state':\n            case 'province':\n            case 'provincename':\n            case 'st':\n                return 'id-at-stateOrProvinceName';\n            case 'id-at-localityname':\n            case 'localityname':\n            case 'l':\n                return 'id-at-localityName';\n            case 'id-emailaddress':\n            case 'emailaddress':\n                return 'pkcs-9-at-emailAddress';\n            case 'id-at-serialnumber':\n            case 'serialnumber':\n                return 'id-at-serialNumber';\n            case 'id-at-postalcode':\n            case 'postalcode':\n                return 'id-at-postalCode';\n            case 'id-at-streetaddress':\n            case 'streetaddress':\n                return 'id-at-streetAddress';\n            case 'id-at-name':\n            case 'name':\n                return 'id-at-name';\n            case 'id-at-givenname':\n            case 'givenname':\n                return 'id-at-givenName';\n            case 'id-at-surname':\n            case 'surname':\n            case 'sn':\n                return 'id-at-surname';\n            case 'id-at-initials':\n            case 'initials':\n                return 'id-at-initials';\n            case 'id-at-generationqualifier':\n            case 'generationqualifier':\n                return 'id-at-generationQualifier';\n            case 'id-at-organizationalunitname':\n            case 'organizationalunitname':\n            case 'ou':\n                return 'id-at-organizationalUnitName';\n            case 'id-at-pseudonym':\n            case 'pseudonym':\n                return 'id-at-pseudonym';\n            case 'id-at-title':\n            case 'title':\n                return 'id-at-title';\n            case 'id-at-description':\n            case 'description':\n                return 'id-at-description';\n            case 'id-at-role':\n            case 'role':\n                return 'id-at-role';\n            case 'id-at-uniqueidentifier':\n            case 'uniqueidentifier':\n            case 'x500uniqueidentifier':\n                return 'id-at-uniqueIdentifier';\n            case 'postaladdress':\n            case 'id-at-postaladdress':\n                return 'id-at-postalAddress';\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * Set a Distinguished Name property\n     *\n     * @param string $propName\n     * @param mixed $propValue\n     * @param string $type optional\n     * @return bool\n     */\n    public function setDNProp($propName, $propValue, $type = 'utf8String')\n    {\n        if (empty($this->dn)) {\n            $this->dn = ['rdnSequence' => []];\n        }\n\n        if (($propName = $this->translateDNProp($propName)) === false) {\n            return false;\n        }\n\n        foreach ((array) $propValue as $v) {\n            if (!is_array($v) && isset($type)) {\n                $v = [$type => $v];\n            }\n            $this->dn['rdnSequence'][] = [\n                [\n                    'type' => $propName,\n                    'value' => $v\n                ]\n            ];\n        }\n\n        return true;\n    }\n\n    /**\n     * Remove Distinguished Name properties\n     *\n     * @param string $propName\n     */\n    public function removeDNProp($propName)\n    {\n        if (empty($this->dn)) {\n            return;\n        }\n\n        if (($propName = $this->translateDNProp($propName)) === false) {\n            return;\n        }\n\n        $dn = &$this->dn['rdnSequence'];\n        $size = count($dn);\n        for ($i = 0; $i < $size; $i++) {\n            if ($dn[$i][0]['type'] == $propName) {\n                unset($dn[$i]);\n            }\n        }\n\n        $dn = array_values($dn);\n        // fix for https://bugs.php.net/75433 affecting PHP 7.2\n        if (!isset($dn[0])) {\n            $dn = array_splice($dn, 0, 0);\n        }\n    }\n\n    /**\n     * Get Distinguished Name properties\n     *\n     * @param string $propName\n     * @param array $dn optional\n     * @param bool $withType optional\n     * @return mixed\n     */\n    public function getDNProp($propName, $dn = null, $withType = false)\n    {\n        if (!isset($dn)) {\n            $dn = $this->dn;\n        }\n\n        if (empty($dn)) {\n            return false;\n        }\n\n        if (($propName = $this->translateDNProp($propName)) === false) {\n            return false;\n        }\n\n        $filters = [];\n        $filters['value'] = ['type' => ASN1::TYPE_UTF8_STRING];\n        ASN1::setFilters($filters);\n        $this->mapOutDNs($dn, 'rdnSequence');\n        $dn = $dn['rdnSequence'];\n        $result = [];\n        for ($i = 0; $i < count($dn); $i++) {\n            if ($dn[$i][0]['type'] == $propName) {\n                $v = $dn[$i][0]['value'];\n                if (!$withType) {\n                    if (is_array($v)) {\n                        foreach ($v as $type => $s) {\n                            $type = array_search($type, ASN1::ANY_MAP);\n                            if ($type !== false && array_key_exists($type, ASN1::STRING_TYPE_SIZE)) {\n                                $s = ASN1::convert($s, $type);\n                                if ($s !== false) {\n                                    $v = $s;\n                                    break;\n                                }\n                            }\n                        }\n                        if (is_array($v)) {\n                            $v = array_pop($v); // Always strip data type.\n                        }\n                    } elseif (is_object($v) && $v instanceof Element) {\n                        $map = $this->getMapping($propName);\n                        if (!is_bool($map)) {\n                            $decoded = ASN1::decodeBER($v);\n                            if (!$decoded) {\n                                return false;\n                            }\n                            $v = ASN1::asn1map($decoded[0], $map);\n                        }\n                    }\n                }\n                $result[] = $v;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Set a Distinguished Name\n     *\n     * @param mixed $dn\n     * @param bool $merge optional\n     * @param string $type optional\n     * @return bool\n     */\n    public function setDN($dn, $merge = false, $type = 'utf8String')\n    {\n        if (!$merge) {\n            $this->dn = null;\n        }\n\n        if (is_array($dn)) {\n            if (isset($dn['rdnSequence'])) {\n                $this->dn = $dn; // No merge here.\n                return true;\n            }\n\n            // handles stuff generated by openssl_x509_parse()\n            foreach ($dn as $prop => $value) {\n                if (!$this->setDNProp($prop, $value, $type)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        // handles everything else\n        $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=|postalAddress=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);\n        for ($i = 1; $i < count($results); $i += 2) {\n            $prop = trim($results[$i], ', =/');\n            $value = $results[$i + 1];\n            if (!$this->setDNProp($prop, $value, $type)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Get the Distinguished Name for a certificates subject\n     *\n     * @param mixed $format optional\n     * @param array $dn optional\n     * @return array|bool|string\n     */\n    public function getDN($format = self::DN_ARRAY, $dn = null)\n    {\n        if (!isset($dn)) {\n            $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn;\n        }\n\n        switch ((int) $format) {\n            case self::DN_ARRAY:\n                return $dn;\n            case self::DN_ASN1:\n                $filters = [];\n                $filters['rdnSequence']['value'] = ['type' => ASN1::TYPE_UTF8_STRING];\n                ASN1::setFilters($filters);\n                $this->mapOutDNs($dn, 'rdnSequence');\n                return ASN1::encodeDER($dn, Maps\\Name::MAP);\n            case self::DN_CANON:\n                //  No SEQUENCE around RDNs and all string values normalized as\n                // trimmed lowercase UTF-8 with all spacing as one blank.\n                // constructed RDNs will not be canonicalized\n                $filters = [];\n                $filters['value'] = ['type' => ASN1::TYPE_UTF8_STRING];\n                ASN1::setFilters($filters);\n                $result = '';\n                $this->mapOutDNs($dn, 'rdnSequence');\n                foreach ($dn['rdnSequence'] as $rdn) {\n                    foreach ($rdn as $i => $attr) {\n                        $attr = &$rdn[$i];\n                        if (is_array($attr['value'])) {\n                            foreach ($attr['value'] as $type => $v) {\n                                $type = array_search($type, ASN1::ANY_MAP, true);\n                                if ($type !== false && array_key_exists($type, ASN1::STRING_TYPE_SIZE)) {\n                                    $v = ASN1::convert($v, $type);\n                                    if ($v !== false) {\n                                        $v = preg_replace('/\\s+/', ' ', $v);\n                                        $attr['value'] = strtolower(trim($v));\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    $result .= ASN1::encodeDER($rdn, Maps\\RelativeDistinguishedName::MAP);\n                }\n                return $result;\n            case self::DN_HASH:\n                $dn = $this->getDN(self::DN_CANON, $dn);\n                $hash = new Hash('sha1');\n                $hash = $hash->hash($dn);\n                $hash = unpack('Vhash', $hash)['hash'];\n                return strtolower(Strings::bin2hex(pack('N', $hash)));\n        }\n\n        // Default is to return a string.\n        $start = true;\n        $output = '';\n\n        $result = [];\n        $filters = [];\n        $filters['rdnSequence']['value'] = ['type' => ASN1::TYPE_UTF8_STRING];\n        ASN1::setFilters($filters);\n        $this->mapOutDNs($dn, 'rdnSequence');\n\n        foreach ($dn['rdnSequence'] as $field) {\n            $prop = $field[0]['type'];\n            $value = $field[0]['value'];\n\n            $delim = ', ';\n            switch ($prop) {\n                case 'id-at-countryName':\n                    $desc = 'C';\n                    break;\n                case 'id-at-stateOrProvinceName':\n                    $desc = 'ST';\n                    break;\n                case 'id-at-organizationName':\n                    $desc = 'O';\n                    break;\n                case 'id-at-organizationalUnitName':\n                    $desc = 'OU';\n                    break;\n                case 'id-at-commonName':\n                    $desc = 'CN';\n                    break;\n                case 'id-at-localityName':\n                    $desc = 'L';\n                    break;\n                case 'id-at-surname':\n                    $desc = 'SN';\n                    break;\n                case 'id-at-uniqueIdentifier':\n                    $delim = '/';\n                    $desc = 'x500UniqueIdentifier';\n                    break;\n                case 'id-at-postalAddress':\n                    $delim = '/';\n                    $desc = 'postalAddress';\n                    break;\n                default:\n                    $delim = '/';\n                    $desc = preg_replace('#.+-([^-]+)$#', '$1', $prop);\n            }\n\n            if (!$start) {\n                $output .= $delim;\n            }\n            if (is_array($value)) {\n                foreach ($value as $type => $v) {\n                    $type = array_search($type, ASN1::ANY_MAP, true);\n                    if ($type !== false && array_key_exists($type, ASN1::STRING_TYPE_SIZE)) {\n                        $v = ASN1::convert($v, $type);\n                        if ($v !== false) {\n                            $value = $v;\n                            break;\n                        }\n                    }\n                }\n                if (is_array($value)) {\n                    $value = array_pop($value); // Always strip data type.\n                }\n            } elseif (is_object($value) && $value instanceof Element) {\n                $callback = function ($x) {\n                    return '\\x' . bin2hex($x[0]);\n                };\n                $value = strtoupper(preg_replace_callback('#[^\\x20-\\x7E]#', $callback, $value->element));\n            }\n            $output .= $desc . '=' . $value;\n            $result[$desc] = isset($result[$desc]) ?\n                array_merge((array) $result[$desc], [$value]) :\n                $value;\n            $start = false;\n        }\n\n        return $format == self::DN_OPENSSL ? $result : $output;\n    }\n\n    /**\n     * Get the Distinguished Name for a certificate/crl issuer\n     *\n     * @param int $format optional\n     * @return mixed\n     */\n    public function getIssuerDN($format = self::DN_ARRAY)\n    {\n        switch (true) {\n            case !isset($this->currentCert) || !is_array($this->currentCert):\n                break;\n            case isset($this->currentCert['tbsCertificate']):\n                return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']);\n            case isset($this->currentCert['tbsCertList']):\n                return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']);\n        }\n\n        return false;\n    }\n\n    /**\n     * Get the Distinguished Name for a certificate/csr subject\n     * Alias of getDN()\n     *\n     * @param int $format optional\n     * @return mixed\n     */\n    public function getSubjectDN($format = self::DN_ARRAY)\n    {\n        switch (true) {\n            case !empty($this->dn):\n                return $this->getDN($format);\n            case !isset($this->currentCert) || !is_array($this->currentCert):\n                break;\n            case isset($this->currentCert['tbsCertificate']):\n                return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']);\n            case isset($this->currentCert['certificationRequestInfo']):\n                return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']);\n        }\n\n        return false;\n    }\n\n    /**\n     * Get an individual Distinguished Name property for a certificate/crl issuer\n     *\n     * @param string $propName\n     * @param bool $withType optional\n     * @return mixed\n     */\n    public function getIssuerDNProp($propName, $withType = false)\n    {\n        switch (true) {\n            case !isset($this->currentCert) || !is_array($this->currentCert):\n                break;\n            case isset($this->currentCert['tbsCertificate']):\n                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['issuer'], $withType);\n            case isset($this->currentCert['tbsCertList']):\n                return $this->getDNProp($propName, $this->currentCert['tbsCertList']['issuer'], $withType);\n        }\n\n        return false;\n    }\n\n    /**\n     * Get an individual Distinguished Name property for a certificate/csr subject\n     *\n     * @param string $propName\n     * @param bool $withType optional\n     * @return mixed\n     */\n    public function getSubjectDNProp($propName, $withType = false)\n    {\n        switch (true) {\n            case !empty($this->dn):\n                return $this->getDNProp($propName, null, $withType);\n            case !isset($this->currentCert) || !is_array($this->currentCert):\n                break;\n            case isset($this->currentCert['tbsCertificate']):\n                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType);\n            case isset($this->currentCert['certificationRequestInfo']):\n                return $this->getDNProp($propName, $this->currentCert['certificationRequestInfo']['subject'], $withType);\n        }\n\n        return false;\n    }\n\n    /**\n     * Get the certificate chain for the current cert\n     *\n     * @return mixed\n     */\n    public function getChain()\n    {\n        $chain = [$this->currentCert];\n\n        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {\n            return false;\n        }\n        while (true) {\n            $currentCert = $chain[count($chain) - 1];\n            for ($i = 0; $i < count($this->CAs); $i++) {\n                $ca = $this->CAs[$i];\n                if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {\n                    $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert);\n                    $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);\n                    switch (true) {\n                        case !is_array($authorityKey):\n                        case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:\n                            if ($currentCert === $ca) {\n                                break 3;\n                            }\n                            $chain[] = $ca;\n                            break 2;\n                    }\n                }\n            }\n            if ($i == count($this->CAs)) {\n                break;\n            }\n        }\n        foreach ($chain as $key => $value) {\n            $chain[$key] = new X509();\n            $chain[$key]->loadX509($value);\n        }\n        return $chain;\n    }\n\n    /**\n     * Returns the current cert\n     *\n     * @return array|bool\n     */\n    public function &getCurrentCert()\n    {\n        return $this->currentCert;\n    }\n\n    /**\n     * Set public key\n     *\n     * Key needs to be a \\phpseclib3\\Crypt\\RSA object\n     *\n     * @param PublicKey $key\n     * @return void\n     */\n    public function setPublicKey(PublicKey $key)\n    {\n        $this->publicKey = $key;\n    }\n\n    /**\n     * Set private key\n     *\n     * Key needs to be a \\phpseclib3\\Crypt\\RSA object\n     *\n     * @param PrivateKey $key\n     */\n    public function setPrivateKey(PrivateKey $key)\n    {\n        $this->privateKey = $key;\n    }\n\n    /**\n     * Set challenge\n     *\n     * Used for SPKAC CSR's\n     *\n     * @param string $challenge\n     */\n    public function setChallenge($challenge)\n    {\n        $this->challenge = $challenge;\n    }\n\n    /**\n     * Gets the public key\n     *\n     * Returns a \\phpseclib3\\Crypt\\RSA object or a false.\n     *\n     * @return mixed\n     */\n    public function getPublicKey()\n    {\n        if (isset($this->publicKey)) {\n            return $this->publicKey;\n        }\n\n        if (isset($this->currentCert) && is_array($this->currentCert)) {\n            $paths = [\n                'tbsCertificate/subjectPublicKeyInfo',\n                'certificationRequestInfo/subjectPKInfo',\n                'publicKeyAndChallenge/spki'\n            ];\n            foreach ($paths as $path) {\n                $keyinfo = $this->subArray($this->currentCert, $path);\n                if (!empty($keyinfo)) {\n                    break;\n                }\n            }\n        }\n        if (empty($keyinfo)) {\n            return false;\n        }\n\n        $key = $keyinfo['subjectPublicKey'];\n\n        switch ($keyinfo['algorithm']['algorithm']) {\n            case 'id-RSASSA-PSS':\n                return RSA::loadFormat('PSS', $key);\n            case 'rsaEncryption':\n                return RSA::loadFormat('PKCS8', $key)->withPadding(RSA::SIGNATURE_PKCS1);\n            case 'id-ecPublicKey':\n            case 'id-Ed25519':\n            case 'id-Ed448':\n                return EC::loadFormat('PKCS8', $key);\n            case 'id-dsa':\n                return DSA::loadFormat('PKCS8', $key);\n        }\n\n        return false;\n    }\n\n    /**\n     * Load a Certificate Signing Request\n     *\n     * @param string $csr\n     * @param int $mode\n     * @return mixed\n     */\n    public function loadCSR($csr, $mode = self::FORMAT_AUTO_DETECT)\n    {\n        if (is_array($csr) && isset($csr['certificationRequestInfo'])) {\n            unset($this->currentCert);\n            unset($this->currentKeyIdentifier);\n            unset($this->signatureSubject);\n            $this->dn = $csr['certificationRequestInfo']['subject'];\n            if (!isset($this->dn)) {\n                return false;\n            }\n\n            $this->currentCert = $csr;\n            return $csr;\n        }\n\n        // see http://tools.ietf.org/html/rfc2986\n\n        if ($mode != self::FORMAT_DER) {\n            $newcsr = ASN1::extractBER($csr);\n            if ($mode == self::FORMAT_PEM && $csr == $newcsr) {\n                return false;\n            }\n            $csr = $newcsr;\n        }\n        $orig = $csr;\n\n        if ($csr === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $decoded = ASN1::decodeBER($csr);\n\n        if (!$decoded) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $csr = ASN1::asn1map($decoded[0], Maps\\CertificationRequest::MAP);\n        if (!isset($csr) || $csr === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $this->mapInAttributes($csr, 'certificationRequestInfo/attributes');\n        $this->mapInDNs($csr, 'certificationRequestInfo/subject/rdnSequence');\n\n        $this->dn = $csr['certificationRequestInfo']['subject'];\n\n        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);\n\n        $key = $csr['certificationRequestInfo']['subjectPKInfo'];\n        $key = ASN1::encodeDER($key, Maps\\SubjectPublicKeyInfo::MAP);\n        $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'] =\n            \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n            chunk_split(base64_encode($key), 64) .\n            \"-----END PUBLIC KEY-----\";\n\n        $this->currentKeyIdentifier = null;\n        $this->currentCert = $csr;\n\n        $this->publicKey = null;\n        $this->publicKey = $this->getPublicKey();\n\n        return $csr;\n    }\n\n    /**\n     * Save CSR request\n     *\n     * @param array $csr\n     * @param int $format optional\n     * @return string\n     */\n    public function saveCSR(array $csr, $format = self::FORMAT_PEM)\n    {\n        if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) {\n            return false;\n        }\n\n        switch (true) {\n            case !($algorithm = $this->subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')):\n            case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):\n                break;\n            default:\n                $csr['certificationRequestInfo']['subjectPKInfo'] = new Element(\n                    base64_decode(preg_replace('#-.+-|[\\r\\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']))\n                );\n        }\n\n        $filters = [];\n        $filters['certificationRequestInfo']['subject']['rdnSequence']['value']\n            = ['type' => ASN1::TYPE_UTF8_STRING];\n\n        ASN1::setFilters($filters);\n\n        $this->mapOutDNs($csr, 'certificationRequestInfo/subject/rdnSequence');\n        $this->mapOutAttributes($csr, 'certificationRequestInfo/attributes');\n        $csr = ASN1::encodeDER($csr, Maps\\CertificationRequest::MAP);\n\n        switch ($format) {\n            case self::FORMAT_DER:\n                return $csr;\n            // case self::FORMAT_PEM:\n            default:\n                return \"-----BEGIN CERTIFICATE REQUEST-----\\r\\n\" . chunk_split(Strings::base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----';\n        }\n    }\n\n    /**\n     * Load a SPKAC CSR\n     *\n     * SPKAC's are produced by the HTML5 keygen element:\n     *\n     * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen\n     *\n     * @param string $spkac\n     * @return mixed\n     */\n    public function loadSPKAC($spkac)\n    {\n        if (is_array($spkac) && isset($spkac['publicKeyAndChallenge'])) {\n            unset($this->currentCert);\n            unset($this->currentKeyIdentifier);\n            unset($this->signatureSubject);\n            $this->currentCert = $spkac;\n            return $spkac;\n        }\n\n        // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge\n\n        // OpenSSL produces SPKAC's that are preceded by the string SPKAC=\n        $temp = preg_replace('#(?:SPKAC=)|[ \\r\\n\\\\\\]#', '', $spkac);\n        $temp = preg_match('#^[a-zA-Z\\d/+]*={0,2}$#', $temp) ? Strings::base64_decode($temp) : false;\n        if ($temp != false) {\n            $spkac = $temp;\n        }\n        $orig = $spkac;\n\n        if ($spkac === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $decoded = ASN1::decodeBER($spkac);\n\n        if (!$decoded) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $spkac = ASN1::asn1map($decoded[0], Maps\\SignedPublicKeyAndChallenge::MAP);\n\n        if (!isset($spkac) || !is_array($spkac)) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);\n\n        $key = $spkac['publicKeyAndChallenge']['spki'];\n        $key = ASN1::encodeDER($key, Maps\\SubjectPublicKeyInfo::MAP);\n        $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey'] =\n            \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n            chunk_split(base64_encode($key), 64) .\n            \"-----END PUBLIC KEY-----\";\n\n        $this->currentKeyIdentifier = null;\n        $this->currentCert = $spkac;\n\n        $this->publicKey = null;\n        $this->publicKey = $this->getPublicKey();\n\n        return $spkac;\n    }\n\n    /**\n     * Save a SPKAC CSR request\n     *\n     * @param array $spkac\n     * @param int $format optional\n     * @return string\n     */\n    public function saveSPKAC(array $spkac, $format = self::FORMAT_PEM)\n    {\n        if (!is_array($spkac) || !isset($spkac['publicKeyAndChallenge'])) {\n            return false;\n        }\n\n        $algorithm = $this->subArray($spkac, 'publicKeyAndChallenge/spki/algorithm/algorithm');\n        switch (true) {\n            case !$algorithm:\n            case is_object($spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']):\n                break;\n            default:\n                $spkac['publicKeyAndChallenge']['spki'] = new Element(\n                    base64_decode(preg_replace('#-.+-|[\\r\\n]#', '', $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']))\n                );\n        }\n\n        $spkac = ASN1::encodeDER($spkac, Maps\\SignedPublicKeyAndChallenge::MAP);\n\n        switch ($format) {\n            case self::FORMAT_DER:\n                return $spkac;\n            // case self::FORMAT_PEM:\n            default:\n                // OpenSSL's implementation of SPKAC requires the SPKAC be preceded by SPKAC= and since there are pretty much\n                // no other SPKAC decoders phpseclib will use that same format\n                return 'SPKAC=' . Strings::base64_encode($spkac);\n        }\n    }\n\n    /**\n     * Load a Certificate Revocation List\n     *\n     * @param string $crl\n     * @param int $mode\n     * @return mixed\n     */\n    public function loadCRL($crl, $mode = self::FORMAT_AUTO_DETECT)\n    {\n        if (is_array($crl) && isset($crl['tbsCertList'])) {\n            $this->currentCert = $crl;\n            unset($this->signatureSubject);\n            return $crl;\n        }\n\n        if ($mode != self::FORMAT_DER) {\n            $newcrl = ASN1::extractBER($crl);\n            if ($mode == self::FORMAT_PEM && $crl == $newcrl) {\n                return false;\n            }\n            $crl = $newcrl;\n        }\n        $orig = $crl;\n\n        if ($crl === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $decoded = ASN1::decodeBER($crl);\n\n        if (!$decoded) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $crl = ASN1::asn1map($decoded[0], Maps\\CertificateList::MAP);\n        if (!isset($crl) || $crl === false) {\n            $this->currentCert = false;\n            return false;\n        }\n\n        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);\n\n        $this->mapInDNs($crl, 'tbsCertList/issuer/rdnSequence');\n        if ($this->isSubArrayValid($crl, 'tbsCertList/crlExtensions')) {\n            $this->mapInExtensions($crl, 'tbsCertList/crlExtensions');\n        }\n        if ($this->isSubArrayValid($crl, 'tbsCertList/revokedCertificates')) {\n            $rclist_ref = &$this->subArrayUnchecked($crl, 'tbsCertList/revokedCertificates');\n            if ($rclist_ref) {\n                $rclist = $crl['tbsCertList']['revokedCertificates'];\n                foreach ($rclist as $i => $extension) {\n                    if ($this->isSubArrayValid($rclist, \"$i/crlEntryExtensions\")) {\n                        $this->mapInExtensions($rclist_ref, \"$i/crlEntryExtensions\");\n                    }\n                }\n            }\n        }\n\n        $this->currentKeyIdentifier = null;\n        $this->currentCert = $crl;\n\n        return $crl;\n    }\n\n    /**\n     * Save Certificate Revocation List.\n     *\n     * @param array $crl\n     * @param int $format optional\n     * @return string\n     */\n    public function saveCRL(array $crl, $format = self::FORMAT_PEM)\n    {\n        if (!is_array($crl) || !isset($crl['tbsCertList'])) {\n            return false;\n        }\n\n        $filters = [];\n        $filters['tbsCertList']['issuer']['rdnSequence']['value']\n            = ['type' => ASN1::TYPE_UTF8_STRING];\n        $filters['tbsCertList']['signature']['parameters']\n            = ['type' => ASN1::TYPE_UTF8_STRING];\n        $filters['signatureAlgorithm']['parameters']\n            = ['type' => ASN1::TYPE_UTF8_STRING];\n\n        if (empty($crl['tbsCertList']['signature']['parameters'])) {\n            $filters['tbsCertList']['signature']['parameters']\n                = ['type' => ASN1::TYPE_NULL];\n        }\n\n        if (empty($crl['signatureAlgorithm']['parameters'])) {\n            $filters['signatureAlgorithm']['parameters']\n                = ['type' => ASN1::TYPE_NULL];\n        }\n\n        ASN1::setFilters($filters);\n\n        $this->mapOutDNs($crl, 'tbsCertList/issuer/rdnSequence');\n        $this->mapOutExtensions($crl, 'tbsCertList/crlExtensions');\n        $rclist = &$this->subArray($crl, 'tbsCertList/revokedCertificates');\n        if (is_array($rclist)) {\n            foreach ($rclist as $i => $extension) {\n                $this->mapOutExtensions($rclist, \"$i/crlEntryExtensions\");\n            }\n        }\n\n        $crl = ASN1::encodeDER($crl, Maps\\CertificateList::MAP);\n\n        switch ($format) {\n            case self::FORMAT_DER:\n                return $crl;\n            // case self::FORMAT_PEM:\n            default:\n                return \"-----BEGIN X509 CRL-----\\r\\n\" . chunk_split(Strings::base64_encode($crl), 64) . '-----END X509 CRL-----';\n        }\n    }\n\n    /**\n     * Helper function to build a time field according to RFC 3280 section\n     *  - 4.1.2.5 Validity\n     *  - 5.1.2.4 This Update\n     *  - 5.1.2.5 Next Update\n     *  - 5.1.2.6 Revoked Certificates\n     * by choosing utcTime iff year of date given is before 2050 and generalTime else.\n     *\n     * @param string $date in format date('D, d M Y H:i:s O')\n     * @return array|Element\n     */\n    private function timeField($date)\n    {\n        if ($date instanceof Element) {\n            return $date;\n        }\n        $dateObj = new \\DateTimeImmutable($date, new \\DateTimeZone('GMT'));\n        $year = $dateObj->format('Y'); // the same way ASN1.php parses this\n        if ($year < 2050) {\n            return ['utcTime' => $date];\n        } else {\n            return ['generalTime' => $date];\n        }\n    }\n\n    /**\n     * Sign an X.509 certificate\n     *\n     * $issuer's private key needs to be loaded.\n     * $subject can be either an existing X.509 cert (if you want to resign it),\n     * a CSR or something with the DN and public key explicitly set.\n     *\n     * @return mixed\n     */\n    public function sign(X509 $issuer, X509 $subject)\n    {\n        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {\n            return false;\n        }\n\n        if (isset($subject->publicKey) && !($subjectPublicKey = $subject->formatSubjectPublicKey())) {\n            return false;\n        }\n\n        $currentCert = isset($this->currentCert) ? $this->currentCert : null;\n        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;\n        $signatureAlgorithm = self::identifySignatureAlgorithm($issuer->privateKey);\n\n        if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) {\n            $this->currentCert = $subject->currentCert;\n            $this->currentCert['tbsCertificate']['signature'] = $signatureAlgorithm;\n            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;\n\n            if (!empty($this->startDate)) {\n                $this->currentCert['tbsCertificate']['validity']['notBefore'] = $this->timeField($this->startDate);\n            }\n            if (!empty($this->endDate)) {\n                $this->currentCert['tbsCertificate']['validity']['notAfter'] = $this->timeField($this->endDate);\n            }\n            if (!empty($this->serialNumber)) {\n                $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber;\n            }\n            if (!empty($subject->dn)) {\n                $this->currentCert['tbsCertificate']['subject'] = $subject->dn;\n            }\n            if (!empty($subject->publicKey)) {\n                $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey;\n            }\n            $this->removeExtension('id-ce-authorityKeyIdentifier');\n            if (isset($subject->domains)) {\n                $this->removeExtension('id-ce-subjectAltName');\n            }\n        } elseif (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) {\n            return false;\n        } else {\n            if (!isset($subject->publicKey)) {\n                return false;\n            }\n\n            $startDate = new \\DateTimeImmutable('now', new \\DateTimeZone(@date_default_timezone_get()));\n            $startDate = !empty($this->startDate) ? $this->startDate : $startDate->format('D, d M Y H:i:s O');\n\n            $endDate = new \\DateTimeImmutable('+1 year', new \\DateTimeZone(@date_default_timezone_get()));\n            $endDate = !empty($this->endDate) ? $this->endDate : $endDate->format('D, d M Y H:i:s O');\n\n            /* \"The serial number MUST be a positive integer\"\n               \"Conforming CAs MUST NOT use serialNumber values longer than 20 octets.\"\n                -- https://tools.ietf.org/html/rfc5280#section-4.1.2.2\n\n               for the integer to be positive the leading bit needs to be 0 hence the\n               application of a bitmap\n            */\n            $serialNumber = !empty($this->serialNumber) ?\n                $this->serialNumber :\n                new BigInteger(Random::string(20) & (\"\\x7F\" . str_repeat(\"\\xFF\", 19)), 256);\n\n            $this->currentCert = [\n                'tbsCertificate' =>\n                    [\n                        'version' => 'v3',\n                        'serialNumber' => $serialNumber, // $this->setSerialNumber()\n                        'signature' => $signatureAlgorithm,\n                        'issuer' => false, // this is going to be overwritten later\n                        'validity' => [\n                            'notBefore' => $this->timeField($startDate), // $this->setStartDate()\n                            'notAfter' => $this->timeField($endDate)   // $this->setEndDate()\n                        ],\n                        'subject' => $subject->dn,\n                        'subjectPublicKeyInfo' => $subjectPublicKey\n                    ],\n                    'signatureAlgorithm' => $signatureAlgorithm,\n                    'signature'          => false // this is going to be overwritten later\n            ];\n\n            // Copy extensions from CSR.\n            $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0);\n\n            if (!empty($csrexts)) {\n                $this->currentCert['tbsCertificate']['extensions'] = $csrexts;\n            }\n        }\n\n        $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn;\n\n        if (isset($issuer->currentKeyIdentifier)) {\n            $this->setExtension('id-ce-authorityKeyIdentifier', [\n                    //'authorityCertIssuer' => array(\n                    //    array(\n                    //        'directoryName' => $issuer->dn\n                    //    )\n                    //),\n                    'keyIdentifier' => $issuer->currentKeyIdentifier\n                ]);\n            //$extensions = &$this->currentCert['tbsCertificate']['extensions'];\n            //if (isset($issuer->serialNumber)) {\n            //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;\n            //}\n            //unset($extensions);\n        }\n\n        if (isset($subject->currentKeyIdentifier)) {\n            $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier);\n        }\n\n        $altName = [];\n\n        if (isset($subject->domains) && count($subject->domains)) {\n            $altName = array_map(['\\phpseclib3\\File\\X509', 'dnsName'], $subject->domains);\n        }\n\n        if (isset($subject->ipAddresses) && count($subject->ipAddresses)) {\n            // should an IP address appear as the CN if no domain name is specified? idk\n            //$ips = count($subject->domains) ? $subject->ipAddresses : array_slice($subject->ipAddresses, 1);\n            $ipAddresses = [];\n            foreach ($subject->ipAddresses as $ipAddress) {\n                $encoded = $subject->ipAddress($ipAddress);\n                if ($encoded !== false) {\n                    $ipAddresses[] = $encoded;\n                }\n            }\n            if (count($ipAddresses)) {\n                $altName = array_merge($altName, $ipAddresses);\n            }\n        }\n\n        if (!empty($altName)) {\n            $this->setExtension('id-ce-subjectAltName', $altName);\n        }\n\n        if ($this->caFlag) {\n            $keyUsage = $this->getExtension('id-ce-keyUsage');\n            if (!$keyUsage) {\n                $keyUsage = [];\n            }\n\n            $this->setExtension(\n                'id-ce-keyUsage',\n                array_values(array_unique(array_merge($keyUsage, ['cRLSign', 'keyCertSign'])))\n            );\n\n            $basicConstraints = $this->getExtension('id-ce-basicConstraints');\n            if (!$basicConstraints) {\n                $basicConstraints = [];\n            }\n\n            $this->setExtension(\n                'id-ce-basicConstraints',\n                array_merge(['cA' => true], $basicConstraints),\n                true\n            );\n\n            if (!isset($subject->currentKeyIdentifier)) {\n                $this->setExtension('id-ce-subjectKeyIdentifier', $this->computeKeyIdentifier($this->currentCert), false, false);\n            }\n        }\n\n        // resync $this->signatureSubject\n        // save $tbsCertificate in case there are any \\phpseclib3\\File\\ASN1\\Element objects in it\n        $tbsCertificate = $this->currentCert['tbsCertificate'];\n        $this->loadX509($this->saveX509($this->currentCert));\n\n        $result = $this->currentCert;\n        $this->currentCert['signature'] = $result['signature'] = \"\\0\" . $issuer->privateKey->sign($this->signatureSubject);\n        $result['tbsCertificate'] = $tbsCertificate;\n\n        $this->currentCert = $currentCert;\n        $this->signatureSubject = $signatureSubject;\n\n        return $result;\n    }\n\n    /**\n     * Sign a CSR\n     *\n     * @return mixed\n     */\n    public function signCSR()\n    {\n        if (!is_object($this->privateKey) || empty($this->dn)) {\n            return false;\n        }\n\n        $origPublicKey = $this->publicKey;\n        $this->publicKey = $this->privateKey->getPublicKey();\n        $publicKey = $this->formatSubjectPublicKey();\n        $this->publicKey = $origPublicKey;\n\n        $currentCert = isset($this->currentCert) ? $this->currentCert : null;\n        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;\n        $signatureAlgorithm = self::identifySignatureAlgorithm($this->privateKey);\n\n        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) {\n            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;\n            if (!empty($this->dn)) {\n                $this->currentCert['certificationRequestInfo']['subject'] = $this->dn;\n            }\n            $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey;\n        } else {\n            $this->currentCert = [\n                'certificationRequestInfo' =>\n                    [\n                        'version' => 'v1',\n                        'subject' => $this->dn,\n                        'subjectPKInfo' => $publicKey,\n                        'attributes' => []\n                    ],\n                    'signatureAlgorithm' => $signatureAlgorithm,\n                    'signature'          => false // this is going to be overwritten later\n            ];\n        }\n\n        // resync $this->signatureSubject\n        // save $certificationRequestInfo in case there are any \\phpseclib3\\File\\ASN1\\Element objects in it\n        $certificationRequestInfo = $this->currentCert['certificationRequestInfo'];\n        $this->loadCSR($this->saveCSR($this->currentCert));\n\n        $result = $this->currentCert;\n        $this->currentCert['signature'] = $result['signature'] = \"\\0\" . $this->privateKey->sign($this->signatureSubject);\n        $result['certificationRequestInfo'] = $certificationRequestInfo;\n\n        $this->currentCert = $currentCert;\n        $this->signatureSubject = $signatureSubject;\n\n        return $result;\n    }\n\n    /**\n     * Sign a SPKAC\n     *\n     * @return mixed\n     */\n    public function signSPKAC()\n    {\n        if (!is_object($this->privateKey)) {\n            return false;\n        }\n\n        $origPublicKey = $this->publicKey;\n        $this->publicKey = $this->privateKey->getPublicKey();\n        $publicKey = $this->formatSubjectPublicKey();\n        $this->publicKey = $origPublicKey;\n\n        $currentCert = isset($this->currentCert) ? $this->currentCert : null;\n        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;\n        $signatureAlgorithm = self::identifySignatureAlgorithm($this->privateKey);\n\n        // re-signing a SPKAC seems silly but since everything else supports re-signing why not?\n        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['publicKeyAndChallenge'])) {\n            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;\n            $this->currentCert['publicKeyAndChallenge']['spki'] = $publicKey;\n            if (!empty($this->challenge)) {\n                // the bitwise AND ensures that the output is a valid IA5String\n                $this->currentCert['publicKeyAndChallenge']['challenge'] = $this->challenge & str_repeat(\"\\x7F\", strlen($this->challenge));\n            }\n        } else {\n            $this->currentCert = [\n                'publicKeyAndChallenge' =>\n                    [\n                        'spki' => $publicKey,\n                        // quoting <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen>,\n                        // \"A challenge string that is submitted along with the public key. Defaults to an empty string if not specified.\"\n                        // both Firefox and OpenSSL (\"openssl spkac -key private.key\") behave this way\n                        // we could alternatively do this instead if we ignored the specs:\n                        // Random::string(8) & str_repeat(\"\\x7F\", 8)\n                        'challenge' => !empty($this->challenge) ? $this->challenge : ''\n                    ],\n                    'signatureAlgorithm' => $signatureAlgorithm,\n                    'signature'          => false // this is going to be overwritten later\n            ];\n        }\n\n        // resync $this->signatureSubject\n        // save $publicKeyAndChallenge in case there are any \\phpseclib3\\File\\ASN1\\Element objects in it\n        $publicKeyAndChallenge = $this->currentCert['publicKeyAndChallenge'];\n        $this->loadSPKAC($this->saveSPKAC($this->currentCert));\n\n        $result = $this->currentCert;\n        $this->currentCert['signature'] = $result['signature'] = \"\\0\" . $this->privateKey->sign($this->signatureSubject);\n        $result['publicKeyAndChallenge'] = $publicKeyAndChallenge;\n\n        $this->currentCert = $currentCert;\n        $this->signatureSubject = $signatureSubject;\n\n        return $result;\n    }\n\n    /**\n     * Sign a CRL\n     *\n     * $issuer's private key needs to be loaded.\n     *\n     * @return mixed\n     */\n    public function signCRL(X509 $issuer, X509 $crl)\n    {\n        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {\n            return false;\n        }\n\n        $currentCert = isset($this->currentCert) ? $this->currentCert : null;\n        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;\n        $signatureAlgorithm = self::identifySignatureAlgorithm($issuer->privateKey);\n\n        $thisUpdate = new \\DateTimeImmutable('now', new \\DateTimeZone(@date_default_timezone_get()));\n        $thisUpdate = !empty($this->startDate) ? $this->startDate : $thisUpdate->format('D, d M Y H:i:s O');\n\n        if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) {\n            $this->currentCert = $crl->currentCert;\n            $this->currentCert['tbsCertList']['signature'] = $signatureAlgorithm;\n            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;\n        } else {\n            $this->currentCert = [\n                'tbsCertList' =>\n                    [\n                        'version' => 'v2',\n                        'signature' => $signatureAlgorithm,\n                        'issuer' => false, // this is going to be overwritten later\n                        'thisUpdate' => $this->timeField($thisUpdate) // $this->setStartDate()\n                    ],\n                    'signatureAlgorithm' => $signatureAlgorithm,\n                    'signature'          => false // this is going to be overwritten later\n            ];\n        }\n\n        $tbsCertList = &$this->currentCert['tbsCertList'];\n        $tbsCertList['issuer'] = $issuer->dn;\n        $tbsCertList['thisUpdate'] = $this->timeField($thisUpdate);\n\n        if (!empty($this->endDate)) {\n            $tbsCertList['nextUpdate'] = $this->timeField($this->endDate); // $this->setEndDate()\n        } else {\n            unset($tbsCertList['nextUpdate']);\n        }\n\n        if (!empty($this->serialNumber)) {\n            $crlNumber = $this->serialNumber;\n        } else {\n            $crlNumber = $this->getExtension('id-ce-cRLNumber');\n            // \"The CRL number is a non-critical CRL extension that conveys a\n            //  monotonically increasing sequence number for a given CRL scope and\n            //  CRL issuer.  This extension allows users to easily determine when a\n            //  particular CRL supersedes another CRL.\"\n            // -- https://tools.ietf.org/html/rfc5280#section-5.2.3\n            $crlNumber = $crlNumber !== false ? $crlNumber->add(new BigInteger(1)) : null;\n        }\n\n        $this->removeExtension('id-ce-authorityKeyIdentifier');\n        $this->removeExtension('id-ce-issuerAltName');\n\n        // Be sure version >= v2 if some extension found.\n        $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0;\n        if (!$version) {\n            if (!empty($tbsCertList['crlExtensions'])) {\n                $version = 'v2'; // v2.\n            } elseif (!empty($tbsCertList['revokedCertificates'])) {\n                foreach ($tbsCertList['revokedCertificates'] as $cert) {\n                    if (!empty($cert['crlEntryExtensions'])) {\n                        $version = 'v2'; // v2.\n                    }\n                }\n            }\n\n            if ($version) {\n                $tbsCertList['version'] = $version;\n            }\n        }\n\n        // Store additional extensions.\n        if (!empty($tbsCertList['version'])) { // At least v2.\n            if (!empty($crlNumber)) {\n                $this->setExtension('id-ce-cRLNumber', $crlNumber);\n            }\n\n            if (isset($issuer->currentKeyIdentifier)) {\n                $this->setExtension('id-ce-authorityKeyIdentifier', [\n                        //'authorityCertIssuer' => array(\n                        //    ]\n                        //        'directoryName' => $issuer->dn\n                        //    ]\n                        //),\n                        'keyIdentifier' => $issuer->currentKeyIdentifier\n                    ]);\n                //$extensions = &$tbsCertList['crlExtensions'];\n                //if (isset($issuer->serialNumber)) {\n                //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;\n                //}\n                //unset($extensions);\n            }\n\n            $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert);\n\n            if ($issuerAltName !== false) {\n                $this->setExtension('id-ce-issuerAltName', $issuerAltName);\n            }\n        }\n\n        if (empty($tbsCertList['revokedCertificates'])) {\n            unset($tbsCertList['revokedCertificates']);\n        }\n\n        unset($tbsCertList);\n\n        // resync $this->signatureSubject\n        // save $tbsCertList in case there are any \\phpseclib3\\File\\ASN1\\Element objects in it\n        $tbsCertList = $this->currentCert['tbsCertList'];\n        $this->loadCRL($this->saveCRL($this->currentCert));\n\n        $result = $this->currentCert;\n        $this->currentCert['signature'] = $result['signature'] = \"\\0\" . $issuer->privateKey->sign($this->signatureSubject);\n        $result['tbsCertList'] = $tbsCertList;\n\n        $this->currentCert = $currentCert;\n        $this->signatureSubject = $signatureSubject;\n\n        return $result;\n    }\n\n    /**\n     * Identify signature algorithm from key settings\n     *\n     * @param PrivateKey $key\n     * @throws UnsupportedAlgorithmException if the algorithm is unsupported\n     * @return array\n     */\n    private static function identifySignatureAlgorithm(PrivateKey $key)\n    {\n        if ($key instanceof RSA) {\n            if ($key->getPadding() & RSA::SIGNATURE_PSS) {\n                $r = PSS::load($key->withPassword()->toString('PSS'));\n                return [\n                    'algorithm' => 'id-RSASSA-PSS',\n                    'parameters' => PSS::savePSSParams($r)\n                ];\n            }\n            switch ($key->getHash()) {\n                case 'md2':\n                case 'md5':\n                case 'sha1':\n                case 'sha224':\n                case 'sha256':\n                case 'sha384':\n                case 'sha512':\n                    return [\n                        'algorithm' => $key->getHash() . 'WithRSAEncryption',\n                        'parameters' => null\n                    ];\n            }\n            throw new UnsupportedAlgorithmException('The only supported hash algorithms for RSA are: md2, md5, sha1, sha224, sha256, sha384, sha512');\n        }\n\n        if ($key instanceof DSA) {\n            switch ($key->getHash()) {\n                case 'sha1':\n                case 'sha224':\n                case 'sha256':\n                    return ['algorithm' => 'id-dsa-with-' . $key->getHash()];\n            }\n            throw new UnsupportedAlgorithmException('The only supported hash algorithms for DSA are: sha1, sha224, sha256');\n        }\n\n        if ($key instanceof EC) {\n            switch ($key->getCurve()) {\n                case 'Ed25519':\n                case 'Ed448':\n                    return ['algorithm' => 'id-' . $key->getCurve()];\n            }\n            switch ($key->getHash()) {\n                case 'sha1':\n                case 'sha224':\n                case 'sha256':\n                case 'sha384':\n                case 'sha512':\n                    return ['algorithm' => 'ecdsa-with-' . strtoupper($key->getHash())];\n            }\n            throw new UnsupportedAlgorithmException('The only supported hash algorithms for EC are: sha1, sha224, sha256, sha384, sha512');\n        }\n\n        throw new UnsupportedAlgorithmException('The only supported public key classes are: RSA, DSA, EC');\n    }\n\n    /**\n     * Set certificate start date\n     *\n     * @param \\DateTimeInterface|string $date\n     */\n    public function setStartDate($date)\n    {\n        if (!is_object($date) || !($date instanceof \\DateTimeInterface)) {\n            $date = new \\DateTimeImmutable($date, new \\DateTimeZone(@date_default_timezone_get()));\n        }\n\n        $this->startDate = $date->format('D, d M Y H:i:s O');\n    }\n\n    /**\n     * Set certificate end date\n     *\n     * @param \\DateTimeInterface|string $date\n     */\n    public function setEndDate($date)\n    {\n        /*\n          To indicate that a certificate has no well-defined expiration date,\n          the notAfter SHOULD be assigned the GeneralizedTime value of\n          99991231235959Z.\n\n          -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5\n        */\n        if (is_string($date) && strtolower($date) === 'lifetime') {\n            $temp = '99991231235959Z';\n            $temp = chr(ASN1::TYPE_GENERALIZED_TIME) . ASN1::encodeLength(strlen($temp)) . $temp;\n            $this->endDate = new Element($temp);\n        } else {\n            if (!is_object($date) || !($date instanceof \\DateTimeInterface)) {\n                $date = new \\DateTimeImmutable($date, new \\DateTimeZone(@date_default_timezone_get()));\n            }\n\n            $this->endDate = $date->format('D, d M Y H:i:s O');\n        }\n    }\n\n    /**\n     * Set Serial Number\n     *\n     * @param string $serial\n     * @param int $base optional\n     */\n    public function setSerialNumber($serial, $base = -256)\n    {\n        $this->serialNumber = new BigInteger($serial, $base);\n    }\n\n    /**\n     * Turns the certificate into a certificate authority\n     *\n     */\n    public function makeCA()\n    {\n        $this->caFlag = true;\n    }\n\n    /**\n     * Check for validity of subarray\n     *\n     * This is intended for use in conjunction with _subArrayUnchecked(),\n     * implementing the checks included in _subArray() but without copying\n     * a potentially large array by passing its reference by-value to is_array().\n     *\n     * @param array $root\n     * @param string $path\n     * @return boolean\n     */\n    private function isSubArrayValid(array $root, $path)\n    {\n        if (!is_array($root)) {\n            return false;\n        }\n\n        foreach (explode('/', $path) as $i) {\n            if (!is_array($root)) {\n                return false;\n            }\n\n            if (!isset($root[$i])) {\n                return true;\n            }\n\n            $root = $root[$i];\n        }\n\n        return true;\n    }\n\n    /**\n     * Get a reference to a subarray\n     *\n     * This variant of _subArray() does no is_array() checking,\n     * so $root should be checked with _isSubArrayValid() first.\n     *\n     * This is here for performance reasons:\n     * Passing a reference (i.e. $root) by-value (i.e. to is_array())\n     * creates a copy. If $root is an especially large array, this is expensive.\n     *\n     * @param array $root\n     * @param string $path  absolute path with / as component separator\n     * @param bool $create optional\n     * @return array|false\n     */\n    private function &subArrayUnchecked(array &$root, $path, $create = false)\n    {\n        $false = false;\n\n        foreach (explode('/', $path) as $i) {\n            if (!isset($root[$i])) {\n                if (!$create) {\n                    return $false;\n                }\n\n                $root[$i] = [];\n            }\n\n            $root = &$root[$i];\n        }\n\n        return $root;\n    }\n\n    /**\n     * Get a reference to a subarray\n     *\n     * @param array $root\n     * @param string $path  absolute path with / as component separator\n     * @param bool $create optional\n     * @return array|false\n     */\n    private function &subArray(&$root, $path, $create = false)\n    {\n        $false = false;\n\n        if (!is_array($root)) {\n            return $false;\n        }\n\n        foreach (explode('/', $path) as $i) {\n            if (!is_array($root)) {\n                return $false;\n            }\n\n            if (!isset($root[$i])) {\n                if (!$create) {\n                    return $false;\n                }\n\n                $root[$i] = [];\n            }\n\n            $root = &$root[$i];\n        }\n\n        return $root;\n    }\n\n    /**\n     * Get a reference to an extension subarray\n     *\n     * @param array $root\n     * @param string $path optional absolute path with / as component separator\n     * @param bool $create optional\n     * @return array|false\n     */\n    private function &extensions(&$root, $path = null, $create = false)\n    {\n        if (!isset($root)) {\n            $root = $this->currentCert;\n        }\n\n        switch (true) {\n            case !empty($path):\n            case !is_array($root):\n                break;\n            case isset($root['tbsCertificate']):\n                $path = 'tbsCertificate/extensions';\n                break;\n            case isset($root['tbsCertList']):\n                $path = 'tbsCertList/crlExtensions';\n                break;\n            case isset($root['certificationRequestInfo']):\n                $pth = 'certificationRequestInfo/attributes';\n                $attributes = &$this->subArray($root, $pth, $create);\n\n                if (is_array($attributes)) {\n                    foreach ($attributes as $key => $value) {\n                        if ($value['type'] == 'pkcs-9-at-extensionRequest') {\n                            $path = \"$pth/$key/value/0\";\n                            break 2;\n                        }\n                    }\n                    if ($create) {\n                        $key = count($attributes);\n                        $attributes[] = ['type' => 'pkcs-9-at-extensionRequest', 'value' => []];\n                        $path = \"$pth/$key/value/0\";\n                    }\n                }\n                break;\n        }\n\n        $extensions = &$this->subArray($root, $path, $create);\n\n        if (!is_array($extensions)) {\n            $false = false;\n            return $false;\n        }\n\n        return $extensions;\n    }\n\n    /**\n     * Remove an Extension\n     *\n     * @param string $id\n     * @param string $path optional\n     * @return bool\n     */\n    private function removeExtensionHelper($id, $path = null)\n    {\n        $extensions = &$this->extensions($this->currentCert, $path);\n\n        if (!is_array($extensions)) {\n            return false;\n        }\n\n        $result = false;\n        foreach ($extensions as $key => $value) {\n            if ($value['extnId'] == $id) {\n                unset($extensions[$key]);\n                $result = true;\n            }\n        }\n\n        $extensions = array_values($extensions);\n        // fix for https://bugs.php.net/75433 affecting PHP 7.2\n        if (!isset($extensions[0])) {\n            $extensions = array_splice($extensions, 0, 0);\n        }\n        return $result;\n    }\n\n    /**\n     * Get an Extension\n     *\n     * Returns the extension if it exists and false if not\n     *\n     * @param string $id\n     * @param array $cert optional\n     * @param string $path optional\n     * @return mixed\n     */\n    private function getExtensionHelper($id, $cert = null, $path = null)\n    {\n        $extensions = $this->extensions($cert, $path);\n\n        if (!is_array($extensions)) {\n            return false;\n        }\n\n        foreach ($extensions as $key => $value) {\n            if ($value['extnId'] == $id) {\n                return $value['extnValue'];\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns a list of all extensions in use\n     *\n     * @param array $cert optional\n     * @param string $path optional\n     * @return array\n     */\n    private function getExtensionsHelper($cert = null, $path = null)\n    {\n        $exts = $this->extensions($cert, $path);\n        $extensions = [];\n\n        if (is_array($exts)) {\n            foreach ($exts as $extension) {\n                $extensions[] = $extension['extnId'];\n            }\n        }\n\n        return $extensions;\n    }\n\n    /**\n     * Set an Extension\n     *\n     * @param string $id\n     * @param mixed $value\n     * @param bool $critical optional\n     * @param bool $replace optional\n     * @param string $path optional\n     * @return bool\n     */\n    private function setExtensionHelper($id, $value, $critical = false, $replace = true, $path = null)\n    {\n        $extensions = &$this->extensions($this->currentCert, $path, true);\n\n        if (!is_array($extensions)) {\n            return false;\n        }\n\n        $newext = ['extnId'  => $id, 'critical' => $critical, 'extnValue' => $value];\n\n        foreach ($extensions as $key => $value) {\n            if ($value['extnId'] == $id) {\n                if (!$replace) {\n                    return false;\n                }\n\n                $extensions[$key] = $newext;\n                return true;\n            }\n        }\n\n        $extensions[] = $newext;\n        return true;\n    }\n\n    /**\n     * Remove a certificate, CSR or CRL Extension\n     *\n     * @param string $id\n     * @return bool\n     */\n    public function removeExtension($id)\n    {\n        return $this->removeExtensionHelper($id);\n    }\n\n    /**\n     * Get a certificate, CSR or CRL Extension\n     *\n     * Returns the extension if it exists and false if not\n     *\n     * @param string $id\n     * @param array $cert optional\n     * @param string $path\n     * @return mixed\n     */\n    public function getExtension($id, $cert = null, $path = null)\n    {\n        return $this->getExtensionHelper($id, $cert, $path);\n    }\n\n    /**\n     * Returns a list of all extensions in use in certificate, CSR or CRL\n     *\n     * @param array $cert optional\n     * @param string $path optional\n     * @return array\n     */\n    public function getExtensions($cert = null, $path = null)\n    {\n        return $this->getExtensionsHelper($cert, $path);\n    }\n\n    /**\n     * Set a certificate, CSR or CRL Extension\n     *\n     * @param string $id\n     * @param mixed $value\n     * @param bool $critical optional\n     * @param bool $replace optional\n     * @return bool\n     */\n    public function setExtension($id, $value, $critical = false, $replace = true)\n    {\n        return $this->setExtensionHelper($id, $value, $critical, $replace);\n    }\n\n    /**\n     * Remove a CSR attribute.\n     *\n     * @param string $id\n     * @param int $disposition optional\n     * @return bool\n     */\n    public function removeAttribute($id, $disposition = self::ATTR_ALL)\n    {\n        $attributes = &$this->subArray($this->currentCert, 'certificationRequestInfo/attributes');\n\n        if (!is_array($attributes)) {\n            return false;\n        }\n\n        $result = false;\n        foreach ($attributes as $key => $attribute) {\n            if ($attribute['type'] == $id) {\n                $n = count($attribute['value']);\n                switch (true) {\n                    case $disposition == self::ATTR_APPEND:\n                    case $disposition == self::ATTR_REPLACE:\n                        return false;\n                    case $disposition >= $n:\n                        $disposition -= $n;\n                        break;\n                    case $disposition == self::ATTR_ALL:\n                    case $n == 1:\n                        unset($attributes[$key]);\n                        $result = true;\n                        break;\n                    default:\n                        unset($attributes[$key]['value'][$disposition]);\n                        $attributes[$key]['value'] = array_values($attributes[$key]['value']);\n                        $result = true;\n                        break;\n                }\n                if ($result && $disposition != self::ATTR_ALL) {\n                    break;\n                }\n            }\n        }\n\n        $attributes = array_values($attributes);\n        return $result;\n    }\n\n    /**\n     * Get a CSR attribute\n     *\n     * Returns the attribute if it exists and false if not\n     *\n     * @param string $id\n     * @param int $disposition optional\n     * @param array $csr optional\n     * @return mixed\n     */\n    public function getAttribute($id, $disposition = self::ATTR_ALL, $csr = null)\n    {\n        if (empty($csr)) {\n            $csr = $this->currentCert;\n        }\n\n        $attributes = $this->subArray($csr, 'certificationRequestInfo/attributes');\n\n        if (!is_array($attributes)) {\n            return false;\n        }\n\n        foreach ($attributes as $key => $attribute) {\n            if ($attribute['type'] == $id) {\n                $n = count($attribute['value']);\n                switch (true) {\n                    case $disposition == self::ATTR_APPEND:\n                    case $disposition == self::ATTR_REPLACE:\n                        return false;\n                    case $disposition == self::ATTR_ALL:\n                        return $attribute['value'];\n                    case $disposition >= $n:\n                        $disposition -= $n;\n                        break;\n                    default:\n                        return $attribute['value'][$disposition];\n                }\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get all requested CSR extensions\n     *\n     * Returns the list of extensions if there are any and false if not\n     *\n     * @param array $csr optional\n     * @return mixed\n     */\n    public function getRequestedCertificateExtensions($csr = null)\n    {\n        if (empty($csr)) {\n            $csr = $this->currentCert;\n        }\n\n        $requestedExtensions = $this->getAttribute('pkcs-9-at-extensionRequest');\n        if ($requestedExtensions === false) {\n            return false;\n        }\n\n        return $this->getAttribute('pkcs-9-at-extensionRequest')[0];\n    }\n\n    /**\n     * Returns a list of all CSR attributes in use\n     *\n     * @param array $csr optional\n     * @return array\n     */\n    public function getAttributes($csr = null)\n    {\n        if (empty($csr)) {\n            $csr = $this->currentCert;\n        }\n\n        $attributes = $this->subArray($csr, 'certificationRequestInfo/attributes');\n        $attrs = [];\n\n        if (is_array($attributes)) {\n            foreach ($attributes as $attribute) {\n                $attrs[] = $attribute['type'];\n            }\n        }\n\n        return $attrs;\n    }\n\n    /**\n     * Set a CSR attribute\n     *\n     * @param string $id\n     * @param mixed $value\n     * @param int $disposition optional\n     * @return bool\n     */\n    public function setAttribute($id, $value, $disposition = self::ATTR_ALL)\n    {\n        $attributes = &$this->subArray($this->currentCert, 'certificationRequestInfo/attributes', true);\n\n        if (!is_array($attributes)) {\n            return false;\n        }\n\n        switch ($disposition) {\n            case self::ATTR_REPLACE:\n                $disposition = self::ATTR_APPEND;\n                // fall-through\n            case self::ATTR_ALL:\n                $this->removeAttribute($id);\n                break;\n        }\n\n        foreach ($attributes as $key => $attribute) {\n            if ($attribute['type'] == $id) {\n                $n = count($attribute['value']);\n                switch (true) {\n                    case $disposition == self::ATTR_APPEND:\n                        $last = $key;\n                        break;\n                    case $disposition >= $n:\n                        $disposition -= $n;\n                        break;\n                    default:\n                        $attributes[$key]['value'][$disposition] = $value;\n                        return true;\n                }\n            }\n        }\n\n        switch (true) {\n            case $disposition >= 0:\n                return false;\n            case isset($last):\n                $attributes[$last]['value'][] = $value;\n                break;\n            default:\n                $attributes[] = ['type' => $id, 'value' => $disposition == self::ATTR_ALL ? $value : [$value]];\n                break;\n        }\n\n        return true;\n    }\n\n    /**\n     * Sets the subject key identifier\n     *\n     * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions.\n     *\n     * @param string $value\n     */\n    public function setKeyIdentifier($value)\n    {\n        if (empty($value)) {\n            unset($this->currentKeyIdentifier);\n        } else {\n            $this->currentKeyIdentifier = $value;\n        }\n    }\n\n    /**\n     * Compute a public key identifier.\n     *\n     * Although key identifiers may be set to any unique value, this function\n     * computes key identifiers from public key according to the two\n     * recommended methods (4.2.1.2 RFC 3280).\n     * Highly polymorphic: try to accept all possible forms of key:\n     * - Key object\n     * - \\phpseclib3\\File\\X509 object with public or private key defined\n     * - Certificate or CSR array\n     * - \\phpseclib3\\File\\ASN1\\Element object\n     * - PEM or DER string\n     *\n     * @param mixed $key optional\n     * @param int $method optional\n     * @return string binary key identifier\n     */\n    public function computeKeyIdentifier($key = null, $method = 1)\n    {\n        if (is_null($key)) {\n            $key = $this;\n        }\n\n        switch (true) {\n            case is_string($key):\n                break;\n            case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):\n                return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method);\n            case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):\n                return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method);\n            case !is_object($key):\n                return false;\n            case $key instanceof Element:\n                // Assume the element is a bitstring-packed key.\n                $decoded = ASN1::decodeBER($key->element);\n                if (!$decoded) {\n                    return false;\n                }\n                $raw = ASN1::asn1map($decoded[0], ['type' => ASN1::TYPE_BIT_STRING]);\n                if (empty($raw)) {\n                    return false;\n                }\n                // If the key is private, compute identifier from its corresponding public key.\n                $key = PublicKeyLoader::load($raw);\n                if ($key instanceof PrivateKey) {  // If private.\n                    return $this->computeKeyIdentifier($key, $method);\n                }\n                $key = $raw; // Is a public key.\n                break;\n            case $key instanceof X509:\n                if (isset($key->publicKey)) {\n                    return $this->computeKeyIdentifier($key->publicKey, $method);\n                }\n                if (isset($key->privateKey)) {\n                    return $this->computeKeyIdentifier($key->privateKey, $method);\n                }\n                if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) {\n                    return $this->computeKeyIdentifier($key->currentCert, $method);\n                }\n                return false;\n            default: // Should be a key object (i.e.: \\phpseclib3\\Crypt\\RSA).\n                $key = $key->getPublicKey();\n                break;\n        }\n\n        // If in PEM format, convert to binary.\n        $key = ASN1::extractBER($key);\n\n        // Now we have the key string: compute its sha-1 sum.\n        $hash = new Hash('sha1');\n        $hash = $hash->hash($key);\n\n        if ($method == 2) {\n            $hash = substr($hash, -8);\n            $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40);\n        }\n\n        return $hash;\n    }\n\n    /**\n     * Format a public key as appropriate\n     *\n     * @return array|false\n     */\n    private function formatSubjectPublicKey()\n    {\n        $format = $this->publicKey instanceof RSA && ($this->publicKey->getPadding() & RSA::SIGNATURE_PSS) ?\n            'PSS' :\n            'PKCS8';\n\n        $publicKey = base64_decode(preg_replace('#-.+-|[\\r\\n]#', '', $this->publicKey->toString($format)));\n\n        $decoded = ASN1::decodeBER($publicKey);\n        if (!$decoded) {\n            return false;\n        }\n        $mapped = ASN1::asn1map($decoded[0], Maps\\SubjectPublicKeyInfo::MAP);\n        if (!is_array($mapped)) {\n            return false;\n        }\n\n        $mapped['subjectPublicKey'] = $this->publicKey->toString($format);\n\n        return $mapped;\n    }\n\n    /**\n     * Set the domain name's which the cert is to be valid for\n     *\n     * @param mixed ...$domains\n     * @return void\n     */\n    public function setDomain(...$domains)\n    {\n        $this->domains = $domains;\n        $this->removeDNProp('id-at-commonName');\n        $this->setDNProp('id-at-commonName', $this->domains[0]);\n    }\n\n    /**\n     * Set the IP Addresses's which the cert is to be valid for\n     *\n     * @param mixed[] ...$ipAddresses\n     */\n    public function setIPAddress(...$ipAddresses)\n    {\n        $this->ipAddresses = $ipAddresses;\n        /*\n        if (!isset($this->domains)) {\n            $this->removeDNProp('id-at-commonName');\n            $this->setDNProp('id-at-commonName', $this->ipAddresses[0]);\n        }\n        */\n    }\n\n    /**\n     * Helper function to build domain array\n     *\n     * @param string $domain\n     * @return array\n     */\n    private static function dnsName($domain)\n    {\n        return ['dNSName' => $domain];\n    }\n\n    /**\n     * Helper function to build IP Address array\n     *\n     * (IPv6 is not currently supported)\n     *\n     * @param string $address\n     * @return array\n     */\n    private function iPAddress($address)\n    {\n        return ['iPAddress' => $address];\n    }\n\n    /**\n     * Get the index of a revoked certificate.\n     *\n     * @param array $rclist\n     * @param string $serial\n     * @param bool $create optional\n     * @return int|false\n     */\n    private function revokedCertificate(array &$rclist, $serial, $create = false)\n    {\n        $serial = new BigInteger($serial);\n\n        foreach ($rclist as $i => $rc) {\n            if (!($serial->compare($rc['userCertificate']))) {\n                return $i;\n            }\n        }\n\n        if (!$create) {\n            return false;\n        }\n\n        $i = count($rclist);\n        $revocationDate = new \\DateTimeImmutable('now', new \\DateTimeZone(@date_default_timezone_get()));\n        $rclist[] = ['userCertificate' => $serial,\n                          'revocationDate'  => $this->timeField($revocationDate->format('D, d M Y H:i:s O'))];\n        return $i;\n    }\n\n    /**\n     * Revoke a certificate.\n     *\n     * @param string $serial\n     * @param string $date optional\n     * @return bool\n     */\n    public function revoke($serial, $date = null)\n    {\n        if (isset($this->currentCert['tbsCertList'])) {\n            if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {\n                if ($this->revokedCertificate($rclist, $serial) === false) { // If not yet revoked\n                    if (($i = $this->revokedCertificate($rclist, $serial, true)) !== false) {\n                        if (!empty($date)) {\n                            $rclist[$i]['revocationDate'] = $this->timeField($date);\n                        }\n\n                        return true;\n                    }\n                }\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Unrevoke a certificate.\n     *\n     * @param string $serial\n     * @return bool\n     */\n    public function unrevoke($serial)\n    {\n        if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {\n            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {\n                unset($rclist[$i]);\n                $rclist = array_values($rclist);\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get a revoked certificate.\n     *\n     * @param string $serial\n     * @return mixed\n     */\n    public function getRevoked($serial)\n    {\n        if (is_array($rclist = $this->subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {\n            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {\n                return $rclist[$i];\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * List revoked certificates\n     *\n     * @param array $crl optional\n     * @return array|bool\n     */\n    public function listRevoked($crl = null)\n    {\n        if (!isset($crl)) {\n            $crl = $this->currentCert;\n        }\n\n        if (!isset($crl['tbsCertList'])) {\n            return false;\n        }\n\n        $result = [];\n\n        if (is_array($rclist = $this->subArray($crl, 'tbsCertList/revokedCertificates'))) {\n            foreach ($rclist as $rc) {\n                $result[] = $rc['userCertificate']->toString();\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Remove a Revoked Certificate Extension\n     *\n     * @param string $serial\n     * @param string $id\n     * @return bool\n     */\n    public function removeRevokedCertificateExtension($serial, $id)\n    {\n        if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {\n            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {\n                return $this->removeExtensionHelper($id, \"tbsCertList/revokedCertificates/$i/crlEntryExtensions\");\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get a Revoked Certificate Extension\n     *\n     * Returns the extension if it exists and false if not\n     *\n     * @param string $serial\n     * @param string $id\n     * @param array $crl optional\n     * @return mixed\n     */\n    public function getRevokedCertificateExtension($serial, $id, $crl = null)\n    {\n        if (!isset($crl)) {\n            $crl = $this->currentCert;\n        }\n\n        if (is_array($rclist = $this->subArray($crl, 'tbsCertList/revokedCertificates'))) {\n            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {\n                return $this->getExtension($id, $crl, \"tbsCertList/revokedCertificates/$i/crlEntryExtensions\");\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns a list of all extensions in use for a given revoked certificate\n     *\n     * @param string $serial\n     * @param array $crl optional\n     * @return array|bool\n     */\n    public function getRevokedCertificateExtensions($serial, $crl = null)\n    {\n        if (!isset($crl)) {\n            $crl = $this->currentCert;\n        }\n\n        if (is_array($rclist = $this->subArray($crl, 'tbsCertList/revokedCertificates'))) {\n            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {\n                return $this->getExtensions($crl, \"tbsCertList/revokedCertificates/$i/crlEntryExtensions\");\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Set a Revoked Certificate Extension\n     *\n     * @param string $serial\n     * @param string $id\n     * @param mixed $value\n     * @param bool $critical optional\n     * @param bool $replace optional\n     * @return bool\n     */\n    public function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true)\n    {\n        if (isset($this->currentCert['tbsCertList'])) {\n            if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {\n                if (($i = $this->revokedCertificate($rclist, $serial, true)) !== false) {\n                    return $this->setExtensionHelper($id, $value, $critical, $replace, \"tbsCertList/revokedCertificates/$i/crlEntryExtensions\");\n                }\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Register the mapping for a custom/unsupported extension.\n     *\n     * @param string $id\n     * @param array $mapping\n     */\n    public static function registerExtension($id, array $mapping)\n    {\n        if (isset(self::$extensions[$id]) && self::$extensions[$id] !== $mapping) {\n            throw new \\RuntimeException(\n                'Extension ' . $id . ' has already been defined with a different mapping.'\n            );\n        }\n\n        self::$extensions[$id] = $mapping;\n    }\n\n    /**\n     * Register the mapping for a custom/unsupported extension.\n     *\n     * @param string $id\n     *\n     * @return array|null\n     */\n    public static function getRegisteredExtension($id)\n    {\n        return isset(self::$extensions[$id]) ? self::$extensions[$id] : null;\n    }\n\n    /**\n     * Register the mapping for a custom/unsupported extension.\n     *\n     * @param string $id\n     * @param mixed $value\n     * @param bool $critical\n     * @param bool $replace\n     */\n    public function setExtensionValue($id, $value, $critical = false, $replace = false)\n    {\n        $this->extensionValues[$id] = compact('critical', 'replace', 'value');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Base.php",
    "content": "<?php\n\n/**\n * Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\n\n/**\n * Sliding Window Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Base extends BCMath\n{\n    /**\n     * Cache constants\n     *\n     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.\n     *\n     */\n    const VARIABLE = 0;\n    /**\n     * $cache[self::DATA] contains the cached data.\n     *\n     */\n    const DATA = 1;\n\n    /**\n     * Test for engine validity\n     *\n     * @return bool\n     */\n    public static function isValidEngine()\n    {\n        return static::class != __CLASS__;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param BCMath $x\n     * @param BCMath $e\n     * @param BCMath $n\n     * @param string $class\n     * @return BCMath\n     */\n    protected static function powModHelper(BCMath $x, BCMath $e, BCMath $n, $class)\n    {\n        if (empty($e->value)) {\n            $temp = new $class();\n            $temp->value = '1';\n            return $x->normalize($temp);\n        }\n\n        return $x->normalize(static::slidingWindow($x, $e, $n, $class));\n    }\n\n    /**\n     * Modular reduction preparation\n     *\n     * @param string $x\n     * @param string $n\n     * @param string $class\n     * @see self::slidingWindow()\n     * @return string\n     */\n    protected static function prepareReduce($x, $n, $class)\n    {\n        return static::reduce($x, $n);\n    }\n\n    /**\n     * Modular multiply\n     *\n     * @param string $x\n     * @param string $y\n     * @param string $n\n     * @param string $class\n     * @see self::slidingWindow()\n     * @return string\n     */\n    protected static function multiplyReduce($x, $y, $n, $class)\n    {\n        return static::reduce(bcmul($x, $y, 0), $n);\n    }\n\n    /**\n     * Modular square\n     *\n     * @param string $x\n     * @param string $n\n     * @param string $class\n     * @see self::slidingWindow()\n     * @return string\n     */\n    protected static function squareReduce($x, $n, $class)\n    {\n        return static::reduce(bcmul($x, $x, 0), $n);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/BuiltIn.php",
    "content": "<?php\n\n/**\n * Built-In BCMath Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\n\n/**\n * Built-In BCMath Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class BuiltIn extends BCMath\n{\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param BCMath $x\n     * @param BCMath $e\n     * @param BCMath $n\n     * @return BCMath\n     */\n    protected static function powModHelper(BCMath $x, BCMath $e, BCMath $n)\n    {\n        $temp = new BCMath();\n        $temp->value = bcpowmod($x->value, $e->value, $n->value, 0);\n\n        return $x->normalize($temp);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/DefaultEngine.php",
    "content": "<?php\n\n/**\n * BCMath Default Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\BCMath\\Reductions\\Barrett;\n\n/**\n * PHP Default Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DefaultEngine extends Barrett\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/OpenSSL.php",
    "content": "<?php\n\n/**\n * OpenSSL Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\OpenSSL as Progenitor;\n\n/**\n * OpenSSL Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSL extends Progenitor\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/Barrett.php",
    "content": "<?php\n\n/**\n * BCMath Barrett Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\BCMath\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\BCMath\\Base;\n\n/**\n * PHP Barrett Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Barrett extends Base\n{\n    /**\n     * Cache constants\n     *\n     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.\n     *\n     */\n    const VARIABLE = 0;\n    /**\n     * $cache[self::DATA] contains the cached data.\n     *\n     */\n    const DATA = 1;\n\n    /**\n     * Barrett Modular Reduction\n     *\n     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information.  Modified slightly,\n     * so as not to require negative numbers (initially, this script didn't support negative numbers).\n     *\n     * Employs \"folding\", as described at\n     * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}.  To quote from\n     * it, \"the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x.\"\n     *\n     * Unfortunately, the \"Barrett Reduction with Folding\" algorithm described in thesis-149.pdf is not, as written, all that\n     * usable on account of (1) its not using reasonable radix points as discussed in\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable\n     * radix points, it only works when there are an even number of digits in the denominator.  The reason for (2) is that\n     * (x >> 1) + (x >> 1) != x / 2 + x / 2.  If x is even, they're the same, but if x is odd, they're not.  See the in-line\n     * comments for details.\n     *\n     * @param string $n\n     * @param string $m\n     * @return string\n     */\n    protected static function reduce($n, $m)\n    {\n        static $cache = [\n            self::VARIABLE => [],\n            self::DATA => []\n        ];\n\n        $m_length = strlen($m);\n\n        if (strlen($n) > 2 * $m_length) {\n            return self::BCMOD_THREE_PARAMS ? bcmod($n, $m, 0) : bcmod($n, $m);\n        }\n\n        // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced\n        if ($m_length < 5) {\n            return self::regularBarrett($n, $m);\n        }\n        // n = 2 * m.length\n        $correctionNeeded = false;\n        if ($m_length & 1) {\n            $correctionNeeded = true;\n            $n .= '0';\n            $m .= '0';\n            $m_length++;\n        }\n\n        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {\n            $key = count($cache[self::VARIABLE]);\n            $cache[self::VARIABLE][] = $m;\n\n            $lhs = '1' . str_repeat('0', $m_length + ($m_length >> 1));\n            $u = bcdiv($lhs, $m, 0);\n            $m1 = bcsub($lhs, bcmul($u, $m, 0), 0);\n\n            $cache[self::DATA][] = [\n                'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)\n                'm1' => $m1 // m.length\n            ];\n        } else {\n            $cacheValues = $cache[self::DATA][$key];\n            $u = $cacheValues['u'];\n            $m1 = $cacheValues['m1'];\n        }\n\n        $cutoff = $m_length + ($m_length >> 1);\n\n        $lsd = substr($n, -$cutoff);\n        $msd = substr($n, 0, -$cutoff);\n\n        $temp = bcmul($msd, $m1, 0); // m.length + (m.length >> 1)\n        $n = bcadd($lsd, $temp, 0); // m.length + (m.length >> 1) + 1 (so basically we're adding two same length numbers)\n        //if ($m_length & 1) {\n        //    return self::regularBarrett($n, $m);\n        //}\n\n        // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2\n        $temp = substr($n, 0, -$m_length + 1);\n        // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2\n        // if odd:  ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1\n        $temp = bcmul($temp, $u, 0);\n        // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1\n        // if odd:  (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)\n        $temp = substr($temp, 0, -($m_length >> 1) - 1);\n        // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1\n        // if odd:  (m.length - (m.length >> 1)) + m.length     = 2 * m.length - (m.length >> 1)\n        $temp = bcmul($temp, $m, 0);\n\n        // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit\n        // number from a m.length + (m.length >> 1) + 1 digit number.  ie. there'd be an extra digit and the while loop\n        // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).\n\n        $result = bcsub($n, $temp, 0);\n\n        //if (bccomp($result, '0') < 0) {\n        if ($result[0] == '-') {\n            $temp = '1' . str_repeat('0', $m_length + 1);\n            $result = bcadd($result, $temp, 0);\n        }\n\n        while (bccomp($result, $m, 0) >= 0) {\n            $result = bcsub($result, $m, 0);\n        }\n\n        return $correctionNeeded && $result != '0' ? substr($result, 0, -1) : $result;\n    }\n\n    /**\n     * (Regular) Barrett Modular Reduction\n     *\n     * For numbers with more than four digits BigInteger::_barrett() is faster.  The difference between that and this\n     * is that this function does not fold the denominator into a smaller form.\n     *\n     * @param string $x\n     * @param string $n\n     * @return string\n     */\n    private static function regularBarrett($x, $n)\n    {\n        static $cache = [\n            self::VARIABLE => [],\n            self::DATA => []\n        ];\n\n        $n_length = strlen($n);\n\n        if (strlen($x) > 2 * $n_length) {\n            return self::BCMOD_THREE_PARAMS ? bcmod($x, $n, 0) : bcmod($x, $n);\n        }\n\n        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {\n            $key = count($cache[self::VARIABLE]);\n            $cache[self::VARIABLE][] = $n;\n            $lhs = '1' . str_repeat('0', 2 * $n_length);\n            $cache[self::DATA][] = bcdiv($lhs, $n, 0);\n        }\n\n        $temp = substr($x, 0, -$n_length + 1);\n        $temp = bcmul($temp, $cache[self::DATA][$key], 0);\n        $temp = substr($temp, 0, -$n_length - 1);\n\n        $r1 = substr($x, -$n_length - 1);\n        $r2 = substr(bcmul($temp, $n, 0), -$n_length - 1);\n        $result = bcsub($r1, $r2);\n\n        //if (bccomp($result, '0') < 0) {\n        if ($result[0] == '-') {\n            $q = '1' . str_repeat('0', $n_length + 1);\n            $result = bcadd($result, $q, 0);\n        }\n\n        while (bccomp($result, $n, 0) >= 0) {\n            $result = bcsub($result, $n, 0);\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/EvalBarrett.php",
    "content": "<?php\n\n/**\n * BCMath Dynamic Barrett Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\BCMath\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\BCMath;\nuse phpseclib3\\Math\\BigInteger\\Engines\\BCMath\\Base;\n\n/**\n * PHP Barrett Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EvalBarrett extends Base\n{\n    /**\n     * Custom Reduction Function\n     *\n     * @see self::generateCustomReduction\n     */\n    private static $custom_reduction;\n\n    /**\n     * Barrett Modular Reduction\n     *\n     * This calls a dynamically generated loop unrolled function that's specific to a given modulo.\n     * Array lookups are avoided as are if statements testing for how many bits the host OS supports, etc.\n     *\n     * @param string $n\n     * @param string $m\n     * @return string\n     */\n    protected static function reduce($n, $m)\n    {\n        $inline = self::$custom_reduction;\n        return $inline($n);\n    }\n\n    /**\n     * Generate Custom Reduction\n     *\n     * @param BCMath $m\n     * @param string $class\n     * @return callable|void\n     */\n    protected static function generateCustomReduction(BCMath $m, $class)\n    {\n        $m_length = strlen($m);\n\n        if ($m_length < 5) {\n            $code = 'return self::BCMOD_THREE_PARAMS ? bcmod($x, $n, 0) : bcmod($x, $n);';\n            eval('$func = function ($n) { ' . $code . '};');\n            self::$custom_reduction = $func;\n            return;\n        }\n\n        $lhs = '1' . str_repeat('0', $m_length + ($m_length >> 1));\n        $u = bcdiv($lhs, $m, 0);\n        $m1 = bcsub($lhs, bcmul($u, $m, 0), 0);\n\n        $cutoff = $m_length + ($m_length >> 1);\n\n        $m = \"'$m'\";\n        $u = \"'$u'\";\n        $m1 = \"'$m1'\";\n\n        $code = '\n            $lsd = substr($n, -' . $cutoff . ');\n            $msd = substr($n, 0, -' . $cutoff . ');\n\n            $temp = bcmul($msd, ' . $m1 . ', 0);\n            $n = bcadd($lsd, $temp, 0);\n\n            $temp = substr($n, 0, ' . (-$m_length + 1) . ');\n            $temp = bcmul($temp, ' . $u . ', 0);\n            $temp = substr($temp, 0, ' . (-($m_length >> 1) - 1) . ');\n            $temp = bcmul($temp, ' . $m . ', 0);\n\n            $result = bcsub($n, $temp, 0);\n\n            if ($result[0] == \\'-\\') {\n                $temp = \\'1' . str_repeat('0', $m_length + 1) . '\\';\n                $result = bcadd($result, $temp, 0);\n            }\n\n            while (bccomp($result, ' . $m . ') >= 0) {\n                $result = bcsub($result, ' . $m . ', 0);\n            }\n\n            return $result;';\n\n        eval('$func = function ($n) { ' . $code . '};');\n\n        self::$custom_reduction = $func;\n\n        return $func;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php",
    "content": "<?php\n\n/**\n * BCMath BigInteger Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\BadConfigurationException;\n\n/**\n * BCMath Engine.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass BCMath extends Engine\n{\n    /**\n     * Can Bitwise operations be done fast?\n     *\n     * @see parent::bitwise_leftRotate()\n     * @see parent::bitwise_rightRotate()\n     */\n    const FAST_BITWISE = false;\n\n    /**\n     * Engine Directory\n     *\n     * @see parent::setModExpEngine\n     */\n    const ENGINE_DIR = 'BCMath';\n\n    /**\n     * Test to see if bcmod() accepts 2 or 3 parameters\n     */\n    const BCMOD_THREE_PARAMS = PHP_VERSION_ID >= 72000;\n\n    /**\n     * Test for engine validity\n     *\n     * @return bool\n     * @see parent::__construct()\n     */\n    public static function isValidEngine()\n    {\n        return extension_loaded('bcmath');\n    }\n\n    /**\n     * Default constructor\n     *\n     * @param mixed $x integer Base-10 number or base-$base number if $base set.\n     * @param int $base\n     * @see parent::__construct()\n     */\n    public function __construct($x = 0, $base = 10)\n    {\n        if (!isset(static::$isValidEngine[static::class])) {\n            static::$isValidEngine[static::class] = self::isValidEngine();\n        }\n        if (!static::$isValidEngine[static::class]) {\n            throw new BadConfigurationException('BCMath is not setup correctly on this system');\n        }\n\n        $this->value = '0';\n\n        parent::__construct($x, $base);\n    }\n\n    /**\n     * Initialize a BCMath BigInteger Engine instance\n     *\n     * @param int $base\n     * @see parent::__construct()\n     */\n    protected function initialize($base)\n    {\n        switch (abs($base)) {\n            case 256:\n                // round $len to the nearest 4\n                $len = (strlen($this->value) + 3) & ~3;\n\n                $x = str_pad($this->value, $len, chr(0), STR_PAD_LEFT);\n\n                $this->value = '0';\n                for ($i = 0; $i < $len; $i += 4) {\n                    $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32\n                    $this->value = bcadd(\n                        $this->value,\n                        0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord(\n                            $x[$i + 2]\n                        ) << 8) | ord($x[$i + 3])),\n                        0\n                    );\n                }\n\n                if ($this->is_negative) {\n                    $this->value = '-' . $this->value;\n                }\n                break;\n            case 16:\n                $x = (strlen($this->value) & 1) ? '0' . $this->value : $this->value;\n                $temp = new self(Strings::hex2bin($x), 256);\n                $this->value = $this->is_negative ? '-' . $temp->value : $temp->value;\n                $this->is_negative = false;\n                break;\n            case 10:\n                // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different\n                // results then doing it on '-1' does (modInverse does $x[0])\n                $this->value = $this->value === '-' ? '0' : (string)$this->value;\n        }\n    }\n\n    /**\n     * Converts a BigInteger to a base-10 number.\n     *\n     * @return string\n     */\n    public function toString()\n    {\n        if ($this->value === '0') {\n            return '0';\n        }\n\n        return ltrim($this->value, '0');\n    }\n\n    /**\n     * Converts a BigInteger to a byte string (eg. base-256).\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBytes($twos_compliment = false)\n    {\n        if ($twos_compliment) {\n            return $this->toBytesHelper();\n        }\n\n        $value = '';\n        $current = $this->value;\n\n        if ($current[0] == '-') {\n            $current = substr($current, 1);\n        }\n\n        while (bccomp($current, '0', 0) > 0) {\n            $temp = self::BCMOD_THREE_PARAMS ? bcmod($current, '16777216', 0) : bcmod($current, '16777216');\n            $value = chr($temp >> 16) . chr(($temp >> 8) & 0xFF) . chr($temp & 0xFF) . $value;\n            $current = bcdiv($current, '16777216', 0);\n        }\n\n        return $this->precision > 0 ?\n            substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :\n            ltrim($value, chr(0));\n    }\n\n    /**\n     * Adds two BigIntegers.\n     *\n     * @param BCMath $y\n     * @return BCMath\n     */\n    public function add(BCMath $y)\n    {\n        $temp = new self();\n        $temp->value = bcadd($this->value, $y->value, 0);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Subtracts two BigIntegers.\n     *\n     * @param BCMath $y\n     * @return BCMath\n     */\n    public function subtract(BCMath $y)\n    {\n        $temp = new self();\n        $temp->value = bcsub($this->value, $y->value, 0);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Multiplies two BigIntegers.\n     *\n     * @param BCMath $x\n     * @return BCMath\n     */\n    public function multiply(BCMath $x)\n    {\n        $temp = new self();\n        $temp->value = bcmul($this->value, $x->value, 0);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Divides two BigIntegers.\n     *\n     * Returns an array whose first element contains the quotient and whose second element contains the\n     * \"common residue\".  If the remainder would be positive, the \"common residue\" and the remainder are the\n     * same.  If the remainder would be negative, the \"common residue\" is equal to the sum of the remainder\n     * and the divisor (basically, the \"common residue\" is the first positive modulo).\n     *\n     * @param BCMath $y\n     * @return array{static, static}\n     */\n    public function divide(BCMath $y)\n    {\n        $quotient = new self();\n        $remainder = new self();\n\n        $quotient->value = bcdiv($this->value, $y->value, 0);\n        $remainder->value = self::BCMOD_THREE_PARAMS ? bcmod($this->value, $y->value, 0) : bcmod($this->value, $y->value);\n\n        if ($remainder->value[0] == '-') {\n            $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0);\n        }\n\n        return [$this->normalize($quotient), $this->normalize($remainder)];\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     *\n     * @param BCMath $n\n     * @return false|BCMath\n     */\n    public function modInverse(BCMath $n)\n    {\n        return $this->modInverseHelper($n);\n    }\n\n    /**\n     * Calculates the greatest common divisor and Bezout's identity.\n     *\n     * Say you have 693 and 609.  The GCD is 21.  Bezout's identity states that there exist integers x and y such that\n     * 693*x + 609*y == 21.  In point of fact, there are actually an infinite number of x and y combinations and which\n     * combination is returned is dependent upon which mode is in use.  See\n     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information.\n     *\n     * @param BCMath $n\n     * @return array{gcd: static, x: static, y: static}\n     */\n    public function extendedGCD(BCMath $n)\n    {\n        // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works\n        // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway.  as is,\n        // the basic extended euclidean algorithim is what we're using.\n\n        $u = $this->value;\n        $v = $n->value;\n\n        $a = '1';\n        $b = '0';\n        $c = '0';\n        $d = '1';\n\n        while (bccomp($v, '0', 0) != 0) {\n            $q = bcdiv($u, $v, 0);\n\n            $temp = $u;\n            $u = $v;\n            $v = bcsub($temp, bcmul($v, $q, 0), 0);\n\n            $temp = $a;\n            $a = $c;\n            $c = bcsub($temp, bcmul($a, $q, 0), 0);\n\n            $temp = $b;\n            $b = $d;\n            $d = bcsub($temp, bcmul($b, $q, 0), 0);\n        }\n\n        return [\n            'gcd' => $this->normalize(new static($u)),\n            'x' => $this->normalize(new static($a)),\n            'y' => $this->normalize(new static($b))\n        ];\n    }\n\n    /**\n     * Calculates the greatest common divisor\n     *\n     * Say you have 693 and 609.  The GCD is 21.\n     *\n     * @param BCMath $n\n     * @return BCMath\n     */\n    public function gcd(BCMath $n)\n    {\n        $gcd = $this->extendedGCD($n)['gcd'];\n        return $gcd;\n    }\n\n    /**\n     * Absolute value.\n     *\n     * @return BCMath\n     */\n    public function abs()\n    {\n        $temp = new static();\n        $temp->value = strlen($this->value) && $this->value[0] == '-' ?\n            substr($this->value, 1) :\n            $this->value;\n\n        return $temp;\n    }\n\n    /**\n     * Logical And\n     *\n     * @param BCMath $x\n     * @return BCMath\n     */\n    public function bitwise_and(BCMath $x)\n    {\n        return $this->bitwiseAndHelper($x);\n    }\n\n    /**\n     * Logical Or\n     *\n     * @param BCMath $x\n     * @return BCMath\n     */\n    public function bitwise_or(BCMath $x)\n    {\n        return $this->bitwiseOrHelper($x);\n    }\n\n    /**\n     * Logical Exclusive Or\n     *\n     * @param BCMath $x\n     * @return BCMath\n     */\n    public function bitwise_xor(BCMath $x)\n    {\n        return $this->bitwiseXorHelper($x);\n    }\n\n    /**\n     * Logical Right Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.\n     *\n     * @param int $shift\n     * @return BCMath\n     */\n    public function bitwise_rightShift($shift)\n    {\n        $temp = new static();\n        $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Logical Left Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.\n     *\n     * @param int $shift\n     * @return BCMath\n     */\n    public function bitwise_leftShift($shift)\n    {\n        $temp = new static();\n        $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this\n     * is demonstrated thusly:\n     *\n     * $x  > $y: $x->compare($y)  > 0\n     * $x  < $y: $x->compare($y)  < 0\n     * $x == $y: $x->compare($y) == 0\n     *\n     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).\n     *\n     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}\n     *\n     * @param BCMath $y\n     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.\n     * @see self::equals()\n     */\n    public function compare(BCMath $y)\n    {\n        return bccomp($this->value, $y->value, 0);\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()\n     *\n     * @param BCMath $x\n     * @return bool\n     */\n    public function equals(BCMath $x)\n    {\n        return $this->value == $x->value;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param BCMath $e\n     * @param BCMath $n\n     * @return BCMath\n     */\n    public function modPow(BCMath $e, BCMath $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * Alias for modPow().\n     *\n     * @param BCMath $e\n     * @param BCMath $n\n     * @return BCMath\n     */\n    public function powMod(BCMath $e, BCMath $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param BCMath $e\n     * @param BCMath $n\n     * @return BCMath\n     */\n    protected function powModInner(BCMath $e, BCMath $n)\n    {\n        try {\n            $class = static::$modexpEngine[static::class];\n            return $class::powModHelper($this, $e, $n, static::class);\n        } catch (\\Exception $err) {\n            return BCMath\\DefaultEngine::powModHelper($this, $e, $n, static::class);\n        }\n    }\n\n    /**\n     * Normalize\n     *\n     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision\n     *\n     * @param BCMath $result\n     * @return BCMath\n     */\n    protected function normalize(BCMath $result)\n    {\n        $result->precision = $this->precision;\n        $result->bitmask = $this->bitmask;\n\n        if ($result->bitmask !== false) {\n            $result->value = self::BCMOD_THREE_PARAMS ? bcmod($result->value, $result->bitmask->value, 0) : bcmod($result->value, $result->bitmask->value);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Generate a random prime number between a range\n     *\n     * If there's not a prime within the given range, false will be returned.\n     *\n     * @param BCMath $min\n     * @param BCMath $max\n     * @return false|BCMath\n     */\n    public static function randomRangePrime(BCMath $min, BCMath $max)\n    {\n        return self::randomRangePrimeOuter($min, $max);\n    }\n\n    /**\n     * Generate a random number between a range\n     *\n     * Returns a random number between $min and $max where $min and $max\n     * can be defined using one of the two methods:\n     *\n     * BigInteger::randomRange($min, $max)\n     * BigInteger::randomRange($max, $min)\n     *\n     * @param BCMath $min\n     * @param BCMath $max\n     * @return BCMath\n     */\n    public static function randomRange(BCMath $min, BCMath $max)\n    {\n        return self::randomRangeHelper($min, $max);\n    }\n\n    /**\n     * Make the current number odd\n     *\n     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.\n     *\n     * @see self::randomPrime()\n     */\n    protected function make_odd()\n    {\n        if (!$this->isOdd()) {\n            $this->value = bcadd($this->value, '1', 0);\n        }\n    }\n\n    /**\n     * Test the number against small primes.\n     *\n     * @see self::isPrime()\n     */\n    protected function testSmallPrimes()\n    {\n        if ($this->value === '1') {\n            return false;\n        }\n        if ($this->value === '2') {\n            return true;\n        }\n        if ($this->value[strlen($this->value) - 1] % 2 == 0) {\n            return false;\n        }\n\n        $value = $this->value;\n\n        foreach (self::PRIMES as $prime) {\n            $r = self::BCMOD_THREE_PARAMS ? bcmod($this->value, $prime, 0) : bcmod($this->value, $prime);\n            if ($r == '0') {\n                return $this->value == $prime;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Scan for 1 and right shift by that amount\n     *\n     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));\n     *\n     * @param BCMath $r\n     * @return int\n     * @see self::isPrime()\n     */\n    public static function scan1divide(BCMath $r)\n    {\n        $r_value = &$r->value;\n        $s = 0;\n        // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals(static::$one[static::class]) check earlier\n        while ($r_value[strlen($r_value) - 1] % 2 == 0) {\n            $r_value = bcdiv($r_value, '2', 0);\n            ++$s;\n        }\n\n        return $s;\n    }\n\n    /**\n     * Performs exponentiation.\n     *\n     * @param BCMath $n\n     * @return BCMath\n     */\n    public function pow(BCMath $n)\n    {\n        $temp = new self();\n        $temp->value = bcpow($this->value, $n->value, 0);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param BCMath ...$nums\n     * @return BCMath\n     */\n    public static function min(BCMath ...$nums)\n    {\n        return self::minHelper($nums);\n    }\n\n    /**\n     * Return the maximum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param BCMath ...$nums\n     * @return BCMath\n     */\n    public static function max(BCMath ...$nums)\n    {\n        return self::maxHelper($nums);\n    }\n\n    /**\n     * Tests BigInteger to see if it is between two integers, inclusive\n     *\n     * @param BCMath $min\n     * @param BCMath $max\n     * @return bool\n     */\n    public function between(BCMath $min, BCMath $max)\n    {\n        return $this->compare($min) >= 0 && $this->compare($max) <= 0;\n    }\n\n    /**\n     * Set Bitmask\n     *\n     * @param int $bits\n     * @return Engine\n     * @see self::setPrecision()\n     */\n    protected static function setBitmask($bits)\n    {\n        $temp = parent::setBitmask($bits);\n        return $temp->add(static::$one[static::class]);\n    }\n\n    /**\n     * Is Odd?\n     *\n     * @return bool\n     */\n    public function isOdd()\n    {\n        return $this->value[strlen($this->value) - 1] % 2 == 1;\n    }\n\n    /**\n     * Tests if a bit is set\n     *\n     * @return bool\n     */\n    public function testBit($x)\n    {\n        $divisor = bcpow('2', $x + 1, 0);\n        return bccomp(\n            self::BCMOD_THREE_PARAMS ? bcmod($this->value, $divisor, 0) : bcmod($this->value, $divisor),\n            bcpow('2', $x, 0),\n            0\n        ) >= 0;\n    }\n\n    /**\n     * Is Negative?\n     *\n     * @return bool\n     */\n    public function isNegative()\n    {\n        return strlen($this->value) && $this->value[0] == '-';\n    }\n\n    /**\n     * Negate\n     *\n     * Given $k, returns -$k\n     *\n     * @return BCMath\n     */\n    public function negate()\n    {\n        $temp = clone $this;\n\n        if (!strlen($temp->value)) {\n            return $temp;\n        }\n\n        $temp->value = $temp->value[0] == '-' ?\n            substr($this->value, 1) :\n            '-' . $this->value;\n\n        return $temp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.php",
    "content": "<?php\n\n/**\n * Base BigInteger Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Exception\\BadConfigurationException;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * Base Engine.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Engine implements \\JsonSerializable\n{\n    /* final protected */ const PRIMES = [\n        3,   5,   7,   11,  13,  17,  19,  23,  29,  31,  37,  41,  43,  47,  53,  59,\n        61,  67,  71,  73,  79,  83,  89,  97,  101, 103, 107, 109, 113, 127, 131, 137,\n        139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227,\n        229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,\n        317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,\n        421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509,\n        521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617,\n        619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727,\n        733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,\n        839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947,\n        953, 967, 971, 977, 983, 991, 997,\n    ];\n\n    /**\n     * BigInteger(0)\n     *\n     * @var array<class-string<static>, static>\n     */\n    protected static $zero = [];\n\n    /**\n     * BigInteger(1)\n     *\n     * @var array<class-string<static>, static>\n     */\n    protected static $one  = [];\n\n    /**\n     * BigInteger(2)\n     *\n     * @var array<class-string<static>, static>\n     */\n    protected static $two = [];\n\n    /**\n     * Modular Exponentiation Engine\n     *\n     * @var array<class-string<static>, class-string<static>>\n     */\n    protected static $modexpEngine;\n\n    /**\n     * Engine Validity Flag\n     *\n     * @var array<class-string<static>, bool>\n     */\n    protected static $isValidEngine;\n\n    /**\n     * Holds the BigInteger's value\n     *\n     * @var \\GMP|string|array|int\n     */\n    protected $value;\n\n    /**\n     * Holds the BigInteger's sign\n     *\n     * @var bool\n     */\n    protected $is_negative;\n\n    /**\n     * Precision\n     *\n     * @see static::setPrecision()\n     * @var int\n     */\n    protected $precision = -1;\n\n    /**\n     * Precision Bitmask\n     *\n     * @see static::setPrecision()\n     * @var static|false\n     */\n    protected $bitmask = false;\n\n    /**\n     * Recurring Modulo Function\n     *\n     * @var callable\n     */\n    protected $reduce;\n\n    /**\n     * Mode independent value used for serialization.\n     *\n     * @see self::__sleep()\n     * @see self::__wakeup()\n     * @var string\n     */\n    protected $hex;\n\n    /**\n     * Default constructor\n     *\n     * @param int|numeric-string $x integer Base-10 number or base-$base number if $base set.\n     * @param int $base\n     */\n    public function __construct($x = 0, $base = 10)\n    {\n        if (!array_key_exists(static::class, static::$zero)) {\n            static::$zero[static::class] = null; // Placeholder to prevent infinite loop.\n            static::$zero[static::class] = new static(0);\n            static::$one[static::class] = new static(1);\n            static::$two[static::class] = new static(2);\n        }\n\n        // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48\n        // '0' is the only value like this per http://php.net/empty\n        if (empty($x) && (abs($base) != 256 || $x !== '0')) {\n            return;\n        }\n\n        switch ($base) {\n            case -256:\n            case 256:\n                if ($base == -256 && (ord($x[0]) & 0x80)) {\n                    $this->value = ~$x;\n                    $this->is_negative = true;\n                } else {\n                    $this->value = $x;\n                    $this->is_negative = false;\n                }\n\n                $this->initialize($base);\n\n                if ($this->is_negative) {\n                    $temp = $this->add(new static('-1'));\n                    $this->value = $temp->value;\n                }\n                break;\n            case -16:\n            case 16:\n                if ($base > 0 && $x[0] == '-') {\n                    $this->is_negative = true;\n                    $x = substr($x, 1);\n                }\n\n                $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#s', '$1', $x);\n\n                $is_negative = false;\n                if ($base < 0 && hexdec($x[0]) >= 8) {\n                    $this->is_negative = $is_negative = true;\n                    $x = Strings::bin2hex(~Strings::hex2bin($x));\n                }\n\n                $this->value = $x;\n                $this->initialize($base);\n\n                if ($is_negative) {\n                    $temp = $this->add(new static('-1'));\n                    $this->value = $temp->value;\n                }\n                break;\n            case -10:\n            case 10:\n                // (?<!^)(?:-).*: find any -'s that aren't at the beginning and then any characters that follow that\n                // (?<=^|-)0*: find any 0's that are preceded by the start of the string or by a - (ie. octals)\n                // [^-0-9].*: find any non-numeric characters and then any characters that follow that\n                $this->value = preg_replace('#(?<!^)(?:-).*|(?<=^|-)0*|[^-0-9].*#s', '', $x);\n                if (!strlen($this->value) || $this->value == '-') {\n                    $this->value = '0';\n                }\n                $this->initialize($base);\n                break;\n            case -2:\n            case 2:\n                if ($base > 0 && $x[0] == '-') {\n                    $this->is_negative = true;\n                    $x = substr($x, 1);\n                }\n\n                $x = preg_replace('#^([01]*).*#s', '$1', $x);\n\n                $temp = new static(Strings::bits2bin($x), 128 * $base); // ie. either -16 or +16\n                $this->value = $temp->value;\n                if ($temp->is_negative) {\n                    $this->is_negative = true;\n                }\n\n                break;\n            default:\n                // base not supported, so we'll let $this == 0\n        }\n    }\n\n    /**\n     * Sets engine type.\n     *\n     * Throws an exception if the type is invalid\n     *\n     * @param class-string<Engine> $engine\n     */\n    public static function setModExpEngine($engine)\n    {\n        $fqengine = '\\\\phpseclib3\\\\Math\\\\BigInteger\\\\Engines\\\\' . static::ENGINE_DIR . '\\\\' . $engine;\n        if (!class_exists($fqengine) || !method_exists($fqengine, 'isValidEngine')) {\n            throw new \\InvalidArgumentException(\"$engine is not a valid engine\");\n        }\n        if (!$fqengine::isValidEngine()) {\n            throw new BadConfigurationException(\"$engine is not setup correctly on this system\");\n        }\n        static::$modexpEngine[static::class] = $fqengine;\n    }\n\n    /**\n     * Converts a BigInteger to a byte string (eg. base-256).\n     *\n     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're\n     * saved as two's compliment.\n     * @return string\n     */\n    protected function toBytesHelper()\n    {\n        $comparison = $this->compare(new static());\n        if ($comparison == 0) {\n            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';\n        }\n\n        $temp = $comparison < 0 ? $this->add(new static(1)) : $this;\n        $bytes = $temp->toBytes();\n\n        if (!strlen($bytes)) { // eg. if the number we're trying to convert is -1\n            $bytes = chr(0);\n        }\n\n        if (ord($bytes[0]) & 0x80) {\n            $bytes = chr(0) . $bytes;\n        }\n\n        return $comparison < 0 ? ~$bytes : $bytes;\n    }\n\n    /**\n     * Converts a BigInteger to a hex string (eg. base-16).\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toHex($twos_compliment = false)\n    {\n        return Strings::bin2hex($this->toBytes($twos_compliment));\n    }\n\n    /**\n     * Converts a BigInteger to a bit string (eg. base-2).\n     *\n     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're\n     * saved as two's compliment.\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBits($twos_compliment = false)\n    {\n        $hex = $this->toBytes($twos_compliment);\n        $bits = Strings::bin2bits($hex);\n\n        $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');\n\n        if ($twos_compliment && $this->compare(new static()) > 0 && $this->precision <= 0) {\n            return '0' . $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     *\n     * {@internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information.}\n     *\n     * @param Engine $n\n     * @return static|false\n     */\n    protected function modInverseHelper(Engine $n)\n    {\n        // $x mod -$n == $x mod $n.\n        $n = $n->abs();\n\n        if ($this->compare(static::$zero[static::class]) < 0) {\n            $temp = $this->abs();\n            $temp = $temp->modInverse($n);\n            return $this->normalize($n->subtract($temp));\n        }\n\n        $extended = $this->extendedGCD($n);\n        $gcd = $extended['gcd'];\n        $x = $extended['x'];\n\n        if (!$gcd->equals(static::$one[static::class])) {\n            return false;\n        }\n\n        $x = $x->compare(static::$zero[static::class]) < 0 ? $x->add($n) : $x;\n\n        return $this->compare(static::$zero[static::class]) < 0 ? $this->normalize($n->subtract($x)) : $this->normalize($x);\n    }\n\n    /**\n     * Serialize\n     *\n     * Will be called, automatically, when serialize() is called on a BigInteger object.\n     *\n     * @return array\n     */\n    public function __sleep()\n    {\n        $this->hex = $this->toHex(true);\n        $vars = ['hex'];\n        if ($this->precision > 0) {\n            $vars[] = 'precision';\n        }\n        return $vars;\n    }\n\n    /**\n     * Serialize\n     *\n     * Will be called, automatically, when unserialize() is called on a BigInteger object.\n     *\n     * @return void\n     */\n    public function __wakeup()\n    {\n        $temp = new static($this->hex, -16);\n        $this->value = $temp->value;\n        $this->is_negative = $temp->is_negative;\n        if ($this->precision > 0) {\n            // recalculate $this->bitmask\n            $this->setPrecision($this->precision);\n        }\n    }\n\n    /**\n     *  __serialize() magic method\n     *\n     * __sleep / __wakeup were depreciated in PHP 8.5\n     * Will be called, automatically, when serialize() is called on a Math_BigInteger object.\n     *\n     * @see self::__unserialize()\n     * @access public\n     */\n    public function __serialize()\n    {\n        $result = ['hex' => $this->toHex(true)];\n        if ($this->precision > 0) {\n            $result['precision'] = $this->precision;\n        }\n        return $result;\n    }\n\n    /**\n     *  __unserialize() magic method\n     *\n     * __sleep / __wakeup were depreciated in PHP 8.5\n     * Will be called, automatically, when unserialize() is called on a Math_BigInteger object.\n     *\n     * @see self::__serialize()\n     * @access public\n     */\n    public function __unserialize(array $data)\n    {\n        $temp = new static($data['hex'], -16);\n        $this->value = $temp->value;\n        $this->is_negative = $temp->is_negative;\n        if (isset($data['precision']) && $data['precision'] > 0) {\n            // recalculate $this->bitmask\n            $this->setPrecision($data['precision']);\n        }\n    }\n\n    /**\n     * JSON Serialize\n     *\n     * Will be called, automatically, when json_encode() is called on a BigInteger object.\n     *\n     * @return array{hex: string, precision?: int]\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        $result = ['hex' => $this->toHex(true)];\n        if ($this->precision > 0) {\n            $result['precision'] = $this->precision;\n        }\n        return $result;\n    }\n\n    /**\n     * Converts a BigInteger to a base-10 number.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->toString();\n    }\n\n    /**\n     *  __debugInfo() magic method\n     *\n     * Will be called, automatically, when print_r() or var_dump() are called\n     *\n     * @return array\n     */\n    public function __debugInfo()\n    {\n        $result = [\n            'value' => '0x' . $this->toHex(true),\n            'engine' => basename(static::class)\n        ];\n        return $this->precision > 0 ? $result + ['precision' => $this->precision] : $result;\n    }\n\n    /**\n     * Set Precision\n     *\n     * Some bitwise operations give different results depending on the precision being used.  Examples include left\n     * shift, not, and rotates.\n     *\n     * @param int $bits\n     */\n    public function setPrecision($bits)\n    {\n        if ($bits < 1) {\n            $this->precision = -1;\n            $this->bitmask = false;\n\n            return;\n        }\n        $this->precision = $bits;\n        $this->bitmask = static::setBitmask($bits);\n\n        $temp = $this->normalize($this);\n        $this->value = $temp->value;\n    }\n\n    /**\n     * Get Precision\n     *\n     * Returns the precision if it exists, -1 if it doesn't\n     *\n     * @return int\n     */\n    public function getPrecision()\n    {\n        return $this->precision;\n    }\n\n    /**\n     * Set Bitmask\n     * @return static\n     * @param int $bits\n     * @see self::setPrecision()\n     */\n    protected static function setBitmask($bits)\n    {\n        return new static(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);\n    }\n\n    /**\n     * Logical Not\n     *\n     * @return Engine|string\n     */\n    public function bitwise_not()\n    {\n        // calculuate \"not\" without regard to $this->precision\n        // (will always result in a smaller number.  ie. ~1 isn't 1111 1110 - it's 0)\n        $temp = $this->toBytes();\n        if ($temp == '') {\n            return $this->normalize(static::$zero[static::class]);\n        }\n        $pre_msb = decbin(ord($temp[0]));\n        $temp = ~$temp;\n        $msb = decbin(ord($temp[0]));\n        if (strlen($msb) == 8) {\n            $msb = substr($msb, strpos($msb, '0'));\n        }\n        $temp[0] = chr(bindec($msb));\n\n        // see if we need to add extra leading 1's\n        $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8;\n        $new_bits = $this->precision - $current_bits;\n        if ($new_bits <= 0) {\n            return $this->normalize(new static($temp, 256));\n        }\n\n        // generate as many leading 1's as we need to.\n        $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3);\n\n        self::base256_lshift($leading_ones, $current_bits);\n\n        $temp = str_pad($temp, strlen($leading_ones), chr(0), STR_PAD_LEFT);\n\n        return $this->normalize(new static($leading_ones | $temp, 256));\n    }\n\n    /**\n     * Logical Left Shift\n     *\n     * Shifts binary strings $shift bits, essentially multiplying by 2**$shift.\n     *\n     * @param string $x\n     * @param int $shift\n     * @return void\n     */\n    protected static function base256_lshift(&$x, $shift)\n    {\n        if ($shift == 0) {\n            return;\n        }\n\n        $num_bytes = $shift >> 3; // eg. floor($shift/8)\n        $shift &= 7; // eg. $shift % 8\n\n        $carry = 0;\n        for ($i = strlen($x) - 1; $i >= 0; --$i) {\n            $temp = ord($x[$i]) << $shift | $carry;\n            $x[$i] = chr($temp);\n            $carry = $temp >> 8;\n        }\n        $carry = ($carry != 0) ? chr($carry) : '';\n        $x = $carry . $x . str_repeat(chr(0), $num_bytes);\n    }\n\n    /**\n     * Logical Left Rotate\n     *\n     * Instead of the top x bits being dropped they're appended to the shifted bit string.\n     *\n     * @param int $shift\n     * @return Engine\n     */\n    public function bitwise_leftRotate($shift)\n    {\n        $bits = $this->toBytes();\n\n        if ($this->precision > 0) {\n            $precision = $this->precision;\n            if (static::FAST_BITWISE) {\n                $mask = $this->bitmask->toBytes();\n            } else {\n                $mask = $this->bitmask->subtract(new static(1));\n                $mask = $mask->toBytes();\n            }\n        } else {\n            $temp = ord($bits[0]);\n            for ($i = 0; $temp >> $i; ++$i) {\n            }\n            $precision = 8 * strlen($bits) - 8 + $i;\n            $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3);\n        }\n\n        if ($shift < 0) {\n            $shift += $precision;\n        }\n        $shift %= $precision;\n\n        if (!$shift) {\n            return clone $this;\n        }\n\n        $left = $this->bitwise_leftShift($shift);\n        $left = $left->bitwise_and(new static($mask, 256));\n        $right = $this->bitwise_rightShift($precision - $shift);\n        $result = static::FAST_BITWISE ? $left->bitwise_or($right) : $left->add($right);\n        return $this->normalize($result);\n    }\n\n    /**\n     * Logical Right Rotate\n     *\n     * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.\n     *\n     * @param int $shift\n     * @return Engine\n     */\n    public function bitwise_rightRotate($shift)\n    {\n        return $this->bitwise_leftRotate(-$shift);\n    }\n\n    /**\n     * Returns the smallest and largest n-bit number\n     *\n     * @param int $bits\n     * @return array{min: static, max: static}\n     */\n    public static function minMaxBits($bits)\n    {\n        $bytes = $bits >> 3;\n        $min = str_repeat(chr(0), $bytes);\n        $max = str_repeat(chr(0xFF), $bytes);\n        $msb = $bits & 7;\n        if ($msb) {\n            $min = chr(1 << ($msb - 1)) . $min;\n            $max = chr((1 << $msb) - 1) . $max;\n        } else {\n            $min[0] = chr(0x80);\n        }\n        return [\n            'min' => new static($min, 256),\n            'max' => new static($max, 256)\n        ];\n    }\n\n    /**\n     * Return the size of a BigInteger in bits\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return strlen($this->toBits());\n    }\n\n    /**\n     * Return the size of a BigInteger in bytes\n     *\n     * @return int\n     */\n    public function getLengthInBytes()\n    {\n        return (int) ceil($this->getLength() / 8);\n    }\n\n    /**\n     * Performs some pre-processing for powMod\n     *\n     * @param Engine $e\n     * @param Engine $n\n     * @return static|false\n     */\n    protected function powModOuter(Engine $e, Engine $n)\n    {\n        $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs();\n\n        if ($e->compare(new static()) < 0) {\n            $e = $e->abs();\n\n            $temp = $this->modInverse($n);\n            if ($temp === false) {\n                return false;\n            }\n\n            return $this->normalize($temp->powModInner($e, $n));\n        }\n\n        if ($this->compare($n) > 0 || $this->isNegative()) {\n            list(, $temp) = $this->divide($n);\n            return $temp->powModInner($e, $n);\n        }\n\n        return $this->powModInner($e, $n);\n    }\n\n    /**\n     * Sliding Window k-ary Modular Exponentiation\n     *\n     * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} /\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}.  In a departure from those algorithims,\n     * however, this function performs a modular reduction after every multiplication and squaring operation.\n     * As such, this function has the same preconditions that the reductions being used do.\n     *\n     * @template T of Engine\n     * @param Engine $x\n     * @param Engine $e\n     * @param Engine $n\n     * @param class-string<T> $class\n     * @return T\n     */\n    protected static function slidingWindow(Engine $x, Engine $e, Engine $n, $class)\n    {\n        static $window_ranges = [7, 25, 81, 241, 673, 1793]; // from BigInteger.java's oddModPow function\n        //static $window_ranges = [0, 7, 36, 140, 450, 1303, 3529]; // from MPM 7.3.1\n\n        $e_bits = $e->toBits();\n        $e_length = strlen($e_bits);\n\n        // calculate the appropriate window size.\n        // $window_size == 3 if $window_ranges is between 25 and 81, for example.\n        for ($i = 0, $window_size = 1; $i < count($window_ranges) && $e_length > $window_ranges[$i]; ++$window_size, ++$i) {\n        }\n\n        $n_value = $n->value;\n\n        if (method_exists(static::class, 'generateCustomReduction')) {\n            static::generateCustomReduction($n, $class);\n        }\n\n        // precompute $this^0 through $this^$window_size\n        $powers = [];\n        $powers[1] = static::prepareReduce($x->value, $n_value, $class);\n        $powers[2] = static::squareReduce($powers[1], $n_value, $class);\n\n        // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end\n        // in a 1.  ie. it's supposed to be odd.\n        $temp = 1 << ($window_size - 1);\n        for ($i = 1; $i < $temp; ++$i) {\n            $i2 = $i << 1;\n            $powers[$i2 + 1] = static::multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $class);\n        }\n\n        $result = new $class(1);\n        $result = static::prepareReduce($result->value, $n_value, $class);\n\n        for ($i = 0; $i < $e_length;) {\n            if (!$e_bits[$i]) {\n                $result = static::squareReduce($result, $n_value, $class);\n                ++$i;\n            } else {\n                for ($j = $window_size - 1; $j > 0; --$j) {\n                    if (!empty($e_bits[$i + $j])) {\n                        break;\n                    }\n                }\n\n                // eg. the length of substr($e_bits, $i, $j + 1)\n                for ($k = 0; $k <= $j; ++$k) {\n                    $result = static::squareReduce($result, $n_value, $class);\n                }\n\n                $result = static::multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $class);\n\n                $i += $j + 1;\n            }\n        }\n\n        $temp = new $class();\n        $temp->value = static::reduce($result, $n_value, $class);\n\n        return $temp;\n    }\n\n    /**\n     * Generates a random number of a certain size\n     *\n     * Bit length is equal to $size\n     *\n     * @param int $size\n     * @return Engine\n     */\n    public static function random($size)\n    {\n        $minMax = static::minMaxBits($size);\n        $min = $minMax['min'];\n        $max = $minMax['max'];\n        return static::randomRange($min, $max);\n    }\n\n    /**\n     * Generates a random prime number of a certain size\n     *\n     * Bit length is equal to $size\n     *\n     * @param int $size\n     * @return Engine\n     */\n    public static function randomPrime($size)\n    {\n        $minMax = static::minMaxBits($size);\n        $min = $minMax['min'];\n        $max = $minMax['max'];\n        return static::randomRangePrime($min, $max);\n    }\n\n    /**\n     * Performs some pre-processing for randomRangePrime\n     *\n     * @param Engine $min\n     * @param Engine $max\n     * @return static|false\n     */\n    protected static function randomRangePrimeOuter(Engine $min, Engine $max)\n    {\n        $compare = $max->compare($min);\n\n        if (!$compare) {\n            return $min->isPrime() ? $min : false;\n        } elseif ($compare < 0) {\n            // if $min is bigger then $max, swap $min and $max\n            $temp = $max;\n            $max = $min;\n            $min = $temp;\n        }\n\n        $length = $max->getLength();\n        if ($length > 8196) {\n            throw new \\RuntimeException(\"Generation of random prime numbers larger than 8196 has been disabled ($length)\");\n        }\n\n        $x = static::randomRange($min, $max);\n\n        return static::randomRangePrimeInner($x, $min, $max);\n    }\n\n    /**\n     * Generate a random number between a range\n     *\n     * Returns a random number between $min and $max where $min and $max\n     * can be defined using one of the two methods:\n     *\n     * BigInteger::randomRange($min, $max)\n     * BigInteger::randomRange($max, $min)\n     *\n     * @param Engine $min\n     * @param Engine $max\n     * @return Engine\n     */\n    protected static function randomRangeHelper(Engine $min, Engine $max)\n    {\n        $compare = $max->compare($min);\n\n        if (!$compare) {\n            return $min;\n        } elseif ($compare < 0) {\n            // if $min is bigger then $max, swap $min and $max\n            $temp = $max;\n            $max = $min;\n            $min = $temp;\n        }\n\n        if (!isset(static::$one[static::class])) {\n            static::$one[static::class] = new static(1);\n        }\n\n        $max = $max->subtract($min->subtract(static::$one[static::class]));\n\n        $size = strlen(ltrim($max->toBytes(), chr(0)));\n\n        /*\n            doing $random % $max doesn't work because some numbers will be more likely to occur than others.\n            eg. if $max is 140 and $random's max is 255 then that'd mean both $random = 5 and $random = 145\n            would produce 5 whereas the only value of random that could produce 139 would be 139. ie.\n            not all numbers would be equally likely. some would be more likely than others.\n\n            creating a whole new random number until you find one that is within the range doesn't work\n            because, for sufficiently small ranges, the likelihood that you'd get a number within that range\n            would be pretty small. eg. with $random's max being 255 and if your $max being 1 the probability\n            would be pretty high that $random would be greater than $max.\n\n            phpseclib works around this using the technique described here:\n\n            http://crypto.stackexchange.com/questions/5708/creating-a-small-number-from-a-cryptographically-secure-random-string\n        */\n        $random_max = new static(chr(1) . str_repeat(\"\\0\", $size), 256);\n        $random = new static(Random::string($size), 256);\n\n        list($max_multiple) = $random_max->divide($max);\n        $max_multiple = $max_multiple->multiply($max);\n\n        while ($random->compare($max_multiple) >= 0) {\n            $random = $random->subtract($max_multiple);\n            $random_max = $random_max->subtract($max_multiple);\n            $random = $random->bitwise_leftShift(8);\n            $random = $random->add(new static(Random::string(1), 256));\n            $random_max = $random_max->bitwise_leftShift(8);\n            list($max_multiple) = $random_max->divide($max);\n            $max_multiple = $max_multiple->multiply($max);\n        }\n        list(, $random) = $random->divide($max);\n\n        return $random->add($min);\n    }\n\n    /**\n     * Performs some post-processing for randomRangePrime\n     *\n     * @param Engine $x\n     * @param Engine $min\n     * @param Engine $max\n     * @return static|false\n     */\n    protected static function randomRangePrimeInner(Engine $x, Engine $min, Engine $max)\n    {\n        if (!isset(static::$two[static::class])) {\n            static::$two[static::class] = new static('2');\n        }\n\n        $x->make_odd();\n        if ($x->compare($max) > 0) {\n            // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range\n            if ($min->equals($max)) {\n                return false;\n            }\n            $x = clone $min;\n            $x->make_odd();\n        }\n\n        $initial_x = clone $x;\n\n        while (true) {\n            if ($x->isPrime()) {\n                return $x;\n            }\n\n            $x = $x->add(static::$two[static::class]);\n\n            if ($x->compare($max) > 0) {\n                $x = clone $min;\n                if ($x->equals(static::$two[static::class])) {\n                    return $x;\n                }\n                $x->make_odd();\n            }\n\n            if ($x->equals($initial_x)) {\n                return false;\n            }\n        }\n    }\n\n    /**\n     * Sets the $t parameter for primality testing\n     *\n     * @return int\n     */\n    protected function setupIsPrime()\n    {\n        $length = $this->getLengthInBytes();\n\n        // see HAC 4.49 \"Note (controlling the error probability)\"\n        // @codingStandardsIgnoreStart\n             if ($length >= 163) { $t =  2; } // floor(1300 / 8)\n        else if ($length >= 106) { $t =  3; } // floor( 850 / 8)\n        else if ($length >= 81 ) { $t =  4; } // floor( 650 / 8)\n        else if ($length >= 68 ) { $t =  5; } // floor( 550 / 8)\n        else if ($length >= 56 ) { $t =  6; } // floor( 450 / 8)\n        else if ($length >= 50 ) { $t =  7; } // floor( 400 / 8)\n        else if ($length >= 43 ) { $t =  8; } // floor( 350 / 8)\n        else if ($length >= 37 ) { $t =  9; } // floor( 300 / 8)\n        else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8)\n        else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8)\n        else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8)\n        else                     { $t = 27; }\n        // @codingStandardsIgnoreEnd\n\n        return $t;\n    }\n\n    /**\n     * Tests Primality\n     *\n     * Uses the {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}.\n     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24} for more info.\n     *\n     * @param int $t\n     * @return bool\n     */\n    protected function testPrimality($t)\n    {\n        if (!$this->testSmallPrimes()) {\n            return false;\n        }\n\n        $n   = clone $this;\n        $n_1 = $n->subtract(static::$one[static::class]);\n        $n_2 = $n->subtract(static::$two[static::class]);\n\n        $r = clone $n_1;\n        $s = static::scan1divide($r);\n\n        for ($i = 0; $i < $t; ++$i) {\n            $a = static::randomRange(static::$two[static::class], $n_2);\n            $y = $a->modPow($r, $n);\n\n            if (!$y->equals(static::$one[static::class]) && !$y->equals($n_1)) {\n                for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) {\n                    $y = $y->modPow(static::$two[static::class], $n);\n                    if ($y->equals(static::$one[static::class])) {\n                        return false;\n                    }\n                }\n\n                if (!$y->equals($n_1)) {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Checks a numer to see if it's prime\n     *\n     * Assuming the $t parameter is not set, this function has an error rate of 2**-80.  The main motivation for the\n     * $t parameter is distributability.  BigInteger::randomPrime() can be distributed across multiple pageloads\n     * on a website instead of just one.\n     *\n     * @param int|bool $t\n     * @return bool\n     */\n    public function isPrime($t = false)\n    {\n        // OpenSSL limits RSA keys to 16384 bits. The length of an RSA key is equal to the length of the modulo, which is\n        // produced by multiplying the primes p and q by one another. The largest number two 8196 bit primes can produce is\n        // a 16384 bit number so, basically, 8196 bit primes are the largest OpenSSL will generate and if that's the largest\n        // that it'll generate it also stands to reason that that's the largest you'll be able to test primality on\n        $length = $this->getLength();\n        if ($length > 8196) {\n            throw new \\RuntimeException(\"Primality testing is not supported for numbers larger than 8196 bits ($length)\");\n        }\n\n        if (!$t) {\n            $t = $this->setupIsPrime();\n        }\n        return $this->testPrimality($t);\n    }\n\n    /**\n     * Performs a few preliminary checks on root\n     *\n     * @param int $n\n     * @return Engine\n     */\n    protected function rootHelper($n)\n    {\n        if ($n < 1) {\n            return clone static::$zero[static::class];\n        } // we want positive exponents\n        if ($this->compare(static::$one[static::class]) < 0) {\n            return clone static::$zero[static::class];\n        } // we want positive numbers\n        if ($this->compare(static::$two[static::class]) < 0) {\n            return clone static::$one[static::class];\n        } // n-th root of 1 or 2 is 1\n\n        return $this->rootInner($n);\n    }\n\n    /**\n     * Calculates the nth root of a biginteger.\n     *\n     * Returns the nth root of a positive biginteger, where n defaults to 2\n     *\n     * {@internal This function is based off of {@link http://mathforum.org/library/drmath/view/52605.html this page} and {@link http://stackoverflow.com/questions/11242920/calculating-nth-root-with-bcmath-in-php this stackoverflow question}.}\n     *\n     * @param int $n\n     * @return Engine\n     */\n    protected function rootInner($n)\n    {\n        $n = new static($n);\n\n        // g is our guess number\n        $g = static::$two[static::class];\n        // while (g^n < num) g=g*2\n        while ($g->pow($n)->compare($this) < 0) {\n            $g = $g->multiply(static::$two[static::class]);\n        }\n        // if (g^n==num) num is a power of 2, we're lucky, end of job\n        // == 0 bccomp(bcpow($g, $n), $n->value)==0\n        if ($g->pow($n)->equals($this) > 0) {\n            $root = $g;\n            return $this->normalize($root);\n        }\n\n        // if we're here num wasn't a power of 2 :(\n        $og = $g; // og means original guess and here is our upper bound\n        $g = $g->divide(static::$two[static::class])[0]; // g is set to be our lower bound\n        $step = $og->subtract($g)->divide(static::$two[static::class])[0]; // step is the half of upper bound - lower bound\n        $g = $g->add($step); // we start at lower bound + step , basically in the middle of our interval\n\n        // while step>1\n\n        while ($step->compare(static::$one[static::class]) == 1) {\n            $guess = $g->pow($n);\n            $step = $step->divide(static::$two[static::class])[0];\n            $comp = $guess->compare($this); // compare our guess with real number\n            switch ($comp) {\n                case -1: // if guess is lower we add the new step\n                    $g = $g->add($step);\n                    break;\n                case 1: // if guess is higher we sub the new step\n                    $g = $g->subtract($step);\n                    break;\n                case 0: // if guess is exactly the num we're done, we return the value\n                    $root = $g;\n                    break 2;\n            }\n        }\n\n        if ($comp == 1) {\n            $g = $g->subtract($step);\n        }\n\n        // whatever happened, g is the closest guess we can make so return it\n        $root = $g;\n\n        return $this->normalize($root);\n    }\n\n    /**\n     * Calculates the nth root of a biginteger.\n     *\n     * @param int $n\n     * @return Engine\n     */\n    public function root($n = 2)\n    {\n        return $this->rootHelper($n);\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param array $nums\n     * @return Engine\n     */\n    protected static function minHelper(array $nums)\n    {\n        if (count($nums) == 1) {\n            return $nums[0];\n        }\n        $min = $nums[0];\n        for ($i = 1; $i < count($nums); $i++) {\n            $min = $min->compare($nums[$i]) > 0 ? $nums[$i] : $min;\n        }\n        return $min;\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param array $nums\n     * @return Engine\n     */\n    protected static function maxHelper(array $nums)\n    {\n        if (count($nums) == 1) {\n            return $nums[0];\n        }\n        $max = $nums[0];\n        for ($i = 1; $i < count($nums); $i++) {\n            $max = $max->compare($nums[$i]) < 0 ? $nums[$i] : $max;\n        }\n        return $max;\n    }\n\n    /**\n     * Create Recurring Modulo Function\n     *\n     * Sometimes it may be desirable to do repeated modulos with the same number outside of\n     * modular exponentiation\n     *\n     * @return callable\n     */\n    public function createRecurringModuloFunction()\n    {\n        $class = static::class;\n\n        $fqengine = !method_exists(static::$modexpEngine[static::class], 'reduce') ?\n            '\\\\phpseclib3\\\\Math\\\\BigInteger\\\\Engines\\\\' . static::ENGINE_DIR . '\\\\DefaultEngine' :\n            static::$modexpEngine[static::class];\n        if (method_exists($fqengine, 'generateCustomReduction')) {\n            $func = $fqengine::generateCustomReduction($this, static::class);\n            return eval('return function(' . static::class . ' $x) use ($func, $class) {\n                $r = new $class();\n                $r->value = $func($x->value);\n                return $r;\n            };');\n        }\n        $n = $this->value;\n        return eval('return function(' . static::class . ' $x) use ($n, $fqengine, $class) {\n            $r = new $class();\n            $r->value = $fqengine::reduce($x->value, $n, $class);\n            return $r;\n        };');\n    }\n\n    /**\n     * Calculates the greatest common divisor and Bezout's identity.\n     *\n     * @param Engine $n\n     * @return array{gcd: Engine, x: Engine, y: Engine}\n     */\n    protected function extendedGCDHelper(Engine $n)\n    {\n        $u = clone $this;\n        $v = clone $n;\n\n        $one = new static(1);\n        $zero = new static();\n\n        $a = clone $one;\n        $b = clone $zero;\n        $c = clone $zero;\n        $d = clone $one;\n\n        while (!$v->equals($zero)) {\n            list($q) = $u->divide($v);\n\n            $temp = $u;\n            $u = $v;\n            $v = $temp->subtract($v->multiply($q));\n\n            $temp = $a;\n            $a = $c;\n            $c = $temp->subtract($a->multiply($q));\n\n            $temp = $b;\n            $b = $d;\n            $d = $temp->subtract($b->multiply($q));\n        }\n\n        return [\n            'gcd' => $u,\n            'x' => $a,\n            'y' => $b\n        ];\n    }\n\n    /**\n     * Bitwise Split\n     *\n     * Splits BigInteger's into chunks of $split bits\n     *\n     * @param int $split\n     * @return Engine[]\n     */\n    public function bitwise_split($split)\n    {\n        if ($split < 1) {\n            throw new \\RuntimeException('Offset must be greater than 1');\n        }\n\n        $mask = static::$one[static::class]->bitwise_leftShift($split)->subtract(static::$one[static::class]);\n\n        $num = clone $this;\n\n        $vals = [];\n        while (!$num->equals(static::$zero[static::class])) {\n            $vals[] = $num->bitwise_and($mask);\n            $num = $num->bitwise_rightShift($split);\n        }\n\n        return array_reverse($vals);\n    }\n\n    /**\n     * Logical And\n     *\n     * @param Engine $x\n     * @return Engine\n     */\n    protected function bitwiseAndHelper(Engine $x)\n    {\n        $left = $this->toBytes(true);\n        $right = $x->toBytes(true);\n\n        $length = max(strlen($left), strlen($right));\n\n        $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);\n        $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);\n\n        return $this->normalize(new static($left & $right, -256));\n    }\n\n    /**\n     * Logical Or\n     *\n     * @param Engine $x\n     * @return Engine\n     */\n    protected function bitwiseOrHelper(Engine $x)\n    {\n        $left = $this->toBytes(true);\n        $right = $x->toBytes(true);\n\n        $length = max(strlen($left), strlen($right));\n\n        $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);\n        $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);\n\n        return $this->normalize(new static($left | $right, -256));\n    }\n\n    /**\n     * Logical Exclusive Or\n     *\n     * @param Engine $x\n     * @return Engine\n     */\n    protected function bitwiseXorHelper(Engine $x)\n    {\n        $left = $this->toBytes(true);\n        $right = $x->toBytes(true);\n\n        $length = max(strlen($left), strlen($right));\n\n\n        $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);\n        $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);\n        return $this->normalize(new static($left ^ $right, -256));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP/DefaultEngine.php",
    "content": "<?php\n\n/**\n * GMP Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\GMP;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\GMP;\n\n/**\n * GMP Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DefaultEngine extends GMP\n{\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param GMP $x\n     * @param GMP $e\n     * @param GMP $n\n     * @return GMP\n     */\n    protected static function powModHelper(GMP $x, GMP $e, GMP $n)\n    {\n        $temp = new GMP();\n        $temp->value = gmp_powm($x->value, $e->value, $n->value);\n\n        return $x->normalize($temp);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP.php",
    "content": "<?php\n\n/**\n * GMP BigInteger Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\nuse phpseclib3\\Exception\\BadConfigurationException;\n\n/**\n * GMP Engine.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass GMP extends Engine\n{\n    /**\n     * Can Bitwise operations be done fast?\n     *\n     * @see parent::bitwise_leftRotate()\n     * @see parent::bitwise_rightRotate()\n     */\n    const FAST_BITWISE = true;\n\n    /**\n     * Engine Directory\n     *\n     * @see parent::setModExpEngine\n     */\n    const ENGINE_DIR = 'GMP';\n\n    /**\n     * Test for engine validity\n     *\n     * @return bool\n     * @see parent::__construct()\n     */\n    public static function isValidEngine()\n    {\n        return extension_loaded('gmp');\n    }\n\n    /**\n     * Default constructor\n     *\n     * @param mixed $x integer Base-10 number or base-$base number if $base set.\n     * @param int $base\n     * @see parent::__construct()\n     */\n    public function __construct($x = 0, $base = 10)\n    {\n        if (!isset(static::$isValidEngine[static::class])) {\n            static::$isValidEngine[static::class] = self::isValidEngine();\n        }\n        if (!static::$isValidEngine[static::class]) {\n            throw new BadConfigurationException('GMP is not setup correctly on this system');\n        }\n\n        if ($x instanceof \\GMP) {\n            $this->value = $x;\n            return;\n        }\n\n        $this->value = gmp_init(0);\n\n        parent::__construct($x, $base);\n    }\n\n    /**\n     * Initialize a GMP BigInteger Engine instance\n     *\n     * @param int $base\n     * @see parent::__construct()\n     */\n    protected function initialize($base)\n    {\n        switch (abs($base)) {\n            case 256:\n                $this->value = gmp_import($this->value);\n                if ($this->is_negative) {\n                    $this->value = -$this->value;\n                }\n                break;\n            case 16:\n                $temp = $this->is_negative ? '-0x' . $this->value : '0x' . $this->value;\n                $this->value = gmp_init($temp);\n                break;\n            case 10:\n                $this->value = gmp_init(isset($this->value) ? $this->value : '0');\n        }\n    }\n\n    /**\n     * Converts a BigInteger to a base-10 number.\n     *\n     * @return string\n     */\n    public function toString()\n    {\n        return (string)$this->value;\n    }\n\n    /**\n     * Converts a BigInteger to a bit string (eg. base-2).\n     *\n     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're\n     * saved as two's compliment.\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBits($twos_compliment = false)\n    {\n        $hex = $this->toHex($twos_compliment);\n\n        $bits = gmp_strval(gmp_init($hex, 16), 2);\n\n        if ($this->precision > 0) {\n            $bits = substr($bits, -$this->precision);\n        }\n\n        if ($twos_compliment && $this->compare(new static()) > 0 && $this->precision <= 0) {\n            return '0' . $bits;\n        }\n\n        return $bits;\n    }\n\n    /**\n     * Converts a BigInteger to a byte string (eg. base-256).\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBytes($twos_compliment = false)\n    {\n        if ($twos_compliment) {\n            return $this->toBytesHelper();\n        }\n\n        if (gmp_cmp($this->value, gmp_init(0)) == 0) {\n            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';\n        }\n\n        $temp = gmp_export($this->value);\n\n        return $this->precision > 0 ?\n            substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :\n            ltrim($temp, chr(0));\n    }\n\n    /**\n     * Adds two BigIntegers.\n     *\n     * @param GMP $y\n     * @return GMP\n     */\n    public function add(GMP $y)\n    {\n        $temp = new self();\n        $temp->value = $this->value + $y->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Subtracts two BigIntegers.\n     *\n     * @param GMP $y\n     * @return GMP\n     */\n    public function subtract(GMP $y)\n    {\n        $temp = new self();\n        $temp->value = $this->value - $y->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Multiplies two BigIntegers.\n     *\n     * @param GMP $x\n     * @return GMP\n     */\n    public function multiply(GMP $x)\n    {\n        $temp = new self();\n        $temp->value = $this->value * $x->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Divides two BigIntegers.\n     *\n     * Returns an array whose first element contains the quotient and whose second element contains the\n     * \"common residue\".  If the remainder would be positive, the \"common residue\" and the remainder are the\n     * same.  If the remainder would be negative, the \"common residue\" is equal to the sum of the remainder\n     * and the divisor (basically, the \"common residue\" is the first positive modulo).\n     *\n     * @param GMP $y\n     * @return array{GMP, GMP}\n     */\n    public function divide(GMP $y)\n    {\n        $quotient = new self();\n        $remainder = new self();\n\n        list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value);\n\n        if (gmp_sign($remainder->value) < 0) {\n            $remainder->value = $remainder->value + gmp_abs($y->value);\n        }\n\n        return [$this->normalize($quotient), $this->normalize($remainder)];\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this\n     * is demonstrated thusly:\n     *\n     * $x  > $y: $x->compare($y)  > 0\n     * $x  < $y: $x->compare($y)  < 0\n     * $x == $y: $x->compare($y) == 0\n     *\n     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).\n     *\n     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}\n     *\n     * @param GMP $y\n     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.\n     * @see self::equals()\n     */\n    public function compare(GMP $y)\n    {\n        $r = gmp_cmp($this->value, $y->value);\n        if ($r < -1) {\n            $r = -1;\n        }\n        if ($r > 1) {\n            $r = 1;\n        }\n        return $r;\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()\n     *\n     * @param GMP $x\n     * @return bool\n     */\n    public function equals(GMP $x)\n    {\n        return $this->value == $x->value;\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     *\n     * @param GMP $n\n     * @return false|GMP\n     */\n    public function modInverse(GMP $n)\n    {\n        $temp = new self();\n        $temp->value = gmp_invert($this->value, $n->value);\n\n        return $temp->value === false ? false : $this->normalize($temp);\n    }\n\n    /**\n     * Calculates the greatest common divisor and Bezout's identity.\n     *\n     * Say you have 693 and 609.  The GCD is 21.  Bezout's identity states that there exist integers x and y such that\n     * 693*x + 609*y == 21.  In point of fact, there are actually an infinite number of x and y combinations and which\n     * combination is returned is dependent upon which mode is in use.  See\n     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information.\n     *\n     * @param GMP $n\n     * @return GMP[]\n     */\n    public function extendedGCD(GMP $n)\n    {\n        $extended = gmp_gcdext($this->value, $n->value);\n        $g = $extended['g'];\n        $s = $extended['s'];\n        $t = $extended['t'];\n\n        return [\n            'gcd' => $this->normalize(new self($g)),\n            'x' => $this->normalize(new self($s)),\n            'y' => $this->normalize(new self($t))\n        ];\n    }\n\n    /**\n     * Calculates the greatest common divisor\n     *\n     * Say you have 693 and 609.  The GCD is 21.\n     *\n     * @param GMP $n\n     * @return GMP\n     */\n    public function gcd(GMP $n)\n    {\n        $r = gmp_gcd($this->value, $n->value);\n        return $this->normalize(new self($r));\n    }\n\n    /**\n     * Absolute value.\n     *\n     * @return GMP\n     */\n    public function abs()\n    {\n        $temp = new self();\n        $temp->value = gmp_abs($this->value);\n\n        return $temp;\n    }\n\n    /**\n     * Logical And\n     *\n     * @param GMP $x\n     * @return GMP\n     */\n    public function bitwise_and(GMP $x)\n    {\n        $temp = new self();\n        $temp->value = $this->value & $x->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Logical Or\n     *\n     * @param GMP $x\n     * @return GMP\n     */\n    public function bitwise_or(GMP $x)\n    {\n        $temp = new self();\n        $temp->value = $this->value | $x->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Logical Exclusive Or\n     *\n     * @param GMP $x\n     * @return GMP\n     */\n    public function bitwise_xor(GMP $x)\n    {\n        $temp = new self();\n        $temp->value = $this->value ^ $x->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Logical Right Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.\n     *\n     * @param int $shift\n     * @return GMP\n     */\n    public function bitwise_rightShift($shift)\n    {\n        // 0xFFFFFFFF >> 2 == -1 (on 32-bit systems)\n        // gmp_init('0xFFFFFFFF') >> 2 == gmp_init('0x3FFFFFFF')\n\n        $temp = new self();\n        $temp->value = $this->value >> $shift;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Logical Left Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.\n     *\n     * @param int $shift\n     * @return GMP\n     */\n    public function bitwise_leftShift($shift)\n    {\n        $temp = new self();\n        $temp->value = $this->value << $shift;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param GMP $e\n     * @param GMP $n\n     * @return GMP\n     */\n    public function modPow(GMP $e, GMP $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * Alias for modPow().\n     *\n     * @param GMP $e\n     * @param GMP $n\n     * @return GMP\n     */\n    public function powMod(GMP $e, GMP $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param GMP $e\n     * @param GMP $n\n     * @return GMP\n     */\n    protected function powModInner(GMP $e, GMP $n)\n    {\n        $class = static::$modexpEngine[static::class];\n        return $class::powModHelper($this, $e, $n);\n    }\n\n    /**\n     * Normalize\n     *\n     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision\n     *\n     * @param GMP $result\n     * @return GMP\n     */\n    protected function normalize(GMP $result)\n    {\n        $result->precision = $this->precision;\n        $result->bitmask = $this->bitmask;\n\n        if ($result->bitmask !== false) {\n            $flip = $result->value < 0;\n            if ($flip) {\n                $result->value = -$result->value;\n            }\n            $result->value = $result->value & $result->bitmask->value;\n            if ($flip) {\n                $result->value = -$result->value;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Performs some post-processing for randomRangePrime\n     *\n     * @param Engine $x\n     * @param Engine $min\n     * @param Engine $max\n     * @return GMP\n     */\n    protected static function randomRangePrimeInner(Engine $x, Engine $min, Engine $max)\n    {\n        $p = gmp_nextprime($x->value);\n\n        if ($p <= $max->value) {\n            return new self($p);\n        }\n\n        if ($min->value != $x->value) {\n            $x = new self($x->value - 1);\n        }\n\n        return self::randomRangePrime($min, $x);\n    }\n\n    /**\n     * Generate a random prime number between a range\n     *\n     * If there's not a prime within the given range, false will be returned.\n     *\n     * @param GMP $min\n     * @param GMP $max\n     * @return false|GMP\n     */\n    public static function randomRangePrime(GMP $min, GMP $max)\n    {\n        return self::randomRangePrimeOuter($min, $max);\n    }\n\n    /**\n     * Generate a random number between a range\n     *\n     * Returns a random number between $min and $max where $min and $max\n     * can be defined using one of the two methods:\n     *\n     * BigInteger::randomRange($min, $max)\n     * BigInteger::randomRange($max, $min)\n     *\n     * @param GMP $min\n     * @param GMP $max\n     * @return GMP\n     */\n    public static function randomRange(GMP $min, GMP $max)\n    {\n        return self::randomRangeHelper($min, $max);\n    }\n\n    /**\n     * Make the current number odd\n     *\n     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.\n     *\n     * @see self::randomPrime()\n     */\n    protected function make_odd()\n    {\n        gmp_setbit($this->value, 0);\n    }\n\n    /**\n     * Tests Primality\n     *\n     * @param int $t\n     * @return bool\n     */\n    protected function testPrimality($t)\n    {\n        return gmp_prob_prime($this->value, $t) != 0;\n    }\n\n    /**\n     * Calculates the nth root of a biginteger.\n     *\n     * Returns the nth root of a positive biginteger, where n defaults to 2\n     *\n     * @param int $n\n     * @return GMP\n     */\n    protected function rootInner($n)\n    {\n        $root = new self();\n        $root->value = gmp_root($this->value, $n);\n        return $this->normalize($root);\n    }\n\n    /**\n     * Performs exponentiation.\n     *\n     * @param GMP $n\n     * @return GMP\n     */\n    public function pow(GMP $n)\n    {\n        $temp = new self();\n        $temp->value = $this->value ** $n->value;\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param GMP ...$nums\n     * @return GMP\n     */\n    public static function min(GMP ...$nums)\n    {\n        return self::minHelper($nums);\n    }\n\n    /**\n     * Return the maximum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param GMP ...$nums\n     * @return GMP\n     */\n    public static function max(GMP ...$nums)\n    {\n        return self::maxHelper($nums);\n    }\n\n    /**\n     * Tests BigInteger to see if it is between two integers, inclusive\n     *\n     * @param GMP $min\n     * @param GMP $max\n     * @return bool\n     */\n    public function between(GMP $min, GMP $max)\n    {\n        return $this->compare($min) >= 0 && $this->compare($max) <= 0;\n    }\n\n    /**\n     * Create Recurring Modulo Function\n     *\n     * Sometimes it may be desirable to do repeated modulos with the same number outside of\n     * modular exponentiation\n     *\n     * @return callable\n     */\n    public function createRecurringModuloFunction()\n    {\n        $temp = $this->value;\n        return function (GMP $x) use ($temp) {\n            return new GMP($x->value % $temp);\n        };\n    }\n\n    /**\n     * Scan for 1 and right shift by that amount\n     *\n     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));\n     *\n     * @param GMP $r\n     * @return int\n     */\n    public static function scan1divide(GMP $r)\n    {\n        $s = gmp_scan1($r->value, 0);\n        $r->value >>= $s;\n        return $s;\n    }\n\n    /**\n     * Is Odd?\n     *\n     * @return bool\n     */\n    public function isOdd()\n    {\n        return gmp_testbit($this->value, 0);\n    }\n\n    /**\n     * Tests if a bit is set\n     *\n     * @return bool\n     */\n    public function testBit($x)\n    {\n        return gmp_testbit($this->value, $x);\n    }\n\n    /**\n     * Is Negative?\n     *\n     * @return bool\n     */\n    public function isNegative()\n    {\n        return gmp_sign($this->value) == -1;\n    }\n\n    /**\n     * Negate\n     *\n     * Given $k, returns -$k\n     *\n     * @return GMP\n     */\n    public function negate()\n    {\n        $temp = clone $this;\n        $temp->value = -$this->value;\n\n        return $temp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/OpenSSL.php",
    "content": "<?php\n\n/**\n * OpenSSL Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\nuse phpseclib3\\Crypt\\RSA\\Formats\\Keys\\PKCS8;\nuse phpseclib3\\Math\\BigInteger;\n\n/**\n * OpenSSL Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSL\n{\n    /**\n     * Test for engine validity\n     *\n     * @return bool\n     */\n    public static function isValidEngine()\n    {\n        return extension_loaded('openssl') && static::class != __CLASS__;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param Engine $x\n     * @param Engine $e\n     * @param Engine $n\n     * @return Engine\n     */\n    public static function powModHelper(Engine $x, Engine $e, Engine $n)\n    {\n        if ($n->getLengthInBytes() < 31 || $n->getLengthInBytes() > 16384) {\n            throw new \\OutOfRangeException('Only modulo between 31 and 16384 bits are accepted');\n        }\n\n        $key = PKCS8::savePublicKey(\n            new BigInteger($n),\n            new BigInteger($e)\n        );\n\n        $plaintext = str_pad($x->toBytes(), $n->getLengthInBytes(), \"\\0\", STR_PAD_LEFT);\n\n        // this is easily prone to failure. if the modulo is a multiple of 2 or 3 or whatever it\n        // won't work and you'll get a \"failure: error:0906D06C:PEM routines:PEM_read_bio:no start line\"\n        // error. i suppose, for even numbers, we could do what PHP\\Montgomery.php does, but then what\n        // about odd numbers divisible by 3, by 5, etc?\n        if (!openssl_public_encrypt($plaintext, $result, $key, OPENSSL_NO_PADDING)) {\n            throw new \\UnexpectedValueException(openssl_error_string());\n        }\n\n        $class = get_class($x);\n        return new $class($result, 256);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Base.php",
    "content": "<?php\n\n/**\n * PHP Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP;\n\n/**\n * PHP Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Base extends PHP\n{\n    /**\n     * Cache constants\n     *\n     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.\n     *\n     */\n    const VARIABLE = 0;\n    /**\n     * $cache[self::DATA] contains the cached data.\n     *\n     */\n    const DATA = 1;\n\n    /**\n     * Test for engine validity\n     *\n     * @return bool\n     */\n    public static function isValidEngine()\n    {\n        return static::class != __CLASS__;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * The most naive approach to modular exponentiation has very unreasonable requirements, and\n     * and although the approach involving repeated squaring does vastly better, it, too, is impractical\n     * for our purposes.  The reason being that division - by far the most complicated and time-consuming\n     * of the basic operations (eg. +,-,*,/) - occurs multiple times within it.\n     *\n     * Modular reductions resolve this issue.  Although an individual modular reduction takes more time\n     * then an individual division, when performed in succession (with the same modulo), they're a lot faster.\n     *\n     * The two most commonly used modular reductions are Barrett and Montgomery reduction.  Montgomery reduction,\n     * although faster, only works when the gcd of the modulo and of the base being used is 1.  In RSA, when the\n     * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because\n     * the product of two odd numbers is odd), but what about when RSA isn't used?\n     *\n     * In contrast, Barrett reduction has no such constraint.  As such, some bigint implementations perform a\n     * Barrett reduction after every operation in the modpow function.  Others perform Barrett reductions when the\n     * modulo is even and Montgomery reductions when the modulo is odd.  BigInteger.java's modPow method, however,\n     * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and\n     * the other, a power of two - and recombine them, later.  This is the method that this modPow function uses.\n     * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates.\n     *\n     * @param PHP $x\n     * @param PHP $e\n     * @param PHP $n\n     * @param string $class\n     * @return PHP\n     */\n    protected static function powModHelper(PHP $x, PHP $e, PHP $n, $class)\n    {\n        if (empty($e->value)) {\n            $temp = new $class();\n            $temp->value = [1];\n            return $x->normalize($temp);\n        }\n\n        if ($e->value == [1]) {\n            list(, $temp) = $x->divide($n);\n            return $x->normalize($temp);\n        }\n\n        if ($e->value == [2]) {\n            $temp = new $class();\n            $temp->value = $class::square($x->value);\n            list(, $temp) = $temp->divide($n);\n            return $x->normalize($temp);\n        }\n\n        return $x->normalize(static::slidingWindow($x, $e, $n, $class));\n    }\n\n    /**\n     * Modular reduction preparation\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @see self::slidingWindow()\n     * @return array\n     */\n    protected static function prepareReduce(array $x, array $n, $class)\n    {\n        return static::reduce($x, $n, $class);\n    }\n\n    /**\n     * Modular multiply\n     *\n     * @param array $x\n     * @param array $y\n     * @param array $n\n     * @param string $class\n     * @see self::slidingWindow()\n     * @return array\n     */\n    protected static function multiplyReduce(array $x, array $y, array $n, $class)\n    {\n        $temp = $class::multiplyHelper($x, false, $y, false);\n        return static::reduce($temp[self::VALUE], $n, $class);\n    }\n\n    /**\n     * Modular square\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @see self::slidingWindow()\n     * @return array\n     */\n    protected static function squareReduce(array $x, array $n, $class)\n    {\n        return static::reduce($class::square($x), $n, $class);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/DefaultEngine.php",
    "content": "<?php\n\n/**\n * PHP Default Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions\\EvalBarrett;\n\n/**\n * PHP Default Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class DefaultEngine extends EvalBarrett\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Montgomery.php",
    "content": "<?php\n\n/**\n * PHP Montgomery Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\Engine;\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP;\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions\\PowerOfTwo;\n\n/**\n * PHP Montgomery Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Montgomery extends Base\n{\n    /**\n     * Test for engine validity\n     *\n     * @return bool\n     */\n    public static function isValidEngine()\n    {\n        return static::class != __CLASS__;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @template T of Engine\n     * @param Engine $x\n     * @param Engine $e\n     * @param Engine $n\n     * @param class-string<T> $class\n     * @return T\n     */\n    protected static function slidingWindow(Engine $x, Engine $e, Engine $n, $class)\n    {\n        // is the modulo odd?\n        if ($n->value[0] & 1) {\n            return parent::slidingWindow($x, $e, $n, $class);\n        }\n        // if it's not, it's even\n\n        // find the lowest set bit (eg. the max pow of 2 that divides $n)\n        for ($i = 0; $i < count($n->value); ++$i) {\n            if ($n->value[$i]) {\n                $temp = decbin($n->value[$i]);\n                $j = strlen($temp) - strrpos($temp, '1') - 1;\n                $j += $class::BASE * $i;\n                break;\n            }\n        }\n        // at this point, 2^$j * $n/(2^$j) == $n\n\n        $mod1 = clone $n;\n        $mod1->rshift($j);\n        $mod2 = new $class();\n        $mod2->value = [1];\n        $mod2->lshift($j);\n\n        $part1 = $mod1->value != [1] ? parent::slidingWindow($x, $e, $mod1, $class) : new $class();\n        $part2 = PowerOfTwo::slidingWindow($x, $e, $mod2, $class);\n\n        $y1 = $mod2->modInverse($mod1);\n        $y2 = $mod1->modInverse($mod2);\n\n        $result = $part1->multiply($mod2);\n        $result = $result->multiply($y1);\n\n        $temp = $part2->multiply($mod1);\n        $temp = $temp->multiply($y2);\n\n        $result = $result->add($temp);\n        list(, $result) = $result->divide($n);\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/OpenSSL.php",
    "content": "<?php\n\n/**\n * OpenSSL Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\OpenSSL as Progenitor;\n\n/**\n * OpenSSL Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class OpenSSL extends Progenitor\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Barrett.php",
    "content": "<?php\n\n/**\n * PHP Barrett Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP;\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Base;\n\n/**\n * PHP Barrett Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Barrett extends Base\n{\n    /**\n     * Barrett Modular Reduction\n     *\n     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information.  Modified slightly,\n     * so as not to require negative numbers (initially, this script didn't support negative numbers).\n     *\n     * Employs \"folding\", as described at\n     * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}.  To quote from\n     * it, \"the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x.\"\n     *\n     * Unfortunately, the \"Barrett Reduction with Folding\" algorithm described in thesis-149.pdf is not, as written, all that\n     * usable on account of (1) its not using reasonable radix points as discussed in\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable\n     * radix points, it only works when there are an even number of digits in the denominator.  The reason for (2) is that\n     * (x >> 1) + (x >> 1) != x / 2 + x / 2.  If x is even, they're the same, but if x is odd, they're not.  See the in-line\n     * comments for details.\n     *\n     * @param array $n\n     * @param array $m\n     * @param class-string<PHP> $class\n     * @return array\n     */\n    protected static function reduce(array $n, array $m, $class)\n    {\n        static $cache = [\n            self::VARIABLE => [],\n            self::DATA => []\n        ];\n\n        $m_length = count($m);\n\n        // if (self::compareHelper($n, $static::square($m)) >= 0) {\n        if (count($n) > 2 * $m_length) {\n            $lhs = new $class();\n            $rhs = new $class();\n            $lhs->value = $n;\n            $rhs->value = $m;\n            list(, $temp) = $lhs->divide($rhs);\n            return $temp->value;\n        }\n\n        // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced\n        if ($m_length < 5) {\n            return self::regularBarrett($n, $m, $class);\n        }\n        // n = 2 * m.length\n        $correctionNeeded = false;\n        if ($m_length & 1) {\n            $correctionNeeded = true;\n            array_unshift($n, 0);\n            array_unshift($m, 0);\n            $m_length++;\n        }\n\n        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {\n            $key = count($cache[self::VARIABLE]);\n            $cache[self::VARIABLE][] = $m;\n\n            $lhs = new $class();\n            $lhs_value = &$lhs->value;\n            $lhs_value = self::array_repeat(0, $m_length + ($m_length >> 1));\n            $lhs_value[] = 1;\n            $rhs = new $class();\n            $rhs->value = $m;\n\n            list($u, $m1) = $lhs->divide($rhs);\n            $u = $u->value;\n            $m1 = $m1->value;\n\n            $cache[self::DATA][] = [\n                'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)\n                'm1' => $m1 // m.length\n            ];\n        } else {\n            $cacheValues = $cache[self::DATA][$key];\n            $u = $cacheValues['u'];\n            $m1 = $cacheValues['m1'];\n        }\n\n        $cutoff = $m_length + ($m_length >> 1);\n        $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1)\n        $msd = array_slice($n, $cutoff);    // m.length >> 1\n\n        $lsd = self::trim($lsd);\n        $temp = $class::multiplyHelper($msd, false, $m1, false); // m.length + (m.length >> 1)\n        $n = $class::addHelper($lsd, false, $temp[self::VALUE], false); // m.length + (m.length >> 1) + 1 (so basically we're adding two same length numbers)\n        //if ($m_length & 1) {\n        //    return self::regularBarrett($n[self::VALUE], $m, $class);\n        //}\n\n        // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2\n        $temp = array_slice($n[self::VALUE], $m_length - 1);\n        // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2\n        // if odd:  ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1\n        // note that these are upper bounds. let's say m.length is 2. then you'd be multiplying a\n        // 3 digit number by a 1 digit number. if you're doing 999 * 9 (in base 10) the result will\n        // be a 4 digit number. but if you're multiplying 111 * 1 then the result will be a 3 digit\n        // number.\n        $temp = $class::multiplyHelper($temp, false, $u, false);\n        // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1\n        // if odd:  (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)\n        $temp = array_slice($temp[self::VALUE], ($m_length >> 1) + 1);\n        // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1\n        // if odd:  (m.length - (m.length >> 1)) + m.length     = 2 * m.length - (m.length >> 1)\n        $temp = $class::multiplyHelper($temp, false, $m, false);\n        // at this point, if m had an odd number of digits, we'd (probably) be subtracting a 2 * m.length - (m.length >> 1)\n        // digit number from a m.length + (m.length >> 1) + 1 digit number.  ie. there'd be an extra digit and the while loop\n        // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).\n        $result = $class::subtractHelper($n[self::VALUE], false, $temp[self::VALUE], false);\n\n        while (self::compareHelper($result[self::VALUE], $result[self::SIGN], $m, false) >= 0) {\n            $result = $class::subtractHelper($result[self::VALUE], $result[self::SIGN], $m, false);\n        }\n\n        if ($correctionNeeded) {\n            array_shift($result[self::VALUE]);\n        }\n\n        return $result[self::VALUE];\n    }\n\n    /**\n     * (Regular) Barrett Modular Reduction\n     *\n     * For numbers with more than four digits BigInteger::_barrett() is faster.  The difference between that and this\n     * is that this function does not fold the denominator into a smaller form.\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @return array\n     */\n    private static function regularBarrett(array $x, array $n, $class)\n    {\n        static $cache = [\n            self::VARIABLE => [],\n            self::DATA => []\n        ];\n\n        $n_length = count($n);\n\n        if (count($x) > 2 * $n_length) {\n            $lhs = new $class();\n            $rhs = new $class();\n            $lhs->value = $x;\n            $rhs->value = $n;\n            list(, $temp) = $lhs->divide($rhs);\n            return $temp->value;\n        }\n\n        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {\n            $key = count($cache[self::VARIABLE]);\n            $cache[self::VARIABLE][] = $n;\n            $lhs = new $class();\n            $lhs_value = &$lhs->value;\n            $lhs_value = self::array_repeat(0, 2 * $n_length);\n            $lhs_value[] = 1;\n            $rhs = new $class();\n            $rhs->value = $n;\n            list($temp, ) = $lhs->divide($rhs); // m.length\n            $cache[self::DATA][] = $temp->value;\n        }\n\n        // 2 * m.length - (m.length - 1) = m.length + 1\n        $temp = array_slice($x, $n_length - 1);\n        // (m.length + 1) + m.length = 2 * m.length + 1\n        $temp = $class::multiplyHelper($temp, false, $cache[self::DATA][$key], false);\n        // (2 * m.length + 1) - (m.length - 1) = m.length + 2\n        $temp = array_slice($temp[self::VALUE], $n_length + 1);\n\n        // m.length + 1\n        $result = array_slice($x, 0, $n_length + 1);\n        // m.length + 1\n        $temp = self::multiplyLower($temp, false, $n, false, $n_length + 1, $class);\n        // $temp == array_slice($class::regularMultiply($temp, false, $n, false)->value, 0, $n_length + 1)\n\n        if (self::compareHelper($result, false, $temp[self::VALUE], $temp[self::SIGN]) < 0) {\n            $corrector_value = self::array_repeat(0, $n_length + 1);\n            $corrector_value[count($corrector_value)] = 1;\n            $result = $class::addHelper($result, false, $corrector_value, false);\n            $result = $result[self::VALUE];\n        }\n\n        // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits\n        $result = $class::subtractHelper($result, false, $temp[self::VALUE], $temp[self::SIGN]);\n        while (self::compareHelper($result[self::VALUE], $result[self::SIGN], $n, false) > 0) {\n            $result = $class::subtractHelper($result[self::VALUE], $result[self::SIGN], $n, false);\n        }\n\n        return $result[self::VALUE];\n    }\n\n    /**\n     * Performs long multiplication up to $stop digits\n     *\n     * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.\n     *\n     * @see self::regularBarrett()\n     * @param array $x_value\n     * @param bool $x_negative\n     * @param array $y_value\n     * @param bool $y_negative\n     * @param int $stop\n     * @param string $class\n     * @return array\n     */\n    private static function multiplyLower(array $x_value, $x_negative, array $y_value, $y_negative, $stop, $class)\n    {\n        $x_length = count($x_value);\n        $y_length = count($y_value);\n\n        if (!$x_length || !$y_length) { // a 0 is being multiplied\n            return [\n                self::VALUE => [],\n                self::SIGN => false\n            ];\n        }\n\n        if ($x_length < $y_length) {\n            $temp = $x_value;\n            $x_value = $y_value;\n            $y_value = $temp;\n\n            $x_length = count($x_value);\n            $y_length = count($y_value);\n        }\n\n        $product_value = self::array_repeat(0, $x_length + $y_length);\n\n        // the following for loop could be removed if the for loop following it\n        // (the one with nested for loops) initially set $i to 0, but\n        // doing so would also make the result in one set of unnecessary adds,\n        // since on the outermost loops first pass, $product->value[$k] is going\n        // to always be 0\n\n        $carry = 0;\n\n        for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i\n            $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0\n            $carry = $class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n            $product_value[$j] = (int) ($temp - $class::BASE_FULL * $carry);\n        }\n\n        if ($j < $stop) {\n            $product_value[$j] = $carry;\n        }\n\n        // the above for loop is what the previous comment was talking about.  the\n        // following for loop is the \"one with nested for loops\"\n\n        for ($i = 1; $i < $y_length; ++$i) {\n            $carry = 0;\n\n            for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) {\n                $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;\n                $carry = $class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n                $product_value[$k] = (int) ($temp - $class::BASE_FULL * $carry);\n            }\n\n            if ($k < $stop) {\n                $product_value[$k] = $carry;\n            }\n        }\n\n        return [\n            self::VALUE => self::trim($product_value),\n            self::SIGN => $x_negative != $y_negative\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Classic.php",
    "content": "<?php\n\n/**\n * PHP Classic Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Base;\n\n/**\n * PHP Classic Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Classic extends Base\n{\n    /**\n     * Regular Division\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @return array\n     */\n    protected static function reduce(array $x, array $n, $class)\n    {\n        $lhs = new $class();\n        $lhs->value = $x;\n        $rhs = new $class();\n        $rhs->value = $n;\n        list(, $temp) = $lhs->divide($rhs);\n        return $temp->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/EvalBarrett.php",
    "content": "<?php\n\n/**\n * PHP Dynamic Barrett Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP;\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Base;\n\n/**\n * PHP Dynamic Barrett Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class EvalBarrett extends Base\n{\n    /**\n     * Custom Reduction Function\n     *\n     * @see self::generateCustomReduction\n     */\n    private static $custom_reduction;\n\n    /**\n     * Barrett Modular Reduction\n     *\n     * This calls a dynamically generated loop unrolled function that's specific to a given modulo.\n     * Array lookups are avoided as are if statements testing for how many bits the host OS supports, etc.\n     *\n     * @param array $n\n     * @param array $m\n     * @param string $class\n     * @return array\n     */\n    protected static function reduce(array $n, array $m, $class)\n    {\n        $inline = self::$custom_reduction;\n        return $inline($n);\n    }\n\n    /**\n     * Generate Custom Reduction\n     *\n     * @param PHP $m\n     * @param string $class\n     * @return callable\n     */\n    protected static function generateCustomReduction(PHP $m, $class)\n    {\n        $m_length = count($m->value);\n\n        if ($m_length < 5) {\n            $code = '\n                $lhs = new ' . $class . '();\n                $lhs->value = $x;\n                $rhs = new ' . $class . '();\n                $rhs->value = [' .\n                implode(',', array_map(self::class . '::float2string', $m->value)) . '];\n                list(, $temp) = $lhs->divide($rhs);\n                return $temp->value;\n            ';\n            eval('$func = function ($x) { ' . $code . '};');\n            self::$custom_reduction = $func;\n            //self::$custom_reduction = \\Closure::bind($func, $m, $class);\n            return $func;\n        }\n\n        $correctionNeeded = false;\n        if ($m_length & 1) {\n            $correctionNeeded = true;\n            $m = clone $m;\n            array_unshift($m->value, 0);\n            $m_length++;\n        }\n\n        $lhs = new $class();\n        $lhs_value = &$lhs->value;\n\n        $lhs_value = self::array_repeat(0, $m_length + ($m_length >> 1));\n        $lhs_value[] = 1;\n        $rhs = new $class();\n\n        list($u, $m1) = $lhs->divide($m);\n\n        if ($class::BASE != 26) {\n            $u = $u->value;\n        } else {\n            $lhs_value = self::array_repeat(0, 2 * $m_length);\n            $lhs_value[] = 1;\n            $rhs = new $class();\n\n            list($u) = $lhs->divide($m);\n            $u = $u->value;\n        }\n\n        $m = $m->value;\n        $m1 = $m1->value;\n\n        $cutoff = count($m) + (count($m) >> 1);\n\n        $code = $correctionNeeded ?\n            'array_unshift($n, 0);' :\n            '';\n\n        $code .= '\n            if (count($n) > ' . (2 * count($m)) . ') {\n                $lhs = new ' . $class . '();\n                $rhs = new ' . $class . '();\n                $lhs->value = $n;\n                $rhs->value = [' .\n                implode(',', array_map(self::class . '::float2string', $m)) . '];\n                list(, $temp) = $lhs->divide($rhs);\n                return $temp->value;\n            }\n\n            $lsd = array_slice($n, 0, ' . $cutoff . ');\n            $msd = array_slice($n, ' . $cutoff . ');';\n\n        $code .= self::generateInlineTrim('msd');\n        $code .= self::generateInlineMultiply('msd', $m1, 'temp', $class);\n        $code .= self::generateInlineAdd('lsd', 'temp', 'n', $class);\n\n        $code .= '$temp = array_slice($n, ' . (count($m) - 1) . ');';\n        $code .= self::generateInlineMultiply('temp', $u, 'temp2', $class);\n        $code .= self::generateInlineTrim('temp2');\n\n        $code .= $class::BASE == 26 ?\n            '$temp = array_slice($temp2, ' . (count($m) + 1) . ');' :\n            '$temp = array_slice($temp2, ' . ((count($m) >> 1) + 1) . ');';\n        $code .= self::generateInlineMultiply('temp', $m, 'temp2', $class);\n        $code .= self::generateInlineTrim('temp2');\n\n        /*\n        if ($class::BASE == 26) {\n            $code.= '$n = array_slice($n, 0, ' . (count($m) + 1) . ');\n                     $temp2 = array_slice($temp2, 0, ' . (count($m) + 1) . ');';\n        }\n        */\n\n        $code .= self::generateInlineSubtract2('n', 'temp2', 'temp', $class);\n\n        $subcode = self::generateInlineSubtract1('temp', $m, 'temp2', $class);\n        $subcode .= '$temp = $temp2;';\n\n        $code .= self::generateInlineCompare($m, 'temp', $subcode);\n\n        if ($correctionNeeded) {\n            $code .= 'array_shift($temp);';\n        }\n\n        $code .= 'return $temp;';\n\n        eval('$func = function ($n) { ' . $code . '};');\n\n        self::$custom_reduction = $func;\n\n        return $func;\n\n        //self::$custom_reduction = \\Closure::bind($func, $m, $class);\n    }\n\n    /**\n     * Inline Trim\n     *\n     * Removes leading zeros\n     *\n     * @param string $name\n     * @return string\n     */\n    private static function generateInlineTrim($name)\n    {\n        return '\n            for ($i = count($' . $name . ') - 1; $i >= 0; --$i) {\n                if ($' . $name . '[$i]) {\n                    break;\n                }\n                unset($' . $name . '[$i]);\n            }';\n    }\n\n    /**\n     * Inline Multiply (unknown, known)\n     *\n     * @param string $input\n     * @param array $arr\n     * @param string $output\n     * @param string $class\n     * @return string\n     */\n    private static function generateInlineMultiply($input, array $arr, $output, $class)\n    {\n        if (!count($arr)) {\n            return 'return [];';\n        }\n\n        $regular = '\n            $length = count($' . $input . ');\n            if (!$length) {\n                $' . $output . ' = [];\n            }else{\n            $' . $output . ' = array_fill(0, $length + ' . count($arr) . ', 0);\n            $carry = 0;';\n\n        for ($i = 0; $i < count($arr); $i++) {\n            $regular .= '\n                $subtemp = $' . $input . '[0] * ' . $arr[$i];\n            $regular .= $i ? ' + $carry;' : ';';\n\n            $regular .= '$carry = ';\n            $regular .= $class::BASE === 26 ?\n            'intval($subtemp / 0x4000000);' :\n            '$subtemp >> 31;';\n            $regular .=\n            '$' . $output . '[' . $i . '] = ';\n            if ($class::BASE === 26) {\n                $regular .= '(int) (';\n            }\n            $regular .= '$subtemp - ' . $class::BASE_FULL . ' * $carry';\n            $regular .= $class::BASE === 26 ? ');' : ';';\n        }\n\n        $regular .= '$' . $output . '[' . count($arr) . '] = $carry;';\n\n        $regular .= '\n            for ($i = 1; $i < $length; ++$i) {';\n\n        for ($j = 0; $j < count($arr); $j++) {\n            $regular .= $j ? '$k++;' : '$k = $i;';\n            $regular .= '\n                $subtemp = $' . $output . '[$k] + $' . $input . '[$i] * ' . $arr[$j];\n            $regular .= $j ? ' + $carry;' : ';';\n\n            $regular .= '$carry = ';\n            $regular .= $class::BASE === 26 ?\n                'intval($subtemp / 0x4000000);' :\n                '$subtemp >> 31;';\n            $regular .=\n                '$' . $output . '[$k] = ';\n            if ($class::BASE === 26) {\n                $regular .= '(int) (';\n            }\n            $regular .= '$subtemp - ' . $class::BASE_FULL . ' * $carry';\n            $regular .= $class::BASE === 26 ? ');' : ';';\n        }\n\n        $regular .= '$' . $output . '[++$k] = $carry; $carry = 0;';\n\n        $regular .= '}}';\n\n        //if (count($arr) < 2 * self::KARATSUBA_CUTOFF) {\n        //}\n\n        return $regular;\n    }\n\n    /**\n     * Inline Addition\n     *\n     * @param string $x\n     * @param string $y\n     * @param string $result\n     * @param string $class\n     * @return string\n     */\n    private static function generateInlineAdd($x, $y, $result, $class)\n    {\n        $code = '\n            $length = max(count($' . $x . '), count($' . $y . '));\n            $' . $result . ' = array_pad($' . $x . ', $length + 1, 0);\n            $_' . $y . ' = array_pad($' . $y . ', $length, 0);\n            $carry = 0;\n            for ($i = 0, $j = 1; $j < $length; $i+=2, $j+=2) {\n                $sum = ($' . $result . '[$j] + $_' . $y . '[$j]) * ' . $class::BASE_FULL . '\n                           + $' . $result . '[$i] + $_' . $y . '[$i] +\n                           $carry;\n                $carry = $sum >= ' . self::float2string($class::MAX_DIGIT2) . ';\n                $sum = $carry ? $sum - ' . self::float2string($class::MAX_DIGIT2) . ' : $sum;';\n\n            $code .= $class::BASE === 26 ?\n                '$upper = intval($sum / 0x4000000); $' . $result . '[$i] = (int) ($sum - ' . $class::BASE_FULL . ' * $upper);' :\n                '$upper = $sum >> 31; $' . $result . '[$i] = $sum - ' . $class::BASE_FULL . ' * $upper;';\n            $code .= '\n                $' . $result . '[$j] = $upper;\n            }\n            if ($j == $length) {\n                $sum = $' . $result . '[$i] + $_' . $y . '[$i] + $carry;\n                $carry = $sum >= ' . self::float2string($class::BASE_FULL) . ';\n                $' . $result . '[$i] = $carry ? $sum - ' . self::float2string($class::BASE_FULL) . ' : $sum;\n                ++$i;\n            }\n            if ($carry) {\n                for (; $' . $result . '[$i] == ' . $class::MAX_DIGIT . '; ++$i) {\n                    $' . $result . '[$i] = 0;\n                }\n                ++$' . $result . '[$i];\n            }';\n            $code .= self::generateInlineTrim($result);\n\n            return $code;\n    }\n\n    /**\n     * Inline Subtraction 2\n     *\n     * For when $known is more digits than $unknown. This is the harder use case to optimize for.\n     *\n     * @param string $known\n     * @param string $unknown\n     * @param string $result\n     * @param string $class\n     * @return string\n     */\n    private static function generateInlineSubtract2($known, $unknown, $result, $class)\n    {\n        $code = '\n            $' . $result . ' = $' . $known . ';\n            $carry = 0;\n            $size = count($' . $unknown . ');\n            for ($i = 0, $j = 1; $j < $size; $i+= 2, $j+= 2) {\n                $sum = ($' . $known . '[$j] - $' . $unknown . '[$j]) * ' . $class::BASE_FULL . ' + $' . $known . '[$i]\n                    - $' . $unknown . '[$i]\n                    - $carry;\n                $carry = $sum < 0;\n                if ($carry) {\n                    $sum+= ' . self::float2string($class::MAX_DIGIT2) . ';\n                }\n                $subtemp = ';\n        $code .= $class::BASE === 26 ?\n            'intval($sum / 0x4000000);' :\n            '$sum >> 31;';\n        $code .= '$' . $result . '[$i] = ';\n        if ($class::BASE === 26) {\n            $code .= '(int) (';\n        }\n        $code .= '$sum - ' . $class::BASE_FULL . ' * $subtemp';\n        if ($class::BASE === 26) {\n            $code .= ')';\n        }\n        $code .= ';\n                $' . $result . '[$j] = $subtemp;\n            }\n            if ($j == $size) {\n                $sum = $' . $known . '[$i] - $' . $unknown . '[$i] - $carry;\n                $carry = $sum < 0;\n                $' . $result . '[$i] = $carry ? $sum + ' . $class::BASE_FULL . ' : $sum;\n                ++$i;\n            }\n\n            if ($carry) {\n                for (; !$' . $result . '[$i]; ++$i) {\n                    $' . $result . '[$i] = ' . $class::MAX_DIGIT . ';\n                }\n                --$' . $result . '[$i];\n            }';\n\n        $code .= self::generateInlineTrim($result);\n\n        return $code;\n    }\n\n    /**\n     * Inline Subtraction 1\n     *\n     * For when $unknown is more digits than $known. This is the easier use case to optimize for.\n     *\n     * @param string $unknown\n     * @param array $known\n     * @param string $result\n     * @param string $class\n     * @return string\n     */\n    private static function generateInlineSubtract1($unknown, array $known, $result, $class)\n    {\n        $code = '$' . $result . ' = $' . $unknown . ';';\n        for ($i = 0, $j = 1; $j < count($known); $i += 2, $j += 2) {\n            $code .= '$sum = $' . $unknown . '[' . $j . '] * ' . $class::BASE_FULL . ' + $' . $unknown . '[' . $i . '] - ';\n            $code .= self::float2string($known[$j] * $class::BASE_FULL + $known[$i]);\n            if ($i != 0) {\n                $code .= ' - $carry';\n            }\n\n            $code .= ';\n                if ($carry = $sum < 0) {\n                    $sum+= ' . self::float2string($class::MAX_DIGIT2) . ';\n                }\n                $subtemp = ';\n            $code .= $class::BASE === 26 ?\n                'intval($sum / 0x4000000);' :\n                '$sum >> 31;';\n            $code .= '\n                $' . $result . '[' . $i . '] = ';\n            if ($class::BASE === 26) {\n                $code .= ' (int) (';\n            }\n            $code .= '$sum - ' . $class::BASE_FULL . ' * $subtemp';\n            if ($class::BASE === 26) {\n                $code .= ')';\n            }\n            $code .= ';\n                $' . $result . '[' . $j . '] = $subtemp;';\n        }\n\n        $code .= '$i = ' . $i . ';';\n\n        if ($j == count($known)) {\n            $code .= '\n                $sum = $' . $unknown . '[' . $i . '] - ' . $known[$i] . ' - $carry;\n                $carry = $sum < 0;\n                $' . $result . '[' . $i . '] = $carry ? $sum + ' . $class::BASE_FULL . ' : $sum;\n                ++$i;';\n        }\n\n        $code .= '\n            if ($carry) {\n                for (; !$' . $result . '[$i]; ++$i) {\n                    $' . $result . '[$i] = ' . $class::MAX_DIGIT . ';\n                }\n                --$' . $result . '[$i];\n            }';\n        $code .= self::generateInlineTrim($result);\n\n        return $code;\n    }\n\n    /**\n     * Inline Comparison\n     *\n     * If $unknown >= $known then loop\n     *\n     * @param array $known\n     * @param string $unknown\n     * @param string $subcode\n     * @return string\n     */\n    private static function generateInlineCompare(array $known, $unknown, $subcode)\n    {\n        $uniqid = uniqid();\n        $code = 'loop_' . $uniqid . ':\n            $clength = count($' . $unknown . ');\n            switch (true) {\n                case $clength < ' . count($known) . ':\n                    goto end_' . $uniqid . ';\n                case $clength > ' . count($known) . ':';\n        for ($i = count($known) - 1; $i >= 0; $i--) {\n            $code .= '\n                case $' . $unknown . '[' . $i . '] > ' . $known[$i] . ':\n                    goto subcode_' . $uniqid . ';\n                case $' . $unknown . '[' . $i . '] < ' . $known[$i] . ':\n                    goto end_' . $uniqid . ';';\n        }\n        $code .= '\n                default:\n                    // do subcode\n            }\n\n            subcode_' . $uniqid . ':' . $subcode . '\n            goto loop_' . $uniqid . ';\n\n            end_' . $uniqid . ':';\n\n        return $code;\n    }\n\n    /**\n     * Convert a float to a string\n     *\n     * If you do echo floatval(pow(2, 52)) you'll get 4.6116860184274E+18. It /can/ be displayed without a loss of\n     * precision but displayed in this way there will be precision loss, hence the need for this method.\n     *\n     * @param int|float $num\n     * @return string\n     */\n    private static function float2string($num)\n    {\n        if (!is_float($num)) {\n            return (string) $num;\n        }\n\n        if ($num < 0) {\n            return '-' . self::float2string(abs($num));\n        }\n\n        $temp = '';\n        while ($num) {\n            $temp = fmod($num, 10) . $temp;\n            $num = floor($num / 10);\n        }\n\n        return $temp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Montgomery.php",
    "content": "<?php\n\n/**\n * PHP Montgomery Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Montgomery as Progenitor;\n\n/**\n * PHP Montgomery Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Montgomery extends Progenitor\n{\n    /**\n     * Prepare a number for use in Montgomery Modular Reductions\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @return array\n     */\n    protected static function prepareReduce(array $x, array $n, $class)\n    {\n        $lhs = new $class();\n        $lhs->value = array_merge(self::array_repeat(0, count($n)), $x);\n        $rhs = new $class();\n        $rhs->value = $n;\n\n        list(, $temp) = $lhs->divide($rhs);\n        return $temp->value;\n    }\n\n    /**\n     * Montgomery Multiply\n     *\n     * Interleaves the montgomery reduction and long multiplication algorithms together as described in\n     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @return array\n     */\n    protected static function reduce(array $x, array $n, $class)\n    {\n        static $cache = [\n            self::VARIABLE => [],\n            self::DATA => []\n        ];\n\n        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {\n            $key = count($cache[self::VARIABLE]);\n            $cache[self::VARIABLE][] = $x;\n            $cache[self::DATA][] = self::modInverse67108864($n, $class);\n        }\n\n        $k = count($n);\n\n        $result = [self::VALUE => $x];\n\n        for ($i = 0; $i < $k; ++$i) {\n            $temp = $result[self::VALUE][$i] * $cache[self::DATA][$key];\n            $temp = $temp - $class::BASE_FULL * ($class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31));\n            $temp = $class::regularMultiply([$temp], $n);\n            $temp = array_merge(self::array_repeat(0, $i), $temp);\n            $result = $class::addHelper($result[self::VALUE], false, $temp, false);\n        }\n\n        $result[self::VALUE] = array_slice($result[self::VALUE], $k);\n\n        if (self::compareHelper($result, false, $n, false) >= 0) {\n            $result = $class::subtractHelper($result[self::VALUE], false, $n, false);\n        }\n\n        return $result[self::VALUE];\n    }\n\n    /**\n     * Modular Inverse of a number mod 2**26 (eg. 67108864)\n     *\n     * Based off of the bnpInvDigit function implemented and justified in the following URL:\n     *\n     * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js}\n     *\n     * The following URL provides more info:\n     *\n     * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}\n     *\n     * As for why we do all the bitmasking...  strange things can happen when converting from floats to ints. For\n     * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields\n     * int(-2147483648).  To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't\n     * auto-converted to floats.  The outermost bitmask is present because without it, there's no guarantee that\n     * the \"residue\" returned would be the so-called \"common residue\".  We use fmod, in the last step, because the\n     * maximum possible $x is 26 bits and the maximum $result is 16 bits.  Thus, we have to be able to handle up to\n     * 40 bits, which only 64-bit floating points will support.\n     *\n     * Thanks to Pedro Gimeno Fortea for input!\n     *\n     * @param array $x\n     * @param string $class\n     * @return int\n     */\n    protected static function modInverse67108864(array $x, $class) // 2**26 == 67,108,864\n    {\n        $x = -$x[0];\n        $result = $x & 0x3; // x**-1 mod 2**2\n        $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4\n        $result = ($result * (2 - ($x & 0xFF) * $result))  & 0xFF; // x**-1 mod 2**8\n        $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16\n        $result = $class::BASE == 26 ?\n            fmod($result * (2 - fmod($x * $result, $class::BASE_FULL)), $class::BASE_FULL) : // x**-1 mod 2**26\n            ($result * (2 - ($x * $result) % $class::BASE_FULL)) % $class::BASE_FULL;\n        return $result & $class::MAX_DIGIT;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/MontgomeryMult.php",
    "content": "<?php\n\n/**\n * PHP Montgomery Modular Exponentiation Engine with interleaved multiplication\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP;\n\n/**\n * PHP Montgomery Modular Exponentiation Engine with interleaved multiplication\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class MontgomeryMult extends Montgomery\n{\n    /**\n     * Montgomery Multiply\n     *\n     * Interleaves the montgomery reduction and long multiplication algorithms together as described in\n     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}\n     *\n     * @see self::_prepMontgomery()\n     * @see self::_montgomery()\n     * @param array $x\n     * @param array $y\n     * @param array $m\n     * @param class-string<PHP> $class\n     * @return array\n     */\n    public static function multiplyReduce(array $x, array $y, array $m, $class)\n    {\n        // the following code, although not callable, can be run independently of the above code\n        // although the above code performed better in my benchmarks the following could might\n        // perform better under different circumstances. in lieu of deleting it it's just been\n        // made uncallable\n\n        static $cache = [\n            self::VARIABLE => [],\n            self::DATA => []\n        ];\n\n        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {\n            $key = count($cache[self::VARIABLE]);\n            $cache[self::VARIABLE][] = $m;\n            $cache[self::DATA][] = self::modInverse67108864($m, $class);\n        }\n\n        $n = max(count($x), count($y), count($m));\n        $x = array_pad($x, $n, 0);\n        $y = array_pad($y, $n, 0);\n        $m = array_pad($m, $n, 0);\n        $a = [self::VALUE => self::array_repeat(0, $n + 1)];\n        for ($i = 0; $i < $n; ++$i) {\n            $temp = $a[self::VALUE][0] + $x[$i] * $y[0];\n            $temp = $temp - $class::BASE_FULL * ($class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31));\n            $temp = $temp * $cache[self::DATA][$key];\n            $temp = $temp - $class::BASE_FULL * ($class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31));\n            $temp = $class::addHelper($class::regularMultiply([$x[$i]], $y), false, $class::regularMultiply([$temp], $m), false);\n            $a = $class::addHelper($a[self::VALUE], false, $temp[self::VALUE], false);\n            $a[self::VALUE] = array_slice($a[self::VALUE], 1);\n        }\n        if (self::compareHelper($a[self::VALUE], false, $m, false) >= 0) {\n            $a = $class::subtractHelper($a[self::VALUE], false, $m, false);\n        }\n        return $a[self::VALUE];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/PowerOfTwo.php",
    "content": "<?php\n\n/**\n * PHP Power of Two Modular Exponentiation Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Reductions;\n\nuse phpseclib3\\Math\\BigInteger\\Engines\\PHP\\Base;\n\n/**\n * PHP Power Of Two Modular Exponentiation Engine\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PowerOfTwo extends Base\n{\n    /**\n     * Prepare a number for use in Montgomery Modular Reductions\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @return array\n     */\n    protected static function prepareReduce(array $x, array $n, $class)\n    {\n        return self::reduce($x, $n, $class);\n    }\n\n    /**\n     * Power Of Two Reduction\n     *\n     * @param array $x\n     * @param array $n\n     * @param string $class\n     * @return array\n     */\n    protected static function reduce(array $x, array $n, $class)\n    {\n        $lhs = new $class();\n        $lhs->value = $x;\n        $rhs = new $class();\n        $rhs->value = $n;\n\n        $temp = new $class();\n        $temp->value = [1];\n\n        $result = $lhs->bitwise_and($rhs->subtract($temp));\n        return $result->value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP.php",
    "content": "<?php\n\n/**\n * Pure-PHP BigInteger Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\BadConfigurationException;\n\n/**\n * Pure-PHP Engine.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class PHP extends Engine\n{\n    /**#@+\n     * Array constants\n     *\n     * Rather than create a thousands and thousands of new BigInteger objects in repeated function calls to add() and\n     * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.\n     *\n     */\n    /**\n     * $result[self::VALUE] contains the value.\n     */\n    const VALUE = 0;\n    /**\n     * $result[self::SIGN] contains the sign.\n     */\n    const SIGN = 1;\n    /**#@-*/\n\n    /**\n     * Karatsuba Cutoff\n     *\n     * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?\n     *\n     */\n    const KARATSUBA_CUTOFF = 25;\n\n    /**\n     * Can Bitwise operations be done fast?\n     *\n     * @see parent::bitwise_leftRotate()\n     * @see parent::bitwise_rightRotate()\n     */\n    const FAST_BITWISE = true;\n\n    /**\n     * Engine Directory\n     *\n     * @see parent::setModExpEngine\n     */\n    const ENGINE_DIR = 'PHP';\n\n    /**\n     * Default constructor\n     *\n     * @param mixed $x integer Base-10 number or base-$base number if $base set.\n     * @param int $base\n     * @return PHP\n     * @see parent::__construct()\n     */\n    public function __construct($x = 0, $base = 10)\n    {\n        if (!isset(static::$isValidEngine[static::class])) {\n            static::$isValidEngine[static::class] = static::isValidEngine();\n        }\n        if (!static::$isValidEngine[static::class]) {\n            throw new BadConfigurationException(static::class . ' is not setup correctly on this system');\n        }\n\n        $this->value = [];\n        parent::__construct($x, $base);\n    }\n\n    /**\n     * Initialize a PHP BigInteger Engine instance\n     *\n     * @param int $base\n     * @see parent::__construct()\n     */\n    protected function initialize($base)\n    {\n        switch (abs($base)) {\n            case 16:\n                $x = (strlen($this->value) & 1) ? '0' . $this->value : $this->value;\n                $temp = new static(Strings::hex2bin($x), 256);\n                $this->value = $temp->value;\n                break;\n            case 10:\n                $temp = new static();\n\n                $multiplier = new static();\n                $multiplier->value = [static::MAX10];\n\n                $x = $this->value;\n\n                if ($x[0] == '-') {\n                    $this->is_negative = true;\n                    $x = substr($x, 1);\n                }\n\n                $x = str_pad(\n                    $x,\n                    strlen($x) + ((static::MAX10LEN - 1) * strlen($x)) % static::MAX10LEN,\n                    0,\n                    STR_PAD_LEFT\n                );\n                while (strlen($x)) {\n                    $temp = $temp->multiply($multiplier);\n                    $temp = $temp->add(new static($this->int2bytes(substr($x, 0, static::MAX10LEN)), 256));\n                    $x = substr($x, static::MAX10LEN);\n                }\n\n                $this->value = $temp->value;\n        }\n    }\n\n    /**\n     * Pads strings so that unpack may be used on them\n     *\n     * @param string $str\n     * @return string\n     */\n    protected function pad($str)\n    {\n        $length = strlen($str);\n\n        $pad = 4 - (strlen($str) % 4);\n\n        return str_pad($str, $length + $pad, \"\\0\", STR_PAD_LEFT);\n    }\n\n    /**\n     * Converts a BigInteger to a base-10 number.\n     *\n     * @return string\n     */\n    public function toString()\n    {\n        if (!count($this->value)) {\n            return '0';\n        }\n\n        $temp = clone $this;\n        $temp->bitmask = false;\n        $temp->is_negative = false;\n\n        $divisor = new static();\n        $divisor->value = [static::MAX10];\n        $result = '';\n        while (count($temp->value)) {\n            list($temp, $mod) = $temp->divide($divisor);\n            $result = str_pad(\n                isset($mod->value[0]) ? $mod->value[0] : '',\n                static::MAX10LEN,\n                '0',\n                STR_PAD_LEFT\n            ) . $result;\n        }\n        $result = ltrim($result, '0');\n        if (empty($result)) {\n            $result = '0';\n        }\n\n        if ($this->is_negative) {\n            $result = '-' . $result;\n        }\n\n        return $result;\n    }\n\n    /**\n     * Converts a BigInteger to a byte string (eg. base-256).\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBytes($twos_compliment = false)\n    {\n        if ($twos_compliment) {\n            return $this->toBytesHelper();\n        }\n\n        if (!count($this->value)) {\n            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';\n        }\n\n        $result = $this->bitwise_small_split(8);\n        $result = implode('', array_map('chr', $result));\n\n        return $this->precision > 0 ?\n            str_pad(\n                substr($result, -(($this->precision + 7) >> 3)),\n                ($this->precision + 7) >> 3,\n                chr(0),\n                STR_PAD_LEFT\n            ) :\n            $result;\n    }\n\n    /**\n     * Performs addition.\n     *\n     * @param array $x_value\n     * @param bool $x_negative\n     * @param array $y_value\n     * @param bool $y_negative\n     * @return array\n     */\n    protected static function addHelper(array $x_value, $x_negative, array $y_value, $y_negative)\n    {\n        $x_size = count($x_value);\n        $y_size = count($y_value);\n\n        if ($x_size == 0) {\n            return [\n                self::VALUE => $y_value,\n                self::SIGN => $y_negative\n            ];\n        } elseif ($y_size == 0) {\n            return [\n                self::VALUE => $x_value,\n                self::SIGN => $x_negative\n            ];\n        }\n\n        // subtract, if appropriate\n        if ($x_negative != $y_negative) {\n            if ($x_value == $y_value) {\n                return [\n                    self::VALUE => [],\n                    self::SIGN => false\n                ];\n            }\n\n            $temp = self::subtractHelper($x_value, false, $y_value, false);\n            $temp[self::SIGN] = self::compareHelper($x_value, false, $y_value, false) > 0 ?\n                $x_negative : $y_negative;\n\n            return $temp;\n        }\n\n        if ($x_size < $y_size) {\n            $size = $x_size;\n            $value = $y_value;\n        } else {\n            $size = $y_size;\n            $value = $x_value;\n        }\n\n        $value[count($value)] = 0; // just in case the carry adds an extra digit\n\n        $carry = 0;\n        for ($i = 0, $j = 1; $j < $size; $i += 2, $j += 2) {\n            //$sum = $x_value[$j] * static::BASE_FULL + $x_value[$i] + $y_value[$j] * static::BASE_FULL + $y_value[$i] + $carry;\n            $sum = ($x_value[$j] + $y_value[$j]) * static::BASE_FULL + $x_value[$i] + $y_value[$i] + $carry;\n            $carry = $sum >= static::MAX_DIGIT2; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1\n            $sum = $carry ? $sum - static::MAX_DIGIT2 : $sum;\n\n            $temp = static::BASE === 26 ? intval($sum / 0x4000000) : ($sum >> 31);\n\n            $value[$i] = (int)($sum - static::BASE_FULL * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)\n            $value[$j] = $temp;\n        }\n\n        if ($j == $size) { // ie. if $y_size is odd\n            $sum = $x_value[$i] + $y_value[$i] + $carry;\n            $carry = $sum >= static::BASE_FULL;\n            $value[$i] = $carry ? $sum - static::BASE_FULL : $sum;\n            ++$i; // ie. let $i = $j since we've just done $value[$i]\n        }\n\n        if ($carry) {\n            for (; $value[$i] == static::MAX_DIGIT; ++$i) {\n                $value[$i] = 0;\n            }\n            ++$value[$i];\n        }\n\n        return [\n            self::VALUE => self::trim($value),\n            self::SIGN => $x_negative\n        ];\n    }\n\n    /**\n     * Performs subtraction.\n     *\n     * @param array $x_value\n     * @param bool $x_negative\n     * @param array $y_value\n     * @param bool $y_negative\n     * @return array\n     */\n    public static function subtractHelper(array $x_value, $x_negative, array $y_value, $y_negative)\n    {\n        $x_size = count($x_value);\n        $y_size = count($y_value);\n\n        if ($x_size == 0) {\n            return [\n                self::VALUE => $y_value,\n                self::SIGN => !$y_negative\n            ];\n        } elseif ($y_size == 0) {\n            return [\n                self::VALUE => $x_value,\n                self::SIGN => $x_negative\n            ];\n        }\n\n        // add, if appropriate (ie. -$x - +$y or +$x - -$y)\n        if ($x_negative != $y_negative) {\n            $temp = self::addHelper($x_value, false, $y_value, false);\n            $temp[self::SIGN] = $x_negative;\n\n            return $temp;\n        }\n\n        $diff = self::compareHelper($x_value, $x_negative, $y_value, $y_negative);\n\n        if (!$diff) {\n            return [\n                self::VALUE => [],\n                self::SIGN => false\n            ];\n        }\n\n        // switch $x and $y around, if appropriate.\n        if ((!$x_negative && $diff < 0) || ($x_negative && $diff > 0)) {\n            $temp = $x_value;\n            $x_value = $y_value;\n            $y_value = $temp;\n\n            $x_negative = !$x_negative;\n\n            $x_size = count($x_value);\n            $y_size = count($y_value);\n        }\n\n        // at this point, $x_value should be at least as big as - if not bigger than - $y_value\n\n        $carry = 0;\n        for ($i = 0, $j = 1; $j < $y_size; $i += 2, $j += 2) {\n            $sum = ($x_value[$j] - $y_value[$j]) * static::BASE_FULL + $x_value[$i] - $y_value[$i] - $carry;\n\n            $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1\n            $sum = $carry ? $sum + static::MAX_DIGIT2 : $sum;\n\n            $temp = static::BASE === 26 ? intval($sum / 0x4000000) : ($sum >> 31);\n\n            $x_value[$i] = (int)($sum - static::BASE_FULL * $temp);\n            $x_value[$j] = $temp;\n        }\n\n        if ($j == $y_size) { // ie. if $y_size is odd\n            $sum = $x_value[$i] - $y_value[$i] - $carry;\n            $carry = $sum < 0;\n            $x_value[$i] = $carry ? $sum + static::BASE_FULL : $sum;\n            ++$i;\n        }\n\n        if ($carry) {\n            for (; !$x_value[$i]; ++$i) {\n                $x_value[$i] = static::MAX_DIGIT;\n            }\n            --$x_value[$i];\n        }\n\n        return [\n            self::VALUE => self::trim($x_value),\n            self::SIGN => $x_negative\n        ];\n    }\n\n    /**\n     * Performs multiplication.\n     *\n     * @param array $x_value\n     * @param bool $x_negative\n     * @param array $y_value\n     * @param bool $y_negative\n     * @return array\n     */\n    protected static function multiplyHelper(array $x_value, $x_negative, array $y_value, $y_negative)\n    {\n        //if ( $x_value == $y_value ) {\n        //    return [\n        //        self::VALUE => self::square($x_value),\n        //        self::SIGN => $x_sign != $y_value\n        //    ];\n        //}\n\n        $x_length = count($x_value);\n        $y_length = count($y_value);\n\n        if (!$x_length || !$y_length) { // a 0 is being multiplied\n            return [\n                self::VALUE => [],\n                self::SIGN => false\n            ];\n        }\n\n        return [\n            self::VALUE => min($x_length, $y_length) < 2 * self::KARATSUBA_CUTOFF ?\n                self::trim(self::regularMultiply($x_value, $y_value)) :\n                self::trim(self::karatsuba($x_value, $y_value)),\n            self::SIGN => $x_negative != $y_negative\n        ];\n    }\n\n    /**\n     * Performs Karatsuba multiplication on two BigIntegers\n     *\n     * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.\n     *\n     * @param array $x_value\n     * @param array $y_value\n     * @return array\n     */\n    private static function karatsuba(array $x_value, array $y_value)\n    {\n        $m = min(count($x_value) >> 1, count($y_value) >> 1);\n\n        if ($m < self::KARATSUBA_CUTOFF) {\n            return self::regularMultiply($x_value, $y_value);\n        }\n\n        $x1 = array_slice($x_value, $m);\n        $x0 = array_slice($x_value, 0, $m);\n        $y1 = array_slice($y_value, $m);\n        $y0 = array_slice($y_value, 0, $m);\n\n        $z2 = self::karatsuba($x1, $y1);\n        $z0 = self::karatsuba($x0, $y0);\n\n        $z1 = self::addHelper($x1, false, $x0, false);\n        $temp = self::addHelper($y1, false, $y0, false);\n        $z1 = self::karatsuba($z1[self::VALUE], $temp[self::VALUE]);\n        $temp = self::addHelper($z2, false, $z0, false);\n        $z1 = self::subtractHelper($z1, false, $temp[self::VALUE], false);\n\n        $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);\n        $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]);\n\n        $xy = self::addHelper($z2, false, $z1[self::VALUE], $z1[self::SIGN]);\n        $xy = self::addHelper($xy[self::VALUE], $xy[self::SIGN], $z0, false);\n\n        return $xy[self::VALUE];\n    }\n\n    /**\n     * Performs long multiplication on two BigIntegers\n     *\n     * Modeled after 'multiply' in MutableBigInteger.java.\n     *\n     * @param array $x_value\n     * @param array $y_value\n     * @return array\n     */\n    protected static function regularMultiply(array $x_value, array $y_value)\n    {\n        $x_length = count($x_value);\n        $y_length = count($y_value);\n\n        if (!$x_length || !$y_length) { // a 0 is being multiplied\n            return [];\n        }\n\n        $product_value = self::array_repeat(0, $x_length + $y_length);\n\n        // the following for loop could be removed if the for loop following it\n        // (the one with nested for loops) initially set $i to 0, but\n        // doing so would also make the result in one set of unnecessary adds,\n        // since on the outermost loops first pass, $product->value[$k] is going\n        // to always be 0\n\n        $carry = 0;\n        for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0\n            $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0\n            $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n            $product_value[$j] = (int)($temp - static::BASE_FULL * $carry);\n        }\n\n        $product_value[$j] = $carry;\n\n        // the above for loop is what the previous comment was talking about.  the\n        // following for loop is the \"one with nested for loops\"\n        for ($i = 1; $i < $y_length; ++$i) {\n            $carry = 0;\n\n            for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) {\n                $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;\n                $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n                $product_value[$k] = (int)($temp - static::BASE_FULL * $carry);\n            }\n\n            $product_value[$k] = $carry;\n        }\n\n        return $product_value;\n    }\n\n    /**\n     * Divides two BigIntegers.\n     *\n     * Returns an array whose first element contains the quotient and whose second element contains the\n     * \"common residue\".  If the remainder would be positive, the \"common residue\" and the remainder are the\n     * same.  If the remainder would be negative, the \"common residue\" is equal to the sum of the remainder\n     * and the divisor (basically, the \"common residue\" is the first positive modulo).\n     *\n     * @return array{static, static}\n     * @internal This function is based off of\n     *     {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}.\n     */\n    protected function divideHelper(PHP $y)\n    {\n        if (count($y->value) == 1) {\n            list($q, $r) = $this->divide_digit($this->value, $y->value[0]);\n            $quotient = new static();\n            $remainder = new static();\n            $quotient->value = $q;\n            if ($this->is_negative) {\n                $r = $y->value[0] - $r;\n            }\n            $remainder->value = [$r];\n            $quotient->is_negative = $this->is_negative != $y->is_negative;\n            return [$this->normalize($quotient), $this->normalize($remainder)];\n        }\n\n        $x = clone $this;\n        $y = clone $y;\n\n        $x_sign = $x->is_negative;\n        $y_sign = $y->is_negative;\n\n        $x->is_negative = $y->is_negative = false;\n\n        $diff = $x->compare($y);\n\n        if (!$diff) {\n            $temp = new static();\n            $temp->value = [1];\n            $temp->is_negative = $x_sign != $y_sign;\n            return [$this->normalize($temp), $this->normalize(static::$zero[static::class])];\n        }\n\n        if ($diff < 0) {\n            // if $x is negative, \"add\" $y.\n            if ($x_sign) {\n                $x = $y->subtract($x);\n            }\n            return [$this->normalize(static::$zero[static::class]), $this->normalize($x)];\n        }\n\n        // normalize $x and $y as described in HAC 14.23 / 14.24\n        $msb = $y->value[count($y->value) - 1];\n        for ($shift = 0; !($msb & static::MSB); ++$shift) {\n            $msb <<= 1;\n        }\n        $x->lshift($shift);\n        $y->lshift($shift);\n        $y_value = &$y->value;\n\n        $x_max = count($x->value) - 1;\n        $y_max = count($y->value) - 1;\n\n        $quotient = new static();\n        $quotient_value = &$quotient->value;\n        $quotient_value = self::array_repeat(0, $x_max - $y_max + 1);\n\n        static $temp, $lhs, $rhs;\n        if (!isset($temp)) {\n            $temp = new static();\n            $lhs = new static();\n            $rhs = new static();\n        }\n        if (static::class != get_class($temp)) {\n            $temp = new static();\n            $lhs = new static();\n            $rhs = new static();\n        }\n        $temp_value = &$temp->value;\n        $rhs_value =  &$rhs->value;\n\n        // $temp = $y << ($x_max - $y_max-1) in base 2**26\n        $temp_value = array_merge(self::array_repeat(0, $x_max - $y_max), $y_value);\n\n        while ($x->compare($temp) >= 0) {\n            // calculate the \"common residue\"\n            ++$quotient_value[$x_max - $y_max];\n            $x = $x->subtract($temp);\n            $x_max = count($x->value) - 1;\n        }\n\n        for ($i = $x_max; $i >= $y_max + 1; --$i) {\n            $x_value = &$x->value;\n            $x_window = [\n                isset($x_value[$i]) ? $x_value[$i] : 0,\n                isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0,\n                isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0\n            ];\n            $y_window = [\n                $y_value[$y_max],\n                ($y_max > 0) ? $y_value[$y_max - 1] : 0\n            ];\n\n            $q_index = $i - $y_max - 1;\n            if ($x_window[0] == $y_window[0]) {\n                $quotient_value[$q_index] = static::MAX_DIGIT;\n            } else {\n                $quotient_value[$q_index] = self::safe_divide(\n                    $x_window[0] * static::BASE_FULL + $x_window[1],\n                    $y_window[0]\n                );\n            }\n\n            $temp_value = [$y_window[1], $y_window[0]];\n\n            $lhs->value = [$quotient_value[$q_index]];\n            $lhs = $lhs->multiply($temp);\n\n            $rhs_value = [$x_window[2], $x_window[1], $x_window[0]];\n\n            while ($lhs->compare($rhs) > 0) {\n                --$quotient_value[$q_index];\n\n                $lhs->value = [$quotient_value[$q_index]];\n                $lhs = $lhs->multiply($temp);\n            }\n\n            $adjust = self::array_repeat(0, $q_index);\n            $temp_value = [$quotient_value[$q_index]];\n            $temp = $temp->multiply($y);\n            $temp_value = &$temp->value;\n            if (count($temp_value)) {\n                $temp_value = array_merge($adjust, $temp_value);\n            }\n\n            $x = $x->subtract($temp);\n\n            if ($x->compare(static::$zero[static::class]) < 0) {\n                $temp_value = array_merge($adjust, $y_value);\n                $x = $x->add($temp);\n\n                --$quotient_value[$q_index];\n            }\n\n            $x_max = count($x_value) - 1;\n        }\n\n        // unnormalize the remainder\n        $x->rshift($shift);\n\n        $quotient->is_negative = $x_sign != $y_sign;\n\n        // calculate the \"common residue\", if appropriate\n        if ($x_sign) {\n            $y->rshift($shift);\n            $x = $y->subtract($x);\n        }\n\n        return [$this->normalize($quotient), $this->normalize($x)];\n    }\n\n    /**\n     * Divides a BigInteger by a regular integer\n     *\n     * abc / x = a00 / x + b0 / x + c / x\n     *\n     * @param array $dividend\n     * @param int $divisor\n     * @return array\n     */\n    private static function divide_digit(array $dividend, $divisor)\n    {\n        $carry = 0;\n        $result = [];\n\n        for ($i = count($dividend) - 1; $i >= 0; --$i) {\n            $temp = static::BASE_FULL * $carry + $dividend[$i];\n            $result[$i] = self::safe_divide($temp, $divisor);\n            $carry = (int)($temp - $divisor * $result[$i]);\n        }\n\n        return [$result, $carry];\n    }\n\n    /**\n     * Single digit division\n     *\n     * Even if int64 is being used the division operator will return a float64 value\n     * if the dividend is not evenly divisible by the divisor. Since a float64 doesn't\n     * have the precision of int64 this is a problem so, when int64 is being used,\n     * we'll guarantee that the dividend is divisible by first subtracting the remainder.\n     *\n     * @param int $x\n     * @param int $y\n     * @return int\n     */\n    private static function safe_divide($x, $y)\n    {\n        if (static::BASE === 26) {\n            return (int)($x / $y);\n        }\n\n        // static::BASE === 31\n        /** @var int */\n        return ($x - ($x % $y)) / $y;\n    }\n\n    /**\n     * Convert an array / boolean to a PHP BigInteger object\n     *\n     * @param array $arr\n     * @return static\n     */\n    protected function convertToObj(array $arr)\n    {\n        $result = new static();\n        $result->value = $arr[self::VALUE];\n        $result->is_negative = $arr[self::SIGN];\n\n        return $this->normalize($result);\n    }\n\n    /**\n     * Normalize\n     *\n     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision\n     *\n     * @param PHP $result\n     * @return static\n     */\n    protected function normalize(PHP $result)\n    {\n        $result->precision = $this->precision;\n        $result->bitmask = $this->bitmask;\n\n        $value = &$result->value;\n\n        if (!count($value)) {\n            $result->is_negative = false;\n            return $result;\n        }\n\n        $value = static::trim($value);\n\n        if (!empty($result->bitmask->value)) {\n            $length = min(count($value), count($result->bitmask->value));\n            $value = array_slice($value, 0, $length);\n\n            for ($i = 0; $i < $length; ++$i) {\n                $value[$i] = $value[$i] & $result->bitmask->value[$i];\n            }\n\n            $value = static::trim($value);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * @param array $x_value\n     * @param bool $x_negative\n     * @param array $y_value\n     * @param bool $y_negative\n     * @return int\n     * @see static::compare()\n     */\n    protected static function compareHelper(array $x_value, $x_negative, array $y_value, $y_negative)\n    {\n        if ($x_negative != $y_negative) {\n            return (!$x_negative && $y_negative) ? 1 : -1;\n        }\n\n        $result = $x_negative ? -1 : 1;\n\n        if (count($x_value) != count($y_value)) {\n            return (count($x_value) > count($y_value)) ? $result : -$result;\n        }\n        $size = max(count($x_value), count($y_value));\n\n        $x_value = array_pad($x_value, $size, 0);\n        $y_value = array_pad($y_value, $size, 0);\n\n        for ($i = count($x_value) - 1; $i >= 0; --$i) {\n            if ($x_value[$i] != $y_value[$i]) {\n                return ($x_value[$i] > $y_value[$i]) ? $result : -$result;\n            }\n        }\n\n        return 0;\n    }\n\n    /**\n     * Absolute value.\n     *\n     * @return PHP\n     */\n    public function abs()\n    {\n        $temp = new static();\n        $temp->value = $this->value;\n\n        return $temp;\n    }\n\n    /**\n     * Trim\n     *\n     * Removes leading zeros\n     *\n     * @param list<static> $value\n     * @return list<static>\n     */\n    protected static function trim(array $value)\n    {\n        for ($i = count($value) - 1; $i >= 0; --$i) {\n            if ($value[$i]) {\n                break;\n            }\n            unset($value[$i]);\n        }\n\n        return $value;\n    }\n\n    /**\n     * Logical Right Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.\n     *\n     * @param int $shift\n     * @return PHP\n     */\n    public function bitwise_rightShift($shift)\n    {\n        $temp = new static();\n\n        // could just replace lshift with this, but then all lshift() calls would need to be rewritten\n        // and I don't want to do that...\n        $temp->value = $this->value;\n        $temp->rshift($shift);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Logical Left Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.\n     *\n     * @param int $shift\n     * @return PHP\n     */\n    public function bitwise_leftShift($shift)\n    {\n        $temp = new static();\n        // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten\n        // and I don't want to do that...\n        $temp->value = $this->value;\n        $temp->lshift($shift);\n\n        return $this->normalize($temp);\n    }\n\n    /**\n     * Converts 32-bit integers to bytes.\n     *\n     * @param int $x\n     * @return string\n     */\n    private static function int2bytes($x)\n    {\n        return ltrim(pack('N', $x), chr(0));\n    }\n\n    /**\n     * Array Repeat\n     *\n     * @param int $input\n     * @param int $multiplier\n     * @return array\n     */\n    protected static function array_repeat($input, $multiplier)\n    {\n        return $multiplier ? array_fill(0, $multiplier, $input) : [];\n    }\n\n    /**\n     * Logical Left Shift\n     *\n     * Shifts BigInteger's by $shift bits.\n     *\n     * @param int $shift\n     */\n    protected function lshift($shift)\n    {\n        if ($shift == 0) {\n            return;\n        }\n\n        $num_digits = (int)($shift / static::BASE);\n        $shift %= static::BASE;\n        $shift = 1 << $shift;\n\n        $carry = 0;\n\n        for ($i = 0; $i < count($this->value); ++$i) {\n            $temp = $this->value[$i] * $shift + $carry;\n            $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n            $this->value[$i] = (int)($temp - $carry * static::BASE_FULL);\n        }\n\n        if ($carry) {\n            $this->value[count($this->value)] = $carry;\n        }\n\n        while ($num_digits--) {\n            array_unshift($this->value, 0);\n        }\n    }\n\n    /**\n     * Logical Right Shift\n     *\n     * Shifts BigInteger's by $shift bits.\n     *\n     * @param int $shift\n     */\n    protected function rshift($shift)\n    {\n        if ($shift == 0) {\n            return;\n        }\n\n        $num_digits = (int)($shift / static::BASE);\n        $shift %= static::BASE;\n        $carry_shift = static::BASE - $shift;\n        $carry_mask = (1 << $shift) - 1;\n\n        if ($num_digits) {\n            $this->value = array_slice($this->value, $num_digits);\n        }\n\n        $carry = 0;\n\n        for ($i = count($this->value) - 1; $i >= 0; --$i) {\n            $temp = $this->value[$i] >> $shift | $carry;\n            $carry = ($this->value[$i] & $carry_mask) << $carry_shift;\n            $this->value[$i] = $temp;\n        }\n\n        $this->value = static::trim($this->value);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param PHP $e\n     * @param PHP $n\n     * @return PHP\n     */\n    protected function powModInner(PHP $e, PHP $n)\n    {\n        try {\n            $class = static::$modexpEngine[static::class];\n            return $class::powModHelper($this, $e, $n, static::class);\n        } catch (\\Exception $err) {\n            return PHP\\DefaultEngine::powModHelper($this, $e, $n, static::class);\n        }\n    }\n\n    /**\n     * Performs squaring\n     *\n     * @param list<static> $x\n     * @return list<static>\n     */\n    protected static function square(array $x)\n    {\n        return count($x) < 2 * self::KARATSUBA_CUTOFF ?\n            self::trim(self::baseSquare($x)) :\n            self::trim(self::karatsubaSquare($x));\n    }\n\n    /**\n     * Performs traditional squaring on two BigIntegers\n     *\n     * Squaring can be done faster than multiplying a number by itself can be.  See\n     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} /\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.\n     *\n     * @param array $value\n     * @return array\n     */\n    protected static function baseSquare(array $value)\n    {\n        if (empty($value)) {\n            return [];\n        }\n        $square_value = self::array_repeat(0, 2 * count($value));\n\n        for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) {\n            $i2 = $i << 1;\n\n            $temp = $square_value[$i2] + $value[$i] * $value[$i];\n            $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n            $square_value[$i2] = (int)($temp - static::BASE_FULL * $carry);\n\n            // note how we start from $i+1 instead of 0 as we do in multiplication.\n            for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) {\n                $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry;\n                $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);\n                $square_value[$k] = (int)($temp - static::BASE_FULL * $carry);\n            }\n\n            // the following line can yield values larger 2**15.  at this point, PHP should switch\n            // over to floats.\n            $square_value[$i + $max_index + 1] = $carry;\n        }\n\n        return $square_value;\n    }\n\n    /**\n     * Performs Karatsuba \"squaring\" on two BigIntegers\n     *\n     * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and\n     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.\n     *\n     * @param array $value\n     * @return array\n     */\n    protected static function karatsubaSquare(array $value)\n    {\n        $m = count($value) >> 1;\n\n        if ($m < self::KARATSUBA_CUTOFF) {\n            return self::baseSquare($value);\n        }\n\n        $x1 = array_slice($value, $m);\n        $x0 = array_slice($value, 0, $m);\n\n        $z2 = self::karatsubaSquare($x1);\n        $z0 = self::karatsubaSquare($x0);\n\n        $z1 = self::addHelper($x1, false, $x0, false);\n        $z1 = self::karatsubaSquare($z1[self::VALUE]);\n        $temp = self::addHelper($z2, false, $z0, false);\n        $z1 = self::subtractHelper($z1, false, $temp[self::VALUE], false);\n\n        $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);\n        $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]);\n\n        $xx = self::addHelper($z2, false, $z1[self::VALUE], $z1[self::SIGN]);\n        $xx = self::addHelper($xx[self::VALUE], $xx[self::SIGN], $z0, false);\n\n        return $xx[self::VALUE];\n    }\n\n    /**\n     * Make the current number odd\n     *\n     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.\n     *\n     * @see self::randomPrime()\n     */\n    protected function make_odd()\n    {\n        $this->value[0] |= 1;\n    }\n\n    /**\n     * Test the number against small primes.\n     *\n     * @see self::isPrime()\n     */\n    protected function testSmallPrimes()\n    {\n        if ($this->value == [1]) {\n            return false;\n        }\n        if ($this->value == [2]) {\n            return true;\n        }\n        if (~$this->value[0] & 1) {\n            return false;\n        }\n\n        $value = $this->value;\n        foreach (static::PRIMES as $prime) {\n            list(, $r) = self::divide_digit($value, $prime);\n            if (!$r) {\n                return count($value) == 1 && $value[0] == $prime;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Scan for 1 and right shift by that amount\n     *\n     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));\n     *\n     * @param PHP $r\n     * @return int\n     * @see self::isPrime()\n     */\n    public static function scan1divide(PHP $r)\n    {\n        $r_value = &$r->value;\n        for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) {\n            $temp = ~$r_value[$i] & static::MAX_DIGIT;\n            for ($j = 1; ($temp >> $j) & 1; ++$j) {\n            }\n            if ($j <= static::BASE) {\n                break;\n            }\n        }\n        $s = static::BASE * $i + $j;\n        $r->rshift($s);\n        return $s;\n    }\n\n    /**\n     * Performs exponentiation.\n     *\n     * @param PHP $n\n     * @return PHP\n     */\n    protected function powHelper(PHP $n)\n    {\n        if ($n->compare(static::$zero[static::class]) == 0) {\n            return new static(1);\n        } // n^0 = 1\n\n        $temp = clone $this;\n        while (!$n->equals(static::$one[static::class])) {\n            $temp = $temp->multiply($this);\n            $n = $n->subtract(static::$one[static::class]);\n        }\n\n        return $temp;\n    }\n\n    /**\n     * Is Odd?\n     *\n     * @return bool\n     */\n    public function isOdd()\n    {\n        return (bool)($this->value[0] & 1);\n    }\n\n    /**\n     * Tests if a bit is set\n     *\n     * @return bool\n     */\n    public function testBit($x)\n    {\n        $digit = (int) floor($x / static::BASE);\n        $bit = $x % static::BASE;\n\n        if (!isset($this->value[$digit])) {\n            return false;\n        }\n\n        return (bool)($this->value[$digit] & (1 << $bit));\n    }\n\n    /**\n     * Is Negative?\n     *\n     * @return bool\n     */\n    public function isNegative()\n    {\n        return $this->is_negative;\n    }\n\n    /**\n     * Negate\n     *\n     * Given $k, returns -$k\n     *\n     * @return static\n     */\n    public function negate()\n    {\n        $temp = clone $this;\n        $temp->is_negative = !$temp->is_negative;\n\n        return $temp;\n    }\n\n    /**\n     * Bitwise Split\n     *\n     * Splits BigInteger's into chunks of $split bits\n     *\n     * @param int $split\n     * @return list<static>\n     */\n    public function bitwise_split($split)\n    {\n        if ($split < 1) {\n            throw new \\RuntimeException('Offset must be greater than 1');\n        }\n\n        $width = (int)($split / static::BASE);\n        if (!$width) {\n            $arr = $this->bitwise_small_split($split);\n            return array_map(function ($digit) {\n                $temp = new static();\n                $temp->value = $digit != 0 ? [$digit] : [];\n                return $temp;\n            }, $arr);\n        }\n\n        $vals = [];\n        $val = $this->value;\n\n        $i = $overflow = 0;\n        $len = count($val);\n        while ($i < $len) {\n            $digit = [];\n            if (!$overflow) {\n                $digit = array_slice($val, $i, $width);\n                $i += $width;\n                $overflow = $split % static::BASE;\n                if ($overflow) {\n                    $mask = (1 << $overflow) - 1;\n                    $temp = isset($val[$i]) ? $val[$i] : 0;\n                    $digit[] = $temp & $mask;\n                }\n            } else {\n                $remaining = static::BASE - $overflow;\n                $tempsplit = $split - $remaining;\n                $tempwidth = (int)($tempsplit / static::BASE + 1);\n                $digit = array_slice($val, $i, $tempwidth);\n                $i += $tempwidth;\n                $tempoverflow = $tempsplit % static::BASE;\n                if ($tempoverflow) {\n                    $tempmask = (1 << $tempoverflow) - 1;\n                    $temp = isset($val[$i]) ? $val[$i] : 0;\n                    $digit[] = $temp & $tempmask;\n                }\n                $newbits = 0;\n                for ($j = count($digit) - 1; $j >= 0; $j--) {\n                    $temp = $digit[$j] & $mask;\n                    $digit[$j] = ($digit[$j] >> $overflow) | ($newbits << $remaining);\n                    $newbits = $temp;\n                }\n                $overflow = $tempoverflow;\n                $mask = $tempmask;\n            }\n            $temp = new static();\n            $temp->value = static::trim($digit);\n            $vals[] = $temp;\n        }\n\n        return array_reverse($vals);\n    }\n\n    /**\n     * Bitwise Split where $split < static::BASE\n     *\n     * @param int $split\n     * @return list<int>\n     */\n    private function bitwise_small_split($split)\n    {\n        $vals = [];\n        $val = $this->value;\n\n        $mask = (1 << $split) - 1;\n\n        $i = $overflow = 0;\n        $len = count($val);\n        $val[] = 0;\n        $remaining = static::BASE;\n        while ($i != $len) {\n            $digit = $val[$i] & $mask;\n            $val[$i] >>= $split;\n            if (!$overflow) {\n                $remaining -= $split;\n                $overflow = $split <= $remaining ? 0 : $split - $remaining;\n\n                if (!$remaining) {\n                    $i++;\n                    $remaining = static::BASE;\n                    $overflow = 0;\n                }\n            } elseif (++$i != $len) {\n                $tempmask = (1 << $overflow) - 1;\n                $digit |= ($val[$i] & $tempmask) << $remaining;\n                $val[$i] >>= $overflow;\n                $remaining = static::BASE - $overflow;\n                $overflow = $split <= $remaining ? 0 : $split - $remaining;\n            }\n\n            $vals[] = $digit;\n        }\n\n        while ($vals[count($vals) - 1] == 0) {\n            unset($vals[count($vals) - 1]);\n        }\n\n        return array_reverse($vals);\n    }\n\n    /**\n     * @return bool\n     */\n    protected static function testJITOnWindows()\n    {\n        // see https://github.com/php/php-src/issues/11917\n        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' && function_exists('opcache_get_status') && PHP_VERSION_ID < 80213 && !defined('PHPSECLIB_ALLOW_JIT')) {\n            $status = opcache_get_status();\n            if ($status && isset($status['jit']) && $status['jit']['enabled'] && $status['jit']['on']) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Return the size of a BigInteger in bits\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        $max = count($this->value) - 1;\n        return $max != -1 ?\n            $max * static::BASE + intval(ceil(log($this->value[$max] + 1, 2))) :\n            0;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP32.php",
    "content": "<?php\n\n/**\n * Pure-PHP 32-bit BigInteger Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\n/**\n * Pure-PHP 32-bit Engine.\n *\n * Uses 64-bit floats if int size is 4 bits\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass PHP32 extends PHP\n{\n    // Constants used by PHP.php\n    const BASE = 26;\n    const BASE_FULL = 0x4000000;\n    const MAX_DIGIT = 0x3FFFFFF;\n    const MSB = 0x2000000;\n\n    /**\n     * MAX10 in greatest MAX10LEN satisfying\n     * MAX10 = 10**MAX10LEN <= 2**BASE.\n     */\n    const MAX10 = 10000000;\n\n    /**\n     * MAX10LEN in greatest MAX10LEN satisfying\n     * MAX10 = 10**MAX10LEN <= 2**BASE.\n     */\n    const MAX10LEN = 7;\n    const MAX_DIGIT2 = 4503599627370496;\n\n    /**\n     * Initialize a PHP32 BigInteger Engine instance\n     *\n     * @param int $base\n     * @see parent::initialize()\n     */\n    protected function initialize($base)\n    {\n        if ($base != 256 && $base != -256) {\n            return parent::initialize($base);\n        }\n\n        $val = $this->value;\n        $this->value = [];\n        $vals = &$this->value;\n        $i = strlen($val);\n        if (!$i) {\n            return;\n        }\n\n        while (true) {\n            $i -= 4;\n            if ($i < 0) {\n                if ($i == -4) {\n                    break;\n                }\n                $val = substr($val, 0, 4 + $i);\n                $val = str_pad($val, 4, \"\\0\", STR_PAD_LEFT);\n                if ($val == \"\\0\\0\\0\\0\") {\n                    break;\n                }\n                $i = 0;\n            }\n            list(, $digit) = unpack('N', substr($val, $i, 4));\n            if ($digit < 0) {\n                $digit += 0xFFFFFFFF + 1;\n            }\n            $step = count($vals) & 3;\n            if ($step) {\n                $digit = (int) floor($digit / pow(2, 2 * $step));\n            }\n            if ($step != 3) {\n                $digit = (int) fmod($digit, static::BASE_FULL);\n                $i++;\n            }\n            $vals[] = $digit;\n        }\n        while (end($vals) === 0) {\n            array_pop($vals);\n        }\n        reset($vals);\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * @see parent::__construct()\n     * @return bool\n     */\n    public static function isValidEngine()\n    {\n        return PHP_INT_SIZE >= 4 && !self::testJITOnWindows();\n    }\n\n    /**\n     * Adds two BigIntegers.\n     *\n     * @param PHP32 $y\n     * @return PHP32\n     */\n    public function add(PHP32 $y)\n    {\n        $temp = self::addHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n\n        return $this->convertToObj($temp);\n    }\n\n    /**\n     * Subtracts two BigIntegers.\n     *\n     * @param PHP32 $y\n     * @return PHP32\n     */\n    public function subtract(PHP32 $y)\n    {\n        $temp = self::subtractHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n\n        return $this->convertToObj($temp);\n    }\n\n    /**\n     * Multiplies two BigIntegers.\n     *\n     * @param PHP32 $y\n     * @return PHP32\n     */\n    public function multiply(PHP32 $y)\n    {\n        $temp = self::multiplyHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n\n        return $this->convertToObj($temp);\n    }\n\n    /**\n     * Divides two BigIntegers.\n     *\n     * Returns an array whose first element contains the quotient and whose second element contains the\n     * \"common residue\".  If the remainder would be positive, the \"common residue\" and the remainder are the\n     * same.  If the remainder would be negative, the \"common residue\" is equal to the sum of the remainder\n     * and the divisor (basically, the \"common residue\" is the first positive modulo).\n     *\n     * @param PHP32 $y\n     * @return array{PHP32, PHP32}\n     */\n    public function divide(PHP32 $y)\n    {\n        return $this->divideHelper($y);\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     * @param PHP32 $n\n     * @return false|PHP32\n     */\n    public function modInverse(PHP32 $n)\n    {\n        return $this->modInverseHelper($n);\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     * @param PHP32 $n\n     * @return PHP32[]\n     */\n    public function extendedGCD(PHP32 $n)\n    {\n        return $this->extendedGCDHelper($n);\n    }\n\n    /**\n     * Calculates the greatest common divisor\n     *\n     * Say you have 693 and 609.  The GCD is 21.\n     *\n     * @param PHP32 $n\n     * @return PHP32\n     */\n    public function gcd(PHP32 $n)\n    {\n        return $this->extendedGCD($n)['gcd'];\n    }\n\n    /**\n     * Logical And\n     *\n     * @param PHP32 $x\n     * @return PHP32\n     */\n    public function bitwise_and(PHP32 $x)\n    {\n        return $this->bitwiseAndHelper($x);\n    }\n\n    /**\n     * Logical Or\n     *\n     * @param PHP32 $x\n     * @return PHP32\n     */\n    public function bitwise_or(PHP32 $x)\n    {\n        return $this->bitwiseOrHelper($x);\n    }\n\n    /**\n     * Logical Exclusive Or\n     *\n     * @param PHP32 $x\n     * @return PHP32\n     */\n    public function bitwise_xor(PHP32 $x)\n    {\n        return $this->bitwiseXorHelper($x);\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this is\n     * demonstrated thusly:\n     *\n     * $x  > $y: $x->compare($y)  > 0\n     * $x  < $y: $x->compare($y)  < 0\n     * $x == $y: $x->compare($y) == 0\n     *\n     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).\n     *\n     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}\n     *\n     * @param PHP32 $y\n     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.\n     * @see self::equals()\n     */\n    public function compare(PHP32 $y)\n    {\n        return $this->compareHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()\n     *\n     * @param PHP32 $x\n     * @return bool\n     */\n    public function equals(PHP32 $x)\n    {\n        return $this->value === $x->value && $this->is_negative == $x->is_negative;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param PHP32 $e\n     * @param PHP32 $n\n     * @return PHP32\n     */\n    public function modPow(PHP32 $e, PHP32 $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * Alias for modPow().\n     *\n     * @param PHP32 $e\n     * @param PHP32 $n\n     * @return PHP32\n     */\n    public function powMod(PHP32 $e, PHP32 $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Generate a random prime number between a range\n     *\n     * If there's not a prime within the given range, false will be returned.\n     *\n     * @param PHP32 $min\n     * @param PHP32 $max\n     * @return false|PHP32\n     */\n    public static function randomRangePrime(PHP32 $min, PHP32 $max)\n    {\n        return self::randomRangePrimeOuter($min, $max);\n    }\n\n    /**\n     * Generate a random number between a range\n     *\n     * Returns a random number between $min and $max where $min and $max\n     * can be defined using one of the two methods:\n     *\n     * BigInteger::randomRange($min, $max)\n     * BigInteger::randomRange($max, $min)\n     *\n     * @param PHP32 $min\n     * @param PHP32 $max\n     * @return PHP32\n     */\n    public static function randomRange(PHP32 $min, PHP32 $max)\n    {\n        return self::randomRangeHelper($min, $max);\n    }\n\n    /**\n     * Performs exponentiation.\n     *\n     * @param PHP32 $n\n     * @return PHP32\n     */\n    public function pow(PHP32 $n)\n    {\n        return $this->powHelper($n);\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param PHP32 ...$nums\n     * @return PHP32\n     */\n    public static function min(PHP32 ...$nums)\n    {\n        return self::minHelper($nums);\n    }\n\n    /**\n     * Return the maximum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param PHP32 ...$nums\n     * @return PHP32\n     */\n    public static function max(PHP32 ...$nums)\n    {\n        return self::maxHelper($nums);\n    }\n\n    /**\n     * Tests BigInteger to see if it is between two integers, inclusive\n     *\n     * @param PHP32 $min\n     * @param PHP32 $max\n     * @return bool\n     */\n    public function between(PHP32 $min, PHP32 $max)\n    {\n        return $this->compare($min) >= 0 && $this->compare($max) <= 0;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP64.php",
    "content": "<?php\n\n/**\n * Pure-PHP 64-bit BigInteger Engine\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math\\BigInteger\\Engines;\n\n/**\n * Pure-PHP 64-bit Engine.\n *\n * Uses 64-bit integers if int size is 8 bits\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass PHP64 extends PHP\n{\n    // Constants used by PHP.php\n    const BASE = 31;\n    const BASE_FULL = 0x80000000;\n    const MAX_DIGIT = 0x7FFFFFFF;\n    const MSB = 0x40000000;\n\n    /**\n     * MAX10 in greatest MAX10LEN satisfying\n     * MAX10 = 10**MAX10LEN <= 2**BASE.\n     */\n    const MAX10 = 1000000000;\n\n    /**\n     * MAX10LEN in greatest MAX10LEN satisfying\n     * MAX10 = 10**MAX10LEN <= 2**BASE.\n     */\n    const MAX10LEN = 9;\n    const MAX_DIGIT2 = 4611686018427387904;\n\n    /**\n     * Initialize a PHP64 BigInteger Engine instance\n     *\n     * @param int $base\n     * @see parent::initialize()\n     */\n    protected function initialize($base)\n    {\n        if ($base != 256 && $base != -256) {\n            return parent::initialize($base);\n        }\n\n        $val = $this->value;\n        $this->value = [];\n        $vals = &$this->value;\n        $i = strlen($val);\n        if (!$i) {\n            return;\n        }\n\n        while (true) {\n            $i -= 4;\n            if ($i < 0) {\n                if ($i == -4) {\n                    break;\n                }\n                $val = substr($val, 0, 4 + $i);\n                $val = str_pad($val, 4, \"\\0\", STR_PAD_LEFT);\n                if ($val == \"\\0\\0\\0\\0\") {\n                    break;\n                }\n                $i = 0;\n            }\n            list(, $digit) = unpack('N', substr($val, $i, 4));\n            $step = count($vals) & 7;\n            if (!$step) {\n                $digit &= static::MAX_DIGIT;\n                $i++;\n            } else {\n                $shift = 8 - $step;\n                $digit >>= $shift;\n                $shift = 32 - $shift;\n                $digit &= (1 << $shift) - 1;\n                $temp = $i > 0 ? ord($val[$i - 1]) : 0;\n                $digit |= ($temp << $shift) & 0x7F000000;\n            }\n            $vals[] = $digit;\n        }\n        while (end($vals) === 0) {\n            array_pop($vals);\n        }\n        reset($vals);\n    }\n\n    /**\n     * Test for engine validity\n     *\n     * @see parent::__construct()\n     * @return bool\n     */\n    public static function isValidEngine()\n    {\n        return PHP_INT_SIZE >= 8 && !self::testJITOnWindows();\n    }\n\n    /**\n     * Adds two BigIntegers.\n     *\n     * @param PHP64 $y\n     * @return PHP64\n     */\n    public function add(PHP64 $y)\n    {\n        $temp = self::addHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n\n        return $this->convertToObj($temp);\n    }\n\n    /**\n     * Subtracts two BigIntegers.\n     *\n     * @param PHP64 $y\n     * @return PHP64\n     */\n    public function subtract(PHP64 $y)\n    {\n        $temp = self::subtractHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n\n        return $this->convertToObj($temp);\n    }\n\n    /**\n     * Multiplies two BigIntegers.\n     *\n     * @param PHP64 $y\n     * @return PHP64\n     */\n    public function multiply(PHP64 $y)\n    {\n        $temp = self::multiplyHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n\n        return $this->convertToObj($temp);\n    }\n\n    /**\n     * Divides two BigIntegers.\n     *\n     * Returns an array whose first element contains the quotient and whose second element contains the\n     * \"common residue\".  If the remainder would be positive, the \"common residue\" and the remainder are the\n     * same.  If the remainder would be negative, the \"common residue\" is equal to the sum of the remainder\n     * and the divisor (basically, the \"common residue\" is the first positive modulo).\n     *\n     * @param PHP64 $y\n     * @return array{PHP64, PHP64}\n     */\n    public function divide(PHP64 $y)\n    {\n        return $this->divideHelper($y);\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     * @param PHP64 $n\n     * @return false|PHP64\n     */\n    public function modInverse(PHP64 $n)\n    {\n        return $this->modInverseHelper($n);\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     * @param PHP64 $n\n     * @return PHP64[]\n     */\n    public function extendedGCD(PHP64 $n)\n    {\n        return $this->extendedGCDHelper($n);\n    }\n\n    /**\n     * Calculates the greatest common divisor\n     *\n     * Say you have 693 and 609.  The GCD is 21.\n     *\n     * @param PHP64 $n\n     * @return PHP64\n     */\n    public function gcd(PHP64 $n)\n    {\n        return $this->extendedGCD($n)['gcd'];\n    }\n\n    /**\n     * Logical And\n     *\n     * @param PHP64 $x\n     * @return PHP64\n     */\n    public function bitwise_and(PHP64 $x)\n    {\n        return $this->bitwiseAndHelper($x);\n    }\n\n    /**\n     * Logical Or\n     *\n     * @param PHP64 $x\n     * @return PHP64\n     */\n    public function bitwise_or(PHP64 $x)\n    {\n        return $this->bitwiseOrHelper($x);\n    }\n\n    /**\n     * Logical Exclusive Or\n     *\n     * @param PHP64 $x\n     * @return PHP64\n     */\n    public function bitwise_xor(PHP64 $x)\n    {\n        return $this->bitwiseXorHelper($x);\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this is\n     * demonstrated thusly:\n     *\n     * $x  > $y: $x->compare($y)  > 0\n     * $x  < $y: $x->compare($y)  < 0\n     * $x == $y: $x->compare($y) == 0\n     *\n     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).\n     *\n     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}\n     *\n     * @param PHP64 $y\n     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.\n     * @see self::equals()\n     */\n    public function compare(PHP64 $y)\n    {\n        return parent::compareHelper($this->value, $this->is_negative, $y->value, $y->is_negative);\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()\n     *\n     * @param PHP64 $x\n     * @return bool\n     */\n    public function equals(PHP64 $x)\n    {\n        return $this->value === $x->value && $this->is_negative == $x->is_negative;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param PHP64 $e\n     * @param PHP64 $n\n     * @return PHP64\n     */\n    public function modPow(PHP64 $e, PHP64 $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * Alias for modPow().\n     *\n     * @param PHP64 $e\n     * @param PHP64 $n\n     * @return PHP64|false\n     */\n    public function powMod(PHP64 $e, PHP64 $n)\n    {\n        return $this->powModOuter($e, $n);\n    }\n\n    /**\n     * Generate a random prime number between a range\n     *\n     * If there's not a prime within the given range, false will be returned.\n     *\n     * @param PHP64 $min\n     * @param PHP64 $max\n     * @return false|PHP64\n     */\n    public static function randomRangePrime(PHP64 $min, PHP64 $max)\n    {\n        return self::randomRangePrimeOuter($min, $max);\n    }\n\n    /**\n     * Generate a random number between a range\n     *\n     * Returns a random number between $min and $max where $min and $max\n     * can be defined using one of the two methods:\n     *\n     * BigInteger::randomRange($min, $max)\n     * BigInteger::randomRange($max, $min)\n     *\n     * @param PHP64 $min\n     * @param PHP64 $max\n     * @return PHP64\n     */\n    public static function randomRange(PHP64 $min, PHP64 $max)\n    {\n        return self::randomRangeHelper($min, $max);\n    }\n\n    /**\n     * Performs exponentiation.\n     *\n     * @param PHP64 $n\n     * @return PHP64\n     */\n    public function pow(PHP64 $n)\n    {\n        return $this->powHelper($n);\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param PHP64 ...$nums\n     * @return PHP64\n     */\n    public static function min(PHP64 ...$nums)\n    {\n        return self::minHelper($nums);\n    }\n\n    /**\n     * Return the maximum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param PHP64 ...$nums\n     * @return PHP64\n     */\n    public static function max(PHP64 ...$nums)\n    {\n        return self::maxHelper($nums);\n    }\n\n    /**\n     * Tests BigInteger to see if it is between two integers, inclusive\n     *\n     * @param PHP64 $min\n     * @param PHP64 $max\n     * @return bool\n     */\n    public function between(PHP64 $min, PHP64 $max)\n    {\n        return $this->compare($min) >= 0 && $this->compare($max) <= 0;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php",
    "content": "<?php\n\n/**\n * Pure-PHP arbitrary precision integer arithmetic library.\n *\n * Supports base-2, base-10, base-16, and base-256 numbers.  Uses the GMP or BCMath extensions, if available,\n * and an internal implementation, otherwise.\n *\n * PHP version 5 and 7\n *\n * Here's an example of how to use this library:\n * <code>\n * <?php\n *    $a = new \\phpseclib3\\Math\\BigInteger(2);\n *    $b = new \\phpseclib3\\Math\\BigInteger(3);\n *\n *    $c = $a->add($b);\n *\n *    echo $c->toString(); // outputs 5\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Math;\n\nuse phpseclib3\\Exception\\BadConfigurationException;\nuse phpseclib3\\Math\\BigInteger\\Engines\\Engine;\n\n/**\n * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256\n * numbers.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass BigInteger implements \\JsonSerializable\n{\n    /**\n     * Main Engine\n     *\n     * @var class-string<Engine>\n     */\n    private static $mainEngine;\n\n    /**\n     * Selected Engines\n     *\n     * @var list<string>\n     */\n    private static $engines;\n\n    /**\n     * The actual BigInteger object\n     *\n     * @var object\n     */\n    private $value;\n\n    /**\n     * Mode independent value used for serialization.\n     *\n     * @see self::__sleep()\n     * @see self::__wakeup()\n     * @var string\n     */\n    private $hex;\n\n    /**\n     * Precision (used only for serialization)\n     *\n     * @see self::__sleep()\n     * @see self::__wakeup()\n     * @var int\n     */\n    private $precision;\n\n    /**\n     * Sets engine type.\n     *\n     * Throws an exception if the type is invalid\n     *\n     * @param string $main\n     * @param list<string> $modexps optional\n     * @return void\n     */\n    public static function setEngine($main, array $modexps = ['DefaultEngine'])\n    {\n        self::$engines = [];\n\n        $fqmain = 'phpseclib3\\\\Math\\\\BigInteger\\\\Engines\\\\' . $main;\n        if (!class_exists($fqmain) || !method_exists($fqmain, 'isValidEngine')) {\n            throw new \\InvalidArgumentException(\"$main is not a valid engine\");\n        }\n        if (!$fqmain::isValidEngine()) {\n            throw new BadConfigurationException(\"$main is not setup correctly on this system\");\n        }\n        /** @var class-string<Engine> $fqmain */\n        self::$mainEngine = $fqmain;\n\n        $found = false;\n        foreach ($modexps as $modexp) {\n            try {\n                $fqmain::setModExpEngine($modexp);\n                $found = true;\n                break;\n            } catch (\\Exception $e) {\n            }\n        }\n\n        if (!$found) {\n            throw new BadConfigurationException(\"No valid modular exponentiation engine found for $main\");\n        }\n\n        self::$engines = [$main, $modexp];\n    }\n\n    /**\n     * Returns the engine type\n     *\n     * @return string[]\n     */\n    public static function getEngine()\n    {\n        self::initialize_static_variables();\n\n        return self::$engines;\n    }\n\n    /**\n     * Initialize static variables\n     */\n    private static function initialize_static_variables()\n    {\n        if (!isset(self::$mainEngine)) {\n            $engines = [\n                ['GMP', ['DefaultEngine']],\n                ['PHP64', ['OpenSSL']],\n                ['BCMath', ['OpenSSL']],\n                ['PHP32', ['OpenSSL']],\n                ['PHP64', ['DefaultEngine']],\n                ['PHP32', ['DefaultEngine']]\n            ];\n            // per https://phpseclib.com/docs/speed PHP 8.4.0+ _significantly_ sped up BCMath\n            if (version_compare(PHP_VERSION, '8.4.0') >= 0) {\n                $engines[1][0] = 'BCMath';\n                $engines[2][0] = 'PHP64';\n            }\n\n            foreach ($engines as $engine) {\n                try {\n                    self::setEngine($engine[0], $engine[1]);\n                    return;\n                } catch (\\Exception $e) {\n                }\n            }\n\n            throw new \\UnexpectedValueException('No valid BigInteger found. This is only possible when JIT is enabled on Windows and neither the GMP or BCMath extensions are available so either disable JIT or install GMP / BCMath');\n        }\n    }\n\n    /**\n     * Converts base-2, base-10, base-16, and binary strings (base-256) to BigIntegers.\n     *\n     * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using\n     * two's compliment.  The sole exception to this is -10, which is treated the same as 10 is.\n     *\n     * @param string|int|Engine $x Base-10 number or base-$base number if $base set.\n     * @param int $base\n     */\n    public function __construct($x = 0, $base = 10)\n    {\n        self::initialize_static_variables();\n\n        if ($x instanceof self::$mainEngine) {\n            $this->value = clone $x;\n        } elseif ($x instanceof Engine) {\n            $this->value = new static(\"$x\");\n            $this->value->setPrecision($x->getPrecision());\n        } else {\n            $this->value = new self::$mainEngine($x, $base);\n        }\n    }\n\n    /**\n     * Converts a BigInteger to a base-10 number.\n     *\n     * @return string\n     */\n    public function toString()\n    {\n        return $this->value->toString();\n    }\n\n    /**\n     *  __toString() magic method\n     */\n    public function __toString()\n    {\n        return (string)$this->value;\n    }\n\n    /**\n     *  __debugInfo() magic method\n     *\n     * Will be called, automatically, when print_r() or var_dump() are called\n     */\n    public function __debugInfo()\n    {\n        return $this->value->__debugInfo();\n    }\n\n    /**\n     * Converts a BigInteger to a byte string (eg. base-256).\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBytes($twos_compliment = false)\n    {\n        return $this->value->toBytes($twos_compliment);\n    }\n\n    /**\n     * Converts a BigInteger to a hex string (eg. base-16).\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toHex($twos_compliment = false)\n    {\n        return $this->value->toHex($twos_compliment);\n    }\n\n    /**\n     * Converts a BigInteger to a bit string (eg. base-2).\n     *\n     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're\n     * saved as two's compliment.\n     *\n     * @param bool $twos_compliment\n     * @return string\n     */\n    public function toBits($twos_compliment = false)\n    {\n        return $this->value->toBits($twos_compliment);\n    }\n\n    /**\n     * Adds two BigIntegers.\n     *\n     * @param BigInteger $y\n     * @return BigInteger\n     */\n    public function add(BigInteger $y)\n    {\n        return new static($this->value->add($y->value));\n    }\n\n    /**\n     * Subtracts two BigIntegers.\n     *\n     * @param BigInteger $y\n     * @return BigInteger\n     */\n    public function subtract(BigInteger $y)\n    {\n        return new static($this->value->subtract($y->value));\n    }\n\n    /**\n     * Multiplies two BigIntegers\n     *\n     * @param BigInteger $x\n     * @return BigInteger\n     */\n    public function multiply(BigInteger $x)\n    {\n        return new static($this->value->multiply($x->value));\n    }\n\n    /**\n     * Divides two BigIntegers.\n     *\n     * Returns an array whose first element contains the quotient and whose second element contains the\n     * \"common residue\".  If the remainder would be positive, the \"common residue\" and the remainder are the\n     * same.  If the remainder would be negative, the \"common residue\" is equal to the sum of the remainder\n     * and the divisor (basically, the \"common residue\" is the first positive modulo).\n     *\n     * Here's an example:\n     * <code>\n     * <?php\n     *    $a = new \\phpseclib3\\Math\\BigInteger('10');\n     *    $b = new \\phpseclib3\\Math\\BigInteger('20');\n     *\n     *    list($quotient, $remainder) = $a->divide($b);\n     *\n     *    echo $quotient->toString(); // outputs 0\n     *    echo \"\\r\\n\";\n     *    echo $remainder->toString(); // outputs 10\n     * ?>\n     * </code>\n     *\n     * @param BigInteger $y\n     * @return BigInteger[]\n     */\n    public function divide(BigInteger $y)\n    {\n        list($q, $r) = $this->value->divide($y->value);\n        return [\n            new static($q),\n            new static($r)\n        ];\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     *\n     * @param BigInteger $n\n     * @return BigInteger\n     */\n    public function modInverse(BigInteger $n)\n    {\n        return new static($this->value->modInverse($n->value));\n    }\n\n    /**\n     * Calculates modular inverses.\n     *\n     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.\n     *\n     * @param BigInteger $n\n     * @return BigInteger[]\n     */\n    public function extendedGCD(BigInteger $n)\n    {\n        $extended = $this->value->extendedGCD($n->value);\n        $gcd = $extended['gcd'];\n        $x = $extended['x'];\n        $y = $extended['y'];\n        return [\n            'gcd' => new static($gcd),\n            'x' => new static($x),\n            'y' => new static($y)\n        ];\n    }\n\n    /**\n     * Calculates the greatest common divisor\n     *\n     * Say you have 693 and 609.  The GCD is 21.\n     *\n     * @param BigInteger $n\n     * @return BigInteger\n     */\n    public function gcd(BigInteger $n)\n    {\n        return new static($this->value->gcd($n->value));\n    }\n\n    /**\n     * Absolute value.\n     *\n     * @return BigInteger\n     */\n    public function abs()\n    {\n        return new static($this->value->abs());\n    }\n\n    /**\n     * Set Precision\n     *\n     * Some bitwise operations give different results depending on the precision being used.  Examples include left\n     * shift, not, and rotates.\n     *\n     * @param int $bits\n     */\n    public function setPrecision($bits)\n    {\n        $this->value->setPrecision($bits);\n    }\n\n    /**\n     * Get Precision\n     *\n     * Returns the precision if it exists, false if it doesn't\n     *\n     * @return int|bool\n     */\n    public function getPrecision()\n    {\n        return $this->value->getPrecision();\n    }\n\n    /**\n     * Serialize\n     *\n     * Will be called, automatically, when serialize() is called on a BigInteger object.\n     *\n     * __sleep() / __wakeup() have been around since PHP 4.0 but were deprecated in PHP 8.5\n     *\n     * \\Serializable was introduced in PHP 5.1 and deprecated in PHP 8.1:\n     * https://wiki.php.net/rfc/phase_out_serializable\n     *\n     * __serialize() / __unserialize() were introduced in PHP 7.4:\n     * https://wiki.php.net/rfc/custom_object_serialization\n     *\n     * @return array\n     */\n    public function __sleep()\n    {\n        $this->hex = $this->toHex(true);\n        $vars = ['hex'];\n        if ($this->getPrecision() > 0) {\n            $vars[] = 'precision';\n        }\n        return $vars;\n    }\n\n    /**\n     * Serialize\n     *\n     * Will be called, automatically, when unserialize() is called on a BigInteger object.\n     */\n    public function __wakeup()\n    {\n        $temp = new static($this->hex, -16);\n        $this->value = $temp->value;\n        if ($this->precision > 0) {\n            // recalculate $this->bitmask\n            $this->setPrecision($this->precision);\n        }\n    }\n\n    /**\n     *  __serialize() magic method\n     *\n     * @see self::__unserialize()\n     * @return array\n     * @access public\n     */\n    public function __serialize()\n    {\n        $result = ['hex' => $this->toHex(true)];\n        if ($this->getPrecision() > 0) {\n            $result['precision'] = $this->getPrecision();\n        }\n        return $result;\n    }\n\n    /**\n     *  __unserialize() magic method\n     *\n     * @see self::__serialize()\n     * @access public\n     */\n    public function __unserialize(array $data)\n    {\n        $temp = new static($data['hex'], -16);\n        $this->value = $temp->value;\n        if (isset($data['precision']) && $data['precision'] > 0) {\n            // recalculate $this->bitmask\n            $this->setPrecision($data['precision']);\n        }\n    }\n\n    /**\n     * JSON Serialize\n     *\n     * Will be called, automatically, when json_encode() is called on a BigInteger object.\n     *\n     * @return array{hex: string, precision?: int]\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        $result = ['hex' => $this->toHex(true)];\n        if ($this->precision > 0) {\n            $result['precision'] = $this->getPrecision();\n        }\n        return $result;\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param BigInteger $e\n     * @param BigInteger $n\n     * @return BigInteger\n     */\n    public function powMod(BigInteger $e, BigInteger $n)\n    {\n        return new static($this->value->powMod($e->value, $n->value));\n    }\n\n    /**\n     * Performs modular exponentiation.\n     *\n     * @param BigInteger $e\n     * @param BigInteger $n\n     * @return BigInteger\n     */\n    public function modPow(BigInteger $e, BigInteger $n)\n    {\n        return new static($this->value->modPow($e->value, $n->value));\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this\n     * is demonstrated thusly:\n     *\n     * $x  > $y: $x->compare($y)  > 0\n     * $x  < $y: $x->compare($y)  < 0\n     * $x == $y: $x->compare($y) == 0\n     *\n     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).\n     *\n     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}\n     *\n     * @param BigInteger $y\n     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.\n     * @see self::equals()\n     */\n    public function compare(BigInteger $y)\n    {\n        return $this->value->compare($y->value);\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()\n     *\n     * @param BigInteger $x\n     * @return bool\n     */\n    public function equals(BigInteger $x)\n    {\n        return $this->value->equals($x->value);\n    }\n\n    /**\n     * Logical Not\n     *\n     * @return BigInteger\n     */\n    public function bitwise_not()\n    {\n        return new static($this->value->bitwise_not());\n    }\n\n    /**\n     * Logical And\n     *\n     * @param BigInteger $x\n     * @return BigInteger\n     */\n    public function bitwise_and(BigInteger $x)\n    {\n        return new static($this->value->bitwise_and($x->value));\n    }\n\n    /**\n     * Logical Or\n     *\n     * @param BigInteger $x\n     * @return BigInteger\n     */\n    public function bitwise_or(BigInteger $x)\n    {\n        return new static($this->value->bitwise_or($x->value));\n    }\n\n    /**\n     * Logical Exclusive Or\n     *\n     * @param BigInteger $x\n     * @return BigInteger\n     */\n    public function bitwise_xor(BigInteger $x)\n    {\n        return new static($this->value->bitwise_xor($x->value));\n    }\n\n    /**\n     * Logical Right Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.\n     *\n     * @param int $shift\n     * @return BigInteger\n     */\n    public function bitwise_rightShift($shift)\n    {\n        return new static($this->value->bitwise_rightShift($shift));\n    }\n\n    /**\n     * Logical Left Shift\n     *\n     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.\n     *\n     * @param int $shift\n     * @return BigInteger\n     */\n    public function bitwise_leftShift($shift)\n    {\n        return new static($this->value->bitwise_leftShift($shift));\n    }\n\n    /**\n     * Logical Left Rotate\n     *\n     * Instead of the top x bits being dropped they're appended to the shifted bit string.\n     *\n     * @param int $shift\n     * @return BigInteger\n     */\n    public function bitwise_leftRotate($shift)\n    {\n        return new static($this->value->bitwise_leftRotate($shift));\n    }\n\n    /**\n     * Logical Right Rotate\n     *\n     * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.\n     *\n     * @param int $shift\n     * @return BigInteger\n     */\n    public function bitwise_rightRotate($shift)\n    {\n        return new static($this->value->bitwise_rightRotate($shift));\n    }\n\n    /**\n     * Returns the smallest and largest n-bit number\n     *\n     * @param int $bits\n     * @return BigInteger[]\n     */\n    public static function minMaxBits($bits)\n    {\n        self::initialize_static_variables();\n\n        $class = self::$mainEngine;\n        $minMax = $class::minMaxBits($bits);\n        $min = $minMax['min'];\n        $max = $minMax['max'];\n        return [\n            'min' => new static($min),\n            'max' => new static($max)\n        ];\n    }\n\n    /**\n     * Return the size of a BigInteger in bits\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return $this->value->getLength();\n    }\n\n    /**\n     * Return the size of a BigInteger in bytes\n     *\n     * @return int\n     */\n    public function getLengthInBytes()\n    {\n        return $this->value->getLengthInBytes();\n    }\n\n    /**\n     * Generates a random number of a certain size\n     *\n     * Bit length is equal to $size\n     *\n     * @param int $size\n     * @return BigInteger\n     */\n    public static function random($size)\n    {\n        self::initialize_static_variables();\n\n        $class = self::$mainEngine;\n        return new static($class::random($size));\n    }\n\n    /**\n     * Generates a random prime number of a certain size\n     *\n     * Bit length is equal to $size\n     *\n     * @param int $size\n     * @return BigInteger\n     */\n    public static function randomPrime($size)\n    {\n        self::initialize_static_variables();\n\n        $class = self::$mainEngine;\n        return new static($class::randomPrime($size));\n    }\n\n    /**\n     * Generate a random prime number between a range\n     *\n     * If there's not a prime within the given range, false will be returned.\n     *\n     * @param BigInteger $min\n     * @param BigInteger $max\n     * @return false|BigInteger\n     */\n    public static function randomRangePrime(BigInteger $min, BigInteger $max)\n    {\n        $class = self::$mainEngine;\n        return new static($class::randomRangePrime($min->value, $max->value));\n    }\n\n    /**\n     * Generate a random number between a range\n     *\n     * Returns a random number between $min and $max where $min and $max\n     * can be defined using one of the two methods:\n     *\n     * BigInteger::randomRange($min, $max)\n     * BigInteger::randomRange($max, $min)\n     *\n     * @param BigInteger $min\n     * @param BigInteger $max\n     * @return BigInteger\n     */\n    public static function randomRange(BigInteger $min, BigInteger $max)\n    {\n        $class = self::$mainEngine;\n        return new static($class::randomRange($min->value, $max->value));\n    }\n\n    /**\n     * Checks a numer to see if it's prime\n     *\n     * Assuming the $t parameter is not set, this function has an error rate of 2**-80.  The main motivation for the\n     * $t parameter is distributability.  BigInteger::randomPrime() can be distributed across multiple pageloads\n     * on a website instead of just one.\n     *\n     * @param int|bool $t\n     * @return bool\n     */\n    public function isPrime($t = false)\n    {\n        return $this->value->isPrime($t);\n    }\n\n    /**\n     * Calculates the nth root of a biginteger.\n     *\n     * Returns the nth root of a positive biginteger, where n defaults to 2\n     *\n     * @param int $n optional\n     * @return BigInteger\n     */\n    public function root($n = 2)\n    {\n        return new static($this->value->root($n));\n    }\n\n    /**\n     * Performs exponentiation.\n     *\n     * @param BigInteger $n\n     * @return BigInteger\n     */\n    public function pow(BigInteger $n)\n    {\n        return new static($this->value->pow($n->value));\n    }\n\n    /**\n     * Return the minimum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param BigInteger ...$nums\n     * @return BigInteger\n     */\n    public static function min(BigInteger ...$nums)\n    {\n        $class = self::$mainEngine;\n        $nums = array_map(function ($num) {\n            return $num->value;\n        }, $nums);\n        return new static($class::min(...$nums));\n    }\n\n    /**\n     * Return the maximum BigInteger between an arbitrary number of BigIntegers.\n     *\n     * @param BigInteger ...$nums\n     * @return BigInteger\n     */\n    public static function max(BigInteger ...$nums)\n    {\n        $class = self::$mainEngine;\n        $nums = array_map(function ($num) {\n            return $num->value;\n        }, $nums);\n        return new static($class::max(...$nums));\n    }\n\n    /**\n     * Tests BigInteger to see if it is between two integers, inclusive\n     *\n     * @param BigInteger $min\n     * @param BigInteger $max\n     * @return bool\n     */\n    public function between(BigInteger $min, BigInteger $max)\n    {\n        return $this->value->between($min->value, $max->value);\n    }\n\n    /**\n     * Clone\n     */\n    public function __clone()\n    {\n        $this->value = clone $this->value;\n    }\n\n    /**\n     * Is Odd?\n     *\n     * @return bool\n     */\n    public function isOdd()\n    {\n        return $this->value->isOdd();\n    }\n\n    /**\n     * Tests if a bit is set\n     *\n     * @param int $x\n     * @return bool\n     */\n    public function testBit($x)\n    {\n        return $this->value->testBit($x);\n    }\n\n    /**\n     * Is Negative?\n     *\n     * @return bool\n     */\n    public function isNegative()\n    {\n        return $this->value->isNegative();\n    }\n\n    /**\n     * Negate\n     *\n     * Given $k, returns -$k\n     *\n     * @return BigInteger\n     */\n    public function negate()\n    {\n        return new static($this->value->negate());\n    }\n\n    /**\n     * Scan for 1 and right shift by that amount\n     *\n     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));\n     *\n     * @param BigInteger $r\n     * @return int\n     */\n    public static function scan1divide(BigInteger $r)\n    {\n        $class = self::$mainEngine;\n        return $class::scan1divide($r->value);\n    }\n\n    /**\n     * Create Recurring Modulo Function\n     *\n     * Sometimes it may be desirable to do repeated modulos with the same number outside of\n     * modular exponentiation\n     *\n     * @return callable\n     */\n    public function createRecurringModuloFunction()\n    {\n        $func = $this->value->createRecurringModuloFunction();\n        return function (BigInteger $x) use ($func) {\n            return new static($func($x->value));\n        };\n    }\n\n    /**\n     * Bitwise Split\n     *\n     * Splits BigInteger's into chunks of $split bits\n     *\n     * @param int $split\n     * @return BigInteger[]\n     */\n    public function bitwise_split($split)\n    {\n        return array_map(function ($val) {\n            return new static($val);\n        }, $this->value->bitwise_split($split));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField/Integer.php",
    "content": "<?php\n\n/**\n * Binary Finite Fields\n *\n * In a binary finite field numbers are actually polynomial equations. If you\n * represent the number as a sequence of bits you get a sequence of 1's or 0's.\n * These 1's or 0's represent the coefficients of the x**n, where n is the\n * location of the given bit. When you add numbers over a binary finite field\n * the result should have a coefficient of 1 or 0 as well. Hence addition\n * and subtraction become the same operation as XOR.\n * eg. 1 + 1 + 1 == 3 % 2 == 1 or 0 - 1 == -1 % 2 == 1\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Math\\BinaryField;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\BinaryField;\nuse phpseclib3\\Math\\Common\\FiniteField\\Integer as Base;\n\n/**\n * Binary Finite Fields\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Integer extends Base\n{\n    /**\n     * Holds the BinaryField's value\n     *\n     * @var string\n     */\n    protected $value;\n\n    /**\n     * Keeps track of current instance\n     *\n     * @var int\n     */\n    protected $instanceID;\n\n    /**\n     * Holds the PrimeField's modulo\n     *\n     * @var array<int, string>\n     */\n    protected static $modulo;\n\n    /**\n     * Holds a pre-generated function to perform modulo reductions\n     *\n     * @var callable[]\n     */\n    protected static $reduce;\n\n    /**\n     * Default constructor\n     */\n    public function __construct($instanceID, $num = '')\n    {\n        $this->instanceID = $instanceID;\n        if (!strlen($num)) {\n            $this->value = '';\n        } else {\n            $reduce = static::$reduce[$instanceID];\n            $this->value = $reduce($num);\n        }\n    }\n\n    /**\n     * Set the modulo for a given instance\n     * @param int $instanceID\n     * @param string $modulo\n     */\n    public static function setModulo($instanceID, $modulo)\n    {\n        static::$modulo[$instanceID] = $modulo;\n    }\n\n    /**\n     * Set the modulo for a given instance\n     */\n    public static function setRecurringModuloFunction($instanceID, callable $function)\n    {\n        static::$reduce[$instanceID] = $function;\n    }\n\n    /**\n     * Tests a parameter to see if it's of the right instance\n     *\n     * Throws an exception if the incorrect class is being utilized\n     */\n    private static function checkInstance(self $x, self $y)\n    {\n        if ($x->instanceID != $y->instanceID) {\n            throw new \\UnexpectedValueException('The instances of the two BinaryField\\Integer objects do not match');\n        }\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * @return bool\n     */\n    public function equals(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        return $this->value == $x->value;\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * @return int\n     */\n    public function compare(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        $a = $this->value;\n        $b = $x->value;\n\n        $length = max(strlen($a), strlen($b));\n\n        $a = str_pad($a, $length, \"\\0\", STR_PAD_LEFT);\n        $b = str_pad($b, $length, \"\\0\", STR_PAD_LEFT);\n\n        return strcmp($a, $b);\n    }\n\n    /**\n     * Returns the degree of the polynomial\n     *\n     * @param string $x\n     * @return int\n     */\n    private static function deg($x)\n    {\n        $x = ltrim($x, \"\\0\");\n        $xbit = decbin(ord($x[0]));\n        $xlen = $xbit == '0' ? 0 : strlen($xbit);\n        $len = strlen($x);\n        if (!$len) {\n            return -1;\n        }\n        return 8 * strlen($x) - 9 + $xlen;\n    }\n\n    /**\n     * Perform polynomial division\n     *\n     * @return string[]\n     * @link https://en.wikipedia.org/wiki/Polynomial_greatest_common_divisor#Euclidean_division\n     */\n    private static function polynomialDivide($x, $y)\n    {\n        // in wikipedia's description of the algorithm, lc() is the leading coefficient. over a binary field that's\n        // always going to be 1.\n\n        $q = chr(0);\n        $d = static::deg($y);\n        $r = $x;\n        while (($degr = static::deg($r)) >= $d) {\n            $s = '1' . str_repeat('0', $degr - $d);\n            $s = BinaryField::base2ToBase256($s);\n            $length = max(strlen($s), strlen($q));\n            $q = !isset($q) ? $s :\n                str_pad($q, $length, \"\\0\", STR_PAD_LEFT) ^\n                str_pad($s, $length, \"\\0\", STR_PAD_LEFT);\n            $s = static::polynomialMultiply($s, $y);\n            $length = max(strlen($r), strlen($s));\n            $r = str_pad($r, $length, \"\\0\", STR_PAD_LEFT) ^\n                 str_pad($s, $length, \"\\0\", STR_PAD_LEFT);\n        }\n\n        return [ltrim($q, \"\\0\"), ltrim($r, \"\\0\")];\n    }\n\n    /**\n     * Perform polynomial multiplation in the traditional way\n     *\n     * @return string\n     * @link https://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplication\n     */\n    private static function regularPolynomialMultiply($x, $y)\n    {\n        $precomputed = [ltrim($x, \"\\0\")];\n        $x = strrev(BinaryField::base256ToBase2($x));\n        $y = strrev(BinaryField::base256ToBase2($y));\n        if (strlen($x) == strlen($y)) {\n            $length = strlen($x);\n        } else {\n            $length = max(strlen($x), strlen($y));\n            $x = str_pad($x, $length, '0');\n            $y = str_pad($y, $length, '0');\n        }\n        $result = str_repeat('0', 2 * $length - 1);\n        $result = BinaryField::base2ToBase256($result);\n        $size = strlen($result);\n        $x = strrev($x);\n\n        // precompute left shift 1 through 7\n        for ($i = 1; $i < 8; $i++) {\n            $precomputed[$i] = BinaryField::base2ToBase256($x . str_repeat('0', $i));\n        }\n        for ($i = 0; $i < strlen($y); $i++) {\n            if ($y[$i] == '1') {\n                $temp = $precomputed[$i & 7] . str_repeat(\"\\0\", $i >> 3);\n                $result ^= str_pad($temp, $size, \"\\0\", STR_PAD_LEFT);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Perform polynomial multiplation\n     *\n     * Uses karatsuba multiplication to reduce x-bit multiplications to a series of 32-bit multiplications\n     *\n     * @return string\n     * @link https://en.wikipedia.org/wiki/Karatsuba_algorithm\n     */\n    private static function polynomialMultiply($x, $y)\n    {\n        if (strlen($x) == strlen($y)) {\n            $length = strlen($x);\n        } else {\n            $length = max(strlen($x), strlen($y));\n            $x = str_pad($x, $length, \"\\0\", STR_PAD_LEFT);\n            $y = str_pad($y, $length, \"\\0\", STR_PAD_LEFT);\n        }\n\n        switch (true) {\n            case PHP_INT_SIZE == 8 && $length <= 4:\n                return $length != 4 ?\n                    self::subMultiply(str_pad($x, 4, \"\\0\", STR_PAD_LEFT), str_pad($y, 4, \"\\0\", STR_PAD_LEFT)) :\n                    self::subMultiply($x, $y);\n            case PHP_INT_SIZE == 4 || $length > 32:\n                return self::regularPolynomialMultiply($x, $y);\n        }\n\n        $m = $length >> 1;\n\n        $x1 = substr($x, 0, -$m);\n        $x0 = substr($x, -$m);\n        $y1 = substr($y, 0, -$m);\n        $y0 = substr($y, -$m);\n\n        $z2 = self::polynomialMultiply($x1, $y1);\n        $z0 = self::polynomialMultiply($x0, $y0);\n        $z1 = self::polynomialMultiply(\n            self::subAdd2($x1, $x0),\n            self::subAdd2($y1, $y0)\n        );\n\n        $z1 = self::subAdd3($z1, $z2, $z0);\n\n        $xy = self::subAdd3(\n            $z2 . str_repeat(\"\\0\", 2 * $m),\n            $z1 . str_repeat(\"\\0\", $m),\n            $z0\n        );\n\n        return ltrim($xy, \"\\0\");\n    }\n\n    /**\n     * Perform polynomial multiplication on 2x 32-bit numbers, returning\n     * a 64-bit number\n     *\n     * @param string $x\n     * @param string $y\n     * @return string\n     * @link https://www.bearssl.org/constanttime.html#ghash-for-gcm\n     */\n    private static function subMultiply($x, $y)\n    {\n        $x = unpack('N', $x)[1];\n        $y = unpack('N', $y)[1];\n\n        $x0 = $x & 0x11111111;\n        $x1 = $x & 0x22222222;\n        $x2 = $x & 0x44444444;\n        $x3 = $x & 0x88888888;\n\n        $y0 = $y & 0x11111111;\n        $y1 = $y & 0x22222222;\n        $y2 = $y & 0x44444444;\n        $y3 = $y & 0x88888888;\n\n        $z0 = ($x0 * $y0) ^ ($x1 * $y3) ^ ($x2 * $y2) ^ ($x3 * $y1);\n        $z1 = ($x0 * $y1) ^ ($x1 * $y0) ^ ($x2 * $y3) ^ ($x3 * $y2);\n        $z2 = ($x0 * $y2) ^ ($x1 * $y1) ^ ($x2 * $y0) ^ ($x3 * $y3);\n        $z3 = ($x0 * $y3) ^ ($x1 * $y2) ^ ($x2 * $y1) ^ ($x3 * $y0);\n\n        $z0 &= 0x1111111111111111;\n        $z1 &= 0x2222222222222222;\n        $z2 &= 0x4444444444444444;\n        $z3 &= -8608480567731124088; // 0x8888888888888888 gets interpreted as a float\n\n        $z = $z0 | $z1 | $z2 | $z3;\n\n        return pack('J', $z);\n    }\n\n    /**\n     * Adds two numbers\n     *\n     * @param string $x\n     * @param string $y\n     * @return string\n     */\n    private static function subAdd2($x, $y)\n    {\n        $length = max(strlen($x), strlen($y));\n        $x = str_pad($x, $length, \"\\0\", STR_PAD_LEFT);\n        $y = str_pad($y, $length, \"\\0\", STR_PAD_LEFT);\n        return $x ^ $y;\n    }\n\n    /**\n     * Adds three numbers\n     *\n     * @param string $x\n     * @param string $y\n     * @return string\n     */\n    private static function subAdd3($x, $y, $z)\n    {\n        $length = max(strlen($x), strlen($y), strlen($z));\n        $x = str_pad($x, $length, \"\\0\", STR_PAD_LEFT);\n        $y = str_pad($y, $length, \"\\0\", STR_PAD_LEFT);\n        $z = str_pad($z, $length, \"\\0\", STR_PAD_LEFT);\n        return $x ^ $y ^ $z;\n    }\n\n    /**\n     * Adds two BinaryFieldIntegers.\n     *\n     * @return static\n     */\n    public function add(self $y)\n    {\n        static::checkInstance($this, $y);\n\n        $length = strlen(static::$modulo[$this->instanceID]);\n\n        $x = str_pad($this->value, $length, \"\\0\", STR_PAD_LEFT);\n        $y = str_pad($y->value, $length, \"\\0\", STR_PAD_LEFT);\n\n        return new static($this->instanceID, $x ^ $y);\n    }\n\n    /**\n     * Subtracts two BinaryFieldIntegers.\n     *\n     * @return static\n     */\n    public function subtract(self $x)\n    {\n        return $this->add($x);\n    }\n\n    /**\n     * Multiplies two BinaryFieldIntegers.\n     *\n     * @return static\n     */\n    public function multiply(self $y)\n    {\n        static::checkInstance($this, $y);\n\n        return new static($this->instanceID, static::polynomialMultiply($this->value, $y->value));\n    }\n\n    /**\n     * Returns the modular inverse of a BinaryFieldInteger\n     *\n     * @return static\n     */\n    public function modInverse()\n    {\n        $remainder0 = static::$modulo[$this->instanceID];\n        $remainder1 = $this->value;\n\n        if ($remainder1 == '') {\n            return new static($this->instanceID);\n        }\n\n        $aux0 = \"\\0\";\n        $aux1 = \"\\1\";\n        while ($remainder1 != \"\\1\") {\n            list($q, $r) = static::polynomialDivide($remainder0, $remainder1);\n            $remainder0 = $remainder1;\n            $remainder1 = $r;\n            // the auxiliary in row n is given by the sum of the auxiliary in\n            // row n-2 and the product of the quotient and the auxiliary in row\n            // n-1\n            $temp = static::polynomialMultiply($aux1, $q);\n            $aux = str_pad($aux0, strlen($temp), \"\\0\", STR_PAD_LEFT) ^\n                   str_pad($temp, strlen($aux0), \"\\0\", STR_PAD_LEFT);\n            $aux0 = $aux1;\n            $aux1 = $aux;\n        }\n\n        $temp = new static($this->instanceID);\n        $temp->value = ltrim($aux1, \"\\0\");\n        return $temp;\n    }\n\n    /**\n     * Divides two PrimeFieldIntegers.\n     *\n     * @return static\n     */\n    public function divide(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        $x = $x->modInverse();\n        return $this->multiply($x);\n    }\n\n    /**\n     * Negate\n     *\n     * A negative number can be written as 0-12. With modulos, 0 is the same thing as the modulo\n     * so 0-12 is the same thing as modulo-12\n     *\n     * @return object\n     */\n    public function negate()\n    {\n        $x = str_pad($this->value, strlen(static::$modulo[$this->instanceID]), \"\\0\", STR_PAD_LEFT);\n\n        return new static($this->instanceID, $x ^ static::$modulo[$this->instanceID]);\n    }\n\n    /**\n     * Returns the modulo\n     *\n     * @return string\n     */\n    public static function getModulo($instanceID)\n    {\n        return static::$modulo[$instanceID];\n    }\n\n    /**\n     * Converts an Integer to a byte string (eg. base-256).\n     *\n     * @return string\n     */\n    public function toBytes()\n    {\n        return str_pad($this->value, strlen(static::$modulo[$this->instanceID]), \"\\0\", STR_PAD_LEFT);\n    }\n\n    /**\n     * Converts an Integer to a hex string (eg. base-16).\n     *\n     * @return string\n     */\n    public function toHex()\n    {\n        return Strings::bin2hex($this->toBytes());\n    }\n\n    /**\n     * Converts an Integer to a bit string (eg. base-2).\n     *\n     * @return string\n     */\n    public function toBits()\n    {\n        //return str_pad(BinaryField::base256ToBase2($this->value), strlen(static::$modulo[$this->instanceID]), '0', STR_PAD_LEFT);\n        return BinaryField::base256ToBase2($this->value);\n    }\n\n    /**\n     * Converts an Integer to a BigInteger\n     *\n     * @return string\n     */\n    public function toBigInteger()\n    {\n        return new BigInteger($this->value, 256);\n    }\n\n    /**\n     *  __toString() magic method\n     *\n     */\n    public function __toString()\n    {\n        return (string) $this->toBigInteger();\n    }\n\n    /**\n     *  __debugInfo() magic method\n     *\n     */\n    public function __debugInfo()\n    {\n        return ['value' => $this->toHex()];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField.php",
    "content": "<?php\n\n/**\n * Binary Finite Fields\n *\n * Utilizes the factory design pattern\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Math;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Math\\BinaryField\\Integer;\nuse phpseclib3\\Math\\Common\\FiniteField;\n\n/**\n * Binary Finite Fields\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass BinaryField extends FiniteField\n{\n    /**\n     * Instance Counter\n     *\n     * @var int\n     */\n    private static $instanceCounter = 0;\n\n    /**\n     * Keeps track of current instance\n     *\n     * @var int\n     */\n    protected $instanceID;\n\n    /** @var BigInteger */\n    private $randomMax;\n\n    /**\n     * Default constructor\n     */\n    public function __construct(...$indices)\n    {\n        $m = array_shift($indices);\n        if ($m > 571) {\n            /* sect571r1 and sect571k1 are the largest binary curves that https://www.secg.org/sec2-v2.pdf defines\n               altho theoretically there may be legit reasons to use binary finite fields with larger degrees\n               imposing a limit on the maximum size is both reasonable and precedented. in particular,\n               http://tools.ietf.org/html/rfc4253#section-6.1 (The Secure Shell (SSH) Transport Layer Protocol) says\n               \"implementations SHOULD check that the packet length is reasonable in order for the implementation to\n                avoid denial of service and/or buffer overflow attacks\" */\n            throw new \\OutOfBoundsException('Degrees larger than 571 are not supported');\n        }\n        $val = str_repeat('0', $m) . '1';\n        foreach ($indices as $index) {\n            $val[$index] = '1';\n        }\n        $modulo = static::base2ToBase256(strrev($val));\n\n        $mStart = 2 * $m - 2;\n        $t = ceil($m / 8);\n        $finalMask = chr((1 << ($m % 8)) - 1);\n        if ($finalMask == \"\\0\") {\n            $finalMask = \"\\xFF\";\n        }\n        $bitLen = $mStart + 1;\n        $pad = ceil($bitLen / 8);\n        $h = $bitLen & 7;\n        $h = $h ? 8 - $h : 0;\n\n        $r = rtrim(substr($val, 0, -1), '0');\n        $u = [static::base2ToBase256(strrev($r))];\n        for ($i = 1; $i < 8; $i++) {\n            $u[] = static::base2ToBase256(strrev(str_repeat('0', $i) . $r));\n        }\n\n        // implements algorithm 2.40 (in section 2.3.5) in \"Guide to Elliptic Curve Cryptography\"\n        // with W = 8\n        $reduce = function ($c) use ($u, $mStart, $m, $t, $finalMask, $pad, $h) {\n            $c = str_pad($c, $pad, \"\\0\", STR_PAD_LEFT);\n            for ($i = $mStart; $i >= $m;) {\n                $g = $h >> 3;\n                $mask = $h & 7;\n                $mask = $mask ? 1 << (7 - $mask) : 0x80;\n                for (; $mask > 0; $mask >>= 1, $i--, $h++) {\n                    if (ord($c[$g]) & $mask) {\n                        $temp = $i - $m;\n                        $j = $temp >> 3;\n                        $k = $temp & 7;\n                        $t1 = $j ? substr($c, 0, -$j) : $c;\n                        $length = strlen($t1);\n                        if ($length) {\n                            $t2 = str_pad($u[$k], $length, \"\\0\", STR_PAD_LEFT);\n                            $temp = $t1 ^ $t2;\n                            $c = $j ? substr_replace($c, $temp, 0, $length) : $temp;\n                        }\n                    }\n                }\n            }\n            $c = substr($c, -$t);\n            if (strlen($c) == $t) {\n                $c[0] = $c[0] & $finalMask;\n            }\n            return ltrim($c, \"\\0\");\n        };\n\n        $this->instanceID = self::$instanceCounter++;\n        Integer::setModulo($this->instanceID, $modulo);\n        Integer::setRecurringModuloFunction($this->instanceID, $reduce);\n\n        $this->randomMax = new BigInteger($modulo, 2);\n    }\n\n    /**\n     * Returns an instance of a dynamically generated PrimeFieldInteger class\n     *\n     * @param string $num\n     * @return Integer\n     */\n    public function newInteger($num)\n    {\n        return new Integer($this->instanceID, $num instanceof BigInteger ? $num->toBytes() : $num);\n    }\n\n    /**\n     * Returns an integer on the finite field between one and the prime modulo\n     *\n     * @return Integer\n     */\n    public function randomInteger()\n    {\n        static $one;\n        if (!isset($one)) {\n            $one = new BigInteger(1);\n        }\n\n        return new Integer($this->instanceID, BigInteger::randomRange($one, $this->randomMax)->toBytes());\n    }\n\n    /**\n     * Returns the length of the modulo in bytes\n     *\n     * @return int\n     */\n    public function getLengthInBytes()\n    {\n        return strlen(Integer::getModulo($this->instanceID));\n    }\n\n    /**\n     * Returns the length of the modulo in bits\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return strlen(Integer::getModulo($this->instanceID)) << 3;\n    }\n\n    /**\n     * Converts a base-2 string to a base-256 string\n     *\n     * @param string $x\n     * @param int|null $size\n     * @return string\n     */\n    public static function base2ToBase256($x, $size = null)\n    {\n        $str = Strings::bits2bin($x);\n\n        $pad = strlen($x) >> 3;\n        if (strlen($x) & 3) {\n            $pad++;\n        }\n        $str = str_pad($str, $pad, \"\\0\", STR_PAD_LEFT);\n        if (isset($size)) {\n            $str = str_pad($str, $size, \"\\0\", STR_PAD_LEFT);\n        }\n\n        return $str;\n    }\n\n    /**\n     * Converts a base-256 string to a base-2 string\n     *\n     * @param string $x\n     * @return string\n     */\n    public static function base256ToBase2($x)\n    {\n        if (function_exists('gmp_import')) {\n            return gmp_strval(gmp_import($x), 2);\n        }\n\n        return Strings::bin2bits($x);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField/Integer.php",
    "content": "<?php\n\n/**\n * Finite Field Integer Base Class\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Math\\Common\\FiniteField;\n\n/**\n * Finite Field Integer\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class Integer implements \\JsonSerializable\n{\n    /**\n     * JSON Serialize\n     *\n     * Will be called, automatically, when json_encode() is called on a BigInteger object.\n     *\n     * PHP Serialize isn't supported because unserializing would require the factory be\n     * serialized as well and that just sounds like too much\n     *\n     * @return array{hex: string}\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return ['hex' => $this->toHex(true)];\n    }\n\n    /**\n     * Converts an Integer to a hex string (eg. base-16).\n     *\n     * @return string\n     */\n    abstract public function toHex();\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField.php",
    "content": "<?php\n\n/**\n * Finite Fields Base Class\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Math\\Common;\n\n/**\n * Finite Fields\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nabstract class FiniteField\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.php",
    "content": "<?php\n\n/**\n * Prime Finite Fields\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n */\n\nnamespace phpseclib3\\Math\\PrimeField;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\Math\\Common\\FiniteField\\Integer as Base;\n\n/**\n * Prime Finite Fields\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Integer extends Base\n{\n    /**\n     * Holds the PrimeField's value\n     *\n     * @var BigInteger\n     */\n    protected $value;\n\n    /**\n     * Keeps track of current instance\n     *\n     * @var int\n     */\n    protected $instanceID;\n\n    /**\n     * Holds the PrimeField's modulo\n     *\n     * @var array<int, BigInteger>\n     */\n    protected static $modulo;\n\n    /**\n     * Holds a pre-generated function to perform modulo reductions\n     *\n     * @var array<int, callable(BigInteger):BigInteger>\n     */\n    protected static $reduce;\n\n    /**\n     * Zero\n     *\n     * @var BigInteger[]\n     */\n    protected static $zero;\n\n    /**\n     * One\n     *\n     * @var BigInteger[]\n     */\n    protected static $one;\n\n    /**\n     * Two\n     *\n     * @var BigInteger[]\n     */\n    protected static $two;\n\n    /**\n     * Default constructor\n     *\n     * @param int $instanceID\n     * @param BigInteger $num\n     */\n    public function __construct($instanceID, $num = null)\n    {\n        $this->instanceID = $instanceID;\n        if (!isset($num)) {\n            $this->value = clone static::$zero[$instanceID];\n        } else {\n            $reduce = static::$reduce[$instanceID];\n            $this->value = $reduce($num);\n        }\n    }\n\n    /**\n     * Set the modulo for a given instance\n     *\n     * @param int $instanceID\n     * @return void\n     */\n    public static function setModulo($instanceID, BigInteger $modulo)\n    {\n        static::$modulo[$instanceID] = $modulo;\n    }\n\n    /**\n     * Set the modulo for a given instance\n     *\n     * @param int $instanceID\n     * @return void\n     */\n    public static function setRecurringModuloFunction($instanceID, callable $function)\n    {\n        static::$reduce[$instanceID] = $function;\n        if (!isset(static::$zero[$instanceID])) {\n            static::$zero[$instanceID] = new BigInteger();\n        }\n    }\n\n    /**\n     * Delete the modulo for a given instance\n     */\n    public static function cleanupCache($instanceID)\n    {\n        unset(static::$modulo[$instanceID]);\n        unset(static::$reduce[$instanceID]);\n        unset(static::$zero[$instanceID]);\n        unset(static::$one[$instanceID]);\n        unset(static::$two[$instanceID]);\n    }\n\n    /**\n     * Returns the modulo\n     *\n     * @param int $instanceID\n     * @return BigInteger\n     */\n    public static function getModulo($instanceID)\n    {\n        return static::$modulo[$instanceID];\n    }\n\n    /**\n     * Tests a parameter to see if it's of the right instance\n     *\n     * Throws an exception if the incorrect class is being utilized\n     *\n     * @return void\n     */\n    public static function checkInstance(self $x, self $y)\n    {\n        if ($x->instanceID != $y->instanceID) {\n            throw new \\UnexpectedValueException('The instances of the two PrimeField\\Integer objects do not match');\n        }\n    }\n\n    /**\n     * Tests the equality of two numbers.\n     *\n     * @return bool\n     */\n    public function equals(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        return $this->value->equals($x->value);\n    }\n\n    /**\n     * Compares two numbers.\n     *\n     * @return int\n     */\n    public function compare(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        return $this->value->compare($x->value);\n    }\n\n    /**\n     * Adds two PrimeFieldIntegers.\n     *\n     * @return static\n     */\n    public function add(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        $temp = new static($this->instanceID);\n        $temp->value = $this->value->add($x->value);\n        if ($temp->value->compare(static::$modulo[$this->instanceID]) >= 0) {\n            $temp->value = $temp->value->subtract(static::$modulo[$this->instanceID]);\n        }\n\n        return $temp;\n    }\n\n    /**\n     * Subtracts two PrimeFieldIntegers.\n     *\n     * @return static\n     */\n    public function subtract(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        $temp = new static($this->instanceID);\n        $temp->value = $this->value->subtract($x->value);\n        if ($temp->value->isNegative()) {\n            $temp->value = $temp->value->add(static::$modulo[$this->instanceID]);\n        }\n\n        return $temp;\n    }\n\n    /**\n     * Multiplies two PrimeFieldIntegers.\n     *\n     * @return static\n     */\n    public function multiply(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        return new static($this->instanceID, $this->value->multiply($x->value));\n    }\n\n    /**\n     * Divides two PrimeFieldIntegers.\n     *\n     * @return static\n     */\n    public function divide(self $x)\n    {\n        static::checkInstance($this, $x);\n\n        $denominator = $x->value->modInverse(static::$modulo[$this->instanceID]);\n        return new static($this->instanceID, $this->value->multiply($denominator));\n    }\n\n    /**\n     * Performs power operation on a PrimeFieldInteger.\n     *\n     * @return static\n     */\n    public function pow(BigInteger $x)\n    {\n        $temp = new static($this->instanceID);\n        $temp->value = $this->value->powMod($x, static::$modulo[$this->instanceID]);\n\n        return $temp;\n    }\n\n    /**\n     * Calculates the square root\n     *\n     * @link https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm\n     * @return static|false\n     */\n    public function squareRoot()\n    {\n        if (!isset(static::$one[$this->instanceID])) {\n            static::$one[$this->instanceID] = new BigInteger(1);\n            static::$two[$this->instanceID] = new BigInteger(2);\n        }\n        $one = &static::$one[$this->instanceID];\n        $two = &static::$two[$this->instanceID];\n        $modulo = &static::$modulo[$this->instanceID];\n        $reduce = &static::$reduce[$this->instanceID];\n\n        $p_1 = $modulo->subtract($one);\n        $q = clone $p_1;\n        $s = BigInteger::scan1divide($q);\n        list($pow) = $p_1->divide($two);\n        for ($z = $one; !$z->equals($modulo); $z = $z->add($one)) {\n            $temp = $z->powMod($pow, $modulo);\n            if ($temp->equals($p_1)) {\n                break;\n            }\n        }\n\n        $m = new BigInteger($s);\n        $c = $z->powMod($q, $modulo);\n        $t = $this->value->powMod($q, $modulo);\n        list($temp) = $q->add($one)->divide($two);\n        $r = $this->value->powMod($temp, $modulo);\n\n        while (!$t->equals($one)) {\n            for ($i = clone $one; $i->compare($m) < 0; $i = $i->add($one)) {\n                if ($t->powMod($two->pow($i), $modulo)->equals($one)) {\n                    break;\n                }\n            }\n\n            if ($i->compare($m) == 0) {\n                return false;\n            }\n            $b = $c->powMod($two->pow($m->subtract($i)->subtract($one)), $modulo);\n            $m = $i;\n            $c = $reduce($b->multiply($b));\n            $t = $reduce($t->multiply($c));\n            $r = $reduce($r->multiply($b));\n        }\n\n        return new static($this->instanceID, $r);\n    }\n\n    /**\n     * Is Odd?\n     *\n     * @return bool\n     */\n    public function isOdd()\n    {\n        return $this->value->isOdd();\n    }\n\n    /**\n     * Negate\n     *\n     * A negative number can be written as 0-12. With modulos, 0 is the same thing as the modulo\n     * so 0-12 is the same thing as modulo-12\n     *\n     * @return static\n     */\n    public function negate()\n    {\n        return new static($this->instanceID, static::$modulo[$this->instanceID]->subtract($this->value));\n    }\n\n    /**\n     * Converts an Integer to a byte string (eg. base-256).\n     *\n     * @return string\n     */\n    public function toBytes()\n    {\n        if (isset(static::$modulo[$this->instanceID])) {\n            $length = static::$modulo[$this->instanceID]->getLengthInBytes();\n            return str_pad($this->value->toBytes(), $length, \"\\0\", STR_PAD_LEFT);\n        }\n        return $this->value->toBytes();\n    }\n\n    /**\n     * Converts an Integer to a hex string (eg. base-16).\n     *\n     * @return string\n     */\n    public function toHex()\n    {\n        return Strings::bin2hex($this->toBytes());\n    }\n\n    /**\n     * Converts an Integer to a bit string (eg. base-2).\n     *\n     * @return string\n     */\n    public function toBits()\n    {\n        // return $this->value->toBits();\n        static $length;\n        if (!isset($length)) {\n            $length = static::$modulo[$this->instanceID]->getLength();\n        }\n\n        return str_pad($this->value->toBits(), $length, '0', STR_PAD_LEFT);\n    }\n\n    /**\n     * Returns the w-ary non-adjacent form (wNAF)\n     *\n     * @param int $w optional\n     * @return array<int, int>\n     */\n    public function getNAF($w = 1)\n    {\n        $w++;\n\n        $zero = &static::$zero[$this->instanceID];\n\n        $mask = new BigInteger((1 << $w) - 1);\n        $sub = new BigInteger(1 << $w);\n        //$sub = new BigInteger(1 << ($w - 1));\n        $d = $this->toBigInteger();\n        $d_i = [];\n\n        $i = 0;\n        while ($d->compare($zero) > 0) {\n            if ($d->isOdd()) {\n                // start mods\n\n                $bigInteger = $d->testBit($w - 1) ?\n                    $d->bitwise_and($mask)->subtract($sub) :\n                    //$sub->subtract($d->bitwise_and($mask)) :\n                    $d->bitwise_and($mask);\n                // end mods\n                $d = $d->subtract($bigInteger);\n                $d_i[$i] = (int) $bigInteger->toString();\n            } else {\n                $d_i[$i] = 0;\n            }\n            $shift = !$d->equals($zero) && $d->bitwise_and($mask)->equals($zero) ? $w : 1; // $w or $w + 1?\n            $d = $d->bitwise_rightShift($shift);\n            while (--$shift > 0) {\n                $d_i[++$i] = 0;\n            }\n            $i++;\n        }\n\n        return $d_i;\n    }\n\n    /**\n     * Converts an Integer to a BigInteger\n     *\n     * @return BigInteger\n     */\n    public function toBigInteger()\n    {\n        return clone $this->value;\n    }\n\n    /**\n     *  __toString() magic method\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return (string) $this->value;\n    }\n\n    /**\n     *  __debugInfo() magic method\n     *\n     * @return array\n     */\n    public function __debugInfo()\n    {\n        return ['value' => $this->toHex()];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField.php",
    "content": "<?php\n\n/**\n * Prime Finite Fields\n *\n * Utilizes the factory design pattern\n *\n * PHP version 5 and 7\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2017 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://pear.php.net/package/Math_BigInteger\n */\n\nnamespace phpseclib3\\Math;\n\nuse phpseclib3\\Math\\Common\\FiniteField;\nuse phpseclib3\\Math\\PrimeField\\Integer;\n\n/**\n * Prime Finite Fields\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass PrimeField extends FiniteField\n{\n    /**\n     * Instance Counter\n     *\n     * @var int\n     */\n    private static $instanceCounter = 0;\n\n    /**\n     * Keeps track of current instance\n     *\n     * @var int\n     */\n    protected $instanceID;\n\n    /**\n     * Default constructor\n     */\n    public function __construct(BigInteger $modulo)\n    {\n        if (!$modulo->isPrime()) {\n            throw new \\UnexpectedValueException('PrimeField requires a prime number be passed to the constructor');\n        }\n\n        $this->instanceID = self::$instanceCounter++;\n        Integer::setModulo($this->instanceID, $modulo);\n        Integer::setRecurringModuloFunction($this->instanceID, $modulo->createRecurringModuloFunction());\n    }\n\n    /**\n     * Use a custom defined modular reduction function\n     *\n     * @return void\n     */\n    public function setReduction(\\Closure $func)\n    {\n        $this->reduce = $func->bindTo($this, $this);\n    }\n\n    /**\n     * Returns an instance of a dynamically generated PrimeFieldInteger class\n     *\n     * @return Integer\n     */\n    public function newInteger(BigInteger $num)\n    {\n        return new Integer($this->instanceID, $num);\n    }\n\n    /**\n     * Returns an integer on the finite field between one and the prime modulo\n     *\n     * @return Integer\n     */\n    public function randomInteger()\n    {\n        static $one;\n        if (!isset($one)) {\n            $one = new BigInteger(1);\n        }\n\n        return new Integer($this->instanceID, BigInteger::randomRange($one, Integer::getModulo($this->instanceID)));\n    }\n\n    /**\n     * Returns the length of the modulo in bytes\n     *\n     * @return int\n     */\n    public function getLengthInBytes()\n    {\n        return Integer::getModulo($this->instanceID)->getLengthInBytes();\n    }\n\n    /**\n     * Returns the length of the modulo in bits\n     *\n     * @return int\n     */\n    public function getLength()\n    {\n        return Integer::getModulo($this->instanceID)->getLength();\n    }\n\n    /**\n     *  Destructor\n     */\n    public function __destruct()\n    {\n        Integer::cleanupCache($this->instanceID);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of SCP.\n *\n * PHP version 5\n *\n * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $scp = new \\phpseclib3\\Net\\SCP('www.domain.tld');\n *    if (!$scp->login('username', 'password')) {\n *        exit('Login Failed');\n *    }\n *\n *    echo $scp->exec('pwd') . \"\\r\\n\";\n *    $scp->put('filename.ext', 'hello, world!');\n *    echo $scp->exec('ls -latr');\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Net;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\FileNotFoundException;\n\n/**\n * Pure-PHP implementations of SCP.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass SCP extends SSH2\n{\n    /**\n     * Reads data from a local file.\n     *\n     * @see \\phpseclib3\\Net\\SCP::put()\n     */\n    const SOURCE_LOCAL_FILE = 1;\n    /**\n     * Reads data from a string.\n     *\n     * @see \\phpseclib3\\Net\\SCP::put()\n     */\n    // this value isn't really used anymore but i'm keeping it reserved for historical reasons\n    const SOURCE_STRING = 2;\n    /**\n     * SCP.php doesn't support SOURCE_CALLBACK because, with that one, we don't know the size, in advance\n     */\n    //const SOURCE_CALLBACK = 16;\n\n    /**\n     * Error information\n     *\n     * @see self::getSCPErrors()\n     * @see self::getLastSCPError()\n     * @var array\n     */\n    private $scp_errors = [];\n\n    /**\n     * Uploads a file to the SCP server.\n     *\n     * By default, \\phpseclib\\Net\\SCP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.\n     * So, for example, if you set $data to 'filename.ext' and then do \\phpseclib\\Net\\SCP::get(), you will get a file, twelve bytes\n     * long, containing 'filename.ext' as its contents.\n     *\n     * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior.  With self::SOURCE_LOCAL_FILE, $remote_file will\n     * contain as many bytes as filename.ext does on your local filesystem.  If your filename.ext is 1MB then that is how\n     * large $remote_file will be, as well.\n     *\n     * Currently, only binary mode is supported.  As such, if the line endings need to be adjusted, you will need to take\n     * care of that, yourself.\n     *\n     * @param string $remote_file\n     * @param string $data\n     * @param int $mode\n     * @param callable $callback\n     * @return bool\n     * @access public\n     */\n    public function put($remote_file, $data, $mode = self::SOURCE_STRING, $callback = null)\n    {\n        if (!($this->bitmap & self::MASK_LOGIN)) {\n            return false;\n        }\n\n        if (empty($remote_file)) {\n            // remote file cannot be blank\n            return false;\n        }\n\n        if (!$this->exec('scp -t ' . escapeshellarg($remote_file), false)) { // -t = to\n            return false;\n        }\n\n        $temp = $this->get_channel_packet(self::CHANNEL_EXEC, true);\n        if ($temp !== chr(0)) {\n            $this->close_channel(self::CHANNEL_EXEC, true);\n            return false;\n        }\n\n        $packet_size = $this->packet_size_client_to_server[self::CHANNEL_EXEC] - 4;\n\n        $remote_file = basename($remote_file);\n\n        $dataCallback = false;\n        switch (true) {\n            case is_resource($data):\n                $mode = $mode & ~self::SOURCE_LOCAL_FILE;\n                $info = stream_get_meta_data($data);\n                if (isset($info['wrapper_type']) && $info['wrapper_type'] == 'PHP' && $info['stream_type'] == 'Input') {\n                    $fp = fopen('php://memory', 'w+');\n                    stream_copy_to_stream($data, $fp);\n                    rewind($fp);\n                } else {\n                    $fp = $data;\n                }\n                break;\n            case $mode & self::SOURCE_LOCAL_FILE:\n                if (!is_file($data)) {\n                    throw new FileNotFoundException(\"$data is not a valid file\");\n                }\n                $fp = @fopen($data, 'rb');\n                if (!$fp) {\n                    $this->close_channel(self::CHANNEL_EXEC, true);\n                    return false;\n                }\n        }\n\n        if (isset($fp)) {\n            $stat = fstat($fp);\n            $size = !empty($stat) ? $stat['size'] : 0;\n        } else {\n            $size = strlen($data);\n        }\n\n        $sent = 0;\n        $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;\n\n        $temp = 'C0644 ' . $size . ' ' . $remote_file . \"\\n\";\n        $this->send_channel_packet(self::CHANNEL_EXEC, $temp);\n\n        $temp = $this->get_channel_packet(self::CHANNEL_EXEC, true);\n        if ($temp !== chr(0)) {\n            $this->close_channel(self::CHANNEL_EXEC, true);\n            return false;\n        }\n\n        $sent = 0;\n        while ($sent < $size) {\n            $temp = $mode & self::SOURCE_STRING ? substr($data, $sent, $packet_size) : fread($fp, $packet_size);\n            $this->send_channel_packet(self::CHANNEL_EXEC, $temp);\n            $sent += strlen($temp);\n\n            if (is_callable($callback)) {\n                call_user_func($callback, $sent);\n            }\n        }\n        $this->close_channel(self::CHANNEL_EXEC, true);\n\n        if ($mode != self::SOURCE_STRING) {\n            fclose($fp);\n        }\n\n        return true;\n    }\n\n    /**\n     * Downloads a file from the SCP server.\n     *\n     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if\n     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the\n     * operation\n     *\n     * @param string $remote_file\n     * @param string $local_file\n     * @return mixed\n     * @access public\n     */\n    public function get($remote_file, $local_file = null, $progressCallback = null)\n    {\n        if (!($this->bitmap & self::MASK_LOGIN)) {\n            return false;\n        }\n\n        if (!$this->exec('scp -f ' . escapeshellarg($remote_file), false)) { // -f = from\n            return false;\n        }\n\n        $this->send_channel_packet(self::CHANNEL_EXEC, chr(0));\n\n        $info = $this->get_channel_packet(self::CHANNEL_EXEC, true);\n        // per https://goteleport.com/blog/scp-familiar-simple-insecure-slow/ non-zero responses mean there are errors\n        if ($info[0] === chr(1) || $info[0] == chr(2)) {\n            $type = $info[0] === chr(1) ? 'warning' : 'error';\n            $this->scp_errors[] = \"$type: \" . substr($info, 1);\n            $this->close_channel(self::CHANNEL_EXEC, true);\n            return false;\n        }\n\n        $this->send_channel_packet(self::CHANNEL_EXEC, chr(0));\n\n        if (!preg_match('#(?<perms>[^ ]+) (?<size>\\d+) (?<name>.+)#', rtrim($info), $info)) {\n            $this->close_channel(self::CHANNEL_EXEC, true);\n            return false;\n        }\n\n        $fclose_check = false;\n        if (is_resource($local_file)) {\n            $fp = $local_file;\n        } elseif (!is_null($local_file)) {\n            $fp = @fopen($local_file, 'wb');\n            if (!$fp) {\n                $this->close_channel(self::CHANNEL_EXEC, true);\n                return false;\n            }\n            $fclose_check = true;\n        } else {\n            $content = '';\n        }\n\n        $size = 0;\n        while (true) {\n            $data = $this->get_channel_packet(self::CHANNEL_EXEC, true);\n            // Terminate the loop in case the server repeatedly sends an empty response\n            if ($data === false) {\n                $this->close_channel(self::CHANNEL_EXEC, true);\n                // no data received from server\n                return false;\n            }\n            // SCP usually seems to split stuff out into 16k chunks\n            $length = strlen($data);\n            $size += $length;\n            $end = $size > $info['size'];\n            if ($end) {\n                $diff = $size - $info['size'];\n                $offset = $length - $diff;\n                if ($data[$offset] === chr(0)) {\n                    $data = substr($data, 0, -$diff);\n                } else {\n                    $type = $data[$offset] === chr(1) ? 'warning' : 'error';\n                    $this->scp_errors[] = \"$type: \" . substr($data, 1);\n                    $this->close_channel(self::CHANNEL_EXEC, true);\n                    return false;\n                }\n            }\n\n            if (is_null($local_file)) {\n                $content .= $data;\n            } else {\n                fputs($fp, $data);\n            }\n\n            if (is_callable($progressCallback)) {\n                call_user_func($progressCallback, $size);\n            }\n\n            if ($end) {\n                break;\n            }\n        }\n\n        $this->close_channel(self::CHANNEL_EXEC, true);\n\n        if ($fclose_check) {\n            fclose($fp);\n        }\n\n        // if $content isn't set that means a file was written to\n        return isset($content) ? $content : true;\n    }\n\n    /**\n     * Returns all errors on the SCP layer\n     *\n     * @return array\n     */\n    public function getSCPErrors()\n    {\n        return $this->scp_errors;\n    }\n\n    /**\n     * Returns the last error on the SCP layer\n     *\n     * @return string\n     */\n    public function getLastSCPError()\n    {\n        return count($this->scp_errors) ? $this->scp_errors[count($this->scp_errors) - 1] : '';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php",
    "content": "<?php\n\n/**\n * SFTP Stream Wrapper\n *\n * Creates an sftp:// protocol handler that can be used with, for example, fopen(), dir(), etc.\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2013 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Net\\SFTP;\n\nuse phpseclib3\\Crypt\\Common\\PrivateKey;\nuse phpseclib3\\Net\\SFTP;\nuse phpseclib3\\Net\\SSH2;\n\n/**\n * SFTP Stream Wrapper\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Stream\n{\n    /**\n     * SFTP instances\n     *\n     * Rather than re-create the connection we re-use instances if possible\n     *\n     * @var array\n     */\n    public static $instances;\n\n    /**\n     * SFTP instance\n     *\n     * @var object\n     */\n    private $sftp;\n\n    /**\n     * Path\n     *\n     * @var string\n     */\n    private $path;\n\n    /**\n     * Mode\n     *\n     * @var string\n     */\n    private $mode;\n\n    /**\n     * Position\n     *\n     * @var int\n     */\n    private $pos;\n\n    /**\n     * Size\n     *\n     * @var int\n     */\n    private $size;\n\n    /**\n     * Directory entries\n     *\n     * @var array\n     */\n    private $entries;\n\n    /**\n     * EOF flag\n     *\n     * @var bool\n     */\n    private $eof;\n\n    /**\n     * Context resource\n     *\n     * Technically this needs to be publicly accessible so PHP can set it directly\n     *\n     * @var resource\n     */\n    public $context;\n\n    /**\n     * Notification callback function\n     *\n     * @var callable\n     */\n    private $notification;\n\n    /**\n     * Registers this class as a URL wrapper.\n     *\n     * @param string $protocol The wrapper name to be registered.\n     * @return bool True on success, false otherwise.\n     */\n    public static function register($protocol = 'sftp')\n    {\n        if (in_array($protocol, stream_get_wrappers(), true)) {\n            return false;\n        }\n        return stream_wrapper_register($protocol, get_called_class());\n    }\n\n    /**\n     * The Constructor\n     *\n     */\n    public function __construct()\n    {\n        if (defined('NET_SFTP_STREAM_LOGGING')) {\n            echo \"__construct()\\r\\n\";\n        }\n    }\n\n    /**\n     * Path Parser\n     *\n     * Extract a path from a URI and actually connect to an SSH server if appropriate\n     *\n     * If \"notification\" is set as a context parameter the message code for successful login is\n     * NET_SSH2_MSG_USERAUTH_SUCCESS. For a failed login it's NET_SSH2_MSG_USERAUTH_FAILURE.\n     *\n     * @param string $path\n     * @return string\n     */\n    protected function parse_path($path)\n    {\n        $orig = $path;\n        $url = parse_url($path) + ['port' => 22];\n\n        $keys = ['scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment'];\n        foreach ($keys as $key) {\n            if (isset($url[$key])) {\n                $$key = $url[$key];\n            }\n        }\n\n        if (isset($query)) {\n            $path .= '?' . $query;\n        } elseif (preg_match('/(\\?|\\?#)$/', $orig)) {\n            $path .= '?';\n        }\n        if (isset($fragment)) {\n            $path .= '#' . $fragment;\n        } elseif ($orig[strlen($orig) - 1] == '#') {\n            $path .= '#';\n        }\n\n        if (!isset($host)) {\n            return false;\n        }\n\n        if (isset($this->context)) {\n            $context = stream_context_get_params($this->context);\n            if (isset($context['notification'])) {\n                $this->notification = $context['notification'];\n            }\n        }\n\n        if (preg_match('/^{[a-z0-9]+}$/i', $host)) {\n            $host = SSH2::getConnectionByResourceId($host);\n            if ($host === false) {\n                return false;\n            }\n            $this->sftp = $host;\n        } else {\n            if (isset($this->context)) {\n                $context = stream_context_get_options($this->context);\n            }\n            if (isset($context[$scheme]['session'])) {\n                $sftp = $context[$scheme]['session'];\n            }\n            if (isset($context[$scheme]['sftp'])) {\n                $sftp = $context[$scheme]['sftp'];\n            }\n            if (isset($sftp) && $sftp instanceof SFTP) {\n                $this->sftp = $sftp;\n                return $path;\n            }\n            if (isset($context[$scheme]['username'])) {\n                $user = $context[$scheme]['username'];\n            }\n            if (isset($context[$scheme]['password'])) {\n                $pass = $context[$scheme]['password'];\n            }\n            if (isset($context[$scheme]['privkey']) && $context[$scheme]['privkey'] instanceof PrivateKey) {\n                $pass = $context[$scheme]['privkey'];\n            }\n\n            if (!isset($user) || !isset($pass)) {\n                return false;\n            }\n\n            // casting $pass to a string is necessary in the event that it's a \\phpseclib3\\Crypt\\RSA object\n            if (isset(self::$instances[$host][$port][$user][(string) $pass])) {\n                $this->sftp = self::$instances[$host][$port][$user][(string) $pass];\n            } else {\n                $this->sftp = new SFTP($host, $port);\n                $this->sftp->disableStatCache();\n                if (isset($this->notification) && is_callable($this->notification)) {\n                    /* if !is_callable($this->notification) we could do this:\n\n                       user_error('fopen(): failed to call user notifier', E_USER_WARNING);\n\n                       the ftp wrapper gives errors like that when the notifier isn't callable.\n                       i've opted not to do that, however, since the ftp wrapper gives the line\n                       on which the fopen occurred as the line number - not the line that the\n                       user_error is on.\n                    */\n                    call_user_func($this->notification, STREAM_NOTIFY_CONNECT, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0);\n                    call_user_func($this->notification, STREAM_NOTIFY_AUTH_REQUIRED, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0);\n                    if (!$this->sftp->login($user, $pass)) {\n                        call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_ERR, 'Login Failure', NET_SSH2_MSG_USERAUTH_FAILURE, 0, 0);\n                        return false;\n                    }\n                    call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_INFO, 'Login Success', NET_SSH2_MSG_USERAUTH_SUCCESS, 0, 0);\n                } else {\n                    if (!$this->sftp->login($user, $pass)) {\n                        return false;\n                    }\n                }\n                self::$instances[$host][$port][$user][(string) $pass] = $this->sftp;\n            }\n        }\n\n        return $path;\n    }\n\n    /**\n     * Opens file or URL\n     *\n     * @param string $path\n     * @param string $mode\n     * @param int $options\n     * @param string $opened_path\n     * @return bool\n     */\n    private function _stream_open($path, $mode, $options, &$opened_path)\n    {\n        $path = $this->parse_path($path);\n\n        if ($path === false) {\n            return false;\n        }\n        $this->path = $path;\n\n        $this->size = $this->sftp->filesize($path);\n        $this->mode = preg_replace('#[bt]$#', '', $mode);\n        $this->eof = false;\n\n        if ($this->size === false) {\n            if ($this->mode[0] == 'r') {\n                return false;\n            } else {\n                $this->sftp->touch($path);\n                $this->size = 0;\n            }\n        } else {\n            switch ($this->mode[0]) {\n                case 'x':\n                    return false;\n                case 'w':\n                    $this->sftp->truncate($path, 0);\n                    $this->size = 0;\n            }\n        }\n\n        $this->pos = $this->mode[0] != 'a' ? 0 : $this->size;\n\n        return true;\n    }\n\n    /**\n     * Read from stream\n     *\n     * @param int $count\n     * @return mixed\n     */\n    private function _stream_read($count)\n    {\n        switch ($this->mode) {\n            case 'w':\n            case 'a':\n            case 'x':\n            case 'c':\n                return false;\n        }\n\n        // commented out because some files - eg. /dev/urandom - will say their size is 0 when in fact it's kinda infinite\n        //if ($this->pos >= $this->size) {\n        //    $this->eof = true;\n        //    return false;\n        //}\n\n        $result = $this->sftp->get($this->path, false, $this->pos, $count);\n        if (isset($this->notification) && is_callable($this->notification)) {\n            if ($result === false) {\n                call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0);\n                return 0;\n            }\n            // seems that PHP calls stream_read in 8k chunks\n            call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($result), $this->size);\n        }\n\n        if (empty($result)) { // ie. false or empty string\n            $this->eof = true;\n            return false;\n        }\n        $this->pos += strlen($result);\n\n        return $result;\n    }\n\n    /**\n     * Write to stream\n     *\n     * @param string $data\n     * @return int|false\n     */\n    private function _stream_write($data)\n    {\n        switch ($this->mode) {\n            case 'r':\n                return false;\n        }\n\n        $result = $this->sftp->put($this->path, $data, SFTP::SOURCE_STRING, $this->pos);\n        if (isset($this->notification) && is_callable($this->notification)) {\n            if (!$result) {\n                call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0);\n                return 0;\n            }\n            // seems that PHP splits up strings into 8k blocks before calling stream_write\n            call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($data), strlen($data));\n        }\n\n        if ($result === false) {\n            return false;\n        }\n        $this->pos += strlen($data);\n        if ($this->pos > $this->size) {\n            $this->size = $this->pos;\n        }\n        $this->eof = false;\n        return strlen($data);\n    }\n\n    /**\n     * Retrieve the current position of a stream\n     *\n     * @return int\n     */\n    private function _stream_tell()\n    {\n        return $this->pos;\n    }\n\n    /**\n     * Tests for end-of-file on a file pointer\n     *\n     * In my testing there are four classes functions that normally effect the pointer:\n     * fseek, fputs  / fwrite, fgets / fread and ftruncate.\n     *\n     * Only fgets / fread, however, results in feof() returning true. do fputs($fp, 'aaa') on a blank file and feof()\n     * will return false. do fread($fp, 1) and feof() will then return true. do fseek($fp, 10) on ablank file and feof()\n     * will return false. do fread($fp, 1) and feof() will then return true.\n     *\n     * @return bool\n     */\n    private function _stream_eof()\n    {\n        return $this->eof;\n    }\n\n    /**\n     * Seeks to specific location in a stream\n     *\n     * @param int $offset\n     * @param int $whence\n     * @return bool\n     */\n    private function _stream_seek($offset, $whence)\n    {\n        switch ($whence) {\n            case SEEK_SET:\n                if ($offset < 0) {\n                    return false;\n                }\n                break;\n            case SEEK_CUR:\n                $offset += $this->pos;\n                break;\n            case SEEK_END:\n                $offset += $this->size;\n        }\n\n        $this->pos = $offset;\n        $this->eof = false;\n        return true;\n    }\n\n    /**\n     * Change stream options\n     *\n     * @param string $path\n     * @param int $option\n     * @param mixed $var\n     * @return bool\n     */\n    private function _stream_metadata($path, $option, $var)\n    {\n        $path = $this->parse_path($path);\n        if ($path === false) {\n            return false;\n        }\n\n        // stream_metadata was introduced in PHP 5.4.0 but as of 5.4.11 the constants haven't been defined\n        // see http://www.php.net/streamwrapper.stream-metadata and https://bugs.php.net/64246\n        //     and https://github.com/php/php-src/blob/master/main/php_streams.h#L592\n        switch ($option) {\n            case 1: // PHP_STREAM_META_TOUCH\n                $time = isset($var[0]) ? $var[0] : null;\n                $atime = isset($var[1]) ? $var[1] : null;\n                return $this->sftp->touch($path, $time, $atime);\n            case 2: // PHP_STREAM_OWNER_NAME\n            case 3: // PHP_STREAM_GROUP_NAME\n                return false;\n            case 4: // PHP_STREAM_META_OWNER\n                return $this->sftp->chown($path, $var);\n            case 5: // PHP_STREAM_META_GROUP\n                return $this->sftp->chgrp($path, $var);\n            case 6: // PHP_STREAM_META_ACCESS\n                return $this->sftp->chmod($path, $var) !== false;\n        }\n    }\n\n    /**\n     * Retrieve the underlaying resource\n     *\n     * @param int $cast_as\n     * @return resource\n     */\n    private function _stream_cast($cast_as)\n    {\n        return $this->sftp->fsock;\n    }\n\n    /**\n     * Advisory file locking\n     *\n     * @param int $operation\n     * @return bool\n     */\n    private function _stream_lock($operation)\n    {\n        return false;\n    }\n\n    /**\n     * Renames a file or directory\n     *\n     * Attempts to rename oldname to newname, moving it between directories if necessary.\n     * If newname exists, it will be overwritten.  This is a departure from what \\phpseclib3\\Net\\SFTP\n     * does.\n     *\n     * @param string $path_from\n     * @param string $path_to\n     * @return bool\n     */\n    private function _rename($path_from, $path_to)\n    {\n        $path1 = parse_url($path_from);\n        $path2 = parse_url($path_to);\n        unset($path1['path'], $path2['path']);\n        if ($path1 != $path2) {\n            return false;\n        }\n\n        $path_from = $this->parse_path($path_from);\n        $path_to = parse_url($path_to);\n        if ($path_from === false) {\n            return false;\n        }\n\n        $path_to = $path_to['path']; // the $component part of parse_url() was added in PHP 5.1.2\n        // \"It is an error if there already exists a file with the name specified by newpath.\"\n        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-6.5\n        if (!$this->sftp->rename($path_from, $path_to)) {\n            if ($this->sftp->stat($path_to)) {\n                return $this->sftp->delete($path_to, true) && $this->sftp->rename($path_from, $path_to);\n            }\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Open directory handle\n     *\n     * The only $options is \"whether or not to enforce safe_mode (0x04)\". Since safe mode was deprecated in 5.3 and\n     * removed in 5.4 I'm just going to ignore it.\n     *\n     * Also, nlist() is the best that this function is realistically going to be able to do. When an SFTP client\n     * sends a SSH_FXP_READDIR packet you don't generally get info on just one file but on multiple files. Quoting\n     * the SFTP specs:\n     *\n     *    The SSH_FXP_NAME response has the following format:\n     *\n     *        uint32     id\n     *        uint32     count\n     *        repeats count times:\n     *                string     filename\n     *                string     longname\n     *                ATTRS      attrs\n     *\n     * @param string $path\n     * @param int $options\n     * @return bool\n     */\n    private function _dir_opendir($path, $options)\n    {\n        $path = $this->parse_path($path);\n        if ($path === false) {\n            return false;\n        }\n        $this->pos = 0;\n        $this->entries = $this->sftp->nlist($path);\n        return $this->entries !== false;\n    }\n\n    /**\n     * Read entry from directory handle\n     *\n     * @return mixed\n     */\n    private function _dir_readdir()\n    {\n        if (isset($this->entries[$this->pos])) {\n            return $this->entries[$this->pos++];\n        }\n        return false;\n    }\n\n    /**\n     * Rewind directory handle\n     *\n     * @return bool\n     */\n    private function _dir_rewinddir()\n    {\n        $this->pos = 0;\n        return true;\n    }\n\n    /**\n     * Close directory handle\n     *\n     * @return bool\n     */\n    private function _dir_closedir()\n    {\n        return true;\n    }\n\n    /**\n     * Create a directory\n     *\n     * Only valid $options is STREAM_MKDIR_RECURSIVE\n     *\n     * @param string $path\n     * @param int $mode\n     * @param int $options\n     * @return bool\n     */\n    private function _mkdir($path, $mode, $options)\n    {\n        $path = $this->parse_path($path);\n        if ($path === false) {\n            return false;\n        }\n\n        return $this->sftp->mkdir($path, $mode, $options & STREAM_MKDIR_RECURSIVE);\n    }\n\n    /**\n     * Removes a directory\n     *\n     * Only valid $options is STREAM_MKDIR_RECURSIVE per <http://php.net/streamwrapper.rmdir>, however,\n     * <http://php.net/rmdir>  does not have a $recursive parameter as mkdir() does so I don't know how\n     * STREAM_MKDIR_RECURSIVE is supposed to be set. Also, when I try it out with rmdir() I get 8 as\n     * $options. What does 8 correspond to?\n     *\n     * @param string $path\n     * @param int $options\n     * @return bool\n     */\n    private function _rmdir($path, $options)\n    {\n        $path = $this->parse_path($path);\n        if ($path === false) {\n            return false;\n        }\n\n        return $this->sftp->rmdir($path);\n    }\n\n    /**\n     * Flushes the output\n     *\n     * See <http://php.net/fflush>. Always returns true because \\phpseclib3\\Net\\SFTP doesn't cache stuff before writing\n     *\n     * @return bool\n     */\n    private function _stream_flush()\n    {\n        return true;\n    }\n\n    /**\n     * Retrieve information about a file resource\n     *\n     * @return mixed\n     */\n    private function _stream_stat()\n    {\n        $results = $this->sftp->stat($this->path);\n        if ($results === false) {\n            return false;\n        }\n        return $results;\n    }\n\n    /**\n     * Delete a file\n     *\n     * @param string $path\n     * @return bool\n     */\n    private function _unlink($path)\n    {\n        $path = $this->parse_path($path);\n        if ($path === false) {\n            return false;\n        }\n\n        return $this->sftp->delete($path, false);\n    }\n\n    /**\n     * Retrieve information about a file\n     *\n     * Ignores the STREAM_URL_STAT_QUIET flag because the entirety of \\phpseclib3\\Net\\SFTP\\Stream is quiet by default\n     * might be worthwhile to reconstruct bits 12-16 (ie. the file type) if mode doesn't have them but we'll\n     * cross that bridge when and if it's reached\n     *\n     * @param string $path\n     * @param int $flags\n     * @return mixed\n     */\n    private function _url_stat($path, $flags)\n    {\n        $path = $this->parse_path($path);\n        if ($path === false) {\n            return false;\n        }\n\n        $results = $flags & STREAM_URL_STAT_LINK ? $this->sftp->lstat($path) : $this->sftp->stat($path);\n        if ($results === false) {\n            return false;\n        }\n\n        return $results;\n    }\n\n    /**\n     * Truncate stream\n     *\n     * @param int $new_size\n     * @return bool\n     */\n    private function _stream_truncate($new_size)\n    {\n        if (!$this->sftp->truncate($this->path, $new_size)) {\n            return false;\n        }\n\n        $this->eof = false;\n        $this->size = $new_size;\n\n        return true;\n    }\n\n    /**\n     * Change stream options\n     *\n     * STREAM_OPTION_WRITE_BUFFER isn't supported for the same reason stream_flush isn't.\n     * The other two aren't supported because of limitations in \\phpseclib3\\Net\\SFTP.\n     *\n     * @param int $option\n     * @param int $arg1\n     * @param int $arg2\n     * @return bool\n     */\n    private function _stream_set_option($option, $arg1, $arg2)\n    {\n        return false;\n    }\n\n    /**\n     * Close an resource\n     *\n     */\n    private function _stream_close()\n    {\n    }\n\n    /**\n     * __call Magic Method\n     *\n     * When you're utilizing an SFTP stream you're not calling the methods in this class directly - PHP is calling them for you.\n     * Which kinda begs the question... what methods is PHP calling and what parameters is it passing to them? This function\n     * lets you figure that out.\n     *\n     * If NET_SFTP_STREAM_LOGGING is defined all calls will be output on the screen and then (regardless of whether or not\n     * NET_SFTP_STREAM_LOGGING is enabled) the parameters will be passed through to the appropriate method.\n     *\n     * @param string $name\n     * @param array $arguments\n     * @return mixed\n     */\n    public function __call($name, array $arguments)\n    {\n        if (defined('NET_SFTP_STREAM_LOGGING')) {\n            echo $name . '(';\n            $last = count($arguments) - 1;\n            foreach ($arguments as $i => $argument) {\n                var_export($argument);\n                if ($i != $last) {\n                    echo ',';\n                }\n            }\n            echo \")\\r\\n\";\n        }\n        $name = '_' . $name;\n        if (!method_exists($this, $name)) {\n            return false;\n        }\n        return $this->$name(...$arguments);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of SFTP.\n *\n * PHP version 5\n *\n * Supports SFTPv2/3/4/5/6. Defaults to v3.\n *\n * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.\n *\n * Here's a short example of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $sftp = new \\phpseclib3\\Net\\SFTP('www.domain.tld');\n *    if (!$sftp->login('username', 'password')) {\n *        exit('Login Failed');\n *    }\n *\n *    echo $sftp->pwd() . \"\\r\\n\";\n *    $sftp->put('filename.ext', 'hello, world!');\n *    print_r($sftp->nlist());\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Net;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Exception\\FileNotFoundException;\n\n/**\n * Pure-PHP implementations of SFTP.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass SFTP extends SSH2\n{\n    /**\n     * SFTP channel constant\n     *\n     * \\phpseclib3\\Net\\SSH2::exec() uses 0 and \\phpseclib3\\Net\\SSH2::read() / \\phpseclib3\\Net\\SSH2::write() use 1.\n     *\n     * @see \\phpseclib3\\Net\\SSH2::send_channel_packet()\n     * @see \\phpseclib3\\Net\\SSH2::get_channel_packet()\n     */\n    const CHANNEL = 0x100;\n\n    /**\n     * Reads data from a local file.\n     *\n     * @see \\phpseclib3\\Net\\SFTP::put()\n     */\n    const SOURCE_LOCAL_FILE = 1;\n    /**\n     * Reads data from a string.\n     *\n     * @see \\phpseclib3\\Net\\SFTP::put()\n     */\n    // this value isn't really used anymore but i'm keeping it reserved for historical reasons\n    const SOURCE_STRING = 2;\n    /**\n     * Reads data from callback:\n     * function callback($length) returns string to proceed, null for EOF\n     *\n     * @see \\phpseclib3\\Net\\SFTP::put()\n     */\n    const SOURCE_CALLBACK = 16;\n    /**\n     * Resumes an upload\n     *\n     * @see \\phpseclib3\\Net\\SFTP::put()\n     */\n    const RESUME = 4;\n    /**\n     * Append a local file to an already existing remote file\n     *\n     * @see \\phpseclib3\\Net\\SFTP::put()\n     */\n    const RESUME_START = 8;\n\n    /**\n     * Packet Types\n     *\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $packet_types = [];\n\n    /**\n     * Status Codes\n     *\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $status_codes = [];\n\n    /** @var array<int, string> */\n    private static $attributes;\n\n    /** @var array<int, string> */\n    private static $open_flags;\n\n    /** @var array<int, string> */\n    private static $open_flags5;\n\n    /** @var array<int, string> */\n    private static $file_types;\n\n    /**\n     * The Request ID\n     *\n     * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support\n     * concurrent actions, so it's somewhat academic, here.\n     *\n     * @var boolean\n     * @see self::_send_sftp_packet()\n     */\n    private $use_request_id = false;\n\n    /**\n     * The Packet Type\n     *\n     * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support\n     * concurrent actions, so it's somewhat academic, here.\n     *\n     * @var int\n     * @see self::_get_sftp_packet()\n     */\n    private $packet_type = -1;\n\n    /**\n     * Packet Buffer\n     *\n     * @var string\n     * @see self::_get_sftp_packet()\n     */\n    private $packet_buffer = '';\n\n    /**\n     * Extensions supported by the server\n     *\n     * @var array\n     * @see self::_initChannel()\n     */\n    private $extensions = [];\n\n    /**\n     * Server SFTP version\n     *\n     * @var int\n     * @see self::_initChannel()\n     */\n    private $version;\n\n    /**\n     * Default Server SFTP version\n     *\n     * @var int\n     * @see self::_initChannel()\n     */\n    private $defaultVersion;\n\n    /**\n     * Preferred SFTP version\n     *\n     * @var int\n     * @see self::_initChannel()\n     */\n    private $preferredVersion = 3;\n\n    /**\n     * Current working directory\n     *\n     * @var string|bool\n     * @see self::realpath()\n     * @see self::chdir()\n     */\n    private $pwd = false;\n\n    /**\n     * Packet Type Log\n     *\n     * @see self::getLog()\n     * @var array\n     */\n    private $packet_type_log = [];\n\n    /**\n     * Packet Log\n     *\n     * @see self::getLog()\n     * @var array\n     */\n    private $packet_log = [];\n\n    /**\n     * Real-time log file pointer\n     *\n     * @see self::_append_log()\n     * @var resource|closed-resource\n     */\n    private $realtime_log_file;\n\n    /**\n     * Real-time log file size\n     *\n     * @see self::_append_log()\n     * @var int\n     */\n    private $realtime_log_size;\n\n    /**\n     * Real-time log file wrap boolean\n     *\n     * @see self::_append_log()\n     * @var bool\n     */\n    private $realtime_log_wrap;\n\n    /**\n     * Current log size\n     *\n     * Should never exceed self::LOG_MAX_SIZE\n     *\n     * @var int\n     */\n    private $log_size;\n\n    /**\n     * Error information\n     *\n     * @see self::getSFTPErrors()\n     * @see self::getLastSFTPError()\n     * @var array\n     */\n    private $sftp_errors = [];\n\n    /**\n     * Stat Cache\n     *\n     * Rather than always having to open a directory and close it immediately there after to see if a file is a directory\n     * we'll cache the results.\n     *\n     * @see self::_update_stat_cache()\n     * @see self::_remove_from_stat_cache()\n     * @see self::_query_stat_cache()\n     * @var array\n     */\n    private $stat_cache = [];\n\n    /**\n     * Max SFTP Packet Size\n     *\n     * @see self::__construct()\n     * @see self::get()\n     * @var int\n     */\n    private $max_sftp_packet;\n\n    /**\n     * Stat Cache Flag\n     *\n     * @see self::disableStatCache()\n     * @see self::enableStatCache()\n     * @var bool\n     */\n    private $use_stat_cache = true;\n\n    /**\n     * Sort Options\n     *\n     * @see self::_comparator()\n     * @see self::setListOrder()\n     * @var array\n     */\n    protected $sortOptions = [];\n\n    /**\n     * Canonicalization Flag\n     *\n     * Determines whether or not paths should be canonicalized before being\n     * passed on to the remote server.\n     *\n     * @see self::enablePathCanonicalization()\n     * @see self::disablePathCanonicalization()\n     * @see self::realpath()\n     * @var bool\n     */\n    private $canonicalize_paths = true;\n\n    /**\n     * Request Buffers\n     *\n     * @see self::_get_sftp_packet()\n     * @var array\n     */\n    private $requestBuffer = [];\n\n    /**\n     * Preserve timestamps on file downloads / uploads\n     *\n     * @see self::get()\n     * @see self::put()\n     * @var bool\n     */\n    private $preserveTime = false;\n\n    /**\n     * Arbitrary Length Packets Flag\n     *\n     * Determines whether or not packets of any length should be allowed,\n     * in cases where the server chooses the packet length (such as\n     * directory listings). By default, packets are only allowed to be\n     * 256 * 1024 bytes (SFTP_MAX_MSG_LENGTH from OpenSSH's sftp-common.h)\n     *\n     * @see self::enableArbitraryLengthPackets()\n     * @see self::_get_sftp_packet()\n     * @var bool\n     */\n    private $allow_arbitrary_length_packets = false;\n\n    /**\n     * Was the last packet due to the channels being closed or not?\n     *\n     * @see self::get()\n     * @see self::get_sftp_packet()\n     * @var bool\n     */\n    private $channel_close = false;\n\n    /**\n     * Has the SFTP channel been partially negotiated?\n     *\n     * @var bool\n     */\n    private $partial_init = false;\n\n    /**\n     * Default Constructor.\n     *\n     * Connects to an SFTP server\n     *\n     * $host can either be a string, representing the host, or a stream resource.\n     *\n     * @param mixed $host\n     * @param int $port\n     * @param int $timeout\n     */\n    public function __construct($host, $port = 22, $timeout = 10)\n    {\n        parent::__construct($host, $port, $timeout);\n\n        $this->max_sftp_packet = 1 << 15;\n\n        if (empty(self::$packet_types)) {\n            self::$packet_types = [\n                1  => 'NET_SFTP_INIT',\n                2  => 'NET_SFTP_VERSION',\n                3  => 'NET_SFTP_OPEN',\n                4  => 'NET_SFTP_CLOSE',\n                5  => 'NET_SFTP_READ',\n                6  => 'NET_SFTP_WRITE',\n                7  => 'NET_SFTP_LSTAT',\n                9  => 'NET_SFTP_SETSTAT',\n                10 => 'NET_SFTP_FSETSTAT',\n                11 => 'NET_SFTP_OPENDIR',\n                12 => 'NET_SFTP_READDIR',\n                13 => 'NET_SFTP_REMOVE',\n                14 => 'NET_SFTP_MKDIR',\n                15 => 'NET_SFTP_RMDIR',\n                16 => 'NET_SFTP_REALPATH',\n                17 => 'NET_SFTP_STAT',\n                18 => 'NET_SFTP_RENAME',\n                19 => 'NET_SFTP_READLINK',\n                20 => 'NET_SFTP_SYMLINK',\n                21 => 'NET_SFTP_LINK',\n\n                101 => 'NET_SFTP_STATUS',\n                102 => 'NET_SFTP_HANDLE',\n                103 => 'NET_SFTP_DATA',\n                104 => 'NET_SFTP_NAME',\n                105 => 'NET_SFTP_ATTRS',\n\n                200 => 'NET_SFTP_EXTENDED',\n                201 => 'NET_SFTP_EXTENDED_REPLY'\n            ];\n            self::$status_codes = [\n                0 => 'NET_SFTP_STATUS_OK',\n                1 => 'NET_SFTP_STATUS_EOF',\n                2 => 'NET_SFTP_STATUS_NO_SUCH_FILE',\n                3 => 'NET_SFTP_STATUS_PERMISSION_DENIED',\n                4 => 'NET_SFTP_STATUS_FAILURE',\n                5 => 'NET_SFTP_STATUS_BAD_MESSAGE',\n                6 => 'NET_SFTP_STATUS_NO_CONNECTION',\n                7 => 'NET_SFTP_STATUS_CONNECTION_LOST',\n                8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED',\n                9 => 'NET_SFTP_STATUS_INVALID_HANDLE',\n                10 => 'NET_SFTP_STATUS_NO_SUCH_PATH',\n                11 => 'NET_SFTP_STATUS_FILE_ALREADY_EXISTS',\n                12 => 'NET_SFTP_STATUS_WRITE_PROTECT',\n                13 => 'NET_SFTP_STATUS_NO_MEDIA',\n                14 => 'NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM',\n                15 => 'NET_SFTP_STATUS_QUOTA_EXCEEDED',\n                16 => 'NET_SFTP_STATUS_UNKNOWN_PRINCIPAL',\n                17 => 'NET_SFTP_STATUS_LOCK_CONFLICT',\n                18 => 'NET_SFTP_STATUS_DIR_NOT_EMPTY',\n                19 => 'NET_SFTP_STATUS_NOT_A_DIRECTORY',\n                20 => 'NET_SFTP_STATUS_INVALID_FILENAME',\n                21 => 'NET_SFTP_STATUS_LINK_LOOP',\n                22 => 'NET_SFTP_STATUS_CANNOT_DELETE',\n                23 => 'NET_SFTP_STATUS_INVALID_PARAMETER',\n                24 => 'NET_SFTP_STATUS_FILE_IS_A_DIRECTORY',\n                25 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT',\n                26 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED',\n                27 => 'NET_SFTP_STATUS_DELETE_PENDING',\n                28 => 'NET_SFTP_STATUS_FILE_CORRUPT',\n                29 => 'NET_SFTP_STATUS_OWNER_INVALID',\n                30 => 'NET_SFTP_STATUS_GROUP_INVALID',\n                31 => 'NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK'\n            ];\n            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1\n            // the order, in this case, matters quite a lot - see \\phpseclib3\\Net\\SFTP::_parseAttributes() to understand why\n            self::$attributes = [\n                0x00000001 => 'NET_SFTP_ATTR_SIZE',\n                0x00000002 => 'NET_SFTP_ATTR_UIDGID',          // defined in SFTPv3, removed in SFTPv4+\n                0x00000080 => 'NET_SFTP_ATTR_OWNERGROUP',      // defined in SFTPv4+\n                0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',\n                0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',\n                0x00000010 => 'NET_SFTP_ATTR_CREATETIME',      // SFTPv4+\n                0x00000020 => 'NET_SFTP_ATTR_MODIFYTIME',\n                0x00000040 => 'NET_SFTP_ATTR_ACL',\n                0x00000100 => 'NET_SFTP_ATTR_SUBSECOND_TIMES',\n                0x00000200 => 'NET_SFTP_ATTR_BITS',            // SFTPv5+\n                0x00000400 => 'NET_SFTP_ATTR_ALLOCATION_SIZE', // SFTPv6+\n                0x00000800 => 'NET_SFTP_ATTR_TEXT_HINT',\n                0x00001000 => 'NET_SFTP_ATTR_MIME_TYPE',\n                0x00002000 => 'NET_SFTP_ATTR_LINK_COUNT',\n                0x00004000 => 'NET_SFTP_ATTR_UNTRANSLATED_NAME',\n                0x00008000 => 'NET_SFTP_ATTR_CTIME',\n                // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers\n                // yields inconsistent behavior depending on how php is compiled.  so we left shift -1 (which, in\n                // two's compliment, consists of all 1 bits) by 31.  on 64-bit systems this'll yield 0xFFFFFFFF80000000.\n                // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.\n                (PHP_INT_SIZE == 4 ? (-1 << 31) : 0x80000000) => 'NET_SFTP_ATTR_EXTENDED'\n            ];\n            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3\n            // the flag definitions change somewhat in SFTPv5+.  if SFTPv5+ support is added to this library, maybe name\n            // the array for that $this->open5_flags and similarly alter the constant names.\n            self::$open_flags = [\n                0x00000001 => 'NET_SFTP_OPEN_READ',\n                0x00000002 => 'NET_SFTP_OPEN_WRITE',\n                0x00000004 => 'NET_SFTP_OPEN_APPEND',\n                0x00000008 => 'NET_SFTP_OPEN_CREATE',\n                0x00000010 => 'NET_SFTP_OPEN_TRUNCATE',\n                0x00000020 => 'NET_SFTP_OPEN_EXCL',\n                0x00000040 => 'NET_SFTP_OPEN_TEXT' // defined in SFTPv4\n            ];\n            // SFTPv5+ changed the flags up:\n            // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-8.1.1.3\n            self::$open_flags5 = [\n                // when SSH_FXF_ACCESS_DISPOSITION is a 3 bit field that controls how the file is opened\n                0x00000000 => 'NET_SFTP_OPEN_CREATE_NEW',\n                0x00000001 => 'NET_SFTP_OPEN_CREATE_TRUNCATE',\n                0x00000002 => 'NET_SFTP_OPEN_OPEN_EXISTING',\n                0x00000003 => 'NET_SFTP_OPEN_OPEN_OR_CREATE',\n                0x00000004 => 'NET_SFTP_OPEN_TRUNCATE_EXISTING',\n                // the rest of the flags are not supported\n                0x00000008 => 'NET_SFTP_OPEN_APPEND_DATA', // \"the offset field of SS_FXP_WRITE requests is ignored\"\n                0x00000010 => 'NET_SFTP_OPEN_APPEND_DATA_ATOMIC',\n                0x00000020 => 'NET_SFTP_OPEN_TEXT_MODE',\n                0x00000040 => 'NET_SFTP_OPEN_BLOCK_READ',\n                0x00000080 => 'NET_SFTP_OPEN_BLOCK_WRITE',\n                0x00000100 => 'NET_SFTP_OPEN_BLOCK_DELETE',\n                0x00000200 => 'NET_SFTP_OPEN_BLOCK_ADVISORY',\n                0x00000400 => 'NET_SFTP_OPEN_NOFOLLOW',\n                0x00000800 => 'NET_SFTP_OPEN_DELETE_ON_CLOSE',\n                0x00001000 => 'NET_SFTP_OPEN_ACCESS_AUDIT_ALARM_INFO',\n                0x00002000 => 'NET_SFTP_OPEN_ACCESS_BACKUP',\n                0x00004000 => 'NET_SFTP_OPEN_BACKUP_STREAM',\n                0x00008000 => 'NET_SFTP_OPEN_OVERRIDE_OWNER',\n            ];\n            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2\n            // see \\phpseclib3\\Net\\SFTP::_parseLongname() for an explanation\n            self::$file_types = [\n                1 => 'NET_SFTP_TYPE_REGULAR',\n                2 => 'NET_SFTP_TYPE_DIRECTORY',\n                3 => 'NET_SFTP_TYPE_SYMLINK',\n                4 => 'NET_SFTP_TYPE_SPECIAL',\n                5 => 'NET_SFTP_TYPE_UNKNOWN',\n                // the following types were first defined for use in SFTPv5+\n                // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2\n                6 => 'NET_SFTP_TYPE_SOCKET',\n                7 => 'NET_SFTP_TYPE_CHAR_DEVICE',\n                8 => 'NET_SFTP_TYPE_BLOCK_DEVICE',\n                9 => 'NET_SFTP_TYPE_FIFO'\n            ];\n            self::define_array(\n                self::$packet_types,\n                self::$status_codes,\n                self::$attributes,\n                self::$open_flags,\n                self::$open_flags5,\n                self::$file_types\n            );\n        }\n\n        if (!defined('NET_SFTP_QUEUE_SIZE')) {\n            define('NET_SFTP_QUEUE_SIZE', 32);\n        }\n        if (!defined('NET_SFTP_UPLOAD_QUEUE_SIZE')) {\n            define('NET_SFTP_UPLOAD_QUEUE_SIZE', 1024);\n        }\n    }\n\n    /**\n     * Check a few things before SFTP functions are called\n     *\n     * @return bool\n     */\n    private function precheck()\n    {\n        if (!($this->bitmap & SSH2::MASK_LOGIN)) {\n            return false;\n        }\n\n        if ($this->pwd === false) {\n            return $this->init_sftp_connection();\n        }\n\n        return true;\n    }\n\n    /**\n     * Partially initialize an SFTP connection\n     *\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return bool\n     */\n    private function partial_init_sftp_connection()\n    {\n        $response = $this->open_channel(self::CHANNEL, true);\n        if ($response === true && $this->isTimeout()) {\n            return false;\n        }\n\n        $packet = Strings::packSSH2(\n            'CNsbs',\n            NET_SSH2_MSG_CHANNEL_REQUEST,\n            $this->server_channels[self::CHANNEL],\n            'subsystem',\n            true,\n            'sftp'\n        );\n        $this->send_binary_packet($packet);\n\n        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;\n\n        $response = $this->get_channel_packet(self::CHANNEL, true);\n        if ($response === false) {\n            // from PuTTY's psftp.exe\n            $command = \"test -x /usr/lib/sftp-server && exec /usr/lib/sftp-server\\n\" .\n                       \"test -x /usr/local/lib/sftp-server && exec /usr/local/lib/sftp-server\\n\" .\n                       \"exec sftp-server\";\n            // we don't do $this->exec($command, false) because exec() operates on a different channel and plus the SSH_MSG_CHANNEL_OPEN that exec() does\n            // is redundant\n            $packet = Strings::packSSH2(\n                'CNsCs',\n                NET_SSH2_MSG_CHANNEL_REQUEST,\n                $this->server_channels[self::CHANNEL],\n                'exec',\n                1,\n                $command\n            );\n            $this->send_binary_packet($packet);\n\n            $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;\n\n            $response = $this->get_channel_packet(self::CHANNEL, true);\n            if ($response === false) {\n                return false;\n            }\n        } elseif ($response === true && $this->isTimeout()) {\n            return false;\n        }\n\n        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA;\n        $this->send_sftp_packet(NET_SFTP_INIT, \"\\0\\0\\0\\3\");\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_VERSION) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_VERSION. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        $this->use_request_id = true;\n\n        list($this->defaultVersion) = Strings::unpackSSH2('N', $response);\n        while (!empty($response)) {\n            list($key, $value) = Strings::unpackSSH2('ss', $response);\n            $this->extensions[$key] = $value;\n        }\n\n        $this->partial_init = true;\n\n        return true;\n    }\n\n    /**\n     * (Re)initializes the SFTP channel\n     *\n     * @return bool\n     */\n    private function init_sftp_connection()\n    {\n        if (!$this->partial_init && !$this->partial_init_sftp_connection()) {\n            return false;\n        }\n\n        /*\n         A Note on SFTPv4/5/6 support:\n         <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.1> states the following:\n\n         \"If the client wishes to interoperate with servers that support noncontiguous version\n          numbers it SHOULD send '3'\"\n\n         Given that the server only sends its version number after the client has already done so, the above\n         seems to be suggesting that v3 should be the default version.  This makes sense given that v3 is the\n         most popular.\n\n         <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.5> states the following;\n\n         \"If the server did not send the \"versions\" extension, or the version-from-list was not included, the\n          server MAY send a status response describing the failure, but MUST then close the channel without\n          processing any further requests.\"\n\n         So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and\n         a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4?  If it only implements\n         v4, the \"versions\" extension is likely not going to have been sent so version re-negotiation as discussed\n         in draft-ietf-secsh-filexfer-13 would be quite impossible.  As such, what \\phpseclib3\\Net\\SFTP would do is close the\n         channel and reopen it with a new and updated SSH_FXP_INIT packet.\n        */\n        $this->version = $this->defaultVersion;\n        if (isset($this->extensions['versions']) && (!$this->preferredVersion || $this->preferredVersion != $this->version)) {\n            $versions = explode(',', $this->extensions['versions']);\n            $supported = [6, 5, 4];\n            if ($this->preferredVersion) {\n                $supported = array_diff($supported, [$this->preferredVersion]);\n                array_unshift($supported, $this->preferredVersion);\n            }\n            foreach ($supported as $ver) {\n                if (in_array($ver, $versions)) {\n                    if ($ver === $this->version) {\n                        break;\n                    }\n                    $this->version = (int) $ver;\n                    $packet = Strings::packSSH2('ss', 'version-select', \"$ver\");\n                    $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);\n                    $response = $this->get_sftp_packet();\n                    if ($this->packet_type != NET_SFTP_STATUS) {\n                        throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                            . 'Got packet type: ' . $this->packet_type);\n                    }\n                    list($status) = Strings::unpackSSH2('N', $response);\n                    if ($status != NET_SFTP_STATUS_OK) {\n                        $this->logError($response, $status);\n                        throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS_OK. '\n                            . ' Got ' . $status);\n                    }\n                    break;\n                }\n            }\n        }\n\n        /*\n         SFTPv4+ defines a 'newline' extension.  SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com',\n         however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's\n         not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for\n         one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that\n         'newline@vandyke.com' would.\n        */\n        /*\n        if (isset($this->extensions['newline@vandyke.com'])) {\n            $this->extensions['newline'] = $this->extensions['newline@vandyke.com'];\n            unset($this->extensions['newline@vandyke.com']);\n        }\n        */\n        if ($this->version < 2 || $this->version > 6) {\n            return false;\n        }\n\n        $this->pwd = true;\n        try {\n            $this->pwd = $this->realpath('.');\n        } catch (\\UnexpectedValueException $e) {\n            if (!$this->canonicalize_paths) {\n                throw $e;\n            }\n            $this->canonicalize_paths = false;\n            $this->reset_sftp();\n            return $this->init_sftp_connection();\n        }\n\n        $this->update_stat_cache($this->pwd, []);\n\n        return true;\n    }\n\n    /**\n     * Disable the stat cache\n     *\n     */\n    public function disableStatCache()\n    {\n        $this->use_stat_cache = false;\n    }\n\n    /**\n     * Enable the stat cache\n     *\n     */\n    public function enableStatCache()\n    {\n        $this->use_stat_cache = true;\n    }\n\n    /**\n     * Clear the stat cache\n     *\n     */\n    public function clearStatCache()\n    {\n        $this->stat_cache = [];\n    }\n\n    /**\n     * Enable path canonicalization\n     *\n     */\n    public function enablePathCanonicalization()\n    {\n        $this->canonicalize_paths = true;\n    }\n\n    /**\n     * Disable path canonicalization\n     *\n     * If this is enabled then $sftp->pwd() will not return the canonicalized absolute path\n     *\n     */\n    public function disablePathCanonicalization()\n    {\n        $this->canonicalize_paths = false;\n    }\n\n    /**\n     * Enable arbitrary length packets\n     *\n     */\n    public function enableArbitraryLengthPackets()\n    {\n        $this->allow_arbitrary_length_packets = true;\n    }\n\n    /**\n     * Disable arbitrary length packets\n     *\n     */\n    public function disableArbitraryLengthPackets()\n    {\n        $this->allow_arbitrary_length_packets = false;\n    }\n\n    /**\n     * Returns the current directory name\n     *\n     * @return string|bool\n     */\n    public function pwd()\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        return $this->pwd;\n    }\n\n    /**\n     * Logs errors\n     *\n     * @param string $response\n     * @param int $status\n     */\n    private function logError($response, $status = -1)\n    {\n        if ($status == -1) {\n            list($status) = Strings::unpackSSH2('N', $response);\n        }\n\n        $error = self::$status_codes[$status];\n\n        if ($this->version > 2) {\n            list($message) = Strings::unpackSSH2('s', $response);\n            $this->sftp_errors[] = \"$error: $message\";\n        } else {\n            $this->sftp_errors[] = $error;\n        }\n    }\n\n    /**\n     * Canonicalize the Server-Side Path Name\n     *\n     * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it.  Returns\n     * the absolute (canonicalized) path.\n     *\n     * If canonicalize_paths has been disabled using disablePathCanonicalization(), $path is returned as-is.\n     *\n     * @see self::chdir()\n     * @see self::disablePathCanonicalization()\n     * @param string $path\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return mixed\n     */\n    public function realpath($path)\n    {\n        if ($this->precheck() === false) {\n            return false;\n        }\n\n        $path = (string) $path;\n\n        if (!$this->canonicalize_paths) {\n            if ($this->pwd === true) {\n                return '.';\n            }\n            if (!strlen($path) || $path[0] != '/') {\n                $path = $this->pwd . '/' . $path;\n            }\n            $parts = explode('/', $path);\n            $afterPWD = $beforePWD = [];\n            foreach ($parts as $part) {\n                switch ($part) {\n                    //case '': // some SFTP servers /require/ double /'s. see https://github.com/phpseclib/phpseclib/pull/1137\n                    case '.':\n                        break;\n                    case '..':\n                        if (!empty($afterPWD)) {\n                            array_pop($afterPWD);\n                        } else {\n                            $beforePWD[] = '..';\n                        }\n                        break;\n                    default:\n                        $afterPWD[] = $part;\n                }\n            }\n            $beforePWD = count($beforePWD) ? implode('/', $beforePWD) : '.';\n            return $beforePWD . '/' . implode('/', $afterPWD);\n        }\n\n        if ($this->pwd === true) {\n            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9\n            $this->send_sftp_packet(NET_SFTP_REALPATH, Strings::packSSH2('s', $path));\n\n            $response = $this->get_sftp_packet();\n            switch ($this->packet_type) {\n                case NET_SFTP_NAME:\n                    // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following\n                    // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks\n                    // at is the first part and that part is defined the same in SFTP versions 3 through 6.\n                    list(, $filename) = Strings::unpackSSH2('Ns', $response);\n                    return $filename;\n                case NET_SFTP_STATUS:\n                    $this->logError($response);\n                    return false;\n                default:\n                    throw new \\UnexpectedValueException('Expected NET_SFTP_NAME or NET_SFTP_STATUS. '\n                                                      . 'Got packet type: ' . $this->packet_type);\n            }\n        }\n\n        if (!strlen($path) || $path[0] != '/') {\n            $path = $this->pwd . '/' . $path;\n        }\n\n        $path = explode('/', $path);\n        $new = [];\n        foreach ($path as $dir) {\n            if (!strlen($dir)) {\n                continue;\n            }\n            switch ($dir) {\n                case '..':\n                    array_pop($new);\n                    // fall-through\n                case '.':\n                    break;\n                default:\n                    $new[] = $dir;\n            }\n        }\n\n        return '/' . implode('/', $new);\n    }\n\n    /**\n     * Changes the current directory\n     *\n     * @param string $dir\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return bool\n     */\n    public function chdir($dir)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $dir = (string) $dir;\n\n        // assume current dir if $dir is empty\n        if ($dir === '') {\n            $dir = './';\n        // suffix a slash if needed\n        } elseif ($dir[strlen($dir) - 1] != '/') {\n            $dir .= '/';\n        }\n\n        $dir = $this->realpath($dir);\n        if ($dir === false) {\n            return false;\n        }\n\n        // confirm that $dir is, in fact, a valid directory\n        if ($this->use_stat_cache && is_array($this->query_stat_cache($dir))) {\n            $this->pwd = $dir;\n            return true;\n        }\n\n        // we could do a stat on the alleged $dir to see if it's a directory but that doesn't tell us\n        // the currently logged in user has the appropriate permissions or not. maybe you could see if\n        // the file's uid / gid match the currently logged in user's uid / gid but how there's no easy\n        // way to get those with SFTP\n\n        $this->send_sftp_packet(NET_SFTP_OPENDIR, Strings::packSSH2('s', $dir));\n\n        // see \\phpseclib3\\Net\\SFTP::nlist() for a more thorough explanation of the following\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                $handle = substr($response, 4);\n                break;\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS' .\n                                                    'Got packet type: ' . $this->packet_type);\n        }\n\n        if (!$this->close_handle($handle)) {\n            return false;\n        }\n\n        $this->update_stat_cache($dir, []);\n\n        $this->pwd = $dir;\n        return true;\n    }\n\n    /**\n     * Returns a list of files in the given directory\n     *\n     * @param string $dir\n     * @param bool $recursive\n     * @return array|false\n     */\n    public function nlist($dir = '.', $recursive = false)\n    {\n        return $this->nlist_helper($dir, $recursive, '');\n    }\n\n    /**\n     * Helper method for nlist\n     *\n     * @param string $dir\n     * @param bool $recursive\n     * @param string $relativeDir\n     * @return array|false\n     */\n    private function nlist_helper($dir, $recursive, $relativeDir)\n    {\n        $files = $this->readlist($dir, false);\n\n        // If we get an int back, then that is an \"unexpected\" status.\n        // We do not have a file list, so return false.\n        if (is_int($files)) {\n            return false;\n        }\n\n        if (!$recursive || $files === false) {\n            return $files;\n        }\n\n        $result = [];\n        foreach ($files as $value) {\n            if ($value == '.' || $value == '..') {\n                $result[] = $relativeDir . $value;\n                continue;\n            }\n            if (is_array($this->query_stat_cache($this->realpath($dir . '/' . $value)))) {\n                $temp = $this->nlist_helper($dir . '/' . $value, true, $relativeDir . $value . '/');\n                $temp = is_array($temp) ? $temp : [];\n                $result = array_merge($result, $temp);\n            } else {\n                $result[] = $relativeDir . $value;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns a detailed list of files in the given directory\n     *\n     * @param string $dir\n     * @param bool $recursive\n     * @return array|false\n     */\n    public function rawlist($dir = '.', $recursive = false)\n    {\n        $files = $this->readlist($dir, true);\n\n        // If we get an int back, then that is an \"unexpected\" status.\n        // We do not have a file list, so return false.\n        if (is_int($files)) {\n            return false;\n        }\n\n        if (!$recursive || $files === false) {\n            return $files;\n        }\n\n        static $depth = 0;\n\n        foreach ($files as $key => $value) {\n            if ($depth != 0 && $key == '..') {\n                unset($files[$key]);\n                continue;\n            }\n            $is_directory = false;\n            if ($key != '.' && $key != '..') {\n                if ($this->use_stat_cache) {\n                    $is_directory = is_array($this->query_stat_cache($this->realpath($dir . '/' . $key)));\n                } else {\n                    $stat = $this->lstat($dir . '/' . $key);\n                    $is_directory = $stat && $stat['type'] === NET_SFTP_TYPE_DIRECTORY;\n                }\n            }\n\n            if ($is_directory) {\n                $depth++;\n                $files[$key] = $this->rawlist($dir . '/' . $key, true);\n                $depth--;\n            } else {\n                $files[$key] = (object) $value;\n            }\n        }\n\n        return $files;\n    }\n\n    /**\n     * Reads a list, be it detailed or not, of files in the given directory\n     *\n     * @param string $dir\n     * @param bool $raw\n     * @return array|false\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     */\n    private function readlist($dir, $raw = true)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $dir = $this->realpath($dir . '/');\n        if ($dir === false) {\n            return false;\n        }\n\n        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.2\n        $this->send_sftp_packet(NET_SFTP_OPENDIR, Strings::packSSH2('s', $dir));\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.2\n                // since 'handle' is the last field in the SSH_FXP_HANDLE packet, we'll just remove the first four bytes that\n                // represent the length of the string and leave it at that\n                $handle = substr($response, 4);\n                break;\n            case NET_SFTP_STATUS:\n                // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n                list($status) = Strings::unpackSSH2('N', $response);\n                $this->logError($response, $status);\n                return $status;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        $this->update_stat_cache($dir, []);\n\n        $contents = [];\n        while (true) {\n            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2\n            // why multiple SSH_FXP_READDIR packets would be sent when the response to a single one can span arbitrarily many\n            // SSH_MSG_CHANNEL_DATA messages is not known to me.\n            $this->send_sftp_packet(NET_SFTP_READDIR, Strings::packSSH2('s', $handle));\n\n            $response = $this->get_sftp_packet();\n            switch ($this->packet_type) {\n                case NET_SFTP_NAME:\n                    list($count) = Strings::unpackSSH2('N', $response);\n                    for ($i = 0; $i < $count; $i++) {\n                        list($shortname) = Strings::unpackSSH2('s', $response);\n                        // SFTPv4 \"removed the long filename from the names structure-- it can now be\n                        //         built from information available in the attrs structure.\"\n                        if ($this->version < 4) {\n                            list($longname) = Strings::unpackSSH2('s', $response);\n                        }\n                        $attributes = $this->parseAttributes($response);\n                        if (!isset($attributes['type']) && $this->version < 4) {\n                            $fileType = $this->parseLongname($longname);\n                            if ($fileType) {\n                                $attributes['type'] = $fileType;\n                            }\n                        }\n                        $contents[$shortname] = $attributes + ['filename' => $shortname];\n\n                        if (isset($attributes['type']) && $attributes['type'] == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) {\n                            $this->update_stat_cache($dir . '/' . $shortname, []);\n                        } else {\n                            if ($shortname == '..') {\n                                $temp = $this->realpath($dir . '/..') . '/.';\n                            } else {\n                                $temp = $dir . '/' . $shortname;\n                            }\n                            $this->update_stat_cache($temp, (object) ['lstat' => $attributes]);\n                        }\n                        // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the\n                        // final SSH_FXP_STATUS packet should tell us that, already.\n                    }\n                    break;\n                case NET_SFTP_STATUS:\n                    list($status) = Strings::unpackSSH2('N', $response);\n                    if ($status != NET_SFTP_STATUS_EOF) {\n                        $this->logError($response, $status);\n                        return $status;\n                    }\n                    break 2;\n                default:\n                    throw new \\UnexpectedValueException('Expected NET_SFTP_NAME or NET_SFTP_STATUS. '\n                                                      . 'Got packet type: ' . $this->packet_type);\n            }\n        }\n\n        if (!$this->close_handle($handle)) {\n            return false;\n        }\n\n        if (count($this->sortOptions)) {\n            uasort($contents, [&$this, 'comparator']);\n        }\n\n        return $raw ? $contents : array_map('strval', array_keys($contents));\n    }\n\n    /**\n     * Compares two rawlist entries using parameters set by setListOrder()\n     *\n     * Intended for use with uasort()\n     *\n     * @param array $a\n     * @param array $b\n     * @return int\n     */\n    private function comparator(array $a, array $b)\n    {\n        switch (true) {\n            case $a['filename'] === '.' || $b['filename'] === '.':\n                if ($a['filename'] === $b['filename']) {\n                    return 0;\n                }\n                return $a['filename'] === '.' ? -1 : 1;\n            case $a['filename'] === '..' || $b['filename'] === '..':\n                if ($a['filename'] === $b['filename']) {\n                    return 0;\n                }\n                return $a['filename'] === '..' ? -1 : 1;\n            case isset($a['type']) && $a['type'] === NET_SFTP_TYPE_DIRECTORY:\n                if (!isset($b['type'])) {\n                    return 1;\n                }\n                if ($b['type'] !== $a['type']) {\n                    return -1;\n                }\n                break;\n            case isset($b['type']) && $b['type'] === NET_SFTP_TYPE_DIRECTORY:\n                return 1;\n        }\n        foreach ($this->sortOptions as $sort => $order) {\n            if (!isset($a[$sort]) || !isset($b[$sort])) {\n                if (isset($a[$sort])) {\n                    return -1;\n                }\n                if (isset($b[$sort])) {\n                    return 1;\n                }\n                return 0;\n            }\n            switch ($sort) {\n                case 'filename':\n                    $result = strcasecmp($a['filename'], $b['filename']);\n                    if ($result) {\n                        return $order === SORT_DESC ? -$result : $result;\n                    }\n                    break;\n                case 'mode':\n                    $a[$sort] &= 07777;\n                    $b[$sort] &= 07777;\n                    // fall-through\n                default:\n                    if ($a[$sort] === $b[$sort]) {\n                        break;\n                    }\n                    return $order === SORT_ASC ? $a[$sort] - $b[$sort] : $b[$sort] - $a[$sort];\n            }\n        }\n    }\n\n    /**\n     * Defines how nlist() and rawlist() will be sorted - if at all.\n     *\n     * If sorting is enabled directories and files will be sorted independently with\n     * directories appearing before files in the resultant array that is returned.\n     *\n     * Any parameter returned by stat is a valid sort parameter for this function.\n     * Filename comparisons are case insensitive.\n     *\n     * Examples:\n     *\n     * $sftp->setListOrder('filename', SORT_ASC);\n     * $sftp->setListOrder('size', SORT_DESC, 'filename', SORT_ASC);\n     * $sftp->setListOrder(true);\n     *    Separates directories from files but doesn't do any sorting beyond that\n     * $sftp->setListOrder();\n     *    Don't do any sort of sorting\n     *\n     * @param string ...$args\n     */\n    public function setListOrder(...$args)\n    {\n        $this->sortOptions = [];\n        if (empty($args)) {\n            return;\n        }\n        $len = count($args) & 0x7FFFFFFE;\n        for ($i = 0; $i < $len; $i += 2) {\n            $this->sortOptions[$args[$i]] = $args[$i + 1];\n        }\n        if (!count($this->sortOptions)) {\n            $this->sortOptions = ['bogus' => true];\n        }\n    }\n\n    /**\n     * Save files / directories to cache\n     *\n     * @param string $path\n     * @param mixed $value\n     */\n    private function update_stat_cache($path, $value)\n    {\n        if ($this->use_stat_cache === false) {\n            return;\n        }\n\n        // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($path, '/'))\n        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));\n\n        $temp = &$this->stat_cache;\n        $max = count($dirs) - 1;\n        foreach ($dirs as $i => $dir) {\n            // if $temp is an object that means one of two things.\n            //  1. a file was deleted and changed to a directory behind phpseclib's back\n            //  2. it's a symlink. when lstat is done it's unclear what it's a symlink to\n            if (is_object($temp)) {\n                $temp = [];\n            }\n            if (!isset($temp[$dir])) {\n                $temp[$dir] = [];\n            }\n            if ($i === $max) {\n                if (is_object($temp[$dir]) && is_object($value)) {\n                    if (!isset($value->stat) && isset($temp[$dir]->stat)) {\n                        $value->stat = $temp[$dir]->stat;\n                    }\n                    if (!isset($value->lstat) && isset($temp[$dir]->lstat)) {\n                        $value->lstat = $temp[$dir]->lstat;\n                    }\n                }\n                $temp[$dir] = $value;\n                break;\n            }\n            $temp = &$temp[$dir];\n        }\n    }\n\n    /**\n     * Remove files / directories from cache\n     *\n     * @param string $path\n     * @return bool\n     */\n    private function remove_from_stat_cache($path)\n    {\n        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));\n\n        $temp = &$this->stat_cache;\n        $max = count($dirs) - 1;\n        foreach ($dirs as $i => $dir) {\n            if (!is_array($temp)) {\n                return false;\n            }\n            if ($i === $max) {\n                unset($temp[$dir]);\n                return true;\n            }\n            if (!isset($temp[$dir])) {\n                return false;\n            }\n            $temp = &$temp[$dir];\n        }\n    }\n\n    /**\n     * Checks cache for path\n     *\n     * Mainly used by file_exists\n     *\n     * @param string $path\n     * @return mixed\n     */\n    private function query_stat_cache($path)\n    {\n        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));\n\n        $temp = &$this->stat_cache;\n        foreach ($dirs as $dir) {\n            if (!is_array($temp)) {\n                return null;\n            }\n            if (!isset($temp[$dir])) {\n                return null;\n            }\n            $temp = &$temp[$dir];\n        }\n        return $temp;\n    }\n\n    /**\n     * Returns general information about a file.\n     *\n     * Returns an array on success and false otherwise.\n     *\n     * @param string $filename\n     * @return array|false\n     */\n    public function stat($filename)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $filename = $this->realpath($filename);\n        if ($filename === false) {\n            return false;\n        }\n\n        if ($this->use_stat_cache) {\n            $result = $this->query_stat_cache($filename);\n            if (is_array($result) && isset($result['.']) && isset($result['.']->stat)) {\n                return $result['.']->stat;\n            }\n            if (is_object($result) && isset($result->stat)) {\n                return $result->stat;\n            }\n        }\n\n        $stat = $this->stat_helper($filename, NET_SFTP_STAT);\n        if ($stat === false) {\n            $this->remove_from_stat_cache($filename);\n            return false;\n        }\n        if (isset($stat['type'])) {\n            if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) {\n                $filename .= '/.';\n            }\n            $this->update_stat_cache($filename, (object) ['stat' => $stat]);\n            return $stat;\n        }\n\n        $pwd = $this->pwd;\n        $stat['type'] = $this->chdir($filename) ?\n            NET_SFTP_TYPE_DIRECTORY :\n            NET_SFTP_TYPE_REGULAR;\n        $this->pwd = $pwd;\n\n        if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) {\n            $filename .= '/.';\n        }\n        $this->update_stat_cache($filename, (object) ['stat' => $stat]);\n\n        return $stat;\n    }\n\n    /**\n     * Returns general information about a file or symbolic link.\n     *\n     * Returns an array on success and false otherwise.\n     *\n     * @param string $filename\n     * @return array|false\n     */\n    public function lstat($filename)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $filename = $this->realpath($filename);\n        if ($filename === false) {\n            return false;\n        }\n\n        if ($this->use_stat_cache) {\n            $result = $this->query_stat_cache($filename);\n            if (is_array($result) && isset($result['.']) && isset($result['.']->lstat)) {\n                return $result['.']->lstat;\n            }\n            if (is_object($result) && isset($result->lstat)) {\n                return $result->lstat;\n            }\n        }\n\n        $lstat = $this->stat_helper($filename, NET_SFTP_LSTAT);\n        if ($lstat === false) {\n            $this->remove_from_stat_cache($filename);\n            return false;\n        }\n        if (isset($lstat['type'])) {\n            if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) {\n                $filename .= '/.';\n            }\n            $this->update_stat_cache($filename, (object) ['lstat' => $lstat]);\n            return $lstat;\n        }\n\n        $stat = $this->stat_helper($filename, NET_SFTP_STAT);\n\n        if ($lstat != $stat) {\n            $lstat = array_merge($lstat, ['type' => NET_SFTP_TYPE_SYMLINK]);\n            $this->update_stat_cache($filename, (object) ['lstat' => $lstat]);\n            return $stat;\n        }\n\n        $pwd = $this->pwd;\n        $lstat['type'] = $this->chdir($filename) ?\n            NET_SFTP_TYPE_DIRECTORY :\n            NET_SFTP_TYPE_REGULAR;\n        $this->pwd = $pwd;\n\n        if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) {\n            $filename .= '/.';\n        }\n        $this->update_stat_cache($filename, (object) ['lstat' => $lstat]);\n\n        return $lstat;\n    }\n\n    /**\n     * Returns general information about a file or symbolic link\n     *\n     * Determines information without calling \\phpseclib3\\Net\\SFTP::realpath().\n     * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT.\n     *\n     * @param string $filename\n     * @param int $type\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return array|false\n     */\n    private function stat_helper($filename, $type)\n    {\n        // SFTPv4+ adds an additional 32-bit integer field - flags - to the following:\n        $packet = Strings::packSSH2('s', $filename);\n        $this->send_sftp_packet($type, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_ATTRS:\n                return $this->parseAttributes($response);\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                return false;\n        }\n\n        throw new \\UnexpectedValueException('Expected NET_SFTP_ATTRS or NET_SFTP_STATUS. '\n                                          . 'Got packet type: ' . $this->packet_type);\n    }\n\n    /**\n     * Truncates a file to a given length\n     *\n     * @param string $filename\n     * @param int $new_size\n     * @return bool\n     */\n    public function truncate($filename, $new_size)\n    {\n        $attr = Strings::packSSH2('NQ', NET_SFTP_ATTR_SIZE, $new_size);\n\n        return $this->setstat($filename, $attr, false);\n    }\n\n    /**\n     * Sets access and modification time of file.\n     *\n     * If the file does not exist, it will be created.\n     *\n     * @param string $filename\n     * @param int $time\n     * @param int $atime\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return bool\n     */\n    public function touch($filename, $time = null, $atime = null)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $filename = $this->realpath($filename);\n        if ($filename === false) {\n            return false;\n        }\n\n        if (!isset($time)) {\n            $time = time();\n        }\n        if (!isset($atime)) {\n            $atime = $time;\n        }\n\n        $attr = $this->version < 4 ?\n            pack('N3', NET_SFTP_ATTR_ACCESSTIME, $atime, $time) :\n            Strings::packSSH2('NQ2', NET_SFTP_ATTR_ACCESSTIME | NET_SFTP_ATTR_MODIFYTIME, $atime, $time);\n\n        $packet = Strings::packSSH2('s', $filename);\n        $packet .= $this->version >= 5 ?\n            pack('N2', 0, NET_SFTP_OPEN_OPEN_EXISTING) :\n            pack('N', NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_EXCL);\n        $packet .= $attr;\n\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                return $this->close_handle(substr($response, 4));\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                break;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        return $this->setstat($filename, $attr, false);\n    }\n\n    /**\n     * Changes file or directory owner\n     *\n     * $uid should be an int for SFTPv3 and a string for SFTPv4+. Ideally the string\n     * would be of the form \"user@dns_domain\" but it does not need to be.\n     * `$sftp->getSupportedVersions()['version']` will return the specific version\n     * that's being used.\n     *\n     * Returns true on success or false on error.\n     *\n     * @param string $filename\n     * @param int|string $uid\n     * @param bool $recursive\n     * @return bool\n     */\n    public function chown($filename, $uid, $recursive = false)\n    {\n        /*\n         quoting <https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.5>,\n\n         \"To avoid a representation that is tied to a particular underlying\n          implementation at the client or server, the use of UTF-8 strings has\n          been chosen.  The string should be of the form \"user@dns_domain\".\n          This will allow for a client and server that do not use the same\n          local representation the ability to translate to a common syntax that\n          can be interpreted by both.  In the case where there is no\n          translation available to the client or server, the attribute value\n          must be constructed without the \"@\".\"\n\n         phpseclib _could_ auto append the dns_domain to $uid BUT what if it shouldn't\n         have one? phpseclib would have no way of knowing so rather than guess phpseclib\n         will just use whatever value the user provided\n       */\n\n        $attr = $this->version < 4 ?\n            // quoting <http://www.kernel.org/doc/man-pages/online/pages/man2/chown.2.html>,\n            // \"if the owner or group is specified as -1, then that ID is not changed\"\n            pack('N3', NET_SFTP_ATTR_UIDGID, $uid, -1) :\n            // quoting <https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.5>,\n            // \"If either the owner or group field is zero length, the field should be\n            //  considered absent, and no change should be made to that specific field\n            //  during a modification operation\"\n            Strings::packSSH2('Nss', NET_SFTP_ATTR_OWNERGROUP, $uid, '');\n\n        return $this->setstat($filename, $attr, $recursive);\n    }\n\n    /**\n     * Changes file or directory group\n     *\n     * $gid should be an int for SFTPv3 and a string for SFTPv4+. Ideally the string\n     * would be of the form \"user@dns_domain\" but it does not need to be.\n     * `$sftp->getSupportedVersions()['version']` will return the specific version\n     * that's being used.\n     *\n     * Returns true on success or false on error.\n     *\n     * @param string $filename\n     * @param int|string $gid\n     * @param bool $recursive\n     * @return bool\n     */\n    public function chgrp($filename, $gid, $recursive = false)\n    {\n        $attr = $this->version < 4 ?\n            pack('N3', NET_SFTP_ATTR_UIDGID, -1, $gid) :\n            Strings::packSSH2('Nss', NET_SFTP_ATTR_OWNERGROUP, '', $gid);\n\n        return $this->setstat($filename, $attr, $recursive);\n    }\n\n    /**\n     * Set permissions on a file.\n     *\n     * Returns the new file permissions on success or false on error.\n     * If $recursive is true than this just returns true or false.\n     *\n     * @param int $mode\n     * @param string $filename\n     * @param bool $recursive\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return mixed\n     */\n    public function chmod($mode, $filename, $recursive = false)\n    {\n        if (is_string($mode) && is_int($filename)) {\n            $temp = $mode;\n            $mode = $filename;\n            $filename = $temp;\n        }\n\n        $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);\n        if (!$this->setstat($filename, $attr, $recursive)) {\n            return false;\n        }\n        if ($recursive) {\n            return true;\n        }\n\n        $filename = $this->realpath($filename);\n        // rather than return what the permissions *should* be, we'll return what they actually are.  this will also\n        // tell us if the file actually exists.\n        // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following:\n        $packet = pack('Na*', strlen($filename), $filename);\n        $this->send_sftp_packet(NET_SFTP_STAT, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_ATTRS:\n                $attrs = $this->parseAttributes($response);\n                return $attrs['mode'];\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                return false;\n        }\n\n        throw new \\UnexpectedValueException('Expected NET_SFTP_ATTRS or NET_SFTP_STATUS. '\n                                          . 'Got packet type: ' . $this->packet_type);\n    }\n\n    /**\n     * Sets information about a file\n     *\n     * @param string $filename\n     * @param string $attr\n     * @param bool $recursive\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return bool\n     */\n    private function setstat($filename, $attr, $recursive)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $filename = $this->realpath($filename);\n        if ($filename === false) {\n            return false;\n        }\n\n        $this->remove_from_stat_cache($filename);\n\n        if ($recursive) {\n            $i = 0;\n            $result = $this->setstat_recursive($filename, $attr, $i);\n            $this->read_put_responses($i);\n            return $result;\n        }\n\n        $packet = Strings::packSSH2('s', $filename);\n        $packet .= $this->version >= 4 ?\n            pack('a*Ca*', substr($attr, 0, 4), NET_SFTP_TYPE_UNKNOWN, substr($attr, 4)) :\n            $attr;\n        $this->send_sftp_packet(NET_SFTP_SETSTAT, $packet);\n\n        /*\n         \"Because some systems must use separate system calls to set various attributes, it is possible that a failure\n          response will be returned, but yet some of the attributes may be have been successfully modified.  If possible,\n          servers SHOULD avoid this situation; however, clients MUST be aware that this is possible.\"\n\n          -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6\n        */\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Recursively sets information on directories on the SFTP server\n     *\n     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.\n     *\n     * @param string $path\n     * @param string $attr\n     * @param int $i\n     * @return bool\n     */\n    private function setstat_recursive($path, $attr, &$i)\n    {\n        if (!$this->read_put_responses($i)) {\n            return false;\n        }\n        $i = 0;\n        $entries = $this->readlist($path, true);\n\n        if ($entries === false || is_int($entries)) {\n            return $this->setstat($path, $attr, false);\n        }\n\n        // normally $entries would have at least . and .. but it might not if the directories\n        // permissions didn't allow reading\n        if (empty($entries)) {\n            return false;\n        }\n\n        unset($entries['.'], $entries['..']);\n        foreach ($entries as $filename => $props) {\n            if (!isset($props['type'])) {\n                return false;\n            }\n\n            $temp = $path . '/' . $filename;\n            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {\n                if (!$this->setstat_recursive($temp, $attr, $i)) {\n                    return false;\n                }\n            } else {\n                $packet = Strings::packSSH2('s', $temp);\n                $packet .= $this->version >= 4 ?\n                    pack('Ca*', NET_SFTP_TYPE_UNKNOWN, $attr) :\n                    $attr;\n                $this->send_sftp_packet(NET_SFTP_SETSTAT, $packet);\n\n                $i++;\n\n                if ($i >= NET_SFTP_QUEUE_SIZE) {\n                    if (!$this->read_put_responses($i)) {\n                        return false;\n                    }\n                    $i = 0;\n                }\n            }\n        }\n\n        $packet = Strings::packSSH2('s', $path);\n        $packet .= $this->version >= 4 ?\n            pack('Ca*', NET_SFTP_TYPE_UNKNOWN, $attr) :\n            $attr;\n        $this->send_sftp_packet(NET_SFTP_SETSTAT, $packet);\n\n        $i++;\n\n        if ($i >= NET_SFTP_QUEUE_SIZE) {\n            if (!$this->read_put_responses($i)) {\n                return false;\n            }\n            $i = 0;\n        }\n\n        return true;\n    }\n\n    /**\n     * Return the target of a symbolic link\n     *\n     * @param string $link\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return mixed\n     */\n    public function readlink($link)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $link = $this->realpath($link);\n\n        $this->send_sftp_packet(NET_SFTP_READLINK, Strings::packSSH2('s', $link));\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_NAME:\n                break;\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_NAME or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        list($count) = Strings::unpackSSH2('N', $response);\n        // the file isn't a symlink\n        if (!$count) {\n            return false;\n        }\n\n        list($filename) = Strings::unpackSSH2('s', $response);\n\n        return $filename;\n    }\n\n    /**\n     * Create a symlink\n     *\n     * symlink() creates a symbolic link to the existing target with the specified name link.\n     *\n     * @param string $target\n     * @param string $link\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return bool\n     */\n    public function symlink($target, $link)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        //$target = $this->realpath($target);\n        $link = $this->realpath($link);\n\n        /* quoting https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-09#section-12.1 :\n\n           Changed the SYMLINK packet to be LINK and give it the ability to\n           create hard links.  Also change it's packet number because many\n           implementation implemented SYMLINK with the arguments reversed.\n           Hopefully the new argument names make it clear which way is which.\n        */\n        if ($this->version == 6) {\n            $type = NET_SFTP_LINK;\n            $packet = Strings::packSSH2('ssC', $link, $target, 1);\n        } else {\n            $type = NET_SFTP_SYMLINK;\n            /* quoting http://bxr.su/OpenBSD/usr.bin/ssh/PROTOCOL#347 :\n\n               3.1. sftp: Reversal of arguments to SSH_FXP_SYMLINK\n\n               When OpenSSH's sftp-server was implemented, the order of the arguments\n               to the SSH_FXP_SYMLINK method was inadvertently reversed. Unfortunately,\n               the reversal was not noticed until the server was widely deployed. Since\n               fixing this to follow the specification would cause incompatibility, the\n               current order was retained. For correct operation, clients should send\n               SSH_FXP_SYMLINK as follows:\n\n                   uint32      id\n                   string      targetpath\n                   string      linkpath */\n            $packet = substr($this->server_identifier, 0, 15) == 'SSH-2.0-OpenSSH' ?\n                Strings::packSSH2('ss', $target, $link) :\n                Strings::packSSH2('ss', $link, $target);\n        }\n        $this->send_sftp_packet($type, $packet);\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Creates a directory.\n     *\n     * @param string $dir\n     * @param int $mode\n     * @param bool $recursive\n     * @return bool\n     */\n    public function mkdir($dir, $mode = -1, $recursive = false)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $dir = $this->realpath($dir);\n\n        if ($recursive) {\n            $dirs = explode('/', preg_replace('#/(?=/)|/$#', '', $dir));\n            if (empty($dirs[0])) {\n                array_shift($dirs);\n                $dirs[0] = '/' . $dirs[0];\n            }\n            for ($i = 0; $i < count($dirs); $i++) {\n                $temp = array_slice($dirs, 0, $i + 1);\n                $temp = implode('/', $temp);\n                $result = $this->mkdir_helper($temp, $mode);\n            }\n            return $result;\n        }\n\n        return $this->mkdir_helper($dir, $mode);\n    }\n\n    /**\n     * Helper function for directory creation\n     *\n     * @param string $dir\n     * @param int $mode\n     * @return bool\n     */\n    private function mkdir_helper($dir, $mode)\n    {\n        // send SSH_FXP_MKDIR without any attributes (that's what the \\0\\0\\0\\0 is doing)\n        $this->send_sftp_packet(NET_SFTP_MKDIR, Strings::packSSH2('s', $dir) . \"\\0\\0\\0\\0\");\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            return false;\n        }\n\n        if ($mode !== -1) {\n            $this->chmod($mode, $dir);\n        }\n\n        return true;\n    }\n\n    /**\n     * Removes a directory.\n     *\n     * @param string $dir\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return bool\n     */\n    public function rmdir($dir)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $dir = $this->realpath($dir);\n        if ($dir === false) {\n            return false;\n        }\n\n        $this->send_sftp_packet(NET_SFTP_RMDIR, Strings::packSSH2('s', $dir));\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED?\n            $this->logError($response, $status);\n            return false;\n        }\n\n        $this->remove_from_stat_cache($dir);\n        // the following will do a soft delete, which would be useful if you deleted a file\n        // and then tried to do a stat on the deleted file. the above, in contrast, does\n        // a hard delete\n        //$this->update_stat_cache($dir, false);\n\n        return true;\n    }\n\n    /**\n     * Uploads a file to the SFTP server.\n     *\n     * By default, \\phpseclib3\\Net\\SFTP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.\n     * So, for example, if you set $data to 'filename.ext' and then do \\phpseclib3\\Net\\SFTP::get(), you will get a file, twelve bytes\n     * long, containing 'filename.ext' as its contents.\n     *\n     * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior.  With self::SOURCE_LOCAL_FILE, $remote_file will\n     * contain as many bytes as filename.ext does on your local filesystem.  If your filename.ext is 1MB then that is how\n     * large $remote_file will be, as well.\n     *\n     * Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number\n     * of bytes to return, and returns a string if there is some data or null if there is no more data\n     *\n     * If $data is a resource then it'll be used as a resource instead.\n     *\n     * Currently, only binary mode is supported.  As such, if the line endings need to be adjusted, you will need to take\n     * care of that, yourself.\n     *\n     * $mode can take an additional two parameters - self::RESUME and self::RESUME_START. These are bitwise AND'd with\n     * $mode. So if you want to resume upload of a 300mb file on the local file system you'd set $mode to the following:\n     *\n     * self::SOURCE_LOCAL_FILE | self::RESUME\n     *\n     * If you wanted to simply append the full contents of a local file to the full contents of a remote file you'd replace\n     * self::RESUME with self::RESUME_START.\n     *\n     * If $mode & (self::RESUME | self::RESUME_START) then self::RESUME_START will be assumed.\n     *\n     * $start and $local_start give you more fine grained control over this process and take precident over self::RESUME\n     * when they're non-negative. ie. $start could let you write at the end of a file (like self::RESUME) or in the middle\n     * of one. $local_start could let you start your reading from the end of a file (like self::RESUME_START) or in the\n     * middle of one.\n     *\n     * Setting $local_start to > 0 or $mode | self::RESUME_START doesn't do anything unless $mode | self::SOURCE_LOCAL_FILE.\n     *\n     * {@internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - \\phpseclib3\\Net\\SFTP::setMode().}\n     *\n     * @param string $remote_file\n     * @param string|resource $data\n     * @param int $mode\n     * @param int $start\n     * @param int $local_start\n     * @param callable|null $progressCallback\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @throws \\BadFunctionCallException if you're uploading via a callback and the callback function is invalid\n     * @throws FileNotFoundException if you're uploading via a file and the file doesn't exist\n     * @return bool\n     */\n    public function put($remote_file, $data, $mode = self::SOURCE_STRING, $start = -1, $local_start = -1, $progressCallback = null)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $remote_file = $this->realpath($remote_file);\n        if ($remote_file === false) {\n            return false;\n        }\n\n        $this->remove_from_stat_cache($remote_file);\n\n        if ($this->version >= 5) {\n            $flags = NET_SFTP_OPEN_OPEN_OR_CREATE;\n        } else {\n            $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;\n            // according to the SFTP specs, NET_SFTP_OPEN_APPEND should \"force all writes to append data at the end of the file.\"\n            // in practice, it doesn't seem to do that.\n            //$flags|= ($mode & self::RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE;\n        }\n\n        if ($start >= 0) {\n            $offset = $start;\n        } elseif ($mode & (self::RESUME | self::RESUME_START)) {\n            // if NET_SFTP_OPEN_APPEND worked as it should _size() wouldn't need to be called\n            $stat = $this->stat($remote_file);\n            $offset = $stat !== false && $stat['size'] ? $stat['size'] : 0;\n        } else {\n            $offset = 0;\n            if ($this->version >= 5) {\n                $flags = NET_SFTP_OPEN_CREATE_TRUNCATE;\n            } else {\n                $flags |= NET_SFTP_OPEN_TRUNCATE;\n            }\n        }\n\n        $this->remove_from_stat_cache($remote_file);\n\n        $packet = Strings::packSSH2('s', $remote_file);\n        $packet .= $this->version >= 5 ?\n            pack('N3', 0, $flags, 0) :\n            pack('N2', $flags, 0);\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                $handle = substr($response, 4);\n                break;\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3\n        $dataCallback = false;\n        switch (true) {\n            case $mode & self::SOURCE_CALLBACK:\n                if (!is_callable($data)) {\n                    throw new \\BadFunctionCallException(\"\\$data should be is_callable() if you specify SOURCE_CALLBACK flag\");\n                }\n                $dataCallback = $data;\n                // do nothing\n                break;\n            case is_resource($data):\n                $mode = $mode & ~self::SOURCE_LOCAL_FILE;\n                $info = stream_get_meta_data($data);\n                if (isset($info['wrapper_type']) && $info['wrapper_type'] == 'PHP' && $info['stream_type'] == 'Input') {\n                    $fp = fopen('php://memory', 'w+');\n                    stream_copy_to_stream($data, $fp);\n                    rewind($fp);\n                } else {\n                    $fp = $data;\n                }\n                break;\n            case $mode & self::SOURCE_LOCAL_FILE:\n                if (!is_file($data)) {\n                    throw new FileNotFoundException(\"$data is not a valid file\");\n                }\n                $fp = @fopen($data, 'rb');\n                if (!$fp) {\n                    return false;\n                }\n        }\n\n        if (isset($fp)) {\n            $stat = fstat($fp);\n            $size = !empty($stat) ? $stat['size'] : 0;\n\n            if ($local_start >= 0) {\n                fseek($fp, $local_start);\n                $size -= $local_start;\n            } elseif ($mode & self::RESUME) {\n                fseek($fp, $offset);\n                $size -= $offset;\n            }\n        } elseif ($dataCallback) {\n            $size = 0;\n        } else {\n            $size = strlen($data);\n        }\n\n        $sent = 0;\n        $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;\n\n        $sftp_packet_size = $this->max_sftp_packet;\n        // make the SFTP packet be exactly the SFTP packet size by including the bytes in the NET_SFTP_WRITE packets \"header\"\n        $sftp_packet_size -= strlen($handle) + 25;\n        $i = $j = 0;\n        while ($dataCallback || ($size === 0 || $sent < $size)) {\n            if ($dataCallback) {\n                $temp = $dataCallback($sftp_packet_size);\n                if (is_null($temp)) {\n                    break;\n                }\n            } else {\n                $temp = isset($fp) ? fread($fp, $sftp_packet_size) : substr($data, $sent, $sftp_packet_size);\n                if ($temp === false || $temp === '') {\n                    break;\n                }\n            }\n\n            $subtemp = $offset + $sent;\n            $packet = pack('Na*N3a*', strlen($handle), $handle, $subtemp / 4294967296, $subtemp, strlen($temp), $temp);\n            try {\n                $this->send_sftp_packet(NET_SFTP_WRITE, $packet, $j);\n            } catch (\\Exception $e) {\n                if ($mode & self::SOURCE_LOCAL_FILE) {\n                    fclose($fp);\n                }\n                throw $e;\n            }\n            $sent += strlen($temp);\n            if (is_callable($progressCallback)) {\n                $progressCallback($sent);\n            }\n\n            $i++;\n            $j++;\n            if ($i == NET_SFTP_UPLOAD_QUEUE_SIZE) {\n                if (!$this->read_put_responses($i)) {\n                    $i = 0;\n                    break;\n                }\n                $i = 0;\n            }\n        }\n\n        $result = $this->close_handle($handle);\n\n        if (!$this->read_put_responses($i)) {\n            if ($mode & self::SOURCE_LOCAL_FILE) {\n                fclose($fp);\n            }\n            $this->close_handle($handle);\n            return false;\n        }\n\n        if ($mode & SFTP::SOURCE_LOCAL_FILE) {\n            if (isset($fp) && is_resource($fp)) {\n                fclose($fp);\n            }\n\n            if ($this->preserveTime) {\n                $stat = stat($data);\n                $attr = $this->version < 4 ?\n                    pack('N3', NET_SFTP_ATTR_ACCESSTIME, $stat['atime'], $stat['mtime']) :\n                    Strings::packSSH2('NQ2', NET_SFTP_ATTR_ACCESSTIME | NET_SFTP_ATTR_MODIFYTIME, $stat['atime'], $stat['mtime']);\n                if (!$this->setstat($remote_file, $attr, false)) {\n                    throw new \\RuntimeException('Error setting file time');\n                }\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Reads multiple successive SSH_FXP_WRITE responses\n     *\n     * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i\n     * SSH_FXP_WRITEs, in succession, and then reading $i responses.\n     *\n     * @param int $i\n     * @return bool\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     */\n    private function read_put_responses($i)\n    {\n        while ($i--) {\n            $response = $this->get_sftp_packet();\n            if ($this->packet_type != NET_SFTP_STATUS) {\n                throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n            }\n\n            list($status) = Strings::unpackSSH2('N', $response);\n            if ($status != NET_SFTP_STATUS_OK) {\n                $this->logError($response, $status);\n                break;\n            }\n        }\n\n        return $i < 0;\n    }\n\n    /**\n     * Close handle\n     *\n     * @param string $handle\n     * @return bool\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     */\n    private function close_handle($handle)\n    {\n        $this->send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle));\n\n        // \"The client MUST release all resources associated with the handle regardless of the status.\"\n        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Downloads a file from the SFTP server.\n     *\n     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if\n     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the\n     * operation.\n     *\n     * $offset and $length can be used to download files in chunks.\n     *\n     * @param string $remote_file\n     * @param string|bool|resource|callable $local_file\n     * @param int $offset\n     * @param int $length\n     * @param callable|null $progressCallback\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @return string|bool\n     */\n    public function get($remote_file, $local_file = false, $offset = 0, $length = -1, $progressCallback = null)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $remote_file = $this->realpath($remote_file);\n        if ($remote_file === false) {\n            return false;\n        }\n\n        $packet = Strings::packSSH2('s', $remote_file);\n        $packet .= $this->version >= 5 ?\n            pack('N3', 0, NET_SFTP_OPEN_OPEN_EXISTING, 0) :\n            pack('N2', NET_SFTP_OPEN_READ, 0);\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                $handle = substr($response, 4);\n                break;\n            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n                $this->logError($response);\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        if (is_resource($local_file)) {\n            $fp = $local_file;\n            $stat = fstat($fp);\n            $res_offset = $stat['size'];\n        } else {\n            $res_offset = 0;\n            if ($local_file !== false && !is_callable($local_file)) {\n                $fp = fopen($local_file, 'wb');\n                if (!$fp) {\n                    return false;\n                }\n            } else {\n                $content = '';\n            }\n        }\n\n        $fclose_check = $local_file !== false && !is_callable($local_file) && !is_resource($local_file);\n\n        $start = $offset;\n        $read = 0;\n        while (true) {\n            $i = 0;\n\n            while ($i < NET_SFTP_QUEUE_SIZE && ($length < 0 || $read < $length)) {\n                $tempoffset = $start + $read;\n\n                $packet_size = $length > 0 ? min($this->max_sftp_packet, $length - $read) : $this->max_sftp_packet;\n\n                $packet = Strings::packSSH2('sN3', $handle, $tempoffset / 4294967296, $tempoffset, $packet_size);\n                try {\n                    $this->send_sftp_packet(NET_SFTP_READ, $packet, $i);\n                } catch (\\Exception $e) {\n                    if ($fclose_check) {\n                        fclose($fp);\n                    }\n                    throw $e;\n                }\n                $packet = null;\n                $read += $packet_size;\n                $i++;\n            }\n\n            if (!$i) {\n                break;\n            }\n\n            $packets_sent = $i - 1;\n\n            $clear_responses = false;\n            while ($i > 0) {\n                $i--;\n\n                if ($clear_responses) {\n                    $this->get_sftp_packet($packets_sent - $i);\n                    continue;\n                } else {\n                    $response = $this->get_sftp_packet($packets_sent - $i);\n                }\n\n                switch ($this->packet_type) {\n                    case NET_SFTP_DATA:\n                        $temp = substr($response, 4);\n                        $offset += strlen($temp);\n                        if ($local_file === false) {\n                            $content .= $temp;\n                        } elseif (is_callable($local_file)) {\n                            $local_file($temp);\n                        } else {\n                            fputs($fp, $temp);\n                        }\n                        if (is_callable($progressCallback)) {\n                            call_user_func($progressCallback, $offset);\n                        }\n                        $temp = null;\n                        break;\n                    case NET_SFTP_STATUS:\n                        // could, in theory, return false if !strlen($content) but we'll hold off for the time being\n                        $this->logError($response);\n                        $clear_responses = true; // don't break out of the loop yet, so we can read the remaining responses\n                        break;\n                    default:\n                        if ($fclose_check) {\n                            fclose($fp);\n                        }\n                        if ($this->channel_close) {\n                            $this->partial_init = false;\n                            $this->init_sftp_connection();\n                            return false;\n                        } else {\n                            throw new \\UnexpectedValueException('Expected NET_SFTP_DATA or NET_SFTP_STATUS. '\n                                                              . 'Got packet type: ' . $this->packet_type);\n                        }\n                }\n                $response = null;\n            }\n\n            if ($clear_responses) {\n                break;\n            }\n        }\n\n        if ($fclose_check) {\n            fclose($fp);\n\n            if ($this->preserveTime) {\n                $stat = $this->stat($remote_file);\n                touch($local_file, $stat['mtime'], $stat['atime']);\n            }\n        }\n\n        if (!$this->close_handle($handle)) {\n            return false;\n        }\n\n        // if $content isn't set that means a file was written to\n        return isset($content) ? $content : true;\n    }\n\n    /**\n     * Deletes a file on the SFTP server.\n     *\n     * @param string $path\n     * @param bool $recursive\n     * @return bool\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     */\n    public function delete($path, $recursive = true)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        if (is_object($path)) {\n            // It's an object. Cast it as string before we check anything else.\n            $path = (string) $path;\n        }\n\n        if (!is_string($path) || $path == '') {\n            return false;\n        }\n\n        $path = $this->realpath($path);\n        if ($path === false) {\n            return false;\n        }\n\n        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3\n        $this->send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path));\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            if (!$recursive) {\n                return false;\n            }\n\n            $i = 0;\n            $result = $this->delete_recursive($path, $i);\n            $this->read_put_responses($i);\n            return $result;\n        }\n\n        $this->remove_from_stat_cache($path);\n\n        return true;\n    }\n\n    /**\n     * Recursively deletes directories on the SFTP server\n     *\n     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.\n     *\n     * @param string $path\n     * @param int $i\n     * @return bool\n     */\n    private function delete_recursive($path, &$i)\n    {\n        if (!$this->read_put_responses($i)) {\n            return false;\n        }\n        $i = 0;\n        $entries = $this->readlist($path, true);\n\n        // The folder does not exist at all, so we cannot delete it.\n        if ($entries === NET_SFTP_STATUS_NO_SUCH_FILE) {\n            return false;\n        }\n\n        // Normally $entries would have at least . and .. but it might not if the directories\n        // permissions didn't allow reading. If this happens then default to an empty list of files.\n        if ($entries === false || is_int($entries)) {\n            $entries = [];\n        }\n\n        unset($entries['.'], $entries['..']);\n        foreach ($entries as $filename => $props) {\n            if (!isset($props['type'])) {\n                return false;\n            }\n\n            $temp = $path . '/' . $filename;\n            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {\n                if (!$this->delete_recursive($temp, $i)) {\n                    return false;\n                }\n            } else {\n                $this->send_sftp_packet(NET_SFTP_REMOVE, Strings::packSSH2('s', $temp));\n                $this->remove_from_stat_cache($temp);\n\n                $i++;\n\n                if ($i >= NET_SFTP_QUEUE_SIZE) {\n                    if (!$this->read_put_responses($i)) {\n                        return false;\n                    }\n                    $i = 0;\n                }\n            }\n        }\n\n        $this->send_sftp_packet(NET_SFTP_RMDIR, Strings::packSSH2('s', $path));\n        $this->remove_from_stat_cache($path);\n\n        $i++;\n\n        if ($i >= NET_SFTP_QUEUE_SIZE) {\n            if (!$this->read_put_responses($i)) {\n                return false;\n            }\n            $i = 0;\n        }\n\n        return true;\n    }\n\n    /**\n     * Checks whether a file or directory exists\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function file_exists($path)\n    {\n        if ($this->use_stat_cache) {\n            if (!$this->precheck()) {\n                return false;\n            }\n\n            $path = $this->realpath($path);\n\n            $result = $this->query_stat_cache($path);\n\n            if (isset($result)) {\n                // return true if $result is an array or if it's an stdClass object\n                return $result !== false;\n            }\n        }\n\n        return $this->stat($path) !== false;\n    }\n\n    /**\n     * Tells whether the filename is a directory\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function is_dir($path)\n    {\n        $result = $this->get_stat_cache_prop($path, 'type');\n        if ($result === false) {\n            return false;\n        }\n        return $result === NET_SFTP_TYPE_DIRECTORY;\n    }\n\n    /**\n     * Tells whether the filename is a regular file\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function is_file($path)\n    {\n        $result = $this->get_stat_cache_prop($path, 'type');\n        if ($result === false) {\n            return false;\n        }\n        return $result === NET_SFTP_TYPE_REGULAR;\n    }\n\n    /**\n     * Tells whether the filename is a symbolic link\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function is_link($path)\n    {\n        $result = $this->get_lstat_cache_prop($path, 'type');\n        if ($result === false) {\n            return false;\n        }\n        return $result === NET_SFTP_TYPE_SYMLINK;\n    }\n\n    /**\n     * Tells whether a file exists and is readable\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function is_readable($path)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $packet = Strings::packSSH2('sNN', $this->realpath($path), NET_SFTP_OPEN_READ, 0);\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                return true;\n            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n    }\n\n    /**\n     * Tells whether the filename is writable\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function is_writable($path)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $packet = Strings::packSSH2('sNN', $this->realpath($path), NET_SFTP_OPEN_WRITE, 0);\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                return true;\n            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n    }\n\n    /**\n     * Tells whether the filename is writeable\n     *\n     * Alias of is_writable\n     *\n     * @param string $path\n     * @return bool\n     */\n    public function is_writeable($path)\n    {\n        return $this->is_writable($path);\n    }\n\n    /**\n     * Gets last access time of file\n     *\n     * @param string $path\n     * @return mixed\n     */\n    public function fileatime($path)\n    {\n        return $this->get_stat_cache_prop($path, 'atime');\n    }\n\n    /**\n     * Gets file modification time\n     *\n     * @param string $path\n     * @return mixed\n     */\n    public function filemtime($path)\n    {\n        return $this->get_stat_cache_prop($path, 'mtime');\n    }\n\n    /**\n     * Gets file permissions\n     *\n     * @param string $path\n     * @return mixed\n     */\n    public function fileperms($path)\n    {\n        return $this->get_stat_cache_prop($path, 'mode');\n    }\n\n    /**\n     * Gets file owner\n     *\n     * @param string $path\n     * @return mixed\n     */\n    public function fileowner($path)\n    {\n        return $this->get_stat_cache_prop($path, 'uid');\n    }\n\n    /**\n     * Gets file group\n     *\n     * @param string $path\n     * @return mixed\n     */\n    public function filegroup($path)\n    {\n        return $this->get_stat_cache_prop($path, 'gid');\n    }\n\n    /**\n     * Recursively go through rawlist() output to get the total filesize\n     *\n     * @return int\n     */\n    private static function recursiveFilesize(array $files)\n    {\n        $size = 0;\n        foreach ($files as $name => $file) {\n            if ($name == '.' || $name == '..') {\n                continue;\n            }\n            $size += is_array($file) ?\n                self::recursiveFilesize($file) :\n                $file->size;\n        }\n        return $size;\n    }\n\n    /**\n     * Gets file size\n     *\n     * @param string $path\n     * @param bool $recursive\n     * @return mixed\n     */\n    public function filesize($path, $recursive = false)\n    {\n        return !$recursive || $this->filetype($path) != 'dir' ?\n            $this->get_stat_cache_prop($path, 'size') :\n            self::recursiveFilesize($this->rawlist($path, true));\n    }\n\n    /**\n     * Gets file type\n     *\n     * @param string $path\n     * @return string|false\n     */\n    public function filetype($path)\n    {\n        $type = $this->get_stat_cache_prop($path, 'type');\n        if ($type === false) {\n            return false;\n        }\n\n        switch ($type) {\n            case NET_SFTP_TYPE_BLOCK_DEVICE:\n                return 'block';\n            case NET_SFTP_TYPE_CHAR_DEVICE:\n                return 'char';\n            case NET_SFTP_TYPE_DIRECTORY:\n                return 'dir';\n            case NET_SFTP_TYPE_FIFO:\n                return 'fifo';\n            case NET_SFTP_TYPE_REGULAR:\n                return 'file';\n            case NET_SFTP_TYPE_SYMLINK:\n                return 'link';\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * Return a stat properity\n     *\n     * Uses cache if appropriate.\n     *\n     * @param string $path\n     * @param string $prop\n     * @return mixed\n     */\n    private function get_stat_cache_prop($path, $prop)\n    {\n        return $this->get_xstat_cache_prop($path, $prop, 'stat');\n    }\n\n    /**\n     * Return an lstat properity\n     *\n     * Uses cache if appropriate.\n     *\n     * @param string $path\n     * @param string $prop\n     * @return mixed\n     */\n    private function get_lstat_cache_prop($path, $prop)\n    {\n        return $this->get_xstat_cache_prop($path, $prop, 'lstat');\n    }\n\n    /**\n     * Return a stat or lstat properity\n     *\n     * Uses cache if appropriate.\n     *\n     * @param string $path\n     * @param string $prop\n     * @param string $type\n     * @return mixed\n     */\n    private function get_xstat_cache_prop($path, $prop, $type)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        if ($this->use_stat_cache) {\n            $path = $this->realpath($path);\n\n            $result = $this->query_stat_cache($path);\n\n            if (is_object($result) && isset($result->$type)) {\n                return $result->{$type}[$prop];\n            }\n        }\n\n        $result = $this->$type($path);\n\n        if ($result === false || !isset($result[$prop])) {\n            return false;\n        }\n\n        return $result[$prop];\n    }\n\n    /**\n     * Renames a file or a directory on the SFTP server.\n     *\n     * If the file already exists this will return false\n     *\n     * @param string $oldname\n     * @param string $newname\n     * @return bool\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     */\n    public function rename($oldname, $newname)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $oldname = $this->realpath($oldname);\n        $newname = $this->realpath($newname);\n        if ($oldname === false || $newname === false) {\n            return false;\n        }\n\n        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3\n        $packet = Strings::packSSH2('ss', $oldname, $newname);\n        if ($this->version >= 5) {\n            /* quoting https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-05#section-6.5 ,\n\n               'flags' is 0 or a combination of:\n\n                   SSH_FXP_RENAME_OVERWRITE  0x00000001\n                   SSH_FXP_RENAME_ATOMIC     0x00000002\n                   SSH_FXP_RENAME_NATIVE     0x00000004\n\n               (none of these are currently supported) */\n            $packet .= \"\\0\\0\\0\\0\";\n        }\n        $this->send_sftp_packet(NET_SFTP_RENAME, $packet);\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            return false;\n        }\n\n        // don't move the stat cache entry over since this operation could very well change the\n        // atime and mtime attributes\n        //$this->update_stat_cache($newname, $this->query_stat_cache($oldname));\n        $this->remove_from_stat_cache($oldname);\n        $this->remove_from_stat_cache($newname);\n\n        return true;\n    }\n\n    /**\n     * Parse Time\n     *\n     * See '7.7.  Times' of draft-ietf-secsh-filexfer-13 for more info.\n     *\n     * @param string $key\n     * @param int $flags\n     * @param string $response\n     * @return array\n     */\n    private function parseTime($key, $flags, &$response)\n    {\n        $attr = [];\n        list($attr[$key]) = Strings::unpackSSH2('Q', $response);\n        if ($flags & NET_SFTP_ATTR_SUBSECOND_TIMES) {\n            list($attr[$key . '-nseconds']) = Strings::unpackSSH2('N', $response);\n        }\n        return $attr;\n    }\n\n    /**\n     * Parse Attributes\n     *\n     * See '7.  File Attributes' of draft-ietf-secsh-filexfer-13 for more info.\n     *\n     * @param string $response\n     * @return array\n     */\n    protected function parseAttributes(&$response)\n    {\n        $attr = [];\n\n        if ($this->version >= 4) {\n            list($flags, $attr['type']) = Strings::unpackSSH2('NC', $response);\n        } else {\n            list($flags) = Strings::unpackSSH2('N', $response);\n        }\n\n        foreach (self::$attributes as $key => $value) {\n            switch ($flags & $key) {\n                case NET_SFTP_ATTR_UIDGID:\n                    if ($this->version > 3) {\n                        continue 2;\n                    }\n                    break;\n                case NET_SFTP_ATTR_CREATETIME:\n                case NET_SFTP_ATTR_MODIFYTIME:\n                case NET_SFTP_ATTR_ACL:\n                case NET_SFTP_ATTR_OWNERGROUP:\n                case NET_SFTP_ATTR_SUBSECOND_TIMES:\n                    if ($this->version < 4) {\n                        continue 2;\n                    }\n                    break;\n                case NET_SFTP_ATTR_BITS:\n                    if ($this->version < 5) {\n                        continue 2;\n                    }\n                    break;\n                case NET_SFTP_ATTR_ALLOCATION_SIZE:\n                case NET_SFTP_ATTR_TEXT_HINT:\n                case NET_SFTP_ATTR_MIME_TYPE:\n                case NET_SFTP_ATTR_LINK_COUNT:\n                case NET_SFTP_ATTR_UNTRANSLATED_NAME:\n                case NET_SFTP_ATTR_CTIME:\n                    if ($this->version < 6) {\n                        continue 2;\n                    }\n            }\n            switch ($flags & $key) {\n                case NET_SFTP_ATTR_SIZE:             // 0x00000001\n                    // The size attribute is defined as an unsigned 64-bit integer.\n                    // The following will use floats on 32-bit platforms, if necessary.\n                    // As can be seen in the BigInteger class, floats are generally\n                    // IEEE 754 binary64 \"double precision\" on such platforms and\n                    // as such can represent integers of at least 2^50 without loss\n                    // of precision. Interpreted in filesize, 2^50 bytes = 1024 TiB.\n                    list($attr['size']) = Strings::unpackSSH2('Q', $response);\n                    break;\n                case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)\n                    list($attr['uid'], $attr['gid']) = Strings::unpackSSH2('NN', $response);\n                    break;\n                case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004\n                    list($attr['mode']) = Strings::unpackSSH2('N', $response);\n                    $fileType = $this->parseMode($attr['mode']);\n                    if ($this->version < 4 && $fileType !== false) {\n                        $attr += ['type' => $fileType];\n                    }\n                    break;\n                case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008\n                    if ($this->version >= 4) {\n                        $attr += $this->parseTime('atime', $flags, $response);\n                        break;\n                    }\n                    list($attr['atime'], $attr['mtime']) = Strings::unpackSSH2('NN', $response);\n                    break;\n                case NET_SFTP_ATTR_CREATETIME:       // 0x00000010 (SFTPv4+)\n                    $attr += $this->parseTime('createtime', $flags, $response);\n                    break;\n                case NET_SFTP_ATTR_MODIFYTIME:       // 0x00000020\n                    $attr += $this->parseTime('mtime', $flags, $response);\n                    break;\n                case NET_SFTP_ATTR_ACL:              // 0x00000040\n                    // access control list\n                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-04#section-5.7\n                    // currently unsupported\n                    list($count) = Strings::unpackSSH2('N', $response);\n                    for ($i = 0; $i < $count; $i++) {\n                        list($type, $flag, $mask, $who) = Strings::unpackSSH2('N3s', $result);\n                    }\n                    break;\n                case NET_SFTP_ATTR_OWNERGROUP:       // 0x00000080\n                    list($attr['owner'], $attr['$group']) = Strings::unpackSSH2('ss', $response);\n                    break;\n                case NET_SFTP_ATTR_SUBSECOND_TIMES:  // 0x00000100\n                    break;\n                case NET_SFTP_ATTR_BITS:             // 0x00000200 (SFTPv5+)\n                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-05#section-5.8\n                    // currently unsupported\n                    // tells if you file is:\n                    // readonly, system, hidden, case inensitive, archive, encrypted, compressed, sparse\n                    // append only, immutable, sync\n                    list($attrib_bits, $attrib_bits_valid) = Strings::unpackSSH2('N2', $response);\n                    // if we were actually gonna implement the above it ought to be\n                    // $attr['attrib-bits'] and $attr['attrib-bits-valid']\n                    // eg. - instead of _\n                    break;\n                case NET_SFTP_ATTR_ALLOCATION_SIZE:  // 0x00000400 (SFTPv6+)\n                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.4\n                    // represents the number of bytes that the file consumes on the disk. will\n                    // usually be larger than the 'size' field\n                    list($attr['allocation-size']) = Strings::unpackSSH2('Q', $response);\n                    break;\n                case NET_SFTP_ATTR_TEXT_HINT:        // 0x00000800\n                    // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.10\n                    // currently unsupported\n                    // tells if file is \"known text\", \"guessed text\", \"known binary\", \"guessed binary\"\n                    list($text_hint) = Strings::unpackSSH2('C', $response);\n                    // the above should be $attr['text-hint']\n                    break;\n                case NET_SFTP_ATTR_MIME_TYPE:        // 0x00001000\n                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.11\n                    list($attr['mime-type']) = Strings::unpackSSH2('s', $response);\n                    break;\n                case NET_SFTP_ATTR_LINK_COUNT:       // 0x00002000\n                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.12\n                    list($attr['link-count']) = Strings::unpackSSH2('N', $response);\n                    break;\n                case NET_SFTP_ATTR_UNTRANSLATED_NAME:// 0x00004000\n                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.13\n                    list($attr['untranslated-name']) = Strings::unpackSSH2('s', $response);\n                    break;\n                case NET_SFTP_ATTR_CTIME:            // 0x00008000\n                    // 'ctime' contains the last time the file attributes were changed.  The\n                    // exact meaning of this field depends on the server.\n                    $attr += $this->parseTime('ctime', $flags, $response);\n                    break;\n                case NET_SFTP_ATTR_EXTENDED: // 0x80000000\n                    list($count) = Strings::unpackSSH2('N', $response);\n                    for ($i = 0; $i < $count; $i++) {\n                        list($key, $value) = Strings::unpackSSH2('ss', $response);\n                        $attr[$key] = $value;\n                    }\n            }\n        }\n        return $attr;\n    }\n\n    /**\n     * Attempt to identify the file type\n     *\n     * Quoting the SFTP RFC, \"Implementations MUST NOT send bits that are not defined\" but they seem to anyway\n     *\n     * @param int $mode\n     * @return int\n     */\n    private function parseMode($mode)\n    {\n        // values come from http://lxr.free-electrons.com/source/include/uapi/linux/stat.h#L12\n        // see, also, http://linux.die.net/man/2/stat\n        switch ($mode & 0170000) {// ie. 1111 0000 0000 0000\n            case 0000000: // no file type specified - figure out the file type using alternative means\n                return false;\n            case 0040000:\n                return NET_SFTP_TYPE_DIRECTORY;\n            case 0100000:\n                return NET_SFTP_TYPE_REGULAR;\n            case 0120000:\n                return NET_SFTP_TYPE_SYMLINK;\n            // new types introduced in SFTPv5+\n            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2\n            case 0010000: // named pipe (fifo)\n                return NET_SFTP_TYPE_FIFO;\n            case 0020000: // character special\n                return NET_SFTP_TYPE_CHAR_DEVICE;\n            case 0060000: // block special\n                return NET_SFTP_TYPE_BLOCK_DEVICE;\n            case 0140000: // socket\n                return NET_SFTP_TYPE_SOCKET;\n            case 0160000: // whiteout\n                // \"SPECIAL should be used for files that are of\n                //  a known type which cannot be expressed in the protocol\"\n                return NET_SFTP_TYPE_SPECIAL;\n            default:\n                return NET_SFTP_TYPE_UNKNOWN;\n        }\n    }\n\n    /**\n     * Parse Longname\n     *\n     * SFTPv3 doesn't provide any easy way of identifying a file type.  You could try to open\n     * a file as a directory and see if an error is returned or you could try to parse the\n     * SFTPv3-specific longname field of the SSH_FXP_NAME packet.  That's what this function does.\n     * The result is returned using the\n     * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}.\n     *\n     * If the longname is in an unrecognized format bool(false) is returned.\n     *\n     * @param string $longname\n     * @return mixed\n     */\n    private function parseLongname($longname)\n    {\n        // http://en.wikipedia.org/wiki/Unix_file_types\n        // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions\n        if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) {\n            switch ($longname[0]) {\n                case '-':\n                    return NET_SFTP_TYPE_REGULAR;\n                case 'd':\n                    return NET_SFTP_TYPE_DIRECTORY;\n                case 'l':\n                    return NET_SFTP_TYPE_SYMLINK;\n                default:\n                    return NET_SFTP_TYPE_SPECIAL;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Sends SFTP Packets\n     *\n     * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.\n     *\n     * @param int $type\n     * @param string $data\n     * @param int $request_id\n     * @see self::_get_sftp_packet()\n     * @see self::send_channel_packet()\n     * @return void\n     */\n    private function send_sftp_packet($type, $data, $request_id = 1)\n    {\n        // in SSH2.php the timeout is cumulative per function call. eg. exec() will\n        // timeout after 10s. but for SFTP.php it's cumulative per packet\n        $this->curTimeout = $this->timeout;\n        $this->is_timeout = false;\n\n        $packet = $this->use_request_id ?\n            pack('NCNa*', strlen($data) + 5, $type, $request_id, $data) :\n            pack('NCa*', strlen($data) + 1, $type, $data);\n\n        $start = microtime(true);\n        $this->send_channel_packet(self::CHANNEL, $packet);\n        $stop = microtime(true);\n\n        if (defined('NET_SFTP_LOGGING')) {\n            $packet_type = '-> ' . self::$packet_types[$type] .\n                           ' (' . round($stop - $start, 4) . 's)';\n            $this->append_log($packet_type, $data);\n        }\n    }\n\n    /**\n     * Resets the SFTP channel for re-use\n     */\n    private function reset_sftp()\n    {\n        $this->use_request_id = false;\n        $this->pwd = false;\n        $this->requestBuffer = [];\n        $this->partial_init = false;\n    }\n\n    /**\n     * Resets a connection for re-use\n     */\n    protected function reset_connection()\n    {\n        parent::reset_connection();\n        $this->reset_sftp();\n    }\n\n    /**\n     * Receives SFTP Packets\n     *\n     * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.\n     *\n     * Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present.\n     * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA\n     * messages containing one SFTP packet.\n     *\n     * @see self::_send_sftp_packet()\n     * @return string\n     */\n    private function get_sftp_packet($request_id = null)\n    {\n        $this->channel_close = false;\n\n        if (isset($request_id) && isset($this->requestBuffer[$request_id])) {\n            $this->packet_type = $this->requestBuffer[$request_id]['packet_type'];\n            $temp = $this->requestBuffer[$request_id]['packet'];\n            unset($this->requestBuffer[$request_id]);\n            return $temp;\n        }\n\n        // in SSH2.php the timeout is cumulative per function call. eg. exec() will\n        // timeout after 10s. but for SFTP.php it's cumulative per packet\n        $this->curTimeout = $this->timeout;\n        $this->is_timeout = false;\n\n        $start = microtime(true);\n\n        // SFTP packet length\n        while (strlen($this->packet_buffer) < 4) {\n            $temp = $this->get_channel_packet(self::CHANNEL, true);\n            if ($temp === true) {\n                if ($this->channel_status[self::CHANNEL] === NET_SSH2_MSG_CHANNEL_CLOSE) {\n                    $this->channel_close = true;\n                }\n                $this->packet_type = false;\n                $this->packet_buffer = '';\n                return false;\n            }\n            $this->packet_buffer .= $temp;\n        }\n        if (strlen($this->packet_buffer) < 4) {\n            throw new \\RuntimeException('Packet is too small');\n        }\n        $length = unpack('Nlength', Strings::shift($this->packet_buffer, 4))['length'];\n\n        $tempLength = $length;\n        $tempLength -= strlen($this->packet_buffer);\n\n        // 256 * 1024 is what SFTP_MAX_MSG_LENGTH is set to in OpenSSH's sftp-common.h\n        if (!$this->allow_arbitrary_length_packets && !$this->use_request_id && $tempLength > 256 * 1024) {\n            throw new \\RuntimeException('Invalid Size');\n        }\n\n        // SFTP packet type and data payload\n        while ($tempLength > 0) {\n            $temp = $this->get_channel_packet(self::CHANNEL, true);\n            if ($temp === true) {\n                if ($this->channel_status[self::CHANNEL] === NET_SSH2_MSG_CHANNEL_CLOSE) {\n                    $this->channel_close = true;\n                }\n                $this->packet_type = false;\n                $this->packet_buffer = '';\n                return false;\n            }\n            $this->packet_buffer .= $temp;\n            $tempLength -= strlen($temp);\n        }\n\n        $stop = microtime(true);\n\n        $this->packet_type = ord(Strings::shift($this->packet_buffer));\n\n        if ($this->use_request_id) {\n            $packet_id = unpack('Npacket_id', Strings::shift($this->packet_buffer, 4))['packet_id']; // remove the request id\n            $length -= 5; // account for the request id and the packet type\n        } else {\n            $length -= 1; // account for the packet type\n        }\n\n        $packet = Strings::shift($this->packet_buffer, $length);\n\n        if (defined('NET_SFTP_LOGGING')) {\n            $packet_type = '<- ' . self::$packet_types[$this->packet_type] .\n                           ' (' . round($stop - $start, 4) . 's)';\n            $this->append_log($packet_type, $packet);\n        }\n\n        if (isset($request_id) && $this->use_request_id && $packet_id != $request_id) {\n            $this->requestBuffer[$packet_id] = [\n                'packet_type' => $this->packet_type,\n                'packet' => $packet\n            ];\n            return $this->get_sftp_packet($request_id);\n        }\n\n        return $packet;\n    }\n\n    /**\n     * Logs data packets\n     *\n     * Makes sure that only the last 1MB worth of packets will be logged\n     *\n     * @param string $message_number\n     * @param string $message\n     */\n    private function append_log($message_number, $message)\n    {\n        $this->append_log_helper(\n            NET_SFTP_LOGGING,\n            $message_number,\n            $message,\n            $this->packet_type_log,\n            $this->packet_log,\n            $this->log_size,\n            $this->realtime_log_file,\n            $this->realtime_log_wrap,\n            $this->realtime_log_size\n        );\n    }\n\n    /**\n     * Returns a log of the packets that have been sent and received.\n     *\n     * Returns a string if NET_SFTP_LOGGING == self::LOG_COMPLEX, an array if NET_SFTP_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')\n     *\n     * @return array|string|false\n     */\n    public function getSFTPLog()\n    {\n        if (!defined('NET_SFTP_LOGGING')) {\n            return false;\n        }\n\n        switch (NET_SFTP_LOGGING) {\n            case self::LOG_COMPLEX:\n                return $this->format_log($this->packet_log, $this->packet_type_log);\n                break;\n            //case self::LOG_SIMPLE:\n            default:\n                return $this->packet_type_log;\n        }\n    }\n    /**\n     * Returns all errors on the SFTP layer\n     *\n     * @return array\n     */\n    public function getSFTPErrors()\n    {\n        return $this->sftp_errors;\n    }\n\n    /**\n     * Returns the last error on the SFTP layer\n     *\n     * @return string\n     */\n    public function getLastSFTPError()\n    {\n        return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : '';\n    }\n\n    /**\n     * Get supported SFTP versions\n     *\n     * @return array\n     */\n    public function getSupportedVersions()\n    {\n        if (!($this->bitmap & SSH2::MASK_LOGIN)) {\n            return false;\n        }\n\n        if (!$this->partial_init) {\n            $this->partial_init_sftp_connection();\n        }\n\n        $temp = ['version' => $this->defaultVersion];\n        if (isset($this->extensions['versions'])) {\n            $temp['extensions'] = $this->extensions['versions'];\n        }\n        return $temp;\n    }\n\n    /**\n     * Get supported SFTP extensions\n     *\n     * @return array\n     */\n    public function getSupportedExtensions()\n    {\n        if (!($this->bitmap & SSH2::MASK_LOGIN)) {\n            return false;\n        }\n\n        if (!$this->partial_init) {\n            $this->partial_init_sftp_connection();\n        }\n\n        return $this->extensions;\n    }\n\n    /**\n     * Get supported SFTP versions\n     *\n     * @return int|false\n     */\n    public function getNegotiatedVersion()\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        return $this->version;\n    }\n\n    /**\n     * Set preferred version\n     *\n     * If you're preferred version isn't supported then the highest supported\n     * version of SFTP will be utilized. Set to null or false or int(0) to\n     * unset the preferred version\n     *\n     * @param int $version\n     */\n    public function setPreferredVersion($version)\n    {\n        $this->preferredVersion = $version;\n    }\n\n    /**\n     * Disconnect\n     *\n     * @param int $reason\n     * @return false\n     */\n    protected function disconnect_helper($reason)\n    {\n        $this->pwd = false;\n        return parent::disconnect_helper($reason);\n    }\n\n    /**\n     * Enable Date Preservation\n     */\n    public function enableDatePreservation()\n    {\n        $this->preserveTime = true;\n    }\n\n    /**\n     * Disable Date Preservation\n     */\n    public function disableDatePreservation()\n    {\n        $this->preserveTime = false;\n    }\n\n    /**\n     * Copy\n     *\n     * This method (currently) only works if the copy-data extension is available\n     *\n     * @param string $oldname\n     * @param string $newname\n     * @return bool\n     */\n    public function copy($oldname, $newname)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $oldname = $this->realpath($oldname);\n        $newname = $this->realpath($newname);\n        if ($oldname === false || $newname === false) {\n            return false;\n        }\n\n        if (!isset($this->extensions['copy-data']) || $this->extensions['copy-data'] !== '1') {\n            throw new \\RuntimeException(\n                \"Extension 'copy-data' is not supported by the server. \" .\n                \"Call getSupportedVersions() to see a list of supported extension\"\n            );\n        }\n\n        $size = $this->filesize($oldname);\n\n        $packet = Strings::packSSH2('s', $oldname);\n        $packet .= $this->version >= 5 ?\n            pack('N3', 0, NET_SFTP_OPEN_OPEN_EXISTING, 0) :\n            pack('N2', NET_SFTP_OPEN_READ, 0);\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                $oldhandle = substr($response, 4);\n                break;\n            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n                $this->logError($response);\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        if ($this->version >= 5) {\n            $flags = NET_SFTP_OPEN_OPEN_OR_CREATE;\n        } else {\n            $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;\n        }\n\n        $packet = Strings::packSSH2('s', $newname);\n        $packet .= $this->version >= 5 ?\n            pack('N3', 0, $flags, 0) :\n            pack('N2', $flags, 0);\n        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);\n\n        $response = $this->get_sftp_packet();\n        switch ($this->packet_type) {\n            case NET_SFTP_HANDLE:\n                $newhandle = substr($response, 4);\n                break;\n            case NET_SFTP_STATUS:\n                $this->logError($response);\n                return false;\n            default:\n                throw new \\UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '\n                                                  . 'Got packet type: ' . $this->packet_type);\n        }\n\n        $packet = Strings::packSSH2('ssQQsQ', 'copy-data', $oldhandle, 0, $size, $newhandle, 0);\n        $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        $this->close_handle($oldhandle);\n        $this->close_handle($newhandle);\n\n        return true;\n    }\n\n    /**\n     * POSIX Rename\n     *\n     * Where rename() fails \"if there already exists a file with the name specified by newpath\"\n     * (draft-ietf-secsh-filexfer-02#section-6.5), posix_rename() overwrites the existing file in an atomic fashion.\n     * ie. \"there is no observable instant in time where the name does not refer to either the old or the new file\"\n     * (draft-ietf-secsh-filexfer-13#page-39).\n     *\n     * @param string $oldname\n     * @param string $newname\n     * @return bool\n     */\n    public function posix_rename($oldname, $newname)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        $oldname = $this->realpath($oldname);\n        $newname = $this->realpath($newname);\n        if ($oldname === false || $newname === false) {\n            return false;\n        }\n\n        if ($this->version >= 5) {\n            $packet = Strings::packSSH2('ssN', $oldname, $newname, 2); // 2 = SSH_FXP_RENAME_ATOMIC\n            $this->send_sftp_packet(NET_SFTP_RENAME, $packet);\n        } elseif (isset($this->extensions['posix-rename@openssh.com']) && $this->extensions['posix-rename@openssh.com'] === '1') {\n            $packet = Strings::packSSH2('sss', 'posix-rename@openssh.com', $oldname, $newname);\n            $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);\n        } else {\n            throw new \\RuntimeException(\n                \"Extension 'posix-rename@openssh.com' is not supported by the server. \" .\n                \"Call getSupportedVersions() to see a list of supported extension\"\n            );\n        }\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type != NET_SFTP_STATUS) {\n            throw new \\UnexpectedValueException('Expected NET_SFTP_STATUS. '\n                                              . 'Got packet type: ' . $this->packet_type);\n        }\n\n        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED\n        list($status) = Strings::unpackSSH2('N', $response);\n        if ($status != NET_SFTP_STATUS_OK) {\n            $this->logError($response, $status);\n            return false;\n        }\n\n        // don't move the stat cache entry over since this operation could very well change the\n        // atime and mtime attributes\n        //$this->update_stat_cache($newname, $this->query_stat_cache($oldname));\n        $this->remove_from_stat_cache($oldname);\n        $this->remove_from_stat_cache($newname);\n\n        return true;\n    }\n\n    /**\n     * Returns general information about a file system.\n     *\n     * The function statvfs() returns information about a mounted filesystem.\n     * @see https://man7.org/linux/man-pages/man3/statvfs.3.html\n     *\n     * @param string $path\n     * @return false|array{bsize: int, frsize: int, blocks: int, bfree: int, bavail: int, files: int, ffree: int, favail: int, fsid: int, flag: int, namemax: int}\n     */\n    public function statvfs($path)\n    {\n        if (!$this->precheck()) {\n            return false;\n        }\n\n        if (!isset($this->extensions['statvfs@openssh.com']) || $this->extensions['statvfs@openssh.com'] !== '2') {\n            throw new \\RuntimeException(\n                \"Extension 'statvfs@openssh.com' is not supported by the server. \" .\n                \"Call getSupportedVersions() to see a list of supported extension\"\n            );\n        }\n\n        $realpath = $this->realpath($path);\n        if ($realpath === false) {\n            return false;\n        }\n\n        $packet = Strings::packSSH2('ss', 'statvfs@openssh.com', $realpath);\n        $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);\n\n        $response = $this->get_sftp_packet();\n        if ($this->packet_type !== NET_SFTP_EXTENDED_REPLY) {\n            throw new \\UnexpectedValueException(\n                'Expected SSH_FXP_EXTENDED_REPLY. '\n                . 'Got packet type: ' . $this->packet_type\n            );\n        }\n\n        /**\n         * These requests return a SSH_FXP_STATUS reply on failure. On success they\n         * return the following SSH_FXP_EXTENDED_REPLY reply:\n         *\n         * uint32        id\n         * uint64        f_bsize     file system block size\n         * uint64        f_frsize     fundamental fs block size\n         * uint64        f_blocks     number of blocks (unit f_frsize)\n         * uint64        f_bfree      free blocks in file system\n         * uint64        f_bavail     free blocks for non-root\n         * uint64        f_files      total file inodes\n         * uint64        f_ffree      free file inodes\n         * uint64        f_favail     free file inodes for to non-root\n         * uint64        f_fsid       file system id\n         * uint64        f_flag       bit mask of f_flag values\n         * uint64        f_namemax    maximum filename length\n         */\n        return array_combine(\n            ['bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree', 'favail', 'fsid', 'flag', 'namemax'],\n            Strings::unpackSSH2('QQQQQQQQQQQ', $response)\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
    "content": "<?php\n\n/**\n * Pure-PHP implementation of SSHv2.\n *\n * PHP version 5\n *\n * Here are some examples of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $ssh = new \\phpseclib3\\Net\\SSH2('www.domain.tld');\n *    if (!$ssh->login('username', 'password')) {\n *        exit('Login Failed');\n *    }\n *\n *    echo $ssh->exec('pwd');\n *    echo $ssh->exec('ls -la');\n * ?>\n * </code>\n *\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $key = \\phpseclib3\\Crypt\\PublicKeyLoader::load('...', '(optional) password');\n *\n *    $ssh = new \\phpseclib3\\Net\\SSH2('www.domain.tld');\n *    if (!$ssh->login('username', $key)) {\n *        exit('Login Failed');\n *    }\n *\n *    echo $ssh->read('username@username:~$');\n *    $ssh->write(\"ls -la\\n\");\n *    echo $ssh->read('username@username:~$');\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2007 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\Net;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Blowfish;\nuse phpseclib3\\Crypt\\ChaCha20;\nuse phpseclib3\\Crypt\\Common\\AsymmetricKey;\nuse phpseclib3\\Crypt\\Common\\PrivateKey;\nuse phpseclib3\\Crypt\\Common\\PublicKey;\nuse phpseclib3\\Crypt\\Common\\SymmetricKey;\nuse phpseclib3\\Crypt\\DH;\nuse phpseclib3\\Crypt\\DSA;\nuse phpseclib3\\Crypt\\EC;\nuse phpseclib3\\Crypt\\Hash;\nuse phpseclib3\\Crypt\\Random;\nuse phpseclib3\\Crypt\\RC4;\nuse phpseclib3\\Crypt\\Rijndael;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Crypt\\TripleDES; // Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.\nuse phpseclib3\\Crypt\\Twofish;\nuse phpseclib3\\Exception\\ConnectionClosedException;\nuse phpseclib3\\Exception\\InsufficientSetupException;\nuse phpseclib3\\Exception\\InvalidPacketLengthException;\nuse phpseclib3\\Exception\\NoSupportedAlgorithmsException;\nuse phpseclib3\\Exception\\TimeoutException;\nuse phpseclib3\\Exception\\UnableToConnectException;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\Exception\\UnsupportedCurveException;\nuse phpseclib3\\Math\\BigInteger;\nuse phpseclib3\\System\\SSH\\Agent;\n\n/**\n * Pure-PHP implementation of SSHv2.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass SSH2\n{\n    /**#@+\n     * Compression Types\n     *\n     */\n    /**\n     * No compression\n     */\n    const NET_SSH2_COMPRESSION_NONE = 1;\n    /**\n     * zlib compression\n     */\n    const NET_SSH2_COMPRESSION_ZLIB = 2;\n    /**\n     * zlib@openssh.com\n     */\n    const NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH = 3;\n    /**#@-*/\n\n    // Execution Bitmap Masks\n    const MASK_CONSTRUCTOR   = 0x00000001;\n    const MASK_CONNECTED     = 0x00000002;\n    const MASK_LOGIN_REQ     = 0x00000004;\n    const MASK_LOGIN         = 0x00000008;\n    const MASK_SHELL         = 0x00000010;\n    const MASK_DISCONNECT    = 0x00000020;\n\n    /*\n     * Channel constants\n     *\n     * RFC4254 refers not to client and server channels but rather to sender and recipient channels.  we don't refer\n     * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with\n     * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a\n     * recipient channel.  at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel\n     * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snippet:\n     *     The 'recipient channel' is the channel number given in the original\n     *     open request, and 'sender channel' is the channel number allocated by\n     *     the other side.\n     *\n     * @see \\phpseclib3\\Net\\SSH2::send_channel_packet()\n     * @see \\phpseclib3\\Net\\SSH2::get_channel_packet()\n     */\n    const CHANNEL_EXEC          = 1; // PuTTy uses 0x100\n    const CHANNEL_SHELL         = 2;\n    const CHANNEL_SUBSYSTEM     = 3;\n    const CHANNEL_AGENT_FORWARD = 4;\n    const CHANNEL_KEEP_ALIVE    = 5;\n\n    /**\n     * Returns the message numbers\n     *\n     * @see \\phpseclib3\\Net\\SSH2::getLog()\n     */\n    const LOG_SIMPLE = 1;\n    /**\n     * Returns the message content\n     *\n     * @see \\phpseclib3\\Net\\SSH2::getLog()\n     */\n    const LOG_COMPLEX = 2;\n    /**\n     * Outputs the content real-time\n     */\n    const LOG_REALTIME = 3;\n    /**\n     * Dumps the content real-time to a file\n     */\n    const LOG_REALTIME_FILE = 4;\n    /**\n     * Outputs the message numbers real-time\n     */\n    const LOG_SIMPLE_REALTIME = 5;\n    /*\n     * Dumps the message numbers real-time\n     */\n    const LOG_REALTIME_SIMPLE = 5;\n    /**\n     * Make sure that the log never gets larger than this\n     *\n     * @see \\phpseclib3\\Net\\SSH2::getLog()\n     */\n    const LOG_MAX_SIZE = 1048576; // 1024 * 1024\n\n    /**\n     * Returns when a string matching $expect exactly is found\n     *\n     * @see \\phpseclib3\\Net\\SSH2::read()\n     */\n    const READ_SIMPLE = 1;\n    /**\n     * Returns when a string matching the regular expression $expect is found\n     *\n     * @see \\phpseclib3\\Net\\SSH2::read()\n     */\n    const READ_REGEX = 2;\n    /**\n     * Returns whenever a data packet is received.\n     *\n     * Some data packets may only contain a single character so it may be necessary\n     * to call read() multiple times when using this option\n     *\n     * @see \\phpseclib3\\Net\\SSH2::read()\n     */\n    const READ_NEXT = 3;\n\n    /**\n     * The SSH identifier\n     *\n     * @var string\n     */\n    private $identifier;\n\n    /**\n     * The Socket Object\n     *\n     * @var resource|closed-resource|null\n     */\n    public $fsock;\n\n    /**\n     * Execution Bitmap\n     *\n     * The bits that are set represent functions that have been called already.  This is used to determine\n     * if a requisite function has been successfully executed.  If not, an error should be thrown.\n     *\n     * @var int\n     */\n    protected $bitmap = 0;\n\n    /**\n     * Error information\n     *\n     * @see self::getErrors()\n     * @see self::getLastError()\n     * @var array\n     */\n    private $errors = [];\n\n    /**\n     * Server Identifier\n     *\n     * @see self::getServerIdentification()\n     * @var string|false\n     */\n    protected $server_identifier = false;\n\n    /**\n     * Key Exchange Algorithms\n     *\n     * @see self::getKexAlgorithims()\n     * @var array|false\n     */\n    private $kex_algorithms = false;\n\n    /**\n     * Key Exchange Algorithm\n     *\n     * @see self::getMethodsNegotiated()\n     * @var string|false\n     */\n    private $kex_algorithm = false;\n\n    /**\n     * Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods\n     *\n     * @see self::_key_exchange()\n     * @var int\n     */\n    private $kex_dh_group_size_min = 1536;\n\n    /**\n     * Preferred Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods\n     *\n     * @see self::_key_exchange()\n     * @var int\n     */\n    private $kex_dh_group_size_preferred = 2048;\n\n    /**\n     * Maximum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods\n     *\n     * @see self::_key_exchange()\n     * @var int\n     */\n    private $kex_dh_group_size_max = 4096;\n\n    /**\n     * Server Host Key Algorithms\n     *\n     * @see self::getServerHostKeyAlgorithms()\n     * @var array|false\n     */\n    private $server_host_key_algorithms = false;\n\n    /**\n     * Supported Private Key Algorithms\n     *\n     * In theory this should be the same as the Server Host Key Algorithms but, in practice,\n     * some servers (eg. Azure) will support rsa-sha2-512 as a server host key algorithm but\n     * not a private key algorithm\n     *\n     * @see self::privatekey_login()\n     * @var array|false\n     */\n    private $supported_private_key_algorithms = false;\n\n    /**\n     * Encryption Algorithms: Client to Server\n     *\n     * @see self::getEncryptionAlgorithmsClient2Server()\n     * @var array|false\n     */\n    private $encryption_algorithms_client_to_server = false;\n\n    /**\n     * Encryption Algorithms: Server to Client\n     *\n     * @see self::getEncryptionAlgorithmsServer2Client()\n     * @var array|false\n     */\n    private $encryption_algorithms_server_to_client = false;\n\n    /**\n     * MAC Algorithms: Client to Server\n     *\n     * @see self::getMACAlgorithmsClient2Server()\n     * @var array|false\n     */\n    private $mac_algorithms_client_to_server = false;\n\n    /**\n     * MAC Algorithms: Server to Client\n     *\n     * @see self::getMACAlgorithmsServer2Client()\n     * @var array|false\n     */\n    private $mac_algorithms_server_to_client = false;\n\n    /**\n     * Compression Algorithms: Client to Server\n     *\n     * @see self::getCompressionAlgorithmsClient2Server()\n     * @var array|false\n     */\n    private $compression_algorithms_client_to_server = false;\n\n    /**\n     * Compression Algorithms: Server to Client\n     *\n     * @see self::getCompressionAlgorithmsServer2Client()\n     * @var array|false\n     */\n    private $compression_algorithms_server_to_client = false;\n\n    /**\n     * Languages: Server to Client\n     *\n     * @see self::getLanguagesServer2Client()\n     * @var array|false\n     */\n    private $languages_server_to_client = false;\n\n    /**\n     * Languages: Client to Server\n     *\n     * @see self::getLanguagesClient2Server()\n     * @var array|false\n     */\n    private $languages_client_to_server = false;\n\n    /**\n     * Preferred Algorithms\n     *\n     * @see self::setPreferredAlgorithms()\n     * @var array\n     */\n    private $preferred = [];\n\n    /**\n     * Block Size for Server to Client Encryption\n     *\n     * \"Note that the length of the concatenation of 'packet_length',\n     *  'padding_length', 'payload', and 'random padding' MUST be a multiple\n     *  of the cipher block size or 8, whichever is larger.  This constraint\n     *  MUST be enforced, even when using stream ciphers.\"\n     *\n     *  -- http://tools.ietf.org/html/rfc4253#section-6\n     *\n     * @see self::__construct()\n     * @see self::_send_binary_packet()\n     * @var int\n     */\n    private $encrypt_block_size = 8;\n\n    /**\n     * Block Size for Client to Server Encryption\n     *\n     * @see self::__construct()\n     * @see self::_get_binary_packet()\n     * @var int\n     */\n    private $decrypt_block_size = 8;\n\n    /**\n     * Server to Client Encryption Object\n     *\n     * @see self::_get_binary_packet()\n     * @var SymmetricKey|false\n     */\n    private $decrypt = false;\n\n    /**\n     * Decryption Algorithm Name\n     *\n     * @var string|null\n     */\n    private $decryptName;\n\n    /**\n     * Decryption Invocation Counter\n     *\n     * Used by GCM\n     *\n     * @var string|null\n     */\n    private $decryptInvocationCounter;\n\n    /**\n     * Fixed Part of Nonce\n     *\n     * Used by GCM\n     *\n     * @var string|null\n     */\n    private $decryptFixedPart;\n\n    /**\n     * Server to Client Length Encryption Object\n     *\n     * @see self::_get_binary_packet()\n     * @var object\n     */\n    private $lengthDecrypt = false;\n\n    /**\n     * Client to Server Encryption Object\n     *\n     * @see self::_send_binary_packet()\n     * @var SymmetricKey|false\n     */\n    private $encrypt = false;\n\n    /**\n     * Encryption Algorithm Name\n     *\n     * @var string|null\n     */\n    private $encryptName;\n\n    /**\n     * Encryption Invocation Counter\n     *\n     * Used by GCM\n     *\n     * @var string|null\n     */\n    private $encryptInvocationCounter;\n\n    /**\n     * Fixed Part of Nonce\n     *\n     * Used by GCM\n     *\n     * @var string|null\n     */\n    private $encryptFixedPart;\n\n    /**\n     * Client to Server Length Encryption Object\n     *\n     * @see self::_send_binary_packet()\n     * @var object\n     */\n    private $lengthEncrypt = false;\n\n    /**\n     * Client to Server HMAC Object\n     *\n     * @see self::_send_binary_packet()\n     * @var object\n     */\n    private $hmac_create = false;\n\n    /**\n     * Client to Server HMAC Name\n     *\n     * @var string|false\n     */\n    private $hmac_create_name;\n\n    /**\n     * Client to Server ETM\n     *\n     * @var int|false\n     */\n    private $hmac_create_etm;\n\n    /**\n     * Server to Client HMAC Object\n     *\n     * @see self::_get_binary_packet()\n     * @var object\n     */\n    private $hmac_check = false;\n\n    /**\n     * Server to Client HMAC Name\n     *\n     * @var string|false\n     */\n    private $hmac_check_name;\n\n    /**\n     * Server to Client ETM\n     *\n     * @var int|false\n     */\n    private $hmac_check_etm;\n\n    /**\n     * Size of server to client HMAC\n     *\n     * We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read.\n     * For the client to server side, the HMAC object will make the HMAC as long as it needs to be.  All we need to do is\n     * append it.\n     *\n     * @see self::_get_binary_packet()\n     * @var int\n     */\n    private $hmac_size = false;\n\n    /**\n     * Server Public Host Key\n     *\n     * @see self::getServerPublicHostKey()\n     * @var string\n     */\n    private $server_public_host_key;\n\n    /**\n     * Session identifier\n     *\n     * \"The exchange hash H from the first key exchange is additionally\n     *  used as the session identifier, which is a unique identifier for\n     *  this connection.\"\n     *\n     *  -- http://tools.ietf.org/html/rfc4253#section-7.2\n     *\n     * @see self::_key_exchange()\n     * @var string\n     */\n    private $session_id = false;\n\n    /**\n     * Exchange hash\n     *\n     * The current exchange hash\n     *\n     * @see self::_key_exchange()\n     * @var string\n     */\n    private $exchange_hash = false;\n\n    /**\n     * Message Numbers\n     *\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $message_numbers = [];\n\n    /**\n     * Disconnection Message 'reason codes' defined in RFC4253\n     *\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $disconnect_reasons = [];\n\n    /**\n     * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254\n     *\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $channel_open_failure_reasons = [];\n\n    /**\n     * Terminal Modes\n     *\n     * @link http://tools.ietf.org/html/rfc4254#section-8\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $terminal_modes = [];\n\n    /**\n     * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes\n     *\n     * @link http://tools.ietf.org/html/rfc4254#section-5.2\n     * @see self::__construct()\n     * @var array\n     * @access private\n     */\n    private static $channel_extended_data_type_codes = [];\n\n    /**\n     * Send Sequence Number\n     *\n     * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.\n     *\n     * @see self::_send_binary_packet()\n     * @var int\n     */\n    private $send_seq_no = 0;\n\n    /**\n     * Get Sequence Number\n     *\n     * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.\n     *\n     * @see self::_get_binary_packet()\n     * @var int\n     */\n    private $get_seq_no = 0;\n\n    /**\n     * Server Channels\n     *\n     * Maps client channels to server channels\n     *\n     * @see self::get_channel_packet()\n     * @see self::exec()\n     * @var array\n     */\n    protected $server_channels = [];\n\n    /**\n     * Channel Read Buffers\n     *\n     * If a client requests a packet from one channel but receives two packets from another those packets should\n     * be placed in a buffer\n     *\n     * @see self::get_channel_packet()\n     * @see self::exec()\n     * @var array\n     */\n    private $channel_buffers = [];\n\n    /**\n     * Channel Write Buffers\n     *\n     * If a client sends a packet and receives a timeout error mid-transmission, buffer the data written so it\n     * can be de-duplicated upon resuming write\n     *\n     * @see self::send_channel_packet()\n     * @var array\n     */\n    private $channel_buffers_write = [];\n\n    /**\n     * Channel Status\n     *\n     * Contains the type of the last sent message\n     *\n     * @see self::get_channel_packet()\n     * @var array\n     */\n    protected $channel_status = [];\n\n    /**\n     * The identifier of the interactive channel which was opened most recently\n     *\n     * @see self::getInteractiveChannelId()\n     * @var int\n     */\n    private $channel_id_last_interactive = 0;\n\n    /**\n     * Packet Size\n     *\n     * Maximum packet size indexed by channel\n     *\n     * @see self::send_channel_packet()\n     * @var array\n     */\n    protected $packet_size_client_to_server = [];\n\n    /**\n     * Message Number Log\n     *\n     * @see self::getLog()\n     * @var array\n     */\n    private $message_number_log = [];\n\n    /**\n     * Message Log\n     *\n     * @see self::getLog()\n     * @var array\n     */\n    private $message_log = [];\n\n    /**\n     * The Window Size\n     *\n     * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 2GB)\n     *\n     * @var int\n     * @see self::send_channel_packet()\n     * @see self::exec()\n     */\n    protected $window_size = 0x7FFFFFFF;\n\n    /**\n     * What we resize the window to\n     *\n     * When PuTTY resizes the window it doesn't add an additional 0x7FFFFFFF bytes - it adds 0x40000000 bytes.\n     * Some SFTP clients (GoAnywhere) don't support adding 0x7FFFFFFF to the window size after the fact so\n     * we'll just do what PuTTY does\n     *\n     * @var int\n     * @see self::_send_channel_packet()\n     * @see self::exec()\n     */\n    private $window_resize = 0x40000000;\n\n    /**\n     * Window size, server to client\n     *\n     * Window size indexed by channel\n     *\n     * @see self::send_channel_packet()\n     * @var array\n     */\n    protected $window_size_server_to_client = [];\n\n    /**\n     * Window size, client to server\n     *\n     * Window size indexed by channel\n     *\n     * @see self::get_channel_packet()\n     * @var array\n     */\n    private $window_size_client_to_server = [];\n\n    /**\n     * Server signature\n     *\n     * Verified against $this->session_id\n     *\n     * @see self::getServerPublicHostKey()\n     * @var string\n     */\n    private $signature = '';\n\n    /**\n     * Server signature format\n     *\n     * ssh-rsa or ssh-dss.\n     *\n     * @see self::getServerPublicHostKey()\n     * @var string\n     */\n    private $signature_format = '';\n\n    /**\n     * Interactive Buffer\n     *\n     * @see self::read()\n     * @var string\n     */\n    private $interactiveBuffer = '';\n\n    /**\n     * Current log size\n     *\n     * Should never exceed self::LOG_MAX_SIZE\n     *\n     * @see self::_send_binary_packet()\n     * @see self::_get_binary_packet()\n     * @var int\n     */\n    private $log_size;\n\n    /**\n     * Timeout\n     *\n     * @see self::setTimeout()\n     */\n    protected $timeout;\n\n    /**\n     * Current Timeout\n     *\n     * @see self::get_channel_packet()\n     */\n    protected $curTimeout;\n\n    /**\n     * Keep Alive Interval\n     *\n     * @see self::setKeepAlive()\n     */\n    private $keepAlive;\n\n    /**\n     * Real-time log file pointer\n     *\n     * @see self::_append_log()\n     * @var resource|closed-resource\n     */\n    private $realtime_log_file;\n\n    /**\n     * Real-time log file size\n     *\n     * @see self::_append_log()\n     * @var int\n     */\n    private $realtime_log_size;\n\n    /**\n     * Has the signature been validated?\n     *\n     * @see self::getServerPublicHostKey()\n     * @var bool\n     */\n    private $signature_validated = false;\n\n    /**\n     * Real-time log file wrap boolean\n     *\n     * @see self::_append_log()\n     * @var bool\n     */\n    private $realtime_log_wrap;\n\n    /**\n     * Flag to suppress stderr from output\n     *\n     * @see self::enableQuietMode()\n     */\n    private $quiet_mode = false;\n\n    /**\n     * Time of last read/write network activity\n     *\n     * @var float\n     */\n    private $last_packet = null;\n\n    /**\n     * Exit status returned from ssh if any\n     *\n     * @var int\n     */\n    private $exit_status;\n\n    /**\n     * Flag to request a PTY when using exec()\n     *\n     * @var bool\n     * @see self::enablePTY()\n     */\n    private $request_pty = false;\n\n    /**\n     * Contents of stdError\n     *\n     * @var string\n     */\n    private $stdErrorLog;\n\n    /**\n     * The Last Interactive Response\n     *\n     * @see self::_keyboard_interactive_process()\n     * @var string\n     */\n    private $last_interactive_response = '';\n\n    /**\n     * Keyboard Interactive Request / Responses\n     *\n     * @see self::_keyboard_interactive_process()\n     * @var array\n     */\n    private $keyboard_requests_responses = [];\n\n    /**\n     * Banner Message\n     *\n     * Quoting from the RFC, \"in some jurisdictions, sending a warning message before\n     * authentication may be relevant for getting legal protection.\"\n     *\n     * @see self::_filter()\n     * @see self::getBannerMessage()\n     * @var string\n     */\n    private $banner_message = '';\n\n    /**\n     * Did read() timeout or return normally?\n     *\n     * @see self::isTimeout()\n     * @var bool\n     */\n    protected $is_timeout = false;\n\n    /**\n     * Log Boundary\n     *\n     * @see self::_format_log()\n     * @var string\n     */\n    private $log_boundary = ':';\n\n    /**\n     * Log Long Width\n     *\n     * @see self::_format_log()\n     * @var int\n     */\n    private $log_long_width = 65;\n\n    /**\n     * Log Short Width\n     *\n     * @see self::_format_log()\n     * @var int\n     */\n    private $log_short_width = 16;\n\n    /**\n     * Hostname\n     *\n     * @see self::__construct()\n     * @see self::_connect()\n     * @var string\n     */\n    private $host;\n\n    /**\n     * Port Number\n     *\n     * @see self::__construct()\n     * @see self::_connect()\n     * @var int\n     */\n    private $port;\n\n    /**\n     * Number of columns for terminal window size\n     *\n     * @see self::getWindowColumns()\n     * @see self::setWindowColumns()\n     * @see self::setWindowSize()\n     * @var int\n     */\n    private $windowColumns = 80;\n\n    /**\n     * Number of columns for terminal window size\n     *\n     * @see self::getWindowRows()\n     * @see self::setWindowRows()\n     * @see self::setWindowSize()\n     * @var int\n     */\n    private $windowRows = 24;\n\n    /**\n     * Crypto Engine\n     *\n     * @see self::setCryptoEngine()\n     * @see self::_key_exchange()\n     * @var int\n     */\n    private static $crypto_engine = false;\n\n    /**\n     * A System_SSH_Agent for use in the SSH2 Agent Forwarding scenario\n     *\n     * @var Agent\n     */\n    private $agent;\n\n    /**\n     * Connection storage to replicates ssh2 extension functionality:\n     * {@link http://php.net/manual/en/wrappers.ssh2.php#refsect1-wrappers.ssh2-examples}\n     *\n     * @var array<string, SSH2|\\WeakReference<SSH2>>\n     */\n    private static $connections;\n\n    /**\n     * Send the identification string first?\n     *\n     * @var bool\n     */\n    private $send_id_string_first = true;\n\n    /**\n     * Send the key exchange initiation packet first?\n     *\n     * @var bool\n     */\n    private $send_kex_first = true;\n\n    /**\n     * Some versions of OpenSSH incorrectly calculate the key size\n     *\n     * @var bool\n     */\n    private $bad_key_size_fix = false;\n\n    /**\n     * Should we try to re-connect to re-establish keys?\n     *\n     * @var bool\n     */\n    private $login_credentials_finalized = false;\n\n    /**\n     * Binary Packet Buffer\n     *\n     * @var object|null\n     */\n    private $binary_packet_buffer = null;\n\n    /**\n     * Preferred Signature Format\n     *\n     * @var string|false\n     */\n    protected $preferred_signature_format = false;\n\n    /**\n     * Authentication Credentials\n     *\n     * @var array\n     */\n    protected $auth = [];\n\n    /**\n     * Terminal\n     *\n     * @var string\n     */\n    private $term = 'vt100';\n\n    /**\n     * The authentication methods that may productively continue authentication.\n     *\n     * @see https://tools.ietf.org/html/rfc4252#section-5.1\n     * @var array|null\n     */\n    private $auth_methods_to_continue = null;\n\n    /**\n     * Compression method\n     *\n     * @var int\n     */\n    private $compress = self::NET_SSH2_COMPRESSION_NONE;\n\n    /**\n     * Decompression method\n     *\n     * @var int\n     */\n    private $decompress = self::NET_SSH2_COMPRESSION_NONE;\n\n    /**\n     * Compression context\n     *\n     * @var resource|false|null\n     */\n    private $compress_context;\n\n    /**\n     * Decompression context\n     *\n     * @var resource|object\n     */\n    private $decompress_context;\n\n    /**\n     * Regenerate Compression Context\n     *\n     * @var bool\n     */\n    private $regenerate_compression_context = false;\n\n    /**\n     * Regenerate Decompression Context\n     *\n     * @var bool\n     */\n    private $regenerate_decompression_context = false;\n\n    /**\n     * Smart multi-factor authentication flag\n     *\n     * @var bool\n     */\n    private $smartMFA = true;\n\n    /**\n     * How many channels are currently opened\n     *\n     * @var int\n     */\n    private $channelCount = 0;\n\n    /**\n     * Does the server support multiple channels? If not then error out\n     * when multiple channels are attempted to be opened\n     *\n     * @var bool\n     */\n    private $errorOnMultipleChannels;\n\n    /**\n     * Bytes Transferred Since Last Key Exchange\n     *\n     * Includes outbound and inbound totals\n     *\n     * @var int\n     */\n    private $bytesTransferredSinceLastKEX = 0;\n\n    /**\n     * After how many transferred byte should phpseclib initiate a key re-exchange?\n     *\n     * @var int\n     */\n    private $doKeyReexchangeAfterXBytes = 1024 * 1024 * 1024;\n\n    /**\n     * Has a key re-exchange been initialized?\n     *\n     * @var bool\n     * @access private\n     */\n    private $keyExchangeInProgress = false;\n\n    /**\n     * KEX Buffer\n     *\n     * If we're in the middle of a key exchange we want to buffer any additional packets we get until\n     * the key exchange is over\n     *\n     * @see self::_get_binary_packet()\n     * @see self::_key_exchange()\n     * @see self::exec()\n     * @var array\n     * @access private\n     */\n    private $kex_buffer = [];\n\n    /**\n     * Strict KEX Flag\n     *\n     * If kex-strict-s-v00@openssh.com is present in the first KEX packet it need not\n     * be present in subsequent packet\n     *\n     * @see self::_key_exchange()\n     * @see self::exec()\n     * @var array\n     * @access private\n     */\n    private $strict_kex_flag = false;\n\n    /**\n     * Default Constructor.\n     *\n     * $host can either be a string, representing the host, or a stream resource.\n     * If $host is a stream resource then $port doesn't do anything, altho $timeout\n     * still will be used\n     *\n     * @param mixed $host\n     * @param int $port\n     * @param int $timeout\n     * @see self::login()\n     */\n    public function __construct($host, $port = 22, $timeout = 10)\n    {\n        if (empty(self::$message_numbers)) {\n            self::$message_numbers = [\n                1 => 'NET_SSH2_MSG_DISCONNECT',\n                2 => 'NET_SSH2_MSG_IGNORE',\n                3 => 'NET_SSH2_MSG_UNIMPLEMENTED',\n                4 => 'NET_SSH2_MSG_DEBUG',\n                5 => 'NET_SSH2_MSG_SERVICE_REQUEST',\n                6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',\n                7 => 'NET_SSH2_MSG_EXT_INFO', // RFC 8308\n                20 => 'NET_SSH2_MSG_KEXINIT',\n                21 => 'NET_SSH2_MSG_NEWKEYS',\n                30 => 'NET_SSH2_MSG_KEXDH_INIT',\n                31 => 'NET_SSH2_MSG_KEXDH_REPLY',\n                50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',\n                51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',\n                52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',\n                53 => 'NET_SSH2_MSG_USERAUTH_BANNER',\n\n                80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',\n                81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',\n                82 => 'NET_SSH2_MSG_REQUEST_FAILURE',\n                90 => 'NET_SSH2_MSG_CHANNEL_OPEN',\n                91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',\n                92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',\n                93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',\n                94 => 'NET_SSH2_MSG_CHANNEL_DATA',\n                95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',\n                96 => 'NET_SSH2_MSG_CHANNEL_EOF',\n                97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',\n                98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',\n                99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',\n                100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'\n            ];\n            self::$disconnect_reasons = [\n                1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',\n                2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',\n                3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',\n                4 => 'NET_SSH2_DISCONNECT_RESERVED',\n                5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',\n                6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',\n                7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',\n                8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',\n                9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',\n                10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',\n                11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',\n                12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',\n                13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',\n                14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',\n                15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'\n            ];\n            self::$channel_open_failure_reasons = [\n                1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'\n            ];\n            self::$terminal_modes = [\n                0 => 'NET_SSH2_TTY_OP_END'\n            ];\n            self::$channel_extended_data_type_codes = [\n                1 => 'NET_SSH2_EXTENDED_DATA_STDERR'\n            ];\n\n            self::define_array(\n                self::$message_numbers,\n                self::$disconnect_reasons,\n                self::$channel_open_failure_reasons,\n                self::$terminal_modes,\n                self::$channel_extended_data_type_codes,\n                [60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'],\n                [60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'],\n                [60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',\n                      61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'],\n                // RFC 4419 - diffie-hellman-group-exchange-sha{1,256}\n                [30 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD',\n                      31 => 'NET_SSH2_MSG_KEXDH_GEX_GROUP',\n                      32 => 'NET_SSH2_MSG_KEXDH_GEX_INIT',\n                      33 => 'NET_SSH2_MSG_KEXDH_GEX_REPLY',\n                      34 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'],\n                // RFC 5656 - Elliptic Curves (for curve25519-sha256@libssh.org)\n                [30 => 'NET_SSH2_MSG_KEX_ECDH_INIT',\n                      31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY']\n            );\n        }\n\n        /**\n         * Typehint is required due to a bug in Psalm: https://github.com/vimeo/psalm/issues/7508\n         * @var \\WeakReference<SSH2>|SSH2\n         */\n        self::$connections[$this->getResourceId()] = class_exists('WeakReference')\n            ? \\WeakReference::create($this)\n            : $this;\n\n        $this->timeout = $timeout;\n\n        if (is_resource($host)) {\n            $this->fsock = $host;\n            return;\n        }\n\n        if (Strings::is_stringable($host)) {\n            $this->host = $host;\n            $this->port = $port;\n        }\n    }\n\n    /**\n     * Set Crypto Engine Mode\n     *\n     * Possible $engine values:\n     * OpenSSL, mcrypt, Eval, PHP\n     *\n     * @param int $engine\n     */\n    public static function setCryptoEngine($engine)\n    {\n        self::$crypto_engine = $engine;\n    }\n\n    /**\n     * Send Identification String First\n     *\n     * https://tools.ietf.org/html/rfc4253#section-4.2 says \"when the connection has been established,\n     * both sides MUST send an identification string\". It does not say which side sends it first. In\n     * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy\n     *\n     */\n    public function sendIdentificationStringFirst()\n    {\n        $this->send_id_string_first = true;\n    }\n\n    /**\n     * Send Identification String Last\n     *\n     * https://tools.ietf.org/html/rfc4253#section-4.2 says \"when the connection has been established,\n     * both sides MUST send an identification string\". It does not say which side sends it first. In\n     * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy\n     *\n     */\n    public function sendIdentificationStringLast()\n    {\n        $this->send_id_string_first = false;\n    }\n\n    /**\n     * Send SSH_MSG_KEXINIT First\n     *\n     * https://tools.ietf.org/html/rfc4253#section-7.1 says \"key exchange begins by each sending\n     * sending the [SSH_MSG_KEXINIT] packet\". It does not say which side sends it first. In theory\n     * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy\n     *\n     */\n    public function sendKEXINITFirst()\n    {\n        $this->send_kex_first = true;\n    }\n\n    /**\n     * Send SSH_MSG_KEXINIT Last\n     *\n     * https://tools.ietf.org/html/rfc4253#section-7.1 says \"key exchange begins by each sending\n     * sending the [SSH_MSG_KEXINIT] packet\". It does not say which side sends it first. In theory\n     * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy\n     *\n     */\n    public function sendKEXINITLast()\n    {\n        $this->send_kex_first = false;\n    }\n\n    /**\n     * stream_select wrapper\n     *\n     * Quoting https://stackoverflow.com/a/14262151/569976,\n     * \"The general approach to `EINTR` is to simply handle the error and retry the operation again\"\n     *\n     * This wrapper does that loop\n     */\n    private static function stream_select(&$read, &$write, &$except, $seconds, $microseconds = null)\n    {\n        $remaining = $seconds + $microseconds / 1000000;\n        $start = microtime(true);\n        while (true) {\n            $result = @stream_select($read, $write, $except, $seconds, $microseconds);\n            if ($result !== false) {\n                return $result;\n            }\n            $elapsed = microtime(true) - $start;\n            $seconds = (int) ($remaining - floor($elapsed));\n            $microseconds = (int) (1000000 * ($remaining - $seconds));\n            if ($elapsed >= $remaining) {\n                return false;\n            }\n        }\n    }\n\n    /**\n     * Connect to an SSHv2 server\n     *\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @throws \\RuntimeException on other errors\n     */\n    private function connect()\n    {\n        if ($this->bitmap & self::MASK_CONSTRUCTOR) {\n            return;\n        }\n\n        $this->bitmap |= self::MASK_CONSTRUCTOR;\n\n        $this->curTimeout = $this->timeout;\n\n        if (!is_resource($this->fsock)) {\n            $start = microtime(true);\n            // with stream_select a timeout of 0 means that no timeout takes place;\n            // with fsockopen a timeout of 0 means that you instantly timeout\n            // to resolve this incompatibility a timeout of 100,000 will be used for fsockopen if timeout is 0\n            $this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $this->curTimeout == 0 ? 100000 : $this->curTimeout);\n            if (!$this->fsock) {\n                $host = $this->host . ':' . $this->port;\n                throw new UnableToConnectException(rtrim(\"Cannot connect to $host. Error $errno. $errstr\"));\n            }\n            $elapsed = microtime(true) - $start;\n\n            if ($this->curTimeout) {\n                $this->curTimeout -= $elapsed;\n                if ($this->curTimeout < 0) {\n                    throw new \\RuntimeException('Connection timed out whilst attempting to open socket connection');\n                }\n            }\n\n            if (defined('NET_SSH2_LOGGING')) {\n                $this->append_log('(fsockopen took ' . round($elapsed, 4) . 's)', '');\n            }\n        }\n\n        $this->identifier = $this->generate_identifier();\n\n        if ($this->send_id_string_first) {\n            $start = microtime(true);\n            fputs($this->fsock, $this->identifier . \"\\r\\n\");\n            $elapsed = round(microtime(true) - $start, 4);\n            if (defined('NET_SSH2_LOGGING')) {\n                $this->append_log(\"-> (network: $elapsed)\", $this->identifier . \"\\r\\n\");\n            }\n        }\n\n        /* According to the SSH2 specs,\n\n          \"The server MAY send other lines of data before sending the version\n           string.  Each line SHOULD be terminated by a Carriage Return and Line\n           Feed.  Such lines MUST NOT begin with \"SSH-\", and SHOULD be encoded\n           in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients\n           MUST be able to process such lines.\" */\n        $data = '';\n        $totalElapsed = 0;\n        while (!feof($this->fsock) && !preg_match('#(.*)^(SSH-(\\d\\.\\d+).*)#ms', $data, $matches)) {\n            $line = '';\n            while (true) {\n                if ($this->curTimeout) {\n                    if ($this->curTimeout < 0) {\n                        throw new \\RuntimeException('Connection timed out whilst receiving server identification string');\n                    }\n                    $read = [$this->fsock];\n                    $write = $except = null;\n                    $start = microtime(true);\n                    $sec = (int) floor($this->curTimeout);\n                    $usec = (int) (1000000 * ($this->curTimeout - $sec));\n                    if (static::stream_select($read, $write, $except, $sec, $usec) === false) {\n                        throw new \\RuntimeException('Connection timed out whilst receiving server identification string');\n                    }\n                    $elapsed = microtime(true) - $start;\n                    $totalElapsed += $elapsed;\n                    $this->curTimeout -= $elapsed;\n                }\n\n                $temp = stream_get_line($this->fsock, 255, \"\\n\");\n                if ($temp === false) {\n                    throw new \\RuntimeException('Error reading SSH identification string; are you sure you\\'re connecting to an SSH server?');\n                }\n\n                $line .= $temp;\n                if (strlen($temp) == 255) {\n                    continue;\n                }\n\n                $line .= \"\\n\";\n\n                break;\n            }\n\n            $data .= $line;\n        }\n\n        if (defined('NET_SSH2_LOGGING')) {\n            $this->append_log('<- (network: ' . round($totalElapsed, 4) . ')', $data);\n        }\n\n        if (feof($this->fsock)) {\n            $this->bitmap = 0;\n            throw new ConnectionClosedException('Connection closed by server; are you sure you\\'re connected to an SSH server?');\n        }\n\n        $extra = $matches[1];\n\n        // earlier the SSH specs were quoted.\n        // \"The server MAY send other lines of data before sending the version string.\" they said.\n        // the implication of this is that the lines of data before the server string are *not* a part of it\n        // getting this right is important because the correct server identifier needs to be fed into the\n        // exchange hash for the shared keys to be calculated correctly\n        $data = explode(\"\\r\\n\", trim($data, \"\\r\\n\"));\n        $this->server_identifier = $data[count($data) - 1];\n        if (strlen($extra)) {\n            $this->errors[] = $data;\n        }\n\n        if (version_compare($matches[3], '1.99', '<')) {\n            $this->bitmap = 0;\n            throw new UnableToConnectException(\"Cannot connect to SSH $matches[3] servers\");\n        }\n\n        // Ubuntu's OpenSSH from 5.8 to 6.9 didn't work with multiple channels. see\n        // https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1334916 for more info.\n        // https://lists.ubuntu.com/archives/oneiric-changes/2011-July/005772.html discusses\n        // when consolekit was incorporated.\n        // https://marc.info/?l=openssh-unix-dev&m=163409903417589&w=2 discusses some of the\n        // issues with how Ubuntu incorporated consolekit\n        $pattern = '#^SSH-2\\.0-OpenSSH_([\\d.]+)[^ ]* Ubuntu-.*$#';\n        $match = preg_match($pattern, $this->server_identifier, $matches);\n        $match = $match && version_compare('5.8', $matches[1], '<=');\n        $match = $match && version_compare('6.9', $matches[1], '>=');\n        $this->errorOnMultipleChannels = $match;\n\n        if (!$this->send_id_string_first) {\n            $start = microtime(true);\n            fputs($this->fsock, $this->identifier . \"\\r\\n\");\n            $elapsed = round(microtime(true) - $start, 4);\n            if (defined('NET_SSH2_LOGGING')) {\n                $this->append_log(\"-> (network: $elapsed)\", $this->identifier . \"\\r\\n\");\n            }\n        }\n\n        $this->last_packet = microtime(true);\n\n        if (!$this->send_kex_first) {\n            $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_KEXINIT);\n            $this->key_exchange($response);\n        }\n\n        if ($this->send_kex_first) {\n            $this->key_exchange();\n        }\n\n        $this->bitmap |= self::MASK_CONNECTED;\n\n        return true;\n    }\n\n    /**\n     * Generates the SSH identifier\n     *\n     * You should overwrite this method in your own class if you want to use another identifier\n     *\n     * @return string\n     */\n    private function generate_identifier()\n    {\n        $identifier = 'SSH-2.0-phpseclib_3.0';\n\n        $ext = [];\n        if (extension_loaded('sodium')) {\n            $ext[] = 'libsodium';\n        }\n\n        if (extension_loaded('openssl')) {\n            $ext[] = 'openssl';\n        } elseif (extension_loaded('mcrypt')) {\n            $ext[] = 'mcrypt';\n        }\n\n        if (extension_loaded('gmp')) {\n            $ext[] = 'gmp';\n        } elseif (extension_loaded('bcmath')) {\n            $ext[] = 'bcmath';\n        }\n\n        if (!empty($ext)) {\n            $identifier .= ' (' . implode(', ', $ext) . ')';\n        }\n\n        return $identifier;\n    }\n\n    /**\n     * Key Exchange\n     *\n     * @return bool\n     * @param string|bool $kexinit_payload_server optional\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @throws \\RuntimeException on other errors\n     * @throws NoSupportedAlgorithmsException when none of the algorithms phpseclib has loaded are compatible\n     */\n    private function key_exchange($kexinit_payload_server = false)\n    {\n        $this->bytesTransferredSinceLastKEX = 0;\n\n        $preferred = $this->preferred;\n        // for the initial key exchange $send_kex is true (no key re-exchange has been started)\n        // for phpseclib initiated key exchanges $send_kex is false\n        $send_kex = !$this->keyExchangeInProgress;\n        $this->keyExchangeInProgress = true;\n\n        $kex_algorithms = isset($preferred['kex']) ?\n            $preferred['kex'] :\n            SSH2::getSupportedKEXAlgorithms();\n        $server_host_key_algorithms = isset($preferred['hostkey']) ?\n            $preferred['hostkey'] :\n            SSH2::getSupportedHostKeyAlgorithms();\n        $s2c_encryption_algorithms = isset($preferred['server_to_client']['crypt']) ?\n            $preferred['server_to_client']['crypt'] :\n            SSH2::getSupportedEncryptionAlgorithms();\n        $c2s_encryption_algorithms = isset($preferred['client_to_server']['crypt']) ?\n            $preferred['client_to_server']['crypt'] :\n            SSH2::getSupportedEncryptionAlgorithms();\n        $s2c_mac_algorithms = isset($preferred['server_to_client']['mac']) ?\n            $preferred['server_to_client']['mac'] :\n            SSH2::getSupportedMACAlgorithms();\n        $c2s_mac_algorithms = isset($preferred['client_to_server']['mac']) ?\n            $preferred['client_to_server']['mac'] :\n            SSH2::getSupportedMACAlgorithms();\n        $s2c_compression_algorithms = isset($preferred['server_to_client']['comp']) ?\n            $preferred['server_to_client']['comp'] :\n            SSH2::getSupportedCompressionAlgorithms();\n        $c2s_compression_algorithms = isset($preferred['client_to_server']['comp']) ?\n            $preferred['client_to_server']['comp'] :\n            SSH2::getSupportedCompressionAlgorithms();\n\n        $kex_algorithms = array_merge($kex_algorithms, ['ext-info-c', 'kex-strict-c-v00@openssh.com']);\n\n        // some SSH servers have buggy implementations of some of the above algorithms\n        switch (true) {\n            case $this->server_identifier == 'SSH-2.0-SSHD':\n            case substr($this->server_identifier, 0, 13) == 'SSH-2.0-DLINK':\n                if (!isset($preferred['server_to_client']['mac'])) {\n                    $s2c_mac_algorithms = array_values(array_diff(\n                        $s2c_mac_algorithms,\n                        ['hmac-sha1-96', 'hmac-md5-96']\n                    ));\n                }\n                if (!isset($preferred['client_to_server']['mac'])) {\n                    $c2s_mac_algorithms = array_values(array_diff(\n                        $c2s_mac_algorithms,\n                        ['hmac-sha1-96', 'hmac-md5-96']\n                    ));\n                }\n                break;\n            case substr($this->server_identifier, 0, 24) == 'SSH-2.0-TurboFTP_SERVER_':\n                if (!isset($preferred['server_to_client']['crypt'])) {\n                    $s2c_encryption_algorithms = array_values(array_diff(\n                        $s2c_encryption_algorithms,\n                        ['aes128-gcm@openssh.com', 'aes256-gcm@openssh.com']\n                    ));\n                }\n                if (!isset($preferred['client_to_server']['crypt'])) {\n                    $c2s_encryption_algorithms = array_values(array_diff(\n                        $c2s_encryption_algorithms,\n                        ['aes128-gcm@openssh.com', 'aes256-gcm@openssh.com']\n                    ));\n                }\n        }\n\n        $client_cookie = Random::string(16);\n\n        $kexinit_payload_client = pack('Ca*', NET_SSH2_MSG_KEXINIT, $client_cookie);\n        $kexinit_payload_client .= Strings::packSSH2(\n            'L10bN',\n            $kex_algorithms,\n            $server_host_key_algorithms,\n            $c2s_encryption_algorithms,\n            $s2c_encryption_algorithms,\n            $c2s_mac_algorithms,\n            $s2c_mac_algorithms,\n            $c2s_compression_algorithms,\n            $s2c_compression_algorithms,\n            [], // language, client to server\n            [], // language, server to client\n            false, // first_kex_packet_follows\n            0 // reserved for future extension\n        );\n\n        if ($kexinit_payload_server === false && $send_kex) {\n            $this->send_binary_packet($kexinit_payload_client);\n\n            while (true) {\n                $kexinit_payload_server = $this->get_binary_packet();\n                switch (ord($kexinit_payload_server[0])) {\n                    case NET_SSH2_MSG_KEXINIT:\n                        break 2;\n                    case NET_SSH2_MSG_DISCONNECT:\n                        return $this->handleDisconnect($kexinit_payload_server);\n                }\n                $this->kex_buffer[] = $kexinit_payload_server;\n            }\n\n            $send_kex = false;\n        }\n\n        $response = $kexinit_payload_server;\n        Strings::shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT)\n        $server_cookie = Strings::shift($response, 16);\n\n        list(\n            $this->kex_algorithms,\n            $this->server_host_key_algorithms,\n            $this->encryption_algorithms_client_to_server,\n            $this->encryption_algorithms_server_to_client,\n            $this->mac_algorithms_client_to_server,\n            $this->mac_algorithms_server_to_client,\n            $this->compression_algorithms_client_to_server,\n            $this->compression_algorithms_server_to_client,\n            $this->languages_client_to_server,\n            $this->languages_server_to_client,\n            $first_kex_packet_follows\n        ) = Strings::unpackSSH2('L10C', $response);\n        if (in_array('kex-strict-s-v00@openssh.com', $this->kex_algorithms)) {\n            if ($this->session_id === false) {\n                // [kex-strict-s-v00@openssh.com is] only valid in the initial SSH2_MSG_KEXINIT and MUST be ignored\n                // if [it is] present in subsequent SSH2_MSG_KEXINIT packets\n                $this->strict_kex_flag = true;\n                if (count($this->kex_buffer)) {\n                    throw new \\UnexpectedValueException('Possible Terrapin Attack detected');\n                }\n            }\n        }\n\n        $this->supported_private_key_algorithms = $this->server_host_key_algorithms;\n\n        if ($send_kex) {\n            $this->send_binary_packet($kexinit_payload_client);\n        }\n\n        // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange\n\n        // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the\n        // diffie-hellman key exchange as fast as possible\n        $decrypt = self::array_intersect_first($s2c_encryption_algorithms, $this->encryption_algorithms_server_to_client);\n        if (!$decrypt || ($decryptKeyLength = $this->encryption_algorithm_to_key_size($decrypt)) === null) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible server to client encryption algorithms found');\n        }\n\n        $encrypt = self::array_intersect_first($c2s_encryption_algorithms, $this->encryption_algorithms_client_to_server);\n        if (!$encrypt || ($encryptKeyLength = $this->encryption_algorithm_to_key_size($encrypt)) === null) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible client to server encryption algorithms found');\n        }\n\n        // through diffie-hellman key exchange a symmetric key is obtained\n        $this->kex_algorithm = self::array_intersect_first($kex_algorithms, $this->kex_algorithms);\n        if ($this->kex_algorithm === false) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible key exchange algorithms found');\n        }\n\n        $server_host_key_algorithm = self::array_intersect_first($server_host_key_algorithms, $this->server_host_key_algorithms);\n        if ($server_host_key_algorithm === false) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible server host key algorithms found');\n        }\n\n        $mac_algorithm_out = self::array_intersect_first($c2s_mac_algorithms, $this->mac_algorithms_client_to_server);\n        if ($mac_algorithm_out === false) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible client to server message authentication algorithms found');\n        }\n\n        $mac_algorithm_in = self::array_intersect_first($s2c_mac_algorithms, $this->mac_algorithms_server_to_client);\n        if ($mac_algorithm_in === false) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible server to client message authentication algorithms found');\n        }\n\n        $compression_map = [\n            'none' => self::NET_SSH2_COMPRESSION_NONE,\n            'zlib' => self::NET_SSH2_COMPRESSION_ZLIB,\n            'zlib@openssh.com' => self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH\n        ];\n\n        $compression_algorithm_in = self::array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_server_to_client);\n        if ($compression_algorithm_in === false) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible server to client compression algorithms found');\n        }\n        $this->decompress = $compression_map[$compression_algorithm_in];\n\n        $compression_algorithm_out = self::array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server);\n        if ($compression_algorithm_out === false) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n            throw new NoSupportedAlgorithmsException('No compatible client to server compression algorithms found');\n        }\n        $this->compress = $compression_map[$compression_algorithm_out];\n\n        switch ($this->kex_algorithm) {\n            case 'diffie-hellman-group15-sha512':\n            case 'diffie-hellman-group16-sha512':\n            case 'diffie-hellman-group17-sha512':\n            case 'diffie-hellman-group18-sha512':\n            case 'ecdh-sha2-nistp521':\n                $kexHash = new Hash('sha512');\n                break;\n            case 'ecdh-sha2-nistp384':\n                $kexHash = new Hash('sha384');\n                break;\n            case 'diffie-hellman-group-exchange-sha256':\n            case 'diffie-hellman-group14-sha256':\n            case 'ecdh-sha2-nistp256':\n            case 'curve25519-sha256@libssh.org':\n            case 'curve25519-sha256':\n                $kexHash = new Hash('sha256');\n                break;\n            default:\n                $kexHash = new Hash('sha1');\n        }\n\n        // Only relevant in diffie-hellman-group-exchange-sha{1,256}, otherwise empty.\n\n        $exchange_hash_rfc4419 = '';\n\n        if (strpos($this->kex_algorithm, 'curve25519-sha256') === 0 || strpos($this->kex_algorithm, 'ecdh-sha2-nistp') === 0) {\n            $curve = strpos($this->kex_algorithm, 'curve25519-sha256') === 0 ?\n                'Curve25519' :\n                substr($this->kex_algorithm, 10);\n            $ourPrivate = EC::createKey($curve);\n            $ourPublicBytes = $ourPrivate->getPublicKey()->getEncodedCoordinates();\n            $clientKexInitMessage = 'NET_SSH2_MSG_KEX_ECDH_INIT';\n            $serverKexReplyMessage = 'NET_SSH2_MSG_KEX_ECDH_REPLY';\n        } else {\n            if (strpos($this->kex_algorithm, 'diffie-hellman-group-exchange') === 0) {\n                $dh_group_sizes_packed = pack(\n                    'NNN',\n                    $this->kex_dh_group_size_min,\n                    $this->kex_dh_group_size_preferred,\n                    $this->kex_dh_group_size_max\n                );\n                $packet = pack(\n                    'Ca*',\n                    NET_SSH2_MSG_KEXDH_GEX_REQUEST,\n                    $dh_group_sizes_packed\n                );\n                $this->send_binary_packet($packet);\n                $this->updateLogHistory('UNKNOWN (34)', 'NET_SSH2_MSG_KEXDH_GEX_REQUEST');\n\n                $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_KEXDH_GEX_GROUP);\n                list($type, $primeBytes, $gBytes) = Strings::unpackSSH2('Css', $response);\n                $this->updateLogHistory('NET_SSH2_MSG_KEXDH_REPLY', 'NET_SSH2_MSG_KEXDH_GEX_GROUP');\n                $prime = new BigInteger($primeBytes, -256);\n                $g = new BigInteger($gBytes, -256);\n\n                $exchange_hash_rfc4419 = $dh_group_sizes_packed . Strings::packSSH2(\n                    'ss',\n                    $primeBytes,\n                    $gBytes\n                );\n\n                $params = DH::createParameters($prime, $g);\n                $clientKexInitMessage = 'NET_SSH2_MSG_KEXDH_GEX_INIT';\n                $serverKexReplyMessage = 'NET_SSH2_MSG_KEXDH_GEX_REPLY';\n            } else {\n                $params = DH::createParameters($this->kex_algorithm);\n                $clientKexInitMessage = 'NET_SSH2_MSG_KEXDH_INIT';\n                $serverKexReplyMessage = 'NET_SSH2_MSG_KEXDH_REPLY';\n            }\n\n            $keyLength = min($kexHash->getLengthInBytes(), max($encryptKeyLength, $decryptKeyLength));\n\n            $ourPrivate = DH::createKey($params, 16 * $keyLength); // 2 * 8 * $keyLength\n            $ourPublic = $ourPrivate->getPublicKey()->toBigInteger();\n            $ourPublicBytes = $ourPublic->toBytes(true);\n        }\n\n        $data = pack('CNa*', constant($clientKexInitMessage), strlen($ourPublicBytes), $ourPublicBytes);\n\n        $this->send_binary_packet($data);\n\n        switch ($clientKexInitMessage) {\n            case 'NET_SSH2_MSG_KEX_ECDH_INIT':\n                $this->updateLogHistory('NET_SSH2_MSG_KEXDH_INIT', 'NET_SSH2_MSG_KEX_ECDH_INIT');\n                break;\n            case 'NET_SSH2_MSG_KEXDH_GEX_INIT':\n                $this->updateLogHistory('UNKNOWN (32)', 'NET_SSH2_MSG_KEXDH_GEX_INIT');\n        }\n\n        $response = $this->get_binary_packet_or_close(constant($serverKexReplyMessage));\n\n        list(\n            $type,\n            $server_public_host_key,\n            $theirPublicBytes,\n            $this->signature\n        ) = Strings::unpackSSH2('Csss', $response);\n\n        switch ($serverKexReplyMessage) {\n            case 'NET_SSH2_MSG_KEX_ECDH_REPLY':\n                $this->updateLogHistory('NET_SSH2_MSG_KEXDH_REPLY', 'NET_SSH2_MSG_KEX_ECDH_REPLY');\n                break;\n            case 'NET_SSH2_MSG_KEXDH_GEX_REPLY':\n                $this->updateLogHistory('UNKNOWN (33)', 'NET_SSH2_MSG_KEXDH_GEX_REPLY');\n        }\n\n        $this->server_public_host_key = $server_public_host_key;\n        list($public_key_format) = Strings::unpackSSH2('s', $server_public_host_key);\n        if (strlen($this->signature) < 4) {\n            throw new \\LengthException('The signature needs at least four bytes');\n        }\n        $temp = unpack('Nlength', substr($this->signature, 0, 4));\n        $this->signature_format = substr($this->signature, 4, $temp['length']);\n\n        $keyBytes = DH::computeSecret($ourPrivate, $theirPublicBytes);\n        if (($keyBytes & \"\\xFF\\x80\") === \"\\x00\\x00\") {\n            $keyBytes = substr($keyBytes, 1);\n        } elseif (($keyBytes[0] & \"\\x80\") === \"\\x80\") {\n            $keyBytes = \"\\0$keyBytes\";\n        }\n\n        $this->exchange_hash = Strings::packSSH2(\n            's5',\n            $this->identifier,\n            $this->server_identifier,\n            $kexinit_payload_client,\n            $kexinit_payload_server,\n            $this->server_public_host_key\n        );\n        $this->exchange_hash .= $exchange_hash_rfc4419;\n        $this->exchange_hash .= Strings::packSSH2(\n            's3',\n            $ourPublicBytes,\n            $theirPublicBytes,\n            $keyBytes\n        );\n\n        $this->exchange_hash = $kexHash->hash($this->exchange_hash);\n\n        if ($this->session_id === false) {\n            $this->session_id = $this->exchange_hash;\n        }\n\n        switch ($server_host_key_algorithm) {\n            case 'rsa-sha2-256':\n            case 'rsa-sha2-512':\n            //case 'ssh-rsa':\n                $expected_key_format = 'ssh-rsa';\n                break;\n            default:\n                $expected_key_format = $server_host_key_algorithm;\n        }\n        if ($public_key_format != $expected_key_format || $this->signature_format != $server_host_key_algorithm) {\n            switch (true) {\n                case $this->signature_format == $server_host_key_algorithm:\n                case $server_host_key_algorithm != 'rsa-sha2-256' && $server_host_key_algorithm != 'rsa-sha2-512':\n                case $this->signature_format != 'ssh-rsa':\n                    $this->disconnect_helper(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);\n                    throw new \\RuntimeException('Server Host Key Algorithm Mismatch (' . $this->signature_format . ' vs ' . $server_host_key_algorithm . ')');\n            }\n        }\n\n        $packet = pack('C', NET_SSH2_MSG_NEWKEYS);\n        $this->send_binary_packet($packet);\n        $this->get_binary_packet_or_close(NET_SSH2_MSG_NEWKEYS);\n\n        $this->keyExchangeInProgress = false;\n\n        if ($this->strict_kex_flag) {\n            $this->get_seq_no = $this->send_seq_no = 0;\n        }\n\n        $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);\n\n        $this->encrypt = self::encryption_algorithm_to_crypt_instance($encrypt);\n        if ($this->encrypt) {\n            if (self::$crypto_engine) {\n                $this->encrypt->setPreferredEngine(self::$crypto_engine);\n            }\n            if ($this->encrypt->getBlockLengthInBytes()) {\n                $this->encrypt_block_size = $this->encrypt->getBlockLengthInBytes();\n            }\n            $this->encrypt->disablePadding();\n\n            if ($this->encrypt->usesIV()) {\n                $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id);\n                while ($this->encrypt_block_size > strlen($iv)) {\n                    $iv .= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);\n                }\n                $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size));\n            }\n\n            switch ($encrypt) {\n                case 'aes128-gcm@openssh.com':\n                case 'aes256-gcm@openssh.com':\n                    $nonce = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id);\n                    $this->encryptFixedPart = substr($nonce, 0, 4);\n                    $this->encryptInvocationCounter = substr($nonce, 4, 8);\n                    // fall-through\n                case 'chacha20-poly1305@openssh.com':\n                    break;\n                default:\n                    $this->encrypt->enableContinuousBuffer();\n            }\n\n            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id);\n            while ($encryptKeyLength > strlen($key)) {\n                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);\n            }\n            switch ($encrypt) {\n                case 'chacha20-poly1305@openssh.com':\n                    $encryptKeyLength = 32;\n                    $this->lengthEncrypt = self::encryption_algorithm_to_crypt_instance($encrypt);\n                    $this->lengthEncrypt->setKey(substr($key, 32, 32));\n            }\n            $this->encrypt->setKey(substr($key, 0, $encryptKeyLength));\n            $this->encryptName = $encrypt;\n        }\n\n        $this->decrypt = self::encryption_algorithm_to_crypt_instance($decrypt);\n        if ($this->decrypt) {\n            if (self::$crypto_engine) {\n                $this->decrypt->setPreferredEngine(self::$crypto_engine);\n            }\n            if ($this->decrypt->getBlockLengthInBytes()) {\n                $this->decrypt_block_size = $this->decrypt->getBlockLengthInBytes();\n            }\n            $this->decrypt->disablePadding();\n\n            if ($this->decrypt->usesIV()) {\n                $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id);\n                while ($this->decrypt_block_size > strlen($iv)) {\n                    $iv .= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);\n                }\n                $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size));\n            }\n\n            switch ($decrypt) {\n                case 'aes128-gcm@openssh.com':\n                case 'aes256-gcm@openssh.com':\n                    // see https://tools.ietf.org/html/rfc5647#section-7.1\n                    $nonce = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id);\n                    $this->decryptFixedPart = substr($nonce, 0, 4);\n                    $this->decryptInvocationCounter = substr($nonce, 4, 8);\n                    // fall-through\n                case 'chacha20-poly1305@openssh.com':\n                    break;\n                default:\n                    $this->decrypt->enableContinuousBuffer();\n            }\n\n            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id);\n            while ($decryptKeyLength > strlen($key)) {\n                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);\n            }\n            switch ($decrypt) {\n                case 'chacha20-poly1305@openssh.com':\n                    $decryptKeyLength = 32;\n                    $this->lengthDecrypt = self::encryption_algorithm_to_crypt_instance($decrypt);\n                    $this->lengthDecrypt->setKey(substr($key, 32, 32));\n            }\n            $this->decrypt->setKey(substr($key, 0, $decryptKeyLength));\n            $this->decryptName = $decrypt;\n        }\n\n        /* The \"arcfour128\" algorithm is the RC4 cipher, as described in\n           [SCHNEIER], using a 128-bit key.  The first 1536 bytes of keystream\n           generated by the cipher MUST be discarded, and the first byte of the\n           first encrypted packet MUST be encrypted using the 1537th byte of\n           keystream.\n\n           -- http://tools.ietf.org/html/rfc4345#section-4 */\n        if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') {\n            $this->encrypt->encrypt(str_repeat(\"\\0\", 1536));\n        }\n        if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') {\n            $this->decrypt->decrypt(str_repeat(\"\\0\", 1536));\n        }\n\n        if (!$this->encrypt->usesNonce()) {\n            list($this->hmac_create, $createKeyLength) = self::mac_algorithm_to_hash_instance($mac_algorithm_out);\n        } else {\n            $this->hmac_create = new \\stdClass();\n            $this->hmac_create_name = $mac_algorithm_out;\n            //$mac_algorithm_out = 'none';\n            $createKeyLength = 0;\n        }\n\n        if ($this->hmac_create instanceof Hash) {\n            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id);\n            while ($createKeyLength > strlen($key)) {\n                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);\n            }\n            $this->hmac_create->setKey(substr($key, 0, $createKeyLength));\n            $this->hmac_create_name = $mac_algorithm_out;\n            $this->hmac_create_etm = preg_match('#-etm@openssh\\.com$#', $mac_algorithm_out);\n        }\n\n        if (!$this->decrypt->usesNonce()) {\n            list($this->hmac_check, $checkKeyLength) = self::mac_algorithm_to_hash_instance($mac_algorithm_in);\n            $this->hmac_size = $this->hmac_check->getLengthInBytes();\n        } else {\n            $this->hmac_check = new \\stdClass();\n            $this->hmac_check_name = $mac_algorithm_in;\n            //$mac_algorithm_in = 'none';\n            $checkKeyLength = 0;\n            $this->hmac_size = 0;\n        }\n\n        if ($this->hmac_check instanceof Hash) {\n            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id);\n            while ($checkKeyLength > strlen($key)) {\n                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);\n            }\n            $this->hmac_check->setKey(substr($key, 0, $checkKeyLength));\n            $this->hmac_check_name = $mac_algorithm_in;\n            $this->hmac_check_etm = preg_match('#-etm@openssh\\.com$#', $mac_algorithm_in);\n        }\n\n        $this->regenerate_compression_context = $this->regenerate_decompression_context = true;\n\n        return true;\n    }\n\n    /**\n     * Maps an encryption algorithm name to the number of key bytes.\n     *\n     * @param string $algorithm Name of the encryption algorithm\n     * @return int|null Number of bytes as an integer or null for unknown\n     */\n    private function encryption_algorithm_to_key_size($algorithm)\n    {\n        if ($this->bad_key_size_fix && self::bad_algorithm_candidate($algorithm)) {\n            return 16;\n        }\n\n        switch ($algorithm) {\n            case 'none':\n                return 0;\n            case 'aes128-gcm@openssh.com':\n            case 'aes128-cbc':\n            case 'aes128-ctr':\n            case 'arcfour':\n            case 'arcfour128':\n            case 'blowfish-cbc':\n            case 'blowfish-ctr':\n            case 'twofish128-cbc':\n            case 'twofish128-ctr':\n                return 16;\n            case '3des-cbc':\n            case '3des-ctr':\n            case 'aes192-cbc':\n            case 'aes192-ctr':\n            case 'twofish192-cbc':\n            case 'twofish192-ctr':\n                return 24;\n            case 'aes256-gcm@openssh.com':\n            case 'aes256-cbc':\n            case 'aes256-ctr':\n            case 'arcfour256':\n            case 'twofish-cbc':\n            case 'twofish256-cbc':\n            case 'twofish256-ctr':\n                return 32;\n            case 'chacha20-poly1305@openssh.com':\n                return 64;\n        }\n        return null;\n    }\n\n    /**\n     * Maps an encryption algorithm name to an instance of a subclass of\n     * \\phpseclib3\\Crypt\\Common\\SymmetricKey.\n     *\n     * @param string $algorithm Name of the encryption algorithm\n     * @return SymmetricKey|null\n     */\n    private static function encryption_algorithm_to_crypt_instance($algorithm)\n    {\n        switch ($algorithm) {\n            case '3des-cbc':\n                return new TripleDES('cbc');\n            case '3des-ctr':\n                return new TripleDES('ctr');\n            case 'aes256-cbc':\n            case 'aes192-cbc':\n            case 'aes128-cbc':\n                return new Rijndael('cbc');\n            case 'aes256-ctr':\n            case 'aes192-ctr':\n            case 'aes128-ctr':\n                return new Rijndael('ctr');\n            case 'blowfish-cbc':\n                return new Blowfish('cbc');\n            case 'blowfish-ctr':\n                return new Blowfish('ctr');\n            case 'twofish128-cbc':\n            case 'twofish192-cbc':\n            case 'twofish256-cbc':\n            case 'twofish-cbc':\n                return new Twofish('cbc');\n            case 'twofish128-ctr':\n            case 'twofish192-ctr':\n            case 'twofish256-ctr':\n                return new Twofish('ctr');\n            case 'arcfour':\n            case 'arcfour128':\n            case 'arcfour256':\n                return new RC4();\n            case 'aes128-gcm@openssh.com':\n            case 'aes256-gcm@openssh.com':\n                return new Rijndael('gcm');\n            case 'chacha20-poly1305@openssh.com':\n                return new ChaCha20();\n        }\n        return null;\n    }\n\n    /**\n     * Maps an encryption algorithm name to an instance of a subclass of\n     * \\phpseclib3\\Crypt\\Hash.\n     *\n     * @param string $algorithm Name of the encryption algorithm\n     * @return array{Hash, int}|null\n     */\n    private static function mac_algorithm_to_hash_instance($algorithm)\n    {\n        switch ($algorithm) {\n            case 'umac-64@openssh.com':\n            case 'umac-64-etm@openssh.com':\n                return [new Hash('umac-64'), 16];\n            case 'umac-128@openssh.com':\n            case 'umac-128-etm@openssh.com':\n                return [new Hash('umac-128'), 16];\n            case 'hmac-sha2-512':\n            case 'hmac-sha2-512-etm@openssh.com':\n                return [new Hash('sha512'), 64];\n            case 'hmac-sha2-256':\n            case 'hmac-sha2-256-etm@openssh.com':\n                return [new Hash('sha256'), 32];\n            case 'hmac-sha1':\n            case 'hmac-sha1-etm@openssh.com':\n                return [new Hash('sha1'), 20];\n            case 'hmac-sha1-96':\n                return [new Hash('sha1-96'), 20];\n            case 'hmac-md5':\n                return [new Hash('md5'), 16];\n            case 'hmac-md5-96':\n                return [new Hash('md5-96'), 16];\n        }\n    }\n\n    /**\n     * Tests whether or not proposed algorithm has a potential for issues\n     *\n     * @link https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/ssh2-aesctr-openssh.html\n     * @link https://bugzilla.mindrot.org/show_bug.cgi?id=1291\n     * @param string $algorithm Name of the encryption algorithm\n     * @return bool\n     */\n    private static function bad_algorithm_candidate($algorithm)\n    {\n        switch ($algorithm) {\n            case 'arcfour256':\n            case 'aes192-ctr':\n            case 'aes256-ctr':\n                return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Login\n     *\n     * The $password parameter can be a plaintext password, a \\phpseclib3\\Crypt\\RSA|EC|DSA object, a \\phpseclib3\\System\\SSH\\Agent object or an array\n     *\n     * @param string $username\n     * @param string|PrivateKey|array[]|Agent|null ...$args\n     * @return bool\n     * @see self::_login()\n     */\n    public function login($username, ...$args)\n    {\n        if (!$this->login_credentials_finalized) {\n            $this->auth[] = func_get_args();\n        }\n\n        // try logging with 'none' as an authentication method first since that's what\n        // PuTTY does\n        if (substr($this->server_identifier, 0, 15) != 'SSH-2.0-CoreFTP' && $this->auth_methods_to_continue === null) {\n            if ($this->sublogin($username)) {\n                return true;\n            }\n            if (!count($args)) {\n                return false;\n            }\n        }\n        return $this->sublogin($username, ...$args);\n    }\n\n    /**\n     * Login Helper\n     *\n     * @param string $username\n     * @param string|PrivateKey|array[]|Agent|null ...$args\n     * @return bool\n     * @see self::_login_helper()\n     */\n    protected function sublogin($username, ...$args)\n    {\n        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {\n            $this->connect();\n        }\n\n        if (empty($args)) {\n            return $this->login_helper($username);\n        }\n\n        foreach ($args as $arg) {\n            switch (true) {\n                case $arg instanceof PublicKey:\n                    throw new \\UnexpectedValueException('A PublicKey object was passed to the login method instead of a PrivateKey object');\n                case $arg instanceof PrivateKey:\n                case $arg instanceof Agent:\n                case is_array($arg):\n                case Strings::is_stringable($arg):\n                    break;\n                default:\n                    throw new \\UnexpectedValueException('$password needs to either be an instance of \\phpseclib3\\Crypt\\Common\\PrivateKey, \\System\\SSH\\Agent, an array or a string');\n            }\n        }\n\n        while (count($args)) {\n            if (!$this->auth_methods_to_continue || !$this->smartMFA) {\n                $newargs = $args;\n                $args = [];\n            } else {\n                $newargs = [];\n                foreach ($this->auth_methods_to_continue as $method) {\n                    switch ($method) {\n                        case 'publickey':\n                            foreach ($args as $key => $arg) {\n                                if ($arg instanceof PrivateKey || $arg instanceof Agent) {\n                                    $newargs[] = $arg;\n                                    unset($args[$key]);\n                                    break;\n                                }\n                            }\n                            break;\n                        case 'keyboard-interactive':\n                            $hasArray = $hasString = false;\n                            foreach ($args as $arg) {\n                                if ($hasArray || is_array($arg)) {\n                                    $hasArray = true;\n                                    break;\n                                }\n                                if ($hasString || Strings::is_stringable($arg)) {\n                                    $hasString = true;\n                                    break;\n                                }\n                            }\n                            if ($hasArray && $hasString) {\n                                foreach ($args as $key => $arg) {\n                                    if (is_array($arg)) {\n                                        $newargs[] = $arg;\n                                        break 2;\n                                    }\n                                }\n                            }\n                            // fall-through\n                        case 'password':\n                            foreach ($args as $key => $arg) {\n                                $newargs[] = $arg;\n                                unset($args[$key]);\n                                break;\n                            }\n                    }\n                }\n            }\n\n            if (!count($newargs)) {\n                return false;\n            }\n\n            foreach ($newargs as $arg) {\n                if ($this->login_helper($username, $arg)) {\n                    $this->login_credentials_finalized = true;\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Login Helper\n     *\n     * {@internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}\n     *           by sending dummy SSH_MSG_IGNORE messages.}\n     *\n     * @param string $username\n     * @param string|AsymmetricKey|array[]|Agent|null ...$args\n     * @return bool\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @throws \\RuntimeException on other errors\n     */\n    private function login_helper($username, $password = null)\n    {\n        if (!($this->bitmap & self::MASK_CONNECTED)) {\n            return false;\n        }\n\n        if (!($this->bitmap & self::MASK_LOGIN_REQ)) {\n            $packet = Strings::packSSH2('Cs', NET_SSH2_MSG_SERVICE_REQUEST, 'ssh-userauth');\n            $this->send_binary_packet($packet);\n\n            try {\n                $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_SERVICE_ACCEPT);\n            } catch (InvalidPacketLengthException $e) {\n                // the first opportunity to encounter the \"bad key size\" error\n                if (!$this->bad_key_size_fix && $this->decryptName != null && self::bad_algorithm_candidate($this->decryptName)) {\n                    // bad_key_size_fix is only ever re-assigned to true here\n                    // retry the connection with that new setting but we'll\n                    // only try it once.\n                    $this->bad_key_size_fix = true;\n                    return $this->reconnect();\n                }\n                throw $e;\n            }\n\n            list($type) = Strings::unpackSSH2('C', $response);\n            list($service) = Strings::unpackSSH2('s', $response);\n\n            if ($service != 'ssh-userauth') {\n                $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);\n                throw new \\UnexpectedValueException('Expected SSH_MSG_SERVICE_ACCEPT');\n            }\n            $this->bitmap |= self::MASK_LOGIN_REQ;\n        }\n\n        if (strlen($this->last_interactive_response)) {\n            return !Strings::is_stringable($password) && !is_array($password) ? false : $this->keyboard_interactive_process($password);\n        }\n\n        if ($password instanceof PrivateKey) {\n            return $this->privatekey_login($username, $password);\n        }\n\n        if ($password instanceof Agent) {\n            return $this->ssh_agent_login($username, $password);\n        }\n\n        if (is_array($password)) {\n            if ($this->keyboard_interactive_login($username, $password)) {\n                $this->bitmap |= self::MASK_LOGIN;\n                return true;\n            }\n            return false;\n        }\n\n        if (!isset($password)) {\n            $packet = Strings::packSSH2(\n                'Cs3',\n                NET_SSH2_MSG_USERAUTH_REQUEST,\n                $username,\n                'ssh-connection',\n                'none'\n            );\n\n            $this->send_binary_packet($packet);\n\n            $response = $this->get_binary_packet_or_close();\n\n            list($type) = Strings::unpackSSH2('C', $response);\n            switch ($type) {\n                case NET_SSH2_MSG_USERAUTH_SUCCESS:\n                    $this->bitmap |= self::MASK_LOGIN;\n                    return true;\n                case NET_SSH2_MSG_USERAUTH_FAILURE:\n                    list($auth_methods) = Strings::unpackSSH2('L', $response);\n                    $this->auth_methods_to_continue = $auth_methods;\n                    // fall-through\n                default:\n                    return false;\n            }\n        }\n\n        $packet = Strings::packSSH2(\n            'Cs3bs',\n            NET_SSH2_MSG_USERAUTH_REQUEST,\n            $username,\n            'ssh-connection',\n            'password',\n            false,\n            $password\n        );\n\n        // remove the username and password from the logged packet\n        if (!defined('NET_SSH2_LOGGING')) {\n            $logged = null;\n        } else {\n            $logged = Strings::packSSH2(\n                'Cs3bs',\n                NET_SSH2_MSG_USERAUTH_REQUEST,\n                $username,\n                'ssh-connection',\n                'password',\n                false,\n                'password'\n            );\n        }\n\n        $this->send_binary_packet($packet, $logged);\n\n        $response = $this->get_binary_packet_or_close();\n        list($type) = Strings::unpackSSH2('C', $response);\n        switch ($type) {\n            case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed\n                $this->updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ');\n\n                list($message) = Strings::unpackSSH2('s', $response);\n                $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . $message;\n\n                return $this->disconnect_helper(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);\n            case NET_SSH2_MSG_USERAUTH_FAILURE:\n                // can we use keyboard-interactive authentication?  if not then either the login is bad or the server employees\n                // multi-factor authentication\n                list($auth_methods, $partial_success) = Strings::unpackSSH2('Lb', $response);\n                $this->auth_methods_to_continue = $auth_methods;\n                if (!$partial_success && in_array('keyboard-interactive', $auth_methods)) {\n                    if ($this->keyboard_interactive_login($username, $password)) {\n                        $this->bitmap |= self::MASK_LOGIN;\n                        return true;\n                    }\n                    return false;\n                }\n                return false;\n            case NET_SSH2_MSG_USERAUTH_SUCCESS:\n                $this->bitmap |= self::MASK_LOGIN;\n                return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Login via keyboard-interactive authentication\n     *\n     * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details.  This is not a full-featured keyboard-interactive authenticator.\n     *\n     * @param string $username\n     * @param string|array $password\n     * @return bool\n     */\n    private function keyboard_interactive_login($username, $password)\n    {\n        $packet = Strings::packSSH2(\n            'Cs5',\n            NET_SSH2_MSG_USERAUTH_REQUEST,\n            $username,\n            'ssh-connection',\n            'keyboard-interactive',\n            '', // language tag\n            '' // submethods\n        );\n        $this->send_binary_packet($packet);\n\n        return $this->keyboard_interactive_process($password);\n    }\n\n    /**\n     * Handle the keyboard-interactive requests / responses.\n     *\n     * @param string|array ...$responses\n     * @return bool\n     * @throws \\RuntimeException on connection error\n     */\n    private function keyboard_interactive_process(...$responses)\n    {\n        if (strlen($this->last_interactive_response)) {\n            $response = $this->last_interactive_response;\n        } else {\n            $orig = $response = $this->get_binary_packet_or_close();\n        }\n\n        list($type) = Strings::unpackSSH2('C', $response);\n        switch ($type) {\n            case NET_SSH2_MSG_USERAUTH_INFO_REQUEST:\n                list(\n                    , // name; may be empty\n                    , // instruction; may be empty\n                    , // language tag; may be empty\n                    $num_prompts\n                ) = Strings::unpackSSH2('s3N', $response);\n\n                for ($i = 0; $i < count($responses); $i++) {\n                    if (is_array($responses[$i])) {\n                        foreach ($responses[$i] as $key => $value) {\n                            $this->keyboard_requests_responses[$key] = $value;\n                        }\n                        unset($responses[$i]);\n                    }\n                }\n                $responses = array_values($responses);\n\n                if (isset($this->keyboard_requests_responses)) {\n                    for ($i = 0; $i < $num_prompts; $i++) {\n                        list(\n                            $prompt, // prompt - ie. \"Password: \"; must not be empty\n                            // echo\n                        ) = Strings::unpackSSH2('sC', $response);\n                        foreach ($this->keyboard_requests_responses as $key => $value) {\n                            if (substr($prompt, 0, strlen($key)) == $key) {\n                                $responses[] = $value;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                // see http://tools.ietf.org/html/rfc4256#section-3.2\n                if (strlen($this->last_interactive_response)) {\n                    $this->last_interactive_response = '';\n                } else {\n                    $this->updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST');\n                }\n\n                if (!count($responses) && $num_prompts) {\n                    $this->last_interactive_response = $orig;\n                    return false;\n                }\n\n                /*\n                   After obtaining the requested information from the user, the client\n                   MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message.\n                */\n                // see http://tools.ietf.org/html/rfc4256#section-3.4\n                $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses));\n                for ($i = 0; $i < count($responses); $i++) {\n                    $packet .= Strings::packSSH2('s', $responses[$i]);\n                    $logged .= Strings::packSSH2('s', 'dummy-answer');\n                }\n\n                $this->send_binary_packet($packet, $logged);\n\n                $this->updateLogHistory('UNKNOWN (61)', 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE');\n\n                /*\n                   After receiving the response, the server MUST send either an\n                   SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another\n                   SSH_MSG_USERAUTH_INFO_REQUEST message.\n                */\n                // maybe phpseclib should force close the connection after x request / responses?  unless something like that is done\n                // there could be an infinite loop of request / responses.\n                return $this->keyboard_interactive_process();\n            case NET_SSH2_MSG_USERAUTH_SUCCESS:\n                return true;\n            case NET_SSH2_MSG_USERAUTH_FAILURE:\n                list($auth_methods) = Strings::unpackSSH2('L', $response);\n                $this->auth_methods_to_continue = $auth_methods;\n                return false;\n        }\n\n        return false;\n    }\n\n    /**\n     * Login with an ssh-agent provided key\n     *\n     * @param string $username\n     * @param Agent $agent\n     * @return bool\n     */\n    private function ssh_agent_login($username, Agent $agent)\n    {\n        $this->agent = $agent;\n        $keys = $agent->requestIdentities();\n        $orig_algorithms = $this->supported_private_key_algorithms;\n        foreach ($keys as $key) {\n            if ($this->privatekey_login($username, $key)) {\n                return true;\n            }\n            $this->supported_private_key_algorithms = $orig_algorithms;\n        }\n\n        return false;\n    }\n\n    /**\n     * Login with an RSA private key\n     *\n     * {@internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}\n     *           by sending dummy SSH_MSG_IGNORE messages.}\n     *\n     * @param string $username\n     * @param PrivateKey $privatekey\n     * @return bool\n     * @throws \\RuntimeException on connection error\n     */\n    private function privatekey_login($username, PrivateKey $privatekey)\n    {\n        $publickey = $privatekey->getPublicKey();\n\n        if ($publickey instanceof RSA) {\n            $privatekey = $privatekey->withPadding(RSA::SIGNATURE_PKCS1);\n            $algos = ['rsa-sha2-256', 'rsa-sha2-512', 'ssh-rsa'];\n            if (isset($this->preferred['hostkey'])) {\n                $algos = array_intersect($algos, $this->preferred['hostkey']);\n            }\n            $algo = self::array_intersect_first($algos, $this->supported_private_key_algorithms);\n            switch ($algo) {\n                case 'rsa-sha2-512':\n                    $hash = 'sha512';\n                    $signatureType = 'rsa-sha2-512';\n                    break;\n                case 'rsa-sha2-256':\n                    $hash = 'sha256';\n                    $signatureType = 'rsa-sha2-256';\n                    break;\n                //case 'ssh-rsa':\n                default:\n                    $hash = 'sha1';\n                    $signatureType = 'ssh-rsa';\n            }\n        } elseif ($publickey instanceof EC) {\n            $privatekey = $privatekey->withSignatureFormat('SSH2');\n            $curveName = $privatekey->getCurve();\n            switch ($curveName) {\n                case 'Ed25519':\n                    $hash = 'sha512';\n                    $signatureType = 'ssh-ed25519';\n                    break;\n                case 'secp256r1': // nistp256\n                    $hash = 'sha256';\n                    $signatureType = 'ecdsa-sha2-nistp256';\n                    break;\n                case 'secp384r1': // nistp384\n                    $hash = 'sha384';\n                    $signatureType = 'ecdsa-sha2-nistp384';\n                    break;\n                case 'secp521r1': // nistp521\n                    $hash = 'sha512';\n                    $signatureType = 'ecdsa-sha2-nistp521';\n                    break;\n                default:\n                    if (is_array($curveName)) {\n                        throw new UnsupportedCurveException('Specified Curves are not supported by SSH2');\n                    }\n                    throw new UnsupportedCurveException('Named Curve of ' . $curveName . ' is not supported by phpseclib3\\'s SSH2 implementation');\n            }\n        } elseif ($publickey instanceof DSA) {\n            $privatekey = $privatekey->withSignatureFormat('SSH2');\n            $hash = 'sha1';\n            $signatureType = 'ssh-dss';\n        } else {\n            throw new UnsupportedAlgorithmException('Please use either an RSA key, an EC one or a DSA key');\n        }\n\n        $publickeyStr = $publickey->toString('OpenSSH', ['binary' => true]);\n\n        $part1 = Strings::packSSH2(\n            'Csss',\n            NET_SSH2_MSG_USERAUTH_REQUEST,\n            $username,\n            'ssh-connection',\n            'publickey'\n        );\n        $part2 = Strings::packSSH2('ss', $signatureType, $publickeyStr);\n\n        $packet = $part1 . chr(0) . $part2;\n        $this->send_binary_packet($packet);\n\n        $response = $this->get_binary_packet_or_close(\n            NET_SSH2_MSG_USERAUTH_SUCCESS,\n            NET_SSH2_MSG_USERAUTH_FAILURE,\n            NET_SSH2_MSG_USERAUTH_PK_OK\n        );\n\n        list($type) = Strings::unpackSSH2('C', $response);\n        switch ($type) {\n            case NET_SSH2_MSG_USERAUTH_FAILURE:\n                list($auth_methods) = Strings::unpackSSH2('L', $response);\n                if (in_array('publickey', $auth_methods) && substr($signatureType, 0, 9) == 'rsa-sha2-') {\n                    $this->supported_private_key_algorithms = array_diff($this->supported_private_key_algorithms, ['rsa-sha2-256', 'rsa-sha2-512']);\n                    return $this->privatekey_login($username, $privatekey);\n                }\n                $this->auth_methods_to_continue = $auth_methods;\n                $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE';\n                return false;\n            case NET_SSH2_MSG_USERAUTH_PK_OK:\n                // we'll just take it on faith that the public key blob and the public key algorithm name are as\n                // they should be\n                $this->updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PK_OK');\n                break;\n            case NET_SSH2_MSG_USERAUTH_SUCCESS:\n                $this->bitmap |= self::MASK_LOGIN;\n                return true;\n        }\n\n        $packet = $part1 . chr(1) . $part2;\n        $privatekey = $privatekey->withHash($hash);\n        $signature = $privatekey->sign(Strings::packSSH2('s', $this->session_id) . $packet);\n        if ($publickey instanceof RSA) {\n            $signature = Strings::packSSH2('ss', $signatureType, $signature);\n        }\n        $packet .= Strings::packSSH2('s', $signature);\n\n        $this->send_binary_packet($packet);\n\n        $response = $this->get_binary_packet_or_close(\n            NET_SSH2_MSG_USERAUTH_SUCCESS,\n            NET_SSH2_MSG_USERAUTH_FAILURE\n        );\n\n        list($type) = Strings::unpackSSH2('C', $response);\n        switch ($type) {\n            case NET_SSH2_MSG_USERAUTH_FAILURE:\n                // either the login is bad or the server employs multi-factor authentication\n                list($auth_methods) = Strings::unpackSSH2('L', $response);\n                $this->auth_methods_to_continue = $auth_methods;\n                return false;\n            case NET_SSH2_MSG_USERAUTH_SUCCESS:\n                $this->bitmap |= self::MASK_LOGIN;\n                return true;\n        }\n    }\n\n    /**\n     * Return the currently configured timeout\n     *\n     * @return int\n     */\n    public function getTimeout()\n    {\n        return $this->timeout;\n    }\n\n    /**\n     * Set Timeout\n     *\n     * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely.  setTimeout() makes it so it'll timeout.\n     * Setting $timeout to false or 0 will revert to the default socket timeout.\n     *\n     * @param mixed $timeout\n     */\n    public function setTimeout($timeout)\n    {\n        $this->timeout = $this->curTimeout = $timeout;\n    }\n\n    /**\n     * Set Keep Alive\n     *\n     * Sends an SSH2_MSG_IGNORE message every x seconds, if x is a positive non-zero number.\n     *\n     * @param int $interval\n     */\n    public function setKeepAlive($interval)\n    {\n        $this->keepAlive = $interval;\n    }\n\n    /**\n     * Get the output from stdError\n     *\n     */\n    public function getStdError()\n    {\n        return $this->stdErrorLog;\n    }\n\n    /**\n     * Execute Command\n     *\n     * If $callback is set to false then \\phpseclib3\\Net\\SSH2::get_channel_packet(self::CHANNEL_EXEC) will need to be called manually.\n     * In all likelihood, this is not a feature you want to be taking advantage of.\n     *\n     * @param string $command\n     * @param callable $callback\n     * @return string|bool\n     * @psalm-return ($callback is callable ? bool : string|bool)\n     * @throws \\RuntimeException on connection error\n     */\n    public function exec($command, $callback = null)\n    {\n        $this->curTimeout = $this->timeout;\n        $this->is_timeout = false;\n        $this->stdErrorLog = '';\n\n        if (!$this->isAuthenticated()) {\n            return false;\n        }\n\n        //if ($this->isPTYOpen()) {\n        //    throw new \\RuntimeException('If you want to run multiple exec()\\'s you will need to disable (and re-enable if appropriate) a PTY for each one.');\n        //}\n\n        $this->open_channel(self::CHANNEL_EXEC);\n\n        if ($this->request_pty === true) {\n            $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);\n            $packet = Strings::packSSH2(\n                'CNsCsN4s',\n                NET_SSH2_MSG_CHANNEL_REQUEST,\n                $this->server_channels[self::CHANNEL_EXEC],\n                'pty-req',\n                1,\n                $this->term,\n                $this->windowColumns,\n                $this->windowRows,\n                0,\n                0,\n                $terminal_modes\n            );\n\n            $this->send_binary_packet($packet);\n\n            $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;\n            if (!$this->get_channel_packet(self::CHANNEL_EXEC)) {\n                $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n                throw new \\RuntimeException('Unable to request pseudo-terminal');\n            }\n        }\n\n        // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things\n        // down.  the one place where it might be desirable is if you're doing something like \\phpseclib3\\Net\\SSH2::exec('ping localhost &').\n        // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then\n        // then immediately terminate.  without such a request exec() will loop indefinitely.  the ping process won't end but\n        // neither will your script.\n\n        // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by\n        // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the \"maximum packet size\" refers to the\n        // \"maximum size of an individual data packet\". ie. SSH_MSG_CHANNEL_DATA.  RFC4254#section-5.2 corroborates.\n        $packet = Strings::packSSH2(\n            'CNsCs',\n            NET_SSH2_MSG_CHANNEL_REQUEST,\n            $this->server_channels[self::CHANNEL_EXEC],\n            'exec',\n            1,\n            $command\n        );\n        $this->send_binary_packet($packet);\n\n        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;\n\n        if (!$this->get_channel_packet(self::CHANNEL_EXEC)) {\n            return false;\n        }\n\n        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;\n\n        if ($this->request_pty === true) {\n            $this->channel_id_last_interactive = self::CHANNEL_EXEC;\n            return true;\n        }\n        if ($callback === false) {\n            return true;\n        }\n\n        $output = '';\n        while (true) {\n            $temp = $this->get_channel_packet(self::CHANNEL_EXEC);\n            switch (true) {\n                case $temp === true:\n                    return is_callable($callback) ? true : $output;\n                case $temp === false:\n                    return false;\n                default:\n                    if (is_callable($callback)) {\n                        if ($callback($temp) === true) {\n                            $this->close_channel(self::CHANNEL_EXEC);\n                            return true;\n                        }\n                    } else {\n                        $output .= $temp;\n                    }\n            }\n        }\n    }\n\n    /**\n     * How many channels are currently open?\n     *\n     * @return int\n     */\n    public function getOpenChannelCount()\n    {\n        return $this->channelCount;\n    }\n\n    /**\n     * Opens a channel\n     *\n     * @param string $channel\n     * @param bool $skip_extended\n     * @return bool\n     */\n    protected function open_channel($channel, $skip_extended = false)\n    {\n        if (isset($this->channel_status[$channel])) {\n            throw new \\RuntimeException('Please close the channel (' . $channel . ') before trying to open it again');\n        }\n\n        $this->channelCount++;\n\n        if ($this->channelCount > 1 && $this->errorOnMultipleChannels) {\n            throw new \\RuntimeException(\"Ubuntu's OpenSSH from 5.8 to 6.9 doesn't work with multiple channels\");\n        }\n\n        // RFC4254 defines the (client) window size as \"bytes the other party can send before it must wait for the window to\n        // be adjusted\".  0x7FFFFFFF is, at 2GB, the max size.  technically, it should probably be decremented, but,\n        // honestly, if you're transferring more than 2GB, you probably shouldn't be using phpseclib, anyway.\n        // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info\n        $this->window_size_server_to_client[$channel] = $this->window_size;\n        // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy\n        // uses 0x4000, that's what will be used here, as well.\n        $packet_size = 0x4000;\n\n        $packet = Strings::packSSH2(\n            'CsN3',\n            NET_SSH2_MSG_CHANNEL_OPEN,\n            'session',\n            $channel,\n            $this->window_size_server_to_client[$channel],\n            $packet_size\n        );\n\n        $this->send_binary_packet($packet);\n\n        $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_OPEN;\n\n        return $this->get_channel_packet($channel, $skip_extended);\n    }\n\n    /**\n     * Creates an interactive shell\n     *\n     * Returns bool(true) if the shell was opened.\n     * Returns bool(false) if the shell was already open.\n     *\n     * @see self::isShellOpen()\n     * @see self::read()\n     * @see self::write()\n     * @return bool\n     * @throws InsufficientSetupException if not authenticated\n     * @throws \\UnexpectedValueException on receipt of unexpected packets\n     * @throws \\RuntimeException on other errors\n     */\n    public function openShell()\n    {\n        if (!$this->isAuthenticated()) {\n            throw new InsufficientSetupException('Operation disallowed prior to login()');\n        }\n\n        $this->open_channel(self::CHANNEL_SHELL);\n\n        $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);\n        $packet = Strings::packSSH2(\n            'CNsbsN4s',\n            NET_SSH2_MSG_CHANNEL_REQUEST,\n            $this->server_channels[self::CHANNEL_SHELL],\n            'pty-req',\n            true, // want reply\n            $this->term,\n            $this->windowColumns,\n            $this->windowRows,\n            0,\n            0,\n            $terminal_modes\n        );\n\n        $this->send_binary_packet($packet);\n\n        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST;\n\n        if (!$this->get_channel_packet(self::CHANNEL_SHELL)) {\n            throw new \\RuntimeException('Unable to request pty');\n        }\n\n        $packet = Strings::packSSH2(\n            'CNsb',\n            NET_SSH2_MSG_CHANNEL_REQUEST,\n            $this->server_channels[self::CHANNEL_SHELL],\n            'shell',\n            true // want reply\n        );\n        $this->send_binary_packet($packet);\n\n        $response = $this->get_channel_packet(self::CHANNEL_SHELL);\n        if ($response === false) {\n            throw new \\RuntimeException('Unable to request shell');\n        }\n\n        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA;\n\n        $this->channel_id_last_interactive = self::CHANNEL_SHELL;\n\n        $this->bitmap |= self::MASK_SHELL;\n\n        return true;\n    }\n\n    /**\n     * Return the channel to be used with read(), write(), and reset(), if none were specified\n     * @deprecated for lack of transparency in intended channel target, to be potentially replaced\n     *             with method which guarantees open-ness of all yielded channels and throws\n     *             error for multiple open channels\n     * @see self::read()\n     * @see self::write()\n     * @return int\n     */\n    private function get_interactive_channel()\n    {\n        switch (true) {\n            case $this->is_channel_status_data(self::CHANNEL_SUBSYSTEM):\n                return self::CHANNEL_SUBSYSTEM;\n            case $this->is_channel_status_data(self::CHANNEL_EXEC):\n                return self::CHANNEL_EXEC;\n            default:\n                return self::CHANNEL_SHELL;\n        }\n    }\n\n    /**\n     * Indicates the DATA status on the given channel\n     *\n     * @param int $channel The channel number to evaluate\n     * @return bool\n     */\n    private function is_channel_status_data($channel)\n    {\n        return isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA;\n    }\n\n    /**\n     * Return an available open channel\n     *\n     * @return int\n     */\n    private function get_open_channel()\n    {\n        $channel = self::CHANNEL_EXEC;\n        do {\n            if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_OPEN) {\n                return $channel;\n            }\n        } while ($channel++ < self::CHANNEL_SUBSYSTEM);\n\n        return false;\n    }\n\n    /**\n     * Request agent forwarding of remote server\n     *\n     * @return bool\n     */\n    public function requestAgentForwarding()\n    {\n        $request_channel = $this->get_open_channel();\n        if ($request_channel === false) {\n            return false;\n        }\n\n        $packet = Strings::packSSH2(\n            'CNsC',\n            NET_SSH2_MSG_CHANNEL_REQUEST,\n            $this->server_channels[$request_channel],\n            'auth-agent-req@openssh.com',\n            1\n        );\n\n        $this->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_REQUEST;\n\n        $this->send_binary_packet($packet);\n\n        if (!$this->get_channel_packet($request_channel)) {\n            return false;\n        }\n\n        $this->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_OPEN;\n\n        return true;\n    }\n\n    /**\n     * Returns the output of an interactive shell\n     *\n     * Returns when there's a match for $expect, which can take the form of a string literal or,\n     * if $mode == self::READ_REGEX, a regular expression.\n     *\n     * If not specifying a channel, an open interactive channel will be selected, or, if there are\n     * no open channels, an interactive shell will be created. If there are multiple open\n     * interactive channels, a legacy behavior will apply in which channel selection prioritizes\n     * an active subsystem, the exec pty, and, lastly, the shell. If using multiple interactive\n     * channels, callers are discouraged from relying on this legacy behavior and should specify\n     * the intended channel.\n     *\n     * @see self::write()\n     * @param string $expect\n     * @param int $mode One of the self::READ_* constants\n     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()\n     * @return string|bool|null\n     * @throws \\RuntimeException on connection error\n     * @throws InsufficientSetupException on unexpected channel status, possibly due to closure\n     */\n    public function read($expect = '', $mode = self::READ_SIMPLE, $channel = null)\n    {\n        if (!$this->isAuthenticated()) {\n            throw new InsufficientSetupException('Operation disallowed prior to login()');\n        }\n\n        $this->curTimeout = $this->timeout;\n        $this->is_timeout = false;\n\n        if ($channel === null) {\n            $channel = $this->get_interactive_channel();\n        }\n\n        if (!$this->is_channel_status_data($channel) && empty($this->channel_buffers[$channel])) {\n            if ($channel != self::CHANNEL_SHELL) {\n                throw new InsufficientSetupException('Data is not available on channel');\n            } elseif (!$this->openShell()) {\n                throw new \\RuntimeException('Unable to initiate an interactive shell session');\n            }\n        }\n\n        if ($mode == self::READ_NEXT) {\n            return $this->get_channel_packet($channel);\n        }\n\n        $match = $expect;\n        while (true) {\n            if ($mode == self::READ_REGEX) {\n                preg_match($expect, substr($this->interactiveBuffer, -1024), $matches);\n                $match = isset($matches[0]) ? $matches[0] : '';\n            }\n            $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;\n            if ($pos !== false) {\n                return Strings::shift($this->interactiveBuffer, $pos + strlen($match));\n            }\n            $response = $this->get_channel_packet($channel);\n            if ($response === true) {\n                return Strings::shift($this->interactiveBuffer, strlen($this->interactiveBuffer));\n            }\n\n            $this->interactiveBuffer .= $response;\n        }\n    }\n\n    /**\n     * Inputs a command into an interactive shell.\n     *\n     * If not specifying a channel, an open interactive channel will be selected, or, if there are\n     * no open channels, an interactive shell will be created. If there are multiple open\n     * interactive channels, a legacy behavior will apply in which channel selection prioritizes\n     * an active subsystem, the exec pty, and, lastly, the shell. If using multiple interactive\n     * channels, callers are discouraged from relying on this legacy behavior and should specify\n     * the intended channel.\n     *\n     * @see SSH2::read()\n     * @param string $cmd\n     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()\n     * @return void\n     * @throws \\RuntimeException on connection error\n     * @throws InsufficientSetupException on unexpected channel status, possibly due to closure\n     * @throws TimeoutException if the write could not be completed within the requested self::setTimeout()\n     */\n    public function write($cmd, $channel = null)\n    {\n        if (!$this->isAuthenticated()) {\n            throw new InsufficientSetupException('Operation disallowed prior to login()');\n        }\n\n        if ($channel === null) {\n            $channel = $this->get_interactive_channel();\n        }\n\n        if (!$this->is_channel_status_data($channel)) {\n            if ($channel != self::CHANNEL_SHELL) {\n                throw new InsufficientSetupException('Data is not available on channel');\n            } elseif (!$this->openShell()) {\n                throw new \\RuntimeException('Unable to initiate an interactive shell session');\n            }\n        }\n\n        $this->curTimeout = $this->timeout;\n        $this->is_timeout = false;\n        $this->send_channel_packet($channel, $cmd);\n    }\n\n    /**\n     * Start a subsystem.\n     *\n     * Right now only one subsystem at a time is supported. To support multiple subsystem's stopSubsystem() could accept\n     * a string that contained the name of the subsystem, but at that point, only one subsystem of each type could be opened.\n     * To support multiple subsystem's of the same name maybe it'd be best if startSubsystem() generated a new channel id and\n     * returns that and then that that was passed into stopSubsystem() but that'll be saved for a future date and implemented\n     * if there's sufficient demand for such a feature.\n     *\n     * @see self::stopSubsystem()\n     * @param string $subsystem\n     * @return bool\n     */\n    public function startSubsystem($subsystem)\n    {\n        $this->open_channel(self::CHANNEL_SUBSYSTEM);\n\n        $packet = Strings::packSSH2(\n            'CNsCs',\n            NET_SSH2_MSG_CHANNEL_REQUEST,\n            $this->server_channels[self::CHANNEL_SUBSYSTEM],\n            'subsystem',\n            1,\n            $subsystem\n        );\n        $this->send_binary_packet($packet);\n\n        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_REQUEST;\n\n        if (!$this->get_channel_packet(self::CHANNEL_SUBSYSTEM)) {\n            return false;\n        }\n\n        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_DATA;\n\n        $this->channel_id_last_interactive = self::CHANNEL_SUBSYSTEM;\n\n        return true;\n    }\n\n    /**\n     * Stops a subsystem.\n     *\n     * @see self::startSubsystem()\n     * @return bool\n     */\n    public function stopSubsystem()\n    {\n        if ($this->isInteractiveChannelOpen(self::CHANNEL_SUBSYSTEM)) {\n            $this->close_channel(self::CHANNEL_SUBSYSTEM);\n        }\n        return true;\n    }\n\n    /**\n     * Closes a channel\n     *\n     * If read() timed out you might want to just close the channel and have it auto-restart on the next read() call\n     *\n     * If not specifying a channel, an open interactive channel will be selected. If there are\n     * multiple open interactive channels, a legacy behavior will apply in which channel selection\n     * prioritizes an active subsystem, the exec pty, and, lastly, the shell. If using multiple\n     * interactive channels, callers are discouraged from relying on this legacy behavior and\n     * should specify the intended channel.\n     *\n     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()\n     * @return void\n     */\n    public function reset($channel = null)\n    {\n        if ($channel === null) {\n            $channel = $this->get_interactive_channel();\n        }\n        if ($this->isInteractiveChannelOpen($channel)) {\n            $this->close_channel($channel);\n        }\n    }\n\n    /**\n     * Send EOF on a channel\n     *\n     * Sends an EOF to the stream; this is typically used to close standard\n     * input, while keeping output and error alive.\n     *\n     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()\n     * @return void\n     */\n    public function sendEOF($channel = null)\n    {\n        if ($channel === null) {\n            $channel = $this->get_interactive_channel();\n        }\n\n        $excludeStatuses = [NET_SSH2_MSG_CHANNEL_EOF, NET_SSH2_MSG_CHANNEL_CLOSE];\n        if (isset($this->channel_status[$channel]) && !in_array($this->channel_status[$channel], $excludeStatuses)) {\n            $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$channel]));\n        }\n    }\n\n    /**\n     * Is timeout?\n     *\n     * Did exec() or read() return because they timed out or because they encountered the end?\n     *\n     */\n    public function isTimeout()\n    {\n        return $this->is_timeout;\n    }\n\n    /**\n     * Disconnect\n     *\n     */\n    public function disconnect()\n    {\n        $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n        if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) {\n            fclose($this->realtime_log_file);\n        }\n        unset(self::$connections[$this->getResourceId()]);\n    }\n\n    /**\n     * Destructor.\n     *\n     * Will be called, automatically, if you're supporting just PHP5.  If you're supporting PHP4, you'll need to call\n     * disconnect().\n     *\n     */\n    public function __destruct()\n    {\n        $this->disconnect();\n    }\n\n    /**\n     * Is the connection still active?\n     *\n     * $level has 3x possible values:\n     * 0 (default): phpseclib takes a passive approach to see if the connection is still active by calling feof()\n     *    on the socket\n     * 1: phpseclib takes an active approach to see if the connection is still active by sending an SSH_MSG_IGNORE\n     *    packet that doesn't require a response\n     * 2: phpseclib takes an active approach to see if the connection is still active by sending an SSH_MSG_CHANNEL_OPEN\n     *    packet and imediately trying to close that channel. some routers, in particular, however, will only let you\n     *    open one channel, so this approach could yield false positives\n     *\n     * @param int $level\n     * @return bool\n     */\n    public function isConnected($level = 0)\n    {\n        if (!is_int($level) || $level < 0 || $level > 2) {\n            throw new \\InvalidArgumentException('$level must be 0, 1 or 2');\n        }\n\n        if ($level == 0) {\n            return ($this->bitmap & self::MASK_CONNECTED) && is_resource($this->fsock) && !feof($this->fsock);\n        }\n        try {\n            if ($level == 1) {\n                $this->send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0));\n            } else {\n                $this->open_channel(self::CHANNEL_KEEP_ALIVE);\n                $this->close_channel(self::CHANNEL_KEEP_ALIVE);\n            }\n            return true;\n        } catch (\\Exception $e) {\n            return false;\n        }\n    }\n\n    /**\n     * Have you successfully been logged in?\n     *\n     * @return bool\n     */\n    public function isAuthenticated()\n    {\n        return (bool) ($this->bitmap & self::MASK_LOGIN);\n    }\n\n    /**\n     * Is the interactive shell active?\n     *\n     * @return bool\n     */\n    public function isShellOpen()\n    {\n        return $this->isInteractiveChannelOpen(self::CHANNEL_SHELL);\n    }\n\n    /**\n     * Is the exec pty active?\n     *\n     * @return bool\n     */\n    public function isPTYOpen()\n    {\n        return $this->isInteractiveChannelOpen(self::CHANNEL_EXEC);\n    }\n\n    /**\n     * Is the given interactive channel active?\n     *\n     * @param int $channel Channel id returned by self::getInteractiveChannelId()\n     * @return bool\n     */\n    public function isInteractiveChannelOpen($channel)\n    {\n        return $this->isAuthenticated() && $this->is_channel_status_data($channel);\n    }\n\n    /**\n     * Returns a channel identifier, presently of the last interactive channel opened, regardless of current status.\n     * Returns 0 if no interactive channel has been opened.\n     *\n     * @see self::isInteractiveChannelOpen()\n     * @return int\n     */\n    public function getInteractiveChannelId()\n    {\n        return $this->channel_id_last_interactive;\n    }\n\n    /**\n     * Pings a server connection, or tries to reconnect if the connection has gone down\n     *\n     * Inspired by http://php.net/manual/en/mysqli.ping.php\n     *\n     * @return bool\n     */\n    public function ping()\n    {\n        if (!$this->isAuthenticated()) {\n            if (!empty($this->auth)) {\n                return $this->reconnect();\n            }\n            return false;\n        }\n\n        try {\n            $this->open_channel(self::CHANNEL_KEEP_ALIVE);\n        } catch (\\RuntimeException $e) {\n            return $this->reconnect();\n        }\n\n        $this->close_channel(self::CHANNEL_KEEP_ALIVE);\n        return true;\n    }\n\n    /**\n     * In situ reconnect method\n     *\n     * @return boolean\n     */\n    private function reconnect()\n    {\n        $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n        $this->connect();\n        foreach ($this->auth as $auth) {\n            $result = $this->login(...$auth);\n        }\n        return $result;\n    }\n\n    /**\n     * Resets a connection for re-use\n     */\n    protected function reset_connection()\n    {\n        if (is_resource($this->fsock) && get_resource_type($this->fsock) === 'stream') {\n            fclose($this->fsock);\n        }\n        $this->fsock = null;\n        $this->bitmap = 0;\n        $this->binary_packet_buffer = null;\n        $this->decrypt = $this->encrypt = false;\n        $this->decrypt_block_size = $this->encrypt_block_size = 8;\n        $this->hmac_check = $this->hmac_create = false;\n        $this->hmac_size = false;\n        $this->session_id = false;\n        $this->last_packet = null;\n        $this->get_seq_no = $this->send_seq_no = 0;\n        $this->channel_status = [];\n        $this->channel_id_last_interactive = 0;\n        $this->channel_buffers = [];\n        $this->channel_buffers_write = [];\n    }\n\n    /**\n     * @return int[] second and microsecond stream timeout options based on user-requested timeout and keep-alive, or the default socket timeout by default, which mirrors PHP socket streams.\n     */\n    private function get_stream_timeout()\n    {\n        $sec = ini_get('default_socket_timeout');\n        $usec = 0;\n        if ($this->curTimeout > 0) {\n            $sec = (int) floor($this->curTimeout);\n            $usec = (int) (1000000 * ($this->curTimeout - $sec));\n        }\n        if ($this->keepAlive > 0) {\n            $elapsed = microtime(true) - $this->last_packet;\n            $timeout = max($this->keepAlive - $elapsed, 0);\n            if (!$this->curTimeout || $timeout < $this->curTimeout) {\n                $sec = (int) floor($timeout);\n                $usec = (int) (1000000 * ($timeout - $sec));\n            }\n        }\n        return [$sec, $usec];\n    }\n\n    /**\n     * Retrieves the next packet with added timeout and type handling\n     *\n     * @param string $message_types Message types to enforce in response, closing if not met\n     * @return string\n     * @throws ConnectionClosedException If an error has occurred preventing read of the next packet\n     */\n    private function get_binary_packet_or_close(...$message_types)\n    {\n        try {\n            $packet = $this->get_binary_packet();\n            if (count($message_types) > 0 && !in_array(ord($packet[0]), $message_types)) {\n                $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);\n                throw new ConnectionClosedException('Bad message type. Expected: #'\n                    . implode(', #', $message_types) . '. Got: #' . ord($packet[0]));\n            }\n            return $packet;\n        } catch (TimeoutException $e) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n            throw new ConnectionClosedException('Connection closed due to timeout');\n        }\n    }\n\n    /**\n     * Gets Binary Packets\n     *\n     * See '6. Binary Packet Protocol' of rfc4253 for more info.\n     *\n     * @see self::_send_binary_packet()\n     * @return string\n     * @throws TimeoutException If user requested timeout was reached while waiting for next packet\n     * @throws ConnectionClosedException If an error has occurred preventing read of the next packet\n     */\n    private function get_binary_packet()\n    {\n        if (!is_resource($this->fsock)) {\n            throw new \\InvalidArgumentException('fsock is not a resource.');\n        }\n        if (!$this->keyExchangeInProgress && count($this->kex_buffer)) {\n            return $this->filter(array_shift($this->kex_buffer));\n        }\n        if ($this->binary_packet_buffer == null) {\n            // buffer the packet to permit continued reads across timeouts\n            $this->binary_packet_buffer = (object) [\n                'read_time' => 0, // the time to read the packet from the socket\n                'raw' => '', // the raw payload read from the socket\n                'plain' => '', // the packet in plain text, excluding packet_length header\n                'packet_length' => null, // the packet_length value pulled from the payload\n                'size' => $this->decrypt_block_size, // the total size of this packet to be read from the socket\n                                                     // initialize to read single block until packet_length is available\n            ];\n        }\n        $packet = $this->binary_packet_buffer;\n        while (strlen($packet->raw) < $packet->size) {\n            if (feof($this->fsock)) {\n                $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);\n                throw new ConnectionClosedException('Connection closed by server');\n            }\n            if ($this->curTimeout < 0) {\n                $this->is_timeout = true;\n                throw new TimeoutException('Timed out waiting for server');\n            }\n            $this->send_keep_alive();\n\n            list($sec, $usec) = $this->get_stream_timeout();\n            stream_set_timeout($this->fsock, $sec, $usec);\n            $start = microtime(true);\n            $raw = stream_get_contents($this->fsock, $packet->size - strlen($packet->raw));\n            $elapsed = microtime(true) - $start;\n            $packet->read_time += $elapsed;\n            if ($this->curTimeout > 0) {\n                $this->curTimeout -= $elapsed;\n            }\n            if ($raw === false) {\n                $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);\n                throw new ConnectionClosedException('Connection closed by server');\n            } elseif (!strlen($raw)) {\n                continue;\n            }\n            $packet->raw .= $raw;\n            if (!$packet->packet_length) {\n                $this->get_binary_packet_size($packet);\n            }\n        }\n\n        if (strlen($packet->raw) != $packet->size) {\n            throw new \\RuntimeException('Size of packet was not expected length');\n        }\n        // destroy buffer as packet represents the entire payload and should be processed in full\n        $this->binary_packet_buffer = null;\n        // copy the raw payload, so as not to destroy original\n        $raw = $packet->raw;\n        if ($this->hmac_check instanceof Hash) {\n            $hmac = Strings::pop($raw, $this->hmac_size);\n        }\n        $packet_length_header_size = 4;\n        if ($this->decrypt) {\n            switch ($this->decryptName) {\n                case 'aes128-gcm@openssh.com':\n                case 'aes256-gcm@openssh.com':\n                    $this->decrypt->setNonce(\n                        $this->decryptFixedPart .\n                        $this->decryptInvocationCounter\n                    );\n                    Strings::increment_str($this->decryptInvocationCounter);\n                    $this->decrypt->setAAD(Strings::shift($raw, $packet_length_header_size));\n                    $this->decrypt->setTag(Strings::pop($raw, $this->decrypt_block_size));\n                    $packet->plain = $this->decrypt->decrypt($raw);\n                    break;\n                case 'chacha20-poly1305@openssh.com':\n                    // This should be impossible, but we are checking anyway to narrow the type for Psalm.\n                    if (!($this->decrypt instanceof ChaCha20)) {\n                        throw new \\LogicException('$this->decrypt is not a ' . ChaCha20::class);\n                    }\n                    $this->decrypt->setNonce(pack('N2', 0, $this->get_seq_no));\n                    $this->decrypt->setCounter(0);\n                    // this is the same approach that's implemented in Salsa20::createPoly1305Key()\n                    // but we don't want to use the same AEAD construction that RFC8439 describes\n                    // for ChaCha20-Poly1305 so we won't rely on it (see Salsa20::poly1305())\n                    $this->decrypt->setPoly1305Key(\n                        $this->decrypt->encrypt(str_repeat(\"\\0\", 32))\n                    );\n                    $this->decrypt->setAAD(Strings::shift($raw, $packet_length_header_size));\n                    $this->decrypt->setCounter(1);\n                    $this->decrypt->setTag(Strings::pop($raw, 16));\n                    $packet->plain = $this->decrypt->decrypt($raw);\n                    break;\n                default:\n                    if (!$this->hmac_check instanceof Hash || !$this->hmac_check_etm) {\n                        // first block was already decrypted for contained packet_length header\n                        Strings::shift($raw, $this->decrypt_block_size);\n                        if (strlen($raw) > 0) {\n                            $packet->plain .= $this->decrypt->decrypt($raw);\n                        }\n                    } else {\n                        Strings::shift($raw, $packet_length_header_size);\n                        $packet->plain = $this->decrypt->decrypt($raw);\n                    }\n                    break;\n            }\n        } else {\n            Strings::shift($raw, $packet_length_header_size);\n            $packet->plain = $raw;\n        }\n        if ($this->hmac_check instanceof Hash) {\n            $reconstructed = !$this->hmac_check_etm ?\n                pack('Na*', $packet->packet_length, $packet->plain) :\n                substr($packet->raw, 0, -$this->hmac_size);\n            if (($this->hmac_check->getHash() & \"\\xFF\\xFF\\xFF\\xFF\") == 'umac') {\n                $this->hmac_check->setNonce(\"\\0\\0\\0\\0\" . pack('N', $this->get_seq_no));\n                if ($hmac != $this->hmac_check->hash($reconstructed)) {\n                    $this->disconnect_helper(NET_SSH2_DISCONNECT_MAC_ERROR);\n                    throw new ConnectionClosedException('Invalid UMAC');\n                }\n            } else {\n                if ($hmac != $this->hmac_check->hash(pack('Na*', $this->get_seq_no, $reconstructed))) {\n                    $this->disconnect_helper(NET_SSH2_DISCONNECT_MAC_ERROR);\n                    throw new ConnectionClosedException('Invalid HMAC');\n                }\n            }\n        }\n        $padding_length = 0;\n        $payload = $packet->plain;\n        $padding_length = unpack('Cpadding_length', Strings::shift($payload, 1))['padding_length'];\n        if ($padding_length > 0) {\n            Strings::pop($payload, $padding_length);\n        }\n\n        if (!$this->keyExchangeInProgress) {\n            $this->bytesTransferredSinceLastKEX += $packet->packet_length + $padding_length + 5;\n        }\n\n        if (empty($payload)) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);\n            throw new ConnectionClosedException('Plaintext is too short');\n        }\n\n        switch ($this->decompress) {\n            case self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH:\n                if (!$this->isAuthenticated()) {\n                    break;\n                }\n                // fall-through\n            case self::NET_SSH2_COMPRESSION_ZLIB:\n                if ($this->regenerate_decompression_context) {\n                    $this->regenerate_decompression_context = false;\n\n                    $cmf = ord($payload[0]);\n                    $cm = $cmf & 0x0F;\n                    if ($cm != 8) { // deflate\n                        throw new UnsupportedAlgorithmException(\"Only CM = 8 ('deflate') is supported ($cm)\");\n                    }\n                    $cinfo = ($cmf & 0xF0) >> 4;\n                    if ($cinfo > 7) {\n                        throw new \\RuntimeException(\"CINFO above 7 is not allowed ($cinfo)\");\n                    }\n                    $windowSize = 1 << ($cinfo + 8);\n\n                    $flg = ord($payload[1]);\n                    //$fcheck = $flg && 0x0F;\n                    if ((($cmf << 8) | $flg) % 31) {\n                        throw new \\RuntimeException('fcheck failed');\n                    }\n                    $fdict = boolval($flg & 0x20);\n                    $flevel = ($flg & 0xC0) >> 6;\n\n                    $this->decompress_context = inflate_init(ZLIB_ENCODING_RAW, ['window' => $cinfo + 8]);\n                    $payload = substr($payload, 2);\n                }\n                if ($this->decompress_context) {\n                    $payload = inflate_add($this->decompress_context, $payload, ZLIB_PARTIAL_FLUSH);\n                }\n        }\n\n        $this->get_seq_no++;\n\n        if (defined('NET_SSH2_LOGGING')) {\n            $current = microtime(true);\n            $message_number = isset(self::$message_numbers[ord($payload[0])]) ? self::$message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';\n            $message_number = '<- ' . $message_number .\n                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($packet->read_time, 4) . 's)';\n            $this->append_log($message_number, $payload);\n        }\n        $this->last_packet = microtime(true);\n\n        if ($this->bytesTransferredSinceLastKEX > $this->doKeyReexchangeAfterXBytes) {\n            $this->key_exchange();\n        }\n\n        return $this->filter($payload);\n    }\n\n    /**\n     * @param object $packet The packet object being constructed, passed by reference\n     *        The size, packet_length, and plain properties of this object may be modified in processing\n     * @throws InvalidPacketLengthException if the packet length header is invalid\n     */\n    private function get_binary_packet_size(&$packet)\n    {\n        $packet_length_header_size = 4;\n        if (strlen($packet->raw) < $packet_length_header_size) {\n            return;\n        }\n        $packet_length = 0;\n        $added_validation_length = 0; // indicates when the packet length header is included when validating packet length against block size\n        if ($this->decrypt) {\n            switch ($this->decryptName) {\n                case 'aes128-gcm@openssh.com':\n                case 'aes256-gcm@openssh.com':\n                    $packet_length = unpack('Npacket_length', substr($packet->raw, 0, $packet_length_header_size))['packet_length'];\n                    $packet->size = $packet_length_header_size + $packet_length + $this->decrypt_block_size; // expect tag\n                    break;\n                case 'chacha20-poly1305@openssh.com':\n                    $this->lengthDecrypt->setNonce(pack('N2', 0, $this->get_seq_no));\n                    $packet_length_header = $this->lengthDecrypt->decrypt(substr($packet->raw, 0, $packet_length_header_size));\n                    $packet_length = unpack('Npacket_length', $packet_length_header)['packet_length'];\n                    $packet->size = $packet_length_header_size + $packet_length + 16; // expect tag\n                    break;\n                default:\n                    if (!$this->hmac_check instanceof Hash || !$this->hmac_check_etm) {\n                        if (strlen($packet->raw) < $this->decrypt_block_size) {\n                            return;\n                        }\n                        $packet->plain = $this->decrypt->decrypt(substr($packet->raw, 0, $this->decrypt_block_size));\n                        $packet_length = unpack('Npacket_length', Strings::shift($packet->plain, $packet_length_header_size))['packet_length'];\n                        $packet->size = $packet_length_header_size + $packet_length;\n                        $added_validation_length = $packet_length_header_size;\n                    } else {\n                        $packet_length = unpack('Npacket_length', substr($packet->raw, 0, $packet_length_header_size))['packet_length'];\n                        $packet->size = $packet_length_header_size + $packet_length;\n                    }\n                    break;\n            }\n        } else {\n            $packet_length = unpack('Npacket_length', substr($packet->raw, 0, $packet_length_header_size))['packet_length'];\n            $packet->size = $packet_length_header_size + $packet_length;\n            $added_validation_length = $packet_length_header_size;\n        }\n        // quoting <http://tools.ietf.org/html/rfc4253#section-6.1>,\n        // \"implementations SHOULD check that the packet length is reasonable\"\n        // PuTTY uses 0x9000 as the actual max packet size and so to shall we\n        if (\n            $packet_length <= 0 || $packet_length > 0x9000\n            || ($packet_length + $added_validation_length) % $this->decrypt_block_size != 0\n        ) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);\n            throw new InvalidPacketLengthException('Invalid packet length');\n        }\n        if ($this->hmac_check instanceof Hash) {\n            $packet->size += $this->hmac_size;\n        }\n        $packet->packet_length = $packet_length;\n    }\n\n    /**\n     * Handle Disconnect\n     *\n     * Because some binary packets need to be ignored...\n     *\n     * @see self::filter()\n     * @see self::key_exchange()\n     * @return boolean\n     * @access private\n     */\n    private function handleDisconnect($payload)\n    {\n        Strings::shift($payload, 1);\n        list($reason_code, $message) = Strings::unpackSSH2('Ns', $payload);\n        $this->errors[] = 'SSH_MSG_DISCONNECT: ' . self::$disconnect_reasons[$reason_code] . \"\\r\\n$message\";\n        $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);\n        throw new ConnectionClosedException('Connection closed by server');\n    }\n\n    /**\n     * Filter Binary Packets\n     *\n     * Because some binary packets need to be ignored...\n     *\n     * @see self::_get_binary_packet()\n     * @param string $payload\n     * @return string\n     */\n    private function filter($payload)\n    {\n        if (ord($payload[0]) == NET_SSH2_MSG_DISCONNECT) {\n            return $this->handleDisconnect($payload);\n        }\n\n        if ($this->session_id === false && $this->keyExchangeInProgress) {\n            return $payload;\n        }\n\n        switch (ord($payload[0])) {\n            case NET_SSH2_MSG_IGNORE:\n                $payload = $this->get_binary_packet();\n                break;\n            case NET_SSH2_MSG_DEBUG:\n                Strings::shift($payload, 2); // second byte is \"always_display\"\n                list($message) = Strings::unpackSSH2('s', $payload);\n                $this->errors[] = \"SSH_MSG_DEBUG: $message\";\n                $payload = $this->get_binary_packet();\n                break;\n            case NET_SSH2_MSG_UNIMPLEMENTED:\n                break; // return payload\n            case NET_SSH2_MSG_KEXINIT:\n                // this is here for server initiated key re-exchanges after the initial key exchange\n                if (!$this->keyExchangeInProgress && $this->session_id !== false) {\n                    if (!$this->key_exchange($payload)) {\n                        $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);\n                        throw new ConnectionClosedException('Key exchange failed');\n                    }\n                    $payload = $this->get_binary_packet();\n                }\n                break;\n            case NET_SSH2_MSG_EXT_INFO:\n                Strings::shift($payload, 1);\n                list($nr_extensions) = Strings::unpackSSH2('N', $payload);\n                for ($i = 0; $i < $nr_extensions; $i++) {\n                    list($extension_name, $extension_value) = Strings::unpackSSH2('ss', $payload);\n                    if ($extension_name == 'server-sig-algs') {\n                        $this->supported_private_key_algorithms = explode(',', $extension_value);\n                    }\n                }\n                $payload = $this->get_binary_packet();\n        }\n\n        /*\n           Once a party has sent a SSH_MSG_KEXINIT message for key exchange or\n           re-exchange, until it has sent a SSH_MSG_NEWKEYS message (Section\n           7.3), it MUST NOT send any messages other than:\n\n           o  Transport layer generic messages (1 to 19) (but\n              SSH_MSG_SERVICE_REQUEST and SSH_MSG_SERVICE_ACCEPT MUST NOT be\n              sent);\n\n           o  Algorithm negotiation messages (20 to 29) (but further\n              SSH_MSG_KEXINIT messages MUST NOT be sent);\n\n           o  Specific key exchange method messages (30 to 49).\n\n           -- https://www.rfc-editor.org/rfc/rfc4253#section-7.1\n        */\n        if ($this->keyExchangeInProgress) {\n            return $payload;\n        }\n\n        // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in\n        if (($this->bitmap & self::MASK_CONNECTED) && !$this->isAuthenticated() && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {\n            Strings::shift($payload, 1);\n            list($this->banner_message) = Strings::unpackSSH2('s', $payload);\n            $payload = $this->get_binary_packet();\n        }\n\n        // only called when we've already logged in\n        if (($this->bitmap & self::MASK_CONNECTED) && $this->isAuthenticated()) {\n            switch (ord($payload[0])) {\n                case NET_SSH2_MSG_CHANNEL_REQUEST:\n                    if (strlen($payload) == 31) {\n                        $unpacked = unpack('cpacket_type/Nchannel/Nlength', $payload);\n                        $packet_type = $unpacked['packet_type'];\n                        $channel = $unpacked['channel'];\n                        $length = $unpacked['length'];\n                        if (substr($payload, 9, $length) == 'keepalive@openssh.com' && isset($this->server_channels[$channel])) {\n                            if (ord(substr($payload, 9 + $length))) { // want reply\n                                $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_SUCCESS, $this->server_channels[$channel]));\n                            }\n                            $payload = $this->get_binary_packet();\n                        }\n                    }\n                    break;\n                case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4\n                    Strings::shift($payload, 1);\n                    list($request_name, $want_reply) = Strings::unpackSSH2('sb', $payload);\n                    $this->errors[] = \"SSH_MSG_GLOBAL_REQUEST: $request_name\";\n                    if ($want_reply) {\n                        $this->send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE));\n                    }\n                    $payload = $this->get_binary_packet();\n                    break;\n                case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1\n                    Strings::shift($payload, 1);\n                    list($data, $server_channel) = Strings::unpackSSH2('sN', $payload);\n                    switch ($data) {\n                        case 'auth-agent':\n                        case 'auth-agent@openssh.com':\n                            if (isset($this->agent)) {\n                                $new_channel = self::CHANNEL_AGENT_FORWARD;\n\n                                list(\n                                    $remote_window_size,\n                                    $remote_maximum_packet_size\n                                ) = Strings::unpackSSH2('NN', $payload);\n\n                                $this->packet_size_client_to_server[$new_channel] = $remote_window_size;\n                                $this->window_size_server_to_client[$new_channel] = $remote_maximum_packet_size;\n                                $this->window_size_client_to_server[$new_channel] = $this->window_size;\n\n                                $packet_size = 0x4000;\n\n                                $packet = pack(\n                                    'CN4',\n                                    NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION,\n                                    $server_channel,\n                                    $new_channel,\n                                    $packet_size,\n                                    $packet_size\n                                );\n\n                                $this->server_channels[$new_channel] = $server_channel;\n                                $this->channel_status[$new_channel] = NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION;\n                                $this->send_binary_packet($packet);\n                            }\n                            break;\n                        default:\n                            $packet = Strings::packSSH2(\n                                'CN2ss',\n                                NET_SSH2_MSG_CHANNEL_OPEN_FAILURE,\n                                $server_channel,\n                                NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED,\n                                '', // description\n                                '' // language tag\n                            );\n                            $this->send_binary_packet($packet);\n                    }\n\n                    $payload = $this->get_binary_packet();\n                    break;\n            }\n        }\n\n        return $payload;\n    }\n\n    /**\n     * Enable Quiet Mode\n     *\n     * Suppress stderr from output\n     *\n     */\n    public function enableQuietMode()\n    {\n        $this->quiet_mode = true;\n    }\n\n    /**\n     * Disable Quiet Mode\n     *\n     * Show stderr in output\n     *\n     */\n    public function disableQuietMode()\n    {\n        $this->quiet_mode = false;\n    }\n\n    /**\n     * Returns whether Quiet Mode is enabled or not\n     *\n     * @see self::enableQuietMode()\n     * @see self::disableQuietMode()\n     * @return bool\n     */\n    public function isQuietModeEnabled()\n    {\n        return $this->quiet_mode;\n    }\n\n    /**\n     * Enable request-pty when using exec()\n     *\n     */\n    public function enablePTY()\n    {\n        $this->request_pty = true;\n    }\n\n    /**\n     * Disable request-pty when using exec()\n     *\n     */\n    public function disablePTY()\n    {\n        if ($this->isPTYOpen()) {\n            $this->close_channel(self::CHANNEL_EXEC);\n        }\n        $this->request_pty = false;\n    }\n\n    /**\n     * Returns whether request-pty is enabled or not\n     *\n     * @see self::enablePTY()\n     * @see self::disablePTY()\n     * @return bool\n     */\n    public function isPTYEnabled()\n    {\n        return $this->request_pty;\n    }\n\n    /**\n     * Gets channel data\n     *\n     * Returns the data as a string. bool(true) is returned if:\n     *\n     * - the server closes the channel\n     * - if the connection times out\n     * - if a window adjust packet is received on the given negated client channel\n     * - if the channel status is CHANNEL_OPEN and the response was CHANNEL_OPEN_CONFIRMATION\n     * - if the channel status is CHANNEL_REQUEST and the response was CHANNEL_SUCCESS\n     * - if the channel status is CHANNEL_CLOSE and the response was CHANNEL_CLOSE\n     *\n     * bool(false) is returned if:\n     *\n     * - if the channel status is CHANNEL_REQUEST and the response was CHANNEL_FAILURE\n     *\n     * @param int $client_channel Specifies the channel to return data for, and data received\n     *        on other channels is buffered. The respective negative value of a channel is\n     *        also supported for the case that the caller is awaiting adjustment of the data\n     *        window, and where data received on that respective channel is also buffered.\n     * @param bool $skip_extended\n     * @return mixed\n     * @throws \\RuntimeException on connection error\n     */\n    protected function get_channel_packet($client_channel, $skip_extended = false)\n    {\n        if (!empty($this->channel_buffers[$client_channel])) {\n            // in phpseclib 4.0 this should be changed to $this->channel_status[$client_channel] ?? null\n            switch (isset($this->channel_status[$client_channel]) ? $this->channel_status[$client_channel] : null) {\n                case NET_SSH2_MSG_CHANNEL_REQUEST:\n                    foreach ($this->channel_buffers[$client_channel] as $i => $packet) {\n                        switch (ord($packet[0])) {\n                            case NET_SSH2_MSG_CHANNEL_SUCCESS:\n                            case NET_SSH2_MSG_CHANNEL_FAILURE:\n                                unset($this->channel_buffers[$client_channel][$i]);\n                                return substr($packet, 1);\n                        }\n                    }\n                    break;\n                default:\n                    return substr(array_shift($this->channel_buffers[$client_channel]), 1);\n            }\n        }\n\n        while (true) {\n            try {\n                $response = $this->get_binary_packet();\n            } catch (TimeoutException $e) {\n                return true;\n            }\n            list($type) = Strings::unpackSSH2('C', $response);\n            if (strlen($response) >= 4) {\n                list($channel) = Strings::unpackSSH2('N', $response);\n            }\n\n            // will not be setup yet on incoming channel open request\n            if (isset($channel) && isset($this->channel_status[$channel]) && isset($this->window_size_server_to_client[$channel])) {\n                $this->window_size_server_to_client[$channel] -= strlen($response);\n\n                // resize the window, if appropriate\n                if ($this->window_size_server_to_client[$channel] < 0) {\n                // PuTTY does something more analogous to the following:\n                //if ($this->window_size_server_to_client[$channel] < 0x3FFFFFFF) {\n                    $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$channel], $this->window_resize);\n                    $this->send_binary_packet($packet);\n                    $this->window_size_server_to_client[$channel] += $this->window_resize;\n                }\n\n                switch ($type) {\n                    case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST:\n                        list($window_size) = Strings::unpackSSH2('N', $response);\n                        $this->window_size_client_to_server[$channel] += $window_size;\n                        if ($channel == -$client_channel) {\n                            return true;\n                        }\n\n                        continue 2;\n                    case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:\n                        /*\n                        if ($client_channel == self::CHANNEL_EXEC) {\n                            $this->send_channel_packet($client_channel, chr(0));\n                        }\n                        */\n                        // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR\n                        list($data_type_code, $data) = Strings::unpackSSH2('Ns', $response);\n                        $this->stdErrorLog .= $data;\n                        if ($skip_extended || $this->quiet_mode) {\n                            continue 2;\n                        }\n                        if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) {\n                            return $data;\n                        }\n                        $this->channel_buffers[$channel][] = chr($type) . $data;\n\n                        continue 2;\n                    case NET_SSH2_MSG_CHANNEL_REQUEST:\n                        if (!isset($this->channel_status[$channel])) {\n                            continue 2;\n                        }\n                        list($value) = Strings::unpackSSH2('s', $response);\n                        switch ($value) {\n                            case 'exit-signal':\n                                list(\n                                    , // FALSE\n                                    $signal_name,\n                                    , // core dumped\n                                    $error_message\n                                ) = Strings::unpackSSH2('bsbs', $response);\n\n                                $this->errors[] = \"SSH_MSG_CHANNEL_REQUEST (exit-signal): $signal_name\";\n                                if (strlen($error_message)) {\n                                    $this->errors[count($this->errors) - 1] .= \"\\r\\n$error_message\";\n                                }\n                                if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) {\n                                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) {\n                                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$channel]));\n                                    }\n                                    $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));\n\n                                    $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE;\n                                }\n                                continue 3;\n                            case 'exit-status':\n                                list(, $this->exit_status) = Strings::unpackSSH2('CN', $response);\n\n                                // \"The client MAY ignore these messages.\"\n                                // -- http://tools.ietf.org/html/rfc4254#section-6.10\n\n                                continue 3;\n                            default:\n                                list($want_reply) = Strings::unpackSSH2('b', $response);\n                                if ($want_reply) {\n                                    // \"If the request is not recognized or is not supported for the channel,\n                                    //  SSH_MSG_CHANNEL_FAILURE is returned.\"\n                                    // -- https://datatracker.ietf.org/doc/html/rfc4254#page-10\n                                    $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_FAILURE, $this->server_channels[$channel]));\n                                }\n                                continue 3;\n                        }\n                }\n\n                switch ($this->channel_status[$channel]) {\n                    case NET_SSH2_MSG_CHANNEL_OPEN:\n                        switch ($type) {\n                            case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION:\n                                list(\n                                    $this->server_channels[$channel],\n                                    $window_size,\n                                    $this->packet_size_client_to_server[$channel]\n                                ) = Strings::unpackSSH2('NNN', $response);\n\n                                if ($window_size < 0) {\n                                    $window_size &= 0x7FFFFFFF;\n                                    $window_size += 0x80000000;\n                                }\n                                $this->window_size_client_to_server[$channel] = $window_size;\n                                $result = $client_channel == $channel ? true : $this->get_channel_packet($client_channel, $skip_extended);\n                                $this->on_channel_open();\n                                return $result;\n                            case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE:\n                                $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n                                throw new \\RuntimeException('Unable to open channel');\n                            default:\n                                if ($client_channel == $channel) {\n                                    $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n                                    throw new \\RuntimeException('Unexpected response to open request');\n                                }\n                                return $this->get_channel_packet($client_channel, $skip_extended);\n                        }\n                        break;\n                    case NET_SSH2_MSG_CHANNEL_REQUEST:\n                        switch ($type) {\n                            case NET_SSH2_MSG_CHANNEL_SUCCESS:\n                                return true;\n                            case NET_SSH2_MSG_CHANNEL_FAILURE:\n                                return false;\n                            case NET_SSH2_MSG_CHANNEL_DATA:\n                                list($data) = Strings::unpackSSH2('s', $response);\n                                $this->channel_buffers[$channel][] = chr($type) . $data;\n                                return $this->get_channel_packet($client_channel, $skip_extended);\n                            default:\n                                $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n                                throw new \\RuntimeException('Unable to fulfill channel request');\n                        }\n                    case NET_SSH2_MSG_CHANNEL_CLOSE:\n                        if ($client_channel == $channel && $type == NET_SSH2_MSG_CHANNEL_CLOSE) {\n                            return true;\n                        }\n                        return $this->get_channel_packet($client_channel, $skip_extended);\n                }\n            }\n\n            // ie. $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA\n\n            switch ($type) {\n                case NET_SSH2_MSG_CHANNEL_DATA:\n                    /*\n                    if ($channel == self::CHANNEL_EXEC) {\n                        // SCP requires null packets, such as this, be sent.  further, in the case of the ssh.com SSH server\n                        // this actually seems to make things twice as fast.  more to the point, the message right after\n                        // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise.\n                        // in OpenSSH it slows things down but only by a couple thousandths of a second.\n                        $this->send_channel_packet($channel, chr(0));\n                    }\n                    */\n                    list($data) = Strings::unpackSSH2('s', $response);\n\n                    if ($channel == self::CHANNEL_AGENT_FORWARD) {\n                        $agent_response = $this->agent->forwardData($data);\n                        if (!is_bool($agent_response)) {\n                            $this->send_channel_packet($channel, $agent_response);\n                        }\n                        break;\n                    }\n\n                    if ($client_channel == $channel) {\n                        return $data;\n                    }\n                    $this->channel_buffers[$channel][] = chr($type) . $data;\n                    break;\n                case NET_SSH2_MSG_CHANNEL_CLOSE:\n                    $this->curTimeout = 5;\n\n                    $this->close_channel_bitmap($channel);\n\n                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) {\n                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));\n                    }\n\n                    unset($this->channel_status[$channel]);\n                    $this->channelCount--;\n\n                    if ($client_channel == $channel) {\n                        return true;\n                    }\n                    // fall-through\n                case NET_SSH2_MSG_CHANNEL_EOF:\n                    break;\n                default:\n                    $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n                    throw new \\RuntimeException(\"Error reading channel data ($type)\");\n            }\n        }\n    }\n\n    /**\n     * Sends Binary Packets\n     *\n     * See '6. Binary Packet Protocol' of rfc4253 for more info.\n     *\n     * @param string $data\n     * @param string $logged\n     * @see self::_get_binary_packet()\n     * @return void\n     */\n    protected function send_binary_packet($data, $logged = null)\n    {\n        if (!is_resource($this->fsock) || feof($this->fsock)) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);\n            throw new ConnectionClosedException('Connection closed prematurely');\n        }\n\n        if (!isset($logged)) {\n            $logged = $data;\n        }\n\n        switch ($this->compress) {\n            case self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH:\n                if (!$this->isAuthenticated()) {\n                    break;\n                }\n                // fall-through\n            case self::NET_SSH2_COMPRESSION_ZLIB:\n                if (!$this->regenerate_compression_context) {\n                    $header = '';\n                } else {\n                    $this->regenerate_compression_context = false;\n                    $this->compress_context = deflate_init(ZLIB_ENCODING_RAW, ['window' => 15]);\n                    $header = \"\\x78\\x9C\";\n                }\n                if ($this->compress_context) {\n                    $data = $header . deflate_add($this->compress_context, $data, ZLIB_PARTIAL_FLUSH);\n                }\n        }\n\n        // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9\n        $packet_length = strlen($data) + 9;\n        if ($this->encrypt && $this->encrypt->usesNonce()) {\n            $packet_length -= 4;\n        }\n        // round up to the nearest $this->encrypt_block_size\n        $packet_length += (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size;\n        // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length\n        $padding_length = $packet_length - strlen($data) - 5;\n        switch (true) {\n            case $this->encrypt && $this->encrypt->usesNonce():\n            case $this->hmac_create instanceof Hash && $this->hmac_create_etm:\n                $padding_length += 4;\n                $packet_length += 4;\n        }\n\n        $padding = Random::string($padding_length);\n\n        // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself\n        $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding);\n\n        $hmac = '';\n        if ($this->hmac_create instanceof Hash && !$this->hmac_create_etm) {\n            if (($this->hmac_create->getHash() & \"\\xFF\\xFF\\xFF\\xFF\") == 'umac') {\n                $this->hmac_create->setNonce(\"\\0\\0\\0\\0\" . pack('N', $this->send_seq_no));\n                $hmac = $this->hmac_create->hash($packet);\n            } else {\n                $hmac = $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet));\n            }\n        }\n\n        if ($this->encrypt) {\n            switch ($this->encryptName) {\n                case 'aes128-gcm@openssh.com':\n                case 'aes256-gcm@openssh.com':\n                    $this->encrypt->setNonce(\n                        $this->encryptFixedPart .\n                        $this->encryptInvocationCounter\n                    );\n                    Strings::increment_str($this->encryptInvocationCounter);\n                    $this->encrypt->setAAD($temp = ($packet & \"\\xFF\\xFF\\xFF\\xFF\"));\n                    $packet = $temp . $this->encrypt->encrypt(substr($packet, 4));\n                    break;\n                case 'chacha20-poly1305@openssh.com':\n                    // This should be impossible, but we are checking anyway to narrow the type for Psalm.\n                    if (!($this->encrypt instanceof ChaCha20)) {\n                        throw new \\LogicException('$this->encrypt is not a ' . ChaCha20::class);\n                    }\n\n                    $nonce = pack('N2', 0, $this->send_seq_no);\n\n                    $this->encrypt->setNonce($nonce);\n                    $this->lengthEncrypt->setNonce($nonce);\n\n                    $length = $this->lengthEncrypt->encrypt($packet & \"\\xFF\\xFF\\xFF\\xFF\");\n\n                    $this->encrypt->setCounter(0);\n                    // this is the same approach that's implemented in Salsa20::createPoly1305Key()\n                    // but we don't want to use the same AEAD construction that RFC8439 describes\n                    // for ChaCha20-Poly1305 so we won't rely on it (see Salsa20::poly1305())\n                    $this->encrypt->setPoly1305Key(\n                        $this->encrypt->encrypt(str_repeat(\"\\0\", 32))\n                    );\n                    $this->encrypt->setAAD($length);\n                    $this->encrypt->setCounter(1);\n                    $packet = $length . $this->encrypt->encrypt(substr($packet, 4));\n                    break;\n                default:\n                    $packet = $this->hmac_create instanceof Hash && $this->hmac_create_etm ?\n                        ($packet & \"\\xFF\\xFF\\xFF\\xFF\") . $this->encrypt->encrypt(substr($packet, 4)) :\n                        $this->encrypt->encrypt($packet);\n            }\n        }\n\n        if ($this->hmac_create instanceof Hash && $this->hmac_create_etm) {\n            if (($this->hmac_create->getHash() & \"\\xFF\\xFF\\xFF\\xFF\") == 'umac') {\n                $this->hmac_create->setNonce(\"\\0\\0\\0\\0\" . pack('N', $this->send_seq_no));\n                $hmac = $this->hmac_create->hash($packet);\n            } else {\n                $hmac = $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet));\n            }\n        }\n\n        $this->send_seq_no++;\n\n        $packet .= $this->encrypt && $this->encrypt->usesNonce() ? $this->encrypt->getTag() : $hmac;\n\n        if (!$this->keyExchangeInProgress) {\n            $this->bytesTransferredSinceLastKEX += strlen($packet);\n        }\n\n        $start = microtime(true);\n        $sent = @fputs($this->fsock, $packet);\n        $stop = microtime(true);\n\n        if (defined('NET_SSH2_LOGGING')) {\n            $current = microtime(true);\n            $message_number = isset(self::$message_numbers[ord($logged[0])]) ? self::$message_numbers[ord($logged[0])] : 'UNKNOWN (' . ord($logged[0]) . ')';\n            $message_number = '-> ' . $message_number .\n                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';\n            $this->append_log($message_number, $logged);\n        }\n        $this->last_packet = microtime(true);\n\n        if (strlen($packet) != $sent) {\n            $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);\n            $message = $sent === false ?\n                'Unable to write ' . strlen($packet) . ' bytes' :\n                \"Only $sent of \" . strlen($packet) . \" bytes were sent\";\n            throw new \\RuntimeException($message);\n        }\n\n        if ($this->bytesTransferredSinceLastKEX > $this->doKeyReexchangeAfterXBytes) {\n            $this->key_exchange();\n        }\n    }\n\n    /**\n     * Sends a keep-alive message, if keep-alive is enabled and interval is met\n     */\n    private function send_keep_alive()\n    {\n        if ($this->bitmap & self::MASK_CONNECTED) {\n            $elapsed = microtime(true) - $this->last_packet;\n            if ($this->keepAlive > 0 && $elapsed >= $this->keepAlive) {\n                $this->send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0));\n            }\n        }\n    }\n\n    /**\n     * Logs data packets\n     *\n     * Makes sure that only the last 1MB worth of packets will be logged\n     *\n     * @param string $message_number\n     * @param string $message\n     */\n    private function append_log($message_number, $message)\n    {\n        $this->append_log_helper(\n            NET_SSH2_LOGGING,\n            $message_number,\n            $message,\n            $this->message_number_log,\n            $this->message_log,\n            $this->log_size,\n            $this->realtime_log_file,\n            $this->realtime_log_wrap,\n            $this->realtime_log_size\n        );\n    }\n\n    /**\n     * Logs data packet helper\n     *\n     * @param int $constant\n     * @param string $message_number\n     * @param string $message\n     * @param array &$message_number_log\n     * @param array &$message_log\n     * @param int &$log_size\n     * @param resource &$realtime_log_file\n     * @param bool &$realtime_log_wrap\n     * @param int &$realtime_log_size\n     */\n    protected function append_log_helper($constant, $message_number, $message, array &$message_number_log, array &$message_log, &$log_size, &$realtime_log_file, &$realtime_log_wrap, &$realtime_log_size)\n    {\n        // remove the byte identifying the message type from all but the first two messages (ie. the identification strings)\n        if (!in_array(substr($message_number, 0, 4), ['<- (', '-> (']) && strlen($message_number) > 2) {\n            Strings::shift($message);\n        }\n\n        switch ($constant) {\n            // useful for benchmarks\n            case self::LOG_SIMPLE:\n                $message_number_log[] = $message_number;\n                break;\n            case self::LOG_SIMPLE_REALTIME:\n                echo $message_number;\n                echo PHP_SAPI == 'cli' ? \"\\r\\n\" : '<br>';\n                @flush();\n                @ob_flush();\n                break;\n            // the most useful log for SSH2\n            case self::LOG_COMPLEX:\n                $message_number_log[] = $message_number;\n                $log_size += strlen($message);\n                $message_log[] = $message;\n                while ($log_size > self::LOG_MAX_SIZE) {\n                    $log_size -= strlen(array_shift($message_log));\n                    array_shift($message_number_log);\n                }\n                break;\n            // dump the output out realtime; packets may be interspersed with non packets,\n            // passwords won't be filtered out and select other packets may not be correctly\n            // identified\n            case self::LOG_REALTIME:\n                switch (PHP_SAPI) {\n                    case 'cli':\n                        $start = $stop = \"\\r\\n\";\n                        break;\n                    default:\n                        $start = '<pre>';\n                        $stop = '</pre>';\n                }\n                echo $start . $this->format_log([$message], [$message_number]) . $stop;\n                @flush();\n                @ob_flush();\n                break;\n            // basically the same thing as self::LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILENAME\n            // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE.\n            // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily\n            // at the beginning of the file\n            case self::LOG_REALTIME_FILE:\n                if (!isset($realtime_log_file)) {\n                    // PHP doesn't seem to like using constants in fopen()\n                    $filename = NET_SSH2_LOG_REALTIME_FILENAME;\n                    $fp = fopen($filename, 'w');\n                    $realtime_log_file = $fp;\n                }\n                if (!is_resource($realtime_log_file)) {\n                    break;\n                }\n                $entry = $this->format_log([$message], [$message_number]);\n                if ($realtime_log_wrap) {\n                    $temp = \"<<< START >>>\\r\\n\";\n                    $entry .= $temp;\n                    fseek($realtime_log_file, ftell($realtime_log_file) - strlen($temp));\n                }\n                $realtime_log_size += strlen($entry);\n                if ($realtime_log_size > self::LOG_MAX_SIZE) {\n                    fseek($realtime_log_file, 0);\n                    $realtime_log_size = strlen($entry);\n                    $realtime_log_wrap = true;\n                }\n                fputs($realtime_log_file, $entry);\n                break;\n            case self::LOG_REALTIME_SIMPLE:\n                echo $message_number;\n                echo PHP_SAPI == 'cli' ? \"\\r\\n\" : '<br>';\n        }\n    }\n\n    /**\n     * Sends channel data\n     *\n     * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate\n     *\n     * @param int $client_channel\n     * @param string $data\n     * @return void\n     */\n    protected function send_channel_packet($client_channel, $data)\n    {\n        if (\n            isset($this->channel_buffers_write[$client_channel])\n            && strpos($data, $this->channel_buffers_write[$client_channel]) === 0\n        ) {\n            // if buffer holds identical initial data content, resume send from the unmatched data portion\n            $data = substr($data, strlen($this->channel_buffers_write[$client_channel]));\n        } else {\n            $this->channel_buffers_write[$client_channel] = '';\n        }\n        while (strlen($data)) {\n            if (!$this->window_size_client_to_server[$client_channel]) {\n                // using an invalid channel will let the buffers be built up for the valid channels\n                $this->get_channel_packet(-$client_channel);\n                if ($this->isTimeout()) {\n                    throw new TimeoutException('Timed out waiting for server');\n                } elseif (!$this->window_size_client_to_server[$client_channel]) {\n                    throw new \\RuntimeException('Data window was not adjusted');\n                }\n            }\n\n            /* The maximum amount of data allowed is determined by the maximum\n               packet size for the channel, and the current window size, whichever\n               is smaller.\n                 -- http://tools.ietf.org/html/rfc4254#section-5.2 */\n            $max_size = min(\n                $this->packet_size_client_to_server[$client_channel],\n                $this->window_size_client_to_server[$client_channel]\n            );\n\n            $temp = Strings::shift($data, $max_size);\n            $packet = Strings::packSSH2(\n                'CNs',\n                NET_SSH2_MSG_CHANNEL_DATA,\n                $this->server_channels[$client_channel],\n                $temp\n            );\n            $this->window_size_client_to_server[$client_channel] -= strlen($temp);\n            $this->send_binary_packet($packet);\n            $this->channel_buffers_write[$client_channel] .= $temp;\n        }\n        unset($this->channel_buffers_write[$client_channel]);\n    }\n\n    /**\n     * Closes and flushes a channel\n     *\n     * \\phpseclib3\\Net\\SSH2 doesn't properly close most channels.  For exec() channels are normally closed by the server\n     * and for SFTP channels are presumably closed when the client disconnects.  This functions is intended\n     * for SCP more than anything.\n     *\n     * @param int $client_channel\n     * @param bool $want_reply\n     * @return void\n     */\n    protected function close_channel($client_channel)\n    {\n        // see http://tools.ietf.org/html/rfc4254#section-5.3\n\n        if ($this->channel_status[$client_channel] != NET_SSH2_MSG_CHANNEL_EOF) {\n            $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));\n        }\n        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));\n\n        $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;\n\n        $this->channelCount--;\n\n        $this->curTimeout = 5;\n        while (!is_bool($this->get_channel_packet($client_channel))) {\n        }\n\n        unset($this->channel_status[$client_channel]);\n\n        $this->close_channel_bitmap($client_channel);\n    }\n\n    /**\n     * Maintains execution state bitmap in response to channel closure\n     *\n     * @param int $client_channel The channel number to maintain closure status of\n     * @return void\n     */\n    private function close_channel_bitmap($client_channel)\n    {\n        switch ($client_channel) {\n            case self::CHANNEL_SHELL:\n                // Shell status has been maintained in the bitmap for backwards\n                //  compatibility sake, but can be removed going forward\n                if ($this->bitmap & self::MASK_SHELL) {\n                    $this->bitmap &= ~self::MASK_SHELL;\n                }\n                break;\n        }\n    }\n\n    /**\n     * Disconnect\n     *\n     * @param int $reason\n     * @return false\n     */\n    protected function disconnect_helper($reason)\n    {\n        if ($this->bitmap & self::MASK_DISCONNECT) {\n            // Disregard subsequent disconnect requests\n            return false;\n        }\n        $this->bitmap |= self::MASK_DISCONNECT;\n        if ($this->isConnected()) {\n            $data = Strings::packSSH2('CNss', NET_SSH2_MSG_DISCONNECT, $reason, '', '');\n            try {\n                $this->send_binary_packet($data);\n            } catch (\\Exception $e) {\n            }\n        }\n\n        $this->reset_connection();\n\n        return false;\n    }\n\n    /**\n     * Define Array\n     *\n     * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of\n     * named constants from it, using the value as the name of the constant and the index as the value of the constant.\n     * If any of the constants that would be defined already exists, none of the constants will be defined.\n     *\n     * @param mixed[] ...$args\n     * @access protected\n     */\n    protected static function define_array(...$args)\n    {\n        foreach ($args as $arg) {\n            foreach ($arg as $key => $value) {\n                if (!defined($value)) {\n                    define($value, $key);\n                } else {\n                    break 2;\n                }\n            }\n        }\n    }\n\n    /**\n     * Returns a log of the packets that have been sent and received.\n     *\n     * Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')\n     *\n     * @return array|false|string\n     */\n    public function getLog()\n    {\n        if (!defined('NET_SSH2_LOGGING')) {\n            return false;\n        }\n\n        switch (NET_SSH2_LOGGING) {\n            case self::LOG_SIMPLE:\n                return $this->message_number_log;\n            case self::LOG_COMPLEX:\n                $log = $this->format_log($this->message_log, $this->message_number_log);\n                return PHP_SAPI == 'cli' ? $log : '<pre>' . $log . '</pre>';\n            default:\n                return false;\n        }\n    }\n\n    /**\n     * Formats a log for printing\n     *\n     * @param array $message_log\n     * @param array $message_number_log\n     * @return string\n     */\n    protected function format_log(array $message_log, array $message_number_log)\n    {\n        $output = '';\n        for ($i = 0; $i < count($message_log); $i++) {\n            $output .= $message_number_log[$i];\n            $current_log = $message_log[$i];\n            $j = 0;\n            if (strlen($current_log)) {\n                $output .= \"\\r\\n\";\n            }\n            do {\n                if (strlen($current_log)) {\n                    $output .= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0  ';\n                }\n                $fragment = Strings::shift($current_log, $this->log_short_width);\n                $hex = substr(preg_replace_callback('#.#s', function ($matches) {\n                    return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT);\n                }, $fragment), strlen($this->log_boundary));\n                // replace non ASCII printable characters with dots\n                // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters\n                // also replace < with a . since < messes up the output on web browsers\n                $raw = preg_replace('#[^\\x20-\\x7E]|<#', '.', $fragment);\n                $output .= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . \"\\r\\n\";\n                $j++;\n            } while (strlen($current_log));\n            $output .= \"\\r\\n\";\n        }\n\n        return $output;\n    }\n\n    /**\n     * Helper function for agent->on_channel_open()\n     *\n     * Used when channels are created to inform agent\n     * of said channel opening. Must be called after\n     * channel open confirmation received\n     *\n     */\n    private function on_channel_open()\n    {\n        if (isset($this->agent)) {\n            $this->agent->registerChannelOpen($this);\n        }\n    }\n\n    /**\n     * Returns the first value of the intersection of two arrays or false if\n     * the intersection is empty. The order is defined by the first parameter.\n     *\n     * @param array $array1\n     * @param array $array2\n     * @return mixed False if intersection is empty, else intersected value.\n     */\n    private static function array_intersect_first(array $array1, array $array2)\n    {\n        foreach ($array1 as $value) {\n            if (in_array($value, $array2)) {\n                return $value;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Returns all errors / debug messages on the SSH layer\n     *\n     * If you are looking for messages from the SFTP layer, please see SFTP::getSFTPErrors()\n     *\n     * @return string[]\n     */\n    public function getErrors()\n    {\n        return $this->errors;\n    }\n\n    /**\n     * Returns the last error received on the SSH layer\n     *\n     * If you are looking for messages from the SFTP layer, please see SFTP::getLastSFTPError()\n     *\n     * @return string\n     */\n    public function getLastError()\n    {\n        $count = count($this->errors);\n\n        if ($count > 0) {\n            return $this->errors[$count - 1];\n        }\n    }\n\n    /**\n     * Return the server identification.\n     *\n     * @return string|false\n     */\n    public function getServerIdentification()\n    {\n        $this->connect();\n\n        return $this->server_identifier;\n    }\n\n    /**\n     * Returns a list of algorithms the server supports\n     *\n     * @return array\n     */\n    public function getServerAlgorithms()\n    {\n        $this->connect();\n\n        return [\n            'kex' => $this->kex_algorithms,\n            'hostkey' => $this->server_host_key_algorithms,\n            'client_to_server' => [\n                'crypt' => $this->encryption_algorithms_client_to_server,\n                'mac' => $this->mac_algorithms_client_to_server,\n                'comp' => $this->compression_algorithms_client_to_server,\n                'lang' => $this->languages_client_to_server\n            ],\n            'server_to_client' => [\n                'crypt' => $this->encryption_algorithms_server_to_client,\n                'mac' => $this->mac_algorithms_server_to_client,\n                'comp' => $this->compression_algorithms_server_to_client,\n                'lang' => $this->languages_server_to_client\n            ]\n        ];\n    }\n\n    /**\n     * Returns a list of KEX algorithms that phpseclib supports\n     *\n     * @return array\n     */\n    public static function getSupportedKEXAlgorithms()\n    {\n        $kex_algorithms = [\n            // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using\n            // Curve25519. See doc/curve25519-sha256@libssh.org.txt in the\n            // libssh repository for more information.\n            'curve25519-sha256',\n            'curve25519-sha256@libssh.org',\n\n            'ecdh-sha2-nistp256', // RFC 5656\n            'ecdh-sha2-nistp384', // RFC 5656\n            'ecdh-sha2-nistp521', // RFC 5656\n\n            'diffie-hellman-group-exchange-sha256',// RFC 4419\n            'diffie-hellman-group-exchange-sha1',  // RFC 4419\n\n            // Diffie-Hellman Key Agreement (DH) using integer modulo prime\n            // groups.\n            'diffie-hellman-group14-sha256',\n            'diffie-hellman-group14-sha1', // REQUIRED\n            'diffie-hellman-group15-sha512',\n            'diffie-hellman-group16-sha512',\n            'diffie-hellman-group17-sha512',\n            'diffie-hellman-group18-sha512',\n\n            'diffie-hellman-group1-sha1', // REQUIRED\n        ];\n\n        return $kex_algorithms;\n    }\n\n    /**\n     * Returns a list of host key algorithms that phpseclib supports\n     *\n     * @return array\n     */\n    public static function getSupportedHostKeyAlgorithms()\n    {\n        return [\n            'ssh-ed25519', // https://tools.ietf.org/html/draft-ietf-curdle-ssh-ed25519-02\n            'ecdsa-sha2-nistp256', // RFC 5656\n            'ecdsa-sha2-nistp384', // RFC 5656\n            'ecdsa-sha2-nistp521', // RFC 5656\n            'rsa-sha2-256', // RFC 8332\n            'rsa-sha2-512', // RFC 8332\n            'ssh-rsa', // RECOMMENDED  sign   Raw RSA Key\n            'ssh-dss'  // REQUIRED     sign   Raw DSS Key\n        ];\n    }\n\n    /**\n     * Returns a list of symmetric key algorithms that phpseclib supports\n     *\n     * @return array\n     */\n    public static function getSupportedEncryptionAlgorithms()\n    {\n        $algos = [\n            // from <https://tools.ietf.org/html/rfc5647>:\n            'aes128-gcm@openssh.com',\n            'aes256-gcm@openssh.com',\n\n            // from <http://tools.ietf.org/html/rfc4345#section-4>:\n            'arcfour256',\n            'arcfour128',\n\n            //'arcfour',      // OPTIONAL          the ARCFOUR stream cipher with a 128-bit key\n\n            // CTR modes from <http://tools.ietf.org/html/rfc4344#section-4>:\n            'aes128-ctr',     // RECOMMENDED       AES (Rijndael) in SDCTR mode, with 128-bit key\n            'aes192-ctr',     // RECOMMENDED       AES with 192-bit key\n            'aes256-ctr',     // RECOMMENDED       AES with 256-bit key\n\n            // from <https://github.com/openssh/openssh-portable/blob/001aa55/PROTOCOL.chacha20poly1305>:\n            // one of the big benefits of chacha20-poly1305 is speed. the problem is...\n            // libsodium doesn't generate the poly1305 keys in the way ssh does and openssl's PHP bindings don't even\n            // seem to support poly1305 currently. so even if libsodium or openssl are being used for the chacha20\n            // part, pure-PHP has to be used for the poly1305 part and that's gonna cause a big slow down.\n            // speed-wise it winds up being faster to use AES (when openssl or mcrypt are available) and some HMAC\n            // (which is always gonna be super fast to compute thanks to the hash extension, which\n            // \"is bundled and compiled into PHP by default\")\n            'chacha20-poly1305@openssh.com',\n\n            'twofish128-ctr', // OPTIONAL          Twofish in SDCTR mode, with 128-bit key\n            'twofish192-ctr', // OPTIONAL          Twofish with 192-bit key\n            'twofish256-ctr', // OPTIONAL          Twofish with 256-bit key\n\n            'aes128-cbc',     // RECOMMENDED       AES with a 128-bit key\n            'aes192-cbc',     // OPTIONAL          AES with a 192-bit key\n            'aes256-cbc',     // OPTIONAL          AES in CBC mode, with a 256-bit key\n\n            'twofish128-cbc', // OPTIONAL          Twofish with a 128-bit key\n            'twofish192-cbc', // OPTIONAL          Twofish with a 192-bit key\n            'twofish256-cbc',\n            'twofish-cbc',    // OPTIONAL          alias for \"twofish256-cbc\"\n                              //                   (this is being retained for historical reasons)\n\n            'blowfish-ctr',   // OPTIONAL          Blowfish in SDCTR mode\n\n            'blowfish-cbc',   // OPTIONAL          Blowfish in CBC mode\n\n            '3des-ctr',       // RECOMMENDED       Three-key 3DES in SDCTR mode\n\n            '3des-cbc',       // REQUIRED          three-key 3DES in CBC mode\n\n             //'none'           // OPTIONAL          no encryption; NOT RECOMMENDED\n        ];\n\n        if (self::$crypto_engine) {\n            $engines = [self::$crypto_engine];\n        } else {\n            $engines = [\n                'libsodium',\n                'OpenSSL (GCM)',\n                'OpenSSL',\n                'mcrypt',\n                'Eval',\n                'PHP'\n            ];\n        }\n\n        $ciphers = [];\n\n        foreach ($engines as $engine) {\n            foreach ($algos as $algo) {\n                $obj = self::encryption_algorithm_to_crypt_instance($algo);\n                if ($obj instanceof Rijndael) {\n                    $obj->setKeyLength(preg_replace('#[^\\d]#', '', $algo));\n                }\n                switch ($algo) {\n                    // Eval engines do not exist for ChaCha20 or RC4 because they would not benefit from one.\n                    // to benefit from an Eval engine they'd need to loop a variable amount of times, they'd\n                    // need to do table lookups (eg. sbox subsitutions). ChaCha20 doesn't do either because\n                    // it's a so-called ARX cipher, meaning that the only operations it does are add (A), rotate (R)\n                    // and XOR (X). RC4 does do table lookups but being a stream cipher it works differently than\n                    // block ciphers. with RC4 you XOR the plaintext against a keystream and the keystream changes\n                    // as you encrypt stuff. the only table lookups are made against this keystream and thus table\n                    // lookups are kinda unavoidable. with AES and DES, however, the table lookups that are done\n                    // are done against substitution boxes (sboxes), which are invariant.\n\n                    // OpenSSL can't be used as an engine, either, because OpenSSL doesn't support continuous buffers\n                    // as SSH2 uses and altho you can emulate a continuous buffer with block ciphers you can't do so\n                    // with stream ciphers. As for ChaCha20...  for the ChaCha20 part OpenSSL could prob be used but\n                    // the big slow down isn't with ChaCha20 - it's with Poly1305. SSH constructs the key for that\n                    // differently than how OpenSSL does it (OpenSSL does it as the RFC describes, SSH doesn't).\n\n                    // libsodium can't be used because it doesn't support RC4 and it doesn't construct the Poly1305\n                    // keys in the same way that SSH does\n\n                    // mcrypt could prob be used for RC4 but mcrypt hasn't been included in PHP core for yearss\n                    case 'chacha20-poly1305@openssh.com':\n                    case 'arcfour128':\n                    case 'arcfour256':\n                        if ($engine != 'PHP') {\n                            continue 2;\n                        }\n                        break;\n                    case 'aes128-gcm@openssh.com':\n                    case 'aes256-gcm@openssh.com':\n                        if ($engine == 'OpenSSL') {\n                            continue 2;\n                        }\n                        $obj->setNonce('dummydummydu');\n                }\n                if ($obj->isValidEngine($engine)) {\n                    $algos = array_diff($algos, [$algo]);\n                    $ciphers[] = $algo;\n                }\n            }\n        }\n\n        return $ciphers;\n    }\n\n    /**\n     * Returns a list of MAC algorithms that phpseclib supports\n     *\n     * @return array\n     */\n    public static function getSupportedMACAlgorithms()\n    {\n        return [\n            'hmac-sha2-256-etm@openssh.com',\n            'hmac-sha2-512-etm@openssh.com',\n            'hmac-sha1-etm@openssh.com',\n\n            // from <http://www.ietf.org/rfc/rfc6668.txt>:\n            'hmac-sha2-256',// RECOMMENDED     HMAC-SHA256 (digest length = key length = 32)\n            'hmac-sha2-512',// OPTIONAL        HMAC-SHA512 (digest length = key length = 64)\n\n            'hmac-sha1-96', // RECOMMENDED     first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)\n            'hmac-sha1',    // REQUIRED        HMAC-SHA1 (digest length = key length = 20)\n            'hmac-md5-96',  // OPTIONAL        first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)\n            'hmac-md5',     // OPTIONAL        HMAC-MD5 (digest length = key length = 16)\n\n            'umac-64-etm@openssh.com',\n            'umac-128-etm@openssh.com',\n\n            // from <https://tools.ietf.org/html/draft-miller-secsh-umac-01>:\n            'umac-64@openssh.com',\n            'umac-128@openssh.com',\n\n            //'none'          // OPTIONAL        no MAC; NOT RECOMMENDED\n        ];\n    }\n\n    /**\n     * Returns a list of compression algorithms that phpseclib supports\n     *\n     * @return array\n     */\n    public static function getSupportedCompressionAlgorithms()\n    {\n        $algos = ['none']; // REQUIRED        no compression\n        if (function_exists('deflate_init')) {\n            $algos[] = 'zlib@openssh.com'; // https://datatracker.ietf.org/doc/html/draft-miller-secsh-compression-delayed\n            $algos[] = 'zlib';\n        }\n        return $algos;\n    }\n\n    /**\n     * Return list of negotiated algorithms\n     *\n     * Uses the same format as https://www.php.net/ssh2-methods-negotiated\n     *\n     * @return array\n     */\n    public function getAlgorithmsNegotiated()\n    {\n        $this->connect();\n\n        $compression_map = [\n            self::NET_SSH2_COMPRESSION_NONE => 'none',\n            self::NET_SSH2_COMPRESSION_ZLIB => 'zlib',\n            self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH => 'zlib@openssh.com'\n        ];\n\n        return [\n            'kex' => $this->kex_algorithm,\n            'hostkey' => $this->signature_format,\n            'client_to_server' => [\n                'crypt' => $this->encryptName,\n                'mac' => $this->hmac_create_name,\n                'comp' => $compression_map[$this->compress],\n            ],\n            'server_to_client' => [\n                'crypt' => $this->decryptName,\n                'mac' => $this->hmac_check_name,\n                'comp' => $compression_map[$this->decompress],\n            ]\n        ];\n    }\n\n    /**\n     * Force multiple channels (even if phpseclib has decided to disable them)\n     */\n    public function forceMultipleChannels()\n    {\n        $this->errorOnMultipleChannels = false;\n    }\n\n    /**\n     * Allows you to set the terminal\n     *\n     * @param string $term\n     */\n    public function setTerminal($term)\n    {\n        $this->term = $term;\n    }\n\n    /**\n     * Accepts an associative array with up to four parameters as described at\n     * <https://www.php.net/manual/en/function.ssh2-connect.php>\n     *\n     * @param array $methods\n     */\n    public function setPreferredAlgorithms(array $methods)\n    {\n        $keys = ['client_to_server', 'server_to_client'];\n\n        if (isset($methods['kex']) && is_string($methods['kex'])) {\n            $methods['kex'] = explode(',', $methods['kex']);\n        }\n\n        if (isset($methods['hostkey']) && is_string($methods['hostkey'])) {\n            $methods['hostkey'] = explode(',', $methods['hostkey']);\n        }\n\n        foreach ($keys as $key) {\n            if (isset($methods[$key])) {\n                $a = &$methods[$key];\n                if (isset($a['crypt']) && is_string($a['crypt'])) {\n                    $a['crypt'] = explode(',', $a['crypt']);\n                }\n                if (isset($a['comp']) && is_string($a['comp'])) {\n                    $a['comp'] = explode(',', $a['comp']);\n                }\n                if (isset($a['mac']) && is_string($a['mac'])) {\n                    $a['mac'] = explode(',', $a['mac']);\n                }\n            }\n        }\n\n        $preferred = $methods;\n\n        if (isset($preferred['kex'])) {\n            $preferred['kex'] = array_intersect(\n                $preferred['kex'],\n                static::getSupportedKEXAlgorithms()\n            );\n        }\n\n        if (isset($preferred['hostkey'])) {\n            $preferred['hostkey'] = array_intersect(\n                $preferred['hostkey'],\n                static::getSupportedHostKeyAlgorithms()\n            );\n        }\n\n        foreach ($keys as $key) {\n            if (isset($preferred[$key])) {\n                $a = &$preferred[$key];\n                if (isset($a['crypt'])) {\n                    $a['crypt'] = array_intersect(\n                        $a['crypt'],\n                        static::getSupportedEncryptionAlgorithms()\n                    );\n                }\n                if (isset($a['comp'])) {\n                    $a['comp'] = array_intersect(\n                        $a['comp'],\n                        static::getSupportedCompressionAlgorithms()\n                    );\n                }\n                if (isset($a['mac'])) {\n                    $a['mac'] = array_intersect(\n                        $a['mac'],\n                        static::getSupportedMACAlgorithms()\n                    );\n                }\n            }\n        }\n\n        $keys = [\n            'kex',\n            'hostkey',\n            'client_to_server/crypt',\n            'client_to_server/comp',\n            'client_to_server/mac',\n            'server_to_client/crypt',\n            'server_to_client/comp',\n            'server_to_client/mac',\n        ];\n        foreach ($keys as $key) {\n            $p = $preferred;\n            $m = $methods;\n\n            $subkeys = explode('/', $key);\n            foreach ($subkeys as $subkey) {\n                if (!isset($p[$subkey])) {\n                    continue 2;\n                }\n                $p = $p[$subkey];\n                $m = $m[$subkey];\n            }\n\n            if (count($p) != count($m)) {\n                $diff = array_diff($m, $p);\n                $msg = count($diff) == 1 ?\n                    ' is not a supported algorithm' :\n                    ' are not supported algorithms';\n                throw new UnsupportedAlgorithmException(implode(', ', $diff) . $msg);\n            }\n        }\n\n        $this->preferred = $preferred;\n    }\n\n    /**\n     * Returns the banner message.\n     *\n     * Quoting from the RFC, \"in some jurisdictions, sending a warning message before\n     * authentication may be relevant for getting legal protection.\"\n     *\n     * @return string\n     */\n    public function getBannerMessage()\n    {\n        return $this->banner_message;\n    }\n\n    /**\n     * Returns the server public host key.\n     *\n     * Caching this the first time you connect to a server and checking the result on subsequent connections\n     * is recommended.  Returns false if the server signature is not signed correctly with the public host key.\n     *\n     * @return string|false\n     * @throws \\RuntimeException on badly formatted keys\n     * @throws NoSupportedAlgorithmsException when the key isn't in a supported format\n     */\n    public function getServerPublicHostKey()\n    {\n        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {\n            $this->connect();\n        }\n\n        $signature = $this->signature;\n        $server_public_host_key = base64_encode($this->server_public_host_key);\n\n        if ($this->signature_validated) {\n            return $this->bitmap ?\n                $this->signature_format . ' ' . $server_public_host_key :\n                false;\n        }\n\n        $this->signature_validated = true;\n\n        switch ($this->signature_format) {\n            case 'ssh-ed25519':\n            case 'ecdsa-sha2-nistp256':\n            case 'ecdsa-sha2-nistp384':\n            case 'ecdsa-sha2-nistp521':\n                $key = EC::loadFormat('OpenSSH', $server_public_host_key)\n                    ->withSignatureFormat('SSH2');\n                switch ($this->signature_format) {\n                    case 'ssh-ed25519':\n                        $hash = 'sha512';\n                        break;\n                    case 'ecdsa-sha2-nistp256':\n                        $hash = 'sha256';\n                        break;\n                    case 'ecdsa-sha2-nistp384':\n                        $hash = 'sha384';\n                        break;\n                    case 'ecdsa-sha2-nistp521':\n                        $hash = 'sha512';\n                }\n                $key = $key->withHash($hash);\n                break;\n            case 'ssh-dss':\n                $key = DSA::loadFormat('OpenSSH', $server_public_host_key)\n                    ->withSignatureFormat('SSH2')\n                    ->withHash('sha1');\n                break;\n            case 'ssh-rsa':\n            case 'rsa-sha2-256':\n            case 'rsa-sha2-512':\n                // could be ssh-rsa, rsa-sha2-256, rsa-sha2-512\n                // we don't check here because we already checked in key_exchange\n                // some signatures have the type embedded within the message and some don't\n                list(, $signature) = Strings::unpackSSH2('ss', $signature);\n\n                $key = RSA::loadFormat('OpenSSH', $server_public_host_key)\n                    ->withPadding(RSA::SIGNATURE_PKCS1);\n                switch ($this->signature_format) {\n                    case 'rsa-sha2-512':\n                        $hash = 'sha512';\n                        break;\n                    case 'rsa-sha2-256':\n                        $hash = 'sha256';\n                        break;\n                    //case 'ssh-rsa':\n                    default:\n                        $hash = 'sha1';\n                }\n                $key = $key->withHash($hash);\n                break;\n            default:\n                $this->disconnect_helper(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);\n                throw new NoSupportedAlgorithmsException('Unsupported signature format');\n        }\n\n        if (!$key->verify($this->exchange_hash, $signature)) {\n            return $this->disconnect_helper(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);\n        };\n\n        return $this->signature_format . ' ' . $server_public_host_key;\n    }\n\n    /**\n     * Returns the exit status of an SSH command or false.\n     *\n     * @return false|int\n     */\n    public function getExitStatus()\n    {\n        if (is_null($this->exit_status)) {\n            return false;\n        }\n        return $this->exit_status;\n    }\n\n    /**\n     * Returns the number of columns for the terminal window size.\n     *\n     * @return int\n     */\n    public function getWindowColumns()\n    {\n        return $this->windowColumns;\n    }\n\n    /**\n     * Returns the number of rows for the terminal window size.\n     *\n     * @return int\n     */\n    public function getWindowRows()\n    {\n        return $this->windowRows;\n    }\n\n    /**\n     * Sets the number of columns for the terminal window size.\n     *\n     * @param int $value\n     */\n    public function setWindowColumns($value)\n    {\n        $this->windowColumns = $value;\n    }\n\n    /**\n     * Sets the number of rows for the terminal window size.\n     *\n     * @param int $value\n     */\n    public function setWindowRows($value)\n    {\n        $this->windowRows = $value;\n    }\n\n    /**\n     * Sets the number of columns and rows for the terminal window size.\n     *\n     * @param int $columns\n     * @param int $rows\n     */\n    public function setWindowSize($columns = 80, $rows = 24)\n    {\n        $this->windowColumns = $columns;\n        $this->windowRows = $rows;\n    }\n\n    /**\n     * To String Magic Method\n     *\n     * @return string\n     */\n    #[\\ReturnTypeWillChange]\n    public function __toString()\n    {\n        return $this->getResourceId();\n    }\n\n    /**\n     * Get Resource ID\n     *\n     * We use {} because that symbols should not be in URL according to\n     * {@link http://tools.ietf.org/html/rfc3986#section-2 RFC}.\n     * It will safe us from any conflicts, because otherwise regexp will\n     * match all alphanumeric domains.\n     *\n     * @return string\n     */\n    public function getResourceId()\n    {\n        return '{' . spl_object_hash($this) . '}';\n    }\n\n    /**\n     * Return existing connection\n     *\n     * @param string $id\n     *\n     * @return bool|SSH2 will return false if no such connection\n     */\n    public static function getConnectionByResourceId($id)\n    {\n        if (isset(self::$connections[$id])) {\n            return self::$connections[$id] instanceof \\WeakReference ? self::$connections[$id]->get() : self::$connections[$id];\n        }\n        return false;\n    }\n\n    /**\n     * Return all excising connections\n     *\n     * @return array<string, SSH2>\n     */\n    public static function getConnections()\n    {\n        if (!class_exists('WeakReference')) {\n            /** @var array<string, SSH2> */\n            return self::$connections;\n        }\n        $temp = [];\n        foreach (self::$connections as $key => $ref) {\n            $temp[$key] = $ref->get();\n        }\n        return $temp;\n    }\n\n    /*\n     * Update packet types in log history\n     *\n     * @param string $old\n     * @param string $new\n     */\n    private function updateLogHistory($old, $new)\n    {\n        if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == self::LOG_COMPLEX) {\n            $this->message_number_log[count($this->message_number_log) - 1] = str_replace(\n                $old,\n                $new,\n                $this->message_number_log[count($this->message_number_log) - 1]\n            );\n        }\n    }\n\n    /**\n     * Return the list of authentication methods that may productively continue authentication.\n     *\n     * @see https://tools.ietf.org/html/rfc4252#section-5.1\n     * @return array|null\n     */\n    public function getAuthMethodsToContinue()\n    {\n        return $this->auth_methods_to_continue;\n    }\n\n    /**\n     * Enables \"smart\" multi-factor authentication (MFA)\n     */\n    public function enableSmartMFA()\n    {\n        $this->smartMFA = true;\n    }\n\n    /**\n     * Disables \"smart\" multi-factor authentication (MFA)\n     */\n    public function disableSmartMFA()\n    {\n        $this->smartMFA = false;\n    }\n\n    /**\n     * How many bytes until the next key re-exchange?\n     *\n     * @param int $bytes\n     */\n    public function bytesUntilKeyReexchange($bytes)\n    {\n        $this->doKeyReexchangeAfterXBytes = $bytes;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php",
    "content": "<?php\n\n/**\n * Pure-PHP ssh-agent client.\n *\n * {@internal See http://api.libssh.org/rfc/PROTOCOL.agent}\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2009 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\System\\SSH\\Agent;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\PrivateKey;\nuse phpseclib3\\Crypt\\Common\\PublicKey;\nuse phpseclib3\\Crypt\\DSA;\nuse phpseclib3\\Crypt\\EC;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Exception\\UnsupportedAlgorithmException;\nuse phpseclib3\\System\\SSH\\Agent;\nuse phpseclib3\\System\\SSH\\Common\\Traits\\ReadBytes;\n\n/**\n * Pure-PHP ssh-agent client identity object\n *\n * Instantiation should only be performed by \\phpseclib3\\System\\SSH\\Agent class.\n * This could be thought of as implementing an interface that phpseclib3\\Crypt\\RSA\n * implements. ie. maybe a Net_SSH_Auth_PublicKey interface or something.\n * The methods in this interface would be getPublicKey and sign since those are the\n * methods phpseclib looks for to perform public key authentication.\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n * @internal\n */\nclass Identity implements PrivateKey\n{\n    use ReadBytes;\n\n    // Signature Flags\n    // See https://tools.ietf.org/html/draft-miller-ssh-agent-00#section-5.3\n    const SSH_AGENT_RSA2_256 = 2;\n    const SSH_AGENT_RSA2_512 = 4;\n\n    /**\n     * Key Object\n     *\n     * @var PublicKey\n     * @see self::getPublicKey()\n     */\n    private $key;\n\n    /**\n     * Key Blob\n     *\n     * @var string\n     * @see self::sign()\n     */\n    private $key_blob;\n\n    /**\n     * Socket Resource\n     *\n     * @var resource\n     * @see self::sign()\n     */\n    private $fsock;\n\n    /**\n     * Signature flags\n     *\n     * @var int\n     * @see self::sign()\n     * @see self::setHash()\n     */\n    private $flags = 0;\n\n    /**\n     * Comment\n     *\n     * @var null|string\n     */\n    private $comment;\n\n    /**\n     * Curve Aliases\n     *\n     * @var array\n     */\n    private static $curveAliases = [\n        'secp256r1' => 'nistp256',\n        'secp384r1' => 'nistp384',\n        'secp521r1' => 'nistp521',\n        'Ed25519' => 'Ed25519'\n    ];\n\n    /**\n     * Default Constructor.\n     *\n     * @param resource $fsock\n     */\n    public function __construct($fsock)\n    {\n        $this->fsock = $fsock;\n    }\n\n    /**\n     * Set Public Key\n     *\n     * Called by \\phpseclib3\\System\\SSH\\Agent::requestIdentities()\n     *\n     * @param PublicKey $key\n     */\n    public function withPublicKey(PublicKey $key)\n    {\n        if ($key instanceof EC) {\n            if (is_array($key->getCurve()) || !isset(self::$curveAliases[$key->getCurve()])) {\n                throw new UnsupportedAlgorithmException('The only supported curves are nistp256, nistp384, nistp512 and Ed25519');\n            }\n        }\n\n        $new = clone $this;\n        $new->key = $key;\n        return $new;\n    }\n\n    /**\n     * Set Public Key\n     *\n     * Called by \\phpseclib3\\System\\SSH\\Agent::requestIdentities(). The key blob could be extracted from $this->key\n     * but this saves a small amount of computation.\n     *\n     * @param string $key_blob\n     */\n    public function withPublicKeyBlob($key_blob)\n    {\n        $new = clone $this;\n        $new->key_blob = $key_blob;\n        return $new;\n    }\n\n    /**\n     * Get Public Key\n     *\n     * Wrapper for $this->key->getPublicKey()\n     *\n     * @return mixed\n     */\n    public function getPublicKey()\n    {\n        return $this->key;\n    }\n\n    /**\n     * Sets the hash\n     *\n     * @param string $hash\n     */\n    public function withHash($hash)\n    {\n        $new = clone $this;\n\n        $hash = strtolower($hash);\n\n        if ($this->key instanceof RSA) {\n            $new->flags = 0;\n            switch ($hash) {\n                case 'sha1':\n                    break;\n                case 'sha256':\n                    $new->flags = self::SSH_AGENT_RSA2_256;\n                    break;\n                case 'sha512':\n                    $new->flags = self::SSH_AGENT_RSA2_512;\n                    break;\n                default:\n                    throw new UnsupportedAlgorithmException('The only supported hashes for RSA are sha1, sha256 and sha512');\n            }\n        }\n        if ($this->key instanceof EC) {\n            switch ($this->key->getCurve()) {\n                case 'secp256r1':\n                    $expectedHash = 'sha256';\n                    break;\n                case 'secp384r1':\n                    $expectedHash = 'sha384';\n                    break;\n                //case 'secp521r1':\n                //case 'Ed25519':\n                default:\n                    $expectedHash = 'sha512';\n            }\n            if ($hash != $expectedHash) {\n                throw new UnsupportedAlgorithmException('The only supported hash for ' . self::$curveAliases[$this->key->getCurve()] . ' is ' . $expectedHash);\n            }\n        }\n        if ($this->key instanceof DSA) {\n            if ($hash != 'sha1') {\n                throw new UnsupportedAlgorithmException('The only supported hash for DSA is sha1');\n            }\n        }\n        return $new;\n    }\n\n    /**\n     * Sets the padding\n     *\n     * Only PKCS1 padding is supported\n     *\n     * @param string $padding\n     */\n    public function withPadding($padding)\n    {\n        if (!$this->key instanceof RSA) {\n            throw new UnsupportedAlgorithmException('Only RSA keys support padding');\n        }\n        if ($padding != RSA::SIGNATURE_PKCS1 && $padding != RSA::SIGNATURE_RELAXED_PKCS1) {\n            throw new UnsupportedAlgorithmException('ssh-agent can only create PKCS1 signatures');\n        }\n        return $this;\n    }\n\n    /**\n     * Determines the signature padding mode\n     *\n     * Valid values are: ASN1, SSH2, Raw\n     *\n     * @param string $format\n     */\n    public function withSignatureFormat($format)\n    {\n        if ($this->key instanceof RSA) {\n            throw new UnsupportedAlgorithmException('Only DSA and EC keys support signature format setting');\n        }\n        if ($format != 'SSH2') {\n            throw new UnsupportedAlgorithmException('Only SSH2-formatted signatures are currently supported');\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns the curve\n     *\n     * Returns a string if it's a named curve, an array if not\n     *\n     * @return string|array\n     */\n    public function getCurve()\n    {\n        if (!$this->key instanceof EC) {\n            throw new UnsupportedAlgorithmException('Only EC keys have curves');\n        }\n\n        return $this->key->getCurve();\n    }\n\n    /**\n     * Create a signature\n     *\n     * See \"2.6.2 Protocol 2 private key signature request\"\n     *\n     * @param string $message\n     * @return string\n     * @throws \\RuntimeException on connection errors\n     * @throws UnsupportedAlgorithmException if the algorithm is unsupported\n     */\n    public function sign($message)\n    {\n        // the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE\n        $packet = Strings::packSSH2(\n            'CssN',\n            Agent::SSH_AGENTC_SIGN_REQUEST,\n            $this->key_blob,\n            $message,\n            $this->flags\n        );\n        $packet = Strings::packSSH2('s', $packet);\n        if (strlen($packet) != fputs($this->fsock, $packet)) {\n            throw new \\RuntimeException('Connection closed during signing');\n        }\n\n        $length = current(unpack('N', $this->readBytes(4)));\n        $packet = $this->readBytes($length);\n\n        list($type, $signature_blob) = Strings::unpackSSH2('Cs', $packet);\n        if ($type != Agent::SSH_AGENT_SIGN_RESPONSE) {\n            throw new \\RuntimeException('Unable to retrieve signature');\n        }\n\n        if (!$this->key instanceof RSA) {\n            return $signature_blob;\n        }\n\n        list($type, $signature_blob) = Strings::unpackSSH2('ss', $signature_blob);\n\n        return $signature_blob;\n    }\n\n    /**\n     * Returns the private key\n     *\n     * @param string $type\n     * @param array $options optional\n     * @return string\n     */\n    public function toString($type, array $options = [])\n    {\n        throw new \\RuntimeException('ssh-agent does not provide a mechanism to get the private key');\n    }\n\n    /**\n     * Sets the password\n     *\n     * @param string|bool $password\n     * @return never\n     */\n    public function withPassword($password = false)\n    {\n        throw new \\RuntimeException('ssh-agent does not provide a mechanism to get the private key');\n    }\n\n    /**\n     * Sets the comment\n     */\n    public function withComment($comment = null)\n    {\n        $new = clone $this;\n        $new->comment = $comment;\n        return $new;\n    }\n\n    /**\n     * Returns the comment\n     *\n     * @return null|string\n     */\n    public function getComment()\n    {\n        return $this->comment;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php",
    "content": "<?php\n\n/**\n * Pure-PHP ssh-agent client.\n *\n * {@internal See http://api.libssh.org/rfc/PROTOCOL.agent}\n *\n * PHP version 5\n *\n * Here are some examples of how to use this library:\n * <code>\n * <?php\n *    include 'vendor/autoload.php';\n *\n *    $agent = new \\phpseclib3\\System\\SSH\\Agent();\n *\n *    $ssh = new \\phpseclib3\\Net\\SSH2('www.domain.tld');\n *    if (!$ssh->login('username', $agent)) {\n *        exit('Login Failed');\n *    }\n *\n *    echo $ssh->exec('pwd');\n *    echo $ssh->exec('ls -la');\n * ?>\n * </code>\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2014 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\System\\SSH;\n\nuse phpseclib3\\Common\\Functions\\Strings;\nuse phpseclib3\\Crypt\\Common\\PublicKey;\nuse phpseclib3\\Crypt\\PublicKeyLoader;\nuse phpseclib3\\Crypt\\RSA;\nuse phpseclib3\\Exception\\BadConfigurationException;\nuse phpseclib3\\Net\\SSH2;\nuse phpseclib3\\System\\SSH\\Agent\\Identity;\n\n/**\n * Pure-PHP ssh-agent client identity factory\n *\n * requestIdentities() method pumps out \\phpseclib3\\System\\SSH\\Agent\\Identity objects\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\nclass Agent\n{\n    use Common\\Traits\\ReadBytes;\n\n    // Message numbers\n\n    // to request SSH1 keys you have to use SSH_AGENTC_REQUEST_RSA_IDENTITIES (1)\n    const SSH_AGENTC_REQUEST_IDENTITIES = 11;\n    // this is the SSH2 response; the SSH1 response is SSH_AGENT_RSA_IDENTITIES_ANSWER (2).\n    const SSH_AGENT_IDENTITIES_ANSWER = 12;\n    // the SSH1 request is SSH_AGENTC_RSA_CHALLENGE (3)\n    const SSH_AGENTC_SIGN_REQUEST = 13;\n    // the SSH1 response is SSH_AGENT_RSA_RESPONSE (4)\n    const SSH_AGENT_SIGN_RESPONSE = 14;\n\n    // Agent forwarding status\n\n    // no forwarding requested and not active\n    const FORWARD_NONE = 0;\n    // request agent forwarding when opportune\n    const FORWARD_REQUEST = 1;\n    // forwarding has been request and is active\n    const FORWARD_ACTIVE = 2;\n\n    /**\n     * Unused\n     */\n    const SSH_AGENT_FAILURE = 5;\n\n    /**\n     * Socket Resource\n     *\n     * @var resource\n     */\n    private $fsock;\n\n    /**\n     * Agent forwarding status\n     *\n     * @var int\n     */\n    private $forward_status = self::FORWARD_NONE;\n\n    /**\n     * Buffer for accumulating forwarded authentication\n     * agent data arriving on SSH data channel destined\n     * for agent unix socket\n     *\n     * @var string\n     */\n    private $socket_buffer = '';\n\n    /**\n     * Tracking the number of bytes we are expecting\n     * to arrive for the agent socket on the SSH data\n     * channel\n     *\n     * @var int\n     */\n    private $expected_bytes = 0;\n\n    /**\n     * Default Constructor\n     *\n     * @return Agent\n     * @throws BadConfigurationException if SSH_AUTH_SOCK cannot be found\n     * @throws \\RuntimeException on connection errors\n     */\n    public function __construct($address = null)\n    {\n        if (!$address) {\n            switch (true) {\n                case isset($_SERVER['SSH_AUTH_SOCK']):\n                    $address = $_SERVER['SSH_AUTH_SOCK'];\n                    break;\n                case isset($_ENV['SSH_AUTH_SOCK']):\n                    $address = $_ENV['SSH_AUTH_SOCK'];\n                    break;\n                default:\n                    throw new BadConfigurationException('SSH_AUTH_SOCK not found');\n            }\n        }\n\n        if (in_array('unix', stream_get_transports())) {\n            $this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);\n            if (!$this->fsock) {\n                throw new \\RuntimeException(\"Unable to connect to ssh-agent (Error $errno: $errstr)\");\n            }\n        } else {\n            if (substr($address, 0, 9) != '\\\\\\\\.\\\\pipe\\\\' || strpos(substr($address, 9), '\\\\') !== false) {\n                throw new \\RuntimeException('Address is not formatted as a named pipe should be');\n            }\n\n            $this->fsock = fopen($address, 'r+b');\n            if (!$this->fsock) {\n                throw new \\RuntimeException('Unable to open address');\n            }\n        }\n    }\n\n    /**\n     * Request Identities\n     *\n     * See \"2.5.2 Requesting a list of protocol 2 keys\"\n     * Returns an array containing zero or more \\phpseclib3\\System\\SSH\\Agent\\Identity objects\n     *\n     * @return array\n     * @throws \\RuntimeException on receipt of unexpected packets\n     */\n    public function requestIdentities()\n    {\n        if (!$this->fsock) {\n            return [];\n        }\n\n        $packet = pack('NC', 1, self::SSH_AGENTC_REQUEST_IDENTITIES);\n        if (strlen($packet) != fputs($this->fsock, $packet)) {\n            throw new \\RuntimeException('Connection closed while requesting identities');\n        }\n\n        $length = current(unpack('N', $this->readBytes(4)));\n        $packet = $this->readBytes($length);\n\n        list($type, $keyCount) = Strings::unpackSSH2('CN', $packet);\n        if ($type != self::SSH_AGENT_IDENTITIES_ANSWER) {\n            throw new \\RuntimeException('Unable to request identities');\n        }\n\n        $identities = [];\n        for ($i = 0; $i < $keyCount; $i++) {\n            list($key_blob, $comment) = Strings::unpackSSH2('ss', $packet);\n            $temp = $key_blob;\n            list($key_type) = Strings::unpackSSH2('s', $temp);\n            switch ($key_type) {\n                case 'ssh-rsa':\n                case 'ssh-dss':\n                case 'ssh-ed25519':\n                case 'ecdsa-sha2-nistp256':\n                case 'ecdsa-sha2-nistp384':\n                case 'ecdsa-sha2-nistp521':\n                    $key = PublicKeyLoader::load($key_type . ' ' . base64_encode($key_blob));\n            }\n            // resources are passed by reference by default\n            if (isset($key)) {\n                $identity = (new Identity($this->fsock))\n                    ->withPublicKey($key)\n                    ->withPublicKeyBlob($key_blob)\n                    ->withComment($comment);\n                $identities[] = $identity;\n                unset($key);\n            }\n        }\n\n        return $identities;\n    }\n\n    /**\n     * Returns the SSH Agent identity matching a given public key or null if no identity is found\n     *\n     * @return ?Identity\n     */\n    public function findIdentityByPublicKey(PublicKey $key)\n    {\n        $identities = $this->requestIdentities();\n        $key = (string) $key;\n        foreach ($identities as $identity) {\n            if (((string) $identity->getPublicKey()) == $key) {\n                return $identity;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Signal that agent forwarding should\n     * be requested when a channel is opened\n     *\n     * @return void\n     */\n    public function startSSHForwarding()\n    {\n        if ($this->forward_status == self::FORWARD_NONE) {\n            $this->forward_status = self::FORWARD_REQUEST;\n        }\n    }\n\n    /**\n     * Request agent forwarding of remote server\n     *\n     * @param SSH2 $ssh\n     * @return bool\n     */\n    private function request_forwarding(SSH2 $ssh)\n    {\n        if (!$ssh->requestAgentForwarding()) {\n            return false;\n        }\n\n        $this->forward_status = self::FORWARD_ACTIVE;\n\n        return true;\n    }\n\n    /**\n     * On successful channel open\n     *\n     * This method is called upon successful channel\n     * open to give the SSH Agent an opportunity\n     * to take further action. i.e. request agent forwarding\n     *\n     * @param SSH2 $ssh\n     */\n    public function registerChannelOpen(SSH2 $ssh)\n    {\n        if ($this->forward_status == self::FORWARD_REQUEST) {\n            $this->request_forwarding($ssh);\n        }\n    }\n\n    /**\n     * Forward data to SSH Agent and return data reply\n     *\n     * @param string $data\n     * @return string Data from SSH Agent\n     * @throws \\RuntimeException on connection errors\n     */\n    public function forwardData($data)\n    {\n        if ($this->expected_bytes > 0) {\n            $this->socket_buffer .= $data;\n            $this->expected_bytes -= strlen($data);\n        } else {\n            $agent_data_bytes = current(unpack('N', $data));\n            $current_data_bytes = strlen($data);\n            $this->socket_buffer = $data;\n            if ($current_data_bytes != $agent_data_bytes + 4) {\n                $this->expected_bytes = ($agent_data_bytes + 4) - $current_data_bytes;\n                return false;\n            }\n        }\n\n        if (strlen($this->socket_buffer) != fwrite($this->fsock, $this->socket_buffer)) {\n            throw new \\RuntimeException('Connection closed attempting to forward data to SSH agent');\n        }\n\n        $this->socket_buffer = '';\n        $this->expected_bytes = 0;\n\n        $agent_reply_bytes = current(unpack('N', $this->readBytes(4)));\n\n        $agent_reply_data = $this->readBytes($agent_reply_bytes);\n        $agent_reply_data = current(unpack('a*', $agent_reply_data));\n\n        return pack('Na*', $agent_reply_bytes, $agent_reply_data);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Common/Traits/ReadBytes.php",
    "content": "<?php\n\n/**\n * ReadBytes trait\n *\n * PHP version 5\n *\n * @author    Jim Wigginton <terrafrost@php.net>\n * @copyright 2015 Jim Wigginton\n * @license   http://www.opensource.org/licenses/mit-license.html  MIT License\n * @link      http://phpseclib.sourceforge.net\n */\n\nnamespace phpseclib3\\System\\SSH\\Common\\Traits;\n\n/**\n * ReadBytes trait\n *\n * @author  Jim Wigginton <terrafrost@php.net>\n */\ntrait ReadBytes\n{\n    /**\n     * Read data\n     *\n     * @param int $length\n     * @throws \\RuntimeException on connection errors\n     */\n    public function readBytes($length)\n    {\n        $temp = fread($this->fsock, $length);\n        if (strlen($temp) != $length) {\n            throw new \\RuntimeException(\"Expected $length bytes; got \" . strlen($temp));\n        }\n        return $temp;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/bootstrap.php",
    "content": "<?php\n\n/**\n * Bootstrapping File for phpseclib\n *\n * composer isn't a requirement for phpseclib 2.0 but this file isn't really required\n * either. it's a bonus for those using composer but if you're not phpseclib will\n * still work\n *\n * @license http://www.opensource.org/licenses/mit-license.html MIT License\n */\n\nif (extension_loaded('mbstring')) {\n    // 2 - MB_OVERLOAD_STRING\n    // mbstring.func_overload is deprecated in php 7.2 and removed in php 8.0.\n    if (version_compare(PHP_VERSION, '8.0.0') < 0 && ini_get('mbstring.func_overload') & 2) {\n        throw new UnexpectedValueException(\n            'Overloading of string functions using mbstring.func_overload ' .\n            'is not supported by phpseclib.'\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/phpseclib/phpseclib/phpseclib/openssl.cnf",
    "content": "# minimalist openssl.cnf file for use with phpseclib\n\nHOME\t\t\t= .\nRANDFILE\t\t= $ENV::HOME/.rnd\n\n[ v3_ca ]\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file, in reverse chronological order by release.\n\n## 1.0.1 - 2016-08-06\n\n### Fixed\n\n- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr\n- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr\n- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell\n- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell\n\n## 1.0.0 - 2015-12-11\n\nInitial stable release; reflects accepted PSR-6 specification\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/LICENSE.txt",
    "content": "Copyright (c) 2015 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/README.md",
    "content": "Caching Interface\n==============\n\nThis repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url].\n\nNote that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism.\n\nThe installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.\n\n[psr-url]: https://www.php-fig.org/psr/psr-6/\n[package-url]: https://packagist.org/packages/psr/cache\n[implementation-url]: https://packagist.org/providers/psr/cache-implementation\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/composer.json",
    "content": "{\n    \"name\": \"psr/cache\",\n    \"description\": \"Common interface for caching libraries\",\n    \"keywords\": [\"psr\", \"psr-6\", \"cache\"],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.0.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Cache\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/src/CacheException.php",
    "content": "<?php\n\nnamespace Psr\\Cache;\n\n/**\n * Exception interface for all exceptions thrown by an Implementing Library.\n */\ninterface CacheException extends \\Throwable\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/src/CacheItemInterface.php",
    "content": "<?php\n\nnamespace Psr\\Cache;\n\n/**\n * CacheItemInterface defines an interface for interacting with objects inside a cache.\n *\n * Each Item object MUST be associated with a specific key, which can be set\n * according to the implementing system and is typically passed by the\n * Cache\\CacheItemPoolInterface object.\n *\n * The Cache\\CacheItemInterface object encapsulates the storage and retrieval of\n * cache items. Each Cache\\CacheItemInterface is generated by a\n * Cache\\CacheItemPoolInterface object, which is responsible for any required\n * setup as well as associating the object with a unique Key.\n * Cache\\CacheItemInterface objects MUST be able to store and retrieve any type\n * of PHP value defined in the Data section of the specification.\n *\n * Calling Libraries MUST NOT instantiate Item objects themselves. They may only\n * be requested from a Pool object via the getItem() method.  Calling Libraries\n * SHOULD NOT assume that an Item created by one Implementing Library is\n * compatible with a Pool from another Implementing Library.\n */\ninterface CacheItemInterface\n{\n    /**\n     * Returns the key for the current cache item.\n     *\n     * The key is loaded by the Implementing Library, but should be available to\n     * the higher level callers when needed.\n     *\n     * @return string\n     *   The key string for this cache item.\n     */\n    public function getKey(): string;\n\n    /**\n     * Retrieves the value of the item from the cache associated with this object's key.\n     *\n     * The value returned must be identical to the value originally stored by set().\n     *\n     * If isHit() returns false, this method MUST return null. Note that null\n     * is a legitimate cached value, so the isHit() method SHOULD be used to\n     * differentiate between \"null value was found\" and \"no value was found.\"\n     *\n     * @return mixed\n     *   The value corresponding to this cache item's key, or null if not found.\n     */\n    public function get(): mixed;\n\n    /**\n     * Confirms if the cache item lookup resulted in a cache hit.\n     *\n     * Note: This method MUST NOT have a race condition between calling isHit()\n     * and calling get().\n     *\n     * @return bool\n     *   True if the request resulted in a cache hit. False otherwise.\n     */\n    public function isHit(): bool;\n\n    /**\n     * Sets the value represented by this cache item.\n     *\n     * The $value argument may be any item that can be serialized by PHP,\n     * although the method of serialization is left up to the Implementing\n     * Library.\n     *\n     * @param mixed $value\n     *   The serializable value to be stored.\n     *\n     * @return static\n     *   The invoked object.\n     */\n    public function set(mixed $value): static;\n\n    /**\n     * Sets the expiration time for this cache item.\n     *\n     * @param ?\\DateTimeInterface $expiration\n     *   The point in time after which the item MUST be considered expired.\n     *   If null is passed explicitly, a default value MAY be used. If none is set,\n     *   the value should be stored permanently or for as long as the\n     *   implementation allows.\n     *\n     * @return static\n     *   The called object.\n     */\n    public function expiresAt(?\\DateTimeInterface $expiration): static;\n\n    /**\n     * Sets the expiration time for this cache item.\n     *\n     * @param int|\\DateInterval|null $time\n     *   The period of time from the present after which the item MUST be considered\n     *   expired. An integer parameter is understood to be the time in seconds until\n     *   expiration. If null is passed explicitly, a default value MAY be used.\n     *   If none is set, the value should be stored permanently or for as long as the\n     *   implementation allows.\n     *\n     * @return static\n     *   The called object.\n     */\n    public function expiresAfter(int|\\DateInterval|null $time): static;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/src/CacheItemPoolInterface.php",
    "content": "<?php\n\nnamespace Psr\\Cache;\n\n/**\n * CacheItemPoolInterface generates CacheItemInterface objects.\n *\n * The primary purpose of Cache\\CacheItemPoolInterface is to accept a key from\n * the Calling Library and return the associated Cache\\CacheItemInterface object.\n * It is also the primary point of interaction with the entire cache collection.\n * All configuration and initialization of the Pool is left up to an\n * Implementing Library.\n */\ninterface CacheItemPoolInterface\n{\n    /**\n     * Returns a Cache Item representing the specified key.\n     *\n     * This method must always return a CacheItemInterface object, even in case of\n     * a cache miss. It MUST NOT return null.\n     *\n     * @param string $key\n     *   The key for which to return the corresponding Cache Item.\n     *\n     * @throws InvalidArgumentException\n     *   If the $key string is not a legal value a \\Psr\\Cache\\InvalidArgumentException\n     *   MUST be thrown.\n     *\n     * @return CacheItemInterface\n     *   The corresponding Cache Item.\n     */\n    public function getItem(string $key): CacheItemInterface;\n\n    /**\n     * Returns a traversable set of cache items.\n     *\n     * @param string[] $keys\n     *   An indexed array of keys of items to retrieve.\n     *\n     * @throws InvalidArgumentException\n     *   If any of the keys in $keys are not a legal value a \\Psr\\Cache\\InvalidArgumentException\n     *   MUST be thrown.\n     *\n     * @return iterable\n     *   An iterable collection of Cache Items keyed by the cache keys of\n     *   each item. A Cache item will be returned for each key, even if that\n     *   key is not found. However, if no keys are specified then an empty\n     *   traversable MUST be returned instead.\n     */\n    public function getItems(array $keys = []): iterable;\n\n    /**\n     * Confirms if the cache contains specified cache item.\n     *\n     * Note: This method MAY avoid retrieving the cached value for performance reasons.\n     * This could result in a race condition with CacheItemInterface::get(). To avoid\n     * such situation use CacheItemInterface::isHit() instead.\n     *\n     * @param string $key\n     *   The key for which to check existence.\n     *\n     * @throws InvalidArgumentException\n     *   If the $key string is not a legal value a \\Psr\\Cache\\InvalidArgumentException\n     *   MUST be thrown.\n     *\n     * @return bool\n     *   True if item exists in the cache, false otherwise.\n     */\n    public function hasItem(string $key): bool;\n\n    /**\n     * Deletes all items in the pool.\n     *\n     * @return bool\n     *   True if the pool was successfully cleared. False if there was an error.\n     */\n    public function clear(): bool;\n\n    /**\n     * Removes the item from the pool.\n     *\n     * @param string $key\n     *   The key to delete.\n     *\n     * @throws InvalidArgumentException\n     *   If the $key string is not a legal value a \\Psr\\Cache\\InvalidArgumentException\n     *   MUST be thrown.\n     *\n     * @return bool\n     *   True if the item was successfully removed. False if there was an error.\n     */\n    public function deleteItem(string $key): bool;\n\n    /**\n     * Removes multiple items from the pool.\n     *\n     * @param string[] $keys\n     *   An array of keys that should be removed from the pool.\n     *\n     * @throws InvalidArgumentException\n     *   If any of the keys in $keys are not a legal value a \\Psr\\Cache\\InvalidArgumentException\n     *   MUST be thrown.\n     *\n     * @return bool\n     *   True if the items were successfully removed. False if there was an error.\n     */\n    public function deleteItems(array $keys): bool;\n\n    /**\n     * Persists a cache item immediately.\n     *\n     * @param CacheItemInterface $item\n     *   The cache item to save.\n     *\n     * @return bool\n     *   True if the item was successfully persisted. False if there was an error.\n     */\n    public function save(CacheItemInterface $item): bool;\n\n    /**\n     * Sets a cache item to be persisted later.\n     *\n     * @param CacheItemInterface $item\n     *   The cache item to save.\n     *\n     * @return bool\n     *   False if the item could not be queued or if a commit was attempted and failed. True otherwise.\n     */\n    public function saveDeferred(CacheItemInterface $item): bool;\n\n    /**\n     * Persists any deferred cache items.\n     *\n     * @return bool\n     *   True if all not-yet-saved items were successfully saved or there were none. False otherwise.\n     */\n    public function commit(): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/cache/src/InvalidArgumentException.php",
    "content": "<?php\n\nnamespace Psr\\Cache;\n\n/**\n * Exception interface for invalid cache arguments.\n *\n * Any time an invalid argument is passed into a method it must throw an\n * exception class which implements Psr\\Cache\\InvalidArgumentException.\n */\ninterface InvalidArgumentException extends CacheException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file, in reverse chronological order by release.\n\n## 1.0.3\n\nAdd `source` link in composer.json. No code changes.\n\n## 1.0.2\n\nAllow PSR-7 (psr/http-message) 2.0. No code changes.\n\n## 1.0.1\n\nAllow installation with PHP 8. No code changes.\n\n## 1.0.0\n\nFirst stable release. No changes since 0.3.0.\n\n## 0.3.0\n\nAdded Interface suffix on exceptions\n \n## 0.2.0 \n\nAll exceptions are in `Psr\\Http\\Client` namespace\n\n## 0.1.0\n\nFirst release\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/LICENSE",
    "content": "Copyright (c) 2017 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in \nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/README.md",
    "content": "HTTP Client\n===========\n\nThis repository holds all the common code related to [PSR-18 (HTTP Client)][psr-url].\n\nNote that this is not a HTTP Client implementation of its own. It is merely abstractions that describe the components of a HTTP Client.\n\nThe installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.\n\n[psr-url]: https://www.php-fig.org/psr/psr-18\n[package-url]: https://packagist.org/packages/psr/http-client\n[implementation-url]: https://packagist.org/providers/psr/http-client-implementation\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/composer.json",
    "content": "{\n    \"name\": \"psr/http-client\",\n    \"description\": \"Common interface for HTTP clients\",\n    \"keywords\": [\"psr\", \"psr-18\", \"http\", \"http-client\"],\n    \"homepage\": \"https://github.com/php-fig/http-client\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"support\": {\n        \"source\": \"https://github.com/php-fig/http-client\"\n    },\n    \"require\": {\n        \"php\": \"^7.0 || ^8.0\",\n        \"psr/http-message\": \"^1.0 || ^2.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Http\\\\Client\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/src/ClientExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\n/**\n * Every HTTP client related exception MUST implement this interface.\n */\ninterface ClientExceptionInterface extends \\Throwable\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/src/ClientInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\ninterface ClientInterface\n{\n    /**\n     * Sends a PSR-7 request and returns a PSR-7 response.\n     *\n     * @param RequestInterface $request\n     *\n     * @return ResponseInterface\n     *\n     * @throws \\Psr\\Http\\Client\\ClientExceptionInterface If an error happens while processing the request.\n     */\n    public function sendRequest(RequestInterface $request): ResponseInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/src/NetworkExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Thrown when the request cannot be completed because of network issues.\n *\n * There is no response object as this exception is thrown when no response has been received.\n *\n * Example: the target host name can not be resolved or the connection failed.\n */\ninterface NetworkExceptionInterface extends ClientExceptionInterface\n{\n    /**\n     * Returns the request.\n     *\n     * The request object MAY be a different object from the one passed to ClientInterface::sendRequest()\n     *\n     * @return RequestInterface\n     */\n    public function getRequest(): RequestInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-client/src/RequestExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Exception for when a request failed.\n *\n * Examples:\n *      - Request is invalid (e.g. method is missing)\n *      - Runtime request errors (e.g. the body stream is not seekable)\n */\ninterface RequestExceptionInterface extends ClientExceptionInterface\n{\n    /**\n     * Returns the request.\n     *\n     * The request object MAY be a different object from the one passed to ClientInterface::sendRequest()\n     *\n     * @return RequestInterface\n     */\n    public function getRequest(): RequestInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 PHP-FIG\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/README.md",
    "content": "HTTP Factories\n==============\n\nThis repository holds all interfaces related to [PSR-17 (HTTP Factories)][psr-url].\n\nNote that this is not a HTTP Factory implementation of its own. It is merely interfaces that describe the components of a HTTP Factory.\n\nThe installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.\n\n[psr-url]: https://www.php-fig.org/psr/psr-17/\n[package-url]: https://packagist.org/packages/psr/http-factory\n[implementation-url]: https://packagist.org/providers/psr/http-factory-implementation\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/composer.json",
    "content": "{\n    \"name\": \"psr/http-factory\",\n    \"description\": \"PSR-17: Common interfaces for PSR-7 HTTP message factories\",\n    \"keywords\": [\n        \"psr\",\n        \"psr-7\",\n        \"psr-17\",\n        \"http\",\n        \"factory\",\n        \"message\",\n        \"request\",\n        \"response\"\n    ],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"support\": {\n        \"source\": \"https://github.com/php-fig/http-factory\"\n    },\n    \"require\": {\n        \"php\": \">=7.1\",\n        \"psr/http-message\": \"^1.0 || ^2.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/src/RequestFactoryInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\ninterface RequestFactoryInterface\n{\n    /**\n     * Create a new request.\n     *\n     * @param string $method The HTTP method associated with the request.\n     * @param UriInterface|string $uri The URI associated with the request. If\n     *     the value is a string, the factory MUST create a UriInterface\n     *     instance based on it.\n     *\n     * @return RequestInterface\n     */\n    public function createRequest(string $method, $uri): RequestInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/src/ResponseFactoryInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\ninterface ResponseFactoryInterface\n{\n    /**\n     * Create a new response.\n     *\n     * @param int $code HTTP status code; defaults to 200\n     * @param string $reasonPhrase Reason phrase to associate with status code\n     *     in generated response; if none is provided implementations MAY use\n     *     the defaults as suggested in the HTTP specification.\n     *\n     * @return ResponseInterface\n     */\n    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\ninterface ServerRequestFactoryInterface\n{\n    /**\n     * Create a new server request.\n     *\n     * Note that server-params are taken precisely as given - no parsing/processing\n     * of the given values is performed, and, in particular, no attempt is made to\n     * determine the HTTP method or URI, which must be provided explicitly.\n     *\n     * @param string $method The HTTP method associated with the request.\n     * @param UriInterface|string $uri The URI associated with the request. If\n     *     the value is a string, the factory MUST create a UriInterface\n     *     instance based on it.\n     * @param array $serverParams Array of SAPI parameters with which to seed\n     *     the generated request instance.\n     *\n     * @return ServerRequestInterface\n     */\n    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/src/StreamFactoryInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\ninterface StreamFactoryInterface\n{\n    /**\n     * Create a new stream from a string.\n     *\n     * The stream SHOULD be created with a temporary resource.\n     *\n     * @param string $content String content with which to populate the stream.\n     *\n     * @return StreamInterface\n     */\n    public function createStream(string $content = ''): StreamInterface;\n\n    /**\n     * Create a stream from an existing file.\n     *\n     * The file MUST be opened using the given mode, which may be any mode\n     * supported by the `fopen` function.\n     *\n     * The `$filename` MAY be any string supported by `fopen()`.\n     *\n     * @param string $filename Filename or stream URI to use as basis of stream.\n     * @param string $mode Mode with which to open the underlying filename/stream.\n     *\n     * @return StreamInterface\n     * @throws \\RuntimeException If the file cannot be opened.\n     * @throws \\InvalidArgumentException If the mode is invalid.\n     */\n    public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface;\n\n    /**\n     * Create a new stream from an existing resource.\n     *\n     * The stream MUST be readable and may be writable.\n     *\n     * @param resource $resource PHP resource to use as basis of stream.\n     *\n     * @return StreamInterface\n     */\n    public function createStreamFromResource($resource): StreamInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\ninterface UploadedFileFactoryInterface\n{\n    /**\n     * Create a new uploaded file.\n     *\n     * If a size is not provided it will be determined by checking the size of\n     * the file.\n     *\n     * @see http://php.net/manual/features.file-upload.post-method.php\n     * @see http://php.net/manual/features.file-upload.errors.php\n     *\n     * @param StreamInterface $stream Underlying stream representing the\n     *     uploaded file content.\n     * @param int|null $size in bytes\n     * @param int $error PHP file upload error\n     * @param string|null $clientFilename Filename as provided by the client, if any.\n     * @param string|null $clientMediaType Media type as provided by the client, if any.\n     *\n     * @return UploadedFileInterface\n     *\n     * @throws \\InvalidArgumentException If the file resource is not readable.\n     */\n    public function createUploadedFile(\n        StreamInterface $stream,\n        ?int $size = null,\n        int $error = \\UPLOAD_ERR_OK,\n        ?string $clientFilename = null,\n        ?string $clientMediaType = null\n    ): UploadedFileInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-factory/src/UriFactoryInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\ninterface UriFactoryInterface\n{\n    /**\n     * Create a new URI.\n     *\n     * @param string $uri\n     *\n     * @return UriInterface\n     *\n     * @throws \\InvalidArgumentException If the given URI cannot be parsed.\n     */\n    public function createUri(string $uri = ''): UriInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file, in reverse chronological order by release.\n\n## 1.0.1 - 2016-08-06\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- Updated all `@return self` annotation references in interfaces to use\n  `@return static`, which more closelly follows the semantics of the\n  specification.\n- Updated the `MessageInterface::getHeaders()` return annotation to use the\n  value `string[][]`, indicating the format is a nested array of strings.\n- Updated the `@link` annotation for `RequestInterface::withRequestTarget()`\n  to point to the correct section of RFC 7230.\n- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation\n  to add the parameter name (`$uploadedFiles`).\n- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()`\n  method to correctly reference the method parameter (it was referencing an\n  incorrect parameter name previously).\n\n## 1.0.0 - 2016-05-18\n\nInitial stable release; reflects accepted PSR-7 specification.\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/LICENSE",
    "content": "Copyright (c) 2014 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in \nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/README.md",
    "content": "PSR Http Message\n================\n\nThis repository holds all interfaces/classes/traits related to\n[PSR-7](http://www.php-fig.org/psr/psr-7/).\n\nNote that this is not a HTTP message implementation of its own. It is merely an\ninterface that describes a HTTP message. See the specification for more details.\n\nUsage\n-----\n\nBefore reading the usage guide we recommend reading the PSR-7 interfaces method list:\n\n* [`PSR-7 Interfaces Method List`](docs/PSR7-Interfaces.md)\n* [`PSR-7 Usage Guide`](docs/PSR7-Usage.md)"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/composer.json",
    "content": "{\n    \"name\": \"psr/http-message\",\n    \"description\": \"Common interface for HTTP messages\",\n    \"keywords\": [\"psr\", \"psr-7\", \"http\", \"http-message\", \"request\", \"response\"],\n    \"homepage\": \"https://github.com/php-fig/http-message\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.2 || ^8.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"2.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/docs/PSR7-Interfaces.md",
    "content": "# Interfaces\n\nThe purpose of this list is to help in finding the methods when working with PSR-7. This can be considered as a cheatsheet for PSR-7 interfaces.\n\nThe interfaces defined in PSR-7 are the following:\n\n| Class Name | Description |\n|---|---|\n| [Psr\\Http\\Message\\MessageInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagemessageinterface) | Representation of a HTTP message |\n| [Psr\\Http\\Message\\RequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagerequestinterface) | Representation of an outgoing, client-side request. |\n| [Psr\\Http\\Message\\ServerRequestInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageserverrequestinterface) | Representation of an incoming, server-side HTTP request. | \n| [Psr\\Http\\Message\\ResponseInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageresponseinterface) | Representation of an outgoing, server-side response. |\n| [Psr\\Http\\Message\\StreamInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessagestreaminterface) | Describes a data stream |\n| [Psr\\Http\\Message\\UriInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuriinterface) | Value object representing a URI. |\n| [Psr\\Http\\Message\\UploadedFileInterface](http://www.php-fig.org/psr/psr-7/#psrhttpmessageuploadedfileinterface) | Value object representing a file uploaded through an HTTP request. |\n\n## `Psr\\Http\\Message\\MessageInterface` Methods\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `getProtocolVersion()`             | Retrieve HTTP protocol version          |  1.0 or 1.1 |\n| `withProtocolVersion($version)`    | Returns new message instance with given HTTP protocol version          |      |\n| `getHeaders()`                     | Retrieve all HTTP Headers               | [Request Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields), [Response Header List](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_fields)      |\n| `hasHeader($name)`                 | Checks if HTTP Header with given name exists  | |\n| `getHeader($name)`                 | Retrieves a array with the values for a single header | |\n| `getHeaderLine($name)`             | Retrieves a comma-separated string of the values for a single header |  |\n| `withHeader($name, $value)`        | Returns new message instance with given HTTP Header | if the header existed in the original instance, replaces the header value from the original message with the value provided when creating the new instance. |\n| `withAddedHeader($name, $value)`   | Returns new message instance with appended value to given header | If header already exists value will be appended, if not a new header will be created |\n| `withoutHeader($name)`             | Removes HTTP Header with given name| |\n| `getBody()`                        | Retrieves the HTTP Message Body | Returns object implementing `StreamInterface`|\n| `withBody(StreamInterface $body)`  | Returns new message instance with given HTTP Message Body | |\n\n\n## `Psr\\Http\\Message\\RequestInterface` Methods\n\nSame methods as `Psr\\Http\\Message\\MessageInterface`  + the following methods:\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `getRequestTarget()`                | Retrieves the message's request target              | origin-form, absolute-form, authority-form, asterisk-form ([RFC7230](https://www.rfc-editor.org/rfc/rfc7230.txt)) |\n| `withRequestTarget($requestTarget)` | Return a new message instance with the specific request-target |      |\n| `getMethod()`                       | Retrieves the HTTP method of the request.  |  GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE (defined in [RFC7231](https://tools.ietf.org/html/rfc7231)), PATCH (defined in [RFC5789](https://tools.ietf.org/html/rfc5789)) |\n| `withMethod($method)`               | Returns a new message instance with the provided HTTP method  | |\n| `getUri()`                 | Retrieves the URI instance | |\n| `withUri(UriInterface $uri, $preserveHost = false)` | Returns a new message instance with the provided URI |  |\n\n\n## `Psr\\Http\\Message\\ServerRequestInterface` Methods\n\nSame methods as `Psr\\Http\\Message\\RequestInterface`  + the following methods:\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `getServerParams() `               | Retrieve server parameters  | Typically derived from `$_SERVER`  |\n| `getCookieParams()`                | Retrieves cookies sent by the client to the server. | Typically derived from `$_COOKIES` |\n| `withCookieParams(array $cookies)` |  Returns a new request instance with the specified cookies      |   | \n| `withQueryParams(array $query)` | Returns a new request instance with the specified query string arguments  |  |\n| `getUploadedFiles()` | Retrieve normalized file upload data  |  |\n| `withUploadedFiles(array $uploadedFiles)` | Returns a new request instance with the specified uploaded files  |  |\n| `getParsedBody()` | Retrieve any parameters provided in the request body  |  |\n| `withParsedBody($data)` | Returns a new request instance with the specified body parameters  |  |\n| `getAttributes()` | Retrieve attributes derived from the request  |  |\n| `getAttribute($name, $default = null)` | Retrieve a single derived request attribute  |  |\n| `withAttribute($name, $value)` | Returns a new request instance with the specified derived request attribute  |  |\n| `withoutAttribute($name)` | Returns a new request instance that without the specified derived request attribute  |  |\n\n## `Psr\\Http\\Message\\ResponseInterface` Methods:\n\nSame methods as `Psr\\Http\\Message\\MessageInterface`  + the following methods:\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `getStatusCode()` | Gets the response status code. | |\n| `withStatus($code, $reasonPhrase = '')` | Returns a new response instance with the specified status code and, optionally, reason phrase. | |\n| `getReasonPhrase()` | Gets the response reason phrase associated with the status code. | |\n\n##  `Psr\\Http\\Message\\StreamInterface` Methods\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `__toString()` | Reads all data from the stream into a string, from the beginning to end. | |\n| `close()` | Closes the stream and any underlying resources. | |\n| `detach()` | Separates any underlying resources from the stream. | |\n| `getSize()` | Get the size of the stream if known. | |\n| `eof()` | Returns true if the stream is at the end of the stream.| |\n| `isSeekable()` |  Returns whether or not the stream is seekable. | |\n| `seek($offset, $whence = SEEK_SET)` | Seek to a position in the stream. | |\n| `rewind()` | Seek to the beginning of the stream. | |\n| `isWritable()` | Returns whether or not the stream is writable. | |\n| `write($string)` | Write data to the stream. | |\n| `isReadable()` | Returns whether or not the stream is readable. | |\n| `read($length)` | Read data from the stream. | |\n| `getContents()` | Returns the remaining contents in a string | |\n| `getMetadata($key = null)()` | Get stream metadata as an associative array or retrieve a specific key. | |\n\n## `Psr\\Http\\Message\\UriInterface` Methods\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `getScheme()` | Retrieve the scheme component of the URI. | |\n| `getAuthority()` | Retrieve the authority component of the URI. | |\n| `getUserInfo()` | Retrieve the user information component of the URI. | |\n| `getHost()` | Retrieve the host component of the URI. | |\n| `getPort()` | Retrieve the port component of the URI. | |\n| `getPath()` | Retrieve the path component of the URI. | |\n| `getQuery()` | Retrieve the query string of the URI. | |\n| `getFragment()` | Retrieve the fragment component of the URI. | |\n| `withScheme($scheme)` | Return an instance with the specified scheme. | |\n| `withUserInfo($user, $password = null)` | Return an instance with the specified user information. | |\n| `withHost($host)` | Return an instance with the specified host. | |\n| `withPort($port)` | Return an instance with the specified port. | |\n| `withPath($path)` | Return an instance with the specified path. | |\n| `withQuery($query)` | Return an instance with the specified query string. | |\n| `withFragment($fragment)` | Return an instance with the specified URI fragment. | |\n| `__toString()` | Return the string representation as a URI reference. | |\n\n## `Psr\\Http\\Message\\UploadedFileInterface` Methods\n\n| Method Name                        | Description | Notes |\n|------------------------------------| ----------- | ----- |\n| `getStream()` | Retrieve a stream representing the uploaded file. | |\n| `moveTo($targetPath)` | Move the uploaded file to a new location. | |\n| `getSize()` | Retrieve the file size. | |\n| `getError()` | Retrieve the error associated with the uploaded file. | |\n| `getClientFilename()` | Retrieve the filename sent by the client. | |\n| `getClientMediaType()` | Retrieve the media type sent by the client. | |\n\n> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface`  because the `Request` and the `Response` are `HTTP Messages`.\n> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\\Http\\Message\\MessageInterface` methods are considered.\n\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/docs/PSR7-Usage.md",
    "content": "### PSR-7 Usage\n\nAll PSR-7 applications comply with these interfaces \nThey were created to establish a standard between middleware implementations.\n\n> `RequestInterface`, `ServerRequestInterface`, `ResponseInterface` extend `MessageInterface`  because the `Request` and the `Response` are `HTTP Messages`.\n> When using `ServerRequestInterface`, both `RequestInterface` and `Psr\\Http\\Message\\MessageInterface` methods are considered.\n\n\nThe following examples will illustrate how basic operations are done in PSR-7.\n\n##### Examples\n\n\nFor this examples to work (at least) a PSR-7 implementation package is required. (eg: zendframework/zend-diactoros, guzzlehttp/psr7, slim/slim, etc)\nAll PSR-7 implementations should have the same behaviour.\n\nThe following will be assumed: \n`$request` is an object of `Psr\\Http\\Message\\RequestInterface` and\n\n`$response` is an object implementing `Psr\\Http\\Message\\RequestInterface`\n\n\n### Working with HTTP Headers\n\n#### Adding headers to response:\n\n```php\n$response->withHeader('My-Custom-Header', 'My Custom Message');\n```\n\n#### Appending values to headers\n\n```php\n$response->withAddedHeader('My-Custom-Header', 'The second message');\n```\n\n#### Checking if header exists:\n\n```php\n$request->hasHeader('My-Custom-Header'); // will return false\n$response->hasHeader('My-Custom-Header'); // will return true\n```\n\n> Note: My-Custom-Header was only added in the Response\n\n#### Getting comma-separated values from a header (also applies to request)\n\n```php\n// getting value from request headers\n$request->getHeaderLine('Content-Type'); // will return: \"text/html; charset=UTF-8\"\n// getting value from response headers\n$response->getHeaderLine('My-Custom-Header'); // will return:  \"My Custom Message; The second message\"\n```\n\n#### Getting array of value from a header (also applies to request)\n```php\n// getting value from request headers\n$request->getHeader('Content-Type'); // will return: [\"text/html\", \"charset=UTF-8\"]\n// getting value from response headers\n$response->getHeader('My-Custom-Header'); // will return:  [\"My Custom Message\",  \"The second message\"]\n```\n\n#### Removing headers from HTTP Messages\n```php\n// removing a header from Request, removing deprecated \"Content-MD5\" header\n$request->withoutHeader('Content-MD5'); \n\n// removing a header from Response\n// effect: the browser won't know the size of the stream\n// the browser will download the stream till it ends\n$response->withoutHeader('Content-Length');\n```\n\n### Working with HTTP Message Body\n\nWhen working with the PSR-7 there are two methods of implementation:\n#### 1. Getting the body separately\n\n> This method makes the body handling easier to understand and is useful when repeatedly calling body methods. (You only call `getBody()` once). Using this method mistakes like `$response->write()` are also prevented.\n\n```php\n$body = $response->getBody();\n// operations on body, eg. read, write, seek\n// ...\n// replacing the old body\n$response->withBody($body); \n// this last statement is optional as we working with objects\n// in this case the \"new\" body is same with the \"old\" one\n// the $body variable has the same value as the one in $request, only the reference is passed\n```\n\n#### 2. Working directly on response\n\n> This method is useful when only performing few operations as the `$request->getBody()` statement fragment is required\n\n```php\n$response->getBody()->write('hello');\n```\n\n### Getting the body contents\n\nThe following snippet gets the contents of a stream contents.\n> Note: Streams must be rewinded, if content was written into streams, it will be ignored when calling `getContents()` because the stream pointer is set to the last character, which is `\\0` - meaning end of stream.\n```php \n$body = $response->getBody();\n$body->rewind(); // or $body->seek(0);\n$bodyText = $body->getContents();\n```\n> Note: If `$body->seek(1)` is called before `$body->getContents()`, the first character will be ommited as the starting pointer is set to `1`, not `0`. This is why using `$body->rewind()` is recommended.\n\n### Append to body\n\n```php\n$response->getBody()->write('Hello'); // writing directly\n$body = $request->getBody(); // which is a `StreamInterface`\n$body->write('xxxxx');\n```\n\n### Prepend to body\nPrepending is different when it comes to streams. The content must be copied before writing the content to be prepended.\nThe following example will explain the behaviour of streams.\n\n```php\n// assuming our response is initially empty\n$body = $repsonse->getBody();\n// writing the string \"abcd\"\n$body->write('abcd');\n\n// seeking to start of stream\n$body->seek(0);\n// writing 'ef'\n$body->write('ef'); // at this point the stream contains \"efcd\"\n```\n\n#### Prepending by rewriting separately\n\n```php\n// assuming our response body stream only contains: \"abcd\"\n$body = $response->getBody();\n$body->rewind();\n$contents = $body->getContents(); // abcd\n// seeking the stream to beginning\n$body->rewind();\n$body->write('ef'); // stream contains \"efcd\"\n$body->write($contents); // stream contains \"efabcd\"\n```\n\n> Note: `getContents()` seeks the stream while reading it, therefore if the second `rewind()` method call was not present the stream would have resulted in `abcdefabcd` because the `write()` method appends to stream if not preceeded by `rewind()` or `seek(0)`.\n\n#### Prepending by using contents as a string\n```php\n$body = $response->getBody();\n$body->rewind();\n$contents = $body->getContents(); // efabcd\n$contents = 'ef'.$contents;\n$body->rewind();\n$body->write($contents);\n```\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/MessageInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * HTTP messages consist of requests from a client to a server and responses\n * from a server to a client. This interface defines the methods common to\n * each.\n *\n * Messages are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n *\n * @link http://www.ietf.org/rfc/rfc7230.txt\n * @link http://www.ietf.org/rfc/rfc7231.txt\n */\ninterface MessageInterface\n{\n    /**\n     * Retrieves the HTTP protocol version as a string.\n     *\n     * The string MUST contain only the HTTP version number (e.g., \"1.1\", \"1.0\").\n     *\n     * @return string HTTP protocol version.\n     */\n    public function getProtocolVersion(): string;\n\n    /**\n     * Return an instance with the specified HTTP protocol version.\n     *\n     * The version string MUST contain only the HTTP version number (e.g.,\n     * \"1.1\", \"1.0\").\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new protocol version.\n     *\n     * @param string $version HTTP protocol version\n     * @return static\n     */\n    public function withProtocolVersion(string $version): MessageInterface;\n\n    /**\n     * Retrieves all message header values.\n     *\n     * The keys represent the header name as it will be sent over the wire, and\n     * each value is an array of strings associated with the header.\n     *\n     *     // Represent the headers as a string\n     *     foreach ($message->getHeaders() as $name => $values) {\n     *         echo $name . \": \" . implode(\", \", $values);\n     *     }\n     *\n     *     // Emit headers iteratively:\n     *     foreach ($message->getHeaders() as $name => $values) {\n     *         foreach ($values as $value) {\n     *             header(sprintf('%s: %s', $name, $value), false);\n     *         }\n     *     }\n     *\n     * While header names are not case-sensitive, getHeaders() will preserve the\n     * exact case in which headers were originally specified.\n     *\n     * @return string[][] Returns an associative array of the message's headers. Each\n     *     key MUST be a header name, and each value MUST be an array of strings\n     *     for that header.\n     */\n    public function getHeaders(): array;\n\n    /**\n     * Checks if a header exists by the given case-insensitive name.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @return bool Returns true if any header names match the given header\n     *     name using a case-insensitive string comparison. Returns false if\n     *     no matching header name is found in the message.\n     */\n    public function hasHeader(string $name): bool;\n\n    /**\n     * Retrieves a message header value by the given case-insensitive name.\n     *\n     * This method returns an array of all the header values of the given\n     * case-insensitive header name.\n     *\n     * If the header does not appear in the message, this method MUST return an\n     * empty array.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @return string[] An array of string values as provided for the given\n     *    header. If the header does not appear in the message, this method MUST\n     *    return an empty array.\n     */\n    public function getHeader(string $name): array;\n\n    /**\n     * Retrieves a comma-separated string of the values for a single header.\n     *\n     * This method returns all of the header values of the given\n     * case-insensitive header name as a string concatenated together using\n     * a comma.\n     *\n     * NOTE: Not all header values may be appropriately represented using\n     * comma concatenation. For such headers, use getHeader() instead\n     * and supply your own delimiter when concatenating.\n     *\n     * If the header does not appear in the message, this method MUST return\n     * an empty string.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @return string A string of values as provided for the given header\n     *    concatenated together using a comma. If the header does not appear in\n     *    the message, this method MUST return an empty string.\n     */\n    public function getHeaderLine(string $name): string;\n\n    /**\n     * Return an instance with the provided value replacing the specified header.\n     *\n     * While header names are case-insensitive, the casing of the header will\n     * be preserved by this function, and returned from getHeaders().\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new and/or updated header and value.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @param string|string[] $value Header value(s).\n     * @return static\n     * @throws \\InvalidArgumentException for invalid header names or values.\n     */\n    public function withHeader(string $name, $value): MessageInterface;\n\n    /**\n     * Return an instance with the specified header appended with the given value.\n     *\n     * Existing values for the specified header will be maintained. The new\n     * value(s) will be appended to the existing list. If the header did not\n     * exist previously, it will be added.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new header and/or value.\n     *\n     * @param string $name Case-insensitive header field name to add.\n     * @param string|string[] $value Header value(s).\n     * @return static\n     * @throws \\InvalidArgumentException for invalid header names or values.\n     */\n    public function withAddedHeader(string $name, $value): MessageInterface;\n\n    /**\n     * Return an instance without the specified header.\n     *\n     * Header resolution MUST be done without case-sensitivity.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that removes\n     * the named header.\n     *\n     * @param string $name Case-insensitive header field name to remove.\n     * @return static\n     */\n    public function withoutHeader(string $name): MessageInterface;\n\n    /**\n     * Gets the body of the message.\n     *\n     * @return StreamInterface Returns the body as a stream.\n     */\n    public function getBody(): StreamInterface;\n\n    /**\n     * Return an instance with the specified message body.\n     *\n     * The body MUST be a StreamInterface object.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return a new instance that has the\n     * new body stream.\n     *\n     * @param StreamInterface $body Body.\n     * @return static\n     * @throws \\InvalidArgumentException When the body is not valid.\n     */\n    public function withBody(StreamInterface $body): MessageInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/RequestInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Representation of an outgoing, client-side request.\n *\n * Per the HTTP specification, this interface includes properties for\n * each of the following:\n *\n * - Protocol version\n * - HTTP method\n * - URI\n * - Headers\n * - Message body\n *\n * During construction, implementations MUST attempt to set the Host header from\n * a provided URI if no Host header is provided.\n *\n * Requests are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n */\ninterface RequestInterface extends MessageInterface\n{\n    /**\n     * Retrieves the message's request target.\n     *\n     * Retrieves the message's request-target either as it will appear (for\n     * clients), as it appeared at request (for servers), or as it was\n     * specified for the instance (see withRequestTarget()).\n     *\n     * In most cases, this will be the origin-form of the composed URI,\n     * unless a value was provided to the concrete implementation (see\n     * withRequestTarget() below).\n     *\n     * If no URI is available, and no request-target has been specifically\n     * provided, this method MUST return the string \"/\".\n     *\n     * @return string\n     */\n    public function getRequestTarget(): string;\n\n    /**\n     * Return an instance with the specific request-target.\n     *\n     * If the request needs a non-origin-form request-target — e.g., for\n     * specifying an absolute-form, authority-form, or asterisk-form —\n     * this method may be used to create an instance with the specified\n     * request-target, verbatim.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * changed request target.\n     *\n     * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various\n     *     request-target forms allowed in request messages)\n     * @param string $requestTarget\n     * @return static\n     */\n    public function withRequestTarget(string $requestTarget): RequestInterface;\n\n\n    /**\n     * Retrieves the HTTP method of the request.\n     *\n     * @return string Returns the request method.\n     */\n    public function getMethod(): string;\n\n    /**\n     * Return an instance with the provided HTTP method.\n     *\n     * While HTTP method names are typically all uppercase characters, HTTP\n     * method names are case-sensitive and thus implementations SHOULD NOT\n     * modify the given string.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * changed request method.\n     *\n     * @param string $method Case-sensitive method.\n     * @return static\n     * @throws \\InvalidArgumentException for invalid HTTP methods.\n     */\n    public function withMethod(string $method): RequestInterface;\n\n    /**\n     * Retrieves the URI instance.\n     *\n     * This method MUST return a UriInterface instance.\n     *\n     * @link http://tools.ietf.org/html/rfc3986#section-4.3\n     * @return UriInterface Returns a UriInterface instance\n     *     representing the URI of the request.\n     */\n    public function getUri(): UriInterface;\n\n    /**\n     * Returns an instance with the provided URI.\n     *\n     * This method MUST update the Host header of the returned request by\n     * default if the URI contains a host component. If the URI does not\n     * contain a host component, any pre-existing Host header MUST be carried\n     * over to the returned request.\n     *\n     * You can opt-in to preserving the original state of the Host header by\n     * setting `$preserveHost` to `true`. When `$preserveHost` is set to\n     * `true`, this method interacts with the Host header in the following ways:\n     *\n     * - If the Host header is missing or empty, and the new URI contains\n     *   a host component, this method MUST update the Host header in the returned\n     *   request.\n     * - If the Host header is missing or empty, and the new URI does not contain a\n     *   host component, this method MUST NOT update the Host header in the returned\n     *   request.\n     * - If a Host header is present and non-empty, this method MUST NOT update\n     *   the Host header in the returned request.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new UriInterface instance.\n     *\n     * @link http://tools.ietf.org/html/rfc3986#section-4.3\n     * @param UriInterface $uri New request URI to use.\n     * @param bool $preserveHost Preserve the original state of the Host header.\n     * @return static\n     */\n    public function withUri(UriInterface $uri, bool $preserveHost = false): RequestInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/ResponseInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Representation of an outgoing, server-side response.\n *\n * Per the HTTP specification, this interface includes properties for\n * each of the following:\n *\n * - Protocol version\n * - Status code and reason phrase\n * - Headers\n * - Message body\n *\n * Responses are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n */\ninterface ResponseInterface extends MessageInterface\n{\n    /**\n     * Gets the response status code.\n     *\n     * The status code is a 3-digit integer result code of the server's attempt\n     * to understand and satisfy the request.\n     *\n     * @return int Status code.\n     */\n    public function getStatusCode(): int;\n\n    /**\n     * Return an instance with the specified status code and, optionally, reason phrase.\n     *\n     * If no reason phrase is specified, implementations MAY choose to default\n     * to the RFC 7231 or IANA recommended reason phrase for the response's\n     * status code.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated status and reason phrase.\n     *\n     * @link http://tools.ietf.org/html/rfc7231#section-6\n     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n     * @param int $code The 3-digit integer result code to set.\n     * @param string $reasonPhrase The reason phrase to use with the\n     *     provided status code; if none is provided, implementations MAY\n     *     use the defaults as suggested in the HTTP specification.\n     * @return static\n     * @throws \\InvalidArgumentException For invalid status code arguments.\n     */\n    public function withStatus(int $code, string $reasonPhrase = ''): ResponseInterface;\n\n    /**\n     * Gets the response reason phrase associated with the status code.\n     *\n     * Because a reason phrase is not a required element in a response\n     * status line, the reason phrase value MAY be null. Implementations MAY\n     * choose to return the default RFC 7231 recommended reason phrase (or those\n     * listed in the IANA HTTP Status Code Registry) for the response's\n     * status code.\n     *\n     * @link http://tools.ietf.org/html/rfc7231#section-6\n     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n     * @return string Reason phrase; must return an empty string if none present.\n     */\n    public function getReasonPhrase(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/ServerRequestInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Representation of an incoming, server-side HTTP request.\n *\n * Per the HTTP specification, this interface includes properties for\n * each of the following:\n *\n * - Protocol version\n * - HTTP method\n * - URI\n * - Headers\n * - Message body\n *\n * Additionally, it encapsulates all data as it has arrived to the\n * application from the CGI and/or PHP environment, including:\n *\n * - The values represented in $_SERVER.\n * - Any cookies provided (generally via $_COOKIE)\n * - Query string arguments (generally via $_GET, or as parsed via parse_str())\n * - Upload files, if any (as represented by $_FILES)\n * - Deserialized body parameters (generally from $_POST)\n *\n * $_SERVER values MUST be treated as immutable, as they represent application\n * state at the time of request; as such, no methods are provided to allow\n * modification of those values. The other values provide such methods, as they\n * can be restored from $_SERVER or the request body, and may need treatment\n * during the application (e.g., body parameters may be deserialized based on\n * content type).\n *\n * Additionally, this interface recognizes the utility of introspecting a\n * request to derive and match additional parameters (e.g., via URI path\n * matching, decrypting cookie values, deserializing non-form-encoded body\n * content, matching authorization headers to users, etc). These parameters\n * are stored in an \"attributes\" property.\n *\n * Requests are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n */\ninterface ServerRequestInterface extends RequestInterface\n{\n    /**\n     * Retrieve server parameters.\n     *\n     * Retrieves data related to the incoming request environment,\n     * typically derived from PHP's $_SERVER superglobal. The data IS NOT\n     * REQUIRED to originate from $_SERVER.\n     *\n     * @return array\n     */\n    public function getServerParams(): array;\n\n    /**\n     * Retrieve cookies.\n     *\n     * Retrieves cookies sent by the client to the server.\n     *\n     * The data MUST be compatible with the structure of the $_COOKIE\n     * superglobal.\n     *\n     * @return array\n     */\n    public function getCookieParams(): array;\n\n    /**\n     * Return an instance with the specified cookies.\n     *\n     * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST\n     * be compatible with the structure of $_COOKIE. Typically, this data will\n     * be injected at instantiation.\n     *\n     * This method MUST NOT update the related Cookie header of the request\n     * instance, nor related values in the server params.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated cookie values.\n     *\n     * @param array $cookies Array of key/value pairs representing cookies.\n     * @return static\n     */\n    public function withCookieParams(array $cookies): ServerRequestInterface;\n\n    /**\n     * Retrieve query string arguments.\n     *\n     * Retrieves the deserialized query string arguments, if any.\n     *\n     * Note: the query params might not be in sync with the URI or server\n     * params. If you need to ensure you are only getting the original\n     * values, you may need to parse the query string from `getUri()->getQuery()`\n     * or from the `QUERY_STRING` server param.\n     *\n     * @return array\n     */\n    public function getQueryParams(): array;\n\n    /**\n     * Return an instance with the specified query string arguments.\n     *\n     * These values SHOULD remain immutable over the course of the incoming\n     * request. They MAY be injected during instantiation, such as from PHP's\n     * $_GET superglobal, or MAY be derived from some other value such as the\n     * URI. In cases where the arguments are parsed from the URI, the data\n     * MUST be compatible with what PHP's parse_str() would return for\n     * purposes of how duplicate query parameters are handled, and how nested\n     * sets are handled.\n     *\n     * Setting query string arguments MUST NOT change the URI stored by the\n     * request, nor the values in the server params.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated query string arguments.\n     *\n     * @param array $query Array of query string arguments, typically from\n     *     $_GET.\n     * @return static\n     */\n    public function withQueryParams(array $query): ServerRequestInterface;\n\n    /**\n     * Retrieve normalized file upload data.\n     *\n     * This method returns upload metadata in a normalized tree, with each leaf\n     * an instance of Psr\\Http\\Message\\UploadedFileInterface.\n     *\n     * These values MAY be prepared from $_FILES or the message body during\n     * instantiation, or MAY be injected via withUploadedFiles().\n     *\n     * @return array An array tree of UploadedFileInterface instances; an empty\n     *     array MUST be returned if no data is present.\n     */\n    public function getUploadedFiles(): array;\n\n    /**\n     * Create a new instance with the specified uploaded files.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated body parameters.\n     *\n     * @param array $uploadedFiles An array tree of UploadedFileInterface instances.\n     * @return static\n     * @throws \\InvalidArgumentException if an invalid structure is provided.\n     */\n    public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface;\n\n    /**\n     * Retrieve any parameters provided in the request body.\n     *\n     * If the request Content-Type is either application/x-www-form-urlencoded\n     * or multipart/form-data, and the request method is POST, this method MUST\n     * return the contents of $_POST.\n     *\n     * Otherwise, this method may return any results of deserializing\n     * the request body content; as parsing returns structured content, the\n     * potential types MUST be arrays or objects only. A null value indicates\n     * the absence of body content.\n     *\n     * @return null|array|object The deserialized body parameters, if any.\n     *     These will typically be an array or object.\n     */\n    public function getParsedBody();\n\n    /**\n     * Return an instance with the specified body parameters.\n     *\n     * These MAY be injected during instantiation.\n     *\n     * If the request Content-Type is either application/x-www-form-urlencoded\n     * or multipart/form-data, and the request method is POST, use this method\n     * ONLY to inject the contents of $_POST.\n     *\n     * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of\n     * deserializing the request body content. Deserialization/parsing returns\n     * structured data, and, as such, this method ONLY accepts arrays or objects,\n     * or a null value if nothing was available to parse.\n     *\n     * As an example, if content negotiation determines that the request data\n     * is a JSON payload, this method could be used to create a request\n     * instance with the deserialized parameters.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated body parameters.\n     *\n     * @param null|array|object $data The deserialized body data. This will\n     *     typically be in an array or object.\n     * @return static\n     * @throws \\InvalidArgumentException if an unsupported argument type is\n     *     provided.\n     */\n    public function withParsedBody($data): ServerRequestInterface;\n\n    /**\n     * Retrieve attributes derived from the request.\n     *\n     * The request \"attributes\" may be used to allow injection of any\n     * parameters derived from the request: e.g., the results of path\n     * match operations; the results of decrypting cookies; the results of\n     * deserializing non-form-encoded message bodies; etc. Attributes\n     * will be application and request specific, and CAN be mutable.\n     *\n     * @return array Attributes derived from the request.\n     */\n    public function getAttributes(): array;\n\n    /**\n     * Retrieve a single derived request attribute.\n     *\n     * Retrieves a single derived request attribute as described in\n     * getAttributes(). If the attribute has not been previously set, returns\n     * the default value as provided.\n     *\n     * This method obviates the need for a hasAttribute() method, as it allows\n     * specifying a default value to return if the attribute is not found.\n     *\n     * @see getAttributes()\n     * @param string $name The attribute name.\n     * @param mixed $default Default value to return if the attribute does not exist.\n     * @return mixed\n     */\n    public function getAttribute(string $name, $default = null);\n\n    /**\n     * Return an instance with the specified derived request attribute.\n     *\n     * This method allows setting a single derived request attribute as\n     * described in getAttributes().\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated attribute.\n     *\n     * @see getAttributes()\n     * @param string $name The attribute name.\n     * @param mixed $value The value of the attribute.\n     * @return static\n     */\n    public function withAttribute(string $name, $value): ServerRequestInterface;\n\n    /**\n     * Return an instance that removes the specified derived request attribute.\n     *\n     * This method allows removing a single derived request attribute as\n     * described in getAttributes().\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that removes\n     * the attribute.\n     *\n     * @see getAttributes()\n     * @param string $name The attribute name.\n     * @return static\n     */\n    public function withoutAttribute(string $name): ServerRequestInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/StreamInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Describes a data stream.\n *\n * Typically, an instance will wrap a PHP stream; this interface provides\n * a wrapper around the most common operations, including serialization of\n * the entire stream to a string.\n */\ninterface StreamInterface\n{\n    /**\n     * Reads all data from the stream into a string, from the beginning to end.\n     *\n     * This method MUST attempt to seek to the beginning of the stream before\n     * reading data and read the stream until the end is reached.\n     *\n     * Warning: This could attempt to load a large amount of data into memory.\n     *\n     * This method MUST NOT raise an exception in order to conform with PHP's\n     * string casting operations.\n     *\n     * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring\n     * @return string\n     */\n    public function __toString(): string;\n\n    /**\n     * Closes the stream and any underlying resources.\n     *\n     * @return void\n     */\n    public function close(): void;\n\n    /**\n     * Separates any underlying resources from the stream.\n     *\n     * After the stream has been detached, the stream is in an unusable state.\n     *\n     * @return resource|null Underlying PHP stream, if any\n     */\n    public function detach();\n\n    /**\n     * Get the size of the stream if known.\n     *\n     * @return int|null Returns the size in bytes if known, or null if unknown.\n     */\n    public function getSize(): ?int;\n\n    /**\n     * Returns the current position of the file read/write pointer\n     *\n     * @return int Position of the file pointer\n     * @throws \\RuntimeException on error.\n     */\n    public function tell(): int;\n\n    /**\n     * Returns true if the stream is at the end of the stream.\n     *\n     * @return bool\n     */\n    public function eof(): bool;\n\n    /**\n     * Returns whether or not the stream is seekable.\n     *\n     * @return bool\n     */\n    public function isSeekable(): bool;\n\n    /**\n     * Seek to a position in the stream.\n     *\n     * @link http://www.php.net/manual/en/function.fseek.php\n     * @param int $offset Stream offset\n     * @param int $whence Specifies how the cursor position will be calculated\n     *     based on the seek offset. Valid values are identical to the built-in\n     *     PHP $whence values for `fseek()`.  SEEK_SET: Set position equal to\n     *     offset bytes SEEK_CUR: Set position to current location plus offset\n     *     SEEK_END: Set position to end-of-stream plus offset.\n     * @throws \\RuntimeException on failure.\n     */\n    public function seek(int $offset, int $whence = SEEK_SET): void;\n\n    /**\n     * Seek to the beginning of the stream.\n     *\n     * If the stream is not seekable, this method will raise an exception;\n     * otherwise, it will perform a seek(0).\n     *\n     * @see seek()\n     * @link http://www.php.net/manual/en/function.fseek.php\n     * @throws \\RuntimeException on failure.\n     */\n    public function rewind(): void;\n\n    /**\n     * Returns whether or not the stream is writable.\n     *\n     * @return bool\n     */\n    public function isWritable(): bool;\n\n    /**\n     * Write data to the stream.\n     *\n     * @param string $string The string that is to be written.\n     * @return int Returns the number of bytes written to the stream.\n     * @throws \\RuntimeException on failure.\n     */\n    public function write(string $string): int;\n\n    /**\n     * Returns whether or not the stream is readable.\n     *\n     * @return bool\n     */\n    public function isReadable(): bool;\n\n    /**\n     * Read data from the stream.\n     *\n     * @param int $length Read up to $length bytes from the object and return\n     *     them. Fewer than $length bytes may be returned if underlying stream\n     *     call returns fewer bytes.\n     * @return string Returns the data read from the stream, or an empty string\n     *     if no bytes are available.\n     * @throws \\RuntimeException if an error occurs.\n     */\n    public function read(int $length): string;\n\n    /**\n     * Returns the remaining contents in a string\n     *\n     * @return string\n     * @throws \\RuntimeException if unable to read or an error occurs while\n     *     reading.\n     */\n    public function getContents(): string;\n\n    /**\n     * Get stream metadata as an associative array or retrieve a specific key.\n     *\n     * The keys returned are identical to the keys returned from PHP's\n     * stream_get_meta_data() function.\n     *\n     * @link http://php.net/manual/en/function.stream-get-meta-data.php\n     * @param string|null $key Specific metadata to retrieve.\n     * @return array|mixed|null Returns an associative array if no key is\n     *     provided. Returns a specific key value if a key is provided and the\n     *     value is found, or null if the key is not found.\n     */\n    public function getMetadata(?string $key = null);\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/UploadedFileInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Value object representing a file uploaded through an HTTP request.\n *\n * Instances of this interface are considered immutable; all methods that\n * might change state MUST be implemented such that they retain the internal\n * state of the current instance and return an instance that contains the\n * changed state.\n */\ninterface UploadedFileInterface\n{\n    /**\n     * Retrieve a stream representing the uploaded file.\n     *\n     * This method MUST return a StreamInterface instance, representing the\n     * uploaded file. The purpose of this method is to allow utilizing native PHP\n     * stream functionality to manipulate the file upload, such as\n     * stream_copy_to_stream() (though the result will need to be decorated in a\n     * native PHP stream wrapper to work with such functions).\n     *\n     * If the moveTo() method has been called previously, this method MUST raise\n     * an exception.\n     *\n     * @return StreamInterface Stream representation of the uploaded file.\n     * @throws \\RuntimeException in cases when no stream is available or can be\n     *     created.\n     */\n    public function getStream(): StreamInterface;\n\n    /**\n     * Move the uploaded file to a new location.\n     *\n     * Use this method as an alternative to move_uploaded_file(). This method is\n     * guaranteed to work in both SAPI and non-SAPI environments.\n     * Implementations must determine which environment they are in, and use the\n     * appropriate method (move_uploaded_file(), rename(), or a stream\n     * operation) to perform the operation.\n     *\n     * $targetPath may be an absolute path, or a relative path. If it is a\n     * relative path, resolution should be the same as used by PHP's rename()\n     * function.\n     *\n     * The original file or stream MUST be removed on completion.\n     *\n     * If this method is called more than once, any subsequent calls MUST raise\n     * an exception.\n     *\n     * When used in an SAPI environment where $_FILES is populated, when writing\n     * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be\n     * used to ensure permissions and upload status are verified correctly.\n     *\n     * If you wish to move to a stream, use getStream(), as SAPI operations\n     * cannot guarantee writing to stream destinations.\n     *\n     * @see http://php.net/is_uploaded_file\n     * @see http://php.net/move_uploaded_file\n     * @param string $targetPath Path to which to move the uploaded file.\n     * @throws \\InvalidArgumentException if the $targetPath specified is invalid.\n     * @throws \\RuntimeException on any error during the move operation, or on\n     *     the second or subsequent call to the method.\n     */\n    public function moveTo(string $targetPath): void;\n    \n    /**\n     * Retrieve the file size.\n     *\n     * Implementations SHOULD return the value stored in the \"size\" key of\n     * the file in the $_FILES array if available, as PHP calculates this based\n     * on the actual size transmitted.\n     *\n     * @return int|null The file size in bytes or null if unknown.\n     */\n    public function getSize(): ?int;\n    \n    /**\n     * Retrieve the error associated with the uploaded file.\n     *\n     * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.\n     *\n     * If the file was uploaded successfully, this method MUST return\n     * UPLOAD_ERR_OK.\n     *\n     * Implementations SHOULD return the value stored in the \"error\" key of\n     * the file in the $_FILES array.\n     *\n     * @see http://php.net/manual/en/features.file-upload.errors.php\n     * @return int One of PHP's UPLOAD_ERR_XXX constants.\n     */\n    public function getError(): int;\n    \n    /**\n     * Retrieve the filename sent by the client.\n     *\n     * Do not trust the value returned by this method. A client could send\n     * a malicious filename with the intention to corrupt or hack your\n     * application.\n     *\n     * Implementations SHOULD return the value stored in the \"name\" key of\n     * the file in the $_FILES array.\n     *\n     * @return string|null The filename sent by the client or null if none\n     *     was provided.\n     */\n    public function getClientFilename(): ?string;\n    \n    /**\n     * Retrieve the media type sent by the client.\n     *\n     * Do not trust the value returned by this method. A client could send\n     * a malicious media type with the intention to corrupt or hack your\n     * application.\n     *\n     * Implementations SHOULD return the value stored in the \"type\" key of\n     * the file in the $_FILES array.\n     *\n     * @return string|null The media type sent by the client or null if none\n     *     was provided.\n     */\n    public function getClientMediaType(): ?string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/http-message/src/UriInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Value object representing a URI.\n *\n * This interface is meant to represent URIs according to RFC 3986 and to\n * provide methods for most common operations. Additional functionality for\n * working with URIs can be provided on top of the interface or externally.\n * Its primary use is for HTTP requests, but may also be used in other\n * contexts.\n *\n * Instances of this interface are considered immutable; all methods that\n * might change state MUST be implemented such that they retain the internal\n * state of the current instance and return an instance that contains the\n * changed state.\n *\n * Typically the Host header will be also be present in the request message.\n * For server-side requests, the scheme will typically be discoverable in the\n * server parameters.\n *\n * @link http://tools.ietf.org/html/rfc3986 (the URI specification)\n */\ninterface UriInterface\n{\n    /**\n     * Retrieve the scheme component of the URI.\n     *\n     * If no scheme is present, this method MUST return an empty string.\n     *\n     * The value returned MUST be normalized to lowercase, per RFC 3986\n     * Section 3.1.\n     *\n     * The trailing \":\" character is not part of the scheme and MUST NOT be\n     * added.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-3.1\n     * @return string The URI scheme.\n     */\n    public function getScheme(): string;\n\n    /**\n     * Retrieve the authority component of the URI.\n     *\n     * If no authority information is present, this method MUST return an empty\n     * string.\n     *\n     * The authority syntax of the URI is:\n     *\n     * <pre>\n     * [user-info@]host[:port]\n     * </pre>\n     *\n     * If the port component is not set or is the standard port for the current\n     * scheme, it SHOULD NOT be included.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-3.2\n     * @return string The URI authority, in \"[user-info@]host[:port]\" format.\n     */\n    public function getAuthority(): string;\n\n    /**\n     * Retrieve the user information component of the URI.\n     *\n     * If no user information is present, this method MUST return an empty\n     * string.\n     *\n     * If a user is present in the URI, this will return that value;\n     * additionally, if the password is also present, it will be appended to the\n     * user value, with a colon (\":\") separating the values.\n     *\n     * The trailing \"@\" character is not part of the user information and MUST\n     * NOT be added.\n     *\n     * @return string The URI user information, in \"username[:password]\" format.\n     */\n    public function getUserInfo(): string;\n\n    /**\n     * Retrieve the host component of the URI.\n     *\n     * If no host is present, this method MUST return an empty string.\n     *\n     * The value returned MUST be normalized to lowercase, per RFC 3986\n     * Section 3.2.2.\n     *\n     * @see http://tools.ietf.org/html/rfc3986#section-3.2.2\n     * @return string The URI host.\n     */\n    public function getHost(): string;\n\n    /**\n     * Retrieve the port component of the URI.\n     *\n     * If a port is present, and it is non-standard for the current scheme,\n     * this method MUST return it as an integer. If the port is the standard port\n     * used with the current scheme, this method SHOULD return null.\n     *\n     * If no port is present, and no scheme is present, this method MUST return\n     * a null value.\n     *\n     * If no port is present, but a scheme is present, this method MAY return\n     * the standard port for that scheme, but SHOULD return null.\n     *\n     * @return null|int The URI port.\n     */\n    public function getPort(): ?int;\n\n    /**\n     * Retrieve the path component of the URI.\n     *\n     * The path can either be empty or absolute (starting with a slash) or\n     * rootless (not starting with a slash). Implementations MUST support all\n     * three syntaxes.\n     *\n     * Normally, the empty path \"\" and absolute path \"/\" are considered equal as\n     * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically\n     * do this normalization because in contexts with a trimmed base path, e.g.\n     * the front controller, this difference becomes significant. It's the task\n     * of the user to handle both \"\" and \"/\".\n     *\n     * The value returned MUST be percent-encoded, but MUST NOT double-encode\n     * any characters. To determine what characters to encode, please refer to\n     * RFC 3986, Sections 2 and 3.3.\n     *\n     * As an example, if the value should include a slash (\"/\") not intended as\n     * delimiter between path segments, that value MUST be passed in encoded\n     * form (e.g., \"%2F\") to the instance.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-2\n     * @see https://tools.ietf.org/html/rfc3986#section-3.3\n     * @return string The URI path.\n     */\n    public function getPath(): string;\n\n    /**\n     * Retrieve the query string of the URI.\n     *\n     * If no query string is present, this method MUST return an empty string.\n     *\n     * The leading \"?\" character is not part of the query and MUST NOT be\n     * added.\n     *\n     * The value returned MUST be percent-encoded, but MUST NOT double-encode\n     * any characters. To determine what characters to encode, please refer to\n     * RFC 3986, Sections 2 and 3.4.\n     *\n     * As an example, if a value in a key/value pair of the query string should\n     * include an ampersand (\"&\") not intended as a delimiter between values,\n     * that value MUST be passed in encoded form (e.g., \"%26\") to the instance.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-2\n     * @see https://tools.ietf.org/html/rfc3986#section-3.4\n     * @return string The URI query string.\n     */\n    public function getQuery(): string;\n\n    /**\n     * Retrieve the fragment component of the URI.\n     *\n     * If no fragment is present, this method MUST return an empty string.\n     *\n     * The leading \"#\" character is not part of the fragment and MUST NOT be\n     * added.\n     *\n     * The value returned MUST be percent-encoded, but MUST NOT double-encode\n     * any characters. To determine what characters to encode, please refer to\n     * RFC 3986, Sections 2 and 3.5.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-2\n     * @see https://tools.ietf.org/html/rfc3986#section-3.5\n     * @return string The URI fragment.\n     */\n    public function getFragment(): string;\n\n    /**\n     * Return an instance with the specified scheme.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified scheme.\n     *\n     * Implementations MUST support the schemes \"http\" and \"https\" case\n     * insensitively, and MAY accommodate other schemes if required.\n     *\n     * An empty scheme is equivalent to removing the scheme.\n     *\n     * @param string $scheme The scheme to use with the new instance.\n     * @return static A new instance with the specified scheme.\n     * @throws \\InvalidArgumentException for invalid or unsupported schemes.\n     */\n    public function withScheme(string $scheme): UriInterface;\n\n    /**\n     * Return an instance with the specified user information.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified user information.\n     *\n     * Password is optional, but the user information MUST include the\n     * user; an empty string for the user is equivalent to removing user\n     * information.\n     *\n     * @param string $user The user name to use for authority.\n     * @param null|string $password The password associated with $user.\n     * @return static A new instance with the specified user information.\n     */\n    public function withUserInfo(string $user, ?string $password = null): UriInterface;\n\n    /**\n     * Return an instance with the specified host.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified host.\n     *\n     * An empty host value is equivalent to removing the host.\n     *\n     * @param string $host The hostname to use with the new instance.\n     * @return static A new instance with the specified host.\n     * @throws \\InvalidArgumentException for invalid hostnames.\n     */\n    public function withHost(string $host): UriInterface;\n\n    /**\n     * Return an instance with the specified port.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified port.\n     *\n     * Implementations MUST raise an exception for ports outside the\n     * established TCP and UDP port ranges.\n     *\n     * A null value provided for the port is equivalent to removing the port\n     * information.\n     *\n     * @param null|int $port The port to use with the new instance; a null value\n     *     removes the port information.\n     * @return static A new instance with the specified port.\n     * @throws \\InvalidArgumentException for invalid ports.\n     */\n    public function withPort(?int $port): UriInterface;\n\n    /**\n     * Return an instance with the specified path.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified path.\n     *\n     * The path can either be empty or absolute (starting with a slash) or\n     * rootless (not starting with a slash). Implementations MUST support all\n     * three syntaxes.\n     *\n     * If the path is intended to be domain-relative rather than path relative then\n     * it must begin with a slash (\"/\"). Paths not starting with a slash (\"/\")\n     * are assumed to be relative to some base path known to the application or\n     * consumer.\n     *\n     * Users can provide both encoded and decoded path characters.\n     * Implementations ensure the correct encoding as outlined in getPath().\n     *\n     * @param string $path The path to use with the new instance.\n     * @return static A new instance with the specified path.\n     * @throws \\InvalidArgumentException for invalid paths.\n     */\n    public function withPath(string $path): UriInterface;\n\n    /**\n     * Return an instance with the specified query string.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified query string.\n     *\n     * Users can provide both encoded and decoded query characters.\n     * Implementations ensure the correct encoding as outlined in getQuery().\n     *\n     * An empty query string value is equivalent to removing the query string.\n     *\n     * @param string $query The query string to use with the new instance.\n     * @return static A new instance with the specified query string.\n     * @throws \\InvalidArgumentException for invalid query strings.\n     */\n    public function withQuery(string $query): UriInterface;\n\n    /**\n     * Return an instance with the specified URI fragment.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified URI fragment.\n     *\n     * Users can provide both encoded and decoded fragment characters.\n     * Implementations ensure the correct encoding as outlined in getFragment().\n     *\n     * An empty fragment value is equivalent to removing the fragment.\n     *\n     * @param string $fragment The fragment to use with the new instance.\n     * @return static A new instance with the specified fragment.\n     */\n    public function withFragment(string $fragment): UriInterface;\n\n    /**\n     * Return the string representation as a URI reference.\n     *\n     * Depending on which components of the URI are present, the resulting\n     * string is either a full URI or relative reference according to RFC 3986,\n     * Section 4.1. The method concatenates the various components of the URI,\n     * using the appropriate delimiters:\n     *\n     * - If a scheme is present, it MUST be suffixed by \":\".\n     * - If an authority is present, it MUST be prefixed by \"//\".\n     * - The path can be concatenated without delimiters. But there are two\n     *   cases where the path has to be adjusted to make the URI reference\n     *   valid as PHP does not allow to throw an exception in __toString():\n     *     - If the path is rootless and an authority is present, the path MUST\n     *       be prefixed by \"/\".\n     *     - If the path is starting with more than one \"/\" and no authority is\n     *       present, the starting slashes MUST be reduced to one.\n     * - If a query is present, it MUST be prefixed by \"?\".\n     * - If a fragment is present, it MUST be prefixed by \"#\".\n     *\n     * @see http://tools.ietf.org/html/rfc3986#section-4.1\n     * @return string\n     */\n    public function __toString(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/LICENSE",
    "content": "Copyright (c) 2012 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in \nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/README.md",
    "content": "PSR Log\n=======\n\nThis repository holds all interfaces/classes/traits related to\n[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).\n\nNote that this is not a logger of its own. It is merely an interface that\ndescribes a logger. See the specification for more details.\n\nInstallation\n------------\n\n```bash\ncomposer require psr/log\n```\n\nUsage\n-----\n\nIf you need a logger, you can use the interface like this:\n\n```php\n<?php\n\nuse Psr\\Log\\LoggerInterface;\n\nclass Foo\n{\n    private $logger;\n\n    public function __construct(LoggerInterface $logger = null)\n    {\n        $this->logger = $logger;\n    }\n\n    public function doSomething()\n    {\n        if ($this->logger) {\n            $this->logger->info('Doing work');\n        }\n           \n        try {\n            $this->doSomethingElse();\n        } catch (Exception $exception) {\n            $this->logger->error('Oh no!', array('exception' => $exception));\n        }\n\n        // do something useful\n    }\n}\n```\n\nYou can then pick one of the implementations of the interface to get a logger.\n\nIf you want to implement the interface, you can require this package and\nimplement `Psr\\Log\\LoggerInterface` in your code. Please read the\n[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)\nfor details.\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/composer.json",
    "content": "{\n    \"name\": \"psr/log\",\n    \"description\": \"Common interface for logging libraries\",\n    \"keywords\": [\"psr\", \"psr-3\", \"log\"],\n    \"homepage\": \"https://github.com/php-fig/log\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.0.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Log\\\\\": \"src\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"3.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/AbstractLogger.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * This is a simple Logger implementation that other Loggers can inherit from.\n *\n * It simply delegates all log-level-specific methods to the `log` method to\n * reduce boilerplate code that a simple Logger that does the same thing with\n * messages regardless of the error level has to implement.\n */\nabstract class AbstractLogger implements LoggerInterface\n{\n    use LoggerTrait;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/InvalidArgumentException.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\nclass InvalidArgumentException extends \\InvalidArgumentException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/LogLevel.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Describes log levels.\n */\nclass LogLevel\n{\n    const EMERGENCY = 'emergency';\n    const ALERT     = 'alert';\n    const CRITICAL  = 'critical';\n    const ERROR     = 'error';\n    const WARNING   = 'warning';\n    const NOTICE    = 'notice';\n    const INFO      = 'info';\n    const DEBUG     = 'debug';\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/LoggerAwareInterface.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Describes a logger-aware instance.\n */\ninterface LoggerAwareInterface\n{\n    /**\n     * Sets a logger instance on the object.\n     */\n    public function setLogger(LoggerInterface $logger): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/LoggerAwareTrait.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Basic Implementation of LoggerAwareInterface.\n */\ntrait LoggerAwareTrait\n{\n    /**\n     * The logger instance.\n     */\n    protected ?LoggerInterface $logger = null;\n\n    /**\n     * Sets a logger.\n     */\n    public function setLogger(LoggerInterface $logger): void\n    {\n        $this->logger = $logger;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/LoggerInterface.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Describes a logger instance.\n *\n * The message MUST be a string or object implementing __toString().\n *\n * The message MAY contain placeholders in the form: {foo} where foo\n * will be replaced by the context data in key \"foo\".\n *\n * The context array can contain arbitrary data. The only assumption that\n * can be made by implementors is that if an Exception instance is given\n * to produce a stack trace, it MUST be in a key named \"exception\".\n *\n * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md\n * for the full interface specification.\n */\ninterface LoggerInterface\n{\n    /**\n     * System is unusable.\n     *\n     * @param mixed[] $context\n     */\n    public function emergency(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Action must be taken immediately.\n     *\n     * Example: Entire website down, database unavailable, etc. This should\n     * trigger the SMS alerts and wake you up.\n     *\n     * @param mixed[] $context\n     */\n    public function alert(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Critical conditions.\n     *\n     * Example: Application component unavailable, unexpected exception.\n     *\n     * @param mixed[] $context\n     */\n    public function critical(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Runtime errors that do not require immediate action but should typically\n     * be logged and monitored.\n     *\n     * @param mixed[] $context\n     */\n    public function error(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Exceptional occurrences that are not errors.\n     *\n     * Example: Use of deprecated APIs, poor use of an API, undesirable things\n     * that are not necessarily wrong.\n     *\n     * @param mixed[] $context\n     */\n    public function warning(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Normal but significant events.\n     *\n     * @param mixed[] $context\n     */\n    public function notice(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Interesting events.\n     *\n     * Example: User logs in, SQL logs.\n     *\n     * @param mixed[] $context\n     */\n    public function info(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Detailed debug information.\n     *\n     * @param mixed[] $context\n     */\n    public function debug(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Logs with an arbitrary level.\n     *\n     * @param mixed $level\n     * @param mixed[] $context\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException\n     */\n    public function log($level, string|\\Stringable $message, array $context = []): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/LoggerTrait.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * This is a simple Logger trait that classes unable to extend AbstractLogger\n * (because they extend another class, etc) can include.\n *\n * It simply delegates all log-level-specific methods to the `log` method to\n * reduce boilerplate code that a simple Logger that does the same thing with\n * messages regardless of the error level has to implement.\n */\ntrait LoggerTrait\n{\n    /**\n     * System is unusable.\n     */\n    public function emergency(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::EMERGENCY, $message, $context);\n    }\n\n    /**\n     * Action must be taken immediately.\n     *\n     * Example: Entire website down, database unavailable, etc. This should\n     * trigger the SMS alerts and wake you up.\n     */\n    public function alert(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::ALERT, $message, $context);\n    }\n\n    /**\n     * Critical conditions.\n     *\n     * Example: Application component unavailable, unexpected exception.\n     */\n    public function critical(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::CRITICAL, $message, $context);\n    }\n\n    /**\n     * Runtime errors that do not require immediate action but should typically\n     * be logged and monitored.\n     */\n    public function error(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::ERROR, $message, $context);\n    }\n\n    /**\n     * Exceptional occurrences that are not errors.\n     *\n     * Example: Use of deprecated APIs, poor use of an API, undesirable things\n     * that are not necessarily wrong.\n     */\n    public function warning(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::WARNING, $message, $context);\n    }\n\n    /**\n     * Normal but significant events.\n     */\n    public function notice(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::NOTICE, $message, $context);\n    }\n\n    /**\n     * Interesting events.\n     *\n     * Example: User logs in, SQL logs.\n     */\n    public function info(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::INFO, $message, $context);\n    }\n\n    /**\n     * Detailed debug information.\n     */\n    public function debug(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::DEBUG, $message, $context);\n    }\n\n    /**\n     * Logs with an arbitrary level.\n     *\n     * @param mixed $level\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException\n     */\n    abstract public function log($level, string|\\Stringable $message, array $context = []): void;\n}\n"
  },
  {
    "path": "lib/Google/vendor/psr/log/src/NullLogger.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * This Logger can be used to avoid conditional log calls.\n *\n * Logging should always be optional, and if no logger is provided to your\n * library creating a NullLogger instance to have something to throw logs at\n * is a good way to avoid littering your code with `if ($this->logger) { }`\n * blocks.\n */\nclass NullLogger extends AbstractLogger\n{\n    /**\n     * Logs with an arbitrary level.\n     *\n     * @param mixed[] $context\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException\n     */\n    public function log($level, string|\\Stringable $message, array $context = []): void\n    {\n        // noop\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ralouphie/getallheaders/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Ralph Khattar\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/ralouphie/getallheaders/README.md",
    "content": "getallheaders\n=============\n\nPHP `getallheaders()` polyfill. Compatible with PHP >= 5.3.\n\n[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders)\n[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders)\n[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders)\n[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders)\n\n\nThis is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php).\n\n## Install\n\nFor PHP version **`>= 5.6`**:\n\n```\ncomposer require ralouphie/getallheaders\n```\n\nFor PHP version **`< 5.6`**:\n\n```\ncomposer require ralouphie/getallheaders \"^2\"\n```\n"
  },
  {
    "path": "lib/Google/vendor/ralouphie/getallheaders/composer.json",
    "content": "{\n\t\"name\": \"ralouphie/getallheaders\",\n\t\"description\": \"A polyfill for getallheaders.\",\n\t\"license\": \"MIT\",\n\t\"authors\": [\n\t\t{\n\t\t\t\"name\": \"Ralph Khattar\",\n\t\t\t\"email\": \"ralph.khattar@gmail.com\"\n\t\t}\n\t],\n\t\"require\": {\n\t\t\"php\": \">=5.6\"\n\t},\n\t\"require-dev\": {\n\t\t\"phpunit/phpunit\": \"^5 || ^6.5\",\n\t\t\"php-coveralls/php-coveralls\": \"^2.1\"\n\t},\n\t\"autoload\": {\n\t\t\"files\": [\"src/getallheaders.php\"]\n\t},\n\t\"autoload-dev\": {\n\t\t\"psr-4\": {\n\t\t\t\"getallheaders\\\\Tests\\\\\": \"tests/\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "lib/Google/vendor/ralouphie/getallheaders/src/getallheaders.php",
    "content": "<?php\n\nif (!function_exists('getallheaders')) {\n\n    /**\n     * Get all HTTP header key/values as an associative array for the current request.\n     *\n     * @return string[string] The HTTP header key/value pairs.\n     */\n    function getallheaders()\n    {\n        $headers = array();\n\n        $copy_server = array(\n            'CONTENT_TYPE'   => 'Content-Type',\n            'CONTENT_LENGTH' => 'Content-Length',\n            'CONTENT_MD5'    => 'Content-Md5',\n        );\n\n        foreach ($_SERVER as $key => $value) {\n            if (substr($key, 0, 5) === 'HTTP_') {\n                $key = substr($key, 5);\n                if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) {\n                    $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key))));\n                    $headers[$key] = $value;\n                }\n            } elseif (isset($copy_server[$key])) {\n                $headers[$copy_server[$key]] = $value;\n            }\n        }\n\n        if (!isset($headers['Authorization'])) {\n            if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {\n                $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];\n            } elseif (isset($_SERVER['PHP_AUTH_USER'])) {\n                $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';\n                $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass);\n            } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) {\n                $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST'];\n            }\n        }\n\n        return $headers;\n    }\n\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/LICENSE",
    "content": "Copyright (c) 2015-2022 Ben Ramsey <ben@benramsey.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/README.md",
    "content": "<h1 align=\"center\">ramsey/collection</h1>\n\n<p align=\"center\">\n    <strong>A PHP library for representing and manipulating collections.</strong>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/ramsey/collection\"><img src=\"http://img.shields.io/badge/source-ramsey/collection-blue.svg?style=flat-square\" alt=\"Source Code\"></a>\n    <a href=\"https://packagist.org/packages/ramsey/collection\"><img src=\"https://img.shields.io/packagist/v/ramsey/collection.svg?style=flat-square&label=release\" alt=\"Download Package\"></a>\n    <a href=\"https://php.net\"><img src=\"https://img.shields.io/packagist/php-v/ramsey/collection.svg?style=flat-square&colorB=%238892BF\" alt=\"PHP Programming Language\"></a>\n    <a href=\"https://github.com/ramsey/collection/blob/master/LICENSE\"><img src=\"https://img.shields.io/packagist/l/ramsey/collection.svg?style=flat-square&colorB=darkcyan\" alt=\"Read License\"></a>\n    <a href=\"https://github.com/ramsey/collection/actions/workflows/continuous-integration.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ramsey/collection/continuous-integration.yml?branch=main&logo=github&style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/gh/ramsey/collection\"><img src=\"https://img.shields.io/codecov/c/gh/ramsey/collection?label=codecov&logo=codecov&style=flat-square\" alt=\"Codecov Code Coverage\"></a>\n</p>\n\n## About\n\nramsey/collection is a PHP library for representing and manipulating collections.\n\nMuch inspiration for this library came from the [Java Collections Framework][java].\n\nThis project adheres to a [code of conduct](CODE_OF_CONDUCT.md).\nBy participating in this project and its community, you are expected to\nuphold this code.\n\n## Installation\n\nInstall this package as a dependency using [Composer](https://getcomposer.org).\n\n``` bash\ncomposer require ramsey/collection\n```\n\n## Usage\n\nExamples of how to use this library may be found in the\n[Wiki pages](https://github.com/ramsey/collection/wiki/Examples).\n\n## Contributing\n\nContributions are welcome! To contribute, please familiarize yourself with\n[CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Coordinated Disclosure\n\nKeeping user information safe and secure is a top priority, and we welcome the\ncontribution of external security researchers. If you believe you've found a\nsecurity issue in software that is maintained in this repository, please read\n[SECURITY.md][] for instructions on submitting a vulnerability report.\n\n## Copyright and License\n\nThe ramsey/collection library is copyright © [Ben Ramsey](https://benramsey.com)\nand licensed for use under the terms of the\nMIT License (MIT). Please see [LICENSE](LICENSE) for more information.\n\n\n[java]: http://docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html\n[security.md]: https://github.com/ramsey/collection/blob/main/SECURITY.md\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/SECURITY.md",
    "content": "<!--\n    This policy template was created using the HackerOne Policy Builder [1],\n    with guidance from the National Telecommunications and Information\n    Administration Coordinated Vulnerability Disclosure Template [2].\n -->\n\n# Vulnerability Disclosure Policy (VDP)\n\n## Brand Promise\n\n<!--\n    This is your brand promise. Its objective is to \"demonstrate a clear, good\n    faith commitment to customers and other stakeholders potentially impacted by\n    security vulnerabilities\" [2].\n-->\n\nKeeping user information safe and secure is a top priority, and we welcome the\ncontribution of external security researchers.\n\n## Scope\n\n<!--\n    This is your initial scope. It tells vulnerability finders and reporters\n    \"which systems and capabilities are 'fair game' versus 'off limits'\" [2].\n    For software packages, this is often a list of currently maintained versions\n    of the package.\n-->\n\nIf you believe you've found a security issue in software that is maintained in\nthis repository, we encourage you to notify us.\n\n| Version | In scope | Source code |\n| ------- | :------: | ----------- |\n| latest  | ✅        | https://github.com/ramsey/collection |\n\n## How to Submit a Report\n\n<!--\n    This is your communication process. It tells security researchers how to\n    contact you to report a vulnerability. It may be a link to a web form that\n    uses HTTPS for secure communication, or it may be an email address.\n    Optionally, you may choose to include a PGP public key, so that researchers\n    may send you encrypted messages.\n-->\n\nTo submit a vulnerability report, please contact us at security@ramsey.dev.\nYour submission will be reviewed and validated by a member of our team.\n\n## Safe Harbor\n\n<!--\n    This section assures vulnerability finders and reporters that they will\n    receive good faith responses to their good faith acts. In other words,\n    \"we will not take legal action if...\" [2].\n-->\n\nWe support safe harbor for security researchers who:\n\n* Make a good faith effort to avoid privacy violations, destruction of data, and\n  interruption or degradation of our services.\n* Only interact with accounts you own or with explicit permission of the account\n  holder. If you do encounter Personally Identifiable Information (PII) contact\n  us immediately, do not proceed with access, and immediately purge any local\n  information.\n* Provide us with a reasonable amount of time to resolve vulnerabilities prior\n  to any disclosure to the public or a third party.\n\nWe will consider activities conducted consistent with this policy to constitute\n\"authorized\" conduct and will not pursue civil action or initiate a complaint to\nlaw enforcement. We will help to the extent we can if legal action is initiated\nby a third party against you.\n\nPlease submit a report to us before engaging in conduct that may be inconsistent\nwith or unaddressed by this policy.\n\n## Preferences\n\n<!--\n    The preferences section sets expectations based on priority and submission\n    volume, rather than legal objection or restriction [2].\n\n    According to the NTIA [2]:\n\n        This section is a living document that sets expectations for preferences\n        and priorities, typically maintained by the support and engineering\n        team. This can outline classes of vulnerabilities, reporting style\n        (crash dumps, CVSS scoring, proof-of-concept, etc.), tools, etc. Too\n        many preferences can set the wrong tone or make reporting findings\n        difficult to navigate. This section also sets expectations to the\n        researcher community for what types of issues are considered important\n        or not.\n-->\n\n* Please provide detailed reports with reproducible steps and a clearly defined\n  impact.\n* Include the version number of the vulnerable package in your report\n* Social engineering (e.g. phishing, vishing, smishing) is prohibited.\n\n<!--\n    References\n\n    [1] HackerOne. Policy builder. Retrieved from https://hackerone.com/policy-builder/\n\n    [2] NTIA Safety Working Group. 2016. \"Early stage\" coordinated vulnerability\n    disclosure template: Version 1.1. (15 December 2016). Retrieved from\n    https://www.ntia.doc.gov/files/ntia/publications/ntia_vuln_disclosure_early_stage_template.pdf\n-->\n\n## Encryption Key for security@ramsey.dev\n\nFor increased privacy when reporting sensitive issues, you may encrypt your\nmessage using the following public key:\n\n```\n-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBF+Z9gEBEACbT/pIx8RR0K18t8Z2rDnmEV44YdT7HNsMdq+D6SAlx8UUb6AU\njGIbV9dgBgGNtOLU1pxloaJwL9bWIRbj+X/Qb2WNIP//Vz1Y40ox1dSpfCUrizXx\nkb4p58Xml0PsB8dg3b4RDUgKwGC37ne5xmDnigyJPbiB2XJ6Xc46oPCjh86XROTK\nwEBB2lY67ClBlSlvC2V9KmbTboRQkLdQDhOaUosMb99zRb0EWqDLaFkZVjY5HI7i\n0pTveE6dI12NfHhTwKjZ5pUiAZQGlKA6J1dMjY2unxHZkQj5MlMfrLSyJHZxccdJ\nxD94T6OTcTHt/XmMpI2AObpewZDdChDQmcYDZXGfAhFoJmbvXsmLMGXKgzKoZ/ls\nRmLsQhh7+/r8E+Pn5r+A6Hh4uAc14ApyEP0ckKeIXw1C6pepHM4E8TEXVr/IA6K/\nz6jlHORixIFX7iNOnfHh+qwOgZw40D6JnBfEzjFi+T2Cy+JzN2uy7I8UnecTMGo3\n5t6astPy6xcH6kZYzFTV7XERR6LIIVyLAiMFd8kF5MbJ8N5ElRFsFHPW+82N2HDX\nc60iSaTB85k6R6xd8JIKDiaKE4sSuw2wHFCKq33d/GamYezp1wO+bVUQg88efljC\n2JNFyD+vl30josqhw1HcmbE1TP3DlYeIL5jQOlxCMsgai6JtTfHFM/5MYwARAQAB\ntBNzZWN1cml0eUByYW1zZXkuZGV2iQJUBBMBCAA+FiEE4drPD+/ofZ570fAYq0bv\nvXQCywIFAl+Z9gECGwMFCQeGH4AFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ\nq0bvvXQCywIkEA//Qcwv8MtTCy01LHZd9c7VslwhNdXQDYymcTyjcYw8x7O22m4B\n3hXE6vqAplFhVxxkqXB2ef0tQuzxhPHNJgkCE4Wq4i+V6qGpaSVHQT2W6DN/NIhL\nvS8OdScc6zddmIbIkSrzVVAtjwehFNEIrX3DnbbbK+Iku7vsKT5EclOluIsjlYoX\ngoW8IeReyDBqOe2H3hoCGw6EA0D/NYV2bJnfy53rXVIyarsXXeOLp7eNEH6Td7aW\nPVSrMZJe1t+knrEGnEdrXWzlg4lCJJCtemGv+pKBUomnyISXSdqyoRCCzvQjqyig\n2kRebUX8BXPW33p4OXPj9sIboUOjZwormWwqqbFMO+J4TiVCUoEoheI7emPFRcNN\nQtPJrjbY1++OznBc0GRpfeUkGoU1cbRl1bnepnFIZMTDLkrVW6I1Y4q8ZVwX3BkE\nN81ctFrRpHBlU36EdHvjPQmGtuiL77Qq3fWmMv7yTvK1wHJAXfEb0ZJWHZCbck3w\nl0CVq0Z+UUAOM8Rp1N0N8m92xtapav0qCFU9qzf2J5qX6GRmWv+d29wPgFHzDWBm\nnnrYYIA4wJLx00U6SMcVBSnNe91B+RfGY5XQhbWPjQQecOGCSDsxaFAq2MeOVJyZ\nbIjLYfG9GxoLKr5R7oLRJvZI4nKKBc1Kci/crZbdiSdQhSQGlDz88F1OHeCIdQQQ\nEQgAHRYhBOhdAxHd+lus86YQ57Atl5icjAcbBQJfmfdIAAoJELAtl5icjAcbFVcA\n/1LqB3ZjsnXDAvvAXZVjSPqofSlpMLeRQP6IM/A9Odq0AQCZrtZc1knOMGEcjppK\nRk+sy/R0Mshy8TDuaZIRgh2Ux7kCDQRfmfYBARAAmchKzzVz7IaEq7PnZDb3szQs\nT/+E9F3m39yOpV4fEB1YzObonFakXNT7Gw2tZEx0eitUMqQ/13jjfu3UdzlKl2bR\nqA8LrSQRhB+PTC9A1XvwxCUYhhjGiLzJ9CZL6hBQB43qHOmE9XJPme90geLsF+gK\nu39Waj1SNWzwGg+Gy1Gl5f2AJoDTxznreCuFGj+Vfaczt/hlfgqpOdb9jsmdoE7t\n3DSWppA9dRHWwQSgE6J28rR4QySBcqyXS6IMykqaJn7Z26yNIaITLnHCZOSY8zhP\nha7GFsN549EOCgECbrnPt9dmI2+hQE0RO0e7SOBNsIf5sz/i7urhwuj0CbOqhjc2\nX1AEVNFCVcb6HPi/AWefdFCRu0gaWQxn5g+9nkq5slEgvzCCiKYzaBIcr8qR6Hb4\nFaOPVPxO8vndRouq57Ws8XpAwbPttioFuCqF4u9K+tK/8e2/R8QgRYJsE3Cz/Fu8\n+pZFpMnqbDEbK3DL3ss+1ed1sky+mDV8qXXeI33XW5hMFnk1JWshUjHNlQmE6ftC\nU0xSTMVUtwJhzH2zDp8lEdu7qi3EsNULOl68ozDr6soWAvCbHPeTdTOnFySGCleG\n/3TonsoZJs/sSPPJnxFQ1DtgQL6EbhIwa0ZwU4eKYVHZ9tjxuMX3teFzRvOrJjgs\n+ywGlsIURtEckT5Y6nMAEQEAAYkCPAQYAQgAJhYhBOHazw/v6H2ee9HwGKtG7710\nAssCBQJfmfYBAhsMBQkHhh+AAAoJEKtG7710AssC8NcP/iDAcy1aZFvkA0EbZ85p\ni7/+ywtE/1wF4U4/9OuLcoskqGGnl1pJNPooMOSBCfreoTB8HimT0Fln0CoaOm4Q\npScNq39JXmf4VxauqUJVARByP6zUfgYarqoaZNeuFF0S4AZJ2HhGzaQPjDz1uKVM\nPE6tQSgQkFzdZ9AtRA4vElTH6yRAgmepUsOihk0b0gUtVnwtRYZ8e0Qt3ie97a73\nDxLgAgedFRUbLRYiT0vNaYbainBsLWKpN/T8odwIg/smP0Khjp/ckV60cZTdBiPR\nszBTPJESMUTu0VPntc4gWwGsmhZJg/Tt/qP08XYo3VxNYBegyuWwNR66zDWvwvGH\nmuMv5UchuDxp6Rt3JkIO4voMT1JSjWy9p8krkPEE4V6PxAagLjdZSkt92wVLiK5x\ny5gNrtPhU45YdRAKHr36OvJBJQ42CDaZ6nzrzghcIp9CZ7ANHrI+QLRM/csz+AGA\nszSp6S4mc1lnxxfbOhPPpebZPn0nIAXoZnnoVKdrxBVedPQHT59ZFvKTQ9Fs7gd3\nsYNuc7tJGFGC2CxBH4ANDpOQkc5q9JJ1HSGrXU3juxIiRgfA26Q22S9c71dXjElw\nRi584QH+bL6kkYmm8xpKF6TVwhwu5xx/jBPrbWqFrtbvLNrnfPoapTihBfdIhkT6\nnmgawbBHA02D5xEqB5SU3WJu\n=eJNx\n-----END PGP PUBLIC KEY BLOCK-----\n```\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/composer.json",
    "content": "{\n    \"name\": \"ramsey/collection\",\n    \"description\": \"A PHP library for representing and manipulating collections.\",\n    \"license\": \"MIT\",\n    \"type\": \"library\",\n    \"keywords\": [\n        \"array\",\n        \"collection\",\n        \"hash\",\n        \"map\",\n        \"queue\",\n        \"set\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"Ben Ramsey\",\n            \"email\": \"ben@benramsey.com\",\n            \"homepage\": \"https://benramsey.com\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.1\"\n    },\n    \"require-dev\": {\n        \"captainhook/plugin-composer\": \"^5.3\",\n        \"ergebnis/composer-normalize\": \"^2.45\",\n        \"fakerphp/faker\": \"^1.24\",\n        \"hamcrest/hamcrest-php\": \"^2.0\",\n        \"jangregor/phpstan-prophecy\": \"^2.1\",\n        \"mockery/mockery\": \"^1.6\",\n        \"php-parallel-lint/php-console-highlighter\": \"^1.0\",\n        \"php-parallel-lint/php-parallel-lint\": \"^1.4\",\n        \"phpspec/prophecy-phpunit\": \"^2.3\",\n        \"phpstan/extension-installer\": \"^1.4\",\n        \"phpstan/phpstan\": \"^2.1\",\n        \"phpstan/phpstan-mockery\": \"^2.0\",\n        \"phpstan/phpstan-phpunit\": \"^2.0\",\n        \"phpunit/phpunit\": \"^10.5\",\n        \"ramsey/coding-standard\": \"^2.3\",\n        \"ramsey/conventional-commits\": \"^1.6\",\n        \"roave/security-advisories\": \"dev-latest\"\n    },\n    \"prefer-stable\": true,\n    \"autoload\": {\n        \"psr-4\": {\n            \"Ramsey\\\\Collection\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Ramsey\\\\Collection\\\\Test\\\\\": \"tests/\"\n        }\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"captainhook/plugin-composer\": true,\n            \"dealerdirect/phpcodesniffer-composer-installer\": true,\n            \"ergebnis/composer-normalize\": true,\n            \"phpstan/extension-installer\": true\n        },\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"captainhook\": {\n            \"force-install\": true\n        },\n        \"ramsey/conventional-commits\": {\n            \"configFile\": \"conventional-commits.json\"\n        }\n    },\n    \"scripts\": {\n        \"dev:analyze\": [\n            \"@dev:analyze:phpstan\"\n        ],\n        \"dev:analyze:phpstan\": \"phpstan analyse --ansi --memory-limit=1G\",\n        \"dev:build:clean\": \"git clean -fX build/\",\n        \"dev:lint\": [\n            \"@dev:lint:syntax\",\n            \"@dev:lint:style\"\n        ],\n        \"dev:lint:fix\": \"phpcbf\",\n        \"dev:lint:style\": \"phpcs --colors\",\n        \"dev:lint:syntax\": \"parallel-lint --colors src/ tests/\",\n        \"dev:test\": [\n            \"@dev:lint\",\n            \"@dev:analyze\",\n            \"@dev:test:unit\"\n        ],\n        \"dev:test:coverage:ci\": \"phpunit --colors=always --coverage-text --coverage-clover build/coverage/clover.xml --coverage-cobertura build/coverage/cobertura.xml --coverage-crap4j build/coverage/crap4j.xml --coverage-xml build/coverage/coverage-xml --log-junit build/junit.xml\",\n        \"dev:test:coverage:html\": \"phpunit --colors=always --coverage-html build/coverage/coverage-html/\",\n        \"dev:test:unit\": \"phpunit --colors=always\",\n        \"test\": \"@dev:test\"\n    },\n    \"scripts-descriptions\": {\n        \"dev:analyze\": \"Runs all static analysis checks.\",\n        \"dev:analyze:phpstan\": \"Runs the PHPStan static analyzer.\",\n        \"dev:build:clean\": \"Cleans the build/ directory.\",\n        \"dev:lint\": \"Runs all linting checks.\",\n        \"dev:lint:fix\": \"Auto-fixes coding standards issues, if possible.\",\n        \"dev:lint:style\": \"Checks for coding standards issues.\",\n        \"dev:lint:syntax\": \"Checks for syntax errors.\",\n        \"dev:test\": \"Runs linting, static analysis, and unit tests.\",\n        \"dev:test:coverage:ci\": \"Runs unit tests and generates CI coverage reports.\",\n        \"dev:test:coverage:html\": \"Runs unit tests and generates HTML coverage report.\",\n        \"dev:test:unit\": \"Runs unit tests.\",\n        \"test\": \"Runs linting, static analysis, and unit tests.\"\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/AbstractArray.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse ArrayIterator;\nuse Traversable;\n\nuse function count;\n\n/**\n * This class provides a basic implementation of `ArrayInterface`, to minimize\n * the effort required to implement this interface.\n *\n * @template T\n * @implements ArrayInterface<T>\n */\nabstract class AbstractArray implements ArrayInterface\n{\n    /**\n     * The items of this array.\n     *\n     * @var array<array-key, T>\n     */\n    protected array $data = [];\n\n    /**\n     * Constructs a new array object.\n     *\n     * @param array<array-key, T> $data The initial items to add to this array.\n     */\n    public function __construct(array $data = [])\n    {\n        // Invoke offsetSet() for each value added; in this way, subclasses\n        // may provide additional logic about values added to the array object.\n        foreach ($data as $key => $value) {\n            $this[$key] = $value;\n        }\n    }\n\n    /**\n     * Returns an iterator for this array.\n     *\n     * @link http://php.net/manual/en/iteratoraggregate.getiterator.php IteratorAggregate::getIterator()\n     *\n     * @return Traversable<array-key, T>\n     */\n    public function getIterator(): Traversable\n    {\n        return new ArrayIterator($this->data);\n    }\n\n    /**\n     * Returns `true` if the given offset exists in this array.\n     *\n     * @link http://php.net/manual/en/arrayaccess.offsetexists.php ArrayAccess::offsetExists()\n     *\n     * @param array-key $offset The offset to check.\n     */\n    public function offsetExists(mixed $offset): bool\n    {\n        return isset($this->data[$offset]);\n    }\n\n    /**\n     * Returns the value at the specified offset.\n     *\n     * @link http://php.net/manual/en/arrayaccess.offsetget.php ArrayAccess::offsetGet()\n     *\n     * @param array-key $offset The offset for which a value should be returned.\n     *\n     * @return T the value stored at the offset, or null if the offset\n     *     does not exist.\n     */\n    public function offsetGet(mixed $offset): mixed\n    {\n        return $this->data[$offset];\n    }\n\n    /**\n     * Sets the given value to the given offset in the array.\n     *\n     * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet()\n     *\n     * @param array-key | null $offset The offset to set. If `null`, the value\n     *     may be set at a numerically-indexed offset.\n     * @param T $value The value to set at the given offset.\n     */\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($offset === null) {\n            $this->data[] = $value;\n        } else {\n            $this->data[$offset] = $value;\n        }\n    }\n\n    /**\n     * Removes the given offset and its value from the array.\n     *\n     * @link http://php.net/manual/en/arrayaccess.offsetunset.php ArrayAccess::offsetUnset()\n     *\n     * @param array-key $offset The offset to remove from the array.\n     */\n    public function offsetUnset(mixed $offset): void\n    {\n        unset($this->data[$offset]);\n    }\n\n    /**\n     * Returns data suitable for PHP serialization.\n     *\n     * @link https://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.serialize\n     * @link https://www.php.net/serialize\n     *\n     * @return array<array-key, T>\n     */\n    public function __serialize(): array\n    {\n        return $this->data;\n    }\n\n    /**\n     * Adds unserialized data to the object.\n     *\n     * @param array<array-key, T> $data\n     */\n    public function __unserialize(array $data): void\n    {\n        $this->data = $data;\n    }\n\n    /**\n     * Returns the number of items in this array.\n     *\n     * @link http://php.net/manual/en/countable.count.php Countable::count()\n     */\n    public function count(): int\n    {\n        return count($this->data);\n    }\n\n    public function clear(): void\n    {\n        $this->data = [];\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function toArray(): array\n    {\n        return $this->data;\n    }\n\n    public function isEmpty(): bool\n    {\n        return $this->data === [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/AbstractCollection.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse Closure;\nuse Ramsey\\Collection\\Exception\\CollectionMismatchException;\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Ramsey\\Collection\\Exception\\InvalidPropertyOrMethod;\nuse Ramsey\\Collection\\Exception\\NoSuchElementException;\nuse Ramsey\\Collection\\Exception\\UnsupportedOperationException;\nuse Ramsey\\Collection\\Tool\\TypeTrait;\nuse Ramsey\\Collection\\Tool\\ValueExtractorTrait;\nuse Ramsey\\Collection\\Tool\\ValueToStringTrait;\n\nuse function array_filter;\nuse function array_key_first;\nuse function array_key_last;\nuse function array_map;\nuse function array_merge;\nuse function array_reduce;\nuse function array_search;\nuse function array_udiff;\nuse function array_uintersect;\nuse function in_array;\nuse function is_int;\nuse function is_object;\nuse function spl_object_id;\nuse function sprintf;\nuse function usort;\n\n/**\n * This class provides a basic implementation of `CollectionInterface`, to\n * minimize the effort required to implement this interface\n *\n * @template T\n * @extends AbstractArray<T>\n * @implements CollectionInterface<T>\n */\nabstract class AbstractCollection extends AbstractArray implements CollectionInterface\n{\n    use TypeTrait;\n    use ValueToStringTrait;\n    use ValueExtractorTrait;\n\n    /**\n     * @throws InvalidArgumentException if $element is of the wrong type.\n     */\n    public function add(mixed $element): bool\n    {\n        $this[] = $element;\n\n        return true;\n    }\n\n    public function contains(mixed $element, bool $strict = true): bool\n    {\n        return in_array($element, $this->data, $strict);\n    }\n\n    /**\n     * @throws InvalidArgumentException if $element is of the wrong type.\n     */\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($this->checkType($this->getType(), $value) === false) {\n            throw new InvalidArgumentException(\n                'Value must be of type ' . $this->getType() . '; value is '\n                . $this->toolValueToString($value),\n            );\n        }\n\n        if ($offset === null) {\n            $this->data[] = $value;\n        } else {\n            $this->data[$offset] = $value;\n        }\n    }\n\n    public function remove(mixed $element): bool\n    {\n        if (($position = array_search($element, $this->data, true)) !== false) {\n            unset($this[$position]);\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist\n     *     on the elements in this collection.\n     * @throws UnsupportedOperationException if unable to call column() on this\n     *     collection.\n     *\n     * @inheritDoc\n     */\n    public function column(string $propertyOrMethod): array\n    {\n        $temp = [];\n\n        foreach ($this->data as $item) {\n            $temp[] = $this->extractValue($item, $propertyOrMethod);\n        }\n\n        return $temp;\n    }\n\n    /**\n     * @return T\n     *\n     * @throws NoSuchElementException if this collection is empty.\n     */\n    public function first(): mixed\n    {\n        $firstIndex = array_key_first($this->data);\n\n        if ($firstIndex === null) {\n            throw new NoSuchElementException('Can\\'t determine first item. Collection is empty');\n        }\n\n        return $this->data[$firstIndex];\n    }\n\n    /**\n     * @return T\n     *\n     * @throws NoSuchElementException if this collection is empty.\n     */\n    public function last(): mixed\n    {\n        $lastIndex = array_key_last($this->data);\n\n        if ($lastIndex === null) {\n            throw new NoSuchElementException('Can\\'t determine last item. Collection is empty');\n        }\n\n        return $this->data[$lastIndex];\n    }\n\n    /**\n     * @return CollectionInterface<T>\n     *\n     * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist\n     *     on the elements in this collection.\n     * @throws UnsupportedOperationException if unable to call sort() on this\n     *     collection.\n     */\n    public function sort(?string $propertyOrMethod = null, Sort $order = Sort::Ascending): CollectionInterface\n    {\n        $collection = clone $this;\n\n        usort(\n            $collection->data,\n            function (mixed $a, mixed $b) use ($propertyOrMethod, $order): int {\n                $aValue = $this->extractValue($a, $propertyOrMethod);\n                $bValue = $this->extractValue($b, $propertyOrMethod);\n\n                return ($aValue <=> $bValue) * ($order === Sort::Descending ? -1 : 1);\n            },\n        );\n\n        return $collection;\n    }\n\n    /**\n     * @param callable(T): bool $callback A callable to use for filtering elements.\n     *\n     * @return CollectionInterface<T>\n     */\n    public function filter(callable $callback): CollectionInterface\n    {\n        $collection = clone $this;\n        $collection->data = array_merge([], array_filter($collection->data, $callback));\n\n        return $collection;\n    }\n\n    /**\n     * @return CollectionInterface<T>\n     *\n     * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist\n     *     on the elements in this collection.\n     * @throws UnsupportedOperationException if unable to call where() on this\n     *     collection.\n     */\n    public function where(?string $propertyOrMethod, mixed $value): CollectionInterface\n    {\n        return $this->filter(\n            fn (mixed $item): bool => $this->extractValue($item, $propertyOrMethod) === $value,\n        );\n    }\n\n    /**\n     * @param callable(T): TCallbackReturn $callback A callable to apply to each\n     *     item of the collection.\n     *\n     * @return CollectionInterface<TCallbackReturn>\n     *\n     * @template TCallbackReturn\n     */\n    public function map(callable $callback): CollectionInterface\n    {\n        return new Collection('mixed', array_map($callback, $this->data));\n    }\n\n    /**\n     * @param callable(TCarry, T): TCarry $callback A callable to apply to each\n     *     item of the collection to reduce it to a single value.\n     * @param TCarry $initial This is the initial value provided to the callback.\n     *\n     * @return TCarry\n     *\n     * @template TCarry\n     */\n    public function reduce(callable $callback, mixed $initial): mixed\n    {\n        return array_reduce($this->data, $callback, $initial);\n    }\n\n    /**\n     * @param CollectionInterface<T> $other The collection to check for divergent\n     *     items.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws CollectionMismatchException if the compared collections are of\n     *     differing types.\n     */\n    public function diff(CollectionInterface $other): CollectionInterface\n    {\n        $this->compareCollectionTypes($other);\n\n        $diffAtoB = array_udiff($this->data, $other->toArray(), $this->getComparator());\n        $diffBtoA = array_udiff($other->toArray(), $this->data, $this->getComparator());\n\n        $collection = clone $this;\n        $collection->data = array_merge($diffAtoB, $diffBtoA);\n\n        return $collection;\n    }\n\n    /**\n     * @param CollectionInterface<T> $other The collection to check for\n     *     intersecting items.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws CollectionMismatchException if the compared collections are of\n     *     differing types.\n     */\n    public function intersect(CollectionInterface $other): CollectionInterface\n    {\n        $this->compareCollectionTypes($other);\n\n        $collection = clone $this;\n        $collection->data = array_uintersect($this->data, $other->toArray(), $this->getComparator());\n\n        return $collection;\n    }\n\n    /**\n     * @param CollectionInterface<T> ...$collections The collections to merge.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws CollectionMismatchException if unable to merge any of the given\n     *     collections or items within the given collections due to type\n     *     mismatch errors.\n     */\n    public function merge(CollectionInterface ...$collections): CollectionInterface\n    {\n        $mergedCollection = clone $this;\n\n        foreach ($collections as $index => $collection) {\n            if (!$collection instanceof static) {\n                throw new CollectionMismatchException(\n                    sprintf('Collection with index %d must be of type %s', $index, static::class),\n                );\n            }\n\n            // When using generics (Collection.php, Set.php, etc),\n            // we also need to make sure that the internal types match each other\n            if ($this->getUniformType($collection) !== $this->getUniformType($this)) {\n                throw new CollectionMismatchException(\n                    sprintf(\n                        'Collection items in collection with index %d must be of type %s',\n                        $index,\n                        $this->getType(),\n                    ),\n                );\n            }\n\n            foreach ($collection as $key => $value) {\n                if (is_int($key)) {\n                    $mergedCollection[] = $value;\n                } else {\n                    $mergedCollection[$key] = $value;\n                }\n            }\n        }\n\n        return $mergedCollection;\n    }\n\n    /**\n     * @param CollectionInterface<T> $other\n     *\n     * @throws CollectionMismatchException\n     */\n    private function compareCollectionTypes(CollectionInterface $other): void\n    {\n        if (!$other instanceof static) {\n            throw new CollectionMismatchException('Collection must be of type ' . static::class);\n        }\n\n        // When using generics (Collection.php, Set.php, etc),\n        // we also need to make sure that the internal types match each other\n        if ($this->getUniformType($other) !== $this->getUniformType($this)) {\n            throw new CollectionMismatchException('Collection items must be of type ' . $this->getType());\n        }\n    }\n\n    private function getComparator(): Closure\n    {\n        return function (mixed $a, mixed $b): int {\n            // If the two values are object, we convert them to unique scalars.\n            // If the collection contains mixed values (unlikely) where some are objects\n            // and some are not, we leave them as they are.\n            // The comparator should still work and the result of $a < $b should\n            // be consistent but unpredictable since not documented.\n            if (is_object($a) && is_object($b)) {\n                $a = spl_object_id($a);\n                $b = spl_object_id($b);\n            }\n\n            return $a === $b ? 0 : ($a < $b ? 1 : -1);\n        };\n    }\n\n    /**\n     * @param CollectionInterface<mixed> $collection\n     */\n    private function getUniformType(CollectionInterface $collection): string\n    {\n        return match ($collection->getType()) {\n            'integer' => 'int',\n            'boolean' => 'bool',\n            'double' => 'float',\n            default => $collection->getType(),\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/AbstractSet.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\n/**\n * This class contains the basic implementation of a collection that does not\n * allow duplicated values (a set), to minimize the effort required to implement\n * this specific type of collection.\n *\n * @template T\n * @extends AbstractCollection<T>\n */\nabstract class AbstractSet extends AbstractCollection\n{\n    public function add(mixed $element): bool\n    {\n        if ($this->contains($element)) {\n            return false;\n        }\n\n        // Call offsetSet() on the parent instead of add(), since calling\n        // parent::add() will invoke $this->offsetSet(), which will call\n        // $this->contains() a second time. This can cause performance issues\n        // with extremely large collections. For more information, see\n        // https://github.com/ramsey/collection/issues/68.\n        parent::offsetSet(null, $element);\n\n        return true;\n    }\n\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($this->contains($value)) {\n            return;\n        }\n\n        parent::offsetSet($offset, $value);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/ArrayInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse ArrayAccess;\nuse Countable;\nuse IteratorAggregate;\n\n/**\n * `ArrayInterface` provides traversable array functionality to data types.\n *\n * @template T\n * @extends ArrayAccess<array-key, T>\n * @extends IteratorAggregate<array-key, T>\n */\ninterface ArrayInterface extends\n    ArrayAccess,\n    Countable,\n    IteratorAggregate\n{\n    /**\n     * Removes all items from this array.\n     */\n    public function clear(): void;\n\n    /**\n     * Returns a native PHP array representation of this array object.\n     *\n     * @return array<array-key, T>\n     */\n    public function toArray(): array;\n\n    /**\n     * Returns `true` if this array is empty.\n     */\n    public function isEmpty(): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Collection.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\n/**\n * A collection represents a group of objects.\n *\n * Each object in the collection is of a specific, defined type.\n *\n * This is a direct implementation of `CollectionInterface`, provided for\n * the sake of convenience.\n *\n * Example usage:\n *\n * ```\n * $collection = new \\Ramsey\\Collection\\Collection('My\\\\Foo');\n * $collection->add(new \\My\\Foo());\n * $collection->add(new \\My\\Foo());\n *\n * foreach ($collection as $foo) {\n *     // Do something with $foo\n * }\n * ```\n *\n * It is preferable to subclass `AbstractCollection` to create your own typed\n * collections. For example:\n *\n * ```\n * namespace My\\Foo;\n *\n * class FooCollection extends \\Ramsey\\Collection\\AbstractCollection\n * {\n *     public function getType()\n *     {\n *         return 'My\\\\Foo';\n *     }\n * }\n * ```\n *\n * And then use it similarly to the earlier example:\n *\n * ```\n * $fooCollection = new \\My\\Foo\\FooCollection();\n * $fooCollection->add(new \\My\\Foo());\n * $fooCollection->add(new \\My\\Foo());\n *\n * foreach ($fooCollection as $foo) {\n *     // Do something with $foo\n * }\n * ```\n *\n * The benefit with this approach is that you may do type-checking on the\n * collection object:\n *\n * ```\n * if ($collection instanceof \\My\\Foo\\FooCollection) {\n *     // the collection is a collection of My\\Foo objects\n * }\n * ```\n *\n * @template T\n * @extends AbstractCollection<T>\n */\nclass Collection extends AbstractCollection\n{\n    /**\n     * Constructs a collection object of the specified type, optionally with the\n     * specified data.\n     *\n     * @param string $collectionType The type or class name associated with this\n     *     collection.\n     * @param array<array-key, T> $data The initial items to store in the collection.\n     */\n    public function __construct(private readonly string $collectionType, array $data = [])\n    {\n        parent::__construct($data);\n    }\n\n    public function getType(): string\n    {\n        return $this->collectionType;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/CollectionInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse Ramsey\\Collection\\Exception\\CollectionMismatchException;\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Ramsey\\Collection\\Exception\\InvalidPropertyOrMethod;\nuse Ramsey\\Collection\\Exception\\NoSuchElementException;\nuse Ramsey\\Collection\\Exception\\UnsupportedOperationException;\n\n/**\n * A collection represents a group of values, known as its elements.\n *\n * Some collections allow duplicate elements and others do not. Some are ordered\n * and others unordered.\n *\n * @template T\n * @extends ArrayInterface<T>\n */\ninterface CollectionInterface extends ArrayInterface\n{\n    /**\n     * Ensures that this collection contains the specified element (optional\n     * operation).\n     *\n     * Returns `true` if this collection changed as a result of the call.\n     * (Returns `false` if this collection does not permit duplicates and\n     * already contains the specified element.)\n     *\n     * Collections that support this operation may place limitations on what\n     * elements may be added to this collection. In particular, some\n     * collections will refuse to add `null` elements, and others will impose\n     * restrictions on the type of elements that may be added. Collection\n     * classes should clearly specify in their documentation any restrictions\n     * on what elements may be added.\n     *\n     * If a collection refuses to add a particular element for any reason other\n     * than that it already contains the element, it must throw an exception\n     * (rather than returning `false`). This preserves the invariant that a\n     * collection always contains the specified element after this call returns.\n     *\n     * @param T $element The element to add to the collection.\n     *\n     * @return bool `true` if this collection changed as a result of the call.\n     *\n     * @throws InvalidArgumentException if the collection refuses to add the\n     *     $element for any reason other than that it already contains the element.\n     */\n    public function add(mixed $element): bool;\n\n    /**\n     * Returns `true` if this collection contains the specified element.\n     *\n     * @param T $element The element to check whether the collection contains.\n     * @param bool $strict Whether to perform a strict type check on the value.\n     */\n    public function contains(mixed $element, bool $strict = true): bool;\n\n    /**\n     * Returns the type associated with this collection.\n     */\n    public function getType(): string;\n\n    /**\n     * Removes a single instance of the specified element from this collection,\n     * if it is present.\n     *\n     * @param T $element The element to remove from the collection.\n     *\n     * @return bool `true` if an element was removed as a result of this call.\n     */\n    public function remove(mixed $element): bool;\n\n    /**\n     * Returns the values from the given property, method, or array key.\n     *\n     * @param string $propertyOrMethod The name of the property, method, or\n     *     array key to evaluate and return.\n     *\n     * @return list<mixed>\n     *\n     * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist\n     *     on the elements in this collection.\n     * @throws UnsupportedOperationException if unable to call column() on this\n     *     collection.\n     */\n    public function column(string $propertyOrMethod): array;\n\n    /**\n     * Returns the first item of the collection.\n     *\n     * @return T\n     *\n     * @throws NoSuchElementException if this collection is empty.\n     */\n    public function first(): mixed;\n\n    /**\n     * Returns the last item of the collection.\n     *\n     * @return T\n     *\n     * @throws NoSuchElementException if this collection is empty.\n     */\n    public function last(): mixed;\n\n    /**\n     * Sort the collection by a property, method, or array key with the given\n     * sort order.\n     *\n     * If $propertyOrMethod is `null`, this will sort by comparing each element.\n     *\n     * This will always leave the original collection untouched and will return\n     * a new one.\n     *\n     * @param string | null $propertyOrMethod The property, method, or array key\n     *     to sort by.\n     * @param Sort $order The sort order for the resulting collection.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist\n     *     on the elements in this collection.\n     * @throws UnsupportedOperationException if unable to call sort() on this\n     *     collection.\n     */\n    public function sort(?string $propertyOrMethod = null, Sort $order = Sort::Ascending): self;\n\n    /**\n     * Filter out items of the collection which don't match the criteria of\n     * given callback.\n     *\n     * This will always leave the original collection untouched and will return\n     * a new one.\n     *\n     * See the {@link http://php.net/manual/en/function.array-filter.php PHP array_filter() documentation}\n     * for examples of how the `$callback` parameter works.\n     *\n     * @param callable(T): bool $callback A callable to use for filtering elements.\n     *\n     * @return CollectionInterface<T>\n     */\n    public function filter(callable $callback): self;\n\n    /**\n     * Create a new collection where the result of the given property, method,\n     * or array key of each item in the collection equals the given value.\n     *\n     * This will always leave the original collection untouched and will return\n     * a new one.\n     *\n     * @param string | null $propertyOrMethod The property, method, or array key\n     *     to evaluate. If `null`, the element itself is compared to $value.\n     * @param mixed $value The value to match.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws InvalidPropertyOrMethod if the $propertyOrMethod does not exist\n     *     on the elements in this collection.\n     * @throws UnsupportedOperationException if unable to call where() on this\n     *     collection.\n     */\n    public function where(?string $propertyOrMethod, mixed $value): self;\n\n    /**\n     * Apply a given callback method on each item of the collection.\n     *\n     * This will always leave the original collection untouched. The new\n     * collection is created by mapping the callback to each item of the\n     * original collection.\n     *\n     * See the {@link http://php.net/manual/en/function.array-map.php PHP array_map() documentation}\n     * for examples of how the `$callback` parameter works.\n     *\n     * @param callable(T): TCallbackReturn $callback A callable to apply to each\n     *     item of the collection.\n     *\n     * @return CollectionInterface<TCallbackReturn>\n     *\n     * @template TCallbackReturn\n     */\n    public function map(callable $callback): self;\n\n    /**\n     * Apply a given callback method on each item of the collection\n     * to reduce it to a single value.\n     *\n     * See the {@link http://php.net/manual/en/function.array-reduce.php PHP array_reduce() documentation}\n     * for examples of how the `$callback` and `$initial` parameters work.\n     *\n     * @param callable(TCarry, T): TCarry $callback A callable to apply to each\n     *     item of the collection to reduce it to a single value.\n     * @param TCarry $initial This is the initial value provided to the callback.\n     *\n     * @return TCarry\n     *\n     * @template TCarry\n     */\n    public function reduce(callable $callback, mixed $initial): mixed;\n\n    /**\n     * Create a new collection with divergent items between current and given\n     * collection.\n     *\n     * @param CollectionInterface<T> $other The collection to check for divergent\n     *     items.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws CollectionMismatchException if the compared collections are of\n     *     differing types.\n     */\n    public function diff(CollectionInterface $other): self;\n\n    /**\n     * Create a new collection with intersecting item between current and given\n     * collection.\n     *\n     * @param CollectionInterface<T> $other The collection to check for\n     *     intersecting items.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws CollectionMismatchException if the compared collections are of\n     *     differing types.\n     */\n    public function intersect(CollectionInterface $other): self;\n\n    /**\n     * Merge current items and items of given collections into a new one.\n     *\n     * @param CollectionInterface<T> ...$collections The collections to merge.\n     *\n     * @return CollectionInterface<T>\n     *\n     * @throws CollectionMismatchException if unable to merge any of the given\n     *     collections or items within the given collections due to type\n     *     mismatch errors.\n     */\n    public function merge(CollectionInterface ...$collections): self;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/DoubleEndedQueue.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Ramsey\\Collection\\Exception\\NoSuchElementException;\n\nuse function array_key_last;\nuse function array_pop;\nuse function array_unshift;\n\n/**\n * This class provides a basic implementation of `DoubleEndedQueueInterface`, to\n * minimize the effort required to implement this interface.\n *\n * @template T\n * @extends Queue<T>\n * @implements DoubleEndedQueueInterface<T>\n */\nclass DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface\n{\n    /**\n     * Constructs a double-ended queue (dequeue) object of the specified type,\n     * optionally with the specified data.\n     *\n     * @param string $queueType The type or class name associated with this dequeue.\n     * @param array<array-key, T> $data The initial items to store in the dequeue.\n     */\n    public function __construct(private readonly string $queueType, array $data = [])\n    {\n        parent::__construct($this->queueType, $data);\n    }\n\n    /**\n     * @throws InvalidArgumentException if $element is of the wrong type\n     */\n    public function addFirst(mixed $element): bool\n    {\n        if ($this->checkType($this->getType(), $element) === false) {\n            throw new InvalidArgumentException(\n                'Value must be of type ' . $this->getType() . '; value is '\n                . $this->toolValueToString($element),\n            );\n        }\n\n        array_unshift($this->data, $element);\n\n        return true;\n    }\n\n    /**\n     * @throws InvalidArgumentException if $element is of the wrong type\n     */\n    public function addLast(mixed $element): bool\n    {\n        return $this->add($element);\n    }\n\n    public function offerFirst(mixed $element): bool\n    {\n        try {\n            return $this->addFirst($element);\n        } catch (InvalidArgumentException) {\n            return false;\n        }\n    }\n\n    public function offerLast(mixed $element): bool\n    {\n        return $this->offer($element);\n    }\n\n    /**\n     * @return T the first element in this queue.\n     *\n     * @throws NoSuchElementException if the queue is empty\n     */\n    public function removeFirst(): mixed\n    {\n        return $this->remove();\n    }\n\n    /**\n     * @return T the last element in this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function removeLast(): mixed\n    {\n        return $this->pollLast() ?? throw new NoSuchElementException(\n            'Can\\'t return element from Queue. Queue is empty.',\n        );\n    }\n\n    /**\n     * @return T | null the head of this queue, or `null` if this queue is empty.\n     */\n    public function pollFirst(): mixed\n    {\n        return $this->poll();\n    }\n\n    /**\n     * @return T | null the tail of this queue, or `null` if this queue is empty.\n     */\n    public function pollLast(): mixed\n    {\n        return array_pop($this->data);\n    }\n\n    /**\n     * @return T the head of this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function firstElement(): mixed\n    {\n        return $this->element();\n    }\n\n    /**\n     * @return T the tail of this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function lastElement(): mixed\n    {\n        return $this->peekLast() ?? throw new NoSuchElementException(\n            'Can\\'t return element from Queue. Queue is empty.',\n        );\n    }\n\n    /**\n     * @return T | null the head of this queue, or `null` if this queue is empty.\n     */\n    public function peekFirst(): mixed\n    {\n        return $this->peek();\n    }\n\n    /**\n     * @return T | null the tail of this queue, or `null` if this queue is empty.\n     */\n    public function peekLast(): mixed\n    {\n        $lastIndex = array_key_last($this->data);\n\n        if ($lastIndex === null) {\n            return null;\n        }\n\n        return $this->data[$lastIndex];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse Ramsey\\Collection\\Exception\\NoSuchElementException;\nuse RuntimeException;\n\n/**\n * A linear collection that supports element insertion and removal at both ends.\n *\n * Most `DoubleEndedQueueInterface` implementations place no fixed limits on the\n * number of elements they may contain, but this interface supports\n * capacity-restricted double-ended queues as well as those with no fixed size\n * limit.\n *\n * This interface defines methods to access the elements at both ends of the\n * double-ended queue. Methods are provided to insert, remove, and examine the\n * element. Each of these methods exists in two forms: one throws an exception\n * if the operation fails, the other returns a special value (either `null` or\n * `false`, depending on the operation). The latter form of the insert operation\n * is designed specifically for use with capacity-restricted implementations; in\n * most implementations, insert operations cannot fail.\n *\n * The twelve methods described above are summarized in the following table:\n *\n * <table>\n * <caption>Summary of DoubleEndedQueueInterface methods</caption>\n * <thead>\n * <tr>\n * <th></th>\n * <th colspan=2>First Element (Head)</th>\n * <th colspan=2>Last Element (Tail)</th>\n * </tr>\n * <tr>\n * <td></td>\n * <td><em>Throws exception</em></td>\n * <td><em>Special value</em></td>\n * <td><em>Throws exception</em></td>\n * <td><em>Special value</em></td>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <th>Insert</th>\n * <td><code>addFirst()</code></td>\n * <td><code>offerFirst()</code></td>\n * <td><code>addLast()</code></td>\n * <td><code>offerLast()</code></td>\n * </tr>\n * <tr>\n * <th>Remove</th>\n * <td><code>removeFirst()</code></td>\n * <td><code>pollFirst()</code></td>\n * <td><code>removeLast()</code></td>\n * <td><code>pollLast()</code></td>\n * </tr>\n * <tr>\n * <th>Examine</th>\n * <td><code>firstElement()</code></td>\n * <td><code>peekFirst()</code></td>\n * <td><code>lastElement()</code></td>\n * <td><code>peekLast()</code></td>\n * </tr>\n * </tbody>\n * </table>\n *\n * This interface extends the `QueueInterface`. When a double-ended queue is\n * used as a queue, FIFO (first-in-first-out) behavior results. Elements are\n * added at the end of the double-ended queue and removed from the beginning.\n * The methods inherited from the `QueueInterface` are precisely equivalent to\n * `DoubleEndedQueueInterface` methods as indicated in the following table:\n *\n * <table>\n * <caption>Comparison of QueueInterface and DoubleEndedQueueInterface methods</caption>\n * <thead>\n * <tr>\n * <th>QueueInterface Method</th>\n * <th>DoubleEndedQueueInterface Method</th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td><code>add()</code></td>\n * <td><code>addLast()</code></td>\n * </tr>\n * <tr>\n * <td><code>offer()</code></td>\n * <td><code>offerLast()</code></td>\n * </tr>\n * <tr>\n * <td><code>remove()</code></td>\n * <td><code>removeFirst()</code></td>\n * </tr>\n * <tr>\n * <td><code>poll()</code></td>\n * <td><code>pollFirst()</code></td>\n * </tr>\n * <tr>\n * <td><code>element()</code></td>\n * <td><code>firstElement()</code></td>\n * </tr>\n * <tr>\n * <td><code>peek()</code></td>\n * <td><code>peekFirst()</code></td>\n * </tr>\n * </tbody>\n * </table>\n *\n * Double-ended queues can also be used as LIFO (last-in-first-out) stacks. When\n * a double-ended queue is used as a stack, elements are pushed and popped from\n * the beginning of the double-ended queue. Stack concepts are precisely\n * equivalent to `DoubleEndedQueueInterface` methods as indicated in the table\n * below:\n *\n * <table>\n * <caption>Comparison of stack concepts and DoubleEndedQueueInterface methods</caption>\n * <thead>\n * <tr>\n * <th>Stack concept</th>\n * <th>DoubleEndedQueueInterface Method</th>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <td><em>push</em></td>\n * <td><code>addFirst()</code></td>\n * </tr>\n * <tr>\n * <td><em>pop</em></td>\n * <td><code>removeFirst()</code></td>\n * </tr>\n * <tr>\n * <td><em>peek</em></td>\n * <td><code>peekFirst()</code></td>\n * </tr>\n * </tbody>\n * </table>\n *\n * Note that the `peek()` method works equally well when a double-ended queue is\n * used as a queue or a stack; in either case, elements are drawn from the\n * beginning of the double-ended queue.\n *\n * While `DoubleEndedQueueInterface` implementations are not strictly required\n * to prohibit the insertion of `null` elements, they are strongly encouraged to\n * do so. Users of any `DoubleEndedQueueInterface` implementations that do allow\n * `null` elements are strongly encouraged *not* to take advantage of the\n * ability to insert nulls. This is so because `null` is used as a special\n * return value by various methods to indicated that the double-ended queue is\n * empty.\n *\n * @template T\n * @extends QueueInterface<T>\n */\ninterface DoubleEndedQueueInterface extends QueueInterface\n{\n    /**\n     * Inserts the specified element at the front of this queue if it is\n     * possible to do so immediately without violating capacity restrictions.\n     *\n     * When using a capacity-restricted double-ended queue, it is generally\n     * preferable to use the `offerFirst()` method.\n     *\n     * @param T $element The element to add to the front of this queue.\n     *\n     * @return bool `true` if this queue changed as a result of the call.\n     *\n     * @throws RuntimeException if a queue refuses to add a particular element\n     *     for any reason other than that it already contains the element.\n     *     Implementations should use a more-specific exception that extends\n     *     `\\RuntimeException`.\n     */\n    public function addFirst(mixed $element): bool;\n\n    /**\n     * Inserts the specified element at the end of this queue if it is possible\n     * to do so immediately without violating capacity restrictions.\n     *\n     * When using a capacity-restricted double-ended queue, it is generally\n     * preferable to use the `offerLast()` method.\n     *\n     * This method is equivalent to `add()`.\n     *\n     * @param T $element The element to add to the end of this queue.\n     *\n     * @return bool `true` if this queue changed as a result of the call.\n     *\n     * @throws RuntimeException if a queue refuses to add a particular element\n     *     for any reason other than that it already contains the element.\n     *     Implementations should use a more-specific exception that extends\n     *     `\\RuntimeException`.\n     */\n    public function addLast(mixed $element): bool;\n\n    /**\n     * Inserts the specified element at the front of this queue if it is\n     * possible to do so immediately without violating capacity restrictions.\n     *\n     * When using a capacity-restricted queue, this method is generally\n     * preferable to `addFirst()`, which can fail to insert an element only by\n     * throwing an exception.\n     *\n     * @param T $element The element to add to the front of this queue.\n     *\n     * @return bool `true` if the element was added to this queue, else `false`.\n     */\n    public function offerFirst(mixed $element): bool;\n\n    /**\n     * Inserts the specified element at the end of this queue if it is possible\n     * to do so immediately without violating capacity restrictions.\n     *\n     * When using a capacity-restricted queue, this method is generally\n     * preferable to `addLast()` which can fail to insert an element only by\n     * throwing an exception.\n     *\n     * @param T $element The element to add to the end of this queue.\n     *\n     * @return bool `true` if the element was added to this queue, else `false`.\n     */\n    public function offerLast(mixed $element): bool;\n\n    /**\n     * Retrieves and removes the head of this queue.\n     *\n     * This method differs from `pollFirst()` only in that it throws an\n     * exception if this queue is empty.\n     *\n     * @return T the first element in this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function removeFirst(): mixed;\n\n    /**\n     * Retrieves and removes the tail of this queue.\n     *\n     * This method differs from `pollLast()` only in that it throws an exception\n     * if this queue is empty.\n     *\n     * @return T the last element in this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function removeLast(): mixed;\n\n    /**\n     * Retrieves and removes the head of this queue, or returns `null` if this\n     * queue is empty.\n     *\n     * @return T | null the head of this queue, or `null` if this queue is empty.\n     */\n    public function pollFirst(): mixed;\n\n    /**\n     * Retrieves and removes the tail of this queue, or returns `null` if this\n     * queue is empty.\n     *\n     * @return T | null the tail of this queue, or `null` if this queue is empty.\n     */\n    public function pollLast(): mixed;\n\n    /**\n     * Retrieves, but does not remove, the head of this queue.\n     *\n     * This method differs from `peekFirst()` only in that it throws an\n     * exception if this queue is empty.\n     *\n     * @return T the head of this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function firstElement(): mixed;\n\n    /**\n     * Retrieves, but does not remove, the tail of this queue.\n     *\n     * This method differs from `peekLast()` only in that it throws an exception\n     * if this queue is empty.\n     *\n     * @return T the tail of this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function lastElement(): mixed;\n\n    /**\n     * Retrieves, but does not remove, the head of this queue, or returns `null`\n     * if this queue is empty.\n     *\n     * @return T | null the head of this queue, or `null` if this queue is empty.\n     */\n    public function peekFirst(): mixed;\n\n    /**\n     * Retrieves, but does not remove, the tail of this queue, or returns `null`\n     * if this queue is empty.\n     *\n     * @return T | null the tail of this queue, or `null` if this queue is empty.\n     */\n    public function peekLast(): mixed;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/CollectionException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse Throwable;\n\ninterface CollectionException extends Throwable\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse RuntimeException;\n\n/**\n * Thrown when attempting to operate on collections of differing types.\n */\nclass CollectionMismatchException extends RuntimeException implements CollectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse InvalidArgumentException as PhpInvalidArgumentException;\n\n/**\n * Thrown to indicate an argument is not of the expected type.\n */\nclass InvalidArgumentException extends PhpInvalidArgumentException implements CollectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse RuntimeException;\n\n/**\n * Thrown when attempting to evaluate a property, method, or array key\n * that doesn't exist on an element or cannot otherwise be evaluated in the\n * current context.\n */\nclass InvalidPropertyOrMethod extends RuntimeException implements CollectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/NoSuchElementException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse RuntimeException;\n\n/**\n * Thrown when attempting to access an element that does not exist.\n */\nclass NoSuchElementException extends RuntimeException implements CollectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse OutOfBoundsException as PhpOutOfBoundsException;\n\n/**\n * Thrown when attempting to access an element out of the range of the collection.\n */\nclass OutOfBoundsException extends PhpOutOfBoundsException implements CollectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Exception;\n\nuse RuntimeException;\n\n/**\n * Thrown to indicate that the requested operation is not supported.\n */\nclass UnsupportedOperationException extends RuntimeException implements CollectionException\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/GenericArray.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\n/**\n * `GenericArray` represents a standard array object.\n *\n * @extends AbstractArray<mixed>\n */\nclass GenericArray extends AbstractArray\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/AbstractMap.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\nuse Ramsey\\Collection\\AbstractArray;\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Traversable;\n\nuse function array_key_exists;\nuse function array_keys;\nuse function in_array;\nuse function var_export;\n\n/**\n * This class provides a basic implementation of `MapInterface`, to minimize the\n * effort required to implement this interface.\n *\n * @template K of array-key\n * @template T\n * @extends AbstractArray<T>\n * @implements MapInterface<K, T>\n */\nabstract class AbstractMap extends AbstractArray implements MapInterface\n{\n    /**\n     * @param array<K, T> $data The initial items to add to this map.\n     */\n    public function __construct(array $data = [])\n    {\n        parent::__construct($data);\n    }\n\n    /**\n     * @return Traversable<K, T>\n     */\n    public function getIterator(): Traversable\n    {\n        return parent::getIterator();\n    }\n\n    /**\n     * @param K $offset The offset to set\n     * @param T $value The value to set at the given offset.\n     *\n     * @inheritDoc\n     */\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($offset === null) {\n            throw new InvalidArgumentException(\n                'Map elements are key/value pairs; a key must be provided for '\n                . 'value ' . var_export($value, true),\n            );\n        }\n\n        $this->data[$offset] = $value;\n    }\n\n    public function containsKey(int | string $key): bool\n    {\n        return array_key_exists($key, $this->data);\n    }\n\n    public function containsValue(mixed $value): bool\n    {\n        return in_array($value, $this->data, true);\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function keys(): array\n    {\n        /** @var list<K> */\n        return array_keys($this->data);\n    }\n\n    /**\n     * @param K $key The key to return from the map.\n     * @param T | null $defaultValue The default value to use if `$key` is not found.\n     *\n     * @return T | null the value or `null` if the key could not be found.\n     */\n    public function get(int | string $key, mixed $defaultValue = null): mixed\n    {\n        return $this[$key] ?? $defaultValue;\n    }\n\n    /**\n     * @param K $key The key to put or replace in the map.\n     * @param T $value The value to store at `$key`.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function put(int | string $key, mixed $value): mixed\n    {\n        $previousValue = $this->get($key);\n        $this[$key] = $value;\n\n        return $previousValue;\n    }\n\n    /**\n     * @param K $key The key to put in the map.\n     * @param T $value The value to store at `$key`.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function putIfAbsent(int | string $key, mixed $value): mixed\n    {\n        $currentValue = $this->get($key);\n\n        if ($currentValue === null) {\n            $this[$key] = $value;\n        }\n\n        return $currentValue;\n    }\n\n    /**\n     * @param K $key The key to remove from the map.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function remove(int | string $key): mixed\n    {\n        $previousValue = $this->get($key);\n        unset($this[$key]);\n\n        return $previousValue;\n    }\n\n    public function removeIf(int | string $key, mixed $value): bool\n    {\n        if ($this->get($key) === $value) {\n            unset($this[$key]);\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @param K $key The key to replace.\n     * @param T $value The value to set at `$key`.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function replace(int | string $key, mixed $value): mixed\n    {\n        $currentValue = $this->get($key);\n\n        if ($this->containsKey($key)) {\n            $this[$key] = $value;\n        }\n\n        return $currentValue;\n    }\n\n    public function replaceIf(int | string $key, mixed $oldValue, mixed $newValue): bool\n    {\n        if ($this->get($key) === $oldValue) {\n            $this[$key] = $newValue;\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return array<K, T>\n     */\n    public function __serialize(): array\n    {\n        /** @var array<K, T> */\n        return parent::__serialize();\n    }\n\n    /**\n     * @return array<K, T>\n     */\n    public function toArray(): array\n    {\n        /** @var array<K, T> */\n        return parent::toArray();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/AbstractTypedMap.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Ramsey\\Collection\\Tool\\TypeTrait;\nuse Ramsey\\Collection\\Tool\\ValueToStringTrait;\n\n/**\n * This class provides a basic implementation of `TypedMapInterface`, to\n * minimize the effort required to implement this interface.\n *\n * @template K of array-key\n * @template T\n * @extends AbstractMap<K, T>\n * @implements TypedMapInterface<K, T>\n */\nabstract class AbstractTypedMap extends AbstractMap implements TypedMapInterface\n{\n    use TypeTrait;\n    use ValueToStringTrait;\n\n    /**\n     * @param K $offset\n     * @param T $value\n     *\n     * @inheritDoc\n     */\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($this->checkType($this->getKeyType(), $offset) === false) {\n            throw new InvalidArgumentException(\n                'Key must be of type ' . $this->getKeyType() . '; key is '\n                . $this->toolValueToString($offset),\n            );\n        }\n\n        if ($this->checkType($this->getValueType(), $value) === false) {\n            throw new InvalidArgumentException(\n                'Value must be of type ' . $this->getValueType() . '; value is '\n                . $this->toolValueToString($value),\n            );\n        }\n\n        parent::offsetSet($offset, $value);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\n/**\n * `AssociativeArrayMap` represents a standard associative array object.\n *\n * @extends AbstractMap<string, mixed>\n */\nclass AssociativeArrayMap extends AbstractMap\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/MapInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\nuse Ramsey\\Collection\\ArrayInterface;\n\n/**\n * An object that maps keys to values.\n *\n * A map cannot contain duplicate keys; each key can map to at most one value.\n *\n * @template K of array-key\n * @template T\n * @extends ArrayInterface<T>\n */\ninterface MapInterface extends ArrayInterface\n{\n    /**\n     * Returns `true` if this map contains a mapping for the specified key.\n     *\n     * @param K $key The key to check in the map.\n     */\n    public function containsKey(int | string $key): bool;\n\n    /**\n     * Returns `true` if this map maps one or more keys to the specified value.\n     *\n     * This performs a strict type check on the value.\n     *\n     * @param T $value The value to check in the map.\n     */\n    public function containsValue(mixed $value): bool;\n\n    /**\n     * Return an array of the keys contained in this map.\n     *\n     * @return list<K>\n     */\n    public function keys(): array;\n\n    /**\n     * Returns the value to which the specified key is mapped, `null` if this\n     * map contains no mapping for the key, or (optionally) `$defaultValue` if\n     * this map contains no mapping for the key.\n     *\n     * @param K $key The key to return from the map.\n     * @param T | null $defaultValue The default value to use if `$key` is not found.\n     *\n     * @return T | null the value or `null` if the key could not be found.\n     */\n    public function get(int | string $key, mixed $defaultValue = null): mixed;\n\n    /**\n     * Associates the specified value with the specified key in this map.\n     *\n     * If the map previously contained a mapping for the key, the old value is\n     * replaced by the specified value.\n     *\n     * @param K $key The key to put or replace in the map.\n     * @param T $value The value to store at `$key`.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function put(int | string $key, mixed $value): mixed;\n\n    /**\n     * Associates the specified value with the specified key in this map only if\n     * it is not already set.\n     *\n     * If there is already a value associated with `$key`, this returns that\n     * value without replacing it.\n     *\n     * @param K $key The key to put in the map.\n     * @param T $value The value to store at `$key`.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function putIfAbsent(int | string $key, mixed $value): mixed;\n\n    /**\n     * Removes the mapping for a key from this map if it is present.\n     *\n     * @param K $key The key to remove from the map.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function remove(int | string $key): mixed;\n\n    /**\n     * Removes the entry for the specified key only if it is currently mapped to\n     * the specified value.\n     *\n     * This performs a strict type check on the value.\n     *\n     * @param K $key The key to remove from the map.\n     * @param T $value The value to match.\n     *\n     * @return bool true if the value was removed.\n     */\n    public function removeIf(int | string $key, mixed $value): bool;\n\n    /**\n     * Replaces the entry for the specified key only if it is currently mapped\n     * to some value.\n     *\n     * @param K $key The key to replace.\n     * @param T $value The value to set at `$key`.\n     *\n     * @return T | null the previous value associated with key, or `null` if\n     *     there was no mapping for `$key`.\n     */\n    public function replace(int | string $key, mixed $value): mixed;\n\n    /**\n     * Replaces the entry for the specified key only if currently mapped to the\n     * specified value.\n     *\n     * This performs a strict type check on the value.\n     *\n     * @param K $key The key to remove from the map.\n     * @param T $oldValue The value to match.\n     * @param T $newValue The value to use as a replacement.\n     *\n     * @return bool true if the value was replaced.\n     */\n    public function replaceIf(int | string $key, mixed $oldValue, mixed $newValue): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/NamedParameterMap.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Ramsey\\Collection\\Tool\\TypeTrait;\nuse Ramsey\\Collection\\Tool\\ValueToStringTrait;\n\nuse function array_combine;\nuse function array_key_exists;\nuse function is_int;\n\n/**\n * `NamedParameterMap` represents a mapping of values to a set of named keys\n * that may optionally be typed\n *\n * @extends AbstractMap<string, mixed>\n */\nclass NamedParameterMap extends AbstractMap\n{\n    use TypeTrait;\n    use ValueToStringTrait;\n\n    /**\n     * Named parameters defined for this map.\n     *\n     * @var array<string, string>\n     */\n    private readonly array $namedParameters;\n\n    /**\n     * Constructs a new `NamedParameterMap`.\n     *\n     * @param array<array-key, string> $namedParameters The named parameters defined for this map.\n     * @param array<string, mixed> $data An initial set of data to set on this map.\n     */\n    public function __construct(array $namedParameters, array $data = [])\n    {\n        $this->namedParameters = $this->filterNamedParameters($namedParameters);\n        parent::__construct($data);\n    }\n\n    /**\n     * Returns named parameters set for this `NamedParameterMap`.\n     *\n     * @return array<string, string>\n     */\n    public function getNamedParameters(): array\n    {\n        return $this->namedParameters;\n    }\n\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if (!array_key_exists($offset, $this->namedParameters)) {\n            throw new InvalidArgumentException(\n                'Attempting to set value for unconfigured parameter \\''\n                . $this->toolValueToString($offset) . '\\'',\n            );\n        }\n\n        if ($this->checkType($this->namedParameters[$offset], $value) === false) {\n            throw new InvalidArgumentException(\n                'Value for \\'' . $offset . '\\' must be of type '\n                . $this->namedParameters[$offset] . '; value is '\n                . $this->toolValueToString($value),\n            );\n        }\n\n        $this->data[$offset] = $value;\n    }\n\n    /**\n     * Given an array of named parameters, constructs a proper mapping of\n     * named parameters to types.\n     *\n     * @param array<array-key, string> $namedParameters The named parameters to filter.\n     *\n     * @return array<string, string>\n     */\n    protected function filterNamedParameters(array $namedParameters): array\n    {\n        $names = [];\n        $types = [];\n\n        foreach ($namedParameters as $key => $value) {\n            if (is_int($key)) {\n                $names[] = $value;\n                $types[] = 'mixed';\n            } else {\n                $names[] = $key;\n                $types[] = $value;\n            }\n        }\n\n        return array_combine($names, $types) ?: [];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/TypedMap.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\n/**\n * A `TypedMap` represents a map of elements where key and value are typed.\n *\n * Each element is identified by a key with defined type and a value of defined\n * type. The keys of the map must be unique. The values on the map can be\n * repeated but each with its own different key.\n *\n * The most common case is to use a string type key, but it's not limited to\n * this type of keys.\n *\n * This is a direct implementation of `TypedMapInterface`, provided for the sake\n * of convenience.\n *\n * Example usage:\n *\n * ```\n * $map = new TypedMap('string', Foo::class);\n * $map['x'] = new Foo();\n * foreach ($map as $key => $value) {\n *     // do something with $key, it will be a Foo::class\n * }\n *\n * // this will throw an exception since key must be string\n * $map[10] = new Foo();\n *\n * // this will throw an exception since value must be a Foo\n * $map['bar'] = 'bar';\n *\n * // initialize map with contents\n * $map = new TypedMap('string', Foo::class, [\n *     new Foo(), new Foo(), new Foo()\n * ]);\n * ```\n *\n * It is preferable to subclass `AbstractTypedMap` to create your own typed map\n * implementation:\n *\n * ```\n * class FooTypedMap extends AbstractTypedMap\n * {\n *     public function getKeyType()\n *     {\n *         return 'int';\n *     }\n *\n *     public function getValueType()\n *     {\n *          return Foo::class;\n *     }\n * }\n * ```\n *\n * … but you also may use the `TypedMap` class:\n *\n * ```\n * class FooTypedMap extends TypedMap\n * {\n *     public function __constructor(array $data = [])\n *     {\n *         parent::__construct('int', Foo::class, $data);\n *     }\n * }\n * ```\n *\n * @template K of array-key\n * @template T\n * @extends AbstractTypedMap<K, T>\n */\nclass TypedMap extends AbstractTypedMap\n{\n    /**\n     * Constructs a map object of the specified key and value types,\n     * optionally with the specified data.\n     *\n     * @param string $keyType The data type of the map's keys.\n     * @param string $valueType The data type of the map's values.\n     * @param array<K, T> $data The initial data to set for this map.\n     */\n    public function __construct(\n        private readonly string $keyType,\n        private readonly string $valueType,\n        array $data = [],\n    ) {\n        parent::__construct($data);\n    }\n\n    public function getKeyType(): string\n    {\n        return $this->keyType;\n    }\n\n    public function getValueType(): string\n    {\n        return $this->valueType;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Map/TypedMapInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Map;\n\n/**\n * A `TypedMapInterface` represents a map of elements where key and value are\n * typed.\n *\n * @template K of array-key\n * @template T\n * @extends MapInterface<K, T>\n */\ninterface TypedMapInterface extends MapInterface\n{\n    /**\n     * Return the type used on the key.\n     */\n    public function getKeyType(): string;\n\n    /**\n     * Return the type forced on the values.\n     */\n    public function getValueType(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Queue.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse Ramsey\\Collection\\Exception\\InvalidArgumentException;\nuse Ramsey\\Collection\\Exception\\NoSuchElementException;\nuse Ramsey\\Collection\\Tool\\TypeTrait;\nuse Ramsey\\Collection\\Tool\\ValueToStringTrait;\n\nuse function array_key_first;\n\n/**\n * This class provides a basic implementation of `QueueInterface`, to minimize\n * the effort required to implement this interface.\n *\n * @template T\n * @extends AbstractArray<T>\n * @implements QueueInterface<T>\n */\nclass Queue extends AbstractArray implements QueueInterface\n{\n    use TypeTrait;\n    use ValueToStringTrait;\n\n    /**\n     * Constructs a queue object of the specified type, optionally with the\n     * specified data.\n     *\n     * @param string $queueType The type or class name associated with this queue.\n     * @param array<array-key, T> $data The initial items to store in the queue.\n     */\n    public function __construct(private readonly string $queueType, array $data = [])\n    {\n        parent::__construct($data);\n    }\n\n    /**\n     * {@inheritDoc}\n     *\n     * Since arbitrary offsets may not be manipulated in a queue, this method\n     * serves only to fulfill the `ArrayAccess` interface requirements. It is\n     * invoked by other operations when adding values to the queue.\n     *\n     * @throws InvalidArgumentException if $value is of the wrong type.\n     */\n    public function offsetSet(mixed $offset, mixed $value): void\n    {\n        if ($this->checkType($this->getType(), $value) === false) {\n            throw new InvalidArgumentException(\n                'Value must be of type ' . $this->getType() . '; value is '\n                . $this->toolValueToString($value),\n            );\n        }\n\n        $this->data[] = $value;\n    }\n\n    /**\n     * @throws InvalidArgumentException if $value is of the wrong type.\n     */\n    public function add(mixed $element): bool\n    {\n        $this[] = $element;\n\n        return true;\n    }\n\n    /**\n     * @return T\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function element(): mixed\n    {\n        return $this->peek() ?? throw new NoSuchElementException(\n            'Can\\'t return element from Queue. Queue is empty.',\n        );\n    }\n\n    public function offer(mixed $element): bool\n    {\n        try {\n            return $this->add($element);\n        } catch (InvalidArgumentException) {\n            return false;\n        }\n    }\n\n    /**\n     * @return T | null\n     */\n    public function peek(): mixed\n    {\n        $index = array_key_first($this->data);\n\n        if ($index === null) {\n            return null;\n        }\n\n        return $this[$index];\n    }\n\n    /**\n     * @return T | null\n     */\n    public function poll(): mixed\n    {\n        $index = array_key_first($this->data);\n\n        if ($index === null) {\n            return null;\n        }\n\n        $head = $this[$index];\n        unset($this[$index]);\n\n        return $head;\n    }\n\n    /**\n     * @return T\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function remove(): mixed\n    {\n        return $this->poll() ?? throw new NoSuchElementException(\n            'Can\\'t return element from Queue. Queue is empty.',\n        );\n    }\n\n    public function getType(): string\n    {\n        return $this->queueType;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/QueueInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\nuse Ramsey\\Collection\\Exception\\NoSuchElementException;\nuse RuntimeException;\n\n/**\n * A queue is a collection in which the entities in the collection are kept in\n * order.\n *\n * The principal operations on the queue are the addition of entities to the end\n * (tail), also known as *enqueue*, and removal of entities from the front\n * (head), also known as *dequeue*. This makes the queue a first-in-first-out\n * (FIFO) data structure.\n *\n * Besides basic array operations, queues provide additional insertion,\n * extraction, and inspection operations. Each of these methods exists in two\n * forms: one throws an exception if the operation fails, the other returns a\n * special value (either `null` or `false`, depending on the operation). The\n * latter form of the insert operation is designed specifically for use with\n * capacity-restricted `QueueInterface` implementations; in most\n * implementations, insert operations cannot fail.\n *\n * <table>\n * <caption>Summary of QueueInterface methods</caption>\n * <thead>\n * <tr>\n * <td></td>\n * <td><em>Throws exception</em></td>\n * <td><em>Returns special value</em></td>\n * </tr>\n * </thead>\n * <tbody>\n * <tr>\n * <th>Insert</th>\n * <td><code>add()</code></td>\n * <td><code>offer()</code></td>\n * </tr>\n * <tr>\n * <th>Remove</th>\n * <td><code>remove()</code></td>\n * <td><code>poll()</code></td>\n * </tr>\n * <tr>\n * <th>Examine</th>\n * <td><code>element()</code></td>\n * <td><code>peek()</code></td>\n * </tr>\n * </tbody>\n * </table>\n *\n * Queues typically, but do not necessarily, order elements in a FIFO\n * (first-in-first-out) manner. Among the exceptions are priority queues, which\n * order elements according to a supplied comparator, or the elements' natural\n * ordering, and LIFO queues (or stacks) which order the elements LIFO\n * (last-in-first-out). Whatever the ordering used, the head of the queue is\n * that element which would be removed by a call to remove() or poll(). In a\n * FIFO queue, all new elements are inserted at the tail of the queue. Other\n * kinds of queues may use different placement rules. Every `QueueInterface`\n * implementation must specify its ordering properties.\n *\n * The `offer()` method inserts an element if possible, otherwise returning\n * `false`. This differs from the `add()` method, which can fail to add an\n * element only by throwing an unchecked exception. The `offer()` method is\n * designed for use when failure is a normal, rather than exceptional\n * occurrence, for example, in fixed-capacity (or \"bounded\") queues.\n *\n * The `remove()` and `poll()` methods remove and return the head of the queue.\n * Exactly which element is removed from the queue is a function of the queue's\n * ordering policy, which differs from implementation to implementation. The\n * `remove()` and `poll()` methods differ only in their behavior when the queue\n * is empty: the `remove()` method throws an exception, while the `poll()`\n * method returns `null`.\n *\n * The `element()` and `peek()` methods return, but do not remove, the head of\n * the queue.\n *\n * `QueueInterface` implementations generally do not allow insertion of `null`\n * elements, although some implementations do not prohibit insertion of `null`.\n * Even in the implementations that permit it, `null` should not be inserted\n * into a queue, as `null` is also used as a special return value by the\n * `poll()` method to indicate that the queue contains no elements.\n *\n * @template T\n * @extends ArrayInterface<T>\n */\ninterface QueueInterface extends ArrayInterface\n{\n    /**\n     * Ensures that this queue contains the specified element (optional\n     * operation).\n     *\n     * Returns `true` if this queue changed as a result of the call. (Returns\n     * `false` if this queue does not permit duplicates and already contains the\n     * specified element.)\n     *\n     * Queues that support this operation may place limitations on what elements\n     * may be added to this queue. In particular, some queues will refuse to add\n     * `null` elements, and others will impose restrictions on the type of\n     * elements that may be added. Queue classes should clearly specify in their\n     * documentation any restrictions on what elements may be added.\n     *\n     * If a queue refuses to add a particular element for any reason other than\n     * that it already contains the element, it must throw an exception (rather\n     * than returning `false`). This preserves the invariant that a queue always\n     * contains the specified element after this call returns.\n     *\n     * @see self::offer()\n     *\n     * @param T $element The element to add to this queue.\n     *\n     * @return bool `true` if this queue changed as a result of the call.\n     *\n     * @throws RuntimeException if a queue refuses to add a particular element\n     *     for any reason other than that it already contains the element.\n     *     Implementations should use a more-specific exception that extends\n     *     `\\RuntimeException`.\n     */\n    public function add(mixed $element): bool;\n\n    /**\n     * Retrieves, but does not remove, the head of this queue.\n     *\n     * This method differs from `peek()` only in that it throws an exception if\n     * this queue is empty.\n     *\n     * @see self::peek()\n     *\n     * @return T the head of this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function element(): mixed;\n\n    /**\n     * Inserts the specified element into this queue if it is possible to do so\n     * immediately without violating capacity restrictions.\n     *\n     * When using a capacity-restricted queue, this method is generally\n     * preferable to `add()`, which can fail to insert an element only by\n     * throwing an exception.\n     *\n     * @see self::add()\n     *\n     * @param T $element The element to add to this queue.\n     *\n     * @return bool `true` if the element was added to this queue, else `false`.\n     */\n    public function offer(mixed $element): bool;\n\n    /**\n     * Retrieves, but does not remove, the head of this queue, or returns `null`\n     * if this queue is empty.\n     *\n     * @see self::element()\n     *\n     * @return T | null the head of this queue, or `null` if this queue is empty.\n     */\n    public function peek(): mixed;\n\n    /**\n     * Retrieves and removes the head of this queue, or returns `null`\n     * if this queue is empty.\n     *\n     * @see self::remove()\n     *\n     * @return T | null the head of this queue, or `null` if this queue is empty.\n     */\n    public function poll(): mixed;\n\n    /**\n     * Retrieves and removes the head of this queue.\n     *\n     * This method differs from `poll()` only in that it throws an exception if\n     * this queue is empty.\n     *\n     * @see self::poll()\n     *\n     * @return T the head of this queue.\n     *\n     * @throws NoSuchElementException if this queue is empty.\n     */\n    public function remove(): mixed;\n\n    /**\n     * Returns the type associated with this queue.\n     */\n    public function getType(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Set.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\n/**\n * A set is a collection that contains no duplicate elements.\n *\n * Great care must be exercised if mutable objects are used as set elements.\n * The behavior of a set is not specified if the value of an object is changed\n * in a manner that affects equals comparisons while the object is an element in\n * the set.\n *\n * Example usage:\n *\n * ```\n * $foo = new \\My\\Foo();\n * $set = new Set(\\My\\Foo::class);\n *\n * $set->add($foo); // returns TRUE, the element doesn't exist\n * $set->add($foo); // returns FALSE, the element already exists\n *\n * $bar = new \\My\\Foo();\n * $set->add($bar); // returns TRUE, $bar !== $foo\n * ```\n *\n * @template T\n * @extends AbstractSet<T>\n */\nclass Set extends AbstractSet\n{\n    /**\n     * Constructs a set object of the specified type, optionally with the\n     * specified data.\n     *\n     * @param string $setType The type or class name associated with this set.\n     * @param array<array-key, T> $data The initial items to store in the set.\n     */\n    public function __construct(private readonly string $setType, array $data = [])\n    {\n        parent::__construct($data);\n    }\n\n    public function getType(): string\n    {\n        return $this->setType;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Sort.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection;\n\n/**\n * Collection sorting\n */\nenum Sort: string\n{\n    /**\n     * Sort items in a collection in ascending order.\n     */\n    case Ascending = 'asc';\n\n    /**\n     * Sort items in a collection in descending order.\n     */\n    case Descending = 'desc';\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Tool/TypeTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Tool;\n\nuse function is_array;\nuse function is_bool;\nuse function is_callable;\nuse function is_float;\nuse function is_int;\nuse function is_numeric;\nuse function is_object;\nuse function is_resource;\nuse function is_scalar;\nuse function is_string;\n\n/**\n * Provides functionality to check values for specific types.\n */\ntrait TypeTrait\n{\n    /**\n     * Returns `true` if value is of the specified type.\n     *\n     * @param string $type The type to check the value against.\n     * @param mixed $value The value to check.\n     */\n    protected function checkType(string $type, mixed $value): bool\n    {\n        return match ($type) {\n            'array' => is_array($value),\n            'bool', 'boolean' => is_bool($value),\n            'callable' => is_callable($value),\n            'float', 'double' => is_float($value),\n            'int', 'integer' => is_int($value),\n            'null' => $value === null,\n            'numeric' => is_numeric($value),\n            'object' => is_object($value),\n            'resource' => is_resource($value),\n            'scalar' => is_scalar($value),\n            'string' => is_string($value),\n            'mixed' => true,\n            default => $value instanceof $type,\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Tool;\n\nuse Ramsey\\Collection\\Exception\\InvalidPropertyOrMethod;\nuse Ramsey\\Collection\\Exception\\UnsupportedOperationException;\nuse ReflectionProperty;\n\nuse function is_array;\nuse function is_object;\nuse function method_exists;\nuse function property_exists;\nuse function sprintf;\n\n/**\n * Provides functionality to extract the value of a property or method from an object.\n */\ntrait ValueExtractorTrait\n{\n    /**\n     * Returns the type associated with this collection.\n     */\n    abstract public function getType(): string;\n\n    /**\n     * Extracts the value of the given property, method, or array key from the\n     * element.\n     *\n     * If `$propertyOrMethod` is `null`, we return the element as-is.\n     *\n     * @param mixed $element The element to extract the value from.\n     * @param string | null $propertyOrMethod The property or method for which the\n     *     value should be extracted.\n     *\n     * @return mixed the value extracted from the specified property, method,\n     *     or array key, or the element itself.\n     *\n     * @throws InvalidPropertyOrMethod\n     * @throws UnsupportedOperationException\n     */\n    protected function extractValue(mixed $element, ?string $propertyOrMethod): mixed\n    {\n        if ($propertyOrMethod === null) {\n            return $element;\n        }\n\n        if (!is_object($element) && !is_array($element)) {\n            throw new UnsupportedOperationException(sprintf(\n                'The collection type \"%s\" does not support the $propertyOrMethod parameter',\n                $this->getType(),\n            ));\n        }\n\n        if (is_array($element)) {\n            return $element[$propertyOrMethod] ?? throw new InvalidPropertyOrMethod(sprintf(\n                'Key or index \"%s\" not found in collection elements',\n                $propertyOrMethod,\n            ));\n        }\n\n        if (property_exists($element, $propertyOrMethod) && method_exists($element, $propertyOrMethod)) {\n            $reflectionProperty = new ReflectionProperty($element, $propertyOrMethod);\n            if ($reflectionProperty->isPublic()) {\n                return $element->$propertyOrMethod;\n            }\n\n            return $element->{$propertyOrMethod}();\n        }\n\n        if (property_exists($element, $propertyOrMethod)) {\n            return $element->$propertyOrMethod;\n        }\n\n        if (method_exists($element, $propertyOrMethod)) {\n            return $element->{$propertyOrMethod}();\n        }\n\n        if (isset($element->$propertyOrMethod)) {\n            return $element->$propertyOrMethod;\n        }\n\n        throw new InvalidPropertyOrMethod(sprintf(\n            'Method or property \"%s\" not defined in %s',\n            $propertyOrMethod,\n            $element::class,\n        ));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/collection library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Collection\\Tool;\n\nuse DateTimeInterface;\n\nuse function assert;\nuse function get_resource_type;\nuse function is_array;\nuse function is_bool;\nuse function is_callable;\nuse function is_object;\nuse function is_resource;\nuse function is_scalar;\n\n/**\n * Provides functionality to express a value as string\n */\ntrait ValueToStringTrait\n{\n    /**\n     * Returns a string representation of the value.\n     *\n     * - null value: `'NULL'`\n     * - boolean: `'TRUE'`, `'FALSE'`\n     * - array: `'Array'`\n     * - scalar: converted-value\n     * - resource: `'(type resource #number)'`\n     * - object with `__toString()`: result of `__toString()`\n     * - object DateTime: ISO 8601 date\n     * - object: `'(className Object)'`\n     * - anonymous function: same as object\n     *\n     * @param mixed $value the value to return as a string.\n     */\n    protected function toolValueToString(mixed $value): string\n    {\n        // null\n        if ($value === null) {\n            return 'NULL';\n        }\n\n        // boolean constants\n        if (is_bool($value)) {\n            return $value ? 'TRUE' : 'FALSE';\n        }\n\n        // array\n        if (is_array($value)) {\n            return 'Array';\n        }\n\n        // scalar types (integer, float, string)\n        if (is_scalar($value)) {\n            return (string) $value;\n        }\n\n        // resource\n        if (is_resource($value)) {\n            return '(' . get_resource_type($value) . ' resource #' . (int) $value . ')';\n        }\n\n        // From here, $value should be an object.\n        assert(is_object($value));\n\n        // __toString() is implemented\n        if (is_callable([$value, '__toString'])) {\n            /** @var string */\n            return $value->__toString();\n        }\n\n        // object of type \\DateTime\n        if ($value instanceof DateTimeInterface) {\n            return $value->format('c');\n        }\n\n        // unknown type\n        return '(' . $value::class . ' Object)';\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/LICENSE",
    "content": "Copyright (c) 2012-2025 Ben Ramsey <ben@benramsey.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/README.md",
    "content": "<h1 align=\"center\">ramsey/uuid</h1>\n\n<p align=\"center\">\n    <strong>A PHP library for generating and working with UUIDs.</strong>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/ramsey/uuid\"><img src=\"http://img.shields.io/badge/source-ramsey/uuid-blue.svg?style=flat-square\" alt=\"Source Code\"></a>\n    <a href=\"https://packagist.org/packages/ramsey/uuid\"><img src=\"https://img.shields.io/packagist/v/ramsey/uuid.svg?style=flat-square&label=release\" alt=\"Download Package\"></a>\n    <a href=\"https://php.net\"><img src=\"https://img.shields.io/packagist/php-v/ramsey/uuid.svg?style=flat-square&colorB=%238892BF\" alt=\"PHP Programming Language\"></a>\n    <a href=\"https://github.com/ramsey/uuid/blob/4.x/LICENSE\"><img src=\"https://img.shields.io/packagist/l/ramsey/uuid.svg?style=flat-square&colorB=darkcyan\" alt=\"Read License\"></a>\n    <a href=\"https://github.com/ramsey/uuid/actions/workflows/continuous-integration.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/ramsey/uuid/continuous-integration.yml?branch=4.x&logo=github&style=flat-square\" alt=\"Build Status\"></a>\n    <a href=\"https://app.codecov.io/gh/ramsey/uuid/branch/4.x\"><img src=\"https://img.shields.io/codecov/c/github/ramsey/uuid/4.x?label=codecov&logo=codecov&style=flat-square\" alt=\"Codecov Code Coverage\"></a>\n</p>\n\nramsey/uuid is a PHP library for generating and working with universally unique\nidentifiers (UUIDs).\n\nThis project adheres to a [code of conduct](CODE_OF_CONDUCT.md).\nBy participating in this project and its community, you are expected to\nuphold this code.\n\nMuch inspiration for this library came from the [Java][javauuid] and\n[Python][pyuuid] UUID libraries.\n\n## Installation\n\nThe preferred method of installation is via [Composer][]. Run the following\ncommand to install the package and add it as a requirement to your project's\n`composer.json`:\n\n```bash\ncomposer require ramsey/uuid\n```\n\n## Upgrading to Version 4\n\nSee the documentation for a thorough upgrade guide:\n\n* [Upgrading ramsey/uuid Version 3 to 4](https://uuid.ramsey.dev/en/stable/upgrading/3-to-4.html)\n\n## Documentation\n\nPlease see <https://uuid.ramsey.dev> for documentation, tips, examples, and\nfrequently asked questions.\n\n## Contributing\n\nContributions are welcome! To contribute, please familiarize yourself with\n[CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Coordinated Disclosure\n\nKeeping user information safe and secure is a top priority, and we welcome the\ncontribution of external security researchers. If you believe you've found a\nsecurity issue in software that is maintained in this repository, please read\n[SECURITY.md][] for instructions on submitting a vulnerability report.\n\n## ramsey/uuid for Enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of ramsey/uuid and thousands of other packages are working with\nTidelift to deliver commercial support and maintenance for the open source\npackages you use to build your applications. Save time, reduce risk, and improve\ncode health, while paying the maintainers of the exact packages you use.\n[Learn more.](https://tidelift.com/subscription/pkg/packagist-ramsey-uuid?utm_source=undefined&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## Copyright and License\n\nThe ramsey/uuid library is copyright © [Ben Ramsey](https://benramsey.com/) and\nlicensed for use under the MIT License (MIT). Please see [LICENSE][] for more\ninformation.\n\n[rfc4122]: http://tools.ietf.org/html/rfc4122\n[conduct]: https://github.com/ramsey/uuid/blob/4.x/CODE_OF_CONDUCT.md\n[javauuid]: http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html\n[pyuuid]: http://docs.python.org/3/library/uuid.html\n[composer]: http://getcomposer.org/\n[contributing.md]: https://github.com/ramsey/uuid/blob/4.x/CONTRIBUTING.md\n[security.md]: https://github.com/ramsey/uuid/blob/4.x/SECURITY.md\n[license]: https://github.com/ramsey/uuid/blob/4.x/LICENSE\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/composer.json",
    "content": "{\n    \"name\": \"ramsey/uuid\",\n    \"description\": \"A PHP library for generating and working with universally unique identifiers (UUIDs).\",\n    \"license\": \"MIT\",\n    \"type\": \"library\",\n    \"keywords\": [\n        \"uuid\",\n        \"identifier\",\n        \"guid\"\n    ],\n    \"require\": {\n        \"php\": \"^8.0\",\n        \"brick/math\": \"^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14\",\n        \"ramsey/collection\": \"^1.2 || ^2.0\"\n    },\n    \"require-dev\": {\n        \"captainhook/captainhook\": \"^5.25\",\n        \"captainhook/plugin-composer\": \"^5.3\",\n        \"dealerdirect/phpcodesniffer-composer-installer\": \"^1.0\",\n        \"ergebnis/composer-normalize\": \"^2.47\",\n        \"mockery/mockery\": \"^1.6\",\n        \"paragonie/random-lib\": \"^2\",\n        \"php-mock/php-mock\": \"^2.6\",\n        \"php-mock/php-mock-mockery\": \"^1.5\",\n        \"php-parallel-lint/php-parallel-lint\": \"^1.4.0\",\n        \"phpbench/phpbench\": \"^1.2.14\",\n        \"phpstan/extension-installer\": \"^1.4\",\n        \"phpstan/phpstan\": \"^2.1\",\n        \"phpstan/phpstan-mockery\": \"^2.0\",\n        \"phpstan/phpstan-phpunit\": \"^2.0\",\n        \"phpunit/phpunit\": \"^9.6\",\n        \"slevomat/coding-standard\": \"^8.18\",\n        \"squizlabs/php_codesniffer\": \"^3.13\"\n    },\n    \"replace\": {\n        \"rhumsaa/uuid\": \"self.version\"\n    },\n    \"suggest\": {\n        \"ext-bcmath\": \"Enables faster math with arbitrary-precision integers using BCMath.\",\n        \"ext-gmp\": \"Enables faster math with arbitrary-precision integers using GMP.\",\n        \"ext-uuid\": \"Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.\",\n        \"paragonie/random-lib\": \"Provides RandomLib for use with the RandomLibAdapter\",\n        \"ramsey/uuid-doctrine\": \"Allows the use of Ramsey\\\\Uuid\\\\Uuid as Doctrine field type.\"\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true,\n    \"autoload\": {\n        \"psr-4\": {\n            \"Ramsey\\\\Uuid\\\\\": \"src/\"\n        },\n        \"files\": [\n            \"src/functions.php\"\n        ]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Ramsey\\\\Uuid\\\\Benchmark\\\\\": \"tests/benchmark/\",\n            \"Ramsey\\\\Uuid\\\\StaticAnalysis\\\\\": \"tests/static-analysis/\",\n            \"Ramsey\\\\Uuid\\\\Test\\\\\": \"tests/\"\n        }\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"captainhook/plugin-composer\": true,\n            \"dealerdirect/phpcodesniffer-composer-installer\": true,\n            \"ergebnis/composer-normalize\": true,\n            \"phpstan/extension-installer\": true\n        },\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"captainhook\": {\n            \"force-install\": true\n        }\n    },\n    \"scripts\": {\n        \"dev:analyze\": \"@dev:analyze:phpstan\",\n        \"dev:analyze:phpstan\": \"phpstan analyse --ansi --memory-limit 1G\",\n        \"dev:bench\": \"@php -d 'error_reporting=24575' vendor/bin/phpbench run\",\n        \"dev:build:clean\": \"git clean -fX build/\",\n        \"dev:lint\": [\n            \"@dev:lint:syntax\",\n            \"@dev:lint:style\"\n        ],\n        \"dev:lint:fix\": \"phpcbf --cache=build/cache/phpcs.cache\",\n        \"dev:lint:style\": \"phpcs --cache=build/cache/phpcs.cache --colors\",\n        \"dev:lint:syntax\": \"parallel-lint --colors src/ tests/\",\n        \"dev:test\": [\n            \"@dev:lint\",\n            \"@dev:bench\",\n            \"@dev:analyze\",\n            \"@dev:test:unit\"\n        ],\n        \"dev:test:coverage:ci\": \"@php -d 'xdebug.mode=coverage' vendor/bin/phpunit --colors=always --coverage-text --coverage-clover build/coverage/clover.xml --coverage-cobertura build/coverage/cobertura.xml --coverage-crap4j build/coverage/crap4j.xml --coverage-xml build/coverage/coverage-xml --log-junit build/junit.xml\",\n        \"dev:test:coverage:html\": \"@php -d 'xdebug.mode=coverage' vendor/bin/phpunit --colors=always --coverage-html build/coverage/coverage-html/\",\n        \"dev:test:unit\": \"phpunit --colors=always\",\n        \"test\": \"@dev:test\"\n    },\n    \"scripts-descriptions\": {\n        \"dev:analyze\": \"Runs all static analysis checks.\",\n        \"dev:analyze:phpstan\": \"Runs the PHPStan static analyzer.\",\n        \"dev:bench\": \"Runs PHPBench benchmark tests.\",\n        \"dev:build:clean\": \"Cleans the build/ directory.\",\n        \"dev:lint\": \"Runs all linting checks.\",\n        \"dev:lint:fix\": \"Auto-fixes coding standards issues, if possible.\",\n        \"dev:lint:style\": \"Checks for coding standards issues.\",\n        \"dev:lint:syntax\": \"Checks for syntax errors.\",\n        \"dev:test\": \"Runs linting, static analysis, and unit tests.\",\n        \"dev:test:coverage:ci\": \"Runs unit tests and generates CI coverage reports.\",\n        \"dev:test:coverage:html\": \"Runs unit tests and generates HTML coverage report.\",\n        \"dev:test:unit\": \"Runs unit tests.\",\n        \"test\": \"Runs linting, static analysis, and unit tests.\"\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/BinaryUtils.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\n/**\n * Provides binary math utilities\n */\nclass BinaryUtils\n{\n    /**\n     * Applies the variant field to the 16-bit clock sequence\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     *\n     * @param int $clockSeq The 16-bit clock sequence value before the variant is applied\n     *\n     * @return int The 16-bit clock sequence multiplexed with the UUID variant\n     *\n     * @pure\n     */\n    public static function applyVariant(int $clockSeq): int\n    {\n        return ($clockSeq & 0x3fff) | 0x8000;\n    }\n\n    /**\n     * Applies the version field to the 16-bit `time_hi_and_version` field\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     *\n     * @param int $timeHi The value of the 16-bit `time_hi_and_version` field before the version is applied\n     * @param int $version The version to apply to the `time_hi` field\n     *\n     * @return int The 16-bit time_hi field of the timestamp multiplexed with the UUID version number\n     *\n     * @pure\n     */\n    public static function applyVersion(int $timeHi, int $version): int\n    {\n        return ($timeHi & 0x0fff) | ($version << 12);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Builder/BuilderCollection.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Builder;\n\nuse Ramsey\\Collection\\AbstractCollection;\nuse Ramsey\\Uuid\\Converter\\Number\\GenericNumberConverter;\nuse Ramsey\\Uuid\\Converter\\Time\\GenericTimeConverter;\nuse Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter;\nuse Ramsey\\Uuid\\Guid\\GuidBuilder;\nuse Ramsey\\Uuid\\Math\\BrickMathCalculator;\nuse Ramsey\\Uuid\\Nonstandard\\UuidBuilder as NonstandardUuidBuilder;\nuse Ramsey\\Uuid\\Rfc4122\\UuidBuilder as Rfc4122UuidBuilder;\nuse Traversable;\n\n/**\n * A collection of UuidBuilderInterface objects\n *\n * @deprecated this class has been deprecated and will be removed in 5.0.0. The use-case for this class comes from a\n *     pre-`phpstan/phpstan` and pre-`vimeo/psalm` ecosystem, in which type safety had to be mostly enforced at runtime:\n *     that is no longer necessary, now that you can safely verify your code to be correct, and use more generic types\n *     like `iterable<T>` instead.\n *\n * @extends AbstractCollection<UuidBuilderInterface>\n */\nclass BuilderCollection extends AbstractCollection\n{\n    public function getType(): string\n    {\n        return UuidBuilderInterface::class;\n    }\n\n    public function getIterator(): Traversable\n    {\n        return parent::getIterator();\n    }\n\n    /**\n     * Re-constructs the object from its serialized form\n     *\n     * @param string $serialized The serialized PHP string to unserialize into a UuidInterface instance\n     */\n    public function unserialize($serialized): void\n    {\n        /** @var array<array-key, UuidBuilderInterface> $data */\n        $data = unserialize($serialized, [\n            'allowed_classes' => [\n                BrickMathCalculator::class,\n                GenericNumberConverter::class,\n                GenericTimeConverter::class,\n                GuidBuilder::class,\n                NonstandardUuidBuilder::class,\n                PhpTimeConverter::class,\n                Rfc4122UuidBuilder::class,\n            ],\n        ]);\n\n        $this->data = array_filter(\n            $data,\n            function ($unserialized): bool {\n                /** @phpstan-ignore instanceof.alwaysTrue */\n                return $unserialized instanceof UuidBuilderInterface;\n            },\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Builder;\n\nuse Ramsey\\Uuid\\Rfc4122\\UuidBuilder as Rfc4122UuidBuilder;\n\n/**\n * @deprecated Please transition to {@see Rfc4122UuidBuilder}.\n *\n * @immutable\n */\nclass DefaultUuidBuilder extends Rfc4122UuidBuilder\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Builder;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\DegradedUuid;\nuse Ramsey\\Uuid\\Rfc4122\\Fields as Rfc4122Fields;\nuse Ramsey\\Uuid\\UuidInterface;\n\n/**\n * @deprecated DegradedUuid instances are no longer necessary to support 32-bit systems. Please transition to {@see DefaultUuidBuilder}.\n *\n * @immutable\n */\nclass DegradedUuidBuilder implements UuidBuilderInterface\n{\n    private TimeConverterInterface $timeConverter;\n\n    /**\n     * @param NumberConverterInterface $numberConverter The number converter to use when constructing the DegradedUuid\n     * @param TimeConverterInterface|null $timeConverter The time converter to use for converting timestamps extracted\n     *     from a UUID to Unix timestamps\n     */\n    public function __construct(\n        private NumberConverterInterface $numberConverter,\n        ?TimeConverterInterface $timeConverter = null\n    ) {\n        $this->timeConverter = $timeConverter ?: new DegradedTimeConverter();\n    }\n\n    /**\n     * Builds and returns a DegradedUuid\n     *\n     * @param CodecInterface $codec The codec to use for building this DegradedUuid instance\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return DegradedUuid The DegradedUuidBuild returns an instance of Ramsey\\Uuid\\DegradedUuid\n     *\n     * @phpstan-impure\n     */\n    public function build(CodecInterface $codec, string $bytes): UuidInterface\n    {\n        return new DegradedUuid(new Rfc4122Fields($bytes), $this->numberConverter, $codec, $this->timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Builder;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Exception\\BuilderNotFoundException;\nuse Ramsey\\Uuid\\Exception\\UnableToBuildUuidException;\nuse Ramsey\\Uuid\\UuidInterface;\n\n/**\n * FallbackBuilder builds a UUID by stepping through a list of UUID builders until a UUID can be constructed without exceptions\n *\n * @immutable\n */\nclass FallbackBuilder implements UuidBuilderInterface\n{\n    /**\n     * @param iterable<UuidBuilderInterface> $builders An array of UUID builders\n     */\n    public function __construct(private iterable $builders)\n    {\n    }\n\n    /**\n     * Builds and returns a UuidInterface instance using the first builder that succeeds\n     *\n     * @param CodecInterface $codec The codec to use for building this instance\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return UuidInterface an instance of a UUID object\n     *\n     * @pure\n     */\n    public function build(CodecInterface $codec, string $bytes): UuidInterface\n    {\n        $lastBuilderException = null;\n\n        foreach ($this->builders as $builder) {\n            try {\n                return $builder->build($codec, $bytes);\n            } catch (UnableToBuildUuidException $exception) {\n                $lastBuilderException = $exception;\n\n                continue;\n            }\n        }\n\n        throw new BuilderNotFoundException(\n            'Could not find a suitable builder for the provided codec and fields',\n            0,\n            $lastBuilderException,\n        );\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Builder;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\UuidInterface;\n\n/**\n * A UUID builder builds instances of UuidInterface\n *\n * @immutable\n */\ninterface UuidBuilderInterface\n{\n    /**\n     * Builds and returns a UuidInterface\n     *\n     * @param CodecInterface $codec The codec to use for building this UuidInterface instance\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return UuidInterface Implementations may choose to return more specific instances of UUIDs that implement UuidInterface\n     *\n     * @pure\n     */\n    public function build(CodecInterface $codec, string $bytes): UuidInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Codec/CodecInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Codec;\n\nuse Ramsey\\Uuid\\UuidInterface;\n\n/**\n * A codec encodes and decodes a UUID according to defined rules\n *\n * @immutable\n */\ninterface CodecInterface\n{\n    /**\n     * Returns a hexadecimal string representation of a UuidInterface\n     *\n     * @param UuidInterface $uuid The UUID for which to create a hexadecimal string representation\n     *\n     * @return non-empty-string Hexadecimal string representation of a UUID\n     *\n     * @pure\n     */\n    public function encode(UuidInterface $uuid): string;\n\n    /**\n     * Returns a binary string representation of a UuidInterface\n     *\n     * @param UuidInterface $uuid The UUID for which to create a binary string representation\n     *\n     * @return non-empty-string Binary string representation of a UUID\n     *\n     * @pure\n     */\n    public function encodeBinary(UuidInterface $uuid): string;\n\n    /**\n     * Returns a UuidInterface derived from a hexadecimal string representation\n     *\n     * @param string $encodedUuid The hexadecimal string representation to convert into a UuidInterface instance\n     *\n     * @return UuidInterface An instance of a UUID decoded from a hexadecimal string representation\n     *\n     * @pure\n     */\n    public function decode(string $encodedUuid): UuidInterface;\n\n    /**\n     * Returns a UuidInterface derived from a binary string representation\n     *\n     * @param string $bytes The binary string representation to convert into a UuidInterface instance\n     *\n     * @return UuidInterface An instance of a UUID decoded from a binary string representation\n     *\n     * @pure\n     */\n    public function decodeBytes(string $bytes): UuidInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Codec;\n\nuse Ramsey\\Uuid\\Guid\\Guid;\nuse Ramsey\\Uuid\\UuidInterface;\n\nuse function bin2hex;\nuse function sprintf;\nuse function substr;\n\n/**\n * GuidStringCodec encodes and decodes globally unique identifiers (GUID)\n *\n * @see Guid\n *\n * @immutable\n */\nclass GuidStringCodec extends StringCodec\n{\n    public function encode(UuidInterface $uuid): string\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $hex = bin2hex($uuid->getFields()->getBytes());\n\n        /** @var non-empty-string */\n        return sprintf(\n            '%02s%02s%02s%02s-%02s%02s-%02s%02s-%04s-%012s',\n            substr($hex, 6, 2),\n            substr($hex, 4, 2),\n            substr($hex, 2, 2),\n            substr($hex, 0, 2),\n            substr($hex, 10, 2),\n            substr($hex, 8, 2),\n            substr($hex, 14, 2),\n            substr($hex, 12, 2),\n            substr($hex, 16, 4),\n            substr($hex, 20),\n        );\n    }\n\n    public function decode(string $encodedUuid): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $bytes = $this->getBytes($encodedUuid);\n\n        /** @phpstan-ignore possiblyImpure.methodCall, possiblyImpure.methodCall */\n        return $this->getBuilder()->build($this, $this->swapBytes($bytes));\n    }\n\n    public function decodeBytes(string $bytes): UuidInterface\n    {\n        // Call parent::decode() to preserve the correct byte order.\n        return parent::decode(bin2hex($bytes));\n    }\n\n    /**\n     * Swaps bytes according to the GUID rules\n     */\n    private function swapBytes(string $bytes): string\n    {\n        return $bytes[3] . $bytes[2] . $bytes[1] . $bytes[0]\n            . $bytes[5] . $bytes[4] . $bytes[7] . $bytes[6]\n            . substr($bytes, 8);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Codec;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Exception\\UnsupportedOperationException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Ramsey\\Uuid\\UuidInterface;\n\nuse function strlen;\nuse function substr;\n\n/**\n * OrderedTimeCodec encodes and decodes a UUID, optimizing the byte order for more efficient storage\n *\n * For binary representations of version 1 UUID, this codec may be used to reorganize the time fields, making the UUID\n * closer to sequential when storing the bytes. According to Percona, this optimization can improve database INSERT and\n * SELECT statements using the UUID column as a key.\n *\n * The string representation of the UUID will remain unchanged. Only the binary representation is reordered.\n *\n * PLEASE NOTE: Binary representations of UUIDs encoded with this codec must be decoded with this codec. Decoding using\n * another codec can result in malformed UUIDs.\n *\n * @deprecated Please migrate to {@link https://uuid.ramsey.dev/en/stable/rfc4122/version6.html Version 6, reordered time-based UUIDs}.\n *\n * @link https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ Storing UUID Values in MySQL\n *\n * @immutable\n */\nclass OrderedTimeCodec extends StringCodec\n{\n    /**\n     * Returns a binary string representation of a UUID, with the timestamp fields rearranged for optimized storage\n     *\n     * @return non-empty-string\n     */\n    public function encodeBinary(UuidInterface $uuid): string\n    {\n        if (\n            /** @phpstan-ignore possiblyImpure.methodCall */\n            !($uuid->getFields() instanceof Rfc4122FieldsInterface)\n            /** @phpstan-ignore possiblyImpure.methodCall */\n            || $uuid->getFields()->getVersion() !== Uuid::UUID_TYPE_TIME\n        ) {\n            throw new InvalidArgumentException('Expected version 1 (time-based) UUID');\n        }\n\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $bytes = $uuid->getFields()->getBytes();\n\n        return $bytes[6] . $bytes[7] . $bytes[4] . $bytes[5]\n            . $bytes[0] . $bytes[1] . $bytes[2] . $bytes[3]\n            . substr($bytes, 8);\n    }\n\n    /**\n     * Returns a UuidInterface derived from an ordered-time binary string representation\n     *\n     * @throws InvalidArgumentException if $bytes is an invalid length\n     *\n     * @inheritDoc\n     */\n    public function decodeBytes(string $bytes): UuidInterface\n    {\n        if (strlen($bytes) !== 16) {\n            throw new InvalidArgumentException('$bytes string should contain 16 characters.');\n        }\n\n        // Rearrange the bytes to their original order.\n        $rearrangedBytes = $bytes[4] . $bytes[5] . $bytes[6] . $bytes[7]\n            . $bytes[2] . $bytes[3] . $bytes[0] . $bytes[1]\n            . substr($bytes, 8);\n\n        $uuid = parent::decodeBytes($rearrangedBytes);\n\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $fields = $uuid->getFields();\n\n        if (!$fields instanceof Rfc4122FieldsInterface || $fields->getVersion() !== Uuid::UUID_TYPE_TIME) {\n            throw new UnsupportedOperationException(\n                'Attempting to decode a non-time-based UUID using OrderedTimeCodec',\n            );\n        }\n\n        return $uuid;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Codec/StringCodec.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Codec;\n\nuse Ramsey\\Uuid\\Builder\\UuidBuilderInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Exception\\InvalidUuidStringException;\nuse Ramsey\\Uuid\\Uuid;\nuse Ramsey\\Uuid\\UuidInterface;\n\nuse function bin2hex;\nuse function hex2bin;\nuse function implode;\nuse function sprintf;\nuse function str_replace;\nuse function strlen;\nuse function substr;\n\n/**\n * StringCodec encodes and decodes RFC 9562 (formerly RFC 4122) UUIDs\n *\n * @immutable\n */\nclass StringCodec implements CodecInterface\n{\n    /**\n     * Constructs a StringCodec\n     *\n     * @param UuidBuilderInterface $builder The builder to use when encoding UUIDs\n     */\n    public function __construct(private UuidBuilderInterface $builder)\n    {\n    }\n\n    public function encode(UuidInterface $uuid): string\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $hex = bin2hex($uuid->getFields()->getBytes());\n\n        /** @var non-empty-string */\n        return sprintf(\n            '%08s-%04s-%04s-%04s-%012s',\n            substr($hex, 0, 8),\n            substr($hex, 8, 4),\n            substr($hex, 12, 4),\n            substr($hex, 16, 4),\n            substr($hex, 20),\n        );\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function encodeBinary(UuidInterface $uuid): string\n    {\n        /** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */\n        return $uuid->getFields()->getBytes();\n    }\n\n    /**\n     * @throws InvalidUuidStringException\n     *\n     * @inheritDoc\n     */\n    public function decode(string $encodedUuid): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return $this->builder->build($this, $this->getBytes($encodedUuid));\n    }\n\n    public function decodeBytes(string $bytes): UuidInterface\n    {\n        if (strlen($bytes) !== 16) {\n            throw new InvalidArgumentException('$bytes string should contain 16 characters.');\n        }\n\n        return $this->builder->build($this, $bytes);\n    }\n\n    /**\n     * Returns the UUID builder\n     */\n    protected function getBuilder(): UuidBuilderInterface\n    {\n        return $this->builder;\n    }\n\n    /**\n     * Returns a byte string of the UUID\n     */\n    protected function getBytes(string $encodedUuid): string\n    {\n        $parsedUuid = str_replace(['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}', '-'], '', $encodedUuid);\n\n        $components = [\n            substr($parsedUuid, 0, 8),\n            substr($parsedUuid, 8, 4),\n            substr($parsedUuid, 12, 4),\n            substr($parsedUuid, 16, 4),\n            substr($parsedUuid, 20),\n        ];\n\n        if (!Uuid::isValid(implode('-', $components))) {\n            throw new InvalidUuidStringException('Invalid UUID string: ' . $encodedUuid);\n        }\n\n        return (string) hex2bin($parsedUuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Codec;\n\nuse Ramsey\\Uuid\\Exception\\InvalidUuidStringException;\nuse Ramsey\\Uuid\\UuidInterface;\n\nuse function bin2hex;\nuse function sprintf;\nuse function substr;\nuse function substr_replace;\n\n/**\n * TimestampFirstCombCodec encodes and decodes COMBs, with the timestamp as the first 48 bits\n *\n * In contrast with the TimestampLastCombCodec, the TimestampFirstCombCodec adds the timestamp to the first 48 bits of\n * the COMB. To generate a timestamp-first COMB, set the TimestampFirstCombCodec as the codec, along with the\n * CombGenerator as the random generator.\n *\n * ```\n * $factory = new UuidFactory();\n *\n * $factory->setCodec(new TimestampFirstCombCodec($factory->getUuidBuilder()));\n *\n * $factory->setRandomGenerator(new CombGenerator(\n *     $factory->getRandomGenerator(),\n *     $factory->getNumberConverter(),\n * ));\n *\n * $timestampFirstComb = $factory->uuid4();\n * ```\n *\n * @deprecated Please migrate to {@link https://uuid.ramsey.dev/en/stable/rfc4122/version7.html Version 7, Unix Epoch Time UUIDs}.\n *\n * @link https://web.archive.org/web/20240118030355/https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys\n *\n * @immutable\n */\nclass TimestampFirstCombCodec extends StringCodec\n{\n    /**\n     * @return non-empty-string\n     */\n    public function encode(UuidInterface $uuid): string\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $bytes = $this->swapBytes($uuid->getFields()->getBytes());\n\n        return sprintf(\n            '%08s-%04s-%04s-%04s-%012s',\n            bin2hex(substr($bytes, 0, 4)),\n            bin2hex(substr($bytes, 4, 2)),\n            bin2hex(substr($bytes, 6, 2)),\n            bin2hex(substr($bytes, 8, 2)),\n            bin2hex(substr($bytes, 10))\n        );\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function encodeBinary(UuidInterface $uuid): string\n    {\n        /** @phpstan-ignore-next-line PHPStan complains that this is not a non-empty-string. */\n        return $this->swapBytes($uuid->getFields()->getBytes());\n    }\n\n    /**\n     * @throws InvalidUuidStringException\n     *\n     * @inheritDoc\n     */\n    public function decode(string $encodedUuid): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $bytes = $this->getBytes($encodedUuid);\n\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return $this->getBuilder()->build($this, $this->swapBytes($bytes));\n    }\n\n    public function decodeBytes(string $bytes): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return $this->getBuilder()->build($this, $this->swapBytes($bytes));\n    }\n\n    /**\n     * Swaps bytes according to the timestamp-first COMB rules\n     *\n     * @pure\n     */\n    private function swapBytes(string $bytes): string\n    {\n        $first48Bits = substr($bytes, 0, 6);\n        $last48Bits = substr($bytes, -6);\n\n        return substr_replace(substr_replace($bytes, $last48Bits, 0, 6), $first48Bits, -6);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Codec;\n\n/**\n * TimestampLastCombCodec encodes and decodes COMBs, with the timestamp as the last 48 bits\n *\n * The CombGenerator when used with the StringCodec (and, by proxy, the TimestampLastCombCodec) adds the timestamp to\n * the last 48 bits of the COMB. The TimestampLastCombCodec is provided for the sake of consistency. In practice, it is\n * identical to the standard StringCodec, but it may be used with the CombGenerator for additional context when reading\n * code.\n *\n * Consider the following code. By default, the codec used by UuidFactory is the StringCodec, but here, we explicitly\n * set the TimestampLastCombCodec. It is redundant, but it is clear that we intend this COMB to be generated with the\n * timestamp appearing at the end.\n *\n * ```\n * $factory = new UuidFactory();\n *\n * $factory->setCodec(new TimestampLastCombCodec($factory->getUuidBuilder()));\n *\n * $factory->setRandomGenerator(new CombGenerator(\n *     $factory->getRandomGenerator(),\n *     $factory->getNumberConverter(),\n * ));\n *\n * $timestampLastComb = $factory->uuid4();\n * ```\n *\n * @deprecated Please use {@see StringCodec} instead.\n *\n * @immutable\n */\nclass TimestampLastCombCodec extends StringCodec\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Number;\n\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Math\\BrickMathCalculator;\n\n/**\n * Previously used to integrate moontoast/math as a bignum arithmetic library, BigNumberConverter is deprecated in favor\n * of GenericNumberConverter\n *\n * @deprecated Please transition to {@see GenericNumberConverter}.\n *\n * @immutable\n */\nclass BigNumberConverter implements NumberConverterInterface\n{\n    private NumberConverterInterface $converter;\n\n    public function __construct()\n    {\n        $this->converter = new GenericNumberConverter(new BrickMathCalculator());\n    }\n\n    /**\n     * @pure\n     */\n    public function fromHex(string $hex): string\n    {\n        return $this->converter->fromHex($hex);\n    }\n\n    /**\n     * @pure\n     */\n    public function toHex(string $number): string\n    {\n        return $this->converter->toHex($number);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Number;\n\n/**\n * @deprecated DegradedNumberConverter is no longer necessary for converting numbers on 32-bit systems. Please\n *     transition to {@see GenericNumberConverter}.\n *\n * @immutable\n */\nclass DegradedNumberConverter extends BigNumberConverter\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Number;\n\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Math\\CalculatorInterface;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\n\n/**\n * GenericNumberConverter uses the provided calculator to convert decimal numbers to and from hexadecimal values\n *\n * @immutable\n */\nclass GenericNumberConverter implements NumberConverterInterface\n{\n    public function __construct(private CalculatorInterface $calculator)\n    {\n    }\n\n    /**\n     * @pure\n     */\n    public function fromHex(string $hex): string\n    {\n        return $this->calculator->fromBase($hex, 16)->toString();\n    }\n\n    /**\n     * @pure\n     */\n    public function toHex(string $number): string\n    {\n        /** @phpstan-ignore return.type, possiblyImpure.new */\n        return $this->calculator->toBase(new IntegerObject($number), 16);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter;\n\n/**\n * A number converter converts UUIDs from hexadecimal characters into representations of integers and vice versa\n *\n * @immutable\n */\ninterface NumberConverterInterface\n{\n    /**\n     * Converts a hexadecimal number into a string integer representation of the number\n     *\n     * The integer representation returned is a string representation of the integer to accommodate unsigned integers\n     * that are greater than `PHP_INT_MAX`.\n     *\n     * @param string $hex The hexadecimal string representation to convert\n     *\n     * @return numeric-string String representation of an integer\n     *\n     * @pure\n     */\n    public function fromHex(string $hex): string;\n\n    /**\n     * Converts a string integer representation into a hexadecimal string representation of the number\n     *\n     * @param string $number A string integer representation to convert; this must be a numeric string to accommodate\n     *     unsigned integers that are greater than `PHP_INT_MAX`.\n     *\n     * @return non-empty-string Hexadecimal string\n     *\n     * @pure\n     */\n    public function toHex(string $number): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Time;\n\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Math\\BrickMathCalculator;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Time;\n\n/**\n * Previously used to integrate moontoast/math as a bignum arithmetic library, BigNumberTimeConverter is deprecated in\n * favor of GenericTimeConverter\n *\n * @deprecated Please transition to {@see GenericTimeConverter}.\n *\n * @immutable\n */\nclass BigNumberTimeConverter implements TimeConverterInterface\n{\n    private TimeConverterInterface $converter;\n\n    public function __construct()\n    {\n        $this->converter = new GenericTimeConverter(new BrickMathCalculator());\n    }\n\n    public function calculateTime(string $seconds, string $microseconds): Hexadecimal\n    {\n        return $this->converter->calculateTime($seconds, $microseconds);\n    }\n\n    public function convertTime(Hexadecimal $uuidTimestamp): Time\n    {\n        return $this->converter->convertTime($uuidTimestamp);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Time;\n\n/**\n * @deprecated DegradedTimeConverter is no longer necessary for converting time on 32-bit systems. Please transition to\n *     {@see GenericTimeConverter}.\n *\n * @immutable\n */\nclass DegradedTimeConverter extends BigNumberTimeConverter\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Time;\n\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Math\\CalculatorInterface;\nuse Ramsey\\Uuid\\Math\\RoundingMode;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\Time;\n\nuse function explode;\nuse function str_pad;\n\nuse const STR_PAD_LEFT;\n\n/**\n * GenericTimeConverter uses the provided calculator to calculate and convert time values\n *\n * @immutable\n */\nclass GenericTimeConverter implements TimeConverterInterface\n{\n    /**\n     * The number of 100-nanosecond intervals from the Gregorian calendar epoch to the Unix epoch.\n     */\n    private const GREGORIAN_TO_UNIX_INTERVALS = '122192928000000000';\n\n    /**\n     * The number of 100-nanosecond intervals in one second.\n     */\n    private const SECOND_INTERVALS = '10000000';\n\n    /**\n     * The number of 100-nanosecond intervals in one microsecond.\n     */\n    private const MICROSECOND_INTERVALS = '10';\n\n    public function __construct(private CalculatorInterface $calculator)\n    {\n    }\n\n    public function calculateTime(string $seconds, string $microseconds): Hexadecimal\n    {\n        /** @phpstan-ignore possiblyImpure.new */\n        $timestamp = new Time($seconds, $microseconds);\n\n        // Convert the seconds into a count of 100-nanosecond intervals.\n        $sec = $this->calculator->multiply(\n            $timestamp->getSeconds(),\n            new IntegerObject(self::SECOND_INTERVALS), /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        // Convert the microseconds into a count of 100-nanosecond intervals.\n        $usec = $this->calculator->multiply(\n            $timestamp->getMicroseconds(),\n            new IntegerObject(self::MICROSECOND_INTERVALS), /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        /**\n         * Combine the intervals of seconds and microseconds and add the count of 100-nanosecond intervals from the\n         * Gregorian calendar epoch to the Unix epoch. This gives us the correct count of 100-nanosecond intervals since\n         * the Gregorian calendar epoch for the given seconds and microseconds.\n         *\n         * @var IntegerObject $uuidTime\n         * @phpstan-ignore possiblyImpure.new\n         */\n        $uuidTime = $this->calculator->add($sec, $usec, new IntegerObject(self::GREGORIAN_TO_UNIX_INTERVALS));\n\n        /**\n         * PHPStan considers CalculatorInterface::toHexadecimal, Hexadecimal:toString impure.\n         *\n         * @phpstan-ignore possiblyImpure.new\n         */\n        return new Hexadecimal(str_pad($this->calculator->toHexadecimal($uuidTime)->toString(), 16, '0', STR_PAD_LEFT));\n    }\n\n    public function convertTime(Hexadecimal $uuidTimestamp): Time\n    {\n        // From the total, subtract the number of 100-nanosecond intervals from the Gregorian calendar epoch to the Unix\n        // epoch. This gives us the number of 100-nanosecond intervals from the Unix epoch, which also includes the microtime.\n        $epochNanoseconds = $this->calculator->subtract(\n            $this->calculator->toInteger($uuidTimestamp),\n            new IntegerObject(self::GREGORIAN_TO_UNIX_INTERVALS), /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        // Convert the 100-nanosecond intervals into seconds and microseconds.\n        $unixTimestamp = $this->calculator->divide(\n            RoundingMode::HALF_UP,\n            6,\n            $epochNanoseconds,\n            new IntegerObject(self::SECOND_INTERVALS), /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        $split = explode('.', (string) $unixTimestamp, 2);\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Time($split[0], $split[1] ?? 0);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Time;\n\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Math\\BrickMathCalculator;\nuse Ramsey\\Uuid\\Math\\CalculatorInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\Time;\n\nuse function count;\nuse function dechex;\nuse function explode;\nuse function is_float;\nuse function is_int;\nuse function str_pad;\nuse function strlen;\nuse function substr;\n\nuse const STR_PAD_LEFT;\nuse const STR_PAD_RIGHT;\n\n/**\n * PhpTimeConverter uses built-in PHP functions and standard math operations available to the PHP programming language\n * to provide facilities for converting parts of time into representations that may be used in UUIDs\n *\n * @immutable\n */\nclass PhpTimeConverter implements TimeConverterInterface\n{\n    /**\n     * The number of 100-nanosecond intervals from the Gregorian calendar epoch to the Unix epoch.\n     */\n    private const GREGORIAN_TO_UNIX_INTERVALS = 0x01b21dd213814000;\n\n    /**\n     * The number of 100-nanosecond intervals in one second.\n     */\n    private const SECOND_INTERVALS = 10_000_000;\n\n    /**\n     * The number of 100-nanosecond intervals in one microsecond.\n     */\n    private const MICROSECOND_INTERVALS = 10;\n\n    private int $phpPrecision;\n    private CalculatorInterface $calculator;\n    private TimeConverterInterface $fallbackConverter;\n\n    public function __construct(\n        ?CalculatorInterface $calculator = null,\n        ?TimeConverterInterface $fallbackConverter = null,\n    ) {\n        if ($calculator === null) {\n            $calculator = new BrickMathCalculator();\n        }\n\n        if ($fallbackConverter === null) {\n            $fallbackConverter = new GenericTimeConverter($calculator);\n        }\n\n        $this->calculator = $calculator;\n        $this->fallbackConverter = $fallbackConverter;\n        $this->phpPrecision = (int) ini_get('precision');\n    }\n\n    public function calculateTime(string $seconds, string $microseconds): Hexadecimal\n    {\n        $seconds = new IntegerObject($seconds); /** @phpstan-ignore possiblyImpure.new */\n        $microseconds = new IntegerObject($microseconds); /** @phpstan-ignore possiblyImpure.new */\n\n        // Calculate the count of 100-nanosecond intervals since the Gregorian calendar epoch\n        // for the given seconds and microseconds.\n        $uuidTime = ((int) $seconds->toString() * self::SECOND_INTERVALS)\n            + ((int) $microseconds->toString() * self::MICROSECOND_INTERVALS)\n            + self::GREGORIAN_TO_UNIX_INTERVALS;\n\n        // Check to see whether we've overflowed the max/min integer size.\n        // If so, we will default to a different time converter.\n        // @phpstan-ignore function.alreadyNarrowedType (the integer value might have overflowed)\n        if (!is_int($uuidTime)) {\n            return $this->fallbackConverter->calculateTime(\n                $seconds->toString(),\n                $microseconds->toString(),\n            );\n        }\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Hexadecimal(\n            str_pad(dechex($uuidTime), 16, '0', STR_PAD_LEFT)\n        );\n    }\n\n    public function convertTime(Hexadecimal $uuidTimestamp): Time\n    {\n        $timestamp = $this->calculator->toInteger($uuidTimestamp);\n\n        // Convert the 100-nanosecond intervals into seconds and microseconds.\n        $splitTime = $this->splitTime(\n            ($timestamp->toString() - self::GREGORIAN_TO_UNIX_INTERVALS) / self::SECOND_INTERVALS,\n        );\n\n        if (count($splitTime) === 0) {\n            return $this->fallbackConverter->convertTime($uuidTimestamp);\n        }\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Time($splitTime['sec'], $splitTime['usec']);\n    }\n\n    /**\n     * @param float | int $time The time to split into seconds and microseconds\n     *\n     * @return string[]\n     *\n     * @pure\n     */\n    private function splitTime(float | int $time): array\n    {\n        $split = explode('.', (string) $time, 2);\n\n        // If the $time value is a float but $split only has 1 element, then the float math was rounded up to the next\n        // second, so we want to return an empty array to allow use of the fallback converter.\n        if (is_float($time) && count($split) === 1) {\n            return [];\n        }\n\n        if (count($split) === 1) {\n            return ['sec' => $split[0], 'usec' => '0'];\n        }\n\n        // If the microseconds are less than six characters AND the length of the number is greater than or equal to the\n        // PHP precision, then it's possible that we lost some precision for the microseconds. Return an empty array so\n        // that we can choose to use the fallback converter.\n        if (strlen($split[1]) < 6 && strlen((string) $time) >= $this->phpPrecision) {\n            return [];\n        }\n\n        $microseconds = $split[1];\n\n        // Ensure the microseconds are no longer than 6 digits. If they are,\n        // truncate the number to the first 6 digits and round up, if needed.\n        if (strlen($microseconds) > 6) {\n            $roundingDigit = (int) substr($microseconds, 6, 1);\n            $microseconds = (int) substr($microseconds, 0, 6);\n\n            if ($roundingDigit >= 5) {\n                $microseconds++;\n            }\n        }\n\n        return [\n            'sec' => $split[0],\n            'usec' => str_pad((string) $microseconds, 6, '0', STR_PAD_RIGHT),\n        ];\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/Time/UnixTimeConverter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter\\Time;\n\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Math\\CalculatorInterface;\nuse Ramsey\\Uuid\\Math\\RoundingMode;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\Time;\n\nuse function explode;\nuse function str_pad;\n\nuse const STR_PAD_LEFT;\n\n/**\n * UnixTimeConverter converts Unix Epoch timestamps to/from hexadecimal values consisting of milliseconds elapsed since\n * the Unix Epoch\n *\n * @immutable\n */\nclass UnixTimeConverter implements TimeConverterInterface\n{\n    private const MILLISECONDS = 1000;\n\n    public function __construct(private CalculatorInterface $calculator)\n    {\n    }\n\n    public function calculateTime(string $seconds, string $microseconds): Hexadecimal\n    {\n        /** @phpstan-ignore possiblyImpure.new */\n        $timestamp = new Time($seconds, $microseconds);\n\n        // Convert the seconds into milliseconds.\n        $sec = $this->calculator->multiply(\n            $timestamp->getSeconds(),\n            new IntegerObject(self::MILLISECONDS) /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        // Convert the microseconds into milliseconds; the scale is zero because we need to discard the fractional part.\n        $usec = $this->calculator->divide(\n            RoundingMode::DOWN, // Always round down to stay in the previous millisecond.\n            0,\n            $timestamp->getMicroseconds(),\n            new IntegerObject(self::MILLISECONDS), /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        /** @var IntegerObject $unixTime */\n        $unixTime = $this->calculator->add($sec, $usec);\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Hexadecimal(\n            str_pad(\n                $this->calculator->toHexadecimal($unixTime)->toString(),\n                12,\n                '0',\n                STR_PAD_LEFT\n            ),\n        );\n    }\n\n    public function convertTime(Hexadecimal $uuidTimestamp): Time\n    {\n        $milliseconds = $this->calculator->toInteger($uuidTimestamp);\n\n        $unixTimestamp = $this->calculator->divide(\n            RoundingMode::HALF_UP,\n            6,\n            $milliseconds,\n            new IntegerObject(self::MILLISECONDS), /** @phpstan-ignore possiblyImpure.new */\n        );\n\n        $split = explode('.', (string) $unixTimestamp, 2);\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Time($split[0], $split[1] ?? '0');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Converter;\n\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Time;\n\n/**\n * A time converter converts timestamps into representations that may be used in UUIDs\n *\n * @immutable\n */\ninterface TimeConverterInterface\n{\n    /**\n     * Uses the provided seconds and micro-seconds to calculate the count of 100-nanosecond intervals since\n     * UTC 00:00:00.00, 15 October 1582, for RFC 9562 (formerly RFC 4122) variant UUIDs\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#appendix-A RFC 9562, Appendix A. Test Vectors\n     *\n     * @param string $seconds A string representation of seconds since the Unix epoch for the time to calculate\n     * @param string $microseconds A string representation of the micro-seconds associated with the time to calculate\n     *\n     * @return Hexadecimal The full UUID timestamp as a Hexadecimal value\n     *\n     * @pure\n     */\n    public function calculateTime(string $seconds, string $microseconds): Hexadecimal;\n\n    /**\n     * Converts a timestamp extracted from a UUID to a Unix timestamp\n     *\n     * @param Hexadecimal $uuidTimestamp A hexadecimal representation of a UUID timestamp; a UUID timestamp is a count\n     *     of 100-nanosecond intervals since UTC 00:00:00.00, 15 October 1582.\n     *\n     * @return Time An instance of {@see Time}\n     *\n     * @pure\n     */\n    public function convertTime(Hexadecimal $uuidTimestamp): Time;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/DegradedUuid.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\n/**\n * @deprecated DegradedUuid is no longer necessary to represent UUIDs on 32-bit systems.\n *     Transition any type declarations using this class to {@see UuidInterface}.\n *\n * @immutable\n */\nclass DegradedUuid extends Uuid\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/DeprecatedUuidInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\n\n/**\n * This interface encapsulates deprecated methods for ramsey/uuid\n *\n * @immutable\n */\ninterface DeprecatedUuidInterface\n{\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no alternative recommendation, so plan accordingly.\n     */\n    public function getNumberConverter(): NumberConverterInterface;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance.\n     *\n     * @return string[]\n     */\n    public function getFieldsHex(): array;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeqHiAndReserved()}.\n     */\n    public function getClockSeqHiAndReservedHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeqLow()}.\n     */\n    public function getClockSeqLowHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeq()}.\n     */\n    public function getClockSequenceHex(): string;\n\n    /**\n     * @deprecated In ramsey/uuid version 5.0.0, this will be removed from the interface. It is available at\n     *     {@see UuidV1::getDateTime()}.\n     */\n    public function getDateTime(): DateTimeInterface;\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getLeastSignificantBitsHex(): string;\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getMostSignificantBitsHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getNode()}.\n     */\n    public function getNodeHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeHiAndVersion()}.\n     */\n    public function getTimeHiAndVersionHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeLow()}.\n     */\n    public function getTimeLowHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeMid()}.\n     */\n    public function getTimeMidHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimestamp()}.\n     */\n    public function getTimestampHex(): string;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getVariant()}.\n     */\n    public function getVariant(): ?int;\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getVersion()}.\n     */\n    public function getVersion(): ?int;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Exception\\DateTimeException;\nuse Ramsey\\Uuid\\Exception\\UnsupportedOperationException;\nuse Throwable;\n\nuse function str_pad;\nuse function substr;\n\nuse const STR_PAD_LEFT;\n\n/**\n * This trait encapsulates deprecated methods for ramsey/uuid; this trait and its methods will be removed in ramsey/uuid 5.0.0.\n *\n * @deprecated This trait and its methods will be removed in ramsey/uuid 5.0.0.\n *\n * @immutable\n */\ntrait DeprecatedUuidMethodsTrait\n{\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeqHiAndReserved()} and use the arbitrary-precision math\n     *     library of your choice to convert it to a string integer.\n     */\n    public function getClockSeqHiAndReserved(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getClockSeqHiAndReserved()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeqHiAndReserved()}.\n     */\n    public function getClockSeqHiAndReservedHex(): string\n    {\n        return $this->fields->getClockSeqHiAndReserved()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeqLow()} and use the arbitrary-precision math library of\n     *     your choice to convert it to a string integer.\n     */\n    public function getClockSeqLow(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getClockSeqLow()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeqLow()}.\n     */\n    public function getClockSeqLowHex(): string\n    {\n        return $this->fields->getClockSeqLow()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeq()} and use the arbitrary-precision math library of\n     *     your choice to convert it to a string integer.\n     */\n    public function getClockSequence(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getClockSeq()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getClockSeq()}.\n     */\n    public function getClockSequenceHex(): string\n    {\n        return $this->fields->getClockSeq()->toString();\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no alternative recommendation, so plan accordingly.\n     */\n    public function getNumberConverter(): NumberConverterInterface\n    {\n        return $this->numberConverter;\n    }\n\n    /**\n     * @deprecated In ramsey/uuid version 5.0.0, this will be removed. It is available at {@see UuidV1::getDateTime()}.\n     *\n     * @return DateTimeImmutable An immutable instance of DateTimeInterface\n     *\n     * @throws UnsupportedOperationException if UUID is not time-based\n     * @throws DateTimeException if DateTime throws an exception/error\n     */\n    public function getDateTime(): DateTimeInterface\n    {\n        if ($this->fields->getVersion() !== 1) {\n            throw new UnsupportedOperationException('Not a time-based UUID');\n        }\n\n        $time = $this->timeConverter->convertTime($this->fields->getTimestamp());\n\n        try {\n            return new DateTimeImmutable(\n                '@'\n                . $time->getSeconds()->toString()\n                . '.'\n                . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT)\n            );\n        } catch (Throwable $e) {\n            throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *\n     * @return string[]\n     */\n    public function getFieldsHex(): array\n    {\n        return [\n            'time_low' => $this->fields->getTimeLow()->toString(),\n            'time_mid' => $this->fields->getTimeMid()->toString(),\n            'time_hi_and_version' => $this->fields->getTimeHiAndVersion()->toString(),\n            'clock_seq_hi_and_reserved' => $this->fields->getClockSeqHiAndReserved()->toString(),\n            'clock_seq_low' => $this->fields->getClockSeqLow()->toString(),\n            'node' => $this->fields->getNode()->toString(),\n        ];\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getLeastSignificantBits(): string\n    {\n        $leastSignificantHex = substr($this->getHex()->toString(), 16);\n\n        return $this->numberConverter->fromHex($leastSignificantHex);\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getLeastSignificantBitsHex(): string\n    {\n        return substr($this->getHex()->toString(), 16);\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getMostSignificantBits(): string\n    {\n        $mostSignificantHex = substr($this->getHex()->toString(), 0, 16);\n\n        return $this->numberConverter->fromHex($mostSignificantHex);\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getMostSignificantBitsHex(): string\n    {\n        return substr($this->getHex()->toString(), 0, 16);\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getNode()} and use the arbitrary-precision math library of your\n     *     choice to convert it to a string integer.\n     */\n    public function getNode(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getNode()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getNode()}.\n     */\n    public function getNodeHex(): string\n    {\n        return $this->fields->getNode()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeHiAndVersion()} and use the arbitrary-precision math\n     *     library of your choice to convert it to a string integer.\n     */\n    public function getTimeHiAndVersion(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getTimeHiAndVersion()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeHiAndVersion()}.\n     */\n    public function getTimeHiAndVersionHex(): string\n    {\n        return $this->fields->getTimeHiAndVersion()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeLow()} and use the arbitrary-precision math library of\n     *     your choice to convert it to a string integer.\n     */\n    public function getTimeLow(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getTimeLow()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeLow()}.\n     */\n    public function getTimeLowHex(): string\n    {\n        return $this->fields->getTimeLow()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeMid()} and use the arbitrary-precision math library of\n     *     your choice to convert it to a string integer.\n     */\n    public function getTimeMid(): string\n    {\n        return $this->numberConverter->fromHex($this->fields->getTimeMid()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimeMid()}.\n     */\n    public function getTimeMidHex(): string\n    {\n        return $this->fields->getTimeMid()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimestamp()} and use the arbitrary-precision math library of\n     *     your choice to convert it to a string integer.\n     */\n    public function getTimestamp(): string\n    {\n        if ($this->fields->getVersion() !== 1) {\n            throw new UnsupportedOperationException('Not a time-based UUID');\n        }\n\n        return $this->numberConverter->fromHex($this->fields->getTimestamp()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getTimestamp()}.\n     */\n    public function getTimestampHex(): string\n    {\n        if ($this->fields->getVersion() !== 1) {\n            throw new UnsupportedOperationException('Not a time-based UUID');\n        }\n\n        return $this->fields->getTimestamp()->toString();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getVariant()}.\n     */\n    public function getVariant(): ?int\n    {\n        return $this->fields->getVariant();\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see \\Ramsey\\Uuid\\Fields\\FieldsInterface} instance.\n     *     If it is a {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface} instance, you may call\n     *     {@see \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface::getVersion()}.\n     */\n    public function getVersion(): ?int\n    {\n        return $this->fields->getVersion();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that no suitable builder could be found\n */\nclass BuilderNotFoundException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/DateTimeException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that the PHP DateTime extension encountered an exception/error\n */\nclass DateTimeException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/DceSecurityException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate an exception occurred while dealing with DCE Security (version 2) UUIDs\n */\nclass DceSecurityException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse InvalidArgumentException as PhpInvalidArgumentException;\n\n/**\n * Thrown to indicate that the argument received is not valid\n */\nclass InvalidArgumentException extends PhpInvalidArgumentException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that the bytes being operated on are invalid in some way\n */\nclass InvalidBytesException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\n/**\n * Thrown to indicate that the string received is not a valid UUID\n *\n * The InvalidArgumentException that this extends is the ramsey/uuid version of this exception. It exists in the same\n * namespace as this class.\n */\nclass InvalidUuidStringException extends InvalidArgumentException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/NameException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that an error occurred while attempting to hash a namespace and name\n */\nclass NameException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/NodeException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that attempting to fetch or create a node ID encountered an error\n */\nclass NodeException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/RandomSourceException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that the source of random data encountered an error\n *\n * This exception is used mostly to indicate that random_bytes() or random_int() threw an exception. However, it may be\n * used for other sources of random data.\n */\nclass RandomSourceException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/TimeSourceException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate that the source of time encountered an error\n */\nclass TimeSourceException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse RuntimeException as PhpRuntimeException;\n\n/**\n * Thrown to indicate a builder is unable to build a UUID\n */\nclass UnableToBuildUuidException extends PhpRuntimeException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse LogicException as PhpLogicException;\n\n/**\n * Thrown to indicate that the requested operation is not supported\n */\nclass UnsupportedOperationException extends PhpLogicException implements UuidExceptionInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Exception/UuidExceptionInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Exception;\n\nuse Throwable;\n\ninterface UuidExceptionInterface extends Throwable\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/FeatureSet.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse Ramsey\\Uuid\\Builder\\FallbackBuilder;\nuse Ramsey\\Uuid\\Builder\\UuidBuilderInterface;\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Codec\\GuidStringCodec;\nuse Ramsey\\Uuid\\Codec\\StringCodec;\nuse Ramsey\\Uuid\\Converter\\Number\\GenericNumberConverter;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\Time\\GenericTimeConverter;\nuse Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Generator\\DceSecurityGenerator;\nuse Ramsey\\Uuid\\Generator\\DceSecurityGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\NameGeneratorFactory;\nuse Ramsey\\Uuid\\Generator\\NameGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\PeclUuidNameGenerator;\nuse Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator;\nuse Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator;\nuse Ramsey\\Uuid\\Generator\\RandomGeneratorFactory;\nuse Ramsey\\Uuid\\Generator\\RandomGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\TimeGeneratorFactory;\nuse Ramsey\\Uuid\\Generator\\TimeGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\UnixTimeGenerator;\nuse Ramsey\\Uuid\\Guid\\GuidBuilder;\nuse Ramsey\\Uuid\\Math\\BrickMathCalculator;\nuse Ramsey\\Uuid\\Math\\CalculatorInterface;\nuse Ramsey\\Uuid\\Nonstandard\\UuidBuilder as NonstandardUuidBuilder;\nuse Ramsey\\Uuid\\Provider\\Dce\\SystemDceSecurityProvider;\nuse Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface;\nuse Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider;\nuse Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider;\nuse Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider;\nuse Ramsey\\Uuid\\Provider\\TimeProviderInterface;\nuse Ramsey\\Uuid\\Rfc4122\\UuidBuilder as Rfc4122UuidBuilder;\nuse Ramsey\\Uuid\\Validator\\GenericValidator;\nuse Ramsey\\Uuid\\Validator\\ValidatorInterface;\n\nuse const PHP_INT_SIZE;\n\n/**\n * FeatureSet detects and exposes available features in the current environment\n *\n * A feature set is used by UuidFactory to determine the available features and capabilities of the environment.\n */\nclass FeatureSet\n{\n    private ?TimeProviderInterface $timeProvider = null;\n    private CalculatorInterface $calculator;\n    private CodecInterface $codec;\n    private DceSecurityGeneratorInterface $dceSecurityGenerator;\n    private NameGeneratorInterface $nameGenerator;\n    private NodeProviderInterface $nodeProvider;\n    private NumberConverterInterface $numberConverter;\n    private RandomGeneratorInterface $randomGenerator;\n    private TimeConverterInterface $timeConverter;\n    private TimeGeneratorInterface $timeGenerator;\n    private TimeGeneratorInterface $unixTimeGenerator;\n    private UuidBuilderInterface $builder;\n    private ValidatorInterface $validator;\n\n    /**\n     * @param bool $useGuids True build UUIDs using the GuidStringCodec\n     * @param bool $force32Bit True to force the use of 32-bit functionality (primarily for testing purposes)\n     * @param bool $forceNoBigNumber (obsolete)\n     * @param bool $ignoreSystemNode True to disable attempts to check for the system node ID (primarily for testing purposes)\n     * @param bool $enablePecl True to enable the use of the PeclUuidTimeGenerator to generate version 1 UUIDs\n     *\n     * @phpstan-ignore constructor.unusedParameter ($forceNoBigNumber is deprecated)\n     */\n    public function __construct(\n        bool $useGuids = false,\n        private bool $force32Bit = false,\n        bool $forceNoBigNumber = false,\n        private bool $ignoreSystemNode = false,\n        private bool $enablePecl = false,\n    ) {\n        $this->randomGenerator = $this->buildRandomGenerator();\n        $this->setCalculator(new BrickMathCalculator());\n        $this->builder = $this->buildUuidBuilder($useGuids);\n        $this->codec = $this->buildCodec($useGuids);\n        $this->nodeProvider = $this->buildNodeProvider();\n        $this->nameGenerator = $this->buildNameGenerator();\n        $this->setTimeProvider(new SystemTimeProvider());\n        $this->setDceSecurityProvider(new SystemDceSecurityProvider());\n        $this->validator = new GenericValidator();\n\n        assert($this->timeProvider !== null);\n        $this->unixTimeGenerator = $this->buildUnixTimeGenerator();\n    }\n\n    /**\n     * Returns the builder configured for this environment\n     */\n    public function getBuilder(): UuidBuilderInterface\n    {\n        return $this->builder;\n    }\n\n    /**\n     * Returns the calculator configured for this environment\n     */\n    public function getCalculator(): CalculatorInterface\n    {\n        return $this->calculator;\n    }\n\n    /**\n     * Returns the codec configured for this environment\n     */\n    public function getCodec(): CodecInterface\n    {\n        return $this->codec;\n    }\n\n    /**\n     * Returns the DCE Security generator configured for this environment\n     */\n    public function getDceSecurityGenerator(): DceSecurityGeneratorInterface\n    {\n        return $this->dceSecurityGenerator;\n    }\n\n    /**\n     * Returns the name generator configured for this environment\n     */\n    public function getNameGenerator(): NameGeneratorInterface\n    {\n        return $this->nameGenerator;\n    }\n\n    /**\n     * Returns the node provider configured for this environment\n     */\n    public function getNodeProvider(): NodeProviderInterface\n    {\n        return $this->nodeProvider;\n    }\n\n    /**\n     * Returns the number converter configured for this environment\n     */\n    public function getNumberConverter(): NumberConverterInterface\n    {\n        return $this->numberConverter;\n    }\n\n    /**\n     * Returns the random generator configured for this environment\n     */\n    public function getRandomGenerator(): RandomGeneratorInterface\n    {\n        return $this->randomGenerator;\n    }\n\n    /**\n     * Returns the time converter configured for this environment\n     */\n    public function getTimeConverter(): TimeConverterInterface\n    {\n        return $this->timeConverter;\n    }\n\n    /**\n     * Returns the time generator configured for this environment\n     */\n    public function getTimeGenerator(): TimeGeneratorInterface\n    {\n        return $this->timeGenerator;\n    }\n\n    /**\n     * Returns the Unix Epoch time generator configured for this environment\n     */\n    public function getUnixTimeGenerator(): TimeGeneratorInterface\n    {\n        return $this->unixTimeGenerator;\n    }\n\n    /**\n     * Returns the validator configured for this environment\n     */\n    public function getValidator(): ValidatorInterface\n    {\n        return $this->validator;\n    }\n\n    /**\n     * Sets the calculator to use in this environment\n     */\n    public function setCalculator(CalculatorInterface $calculator): void\n    {\n        $this->calculator = $calculator;\n        $this->numberConverter = $this->buildNumberConverter($calculator);\n        $this->timeConverter = $this->buildTimeConverter($calculator);\n\n        if (isset($this->timeProvider)) {\n            $this->timeGenerator = $this->buildTimeGenerator($this->timeProvider);\n        }\n    }\n\n    /**\n     * Sets the DCE Security provider to use in this environment\n     */\n    public function setDceSecurityProvider(DceSecurityProviderInterface $dceSecurityProvider): void\n    {\n        $this->dceSecurityGenerator = $this->buildDceSecurityGenerator($dceSecurityProvider);\n    }\n\n    /**\n     * Sets the node provider to use in this environment\n     */\n    public function setNodeProvider(NodeProviderInterface $nodeProvider): void\n    {\n        $this->nodeProvider = $nodeProvider;\n\n        if (isset($this->timeProvider)) {\n            $this->timeGenerator = $this->buildTimeGenerator($this->timeProvider);\n        }\n    }\n\n    /**\n     * Sets the time provider to use in this environment\n     */\n    public function setTimeProvider(TimeProviderInterface $timeProvider): void\n    {\n        $this->timeProvider = $timeProvider;\n        $this->timeGenerator = $this->buildTimeGenerator($timeProvider);\n    }\n\n    /**\n     * Set the validator to use in this environment\n     */\n    public function setValidator(ValidatorInterface $validator): void\n    {\n        $this->validator = $validator;\n    }\n\n    /**\n     * Returns a codec configured for this environment\n     *\n     * @param bool $useGuids Whether to build UUIDs using the GuidStringCodec\n     */\n    private function buildCodec(bool $useGuids = false): CodecInterface\n    {\n        if ($useGuids) {\n            return new GuidStringCodec($this->builder);\n        }\n\n        return new StringCodec($this->builder);\n    }\n\n    /**\n     * Returns a DCE Security generator configured for this environment\n     */\n    private function buildDceSecurityGenerator(\n        DceSecurityProviderInterface $dceSecurityProvider,\n    ): DceSecurityGeneratorInterface {\n        return new DceSecurityGenerator($this->numberConverter, $this->timeGenerator, $dceSecurityProvider);\n    }\n\n    /**\n     * Returns a node provider configured for this environment\n     */\n    private function buildNodeProvider(): NodeProviderInterface\n    {\n        if ($this->ignoreSystemNode) {\n            return new RandomNodeProvider();\n        }\n\n        return new FallbackNodeProvider([new SystemNodeProvider(), new RandomNodeProvider()]);\n    }\n\n    /**\n     * Returns a number converter configured for this environment\n     */\n    private function buildNumberConverter(CalculatorInterface $calculator): NumberConverterInterface\n    {\n        return new GenericNumberConverter($calculator);\n    }\n\n    /**\n     * Returns a random generator configured for this environment\n     */\n    private function buildRandomGenerator(): RandomGeneratorInterface\n    {\n        if ($this->enablePecl) {\n            return new PeclUuidRandomGenerator();\n        }\n\n        return (new RandomGeneratorFactory())->getGenerator();\n    }\n\n    /**\n     * Returns a time generator configured for this environment\n     *\n     * @param TimeProviderInterface $timeProvider The time provider to use with\n     *     the time generator\n     */\n    private function buildTimeGenerator(TimeProviderInterface $timeProvider): TimeGeneratorInterface\n    {\n        if ($this->enablePecl) {\n            return new PeclUuidTimeGenerator();\n        }\n\n        return (new TimeGeneratorFactory($this->nodeProvider, $this->timeConverter, $timeProvider))->getGenerator();\n    }\n\n    /**\n     * Returns a Unix Epoch time generator configured for this environment\n     */\n    private function buildUnixTimeGenerator(): TimeGeneratorInterface\n    {\n        return new UnixTimeGenerator($this->randomGenerator);\n    }\n\n    /**\n     * Returns a name generator configured for this environment\n     */\n    private function buildNameGenerator(): NameGeneratorInterface\n    {\n        if ($this->enablePecl) {\n            return new PeclUuidNameGenerator();\n        }\n\n        return (new NameGeneratorFactory())->getGenerator();\n    }\n\n    /**\n     * Returns a time converter configured for this environment\n     */\n    private function buildTimeConverter(CalculatorInterface $calculator): TimeConverterInterface\n    {\n        $genericConverter = new GenericTimeConverter($calculator);\n\n        if ($this->is64BitSystem()) {\n            return new PhpTimeConverter($calculator, $genericConverter);\n        }\n\n        return $genericConverter;\n    }\n\n    /**\n     * Returns a UUID builder configured for this environment\n     *\n     * @param bool $useGuids Whether to build UUIDs using the GuidStringCodec\n     */\n    private function buildUuidBuilder(bool $useGuids = false): UuidBuilderInterface\n    {\n        if ($useGuids) {\n            return new GuidBuilder($this->numberConverter, $this->timeConverter);\n        }\n\n        return new FallbackBuilder([\n            new Rfc4122UuidBuilder($this->numberConverter, $this->timeConverter),\n            new NonstandardUuidBuilder($this->numberConverter, $this->timeConverter),\n        ]);\n    }\n\n    /**\n     * Returns true if the PHP build is 64-bit\n     */\n    private function is64BitSystem(): bool\n    {\n        return PHP_INT_SIZE === 8 && !$this->force32Bit;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Fields/FieldsInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Fields;\n\nuse Serializable;\n\n/**\n * UUIDs consist of unsigned integers, the bytes of which are separated into fields and arranged in a particular layout\n * defined by the specification for the variant\n *\n * @immutable\n */\ninterface FieldsInterface extends Serializable\n{\n    /**\n     * Returns the bytes that comprise the fields\n     *\n     * @pure\n     */\n    public function getBytes(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Fields;\n\nuse ValueError;\n\nuse function base64_decode;\nuse function sprintf;\nuse function strlen;\n\n/**\n * Provides common serialization functionality to fields\n *\n * @immutable\n */\ntrait SerializableFieldsTrait\n{\n    /**\n     * @param string $bytes The bytes that comprise the fields\n     */\n    abstract public function __construct(string $bytes);\n\n    /**\n     * Returns the bytes that comprise the fields\n     */\n    abstract public function getBytes(): string;\n\n    /**\n     * Returns a string representation of the object\n     */\n    public function serialize(): string\n    {\n        return $this->getBytes();\n    }\n\n    /**\n     * @return array{bytes: string}\n     */\n    public function __serialize(): array\n    {\n        return ['bytes' => $this->getBytes()];\n    }\n\n    /**\n     * Constructs the object from a serialized string representation\n     *\n     * @param string $data The serialized string representation of the object\n     */\n    public function unserialize(string $data): void\n    {\n        if (strlen($data) === 16) {\n            $this->__construct($data);\n        } else {\n            $this->__construct(base64_decode($data));\n        }\n    }\n\n    /**\n     * @param array{bytes?: string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['bytes'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->unserialize($data['bytes']);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/CombGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\n\nuse function bin2hex;\nuse function explode;\nuse function hex2bin;\nuse function microtime;\nuse function str_pad;\nuse function substr;\n\nuse const STR_PAD_LEFT;\n\n/**\n * CombGenerator generates COMBs (combined UUID/timestamp)\n *\n * The CombGenerator, when used with the StringCodec (and, by proxy, the TimestampLastCombCodec) or the\n * TimestampFirstCombCodec, combines the current timestamp with a UUID (hence the name \"COMB\"). The timestamp either\n * appears as the first or last 48 bits of the COMB, depending on the codec used.\n *\n * By default, COMBs will have the timestamp set as the last 48 bits of the identifier.\n *\n * ```\n * $factory = new UuidFactory();\n *\n * $factory->setRandomGenerator(new CombGenerator(\n *     $factory->getRandomGenerator(),\n *     $factory->getNumberConverter(),\n * ));\n *\n * $comb = $factory->uuid4();\n * ```\n *\n * To generate a COMB with the timestamp as the first 48 bits, set the TimestampFirstCombCodec as the codec.\n *\n * ```\n * $factory->setCodec(new TimestampFirstCombCodec($factory->getUuidBuilder()));\n * ```\n *\n * @deprecated Please migrate to {@link https://uuid.ramsey.dev/en/stable/rfc4122/version7.html Version 7, Unix Epoch Time UUIDs}.\n *\n * @link https://web.archive.org/web/20240118030355/https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys\n */\nclass CombGenerator implements RandomGeneratorInterface\n{\n    public const TIMESTAMP_BYTES = 6;\n\n    public function __construct(\n        private RandomGeneratorInterface $generator,\n        private NumberConverterInterface $numberConverter\n    ) {\n    }\n\n    /**\n     * @throws InvalidArgumentException if $length is not a positive integer greater than or equal to CombGenerator::TIMESTAMP_BYTES\n     *\n     * @inheritDoc\n     */\n    public function generate(int $length): string\n    {\n        if ($length < self::TIMESTAMP_BYTES) {\n            throw new InvalidArgumentException(\n                'Length must be a positive integer greater than or equal to ' . self::TIMESTAMP_BYTES\n            );\n        }\n\n        if ($length % 2 !== 0) {\n            throw new InvalidArgumentException('Length must be an even number');\n        }\n\n        $hash = '';\n\n        /** @phpstan-ignore greater.alwaysTrue (TIMESTAMP_BYTES constant could change in child classes) */\n        if (self::TIMESTAMP_BYTES > 0 && $length > self::TIMESTAMP_BYTES) {\n            $hash = $this->generator->generate($length - self::TIMESTAMP_BYTES);\n        }\n\n        $lsbTime = str_pad(\n            $this->numberConverter->toHex($this->timestamp()),\n            self::TIMESTAMP_BYTES * 2,\n            '0',\n            STR_PAD_LEFT,\n        );\n\n        return (string) hex2bin(str_pad(bin2hex($hash), $length - self::TIMESTAMP_BYTES, '0') . $lsbTime);\n    }\n\n    /**\n     * Returns the current timestamp as a string integer, precise to 0.00001 seconds\n     */\n    private function timestamp(): string\n    {\n        $time = explode(' ', microtime(false));\n\n        return $time[1] . substr($time[0], 2, 5);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Exception\\DceSecurityException;\nuse Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Uuid;\n\nuse function hex2bin;\nuse function in_array;\nuse function pack;\nuse function str_pad;\nuse function strlen;\nuse function substr_replace;\n\nuse const STR_PAD_LEFT;\n\n/**\n * DceSecurityGenerator generates strings of binary data based on a local domain, local identifier, node ID, clock\n * sequence, and the current time\n */\nclass DceSecurityGenerator implements DceSecurityGeneratorInterface\n{\n    private const DOMAINS = [\n        Uuid::DCE_DOMAIN_PERSON,\n        Uuid::DCE_DOMAIN_GROUP,\n        Uuid::DCE_DOMAIN_ORG,\n    ];\n\n    /**\n     * Upper bounds for the clock sequence in DCE Security UUIDs.\n     */\n    private const CLOCK_SEQ_HIGH = 63;\n\n    /**\n     * Lower bounds for the clock sequence in DCE Security UUIDs.\n     */\n    private const CLOCK_SEQ_LOW = 0;\n\n    public function __construct(\n        private NumberConverterInterface $numberConverter,\n        private TimeGeneratorInterface $timeGenerator,\n        private DceSecurityProviderInterface $dceSecurityProvider,\n    ) {\n    }\n\n    public function generate(\n        int $localDomain,\n        ?IntegerObject $localIdentifier = null,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null,\n    ): string {\n        if (!in_array($localDomain, self::DOMAINS)) {\n            throw new DceSecurityException('Local domain must be a valid DCE Security domain');\n        }\n\n        if ($localIdentifier && $localIdentifier->isNegative()) {\n            throw new DceSecurityException(\n                'Local identifier out of bounds; it must be a value between 0 and 4294967295',\n            );\n        }\n\n        if ($clockSeq > self::CLOCK_SEQ_HIGH || $clockSeq < self::CLOCK_SEQ_LOW) {\n            throw new DceSecurityException('Clock sequence out of bounds; it must be a value between 0 and 63');\n        }\n\n        switch ($localDomain) {\n            case Uuid::DCE_DOMAIN_ORG:\n                if ($localIdentifier === null) {\n                    throw new DceSecurityException('A local identifier must be provided for the org domain');\n                }\n\n                break;\n            case Uuid::DCE_DOMAIN_PERSON:\n                if ($localIdentifier === null) {\n                    $localIdentifier = $this->dceSecurityProvider->getUid();\n                }\n\n                break;\n            case Uuid::DCE_DOMAIN_GROUP:\n            default:\n                if ($localIdentifier === null) {\n                    $localIdentifier = $this->dceSecurityProvider->getGid();\n                }\n\n                break;\n        }\n\n        $identifierHex = $this->numberConverter->toHex($localIdentifier->toString());\n\n        // The maximum value for the local identifier is 0xffffffff, or 4,294,967,295. This is 8 hexadecimal digits, so\n        // if the length of hexadecimal digits is greater than 8, we know the value is greater than 0xffffffff.\n        if (strlen($identifierHex) > 8) {\n            throw new DceSecurityException(\n                'Local identifier out of bounds; it must be a value between 0 and 4294967295',\n            );\n        }\n\n        $domainByte = pack('n', $localDomain)[1];\n        $identifierBytes = (string) hex2bin(str_pad($identifierHex, 8, '0', STR_PAD_LEFT));\n\n        if ($node instanceof Hexadecimal) {\n            $node = $node->toString();\n        }\n\n        // Shift the clock sequence 8 bits to the left, so it matches 0x3f00.\n        if ($clockSeq !== null) {\n            $clockSeq = $clockSeq << 8;\n        }\n\n        $bytes = $this->timeGenerator->generate($node, $clockSeq);\n\n        // Replace bytes in the time-based UUID with DCE Security values.\n        $bytes = substr_replace($bytes, $identifierBytes, 0, 4);\n\n        return substr_replace($bytes, $domainByte, 9, 1);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Rfc4122\\UuidV2;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\n\n/**\n * A DCE Security generator generates strings of binary data based on a local domain, local identifier, node ID, clock\n * sequence, and the current time\n *\n * @see UuidV2\n */\ninterface DceSecurityGeneratorInterface\n{\n    /**\n     * Generate a binary string from a local domain, local identifier, node ID, clock sequence, and current time\n     *\n     * @param int $localDomain The local domain to use when generating bytes, according to DCE Security\n     * @param IntegerObject | null $localIdentifier The local identifier for the given domain; this may be a UID or GID\n     *     on POSIX systems if the local domain is \"person\" or \"group,\" or it may be a site-defined identifier if the\n     *     local domain is \"org\"\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return string A binary string\n     */\n    public function generate(\n        int $localDomain,\n        ?IntegerObject $localIdentifier = null,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null,\n    ): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Exception\\NameException;\nuse Ramsey\\Uuid\\UuidInterface;\nuse ValueError;\n\nuse function hash;\n\n/**\n * DefaultNameGenerator generates strings of binary data based on a namespace, name, and hashing algorithm\n */\nclass DefaultNameGenerator implements NameGeneratorInterface\n{\n    /**\n     * @pure\n     */\n    public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string\n    {\n        try {\n            return hash($hashAlgorithm, $ns->getBytes() . $name, true);\n        } catch (ValueError $e) {\n            throw new NameException(\n                message: sprintf('Unable to hash namespace and name with algorithm \\'%s\\'', $hashAlgorithm),\n                previous: $e,\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Exception\\RandomSourceException;\nuse Ramsey\\Uuid\\Exception\\TimeSourceException;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Provider\\TimeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Throwable;\n\nuse function dechex;\nuse function hex2bin;\nuse function is_int;\nuse function pack;\nuse function preg_match;\nuse function sprintf;\nuse function str_pad;\nuse function strlen;\n\nuse const STR_PAD_LEFT;\n\n/**\n * DefaultTimeGenerator generates strings of binary data based on a node ID, clock sequence, and the current time\n */\nclass DefaultTimeGenerator implements TimeGeneratorInterface\n{\n    public function __construct(\n        private NodeProviderInterface $nodeProvider,\n        private TimeConverterInterface $timeConverter,\n        private TimeProviderInterface $timeProvider,\n    ) {\n    }\n\n    /**\n     * @throws InvalidArgumentException if the parameters contain invalid values\n     * @throws RandomSourceException if random_int() throws an exception/error\n     *\n     * @inheritDoc\n     */\n    public function generate($node = null, ?int $clockSeq = null): string\n    {\n        if ($node instanceof Hexadecimal) {\n            $node = $node->toString();\n        }\n\n        $node = $this->getValidNode($node);\n\n        if ($clockSeq === null) {\n            try {\n                // This does not use \"stable storage\"; see RFC 9562, section 6.3.\n                $clockSeq = random_int(0, 0x3fff);\n            } catch (Throwable $exception) {\n                throw new RandomSourceException($exception->getMessage(), (int) $exception->getCode(), $exception);\n            }\n        }\n\n        $time = $this->timeProvider->getTime();\n\n        $uuidTime = $this->timeConverter->calculateTime(\n            $time->getSeconds()->toString(),\n            $time->getMicroseconds()->toString()\n        );\n\n        $timeHex = str_pad($uuidTime->toString(), 16, '0', STR_PAD_LEFT);\n\n        if (strlen($timeHex) !== 16) {\n            throw new TimeSourceException(sprintf('The generated time of \\'%s\\' is larger than expected', $timeHex));\n        }\n\n        $timeBytes = (string) hex2bin($timeHex);\n\n        return $timeBytes[4] . $timeBytes[5] . $timeBytes[6] . $timeBytes[7]\n            . $timeBytes[2] . $timeBytes[3] . $timeBytes[0] . $timeBytes[1]\n            . pack('n*', $clockSeq) . $node;\n    }\n\n    /**\n     * Uses the node provider given when constructing this instance to get the node ID (usually a MAC address)\n     *\n     * @param int | string | null $node A node value that may be used to override the node provider\n     *\n     * @return string 6-byte binary string representation of the node\n     *\n     * @throws InvalidArgumentException\n     */\n    private function getValidNode(int | string | null $node): string\n    {\n        if ($node === null) {\n            $node = $this->nodeProvider->getNode();\n        }\n\n        // Convert the node to hex if it is still an integer.\n        if (is_int($node)) {\n            $node = dechex($node);\n        }\n\n        if (!preg_match('/^[A-Fa-f0-9]+$/', (string) $node) || strlen((string) $node) > 12) {\n            throw new InvalidArgumentException('Invalid node value');\n        }\n\n        return (string) hex2bin(str_pad((string) $node, 12, '0', STR_PAD_LEFT));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\n/**\n * NameGeneratorFactory retrieves a default name generator, based on the environment\n */\nclass NameGeneratorFactory\n{\n    /**\n     * Returns a default name generator, based on the current environment\n     */\n    public function getGenerator(): NameGeneratorInterface\n    {\n        return new DefaultNameGenerator();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\UuidInterface;\n\n/**\n * A name generator generates strings of binary data created by hashing together a namespace with a name, according to a\n * hashing algorithm\n */\ninterface NameGeneratorInterface\n{\n    /**\n     * Generate a binary string from a namespace and name hashed together with the specified hashing algorithm\n     *\n     * @param UuidInterface $ns The namespace\n     * @param string $name The name to use for creating a UUID\n     * @param string $hashAlgorithm The hashing algorithm to use\n     *\n     * @return string A binary string\n     *\n     * @pure\n     */\n    public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Exception\\NameException;\nuse Ramsey\\Uuid\\UuidInterface;\n\nuse function sprintf;\nuse function uuid_generate_md5;\nuse function uuid_generate_sha1;\nuse function uuid_parse;\n\n/**\n * PeclUuidNameGenerator generates strings of binary data from a namespace and a name, using ext-uuid\n *\n * @link https://pecl.php.net/package/uuid ext-uuid\n */\nclass PeclUuidNameGenerator implements NameGeneratorInterface\n{\n    /**\n     * @pure\n     */\n    public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string\n    {\n        $uuid = match ($hashAlgorithm) {\n            'md5' => uuid_generate_md5($ns->toString(), $name), /** @phpstan-ignore possiblyImpure.functionCall */\n            'sha1' => uuid_generate_sha1($ns->toString(), $name), /** @phpstan-ignore possiblyImpure.functionCall */\n            default => throw new NameException(\n                sprintf('Unable to hash namespace and name with algorithm \\'%s\\'', $hashAlgorithm),\n            ),\n        };\n\n        /** @phpstan-ignore possiblyImpure.functionCall */\n        return (string) uuid_parse($uuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse function uuid_create;\nuse function uuid_parse;\n\nuse const UUID_TYPE_RANDOM;\n\n/**\n * PeclUuidRandomGenerator generates strings of random binary data using ext-uuid\n *\n * @link https://pecl.php.net/package/uuid ext-uuid\n */\nclass PeclUuidRandomGenerator implements RandomGeneratorInterface\n{\n    public function generate(int $length): string\n    {\n        $uuid = uuid_create(UUID_TYPE_RANDOM);\n\n        return (string) uuid_parse($uuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse function uuid_create;\nuse function uuid_parse;\n\nuse const UUID_TYPE_TIME;\n\n/**\n * PeclUuidTimeGenerator generates strings of binary data for time-base UUIDs, using ext-uuid\n *\n * @link https://pecl.php.net/package/uuid ext-uuid\n */\nclass PeclUuidTimeGenerator implements TimeGeneratorInterface\n{\n    /**\n     * @inheritDoc\n     */\n    public function generate($node = null, ?int $clockSeq = null): string\n    {\n        $uuid = uuid_create(UUID_TYPE_TIME);\n\n        return (string) uuid_parse($uuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Exception\\RandomSourceException;\nuse Throwable;\n\n/**\n * RandomBytesGenerator generates strings of random binary data using the built-in `random_bytes()` PHP function\n *\n * @link http://php.net/random_bytes random_bytes()\n */\nclass RandomBytesGenerator implements RandomGeneratorInterface\n{\n    /**\n     * @throws RandomSourceException if random_bytes() throws an exception/error\n     *\n     * @inheritDoc\n     */\n    public function generate(int $length): string\n    {\n        try {\n            return random_bytes($length);\n        } catch (Throwable $exception) {\n            throw new RandomSourceException($exception->getMessage(), (int) $exception->getCode(), $exception);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\n/**\n * RandomGeneratorFactory retrieves a default random generator, based on the environment\n */\nclass RandomGeneratorFactory\n{\n    /**\n     * Returns a default random generator, based on the current environment\n     */\n    public function getGenerator(): RandomGeneratorInterface\n    {\n        return new RandomBytesGenerator();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\n/**\n * A random generator generates strings of random binary data\n */\ninterface RandomGeneratorInterface\n{\n    /**\n     * Generates a string of randomized binary data\n     *\n     * @param int<1, max> $length The number of bytes to generate of random binary data\n     *\n     * @return string A binary string\n     */\n    public function generate(int $length): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse RandomLib\\Factory;\nuse RandomLib\\Generator;\n\n/**\n * RandomLibAdapter generates strings of random binary data using the paragonie/random-lib library\n *\n * @deprecated This class will be removed in 5.0.0. Use the default RandomBytesGenerator or implement your own generator\n *     that implements RandomGeneratorInterface.\n *\n * @link https://packagist.org/packages/paragonie/random-lib paragonie/random-lib\n */\nclass RandomLibAdapter implements RandomGeneratorInterface\n{\n    private Generator $generator;\n\n    /**\n     * Constructs a RandomLibAdapter\n     *\n     * By default, if no Generator is passed in, this creates a high-strength generator to use when generating random\n     * binary data.\n     *\n     * @param Generator | null $generator The generator to use when generating binary data\n     */\n    public function __construct(?Generator $generator = null)\n    {\n        if ($generator === null) {\n            $factory = new Factory();\n            $generator = $factory->getHighStrengthGenerator();\n        }\n\n        $this->generator = $generator;\n    }\n\n    public function generate(int $length): string\n    {\n        return $this->generator->generate($length);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Provider\\TimeProviderInterface;\n\n/**\n * TimeGeneratorFactory retrieves a default time generator, based on the environment\n */\nclass TimeGeneratorFactory\n{\n    public function __construct(\n        private NodeProviderInterface $nodeProvider,\n        private TimeConverterInterface $timeConverter,\n        private TimeProviderInterface $timeProvider,\n    ) {\n    }\n\n    /**\n     * Returns a default time generator, based on the current environment\n     */\n    public function getGenerator(): TimeGeneratorInterface\n    {\n        return new DefaultTimeGenerator($this->nodeProvider, $this->timeConverter, $this->timeProvider);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\n/**\n * A time generator generates strings of binary data based on a node ID, clock sequence, and the current time\n */\ninterface TimeGeneratorInterface\n{\n    /**\n     * Generate a binary string from a node ID, clock sequence, and current time\n     *\n     * @param Hexadecimal | int | string | null $node A 48-bit number representing the hardware address; this number may\n     *     be represented as an integer or a hexadecimal string\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return string A binary string\n     */\n    public function generate($node = null, ?int $clockSeq = null): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Generator/UnixTimeGenerator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Generator;\n\nuse Brick\\Math\\BigInteger;\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\nuse function assert;\nuse function hash;\nuse function pack;\nuse function str_pad;\nuse function strlen;\nuse function substr;\nuse function substr_replace;\nuse function unpack;\n\nuse const PHP_INT_SIZE;\nuse const STR_PAD_LEFT;\n\n/**\n * UnixTimeGenerator generates bytes, combining a 48-bit timestamp in milliseconds since the Unix Epoch with 80 random bits\n *\n * Code and concepts within this class are borrowed from the symfony/uid package and are used under the terms of the MIT\n * license distributed with symfony/uid.\n *\n * symfony/uid is copyright (c) Fabien Potencier.\n *\n * @link https://symfony.com/components/Uid Symfony Uid component\n * @link https://github.com/symfony/uid/blob/4f9f537e57261519808a7ce1d941490736522bbc/UuidV7.php Symfony UuidV7 class\n * @link https://github.com/symfony/uid/blob/6.2/LICENSE MIT License\n */\nclass UnixTimeGenerator implements TimeGeneratorInterface\n{\n    private static string $time = '';\n    private static ?string $seed = null;\n    private static int $seedIndex = 0;\n\n    /** @var int[] */\n    private static array $rand = [];\n\n    /** @var int[] */\n    private static array $seedParts;\n\n    public function __construct(\n        private RandomGeneratorInterface $randomGenerator,\n        private int $intSize = PHP_INT_SIZE,\n    ) {\n    }\n\n    /**\n     * @param Hexadecimal | int | string | null $node Unused in this generator\n     * @param int | null $clockSeq Unused in this generator\n     * @param DateTimeInterface | null $dateTime A date-time instance to use when generating bytes\n     */\n    public function generate($node = null, ?int $clockSeq = null, ?DateTimeInterface $dateTime = null): string\n    {\n        if ($dateTime === null) {\n            $time = microtime(false);\n            $time = substr($time, 11) . substr($time, 2, 3);\n        } else {\n            $time = $dateTime->format('Uv');\n        }\n\n        if ($time > self::$time || ($dateTime !== null && $time !== self::$time)) {\n            $this->randomize($time);\n        } else {\n            $time = $this->increment();\n        }\n\n        if ($this->intSize >= 8) {\n            $time = substr(pack('J', (int) $time), -6);\n        } else {\n            $time = str_pad(BigInteger::of($time)->toBytes(false), 6, \"\\x00\", STR_PAD_LEFT);\n        }\n\n        assert(strlen($time) === 6);\n\n        return $time . pack('n*', self::$rand[1], self::$rand[2], self::$rand[3], self::$rand[4], self::$rand[5]);\n    }\n\n    private function randomize(string $time): void\n    {\n        if (self::$seed === null) {\n            $seed = $this->randomGenerator->generate(16);\n            self::$seed = $seed;\n        } else {\n            $seed = $this->randomGenerator->generate(10);\n        }\n\n        /** @var int[] $rand */\n        $rand = unpack('n*', $seed);\n        $rand[1] &= 0x03ff;\n\n        self::$rand = $rand;\n        self::$time = $time;\n    }\n\n    /**\n     * Special thanks to Nicolas Grekas (<https://github.com/nicolas-grekas>) for sharing the following information:\n     *\n     * Within the same ms, we increment the rand part by a random 24-bit number.\n     *\n     * Instead of getting this number from random_bytes(), which is slow, we get it by sha512-hashing self::$seed. This\n     * produces 64 bytes of entropy, which we need to split in a list of 24-bit numbers. `unpack()` first splits them\n     * into 16 x 32-bit numbers; we take the first byte of each number to get 5 extra 24-bit numbers. Then, we consume\n     * each number one-by-one and run this logic every 21 iterations.\n     *\n     * `self::$rand` holds the random part of the UUID, split into 5 x 16-bit numbers for x86 portability. We increment\n     * this random part by the next 24-bit number in the `self::$seedParts` list and decrement `self::$seedIndex`.\n     */\n    private function increment(): string\n    {\n        if (self::$seedIndex === 0 && self::$seed !== null) {\n            self::$seed = hash('sha512', self::$seed, true);\n\n            /** @var int[] $s */\n            $s = unpack('l*', self::$seed);\n            $s[] = ($s[1] >> 8 & 0xff0000) | ($s[2] >> 16 & 0xff00) | ($s[3] >> 24 & 0xff);\n            $s[] = ($s[4] >> 8 & 0xff0000) | ($s[5] >> 16 & 0xff00) | ($s[6] >> 24 & 0xff);\n            $s[] = ($s[7] >> 8 & 0xff0000) | ($s[8] >> 16 & 0xff00) | ($s[9] >> 24 & 0xff);\n            $s[] = ($s[10] >> 8 & 0xff0000) | ($s[11] >> 16 & 0xff00) | ($s[12] >> 24 & 0xff);\n            $s[] = ($s[13] >> 8 & 0xff0000) | ($s[14] >> 16 & 0xff00) | ($s[15] >> 24 & 0xff);\n\n            self::$seedParts = $s;\n            self::$seedIndex = 21;\n        }\n\n        self::$rand[5] = 0xffff & $carry = self::$rand[5] + 1 + (self::$seedParts[self::$seedIndex--] & 0xffffff);\n        self::$rand[4] = 0xffff & $carry = self::$rand[4] + ($carry >> 16);\n        self::$rand[3] = 0xffff & $carry = self::$rand[3] + ($carry >> 16);\n        self::$rand[2] = 0xffff & $carry = self::$rand[2] + ($carry >> 16);\n        self::$rand[1] += $carry >> 16;\n\n        if (0xfc00 & self::$rand[1]) {\n            $time = self::$time;\n            $mtime = (int) substr($time, -9);\n\n            if ($this->intSize >= 8 || strlen($time) < 10) {\n                $time = (string) ((int) $time + 1);\n            } elseif ($mtime === 999999999) {\n                $time = (1 + (int) substr($time, 0, -9)) . '000000000';\n            } else {\n                $mtime++;\n                $time = substr_replace($time, str_pad((string) $mtime, 9, '0', STR_PAD_LEFT), -9);\n            }\n\n            $this->randomize($time);\n        }\n\n        return self::$time;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Guid/Fields.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Guid;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Fields\\SerializableFieldsTrait;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface;\nuse Ramsey\\Uuid\\Rfc4122\\MaxTrait;\nuse Ramsey\\Uuid\\Rfc4122\\NilTrait;\nuse Ramsey\\Uuid\\Rfc4122\\VariantTrait;\nuse Ramsey\\Uuid\\Rfc4122\\VersionTrait;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Uuid;\n\nuse function bin2hex;\nuse function dechex;\nuse function hexdec;\nuse function pack;\nuse function sprintf;\nuse function str_pad;\nuse function strlen;\nuse function substr;\nuse function unpack;\n\nuse const STR_PAD_LEFT;\n\n/**\n * GUIDs consist of a set of named fields, according to RFC 9562 (formerly RFC 4122)\n *\n * @see Guid\n *\n * @immutable\n */\nfinal class Fields implements FieldsInterface\n{\n    use MaxTrait;\n    use NilTrait;\n    use SerializableFieldsTrait;\n    use VariantTrait;\n    use VersionTrait;\n\n    /**\n     * @param string $bytes A 16-byte binary string representation of a UUID\n     *\n     * @throws InvalidArgumentException if the byte string is not exactly 16 bytes\n     * @throws InvalidArgumentException if the byte string does not represent a GUID\n     * @throws InvalidArgumentException if the byte string does not contain a valid version\n     */\n    public function __construct(private string $bytes)\n    {\n        if (strlen($this->bytes) !== 16) {\n            throw new InvalidArgumentException(\n                'The byte string must be 16 bytes long; received ' . strlen($this->bytes) . ' bytes',\n            );\n        }\n\n        if (!$this->isCorrectVariant()) {\n            throw new InvalidArgumentException(\n                'The byte string received does not conform to the RFC 9562 (formerly RFC 4122) '\n                . 'or Microsoft Corporation variants',\n            );\n        }\n\n        if (!$this->isCorrectVersion()) {\n            throw new InvalidArgumentException('The byte string received does not contain a valid version');\n        }\n    }\n\n    public function getBytes(): string\n    {\n        return $this->bytes;\n    }\n\n    public function getTimeLow(): Hexadecimal\n    {\n        // Swap the bytes from little endian to network byte order.\n        /** @var string[] $hex */\n        $hex = unpack(\n            'H*',\n            pack(\n                'v*',\n                hexdec(bin2hex(substr($this->bytes, 2, 2))),\n                hexdec(bin2hex(substr($this->bytes, 0, 2))),\n            ),\n        );\n\n        return new Hexadecimal($hex[1] ?? '');\n    }\n\n    public function getTimeMid(): Hexadecimal\n    {\n        // Swap the bytes from little endian to network byte order.\n        /** @var string[] $hex */\n        $hex = unpack('H*', pack('v', hexdec(bin2hex(substr($this->bytes, 4, 2)))));\n\n        return new Hexadecimal($hex[1] ?? '');\n    }\n\n    public function getTimeHiAndVersion(): Hexadecimal\n    {\n        // Swap the bytes from little endian to network byte order.\n        /** @var string[] $hex */\n        $hex = unpack('H*', pack('v', hexdec(bin2hex(substr($this->bytes, 6, 2)))));\n\n        return new Hexadecimal($hex[1] ?? '');\n    }\n\n    public function getTimestamp(): Hexadecimal\n    {\n        return new Hexadecimal(sprintf(\n            '%03x%04s%08s',\n            hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff,\n            $this->getTimeMid()->toString(),\n            $this->getTimeLow()->toString()\n        ));\n    }\n\n    public function getClockSeq(): Hexadecimal\n    {\n        if ($this->isMax()) {\n            $clockSeq = 0xffff;\n        } elseif ($this->isNil()) {\n            $clockSeq = 0x0000;\n        } else {\n            $clockSeq = hexdec(bin2hex(substr($this->bytes, 8, 2))) & 0x3fff;\n        }\n\n        return new Hexadecimal(str_pad(dechex($clockSeq), 4, '0', STR_PAD_LEFT));\n    }\n\n    public function getClockSeqHiAndReserved(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 8, 1)));\n    }\n\n    public function getClockSeqLow(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 9, 1)));\n    }\n\n    public function getNode(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 10)));\n    }\n\n    public function getVersion(): ?int\n    {\n        if ($this->isNil() || $this->isMax()) {\n            return null;\n        }\n\n        /** @var int[] $parts */\n        $parts = unpack('n*', $this->bytes);\n\n        return ($parts[4] >> 4) & 0x00f;\n    }\n\n    private function isCorrectVariant(): bool\n    {\n        if ($this->isNil() || $this->isMax()) {\n            return true;\n        }\n\n        $variant = $this->getVariant();\n\n        return $variant === Uuid::RFC_4122 || $variant === Uuid::RESERVED_MICROSOFT;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Guid/Guid.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Guid;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Guid represents a UUID with \"native\" (little-endian) byte order\n *\n * From Wikipedia:\n *\n * > The first three fields are unsigned 32- and 16-bit integers and are subject to swapping, while the last two fields\n * > consist of uninterpreted bytes, not subject to swapping. This byte swapping applies even for versions 3, 4, and 5,\n * > where the canonical fields do not correspond to the content of the UUID.\n *\n * The first three fields of a GUID are encoded in little-endian byte order, while the last three fields are in network\n * (big-endian) byte order. This is according to the history of the Microsoft GUID definition.\n *\n * According to the .NET Guid.ToByteArray method documentation:\n *\n * > Note that the order of bytes in the returned byte array is different from the string representation of a Guid value.\n * > The order of the beginning four-byte group and the next two two-byte groups is reversed, whereas the order of the\n * > last two-byte group and the closing six-byte group is the same.\n *\n * @link https://en.wikipedia.org/wiki/Universally_unique_identifier#Variants UUID Variants on Wikipedia\n * @link https://docs.microsoft.com/en-us/windows/win32/api/guiddef/ns-guiddef-guid Windows GUID structure\n * @link https://docs.microsoft.com/en-us/dotnet/api/system.guid .NET Guid Struct\n * @link https://docs.microsoft.com/en-us/dotnet/api/system.guid.tobytearray .NET Guid.ToByteArray Method\n *\n * @immutable\n */\nfinal class Guid extends Uuid\n{\n    public function __construct(\n        Fields $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Guid/GuidBuilder.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Guid;\n\nuse Ramsey\\Uuid\\Builder\\UuidBuilderInterface;\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\UnableToBuildUuidException;\nuse Ramsey\\Uuid\\UuidInterface;\nuse Throwable;\n\n/**\n * GuidBuilder builds instances of Guid\n *\n * @see Guid\n *\n * @immutable\n */\nclass GuidBuilder implements UuidBuilderInterface\n{\n    /**\n     * @param NumberConverterInterface $numberConverter The number converter to use when constructing the Guid\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to Unix timestamps\n     */\n    public function __construct(\n        private NumberConverterInterface $numberConverter,\n        private TimeConverterInterface $timeConverter,\n    ) {\n    }\n\n    /**\n     * Builds and returns a Guid\n     *\n     * @param CodecInterface $codec The codec to use for building this Guid instance\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return Guid The GuidBuilder returns an instance of Ramsey\\Uuid\\Guid\\Guid\n     *\n     * @pure\n     */\n    public function build(CodecInterface $codec, string $bytes): UuidInterface\n    {\n        try {\n            /** @phpstan-ignore possiblyImpure.new */\n            return new Guid($this->buildFields($bytes), $this->numberConverter, $codec, $this->timeConverter);\n        } catch (Throwable $e) {\n            /** @phpstan-ignore possiblyImpure.methodCall, possiblyImpure.methodCall */\n            throw new UnableToBuildUuidException($e->getMessage(), (int) $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * Proxy method to allow injecting a mock for testing\n     *\n     * @pure\n     */\n    protected function buildFields(string $bytes): Fields\n    {\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Fields($bytes);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Lazy;\n\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Exception\\UnsupportedOperationException;\nuse Ramsey\\Uuid\\Fields\\FieldsInterface;\nuse Ramsey\\Uuid\\Rfc4122\\UuidV1;\nuse Ramsey\\Uuid\\Rfc4122\\UuidV6;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\UuidFactory;\nuse Ramsey\\Uuid\\UuidInterface;\nuse ValueError;\n\nuse function assert;\nuse function bin2hex;\nuse function hex2bin;\nuse function sprintf;\nuse function str_replace;\nuse function substr;\n\n/**\n * Lazy version of a UUID: its format has not been determined yet, so it is mostly only usable for string/bytes\n * conversion. This object optimizes instantiation, serialization and string conversion time, at the cost of increased\n * overhead for more advanced UUID operations.\n *\n * > [!NOTE]\n * > The {@see FieldsInterface} does not declare methods that deprecated API relies upon: the API has been ported from\n * > the {@see \\Ramsey\\Uuid\\Uuid} definition, and is deprecated anyway.\n *\n * > [!NOTE]\n * > The deprecated API from {@see \\Ramsey\\Uuid\\Uuid} is in use here (on purpose): it will be removed once the\n * > deprecated API is gone from this class too.\n *\n * @internal this type is used internally for performance reasons and is not supposed to be directly referenced in consumer libraries.\n */\nfinal class LazyUuidFromString implements UuidInterface\n{\n    public const VALID_REGEX = '/\\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\z/ms';\n\n    private ?UuidInterface $unwrapped = null;\n\n    /**\n     * @param non-empty-string $uuid\n     */\n    public function __construct(private string $uuid)\n    {\n    }\n\n    public static function fromBytes(string $bytes): self\n    {\n        $base16Uuid = bin2hex($bytes);\n\n        return new self(\n            substr($base16Uuid, 0, 8)\n            . '-'\n            . substr($base16Uuid, 8, 4)\n            . '-'\n            . substr($base16Uuid, 12, 4)\n            . '-'\n            . substr($base16Uuid, 16, 4)\n            . '-'\n            . substr($base16Uuid, 20, 12)\n        );\n    }\n\n    public function serialize(): string\n    {\n        return $this->uuid;\n    }\n\n    /**\n     * @return array{string: non-empty-string}\n     */\n    public function __serialize(): array\n    {\n        return ['string' => $this->uuid];\n    }\n\n    /**\n     * {@inheritDoc}\n     *\n     * @param non-empty-string $data\n     */\n    public function unserialize(string $data): void\n    {\n        $this->uuid = $data;\n    }\n\n    /**\n     * @param array{string?: non-empty-string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['string'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->unserialize($data['string']);\n    }\n\n    public function getNumberConverter(): NumberConverterInterface\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getNumberConverter();\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function getFieldsHex(): array\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getFieldsHex();\n    }\n\n    public function getClockSeqHiAndReservedHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getClockSeqHiAndReservedHex();\n    }\n\n    public function getClockSeqLowHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getClockSeqLowHex();\n    }\n\n    public function getClockSequenceHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getClockSequenceHex();\n    }\n\n    public function getDateTime(): DateTimeInterface\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getDateTime();\n    }\n\n    public function getLeastSignificantBitsHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getLeastSignificantBitsHex();\n    }\n\n    public function getMostSignificantBitsHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getMostSignificantBitsHex();\n    }\n\n    public function getNodeHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getNodeHex();\n    }\n\n    public function getTimeHiAndVersionHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getTimeHiAndVersionHex();\n    }\n\n    public function getTimeLowHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getTimeLowHex();\n    }\n\n    public function getTimeMidHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getTimeMidHex();\n    }\n\n    public function getTimestampHex(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getTimestampHex();\n    }\n\n    public function getUrn(): string\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getUrn();\n    }\n\n    public function getVariant(): ?int\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getVariant();\n    }\n\n    public function getVersion(): ?int\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getVersion();\n    }\n\n    public function compareTo(UuidInterface $other): int\n    {\n        return ($this->unwrapped ?? $this->unwrap())->compareTo($other);\n    }\n\n    public function equals(?object $other): bool\n    {\n        if (!$other instanceof UuidInterface) {\n            return false;\n        }\n\n        return $this->uuid === $other->toString();\n    }\n\n    public function getBytes(): string\n    {\n        /**\n         * @var non-empty-string\n         * @phpstan-ignore possiblyImpure.functionCall, possiblyImpure.functionCall\n         */\n        return (string) hex2bin(str_replace('-', '', $this->uuid));\n    }\n\n    public function getFields(): FieldsInterface\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getFields();\n    }\n\n    public function getHex(): Hexadecimal\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getHex();\n    }\n\n    public function getInteger(): IntegerObject\n    {\n        return ($this->unwrapped ?? $this->unwrap())->getInteger();\n    }\n\n    public function toString(): string\n    {\n        return $this->uuid;\n    }\n\n    public function __toString(): string\n    {\n        return $this->uuid;\n    }\n\n    public function jsonSerialize(): string\n    {\n        return $this->uuid;\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getClockSeqHiAndReserved()}\n     *     and use the arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getClockSeqHiAndReserved(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getClockSeqHiAndReserved()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getClockSeqLow()} and use\n     *     the arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getClockSeqLow(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getClockSeqLow()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getClockSeq()} and use the\n     *     arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getClockSequence(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getClockSeq()->toString());\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getLeastSignificantBits(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        return $instance->getNumberConverter()->fromHex(substr($instance->getHex()->toString(), 16));\n    }\n\n    /**\n     * @deprecated This method will be removed in 5.0.0. There is no direct alternative, but the same information may be\n     *     obtained by splitting in half the value returned by {@see UuidInterface::getHex()}.\n     */\n    public function getMostSignificantBits(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        return $instance->getNumberConverter()->fromHex(substr($instance->getHex()->toString(), 0, 16));\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getNode()} and use the\n     *     arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getNode(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getNode()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getTimeHiAndVersion()} and\n     *     use the arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getTimeHiAndVersion(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getTimeHiAndVersion()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getTimeLow()} and use the\n     *     arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getTimeLow(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getTimeLow()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getTimeMid()} and use the\n     *     arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getTimeMid(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        return $instance->getNumberConverter()->fromHex($fields->getTimeMid()->toString());\n    }\n\n    /**\n     * @deprecated Use {@see UuidInterface::getFields()} to get a {@see FieldsInterface} instance. If it is a\n     *     {@see Rfc4122FieldsInterface} instance, you may call {@see Rfc4122FieldsInterface::getTimestamp()} and use\n     *     the arbitrary-precision math library of your choice to convert it to a string integer.\n     */\n    public function getTimestamp(): string\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        $fields = $instance->getFields();\n        assert($fields instanceof \\Ramsey\\Uuid\\Rfc4122\\FieldsInterface);\n\n        if ($fields->getVersion() !== 1) {\n            throw new UnsupportedOperationException('Not a time-based UUID');\n        }\n\n        return $instance->getNumberConverter()->fromHex($fields->getTimestamp()->toString());\n    }\n\n    public function toUuidV1(): UuidV1\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        if ($instance instanceof UuidV1) {\n            return $instance;\n        }\n\n        assert($instance instanceof UuidV6);\n\n        return $instance->toUuidV1();\n    }\n\n    public function toUuidV6(): UuidV6\n    {\n        $instance = ($this->unwrapped ?? $this->unwrap());\n\n        assert($instance instanceof UuidV6);\n\n        return $instance;\n    }\n\n    private function unwrap(): UuidInterface\n    {\n        return $this->unwrapped = (new UuidFactory())->fromString($this->uuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Math;\n\nuse Brick\\Math\\BigDecimal;\nuse Brick\\Math\\BigInteger;\nuse Brick\\Math\\Exception\\MathException;\nuse Brick\\Math\\RoundingMode as BrickMathRounding;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Type\\Decimal;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\NumberInterface;\n\n/**\n * A calculator using the brick/math library for arbitrary-precision arithmetic\n *\n * @immutable\n */\nfinal class BrickMathCalculator implements CalculatorInterface\n{\n    private const ROUNDING_MODE_MAP = [\n        RoundingMode::UNNECESSARY => BrickMathRounding::UNNECESSARY,\n        RoundingMode::UP => BrickMathRounding::UP,\n        RoundingMode::DOWN => BrickMathRounding::DOWN,\n        RoundingMode::CEILING => BrickMathRounding::CEILING,\n        RoundingMode::FLOOR => BrickMathRounding::FLOOR,\n        RoundingMode::HALF_UP => BrickMathRounding::HALF_UP,\n        RoundingMode::HALF_DOWN => BrickMathRounding::HALF_DOWN,\n        RoundingMode::HALF_CEILING => BrickMathRounding::HALF_CEILING,\n        RoundingMode::HALF_FLOOR => BrickMathRounding::HALF_FLOOR,\n        RoundingMode::HALF_EVEN => BrickMathRounding::HALF_EVEN,\n    ];\n\n    public function add(NumberInterface $augend, NumberInterface ...$addends): NumberInterface\n    {\n        $sum = BigInteger::of($augend->toString());\n\n        foreach ($addends as $addend) {\n            $sum = $sum->plus($addend->toString());\n        }\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new IntegerObject((string) $sum);\n    }\n\n    public function subtract(NumberInterface $minuend, NumberInterface ...$subtrahends): NumberInterface\n    {\n        $difference = BigInteger::of($minuend->toString());\n\n        foreach ($subtrahends as $subtrahend) {\n            $difference = $difference->minus($subtrahend->toString());\n        }\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new IntegerObject((string) $difference);\n    }\n\n    public function multiply(NumberInterface $multiplicand, NumberInterface ...$multipliers): NumberInterface\n    {\n        $product = BigInteger::of($multiplicand->toString());\n\n        foreach ($multipliers as $multiplier) {\n            $product = $product->multipliedBy($multiplier->toString());\n        }\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new IntegerObject((string) $product);\n    }\n\n    public function divide(\n        int $roundingMode,\n        int $scale,\n        NumberInterface $dividend,\n        NumberInterface ...$divisors,\n    ): NumberInterface {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $brickRounding = $this->getBrickRoundingMode($roundingMode);\n\n        $quotient = BigDecimal::of($dividend->toString());\n\n        foreach ($divisors as $divisor) {\n            $quotient = $quotient->dividedBy($divisor->toString(), $scale, $brickRounding);\n        }\n\n        if ($scale === 0) {\n            /** @phpstan-ignore possiblyImpure.new */\n            return new IntegerObject((string) $quotient->toBigInteger());\n        }\n\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Decimal((string) $quotient);\n    }\n\n    public function fromBase(string $value, int $base): IntegerObject\n    {\n        try {\n            /** @phpstan-ignore possiblyImpure.new */\n            return new IntegerObject((string) BigInteger::fromBase($value, $base));\n        } catch (MathException | \\InvalidArgumentException $exception) {\n            throw new InvalidArgumentException(\n                $exception->getMessage(),\n                (int) $exception->getCode(),\n                $exception\n            );\n        }\n    }\n\n    public function toBase(IntegerObject $value, int $base): string\n    {\n        try {\n            return BigInteger::of($value->toString())->toBase($base);\n        } catch (MathException | \\InvalidArgumentException $exception) {\n            throw new InvalidArgumentException(\n                $exception->getMessage(),\n                (int) $exception->getCode(),\n                $exception\n            );\n        }\n    }\n\n    public function toHexadecimal(IntegerObject $value): Hexadecimal\n    {\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Hexadecimal($this->toBase($value, 16));\n    }\n\n    public function toInteger(Hexadecimal $value): IntegerObject\n    {\n        return $this->fromBase($value->toString(), 16);\n    }\n\n    /**\n     * Maps ramsey/uuid rounding modes to those used by brick/math\n     *\n     * @return BrickMathRounding::*\n     */\n    private function getBrickRoundingMode(int $roundingMode)\n    {\n        return self::ROUNDING_MODE_MAP[$roundingMode] ?? BrickMathRounding::UNNECESSARY;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Math/CalculatorInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Math;\n\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\NumberInterface;\n\n/**\n * A calculator performs arithmetic operations on numbers\n *\n * @immutable\n */\ninterface CalculatorInterface\n{\n    /**\n     * Returns the sum of all the provided parameters\n     *\n     * @param NumberInterface $augend The first addend (the integer being added to)\n     * @param NumberInterface ...$addends The additional integers to a add to the augend\n     *\n     * @return NumberInterface The sum of all the parameters\n     *\n     * @pure\n     */\n    public function add(NumberInterface $augend, NumberInterface ...$addends): NumberInterface;\n\n    /**\n     * Returns the difference of all the provided parameters\n     *\n     * @param NumberInterface $minuend The integer being subtracted from\n     * @param NumberInterface ...$subtrahends The integers to subtract from the minuend\n     *\n     * @return NumberInterface The difference after subtracting all parameters\n     *\n     * @pure\n     */\n    public function subtract(NumberInterface $minuend, NumberInterface ...$subtrahends): NumberInterface;\n\n    /**\n     * Returns the product of all the provided parameters\n     *\n     * @param NumberInterface $multiplicand The integer to be multiplied\n     * @param NumberInterface ...$multipliers The factors by which to multiply the multiplicand\n     *\n     * @return NumberInterface The product of multiplying all the provided parameters\n     *\n     * @pure\n     */\n    public function multiply(NumberInterface $multiplicand, NumberInterface ...$multipliers): NumberInterface;\n\n    /**\n     * Returns the quotient of the provided parameters divided left-to-right\n     *\n     * @param int $roundingMode The RoundingMode constant to use for this operation\n     * @param int $scale The scale to use for this operation\n     * @param NumberInterface $dividend The integer to be divided\n     * @param NumberInterface ...$divisors The integers to divide $dividend by, in the order in which the division\n     *     operations should take place (left-to-right)\n     *\n     * @return NumberInterface The quotient of dividing the provided parameters left-to-right\n     *\n     * @pure\n     */\n    public function divide(\n        int $roundingMode,\n        int $scale,\n        NumberInterface $dividend,\n        NumberInterface ...$divisors,\n    ): NumberInterface;\n\n    /**\n     * Converts a value from an arbitrary base to a base-10 integer value\n     *\n     * @param string $value The value to convert\n     * @param int $base The base to convert from (i.e., 2, 16, 32, etc.)\n     *\n     * @return IntegerObject The base-10 integer value of the converted value\n     *\n     * @pure\n     */\n    public function fromBase(string $value, int $base): IntegerObject;\n\n    /**\n     * Converts a base-10 integer value to an arbitrary base\n     *\n     * @param IntegerObject $value The integer value to convert\n     * @param int $base The base to convert to (i.e., 2, 16, 32, etc.)\n     *\n     * @return string The value represented in the specified base\n     *\n     * @pure\n     */\n    public function toBase(IntegerObject $value, int $base): string;\n\n    /**\n     * Converts an Integer instance to a Hexadecimal instance\n     *\n     * @pure\n     */\n    public function toHexadecimal(IntegerObject $value): Hexadecimal;\n\n    /**\n     * Converts a Hexadecimal instance to an Integer instance\n     *\n     * @pure\n     */\n    public function toInteger(Hexadecimal $value): IntegerObject;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Math/RoundingMode.php",
    "content": "<?php\n\n/**\n * This file was originally part of brick/math\n *\n * Copyright (c) 2013-present Benjamin Morel\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * @link https://github.com/brick/math brick/math at GitHub\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Math;\n\n/**\n * Specifies a rounding behavior for numerical operations capable of discarding precision.\n *\n * Each rounding mode indicates how the least significant returned digit of a rounded result is to be calculated. If\n * fewer digits are returned than the digits needed to represent the exact numerical result, the discarded digits will\n * be referred to as the discarded fraction regardless of the digits' contribution to the value of the number. In other\n * words, considered as a numerical value, the discarded fraction could have an absolute value greater than one.\n */\nfinal class RoundingMode\n{\n    /**\n     * Asserts that the requested operation has an exact result; hence no rounding is necessary.\n     */\n    public const UNNECESSARY = 0;\n\n    /**\n     * Rounds away from zero.\n     *\n     * Always increments the digit prior to a nonzero discarded fraction. Note that this rounding mode never decreases\n     * the magnitude of the calculated value.\n     */\n    public const UP = 1;\n\n    /**\n     * Rounds towards zero.\n     *\n     * Never increments the digit prior to a discarded fraction (i.e., truncates). Note that this rounding mode never\n     * increases the magnitude of the calculated value.\n     */\n    public const DOWN = 2;\n\n    /**\n     * Rounds towards positive infinity.\n     *\n     * If the result is positive, behaves as for UP; if negative, behaves as for DOWN. Note that this rounding mode\n     * never decreases the calculated value.\n     */\n    public const CEILING = 3;\n\n    /**\n     * Rounds towards negative infinity.\n     *\n     * If the result is positive, behave as for DOWN; if negative, behave as for UP. Note that this rounding mode never\n     * increases the calculated value.\n     */\n    public const FLOOR = 4;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round up.\n     *\n     * Behaves as for UP if the discarded fraction is >= 0.5; otherwise, behaves as for DOWN. Note that this is the\n     * rounding mode commonly taught at school.\n     */\n    public const HALF_UP = 5;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round down.\n     *\n     * Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves as for DOWN.\n     */\n    public const HALF_DOWN = 6;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round towards positive infinity.\n     *\n     * If the result is positive, behaves as for HALF_UP; if negative, behaves as for HALF_DOWN.\n     */\n    public const HALF_CEILING = 7;\n\n    /**\n     * Rounds towards \"nearest neighbor\" unless both neighbors are equidistant, in which case round towards negative infinity.\n     *\n     * If the result is positive, behaves as for HALF_DOWN; if negative, behaves as for HALF_UP.\n     */\n    public const HALF_FLOOR = 8;\n\n    /**\n     * Rounds towards the \"nearest neighbor\" unless both neighbors are equidistant, in which case rounds towards the even neighbor.\n     *\n     * Behaves as for HALF_UP if the digit to the left of the discarded fraction is odd; behaves as for HALF_DOWN if it's even.\n     *\n     * Note that this is the rounding mode that statistically minimizes cumulative error when applied repeatedly over a\n     * sequence of calculations. It is sometimes known as \"Banker's rounding\", and is chiefly used in the USA.\n     */\n    public const HALF_EVEN = 9;\n\n    /**\n     * Private constructor. This class is not instantiable.\n     *\n     * @codeCoverageIgnore\n     */\n    private function __construct()\n    {\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Nonstandard/Fields.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Nonstandard;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Fields\\SerializableFieldsTrait;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface;\nuse Ramsey\\Uuid\\Rfc4122\\VariantTrait;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\nuse function bin2hex;\nuse function dechex;\nuse function hexdec;\nuse function sprintf;\nuse function str_pad;\nuse function strlen;\nuse function substr;\n\nuse const STR_PAD_LEFT;\n\n/**\n * Nonstandard UUID fields do not conform to the RFC 9562 (formerly RFC 4122) standard\n *\n * Since some systems may create nonstandard UUIDs, this implements the {@see FieldsInterface}, so that functionality of\n * a nonstandard UUID is not degraded, in the event these UUIDs are expected to contain RFC 9562 (formerly RFC 4122) fields.\n *\n * Internally, this class represents the fields together as a 16-byte binary string.\n *\n * @immutable\n */\nfinal class Fields implements FieldsInterface\n{\n    use SerializableFieldsTrait;\n    use VariantTrait;\n\n    /**\n     * @param string $bytes A 16-byte binary string representation of a UUID\n     *\n     * @throws InvalidArgumentException if the byte string is not exactly 16 bytes\n     */\n    public function __construct(private string $bytes)\n    {\n        if (strlen($this->bytes) !== 16) {\n            throw new InvalidArgumentException(\n                'The byte string must be 16 bytes long; received ' . strlen($this->bytes) . ' bytes',\n            );\n        }\n    }\n\n    public function getBytes(): string\n    {\n        return $this->bytes;\n    }\n\n    public function getClockSeq(): Hexadecimal\n    {\n        $clockSeq = hexdec(bin2hex(substr($this->bytes, 8, 2))) & 0x3fff;\n\n        return new Hexadecimal(str_pad(dechex($clockSeq), 4, '0', STR_PAD_LEFT));\n    }\n\n    public function getClockSeqHiAndReserved(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 8, 1)));\n    }\n\n    public function getClockSeqLow(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 9, 1)));\n    }\n\n    public function getNode(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 10)));\n    }\n\n    public function getTimeHiAndVersion(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 6, 2)));\n    }\n\n    public function getTimeLow(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 0, 4)));\n    }\n\n    public function getTimeMid(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 4, 2)));\n    }\n\n    public function getTimestamp(): Hexadecimal\n    {\n        return new Hexadecimal(sprintf(\n            '%03x%04s%08s',\n            hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff,\n            $this->getTimeMid()->toString(),\n            $this->getTimeLow()->toString()\n        ));\n    }\n\n    public function getVersion(): ?int\n    {\n        return null;\n    }\n\n    public function isNil(): bool\n    {\n        return false;\n    }\n\n    public function isMax(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Nonstandard/Uuid.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Nonstandard;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Uuid as BaseUuid;\n\n/**\n * Nonstandard\\Uuid is a UUID that doesn't conform to RFC 9562 (formerly RFC 4122)\n *\n * @immutable\n * @pure\n */\nfinal class Uuid extends BaseUuid\n{\n    public function __construct(\n        Fields $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Nonstandard;\n\nuse Ramsey\\Uuid\\Builder\\UuidBuilderInterface;\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\UnableToBuildUuidException;\nuse Ramsey\\Uuid\\UuidInterface;\nuse Throwable;\n\n/**\n * Nonstandard\\UuidBuilder builds instances of Nonstandard\\Uuid\n *\n * @immutable\n */\nclass UuidBuilder implements UuidBuilderInterface\n{\n    /**\n     * @param NumberConverterInterface $numberConverter The number converter to use when constructing the Nonstandard\\Uuid\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to Unix timestamps\n     */\n    public function __construct(\n        private NumberConverterInterface $numberConverter,\n        private TimeConverterInterface $timeConverter,\n    ) {\n    }\n\n    /**\n     * Builds and returns a Nonstandard\\Uuid\n     *\n     * @param CodecInterface $codec The codec to use for building this instance\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return Uuid The Nonstandard\\UuidBuilder returns an instance of Nonstandard\\Uuid\n     *\n     * @pure\n     */\n    public function build(CodecInterface $codec, string $bytes): UuidInterface\n    {\n        try {\n            /** @phpstan-ignore possiblyImpure.new */\n            return new Uuid($this->buildFields($bytes), $this->numberConverter, $codec, $this->timeConverter);\n        } catch (Throwable $e) {\n            /** @phpstan-ignore possiblyImpure.methodCall, possiblyImpure.methodCall */\n            throw new UnableToBuildUuidException($e->getMessage(), (int) $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * Proxy method to allow injecting a mock for testing\n     *\n     * @pure\n     */\n    protected function buildFields(string $bytes): Fields\n    {\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Fields($bytes);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Nonstandard;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Lazy\\LazyUuidFromString;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Rfc4122\\TimeTrait;\nuse Ramsey\\Uuid\\Rfc4122\\UuidInterface;\nuse Ramsey\\Uuid\\Rfc4122\\UuidV1;\nuse Ramsey\\Uuid\\Uuid as BaseUuid;\n\n/**\n * Reordered time, or version 6, UUIDs include timestamp, clock sequence, and node values that are combined into a\n * 128-bit unsigned integer\n *\n * @deprecated Use {@see \\Ramsey\\Uuid\\Rfc4122\\UuidV6} instead.\n *\n * @link https://github.com/uuid6/uuid6-ietf-draft UUID version 6 IETF draft\n * @link http://gh.peabody.io/uuidv6/ \"Version 6\" UUIDs\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.6 RFC 9562, 5.6. UUID Version 6\n *\n * @immutable\n */\nclass UuidV6 extends BaseUuid implements UuidInterface\n{\n    use TimeTrait;\n\n    /**\n     * Creates a version 6 (reordered Gregorian time) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== BaseUuid::UUID_TYPE_REORDERED_TIME) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV6 must represent a version 6 (reordered time) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n\n    /**\n     * Converts this UUID into an instance of a version 1 UUID\n     */\n    public function toUuidV1(): UuidV1\n    {\n        $hex = $this->getHex()->toString();\n        $hex = substr($hex, 7, 5)\n            . substr($hex, 13, 3)\n            . substr($hex, 3, 4)\n            . '1' . substr($hex, 0, 3)\n            . substr($hex, 16);\n\n        /** @var LazyUuidFromString $uuid */\n        $uuid = BaseUuid::fromBytes((string) hex2bin($hex));\n\n        return $uuid->toUuidV1();\n    }\n\n    /**\n     * Converts a version 1 UUID into an instance of a version 6 UUID\n     */\n    public static function fromUuidV1(UuidV1 $uuidV1): \\Ramsey\\Uuid\\Rfc4122\\UuidV6\n    {\n        $hex = $uuidV1->getHex()->toString();\n        $hex = substr($hex, 13, 3)\n            . substr($hex, 8, 4)\n            . substr($hex, 0, 5)\n            . '6' . substr($hex, 5, 3)\n            . substr($hex, 16);\n\n        /** @var LazyUuidFromString $uuid */\n        $uuid = BaseUuid::fromBytes((string) hex2bin($hex));\n\n        return $uuid->toUuidV6();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Dce;\n\nuse Ramsey\\Uuid\\Exception\\DceSecurityException;\nuse Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\n\nuse function escapeshellarg;\nuse function preg_split;\nuse function str_getcsv;\nuse function strrpos;\nuse function strtolower;\nuse function strtoupper;\nuse function substr;\nuse function trim;\n\nuse const PREG_SPLIT_NO_EMPTY;\n\n/**\n * SystemDceSecurityProvider retrieves the user or group identifiers from the system\n */\nclass SystemDceSecurityProvider implements DceSecurityProviderInterface\n{\n    /**\n     * @throws DceSecurityException if unable to get a user identifier\n     *\n     * @inheritDoc\n     */\n    public function getUid(): IntegerObject\n    {\n        /** @var IntegerObject | int | float | string | null $uid */\n        static $uid = null;\n\n        if ($uid instanceof IntegerObject) {\n            return $uid;\n        }\n\n        if ($uid === null) {\n            $uid = $this->getSystemUid();\n        }\n\n        if ($uid === '') {\n            throw new DceSecurityException(\n                'Unable to get a user identifier using the system DCE Security provider; please provide a custom '\n                . 'identifier or use a different provider',\n            );\n        }\n\n        $uid = new IntegerObject($uid);\n\n        return $uid;\n    }\n\n    /**\n     * @throws DceSecurityException if unable to get a group identifier\n     *\n     * @inheritDoc\n     */\n    public function getGid(): IntegerObject\n    {\n        /** @var IntegerObject | int | float | string | null $gid */\n        static $gid = null;\n\n        if ($gid instanceof IntegerObject) {\n            return $gid;\n        }\n\n        if ($gid === null) {\n            $gid = $this->getSystemGid();\n        }\n\n        if ($gid === '') {\n            throw new DceSecurityException(\n                'Unable to get a group identifier using the system DCE Security provider; please provide a custom '\n                . 'identifier or use a different provider',\n            );\n        }\n\n        $gid = new IntegerObject($gid);\n\n        return $gid;\n    }\n\n    /**\n     * Returns the UID from the system\n     */\n    private function getSystemUid(): string\n    {\n        if (!$this->hasShellExec()) {\n            return '';\n        }\n\n        return match ($this->getOs()) {\n            'WIN' => $this->getWindowsUid(),\n            default => trim((string) shell_exec('id -u')),\n        };\n    }\n\n    /**\n     * Returns the GID from the system\n     */\n    private function getSystemGid(): string\n    {\n        if (!$this->hasShellExec()) {\n            return '';\n        }\n\n        return match ($this->getOs()) {\n            'WIN' => $this->getWindowsGid(),\n            default => trim((string) shell_exec('id -g')),\n        };\n    }\n\n    /**\n     * Returns true if shell_exec() is available for use\n     */\n    private function hasShellExec(): bool\n    {\n        return !str_contains(strtolower((string) ini_get('disable_functions')), 'shell_exec');\n    }\n\n    /**\n     * Returns the PHP_OS string\n     */\n    private function getOs(): string\n    {\n        /** @var string $phpOs */\n        $phpOs = constant('PHP_OS');\n\n        return strtoupper(substr($phpOs, 0, 3));\n    }\n\n    /**\n     * Returns the user identifier for a user on a Windows system\n     *\n     * Windows does not have the same concept as an effective POSIX UID for the running script. Instead, each user is\n     * uniquely identified by an SID (security identifier). The SID includes three 32-bit unsigned integers that make up\n     * a unique domain identifier, followed by an RID (relative identifier) that we will use as the UID. The primary\n     * caveat is that this UID may not be unique to the system, since it is, instead, unique to the domain.\n     *\n     * @link https://www.lifewire.com/what-is-an-sid-number-2626005 What Is an SID Number?\n     * @link https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/81d92bba-d22b-4a8c-908a-554ab29148ab Well-known SID Structures\n     * @link https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers#well-known-sids Well-known SIDs\n     * @link https://www.windows-commandline.com/get-sid-of-user/ Get SID of user\n     */\n    private function getWindowsUid(): string\n    {\n        $response = shell_exec('whoami /user /fo csv /nh');\n\n        if ($response === null) {\n            return '';\n        }\n\n        $sid = str_getcsv(trim((string) $response), escape: '\\\\')[1] ?? '';\n\n        if (($lastHyphen = strrpos($sid, '-')) === false) {\n            return '';\n        }\n\n        return trim(substr($sid, $lastHyphen + 1));\n    }\n\n    /**\n     * Returns a group identifier for a user on a Windows system\n     *\n     * Since Windows does not have the same concept as an effective POSIX GID for the running script, we will get the\n     * local group memberships for the user running the script. Then, we will get the SID (security identifier) for the\n     * first group that appears in that list. Finally, we will return the RID (relative identifier) for the group and\n     * use that as the GID.\n     *\n     * @link https://www.windows-commandline.com/list-of-user-groups-command-line/ List of user groups command line\n     */\n    private function getWindowsGid(): string\n    {\n        $response = shell_exec('net user %username% | findstr /b /i \"Local Group Memberships\"');\n\n        if ($response === null) {\n            return '';\n        }\n\n        $userGroups = preg_split('/\\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY);\n        $firstGroup = trim($userGroups[1] ?? '', \"* \\t\\n\\r\\0\\x0B\");\n\n        if ($firstGroup === '') {\n            return '';\n        }\n\n        $response = shell_exec('wmic group get name,sid | findstr /b /i ' . escapeshellarg($firstGroup));\n\n        if ($response === null) {\n            return '';\n        }\n\n        $userGroup = preg_split('/\\s{2,}/', (string) $response, -1, PREG_SPLIT_NO_EMPTY);\n        $sid = $userGroup[1] ?? '';\n\n        if (($lastHyphen = strrpos($sid, '-')) === false) {\n            return '';\n        }\n\n        return trim(substr($sid, $lastHyphen + 1));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider;\n\nuse Ramsey\\Uuid\\Rfc4122\\UuidV2;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\n\n/**\n * A DCE provider provides access to local domain identifiers for version 2, DCE Security, UUIDs\n *\n * @see UuidV2\n */\ninterface DceSecurityProviderInterface\n{\n    /**\n     * Returns a user identifier for the system\n     *\n     * @link https://en.wikipedia.org/wiki/User_identifier User identifier\n     */\n    public function getUid(): IntegerObject;\n\n    /**\n     * Returns a group identifier for the system\n     *\n     * @link https://en.wikipedia.org/wiki/Group_identifier Group identifier\n     */\n    public function getGid(): IntegerObject;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Node;\n\nuse Ramsey\\Uuid\\Exception\\NodeException;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\n/**\n * FallbackNodeProvider retrieves the system node ID by stepping through a list of providers until a node ID can be obtained\n */\nclass FallbackNodeProvider implements NodeProviderInterface\n{\n    /**\n     * @param iterable<NodeProviderInterface> $providers Array of node providers\n     */\n    public function __construct(private iterable $providers)\n    {\n    }\n\n    public function getNode(): Hexadecimal\n    {\n        $lastProviderException = null;\n\n        foreach ($this->providers as $provider) {\n            try {\n                return $provider->getNode();\n            } catch (NodeException $exception) {\n                $lastProviderException = $exception;\n\n                continue;\n            }\n        }\n\n        throw new NodeException(message: 'Unable to find a suitable node provider', previous: $lastProviderException);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Node;\n\nuse Ramsey\\Collection\\AbstractCollection;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\n/**\n * A collection of NodeProviderInterface objects\n *\n * @deprecated this class has been deprecated and will be removed in 5.0.0. The use-case for this class comes from a\n *     pre-`phpstan/phpstan` and pre-`vimeo/psalm` ecosystem, in which type safety had to be mostly enforced at runtime:\n *     that is no longer necessary, now that you can safely verify your code to be correct and use more generic types\n *     like `iterable<T>` instead.\n *\n * @extends AbstractCollection<NodeProviderInterface>\n */\nclass NodeProviderCollection extends AbstractCollection\n{\n    public function getType(): string\n    {\n        return NodeProviderInterface::class;\n    }\n\n    /**\n     * Re-constructs the object from its serialized form\n     *\n     * @param string $serialized The serialized PHP string to unserialize into a UuidInterface instance\n     */\n    public function unserialize($serialized): void\n    {\n        /** @var array<array-key, NodeProviderInterface> $data */\n        $data = unserialize($serialized, [\n            'allowed_classes' => [\n                Hexadecimal::class,\n                RandomNodeProvider::class,\n                StaticNodeProvider::class,\n                SystemNodeProvider::class,\n            ],\n        ]);\n\n        /** @phpstan-ignore-next-line */\n        $this->data = array_filter($data, fn ($unserialized): bool => $unserialized instanceof NodeProviderInterface);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Node;\n\nuse Ramsey\\Uuid\\Exception\\RandomSourceException;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Throwable;\n\nuse function bin2hex;\nuse function dechex;\nuse function hex2bin;\nuse function hexdec;\nuse function str_pad;\nuse function substr;\n\nuse const STR_PAD_LEFT;\n\n/**\n * RandomNodeProvider generates a random node ID\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-6.10 RFC 9562, 6.10. UUIDs That Do Not Identify the Host\n */\nclass RandomNodeProvider implements NodeProviderInterface\n{\n    public function getNode(): Hexadecimal\n    {\n        try {\n            $nodeBytes = random_bytes(6);\n        } catch (Throwable $exception) {\n            throw new RandomSourceException($exception->getMessage(), (int) $exception->getCode(), $exception);\n        }\n\n        // Split the node bytes for math on 32-bit systems.\n        $nodeMsb = substr($nodeBytes, 0, 3);\n        $nodeLsb = substr($nodeBytes, 3);\n\n        // Set the multicast bit; see RFC 9562, section 6.10.\n        $nodeMsb = hex2bin(str_pad(dechex(hexdec(bin2hex($nodeMsb)) | 0x010000), 6, '0', STR_PAD_LEFT));\n\n        return new Hexadecimal(str_pad(bin2hex($nodeMsb . $nodeLsb), 12, '0', STR_PAD_LEFT));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Node;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\nuse function dechex;\nuse function hexdec;\nuse function str_pad;\nuse function substr;\n\nuse const STR_PAD_LEFT;\n\n/**\n * StaticNodeProvider provides a static node value with the multicast bit set\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-6.10 RFC 9562, 6.10. UUIDs That Do Not Identify the Host\n */\nclass StaticNodeProvider implements NodeProviderInterface\n{\n    private Hexadecimal $node;\n\n    /**\n     * @param Hexadecimal $node The static node value to use\n     */\n    public function __construct(Hexadecimal $node)\n    {\n        if (strlen($node->toString()) > 12) {\n            throw new InvalidArgumentException('Static node value cannot be greater than 12 hexadecimal characters');\n        }\n\n        $this->node = $this->setMulticastBit($node);\n    }\n\n    public function getNode(): Hexadecimal\n    {\n        return $this->node;\n    }\n\n    /**\n     * Set the multicast bit for the static node value\n     */\n    private function setMulticastBit(Hexadecimal $node): Hexadecimal\n    {\n        $nodeHex = str_pad($node->toString(), 12, '0', STR_PAD_LEFT);\n        $firstOctet = substr($nodeHex, 0, 2);\n        $firstOctet = str_pad(dechex(hexdec($firstOctet) | 0x01), 2, '0', STR_PAD_LEFT);\n\n        return new Hexadecimal($firstOctet . substr($nodeHex, 2));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Node;\n\nuse Ramsey\\Uuid\\Exception\\NodeException;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\nuse function array_filter;\nuse function array_map;\nuse function array_walk;\nuse function count;\nuse function ob_get_clean;\nuse function ob_start;\nuse function preg_match;\nuse function preg_match_all;\nuse function reset;\nuse function str_contains;\nuse function str_replace;\nuse function strtolower;\nuse function strtoupper;\nuse function substr;\n\nuse const GLOB_NOSORT;\nuse const PREG_PATTERN_ORDER;\n\n/**\n * SystemNodeProvider retrieves the system node ID, if possible\n *\n * The system node ID, or host ID, is often the same as the MAC address for a network interface on the host.\n */\nclass SystemNodeProvider implements NodeProviderInterface\n{\n    /**\n     * Pattern to match nodes in `ifconfig` and `ipconfig` output.\n     */\n    private const IFCONFIG_PATTERN = '/[^:]([0-9a-f]{2}([:-])[0-9a-f]{2}(\\2[0-9a-f]{2}){4})[^:]/i';\n\n    /**\n     * Pattern to match nodes in sysfs stream output.\n     */\n    private const SYSFS_PATTERN = '/^([0-9a-f]{2}:){5}[0-9a-f]{2}$/i';\n\n    public function getNode(): Hexadecimal\n    {\n        $node = $this->getNodeFromSystem();\n\n        if ($node === '') {\n            throw new NodeException('Unable to fetch a node for this system');\n        }\n\n        return new Hexadecimal($node);\n    }\n\n    /**\n     * Returns the system node if found\n     */\n    protected function getNodeFromSystem(): string\n    {\n        /** @var string | null $node */\n        static $node = null;\n\n        if ($node !== null) {\n            return $node;\n        }\n\n        // First, try a Linux-specific approach.\n        $node = $this->getSysfs();\n\n        if ($node === '') {\n            // Search ifconfig output for MAC addresses & return the first one.\n            $node = $this->getIfconfig();\n        }\n\n        $node = str_replace([':', '-'], '', $node);\n\n        return $node;\n    }\n\n    /**\n     * Returns the network interface configuration for the system\n     *\n     * @codeCoverageIgnore\n     */\n    protected function getIfconfig(): string\n    {\n        if (str_contains(strtolower((string) ini_get('disable_functions')), 'passthru')) {\n            return '';\n        }\n\n        /** @var string $phpOs */\n        $phpOs = constant('PHP_OS');\n\n        ob_start();\n        switch (strtoupper(substr($phpOs, 0, 3))) {\n            case 'WIN':\n                passthru('ipconfig /all 2>&1');\n\n                break;\n            case 'DAR':\n                passthru('ifconfig 2>&1');\n\n                break;\n            case 'FRE':\n                passthru('netstat -i -f link 2>&1');\n\n                break;\n            case 'LIN':\n            default:\n                passthru('netstat -ie 2>&1');\n\n                break;\n        }\n\n        $ifconfig = (string) ob_get_clean();\n\n        if (preg_match_all(self::IFCONFIG_PATTERN, $ifconfig, $matches, PREG_PATTERN_ORDER)) {\n            foreach ($matches[1] as $iface) {\n                if ($iface !== '00:00:00:00:00:00' && $iface !== '00-00-00-00-00-00') {\n                    return $iface;\n                }\n            }\n        }\n\n        return '';\n    }\n\n    /**\n     * Returns MAC address from the first system interface via the sysfs interface\n     */\n    protected function getSysfs(): string\n    {\n        /** @var string $phpOs */\n        $phpOs = constant('PHP_OS');\n\n        if (strtoupper($phpOs) !== 'LINUX') {\n            return '';\n        }\n\n        $addressPaths = glob('/sys/class/net/*/address', GLOB_NOSORT);\n\n        if ($addressPaths === false || count($addressPaths) === 0) {\n            return '';\n        }\n\n        /** @var array<array-key, string> $macs */\n        $macs = [];\n\n        array_walk($addressPaths, function (string $addressPath) use (&$macs): void {\n            if (is_readable($addressPath)) {\n                $macs[] = file_get_contents($addressPath);\n            }\n        });\n\n        /** @var callable $trim */\n        $trim = 'trim';\n\n        $macs = array_map($trim, $macs);\n\n        // Remove invalid entries.\n        $macs = array_filter($macs, function (mixed $address): bool {\n            assert(is_string($address));\n\n            return $address !== '00:00:00:00:00:00' && preg_match(self::SYSFS_PATTERN, $address);\n        });\n\n        /** @var bool | string $mac */\n        $mac = reset($macs);\n\n        return (string) $mac;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider;\n\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\n/**\n * A node provider retrieves or generates a node ID\n */\ninterface NodeProviderInterface\n{\n    /**\n     * Returns a node ID\n     *\n     * @return Hexadecimal The node ID as a hexadecimal string\n     */\n    public function getNode(): Hexadecimal;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Time;\n\nuse Ramsey\\Uuid\\Provider\\TimeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\Time;\n\n/**\n * FixedTimeProvider uses a known time to provide the time\n *\n * This provider allows the use of a previously generated, or known, time when generating time-based UUIDs.\n */\nclass FixedTimeProvider implements TimeProviderInterface\n{\n    public function __construct(private Time $time)\n    {\n    }\n\n    /**\n     * Sets the `usec` component of the time\n     *\n     * @param IntegerObject | int | string $value The `usec` value to set\n     */\n    public function setUsec($value): void\n    {\n        $this->time = new Time($this->time->getSeconds(), $value);\n    }\n\n    /**\n     * Sets the `sec` component of the time\n     *\n     * @param IntegerObject | int | string $value The `sec` value to set\n     */\n    public function setSec($value): void\n    {\n        $this->time = new Time($value, $this->time->getMicroseconds());\n    }\n\n    public function getTime(): Time\n    {\n        return $this->time;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider\\Time;\n\nuse Ramsey\\Uuid\\Provider\\TimeProviderInterface;\nuse Ramsey\\Uuid\\Type\\Time;\n\nuse function gettimeofday;\n\n/**\n * SystemTimeProvider retrieves the current time using built-in PHP functions\n */\nclass SystemTimeProvider implements TimeProviderInterface\n{\n    public function getTime(): Time\n    {\n        $time = gettimeofday();\n\n        return new Time($time['sec'], $time['usec']);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Provider;\n\nuse Ramsey\\Uuid\\Type\\Time;\n\n/**\n * A time provider retrieves the current time\n */\ninterface TimeProviderInterface\n{\n    /**\n     * Returns a time object\n     */\n    public function getTime(): Time;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/Fields.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Fields\\SerializableFieldsTrait;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Uuid;\n\nuse function bin2hex;\nuse function dechex;\nuse function hexdec;\nuse function sprintf;\nuse function str_pad;\nuse function strlen;\nuse function substr;\nuse function unpack;\n\nuse const STR_PAD_LEFT;\n\n/**\n * RFC 9562 (formerly RFC 4122) variant UUIDs consist of a set of named fields\n *\n * Internally, this class represents the fields together as a 16-byte binary string.\n *\n * @immutable\n */\nfinal class Fields implements FieldsInterface\n{\n    use MaxTrait;\n    use NilTrait;\n    use SerializableFieldsTrait;\n    use VariantTrait;\n    use VersionTrait;\n\n    /**\n     * @param string $bytes A 16-byte binary string representation of a UUID\n     *\n     * @throws InvalidArgumentException if the byte string is not exactly 16 bytes\n     * @throws InvalidArgumentException if the byte string does not represent an RFC 9562 (formerly RFC 4122) UUID\n     * @throws InvalidArgumentException if the byte string does not contain a valid version\n     */\n    public function __construct(private string $bytes)\n    {\n        if (strlen($this->bytes) !== 16) {\n            throw new InvalidArgumentException(\n                'The byte string must be 16 bytes long; ' . 'received ' . strlen($this->bytes) . ' bytes',\n            );\n        }\n\n        if (!$this->isCorrectVariant()) {\n            throw new InvalidArgumentException(\n                'The byte string received does not conform to the RFC 9562 (formerly RFC 4122) variant',\n            );\n        }\n\n        if (!$this->isCorrectVersion()) {\n            throw new InvalidArgumentException(\n                'The byte string received does not contain a valid RFC 9562 (formerly RFC 4122) version',\n            );\n        }\n    }\n\n    /**\n     * @pure\n     */\n    public function getBytes(): string\n    {\n        return $this->bytes;\n    }\n\n    public function getClockSeq(): Hexadecimal\n    {\n        if ($this->isMax()) {\n            $clockSeq = 0xffff;\n        } elseif ($this->isNil()) {\n            $clockSeq = 0x0000;\n        } else {\n            $clockSeq = hexdec(bin2hex(substr($this->bytes, 8, 2))) & 0x3fff;\n        }\n\n        return new Hexadecimal(str_pad(dechex($clockSeq), 4, '0', STR_PAD_LEFT));\n    }\n\n    public function getClockSeqHiAndReserved(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 8, 1)));\n    }\n\n    public function getClockSeqLow(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 9, 1)));\n    }\n\n    public function getNode(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 10)));\n    }\n\n    public function getTimeHiAndVersion(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 6, 2)));\n    }\n\n    public function getTimeLow(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 0, 4)));\n    }\n\n    public function getTimeMid(): Hexadecimal\n    {\n        return new Hexadecimal(bin2hex(substr($this->bytes, 4, 2)));\n    }\n\n    /**\n     * Returns the full 60-bit timestamp, without the version\n     *\n     * For version 2 UUIDs, the time_low field is the local identifier and should not be returned as part of the time.\n     * For this reason, we set the bottom 32 bits of the timestamp to 0's. As a result, there is some loss of timestamp\n     * fidelity, for version 2 UUIDs. The timestamp can be off by a range of 0 to 429.4967295 seconds (or 7 minutes, 9\n     * seconds, and 496,730 microseconds).\n     *\n     * For version 6 UUIDs, the timestamp order is reversed from the typical RFC 9562 (formerly RFC 4122) order (the\n     * time bits are in the correct bit order, so that it is monotonically increasing). In returning the timestamp\n     * value, we put the bits in the order: time_low + time_mid + time_hi.\n     */\n    public function getTimestamp(): Hexadecimal\n    {\n        return new Hexadecimal(match ($this->getVersion()) {\n            Uuid::UUID_TYPE_DCE_SECURITY => sprintf(\n                '%03x%04s%08s',\n                hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff,\n                $this->getTimeMid()->toString(),\n                ''\n            ),\n            Uuid::UUID_TYPE_REORDERED_TIME => sprintf(\n                '%08s%04s%03x',\n                $this->getTimeLow()->toString(),\n                $this->getTimeMid()->toString(),\n                hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff\n            ),\n            // The Unix timestamp in version 7 UUIDs is a 48-bit number, but for consistency, we will return a 60-bit\n            // number, padded to the left with zeros.\n            Uuid::UUID_TYPE_UNIX_TIME => sprintf(\n                '%011s%04s',\n                $this->getTimeLow()->toString(),\n                $this->getTimeMid()->toString(),\n            ),\n            default => sprintf(\n                '%03x%04s%08s',\n                hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff,\n                $this->getTimeMid()->toString(),\n                $this->getTimeLow()->toString()\n            ),\n        });\n    }\n\n    public function getVersion(): ?int\n    {\n        if ($this->isNil() || $this->isMax()) {\n            return null;\n        }\n\n        /** @var int[] $parts */\n        $parts = unpack('n*', $this->bytes);\n\n        return $parts[4] >> 12;\n    }\n\n    private function isCorrectVariant(): bool\n    {\n        if ($this->isNil() || $this->isMax()) {\n            return true;\n        }\n\n        return $this->getVariant() === Uuid::RFC_4122;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Fields\\FieldsInterface as BaseFieldsInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\n\n/**\n * UUID fields, as defined by RFC 4122\n *\n * This interface defines the fields of an RFC 4122 variant UUID. Since RFC 9562 removed the concept of fields and\n * instead defined layouts that are specific to a given version, this interface is a legacy artifact of the earlier, and\n * now obsolete, RFC 4122.\n *\n * The fields of an RFC 4122 variant UUID are:\n *\n * * **time_low**: The low field of the timestamp, an unsigned 32-bit integer\n * * **time_mid**: The middle field of the timestamp, an unsigned 16-bit integer\n * * **time_hi_and_version**: The high field of the timestamp multiplexed with the version number, an unsigned 16-bit integer\n * * **clock_seq_hi_and_reserved**: The high field of the clock sequence multiplexed with the variant, an unsigned 8-bit integer\n * * **clock_seq_low**: The low field of the clock sequence, an unsigned 8-bit integer\n * * **node**: The spatially unique node identifier, an unsigned 48-bit integer\n *\n * @link https://www.rfc-editor.org/rfc/rfc4122#section-4.1 RFC 4122, 4.1. Format\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-4 RFC 9562, 4. UUID Format\n *\n * @immutable\n */\ninterface FieldsInterface extends BaseFieldsInterface\n{\n    /**\n     * Returns the full 16-bit clock sequence, with the variant bits (two most significant bits) masked out\n     */\n    public function getClockSeq(): Hexadecimal;\n\n    /**\n     * Returns the high field of the clock sequence multiplexed with the variant\n     */\n    public function getClockSeqHiAndReserved(): Hexadecimal;\n\n    /**\n     * Returns the low field of the clock sequence\n     */\n    public function getClockSeqLow(): Hexadecimal;\n\n    /**\n     * Returns the node field\n     */\n    public function getNode(): Hexadecimal;\n\n    /**\n     * Returns the high field of the timestamp multiplexed with the version\n     */\n    public function getTimeHiAndVersion(): Hexadecimal;\n\n    /**\n     * Returns the low field of the timestamp\n     */\n    public function getTimeLow(): Hexadecimal;\n\n    /**\n     * Returns the middle field of the timestamp\n     */\n    public function getTimeMid(): Hexadecimal;\n\n    /**\n     * Returns the full 60-bit timestamp, without the version\n     */\n    public function getTimestamp(): Hexadecimal;\n\n    /**\n     * Returns the variant\n     *\n     * The variant number describes the layout of the UUID. The variant number has the following meaning:\n     *\n     * - 0 - Reserved for NCS backward compatibility\n     * - 2 - The RFC 9562 (formerly RFC 4122) variant\n     * - 6 - Reserved, Microsoft Corporation backward compatibility\n     * - 7 - Reserved for future definition\n     *\n     * For RFC 9562 (formerly RFC 4122) variant UUIDs, this value should always be the integer `2`.\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     */\n    public function getVariant(): int;\n\n    /**\n     * Returns the UUID version\n     *\n     * The version number describes how the UUID was generated and has the following meaning:\n     *\n     * 1. Gregorian time UUID\n     * 2. DCE security UUID\n     * 3. Name-based UUID hashed with MD5\n     * 4. Randomly generated UUID\n     * 5. Name-based UUID hashed with SHA-1\n     * 6. Reordered Gregorian time UUID\n     * 7. Unix Epoch time UUID\n     * 8. Custom format UUID\n     *\n     * This returns `null` if the UUID is not an RFC 9562 (formerly RFC 4122) variant, since the version is only\n     * meaningful for this variant.\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     *\n     * @pure\n     */\n    public function getVersion(): ?int;\n\n    /**\n     * Returns true if these fields represent a nil UUID\n     *\n     * The nil UUID is a special form of UUID that is specified to have all 128 bits set to zero.\n     *\n     * @pure\n     */\n    public function isNil(): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/MaxTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\n/**\n * Provides common functionality for max UUIDs\n *\n * @immutable\n */\ntrait MaxTrait\n{\n    /**\n     * Returns the bytes that comprise the fields\n     *\n     * @pure\n     */\n    abstract public function getBytes(): string;\n\n    /**\n     * Returns true if the byte string represents a max UUID\n     *\n     * @pure\n     */\n    public function isMax(): bool\n    {\n        return $this->getBytes() === \"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\";\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/MaxUuid.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * The max UUID is a special form of UUID that has all 128 bits set to one (`1`)\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.10 RFC 9562, 5.10. Max UUID\n *\n * @immutable\n */\nfinal class MaxUuid extends Uuid implements UuidInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\n/**\n * Provides common functionality for nil UUIDs\n *\n * @immutable\n */\ntrait NilTrait\n{\n    /**\n     * Returns the bytes that comprise the fields\n     *\n     * @pure\n     */\n    abstract public function getBytes(): string;\n\n    /**\n     * Returns true if the byte string represents a nil UUID\n     */\n    public function isNil(): bool\n    {\n        return $this->getBytes() === \"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\";\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * The nil UUID is a special form of UUID that has all 128 bits set to zero (`0`)\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.9 RFC 9562, 5.9. Nil UUID\n *\n * @immutable\n */\nfinal class NilUuid extends Uuid implements UuidInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/TimeTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Exception\\DateTimeException;\nuse Throwable;\n\nuse function str_pad;\n\nuse const STR_PAD_LEFT;\n\n/**\n * Provides common functionality for getting the time from a time-based UUID\n *\n * @immutable\n */\ntrait TimeTrait\n{\n    /**\n     * Returns a DateTimeInterface object representing the timestamp associated with the UUID\n     *\n     * @return DateTimeImmutable A PHP DateTimeImmutable instance representing the timestamp of a time-based UUID\n     */\n    public function getDateTime(): DateTimeInterface\n    {\n        $time = $this->timeConverter->convertTime($this->fields->getTimestamp());\n\n        try {\n            return new DateTimeImmutable(\n                '@'\n                . $time->getSeconds()->toString()\n                . '.'\n                . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT)\n            );\n        } catch (Throwable $e) {\n            throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e);\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Builder\\UuidBuilderInterface;\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\Time\\UnixTimeConverter;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\UnableToBuildUuidException;\nuse Ramsey\\Uuid\\Exception\\UnsupportedOperationException;\nuse Ramsey\\Uuid\\Math\\BrickMathCalculator;\nuse Ramsey\\Uuid\\Rfc4122\\UuidInterface as Rfc4122UuidInterface;\nuse Ramsey\\Uuid\\Uuid;\nuse Ramsey\\Uuid\\UuidInterface;\nuse Throwable;\n\n/**\n * UuidBuilder builds instances of RFC 9562 (formerly 4122) UUIDs\n *\n * @immutable\n */\nclass UuidBuilder implements UuidBuilderInterface\n{\n    private TimeConverterInterface $unixTimeConverter;\n\n    /**\n     * Constructs the DefaultUuidBuilder\n     *\n     * @param NumberConverterInterface $numberConverter The number converter to use when constructing the Uuid\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting Gregorian time extracted\n     *     from version 1, 2, and 6 UUIDs to Unix timestamps\n     * @param TimeConverterInterface | null $unixTimeConverter The time converter to use for converter Unix Epoch time\n     *     extracted from version 7 UUIDs to Unix timestamps\n     */\n    public function __construct(\n        private NumberConverterInterface $numberConverter,\n        private TimeConverterInterface $timeConverter,\n        ?TimeConverterInterface $unixTimeConverter = null,\n    ) {\n        $this->unixTimeConverter = $unixTimeConverter ?? new UnixTimeConverter(new BrickMathCalculator());\n    }\n\n    /**\n     * Builds and returns a Uuid\n     *\n     * @param CodecInterface $codec The codec to use for building this Uuid instance\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return Rfc4122UuidInterface UuidBuilder returns instances of Rfc4122UuidInterface\n     *\n     * @pure\n     */\n    public function build(CodecInterface $codec, string $bytes): UuidInterface\n    {\n        try {\n            /** @var Fields $fields */\n            $fields = $this->buildFields($bytes);\n\n            if ($fields->isNil()) {\n                /** @phpstan-ignore possiblyImpure.new */\n                return new NilUuid($fields, $this->numberConverter, $codec, $this->timeConverter);\n            }\n\n            if ($fields->isMax()) {\n                /** @phpstan-ignore possiblyImpure.new */\n                return new MaxUuid($fields, $this->numberConverter, $codec, $this->timeConverter);\n            }\n\n            return match ($fields->getVersion()) {\n                /** @phpstan-ignore possiblyImpure.new */\n                Uuid::UUID_TYPE_TIME => new UuidV1($fields, $this->numberConverter, $codec, $this->timeConverter),\n                Uuid::UUID_TYPE_DCE_SECURITY\n                    /** @phpstan-ignore possiblyImpure.new */\n                    => new UuidV2($fields, $this->numberConverter, $codec, $this->timeConverter),\n                /** @phpstan-ignore possiblyImpure.new */\n                Uuid::UUID_TYPE_HASH_MD5 => new UuidV3($fields, $this->numberConverter, $codec, $this->timeConverter),\n                /** @phpstan-ignore possiblyImpure.new */\n                Uuid::UUID_TYPE_RANDOM => new UuidV4($fields, $this->numberConverter, $codec, $this->timeConverter),\n                /** @phpstan-ignore possiblyImpure.new */\n                Uuid::UUID_TYPE_HASH_SHA1 => new UuidV5($fields, $this->numberConverter, $codec, $this->timeConverter),\n                Uuid::UUID_TYPE_REORDERED_TIME\n                    /** @phpstan-ignore possiblyImpure.new */\n                    => new UuidV6($fields, $this->numberConverter, $codec, $this->timeConverter),\n                Uuid::UUID_TYPE_UNIX_TIME\n                    /** @phpstan-ignore possiblyImpure.new */\n                    => new UuidV7($fields, $this->numberConverter, $codec, $this->unixTimeConverter),\n                /** @phpstan-ignore possiblyImpure.new */\n                Uuid::UUID_TYPE_CUSTOM => new UuidV8($fields, $this->numberConverter, $codec, $this->timeConverter),\n                default => throw new UnsupportedOperationException(\n                    'The UUID version in the given fields is not supported by this UUID builder',\n                ),\n            };\n        } catch (Throwable $e) {\n            /** @phpstan-ignore possiblyImpure.methodCall, possiblyImpure.methodCall */\n            throw new UnableToBuildUuidException($e->getMessage(), (int) $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * Proxy method to allow injecting a mock for testing\n     *\n     * @pure\n     */\n    protected function buildFields(string $bytes): FieldsInterface\n    {\n        /** @phpstan-ignore possiblyImpure.new */\n        return new Fields($bytes);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\UuidInterface as BaseUuidInterface;\n\n/**\n * A universally unique identifier (UUID), as defined in RFC 9562 (formerly RFC 4122)\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562 RFC 9562\n *\n * @immutable\n */\ninterface UuidInterface extends BaseUuidInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Gregorian time, or version 1, UUIDs include timestamp, clock sequence, and node values, combined into a 128-bit unsigned integer\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.1 RFC 9562, 5.1. UUID Version 1\n *\n * @immutable\n */\nfinal class UuidV1 extends Uuid implements UuidInterface\n{\n    use TimeTrait;\n\n    /**\n     * Creates a version 1 (Gregorian time) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_TIME) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV1 must represent a version 1 (time-based) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Uuid;\n\nuse function hexdec;\n\n/**\n * DCE Security version, or version 2, UUIDs include local domain identifier, local ID for the specified domain, and\n * node values that are combined into a 128-bit unsigned integer\n *\n * It is important to note that a version 2 UUID suffers from some loss of timestamp fidelity, due to replacing the\n * time_low field with the local identifier. When constructing the timestamp value for date purposes, we replace the\n * local identifier bits with zeros. As a result, the timestamp can be off by a range of 0 to 429.4967295 seconds (or 7\n * minutes, 9 seconds, and 496,730 microseconds).\n *\n * Astute observers might note this value directly corresponds to `2^32-1`, or `0xffffffff`. The local identifier is\n * 32-bits, and we have set each of these bits to `0`, so the maximum range of timestamp drift is `0x00000000` to\n * `0xffffffff` (counted in 100-nanosecond intervals).\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.2 RFC 9562, 5.2. UUID Version 2\n * @link https://publications.opengroup.org/c311 DCE 1.1: Authentication and Security Services\n * @link https://publications.opengroup.org/c706 DCE 1.1: Remote Procedure Call\n * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01 DCE 1.1: Auth & Sec, §5.2.1.1\n * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1: Auth & Sec, §11.5.1.1\n * @link https://pubs.opengroup.org/onlinepubs/9629399/apdxa.htm DCE 1.1: RPC, Appendix A\n * @link https://github.com/google/uuid Go package for UUIDs (includes DCE implementation)\n *\n * @immutable\n */\nfinal class UuidV2 extends Uuid implements UuidInterface\n{\n    use TimeTrait;\n\n    /**\n     * Creates a version 2 (DCE Security) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_DCE_SECURITY) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV2 must represent a version 2 (DCE Security) UUID'\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n\n    /**\n     * Returns the local domain used to create this version 2 UUID\n     */\n    public function getLocalDomain(): int\n    {\n        /** @var Rfc4122FieldsInterface $fields */\n        $fields = $this->getFields();\n\n        return (int) hexdec($fields->getClockSeqLow()->toString());\n    }\n\n    /**\n     * Returns the string name of the local domain\n     */\n    public function getLocalDomainName(): string\n    {\n        return Uuid::DCE_DOMAIN_NAMES[$this->getLocalDomain()];\n    }\n\n    /**\n     * Returns the local identifier for the domain used to create this version 2 UUID\n     */\n    public function getLocalIdentifier(): IntegerObject\n    {\n        /** @var Rfc4122FieldsInterface $fields */\n        $fields = $this->getFields();\n\n        return new IntegerObject($this->numberConverter->fromHex($fields->getTimeLow()->toString()));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Version 3 UUIDs are named-based, using a combination of a namespace and name that are hashed into a 128-bit unsigned\n * integer using the MD5 hashing algorithm\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.3 RFC 9562, 5.3. UUID Version 3\n *\n * @immutable\n */\nfinal class UuidV3 extends Uuid implements UuidInterface\n{\n    /**\n     * Creates a version 3 (name-based, MD5-hashed) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_HASH_MD5) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV3 must represent a version 3 (name-based, MD5-hashed) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Random, or version 4, UUIDs are randomly or pseudo-randomly generated 128-bit integers\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.4 RFC 9562, 5.4. UUID Version 4\n *\n * @immutable\n */\nfinal class UuidV4 extends Uuid implements UuidInterface\n{\n    /**\n     * Creates a version 4 (random) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_RANDOM) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV4 must represent a version 4 (random) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Version 5 UUIDs are named-based, using a combination of a namespace and name that are hashed into a 128-bit unsigned\n * integer using the SHA1 hashing algorithm\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.5 RFC 9562, 5.5. UUID Version 5\n *\n * @immutable\n */\nfinal class UuidV5 extends Uuid implements UuidInterface\n{\n    /**\n     * Creates a version 5 (name-based, SHA1-hashed) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_HASH_SHA1) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV5 must represent a version 5 (named-based, SHA1-hashed) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV6.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Nonstandard\\UuidV6 as NonstandardUuidV6;\n\n/**\n * Reordered Gregorian time, or version 6, UUIDs include timestamp, clock sequence, and node values that are combined\n * into a 128-bit unsigned integer\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.6 RFC 9562, 5.6. UUID Version 6\n *\n * @immutable\n */\nfinal class UuidV6 extends NonstandardUuidV6 implements UuidInterface\n{\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV7.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Unix Epoch time, or version 7, UUIDs include a timestamp in milliseconds since the Unix Epoch, along with random bytes\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.7 RFC 9562, 5.7. UUID Version 7\n *\n * @immutable\n */\nfinal class UuidV7 extends Uuid implements UuidInterface\n{\n    use TimeTrait;\n\n    /**\n     * Creates a version 7 (Unix Epoch time) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_UNIX_TIME) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV7 must represent a version 7 (Unix Epoch time) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/UuidV8.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Custom format, or version 8, UUIDs provide an RFC-compatible format for experimental or vendor-specific uses\n *\n * The only requirement for version 8 UUIDs is that the version and variant bits must be set. Otherwise, implementations\n * are free to set the other bits according to their needs. As a result, the uniqueness of version 8 UUIDs is\n * implementation-specific and should not be assumed.\n *\n * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.8 RFC 9562, 5.8. UUID Version 8\n *\n * @immutable\n */\nfinal class UuidV8 extends Uuid implements UuidInterface\n{\n    /**\n     * Creates a version 8 (custom format) UUID\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        if ($fields->getVersion() !== Uuid::UUID_TYPE_CUSTOM) {\n            throw new InvalidArgumentException(\n                'Fields used to create a UuidV8 must represent a version 8 (custom format) UUID',\n            );\n        }\n\n        parent::__construct($fields, $numberConverter, $codec, $timeConverter);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/Validator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Uuid;\nuse Ramsey\\Uuid\\Validator\\ValidatorInterface;\n\nuse function preg_match;\nuse function str_replace;\n\n/**\n * Rfc4122\\Validator validates strings as UUIDs of the RFC 9562 (formerly RFC 4122) variant\n *\n * @immutable\n */\nfinal class Validator implements ValidatorInterface\n{\n    private const VALID_PATTERN = '\\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-'\n        . '[1-8][0-9A-Fa-f]{3}-[ABab89][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}\\z';\n\n    /**\n     * @return non-empty-string\n     */\n    public function getPattern(): string\n    {\n        return self::VALID_PATTERN;\n    }\n\n    public function validate(string $uuid): bool\n    {\n        /** @phpstan-ignore possiblyImpure.functionCall */\n        $uuid = strtolower(str_replace(['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}'], '', $uuid));\n\n        /** @phpstan-ignore possiblyImpure.functionCall */\n        return $uuid === Uuid::NIL || $uuid === Uuid::MAX || preg_match('/' . self::VALID_PATTERN . '/Dms', $uuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Exception\\InvalidBytesException;\nuse Ramsey\\Uuid\\Uuid;\n\nuse function decbin;\nuse function str_pad;\nuse function str_starts_with;\nuse function strlen;\nuse function substr;\nuse function unpack;\n\nuse const STR_PAD_LEFT;\n\n/**\n * Provides common functionality for handling the variant, as defined by RFC 9562 (formerly RFC 4122)\n *\n * @immutable\n */\ntrait VariantTrait\n{\n    /**\n     * Returns the bytes that comprise the fields\n     */\n    abstract public function getBytes(): string;\n\n    /**\n     * Returns the variant\n     *\n     * The variant number describes the layout of the UUID. The variant number has the following meaning:\n     *\n     * - 0 - Reserved for NCS backward compatibility\n     * - 2 - The RFC 9562 (formerly RFC 4122) variant\n     * - 6 - Reserved, Microsoft Corporation backward compatibility\n     * - 7 - Reserved for future definition\n     *\n     * For RFC 9562 (formerly RFC 4122) variant UUIDs, this value should always be the integer `2`.\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     */\n    public function getVariant(): int\n    {\n        if (strlen($this->getBytes()) !== 16) {\n            throw new InvalidBytesException('Invalid number of bytes');\n        }\n\n        // According to RFC 9562, sections {@link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 4.1} and\n        // {@link https://www.rfc-editor.org/rfc/rfc9562#section-5.10 5.10}, the Max UUID falls within the range\n        // of the future variant.\n        if ($this->isMax()) {\n            return Uuid::RESERVED_FUTURE;\n        }\n\n        // According to RFC 9562, sections {@link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 4.1} and\n        // {@link https://www.rfc-editor.org/rfc/rfc9562#section-5.9 5.9}, the Nil UUID falls within the range\n        // of the Apollo NCS variant.\n        if ($this->isNil()) {\n            return Uuid::RESERVED_NCS;\n        }\n\n        /** @var int[] $parts */\n        $parts = unpack('n*', $this->getBytes());\n\n        // $parts[5] is a 16-bit, unsigned integer containing the variant bits of the UUID. We convert this integer into\n        // a string containing a binary representation, padded to 16 characters. We analyze the first three characters\n        // (three most-significant bits) to determine the variant.\n        $msb = substr(str_pad(decbin($parts[5]), 16, '0', STR_PAD_LEFT), 0, 3);\n\n        if ($msb === '111') {\n            return Uuid::RESERVED_FUTURE;\n        } elseif ($msb === '110') {\n            return Uuid::RESERVED_MICROSOFT;\n        } elseif (str_starts_with($msb, '10')) {\n            return Uuid::RFC_4122;\n        }\n\n        return Uuid::RESERVED_NCS;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Rfc4122;\n\nuse Ramsey\\Uuid\\Uuid;\n\n/**\n * Provides common functionality for handling the version, as defined by RFC 9562 (formerly RFC 4122)\n *\n * @immutable\n */\ntrait VersionTrait\n{\n    /**\n     * Returns the UUID version\n     *\n     * The version number describes how the UUID was generated and has the following meaning:\n     *\n     * 1. Gregorian time UUID\n     * 2. DCE security UUID\n     * 3. Name-based UUID hashed with MD5\n     * 4. Randomly generated UUID\n     * 5. Name-based UUID hashed with SHA-1\n     * 6. Reordered Gregorian time UUID\n     * 7. Unix Epoch time UUID\n     * 8. Custom format UUID\n     *\n     * This returns `null` if the UUID is not an RFC 9562 (formerly RFC 4122) variant, since the version is only\n     * meaningful for this variant.\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     *\n     * @pure\n     */\n    abstract public function getVersion(): ?int;\n\n    /**\n     * Returns true if these fields represent a max UUID\n     */\n    abstract public function isMax(): bool;\n\n    /**\n     * Returns true if these fields represent a nil UUID\n     */\n    abstract public function isNil(): bool;\n\n    /**\n     * Returns true if the version matches one of those defined by RFC 9562 (formerly RFC 4122)\n     *\n     * @return bool True if the UUID version is valid, false otherwise\n     */\n    private function isCorrectVersion(): bool\n    {\n        if ($this->isNil() || $this->isMax()) {\n            return true;\n        }\n\n        return match ($this->getVersion()) {\n            Uuid::UUID_TYPE_TIME, Uuid::UUID_TYPE_DCE_SECURITY,\n                Uuid::UUID_TYPE_HASH_MD5, Uuid::UUID_TYPE_RANDOM,\n                Uuid::UUID_TYPE_HASH_SHA1, Uuid::UUID_TYPE_REORDERED_TIME,\n                Uuid::UUID_TYPE_UNIX_TIME, Uuid::UUID_TYPE_CUSTOM => true,\n            default => false,\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Type/Decimal.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Type;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse ValueError;\n\nuse function is_numeric;\nuse function sprintf;\nuse function str_starts_with;\n\n/**\n * A value object representing a decimal\n *\n * This class exists for type-safety purposes, to ensure that decimals returned from ramsey/uuid methods as strings are\n * truly decimals and not some other kind of string.\n *\n * To support values as true decimals and not as floats or doubles, we store the decimals as strings.\n *\n * @immutable\n */\nfinal class Decimal implements NumberInterface\n{\n    private string $value;\n    private bool $isNegative;\n\n    public function __construct(float | int | string | self $value)\n    {\n        $value = (string) $value;\n\n        if (!is_numeric($value)) {\n            throw new InvalidArgumentException(\n                'Value must be a signed decimal or a string containing only '\n                . 'digits 0-9 and, optionally, a decimal point or sign (+ or -)'\n            );\n        }\n\n        // Remove the leading +-symbol.\n        if (str_starts_with($value, '+')) {\n            $value = substr($value, 1);\n        }\n\n        // For cases like `-0` or `-0.0000`, convert the value to `0`.\n        if (abs((float) $value) === 0.0) {\n            $value = '0';\n        }\n\n        if (str_starts_with($value, '-')) {\n            $this->isNegative = true;\n        } else {\n            $this->isNegative = false;\n        }\n\n        $this->value = $value;\n    }\n\n    public function isNegative(): bool\n    {\n        return $this->isNegative;\n    }\n\n    public function toString(): string\n    {\n        return $this->value;\n    }\n\n    public function __toString(): string\n    {\n        return $this->toString();\n    }\n\n    public function jsonSerialize(): string\n    {\n        return $this->toString();\n    }\n\n    public function serialize(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * @return array{string: string}\n     */\n    public function __serialize(): array\n    {\n        return ['string' => $this->toString()];\n    }\n\n    /**\n     * Constructs the object from a serialized string representation\n     *\n     * @param string $data The serialized string representation of the object\n     */\n    public function unserialize(string $data): void\n    {\n        $this->__construct($data);\n    }\n\n    /**\n     * @param array{string?: string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['string'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->unserialize($data['string']);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Type/Hexadecimal.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Type;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse ValueError;\n\nuse function preg_match;\nuse function sprintf;\nuse function substr;\n\n/**\n * A value object representing a hexadecimal number\n *\n * This class exists for type-safety purposes, to ensure that hexadecimal numbers returned from ramsey/uuid methods as\n * strings are truly hexadecimal and not some other kind of string.\n *\n * @immutable\n */\nfinal class Hexadecimal implements TypeInterface\n{\n    /**\n     * @var non-empty-string\n     */\n    private string $value;\n\n    /**\n     * @param self | string $value The hexadecimal value to store\n     */\n    public function __construct(self | string $value)\n    {\n        $this->value = $value instanceof self ? (string) $value : $this->prepareValue($value);\n    }\n\n    /**\n     * @return non-empty-string\n     *\n     * @pure\n     */\n    public function toString(): string\n    {\n        return $this->value;\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function __toString(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function jsonSerialize(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function serialize(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * @return array{string: string}\n     */\n    public function __serialize(): array\n    {\n        return ['string' => $this->toString()];\n    }\n\n    /**\n     * Constructs the object from a serialized string representation\n     *\n     * @param string $data The serialized string representation of the object\n     */\n    public function unserialize(string $data): void\n    {\n        $this->__construct($data);\n    }\n\n    /**\n     * @param array{string?: string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['string'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->unserialize($data['string']);\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    private function prepareValue(string $value): string\n    {\n        $value = strtolower($value);\n\n        if (str_starts_with($value, '0x')) {\n            $value = substr($value, 2);\n        }\n\n        if (!preg_match('/^[A-Fa-f0-9]+$/', $value)) {\n            throw new InvalidArgumentException('Value must be a hexadecimal number');\n        }\n\n        /** @var non-empty-string */\n        return $value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Type/Integer.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Type;\n\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse ValueError;\n\nuse function assert;\nuse function is_numeric;\nuse function preg_match;\nuse function sprintf;\nuse function substr;\n\n/**\n * A value object representing an integer\n *\n * This class exists for type-safety purposes, to ensure that integers returned from ramsey/uuid methods as strings are\n * truly integers and not some other kind of string.\n *\n * To support large integers beyond PHP_INT_MAX and PHP_INT_MIN on both 64-bit and 32-bit systems, we store the integers\n * as strings.\n *\n * @immutable\n */\nfinal class Integer implements NumberInterface\n{\n    /**\n     * @var numeric-string\n     */\n    private string $value;\n\n    /**\n     * @phpstan-ignore property.readOnlyByPhpDocDefaultValue\n     */\n    private bool $isNegative = false;\n\n    public function __construct(self | float | int | string $value)\n    {\n        $this->value = $value instanceof self ? (string) $value : $this->prepareValue($value);\n    }\n\n    public function isNegative(): bool\n    {\n        return $this->isNegative;\n    }\n\n    /**\n     * @return numeric-string\n     *\n     * @pure\n     */\n    public function toString(): string\n    {\n        return $this->value;\n    }\n\n    /**\n     * @return numeric-string\n     */\n    public function __toString(): string\n    {\n        return $this->toString();\n    }\n\n    public function jsonSerialize(): string\n    {\n        return $this->toString();\n    }\n\n    public function serialize(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * @return array{string: string}\n     */\n    public function __serialize(): array\n    {\n        return ['string' => $this->toString()];\n    }\n\n    /**\n     * Constructs the object from a serialized string representation\n     *\n     * @param string $data The serialized string representation of the object\n     */\n    public function unserialize(string $data): void\n    {\n        $this->__construct($data);\n    }\n\n    /**\n     * @param array{string?: string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['string'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->unserialize($data['string']);\n    }\n\n    /**\n     * @return numeric-string\n     */\n    private function prepareValue(float | int | string $value): string\n    {\n        $value = (string) $value;\n        $sign = '+';\n\n        // If the value contains a sign, remove it for the digit pattern check.\n        if (str_starts_with($value, '-') || str_starts_with($value, '+')) {\n            $sign = substr($value, 0, 1);\n            $value = substr($value, 1);\n        }\n\n        if (!preg_match('/^\\d+$/', $value)) {\n            throw new InvalidArgumentException(\n                'Value must be a signed integer or a string containing only '\n                . 'digits 0-9 and, optionally, a sign (+ or -)'\n            );\n        }\n\n        // Trim any leading zeros.\n        $value = ltrim($value, '0');\n\n        // Set to zero if the string is empty after trimming zeros.\n        if ($value === '') {\n            $value = '0';\n        }\n\n        // Add the negative sign back to the value.\n        if ($sign === '-' && $value !== '0') {\n            $value = $sign . $value;\n\n            /** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */\n            $this->isNegative = true;\n        }\n\n        assert(is_numeric($value));\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Type/NumberInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Type;\n\n/**\n * NumberInterface ensures consistency in numeric values returned by ramsey/uuid\n *\n * @immutable\n */\ninterface NumberInterface extends TypeInterface\n{\n    /**\n     * Returns true if this number is less than zero\n     */\n    public function isNegative(): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Type/Time.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Type;\n\nuse Ramsey\\Uuid\\Exception\\UnsupportedOperationException;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse ValueError;\n\nuse function json_decode;\nuse function json_encode;\nuse function sprintf;\n\n/**\n * A value object representing a timestamp\n *\n * This class exists for type-safety purposes, to ensure that timestamps used by ramsey/uuid are truly timestamp\n * integers and not some other kind of string or integer.\n *\n * @immutable\n */\nfinal class Time implements TypeInterface\n{\n    private IntegerObject $seconds;\n    private IntegerObject $microseconds;\n\n    public function __construct(\n        IntegerObject | float | int | string $seconds,\n        IntegerObject | float | int | string $microseconds = 0,\n    ) {\n        $this->seconds = new IntegerObject($seconds);\n        $this->microseconds = new IntegerObject($microseconds);\n    }\n\n    /**\n     * @pure\n     */\n    public function getSeconds(): IntegerObject\n    {\n        return $this->seconds;\n    }\n\n    /**\n     * @pure\n     */\n    public function getMicroseconds(): IntegerObject\n    {\n        return $this->microseconds;\n    }\n\n    public function toString(): string\n    {\n        return $this->seconds->toString() . '.' . sprintf('%06s', $this->microseconds->toString());\n    }\n\n    public function __toString(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * @return string[]\n     */\n    public function jsonSerialize(): array\n    {\n        return [\n            'seconds' => $this->getSeconds()->toString(),\n            'microseconds' => $this->getMicroseconds()->toString(),\n        ];\n    }\n\n    public function serialize(): string\n    {\n        return (string) json_encode($this);\n    }\n\n    /**\n     * @return array{seconds: string, microseconds: string}\n     */\n    public function __serialize(): array\n    {\n        return [\n            'seconds' => $this->getSeconds()->toString(),\n            'microseconds' => $this->getMicroseconds()->toString(),\n        ];\n    }\n\n    /**\n     * Constructs the object from a serialized string representation\n     *\n     * @param string $data The serialized string representation of the object\n     */\n    public function unserialize(string $data): void\n    {\n        /** @var array{seconds?: float | int | string, microseconds?: float | int | string} $time */\n        $time = json_decode($data, true);\n\n        if (!isset($time['seconds']) || !isset($time['microseconds'])) {\n            throw new UnsupportedOperationException('Attempted to unserialize an invalid value');\n        }\n\n        $this->__construct($time['seconds'], $time['microseconds']);\n    }\n\n    /**\n     * @param array{seconds?: string, microseconds?: string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['seconds']) || !isset($data['microseconds'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->__construct($data['seconds'], $data['microseconds']);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Type/TypeInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Type;\n\nuse JsonSerializable;\nuse Serializable;\n\n/**\n * TypeInterface ensures consistency in typed values returned by ramsey/uuid\n *\n * @immutable\n */\ninterface TypeInterface extends JsonSerializable, Serializable\n{\n    /**\n     * @pure\n     */\n    public function toString(): string;\n\n    /**\n     * @pure\n     */\n    public function __toString(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Uuid.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse BadMethodCallException;\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Exception\\InvalidArgumentException;\nuse Ramsey\\Uuid\\Exception\\UnsupportedOperationException;\nuse Ramsey\\Uuid\\Fields\\FieldsInterface;\nuse Ramsey\\Uuid\\Lazy\\LazyUuidFromString;\nuse Ramsey\\Uuid\\Rfc4122\\FieldsInterface as Rfc4122FieldsInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse ValueError;\n\nuse function assert;\nuse function bin2hex;\nuse function method_exists;\nuse function preg_match;\nuse function sprintf;\nuse function str_replace;\nuse function strcmp;\nuse function strlen;\nuse function strtolower;\nuse function substr;\n\n/**\n * Uuid provides constants and static methods for working with and generating UUIDs\n *\n * @immutable\n */\nclass Uuid implements UuidInterface\n{\n    use DeprecatedUuidMethodsTrait;\n\n    /**\n     * When this namespace is specified, the name string is a fully qualified domain name\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-6.6 RFC 9562, 6.6. Namespace ID Usage and Allocation\n     */\n    public const NAMESPACE_DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\n\n    /**\n     * When this namespace is specified, the name string is a URL\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-6.6 RFC 9562, 6.6. Namespace ID Usage and Allocation\n     */\n    public const NAMESPACE_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\n\n    /**\n     * When this namespace is specified, the name string is an ISO OID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-6.6 RFC 9562, 6.6. Namespace ID Usage and Allocation\n     */\n    public const NAMESPACE_OID = '6ba7b812-9dad-11d1-80b4-00c04fd430c8';\n\n    /**\n     * When this namespace is specified, the name string is an X.500 DN (in DER or a text output format)\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-6.6 RFC 9562, 6.6. Namespace ID Usage and Allocation\n     */\n    public const NAMESPACE_X500 = '6ba7b814-9dad-11d1-80b4-00c04fd430c8';\n\n    /**\n     * The Nil UUID is a special form of UUID that is specified to have all 128 bits set to zero\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.9 RFC 9562, 5.9. Nil UUID\n     */\n    public const NIL = '00000000-0000-0000-0000-000000000000';\n\n    /**\n     * The Max UUID is a special form of UUID that is specified to have all 128 bits set to one\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-5.10 RFC 9562, 5.10. Max UUID\n     */\n    public const MAX = 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n\n    /**\n     * Variant: reserved, NCS backward compatibility\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     */\n    public const RESERVED_NCS = 0;\n\n    /**\n     * Variant: the UUID layout specified in RFC 9562 (formerly RFC 4122)\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     * @see Uuid::RFC_9562\n     */\n    public const RFC_4122 = 2;\n\n    /**\n     * Variant: the UUID layout specified in RFC 9562 (formerly RFC 4122)\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     */\n    public const RFC_9562 = 2;\n\n    /**\n     * Variant: reserved, Microsoft Corporation backward compatibility\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     */\n    public const RESERVED_MICROSOFT = 6;\n\n    /**\n     * Variant: reserved for future definition\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.1 RFC 9562, 4.1. Variant Field\n     */\n    public const RESERVED_FUTURE = 7;\n\n    /**\n     * @deprecated Use {@see ValidatorInterface::getPattern()} instead.\n     */\n    public const VALID_PATTERN = '^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$';\n\n    /**\n     * Version 1 (Gregorian time) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_TIME = 1;\n\n    /**\n     * Version 2 (DCE Security) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_DCE_SECURITY = 2;\n\n    /**\n     * @deprecated Use {@see Uuid::UUID_TYPE_DCE_SECURITY} instead.\n     */\n    public const UUID_TYPE_IDENTIFIER = 2;\n\n    /**\n     * Version 3 (name-based and hashed with MD5) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_HASH_MD5 = 3;\n\n    /**\n     * Version 4 (random) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_RANDOM = 4;\n\n    /**\n     * Version 5 (name-based and hashed with SHA1) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_HASH_SHA1 = 5;\n\n    /**\n     * @deprecated Use {@see Uuid::UUID_TYPE_REORDERED_TIME} instead.\n     */\n    public const UUID_TYPE_PEABODY = 6;\n\n    /**\n     * Version 6 (reordered Gregorian time) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_REORDERED_TIME = 6;\n\n    /**\n     * Version 7 (Unix Epoch time) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_UNIX_TIME = 7;\n\n    /**\n     * Version 8 (custom format) UUID\n     *\n     * @link https://www.rfc-editor.org/rfc/rfc9562#section-4.2 RFC 9562, 4.2. Version Field\n     */\n    public const UUID_TYPE_CUSTOM = 8;\n\n    /**\n     * DCE Security principal domain\n     *\n     * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1\n     */\n    public const DCE_DOMAIN_PERSON = 0;\n\n    /**\n     * DCE Security group domain\n     *\n     * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1\n     */\n    public const DCE_DOMAIN_GROUP = 1;\n\n    /**\n     * DCE Security organization domain\n     *\n     * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1\n     */\n    public const DCE_DOMAIN_ORG = 2;\n\n    /**\n     * DCE Security domain string names\n     *\n     * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1\n     */\n    public const DCE_DOMAIN_NAMES = [\n        self::DCE_DOMAIN_PERSON => 'person',\n        self::DCE_DOMAIN_GROUP => 'group',\n        self::DCE_DOMAIN_ORG => 'org',\n    ];\n\n    /**\n     * @phpstan-ignore property.readOnlyByPhpDocDefaultValue\n     */\n    private static ?UuidFactoryInterface $factory = null;\n\n    /**\n     * @var bool flag to detect if the UUID factory was replaced internally, which disables all optimizations for the\n     *     default/happy path internal scenarios\n     * @phpstan-ignore property.readOnlyByPhpDocDefaultValue\n     */\n    private static bool $factoryReplaced = false;\n\n    protected CodecInterface $codec;\n    protected NumberConverterInterface $numberConverter;\n    protected Rfc4122FieldsInterface $fields;\n    protected TimeConverterInterface $timeConverter;\n\n    /**\n     * Creates a universally unique identifier (UUID) from an array of fields\n     *\n     * Unless you're making advanced use of this library to generate identifiers that deviate from RFC 9562 (formerly\n     * RFC 4122), you probably do not want to instantiate a UUID directly. Use the static methods, instead:\n     *\n     * ```\n     * use Ramsey\\Uuid\\Uuid;\n     *\n     * $timeBasedUuid = Uuid::uuid1();\n     * $namespaceMd5Uuid = Uuid::uuid3(Uuid::NAMESPACE_URL, 'http://php.net/');\n     * $randomUuid = Uuid::uuid4();\n     * $namespaceSha1Uuid = Uuid::uuid5(Uuid::NAMESPACE_URL, 'http://php.net/');\n     * ```\n     *\n     * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID\n     * @param NumberConverterInterface $numberConverter The number converter to use for converting hex values to/from integers\n     * @param CodecInterface $codec The codec to use when encoding or decoding UUID strings\n     * @param TimeConverterInterface $timeConverter The time converter to use for converting timestamps extracted from a\n     *     UUID to unix timestamps\n     */\n    public function __construct(\n        Rfc4122FieldsInterface $fields,\n        NumberConverterInterface $numberConverter,\n        CodecInterface $codec,\n        TimeConverterInterface $timeConverter,\n    ) {\n        $this->fields = $fields;\n        $this->codec = $codec;\n        $this->numberConverter = $numberConverter;\n        $this->timeConverter = $timeConverter;\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function __toString(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * Converts the UUID to a string for JSON serialization\n     */\n    public function jsonSerialize(): string\n    {\n        return $this->toString();\n    }\n\n    /**\n     * Converts the UUID to a string for PHP serialization\n     */\n    public function serialize(): string\n    {\n        return $this->codec->encode($this);\n    }\n\n    /**\n     * @return array{bytes: string}\n     */\n    public function __serialize(): array\n    {\n        return ['bytes' => $this->serialize()];\n    }\n\n    /**\n     * Re-constructs the object from its serialized form\n     *\n     * @param string $data The serialized PHP string to unserialize into a UuidInterface instance\n     */\n    public function unserialize(string $data): void\n    {\n        if (strlen($data) === 16) {\n            /** @var Uuid $uuid */\n            $uuid = self::getFactory()->fromBytes($data);\n        } else {\n            /** @var Uuid $uuid */\n            $uuid = self::getFactory()->fromString($data);\n        }\n\n        /** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */\n        $this->codec = $uuid->codec;\n\n        /** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */\n        $this->numberConverter = $uuid->numberConverter;\n\n        /** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */\n        $this->fields = $uuid->fields;\n\n        /** @phpstan-ignore property.readOnlyByPhpDocAssignNotInConstructor */\n        $this->timeConverter = $uuid->timeConverter;\n    }\n\n    /**\n     * @param array{bytes?: string} $data\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        if (!isset($data['bytes'])) {\n            throw new ValueError(sprintf('%s(): Argument #1 ($data) is invalid', __METHOD__));\n        }\n        // @codeCoverageIgnoreEnd\n\n        $this->unserialize($data['bytes']);\n    }\n\n    public function compareTo(UuidInterface $other): int\n    {\n        $compare = strcmp($this->toString(), $other->toString());\n\n        if ($compare < 0) {\n            return -1;\n        }\n\n        if ($compare > 0) {\n            return 1;\n        }\n\n        return 0;\n    }\n\n    public function equals(?object $other): bool\n    {\n        if (!$other instanceof UuidInterface) {\n            return false;\n        }\n\n        return $this->compareTo($other) === 0;\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function getBytes(): string\n    {\n        return $this->codec->encodeBinary($this);\n    }\n\n    public function getFields(): FieldsInterface\n    {\n        return $this->fields;\n    }\n\n    public function getHex(): Hexadecimal\n    {\n        return new Hexadecimal(str_replace('-', '', $this->toString()));\n    }\n\n    public function getInteger(): IntegerObject\n    {\n        return new IntegerObject($this->numberConverter->fromHex($this->getHex()->toString()));\n    }\n\n    public function getUrn(): string\n    {\n        return 'urn:uuid:' . $this->toString();\n    }\n\n    /**\n     * @return non-empty-string\n     */\n    public function toString(): string\n    {\n        return $this->codec->encode($this);\n    }\n\n    /**\n     * Returns the factory used to create UUIDs\n     */\n    public static function getFactory(): UuidFactoryInterface\n    {\n        if (self::$factory === null) {\n            self::$factory = new UuidFactory();\n        }\n\n        return self::$factory;\n    }\n\n    /**\n     * Sets the factory used to create UUIDs\n     *\n     * @param UuidFactoryInterface $factory A factory that will be used by this class to create UUIDs\n     */\n    public static function setFactory(UuidFactoryInterface $factory): void\n    {\n        // Note: non-strict equality is intentional here. If the factory is configured differently, every assumption\n        //       around purity is broken, and we have to internally decide everything differently.\n        // phpcs:ignore SlevomatCodingStandard.Operators.DisallowEqualOperators.DisallowedNotEqualOperator\n        self::$factoryReplaced = ($factory != new UuidFactory());\n\n        self::$factory = $factory;\n    }\n\n    /**\n     * Creates a UUID from a byte string\n     *\n     * @param string $bytes A binary string\n     *\n     * @return UuidInterface A UuidInterface instance created from a binary string representation\n     *\n     * @throws InvalidArgumentException\n     *\n     * @pure\n     */\n    public static function fromBytes(string $bytes): UuidInterface\n    {\n        /** @phpstan-ignore impure.staticPropertyAccess */\n        if (!self::$factoryReplaced && strlen($bytes) === 16) {\n            $base16Uuid = bin2hex($bytes);\n\n            // Note: we are calling `fromString` internally because we don't know if the given `$bytes` is a valid UUID\n            return self::fromString(\n                substr($base16Uuid, 0, 8)\n                    . '-'\n                    . substr($base16Uuid, 8, 4)\n                    . '-'\n                    . substr($base16Uuid, 12, 4)\n                    . '-'\n                    . substr($base16Uuid, 16, 4)\n                    . '-'\n                    . substr($base16Uuid, 20, 12),\n            );\n        }\n\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return self::getFactory()->fromBytes($bytes);\n    }\n\n    /**\n     * Creates a UUID from the string standard representation\n     *\n     * @param string $uuid A hexadecimal string\n     *\n     * @return UuidInterface A UuidInterface instance created from a hexadecimal string representation\n     *\n     * @throws InvalidArgumentException\n     *\n     * @pure\n     */\n    public static function fromString(string $uuid): UuidInterface\n    {\n        $uuid = strtolower($uuid);\n        /** @phpstan-ignore impure.staticPropertyAccess, possiblyImpure.functionCall */\n        if (!self::$factoryReplaced && preg_match(LazyUuidFromString::VALID_REGEX, $uuid) === 1) {\n            /** @phpstan-ignore possiblyImpure.functionCall */\n            assert($uuid !== '');\n\n            /** @phpstan-ignore possiblyImpure.new */\n            return new LazyUuidFromString($uuid);\n        }\n\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return self::getFactory()->fromString($uuid);\n    }\n\n    /**\n     * Creates a UUID from a DateTimeInterface instance\n     *\n     * @param DateTimeInterface $dateTime The date and time\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 1 UUID created from a DateTimeInterface instance\n     */\n    public static function fromDateTime(\n        DateTimeInterface $dateTime,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null\n    ): UuidInterface {\n        return self::getFactory()->fromDateTime($dateTime, $node, $clockSeq);\n    }\n\n    /**\n     * Creates a UUID from the Hexadecimal object\n     *\n     * @param Hexadecimal $hex Hexadecimal object representing a hexadecimal number\n     *\n     * @return UuidInterface A UuidInterface instance created from the Hexadecimal object representing a hexadecimal number\n     *\n     * @throws InvalidArgumentException\n     *\n     * @pure\n     */\n    public static function fromHexadecimal(Hexadecimal $hex): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $factory = self::getFactory();\n\n        if (method_exists($factory, 'fromHexadecimal')) {\n            /** @phpstan-ignore possiblyImpure.methodCall */\n            $uuid = $factory->fromHexadecimal($hex);\n            /** @phpstan-ignore possiblyImpure.functionCall */\n            assert($uuid instanceof UuidInterface);\n\n            return $uuid;\n        }\n\n        throw new BadMethodCallException('The method fromHexadecimal() does not exist on the provided factory');\n    }\n\n    /**\n     * Creates a UUID from a 128-bit integer string\n     *\n     * @param string $integer String representation of 128-bit integer\n     *\n     * @return UuidInterface A UuidInterface instance created from the string representation of a 128-bit integer\n     *\n     * @throws InvalidArgumentException\n     *\n     * @pure\n     */\n    public static function fromInteger(string $integer): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return self::getFactory()->fromInteger($integer);\n    }\n\n    /**\n     * Returns true if the provided string is a valid UUID\n     *\n     * @param string $uuid A string to validate as a UUID\n     *\n     * @return bool True if the string is a valid UUID, false otherwise\n     *\n     * @phpstan-assert-if-true =non-empty-string $uuid\n     *\n     * @pure\n     */\n    public static function isValid(string $uuid): bool\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall, possiblyImpure.methodCall */\n        return self::getFactory()->getValidator()->validate($uuid);\n    }\n\n    /**\n     * Returns a version 1 (Gregorian time) UUID from a host ID, sequence number, and the current time\n     *\n     * @param Hexadecimal | int | string | null $node A 48-bit number representing the hardware address; this number may\n     *     be represented as an integer or a hexadecimal string\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 1 UUID\n     */\n    public static function uuid1($node = null, ?int $clockSeq = null): UuidInterface\n    {\n        return self::getFactory()->uuid1($node, $clockSeq);\n    }\n\n    /**\n     * Returns a version 2 (DCE Security) UUID from a local domain, local identifier, host ID, clock sequence, and the current time\n     *\n     * @param int $localDomain The local domain to use when generating bytes, according to DCE Security\n     * @param IntegerObject | null $localIdentifier The local identifier for the given domain; this may be a UID or GID\n     *     on POSIX systems, if the local domain is \"person\" or \"group,\" or it may be a site-defined identifier if the\n     *     local domain is \"org\"\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes (in a version 2 UUID, the lower 8 bits of this number are\n     *     replaced with the domain).\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 2 UUID\n     */\n    public static function uuid2(\n        int $localDomain,\n        ?IntegerObject $localIdentifier = null,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null\n    ): UuidInterface {\n        return self::getFactory()->uuid2($localDomain, $localIdentifier, $node, $clockSeq);\n    }\n\n    /**\n     * Returns a version 3 (name-based) UUID based on the MD5 hash of a namespace ID and a name\n     *\n     * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n     * @param string $name The name to use for creating a UUID\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 3 UUID\n     *\n     * @pure\n     */\n    public static function uuid3($ns, string $name): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return self::getFactory()->uuid3($ns, $name);\n    }\n\n    /**\n     * Returns a version 4 (random) UUID\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 4 UUID\n     */\n    public static function uuid4(): UuidInterface\n    {\n        return self::getFactory()->uuid4();\n    }\n\n    /**\n     * Returns a version 5 (name-based) UUID based on the SHA-1 hash of a namespace ID and a name\n     *\n     * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n     * @param string $name The name to use for creating a UUID\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 5 UUID\n     *\n     * @pure\n     */\n    public static function uuid5($ns, string $name): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return self::getFactory()->uuid5($ns, $name);\n    }\n\n    /**\n     * Returns a version 6 (reordered Gregorian time) UUID from a host ID, sequence number, and the current time\n     *\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 6 UUID\n     */\n    public static function uuid6(\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null\n    ): UuidInterface {\n        return self::getFactory()->uuid6($node, $clockSeq);\n    }\n\n    /**\n     * Returns a version 7 (Unix Epoch time) UUID\n     *\n     * @param DateTimeInterface | null $dateTime An optional date/time from which to create the version 7 UUID. If not\n     *     provided, the UUID is generated using the current date/time.\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 7 UUID\n     */\n    public static function uuid7(?DateTimeInterface $dateTime = null): UuidInterface\n    {\n        $factory = self::getFactory();\n\n        if (method_exists($factory, 'uuid7')) {\n            /** @var UuidInterface */\n            return $factory->uuid7($dateTime);\n        }\n\n        throw new UnsupportedOperationException('The provided factory does not support the uuid7() method');\n    }\n\n    /**\n     * Returns a version 8 (custom format) UUID\n     *\n     * The bytes provided may contain any value according to your application's needs. Be aware, however, that other\n     * applications may not understand the semantics of the value.\n     *\n     * @param string $bytes A 16-byte octet string. This is an open blob of data that you may fill with 128 bits of\n     *     information. Be aware, however, bits 48 through 51 will be replaced with the UUID version field, and bits 64\n     *     and 65 will be replaced with the UUID variant. You MUST NOT rely on these bits for your application needs.\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 8 UUID\n     *\n     * @pure\n     */\n    public static function uuid8(string $bytes): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        $factory = self::getFactory();\n\n        if (method_exists($factory, 'uuid8')) {\n            /**\n             * @var UuidInterface\n             * @phpstan-ignore possiblyImpure.methodCall\n             */\n            return $factory->uuid8($bytes);\n        }\n\n        throw new UnsupportedOperationException('The provided factory does not support the uuid8() method');\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/UuidFactory.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Builder\\UuidBuilderInterface;\nuse Ramsey\\Uuid\\Codec\\CodecInterface;\nuse Ramsey\\Uuid\\Converter\\NumberConverterInterface;\nuse Ramsey\\Uuid\\Converter\\TimeConverterInterface;\nuse Ramsey\\Uuid\\Generator\\DceSecurityGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\DefaultTimeGenerator;\nuse Ramsey\\Uuid\\Generator\\NameGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\RandomGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\TimeGeneratorInterface;\nuse Ramsey\\Uuid\\Generator\\UnixTimeGenerator;\nuse Ramsey\\Uuid\\Lazy\\LazyUuidFromString;\nuse Ramsey\\Uuid\\Provider\\NodeProviderInterface;\nuse Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Type\\Time;\nuse Ramsey\\Uuid\\Validator\\ValidatorInterface;\n\nuse function bin2hex;\nuse function hex2bin;\nuse function pack;\nuse function str_pad;\nuse function strtolower;\nuse function substr;\nuse function substr_replace;\nuse function unpack;\n\nuse const STR_PAD_LEFT;\n\nclass UuidFactory implements UuidFactoryInterface\n{\n    private CodecInterface $codec;\n    private DceSecurityGeneratorInterface $dceSecurityGenerator;\n    private NameGeneratorInterface $nameGenerator;\n    private NodeProviderInterface $nodeProvider;\n    private NumberConverterInterface $numberConverter;\n    private RandomGeneratorInterface $randomGenerator;\n    private TimeConverterInterface $timeConverter;\n    private TimeGeneratorInterface $timeGenerator;\n    private TimeGeneratorInterface $unixTimeGenerator;\n    private UuidBuilderInterface $uuidBuilder;\n    private ValidatorInterface $validator;\n\n    /**\n     * @var bool whether the feature set was provided from outside, or we can operate under \"default\" assumptions\n     */\n    private bool $isDefaultFeatureSet;\n\n    /**\n     * @param FeatureSet | null $features A set of available features in the current environment\n     */\n    public function __construct(?FeatureSet $features = null)\n    {\n        $this->isDefaultFeatureSet = $features === null;\n\n        $features = $features ?: new FeatureSet();\n\n        $this->codec = $features->getCodec();\n        $this->dceSecurityGenerator = $features->getDceSecurityGenerator();\n        $this->nameGenerator = $features->getNameGenerator();\n        $this->nodeProvider = $features->getNodeProvider();\n        $this->numberConverter = $features->getNumberConverter();\n        $this->randomGenerator = $features->getRandomGenerator();\n        $this->timeConverter = $features->getTimeConverter();\n        $this->timeGenerator = $features->getTimeGenerator();\n        $this->uuidBuilder = $features->getBuilder();\n        $this->validator = $features->getValidator();\n        $this->unixTimeGenerator = $features->getUnixTimeGenerator();\n    }\n\n    /**\n     * Returns the codec used by this factory\n     */\n    public function getCodec(): CodecInterface\n    {\n        return $this->codec;\n    }\n\n    /**\n     * Sets the codec to use for this factory\n     *\n     * @param CodecInterface $codec A UUID encoder-decoder\n     */\n    public function setCodec(CodecInterface $codec): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->codec = $codec;\n    }\n\n    /**\n     * Returns the name generator used by this factory\n     */\n    public function getNameGenerator(): NameGeneratorInterface\n    {\n        return $this->nameGenerator;\n    }\n\n    /**\n     * Sets the name generator to use for this factory\n     *\n     * @param NameGeneratorInterface $nameGenerator A generator to generate binary data, based on a namespace and name\n     */\n    public function setNameGenerator(NameGeneratorInterface $nameGenerator): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->nameGenerator = $nameGenerator;\n    }\n\n    /**\n     * Returns the node provider used by this factory\n     */\n    public function getNodeProvider(): NodeProviderInterface\n    {\n        return $this->nodeProvider;\n    }\n\n    /**\n     * Returns the random generator used by this factory\n     */\n    public function getRandomGenerator(): RandomGeneratorInterface\n    {\n        return $this->randomGenerator;\n    }\n\n    /**\n     * Returns the time generator used by this factory\n     */\n    public function getTimeGenerator(): TimeGeneratorInterface\n    {\n        return $this->timeGenerator;\n    }\n\n    /**\n     * Sets the time generator to use for this factory\n     *\n     * @param TimeGeneratorInterface $generator A generator to generate binary data, based on the time\n     */\n    public function setTimeGenerator(TimeGeneratorInterface $generator): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->timeGenerator = $generator;\n    }\n\n    /**\n     * Returns the DCE Security generator used by this factory\n     */\n    public function getDceSecurityGenerator(): DceSecurityGeneratorInterface\n    {\n        return $this->dceSecurityGenerator;\n    }\n\n    /**\n     * Sets the DCE Security generator to use for this factory\n     *\n     * @param DceSecurityGeneratorInterface $generator A generator to generate binary data, based on a local domain and\n     *     local identifier\n     */\n    public function setDceSecurityGenerator(DceSecurityGeneratorInterface $generator): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->dceSecurityGenerator = $generator;\n    }\n\n    /**\n     * Returns the number converter used by this factory\n     */\n    public function getNumberConverter(): NumberConverterInterface\n    {\n        return $this->numberConverter;\n    }\n\n    /**\n     * Sets the random generator to use for this factory\n     *\n     * @param RandomGeneratorInterface $generator A generator to generate binary data, based on some random input\n     */\n    public function setRandomGenerator(RandomGeneratorInterface $generator): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->randomGenerator = $generator;\n    }\n\n    /**\n     * Sets the number converter to use for this factory\n     *\n     * @param NumberConverterInterface $converter A converter to use for working with large integers (i.e., integers\n     *     greater than PHP_INT_MAX)\n     */\n    public function setNumberConverter(NumberConverterInterface $converter): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->numberConverter = $converter;\n    }\n\n    /**\n     * Returns the UUID builder used by this factory\n     */\n    public function getUuidBuilder(): UuidBuilderInterface\n    {\n        return $this->uuidBuilder;\n    }\n\n    /**\n     * Sets the UUID builder to use for this factory\n     *\n     * @param UuidBuilderInterface $builder A builder for constructing instances of UuidInterface\n     */\n    public function setUuidBuilder(UuidBuilderInterface $builder): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->uuidBuilder = $builder;\n    }\n\n    public function getValidator(): ValidatorInterface\n    {\n        return $this->validator;\n    }\n\n    /**\n     * Sets the validator to use for this factory\n     *\n     * @param ValidatorInterface $validator A validator to use for validating whether a string is a valid UUID\n     */\n    public function setValidator(ValidatorInterface $validator): void\n    {\n        $this->isDefaultFeatureSet = false;\n\n        $this->validator = $validator;\n    }\n\n    /**\n     * @pure\n     */\n    public function fromBytes(string $bytes): UuidInterface\n    {\n        return $this->codec->decodeBytes($bytes);\n    }\n\n    /**\n     * @pure\n     */\n    public function fromString(string $uuid): UuidInterface\n    {\n        $uuid = strtolower($uuid);\n\n        return $this->codec->decode($uuid);\n    }\n\n    /**\n     * @pure\n     */\n    public function fromInteger(string $integer): UuidInterface\n    {\n        $hex = $this->numberConverter->toHex($integer);\n        $hex = str_pad($hex, 32, '0', STR_PAD_LEFT);\n\n        return $this->fromString($hex);\n    }\n\n    public function fromDateTime(\n        DateTimeInterface $dateTime,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null,\n    ): UuidInterface {\n        $timeProvider = new FixedTimeProvider(new Time($dateTime->format('U'), $dateTime->format('u')));\n        $timeGenerator = new DefaultTimeGenerator($this->nodeProvider, $this->timeConverter, $timeProvider);\n        $bytes = $timeGenerator->generate($node?->toString(), $clockSeq);\n\n        return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_TIME);\n    }\n\n    /**\n     * @pure\n     */\n    public function fromHexadecimal(Hexadecimal $hex): UuidInterface\n    {\n        return $this->codec->decode($hex->__toString());\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function uuid1($node = null, ?int $clockSeq = null): UuidInterface\n    {\n        $bytes = $this->timeGenerator->generate($node, $clockSeq);\n\n        return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_TIME);\n    }\n\n    public function uuid2(\n        int $localDomain,\n        ?IntegerObject $localIdentifier = null,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null,\n    ): UuidInterface {\n        $bytes = $this->dceSecurityGenerator->generate($localDomain, $localIdentifier, $node, $clockSeq);\n\n        return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_DCE_SECURITY);\n    }\n\n    /**\n     * @inheritDoc\n     * @pure\n     */\n    public function uuid3($ns, string $name): UuidInterface\n    {\n        return $this->uuidFromNsAndName($ns, $name, Uuid::UUID_TYPE_HASH_MD5, 'md5');\n    }\n\n    public function uuid4(): UuidInterface\n    {\n        $bytes = $this->randomGenerator->generate(16);\n\n        return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_RANDOM);\n    }\n\n    /**\n     * @inheritDoc\n     * @pure\n     */\n    public function uuid5($ns, string $name): UuidInterface\n    {\n        return $this->uuidFromNsAndName($ns, $name, Uuid::UUID_TYPE_HASH_SHA1, 'sha1');\n    }\n\n    public function uuid6(?Hexadecimal $node = null, ?int $clockSeq = null): UuidInterface\n    {\n        $bytes = $this->timeGenerator->generate($node?->toString(), $clockSeq);\n\n        // Rearrange the bytes, according to the UUID version 6 specification.\n        $v6 = $bytes[6] . $bytes[7] . $bytes[4] . $bytes[5]\n            . $bytes[0] . $bytes[1] . $bytes[2] . $bytes[3];\n        $v6 = bin2hex($v6);\n\n        // Drop the first four bits, while adding an empty four bits for the version field. This allows us to\n        // reconstruct the correct time from the bytes of this UUID.\n        $v6Bytes = hex2bin(substr($v6, 1, 12) . '0' . substr($v6, -3));\n        $v6Bytes .= substr($bytes, 8);\n\n        return $this->uuidFromBytesAndVersion($v6Bytes, Uuid::UUID_TYPE_REORDERED_TIME);\n    }\n\n    /**\n     * Returns a version 7 (Unix Epoch time) UUID\n     *\n     * @param DateTimeInterface | null $dateTime An optional date/time from which to create the version 7 UUID. If not\n     *     provided, the UUID is generated using the current date/time.\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 7 UUID\n     */\n    public function uuid7(?DateTimeInterface $dateTime = null): UuidInterface\n    {\n        assert($this->unixTimeGenerator instanceof UnixTimeGenerator);\n        $bytes = $this->unixTimeGenerator->generate(null, null, $dateTime);\n\n        return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_UNIX_TIME);\n    }\n\n    /**\n     * Returns a version 8 (custom format) UUID\n     *\n     * The bytes provided may contain any value according to your application's needs. Be aware, however, that other\n     * applications may not understand the semantics of the value.\n     *\n     * @param string $bytes A 16-byte octet string. This is an open blob of data that you may fill with 128 bits of\n     *     information. Be aware, however, bits 48 through 51 will be replaced with the UUID version field, and bits 64\n     *     and 65 will be replaced with the UUID variant. You MUST NOT rely on these bits for your application needs.\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 8 UUID\n     *\n     * @pure\n     */\n    public function uuid8(string $bytes): UuidInterface\n    {\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return $this->uuidFromBytesAndVersion($bytes, Uuid::UUID_TYPE_CUSTOM);\n    }\n\n    /**\n     * Returns a Uuid created from the provided byte string\n     *\n     * Uses the configured builder and codec and the provided byte string to construct a Uuid object.\n     *\n     * @param string $bytes The byte string from which to construct a UUID\n     *\n     * @return UuidInterface An instance of UuidInterface, created from the provided bytes\n     *\n     * @pure\n     */\n    public function uuid(string $bytes): UuidInterface\n    {\n        return $this->uuidBuilder->build($this->codec, $bytes);\n    }\n\n    /**\n     * Returns a version 3 or 5 namespaced Uuid\n     *\n     * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n     * @param string $name The name to hash together with the namespace\n     * @param int $version The version of UUID to create (3 or 5)\n     * @param string $hashAlgorithm The hashing algorithm to use when hashing together the namespace and name\n     *\n     * @return UuidInterface An instance of UuidInterface, created by hashing together the provided namespace and name\n     *\n     * @pure\n     */\n    private function uuidFromNsAndName(\n        UuidInterface | string $ns,\n        string $name,\n        int $version,\n        string $hashAlgorithm,\n    ): UuidInterface {\n        if (!($ns instanceof UuidInterface)) {\n            $ns = $this->fromString($ns);\n        }\n\n        $bytes = $this->nameGenerator->generate($ns, $name, $hashAlgorithm);\n\n        /** @phpstan-ignore possiblyImpure.methodCall */\n        return $this->uuidFromBytesAndVersion(substr($bytes, 0, 16), $version);\n    }\n\n    /**\n     * Returns a Uuid created from the provided bytes and version\n     *\n     * @param string $bytes The byte string to convert to a UUID\n     * @param int $version The version to apply to the UUID\n     *\n     * @return UuidInterface An instance of UuidInterface, created from the byte string and version\n     */\n    private function uuidFromBytesAndVersion(string $bytes, int $version): UuidInterface\n    {\n        /** @var int[] $unpackedTime */\n        $unpackedTime = unpack('n*', substr($bytes, 6, 2));\n        $timeHi = $unpackedTime[1];\n        $timeHiAndVersion = pack('n*', BinaryUtils::applyVersion($timeHi, $version));\n\n        /** @var int[] $unpackedClockSeq */\n        $unpackedClockSeq = unpack('n*', substr($bytes, 8, 2));\n        $clockSeqHi = $unpackedClockSeq[1];\n        $clockSeqHiAndReserved = pack('n*', BinaryUtils::applyVariant($clockSeqHi));\n\n        $bytes = substr_replace($bytes, $timeHiAndVersion, 6, 2);\n        $bytes = substr_replace($bytes, $clockSeqHiAndReserved, 8, 2);\n\n        if ($this->isDefaultFeatureSet) {\n            return LazyUuidFromString::fromBytes($bytes);\n        }\n\n        return $this->uuid($bytes);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/UuidFactoryInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Ramsey\\Uuid\\Validator\\ValidatorInterface;\n\n/**\n * UuidFactoryInterface defines the common functionality all `UuidFactory` instances must implement\n */\ninterface UuidFactoryInterface\n{\n    /**\n     * Creates a UUID from a byte string\n     *\n     * @param string $bytes A binary string\n     *\n     * @return UuidInterface A UuidInterface instance created from a binary string representation\n     *\n     * @pure\n     */\n    public function fromBytes(string $bytes): UuidInterface;\n\n    /**\n     * Creates a UUID from a DateTimeInterface instance\n     *\n     * @param DateTimeInterface $dateTime The date and time\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 1 UUID created from a DateTimeInterface instance\n     */\n    public function fromDateTime(\n        DateTimeInterface $dateTime,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null,\n    ): UuidInterface;\n\n    /**\n     * Creates a UUID from a 128-bit integer string\n     *\n     * @param string $integer String representation of 128-bit integer\n     *\n     * @return UuidInterface A UuidInterface instance created from the string representation of a 128-bit integer\n     *\n     * @pure\n     */\n    public function fromInteger(string $integer): UuidInterface;\n\n    /**\n     * Creates a UUID from the string standard representation\n     *\n     * @param string $uuid A hexadecimal string\n     *\n     * @return UuidInterface A UuidInterface instance created from a hexadecimal string representation\n     *\n     * @pure\n     */\n    public function fromString(string $uuid): UuidInterface;\n\n    /**\n     * Returns the validator used by the factory\n     */\n    public function getValidator(): ValidatorInterface;\n\n    /**\n     * Returns a version 1 (Gregorian time) UUID from a host ID, sequence number, and the current time\n     *\n     * @param Hexadecimal | int | string | null $node A 48-bit number representing the hardware address; this number may\n     *     be represented as an integer or a hexadecimal string\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 1 UUID\n     */\n    public function uuid1($node = null, ?int $clockSeq = null): UuidInterface;\n\n    /**\n     * Returns a version 2 (DCE Security) UUID from a local domain, local identifier, host ID, clock sequence, and the\n     * current time\n     *\n     * @param int $localDomain The local domain to use when generating bytes, according to DCE Security\n     * @param IntegerObject | null $localIdentifier The local identifier for the given domain; this may be a UID or GID\n     *     on POSIX systems, if the local domain is a person or group, or it may be a site-defined identifier if the\n     *     local domain is org\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 2 UUID\n     */\n    public function uuid2(\n        int $localDomain,\n        ?IntegerObject $localIdentifier = null,\n        ?Hexadecimal $node = null,\n        ?int $clockSeq = null,\n    ): UuidInterface;\n\n    /**\n     * Returns a version 3 (name-based) UUID based on the MD5 hash of a namespace ID and a name\n     *\n     * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n     * @param string $name The name to use for creating a UUID\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 3 UUID\n     *\n     * @pure\n     */\n    public function uuid3($ns, string $name): UuidInterface;\n\n    /**\n     * Returns a version 4 (random) UUID\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 4 UUID\n     */\n    public function uuid4(): UuidInterface;\n\n    /**\n     * Returns a version 5 (name-based) UUID based on the SHA-1 hash of a namespace ID and a name\n     *\n     * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n     * @param string $name The name to use for creating a UUID\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 5 UUID\n     *\n     * @pure\n     */\n    public function uuid5($ns, string $name): UuidInterface;\n\n    /**\n     * Returns a version 6 (reordered Gregorian time) UUID from a host ID, sequence number, and the current time\n     *\n     * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n     * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n     *     backwards in time or if the node ID changes\n     *\n     * @return UuidInterface A UuidInterface instance that represents a version 6 UUID\n     */\n    public function uuid6(?Hexadecimal $node = null, ?int $clockSeq = null): UuidInterface;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/UuidInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse JsonSerializable;\nuse Ramsey\\Uuid\\Fields\\FieldsInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\nuse Serializable;\nuse Stringable;\n\n/**\n * A UUID is a universally unique identifier adhering to an agreed-upon representation format and standard for generation\n *\n * @immutable\n */\ninterface UuidInterface extends\n    DeprecatedUuidInterface,\n    JsonSerializable,\n    Serializable,\n    Stringable\n{\n    /**\n     * Returns -1, 0, or 1 if the UUID is less than, equal to, or greater than the other UUID\n     *\n     * The first of two UUIDs is greater than the second if the most significant field in which the UUIDs differ is\n     * greater for the first UUID.\n     *\n     * @param UuidInterface $other The UUID to compare\n     *\n     * @return int<-1,1> -1, 0, or 1 if the UUID is less than, equal to, or greater than $other\n     */\n    public function compareTo(UuidInterface $other): int;\n\n    /**\n     * Returns true if the UUID is equal to the provided object\n     *\n     * The result is true if and only if the argument is not null, is a UUID object, has the same variant, and contains\n     * the same value, bit-for-bit, as the UUID.\n     *\n     * @param object | null $other An object to test for equality with this UUID\n     *\n     * @return bool True if the other object is equal to this UUID\n     */\n    public function equals(?object $other): bool;\n\n    /**\n     * Returns the binary string representation of the UUID\n     *\n     * @return non-empty-string\n     *\n     * @pure\n     */\n    public function getBytes(): string;\n\n    /**\n     * Returns the fields that comprise this UUID\n     */\n    public function getFields(): FieldsInterface;\n\n    /**\n     * Returns the hexadecimal representation of the UUID\n     */\n    public function getHex(): Hexadecimal;\n\n    /**\n     * Returns the integer representation of the UUID\n     */\n    public function getInteger(): IntegerObject;\n\n    /**\n     * Returns the string standard representation of the UUID as a URN\n     *\n     * @link http://en.wikipedia.org/wiki/Uniform_Resource_Name Uniform Resource Name\n     * @link https://www.rfc-editor.org/rfc/rfc9562.html#section-4 RFC 9562, 4. UUID Format\n     * @link https://www.rfc-editor.org/rfc/rfc9562.html#section-7 RFC 9562, 7. IANA Considerations\n     * @link https://www.rfc-editor.org/rfc/rfc4122.html#section-3 RFC 4122, 3. Namespace Registration Template\n     */\n    public function getUrn(): string;\n\n    /**\n     * Returns the string standard representation of the UUID\n     *\n     * @return non-empty-string\n     *\n     * @pure\n     */\n    public function toString(): string;\n\n    /**\n     * Casts the UUID to the string standard representation\n     *\n     * @return non-empty-string\n     *\n     * @pure\n     */\n    public function __toString(): string;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Validator/GenericValidator.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Validator;\n\nuse Ramsey\\Uuid\\Uuid;\n\nuse function preg_match;\nuse function str_replace;\n\n/**\n * GenericValidator validates strings as UUIDs of any variant\n *\n * @immutable\n */\nfinal class GenericValidator implements ValidatorInterface\n{\n    /**\n     * Regular expression pattern for matching a UUID of any variant.\n     */\n    private const VALID_PATTERN = '\\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\z';\n\n    /**\n     * @return non-empty-string\n     */\n    public function getPattern(): string\n    {\n        return self::VALID_PATTERN;\n    }\n\n    public function validate(string $uuid): bool\n    {\n        /** @phpstan-ignore possiblyImpure.functionCall */\n        $uuid = str_replace(['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}'], '', $uuid);\n\n        /** @phpstan-ignore possiblyImpure.functionCall */\n        return $uuid === Uuid::NIL || preg_match('/' . self::VALID_PATTERN . '/Dms', $uuid);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid\\Validator;\n\n/**\n * A validator validates a string as a proper UUID\n *\n * @immutable\n */\ninterface ValidatorInterface\n{\n    /**\n     * Returns the regular expression pattern used by this validator\n     *\n     * @return non-empty-string The regular expression pattern this validator uses\n     */\n    public function getPattern(): string;\n\n    /**\n     * Returns true if the provided string represents a UUID\n     *\n     * @param string $uuid The string to validate as a UUID\n     *\n     * @return bool True if the string is a valid UUID, false otherwise\n     *\n     * @pure\n     */\n    public function validate(string $uuid): bool;\n}\n"
  },
  {
    "path": "lib/Google/vendor/ramsey/uuid/src/functions.php",
    "content": "<?php\n\n/**\n * This file is part of the ramsey/uuid library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>\n * @license http://opensource.org/licenses/MIT MIT\n * phpcs:disable Squiz.Functions.GlobalFunction\n */\n\ndeclare(strict_types=1);\n\nnamespace Ramsey\\Uuid;\n\nuse DateTimeInterface;\nuse Ramsey\\Uuid\\Type\\Hexadecimal;\nuse Ramsey\\Uuid\\Type\\Integer as IntegerObject;\n\n/**\n * Returns a version 1 (Gregorian time) UUID from a host ID, sequence number, and the current time\n *\n * @param Hexadecimal | int | string | null $node A 48-bit number representing the hardware address; this number may be\n *     represented as an integer or a hexadecimal string\n * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n *     backwards in time or if the node ID changes\n *\n * @return non-empty-string Version 1 UUID as a string\n */\nfunction v1($node = null, ?int $clockSeq = null): string\n{\n    return Uuid::uuid1($node, $clockSeq)->toString();\n}\n\n/**\n * Returns a version 2 (DCE Security) UUID from a local domain, local identifier, host ID, clock sequence, and the current time\n *\n * @param int $localDomain The local domain to use when generating bytes, according to DCE Security\n * @param IntegerObject | null $localIdentifier The local identifier for the given domain; this may be a UID or GID on\n *     POSIX systems, if the local domain is a person or group, or it may be a site-defined identifier if the local\n *     domain is org\n * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n *     backwards in time or if the node ID changes\n *\n * @return non-empty-string Version 2 UUID as a string\n */\nfunction v2(\n    int $localDomain,\n    ?IntegerObject $localIdentifier = null,\n    ?Hexadecimal $node = null,\n    ?int $clockSeq = null,\n): string {\n    return Uuid::uuid2($localDomain, $localIdentifier, $node, $clockSeq)->toString();\n}\n\n/**\n * Returns a version 3 (name-based) UUID based on the MD5 hash of a namespace ID and a name\n *\n * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n *\n * @return non-empty-string Version 3 UUID as a string\n *\n * @pure\n */\nfunction v3($ns, string $name): string\n{\n    return Uuid::uuid3($ns, $name)->toString();\n}\n\n/**\n * Returns a version 4 (random) UUID\n *\n * @return non-empty-string Version 4 UUID as a string\n */\nfunction v4(): string\n{\n    return Uuid::uuid4()->toString();\n}\n\n/**\n * Returns a version 5 (name-based) UUID based on the SHA-1 hash of a namespace ID and a name\n *\n * @param UuidInterface | string $ns The namespace (must be a valid UUID)\n *\n * @return non-empty-string Version 5 UUID as a string\n *\n * @pure\n */\nfunction v5($ns, string $name): string\n{\n    return Uuid::uuid5($ns, $name)->toString();\n}\n\n/**\n * Returns a version 6 (reordered Gregorian time) UUID from a host ID, sequence number, and the current time\n *\n * @param Hexadecimal | null $node A 48-bit number representing the hardware address\n * @param int | null $clockSeq A 14-bit number used to help avoid duplicates that could arise when the clock is set\n *     backwards in time or if the node ID changes\n *\n * @return non-empty-string Version 6 UUID as a string\n */\nfunction v6(?Hexadecimal $node = null, ?int $clockSeq = null): string\n{\n    return Uuid::uuid6($node, $clockSeq)->toString();\n}\n\n/**\n * Returns a version 7 (Unix Epoch time) UUID\n *\n * @param DateTimeInterface|null $dateTime An optional date/time from which to create the version 7 UUID. If not\n *     provided, the UUID is generated using the current date/time.\n *\n * @return non-empty-string Version 7 UUID as a string\n */\nfunction v7(?DateTimeInterface $dateTime = null): string\n{\n    return Uuid::uuid7($dateTime)->toString();\n}\n\n/**\n * Returns a version 8 (custom format) UUID\n *\n * The bytes provided may contain any value according to your application's needs. Be aware, however, that other\n * applications may not understand the semantics of the value.\n *\n * @param string $bytes A 16-byte octet string. This is an open blob of data that you may fill with 128 bits of\n *     information. Be aware, however, bits 48 through 51 will be replaced with the UUID version field, and bits 64 and\n *     65 will be replaced with the UUID variant. You MUST NOT rely on these bits for your application needs.\n *\n * @return non-empty-string Version 8 UUID as a string\n *\n * @pure\n */\nfunction v8(string $bytes): string\n{\n    return Uuid::uuid8($bytes)->toString();\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/.php-cs-fixer.dist.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nuse PhpCsFixer\\Config;\nuse PhpCsFixer\\Finder;\nuse PhpCsFixer\\Runner\\Parallel\\ParallelConfigFactory;\n\nreturn (new Config())\n    ->setParallelConfig(ParallelConfigFactory::detect())\n    ->setRiskyAllowed(true)\n    ->setUsingCache(false)\n    ->setRules([\n        '@PER-CS2.0' => true,\n    ])\n    ->setFinder(\n        (new Finder())\n            ->in([__DIR__ . '/src', __DIR__ . '/tests'])\n    );"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) [2014] [Marut Khumtong]\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/README.md",
    "content": "# PHP URI Template\n\nThis is a URI Template implementation in PHP based on [RFC 6570 URI Template](http://tools.ietf.org/html/rfc6570). In addition to URI expansion, it also supports URI extraction (used by [Google Cloud Core](https://github.com/googleapis/google-cloud-php-core) and [Google Cloud Client Library](https://github.com/googleapis/google-cloud-php)).\n\n![CI](https://github.com/rize/UriTemplate/workflows/CI/badge.svg) [![Total Downloads](https://poser.pugx.org/rize/uri-template/downloads)](https://packagist.org/packages/rize/uri-template) [![Latest Stable Version](https://poser.pugx.org/rize/uri-template/v)](https://packagist.org/packages/rize/uri-template) [![PHP Version Require](https://poser.pugx.org/rize/uri-template/require/php)](https://packagist.org/packages/rize/uri-template)\n\n> [!NOTE]\n>\n> Due to the deprecation of implictly nullable parameter types in [PHP 8.4](https://wiki.php.net/rfc/deprecate-implicitly-nullable-types), we must introduce breaking change by adding explicit nullable types (`?T`) which requires PHP 7.1+.\n>\n> As a result, version [0.4.0](https://github.com/rize/UriTemplate/releases/tag/0.4.0) and later will no longer support PHP versions below 8.1.\n\n## Usage\n\n### Expansion\n\nA very simple usage (string expansion).\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate();\n$uri->expand('/{username}/profile', ['username' => 'john']);\n\n>> '/john/profile'\n```\n\n`Rize\\UriTemplate` supports all `Expression Types` and `Levels` specified by RFC6570.\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate();\n$uri->expand('/search/{term:1}/{term}/{?q*,limit}', [\n    'term'  => 'john',\n    'q'     => ['a', 'b'],\n    'limit' => 10,\n])\n\n>> '/search/j/john/?q=a&q=b&limit=10'\n```\n\n#### `/` Path segment expansion\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate();\n$uri->expand('http://{host}{/segments*}/{file}{.extensions*}', [\n    'host'       => 'www.host.com',\n    'segments'   => ['path', 'to', 'a'],\n    'file'       => 'file',\n    'extensions' => ['x', 'y'],\n]);\n\n>> 'http://www.host.com/path/to/a/file.x.y'\n```\n\n`Rize\\UriTemplate` accepts `base-uri` as a 1st argument and `default params` as a 2nd argument. This is very useful when you're working with API endpoint.\n\nTake a look at real world example.\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate('https://api.twitter.com/{version}', ['version' => 1.1]);\n$uri->expand('/statuses/show/{id}.json', ['id' => '210462857140252672']);\n\n>> https://api.twitter.com/1.1/statuses/show/210462857140252672.json\n```\n\n### Extraction\n\nIt also supports URI Extraction (extract all variables from URI). Let's take a look at the example.\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate('https://api.twitter.com/{version}', ['version' => 1.1]);\n\n$params = $uri->extract('/search/{term:1}/{term}/{?q*,limit}', '/search/j/john/?q=a&q=b&limit=10');\n\n>> print_r($params);\n(\n    [term:1] => j\n    [term] => john\n    [q] => Array\n        (\n            [0] => a\n            [1] => b\n        )\n\n    [limit] => 10\n)\n```\n\nNote that in the example above, result returned by `extract` method has an extra keys named `term:1` for `prefix` modifier. This key was added just for our convenience to access prefix data.\n\n#### `strict` mode\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate();\n$uri->extract($template, $uri, $strict = false)\n```\n\nNormally `extract` method will try to extract vars from a uri even if it's partially matched. For example\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate();\n$params = $uri->extract('/{?a,b}', '/?a=1')\n\n>> print_r($params);\n(\n    [a] => 1\n    [b] => null\n)\n```\n\nWith `strict mode`, it will allow you to extract uri only when variables in template are fully matched with given uri.\n\nWhich is useful when you want to determine whether the given uri is matched against your template or not (in case you want to use it as routing service).\n\n```php\n<?php\n\nuse Rize\\UriTemplate;\n\n$uri = new UriTemplate();\n\n// Note that variable `b` is absent in uri\n$params = $uri->extract('/{?a,b}', '/?a=1', true);\n\n>>> null\n\n// Now we give `b` some value\n$params = $uri->extract('/{?a,b}', '/?a=1&b=2', true);\n\n>>> print_r($params)\n(\n  [a] => 1\n  [b] => 2\n)\n```\n\n#### Array modifier `%`\n\nBy default, RFC 6570 only has 2 types of operators `:` and `*`. This `%` array operator was added to the library because current spec can't handle array style query e.g. `list[]=a` or `key[user]=john`.\n\nExample usage for `%` modifier\n\n```php\n<?php\n\n$uri->expand('{?list%,keys%}', [\n    'list' => [\n        'a', 'b',\n    ),\n    'keys' => [\n        'a' => 1,\n        'b' => 2,\n    ),\n]);\n\n// '?list[]=a&list[]=b&keys[a]=1&keys[b]=2'\n>> '?list%5B%5D=a&list%5B%5D=b&keys%5Ba%5D=1&keys%5Bb%5D=2'\n\n// [] get encoded to %5B%5D i.e. '?list[]=a&list[]=b&keys[a]=1&keys[b]=2'\n$params = $uri->extract('{?list%,keys%}', '?list%5B%5D=a&list%5B%5D=b&keys%5Ba%5D=1&keys%5Bb%5D=2', )\n\n>> print_r($params);\n(\n    [list] => Array\n        (\n            [0] => a\n            [1] => b\n        )\n\n    [keys] => Array\n        (\n            [a] => 1\n            [b] => 2\n        )\n)\n```\n\n## Installation\n\nUsing `composer`\n\n```\n{\n    \"require\": {\n        \"rize/uri-template\": \"~0.3\"\n    }\n}\n```\n\n### Changelogs\n\n* **0.2.0** Add a new modifier `%` which allows user to use `list[]=a&list[]=b` query pattern.\n* **0.2.1** Add nested array support for `%` modifier\n* **0.2.5** Add strict mode support for `extract` method\n* **0.3.0** Improve code quality + RFC3986 support for `extract` method by @Maks3w\n* **0.3.1** Improve `extract` method to parse two or more adjacent variables separated by dot by @corleonis\n* **0.4.0** Fixes the deprecation of implicitly nullable parameter types introduced in PHP 8.4. This version requires PHP 8.1 or later.\n\n## Contributors\n\n### Code Contributors\n\nThis project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].\n<a href=\"https://github.com/rize/UriTemplate/graphs/contributors\"><img src=\"https://opencollective.com/rize-uri-template/contributors.svg?width=890&button=false\" /></a>\n\n### Financial Contributors\n\nBecome a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/rize-uri-template/contribute)]\n\n#### Individuals\n\n<a href=\"https://opencollective.com/rize-uri-template\"><img src=\"https://opencollective.com/rize-uri-template/individuals.svg?width=890\"></a>\n\n#### Organizations\n\nSupport this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/rize-uri-template/contribute)]\n\n<a href=\"https://opencollective.com/rize-uri-template/organization/0/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/1/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/2/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/3/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/4/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/5/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/6/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/7/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/8/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/rize-uri-template/organization/9/website\"><img src=\"https://opencollective.com/rize-uri-template/organization/9/avatar.svg\"></a>\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/composer.json",
    "content": "{\n    \"name\": \"rize/uri-template\",\n    \"type\": \"library\",\n    \"description\": \"PHP URI Template (RFC 6570) supports both expansion & extraction\",\n    \"keywords\": [\"URI\", \"Template\", \"RFC 6570\"],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Marut K\",\n            \"homepage\": \"http://twitter.com/rezigned\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.1\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"~10.0\",\n        \"phpstan/phpstan\": \"^1.12\",\n        \"friendsofphp/php-cs-fixer\": \"^3.63\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Rize\\\\\": \"src/Rize\"\n        }\n    },\n    \"scripts\": {\n        \"test\": \"vendor/bin/phpunit\",\n        \"cs\": \"vendor/bin/php-cs-fixer fix --dry-run\",\n        \"cs-fix\": \"vendor/bin/php-cs-fixer fix\",\n        \"phpstan\": \"vendor/bin/phpstan\"\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/phpstan.neon",
    "content": "parameters:\n    level: 5\n    paths:\n        - src\n        - tests"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"https://schema.phpunit.de/10.5/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         executionOrder=\"depends,defects\"\n         requireCoverageMetadata=\"false\"\n         beStrictAboutCoverageMetadata=\"false\"\n         beStrictAboutOutputDuringTests=\"true\"\n         failOnRisky=\"true\"\n         failOnWarning=\"true\">\n    <testsuites>\n        <testsuite name=\"default\">\n            <directory>tests</directory>\n        </testsuite>\n    </testsuites>\n\n    <source restrictDeprecations=\"true\" restrictNotices=\"true\" restrictWarnings=\"true\">\n        <include>\n            <directory>src</directory>\n        </include>\n    </source>\n</phpunit>\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Node/Abstraction.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Node;\n\nuse Rize\\UriTemplate\\Parser;\n\n/**\n * Base class for all Nodes.\n */\nabstract class Abstraction\n{\n    public function __construct(private readonly string $token) {}\n\n    /**\n     * Expands URI template\n     *\n     * @param array<string, mixed> $params\n     */\n    public function expand(Parser $parser, array $params = []): ?string\n    {\n        return $this->token;\n    }\n\n    /**\n     * Matches given URI against current node.\n     *\n     * @param array<string, mixed> $params\n     *\n     * @return null|array{0: string, 1: array<string, mixed>} `uri and params` or `null` if not match and $strict is true\n     */\n    public function match(Parser $parser, string $uri, array $params = [], bool $strict = false): ?array\n    {\n        // match literal string from start to end\n        if (str_starts_with($uri, $this->token)) {\n            $uri = substr($uri, strlen($this->token));\n        }\n\n        // when there's no match, just return null if strict mode is given\n        elseif ($strict) {\n            return null;\n        }\n\n        return [$uri, $params];\n    }\n\n    public function getToken(): string\n    {\n        return $this->token;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Node/Expression.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Node;\n\nuse Rize\\UriTemplate\\Operator;\nuse Rize\\UriTemplate\\Parser;\n\nclass Expression extends Abstraction\n{\n    /**\n     * @param string $forwardLookupSeparator\n     */\n    public function __construct(string $token, private readonly Operator\\Abstraction $operator, private readonly ?array $variables = null, /**\n     * Whether to do a forward lookup for a given separator.\n     */\n        private $forwardLookupSeparator = null)\n    {\n        parent::__construct($token);\n    }\n\n    public function getOperator(): Operator\\Abstraction\n    {\n        return $this->operator;\n    }\n\n    public function getVariables(): ?array\n    {\n        return $this->variables;\n    }\n\n    public function getForwardLookupSeparator(): string\n    {\n        return $this->forwardLookupSeparator;\n    }\n\n    public function setForwardLookupSeparator(string $forwardLookupSeparator): void\n    {\n        $this->forwardLookupSeparator = $forwardLookupSeparator;\n    }\n\n    public function expand(Parser $parser, array $params = []): ?string\n    {\n        $data = [];\n        $op = $this->operator;\n\n        if ($this->variables === null) {\n            return $op->first;\n        }\n\n        // check for variable modifiers\n        foreach ($this->variables as $var) {\n            $val = $op->expand($parser, $var, $params);\n\n            // skip null value\n            if (!is_null($val)) {\n                $data[] = $val;\n            }\n        }\n\n        return $data ? $op->first . implode($op->sep, $data) : null;\n    }\n\n    /**\n     * Matches given URI against current node.\n     *\n     * @return null|array `uri and params` or `null` if not match and $strict is true\n     */\n    public function match(Parser $parser, string $uri, array $params = [], bool $strict = false): ?array\n    {\n        $op = $this->operator;\n\n        // check expression operator first\n        if ($op->id && isset($uri[0]) && $uri[0] !== $op->id) {\n            return [$uri, $params];\n        }\n\n        // remove operator from input\n        if ($op->id) {\n            $uri = substr($uri, 1);\n        }\n\n        foreach ($this->sortVariables($this->variables) as $var) {\n            $regex = '#' . $op->toRegex($parser, $var) . '#';\n            $val   = null;\n\n            // do a forward lookup and get just the relevant part\n            $remainingUri = '';\n            $preparedUri = $uri;\n            if ($this->forwardLookupSeparator) {\n                $lastOccurrenceOfSeparator = stripos($uri, $this->forwardLookupSeparator);\n                $preparedUri = substr($uri, 0, $lastOccurrenceOfSeparator);\n                $remainingUri = substr($uri, $lastOccurrenceOfSeparator);\n            }\n\n            if (preg_match($regex, $preparedUri, $match)) {\n                // remove matched part from input\n                $preparedUri = preg_replace($regex, '', $preparedUri, 1);\n                $val = $op->extract($parser, $var, $match[0]);\n            }\n\n            // if strict is given, we quit immediately when there's no match\n            elseif ($strict) {\n                return null;\n            }\n\n            $uri = $preparedUri . $remainingUri;\n\n            $params[$var->getToken()] = $val;\n        }\n\n        return [$uri, $params];\n    }\n\n    /**\n     * Sort variables before extracting data from uri.\n     * We have to sort vars by non-explode to explode.\n     */\n    protected function sortVariables(array $vars): array\n    {\n        usort($vars, static fn($a, $b) => $a->options['modifier'] <=> $b->options['modifier']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Node/Literal.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Node;\n\nclass Literal extends Abstraction {}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Node/Variable.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Node;\n\nclass Variable extends Abstraction\n{\n    /**\n     * Variable name without modifier\n     * e.g. 'term:1' becomes 'term'.\n     */\n    public string $name;\n    public array $options = ['modifier' => null, 'value' => null];\n\n    public function __construct(string $token, array $options = [])\n    {\n        parent::__construct($token);\n        $this->options = $options + $this->options;\n\n        // normalize var name e.g. from 'term:1' becomes 'term'\n        $name = $token;\n        if ($options['modifier'] === ':') {\n            $name = strstr($name, $options['modifier'], true);\n        }\n\n        $this->name = $name;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Operator/Abstraction.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Operator;\n\nuse Rize\\UriTemplate\\Node;\nuse Rize\\UriTemplate\\Parser;\n\n/**\n * .------------------------------------------------------------------.\n * |          NUL     +      .       /       ;      ?      &      #   |\n * |------------------------------------------------------------------|\n * | first |  \"\"     \"\"     \".\"     \"/\"     \";\"    \"?\"    \"&\"    \"#\"  |\n * | sep   |  \",\"    \",\"    \".\"     \"/\"     \";\"    \"&\"    \"&\"    \",\"  |\n * | named | false  false  false   false   true   true   true   false |\n * | ifemp |  \"\"     \"\"     \"\"      \"\"      \"\"     \"=\"    \"=\"    \"\"   |\n * | allow |   U     U+R     U       U       U      U      U     U+R  |\n * `------------------------------------------------------------------'.\n *\n * named = false\n * | 1   |    {/list}    /red,green,blue                  | {$value}*(?:,{$value}+)*\n * | 2   |    {/list*}   /red/green/blue                  | {$value}+(?:{$sep}{$value}+)*\n * | 3   |    {/keys}    /semi,%3B,dot,.,comma,%2C        | /(\\w+,?)+\n * | 4   |    {/keys*}   /semi=%3B/dot=./comma=%2C        | /(?:\\w+=\\w+/?)*\n * named = true\n * | 1   |    {?list}    ?list=red,green,blue             | {name}=(?:\\w+(?:,\\w+?)*)*\n * | 2   |    {?list*}   ?list=red&list=green&list=blue   | {name}+=(?:{$value}+(?:{sep}{name}+={$value}*))*\n * | 3   |    {?keys}    ?keys=semi,%3B,dot,.,comma,%2C   | (same as 1)\n * | 4   |    {?keys*}   ?semi=%3B&dot=.&comma=%2C        | (same as 2)\n *\n * UNRESERVED\n * ----------\n * RFC 1738 ALPHA | DIGIT | \"-\" | \".\" | \"_\" |     | \"$\" | \"+\" | \"!\" | \"*\" | \"'\" | \"(\" | \")\" | \",\"\n * RFC 3986 ALPHA | DIGIT | \"-\" | \".\" | \"_\" | \"~\"\n * RFC 6570 ALPHA | DIGIT | \"-\" | \".\" | \"_\" | \"~\"\n *\n * RESERVED\n * --------\n * RFC 1738 \":\" | \"/\" | \"?\" |                 | \"@\" | \"!\" | \"$\" | \"&\" | \"'\" | \"(\" | \")\" | \"*\" | \"+\" | \",\" | \";\" | \"=\" | \"-\" | \"_\" | \".\" |\n * RFC 3986 \":\" | \"/\" | \"?\" | \"#\" | \"[\" | \"]\" | \"@\" | \"!\" | \"$\" | \"&\" | \"'\" | \"(\" | \")\" | \"*\" | \"+\" | \",\" | \";\" | \"=\"\n * RFC 6570 \":\" | \"/\" | \"?\" | \"#\" | \"[\" | \"]\" | \"@\" | \"!\" | \"$\" | \"&\" | \"'\" | \"(\" | \")\" | \"*\" | \"+\" | \",\" | \";\" | \"=\"\n *\n * PHP_QUERY_RFC3986 was added in PHP 5.4.0\n */\nabstract class Abstraction\n{\n    /**\n     * start - Variable offset position, level-2 operators start at 1\n     *         (exclude operator itself, e.g. {?query})\n     * first - If variables found, prepend this value to it\n     * named - Whether the expansion includes the variable or key name\n     * reserved - union of (unreserved / reserved / pct-encoded).\n     */\n    public $id;\n    public $named;\n    public $sep;\n    public $empty;\n    public $reserved;\n    public $start;\n    public $first;\n\n    /**\n     * gen-delims | sub-delims.\n     */\n    public static $reserved_chars = [\n        '%3A' => ':',\n        '%2F' => '/',\n        '%3F' => '?',\n        '%23' => '#',\n        '%5B' => '[',\n        '%5D' => ']',\n        '%40' => '@',\n        '%21' => '!',\n        '%24' => '$',\n        '%26' => '&',\n        '%27' => \"'\",\n        '%28' => '(',\n        '%29' => ')',\n        '%2A' => '*',\n        '%2B' => '+',\n        '%2C' => ',',\n        '%3B' => ';',\n        '%3D' => '=',\n    ];\n\n    protected static $types = [\n        '' => [\n            'sep' => ',',\n            'named' => false,\n            'empty' => '',\n            'reserved' => false,\n            'start' => 0,\n            'first' => null,\n        ],\n        '+' => [\n            'sep' => ',',\n            'named' => false,\n            'empty' => '',\n            'reserved' => true,\n            'start' => 1,\n            'first' => null,\n        ],\n        '.' => [\n            'sep' => '.',\n            'named' => false,\n            'empty' => '',\n            'reserved' => false,\n            'start' => 1,\n            'first' => '.',\n        ],\n        '/' => [\n            'sep' => '/',\n            'named' => false,\n            'empty' => '',\n            'reserved' => false,\n            'start' => 1,\n            'first' => '/',\n        ],\n        ';' => [\n            'sep' => ';',\n            'named' => true,\n            'empty' => '',\n            'reserved' => false,\n            'start' => 1,\n            'first' => ';',\n        ],\n        '?' => [\n            'sep' => '&',\n            'named' => true,\n            'empty' => '=',\n            'reserved' => false,\n            'start' => 1,\n            'first' => '?',\n        ],\n        '&' => [\n            'sep' => '&',\n            'named' => true,\n            'empty' => '=',\n            'reserved' => false,\n            'start' => 1,\n            'first' => '&',\n        ],\n        '#' => [\n            'sep' => ',',\n            'named' => false,\n            'empty' => '',\n            'reserved' => true,\n            'start' => 1,\n            'first' => '#',\n        ],\n    ];\n\n    protected static $loaded = [];\n\n    /**\n     * RFC 3986 Allowed path characters regex except the path delimiter '/'.\n     *\n     * @var string\n     */\n    protected static $pathRegex = '(?:[a-zA-Z0-9\\-\\._~!\\$&\\'\\(\\)\\*\\+,;=%:@]+|%(?![A-Fa-f0-9]{2}))';\n\n    /**\n     * RFC 3986 Allowed query characters regex except the query parameter delimiter '&'.\n     *\n     * @var string\n     */\n    protected static $queryRegex = '(?:[a-zA-Z0-9\\-\\._~!\\$\\'\\(\\)\\*\\+,;=%:@\\/\\?]+|%(?![A-Fa-f0-9]{2}))';\n\n    public function __construct($id, $named, $sep, $empty, $reserved, $start, $first)\n    {\n        $this->id = $id;\n        $this->named = $named;\n        $this->sep = $sep;\n        $this->empty = $empty;\n        $this->start = $start;\n        $this->first = $first;\n        $this->reserved = $reserved;\n    }\n\n    abstract public function toRegex(Parser $parser, Node\\Variable $var): string;\n\n    public function expand(Parser $parser, Node\\Variable $var, array $params = [])\n    {\n        $options    = $var->options;\n        $name       = $var->name;\n        $is_explode = in_array($options['modifier'], ['*', '%']);\n\n        // skip null\n        if (!isset($params[$name])) {\n            return null;\n        }\n\n        $val = $params[$name];\n\n        // This algorithm is based on RFC6570 http://tools.ietf.org/html/rfc6570\n        // non-array, e.g. string\n        if (!is_array($val)) {\n            return $this->expandString($parser, $var, $val);\n        }\n\n        // non-explode ':'\n        if (!$is_explode) {\n            return $this->expandNonExplode($parser, $var, $val);\n        }\n\n        // explode '*', '%'\n\n        return $this->expandExplode($parser, $var, $val);\n    }\n\n    public function expandString(Parser $parser, Node\\Variable $var, $val)\n    {\n        $val     = (string) $val;\n        $options = $var->options;\n        $result  = null;\n\n        if ($options['modifier'] === ':') {\n            $val = substr($val, 0, (int) $options['value']);\n        }\n\n        return $result . $this->encode($parser, $var, $val);\n    }\n\n    /**\n     * Non explode modifier ':'.\n     */\n    public function expandNonExplode(Parser $parser, Node\\Variable $var, array $val): ?string\n    {\n        if (empty($val)) {\n            return null;\n        }\n\n        return $this->encode($parser, $var, $val);\n    }\n\n    /**\n     * Explode modifier '*', '%'.\n     */\n    public function expandExplode(Parser $parser, Node\\Variable $var, array $val): ?string\n    {\n        if (empty($val)) {\n            return null;\n        }\n\n        return $this->encode($parser, $var, $val);\n    }\n\n    /**\n     * Encodes variable according to spec (reserved or unreserved).\n     *\n     * @return string encoded string\n     */\n    public function encode(Parser $parser, Node\\Variable $var, mixed $values)\n    {\n        $values    = (array) $values;\n        $list      = isset($values[0]);\n        $reserved  = $this->reserved;\n        $maps      = static::$reserved_chars;\n        $sep       = $this->sep;\n        $assoc_sep = '=';\n\n        // non-explode modifier always use ',' as a separator\n        if ($var->options['modifier'] !== '*') {\n            $assoc_sep = $sep = ',';\n        }\n\n        array_walk($values, function (&$v, $k) use ($assoc_sep, $reserved, $list, $maps): void {\n            $encoded = rawurlencode($v);\n\n            // assoc? encode key too\n            if (!$list) {\n                $encoded = rawurlencode($k) . $assoc_sep . $encoded;\n            }\n\n            // rawurlencode is compliant with 'unreserved' set\n            if (!$reserved) {\n                $v = $encoded;\n            }\n\n            // decode chars in reserved set\n            else {\n                $v = str_replace(\n                    array_keys($maps),\n                    $maps,\n                    $encoded,\n                );\n            }\n        });\n\n        return implode($sep, $values);\n    }\n\n    /**\n     * Decodes variable.\n     *\n     * @return string decoded string\n     */\n    public function decode(Parser $parser, Node\\Variable $var, mixed $values)\n    {\n        $single = !is_array($values);\n        $values = (array) $values;\n\n        array_walk($values, function (&$v, $k): void {\n            $v = rawurldecode($v);\n        });\n\n        return $single ? reset($values) : $values;\n    }\n\n    /**\n     * Extracts value from variable.\n     */\n    public function extract(Parser $parser, Node\\Variable $var, string $data): array|string\n    {\n        $value = $data;\n        $vals = array_filter(explode($this->sep, $data));\n        $options = $var->options;\n\n        switch ($options['modifier']) {\n            case '*':\n                $value = [];\n                foreach ($vals as $val) {\n                    if (str_contains($val, '=')) {\n                        [$k, $v] = explode('=', $val);\n                        $value[$k] = $v;\n                    } else {\n                        $value[] = $val;\n                    }\n                }\n\n                break;\n\n            case ':':\n                break;\n\n            default:\n                $value = str_contains($value, (string) $this->sep) ? $vals : $value;\n        }\n\n        return $this->decode($parser, $var, $value);\n    }\n\n    public static function createById($id)\n    {\n        if (!isset(static::$types[$id])) {\n            throw new \\InvalidArgumentException(\"Invalid operator [{$id}]\");\n        }\n\n        if (isset(static::$loaded[$id])) {\n            return static::$loaded[$id];\n        }\n\n        $op    = static::$types[$id];\n        $class = __NAMESPACE__ . '\\\\' . ($op['named'] ? 'Named' : 'UnNamed');\n\n        return static::$loaded[$id] = new $class($id, $op['named'], $op['sep'], $op['empty'], $op['reserved'], $op['start'], $op['first']);\n    }\n\n    public static function isValid($id): bool\n    {\n        return isset(static::$types[$id]);\n    }\n\n    /**\n     * Returns the correct regex given the variable location in the URI.\n     */\n    protected function getRegex(): string\n    {\n        return match ($this->id) {\n            '?', '&', '#' => self::$queryRegex,\n            default => self::$pathRegex,\n        };\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Operator/Named.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Operator;\n\nuse Rize\\UriTemplate\\Node;\nuse Rize\\UriTemplate\\Parser;\n\n/**\n * | 1   |    {?list}    ?list=red,green,blue                 | {name}=(?:\\w+(?:,\\w+?)*)*\n * | 2   |    {?list*}   ?list=red&list=green&list=blue       | {name}+=(?:{$value}+(?:{sep}{name}+={$value}*))*\n * | 3   |    {?keys}    ?keys=semi,%3B,dot,.,comma,%2C       | (same as 1)\n * | 4   |    {?keys*}   ?semi=%3B&dot=.&comma=%2C            | (same as 2)\n * | 5   |    {?list*}   ?list[]=red&list[]=green&list[]=blue | {name[]}+=(?:{$value}+(?:{sep}{name[]}+={$value}*))*.\n */\nclass Named extends Abstraction\n{\n    public function toRegex(Parser $parser, Node\\Variable $var): string\n    {\n        $name    = $var->name;\n        $value   = $this->getRegex();\n        $options = $var->options;\n\n        if ($options['modifier']) {\n            switch ($options['modifier']) {\n                case '*':\n                    // 2 | 4\n                    $regex = \"{$name}+=(?:{$value}+(?:{$this->sep}{$name}+={$value}*)*)\"\n                           . \"|{$value}+=(?:{$value}+(?:{$this->sep}{$value}+={$value}*)*)\";\n\n                    break;\n\n                case ':':\n                    $regex = \"{$value}\\\\{0,{$options['value']}\\\\}\";\n\n                    break;\n\n                case '%':\n                    // 5\n                    $name .= '+(?:%5B|\\[)[^=]*=';\n                    $regex = \"{$name}(?:{$value}+(?:{$this->sep}{$name}{$value}*)*)\";\n\n                    break;\n\n                default:\n                    throw new \\InvalidArgumentException(\"Unknown modifier `{$options['modifier']}`\");\n            }\n        } else {\n            // 1, 3\n            $regex = \"{$name}=(?:{$value}+(?:,{$value}+)*)*\";\n        }\n\n        return '(?:&)?' . $regex;\n    }\n\n    public function expandString(Parser $parser, Node\\Variable $var, $val): string\n    {\n        $val     = (string) $val;\n        $options = $var->options;\n        $result  = $this->encode($parser, $var, $var->name);\n\n        // handle empty value\n        if ($val === '') {\n            return $result . $this->empty;\n        }\n\n        $result .= '=';\n\n        if ($options['modifier'] === ':') {\n            $val = mb_substr($val, 0, (int) $options['value']);\n        }\n\n        return $result . $this->encode($parser, $var, $val);\n    }\n\n    public function expandNonExplode(Parser $parser, Node\\Variable $var, array $val): ?string\n    {\n        if (empty($val)) {\n            return null;\n        }\n\n        $result = $this->encode($parser, $var, $var->name);\n\n        $result .= '=';\n\n        return $result . $this->encode($parser, $var, $val);\n    }\n\n    public function expandExplode(Parser $parser, Node\\Variable $var, array $val): ?string\n    {\n        if (empty($val)) {\n            return null;\n        }\n\n        $list = isset($val[0]);\n        $data = [];\n        foreach ($val as $k => $v) {\n            // if value is a list, use `varname` as keyname, otherwise use `key` name\n            $key = $list ? $var->name : $k;\n            if ($list) {\n                $data[$key][] = $v;\n            } else {\n                $data[$key] = $v;\n            }\n        }\n\n        // if it's array modifier, we have to use variable name as index\n        // e.g. if variable name is 'query' and value is ['limit' => 1]\n        // then we convert it to ['query' => ['limit' => 1]]\n        if (!$list && $var->options['modifier'] === '%') {\n            $data = [$var->name => $data];\n        }\n\n        return $this->encodeExplodeVars($var, $data);\n    }\n\n    public function extract(Parser $parser, Node\\Variable $var, $data): array|string\n    {\n        // get rid of optional `&` at the beginning\n        if ($data[0] === '&') {\n            $data = substr($data, 1);\n        }\n\n        $value   = $data;\n        $vals    = explode($this->sep, $data);\n        $options = $var->options;\n\n        switch ($options['modifier']) {\n            case '%':\n                parse_str($value, $query);\n\n                return $query[$var->name];\n\n            case '*':\n                $value = [];\n\n                foreach ($vals as $val) {\n                    [$k, $v] = explode('=', $val);\n\n                    // 2\n                    if ($k === $var->getToken()) {\n                        $value[] = $v;\n                    }\n\n                    // 4\n                    else {\n                        $value[$k] = $v;\n                    }\n                }\n\n                break;\n\n            case ':':\n                break;\n\n            default:\n                // 1, 3\n                // remove key from value e.g. 'lang=en,th' becomes 'en,th'\n                $value = str_replace($var->getToken() . '=', '', $value);\n                $value = explode(',', $value);\n\n                if (count($value) === 1) {\n                    $value = current($value);\n                }\n        }\n\n        return $this->decode($parser, $var, $value);\n    }\n\n    public function encodeExplodeVars(Node\\Variable $var, $data): null|array|string\n    {\n        // http_build_query uses PHP_QUERY_RFC1738 encoding by default\n        // i.e. spaces are encoded as '+' (plus signs) we need to convert\n        // it to %20 RFC3986\n        $query = http_build_query($data, '', $this->sep);\n        $query = str_replace('+', '%20', $query);\n\n        // `%` array modifier\n        if ($var->options['modifier'] === '%') {\n\n            // it also uses numeric based-index by default e.g. list[] becomes list[0]\n            $query = preg_replace('#%5B\\d+%5D#', '%5B%5D', $query);\n        }\n\n        // `:`, `*` modifiers\n        else {\n            // by default, http_build_query will convert array values to `a[]=1&a[]=2`\n            // which is different from the spec. It should be `a=1&a=2`\n            $query = preg_replace('#%5B\\d+%5D#', '', $query);\n        }\n\n        // handle reserved charset\n        if ($this->reserved) {\n            $query = str_replace(\n                array_keys(static::$reserved_chars),\n                static::$reserved_chars,\n                $query,\n            );\n        }\n\n        return $query;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Operator/UnNamed.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate\\Operator;\n\nuse Rize\\UriTemplate\\Node;\nuse Rize\\UriTemplate\\Parser;\n\n/**\n * | 1   |    {/list}    /red,green,blue                  | {$value}*(?:,{$value}+)*\n * | 2   |    {/list*}   /red/green/blue                  | {$value}+(?:{$sep}{$value}+)*\n * | 3   |    {/keys}    /semi,%3B,dot,.,comma,%2C        | /(\\w+,?)+\n * | 4   |    {/keys*}   /semi=%3B/dot=./comma=%2C        | /(?:\\w+=\\w+/?)*.\n */\nclass UnNamed extends Abstraction\n{\n    public function toRegex(Parser $parser, Node\\Variable $var): string\n    {\n        $value   = $this->getRegex();\n        $options = $var->options;\n\n        if ($options['modifier']) {\n            switch ($options['modifier']) {\n                case '*':\n                    // 2 | 4\n                    $regex = \"{$value}+(?:{$this->sep}{$value}+)*\";\n\n                    break;\n\n                case ':':\n                    $regex = $value . '{0,' . $options['value'] . '}';\n\n                    break;\n\n                case '%':\n                    throw new \\InvalidArgumentException('% (array) modifier only works with Named type operators e.g. ;,?,&');\n\n                default:\n                    throw new \\InvalidArgumentException(\"Unknown modifier `{$options['modifier']}`\");\n            }\n        } else {\n            // 1, 3\n            $regex = \"{$value}*(?:,{$value}+)*\";\n        }\n\n        return $regex;\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/Parser.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate;\n\nuse Rize\\UriTemplate\\Node\\Abstraction;\nuse Rize\\UriTemplate\\Node\\Expression;\nuse Rize\\UriTemplate\\Node\\Variable;\nuse Rize\\UriTemplate\\Operator\\UnNamed;\n\nclass Parser\n{\n    private const REGEX_VARNAME = '[A-z0-9.]|%[0-9a-fA-F]{2}';\n\n    /**\n     * Parses URI Template and returns nodes.\n     *\n     * @return Node\\Abstraction[]\n     */\n    public function parse(string $template): array\n    {\n        $parts = preg_split('#(\\{[^}]+})#', $template, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);\n        $nodes = [];\n\n        foreach ($parts as $part) {\n            $node = $this->createNode($part);\n\n            // if current node has dot separator that requires a forward lookup\n            // for the previous node iff previous node's operator is UnNamed\n            if ($node instanceof Expression && $node->getOperator()->id === '.') {\n                if (count($nodes) > 0) {\n                    $previousNode = $nodes[count($nodes) - 1];\n                    if ($previousNode instanceof Expression && $previousNode->getOperator() instanceof UnNamed) {\n                        $previousNode->setForwardLookupSeparator($node->getOperator()->id);\n                    }\n                }\n            }\n\n            $nodes[] = $node;\n        }\n\n        return $nodes;\n    }\n\n    protected function createNode(string $token): Abstraction\n    {\n        // literal string\n        if ($token[0] !== '{') {\n            $node = $this->createLiteralNode($token);\n        } else {\n            // remove `{}` from expression and parse it\n            $node = $this->parseExpression(substr($token, 1, -1));\n        }\n\n        return $node;\n    }\n\n    protected function parseExpression(string $expression): Expression\n    {\n        $token  = $expression;\n        $prefix = $token[0];\n\n        // not a valid operator?\n        if (!Operator\\Abstraction::isValid($prefix)) {\n            // not valid chars?\n            if (!preg_match('#' . self::REGEX_VARNAME . '#', $token)) {\n                throw new \\InvalidArgumentException(\"Invalid operator [{$prefix}] found at {$token}\");\n            }\n\n            // default operator\n            //\n            // PHP 8.5: using null as array offset is deprecated and we no longer rely on auto-casting null to ''.\n            $prefix = '';\n        }\n\n        // remove operator prefix if exists e.g. '?'\n        if ($prefix) {\n            $token = substr($token, 1);\n        }\n\n        // parse variables\n        $vars = [];\n        foreach (explode(',', $token) as $var) {\n            $vars[] = $this->parseVariable($var);\n        }\n\n        return $this->createExpressionNode(\n            $token,\n            $this->createOperatorNode($prefix),\n            $vars,\n        );\n    }\n\n    protected function parseVariable(string $var): Variable\n    {\n        $var      = trim($var);\n        $val      = null;\n        $modifier = null;\n\n        // check for prefix (:) / explode (*) / array (%) modifier\n        if (str_contains($var, ':')) {\n            $modifier = ':';\n            [$varname, $val] = explode(':', $var);\n\n            // error checking\n            if (!is_numeric($val)) {\n                throw new \\InvalidArgumentException(\"Value for `:` modifier must be numeric value [{$varname}:{$val}]\");\n            }\n        }\n\n        switch ($last = substr($var, -1)) {\n            case '*':\n            case '%':\n                // there can be only 1 modifier per var\n                if ($modifier) {\n                    throw new \\InvalidArgumentException(\"Multiple modifiers per variable are not allowed [{$var}]\");\n                }\n\n                $modifier = $last;\n                $var = substr($var, 0, -1);\n\n                break;\n        }\n\n        return $this->createVariableNode(\n            $var,\n            ['modifier' => $modifier, 'value' => $val],\n        );\n    }\n\n    protected function createVariableNode($token, $options = []): Variable\n    {\n        return new Variable($token, $options);\n    }\n\n    protected function createExpressionNode($token, ?Operator\\Abstraction $operator = null, array $vars = []): Expression\n    {\n        return new Expression($token, $operator, $vars);\n    }\n\n    protected function createLiteralNode(string $token): Node\\Literal\n    {\n        return new Node\\Literal($token);\n    }\n\n    protected function createOperatorNode($token): Operator\\Abstraction\n    {\n        return Operator\\Abstraction::createById($token);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate/UriTemplate.php",
    "content": "<?php\n\nnamespace Rize\\UriTemplate;\n\nuse Rize\\UriTemplate as Template;\n\n/**\n * Future compatibility.\n */\nclass UriTemplate extends Template {}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/src/Rize/UriTemplate.php",
    "content": "<?php\n\nnamespace Rize;\n\nuse Rize\\UriTemplate\\Parser;\n\n/**\n * URI Template.\n */\nclass UriTemplate\n{\n    protected Parser $parser;\n    protected array $parsed = [];\n\n    public function __construct(protected string $base_uri = '', protected array $params = [], ?Parser $parser = null)\n    {\n        $this->parser = $parser ?: $this->createNodeParser();\n    }\n\n    /**\n     * Expands URI Template.\n     *\n     * @param mixed $params\n     */\n    public function expand(string $uri, $params = []): string\n    {\n        $params += $this->params;\n        $uri     = $this->base_uri . $uri;\n        $result  = [];\n\n        // quick check\n        if (!str_contains($uri, '{')) {\n            return $uri;\n        }\n\n        $parser = $this->parser;\n        $nodes  = $parser->parse($uri);\n\n        foreach ($nodes as $node) {\n            $result[] = $node->expand($parser, $params);\n        }\n\n        return implode('', $result);\n    }\n\n    /**\n     * Extracts variables from URI.\n     *\n     * @return null|array params or null if not match and $strict is true\n     */\n    public function extract(string $template, string $uri, bool $strict = false): ?array\n    {\n        $params = [];\n        $nodes  = $this->parser->parse($template);\n\n        // PHP 8.1.0RC4-dev still throws deprecation warning for `strlen`.\n        // $uri    = (string) $uri;\n\n        foreach ($nodes as $node) {\n            // if strict is given, and there's no remaining uri just return null\n            if ($strict && (string) $uri === '') {\n                return null;\n            }\n\n            // URI will be truncated from the start when a match is found\n            $match = $node->match($this->parser, $uri, $params, $strict);\n\n            if ($match === null) {\n                return null;\n            }\n\n            [$uri, $params] = $match;\n        }\n\n        // if there's remaining $uri, matching is failed\n        if ($strict && (string) $uri !== '') {\n            return null;\n        }\n\n        return $params;\n    }\n\n    public function getParser(): Parser\n    {\n        return $this->parser;\n    }\n\n    protected function createNodeParser(): Parser\n    {\n        static $parser;\n\n        if ($parser) {\n            return $parser;\n        }\n\n        return $parser = new Parser();\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/Rize/Uri/Node/ParserTest.php",
    "content": "<?php\n\nuse PHPUnit\\Framework\\Attributes\\Depends;\nuse Rize\\UriTemplate;\nuse Rize\\UriTemplate\\Node;\nuse Rize\\UriTemplate\\Operator;\nuse Rize\\UriTemplate\\Parser;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ParserTest extends TestCase\n{\n    protected function service()\n    {\n        return new Parser();\n    }\n\n    public function testParseTemplate()\n    {\n        $input = 'http://www.example.com/{term:1}/{term}/{test*}/foo{?query,number}';\n        $expected = [new Node\\Literal('http://www.example.com/'), new Node\\Expression(\n            'term:1',\n            Operator\\Abstraction::createById(''),\n            [new Node\\Variable(\n                'term:1',\n                ['modifier' => ':', 'value'    => 1],\n            )],\n        ), new Node\\Literal('/'), new Node\\Expression(\n            'term',\n            Operator\\Abstraction::createById(''),\n            [new Node\\Variable(\n                'term',\n                ['modifier' => null, 'value'    => null],\n            )],\n        ), new Node\\Literal('/'), new Node\\Expression(\n            'test*',\n            Operator\\Abstraction::createById(''),\n            [new Node\\Variable(\n                'test',\n                ['modifier' => '*', 'value'    => null],\n            )],\n        ), new Node\\Literal('/foo'), new Node\\Expression(\n            'query,number',\n            Operator\\Abstraction::createById('?'),\n            [new Node\\Variable(\n                'query',\n                ['modifier' => null, 'value'    => null],\n            ), new Node\\Variable(\n                'number',\n                ['modifier' => null, 'value'    => null],\n            )],\n        )];\n\n        $service = $this->service();\n        $actual  = $service->parse($input);\n\n        $this->assertEquals($expected, $actual);\n    }\n\n    public function testParseTemplateWithLiteral()\n    {\n        // will pass\n        $uri = new UriTemplate('http://www.example.com/v1/company/', []);\n        $params = $uri->extract('/{countryCode}/{registrationNumber}/test{.format}', '/gb/0123456/test.json');\n        static::assertEquals(['countryCode' => 'gb', 'registrationNumber' => '0123456', 'format' => 'json'], $params);\n    }\n\n    #[Depends('testParseTemplateWithLiteral')]\n    public function testParseTemplateWithTwoVariablesAndDotBetween()\n    {\n        // will fail\n        $uri = new UriTemplate('http://www.example.com/v1/company/', []);\n        $params = $uri->extract('/{countryCode}/{registrationNumber}{.format}', '/gb/0123456.json');\n        static::assertEquals(['countryCode' => 'gb', 'registrationNumber' => '0123456', 'format' => 'json'], $params);\n    }\n\n    #[Depends('testParseTemplateWithLiteral')]\n    public function testParseTemplateWithTwoVariablesAndDotBetweenStrict()\n    {\n        // will fail\n        $uri = new UriTemplate('http://www.example.com/v1/company/', []);\n        $params = $uri->extract('/{countryCode}/{registrationNumber}{.format}', '/gb/0123456.json', true);\n        static::assertEquals(['countryCode' => 'gb', 'registrationNumber' => '0123456', 'format' => 'json'], $params);\n    }\n\n    #[Depends('testParseTemplateWithLiteral')]\n    public function testParseTemplateWithThreeVariablesAndDotBetweenStrict()\n    {\n        // will fail\n        $uri = new UriTemplate('http://www.example.com/v1/company/', []);\n        $params = $uri->extract('/{countryCode}/{registrationNumber}{.namespace}{.format}', '/gb/0123456.company.json');\n        static::assertEquals(['countryCode' => 'gb', 'registrationNumber' => '0123456', 'namespace' => 'company', 'format' => 'json'], $params);\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/Rize/UriTemplateTest.php",
    "content": "<?php\n\nuse PHPUnit\\Framework\\Attributes\\DataProvider;\nuse PHPUnit\\Framework\\TestCase;\nuse PHPUnit\\Metadata\\Covers;\nuse Rize\\UriTemplate\\UriTemplate;\n\n/**\n * URI Template\n *\n * http://tools.ietf.org/html/rfc6570\n */\nclass UriTemplateTest extends TestCase\n{\n    public function service($uri = '', $params = [])\n    {\n        return new UriTemplate($uri, $params);\n    }\n\n    public static function dataExpansion()\n    {\n        $params = ['count' => [\"one\", \"two\", \"three\"], 'dom'  => [\"example\", \"com\"], 'dub'  => \"me/too\", 'hello' => \"Hello World!\", 'half' => \"50%\", 'var'  => \"value\", 'who'  => \"fred\", 'base' => \"http://example.com/home/\", 'path' => \"/foo/bar\", 'list' => [\"red\", \"green\", \"blue\"], 'keys' => [\"semi\" => \";\", \"dot\"  => \".\", \"comma\" => \",\"], 'list_with_empty' => [''], 'keys_with_empty' => ['john' => ''], 'v' => \"6\", 'x' => \"1024\", 'y' => \"768\", 'empty' => \"\", 'empty_keys' => [], 'undef' => null];\n\n        return [\n            ['http://example.com/~john', ['uri'    => 'http://example.com/~{username}', 'params' => ['username' => 'john']]],\n            ['http://example.com/dictionary/d/dog', ['uri'    => 'http://example.com/dictionary/{term:1}/{term}', 'params' => ['term' => 'dog'], 'extract' => ['term:1' => 'd', 'term'   => 'dog']]],\n            # Form-style parameters expression\n            ['http://example.com/j/john/search?q=mycelium&q=3&lang=th,jp,en', ['uri'    => 'http://example.com/{term:1}/{term}/search{?q*,lang}', 'params' => ['q'    => ['mycelium', 3], 'lang' => ['th', 'jp', 'en'], 'term' => 'john']]],\n            ['http://www.example.com/john', ['uri'    => 'http://www.example.com/{username}', 'params' => ['username' => 'john']]],\n            ['http://www.example.com/foo?query=mycelium&number=100', ['uri'    => 'http://www.example.com/foo{?query,number}', 'params' => ['query'  => 'mycelium', 'number' => 100]]],\n            # 'query' is undefined\n            ['http://www.example.com/foo?number=100', [\n                'uri'    => 'http://www.example.com/foo{?query,number}',\n                'params' => ['number' => 100],\n                # we can't extract undefined values\n                'extract' => false,\n            ]],\n            # undefined variables\n            ['http://www.example.com/foo', ['uri'    => 'http://www.example.com/foo{?query,number}', 'params' => [], 'extract' => ['query' => null, 'number' => null]]],\n            ['http://www.example.com/foo', ['uri'    => 'http://www.example.com/foo{?number}', 'params' => [], 'extract' => ['number' => null]]],\n            ['one,two,three|one,two,three|/one,two,three|/one/two/three|;count=one,two,three|;count=one;count=two;count=three|?count=one,two,three|?count=one&count=two&count=three|&count=one&count=two&count=three', ['uri'    => '{count}|{count*}|{/count}|{/count*}|{;count}|{;count*}|{?count}|{?count*}|{&count*}', 'params' => ['count' => ['one', 'two', 'three']]]],\n            ['http://www.host.com/path/to/a/file.x.y', ['uri'   => 'http://{host}{/segments*}/{file}{.extensions*}', 'params' => ['host' => 'www.host.com', 'segments' => ['path', 'to', 'a'], 'file' => 'file', 'extensions' => ['x', 'y']], 'extract' => ['host' => 'www.host.com', 'segments' => ['path', 'to', 'a'], 'file' => 'file.x.y', 'extensions' => null]]],\n            # level 1 - Simple String Expansion: {var}\n            ['value|Hello%20World%21|50%25|OX|OX|1024,768|1024,Hello%20World%21,768|?1024,|?1024|?768|val|value|red,green,blue|semi,%3B,dot,.,comma,%2C|semi=%3B,dot=.,comma=%2C', ['uri'    => '{var}|{hello}|{half}|O{empty}X|O{undef}X|{x,y}|{x,hello,y}|?{x,empty}|?{x,undef}|?{undef,y}|{var:3}|{var:30}|{list}|{keys}|{keys*}', 'params' => $params]],\n            # level 2 - Reserved Expansion: {+var}\n            ['value|Hello%20World!|50%25|http%3A%2F%2Fexample.com%2Fhome%2Findex|http://example.com/home/index|OX|OX|/foo/bar/here|here?ref=/foo/bar|up/foo/barvalue/here|1024,Hello%20World!,768|/foo/bar,1024/here|/foo/b/here|red,green,blue|red,green,blue|semi,;,dot,.,comma,,|semi=;,dot=.,comma=,', ['uri'    => '{+var}|{+hello}|{+half}|{base}index|{+base}index|O{+empty}X|O{+undef}X|{+path}/here|here?ref={+path}|up{+path}{var}/here|{+x,hello,y}|{+path,x}/here|{+path:6}/here|{+list}|{+list*}|{+keys}|{+keys*}', 'params' => $params]],\n            # level 2 - Fragment Expansion: {#var}\n            ['#value|#Hello%20World!|#50%25|foo#|foo|#1024,Hello%20World!,768|#/foo/bar,1024/here|#/foo/b/here|#red,green,blue|#red,green,blue|#semi,;,dot,.,comma,,|#semi=;,dot=.,comma=,', ['uri'    => '{#var}|{#hello}|{#half}|foo{#empty}|foo{#undef}|{#x,hello,y}|{#path,x}/here|{#path:6}/here|{#list}|{#list*}|{#keys}|{#keys*}', 'params' => $params]],\n            # Label Expansion with Dot-Prefix: {.var}\n            ['.fred|.fred.fred|.50%25.fred|www.example.com|X.value|X.|X|X.val|X.red,green,blue|X.red.green.blue|X.semi,%3B,dot,.,comma,%2C|X.semi=%3B.dot=..comma=%2C|X|X', ['uri'    => '{.who}|{.who,who}|{.half,who}|www{.dom*}|X{.var}|X{.empty}|X{.undef}|X{.var:3}|X{.list}|X{.list*}|X{.keys}|X{.keys*}|X{.empty_keys}|X{.empty_keys*}', 'params' => $params]],\n            # Path Segment Expansion: {/var}\n            ['/fred|/fred/fred|/50%25/fred|/fred/me%2Ftoo|/value|/value/|/value|/value/1024/here|/v/value|/red,green,blue|/red/green/blue|/red/green/blue/%2Ffoo|/semi,%3B,dot,.,comma,%2C|/semi=%3B/dot=./comma=%2C', ['uri'    => '{/who}|{/who,who}|{/half,who}|{/who,dub}|{/var}|{/var,empty}|{/var,undef}|{/var,x}/here|{/var:1,var}|{/list}|{/list*}|{/list*,path:4}|{/keys}|{/keys*}', 'params' => $params]],\n            # Path-Style Parameter Expansion: {;var}\n            [';who=fred|;half=50%25|;empty|;v=6;empty;who=fred|;v=6;who=fred|;x=1024;y=768|;x=1024;y=768;empty|;x=1024;y=768|;hello=Hello|;list=red,green,blue|;list=red;list=green;list=blue|;keys=semi,%3B,dot,.,comma,%2C|;semi=%3B;dot=.;comma=%2C', ['uri'    => '{;who}|{;half}|{;empty}|{;v,empty,who}|{;v,bar,who}|{;x,y}|{;x,y,empty}|{;x,y,undef}|{;hello:5}|{;list}|{;list*}|{;keys}|{;keys*}', 'params' => $params]],\n            # Form-Style Query Expansion: {?var}\n            ['?who=fred|?half=50%25|?x=1024&y=768|?x=1024&y=768&empty=|?x=1024&y=768|?var=val|?list=red,green,blue|?list=red&list=green&list=blue|?keys=semi,%3B,dot,.,comma,%2C|?semi=%3B&dot=.&comma=%2C|?list_with_empty=|?john=', ['uri'    => '{?who}|{?half}|{?x,y}|{?x,y,empty}|{?x,y,undef}|{?var:3}|{?list}|{?list*}|{?keys}|{?keys*}|{?list_with_empty*}|{?keys_with_empty*}', 'params' => $params]],\n            # Form-Style Query Continuation: {&var}\n            ['&who=fred|&half=50%25|?fixed=yes&x=1024|&x=1024&y=768&empty=|&x=1024&y=768|&var=val|&list=red,green,blue|&list=red&list=green&list=blue|&keys=semi,%3B,dot,.,comma,%2C|&semi=%3B&dot=.&comma=%2C', ['uri'    => '{&who}|{&half}|?fixed=yes{&x}|{&x,y,empty}|{&x,y,undef}|{&var:3}|{&list}|{&list*}|{&keys}|{&keys*}', 'params' => $params]],\n            # Test empty values\n            ['|||', ['uri'   => '{empty}|{empty*}|{?empty}|{?empty*}', 'params' => ['empty' => []]]],\n        ];\n    }\n\n    public static function dataExpandWithArrayModifier()\n    {\n        return [\n            # List\n            [\n                # '?choices[]=a&choices[]=b&choices[]=c',\n                '?choices%5B%5D=a&choices%5B%5D=b&choices%5B%5D=c',\n                ['uri'   => '{?choices%}', 'params' => ['choices' => ['a', 'b', 'c']]],\n            ],\n            # Keys\n            [\n                # '?choices[a]=1&choices[b]=2&choices[c][test]=3',\n                '?choices%5Ba%5D=1&choices%5Bb%5D=2&choices%5Bc%5D%5Btest%5D=3',\n                ['uri'   => '{?choices%}', 'params' => ['choices' => ['a' => 1, 'b' => 2, 'c' => ['test' => 3]]]],\n            ],\n            # Mixed\n            [\n                # '?list[]=a&list[]=b&keys[a]=1&keys[b]=2',\n                '?list%5B%5D=a&list%5B%5D=b&keys%5Ba%5D=1&keys%5Bb%5D=2',\n                ['uri'   => '{?list%,keys%}', 'params' => ['list' => ['a', 'b'], 'keys' => ['a' => 1, 'b' => 2]]],\n            ],\n        ];\n    }\n\n    public static function dataBaseTemplate()\n    {\n        return [\n            [\n                'http://google.com/api/1/users/1',\n                # base uri\n                ['uri' => '{+host}/api/{v}', 'params' => ['host' => 'http://google.com', 'v'    => 1]],\n                # other uri\n                ['uri' => '/{resource}/{id}', 'params' => ['resource' => 'users', 'id'       => 1]],\n            ],\n            # test override base params\n            [\n                'http://github.com/api/1/users/1',\n                # base uri\n                ['uri' => '{+host}/api/{v}', 'params' => ['host' => 'http://google.com', 'v'    => 1]],\n                # other uri\n                ['uri' => '/{resource}/{id}', 'params' => ['host'     => 'http://github.com', 'resource' => 'users', 'id'       => 1]],\n            ],\n        ];\n    }\n\n    public static function dataExtraction()\n    {\n        return [['/no/{term:1}/random/foo{?query,list%,keys%}', '/no/j/random/foo?query=1,2,3&list%5B%5D=a&list%5B%5D=b&keys%5Ba%5D=1&keys%5Bb%5D=2&keys%5Bc%5D%5Btest%5D%5Btest%5D=1', ['term:1' => 'j', 'query'  => [1, 2, 3], 'list'   => ['a', 'b'], 'keys'   => ['a' => 1, 'b' => 2, 'c' => ['test' => ['test' => 1]]]]], ['/no/{term:1}/random/{term}/{test*}/foo{?query,number}', '/no/j/random/john/a,b,c/foo?query=1,2,3&number=10', ['term:1' => 'j', 'term'   => 'john', 'test'   => ['a', 'b', 'c'], 'query'  => [1, 2, 3], 'number' => 10]], ['/search/{term:1}/{term}/{?q*,limit}', '/search/j/john/?a=1&b=2&limit=10', ['term:1' => 'j', 'term'   => 'john', 'q'      => ['a' => 1, 'b' => 2], 'limit'  => 10]], ['http://www.example.com/foo{?query,number}', 'http://www.example.com/foo?query=5', ['query'  => 5, 'number' => null]], ['{count}|{count*}|{/count}|{/count*}|{;count}|{;count*}|{?count}|{?count*}|{&count*}', 'one,two,three|one,two,three|/one,two,three|/one/two/three|;count=one,two,three|;count=one;count=two;count=three|?count=one,two,three|?count=one&count=two&count=three|&count=one&count=two&count=three', ['count' => ['one', 'two', 'three']]], ['http://example.com/{term:1}/{term}/search{?q*,lang}', 'http://example.com/j/john/search?q=Hello%20World%21&q=3&lang=th,jp,en', ['q'      => ['Hello World!', 3], 'lang'   => ['th', 'jp', 'en'], 'term'   => 'john', 'term:1' => 'j']], ['/foo/bar/{number}', '/foo/bar/0', ['number' => 0]], ['/some/{path}{?ref}', '/some/foo', ['path' => 'foo', 'ref' => null]]];\n    }\n\n    /**\n     * @dataProvider dataExpansion\n     */\n    public function testExpansion($expected, $input)\n    {\n        $service = $this->service();\n        $result  = $service->expand($input['uri'], $input['params']);\n\n        $this->assertEquals($expected, $result);\n    }\n\n    /**\n     * @dataProvider dataExpandWithArrayModifier\n     */\n    public function testExpandWithArrayModifier($expected, $input)\n    {\n        $service = $this->service();\n        $result  = $service->expand($input['uri'], $input['params']);\n\n        $this->assertEquals($expected, $result);\n    }\n\n    /**\n     * @dataProvider dataBaseTemplate\n     */\n    public function testBaseTemplate($expected, $base, $other)\n    {\n        $service  = $this->service($base['uri'], $base['params']);\n        $result   = $service->expand($other['uri'], $other['params']);\n\n        $this->assertEquals($expected, $result);\n    }\n\n    /**\n     * @dataProvider dataExtraction\n     */\n    public function testExtract($template, $uri, $expected)\n    {\n        $service = $this->service();\n        $actual  = $service->extract($template, $uri);\n\n        $this->assertEquals($expected, $actual);\n    }\n\n    public function testExpandFromFixture()\n    {\n        $dir     = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'fixtures' . DIRECTORY_SEPARATOR;\n        $files   = ['spec-examples.json', 'spec-examples-by-section.json', 'extended-tests.json'];\n        $service = $this->service();\n\n        foreach ($files as $file) {\n            $content = json_decode(file_get_contents($dir . $file), $array = true);\n\n            # iterate through each fixture\n            foreach ($content as $fixture) {\n                $vars = $fixture['variables'];\n\n                # assert each test cases\n                foreach ($fixture['testcases'] as $case) {\n                    [$uri, $expected] = $case;\n\n                    $actual = $service->expand($uri, $vars);\n\n                    if (is_array($expected)) {\n                        $expected = current(array_filter($expected, fn($input) => $actual === $input));\n                    }\n\n                    $this->assertEquals($expected, $actual);\n                }\n            }\n        }\n    }\n\n    public static function dataExtractStrictMode()\n    {\n        $dataTest = [['/search/{term:1}/{term}/{?q*,limit}', '/search/j/john/?a=1&b=2&limit=10', ['term:1' => 'j', 'term' => 'john', 'limit' => '10', 'q' => ['a' => '1', 'b' => '2']]], ['http://example.com/{term:1}/{term}/search{?q*,lang}', 'http://example.com/j/john/search?q=Hello%20World%21&q=3&lang=th,jp,en', ['term:1' => 'j', 'term' => 'john', 'lang' => ['th', 'jp', 'en'], 'q' => ['Hello World!', '3']]], ['/foo/bar/{number}', '/foo/bar/0', ['number' => 0]], ['/', '/', []]];\n\n        $rfc3986AllowedPathCharacters = ['-', '.', '_', '~', '!', '$', '&', \"'\", '(', ')', '*', '+', ',', ';', '=', ':', '@'];\n\n        foreach ($rfc3986AllowedPathCharacters as $char) {\n            $title = \"RFC3986 path character ($char)\";\n            $title = str_replace(\"'\", 'single quote', $title); // PhpStorm workaround\n            if ($char === ',') { // , means array on RFC6570\n                $params = ['term' => ['foo', 'baz']];\n            } else {\n                $params = ['term' => \"foo{$char}baz\"];\n            }\n\n            $data = ['/search/{term}', \"/search/foo{$char}baz\", $params];\n\n            $dataTest[$title] = $data;\n            $data = ['/search/{;term}', \"/search/;term=foo{$char}baz\", $params];\n            $dataTest['Named ' . $title] = $data;\n        }\n\n        $rfc3986AllowedQueryCharacters = $rfc3986AllowedPathCharacters;\n        $rfc3986AllowedQueryCharacters[] = '/';\n        $rfc3986AllowedQueryCharacters[] = '?';\n        unset($rfc3986AllowedQueryCharacters[array_search('&', $rfc3986AllowedQueryCharacters, true)]);\n\n        foreach ($rfc3986AllowedQueryCharacters as $char) {\n            $title = \"RFC3986 query character ($char)\";\n            $title = str_replace(\"'\", 'single quote', $title); // PhpStorm workaround\n            if ($char === ',') { // , means array on RFC6570\n                $params = ['term' => ['foo', 'baz']];\n            } else {\n                $params = ['term' => \"foo{$char}baz\"];\n            }\n\n            $data = ['/search/{?term}', \"/search/?term=foo{$char}baz\", $params];\n            $dataTest['Named ' . $title] = $data;\n        }\n\n        return $dataTest;\n    }\n\n    public static function extractStrictModeNotMatchProvider()\n    {\n        return [['/', '/a'], ['/{test}', '/a/'], ['/search/{term:1}/{term}/{?q*,limit}', '/search/j/?a=1&b=2&limit=10'], ['http://www.example.com/foo{?query,number}', 'http://www.example.com/foo?query=5'], ['http://www.example.com/foo{?query,number}', 'http://www.example.com/foo'], ['http://example.com/{term:1}/{term}/search{?q*,lang}', 'http://example.com/j/john/search?q=']];\n    }\n\n    #[DataProvider('dataExtractStrictMode')]\n    public function testExtractStrictMode(string $template, string $uri, array $expectedParams)\n    {\n        $service = $this->service();\n        $params = $service->extract($template, $uri, true);\n\n        $this->assertTrue(isset($params));\n        $this->assertEquals($expectedParams, $params);\n    }\n\n    #[DataProvider('extractStrictModeNotMatchProvider')]\n    public function testExtractStrictModeNotMatch(string $template, string $uri)\n    {\n        $service = $this->service();\n        $actual = $service->extract($template, $uri, true);\n\n        $this->assertFalse(isset($actual));\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/README.md",
    "content": "\nURI Template Tests\n==================\n\nThis is a set of tests for implementations of\n[RFC6570](http://tools.ietf.org/html/rfc6570) - URI Template. It is designed\nto be reused by any implementation, to improve interoperability and\nimplementation quality.\n\nIf your project uses Git for version control, you can make uritemplate-tests into a [submodule](http://help.github.com/submodules/).\n\nTest Format\n-----------\n\nEach test file is a [JSON](http://tools.ietf.org/html/RFC6627) document\ncontaining an object whose properties are groups of related tests.\nAlternatively, all tests are available in XML as well, with the XML files\nbeing generated by transform-json-tests.xslt which uses json2xml.xslt as a\ngeneral-purpose JSON-to-XML parsing library.\n\nEach group, in turn, is an object with three children:\n\n* level - the level of the tests covered, as per the RFC (optional; if absent,\n  assume level 4).\n* variables - an object representing the variables that are available to the\n  tests in the suite\n* testcases - a list of testcases, where each case is a two-member list, the\n  first being the template, the second being the result of expanding the \n  template with the provided variables.\n\nNote that the result string can be a few different things:\n\n* string - if the second member is a string, the result of expansion is \n  expected to match it, character-for-character.\n* list - if the second member is a list of strings, the result of expansion\n  is expected to match one of them; this allows for templates that can \n  expand into different, equally-acceptable URIs.\n* false - if the second member is boolean false, expansion is expected to\n  fail (i.e., the template was invalid).\n\nFor example:\n\n    {\n      \"Level 1 Examples\" : \n      {\n        \"level\": 1,\n        \"variables\": {\n           \"var\"   : \"value\",\n           \"hello\" : \"Hello World!\"\n         },\n         \"testcases\" : [\n            [\"{var}\", \"value\"],\n            [\"{hello}\", \"Hello%20World%21\"]\n         ]\n      }\n    }\n\n\nTests Included\n--------------\n\nThe following test files are included:\n\n* spec-examples.json - The complete set of example templates from the RFC\n* spec-examples-by-section.json - The examples, section by section\n* extended-tests.json - more complex test cases\n* negative-tests.json - invalid templates\n\nFor all these test files, XML versions with the names *.xml can be\ngenerated with the transform-json-tests.xslt XSLT stylesheet. The XSLT\ncontains the names of the above test files as a parameter, and can be\nstarted with any XML as input (i.e., the XML input is ignored).\n\nLicense\n-------\n\n   Copyright 2011-2012 The Authors\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/extended-tests.json",
    "content": "{\n    \"Additional Examples 1\":{\n        \"level\":4,\n        \"variables\":{\n            \"id\"           : \"person\",\n            \"token\"        : \"12345\",\n            \"fields\"       : [\"id\", \"name\", \"picture\"],\n            \"format\"       : \"json\",\n            \"q\"            : \"URI Templates\",\n            \"page\"         : \"5\",\n            \"lang\"         : \"en\",\n            \"geocode\"      : [\"37.76\",\"-122.427\"],\n            \"first_name\"   : \"John\",\n            \"last.name\"    : \"Doe\", \n            \"Some%20Thing\" : \"foo\",\n            \"number\"       : 6,\n            \"long\"         : 37.76,\n            \"lat\"          : -122.427,\n            \"group_id\"     : \"12345\",\n            \"query\"        : \"PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }\",\n            \"uri\"          : \"http://example.org/?uri=http%3A%2F%2Fexample.org%2F\",\n            \"word\"         : \"drücken\",\n            \"Stra%C3%9Fe\"  : \"Grüner Weg\",\n            \"random\"       : \"šöäŸœñê€£¥‡ÑÒÓÔÕÖ×ØÙÚàáâãäåæçÿ\",\n            \"assoc_special_chars\"  :\n              { \"šöäŸœñê€£¥‡ÑÒÓÔÕ\" : \"Ö×ØÙÚàáâãäåæçÿ\" }\n        },\n        \"testcases\":[\n\n            [ \"{/id*}\" , \"/person\" ],\n            [ \"{/id*}{?fields,first_name,last.name,token}\" , [ \n            \t\"/person?fields=id,name,picture&first_name=John&last.name=Doe&token=12345\",\n            \t\"/person?fields=id,picture,name&first_name=John&last.name=Doe&token=12345\",\n            \t\"/person?fields=picture,name,id&first_name=John&last.name=Doe&token=12345\",\n            \t\"/person?fields=picture,id,name&first_name=John&last.name=Doe&token=12345\",\n            \t\"/person?fields=name,picture,id&first_name=John&last.name=Doe&token=12345\",\n            \t\"/person?fields=name,id,picture&first_name=John&last.name=Doe&token=12345\"]\n            \t],\n            [\"/search.{format}{?q,geocode,lang,locale,page,result_type}\",\n            \t[ \"/search.json?q=URI%20Templates&geocode=37.76,-122.427&lang=en&page=5\",\n            \t  \"/search.json?q=URI%20Templates&geocode=-122.427,37.76&lang=en&page=5\"]\n                ],\n            [\"/test{/Some%20Thing}\", \"/test/foo\" ],\n            [\"/set{?number}\", \"/set?number=6\"],\n            [\"/loc{?long,lat}\" , \"/loc?long=37.76&lat=-122.427\"],\n            [\"/base{/group_id,first_name}/pages{/page,lang}{?format,q}\",\"/base/12345/John/pages/5/en?format=json&q=URI%20Templates\"],\n            [\"/sparql{?query}\", \"/sparql?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20SELECT%20%3Fbook%20%3Fwho%20WHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D\"],\n            [\"/go{?uri}\", \"/go?uri=http%3A%2F%2Fexample.org%2F%3Furi%3Dhttp%253A%252F%252Fexample.org%252F\"],\n            [\"/service{?word}\", \"/service?word=dr%C3%BCcken\"],\n            [\"/lookup{?Stra%C3%9Fe}\", \"/lookup?Stra%25C3%259Fe=Gr%C3%BCner%20Weg\"],\n            [\"{random}\" , \"%C5%A1%C3%B6%C3%A4%C5%B8%C5%93%C3%B1%C3%AA%E2%82%AC%C2%A3%C2%A5%E2%80%A1%C3%91%C3%92%C3%93%C3%94%C3%95%C3%96%C3%97%C3%98%C3%99%C3%9A%C3%A0%C3%A1%C3%A2%C3%A3%C3%A4%C3%A5%C3%A6%C3%A7%C3%BF\"],\n            [\"{?assoc_special_chars*}\", \"?%C5%A1%C3%B6%C3%A4%C5%B8%C5%93%C3%B1%C3%AA%E2%82%AC%C2%A3%C2%A5%E2%80%A1%C3%91%C3%92%C3%93%C3%94%C3%95=%C3%96%C3%97%C3%98%C3%99%C3%9A%C3%A0%C3%A1%C3%A2%C3%A3%C3%A4%C3%A5%C3%A6%C3%A7%C3%BF\"]\n        ]\n    },\n    \"Additional Examples 2\":{\n        \"level\":4,\n        \"variables\":{\n            \"id\" : [\"person\",\"albums\"],\n            \"token\" : \"12345\",\n            \"fields\" : [\"id\", \"name\", \"picture\"],\n            \"format\" : \"atom\",\n            \"q\" : \"URI Templates\",\n            \"page\" : \"10\",\n            \"start\" : \"5\",\n            \"lang\" : \"en\",\n            \"geocode\" : [\"37.76\",\"-122.427\"]\n        },\n        \"testcases\":[\n\n            [ \"{/id*}\" , [\"/person/albums\",\"/albums/person\"] ],\n            [ \"{/id*}{?fields,token}\" , [ \n            \t\"/person/albums?fields=id,name,picture&token=12345\",\n            \t\"/person/albums?fields=id,picture,name&token=12345\",\n            \t\"/person/albums?fields=picture,name,id&token=12345\",\n            \t\"/person/albums?fields=picture,id,name&token=12345\",\n            \t\"/person/albums?fields=name,picture,id&token=12345\",\n            \t\"/person/albums?fields=name,id,picture&token=12345\",\n            \t\"/albums/person?fields=id,name,picture&token=12345\",\n            \t\"/albums/person?fields=id,picture,name&token=12345\",\n            \t\"/albums/person?fields=picture,name,id&token=12345\",\n            \t\"/albums/person?fields=picture,id,name&token=12345\",\n            \t\"/albums/person?fields=name,picture,id&token=12345\",\n            \t\"/albums/person?fields=name,id,picture&token=12345\"]\n            \t]\n        ]\n    },\n    \"Additional Examples 3: Empty Variables\":{\n        \"variables\" : {\n            \"empty_list\" : [],\n            \"empty_assoc\" : {}\n        },\n        \"testcases\":[\n            [ \"{/empty_list}\", [ \"\" ] ],\n            [ \"{/empty_list*}\", [ \"\" ] ],\n            [ \"{?empty_list}\", [ \"\"] ],\n            [ \"{?empty_list*}\", [ \"\" ] ],\n            [ \"{?empty_assoc}\", [ \"\" ] ],\n            [ \"{?empty_assoc*}\", [ \"\" ] ]\n        ]\n    },\n    \"Additional Examples 4: Numeric Keys\":{\n        \"variables\" : {\n            \"42\" : \"The Answer to the Ultimate Question of Life, the Universe, and Everything\",\n            \"1337\" : [\"leet\", \"as\",\"it\", \"can\",\"be\"],\n            \"german\" : {\n                \"11\": \"elf\",\n                \"12\": \"zwölf\"\n            }\n        },\n        \"testcases\":[\n            [ \"{42}\", \"The%20Answer%20to%20the%20Ultimate%20Question%20of%20Life%2C%20the%20Universe%2C%20and%20Everything\"],\n            [ \"{?42}\", \"?42=The%20Answer%20to%20the%20Ultimate%20Question%20of%20Life%2C%20the%20Universe%2C%20and%20Everything\"],\n            [ \"{1337}\", \"leet,as,it,can,be\"],\n            [ \"{?1337*}\", \"?1337=leet&1337=as&1337=it&1337=can&1337=be\"],\n            [ \"{?german*}\", [ \"?11=elf&12=zw%C3%B6lf\", \"?12=zw%C3%B6lf&11=elf\"] ]\n        ]\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/json2xml.xslt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Downloaded on 12/6/2012 from http://www.gerixsoft.com/blog/xslt/json2xml -->\n\n<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n\n\t<xsl:template match=\"json\">\n\t\t<xsl:copy>\n\t\t\t<xsl:copy-of select=\"@*\"/>\n\t\t\t<xsl:call-template name=\"json2xml\">\n\t\t\t\t<xsl:with-param name=\"text\" select=\".\"/>\n\t\t\t</xsl:call-template>\n\t\t</xsl:copy>\n\t</xsl:template>\n\n\t<xsl:template name=\"json2xml\">\n\t\t<xsl:param name=\"text\"/>\n\t\t<xsl:variable name=\"mode0\">\n\t\t\t<xsl:variable name=\"regexps\" select=\"'//(.*?)\\n', '/\\*(.*?)\\*/', '(''|&quot;)(([^\\\\]|\\\\[\\\\&quot;''/btnvfr])*?)\\3', '(-?\\d+(\\.\\d+([eE][+-]?\\d+)?|[eE][+-]?\\d+))', '(-?[1-9]\\d*)', '(-?0[0-7]+)', '(-?0x[0-9a-fA-F]+)', '([:,\\{\\}\\[\\]])', '(true|false)', '(null)'\"/>\n\t\t\t<xsl:analyze-string select=\"$text\" regex=\"{string-join($regexps,'|')}\" flags=\"s\">\n\t\t\t\t<xsl:matching-substring>\n\t\t\t\t\t<xsl:choose>\n\t\t\t\t\t\t<!-- single line comment -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(1)\">\n\t\t\t\t\t\t\t<xsl:comment>\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(1)\"/>\n\t\t\t\t\t\t\t</xsl:comment>\n\t\t\t\t\t\t\t<xsl:text>&#10;</xsl:text>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- multi line comment -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(2)\">\n\t\t\t\t\t\t\t<xsl:comment>\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(2)\"/>\n\t\t\t\t\t\t\t</xsl:comment>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- string -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(3)\">\n\t\t\t\t\t\t\t<string>\n\t\t\t\t\t\t\t\t<xsl:analyze-string select=\"regex-group(4)\" regex=\"\\\\([\\\\&quot;'/btnvfr])\" flags=\"s\">\n\t\t\t\t\t\t\t\t\t<xsl:matching-substring>\n\t\t\t\t\t\t\t\t\t\t<xsl:variable name=\"s\" select=\"regex-group(1)\"/>\n\t\t\t\t\t\t\t\t\t\t<xsl:choose>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s=('\\', '&quot;', '''', '/')\">\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(1)\"/>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s='b'\">\n\t\t\t\t\t\t\t\t\t\t\t\t<!--xsl:text>&#8;</xsl:text-->\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:message select=\"'escape sequense \\b is not supported by XML'\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:text>\\b</xsl:text>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s='t'\">\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:text>&#9;</xsl:text>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s='n'\">\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:text>&#10;</xsl:text>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s='v'\">\n\t\t\t\t\t\t\t\t\t\t\t\t<!--xsl:text>&#11;</xsl:text-->\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:message select=\"'escape sequence \\v is not supported by XML'\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:text>\\v</xsl:text>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s='f'\">\n\t\t\t\t\t\t\t\t\t\t\t\t<!--xsl:text>&#12;</xsl:text-->\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:message select=\"'escape sequence \\f is not supported by XML'\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:text>\\f</xsl:text>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:when test=\"$s='r'\">\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:text>&#13;</xsl:text>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t\t\t\t\t\t<xsl:otherwise>\n\t\t\t\t\t\t\t\t\t\t\t\t<xsl:message terminate=\"yes\" select=\"'internal error'\"/>\n\t\t\t\t\t\t\t\t\t\t\t</xsl:otherwise>\n\t\t\t\t\t\t\t\t\t\t</xsl:choose>\n\t\t\t\t\t\t\t\t\t</xsl:matching-substring>\n\t\t\t\t\t\t\t\t\t<xsl:non-matching-substring>\n\t\t\t\t\t\t\t\t\t\t<xsl:value-of select=\".\"/>\n\t\t\t\t\t\t\t\t\t</xsl:non-matching-substring>\n\t\t\t\t\t\t\t\t</xsl:analyze-string>\n\t\t\t\t\t\t\t</string>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- double -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(6)\">\n\t\t\t\t\t\t\t<double>\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(6)\"/>\n\t\t\t\t\t\t\t</double>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- integer -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(9)\">\n\t\t\t\t\t\t\t<integer>\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(9)\"/>\n\t\t\t\t\t\t\t</integer>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- octal -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(10)\">\n\t\t\t\t\t\t\t<integer>\n\t\t\t\t\t\t\t\t<xsl:value-of xmlns:Integer=\"java:java.lang.Integer\" select=\"Integer:parseInt(regex-group(10), 8)\"/>\n\t\t\t\t\t\t\t</integer>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- hex -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(11)\">\n\t\t\t\t\t\t\t<integer>\n\t\t\t\t\t\t\t\t<xsl:value-of xmlns:Integer=\"java:java.lang.Integer\" select=\"Integer:parseInt(replace(regex-group(11), '0x', ''), 16)\"/>\n\t\t\t\t\t\t\t</integer>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- symbol -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(12)\">\n\t\t\t\t\t\t\t<symbol>\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(12)\"/>\n\t\t\t\t\t\t\t</symbol>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- boolean -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(13)\">\n\t\t\t\t\t\t\t<boolean>\n\t\t\t\t\t\t\t\t<xsl:value-of select=\"regex-group(13)\"/>\n\t\t\t\t\t\t\t</boolean>\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<!-- null -->\n\t\t\t\t\t\t<xsl:when test=\"regex-group(14)\">\n\t\t\t\t\t\t\t<null />\n\t\t\t\t\t\t</xsl:when>\n\t\t\t\t\t\t<xsl:otherwise>\n\t\t\t\t\t\t\t<xsl:message terminate=\"yes\" select=\"'internal error'\"/>\n\t\t\t\t\t\t</xsl:otherwise>\n\t\t\t\t\t</xsl:choose>\n\t\t\t\t</xsl:matching-substring>\n\t\t\t\t<xsl:non-matching-substring>\n\t\t\t\t\t<xsl:if test=\"normalize-space()!=''\">\n\t\t\t\t\t\t<xsl:message select=\"concat('unknown token: ', .)\"/>\n\t\t\t\t\t\t<xsl:value-of select=\".\"/>\n\t\t\t\t\t</xsl:if>\n\t\t\t\t</xsl:non-matching-substring>\n\t\t\t</xsl:analyze-string>\n\t\t</xsl:variable>\n\t\t<xsl:variable name=\"mode1\">\n\t\t\t<xsl:apply-templates mode=\"json2xml1\" select=\"$mode0/node()[1]\"/>\n\t\t</xsl:variable>\n\t\t<xsl:variable name=\"mode2\">\n\t\t\t<xsl:apply-templates mode=\"json2xml2\" select=\"$mode1\"/>\n\t\t</xsl:variable>\n\t\t<xsl:variable name=\"mode3\">\n\t\t\t<xsl:apply-templates mode=\"json2xml3\" select=\"$mode2\"/>\n\t\t</xsl:variable>\n\t\t<xsl:copy-of select=\"$mode3\"/> <!-- change $mode3 to $mode[0-2] for easy debug -->\n\t</xsl:template>\n\n\t<!-- json2xml1 mode: group content between {} and [] into object and array elements -->\n\n\t<xsl:template mode=\"json2xml1\" match=\"node()\" priority=\"-9\">\n\t\t<xsl:copy-of select=\".\"/>\n\t\t<xsl:apply-templates mode=\"json2xml1\" select=\"following-sibling::node()[1]\"/>\n\t</xsl:template>\n\n\t<xsl:template mode=\"json2xml1\" match=\"symbol[.=('}',']')]\"/>\n\n\t<xsl:template mode=\"json2xml1\" match=\"symbol[.=('{','[')]\">\n\t\t<xsl:element name=\"{if (.='{') then 'object' else 'array'}\">\n\t\t\t<xsl:apply-templates mode=\"json2xml1\" select=\"following-sibling::node()[1]\"/>\n\t\t</xsl:element>\n\t\t<xsl:variable name=\"level\" select=\"count(preceding-sibling::symbol[.=('{','[')])-count(preceding-sibling::symbol[.=('}',']')])+1\"/>\n\t\t<xsl:variable name=\"ender\"\n\t\t\tselect=\"following-sibling::symbol[.=('}',']') and count(preceding-sibling::symbol[.=('{','[')])-count(preceding-sibling::symbol[.=('}',']')])=$level][1]\"/>\n\t\t<xsl:apply-templates mode=\"json2xml1\" select=\"$ender/following-sibling::node()[1]\"/>\n\t</xsl:template>\n\n\t<!-- json2xml2 mode: group <string>:<string|integer|double|object|array> into field element -->\n\n\t<xsl:template priority=\"-9\" mode=\"json2xml2\" match=\"@*|node()\">\n\t\t<xsl:copy>\n\t\t\t<xsl:apply-templates mode=\"json2xml2\" select=\"@*|node()\"/>\n\t\t</xsl:copy>\n\t</xsl:template>\n\n\t<xsl:template mode=\"json2xml2\"\n\t\tmatch=\"string[following-sibling::*[1]/self::symbol[.=':'] and following-sibling::*[2]/(self::string|self::integer|self::double|self::boolean|self::object|self::array|self::null)]\"/>\n\n\t<xsl:template mode=\"json2xml2\"\n\t\tmatch=\"symbol[.=':'][preceding-sibling::*[1]/self::string and following-sibling::*[1]/(self::string|self::integer|self::double|self::boolean|self::object|self::array|self::null)]\">\n\t\t<field name=\"{preceding-sibling::*[1]}\">\n\t\t\t<xsl:for-each select=\"following-sibling::*[1]\">\n\t\t\t\t<xsl:copy>\n\t\t\t\t\t<xsl:apply-templates mode=\"json2xml2\" select=\"@*|node()\"/>\n\t\t\t\t</xsl:copy>\n\t\t\t</xsl:for-each>\n\t\t</field>\n\t</xsl:template>\n\n\t<xsl:template mode=\"json2xml2\"\n\t\tmatch=\"*[self::string|self::integer|self::double|self::boolean|self::object|self::array|self::null][preceding-sibling::*[2]/self::string and preceding-sibling::*[1]/self::symbol[.=':']]\"/>\n\n\t<!-- json2xml3 mode: drop comma between consecutive field and object elements -->\n\n\t<xsl:template priority=\"-9\" mode=\"json2xml3\" match=\"@*|node()\">\n\t\t<xsl:copy>\n\t\t\t<xsl:apply-templates mode=\"json2xml3\" select=\"@*|node()\"/>\n\t\t</xsl:copy>\n\t</xsl:template>\n\n\t<xsl:template mode=\"json2xml3\" match=\"object/symbol[.=','][preceding-sibling::*[1]/self::field and following-sibling::*[1]/self::field]\"/>\n\n\t<xsl:template mode=\"json2xml3\" match=\"array/symbol[.=','][preceding-sibling::*[1]/(self::string|self::integer|self::double|self::boolean|self::object|self::array|self::null) and following-sibling::*[1]/(self::string|self::integer|self::double|self::boolean|self::object|self::array|self::null)]\"/>\n\n</xsl:stylesheet>"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/negative-tests.json",
    "content": "{\n    \"Failure Tests\":{\n        \"level\":4,\n        \"variables\":{\n            \"id\"                : \"thing\",\n            \"var\"               : \"value\",\n            \"hello\"             : \"Hello World!\",\n            \"with space\"        : \"fail\",\n            \" leading_space\"    : \"Hi!\",\n            \"trailing_space \"   : \"Bye!\",\n            \"empty\"             : \"\",\n            \"path\"              : \"/foo/bar\",\n            \"x\"                 : \"1024\",\n            \"y\"                 : \"768\",\n            \"list\"              : [\"red\", \"green\", \"blue\"],\n            \"keys\"              : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n            \"example\"           : \"red\",\n            \"searchTerms\"       : \"uri templates\",\n            \"~thing\"            : \"some-user\",\n            \"default-graph-uri\" : [\"http://www.example/book/\",\"http://www.example/papers/\"],\n            \"query\"             : \"PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?book ?who WHERE { ?book dc:creator ?who }\"\n\n        },\n        \"testcases\":[\n            [ \"{/id*\",  false  ],\n            [ \"/id*}\",  false  ],\n            [ \"{/?id}\",  false  ],\n            [ \"{var:prefix}\",  false  ],\n            [ \"{hello:2*}\",  false  ] ,\n            [ \"{??hello}\",  false  ] ,\n            [ \"{!hello}\",  false  ] ,\n            [ \"{with space}\", false],\n            [ \"{ leading_space}\", false],\n            [ \"{trailing_space }\", false],\n            [ \"{=path}\",  false  ] ,\n            [ \"{$var}\", false ],\n            [ \"{|var*}\", false ],\n            [ \"{*keys?}\",  false  ],\n            [ \"{?empty=default,var}\",  false  ],\n            [ \"{var}{-prefix|/-/|var}\" , false ],\n            [ \"?q={searchTerms}&amp;c={example:color?}\" , false ],\n            [ \"x{?empty|foo=none}\" , false ],\n            [ \"/h{#hello+}\" , false ],\n            [ \"/h#{hello+}\" , false ],\n            [ \"{keys:1}\",  false  ],\n            [ \"{+keys:1}\",  false  ],\n            [ \"{;keys:1*}\",  false  ],\n            [ \"?{-join|&|var,list}\" , false ],\n            [ \"/people/{~thing}\", false],\n            [ \"/{default-graph-uri}\", false ],\n            [ \"/sparql{?query,default-graph-uri}\", false ],\n            [ \"/sparql{?query){&default-graph-uri*}\", false ],\n            [ \"/resolution{?x, y}\" , false ]\n\n        ]\n    }\n}"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/spec-examples-by-section.json",
    "content": "{\n  \"3.2.1 Variable Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n        [\"{count}\", \"one,two,three\"],\n        [\"{count*}\", \"one,two,three\"],\n        [\"{/count}\", \"/one,two,three\"],\n        [\"{/count*}\", \"/one/two/three\"],\n        [\"{;count}\", \";count=one,two,three\"],\n        [\"{;count*}\", \";count=one;count=two;count=three\"],\n        [\"{?count}\", \"?count=one,two,three\"],\n        [\"{?count*}\", \"?count=one&count=two&count=three\"],\n        [\"{&count*}\", \"&count=one&count=two&count=three\"]\n      ]\n  },\n  \"3.2.2 Simple String Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n        [\"{var}\", \"value\"],\n        [\"{hello}\", \"Hello%20World%21\"],\n        [\"{half}\", \"50%25\"],\n        [\"O{empty}X\", \"OX\"],\n        [\"O{undef}X\", \"OX\"],\n        [\"{x,y}\", \"1024,768\"],\n        [\"{x,hello,y}\", \"1024,Hello%20World%21,768\"],\n        [\"?{x,empty}\", \"?1024,\"],\n        [\"?{x,undef}\", \"?1024\"],\n        [\"?{undef,y}\", \"?768\"],\n        [\"{var:3}\", \"val\"],\n        [\"{var:30}\", \"value\"],\n        [\"{list}\", \"red,green,blue\"],\n        [\"{list*}\", \"red,green,blue\"],\n        [\"{keys}\", [\n          \"comma,%2C,dot,.,semi,%3B\",\n          \"comma,%2C,semi,%3B,dot,.\",\n          \"dot,.,comma,%2C,semi,%3B\",\n          \"dot,.,semi,%3B,comma,%2C\",\n          \"semi,%3B,comma,%2C,dot,.\",\n          \"semi,%3B,dot,.,comma,%2C\"\n        ]],\n        [\"{keys*}\", [\n          \"comma=%2C,dot=.,semi=%3B\",\n          \"comma=%2C,semi=%3B,dot=.\",\n          \"dot=.,comma=%2C,semi=%3B\",\n          \"dot=.,semi=%3B,comma=%2C\",\n          \"semi=%3B,comma=%2C,dot=.\",\n          \"semi=%3B,dot=.,comma=%2C\"\n        ]]\n     ]\n  },\n  \"3.2.3 Reserved Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n        [\"{+var}\", \"value\"],\n        [\"{/var,empty}\", \"/value/\"],\n        [\"{/var,undef}\", \"/value\"],\n        [\"{+hello}\", \"Hello%20World!\"],\n        [\"{+half}\", \"50%25\"],\n        [\"{base}index\", \"http%3A%2F%2Fexample.com%2Fhome%2Findex\"],\n        [\"{+base}index\", \"http://example.com/home/index\"],\n        [\"O{+empty}X\", \"OX\"],\n        [\"O{+undef}X\", \"OX\"],\n        [\"{+path}/here\", \"/foo/bar/here\"],\n        [\"{+path:6}/here\", \"/foo/b/here\"],\n        [\"here?ref={+path}\", \"here?ref=/foo/bar\"],\n        [\"up{+path}{var}/here\", \"up/foo/barvalue/here\"],\n        [\"{+x,hello,y}\", \"1024,Hello%20World!,768\"],\n        [\"{+path,x}/here\", \"/foo/bar,1024/here\"],\n        [\"{+list}\", \"red,green,blue\"],\n        [\"{+list*}\", \"red,green,blue\"],\n        [\"{+keys}\", [\n          \"comma,,,dot,.,semi,;\",\n          \"comma,,,semi,;,dot,.\",\n          \"dot,.,comma,,,semi,;\",\n          \"dot,.,semi,;,comma,,\",\n          \"semi,;,comma,,,dot,.\",\n          \"semi,;,dot,.,comma,,\"\n        ]],\n        [\"{+keys*}\", [\n          \"comma=,,dot=.,semi=;\",\n          \"comma=,,semi=;,dot=.\",\n          \"dot=.,comma=,,semi=;\",\n          \"dot=.,semi=;,comma=,\",\n          \"semi=;,comma=,,dot=.\",\n          \"semi=;,dot=.,comma=,\"\n        ]]\n     ]\n  },\n  \"3.2.4 Fragment Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n        [\"{#var}\", \"#value\"],\n        [\"{#hello}\", \"#Hello%20World!\"],\n        [\"{#half}\", \"#50%25\"],\n        [\"foo{#empty}\", \"foo#\"],\n        [\"foo{#undef}\", \"foo\"],\n        [\"{#x,hello,y}\", \"#1024,Hello%20World!,768\"],\n        [\"{#path,x}/here\", \"#/foo/bar,1024/here\"],\n        [\"{#path:6}/here\", \"#/foo/b/here\"],\n        [\"{#list}\", \"#red,green,blue\"],\n        [\"{#list*}\", \"#red,green,blue\"],\n        [\"{#keys}\", [\n          \"#comma,,,dot,.,semi,;\",\n          \"#comma,,,semi,;,dot,.\",\n          \"#dot,.,comma,,,semi,;\",\n          \"#dot,.,semi,;,comma,,\",\n          \"#semi,;,comma,,,dot,.\",\n          \"#semi,;,dot,.,comma,,\"\n        ]]\n    ]\n  },\n  \"3.2.5 Label Expansion with Dot-Prefix\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n    },\n    \"testcases\" : [\n       [\"{.who}\", \".fred\"],\n       [\"{.who,who}\", \".fred.fred\"],\n       [\"{.half,who}\", \".50%25.fred\"],\n       [\"www{.dom*}\", \"www.example.com\"],\n       [\"X{.var}\", \"X.value\"],\n       [\"X{.var:3}\", \"X.val\"],\n       [\"X{.empty}\", \"X.\"],\n       [\"X{.undef}\", \"X\"],\n       [\"X{.list}\", \"X.red,green,blue\"],\n       [\"X{.list*}\", \"X.red.green.blue\"],\n       [\"{#keys}\", [\n        \"#comma,,,dot,.,semi,;\",\n        \"#comma,,,semi,;,dot,.\",\n        \"#dot,.,comma,,,semi,;\",\n        \"#dot,.,semi,;,comma,,\",\n        \"#semi,;,comma,,,dot,.\",\n        \"#semi,;,dot,.,comma,,\"\n       ]],\n       [\"{#keys*}\", [\n        \"#comma=,,dot=.,semi=;\",\n        \"#comma=,,semi=;,dot=.\",\n        \"#dot=.,comma=,,semi=;\",\n        \"#dot=.,semi=;,comma=,\",\n        \"#semi=;,comma=,,dot=.\",\n        \"#semi=;,dot=.,comma=,\"\n       ]],\n       [\"X{.empty_keys}\", \"X\"],\n       [\"X{.empty_keys*}\", \"X\"]\n    ]\n  },\n  \"3.2.6 Path Segment Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n       [\"{/who}\", \"/fred\"],\n       [\"{/who,who}\", \"/fred/fred\"],\n       [\"{/half,who}\", \"/50%25/fred\"],\n       [\"{/who,dub}\", \"/fred/me%2Ftoo\"],\n       [\"{/var}\", \"/value\"],\n       [\"{/var,empty}\", \"/value/\"],\n       [\"{/var,undef}\", \"/value\"],\n       [\"{/var,x}/here\", \"/value/1024/here\"],\n       [\"{/var:1,var}\", \"/v/value\"],\n       [\"{/list}\", \"/red,green,blue\"],\n       [\"{/list*}\", \"/red/green/blue\"],\n       [\"{/list*,path:4}\", \"/red/green/blue/%2Ffoo\"],\n       [\"{/keys}\", [\n        \"/comma,%2C,dot,.,semi,%3B\",\n        \"/comma,%2C,semi,%3B,dot,.\",\n        \"/dot,.,comma,%2C,semi,%3B\",\n        \"/dot,.,semi,%3B,comma,%2C\",\n        \"/semi,%3B,comma,%2C,dot,.\",\n        \"/semi,%3B,dot,.,comma,%2C\"\n       ]],\n       [\"{/keys*}\", [ \n        \"/comma=%2C/dot=./semi=%3B\",\n        \"/comma=%2C/semi=%3B/dot=.\",\n        \"/dot=./comma=%2C/semi=%3B\",\n        \"/dot=./semi=%3B/comma=%2C\",\n        \"/semi=%3B/comma=%2C/dot=.\",\n        \"/semi=%3B/dot=./comma=%2C\"\n       ]]\n     ]\n  },\n  \"3.2.7 Path-Style Parameter Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n        [\"{;who}\", \";who=fred\"],\n        [\"{;half}\", \";half=50%25\"],\n        [\"{;empty}\", \";empty\"],\n        [\"{;hello:5}\", \";hello=Hello\"],\n        [\"{;v,empty,who}\", \";v=6;empty;who=fred\"],\n        [\"{;v,bar,who}\", \";v=6;who=fred\"],\n        [\"{;x,y}\", \";x=1024;y=768\"],\n        [\"{;x,y,empty}\", \";x=1024;y=768;empty\"],\n        [\"{;x,y,undef}\", \";x=1024;y=768\"],\n        [\"{;list}\", \";list=red,green,blue\"],\n        [\"{;list*}\", \";list=red;list=green;list=blue\"],\n        [\"{;keys}\", [ \n          \";keys=comma,%2C,dot,.,semi,%3B\",\n          \";keys=comma,%2C,semi,%3B,dot,.\",\n          \";keys=dot,.,comma,%2C,semi,%3B\",\n          \";keys=dot,.,semi,%3B,comma,%2C\",\n          \";keys=semi,%3B,comma,%2C,dot,.\",\n          \";keys=semi,%3B,dot,.,comma,%2C\"\n        ]],\n        [\"{;keys*}\", [ \n          \";comma=%2C;dot=.;semi=%3B\",\n          \";comma=%2C;semi=%3B;dot=.\",\n          \";dot=.;comma=%2C;semi=%3B\",\n          \";dot=.;semi=%3B;comma=%2C\",\n          \";semi=%3B;comma=%2C;dot=.\",\n          \";semi=%3B;dot=.;comma=%2C\"\n        ]]\n     ]\n  },\n  \"3.2.8 Form-Style Query Expansion\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n        [\"{?who}\", \"?who=fred\"],\n        [\"{?half}\", \"?half=50%25\"],\n        [\"{?x,y}\", \"?x=1024&y=768\"],\n        [\"{?x,y,empty}\", \"?x=1024&y=768&empty=\"],\n        [\"{?x,y,undef}\", \"?x=1024&y=768\"],\n        [\"{?var:3}\", \"?var=val\"],\n        [\"{?list}\", \"?list=red,green,blue\"],\n        [\"{?list*}\", \"?list=red&list=green&list=blue\"],\n        [\"{?keys}\", [ \n          \"?keys=comma,%2C,dot,.,semi,%3B\",\n          \"?keys=comma,%2C,semi,%3B,dot,.\",\n          \"?keys=dot,.,comma,%2C,semi,%3B\",\n          \"?keys=dot,.,semi,%3B,comma,%2C\",\n          \"?keys=semi,%3B,comma,%2C,dot,.\",\n          \"?keys=semi,%3B,dot,.,comma,%2C\"\n        ]],\n        [\"{?keys*}\", [ \n          \"?comma=%2C&dot=.&semi=%3B\",\n          \"?comma=%2C&semi=%3B&dot=.\",\n          \"?dot=.&comma=%2C&semi=%3B\",\n          \"?dot=.&semi=%3B&comma=%2C\",\n          \"?semi=%3B&comma=%2C&dot=.\",\n          \"?semi=%3B&dot=.&comma=%2C\"\n        ]]\n     ]\n  },\n  \"3.2.9 Form-Style Query Continuation\" :\n  {\n    \"variables\": {\n       \"count\"      : [\"one\", \"two\", \"three\"],\n       \"dom\"        : [\"example\", \"com\"],\n       \"dub\"        : \"me/too\",\n       \"hello\"      : \"Hello World!\",\n       \"half\"       : \"50%\",\n       \"var\"        : \"value\",\n       \"who\"        : \"fred\",\n       \"base\"       : \"http://example.com/home/\",\n       \"path\"       : \"/foo/bar\",\n       \"list\"       : [\"red\", \"green\", \"blue\"],\n       \"keys\"       : { \"semi\" : \";\", \"dot\" : \".\", \"comma\" : \",\"},\n       \"v\"          : \"6\",\n       \"x\"          : \"1024\",\n       \"y\"          : \"768\",\n       \"empty\"      : \"\",\n       \"empty_keys\" : [],\n       \"undef\"      : null\n     },\n     \"testcases\" : [\n          [\"{&who}\", \"&who=fred\"],\n          [\"{&half}\", \"&half=50%25\"],\n          [\"?fixed=yes{&x}\", \"?fixed=yes&x=1024\"],\n          [\"{&var:3}\", \"&var=val\"],\n          [\"{&x,y,empty}\", \"&x=1024&y=768&empty=\"],\n          [\"{&x,y,undef}\", \"&x=1024&y=768\"],\n          [\"{&list}\", \"&list=red,green,blue\"],\n          [\"{&list*}\", \"&list=red&list=green&list=blue\"],\n          [\"{&keys}\", [ \n            \"&keys=comma,%2C,dot,.,semi,%3B\",\n            \"&keys=comma,%2C,semi,%3B,dot,.\",\n            \"&keys=dot,.,comma,%2C,semi,%3B\",\n            \"&keys=dot,.,semi,%3B,comma,%2C\",\n            \"&keys=semi,%3B,comma,%2C,dot,.\",\n            \"&keys=semi,%3B,dot,.,comma,%2C\"\n          ]],\n          [\"{&keys*}\", [ \n            \"&comma=%2C&dot=.&semi=%3B\",\n            \"&comma=%2C&semi=%3B&dot=.\",\n            \"&dot=.&comma=%2C&semi=%3B\",\n            \"&dot=.&semi=%3B&comma=%2C\",\n            \"&semi=%3B&comma=%2C&dot=.\",\n            \"&semi=%3B&dot=.&comma=%2C\"\n          ]]\n     ]\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/spec-examples.json",
    "content": "{\n  \"Level 1 Examples\" :\n  {\n    \"level\": 1,\n    \"variables\": {\n       \"var\"   : \"value\",\n       \"hello\" : \"Hello World!\"\n     },\n     \"testcases\" : [\n        [\"{var}\", \"value\"],\n        [\"{hello}\", \"Hello%20World%21\"]\n     ]\n  },\n  \"Level 2 Examples\" :\n  {\n    \"level\": 2,\n    \"variables\": {\n       \"var\"   : \"value\",\n       \"hello\" : \"Hello World!\",\n       \"path\"  : \"/foo/bar\"\n     },\n     \"testcases\" : [\n        [\"{+var}\", \"value\"],\n        [\"{+hello}\", \"Hello%20World!\"],\n        [\"{+path}/here\", \"/foo/bar/here\"],\n        [\"here?ref={+path}\", \"here?ref=/foo/bar\"]\n     ]\n  },\n  \"Level 3 Examples\" :\n  {\n    \"level\": 3,\n    \"variables\": {\n       \"var\"   : \"value\",\n       \"hello\" : \"Hello World!\",\n       \"empty\" : \"\",\n       \"path\"  : \"/foo/bar\",\n       \"x\"     : \"1024\",\n       \"y\"     : \"768\"\n     },\n     \"testcases\" : [\n        [\"map?{x,y}\", \"map?1024,768\"],\n        [\"{x,hello,y}\", \"1024,Hello%20World%21,768\"],\n        [\"{+x,hello,y}\", \"1024,Hello%20World!,768\"],\n        [\"{+path,x}/here\", \"/foo/bar,1024/here\"],\n        [\"{#x,hello,y}\", \"#1024,Hello%20World!,768\"],\n        [\"{#path,x}/here\", \"#/foo/bar,1024/here\"],\n        [\"X{.var}\", \"X.value\"],\n        [\"X{.x,y}\", \"X.1024.768\"],\n        [\"{/var}\", \"/value\"],\n        [\"{/var,x}/here\", \"/value/1024/here\"],\n        [\"{;x,y}\", \";x=1024;y=768\"],\n        [\"{;x,y,empty}\", \";x=1024;y=768;empty\"],\n        [\"{?x,y}\", \"?x=1024&y=768\"],\n        [\"{?x,y,empty}\", \"?x=1024&y=768&empty=\"],\n        [\"?fixed=yes{&x}\", \"?fixed=yes&x=1024\"],\n        [\"{&x,y,empty}\", \"&x=1024&y=768&empty=\"]\n     ]\n  },\n  \"Level 4 Examples\" :\n  {\n    \"level\": 4,\n    \"variables\": {\n      \"var\": \"value\",\n      \"hello\": \"Hello World!\",\n      \"path\": \"/foo/bar\",\n      \"list\": [\"red\", \"green\", \"blue\"],\n      \"keys\": {\"semi\": \";\", \"dot\": \".\", \"comma\":\",\"}\n    },\n    \"testcases\": [\n      [\"{var:3}\", \"val\"],\n      [\"{var:30}\", \"value\"],\n      [\"{list}\", \"red,green,blue\"],\n      [\"{list*}\", \"red,green,blue\"],\n      [\"{keys}\", [\n        \"comma,%2C,dot,.,semi,%3B\",\n        \"comma,%2C,semi,%3B,dot,.\",\n        \"dot,.,comma,%2C,semi,%3B\",\n        \"dot,.,semi,%3B,comma,%2C\",\n        \"semi,%3B,comma,%2C,dot,.\",\n        \"semi,%3B,dot,.,comma,%2C\"\n      ]],\n      [\"{keys*}\", [\n        \"comma=%2C,dot=.,semi=%3B\",\n        \"comma=%2C,semi=%3B,dot=.\",\n        \"dot=.,comma=%2C,semi=%3B\",\n        \"dot=.,semi=%3B,comma=%2C\",\n        \"semi=%3B,comma=%2C,dot=.\",\n        \"semi=%3B,dot=.,comma=%2C\"\n      ]],\n      [\"{+path:6}/here\", \"/foo/b/here\"],\n      [\"{+list}\", \"red,green,blue\"],\n      [\"{+list*}\", \"red,green,blue\"],\n      [\"{+keys}\", [\n        \"comma,,,dot,.,semi,;\",\n        \"comma,,,semi,;,dot,.\",\n        \"dot,.,comma,,,semi,;\",\n        \"dot,.,semi,;,comma,,\",\n        \"semi,;,comma,,,dot,.\",\n        \"semi,;,dot,.,comma,,\"\n      ]],\n      [\"{+keys*}\", [\n        \"comma=,,dot=.,semi=;\",\n        \"comma=,,semi=;,dot=.\",\n        \"dot=.,comma=,,semi=;\",\n        \"dot=.,semi=;,comma=,\",\n        \"semi=;,comma=,,dot=.\",\n        \"semi=;,dot=.,comma=,\"\n      ]],\n      [\"{#path:6}/here\", \"#/foo/b/here\"],\n      [\"{#list}\", \"#red,green,blue\"],\n      [\"{#list*}\", \"#red,green,blue\"],\n      [\"{#keys}\", [\n        \"#comma,,,dot,.,semi,;\",\n        \"#comma,,,semi,;,dot,.\",\n        \"#dot,.,comma,,,semi,;\",\n        \"#dot,.,semi,;,comma,,\",\n        \"#semi,;,comma,,,dot,.\",\n        \"#semi,;,dot,.,comma,,\"\n      ]],\n      [\"{#keys*}\", [\n        \"#comma=,,dot=.,semi=;\",\n        \"#comma=,,semi=;,dot=.\",\n        \"#dot=.,comma=,,semi=;\",\n        \"#dot=.,semi=;,comma=,\",\n        \"#semi=;,comma=,,dot=.\",\n        \"#semi=;,dot=.,comma=,\"\n      ]],\n      [\"X{.var:3}\", \"X.val\"],\n      [\"X{.list}\", \"X.red,green,blue\"],\n      [\"X{.list*}\", \"X.red.green.blue\"],\n      [\"X{.keys}\", [ \n        \"X.comma,%2C,dot,.,semi,%3B\",\n        \"X.comma,%2C,semi,%3B,dot,.\",\n        \"X.dot,.,comma,%2C,semi,%3B\",\n        \"X.dot,.,semi,%3B,comma,%2C\",\n        \"X.semi,%3B,comma,%2C,dot,.\",\n        \"X.semi,%3B,dot,.,comma,%2C\"\n      ]],\n      [\"{/var:1,var}\", \"/v/value\"],\n      [\"{/list}\", \"/red,green,blue\"],\n      [\"{/list*}\", \"/red/green/blue\"],\n      [\"{/list*,path:4}\", \"/red/green/blue/%2Ffoo\"],\n      [\"{/keys}\", [\n        \"/comma,%2C,dot,.,semi,%3B\",\n        \"/comma,%2C,semi,%3B,dot,.\",\n        \"/dot,.,comma,%2C,semi,%3B\",\n        \"/dot,.,semi,%3B,comma,%2C\",\n        \"/semi,%3B,comma,%2C,dot,.\",\n        \"/semi,%3B,dot,.,comma,%2C\"\n      ]],\n      [\"{/keys*}\", [ \n        \"/comma=%2C/dot=./semi=%3B\",\n        \"/comma=%2C/semi=%3B/dot=.\",\n        \"/dot=./comma=%2C/semi=%3B\",\n        \"/dot=./semi=%3B/comma=%2C\",\n        \"/semi=%3B/comma=%2C/dot=.\",\n        \"/semi=%3B/dot=./comma=%2C\"\n      ]],\n      [\"{;hello:5}\", \";hello=Hello\"],\n      [\"{;list}\", \";list=red,green,blue\"],\n      [\"{;list*}\", \";list=red;list=green;list=blue\"],\n      [\"{;keys}\", [ \n        \";keys=comma,%2C,dot,.,semi,%3B\",\n        \";keys=comma,%2C,semi,%3B,dot,.\",\n        \";keys=dot,.,comma,%2C,semi,%3B\",\n        \";keys=dot,.,semi,%3B,comma,%2C\",\n        \";keys=semi,%3B,comma,%2C,dot,.\",\n        \";keys=semi,%3B,dot,.,comma,%2C\"\n      ]],\n      [\"{;keys*}\", [ \n        \";comma=%2C;dot=.;semi=%3B\",\n        \";comma=%2C;semi=%3B;dot=.\",\n        \";dot=.;comma=%2C;semi=%3B\",\n        \";dot=.;semi=%3B;comma=%2C\",\n        \";semi=%3B;comma=%2C;dot=.\",\n        \";semi=%3B;dot=.;comma=%2C\"\n      ]],\n      [\"{?var:3}\", \"?var=val\"],\n      [\"{?list}\", \"?list=red,green,blue\"],\n      [\"{?list*}\", \"?list=red&list=green&list=blue\"],\n      [\"{?keys}\", [ \n        \"?keys=comma,%2C,dot,.,semi,%3B\",\n        \"?keys=comma,%2C,semi,%3B,dot,.\",\n        \"?keys=dot,.,comma,%2C,semi,%3B\",\n        \"?keys=dot,.,semi,%3B,comma,%2C\",\n        \"?keys=semi,%3B,comma,%2C,dot,.\",\n        \"?keys=semi,%3B,dot,.,comma,%2C\"\n      ]],\n      [\"{?keys*}\", [ \n        \"?comma=%2C&dot=.&semi=%3B\",\n        \"?comma=%2C&semi=%3B&dot=.\",\n        \"?dot=.&comma=%2C&semi=%3B\",\n        \"?dot=.&semi=%3B&comma=%2C\",\n        \"?semi=%3B&comma=%2C&dot=.\",\n        \"?semi=%3B&dot=.&comma=%2C\"\n      ]],\n      [\"{&var:3}\", \"&var=val\"],\n      [\"{&list}\", \"&list=red,green,blue\"],\n      [\"{&list*}\", \"&list=red&list=green&list=blue\"],\n      [\"{&keys}\", [ \n        \"&keys=comma,%2C,dot,.,semi,%3B\",\n        \"&keys=comma,%2C,semi,%3B,dot,.\",\n        \"&keys=dot,.,comma,%2C,semi,%3B\",\n        \"&keys=dot,.,semi,%3B,comma,%2C\",\n        \"&keys=semi,%3B,comma,%2C,dot,.\",\n        \"&keys=semi,%3B,dot,.,comma,%2C\"\n      ]],\n      [\"{&keys*}\", [ \n        \"&comma=%2C&dot=.&semi=%3B\",\n        \"&comma=%2C&semi=%3B&dot=.\",\n        \"&dot=.&comma=%2C&semi=%3B\",\n        \"&dot=.&semi=%3B&comma=%2C\",\n        \"&semi=%3B&comma=%2C&dot=.\",\n        \"&semi=%3B&dot=.&comma=%2C\"\n      ]]\n    ]\n  }\n}\n"
  },
  {
    "path": "lib/Google/vendor/rize/uri-template/tests/fixtures/transform-json-tests.xslt",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n\n\t<xsl:include href=\"json2xml.xslt\"/>\n\n\t<!-- the input test files need to be supplied as a sequence of file names only (no extension) -->\n\t<xsl:param name=\"tests\" select=\"('extended-tests', 'negative-tests', 'spec-examples-by-section', 'spec-examples')\"/>\n\t<xsl:param name=\"json-ext\" select=\"'json'\"/>\n\t<xsl:param name=\"xml-ext\" select=\"'xml'\"/>\n\t\n\t<!-- run this stylesheet with any input to generate the XML test files at output. -->\n\t<!-- (a popular way of doing this is to supply the XSLT to itself as the input file.) -->\n\t\n\t<xsl:template match=\"/\">\n\t\t<xsl:for-each select=\"$tests\">\n\t\t\t<xsl:variable name=\"file\" select=\"current()\"/>\n\t\t\t<xsl:variable name=\"json\">\n\t\t\t\t<json>\n\t\t\t\t\t<xsl:value-of select=\"unparsed-text(concat($file, '.', $json-ext))\"/>\n\t\t\t\t</json>\n\t\t\t</xsl:variable>\n\t\t\t<xsl:variable name=\"xml\">\n\t\t\t\t<xsl:apply-templates select=\"$json/json\"/>\n\t\t\t</xsl:variable>\n\t\t\t<xsl:result-document href=\"{$file}.{$xml-ext}\" method=\"xml\" indent=\"yes\">\n\t\t\t\t<tests>\n\t\t\t\t\t<xsl:for-each select=\"$xml/json/object/field\">\n\t\t\t\t\t\t<test name=\"{@name}\">\n\t\t\t\t\t\t\t<xsl:if test=\"exists(object/field[1][@name eq 'level'])\">\n\t\t\t\t\t\t\t\t<xsl:attribute name=\"level\" select=\"object/field[1][@name eq 'level']/integer/text()\"/>\n\t\t\t\t\t\t\t</xsl:if>\n\t\t\t\t\t\t\t<variables>\n\t\t\t\t\t\t\t\t<xsl:for-each select=\"object/field[@name eq 'variables']/object/field\">\n\t\t\t\t\t\t\t\t\t<variable name=\"{@name}\">\n\t\t\t\t\t\t\t\t\t\t<xsl:copy-of select=\"*\"/>\n\t\t\t\t\t\t\t\t\t</variable>\n\t\t\t\t\t\t\t\t</xsl:for-each>\n\t\t\t\t\t\t\t</variables>\n\t\t\t\t\t\t\t<testcases>\n\t\t\t\t\t\t\t\t<xsl:for-each select=\"object/field[@name eq 'testcases']/array/array\">\n\t\t\t\t\t\t\t\t\t<testcase template=\"{*[1]}\" result=\"{*[2]}\"/>\n\t\t\t\t\t\t\t\t</xsl:for-each>\t\t\t\t\t\t\t\t\t</testcases>\n\t\t\t\t\t\t</test>\n\t\t\t\t\t</xsl:for-each>\n\t\t\t\t</tests>\n\t\t\t</xsl:result-document>\n\t\t</xsl:for-each>\n\t</xsl:template>\n\n</xsl:stylesheet>"
  },
  {
    "path": "lib/Google/vendor/symfony/deprecation-contracts/CHANGELOG.md",
    "content": "CHANGELOG\n=========\n\nThe changelog is maintained for all Symfony contracts at the following URL:\nhttps://github.com/symfony/contracts/blob/main/CHANGELOG.md\n"
  },
  {
    "path": "lib/Google/vendor/symfony/deprecation-contracts/LICENSE",
    "content": "Copyright (c) 2020-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "lib/Google/vendor/symfony/deprecation-contracts/README.md",
    "content": "Symfony Deprecation Contracts\n=============================\n\nA generic function and convention to trigger deprecation notices.\n\nThis package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices.\n\nBy using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component,\nthe triggered deprecations can be caught and logged for later discovery, both on dev and prod environments.\n\nThe function requires at least 3 arguments:\n - the name of the Composer package that is triggering the deprecation\n - the version of the package that introduced the deprecation\n - the message of the deprecation\n - more arguments can be provided: they will be inserted in the message using `printf()` formatting\n\nExample:\n```php\ntrigger_deprecation('symfony/blockchain', '8.9', 'Using \"%s\" is deprecated, use \"%s\" instead.', 'bitcoin', 'fabcoin');\n```\n\nThis will generate the following message:\n`Since symfony/blockchain 8.9: Using \"bitcoin\" is deprecated, use \"fabcoin\" instead.`\n\nWhile not recommended, the deprecation notices can be completely ignored by declaring an empty\n`function trigger_deprecation() {}` in your application.\n"
  },
  {
    "path": "lib/Google/vendor/symfony/deprecation-contracts/composer.json",
    "content": "{\n    \"name\": \"symfony/deprecation-contracts\",\n    \"type\": \"library\",\n    \"description\": \"A generic function and convention to trigger deprecation notices\",\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Nicolas Grekas\",\n            \"email\": \"p@tchwork.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.1\"\n    },\n    \"autoload\": {\n        \"files\": [\n            \"function.php\"\n        ]\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-main\": \"3.6-dev\"\n        },\n        \"thanks\": {\n            \"name\": \"symfony/contracts\",\n            \"url\": \"https://github.com/symfony/contracts\"\n        }\n    }\n}\n"
  },
  {
    "path": "lib/Google/vendor/symfony/deprecation-contracts/function.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (!function_exists('trigger_deprecation')) {\n    /**\n     * Triggers a silenced deprecation notice.\n     *\n     * @param string $package The name of the Composer package that is triggering the deprecation\n     * @param string $version The version of the package that introduced the deprecation\n     * @param string $message The message of the deprecation\n     * @param mixed  ...$args Values to insert in the message using printf() formatting\n     *\n     * @author Nicolas Grekas <p@tchwork.com>\n     */\n    function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void\n    {\n        @trigger_error(($package || $version ? \"Since $package $version: \" : '').($args ? vsprintf($message, $args) : $message), \\E_USER_DEPRECATED);\n    }\n}\n"
  },
  {
    "path": "lib/classes/batch/class-batch-task-manager.php",
    "content": "<?php\n/**\n * Batch task manager\n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia\\Batch;\n\n// Require lib classes if not yet available\nif (!class_exists('UDX_WP_Async_Request')) {\n  require_once ud_get_stateless_media()->path('lib/ns-vendor/classes/deliciousbrains/wp-background-processing/classes/wp-async-request.php', 'dir');\n}\n\nif (!class_exists('UDX_WP_Background_Process')) {\n  require_once ud_get_stateless_media()->path('lib/ns-vendor/classes/deliciousbrains/wp-background-processing/classes/wp-background-process.php', 'dir');\n}\n\nuse wpCloud\\StatelessMedia\\Helper;\nuse wpCloud\\StatelessMedia\\Singleton;\n\nclass BatchTaskManager extends \\UDX_WP_Background_Process {\n  use Singleton;\n  \n  const STATE_KEY = '_state';\n  const UPDATED_KEY = '_updated';\n  const HEALTH_CHECK_INTERVAL = 60 * 5; // 5 minute\n\n  protected $prefix = 'sm';\n  protected $action = 'batch_process';\n\n  protected function __construct() {\n    parent::__construct();\n\n    $this->_init_hooks();\n    $this->_check_force_continue();\n  }\n\n  private function _init_hooks() {\n    add_filter('wp_stateless_batch_state', [$this, 'get_state'], 10, 1);\n    add_filter('wp_stateless_batch_action_pause', [$this, 'pause_task'], 10, 2);\n    add_filter('wp_stateless_batch_action_resume', [$this, 'resume_task'], 10, 2);\n    add_filter('heartbeat_send', [$this, 'check_running_batch'], 10, 1 );\n  }\n\n  /**\n   * Check if we should force dispatch\n   * Check if the task is in progress and if the state was not updated last 5 minutes - try to continue the task\n   */\n  private function _check_force_continue() {\n    $last_updated = $this->_get_last_updated();\n\n    if ( empty($last_updated) || $this->is_paused() ) {\n      return;\n    }\n\n    $check_interval = self::HEALTH_CHECK_INTERVAL;\n\n    if ( defined('WP_STATELESS_BATCH_HEALTHCHECK_INTERVAL') ) {\n      $check_interval = max($check_interval, WP_STATELESS_BATCH_HEALTHCHECK_INTERVAL * 60);\n    }\n\n    if ( time() - $last_updated <= $check_interval ) {\n      return;\n    }\n\n    Helper::log('Batch task freezed, trying to continue...');\n\n    // Forcing continue\n    $this->unlock_process();\n    $this->handle();\n  }\n\n  /**\n   * Update current task state\n   * \n   * @return array\n   */\n  private function _update_state($state) {\n    update_option( $this->identifier . self::STATE_KEY, $state );\n    update_option( $this->identifier . self::UPDATED_KEY, time() );\n  }\n\n  /**\n   * Get current task state\n   * \n   * @return array\n   */\n  private function _get_state() {\n    // We need to omit the cache and get the data directly from the db\n    global $wpdb;\n\n    $sql = \"SELECT option_value FROM $wpdb->options WHERE option_name = '%s' LIMIT 1\";\n    $sql = $wpdb->prepare($sql, $this->identifier . self::STATE_KEY);\n    $state = $wpdb->get_var($sql);\n\n    return empty($state) ? [] : maybe_unserialize($state);\n  }\n\n  /**\n   * Get last state update of the current task\n   * \n   * @return int|null\n   */\n  private function _get_last_updated() {\n    // We need to omit the cache and get the data directly from the db\n    global $wpdb;\n\n    $sql = \"SELECT option_value FROM $wpdb->options WHERE option_name = '%s' LIMIT 1\";\n    $sql = $wpdb->prepare($sql, $this->identifier . self::UPDATED_KEY);\n\n    return $wpdb->get_var($sql);\n  }\n\n  /**\n   * Delete current task state\n   * \n   * @return array\n   */\n  private function _delete_state() {\n    delete_option( $this->identifier . self::STATE_KEY );\n    delete_option( $this->identifier . self::UPDATED_KEY );\n  }\n\n  /**\n   * Add new batch to the queue\n   * \n   * @param array $batch\n   */\n  private function _add_batch($batch) {\n    if ( !empty($batch) ) {\n      $this->data( $batch )->save();\n    }\n  }\n\n  /**\n   * Get task object\n   * \n   * @param string $state|null\n   * @return IBatchTask\n   * @throws \\Exception\n   */\n  private function _get_batch_task_object($state = null) {\n    if ( empty($state) ) {\n      $state = $this->_get_state();\n    }\n\n    if ( !isset($state['class']) || !isset($state['file']) ) {\n      throw new \\Exception(\"Can not get batch task file and class\");\n    }\n\n    $class = $state['class'];\n\n    if ( !class_exists($class) ) {\n      require_once $state['file'];\n    }\n\n    $object = new $class();\n\n    if ( !is_a($object, '\\wpCloud\\StatelessMedia\\Batch\\IBatchTask') ) {\n      throw new \\Exception(\"Batch task $class is not valid\");\n    }\n\n    $object->set_state($state);\n\n    return $object;\n  }\n\n  /**\n   * Start the batch task\n   *\n   * @param string $class\n   * @param string|null $file\n   * @param string $email\n   */\n  public function start_task($class, $file = null, $email = '', $queue = []) {\n    try {\n      // Prepare default state\n      $defaults = [\n        'class'       => $class,\n        'file'        => $file,\n        'email'       => $email,\n        'queue'       => $queue,\n      ];\n\n      $task_object = $this->_get_batch_task_object($defaults);\n      $task_object->init_state();\n      \n      // Batch should be run prior to 'get_state' because it mutates the state\n      $this->_add_batch( $task_object->get_batch() );\n\n      // Save state\n      $state = wp_parse_args($task_object->get_state(), $defaults);\n      \n      $this->_update_state( $state );\n\n      Helper::log('Batch task started: ' . $class);\n\n      do_action('wp_stateless_batch_task_started', $class, $file);\n    } catch (\\Throwable $e) {\n      Helper::log(\"Batch task $class failed to start: \" . $e->getMessage());\n      \n      do_action('wp_stateless_batch_task_failed', $class, $file, $e->getMessage());\n\n      return;\n    }\n\n    $this->dispatch();\n  }\n\n  /**\n   * Process batch task item.\n   * Returns false to remove item from queue\n   * Returns $item to repeat \n   * \n   * @param string $item\n   * @return bool|mixed\n   */\n  public function task($item) {\n    $result = false;\n\n    try {\n      $object = $this->_get_batch_task_object();\n\n      $result = $object->process_item($item);\n      $this->_update_state( $object->get_state() );\n\n      $result = apply_filters('wp_stateless_batch_task_item_processed', $result, $item);\n    } catch (\\Throwable $e) {\n      Helper::log( \"Batch task unable to handle item $item: \" . $e->getMessage() );\n      \n      $result = apply_filters('wp_stateless_batch_task_item_failed', $result, $item);\n    }\n\n    return $result;\n  }\n  \n  /**\n   * Complete the batch task. Tries to get the next batch and continue\n   */\n  protected function complete() {\n    $class = '';\n\n    // Check if we have more batched to run\n    try {\n      $object = $this->_get_batch_task_object();\n      $class = get_class($object);\n      $batch = $object->get_batch();\n\n      if ( !empty($batch) ) {\n        $this->_add_batch( $batch );\n        $this->_update_state( $object->get_state() );\n\n        $this->dispatch();\n\n        return;\n      }\n\n      Helper::log( 'Batch task completed: ' . $class );\n    } catch (\\Throwable $e) {\n      Helper::log( \"Unable to process next batch: \" . $e->getMessage() );\n    }\n\n    // If no more batches - delete state\n    $state = $this->_get_state();\n\n    parent::complete();\n    $this->_delete_state();\n\n    do_action('wp_stateless_batch_task_finished', $class, $state);\n\n    $site = site_url();\n    $subject = sprintf( __('WP-Stateless: Data Optimization Complete', ud_get_stateless_media()->domain) );\n    $message = sprintf(\n      __(\"WP-Stateless data has been optimized for %s.\\n\\nIf you have WP_STATELESS_SYNC_LOG or WP_DEBUG_LOG enabled, review those logs now to review any errors that may have occurred during the synchronization process.\", ud_get_stateless_media()->domain), \n      $site\n    );\n\n    do_action('wp_stateless_send_admin_email', $subject, $message, $state['email'] ?? '');\n  }\n\n  /**\n   * Check if batch task has a state, so it is in progress\n   * Because is_processing is true only while processing an item\n   * \n   * @param array|null $state\n   * @return bool\n   */\n  public function is_running($state = null) {\n    if ( empty($state) ) {\n      $state = $this->_get_state();\n    }\n\n    return !empty($state);\n  }\n\n  /**\n   * Get the state of the current batch process\n   * \n   * @param mixed $status\n   * @return mixed\n   */\n  public function get_state($state) {\n    $state = $this->_get_state();\n\n    unset($state['class']);\n    unset($state['file']);\n\n    $state['is_running'] = $this->is_running($state);\n    $state['is_paused'] = $this->is_paused();\n\n    return $state;\n  }\n\n  /**\n   * Pause the batch task\n   * \n   * @param array $state\n   * @param array $params\n   * @return array\n   */\n  public function pause_task($state, $params) {\n    $this->pause();\n\n    return apply_filters('wp_stateless_batch_state', $state, []);\n  }\n\n  /**\n   * Resume the batch task\n   * \n   * @param array $state\n   * @param array $params\n   * @return array\n   */\n  public function resume_task($state, $params) {\n    $this->resume();\n\n    return apply_filters('wp_stateless_batch_state', $state, []);\n  }\n\n  /**\n   * Get the state key\n   * \n   * @return string\n   */\n  public function get_state_key() {\n    return $this->identifier . self::STATE_KEY;\n  }\n\n  /**\n   * Check if batch is running during WP heartbeat request\n   * \n   * @return array\n   */\n  public function check_running_batch($response) {\n    if ( $this->is_running() ) {\n      $response['stateless-batch-running'] = true;\n    }\n\n    return $response;\n  }\n}\n"
  },
  {
    "path": "lib/classes/batch/class-batch-task.php",
    "content": "<?php\n/**\n * Batch Task \n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia\\Batch;\n\nabstract class BatchTask implements IBatchTask {\n  /**\n   * Current state of the task\n   * \n   * @var array\n   */\n  protected $state = [];\n\n  /**\n   * ID of the task\n   * \n   * @var string\n   */\n  protected $id = 'batch_task';\n\n  /**\n   * Description of the task (for displaying status)\n   * \n   * @var string\n   */\n  protected $description = '';\n\n  /**\n   * Total number of items to process. Default -1 - infinite/unknown\n   * \n   * @var int\n   */\n  protected $total = -1;\n\n  /**\n   * Number of items processed\n   * \n   * @var int\n   */\n  protected $completed = 0;\n\n  /**\n   * Number of items to process in a single batch\n   * \n   * @var int\n   */\n  protected $limit = 20;\n\n  /**\n   * Offset for the next batch (database offset, page token, etc.)\n   * \n   * @var mixed\n   */\n  protected $offset = 0;\n\n  /**\n   * Date and time when processing started\n   * \n   * @var string|null\n   */\n  protected $started = null;\n\n  /**\n   * Initialize the state of the task\n   * \n   * @param mixed $item\n   */\n  public function init_state() {\n    $this->started = time();\n  }\n\n  /**\n   * Get human-friendly description\n   * \n   * @return string \n   */\n  public function get_description() {\n    return $this->description;\n  }\n\n  /**\n   * Get task state\n   * \n   * @return array \n   */\n  public function get_state() {\n    if ( empty($this->started) ) {\n      $this->init_state();\n    }\n\n    // Calling process can add extra data to the state, so we should try to keep it\n    return wp_parse_args([\n      'id'          => $this->id,\n      'description' => $this->description,\n      'total'       => $this->total,\n      'completed'   => $this->completed,\n      'limit'       => $this->limit,\n      'offset'      => $this->offset,\n      'started'     => $this->started,\n    ], $this->state);\n  }\n\n  /**\n   * Restore task state for processing between calls\n   * \n   * @param array $state\n   * @return array \n   */\n  public function set_state($state) {\n    // Calling process can add extra data to the state, so we should try to keep it\n    $this->state = $state;\n\n    // Restore state properties required for processing \n    if ( isset($state['description']) ) {\n      $this->description = $state['description'];\n    }\n\n    if ( isset($state['started']) ) {\n      $this->started = $state['started'];\n    }\n\n    if ( isset($state['total']) ) {\n      $this->total = $state['total'];\n    }\n\n    if ( isset($state['completed']) ) {\n      $this->completed = $state['completed'];\n    }\n\n    if ( isset($state['limit']) ) {\n      $this->limit = $state['limit'];\n    }\n\n    if ( isset($state['offset']) ) {\n      $this->offset = $state['offset'];\n    }\n  }\n\n  /**\n   * Get batch of data to process. False - no more data\n   * \n   * @return array|false\n   */\n  abstract public function get_batch();\n\n  /**\n   * Process single item. If returns false - the item is removed from the queue. Otherwise repeated.\n   * \n   * @param mixed $item\n   * @return mixed|false\n   */\n  abstract public function process_item($item);\n}\n"
  },
  {
    "path": "lib/classes/batch/class-migration.php",
    "content": "<?php\n/**\n * Batch Task \n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia\\Batch;\n\nabstract class Migration extends BatchTask {\n  // Indicates whether we should stop querying new items\n  protected $stop = false;\n\n  public function get_state() {\n    $state = parent::get_state();\n    \n    $state['id'] = $this->id;\n    $state['is_migration'] = true;\n    $state['stop'] = $this->stop;\n\n    return $state;\n  }\n\n  public function set_state($state) {\n    parent::set_state($state);\n\n    $this->stop = $state['stop'] ?? false;\n  }\n\n  /**\n   * Can be used to test if the migration should run\n   * For example, if there are any old data that needs to be migrated\n   */\n  public function should_run() {\n    return true;\n  }\n}\n"
  },
  {
    "path": "lib/classes/batch/interface-batch.php",
    "content": "<?php\n/**\n * Batch Task Interface\n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia\\Batch;\n\ninterface IBatchTask {\n\n  /**\n   * Initialize the state of the task\n   */\n  public function init_state();\n\n  /**\n   * Get human-friendly description\n   */\n  public function get_description();\n\n  /**\n   * Get the current state of the task\n   */\n  public function get_state();\n  \n  /**\n   * Set/restore the current state of the task\n   */\n  public function set_state($state);\n\n  /**\n   * Get the next batch of items to process\n   */\n  public function get_batch();\n\n  /**\n   * Process the item\n   */\n  public function process_item($item);\n}\n"
  },
  {
    "path": "lib/classes/class-addons.php",
    "content": "<?php\n\n/**\n * Addons manager.\n *\n * Checks if current theme or any of the installed plugins require WP-Stateless addon.\n * Shows message to the user if addon is recommended.\n * Responsible for showing the list of addons on the settings page.\n *\n * @since 3.3.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  class Addons {\n    use Singleton;\n\n    /**\n     * Addons list.\n     *\n     * @var array\n     */\n    protected $addons = [];\n\n    /**\n     * Addons slugs list.\n     *\n     * @var array\n     */\n    protected $addon_ids = [];\n\n    /**\n     * Recommended addons count.\n     *\n     * @var int\n     */\n    protected $recommended = 0;\n\n    /**\n     * Active addons count.\n     *\n     * @var int\n     */\n    protected $active = 0;\n\n    protected function __construct() {\n      $addons_file = ud_get_stateless_media()->path('static/data/addons.php', 'dir');\n\n      if ( file_exists($addons_file) ) {\n        $this->addons     = require_once($addons_file);\n        $this->addon_ids  = array_keys($this->addons);\n      }\n\n      add_action('sm::module::init', array($this, 'check_addons'));\n      add_action('sm::module::messages', array($this, 'show_messages'), 10, 3);\n      add_action('wp_stateless_addons_tab_content', array($this, 'tab_content'));\n      add_filter('wp_stateless_addons_tab_visible', array($this, 'addons_tab_visible'), 10, 1);\n      add_filter('wp_stateless_restrict_compatibility', array($this, 'restrict_compatibility'), 10, 3);\n      add_filter('wp_stateless_addon_files_root', array($this, 'get_addon_files_root'), 10);\n      add_filter('wp_stateless_addon_sync_files_path', array($this, 'get_addon_sync_files_path'), 10, 2);\n      add_filter('wp_stateless_addon_files_url', array($this, 'get_addon_files_url'), 10, 2);\n    }\n\n    /**\n     * Check current theme and installed plugins for recommended addons.\n     * Fires hok to display messages if recommended addons are not active.\n     * \n     */\n    public function check_addons() {\n      $active_plugins = Helper::get_active_plugins();\n\n      foreach ($this->addons as $id => $addon) {\n        // Recommended theme addons\n        if ( isset($addon['theme_name']) ) {\n          if ( Helper::is_theme_name($addon['theme_name']) ) {\n            $this->addons[$id]['recommended'] = true;\n            $this->recommended++;\n          }\n        }\n\n        // Recommended plugin addons\n        if ( isset($addon['plugin_files']) && is_array($addon['plugin_files']) ) {\n          foreach ($addon['plugin_files'] as $file) {\n            if ( in_array($file, $active_plugins) ) {\n              $this->addons[$id]['recommended'] = true;\n              $this->recommended++;\n\n              break;\n            }\n          }\n        }\n\n        // Active addons\n        if ( isset($addon['addon_file']) ) {\n          if ( in_array($addon['addon_file'], $active_plugins) ) {\n            $this->addons[$id]['active'] = true;\n            $this->active++;\n          }\n        }\n\n        // Installed addons\n        if ( isset($addon['addon_file']) ) {\n          if ( file_exists( WP_PLUGIN_DIR . '/' . $addon['addon_file'] ) ) {\n            $this->addons[$id]['installed'] = true;\n            $this->addons[$id]['activate_link'] = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $addon['addon_file'], 'activate-plugin_' . $addon['addon_file'] );\n          }\n        }\n      }\n\n      // Show message if recommended addons are not active\n      do_action('sm::module::messages', $this->addons);\n    }\n\n    /**\n     * Add messages for recommended addons.\n     * \n     * @param array $addons\n     * @param array $recommended\n     * @param array $active\n     * \n     */\n    public function show_messages($addons) {\n      foreach ($addons as $id => $addon) {\n        if ( !isset($addon['recommended']) || isset($addon['active']) ) {\n          continue;\n        }\n\n        $title = $addon['title'];\n        $button = __('Download Addon', ud_get_stateless_media()->domain);\n        $button_link = admin_url('upload.php?page=stateless-settings&tab=stless_addons_tab');\n        $message = sprintf(__('Download and activate the WP-Stateless addon for %s to ensure compatibility.', ud_get_stateless_media()->domain), $title);\n\n        if ( isset($addon['activate_link']) ) {\n          $button = __('Activate Addon', ud_get_stateless_media()->domain);\n          $button_link = $addon['activate_link'];\n          $message = sprintf(__('Activate the WP-Stateless addon for %s to ensure compatibility.', ud_get_stateless_media()->domain), $title);\n        }\n\n        $plugin_activate_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=classic-widgets/classic-widgets.php', 'activate-plugin_classic-widgets/classic-widgets.php' );\n\n        ud_get_stateless_media()->errors->add([\n          'key' => $id,\n          'title' => sprintf(__('WP-Stateless: Install the %s Addon', ud_get_stateless_media()->domain), $title),\n          'button' => $button,\n          'button_link' => $button_link,\n          'message' => $message,\n        ], 'notice');  \n      }\n    }\n\n    /**\n     * Outputs 'Addons' tab content on the settings page.\n     * \n     */\n    public function tab_content() {\n      // Prepare filters\n      $current_filter = isset($_GET['filter']) && !empty($_GET['filter']) ? $_GET['filter'] : 'all';\n\n      $url = ud_get_stateless_media()->get_settings_page_url('?page=stateless-settings') . '&tab=stless_addons_tab&filter=%s';\n\n      $filters = [\n        'all' => [\n          'title' => __('All <span class=\"count\">(%d)</span>', ud_get_stateless_media()->domain),\n          'count' => count($this->addons),\n        ],\n        'recommended' => [\n          'title' => __('Recommended <span class=\"count\">(%d)</span>', ud_get_stateless_media()->domain),\n          'count' => $this->recommended,\n        ],\n        'active' => [\n          'title' => __('Active <span class=\"count\">(%d)</span>', ud_get_stateless_media()->domain),\n          'count' => $this->active,\n        ],\n        'inactive' => [\n          'title' => __('Inactive <span class=\"count\">(%d)</span>', ud_get_stateless_media()->domain),\n          'count' => count($this->addons) - $this->active,\n        ],\n      ];\n\n      $filters = Helper::array_of_objects($filters);\n\n      // Filter addons\n      switch ($current_filter) {\n        case 'recommended':\n          $addons = array_filter($this->addons, function($addon) {\n            return isset($addon['recommended']);\n          });\n          break;\n        case 'active':\n          $addons = array_filter($this->addons, function($addon) {\n            return isset($addon['active']);\n          });\n          break;\n        case 'inactive':\n          $addons = array_filter($this->addons, function($addon) {\n            return !isset($addon['active']);\n          });\n          break;\n        default:\n          $addons = $this->addons;\n          break;\n      }\n\n      $addons = $this->sort_addons($addons);\n      $addons = $this->get_addons_view($addons);\n      $addons = Helper::array_of_objects($addons);\n\n      include ud_get_stateless_media()->path('static/views/addons-tab.php', 'dir');\n    }\n\n    /**\n     * Prepare addon data for output.\n     * \n     * @param array $addons\n     * @return array\n     */\n    private function get_addons_view($addons) {\n      $plugin_desc = __('Provides compatibility between the %s and the WP-Stateless plugins.', ud_get_stateless_media()->domain);\n      $theme_desc = __('Provides compatibility between the %s theme and the WP-Stateless plugin.', ud_get_stateless_media()->domain);\n\n      $link = ud_get_stateless_media()->get_docs_page_url('addons/%s');\n\n      $defaults = [\n        'title'         => '',\n        'icon'          => '',\n        'description'   => '',\n        'recommended'   => false,\n        'active'        => false,\n        'installed'     => false,\n        'activate_link' => '',\n        'hubspot_id'    => '',\n        'hubspot_link'  => '',\n        'repo'          => '',\n        'docs'          => '',\n        'link'          => '',\n        'wp'            => '',\n        'card_class'    => '',\n        'status'        => '',\n      ];\n\n      foreach ($addons as $id => $addon) {\n        if ( isset($addon['theme_name']) ) {\n          $addon['description'] = sprintf($theme_desc, $addon['title']);\n        } else {\n          $addon['description'] = sprintf($plugin_desc, $addon['title']);\n        }\n\n        if ( isset($addon['active']) && $addon['active']) {\n          $addon['card_class'] = 'active';\n          $addon['status'] =  __('active', ud_get_stateless_media()->domain);\n        } elseif ( isset($addon['recommended']) && $addon['recommended']) {\n          $addon['card_class'] = 'recommended';\n          $addon['status'] =  __('recommended', ud_get_stateless_media()->domain);\n        }\n\n        $addon['docs'] = sprintf($link, $id);\n        $addon['link'] = $addon['docs'];\n\n        $addons[$id] = wp_parse_args($addon, $defaults);\n      }\n\n      return $addons;\n    }\n\n    /**\n     * Sort addons: \n     * - recommended not active\n     * - other\n     * - active\n     * \n     * @param array $addons\n     * @return array\n     */\n    private function sort_addons($addons) {\n      uasort($addons, function($a1, $a2) {\n        $c1 = isset($a1['recommended']) ? -1 : 0;\n        $c1 += isset($a1['active']) ? 5 : 0;\n\n        $c2 = isset($a2['recommended']) ? -1 : 0;\n        $c2 += isset($a2['active']) ? 5 : 0;\n\n        if ( $c1 !== $c2 ) {\n          return $c1 > $c2 ? 1 : -1;\n        }\n\n        return strcasecmp( $a1['title'], $a2['title'] );\n      });\n\n      return $addons;\n    }\n\n    /**\n     * Check if 'Addons' tab should be visible.\n     */\n    public function addons_tab_visible($visible) {\n      return count($this->addons) > 0;\n    }\n\n    /**\n     * Restrict internal compatibility.\n     */\n    public function restrict_compatibility($restrict, $id, $is_internal) {\n      // If we have a plugin with the same ID as internal compatibility then disable internal compatibility\n      if ($is_internal) {\n        if ( in_array($id, $this->addon_ids) ) {\n          return true;\n        }\n      }\n\n      return $restrict;\n    }\n\n    /**\n     * Get the root for saving addons files.\n     * In Stateless Mode this will be the root of the bucket.\n     * In other modes this will be the uploads base directory.\n     */\n    public function get_addon_files_root($root_path) {\n      if ( ud_get_stateless_media()->is_mode('stateless') ) {\n        $root_path = ud_get_stateless_media()->get_gs_path();\n      } else {\n        $upload_dir = wp_get_upload_dir();\n        $root_path = $upload_dir['basedir'];\n      }\n      \n      return $root_path;\n    }\n\n    /**\n     * Get the root path for syncing addons files.\n     * In Stateless and Ephemeral Modes this will be the root of the bucket.\n     * In other modes this will be the uploads base directory.\n     */\n    public function get_addon_sync_files_path($root_path, $addon_folder = '') {\n      if ( ud_get_stateless_media()->is_mode( ['stateless', 'ephemeral'] ) ) {\n        $root_path = ud_get_stateless_media()->get_gs_path();\n      } else {\n        $upload_dir = wp_get_upload_dir();\n        $root_path = $upload_dir['basedir'];\n      }\n      \n      if ( !empty($addon_folder) ) {\n        $root_path = [\n          rtrim($root_path, '/'),\n          ltrim($addon_folder, '/'),\n        ];\n\n        $root_path = implode('/', $root_path);\n      }\n\n      return $root_path;\n    }\n\n    /**\n     * Get the root path for syncing addons files.\n     * In Stateless and Ephemeral Modes this will be the root of the bucket.\n     * In other modes this will be the uploads base directory.\n     */\n     public function get_addon_files_url($root_url, $addon_folder = '') {\n      $root_url = '';\n\n      if ( ud_get_stateless_media()->is_mode( ['disabled', 'backup'] ) ) {\n        $upload_dir = wp_get_upload_dir();\n        $root_url = $upload_dir['baseurl'];\n      } else {\n        $root_url = ud_get_stateless_media()->get_gs_host();\n      }\n\n      if ( !empty($addon_folder) ) {\n        $root_url = [\n          rtrim($root_url, '/'),\n          ltrim($addon_folder, '/'),\n        ];\n\n        $root_url = implode('/', $root_url);\n      }\n\n      return $root_url;\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-ajax.php",
    "content": "<?php\n\n/**\n * AJAX Handler\n */\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\Ajax')) {\n\n    final class Ajax {\n\n      /**\n       * The list of wp_ajax_{name} actions\n       *\n       * @var array\n       */\n      var $actions = array(\n        'stateless_process_image',\n        'stateless_process_file',\n        'stateless_get_bucket_folder'\n      );\n\n      /**\n       * The list of wp_ajax_nopriv_{name} actions\n       *\n       * @var array\n       */\n      var $nopriv_actions = array();\n\n      /**\n       * Init AJAX actions\n       *\n       * @author peshkov@UD\n       */\n      public function __construct() {\n        foreach ($this->actions as $action) {\n          add_action('wp_ajax_' . $action, array($this, 'request'));\n        }\n\n        foreach ($this->nopriv_actions as $action) {\n          add_action('wp_ajax_nopriv_' . $action, array($this, 'request'));\n        }\n      }\n\n      /**\n       * Handles AJAX request\n       *\n       * @author peshkov@UD\n       */\n      public function request() {\n        check_ajax_referer('sm_inline_sync');\n\n        if ( !is_user_logged_in() ) {\n          wp_send_json_error( array( 'error' => __( 'You are not allowed to do this action.', ud_get_stateless_media()->domain ) ) );\n        }\n\n        global $doing_manual_sync;\n\n        $response = array(\n          'message' => '',\n          'html' => '',\n        );\n\n        try {\n          $doing_manual_sync = true;\n\n          $action = $_REQUEST['action'];\n\n          /** Determine if the current class has the method to handle request */\n          if (is_callable(array($this, 'action_' . $action))) {\n            $response = call_user_func_array(array($this, 'action_' . $action), array($_REQUEST));\n          }\n          /** Determine if external function exists to handle request */\n          elseif (is_callable('action_' . $action)) {\n            $response = call_user_func_array($action, array($_REQUEST));\n          } elseif (is_callable($action)) {\n            $response = call_user_func_array($action, array($_REQUEST));\n          }\n          /** Oops! */\n          else {\n            throw new \\Exception(__('Incorrect Request'));\n          }\n        } catch (\\Exception $e) {\n          wp_send_json_error($e->getMessage());\n        }\n\n        wp_send_json_success($response);\n      }\n\n      /**\n       * Regenerate image sizes.\n       */\n      public function action_stateless_process_image() {\n        set_time_limit(0);\n\n        $image = Utility::process_image_by_id(intval($_REQUEST['id']));\n\n        return sprintf(__('%1$s (ID %2$s) was successfully synced in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($image->ID)), $image->ID, timer_stop());\n      }\n\n      /**\n       * @return string\n       * @throws \\Exception\n       */\n      public function action_stateless_process_file() {\n        set_time_limit(0);\n\n        $file = Utility::process_file_by_id(intval($_REQUEST['id']));\n\n        return sprintf(__('%1$s (ID %2$s) was successfully synchronised in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($file->ID)), $file->ID, timer_stop());\n      }\n\n      /**\n       * Returns bucket folder (to check whether there is something to continue in JS)\n       */\n      public function action_stateless_get_bucket_folder() {\n        return array('bucket_folder'  => get_option('sm_root_dir'));\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-api.php",
    "content": "<?php\n\n/**\n * API Handler\n *\n *\n *\n * @since 1.0.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  use wpCloud\\StatelessMedia\\Sync\\FileSync;\n  use wpCloud\\StatelessMedia\\Sync\\ImageSync;\n  use wpCloud\\StatelessMedia\\Sync\\NonLibrarySync;\n\n  if (!class_exists('wpCloud\\StatelessMedia\\API')) {\n\n    /**\n     * Class API\n     *\n     * @package wpCloud\\StatelessMedia\n     */\n    final class API {\n\n      /**\n       * Decoded auth_token data\n       *\n       * @var null|\\stdClass\n       */\n      static private $tokenData = null;\n\n      /**\n       * Validate auth token and save data for further processing\n       *\n       * @param \\WP_REST_Request $request\n       * @return bool|\\WP_Error\n       */\n      static public function authCheck(\\WP_REST_Request $request) {\n        $auth_token = $request->get_header('authorization');\n        // Allow using custom `x-wps-auth` header if authorization hedaer is disabled\n        if (!$auth_token) $auth_token = $request->get_header('x-wps-auth');\n\n        if (!$auth_token) return false;\n\n        try {\n          self::$tokenData = Utility::verify_jwt_token($auth_token);\n        } catch (\\Exception $e) {\n          self::$tokenData = null;\n          return new \\WP_Error('auth_failed', $e->getMessage(), ['status' => 401]);\n        }\n        return true;\n      }\n\n      /**\n       * API Status Endpoint.\n       *\n       * @return \\WP_REST_Response\n       */\n      static public function status() {\n        return new \\WP_REST_Response(array(\n          \"ok\" => true,\n          \"message\" => \"API up.\"\n        ), 200);\n      }\n\n      /**\n       * Get settings\n       *\n       * @todo Implement this if needed\n       * @param \\WP_REST_Request $request\n       * @return \\WP_REST_Response|\\WP_Error\n       */\n      static public function getSettings(\\WP_REST_Request $request) {\n        return new \\WP_Error('not_implemented', 'Method not implemented', ['status' => 501]);\n      }\n\n      /**\n       * Update settings\n       *\n       * @param \\WP_REST_Request $request\n       * @return \\WP_REST_Response|\\WP_Error\n       */\n      static public function updateSettings(\\WP_REST_Request $request) {\n        if (self::$tokenData === null || empty(self::$tokenData->user_id)) {\n          return new \\WP_Error('unauthorized', 'Auth token looks incorrect', ['status' => 401]);\n        }\n        $is_gae                 = apply_filters('wp_stateless_is_app_engine', false);\n        $upload_dir             = wp_upload_dir();\n        $is_upload_dir_writable = is_writable($upload_dir['basedir']);\n\n        try {\n          $queryParams = $request->get_json_params();\n          if (empty($queryParams)) throw new \\Exception('Query is empty');\n\n          $bucketName = isset($queryParams['bucket_name']) ? $queryParams['bucket_name'] : null;\n          $privateKeyData = isset($queryParams['private_key_data']) ? $queryParams['private_key_data'] : null;\n\n          if (!$bucketName || !$privateKeyData) {\n            throw new \\Exception('bucket_name and private_key_data are required');\n          }\n\n          if ($privateKeyData) {\n            $privateKeyData = base64_decode($privateKeyData);\n          }\n\n          switch (self::$tokenData->is_network) {\n            case true:\n              if (!user_can(self::$tokenData->user_id, 'manage_network_options')) {\n                return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n              }\n              /**\n               * If Google App Engine detected - set Stateless mode\n               * and Google App Engine compatibility by default\n               */\n              if ($is_gae || !$is_upload_dir_writable) {\n                update_site_option('sm_mode', 'stateless');\n\n                $modules = get_site_option('stateless-modules', array());\n                if ($is_gae && empty($modules['google-app-engine']) || $modules['google-app-engine'] != 'true') {\n                  $modules['google-app-engine'] = 'true';\n                  update_site_option('stateless-modules', $modules);\n                }\n              } elseif (get_site_option('sm_mode', 'disabled') == 'disabled') {\n                update_site_option('sm_mode', 'ephemeral');\n              }\n              update_site_option('sm_bucket', $bucketName);\n              update_site_option('sm_key_json', $privateKeyData);\n              break;\n\n            case false:\n              if (!user_can(self::$tokenData->user_id, 'manage_options')) {\n                return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n              }\n              /**\n               * If Google App Engine detected - set Stateless mode\n               * and Google App Engine compatibility by default\n               */\n              if ($is_gae || !$is_upload_dir_writable) {\n                update_option('sm_mode', 'stateless');\n\n                $modules = get_option('stateless-modules', array());\n                if ($is_gae && empty($modules['google-app-engine']) || $modules['google-app-engine'] != 'true') {\n                  $modules['google-app-engine'] = 'true';\n                  update_option('stateless-modules', $modules);\n                }\n              } elseif (get_option('sm_mode', 'disabled') == 'disabled') {\n                update_option('sm_mode', 'ephemeral');\n              }\n              update_option('sm_bucket', $bucketName);\n              update_option('sm_key_json', $privateKeyData);\n              break;\n          }\n\n          return new \\WP_REST_Response(array(\n            'ok' => true,\n            'message' => 'Settings updated successfully'\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n\n      /**\n       * Get all available processes with their states\n       * \n       * @return \\WP_REST_Response|\\WP_Error\n       */\n      static public function syncGetProcesses() {\n        try {\n          if (!user_can(self::$tokenData->user_id, 'manage_options')) {\n            return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n          }\n\n          return new \\WP_REST_Response(array(\n            'ok' => true,\n            'data' => Utility::get_available_sync_classes()\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n\n      /**\n       * Get a single process by id (base64 encoded class name)\n       * \n       * @param \\WP_REST_Request $request\n       * @return \\WP_Error|\\WP_REST_Response\n       */\n      static public function syncGetProcess(\\WP_REST_Request $request) {\n        try {\n          if (!user_can(self::$tokenData->user_id, 'manage_options')) {\n            return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n          }\n\n          $id = base64_decode($request->get_param('id'));\n          if (!class_exists($id)) {\n            throw new \\Exception(sprintf('Could not get process by id %s', $id));\n          }\n\n          $syncClasses = Utility::get_available_sync_classes();\n\n          if (!array_key_exists($id, $syncClasses)) {\n            throw new \\Exception(sprintf('Could not get process by id %s', $id));\n          }\n\n          return new \\WP_REST_Response(array(\n            'ok' => true,\n            'data' => $syncClasses[$id]\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n\n      /**\n       * Run sync by processing class id\n       * \n       * @param \\WP_REST_Request $request\n       * @return \\WP_Error|\\WP_REST_Response\n       */\n      static public function syncRun(\\WP_REST_Request $request) {\n        try {\n          if (!user_can(self::$tokenData->user_id, 'manage_options')) {\n            return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n          }\n\n          $params = wp_parse_args($request->get_params(), [\n            'id' => null,\n            'limit' => null,\n            'order' => null,\n          ]);\n\n          if (empty($params['id']) || !class_exists($params['id'])) {\n            throw new \\Exception(sprintf('Processing class not found: %s', $params['id']));\n          }\n\n          $processingClass = $params['id'];\n\n          return new \\WP_REST_Response(array(\n            'ok' => $processingClass::instance()->start($params)\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n\n      /**\n       * Stop sync by processing class id\n       * \n       * @param \\WP_REST_Request $request\n       * @return \\WP_Error|\\WP_REST_Response\n       */\n      static public function syncStop(\\WP_REST_Request $request) {\n        try {\n          if (!user_can(self::$tokenData->user_id, 'manage_options')) {\n            return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n          }\n\n          $params = wp_parse_args($request->get_params(), [\n            'id' => null\n          ]);\n\n          if (empty($params['id']) || !class_exists($params['id'])) {\n            throw new \\Exception(sprintf('Processing class not found: %s', $params['id']));\n          }\n\n          $processingClass = $params['id'];\n\n          return new \\WP_REST_Response(array(\n            'ok' => $processingClass::instance()->stop()\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n\n      /**\n       * Batch Status Endpoint.\n       *\n       * @param \\WP_REST_Request $request\n       * @return \\WP_REST_Response\n       */\n      static public function batchState(\\WP_REST_Request $request) {\n        try {\n          return new \\WP_REST_Response(array(\n            'ok' => true,\n            'data' => apply_filters('wp_stateless_batch_state', [], $request->get_params()),\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n\n      /**\n       * Batch action (start/pause/resume)\n       * \n       * @param \\WP_REST_Request $request\n       * @return \\WP_Error|\\WP_REST_Response\n       */\n      static public function batchAction(\\WP_REST_Request $request) {\n        try {\n          if (!user_can(self::$tokenData->user_id, 'manage_options')) {\n            return new \\WP_Error('not_allowed', 'Sorry, you are not allowed to perform this action', ['status' => 403]);\n          }\n\n          wp_set_current_user(self::$tokenData->user_id);\n\n          $params = wp_parse_args($request->get_params(), [\n            'action' => '',\n          ]);\n\n          if ( empty($params['action']) ) {\n            throw new \\Exception('Batch action not set');\n          }\n\n          $action = $params['action'];\n\n          $data = apply_filters(\"wp_stateless_batch_action_$action\", [], $params);\n\n          $data = array_merge(\n            $data,\n            apply_filters(\"wp_stateless_batch_state\", [], ['force_migrations' => true]),\n          );\n\n          return new \\WP_REST_Response(array(\n            'data' => $data,\n          ));\n        } catch (\\Throwable $e) {\n          return new \\WP_Error('internal_server_error', $e->getMessage(), ['status' => 500]);\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-bootstrap.php",
    "content": "<?php\n\n/**\n * Bootstrap\n *\n * @since 0.2.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  use Google\\Cloud\\Storage\\StorageClient;\n  use Google\\Auth\\HttpHandler\\HttpHandlerFactory;\n  use wpCloud\\StatelessMedia\\Sync\\FileSync;\n  use wpCloud\\StatelessMedia\\Sync\\ImageSync;\n  use wpCloud\\StatelessMedia\\Sync\\NonLibrarySync;\n  use wpCloud\\StatelessMedia\\Batch\\BatchTaskManager;\n\n  if (!class_exists('wpCloud\\StatelessMedia\\Bootstrap')) {\n\n    final class Bootstrap extends \\UsabilityDynamics\\WP\\Bootstrap_Plugin {\n\n      const REQUIRED_PHP_VERSION = '5.5';\n\n      /**\n       * Google Storage Client\n       * Use $this->get_client()\n       *\n       * @var \\wpCloud\\StatelessMedia\\GS_CLient\n       */\n      private $client;\n\n      /**\n       * Plugin core version.\n       *\n       * @static\n       * @property $version\n       * @type {Object}\n       */\n      public static $version = '3.0';\n\n      /**\n       * Singleton Instance Reference.\n       *\n       * @protected\n       * @static\n       * @property $instance\n       * @type \\wpCloud\\StatelessMedia\\Bootstrap object\n       */\n      protected static $instance = null;\n\n      /**\n       * Constructor\n       * Attention: MUST NOT BE CALLED DIRECTLY! USE get_instance() INSTEAD!\n       * @param $args\n       * @author peshkov@UD\n       */\n      protected function __construct($args) {\n        /**\n         * Need to be loaded before plugin initialization.\n         */\n        if ( !(defined('WP_STATELESS_COMPATIBILITY_GAE') && !WP_STATELESS_COMPATIBILITY_GAE) ) {\n          AppEngine::instance();\n        }\n\n        parent::__construct($args);\n\n        self::$version = $args['version'] ?? self::$version;\n\n        /**\n         * Add custom args to api ping request\n         */\n        add_filter('ud-api-client-ping-args', function ($args, $_, $__) {\n          $args['multisite'] = is_multisite();\n          $args['stateless_media'] = Utility::get_stateless_media_data_count();\n          return $args;\n        }, 10, 3);\n\n        //** Define our Admin Notices handler object */\n        $this->errors = new Errors(array_merge($args, array(\n          'type' => $this->type\n        )));\n\n        // Initialize compatibility modules.\n        add_action('plugins_loaded', function () {\n          Addons::instance();\n          new Module();\n          DynamicImageSupport::instance();\n        }, 20);\n\n        /**\n         * Define settings and UI.\n         *\n         * Example:\n         *\n         * Get option\n         * $this->get( 'sm.client_id' )\n         *\n         * Manually Update/Add option\n         * $this->set( 'sm.client_id', 'zxcvv12adffse' );\n         */\n        $this->settings = new Settings($this);\n        Status::instance();\n      }\n\n      /**\n       * Prevent loading of textdomain\n       */\n      public function load_textdomain() {\n      }\n\n      /**\n       * Instantiate class.\n       */\n      public function init() {\n        // Parse feature flags, set constants.\n        $this->parse_feature_flags();\n        $sm_mode = $this->get('sm.mode');\n\n        /**\n         * Send admin email\n         */\n        add_action('wp_stateless_send_admin_email', array($this, 'send_admin_email'), 10, 3);\n\n        // Should be created unconditionally and as early as possible to handle batch migration requests\n        Migrator::instance();\n        BatchTaskManager::instance();\n\n        new SyncNonMedia();\n\n        ImageSync::instance();\n        FileSync::instance();\n        NonLibrarySync::instance();\n\n        // Invoke REST API\n        add_action('rest_api_init', array($this, 'api_init'));\n\n        // Register meta boxes and fields for media edit page\n        add_filter('rwmb_meta_boxes', array($this, 'attachment_meta_box_callback'));\n\n        // Register meta boxes and fields for media modal page\n        add_filter('attachment_fields_to_edit', array($this, 'attachment_modal_meta_box_callback'), 11, 2);\n\n        // Get the REST API root\n        add_filter('wp_stateless_rest_api_root', array($this, 'get_rest_api_root'));\n\n        /**\n         * Init hook\n         */\n        add_action('admin_init', array($this, 'admin_init'));\n\n        /**\n         * Handle switch blog properly.\n         */\n        add_action('switch_blog', array($this, 'on_switch_blog'), 10, 2);\n\n        /**\n         * Filter for getting stateless settings\n         */\n        add_filter('stateless::get_settings', array($this, 'get_settings'), 10);\n\n        /**\n         * Init AJAX jobs\n         */\n        new Ajax();\n\n        /**\n         * Load WP-CLI Commands\n         */\n        if (defined('WP_CLI') && WP_CLI) {\n          include_once($this->path('lib/cli/class-sm-cli-command.php', 'dir'));\n        }\n\n        /**\n         * Add scripts\n         */\n        add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));\n\n        /**\n         * Delete table when blog is deleted.\n         */\n        add_action('wp_delete_site', array($this, 'wp_delete_site'));\n\n        /**\n         * To prevent fatal errors for users who use PHP 5.5 or less.\n         */\n        if (version_compare(PHP_VERSION, self::REQUIRED_PHP_VERSION, '<')) {\n          $this->errors->add(sprintf(__('The plugin requires PHP %s or higher. You current PHP version %s is too old.', ud_get_stateless_media()->domain), '<b>' . self::REQUIRED_PHP_VERSION . '</b>', '<b>' . PHP_VERSION . '</b>'));\n        }\n\n        /**\n         * Add the currently processing nag\n         */\n        foreach (Utility::get_available_sync_classes() as $process) {\n          if ($process->is_running()) {\n            $this->errors->add([\n              'title' => __('Media Library Synchronization Underway', ud_get_stateless_media()->domain),\n              'message' => __('WP-Stateless is synchronizing your media library in accordance with the Mode setting. You can view progress or stop the process via the WP-Stateless Sync settings area.', ud_get_stateless_media()->domain),\n              'button' => __('View Synchronization', ud_get_stateless_media()->domain),\n              'button_link' => admin_url('upload.php?page=stateless-settings&tab=stless_sync_tab'),\n              'key' => 'processing-in-progress'\n            ], 'message');\n            break;\n          }\n        }\n\n        /* Initialize plugin only if Mode is not 'disabled'. */\n        if (($sm_mode !== 'disabled' && $sm_mode !== 'stateless') || ($sm_mode === 'stateless' && (wp_doing_ajax() || wp_doing_cron()))) {\n\n          /**\n           * Determine if we have issues with connection to Google Storage Bucket\n           * if SM is not disabled.\n           */\n          $is_connected = $this->is_connected_to_gs();\n\n          if (is_wp_error($is_connected)) {\n            $this->errors->add($is_connected->get_error_message(), 'warning', false);\n          }\n\n          if ($googleSDKVersionConflictError = get_transient(\"wp_stateless_google_sdk_conflict\")) {\n            $this->errors->add($googleSDKVersionConflictError, 'warning', false);\n          }\n\n          /**\n           * Carry on only if we do not have errors.\n           */\n          if (!$this->has_errors()) {\n\n            if (in_array($sm_mode, array('cdn', 'ephemeral', 'stateless'))) {\n              /**\n               * init main filters\n               */\n              $this->_init_filters('main');\n            }\n\n            if ($sm_mode === 'ephemeral' || $sm_mode === 'stateless') {\n              // Store attachment id in a static variable on 'intermediate_image_sizes_advanced' filter.\n              // Utility::store_can_delete_attachment();\n              if (function_exists('is_wp_version_compatible') && is_wp_version_compatible('5.3-RC4-46673')) {\n                add_filter('intermediate_image_sizes_advanced', array('wpCloud\\StatelessMedia\\Utility', 'store_can_delete_attachment'), 10, 3);\n              }\n            }\n\n            if ($sm_mode === 'stateless') {\n              /**\n               * Replacing local path to gs:// for using it on StreamWrapper\n               */\n              add_filter('upload_dir', array($this, 'filter_upload_dir'), 99);\n\n              /**\n               * Stateless mode working only with GD library\n               */\n              add_filter('wp_image_editors', array($this, 'select_wp_image_editors'));\n\n              /**\n               * Init GS client\n               */\n              global $gs_client;\n              if ($gs_client = $this->init_gs_client()) {\n                StreamWrapper::register($gs_client);\n              }\n            }\n\n            if ($this->get('sm.delete_remote') == 'true') {\n              /**\n               * On physical file deletion we remove any from GS\n               * We need priority grater than default (10) for ShortPixel plugin to work properly.\n               */\n              add_filter('delete_attachment', array($this, 'remove_media'), 11);\n            }\n\n            /**\n             * init client's filters\n             */\n            $this->_init_filters('client');\n          }\n        } elseif ($sm_mode == 'stateless') {\n          /**\n           * Determine if we have issues with connection to Google Storage Bucket\n           * if SM is not disabled.\n           */\n          $is_connected = $this->is_connected_to_gs();\n\n          if (is_wp_error($is_connected)) {\n            $this->errors->add($is_connected->get_error_message(), 'warning', false);\n          }\n\n          if ($googleSDKVersionConflictError = get_transient(\"wp_stateless_google_sdk_conflict\")) {\n            $this->errors->add($googleSDKVersionConflictError, 'warning', false);\n          }\n\n          /**\n           * Carry on only if we do not have errors.\n           */\n          if (!$this->has_errors()) {\n            /**\n             * Replacing local path to gs:// for using it on StreamWrapper\n             */\n            add_filter('upload_dir', array($this, 'filter_upload_dir'), 99);\n\n            /**\n             * Stateless mode working only with GD library\n             */\n            add_filter('wp_image_editors', array($this, 'select_wp_image_editors'));\n\n            /**\n             * Init GS client\n             */\n            global $gs_client;\n            if ($gs_client = $this->init_gs_client()) {\n              StreamWrapper::register($gs_client);\n            }\n\n            /**\n             * init client's filters\n             */\n            $this->_init_filters('client');\n\n            /**\n             * init main filters\n             */\n            $this->_init_filters('main');\n          }\n        }\n      }\n\n      /**\n       * Init additional filters which uses on all modes\n       * @param string $type\n       */\n      private function _init_filters($type = '') {\n        switch ($type) {\n          case 'main':\n            add_filter('wp_get_attachment_image_attributes', array($this, 'wp_get_attachment_image_attributes'), 20, 3);\n            add_filter('wp_get_attachment_url', array($this, 'wp_get_attachment_url'), 20, 2);\n            add_filter('get_attached_file', array($this, 'get_attached_file'), 9, 2);\n            add_filter('attachment_url_to_postid', array($this, 'attachment_url_to_postid'), 20, 2);\n\n            if ($this->get('sm.body_rewrite') == 'true' || $this->get('sm.body_rewrite') == 'enable_editor') {\n              add_filter('the_content', array($this, 'the_content_filter'), 99);\n            }\n\n            if ($this->get('sm.body_rewrite') == 'true' || $this->get('sm.body_rewrite') == 'enable_meta') {\n              add_filter('get_post_metadata', array($this, 'post_metadata_filter'), 2, 4);\n            }\n\n            add_filter('wp_stateless_bucket_link', array($this, 'wp_stateless_bucket_link'));\n            break;\n          case 'client':\n            /**\n             * Add custom actions to media rows\n             */\n            add_filter('media_row_actions', array($this, 'add_custom_row_actions'), 10, 3);\n\n            /**\n             * Hashify file name if option is enabled\n             */\n            if ($this->get('sm.hashify_file_name') == 'true') {\n              add_filter('sanitize_file_name', array('wpCloud\\StatelessMedia\\Utility', 'randomize_filename'), 10);\n            }\n\n            /**\n             * Override Cache Control if option is enabled\n             */\n            add_filter('sm:item:cacheControl', array($this->settings, 'override_cache_control'));\n\n            add_filter('wp_stateless_file_name', array($this, 'handle_root_dir'), 10, 4);\n\n            /**\n             * Extends metadata by adding GS information.\n             */\n            add_filter('wp_get_attachment_metadata', array($this, 'wp_get_attachment_metadata'), 10, 2);\n\n            /**\n             * Add/Edit Media\n             *\n             * Once added or edited we can get into Attachment ID then get all image sizes and sync them with GS\n             * We can't use this. That's prevent removing this filter.\n             */\n            add_filter('wp_update_attachment_metadata', array('wpCloud\\StatelessMedia\\Utility', 'add_media'), 999, 2);\n\n            /**\n             * Delete original in the end of generating metadata\n             * it does not work with PDF\n             */\n            // add_filter('wp_generate_attachment_metadata', function ($metadata, $attachment_id, $state) {\n            //   if (!in_array(ud_get_stateless_media()->get('sm.mode'), array('ephemeral'))) return $metadata;\n            //   @unlink(get_attached_file($attachment_id, true));\n            //   return $metadata;\n            // }, 99, 3);\n\n            /**\n             * Rewrite Image URLS\n             */\n            add_filter('image_downsize', array($this, 'image_downsize'), 99, 3);\n            add_filter('wp_calculate_image_srcset', array($this, 'wp_calculate_image_srcset'), 10, 5);\n\n            /**\n             * Trigger module initialization and registration.\n             */\n            do_action('sm::module::init', $this->get('sm'));\n\n            break;\n          case 'default':\n            break;\n        }\n      }\n\n      /**\n       * The default $editors value:\n       *\n       * array( 'WP_Image_Editor_Imagick', 'WP_Image_Editor_GD' )\n       * @param $editors\n       * @return array\n       */\n      public function select_wp_image_editors($editors) {\n        return array('WP_Image_Editor_GD');\n      }\n\n      /**\n       * @param callable|null $httpHandler\n       * @return StorageClient\n       * @throws \\Exception\n       */\n      public function init_gs_client(?callable $httpHandler = null) {\n        // May be Loading Google SDK....\n        if (!class_exists('HttpHandlerFactory')) {\n          include_once(ud_get_stateless_media()->path('lib/Google/vendor/autoload.php', 'dir'));\n        }\n\n        $httpHandler = $httpHandler ? $httpHandler : HttpHandlerFactory::build();\n\n        $json_key = json_decode($this->settings->get('sm.key_json'), true);\n\n        if (!empty($json_key)) {\n          return new StorageClient(\n            [\n              'keyFile' => $json_key,\n              'httpHandler' => function ($request, $options) use ($httpHandler) {\n                $xGoogApiClientHeader = $request->getHeaderLine('x-goog-api-client');\n                $request = $request->withHeader('x-goog-api-client', $xGoogApiClientHeader);\n\n                return call_user_func_array($httpHandler, [$request, $options]);\n              },\n              'authHttpHandler' => HttpHandlerFactory::build(),\n            ]\n          );\n        }\n      }\n\n      /**\n       * Replacing root dir with GCS path\n       * @param $uploads\n       * @return array\n       */\n      public function filter_upload_dir($uploads) {\n        global $default_dir;\n        if ($default_dir) return $uploads;\n        //Bucket\n        $bucket = $this->get('sm.bucket');\n\n        //Bucket folder path\n        $root_dir = $this->get('sm.root_dir');\n        $root_dir = apply_filters(\"wp_stateless_handle_root_dir\", $root_dir);\n\n        /**\n         * Subdir not uses on Stateless mode\n         */\n        $uploads['subdir'] = '';\n\n        $basedir = rtrim(sprintf('gs://%s/%s', $bucket, $root_dir), '/');\n        $baseurl = rtrim(sprintf('https://storage.googleapis.com/%s/%s', $bucket, $root_dir), '/');\n\n        $uploads = array(\n          'url' => rtrim($baseurl . $uploads['subdir'], '/'),\n          'path' => $basedir . $uploads['subdir'],\n          'subdir' => $uploads['subdir'],\n          'basedir' => $basedir,\n          'baseurl' => $baseurl,\n          'error' => false,\n        );\n        return $uploads;\n      }\n\n      /**\n       * Rebuild srcset from gs_link.\n       * Using calculations returned from WordPress wp_calculate_image_srcset()\n       *\n       * @param $sources\n       * @param $size_array\n       * @param $image_src\n       * @param $image_meta\n       * @param $attachment_id\n       * @return array\n       */\n      public function wp_calculate_image_srcset($sources, $size_array, $image_src, $image_meta, $attachment_id) {\n        $sm_mode = $this->get('sm.mode');\n\n        /**\n         * In Backup mode using local URL\n         */\n        if (\"backup\" == $sm_mode) {\n          return $sources;\n        }\n\n        if (empty($image_meta['gs_link'])) {\n          $image_meta = wp_get_attachment_metadata($attachment_id);\n        }\n\n        if (is_array($sources) && !empty($image_meta['gs_link'])) {\n          $gs_name = $image_meta['gs_name'];\n          // getting position of root_dir in gs_name.\n          $root_dir_pos = strpos($gs_name, $image_meta['file']);\n          // removing rood_dir from gs_name so we can compare to replace url with gs_link.\n          if ($root_dir_pos !== false) {\n            $gs_name = substr($gs_name, $root_dir_pos);\n          }\n\n          if (!isset($gs_name) || empty($gs_name)) {\n            return [];\n          }\n\n          foreach ($sources as $width => &$image) {\n\n            // If srcset includes original image src, replace it\n            if (substr_compare($image['url'], $gs_name, -strlen($gs_name)) === 0) {\n              $image['url'] = $image_meta['gs_link'];\n              // Replace all sizes\n            } elseif (isset($image_meta['sizes']) && is_array($image_meta['sizes'])) {\n              $found = false;\n              foreach ($image_meta['sizes'] as $key => $meta) {\n                if (!isset($meta['gs_name']) || empty($meta['gs_name'])) {\n                  continue;\n                }\n\n                $thumb_gs_name = $meta['gs_name'];\n                // removing rood_dir from gs_name\n                if ($root_dir_pos !== false) {\n                  $thumb_gs_name = substr($thumb_gs_name, $root_dir_pos);\n                }\n\n                if (substr_compare($image['url'], $thumb_gs_name, -strlen($thumb_gs_name)) === 0) {\n                  $image['url'] = $meta['gs_link'];\n                  $found = true;\n                  break;\n                }\n              }\n\n              // if no size found and mode is ephemeral or stateless and nothing to show for srcset item - unset that item\n              if (!$found && ($sm_mode === 'ephemeral' || $sm_mode === 'stateless')) {\n                $image = null;\n              }\n            } else {\n              // if mode is stateless and nothing to show for srcset item - unset that item\n              if ($sm_mode === 'ephemeral' || $sm_mode === 'stateless') {\n                $image = null;\n              }\n            }\n          }\n        } elseif (is_array($sources) && $sm_mode === 'stateless') {\n          foreach ($sources as $width => &$image) {\n            // Set default src\n            $image['url'] = $image_src;\n          }\n        }\n\n        return is_array($sources) ? array_filter($sources) : $sources;\n      }\n\n      /**\n       * Return gs host.\n       * If custom domain is set it's return bucket name as host,\n       * else return storage.googleapis.com as host and append bucket name at the end.\n       *\n       * @param array $sm\n       * @return mixed|void\n       */\n      public function get_gs_host($sm = array()) {\n        $sm = $sm ? $sm : $this->get('sm');\n        $image_host = 'https://storage.googleapis.com/';\n        $image_host .=  $sm['bucket'];\n\n        $custom_domain = $sm['custom_domain'];\n        $is_ssl = strpos($custom_domain, 'https://');\n        $custom_domain = str_replace(array('http://', 'https://'), '', $custom_domain);\n        $custom_domain = trim($custom_domain, '/');\n\n        // checking whether the provided domain is valid.\n        // if the custom domain is same as the bucket name\n        // or the custom domain is using https.\n        if (!empty($sm['bucket']) && !empty($custom_domain) && $custom_domain !== 'storage.googleapis.com' && ($is_ssl === 0 || $custom_domain == $sm['bucket'])) {\n          $image_host = $is_ssl === 0 ? 'https://' : 'http://';  // bucketname will be host\n          $image_host .=  $custom_domain;\n        }\n\n        return apply_filters('get_gs_host', $image_host, $image_host, $sm['bucket'], $is_ssl, $sm);\n      }\n\n      /**\n       * Return gs:// path.\n       *\n       * @param array $sm\n       * @return mixed|void\n       */\n      public function get_gs_path() {\n        $path = 'gs://'  . $this->get('sm.bucket');\n\n        return apply_filters('get_gs_path', $path);\n      }\n\n      /**\n       * Filter for wp_stateless_bucket_link if custom domain is set.\n       * It's get attachment url and remove \"storage.googleapis.com\" from url.\n       * So that custom url can be used.\n       *\n       * @param $fileLink\n       * @return mixed|string\n       */\n      public function wp_stateless_bucket_link($fileLink) {\n        $bucketname = $this->get('sm.bucket');\n        $custom_domain = $this->get('sm.custom_domain');\n        $is_ssl = strpos($custom_domain, 'https://') === 0;\n        $fileLink_is_ssl = strpos($fileLink, 'https://') === 0;\n        $custom_domain = str_replace(array('http://', 'https://'), '', $custom_domain);\n        $custom_domain = trim($custom_domain, '/');\n\n        if (!empty($bucketname) && $custom_domain !== 'storage.googleapis.com' && $custom_domain == $bucketname && strpos($fileLink, $bucketname) > 8) {\n          $fileLink = ($is_ssl ? 'https://' : 'http://') . substr($fileLink, strpos($fileLink, $bucketname));\n        } elseif ($custom_domain !== 'storage.googleapis.com' && $custom_domain == $bucketname && $fileLink_is_ssl !== $is_ssl) {\n          if ($is_ssl)\n            $fileLink = str_replace(array('http://', 'https://'), 'https://', $fileLink);\n          else\n            $fileLink = str_replace(array('http://', 'https://'), 'http://', $fileLink);\n        }\n        return $fileLink;\n      }\n\n      /**\n       * Return settings page url.\n       *\n       * @param string $path\n       * @return string\n       */\n      public function get_settings_page_url($path = '') {\n        $url = get_admin_url(get_current_blog_id(), (is_network_admin() ? 'network/settings.php' : 'upload.php'));\n        return $url . $path;\n      }\n\n      /**\n       * Return docs page url.\n       *\n       * @param string $path\n       * @return string\n       */\n      public function get_docs_page_url($path = '') {\n        $path = ltrim($path, '/');\n\n        return 'https://stateless.udx.io/' . $path;\n      }\n\n      /**\n       * Get new blog settings once switched blog.\n       * @param $new_blog\n       * @param $prev_blog_id\n       */\n      public function on_switch_blog($new_blog, $prev_blog_id) {\n        $this->settings->refresh();\n      }\n\n      /**\n       * Get settings handler.\n       * Filling array if some settings missing.\n       *\n       * @param $settings\n       * @return\n       */\n      public function get_settings($settings) {\n\n        $settings_list =  array(\n          'mode',\n          'body_rewrite',\n          'body_rewrite_types',\n          'bucket',\n          'root_dir',\n          'key_json',\n          'cache_control',\n          'delete_remote',\n          'custom_domain',\n          'organize_media',\n          'hashify_file_name'\n        );\n\n        foreach ($settings_list as $setting) {\n\n          /** If setting is already exist, just skip it */\n          if (isset($settings[$setting])) {\n            continue;\n          }\n\n          $value = $this->get('sm.' . $setting);\n\n          /** Decode json to array */\n          if ($value && is_string($value) && $setting === 'key_json') {\n            $value = json_decode($value, true);\n            $setting = 'key';\n          }\n\n          $settings[$setting] = $value;\n        }\n\n        return $settings;\n      }\n\n      /**\n       * Remove all settings.\n       * @param bool $network\n       */\n      public function reset($network = false) {\n        $this->settings->reset($network);\n      }\n\n      /**\n       * @param $actions\n       * @param $post\n       * @param $detached\n       * @return mixed\n       */\n      public function add_custom_row_actions($actions, $post, $detached) {\n\n        if (!current_user_can('upload_files')) return $actions;\n\n        $sm_cloud = apply_filters('wp_stateless_get_file', [], $post->ID);\n\n\n        $sm_mode = $this->get('sm.mode');\n        if (!empty($sm_cloud) && $sm_mode === 'stateless') return $actions;\n\n        if ($post && 'attachment' == $post->post_type && 'image/' == substr($post->post_mime_type, 0, 6)) {\n          $actions['sm_sync'] = '<a href=\"javascript:;\" data-id=\"' . $post->ID . '\" data-type=\"image\" class=\"sm_inline_sync\">' . __('Regenerate and Sync with GCS', ud_get_stateless_media()->domain) . '</a>';\n        }\n\n        if ($post && 'attachment' == $post->post_type && 'image/' != substr($post->post_mime_type, 0, 6)) {\n          $actions['sm_sync'] = '<a href=\"javascript:;\" data-id=\"' . $post->ID . '\" data-type=\"other\" class=\"sm_inline_sync\">' . __('Sync with GCS', ud_get_stateless_media()->domain) . '</a>';\n        }\n\n        return $actions;\n      }\n\n      /**\n       * Define REST API.\n       *\n       * @author korotkov@UD\n       */\n      public function api_init() {\n\n        $route_namespace = 'wp-stateless/v1';\n        $api_namespace = 'wpCloud\\StatelessMedia\\API';\n\n        register_rest_route($route_namespace, '/status', array(\n          'methods' => \\WP_REST_Server::READABLE,\n          'callback' => array($api_namespace, 'status'),\n          'permission_callback' => '__return_true'\n        ));\n\n        register_rest_route($route_namespace, '/getSettings', array(\n          'methods' => \\WP_REST_Server::READABLE,\n          'callback' => array($api_namespace, 'getSettings'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n\n        register_rest_route($route_namespace, '/updateSettings', array(\n          'methods' => \\WP_REST_Server::CREATABLE,\n          'callback' => array($api_namespace, 'updateSettings'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n\n        register_rest_route($route_namespace, '/sync/getProcesses', array(\n          'methods' => \\WP_REST_Server::READABLE,\n          'callback' => array($api_namespace, 'syncGetProcesses'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n\n        register_rest_route($route_namespace, '/sync/getProcess/(?P<id>\\S+)', array(\n          'methods' => \\WP_REST_Server::READABLE,\n          'callback' => array($api_namespace, 'syncGetProcess'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n\n        register_rest_route($route_namespace, '/sync/run', array(\n          'methods' => \\WP_REST_Server::CREATABLE,\n          'callback' => array($api_namespace, 'syncRun'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n\n        register_rest_route($route_namespace, '/sync/stop', array(\n          'methods' => \\WP_REST_Server::CREATABLE,\n          'callback' => array($api_namespace, 'syncStop'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n \n        register_rest_route($route_namespace, '/batch/state', array(\n          'methods' => \\WP_REST_Server::READABLE,\n          'callback' => array($api_namespace, 'batchState'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n\n        register_rest_route($route_namespace, '/batch/action', array(\n          'methods' => \\WP_REST_Server::CREATABLE,\n          'callback' => array($api_namespace, 'batchAction'),\n          'permission_callback' => array($api_namespace, 'authCheck')\n        ));\n     }\n\n      /**\n       * Metabox for media modal page\n       * @param $form_fields\n       * @param $post\n       * @return array\n       */\n      public function attachment_modal_meta_box_callback($form_fields, $post) {\n        // Do not show on media edit page, only on modal\n        // Do not show if we are not in Media Library\n        if ( isset($_GET['post']) || wp_doing_ajax() ) {\n          return $form_fields;\n        }\n\n        $link = get_edit_post_link($post->ID);\n\n        $form_field['label'] = '';\n        $form_field['input'] = 'html';\n        $form_field['html'] = sprintf(\"<script>jQuery('.sm_edit_links').remove();jQuery('.actions').prepend('<a class=\\\"sm_edit_links\\\" href=\\\"%s#sm-attachment-metabox\\\">%s</a> | ')</script>\", $link, __(\"View stateless meta\", ud_get_stateless_media()->domain));\n        $form_field['show_in_modal'] = true;\n\n        $form_fields['sm_html'] = $form_field;\n        return $form_fields;\n      }\n\n      /**\n       * Metabox for media edit page\n       * @param $meta_boxes\n       * @return array\n       */\n      public function attachment_meta_box_callback($meta_boxes) {\n        $post_id = false;\n        if (isset($_GET['post'])) {\n          $post_id = intval($_GET['post']);\n        } elseif (isset($_POST['post_ID'])) {\n          $post_id = intval($_POST['post_ID']);\n        } elseif (isset($_GET['item'])) {\n          $post_id = intval($_GET['item']);\n        } elseif (isset($_POST['item'])) {\n          $post_id = intval($_POST['item']);\n        }\n\n        return $this->_prepare_data_for_metabox($meta_boxes, $post_id);\n      }\n\n      /**\n       * Prepare data for metabox fields\n       * @param $meta_boxes\n       * @param $post_id\n       * @return array\n       */\n      private function _prepare_data_for_metabox($meta_boxes, $post_id) {\n        $post     = get_post($post_id);\n        $sm_cloud = apply_filters('wp_stateless_get_file', [], $post_id, true);\n        $sm_mode  = $this->get('sm.mode');\n\n        if (empty($post)) {\n          return $meta_boxes;\n        }\n\n        $sizes = $this->get_image_sizes();\n\n        $fields = array();\n\n        if ($sm_mode !== 'stateless' || empty($sm_cloud)) {\n          $fields[] = array(\n            'name' =>  __('Regenerate', ud_get_stateless_media()->domain),\n            'id'   => 'storage_bucket_url',\n            'type' => 'custom_html',\n            'std'  => $this->_prepare_generate_link($post, false, '', true, $sm_cloud),\n            'tab'  => 'thumbnails',\n          );\n        }\n\n        if (is_array($sm_cloud) && !empty($sm_cloud['fileLink'])) {\n\n          $fields[] = array(\n            'type' => 'heading',\n            'name' => 'Files',\n            'tab'  => 'thumbnails',\n          );\n\n          $fields[] = array(\n            'name' =>  __('Original', ud_get_stateless_media()->domain),\n            'id'   => 'storage_bucket_url',\n            'type' => 'custom_html',\n            'media_modal' => true,\n            'std'  => '<label><input type=\"text\" class=\"widefat urlfield\" readonly=\"readonly\" value=\"' . esc_attr($sm_cloud['fileLink']) . '\" />\n                        <a href=\"' . $sm_cloud['fileLink'] . '\" target=\"_blank\" class=\"sm-view-link\"><i class=\"dashicons dashicons-external\"></i></a>&nbsp;&nbsp;&nbsp;' . $this->_prepare_generate_link($post, true, '', false, $sm_cloud) . ' </label>',\n            'tab'  => 'thumbnails',\n          );\n\n          if (!empty($sm_cloud['sizes']) && is_array($sm_cloud['sizes'])) {\n            foreach ($sm_cloud['sizes'] as $size_label => $size) {\n\n              $fields[] = array(\n                'name' =>  __(sprintf(\"%s x %s\", ($size['width'] ?: $sizes[$size_label]['width']), ($size['height'] ?: $sizes[$size_label]['height'])), ud_get_stateless_media()->domain),\n                'id'   => 'storage_bucket_url' . $size_label,\n                'type' => 'custom_html',\n                'media_modal' => true,\n                'std'  => '<label><input type=\"text\" class=\"widefat urlfield\" readonly=\"readonly\" value=\"' . esc_attr($size['fileLink']) . '\" />\n                            <a href=\"' . $size['fileLink'] . '\" target=\"_blank\" class=\"sm-view-link\"><i class=\"dashicons dashicons-external\"></i></a>&nbsp;&nbsp;&nbsp;' . $this->_prepare_generate_link($post, true, $size_label, false, $sm_cloud) . ' </label>',\n                'tab'  => 'thumbnails',\n              );\n            }\n          }\n\n          if (!empty($sm_cloud['cacheControl'])) {\n            $fields[] = array(\n              'name' =>  __('Cache Control', ud_get_stateless_media()->domain),\n              'id'   => 'cache_control',\n              'type' => 'custom_html',\n              'std'  => '<label><input type=\"text\" class=\"widefat urlfield\" readonly=\"readonly\" value=\"' . $sm_cloud['cacheControl'] . '\" /></label>',\n              'tab'  => 'meta',\n            );\n          }\n\n          if (!empty($sm_cloud['bucket'])) {\n            $fields[] = array(\n              'name' =>  __('Storage Bucket', ud_get_stateless_media()->domain),\n              'id'   => 'storage_bukcet',\n              'type' => 'custom_html',\n              'std'  => '<label><input type=\"text\" class=\"widefat urlfield\" readonly=\"readonly\" value=\"gs://' . esc_attr($sm_cloud['bucket']) . '\" />\n                            <a href=\"https://console.cloud.google.com/storage/browser/' . esc_attr($sm_cloud['bucket']) . '\" target=\"_blank\" class=\"sm-view-link\"><i class=\"dashicons dashicons-external\"></i></a></label>',\n              'tab'  => 'meta',\n            );\n          }\n        }\n\n        $meta_boxes[] = apply_filters('sm::attachment::meta', array(\n          'id'         => 'sm-attachment-metabox',\n          'title'      => __('Stateless', ud_get_stateless_media()->domain),\n          'post_types' => 'attachment',\n          //'media_modal' => true,\n          //set context `side` for left column\n          'context'    => 'normal',\n          'priority'   => 'low',\n          'tabs'      => array(\n            'thumbnails' => array(\n              'label' => __('Thumbnails', ud_get_stateless_media()->domain),\n              'icon'  => 'dashicons-format-gallery',\n            ),\n            'meta'  => array(\n              'label' => __('Meta', ud_get_stateless_media()->domain),\n              'icon'  => 'dashicons-admin-site',\n            ),\n          ),\n          // Tab style: 'default', 'box' or 'left'. Optional\n          'tab_style' => 'left',\n          // Show meta box wrapper around tabs? true (default) or false. Optional\n          'tab_wrapper' => true,\n          'fields' => $fields\n        ), $post->ID);\n\n        return $meta_boxes;\n      }\n\n      /**\n       * Preparing link for sync\n       * @param $post\n       * @param bool $use_icon\n       * @param string $size\n       * @param bool $button\n       * @param array $sm_cloud\n       * @return string\n       */\n      private function _prepare_generate_link($post, $use_icon = false, $size = '', $button = false, $sm_cloud = array()) {\n        $sync = '';\n\n        $sm_mode = $this->get('sm.mode');\n\n        if (current_user_can('upload_files') && $sm_mode !== 'disabled' && ($sm_mode !== 'stateless' || empty($sm_cloud))) {\n          if ($post && 'attachment' == $post->post_type && 'image/' == substr($post->post_mime_type, 0, 6)) {\n            $sync = '<a href=\"javascript:;\" data-type=\"image\" data-id=\"' . $post->ID . '\" data-size=\"' . $size . '\" data-reload_page=\"' . $button . '\"\n                   class=\"sm_inline_sync ' . ($button ? 'button button-primary button-large' : '') . '\">' . ($use_icon ? \"<i class='dashicons dashicons-image-rotate'></i>\" : __('Regenerate and Sync with GCS', ud_get_stateless_media()->domain)) . '</a>';\n          }\n          if ($post && 'attachment' == $post->post_type && 'image/' != substr($post->post_mime_type, 0, 6)) {\n            $sync = '<a href=\"javascript:;\" data-type=\"other\" data-id=\"' . $post->ID . '\" data-size=\"' . $size . '\" data-reload_page=\"' . $button . '\"\n                   class=\"sm_inline_sync ' . ($button ? 'button button-primary button-large' : '') . '\">' . ($use_icon ? \"<i class='dashicons dashicons-image-rotate'></i>\" : __('Sync with GCS', ud_get_stateless_media()->domain)) . '</a>';\n          }\n        } elseif ($button && $sm_mode !== 'stateless') {\n          $sync = __('You do not have access to sync or Stateless mode is Disabled', ud_get_stateless_media()->domain);\n        }\n        return $sync;\n      }\n\n      /**\n       * @param $current_path\n       * @param $use_root boolean: whether to use the root dir or not.\n       *        0 will be passed from various compatibilities so that the root dir is not used.\n       *        false will passed from some compatibilities to use the value as local path.\n       * @param $attachment_id\n       * @param $size\n       * @return string\n       */\n      public function handle_root_dir($current_path, $use_root = true, $attachment_id = '', $size = '') {\n        //non media files\n        if ($use_root === 0) {\n          $non_media = ud_stateless_db()->get_non_library_file_name($current_path);\n\n          if ($non_media) {\n            return $non_media;\n          }\n        }\n\n        $root_dir = $this->get('sm.root_dir');\n        $root_dir_regex = '~^' . apply_filters(\"wp_stateless_handle_root_dir\", $root_dir, true) . '/~';\n        /**\n         * Retrieve Y/M and other tags from current path\n         */\n        $path_elements = apply_filters('wp_stateless_unhandle_root_dir', $current_path);\n        $root_dir = apply_filters(\"wp_stateless_handle_root_dir\", $root_dir, false, $path_elements);\n\n        $upload_dir = wp_upload_dir();\n        $current_path = str_replace(wp_normalize_path(trailingslashit($upload_dir['basedir'])), '', wp_normalize_path($current_path));\n        $current_path = str_replace(wp_normalize_path(trailingslashit($upload_dir['baseurl'])), '', wp_normalize_path($current_path));\n        $current_path = str_replace(trailingslashit($this->get_gs_host()), '', $current_path);\n\n        /**\n         * Using only filename. Other parts of path included to $root_dir.\n         * excluding compatibility.\n         */\n        if ($use_root) {\n          $current_path = basename($current_path);\n        }\n\n        if (!$use_root) {\n          // removing the root dir if already exists in the beginning.\n          $raw_name = preg_replace($root_dir_regex, '', $current_path);\n\n          if ($raw_name && is_multisite() && ($blog_id = get_current_blog_id()) != 1) {\n            $folder = \"sites/{$blog_id}/\";\n            if (strpos($raw_name, $folder) === 0) return $raw_name;\n\n            return \"$folder$raw_name\";\n          }\n\n          return $raw_name;\n        }\n\n        // skip adding root dir if it's already added.\n        if (!empty($root_dir) && !preg_match($root_dir_regex, $current_path)) {\n          return $root_dir . '/' . trim($current_path, '/ ');\n        }\n\n        return $current_path;\n      }\n\n      /**\n       * @param $content\n       * @return mixed\n       */\n      public function the_content_filter($content) {\n\n        if ($upload_data = wp_upload_dir()) {\n\n          if (!empty($upload_data['url']) && !empty($content)) {\n            $url = preg_replace('/https?:\\/\\//', '', $upload_data['url']);\n\n            $root_dir = trim($this->get('sm.root_dir'), '/ '); // Remove any forward slash and empty space.\n            $root_dir = apply_filters(\"wp_stateless_handle_root_dir\", $root_dir);\n            $root_dir = !empty($root_dir) ? $root_dir . '/' : false;\n            $image_host = $this->get_gs_host();\n            $file_ext = $this->replaceable_file_types();\n            $content = preg_replace(\n              '/(href|src)=(\\'|\")(https?:\\/\\/' . str_replace('/', '\\/', $url) . ')\\/(.+?)(' . $file_ext . ')(\\'|\")/i',\n              '$1=$2' . $image_host . '/' . ($root_dir ? $root_dir : '') . '$4$5$6',\n              $content\n            );\n          }\n        }\n\n        return $content;\n      }\n\n      /**\n       * Return file types supported by File URL Replacement.\n       * @return string\n       */\n      public function replaceable_file_types() {\n        $types = $this->get('sm.body_rewrite_types');\n\n        // Removing extra space.\n        $types = trim($types);\n        $types = preg_replace(\"/\\s{2,}/\", ' ', $types);\n\n        $types_arr = explode(' ', $types);\n        return '\\.' . implode('|\\.', $types_arr);\n      }\n\n      /**\n       * Copied from https://developer.wordpress.org/reference/functions/get_metadata/\n       *\n       * @param $value null unless other filter hooked in this function.\n       * @param $object_id post id\n       * @param $meta_key\n       * @param $single\n       * @return mixed\n       */\n      public function post_metadata_filter($value, $object_id, $meta_key, $single) {\n        if (empty($value)) {\n          $meta_type = 'post';\n          $transient_key = \"stateless_{$meta_type}_meta\";\n\n          $meta_cache = wp_cache_get($object_id, $transient_key);\n          if (empty($meta_cache)) {\n            $meta_cache = wp_cache_get($object_id, $meta_type . '_meta');\n\n            if (!$meta_cache) {\n              $meta_cache = update_meta_cache($meta_type, array($object_id));\n              $meta_cache = $meta_cache[$object_id];\n            }\n\n            foreach ($meta_cache as $key => $meta) {\n              $meta_cache[$key] = array_map('maybe_unserialize', $meta_cache[$key]);\n            }\n\n            $meta_cache = $this->convert_to_gs_link($meta_cache);\n            wp_cache_set($object_id, $meta_cache, $transient_key);\n          }\n\n          if (!$meta_key) {\n            return $meta_cache;\n          }\n\n          if (isset($meta_cache[$meta_key])) {\n            return $meta_cache[$meta_key];\n          }\n\n          // in case no metadata is found return what was passed in $value.\n          // $value most of the time is null.\n          return $value;\n        }\n\n        return $this->convert_to_gs_link($value);\n      }\n\n      /**\n       * Replace all image link with gs link and return only if meta modified.\n       *\n       * @param $meta\n       * @param $return\n       * @return mixed or null when not changed.\n       */\n      public function convert_to_gs_link($meta, $return = false) {\n        $updated = $meta;\n        if ($meta && $upload_data = wp_upload_dir()) {\n          if (!empty($upload_data['url']) && !empty($meta)) {\n            $url = preg_replace('/https?:\\/\\//', '', $upload_data['url']);\n            $root_dir = trim($this->get('sm.root_dir'), '/ '); // Remove any forward slash and empty space.\n            $root_dir = apply_filters(\"wp_stateless_handle_root_dir\", $root_dir);\n            $root_dir = !empty($root_dir) ? $root_dir . '/' : false;\n            $image_host = $this->get_gs_host() . '/' . ($root_dir ? $root_dir : '');\n            $file_ext = $this->replaceable_file_types();\n            $updated = $this->_convert_to_gs_link($meta, $image_host, $url, $file_ext);\n          }\n        }\n\n        if ($updated == $meta && !$return) {\n          return null; // Not changed.\n        }\n        return $updated;\n      }\n\n      /**\n       * Replace all image link with gs link\n       *\n       * @param $meta\n       * @param $image_host\n       * @param $url\n       * @param $file_ext\n       * @return array|null|string|string[]\n       */\n      public function _convert_to_gs_link($meta, $image_host, $url, $file_ext) {\n        if (is_array($meta)) {\n          foreach ($meta as $key => $value) {\n            $meta[$key] = $this->_convert_to_gs_link($value, $image_host, $url, $file_ext);\n          }\n          return $meta;\n        } elseif (is_object($meta) && $meta instanceof \\stdClass) {\n          foreach (get_object_vars($meta) as $key => $value) {\n            $meta->{$key} = $this->_convert_to_gs_link($value, $image_host, $url, $file_ext);\n          }\n          return $meta;\n        } elseif (is_string($meta)) {\n          return preg_replace('/(https?:\\/\\/' . str_replace('/', '\\/', $url) . ')\\/(.+?)(' . $file_ext . ')/i', $image_host . '$2$3', $meta);\n        }\n\n        return $meta;\n      }\n\n      /**\n       * Determines if plugin is loaded via mu-plugins\n       * or Network Enabled.\n       *\n       * @param bool $is_multisite\n       * @return bool\n       * @author peshkov@UD\n       */\n      public function is_network_detected($is_multisite = false) {\n        /* Plugin is loaded via mu-plugins. */\n\n        if (strpos(Utility::normalize_path($this->root_path), Utility::normalize_path(WPMU_PLUGIN_DIR)) !== false) {\n          return true;\n        }\n\n        if (is_multisite()) {\n          if ($is_multisite) return true;\n          /* Looks through network enabled plugins to see if our one is there. */\n          foreach (wp_get_active_network_plugins() as $path) {\n            // Trying again using readlink in case it's a symlink file.\n            // boot_file is already solved.\n            // wp_normalize_path is helpfull in windows.\n            if (wp_normalize_path($this->boot_file) == wp_normalize_path($path) || (is_link($path) && $this->boot_file == readlink($path))) {\n              return true;\n            }\n          }\n        }\n        return false;\n      }\n\n      /**\n       * Initialization.\n       * Register scripts and styles\n       */\n      public function admin_init() {\n        $this->show_notice_stateless_cache_busting();\n        wp_register_style('wp-stateless', $this->path('static/styles/wp-stateless.css', 'url'), array(), self::$version);\n\n        /**\n         * select2 styles\n         */\n        wp_register_style('wp-stateless-select2', $this->path('static/styles/select2.min.css', 'url'), array(), self::$version);\n\n        /* Attachment or upload page */\n        wp_register_script('wp-stateless-uploads-js', $this->path('static/scripts/wp-stateless-uploads.js', 'url'), array('jquery'), self::$version);\n        wp_localize_script('wp-stateless-uploads-js', 'stateless_upload', [\n          'inline_sync_nonce' => wp_create_nonce('sm_inline_sync'),\n        ]);\n\n        /* Setup wizard styles. */\n        // #152\n        // wp_register_style('wp-stateless-setup-wizard', $this->path('static/styles/wp-stateless-setup-wizard.css', 'url'), array(), self::$version);\n\n        wp_register_script('wp-stateless-select2', ud_get_stateless_media()->path('static/scripts/select2.min.js', 'url'), array('jquery'), self::$version, true);\n\n        /* Stateless settings page */\n        wp_register_script('wp-stateless-settings', ud_get_stateless_media()->path('static/scripts/wp-stateless-settings.js', 'url'), array('clipboard'), self::$version);\n        wp_localize_script('wp-stateless-settings', 'stateless_l10n', $this->get_l10n_data());\n\n        wp_register_style('wp-stateless-settings', $this->path('static/styles/wp-stateless-settings.css', 'url'), array(), self::$version);\n        wp_register_style('wp-stateless-addons', $this->path('static/styles/wp-stateless-addons.css', 'url'), array(), self::$version);\n        wp_register_style('wp-stateless-status', $this->path('static/styles/wp-stateless-status.css', 'url'), array(), self::$version);\n\n        // Sync tab\n        wp_register_script('wp-stateless', ud_get_stateless_media()->path('static/scripts/wp-stateless.js', 'url'), array('jquery-ui-core', 'wp-stateless-settings', 'wp-api-request'), self::$version, true);\n\n        wp_localize_script('wp-stateless', 'stateless_l10n', $this->get_l10n_data());\n        wp_localize_script('wp-stateless', 'wp_stateless_configs', array(\n          'WP_DEBUG' => defined('WP_DEBUG') ? WP_DEBUG : false,\n          'REST_API_TOKEN' => Utility::generate_jwt_token(['user_id' => get_current_user_id()], DAY_IN_SECONDS),\n          'api_root' => apply_filters( 'wp_stateless_rest_api_root', '' ),\n          'ajaxurl' => admin_url( 'admin-ajax.php' ),\n          'stateless_check_ajax_nonce' => wp_create_nonce('stateless_check_ajax'),\n          'text_ok' => __('Ok', ud_get_stateless_media()->domain),\n          'text_fail' => __('Fail', ud_get_stateless_media()->domain),\n        ));\n\n        $settings = ud_get_stateless_media()->get('sm');\n        $settings['wildcards'] = $this->settings->wildcards;\n        $settings['network_admin'] = is_network_admin();\n        $settings['is_multisite'] = is_multisite();\n        if (defined('WP_STATELESS_MEDIA_JSON_KEY') && WP_STATELESS_MEDIA_JSON_KEY) {\n          $settings['key_json'] = \"Currently configured via a constant.\";\n        }\n        wp_localize_script('wp-stateless', 'wp_stateless_settings', $settings);\n\n        // Batch processes tab\n        wp_register_script('wp-stateless-batch', ud_get_stateless_media()->path('static/scripts/wp-stateless-batch.js', 'url'), array('wp-api-request'), self::$version, true);\n        wp_localize_script('wp-stateless-batch', 'wp_stateless_batch', array(\n          'REST_API_TOKEN' => Utility::generate_jwt_token(['user_id' => get_current_user_id()], DAY_IN_SECONDS),\n          'is_running' => BatchTaskManager::instance()->is_running(),\n          'api_root' => apply_filters( 'wp_stateless_rest_api_root', '' ),\n        ));\n      }\n\n      /**\n       * Get_l10n_data\n       *\n       * @param string $value\n       * @return mixed\n       */\n      public function get_l10n_data($value = '') {\n        include ud_get_stateless_media()->path('l10n.php', 'dir');\n        return $l10n;\n      }\n\n      /**\n       * Admin Scripts\n       *\n       * @param $hook\n       */\n      public function admin_enqueue_scripts($hook) {\n\n        switch ($hook) {\n\n          case 'options-media.php':\n            wp_enqueue_style('wp-stateless');\n            break;\n\n          case 'upload.php':\n            wp_enqueue_style('wp-stateless');\n            wp_enqueue_script('wp-stateless-uploads-js');\n\n            break;\n\n          case 'post.php':\n\n            global $post;\n\n            if ($post->post_type == 'attachment') {\n              wp_enqueue_style('wp-stateless');\n              wp_enqueue_script('wp-stateless-uploads-js');\n            }\n\n            break;\n\n          // #152\n          // case 'media_page_stateless-setup':\n          case 'settings_page_stateless-setup':\n            wp_enqueue_style('wp-stateless');\n            // #152\n            // wp_enqueue_style('wp-stateless-setup-wizard');\n            break;\n          case 'media_page_stateless-settings':\n          case 'settings_page_stateless-settings':\n            wp_enqueue_style('wp-stateless');\n            wp_enqueue_style('wp-stateless-select2');\n            wp_enqueue_script('wp-stateless-settings');\n            wp_enqueue_script('wp-stateless-select2');\n            wp_enqueue_style('wp-stateless-settings');\n            wp_enqueue_style('wp-stateless-addons');\n            wp_enqueue_style('wp-stateless-status');\n            wp_enqueue_style( 'media-views' );\n\n            // Sync tab\n            wp_enqueue_script('wp-stateless');\n\n            // Data updates\n            wp_enqueue_script('jquery-ui-dialog');\n            wp_enqueue_style('wp-jquery-ui-dialog');\n            wp_enqueue_script('wp-stateless-batch');\n\n            wp_enqueue_style('wp-pointer');\n            wp_enqueue_script('wp-pointer');\n\n            $data = array(\n              'key' => 'stateless-cache-busting',\n              'class' => 'notice',\n              'title' => sprintf(__(\"Stateless and Ephemeral modes enables and requires the Cache-Busting option.\", ud_get_stateless_media()->domain)),\n              'message' => sprintf(__(\"WordPress looks at local files to prevent files with the same filenames.\n                                          Since Stateless mode bypasses this check, there is a potential for files to be stored with the same file name. We enforce the Cache-Busting option to prevent this.\n                                          Override with the <a href='%s' target='_blank'>%s</a> constant.\", ud_get_stateless_media()->domain), ud_get_stateless_media()->get_docs_page_url('docs/constants/#wpstatelessmediacachebusting'), \"WP_STATELESS_MEDIA_CACHE_BUSTING\"),\n            );\n            echo \"<script id='template-stateless-cache-busting' type='text/html'>\";\n            include ud_get_stateless_media()->path('/static/views/error-notice.php', 'dir');\n            echo \"</script>\";\n\n            break;\n          default:\n            break;\n        }\n      }\n\n      /**\n       * Add Attributes to media HTML\n       *\n       * @author potanin@UD\n       * @param $attr\n       * @param $attachment\n       * @param $size\n       * @return mixed\n       */\n      public function wp_get_attachment_image_attributes($attr, $attachment, $size = null) {\n        \n        $sm_cloud = apply_filters('wp_stateless_get_file', [], $attachment->ID);\n        if (is_array($sm_cloud) && !empty($sm_cloud['name'])) {\n          $attr['class'] = $attr['class'] . ' wp-stateless-item';\n          $attr['data-image-size'] = is_array($size) ? implode('x', $size) : $size;\n          $attr['data-stateless-media-bucket'] = isset($sm_cloud['bucket']) ? $sm_cloud['bucket'] : false;\n          $attr['data-stateless-media-name'] = $sm_cloud['name'];\n        }\n\n        return $attr;\n      }\n\n      /**\n       * Adds filter link to Media Library table.\n       *\n       * @param $views\n       * @return mixed\n       */\n      public function views_upload($views) {\n        $views['stateless'] = '<a href=\"#\">' . __('Stateless Media') . '</a>';\n        return $views;\n      }\n\n      /**\n       * Replace media URL\n       *\n       * @param bool $false\n       * @param integer $id\n       * @param string $size\n       * @return mixed $false\n       */\n      public function image_downsize($false, $id, $size) {\n\n        if ((!isset($this->client) || !$this->client || is_wp_error($this->client)) && $this->get('sm.mode') !== 'stateless') {\n          return $false;\n        }\n\n        /**\n         * Check if enabled\n         */\n        if (!in_array($this->get('sm.mode'), array('cdn', 'stateless', 'ephemeral'))) {\n          return $false;\n        }\n\n        /** Start determine remote file */\n        $img_url = wp_get_attachment_url($id);\n        $meta = wp_get_attachment_metadata($id);\n        $width = $height = 0;\n        $is_intermediate = false;\n\n        //** try for a new style intermediate size */\n        if ($intermediate = image_get_intermediate_size($id, $size)) {\n          if (!empty($intermediate['gs_link'])) {\n            $img_url = $intermediate['gs_link'];\n          } else if (!empty($intermediate['url'])) {\n            $img_url = $intermediate['url'];\n          } else {\n            $img_url = dirname($img_url) . $intermediate['file'];\n          }\n\n          $width = $intermediate['width'];\n          $height = $intermediate['height'];\n          $is_intermediate = true;\n        }\n\n        /**\n         * maybe try to get images info from sm_cloud\n         * this case may happen when no local files\n         * @author korotkov@ud\n         */\n        if (!$width && !$height) {\n          $sm_cloud = apply_filters('wp_stateless_get_file', [], $id, true);\n          if (is_string($size) && !empty($sm_cloud['sizes']) && !empty($sm_cloud['sizes'][$size])) {\n            global $_wp_additional_image_sizes;\n\n            $img_url = !empty($sm_cloud['sizes'][$size]['fileLink']) ? $sm_cloud['sizes'][$size]['fileLink'] : $img_url;\n\n            if (!empty($_wp_additional_image_sizes[$size])) {\n              $width = !empty($_wp_additional_image_sizes[$size]['width']) ? $_wp_additional_image_sizes[$size]['width'] : $width;\n              $height = !empty($_wp_additional_image_sizes[$size]['height']) ? $_wp_additional_image_sizes[$size]['height'] : $height;\n            }\n\n            $is_intermediate = true;\n          }\n        }\n\n        if (!$width && !$height && isset($meta['width'], $meta['height'])) {\n\n          //** any other type: use the real image */\n          $width = $meta['width'];\n          $height = $meta['height'];\n        }\n\n\n        if ($img_url) {\n\n          //** we have the actual image size, but might need to further constrain it if content_width is narrower */\n          list($width, $height) = image_constrain_size_for_editor($width, $height, $size);\n          $img_url = apply_filters('wp_stateless_bucket_link', $img_url);\n          return array($img_url, $width, $height, $is_intermediate);\n        }\n\n\n        /**\n         * All other cases work as usually\n         */\n        return $false;\n      }\n\n      /**\n       * Extends metadata by adding GS information.\n       * Note: must not be called directly. It's used only on hook\n       *\n       * @param $metadata\n       * @param $attachment_id\n       * @return array|mixed\n       */\n      public function wp_get_attachment_metadata($metadata, $attachment_id) {\n        global $default_dir;\n        $default_dir = false;\n        /* Determine if the media file has GS data at all. */\n        $sm_cloud = apply_filters('wp_stateless_get_file', [], $attachment_id, true);\n        // If metadata not passed the get metadata from post meta.\n        if (empty($metadata)) {\n          $metadata = get_post_meta($attachment_id, '_wp_attachment_metadata', true);\n        }\n\n        if (empty($metadata)) {\n          $metadata = [];\n        }\n\n        if (is_array($metadata) && is_array($sm_cloud) && !empty($sm_cloud['fileLink'])) {\n          $metadata['gs_link'] = apply_filters('wp_stateless_bucket_link', $sm_cloud['fileLink']);\n          $metadata['gs_name'] = isset($sm_cloud['name']) ? $sm_cloud['name'] : false;\n          $metadata['gs_bucket'] = isset($sm_cloud['bucket']) ? $sm_cloud['bucket'] : false;\n          if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {\n            foreach ($metadata['sizes'] as $k => $v) {\n              if (!empty($sm_cloud['sizes'][$k]['name'])) {\n                $metadata['sizes'][$k]['gs_name'] = $sm_cloud['sizes'][$k]['name'];\n                $metadata['sizes'][$k]['gs_link'] = apply_filters('wp_stateless_bucket_link', $sm_cloud['sizes'][$k]['fileLink']);\n              }\n            }\n          }\n        }\n        if (is_multisite() && !empty($metadata['file'])) {\n          if ($this->get('sm.mode') == 'stateless') {\n            $default_dir = true;\n            $uploads = wp_get_upload_dir();\n            $default_dir = false;\n\n            $file_path_fix = $uploads['basedir'] . \"/{$metadata['file']}\";\n            if (file_exists($file_path_fix)) {\n              $metadata['file'] = \"{$metadata['file']}\";\n            }\n          } else {\n            $uploads = wp_get_upload_dir();\n            $blog_id = get_current_blog_id();\n            $file_path_fix = $uploads['basedir'] . \"/sites/$blog_id/{$metadata['file']}\";\n            if (file_exists($file_path_fix)) {\n              $metadata['file'] = \"sites/$blog_id/{$metadata['file']}\";\n            }\n          }\n        } elseif ( empty($sm_cloud) && $this->get('sm.mode') == 'stateless' && isset($metadata['file']) ) {\n          $default_dir = true;\n          $uploads = wp_get_upload_dir();\n          $default_dir = false;\n\n          $file_path_fix = $uploads['basedir'] . \"/{$metadata['file']}\";\n          if (file_exists($file_path_fix)) {\n            $metadata['file'] = \"{$metadata['file']}\";\n          }\n        }\n\n        return $metadata;\n      }\n\n      /**\n       *\n       * @param $file\n       * @param $attachment_id\n       * @return string\n       */\n      public function get_attached_file($file, $attachment_id) {\n        global $default_dir;\n\n        $sm_cloud = apply_filters('wp_stateless_get_file', [], $attachment_id);\n        $_file = get_post_meta($attachment_id, '_wp_attached_file', true);\n\n        /* Determine if the media file has GS data at all. */\n        if (is_multisite() && $_file) {\n          $blog_id = get_current_blog_id();\n          $uploads = wp_get_upload_dir();\n          $_file = apply_filters('wp_stateless_file_name', $_file, false);\n          $file_path_fix = $uploads['basedir'] . \"/sites/$blog_id/$_file\";\n\n          if (file_exists($file_path_fix)) {\n            return $file_path_fix;\n          }\n        } elseif (empty($sm_cloud) && $this->get('sm.mode') == 'stateless' && $_file) {\n          $default_dir = true;\n          $uploads = wp_get_upload_dir();\n          $default_dir = false;\n          return $uploads['basedir'] . '/' . $_file;\n        }\n\n        return $file;\n      }\n\n      /**\n       * Returns client object\n       * or WP_Error on failure.\n       *\n       * @author peshkov@UD\n       * @return object $this->client. \\wpCloud\\StatelessMedia\\GS_Client or \\WP_Error\n       */\n      public function get_client() {\n\n        if (null === $this->client) {\n\n          $key_json = $this->get('sm.key_json');\n          if (empty($key_json)) {\n            $key_json = get_site_option('sm_key_json');\n          }\n\n          /* Try to initialize GS Client */\n          $this->client = GS_Client::get_instance(array(\n            'bucket' => $this->get('sm.bucket'),\n            'key_json' => $key_json\n          ));\n        }\n\n        return $this->client;\n      }\n\n      /**\n       * Determines if we can connect to Google Storage Bucket.\n       *\n       * @author peshkov@UD\n       */\n      public function is_connected_to_gs() {\n        $trnst = get_transient('sm::is_connected_to_gs');\n\n        if (empty($trnst) || false === $trnst || !isset($trnst['hash']) || $trnst['hash'] != md5(serialize($this->get('sm')))) {\n          $trnst = array(\n            'success' => 'true',\n            'error' => '',\n            'hash' => md5(serialize($this->get('sm'))),\n          );\n          $client = $this->get_client();\n\n          if (is_wp_error($client)) {\n            $trnst['success'] = 'false';\n            $trnst['error'] = $client->get_error_message();\n          } else {\n            $connected = $client->is_connected();\n            if ($connected !== true) {\n              $trnst['success'] = 'false';\n              $trnst['error'] = sprintf('Could not connect to Google Storage bucket. Please be sure that bucket with name <b>%s</b> exists and the access credentials are correct.', esc_html($this->get('sm.bucket')));\n\n              if (is_callable(array($connected, 'getHandlerContext')) && $handlerContext = $connected->getHandlerContext()) {\n                if (!empty($handlerContext['error'])) {\n                  $handlerContext['error'];\n                  $trnst['error'] = \"Could not connect to Google Storage bucket. \" . make_clickable($handlerContext['error']);\n                }\n              }\n\n              if (is_callable(array($connected, 'getErrors')) && $error = $connected->getErrors()) {\n                $error = reset($error);\n                if ($error['reason'] == 'accessNotConfigured')\n                  $trnst['error'] = \"Could not connect to Google Storage bucket. \" . make_clickable($error['message']);\n              }\n            }\n          }\n          set_transient('sm::is_connected_to_gs', $trnst, 4 * HOUR_IN_SECONDS);\n        }\n\n        if (isset($trnst['success']) && $trnst['success'] == 'false') {\n          return new \\WP_Error('error', (!empty($trnst['error']) ? $trnst['error'] : 'There is an Error on connection to Google Storage.'));\n        }\n\n        return true;\n      }\n\n      /**\n       * Flush all plugin transients\n       *\n       */\n      public function flush_transients() {\n        delete_transient('sm::is_connected_to_gs');\n      }\n\n      /**\n       * Plugin Activation\n       *\n       */\n      public function activate() {\n        add_action('activated_plugin', array($this, 'redirect_to_splash'), 99);\n        $this->run_upgrade_process();\n      }\n\n      /**\n       * Run Install Process.\n       * Triggered on plugins_loaded instead of register_activation_hook action.\n       * Works on even manual plugin update.\n       *\n       * @author alim@UD\n       */\n      public function run_install_process() {\n        // calling the upgrade function because it's same as this point for fresh install or updates.\n        $this->run_upgrade_process();\n      }\n\n      /**\n       * Run Upgrade Process:\n       * Triggered on plugins_loaded instead of register_activation_hook action.\n       * Works on even manual plugin update.\n       *\n       * @author alim@UD\n       */\n      public function run_upgrade_process() {\n        // Creating database on new installation.\n        ud_stateless_db()->create_db();\n\n        Migrator::instance()->migrate();\n        \n        /**\n         * Maybe Upgrade current Version\n         */\n        Upgrader::call($this->args['version']);\n      }\n\n      /**\n       * Delete table when blog is deleted.\n       *\n       * @param $old_site\n       */\n      public function wp_delete_site($old_site) {\n        ud_stateless_db()->clear_db($old_site->id);\n      }\n\n      /**\n       * Redirect_to_splash\n       *\n       * @param string $plugin\n       */\n      public function redirect_to_splash($plugin = '') {\n        // $this->settings = new Settings();\n\n        if (defined('WP_CLI') || $this->settings->get('sm.key_json') || isset($_POST['checked']) && count($_POST['checked']) > 1) {\n          return;\n        }\n\n        if (\n          !$this->settings->get('sm.key_json') &&\n          defined('WP_STATELESS_MEDIA_HIDE_SETUP_ASSISTANT') && WP_STATELESS_MEDIA_HIDE_SETUP_ASSISTANT == true &&\n          defined('WP_STATELESS_MEDIA_HIDE_SETTINGS_PANEL') && WP_STATELESS_MEDIA_HIDE_SETTINGS_PANEL == true\n        ) {\n          return;\n        }\n\n        if (!$this->settings->get('sm.key_json') && defined('WP_STATELESS_MEDIA_HIDE_SETUP_ASSISTANT') && WP_STATELESS_MEDIA_HIDE_SETUP_ASSISTANT == true) {\n          $url = $this->get_settings_page_url('?page=stateless-settings');\n          exit(wp_redirect($url));\n        }\n\n        if ($plugin == plugin_basename($this->boot_file)) {\n          // #152\n          // $url = $this->get_settings_page_url('?page=stateless-setup&step=splash-screen');\n          $url = $this->get_settings_page_url('?page=stateless-settings');\n\n          if (json_decode($this->settings->get('sm.key_json'))) {\n            $url = $this->get_settings_page_url('?page=stateless-settings');\n          }\n\n          exit( wp_redirect($url) );\n        }\n      }\n\n      /**\n       * Plugin Deactivation\n       *\n       */\n      public function deactivate() {\n      }\n\n      /**\n       * Show_notice_stateless_cache_busting\n       *\n       */\n      public function show_notice_stateless_cache_busting() {\n        $this->errors->add(array(\n          'key' => 'stateless_cache_busting',\n          'button' => 'View Settings',\n          'button_link' => admin_url('upload.php?page=stateless-settings'),\n          'title' => sprintf(__(\"Stateless mode now requires the Cache-Busting option.\", ud_get_stateless_media()->domain)),\n          'message' => sprintf(__(\"WordPress looks at local files to prevent files with the same filenames.\n                                Since Stateless mode bypasses this check, there is a potential for files to be stored with the same file name. We enforce the Cache-Busting option to prevent this.\n                                Override with the <a href='%s' target='_blank'>%s</a> constant.\", ud_get_stateless_media()->domain), ud_get_stateless_media()->get_docs_page_url('docs/constants/#wpstatelessmediacachebusting'), \"WP_STATELESS_MEDIA_CACHE_BUSTING\"),\n        ), 'notice');\n      }\n\n      /**\n       * Filter for wp_get_attachment_url();\n       * @param string $url\n       * @param string $post_id\n       * @return mixed|null|string\n       */\n      public function wp_get_attachment_url($url = '', $post_id = '') {\n        global $default_dir;\n        $sm_cloud = apply_filters('wp_stateless_get_file', [], $post_id);\n        if (is_array($sm_cloud) && !empty($sm_cloud['fileLink'])) {\n          $_url = parse_url($sm_cloud['fileLink']);\n          $url = !isset($_url['scheme']) ? ('https:' . $sm_cloud['fileLink']) : $sm_cloud['fileLink'];\n          $url = apply_filters('wp_stateless_bucket_link', $url);\n        } elseif (is_multisite() && empty($sm_cloud)) {\n          $_file = get_post_meta($post_id, '_wp_attached_file', true);\n          if ($_file) {\n            if ($this->get('sm.mode') == 'stateless') {\n              $default_dir = true;\n              $uploads = wp_get_upload_dir();\n              $default_dir = false;\n              $url = $uploads['baseurl'] . '/' . $_file;\n            } else {\n              $uploads = wp_get_upload_dir();\n              $default_dir = false;\n              $_file = apply_filters('wp_stateless_file_name', $_file, false);\n              $blog_id = get_current_blog_id();\n              $file_path_fix = $uploads['basedir'] . \"/sites/$blog_id/$_file\";\n\n              if (file_exists($file_path_fix)) {\n                $url = $uploads['baseurl'] . \"/sites/$blog_id/$_file\";\n              }\n            }\n          }\n        } elseif (empty($sm_cloud) && $this->get('sm.mode') == 'stateless') {\n          $_file = get_post_meta($post_id, '_wp_attached_file', true);\n          if ($_file) {\n            $default_dir = true;\n            $uploads = wp_get_upload_dir();\n            $default_dir = false;\n\n            $url = $uploads['baseurl'] . '/' . $_file;\n          }\n        }\n\n        return apply_filters('wp_stateless_attachment_url', $url, $post_id);\n      }\n\n      /**\n       * Filter for attachment_url_to_postid()\n       *\n       * @param int|false $post_id originally found post ID (or false if not found)\n       * @param string $url the URL to find the post ID for\n       * @return int|false found post ID from cloud storage URL\n       */\n      public function attachment_url_to_postid($post_id, $url) {\n        global $wpdb;\n\n        if (!$post_id) {\n          $post_id = get_transient(\"stateless_url_to_postid_\" . md5($url));\n\n          if (defined('WP_STATELESS_LEGACY_URL_TO_POSTID')) {\n            // User can use this constant if they change the Bucket Folder (root_dir) after uploading image.\n            // This can be little slow at first run.\n            if (empty($post_id)) {\n              if ( !$this->get('sm.use_postmeta') ) {\n                $query = 'SELECT post_id FROM ' . ud_stateless_db()->files . ' WHERE file_link = %s';\n                $post_id = $wpdb->get_var($wpdb->prepare($query, $url));\n              }\n            \n              if (empty($post_id)) {\n                $query = \"SELECT post_id FROM $wpdb->postmeta WHERE meta_key = 'sm_cloud' AND meta_value LIKE '%s'\";\n                $post_id = $wpdb->get_var($wpdb->prepare($query, '%' . $url . '%'));\n              }\n\n              if ($post_id) {\n                set_transient(\"stateless_url_to_postid_\" . md5($url), $post_id);\n              }\n            }\n            return $post_id;\n          }\n\n          if (empty($post_id)) {\n            $gs_base_url =  $this->get_gs_host();\n            $root_dir = $this->get('sm.root_dir');\n            $path_elements = apply_filters('wp_stateless_unhandle_root_dir', $url);\n            $root_dir = apply_filters(\"wp_stateless_handle_root_dir\", $root_dir, false, $path_elements);\n            $gs_url =  $this->get_gs_host() . '/' . $root_dir;\n            $site_url = parse_url($gs_url);\n            $image_path = parse_url($url);\n\n            //force the protocols to match if needed\n            if (isset($image_path['scheme']) && ($image_path['scheme'] !== $site_url['scheme'])) {\n              $url = str_replace($image_path['scheme'], $site_url['scheme'], $url);\n            }\n\n            if (0 === strpos($url, $gs_url . '/')) {\n              $url = substr($url, strlen($gs_url . '/'));\n            } else if (0 === strpos($url, $gs_base_url . '/')) {\n              // In case user added Bucket Folder (root_dir) after uploading image.\n              $url = substr($url, strlen($gs_base_url . '/'));\n            }\n\n            /**\n             * If `uploads_use_yearmonth_folders` is set - adding year and month to url\n             */\n            $organize_media   = get_option('uploads_use_yearmonth_folders');\n            $path = '';\n            if ($organize_media == '1' && isset($path_elements['%date_year/date_month%'])) {\n              $path .= $path_elements['%date_year/date_month%'] . '/';\n            }\n            $url = $path . $url;\n\n            $sql = $wpdb->prepare(\n              \"SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attached_file' AND meta_value = %s\",\n              $url\n            );\n            $post_id = $wpdb->get_var($sql);\n\n            if ($post_id) {\n              set_transient(\"stateless_url_to_postid_\" . md5($url), $post_id);\n            }\n          }\n        }\n\n        return $post_id;\n      }\n\n      /**\n       * Change Upload BaseURL when CDN Used.\n       *\n       * @param $data\n       * @return mixed\n       */\n      public function upload_dir($data) {\n        $data['basedir'] = $this->get_gs_host();\n        $data['baseurl'] = $this->get_gs_host();\n        $data['url'] = $data['baseurl'] . $data['subdir'];\n\n        return $data;\n      }\n\n      /**\n       * Set Feature Flag constants by parsing composer.json\n       *\n       * @todo Make sure settings from DB can override these.\n       *\n       * @author potanin@UD\n       * @return array|mixed|null|object\n       */\n      public function parse_feature_flags() {\n\n        try {\n\n          $_raw = file_get_contents(Utility::normalize_path($this->root_path) . 'composer.json');\n\n          $_parsed = json_decode($_raw);\n\n          // @todo Catch poorly formatted JSON.\n          if (!is_object($_parsed)) {\n            // throw new Error( \"unable to parse.\"  );\n          }\n\n          foreach ((array) $_parsed->extra->featureFlags as $_feature) {\n\n            if (!defined($_feature->constant)) {\n              define($_feature->constant, $_feature->enabled);\n\n              if ($_feature->enabled) {\n                Utility::log('Feature flag ' . $_feature->name . ', [' . $_feature->constant . '] enabled.');\n              } else {\n                Utility::log('Feature flag ' . $_feature->name . ', [' . $_feature->constant . '] disabled.');\n              }\n            }\n          }\n        } catch (\\Exception $e) {\n          Utility::log('Unable to parse [composer.json] feature flags. Error: [' . $e->getMessage() . ']');\n          // echo 'Caught exception: ', $e->getMessage(), \"\\n\";\n        }\n\n        return isset($_parsed) ? $_parsed : null;\n      }\n\n      /**\n       * Determine if Utility class contains missed function\n       * in other case, just return NULL to prevent ERRORS\n       *\n       * @author peshkov@UD\n       * @param $name\n       * @param $arguments\n       * @return mixed|null\n       */\n      public function __call($name, $arguments) {\n        if (is_callable(array(\"wpCloud\\\\StatelessMedia\\\\Utility\", $name))) {\n          return call_user_func_array(array(\"wpCloud\\\\StatelessMedia\\\\Utility\", $name), $arguments);\n        } else {\n          return NULL;\n        }\n      }\n\n      /**\n       * Get all thumbnail sizes\n       *\n       * @global $_wp_additional_image_sizes\n       * @uses   get_intermediate_image_sizes()\n       *\n       * @param  boolean [$unset_disabled = true]\n       * @return array\n       */\n      function get_image_sizes($unset_disabled = true) {\n        $wais = &$GLOBALS['_wp_additional_image_sizes'];\n\n        $sizes = array();\n\n        foreach (get_intermediate_image_sizes() as $_size) {\n          if (in_array($_size, array('thumbnail', 'medium', 'medium_large', 'large'))) {\n            $sizes[$_size] = array(\n              'width'  => get_option(\"{$_size}_size_w\"),\n              'height' => get_option(\"{$_size}_size_h\"),\n              'crop'   => (bool) get_option(\"{$_size}_crop\"),\n            );\n          } elseif (isset($wais[$_size])) {\n            $sizes[$_size] = array(\n              'width'  => $wais[$_size]['width'],\n              'height' => $wais[$_size]['height'],\n              'crop'   => $wais[$_size]['crop'],\n            );\n          }\n\n          // size registered, but has 0 width and height\n          if ($unset_disabled && ($sizes[$_size]['width'] == 0) && ($sizes[$_size]['height'] == 0))\n            unset($sizes[$_size]);\n        }\n\n        return $sizes;\n      }\n\n      /**\n       * Get the email for notifications\n       *\n       * @return string\n       */\n      public function get_notification_email() {\n        $type = $this->get( 'sm.status_email_type' );\n\n        switch ($type) {\n          case 'true':\n            // Emails to Admin \n            return get_site_option('admin_email');\n          case 'custom':\n            // Emails to Custom Email \n            return $this->get( 'sm.status_email_address' );\n        }\n\n        // Emails disabled\n        return '';\n      }\n\n      /**\n       * Send admin email\n       *\n       * @param  string  $subject\n       * @param  string  $message\n       * @param  string  $email\n       */\n      public function send_admin_email($subject, $message, $email = '') {\n        $admin_email = empty($email) ? $this->get_notification_email() : $email;\n\n        $admin_email = explode(',', $admin_email);\n        $admin_email = array_map( function($item) {\n          return strip_tags( trim($item) );\n        }, $admin_email);\n\n        if ( empty($admin_email) || empty($subject) || empty($message) ) {\n          return;\n        }\n    \n        wp_mail( $admin_email, $subject, $message);\n      }\n\n      /**\n       * Check if we are in specific mode\n       *\n       * @param string|array $mode\n       * @return bool\n       */\n      public function is_mode($mode) {\n        if ( !is_array($mode) ) {\n          $mode = [$mode];\n        }\n\n        return in_array($this->get('sm.mode'), $mode);\n      }\n\n      /**\n       * Get default cache control value\n       *\n       * @return string\n       */\n      public function get_default_cache_control() {\n        return Settings::DEFAULT_CACHE_CONTROL;\n      }\n\n      /**\n       * Override REST API root for headless CMS\n       *\n       * @return string\n       */\n      public function get_rest_api_root($rest_api_root) {\n        $rest_api_root = sanitize_url( get_rest_url() );\n        $rest_api_root .= 'wp-stateless/v1/';\n\n        if ( $this->get('sm.use_api_siteurl') == 'WP_SITEURL' ) {\n          $home = get_home_url();\n          $site = get_site_url();\n\n          return str_replace( $home, $site, $rest_api_root );\n        }\n\n\n        return $rest_api_root;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-compatibility.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia;\n\n/**\n * Compatibility abstract class\n * Must be extends in every compatibility module.\n */\nabstract class Compatibility {\n  protected $id = '';\n  protected $title = '';\n\n  /**\n   * // Type String or Array.\n   *\n   * Single constant:\n   * example \"WP_STATELESS_COMPATIBILITY_EDD\"\n   *\n   * Multiple constant:\n   * [Constant, Another_Constant, ....]\n   * ['WP_STATELESS_MEDIA_ON_FLY', 'WP_STATELESS_DYNAMIC_IMAGE_SUPPORT']\n   *\n   * Deprecated constant:\n   * [Old Constant => New Constant, ...]\n   * ['WP_STATELESS_MEDIA_ON_FLY' => 'WP_STATELESS_DYNAMIC_IMAGE_SUPPORT']\n   */\n  protected $constant = '';\n  protected $enabled = true;\n  protected $description = '';\n  protected $plugin_file = null;\n  protected $theme_name = null;\n  protected $first_party = false;\n  protected $non_library_sync = false;\n  protected $server_constant = false;\n  protected $sm_mode_required = '';\n  protected $sm_mode_not_supported = [];\n  protected $is_internal = false;\n\n  public function __construct() {\n    // Prevent conflict between internal built-in compatibility modules and addon plugins\n    $restrict = apply_filters('wp_stateless_restrict_compatibility', false, $this->id, $this->is_internal);\n    \n    if ($restrict) {\n      $this->enabled = false;\n      return;\n    }\n\n    if ( !$this->is_internal ) {\n      add_filter('wp_stateless_restrict_compatibility', array($this, 'restrict_compatibility'), 10, 3);\n    }\n\n    $this->init();\n  }\n\n  /**\n   * Checking whether the plugin is active or not.\n   * If the plugin_file is specified then check whether plugin is active or not.\n   * We can't use is_plugin_active function because it's defined later in init.\n   * By default return true.\n   *\n   * @todo caching.\n   */\n  public function is_plugin_active() {\n    if (!empty($this->theme_name)) {\n      return Helper::is_theme_name($this->theme_name);\n    }\n\n    if (!empty($this->plugin_file)) {\n      // Converting string to array for foreach\n      if (is_string($this->plugin_file)) {\n        $this->plugin_file = array($this->plugin_file);\n      }\n\n      // If multisite then check if plugin is network active\n      if (is_multisite()) {\n        $active_plugins = (array)get_site_option('active_sitewide_plugins');\n        foreach ($this->plugin_file as $plugin_file) {\n          if (isset($active_plugins[$plugin_file])) {\n            return true;\n          }\n        }\n\n        // If we are in network admin then return, unless it will get data from main site.\n        if (is_network_admin()) {\n          return false;\n        }\n      }\n\n      $active_plugins = (array)get_option('active_plugins', array());\n      foreach ($this->plugin_file as $plugin_file) {\n        if (in_array($plugin_file, $active_plugins)) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    /**\n     * If server constant is set - check if exist it on global $_SERVER\n     */\n    if (!empty($this->server_constant)) {\n      if (isset($_SERVER[$this->server_constant])) {\n        return true;\n      }\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checking whether current mode is supported.\n   * By default return true.\n   *\n   * @todo caching.\n   */\n  public function is_mode_supported() {\n    $sm_mode = isset($_POST['sm']['mode']) ? $_POST['sm']['mode'] : ud_get_stateless_media()->get('sm.mode');\n    if (in_array($sm_mode, $this->sm_mode_not_supported)) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Initialize the module\n   * Check whether plugin is active or not.\n   * Register module.\n   *\n   * Add action for sm::module::init hook for module_init, which is fired(do_action) on Bootstrap::init()\n   */\n  public function init() {\n    $is_constant = false;\n    $is_network_override = false;\n    $sm_mode = isset($_POST['sm']['mode']) ? $_POST['sm']['mode'] : ud_get_stateless_media()->get('sm.mode');\n    if (is_network_admin()) {\n      $this->enabled = null;\n    }\n\n    if (is_array($this->constant)) {\n      foreach ($this->constant as $old_const => $new_const) {\n        if (defined($new_const)) {\n          $is_constant = true;\n          $this->enabled = constant($new_const);\n          break;\n        }\n        if (is_string($old_const) && defined($old_const)) {\n          $is_constant = true;\n          $this->enabled = constant($old_const);\n          ud_get_stateless_media()->errors->add(array(\n            'key' => $this->id,\n            'title' => sprintf(__(\"%s: Deprecated Notice (%s)\", ud_get_stateless_media()->domain), ud_get_stateless_media()->name, $this->title),\n            'message' => sprintf(__(\"<i>%s</i> constant is deprecated, please use <i>%s</i> instead.\", ud_get_stateless_media()->domain), $old_const, $new_const),\n          ), 'notice');\n          break;\n        }\n      }\n    } elseif (defined($this->constant)) {\n      $this->enabled = constant($this->constant);\n      $is_constant = true;\n    }\n\n    if (!$is_constant) {\n      $modules = get_option('stateless-modules', array());\n      if (empty($this->enabled)) {\n        $this->enabled = !empty($modules[$this->id]) && $modules[$this->id] == 'true' ? true : false;\n      }\n      if (is_multisite()) {\n        $modules = get_site_option('stateless-modules', array());\n        if (is_network_admin()) {\n          $this->enabled = !empty($modules[$this->id]) ? ($modules[$this->id] == 'true' ? true : false) : '';\n        } elseif (!empty($modules[$this->id])) {\n          $this->enabled = !empty($modules[$this->id]) ? ($modules[$this->id] == 'true' ? true : false) : '';\n          $is_network_override = true;\n        }\n      }\n    }\n\n    if (!is_network_admin() && (!$this->is_plugin_active() || !$this->is_mode_supported())) {\n      $this->enabled = 'inactive';\n    }\n\n    /**\n     * Checking whether to show manual sync option.\n     */\n    if ($this->is_plugin_active() && $this->non_library_sync == true) {\n      global $show_non_library_sync;\n      $show_non_library_sync = true;\n    }\n\n    Module::register_module(array(\n      'id' => $this->id,\n      'self' => $this,\n      'title' => $this->title,\n      'enabled' => $this->enabled,\n      'description' => $this->description,\n      'is_constant' => $is_constant,\n      'is_network_override' => $is_network_override,\n      'is_plugin_active' => $this->is_plugin_active(),\n      'is_network_admin' => is_network_admin(),\n      'is_plugin' => !empty($this->plugin_file),\n      'is_theme' => !empty($this->theme_name),\n      'is_mode_supported' => $this->is_mode_supported(),\n      'mode' => ucfirst($sm_mode),\n      'is_internal' => $this->is_internal,\n    ));\n\n    if ($this->enabled && $this->is_plugin_active() && $this->is_mode_supported()) {\n      add_action('sm::module::init', array($this, 'module_init'));\n    }\n\n    if (!$this->enabled && !$this->first_party && $this->is_plugin_active()) {\n      ud_get_stateless_media()->errors->add(array(\n        'key' => $this->id,\n        'title' => sprintf(__(\"%s: Compatibility for %s isn't enabled.\", ud_get_stateless_media()->domain), ud_get_stateless_media()->name, $this->title),\n        'button' => __(\"Enable Compatibility\", ud_get_stateless_media()->domain),\n        'message' => __(\"Please enable the compatibility to ensure the functionality will work properly between <b>{$this->title}</b> and <b>WP-Stateless</b>.\", ud_get_stateless_media()->domain),\n      ), 'notice');\n    }\n\n    /**\n     * Check requires WP-Stateless mode\n     */\n    if (!empty($this->sm_mode_required) && $this->enabled !== 'inactive') {\n      if ($sm_mode !== $this->sm_mode_required) {\n        ud_get_stateless_media()->errors->add(array(\n          'key' => $this->id,\n          'title' => sprintf(__(\"%s: Current Mode is not compatible with  %s.\", ud_get_stateless_media()->domain), ud_get_stateless_media()->name, $this->title),\n          'message' => sprintf(__(\"%s compatibility requires %s in %s mode.\", ud_get_stateless_media()->domain), $this->title, ud_get_stateless_media()->name, ucfirst($this->sm_mode_required)),\n        ), 'notice');\n      }\n    }\n  }\n\n  /**\n   * @return bool\n   */\n  public function enable_compatibility() {\n\n    if (is_network_admin()) {\n      $modules = get_site_option('stateless-modules', array());\n      if (empty($modules[$this->id]) || $modules[$this->id] != 'true') {\n        $modules[$this->id] = 'true';\n        update_site_option('stateless-modules', $modules, true);\n      }\n    } else {\n      $modules = get_option('stateless-modules', array());\n      if (empty($modules[$this->id]) || $modules[$this->id] != 'true') {\n        $modules[$this->id] = 'true';\n        update_option('stateless-modules', $modules, true);\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * add_webp_mime\n   * @param $t\n   * @param $user\n   * @return mixed\n   */\n  public function add_webp_mime($t, $user) {\n    $t['webp'] = 'image/webp';\n    return $t;\n  }\n\n  /**\n   * Restrict internal compatibility.\n   * @param $restrict   bool\n   * @param $id         string\n   * @param $is_internal bool\n   * @return bool\n   */\n  public function restrict_compatibility($restrict, $id, $is_internal) {\n    // If we have internal compatibility with the same ID - then disable internal compatibility\n    return $is_internal && $this->id == $id ? true : $restrict;\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-db.php",
    "content": "<?php\n\n/**\n * DB\n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n\n  if (!class_exists('wpCloud\\StatelessMedia\\DB')) {\n\n    class DB {\n      use Singleton;\n\n      const DB_VERSION_KEY = 'sm_db_version';\n      const DB_VERSION = '1.2';\n      const FULL_SIZE = '__full';\n\n      /**\n       * @var \\WPDB\n       */\n      private $wpdb;\n\n      /**\n       * Bucket link\n       */\n      private $bucket_link = '';\n\n      /**\n       * Files table name\n       */\n      private $files = '';\n\n      /**\n       * File sizes table name\n       */\n      private $file_sizes = '';\n\n      /**\n       * File meta table name\n       */\n      private $file_meta = '';\n\n      /**\n       * Cache group name\n       */\n      private $cache_group = 'stateless_media';\n\n      /**\n       * Files table fields mapping, used for backward compatibility with old postmeta\n       */\n      private $file_mapping = [\n        'id' => 'id',\n        'post_id' => 'post_id',\n        'bucket' => 'bucket',\n        'name' => 'name',\n        'generation' => 'generation',\n        'cacheControl' => 'cache_control',\n        'contentType' => 'content_type',\n        'contentDisposition' => 'content_disposition',\n        'filesize' => 'file_size',\n        'width' => 'width',\n        'height' => 'height',\n        'stateless_version' => 'stateless_version',\n        'storageClass' => 'storage_class',\n        'fileLink' => 'file_link',\n        'selfLink' => 'self_link',\n      ];\n\n      /**\n       * Files sizes table fields mapping, used for backward compatibility with old postmeta\n       */\n      private $file_sizes_mapping = [\n        'id' => 'id',\n        'post_id' => 'post_id',\n        'size_name' => 'size_name',\n        'name' => 'name',\n        'generation' => 'generation',\n        'filesize' => 'file_size',\n        'width' => 'width',\n        'height' => 'height',\n        'fileLink' => 'file_link',\n        'selfLink' => 'self_link',\n      ];\n\n      protected function __construct() {\n        global $wpdb;\n        $this->wpdb = $wpdb;\n\n        $this->files = $this->wpdb->prefix . 'stateless_files';\n        $this->file_sizes = $this->wpdb->prefix . 'stateless_file_sizes';\n        $this->file_meta = $this->wpdb->prefix . 'stateless_file_meta';\n\n        $image_host = ud_get_stateless_media()->get_gs_host();\n        $this->bucket_link = apply_filters('wp_stateless_bucket_link', $image_host);\n\n        if ( is_multisite() ) {\n          $this->cache_group = implode('_', [\n            $this->cache_group,\n            get_current_blog_id(),\n          ]);\n        }\n\n        $this->_init();\n      }\n\n      /**\n       * Init hooks\n       */\n      private function _init() {\n        add_filter('wp_stateless_generate_cloud_meta', [$this, 'process_cloud_meta'], 10, 5);\n        add_action('deleted_post', [$this, 'delete_post'], 10, 2);\n\n        add_filter('wp_stateless_get_file', [$this, 'get_file'], 10, 3);\n        add_filter('wp_stateless_get_file_sizes', [$this, 'get_file_sizes'], 10, 2);\n        add_filter('wp_stateless_get_file_meta', [$this, 'get_file_meta'], 10, 2);\n        add_filter('wp_stateless_get_file_meta_value', [$this, 'get_file_meta_value'], 10, 4);\n        add_action('wp_stateless_set_file', [$this, 'set_file'], 10, 2);\n        add_action('wp_stateless_set_file_size', [$this, 'set_file_size'], 10, 3);\n        add_action('wp_stateless_set_file_meta', [$this, 'update_file_meta'], 10, 3);\n        add_action('wp_stateless_get_non_library_files', [$this, 'get_non_library_files'], 10, 2);\n      }\n\n      /**\n       * Getters\n       */\n      public function __get($property) {\n        if ( in_array($property, ['files', 'file_sizes', 'file_meta']) ) {\n          return $this->$property;\n        }\n      }\n\n      /**\n       * Creates or updates DB structure\n       */\n      public function create_db() {\n        $version = get_option(self::DB_VERSION_KEY, '');\n\n        if ($version === self::DB_VERSION) {\n          return;\n        }\n\n        try {\n          Upgrader::upgrade_db(self::DB_VERSION, $version);\n\n          $charset_collate = $this->wpdb->get_charset_collate();\n\n          /**\n           * Indexes for varchar(255) columns are limited for backward compatibility.\n           * Based on wp-admin/includes/schema.php (wp_get_db_schema function)\n           */\n\n          $sql = \"CREATE TABLE $this->files (\n            `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n            `post_id` bigint(20) unsigned NULL DEFAULT NULL,\n            `bucket` varchar(255) NOT NULL,\n            `name` varchar(255) NOT NULL,\n            `generation` bigint(16) NOT NULL,\n            `cache_control` varchar(255) NULL DEFAULT NULL,\n            `content_type` varchar(255) NULL DEFAULT NULL,\n            `content_disposition` varchar(100) NULL DEFAULT NULL,\n            `file_size` bigint(20) unsigned NULL DEFAULT NULL,\n            `width` int unsigned NULL DEFAULT NULL,\n            `height` int unsigned NULL DEFAULT NULL,\n            `stateless_version` varchar(20) NOT NULL,\n            `storage_class` varchar(50) NULL DEFAULT NULL,\n            `file_link` text NOT NULL,\n            `self_link` text NOT NULL,\n            `source` varchar(50) NULL DEFAULT NULL,\n            `source_version` varchar(50) NULL DEFAULT NULL,\n            `status` varchar(10) NULL DEFAULT NULL,\n            PRIMARY KEY (`id`),\n            KEY post_id (post_id),\n            KEY `name` (`name`(191)),\n            UNIQUE KEY post_id_name (post_id, `name`(150))\n          ) $charset_collate;\n  \n          CREATE TABLE $this->file_sizes (\n            `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n            `post_id` bigint(20) unsigned NULL DEFAULT NULL,\n            `size_name` varchar(255) NOT NULL,\n            `name` varchar(255) NOT NULL,\n            `generation` bigint(16) NOT NULL,\n            `file_size` bigint(20) unsigned NULL DEFAULT NULL,\n            `width` int unsigned NULL DEFAULT NULL,\n            `height` int unsigned NULL DEFAULT NULL,\n            `file_link` text NOT NULL,\n            `self_link` text NOT NULL,\n            PRIMARY KEY (`id`),\n            KEY post_id (post_id),\n            UNIQUE KEY post_id_size (post_id, size_name(150))\n          ) $charset_collate;\n  \n          CREATE TABLE $this->file_meta (\n            `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n            `post_id` bigint(20) unsigned NULL DEFAULT NULL,\n            `meta_key` varchar(255) NOT NULL,\n            `meta_value` longtext NOT NULL,\n            PRIMARY KEY (`id`),\n            KEY post_id (post_id),\n            UNIQUE KEY post_id_key (post_id, meta_key(150))\n          ) $charset_collate;\";\n  \n          require_once(ABSPATH . 'wp-admin/includes/upgrade.php');\n          dbDelta($sql);\n  \n          update_option(self::DB_VERSION_KEY, self::DB_VERSION);\n        } catch (\\Throwable $e) {\n          Helper::log($e->getMessage());\n        }\n      }\n\n      /**\n       * Remove custom DB table on plugin uninstall\n       * \n       * @param int $site_id\n       */\n      public function clear_db($site_id) {\n        switch_to_blog($site_id);\n\n        $tables = array(\n          $this->wpdb->prefix . 'files',\n          $this->wpdb->prefix . 'files_sizes',\n          $this->wpdb->prefix . 'file_meta',\n        );\n\n        $tables = implode(', ', $tables);\n\n        $sql = \"DROP TABLE IF EXISTS $tables;\";\n        $this->wpdb->query($sql);\n\n        restore_current_blog();\n      }\n\n      /**\n       * Get file link\n       * \n       * @param string $name\n       * @return string\n       */\n      public function get_file_link($name) {\n        return trailingslashit($this->bucket_link) . $name;\n      }\n\n      /**\n       * Get file row ID by post ID\n       * \n       * @param int $post_id\n       * @return int | null\n       */\n      public function get_file_id($post_id) {\n        $sql = \"SELECT id FROM $this->files WHERE post_id = %d AND post_id IS NOT NULL\";\n        $id = $this->wpdb->get_var( $this->wpdb->prepare($sql, $post_id) );\n\n        return $id ? (int) $id : null;\n      }\n\n      /**\n       * Get ID of the non-library file by file name and status \n       * \n       * @param string $name\n       * @param string $status\n       * @return int | null\n       */\n      public function get_non_library_file_id($name, $status = '') {\n        $sql = \"SELECT id FROM $this->files WHERE name = %s AND post_id IS NULL\";\n        $args = [$name];\n\n        if ( !empty($status) ) {\n          $sql .= \" AND status = %s\";\n          $args[] = $status;\n        }\n\n        $id = $this->wpdb->get_var( $this->wpdb->prepare($sql, ...$args) );\n\n        return $id ? (int) $id : null;\n      }\n\n      /**\n       * Get name of the non-library file by part of the name \n       * \n       * @param string $name\n       * @return string | null\n       */\n      public function get_non_library_file_name($name) {\n        $sql = \"SELECT name FROM $this->files WHERE name like '%%%s' AND post_id IS NULL\";\n\n        return $this->wpdb->get_var( $this->wpdb->prepare($sql, $name) );\n      }\n\n      /**\n       * Get file size row ID by post ID and size name\n       * \n       * @param int $post_id\n       * @param string $size\n       * @return int | null\n       */\n      public function get_file_size_id($post_id, $size) {\n        $sql = \"SELECT id FROM $this->file_sizes WHERE post_id = %d AND size_name = %s\";\n        $id = $this->wpdb->get_var( $this->wpdb->prepare($sql, $post_id, $size) );\n\n        return $id ? (int) $id : null;\n      }\n\n      /**\n       * Get file meta row ID by post ID and meta key\n       * \n       * @param int $post_id\n       * @param string $key\n       * @return int | null\n       */\n      public function get_file_meta_id($post_id, $key) {\n        $key = sanitize_key($key);\n\n        $sql = \"SELECT id FROM $this->file_meta WHERE post_id = %d AND meta_key = %s\";\n        $id = $this->wpdb->get_var( $this->wpdb->prepare($sql, $post_id, $key) );\n\n        return $id ? (int) $id : null;\n      }\n\n      /**\n       * Add file data to DB\n       * \n       * @param array $cloud_meta   - generated WP postmeta\n       * @param array $media        - GCS media object\n       * @param string $image_size  - image size name\n       * @param array $img          - image (or image size) data for upload\n       * @param string $bucketLink  - bucket link\n       * @return mixed\n       */\n      public function process_cloud_meta($cloud_meta, $media, $image_size, $img, $bucketLink) {\n        $this->update_data($media);\n\n        return $cloud_meta;\n      }\n      \n      /**\n       * Determine which data to update and run updates\n       * \n       * @param array $media - GCS media object\n       */\n      public function update_data($media) {\n        $error = false;\n\n        if ( !isset($media['name']) || !isset($media['metadata']) || !isset($media['metadata']['size']) ) {\n          $error = 'Metadata missing or incorrect for GCS media object';\n        } else {\n          $size = $media['metadata']['size'];\n\n          if ( $size == self::FULL_SIZE ) {\n            $attachment_id = isset($media['metadata']['object-id']) ? $media['metadata']['object-id'] : null;\n  \n            if ( !$attachment_id ) {\n              $error = 'Unable to get attachment ID for GCS media object';\n            } else {\n              $this->_update_file(\n                $attachment_id, \n                $this->_get_file_from_media($media),\n              );\n            }\n          } else {\n            $attachment_id = isset($media['metadata']['child-of']) ? $media['metadata']['child-of'] : null;\n  \n            if ( !$attachment_id ) {\n              $error = 'Unable to get parent attachment ID for GCS media object';\n            } else {\n              $this->_update_file_size(\n                $attachment_id, \n                $size, \n                $this->_get_file_size_from_media($media),\n              );\n            }\n          }\n        }\n\n        if ( $error ) {\n          Helper::log($error);\n          Helper::log($media, true);\n        }\n      }\n\n      /**\n       * Update file data, based on the mapping received from the media object\n       * \n       * @param int $attachment_id\n       * @param array $data\n       * @return int | null\n       */\n      public function set_file($attachment_id, $data) {\n        $result = [];\n\n        foreach ($this->file_mapping as $key => $mapping) {\n          if ( isset($data[$key]) ) {\n            $result[$mapping] = $data[$key];\n            \n            continue;\n          }\n\n          if ( isset($data[$mapping]) ) {\n            $result[$mapping] = $data[$mapping];\n\n            continue;\n          }\n        }\n\n        unset($result['id']);\n\n        return $this->_update_file($attachment_id, $result);\n      }\n\n      /**\n       * Update file size data\n       * \n       * @param int $attachment_id\n       * @param string $size_name\n       * @param array $data\n       * @return int | null\n       */\n      public function set_file_size($attachment_id, $size_name, $data) {\n        $result = [];\n\n        foreach ($this->file_sizes_mapping as $key => $mapping) {\n          if ( isset($data[$key]) ) {\n            $result[$mapping] = $data[$key];\n            \n            continue;\n          }\n\n          if ( isset($data[$mapping]) ) {\n            $result[$mapping] = $data[$mapping];\n\n            continue;\n          }\n        }\n\n        unset($result['id']);\n\n        return $this->_update_file_size($attachment_id, $size_name, $result);\n      }\n\n      /**\n       * Convert GSC media object into stateless file data\n       * \n       * @param array $media\n       * @return array\n       */\n      private function _get_file_from_media($media, $status = '') {\n        $name = $media['name'];\n\n        $data =[\n          'bucket' => $media['bucket'] ?? '',\n          'name' => $name,\n          'generation' => $media['generation'] ?? '',\n          'cache_control' => $media['cacheControl'] ?? null,\n          'content_type' => $media['contentType'] ?? null,\n          'content_disposition' => $media['contentDisposition'] ?? null,\n          'file_size' => $media['size'] ?? null,\n          'width' => $media['metadata']['width'] ?? null,\n          'height' => $media['metadata']['height'] ?? null,\n          'stateless_version' => get_option('wp_sm_version', false),\n          'storage_class' => $media['storageClass'] ?? null,\n          'file_link' => $this->get_file_link($name),\n          'self_link' => $media['selfLink'] ?? '',\n          'status' => $status,\n          'source' => $media['metadata']['source'] ?? '',\n          'source_version' => $media['metadata']['sourceVersion'] ?? '',\n        ];\n\n        return $data;\n      }\n\n      /**\n       * Update non Media Library file (compatibility files)\n       * \n       * @param array $media - GCS media object\n       * @param string $source - source of the file\n       * @param string $status - status of the file\n       */\n      public function update_non_library_file($media, $status = '') {\n        if ( !is_array($media) || empty($media) || !isset($media['name']) ) {\n          Helper::log('Media object is not valid or empty. Unable to update non-library file.');\n\n          return;\n        }\n\n        $data = $this->_get_file_from_media($media, $status);\n        $file_id = $this->get_non_library_file_id($data['name'], $status);\n\n        if ( $file_id ) {\n          $this->wpdb->update(\n            $this->files,\n            $data,\n            ['id' => $file_id]\n          );\n        } else {\n          $this->wpdb->insert( $this->files, $data );\n\n          $file_id = $this->wpdb->insert_id;\n        }\n\n        return $file_id;\n      }        \n        \n      /**\n       * Update file data\n       * \n       * @param int $attachment_id\n       * @param array $data\n       * @return int | null\n       */\n      private function _update_file($attachment_id, $data) {\n        $file_id = $this->get_file_id($attachment_id);\n\n        if ( $file_id ) {\n          $this->wpdb->update(\n            $this->files,\n            $data,\n            ['id' => $file_id]\n          );\n        } else {\n          $data['post_id'] = $attachment_id;\n\n          $this->wpdb->insert( $this->files, $data );\n\n          $file_id = $this->wpdb->insert_id;\n        }\n\n        $this->_delete_file_cache($attachment_id);\n\n        return $file_id;\n      }\n\n      /**\n       * Convert GSC media object into stateless file size data\n       * \n       * @param array $media\n       * @return array\n       */\n      private function _get_file_size_from_media($media) {\n        $name = $media['name'];\n\n        $data =[\n          'name' => $name,\n          'generation' => $media['generation'] ?? '',\n          'file_size' => $media['size'] ?? null,\n          'width' => $media['metadata']['width'] ?? null,\n          'height' => $media['metadata']['height'] ?? null,\n          'file_link' => $this->get_file_link($name),\n          'self_link' => $media['selfLink'] ?? '',\n        ];\n\n        return $data;\n      }\n\n      /**\n       * Update file size data\n       * \n       * @param int $attachment_id\n       * @param string $size_name\n       * @param array $media\n       * @return int | null\n       */\n      private function _update_file_size($attachment_id, $size_name, $data) {        \n        $file_size_id = $this->get_file_size_id($attachment_id, $size_name);\n\n        if ( $file_size_id ) {\n          $this->wpdb->update(\n            $this->file_sizes,\n            $data,\n            ['id' => $file_size_id]\n          );\n        } else {\n          $data['post_id'] = $attachment_id;\n          $data['size_name'] = $size_name;\n\n          $this->wpdb->insert( $this->file_sizes, $data );\n\n          $file_size_id = $this->wpdb->insert_id;\n        }\n\n        $this->_delete_file_sizes_cache($attachment_id);\n\n        return $file_size_id;\n      }\n\n      /**\n       * Delete file data when attachment is deleted\n       * \n       * @param int $post_id\n       * @param \\WP_Post $post\n       */\n      public function delete_post($post_id, $post) {\n        $file_id = $this->get_file_id($post_id);\n\n        if ( !$file_id ) {\n          return;\n        }\n\n        $this->wpdb->delete(\n          $this->files,\n          ['post_id' => $post_id]\n        );\n\n        $this->wpdb->delete(\n          $this->file_sizes,\n          ['post_id' => $post_id]\n        );\n\n        $this->wpdb->delete(\n          $this->file_meta,\n          ['post_id' => $post_id]\n        );\n\n        $this->_delete_attachment_cache($post_id);\n      }\n\n      /**\n       * Map requested fields into database query< compatible with the old post meta structure\n       * \n       * @param array $fields\n       * @param array $fields_mapping\n       * @return string\n       */\n      private function _map_fields($fields, $fields_mapping) {\n        $mapped = [];\n        $result = [];\n\n        if ( !is_array($fields) ) {\n          $fields = [$fields];\n        }\n\n        if (empty($fields)) {\n          $fields = array_keys($fields_mapping);\n        }\n\n        foreach ($fields as $key) {\n          if ( isset($fields_mapping[$key]) ) {\n            $mapped[$key] = $fields_mapping[$key];  \n          }\n        }\n\n        foreach ($mapped as $key => $value) {\n          $result[] = \"$value AS $key\";\n        }\n\n        return implode(', ', $result);\n      }\n\n      /**\n       * Get cache key for file data\n       * \n       * @param int $post_id\n       * @return string\n       */\n      private function _get_file_cache_key($post_id) {\n        return implode('_', ['file', $post_id]);\n      }\n\n      /**\n       * Get cache key for file sizes data\n       * \n       * @param int $post_id\n       * @return string\n       */\n      private function _get_file_sizes_cache_key($post_id) {\n        return implode('_', ['file_sizes', $post_id]);\n      }\n\n      /**\n       * Get cache group for file meta data\n       * \n       * @param int $post_id\n       * @return string\n       */\n      private function _get_file_meta_cache_group($post_id) {\n        return implode('_', [$this->cache_group, 'meta', $post_id]);\n      }\n\n      /**\n       * Get cache key for file meta data\n       * \n       * @param int $post_id\n       * @param string $key\n       * @return string\n       */\n      private function _get_file_meta_cache_key($post_id, $key) {\n        return implode('_', [$key, $post_id]);\n      }\n\n      /**\n       * Get cache for file meta\n       * \n       * @param int $post_id\n       * @param string $key\n       * @param bool $found\n       * @return mixed\n       */\n      private function _get_file_meta_cache($post_id, $key, &$found) {\n        return wp_cache_get(\n          $this->_get_file_meta_cache_key($post_id, $key), \n          $this->_get_file_meta_cache_group($post_id), \n          false, \n          $found\n        );\n      }\n\n      /**\n       * Set cache for file meta\n       * \n       * @param int $post_id\n       * @param string $key\n       * @param mixed $value\n       * @return bool\n       */\n      private function _set_file_meta_cache($post_id, $key, $value) {\n        return wp_cache_set(\n          $this->_get_file_meta_cache_key($post_id, $key), \n          $value, \n          $this->_get_file_meta_cache_group($post_id)\n        );\n      }\n\n      /**\n       * Delete file cache\n       * \n       * @param int $attachment_id\n       */\n      private function _delete_file_cache($attachment_id) {\n        wp_cache_delete( $this->_get_file_cache_key($attachment_id), $this->cache_group );\n      }\n\n      /**\n       * Delete file sizes cache\n       * \n       * @param int $attachment_id\n       */\n      private function _delete_file_sizes_cache($attachment_id) {\n        wp_cache_delete( $this->_get_file_sizes_cache_key($attachment_id), $this->cache_group );\n      }\n\n      /**\n       * Delete file meta cache for single key\n       * \n       * @param int $attachment_id\n       * @param string $key\n       */\n      private function _delete_file_meta_key_cache($attachment_id, $key) {\n        wp_cache_delete( \n          $this->_get_file_meta_cache_key($attachment_id, $key), \n          $this->_get_file_meta_cache_group($attachment_id) \n        );\n      }\n\n      /**\n       * Delete all file meta cache\n       * \n       * @param int $attachment_id\n       */\n      private function _delete_file_meta_cache($attachment_id) {\n        wp_cache_flush_group( $this->_get_file_meta_cache_group($attachment_id) );\n      }\n\n      /**\n       * Delete all attachment cache\n       * \n       * @param int $attachment_id\n       */\n      private function _delete_attachment_cache($attachment_id) {\n        $this->_delete_file_cache($attachment_id);\n        $this->_delete_file_sizes_cache($attachment_id);\n        $this->_delete_file_meta_cache($attachment_id);\n      }\n\n      /**\n       * Get the total files count known to WP-Stateless\n       * \n       * @return int\n       */\n      public function get_total_files() {\n        global $wpdb;\n\n        try {\n          $query = \"SELECT COUNT(id) FROM $this->files\";\n\n          return $wpdb->get_var($query);\n        } catch (\\Throwable $e) {\n          return 0;\n        }\n      }\n\n      /**\n       * Get the total file sizes count known to WP-Stateless\n       * \n       * @return int\n       */\n      public function get_total_file_sizes() {\n        global $wpdb;\n\n        try {\n          $query = \"SELECT COUNT(id) FROM $this->file_sizes\";\n\n          return $wpdb->get_var($query);\n        } catch (\\Throwable $e) {\n          return 0;\n        }\n      }\n\n      /**\n       * Get the total non-media file sizes count known to WP-Stateless\n       * \n       * @return int\n       */\n      public function get_total_non_media_files() {\n        global $wpdb;\n\n        try {\n          $query = \"SELECT COUNT(id) FROM $this->files WHERE post_id IS NULL\";\n\n          return $wpdb->get_var($query);\n        } catch (\\Throwable $e) {\n          return 0;\n        }\n      }\n\n      /**\n       * Get file data. If $with_sizes is set to true, all sizes will be included\n       * \n       * @param array $meta\n       * @param int $attachment_id\n       * @param bool $with_sizes\n       * @return array\n       */\n      public function get_file($meta, $attachment_id, $with_sizes = false) {\n        if ( ud_get_stateless_media()->get('sm.use_postmeta') ) {\n          $meta = get_post_meta($attachment_id, 'sm_cloud', true);\n\n          if ( !empty($meta) ) {\n            return $meta;\n          }\n        }\n\n        // Get values from the cache\n        $cache_key = $this->_get_file_cache_key($attachment_id);\n\n        $meta = wp_cache_get($cache_key, $this->cache_group, false, $found);\n\n        if ( $found ) {\n          return $meta;\n        }\n\n        // Get values from the DB\n        $fields = $this->_map_fields([], $this->file_mapping);\n\n        $sql = \"SELECT $fields FROM $this->files WHERE post_id = %d\";\n\n        $meta = $this->wpdb->get_row( $this->wpdb->prepare($sql, $attachment_id), ARRAY_A );\n\n        if ( empty($meta) ) {\n          return get_post_meta($attachment_id, 'sm_cloud', true);\n        }\n\n        wp_cache_set($cache_key, $meta, $this->cache_group);\n\n        // Get file size meta data\n        if ( $with_sizes ) {\n          $meta['sizes'] = apply_filters('wp_stateless_get_file_sizes', [], $attachment_id);\n        }\n\n        return $meta;\n      }\n\n      /**\n       * Get file sizes data\n       * \n       * @param array $sizes\n       * @param int $attachment_id\n       * @return array\n       */\n      public function get_file_sizes($sizes, $attachment_id) {\n        if ( ud_get_stateless_media()->get('sm.use_postmeta') ) {\n          $meta = get_post_meta($attachment_id, 'sm_cloud', true);\n          return isset($meta['sizes']) ? $meta['sizes'] : [];\n        }\n\n        // Get values from the cache\n        $cache_key = $this->_get_file_sizes_cache_key($attachment_id);\n\n        $sizes = wp_cache_get($cache_key, $this->cache_group, false, $found);\n\n        if ( $found ) {\n          return $sizes;\n        }\n\n        // Get values from the DB\n        $fields = $this->_map_fields([], $this->file_sizes_mapping);\n\n        $sql = \"SELECT $fields FROM $this->file_sizes WHERE post_id = %d\";\n        $sql = $this->wpdb->prepare($sql, $attachment_id);\n\n        $result = $this->wpdb->get_results( $this->wpdb->prepare($sql, $attachment_id), ARRAY_A );\n        $sizes = [];\n\n        if ( !empty($result) ) {\n          foreach ($result as $size) {\n            $size_name = $size['size_name'];\n            unset($size['size_name']);\n            $sizes[$size_name] = $size;\n          }\n        }\n\n        wp_cache_set($cache_key, $sizes, $this->cache_group);\n\n        return $sizes;\n      }\n\n      /**\n       * Get file meta\n       * \n       * @param int $post_id\n       * @param string $key\n       * @param mixed $default\n       * @return mixed\n       */\n      public function get_file_meta_value($value, $post_id, $key, $default = null) {\n        if ( ud_get_stateless_media()->get('sm.use_postmeta') ) {\n          $meta = get_post_meta($post_id, 'sm_cloud', []);\n\n          return isset($meta[$key]) ? $meta[$key] : $default;\n        }\n\n        // Get values from the cache\n        $key = sanitize_key($key);\n\n        $value = $this->_get_file_meta_cache($post_id, $key, $found);\n\n        if ( $found ) {\n          return $value;\n        }\n\n        // Get values from the DB\n        $sql = \"SELECT meta_value FROM $this->file_meta WHERE post_id = %d AND meta_key = %s\";\n        $data = $this->wpdb->get_var( $this->wpdb->prepare($sql, $post_id, $key) );\n\n        $value = null;\n\n        if ( is_serialized( $data ) ) { // Don't attempt to unserialize data that wasn't serialized going in.\n          $value = @unserialize( trim( $data ) );\n        } else {\n          $value = $data;\n        }\n\n        $this->_set_file_meta_cache($post_id, $key, $value);\n\n        return $value;\n      }\n\n      /**\n       * Update file meta\n       * \n       * @param int $post_id\n       * @param string $key\n       * @param mixed $value\n       * @return int\n       */\n      public function update_file_meta($post_id, $key, $value) {\n        $key = sanitize_key($key);\n\n        // Update value in the DB\n        $value = maybe_serialize( $value );\n\n        $file_meta_id = $this->get_file_meta_id($post_id, $key);\n\n        if ( $file_meta_id ) {\n          $this->wpdb->update(\n            $this->file_meta,\n            ['meta_value' => $value],\n            ['id' => $file_meta_id],\n          );\n        } else {\n          $this->wpdb->insert( $this->file_meta, [\n            'meta_key' => $key,\n            'meta_value' => $value,\n            'post_id' => $post_id,\n          ]);\n\n          $file_meta_id = $this->wpdb->insert_id;\n        }\n\n        $this->_delete_file_meta_key_cache($post_id, $key);\n\n        return $file_meta_id;\n      }\n\n      /**\n       * Get all the meta for the file\n       * \n       * @param mixed $meta\n       * @param int $post_id\n       * @return mixed\n       */\n      public function get_file_meta($meta, $post_id) {\n        $sql = \"SELECT meta_key, meta_value FROM $this->file_meta WHERE post_id = %d\";\n        \n        $result = $this->wpdb->get_results( $this->wpdb->prepare($sql, $post_id), ARRAY_A );\n\n        $data = [];\n\n        foreach ($result as $row) {\n          $key = $row['meta_key'];\n          $value = $row['meta_value'];\n\n          if ( is_serialized( $value ) ) { // Don't attempt to unserialize data that wasn't serialized going in.\n            $value = @unserialize( trim( $value ) );\n          }\n\n          $data[$key] = $value;\n        }\n\n        return $data;\n      }\n\n      /**\n       * Get file row ID by file name \n       * \n       * @param string $name\n       * @return int | null\n       */\n      public function remove_non_library_file($name) {\n        return $this->wpdb->delete(\n          $this->files,\n          [\n            'name' => $name, \n            'post_id' => null,\n          ]\n        );\n      }\n\n      /**\n       * Get all non-library files \n       * \n       * @param array $files\n       * @param string $prefix\n       * @return array | null\n       */\n      public function get_non_library_files($files, $prefix = '') {\n        if ( !empty($prefix) ) {\n          $sql = $this->wpdb->prepare(\"SELECT name FROM $this->files WHERE post_id IS NULL AND name LIKE '%s'\", $this->wpdb->esc_like($prefix) . '%');\n        } else {\n          $sql = \"SELECT name FROM $this->files WHERE post_id IS NULL\";\n        }\n\n        return $this->wpdb->get_col($sql);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-dynamic-image-support.php",
    "content": "<?php\n\n/**\n * Dynamic image support\n *\n * Upload image thumbnails generated by your theme and\n * plugins that do not register media objects with the media library.\n *\n * @since 3.3.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n  if (!class_exists('wpCloud\\StatelessMedia\\DynamicImageSupport')) {\n\n    /**\n     * Class DynamicImageSupport\n     *\n     * @package wpCloud\\StatelessMedia\n     */\n    class DynamicImageSupport {\n      use Singleton;\n\n      const ID = 'dynamic-image-support';\n\n      public function __construct() {\n        // On Google App Engine not working\n        if ( apply_filters('wp_stateless_is_app_engine', false) ) {\n          return;\n        }\n\n        $enabled = ud_get_stateless_media()->get( 'sm.dynamic_image_support', false ) == 'true';\n\n        // Legacy setting\n        if (!$enabled) {\n          $enabled = get_option('sm_on_fly', false);\n        }\n\n        if ($enabled) {\n          $this->init_module();\n        }\n      }\n\n      /**\n       * Initialize module\n       */\n      private function init_module() {\n        // Handle any other on fly generated media\n        add_filter('image_make_intermediate_size', array($this, 'handle_on_fly'));\n      }\n\n      /**\n       * Handle images on fly\n       * f6a7dfd9 Anton Korotkov, 2 years ago (September 29th, 2015 6:09am)\n       * @param $file\n       * @return mixed\n       */\n      public function handle_on_fly($file) {\n        $client = ud_get_stateless_media()->get_client();\n        $upload_dir = wp_upload_dir();\n\n        $file_path = str_replace(trailingslashit($upload_dir['path']), '', $file);\n        $file_info = @getimagesize($file);\n        $mimeType = wp_check_filetype($file);\n\n        if ($file_info) {\n          $_metadata = array(\n            'width'  => $file_info[0],\n            'height' => $file_info[1],\n            'object-id' => 'unknown', // we really don't know it\n            'source-id' => md5($file . ud_get_stateless_media()->get('sm.bucket')),\n            'file-hash' => md5($file)\n          );\n        }\n\n        $client->add_media(apply_filters('sm:item:on_fly:before_add', array_filter(array(\n          'name' => $file_path,\n          'absolutePath' => wp_normalize_path($file),\n          'cacheControl' => apply_filters('sm:item:cacheControl', ud_get_stateless_media()->get_default_cache_control(), $_metadata),\n          'contentDisposition' => null,\n          'mimeType' => $mimeType['type'],\n          'metadata' => $_metadata\n        ))));\n\n        return $file;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-errors.php",
    "content": "<?php\n/**\n * Admin Notices Handler\n *\n * @namespace wpCloud\\StatelessMedia\n *\n * This file can be used to bootstrap any of the UD plugins, it essentially requires that you have\n * a core file which will be called after 'plugins_loaded'. In addition, if the core class has\n * 'activate' and 'deactivate' functions, then those will be called automatically by this class.\n */\n\nnamespace wpCloud\\StatelessMedia {\n  \n  if( !class_exists( 'wpCloud\\StatelessMedia\\Errors' ) ) {\n    \n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Errors extends \\UsabilityDynamics\\WP\\Scaffold {\n    \n      /**\n       * Errors\n       *\n       * @used admin_notices\n       * @public\n       * @property $errors\n       * @type array\n       */\n      private $errors = array();\n      \n      /**\n       * Messages\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      private $messages = array();\n\n      /**\n       * Warnings\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      private $warnings = array();\n\n      /**\n       * Notices\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      private $notices = array();\n      \n      /**\n       * Action Links in Footer\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      private $action_links = array(\n        'errors' => null,\n        'notices' => null,\n      );\n\n      /**\n       * Dismiss action link is available or not.\n       *\n       * @var bool\n       */\n      private $dismiss = true;\n      \n      /**\n       *\n       */\n      public function __construct( $args ) {\n        parent::__construct( $args );\n        add_action( 'admin_notices', array( $this, 'admin_notices' ) );\n        add_action( 'wp_ajax_stateless_notice_dismiss', array( $this, 'dismiss_notices' ) );\n        add_action( 'wp_ajax_stateless_enable_notice_button_action', array( $this, 'stateless_enable_notice_button_action' ) );\n      }\n      \n      /**\n       * Prevents adding duplicating messages\n       * Some triggers may happen few times during site load (like 'switch_blog' hook) \n       * adding the same message several times is not necessary\n       *\n       * @param string $collection\n       * @param string $message\n       */\n      private function add_message( &$collection, $message ) {\n        $exiting_keys = array_column($collection, 'key');\n\n        if ( in_array( $message['key'], $exiting_keys ) ) {\n          return;\n        }\n\n        $collection[] = $message;\n      }\n\n      /**\n       * Add new message for admin notices\n       *\n       * @param string $message\n       * @param string $type Values: 'error', 'message', 'warning'\n       * @param string $translate Values: true, false\n       * @author peshkov@UD\n       */\n      public function add( $message, $type = 'error', $translate = true ) {\n        switch( $type ) {\n          case 'error':\n            $this->add_message($this->errors, $message);\n            break;\n          case 'message':\n          case 'warning':\n          case 'notice':\n            if(!is_array($message)){\n              $title = $translate\n                ? sprintf( __( '%s has the following notice:', $this->domain ), esc_html($this->name) )\n                : sprintf( '%s has the following notice:', esc_html($this->name) );\n\n              $message = array( \n                'title' => $title,\n                'message' => $message,\n                'button' => null,\n              );\n            }\n\n            if(empty($message['key'])){\n              $message['key'] = md5( $message['title'] );\n            }\n            $this->add_message($this->notices, $message);\n            break;\n        }\n      }\n      \n      /**\n       * Add footer link to specific ( errors|messages|wanrnings ) block\n       *\n       * @author peshkov@UD\n       */\n      public function add_action_link( $link, $type = 'error' ) {\n        switch( $type ) {\n          case 'error':\n            $this->action_links[ 'errors' ][] = $link;\n            break;\n          case 'message':\n          case 'warning':\n          case 'notice':\n            $this->action_links[ 'notices' ][] = $link;\n            break;\n        }\n      }\n      \n      /**\n       * Determine if errors exist\n       *\n       * @author peshkov@UD\n       */\n      public function has_errors() {\n        return !empty( $this->errors ) ? true : false;\n      }\n      \n      /**\n       * Renders admin notes in case there are errors or notices on bootstrap init\n       *\n       * @author peshkov@UD\n       */\n      public function admin_notices() {\n        global $wp_version;\n\n        wp_enqueue_style(\"stateless-error-style\", ud_get_stateless_media()->path('static/styles/error-notice.css'));\n        //enqueue dismiss js for ajax requests\n        $script_path = \\UsabilityDynamics\\WP\\Utility::path( 'static/scripts/ud-dismiss.js', 'url' );\n        wp_enqueue_script( \"sateless-error-notice-js\", ud_get_stateless_media()->path( 'static/scripts/error-notice.js', 'url' ), array( 'jquery' ) );\n        wp_enqueue_script( \"ud-dismiss\", $script_path, array( 'jquery' ) );\n        wp_localize_script( \"ud-dismiss\", \"_ud_vars\", array(\n            \"ajaxurl\" => admin_url( 'admin-ajax.php' ),\n        ));\n        wp_localize_script( \"sateless-error-notice-js\", \"stateless_error_notice_vars\", array(\n          \"dismiss_nonce\" => wp_create_nonce( 'stateless_notice_dismiss' ),\n          \"enable_action_nonce\" => wp_create_nonce( 'stateless_enable_notice_button_action' ),\n        ));\n\n        //** Don't show the message if the user has no enough permissions. */\n        if ( ! function_exists( 'wp_get_current_user' ) ) {\n          require_once( ABSPATH . 'wp-includes/pluggable.php' );\n        }\n        \n        $default_show = true;\n\n        if (\n          empty( $this->args['type'] ) ||\n          ( $this->args['type'] == 'plugin' && !current_user_can( 'activate_plugins' ) ) ||\n          ( $this->args['type'] == 'theme' && !current_user_can( 'switch_themes' ) )\n        ) {\n          $default_show = false;\n        }\n\n        //** Don't show the message if on a multisite and the user isn't a super user. */\n        if ( is_multisite() && ! is_super_admin() ) {\n          $default_show = false;\n        }\n\n        $errors = apply_filters( 'ud:errors:admin_notices', $this->errors, $this->args );\n        $notices = apply_filters( 'stateless:notices:admin_notices', $this->notices, $this->args );\n\n        //** Errors Block */\n        if( $default_show && !empty( $errors ) && is_array( $errors ) ) {\n          $message = '<ul style=\"none;\"><li>' . implode( '</li><li>', $errors ) . '</li></ul>';\n          $data = array(\n            'title' => sprintf( __( '%s is not active due to following errors:', $this->domain ), esc_html($this->name) ),\n            'class' => 'error',\n            'message' => $message,\n            'action_links' => !empty($this->action_links[ 'errors' ])?$this->action_links[ 'errors' ]:null,\n          );\n          \n          include ud_get_stateless_media()->path( '/static/views/error-notice.php', 'dir' );\n        }\n\n        $has_notice = false;\n        //** Determine if warning has been dismissed */\n        if ( ! empty( $notices ) && is_array( $notices ) ) {\n          //** Warnings Block */\n          foreach ($notices as $notice ) {\n            if ( get_option( 'dismissed_notice_' . $notice['key'] )){\n              continue;\n            }\n\n            // Check additional capabilities\n            $capability = isset( $notice['capability'] ) && !empty( $notice['capability'] ) ? $notice['capability'] : null;\n\n            if ( ( !$default_show && empty($capability) ) || ( !empty($capability) && !current_user_can($capability) ) ) {\n              continue;\n            }\n\n            // Additional HTML classes\n            $classes = [];\n\n            if ( isset($notice['classes']) ) {\n              $classes = $notice['classes'];\n\n              if ( !is_array($classes) ) {\n                $classes = [$classes];\n              }\n            }\n\n            $classes[] = 'notice';\n\n            $data = wp_parse_args($notice, array(\n              'title' => '',\n              'class' => implode(' ', $classes),\n              'message' => '',\n              'button' => '',\n              'button_link' => '#',\n              'key' => '',\n              'action_links' => $this->action_links[ 'notices' ],\n              'dismiss' => true,\n            ));\n            \n            $button_capability = isset( $notice['button_capability'] ) && !empty( $notice['button_capability'] ) ? $notice['button_capability'] : null;\n            if ( !empty($button_capability) && !current_user_can($button_capability) ) {\n              $data['button'] = '';\n            }\n\n            include ud_get_stateless_media()->path( '/static/views/error-notice.php', 'dir' );\n            \n            $has_notice = true;\n          }\n        }\n\n      }\n\n      /**\n       * dismiss the notice ajax callback\n       * @throws \\Exception\n       */\n      public function dismiss_notices() {\n        check_ajax_referer('stateless_notice_dismiss');\n\n        if ( !is_user_logged_in() ) {\n          wp_send_json_error( array( 'error' => __( 'You are not allowed to do this action.', $this->domain ) ) );\n        }\n\n        $response = array(\n          'success' => '0',\n          'error' => __( 'There was an error in request.', $this->domain ),\n        );\n\n        $error = false;\n\n        $option_key = isset($_POST['key']) ? sanitize_key($_POST['key']) : '';\n\n        if ( strpos($option_key, 'dismissed_') !== 0 ) {\n          $response['error'] = __( 'Invalid key', $this->domain );\n          $error = true;\n        }\n\n        if ( !$error && update_option( $option_key, time() ) ) {\n          do_action('wp_stateless_notice_dismissed', $option_key);\n\n          $response['success'] = '1';\n          $response['error'] = null;\n        }\n\n        wp_send_json( $response );\n      }\n\n      /**\n       * Action for the stateless_enable_notice_button_action ajax callback\n       * @throws \\Exception\n       */\n      public function stateless_enable_notice_button_action(){\n        check_ajax_referer('stateless_enable_notice_button_action');\n\n        if ( !is_user_logged_in() ) {\n          wp_send_json_error( array( 'error' => __( 'You are not allowed to do this action.', $this->domain ) ) );\n        }\n\n        $response = array(\n          'success' => '1',\n        );\n        \n        $error = false;\n\n        if( empty($_POST['key']) ) {\n          $response['success'] = '0';\n          $response['error'] = __( 'Invalid key', $this->domain );\n        }\n        else{\n          $option_key = sanitize_key($_POST['key']);\n          $compatibility = Module::get_module($option_key);\n          if(!empty($compatibility['self']) && is_callable(array($compatibility['self'], 'enable_compatibility'))){\n            $response['success'] = $compatibility['self']->enable_compatibility();\n          }\n        }\n        \n        wp_send_json( $response );\n      }\n\n      /**\n       * Check dismiss notice timestamp if greater than 24 hrs\n       *\n       * @param string $time\n       *\n       * @return bool\n       */\n      public function check_dismiss_time( $time = '' ) {\n        if( empty( $time ) ) {\n          return true;\n        }\n        $current_time = time();\n        $diff = $current_time - 86400;\n        if ( $diff > (int)$time ) {\n          return true;\n        }\n        return false;\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "lib/classes/class-google-app-engine.php",
    "content": "<?php\n\n/**\n * Google App Engine Compatibility\n *\n * Detects is are running on Google App Engine, shows message and automatically enables 'Stateless' mode\n *\n * @since 3.3.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n  if (!class_exists('wpCloud\\StatelessMedia\\AppEngine')) {\n\n    /**\n     * Class AppEngine\n     *\n     * @package wpCloud\\StatelessMedia\n     */\n    class AppEngine {\n      use Singleton;\n\n      public function __construct() {\n        add_filter('wp_stateless_is_app_engine', array($this, 'is_app_engine'));\n\n        add_action('admin_init', array($this, 'add_message'));\n        add_action('wp_stateless_settings_refresh', array($this, 'after_settings_refresh'));\n        \n        add_filter('site_option_sm_mode', [$this, 'override_stateless_mode']);\n        add_filter('option_sm_mode', [$this, 'override_stateless_mode']);\n      }\n\n      /**\n       * Checks if we are running on Google App Engine\n       * \n       * @return bool\n       */\n      public function is_app_engine() {\n        return isset($_SERVER[\"GAE_VERSION\"]);\n      }\n\n      /**\n       * Override 'sm_mode' option to 'stateless' if we are running on Google App Engine\n       * Do not override in Disabled mode\n       * \n       * @param string $value\n       * @return string\n       */\n      public function override_stateless_mode($value) {\n        // We load too early to use 'ud_get_stateless_media()->is_mode' or 'ud_get_stateless_media()->get'\n        if ( $value === 'disabled' ) {\n          return $value;\n        }\n\n        if ( apply_filters('wp_stateless_is_app_engine', false) ) {\n          return 'stateless';\n        }\n\n        return $value;\n      }\n\n      /**\n       * Make 'sm_mode' option readonly if we are running on Google App Engine\n       * \n       * @param \\wpCloud\\StatelessMedia\\Settings $settingsObj\n       */\n      public function after_settings_refresh($settingsObj) {\n        if ( !is_a($settingsObj, 'wpCloud\\StatelessMedia\\Settings') ) {\n          return;\n        }\n\n        if ( !apply_filters('wp_stateless_is_app_engine', false) ) {\n          return;\n        }\n\n        $settingsObj->set('sm.readonly.mode', 'app_engine'); \n      }\n\n      /**\n       * Add admin message if we are running on Google App Engine\n       */\n      public function add_message() {\n        if ( !apply_filters('wp_stateless_is_app_engine', false) ) {\n          return;\n        }\n\n        ud_get_stateless_media()->errors->add(array(\n          'key' => 'stateless_app_engine_auto_mode',\n          'button' => 'View Settings',\n          'button_link' => admin_url('upload.php?page=stateless-settings'),\n          'title' => sprintf(__('Stateless Mode Enabled Automatically.', ud_get_stateless_media()->domain)),\n          'message' => sprintf(__('We detected that you are running Google App Engine. This platform does not allow you to save files locally,\n                              so we have automatically enabled <b>Stateless</b> mode.  \n                              In this mode, your files will only be stored on Google Cloud Storage.', ud_get_stateless_media()->domain)\n                              ),\n        ), 'notice');\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-gs-client.php",
    "content": "<?php\n\n/**\n * GS API Client\n *\n * @since 0.2.0\n * @author peshkov@UD\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  use wpCloud\\StatelessMedia\\Google_Client;\n  use Google_Service_Storage;\n  use WP_Error;\n  use Exception;\n  use Google_Service_Storage_ObjectAccessControl;\n  use Google_Auth_AssertionCredentials;\n\n  if (!class_exists('wpCloud\\StatelessMedia\\GS_Client')) {\n\n    final class GS_Client {\n\n      /**\n       * Singleton object\n       *\n       * @var \\wpCloud\\StatelessMedia\\GS_Client\n       */\n      private static $instance;\n\n      /**\n       * Google Client manager\n       *\n       * @var \\wpCloud\\StatelessMedia\\Google_Client\\Google_Client $client\n       */\n      public $client;\n\n      /**\n       * Google Storage Service manager\n       *\n       * @var \\Google_Service_Storage $service\n       */\n      public $service;\n\n      /**\n       * Google Storage Bucket\n       *\n       * @var\n       */\n      private $bucket;\n\n      /**\n       * @var\n       */\n      private $temp_objects = array();\n\n      /**\n       * @var\n       */\n      private $key_json = '';\n\n      /**\n       * Constructor.\n       * Must not be called directly.\n       *\n       * @param $args\n       * @author peshkov@UD\n       */\n      protected function __construct($args) {\n        global $current_blog;\n        $this->bucket = $args['bucket'];\n        $this->key_json = json_decode($args['key_json'], 1);\n\n        // May be Loading Google SDK....\n        if (!class_exists('\\Google\\Client')) {\n          include_once(ud_get_stateless_media()->path('lib/Google/vendor/autoload.php', 'dir'));\n        }\n\n        /* Initialize our client */\n        $this->client = new \\Google\\Client();\n\n        // We're supporting Google SDK 1.X version since\n        // The plugins which also are using Google SDK may have its old version\n        // what may cause conflicts\n        //\n        if (version_compare($this->client->getLibraryVersion(), '2.0', '<')) {\n          // We should set the warning about potential issue\n          // If Google SDK has different version with already included\n          $this->_setWarning();\n\n          $wp_upload_dir = wp_upload_dir();\n          $dir = $wp_upload_dir['path'];\n          $filename = md5(wp_generate_password()) . '.tmp';\n          $path = wp_normalize_path($dir . '/' . $filename);\n          @file_put_contents($path, json_encode($this->key_json));\n          $cred = $this->client->loadServiceAccountJson($path, ['https://www.googleapis.com/auth/devstorage.full_control']);\n          $this->client->setAssertionCredentials($cred);\n          if ($this->client->getAuth()->isAccessTokenExpired()) {\n            $this->client->getAuth()->refreshTokenWithAssertion($cred);\n          }\n          @unlink($path);\n        } else {\n          // May be delete warning transient if it was set\n          $this->_deleteWarning();\n          $this->client->setAuthConfig($this->key_json);\n        }\n\n        if (isset($current_blog) && isset($current_blog->domain)) {\n          $this->client->setApplicationName($current_blog->domain);\n        } else {\n          $this->client->setApplicationName(urlencode(str_replace(array('http://', 'https://'), '', get_bloginfo('url'))));\n        }\n\n        $this->client->setScopes(['https://www.googleapis.com/auth/devstorage.full_control']);\n\n        // May be Loading Google SDK. Because some bad plugins may load their Google SDK with not included Google_Service_Storage.\n        if (!class_exists('Google_Service_Storage')) {\n          include_once(ud_get_stateless_media()->path('lib/Google/vendor/autoload.php', 'dir'));\n        }\n\n        /* Now, Initialize our Google Storage Service */\n        $this->service = new \\Google\\Service\\Storage($this->client);\n      }\n\n      /**\n       * Wrapper for listObjects()\n       */\n      public function list_objects($options = array()) {\n\n        $options = wp_parse_args($options, array(\n          'delimiter'  => '',\n          'maxResults' => 1000,\n          'pageToken'  => '',\n          'prefix'     => '',\n          'projection' => 'noAcl',\n          'versions'   => false\n        ));\n\n        return $this->service->objects->listObjects($this->bucket, $options);\n      }\n\n      /**\n       * List all items page by page of maxResults\n       * @param $bucket\n       * @param array $options\n       * @return mixed\n       */\n      public function list_all_objects($options = array()) {\n\n        $options = wp_parse_args($options, array(\n          'delimiter'  => '',\n          'maxResults' => 1000,\n          'pageToken'  => '',\n          'prefix'     => '',\n          'projection' => 'noAcl',\n          'versions'   => false\n        ));\n\n        $response = $this->service->objects->listObjects($this->bucket, $options);\n\n        $this->temp_objects = array_merge($this->temp_objects, $response->getItems());\n\n        if (!empty($response->nextPageToken)) {\n          $options['pageToken'] = $response->nextPageToken;\n          return $this->list_all_objects($this->bucket, $options);\n        } else {\n          return $this->temp_objects;\n        }\n      }\n\n      /**\n       * Add/Update Media Object to Bucket\n       * \n       * https://stackoverflow.com/questions/26872851/resumable-uploading-to-google-cloud-storage-using-php-api\n       * \n       * @author peshkov@UD\n       * @param array $args\n       * @return bool\n       */\n      public function add_media($args = array()) {\n        try {\n\n          set_time_limit(0);\n\n          $args = wp_parse_args($args, array(\n            'use_root' => true,\n            'force' => false,\n            'name' => false,\n            'absolutePath' => false,\n            'mimeType' => 'image/jpeg',\n            'metadata' => array(),\n            'is_webp' => '',\n            'skipLocalCheck' => false,\n          ));\n\n          /* Be sure file exists. */\n          if (!$args['skipLocalCheck'] && !file_exists($args['absolutePath'])) {\n            return new \\WP_Error('sm_error', __('Unable to locate file on disk', ud_get_stateless_media()->domain));\n          }\n\n          $object_id = isset($args['metadata']['object-id']) ? $args['metadata']['object-id'] : (isset($args['metadata']['child-of']) ? $args['metadata']['child-of'] : \"\");\n          $object_size = isset($args['metadata']['size']) ? $args['metadata']['size'] : \"\";\n\n          $args['name'] = apply_filters('wp_stateless_file_name', $args['name'], $args['use_root'], $object_id, $object_size);\n          $args = apply_filters('wp_stateless_add_media_args', $args);\n          $name = $args['name'];\n\n          // If media exists we just return it\n          if (!$args['force'] && $media = $this->media_exists($name)) {\n            if ($media->getCacheControl() != $args['cacheControl']) {\n              $media->setCacheControl($args['cacheControl']);\n              $media = $this->service->objects->patch($this->bucket, $name, $media);\n            }\n            return get_object_vars($media);\n          }\n\n          $media = new \\Google\\Service\\Storage\\StorageObject();\n          $media->setName($name);\n          $media->setMetadata($args['metadata']);\n\n          if (isset($args['cacheControl'])) {\n            $media->setCacheControl($args['cacheControl']);\n          }\n\n          if (isset($args['contentEncoding'])) {\n            $media->setContentEncoding($args['contentEncoding']);\n          }\n\n          if (isset($args['contentDisposition'])) {\n            $media->setContentDisposition($args['contentDisposition']);\n          }\n\n          // If chunk size is defined, we assume user needs the file to be sent by chunks\n          // Otherwise, we send it directly\n          if (defined('WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE') && is_int(WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE)) {\n            $this->client->setDefer(true);\n\n            $file_size = filesize($args['absolutePath']);\n            $filetoupload = array('name' => $name, 'uploadType' => 'resumable');\n            $request = $this->service->objects->insert($this->bucket, $media, $filetoupload);\n            $uploader = new \\Google_Http_MediaFileUpload($this->client, $request, $args['mimeType'], null, true, WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE);\n            $uploader->setFileSize($file_size);\n            $handle = fopen($args['absolutePath'], \"rb\");\n\n            $status = false;\n            while (!$status && !feof($handle)) {\n              $chunk = fread($handle, WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE);\n              $status = $uploader->nextChunk($chunk);\n            }\n\n            $media = false;\n            if ($status != false) {\n              $media = $status;\n            }\n\n            fclose($handle);\n            // Reset to the client to execute requests immediately in the future.\n            $this->client->setDefer(false);\n          } else {\n            $mediaOptions = array(\n              'data' => file_get_contents($args['absolutePath']),\n              'uploadType' => 'media',\n              'mimeType' => $args['mimeType'],\n            );\n\n            if ( !defined('WP_STATELESS_SKIP_ACL_SET') || !WP_STATELESS_SKIP_ACL_SET) {\n              $mediaOptions['predefinedAcl'] = 'bucketOwnerFullControl';\n            }\n\n            $media = $this->service->objects->insert($this->bucket, $media, array_filter($mediaOptions));\n          }\n\n          if ( !defined('WP_STATELESS_SKIP_ACL_SET') || !WP_STATELESS_SKIP_ACL_SET) {\n            $this->mediaInsertACL($name, $media, $args);\n          }\n        } catch (Exception $e) {\n          return new WP_Error('sm_error', $e->getMessage());\n        }\n        return get_object_vars($media);\n      }\n\n      /**\n       * Update Object ACL\n       */\n      public function mediaInsertACL($name, $media = array(), $agrs = array()) {\n        /* Make Media Public READ for all on success */\n        if (!empty($name)) {\n          $acl = new \\Google\\Service\\Storage\\ObjectAccessControl();\n          $acl->setEntity('allUsers');\n          $acl->setRole('READER');\n          $acl = apply_filters('wp_stateless_media_acl', $acl, $name, $media, $agrs);\n          $this->service->objectAccessControls->insert($this->bucket, $name, $acl);\n        }\n      }\n\n      /**\n       * Get or save media file\n       * \n       * @param $path\n       * @param bool $save\n       * @param bool $save_path\n       * @return bool|\\Google_Service_Storage_StorageObject|int\n       */\n      public function get_media($path, $save = false, $save_path = false) {\n        try {\n          $media = $this->service->objects->get($this->bucket, $path);\n        } catch (\\Exception $e) {\n          return false;\n        }\n\n        if (empty($media->id)) return false;\n\n        if ($save && $save_path) {\n          if (!file_exists($_dir = dirname($save_path))) {\n            wp_mkdir_p($_dir);\n          }\n          return $this->client->getHttpClient()->get($media->getMediaLink(), ['sink' => $save_path])->getStatusCode();\n        }\n\n        return $media;\n      }\n\n      /**\n       * get or save media file\n       * @param $path\n       * @param bool $save\n       * @param bool $save_path\n       * @return bool|\\Google_Service_Storage_StorageObject|int\n       */\n      public function copy_media($path, $new_path) {\n        try {\n          $media = $this->service->objects->get($this->bucket, $path);\n          $media = $this->service->objects->copy($this->bucket, $path, $this->bucket, $new_path, $media);\n          $this->mediaInsertACL($new_path, $media);\n        } catch (\\Exception $e) {\n          return false;\n        }\n\n        if (empty($media->id)) return false;\n\n        return $media;\n      }\n\n      /**\n       * get or save media file\n       * @param $path\n       * @param bool $save\n       * @param bool $save_path\n       * @return bool|\\Google_Service_Storage_StorageObject|int\n       */\n      public function move_media($path, $new_path) {\n        try {\n          $media = $this->copy_media($path, $new_path);\n          $this->remove_media($path);\n        } catch (\\Exception $e) {\n          return false;\n        }\n\n        if (empty($media->id)) return false;\n\n        return $media;\n      }\n\n      /**\n       * Check if media exists\n       * @param $path\n       * @return bool|object\n       */\n      public function media_exists($path) {\n        try {\n          $media = $this->service->objects->get($this->bucket, $path);\n          // Here we wanted to check if access allowed, but noticed it actually sets this ACL... Leaving it as is. @author korotkov@ud\n          $this->service->objectAccessControls->get($this->bucket, $path, 'allUsers');\n        } catch (\\Exception $e) {\n          return false;\n        }\n\n        if (empty($media->id)) return false;\n        return $media;\n      }\n\n      /**\n       * Fired for every file remove action\n       *\n       * @author peshkov@UD\n       * @param string $name\n       * @param string $id\n       * @param boolean $use_root\n       * @param string $size\n       * @param boolean $is_webp\n       * @return bool\n       */\n      public function remove_media($name, $id = \"\", $use_root = true, $size = \"\", $is_webp = false) {\n        try {\n          $name = apply_filters('wp_stateless_file_name', $name, $use_root, $id, $size);\n          if ($is_webp && substr($name, -4) !=  \"webp\") $name .= \".webp\";\n\n          $this->service->objects->delete($this->bucket, $name);\n        } catch (Exception $e) {\n          return new WP_Error('sm_error', $e->getMessage());\n        }\n        return true;\n      }\n\n      /**\n       * Tests connection to Google Storage\n       * by trying to get passed bucket's data.\n       *\n       * @author peshkov@UD\n       */\n      public function is_connected() {\n        try {\n          $this->service->buckets->get($this->bucket);\n        } catch (Exception $e) {\n          return $e;\n        }\n        return true;\n      }\n\n      /**\n       * Determine if instance already exists and Return Instance\n       *\n       * @param array $args\n       *\n       * $args\n       * @param string client_id\n       * @param string service_account_name\n       * @param string key_file_path\n       *\n       * @author peshkov@UD\n       * @return \\wpCloud\\StatelessMedia\\GS_Client\n       */\n      public static function get_instance($args) {\n        if (null === self::$instance) {\n\n          try {\n\n            if (empty($args['bucket'])) {\n              throw new Exception(__('<b>Bucket</b> parameter must be provided.'));\n            }\n\n            $json = \"{}\";\n\n            if (!empty($args['key_json'])) {\n              $json = json_decode($args['key_json']);\n            }\n\n            if (!$json || !property_exists($json, 'private_key')) {\n              throw new Exception(__('<b>Service Account JSON</b> is invalid.'));\n            }\n\n            self::$instance = new self($args);\n          } catch (Exception $e) {\n            return new WP_Error('sm_error', $e->getMessage());\n          }\n        }\n        return self::$instance;\n      }\n\n      /**\n       * Set warning about potential conflict with Google SDK\n       *\n       * @since 2.0.1\n       */\n      private function _setWarning() {\n\n        $reflector = new \\ReflectionClass('Google_Client');\n        $pluginBasename = wp_normalize_path(plugin_basename($reflector->getFileName()));\n\n        // Check if get_plugins() function exists. This is required on the front end of the\n        // site, since it is in a file that is normally only loaded in the admin.\n        if (!function_exists('get_plugins')) {\n          require_once ABSPATH . 'wp-admin/includes/plugin.php';\n        }\n\n        $pluginBasenameParts = explode('/', $pluginBasename);\n        $pluginName = __(\"UNDEFINED\", ud_get_stateless_media()->domain);\n\n        foreach (get_plugins() as $path => $meta) {\n          if (strpos($path, trailingslashit($pluginBasenameParts[0])) === 0) {\n            $pluginName = $meta['Name'];\n          }\n        };\n\n        $error = sprintf(\n          __(\"%s plugin may have potential Google SDK version conflicts with %s plugin. %s is using Google SDK %s, when %s loads old Google SDK version %s.\", ud_get_stateless_media()->domain),\n          \"<b>\" . 'WP-Stateless' . \"</b>\",\n          \"<b>\" . $pluginName . \"</b>\",\n          'WP-Stateless',\n          \"<b>v2.0</b>\",\n          $pluginName,\n          \"<b>v\" . \\Google\\Client::LIBVER . \"</b>\"\n        );\n\n        set_transient(\"wp_stateless_google_sdk_conflict\", $error);\n      }\n\n      /**\n       * Removes Warning if it exists\n       *\n       */\n      private function _deleteWarning() {\n        delete_transient(\"wp_stateless_google_sdk_conflict\");\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-gs-stream-wrapper.php",
    "content": "<?php\n/* copied from lib\\Google\\vendor\\google\\cloud-storage\\src\\StreamWrapper.php */\n\n/**\n * A streamWrapper implementation for handling `gs://bucket/path/to/file.jpg`.\n * Note that you can only open a file with mode 'r', 'rb', 'rb', 'w', 'wb', or 'wt'.\n *\n * See: http://php.net/manual/en/class.streamwrapper.php\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  use Google\\Cloud\\Storage\\StorageClient;\n\n  if (!class_exists('wpCloud\\StatelessMedia\\StreamWrapper')) {\n    class StreamWrapper extends \\Google\\Cloud\\Storage\\StreamWrapper {\n      /**\n       * @var string Protocol used to open this stream\n       */\n      private $protocol;\n\n      /**\n       * @var Bucket Reference to the bucket the opened file\n       *      lives in or will live in.\n       */\n      private $bucket;\n\n      /**\n       * @var string Name of the file opened by this stream.\n       */\n      private $file;\n\n      /**\n       * Callback handler for retrieving information about a file\n       *\n       * @param string $path The URI to the file\n       * @param int $flags Bitwise mask of options\n       * @return array|bool\n       */\n      public function url_stat($path, $flags) {\n        try {\n          $this->_openPath($path);\n\n          // if root dir\n          if (empty($this->file)) {\n            $stats = [];\n            // equivalent to 40777 and 40444 in octal\n            if ($is_writable = $this->bucket->isWritable()) {\n              $stats['mode'] = $is_writable\n                ? self::DIRECTORY_WRITABLE_MODE\n                : self::DIRECTORY_READABLE_MODE;\n              return $this->makeStatArray($stats);\n            }\n          }\n\n          return parent::url_stat($path, $flags);\n        } catch (\\Exception $e) {\n          return false;\n        }\n      }\n\n      /**\n       * Parse the URL and set protocol, filename and bucket.\n       *\n       * @param  string $path URL to open\n       * @return StorageClient\n       */\n      private function _openPath($path) {\n        $url = (array) parse_url($path) + [\n          'scheme' => '',\n          'path' => '',\n          'host' => ''\n        ];\n        $this->protocol = $url['scheme'];\n        $this->file = ltrim($url['path'], '/');\n        $client = self::getClient($this->protocol);\n        $this->bucket = $client->bucket($url['host']);\n        return $client;\n      }\n\n      /**\n       * Register a StreamWrapper for reading and writing to Google Storage\n       *\n       * @param StorageClient $client The StorageClient configuration to use.\n       * @param string $protocol The name of the protocol to use. **Defaults to**\n       *        `gs`.\n       * @throws \\RuntimeException\n       */\n      public static function register(StorageClient $client, $protocol = null) {\n        $protocol = $protocol ?: self::DEFAULT_PROTOCOL;\n        // we are calling parents register function because only it can set parents pirvate ::$clients property.\n        // we are only calling it to set $clients property.\n        parent::register($client, $protocol);\n        // unregistering the wrapper so that we can register wrapper with our class.\n        stream_wrapper_unregister($protocol);\n        // registering wrapper with our wpCloud\\StatelessMedia\\StreamWrapper \n        return stream_wrapper_register($protocol, StreamWrapper::class, STREAM_IS_URL);\n      }\n\n      /**\n       * Returns the associative array that a `stat()` response expects using the\n       * provided stats. Defaults the remaining fields to 0.\n       *\n       * @param  array $stats Sparse stats entries to set.\n       * @return array\n       */\n      private function makeStatArray($stats) {\n        return array_merge(\n          array_fill_keys([\n            'dev',\n            'ino',\n            'mode',\n            'nlink',\n            'uid',\n            'gid',\n            'rdev',\n            'size',\n            'atime',\n            'mtime',\n            'ctime',\n            'blksize',\n            'blocks'\n          ], 0),\n          $stats\n        );\n      }\n\n      /**\n       * @param $path\n       * @param $option\n       * @param $value\n       * @return bool\n       */\n      public function stream_metadata($path, $option, $value) {\n        return false;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-helper.php",
    "content": "<?php\n\n/**\n * Helper.\n *\n * @since 3.3.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  class Helper {\n\n    /**\n     * Checks theme name against the current theme or it's parent.\n     */\n    public static function is_theme_name($theme_name) {\n      $theme = wp_get_theme();\n\n      if ($theme->Name == $theme_name) {\n        return true;\n      }\n  \n      $parent_theme = $theme->parent();\n      if ( is_a($parent_theme, 'WP_Theme') && $parent_theme->Name == $theme_name ) {\n        return true;\n      }\n  \n      return false;\n    }\n\n    /**\n     * Checks if plugin is active.\n     */\n    public static function get_active_plugins() {\n      $active_plugins = [];\n\n      // If multisite then check if plugin is network active\n      if ( is_multisite() ) {\n        $active_plugins = (array)get_site_option('active_sitewide_plugins', []);\n        $active_plugins = array_keys($active_plugins);\n\n        // If we are in network admin then return, unless it will get data from main site.\n        if ( is_network_admin() ) {\n          return $active_plugins;\n        }\n      }\n\n      return array_merge(\n        $active_plugins, \n        (array)get_option('active_plugins', [])\n      );\n    }\n  \n    /**\n     * Convert array to objects.\n     * \n     * @param array $array\n     * \n     * @return array\n     */\n    public static function array_of_objects($array) {\n      return array_map(function($item) {\n        return (object)$item;\n      }, $array);\n    }\n\n    /**\n     * Writes to error log.\n     * \n     * @param mixed $data\n     */\n    public static function log($data, $json = false) {\n      if (!WP_DEBUG) {\n        return;\n      }\n\n      if ( is_array($data) || is_object($data) || !is_string($data) ) {\n        if ( $json ) {\n          error_log( json_encode($data) );\n        } else {\n          error_log( print_r($data, true) );\n        }\n\n        return;\n      } \n      \n      error_log($data);\n    }\n\n    /**\n     * Writes debug to error log.\n     * \n     * @param mixed $data\n     */\n    public static function debug($data, $json = false) {\n      self::log($data, $json);\n    }\n  }\n}"
  },
  {
    "path": "lib/classes/class-logger.php",
    "content": "<?php\n/**\n * Copyright 2010-2013 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nnamespace wpCloud\\StatelessMedia {\n\n  if( !class_exists( 'wpCloud\\StatelessMedia\\Logger' ) ) {\n\n      /**\n       * Server Side Chrome PHP debugger class\n       *\n       * @package ChromePhp\n       * @author Craig Campbell <iamcraigcampbell@gmail.com>\n       */\n    class Logger {\n      /**\n       * @var string\n       */\n      const VERSION = '4.1.0';\n\n      /**\n       * @var string\n       */\n      const HEADER_NAME = 'X-ChromeLogger-Data';\n\n      /**\n       * @var string\n       */\n      const BACKTRACE_LEVEL = 'backtrace_level';\n\n      /**\n       * @var string\n       */\n      const LOG = 'log';\n\n      /**\n       * @var string\n       */\n      const WARN = 'warn';\n\n      /**\n       * @var string\n       */\n      const ERROR = 'error';\n\n      /**\n       * @var string\n       */\n      const GROUP = 'group';\n\n      /**\n       * @var string\n       */\n      const INFO = 'info';\n\n      /**\n       * @var string\n       */\n      const GROUP_END = 'groupEnd';\n\n      /**\n       * @var string\n       */\n      const GROUP_COLLAPSED = 'groupCollapsed';\n\n      /**\n       * @var string\n       */\n      const TABLE = 'table';\n\n      /**\n       * @var string\n       */\n      protected $_php_version;\n\n      /**\n       * @var int\n       */\n      protected $_timestamp;\n\n      /**\n       * @var array\n       */\n      protected $_json = array(\n        'version' => self::VERSION,\n        'columns' => array( 'log', 'backtrace', 'type' ),\n        'rows' => array()\n      );\n\n      /**\n       * @var array\n       */\n      protected $_backtraces = array();\n\n      /**\n       * @var bool\n       */\n      protected $_error_triggered = false;\n\n      /**\n       * @var array\n       */\n      protected $_settings = array(\n        self::BACKTRACE_LEVEL => 1\n      );\n\n      /**\n       * @var ChromePhp\n       */\n      protected static $_instance;\n\n      /**\n       * Prevent recursion when working with objects referring to each other\n       *\n       * @var array\n       */\n      protected $_processed = array();\n\n      /**\n       * constructor\n       */\n      private function __construct() {\n        $this->_php_version = phpversion();\n        $this->_timestamp = $this->_php_version >= 5.1 ? sanitize_text_field($_SERVER[ 'REQUEST_TIME' ]) : time();\n        $this->_json[ 'request_uri' ] = sanitize_text_field($_SERVER[ 'REQUEST_URI' ]);\n      }\n\n      /**\n       * gets instance of this class\n       *\n       * @return ChromePhp\n       */\n      public static function getInstance() {\n        if( self::$_instance === null ) {\n          self::$_instance = new self();\n        }\n        return self::$_instance;\n      }\n\n      /**\n       * logs a variable to the console\n       *\n       * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n       * @return void\n       */\n      public static function log() {\n        $args = func_get_args();\n        return self::_log( '', $args );\n      }\n\n      /**\n       * logs a warning to the console\n       *\n       * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n       * @return void\n       */\n      public static function warn() {\n        $args = func_get_args();\n        return self::_log( self::WARN, $args );\n      }\n\n      /**\n       * logs an error to the console\n       *\n       * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n       * @return void\n       */\n      public static function error() {\n        $args = func_get_args();\n        return self::_log( self::ERROR, $args );\n      }\n\n      /**\n       * sends a group log\n       *\n       * @param string value\n       */\n      public static function group() {\n        $args = func_get_args();\n        return self::_log( self::GROUP, $args );\n      }\n\n      /**\n       * sends an info log\n       *\n       * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n       * @return void\n       */\n      public static function info() {\n        $args = func_get_args();\n        return self::_log( self::INFO, $args );\n      }\n\n      /**\n       * sends a collapsed group log\n       *\n       * @param string value\n       */\n      public static function groupCollapsed() {\n        $args = func_get_args();\n        return self::_log( self::GROUP_COLLAPSED, $args );\n      }\n\n      /**\n       * ends a group log\n       *\n       * @param string value\n       */\n      public static function groupEnd() {\n        $args = func_get_args();\n        return self::_log( self::GROUP_END, $args );\n      }\n\n      /**\n       * sends a table log\n       *\n       * @param string value\n       */\n      public static function table() {\n        $args = func_get_args();\n        return self::_log( self::TABLE, $args );\n      }\n\n      /**\n       * internal logging call\n       *\n       * @param string $type\n       * @return void\n       */\n      protected static function _log( $type, array $args ) {\n        // nothing passed in, don't do anything\n        if( count( $args ) == 0 && $type != self::GROUP_END ) {\n          return;\n        }\n\n        $logger = self::getInstance();\n\n        $logger->_processed = array();\n\n        $logs = array();\n        foreach( $args as $arg ) {\n          $logs[] = $logger->_convert( $arg );\n        }\n\n        $backtrace = debug_backtrace( false );\n        $level = $logger->getSetting( self::BACKTRACE_LEVEL );\n\n        $backtrace_message = 'unknown';\n        if( isset( $backtrace[ $level ][ 'file' ] ) && isset( $backtrace[ $level ][ 'line' ] ) ) {\n          $backtrace_message = $backtrace[ $level ][ 'file' ] . ' : ' . $backtrace[ $level ][ 'line' ];\n        }\n\n        $logger->_addRow( $logs, $backtrace_message, $type );\n      }\n\n      /**\n       * converts an object to a better format for logging\n       *\n       * @param Object\n       * @return array\n       */\n      protected function _convert( $object ) {\n        // if this isn't an object then just return it\n        if( !is_object( $object ) ) {\n          return $object;\n        }\n\n        //Mark this object as processed so we don't convert it twice and it\n        //Also avoid recursion when objects refer to each other\n        $this->_processed[] = $object;\n\n        $object_as_array = array();\n\n        // first add the class name\n        $object_as_array[ '___class_name' ] = get_class( $object );\n\n        // loop through object vars\n        $object_vars = get_object_vars( $object );\n        foreach( $object_vars as $key => $value ) {\n\n          // same instance as parent object\n          if( $value === $object || in_array( $value, $this->_processed, true ) ) {\n            $value = 'recursion - parent object [' . get_class( $value ) . ']';\n          }\n          $object_as_array[ $key ] = $this->_convert( $value );\n        }\n\n        $reflection = new ReflectionClass( $object );\n\n        // loop through the properties and add those\n        foreach( $reflection->getProperties() as $property ) {\n\n          // if one of these properties was already added above then ignore it\n          if( array_key_exists( $property->getName(), $object_vars ) ) {\n            continue;\n          }\n          $type = $this->_getPropertyKey( $property );\n\n          if( $this->_php_version >= 5.3 ) {\n            $property->setAccessible( true );\n          }\n\n          try {\n            $value = $property->getValue( $object );\n          } catch ( ReflectionException $e ) {\n            $value = 'only PHP 5.3 can access private/protected properties';\n          }\n\n          // same instance as parent object\n          if( $value === $object || in_array( $value, $this->_processed, true ) ) {\n            $value = 'recursion - parent object [' . get_class( $value ) . ']';\n          }\n\n          $object_as_array[ $type ] = $this->_convert( $value );\n        }\n        return $object_as_array;\n      }\n\n      /**\n       * takes a reflection property and returns a nicely formatted key of the property name\n       *\n       * @param ReflectionProperty\n       * @return string\n       */\n      protected function _getPropertyKey( ReflectionProperty $property ) {\n        $static = $property->isStatic() ? ' static' : '';\n        if( $property->isPublic() ) {\n          return 'public' . $static . ' ' . $property->getName();\n        }\n\n        if( $property->isProtected() ) {\n          return 'protected' . $static . ' ' . $property->getName();\n        }\n\n        if( $property->isPrivate() ) {\n          return 'private' . $static . ' ' . $property->getName();\n        }\n      }\n\n      /**\n       * adds a value to the data array\n       *\n       * @var mixed\n       * @return void\n       */\n      protected function _addRow( array $logs, $backtrace, $type ) {\n        // if this is logged on the same line for example in a loop, set it to null to save space\n        if( in_array( $backtrace, $this->_backtraces ) ) {\n          $backtrace = null;\n        }\n\n        // for group, groupEnd, and groupCollapsed\n        // take out the backtrace since it is not useful\n        if( $type == self::GROUP || $type == self::GROUP_END || $type == self::GROUP_COLLAPSED ) {\n          $backtrace = null;\n        }\n\n        if( $backtrace !== null ) {\n          $this->_backtraces[] = $backtrace;\n        }\n\n        $row = array( $logs, $backtrace, $type );\n\n        $this->_json[ 'rows' ][] = $row;\n        $this->_writeHeader( $this->_json );\n      }\n\n      protected function _writeHeader( $data ) {\n        header( self::HEADER_NAME . ': ' . $this->_encode( $data ) );\n      }\n\n      /**\n       * encodes the data to be sent along with the request\n       *\n       * @param array $data\n       * @return string\n       */\n      protected function _encode( $data ) {\n        if ( function_exists('mb_convert_encoding') ) {\n          $encoded = json_encode($data);\n\n          if ( $encoded !== false ) {\n            $utf8 = mb_convert_encoding($encoded, 'UTF-8', 'UTF-8');\n\n            if ($utf8 !== false) {\n              return base64_encode($utf8);\n            }\n          }\n        }\n\n        return false;\n      }\n\n      /**\n       * adds a setting\n       *\n       * @param string key\n       * @param mixed value\n       * @return void\n       */\n      public function addSetting( $key, $value ) {\n        $this->_settings[ $key ] = $value;\n      }\n\n      /**\n       * add ability to set multiple settings in one call\n       *\n       * @param array $settings\n       * @return void\n       */\n      public function addSettings( array $settings ) {\n        foreach( $settings as $key => $value ) {\n          $this->addSetting( $key, $value );\n        }\n      }\n\n      /**\n       * gets a setting\n       *\n       * @param string key\n       * @return mixed\n       */\n      public function getSetting( $key ) {\n        if( !isset( $this->_settings[ $key ] ) ) {\n          return null;\n        }\n        return $this->_settings[ $key ];\n      }\n    }\n\n  }\n\n}\n"
  },
  {
    "path": "lib/classes/class-migrator.php",
    "content": "<?php\n/**\n * Migrations manager\n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia;\n\nuse wpCloud\\StatelessMedia\\Batch\\BatchTaskManager;\n\nclass Migrator {\n  use Singleton;\n\n  const MIGRATIONS_KEY = 'sm_migrations';\n  const MIGRATIONS_NOTIFY_KEY = 'sm_migrations_notify';\n  const MIGRATIONS_NOTIFY_DISMISSED_KEY = 'dismissed_notice_migrations-finished';\n\n  const NOTIFY_REQUIRE = 'require';\n  const NOTIFY_FINISHED = 'finished';\n\n  const STATUS_PENDING = 'pending';\n  const STATUS_RUNNING = 'running';\n  const STATUS_PAUSED = 'paused';\n  const STATUS_SKIPPED = 'skipped';\n  const STATUS_FINISHED = 'finished';\n  const STATUS_FAILED = 'failed';\n\n  /**\n   * Path to migrations directory\n   * \n   * @var string\n   */\n  private $path;\n\n  protected function __construct() {\n    $this->path = ud_get_stateless_media()->path('static/migrations', 'dir');\n\n    $this->_init_hooks();\n  }\n\n  /**\n   * Initializes the needed hooks\n   */\n  private function _init_hooks() {\n    add_action( 'init', [$this, 'show_messages'] );\n    add_action( 'wp_stateless_batch_task_started', [$this, 'migration_started'], 10, 2 );\n    add_action( 'wp_stateless_batch_task_failed', [$this, 'migration_failed'], 10, 3 );\n    add_action( 'wp_stateless_batch_task_finished', [$this, 'migration_finished'], 10, 2 );\n    add_filter( 'wp_stateless_batch_action_start', [$this, 'start_migration'], 10, 2);\n    add_action( 'wp_stateless_notice_dismissed', [$this, 'notice_dismissed'], 10, 1 );\n    add_filter( 'wp_stateless_get_migrations', [$this, 'get_migrations']);\n  }\n  \n  /**\n   * Get migration ID from file name\n   * \n   * @param string $file\n   * @return string\n   */\n  private function _file_to_id($file) {\n    return pathinfo($file, PATHINFO_FILENAME);\n  }\n\n  /**\n   * Get migration ID from class name\n   * \n   * @param string $class\n   * @return string\n   */\n  private function _class_to_id($class) {\n    return str_replace('Migration_', '', $class);\n  }\n\n  /**\n   * Get migration class name from ID\n   * \n   * @param string $id\n   * @return string\n   */\n  private function _id_to_class($id) {\n    return \"\\Migration_$id\";\n  }\n\n  /**\n   * Get migration file name from ID\n   * \n   * @param string $id\n   * @return string\n   */\n  private function _id_to_file($id) {\n    return \"$this->path/$id.php\";\n  }\n\n  /**\n   * Compares the list of files in the migrations directory with the list of finished migrations\n   * Finds the oldest migration that has not been run yet\n   * \n   * @return array\n   */\n  private function _get_migration_ids() {\n    if ( !is_dir($this->path) ) {\n      return [];\n    }\n\n    $ids = [];\n    $files = scandir($this->path, SCANDIR_SORT_ASCENDING);\n\n    foreach ($files as $file) {\n      $extension = pathinfo($file, PATHINFO_EXTENSION);\n\n      if ( $extension !== 'php' ) {\n        continue;\n      }\n\n      $ids[] = $this->_file_to_id($file);\n    }\n\n    return $ids;\n  }\n\n  /**\n   * Returns the migration object\n   * \n   * @param string $id\n   * @return wpCloud\\StatelessMedia\\Batch\\Migration\n   * @throws \\Exception\n   */\n  private function _get_object($id) {\n    $class = $this->_id_to_class($id);\n\n    if ( !class_exists($class) ) {\n      require_once $this->_id_to_file($id);\n    }\n\n    $object = new $class();\n\n    if ( !is_a($object, '\\wpCloud\\StatelessMedia\\Batch\\Migration') ) {\n      throw new \\Exception(\"$class is not a valid migration\");\n    }\n\n    $object->init_state();\n\n    return $object;\n  }\n\n  /**\n   * Checks if any migrations required and sets or removes global flag\n   * \n   * @param array $migrations|null  \n   */\n  private function _check_required_migrations($migrations = null) {\n    if ( empty($migrations) ) {\n      $migrations = apply_filters('wp_stateless_get_migrations', []);\n    }\n\n    $require_migrations = false;\n\n    foreach ($migrations as $id => $migration) {\n      if ( !in_array( $migration['status'], [self::STATUS_FINISHED, self::STATUS_SKIPPED] ) ) {\n        $require_migrations = true;\n        break;\n      }\n    }\n\n    if ( $require_migrations ) {\n      update_option(self::MIGRATIONS_NOTIFY_KEY, self::NOTIFY_REQUIRE);\n      delete_option(self::MIGRATIONS_NOTIFY_DISMISSED_KEY);\n    } else {\n      $notify = get_option(self::MIGRATIONS_NOTIFY_KEY, false);\n\n      empty($notify) ? delete_option(self::MIGRATIONS_NOTIFY_KEY) : update_option(self::MIGRATIONS_NOTIFY_KEY, self::NOTIFY_FINISHED);\n    }\n  }\n\n  /**\n   * Dismisses the migration notice\n   * \n   * @param string $option_name\n   */\n  public function notice_dismissed($option_name) {\n    delete_option(self::MIGRATIONS_NOTIFY_KEY);\n  }\n\n  /**\n   * Generates an updated list of migrations.\n   * Checks which migrations should run.\n   * Sets global options to display the requirement to run migrations.\n   * \n   * Is called by Bootstrap object during version upgrade on 'plugins_loaded' hook.\n   */\n  public function migrate() {\n    // Rebuild the migrations list and state according to the new version\n    $ids = $this->_get_migration_ids();\n\n    $migrations = apply_filters('wp_stateless_get_migrations', []);\n    $existing = array_keys($migrations);\n\n    foreach ($ids as $id) {\n      if ( in_array($id, $existing) ) {\n        continue;\n      }\n\n      try {\n        $object = $this->_get_object($id);\n        $skip = !$object->should_run();\n\n        $migrations[$id] = [\n          'description' => $object->get_description(),\n          'started'     => '',\n          'finished'    => '',\n          'status'      => $object->should_run() ? self::STATUS_PENDING : self::STATUS_SKIPPED,\n          'message'     => '',\n        ];\n\n      } catch (\\Throwable $e) {\n        Helper::log(\"Unable to initialize migration $id: \" . $e->getMessage());\n      }\n    }\n\n    krsort($migrations);\n\n    update_option(self::MIGRATIONS_KEY, $migrations);\n\n    // Check if we need to run any migrations\n    $this->_check_required_migrations($migrations);\n  }\n\n  /**\n   * Outputs the message that migrations are required\n   */\n  public function show_messages() {\n    if ( is_network_admin() ) {\n      return;\n    }\n\n    $is_running = BatchTaskManager::instance()->is_processing() || BatchTaskManager::instance()->is_paused();\n    $notify = get_option(self::MIGRATIONS_NOTIFY_KEY, false);\n\n    if ( $notify ) {\n      ud_get_stateless_media()->errors->add([\n        'title' => __('WP-Stateless: Data Optimization Required', ud_get_stateless_media()->domain),\n        'message' => __('WP-Stateless has been updated! Your WP-Stateless data must now be optimized. <strong>Please backup your database before proceeding with the optimization.</strong>', ud_get_stateless_media()->domain),\n        'button' => __('Optimize Data', ud_get_stateless_media()->domain),\n        'button_link' => admin_url('upload.php?page=stateless-settings&tab=stless_status_tab#migration-action'),\n        'key' => 'migrations-required',\n        'dismiss' => false,\n        'classes' => ($notify == self::NOTIFY_REQUIRE) && !$is_running ? '' : 'hidden',\n      ], 'warning');\n\n      ud_get_stateless_media()->errors->add([\n        'title' => __('WP-Stateless: Data Optimization in Progress', ud_get_stateless_media()->domain),\n        'message' => __('A background process is optimizing your WP-Stateless data. <strong>Please do not upload, change, or delete your media while this update is underway.</strong>', ud_get_stateless_media()->domain),\n        'button' => __('View Progress', ud_get_stateless_media()->domain),\n        'button_link' => admin_url('upload.php?page=stateless-settings&tab=stless_status_tab#migration-action'),\n        'key' => 'migrations-running',\n        'dismiss' => false,\n        'classes' => $is_running ? '' : 'hidden',\n        'capability' => 'upload_files',\n        'button_capability' => 'manage_options',\n      ], 'warning');\n\n      ud_get_stateless_media()->errors->add([\n        'title' => __('WP-Stateless: Data Optimization Complete', ud_get_stateless_media()->domain),\n        'message' => __('Your WP-Stateless data has been optimized. You can now continue using your media as usual.', ud_get_stateless_media()->domain),\n        'key' => 'migrations-finished',\n        'classes' => ($notify == self::NOTIFY_FINISHED) && !$is_running ? '' : 'hidden',\n      ], 'warning');\n    }\n  }\n\n  /**\n   * Mark migration as started\n   *\n   * @param string $class\n   * @param string $file\n   */\n  public function migration_started($class, $file) {\n    $migrations = apply_filters('wp_stateless_get_migrations', []);\n    $id = $this->_file_to_id($file);\n\n    if ( array_key_exists($id, $migrations) ) {\n      $migrations[$id]['status'] = self::STATUS_RUNNING;\n      $migrations[$id]['started'] = time();\n      $migrations[$id]['finished'] = '';\n\n      update_option(self::MIGRATIONS_KEY, $migrations);\n    }\n  }\n\n  /**\n   * Mark migration as failed and check other migrations\n   *\n   * @param string $class\n   * @param string $file\n   * @param string $message \n   */\n  public function migration_failed($class, $file, $message) {\n    $migrations = apply_filters('wp_stateless_get_migrations', []);\n    $id = $this->_file_to_id($file);\n\n    if ( array_key_exists($id, $migrations) ) {\n      $migrations[$id]['status'] = self::STATUS_FAILED;\n      $migrations[$id]['message'] = $message;\n\n      update_option(self::MIGRATIONS_KEY, $migrations);\n      $this->_check_required_migrations($migrations);\n    }\n  }\n\n  /**\n   * Mark migration as completed and check other migrations\n   *\n   * @param string $class\n   */\n  public function migration_finished($class, $state) {\n    $migrations = apply_filters('wp_stateless_get_migrations', []);\n    $id = $this->_class_to_id($class);\n\n    if ( array_key_exists($id, $migrations) ) {\n      $migrations[$id]['status'] = self::STATUS_FINISHED;\n      $migrations[$id]['finished'] = time();\n\n      update_option(self::MIGRATIONS_KEY, $migrations);\n      $this->_check_required_migrations($migrations);\n    }\n\n    // When started from the UI, run next migration if needed\n    if ( !empty($state['queue']) && is_array($state['queue']) ) {\n      $index = array_search($id, $state['queue']);\n      $next_index = false;\n\n      if ( $index !== false && isset($state['queue'][$index + 1]) ) {\n        $next_index = $state['queue'][$index + 1];\n      }\n\n      if ( $next_index === false ) {\n        return;\n      }\n\n      $params = [\n        'is_migration' => true,\n        'id' => $next_index,\n        'email' => $state['email'],\n        'queue' => implode(':', $state['queue']),\n        'action' => 'start',\n      ];\n\n      apply_filters(\"wp_stateless_batch_action_start\", [], $params);\n    }\n  }\n\n  /**\n   * Run migration\n   * \n   * @param array $state\n   * @param array $params\n   * @return array\n   * @throws \\Exception\n   */\n  public function start_migration($state, $params) {\n    // Possibly not migration action\n    if ( empty($params['is_migration']) || empty($params['id']) || !$params['is_migration'] ) {\n      return $state;\n    }\n    \n    $id = $params['id'];\n    $migrations = apply_filters('wp_stateless_get_migrations', []);\n\n    // Unknown migration?\n    if ( !array_key_exists($id, $migrations) ) {\n      return $state;\n    }\n\n    $class = $this->_id_to_class($id);\n    $file = $this->_id_to_file($id);\n    \n    // Still possibly not migration action\n    if ( !file_exists($file) ) {\n      return $state;\n    }\n\n    if ( $migrations[$id]['status'] !== self::STATUS_PENDING && !isset($params['force']) ) {\n      Helper::log(\"Migration $id is already started or finished. Status: \" . $migrations[$id]['status']);\n\n      return $state;\n    }\n\n    if ( BatchTaskManager::instance()->is_running() ) {\n      Helper::log('Another batch task is already running');\n\n      return $state;\n    }\n\n    $email = $params['email'] ?? '';\n    $queue = isset($params['queue']) ? explode(':', $params['queue']) : [];\n\n    BatchTaskManager::instance()->start_task($class, $file, $email, $queue);\n\n    return apply_filters('wp_stateless_batch_state', $state, []);\n  }\n\n  /**\n   * Get the list of migrations\n   * \n   * @param array $migrations\n   * @return array\n   */\n  public function get_migrations($migrations) {\n    // We need to omit the cache and get the data directly from the db\n    global $wpdb;\n\n    $sql = $wpdb->prepare(\"SELECT option_value FROM $wpdb->options WHERE option_name = '%s' LIMIT 1\", self::MIGRATIONS_KEY);\n    $migrations = $wpdb->get_var($sql);\n\n    return empty($migrations) ? [] : maybe_unserialize($migrations);\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-module.php",
    "content": "<?php\n\n/**\n * Compatibility with other plugins.\n *\n * This class serves as compatibility getway.\n * Initiate all compatibility modules.\n *\n * @class Compatibility\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  class Module {\n\n    private static $modules = array();\n\n    /**\n     * Object initiated on Bootstrap::__construct\n     * Save module data on admin_init hook.\n     * Initiate all the compatibility modules.\n     */\n    public function __construct() {\n      add_action('admin_init', array($this, 'save_modules'), 1);\n      add_filter('wp_stateless_compatibility_tab_visible', array($this, 'compatibility_tab_visible'), 10, 1);\n      add_action('wp_stateless_compatibility_tab_content', array($this, 'tab_content'));\n\n      /**\n       * Support for Ewww Image Optimizer\n       */\n      new EWWW();\n\n      /**\n       * Support for Imagify\n       */\n      new Imagify();\n\n      /**\n       * Support for LearnDash\n       */\n      new LearnDash();\n\n      /**\n       * Support for ShortPixel\n       */\n      new ShortPixel();\n\n      /**\n       * Support for The Events Calendar\n       */\n      new TheEventsCalendar();\n\n      /**\n       * Support for WPBakery Page Builder\n       */\n      new WPBakeryPageBuilder();\n\n      /**\n       * Support for Smush\n       */\n      new WPSmush();\n\n    }\n\n    /**\n     * Register compatibility modules so that we can ues them in settings page.\n     * Called from ICompatibility::init() method.\n     */\n    public static function register_module($args) {\n      if (empty($args['id'])) {\n        return;\n      }\n      \n      if (is_bool($args['enabled'])) {\n        $args['enabled'] = $args['enabled'] ? 'true' : 'false';\n      }\n\n      $defaults = array(\n        'id' => '', \n        'self' => '', \n        'title' => '', \n        'enabled' => false, \n        'description' => '', \n        'is_constant' => false, \n        'is_network' => false, \n        'is_plugin_active' => false,\n        'is_internal' => false,\n      );\n      \n      self::$modules[$args['id']] = wp_parse_args($args, $defaults);\n    }\n\n    /**\n     * Return all the registered modules.\n     * Used in admin_init in bootstrap class as localize_script.\n     */\n    public static function get_modules() {\n      return self::$modules;\n    }\n\n    /**\n     * Return all the registered modules.\n     * Used in admin_init in bootstrap class as localize_script.\n     */\n    public static function get_module($id) {\n      if (!empty(self::$modules[$id])) {\n        return self::$modules[$id];\n      }\n      return false;\n    }\n\n    /**\n     * Handles saving module data.\n     * Enable or disable modules from Compatibility tab.\n     */\n    public function save_modules() {\n      if (isset($_POST['action']) && $_POST['action'] == 'stateless_modules' && wp_verify_nonce($_POST['_smnonce'], 'wp-stateless-modules')) {\n        $modules = !empty($_POST['stateless-modules']) ? $_POST['stateless-modules'] : array();\n        $modules = apply_filters('stateless::modules::save', $modules);\n\n        if (is_network_admin()) {\n          update_site_option('stateless-modules', $modules);\n        } else {\n          update_option('stateless-modules', $modules, true);\n        }\n        wp_redirect($_POST['_wp_http_referer']);\n      }\n    }\n\n    /**\n     * Check if 'Compatibility' tab should be visible.\n     */\n    public function compatibility_tab_visible($visible) {\n      return !empty(self::$modules);\n    }\n\n    /**\n     * Outputs 'Compatibility' tab content on the settings page.\n     * \n     */\n    public function tab_content() {\n      $modules = self::get_modules();\n\n      foreach ($modules as $id => $module) {\n        if ( !$module['is_internal'] ) {\n          unset($modules[$id]);\n        }\n      }\n\n      $modules = Helper::array_of_objects( $modules );\n\n      include ud_get_stateless_media()->path('static/views/compatibility-tab.php', 'dir');\n    }\n\n  }\n  \n}"
  },
  {
    "path": "lib/classes/class-settings.php",
    "content": "<?php\n/**\n * Settings management and UI\n *\n * @since 0.2.0\n */\nnamespace wpCloud\\StatelessMedia {\n\n  if( !class_exists( 'wpCloud\\StatelessMedia\\Settings' ) ) {\n\n    final class Settings extends \\UDX\\Settings {\n\n      const DEFAULT_CACHE_CONTROL = 'public, max-age=36000, must-revalidate';\n      const SETUP_MESSAGE_KEY = 'finish-setup';\n\n      /**\n       * @var false|null|string\n       */\n      public $setup_wizard_ui = null;\n\n      /**\n       * @var Array\n       */\n      public $wildcards = array();\n\n      /**\n       * @var false|null|string\n       */\n      public $stateless_settings = null;\n\n      /**\n       * @var string\n       */\n      private $plugin_file = '';\n\n      /**\n       * Instance of\n       *  - ud_get_stateless_media\n       *  - wpCloud\\StatelessMedia\\Bootstrap\n       * @var false|null|string\n       */\n      public $bootstrap = null;\n\n      private $settings = array(\n        'mode'                   => array('WP_STATELESS_MEDIA_MODE', 'ephemeral'),\n        'body_rewrite'           => array('WP_STATELESS_MEDIA_BODY_REWRITE', 'false'),\n        'body_rewrite_types'     => array('WP_STATELESS_MEDIA_BODY_REWRITE_TYPES', 'jpg jpeg png gif pdf'),\n        'bucket'                 => array('WP_STATELESS_MEDIA_BUCKET', ''),\n        'root_dir'               => array('WP_STATELESS_MEDIA_ROOT_DIR', ['/%date_year/date_month%/', '/sites/%site_id%/%date_year/date_month%/']),\n        'key_json'               => array('WP_STATELESS_MEDIA_JSON_KEY', ''),\n        'cache_control'          => array('WP_STATELESS_MEDIA_CACHE_CONTROL', ''),\n        'delete_remote'          => array('WP_STATELESS_MEDIA_DELETE_REMOTE', 'true'),\n        'custom_domain'          => array('WP_STATELESS_MEDIA_CUSTOM_DOMAIN', ''),\n        'organize_media'         => array('', 'true'),\n        'hashify_file_name'      => array(['WP_STATELESS_MEDIA_HASH_FILENAME' => 'WP_STATELESS_MEDIA_CACHE_BUSTING'], 'false'),\n        'dynamic_image_support'  => array(['WP_STATELESS_MEDIA_ON_FLY' => 'WP_STATELESS_DYNAMIC_IMAGE_SUPPORT'], 'false'),\n        'status_email_type'      => array('', 'true'),\n        'status_email_address'   => array('', ''),\n        'use_postmeta'           => array('WP_STATELESS_POSTMETA', ['false', '']),\n        'use_api_siteurl'        => array('WP_STATELESS_API_SITEURL', ['WP_HOME', '']),\n      );\n\n      private $network_only_settings = array(\n        'hide_settings_panel'   => array('WP_STATELESS_MEDIA_HIDE_SETTINGS_PANEL', false),\n        'hide_setup_assistant'  => array('WP_STATELESS_MEDIA_HIDE_SETUP_ASSISTANT', false),\n      );\n\n      private $strings = array(\n        'network' => 'Currently configured via Network Settings.',\n        'constant' => 'Currently configured via a constant.',\n        'environment' => 'Currently configured via an environment variable.',\n      );\n\n      /**\n       *\n       * Settings constructor.\n       * @param null $bootstrap\n       */\n      public function __construct($bootstrap = null) {\n        $this->bootstrap = $bootstrap ? $bootstrap : ud_get_stateless_media();\n\n        // Defile the main plugin file\n        $realpath = realpath( __DIR__ . '/../..');\n        $this->plugin_file = basename( $realpath ) . '/wp-stateless-media.php';\n\n        /* Add 'Settings' link for SM plugin on plugins page. */\n        $_basename = plugin_basename( $this->bootstrap->boot_file );\n\n        parent::__construct( array(\n          'store'       => 'options',\n          'format'      => 'json',\n          'data'        => array(\n            'sm' => array()\n          )\n        ));\n\n        add_action('activated_plugin', array( $this, 'check_setup' ));\n        add_action('admin_notices', array( $this, 'documentation_message' ), 1);\n\n        // Setting sm variable\n        $this->refresh();\n\n        $this->set('page_url.stateless_setup', $this->bootstrap->get_settings_page_url('?page=stateless-setup'));\n        $this->set('page_url.stateless_settings', $this->bootstrap->get_settings_page_url('?page=stateless-settings'));\n\n        /** Register options */\n        add_action( 'init', array( $this, 'init' ), 3 );\n\n        // additional links on plugins page\n        add_filter( 'plugin_action_links', array( $this, 'plugin_action_links' ), 10, 2);\n        add_filter( 'network_admin_plugin_action_links', array( $this, 'plugin_action_links' ), 10, 2);\n        add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 2 );\n\n        // apply wildcard to root dir.\n        add_filter( 'wp_stateless_handle_root_dir', array( $this, 'root_dir_wildcards' ), 10, 3);\n\n        // Parse root dir by wildcards\n        add_filter( 'wp_stateless_unhandle_root_dir', array( $this, 'parse_root_dir_wildcards' ), 10, 3);\n\n        // Settings page content\n        add_action('wp_stateless_settings_tab_content', array($this, 'settings_tab_content'));\n        add_action('wp_stateless_processing_tab_content', array($this, 'processing_tab_content'));\n      }\n\n      /**\n       * Init\n       */\n      public function init(){\n        $this->save_media_settings();\n\n        add_action('admin_menu', array( $this, 'admin_menu' ));\n\n        /**\n         * Manage specific Network Settings\n         */\n        if( is_network_admin() ) {\n          add_action( 'network_admin_menu', array( $this, 'network_admin_menu' ));\n        }\n\n        $site_url = parse_url( site_url() );\n        $site_url['path'] = isset($site_url['path']) ? $site_url['path'] : '';\n        $this->wildcards = array(\n          'sites'         => [\n            'sites',\n            __(\"sites\", $this->bootstrap->domain),\n            __(\"Sites uses for multisite.\", $this->bootstrap->domain),\n          ],\n          '%site_id%'         => [\n            get_current_blog_id(),\n            __(\"site id\", $this->bootstrap->domain),\n            __(\"Site ID, for example 1.\", $this->bootstrap->domain),\n          ],\n          '%site_url%'        => [\n            trim( $site_url['host'] . $site_url['path'], '/ ' ),\n            __(\"site url\", $this->bootstrap->domain),\n            __(\"Site URL, for example example.com/site-1.\", $this->bootstrap->domain),\n          ],\n          '%site_url_host%'   => [\n            trim( $site_url['host'], '/ ' ),\n            __(\"host name\", $this->bootstrap->domain),\n            __(\"Host name, for example example.com.\", $this->bootstrap->domain),\n          ],\n          '%site_url_path%'   => [\n            trim( $site_url['path'], '/ ' ),\n            __(\"site path\", $this->bootstrap->domain),\n            __(\"Site path, for example site-1.\", $this->bootstrap->domain),\n          ],\n          '%date_year/date_month%' => [\n            date('Y').'/'.date('m'),\n            __(\"year and monthnum\", $this->bootstrap->domain),\n            __(\"The year of the post, four digits, for example 2004. Month of the year, for example 05\", $this->bootstrap->domain),\n            \"\\d{4}\\/\\d{2}\"\n          ]\n        );\n      }\n\n      /**\n       * Refresh settings\n       */\n      public function refresh() {\n        $this->set( \"sm.readonly\", []);\n        $google_app_key_file = getenv('GOOGLE_APPLICATION_CREDENTIALS') ?: getenv('GOOGLE_APPLICATION_CREDENTIALS');\n\n        foreach ($this->settings as $option => $array) {\n          $value    = '';\n          $_option  = 'sm_' . $option;\n          $constant = $array[0]; // Constant name\n          $default  = is_array($array[1]) ? $array[1] : array($array[1], $array[1]); // Default value\n\n          // Getting settings\n          $value = get_option($_option, $default[0]);\n\n          if ($option == 'body_rewrite_types' && empty($value) && !is_multisite()) {\n            $value = $default[0];\n          }\n\n          if ($option == 'hashify_file_name' && in_array($this->get(\"sm.mode\"), array( 'stateless', 'ephemeral' ) )) {\n            $value = true;\n          }\n\n          // If constant is set then override by constant\n          if(is_array($constant)){\n            foreach($constant as $old_const => $new_const){\n              if(defined($new_const)){\n                $value = constant($new_const);\n                $this->set( \"sm.readonly.{$option}\", \"constant\" );\n                break;\n              }\n              if(is_string($old_const) && defined($old_const)){\n                $value = constant($old_const);\n                $this->bootstrap->errors->add( array(\n                  'key' => $new_const,\n                  'title' => sprintf( __( \"%s: Deprecated Notice (%s)\", $this->bootstrap->domain ), $this->bootstrap->name, $new_const ),\n                  'message' => sprintf(__(\"<i>%s</i> constant is deprecated, please use <i>%s</i> instead.\", $this->bootstrap->domain), $old_const, $new_const),\n                ), 'notice' );\n                $this->set( \"sm.readonly.{$option}\", \"constant\" );\n                break;\n              }\n            }\n          }\n          elseif(defined($constant)){\n            $value = constant($constant);\n            $this->set( \"sm.readonly.{$option}\", \"constant\" );\n          }\n\n          // Getting network settings\n          if(is_multisite() && $option != 'organize_media' && !$this->get( \"sm.readonly.{$option}\")){\n\n            $network = get_site_option( $_option, $default[1] );\n            // If network settings available then override by network settings.\n            if($network || is_network_admin()){\n              $value = $network;\n              if(!is_network_admin())\n                $this->set( \"sm.readonly.{$option}\", \"network\" );\n            }\n\n          }\n\n          // Converting to string true false for angular.\n          if(is_bool($value)){\n            $value = $value === true ? \"true\" : \"false\";\n          }\n\n          $this->set( \"sm.$option\", $value);\n        }\n\n        // Network only settings, to hide settings page\n        foreach ($this->network_only_settings as $option => $array) {\n          $value    = '';\n          $_option  = 'sm_' . $option;\n          $constant = $array[0]; // Constant name\n          $default  = $array[1]; // Default value\n\n          // If constant is set then override by constant\n          if(is_array($constant)){\n            foreach($constant as $old_const => $new_const){\n              if(defined($new_const)){\n                $value = constant($new_const);\n                break;\n              }\n              if(is_string($old_const) && defined($old_const)){\n                $value = constant($old_const);\n                trigger_error(__(sprintf(\"<i>%s</i> constant is deprecated, please use <i>%s</i> instead.\", $old_const, $new_const)), E_USER_WARNING);\n                break;\n              }\n            }\n          }\n          elseif(defined($constant)){\n            $value = constant($constant);\n          }\n          // Getting network settings\n          elseif(is_multisite()){\n            $value = get_site_option( $_option, $default );\n          }\n\n          // Converting to string true false for angular.\n          if(is_bool($value)){\n            $value = $value === true ? \"true\" : \"false\";\n          }\n\n          $this->set( \"sm.$option\", $value);\n        }\n\n        /**\n         * JSON key file path\n         */\n        /* Use constant value for JSON key file path, if set. */\n        if (defined('WP_STATELESS_MEDIA_KEY_FILE_PATH') || $google_app_key_file !== false) {\n          /* Maybe fix the path to p12 file. */\n          $key_file_path = (defined('WP_STATELESS_MEDIA_KEY_FILE_PATH')) ? WP_STATELESS_MEDIA_KEY_FILE_PATH : $google_app_key_file;\n\n          if( !empty( $key_file_path ) ) {\n            $upload_dir = wp_upload_dir();\n            /* Check if file exists */\n            switch( true ) {\n              /* Determine if default path is correct */\n              case (file_exists($key_file_path)):\n                /* Path is correct. Do nothing */\n                break;\n              /* Look using WP root. */\n              case (file_exists( ABSPATH . $key_file_path ) ):\n                $key_file_path = ABSPATH . $key_file_path;\n                break;\n              /* Look in wp-content dir */\n              case (file_exists( WP_CONTENT_DIR . $key_file_path ) ):\n                $key_file_path = WP_CONTENT_DIR . $key_file_path;\n                break;\n              /* Look in uploads dir */\n              case (file_exists( wp_normalize_path( $upload_dir[ 'basedir' ] ) . '/' . $key_file_path ) ):\n                $key_file_path = wp_normalize_path( $upload_dir[ 'basedir' ] ) . '/' . $key_file_path;\n                break;\n              /* Look using Plugin root */\n              case (file_exists($this->bootstrap->path( $key_file_path, 'dir') ) ):\n                $key_file_path = $this->bootstrap->path( $key_file_path, 'dir' );\n                break;\n\n            }\n            if(is_readable($key_file_path)) {\n              $this->set( 'sm.key_json', file_get_contents($key_file_path) );\n              if(defined('WP_STATELESS_MEDIA_KEY_FILE_PATH'))\n                $this->set( \"sm.readonly.key_json\", \"constant\" );\n              else\n                $this->set(\"sm.readonly.key_json\", \"environment\");\n            }\n          }\n        }\n\n        $this->set( 'sm.strings', $this->strings );\n\n        do_action('wp_stateless_settings_refresh', $this);\n      }\n\n      /**\n       * Remove settings\n       * @param bool $network\n       */\n      public function reset($network = false) {\n        foreach ($this->settings as $option => $array) {\n          if($option == 'organize_media')\n            continue;\n          $_option = 'sm_' . $option;\n\n          if($network && current_user_can('manage_network')){\n            delete_site_option($_option);\n            delete_option($_option);\n          }\n          else{\n            delete_option($_option);\n          }\n        }\n\n        foreach ($this->network_only_settings as $option => $array) {\n          $_option = 'sm_' . $option;\n          if($network && current_user_can('manage_network')){\n            delete_site_option($_option);\n            delete_option($_option);\n          }\n        }\n\n        $this->set('sm', []);\n        $this->refresh();\n      }\n\n      /**\n       * Replacing wildcards with real values\n       * @param $root_dir\n       * @param bool $regex\n       * @param array $current_values\n       * @return mixed|null|string|string[]\n       *\n       */\n      public function root_dir_wildcards( $root_dir, $regex = false, $current_values = [] ) {\n\n        $not_allowed_char = '/[^A-Za-z0-9\\/_.\\.\\-]/';\n        $wildcards = apply_filters('wp_stateless_root_dir_wildcard', $this->wildcards);\n\n        if($regex){\n          $root_dir = preg_quote($root_dir);\n          $not_allowed_char = '/[^A-Za-z0-9\\/_.\\.\\-\\\\\\\\{}]/';\n        }\n\n        if ( is_array( $wildcards ) && !empty( $wildcards ) ) {\n          foreach ($wildcards as $wildcard => $values) {\n            if (!empty($wildcard)) {\n              $replace = $values[0];\n              if($regex){\n                $replace = isset($values[3]) ? $values[3] : preg_quote($values[0]);\n              }\n              if ( isset($current_values[$wildcard]) ) {\n                $replace = $current_values[$wildcard];\n              }\n              $root_dir = str_replace($wildcard, $replace, $root_dir);\n            }\n          }\n        }\n\n        //removing all special chars except slash\n        $root_dir = preg_replace($not_allowed_char, '', $root_dir);\n        $root_dir = preg_replace('/(\\/+)/', '/', $root_dir);\n        $root_dir = trim( $root_dir, '/ ' ); // Remove any forward slash and empty space.\n\n        return $root_dir;\n      }\n\n\n      /**\n       * Parse path by wildcards and return array ('wildcard' => 'value')\n       * The perpose of this filter is to return Y/M or other dynamic fields from the file path.\n       * For now only Y/M is dynamic. We will get it via using regex.\n       * @param $path\n       * @return array\n       */\n      public function parse_root_dir_wildcards( $path ) {\n        $result = [];\n\n        /**\n         * removing GS host from path\n         */\n        $gs_url =  $this->bootstrap->get_gs_host();\n        if( 0 === strpos( $path, $gs_url . '/' ) ) {\n          $path = substr( $path, strlen( $gs_url . '/' ) );\n        }\n\n        /**\n         * removing filename and last slash\n         */\n        $path = untrailingslashit( str_replace(basename($path), '', $path) );\n        $wildcards = apply_filters('wp_stateless_root_dir_wildcard', $this->wildcards);\n\n        /**\n         * Checking if a wildcard have regex field in it.\n         * Then return the matching value using regex.\n         */\n        foreach ($wildcards as $key => $value) {\n          if(isset($value[3])){\n            if(preg_match(\"@\" . $value[3] . \"@\", $path, $matches)){\n              $result[$key] = $matches[0];\n            }\n          }\n        }\n\n        return $result;\n      }\n\n      /**\n       * Add menu options\n       */\n      public function admin_menu() {\n        $key_json = $this->get('sm.key_json');\n        if($this->get('sm.hide_setup_assistant') != 'true' && empty($key_json) ){\n          // #152\n          // $this->setup_wizard_ui = add_media_page( __( 'Stateless Setup', $this->bootstrap->domain ), __( 'Stateless Setup', $this->bootstrap->domain ), 'manage_options', 'stateless-setup', array($this, 'setup_wizard_interface') );\n        }\n\n        if($this->get('sm.hide_settings_panel') != 'true'){\n          $this->stateless_settings = add_media_page( __( 'Stateless Settings', $this->bootstrap->domain ), __( 'Stateless Settings', $this->bootstrap->domain ), 'manage_options', 'stateless-settings', array($this, 'settings_interface') );\n        }\n      }\n\n      /**\n       * Add menu options\n       * @param $slug\n       */\n      public function network_admin_menu($slug) {\n        // #152\n        // $this->setup_wizard_ui = add_submenu_page( 'settings.php', __( 'Stateless Setup', $this->bootstrap->domain ), __( 'Stateless Setup', $this->bootstrap->domain ), 'manage_options', 'stateless-setup', array($this, 'setup_wizard_interface') );\n        $this->stateless_settings = add_submenu_page( 'settings.php', __( 'Stateless Settings', $this->bootstrap->domain ), __( 'Stateless Settings', $this->bootstrap->domain ), 'manage_options', 'stateless-settings', array($this, 'settings_interface') );\n      }\n\n      /**\n       * Draw interface\n       */\n      public function settings_interface() {\n        $tab = isset($_GET['tab']) && !empty($_GET['tab']) ? $_GET['tab'] : 'stless_settings_tab';\n\n        include $this->bootstrap->path( '/static/views/settings_interface.php', 'dir' );\n      }\n\n      /**\n       * Draw interface\n       */\n      public function regenerate_interface() {\n        include $this->bootstrap->path( '/static/views/regenerate_interface.php', 'dir' );\n      }\n\n      /**\n       * Draw interface\n       */\n      public function setup_wizard_interface() {\n        include ud_get_stateless_media()->path( '/static/views/setup_wizard_interface.php', 'dir' );\n      }\n\n      /**\n       * Handles saving SM data.\n       *\n       * @author alim@UD\n       */\n      public function save_media_settings(){\n        if(isset($_POST['action']) && $_POST['action'] == 'stateless_settings' && wp_verify_nonce( $_POST['_smnonce'], 'wp-stateless-settings' )){\n\n          $settings = apply_filters('stateless::settings::save', $_POST['sm']);\n          $root_dir_value = false;\n\n          foreach ( $settings as $name => $value ) {\n            /**\n             * Sanitize POST data\n             */\n            if (!is_array($value)) {\n              $value = sanitize_text_field($value);\n            }\n            /**\n             * root_dir settings\n             */\n            if ( 'root_dir' == $name && is_array($value) ) {\n              //managed in WP-Stateless settings (via Bucket Folder control)\n              if ( in_array('%date_year/date_month%', $value)) {\n                update_option( 'uploads_use_yearmonth_folders', '1'  );\n              } else {\n                update_option( 'uploads_use_yearmonth_folders', '0'  );\n              }\n\n              /**\n               * preparing path from tags\n               */\n              $value = implode('/', $value);\n              $root_dir_value = true;\n            }\n\n            $option = 'sm_'. $name;\n\n            if($name == 'organize_media'){\n              $option = 'uploads_use_yearmonth_folders';\n            }\n            elseif($name == 'key_json'){\n              $value = stripslashes($value);\n            }\n\n            // Be sure to cleanup values before saving\n            $value = trim($value);\n\n            if(is_network_admin()){\n              update_site_option( $option, $value );\n            }\n            else{\n              update_option( $option, $value );\n            }\n          }\n\n          if ( !$root_dir_value ) {\n            if(is_network_admin()){\n              update_site_option( 'sm_root_dir', '' );\n            }\n            else{\n              update_option( 'sm_root_dir', '' );\n            }\n          }\n\n          $this->bootstrap->flush_transients();\n          $this->refresh();\n        }\n      }\n\n      /**\n       * Wrapper for setting value.\n       * @param string $key\n       * @param bool $value\n       * @param bool $bypass_validation\n       * @return \\UDX\\Settings\n       */\n      public function set( $key = '', $value = false, $bypass_validation = false ) {\n        return parent::set( $key, $value, $bypass_validation );\n      }\n\n      /**\n       * Outputs 'Compatibility' tab content on the settings page.\n       * \n       */\n      public function settings_tab_content() {\n        $wildcards = apply_filters('wp_stateless_root_dir_wildcard', $this->wildcards);\n        $wildcard_year_month = '%date_year/date_month%';\n        $root_dir = $this->get( 'sm.root_dir' );\n\n        $use_year_month = (strpos($root_dir, $wildcard_year_month) !== false) ?: false;\n\n        /**\n         * removing year/month wildcard\n         */\n        if ($use_year_month) {\n          $root_dir = str_replace($wildcard_year_month, '%YM%', $root_dir);\n        }\n\n        /**\n         * preparing array with wildcards\n         */\n        $root_dir_values = explode('/', $root_dir);\n\n        /**\n         * adding year/month wildcard\n         */\n        if ($use_year_month) {\n          if ( !empty($root_dir_values) ) {\n            foreach( $root_dir_values as $k=>$root_dir_value ) {\n              if ( $root_dir_value == '%YM%' ) {\n                $root_dir_values[$k] = $wildcard_year_month;\n              }\n            }\n          } else {\n            $root_dir_values[] = $wildcard_year_month;\n          }\n        }\n\n        /**\n         * first slash\n         */\n        array_unshift($root_dir_values , '/');\n\n        /**\n         * removing empty values\n         */\n        $root_dir_values = array_filter($root_dir_values);\n\n        foreach ($root_dir_values as $k => $v) {\n          $root_dir_values[$k] = trim($v);\n        }\n\n        /**\n         * merging user's wildcards with default values\n         */\n        $wildcards = array_keys($wildcards);\n\n        if (!empty($root_dir_values)) {\n          $wildcards = array_unique( array_merge($root_dir_values, $wildcards) );\n        }\n\n        $sm = (object)$this->get('sm');\n\n        include ud_get_stateless_media()->path('static/views/settings-tab.php', 'dir');\n      }\n      \n      /**\n       * Outputs 'Sync' tab content on the settings page.\n       * \n       */\n      public function processing_tab_content() {\n        // Drop non-public properties\n        $processes = json_encode(Utility::get_available_sync_classes());\n        $processes = json_decode($processes, true);\n\n        $processes = Helper::array_of_objects($processes);\n\n        include ud_get_stateless_media()->path('static/views/processing_interface.php', 'dir');\n      }\n\n      /**\n       * Getter for settings\n       *\n       * @param string|bool $key\n       * @param mixed $default\n       * @return mixed\n       */\n      public function get( $key = false, $default = false ) {\n        $value = parent::get( $key, $default );\n\n        if ( $key === 'sm' && is_array($value) ) {\n          foreach ( $value as $key => $val ) {\n            $value[$key] = apply_filters(\"wp_stateless_get_setting_$key\", $val, $default);\n          }\n        } else if ( is_string($key) ) {\n          $key = str_replace('sm.', '', $key);\n          $value = apply_filters(\"wp_stateless_get_setting_$key\", $value, $default);\n        }\n\n        return $value;\n      }\n\n      /**\n       * Override Cache Control\n       * \n       * @param $value\n       * @return mixed\n       */\n      public function override_cache_control($value) {\n        if ( !empty($value) && $value !== self::DEFAULT_CACHE_CONTROL ) {\n          return $value;\n        }\n        \n        $cache_control = trim($this->get('sm.cache_control'));\n\n        return empty($cache_control) ? self::DEFAULT_CACHE_CONTROL : $cache_control;\n      }\n\n      /**\n       * Add 'Settings' on Plugins page\n       * \n       * @param array $actions\n       * @param string $file\n       * \n       * @return array\n       */\n      public function plugin_action_links($actions, $file) {\n        if ( $file !== $this->plugin_file ) {\n          return $actions;\n        }\n\n        $url = ud_get_stateless_media()->get_settings_page_url('?page=stateless-settings');\n\n        $settings = [\n          'settings' => sprintf( '<a href=\"%s\">%s</a>', $url, __('Settings', ud_get_stateless_media()->domain) ),\n        ];\n\n        $actions['addons'] = sprintf( '<a href=\"%s\" style=\"color: #f05323\" target=\"_blank\">%s</a>', ud_get_stateless_media()->get_docs_page_url('addons'), __('Addons', ud_get_stateless_media()->domain) );\n\n        return $settings + $actions;\n      }\n\n      /**\n       * Add link to docs on Plugins page\n       * \n       * @param $meta\n       * @param $file\n       * \n       * @return array\n       */\n      public function plugin_row_meta($meta, $file) {\n        if ( $file !== $this->plugin_file ) {\n          return $meta;\n        }\n\n        $meta['documentation'] = sprintf( '<a href=\"%s\" target=\"_blank\">%s</a>', ud_get_stateless_media()->get_docs_page_url(), __('Documentation', ud_get_stateless_media()->domain) );\n\n        return $meta;\n      }\n\n      /**\n       * Upon plugin activation check if configuration is complete and show setup message if needed\n       */\n      public function check_setup() {\n        if ( json_decode($this->get('sm.key_json')) ) {\n          return;\n        }\n\n        delete_option('dismissed_notice_' . self::SETUP_MESSAGE_KEY);\n      }\n\n      /**\n       * Check if configuration is complete and show setup message if needed\n       */\n      public function documentation_message() {\n        if ( json_decode($this->get('sm.key_json')) ) {\n          return;\n        }\n\n        $documentation_url = sprintf(\n          '<a href=\"%s\" target=\"_blank\">%s</a>',\n          $this->bootstrap->get_docs_page_url('/setup/'),\n          __('Refer to the setup manual', ud_get_stateless_media()->domain),\n        );\n\n        $this->bootstrap->errors->add([\n          'title' => __('WP-Stateless: Finish Setup', ud_get_stateless_media()->domain),\n          'message' => sprintf(\n            __(\n              'WP-Stateless has been successfully activated. %s for guidance on completing the setup.',\n              ud_get_stateless_media()->domain,\n            ),\n            $documentation_url,\n          ),\n          'key' => self::SETUP_MESSAGE_KEY,\n        ], 'message');\n      }\n    }\n\n  }\n\n}\n"
  },
  {
    "path": "lib/classes/class-status.php",
    "content": "<?php\n\n/**\n * Plugin and environment status class\n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia;\n\nuse wpCloud\\StatelessMedia\\Status\\Migrations;\nuse wpCloud\\StatelessMedia\\Status\\Info;\n\nclass Status {\n  use Singleton;\n\n  protected function __construct() {\n    Info::instance();\n    Migrations::instance();\n  }\n} "
  },
  {
    "path": "lib/classes/class-sync-non-media.php",
    "content": "<?php\n\n/**\n * Need to improve workflow.\n * Maybe add a transient of few days to keep track of synced files.\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\SyncNonMedia')) {\n\n    class SyncNonMedia {\n\n      /**\n       * Status constants \n       */\n      const STATUS_SYNCED = 'synced';\n      const STATUS_QUEUED = 'queued';\n      const STATUS_COPIED = 'copied';\n      const STATUS_MOVED = 'moved';\n\n      /**\n       * @var array\n       * \n       * List of directories to scan for compatibility files.\n       */\n      private $registered_dir = array();\n\n      public function __construct() {\n        // Manual sync using sync tab.\n        // Return files to be manually sync from sync tab.\n        add_filter('sm:sync::nonMediaFiles', array($this, 'sync_non_media_files'));\n        add_filter('sm:sync::queue_is_exists', array($this, 'queue_is_exists'), 10, 2);\n\n        // register a dir to sync from sync tab\n        add_action('sm:sync::register_dir', array($this, 'register_dir'));\n        add_action('sm:sync::addFile', array($this, 'add_file'), 10, 2);\n        add_action('sm:sync::removeFile', array($this, 'remove_file'));\n\n        // Sync a file.\n        add_action('sm:sync::syncFile', array($this, 'sync_file'), 10, 4);\n        add_action('sm:sync::copyFile', array($this, 'copy_file'), 10, 2);\n        add_action('sm:sync::moveFile', array($this, 'move_file'), 10, 2);\n        add_action('sm:sync::deleteFile', array($this, 'delete_file'));\n        add_action('sm:sync::deleteFiles', array($this, 'delete_files'));\n        add_action('sm:sync::unregister_file', array($this, 'unregister_file'), 10, 1);\n      }\n\n      /**\n       * Register dir to be sync from Sync tab.\n       * @param\n       * $dir: The directory to register\n       */\n      public function register_dir($dir) {\n        if (!in_array($dir, $this->registered_dir)) {\n          $this->registered_dir[] = $dir;\n        }\n      }\n      /**\n       * Add file to list of files to be sync from Sync tab.\n       * Save the file path to database.\n       * @param array $media\n       * @param string $status\n       */\n      public function add_file($media, $status = self::STATUS_QUEUED) {\n        ud_stateless_db()->update_non_library_file( (array) $media, $status);\n      }\n\n      /**\n       * Sync the file to GCS.\n       * @param $name: Relative path to upload dir.\n       * @param $absolutePath: Full path of the file\n       * @param bool $forced: Type: bool/int; Whether to force to move the file to GCS even it's already exists.\n       *                      true: Check whether it's already synced or not in database.\n       *                      2 (int): Force to overwrite on GCS\n       * @param array $args\n       * @return bool|void $media: Media object returned from client->add_media() method.\n       * @throws: Exception File not found\n       */\n      public function sync_file($name, $absolutePath, $forced = false, $args = array()) {\n        $sm_mode = ud_get_stateless_media()->get('sm.mode');\n\n        $args = wp_parse_args($args, array(\n          'ephemeral' => true, // whether to delete local file in ephemeral mode.\n          'download'  => false, // whether to delete local file in ephemeral mode.\n          'use_root'  => 0,\n          'skip_db'   => false,\n          'manual_sync' => false,\n          'remove_from_queue' => false, // removes entry from queue table if both file is missing.\n          'name_with_root' => true,\n        ));\n\n        $args = apply_filters('sm:sync::syncArgs', $args, $name, $absolutePath, $forced);\n\n        if ( apply_filters('sm:sync::queue_is_exists', $name, self::STATUS_SYNCED) && !$forced) {\n          return false;\n        }\n\n        $file_type = Utility::mimetype_from_extension(pathinfo($absolutePath, PATHINFO_EXTENSION));\n        if (empty($this->client)) {\n          $this->client = ud_get_stateless_media()->get_client();\n        }\n\n        if (is_wp_error($this->client)) {\n          return;\n        }\n\n        $file_copied_from_gcs = false;\n        $local_file_exists = file_exists($absolutePath);\n\n        do_action('sm::pre::sync::nonMediaFiles', $name, $absolutePath); // , $media\n\n        if (!$local_file_exists && ($args['download'] || ud_get_stateless_media()->get('sm.mode') !== 'ephemeral' || ud_get_stateless_media()->get('sm.mode') !== 'stateless')) {\n          // Try get it and save\n          $result_code = $this->client->get_media($name, true, $absolutePath);\n\n          if ($result_code == 200) {\n            $local_file_exists = true;\n            $file_copied_from_gcs = true;\n          }\n        }\n\n        if ($local_file_exists && !$file_copied_from_gcs && !$args['download']) {\n\n          if ($sm_mode == 'stateless' && !wp_doing_ajax()) {\n            global $gs_client;\n\n            $gs_name = apply_filters('wp_stateless_file_name', $name, $args['name_with_root']);\n\n            //Bucket\n            $bucket = ud_get_stateless_media()->get('sm.bucket');\n\n            $bucket = $gs_client->bucket($bucket);\n            $object = $bucket->object($gs_name);\n            $args = wp_parse_args($args, array(\n              'use_root' => $args['use_root'],\n              'force' => ($forced == 2),\n              'name' => $name,\n              'absolutePath' => $absolutePath,\n              'mimeType' => $file_type,\n              'metadata' => array(\n                'child-of' => dirname($name),\n                'file-hash' => md5($name),\n                'source' => $args['source'] ?? '',\n                'sourceVersion' => $args['source_version'] ?? '',\n              ),\n              'is_webp' => '',\n            ));\n\n            $args = apply_filters('wp_stateless_add_media_args', $args);\n\n            /**\n             * Updating object metadata, ACL, CacheControl and contentDisposition\n             * @return media object\n             */\n            try {\n              $mediaOptions = array(\n                'cacheControl' => apply_filters('sm:item:cacheControl', ud_get_stateless_media()->get_default_cache_control(), $absolutePath),\n                'contentDisposition' => apply_filters('sm:item:contentDisposition', null, $absolutePath)\n              );\n\n              if ( !defined('WP_STATELESS_SKIP_ACL_SET') || !WP_STATELESS_SKIP_ACL_SET) {\n                $mediaOptions['predefinedAcl'] = 'publicRead';\n              }\n\n              $media = $object->update(array('metadata' => $args['metadata']) + $mediaOptions);\n            } catch (\\Throwable $th) {\n              //throw $th;\n            }\n          } else {\n            $media = $this->client->add_media(array(\n              'use_root' => $args['use_root'],\n              'name' => $name,\n              'force' => ($forced == 2),\n              'absolutePath' => $absolutePath,\n              'cacheControl' => apply_filters('sm:item:cacheControl', ud_get_stateless_media()->get_default_cache_control(), $absolutePath), //@todo use cacheControl from settings page.\n              'contentDisposition' => apply_filters('sm:item:contentDisposition', null, $absolutePath),\n              'mimeType' => $file_type,\n              'metadata' => array(\n                'child-of' => dirname($name),\n                'file-hash' => md5($name),\n                'source' => $args['source'] ?? '',\n                'sourceVersion' => $args['source_version'] ?? '',\n              ),\n            ));\n          }\n\n          // Addon can hook this function to modify database after manual sync done.\n          do_action('sm::synced::nonMediaFiles', $name, $absolutePath, $media); // , $media\n\n          // Ephemeral mode: we don't need the local version.\n          if ($args['ephemeral'] == true && ud_get_stateless_media()->get('sm.mode') === 'ephemeral') {\n            unlink($absolutePath);\n          }\n\n          if (!$args['skip_db']) {\n            // add file_path to the file list.\n            do_action('sm:sync::addFile', $media, self::STATUS_SYNCED);\n          }\n          return $media;\n        } elseif (!$local_file_exists && $args['remove_from_queue']) {\n          if (!$this->client->media_exists($name)) {\n            do_action('sm:sync::removeFile', $name);\n            if ($args['manual_sync']) {\n              throw new UnprocessableException(sprintf(__(\"Both local and remote files are missing. File: %s \", ud_get_stateless_media()->domain), $name));\n            }\n          }\n        }\n      }\n\n      /**\n       * Generate list for manual sync using sync tab. Sync all register files, dir and passed files.\n       * @param array $files - Additional files to sync.\n       * @return array\n       */\n      public function sync_non_media_files($files = array()) {\n        $upload_dir = wp_upload_dir();\n        $files = array_merge( $files, apply_filters('wp_stateless_get_non_library_files', array(), '') );\n        foreach ($this->registered_dir as $key => $dir) {\n          $dir = $upload_dir['basedir'] . \"/\" . trim($dir, '/') . \"/\";\n          if (is_dir($dir)) {\n            // Getting all the files from dir recursively.\n            $_files = Utility::get_files($dir);\n            // validating and adding to the $files array.\n            foreach ($_files as $id => $file) {\n              if (!file_exists($file)) {\n                continue;\n              }\n\n              $_file = str_replace(wp_normalize_path($upload_dir['basedir']), '', wp_normalize_path($file));\n              if (!in_array($_file, $files)) {\n                $files[] = trim($_file, '/');\n              }\n            }\n          }\n        }\n\n        // $files = array_values(array_unique($files));\n        return $files;\n      }\n\n      /**\n       * Delete a file from GCS.\n       *\n       * @param $file\n       * @param bool $force\n       * @return bool\n       */\n      public function delete_file($file) {\n        try {\n          $file = trim($file, '/');\n          if (empty($this->client)) {\n            $this->client = ud_get_stateless_media()->get_client();\n          }\n\n          if (is_wp_error($this->client)) {\n            return false;\n          }\n          // Removing file for GCS\n          $this->client->remove_media($file, \"\", 0);\n          do_action('sm:sync::removeFile', $file);\n          return true;\n        } catch (\\Exception $e) {\n          return false;\n        }\n      }\n\n      /**\n       * Remove registered files of specified dir from GCS.\n       *\n       * @param $dir\n       * @return bool|void\n       */\n      public function delete_files($dir) {\n        if (empty($this->client)) {\n          $this->client = ud_get_stateless_media()->get_client();\n        }\n\n        if (is_wp_error($this->client)) {\n          return;\n        }\n\n        // Removing the files one by one.\n        $files = apply_filters('wp_stateless_get_non_library_files', array(), $dir);\n\n        if ( !empty($files) ) {\n          foreach ($files as $key => $file) {\n            if (strpos($file, $dir) !== false) {\n              $this->client->remove_media($file, \"\", 0);\n              do_action('sm:sync::removeFile', $file);\n            }\n          }\n        }\n\n        return true;\n      }\n\n      /**\n       * Checks whether a file is exist in database.\n       * @param $file: Path of file relative to upload dir.\n       * @param string $status: optional. queued|synced\n       * @return mixed: non boolean true. number of item found in db.\n       */\n      public function queue_is_exists($file, $status = '') {\n        return ud_stateless_db()->get_non_library_file_id($file, $status);\n      }\n\n      /**\n       * Deletes a entry from database.\n       * @param $file: Path of file relative to upload dir.\n       * @return mixed\n       */\n      public function remove_file($file) {\n        ud_stateless_db()->remove_non_library_file($file);\n      }\n\n      /**\n       * Delete a file from GCS.\n       * @param $old_file\n       * @param $new_file\n       * @param bool $force\n       * @param string $status\n       * @return bool\n       */\n      public function copy_file($old_file, $new_file, $force = false, $status = self::STATUS_COPIED) {\n        try {\n          if ( !$force && apply_filters('sm:sync::queue_is_exists', $new_file, $status) ) {\n            return false;\n          }\n\n          $client = $this->get_gs_client();\n\n          // Copying file on GCS\n          $media = $client->copy_media($old_file, $new_file);\n\n          do_action('sm:sync::addFile', $media, $status);\n\n          return true;\n        } catch (\\Exception $e) {\n          return false;\n        }\n      }\n\n      /**\n       * Delete a file from GCS.\n       * @param $old_file\n       * @param $new_file\n       * @return bool\n       */\n      public function move_file($old_file, $new_file) {\n        try {\n\n          $this->copy_file($old_file, $new_file, true, self::STATUS_MOVED);\n          $this->delete_file($old_file);\n\n          return true;\n        } catch (\\Exception $e) {\n          return false;\n        }\n      }\n\n      /**\n       * Get GS Client\n       * @return mixed\n       */\n      public function get_gs_client() {\n        if (empty($this->client)) {\n          $this->client = ud_get_stateless_media()->get_client();\n        }\n\n        return $this->client;\n      }\n\n      /**\n       * Remove file from DB after file deletion.\n       * @param string $file\n       */\n      public function unregister_file($file) {\n        $file = str_replace( ud_get_stateless_media()->get_gs_path(), '', $file);\n        $file = str_replace( ud_get_stateless_media()->get_gs_host(), '', $file);\n\n        $file = trim($file, '/');\n\n        do_action('sm:sync::removeFile', $file);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-upgrader.php",
    "content": "<?php\n\n/**\n * Upgrader\n *\n * @since 1.2.0\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\Upgrader')) {\n\n    final class Upgrader {\n\n      /**\n       * Upgrades data if needed.\n       *\n       */\n      public static function call() {\n        $version = get_site_option('wp_sm_version', false);\n\n        if (!$version && is_multisite()) {\n          $sites = get_sites();\n          foreach ($sites as $site) {\n            switch_to_blog($site->blog_id);\n            $version = get_option('wp_sm_version');\n            if ($version) {\n              restore_current_blog();\n              break;\n            }\n            restore_current_blog();\n          }\n        }\n\n        if (!$version) {\n          self::fresh_install();\n        }\n\n        /* Maybe upgrade blog ( single site ) */\n        self::upgrade();\n\n        /* Maybe upgrade network options */\n        if (ud_get_stateless_media()->is_network_detected(true)) {\n          self::upgrade_network($version);\n        }\n      }\n\n      /**\n       * Upgrade current blog ( or single site )\n       *\n       */\n      private static function upgrade() {\n        global $wpdb;\n\n        $version = get_option('wp_sm_version', false);\n\n        /**\n         * Upgrade to v.1.2.0 requirements\n         */\n        if (!$version || version_compare($version, '1.2.0', '<')) {\n\n          if ($v = get_option('sm.mode')) {\n            update_option('sm_mode', $v);\n            delete_option('sm.mode');\n          }\n\n          $v = get_option('sm_mode');\n          if ($v == '0') update_option('sm_mode', 'disabled');\n          elseif ($v == '1') update_option('sm_mode', 'backup');\n          elseif ($v == '2') update_option('sm_mode', 'cdn');\n\n          if ($v = get_option('sm.service_account_name')) {\n            update_option('sm_service_account_name', $v);\n            delete_option('sm.service_account_name');\n          }\n\n          if ($v = get_option('sm.key_file_path')) {\n            update_option('sm_key_file_path', $v);\n            delete_option('sm.key_file_path');\n          }\n\n          if ($v = get_option('sm.bucket')) {\n            update_option('sm_bucket', $v);\n            delete_option('sm.bucket');\n          }\n\n          delete_option('sm.app_name');\n          delete_option('sm.body_rewrite');\n          delete_option('sm.bucket_url_path');\n          delete_option('sm.post_content_rewrite');\n        }\n\n        update_option('dismissed_notice_stateless_cache_busting', true);\n        if (!$version || version_compare($version, '2.1.7', '<')) {\n          $sm_mode = get_option('sm_mode', null);\n          $hashify_file_name = get_option('sm_hashify_file_name', null);\n          if ($version && $sm_mode == 'stateless' && $hashify_file_name == 'true') {\n            delete_option('dismissed_notice_stateless_cache_busting');\n          }\n        }\n\n        if (!is_multisite() && $version && version_compare($version, '3.0', '<')) {\n          self::migrate_root_dir();\n          //updating mode name `stateless` to `ephemeral`\n          $sm_mode = get_option('sm_mode');\n          if ($sm_mode == 'stateless') update_option('sm_mode', 'ephemeral');\n        }\n\n        /**\n         * Upgrade to v4.0\n         */\n        if ( $version && version_compare($version, '4.0', '<') ) {\n          $modules = get_option('stateless-modules', []);\n          \n          if ( is_array($modules) && isset($modules['dynamic-image-support']) ) {\n            update_option('sm_dynamic_image_support', $modules['dynamic-image-support']);\n\n            unset($modules['dynamic-image-support']);\n            update_option('stateless-modules', $modules);\n          }\n        }\n\n        update_option('wp_sm_version', ud_get_stateless_media()->args['version']);\n      }\n\n      /**\n       * Upgrade Network Enabled\n       *\n       */\n      private static function upgrade_network($version) {\n        /**\n         * Upgrade to v.1.2.0 requirements\n         */\n        if (!$version || version_compare($version, '1.2.0', '<')) {\n\n          if ($v = get_site_option('sm.key_file_path')) {\n            update_site_option('sm_key_file_path', $v);\n            delete_site_option('sm.key_file_path');\n          }\n\n          if ($v = get_option('sm.service_account_name')) {\n            update_site_option('sm_service_account_name', $v);\n            delete_site_option('sm.service_account_name');\n          }\n        }\n\n        /**\n         * Upgrade to v.3.0 requirements\n         */\n        if (is_multisite() && $version && version_compare($version, '3.0', '<')) {\n          $sites = get_sites();\n          foreach ($sites as $site) {\n            switch_to_blog($site->blog_id);\n            self::migrate_root_dir(true);\n            //updating mode name `stateless` to `ephemeral`\n            $sm_mode = get_option('sm_mode');\n            if ($sm_mode == 'stateless') update_option('sm_mode', 'ephemeral');\n            restore_current_blog();\n          }\n\n          //removing network option, because sites could uses different setting for Orginize media\n          update_network_option(1, 'sm_root_dir', '');\n\n          //forcing `Cache-Busting` for multisite to prevent replacing media with same filenames\n          update_network_option(1, 'sm_hashify_file_name', 'true');\n\n          $sm_mode_site = get_site_option('sm_mode');\n          if ($sm_mode_site == 'stateless') update_site_option('sm_mode', 'ephemeral');\n        }\n\n        /**\n         * Upgrade to v4.0\n         */\n        if ( $version && version_compare($version, '4.0', '<') ) {\n          $modules = get_site_option('stateless-modules', []);\n          \n          if ( is_array($modules) && isset($modules['dynamic-image-support']) ) {\n            update_site_option('sm_dynamic_image_support', $modules['dynamic-image-support']);\n\n            unset($modules['dynamic-image-support']);\n            update_site_option('stateless-modules', $modules);\n          }\n        }\n\n        update_site_option('wp_sm_version', ud_get_stateless_media()->args['version']);\n      }\n\n      /**\n       * Fresh install\n       */\n      private static function fresh_install() {\n        if (is_multisite()) {\n          $sites = get_sites();\n          foreach ($sites as $site) {\n            switch_to_blog($site->blog_id);\n            self::migrate_root_dir(true, true);\n            restore_current_blog();\n          }\n        }\n      }\n\n      /**\n       *\n       * @param bool $multisite pass true to use multisite prefix\n       * @param bool $fresh_install for first install\n       * @return string `sm_root_dir` value\n       */\n      private static function migrate_root_dir($multisite = false, $fresh_install = false) {\n        $network_root_dir = get_network_option(1, 'sm_root_dir');\n        $sm_root_dir      = $network_root_dir ? $network_root_dir : get_option('sm_root_dir', '');\n        $organize_media   = get_option('uploads_use_yearmonth_folders');\n\n        if ($organize_media == '1' && empty($sm_root_dir)) {\n          $sm_root_dir  =  '/%date_year/date_month%/';\n        } elseif (!empty($sm_root_dir) && $organize_media == '1') {\n          $sm_root_dir  =  trim($sm_root_dir, ' /') . '/%date_year/date_month%/';\n        } elseif (!empty($sm_root_dir)) {\n          // $sm_root_dir  =  $sm_root_dir;\n        } elseif ($organize_media != '1') {\n          $sm_root_dir  =  '';\n        }\n\n        if ($multisite && $fresh_install) {\n          if (empty($sm_root_dir) || $sm_root_dir[0] !== '/') {\n            $sm_root_dir = \"/\" . $sm_root_dir;\n          }\n          if (false === strpos($sm_root_dir, '/sites/%site_id%')) {\n            $sm_root_dir  =  '/sites/%site_id%' . $sm_root_dir;\n          }\n        }\n\n        update_option('sm_root_dir', $sm_root_dir);\n\n        if ($multisite) {\n          //forcing `Cache-Busting` for multisite to prevent replacing media with same filenames\n          update_option('sm_hashify_file_name', 'true');\n        }\n\n        return $sm_root_dir;\n      }\n\n      /**\n       * Upgrade database, perform tasks that dbDelta can't do\n       * \n       * @param string $new_version\n       * @param string $old_version\n       */\n      public static function upgrade_db($new_version, $old_version) {\n        global $wpdb;\n\n        if ( !empty($old_version) && version_compare($old_version, '1.1', '<') ) {\n          try {\n            // Remove UNIQUE indexes, which will be recreated later using dbDelta as non-unique\n            $wpdb->query('ALTER TABLE ' .  ud_stateless_db()->files . ' DROP INDEX post_id');\n\n          } catch (\\Throwable $e) {\n            Helper::log($e->getMessage());\n          }\n        }\n\n        if ( !empty($old_version) && version_compare($old_version, '1.2', '<') ) {\n          try {\n            // Remove UNIQUE indexes, which will be recreated later using dbDelta as non-unique\n            $wpdb->query('ALTER TABLE ' .  ud_stateless_db()->files . ' DROP INDEX name');\n\n          } catch (\\Throwable $e) {\n            Helper::log($e->getMessage());\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/class-utility.php",
    "content": "<?php\n\n/**\n * Helper Functions List\n *\n * Can be called via Singleton. Since Singleton uses magic method __call().\n * Example:\n *\n * Add Media to GS storage:\n * ud_get_stateless_media()->add_media( false, $post_id );\n *\n * @class Utility\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  use wpCloud\\StatelessMedia\\Sync\\BackgroundSync;\n  use \\Firebase\\JWT\\JWT;\n  use \\Firebase\\JWT\\Key;\n\n  if (!class_exists('wpCloud\\StatelessMedia\\Utility')) {\n\n    class Utility {\n\n      static $can_delete_attachment = [];\n\n      /**\n       * ChromeLogger\n       *\n       * @author potanin@UD\n       * @param $data\n       */\n      static public function log($data) {\n\n        if (!class_exists('wpCloud\\StatelessMedia\\Logger')) {\n          include_once(__DIR__ . '/class-logger.php');\n        }\n\n        if (!class_exists('wpCloud\\StatelessMedia\\Logger')) {\n          return;\n        }\n\n        if (defined('WP_STATELESS_CONSOLE_LOG') && WP_STATELESS_CONSOLE_LOG) {\n          Logger::log('[wp-stateless]', $data);\n        }\n      }\n\n      /**\n       * wp_normalize_path was added in 3.9.0\n       *\n       * @param $path\n       * @return mixed|string\n       *\n       */\n      public static function normalize_path($path) {\n\n        if (function_exists('wp_normalize_path')) {\n          return wp_normalize_path($path);\n        }\n\n        $path = str_replace('\\\\', '/', $path);\n        $path = preg_replace('|/+|', '/', $path);\n        return $path;\n      }\n\n      /**\n       * Randomize file name\n       * @param $filename\n       * @return string\n       */\n      public static function randomize_filename($filename) {\n        $return = apply_filters('stateless_skip_cache_busting', null, $filename);\n        if ($return) {\n          return $return;\n        }\n\n        if (preg_match('/^[a-f0-9]{8}-/', $filename)) {\n          return $filename;\n        }\n\n        $info = pathinfo($filename);\n        $ext = empty($info['extension']) ? '' : '' . $info['extension'];\n        $_parts = array();\n        $rand = substr(md5(time()), 0, 8);\n\n        if (strpos($info['filename'], '@')) {\n          $_cleanName = explode('@', $info['filename'])[0];\n          $_retna = explode('@', $info['filename'])[1];\n          $_parts[] = $rand;\n          $_parts[] = '-';\n          $_parts[] = strtolower($_cleanName);\n          $_parts[] = '@' . strtolower($_retna);\n        } else {\n          $_parts[] = $rand;\n          $_parts[] = '-';\n          $_parts[] = strtolower($info['filename']);\n        }\n\n        $filename = join('', $_parts);\n        if (!empty($ext)) {\n          $filename .= '.' . $ext;\n        }\n\n        return $filename;\n      }\n\n      /**\n       * Get Media Item Content Disposition\n       *\n       * @param null $attachment_id\n       * @param array $metadata\n       * @param array $data\n       * @return string\n       */\n      public static function getContentDisposition($attachment_id = null, $metadata = array(), $data = array()) {\n        // return 'Content-Disposition: attachment; filename=some-file.sql';\n        return apply_filters('sm:item:contentDisposition', null, array('attachment_id' => $attachment_id, 'mime_type' => get_post_mime_type($attachment_id), 'metadata' => $metadata, 'data' => $data));\n      }\n\n      /**\n       * @param null $attachment_id\n       * @param array $metadata\n       * @param array $data\n       * @return string\n       */\n      public static function getCacheControl($attachment_id = null, $metadata = array(), $data = array()) {\n        if (!$attachment_id) {\n          return apply_filters('sm:item:cacheControl', 'private, no-cache, no-store', $attachment_id, array('attachment_id' => null, 'mime_type' => null, 'metadata' => $metadata, 'data' => $data));\n        }\n\n        $_mime_type = get_post_mime_type($attachment_id);\n\n        // Treat SQL as non-public.\n        if (strpos($_mime_type, 'sql') !== false) {\n          return apply_filters('sm:item:cacheControl', 'private, no-cache, no-store', array('attachment_id' => $attachment_id, 'mime_type' => null, 'metadata' => $metadata, 'data' => $data));\n        }\n\n        // Treat all other files as public.\n        return apply_filters('sm:item:cacheControl', ud_get_stateless_media()->get_default_cache_control(), array('attachment_id' => $attachment_id, 'mime_type' => null, 'metadata' => $metadata, 'data' => $data));\n      }\n\n      /**\n       * Add/Update Media to Bucket\n       * Fired for every action with image add or update\n       *\n       * $force and $args params will no be passed on media library uploads.\n       * This two will be passed on by compatibility.\n       *\n       * @action wp_generate_attachment_metadata\n       * @author peshkov@UD\n       * @param $metadata\n       * @param $attachment_id\n       * @param boolean $force Whether to force the upload incase of it's already exists.\n       * @param array $args Whether to only sync the full size image.\n       * @return bool|string\n       */\n      public static function add_media($metadata, $attachment_id, $force = false, $args = array()) {\n        $sm_mode = ud_get_stateless_media()->get('sm.mode');\n        $file = '';\n        $upload_dir = wp_upload_dir();\n        $args = wp_parse_args($args, array(\n          'is_webp' => '', // expected value \".webp\";\n        ));\n\n        /* Get metadata in case if method is called directly. */\n        if (current_filter() !== 'wp_generate_attachment_metadata' && current_filter() !== 'wp_update_attachment_metadata' && current_filter() !== 'intermediate_image_sizes_advanced') {\n          $metadata = wp_get_attachment_metadata($attachment_id);\n        }\n\n        // making sure meta data isn't null.\n        if (empty($metadata)) {\n          $metadata = array();\n        }\n\n        /**\n         * To skip the sync process.\n         *\n         * Returning a non-null value\n         * will effectively short-circuit the function.\n         *\n         * $force and $args params will no be passed on non media library uploads.\n         * This two will be passed on by compatibility.\n         *\n         * @since 2.2.4\n         *\n         * @param bool              $value          This should return true if want to skip the sync.\n         * @param int               $metadata       Metadata for the attachment.\n         * @param string            $attachment_id  Attachment ID.\n         * @param bool              $force          (optional) Whether to force the sync even the file already exist in GCS.\n         * @param bool              $args           (optional) Whether to only sync the full size image.\n         */\n        $check = apply_filters('wp_stateless_skip_add_media', null, $metadata, $attachment_id, $force, $args);\n\n        $client = ud_get_stateless_media()->get_client();\n\n        if ((!is_wp_error($client) || ($sm_mode == 'stateless' && !wp_doing_ajax())) && !$check) {\n\n          $image_host          = ud_get_stateless_media()->get_gs_host();\n          $bucketLink          = apply_filters('wp_stateless_bucket_link', $image_host);\n          $fullsizepath        = wp_normalize_path(get_attached_file($attachment_id));\n          $_cacheControl       = self::getCacheControl($attachment_id, $metadata, null);\n          $_contentDisposition = self::getContentDisposition($attachment_id, $metadata, null);\n\n          // Ensure image upload to GCS when attachment is updated,\n          // by checking if the attachment metadata is changed.\n          if ($attachment_id && !empty($metadata) && !$force) {\n            $db_metadata = get_post_meta($attachment_id, '_wp_attachment_metadata', true);\n            if ($db_metadata != $metadata) {\n              $force = true;\n            }\n          }\n\n          /**\n           * To skip removing files from server\n           *\n           * Returning a non-null value\n           * will effectively short-circuit the function.\n           *\n           * $force and $args params will no be passed on non media library uploads.\n           * This two will be passed on by compatibility.\n           *\n           * @since 3.0\n           *\n           * @param bool              $value          This should return true if want to skip the sync.\n           * @param int               $metadata       Metadata for the attachment.\n           * @param string            $attachment_id  Attachment ID.\n           * @param bool              $force          (optional) Whether to force the sync even the file already exist in GCS.\n           * @param bool              $args           (optional) Whether to only sync the full size image.\n           */\n          $skip_remove_media = apply_filters('wp_stateless_skip_remove_media', false, $metadata, $attachment_id, $force, $args);\n\n          // Make non-images uploadable.\n          // empty $metadata['file'] can cause problem, so we need to generate it.\n          if (empty($metadata['file']) && $attachment_id) {\n            $mime_type = get_post_mime_type($attachment_id);\n            $file = str_replace(wp_normalize_path(trailingslashit($upload_dir['basedir'])), '', $fullsizepath);\n\n            // We shouldn't create $metadata[\"file\"] if it's PDF file.\n            if ($mime_type != \"application/pdf\") {\n              $metadata[\"file\"] = $file;\n            }\n          }\n\n          $cloud_meta = apply_filters('wp_stateless_get_file', [], $attachment_id, true);\n\n          $cloud_meta = wp_parse_args($cloud_meta, array(\n            'name'               => '',\n            'bucket'             => ud_get_stateless_media()->get('sm.bucket'),\n            'fileLink'           => '',\n            'mediaLink'          => '',\n            'cacheControl'       => $_cacheControl,\n            'contentDisposition' => $_contentDisposition,\n            'sizes'              => array(),\n          ));\n\n          /**\n           * Storing file size to sm_cloud first,\n           * Because assigning directly to $metadata['filesize'] don't work.\n           * Maybe filesize gets removed in first run (when file exists).\n           */\n          if (file_exists($fullsizepath)) {\n            $cloud_meta['filesize'] = filesize($fullsizepath);\n          }\n          // Getting file size from sm_cloud.\n          if (!empty($cloud_meta['filesize'])) {\n            $metadata['filesize'] = $cloud_meta['filesize'];\n          }\n\n          $image_sizes = self::get_path_and_url($metadata, $attachment_id);\n\n          foreach ($image_sizes as $size => $img) {\n            if ((isset($_REQUEST['size']) && $_REQUEST['size'] == $size) || empty($_REQUEST['size'])) {\n              // GCS metadata\n              $_metadata = array(\n                \"width\"     => $img['width'],\n                \"height\"    => $img['height'],\n                'child-of'  => $attachment_id,\n                'file-hash' => md5($file),\n                'size'      => $size,\n              );\n\n              // adding extra GCS meta for full size image.\n              if (!$img['is_thumb']) {\n                unset($_metadata['child-of']); // no need in full size image.\n                $_metadata['object-id'] = $attachment_id;\n                $_metadata['source-id'] = md5($attachment_id . ud_get_stateless_media()->get('sm.bucket'));\n              }\n\n              $media_args = array_filter(array(\n                'force'              => $force,\n                'name'               => $img['gs_name'],\n                'is_webp'            => $args['is_webp'],\n                'mimeType'           => $img['mime_type'],\n                'metadata'           => $_metadata,\n                'absolutePath'       => $img['path'],\n                'cacheControl'       => $_cacheControl,\n                'contentDisposition' => $_contentDisposition,\n              ));\n\n              if ($sm_mode == 'stateless' && !wp_doing_ajax() && !wp_doing_cron() \n                || ($sm_mode == 'stateless' && wp_doing_ajax()) ) {\n                global $gs_client;\n\n                $media_args = wp_parse_args($media_args, array(\n                  'use_root' => true,\n                  'force' => false,\n                  'name' => false,\n                  'absolutePath' => false,\n                  'mimeType' => 'image/jpeg',\n                  'metadata' => array(),\n                  'is_webp' => '',\n                ));\n                $media_args = apply_filters('wp_stateless_add_media_args', $media_args);\n\n                //Bucket\n                $bucket = ud_get_stateless_media()->get('sm.bucket');\n\n                $bucket = $gs_client->bucket($bucket);\n                $object = $bucket->object($media_args['name']);\n\n                /**\n                 * Updating object metadata, ACL, CacheControl and contentDisposition\n                 * @return media object\n                 */\n                try {\n                  $mediaOptions = array(\n                    'cacheControl' => $_cacheControl,\n                    'contentDisposition' => $_contentDisposition\n                  );\n\n                  if ( !defined('WP_STATELESS_SKIP_ACL_SET') || !WP_STATELESS_SKIP_ACL_SET) {\n                    $mediaOptions['predefinedAcl'] = 'publicRead';\n                  }\n      \n                  $media = $object->update(array('metadata' => $media_args['metadata']) + $mediaOptions);\n\n                  $cloud_meta = self::generate_cloud_meta($cloud_meta, $media, $size, $img, $bucketLink);\n                } catch (\\Throwable $th) {\n                  //throw $th;\n                }\n              } else {\n                /* Add default image */\n                $media = $client->add_media($media_args);\n\n                /* Break if we have errors. */\n                if (!is_wp_error($media)) {\n                  // @note We don't add storageClass because it's same as parent...\n                  $cloud_meta = self::generate_cloud_meta($cloud_meta, $media, $size, $img, $bucketLink);\n\n                  /**\n                   * Ephemeral and stateless mode: we don't need the local version.\n                   * Except when uploading the full size image first.\n                   */\n                  if (self::can_delete_attachment($attachment_id, $args) && !$skip_remove_media) {\n                    @unlink($img['path']);\n                  }\n                }\n              }\n            }\n          }\n          // End of image sync loop\n          if (!$args['is_webp']) {\n            update_post_meta($attachment_id, 'sm_cloud', $cloud_meta);\n          }\n\n          /**\n           * Triggers when the media and it's thumbs are synced.\n           *\n           * $force and $args params will no be passed on non media library uploads.\n           * This two will be passed on by compatibility.\n           *\n           * @since 2.2.5\n           *\n           * @param int               $metadata       Metadata for the attachment.\n           * @param string            $attachment_id  Attachment ID.\n           * @param bool              $force          (optional) Whether to force the sync even the file already exist in GCS.\n           * @param bool              $args           (optional) Whether to only sync the full size image.\n           */\n          $metadata = apply_filters('wp_stateless_media_synced', $metadata, $attachment_id, $force, $args);\n        }\n\n        return $metadata;\n      }\n\n      /**\n       * Remove Media from Bucket by post ID\n       * Fired on calling function wp_delete_attachment()\n       *\n       * @todo: add error logging. peshkov@UD\n       * @see wp_delete_attachment()\n       * @action delete_attachment\n       * @author peshkov@UD\n       * @param $post_id\n       */\n      public static function remove_media($post_id) {\n        /* Get attachments metadata */\n        $metadata = wp_get_attachment_metadata($post_id);\n\n        /* Be sure we have the same bucket in settings and have GS object's name before proceed. */\n        if (isset($metadata['gs_name']) && isset($metadata['gs_bucket']) && $metadata['gs_bucket'] == ud_get_stateless_media()->get('sm.bucket')) {\n          $client = ud_get_stateless_media()->get_client();\n          if (!is_wp_error($client)) {\n\n            /* Remove default image */\n            $client->remove_media($metadata['gs_name'], $post_id);\n            $client->remove_media(get_attached_file($post_id), $post_id);\n\n            // Remove webp\n            $client->remove_media($metadata['gs_name'] . '.webp', $post_id, true, \"\", true);\n\n            /* Now, go through all sizes and remove 'image sizes' images from Bucket too. */\n            if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {\n              foreach ($metadata['sizes'] as $k => $v) {\n                if (!empty($v['gs_name'])) {\n                  $client->remove_media($v['gs_name'], $post_id, true, $k);\n                  $client->remove_media($v['gs_name'] . '.webp', $post_id, true, $k, true);\n                }\n              }\n            }\n          }\n        }\n      }\n\n      /**\n       * Return URL and path for all image sizes of a attachment.\n       * @param $metadata\n       * @param $attachment_id\n       * @return mixed\n       */\n      public static function get_path_and_url($metadata, $attachment_id) {\n        /* Get metadata in case if method is called directly. */\n        if (empty($metadata) && current_filter() !== 'wp_generate_attachment_metadata' && current_filter() !== 'wp_update_attachment_metadata') {\n          $metadata = wp_get_attachment_metadata($attachment_id);\n        }\n\n        $gs_name_path = array();\n        $full_size_path = get_attached_file($attachment_id);\n        $base_dir = dirname($full_size_path);\n\n        $gs_name = apply_filters('wp_stateless_file_name', $full_size_path, true, $attachment_id, '');\n        $gs_base_dir = dirname($gs_name) == '.' ? '' : trailingslashit(dirname($gs_name));\n\n        if (!isset($metadata['width']) && file_exists($full_size_path)) {\n          try {\n            $_image_size = getimagesize($full_size_path);\n            if ($_image_size !== false && is_array($_image_size)) {\n              $metadata['width'] = $_image_size[0];\n              $metadata['height'] = $_image_size[1];\n            }\n          } catch (\\Exception $e) {\n            // lets do nothing.\n          }\n        }\n\n        $gs_name_path['__full'] = array(\n          'gs_name'   => $gs_name,\n          'path'      => $full_size_path,\n          'sm_meta'   => true,\n          'is_thumb'  => false,\n          'mime_type' => get_post_mime_type($attachment_id),\n          'width'     => isset($metadata['width']) ? $metadata['width'] : null,\n          'height'    => isset($metadata['height']) ? $metadata['height'] : null,\n        );\n\n        /* Now we go through all available image sizes and upload them to Google Storage */\n        if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {\n          foreach ($metadata['sizes'] as $image_size => $data) {\n            if (empty($data['file'])) continue;\n            $absolutePath = wp_normalize_path($base_dir . '/' . $data['file']);\n            $gs_name = $gs_base_dir . $data['file'];\n            $gs_name = apply_filters('wp_stateless_file_name', $gs_name, true, $attachment_id, $image_size);\n\n            $gs_name_path[$image_size] = array(\n              'gs_name'   => $gs_name,\n              'path'      => $absolutePath,\n              'sm_meta'   => true,\n              'is_thumb'  => true,\n              'mime_type' => $data['mime-type'],\n              'width'     => $data['width'],\n              'height'    => $data['height'],\n            );\n          }\n        }\n\n        return apply_filters('wp_stateless_get_path_and_url', $gs_name_path, $metadata, $attachment_id);\n      }\n\n      /**\n       * Return URL and path for all image sizes of a attachment.\n       * @param $cloud_meta\n       * @param $media\n       * @param $image_size\n       * @param $img\n       * @param $bucketLink\n       * @return mixed\n       */\n      public static function generate_cloud_meta($cloud_meta, $media, $image_size, $img, $bucketLink) {\n        $gs_name = !empty($media['name']) ? $media['name'] : $img['gs_name'];\n        $fileLink = trailingslashit($bucketLink) . $gs_name;\n        $version = get_option('wp_sm_version', false);\n\n        if ($img['is_thumb']) {\n          // Cloud meta for thumbs.\n          $cloud_meta['sizes'][$image_size]['name']         = $gs_name;\n          $cloud_meta['sizes'][$image_size]['fileLink']     = $fileLink;\n          $cloud_meta['sizes'][$image_size]['mediaLink']    = $media['mediaLink'];\n          $cloud_meta['sizes'][$image_size]['width']        = ($media['metadata']['width']) ? $media['metadata']['width'] : $img['width'];\n          $cloud_meta['sizes'][$image_size]['height']       = ($media['metadata']['height']) ? $media['metadata']['height'] : $img['height'];\n        } else {\n          // cloud meta for full size image.\n          $cloud_meta['name']                   = $gs_name;\n          $cloud_meta['fileLink']               = $fileLink;\n          $cloud_meta['mediaLink']              = $media['mediaLink'];\n          $cloud_meta['width']                  = isset($media['metadata']['width']) ? $media['metadata']['width'] : ($img['width'] ? $img['width'] : 0);\n          $cloud_meta['height']                 = isset($media['metadata']['height']) ? $media['metadata']['height'] : ($img['height'] ? $img['height'] : 0);\n          $cloud_meta['bucket']                 = ud_get_stateless_media()->get('sm.bucket');\n          $cloud_meta['sm_version']             = $version;\n        }\n        return apply_filters('wp_stateless_generate_cloud_meta', $cloud_meta, $media, $image_size, $img, $bucketLink);\n      }\n\n      /**\n       * join_url\n       *\n       * @param array $parts\n       * @param boolean $encode\n       * @return string $url\n       */\n      public static function join_url($parts, $encode = TRUE) {\n        if ($encode) {\n          if (isset($parts['user']))\n            $parts['user']     = rawurlencode($parts['user']);\n          if (isset($parts['pass']))\n            $parts['pass']     = rawurlencode($parts['pass']);\n          if (\n            isset($parts['host']) &&\n            !preg_match('!^(\\[[\\da-f.:]+\\]])|([\\da-f.:]+)$!ui', $parts['host'])\n          )\n            $parts['host']     = rawurlencode($parts['host']);\n          if (!empty($parts['path']))\n            $parts['path']     = preg_replace(\n              '!%2F!ui',\n              '/',\n              rawurlencode($parts['path'])\n            );\n          if (isset($parts['query']))\n            $parts['query']    = rawurlencode($parts['query']);\n          if (isset($parts['fragment']))\n            $parts['fragment'] = rawurlencode($parts['fragment']);\n        }\n\n        $url = '';\n        if (!empty($parts['scheme']))\n          $url .= $parts['scheme'] . ':';\n        if (isset($parts['host'])) {\n          $url .= '//';\n          if (isset($parts['user'])) {\n            $url .= $parts['user'];\n            if (isset($parts['pass']))\n              $url .= ':' . $parts['pass'];\n            $url .= '@';\n          }\n          if (preg_match('!^[\\da-f]*:[\\da-f.:]+$!ui', $parts['host']))\n            $url .= '[' . $parts['host'] . ']'; // IPv6\n          else\n            $url .= $parts['host'];             // IPv4 or name\n          if (isset($parts['port']))\n            $url .= ':' . $parts['port'];\n          if (!empty($parts['path']) && $parts['path'][0] != '/')\n            $url .= '/';\n        }\n        if (!empty($parts['path']))\n          $url .= $parts['path'];\n        if (isset($parts['query']))\n          $url .= '?' . $parts['query'];\n        if (isset($parts['fragment']))\n          $url .= '#' . $parts['fragment'];\n        return $url;\n      }\n\n      /**\n       * add_webp_mime\n       * @param $t\n       * @param $user\n       * @return mixed\n       */\n      public function add_webp_mime($t, $user) {\n        $t['webp'] = 'image/webp';\n        return $t;\n      }\n\n      /**\n       * Store attachment id in a static variable on 'intermediate_image_sizes_advanced' filter.\n       * To indicate that we can now delete attachment from server now.\n       *\n       * @param array $new_sizes\n       * @param array $image_meta\n       * @param int $attachment_id\n       * @return array $new_sizes\n       */\n      public static function store_can_delete_attachment($new_sizes, $image_meta, $attachment_id) {\n        if (!in_array($attachment_id, self::$can_delete_attachment)) {\n          self::$can_delete_attachment[] = $attachment_id;\n        }\n        return $new_sizes;\n      }\n\n      /**\n       * Check whether to delete attachment from server or not.\n       *\n       * @param int $attachment_id\n       * @param array $args\n       * @return boolean\n       */\n      public static function can_delete_attachment($attachment_id, $args) {\n        $sm_mode = ud_get_stateless_media()->get('sm.mode');\n\n        if (in_array($sm_mode, array('ephemeral', 'stateless'))) {\n          // checks whether it's WP 5.3 and 'intermediate_image_sizes_advanced' is passed.\n          // To be sure that we don't delete full size image before thumbnails are generated.\n          if (\n            wp_attachment_is_image($attachment_id) &&\n            function_exists('is_wp_version_compatible') &&\n            is_wp_version_compatible('5.3-RC4-46673') &&\n            !in_array($attachment_id, self::$can_delete_attachment)\n          ) {\n            return false;\n          }\n          return true;\n        }\n        return false;\n      }\n\n      /**\n       * Useful when there is a need to do things depending on a call stack.\n       * Returns true if any of the conditions met. Returns false otherwise.\n       *\n       * @param $callstack array Result of debug_backtrace function.\n       * @param $conditions array CallStack fingerprint with `stack_level` integer.\n       *\n       * Example:\n       * array(\n       *  array(\n       *    'stack_level' => 4,\n       *    'function' => '__construct',\n       *    'class' => 'ET_Core_PageResource'\n       *  ),\n       *  array(\n       *    'stack_level' => 4,\n       *    'function' => 'get_cache_filename',\n       *    'class' => 'ET_Builder_Element'\n       *  )\n       * )\n       *\n       * @return bool\n       */\n      public static function isCallStackMatches($callstack, $conditions) {\n        if (!is_array($conditions)) {\n          $conditions = array($conditions);\n        }\n\n        foreach ($conditions as $condition) {\n          $condition['stack_level'] = $condition['stack_level'] ? $condition['stack_level'] : 0;\n\n          $levelData = $callstack[$condition['stack_level']];\n\n          unset($condition['stack_level']);\n\n          $levelMatches = false;\n          foreach ($condition as $key => $value) {\n            if (isset($levelData[$key]) && $levelData[$key] === $value) {\n              $levelMatches = true;\n            } else {\n              $levelMatches = false;\n            }\n          }\n\n          if ($levelMatches) return true;\n        }\n\n        return false;\n      }\n\n      /**\n       * Fail over to image URL if not found on disk\n       * In case image not available on both local and bucket\n       * try to pull image from image URL in case it is accessible by some sort of proxy.\n       *\n       * @param:\n       * $url (int/string): URL of the image.\n       * $save_to (string): Path where to save the image.\n       *\n       * @return bool|int\n       * @throws \\Exception\n       */\n      public static function sync_get_attachment_if_exist($url, $save_to) {\n        if (is_int($url)) $url = wp_get_attachment_url($url);\n\n        $response = wp_remote_get($url);\n        if (!is_wp_error($response) && is_array($response)) {\n          if (!empty($response['response']['code']) && $response['response']['code'] == 200) {\n            try {\n              if (wp_mkdir_p(dirname($save_to))) {\n                return file_put_contents($save_to, $response['body']);\n              }\n            } catch (\\Exception $e) {\n              throw $e;\n            }\n          }\n        }\n        return false;\n      }\n\n      /**\n       * Get a secure JWT signing key\n       * Priority: AUTH_SALT (if valid length) > Plugin-specific stored key > Generated key\n       *\n       * @return string A key suitable for HS256 (minimum 32 bytes)\n       */\n      public static function get_jwt_signing_key() {\n        // Minimum key length for HS256 (256 bits = 32 bytes)\n        $min_key_length = 32;\n        \n        // Try AUTH_SALT first if it's long enough\n        if (defined('AUTH_SALT') && !empty(AUTH_SALT) && strlen(AUTH_SALT) >= $min_key_length) {\n          return AUTH_SALT;\n        }\n        \n        // Try to get stored plugin-specific key\n        $stored_key = get_option('wp_stateless_jwt_key');\n        \n        if ($stored_key && strlen($stored_key) >= $min_key_length) {\n          return $stored_key;\n        }\n        \n        // Generate a new secure key\n        $new_key = self::generate_secure_key($min_key_length);\n        update_option('wp_stateless_jwt_key', $new_key, false);\n        \n        return $new_key;\n      }\n      \n      /**\n       * Generate a cryptographically secure random key\n       *\n       * @param int $length Key length in bytes\n       * @return string Base64-encoded key\n       */\n      private static function generate_secure_key($length = 32) {\n        try {\n          // Use random_bytes for PHP 7+\n          $random_bytes = random_bytes($length);\n          return base64_encode($random_bytes);\n        } catch (\\Exception $e) {\n          // Fallback: use wp_generate_password\n          return wp_generate_password($length * 2, true, true);\n        }\n      }\n\n      /**\n       * Generate JWT token signed by secure key\n       * Uses AUTH_SALT if valid, otherwise uses plugin-specific stored key\n       *\n       * @param $payload\n       * @param int $ttl\n       * @return string\n       */\n      public static function generate_jwt_token($payload, $ttl = 3600) {\n        $payload = wp_parse_args($payload, [\n          'iat' => $now = time(),\n          'iss' => $site_url = get_site_url(),\n          'aud' => $site_url,\n          'exp' => $now + $ttl\n        ]);\n\n        $key = self::get_jwt_signing_key();\n        return JWT::encode($payload, $key, 'HS256');\n      }\n\n      /**\n       * Verify and decode token\n       * Uses the same secure key retrieval as generation\n       * Throws exceptions if cannot decode\n       *\n       * @param $token\n       * @return object\n       * @throws \\Exception\n       */\n      public static function verify_jwt_token($token) {\n        $key = self::get_jwt_signing_key();\n        return JWT::decode($token, new Key($key, 'HS256'));\n      }\n\n      /**\n       * Generate auth token for wizard iframe\n       *\n       * @param int $ttl\n       * @return string\n       */\n      public static function generate_wizard_auth_token($ttl = 3600) {\n        $payload = [\n          'is_network' => is_network_admin(),\n          'user_id' => get_current_user_id()\n        ];\n        return self::generate_jwt_token($payload, $ttl);\n      }\n\n      /**\n       * Maps a file extensions to a mimetype.\n       *\n       * @param $extension string The file extension.\n       *\n       * @return string|null\n       * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types\n       */\n      public static function mimetype_from_extension($extension) {\n        $file_type = wp_check_filetype($extension);\n        if (!empty($file_type['type'])) {\n          return $file_type['type'];\n        }\n        static $mimetypes = [\n          '7z' => 'application/x-7z-compressed',\n          'aac' => 'audio/x-aac',\n          'ai' => 'application/postscript',\n          'aif' => 'audio/x-aiff',\n          'asc' => 'text/plain',\n          'asf' => 'video/x-ms-asf',\n          'atom' => 'application/atom+xml',\n          'avi' => 'video/x-msvideo',\n          'bmp' => 'image/bmp',\n          'bz2' => 'application/x-bzip2',\n          'cer' => 'application/pkix-cert',\n          'crl' => 'application/pkix-crl',\n          'crt' => 'application/x-x509-ca-cert',\n          'css' => 'text/css',\n          'csv' => 'text/csv',\n          'cu' => 'application/cu-seeme',\n          'deb' => 'application/x-debian-package',\n          'doc' => 'application/msword',\n          'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n          'dvi' => 'application/x-dvi',\n          'eot' => 'application/vnd.ms-fontobject',\n          'eps' => 'application/postscript',\n          'epub' => 'application/epub+zip',\n          'etx' => 'text/x-setext',\n          'flac' => 'audio/flac',\n          'flv' => 'video/x-flv',\n          'gif' => 'image/gif',\n          'gz' => 'application/gzip',\n          'htm' => 'text/html',\n          'html' => 'text/html',\n          'ico' => 'image/x-icon',\n          'ics' => 'text/calendar',\n          'ini' => 'text/plain',\n          'iso' => 'application/x-iso9660-image',\n          'jar' => 'application/java-archive',\n          'jpe' => 'image/jpeg',\n          'jpeg' => 'image/jpeg',\n          'jpg' => 'image/jpeg',\n          'js' => 'text/javascript',\n          'json' => 'application/json',\n          'latex' => 'application/x-latex',\n          'log' => 'text/plain',\n          'm4a' => 'audio/mp4',\n          'm4v' => 'video/mp4',\n          'mid' => 'audio/midi',\n          'midi' => 'audio/midi',\n          'mov' => 'video/quicktime',\n          'mp3' => 'audio/mpeg',\n          'mp4' => 'video/mp4',\n          'mp4a' => 'audio/mp4',\n          'mp4v' => 'video/mp4',\n          'mpe' => 'video/mpeg',\n          'mpeg' => 'video/mpeg',\n          'mpg' => 'video/mpeg',\n          'mpg4' => 'video/mp4',\n          'oga' => 'audio/ogg',\n          'ogg' => 'audio/ogg',\n          'ogv' => 'video/ogg',\n          'ogx' => 'application/ogg',\n          'pbm' => 'image/x-portable-bitmap',\n          'pdf' => 'application/pdf',\n          'pgm' => 'image/x-portable-graymap',\n          'png' => 'image/png',\n          'pnm' => 'image/x-portable-anymap',\n          'ppm' => 'image/x-portable-pixmap',\n          'ppt' => 'application/vnd.ms-powerpoint',\n          'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n          'ps' => 'application/postscript',\n          'qt' => 'video/quicktime',\n          'rar' => 'application/x-rar-compressed',\n          'ras' => 'image/x-cmu-raster',\n          'rss' => 'application/rss+xml',\n          'rtf' => 'application/rtf',\n          'sgm' => 'text/sgml',\n          'sgml' => 'text/sgml',\n          'svg' => 'image/svg+xml',\n          'swf' => 'application/x-shockwave-flash',\n          'tar' => 'application/x-tar',\n          'tif' => 'image/tiff',\n          'tiff' => 'image/tiff',\n          'torrent' => 'application/x-bittorrent',\n          'ttf' => 'application/x-font-ttf',\n          'txt' => 'text/plain',\n          'wav' => 'audio/x-wav',\n          'webm' => 'video/webm',\n          'webp' => 'image/webp',\n          'wma' => 'audio/x-ms-wma',\n          'wmv' => 'video/x-ms-wmv',\n          'woff' => 'application/x-font-woff',\n          'wsdl' => 'application/wsdl+xml',\n          'xbm' => 'image/x-xbitmap',\n          'xls' => 'application/vnd.ms-excel',\n          'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n          'xml' => 'application/xml',\n          'xpm' => 'image/x-xpixmap',\n          'xwd' => 'image/x-xwindowdump',\n          'yaml' => 'text/yaml',\n          'yml' => 'text/yaml',\n          'zip' => 'application/zip',\n        ];\n\n        $extension = strtolower($extension);\n\n        return isset($mimetypes[$extension]) ? $mimetypes[$extension] : false;\n      }\n\n      /**\n       * @param $size\n       * @return float|int\n       */\n      public static function convert_to_byte($size) {\n        $lastCharacter = \\substr($size, -1);\n        $base = \\strtoupper($lastCharacter);\n        if (!\\ctype_digit($lastCharacter)) {\n          switch ($base) {\n            case 'B':\n              $size = (int) $size;\n              break;\n            case 'K':\n              $size = (int) $size * 1024;\n              break;\n            case 'M':\n              $size = (int) $size * pow(1024, 2);\n              break;\n            case 'G':\n              $size = (int) $size * pow(1024, 3);\n              break;\n          }\n        }\n        return $size;\n      }\n\n      /**\n       * Get stateless data, count of stateless media\n       * @return mixed\n       */\n      public static function get_stateless_media_data_count() {\n        global $wpdb;\n\n        if ( !ud_get_stateless_media()->get('sm.use_postmeta') ) {\n          try {\n            return ud_stateless_db()->get_total_files();\n          } catch (\\Throwable $th) {\n          }\n        }\n\n        $stateless_media = $wpdb->get_var($wpdb->prepare(\"\n          SELECT COUNT(meta_id)\n          FROM \" . $wpdb->postmeta . \"\n          WHERE meta_key = %s\n        \", 'sm_cloud'));\n\n        return $stateless_media;\n      }\n\n      /**\n       * Get a list of instances of all available sync methods\n       */\n      public static function get_available_sync_classes() {\n        return array_filter(array_map(function ($class) {\n          if (class_exists($class)) {\n            try {\n              $class = $class::instance();\n              if (is_a($class, BackgroundSync::class)) {\n                return $class;\n              }\n              return null;\n            } catch (\\Throwable $e) {\n              error_log($e->getMessage());\n              return null;\n            }\n          }\n          return null;\n        }, apply_filters('wp_stateless_sync_types', [])));\n      }\n\n      /**\n       * Process single image attachment by id\n       * \n       * @param mixed $id Attachment ID\n       * @return \\WP_Post\n       * @throws FatalException\n       * @throws UnprocessableException\n       */\n      public static function process_image_by_id($id) {\n        if (ud_get_stateless_media()->is_connected_to_gs() !== true) {\n          throw new FatalException(__('Not connected to GCS', ud_get_stateless_media()->domain));\n        }\n\n        $image = get_post($id);\n\n        if (!$image || 'attachment' != $image->post_type || 'image/' != substr($image->post_mime_type, 0, 6))\n          throw new UnprocessableException(sprintf(__('Failed to process item: %s is an invalid image ID.', ud_get_stateless_media()->domain), $id));\n\n        $fullsizepath = get_attached_file($image->ID);\n\n        // If no file found\n        if (false === $fullsizepath || !file_exists($fullsizepath)) {\n\n          // Try get it and save\n          $result_code = ud_get_stateless_media()->get_client()->get_media(apply_filters('wp_stateless_file_name', $fullsizepath, true, \"\", \"\"), true, $fullsizepath);\n\n          if ($result_code !== 200) {\n            if (!Utility::sync_get_attachment_if_exist($image->ID, $fullsizepath)) {\n              throw new UnprocessableException(sprintf(__('Both local and remote files are missing. Unable to process. (%s)', ud_get_stateless_media()->domain), $image->guid));\n            }\n          }\n        }\n\n        do_action('sm:pre::synced::image', $id);\n        if (!function_exists('wp_generate_attachment_metadata')) {\n          require_once ABSPATH . '/wp-admin/includes/image.php';\n        }\n        $metadata = wp_generate_attachment_metadata($image->ID, $fullsizepath);\n\n        if (get_post_mime_type($image->ID) !== 'image/svg+xml') {\n          if (is_wp_error($metadata)) {\n            throw new UnprocessableException($metadata->get_error_message());\n          }\n\n          if (empty($metadata)) {\n            throw new UnprocessableException(sprintf(__('No metadata generated for %1$s (ID %2$s).', ud_get_stateless_media()->domain), esc_html(get_the_title($image->ID)), $image->ID));\n          }\n        }\n\n        // trigger processing filters\n        wp_update_attachment_metadata($image->ID, $metadata);\n        do_action('sm:synced::image', $id, $metadata);\n\n        return $image;\n      }\n\n      /**\n       * Process single attachment file by id\n       * \n       * @param mixed $id Attachment ID\n       * @return \\WP_Post\n       * @throws FatalException\n       * @throws UnprocessableException\n       */\n      public static function process_file_by_id($id) {\n        if (ud_get_stateless_media()->is_connected_to_gs() !== true) {\n          throw new FatalException(__('Not connected to GCS', ud_get_stateless_media()->domain));\n        }\n\n        $file = get_post($id);\n\n        if (!$file || 'attachment' != $file->post_type) {\n          throw new UnprocessableException(sprintf(__('Attachment not found: %s is an invalid file ID.', ud_get_stateless_media()->domain), $id));\n        }\n\n        $fullsizepath = get_attached_file($file->ID);\n        $local_file_exists = file_exists($fullsizepath);\n\n        if (false === $fullsizepath || !$local_file_exists) {\n\n          // Try get it and save\n          $result_code = ud_get_stateless_media()->get_client()->get_media(apply_filters('wp_stateless_file_name', $fullsizepath, true, \"\", \"\"), true, $fullsizepath);\n\n          if ($result_code !== 200) {\n            if (!Utility::sync_get_attachment_if_exist($file->ID, $fullsizepath)) { // Save file to local from proxy.\n              throw new UnprocessableException(sprintf(__('File not found (%s)', ud_get_stateless_media()->domain), $file->guid));\n            } else {\n              $local_file_exists = true;\n            }\n          } else {\n            $local_file_exists = true;\n          }\n        }\n\n        if ($local_file_exists) {\n\n          if (!ud_get_stateless_media()->get_client()->media_exists(apply_filters('wp_stateless_file_name', $fullsizepath, true, \"\", \"\"))) {\n\n            if (!function_exists('wp_generate_attachment_metadata')) {\n              require_once ABSPATH . '/wp-admin/includes/media.php';\n              require_once ABSPATH . '/wp-admin/includes/image.php';\n            }\n            $metadata = wp_generate_attachment_metadata($file->ID, $fullsizepath);\n\n            if (is_wp_error($metadata)) {\n              throw new UnprocessableException($metadata->get_error_message());\n            }\n\n            wp_update_attachment_metadata($file->ID, $metadata);\n            do_action('sm:synced::nonImage', $id, $metadata);\n          } else {\n            // Ephemeral and Stateless modes: we don't need the local version.\n            if (ud_get_stateless_media()->get('sm.mode') === 'ephemeral' || ud_get_stateless_media()->get('sm.mode') === 'stateless') {\n              @unlink($fullsizepath);\n\n              $metadata = wp_get_attachment_metadata($file->ID);\n              /**\n               * removing thumbnails\n               * https://github.com/udx/wp-stateless/issues/577\n               */\n              if (!empty($metadata['sizes'])) {\n                $base_dir = dirname($fullsizepath);\n                foreach ($metadata['sizes'] as $image_size => $data) {\n                  $gs_name = $base_dir . '/' . $data['file'];\n                  if (file_exists($gs_name)) {\n                    @unlink($gs_name);\n                  }\n                }\n              }\n            }\n          }\n        }\n\n        return $file;\n      }\n\n      /**\n       * Return list of files in a dir.\n       * @param string $dir: Directory path\n       * @return array - Lists of files in the directory and subdirectory.\n       */\n      public static function get_files($dir) {\n        $return = array();\n        if (is_dir($dir) && $dh = opendir($dir)) {\n          while ($file = readdir($dh)) {\n            if ($file != '.' && $file != '..') {\n              if (is_dir($dir . $file)) {\n                // since it is a directory we recursively get files.\n                $arr = self::get_files($dir . $file . '/');\n                $return = array_merge($return, $arr);\n              } else {\n                $return[] = $dir . $file;\n              }\n            }\n          }\n          closedir($dh);\n        }\n        \n        return $return;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/compatibility/ewww.php",
    "content": "<?php\n/**\n * Plugin Name: EWWW Image Optimizer\n * Plugin URI: https://ewww.io/\n *\n * Compatibility Description: Enables support for these EWWW Image Optimizer Image Optimizer features\n *\n * https://github.com/wpCloud/wp-stateless/issues/371\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if( !class_exists( 'wpCloud\\StatelessMedia\\EWWW' ) ) {\n\n    class EWWW extends Compatibility {\n      protected $id = 'ewww';\n      protected $title = 'EWWW Image Optimizer';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_EWWW';\n      protected $description = 'Enables limited support for EWWW Image Optimizer in CDN mode.';\n      protected $plugin_file = [ 'ewww-image-optimizer/ewww-image-optimizer.php' ];\n      protected $sm_mode_not_supported = [ 'stateless' ];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      public function module_init( $sm ) {\n        // add_filter( 'ewww_image_optimizer_pre_optimization', array($this, 'pre_optimization'), 10, 3 );\n        add_action( 'ewww_image_optimizer_post_optimization', array( $this, 'post_optimization' ), 10, 3 );\n      }\n\n      /**\n       * Try to restore images before compression\n       *\n       * @param $file\n       * @param $type\n       * @param $fullsize\n       */\n      public function pre_optimization( $file, $type, $fullsize ) {\n        // wp_stateless_file_name filter will remove the basedir from the path and prepend with root dir.\n        $name = apply_filters( 'wp_stateless_file_name', $file );\n        do_action( 'sm:sync::syncFile', $name, $file, true, array( 'ephemeral' => false, 'download' => true, 'use_root' => true ) );\n      }\n\n      /**\n       * If image size not exist then upload it to GS.\n       *\n       * @param $file\n       * @param $type\n       * @param $fullsize\n       */\n      public function post_optimization( $file, $type, $fullsize ) {\n        // wp_stateless_file_name filter will remove the basedir from the path and prepend with root dir.\n        $name = apply_filters( 'wp_stateless_file_name', $file );\n        do_action( 'sm:sync::syncFile', $name, $file, true, array( 'use_root' => true ) );\n\n\n        // if($fullsize && file_exists($file . '.bak'))\n        //     do_action( 'sm:sync::syncFile', $name . '.bak', $file . '.bak', true);\n\n        if( file_exists( $file . '.webp' ) ) {\n          add_filter( 'upload_mimes', array( $this, 'add_webp_mime' ), 10, 2 );\n          do_action( 'sm:sync::syncFile', $name . '.webp', $file . '.webp', true, array( 'use_root' => true ) );\n          remove_filter( 'upload_mimes', array( $this, 'add_webp_mime' ), 10 );\n        }\n      }\n\n    }\n\n  }\n\n}\n"
  },
  {
    "path": "lib/classes/compatibility/imagify.php",
    "content": "<?php\n\n/**\n * Plugin Name: Imagify\n * Plugin URI: https://wordpress.org/plugins/imagify/\n *\n * Compatibility Description: Enables support for these Imagify Image Optimizer features:\n * auto-optimize images on upload, bulk optimizer, resize larger images, optimization levels (normal, aggressive, ultra).\n *\n * https://github.com/wpCloud/wp-stateless/issues/206\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\Imagify')) {\n\n    class Imagify extends Compatibility {\n      protected $id = 'imagify';\n      protected $title = 'Imagify Image Optimizer';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_IMAGIFY';\n      protected $description = 'Enables support for these Imagify Image Optimizer features: auto-optimize images on upload, bulk optimizer, resize larger images, optimization levels (normal, aggressive, ultra).';\n      protected $plugin_file = ['imagify/imagify.php', 'imagify-plugin/imagify.php'];\n      protected $sm_mode_not_supported = ['stateless'];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      public function module_init($sm) {\n        // Skip sync on upload when attachment is image, sync will be handled after image is optimized.\n        // Disabling for now because it's cause problem.\n        //add_filter( 'wp_stateless_skip_add_media', array( $this, 'skip_add_media' ), 10, 5 );\n        add_filter('before_imagify_optimize_attachment', array($this, 'fix_missing_file'), 10);\n        add_action('after_imagify_optimize_attachment', array($this, 'after_imagify_optimize_attachment'), 10);\n\n        //hook for Imagify since version 1.9\n        add_filter('wp_stateless_skip_remove_media', array($this, 'skip_remove_media'), 10, 5);\n        add_action('imagify_after_optimize_file', array($this, 'imagify_after_optimize_file'), 10, 2);\n        add_action('imagify_before_optimize_size', array($this, 'imagify_before_optimize_size'), 10, 7);\n\n        // if imagify implement this filter then enable it.\n        add_filter('imagify_has_backup', array($this, 'imagify_has_backup'), 10, 2);\n\n        add_filter('before_imagify_restore_attachment', array($this, 'get_image_from_gcs'), 10);\n        add_action('after_imagify_restore_attachment', array($this, 'after_imagify_optimize_attachment'), 10);\n        // Sync from sync tab\n        add_action('sm:synced::image', array($this, 'get_image_from_gcs'));\n      }\n\n      /**\n       * Whether to skip the sync on image upload before the image is optimized.\n       * The sync is skipped if the image is compatible with Smush.\n       *\n       * The image will be synced after it's get optimized using the 'wp_smush_image_optimised' action.\n       *\n       *\n       * @param bool $return This should return true if want to skip the sync.\n       * @param int $metadata Metadata for the attachment.\n       * @param string $attachment_id Attachment ID.\n       * @param bool $force Whether to force the sync even the file already exist in GCS.\n       * @param array $args Whether to only sync the full size image.\n       *\n       * @return bool  $return         True to skip the sync and false to do the sync.\n       *\n       */\n      public function skip_add_media($return, $metadata, $attachment_id, $force = false, $args = array()) {\n        global $doing_manual_sync;\n\n        if ($force || $doing_manual_sync || !get_imagify_option('auto_optimize')) return false;\n\n        $imagify = new \\Imagify_Attachment($attachment_id);\n        if (is_callable(array($imagify, 'is_extension_supported'))) {\n          if (!$imagify->is_extension_supported()) {\n            return false;\n          }\n        } elseif (function_exists('imagify_is_attachment_mime_type_supported')) {\n          // Use `imagify_is_attachment_mime_type_supported( $attachment_id )`.\n          if (!imagify_is_attachment_mime_type_supported($attachment_id)) {\n            return false;\n          }\n        } elseif (!wp_attachment_is_image($attachment_id)) {\n          return false;\n        }\n\n        return true;\n      }\n\n      /**\n       * Added fix for Imagify version 1.9\n       * In Ephemeral mode remove files from server after optimization process `imagify_after_optimize_file`\n       * @param $return\n       * @param $metadata\n       * @param $attachment_id\n       * @param bool $force\n       * @param array $args\n       * @return bool\n       * @author palant@ud\n       */\n      public function skip_remove_media($return, $metadata, $attachment_id, $force = false, $args = array()) {\n        global $doing_manual_sync;\n\n        if ($force || $doing_manual_sync || !get_imagify_option('auto_optimize')) return false;\n\n        $imagify = new \\Imagify\\Optimization\\File(get_attached_file($attachment_id));\n\n        if (is_callable(array($imagify, 'is_supported'))) {\n          if (!$imagify->is_supported(imagify_get_mime_types())) {\n            return false;\n          }\n        } elseif (function_exists('imagify_is_attachment_mime_type_supported')) {\n          // Use `imagify_is_attachment_mime_type_supported( $attachment_id )`.\n          if (!imagify_is_attachment_mime_type_supported($attachment_id)) {\n            return false;\n          }\n        } elseif (!wp_attachment_is_image($attachment_id)) {\n          return false;\n        }\n\n        return true;\n      }\n\n      /**\n       * Try to restore images before compression\n       *\n       * @param $attachment_id\n       * @return mixed\n       */\n      public function fix_missing_file($attachment_id) {\n        /**\n         * If mode is ephemeral then we change it to cdn in order images not being deleted before optimization\n         * Remember that we changed mode via global var\n         */\n        if (ud_get_stateless_media()->get('sm.mode') == 'ephemeral') {\n          ud_get_stateless_media()->set('sm.mode', 'cdn');\n          global $wp_stateless_imagify_mode;\n          $wp_stateless_imagify_mode = 'ephemeral';\n        }\n\n        $upload_basedir = wp_upload_dir();\n        $upload_basedir = trailingslashit($upload_basedir['basedir']);\n        $meta_data = wp_get_attachment_metadata($attachment_id);\n        $file = $upload_basedir . $meta_data['file'];\n\n        /**\n         * Try to get all missing files from GCS\n         */\n        if (!file_exists($file)) {\n          ud_get_stateless_media()->get_client()->get_media(apply_filters('wp_stateless_file_name', $meta_data['file']), true, $file);\n        }\n\n        if (!empty($meta_data['sizes']) && is_array($meta_data['sizes'])) {\n          $upload_basedir = trailingslashit(dirname($file));\n          foreach ($meta_data['sizes'] as $image) {\n            if (!empty($image['gs_name']) && !file_exists($file = $upload_basedir . $image['file'])) {\n              ud_get_stateless_media()->get_client()->get_media(apply_filters('wp_stateless_file_name', $image['gs_name']), true, $file);\n            }\n          }\n        }\n      }\n\n      /**\n       * If image size not exist then upload it to GS.\n       *\n       * $args = array(\n       *      'thumbnail' => $thumbnail,\n       *      'p_img_large' => $p_img_large,\n       *   )\n       * @param $id\n       */\n      public function after_imagify_optimize_attachment($id) {\n        /**\n         * Restore ephemeral mode if needed\n         */\n        global $wp_stateless_imagify_mode;\n        if ($wp_stateless_imagify_mode == 'ephemeral') {\n          ud_get_stateless_media()->set('sm.mode', 'ephemeral');\n        }\n\n        $metadata = wp_get_attachment_metadata($id);\n        ud_get_stateless_media()->add_media($metadata, $id, true);\n\n        // Sync backup file with GCS\n        if (current_filter() == 'after_imagify_optimize_attachment') {\n          /**\n           * If mode is ephemeral then we change it to cdn in order images not being deleted before optimization\n           * Remember that we changed mode via global var\n           * @todo remove if Imagify implement \"imagify_has_backup\" filter.\n           */\n          if (ud_get_stateless_media()->get('sm.mode') == 'ephemeral') {\n            ud_get_stateless_media()->set('sm.mode', 'cdn');\n            global $wp_stateless_imagify_mode;\n            $wp_stateless_imagify_mode = 'ephemeral';\n          }\n\n          $file_path = get_attached_file($id);\n          $backup_path = get_imagify_attachment_backup_path($file_path);\n          if (file_exists($backup_path)) {\n            $overwrite = apply_filters('imagify_backup_overwrite_backup', false, $file_path, $backup_path);\n            // wp_stateless_file_name filter will remove the basedir from the path and prepend with root dir.\n            $name = apply_filters('wp_stateless_file_name', $backup_path);\n            do_action('sm:sync::syncFile', $name, $backup_path, $overwrite);\n          }\n        }\n      }\n\n      /**\n       * Restore backup file from GCS if not exist.\n       * @param $id\n       */\n      public function get_image_from_gcs($id) {\n        $file_path = get_attached_file($id);\n        $backup_path = get_imagify_attachment_backup_path($file_path);\n        if (!file_exists($backup_path)) {\n          $upload_dir = wp_upload_dir();\n          $name = str_replace(trailingslashit($upload_dir['basedir']), '', $backup_path);\n          $name = apply_filters('wp_stateless_file_name', $name);\n          do_action('sm:sync::syncFile', $name, $backup_path, true);\n        }\n      }\n\n      /**\n       * Check if backup exists in GCS.\n       * @param $return\n       * @param $has_backup\n       * @return bool\n       */\n      public function imagify_has_backup($return, $has_backup) {\n        if (!$return && $has_backup) {\n          $name = apply_filters('wp_stateless_file_name', $has_backup);\n          $return = (bool) apply_filters('sm:sync::queue_is_exists', $name);\n        }\n        return $return;\n      }\n\n      /**\n       * Synchronization after optmize process\n       * @param $file\n       * @param array $args\n       */\n      public function imagify_after_optimize_file($file, $args = array()) {\n\n        global $wp_stateless_imagify_mode;\n        if ($wp_stateless_imagify_mode == 'ephemeral') {\n          ud_get_stateless_media()->set('sm.mode', 'ephemeral');\n        }\n\n        $name = apply_filters('wp_stateless_file_name', basename($file));\n\n        if (file_exists($file)) {\n          add_filter('upload_mimes', array($this, 'add_webp_mime'), 10, 2);\n          /**\n           * Media already on GCS, so only replacing data on it. For webp format adding path and status to wp_stateless_files table\n           */\n          do_action('sm:sync::syncFile', $name, $file, true, array('use_root' => true, 'skip_db' => (substr($name, -4) == \"webp\" ? false : true)));\n          remove_filter('upload_mimes', array($this, 'add_webp_mime'), 10);\n        }\n      }\n\n      /**\n       * @param $return\n       * @param $process\n       * @param $file\n       * @param $thumb_size\n       * @param $optimization_level\n       * @param $webp\n       * @param $is_disabled\n       * @return mixed\n       */\n      public function imagify_before_optimize_size($return, $process, $file, $thumb_size, $optimization_level, $webp, $is_disabled) {\n\n        try {\n          $attachment_id = $this->getProperties($this->getProperties($this->getProperties($process)['data'])['media'])['id'];\n\n          $full_size_path = $file->get_path();\n          $name = apply_filters('wp_stateless_file_name', basename($full_size_path), true, $attachment_id);\n          do_action('sm:sync::syncFile', $name, $full_size_path, true, ['download' => true]);\n          // error_log(\"\\n\\ndo_action( 'sm:sync::syncFile', $name, $full_size_path, true, ['download' => true] );\");\n        } catch (\\Throwable $th) {\n          //throw $th;\n        }\n        return $return;\n      }\n\n      /**\n       * Get properties from protected value\n       * @param $process\n       * @return array\n       */\n      public function getProperties($process) {\n        $properties = array();\n        try {\n          $rc = new \\ReflectionClass($process);\n          do {\n            $rp = array();\n            /* @var $p \\ReflectionProperty */\n            foreach ($rc->getProperties() as $p) {\n              $p->setAccessible(true);\n              $rp[$p->getName()] = $p->getValue($process);\n            }\n            $properties = array_merge($rp, $properties);\n          } while ($rc = $rc->getParentClass());\n        } catch (\\ReflectionException $e) {\n        }\n        return $properties;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/compatibility/js/shortpixel.js",
    "content": "/**\n * Overriding sliderUpdate() function of shortpixel-image-optimiser\\res\\js\\short-pixel.js\n * We need to replace sites url with GCS url \n */\n\n// backing up original function\nvar _bk_sliderUpdate = sliderUpdate;\n\n// overriding the original function\nsliderUpdate = function sliderUpdate(id, thumb, bkThumb, percent, filename) {\n  // replacing sites url with GCS url.\n  thumb = thumb.replace(\n    _stateless_short_pixel.baseurl,\n    _stateless_short_pixel.bucketLink\n  );\n  // using original function aftr altering thumb url.\n  _bk_sliderUpdate(id, thumb, bkThumb, percent, filename);\n};"
  },
  {
    "path": "lib/classes/compatibility/learn-dash.php",
    "content": "<?php\n\n/**\n * Compatibility Plugin Name: WordPress LMS Plugin by LearnDash®\n * Compatibility Plugin URI: https://www.learndash.com/\n *\n * Compatibility Description: Ensures compatibility with LearnDash®.\n *\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\LearnDash')) {\n\n    class LearnDash extends Compatibility {\n      protected $id = 'sfwd-lms';\n      protected $title = 'LearnDash LMS';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_LEARNDASH_LMS';\n      protected $description = 'Ensures compatibility with LearnDash.';\n      protected $plugin_file = ['sfwd-lms/sfwd_lms.php'];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      /**\n       * @param $sm\n       */\n      public function module_init($sm) {\n        // exclude randomize_filename from LearnDash page\n        add_filter('stateless_skip_cache_busting', array($this, 'skip_cache_busting'), 10, 2);\n      }\n\n      /**\n       * Whether skip cache busting or not.\n       *\n       * @param $return\n       * @param $filename\n       * @return mixed\n       */\n      public function skip_cache_busting($return, $filename) {\n        if (strpos($filename, 'sfwd-') === 0 || $this->hook_from_learndash()) {\n          return $filename;\n        }\n        return $return;\n      }\n\n      /**\n       * Determine where we hook from\n       * We need to do this only for something specific in LearnDash plugin\n       *\n       * @return bool\n       */\n      private function hook_from_learndash() {\n        $call_stack = debug_backtrace();\n        if (\n          !empty($call_stack[6]['function']) &&\n          $call_stack[6]['function'] == 'sanitize_file_name' &&\n          (strpos($call_stack[6]['file'], 'class-ld-semper-fi-module.php') ||\n            strpos($call_stack[6]['file'], 'class-ld-cpt-instance.php'))\n        ) {\n          return true;\n        }\n\n        return false;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/compatibility/shortpixel.php",
    "content": "<?php\n\n/**\n * Compatibility Plugin Name: ShortPixel Image Optimizer\n * Compatibility Plugin URI: https://wordpress.org/plugins/shortpixel-image-optimiser/\n *\n * Compatibility Description: Ensures compatibility with ShortPixel Image Optimizer.\n *\n * We don't need to download image to server from GCS to optimize image. As it can directly use GCS URL.\n *\n * @todo Use backup version of image on Regenerate and Sync with GCS.\n * @todo Restore image now download from backup dir then upload to regular GCS path again. We need to fix that.\n *          https://cloud.google.com/storage/docs/renaming-copying-moving-objects#copy\n * @todo implement a customized version of ShortPixelMetaFacade::getURLsAndPATHs() function.\n * @todo convert GCS URL from http://storage.googleapis.com/udx-ci-develop-alim/ to http://udx-ci-develop-alim.storage.googleapis.com\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\ShortPixel')) {\n\n    class ShortPixel extends Compatibility {\n\n      protected $id = 'shortpixel';\n      protected $title = 'ShortPixel Image Optimizer';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_SHORTPIXEL';\n      protected $description = 'Ensures compatibility with ShortPixel Image Optimizer.';\n      protected $plugin_file = 'shortpixel-image-optimiser/wp-shortpixel.php';\n      protected $sm_mode_not_supported = ['stateless'];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      /**\n       * @param $sm\n       */\n      public function module_init($sm) {\n        add_action('shortpixel_image_optimised', array($this, 'shortpixel_image_optimised'));\n        add_filter('shortpixel_image_exists', array($this, 'shortpixel_image_exists'), 10, 3);\n        // A way to disable the URL conversion to subdomain format.\n        if (!defined('WP_STATELESS_MEDIA_SHORTPIXEL_DISABLE_SUBDOMAIN_LINK') || !WP_STATELESS_MEDIA_SHORTPIXEL_DISABLE_SUBDOMAIN_LINK) {\n          // URL conversion to subdomain format {bucket}.storage.googleapis.com instead of storage.googleapis.com/{bucket}\n          // So that ShortPixel don't count all Stateless request as one domain.\n          add_filter('shortpixel_image_urls', array($this, 'shortpixel_image_urls'), 10, 2);\n        }\n        add_filter('shortpixel_skip_backup', array($this, 'shortpixel_skip_backup'), 10, 3);\n        add_filter('wp_update_attachment_metadata', array($this, 'wp_update_attachment_metadata'), 10, 2);\n        // Remove backup and webp version of image.\n        add_filter('shortpixel_skip_delete_backups_and_webps', array($this, 'shortpixel_skip_delete_backups_and_webps'), 10, 2);\n        add_filter('shortpixel_backup_folder', array($this, 'getBackupFolderAny'), 10, 3);\n        add_filter('wp_stateless_add_media_args', array($this, 'wp_stateless_add_media_args'));\n        add_filter('shortpixel_webp_image_base', array($this, 'shortpixel_webp_image_base'), 10, 2);\n        // add_filter( 'shortpixel_skip_restore_image', array( $this, 'shortpixel_skip_restore_image' ), 10, 2 );\n\n        add_action('shortpixel_before_restore_image', array($this, 'shortpixel_before_restore_image'));\n        add_action('shortpixel_after_restore_image', array($this, 'handleRestoreBackup'));\n        add_action('admin_enqueue_scripts', array($this, 'shortPixelJS'));\n        // Sync from sync tab\n        add_action('sm:synced::image', array($this, 'sync_backup_file'), 10, 2);\n        add_action('sm:synced::image', array($this, 'sync_webp_file'), 10, 2);\n      }\n\n      public function shortPixelJS() {\n        $upload_dir = wp_upload_dir();\n\n        wp_enqueue_script('stateless-short-pixel', ud_get_stateless_media()->path('lib/classes/compatibility/js/shortpixel.js', 'url'), array('shortpixel'), '', true);\n\n        $image_host = ud_get_stateless_media()->get_gs_host();\n        $bucketLink = apply_filters('wp_stateless_bucket_link', $image_host);\n\n        wp_localize_script('stateless-short-pixel', '_stateless_short_pixel', array('baseurl' => $upload_dir['baseurl'], 'bucketLink' => $bucketLink,));\n      }\n\n      /**\n       * Return Path of ShortPixel backup path.\n       * Bypass the checking whether a backup file exist when returning backup path.\n       * @todo check on GCS if backup really exist. Maybe we can implement transient caching for performance.\n       *\n       * @param $ret\n       * @param $file\n       * @param $thumbs\n       * @return string\n       */\n      public function getBackupFolderAny($ret, $file, $thumbs) {\n        if ($ret == false) {\n          $fullSubDir = $this->returnSubDir($file);\n          $ret = SHORTPIXEL_BACKUP_FOLDER . '/' . $fullSubDir;\n        }\n        return $ret;\n      }\n\n      /**\n       * Check whether image exist on GCS.\n       * Only when image is not available on server.\n       *\n       * @param $return\n       * @param $path\n       * @param null $id\n       * @return bool\n       */\n      public function shortpixel_image_exists($return, $path, $id = null) {\n        if ($return) return $return;\n\n        $key = \"stateless_url_to_postid_\" . md5($path);\n        $return = get_transient($key);\n        // echo \"\\npath: $path \\nKey: $key\\nReturn: $return\\nID: $id\\n  \";\n        if (!$return) {\n          // Checking by matching file name in gs_name and $path.\n          if (!empty($id)) {\n            $metadata = wp_get_attachment_metadata($id);\n            $basename = basename($path);\n            if (!empty($metadata['gs_name'])) {\n              $gs_basename = basename($metadata['gs_name']);\n              if ($gs_basename == $basename) {\n                $return = true;\n              }\n\n              if (is_array($metadata['sizes'])) {\n                foreach ($metadata['sizes'] as $key => &$data) {\n                  if (empty($data['gs_name'])) continue;\n                  $gs_basename = basename($data['gs_name']);\n                  if ($gs_basename == $basename) {\n                    $return = true;\n                  }\n                }\n              }\n            }\n          } // Directly check on GCS if image exist.\n          else if (empty($id)) {\n            $wp_uploads_dir = wp_get_upload_dir();\n            $gs_name = str_replace(trailingslashit($wp_uploads_dir['basedir']), '', $path);\n            $gs_name = str_replace(trailingslashit($wp_uploads_dir['baseurl']), '', $gs_name);\n            $gs_name = str_replace(trailingslashit(ud_get_stateless_media()->get_gs_host()), '', $gs_name);\n            $gs_name = apply_filters('wp_stateless_file_name', $gs_name);\n            if ($media = ud_get_stateless_media()->get_client()->media_exists($gs_name)) {\n              $return = true;\n            }\n          }\n          set_transient($key, $return, 10 * MINUTE_IN_SECONDS);\n        }\n        return $return;\n      }\n\n      /**\n       * Short-circuit filter.\n       * We need to remove backup image from GCS when shortpixel tries to delete from server.\n       * We are returning true to short-circuit in ephemeral mode, because file not exist in server.\n       *\n       * @param $return\n       * @param $paths\n       * @return bool\n       */\n      public function shortpixel_skip_delete_backups_and_webps($return, $paths) {\n        if (empty($paths) || !is_array($paths)) return $return;\n\n        $sp__uploads = wp_upload_dir();\n        $fullSubDir = $this->returnSubDir($paths[0]);\n        $backup_path = SHORTPIXEL_BACKUP_FOLDER . '/' . $fullSubDir;\n\n        foreach ($paths as $key => $path) {\n          // Removing backup\n          $name = apply_filters('wp_stateless_file_name', SHORTPIXEL_BACKUP . '/' . $fullSubDir . basename($path));\n          do_action('sm:sync::deleteFile', $name);\n\n          // Removing WebP\n          $backup_images = \\WPShortPixelSettings::getOpt('wp-short-create-webp');\n          if ($backup_images) {\n            $name = str_replace($sp__uploads['basedir'], '', $path);\n            $name = apply_filters('wp_stateless_file_name', $name . '.webp');\n            do_action('sm:sync::deleteFile', $name);\n          }\n        }\n\n        if (ud_get_stateless_media()->get('sm.mode') == 'ephemeral') {\n          return true;\n        }\n        // When ephemeral mode isn't set backup files will be available in server. So no short-circuit.\n        return $return;\n      }\n\n      /**\n       * Skip the original backup process in ephemeral mode.\n       *\n       * @param $return\n       * @param $mainPath\n       * @param $PATHs\n       * @return bool\n       */\n      public function shortpixel_skip_backup($return, $mainPath, $PATHs) {\n        if (ud_get_stateless_media()->get('sm.mode') == 'ephemeral') {\n          return true;\n        }\n        return $return;\n      }\n\n      /**\n       * In ephemeral mode we need to take backup directly from original location.\n       * Because we will skip the backup process of shortpixel.\n       *\n       * @param $metadata\n       * @param $attachment_id\n       * @return mixed\n       */\n      public function wp_update_attachment_metadata($metadata, $attachment_id) {\n        if (ud_get_stateless_media()->get('sm.mode') == 'ephemeral') {\n          $backup_images = \\WPShortPixelSettings::getOpt('wp-short-backup_images');\n          if ($backup_images) {\n            $this->sync_backup_file($attachment_id, $metadata, false, array('before_optimization' => true));\n          }\n        }\n        return $metadata;\n      }\n\n      /**\n       * Sync image after optimization.\n       *\n       * @param $id\n       */\n      public function shortpixel_image_optimised($id) {\n        $metadata = wp_get_attachment_metadata($id);\n        ud_get_stateless_media()->add_media($metadata, $id, true);\n        // Sync the webp to GCS\n        $create_webp = \\WPShortPixelSettings::getOpt('wp-short-create-webp');\n        if ($create_webp) {\n          $this->sync_webp_file($id, $metadata);\n        }\n        // Don't needed in ephemeral mode. In ephemeral mode the back will be sync once on wp_update_attachment_metadata filter.\n        if (ud_get_stateless_media()->get('sm.mode') !== 'ephemeral') {\n          $this->sync_backup_file($id, $metadata, true);\n        }\n      }\n\n      /**\n       * Before shortpixel tries to restore from backup we need to make files available on server.\n       *\n       * @param $id\n       * @param null $metadata\n       */\n      public function shortpixel_before_restore_image($id, $metadata = null) {\n        $this->sync_backup_file($id, $metadata, true, array('download' => true));\n      }\n\n      /**\n       * Disable default shortpixel restore and directly update image on GCS from backup copy in GCS.\n       *\n       * @param $return\n       * @param null $id\n       * @return bool\n       */\n      public function shortpixel_skip_restore_image($return, $id = null) {\n        if (ud_get_stateless_media()->get('sm.mode') === 'ephemeral') {\n          $this->client = ud_get_stateless_media()->get_client();\n          $this->client->copy_media('localhost/ShortpixelBackups/wp-content/uploads/2019/04/htpps.png', 'localhost/2019/04/htpps.png');\n          return true;\n        }\n        return $return;\n      }\n\n      /**\n       * Sync backup image\n       *\n       * @param $id\n       * @param null $metadata\n       * @param bool $force\n       * @param array $args\n       * before_optimization : pass true if you want to sync directly from original path instead of backup path.\n       */\n      public function sync_backup_file($id, $metadata = null, $force = false, $args = array()) {\n        $args = wp_parse_args($args, array(\n          'download' => false, // whether to only download.\n          'before_optimization' => false, // whether to delete local file in ephemeral mode.\n        ));\n\n        /* Get metadata in case if method is called directly. */\n        if (empty($metadata)) {\n          $metadata = wp_get_attachment_metadata($id);\n        }\n        /* Now we go through all available image sizes and upload them to Google Storage */\n        if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {\n\n          // Sync backup file with GCS\n          $file_path = get_attached_file($id);\n          $fullSubDir = $this->returnSubDir($file_path);\n          $backup_path = SHORTPIXEL_BACKUP_FOLDER . '/' . $fullSubDir;\n          if ($args['before_optimization']) {\n            $upload_dir = wp_upload_dir();\n            $backup_path = $upload_dir['basedir'] . '/' . dirname($metadata['file']);\n            $args = array('ephemeral' => false);\n          }\n\n          $absolutePath = trailingslashit($backup_path) . basename($metadata['file']);\n          $name = apply_filters('wp_stateless_file_name', SHORTPIXEL_BACKUP . '/' . $fullSubDir . basename($metadata['file']));\n          do_action('sm:sync::syncFile', $name, $absolutePath, $force, $args);\n\n          foreach ((array) $metadata['sizes'] as $image_size => $data) {\n            $absolutePath = trailingslashit($backup_path) . $data['file'];\n            $name = apply_filters('wp_stateless_file_name', SHORTPIXEL_BACKUP . '/' . $fullSubDir . $data['file']);\n\n            do_action('sm:sync::syncFile', $name, $absolutePath, $force, $args);\n          }\n        }\n      }\n\n      /**\n       * Sync from sync tab\n       *\n       * @param $id\n       * @param null $metadata\n       */\n      public function sync_webp_file($id, $metadata = null) {\n        /* Get metadata in case if method is called directly. */\n        if (empty($metadata)) {\n          $metadata = wp_get_attachment_metadata($id);\n        }\n        add_filter('upload_mimes', array($this, 'add_webp_mime'), 10, 2);\n        // Sync the webp to GCS\n        ud_get_stateless_media()->add_media($metadata, $id, true, array('is_webp' => '.webp'));\n        remove_filter('upload_mimes', array($this, 'add_webp_mime'), 10);\n      }\n\n      /**\n       * return subdir for that particular attached file - if it's media library then last 3 path items, otherwise substract the uploads path\n       * Has trailing directory separator (/)\n       *\n       * @copied from shortpixel-image-optimiser\\class\\db\\shortpixel-meta-facade.php\n       * @param type $file\n       * @return string\n       */\n      public function returnSubDir($file) {\n        $hp = wp_normalize_path(get_home_path());\n        $file = wp_normalize_path($file);\n        $sp__uploads = wp_upload_dir();\n        if (strstr($file, $hp)) {\n          $path = str_replace($hp, \"\", $file);\n        } elseif (strstr($file, dirname(WP_CONTENT_DIR))) { //in some situations the content dir is not inside the root, check this also (ex. single.shortpixel.com)\n          $path = str_replace(trailingslashit(dirname(WP_CONTENT_DIR)), \"\", $file);\n        } elseif ((strstr(realpath($file), realpath($hp)))) {\n          $path = str_replace(realpath($hp), \"\", realpath($file));\n        } elseif (strstr($file, trailingslashit(dirname(dirname($sp__uploads['basedir']))))) {\n          $path = str_replace(trailingslashit(dirname(dirname($sp__uploads['basedir']))), \"\", $file);\n        } else {\n          $path = (substr($file, 1));\n        }\n        $pathArr = explode('/', $path);\n        unset($pathArr[count($pathArr) - 1]);\n        return implode('/', $pathArr) . '/';\n      }\n\n      /**\n       * Sync images after shortpixel restore them from backup.\n       *\n       * @param $attachmentID\n       */\n      public function handleRestoreBackup($attachmentID) {\n        $metadata = wp_get_attachment_metadata($attachmentID);\n        $this->add_media($metadata, $attachmentID);\n      }\n\n      /**\n       * Customized version of wpCloud\\StatelessMedia\\Utility::add_media()\n       * to satisfied our need in restore backup\n       * If a image isn't restored from backup then ignore it.\n       *\n       * @param $metadata\n       * @param $attachment_id\n       */\n      public static function add_media($metadata, $attachment_id) {\n        $upload_dir = wp_upload_dir();\n\n        $client = ud_get_stateless_media()->get_client();\n\n        if (!is_wp_error($client)) {\n\n          $fullsizepath = wp_normalize_path(get_attached_file($attachment_id));\n          // Make non-images uploadable.\n          if (empty($metadata['file']) && $attachment_id) {\n            $metadata = array(\"file\" => str_replace(trailingslashit($upload_dir['basedir']), '', get_attached_file($attachment_id)));\n          }\n\n          $file = wp_normalize_path($metadata['file']);\n          $image_host = ud_get_stateless_media()->get_gs_host();\n          $bucketLink = apply_filters('wp_stateless_bucket_link', $image_host);\n          $_cacheControl = \\wpCloud\\StatelessMedia\\Utility::getCacheControl($attachment_id, $metadata, null);\n          $_contentDisposition = \\wpCloud\\StatelessMedia\\Utility::getContentDisposition($attachment_id, $metadata, null);\n          $_metadata = array(\"width\" => isset($metadata['width']) ? $metadata['width'] : null, \"height\" => isset($metadata['height']) ? $metadata['height'] : null, 'object-id' => $attachment_id, 'source-id' => md5($attachment_id . ud_get_stateless_media()->get('sm.bucket')), 'file-hash' => md5($metadata['file']));\n\n          if (file_exists($fullsizepath)) {\n            $file = apply_filters('wp_stateless_file_name', $file);\n\n            /* Add default image */\n            $media = $client->add_media($_mediaOptions = array_filter(array('force' => true, 'name' => $file, 'absolutePath' => wp_normalize_path(get_attached_file($attachment_id)), 'cacheControl' => $_cacheControl, 'contentDisposition' => $_contentDisposition, 'mimeType' => get_post_mime_type($attachment_id), 'metadata' => $_metadata)));\n\n            // ephemeral mode: we don't need the local version.\n            if (ud_get_stateless_media()->get('sm.mode') === 'ephemeral') {\n              unlink($fullsizepath);\n            }\n          }\n\n          /* Now we go through all available image sizes and upload them to Google Storage */\n          if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {\n\n            $path = wp_normalize_path(dirname(get_attached_file($attachment_id)));\n            $mediaPath = apply_filters('wp_stateless_file_name', trim(dirname($metadata['file']), '\\/\\\\'));\n\n            foreach ((array) $metadata['sizes'] as $image_size => $data) {\n\n              $absolutePath = wp_normalize_path($path . '/' . $data['file']);\n\n              if (!file_exists($absolutePath)) {\n                continue;\n              }\n\n              /* Add 'image size' image */\n              $media = $client->add_media(array('force' => true, 'name' => $file_path = trim($mediaPath . '/' . $data['file'], '/'), 'absolutePath' => $absolutePath, 'cacheControl' => $_cacheControl, 'contentDisposition' => $_contentDisposition, 'mimeType' => $data['mime-type'], 'metadata' => array_merge($_metadata, array('width' => $data['width'], 'height' => $data['height'], 'child-of' => $attachment_id, 'file-hash' => md5($data['file'])))));\n\n              /* Break if we have errors. */\n              if (!is_wp_error($media)) {\n                // ephemeral mode: we don't need the local version.\n                if (ud_get_stateless_media()->get('sm.mode') === 'ephemeral') {\n                  unlink($absolutePath);\n                }\n              }\n            }\n          }\n        }\n      }\n      // End add_media\n\n      /**\n       * modifying gs_name and absolutePath so that we can upload webp image using the same Utility::add_media function.\n       *\n       * @param $args\n       * @return mixed\n       */\n      public function wp_stateless_add_media_args($args) {\n        if (!empty($args['is_webp']) && $args['is_webp']) {\n          if (\\file_exists($args['absolutePath'] . '.webp')) {\n            $args['name'] = $args['name'] . '.webp';\n            $args['absolutePath'] = $args['absolutePath'] . '.webp';\n          } else {\n            $pathinfo = pathinfo($args['absolutePath']);\n            $absolutePath = trailingslashit($pathinfo['dirname']) . $pathinfo['filename'] . '.webp';\n            if (file_exists($absolutePath)) {\n              $args['name'] = $args['name'] . '.webp';\n              $args['absolutePath'] = $absolutePath;\n            }\n          }\n          $args['mimeType'] = 'image/webp';\n        }\n        return $args;\n      }\n\n      /**\n       * Bypass server url check and return base url for GCS image.\n       *\n       * @param $imageBase\n       * @param $src\n       * @return mixed\n       */\n      public function shortpixel_webp_image_base($imageBase, $src) {\n        $gs_link = \\ud_get_stateless_media()->convert_to_gs_link($src, true);\n        if ($gs_link) {\n          $imageBase = trailingslashit(dirname($gs_link));\n        }\n        return $imageBase;\n      }\n\n      /**\n       * @param $URLs\n       * @param $id\n       * @return mixed\n       */\n      public function shortpixel_image_urls($URLs, $id) {\n        foreach ($URLs as $key => $url) {\n          $url_parts = wp_parse_url($url);\n          if ($url_parts['host'] == 'storage.googleapis.com') {\n            if (preg_match(\"@(^/?.*?/)(.*)@\", $url_parts['path'], $matches)) {\n              $bucket = trim($matches[1], '/');\n              $url_parts['path'] = $matches[2];\n              $url_parts['host'] = $bucket . '.' . $url_parts['host'];\n              $URLs[$key] = Utility::join_url($url_parts);\n            }\n          }\n        }\n        return $URLs;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/compatibility/the-events-calendar.php",
    "content": "<?php\n/**\n * Compatibility Plugin Name: TheEventsCalendar\n * Compatibility Plugin URI: https://wordpress.org/plugins/the-events-calendar/\n *\n * Compatibility Description: Ensures compatibility with The Events Calendar.\n * Noteably: The Events Calendar does not store media, but it uses a fake file called 'silence'\n *\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if( !class_exists( 'wpCloud\\StatelessMedia\\TheEventsCalendar' ) ) {\n\n    class TheEventsCalendar extends Compatibility {\n      protected $id = 'theeventscalendar';\n      protected $title = 'The Events Calendar';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_THEEVENTSCALENDAR';\n      protected $description = 'Ensures compatibility with TheEventsCalendar.';\n      protected $plugin_file = [ 'the-events-calendar/the-events-calendar.php' ];\n      protected $sm_mode_not_supported = [ ];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      /**\n       * @param $sm\n       */\n      public function module_init( $sm ) {\n        add_filter( 'stateless_skip_cache_busting', array( $this, 'skip_cache_busting' ), 10, 2 );\n      }\n\n      /**\n       * skip cache busting for template file name.\n       * @param $return\n       * @param $filename\n       * @return mixed\n       */\n      public function skip_cache_busting( $return, $filename ) {\n        $backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 8 );\n        if( strpos( $backtrace[ 7 ][ 'file' ], '/the-events-calendar/' ) !== false ) {\n          return $filename;\n        }\n        return $return;\n      }\n\n    }\n\n  }\n\n}\n"
  },
  {
    "path": "lib/classes/compatibility/wp-smush.php",
    "content": "<?php\n\n/**\n * Compatibility Plugin Name: Smush Image Compression and Optimization\n * Compatibility Plugin URI: https://wordpress.org/plugins/wp-smushit/\n *\n * Compatibility Description: Ensures compatibility with WPSmush.\n *\n * @todo Compatibility for backup feature\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\WPSmush')) {\n\n    class WPSmush extends Compatibility {\n      protected $id = 'wp-smush';\n      protected $title = 'WP Smush';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_WPSMUSH';\n      protected $description = 'Ensures compatibility with WP Smush.';\n      protected $plugin_file = ['wp-smushit/wp-smush.php', 'wp-smush-pro/wp-smush.php', 'wp-smushit-pro/wp-smush-pro.php'];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      /**\n       * @param $sm\n       */\n      public function module_init($sm) {\n        add_action('wp_smush_image_optimised', array($this, 'image_optimized'), 10, 2);\n        // Check if the file not exists for the given path then download\n        // Useful in Ephemeral mode\n        add_action('smush_file_exists', array($this, 'maybe_download_file'), 10, 3);\n\n        // Skip sync when attachment is image, sync will be handled after image is optimized.\n        // add_filter( 'wp_stateless_skip_add_media', array( $this, 'skip_add_media' ), 10, 5 );\n\n        add_filter('delete_attachment', array($this, 'remove_backup'));\n        add_filter('smush_backup_exists', array($this, 'backup_exists_on_gcs'), 10, 3);\n        add_action('sm:synced::image', array($this, 'sync_backup'), 10, 2);\n      }\n\n      /**\n       * Whether to skip the sync on image upload before the image is optimized.\n       * The sync is skipped if the image is compatible with Smush.\n       *\n       * The image will be synced after it's get optimized using the 'wp_smush_image_optimised' action.\n       *\n       *\n       * @param bool   $return         This should return true if want to skip the sync.\n       * @param int    $metadata       Metadata for the attachment.\n       * @param string $attachment_id  Attachment ID.\n       * @param bool   $force          Whether to force the sync even the file already exist in GCS.\n       * @param bool   $args           Whether to only sync the full size image.\n       *\n       * @return bool  $return         True to skip the sync and false to do the sync.\n       *\n       */\n      public function skip_add_media($return, $metadata, $attachment_id, $force = false, $args = array()) {\n        global $doing_manual_sync;\n\n        if ($force || $doing_manual_sync) return false;\n\n        if (class_exists('WP_Smush_Modules')) {\n          $auto_smush = \\WP_Smush::get_instance()->core()->mod->settings->get('auto');\n        } else {\n          global $wpsmush_settings;\n          $auto_smush = $wpsmush_settings->settings['auto'];\n        }\n\n        if (\n          !$auto_smush || !wp_attachment_is_image($attachment_id) ||\n          !apply_filters('wp_smush_image', true, $attachment_id) ||\n          !(\n            ((!empty($_POST['action']) && 'upload-attachment' == $_POST['action']) || isset($_POST['post_id'])) &&\n            // And, check if Async is enabled.\n            defined('WP_SMUSH_ASYNC') && WP_SMUSH_ASYNC)\n        ) {\n          return false;\n        }\n        return true;\n      }\n\n      /**\n       * Sync image after it's been optimized.\n       *\n       * @param int $attachment_id attachment id\n       * @param array $stats compression stats\n       *\n       * @return null\n       */\n      public function image_optimized($attachment_id, $stats) {\n        // Sync the attachment to GCS\n        ud_get_stateless_media()->add_media(array(), $attachment_id, true);\n\n        // also sync the backup images\n        $this->sync_backup($attachment_id);\n      }\n\n      /**\n       * If local file don't exists then download it from GCS\n       *\n       * @param string $file_path Full file path\n       * @param string $attachment_id\n       * @param array $size_details Array of width and height for the image\n       *\n       * @return null\n       */\n      function maybe_download_file($file_path = '', $attachment_id = '', $size_details = array()) {\n        if (empty($file_path) || empty($attachment_id)) {\n          return;\n        }\n\n        //Download if file not exists\n        if (!file_exists($file_path)) {\n          $client = ud_get_stateless_media()->get_client();\n          $metadata = wp_get_attachment_metadata($attachment_id);\n          if (!empty($metadata['gs_name'])) {\n            $image_sizes = Utility::get_path_and_url($metadata, $attachment_id);\n            foreach ($image_sizes as $size => $img) {\n              $client->get_media(apply_filters('wp_stateless_file_name', $img['gs_name']), true, $img['path']);\n            }\n\n            $gs_name = dirname($metadata['gs_name']) . '/' . basename($file_path);\n            // We need to remove backup from GCS if it's a restore action\n            // @todo revise this code\n            if ($this->hook_from_restore_image()) {\n              $client->remove_media(apply_filters('wp_stateless_file_name', $gs_name));\n            }\n          }\n        }\n      }\n\n      /**\n       * Remove backup when attachment is removed\n       *\n       * @param $attachment_id\n       */\n      function remove_backup($attachment_id) {\n        $upload_dir = wp_get_upload_dir();\n        $metadata = wp_get_attachment_metadata($attachment_id);\n        $backup_paths = get_post_meta($attachment_id, '_wp_attachment_backup_sizes', true);\n\n        if (!empty($metadata['gs_name']) && !empty($backup_paths) && is_array($backup_paths)) {\n          // Getting local dir path for backup image\n          $base_dir = $upload_dir['basedir'] . '/' . dirname($metadata['file']);\n          // Getting GCS dir name from meta data. In case Bucket Folder used.\n          $gs_dir = dirname($metadata['gs_name']);\n          foreach ($backup_paths as $key => $data) {\n            $gs_name = $gs_dir . '/' . basename($data['file']);\n            // Path of backup image\n            $backup_path = $base_dir . '/' . basename($data['file']);\n            do_action('sm:sync::deleteFile', apply_filters('wp_stateless_file_name', $gs_name), $backup_path);\n            delete_transient('sm-wp-smush-backup-exists-' . $attachment_id);\n          }\n        }\n      }\n\n      /**\n       * Checks if we've backup on gcs for the given attachment id and backup path\n       *\n       * @param string $attachment_id\n       * @param string $backup_path\n       *\n       * @return bool\n       */\n      function backup_exists_on_gcs($exists, $attachment_id = '', $backup_path = '') {\n        if (!$exists && $attachment_id) {\n          if (get_transient('sm-wp-smush-backup-exists-' . $attachment_id)) {\n            return true;\n          }\n\n          $metadata = wp_get_attachment_metadata($attachment_id);\n          if (!empty($metadata['gs_name'])) {\n            $gs_name = dirname($metadata['gs_name']) . '/' . basename($backup_path);\n            if (ud_get_stateless_media()->get_client()->media_exists(apply_filters('wp_stateless_file_name', $gs_name))) {\n              set_transient('sm-wp-smush-backup-exists-' . $attachment_id, true, HOUR_IN_SECONDS);\n              return true;\n            }\n          }\n        }\n\n        return $exists;\n      }\n\n      /**\n       * Sync backup image to GCS\n       *\n       * @param $attachment_id\n       * @param array $metadata\n       */\n      public function sync_backup($attachment_id, $metadata = array()) {\n        $upload_dir = wp_get_upload_dir();\n        if (empty($metadata) || empty($metadata['gs_name'])) {\n          $metadata = wp_get_attachment_metadata($attachment_id);\n        }\n\n        // Getting backup path from smush settings in db\n        $backup_paths = get_post_meta($attachment_id, '_wp_attachment_backup_sizes', true);\n\n        if (!empty($metadata['gs_name']) && !empty($backup_paths) && is_array($backup_paths)) {\n          // Getting local dir for backup image\n          $base_dir = $upload_dir['basedir'] . '/' . dirname($metadata['file']);\n          // Getting GCS dir name from meta data. In case Bucket Folder used.\n          $gs_dir = dirname($metadata['gs_name']);\n\n          foreach ($backup_paths as $key => $data) {\n            $gs_name = $gs_dir . '/' . basename($data['file']);\n            // Path of backup image\n            $backup_path = $base_dir . '/' . basename($data['file']);\n            // Sync backup image with GCS\n            do_action('sm:sync::syncFile', apply_filters('wp_stateless_file_name', $gs_name), $backup_path);\n            delete_transient('sm-wp-smush-backup-exists-' . $attachment_id);\n          }\n        }\n      }\n\n      /**\n       * Determine where we hook from\n       * Is this a hook from wp smush restore image or not.\n       *\n       * @return bool\n       */\n      private function hook_from_restore_image() {\n        $call_stack = debug_backtrace();\n        $class_name = class_exists('WpSmushBackup') ? 'WpSmushBackup' : 'WP_Smush_Backup';\n\n        if (!empty($call_stack) && is_array($call_stack)) {\n          foreach ($call_stack as $step) {\n\n            if ($step['function'] == 'restore_image' && $step['class'] == $class_name) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/compatibility/wpbakery-page-builder.php",
    "content": "<?php\n\n/**\n * Compatibility Plugin Name: WPBakery Page Builder\n * Compatibility Plugin URI: http://vc.wpbakery.com/\n *\n * Compatibility Description: Enables support for these WPBakery Page Builder features: single image element.\n *\n */\n\nnamespace wpCloud\\StatelessMedia {\n\n  if (!class_exists('wpCloud\\StatelessMedia\\WPBakeryPageBuilder')) {\n\n    class WPBakeryPageBuilder extends Compatibility {\n      protected $id = 'wp-bakery-page-builder';\n      protected $title = 'WPBakery Page Builder';\n      protected $constant = 'WP_STATELESS_COMPATIBILITY_WPB';\n      protected $description = 'Enables support for these WPBakery Page Builder features: single image element.';\n      protected $plugin_file = 'js_composer/js_composer.php';\n      protected $sm_mode_not_supported = ['stateless'];\n      protected $enabled = false;\n      protected $is_internal = true;\n\n      public function __construct() {\n        parent::__construct();\n\n        if ($this->enabled) {\n          // We need to add the filter on construct. Init is too late.\n          add_filter('vc_wpb_getimagesize', array($this, 'vc_wpb_getimagesize'), 10, 3);\n        }\n      }\n\n      /**\n       * @param $sm\n       */\n      public function module_init($sm) {\n        //\n      }\n\n      /**\n       * If image size not exist then generate size info and update attachment metadata.\n       *\n       * $args = array(\n       *      'thumbnail' => $thumbnail,\n       *      'p_img_large' => $p_img_large,\n       *   )\n       *\n       * @param $args\n       * @param $attach_id\n       * @param $params\n       * @return mixed\n       */\n      public function vc_wpb_getimagesize($args, $attach_id, $params) {\n        if (!$this->enabled) return $args;\n\n        $gs_host = ud_get_stateless_media()->get_gs_host();\n        $meta_data = wp_get_attachment_metadata($attach_id);\n        preg_match(\"/src=[\\\"|'](.*?)[\\\"|']/\", $args['thumbnail'], $match);\n\n        if (!empty($match[1]) && empty($meta_data['sizes'][$params['thumb_size']])) {\n          $dir = wp_upload_dir();\n          $url = $match[1];\n          $path = str_replace($gs_host, '', $url);\n          $path = trim($path, '/');\n          $absolute_path = $dir['basedir'] . '/' . $path;\n\n          $size = getimagesize($absolute_path);\n          $filetype = wp_check_filetype($absolute_path);\n          $size_info = array(\n            'file' => wp_basename($absolute_path),\n            'mime-type' => $filetype['type'],\n            'width' => $size[0],\n            'height' => $size[1],\n          );\n          $meta_data['sizes'][$params['thumb_size']] = $size_info;\n          wp_update_attachment_metadata($attach_id, $meta_data);\n        }\n        return $args;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/exception-fatal.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia;\n\nclass FatalException extends \\Exception {\n}\n"
  },
  {
    "path": "lib/classes/exception-unprocessable.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia;\n\nclass UnprocessableException extends \\Exception {\n}\n"
  },
  {
    "path": "lib/classes/status/class-info-google_cloud.php",
    "content": "<?php\n/**\n * System Info (Google Cloud section) class\n * https://cloud.google.com/storage/docs/json_api/v1/buckets#resource-representations\n *\n * @since 4.1.0\n */\n\nnamespace wpCloud\\StatelessMedia\\Status;\n\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\Helper;\n\nclass GoogleCloudInfo {\n  use Singleton;\n\n  protected function __construct() {\n    $this->_init_hooks();\n  }\n\n  private function _init_hooks() {\n    add_filter('wp_stateless_status_info_values_google_cloud', [$this, 'get_bucket_info'], 10);\n\n    add_filter('wp_stateless_status_info_values_google_cloud', [$this, 'format_values'], 99);\n\n    add_filter('wp_stateless_status_info_values_google_cloud_public_access', [$this, 'get_public_access_value'], 10);\n    add_filter('wp_stateless_status_info_values_google_cloud_access_control', [$this, 'get_access_control'], 10);\n    add_filter('wp_stateless_status_info_values_google_cloud_versioning', [$this, 'get_versioning'], 10);\n    add_filter('wp_stateless_status_info_values_google_cloud_soft_delete', [$this, 'get_soft_delete'], 10);\n  }\n\n  /**\n   * Format values to human-readable\n   */\n  public function format_values($values) {\n    foreach ($values as $key => $value) {\n      $values[$key]['value'] = apply_filters(\"wp_stateless_status_info_values_google_cloud_$key\", $values[$key]['value']);\n    }\n\n    return $values;\n  }\n\n  /**\n   * Format 'public_access' value\n   */\n  public function get_public_access_value($value) {\n    switch ($value) {\n      case 'enforced':\n        return __('Enforced', ud_get_stateless_media()->domain);\n      case 'inherited':\n        return __('Inherited', ud_get_stateless_media()->domain);\n    }\n\n    return $value;\n  }\n\n  /**\n   * Format 'versioning' value\n   */\n  public function get_versioning($value) {\n    return $value ? __('Enabled', ud_get_stateless_media()->domain) : __('Disabled', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get 'Access Control' value\n   */\n  public function get_access_control($value) {\n    return $value ? __('Uniform', ud_get_stateless_media()->domain) : __('Fine-grained', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get 'Soft Delete' value\n   */\n  public function get_soft_delete($value) {\n    return $value > 0 ? __('Enabled', ud_get_stateless_media()->domain) : __('Disabled', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get the values related to GCS bucket configuration\n   */\n  public function get_bucket_info($values) {\n    $rows = [];\n    $client = ud_get_stateless_media()->get_client();\n    $bucket_name = ud_get_stateless_media()->get('sm.bucket');\n\n    if ( empty($client) || empty($bucket_name) ) {\n      $rows = [\n        'gcs_error' => [\n          'label' => __('Error', ud_get_stateless_media()->domain),\n          'value' => __('Google Cloud info not accessible', ud_get_stateless_media()->domain),\n        ],\n      ];\n\n      return $values + $rows;\n    }\n    \n    // Get bucket info\n    try {\n      $info = $client->service->buckets->get($bucket_name);\n\n      $rows = [\n        'storage_class' => [\n          'label' => __('Storage Class', ud_get_stateless_media()->domain),\n          'value' => $info->storageClass,\n        ],\n        'public_access' => [\n          'label' => __('Public Access Prevention', ud_get_stateless_media()->domain),\n          'value' => $info->iamConfiguration->publicAccessPrevention,\n        ],\n        'access_control' => [\n          'label' => __('Access Control', ud_get_stateless_media()->domain),\n          'value' => $info->iamConfiguration->uniformBucketLevelAccess->enabled,\n        ],\n        'versioning' => [\n          'label' => __('Versioning', ud_get_stateless_media()->domain),\n          'value' => isset($info->versioning) && isset($info->versioning->enabled) ? $info->versioning->enabled : false,\n        ],\n        'soft_delete' => [\n          'label' => __('Soft Delete', ud_get_stateless_media()->domain),\n          'value' => isset($info->softDeletePolicy) && isset($info->softDeletePolicy->retentionDurationSeconds) ? $info->softDeletePolicy->retentionDurationSeconds : 0,\n        ],\n      ];\n    } catch ( \\Throwable $e ) {\n      $rows = [\n        'gcs_error' => [\n          'label' => __('Error', ud_get_stateless_media()->domain),\n          'value' => __('Google Cloud Storage Bucket info not available', ud_get_stateless_media()->domain),\n        ],\n      ];\n    }\n\n    return $values + $rows;\n  }\n\n}\n"
  },
  {
    "path": "lib/classes/status/class-info-stateless.php",
    "content": "<?php\n/**\n * System Info (Stateless section) class\n *\n * @since 4.0.3\n */\n\nnamespace wpCloud\\StatelessMedia\\Status;\n\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\Helper;\n\nclass StatelessInfo {\n  use Singleton;\n\n  /**\n   * Stateless settings\n   * \n   * @var array|null\n   */\n  private $settings = null;\n\n  protected function __construct() {\n    $this->_init_hooks();\n  }\n\n  private function _init_hooks() {\n    add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_settings_values'], 10);\n    add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_settings_constants'], 20);\n    add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_media_stats'], 30);\n    add_filter('wp_stateless_status_info_values_stateless', [$this, 'get_migrations'], 40);\n    add_filter('wp_stateless_status_info_values_stateless', [$this, 'prepare_values'], 99);\n\n    add_filter('wp_stateless_status_info_stateless_value', [$this, 'format_value'], 10, 3);\n    \n    add_filter('wp_stateless_status_info_stateless_value_mode', [$this, 'get_mode'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_body_rewrite', [$this, 'get_body_rewrite'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_bucket', [$this, 'get_is_set'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_bucket_accessible', [$this, 'get_yes_no_value'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_key_json', [$this, 'get_is_set'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_cache_control', [$this, 'get_cache_control'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_delete_remote', [$this, 'get_enabled_value'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_root_dir', [$this, 'get_root_dir'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_custom_domain', [$this, 'get_is_set'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_hashify_file_name', [$this, 'get_enabled_value'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_dynamic_image_support', [$this, 'get_enabled_value'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_use_postmeta', [$this, 'get_enabled_value'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_WP_STATELESS_LEGACY_URL_TO_POSTID', [$this, 'get_yes_no_value'], 10);\n    add_filter('wp_stateless_status_info_stateless_value_WP_STATELESS_SKIP_ACL_SET', [$this, 'get_yes_no_value'], 10);\n  }\n\n  /**\n   * Get settings\n   * \n   * @return array\n   */\n  private function _get_setings() {\n    if ( empty($this->settings) ) {\n      $this->settings = ud_get_stateless_media()->get('sm');\n    }\n\n    return $this->settings;\n  }\n\n  /**\n   * Format mode setting\n   * \n   * @param string $value\n   * @return string\n   */\n  public function get_mode($value) {\n    switch ($value) {\n      case '':\n        $value = __('Don\\'t override', ud_get_stateless_media()->domain);\n        break;\n      case 'disabled':\n        $value = __('Disabled', ud_get_stateless_media()->domain);\n        break;\n      case 'backup':\n        $value = __('Backup', ud_get_stateless_media()->domain);\n        break;\n      case 'cdn':\n        $value = __('CDN', ud_get_stateless_media()->domain);\n        break;\n      case 'ephemeral':\n        $value = __('Ephemeral', ud_get_stateless_media()->domain);\n        break;\n      case 'stateless':\n        $value = __('Stateless', ud_get_stateless_media()->domain);\n        break;\n    }\n\n    return $value;\n  } \n\n  /**\n   * Get body_rewrite setting\n   * \n   * @param string $value\n   * @return string\n   */\n  public function get_body_rewrite($value) {\n    switch ($value) {\n      case '':\n        $value = __('Don\\'t override', ud_get_stateless_media()->domain);\n        break;\n      case 'false':\n        $value = __('Disabled', ud_get_stateless_media()->domain);\n        break;\n      case 'enable_editor':\n        $value = __('Enable Editor', ud_get_stateless_media()->domain);\n        break;\n      case 'enable_meta':\n        $value = __('Enable Meta', ud_get_stateless_media()->domain);\n        break;\n      case 'true':\n        $value = __('Enable Editor & Meta', ud_get_stateless_media()->domain);\n        break;\n    }\n\n    return $value;\n  } \n\n  /**\n   * Format Cache Control setting\n   * \n   * @param bool $value\n   * @return string\n   */\n  public function get_cache_control($value) {\n    if ( empty($value) ) {\n      $value = sprintf( __('Default: %s', ud_get_stateless_media()->domain), ud_get_stateless_media()->get_default_cache_control() );\n    }\n\n    return $value;\n  }\n\n  /**\n   * Format Folder setting\n   * \n   * @param bool $value\n   * @return string\n   */\n  public function get_root_dir($value) {\n    if ( empty($value) && is_network_admin() ) {\n      $value = __('Don\\'t override', ud_get_stateless_media()->domain);\n    }\n\n    return $value;\n  }\n\n  /**\n   * Format the value if it is set or not\n   * \n   * @param bool $value\n   * @return string\n   */\n  public function get_is_set($value) {\n    return (bool) $value ? __('Set', ud_get_stateless_media()->domain) : __('Not set', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get boolean value (Yes/No)\n   * \n   * @param bool $value\n   * @return string\n   */\n  public function get_yes_no_value($value) {\n    return (bool) $value ? __('Yes', ud_get_stateless_media()->domain) : __('No', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get boolean value (Enable/Disabled)\n   * \n   * @param bool $value\n   * @return string\n   */\n  public function get_enabled_value($value) {\n    switch ($value) {\n      case '':\n        $value = __('Don\\'t override', ud_get_stateless_media()->domain);\n        break;\n      case 'true':\n        $value = __('Enable', ud_get_stateless_media()->domain);\n        break;\n      case 'false':\n        $value = __('Disable', ud_get_stateless_media()->domain);\n        break;\n    }\n\n    return $value;\n  }\n\n  /**\n   * Format stateless settings value\n   * \n   * @param string $value\n   * @param string $key\n   * @param array $sm\n   * \n   * @return string\n   */\n  public function format_value($value, $key, $sm) {\n    $value = apply_filters(\"wp_stateless_status_info_stateless_value_$key\", $value, $sm);\n\n    $readonly = array_keys( $sm['readonly'] ?? [] );\n\n    if ( in_array($key, $readonly)) {\n      $type = $sm['readonly'][$key] ?? '';\n\n      $suffix = '';\n      $hint = $sm['strings'][$type] ?? '';\n\n      switch ($type) {\n        case 'network':\n          $suffix = __('Network', ud_get_stateless_media()->domain);\n          break;\n        case 'constant':\n          $suffix = __('Constant', ud_get_stateless_media()->domain);\n          break;\n        case 'environment':\n          $suffix = __('Environment', ud_get_stateless_media()->domain);\n          break;\n      }\n  \n      if ( !empty($suffix) ) {\n        $value = sprintf(\n          '<div class=\"stateless-info-table-extended-value\">'.\n            '<span>%s</span> '.\n            '<span title=\"%s\"><em>(</em>%s%s<em>)</em></span>'.\n          '</div', \n          $value,\n          $hint,\n          '<span class=\"dashicons dashicons-editor-help\"></span>',\n          $suffix,\n        );\n      }\n    }\n\n    return $value;\n  }\n\n  /**\n   * Get WP-Stateless settings\n   * \n   * @param array $values\n   * @return array\n   */\n  public function get_settings_values($values) {\n    $sm = $this->_get_setings();\n\n    $rows = [\n      'version' => [\n        'label' => __('Version', ud_get_stateless_media()->domain),\n        'value' => ud_get_stateless_media()::$version,\n      ],\n      'db_version' => [\n        'label' => __('Database Version', ud_get_stateless_media()->domain),\n        'value' => get_option( ud_stateless_db()::DB_VERSION_KEY, '' ),\n      ],\n      'mode' => [\n        'label' => __('Mode', ud_get_stateless_media()->domain),\n        'value' => $sm['mode'],\n      ],\n      'body_rewrite' => [\n        'label' => __('File URL Replacement', ud_get_stateless_media()->domain),\n        'value' => $sm['body_rewrite'],\n      ],\n      'body_rewrite_types' => [\n        'label' => __('Supported File Types', ud_get_stateless_media()->domain),\n        'value' => $sm['body_rewrite_types'],\n      ],\n      'bucket' => [\n        'label' => __('Bucket', ud_get_stateless_media()->domain),\n        'value' => !empty($sm['bucket']),\n      ],\n      'bucket_accessible' => [\n        'label' => __('Bucket Accessible', ud_get_stateless_media()->domain),\n        'value' => get_transient('sm::is_connected_to_gs'),\n      ],\n      'key_json' => [\n        'label' => __('Service Account JSON', ud_get_stateless_media()->domain),\n        'value' => !empty($sm['key_json']),\n      ],\n      'cache_control' => [\n        'label' => __('Cache-Control', ud_get_stateless_media()->domain),\n        'value' => $sm['cache_control'],\n      ],\n      'delete_remote' => [\n        'label' => __('Delete GCS File', ud_get_stateless_media()->domain),\n        'value' => $sm['delete_remote'],\n      ],\n      'root_dir' => [\n        'label' => __('Folder', ud_get_stateless_media()->domain),\n        'value' => $sm['root_dir'],\n      ],\n      'custom_domain' => [\n        'label' => __('Domain', ud_get_stateless_media()->domain),\n        'value' => !empty($sm['custom_domain']),\n      ],\n      'hashify_file_name' => [\n        'label' => __('Cache-Busting', ud_get_stateless_media()->domain),\n        'value' => $sm['hashify_file_name'],\n      ],\n      'dynamic_image_support' => [\n        'label' => __('Dynamic Image Support', ud_get_stateless_media()->domain),\n        'value' => $sm['dynamic_image_support'],\n      ],\n      'use_api_siteurl' => [\n        'label' => __('Use Site URL for REST API Requests', ud_get_stateless_media()->domain),\n        'value' => $sm['use_api_siteurl'],\n      ],\n      'api_status' => [\n        'label' => __('REST API Status', ud_get_stateless_media()->domain),\n        'value' => '%api_status%',\n      ],\n      'ajax_status' => [\n        'label' => __('AJAX Status', ud_get_stateless_media()->domain),\n        'value' => '%ajax_status%',\n      ],\n      'use_postmeta' => [\n        'label' => __('Use Post Meta', ud_get_stateless_media()->domain),\n        'value' => $sm['use_postmeta'],\n      ],\n    ];\n\n    return $values + $rows;\n  }\n\n  /**\n   * Get constants settings, not available on Settings page\n   * \n   * @param array $values\n   * @return array\n   */\n  public function get_settings_constants($values) {\n    $sm = $this->_get_setings();\n\n    $constants = [\n      'WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE' => __('Upload Chunk Size', ud_get_stateless_media()->domain),\n      'WP_STATELESS_SYNC_MAX_BATCH_SIZE' => __('Sync Max Batch Size', ud_get_stateless_media()->domain),\n      'WP_STATELESS_LEGACY_URL_TO_POSTID' => __('Change the Bucket Folder (root_dir) after uploading the image', ud_get_stateless_media()->domain),\n      'WP_STATELESS_SKIP_ACL_SET' => __('Skip setting file-level ACl when <strong>uniform bucket-level access</strong> is enabled', ud_get_stateless_media()->domain),\n    ];\n\n    $rows = [];\n\n    foreach ($constants as $key => $label) {\n      if ( !defined($key) ) {\n        continue;\n      }\n\n      // Mark all constants as readonly 'constant'\n      $this->settings['readonly'][$key] = 'constant';\n\n      $rows[$key] = [\n        'label' => $label,\n        'value' => constant($key),\n      ];\n    }\n\n    return $values + $rows;\n  }\n\n  /**\n   * Get media stats\n   * \n   * @param array $values\n   * @return array\n   */\n  public function get_media_stats($values) {\n    if (is_network_admin()) {\n      return $values;\n    }\n\n    $rows = [\n      'files' => [\n        'label' => __('Total Files', ud_get_stateless_media()->domain),\n        'value' => ud_stateless_db()->get_total_files(),\n      ],\n      'file_sizes' => [\n        'label' => __('Total File Sizes', ud_get_stateless_media()->domain),\n        'value' => ud_stateless_db()->get_total_file_sizes(),\n      ],\n      'compatibility_files' => [\n        'label' => __('Compatibility Files', ud_get_stateless_media()->domain),\n        'value' => ud_stateless_db()->get_total_non_media_files(),\n      ],\n    ];\n\n    return $values + $rows;\n  }\n\n  public function prepare_values($values) {\n    $sm = $this->_get_setings();\n\n    foreach ($values as $key => $value) {\n      $values[$key]['value'] = apply_filters('wp_stateless_status_info_stateless_value', $value['value'], $key, $sm);\n    }\n\n    return $values;\n  }\n\n  public function get_migrations($values) {\n    if (is_network_admin()) {\n      return $values;\n    }\n\n    $state = apply_filters(\"wp_stateless_batch_state\", [], ['force_migrations' => true]);\n\n    if ( !is_array($state) || !isset( $state['migrations'] ) ) {\n      return $value;\n    }\n\n    $migrations = [];\n\n    foreach ($state['migrations'] as $key => $migration) {\n      $migrations[] = sprintf( '%s: %s', $key, $migration['status_text'] );\n    }\n\n    $rows = [\n      'migrations' => [\n        'label' => __('Data Optimization', ud_get_stateless_media()->domain),\n        'value' => implode(', ', $migrations),\n      ],\n    ];\n\n    return $values + $rows;\n  }\n}"
  },
  {
    "path": "lib/classes/status/class-info.php",
    "content": "<?php\n/**\n * System Info class\n *\n * @since 4.0.3\n */\n\nnamespace wpCloud\\StatelessMedia\\Status;\n\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\Helper;\n\nclass Info {\n  use Singleton;\n\n  protected function __construct() {\n    StatelessInfo::instance();\n    GoogleCloudInfo::instance();\n\n    $this->_init_hooks();\n  }\n\n  private function _init_hooks() {\n    add_action('wp_ajax_stateless_check_ajax', [$this, 'check_ajax']);\n\n    add_action('wp_stateless_status_tab_content', [$this, 'tab_content'], 10);\n\n    add_filter('wp_stateless_status_tab_visible', array($this, 'status_tab_visible'), 10, 1);\n\n    add_filter('wp_stateless_status_info_values_server', [$this, 'get_server_values'], 10);\n    add_filter('wp_stateless_status_info_values_server', [$this, 'get_php_values'], 20);\n    add_filter('wp_stateless_status_info_values_server', [$this, 'get_php_modules'], 30);\n\n    add_filter('wp_stateless_status_info_values_wordpress', [$this, 'get_wordpress_network_values'], 10);\n    add_filter('wp_stateless_status_info_values_wordpress', [$this, 'get_wordpress_attachments'], 20);\n    add_filter('wp_stateless_status_info_values_wordpress', [$this, 'get_wordpress_theme'], 30);\n    add_filter('wp_stateless_status_info_values_wordpress', [$this, 'get_wordpress_plugins'], 40);\n  }\n\n  /**\n   * Check AJAX requests are working\n   */\n  public function check_ajax() {\n    if ( !check_ajax_referer('stateless_check_ajax') ) {\n      wp_send_json_error([\n        'status' => __('Error', ud_get_stateless_media()->domain),\n        'message' => __('Invalid nonce', ud_get_stateless_media()->domain),\n      ]);\n    }\n\n    wp_send_json_success([\n      'status' => 'Ok',\n    ]);\n  }\n\n  /**\n   * Get boolean value (Yes/No)\n   * \n   * @param bool $value\n   * @return string\n   */\n  private function _get_bool_value($value) {\n    return (bool) $value ? __('Yes', ud_get_stateless_media()->domain) : __('No', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get server values\n   * \n   * @return array\n   */\n  public function get_server_values($values = []) {\n    global $wpdb;\n\n    $server_architecture = function_exists( 'php_uname' ) \n    ? [ php_uname('s'), php_uname('r'), php_uname('m') ]\n    : [ __('Unknown', ud_get_stateless_media()->domain) ];\n\n    $rows = [\n      'server_architecture' => [\n        'label' => __('Server architecture', ud_get_stateless_media()->domain),\n        'value' => implode(' ', $server_architecture),\n      ],\n      'web_server' => [\n        'label' => __('Web server', ud_get_stateless_media()->domain),\n        'value' => isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : __('Unknown', ud_get_stateless_media()->domain),\n      ],\n      'mysql' => [\n        'label' => __('MySQL version', ud_get_stateless_media()->domain),\n        'value' => $wpdb->db_server_info(),\n      ],\n    ];\n\n    // Detect the default DB engine\n    try {\n      $default_engine = '';\n      $engines = $wpdb->get_results('SHOW ENGINES', ARRAY_A);\n\n      foreach ($engines as $engine) {\n        if ( $engine['Support'] === 'DEFAULT' ) {\n          $default_engine = $engine['Engine'];\n          break;\n        }\n      }\n\n      if ( !empty($default_engine) ) {\n        $rows['mysql_engine'] = [\n          'label' => __('MySQL default engine', ud_get_stateless_media()->domain),\n          'value' => $default_engine,\n        ];\n      }\n    } catch (\\Throwable $e) {\n    }\n\n    $rows['php'] = [\n      'label' => __('PHP Version', ud_get_stateless_media()->domain),\n      'value' => PHP_VERSION,\n    ];\n\n    return $values + $rows;\n  }\n\n  /**\n   * Get PHP ini values\n   * \n   * @return array\n   */\n  public function get_php_values($values = []) {\n    if ( !function_exists('ini_get') ) {\n      $values['php_ini_get'] = [\n        'label' => __('PHP Config', ud_get_stateless_media()->domain),\n        'value' => __('Unable to determine some settings, init_get() is disabled.', ud_get_stateless_media()->domain),\n      ];\n\n      return $values;\n    }\n\n    $rows = [\n      'php_memory_limit' => [\n        'label' => __('PHP Memory Limit', ud_get_stateless_media()->domain),\n        'value' => ini_get('memory_limit'),\n      ],\n      'php_max_input_vars' => [\n        'label' => __('PHP Max Input Vars', ud_get_stateless_media()->domain),\n        'value' => ini_get('max_input_vars'),\n      ],\n      'php_max_post_size' => [\n        'label' => __('PHP Max Post Size', ud_get_stateless_media()->domain),\n        'value' => ini_get('post_max_size'),\n      ],\n      'php_time_limit' => [\n        'label' => __('PHP Time Limit', ud_get_stateless_media()->domain),\n        'value' => ini_get('max_execution_time'),\n      ],\n      'max_upload_size' => [\n        'label' => __('Max Upload Size', ud_get_stateless_media()->domain),\n        'value' => ini_get('upload_max_filesize'),\n      ],\n      'allow_url_fopen' => [\n        'label' => __('Allow URL-aware fopen Wrappers', ud_get_stateless_media()->domain),\n        'value' => $this->_get_bool_value( ini_get('allow_url_fopen') ),\n      ],\n    ];\n\n    return $values + $rows;\n  }\n\n  /**\n   * Get PHP modules\n   * \n   * @return array\n   */\n  public function get_php_modules($values = []) {\n    $values['extensions'] = [\n      'label' => __('Loaded Extensions', ud_get_stateless_media()->domain),\n      'value' => implode(', ', get_loaded_extensions()),\n    ];\n\n    return $values;\n  }\n\n  /**\n   * Get WP global network values\n   * \n   * @return array\n   */\n  public function get_wordpress_network_values($values = []) {\n    $rows = [\n      'home_url' => [\n        'label' => __('Home URL', ud_get_stateless_media()->domain),\n        'value' => get_bloginfo( 'url' ),\n      ],\n      'site_url' => [\n        'label' => __('Site URL', ud_get_stateless_media()->domain),\n        'value' => get_bloginfo( 'wpurl' ),\n      ],\n      'version' => [\n        'label' => __('Version', ud_get_stateless_media()->domain),\n        'value' => get_bloginfo('version'),\n      ],\n      'multisite' => [\n        'label' => __('Multisite', ud_get_stateless_media()->domain),\n        'value' => $this->_get_bool_value( is_multisite() ),\n      ],\n      'memory_limit' => [\n        'label' => __('Memory Limit', ud_get_stateless_media()->domain),\n        'value' => WP_MEMORY_LIMIT,\n      ],\n    ];\n\n    return $values + $rows;\n  }\n\n  /**\n   * Format WP theme value\n   * \n   * @param \\WP_Theme $theme\n   * @return string|null\n   */\n  private function _format_theme_value($theme) {\n    if ( !is_a($theme, '\\WP_Theme') ) {\n      return null;\n    }\n\n    $value = [$theme->name, $theme->version];\n\n    return implode(' ', $value);\n  }\n\n  /**\n   * Get WP attachments info\n   * \n   * @return array\n   */\n  public function get_wordpress_attachments($values = []) {\n    if ( is_network_admin() ) {\n      return $values;\n    }\n\n    global $wpdb;\n    $total = $wpdb->get_var(\"SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = 'attachment'\");\n\n    $size_keys = get_intermediate_image_sizes();\n    $sizes = [];\n\n    foreach ($size_keys as $size) {\n      // Check if image size is not a name (e.g. '1536x1536')\n      $parts = explode('x', $size);\n\n      if ( count($parts) === 2 && is_numeric($parts[0]) && is_numeric($parts[1]) ) {\n        $sizes[] = $size;\n        continue;\n      }\n\n      $width = get_option(\"{$size}_size_w\");\n      $height = get_option(\"{$size}_size_h\");\n      $sizes[] = sprintf('(%dx%d) %s', $width, $height, $size);\n    }\n\n    $rows = [\n      'total_attachments' => [\n        'label' => __('Total Attachments', ud_get_stateless_media()->domain),\n        'value' => $total,\n      ],\n      'image_sizes' => [\n        'label' => sprintf( __('Image Sizes (%d)', ud_get_stateless_media()->domain), count($sizes) ),\n        'value' => implode(', ', $sizes)\n      ],\n    ];\n\n    return $values + $rows;\n  }\n\n  /**\n   * Get WP theme values\n   * \n   * @return array\n   */\n  public function get_wordpress_theme($values = []) {\n    if ( is_network_admin() ) {\n      return $values;\n    }\n\n    $theme = wp_get_theme();\n\n    if ( !is_a($theme, '\\WP_Theme') ) {\n      return $values;\n    }\n\n    $rows = [\n      'theme' => [\n        'label' => __('Theme', ud_get_stateless_media()->domain),\n        'value' => $this->_format_theme_value($theme),\n      ],\n    ];\n\n    $parent = $theme->parent();\n\n    if ( is_a($parent, '\\WP_Theme') ) {\n      $rows['parent_theme'] = [\n        'label' => __('Parent Theme', ud_get_stateless_media()->domain),\n        'value' => $this->_format_theme_value($parent),\n      ];\n    }\n\n    return $values + $rows;\n  }\n\n  /**\n   * Format WP plugin value\n   * \n   * @param array $plugin\n   * @param bool $is_network\n   * @return string\n   */\n  private function _format_plugin_value($plugin, $is_network = false) {\n    $value = [$plugin['Name'], $plugin['Version']];\n\n    if ($is_network) {\n      $value[] = __('(network)', ud_get_stateless_media()->domain);\n    }\n\n    return implode(' ', $value);\n  }\n\n  /**\n   * Get WP plugins list\n   * \n   * @return array\n   */\n  public function get_wordpress_plugins($values = []) {\n    if ( is_network_admin() ) {\n      return $values;\n    }\n\n    $result = [];\n\n    $plugins = get_plugins();\n    $active_plugins = (array) get_option( 'active_plugins', [] );\n    $network_plugins = (array) get_site_option( 'active_sitewide_plugins', [] );\n    $network_plugins = array_keys($network_plugins);\n\n    foreach ($plugins as $file => $plugin) {\n      if ( in_array($file, $network_plugins) ) {\n        $result[] = $this->_format_plugin_value($plugin, true);\n\n        continue;\n      }\n\n      if ( in_array($file, $active_plugins) ) {\n        $result[] = $this->_format_plugin_value($plugin);\n      }\n    }\n  \n    $values['active_plugins'] = [\n      'label' => __('Active Plugins', ud_get_stateless_media()->domain),\n      'value' => implode(', ', $result),\n    ];\n\n    return $values;\n  }\n\n  /**\n   * Get section values\n   * \n   * @param string $key\n   * @return array|null\n   */\n  private function _get_section_values($key) {\n    try {\n      $values = apply_filters(\"wp_stateless_status_info_values_$key\", []);\n    } catch (\\Throwable $e) {\n      $values = [\n        'error' => [\n          'label' => __('Error', ud_get_stateless_media()->domain),\n          'value' => $e->getMessage(),\n        ],\n      ];\n    }\n\n    return empty($values) ? null : Helper::array_of_objects($values);\n  }\n\n  private function _prepare_copy_text($sections) {\n    $text = '';\n\n    foreach ($sections as $section) {\n      $text .= '### ' . $section->title . PHP_EOL . PHP_EOL;\n\n      foreach ($section->rows as $row) {\n        $text .= sprintf('%s: %s%s',\n          strip_tags($row->label),\n          strip_tags($row->value),\n          PHP_EOL\n        );\n      }\n\n      $text .= PHP_EOL;\n    }\n\n    return sprintf('```%s%s```', PHP_EOL, $text);\n  }\n\n  /**\n   * Outputs 'Info' section content on Status tab.\n   */\n  public function tab_content() {\n    $sections = [\n      'server' => [\n        'title' => __('Server', ud_get_stateless_media()->domain),\n      ],\n      'wordpress' => [\n        'title' => __('WordPress', ud_get_stateless_media()->domain),\n      ],\n      'stateless' => [\n        'title' => __('WP-Stateless', ud_get_stateless_media()->domain),\n      ],\n      'google_cloud' => [\n        'title' => __('Google Cloud', ud_get_stateless_media()->domain),\n      ],\n    ];\n\n    foreach ($sections as $key => $section) {\n      $rows = $this->_get_section_values($key);\n\n      if ( !empty($rows) ) {\n        $sections[$key]['rows'] = $rows;\n      } else {\n        unset($sections[$key]);\n      }\n    }\n\n    $sections = Helper::array_of_objects($sections);\n    $copy_text = $this->_prepare_copy_text($sections);\n\n    include ud_get_stateless_media()->path('static/views/status-sections/info.php', 'dir');\n  }\n\n  /**\n   * Load 'Status' tab only in admin area\n   */\n  public function status_tab_visible($visible) {\n    return is_admin();\n  }\n}\n"
  },
  {
    "path": "lib/classes/status/class-migrations.php",
    "content": "<?php\n/**\n * Migrations status class\n *\n * @since 4.0.0\n */\n\nnamespace wpCloud\\StatelessMedia\\Status;\n\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\Helper;\nuse wpCloud\\StatelessMedia\\Migrator;\n\nclass Migrations {\n  use Singleton;\n\n  /**\n   * Migrations data\n   * \n   * @var array\n   */\n  private $migrations = [];\n\n  /**\n   * Primary migration id (that need to run first)\n   * \n   * @var string\n   */\n  private $primary_migration_id = '';\n\n  /**\n   * Migration id that is currently in progress (running or paused)\n   * \n   * @var string\n   */\n  private $running_migration_id = '';\n\n  protected function __construct() {\n    $this->_init_hooks();\n  }\n\n  private function _init_hooks() {\n    add_action('wp_stateless_status_tab_content', [$this, 'tab_content'], 50);\n    add_filter('wp_stateless_batch_state', [$this, 'migrations_state'], 20, 2);\n  }\n\n  /**\n   * Detects the oldest migration that needs to be finished before the next one can run\n   */\n  private function _set_primary_migration_id() {\n    $this->primary_migration_id = '';\n\n    $migrations = array_reverse($this->migrations, true);\n\n    foreach ($migrations as $id => $migration) {\n      if ( in_array($migration['status'], [Migrator::STATUS_PENDING, Migrator::STATUS_RUNNING, Migrator::STATUS_FAILED]) ) {\n        $this->primary_migration_id = $id;\n        break;\n      }\n    }\n  }\n\n  /**\n   * Returns the id of the migration that is currently running (if any)\n   * \n   * @param array $state\n   * @return string|bool|null\n   */\n  private function _set_running_migration_id($state) {\n    $this->running_migration_id = '';\n\n    if ( !empty($state) ) {\n      if ( isset($state['is_migration']) && $state['is_migration'] ) {\n        $this->running_migration_id = $state['id']; // migration is running\n        \n        return;\n      }\n    }\n  }\n\n  /**\n   * Generate the message for the migration, depending on the current state\n   * \n   * @param string $id\n   * @param array $migration\n   * @return string\n   */\n  private function _get_migration_message($id, $migration) {\n    $message = $migration['message'] ?? '';\n\n    switch ($migration['status']) {\n      case Migrator::STATUS_FINISHED:\n        $format = get_option('date_format') . ' ' . get_option( 'time_format' );\n        $date = wp_date($format, $migration['finished']);\n        $message = sprintf( __('Finished at %s', ud_get_stateless_media()->domain), $date );\n        break;\n      case Migrator::STATUS_SKIPPED:\n        $message = !empty($message) ? $message : __('Not required', ud_get_stateless_media()->domain);\n        break;\n      case Migrator::STATUS_FAILED:\n        $message = sprintf( __('Failed to finish: %s', ud_get_stateless_media()->domain), $message );\n        break;\n      case Migrator::STATUS_PENDING:\n        if ( $id == $this->primary_migration_id ) {\n          $message = sprintf( __('Ready to run', ud_get_stateless_media()->domain) );\n        } else {\n          $message = sprintf( \n            __('Requires <strong>%s</strong> to finish', ud_get_stateless_media()->domain), \n            $this->migrations[$this->primary_migration_id]['description'] \n          );\n        }\n        break;\n      case Migrator::STATUS_RUNNING:\n        $message = __('In progress...', ud_get_stateless_media()->domain);\n        break;\n    }\n\n    return $message;\n  }\n\n  /**\n   * Generate the UI message for the migration, depending on the current state\n   * \n   * @param string $id\n   * @param array $migration\n   * @return string\n   */\n  private function _get_migration_ui_message($status, $state) {\n    $message = '';\n    $counter = false;\n\n    if ( isset( $state['id'] ) && isset( $state['queue'] ) && is_array( $state['queue'] ) && count( $state['queue'] ) > 1 ) {\n      $counter = sprintf( '%d/%d', array_search($state['id'], $state['queue']) + 1, count($state['queue']) );\n    }\n\n    switch ($status) {\n      case Migrator::STATUS_RUNNING:\n        $message = $counter \n          ? sprintf( __('In progress %s...', ud_get_stateless_media()->domain), $counter) \n          : __('In progress...', ud_get_stateless_media()->domain);\n        break;\n      case Migrator::STATUS_PAUSED:\n        $message = $counter \n          ? sprintf( __('Paused %s...', ud_get_stateless_media()->domain), $counter) \n          : __('Paused...', ud_get_stateless_media()->domain);\n        break;\n    }\n\n    return $message;\n  }\n\n  /**\n   * Returns the status of the migration\n   * \n   * @param string $status\n   * @return string\n   */\n  public static function get_status_text($status) {\n    switch ($status) {\n      case Migrator::STATUS_PENDING:\n        return __('Pending', ud_get_stateless_media()->domain);\n      case Migrator::STATUS_RUNNING:\n        return __('Running', ud_get_stateless_media()->domain);\n      case Migrator::STATUS_SKIPPED:\n        return __('Skipped', ud_get_stateless_media()->domain);\n      case Migrator::STATUS_FINISHED:\n        return __('Finished', ud_get_stateless_media()->domain);\n      case Migrator::STATUS_FAILED:\n        return __('Failed', ud_get_stateless_media()->domain);\n    }\n  }\n\n  /**\n   * Get migrations state for frontend display\n   * \n   * @return array\n   */\n  private function _get_migrations_state($state = null) {\n    $migrations = [];\n    $this->migrations = apply_filters('wp_stateless_get_migrations', []);\n\n    if ( !is_array($this->migrations) ) {\n      $this->migrations = [];\n    }\n  \n    $defaults = [\n      'description' => '',\n      'status'      => '',\n      'status_text' => '',\n      'message'     => '',\n      'ui_message'  => '',\n      'can_start'   => false,\n      'can_pause'   => false,\n      'can_resume'  => false,\n    ];\n\n    $this->_set_primary_migration_id();\n    $batch_state = $state ? $state : apply_filters('wp_stateless_batch_state', [], []);\n    $this->_set_running_migration_id($batch_state);\n\n    foreach ($this->migrations as $id => $migration) {\n      $status = $migration['status'];\n      $can_start = $this->primary_migration_id == $id;\n      $can_pause = false;\n      $can_resume = false;\n\n      if ( $this->running_migration_id == $id ) {\n        $can_start = false;\n\n        if ( $batch_state['is_paused'] ) {\n          $status = Migrator::STATUS_PAUSED;\n          $can_resume = true;\n        } else {\n          $status = Migrator::STATUS_RUNNING;\n          $can_pause = true;\n        }\n      }\n\n      $classes = [\n        $status,\n        $can_start ? 'can-start' : '',\n        $can_pause ? 'can-pause' : '',\n        $can_resume ? 'can-resume' : '',\n      ];\n\n      $data = wp_parse_args([\n        'description' => $migration['description'],\n        'status'      => $status,\n        'classes'     => implode( ' ', array_filter($classes) ),\n        'status_text' => self::get_status_text($status),\n        'message'     => $this->_get_migration_message($id, $migration),\n        'ui_message'  => $this->_get_migration_ui_message($status, $batch_state),\n        'can_start'   => $can_start,\n        'can_pause'   => $can_pause,\n        'can_resume'  => $can_resume,\n        ], $defaults);\n\n      $migrations[$id] = $data;\n    }\n\n    return $migrations;\n  }\n\n  /**\n   * Outputs 'Data Updates' section on the Status tab on the Settings page.\n   */\n  public function tab_content() {\n    if ( is_network_admin() ) {\n      return;\n    }\n\n    $migrations = $this->_get_migrations_state();\n    $migration_ids = [];\n\n    if ( !empty($migrations) ) {\n      foreach ( $migrations as $migration_id => $migration ) {\n        if ( $migration['status'] != Migrator::STATUS_FINISHED && $migration['status'] != Migrator::STATUS_SKIPPED ) {\n          $migration_ids[] = $migration_id;\n        }\n      }\n    }\n\n    if ( !empty($migration_ids) ) {\n      $migration_ids = array_reverse($migration_ids);\n      $migration_id = $migration_ids[0];\n      $migration = $migrations[ $migration_id ];\n\n      include ud_get_stateless_media()->path('static/views/status-sections/migrations.php', 'dir');\n    }\n  }\n\n  /**\n   * Get migration state\n   * \n   * @param array $state\n   * @return array\n   */\n  public function migrations_state($state, $params) {\n    $is_running = $state['is_running'] ?? false;\n    $is_migration = $state['is_migration'] ?? false;\n    $force_migrations = $params['force_migrations'] ?? false;\n\n    if ( !$is_running && !$is_migration && !$force_migrations ) {\n      return $state;\n    }\n\n    $state['migrations'] = $this->_get_migrations_state($state);\n    $state['migrations_notify'] = get_option(Migrator::MIGRATIONS_NOTIFY_KEY, false);\n\n    return $state;\n  }\n}\n "
  },
  {
    "path": "lib/classes/sync/class-background-sync.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\n// Require lib classes if not yet available\nif (!class_exists('UDX_WP_Async_Request')) {\n  require_once ud_get_stateless_media()->path('lib/ns-vendor/classes/deliciousbrains/wp-background-processing/classes/wp-async-request.php', 'dir');\n}\n\nif (!class_exists('UDX_WP_Background_Process')) {\n  require_once ud_get_stateless_media()->path('lib/ns-vendor/classes/deliciousbrains/wp-background-processing/classes/wp-background-process.php', 'dir');\n}\n\nuse UDX_WP_Background_Process, JsonSerializable;\n\n/**\n * Generic background process\n */\nabstract class BackgroundSync extends UDX_WP_Background_Process implements ISync, JsonSerializable {\n\n  /**\n   * Cron Healthcheck interval\n   */\n  public $cron_interval;\n\n  /**\n   * Flag to allow sorting\n   */\n  protected $allow_sorting = false;\n\n  /**\n   * Flag to allow setting the limit\n   */\n  protected $allow_limit = false;\n\n  /**\n   * Storage for emergency memory\n   */\n  private $emergency_memory = null;\n\n  /**\n   * Storage for currently processed item\n   */\n  protected $currently_processing_item = null;\n\n  /**\n   * Extend the construct\n   */\n  public function __construct() {\n    // Support different threads for multisite installations\n    $blog_id = get_current_blog_id();\n    $this->action = \"{$this->action}_{$blog_id}\";\n\n    add_filter('wp_stateless_sync_types', function ($classes) {\n      $classes[$c = get_called_class()] = $c;\n      return $classes;\n    });\n\n    $this->cron_interval = $this->get_healthcheck_cron_interval();\n\n    // Reserve 1MB of RAM for the fallback action\n    $this->emergency_memory = new \\SplFixedArray(65536);\n\n    // Register the fallback action to be executed on shutdown\n    register_shutdown_function(function () {\n      // Free up reserved memory\n      $this->emergency_memory = null;\n\n      // Check if we should execute the fallback action\n      if (is_null($err = error_get_last())) return;\n      if ($err['type'] != E_ERROR) return;\n      if (strstr($err['message'], 'memory') === false || strstr($err['message'], 'exhausted') === false) return;\n      if (!$this->is_running()) return;\n      if (!$this->currently_processing_item) return;\n\n      // If we are here, then we shutdown because of `memory exhausted` error\n\n      // Remove already processed and problem items from the current batch\n      $current_batch = $this->get_batch();\n      if ($current_batch && $current_batch->data && is_array($current_batch->data)) {\n        foreach ($current_batch->data as $key => $item) {\n          unset($current_batch->data[$key]);\n          if ($item == $this->currently_processing_item) {\n            $this->log(sprintf(__('Item skipped: %s. Waiting for process to resume.', ud_get_stateless_media()->domain), $this->currently_processing_item));\n            call_user_func([get_class(), 'task'], $this->currently_processing_item);\n            break;\n          }\n        }\n        $current_batch->data = array_values($current_batch->data);\n      }\n\n      // Update current batch directly to the option\n      // because it needs to be updated even if it is empty\n      update_site_option($current_batch->key, $current_batch->data);\n\n      // Add notice\n      $this->save_process_meta([\n        'notice' => sprintf(\n          __(\"Not enough memory to process the following item '%s' %s: %s. Item skipped. Please, try to increase memory limit or use uploading by chunks: <a target=\\\"_blank\\\" href=\\\"%s\\\">How to use WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE setting.</a>\", ud_get_stateless_media()->domain),\n          is_numeric($this->currently_processing_item) ? get_the_title($this->currently_processing_item) : $this->currently_processing_item,\n          is_numeric($this->currently_processing_item) ? \"(ID: {$this->currently_processing_item})\" : '',\n          $err['message'],\n          ud_get_stateless_media()->get_docs_page_url('docs/constants/#wpstatelessmediauploadchunksize'),\n        )\n      ]);\n\n      wp_die();\n    });\n\n    parent::__construct();\n  }\n\n  /**\n   * Maybe process queue (extended)\n   *\n   * Checks whether data exists within the queue and that\n   * the process is not already running.\n   */\n  public function maybe_handle() {\n    // Don't lock up other requests while processing\n    session_write_close();\n\n    if ($this->is_processing()) {\n      // Background process already running.\n      wp_die();\n    }\n\n    if ($this->is_queue_empty()) {\n      // No data to process.\n      wp_die();\n    }\n\n    $this->handle();\n\n    wp_die();\n  }\n\n  /**\n   * Determine sync healthcheck interval\n   */\n  protected function get_healthcheck_cron_interval() {\n    return (defined('WP_STATELESS_SYNC_HEALTHCHECK_INTERVAL') && is_int(WP_STATELESS_SYNC_HEALTHCHECK_INTERVAL)) ? WP_STATELESS_SYNC_HEALTHCHECK_INTERVAL : 1;\n  }\n\n  /**\n   * Get option key for STOPPED option\n   */\n  protected function get_stopped_option_key() {\n    return \"{$this->action}_stopped\";\n  }\n\n  /**\n   * Determine maximum batch size\n   * \n   * @return int Default is 50\n   */\n  public function get_max_batch_size() {\n    return (defined('WP_STATELESS_SYNC_MAX_BATCH_SIZE') && is_int(WP_STATELESS_SYNC_MAX_BATCH_SIZE)) ? WP_STATELESS_SYNC_MAX_BATCH_SIZE : 50;\n  }\n\n  /**\n   * Get all batches\n   * \n   * @param int $limit 0\n   * @return array\n   */\n  public function get_batches($limit = 0) {\n    global $wpdb;\n\n    if (empty($limit) || !is_int($limit)) {\n      $limit = 0;\n    }\n\n    $table        = $wpdb->options;\n    $column       = 'option_name';\n    $key_column   = 'option_id';\n    $value_column = 'option_value';\n\n    if (is_multisite()) {\n      $table        = $wpdb->sitemeta;\n      $column       = 'meta_key';\n      $key_column   = 'meta_id';\n      $value_column = 'meta_value';\n    }\n\n    $key = $wpdb->esc_like($this->identifier) . '_batch_%';\n\n    $sql = \"\n\t\t\tSELECT *\n\t\t\tFROM {$table}\n\t\t\tWHERE {$column} LIKE %s\n\t\t\tORDER BY {$key_column} ASC\n\t\t\t\";\n\n    if (!empty($limit)) {\n      $sql .= \" LIMIT {$limit}\";\n    }\n\n    $items = $wpdb->get_results($wpdb->prepare($sql, $key));\n\n    $batches = [];\n\n    if (!empty($items)) {\n      $batches = array_map(\n        function ($item) use ($column, $value_column) {\n          $batch       = new \\stdClass();\n          $batch->key  = $item->$column;\n          $batch->data = maybe_unserialize($item->$value_column);\n\n          return $batch;\n        },\n        $items\n      );\n    }\n\n    return $batches;\n  }\n\n  /**\n   * Get one top batch\n   */\n  protected function get_batch() {\n    return array_reduce(\n      $this->get_batches(1),\n      function ($_, $batch) {\n        return $batch;\n      },\n      []\n    );\n  }\n\n  /**\n   * Delete all batches\n   * \n   * @return self\n   */\n  public function delete_all() {\n    $batches = $this->get_batches();\n\n    foreach ($batches as $batch) {\n      $this->delete($batch->key);\n    }\n\n    $this->clear_queue_size();\n    return $this;\n  }\n\n  /**\n   * Stop processing\n   */\n  public function stop() {\n    $this->delete_all();\n    update_site_option($this->get_stopped_option_key(), true);\n    $this->clear_process_meta();\n    $this->log(\"Stopped\");\n  }\n\n  /**\n   * Determine if process is stopped.\n   * \n   * @return bool\n   */\n  public function is_stopped() {\n    $network_id = get_current_network_id();\n    wp_cache_delete(\"$network_id:notoptions\", 'site-options');\n    return boolval(get_site_option($this->get_stopped_option_key()));\n  }\n\n  /**\n   * Update the whole queue size\n   * \n   * @param int $size\n   * @return self\n   */\n  public function update_queue_size($size) {\n    $size = intval($size) + $this->get_queue_size();\n    update_site_option(\"{$this->action}_queue_size\", $size);\n    return $this;\n  }\n\n  /**\n   * Get current queue size\n   */\n  public function get_queue_size() {\n    return intval(get_site_option(\"{$this->action}_queue_size\", 0));\n  }\n\n  /**\n   * Clear the queue size \n   * \n   * @return self\n   */\n  public function clear_queue_size() {\n    delete_site_option(\"{$this->action}_queue_size\");\n    return $this;\n  }\n\n  /**\n   * Clear process meta\n   * \n   * @return self\n   */\n  public function clear_process_meta() {\n    // Clear limits for future starts\n    delete_site_option(\"{$this->action}_meta\");\n    return $this;\n  }\n\n  /**\n   * Save process meta data\n   * \n   * @param array $meta\n   */\n  public function save_process_meta($meta = []) {\n    if (!empty($meta)) {\n      $existing_meta = get_site_option(\"{$this->action}_meta\", []);\n      foreach ($meta as $key => $value) {\n        $existing_meta[$key] = $value;\n      }\n      update_site_option(\"{$this->action}_meta\", $existing_meta);\n    }\n  }\n\n  /**\n   * Get process meta data. All or by the key.\n   * \n   * @param string|bool $key\n   * @return array|string|null\n   */\n  public function get_process_meta($name = false) {\n    $meta = get_site_option(\"{$this->action}_meta\", []);\n    if (false === $name) {\n      return $meta;\n    }\n    return isset($meta[$name]) ? $meta[$name] : null;\n  }\n\n  /**\n   * Extending save queue method\n   *\n   * @return $this\n   */\n  public function save() {\n    $batch_size = is_array($this->data) ? count($this->data) : 1;\n    $this->update_queue_size($batch_size);\n    parent::save();\n    $this->data = [];\n    return $this;\n  }\n\n  /**\n   * Extending complete process method\n   */\n  protected function complete() {\n    parent::complete();\n    $this->clear_process_meta();\n    $this->clear_queue_size();\n    delete_site_option($this->get_stopped_option_key());\n\n    // Sending notification\n    $sync_name = strip_tags($this->get_name());\n    $site = site_url();\n\n    $subject = sprintf(__('WP-Stateless: %s Synchronization Complete', ud_get_stateless_media()->domain), $sync_name);\n    $message = sprintf(__(\"WP-Stateless has finished synchronizing %s for %s.\\n\\nIf you have WP_STATELESS_SYNC_LOG or WP_DEBUG_LOG enabled, review those logs now to review any errors that may have occurred during the synchronization process.\", ud_get_stateless_media()->domain), $sync_name, $site);\n\n    do_action('wp_stateless_send_admin_email', $subject, $message);\n  }\n\n  /**\n   * Remember currently processing item\n   */\n  protected function before_task($item) {\n    $this->currently_processing_item = $item;\n  }\n\n  /**\n   * Common task that should be executed in the end of each subclass task\n   */\n  protected function task($_) {\n    $processedCount = intval($this->get_process_meta('processed'));\n    $this->save_process_meta([\n      'processed' => ++$processedCount,\n      'last_at' => current_time('timestamp')\n    ]);\n  }\n\n  /**\n   * Default name\n   * \n   * @return string\n   */\n  public function get_name() {\n    return __('Background Sync', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Default helper window is set to false\n   * \n   * @return HelperWindow|bool\n   */\n  public function get_helper_window() {\n    return false;\n  }\n\n  /**\n   * Process specific notice\n   * \n   * @return array|bool\n   */\n  public function get_process_notice() {\n    $notice = $this->get_process_meta('notice');\n    if (empty($notice)) return [];\n    return [$notice];\n  }\n\n  /**\n   * Is running?\n   */\n  public function is_running() {\n    return !$this->is_queue_empty() || $this->is_processing();\n  }\n\n  /**\n   * Convert to json\n   * \n   * @return array\n   */\n  #[\\ReturnTypeWillChange]\n  public function jsonSerialize() {\n    return [\n      'id' => get_called_class(),\n      'name' => $this->get_name(),\n      'helper' => $this->get_helper_window(),\n      'is_running' => $this->is_running(),\n      'limit' => ($limit = $this->get_process_meta('limit')) ? $limit : 0,\n      'order' => ($order = $this->get_process_meta('order')) ? $order : 'desc',\n      'total_items' => $this->get_total_items(),\n      'queued_items' => $this->get_queue_size(),\n      'processed_items' => ($processed = $this->get_process_meta('processed')) ? $processed : 0,\n      'allow_limit' => $this->allow_limit,\n      'allow_sorting' => $this->allow_sorting,\n      'notice' => $this->get_process_notice()\n    ];\n  }\n\n  /**\n   * Log background process event\n   * \n   * @param string $message\n   * @return bool TRUE on success or FALSE on failure\n   */\n  public function log($message) {\n    $message = strip_tags(sprintf('Background Sync - %s: %s', $this->get_name(), $message));\n\n    if (is_multisite()) {\n      $blog_id = get_current_blog_id();\n      $message = sprintf('[Blog %s] %s', $blog_id, $message);\n    }\n\n    if (!defined('WP_STATELESS_SYNC_LOG')) {\n      return error_log($message);\n    }\n\n    return error_log(date('c') . \": $message\\n\", 3, WP_STATELESS_SYNC_LOG);\n  }\n\n  /**\n   * Start process.\n   * Should be implemented by subclasses.\n   */\n  abstract public function start();\n}\n"
  },
  {
    "path": "lib/classes/sync/class-file-sync.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\nuse wpCloud\\StatelessMedia\\FatalException;\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\UnprocessableException;\nuse wpCloud\\StatelessMedia\\Utility;\n\nclass FileSync extends LibrarySync {\n\n  /**\n   * Make is singleton\n   */\n  use Singleton;\n\n  /**\n   * Unique action\n   */\n  protected $action = 'wps_bg_file_sync';\n\n  /**\n   * Allow sorting for this kind of sync\n   */\n  protected $allow_sorting = true;\n\n  /**\n   * Allow setting the limit for this kind of sync\n   */\n  protected $allow_limit = true;\n\n  /**\n   * Name\n   */\n  public function get_name() {\n    return __('Media Library Files', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get SQL condition to compose the query to get items to process by library sync\n   * \n   * @return string\n   */\n  public function get_sql_condition() {\n    return \"AND post_mime_type NOT LIKE 'image/%'\";\n  }\n\n  /**\n   * Helper window\n   */\n  public function get_helper_window() {\n    return new HelperWindow(\n      __('What are Media Library Files?', ud_get_stateless_media()->domain),\n      __('All non-image files that were uploaded via the media library or via plugins that use standard uploading API.', ud_get_stateless_media()->domain)\n    );\n  }\n\n  /**\n   * Process one file item\n   * \n   * @param mixed $id\n   * @return bool\n   */\n  protected function task($id) {\n    try {\n      if ($this->is_stopped()) return false;\n      parent::before_task($id);\n\n      timer_start();\n      set_time_limit(0);\n\n      $file = Utility::process_file_by_id($id);\n      $this->log(sprintf(__('%1$s (ID %2$s) was successfully synced in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($file->ID)), $file->ID, timer_stop()));\n\n      if (!$this->is_stopped()) {\n        $this->extend_queue();\n      }\n\n      parent::task($id);\n      return false;\n    } catch (FatalException $e) {\n      $this->log(\"Stopped due to error - {$e->getMessage()}\");\n      $this->stop();\n      return false;\n    } catch (UnprocessableException $e) {\n      $this->log($e->getMessage());\n      return false;\n    } catch (\\Throwable $e) {\n      $this->log(\"Stopped due to error - {$e->getMessage()}\");\n      $this->stop();\n      return false;\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/sync/class-helper-window.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\n/**\n * Helper Window for a single process UI\n */\nclass HelperWindow {\n\n  /**\n   * Title\n   */\n  public $title;\n\n  /**\n   * Content\n   */\n  public $content;\n\n  /**\n   * Construct\n   */\n  public function __construct($title, $content) {\n    $this->title = $title;\n    $this->content = $content;\n  }\n\n  /**\n   * To JSON\n   */\n  #[\\ReturnTypeWillChange]\n  public function jsonSerialize() {\n    return get_object_vars($this);\n  }\n}\n"
  },
  {
    "path": "lib/classes/sync/class-image-sync.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\nuse wpCloud\\StatelessMedia\\FatalException;\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\UnprocessableException;\nuse wpCloud\\StatelessMedia\\Utility;\n\n/**\n * Background process for synchronization of media library images\n */\nclass ImageSync extends LibrarySync {\n\n  /**\n   * Make is singleton\n   */\n  use Singleton;\n\n  /**\n   * Unique action\n   */\n  protected $action = 'wps_bg_image_sync';\n\n  /**\n   * Allow sorting for this kind of sync\n   */\n  protected $allow_sorting = true;\n\n  /**\n   * Allow setting the limit for this kind of sync\n   */\n  protected $allow_limit = true;\n\n  /**\n   * Name\n   * \n   * @return string\n   */\n  public function get_name() {\n    return __('Media Library Images', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Get SQL condition to compose the query to get items to process by library sync\n   * \n   * @return string\n   */\n  public function get_sql_condition() {\n    return \"AND post_mime_type LIKE 'image/%'\";\n  }\n\n  /**\n   * Helper window\n   * \n   * @return HelperWindow\n   */\n  public function get_helper_window() {\n    return new HelperWindow(\n      __('What are Media Library Images?', ud_get_stateless_media()->domain),\n      __('All image files that were uploaded via the media library or via plugins that use standard uploading API.', ud_get_stateless_media()->domain)\n    );\n  }\n\n  /**\n   * Process 1 item from the queue\n   * \n   * @param mixed $id\n   * @return bool\n   */\n  protected function task($id) {\n    try {\n      if ($this->is_stopped()) return false;\n      parent::before_task($id);\n\n      timer_start();\n      set_time_limit(0);\n\n      $image = Utility::process_image_by_id($id);\n      $this->log(sprintf(__('%1$s (ID %2$s) was successfully synced in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($image->ID)), $image->ID, timer_stop()));\n\n      if (!$this->is_stopped()) {\n        $this->extend_queue();\n      }\n\n      parent::task($id);\n      return false;\n    } catch (FatalException $e) {\n      $this->log(\"Stopped due to error - {$e->getMessage()}\");\n      $this->stop();\n      return false;\n    } catch (UnprocessableException $e) {\n      $this->log($e->getMessage());\n      return false;\n    } catch (\\Throwable $e) {\n      $this->log(\"Stopped due to error - {$e->getMessage()}\");\n      $this->stop();\n      return false;\n    }\n  }\n}\n"
  },
  {
    "path": "lib/classes/sync/class-library-sync.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\nuse wpCloud\\StatelessMedia\\UnprocessableException;\n\nabstract class LibrarySync extends BackgroundSync {\n\n  /**\n   * Condition SQL\n   * Should be defined in child classes\n   */\n  abstract public function get_sql_condition();\n\n  /**\n   * Get transient key for total items value\n   */\n  private function get_total_items_trans_key() {\n    return \"{$this->action}_total_items\";\n  }\n\n  /**\n   * Start the process\n   * \n   * @param array $args []\n   * @return bool\n   */\n  public final function start($args = []) {\n    try {\n      if ($this->is_processing()) throw new UnprocessableException(__('Process already running', ud_get_stateless_media()->domain));\n\n      // Make sure there is no orphaned data and state\n      delete_site_option($this->get_stopped_option_key());\n      delete_transient($this->get_total_items_trans_key());\n      $this->clear_process_meta();\n\n      $settings = wp_parse_args($args, [\n        'limit' => null,\n        'order' => null\n      ]);\n\n      $limit = $settings['limit'] ? intval($settings['limit']) : 0;\n      $order = in_array($settings['order'], ['desc', 'asc']) ? $settings['order'] : 'desc';\n\n      global $wpdb;\n      $sql = \"SELECT ID FROM $wpdb->posts \n            WHERE post_type = 'attachment' \n              {$this->get_sql_condition()}\n              AND post_date < %s \n            ORDER BY ID $order \n            LIMIT %d\";\n      $query = $wpdb->prepare($sql, $datetime = current_time('mysql'), $this->get_max_batch_size());\n      $ids = $wpdb->get_col($query);\n\n      $total = 0;\n      foreach ($ids as $id) {\n        if (!$limit || $total < $limit) {\n          $this->push_to_queue($id);\n          $total++;\n        }\n      }\n\n      $this->save_process_meta([\n        'limit' => $limit,\n        'datetime' => $datetime,\n        'order' => $order,\n        'last_id' => $id\n      ]);\n\n      $this->save()->dispatch();\n      $this->log('Started');\n      return true;\n    } catch (UnprocessableException $e) {\n      $this->log(sprintf(__('Could not start the new process: %s'), $e->getMessage()));\n      return true;\n    } catch (\\Throwable $e) {\n      $this->log(sprintf(__('Could not start the process due to the error: %s'), $e->getMessage()));\n      $this->stop();\n      return false;\n    }\n  }\n\n  /**\n   * Provide the queue with the new data if available\n   * \n   * @return bool\n   */\n  public function extend_queue() {\n    try {\n      global $wpdb;\n\n      $meta = $this->get_process_meta();\n      $last_id = isset($meta['last_id']) ? $meta['last_id'] : false;\n\n      if (!$last_id) return;\n\n      $limit = isset($meta['limit']) ? $meta['limit'] : 0;\n      $order = isset($meta['order']) ? $meta['order'] : 'desc';\n      $datetime = isset($meta['datetime']) ? $meta['datetime'] : current_time('mysql');\n\n      $range_condition = $order === 'desc' ? $wpdb->prepare(\"AND ID < %d\", $last_id) : $wpdb->prepare(\"AND ID > %d\", $last_id);\n\n      $sql = \"SELECT ID FROM $wpdb->posts \n            WHERE post_type = 'attachment' \n              {$this->get_sql_condition()}\n              AND post_date < %s \n              $range_condition\n            ORDER BY ID $order \n            LIMIT %d\";\n      $query = $wpdb->prepare($sql, $datetime, $this->get_max_batch_size());\n      $ids = $wpdb->get_col($query);\n\n      $total = $this->get_queue_size();\n      foreach ($ids as $id) {\n        if (!$limit || $total < $limit) {\n          $this->push_to_queue($id);\n          $total++;\n        }\n      }\n\n      if (!empty($this->data)) {\n        $this->save()->save_process_meta([\n          'last_id' => $id\n        ]);\n      } else {\n        $this->save_process_meta([\n          'last_id' => 0\n        ]);\n      }\n\n      return true;\n    } catch (\\Throwable $e) {\n      $this->log(sprintf('Something went wrong while extending the queue: %s. Stopping the whole process.', $e->getMessage()));\n      $this->stop();\n      return false;\n    }\n  }\n\n  /**\n   * Thing to do in complete\n   */\n  protected function complete() {\n    parent::complete();\n\n    // @todo do something when complete\n    $this->log(\"Complete\");\n  }\n\n  /**\n   * Get Total Items (caching utilized)\n   * \n   * @return int\n   */\n  public function get_total_items() {\n    $cached = get_transient($this->get_total_items_trans_key());\n    if ($cached) return intval($cached);\n\n    global $wpdb;\n    $sql = \"SELECT count(*) \n      FROM $wpdb->posts \n      WHERE post_type = 'attachment' \n        {$this->get_sql_condition()}\";\n    $total = $wpdb->get_var($sql);\n\n    set_transient($this->get_total_items_trans_key(), $total, MINUTE_IN_SECONDS * 5);\n    return intval($total);\n  }\n\n  /**\n   * Notice if process seemed to be stuck\n   * \n   * @return string|false\n   */\n  public function get_process_notice() {\n    $notices = parent::get_process_notice();\n    $last = intval($this->get_process_meta('last_at'));\n    if (!$last) {\n      $last = strtotime( $this->get_process_meta('datetime') ?? '' );\n      if (false === $last) return $notices;\n    }\n\n    if (!property_exists($this, 'cron_interval')) return $notices;\n\n    $waiting = current_time('timestamp') - $last;\n    if ($waiting < 5 * MINUTE_IN_SECONDS * $this->cron_interval) return $notices;\n\n    $notices[] = sprintf(__('This process takes longer than it should. Please, make sure loopback connections and WP Cron are enabled and working, or try restarting the process.', ud_get_stateless_media()->domain));\n    return $notices;\n  }\n}\n"
  },
  {
    "path": "lib/classes/sync/class-non-library-sync.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\nuse wpCloud\\StatelessMedia\\FatalException;\nuse wpCloud\\StatelessMedia\\Singleton;\nuse wpCloud\\StatelessMedia\\UnprocessableException;\n\nclass NonLibrarySync extends BackgroundSync {\n\n  // Make it singleton\n  use Singleton;\n\n  /**\n   * Unique action\n   */\n  protected $action = 'wps_bg_non_library_sync';\n\n  /**\n   * Items holder\n   */\n  private $items = [];\n\n  /**\n   * Extended construct\n   */\n  public function __construct() {\n   //$this->items = array_filter(array_unique(apply_filters('sm:sync::nonMediaFiles', [])));\n    parent::__construct();\n  }\n\n  /**\n   * Get sync name\n   * \n   * @return string\n   */\n  public function get_name() {\n    return __('Compatibility Files <span class=\"label\">Beta</span>', ud_get_stateless_media()->domain);\n  }\n\n  /**\n   * Sync helper window\n   * \n   * @return HelperWindow\n   */\n  public function get_helper_window() {\n    return new HelperWindow(\n      __('What are Compatibility Files?', ud_get_stateless_media()->domain),\n      __('All kind of files that were created by themes and plugins in custom folders out of standard Media Library, and that WP-Stateless has a Compatibility Support for. Limit and Sorting is not supported.', ud_get_stateless_media()->domain)\n    );\n  }\n\n  /**\n   * Start the process\n   * \n   * @return bool\n   */\n  public function start() {\n    try {\n      if ($this->is_processing()) throw new UnprocessableException(__('Process already running', ud_get_stateless_media()->domain));\n\n      // Make sure there is no orphaned data and state\n      delete_site_option($this->get_stopped_option_key());\n      $this->clear_process_meta();\n      $this->items = array_filter(array_unique(apply_filters('sm:sync::nonMediaFiles', [])));\n\n      $chunks = array_chunk($this->items, $this->get_max_batch_size());\n      if (!empty($chunks)) {\n        foreach ($chunks as $chunk) {\n          foreach ($chunk as $item) {\n            $this->push_to_queue($item);\n          }\n\n          $this->save();\n        }\n      }\n\n      $this->dispatch();\n\n      $this->save_process_meta([\n        'starttime' => current_time('timestamp')\n      ]);\n      $this->log('Started');\n      return true;\n    } catch (UnprocessableException $e) {\n      $this->log(sprintf(__('Could not start the new process: %s'), $e->getMessage()));\n      return true;\n    } catch (\\Throwable $e) {\n      $this->log(sprintf(__('Could not start the process due to the error: %s'), $e->getMessage()));\n      $this->stop();\n      return false;\n    }\n  }\n\n  /**\n   * Process one item from the queue\n   */\n  protected function task($item) {\n    try {\n      parent::before_task($item);\n\n      timer_start();\n\n      if (ud_get_stateless_media()->is_connected_to_gs() !== true) {\n        throw new FatalException(__('Not connected to GCS', ud_get_stateless_media()->domain));\n      }\n\n      if (is_multisite() && ($blog_id = get_current_blog_id()) != 1) {\n        switch_to_blog(1);\n        $upload_dir = wp_upload_dir();\n        switch_to_blog($blog_id);\n      } else {\n        $upload_dir = wp_upload_dir();\n      }\n\n      $file_path = trim($item, '/');\n      $basedir = ud_get_stateless_media()->is_mode('stateless') ? ud_get_stateless_media()->get_gs_path() : $upload_dir['basedir'];\n      $fullsizepath = $basedir . '/' . $file_path;\n\n      do_action('sm:sync::syncFile', $file_path, $fullsizepath, true, ['remove_from_queue' => true, 'manual_sync' => true]);\n\n      $this->log(sprintf(__('%1$s (ID %2$s) was successfully synchronised in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($file_path)), $file_path, timer_stop()));\n\n      parent::task($item);\n      return false;\n    } catch (FatalException $e) {\n      $this->log(\"Stopped due to error - {$e->getMessage()}\");\n      $this->stop();\n      return false;\n    } catch (UnprocessableException $e) {\n      $this->log($e->getMessage());\n      return false;\n    } catch (\\Throwable $e) {\n      $this->log(\"Stopped due to error - {$e->getMessage()}\");\n      $this->stop();\n      return false;\n    }\n  }\n\n  /**\n   * Thing to do in complete\n   */\n  protected function complete() {\n    parent::complete();\n\n    // @todo do something when complete\n    $this->log(\"Complete\");\n  }\n\n  /**\n   * Notice if process seemed to be stuck\n   * \n   * @return string|false\n   */\n  public function get_process_notice() {\n    $notices = parent::get_process_notice();\n    $last = intval($this->get_process_meta('last_at'));\n    if (!$last) {\n      $last = intval($this->get_process_meta('starttime'));\n      if (!$last) return $notices;\n    }\n\n    if (!property_exists($this, 'cron_interval')) return $notices;\n\n    $waiting = current_time('timestamp') - $last;\n    if ($waiting < 5 * MINUTE_IN_SECONDS * $this->cron_interval) return $notices;\n\n    $notices[] = sprintf(__('This process takes longer than it should. Please, make sure loopback connections and WP Cron are enabled and working, or try restarting the process.', ud_get_stateless_media()->domain));\n    return $notices;\n  }\n\n  /**\n   * Get count of items\n   * \n   * @return int\n   */\n  public function get_total_items() {\n    return ud_stateless_db()->get_total_non_media_files();\n  }\n\n  public function extend_queue() {\n    // Not needed for this kind of sync\n  }\n}\n"
  },
  {
    "path": "lib/classes/sync/interface-sync.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia\\Sync;\n\ninterface ISync {\n\n  /**\n   * Start Process from begining.\n   * Needs to be implemented separately for each kind of sync.\n   */\n  public function start();\n\n  /**\n   * Fill queue with more items if available.\n   * Needs to be implemented separately for each kind of sync.\n   */\n  public function extend_queue();\n\n  /**\n   * Implementation of the count of items for this sync type.\n   */\n  public function get_total_items();\n\n  /**\n   * Sync Process needs to have a display-able name\n   */\n  public function get_name();\n\n  /**\n   * Helper window. Return false if no window needed.\n   */\n  public function get_helper_window();\n}\n"
  },
  {
    "path": "lib/classes/trait-singleton.php",
    "content": "<?php\n\nnamespace wpCloud\\StatelessMedia;\n\n/**\n * Class Singleton\n * @package wpCloud\\StatelessMedia\n */\ntrait Singleton {\n\n  /**\n   * @var null\n   */\n  private static $instance = null;\n\n  /**\n   * Instance\n   *\n   * @return null|Singleton\n   */\n  public static function instance() {\n    return self::$instance ? self::$instance : self::$instance = new self;\n  }\n}\n"
  },
  {
    "path": "lib/cli/class-sm-cli-command.php",
    "content": "<?php\n\nuse wpCloud\\StatelessMedia\\Migrator;\nuse \\wpCloud\\StatelessMedia\\Batch\\BatchTaskManager;\n\n/**\n * WP CLI SM Commands\n */\nif (defined('WP_CLI') && WP_CLI && class_exists('WP_CLI_Command')) {\n\n  /**\n   * WP-CLI command\n   */\n  class SM_CLI_Command extends WP_CLI_Command {\n\n    public $url;\n\n    /**\n     * @param $args\n     * @param $assoc_args\n     */\n    public function __construct($args = array(), $assoc_args = array()) {\n      parent::__construct();\n\n      if (php_sapi_name() != 'cli') {\n        die('Must run from command line');\n      }\n\n      //** Setup some server settings */\n      set_time_limit(0);\n      ini_set('memory_limit', '2G');\n      //** Setup error handling */\n      ini_set('display_errors', 1);\n      ini_set('log_errors', 0);\n      ini_set('html_errors', 0);\n\n      if (!class_exists('SM_CLI_Process')) {\n        require_once(dirname(__FILE__) . '/class-sm-cli-process.php');\n      }\n\n      if (!class_exists('SM_CLI')) {\n        require_once(dirname(__FILE__) . '/class-sm-cli.php');\n      }\n\n      /** Be sure that we add url parameter to commands if we have MultiSite installation. */\n      $this->url = is_multisite() ? WP_CLI::get_runner()->config['url'] : false;\n    }\n\n    /**\n     * Sync Data\n     *\n     * ## OPTIONS\n     *\n     * <type>\n     * : Which data we want to sync. May be images or files.\n     * \n     * --url\n     * : Blog URL if multisite installation.\n     *\n     * --start\n     * : Indent (sql start). It's ignored on batches.\n     *\n     * --limit\n     * : Limit per query (sql limit)\n     *\n     * --end\n     * : Where ( on which row ) we should stop script. It's ignored on batches\n     *\n     * --batch\n     * : Number of Batch. Default is 1.\n     *\n     * --batches\n     * : General amount of batches.\n     *\n     * --b\n     * : Runs command using batches till it's done. Other parameters will be ignored. There are 10 batches by default. Batch is external command process\n     *\n     * --log\n     * : Show more information in command line\n     *\n     * --o\n     * : Process includes database optimization and transient removing.\n     *\n     * --order\n     * : Order. May be ASC or DESC\n     *\n     * ## EXAMPLES\n     *\n     * wp stateless sync images --url=example.com --b\n     * : Run process looping 10 batches. Every batch is external command 'wp stateless sync images --url=example.com --batch=<number> --batches=10'\n     *\n     * wp stateless sync images --url=example.com --b --batches=100\n     * : Run process looping 100 batches.\n     *\n     * wp stateless sync images --url=example.com --b --batches=10 --batch=2\n     * : Run second batch from 10 batches manually.\n     *\n     * wp stateless sync images --url=example.com --log\n     * : Run default process showing additional information in command line.\n     *\n     * wp stateless sync images --url=example.com --end=3000 --limit=50\n     * : Run process from 1 to 3000 row. Splits process by limiting queries to 50 rows. So, the current example does 60 queries ( 3000 / 50 = 60 )\n     *\n     * wp stateless sync images --url=example.com --start=777 --end=3000 --o\n     * : Run process from 777 to 3000 row. Also does database optimization and removes transient in the end.\n     *\n     * @synopsis <type> [--url=<val>] [--start=<val>] [--limit=<val>] [--end=<val>] [--batch=<val>] [--batches=<val>] [--b] [--log] [--o] [--order=<val>]\n     * @param $args\n     * @param $assoc_args\n     */\n    public function sync($args, $assoc_args) {\n\n      $sm_mode = ud_get_stateless_media()->get('sm.mode');\n      if ($sm_mode === 'stateless') {\n        WP_CLI::error('Sync is not supported in Stateless mode');\n      }\n      //** DB Optimization process */\n      if (isset($assoc_args['o'])) {\n        $this->_before_command_run();\n      }\n      //** Run batches */\n      if (isset($assoc_args['b'])) {\n        if (empty($args[0])) {\n          WP_CLI::error('Invalid type parameter');\n        }\n        $this->_run_batches('sync', $args[0], $assoc_args);\n      }\n      //** Or run command as is. */\n      else {\n        if (!class_exists('SM_CLI_Sync')) {\n          require_once(dirname(__FILE__) . '/class-sm-cli-sync.php');\n        }\n        if (class_exists('SM_CLI_Sync')) {\n          $object = new SM_CLI_Sync($args, $assoc_args);\n          $controller = !empty($args[0]) ? $args[0] : false;\n          if ($controller && is_callable(array($object, $controller))) {\n            call_user_func(array($object, $controller));\n          } else {\n            WP_CLI::error('Invalid type parameter');\n          }\n        } else {\n          WP_CLI::error('Class SM_CLI_Sync is undefined.');\n        }\n      }\n      //** Get rid of all transients and run DB optimization again */\n      if (isset($assoc_args['o'])) {\n        $this->_after_command_run();\n      }\n    }\n\n    /**\n     * Upgrade Data\n     *\n     * ## OPTIONS\n     *\n     * <type>\n     * : Which data we want to upgrade. Currently only 'meta' type is supported.\n     *\n     * --start\n     * : Indent (sql start). It's ignored on batches.\n     *\n     * --limit\n     * : Limit per query (sql limit)\n     *\n     * --end\n     * : Where ( on which row ) we should stop script. It's ignored on batches\n     *\n     * --batch\n     * : Number of Batch. Default is 1.\n     *\n     * --batches\n     * : General amount of batches.\n     *\n     * --b\n     * : Runs command using batches till it's done. Other parameters will be ignored. There are 10 batches by default. Batch is external command process\n     *\n     * --log\n     * : Show more information in command line\n     *\n     * --o\n     * : Process includes database optimization and transient removing.\n     * \n     * --url\n     * : Blog URL if multisite installation.\n     *\n     * ## EXAMPLES\n     *\n     * wp stateless upgrade meta --url=example.com --b\n     * : Run process looping 10 batches. Every batch is external command 'wp stateless upgrade meta --url=example.com --batch=<number> --batches=10'\n     *\n     * wp stateless upgrade meta --url=example.com --b --batches=100\n     * : Run process looping 100 batches.\n     *\n     * wp stateless upgrade meta --url=example.com --b --batches=10 --batch=2\n     * : Run second batch from 10 batches manually.\n     *\n     * wp stateless upgrade meta --url=example.com --log\n     * : Run default process showing additional information in command line.\n     *\n     * wp stateless upgrade meta --url=example.com --end=3000 --limit=50\n     * : Run process from 1 to 3000 row. Splits process by limiting queries to 50 rows. So, the current example does 60 queries ( 3000 / 50 = 60 )\n     *\n     * wp stateless upgrade meta --url=example.com --start=777 --end=3000 --o\n     * : Run process from 777 to 3000 row. Also does database optimization and removes transient in the end.\n     *\n     * @synopsis <type> [--url=<val>] [--start=<val>] [--limit=<val>] [--end=<val>] [--batch=<val>] [--batches=<val>] [--b] [--log] [--o]\n     * @param $args\n     * @param $assoc_args\n     */\n    public function upgrade($args, $assoc_args) {\n      //** DB Optimization process */\n      if (isset($assoc_args['o'])) {\n        $this->_before_command_run();\n      }\n      //** Run batches */\n      if (isset($assoc_args['b'])) {\n        if (empty($args[0])) {\n          WP_CLI::error('Invalid type parameter');\n        }\n        $this->_run_batches('upgrade', $args[0], $assoc_args);\n      }\n      //** Or run command as is. */\n      else {\n        if (!class_exists('SM_CLI_Upgrade')) {\n          require_once(dirname(__FILE__) . '/class-sm-cli-upgrade.php');\n        }\n        if (class_exists('SM_CLI_Upgrade')) {\n          $object = new SM_CLI_Upgrade($args, $assoc_args);\n          $controller = !empty($args[0]) ? $args[0] : false;\n          if ($controller && is_callable(array($object, $controller))) {\n            call_user_func(array($object, $controller));\n          } else {\n            WP_CLI::error('Invalid type parameter');\n          }\n        } else {\n          WP_CLI::error('Class SM_CLI_Upgrade is undefined.');\n        }\n      }\n      //** Get rid of all transients and run DB optimization again */\n      if (isset($assoc_args['o'])) {\n        $this->_after_command_run();\n      }\n    }\n\n    /**\n     * Run migrations\n     *\n     * ## OPTIONS\n     *\n     * [<id|auto>]\n     * : start migration by its ID, or automatically run all pending migrations (auto). Auto mode does not support '--force' parameter.\n     *\n     * --force\n     * : Force starting migration even if it is not pending\n     * \n     * --progress=<interval>\n     * : Monitor migration progress every <interval> seconds (minimum 1)\n     * \n     * --email=<email>\n     * : Send email notification to specified email when migration is finished. By default it uses email from plugin settings. You can also use a list of emails, comma separated.\n     * \n     * --url\n     * : Blog URL if multisite installation.\n     * \n     * --yes\n     * : Confirm automatically.\n     * \n     *\n     * ## EXAMPLES\n     *\n     * wp stateless migrate\n     * : List migrations information.\n     *\n     * wp stateless migrate --url=example.com\n     * : List migrations information for specific blog in multisite network.\n     *\n     * wp stateless migrate --progress=3\n     * : Display current migration progress every 3 seconds.\n     *\n     * wp stateless migrate 20240216150177\n     * : Start migration with ID 20240216150177.\n     *\n     * wp stateless migrate auto --email=mail@example.com --yes\n     * : Automatically run all pending migrations without confirmation and send notifications to mail@example.com.\n     *\n     * wp stateless migrate 20240216150177 --progress=2 --yes\n     * : Start migration with ID 20240216150177 without confirmation and display progress every 2 seconds.\n     *\n     * wp stateless migrate 20240216150177 --force --email=mail@example.com,user@domain.com --url=example.com \n     * : Start migration with ID 20240216150177 for specific blog in multisite network. Start migration even if it was already finished or failed. After finishing send email notification to mail@example.com and user@domain.com.\n     *\n     * @synopsis [<id|auto>] [--force] [--progress=<val>] [--email=<val>] [--yes] [--url=<val>]\n     * @param $args\n     * @param $assoc_args\n     */\n    public function migrate($args, $assoc_args) {\n      $id = $args[0] ?? '';\n\n      // No migration ID provided, list all migrations and exit\n      if ( empty($id) && !isset($assoc_args['progress']) ) {\n        $this->_list_migrations();\n\n        return;\n      } else if ( !empty($id) ) {\n        if ( $id === 'auto' ) {\n          if ( isset($assoc_args['force']) ) {\n            WP_CLI::error( 'The parameter --force is not supported for auto mode.' );\n\n            return;\n          }\n\n          $this->_auto_migrate($assoc_args);\n\n          return;\n        } else {\n          $this->_run_migration($id, $assoc_args);\n        }\n      }\n\n      if ( $id !== 'auto' && isset($assoc_args['progress']) ) {\n        $this->_check_progress($assoc_args['progress']);\n      }\n    }\n\n    /**\n     * Sets cacheControl meta for all files on Google Cloud Storage to the default value from WP-Stateless settings.\n     *\n     * ## OPTIONS\n     *\n     * --url\n     * : Blog URL if multisite installation.\n     * \n     * ## EXAMPLES\n     *\n     * wp stateless reset_cache_control\n     * : Sync cache control for all files on Google Cloud Storage.\n     *\n     * @synopsis [--url=<val>]\n     * @param $args\n     * @param $assoc_args\n     */\n    public function reset_cache_control($args, $assoc_args) {\n      $sm_mode = ud_get_stateless_media()->get('sm.mode');\n      if ( ud_get_stateless_media()->is_mode('stateless') ) {\n        WP_CLI::error('Sync cache control is not supported in Stateless mode');\n      }\n\n      global $wpdb;\n\n      $gs_client = ud_get_stateless_media()->get_client();\n      $cache_control = ud_get_stateless_media()->get_default_cache_control();\n      $cache_control = apply_filters('sm:item:cacheControl', ud_get_stateless_media()->get_default_cache_control() );\n\n      $table_name = ud_stateless_db()->files;\n      $names = $wpdb->get_col(\"\n        SELECT name\n        FROM {$table_name}\n        WHERE post_id IS NOT NULL\n      \");\n\n      foreach ($names as $name) {\n        if ( !$gs_client->media_exists($name) ) {\n          continue;\n        }\n\n        $args = [\n          'skipLocalCheck' => true,\n          'force' => false,\n          'cacheControl' => $cache_control,\n          'name' => $name,\n        ];\n\n        $gs_client->add_media($args);\n\n        WP_CLI::line(\"Processed file: '{$name}'\");\n      }\n    }\n\n    /**\n     * Run all pending migrations\n     * \n     * @param array $assoc_args\n     */\n    private function _auto_migrate($assoc_args) {\n      $progress = $assoc_args['progress'] ?? 1;\n\n      do {\n        // We need to omit the cache and get the data directly from the db\n        $migrations = apply_filters('wp_stateless_get_migrations', []);\n\n        $keys = array_reverse( array_keys($migrations) );\n        $id = null;\n\n        // Do we have next pending migration?\n        foreach ($keys as $key) {\n          if ( $migrations[$key]['status'] === Migrator::STATUS_PENDING ) {\n            $id = $key;\n            break;\n          }\n        }\n\n        if ( !empty($id) ) {\n          $command = \"wp stateless migrate $id --yes --progress=$progress\";\n\n          WP_CLI::line('...');\n          WP_CLI::line(\"Launching external command '{$command}'\");\n          WP_CLI::line('Waiting...');\n  \n          @ob_flush();\n          flush();\n  \n          $r = SM_CLI::launch($command, false, true);\n\n          if ($r->return_code) {\n            WP_CLI::error(\"Something went wrong. External command process failed.\");\n          } else {\n            echo $r->stdout;\n          }\n\n          continue;\n        }\n\n        break;\n\n      } while(true);\n\n      WP_CLI::success('No pending migrations left.');\n    }\n\n    /**\n     * Run the specific migration\n     * \n     * @param string $id\n     * @param array $assoc_args\n     */\n    private function _run_migration($id, $assoc_args) {\n      $migrations = $this->_get_migrations();\n\n      if ( !isset($migrations[$id]) ) {\n        WP_CLI::error(\"Invalid migration ID: $id\");\n      }\n\n      $migration = $migrations[$id];\n\n      // Check if we can run migration\n      if ( !$migration['can_start'] && !isset($assoc_args['force']) ) {\n        WP_CLI::error( 'Migration ' . $migration['description'] . ' is not ready for starting. ' . PHP_EOL . \n          'Migration status: ' . $migration['status_text'] . ', ' . strip_tags($migration['message']) . PHP_EOL . \n          'Please use --force to run it anyway.'\n        );\n      }\n\n      $email = $assoc_args['email'] ?? ud_get_stateless_media()->get_notification_email();\n\n      WP_CLI::line( 'Please make a backup copy of your database and try not to upload, change or delete your media while the process continues.' . PHP_EOL . \n        \"After the process finishes an email will be sent to: $email\" . PHP_EOL \n      );\n\n      WP_CLI::confirm( \"Are you sure you want to run the migration $id?\", $assoc_args );\n\n      // Run migration\n      Migrator::instance()->start_migration([], [\n        'id' => $id, \n        'is_migration' => true,\n        'force' => true,\n      ]);\n\n      WP_CLI::success( \"Started migration $id\" );\n    }\n\n    /**\n     * Get migrations state\n     * \n     * @return array\n     */\n    private function _get_migrations() {\n      $migrations = apply_filters('wp_stateless_batch_state', [], ['force_migrations' => true]);\n      return $migrations['migrations'] ?? [];\n    }\n\n    /**\n     * List migrations\n     */\n    private function _list_migrations() {\n      $migrations = $this->_get_migrations();\n\n      if ( empty($migrations) ) {\n        WP_CLI::success('No migrations found');\n      }\n\n      $data = [];\n\n      foreach ($migrations as $id => $migration) {\n        $data[$id] = [\n          'id' => $id,\n          'description' => $migration['description'],\n          'status' => $migration['status_text'],\n          'message' => strip_tags($migration['message']),\n        ];\n      }\n\n      WP_CLI\\Utils\\format_items('table', $data, ['id', 'description', 'status', 'message']);\n    }\n\n    /**\n     * Check progress\n     */\n    private function _check_progress($progress) {\n      global $wpdb;\n\n      $sleep = max($progress, 1);\n      $key = BatchTaskManager::instance()->get_state_key(); \n\n      $sql = \"SELECT option_value FROM $wpdb->options WHERE option_name = '%s' LIMIT 1\";\n      $sql = $wpdb->prepare($sql, $key);\n\n      $description = '';\n\n      do {\n        // We need to omit the cache and get the data directly from the db\n        $state = $wpdb->get_var($sql);\n        $state = maybe_unserialize($state);\n\n        if ( empty($state) || !isset($state['is_migration']) || !$state['is_migration'] ) {\n          $message = empty($description) ? 'Migration finished' : \"Migration '$description' finished\";\n          WP_CLI::success($message);\n\n          return;\n        }\n\n        $description = $state['description'] ?? '';\n        $completed = $state['completed'] ?? 0;\n        $total = $state['total'] ?? 0;\n\n        $percent = $total > 0 ? round($completed / $total * 100, 2) : 0;\n\n        $message = sprintf(\"Migration '%s' compeleted %.2f%%: %d of %d items processed\", $description, $percent, $completed, $total);\n        WP_CLI::line($message);\n\n        sleep($sleep);\n      } while (true);\n    }\n\n    /**\n     * Runs batches\n     */\n    private function _run_batches($method, $type, $assoc_args) {\n      $batches = isset($assoc_args['batches']) ? $assoc_args['batches'] : 10;\n      if (!is_numeric($batches) || $batches <= 0) {\n        WP_CLI::error('Parameter --batches must have numeric value.');\n      }\n      $limit = isset($assoc_args['limit']) ? $assoc_args['limit'] : 100;\n      if (!is_numeric($limit) || $limit <= 0) {\n        WP_CLI::error('Parameter --limit must have numeric value.');\n      }\n      $force = isset($assoc_args['force']) ? '--force' : '';\n\n      for ($i = 1; $i <= $batches; $i++) {\n\n        if (!empty($this->url)) {\n          $command = \"wp stateless {$method} {$type} {$force} --batch={$i} --batches={$batches} --limit={$limit} --url={$this->url}\";\n        } else {\n          $command = \"wp stateless {$method} {$type} {$force} --batch={$i} --batches={$batches} --limit={$limit}\";\n        }\n\n        WP_CLI::line('...');\n        WP_CLI::line(\"Launching external command '{$command}'\");\n        WP_CLI::line('Waiting...');\n\n        @ob_flush();\n        flush();\n\n        $r = SM_CLI::launch($command, false, true);\n\n        if ($r->return_code) {\n          WP_CLI::error(\"Something went wrong. External command process failed.\");\n        } else {\n          echo $r->stdout;\n        }\n      }\n    }\n\n    /**\n     * Optimization process\n     * Runs before command's process\n     */\n    private function _before_command_run() {\n      WP_CLI::line(\"Starting Database optimization process. Waiting...\");\n      @ob_flush();\n      flush();\n      $command = !empty($this->url) ? \"wp db optimize --url={$this->url}\" : \"wp db optimize\";\n      $r = SM_CLI::launch($command, false, true);\n      if ($r->return_code) {\n        WP_CLI::error(\"Something went wrong. Database optimization process failed.\");\n      } else {\n        WP_CLI::success(\"Database is optimized\");\n      }\n    }\n\n    /**\n     * Optimization process\n     * Runs after command's process\n     */\n    private function _after_command_run() {\n      //** Run transient flushing */\n      WP_CLI::line(\"Starting remove transient. Waiting...\");\n      @ob_flush();\n      flush();\n      $command = !empty($this->url) ? \"wp transient delete-all --url={$this->url}\" : \"wp transient delete-all\";\n      $r = SM_CLI::launch($command, false, true);\n      if ($r->return_code) {\n        WP_CLI::error(\"Something went wrong. Transient process failed.\");\n      } else {\n        WP_CLI::success(\"Transient is removed\");\n      }\n      //** Run MySQL optimization */\n      WP_CLI::line(\"Starting Database optimization process. Waiting...\");\n      @ob_flush();\n      flush();\n      $command = !empty($this->url) ? \"wp db optimize --url={$this->url}\" : \"wp db optimize\";\n      $r = SM_CLI::launch($command, false, true);\n      if ($r->return_code) {\n        WP_CLI::error(\"Something went wrong. Database optimization process failed.\");\n      } else {\n        WP_CLI::success(\"Database is optimized\");\n      }\n    }\n  }\n\n  /** Add the commands from above */\n  WP_CLI::add_command('stateless', 'SM_CLI_Command');\n}\n"
  },
  {
    "path": "lib/cli/class-sm-cli-process.php",
    "content": "<?php\r\n\r\n/**\r\n *\r\n * based on WP_CLI\\Process \r\n * \r\n */\r\nclass SM_CLI_Process {\r\n\r\n  private $command;\r\n  private $cwd;\r\n\r\n  private function __construct() {}\r\n\r\n  /**\r\n   * @param string $command Command to execute.\r\n   * @param string $cwd Directory to execute the command in.\r\n   * @return SM_CLI_Process\r\n   */\r\n\tpublic static function create( $command, $cwd = ABSPATH ) {\r\n\t\t$proc = new self;\r\n\r\n\t\t$proc->command = $command;\r\n\t\t$proc->cwd = $cwd;\r\n\r\n\t\treturn $proc;\r\n\t}\r\n\r\n  /**\r\n   * Run the command.\r\n   *\r\n   * @return SM_CLI_ProcessRun\r\n   */\r\n\tpublic function run() {\r\n\t\t$cwd = $this->cwd;\r\n\r\n\t\t$descriptors = array(\r\n\t\t\t0 => STDIN,\r\n\t\t\t1 => array( 'pipe', 'w' ),\r\n\t\t\t2 => array( 'pipe', 'w' ),\r\n\t\t);\r\n\r\n\t\t$proc = @proc_open( $this->command, $descriptors, $pipes, $cwd );\r\n\r\n\t\t$stdout = stream_get_contents( $pipes[1] );\r\n\t\tfclose( $pipes[1] );\r\n\r\n\t\t$stderr = stream_get_contents( $pipes[2] );\r\n\t\tfclose( $pipes[2] );\r\n\r\n\t\treturn new SM_CLI_ProcessRun( array(\r\n\t\t\t'stdout' => $stdout,\r\n\t\t\t'stderr' => $stderr,\r\n\t\t\t'return_code' => proc_close( $proc ),\r\n\t\t\t'command' => $this->command,\r\n\t\t\t'cwd' => $cwd\r\n\t\t) );\r\n\t}\r\n\r\n\t/**\r\n\t * Run the command, but throw an Exception on error.\r\n\t *\r\n\t * @return SM_CLI_ProcessRun\r\n\t */\r\n\tpublic function run_check() {\r\n\t\t$r = $this->run();\r\n\r\n\t\tif ( $r->return_code || !empty( $r->STDERR ) ) {\r\n\t\t\tthrow new \\RuntimeException( $r );\r\n\t\t}\r\n\r\n\t\treturn $r;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Results of an executed command.\r\n */\r\nclass SM_CLI_ProcessRun {\r\n\r\n\t/**\r\n\t * @var array $props Properties of executed command.\r\n\t */\r\n\tpublic function __construct( $props ) {\r\n\t\tforeach ( $props as $key => $value ) {\r\n\t\t\t$this->$key = $value;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Return properties of executed command as a string.\r\n\t *\r\n\t * @return string\r\n\t */\r\n\tpublic function __toString() {\r\n\t\t$out  = \"$ $this->command\\n\";\r\n\t\t$out .= \"$this->stdout\\n$this->stderr\";\r\n\t\t$out .= \"cwd: $this->cwd\\n\";\r\n\t\t$out .= \"exit status: $this->return_code\";\r\n\r\n\t\treturn $out;\r\n\t}\r\n\r\n}"
  },
  {
    "path": "lib/cli/class-sm-cli-scaffold.php",
    "content": "<?php\r\n\r\nclass SM_CLI_Scaffold {\r\n\r\n  /**\r\n   * Storage for dynamic properties\r\n   * Used by magic __set, __get\r\n   *\r\n   * @protected\r\n   * @type array\r\n   */\r\n  protected $_properties = array();\r\n\r\n\t/**\r\n\t * @param $args\r\n\t * @param $assoc_args\r\n\t */\r\n  public function __construct( $args, $assoc_args ) {\r\n    if ( php_sapi_name() != 'cli' ) {\r\n      die('Must run from command line');\r\n    }\r\n    \r\n    $this->args = $args;\r\n    $this->assoc_args = $assoc_args;\r\n    foreach( $assoc_args as $k => $v ) {\r\n      $this->{$k} = $v;\r\n    }\r\n    \r\n    /* Set default Limit */\r\n    $this->limit = is_numeric( $this->limit ) && $this->limit > 0 ? $this->limit : 100;\r\n  }\r\n\r\n  /**\r\n   * Forces data printing to command line ignoring buffer.\r\n   *\r\n   * @param string $msg\r\n   * @return null\r\n   */\r\n  public function output( $msg = '' ) {\r\n    $args = $this->assoc_args;\r\n    if( !isset( $args['log'] ) ) return null;\r\n    esc_html_e(date( 'H:i:s', time() ) . ': ' . $msg . ' ' . $this->memory_usage() . PHP_EOL);        \r\n    @ob_flush();\r\n    flush();\r\n  }\r\n  \r\n  /**\r\n   * Returns Memory Usage information.\r\n   */\r\n  public function memory_usage() {\r\n    $args = $this->assoc_args;\r\n    if( !isset( $args['memory-usage'] ) ) return null;\r\n    static $last_usage = 0;\r\n    $differences = $last_usage ? number_format( ( memory_get_usage() / 1024 / 1024 ) - $last_usage, 3 ) . 'Mb' : 'none';\r\n    $current_usage = number_format( $last_usage = memory_get_usage() / 1024 / 1024, 3 ) . 'Mb';\r\n    return sprintf( \"Memory Usage: %s. Diff: %s.\", $current_usage, $differences );\r\n  }\r\n  \r\n  /**\r\n   * Returns domain of current blog.\r\n   *\r\n   */\r\n  public function get_current_blog_domain() {\r\n    $url = get_home_url();\r\n    $pieces = parse_url( $url );\r\n    $domain = isset( $pieces[ 'host' ] ) ? $pieces['host'] : false;\r\n    return $domain;\r\n  }\r\n\r\n\t/**\r\n\t * @param $key\r\n\t *\r\n\t * @return null\r\n\t */\r\n  public function __get( $key ) {\r\n    return isset( $this->_properties[ $key ] ) ? $this->_properties[ $key ] : NULL;\r\n  }\r\n\r\n\t/**\r\n\t * @param $key\r\n\t * @param $value\r\n\t */\r\n  public function __set( $key, $value ) {\r\n    $this->_properties[ $key ] = $value;\r\n  }\r\n\r\n}"
  },
  {
    "path": "lib/cli/class-sm-cli-sync.php",
    "content": "<?php\r\n\r\n/**\r\n * CLI Sync Implementation\r\n * \r\n * @author palant@UDX\r\n * @author korotkov@UDX\r\n */\r\n\r\nuse wpCloud\\StatelessMedia\\FatalException;\r\nuse wpCloud\\StatelessMedia\\UnprocessableException;\r\nuse wpCloud\\StatelessMedia\\Utility;\r\n\r\nif (!class_exists('SM_CLI_Scaffold')) {\r\n  require_once(dirname(__FILE__) . '/class-sm-cli-scaffold.php');\r\n}\r\n\r\nclass SM_CLI_Sync extends SM_CLI_Scaffold {\r\n\r\n  /**\r\n   * Order\r\n   */\r\n  public $order = \"\";\r\n\r\n  /**\r\n   * Start\r\n   */\r\n  public $start = false;\r\n\r\n  /**\r\n   * End\r\n   */\r\n  public $end = false;\r\n\r\n  /**\r\n   * Limit\r\n   */\r\n  public $limit = false;\r\n\r\n  /**\r\n   * Batch\r\n   */\r\n  public $batch = false;\r\n\r\n  /**\r\n   * Batches\r\n   */\r\n  public $batches = false;\r\n\r\n  /**\r\n   * Total\r\n   */\r\n  public $total = 0;\r\n\r\n  /**\r\n   * Log\r\n   */\r\n  public $log;\r\n\r\n  /**\r\n   * Sync images\r\n   */\r\n  public function images() {\r\n    global $wpdb;\r\n\r\n    /** Prepare arguments */\r\n    $this->_prepare();\r\n\r\n    $timer = time();\r\n\r\n    /** Get Total Amount of Attachments */\r\n    $this->total = $wpdb->get_var(\"\r\n      SELECT\r\n      COUNT(ID)\r\n      FROM {$wpdb->posts}\r\n      WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'\r\n    \");\r\n\r\n    if ($this->batch) {\r\n      $this->output(\"Running Batch {$this->batch} from {$this->batches}\");\r\n      $range = round($this->total / $this->batches);\r\n      $this->start = ($this->batch * $range) - $range;\r\n      $this->end = $this->batches == $this->batch ? $this->total : $this->batch * $range;\r\n      $this->output(\"Starting from {$this->start} row. \");\r\n      $this->output(\"And proceeding up to {$this->end} row.\");\r\n    } else {\r\n      $this->output(\"Running in default way. Starting from {$this->start} row and proceeding up to end.\");\r\n      $this->end = $this->end ? $this->end : $this->total;\r\n    }\r\n    $media_to_proceed = $this->end - $this->start;\r\n\r\n    //** Counters */\r\n    $synced_images = 0;\r\n\r\n    WP_CLI::line('Starting extract attachments.');\r\n\r\n    set_time_limit(0);\r\n\r\n    for ($this->start; $this->start < $this->end; $this->start += $this->limit) {\r\n\r\n      $limit = ($this->end - $this->start) < $this->limit ? ($this->end - $this->start) : $this->limit;\r\n\r\n      $this->output('Synced: ' . $synced_images . '. Extracting from ' . ($this->start + 1) . ' to ' . ($this->start + $limit));\r\n\r\n      /**\r\n       * Get Attachments data.\r\n       */\r\n      $attachments = $wpdb->get_results($wpdb->prepare(\"\r\n        SELECT ID\r\n        FROM {$wpdb->posts}\r\n        WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' ORDER BY ID {$this->order}\r\n        LIMIT %d, %d;\r\n      \", $this->start, $limit), ARRAY_A);\r\n\r\n      if (!empty($attachments)) {\r\n        foreach ($attachments as $a) {\r\n          try {\r\n            timer_start();\r\n            $response = Utility::process_image_by_id(intval($a['ID']));\r\n            if (!empty($response)) {\r\n              $synced_images++;\r\n              $this->output(sprintf(__('%1$s (ID %2$s) was successfully synced in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($response->ID)), $response->ID, timer_stop()));\r\n            }\r\n          } catch (FatalException $e) {\r\n            $this->output($e->getMessage());\r\n            break;\r\n          } catch (UnprocessableException $e) {\r\n            $this->output($e->getMessage());\r\n          } catch (\\Throwable $e) {\r\n            $this->output($e->getMessage());\r\n            break;\r\n          }\r\n\r\n          /** Flush data */\r\n          $wpdb->flush();\r\n          @ob_flush();\r\n          @flush();\r\n        }\r\n\r\n        unset($attachments);\r\n      }\r\n    }\r\n    WP_CLI::success(\"Stateless Media is synced\");\r\n    WP_CLI::line('Media which have been checked: ' . number_format_i18n($media_to_proceed));\r\n    WP_CLI::line('Synced stateless for ' . number_format_i18n($synced_images) . ' attachments');\r\n    WP_CLI::line('Spent Time: ' . (time() - $timer) . ' sec');\r\n  }\r\n\r\n\r\n  /**\r\n   * Sync files\r\n   */\r\n  public function files() {\r\n    global $wpdb;\r\n\r\n    /** Prepare arguments */\r\n    $this->_prepare();\r\n\r\n    $timer = time();\r\n\r\n    /** Get Total Amount of Attachments */\r\n    $this->total = $wpdb->get_var(\"\r\n      SELECT\r\n      COUNT(ID)\r\n      FROM {$wpdb->posts}\r\n      WHERE post_type = 'attachment' AND post_mime_type NOT LIKE 'image/%'\r\n    \");\r\n\r\n    if ($this->batch) {\r\n      $this->output(\"Running Batch {$this->batch} from {$this->batches}\");\r\n      $range = round($this->total / $this->batches);\r\n      $this->start = ($this->batch * $range) - $range;\r\n      $this->end = $this->batches == $this->batch ? $this->total : $this->batch * $range;\r\n      $this->output(\"Starting from {$this->start} row. \");\r\n      $this->output(\"And proceeding up to {$this->end} row.\");\r\n    } else {\r\n      $this->output(\"Running in default way. Starting from {$this->start} row and proceeding up to end.\");\r\n      $this->end = $this->end ? $this->end : $this->total;\r\n    }\r\n    $media_to_proceed = $this->end - $this->start;\r\n\r\n    //** Counters */\r\n    $synced_files = 0;\r\n\r\n    WP_CLI::line('Starting extract attachments.');\r\n\r\n    set_time_limit(0);\r\n\r\n    for ($this->start; $this->start < $this->end; $this->start += $this->limit) {\r\n\r\n      $limit = ($this->end - $this->start) < $this->limit ? ($this->end - $this->start) : $this->limit;\r\n\r\n      $this->output('Synced: ' . $synced_files . '. Extracting from ' . ($this->start + 1) . ' to ' . ($this->start + $limit));\r\n\r\n      /**\r\n       * Get Attachments data.\r\n       */\r\n      $attachments = $wpdb->get_results($wpdb->prepare(\"\r\n        SELECT ID\r\n        FROM {$wpdb->posts}\r\n        WHERE post_type = 'attachment' AND post_mime_type NOT LIKE 'image/%' ORDER BY ID {$this->order}\r\n        LIMIT %d, %d;\r\n      \", $this->start, $limit), ARRAY_A);\r\n\r\n      if (!empty($attachments)) {\r\n        foreach ($attachments as $a) {\r\n          try {\r\n            timer_start();\r\n            $response = Utility::process_file_by_id(intval($a['ID']));\r\n            if (!empty($response)) {\r\n              $synced_files++;\r\n              $this->output(sprintf(__('%1$s (ID %2$s) was successfully synchronised in %3$s seconds.', ud_get_stateless_media()->domain), esc_html(get_the_title($response->ID)), $response->ID, timer_stop()));\r\n            }\r\n          } catch (FatalException $e) {\r\n            $this->output($e->getMessage());\r\n            break;\r\n          } catch (UnprocessableException $e) {\r\n            $this->output($e->getMessage());\r\n          } catch (\\Throwable $e) {\r\n            $this->output($e->getMessage());\r\n            break;\r\n          }\r\n\r\n          /** Flush data */\r\n          $wpdb->flush();\r\n          @ob_flush();\r\n          @flush();\r\n        }\r\n\r\n        unset($attachments);\r\n      }\r\n    }\r\n    WP_CLI::success(\"Stateless Media is synced\");\r\n    WP_CLI::line('Media which have been checked: ' . number_format_i18n($media_to_proceed));\r\n    WP_CLI::line('Synced stateless for ' . number_format_i18n($synced_files) . ' attachments');\r\n    WP_CLI::line('Spent Time: ' . (time() - $timer) . ' sec');\r\n  }\r\n\r\n  /**\r\n   * Prepare\r\n   */\r\n  private function _prepare() {\r\n    $args = $this->assoc_args;\r\n    if (isset($args['b'])) {\r\n      WP_CLI::error('Invalid parameter --b. Command must not be run directly with --b parameter.');\r\n    }\r\n    $this->start          = isset($args['start']) && is_numeric($args['start']) ? $args['start'] : 0;\r\n    $this->limit          = isset($args['limit']) && is_numeric($args['limit']) ? $args['limit'] : 100;\r\n    $this->force          = isset($args['force'])         ? true : false;\r\n    $this->continue       = isset($args['continue'])      ? true : false;\r\n    $this->fix            = isset($args['fix'])           ? true : false;\r\n    $this->order          = isset($args['order']) && strtoupper($args['order']) === 'ASC' ? 'ASC' : 'DESC';\r\n    if (isset($args['batch'])) {\r\n      if (!is_numeric($args['batch']) || $args['batch'] <= 0) {\r\n        WP_CLI::error('Invalid parameter --batch');\r\n      }\r\n      $this->batch = $args['batch'];\r\n      $this->batches = isset($args['batches']) ? $args['batches'] : 10;\r\n      if (!is_numeric($this->batches) || $this->batches <= 0) {\r\n        WP_CLI::error('Invalid parameter --batches');\r\n      } elseif ($this->batch > $this->batches) {\r\n        WP_CLI::error('--batch parameter must is invalid. It must not equal or less then --batches');\r\n      }\r\n    } else {\r\n      $this->end = isset($args['end']) && is_numeric($args['end']) ? $args['end'] : false;\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "lib/cli/class-sm-cli-upgrade.php",
    "content": "<?php\r\n/**\r\n *\r\n * @author peshkov@UD\r\n */\r\n\r\nif( !class_exists( 'SM_CLI_Scaffold' ) ) {\r\n  require_once( dirname( __FILE__ ) . '/class-sm-cli-scaffold.php' );\r\n}\r\n\r\nclass SM_CLI_Upgrade extends SM_CLI_Scaffold {\r\n\r\n  /**\r\n   *\r\n   */\r\n  public $start = false;\r\n  \r\n  /**\r\n   *\r\n   */\r\n  public $end = false;\r\n  \r\n  /**\r\n   *\r\n   */\r\n  public $limit = false;\r\n  \r\n  /**\r\n   *\r\n   */\r\n  public $batch = false;\r\n  \r\n  /**\r\n   *\r\n   */\r\n  public $batches = false;\r\n  \r\n  /**\r\n   *\r\n   */\r\n  public $total = 0;\r\n  \r\n  /**\r\n   *\r\n   */\r\n  public $log;\r\n\r\n  /**\r\n   * Upgrade Meta.\r\n   *\r\n   */\r\n  public function meta() {\r\n    global $wpdb;\r\n    \r\n    /** Prepare arguments */\r\n    $this->_prepare();\r\n    \r\n    $timer = time();\r\n\r\n    /** Get Total Amount of Attachments */\r\n    $this->total = $wpdb->get_var( \"SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_type = 'attachment'\" );\r\n    \r\n    if( $this->batch ) {\r\n      $this->output( \"Running Batch {$this->batch} from {$this->batches}\" );\r\n      $range = round( $this->total / $this->batches );\r\n      $this->start = ( $this->batch * $range ) - $range;\r\n      $this->end = $this->batches == $this->batch ? $this->total : $this->batch * $range;\r\n      $this->output( \"Starting from {$this->start} row. \" );\r\n      $this->output( \"And proceeding up to {$this->end} row.\" );\r\n    } else {\r\n      $this->output( \"Running in default way. Starting from {$this->start} row and proceeding up to end.\" );\r\n      $this->end = $this->end ? $this->end : $this->total;\r\n    }\r\n    $media_to_proceed = $this->end - $this->start;\r\n    \r\n    //** Counters */\r\n    $upgraded_meta = 0;\r\n    \r\n    WP_CLI::line( 'Starting extract attachments.' );\r\n    \r\n    for( $this->start; $this->start < $this->end; $this->start += $this->limit ) {\r\n      \r\n      $limit = ( $this->end - $this->start ) < $this->limit ? ( $this->end - $this->start ) : $this->limit;\r\n      \r\n      $this->output( 'Upgraded: ' . $upgraded_meta . '. Extracting from ' . ( $this->start + 1 ) . ' to ' . ( $this->start + $limit ) );\r\n\r\n      /**\r\n       * Get Attachments data.\r\n       *\r\n       */\r\n      $attachments = $wpdb->get_results( $wpdb->prepare( \"\r\n        SELECT \r\n          ID\r\n          FROM {$wpdb->posts}\r\n          WHERE post_type = 'attachment'\r\n          LIMIT %d, %d;\r\n      \", $this->start, $limit ), ARRAY_A );\r\n      \r\n      //print_r( $attachments ); die();\r\n      \r\n      foreach( $attachments as $i => $a ) {\r\n\r\n        if( $this->_maybe_upgrade_meta( $a[ 'ID' ] ) ) {\r\n          $upgraded_meta++;\r\n        }\r\n\r\n        /** Flush data */\r\n        $wpdb->flush();\r\n        @ob_flush();\r\n        @flush();\r\n        \r\n      }\r\n      \r\n      unset( $attachments );\r\n      \r\n    }\r\n\r\n    WP_CLI::success( \"Stateless Media Meta is upgraded\" );\r\n\r\n    WP_CLI::line( 'Media which have been checked: ' . number_format_i18n( $media_to_proceed ) );\r\n    WP_CLI::line( 'Upgraded stateless meta for ' . number_format_i18n( $upgraded_meta ) . ' attachments' );\r\n    WP_CLI::line( 'Spent Time: ' . ( time() - $timer ) . ' sec' );\r\n    \r\n  }\r\n\r\n  /**\r\n   * Maybe Upgrade Stateless meta for specific attachment\r\n   */\r\n  private function _maybe_upgrade_meta( $id ) {\r\n    global $wpdb;\r\n\r\n    $bool = false;\r\n\r\n    /* Determine if attachment has legacy main meta data  */\r\n    $name = get_post_meta( $id, 'sm_cloud:name', true );\r\n    $fileLink = get_post_meta( $id, 'sm_cloud:fileLink', true );\r\n\r\n    /* Let's upgrade our shit. */\r\n    if( !empty( $name ) && !empty( $fileLink ) ) {\r\n\r\n      /* Disable autocommit to Database to prevent broken balance transactions. */\r\n      $wpdb->query( 'SET autocommit = 0;' );\r\n      $wpdb->query( 'START TRANSACTION;' );\r\n\r\n      try {\r\n\r\n        $cloud_meta = array(\r\n          'name' => $name,\r\n          'fileLink' => $fileLink,\r\n          'id' => get_post_meta( $id, 'sm_cloud:id', true ),\r\n          'storageClass' => get_post_meta( $id, 'sm_cloud:storageClass', true ),\r\n          'mediaLink' => get_post_meta( $id, 'sm_cloud:mediaLink', true ),\r\n          'selfLink' => get_post_meta( $id, 'sm_cloud:selfLink', true ),\r\n          'bucket' => get_post_meta( $id, 'sm_cloud:bucket', true ),\r\n          'object' => get_post_meta( $id, 'sm_cloud:object', true ),\r\n          'sizes' => array(),\r\n        );\r\n\r\n        delete_post_meta( $id, 'sm_cloud:name' );\r\n        delete_post_meta( $id, 'sm_cloud:fileLink' );\r\n        delete_post_meta( $id, 'sm_cloud:id' );\r\n        delete_post_meta( $id, 'sm_cloud:storageClass' );\r\n        delete_post_meta( $id, 'sm_cloud:mediaLink' );\r\n        delete_post_meta( $id, 'sm_cloud:selfLink' );\r\n        delete_post_meta( $id, 'sm_cloud:bucket' );\r\n        delete_post_meta( $id, 'sm_cloud:object' );\r\n\r\n        $metadata = wp_get_attachment_metadata( $id );\r\n\r\n        if( !empty( $metadata[ 'sizes' ] ) && is_array( $metadata[ 'sizes' ] ) ) {\r\n\r\n          foreach( $metadata[ 'sizes' ] as $image_size => $data ) {\r\n\r\n            $name = get_post_meta( $id, 'sm_cloud:' . $image_size . ':name', true );\r\n            $fileLink = get_post_meta( $id, 'sm_cloud:' . $image_size . ':fileLink', true );\r\n\r\n            if( !empty( $name ) && !empty( $fileLink ) ) {\r\n              $cloud_meta[ 'sizes' ][ $image_size ] = array(\r\n                'id' => get_post_meta( $id, 'sm_cloud:' . $image_size . ':id', true ),\r\n                'name' => $name,\r\n                'fileLink' => $fileLink,\r\n                'mediaLink' => get_post_meta( $id, 'sm_cloud:' . $image_size . ':mediaLink', true ),\r\n                'selfLink' => get_post_meta( $id, 'sm_cloud:' . $image_size . ':selfLink', true ),\r\n              );\r\n            }\r\n\r\n            delete_post_meta( $id, 'sm_cloud:' . $image_size . ':name' );\r\n            delete_post_meta( $id, 'sm_cloud:' . $image_size . ':fileLink' );\r\n            delete_post_meta( $id, 'sm_cloud:' . $image_size . ':id' );\r\n            delete_post_meta( $id, 'sm_cloud:' . $image_size . ':mediaLink' );\r\n            delete_post_meta( $id, 'sm_cloud:' . $image_size . ':selfLink' );\r\n\r\n          }\r\n\r\n        }\r\n\r\n        if( !empty( $cloud_meta ) ) {\r\n          update_post_meta( $id, 'sm_cloud', $cloud_meta );\r\n        }\r\n\r\n        $bool = true;\r\n\r\n      } catch ( \\Exception $e ) {\r\n\r\n        /* Rollback all transactions to prevent broken orders, order items, etc. */\r\n        $wpdb->query( 'ROLLBACK' );\r\n        $wpdb->query( 'SET autocommit = 1;' );\r\n\r\n        WP_CLI::warning( \"SM Meta for attachment #{$id} was not upgraded due the error: \" . $e->getMessage() );\r\n\r\n        return $bool;\r\n      }\r\n\r\n      /* Commit all transactions to Database and enable autocommit again. */\r\n      $wpdb->query( 'COMMIT' );\r\n      $wpdb->query( 'SET autocommit = 1;' );\r\n\r\n    }\r\n\r\n    return $bool;\r\n  }\r\n  \r\n  /**\r\n   *\r\n   */\r\n  private function _prepare() {\r\n    $args = $this->assoc_args;\r\n    if( isset( $args[ 'b' ] ) ) {\r\n      WP_CLI::error( 'Invalid parameter --b. Command must not be run directly with --b parameter.' );\r\n    }\r\n    $this->start = isset( $args[ 'start' ] ) && is_numeric( $args[ 'start' ] ) ? $args[ 'start' ] : 0;\r\n    $this->limit = isset( $args[ 'limit' ] ) && is_numeric( $args[ 'limit' ] ) ? $args[ 'limit' ] : 100;\r\n    if( isset( $args[ 'batch' ] ) ) {\r\n      if( !is_numeric( $args[ 'batch' ] ) || $args[ 'batch' ] <= 0 ) {\r\n        WP_CLI::error( 'Invalid parameter --batch' );\r\n      }\r\n      $this->batch = $args[ 'batch' ];\r\n      $this->batches = isset( $args[ 'batches' ] ) ? $args[ 'batches' ] : 10;\r\n      if( !is_numeric( $args[ 'batches' ] ) || $args[ 'batches' ] <= 0 ) {\r\n        WP_CLI::error( 'Invalid parameter --batches' );\r\n      } elseif ( $this->batch > $this->batches ) {\r\n        WP_CLI::error( '--batch parameter must is invalid. It must not equal or less then --batches' );\r\n      }\r\n    } else {\r\n      $this->end = isset( $args[ 'end' ] ) && is_numeric( $args[ 'end' ] ) ? $args[ 'end' ] : false;\r\n    }\r\n  }\r\n\r\n}"
  },
  {
    "path": "lib/cli/class-sm-cli.php",
    "content": "<?php\r\n\r\nclass SM_CLI {\r\n\r\n  /**\r\n\t * Launch an external process that takes over I/O.\r\n\t *\r\n\t * @param string Command to call\r\n\t * @param bool Whether to exit if the command returns an error status\r\n\t * @param bool Whether to return an exit status (default) or detailed execution results\r\n\t *\r\n\t * @return int|ProcessRun The command exit status, or a ProcessRun instance\r\n\t */\r\n\tpublic static function launch( $command, $exit_on_error = true, $return_detailed = false ) {\r\n    if( !class_exists( 'SM_CLI_Process' ) ) {\r\n      require_once( dirname( __FILE__ ) . '/class-sm-cli-process.php' );\r\n    }\r\n  \r\n\t\t$proc = SM_CLI_Process::create( $command );\r\n\t\t$results = $proc->run();\r\n\r\n\t\tif ( $results->return_code && $exit_on_error )\r\n\t\t\texit( $results->return_code );\r\n\r\n\t\tif ( $return_detailed ) {\r\n\t\t\treturn $results;\r\n\t\t} else {\r\n\t\t\treturn $results->return_code;\r\n\t\t}\r\n\t}\r\n\r\n}"
  },
  {
    "path": "lib/includes/class-settings.php",
    "content": "<?php\n/**\n * Settings Library\n *\n * @namespace UDX\n */\nnamespace UDX {\n\n  if( !class_exists( 'UDX\\Settings' ) ) {\n\n    /**\n     * Class Settings\n     *\n     * @package UDX\n     */\n    class Settings {\n\n      /**\n       * Settings Class version.\n       *\n       * @public\n       * @static\n       * @property $version\n       * @type {Object}\n       */\n      static public $version = '0.3.0';\n\n      /**\n       * Prefix for option keys to unique\n       *\n       * @var string\n       */\n      private $prefix = '';\n\n      /**\n       * Whether or not to hash option keys before saving\n       *\n       * @var bool\n       */\n      private $hash_keys = false;\n\n      /**\n       * Data storage\n       *\n       * @var array\n       */\n      private $_data = array();\n\n      /**\n       * Settings Schema.\n       *\n       * @static\n       * @property $_schema\n       * @type {Object}\n       */\n      private $_schema = false;\n\n      /**\n       * Settings Namespace.\n       *\n       * @static\n       * @property $_namespace\n       * @type {String}\n       */\n      private $_namespace = false;\n\n      /**\n       * Storage Key.\n       *\n       * @static\n       * @property $_key\n       * @type {String}\n       */\n      private $_key = false;\n\n      /**\n       * Settings Format.\n       *\n       * Options are: 'json', 'object', 'array', 'hash-map'.\n       *\n       * @static\n       * @property $_format\n       * @type {String}\n       */\n      private $_format = null;\n\n      /**\n       * Storage Location\n       *\n       * @static\n       * @property $_store\n       * @type {String}\n       */\n      private $_store = false;\n\n      /**\n       * For transient storage.\n       *\n       * @static\n       * @property $_expiration\n       * @type {String}\n       */\n      private $_expiration = 60;\n\n      /**\n       * Toggle Debugger.\n       *\n       * @static\n       * @property $_debug\n       * @type {Boolean}\n       */\n      private $_debug = false;\n\n      /**\n       * Automatically Save.\n       *\n       * @static\n       * @property $_debug\n       * @type {Boolean}\n       */\n      private $auto_commit = false;\n\n      /**\n       * Instance Valid.\n       *\n       * @static\n       * @property $is_valid\n       * @type {Boolean}\n       */\n      public $is_valid = true;\n\n      /**\n       * Constructor\n       *\n       * @param bool $args\n       *\n       * @example\n       *\n       *    $_settings = new Settings(array(\n       *      \"store\" => \"options\"\n       *    ));\n       *\n       *    $_settings->set( 'my.key', 'my.value' );\n       *\n       * @internal param \\UDX\\type $defaults\n       * @internal param bool|\\UDX\\type $force_save\n       * @internal param string|\\UDX\\type $prefix\n       * @internal param bool|\\UDX\\type $hash_keys\n       */\n      public function __construct( $args = false ) {\n\n        $args = Utility::parse_args( $args, array(\n          'namespace'   => '',\n          'key'         => '',\n          'auto_commit' => false,\n          'debug'       => false,\n          'store'       => false,\n          'schema'      => false,\n          'format'      => false,\n          'data'        => null\n        ));\n\n        // Load Schema.\n        if( isset( $args->schema ) && $args->schema ) {\n          $this->set_schema( $args->schema );\n        }\n\n        // Set Storage Location(s).\n        if( isset( $args->store ) && $args->store ) {\n          $this->_store = $args->store;\n        }\n\n        // Set Storage Key.\n        if( isset( $args->key ) && $args->key ) {\n          $this->_key = $args->key;\n        }\n\n        // Set transient vxpiration value.\n        if( isset( $args->expiration ) && $args->expiration ) {\n          $this->_expiration = $args->expiration;\n        }\n\n        // Set Format to enforce.\n        if( $args->format ) {\n          $this->_format = $args->format;\n        }\n        // Toggle Debugger.\n        if( $args->debug ) {\n          $this->_debug = $args->debug;\n        }\n\n        // Set Settings Namespace.\n        if( $args->namespace ) {\n          $this->_namespace = $args->namespace;\n        }\n\n        // Set Auto Commit.\n        if( $args->auto_commit ) {\n          $this->auto_commit = $args->auto_commit;\n        }\n\n        // Load Initial.\n        $this->_load();\n\n        // Set Initial Data.\n        if( $args->data ) {\n          $this->set( $args->data );\n        }\n\n      }\n\n      /**\n       * Getter for options\n       *\n       * @param bool|\\UDX\\type $key\n       *\n       * @param bool                         $default\n       *\n       * @return type\n       */\n      public function get( $key = false, $default = false ) {\n\n        // Return all data.\n        if( !$key ) {\n          return $this->_output( $this->_data );\n        }\n\n        // Resolve dot-notated key.\n        if( strpos( $key, '.' ) ) {\n          return $this->_resolve( $this->_data, $key, $default );\n        }\n\n        // Return value or default.\n        return isset( $this->_data[ $key ] ) ? $this->_data[ $key ] : $default;\n\n      }\n\n      /**\n       * Setter for options\n       *\n       * @param string|\\UDX\\type $key\n       * @param bool|\\UDX\\type   $value\n       * @param bool                           $bypass_validation\n       *\n       * @internal param bool|\\UDX\\type $force_save\n       *\n       * @return \\UDX\\Settings\n       */\n      public function set( $key = '', $value = false, $bypass_validation = false ) {\n\n        if( !$this->_data ) {\n          $this->_data = array();\n        }\n\n        // First argument is an object/array.\n        if( Utility::get_type( $key ) === 'object' || Utility::get_type( $key ) === 'array' || Utility::get_type( $key ) === 'stdClass' ) {\n\n          // Conver to array so merge can be done\n          $this->_data = Utility::extend( (array) $this->_data, (array) $key );\n\n        }\n\n        // Standard key & value pair\n        if( Utility::get_type( $key ) === 'string' && ( Utility::get_type( $value ) === 'string' || Utility::get_type( $value ) === 'number' || Utility::get_type( $value ) === 'boolean' ) ) {\n\n          if( strpos( $key, '.' ) ) {\n            self::set_val( $this->_data, $key, $value );\n          } else {\n            $this->_data[ $key ] = $value;\n          }\n\n        }\n\n        // Standard key with complex value.\n        if( Utility::get_type( $key ) === 'string' ) {\n\n\n          if( Utility::get_type( $value ) === 'object' || Utility::get_type( $value ) === 'stdClass' ) {\n\n            if( strpos( $key, '.' ) ) {\n              self::set_val( $this->_data, $key, $value );\n            } else {\n\n              if( isset( $this->_data[ $key ] ) && Utility::get_type( $this->_data[ $key ] ) === 'object' ) {\n                $this->_data[ $key ] = Utility::extend( $this->_data[ $key ], $value );\n              } else {\n                $this->_data[ $key ] = $value;\n              }\n\n            }\n\n          }\n\n          // Standard key with array value\n          if( Utility::get_type( $value ) === 'array' ) {\n\n            if( strpos( $key, '.' ) ) {\n              self::set_val( $this->_data, $key, $value );\n            } else {\n              $this->_data[ $key ] = array_unique( array_merge( isset( $this->_data[ $key ] ) ? (array) $this->_data[ $key ] : array(), $value ) );\n            }\n\n          }\n\n        }\n\n        // Validate if we have a schema.\n        if( $this->_schema ) {\n          // $this->_validate();\n        }\n\n        // Commit to Storage if validation passed.\n        if( $this->is_valid && $this->auto_commit ) {\n          $this->commit();\n        }\n\n        return $this;\n\n      }\n\n      /**\n       * Handle File Transfer for downloading\n       *\n       * @param array $args\n       *\n       * @return bool\n       */\n      public function file_transfer( $args = array() ) {\n\n        $args = Utility::parse_args( $args, array(\n          \"name\"     => \"settings\",\n          \"format\"   => \"json\",\n          \"cache\"    => 'public',\n          \"filename\" => null,\n          \"charset\"  => 'utf8'\n        ) );\n\n        $args->filename = $args->filename ? $args->filename : $args->name . '-' . date( 'Y-m-d' ) . '.' . $args->format;\n\n        // Ensure headers have not been sent.\n        if( headers_sent() ) {\n          return false;\n        }\n\n        // Send headers.\n        header( \"Cache-Control: {$args->cache}\" );\n        header( \"Content-Disposition: attachment; filename={$args->filename}\" );\n        header( \"Content-Type: text/plain; charset={$args->charset}\" );\n        header( \"Content-Description: File Transfer\" );\n        header( \"Content-Transfer-Encoding: binary\" );\n\n        // Prepare in needed format.\n        $_data = $this->_output( $this->get(), $args->format );\n\n        // Write data.\n        die( $_data );\n\n      }\n\n      /**\n       * Set Schema from a string or objct.\n       *\n       * @param bool $schema\n       *\n       * @return array|bool|mixed|object\n       */\n      public function set_schema( $schema = false ) {\n\n        try {\n\n          // Take schema as given.\n          if( gettype( $schema ) === 'array' ) {\n            $this->_schema = (object) $schema;\n          }\n\n          // Take schema as given.\n          if( gettype( $schema ) === 'object' ) {\n            $this->_schema = $schema;\n          }\n\n          // Load schema from a file.\n          if( gettype( $schema ) === 'string' && is_file( $schema ) ) {\n            $this->_schema = json_decode( file_get_contents( $schema ) );\n          }\n\n        } catch( Exception $error ) {\n          $this->console( 'Caught exception: ' . $error->getMessage() );\n        }\n\n        return $this->_schema ? $this->_schema : false;\n\n      }\n\n      /**\n       * Commit Settings to Storage.\n       *\n       * * site_options - For WordPress, falls back to option if not in multisite.\n       * * options      - For WordPress, stores in blog options.\n       *\n       * @author potanin@UD\n       * @method commit\n       */\n      public function commit() {\n\n        $_data = $this->_data;\n\n        // Exclude protected keys.\n        foreach( (array) $_data as $key => $value ) {\n\n          if( substr( $key, 0, 2 ) === '__' ) {\n            unset( $_data[ $key ] );\n          }\n\n        }\n\n        switch( $this->_store ) {\n\n          case 'transient':\n            $_value = json_encode( $_data, JSON_FORCE_OBJECT );\n\n            if( function_exists( 'set_transient' ) ) {\n              $_value = set_transient( $this->_key, $_value, $this->_expiration );\n            }\n\n          break;\n\n          case 'site_transient':\n\n            $_value = json_encode( $_data, JSON_FORCE_OBJECT );\n\n            if( function_exists( 'set_site_transient' ) ) {\n              $_value = set_site_transient( $this->_key, $_value, $this->_expiration );\n            }\n\n          break;\n\n          case 'site_options':\n\n            $_value = json_encode( $_data, JSON_FORCE_OBJECT );\n\n            if( function_exists( 'update_site_option' ) ) {\n              $_value = update_site_option( $this->_key, $_value );\n            }\n\n          break;\n\n          case 'options':\n            $_value = json_encode( $_data, JSON_FORCE_OBJECT );\n\n            if( function_exists( 'update_option' ) ) {\n              $_value = update_option( $this->_key, $_value );\n            }\n\n          break;\n\n        }\n\n        return $this;\n\n      }\n\n      /**\n       * Remove Stored Settings\n       *\n       * @example\n       *\n       *      $settings->flush();\n       *\n       * @return $this\n       */\n      public function flush() {\n\n        switch( $this->_store ) {\n          case 'options':\n            if( function_exists( 'delete_option' ) ) {\n              delete_option( $this->_key );\n            }\n          case 'site_options':\n            if( function_exists( 'delete_site_option' ) ) {\n              delete_option( $this->_key );\n            }\n          break;\n\n        }\n\n        return $this;\n\n      }\n      /**\n       * Validate Settings against Schema\n       *\n       */\n      public function _validate() {\n\n        if( !class_exists( 'JsonSchema\\Validator' ) ) {\n          return;\n        }\n\n        $validator = new \\JsonSchema\\Validator();\n\n        // Process Validation.\n        $validator->check( $this->_data, $this->_schema );\n\n        if( $validator->isValid() ) {\n          $this->is_valid = true;\n          $this->_console( \"The supplied JSON validates against the schema.\" );\n        } else {\n          $this->is_valid = false;\n\n          $this->_console( \"JSON does not validate. Violations:\" );\n\n          foreach( $validator->getErrors() as $error ) {\n            $this->_console( sprintf( \"[%s] %s\\n\", $error[ 'property' ], $error[ 'message' ] ) );\n          }\n\n        }\n\n      }\n\n      /**\n       * Library Debugger\n       *\n       * @param $data\n       */\n      public function _console( $data ) {\n\n        if( $this->_debug ) {\n          echo sprintf( \"lib-settings debug: [%s].\", $data );\n        }\n\n      }\n\n      /**\n       * Load options from DB\n       *\n       * @return \\UDX\\Settings\n       */\n      public function _load() {\n\n        switch( $this->_store ) {\n\n          // WordPress Site Options.\n          case 'options':\n          case 'site_options':\n\n            // Load from options.\n            if( $this->_store == 'site_options' ) {\n              $_value = \\get_site_option( $this->_key );\n            } else {\n              $_value = \\get_option( $this->_key );\n            }\n\n            // If already an array it must have been serialized\n            if( gettype( $_value ) === 'array' ) {\n              return $this->_output( $this->_data = $_value );\n            }\n\n            try {\n\n              $_value = json_decode( $_value, true );\n\n            } catch( Exception $error ) {\n              $this->_console( 'Caught exception: ' . $error->getMessage() );\n            }\n\n            $this->_data = $_value;\n\n            break;\n\n          default:\n\n            break;\n\n        }\n\n        return $this->_data;\n\n      }\n\n      /**\n       * Prepare Data for Output\n       *\n       * @param      $data\n       *\n       * @param bool $format\n       *\n       * @return array|mixed|string|void\n       */\n      public function _output( $data, $format = false ) {\n\n        $format = $format ? $format : $this->_format;\n\n        // Stringify.\n        if( $format === 'json' ) {\n          return json_encode( $data );\n        }\n\n        // Deeep Object.\n        if( $format === 'object' ) {\n          return json_decode( json_encode( $data ) );\n        }\n\n        return $data;\n\n      }\n\n      /**\n       * @param array $arr\n       * @param       $path\n       * @param       $val\n       *\n       * @return mixed\n       */\n      public function set_val( array &$arr, $path, $val ) {\n        $loc = & $arr;\n\n        foreach( explode( '.', $path ) as $step ) {\n          $loc = & $loc[ $step ];\n        }\n\n        return $loc = $val;\n\n      }\n\n      /**\n       * Expand Array\n       * @source http://stackoverflow.com/questions/17365059/how-to-unflatten-array-in-php-using-dot-notation\n       *\n       * @param     $array\n       * @param int $level\n       *\n       * @return array\n       */\n      public function _expand( $array, $level = 0 ) {\n        $result = array();\n        $next   = $level + 1;\n\n        foreach( $array as $key => $value ) {\n          $tree = explode( '.', $key );\n\n          if( isset( $tree[ $level ] ) ) {\n            if( !isset( $tree[ $next ] ) ) {\n              $result[ $tree[ $level ] ][ 'id' ]    = $key;\n              $result[ $tree[ $level ] ][ 'title' ] = $value;\n              if( !isset( $result[ $tree[ $level ] ][ 'children' ] ) ) {\n                $result[ $tree[ $level ] ][ 'children' ] = array();\n              }\n            } else {\n              if( isset( $result[ $tree[ $level ] ][ 'children' ] ) ) {\n                $result[ $tree[ $level ] ][ 'children' ] = array_merge_recursive( $result[ $tree[ $level ] ][ 'children' ], self::_expand( array( $key => $value ), $next ) );\n              } else {\n                $result[ $tree[ $level ] ][ 'children' ] = self::_expand( array( $key => $value ), $next );\n              }\n            }\n\n          }\n        }\n\n        return $result;\n\n      }\n\n      /**\n       * Resolve dot-notated key.\n       *\n       * @source http://stackoverflow.com/questions/14704984/best-way-for-dot-notation-access-to-multidimensional-array-in-php\n       *\n       * @param       $a\n       * @param       $path\n       * @param null  $default\n       *\n       * @internal param array $a\n       * @return array|null\n       */\n      public function _resolve( $a, $path, $default = null ) {\n\n        $current = $a;\n        $p       = strtok( $path, '.' );\n\n        while( $p !== false ) {\n\n          if( !isset( $current[ $p ] ) ) {\n            return $default;\n          }\n\n          $current = $current[ $p ];\n          $p       = strtok( '.' );\n\n        }\n\n        return $current;\n\n      }\n\n    }\n\n  }\n\n}"
  },
  {
    "path": "lib/includes/class-utility.php",
    "content": "<?php\n/**\n * Utility Class\n *\n * @copyright Copyright (c) 2010 - 2013, Usability Dynamics, Inc.\n *\n * @author team@UD\n * @namespace UDX\n * @module Utility\n */\nnamespace UDX {\n\n  if( !class_exists( 'UDX\\Utility' ) ) {\n\n    /**\n     * Utility Library.\n     *\n     * @submodule Utility\n     * @version 0.2.2\n     * @class Utility\n     */\n    class Utility {\n\n      /**\n       * Class version.\n       *\n       * @static\n       * @property $version\n       * @type string\n       */\n      public static $version = '0.4.0';\n\n      /**\n       * Textdomain String\n       *\n       * @public\n       * @property text_domain\n       * @var string\n       */\n      public static $text_domain = 'lib-utility';\n\n      /**\n       * Constructor for initializing class, in static mode as well as dynamic.\n       *\n       * @todo Should make the transdomain configuraiton.\n       *\n       * @since 0.1.1\n       * @author potanin@UD\n       */\n      public function __construct() {}\n\n      /**\n       * Wrapper for wp_parse_args.\n       *\n       * @author potanin@UD\n       * @since 0.3.0\n       * @param $args\n       * @param $defaults\n       *\n       * @return object\n       */\n      static public function parse_args( $args, $defaults ) {\n\n        return (object) wp_parse_args( $args, $defaults );\n\n      }\n\n      /**\n       * Detects Variable Type.\n       *\n       * Distinguishes between object and array based on associative status.\n       *\n       * @source http://php.net/manual/en/function.gettype.php\n       * @since 1.0.4\n       */\n      static public function get_type( $var ) {\n\n        if( is_object( $var ) ) return get_class( $var );\n        if( is_null( $var ) ) return 'null';\n        if( is_string( $var ) ) return 'string';\n\n        if( is_array( $var ) ) {\n\n          if( self::is_associative( $var ) ) {\n            return 'object';\n          }\n\n          return 'array';\n\n        }\n\n        if( is_int( $var ) ) return 'integer';\n        if( is_bool( $var ) ) return 'boolean';\n        if( is_float( $var ) ) return 'float';\n        if( is_resource( $var ) ) return 'resource';\n\n      }\n\n      /**\n       * Test if Array is Associative\n       *\n       * @param $arr\n       * @return bool\n       */\n      static public function is_associative( $arr ) {\n\n        if( !$arr ) {\n          return false;\n        }\n\n        return array_keys($arr) !== range(0, count($arr) - 1) ? true : false;\n\n      }\n\n      /**\n       * Port of jQuery.extend() function.\n       *\n       * @since 1.0.3\n       */\n      static public function extend() {\n\n        $arrays = func_get_args();\n        $base   = array_shift( $arrays );\n        if( !is_array( $base ) ) $base = empty( $base ) ? array() : array( $base );\n        foreach( (array) $arrays as $append ) {\n          if( !is_array( $append ) ) $append = array( $append );\n          foreach( (array) $append as $key => $value ) {\n            if( !array_key_exists( $key, $base ) and !is_numeric( $key ) ) {\n              $base[ $key ] = $append[ $key ];\n              continue;\n            }\n            if( ( isset( $value ) && @is_array( $value ) ) || ( isset( $base[ $key ] ) && @is_array( $base[ $key ] ) ) ) {\n              \n              // extend if exists, otherwise create.\n              if( isset( $base[ $key ] ) ) {\n                $base[ $key ] = self::extend( $base[ $key ], $append[ $key ] );\n              } else {\n                $base[ $key ] = $append[ $key ];\n              }            \n              \n            } else if( is_numeric( $key ) ) {\n              if( !in_array( $value, $base ) ) $base[ ] = $value;\n            } else {\n              $base[ $key ] = $value;\n            }\n          }\n        }\n\n        return $base;\n      }\n\n      /**\n       * Localization Functionality.\n       *\n       * Replaces array's l10n data.\n       * Helpful for localization of data which is stored in JSON files ( see /schemas )\n       *\n       * Usage:\n       *\n       * add_filter( 'ud::schema::localization', function($locals){\n       *    return array_merge( array( 'value_for_translating' => __( 'Blah Blah' ) ), $locals );\n       * });\n       *\n       * $result = self::l10n_localize (array(\n       *  'key' => 'l10n.value_for_translating'\n       * ) );\n       *\n       *\n       * @param array $data\n       * @param array $l10n translated values\n       * @return array\n       * @author peshkov@UD\n       */\n      static public function l10n_localize( $data, $l10n = array() ) {\n\n        if ( !is_array( $data ) && !is_object( $data ) ) {\n          return $data;\n        }\n\n        //** The Localization's list. */\n        $l10n = apply_filters( 'ud::schema::localization', $l10n );\n\n        //** Replace l10n entries */\n        foreach( $data as $k => $v ) {\n          if ( is_array( $v ) ) {\n            $data[ $k ] = self::l10n_localize( $v, $l10n );\n          } elseif ( is_string( $v ) ) {\n            if ( strpos( $v, 'l10n' ) !== false ) {\n              preg_match_all( '/l10n\\.([^\\s]*)/', $v, $matches );\n              if ( !empty( $matches[ 1 ] ) ) {\n                foreach ( $matches[ 1 ] as $i => $m ) {\n                  if ( array_key_exists( $m, $l10n ) ) {\n                    $data[ $k ] = str_replace( $matches[ 0 ][ $i ], $l10n[ $m ], $data[ $k ] );\n                  }\n                }\n              }\n            }\n          }\n        }\n\n        return $data;\n      }\n    }\n\n  }\n\n}\n"
  },
  {
    "path": "lib/meta-box-tabs/CHANGELOG.md",
    "content": "### 1.2.1 - 2025-09-16\n\n- Fix tabs not working with blocks.\n\n### 1.2.0 - 2025-02-04\n\nAdd an option `'tab_remember' => true` to set to remember the opening tab in the next page load.\n\n### 1.1.19 - 2024-12-16\n\nImprove performance\n\n### 1.1.18 - 2024-08-19\n\nFix running PHP Codesniffer when installing & autoload the plugin's main file via Composer\n\n### 1.1.17 - 2023-09-18\n\nFix \"hide_from_front\" not working if fields are in a tab\n\n### 1.1.16 - 2023-07-18\n\nFix issue with tooltip left\n\n### 1.1.15 - 2023-03-08\n\nAuto enqueue Font Awesome when it's used\n\n### 1.1.14 - 2023-01-16\n\nFix issue with tooltip left\n\n### 1.1.13 - 2022-06-30\n\n- Fix wysiwyg options not working\n\n### 1.1.12 - 2022-05-05\n\n- Fix validating fields in inactive tabs\n\n### 1.1.11 - 2022-03-14\n\n- Fix not working with blocks\n\n### 1.1.10 - 2022-01-14\n\n- Fix tabs overflow container when too many tabs\n- Fix JS validation error when no tabs\n\n### 1.1.9 - 2021-10-25\n\n- Improve styling\n\n### 1.1.8 - 2020-09-04\n\n- Fix undefined `tab_default_value`.\n\n### 1.1.7 - 2020-07-06\n\n- Fix clicking icons not switching tabs.\n\n### 1.1.6 - 2020-06-02\n\n- Improve style for tabs\n\n### 1.1.5 - 2019-12-24\n\n- Show error fields in hidden tabs when validating.\n\n### 1.1.4 - 2019-04-02\n\n- Fixed `overflow` issue cut off the color picker.\n- Fixed wrong spacing for fields in user profile, edit term and settings pages.\n\n### 1.1.3 - 2019-02-26\n\n- Fixed CSS for textarea field in tabs-left style.\n- Also optimized CSS for user profile, edit term and settings pages.\n\n### 1.1.2 - 2019-01-21\n\n- Fixed styling in user profile, term edit and settings pages screen.\n\n### 1.1.1\n\n- Improved the way to show Google maps/OSM in hidden tabs.\n\n### 1.1.0\n\n- Added new setting `tab_default_active` to set the default active tab when page loads\n- Fixed color field is cut off in tab panel with tabs on the left.\n\n### 1.0.4\n\n- Fixed styles for mobile devices\n\n### 1.0.3\n\n- Fix style for groups\n\n### 1.0.2\n\n- Empty tabs now showing empty tab panel instead of showing existing fields from other tabs.\n\n### 1.0.1\n\n- Improvement: Better padding for tab panel content with tabs on the left.\n\n### 1.0.0\n\n- Improvement: Make the extension safe to be included in themes/plugins.\n\n### 0.1.7\n\n- Improvement: Better compatibility with Conditional Logic\n\n### 0.1.5\n\n- Fix: Incorrect style for file advanced fields with Meta Box 4.6\n\n### 0.1.4\n\n- Improvement: Add option to hide meta box wrapper around tabs\n\n### 0.1.3\n\n- Fix: Google maps not fully loaded in hidden tab\n\n### 0.1.2\n\n- New: Now works with [MB Group](https://metabox.io/plugins/meta-box-group/) extension\n- New: Improve performance by loading in admin only\n\n### 0.1.1\n\n- New: Add left tab style\n- New: Allow to use icons in tabs. Support Dashicons by default but can use any icon.\n\n### 0.1\n\n- First release"
  },
  {
    "path": "lib/meta-box-tabs/meta-box-tabs.php",
    "content": "<?php\n/**\n * Plugin Name: MB Tabs\n * Plugin URI:  https://metabox.io/plugins/meta-box-tabs/\n * Description: Create tabs for meta boxes easily. Support 3 WordPress-native tab styles.\n * Version:     1.2.1\n * Author:      MetaBox.io\n * Author URI:  https://metabox.io\n * License:     GPL2+\n *\n * Copyright (C) 2010-2025 Tran Ngoc Tuan Anh. All rights reserved.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\n// Prevent loading this file directly.\nif ( ! defined( 'ABSPATH' ) ) {\n\treturn;\n}\n\nif ( ! class_exists( 'MB_Tabs' ) ) {\n\tclass MB_Tabs {\n\t\t/**\n\t\t * Indicate that the instance of the class is working on a meta box that has tabs or not.\n\t\t * It will be set 'true' BEFORE meta box is display and 'false' AFTER.\n\t\t *\n\t\t * @var bool\n\t\t */\n\t\tprotected $active = false;\n\n\t\t/**\n\t\t * Store all output of fields.\n\t\t * This is used to put fields in correct <div> for tabs.\n\t\t * The fields' output will be get via filter 'rwmb_outer_html'.\n\t\t *\n\t\t * @var array\n\t\t */\n\t\tprotected $fields_output = [];\n\n\t\tpublic function __construct() {\n\t\t\tadd_action( 'rwmb_enqueue_scripts', [ $this, 'enqueue' ] );\n\n\t\t\tadd_action( 'rwmb_before', [ $this, 'opening_div' ], 1 ); // 1 = display first, before tab nav.\n\t\t\tadd_action( 'rwmb_after', [ $this, 'closing_div' ], 100 ); // 100 = display last, after tab panels.\n\n\t\t\t// Change the title position of metabox\n\t\t\tadd_action( 'rwmb_after', [ $this, 'show_nav' ], 20 );\n\t\t\tadd_action( 'rwmb_after', [ $this, 'show_panels' ], 30 );\n\n\t\t\tadd_filter( 'rwmb_outer_html', [ $this, 'capture_fields' ], 20, 2 );\n\t\t}\n\n\t\tpublic function enqueue( RW_Meta_Box $obj ) {\n\t\t\tlist( , $url ) = RWMB_Loader::get_path( __DIR__ );\n\t\t\twp_enqueue_style( 'rwmb-tabs', $url . 'tabs.css', [], '1.2.0' );\n\t\t\twp_enqueue_script( 'rwmb-tabs', $url . 'tabs.js', [ 'jquery' ], '1.2.0', true );\n\n\t\t\tif ( empty( $obj->meta_box['tabs'] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$tabs = (array) $obj->meta_box['tabs'];\n\t\t\tforeach ( $tabs as $tab_data ) {\n\t\t\t\tif ( is_string( $tab_data ) ) {\n\t\t\t\t\t$tab_data = [ 'label' => $tab_data ];\n\t\t\t\t}\n\t\t\t\t$tab_data = wp_parse_args( $tab_data, [\n\t\t\t\t\t'icon'  => '',\n\t\t\t\t\t'label' => '',\n\t\t\t\t] );\n\t\t\t\t$strpos   = [ 'fa', 'fas', 'fa-solid', 'fab', 'fa-brand', 'far', 'fa-regular' ];\n\t\t\t\tforeach ( $strpos as $value ) {\n\t\t\t\t\tif ( strpos( $tab_data['icon'], $value ) !== false ) {\n\t\t\t\t\t\twp_enqueue_style( 'font-awesome', 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.1/css/all.min.css', [], ' 6.2.1' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Display opening div for tabs for meta box.\n\t\t *\n\t\t * @param RW_Meta_Box $obj Meta Box object.\n\t\t */\n\t\tpublic function opening_div( RW_Meta_Box $obj ) {\n\t\t\tif ( empty( $obj->meta_box['tabs'] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$class = 'rwmb-tabs';\n\t\t\tif ( isset( $obj->meta_box['tab_style'] ) && 'default' !== $obj->meta_box['tab_style'] ) {\n\t\t\t\t$class .= ' rwmb-tabs-' . $obj->meta_box['tab_style'];\n\t\t\t}\n\n\t\t\tif ( isset( $obj->meta_box['tab_wrapper'] ) && false === $obj->meta_box['tab_wrapper'] ) {\n\t\t\t\t$class .= ' rwmb-tabs-no-wrapper';\n\t\t\t}\n\n\t\t\t$tab_remember = isset( $obj->meta_box['tab_remember'] ) && $obj->meta_box['tab_remember'] ? $obj->meta_box['id'] : '';\n\t\t\techo '<div class=\"' . esc_attr( $class ) . '\" data-tab-remember=\"' . esc_attr( $tab_remember ) . '\">';\n\n\t\t\t// Set 'true' to let us know that we're working on a meta box that has tabs.\n\t\t\t$this->active = true;\n\t\t}\n\n\t\t/**\n\t\t * Display closing div for tabs for meta box.\n\t\t */\n\t\tpublic function closing_div() {\n\t\t\tif ( ! $this->active ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\techo '</div>';\n\n\t\t\t// Reset to initial state to be ready for other meta boxes.\n\t\t\t$this->active        = false;\n\t\t\t$this->fields_output = [];\n\t\t}\n\n\t\t/**\n\t\t * Display tab navigation.\n\t\t *\n\t\t * @param RW_Meta_Box $obj Meta Box object.\n\t\t */\n\t\tpublic function show_nav( RW_Meta_Box $obj ) {\n\t\t\tif ( ! $this->active ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$tabs           = $obj->meta_box['tabs'];\n\t\t\t$default_active = isset( $obj->tab_default_active ) ? $obj->tab_default_active : null;\n\n\t\t\techo '<ul class=\"rwmb-tab-nav\">';\n\n\t\t\t$i = 0;\n\t\t\tforeach ( $tabs as $key => $tab_data ) {\n\t\t\t\tif ( is_string( $tab_data ) ) {\n\t\t\t\t\t$tab_data = [ 'label' => $tab_data ];\n\t\t\t\t}\n\t\t\t\t$tab_data = wp_parse_args( $tab_data, [\n\t\t\t\t\t'icon'  => '',\n\t\t\t\t\t'label' => '',\n\t\t\t\t] );\n\n\t\t\t\tif ( filter_var( $tab_data['icon'], FILTER_VALIDATE_URL ) ) { // If icon is an URL.\n\t\t\t\t\t$icon = '<img src=\"' . esc_url( $tab_data['icon'] ) . '\">';\n\t\t\t\t} else { // If icon is icon font.\n\t\t\t\t\t// If icon is dashicons, auto add class 'dashicons' for users.\n\t\t\t\t\tif ( false !== strpos( $tab_data['icon'], 'dashicons' ) ) {\n\t\t\t\t\t\t$tab_data['icon'] .= ' dashicons';\n\t\t\t\t\t}\n\t\t\t\t\t// Remove duplicate classes.\n\t\t\t\t\t$tab_data['icon'] = array_filter( array_map( 'trim', explode( ' ', $tab_data['icon'] ) ) );\n\t\t\t\t\t$tab_data['icon'] = implode( ' ', array_unique( $tab_data['icon'] ) );\n\n\t\t\t\t\t$icon = $tab_data['icon'] ? '<i class=\"' . esc_attr( $tab_data['icon'] ) . '\"></i>' : '';\n\t\t\t\t}\n\n\t\t\t\t$class = \"rwmb-tab-$key\";\n\t\t\t\tif ( ( $default_active && $default_active === $key ) || ( ! $default_active && ! $i ) ) {\n\t\t\t\t\t$class .= ' rwmb-tab-active';\n\t\t\t\t}\n\n\t\t\t\tprintf(\n\t\t\t\t\t'<li class=\"%s\" data-panel=\"%s\"><a href=\"#\">%s%s</a></li>',\n\t\t\t\t\tesc_attr( $class ),\n\t\t\t\t\tesc_attr( $key ),\n\t\t\t\t\t$icon,\n\t\t\t\t\tesc_html( $tab_data['label'] )\n\t\t\t\t);\n\t\t\t\t++$i;\n\t\t\t}\n\n\t\t\techo '</ul>';\n\t\t}\n\n\t\t/**\n\t\t * Display tab panels.\n\t\t * Note that: this public function is hooked to 'rwmb_after', when all fields are outputted.\n\t\t * (and captured by 'capture_fields' public function).\n\t\t *\n\t\t * @param RW_Meta_Box $obj Meta Box object.\n\t\t */\n\t\tpublic function show_panels( RW_Meta_Box $obj ) {\n\t\t\tif ( ! $this->active ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Store all tabs.\n\t\t\t$tabs = $obj->meta_box['tabs'];\n\n\t\t\techo '<div class=\"rwmb-tab-panels\">';\n\t\t\tforeach ( $this->fields_output as $tab => $fields ) {\n\t\t\t\t// Remove rendered tab.\n\t\t\t\tif ( isset( $tabs[ $tab ] ) ) {\n\t\t\t\t\tunset( $tabs[ $tab ] );\n\t\t\t\t}\n\n\t\t\t\techo '<div class=\"rwmb-tab-panel rwmb-tab-panel-' . esc_attr( $tab ) . '\" data-panel=\"' . esc_attr( $tab ) . '\">';\n\t\t\t\techo implode( '', $fields );\n\t\t\t\techo '</div>';\n\t\t\t}\n\n\t\t\t// Print unrendered tabs.\n\t\t\tforeach ( $tabs as $tab_id => $tab_data ) {\n\t\t\t\techo '<div class=\"rwmb-tab-panel rwmb-tab-panel-' . esc_attr( $tab_id ) . '\">';\n\t\t\t\techo '</div>';\n\t\t\t}\n\n\t\t\techo '</div>';\n\t\t}\n\n\t\t/**\n\t\t * Save field output into class variable to output later.\n\t\t *\n\t\t * @param string $output Field output.\n\t\t * @param array  $field  Field configuration.\n\t\t *\n\t\t * @return string\n\t\t */\n\t\tpublic function capture_fields( $output, $field ) {\n\t\t\t// If meta box doesn't have tabs, do nothing.\n\t\t\tif ( ! $this->active || ! isset( $field['tab'] ) ) {\n\t\t\t\treturn $output;\n\t\t\t}\n\n\t\t\t$tab = $field['tab'];\n\n\t\t\tif ( ! isset( $this->fields_output[ $tab ] ) ) {\n\t\t\t\t$this->fields_output[ $tab ] = [];\n\t\t\t}\n\t\t\t$this->fields_output[ $tab ][] = $output;\n\n\t\t\t// Return empty string to let Meta Box plugin echoes nothing.\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tnew MB_Tabs();\n}\n"
  },
  {
    "path": "lib/meta-box-tabs/tabs.css",
    "content": ".rwmb-tab-nav{display:flex;margin-bottom:-1px;flex-wrap:wrap;padding:inherit}.rwmb-tab-nav li{margin:0;display:inline-block}.rwmb-tab-nav a{display:flex;align-items:center;gap:4px;padding:8px 12px;line-height:1;text-decoration:none}.rwmb-tab-nav a:active,.rwmb-tab-nav a:focus{outline:none;box-shadow:none}.rwmb-tab-nav i{width:16px;height:16px;font-size:16px}.rwmb-tab-nav i[class^=fa]{width:12px;height:12px;font-size:12px}.rwmb-tab-nav img{width:12px;height:12px;display:inline-block}.rwmb-tab-active{border:1px solid #ccd0d4;border-bottom-color:rgba(0,0,0,0);background:#fff}.rwmb-tab-active a{color:inherit}.rwmb-tab-panels{background:#fff;border:1px solid #ccd0d4}.rwmb-tab-panel{padding:12px;display:none}.rwmb-tabs-box .rwmb-tab-nav li{background:#f5f5f5;border:1px solid #ccd0d4;margin-right:5px}.rwmb-tabs-box .rwmb-tab-nav li:hover{background:#fff}.rwmb-tabs-box .rwmb-tab-nav a{color:inherit}.rwmb-tabs-box .rwmb-tab-nav .rwmb-tab-active{border-bottom-color:rgba(0,0,0,0)}.rwmb-tabs-box .rwmb-tab-nav .rwmb-tab-active,.rwmb-tabs-box .rwmb-tab-nav .rwmb-tab-active:hover{background:#fff}.rwmb-tabs-box .rwmb-clone{background-color:rgba(0,0,0,0)}.rwmb-tabs-left{margin:-6px -12px -12px;display:flex}.rwmb-tabs-left .rwmb-tab-nav{flex-direction:column;margin:0 -1px 0 0;border-right:1px solid #ccd0d4;background:#fafafa}.rwmb-tabs-left .rwmb-tab-nav li{display:block;min-width:180px;border-bottom:1px solid #ccd0d4}.rwmb-tabs-left .rwmb-tab-nav li:first-child{border-top:none}.rwmb-tabs-left .rwmb-tab-nav a{padding:12px}.rwmb-tabs-left .rwmb-tab-active{border-width:0 0 1px 0;margin-right:-1px;z-index:1}.rwmb-tabs-left .rwmb-tab-panels{flex:1;border-width:0 0 0 1px}.rwmb-tabs-left .rwmb-tab-panel{padding:12px 20px;border:none}.rwmb-seamless .rwmb-tabs-left{margin:0;border:1px solid #ccd0d4}.profile-php .rwmb-tabs-left,.user-edit-php .rwmb-tabs-left,.term-php .rwmb-tabs-left,.edit-tags-php .rwmb-tabs-left,.rwmb-settings-no-boxes .rwmb-tabs-left{margin:0;flex-wrap:wrap}.profile-php .rwmb-tabs-left>h2,.user-edit-php .rwmb-tabs-left>h2,.term-php .rwmb-tabs-left>h2,.edit-tags-php .rwmb-tabs-left>h2,.rwmb-settings-no-boxes .rwmb-tabs-left>h2{flex-basis:100%}.profile-php .rwmb-tabs-left .rwmb-tab-nav,.user-edit-php .rwmb-tabs-left .rwmb-tab-nav,.term-php .rwmb-tabs-left .rwmb-tab-nav,.edit-tags-php .rwmb-tabs-left .rwmb-tab-nav,.rwmb-settings-no-boxes .rwmb-tabs-left .rwmb-tab-nav{border:1px solid #ccd0d4}.profile-php .rwmb-tabs-left .rwmb-tab-panels,.user-edit-php .rwmb-tabs-left .rwmb-tab-panels,.term-php .rwmb-tabs-left .rwmb-tab-panels,.edit-tags-php .rwmb-tabs-left .rwmb-tab-panels,.rwmb-settings-no-boxes .rwmb-tabs-left .rwmb-tab-panels{border-width:1px}.profile-php .rwmb-tabs .rwmb-label,.profile-php .rwmb-tabs .rwmb-input,.user-edit-php .rwmb-tabs .rwmb-label,.user-edit-php .rwmb-tabs .rwmb-input,.term-php .rwmb-tabs .rwmb-label,.term-php .rwmb-tabs .rwmb-input,.edit-tags-php .rwmb-tabs .rwmb-label,.edit-tags-php .rwmb-tabs .rwmb-input,.rwmb-settings-no-boxes .rwmb-tabs .rwmb-label,.rwmb-settings-no-boxes .rwmb-tabs .rwmb-input{padding:0}.rwmb-settings-no-boxes .rwmb-tab-panel .rwmb-field{padding:12px 0 0}@media(max-width: 575px){.rwmb-tabs{margin:-6px -12px -12px}.rwmb-tabs>h2{margin-left:12px;margin-right:12px}.rwmb-seamless .rwmb-tabs{margin:0}.rwmb-tab-nav{flex-direction:column;margin-top:0;margin-bottom:0}.rwmb-tab-nav li{display:block;border-bottom:1px solid #ccd0d4}.rwmb-tab-nav a{padding:12px}.rwmb-tab-nav .rwmb-tab-active{border-width:0 0 1px 0}.rwmb-tab-panels{border:none;background:none}.rwmb-tabs-box .rwmb-tab-nav li{border-width:0 0 1px 0;margin-right:0}.rwmb-tabs-box .rwmb-tab-nav .rwmb-tab-active{border-bottom:1px solid #ccd0d4}.rwmb-tabs-left{flex-direction:column}.rwmb-tabs-left .rwmb-tab-nav{width:100%;border-right:none}.rwmb-tabs-left .rwmb-tab-active{margin-right:0}.rwmb-tabs-left .rwmb-tab-panel{padding-left:0;padding-right:0}}\n"
  },
  {
    "path": "lib/meta-box-tabs/tabs.js",
    "content": "( ( window, document, $ ) => {\n\t// Store initialized tabs to avoid re-initializing them.\n\tconst initializedTabs = new Set();\n\n\tfunction switchTab() {\n\t\t$( '.rwmb-tab-nav' ).on( 'click', 'a', e => {\n\t\t\te.preventDefault();\n\t\t\tshowTab( e.target );\n\t\t} );\n\t}\n\n\tconst showTab = ( el ) => {\n\t\tconst tab = el.closest( 'li' ).dataset.panel,\n\t\t\t$wrapper = $( el ).closest( '.rwmb-tabs' ),\n\t\t\t$tabs = $wrapper.find( '.rwmb-tab-nav > li' ),\n\t\t\t$panels = $wrapper.find( '.rwmb-tab-panel' );\n\n\t\t$tabs.removeClass( 'rwmb-tab-active' ).filter( '[data-panel=\"' + tab + '\"]' ).addClass( 'rwmb-tab-active' );\n\t\t$panels.hide().filter( '.rwmb-tab-panel-' + tab ).show();\n\n\t\tconst tabsGroupId = $wrapper.data( 'tab-remember' );\n\n\t\t// Save active tab to local storage.\n\t\tif ( tabsGroupId ) {\n\t\t\trememberTab( tab, tabsGroupId );\n\t\t}\n\n\t\t// Delay expensive tasks, make sure the panel is visible before initializing\n\t\tif ( !initializedTabs.has( tab ) ) {\n\t\t\tsetTimeout( () => {\n\t\t\t\trwmb.$document.trigger( 'mb_init_editors' );\n\n\t\t\t\t// Refresh maps, make sure they're fully loaded, when it's in hidden div (tab).\n\t\t\t\t$( window ).trigger( 'rwmb_map_refresh' );\n\n\t\t\t\tinitializedTabs.add( tab );\n\t\t\t}, 200 );\n\t\t}\n\t};\n\n\t// Set active tab based on visible pane to better works with Meta Box Conditional Logic.\n\tfunction tweakForConditionalLogic() {\n\t\tconst $tabGroups = $( '.rwmb-tabs' );\n\n\t\t$tabGroups.each( function() {\n\t\t\tconst $tabs = $( this );\n\t\t\tif ( $tabs.find( '.rwmb-tab-active' ).is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Find the active pane.\n\t\t\tconst activePane = $tabs.find( '.rwmb-tab-panel[style*=\"block\"]' ).index();\n\t\t\tif ( activePane >= 0 ) {\n\t\t\t\t$tabs.find( '.rwmb-tab-nav li' ).removeClass( 'rwmb-tab-active' ).eq( activePane ).addClass( 'rwmb-tab-active' );\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction showValidateErrorFields() {\n\t\tvar inputSelectors = 'input[class*=\"rwmb-error\"], textarea[class*=\"rwmb-error\"], select[class*=\"rwmb-error\"], button[class*=\"rwmb-error\"]';\n\t\t$( document ).on( 'after_validate', 'form', e => {\n\t\t\tvar $input = $( e.target ).find( inputSelectors ),\n\t\t\t\t$panel = $input.closest( '.rwmb-tab-panel' );\n\t\t\tif ( $panel.length ) {\n\t\t\t\tshowTab( $input.closest( '.rwmb-tabs' ).find( 'li[data-panel=\"' + $panel.data( 'panel' ) + '\"] a' )[ 0 ] );\n\t\t\t}\n\t\t} );\n\t}\n\n\tconst rememberTab = ( panel, tabsGroupId ) => {\n\t\tlocalStorage.setItem( `rwmb_active_tab:${ tabsGroupId }`, panel );\n\t};\n\n\tconst setActiveTabsFromLocalStorage = () => {\n\t\tconst tabGroups = document.querySelectorAll( '.rwmb-tabs' );\n\n\t\ttabGroups.forEach( tabs => {\n\t\t\tconst tabsGroupId = tabs.dataset.tabRemember;\n\t\t\tif ( !tabsGroupId ) {\n\t\t\t\ttabs.querySelector( '.rwmb-tab-active a' ).click();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst activeTab = localStorage.getItem( `rwmb_active_tab:${ tabsGroupId }` );\n\n\t\t\tif ( activeTab ) {\n\t\t\t\ttabs.querySelector( `li[data-panel=\"${ activeTab }\"] a` ).click();\n\t\t\t} else {\n\t\t\t\ttabs.querySelector( '.rwmb-tab-active a' ).click();\n\t\t\t}\n\t\t} );\n\t};\n\n\n\t$( document ).on( 'mb_ready', function() {\n\t\tswitchTab();\n\t\ttweakForConditionalLogic();\n\t\tshowValidateErrorFields();\n\t\tsetActiveTabsFromLocalStorage();\n\n\t\t// Remove wrapper. Use Meta Box's seamless style.\n\t\t$( '.rwmb-tabs-no-wrapper' ).closest( '.postbox' ).removeClass( 'rwmb-default' ).addClass( 'rwmb-seamless' );\n\t} );\n} )( window, document, jQuery );\n"
  },
  {
    "path": "lib/ns-vendor/classes/.gitkeep",
    "content": ""
  },
  {
    "path": "lib/ns-vendor/classes/deliciousbrains/wp-background-processing/classes/wp-async-request.php",
    "content": "<?php\n/**\n * WP Async Request\n *\n * @package WP-Background-Processing\n */\n\n/**\n * Abstract UDX_WP_Async_Request class.\n *\n * @abstract\n */\nabstract class UDX_WP_Async_Request {\n\n\t/**\n\t * Prefix\n\t *\n\t * (default value: 'wp')\n\t *\n\t * @var string\n\t * @access protected\n\t */\n\tprotected $prefix = 'wp';\n\n\t/**\n\t * Action\n\t *\n\t * (default value: 'async_request')\n\t *\n\t * @var string\n\t * @access protected\n\t */\n\tprotected $action = 'async_request';\n\n\t/**\n\t * Identifier\n\t *\n\t * @var mixed\n\t * @access protected\n\t */\n\tprotected $identifier;\n\n\t/**\n\t * Data\n\t *\n\t * (default value: array())\n\t *\n\t * @var array\n\t * @access protected\n\t */\n\tprotected $data = array();\n\n\t/**\n\t * Initiate new async request.\n\t */\n\tpublic function __construct() {\n\t\t$this->identifier = $this->prefix . '_' . $this->action;\n\n\t\tadd_action( 'wp_ajax_' . $this->identifier, array( $this, 'maybe_handle' ) );\n\t\tadd_action( 'wp_ajax_nopriv_' . $this->identifier, array( $this, 'maybe_handle' ) );\n\t}\n\n\t/**\n\t * Set data used during the request.\n\t *\n\t * @param array $data Data.\n\t *\n\t * @return $this\n\t */\n\tpublic function data( $data ) {\n\t\t$this->data = $data;\n\n\t\treturn $this;\n\t}\n\n\t/**\n\t * Dispatch the async request.\n\t *\n\t * @return array|WP_Error|false HTTP Response array, WP_Error on failure, or false if not attempted.\n\t */\n\tpublic function dispatch() {\n\t\t$url  = add_query_arg( $this->get_query_args(), $this->get_query_url() );\n\t\t$args = $this->get_post_args();\n\n\t\treturn wp_remote_post( esc_url_raw( $url ), $args );\n\t}\n\n\t/**\n\t * Get query args.\n\t *\n\t * @return array\n\t */\n\tprotected function get_query_args() {\n\t\tif ( property_exists( $this, 'query_args' ) ) {\n\t\t\treturn $this->query_args;\n\t\t}\n\n\t\t$args = array(\n\t\t\t'action' => $this->identifier,\n\t\t\t'nonce'  => wp_create_nonce( $this->identifier ),\n\t\t);\n\n\t\t/**\n\t\t * Filters the post arguments used during an async request.\n\t\t *\n\t\t * @param array $url\n\t\t */\n\t\treturn apply_filters( $this->identifier . '_query_args', $args );\n\t}\n\n\t/**\n\t * Get query URL.\n\t *\n\t * @return string\n\t */\n\tprotected function get_query_url() {\n\t\tif ( property_exists( $this, 'query_url' ) ) {\n\t\t\treturn $this->query_url;\n\t\t}\n\n\t\t$url = admin_url( 'admin-ajax.php' );\n\n\t\t/**\n\t\t * Filters the post arguments used during an async request.\n\t\t *\n\t\t * @param string $url\n\t\t */\n\t\treturn apply_filters( $this->identifier . '_query_url', $url );\n\t}\n\n\t/**\n\t * Get post args.\n\t *\n\t * @return array\n\t */\n\tprotected function get_post_args() {\n\t\tif ( property_exists( $this, 'post_args' ) ) {\n\t\t\treturn $this->post_args;\n\t\t}\n\n\t\t$args = array(\n\t\t\t'timeout'   => 5,\n\t\t\t'blocking'  => false,\n\t\t\t'body'      => $this->data,\n\t\t\t'cookies'   => $_COOKIE, // Passing cookies ensures request is performed as initiating user.\n\t\t\t'sslverify' => apply_filters( 'https_local_ssl_verify', false ), // Local requests, fine to pass false.\n\t\t);\n\n\t\t/**\n\t\t * Filters the post arguments used during an async request.\n\t\t *\n\t\t * @param array $args\n\t\t */\n\t\treturn apply_filters( $this->identifier . '_post_args', $args );\n\t}\n\n\t/**\n\t * Maybe handle a dispatched request.\n\t *\n\t * Check for correct nonce and pass to handler.\n\t *\n\t * @return void|mixed\n\t */\n\tpublic function maybe_handle() {\n\t\t// Don't lock up other requests while processing.\n\t\tsession_write_close();\n\n\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\n\n\t\t$this->handle();\n\n\t\treturn $this->maybe_wp_die();\n\t}\n\n\t/**\n\t * Should the process exit with wp_die?\n\t *\n\t * @param mixed $return What to return if filter says don't die, default is null.\n\t *\n\t * @return void|mixed\n\t */\n\tprotected function maybe_wp_die( $return = null ) {\n\t\t/**\n\t\t * Should wp_die be used?\n\t\t *\n\t\t * @return bool\n\t\t */\n\t\tif ( apply_filters( $this->identifier . '_wp_die', true ) ) {\n\t\t\twp_die();\n\t\t}\n\n\t\treturn $return;\n\t}\n\n\t/**\n\t * Handle a dispatched request.\n\t *\n\t * Override this method to perform any actions required\n\t * during the async request.\n\t */\n\tabstract protected function handle();\n}\n"
  },
  {
    "path": "lib/ns-vendor/classes/deliciousbrains/wp-background-processing/classes/wp-background-process.php",
    "content": "<?php\n/**\n * WP Background Process\n *\n * @package WP-Background-Processing\n */\n\n/**\n * Abstract UDX_WP_Background_Process class.\n *\n * @abstract\n * @extends UDX_WP_Async_Request\n */\nabstract class UDX_WP_Background_Process extends UDX_WP_Async_Request {\n\n\t/**\n\t * Action\n\t *\n\t * (default value: 'background_process')\n\t *\n\t * @var string\n\t * @access protected\n\t */\n\tprotected $action = 'background_process';\n\n\t/**\n\t * Start time of current process.\n\t *\n\t * (default value: 0)\n\t *\n\t * @var int\n\t * @access protected\n\t */\n\tprotected $start_time = 0;\n\n\t/**\n\t * Cron_hook_identifier\n\t *\n\t * @var string\n\t * @access protected\n\t */\n\tprotected $cron_hook_identifier;\n\n\t/**\n\t * Cron_interval_identifier\n\t *\n\t * @var string\n\t * @access protected\n\t */\n\tprotected $cron_interval_identifier;\n\n\t/**\n\t * Restrict object instantiation when using unserialize.\n\t *\n\t * @var bool|array\n\t */\n\tprotected $allowed_batch_data_classes = true;\n\n\t/**\n\t * The status set when process is cancelling.\n\t *\n\t * @var int\n\t */\n\tconst STATUS_CANCELLED = 1;\n\n\t/**\n\t * The status set when process is paused or pausing.\n\t *\n\t * @var int;\n\t */\n\tconst STATUS_PAUSED = 2;\n\n\t/**\n\t * Initiate new background process.\n\t *\n\t * @param bool|array $allowed_batch_data_classes Optional. Array of class UDX_names that can be unserialized. Default true (any class).\n\t */\n\tpublic function __construct( $allowed_batch_data_classes = true ) {\n\t\tparent::__construct();\n\n\t\tif ( empty( $allowed_batch_data_classes ) && false !== $allowed_batch_data_classes ) {\n\t\t\t$allowed_batch_data_classes = true;\n\t\t}\n\n\t\tif ( ! is_bool( $allowed_batch_data_classes ) && ! is_array( $allowed_batch_data_classes ) ) {\n\t\t\t$allowed_batch_data_classes = true;\n\t\t}\n\n\t\t// If allowed_batch_data_classes property set in subclass,\n\t\t// only apply override if not allowing any class.\n\t\tif ( true === $this->allowed_batch_data_classes || true !== $allowed_batch_data_classes ) {\n\t\t\t$this->allowed_batch_data_classes = $allowed_batch_data_classes;\n\t\t}\n\n\t\t$this->cron_hook_identifier     = $this->identifier . '_cron';\n\t\t$this->cron_interval_identifier = $this->identifier . '_cron_interval';\n\n\t\tadd_action( $this->cron_hook_identifier, array( $this, 'handle_cron_healthcheck' ) );\n\t\tadd_filter( 'cron_schedules', array( $this, 'schedule_cron_healthcheck' ) );\n\t}\n\n\t/**\n\t * Schedule the cron healthcheck and dispatch an async request to start processing the queue.\n\t *\n\t * @access public\n\t * @return array|WP_Error|false HTTP Response array, WP_Error on failure, or false if not attempted.\n\t */\n\tpublic function dispatch() {\n\t\tif ( $this->is_processing() ) {\n\t\t\t// Process already running.\n\t\t\treturn false;\n\t\t}\n\n\t\t// Schedule the cron healthcheck.\n\t\t$this->schedule_event();\n\n\t\t// Perform remote post.\n\t\treturn parent::dispatch();\n\t}\n\n\t/**\n\t * Push to the queue.\n\t *\n\t * Note, save must be called in order to persist queued items to a batch for processing.\n\t *\n\t * @param mixed $data Data.\n\t *\n\t * @return $this\n\t */\n\tpublic function push_to_queue( $data ) {\n\t\t$this->data[] = $data;\n\n\t\treturn $this;\n\t}\n\n\t/**\n\t * Save the queued items for future processing.\n\t *\n\t * @return $this\n\t */\n\tpublic function save() {\n\t\t$key = $this->generate_key();\n\n\t\tif ( ! empty( $this->data ) ) {\n\t\t\tupdate_site_option( $key, $this->data );\n\t\t}\n\n\t\t// Clean out data so that new data isn't prepended with closed session's data.\n\t\t$this->data = array();\n\n\t\treturn $this;\n\t}\n\n\t/**\n\t * Update a batch's queued items.\n\t *\n\t * @param string $key  Key.\n\t * @param array  $data Data.\n\t *\n\t * @return $this\n\t */\n\tpublic function update( $key, $data ) {\n\t\tif ( ! empty( $data ) ) {\n\t\t\tupdate_site_option( $key, $data );\n\t\t}\n\n\t\treturn $this;\n\t}\n\n\t/**\n\t * Delete a batch of queued items.\n\t *\n\t * @param string $key Key.\n\t *\n\t * @return $this\n\t */\n\tpublic function delete( $key ) {\n\t\tdelete_site_option( $key );\n\n\t\treturn $this;\n\t}\n\n\t/**\n\t * Delete entire job queue.\n\t */\n\tpublic function delete_all() {\n\t\t$batches = $this->get_batches();\n\n\t\tforeach ( $batches as $batch ) {\n\t\t\t$this->delete( $batch->key );\n\t\t}\n\n\t\tdelete_site_option( $this->get_status_key() );\n\n\t\t$this->cancelled();\n\t}\n\n\t/**\n\t * Cancel job on next batch.\n\t */\n\tpublic function cancel() {\n\t\tupdate_site_option( $this->get_status_key(), self::STATUS_CANCELLED );\n\n\t\t// Just in case the job was paused at the time.\n\t\t$this->dispatch();\n\t}\n\n\t/**\n\t * Has the process been cancelled?\n\t *\n\t * @return bool\n\t */\n\tpublic function is_cancelled() {\n\t\t$status = get_site_option( $this->get_status_key(), 0 );\n\n\t\treturn absint( $status ) === self::STATUS_CANCELLED;\n\t}\n\n\t/**\n\t * Called when background process has been cancelled.\n\t */\n\tprotected function cancelled() {\n\t\tdo_action( $this->identifier . '_cancelled' );\n\t}\n\n\t/**\n\t * Pause job on next batch.\n\t */\n\tpublic function pause() {\n\t\tupdate_site_option( $this->get_status_key(), self::STATUS_PAUSED );\n\t}\n\n\t/**\n\t * Is the job paused?\n\t *\n\t * @return bool\n\t */\n\tpublic function is_paused() {\n\t\t$status = get_site_option( $this->get_status_key(), 0 );\n\n\t\treturn absint( $status ) === self::STATUS_PAUSED;\n\t}\n\n\t/**\n\t * Called when background process has been paused.\n\t */\n\tprotected function paused() {\n\t\tdo_action( $this->identifier . '_paused' );\n\t}\n\n\t/**\n\t * Resume job.\n\t */\n\tpublic function resume() {\n\t\tdelete_site_option( $this->get_status_key() );\n\n\t\t$this->schedule_event();\n\t\t$this->dispatch();\n\t\t$this->resumed();\n\t}\n\n\t/**\n\t * Called when background process has been resumed.\n\t */\n\tprotected function resumed() {\n\t\tdo_action( $this->identifier . '_resumed' );\n\t}\n\n\t/**\n\t * Is queued?\n\t *\n\t * @return bool\n\t */\n\tpublic function is_queued() {\n\t\treturn ! $this->is_queue_empty();\n\t}\n\n\t/**\n\t * Is the tool currently active, e.g. starting, working, paused or cleaning up?\n\t *\n\t * @return bool\n\t */\n\tpublic function is_active() {\n\t\treturn $this->is_queued() || $this->is_processing() || $this->is_paused() || $this->is_cancelled();\n\t}\n\n\t/**\n\t * Generate key for a batch.\n\t *\n\t * Generates a unique key based on microtime. Queue items are\n\t * given a unique key so that they can be merged upon save.\n\t *\n\t * @param int    $length Optional max length to trim key to, defaults to 64 characters.\n\t * @param string $key    Optional string to append to identifier before hash, defaults to \"batch\".\n\t *\n\t * @return string\n\t */\n\tprotected function generate_key( $length = 64, $key = 'batch' ) {\n\t\t$unique  = md5( microtime() . wp_rand() );\n\t\t$prepend = $this->identifier . '_' . $key . '_';\n\n\t\treturn substr( $prepend . $unique, 0, $length );\n\t}\n\n\t/**\n\t * Get the status key.\n\t *\n\t * @return string\n\t */\n\tprotected function get_status_key() {\n\t\treturn $this->identifier . '_status';\n\t}\n\n\t/**\n\t * Maybe process a batch of queued items.\n\t *\n\t * Checks whether data exists within the queue and that\n\t * the process is not already running.\n\t */\n\tpublic function maybe_handle() {\n\t\t// Don't lock up other requests while processing.\n\t\tsession_write_close();\n\n\t\tif ( $this->is_processing() ) {\n\t\t\t// Background process already running.\n\t\t\treturn $this->maybe_wp_die();\n\t\t}\n\n\t\tif ( $this->is_cancelled() ) {\n\t\t\t$this->clear_scheduled_event();\n\t\t\t$this->delete_all();\n\n\t\t\treturn $this->maybe_wp_die();\n\t\t}\n\n\t\tif ( $this->is_paused() ) {\n\t\t\t$this->clear_scheduled_event();\n\t\t\t$this->paused();\n\n\t\t\treturn $this->maybe_wp_die();\n\t\t}\n\n\t\tif ( $this->is_queue_empty() ) {\n\t\t\t// No data to process.\n\t\t\treturn $this->maybe_wp_die();\n\t\t}\n\n\t\tcheck_ajax_referer( $this->identifier, 'nonce' );\n\n\t\t$this->handle();\n\n\t\treturn $this->maybe_wp_die();\n\t}\n\n\t/**\n\t * Is queue empty?\n\t *\n\t * @return bool\n\t */\n\tprotected function is_queue_empty() {\n\t\treturn empty( $this->get_batch() );\n\t}\n\n\t/**\n\t * Is process running?\n\t *\n\t * Check whether the current process is already running\n\t * in a background process.\n\t *\n\t * @return bool\n\t *\n\t * @deprecated 1.1.0 Superseded.\n\t * @see        is_processing()\n\t */\n\tprotected function is_process_running() {\n\t\treturn $this->is_processing();\n\t}\n\n\t/**\n\t * Is the background process currently running?\n\t *\n\t * @return bool\n\t */\n\tpublic function is_processing() {\n\t\tif ( get_site_transient( $this->identifier . '_process_lock' ) ) {\n\t\t\t// Process already running.\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Lock process.\n\t *\n\t * Lock the process so that multiple instances can't run simultaneously.\n\t * Override if applicable, but the duration should be greater than that\n\t * defined in the time_exceeded() method.\n\t */\n\tprotected function lock_process() {\n\t\t$this->start_time = time(); // Set start time of current process.\n\n\t\t$lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute\n\t\t$lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration );\n\n\t\tset_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration );\n\t}\n\n\t/**\n\t * Unlock process.\n\t *\n\t * Unlock the process so that other instances can spawn.\n\t *\n\t * @return $this\n\t */\n\tprotected function unlock_process() {\n\t\tdelete_site_transient( $this->identifier . '_process_lock' );\n\n\t\treturn $this;\n\t}\n\n\t/**\n\t * Get batch.\n\t *\n\t * @return stdClass Return the first batch of queued items.\n\t */\n\tprotected function get_batch() {\n\t\treturn array_reduce(\n\t\t\t$this->get_batches( 1 ),\n\t\t\tstatic function ( $carry, $batch ) {\n\t\t\t\treturn $batch;\n\t\t\t},\n\t\t\tarray()\n\t\t);\n\t}\n\n\t/**\n\t * Get batches.\n\t *\n\t * @param int $limit Number of batches to return, defaults to all.\n\t *\n\t * @return array of stdClass\n\t */\n\tpublic function get_batches( $limit = 0 ) {\n\t\tglobal $wpdb;\n\n\t\tif ( empty( $limit ) || ! is_int( $limit ) ) {\n\t\t\t$limit = 0;\n\t\t}\n\n\t\t$table        = $wpdb->options;\n\t\t$column       = 'option_name';\n\t\t$key_column   = 'option_id';\n\t\t$value_column = 'option_value';\n\n\t\tif ( is_multisite() ) {\n\t\t\t$table        = $wpdb->sitemeta;\n\t\t\t$column       = 'meta_key';\n\t\t\t$key_column   = 'meta_id';\n\t\t\t$value_column = 'meta_value';\n\t\t}\n\n\t\t$key = $wpdb->esc_like( $this->identifier . '_batch_' ) . '%';\n\n\t\t$sql = '\n\t\t\tSELECT *\n\t\t\tFROM ' . $table . '\n\t\t\tWHERE ' . $column . ' LIKE %s\n\t\t\tORDER BY ' . $key_column . ' ASC\n\t\t\t';\n\n\t\t$args = array( $key );\n\n\t\tif ( ! empty( $limit ) ) {\n\t\t\t$sql .= ' LIMIT %d';\n\n\t\t\t$args[] = $limit;\n\t\t}\n\n\t\t$items = $wpdb->get_results( $wpdb->prepare( $sql, $args ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared\n\n\t\t$batches = array();\n\n\t\tif ( ! empty( $items ) ) {\n\t\t\t$allowed_classes = $this->allowed_batch_data_classes;\n\n\t\t\t$batches = array_map(\n\t\t\t\tstatic function ( $item ) use ( $column, $value_column, $allowed_classes ) {\n\t\t\t\t\t$batch       = new stdClass();\n\t\t\t\t\t$batch->key  = $item->{$column};\n\t\t\t\t\t$batch->data = static::maybe_unserialize( $item->{$value_column}, $allowed_classes );\n\n\t\t\t\t\treturn $batch;\n\t\t\t\t},\n\t\t\t\t$items\n\t\t\t);\n\t\t}\n\n\t\treturn $batches;\n\t}\n\n\t/**\n\t * Handle a dispatched request.\n\t *\n\t * Pass each queue item to the task handler, while remaining\n\t * within server memory and time limit constraints.\n\t */\n\tprotected function handle() {\n\t\t$this->lock_process();\n\n\t\t/**\n\t\t * Number of seconds to sleep between batches. Defaults to 0 seconds, minimum 0.\n\t\t *\n\t\t * @param int $seconds\n\t\t */\n\t\t$throttle_seconds = max(\n\t\t\t0,\n\t\t\tapply_filters(\n\t\t\t\t$this->identifier . '_seconds_between_batches',\n\t\t\t\tapply_filters(\n\t\t\t\t\t$this->prefix . '_seconds_between_batches',\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\tdo {\n\t\t\t$batch = $this->get_batch();\n\n\t\t\tforeach ( $batch->data as $key => $value ) {\n\t\t\t\t$task = $this->task( $value );\n\n\t\t\t\tif ( false !== $task ) {\n\t\t\t\t\t$batch->data[ $key ] = $task;\n\t\t\t\t} else {\n\t\t\t\t\tunset( $batch->data[ $key ] );\n\t\t\t\t}\n\n\t\t\t\t// Keep the batch up to date while processing it.\n\t\t\t\tif ( ! empty( $batch->data ) ) {\n\t\t\t\t\t$this->update( $batch->key, $batch->data );\n\t\t\t\t}\n\n\t\t\t\t// Let the server breathe a little.\n\t\t\t\tsleep( $throttle_seconds );\n\n\t\t\t\t// Batch limits reached, or pause or cancel request.\n\t\t\t\tif ( $this->time_exceeded() || $this->memory_exceeded() || $this->is_paused() || $this->is_cancelled() ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Delete current batch if fully processed.\n\t\t\tif ( empty( $batch->data ) ) {\n\t\t\t\t$this->delete( $batch->key );\n\t\t\t}\n\t\t} while ( ! $this->time_exceeded() && ! $this->memory_exceeded() && ! $this->is_queue_empty() && ! $this->is_paused() && ! $this->is_cancelled() );\n\n\t\t$this->unlock_process();\n\n\t\t// Start next batch or complete process.\n\t\tif ( ! $this->is_queue_empty() ) {\n\t\t\t$this->dispatch();\n\t\t} else {\n\t\t\t$this->complete();\n\t\t}\n\n\t\treturn $this->maybe_wp_die();\n\t}\n\n\t/**\n\t * Memory exceeded?\n\t *\n\t * Ensures the batch process never exceeds 90%\n\t * of the maximum WordPress memory.\n\t *\n\t * @return bool\n\t */\n\tprotected function memory_exceeded() {\n\t\t$memory_limit   = $this->get_memory_limit() * 0.9; // 90% of max memory\n\t\t$current_memory = memory_get_usage( true );\n\t\t$return         = false;\n\n\t\tif ( $current_memory >= $memory_limit ) {\n\t\t\t$return = true;\n\t\t}\n\n\t\treturn apply_filters( $this->identifier . '_memory_exceeded', $return );\n\t}\n\n\t/**\n\t * Get memory limit in bytes.\n\t *\n\t * @return int\n\t */\n\tprotected function get_memory_limit() {\n\t\tif ( function_exists( 'ini_get' ) ) {\n\t\t\t$memory_limit = ini_get( 'memory_limit' );\n\t\t} else {\n\t\t\t// Sensible default.\n\t\t\t$memory_limit = '128M';\n\t\t}\n\n\t\tif ( ! $memory_limit || -1 === intval( $memory_limit ) ) {\n\t\t\t// Unlimited, set to 32GB.\n\t\t\t$memory_limit = '32000M';\n\t\t}\n\n\t\treturn wp_convert_hr_to_bytes( $memory_limit );\n\t}\n\n\t/**\n\t * Time limit exceeded?\n\t *\n\t * Ensures the batch never exceeds a sensible time limit.\n\t * A timeout limit of 30s is common on shared hosting.\n\t *\n\t * @return bool\n\t */\n\tprotected function time_exceeded() {\n\t\t$finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds\n\t\t$return = false;\n\n\t\tif ( time() >= $finish ) {\n\t\t\t$return = true;\n\t\t}\n\n\t\treturn apply_filters( $this->identifier . '_time_exceeded', $return );\n\t}\n\n\t/**\n\t * Complete processing.\n\t *\n\t * Override if applicable, but ensure that the below actions are\n\t * performed, or, call parent::complete().\n\t */\n\tprotected function complete() {\n\t\tdelete_site_option( $this->get_status_key() );\n\n\t\t// Remove the cron healthcheck job from the cron schedule.\n\t\t$this->clear_scheduled_event();\n\n\t\t$this->completed();\n\t}\n\n\t/**\n\t * Called when background process has completed.\n\t */\n\tprotected function completed() {\n\t\tdo_action( $this->identifier . '_completed' );\n\t}\n\n\t/**\n\t * Get the cron healthcheck interval in minutes.\n\t *\n\t * Default is 5 minutes, minimum is 1 minute.\n\t *\n\t * @return int\n\t */\n\tpublic function get_cron_interval() {\n\t\t$interval = 5;\n\n\t\tif ( property_exists( $this, 'cron_interval' ) ) {\n\t\t\t$interval = $this->cron_interval;\n\t\t}\n\n\t\t$interval = apply_filters( $this->cron_interval_identifier, $interval );\n\n\t\treturn is_int( $interval ) && 0 < $interval ? $interval : 5;\n\t}\n\n\t/**\n\t * Schedule the cron healthcheck job.\n\t *\n\t * @access public\n\t *\n\t * @param mixed $schedules Schedules.\n\t *\n\t * @return mixed\n\t */\n\tpublic function schedule_cron_healthcheck( $schedules ) {\n\t\t$interval = $this->get_cron_interval();\n\n\t\tif ( 1 === $interval ) {\n\t\t\t$display = __( 'Every Minute' );\n\t\t} else {\n\t\t\t$display = sprintf( __( 'Every %d Minutes' ), $interval );\n\t\t}\n\n\t\t// Adds an \"Every NNN Minute(s)\" schedule to the existing cron schedules.\n\t\t$schedules[ $this->cron_interval_identifier ] = array(\n\t\t\t'interval' => MINUTE_IN_SECONDS * $interval,\n\t\t\t'display'  => $display,\n\t\t);\n\n\t\treturn $schedules;\n\t}\n\n\t/**\n\t * Handle cron healthcheck event.\n\t *\n\t * Restart the background process if not already running\n\t * and data exists in the queue.\n\t */\n\tpublic function handle_cron_healthcheck() {\n\t\tif ( $this->is_processing() ) {\n\t\t\t// Background process already running.\n\t\t\texit;\n\t\t}\n\n\t\tif ( $this->is_queue_empty() ) {\n\t\t\t// No data to process.\n\t\t\t$this->clear_scheduled_event();\n\t\t\texit;\n\t\t}\n\n\t\t$this->dispatch();\n\t}\n\n\t/**\n\t * Schedule the cron healthcheck event.\n\t */\n\tprotected function schedule_event() {\n\t\tif ( ! wp_next_scheduled( $this->cron_hook_identifier ) ) {\n\t\t\twp_schedule_event( time() + ( $this->get_cron_interval() * MINUTE_IN_SECONDS ), $this->cron_interval_identifier, $this->cron_hook_identifier );\n\t\t}\n\t}\n\n\t/**\n\t * Clear scheduled cron healthcheck event.\n\t */\n\tprotected function clear_scheduled_event() {\n\t\t$timestamp = wp_next_scheduled( $this->cron_hook_identifier );\n\n\t\tif ( $timestamp ) {\n\t\t\twp_unschedule_event( $timestamp, $this->cron_hook_identifier );\n\t\t}\n\t}\n\n\t/**\n\t * Cancel the background process.\n\t *\n\t * Stop processing queue items, clear cron job and delete batch.\n\t *\n\t * @deprecated 1.1.0 Superseded.\n\t * @see        cancel()\n\t */\n\tpublic function cancel_process() {\n\t\t$this->cancel();\n\t}\n\n\t/**\n\t * Perform task with queued item.\n\t *\n\t * Override this method to perform any actions required on each\n\t * queue item. Return the modified item for further processing\n\t * in the next pass through. Or, return false to remove the\n\t * item from the queue.\n\t *\n\t * @param mixed $item Queue item to iterate over.\n\t *\n\t * @return mixed\n\t */\n\tabstract protected function task( $item );\n\n\t/**\n\t * Maybe unserialize data, but not if an object.\n\t *\n\t * @param mixed      $data            Data to be unserialized.\n\t * @param bool|array $allowed_classes Array of class UDX_names that can be unserialized.\n\t *\n\t * @return mixed\n\t */\n\tprotected static function maybe_unserialize( $data, $allowed_classes ) {\n\t\tif ( is_serialized( $data ) ) {\n\t\t\t$options = array();\n\t\t\tif ( is_bool( $allowed_classes ) || is_array( $allowed_classes ) ) {\n\t\t\t\t$options['allowed_classes'] = $allowed_classes;\n\t\t\t}\n\n\t\t\treturn @unserialize( $data, $options ); // @phpcs:ignore\n\t\t}\n\n\t\treturn $data;\n\t}\n}\n"
  },
  {
    "path": "readme.md",
    "content": "# WordPress Stateless Media Plugin\n\n## Description\n\nUpload and serve your WordPress media from Google Cloud Storage (GCS) with the WP-Stateless plugin. In as little as two minutes, you will be benefiting from serving your media from Google Cloud's distributed servers.\n\nNew to Google Cloud? Google is offering you a [$300 credit](https://console.cloud.google.com/freetrial?referralId=e1c28cf728ff49b38d4eb5add3f5bfc8) to get you started.\n\n### Benefits\n* Store and deliver media files on Google Cloud Storage instead of your server.\n* Google Cloud Storage is geo-redundant, meaning your media is delivered by the closest server - reducing latency and improving page speed.\n* Scale your WordPress website across multiple servers without the need for synchronizing media files.\n* Native integration between Google Cloud Storage and WordPress.\n* $300 free trial from Google Cloud. Nice!\n\n### Modes\n* Backup - Upload media files to Google Storage and serve local file URLs.\n* CDN - Copy media files to Google Storage and serve them directly from there.\n* Ephemeral - Store and serve media files with Google Cloud Storage only. Media files are not stored locally, but local storage is used temporarily for processing and is required for certain compatibilities.\n* Stateless - Store and serve media files with Google Cloud Storage only. Media files are not stored locally.\n\n### Features\n* Setup assistant makes getting started fast and easy.\n* No need to manually create service accounts or buckets - handled automatically.\n* Settings panel provides you with further GCS configuration and file URL customization.\n* Mask the default GCS URL with your own custom domain.\n* Automatically replace hardcoded media URLs with GCS equivalents in post editor and meta.\n* Batch image thumbnail regeneration.\n* Synchronization tools for uploading existing files and images.\n* All settings supported with wp-config constants and network setting overrides.\n* Multiple modes: Backup, CDN, Ephemeral, Stateless.\n* All files served in HTTPS mode.\n* Serverless platform compatible, including Google App Engine.\n* Multisite compatible.\n\n### Addons\n* [Elementor Website Builder Addon](https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/)\n* [Gravity Forms Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-addon/)\n* [Gravity Forms Signature Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-signature-addon/)\n* [WPForms Addon](https://wordpress.org/plugins/wp-stateless-wpforms-addon/)\n* [WooCommerce Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-addon/)\n* [Easy Digital Downloads Addon](https://wordpress.org/plugins/wp-stateless-easy-digital-downloads-addon/)\n* [LiteSpeed Cache Addon](https://wordpress.org/plugins/wp-stateless-litespeed-cache-addon/)\n* [Divi Theme Addon](https://wordpress.org/plugins/wp-stateless-divi-theme-addon/)\n* [SiteOrigin CSS Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-css-addon/)\n* [SiteOrigin Widgets Bundle Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-widgets-bundle-addon/)\n* [BuddyPress Addon](https://wordpress.org/plugin/wp-stateless-buddypress-addon/)\n* [BuddyBoss Platform Addon](https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/)\n* [Polylang Pro Addon](https://wordpress.org/plugins/wp-stateless-polylang-pro-addon/)\n* [Simple Local Avatars](https://wordpress.org/plugins/wp-stateless-simple-local-avatars-addon/)\n\n### Support, Feedback, & Contribute\nWe welcome community involvement via the [GitHub repository](https://github.com/udx/wp-stateless).\n\n### Custom Development\nLooking for a unique feature for your next project? [Hire us!](https://udx.io/)\n\n## Installation\n\n1. Search, install, and activate the *WP-Stateless* plugin via your WordPress dashboard.\n2. Begin WP-Stateless setup assistant at *Media > Stateless Setup* and click \"Get Started Now.\"\n3. Click \"Google Login\" and sign in with your Google account.\n4. Set a Google Cloud Project, Google Cloud Storage Bucket, and Google Cloud Billing Account and click \"Continue.\"\n5. Installation and setup are now complete. Visit *Media > Stateless Settings* for more options.\n\nFor a more detailed installation and setup walkthrough, please see the [manual setup instructions on Github](https://stateless.udx.io/setup/).\n\n## Frequently Asked Questions\n\n### What are the minimum server requirements for this plugin?\n\nBeyond the [official WordPress minimum requirements](https://codex.wordpress.org/Template:Server_requirements), WP-Stateless requires a minimum PHP version of 8.0 or higher and OpenSSL to be enabled.\n\n### What wp-config constants are supported?\n\nFor a complete list of supported wp-config constants, please consult the [GitHub documentation](https://stateless.udx.io/docs/constants/).\n\n### How do I manually generate the Service Account JSON?\n\nThe WP-Stateless setup assistant will create the Service Account JSON automatically for you, but you can follow these steps if you choose to create it manually.\n\n1. Visit Google Cloud Console, and go to *IAM & Admin > Service accounts*.\n2. Click *Create Service Account* and name it *wp-stateless*.\n3. Set the role to *Storage > Storage Admin*.\n4. Check *Furnish a new private key* and select *JSON* as the key type.\n5. Open the JSON file and copy the contents into the *Service Account JSON* textarea within the WP-Stateless settings panel.\n\n### Where can I submit feature requests or bug reports?\n\nWe encourage community feedback and discussion through issues on the [GitHub repository](https://github.com/udx/wp-stateless/issues).\n\n### Can I test new features before they are released?\n\nTo ensure new releases cause as little disruption as possible, we rely on a number of early adopters who assist us by testing out new features before they are released. [Please contact us](https://udx.io/) if you are interested in becoming an early adopter.\n\n### Who maintains this plugin?\n\n[UDX](https://udx.io/) maintains this plugin by continuing development through its own staff, reviewing pull requests, testing, and steering the overall release schedule. UDX is located in Durham, North Carolina, and provides WordPress engineering and hosting services to clients throughout the United States.\n"
  },
  {
    "path": "readme.txt",
    "content": "=== WP-Stateless - Google Cloud Storage ===\nContributors: usability_dynamics, andypotanin, ideric, planvova, obolgun\nDonate link: https://udx.io\nTags: google cloud, google cloud storage, cdn, uploads, backup\nLicense: GPLv2 or later\nRequires PHP: 8.1\nRequires at least: 5.0\nTested up to: 6.9\nStable tag: 4.4.1\n\nUpload and serve your WordPress media files from Google Cloud Storage.\n\n== Description ==\n\nUpload and serve your WordPress media from Google Cloud Storage (GCS) with the WP-Stateless plugin. In as little as two minutes, you will be benefitting from serving your media from Google Cloud's distributed servers.\n\nNew to Google Cloud? Google is offering you a [$300 credit](https://console.cloud.google.com/freetrial?referralId=e1c28cf728ff49b38d4eb5add3f5bfc8) to get you started.\n\n= Benefits =\n* Store and deliver media files on Google Cloud Storage instead of your server.\n* Google Cloud Storage is geo-redundant, meaning your media is delivered by the closest server - reducing latency and improving page speed.\n* Scale your WordPress website across multiple servers without the need of synchronizing media files.\n* Native integration between Google Cloud Storage and WordPress.\n* $300 free trial from Google Cloud. Nice!\n\n= Modes =\n* Backup - Upload media files to Google Storage and serve local file urls.\n* CDN - Copy media files to Google Storage and serve them directly from there.\n* Ephemeral - Store and serve media files with Google Cloud Storage only. Media files are not stored locally, but local storage is used temporarily for processing and is required for certain compatibilities.\n* Stateless - Store and serve media files with Google Cloud Storage only. Media files are not stored locally.\n\n= Features =\n* Setup assistant makes getting started fast and easy.\n* No need to manually create service accounts or buckets - handled automatically.\n* Settings panel provides you with further GCS configuration and file url customization.\n* Mask the default GCS URL with your own custom domain.\n* Automatically replace hardcoded media URLs with GCS equivalents in post editor and meta.\n* Batch image thumbnail regeneration.\n* Synchronization tools for uploading existing files and images.\n* All settings supported with wp-config constants and network setting overrides.\n* Multiple modes: Backup, CDN, Ephemeral, Stateless.\n* All files served in HTTPS mode.\n* Serverless platform compatible, including Google App Engine.\n* Multisite compatible.\n\n= Addons =\n* [Elementor Website Builder Addon](https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/)\n* [Gravity Forms Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-addon/)\n* [Gravity Forms Signature Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-signature-addon/)\n* [WPForms Addon](https://wordpress.org/plugins/wp-stateless-wpforms-addon/)\n* [WooCommerce Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-addon/)\n* [Easy Digital Downloads Addon](https://wordpress.org/plugins/wp-stateless-easy-digital-downloads-addon/)\n* [LiteSpeed Cache Addon](https://wordpress.org/plugins/wp-stateless-litespeed-cache-addon/)\n* [Divi Theme Addon](https://wordpress.org/plugins/wp-stateless-divi-theme-addon/)\n* [SiteOrigin CSS Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-css-addon/)\n* [SiteOrigin Widgets Bundle Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-widgets-bundle-addon/)\n* [BuddyPress Addon](https://wordpress.org/plugin/wp-stateless-buddypress-addon/)\n* [BuddyBoss Platform Addon](https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/)\n* [Polylang Pro Addon](https://wordpress.org/plugins/wp-stateless-polylang-pro-addon/)\n* [Simple Local Avatars](https://wordpress.org/plugins/wp-stateless-simple-local-avatars-addon/)\n\n= Support, Feedback, & Contribute =\nWe welcome community involvement via the [GitHub repository](https://github.com/udx/wp-stateless).\n\n= Custom Development =\nLooking for a unique feature for your next project? [Hire us!](https://udx.io/)\n\n== Installation ==\n\n1. Search, install, and activate the *WP-Stateless* plugin via your WordPress dashboard.\n2. Begin WP-Stateless setup assistant at *Media > Stateless Setup* and click \"Get Started Now.\"\n3. Click \"Google Login\" and sign-in with your Google account.\n4. Set a Google Cloud Project, Google Cloud Storage Bucket, and Google Cloud Billing Account and click \"Continue.\"\n5. Installation and setup is now complete. Visit *Media > Stateless Settings* for more options.\nFor a more detailed installation and setup walkthrough, please see the [manual setup instructions on Github](https://stateless.udx.io/setup/).\n\n== Screenshots ==\n\n1. Settings Panel: Supports network setting and wp-config constant overrides.\n2. Setup Assistant\n3. Setup Assistant: Google Login\n4. Setup Assistant: Approve Permissions\n5. Setup Assistant: Project & Bucket\n6. Setup Assistant: Complete\n7. Edit Media: Image stored on Google Cloud Storage.\n\n== Frequently Asked Questions ==\n\n= What are the minimum server requirements for this plugin? =\n\nBeyond the [official WordPress minimum requirements](https://wordpress.org/about/requirements/), WP-Stateless requires a minimum PHP version of 8.0 or higher and OpenSSL to be enabled.\n\n= What wp-config constants are supported? =\n\nFor a complete list of supported wp-config constants, please consult the [GitHub documentation](https://stateless.udx.io/docs/constants/).\n\n= How do I manually generate the Service Account JSON? =\n\nThe WP-Stateless setup assistant will create the Service Account JSON automatically for you, but you can follow these steps if you choose to create it manually.\n\n1. Visit Google Cloud Console, and go to *IAM & Admin > Service accounts*.\n2. Click *Create Service Account* and name it *wp-stateless*.\n3. Set the role to *Storage > Storage Admin*.\n4. Check *Furnish a new private key* and select *JSON* as the key type.\n5. Open the JSON file and copy the contents into the *Service Account JSON* textarea within the WP-Stateless settings panel.\n\n= Where can I submit feature requests or bug reports? =\n\nWe encourage community feedback and discussion through issues on the [GitHub repository](https://github.com/udx/wp-stateless/issues).\n\n= Can I test new features before they are released? =\n\nTo ensure new releases cause as little disruption as possible, we rely on a number of early adopters who assist us by testing out new features before they are released. [Please contact us](https://udx.io/) if you are interested in becoming an early adopter.\n\n= Who maintains this plugin? =\n\n[UDX](https://udx.io/) maintains this plugin by continuing development through it's own staff, reviewing pull requests, testing, and steering the overall release schedule. UDX is located in Durham, North Carolina and provides WordPress engineering and hosting services to clients throughout the United States.\n\n\n== Upgrade Notice ==\n= 4.1.0 =\nYou will be prompted to run data optimization after upgrade. Please make a backup copy of your database.\n\n= 4.0.0 =\nYou will be prompted to run data optimization after upgrade. Please make a backup copy of your database.\nIf you using BuddyBoss Platform you will be proposed to install [WP-Stateless – BuddyBoss Platform Addon](https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/), which replaces BuddyBoss Compatibility.\nIf you using Elementor Website Builder you will be proposed to install [WP-Stateless – Elementor Website Builder Addon](https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/), which replaces Elementor Compatibility.\n\n= 3.2.3 =\nBefore upgrading to WP-Stateless 3.2.3, please, make sure you use PHP 8.0 or above.\n\n= 3.2.0 =\nBefore upgrading to WP-Stateless 3.2.0, please, make sure you use PHP 7.2 or above.\n\n= 3.0 =\nBefore upgrading to WP-Stateless 3.0, please, make sure you tested it on your development environment.\n\n== Changelog ==\n= 4.4.1 - 2026-01-16 =\n* COMPATIBILITY - WooCommerce Extra Product Options Compatibility replaced with [WP-Stateless – WooCommerce Extra Product Options Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-extra-product-options-addon/).\n* FIX - resolve critical errors with `firebase/php-jwt` library if `AUTH_SALT` WordPress constant is not set or too short.\n\n= 4.4.0 - 2026-01-10 =\n* NEW - plugin requires PHP 8.1+.\n* ENHANCEMENT - updated `firebase/php-jwt` library from  6.11.1 to 7.0.2.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.18.3 to 2.19.0.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.15 to 5.10.19.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.18 to 1.2.0.\n* FIX - `udx/lib-wp-bootstrap` package correctly loads text domain to prevent PHP notices.\n\n= 4.3.0 =\n* ENHANCEMENT - update dependencies for Google APIs Client Library.\n* COMPATIBILITY - Simple Local Avatars Compatibility replaced with [WP-Stateless - Simple Local Avatars Addon](https://wordpress.org/plugins/wp-stateless-simple-local-avatars-addon/).\n\n= 4.2.1 =\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.11 to 5.10.15.\n* FIX - correctly loads text domain to prevent PHP notices.\n* FIX - `udx/lib-ud-api-client` package correctly loads text domain to prevent PHP notices.\n\n= 4.2.0 =\n* ENHANCEMENT - Updated Client library for Google APIs from 2.18.2 to 2.18.3.\n* ENHANCEMENT - updated `firebase/php-jwt` library from  6.10.2 to 6.11.1.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from 5.10.1 to 5.10.11.\n* DEPRECATED - Setup Assistant removed.\n\n= 4.1.3 =\n* COMPATIBILITY - PolyLang Compatibility replaced with [WP-Stateless – Polylang Pro Addon](https://wordpress.org/plugins/wp-stateless-polylang-pro-addon/).\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.10.1 to 5.10.7.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.18 to 1.2.0.\n* ENHANCEMENT - updated `firebase/php-jwt` library from from 6.10.1 to 6.10.2.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.10.1 to 5.10.2.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.17.0 to 2.18.2.\n* FIX - apply `Cache Control` setting to all files (previously applied only to images).\n\n= 4.1.2 =\n* ENHANCEMENT - added `REST API Endpoint` setting, which useful when WordPress dashboard and frontend website utilize different domain names.\n* ENHANCEMENT - extended `Status Info` with the information to help diagnose REST API or AJAX issues.\n* COMPATIBILITY - SiteOrigin Widgets Bundle Compatibility replaced with [WP-Stateless - SiteOrigin Widgets Bundle Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-widgets-bundle-addon/).\n* COMPATIBILITY - WPForms Compatibility replaced with [WP-Stateless - WPForms Addon](https://wordpress.org/plugins/wp-stateless-wpforms-addon/).\n* COMPATIBILITY - Easy Digital Downloads Compatibility replaced with [WP-Stateless - Easy Digital Downloads Addon](https://wordpress.org/plugins/wp-stateless-easy-digital-downloads-addon/).\n* COMPATIBILITY - LiteSpeed Cache Compatibility replaced with [WP-Stateless - LiteSpeed Cache Addon](https://wordpress.org/plugins/wp-stateless-litespeed-cache-addon/).\n* COMPATIBILITY - BuddyPress Compatibility replaced with [WP-Stateless - BuddyPress Addon](https://wordpress.org/plugin/wp-stateless-buddypress-addon/).\n* FIX: remove PHP warning on `Status` settings tab.\n* FIX: database updates to resolve conflicts with Polylang Pro compatibility.\n\n= 4.1.1 =\n* FIX - cache issues during Data Optimization.\n\n= 4.1.0 =\n* NEW - move compatibilities files from `wp_sm_sync` to `wp_stateless_files` table with extended information.\n* COMPATIBILITY - WooCommerce Compatibility replaced with [WP-Stateless – WooCommerce Addon](https://wordpress.org/plugins/wp-stateless-woocommerce-addon/).\n* COMPATIBILITY - Gravity Forms Compatibility replaced with [WP-Stateless – Gravity Forms Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-addon/).\n* COMPATIBILITY - Gravity Forms Signature Compatibility replaced with [WP-Stateless – Gravity Forms Signature Addon](https://wordpress.org/plugins/wp-stateless-gravity-forms-signature-addon/).\n* COMPATIBILITY - Divi Theme Compatibility replaced with [WP-Stateless – Divi Theme Addon](https://wordpress.org/plugins/wp-stateless-divi-theme-addon/).\n* COMPATIBILITY - SiteOrigin CSS Compatibility replaced with [WP-Stateless – SiteOrigin CSS Addon](https://wordpress.org/plugins/wp-stateless-siteorigin-css-addon/).\n* ENHANCEMENT - CLI command `wp stateless migrate` supports `auto` parameter to run all required Data Optimizations automatically.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.15.1 to 2.17.0.\n* ENHANCEMENT - updated `firebase/php-jwt` library from from 6.9.0 to 6.10.1.\n* ENHANCEMENT - updated `wpmetabox/meta-box` library from from 5.8.2 to 5.10.1.\n* ENHANCEMENT - updated `deliciousbrains/wp-background-processing` library from from 1.1.1 to 1.3.1.\n* ENHANCEMENT - updated `composer/installers` library from from 1.12.1 to 2.3.0.\n* ENHANCEMENT - updated `Meta Box Tabs` library from 1.1.17 to 1.1.18.\n* ENHANCEMENT - action `sm:sync::addFile` format changed, now it passes media object instead of file name.\n* ENHANCEMENT - for installed Addons replace Download action with Activate.\n* ENHANCEMENT - count compatibility files from the DB instead of listing actual files to increase performance.\n* FIX - CLI command `wp stateless migrate` supports `--yes` parameter to skip confirmation.\n* FIX - CLI command `wp stateless migrate` correctly works with `--progress` parameter in multisite.\n* FIX - fixed synchronization for Compatibility files in Stateless Mode.\n* FIX - CLI command `wp stateless upgrade` fixed when running with `--b` switch.\n* FIX - fixed SiteOrigin Widgets Bundle Compatibility in `Stateless` mode.\n* FIX - fixed WPForms Compatibility in `Stateless` mode.\n* FIX - limit index size for compatibility with different DB engines [757](https://github.com/udx/wp-stateless/issues/757).\n* FIX - correctly disable `Cache-Busting` setting for Ephemeral Mode [758](https://github.com/udx/wp-stateless/issues/758), credits [@Jessedev1](https://github.com/Jessedev1).\n* FIX - Data Optimization UI adjustments.\n\n= 4.0.4 =\n* ENHANCEMENT - display success message after copying Status Info.\n* FIX - `Settings` page does not open or slow when there is big amount of attachments.\n* FIX - in multisite network, removing custom tables properly when deleting site.\n* FIX - skip setting ACL in Stateless mode and during Sync for the buckets with Uniform access, support WP_STATELESS_SKIP_ACL_SET constant [#712](https://github.com/udx/wp-stateless/issues/712).\n\n= 4.0.3 =\n* NEW - added `Info` section to the `Status` tab on the Settings page, which contains the system info and the ability to copy report to clipboard.  \n* ENHANCEMENT - added `Documentation` link on the Plugins page.\n* ENHANCEMENT - added `Addons` link on the Plugins page.\n* ENHANCEMENT - added `Documentation` link on the Settings page.\n* FIX - fixed `Settings` shortcut on the Plugins page.\n* FIX - in multisite network, do not show Data Optimization on the Network Admin Page.\n* FIX - properly set `Content Disposition` fields for media objects.\n* FIX - properly use `Cache Control` setting for media objects.\n* FIX - fixed `Creation of dynamic property` PHP deprecation notice.\n* FIX - fixed `Cannot use ::class with dynamic class name` PHP warning.\n* FIX - avoid PHP warning when unable to get file path in `Stateless` mode [728](https://github.com/udx/wp-stateless/issues/728).\n* FIX - fixed links to the constants documentation.\n\n= 4.0.2 =\n* FIX - in multisite network, deleting site can potentially remove WP-Stateless tables from another site.\n* COMPATIBILITY - Gravity Forms Compatibility updated for the newest Gravity Forms version.\n\n= 4.0.1 =\n* FIX - improvements to Data Optimization process.\n* FIX - Data Optimization fixed for multisite environment.\n\n= 4.0.0 =\n* NEW - use custom database tables to store GCS file data. This increases plugin performance and will be used for future improvements.  \n* NEW - added filter `wp_stateless_get_file`, retrieves the GCS file data, should be used instead of getting `sm_cloud` postmeta directly. \n* NEW - added filter `wp_stateless_get_file_sizes`, retrieves the GCS file data for image sizes, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_file_meta`, retrieves all GCS file meta data, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_file_meta_value`, retrieves the GCS file meta data by meta_key, should be used instead of getting `sm_cloud` postmeta directly.\n* NEW - added filter `wp_stateless_get_setting_...` which allows to override any WP-Stateless setting. \n* NEW - added setting \"Send Status Emails\" allowing to change email for WP-Stateless notifications.\n* NEW - added setting \"Use Post Meta\" allowing to switch back to using `postmeta` instead of custom DB tables. Can be used in case of issues after upgrading to 4.0.0.\n* NEW - added new Settings tab `Addons`, which contains the list of WP-Stateless Addons, which replace Compatibilities.\n* NEW - added new Settings tab `Status`, which contains status and health information related to Google Cloud Storage and WP-Stateless.\n* NEW - CLI command `wp stateless migrate` to list and operate data optimizations.\n* NEW - configuration constant [`WP_STATELESS_POSTMETA`](https://stateless.udx.io/docs/constants/#wp_stateless_postmeta) allows to read the GCS file data from postmeta instead of the new custom database tables.\n* NEW - configuration constant [`WP_STATELESS_BATCH_HEALTHCHECK_INTERVAL`](https://stateless.udx.io/docs/constants/#wp_stateless_batch_healthcheck_interval) defines an interval in minutes for periodical health checks of a batch background process (like data optimization).\n* COMPATIBILITY - BuddyBoss Compatibility replaced with [WP-Stateless – BuddyBoss Platform Addon](https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/).\n* COMPATIBILITY - Elementor Compatibility replaced with [WP-Stateless – Elementor Website Builder Addon](https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/).\n* COMPATIBILITY - Gravity Form Compatibility does not support older version of Gravity Forms (< 2.3).\n* ENHANCEMENT - Allow dismissing notices in Admin Panel only for logged in users.\n* ENHANCEMENT - Updated `wp-background-processing` library from from 1.0.2 to 1.1.1.\n* ENHANCEMENT - Updated `phpseclib` 3.0.34 to 3.0.37.\n* FIX - proper use of infinite timeout in `set_time_limit` function to avoid issues with PHP 8.1 and above [#704](https://github.com/udx/wp-stateless/issues/704).\n\n= 3.4.1 =\n* FIX - improve security while processing AJAX requests in Admin Panel\n\n= 3.4.0 =\n* ENHANCEMENT - removed `udx/lib-settings` package dependency for security reasons. \n* ENHANCEMENT - removed `udx/lib-utility` package dependency for security reasons.\n* ENHANCEMENT - refactored `Settings` admin page to remove Angular dependency.\n* ENHANCEMENT - including Software Bill of Materials (SBOM) to GitHub release.\n* FIX - updated package dependencies for Google Client Library for security reasons.\n* FIX - replaced `utf8_encode` with `mb_convert_encoding` to support PHP 8.2 and above [#678](https://github.com/udx/wp-stateless/issues/678).\n* FIX - Fatal Error in `Stateless` mode if GCP access credentials are wrong [#693](https://github.com/udx/wp-stateless/issues/693).\n* COMPATIBILITY - preventing PHP warnings while working with WooCommerce version 8.4.0 and above [696](https://github.com/udx/wp-stateless/issues/696).\n* COMPATIBILITY - avoiding conflicts between builtin compatibilities and WP-Stateless Addon plugins.\n\n= 3.3.0 =\n* NEW - Added new filter `wp_stateless_attachment_url`. Allows to customize attachment URL after WP-Stateless generates it based on it's internal conditions.\n* FIX - Stateless mode Incompatible with Media Uploader in Media Library Grid mode [#675](https://github.com/udx/wp-stateless/issues/675).\n* FIX - Prevent duplicating messages in Admin Panel.\n* COMPATIBILITY - Dynamic Image Support is now part of the core.\n* COMPATIBILITY - Google App Engine is now part of the core. Automatically enables **Stateless** mode when Google App Engine detected. Can be disabled using `WP_STATELESS_COMPATIBILITY_GAE` constant.\n* COMPATIBILITY - Removed compatibility with \"Advanced Custom Fields: Image Crop Add-on\", because plugin is deprecated.\n* COMPATIBILITY - Removed compatibility with \"VidoRev\" plugin.\n* COMPATIBILITY - Removed compatibility with \"WP Retina 2x\" plugin.\n* ENHANCEMENT - Updated Client library for Google APIs from 2.15.0 to 2.15.1.\n* ENHANCEMENT - Updated Meta Box library from 5.6.3 to 5.8.2.\n* ENHANCEMENT - Updated Meta Box Tabs to version 1.1.17.\n* ENHANCEMENT - Updated PHP JWT library from 6.6.0 to 6.9.0.\n\n= 3.2.5 =\n* FIX - Folder setting does not allow custom structure [#608](https://github.com/udx/wp-stateless/issues/608).\n* FIX - Stateless mode Incompatible with Inline Uploader [#675](https://github.com/udx/wp-stateless/issues/675).\n* FIX - html tags incorrectly applied in notice [#680](https://github.com/udx/wp-stateless/issues/680).\n* ENHANCEMENT - Add WP_STATELESS_SKIP_ACL_SET for skip ACL set for GCS [#625](https://github.com/udx/wp-stateless/issues/625).\n* COMPATIBILITY - Add support for The Events Calendar [#599](https://github.com/udx/wp-stateless/issues/599).\n\n= 3.2.4 =\n* FIX - Website unresponsive after Upgrade [#669](https://github.com/udx/wp-stateless/issues/669).\n\n= 3.2.3 =\n* **WP-Stateless 3.2.3 requires PHP 8.0+. Recently, Google updated the official Google API PHP Client Library used by WP-Stateless to resolve security issues. This updated library requires PHP 8.0.**\n* ENHANCEMENT - Updated Client library for Google APIs.\n* ENHANCEMENT - Updated Monolog library to version 3.\n* ENHANCEMENT - Updated JWT library.\n* FIX - Fixed vulnerability issues.\n* FIX - Fixed an errors and warnings on PHP 8.1.\n* FIX - Fixed an error that occured when WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE is set.\n\n= 3.2.2 =\n* FIX -  Folder setting can't be saved from the settings page [#639](https://github.com/udx/wp-stateless/issues/639).\n\n= 3.2.1 =\n* FIX - Updated requirments.\n* FIX - WP-Stateless 3.2.0 doesn’t upload docs, only images [#638](https://github.com/udx/wp-stateless/issues/638).\n\n= 3.2.0 =\n* **Before upgrading to WP-Stateless 3.2.0, please, make sure you tested it on your development environment. It may have breaking changes.**\n* ENHANCEMENT - Upgraded `wpmetabox` library.\n* ENHANCEMENT - Updated Client library for Google APIs.\n* ENHANCEMENT - Updated Guzzle library to version 7.\n* ENHANCEMENT - Updated JWT library.\n* ENHANCEMENT - Updated `license` functionality, removed `update checker`.\n* FIX - Fixed vulnerability issues.\n* FIX - Fixed erros and warnings on PHP 8.\n* FIX - problem after the upgrade [#628](https://github.com/udx/wp-stateless/issues/628).\n* FIX - image_downsize() PHP8 Required parameter $id follows optional parameter $false [#619](https://github.com/udx/wp-stateless/issues/619).\n\n= 3.1.1 =\n* ENHANCEMENT - Notification for the administrator about finished synchronization. GitHub issue [#576](https://github.com/udx/wp-stateless/issues/576).\n* FIX - Fixed an issue with PDF thumbnails. GitHub issue [#577](https://github.com/udx/wp-stateless/issues/577).\n* FIX - Fixed an issue with synchronization in `Stateless` mode. GitHub issue [#575](https://github.com/udx/wp-stateless/issues/575).\n* COMPATIBILITY - Changed the way compatibility files are stored on Multisite. GitHub issue [#588](https://github.com/udx/wp-stateless/issues/588).\n\n= 3.1.0 =\n* NEW - Completely rewritten the synchronization tool. GitHub issue [#523](https://github.com/udx/wp-stateless/issues/523).\n* NEW - New configuration constant `WP_STATELESS_SYNC_MAX_BATCH_SIZE`. Sets the maximum size of a background sync batch of items to be saved in a single row in the database. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_max_batch_size).\n* NEW - New configuration constant `WP_STATELESS_SYNC_LOG`. Sets a path to a log file where to output logging information during the background sync. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_log).\n* NEW - New configuration constant `WP_STATELESS_SYNC_HEALTHCHECK_INTERVAL`. Defines an interval in minutes for a cron task that periodically checks the health of a particular background sync process. [More details](https://stateless.udx.io/docs/constants/#wp_stateless_sync_healthcheck_interval).\n* FIX - Fixed an issue when original files were not deleted from the server in the Ephemeral mode. GitHub issue [#484](https://github.com/udx/wp-stateless/issues/484).\n* FIX - Fixed an incorrect behavior of image `srcset` attribute in the Backup mode. GitHub issue [#558](https://github.com/udx/wp-stateless/issues/558).\n* COMPATIBILITY - Litespeed Cache - Fixed an incorrect upload folder determination. GitHub issue [#527](https://github.com/udx/wp-stateless/issues/527).\n\n= 3.0.4 =\n* FIX - Fixed inability to use dashes in the upload folder name. GitHub issue [#565](https://github.com/udx/wp-stateless/issues/565).\n* COMPATIBILITY - Elementor - Fixed wrong upload directory. GitHub issue [#560](https://github.com/udx/wp-stateless/issues/560).\n\n= 3.0.3 =\n* FIX - Fixed an incorrect file URL in Stateless mode on Edit Media screen. GitHub issue [#544](https://github.com/udx/wp-stateless/issues/544).\n\n= 3.0.2 =\n* FIX - Refactored the way files are being uploaded to GCS when `WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE` constant is defined. GitHub issue [#553](https://github.com/udx/wp-stateless/issues/553).\n* FIX - Fixed the process of upgrading to 3.0 for multisite installations. GitHub issue [#549](https://github.com/udx/wp-stateless/issues/549).\n\n= 3.0.1 =\n* FIX - Fatal Error in Stateless mode. GitHub issue [#546](https://github.com/udx/wp-stateless/issues/546).\n\n= 3.0 =\n* **Before upgrading to WP-Stateless 3.0, please, make sure you tested it on your development environment. It may have breaking changes.**\n* NEW - Setup assistant rewrite. GitHub issue [#477](https://github.com/udx/wp-stateless/issues/477).\n* NEW - Recreate attachment metabox panel using metabox.io. GitHub issue [#470](https://github.com/udx/wp-stateless/issues/470).\n* NEW - Updated the `Stateless` mode to not use local storage at all. Current `Stateless` mode setting mapped to new `Ephemeral` mode. GitHub issue [#482](https://github.com/udx/wp-stateless/issues/482).\n* NEW - Files are now uploaded to GCS in chunks and chunk size will be determined based on free memory available. GitHub issue [#478](https://github.com/udx/wp-stateless/issues/478).\n* NEW - File upload chunk size can be controlled with `WP_STATELESS_MEDIA_UPLOAD_CHUNK_SIZE` constant.  GitHub issue [#478](https://github.com/udx/wp-stateless/issues/478).\n* FIX - Changed the default value for the Cache-Busting setting. GitHub issue [#361](https://github.com/udx/wp-stateless/issues/361).\n* FIX - Fixed network override of Cache-Busting. GitHub issue [#468](https://github.com/udx/wp-stateless/issues/468).\n* FIX - Fixed \"Passing glue string after array is deprecated.\". GitHub issue [#444](https://github.com/udx/wp-stateless/issues/444).\n* FIX - Fixed Compatibility default value in multisite. GitHub issue [#464](https://github.com/udx/wp-stateless/issues/464).\n* FIX - Fixed multisite wrong GCS path. GitHub issue [#407](https://github.com/udx/wp-stateless/issues/407).\n* FIX - Don't check for Google Cloud Storage connectivity in stateless mode unless uploading. GitHub issue [#442](https://github.com/udx/wp-stateless/issues/442).\n* COMPATIBILITY - Google App Engine - Added new compatibility support for Google App Engine. [#486](https://github.com/udx/wp-stateless/issues/486)\n* COMPATIBILITY - Elementor - Fixed wrong MIME type for CSS files. GitHub issue [#395](https://github.com/udx/wp-stateless/issues/395).\n* COMPATIBILITY - Polylang - Fixed missing metadata issue. GitHub issue [#378](https://github.com/udx/wp-stateless/issues/378).\n* COMPATIBILITY - EWWW - Fixed mime type for WEBP images. GitHub issue [#371](https://github.com/udx/wp-stateless/issues/371).\n* COMPATIBILITY - Simple Local Avatars - Added new compatibility support for Simple Local Avatars. GitHub issue [#297](https://github.com/udx/wp-stateless/issues/297).\n* COMPATIBILITY - BuddyPress - Fixed BuddyPress compatibility. GitHub issue [#275](https://github.com/udx/wp-stateless/issues/275).\n* COMPATIBILITY - Divi - Fixed Divi cache issue. GitHub issue [#430](https://github.com/udx/wp-stateless/issues/430).\n* COMPATIBILITY - Gravity Forms - add compatibility for Gravity Forms Signature Add-On. [#501](https://github.com/udx/wp-stateless/issues/501).\n* COMPATIBILITY - Litespeed - Fixed fatal error and warnings. [#491](https://github.com/udx/wp-stateless/issues/491).\n* COMPATIBILITY - Imagify - Added support for webp. [#403](https://github.com/udx/wp-stateless/issues/403).\n* ENHANCEMENT - Update Client library for Google APIs. [#446](https://github.com/udx/wp-stateless/issues/446).\n* ENHANCEMENT - Wildcards for bucket folder settings. GitHub issue [#149](https://github.com/udx/wp-stateless/issues/149).\n* ENHANCEMENT - Better CLI integration. GitHub issue [#447](https://github.com/udx/wp-stateless/issues/447), [#450](https://github.com/udx/wp-stateless/issues/450) and [#451](https://github.com/udx/wp-stateless/issues/451).\n* ENHANCEMENT - Sync media according to new Bucket Folder settings. GitHub issue [#449](https://github.com/udx/wp-stateless/issues/449).\n* ENHANCEMENT - Moved Bucket Folder setting in the File URL section. GitHub issue [#463](https://github.com/udx/wp-stateless/issues/463).\n* ENHANCEMENT - Hide Regenerate and Sync with GCS when the mode is Disabled. GitHub issue [#440](https://github.com/udx/wp-stateless/issues/440).\n* ENHANCEMENT - New endpoint for the Google Cloud Storage JSON API. GitHub issue [#384](https://github.com/udx/wp-stateless/issues/384).\n* ENHANCEMENT - Renamed current `Stateless` mode to `Ephemeral`. GitHub issue [#481](https://github.com/udx/wp-stateless/issues/481).\n\n= 2.3.2 =\n* FIX - Fixed video file doesn't get deleted from the server in `Stateless` mode. GitHub issue [#418](https://github.com/udx/wp-stateless/issues/418).\n* FIX - Fixed file size doesn't show under attachment details in `Stateless` mode. GitHub issue [#413](https://github.com/udx/wp-stateless/issues/413).\n* FIX - Fixed Cache-Busting feature works even if the Mode is `Disabled`. GitHub issue [#405](https://github.com/udx/wp-stateless/issues/405).\n* COMPATIBILITY - Fixed Gravity Form Post Image didn't include `Bucket Folder`. GitHub issue [#421](https://github.com/udx/wp-stateless/issues/421).\n* COMPATIBILITY - Fixed Divi Builder Export. GitHub issue [#420](https://github.com/udx/wp-stateless/issues/420).\n* COMPATIBILITY - Fixed BuddyBoss pages breaking after updating to 2.3.0. GitHub issue [#417](https://github.com/udx/wp-stateless/issues/417).\n\n= 2.3.1 =\n* Fix - Fixed fatal error, undefined function `is_wp_version_compatible`. GitHub issue [#414](https://github.com/udx/wp-stateless/issues/414).\n\n= 2.3.0 =\n* FIX - Fixed problem with WordPress 5.3. GitHub issue [#406](https://github.com/udx/wp-stateless/issues/406).\n* FIX - Fixed problem with the Cache Busting feature. GitHub issue [#377](https://github.com/udx/wp-stateless/issues/377).\n* COMPATIBILITY - Added compatibility support for WP Retina 2x pro. GitHub issue [#380](https://github.com/udx/wp-stateless/issues/380).\n* COMPATIBILITY - Enhanced compatibility support for LiteSpeed Cache. GitHub issue [#365](https://github.com/udx/wp-stateless/issues/365).\n* COMPATIBILITY - Enhanced compatibility support for ShortPixel Image Optimizer. GitHub issue [#364](https://github.com/udx/wp-stateless/issues/364), [#398](https://github.com/udx/wp-stateless/issues/398).\n* COMPATIBILITY - Fixed Gravity Form export. GitHub issue [#408](https://github.com/udx/wp-stateless/issues/408).\n* ENHANCEMENT - Improved upon add_media function for better compatibility support. GitHub issue [#382](https://github.com/udx/wp-stateless/issues/382).\n\n= 2.2.7 =\n* FIX - WP-Smush compatibility enhanced. GitHub Issue [#366](https://github.com/udx/wp-stateless/issues/366).\n* FIX - Fixed multisite installation support. GitHub Issue [#370](https://github.com/udx/wp-stateless/issues/370).\n* FIX - Fixed settings UI problems related to Cache-Busting option. GitHub Issue [#373](https://github.com/udx/wp-stateless/issues/373).\n* FIX - Other minor fixes.\n\n= 2.2.6 =\n* FIX - Multisite Network Settings page fixed. GitHub Issue [#369](https://github.com/udx/wp-stateless/issues/369).\n* FIX - Fixed incorrect Compatibilities behavior when Bucket Folder is set. GitHub Issue [#368](https://github.com/udx/wp-stateless/issues/368).\n* FIX - Other minor fixes.\n\n= 2.2.5 =\n* NEW - Added ability to start sync process from specific Attachment ID. GitHub Issue [#360](https://github.com/udx/wp-stateless/issues/360).\n* COMPATIBILITY - Added compatibility support for LiteSpeed Cache plugin. Especially to support optimized .webp images. GitHub Issue [#357](https://github.com/udx/wp-stateless/issues/357).\n* FIX - Other minor fixes.\n\n= Earlier versions =\nPlease refer to the separate changelog.txt file.\n"
  },
  {
    "path": "static/data/addons.php",
    "content": "<?php\n\n/**\n * Returns the list of addons plugins.\n * \n * Sample structure:\n *  'buddypress' => [ // ID of the addon is a slug for Addon page on https://stateless.udx.io/addons/\n *    'title'         => 'BuddyPress',\n *    'plugin_files'  => ['buddypress/bp-loader.php'], // if this is a plugin Addon\n *    'theme_name'    => 'Divi', // if this is a theme Addon\n *    'addon_file'    => 'wp-stateless-buddypress-addon/wp-stateless-buddypress-addon.php', // Addon plugin main file (to check it's presence and activation)\n *    'icon'          => 'https://ps.w.org/wp-stateless/assets/icon.svg', // icon URL\n *    'repo'          => 'udx/wp-stateless-buddyboss-addon', // (optional) link to GitHub\n *    'wp'            => 'https://wordpress.org/plugins/wp-stateless-buddyboss-addon/', // (optional) link to WordPress.org plugin page\n *    'hubspot_id'    => '123456789', // (optional) HubSpot ID for Download button\n *    'hubspot_link'  => 'https://cta-service-cms2.hubspot.com/web-interactives/...', // (optional) HubSpot link for Download button\n *  ],\n *\n * ID of the addon is a slug for Addon page on https://stateless.udx.io/addons/  \n */\n\nreturn [\n  \n  'buddyboss' => [\n    'title'           => 'BuddyBoss Platform',\n    'plugin_files'    => ['buddyboss-platform/bp-loader.php'],\n    'addon_file'      => 'wp-stateless-buddyboss-platform-addon/wp-stateless-buddyboss-addon.php',\n    'icon'            => 'https://www.buddyboss.com/wp-content/uploads/2022/04/bb-logo-1.png',\n    'repo'            => 'udx/wp-stateless-buddyboss-addon', \n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-buddyboss-platform-addon/', \n    'hubspot_id'      => '151481399845', \n    // 'hubspot_link'    => 'https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/click?encryptedPayload=AVxigLIz%2BcFUMcIBKQ7Xqj0pOF0COKC9I0GezkxwgHqPgiPgyfhisc6veCbNsRloVLAajjD9D%2ByVhIPRFdsFfxJbmC96vdcpZbFUIqn%2F2qS7eXcpXHENalnSIMHrRy3vZ25OujO7MQ8WgbQMNJlTJJ9N0%2FyC6UbEjKMWdWjvjXnAPRh5giepyw2JtqMqgupq85f5rhzgYJgXJKOAzaOwja%2Bedw%3D%3D&amp;portalId=20504491', \n  ],\n\n  'elementor' => [\n    'title'           => 'Elementor Website Builder',\n    'plugin_files'    => ['elementor/elementor.php'],\n    'addon_file'      => 'wp-stateless-elementor-website-builder-addon/wp-stateless-elementor-addon.php',\n    'icon'            => 'https://ps.w.org/elementor/assets/icon-128x128.gif',\n    'repo'            => 'udx/wp-stateless-elementor-website-builder-addon', \n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-elementor-website-builder-addon/', \n    'hubspot_id'      => '151481399819', \n    // 'hubspot_link'    => 'https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/click?encryptedPayload=AVxigLKR8B2Z9422V%2Fh9SGpptZeq1UWUETejTC8i1C7YoBj8TRWSG2Yij36fQHaj37NIgIU0OgWeZ9SAaTb9lL%2BlPaEKwWJ1WcQNWv%2FLFWh1Y8LTEIUGRvPzShNKyv0yIC5Z3Hu6YWGYp46iXXI6nLLBfbt2fHytn3mHX7Ic3%2ByuAF3Cz2rmMusOMD3XSJGTAYobOOXuyHJzeHzztZAimflHRg%3D%3D&amp;portalId=20504491', \n  ],\n\n  'woocommerce' => [\n    'title'           => 'WooCommerce',\n    'plugin_files'    => ['woocommerce/woocommerce.php'],\n    'addon_file'      => 'wp-stateless-woocommerce-addon/wp-stateless-woocommerce-addon.php',\n    'icon'            => 'https://ps.w.org/woocommerce/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-woocommerce-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-woocommerce-addon/',\n    'hubspot_id'      => '151478251047',\n    // 'hubspot_link'    => 'https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/click?encryptedPayload=AVxigLKJr1PcJ%2BBZGWmWGTx%2Bc7Sh4FacNlnvMTTQNjX%2BUmtx5f1v6gkfcoZGfadciwzLMdGM0sFedlfakugWH%2FdNwCHb4nNp4YBkN0R4jfQIC8RM6ksptsyoPhr2Ws0%2BMkaYVtUkujGU99Pu8r1LBsLY1UJ5vWPU5k5pOEoNGDrw8Y%2FsUwi7oiF5ws2lHdL53NqfZZ7wrybTx7J5ZBpn7ZYiSLWE&amp;portalId=20504491', \n  ],\n\n  'gravity-forms' => [\n    'title'           => 'Gravity Forms',\n    'plugin_files'    => ['gravityforms/gravityforms.php'],\n    'addon_file'      => 'wp-stateless-gravity-forms-addon/wp-stateless-gravity-forms-addon.php',\n    'icon'            => 'https://cdn2.hubspot.net/hub/4148022/hubfs/Artboard%20Copy%2011.png',\n    'repo'            => 'udx/wp-stateless-gravity-forms-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-gravity-forms-addon/',\n    'hubspot_id'      => '151481399808',\n    // 'hubspot_link'    => 'https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/click?encryptedPayload=AVxigLJ2A%2FS%2FrBjbH%2B2zEjfR3T%2B1mWtJnXEtorbr5Olt8GrxTFwKcTV490FD%2F%2FywcQ4Yp944qIl%2FI1BcwoIIsFaYC1Z5v8FygDdJrSd%2FeqTr3jQ2I0tVfJaErezy9f%2BRdTPLQClqa28wG%2FNPQu%2F%2ByD08wtdQhaZMTW7s%2FCwLYFl9RLFqXcc4gW2vCI20%2Bx9NxFAVkMeqRN18USGE7M5iwl8AoOwI1tA%3D&amp;portalId=20504491', \n  ],\n\n  'gravity-forms-signature' => [\n    'title'           => 'Gravity Forms Signature',\n    'plugin_files'    => ['gravityformssignature/signature.php'],\n    'addon_file'      => 'wp-stateless-gravity-forms-signature-addon/wp-stateless-gravity-forms-signature-addon.php',\n    'icon'            => 'https://cdn2.hubspot.net/hub/4148022/hubfs/Artboard%20Copy%2011.png',\n    'repo'            => 'udx/wp-stateless-gravity-forms-signature-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-gravity-forms-signature-addon/',\n    'hubspot_id'      => '151481399724',\n    // 'hubspot_link'    => 'https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/click?encryptedPayload=AVxigLLr66o8tFz1owH%2F8niAXobMUrxwU7SenenLgUzTIQiYLyvaqx%2FBVmvE60MJI3oMg%2BKtMZzfMsvk6Uedvxv1E2mUg7VwJtc9DxdcCgS8uJh58x6fiXwdUPNDkeKlLWeoNtvEj7zhNdDrsJf6kEo6t7vIFpF7aT2%2F8N3RGUCmwUBDRMDt6t7Fdko0LUhAnePm4PAby7S3kmVUZ0POP0bwh%2BjJXTL6eRK4VsTdvaDZ&amp;portalId=20504491',\n  ],\n\n  'divi' => [\n    'title'           => 'Divi Theme',\n    'theme_name'      => 'Divi',\n    'addon_file'      => 'wp-stateless-divi-theme-addon/wp-stateless-divi-theme-addon.php',\n    'icon'            => 'https://www.elegantthemes.com/images/favicon/favicon-divi-128.png',\n    'repo'            => 'udx/wp-stateless-divi-theme-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-divi-theme-addon/',\n    'hubspot_id'      => '151478250935',\n    // 'hubspot_link'    => 'https://cta-service-cms2.hubspot.com/web-interactives/public/v1/track/click?encryptedPayload=AVxigLKBdXT3iKKssnyU5oSlJCOfudt7i6nV%2F5ojUf63FZt1MjnlQ%2BEP2JTU9DfhHfCCMUS9eZkfBezgAUKkinw0pOw0yKUWSYGw89SIF9OyVci07g94GTyYx0j17tt3LC7jZ34Nhe4GfQQHXvkad%2FNNTRoumwcNoV5csmLHPEnEwq7XWsYPSN73GTzxEwySOMWBk%2FTt%2BROYZDCM3Ks%3D&amp;portalId=20504491',\n  ],\n\n  'siteorigin-css' => [\n    'title'           => 'SiteOrigin CSS',\n    'plugin_files'    => ['so-css/so-css.php'],\n    'addon_file'      => 'wp-stateless-siteorigin-css-addon/wp-stateless-siteorigin-css-addon.php',\n    'icon'            => 'https://ps.w.org/so-css/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-siteorigin-css-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-siteorigin-css-addon/',\n    'hubspot_id'      => '151480507684',\n  ],\n\n  'siteorigin-widgets-bundle' => [\n    'title'           => 'SiteOrigin Widgets Bundle',\n    'plugin_files'    => ['so-widgets-bundle/so-widgets-bundle.php'],\n    'addon_file'      => 'wp-stateless-siteorigin-widgets-bundle-addon/wp-stateless-siteorigin-widgets-bundle-addon.php',\n    'icon'            => 'https://ps.w.org/so-widgets-bundle/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-siteorigin-widgets-bundle-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-siteorigin-widgets-bundle-addon/',\n    'hubspot_id'      => '151480507657',\n  ],\n\n  'wpforms' => [\n    'title'           => 'WPForms',\n    'plugin_files'    => ['wpforms-lite/wpforms.php', 'wpforms/wpforms.php'],\n    'addon_file'      => 'wp-stateless-wpforms-addon/wp-stateless-wpforms-addon.php',\n    'icon'            => 'https://ps.w.org/wpforms-lite/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-wpforms-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-wpforms-addon/',\n    'hubspot_id'      => '151481399840',\n  ],\n\n  'edd' => [\n    'title'           => 'Easy Digital Downloads',\n    'plugin_files'    => ['easy-digital-downloads/easy-digital-downloads.php'],\n    'addon_file'      => 'wp-stateless-easy-digital-downloads-addon/wp-stateless-easy-digital-downloads-addon.php',\n    'icon'            => 'https://ps.w.org/easy-digital-downloads/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-easy-digital-downloads-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-easy-digital-downloads-addon/',\n    'hubspot_id'      => '151481399833',\n  ],\n\n  'lite-speed-cache' => [\n    'title'           => 'LiteSpeed Cache',\n    'plugin_files'    => ['litespeed-cache/litespeed-cache.php'],\n    'addon_file'      => 'wp-stateless-litespeed-cache-addon/wp-stateless-litespeed-cache-addon.php',\n    'icon'            => 'https://ps.w.org/litespeed-cache/assets/icon-128x128.png',\n    'repo'            => 'udx/wp-stateless-litespeed-cache-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-litespeed-cache-addon/',\n    'hubspot_id'      => '151480507763',\n  ],\n\n  'buddypress' => [\n    'title'           => 'BuddyPress',\n    'plugin_files'    => ['buddypress/bp-loader.php'],\n    'addon_file'      => 'wp-stateless-buddypress-addon/wp-stateless-buddypress-addon.php',\n    'icon'            => 'https://ps.w.org/buddypress/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-buddypress-addon',\n    'wp'              => 'https://wordpress.org/plugin/wp-stateless-buddypress-addon/',\n    'hubspot_id'      => '151478250924',\n  ],\n\n  'polylang' => [\n    'title'           => 'PolyLang Pro',\n    'plugin_files'    => ['polylang-pro/polylang.php'],\n    'addon_file'      => 'wp-stateless-polylang-pro-addon/wp-stateless-polylang-pro-addon.php',\n    'icon'            => 'https://ps.w.org/buddypress/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-polylang-pro-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-polylang-pro-addon/',\n    'hubspot_id'      => '151478250876',\n  ],\n\n  'simple-local-avatars' => [\n    'title'           => 'Simple Local Avatars',\n    'plugin_files'    => ['simple-local-avatars/simple-local-avatars.php'],\n    'addon_file'      => 'wp-stateless-simple-local-avatars-addon/wp-stateless-simple-local-avatars-addon.php',\n    'icon'            => 'https://ps.w.org/simple-local-avatars/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-simple-local-avatars-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-simple-local-avatars-addon/',\n    'hubspot_id'      => '151480507697',\n  ],\n\n  'woo-extra-product-options' => [\n    'title'           => 'WooCommerce Extra Product Options Addon',\n    'plugin_files'    => ['woocommerce-tm-extra-product-options/tm-woo-extra-product-options.php'],\n    'addon_file'      => 'wp-stateless-woocommerce-extra-product-options-addon/wp-stateless-woo-extra-product-options-addon.php.php',\n    'icon'            => 'https://ps.w.org/woocommerce/assets/icon.svg',\n    'repo'            => 'udx/wp-stateless-woo-extra-product-options-addon',\n    'wp'              => 'https://wordpress.org/plugins/wp-stateless-woocommerce-extra-product-options-addon/',\n    'hubspot_id'      => '151478251017',\n  ],\n\n];\n"
  },
  {
    "path": "static/migrations/20240219175240.php",
    "content": "<?php\n\nuse wpCloud\\StatelessMedia\\Batch\\Migration;\nuse wpCloud\\StatelessMedia\\Helper;\nuse wpCloud\\StatelessMedia\\DB;\n\nclass Migration_20240219175240 extends Migration {\n  const BATCH_SIZE = 1000;\n  const LIMIT = 0;\n  const DESC = true;\n\n  protected $id = '20240219175240';\n\n  public function should_run() {\n    // Check if we have attachments to migrate\n    global $wpdb;\n    \n    $sql = \"SELECT ID \" .\n      \"FROM $wpdb->posts posts \" . \n      \"WHERE posts.post_type = 'attachment' \" . \n      \"ORDER BY ID DESC \" . \n      \"LIMIT 1\";\n\n    $result = $wpdb->get_var( $sql );\n\n    return !empty( $result );\n  }\n\n  public function init_state() {\n    global $wpdb;\n\n    parent::init_state();\n\n    $this->description  = __( \"Update data for Google Cloud files\", ud_get_stateless_media()->domain );\n\n    $order = self::DESC ? 'DESC' : 'ASC';\n\n    // Getting the first/last attachment ID as a starting point\n    $sql = \"SELECT ID \" .\n      \"FROM $wpdb->posts posts \" . \n      \"WHERE posts.post_type = 'attachment' \" . \n      \"ORDER BY ID $order \" . \n      \"LIMIT 1\";\n\n    $start_id = $wpdb->get_var( $sql );\n\n    // Getting the total number of attachments\n    $sql = \"SELECT COUNT(*) \" .\n      \"FROM $wpdb->posts posts \" . \n      \"WHERE posts.post_type = 'attachment' AND posts.post_status != 'trash'\";\n\n    $total = $wpdb->get_var( $sql );\n\n    $this->total        = self::LIMIT > 0 ? min( self::LIMIT, $total ) : $total;\n    $this->limit        = self::BATCH_SIZE;\n    $this->offset       = self::DESC ? $start_id + 1 : $start_id - 1;\n  }\n\n  public function get_batch() {\n    global $wpdb;\n\n    $batch = [];\n\n    if ( self::LIMIT > 0 && $this->completed >= self::LIMIT ) {\n      $this->stop = true;\n      return $batch;\n    }\n\n    if ($this->stop) {\n      return $batch;\n    } \n\n    $order = self::DESC ? 'DESC' : 'ASC';\n    $condition = self::DESC ? 'posts.ID < %d' : 'posts.ID > %d';\n\n    // Using last post ID instead of limit for performance\n    $sql = \"SELECT posts.ID \" .\n      \"FROM $wpdb->posts posts \" .\n      \"WHERE posts.post_type = 'attachment' AND $condition \" .\n      \"ORDER BY posts.ID $order \" .\n      \"LIMIT %d\";\n\n    $sql = $wpdb->prepare( $sql, $this->offset, $this->limit );\n\n    $batch = $wpdb->get_col( $sql );\n\n    $count = count( $batch );\n\n    $this->offset = end( $batch );\n\n    if ( $count < $this->limit ) {\n      $this->stop = true;\n    }\n    \n    return $batch;\n  } \n\n  /**\n   * Get the 'generation' field from the GCS media link\n   * \n   * @param string $sm_id\n   * @return string\n   */\n  private function _get_generation_from_media_link($media_link) {\n    $query = parse_url($media_link, PHP_URL_QUERY);\n    parse_str($query, $parts);\n\n    return $parts['generation'] ?? 0;\n  }\n\n  /**\n   * Get the file size from the meta or from the older version of meta\n   * \n   * @param array $meta\n   * @return int|null\n   */\n  private function _get_file_size($meta) {\n    if ( isset( $meta['filesize'] ) ) {\n      return $meta['filesize'];\n    }\n\n    if ( isset( $meta['object'] ) && isset( $meta['object']['size'] ) ) {\n      return $meta['object']['size'];\n    }\n\n    return null;\n  }\n\n  /**\n   * Get the width from the meta or from the WP attachment meta\n   * \n   * @param array $meta\n   * @param array $wp_meta\n   * @return int|null\n   */\n  private function _get_width($meta, $wp_meta) {\n    if ( isset( $meta['width'] ) ) {\n      return $meta['width'];\n    }\n\n    if ( isset( $meta['object'] ) && isset( $meta['object']['metadata'] ) && isset( $meta['object']['metadata']['width'] ) ) {\n      return $meta['object']['metadata']['width'];\n    }\n\n    if ( isset( $wp_meta['width'] ) ) {\n      return $wp_meta['width'];\n    }\n\n    return null;\n  }\n\n  /**\n   * Get the height from the meta or from the WP attachment meta\n   * \n   * @param array $meta\n   * @param array $wp_meta\n   * @return int|null\n   */\n  private function _get_height($meta, $wp_meta) {\n    if ( isset( $meta['height'] ) ) {\n      return $meta['height'];\n    }\n\n    if ( isset( $meta['object'] ) && isset( $meta['object']['metadata'] ) && isset( $meta['object']['metadata']['height'] ) ) {\n      return $meta['object']['metadata']['height'];\n    }\n\n    if ( isset( $wp_meta['height'] ) ) {\n      return $wp_meta['height'];\n    }\n\n    return null;\n  }\n\n  /**\n   * Get the content type from the meta or from the file\n   * \n   * @param array $meta\n   * @param string $file\n   * @return string\n   * @throws \\Exception\n   */\n  private function _get_content_type($meta, $file) {\n    if ( isset( $meta['contentType'] ) ) {\n      return $meta['contentType'];\n    }\n\n    if ( isset( $meta['object'] ) && isset( $meta['object']['contentType'] ) ) {\n      return $meta['object']['contentType'];\n    }\n\n    // Get mimetype based on file extension the file extension\n    $file = pathinfo($file, PATHINFO_BASENAME);\n    $type = wp_check_filetype($file);\n    \n    return $type['type'] ?? '';\n  }\n\n  /**\n   * Get the self link from the meta\n   * \n   * @param array $meta\n   * @return string\n   * @throws \\Exception\n   */\n  private function _get_self_link($meta) {\n    if ( isset($meta['selfLink']) ) {\n      return $meta['selfLink'];\n    }\n\n    if ( !isset($meta['mediaLink']) ) {\n      throw new \\Exception('Media link not defined');\n    }\n\n    $link = $meta['mediaLink'] ?? '';\n    $remove = '/download';\n\n    $pos = strpos($link, $remove);\n  \n    if ($pos === false) {\n      return $link;\n    }\n\n    $link = substr_replace($link, '', $pos, strlen($remove));\n    $parts = explode('?', $link);\n  \n    return reset($parts);\n  }\n\n  /**\n   * Get the version from the meta\n   * \n   * @param array $meta\n   * @return string\n   */\n  private function _get_version($meta) {\n    return isset($meta['sm_version']) ? $meta['sm_version'] : $this->id;\n  }\n\n  /**\n   * Get the file link from the meta or generate a new one\n   * \n   * @param string $name\n   * @param array $meta\n   * @return string\n   */\n  private function _get_file_link($name, $meta) {\n    return isset($meta['fileLink']) ? $meta['fileLink'] : ud_stateless_db()->get_file_link($name);\n  }\n\n  public function process_item($item) {\n    global $wpdb;\n    \n    Helper::log('Processing item ' . $item);\n\n    $meta = get_post_meta( $item, 'sm_cloud', true );\n\n    if ( !$meta || empty($meta) ) {\n      return false;\n    }\n\n    $wp_meta = get_post_meta( $item, '_wp_attachment_metadata', true );\n\n    $old_suppress = $wpdb->suppress_errors();\n\n    // Disable autocommit and use transactions to ensure data integrity\n    $wpdb->query( 'SET autocommit = 0;' );\n    $wpdb->query( 'START TRANSACTION;' );\n\n    try {\n      // Update file data\n      $name = $meta['name'] ?? '';\n\n      $data = [\n        'post_id'               => $item,\n        'name'                  => $name,\n        'bucket'                => $meta['bucket'] ?? '',\n        'generation'            => $this->_get_generation_from_media_link( $meta['mediaLink'] ?? ''),\n        'cache_control'         => $meta['cacheControl'] ?? null,\n        'content_type'          => $this->_get_content_type($meta, $name),\n        'content_disposition'   => $meta['contentDisposition'] ?? null,\n        'file_size'             => $this->_get_file_size($meta),\n        'width'                 => $this->_get_width($meta, $wp_meta),\n        'height'                => $this->_get_height($meta, $wp_meta),\n        'stateless_version'     => $this->_get_version($meta),\n        'storage_class'         => $meta['storageClass'] ?? null,\n        'file_link'             => $this->_get_file_link($name, $meta),\n        'self_link'             => $this->_get_self_link($meta),\n      ];\n\n      $wpdb->insert(ud_stateless_db()->files, $data);\n  \n      // Update file sizes data\n      $sizes = $meta['sizes'] ?? [];\n    \n      foreach ($sizes as $size => $size_data) {\n        $name = $size_data['name'];\n\n        $data = [\n          'post_id'               => $item,\n          'name'                  => $name,\n          'size_name'             => $size,\n          'generation'            => $this->_get_generation_from_media_link( $size_data['mediaLink'] ),\n          'file_size'             => $this->_get_file_size($size_data),\n          'width'                 => $this->_get_width($size_data, $wp_meta['sizes'][$size] ?? []),\n          'height'                => $this->_get_height($size_data, $wp_meta['sizes'][$size] ?? []),\n          'file_link'             => $this->_get_file_link($name, $meta),\n          'self_link'             => $this->_get_self_link($size_data),\n        ];\n  \n        $wpdb->insert(ud_stateless_db()->file_sizes, $data);\n      }\n\n      // Update file meta data ('fileMd5' for LiteSpeed Cache)\n      $key = 'fileMd5';\n      $md5_data = $meta[$key] ?? null;\n\n      if ( !empty($md5_data) ) {\n        $data = [\n          'post_id'               => $item,\n          'meta_key'              => sanitize_key($key),\n          'meta_value'            => maybe_serialize($md5_data),\n        ];\n  \n        $wpdb->insert(ud_stateless_db()->file_meta, $data);\n      }\n\n      $wpdb->query( 'COMMIT' );\n\n      $this->completed++;\n\n    } catch ( \\Throwable $e ) {\n      $wpdb->query( 'ROLLBACK;' );\n\n      Helper::log( \"Error while processing item $item: \" . $e->getMessage() );\n    }\n\n    $wpdb->query( 'SET autocommit = 1;' );\n\n    $wpdb->suppress_errors($old_suppress);\n\n    return false;\n  }\n\n}"
  },
  {
    "path": "static/migrations/20240423174109.php",
    "content": "<?php\n\nuse wpCloud\\StatelessMedia\\Batch\\Migration;\nuse wpCloud\\StatelessMedia\\Helper;\n\nclass Migration_20240423174109 extends Migration {\n  const BATCH_SIZE = 10;\n  const LIMIT = 0;\n  const DESC = true;\n\n  protected $id = '20240423174109';\n\n  public function should_run() {\n    // Check if we have attachments to migrate\n    global $wpdb;\n    $table_name = $wpdb->prefix . 'sm_sync';\n    $result = null;\n\n    try {\n      $result = $wpdb->get_var(\"SELECT id FROM $table_name LIMIT 1\");\n    } catch (\\Throwable $e) {\n      Helper::log('Table sm_sync not found');\n\n      return false;\n    }\n\n    return !empty( $result );\n  }\n\n  public function init_state() {\n    global $wpdb;\n\n    parent::init_state();\n\n    $this->description  = __( \"Optimize Compatibility Files\", ud_get_stateless_media()->domain );\n\n    $table_name = $wpdb->prefix . 'sm_sync';\n    $order = self::DESC ? 'DESC' : 'ASC';\n    $total = 0;\n\n    // Getting the total number of attachments\n    try {\n      $total = $wpdb->get_var( \"SELECT COUNT(*) FROM $table_name\" );\n    } catch (\\Throwable $e) {\n      Helper::log('Table sm_sync not found');\n\n      return false;\n    }\n\n    $this->total = self::LIMIT > 0 ? min( self::LIMIT, $total ) : $total;\n    $this->limit = self::LIMIT > 0 ? min(self::BATCH_SIZE, self::LIMIT) : self::BATCH_SIZE;\n  }\n\n  public function get_batch() {\n    global $wpdb;\n\n    $batch = [];\n\n    if ( self::LIMIT > 0 && $this->completed >= self::LIMIT ) {\n      $this->stop = true;\n      return $batch;\n    }\n\n    if ($this->stop) {\n      return $batch;\n    } \n\n    $order = self::DESC ? 'DESC' : 'ASC';\n    $table_name = $wpdb->prefix . 'sm_sync';\n\n    $sql = \"SELECT id \" .\n      \"FROM $table_name \" .\n      \"ORDER BY id $order \" .\n      \"LIMIT %d OFFSET %d\";\n\n    try {\n      $sql = $wpdb->prepare( $sql, $this->limit, $this->offset );\n\n      $batch = $wpdb->get_col( $sql );\n  \n      $count = count( $batch );\n  \n      $this->offset += $count;\n  \n      if ( $count < $this->limit ) {\n        $this->stop = true;\n      }\n    } catch (\\Throwable $e) {\n      Helper::log( $e->getMessage() );\n    }\n\n    return $batch;\n  } \n\n  public function process_item($item) {\n    global $wpdb;\n\n    Helper::log('Processing item ' . $item);\n\n    $old_suppress = $wpdb->suppress_errors();\n    $sync_table = $wpdb->prefix . 'sm_sync';\n    $files_table = ud_stateless_db()->files;\n\n    try {\n      $sql = \"SELECT st.file as file, st.status as status, ft.id as fid \" . \n        \"FROM $sync_table st \" . \n        \"LEFT JOIN $files_table ft ON st.file = ft.name AND ft.post_id IS NULL \" . \n        \"WHERE st.id = %d\";\n\n      $sql = $wpdb->prepare( $sql, $item );\n\n      $sync = $wpdb->get_row( $sql );\n  \n      // We have the data and the data is missing in 'wp_stateless_files'\n      if ( !empty($sync) && !empty($sync->file) && empty($sync->fid) ) {\n        $client = ud_get_stateless_media()->get_client();\n\n        $media = (array) $client->get_media( $sync->file );\n\n        if ( is_array($media) && !empty($media) && isset($media['metadata']) ) {\n          $metadata = $media['metadata'];\n\n          if ( !isset($metadata['source']) && !isset($metadata['sourceVersion']) ) {\n            $media['metadata']['sourceVersion'] = $this->id;\n          }\n\n          ud_stateless_db()->update_non_library_file($media, $sync->status);\n        }\n      }\n    } catch (\\Throwable $e) {\n      Helper::log( $e->getMessage() );\n    }\n\n    $wpdb->suppress_errors($old_suppress);\n\n    $this->completed++;\n\n    return false;\n  }\n\n}"
  },
  {
    "path": "static/scripts/error-notice.js",
    "content": "/**\n * EVENTS\n */\njQuery( document ).ready( function ($) {\n\n  jQuery( document ).on( 'click', '.stateless-admin-notice.ud-admin-notice .button-action', function(e){\n    var _this = jQuery( this );\n    if(_this.attr('href') != '#'){\n      return;\n    }\n\n    e.preventDefault();\n\n\n    var data = {\n      action: 'stateless_enable_notice_button_action',\n      key: _this.data('key'),\n      _ajax_nonce: stateless_error_notice_vars.enable_action_nonce ?? '',\n    }\n\n    jQuery.post( ajaxurl, data, function ( result_data ) {\n      if( result_data.success == '1' ) {\n        _this.closest('.ud-admin-notice').remove();\n\n        var key = _this.attr('data-key');\n        key = key.replace('button_secondary_', '');\n        $(\"#\" + key + \" option[value=\" + key +\"]\").attr('selected', 'selected');\n        $(\"#\" + key).val('true');\n      } else if ( result_data.success == '0' ) {\n        // alert(result_data.error);\n      }\n    }, \"json\" );\n    return false;\n  });\n\n  jQuery( '.stateless-admin-notice.ud-admin-notice' ).off( 'click', '.dismiss');\n  jQuery( document ).on( 'click', '.stateless-admin-notice.ud-admin-notice .dismiss-warning', function(e){\n    e.preventDefault();\n\n    var _this = jQuery( this );\n\n    var data = {\n      action: 'stateless_notice_dismiss',\n      key: _this.data('key'),\n      _ajax_nonce: stateless_error_notice_vars.dismiss_nonce ?? '',\n    }\n\n    jQuery.post( ajaxurl, data, function ( result_data ) {\n      if( result_data.success == '1' ) {\n        _this.closest('.ud-admin-notice').remove();\n      } else if ( result_data.success == '0' ) {\n        // alert(result_data.error);\n      }\n    }, \"json\" );\n    return false;\n  });\n\n  jQuery('#stless_settings_tab .sm-mode input[type=radio]').on('change', function(){\n\n    if($(this).val() == 'stateless' || $(this).val() == 'ephemeral'){\n      var notice = jQuery('#stateless-notice-stateless-cache-busting');\n      if(!notice.length){\n        notice = jQuery(jQuery('#template-stateless-cache-busting').html());\n        notice.appendTo(\"#stateless-settings-page-title\");\n      }\n      jQuery('#stateless-notice-stateless-cache-busting').show();\n    }\n    else{\n      jQuery('#stateless-notice-stateless-cache-busting').hide();\n    }\n\n  });\n\n} );"
  },
  {
    "path": "static/scripts/i18n/af.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/af\",[],function(){return{errorLoading:function(){return\"Die resultate kon nie gelaai word nie.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Verwyders asseblief \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Voer asseblief \"+(e.minimum-e.input.length)+\" of meer karakters\"},loadingMore:function(){return\"Meer resultate word gelaai…\"},maximumSelected:function(e){var n=\"Kies asseblief net \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"Geen resultate gevind\"},searching:function(){return\"Besig…\"},removeAllItems:function(){return\"Verwyder alle items\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/ar.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ar\",[],function(){return{errorLoading:function(){return\"لا يمكن تحميل النتائج\"},inputTooLong:function(n){return\"الرجاء حذف \"+(n.input.length-n.maximum)+\" عناصر\"},inputTooShort:function(n){return\"الرجاء إضافة \"+(n.minimum-n.input.length)+\" عناصر\"},loadingMore:function(){return\"جاري تحميل نتائج إضافية...\"},maximumSelected:function(n){return\"تستطيع إختيار \"+n.maximum+\" بنود فقط\"},noResults:function(){return\"لم يتم العثور على أي نتائج\"},searching:function(){return\"جاري البحث…\"},removeAllItems:function(){return\"قم بإزالة كل العناصر\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/az.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/az\",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+\" simvol silin\"},inputTooShort:function(n){return n.minimum-n.input.length+\" simvol daxil edin\"},loadingMore:function(){return\"Daha çox nəticə yüklənir…\"},maximumSelected:function(n){return\"Sadəcə \"+n.maximum+\" element seçə bilərsiniz\"},noResults:function(){return\"Nəticə tapılmadı\"},searching:function(){return\"Axtarılır…\"},removeAllItems:function(){return\"Bütün elementləri sil\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/bg.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bg\",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Моля въведете с \"+e+\" по-малко символ\";return e>1&&(u+=\"a\"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u=\"Моля въведете още \"+e+\" символ\";return e>1&&(u+=\"a\"),u},loadingMore:function(){return\"Зареждат се още…\"},maximumSelected:function(n){var e=\"Можете да направите до \"+n.maximum+\" \";return n.maximum>1?e+=\"избора\":e+=\"избор\",e},noResults:function(){return\"Няма намерени съвпадения\"},searching:function(){return\"Търсене…\"},removeAllItems:function(){return\"Премахнете всички елементи\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/bn.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bn\",[],function(){return{errorLoading:function(){return\"ফলাফলগুলি লোড করা যায়নি।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"অনুগ্রহ করে \"+e+\" টি অক্ষর মুছে দিন।\";return 1!=e&&(u=\"অনুগ্রহ করে \"+e+\" টি অক্ষর মুছে দিন।\"),u},inputTooShort:function(n){return n.minimum-n.input.length+\" টি অক্ষর অথবা অধিক অক্ষর লিখুন।\"},loadingMore:function(){return\"আরো ফলাফল লোড হচ্ছে ...\"},maximumSelected:function(n){var e=n.maximum+\" টি আইটেম নির্বাচন করতে পারবেন।\";return 1!=n.maximum&&(e=n.maximum+\" টি আইটেম নির্বাচন করতে পারবেন।\"),e},noResults:function(){return\"কোন ফলাফল পাওয়া যায়নি।\"},searching:function(){return\"অনুসন্ধান করা হচ্ছে ...\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/bs.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/bs\",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return\"Preuzimanje nije uspijelo.\"},inputTooLong:function(n){var r=n.input.length-n.maximum,t=\"Obrišite \"+r+\" simbol\";return t+=e(r,\"\",\"a\",\"a\")},inputTooShort:function(n){var r=n.minimum-n.input.length,t=\"Ukucajte bar još \"+r+\" simbol\";return t+=e(r,\"\",\"a\",\"a\")},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(n){var r=\"Možete izabrati samo \"+n.maximum+\" stavk\";return r+=e(n.maximum,\"u\",\"e\",\"i\")},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Uklonite sve stavke\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/ca.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ca\",[],function(){return{errorLoading:function(){return\"La càrrega ha fallat\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Si us plau, elimina \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Si us plau, introdueix \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},loadingMore:function(){return\"Carregant més resultats…\"},maximumSelected:function(e){var n=\"Només es pot seleccionar \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No s'han trobat resultats\"},searching:function(){return\"Cercant…\"},removeAllItems:function(){return\"Treu tots els elements\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/cs.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/cs\",[],function(){function e(e,n){switch(e){case 2:return n?\"dva\":\"dvě\";case 3:return\"tři\";case 4:return\"čtyři\"}return\"\"}return{errorLoading:function(){return\"Výsledky nemohly být načteny.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadejte o jeden znak méně.\":t<=4?\"Prosím, zadejte o \"+e(t,!0)+\" znaky méně.\":\"Prosím, zadejte o \"+t+\" znaků méně.\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadejte ještě jeden znak.\":t<=4?\"Prosím, zadejte ještě další \"+e(t,!0)+\" znaky.\":\"Prosím, zadejte ještě dalších \"+t+\" znaků.\"},loadingMore:function(){return\"Načítají se další výsledky…\"},maximumSelected:function(n){var t=n.maximum;return 1==t?\"Můžete zvolit jen jednu položku.\":t<=4?\"Můžete zvolit maximálně \"+e(t,!1)+\" položky.\":\"Můžete zvolit maximálně \"+t+\" položek.\"},noResults:function(){return\"Nenalezeny žádné položky.\"},searching:function(){return\"Vyhledávání…\"},removeAllItems:function(){return\"Odstraňte všechny položky\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/da.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/da\",[],function(){return{errorLoading:function(){return\"Resultaterne kunne ikke indlæses.\"},inputTooLong:function(e){return\"Angiv venligst \"+(e.input.length-e.maximum)+\" tegn mindre\"},inputTooShort:function(e){return\"Angiv venligst \"+(e.minimum-e.input.length)+\" tegn mere\"},loadingMore:function(){return\"Indlæser flere resultater…\"},maximumSelected:function(e){var n=\"Du kan kun vælge \"+e.maximum+\" emne\";return 1!=e.maximum&&(n+=\"r\"),n},noResults:function(){return\"Ingen resultater fundet\"},searching:function(){return\"Søger…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/de.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/de\",[],function(){return{errorLoading:function(){return\"Die Ergebnisse konnten nicht geladen werden.\"},inputTooLong:function(e){return\"Bitte \"+(e.input.length-e.maximum)+\" Zeichen weniger eingeben\"},inputTooShort:function(e){return\"Bitte \"+(e.minimum-e.input.length)+\" Zeichen mehr eingeben\"},loadingMore:function(){return\"Lade mehr Ergebnisse…\"},maximumSelected:function(e){var n=\"Sie können nur \"+e.maximum+\" Element\";return 1!=e.maximum&&(n+=\"e\"),n+=\" auswählen\"},noResults:function(){return\"Keine Übereinstimmungen gefunden\"},searching:function(){return\"Suche…\"},removeAllItems:function(){return\"Entferne alle Elemente\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/dsb.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/dsb\",[],function(){var n=[\"znamuško\",\"znamušce\",\"znamuška\",\"znamuškow\"],e=[\"zapisk\",\"zapiska\",\"zapiski\",\"zapiskow\"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return\"Wuslědki njejsu se dali zacytaś.\"},inputTooLong:function(e){var a=e.input.length-e.maximum;return\"Pšosym lašuj \"+a+\" \"+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return\"Pšosym zapódaj nanejmjenjej \"+a+\" \"+u(a,n)},loadingMore:function(){return\"Dalšne wuslědki se zacytaju…\"},maximumSelected:function(n){return\"Móžoš jano \"+n.maximum+\" \"+u(n.maximum,e)+\"wubraś.\"},noResults:function(){return\"Žedne wuslědki namakane\"},searching:function(){return\"Pyta se…\"},removeAllItems:function(){return\"Remove all items\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/el.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/el\",[],function(){return{errorLoading:function(){return\"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Παρακαλώ διαγράψτε \"+e+\" χαρακτήρ\";return 1==e&&(u+=\"α\"),1!=e&&(u+=\"ες\"),u},inputTooShort:function(n){return\"Παρακαλώ συμπληρώστε \"+(n.minimum-n.input.length)+\" ή περισσότερους χαρακτήρες\"},loadingMore:function(){return\"Φόρτωση περισσότερων αποτελεσμάτων…\"},maximumSelected:function(n){var e=\"Μπορείτε να επιλέξετε μόνο \"+n.maximum+\" επιλογ\";return 1==n.maximum&&(e+=\"ή\"),1!=n.maximum&&(e+=\"ές\"),e},noResults:function(){return\"Δεν βρέθηκαν αποτελέσματα\"},searching:function(){return\"Αναζήτηση…\"},removeAllItems:function(){return\"Καταργήστε όλα τα στοιχεία\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/en.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Please delete \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var n=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/es.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"No se pudieron cargar los resultados\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Por favor, elimine \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Por favor, introduzca \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},loadingMore:function(){return\"Cargando más resultados…\"},maximumSelected:function(e){var n=\"Sólo puede seleccionar \"+e.maximum+\" elemento\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Eliminar todos los elementos\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/et.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" vähem\"},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" rohkem\"},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var n=\"Saad vaid \"+e.maximum+\" tulemus\";return 1==e.maximum?n+=\"e\":n+=\"t\",n+=\" valida\"},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"},removeAllItems:function(){return\"Eemalda kõik esemed\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/eu.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/eu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Idatzi \";return n+=1==t?\"karaktere bat\":t+\" karaktere\",n+=\" gutxiago\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Idatzi \";return n+=1==t?\"karaktere bat\":t+\" karaktere\",n+=\" gehiago\"},loadingMore:function(){return\"Emaitza gehiago kargatzen…\"},maximumSelected:function(e){return 1===e.maximum?\"Elementu bakarra hauta dezakezu\":e.maximum+\" elementu hauta ditzakezu soilik\"},noResults:function(){return\"Ez da bat datorrenik aurkitu\"},searching:function(){return\"Bilatzen…\"},removeAllItems:function(){return\"Kendu elementu guztiak\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/fa.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fa\",[],function(){return{errorLoading:function(){return\"امکان بارگذاری نتایج وجود ندارد.\"},inputTooLong:function(n){return\"لطفاً \"+(n.input.length-n.maximum)+\" کاراکتر را حذف نمایید\"},inputTooShort:function(n){return\"لطفاً تعداد \"+(n.minimum-n.input.length)+\" کاراکتر یا بیشتر وارد نمایید\"},loadingMore:function(){return\"در حال بارگذاری نتایج بیشتر...\"},maximumSelected:function(n){return\"شما تنها می‌توانید \"+n.maximum+\" آیتم را انتخاب نمایید\"},noResults:function(){return\"هیچ نتیجه‌ای یافت نشد\"},searching:function(){return\"در حال جستجو...\"},removeAllItems:function(){return\"همه موارد را حذف کنید\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/fi.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fi\",[],function(){return{errorLoading:function(){return\"Tuloksia ei saatu ladattua.\"},inputTooLong:function(n){return\"Ole hyvä ja anna \"+(n.input.length-n.maximum)+\" merkkiä vähemmän\"},inputTooShort:function(n){return\"Ole hyvä ja anna \"+(n.minimum-n.input.length)+\" merkkiä lisää\"},loadingMore:function(){return\"Ladataan lisää tuloksia…\"},maximumSelected:function(n){return\"Voit valita ainoastaan \"+n.maximum+\" kpl\"},noResults:function(){return\"Ei tuloksia\"},searching:function(){return\"Haetaan…\"},removeAllItems:function(){return\"Poista kaikki kohteet\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/fr.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les résultats ne peuvent pas être chargés.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return\"Supprimez \"+n+\" caractère\"+(n>1?\"s\":\"\")},inputTooShort:function(e){var n=e.minimum-e.input.length;return\"Saisissez au moins \"+n+\" caractère\"+(n>1?\"s\":\"\")},loadingMore:function(){return\"Chargement de résultats supplémentaires…\"},maximumSelected:function(e){return\"Vous pouvez seulement sélectionner \"+e.maximum+\" élément\"+(e.maximum>1?\"s\":\"\")},noResults:function(){return\"Aucun résultat trouvé\"},searching:function(){return\"Recherche en cours…\"},removeAllItems:function(){return\"Supprimer tous les éléments\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/gl.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/gl\",[],function(){return{errorLoading:function(){return\"Non foi posíbel cargar os resultados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?\"Elimine un carácter\":\"Elimine \"+n+\" caracteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?\"Engada un carácter\":\"Engada \"+n+\" caracteres\"},loadingMore:function(){return\"Cargando máis resultados…\"},maximumSelected:function(e){return 1===e.maximum?\"Só pode seleccionar un elemento\":\"Só pode seleccionar \"+e.maximum+\" elementos\"},noResults:function(){return\"Non se atoparon resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Elimina todos os elementos\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/he.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/he\",[],function(){return{errorLoading:function(){return\"שגיאה בטעינת התוצאות\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"נא למחוק \";return r+=1===e?\"תו אחד\":e+\" תווים\"},inputTooShort:function(n){var e=n.minimum-n.input.length,r=\"נא להכניס \";return r+=1===e?\"תו אחד\":e+\" תווים\",r+=\" או יותר\"},loadingMore:function(){return\"טוען תוצאות נוספות…\"},maximumSelected:function(n){var e=\"באפשרותך לבחור עד \";return 1===n.maximum?e+=\"פריט אחד\":e+=n.maximum+\" פריטים\",e},noResults:function(){return\"לא נמצאו תוצאות\"},searching:function(){return\"מחפש…\"},removeAllItems:function(){return\"הסר את כל הפריטים\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/hi.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hi\",[],function(){return{errorLoading:function(){return\"परिणामों को लोड नहीं किया जा सका।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+\" अक्षर को हटा दें\";return e>1&&(r=e+\" अक्षरों को हटा दें \"),r},inputTooShort:function(n){return\"कृपया \"+(n.minimum-n.input.length)+\" या अधिक अक्षर दर्ज करें\"},loadingMore:function(){return\"अधिक परिणाम लोड हो रहे है...\"},maximumSelected:function(n){return\"आप केवल \"+n.maximum+\" आइटम का चयन कर सकते हैं\"},noResults:function(){return\"कोई परिणाम नहीं मिला\"},searching:function(){return\"खोज रहा है...\"},removeAllItems:function(){return\"सभी वस्तुओं को हटा दें\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/hr.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hr\",[],function(){function n(n){var e=\" \"+n+\" znak\";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+=\"a\"):e+=\"ova\",e}return{errorLoading:function(){return\"Preuzimanje nije uspjelo.\"},inputTooLong:function(e){return\"Unesite \"+n(e.input.length-e.maximum)},inputTooShort:function(e){return\"Unesite još \"+n(e.minimum-e.input.length)},loadingMore:function(){return\"Učitavanje rezultata…\"},maximumSelected:function(n){return\"Maksimalan broj odabranih stavki je \"+n.maximum},noResults:function(){return\"Nema rezultata\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Ukloni sve stavke\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/hsb.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hsb\",[],function(){var n=[\"znamješko\",\"znamješce\",\"znamješka\",\"znamješkow\"],e=[\"zapisk\",\"zapiskaj\",\"zapiski\",\"zapiskow\"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return\"Wuslědki njedachu so začitać.\"},inputTooLong:function(e){var a=e.input.length-e.maximum;return\"Prošu zhašej \"+a+\" \"+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return\"Prošu zapodaj znajmjeńša \"+a+\" \"+u(a,n)},loadingMore:function(){return\"Dalše wuslědki so začitaja…\"},maximumSelected:function(n){return\"Móžeš jenož \"+n.maximum+\" \"+u(n.maximum,e)+\"wubrać\"},noResults:function(){return\"Žane wuslědki namakane\"},searching:function(){return\"Pyta so…\"},removeAllItems:function(){return\"Remove all items\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/hu.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/hu\",[],function(){return{errorLoading:function(){return\"Az eredmények betöltése nem sikerült.\"},inputTooLong:function(e){return\"Túl hosszú. \"+(e.input.length-e.maximum)+\" karakterrel több, mint kellene.\"},inputTooShort:function(e){return\"Túl rövid. Még \"+(e.minimum-e.input.length)+\" karakter hiányzik.\"},loadingMore:function(){return\"Töltés…\"},maximumSelected:function(e){return\"Csak \"+e.maximum+\" elemet lehet kiválasztani.\"},noResults:function(){return\"Nincs találat.\"},searching:function(){return\"Keresés…\"},removeAllItems:function(){return\"Távolítson el minden elemet\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/hy.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hy\",[],function(){return{errorLoading:function(){return\"Արդյունքները հնարավոր չէ բեռնել։\"},inputTooLong:function(n){return\"Խնդրում ենք հեռացնել \"+(n.input.length-n.maximum)+\" նշան\"},inputTooShort:function(n){return\"Խնդրում ենք մուտքագրել \"+(n.minimum-n.input.length)+\" կամ ավել նշաններ\"},loadingMore:function(){return\"Բեռնվում են նոր արդյունքներ․․․\"},maximumSelected:function(n){return\"Դուք կարող եք ընտրել առավելագույնը \"+n.maximum+\" կետ\"},noResults:function(){return\"Արդյունքներ չեն գտնվել\"},searching:function(){return\"Որոնում․․․\"},removeAllItems:function(){return\"Հեռացնել բոլոր տարրերը\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/id.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/id\",[],function(){return{errorLoading:function(){return\"Data tidak boleh diambil.\"},inputTooLong:function(n){return\"Hapuskan \"+(n.input.length-n.maximum)+\" huruf\"},inputTooShort:function(n){return\"Masukkan \"+(n.minimum-n.input.length)+\" huruf lagi\"},loadingMore:function(){return\"Mengambil data…\"},maximumSelected:function(n){return\"Anda hanya dapat memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tidak ada data yang sesuai\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Hapus semua item\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/is.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/is\",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e=\"Vinsamlegast styttið texta um \"+t+\" staf\";return t<=1?e:e+\"i\"},inputTooShort:function(n){var t=n.minimum-n.input.length,e=\"Vinsamlegast skrifið \"+t+\" staf\";return t>1&&(e+=\"i\"),e+=\" í viðbót\"},loadingMore:function(){return\"Sæki fleiri niðurstöður…\"},maximumSelected:function(n){return\"Þú getur aðeins valið \"+n.maximum+\" atriði\"},noResults:function(){return\"Ekkert fannst\"},searching:function(){return\"Leita…\"},removeAllItems:function(){return\"Fjarlægðu öll atriði\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/it.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/it\",[],function(){return{errorLoading:function(){return\"I risultati non possono essere caricati.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Per favore cancella \"+n+\" caratter\";return t+=1!==n?\"i\":\"e\"},inputTooShort:function(e){return\"Per favore inserisci \"+(e.minimum-e.input.length)+\" o più caratteri\"},loadingMore:function(){return\"Caricando più risultati…\"},maximumSelected:function(e){var n=\"Puoi selezionare solo \"+e.maximum+\" element\";return 1!==e.maximum?n+=\"i\":n+=\"o\",n},noResults:function(){return\"Nessun risultato trovato\"},searching:function(){return\"Sto cercando…\"},removeAllItems:function(){return\"Rimuovi tutti gli oggetti\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/ja.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"結果が読み込まれませんでした\"},inputTooLong:function(n){return n.input.length-n.maximum+\" 文字を削除してください\"},inputTooShort:function(n){return\"少なくとも \"+(n.minimum-n.input.length)+\" 文字を入力してください\"},loadingMore:function(){return\"読み込み中…\"},maximumSelected:function(n){return n.maximum+\" 件しか選択できません\"},noResults:function(){return\"対象が見つかりません\"},searching:function(){return\"検索しています…\"},removeAllItems:function(){return\"すべてのアイテムを削除\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/ka.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ka\",[],function(){return{errorLoading:function(){return\"მონაცემების ჩატვირთვა შეუძლებელია.\"},inputTooLong:function(n){return\"გთხოვთ აკრიფეთ \"+(n.input.length-n.maximum)+\" სიმბოლოთი ნაკლები\"},inputTooShort:function(n){return\"გთხოვთ აკრიფეთ \"+(n.minimum-n.input.length)+\" სიმბოლო ან მეტი\"},loadingMore:function(){return\"მონაცემების ჩატვირთვა…\"},maximumSelected:function(n){return\"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს \"+n.maximum+\" ელემენტი\"},noResults:function(){return\"რეზულტატი არ მოიძებნა\"},searching:function(){return\"ძიება…\"},removeAllItems:function(){return\"ამოიღე ყველა ელემენტი\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/km.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/km\",[],function(){return{errorLoading:function(){return\"មិនអាចទាញយកទិន្នន័យ\"},inputTooLong:function(n){return\"សូមលុបចេញ  \"+(n.input.length-n.maximum)+\" អក្សរ\"},inputTooShort:function(n){return\"សូមបញ្ចូល\"+(n.minimum-n.input.length)+\" អក្សរ រឺ ច្រើនជាងនេះ\"},loadingMore:function(){return\"កំពុងទាញយកទិន្នន័យបន្ថែម...\"},maximumSelected:function(n){return\"អ្នកអាចជ្រើសរើសបានតែ \"+n.maximum+\" ជម្រើសប៉ុណ្ណោះ\"},noResults:function(){return\"មិនមានលទ្ធផល\"},searching:function(){return\"កំពុងស្វែងរក...\"},removeAllItems:function(){return\"លុបធាតុទាំងអស់\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/ko.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ko\",[],function(){return{errorLoading:function(){return\"결과를 불러올 수 없습니다.\"},inputTooLong:function(n){return\"너무 깁니다. \"+(n.input.length-n.maximum)+\" 글자 지워주세요.\"},inputTooShort:function(n){return\"너무 짧습니다. \"+(n.minimum-n.input.length)+\" 글자 더 입력해주세요.\"},loadingMore:function(){return\"불러오는 중…\"},maximumSelected:function(n){return\"최대 \"+n.maximum+\"개까지만 선택 가능합니다.\"},noResults:function(){return\"결과가 없습니다.\"},searching:function(){return\"검색 중…\"},removeAllItems:function(){return\"모든 항목 삭제\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/lt.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/lt\",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t=\"Pašalinkite \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},inputTooShort:function(e){var i=e.minimum-e.input.length,t=\"Įrašykite dar \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},loadingMore:function(){return\"Kraunama daugiau rezultatų…\"},maximumSelected:function(e){var i=\"Jūs galite pasirinkti tik \"+e.maximum+\" element\";return i+=n(e.maximum,\"ą\",\"us\",\"ų\")},noResults:function(){return\"Atitikmenų nerasta\"},searching:function(){return\"Ieškoma…\"},removeAllItems:function(){return\"Pašalinti visus elementus\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/lv.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/lv\",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i=\"Lūdzu ievadiet par  \"+u;return(i+=\" simbol\"+e(u,\"iem\",\"u\",\"iem\"))+\" mazāk\"},inputTooShort:function(n){var u=n.minimum-n.input.length,i=\"Lūdzu ievadiet vēl \"+u;return i+=\" simbol\"+e(u,\"us\",\"u\",\"us\")},loadingMore:function(){return\"Datu ielāde…\"},maximumSelected:function(n){var u=\"Jūs varat izvēlēties ne vairāk kā \"+n.maximum;return u+=\" element\"+e(n.maximum,\"us\",\"u\",\"us\")},noResults:function(){return\"Sakritību nav\"},searching:function(){return\"Meklēšana…\"},removeAllItems:function(){return\"Noņemt visus vienumus\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/mk.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/mk\",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,\"Ве молиме внесете \"+n.maximum+\" помалку карактер\");return 1!==n.maximum&&(e+=\"и\"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,\"Ве молиме внесете уште \"+n.maximum+\" карактер\");return 1!==n.maximum&&(e+=\"и\"),e},loadingMore:function(){return\"Вчитување резултати…\"},maximumSelected:function(n){var e=\"Можете да изберете само \"+n.maximum+\" ставк\";return 1===n.maximum?e+=\"а\":e+=\"и\",e},noResults:function(){return\"Нема пронајдено совпаѓања\"},searching:function(){return\"Пребарување…\"},removeAllItems:function(){return\"Отстрани ги сите предмети\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/ms.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ms\",[],function(){return{errorLoading:function(){return\"Keputusan tidak berjaya dimuatkan.\"},inputTooLong:function(n){return\"Sila hapuskan \"+(n.input.length-n.maximum)+\" aksara\"},inputTooShort:function(n){return\"Sila masukkan \"+(n.minimum-n.input.length)+\" atau lebih aksara\"},loadingMore:function(){return\"Sedang memuatkan keputusan…\"},maximumSelected:function(n){return\"Anda hanya boleh memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tiada padanan yang ditemui\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Keluarkan semua item\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/nb.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nb\",[],function(){return{errorLoading:function(){return\"Kunne ikke hente resultater.\"},inputTooLong:function(e){return\"Vennligst fjern \"+(e.input.length-e.maximum)+\" tegn\"},inputTooShort:function(e){return\"Vennligst skriv inn \"+(e.minimum-e.input.length)+\" tegn til\"},loadingMore:function(){return\"Laster flere resultater…\"},maximumSelected:function(e){return\"Du kan velge maks \"+e.maximum+\" elementer\"},noResults:function(){return\"Ingen treff\"},searching:function(){return\"Søker…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/ne.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ne\",[],function(){return{errorLoading:function(){return\"नतिजाहरु देखाउन सकिएन।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"कृपया \"+e+\" अक्षर मेटाउनुहोस्।\";return 1!=e&&(u+=\"कृपया \"+e+\" अक्षरहरु मेटाउनुहोस्।\"),u},inputTooShort:function(n){return\"कृपया बाँकी रहेका \"+(n.minimum-n.input.length)+\" वा अरु धेरै अक्षरहरु भर्नुहोस्।\"},loadingMore:function(){return\"अरु नतिजाहरु भरिँदैछन् …\"},maximumSelected:function(n){var e=\"तँपाई \"+n.maximum+\" वस्तु मात्र छान्न पाउँनुहुन्छ।\";return 1!=n.maximum&&(e=\"तँपाई \"+n.maximum+\" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।\"),e},noResults:function(){return\"कुनै पनि नतिजा भेटिएन।\"},searching:function(){return\"खोजि हुँदैछ…\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/nl.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nl\",[],function(){return{errorLoading:function(){return\"De resultaten konden niet worden geladen.\"},inputTooLong:function(e){return\"Gelieve \"+(e.input.length-e.maximum)+\" karakters te verwijderen\"},inputTooShort:function(e){return\"Gelieve \"+(e.minimum-e.input.length)+\" of meer karakters in te voeren\"},loadingMore:function(){return\"Meer resultaten laden…\"},maximumSelected:function(e){var n=1==e.maximum?\"kan\":\"kunnen\",r=\"Er \"+n+\" maar \"+e.maximum+\" item\";return 1!=e.maximum&&(r+=\"s\"),r+=\" worden geselecteerd\"},noResults:function(){return\"Geen resultaten gevonden…\"},searching:function(){return\"Zoeken…\"},removeAllItems:function(){return\"Verwijder alle items\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/pl.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/pl\",[],function(){var n=[\"znak\",\"znaki\",\"znaków\"],e=[\"element\",\"elementy\",\"elementów\"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return\"Nie można załadować wyników.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Usuń \"+t+\" \"+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Podaj przynajmniej \"+t+\" \"+r(t,n)},loadingMore:function(){return\"Trwa ładowanie…\"},maximumSelected:function(n){return\"Możesz zaznaczyć tylko \"+n.maximum+\" \"+r(n.maximum,e)},noResults:function(){return\"Brak wyników\"},searching:function(){return\"Trwa wyszukiwanie…\"},removeAllItems:function(){return\"Usuń wszystkie przedmioty\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/ps.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ps\",[],function(){return{errorLoading:function(){return\"پايلي نه سي ترلاسه کېدای\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"د مهربانۍ لمخي \"+e+\" توری ړنګ کړئ\";return 1!=e&&(r=r.replace(\"توری\",\"توري\")),r},inputTooShort:function(n){return\"لږ تر لږه \"+(n.minimum-n.input.length)+\" يا ډېر توري وليکئ\"},loadingMore:function(){return\"نوري پايلي ترلاسه کيږي...\"},maximumSelected:function(n){var e=\"تاسو يوازي \"+n.maximum+\" قلم په نښه کولای سی\";return 1!=n.maximum&&(e=e.replace(\"قلم\",\"قلمونه\")),e},noResults:function(){return\"پايلي و نه موندل سوې\"},searching:function(){return\"لټول کيږي...\"},removeAllItems:function(){return\"ټول توکي لرې کړئ\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/pt-BR.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt-BR\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Apague \"+n+\" caracter\";return 1!=n&&(r+=\"es\"),r},inputTooShort:function(e){return\"Digite \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"Carregando mais resultados…\"},maximumSelected:function(e){var n=\"Você só pode selecionar \"+e.maximum+\" ite\";return 1==e.maximum?n+=\"m\":n+=\"ns\",n},noResults:function(){return\"Nenhum resultado encontrado\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/pt.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,n=\"Por favor apague \"+r+\" \";return n+=1!=r?\"caracteres\":\"caractere\"},inputTooShort:function(e){return\"Introduza \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"A carregar mais resultados…\"},maximumSelected:function(e){var r=\"Apenas pode seleccionar \"+e.maximum+\" \";return r+=1!=e.maximum?\"itens\":\"item\"},noResults:function(){return\"Sem resultados\"},searching:function(){return\"A procurar…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/ro.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ro\",[],function(){return{errorLoading:function(){return\"Rezultatele nu au putut fi incărcate.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vă rugăm să ștergeți\"+t+\" caracter\";return 1!==t&&(n+=\"e\"),n},inputTooShort:function(e){return\"Vă rugăm să introduceți \"+(e.minimum-e.input.length)+\" sau mai multe caractere\"},loadingMore:function(){return\"Se încarcă mai multe rezultate…\"},maximumSelected:function(e){var t=\"Aveți voie să selectați cel mult \"+e.maximum;return t+=\" element\",1!==e.maximum&&(t+=\"e\"),t},noResults:function(){return\"Nu au fost găsite rezultate\"},searching:function(){return\"Căutare…\"},removeAllItems:function(){return\"Eliminați toate elementele\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/ru.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ru\",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return\"Невозможно загрузить результаты\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Пожалуйста, введите на \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\"),u+=\" меньше\"},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Пожалуйста, введите ещё хотя бы \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\")},loadingMore:function(){return\"Загрузка данных…\"},maximumSelected:function(e){var r=\"Вы можете выбрать не более \"+e.maximum+\" элемент\";return r+=n(e.maximum,\"\",\"a\",\"ов\")},noResults:function(){return\"Совпадений не найдено\"},searching:function(){return\"Поиск…\"},removeAllItems:function(){return\"Удалить все элементы\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/sk.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sk\",[],function(){var e={2:function(e){return e?\"dva\":\"dve\"},3:function(){return\"tri\"},4:function(){return\"štyri\"}};return{errorLoading:function(){return\"Výsledky sa nepodarilo načítať.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadajte o jeden znak menej\":t>=2&&t<=4?\"Prosím, zadajte o \"+e[t](!0)+\" znaky menej\":\"Prosím, zadajte o \"+t+\" znakov menej\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadajte ešte jeden znak\":t<=4?\"Prosím, zadajte ešte ďalšie \"+e[t](!0)+\" znaky\":\"Prosím, zadajte ešte ďalších \"+t+\" znakov\"},loadingMore:function(){return\"Načítanie ďalších výsledkov…\"},maximumSelected:function(n){return 1==n.maximum?\"Môžete zvoliť len jednu položku\":n.maximum>=2&&n.maximum<=4?\"Môžete zvoliť najviac \"+e[n.maximum](!1)+\" položky\":\"Môžete zvoliť najviac \"+n.maximum+\" položiek\"},noResults:function(){return\"Nenašli sa žiadne položky\"},searching:function(){return\"Vyhľadávanie…\"},removeAllItems:function(){return\"Odstráňte všetky položky\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/sl.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sl\",[],function(){return{errorLoading:function(){return\"Zadetkov iskanja ni bilo mogoče naložiti.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Prosim zbrišite \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Prosim vpišite še \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},loadingMore:function(){return\"Nalagam več zadetkov…\"},maximumSelected:function(e){var n=\"Označite lahko največ \"+e.maximum+\" predmet\";return 2==e.maximum?n+=\"a\":1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Ni zadetkov.\"},searching:function(){return\"Iščem…\"},removeAllItems:function(){return\"Odstranite vse elemente\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/sq.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sq\",[],function(){return{errorLoading:function(){return\"Rezultatet nuk mund të ngarkoheshin.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Të lutem fshi \"+n+\" karakter\";return 1!=n&&(t+=\"e\"),t},inputTooShort:function(e){return\"Të lutem shkruaj \"+(e.minimum-e.input.length)+\" ose më shumë karaktere\"},loadingMore:function(){return\"Duke ngarkuar më shumë rezultate…\"},maximumSelected:function(e){var n=\"Mund të zgjedhësh vetëm \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Nuk u gjet asnjë rezultat\"},searching:function(){return\"Duke kërkuar…\"},removeAllItems:function(){return\"Hiq të gjitha sendet\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/sr-Cyrl.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sr-Cyrl\",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return\"Преузимање није успело.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Обришите \"+r+\" симбол\";return u+=n(r,\"\",\"а\",\"а\")},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Укуцајте бар још \"+r+\" симбол\";return u+=n(r,\"\",\"а\",\"а\")},loadingMore:function(){return\"Преузимање још резултата…\"},maximumSelected:function(e){var r=\"Можете изабрати само \"+e.maximum+\" ставк\";return r+=n(e.maximum,\"у\",\"е\",\"и\")},noResults:function(){return\"Ништа није пронађено\"},searching:function(){return\"Претрага…\"},removeAllItems:function(){return\"Уклоните све ставке\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/sr.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sr\",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return\"Preuzimanje nije uspelo.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,t=\"Obrišite \"+r+\" simbol\";return t+=n(r,\"\",\"a\",\"a\")},inputTooShort:function(e){var r=e.minimum-e.input.length,t=\"Ukucajte bar još \"+r+\" simbol\";return t+=n(r,\"\",\"a\",\"a\")},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(e){var r=\"Možete izabrati samo \"+e.maximum+\" stavk\";return r+=n(e.maximum,\"u\",\"e\",\"i\")},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Уклоните све ставке\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/sv.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sv\",[],function(){return{errorLoading:function(){return\"Resultat kunde inte laddas.\"},inputTooLong:function(n){return\"Vänligen sudda ut \"+(n.input.length-n.maximum)+\" tecken\"},inputTooShort:function(n){return\"Vänligen skriv in \"+(n.minimum-n.input.length)+\" eller fler tecken\"},loadingMore:function(){return\"Laddar fler resultat…\"},maximumSelected:function(n){return\"Du kan max välja \"+n.maximum+\" element\"},noResults:function(){return\"Inga träffar\"},searching:function(){return\"Söker…\"},removeAllItems:function(){return\"Ta bort alla objekt\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/th.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/th\",[],function(){return{errorLoading:function(){return\"ไม่สามารถค้นข้อมูลได้\"},inputTooLong:function(n){return\"โปรดลบออก \"+(n.input.length-n.maximum)+\" ตัวอักษร\"},inputTooShort:function(n){return\"โปรดพิมพ์เพิ่มอีก \"+(n.minimum-n.input.length)+\" ตัวอักษร\"},loadingMore:function(){return\"กำลังค้นข้อมูลเพิ่ม…\"},maximumSelected:function(n){return\"คุณสามารถเลือกได้ไม่เกิน \"+n.maximum+\" รายการ\"},noResults:function(){return\"ไม่พบข้อมูล\"},searching:function(){return\"กำลังค้นข้อมูล…\"},removeAllItems:function(){return\"ลบรายการทั้งหมด\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/tk.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/tk\",[],function(){return{errorLoading:function(){return\"Netije ýüklenmedi.\"},inputTooLong:function(e){return e.input.length-e.maximum+\" harp bozuň.\"},inputTooShort:function(e){return\"Ýene-de iň az \"+(e.minimum-e.input.length)+\" harp ýazyň.\"},loadingMore:function(){return\"Köpräk netije görkezilýär…\"},maximumSelected:function(e){return\"Diňe \"+e.maximum+\" sanysyny saýlaň.\"},noResults:function(){return\"Netije tapylmady.\"},searching:function(){return\"Gözlenýär…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define,e.require}();"
  },
  {
    "path": "static/scripts/i18n/tr.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/tr\",[],function(){return{errorLoading:function(){return\"Sonuç yüklenemedi\"},inputTooLong:function(n){return n.input.length-n.maximum+\" karakter daha girmelisiniz\"},inputTooShort:function(n){return\"En az \"+(n.minimum-n.input.length)+\" karakter daha girmelisiniz\"},loadingMore:function(){return\"Daha fazla…\"},maximumSelected:function(n){return\"Sadece \"+n.maximum+\" seçim yapabilirsiniz\"},noResults:function(){return\"Sonuç bulunamadı\"},searching:function(){return\"Aranıyor…\"},removeAllItems:function(){return\"Tüm öğeleri kaldır\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/uk.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/uk\",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return\"Неможливо завантажити результати\"},inputTooLong:function(e){return\"Будь ласка, видаліть \"+(e.input.length-e.maximum)+\" \"+n(e.maximum,\"літеру\",\"літери\",\"літер\")},inputTooShort:function(n){return\"Будь ласка, введіть \"+(n.minimum-n.input.length)+\" або більше літер\"},loadingMore:function(){return\"Завантаження інших результатів…\"},maximumSelected:function(e){return\"Ви можете вибрати лише \"+e.maximum+\" \"+n(e.maximum,\"пункт\",\"пункти\",\"пунктів\")},noResults:function(){return\"Нічого не знайдено\"},searching:function(){return\"Пошук…\"},removeAllItems:function(){return\"Видалити всі елементи\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/vi.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/vi\",[],function(){return{inputTooLong:function(n){return\"Vui lòng xóa bớt \"+(n.input.length-n.maximum)+\" ký tự\"},inputTooShort:function(n){return\"Vui lòng nhập thêm từ \"+(n.minimum-n.input.length)+\" ký tự trở lên\"},loadingMore:function(){return\"Đang lấy thêm kết quả…\"},maximumSelected:function(n){return\"Chỉ có thể chọn được \"+n.maximum+\" lựa chọn\"},noResults:function(){return\"Không tìm thấy kết quả\"},searching:function(){return\"Đang tìm…\"},removeAllItems:function(){return\"Xóa tất cả các mục\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/zh-CN.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-CN\",[],function(){return{errorLoading:function(){return\"无法载入结果。\"},inputTooLong:function(n){return\"请删除\"+(n.input.length-n.maximum)+\"个字符\"},inputTooShort:function(n){return\"请再输入至少\"+(n.minimum-n.input.length)+\"个字符\"},loadingMore:function(){return\"载入更多结果…\"},maximumSelected:function(n){return\"最多只能选择\"+n.maximum+\"个项目\"},noResults:function(){return\"未找到结果\"},searching:function(){return\"搜索中…\"},removeAllItems:function(){return\"删除所有项目\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/i18n/zh-TW.js",
    "content": "/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-TW\",[],function(){return{inputTooLong:function(n){return\"請刪掉\"+(n.input.length-n.maximum)+\"個字元\"},inputTooShort:function(n){return\"請再輸入\"+(n.minimum-n.input.length)+\"個字元\"},loadingMore:function(){return\"載入中…\"},maximumSelected:function(n){return\"你只能選擇最多\"+n.maximum+\"項\"},noResults:function(){return\"沒有找到相符的項目\"},searching:function(){return\"搜尋中…\"},removeAllItems:function(){return\"刪除所有項目\"}}}),n.define,n.require}();"
  },
  {
    "path": "static/scripts/jquery-ui/jquery.ui.progressbar.min.1.7.2.js",
    "content": "/*\n * jQuery UI Progressbar 1.7.2\n *\n * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT (MIT-LICENSE.txt)\n * and GPL (GPL-LICENSE.txt) licenses.\n *\n * http://docs.jquery.com/UI/Progressbar\n *\n * Depends:\n *   ui.core.js\n */\n(function(a){a.widget(\"ui.progressbar\",{_init:function(){this.element.addClass(\"ui-progressbar ui-widget ui-widget-content ui-corner-all\").attr({role:\"progressbar\",\"aria-valuemin\":this._valueMin(),\"aria-valuemax\":this._valueMax(),\"aria-valuenow\":this._value()});this.valueDiv=a('<div class=\"ui-progressbar-value ui-widget-header ui-corner-left\"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass(\"ui-progressbar ui-widget ui-widget-content ui-corner-all\").removeAttr(\"role\").removeAttr(\"aria-valuemin\").removeAttr(\"aria-valuemax\").removeAttr(\"aria-valuenow\").removeData(\"progressbar\").unbind(\".progressbar\");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData(\"value\",b);return this},_setData:function(b,c){switch(b){case\"value\":this.options.value=c;this._refreshValue();this._trigger(\"change\",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?\"addClass\":\"removeClass\"](\"ui-corner-right\");this.valueDiv.width(b+\"%\");this.element.attr(\"aria-valuenow\",b)}});a.extend(a.ui.progressbar,{version:\"1.7.2\",defaults:{value:0}})})(jQuery);;"
  },
  {
    "path": "static/scripts/jquery-ui/redmond/jquery-ui-1.7.2.custom.css",
    "content": "/*\n* jQuery UI CSS Framework\n* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.\n*/\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden { display: none; }\n.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }\n.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }\n.ui-helper-clearfix:after { content: \".\"; display: block; height: 0; clear: both; visibility: hidden; }\n.ui-helper-clearfix { display: inline-block; }\n/* required comment for clearfix to work in Opera \\*/\n* html .ui-helper-clearfix { height:1%; }\n.ui-helper-clearfix { display:block; }\n/* end clearfix */\n.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled { cursor: default !important; }\n\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }\n\n\n\n/*\n* jQuery UI CSS Framework\n* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px\n*/\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }\n.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }\n.ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }\n.ui-widget-content a { color: #222222; }\n.ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }\n.ui-widget-header a { color: #ffffff; }\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; outline: none; }\n.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; outline: none; }\n.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; outline: none; }\n.ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; outline: none; }\n.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; outline: none; }\n.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; outline: none; text-decoration: none; }\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }\n.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }\n.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }\n.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }\n.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }\n.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }\n.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }\n.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }\n.ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }\n.ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }\n.ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }\n.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }\n.ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }\n.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }\n.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }\n\n/* positioning */\n.ui-icon-carat-1-n { background-position: 0 0; }\n.ui-icon-carat-1-ne { background-position: -16px 0; }\n.ui-icon-carat-1-e { background-position: -32px 0; }\n.ui-icon-carat-1-se { background-position: -48px 0; }\n.ui-icon-carat-1-s { background-position: -64px 0; }\n.ui-icon-carat-1-sw { background-position: -80px 0; }\n.ui-icon-carat-1-w { background-position: -96px 0; }\n.ui-icon-carat-1-nw { background-position: -112px 0; }\n.ui-icon-carat-2-n-s { background-position: -128px 0; }\n.ui-icon-carat-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -64px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -64px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 0 -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-off { background-position: -96px -144px; }\n.ui-icon-radio-on { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; }\n.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; }\n.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }\n.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }\n.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; }\n.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }\n.ui-corner-right {  -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }\n.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }\n.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; }\n\n/* Overlays */\n.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }\n.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion\n----------------------------------*/\n.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }\n.ui-accordion .ui-accordion-li-fix { display: inline; }\n.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }\n.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }\n.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }\n.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }\n.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker\n----------------------------------*/\n.ui-datepicker { width: 17em; padding: .2em .2em 0; }\n.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }\n.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }\n.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }\n.ui-datepicker .ui-datepicker-prev { left:2px; }\n.ui-datepicker .ui-datepicker-next { right:2px; }\n.ui-datepicker .ui-datepicker-prev-hover { left:1px; }\n.ui-datepicker .ui-datepicker-next-hover { right:1px; }\n.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }\n.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }\n.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }\n.ui-datepicker select.ui-datepicker-month-year {width: 100%;}\n.ui-datepicker select.ui-datepicker-month, \n.ui-datepicker select.ui-datepicker-year { width: 49%;}\n.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }\n.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }\n.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }\n.ui-datepicker td { border: 0; padding: 1px; }\n.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }\n.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }\n.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi { width:auto; }\n.ui-datepicker-multi .ui-datepicker-group { float:left; }\n.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }\n.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }\n.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }\n.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }\n.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }\n.ui-datepicker-row-break { clear:both; width:100%; }\n\n/* RTL support */\n.ui-datepicker-rtl { direction: rtl; }\n.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }\n.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group { float:right; }\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }\n\n/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */\n.ui-datepicker-cover {\n    display: none; /*sorry for IE5*/\n    display/**/: block; /*sorry for IE5*/\n    position: absolute; /*must have*/\n    z-index: -1; /*must have*/\n    filter: mask(); /*must have*/\n    top: -4px; /*must have*/\n    left: -4px; /*must have*/\n    width: 200px; /*must have*/\n    height: 200px; /*must have*/\n}/* Dialog\n----------------------------------*/\n.ui-dialog { position: relative; padding: .2em; width: 300px; }\n.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }\n.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } \n.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }\n.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }\n.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }\n.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }\n.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }\n.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }\n.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }\n.ui-draggable .ui-dialog-titlebar { cursor: move; }\n/* Progressbar\n----------------------------------*/\n.ui-progressbar { height:2em; text-align: left; }\n.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable\n----------------------------------*/\n.ui-resizable { position: relative;}\n.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}\n.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }\n.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }\n.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }\n.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }\n.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }\n.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }\n.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }\n.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }\n.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider\n----------------------------------*/\n.ui-slider { position: relative; text-align: left; }\n.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }\n.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }\n\n.ui-slider-horizontal { height: .8em; }\n.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }\n.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }\n.ui-slider-horizontal .ui-slider-range-min { left: 0; }\n.ui-slider-horizontal .ui-slider-range-max { right: 0; }\n\n.ui-slider-vertical { width: .8em; height: 100px; }\n.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }\n.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }\n.ui-slider-vertical .ui-slider-range-min { bottom: 0; }\n.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs\n----------------------------------*/\n.ui-tabs { padding: .2em; zoom: 1; }\n.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }\n.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }\n.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }\n.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }\n.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */\n.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }\n.ui-tabs .ui-tabs-hide { display: none !important; }\n"
  },
  {
    "path": "static/scripts/wp-stateless-batch.js",
    "content": "wpStatelessBatch = {\n  token: window.wp_stateless_batch.REST_API_TOKEN,\n  apiRoot: window.wp_stateless_batch.api_root + 'batch/',\n  interval: null,\n\n  startPolling: function () {\n    var that = this\n    this.stopPolling()\n    this.interval = setInterval(function () {\n      that.getState()\n    }, 1000)\n  },\n\n  stopPolling: function () {\n    clearInterval(this.interval)\n  },\n\n  updateState: function(state, action = false) {\n    var detail = {\n      state,\n      action,\n    }\n\n    var event = new CustomEvent('wp-stateless-batch-state-updated', { detail })\n    \n    document.dispatchEvent(event)\n\n    if (state.is_running) {\n      this.startPolling()\n    } else {\n      this.stopPolling()\n    }\n  },\n\n  processFail: function(error) {\n    console.log(error)\n\n    var event = new CustomEvent('wp-stateless-batch-error', { detail: error })\n    \n    document.dispatchEvent(event)\n  },\n\n  processAction: function(action, payload, callback = null) {\n    var that = this\n\n    var data = {\n      action,\n      ...payload,\n    }\n\n    jQuery.ajax({\n      method: 'POST',\n      url: that.apiRoot + 'action',\n      headers: {\n        'x-wps-auth': that.token,\n        'Content-Type': 'application/json',\n      },\n      dataType: 'json',\n      data: JSON.stringify(data),\n    })\n      .then(function (response) {\n        that.updateState(response.data, true)\n      })\n      .fail(function (error) {\n        that.processFail(error)\n      })\n      .always(function () {\n        if (callback) {\n          callback()\n        }\n      })\n  },\n\n  getState: function(data = {}) {\n    var that = this\n\n    jQuery.ajax({\n      method: 'GET',\n      url: that.apiRoot + 'state',\n      data,\n      headers: {\n        'x-wps-auth': that.token,\n        'Content-Type': 'application/json',\n      },\n    })\n      .then(function (response) {\n        that.updateState(response.data)\n      })\n      .fail(function (error) {\n        that.processFail(error)\n      })\n  },\n\n  init: function() {\n    if ( window.wp_stateless_batch.is_running ) {\n      this.startPolling()\n    }\n\n    // Check if we have a batch running on the backend\n    jQuery(document).on('heartbeat-tick', function (e, data) {\n      if ( data.hasOwnProperty('stateless-batch-running') && data['stateless-batch-running'] ) {\n        this.startPolling()\n      }\n    }.bind(this))\n  }\n}\n\nwpStatelessBatch.init()\n\n/**\n * Manage data updates\n */\nfunction wpMigrations($) {\n  function blockUI() {\n    $('#migration-action .button').addClass('disabled')\n  }\n\n  function unblockUI() {\n    $('#migration-action .button').removeClass('disabled')\n  }\n\n  // Process state\n  document.addEventListener('wp-stateless-batch-state-updated', function (e) {\n    var state = e.detail.state\n    // 'action' indicates that the action was just started. \n    // If the migration was quick - the state is empty and we need to update the state\n    // Otherwise the state will contain the current running migration ID\n    var forceRefresh = e.detail.action && !state.hasOwnProperty('id')\n\n    if ( (!state.is_migration && !state.hasOwnProperty('migrations')) || forceRefresh ) {\n      // If have migrations running on the frontend - we should finalize it\n      if ( $('#migration-action.can-pause').length || $('#migration-action.can-resume').length || forceRefresh ) {\n        wpStatelessBatch.getState({\n          force_migrations: true,\n        })\n      }\n\n      return\n    }\n\n    if ( !state.hasOwnProperty('migrations') ) {\n      return\n    }\n\n    // Check if we need to wait for other migrations to start\n    // If there are more migrations - wait 5 seconds and check again\n    if ( !state.is_running && !state.is_paused ) {\n      var migrationsCanStart = Object.values(state.migrations).some(function(migration) { return migration.can_start })\n      if ( migrationsCanStart ) {\n        setTimeout(function() {\n          wpStatelessBatch.getState()\n        }, 5000)\n  \n        return\n      } else {\n        $('.metabox-holder.migrations-wrap').remove()\n      }\n    }\n\n    var migrationElement = $('#migration-action')\n\n    if ( state.migrations &&  state.hasOwnProperty('is_migration') && state.hasOwnProperty('id') ) {\n      var migration = state.migrations[ state.id ];\n      migrationElement.attr('data-id', state.id)\n\n      if ( migration.can_start ) {\n        migrationElement.addClass('can-start')\n      } else {\n        migrationElement.removeClass('can-start')\n      }\n\n      if ( migration.can_pause ) {\n        migrationElement.addClass('can-pause')\n      } else {\n        migrationElement.removeClass('can-pause')\n      }\n\n      if ( migration.can_resume ) {\n        migrationElement.addClass('can-resume')\n      } else {\n        migrationElement.removeClass('can-resume')\n      }\n\n      if ( migration.hasOwnProperty('ui_message') && migration.ui_message ) {\n        migrationElement.find('.description').html(migration.ui_message)\n      } else {\n        migrationElement.find('.description').text('')\n      }\n    }\n\n    // Display progress\n    if ( state.is_running || state.is_paused ) {\n      if ( state.hasOwnProperty('total') && state.hasOwnProperty('completed') ) {\n        var migrationElement = $('#migration-action')\n  \n        var percent = state.total > 0 ? Math.floor( (state.completed / state.total) * 100 ) + '%' : ''\n        migrationElement.find('.progress .percent').html(percent)\n        migrationElement.find('.progress .bar').css('width', percent)\n      }\n    }\n  })\n\n  // Process notifications\n  document.addEventListener('wp-stateless-batch-state-updated', function (e) {\n    var state = e.detail.state\n\n    var notify = state.hasOwnProperty('migrations_notify') ? state.migrations_notify : false\n\n    if ( state.is_running ) {\n      $('#stateless-notice-migrations-required').addClass('hidden')\n      $('#stateless-notice-migrations-finished').addClass('hidden')\n      $('#stateless-notice-migrations-running').removeClass('hidden')\n    } else {\n      $('#stateless-notice-migrations-running').addClass('hidden')\n      $('#stateless-notice-migrations-required').addClass('hidden')\n      $('#stateless-notice-migrations-finished').addClass('hidden')\n\n      if ( notify === 'require' ) {\n        $('#stateless-notice-migrations-required').removeClass('hidden')\n      } else if ( notify === 'finished' ) {\n        $('#stateless-notice-migrations-finished').removeClass('hidden')\n      }\n    }\n  })\n\n  // Migration confirmation dialog\n  $( \"#stateless-migration-confirm\" ).dialog({\n    resizable: false,\n    height: \"auto\",\n    width: 500,\n    modal: true,\n    draggable: false,\n    autoOpen: false,\n    position: { my: \"center\", at: \"center\", of: window },\n    open: function(event, ui) {\n      $('body').css('overflow', 'hidden')\n\n      $('.ui-dialog-buttonset').find('.ui-button').attr('class', 'button')\n      $('.ui-dialog-buttonset').find('.button').last().addClass('button-primary')\n\n      $('.ui-dialog').removeClass('ui-corner-all').addClass('stateless-migration-confirm');\n      $('.ui-dialog-titlebar').removeClass('ui-corner-all');\n\n      // backdrop\n      $('.ui-widget-overlay').attr('class', 'media-modal-backdrop');\n    },\n    close: function(event, ui) {\n      unblockUI()\n      $('body').css('overflow', 'auto')\n      $('#migration-action').removeClass('processing-action');\n      $('#migration-action').find('.button.start').removeClass('disabled');\n      $('#migration-action').find('.description').text( '' );\n    },\n    buttons: [\n      {\n        text: stateless_l10n.start_optimization,\n        click: function() {},\n      },\n      {\n        text: stateless_l10n.cancel,\n        click: function() {\n          $( this ).dialog( 'close' )\n        },\n      },\n    ],\n  })\n\n  // Migration actions\n  $('#migration-action .button').click(function (e) {\n    e.preventDefault()\n\n    if ( $(e.target).hasClass('disabled') ) {\n      return;\n    }\n    \n    blockUI()\n    \n    var id = $('#migration-action').data('id')\n    var action = $(e.target).data('action')\n\n    if ( !id || !action ) {\n      return\n    }\n\n    if ( action === 'start' ) {\n      $( '#stateless-migration-confirm' ).attr('data-id', id)\n\n      $('#stateless-migration-confirm').closest('.ui-dialog').find('.ui-dialog-buttonset .ui-button').first().click(function(e) {\n        e.preventDefault()\n\n        $( '#stateless-migration-confirm' ).dialog('close')\n        var id = $( '#stateless-migration-confirm' ).attr('data-id')\n        var migrationElement = $('#migration-action')\n\n        migrationElement.addClass('processing-action');\n        migrationElement.find('.button.start').addClass('disabled');\n        migrationElement.find('.description').text( stateless_l10n.starting );\n\n        wpStatelessBatch.processAction(action, {\n          id,\n          is_migration: true,\n          email: $('input[name=\"email-notification\"]:checked').val(),\n          queue: migrationElement.data('queue'),\n        }, function() {\n          unblockUI();\n          migrationElement.removeClass('processing-action');\n          migrationElement.find('.button.start').removeClass('disabled');\n          migrationElement.find('.description').text( '' );\n        })\n      })\n\n      $( \"#stateless-migration-confirm\" ).dialog('open')\n      return\n    } else {\n      wpStatelessBatch.processAction(action, {\n        id,\n        is_migration: true,\n      }, unblockUI)\n    }\n  }.bind(this))\n}\n\nwpMigrations(jQuery)\n"
  },
  {
    "path": "static/scripts/wp-stateless-settings.js",
    "content": "jQuery(document).ready(function ($) {\n  jQuery('.nav-tab-wrapper a').on('click', function (e) {\n    e.preventDefault()\n\n    var tab = jQuery(this).attr('href')\n    \n    if ( tab.indexOf('#') === 0 ) {\n      jQuery(this).addClass('nav-tab-active').siblings().removeClass('nav-tab-active')\n      jQuery(`.stless_settings ${tab}`).addClass('active').siblings().removeClass('active')\n\n      var url = new URL(window.location.href)\n      url.searchParams.set('tab', tab.replace('#', ''))\n  \n      window.history.replaceState(null, '', url.toString())\n    }\n  })\n  \n  $(document).on('click', '.pointer', function (e) {\n    e.stopPropagation()\n    var pointer = $(this)\n    pointer\n      .pointer({\n        content:\n          '<h3>' +\n          pointer.data('title') +\n          '</h3><p>' +\n          pointer.data('text') +\n          '</p>',\n        position: pointer.data('position'),\n      })\n      .pointer('open')\n  })\n\n  $(document).on('click', function () {\n    $('.wp-pointer').hide()\n  })\n\n  $(document).on('click', '.wp-pointer', function (e) {\n    e.stopPropagation()\n  })\n\n  $(document).on('click', '.stateless-info-button', function (e) {\n    e.stopPropagation()\n    e.preventDefault()\n\n    var opened = $(this).closest('.stateless-info-heading').hasClass('open')\n    var id = $(this).data('section')\n    \n    if (opened) {\n      $(this).closest('.stateless-info-heading').removeClass('open')\n      $('#' + id).addClass('hidden')\n    } else {\n      $(this).closest('.stateless-info-heading').addClass('open')\n      $('#' + id).removeClass('hidden')\n    }\n  })\n\n  // Copy Status Info to clipboard\n  var clipboard = new ClipboardJS('.stateless-info-heading .copy-button')\n\n  clipboard.on('success', function(e) {\n    $('.stateless-info-copy-success').show();\n\n    setTimeout(function() {\n      $('.stateless-info-copy-success').fadeOut(500);\n    }, 5000);\n  })\n\n  // Check if API and AJAX is available\n  function setServiceStatus(id, status) {\n    var data = $('.stateless-info-heading .button.copy-button').attr('data-clipboard-text');\n    $('.stateless-info-heading .button.copy-button').attr( 'data-clipboard-text', data.replace('%' + id + '%', status));\n\n    $(`#stateless-info-block-stateless .${id} .value`).text(status);\n  }\n\n  $.ajax({\n    method: 'GET',\n    url: window.wp_stateless_configs.api_root + 'status',\n  })\n    .then(function() {\n      setServiceStatus( 'api_status', window.wp_stateless_configs.text_ok );\n    })\n    .fail(function() {\n      setServiceStatus( 'api_status', window.wp_stateless_configs.text_fail );\n    })\n\n  $.ajax({\n    method: 'POST',\n    url: window.wp_stateless_configs.ajaxurl,\n    data: {\n      action: 'stateless_check_ajax',\n      _ajax_nonce: window.wp_stateless_configs.stateless_check_ajax_nonce,\n    }\n  })\n    .then(function() {\n      setServiceStatus( 'ajax_status', window.wp_stateless_configs.text_ok );\n    })\n    .fail(function() {\n      setServiceStatus( 'ajax_status', window.wp_stateless_configs.text_fail );\n    })\n\n})\n"
  },
  {
    "path": "static/scripts/wp-stateless-uploads.js",
    "content": "/**\n * Uploads Page specific scripts.\n *\n * @author korotkov@UD\n */\n\njQuery(document).ready(function(){\n\n  jQuery('.sm_inline_sync').one( 'click', function( e ) {\n\n    var that = jQuery(this);\n\n    that.html('Please wait...');\n\n    jQuery\n      .ajax({\n        method: 'POST',\n        url: ajaxurl,\n        data: {\n          action: that.data('type') == 'image' ? \"stateless_process_image\" : \"stateless_process_file\",\n          id: that.data('id'),\n          size: that.data('size'),\n          _ajax_nonce: stateless_upload.inline_sync_nonce ?? '',\n        }\n      })\n      .done(function( response ) {\n        if ( response.success ) {\n          if (that.data('reload_page')) {\n            location.reload();\n          }\n          that.replaceWith( '<span style=\"color:#00520a\">'+response.data+'</span>' );\n        } else {\n          that.replaceWith( '<span style=\"color:#a00\">'+response.data+'</span>' );\n        }\n      })\n      .fail(function( jqXHR, textStatus, message ) {\n        that.replaceWith( '<span style=\"color:#a00\">'+message+'. Check your server configuration.</span>' );\n      });\n  });\n\n});\n"
  },
  {
    "path": "static/scripts/wp-stateless.js",
    "content": "var $wildcards_select = jQuery('.select-wildcards').select2({\n  tags: true,\n  tokenSeparators: ['/'],\n  createTag: function (params) {\n    var term = jQuery.trim(params.term)\n\n    if (term === '') {\n      return null\n    }\n\n    let tags = [\n      '%site_id%',\n      '%site_url%',\n      '%site_url_host%',\n      '%site_url_path%',\n      '%date_year/date_month%',\n    ]\n\n    // Remove special chars from tags\n    if (!/^[a-zA-Z0-9_\\-.]+$/.test(term) && jQuery.inArray(term, tags) == -1) {\n      term = term.replace(/[^a-zA-Z0-9_\\-.]/g, '')\n    }\n\n    return {\n      id: term,\n      text: term,\n    }\n  },\n  templateSelection: function (state) {\n    // Add slash at the en of the tag\n    return state.text\n  },\n  insertTag: function (data, tag) {\n    // Insert the tag at the end of the results\n    data.push(tag)\n  },\n})\n\njQuery('.select-wildcards').on('select2:select', function (evt) {\n  var element = evt.params.data.element\n  var $element = jQuery(element)\n  let $element_value = $element.value\n\n  $element.detach()\n  jQuery(this).append($element)\n\n  /**\n   * add slash after tag\n   */\n  if ($element_value !== '/') {\n    // Create the DOM option that is pre-selected by default\n    var newState = new Option('/', '/', true, true)\n    jQuery(newState).prop('disabled', true)\n    // Append it to the select\n    jQuery(this).append(newState)\n  }\n\n  jQuery(this).trigger('change')\n  prepare_preview_url()\n})\n\njQuery('.select-wildcards').on('select2:unselect', function (evt) {\n  if (evt.params.data.id === '/') {\n    var element = evt.params.data.element\n    var $element = jQuery(element)\n    $element.detach()\n  }\n  prepare_preview_url()\n})\n\nfunction prepare_preview_url() {\n  let root_dir = ''\n  let selected_wildcards = jQuery('.select-wildcards').val()\n\n  if (selected_wildcards !== null) {\n    root_dir = selected_wildcards.join('/')\n  }\n\n  jQuery('#sm_root_dir').val(root_dir)\n  jQuery('#sm_root_dir').trigger('change')\n}\n\nfunction replace_wildcard_to_the_end(wildcards, remove_slashes = false) {\n  if (remove_slashes) {\n    jQuery('.select-wildcards > option').each(function () {\n      if (this.value == '/') {\n        jQuery(this).detach()\n      }\n    })\n  }\n  wildcards.forEach(function (wildcard) {\n    wildcard_exist = false\n    jQuery('.select-wildcards > option').each(function () {\n      if (this.value === wildcard && this.value !== '/') {\n        jQuery(this).detach()\n        jQuery('.select-wildcards').append(jQuery(this))\n        wildcard_exist = true\n      }\n    })\n    if (!wildcard_exist) {\n      var newState = new Option('/', '/', true, true)\n      jQuery(newState).prop('disabled', true)\n      // Append it to the select\n      jQuery('.select-wildcards').append(newState)\n    }\n  })\n}\n\n// Application\nvar wpStatelessSettingsApp = {\n  sm: {},\n  backup: {},\n  is_ssl: false,\n\n  // Show notices for readonly fields\n  showNotice: function (field) {\n    if (this.sm.readonly && this.sm.readonly[field]) {\n      var slug = this.sm.readonly[field]\n     \n      jQuery(`#notice-${field}`).html(this.sm.strings[slug])\n      jQuery(`[name=\"sm[${field}]\"]`).prop('disabled', true)\n    } else {\n      jQuery(`#notice-${field}`).html('')\n      jQuery(`[name=\"sm[${field}]\"]`).prop('disabled', false)\n    }\n  },\n\n  showSupportedTypes: function () {\n    value = jQuery('#sm_body_rewrite').val()\n\n    if ( ['true', 'enable_editor', 'enable_meta'].indexOf(value) > -1 ) {\n      jQuery('.supported-file-types').show()\n    } else {\n      jQuery('.supported-file-types').hide()\n    }\n  },\n\n  setIsSSL: function () {\n    this.is_ssl = jQuery('#custom_domain').val().indexOf('https://') === 0\n\n    if (this.is_ssl) {\n      jQuery('.notice-is-ssl').show()\n    } else {\n      jQuery('.notice-is-ssl').hide()\n    }\n  },\n\n  getRadioValue: function(name) {\n    return jQuery(`input[name=\"${name}\"]:checked`).val()    \n  },\n\n  enableHashifyFileName: function () {\n    var mode = this.getRadioValue('sm[mode]') \n\n    if ( ['stateless', 'ephemeral'].indexOf(mode) > -1 \n      && this.sm.readonly['hashify_file_name'] != 'constant' ) {\n        this.backup['hashify_file_name'] = jQuery('#cache_busting').val()\n        jQuery('#cache_busting').val('true')\n    } else if ( this.backup['hashify_file_name'] ) {\n      jQuery('#cache_busting').val( this.backup['hashify_file_name'] )\n    }\n\n    if ( ['stateless', 'ephemeral'].indexOf(mode) > -1 ) {\n      jQuery('#cache_busting').prop('disabled', true)\n    } else {\n      this.showNotice('hashify_file_name')\n    }\n\n    if ( ['stateless', 'ephemeral'].indexOf(mode) > -1 && this.sm.readonly['hashify_file_name'] != 'constant') {\n      jQuery('#notice-hashify_file_name-mode').show()\n    } else {\n      jQuery('#notice-hashify_file_name-mode').hide()\n    }\n  },\n\n  enableDynamicImageSupport: function () {\n    var mode = this.getRadioValue('sm[mode]') \n\n    if ( mode == 'stateless' && this.sm.readonly['dynamic_image_support'] != 'constant' ) {\n      this.backup['dynamic_image_support'] = jQuery('#dynamic_image_support').val()\n      jQuery('#dynamic_image_support').val('false')\n    } else if ( this.backup['dynamic_image_support'] ) {\n      jQuery('#dynamic_image_support').val( this.backup['dynamic_image_support'] )\n    }\n\n    if (mode == 'stateless') {\n      jQuery('#dynamic_image_support').prop('disabled', true)\n    } else {\n      this.showNotice('dynamic_image_support')\n    }\n\n    if (mode == 'stateless' && this.sm.readonly['dynamic_image_support'] != 'constant') {\n      jQuery('#notice-dynamic_image_support-mode').show()\n    } else {\n      jQuery('#notice-dynamic_image_support-mode').hide()\n    }\n  },\n\n  switchBucketFolderType: function() {\n    var value = jQuery('#sm_root_dir').val()\n    var folderType = jQuery('#sm_bucket_folder_type').val()\n\n    switch (value) {\n      case '%date_year/date_month%':\n        folderType = 'single-site'\n        break;\n      case 'sites/%site_id%/%date_year/date_month%':\n        folderType = 'multi-site'\n        break;\n      case '':\n        if ( this.sm.network_admin )\n        folderType = ''\n        break;\n      default:\n        folderType = 'custom'\n    }\n\n    if ( jQuery('#sm_bucket_folder_type').val() != folderType ) {\n      jQuery('#sm_bucket_folder_type').val( folderType)\n    }\n\n    setTimeout(function () {\n      jQuery('#permalink_structure').trigger('change')\n    }, 1)\n  },\n\n  switchRootDir: function() {\n    var value = jQuery('#sm_bucket_folder_type').val()\n\n    switch (value) {\n      case 'single-site':\n        replace_wildcard_to_the_end(['/', '%date_year/date_month%', '/'], true)\n        $wildcards_select\n          .val(['/', '%date_year/date_month%', '/'])\n          .trigger('change')\n        break;\n      case 'multi-site':\n        replace_wildcard_to_the_end(\n          ['/', 'sites', '/', '%site_id%', '/', '%date_year/date_month%', '/'],\n          true\n        )\n        $wildcards_select\n          .val([\n            '/',\n            'sites',\n            '/',\n            '%site_id%',\n            '/',\n            '%date_year/date_month%',\n            '/',\n          ])\n          .trigger('change')\n        break;\n      case '':\n        if ( wp_stateless_settings.network_admin ) {\n          $wildcards_select.val(null).trigger('change')\n        }\n        break;\n    }\n\n    prepare_preview_url()\n  },\n\n  generatePreviewUrl: function() {\n    var host = 'https://storage.googleapis.com/'\n    var hash =\n      jQuery('#cache_busting').val() == 'true'\n        ? Date.now().toString(36) + '-'\n        : ''\n    var custom_domain = jQuery('#custom_domain').val().toString()\n    var root_dir = jQuery('#sm_root_dir').val().toString()\n    var bucket = jQuery('#bucket_name').val().toString()\n\n    jQuery.each(this.sm.wildcards, function (index, item) {\n      var reg = new RegExp(index, 'g')\n      root_dir = root_dir.replace(reg, item[0])\n    })\n  \n    var tags = [\n      '%date_year%',\n      '%date_month%',\n      '%site_id%',\n      '%site_url%',\n      '%site_url_host%',\n      '%site_url_path%',\n    ]\n\n    var value_splitted = root_dir.split('/')\n\n    for (var i = 0; i < value_splitted.length; i++) {\n      if (\n        !/^[a-zA-Z0-9_\\-.]+$/.test(value_splitted[i]) &&\n        value_splitted[i] != '' &&\n        jQuery.inArray(value_splitted[i], tags) == -1\n      ) {\n        value_splitted[i] = value_splitted[i].replace(/[^a-zA-Z0-9_\\-.]/g, '')\n      }\n    }\n    \n    root_dir = value_splitted.join('/')\n    root_dir = root_dir.replace(/(\\/+)/g, '/')\n    root_dir = root_dir.replace(/^\\//, '')\n    root_dir = root_dir.replace(/\\/$/, '')\n\n    if (root_dir) {\n      root_dir = root_dir + '/'\n    }\n\n    custom_domain = custom_domain.replace(/\\/+$/, '') // removing trailing slashes\n    custom_domain = custom_domain.replace(/https?:\\/\\//, '') // removing http:// or https:// from the beginning.\n    host += bucket.length > 0 ? bucket : '{bucket-name}'\n\n    if (\n      custom_domain !== 'storage.googleapis.com' &&\n      bucket.length > 0 &&\n      custom_domain.length > 0 &&\n      (this.is_ssl || custom_domain == bucket)\n    ) {\n      host = this.is_ssl ? 'https://' : 'http://' // bucket name will be host\n      host += custom_domain\n    }\n\n    host += '/' + root_dir + hash + 'your-image-name.jpeg'\n\n    jQuery('#file_url_grp_preview').val(host)\n  },\n\n  showCustomEmail: function () {\n    if( jQuery('#sm_status_email_type').val() == 'custom' ) {\n      jQuery('.sm-status-email-address').show()\n    } else {\n      jQuery('.sm-status-email-address').hide()\n    }\n  },\n\n  // Init application\n  init: function () {\n    this.sm = wp_stateless_settings || {}\n    this.sm.readonly = this.sm.readonly || {}\n\n    var readonly = Object.keys(this.sm.readonly);\n\n    for (var key of readonly) {\n      this.showNotice(key)\n    }\n\n    if (this.sm.network_admin) {\n      jQuery('#cache_busting').val('true')\n      this.sm.readonly.hashify_file_name = true\n    }\n\n    // Disable root dir editing if it's readonly\n    if (this.sm.readonly['root_dir']) {\n      $wildcards_select.prop('disabled', true)\n      jQuery('#sm_bucket_folder_type').prop('disabled', true)\n    }\n\n    // Show supported file types\n    jQuery('#sm_body_rewrite').on('change', this.showSupportedTypes)\n    this.showSupportedTypes()\n\n    // Check if custom domain is SSL\n    jQuery('#custom_domain').on('change', this.setIsSSL.bind(this))\n    this.setIsSSL()\n\n    // Check if hashify file name is enabled\n    jQuery('[name=\"sm[mode]\"').on('change', this.enableHashifyFileName.bind(this))\n    this.enableHashifyFileName()\n\n    // Check if dynamic image support is enabled\n    jQuery('[name=\"sm[mode]\"').on('change', this.enableDynamicImageSupport.bind(this))\n    this.enableDynamicImageSupport()\n\n    // Switch folder type depending on root dir\n    jQuery('#sm_root_dir').on('change', this.switchBucketFolderType.bind(this))\n    this.switchBucketFolderType()\n\n    // Update root dir depending on folder type\n    jQuery('#sm_bucket_folder_type').on('change', this.switchRootDir)\n\n    // Generate preview URL\n    jQuery('#bucket_name').on('change', this.generatePreviewUrl.bind(this))\n    jQuery('#sm_root_dir').on('change', this.generatePreviewUrl.bind(this))\n    jQuery('#custom_domain').on('change', this.generatePreviewUrl.bind(this))\n    this.generatePreviewUrl()\n\n    // Update root dir depending on folder type\n    jQuery('#sm_status_email_type').on('change', this.showCustomEmail)\n    this.showCustomEmail()\n  }\n};\n\nwpStatelessSettingsApp.init();\n\n// Processing application\nwpStatelessProcessingApp = {\n  errors: [],\n  canRun: true,\n  processes: [],\n  token: window.wp_stateless_configs.REST_API_TOKEN,\n  apiRoot: window.wp_stateless_configs.api_root + 'sync/',\n\n  blockUI: function () {\n    this.canRun = false\n\n    this.processes.map( function (process) {\n      process.refreshButtons()\n    })\n  },\n\n  unblockUI: function () {\n    this.canRun = true\n\n    this.processes.map( function (process) {\n      process.refreshButtons()\n    })\n  },\n\n  /**\n   * Prevent global changes\n   */\n  preventChanges: function () {\n    var isRunning = this.processes.find( function (process) {\n      return process.is_running\n    }) ? true : false\n\n    jQuery('#save-settings,#save-compatibility').prop('disabled', isRunning)\n  },\n\n  /**\n   * Handle errors display \n   */\n  addError: function (error) {\n    this.errors.push(error)\n\n    jQuery('#stless_sync_tab #errors').show()\n\n    var html = this.errors.map(function (error) {\n      return '<li>' + error + '</li>'\n    })\n\n    jQuery('#stless_sync_tab #errors ul').html(html)\n  },\n\n  /**\n   * Process response error\n   */\n  processError: function (error) {\n    var message = error && error.responseJSON && error.responseJSON.message \n      ? error.responseJSON.message \n      : window.stateless_l10n.something_went_wrong\n  \n    this.addError(message)\n  },\n\n  /**\n   * Load process data\n   */\n  init: function () {\n    var that = this\n    that.blockUI()\n\n    jQuery.ajax({\n      method: 'GET',\n      url: that.apiRoot + 'getProcesses',\n      headers: {\n        'x-wps-auth': that.token,\n      },\n    })\n      .done(function (response) {\n        if (response && response.data) {\n          var processes = response.data || {}\n          for (var i in processes) {\n            var process = new ProcessingClass(processes[i], that)\n            process.refreshBox()\n            that.processes.push(process)\n          }\n        } else {\n          that.addError(window.stateless_l10n.something_went_wrong)\n        }\n      })\n      .fail(function (error) {\n        that.processError(error)\n      })\n      .always(function () {\n        that.unblockUI()\n      })\n  },\n\n  /**\n   * Refresh the process data\n   */\n  refreshProcess: function (process) {\n    var that = this\n\n    jQuery.ajax({\n      method: 'GET',\n      url: that.apiRoot + 'getProcess/' + String(window.btoa(process.id)).replace(/=+/, ''),\n      headers: {\n        'x-wps-auth': that.token,\n      },\n    })\n      .done(function (response) {\n        if ( response && response.data && response.ok ){\n          if (!response.data.is_running) {\n            process.stopPolling()\n            process.queued_items = process.getProgressTotal()\n            process.processed_items = process.getProgressTotal()\n\n            setTimeout(function () {\n              Object.assign(process, response.data)\n            }, 3000)\n    \n          } else {\n            Object.assign(process, response.data)\n          }\n\n          process.refreshBox()\n        }\n      })\n      .fail(function (error) {\n        process.stopPolling()\n        that.processError(error)\n      })\n  },\n\n  /**\n   * Run the process\n   */\n  runProcess: function (process) {\n    var that = this\n    that.blockUI()\n\n    var data = {\n      id: process.id,\n      limit: process.limit,\n      order: process.order,\n    }\n\n    jQuery.ajax({\n      method: 'POST',\n      url: that.apiRoot + 'run',\n      headers: {\n        'x-wps-auth': that.token,\n        'Content-Type': 'application/json',\n      },\n      dataType: 'json',\n      data: JSON.stringify(data),\n    })\n      .then(function (response) {\n        if (response && response.ok) {\n          process.is_running = true\n          process.is_stopping = false\n\n          process.refreshBox()\n          process.startPolling()\n        } else {\n          var message = response && response.data && response.data.message\n            ? response.data.message\n            : window.stateless_l10n.something_went_wrong\n\n          that.addError(message)\n        }\n      })\n      .fail(function (error) {\n        process.stopPolling()\n        that.processError(error)\n      })\n      .always(function () {\n        that.unblockUI()\n      })\n  },\n\n  /**\n   * Stop the process\n   */\n  stopProcess: function (process) {\n    var that = this\n    process.is_stopping = true\n    var data = {\n      id: process.id,\n    }\n\n    jQuery.ajax({\n      method: 'POST',\n      url: that.apiRoot + 'stop',\n      headers: {\n        'x-wps-auth': that.token,\n        'Content-Type': 'application/json',\n      },\n      dataType: 'json',\n      data: JSON.stringify(data),\n    })\n      .done(function (response) {\n        if (response && response.ok) {\n        }\n      })\n      .fail(function (error) {\n        that.processError(error)\n      })\n  }\n}\n\nwpStatelessProcessingApp.init()\n\n/**\n * ProcessingClass\n *\n * @param {*} data\n */\nfunction ProcessingClass(data, app) {\n  this.id = ''\n  this.total_items = 0\n  this.queued_items = 0\n  this.processed_items = 0\n  this.is_running = false\n  this.limit = 0\n  this.limitEnabled = false\n  this.order = 'desc'\n\n  // Build an instance\n  Object.assign(this, data)\n\n  this.app = app\n  this.interval = null\n  this.htmlId = this.id.replace(/[^a-zA-Z0-9]/g, '') // remove double backslashes\n  this.htmlBox = jQuery(`[data-id=\"${this.htmlId}\"]`)\n  \n  /**\n   * Start polling for changes\n   */\n  this.startPolling = function () {\n    var that = this\n    this.stopPolling()\n    this.interval = setInterval(function () {\n      that.app.refreshProcess(that)\n    }, 5000)\n  }\n\n  /**\n   * Stop polling for changes\n   */\n  this.stopPolling = function () {\n    clearInterval(this.interval)\n  }\n\n  /**\n   * Get Progress bar possible total\n   */\n  this.getProgressTotal = function () {\n    if (this.limit > 0 && this.limit <= this.total_items) {\n      return this.limit\n    }\n    return this.total_items\n  }\n\n  /**\n   * Get Total queued count\n   */\n  this.getQueuedTotal = function () {\n    return this.queued_items > this.total_items\n      ? this.total_items\n      : this.queued_items\n  }\n\n  /**\n   * Get processed total\n   */\n  this.getProcessedTotal = function () {\n    return this.processed_items > this.getQueuedTotal()\n      ? this.getQueuedTotal()\n      : this.processed_items\n  }\n\n  /**\n   * Calculate percentage\n   */\n  this.percentage = function (part, base) {\n    return parseInt((100 / base) * part) + '%'\n  }\n\n  /**\n   * Stop the process\n   */\n  this.refreshProgress = function () {\n    this.htmlBox.find('.legend .total span').html( this.getProgressTotal() )\n    this.htmlBox.find('.legend .queued span').html( this.getQueuedTotal() )\n    this.htmlBox.find('.legend .processed span').html( this.processed_items )\n    \n    this.htmlBox.find('.bar.total').css({\n      'background-color': this.getProgressTotal() == this.getProcessedTotal() ? '#02ae7a' : false\n    })\n    this.htmlBox.find('.bar.queued').css({\n      width: this.percentage( this.getQueuedTotal(), this.getProgressTotal() ),\n      'background-color': this.getProgressTotal() == this.getProcessedTotal() ? '#02ae7a' : false\n    })\n    this.htmlBox.find('.bar.processed').css({\n      width: this.percentage( this.getProcessedTotal(), this.getQueuedTotal() ), \n      'background-color': this.getProgressTotal() == this.getProcessedTotal() ? '#02ae7a' : false\n    })\n\n    if (this.notices && this.notices.length) {\n      this.htmlBox.find('.progress-notice').show()\n\n      for (var i in this.notices) {\n        this.htmlBox.find('.progress-notice').append('<p>' + this.notices[i] + '</p>')\n      }\n    }\n  }\n\n  /**\n   * Check if Run button can be pressed\n   */\n  this.canRun = function () {\n    return this.total_items > 0 && !this.is_running && this.app.canRun\n  }\n\n  /**\n   * Check if Stop button can be pressed\n   */\n  this.canStop = function () {\n    return this.is_running && !this.is_stopping\n  }\n\n  /**\n   * Refresh buttons state\n   */\n  this.refreshButtons = function () {\n    if ( this.canStop() ) {\n      this.htmlBox.find('.actions .button-secondary').removeClass('disabled')\n    } else {\n      this.htmlBox.find('.actions .button-secondary').addClass('disabled')\n    }\n\n    if ( this.canRun() ) {\n      this.htmlBox.find('.actions .button-primary').removeClass('disabled')\n    } else {\n      this.htmlBox.find('.actions .button-primary').addClass('disabled')\n    }\n  }\n\n  /**\n   * Refresh the progress data\n   */\n  this.refreshBox = function () {\n    this.htmlBox.find('.inside ul span').html(this.total_items)\n\n    if (this.is_running) {\n      this.startPolling()\n\n      this.htmlBox.find('.dashicons-update').css('display', 'inline-block')\n      this.htmlBox.find('.progress').show()\n\n      this.htmlBox.find('.limit_enabled').prop('disabled', true)\n      this.htmlBox.find('.limit_field input').prop('disabled', true)\n      this.htmlBox.find('.order_value').prop('disabled', true)\n\n      this.refreshProgress()\n    } else {\n      this.stopPolling()\n\n      this.htmlBox.find('.dashicons-update').css('display', 'none')\n      this.htmlBox.find('.progress').hide()\n      this.htmlBox.find('.progress-notice').hide()\n\n      this.htmlBox.find('.limit_enabled').prop('disabled', false)\n      this.htmlBox.find('.limit_field input').prop('disabled', !this.limitEnabled)\n      this.htmlBox.find('.order_value').prop('disabled', false)\n    }\n\n    if (this.limitEnabled || this.limit > 0) {\n      this.htmlBox.find('.limit_field input').css('visibility', 'visible')\n    } else {\n      this.htmlBox.find('.limit_field input').css('visibility', 'hidden')\n    }\n\n    this.refreshButtons()\n    this.app.preventChanges()\n  }\n\n  /**\n   * Enable limit handler\n   */\n  this.enableLimit = function (event) {\n    this.limitEnabled = jQuery(event.target).is(':checked')\n\n    this.limit = 0\n    this.htmlBox.find('.limit_field input').val(0)\n\n    this.refreshBox()\n  }\n\n  /**\n   * Change limit handler\n   */\n  this.changeLimit = function (event) {\n    this.limit = jQuery(event.target).val()\n  }\n\n  /**\n   * Change sorting handler\n   */\n  this.changeOrder = function (event) {\n    this.order = jQuery(event.target).val()\n  }\n\n  /**\n   * Run the process\n   */\n  this.run = function () {\n    if ( this.canRun() ) {\n      this.app.runProcess(this)\n    }\n  }\n\n  /**\n   * Stop the process\n   */\n  this.stop = function () {\n    if ( this.canStop() ) {\n      this.app.stopProcess(this)\n    }\n  }\n\n  /**\n   * Bind event handlers\n   */\n  jQuery(document).on('change', `[data-id=\"${this.htmlId}\"] .limit_enabled`, this.enableLimit.bind(this))\n  this.htmlBox.find('.limit_field input').change( this.changeLimit.bind(this) )\n  this.htmlBox.find('.order_value').change( this.changeOrder.bind(this) )\n  this.htmlBox.find('.actions .button-primary').click( this.run.bind(this) )\n  this.htmlBox.find('.actions .button-secondary').click( this.stop.bind(this) )\n}\n"
  },
  {
    "path": "static/styles/error-notice.css",
    "content": ".stateless-admin-notice.error,\n.stateless-admin-notice.notice,\n.stateless-admin-notice.admin-error {\n  position: relative;\n  display: block;\n  background-image: url('../images/stateless.svg');\n  background-repeat: no-repeat;\n  background-size: 40px 40px;\n  background-position: 15px center;\n  padding: 15px 38px 15px 70px;\n  background-color: #fff;\n  border: 1px solid #ccd0d4;\n  border-left-width: 4px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);\n}\n\n.stateless-admin-notice.error,\n.stateless-admin-notice.admin-error {\n  border-left-color: #fc2323 !important;\n}\n.stateless-admin-notice.notice {\n  border-left-color: #fc5922 !important;\n}\n\n.stateless-admin-notice .icon {\n  float: left;\n  width: 30px;\n  height: 30px;\n}\n\n.stateless-admin-notice .description {\n  margin-top: 7px;\n}\n\n.stateless-admin-notice .description ul {\n  margin: 0px;\n}\n\n.stateless-admin-notice ul {\n  margin: 0.5em 0;\n}\n\n.stateless-admin-notice .inner-contaner {\n  float: left;\n}\n\n.stateless-admin-notice .title {\n  font-weight: bold;\n}\n\n.stateless-admin-notice a {\n  text-decoration: underline;\n}\n\n.stateless-admin-notice a.notice-dismiss.dismiss,\n.stateless-admin-notice a.button-action {\n  text-decoration: none !important;\n}\n\n.stateless-admin-notice a.button-action {\n  right: 40px;\n}\n\n.stateless-admin-notice.hidden {\n  display: none !important;\n}\n\n/**\n    Responisve Design:\n*/\n\n/* Extra small devices (phones, 600px and down) */\n@media only screen and (max-width: 600px) {\n}\n\n/* Small devices (portrait tablets and large phones, 600px and up) */\n@media only screen and (min-width: 600px) {\n}\n\n/* Medium devices (landscape tablets, 768px and up) */\n@media only screen and (min-width: 768px) {\n}\n\n/* Large devices (laptops/desktops, 992px and up) */\n@media only screen and (max-width: 992px) {\n  .stateless-admin-notice .description {\n    margin-top: 15px;\n  }\n\n  .stateless-admin-notice a.notice-dismiss.dismiss,\n  .stateless-admin-notice a.button-action {\n    margin-top: 12px;\n  }\n}\n\n/* Large devices (laptops/desktops, 992px and up) */\n@media only screen and (min-width: 992px) {\n  .stateless-admin-notice.error,\n  .stateless-admin-notice.notice {\n    background-position: 10px center;\n    padding: 15px 193px 15px 60px;\n  }\n\n  .stateless-admin-notice a.notice-dismiss.dismiss,\n  .stateless-admin-notice a.button-action {\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n  }\n\n  .stateless-admin-notice a.notice-dismiss.dismiss:focus {\n    box-shadow: none;\n  }\n\n  .stateless-admin-notice a.notice-dismiss.dismiss:active,\n  .stateless-admin-notice a.button-action:active {\n    transform: translateY(-48%) !important;\n  }\n}\n\n/* Extra large devices (large laptops and desktops, 1200px and up) */\n@media only screen and (min-width: 1200px) {\n}\n"
  },
  {
    "path": "static/styles/wp-stateless-addons.css",
    "content": ".addons-filter .subsubsub {\n  float: none;\n}\n\n.addons-list {\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: 20px;\n  justify-content: flex-start;\n}\n\n.addons-list .addon-card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 46%;\n  background-color: #fff;\n  border: 1px solid #e5e5e5;\n  margin: 10px;\n  padding: 20px;\n  box-sizing: border-box;\n}\n\n.addons-list .addon-icon {\n  display: flex;\n  align-items: center;\n}\n\n.addons-list .addon-icon {\n  padding: 0 15px;\n}\n\n.addons-list .addon-icon a {\n  display: block;\n  width: 80px;\n  height: center;\n}\n\n.addons-list .addon-icon img {\n  max-width: 100%;\n  max-height: 100%;\n  min-width: 100%;\n  min-height: 100%;\n}\n\n.addons-list .addon-card .addon-head {\n  display: flex;\n  flex-grow: 1;\n}\n\n.addons-list .addon-card .addon-title a {\n  color: inherit;\n  text-decoration: none;\n}\n\n.addons-list .addon-card .addon-title a:hover,\n.addons-list .addon-card .addon-title a:active {\n  color: #2271b1;\n  text-decoration: underline;\n}\n\n.addons-list .addon-card .addon-description {\n  margin-bottom: 20px;\n}\n\n.addons-list .addon-actions {\n  display: flex;\n  justify-content: flex-start;\n  width: 100%;\n}\n\n.addons-list .addon-actions .hs-wrap {\n  width: 110px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.addons-list .addon-actions .addon-secondary-link {\n  text-decoration: none;\n  color: #3c434a;\n  margin-right: 10px;\n}\n\n.addons-list .addon-actions .addon-secondary-link:hover span,\n.addons-list .addon-actions .addon-secondary-link:active span {\n  color: #3c434a;\n}\n\n\n.addons-list .addon-actions .addon-secondary-link:hover,\n.addons-list .addon-actions .addon-secondary-link:active {\n  color: #2271b1;\n}\n\n.addons-list .addon-actions .addon-secondary-actions {\n  width: 110px;\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n}\n\n.addons-list .addon-actions .addon-secondary-link {\n  display: flex;\n}\n\n.addons-list .addon-actions .addon-secondary-link span {\n  margin-right: 5px;\n}\n\n.addons-list .addon-actions .addon-secondary-link img {\n  width: 20px;\n  height: auto;\n  margin-right: 5px;\n}\n\n.addons-list .addon-card .addon-status {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  font-weight: bold;\n  color: #fff;\n  border-radius: 20px;\n  padding: 5px 10px;\n}\n\n.addons-list .addon-card.addon-card.recommended .addon-status {\n  background-color: #f05323;\n}\n\n.addons-list .addon-card.addon-card.active .addon-status {\n  background-color: #00a32a;\n}\n\n@media screen and (min-width: 1450px) {\n  .addons-list .addon-card {\n    width: 31%;\n  }\n}\n\n@media screen and (min-width: 769px) and (max-width: 1050px) {\n  .addons-list .addon-card .addon-actions {\n    flex-direction: column;\n    align-items: center;\n  }\n\n  .addons-list .addon-card .addon-actions .hs-wrap {\n    width: 100%;\n  }\n\n  .addons-list .addon-card .addon-actions .addon-secondary-actions {\n    width: 100%;\n    justify-content: center;\n    margin-top: 20px;\n  }\n}\n\n@media screen and (max-width: 768px) {\n  .addons-list .addon-card {\n    width: 100%;\n  }\n}\n\n@media screen and (max-width: 460px) {\n  .addons-list .addon-card .addon-actions {\n    flex-direction: column;\n    align-items: center;\n  }\n\n  .addons-list .addon-card .addon-actions .hs-wrap {\n    width: 100%;\n  }\n\n  .addons-list .addon-card .addon-actions .addon-secondary-actions {\n    width: 100%;\n    justify-content: center;\n    margin-top: 20px;\n  }\n}\n"
  },
  {
    "path": "static/styles/wp-stateless-settings.css",
    "content": "/* settings css */\n\n.regular-text {\n  width: 50em;\n}\n\n.sm-notice {\n  background-color: #fff8e5;\n  margin: 20px 0px 0px;\n  padding: 15px;\n  border-left: 3px solid #f79191;\n}\n\n#stateless-settings-page-title {\n  margin-bottom: 20px;\n}\n\n.stateless-settings-docs-link {\n  display: inline-block;\n  text-decoration: none;\n}\n\n.stateless-settings-docs-link:focus,\n.stateless-settings-docs-link:active {\n  outline: none;\n  box-shadow: none;\n  color: #2271b1;\n}\n\n.stateless-settings-docs-link .dashicons-editor-help:before {\n  font-size: 30px;\n  vertical-align: middle;\n}\n\n#service_account_json {\n  height: 20em;\n}\n.stless_settings_content {\n  display: none;\n}\n.stless_settings_content.active {\n  display: block;\n}\n\n.nav-tab-active:focus {\n  box-shadow: none;\n}\n\n.stless_settings_content tr td h4:first-of-type {\n  margin-top: 5px;\n}\n\n#stless_supports_tab {\n  padding: 20px 0;\n}\n\n.stless_settings_content tr {\n  position: relative;\n  display: block;\n}\n\n.stless_settings_content tr:after {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fafafa;\n  position: absolute;\n  left: 0px;\n  bottom: 0px;\n  width: 100%;\n  height: 0px;\n  content: '';\n}\n\n.stless_settings_content .postbox-container {\n  width: 33%;\n}\n\n.stless_settings_content .postbox .hndle {\n  cursor: default;\n}\n\n.stless_settings_content .postbox .hndle .title-holder .label {\n  font-size: 0.7em;\n  text-transform: uppercase;\n  border: 1px solid darkorange;\n  padding: 2px;\n  line-height: 2;\n  border-radius: 3px;\n  margin-left: 5px;\n}\n\n.stless_settings_content .postbox .hndle a {\n  font-size: 20px;\n}\n\n.stless_settings_content .postbox .inside {\n  margin-bottom: 0;\n}\n\n.stless_settings_content .postbox .options,\n.stless_settings_content .postbox .progress,\n.stless_settings_content .postbox .progress-notice {\n  margin-bottom: 1em;\n}\n\n.stless_settings_content .postbox .progress-notice {\n  color: darkred;\n}\n\n.stless_settings_content .postbox .actions {\n  text-align: right;\n}\n\n.stless_settings_content .postbox .progress .bar-wrapper .legend {\n  display: flex;\n  justify-content: space-between;\n}\n\n.stless_settings_content .postbox .progress .bar-wrapper .bar {\n  box-sizing: border-box;\n  transition: width 1s, background-color 2s;\n}\n\n.stless_settings_content .postbox .progress .bar-wrapper .bar.total {\n  background-color: #0278ae;\n  padding: 2px;\n}\n.stless_settings_content .postbox .progress .bar-wrapper .total {\n  color: #0278ae;\n}\n\n.stless_settings_content .postbox .progress .bar-wrapper .bar.queued {\n  background-color: #51adcf;\n  padding: 2px;\n}\n.stless_settings_content .postbox .progress .bar-wrapper .queued {\n  color: #51adcf;\n}\n\n.stless_settings_content .postbox .progress .bar-wrapper .bar.processed {\n  background-color: #a5ecd7;\n  height: 5px;\n}\n.stless_settings_content .postbox .progress .bar-wrapper .processed {\n  color: #a5ecd7;\n}\n\n.processing-hint {\n  margin-top: 0;\n}\n\n.wpStateLess-support {\n  width: 60%;\n  margin: 0 auto;\n  display: flex;\n}\n\n.wpStateLess-sprt-plan {\n  float: left;\n  width: 45%;\n  margin: 0px 15px;\n  text-align: center;\n  border: 1px solid #e4e4e4;\n  box-shadow: 0px 5px 35px -19px #000;\n}\n.wpStateLess-sprt-plan .wpStateLess-plan-name p {\n  font-size: 30px;\n}\n\n.wpStateLess-sprt-plan ul li {\n  border-top: 1px solid #e4e4e4;\n  padding: 5px;\n}\n\n#stless_sync_tab #errors,\n#stless_sync_tab .dashicons-update,\n#stless_sync_tab .progress,\n#stless_sync_tab .progress-notice {\n  display: none;\n}\n\n#stless_sync_tab .limit_field input {\n  visibility: hidden;\n}\n\n#stless_sync_tab .processes-holder .postbox-container {\n  float: none;\n}\n\n\n/* Angular styles */\n.ng-hide:not(.ng-hide-animate) {\n  display: none !important;\n}\n\n.hbspt-form {\n  padding-top: 20px;\n}\n\n.hbspt-form {\n  margin-left: 10px;\n}\n\n.hbspt-form input.hs-input[type='checkbox'] {\n  border: 1px solid #b4b9be;\n  height: 16px;\n  width: 16px;\n  margin-top: -2px;\n}\n\n.permalink-structure h4 {\n  margin: 1.33em 0 !important;\n}\n\n.sm-wildcards .select2-container {\n  width: 100% !important;\n}\n\n.sm-wildcards .select2-selection--multiple {\n  height: 28px !important;\n}\n.select2-dropdown li {\n  margin-bottom: 0px !important;\n}\n/* pillbox li container item */\n.select2-selection__choice {\n  position: relative;\n  padding-left: 15px; /* to account for the 'x' no longer taking up space */\n}\n\n/* the 'x' */\n.select2-selection__choice__remove {\n  position: absolute;\n  left: 0;\n  right: 0; /* to fill width */\n  padding-left: 5px; /* whatever matches your pillbox padding */\n\n  color: transparent !important; /* hide the x */\n}\n\n.select2-container--default .select2-results__option[aria-disabled='true'] {\n  display: none;\n}\n\n.file_url_block label,\n.file_url_block input {\n  width: 100%;\n}\n\n.stless_settings_content .loading {\n  -webkit-animation: wps-loading-spin 1.4s infinite linear;\n  animation: wps-loading-spin 1.4s infinite linear;\n}\n\n@-webkit-keyframes wps-loading-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@keyframes wps-loading-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "static/styles/wp-stateless-setup-wizard.css",
    "content": ".wp-admin.media_page_stateless-setup #wpcontent,\n.wp-admin.settings_page_stateless-setup #wpcontent {\n  padding-left: 0px;\n}\n#console-stateless-wizard {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  height: calc(100vh - 2rem);\n  width: 100%;\n}\n"
  },
  {
    "path": "static/styles/wp-stateless-status.css",
    "content": "#stless_status_tab .hndle {\n  margin-top: 5px;\n}\n\n#stless_status_tab .hndle-notice {\n  padding: 0 12px;\n}\n\n#stless_status_tab .hndle-notice p {\n  margin: 0;\n}\n\n#stless_status_tab .hndle-notice ul {\n  list-style: disc;\n  padding-left: 20px;\n}\n\n#stless_status_tab .stateless-info-heading {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n#stless_status_tab .stateless-info-heading .copy-button {\n  background-color: #fff;\n  font-weight: 400;\n}\n\n.stateless-info-copy-success {\n  line-height: 30px;\n  margin-right: 5px;\n  color: #007017;\n  font-weight: normal;\n  display: none;\n}\n\n/* Info table */\n#stateless-info {\n  border: 1px solid #c3c4c7;\n}\n\n.stateless-info-heading {\n  margin: 0;\n  font-size: 13px;\n  border-top: 1px solid #c3c4c7;\n}\n\n.stateless-info-heading:first-child {\n  border-top: none;\n}\n\n.stateless-info-button {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  background: #fff;\n  border: 0;\n  color: #2c3338;\n  cursor: pointer;\n  padding: 13px 20px;\n  text-align: left;\n  width: 100%;\n  user-select: auto;\n}\n\n.stateless-info-button:hover,\n.stateless-info-button:active {\n  background-color: #f6f7f7;\n}\n\n.stateless-info-heading.open .dashicons {\n  transform: rotate(180deg);\n}\n\n.stateless-info-block {\n  padding: 13px 20px;\n}\n\n.stateless-info-block tr {\n  display: table-row;\n}\n\n.stateless-info-block tr:after {\n  display: none;\n}\n\n.stateless-info-block td {\n  width: 50%;\n}\n\n.stateless-info-table-extended-value {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n}\n\n.stateless-info-table-extended-value:last-child {\n  cursor: pointer;\n}\n\n.stateless-info-table-extended-value em {\n  display: none;\n}\n\n.stateless-info-table-extended-value .dashicons {\n  margin-right: 5px;\n}\n\n/* Migrations confirmation dialog */\n#stateless-migration-confirm label {\n  display: block;\n  padding-left: 5px;\n  margin-top: 5px;\n}\n\n.stateless-migration-confirm.ui-widget {\n  font-family: inherit;\n  font-size: inherit;\n  padding: 0;\n  border: 0;\n}\n\n.stateless-migration-confirm .ui-dialog-titlebar {\n  padding: 8px 18px;\n  position: relative;\n}\n\n.stateless-migration-confirm .ui-widget .ui-widget {\n  font-size: inherit;\n  font-family: inherit;\n}\n\n.stateless-migration-confirm.ui-widget .ui-widget-button {\n  font-size: inherit;\n  font-family: inherit;\n}\n\n.stateless-migration-confirm .ui-dialog-buttonpane {\n  padding: 16px;\n}\n\n.stateless-migration-confirm .ui-dialog-buttonset button {\n  margin: .5em .4em .5em 0;\n  font-family: inherit;\n}\n\n.stateless-migration-confirm .ui-widget-content,\n.stateless-migration-confirm .ui-widget-content .ui-widget-content {\n  color: inherit;\n}\n\n.stateless-migration-confirm .ui-widget-header {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n\n.stateless-migration-confirm .ui-icon-closethick {\n  left: -500%;\n}\n\n.stateless-migration-confirm .ui-button.ui-dialog-titlebar-close {\n  margin: 0;\n  height: 100%;\n  width: 53px;\n  border-left: 1px solid #dcdcde;\n}\n\n.stateless-migration-confirm .ui-dialog-titlebar-close:before {\n  line-height: 53px;\n}\n\n/* Migrations section (Data Optimization) */\n#migration-action .main {\n  margin-top: 20px;\n  display: flex;\n  justify-content: space-between;\n}\n\n#migration-action .actions {\n  text-align: left;\n}\n\n#migration-action .actions .button {\n  display: none;\n}\n\n#migration-action.can-start .actions .button.start {\n  display: inline-block;\n}\n\n#migration-action.can-pause .actions .button.pause {\n  display: inline-block;\n}\n\n#migration-action.can-resume .actions .button.resume {\n  display: inline-block;\n}\n\n#migration-action .description {\n  flex: 1;\n  white-space: nowrap;\n  margin-right: 20px;\n  text-align: right;\n}\n\n/* Migrations section (Data updates) - progress section */\n#migration-action .progress-wrap {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  min-height: 20px;\n  min-width: 40%;\n}\n\n#migration-action .progress {\n  display: none;\n  flex: 1;\n  margin-bottom: 0;\n  position: relative;\n  overflow: hidden;\n  height: 20px;\n  background-size: 56px 20px;\n  background-color: #dcdcde;\n  background-image: repeating-linear-gradient(\n    -45deg, \n    transparent, \n    transparent 10px,\n    rgba(255,255,255,.7) 10px, \n    rgba(255,255,255,.7) 20px\n  );\n}\n\n#migration-action .progress .bar {\n  position: absolute;\n  z-index: 20;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  height: 100%;\n  width: 0;\n  background-color: rgba(34, 113, 177, 0.8);\n  background-size: 56px 20px;\n  background-image: repeating-linear-gradient(\n    -45deg, \n    transparent, \n    transparent 10px,\n    rgba(255,255,255,.4) 10px, \n    rgba(255,255,255,.4) 20px\n  );\n  transition: all 0.5s ease;\n}\n\n@keyframes stateless-progress {\n  from {background-position: 0 0;}\n\t\tto {background-position: 56px 0; }\n}\n\n#migration-action.can-pause .progress,\n#migration-action.can-resume .progress,\n#migration-action.processing-action .progress {\n  display: block;\n}\n\n#migration-action.can-pause .progress,\n#migration-action.can-pause .progress .bar{\n  animation: stateless-progress 3s linear infinite;\n}\n\n#migration-action .progress .percent {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  line-height: 20px;\n  text-align: center;\n  font-weight: bold;\n  z-index: 30;\n}\n"
  },
  {
    "path": "static/styles/wp-stateless.css",
    "content": "/**\n *\n *\n */\n\ntd.image-icon img.wp-stateless-media-item {\n}\n\n\n.submitbox span.sm-view-link {\n    float: right;\n}\n\n.wp-stateless-media-options input.sm_service_account_name {\n    width: 40em;\n}\n\n.wp-stateless-media-options input.sm_key_file_path {\n    width: 40em;\n}\n\n.sm-mode small.description {\n    display: block;\n    margin-top: 5px;\n}\n\n.key_type{\n    margin-top: 4px;\n    margin-bottom: 0;\n}\n.key_type>label{\n    vertical-align: top;\n}\n.key_type>div{\n    width:auto;\n    padding-top: 3px;\n}\n.key_type ._sm_key_file_path{\n    margin-top: 7px;\n}\n.key_type .sm_key_json, .key_type .sm_key_file_path{\n    display: block;\n    width: 40em;\n    max-width: 100%;\n}\n.key_type .sm_key_json{\n    height:200px;\n}\n\n#go {\n    margin-top: 25px;\n}\n\n#go .option {\n    margin-bottom: 5px;\n}\n\n#go .status {\n    color: grey;\n    font-family: monospace;\n    margin-bottom: 10px;\n    margin-top: 10px;\n}\n\n#go .buttons {\n    margin-top: 10px;\n}\n\n#go ol {\n    margin: 0 0 0 25px;\n    font-family: monospace;\n}\n\n#go #regenthumbs-bar {\n    margin-bottom: 10px;\n}\n\n.clearfix:after {\n    content: \" \"; /* Older browser do not support empty content */\n    visibility: hidden;\n    display: block;\n    height: 0;\n    clear: both;\n}\n\n#sm-attachment-metabox .rwmb-input input {\n    max-width: 90%;\n}\n#sm-attachment-metabox a i.dashicons {\n    text-decoration: none;\n}\n#sm-attachment-metabox a i.dashicons-external {\n    font-size: 25px;\n}\n#sm-attachment-metabox a i.dashicons-image-rotate {\n    margin-top: 4px;\n}"
  },
  {
    "path": "static/views/.gitkeep",
    "content": ""
  },
  {
    "path": "static/views/addons-tab.php",
    "content": "<p>\n  <?php _e('Some WordPress plugins override or provide additional features for the Media Library, image upload, and processing. These add-ons offer compatibility features to ensure smooth operation and support the behavior of other plugins alongside WP-Stateless.', ud_get_stateless_media()->domain); ?>\n</p>\n\n<p>\n  <?php _e(\n          sprintf(\n            \"If you experience any issues please contact us on <a href='%s' target='_blank' rel='noreferrer nofollow'>GitHub</a> or <a href='%s' target='_blank' rel='noreferrer nofollow'>Support page</a>.\",\n            'https://github.com/udx/wp-stateless/issues',\n            'https://wordpress.org/support/plugin/wp-stateless/'\n          ),\n          ud_get_stateless_media()->domain\n        ); \n  ?>\n</p>\n\n<div class=\"addons-filter\">\n  <ul class=\"subsubsub\">\n    <?php\n      foreach ($filters as $id => $filter) {\n        ?>\n\n        <li class=\"<?php echo $id ?>\">\n          <a href=\"<?php printf($url, $id); ?>\" <?php if ( $id == $current_filter ) echo 'class=\"current\" aria-current=\"page\"'; ?>>\n            <?php printf($filter->title, $filter->count); ?>\n          </a>\n          <?php if ( $id !== 'inactive' ) echo '|'; ?>\n        </li>\n\n        <?php\n      } \n    ?>\n  </ul>\n</div>\n\n<div class=\"addons-list\">\n  <?php foreach ($addons as $id => $addon) : ?>\n\n      <div class=\"addon-card <?php echo $addon->card_class;?>\">\n\n        <?php if ($addon->status) : ?>\n          <div class=\"addon-status\"><?php echo $addon->status; ?></div>\n        <?php endif; ?>\n\n        <div class=\"addon-head\">\n          <div class=\"addon-icon\">\n            <a href=\"<?php echo $addon->link ?>\" target=\"_blank\">\n              <img src=\"<?php echo $addon->icon; ?>\" alt=\"<?php echo $addon->title; ?>\">\n            </a>\n          </div>\n\n          <div class=\"addon-info\">\n            <h2 class=\"addon-title\">\n              <a href=\"<?php echo $addon->link; ?>\" target=\"_blank\"><?php echo $addon->title; ?></a>\n            </h2>\n            \n            <div class=\"addon-description\"><?php echo $addon->description; ?></div>\n          </div>\n        </div>\n\n        <div class=\"addon-actions\">\n          <div class=\"hs-web-interactive-inline hs-wrap\" style=\"\" data-hubspot-wrapper-cta-id=\"<?php echo $addon->hubspot_id?>\">\n            <?php if ( !empty($addon->activate_link) ) : ?>\n              <a href=\"<?php echo $addon->activate_link?>\" \n                class=\"button-action button button-primary <?php if ( $addon->active ) echo 'disabled'; ?>\"\n              >Activate</a> \n            <?php else : ?>\n\n              <?php if ( !empty($addon->hubspot_link) ) : ?>\n                <a href=\"<?php echo $addon->hubspot_link?>\" \n                  class=\"hs-inline-web-interactive-<?php echo $addon->hubspot_id?> button-action button button-primary\" \n                  data-hubspot-cta-id=\"<?php echo $addon->hubspot_id?>\"\n                  target=\"_blank\" rel=\"noopener\" crossorigin=\"anonymous\" onerror=\"this.style.display='none'\"\n                >Download</a> \n              <?php else : // HubSpot does not work as expected ?>\n                <a href=\"<?php echo $addon->wp?>\" \n                  class=\"button-action button button-primary\" \n                  target=\"_blank\" rel=\"noopener\" crossorigin=\"anonymous\"\n                >Download</a> \n              <?php endif; ?>  \n\n            <?php endif; ?>  \n          </div>\n\n          <div class=\"addon-secondary-actions\">\n            <a href=\"<?php echo $addon->link?>\" class=\"addon-secondary-link\" target=\"_blank\" rel=\"noopener\" crossorigin=\"anonymous\">\n              <span class=\"dashicons dashicons-book-alt\"></span> <?php _e('Docs', ud_get_stateless_media()->domain)?>\n            </a>\n\n            <?php if ($addon->wp) : ?>\n              <a href=\"<?php echo $addon->wp?>\" class=\"addon-secondary-link\" target=\"_blank\" rel=\"noopener\" crossorigin=\"anonymous\">\n                <span class=\"dashicons dashicons-wordpress\"></span> <?php _e('WordPress', ud_get_stateless_media()->domain)?>\n              </a>\n            <?php endif; ?>  \n\n            <?php if ($addon->repo) : ?>\n              <a href=\"https://github.com/<?php echo $addon->repo?>\" class=\"addon-secondary-link\" target=\"_blank\" rel=\"noopener\" crossorigin=\"anonymous\">\n                <img src=\"https://github.githubassets.com/favicons/favicon.svg\" class=\"gh-icon\"></span> <?php _e('GitHub', ud_get_stateless_media()->domain)?>\n              </a>\n            <?php endif; ?>  \n          </div>\n        </div>\n\n      </div>\n\n  <?php endforeach; ?>\n</div>\n\n"
  },
  {
    "path": "static/views/compatibility-tab.php",
    "content": "<h2><?php _e(\"Enable or disable compatibility with other plugins.\", ud_get_stateless_media()->domain); ?></h2>\n    \n<p><?php printf(\n  __(\"Having an issue with another plugin? <a class='' target='_blank' href='%s' >Submit feedback</a> and let us know your issue!\", ud_get_stateless_media()->domain), \n  \"https://wordpress.org/support/plugin/wp-stateless/\"\n); ?></p>\n\n<form method=\"post\" action=\"\">\n  <input type=\"hidden\" name=\"action\" value=\"stateless_modules\">\n  <?php wp_nonce_field('wp-stateless-modules', '_smnonce'); ?>\n\n  <table class=\"form-table\">\n\n    <?php foreach ($modules as $module) : ?>\n      <tr>\n        <th><label for=\"<?php echo $module->id; ?>\"><?php echo $module->title; ?></label></th>\n\n        <td>\n          <?php\n          $name = sprintf('stateless-modules[%s]', $module->id);\n\n          $disabled = $module->is_constant || ($module->is_network_override || !$module->is_plugin_active || !$module->is_mode_supported) && !is_network_admin(); \n          $disabled = $disabled ? 'disabled=\"true\"' : '';\n          ?>\n\n          <select name=\"<?php echo $name; ?>\" id=\"<?php echo $module->id; ?>\" value=\"<?php echo $module->enabled; ?>\" <?php echo $disabled; ?>>\n            <?php if (is_network_admin()) : ?>\n              <option value=\"\" <?php selected( $module->enabled, '' ); ?>><?php _e(\"Don't override\", ud_get_stateless_media()->domain); ?></option>\n            <?php endif; ?>\n\n            <?php if ( $module->enabled == 'inactive' ) : ?>\n              <option value=\"inactive\" <?php selected( $module->enabled, 'inactive' ); ?>><?php _e('Not Available', ud_get_stateless_media()->domain); ?></option>\n            <?php endif; ?>\n\n            <option value=\"false\" <?php selected( $module->enabled, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n            <option value=\"true\" <?php selected( $module->enabled, 'true' ); ?>><?php _e('Enable', ud_get_stateless_media()->domain); ?></option>\n          </select>\n\n          <p class=\"description\">\n            <?php if ( !$module->is_plugin_active && $module->is_plugin && $module->is_mode_supported ) : ?>\n              <strong><?php _e(\"Please activate the plugin first.\", ud_get_stateless_media()->domain); ?></strong>\n            <?php endif; ?>\n\n            <?php if ( !$module->is_plugin_active && $module->is_theme && $module->is_mode_supported ) : ?>\n              <strong><?php _e(\"Please activate the theme first.\", ud_get_stateless_media()->domain); ?></strong>\n            <?php endif; ?>\n\n            <?php if ( !$module->is_mode_supported ) : ?>\n              <strong><?php printf( __(\"This compatibility does not support %s mode.\", ud_get_stateless_media()->domain), $module->mode ); ?></strong>\n            <?php endif; ?>\n\n            <?php if ( $module->is_constant ) : ?>\n              <strong><?php _e(\"Currently configured via a constant.\", ud_get_stateless_media()->domain); ?></strong>\n            <?php endif; ?>\n\n            <?php if ( $module->is_network_override ) : ?>\n              <strong><?php _e(\"Currently configured via network settings.\", ud_get_stateless_media()->domain); ?></strong>\n            <?php endif; ?>\n\n            <span><?php echo $module->description?></span>\n          </p>\n        </td>\n      </tr>\n    <?php endforeach; ?>\n  </table>\n\n  <?php submit_button(null, 'primary', 'submit', true, array('id' => 'save-compatibility')); ?>\n</form>\n\n"
  },
  {
    "path": "static/views/error-notice.php",
    "content": "<div id=\"stateless-notice-<?php if( !empty($data['key']) ) echo $data['key'];?>\" class=\"stateless-admin-notice ud-admin-notice <?php echo $data['class'];?> update-nag fade\">\n    <div>\n        <div class=\"title\"><?php /* The $data is already escaped */ _e($data['title']);?></div>\n        <div class=\"description\"><?php /* The $data is already escaped */ _e($data['message']);?></div>\n    </div>\n    <?php\n    if( !empty( $data['action_links'] ) && is_array( $data['action_links'] ) ):\n        echo '<p>' . esc_html(implode( ' | ', $data['action_links'] )) . '</p>';\n    endif;\n    ?>\n    <div class=\"buttons-container\">\n    <?php if ( !empty($data['button']) && !empty($data['key']) ) : ?>\n        <a class=\"button-action button button-primary\" data-action=\"sm_enable_notice\" data-key=\"<?php esc_html_e($data['key']);?>\" href=\"<?php esc_html_e($data['button_link']);?>\"><?php esc_html_e($data['button']);?></a>\n    <?php endif; ?>\n    <?php if ( !empty($data['key']) && (!isset($data['dismiss']) || $data['dismiss'] !== false) ) : ?>\n        <a class=\"dismiss-warning dismiss notice-dismiss\" data-key=\"dismissed_notice_<?php esc_html_e($data['key']);?>\" href=\"#\"></a>\n    <?php endif; ?>\n    </div>\n</div>\n"
  },
  {
    "path": "static/views/processing_interface.php",
    "content": "<div class=\"wrap\">\n\n  <div id=\"errors\" class=\"stateless-admin-notice admin-error\">\n    <strong><?php _e('Errors encountered. Try reloading the page.', ud_get_stateless_media()->domain); ?></strong>\n    <ul></ul>\n  </div>\n\n  <div class=\"metabox-holder processes-holder\">\n    <p class=\"processing-hint\"><strong><?php _e('Hint', ud_get_stateless_media()->domain) ?>:</strong> <?php _e('You can close this page once processing is started.', ud_get_stateless_media()->domain) ?></p>\n    \n    <div class=\"postbox-container\">\n      <?php foreach ($processes as $process) : ?>\n\n        <div class=\"postbox\" data-id=\"<?php echo preg_replace('/[^a-zA-Z0-9]/', '', $process->id); ?>\">\n\n          <div class=\"postbox-header\">\n            <h2 class=\"hndle\">\n              <div class=\"title-holder\"><?php echo $process->name; ?></div>\n\n              <span>\n                <span title=\"<?php _e('Processing in progress...', ud_get_stateless_media()->domain) ?>\" class=\"loading dashicons dashicons-update\"></span>\n\n                <?php if ($process->helper) : ?>\n                  <a href=\"javascript:;\" data-position='{\"edge\":\"left\",\"align\":\"center\"}' data-title=\"<?php echo $process->helper['title']; ?>\" data-text=\"<?php echo $process->helper['content']; ?>\" class=\"pointer dashicons dashicons-info\"></a>\n                <?php endif; ?>\n              </span>\n            </h2>\n          </div>\n\n          <div class=\"inside\">\n            <ul>\n              <li><strong><?php _e('Total Items', ud_get_stateless_media()->domain) ?>:</strong> <span><?php echo $process->total_items; ?></span></li>\n            </ul>\n\n            <?php if ($process->allow_limit) : ?>\n              <div class=\"options\">\n                <label><?php _e('Enable Limit', ud_get_stateless_media()->domain) ?> <input type=\"checkbox\" class=\"limit_enabled\"/></label>\n\n                <label class=\"limit_field\">\n                  <input type=\"number\" style=\"width:80px\" />\n                </label>\n              </div>\n            <?php endif; ?>\n\n            <?php if ($process->allow_sorting) : ?>\n              <div class=\"options\">\n                <label>\n                  <?php _e('Start from', ud_get_stateless_media()->domain) ?>\n                  <select class=\"order_value\">\n                    <option value=\"desc\" selected><?php _e('newest', ud_get_stateless_media()->domain) ?></option>\n                    <option value=\"asc\"><?php _e('oldest', ud_get_stateless_media()->domain) ?></option>\n                  </select>\n                </label>\n              </div>\n            <?php endif; ?>\n\n            <div class=\"progress\">\n              <div class=\"bar-wrapper\">\n                <div class=\"legend\">\n                  <strong class=\"total\"><?php _e('Total', ud_get_stateless_media()->domain) ?>: <span></span></strong>\n                  <strong class=\"queued\"><?php _e('Queued', ud_get_stateless_media()->domain) ?>: <span></span></strong>\n                  <strong class=\"processed\"><?php _e('Processed', ud_get_stateless_media()->domain) ?>: <span></span></strong>\n                </div>\n                \n                <div class=\"bar total\">\n                  <div class=\"bar queued\">\n                    <div class=\"bar processed\">&nbsp;</div>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"progress-notice\"></div>\n\n            <div class=\"actions\">\n              <button type=\"button\" class=\"button button-primary disabled\"><?php _e('Run', ud_get_stateless_media()->domain) ?></button>\n              <button type=\"button\" class=\"button button-secondary disabled\"><?php _e('Stop', ud_get_stateless_media()->domain) ?></button>\n            </div>\n\n          </div>\n        </div>\n      <?php endforeach; ?>\n    </div>\n  </div>\n\n</div>\n"
  },
  {
    "path": "static/views/settings-sections/file-url.php",
    "content": "<tr>\n  <th scope=\"row\"><?php _e('File URL', ud_get_stateless_media()->domain); ?></th>\n\n  <td>\n    <fieldset class=\"file_url_block\">\n      <legend class=\"screen-reader-text\"><span><?php _e('File URL', ud_get_stateless_media()->domain); ?></span></legend>\n      \n      <h4><?php _e('Preview', ud_get_stateless_media()->domain); ?></h4>\n      \n      <p>\n        <label for=\"file_url_grp_preview\">\n          <input type=\"text\" id=\"file_url_grp_preview\" class=\"regular-text ltr\" readonly=\"readonly\">\n        </label>\n      </p>\n\n      <p class=\"description\"><?php _e('An example file url utilizing all configured settings.', ud_get_stateless_media()->domain); ?></p>\n      \n      <hr>\n      \n      <div class=\"form-table permalink-structure\">\n        <h4><?php _e('Folder', ud_get_stateless_media()->domain); ?></h4>\n\n        <p>\n          <label for=\"sm_bucket_folder_type\">\n            <select id=\"sm_bucket_folder_type\">\n              <?php if (is_network_admin()) : ?>\n                <option value=\"\"><?php _e(\"Don't override\"); ?></option>\n              <?php endif; ?>\n              \n              <option value=\"single-site\"><?php _e('Single Site', ud_get_stateless_media()->domain); ?></option>\n              <option value=\"multi-site\"><?php _e('Multisite', ud_get_stateless_media()->domain); ?></option>\n              <option value=\"custom\"><?php _e('Custom', ud_get_stateless_media()->domain); ?></option>\n            </select>\n          </label>\n        </p>\n\n        <div class=\"sm-wildcards\">\n          <select class=\"select-wildcards\" multiple=\"multiple\" name=\"sm[root_dir][]\">\n            <?php foreach ($wildcards as $wildcard) : ?>\n              <option <?php echo in_array($wildcard, $root_dir_values) ? 'selected=\"selected\"' : \"\"; ?> <?php echo ($wildcard == '/') ? 'disabled=\"disabled\"' : \"\"; ?>><?php esc_html_e($wildcard); ?></option>\n              \n              <?php if (in_array($wildcard, $root_dir_values) && $wildcard != '/') : ?>\n                <option selected=\"selected\" disabled=\"disabled\">/</option>\n              <?php endif; ?>\n              \n            <?php endforeach; ?>\n          </select>\n          \n          <input type=\"text\" style=\"display: none;\" id=\"sm_root_dir\" value=\"<?php echo $sm->root_dir; ?>\" />\n        </div>\n\n        <p class=\"description\">\n          <strong id=\"notice-root_dir\"></strong> \n          <?php _e('If you would like files to be uploaded into a particular folder within the bucket, define that path here.', ud_get_stateless_media()->domain); ?>\n        </p>\n      </div>\n\n      <hr>\n\n      <h4><?php _e('Domain', ud_get_stateless_media()->domain); ?></h4>\n\n      <p>\n        <label for=\"custom_domain\">\n          <input name=\"sm[custom_domain]\" value=\"<?php echo $sm->custom_domain; ?>\" type=\"text\" id=\"custom_domain\" class=\"regular-text ltr\" placeholder=\"\">\n        </label>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-custom_domain\"></strong>\n        <strong class=\"notice notice-is-ssl\"><?php printf(__('This will require proxy/load balancer.', ud_get_stateless_media()->domain)); ?></strong>\n        <?php printf(__('Replace the default GCS domain with your own custom domain. This will require you to <a href=\"%s\" target=\"_blank\">configure a CNAME</a>. Be advised that the bucket name and domain name must match exactly, and HTTPS is not supported with a custom domain out of the box.', ud_get_stateless_media()->domain), 'https://cloud.google.com/storage/docs/xml-api/reference-uris#cname'); ?>\n      </p>\n\n      <hr>\n\n      <h4><?php _e('Cache-Busting', ud_get_stateless_media()->domain); ?></h4>\n\n      <p>\n        <select id=\"cache_busting\" name=\"sm[hashify_file_name]\">\n          <?php if (is_network_admin()) : ?>\n            <option value=\"\" <?php selected( $sm->hashify_file_name, '' ); ?>><?php _e('Don\\'t override', ud_get_stateless_media()->domain); ?></option>\n          <?php endif; ?>\n          <option value=\"true\" <?php selected( $sm->hashify_file_name, 'true' ); ?>><?php _e('Enable', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"false\" <?php selected( $sm->hashify_file_name, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n        </select>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-hashify_file_name\"></strong>\n        <span id=\"notice-hashify_file_name-mode\">\n          <?php _e(sprintf(\"<b>Required by Stateless and Ephemeral modes. Override with the <a href='%s' target='_blank'>WP_STATELESS_MEDIA_CACHE_BUSTING</a> constant.</b>\", ud_get_stateless_media()->get_docs_page_url('docs/constants/#wpstatelessmediacachebusting')), ud_get_stateless_media()->domain); ?>\n        </span>\n\n        <?php _e('Prepends a random set of numbers and letters to the filename. This is useful for preventing caching issues when uploading files that have the same filename.', ud_get_stateless_media()->domain); ?>\n      </p>\n\n      <h4><?php _e('Dynamic Image Support', ud_get_stateless_media()->domain); ?></h4>\n\n      <p>\n        <select id=\"dynamic_image_support\" name=\"sm[dynamic_image_support]\">\n          <?php if (is_network_admin()) : ?>\n            <option value=\"\" <?php selected( $sm->dynamic_image_support, '' ); ?>><?php _e('Don\\'t override', ud_get_stateless_media()->domain); ?></option>\n          <?php endif; ?>\n          <option value=\"true\" <?php selected( $sm->dynamic_image_support, 'true' ); ?>><?php _e('Enable', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"false\" <?php selected( $sm->dynamic_image_support, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n        </select>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-dynamic_image_support\"></strong>\n        <span id=\"notice-dynamic_image_support-mode\">\n          <?php _e(\"<b>Not available in Stateless Mode.</b>\", ud_get_stateless_media()->domain); ?>\n        </span>\n\n        <?php _e('Upload image thumbnails generated by your theme and plugins that do not register media objects with the media library. This can lead to significant negative performance impact.', ud_get_stateless_media()->domain); ?>\n      </p>\n\n      <h4><?php _e('Use Post Meta', ud_get_stateless_media()->domain); ?></h4>\n\n      <p>\n        <select id=\"use_postmeta\" name=\"sm[use_postmeta]\">\n          <?php if (is_network_admin()) : ?>\n            <option value=\"\" <?php selected( $sm->use_postmeta, '' ); ?>><?php _e('Don\\'t override', ud_get_stateless_media()->domain); ?></option>\n          <?php endif; ?>\n          <option value=\"true\" <?php selected( $sm->use_postmeta, 'true' ); ?>><?php _e('Enable', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"false\" <?php selected( $sm->use_postmeta, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n        </select>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-use_postmeta\"></strong>\n        <?php _e('Use post meta instead of custom WP-Stateless DB tables. Enable <strong>only</strong> if you experience technical issues after upgrading to WP-Stateless 4.0.0', ud_get_stateless_media()->domain); ?>\n      </p>\n    </fieldset>\n  </td>\n</tr>\n"
  },
  {
    "path": "static/views/settings-sections/general.php",
    "content": "<tr>\n  <th scope=\"row\"><?php _e('General', ud_get_stateless_media()->domain); ?></th>\n  \n  <td>\n    <fieldset>\n    \n      <legend class=\"screen-reader-text\"><span><?php _e('General', ud_get_stateless_media()->domain); ?></span></legend>\n      \n      <h4><?php _e('Mode', ud_get_stateless_media()->domain); ?></h4>\n      \n      <p class=\"description\"><strong id=\"notice-mode\"></strong></p>\n\n      <?php if (is_network_admin()) : ?>\n        <p class=\"sm-mode\">\n          <label for=\"sm_mode_not_override\">\n            <input id=\"sm_mode_not_override\" type=\"radio\" name=\"sm[mode]\" value=\"\" <?php checked( $sm->mode, '' ); ?>>\n            <?php _e('Don\\'t override', ud_get_stateless_media()->domain); ?>\n            <small class=\"description\"><?php _e('Don\\'t override.', ud_get_stateless_media()->domain); ?></small>\n          </label>\n        </p>\n      <?php endif; ?>\n\n      <p class=\"sm-mode\">\n        <label for=\"sm_mode_disabled\">\n          <input id=\"sm_mode_disabled\" type=\"radio\" name=\"sm[mode]\" value=\"disabled\" <?php checked( $sm->mode, 'disabled' ); ?>>\n          <?php _e('Disabled', ud_get_stateless_media()->domain); ?>\n          <small class=\"description\"><?php _e('Disable Stateless Media.', ud_get_stateless_media()->domain); ?></small>\n        </label>\n      </p>\n\n      <p class=\"sm-mode\">\n        <label for=\"sm_mode_backup\">\n          <input id=\"sm_mode_backup\" type=\"radio\" name=\"sm[mode]\" value=\"backup\" <?php checked( $sm->mode, 'backup' ); ?>>\n          <?php _e('Backup', ud_get_stateless_media()->domain); ?>\n          <small class=\"description\"><?php _e('Upload media files to Google Storage and serve local file urls.', ud_get_stateless_media()->domain); ?></small>\n        </label>\n      </p>\n      \n      <p class=\"sm-mode\">\n        <label for=\"sm_mode_cdn\">\n          <input id=\"sm_mode_cdn\" type=\"radio\" name=\"sm[mode]\" value=\"cdn\" <?php checked( $sm->mode, 'cdn' ); ?>>\n          <?php _e('CDN', ud_get_stateless_media()->domain); ?>\n          <small class=\"description\"><?php _e('Copy media files to Google Storage and serve them directly from there.', ud_get_stateless_media()->domain); ?></small>\n        </label>\n      </p>\n      \n      <p class=\"sm-mode\">\n        <label for=\"sm_mode_ephemeral\">\n          <input id=\"sm_mode_ephemeral\" type=\"radio\" name=\"sm[mode]\" value=\"ephemeral\" <?php checked( $sm->mode, 'ephemeral' ); ?>>\n          <?php _e('Ephemeral', ud_get_stateless_media()->domain); ?>\n          <small class=\"description\"><?php _e('Store and serve media files with Google Cloud Storage only. Media files are not stored locally, but local storage is used temporarily for processing and is required for certain compatibilities, generating thumbnails for PDF documents.', ud_get_stateless_media()->domain); ?></small>\n        </label>\n      </p>\n      \n      <p class=\"sm-mode\">\n        <label for=\"sm_mode_stateless\">\n          <input id=\"sm_mode_stateless\" type=\"radio\" name=\"sm[mode]\" value=\"stateless\" <?php checked( $sm->mode, 'stateless' ); ?>>\n          <?php if ( apply_filters('wp_stateless_is_app_engine', false) ) : ?>\n            <?php _e('Stateless (Google App Engine Detected)', ud_get_stateless_media()->domain); ?>\n          <?php else : ?>\n            <?php _e('Stateless', ud_get_stateless_media()->domain); ?>\n          <?php endif; ?>\n\n          <small class=\"description\"><?php _e('Store and serve media files with Google Cloud Storage only. Media files are not stored locally.', ud_get_stateless_media()->domain); ?></small>\n        </label>\n      </p>\n\n      <hr>\n\n      <h4><?php _e('File URL Replacement', ud_get_stateless_media()->domain); ?></h4>\n      \n      <p class=\"sm-file-url\">\n        <select name=\"sm[body_rewrite]\" id=\"sm_body_rewrite\">\n          <?php if (is_network_admin()) : ?>\n            <option value=\"\" <?php selected( $sm->body_rewrite, '' ); ?>><?php _e(\"Don't override\"); ?></option>\n          <?php endif; ?>\n          <option value=\"false\" <?php selected( $sm->body_rewrite, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"enable_editor\" <?php selected( $sm->body_rewrite, 'enable_editor' ); ?>><?php _e('Enable Editor', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"enable_meta\" <?php selected( $sm->body_rewrite, 'enable_meta' ); ?>><?php _e('Enable Meta', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"true\" <?php selected( $sm->body_rewrite, 'true' ); ?>><?php _e('Enable Editor & Meta', ud_get_stateless_media()->domain); ?></option>\n        </select>  \n      </p>\n            \n      <p class=\"description\">\n        <strong id=\"notice-body_rewrite\"></strong> \n        <?php _e('Scans post content and meta during presentation and replaces local media file urls with GCS urls. When selecting meta or true depending on the amount of meta, this could be significantly impact performance negatively. This setting does not modify your database.', ud_get_stateless_media()->domain); ?>\n      </p>\n\n      <h4 class=\"supported-file-types\"><?php _e('Supported File Types', ud_get_stateless_media()->domain); ?></h4>\n      \n      <div class=\"body_rewrite_types supported-file-types\">\n        <p>\n          <label for=\"body_rewrite_types\">\n            <input name=\"sm[body_rewrite_types]\" type=\"text\" id=\"body_rewrite_types\" class=\"regular-text ltr\" value=\"<?php echo $sm->body_rewrite_types; ?>\">\n          </label>\n        </p>\n        \n        <p class=\"description\"><strong id=\"notice-body_rewrite_types\"></strong> \n          <?php _e('Define the file types you would like supported with File URL Replacement. Separate each type by a space.', ud_get_stateless_media()->domain); ?>\n        </p>\n      </div>\n\n      <h4><?php _e('REST API Endpoint', ud_get_stateless_media()->domain); ?></h4>\n\n      <div class=\"use_api_siteurl\">\n        <p>\n          <select id=\"use_api_siteurl\" name=\"sm[use_api_siteurl]\">\n            <?php if (is_network_admin()) : ?>\n              <option value=\"\" <?php selected( $sm->use_api_siteurl, '' ); ?>><?php _e('Don\\'t override', ud_get_stateless_media()->domain); ?></option>\n            <?php endif; ?>\n            <option value=\"WP_HOME\" <?php selected( $sm->use_api_siteurl, 'WP_HOME' ); ?>><?php _e('WP_HOME', ud_get_stateless_media()->domain); ?></option>\n            <option value=\"WP_SITEURL\" <?php selected( $sm->use_api_siteurl, 'WP_SITEURL' ); ?>><?php _e('WP_SITEURL', ud_get_stateless_media()->domain); ?></option>\n          </select>\n        </p>\n\n        <p class=\"description\">\n          <strong id=\"notice-use_api_siteurl\"></strong> \n          <?php _e('By default, we use the <code>WP_HOME</code> endpoint for REST API requests. If you encounter problems with synchronization or data optimization functions, try using the <code>WP_SITEURL</code> option instead. This is useful if your WordPress dashboard and frontend website utilize different domain names, such as with a headless CMS configuration.', ud_get_stateless_media()->domain); ?>\n        </p>\n      </div>\n\n      <h4><?php _e('Send Status Emails', ud_get_stateless_media()->domain); ?></h4>\n      \n      <div class=\"status_email_type\">\n        <p class=\"sm-status-email-type\">\n          <select name=\"sm[status_email_type]\" id=\"sm_status_email_type\">\n            <?php if (is_network_admin()) : ?>\n              <option value=\"\" <?php selected( $sm->status_email_type, '' ); ?>><?php _e(\"Don't override\"); ?></option>\n            <?php endif; ?>\n            <option value=\"false\" <?php selected( $sm->status_email_type, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n            <option value=\"true\" <?php selected( $sm->status_email_type, 'true' ); ?>><?php _e('Use Admin Email', ud_get_stateless_media()->domain); ?></option>\n            <option value=\"custom\" <?php selected( $sm->status_email_type, 'custom' ); ?>><?php _e('Use Custom Email', ud_get_stateless_media()->domain); ?></option>\n          </select>  \n        </p>\n\n        <p class=\"description\"><strong id=\"notice-status_email_type\"></strong> \n          <?php _e('Send status emails for background synchronization and data optimization processes.', ud_get_stateless_media()->domain); ?>\n        </p>\n      </div>\n\n      <div class=\"sm-status-email-address\">\n        <label for=\"status_email_address\">\n          <input name=\"sm[status_email_address]\" type=\"text\" id=\"status_status_email_addressemail\" class=\"regular-text ltr\" value=\"<?php echo $sm->status_email_address; ?>\">\n        </label>\n\n        <p class=\"description\">\n            <?php _e('You can specify several emails, separated by comma.', ud_get_stateless_media()->domain); ?>\n        </p>\n      </div>\n\n    </fieldset>\n  </td>\n</tr>\n"
  },
  {
    "path": "static/views/settings-sections/google-cloud-storage.php",
    "content": "<tr>\n  <th scope=\"row\"><?php _e('Google Cloud Storage (GCS)', ud_get_stateless_media()->domain); ?></th>\n\n  <td>\n    <fieldset>\n      <legend class=\"screen-reader-text\"><span><?php _e('Google Cloud Storage (GCS)', ud_get_stateless_media()->domain); ?></span></legend>\n            \n      <h4><?php _e('Bucket', ud_get_stateless_media()->domain); ?></h4>\n      \n      <p>\n        <label for=\"bucket_name\">\n          <input name=\"sm[bucket]\" type=\"text\" id=\"bucket_name\" class=\"regular-text ltr\" value=\"<?php echo $sm->bucket?>\">\n        </label>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-bucket\"></strong> \n        <?php _e('The name of the GCS bucket.', ud_get_stateless_media()->domain); ?>\n      </p>\n        \n      <hr>\n\n      <h4><?php _e('Service Account JSON', ud_get_stateless_media()->domain); ?></h4>\n          \n      <p>\n        <label for=\"service_account_json\">\n          <textarea name=\"sm[key_json]\" \n            type=\"text\" \n            id=\"service_account_json\" \n            class=\"regular-text ltr\" \n            autocomplete=\"off\" \n            autocorrect=\"off\" \n            autocapitalize=\"off\" \n            spellcheck=\"false\"\n          ><?php echo $sm->key_json; ?></textarea>\n        </label>\n      </p>\n        \n      <p class=\"description\">\n        <strong id=\"notice-key_json\"></strong> \n        <?php _e('Private key in JSON format for the service account WP-Stateless will use to connect to your Google Cloud project and bucket. Empty this field to access the Stateless Setup Assistant.', ud_get_stateless_media()->domain); ?>\n      </p>\n        \n      <hr>\n\n      <h4><?php _e('Cache-Control', ud_get_stateless_media()->domain); ?></h4>\n        \n      <p>\n        <label for=\"gcs_cache_control_text\">\n          <input name=\"sm[cache_control]\" type=\"text\" id=\"gcs_cache_control_text\" class=\"regular-text ltr\" placeholder=\"<?php echo ud_get_stateless_media()->get_default_cache_control(); ?>\" value=\"<?php echo $sm->cache_control; ?>\">\n        </label>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-cache_control\"></strong> \n        <?php _e('Override the default cache control assigned by GCS.', ud_get_stateless_media()->domain); ?>\n      </p>\n      \n      <hr>\n\n      <h4><?php _e('Delete GCS File', ud_get_stateless_media()->domain); ?></h4>\n\n      <p>\n        <select name=\"sm[delete_remote]\" id=\"gcs_delete_file\">\n          <?php if (is_network_admin()) : ?>\n            <option value=\"\" <?php selected( $sm->delete_remote, '' ); ?>><?php _e('Don\\'t override', ud_get_stateless_media()->domain); ?></option>\n          <?php endif; ?>\n          <option value=\"true\" <?php selected( $sm->delete_remote, 'true' ); ?>><?php _e('Enable', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"false\" <?php selected( $sm->delete_remote, 'false' ); ?>><?php _e('Disable', ud_get_stateless_media()->domain); ?></option>\n        </select>\n      </p>\n\n      <p class=\"description\">\n        <strong id=\"notice-delete_remote\"></strong> \n        <?php _e('Delete the GCS file when the file is deleted from WordPress.', ud_get_stateless_media()->domain); ?>\n      </p>\n        \n    </fieldset>\n  </td>\n</tr>\n"
  },
  {
    "path": "static/views/settings-sections/network.php",
    "content": "<tr>\n  <th scope=\"row\"><?php _e('Settings Panel Visibility', ud_get_stateless_media()->domain); ?></th>\n\n  <td>\n    <fieldset>\n      <legend class=\"screen-reader-text\"><span><?php _e('Settings Panel Visibility', ud_get_stateless_media()->domain); ?></span></legend>\n\n      <p>\n        <select name=\"sm[hide_settings_panel]\" id=\"hide_settings_panel\" <?php disabled( array_key_exists('hide_settings_panel', $sm->readonly) ); ?>>\n          <option value=\"false\" <?php selected( $sm->hide_settings_panel, 'false' ); ?>><?php _e('Visible', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"true\" <?php selected( $sm->hide_settings_panel, 'true' ); ?>><?php _e('Hidden', ud_get_stateless_media()->domain); ?></option>\n        </select>\n      </p>\n      \n      <p class=\"description\"><?php _e(\"Control the visibility and access of the WP-Stateless settings panel within individual network sites.\"); ?></p>\n    </fieldset>\n  </td>\n</tr>\n\n<?php /* #152\n<tr>\n  <th scope=\"row\"><?php _e('Setup Assistant Visibility', ud_get_stateless_media()->domain); ?></th>\n  \n  <td>\n    <fieldset>\n      <legend class=\"screen-reader-text\"><span><?php _e('Setup Assistant Visibility', ud_get_stateless_media()->domain); ?></span></legend>\n      \n      <p>\n        <select name=\"sm[hide_setup_assistant]\" id=\"hide_setup_assistant\" <?php disabled( array_key_exists('hide_setup_assistant', $sm->readonly) ); ?>>\n          <option value=\"false\" <?php selected( $sm->hide_setup_assistant, 'false' ); ?>><?php _e('Visible', ud_get_stateless_media()->domain); ?></option>\n          <option value=\"true\" <?php selected( $sm->hide_setup_assistant, 'true' ); ?>><?php _e('Hidden', ud_get_stateless_media()->domain); ?></option>\n        </select>\n      </p>\n      \n      <p class=\"description\"><?php _e(\"Control the visibility and access of the WP-Stateless setup assistant within individual network sites.\"); ?></p>\n    </fieldset>\n  </td>\n</tr>\n*/ ?>\n"
  },
  {
    "path": "static/views/settings-tab.php",
    "content": "\n\n<form method=\"post\" action=\"\">\n  <input type=\"hidden\" name=\"action\" value=\"stateless_settings\">\n  <?php wp_nonce_field('wp-stateless-settings', '_smnonce'); ?>\n  <table class=\"form-table\">\n    <tbody>\n\n      <?php if (is_network_admin()) : ?>\n        <?php require_once( dirname(__FILE__) . '/settings-sections/network.php'); ?>\n      <?php endif; ?>\n\n      <?php require_once( dirname(__FILE__) . '/settings-sections/general.php'); ?>\n      <?php require_once( dirname(__FILE__) . '/settings-sections/google-cloud-storage.php'); ?>\n      <?php require_once( dirname(__FILE__) . '/settings-sections/file-url.php'); ?>\n      \n    </tbody>\n  </table>\n\n  <?php submit_button(null, 'primary', 'submit', true, array('id' => 'save-settings')); ?>\n</form>\n"
  },
  {
    "path": "static/views/settings_interface.php",
    "content": "<div class=\"wrap\">\n  <div id=\"stateless-settings-page-title\">\n    <h1>\n      <?php _e('WP-Stateless', ud_get_stateless_media()->domain); ?> \n      <a href=\"<?php echo ud_get_stateless_media()->get_docs_page_url(); ?>\" title=\"<?php _e('Documentation', ud_get_stateless_media()->domain); ?>\" target=\"_blank\" class=\"stateless-settings-docs-link\"><span class=\"dashicons dashicons-editor-help\"></span></a>\n    </h1>\n    \n    <div class=\"description\"><?php _e('Upload and serve your WordPress media files from Google Cloud Storage.', ud_get_stateless_media()->domain); ?></div>\n  </div>\n  <h2 class=\"nav-tab-wrapper\">\n    <a href=\"#stless_settings_tab\" class=\"stless_setting_tab nav-tab <?php if ($tab == 'stless_settings_tab') echo 'nav-tab-active'; ?>\"><?php _e('Settings', ud_get_stateless_media()->domain); ?></a>\n    <?php if (!is_network_admin() && !apply_filters('wp_stateless_is_app_engine', false) && ud_get_stateless_media('sm.mode') != 'disabled') : ?>\n      <a href=\"#stless_sync_tab\" class=\"stless_setting_tab nav-tab <?php if ($tab == 'stless_sync_tab') echo 'nav-tab-active'; ?>\"><?php _e('Sync', ud_get_stateless_media()->domain); ?></a>\n    <?php endif; ?>\n    <a href=\"#stless_compatibility_tab\" class=\"stless_setting_tab nav-tab <?php if ($tab == 'stless_compatibility_tab') echo 'nav-tab-active'; ?>\"><?php _e('Compatibility', ud_get_stateless_media()->domain); ?></a>\n    <?php if ( apply_filters('wp_stateless_addons_tab_visible', false) ) : ?>\n      <a href=\"#stless_addons_tab\" class=\"stless_setting_tab nav-tab <?php if ($tab == 'stless_addons_tab') echo 'nav-tab-active'; ?>\"><?php _e('Addons', ud_get_stateless_media()->domain); ?></a>\n    <?php endif; ?>\n    <?php if ( apply_filters('wp_stateless_status_tab_visible', false) ) : ?>\n      <a href=\"#stless_status_tab\" class=\"stless_setting_tab stless_status_tab nav-tab <?php if ($tab == 'stless_status_tab') echo 'nav-tab-active'; ?>\"><?php _e('Status', ud_get_stateless_media()->domain); ?></a>\n    <?php endif; ?>\n   </h2>\n\n  <div class=\"stless_settings\">\n    <div id=\"stless_settings_tab\" class=\"stless_settings_content <?php if ($tab == 'stless_settings_tab') echo 'active'; ?>\">\n      <?php do_action('wp_stateless_settings_tab_content'); ?>\n    </div>\n\n    <?php if (!is_network_admin() && !apply_filters('wp_stateless_is_app_engine', false) && ud_get_stateless_media('sm.mode') != 'disabled') : ?>\n      <div id=\"stless_sync_tab\" class=\"stless_settings_content <?php if ($tab == 'stless_sync_tab') echo 'active'; ?>\">\n        <?php do_action('wp_stateless_processing_tab_content'); ?>\n      </div>\n    <?php endif; ?>\n\n    <?php if ( apply_filters('wp_stateless_compatibility_tab_visible', false) ) : ?>\n      <div id=\"stless_compatibility_tab\" class=\"stless_settings_content <?php if ($tab == 'stless_compatibility_tab') echo 'active'; ?>\">\n        <div class=\"container-fluid\">\n          <?php do_action('wp_stateless_compatibility_tab_content'); ?>\n        </div>\n      </div>\n    <?php endif; ?>\n\n    <?php if ( apply_filters('wp_stateless_addons_tab_visible', false) ) : ?>\n      <div id=\"stless_addons_tab\" class=\"stless_settings_content <?php if ($tab == 'stless_addons_tab') echo 'active'; ?>\">\n        <div class=\"container-fluid\">\n          <?php do_action('wp_stateless_addons_tab_content'); ?>\n        </div>\n      </div>\n    <?php endif; ?>\n\n    <?php if ( apply_filters('wp_stateless_status_tab_visible', false) ) : ?>\n      <div id=\"stless_status_tab\" class=\"stless_settings_content <?php if ($tab == 'stless_status_tab') echo 'active'; ?>\">\n        <?php do_action('wp_stateless_status_tab_content'); ?>\n      </div>\n    <?php endif; ?>\n  </div>\n</div>\n"
  },
  {
    "path": "static/views/setup_wizard_interface.php",
    "content": "<?php\n  $consoleUrl = 'https://console.stateless.ci';\n  $auth_token = \\wpCloud\\StatelessMedia\\Utility::generate_wizard_auth_token();\n  $api_root = get_rest_url();\n  $is_network = intval(is_network_admin());\n  $admin_url = admin_url();\n?>\n\n<script>\n  (function($) {\n    $(document).ready(function(){\n      $('#consoleStatelessIframeWrapper')\n        .html('<iframe id=\"console-stateless-wizard\" src=\"<?php esc_html_e($consoleUrl) ?>?wp_nonce=<?php esc_html_e($auth_token) ?>&api_root=<?php esc_html_e($api_root) ?>&is_network=<?php esc_html_e($is_network) ?>&admin_url=<?php esc_html_e($admin_url) ?>\" />')\n    })\n  })(jQuery)\n</script>\n\n<div id=\"consoleStatelessIframeWrapper\"></div>\n<style>#wpfooter{display:none!important}</style>"
  },
  {
    "path": "static/views/status-sections/info.php",
    "content": "\n<div class=\"metabox-holder\">\n  <div class=\"postbox\">\n\t  <h2 class=\"hndle stateless-info-heading\">\n      <?php _e('Info', ud_get_stateless_media()->domain); ?>\n      <div>\n        <span class=\"stateless-info-copy-success\"><?php _e('Copied!', ud_get_stateless_media()->domain); ?></span>\n        <button type=\"button\" class=\"button copy-button\" data-clipboard-text=\"<?php echo $copy_text; ?>\"><?php _e('Copy Info to Clipboard', ud_get_stateless_media()->domain); ?></button>\n      </div>\n    </h2>\n\n    <div class=\"inside\">\n      <div class=\"main\">\n\n        <div id=\"stateless-info\">\n\n          <?php foreach( $sections as $key => $section ) : ?>\n\n            <h3 class=\"stateless-info-heading\">\n              <button class=\"stateless-info-button\" data-section=\"stateless-info-block-<?php echo $key; ?>\" type=\"button\">\n                <span class=\"title\"><?php echo $section->title; ?></span>\n                <span class=\"dashicons dashicons-arrow-down-alt2\"></span>\n              </button>\n            </h3>\n\n            <div id=\"stateless-info-block-<?php echo $key; ?>\" class=\"stateless-info-block hidden\"\\>\n              <table class=\"widefat striped\" role=\"presentation\">\n                <tbody>\n\n                <?php foreach( $section->rows as $key => $row ) : ?>\n                    <tr class=\"<?php echo $key; ?>\">\n                      <td class=\"label\"><?php echo $row->label; ?></td>\n                      <td class=\"value\"><?php echo $row->value; ?></td>\n                    </tr>\n                  <?php endforeach; ?>\n\n                </tbody>\n              </table>\n            </div>\n\n          <?php endforeach; ?>\n        \n        </div> <!-- id=\"stateless-info\" -->\n\n      </div> <!-- class=\"main\" -->\n    </div> <!-- class=\"inside\" -->\n\n  </div>\n</div>\n"
  },
  {
    "path": "static/views/status-sections/migrations.php",
    "content": "\n<div class=\"metabox-holder migrations-wrap\">\n  <div class=\"postbox\">\n\t  <h2 class=\"hndle\"><?php _e('Data Optimization', ud_get_stateless_media()->domain); ?></h2>\n    <div class=\"hndle-notice\">\n      <p><?php _e('Beginning with WP-Stateless 4.0, the method used to store and access plugin data has improved significantly. We\\'ve detected that your data still needs to be updated using this new method.', ud_get_stateless_media()->domain); ?></p>\n      <p><?php _e('Start your data optimization process below to experience a faster and more performant WP-Stateless. Before you begin, please consider the following:', ud_get_stateless_media()->domain); ?></p>\n      <ul>\n        <li><?php _e('Create a backup copy of your WordPress database.', ud_get_stateless_media()->domain); ?></li>\n        <li><?php _e('Do not upload, edit, or delete media or files while the optimization process is underway.', ud_get_stateless_media()->domain); ?></li>\n        <li><?php _e('Perform this update during a low period in your website traffic.', ud_get_stateless_media()->domain); ?></li>\n      </ul>\n    </div>\n\n    <div id=\"migration-action\" class=\"inside <?php echo $migration['classes']; ?>\" data-id=\"<?php echo $migration_id; ?>\" data-queue=\"<?php echo implode(':', $migration_ids); ?>\">\n      <div class=\"main\">\n        <div class=\"actions\">\n          <a href=\"#\" class=\"button button-primary start\" data-action=\"start\"><?php _e('Start Data Optimization', ud_get_stateless_media()->domain); ?></a>\n          <a href=\"#\" class=\"button button-secondary pause\" data-action=\"pause\"><?php _e('Pause Data Optimization', ud_get_stateless_media()->domain); ?></a>\n          <a href=\"#\" class=\"button button-primary resume\" data-action=\"resume\"><?php _e('Resume Data Optimization', ud_get_stateless_media()->domain); ?></a>\n        </div>\n\n        <div class=\"progress-wrap\">\n          <div class=\"progress\"><div class=\"bar\"></div><span class=\"percent\"></span></div>\n        </div>\n      </div>\n    </div>\n\n  </div>\n</div>\n\n<?php\n  $default_email = ud_get_stateless_media()->get_notification_email(); \n  $default_email = empty($default_email) ? __('Disabled', ud_get_stateless_media()->domain) : $default_email;\n\n  $current_user = wp_get_current_user();\n  $current_email = $current_user->user_email ?? '';\n?>\n\n<div id=\"stateless-migration-confirm\" title=\"<?php _e('Optimize WP-Stateless Data', ud_get_stateless_media()->domain); ?>\">\n  <p><?php _e('You are about to optimize your WP-Stateless data. This process makes changes to your WordPress database.', ud_get_stateless_media()->domain); ?></p>\n  <p><?php _e('Create a backup copy of your database, and do not upload, edit, or delete media or files during the optimization process.', ud_get_stateless_media()->domain); ?></p>\n  <p>\n    <?php _e('WP-Stateless will send an email notification when the process is complete. Who would you like to receive this notification?', ud_get_stateless_media()->domain); ?>\n    \n    <label for=\"stateless-migration-email-default\">\n      <input type=\"radio\" name=\"email-notification\" id=\"stateless-migration-email-default\" value=\"<?php echo $default_email;?>\" checked=\"checked\" /> \n      <?php printf( __('Administration Email Address (%s)', ud_get_stateless_media()->domain), $default_email ); ?>\n    </label>\n\n    <label for=\"stateless-migration-email-user\">\n      <input type=\"radio\" name=\"email-notification\" id=\"stateless-migration-email-user\" value=\"<?php echo $current_email?>\" /> \n      <?php printf( __('Current User (%s)', ud_get_stateless_media()->domain), $current_email ); ?>\n    </label>\n  </p>\n  <p><?php _e('Are you ready to continue?', ud_get_stateless_media()->domain); ?></p>\n</div>\n"
  },
  {
    "path": "static/wiki/Media-Object.md",
    "content": "\n```\nArray\n(\n    [bucket] => media.smftampa.com\n    [cacheControl] => public, max-age=36000, must-revalidate\n    [componentCount] => \n    [contentDisposition] => \n    [contentEncoding] => \n    [contentLanguage] => \n    [contentType] => image/jpeg\n    [crc32c] => Hrj+mg==\n    [etag] => CMiK3caexMMCEAE=\n    [generation] => 1422913686685000\n    [id] => media.smftampa.com/2015/02/82db38c5ac911524bcf7be463fc04da73.jpg/1422913686685000\n    [kind] => storage#object\n    [md5Hash] => upblDqBJPhkDaDxe/9tQMQ==\n    [mediaLink] => https://www.googleapis.com/download/storage/v1/b/media.smftampa.com/o/2015%2F02%2F82db38c5ac911524bcf7be463fc04da73.jpg?generation=1422913686685000&alt=media\n    [metadata] => Array\n        (\n            [width] => 640\n            [height] => 480\n            [object-id] => 605\n            [source-id] => 75ec2a48bd43df428a094ec1c10e7f71\n            [file-hash] => b44df4fa79d667a3facac283d729dacb\n        )\n    [metageneration] => 1\n    [name] => 2015/02/82db38c5ac911524bcf7be463fc04da73.jpg\n    [selfLink] => https://www.googleapis.com/storage/v1/b/media.smftampa.com/o/2015%2F02%2F82db38c5ac911524bcf7be463fc04da73.jpg\n    [size] => 50617\n    [storageClass] => STANDARD\n    [timeDeleted] => \n    [updated] => 2015-02-02T21:48:06.684Z\n)\n\n```"
  },
  {
    "path": "vendor/autoload.php",
    "content": "<?php\n\n// autoload.php @generated by Composer\n\nif (PHP_VERSION_ID < 50600) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via \"composer self-update --2.2\". Aborting.'.PHP_EOL;\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, $err);\n        } elseif (!headers_sent()) {\n            echo $err;\n        }\n    }\n    throw new RuntimeException($err);\n}\n\nrequire_once __DIR__ . '/composer/autoload_real.php';\n\nreturn ComposerAutoloaderInitc59d002476a452800baaf79c430753cb::getLoader();\n"
  },
  {
    "path": "vendor/ccampbell/chromephp/ChromePhp.php",
    "content": "<?php\n/**\n * Copyright 2010-2013 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Server Side Chrome PHP debugger class\n *\n * @package ChromePhp\n * @author Craig Campbell <iamcraigcampbell@gmail.com>\n */\nclass ChromePhp\n{\n    /**\n     * @var string\n     */\n    const VERSION = '4.1.0';\n\n    /**\n     * @var string\n     */\n    const HEADER_NAME = 'X-ChromeLogger-Data';\n\n    /**\n     * @var string\n     */\n    const BACKTRACE_LEVEL = 'backtrace_level';\n\n    /**\n     * @var string\n     */\n    const LOG = 'log';\n\n    /**\n     * @var string\n     */\n    const WARN = 'warn';\n\n    /**\n     * @var string\n     */\n    const ERROR = 'error';\n\n    /**\n     * @var string\n     */\n    const GROUP = 'group';\n\n    /**\n     * @var string\n     */\n    const INFO = 'info';\n\n    /**\n     * @var string\n     */\n    const GROUP_END = 'groupEnd';\n\n    /**\n     * @var string\n     */\n    const GROUP_COLLAPSED = 'groupCollapsed';\n\n    /**\n     * @var string\n     */\n    const TABLE = 'table';\n\n    /**\n     * @var string\n     */\n    protected $_php_version;\n\n    /**\n     * @var int\n     */\n    protected $_timestamp;\n\n    /**\n     * @var array\n     */\n    protected $_json = array(\n        'version' => self::VERSION,\n        'columns' => array('log', 'backtrace', 'type'),\n        'rows' => array()\n    );\n\n    /**\n     * @var array\n     */\n    protected $_backtraces = array();\n\n    /**\n     * @var bool\n     */\n    protected $_error_triggered = false;\n\n    /**\n     * @var array\n     */\n    protected $_settings = array(\n        self::BACKTRACE_LEVEL => 1\n    );\n\n    /**\n     * @var ChromePhp\n     */\n    protected static $_instance;\n\n    /**\n     * Prevent recursion when working with objects referring to each other\n     *\n     * @var array\n     */\n    protected $_processed = array();\n\n    /**\n     * constructor\n     */\n    private function __construct()\n    {\n        $this->_php_version = phpversion();\n        $this->_timestamp = $this->_php_version >= 5.1 ? $_SERVER['REQUEST_TIME'] : time();\n        $this->_json['request_uri'] = $_SERVER['REQUEST_URI'];\n    }\n\n    /**\n     * gets instance of this class\n     *\n     * @return ChromePhp\n     */\n    public static function getInstance()\n    {\n        if (self::$_instance === null) {\n            self::$_instance = new self();\n        }\n        return self::$_instance;\n    }\n\n    /**\n     * logs a variable to the console\n     *\n     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n     * @return void\n     */\n    public static function log()\n    {\n        $args = func_get_args();\n        return self::_log('', $args);\n    }\n\n    /**\n     * logs a warning to the console\n     *\n     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n     * @return void\n     */\n    public static function warn()\n    {\n        $args = func_get_args();\n        return self::_log(self::WARN, $args);\n    }\n\n    /**\n     * logs an error to the console\n     *\n     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n     * @return void\n     */\n    public static function error()\n    {\n        $args = func_get_args();\n        return self::_log(self::ERROR, $args);\n    }\n\n    /**\n     * sends a group log\n     *\n     * @param string value\n     */\n    public static function group()\n    {\n        $args = func_get_args();\n        return self::_log(self::GROUP, $args);\n    }\n\n    /**\n     * sends an info log\n     *\n     * @param mixed $data,... unlimited OPTIONAL number of additional logs [...]\n     * @return void\n     */\n    public static function info()\n    {\n        $args = func_get_args();\n        return self::_log(self::INFO, $args);\n    }\n\n    /**\n     * sends a collapsed group log\n     *\n     * @param string value\n     */\n    public static function groupCollapsed()\n    {\n        $args = func_get_args();\n        return self::_log(self::GROUP_COLLAPSED, $args);\n    }\n\n    /**\n     * ends a group log\n     *\n     * @param string value\n     */\n    public static function groupEnd()\n    {\n        $args = func_get_args();\n        return self::_log(self::GROUP_END, $args);\n    }\n\n    /**\n     * sends a table log\n     *\n     * @param string value\n     */\n    public static function table()\n    {\n        $args = func_get_args();\n        return self::_log(self::TABLE, $args);\n    }\n\n    /**\n     * internal logging call\n     *\n     * @param string $type\n     * @return void\n     */\n    protected static function _log($type, array $args)\n    {\n        // nothing passed in, don't do anything\n        if (count($args) == 0 && $type != self::GROUP_END) {\n            return;\n        }\n\n        $logger = self::getInstance();\n\n        $logger->_processed = array();\n\n        $logs = array();\n        foreach ($args as $arg) {\n            $logs[] = $logger->_convert($arg);\n        }\n\n        $backtrace = debug_backtrace(false);\n        $level = $logger->getSetting(self::BACKTRACE_LEVEL);\n\n        $backtrace_message = 'unknown';\n        if (isset($backtrace[$level]['file']) && isset($backtrace[$level]['line'])) {\n            $backtrace_message = $backtrace[$level]['file'] . ' : ' . $backtrace[$level]['line'];\n        }\n\n        $logger->_addRow($logs, $backtrace_message, $type);\n    }\n\n    /**\n     * converts an object to a better format for logging\n     *\n     * @param Object\n     * @return array\n     */\n    protected function _convert($object)\n    {\n        // if this isn't an object then just return it\n        if (!is_object($object)) {\n            return $object;\n        }\n\n        //Mark this object as processed so we don't convert it twice and it\n        //Also avoid recursion when objects refer to each other\n        $this->_processed[] = $object;\n\n        $object_as_array = array();\n\n        // first add the class name\n        $object_as_array['___class_name'] = get_class($object);\n\n        // loop through object vars\n        $object_vars = get_object_vars($object);\n        foreach ($object_vars as $key => $value) {\n\n            // same instance as parent object\n            if ($value === $object || in_array($value, $this->_processed, true)) {\n                $value = 'recursion - parent object [' . get_class($value) . ']';\n            }\n            $object_as_array[$key] = $this->_convert($value);\n        }\n\n        $reflection = new ReflectionClass($object);\n\n        // loop through the properties and add those\n        foreach ($reflection->getProperties() as $property) {\n\n            // if one of these properties was already added above then ignore it\n            if (array_key_exists($property->getName(), $object_vars)) {\n                continue;\n            }\n            $type = $this->_getPropertyKey($property);\n\n            if ($this->_php_version >= 5.3) {\n                $property->setAccessible(true);\n            }\n\n            try {\n                $value = $property->getValue($object);\n            } catch (ReflectionException $e) {\n                $value = 'only PHP 5.3 can access private/protected properties';\n            }\n\n            // same instance as parent object\n            if ($value === $object || in_array($value, $this->_processed, true)) {\n                $value = 'recursion - parent object [' . get_class($value) . ']';\n            }\n\n            $object_as_array[$type] = $this->_convert($value);\n        }\n        return $object_as_array;\n    }\n\n    /**\n     * takes a reflection property and returns a nicely formatted key of the property name\n     *\n     * @param ReflectionProperty\n     * @return string\n     */\n    protected function _getPropertyKey(ReflectionProperty $property)\n    {\n        $static = $property->isStatic() ? ' static' : '';\n        if ($property->isPublic()) {\n            return 'public' . $static . ' ' . $property->getName();\n        }\n\n        if ($property->isProtected()) {\n            return 'protected' . $static . ' ' . $property->getName();\n        }\n\n        if ($property->isPrivate()) {\n            return 'private' . $static . ' ' . $property->getName();\n        }\n    }\n\n    /**\n     * adds a value to the data array\n     *\n     * @var mixed\n     * @return void\n     */\n    protected function _addRow(array $logs, $backtrace, $type)\n    {\n        // if this is logged on the same line for example in a loop, set it to null to save space\n        if (in_array($backtrace, $this->_backtraces)) {\n            $backtrace = null;\n        }\n\n        // for group, groupEnd, and groupCollapsed\n        // take out the backtrace since it is not useful\n        if ($type == self::GROUP || $type == self::GROUP_END || $type == self::GROUP_COLLAPSED) {\n            $backtrace = null;\n        }\n\n        if ($backtrace !== null) {\n            $this->_backtraces[] = $backtrace;\n        }\n\n        $row = array($logs, $backtrace, $type);\n\n        $this->_json['rows'][] = $row;\n        $this->_writeHeader($this->_json);\n    }\n\n    protected function _writeHeader($data)\n    {\n        header(self::HEADER_NAME . ': ' . $this->_encode($data));\n    }\n\n    /**\n     * encodes the data to be sent along with the request\n     *\n     * @param array $data\n     * @return string\n     */\n    protected function _encode($data)\n    {\n        return base64_encode(utf8_encode(json_encode($data)));\n    }\n\n    /**\n     * adds a setting\n     *\n     * @param string key\n     * @param mixed value\n     * @return void\n     */\n    public function addSetting($key, $value)\n    {\n        $this->_settings[$key] = $value;\n    }\n\n    /**\n     * add ability to set multiple settings in one call\n     *\n     * @param array $settings\n     * @return void\n     */\n    public function addSettings(array $settings)\n    {\n        foreach ($settings as $key => $value) {\n            $this->addSetting($key, $value);\n        }\n    }\n\n    /**\n     * gets a setting\n     *\n     * @param string key\n     * @return mixed\n     */\n    public function getSetting($key)\n    {\n        if (!isset($this->_settings[$key])) {\n            return null;\n        }\n        return $this->_settings[$key];\n    }\n}\n"
  },
  {
    "path": "vendor/ccampbell/chromephp/README.md",
    "content": "## Overview\nChromePhp is a PHP library for the Chrome Logger Google Chrome extension.\n\nThis library allows you to log variables to the Chrome console.\n\n## Requirements\n- PHP 5 or later\n\n## Installation\n1. Install the Chrome extension from: https://chrome.google.com/extensions/detail/noaneddfkdjfnfdakjjmocngnfkfehhd\n2. Click the extension icon in the browser to enable it for the current tab's domain\n3. Put ChromePhp.php somewhere in your PHP include path\n4. Log some data\n\n    ```php\n    include 'ChromePhp.php';\n    ChromePhp::log('Hello console!');\n    ChromePhp::log($_SERVER);\n    ChromePhp::warn('something went wrong!');\n    ```\n\nMore information can be found here:\nhttp://www.chromelogger.com\n"
  },
  {
    "path": "vendor/ccampbell/chromephp/composer.json",
    "content": "{\n    \"name\": \"ccampbell/chromephp\",\n    \"type\": \"library\",\n    \"description\": \"Log variables to the Chrome console (via Chrome Logger Google Chrome extension).\",\n    \"keywords\": [\"log\",\"logging\"],\n    \"homepage\": \"http://github.com/ccampbell/chromephp\",\n    \"license\": \"Apache-2.0\",\n    \"authors\": [\n        {\n            \"name\": \"Craig Campbell\",\n            \"email\": \"iamcraigcampbell@gmail.com\",\n            \"homepage\": \"http://craig.is\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.0.0\"\n    },\n    \"autoload\": {\n        \"psr-0\": {\n            \"ChromePhp\": \"\"\n        }\n    }\n}\n"
  },
  {
    "path": "vendor/composer/ClassLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer\\Autoload;\n\n/**\n * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.\n *\n *     $loader = new \\Composer\\Autoload\\ClassLoader();\n *\n *     // register classes with namespaces\n *     $loader->add('Symfony\\Component', __DIR__.'/component');\n *     $loader->add('Symfony',           __DIR__.'/framework');\n *\n *     // activate the autoloader\n *     $loader->register();\n *\n *     // to enable searching the include path (eg. for PEAR packages)\n *     $loader->setUseIncludePath(true);\n *\n * In this example, if you try to use a class in the Symfony\\Component\n * namespace or one of its children (Symfony\\Component\\Console for instance),\n * the autoloader will first look for the class under the component/\n * directory, and it will then fallback to the framework/ directory if not\n * found before giving up.\n *\n * This class is loosely based on the Symfony UniversalClassLoader.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @see    https://www.php-fig.org/psr/psr-0/\n * @see    https://www.php-fig.org/psr/psr-4/\n */\nclass ClassLoader\n{\n    /** @var \\Closure(string):void */\n    private static $includeFile;\n\n    /** @var string|null */\n    private $vendorDir;\n\n    // PSR-4\n    /**\n     * @var array<string, array<string, int>>\n     */\n    private $prefixLengthsPsr4 = array();\n    /**\n     * @var array<string, list<string>>\n     */\n    private $prefixDirsPsr4 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr4 = array();\n\n    // PSR-0\n    /**\n     * List of PSR-0 prefixes\n     *\n     * Structured as array('F (first letter)' => array('Foo\\Bar (full prefix)' => array('path', 'path2')))\n     *\n     * @var array<string, array<string, list<string>>>\n     */\n    private $prefixesPsr0 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr0 = array();\n\n    /** @var bool */\n    private $useIncludePath = false;\n\n    /**\n     * @var array<string, string>\n     */\n    private $classMap = array();\n\n    /** @var bool */\n    private $classMapAuthoritative = false;\n\n    /**\n     * @var array<string, bool>\n     */\n    private $missingClasses = array();\n\n    /** @var string|null */\n    private $apcuPrefix;\n\n    /**\n     * @var array<string, self>\n     */\n    private static $registeredLoaders = array();\n\n    /**\n     * @param string|null $vendorDir\n     */\n    public function __construct($vendorDir = null)\n    {\n        $this->vendorDir = $vendorDir;\n        self::initializeIncludeClosure();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixes()\n    {\n        if (!empty($this->prefixesPsr0)) {\n            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));\n        }\n\n        return array();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixesPsr4()\n    {\n        return $this->prefixDirsPsr4;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirs()\n    {\n        return $this->fallbackDirsPsr0;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirsPsr4()\n    {\n        return $this->fallbackDirsPsr4;\n    }\n\n    /**\n     * @return array<string, string> Array of classname => path\n     */\n    public function getClassMap()\n    {\n        return $this->classMap;\n    }\n\n    /**\n     * @param array<string, string> $classMap Class to filename map\n     *\n     * @return void\n     */\n    public function addClassMap(array $classMap)\n    {\n        if ($this->classMap) {\n            $this->classMap = array_merge($this->classMap, $classMap);\n        } else {\n            $this->classMap = $classMap;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix, either\n     * appending or prepending to the ones previously set for this prefix.\n     *\n     * @param string              $prefix  The prefix\n     * @param list<string>|string $paths   The PSR-0 root directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @return void\n     */\n    public function add($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            if ($prepend) {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr0\n                );\n            } else {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $this->fallbackDirsPsr0,\n                    $paths\n                );\n            }\n\n            return;\n        }\n\n        $first = $prefix[0];\n        if (!isset($this->prefixesPsr0[$first][$prefix])) {\n            $this->prefixesPsr0[$first][$prefix] = $paths;\n\n            return;\n        }\n        if ($prepend) {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $paths,\n                $this->prefixesPsr0[$first][$prefix]\n            );\n        } else {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $this->prefixesPsr0[$first][$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace, either\n     * appending or prepending to the ones previously set for this namespace.\n     *\n     * @param string              $prefix  The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths   The PSR-4 base directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function addPsr4($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            // Register directories for the root namespace.\n            if ($prepend) {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr4\n                );\n            } else {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $this->fallbackDirsPsr4,\n                    $paths\n                );\n            }\n        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {\n            // Register directories for a new namespace.\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = $paths;\n        } elseif ($prepend) {\n            // Prepend directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $paths,\n                $this->prefixDirsPsr4[$prefix]\n            );\n        } else {\n            // Append directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $this->prefixDirsPsr4[$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix,\n     * replacing any others previously set for this prefix.\n     *\n     * @param string              $prefix The prefix\n     * @param list<string>|string $paths  The PSR-0 base directories\n     *\n     * @return void\n     */\n    public function set($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr0 = (array) $paths;\n        } else {\n            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace,\n     * replacing any others previously set for this namespace.\n     *\n     * @param string              $prefix The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths  The PSR-4 base directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function setPsr4($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr4 = (array) $paths;\n        } else {\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Turns on searching the include path for class files.\n     *\n     * @param bool $useIncludePath\n     *\n     * @return void\n     */\n    public function setUseIncludePath($useIncludePath)\n    {\n        $this->useIncludePath = $useIncludePath;\n    }\n\n    /**\n     * Can be used to check if the autoloader uses the include path to check\n     * for classes.\n     *\n     * @return bool\n     */\n    public function getUseIncludePath()\n    {\n        return $this->useIncludePath;\n    }\n\n    /**\n     * Turns off searching the prefix and fallback directories for classes\n     * that have not been registered with the class map.\n     *\n     * @param bool $classMapAuthoritative\n     *\n     * @return void\n     */\n    public function setClassMapAuthoritative($classMapAuthoritative)\n    {\n        $this->classMapAuthoritative = $classMapAuthoritative;\n    }\n\n    /**\n     * Should class lookup fail if not found in the current class map?\n     *\n     * @return bool\n     */\n    public function isClassMapAuthoritative()\n    {\n        return $this->classMapAuthoritative;\n    }\n\n    /**\n     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.\n     *\n     * @param string|null $apcuPrefix\n     *\n     * @return void\n     */\n    public function setApcuPrefix($apcuPrefix)\n    {\n        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;\n    }\n\n    /**\n     * The APCu prefix in use, or null if APCu caching is not enabled.\n     *\n     * @return string|null\n     */\n    public function getApcuPrefix()\n    {\n        return $this->apcuPrefix;\n    }\n\n    /**\n     * Registers this instance as an autoloader.\n     *\n     * @param bool $prepend Whether to prepend the autoloader or not\n     *\n     * @return void\n     */\n    public function register($prepend = false)\n    {\n        spl_autoload_register(array($this, 'loadClass'), true, $prepend);\n\n        if (null === $this->vendorDir) {\n            return;\n        }\n\n        if ($prepend) {\n            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;\n        } else {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n            self::$registeredLoaders[$this->vendorDir] = $this;\n        }\n    }\n\n    /**\n     * Unregisters this instance as an autoloader.\n     *\n     * @return void\n     */\n    public function unregister()\n    {\n        spl_autoload_unregister(array($this, 'loadClass'));\n\n        if (null !== $this->vendorDir) {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n        }\n    }\n\n    /**\n     * Loads the given class or interface.\n     *\n     * @param  string    $class The name of the class\n     * @return true|null True if loaded, null otherwise\n     */\n    public function loadClass($class)\n    {\n        if ($file = $this->findFile($class)) {\n            $includeFile = self::$includeFile;\n            $includeFile($file);\n\n            return true;\n        }\n\n        return null;\n    }\n\n    /**\n     * Finds the path to the file where the class is defined.\n     *\n     * @param string $class The name of the class\n     *\n     * @return string|false The path if found, false otherwise\n     */\n    public function findFile($class)\n    {\n        // class map lookup\n        if (isset($this->classMap[$class])) {\n            return $this->classMap[$class];\n        }\n        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {\n            return false;\n        }\n        if (null !== $this->apcuPrefix) {\n            $file = apcu_fetch($this->apcuPrefix.$class, $hit);\n            if ($hit) {\n                return $file;\n            }\n        }\n\n        $file = $this->findFileWithExtension($class, '.php');\n\n        // Search for Hack files if we are running on HHVM\n        if (false === $file && defined('HHVM_VERSION')) {\n            $file = $this->findFileWithExtension($class, '.hh');\n        }\n\n        if (null !== $this->apcuPrefix) {\n            apcu_add($this->apcuPrefix.$class, $file);\n        }\n\n        if (false === $file) {\n            // Remember that this class does not exist.\n            $this->missingClasses[$class] = true;\n        }\n\n        return $file;\n    }\n\n    /**\n     * Returns the currently registered loaders keyed by their corresponding vendor directories.\n     *\n     * @return array<string, self>\n     */\n    public static function getRegisteredLoaders()\n    {\n        return self::$registeredLoaders;\n    }\n\n    /**\n     * @param  string       $class\n     * @param  string       $ext\n     * @return string|false\n     */\n    private function findFileWithExtension($class, $ext)\n    {\n        // PSR-4 lookup\n        $logicalPathPsr4 = strtr($class, '\\\\', DIRECTORY_SEPARATOR) . $ext;\n\n        $first = $class[0];\n        if (isset($this->prefixLengthsPsr4[$first])) {\n            $subPath = $class;\n            while (false !== $lastPos = strrpos($subPath, '\\\\')) {\n                $subPath = substr($subPath, 0, $lastPos);\n                $search = $subPath . '\\\\';\n                if (isset($this->prefixDirsPsr4[$search])) {\n                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);\n                    foreach ($this->prefixDirsPsr4[$search] as $dir) {\n                        if (file_exists($file = $dir . $pathEnd)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-4 fallback dirs\n        foreach ($this->fallbackDirsPsr4 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 lookup\n        if (false !== $pos = strrpos($class, '\\\\')) {\n            // namespaced class name\n            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)\n                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);\n        } else {\n            // PEAR-like class name\n            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;\n        }\n\n        if (isset($this->prefixesPsr0[$first])) {\n            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {\n                if (0 === strpos($class, $prefix)) {\n                    foreach ($dirs as $dir) {\n                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-0 fallback dirs\n        foreach ($this->fallbackDirsPsr0 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 include paths.\n        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {\n            return $file;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return void\n     */\n    private static function initializeIncludeClosure()\n    {\n        if (self::$includeFile !== null) {\n            return;\n        }\n\n        /**\n         * Scope isolated include.\n         *\n         * Prevents access to $this/self from included files.\n         *\n         * @param  string $file\n         * @return void\n         */\n        self::$includeFile = \\Closure::bind(static function($file) {\n            include $file;\n        }, null, null);\n    }\n}\n"
  },
  {
    "path": "vendor/composer/InstalledVersions.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer;\n\nuse Composer\\Autoload\\ClassLoader;\nuse Composer\\Semver\\VersionParser;\n\n/**\n * This class is copied in every Composer installed project and available to all\n *\n * See also https://getcomposer.org/doc/07-runtime.md#installed-versions\n *\n * To require its presence, you can require `composer-runtime-api ^2.0`\n *\n * @final\n */\nclass InstalledVersions\n{\n    /**\n     * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to\n     * @internal\n     */\n    private static $selfDir = null;\n\n    /**\n     * @var mixed[]|null\n     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null\n     */\n    private static $installed;\n\n    /**\n     * @var bool\n     */\n    private static $installedIsLocalDir;\n\n    /**\n     * @var bool|null\n     */\n    private static $canGetVendors;\n\n    /**\n     * @var array[]\n     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static $installedByVendor = array();\n\n    /**\n     * Returns a list of all package names which are present, either by being installed, replaced or provided\n     *\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackages()\n    {\n        $packages = array();\n        foreach (self::getInstalled() as $installed) {\n            $packages[] = array_keys($installed['versions']);\n        }\n\n        if (1 === \\count($packages)) {\n            return $packages[0];\n        }\n\n        return array_keys(array_flip(\\call_user_func_array('array_merge', $packages)));\n    }\n\n    /**\n     * Returns a list of all package names with a specific type e.g. 'library'\n     *\n     * @param  string   $type\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackagesByType($type)\n    {\n        $packagesByType = array();\n\n        foreach (self::getInstalled() as $installed) {\n            foreach ($installed['versions'] as $name => $package) {\n                if (isset($package['type']) && $package['type'] === $type) {\n                    $packagesByType[] = $name;\n                }\n            }\n        }\n\n        return $packagesByType;\n    }\n\n    /**\n     * Checks whether the given package is installed\n     *\n     * This also returns true if the package name is provided or replaced by another package\n     *\n     * @param  string $packageName\n     * @param  bool   $includeDevRequirements\n     * @return bool\n     */\n    public static function isInstalled($packageName, $includeDevRequirements = true)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (isset($installed['versions'][$packageName])) {\n                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Checks whether the given package satisfies a version constraint\n     *\n     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:\n     *\n     *   Composer\\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')\n     *\n     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality\n     * @param  string        $packageName\n     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package\n     * @return bool\n     */\n    public static function satisfies(VersionParser $parser, $packageName, $constraint)\n    {\n        $constraint = $parser->parseConstraints((string) $constraint);\n        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));\n\n        return $provided->matches($constraint);\n    }\n\n    /**\n     * Returns a version constraint representing all the range(s) which are installed for a given package\n     *\n     * It is easier to use this via isInstalled() with the $constraint argument if you need to check\n     * whether a given version of a package is installed, and not just whether it exists\n     *\n     * @param  string $packageName\n     * @return string Version constraint usable with composer/semver\n     */\n    public static function getVersionRanges($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            $ranges = array();\n            if (isset($installed['versions'][$packageName]['pretty_version'])) {\n                $ranges[] = $installed['versions'][$packageName]['pretty_version'];\n            }\n            if (array_key_exists('aliases', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);\n            }\n            if (array_key_exists('replaced', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);\n            }\n            if (array_key_exists('provided', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);\n            }\n\n            return implode(' || ', $ranges);\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getPrettyVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['pretty_version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['pretty_version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference\n     */\n    public static function getReference($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['reference'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['reference'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.\n     */\n    public static function getInstallPath($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @return array\n     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}\n     */\n    public static function getRootPackage()\n    {\n        $installed = self::getInstalled();\n\n        return $installed[0]['root'];\n    }\n\n    /**\n     * Returns the raw installed.php data for custom implementations\n     *\n     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.\n     * @return array[]\n     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}\n     */\n    public static function getRawData()\n    {\n        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                self::$installed = include __DIR__ . '/installed.php';\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        return self::$installed;\n    }\n\n    /**\n     * Returns the raw data of all installed.php which are currently loaded for custom implementations\n     *\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    public static function getAllRawData()\n    {\n        return self::getInstalled();\n    }\n\n    /**\n     * Lets you reload the static array from another file\n     *\n     * This is only useful for complex integrations in which a project needs to use\n     * this class but then also needs to execute another project's autoloader in process,\n     * and wants to ensure both projects have access to their version of installed.php.\n     *\n     * A typical case would be PHPUnit, where it would need to make sure it reads all\n     * the data it needs from this class, then call reload() with\n     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure\n     * the project in which it runs can then also use this class safely, without\n     * interference between PHPUnit's dependencies and the project's dependencies.\n     *\n     * @param  array[] $data A vendor/composer/installed.php data set\n     * @return void\n     *\n     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data\n     */\n    public static function reload($data)\n    {\n        self::$installed = $data;\n        self::$installedByVendor = array();\n\n        // when using reload, we disable the duplicate protection to ensure that self::$installed data is\n        // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,\n        // so we have to assume it does not, and that may result in duplicate data being returned when listing\n        // all installed packages for example\n        self::$installedIsLocalDir = false;\n    }\n\n    /**\n     * @return string\n     */\n    private static function getSelfDir()\n    {\n        if (self::$selfDir === null) {\n            self::$selfDir = strtr(__DIR__, '\\\\', '/');\n        }\n\n        return self::$selfDir;\n    }\n\n    /**\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static function getInstalled()\n    {\n        if (null === self::$canGetVendors) {\n            self::$canGetVendors = method_exists('Composer\\Autoload\\ClassLoader', 'getRegisteredLoaders');\n        }\n\n        $installed = array();\n        $copiedLocalDir = false;\n\n        if (self::$canGetVendors) {\n            $selfDir = self::getSelfDir();\n            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {\n                $vendorDir = strtr($vendorDir, '\\\\', '/');\n                if (isset(self::$installedByVendor[$vendorDir])) {\n                    $installed[] = self::$installedByVendor[$vendorDir];\n                } elseif (is_file($vendorDir.'/composer/installed.php')) {\n                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                    $required = require $vendorDir.'/composer/installed.php';\n                    self::$installedByVendor[$vendorDir] = $required;\n                    $installed[] = $required;\n                    if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {\n                        self::$installed = $required;\n                        self::$installedIsLocalDir = true;\n                    }\n                }\n                if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {\n                    $copiedLocalDir = true;\n                }\n            }\n        }\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                $required = require __DIR__ . '/installed.php';\n                self::$installed = $required;\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        if (self::$installed !== array() && !$copiedLocalDir) {\n            $installed[] = self::$installed;\n        }\n\n        return $installed;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/LICENSE",
    "content": "\nCopyright (c) Nils Adermann, Jordi Boggiano\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "vendor/composer/autoload_classmap.php",
    "content": "<?php\n\n// autoload_classmap.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'Composer\\\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',\n    'UDX\\\\Settings' => $baseDir . '/lib/includes/class-settings.php',\n    'UDX\\\\Utility' => $baseDir . '/lib/includes/class-utility.php',\n    'UsabilityDynamics\\\\UD_API\\\\API' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-api.php',\n    'UsabilityDynamics\\\\UD_API\\\\Admin' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-admin.php',\n    'UsabilityDynamics\\\\UD_API\\\\Bootstrap' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-bootstrap.php',\n    'UsabilityDynamics\\\\UD_API\\\\Licenses_Table' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-licenses-table.php',\n    'UsabilityDynamics\\\\UD_API\\\\Manager' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-manager.php',\n    'UsabilityDynamics\\\\UD_API\\\\More_Products_Table' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-more-products-table.php',\n    'UsabilityDynamics\\\\UD_API\\\\Scaffold' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-scaffold.php',\n    'UsabilityDynamics\\\\UD_API\\\\UI' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-ui.php',\n    'UsabilityDynamics\\\\UD_API\\\\Update_Checker' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-update-checker.php',\n    'UsabilityDynamics\\\\UD_API\\\\Utility' => $vendorDir . '/udx/lib-ud-api-client/lib/classes/class-utility.php',\n    'UsabilityDynamics\\\\WP\\\\Bootstrap' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-bootstrap.php',\n    'UsabilityDynamics\\\\WP\\\\Bootstrap_Plugin' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-bootstrap-plugin.php',\n    'UsabilityDynamics\\\\WP\\\\Bootstrap_Theme' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-bootstrap-theme.php',\n    'UsabilityDynamics\\\\WP\\\\Dashboard' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-dashboard.php',\n    'UsabilityDynamics\\\\WP\\\\Errors' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-errors.php',\n    'UsabilityDynamics\\\\WP\\\\Scaffold' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-scaffold.php',\n    'UsabilityDynamics\\\\WP\\\\TGMPA_List_Table' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-list-table.php',\n    'UsabilityDynamics\\\\WP\\\\TGM_Bulk_Installer' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-bulk-installer.php',\n    'UsabilityDynamics\\\\WP\\\\TGM_Bulk_Installer_Skin' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-bulk-installer.php',\n    'UsabilityDynamics\\\\WP\\\\TGM_Plugin_Activation' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-plugin-activation.php',\n    'UsabilityDynamics\\\\WP\\\\Utility' => $vendorDir . '/udx/lib-wp-bootstrap/lib/classes/class-utility.php',\n    'wpCloud\\\\StatelessMedia\\\\API' => $baseDir . '/lib/classes/class-api.php',\n    'wpCloud\\\\StatelessMedia\\\\Addons' => $baseDir . '/lib/classes/class-addons.php',\n    'wpCloud\\\\StatelessMedia\\\\Ajax' => $baseDir . '/lib/classes/class-ajax.php',\n    'wpCloud\\\\StatelessMedia\\\\AppEngine' => $baseDir . '/lib/classes/class-google-app-engine.php',\n    'wpCloud\\\\StatelessMedia\\\\Batch\\\\BatchTask' => $baseDir . '/lib/classes/batch/class-batch-task.php',\n    'wpCloud\\\\StatelessMedia\\\\Batch\\\\BatchTaskManager' => $baseDir . '/lib/classes/batch/class-batch-task-manager.php',\n    'wpCloud\\\\StatelessMedia\\\\Batch\\\\IBatchTask' => $baseDir . '/lib/classes/batch/interface-batch.php',\n    'wpCloud\\\\StatelessMedia\\\\Batch\\\\Migration' => $baseDir . '/lib/classes/batch/class-migration.php',\n    'wpCloud\\\\StatelessMedia\\\\Bootstrap' => $baseDir . '/lib/classes/class-bootstrap.php',\n    'wpCloud\\\\StatelessMedia\\\\Compatibility' => $baseDir . '/lib/classes/class-compatibility.php',\n    'wpCloud\\\\StatelessMedia\\\\DB' => $baseDir . '/lib/classes/class-db.php',\n    'wpCloud\\\\StatelessMedia\\\\DynamicImageSupport' => $baseDir . '/lib/classes/class-dynamic-image-support.php',\n    'wpCloud\\\\StatelessMedia\\\\EWWW' => $baseDir . '/lib/classes/compatibility/ewww.php',\n    'wpCloud\\\\StatelessMedia\\\\Errors' => $baseDir . '/lib/classes/class-errors.php',\n    'wpCloud\\\\StatelessMedia\\\\FatalException' => $baseDir . '/lib/classes/exception-fatal.php',\n    'wpCloud\\\\StatelessMedia\\\\GS_Client' => $baseDir . '/lib/classes/class-gs-client.php',\n    'wpCloud\\\\StatelessMedia\\\\Helper' => $baseDir . '/lib/classes/class-helper.php',\n    'wpCloud\\\\StatelessMedia\\\\Imagify' => $baseDir . '/lib/classes/compatibility/imagify.php',\n    'wpCloud\\\\StatelessMedia\\\\LearnDash' => $baseDir . '/lib/classes/compatibility/learn-dash.php',\n    'wpCloud\\\\StatelessMedia\\\\Logger' => $baseDir . '/lib/classes/class-logger.php',\n    'wpCloud\\\\StatelessMedia\\\\Migrator' => $baseDir . '/lib/classes/class-migrator.php',\n    'wpCloud\\\\StatelessMedia\\\\Module' => $baseDir . '/lib/classes/class-module.php',\n    'wpCloud\\\\StatelessMedia\\\\Settings' => $baseDir . '/lib/classes/class-settings.php',\n    'wpCloud\\\\StatelessMedia\\\\ShortPixel' => $baseDir . '/lib/classes/compatibility/shortpixel.php',\n    'wpCloud\\\\StatelessMedia\\\\Singleton' => $baseDir . '/lib/classes/trait-singleton.php',\n    'wpCloud\\\\StatelessMedia\\\\Status' => $baseDir . '/lib/classes/class-status.php',\n    'wpCloud\\\\StatelessMedia\\\\Status\\\\GoogleCloudInfo' => $baseDir . '/lib/classes/status/class-info-google_cloud.php',\n    'wpCloud\\\\StatelessMedia\\\\Status\\\\Info' => $baseDir . '/lib/classes/status/class-info.php',\n    'wpCloud\\\\StatelessMedia\\\\Status\\\\Migrations' => $baseDir . '/lib/classes/status/class-migrations.php',\n    'wpCloud\\\\StatelessMedia\\\\Status\\\\StatelessInfo' => $baseDir . '/lib/classes/status/class-info-stateless.php',\n    'wpCloud\\\\StatelessMedia\\\\StreamWrapper' => $baseDir . '/lib/classes/class-gs-stream-wrapper.php',\n    'wpCloud\\\\StatelessMedia\\\\SyncNonMedia' => $baseDir . '/lib/classes/class-sync-non-media.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\BackgroundSync' => $baseDir . '/lib/classes/sync/class-background-sync.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\FileSync' => $baseDir . '/lib/classes/sync/class-file-sync.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\HelperWindow' => $baseDir . '/lib/classes/sync/class-helper-window.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\ISync' => $baseDir . '/lib/classes/sync/interface-sync.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\ImageSync' => $baseDir . '/lib/classes/sync/class-image-sync.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\LibrarySync' => $baseDir . '/lib/classes/sync/class-library-sync.php',\n    'wpCloud\\\\StatelessMedia\\\\Sync\\\\NonLibrarySync' => $baseDir . '/lib/classes/sync/class-non-library-sync.php',\n    'wpCloud\\\\StatelessMedia\\\\TheEventsCalendar' => $baseDir . '/lib/classes/compatibility/the-events-calendar.php',\n    'wpCloud\\\\StatelessMedia\\\\UnprocessableException' => $baseDir . '/lib/classes/exception-unprocessable.php',\n    'wpCloud\\\\StatelessMedia\\\\Upgrader' => $baseDir . '/lib/classes/class-upgrader.php',\n    'wpCloud\\\\StatelessMedia\\\\Utility' => $baseDir . '/lib/classes/class-utility.php',\n    'wpCloud\\\\StatelessMedia\\\\WPBakeryPageBuilder' => $baseDir . '/lib/classes/compatibility/wpbakery-page-builder.php',\n    'wpCloud\\\\StatelessMedia\\\\WPSmush' => $baseDir . '/lib/classes/compatibility/wp-smush.php',\n);\n"
  },
  {
    "path": "vendor/composer/autoload_namespaces.php",
    "content": "<?php\n\n// autoload_namespaces.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'ChromePhp' => array($vendorDir . '/ccampbell/chromephp'),\n);\n"
  },
  {
    "path": "vendor/composer/autoload_psr4.php",
    "content": "<?php\n\n// autoload_psr4.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'Firebase\\\\JWT\\\\' => array($vendorDir . '/firebase/php-jwt/src'),\n    'Composer\\\\Installers\\\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'),\n);\n"
  },
  {
    "path": "vendor/composer/autoload_real.php",
    "content": "<?php\n\n// autoload_real.php @generated by Composer\n\nclass ComposerAutoloaderInitc59d002476a452800baaf79c430753cb\n{\n    private static $loader;\n\n    public static function loadClassLoader($class)\n    {\n        if ('Composer\\Autoload\\ClassLoader' === $class) {\n            require __DIR__ . '/ClassLoader.php';\n        }\n    }\n\n    /**\n     * @return \\Composer\\Autoload\\ClassLoader\n     */\n    public static function getLoader()\n    {\n        if (null !== self::$loader) {\n            return self::$loader;\n        }\n\n        require __DIR__ . '/platform_check.php';\n\n        spl_autoload_register(array('ComposerAutoloaderInitc59d002476a452800baaf79c430753cb', 'loadClassLoader'), true, true);\n        self::$loader = $loader = new \\Composer\\Autoload\\ClassLoader(\\dirname(__DIR__));\n        spl_autoload_unregister(array('ComposerAutoloaderInitc59d002476a452800baaf79c430753cb', 'loadClassLoader'));\n\n        require __DIR__ . '/autoload_static.php';\n        call_user_func(\\Composer\\Autoload\\ComposerStaticInitc59d002476a452800baaf79c430753cb::getInitializer($loader));\n\n        $loader->register(true);\n\n        return $loader;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/autoload_static.php",
    "content": "<?php\n\n// autoload_static.php @generated by Composer\n\nnamespace Composer\\Autoload;\n\nclass ComposerStaticInitc59d002476a452800baaf79c430753cb\n{\n    public static $prefixLengthsPsr4 = array (\n        'F' =>\n        array (\n            'Firebase\\\\JWT\\\\' => 13,\n        ),\n        'C' =>\n        array (\n            'Composer\\\\Installers\\\\' => 20,\n        ),\n    );\n\n    public static $prefixDirsPsr4 = array (\n        'Firebase\\\\JWT\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/firebase/php-jwt/src',\n        ),\n        'Composer\\\\Installers\\\\' =>\n        array (\n            0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers',\n        ),\n    );\n\n    public static $prefixesPsr0 = array (\n        'C' =>\n        array (\n            'ChromePhp' =>\n            array (\n                0 => __DIR__ . '/..' . '/ccampbell/chromephp',\n            ),\n        ),\n    );\n\n    public static $classMap = array (\n        'Composer\\\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',\n        'UDX\\\\Settings' => __DIR__ . '/../..' . '/lib/includes/class-settings.php',\n        'UDX\\\\Utility' => __DIR__ . '/../..' . '/lib/includes/class-utility.php',\n        'UsabilityDynamics\\\\UD_API\\\\API' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-api.php',\n        'UsabilityDynamics\\\\UD_API\\\\Admin' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-admin.php',\n        'UsabilityDynamics\\\\UD_API\\\\Bootstrap' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-bootstrap.php',\n        'UsabilityDynamics\\\\UD_API\\\\Licenses_Table' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-licenses-table.php',\n        'UsabilityDynamics\\\\UD_API\\\\Manager' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-manager.php',\n        'UsabilityDynamics\\\\UD_API\\\\More_Products_Table' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-more-products-table.php',\n        'UsabilityDynamics\\\\UD_API\\\\Scaffold' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-scaffold.php',\n        'UsabilityDynamics\\\\UD_API\\\\UI' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-ui.php',\n        'UsabilityDynamics\\\\UD_API\\\\Update_Checker' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-update-checker.php',\n        'UsabilityDynamics\\\\UD_API\\\\Utility' => __DIR__ . '/..' . '/udx/lib-ud-api-client/lib/classes/class-utility.php',\n        'UsabilityDynamics\\\\WP\\\\Bootstrap' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-bootstrap.php',\n        'UsabilityDynamics\\\\WP\\\\Bootstrap_Plugin' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-bootstrap-plugin.php',\n        'UsabilityDynamics\\\\WP\\\\Bootstrap_Theme' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-bootstrap-theme.php',\n        'UsabilityDynamics\\\\WP\\\\Dashboard' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-dashboard.php',\n        'UsabilityDynamics\\\\WP\\\\Errors' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-errors.php',\n        'UsabilityDynamics\\\\WP\\\\Scaffold' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-scaffold.php',\n        'UsabilityDynamics\\\\WP\\\\TGMPA_List_Table' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-list-table.php',\n        'UsabilityDynamics\\\\WP\\\\TGM_Bulk_Installer' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-bulk-installer.php',\n        'UsabilityDynamics\\\\WP\\\\TGM_Bulk_Installer_Skin' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-bulk-installer.php',\n        'UsabilityDynamics\\\\WP\\\\TGM_Plugin_Activation' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-tgm-plugin-activation.php',\n        'UsabilityDynamics\\\\WP\\\\Utility' => __DIR__ . '/..' . '/udx/lib-wp-bootstrap/lib/classes/class-utility.php',\n        'wpCloud\\\\StatelessMedia\\\\API' => __DIR__ . '/../..' . '/lib/classes/class-api.php',\n        'wpCloud\\\\StatelessMedia\\\\Addons' => __DIR__ . '/../..' . '/lib/classes/class-addons.php',\n        'wpCloud\\\\StatelessMedia\\\\Ajax' => __DIR__ . '/../..' . '/lib/classes/class-ajax.php',\n        'wpCloud\\\\StatelessMedia\\\\AppEngine' => __DIR__ . '/../..' . '/lib/classes/class-google-app-engine.php',\n        'wpCloud\\\\StatelessMedia\\\\Batch\\\\BatchTask' => __DIR__ . '/../..' . '/lib/classes/batch/class-batch-task.php',\n        'wpCloud\\\\StatelessMedia\\\\Batch\\\\BatchTaskManager' => __DIR__ . '/../..' . '/lib/classes/batch/class-batch-task-manager.php',\n        'wpCloud\\\\StatelessMedia\\\\Batch\\\\IBatchTask' => __DIR__ . '/../..' . '/lib/classes/batch/interface-batch.php',\n        'wpCloud\\\\StatelessMedia\\\\Batch\\\\Migration' => __DIR__ . '/../..' . '/lib/classes/batch/class-migration.php',\n        'wpCloud\\\\StatelessMedia\\\\Bootstrap' => __DIR__ . '/../..' . '/lib/classes/class-bootstrap.php',\n        'wpCloud\\\\StatelessMedia\\\\Compatibility' => __DIR__ . '/../..' . '/lib/classes/class-compatibility.php',\n        'wpCloud\\\\StatelessMedia\\\\DB' => __DIR__ . '/../..' . '/lib/classes/class-db.php',\n        'wpCloud\\\\StatelessMedia\\\\DynamicImageSupport' => __DIR__ . '/../..' . '/lib/classes/class-dynamic-image-support.php',\n        'wpCloud\\\\StatelessMedia\\\\EWWW' => __DIR__ . '/../..' . '/lib/classes/compatibility/ewww.php',\n        'wpCloud\\\\StatelessMedia\\\\Errors' => __DIR__ . '/../..' . '/lib/classes/class-errors.php',\n        'wpCloud\\\\StatelessMedia\\\\FatalException' => __DIR__ . '/../..' . '/lib/classes/exception-fatal.php',\n        'wpCloud\\\\StatelessMedia\\\\GS_Client' => __DIR__ . '/../..' . '/lib/classes/class-gs-client.php',\n        'wpCloud\\\\StatelessMedia\\\\Helper' => __DIR__ . '/../..' . '/lib/classes/class-helper.php',\n        'wpCloud\\\\StatelessMedia\\\\Imagify' => __DIR__ . '/../..' . '/lib/classes/compatibility/imagify.php',\n        'wpCloud\\\\StatelessMedia\\\\LearnDash' => __DIR__ . '/../..' . '/lib/classes/compatibility/learn-dash.php',\n        'wpCloud\\\\StatelessMedia\\\\Logger' => __DIR__ . '/../..' . '/lib/classes/class-logger.php',\n        'wpCloud\\\\StatelessMedia\\\\Migrator' => __DIR__ . '/../..' . '/lib/classes/class-migrator.php',\n        'wpCloud\\\\StatelessMedia\\\\Module' => __DIR__ . '/../..' . '/lib/classes/class-module.php',\n        'wpCloud\\\\StatelessMedia\\\\Settings' => __DIR__ . '/../..' . '/lib/classes/class-settings.php',\n        'wpCloud\\\\StatelessMedia\\\\ShortPixel' => __DIR__ . '/../..' . '/lib/classes/compatibility/shortpixel.php',\n        'wpCloud\\\\StatelessMedia\\\\Singleton' => __DIR__ . '/../..' . '/lib/classes/trait-singleton.php',\n        'wpCloud\\\\StatelessMedia\\\\Status' => __DIR__ . '/../..' . '/lib/classes/class-status.php',\n        'wpCloud\\\\StatelessMedia\\\\Status\\\\GoogleCloudInfo' => __DIR__ . '/../..' . '/lib/classes/status/class-info-google_cloud.php',\n        'wpCloud\\\\StatelessMedia\\\\Status\\\\Info' => __DIR__ . '/../..' . '/lib/classes/status/class-info.php',\n        'wpCloud\\\\StatelessMedia\\\\Status\\\\Migrations' => __DIR__ . '/../..' . '/lib/classes/status/class-migrations.php',\n        'wpCloud\\\\StatelessMedia\\\\Status\\\\StatelessInfo' => __DIR__ . '/../..' . '/lib/classes/status/class-info-stateless.php',\n        'wpCloud\\\\StatelessMedia\\\\StreamWrapper' => __DIR__ . '/../..' . '/lib/classes/class-gs-stream-wrapper.php',\n        'wpCloud\\\\StatelessMedia\\\\SyncNonMedia' => __DIR__ . '/../..' . '/lib/classes/class-sync-non-media.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\BackgroundSync' => __DIR__ . '/../..' . '/lib/classes/sync/class-background-sync.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\FileSync' => __DIR__ . '/../..' . '/lib/classes/sync/class-file-sync.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\HelperWindow' => __DIR__ . '/../..' . '/lib/classes/sync/class-helper-window.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\ISync' => __DIR__ . '/../..' . '/lib/classes/sync/interface-sync.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\ImageSync' => __DIR__ . '/../..' . '/lib/classes/sync/class-image-sync.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\LibrarySync' => __DIR__ . '/../..' . '/lib/classes/sync/class-library-sync.php',\n        'wpCloud\\\\StatelessMedia\\\\Sync\\\\NonLibrarySync' => __DIR__ . '/../..' . '/lib/classes/sync/class-non-library-sync.php',\n        'wpCloud\\\\StatelessMedia\\\\TheEventsCalendar' => __DIR__ . '/../..' . '/lib/classes/compatibility/the-events-calendar.php',\n        'wpCloud\\\\StatelessMedia\\\\UnprocessableException' => __DIR__ . '/../..' . '/lib/classes/exception-unprocessable.php',\n        'wpCloud\\\\StatelessMedia\\\\Upgrader' => __DIR__ . '/../..' . '/lib/classes/class-upgrader.php',\n        'wpCloud\\\\StatelessMedia\\\\Utility' => __DIR__ . '/../..' . '/lib/classes/class-utility.php',\n        'wpCloud\\\\StatelessMedia\\\\WPBakeryPageBuilder' => __DIR__ . '/../..' . '/lib/classes/compatibility/wpbakery-page-builder.php',\n        'wpCloud\\\\StatelessMedia\\\\WPSmush' => __DIR__ . '/../..' . '/lib/classes/compatibility/wp-smush.php',\n    );\n\n    public static function getInitializer(ClassLoader $loader)\n    {\n        return \\Closure::bind(function () use ($loader) {\n            $loader->prefixLengthsPsr4 = ComposerStaticInitc59d002476a452800baaf79c430753cb::$prefixLengthsPsr4;\n            $loader->prefixDirsPsr4 = ComposerStaticInitc59d002476a452800baaf79c430753cb::$prefixDirsPsr4;\n            $loader->prefixesPsr0 = ComposerStaticInitc59d002476a452800baaf79c430753cb::$prefixesPsr0;\n            $loader->classMap = ComposerStaticInitc59d002476a452800baaf79c430753cb::$classMap;\n\n        }, null, ClassLoader::class);\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installed.json",
    "content": "{\n    \"packages\": [\n        {\n            \"name\": \"ccampbell/chromephp\",\n            \"version\": \"4.1.0\",\n            \"version_normalized\": \"4.1.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/ccampbell/chromephp.git\",\n                \"reference\": \"c3c297615d48ae5b2a86a82311152d1ed095fcef\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/ccampbell/chromephp/zipball/c3c297615d48ae5b2a86a82311152d1ed095fcef\",\n                \"reference\": \"c3c297615d48ae5b2a86a82311152d1ed095fcef\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.0.0\"\n            },\n            \"time\": \"2013-06-26T03:44:33+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-0\": {\n                    \"ChromePhp\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"Apache-2.0\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Craig Campbell\",\n                    \"email\": \"iamcraigcampbell@gmail.com\",\n                    \"homepage\": \"http://craig.is\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"Log variables to the Chrome console (via Chrome Logger Google Chrome extension).\",\n            \"homepage\": \"http://github.com/ccampbell/chromephp\",\n            \"keywords\": [\n                \"log\",\n                \"logging\"\n            ],\n            \"install-path\": \"../ccampbell/chromephp\"\n        },\n        {\n            \"name\": \"composer/installers\",\n            \"version\": \"v2.3.0\",\n            \"version_normalized\": \"2.3.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/composer/installers.git\",\n                \"reference\": \"12fb2dfe5e16183de69e784a7b84046c43d97e8e\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/composer/installers/zipball/12fb2dfe5e16183de69e784a7b84046c43d97e8e\",\n                \"reference\": \"12fb2dfe5e16183de69e784a7b84046c43d97e8e\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"composer-plugin-api\": \"^1.0 || ^2.0\",\n                \"php\": \"^7.2 || ^8.0\"\n            },\n            \"require-dev\": {\n                \"composer/composer\": \"^1.10.27 || ^2.7\",\n                \"composer/semver\": \"^1.7.2 || ^3.4.0\",\n                \"phpstan/phpstan\": \"^1.11\",\n                \"phpstan/phpstan-phpunit\": \"^1\",\n                \"symfony/phpunit-bridge\": \"^7.1.1\",\n                \"symfony/process\": \"^5 || ^6 || ^7\"\n            },\n            \"time\": \"2024-06-24T20:46:46+00:00\",\n            \"type\": \"composer-plugin\",\n            \"extra\": {\n                \"class\": \"Composer\\\\Installers\\\\Plugin\",\n                \"branch-alias\": {\n                    \"dev-main\": \"2.x-dev\"\n                },\n                \"plugin-modifies-install-path\": true\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Composer\\\\Installers\\\\\": \"src/Composer/Installers\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Kyle Robinson Young\",\n                    \"email\": \"kyle@dontkry.com\",\n                    \"homepage\": \"https://github.com/shama\"\n                }\n            ],\n            \"description\": \"A multi-framework Composer library installer\",\n            \"homepage\": \"https://composer.github.io/installers/\",\n            \"keywords\": [\n                \"Dolibarr\",\n                \"Eliasis\",\n                \"Hurad\",\n                \"ImageCMS\",\n                \"Kanboard\",\n                \"Lan Management System\",\n                \"MODX Evo\",\n                \"MantisBT\",\n                \"Mautic\",\n                \"Maya\",\n                \"OXID\",\n                \"Plentymarkets\",\n                \"Porto\",\n                \"RadPHP\",\n                \"SMF\",\n                \"Starbug\",\n                \"Thelia\",\n                \"Whmcs\",\n                \"WolfCMS\",\n                \"agl\",\n                \"annotatecms\",\n                \"attogram\",\n                \"bitrix\",\n                \"cakephp\",\n                \"chef\",\n                \"cockpit\",\n                \"codeigniter\",\n                \"concrete5\",\n                \"concreteCMS\",\n                \"croogo\",\n                \"dokuwiki\",\n                \"drupal\",\n                \"eZ Platform\",\n                \"elgg\",\n                \"expressionengine\",\n                \"fuelphp\",\n                \"grav\",\n                \"installer\",\n                \"itop\",\n                \"known\",\n                \"kohana\",\n                \"laravel\",\n                \"lavalite\",\n                \"lithium\",\n                \"magento\",\n                \"majima\",\n                \"mako\",\n                \"matomo\",\n                \"mediawiki\",\n                \"miaoxing\",\n                \"modulework\",\n                \"modx\",\n                \"moodle\",\n                \"osclass\",\n                \"pantheon\",\n                \"phpbb\",\n                \"piwik\",\n                \"ppi\",\n                \"processwire\",\n                \"puppet\",\n                \"pxcms\",\n                \"reindex\",\n                \"roundcube\",\n                \"shopware\",\n                \"silverstripe\",\n                \"sydes\",\n                \"sylius\",\n                \"tastyigniter\",\n                \"wordpress\",\n                \"yawik\",\n                \"zend\",\n                \"zikula\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/composer/installers/issues\",\n                \"source\": \"https://github.com/composer/installers/tree/v2.3.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://packagist.com\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/composer\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/composer/composer\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"./installers\"\n        },\n        {\n            \"name\": \"firebase/php-jwt\",\n            \"version\": \"v6.11.1\",\n            \"version_normalized\": \"6.11.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/firebase/php-jwt.git\",\n                \"reference\": \"d1e91ecf8c598d073d0995afa8cd5c75c6e19e66\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/firebase/php-jwt/zipball/d1e91ecf8c598d073d0995afa8cd5c75c6e19e66\",\n                \"reference\": \"d1e91ecf8c598d073d0995afa8cd5c75c6e19e66\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.0\"\n            },\n            \"require-dev\": {\n                \"guzzlehttp/guzzle\": \"^7.4\",\n                \"phpspec/prophecy-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.5\",\n                \"psr/cache\": \"^2.0||^3.0\",\n                \"psr/http-client\": \"^1.0\",\n                \"psr/http-factory\": \"^1.0\"\n            },\n            \"suggest\": {\n                \"ext-sodium\": \"Support EdDSA (Ed25519) signatures\",\n                \"paragonie/sodium_compat\": \"Support EdDSA (Ed25519) signatures when libsodium is not present\"\n            },\n            \"time\": \"2025-04-09T20:32:01+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Firebase\\\\JWT\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-3-Clause\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Neuman Vong\",\n                    \"email\": \"neuman+pear@twilio.com\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Anant Narayanan\",\n                    \"email\": \"anant@php.net\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.\",\n            \"homepage\": \"https://github.com/firebase/php-jwt\",\n            \"keywords\": [\n                \"jwt\",\n                \"php\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/firebase/php-jwt/issues\",\n                \"source\": \"https://github.com/firebase/php-jwt/tree/v6.11.1\"\n            },\n            \"install-path\": \"../firebase/php-jwt\"\n        },\n        {\n            \"name\": \"udx/lib-ud-api-client\",\n            \"version\": \"1.2.5\",\n            \"version_normalized\": \"1.2.5.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"git@github.com:udx/lib-ud-api-client\",\n                \"reference\": \"1.2.5\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://github.com/udx/lib-ud-api-client/archive/1.2.5.zip\"\n            },\n            \"require\": {\n                \"php\": \">=5.3\"\n            },\n            \"type\": \"library\",\n            \"extra\": {\n                \"installer-name\": \"lib-ud-api-client\"\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"classmap\": [\n                    \"lib/classes\"\n                ]\n            },\n            \"license\": [\n                \"GPLv2\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"UsabilityDynamics, Inc.\",\n                    \"homepage\": \"https://www.usabilitydynamics.com\"\n                }\n            ],\n            \"description\": \"UD API Client for WooCommerce API Manager\",\n            \"homepage\": \"https://github.com/udx/lib-ud-api-client\",\n            \"keywords\": [\n                \"api\",\n                \"client\",\n                \"licenses\",\n                \"plugins\",\n                \"wordpress\"\n            ],\n            \"install-path\": \"../udx/lib-ud-api-client\"\n        },\n        {\n            \"name\": \"udx/lib-wp-bootstrap\",\n            \"version\": \"1.3.4\",\n            \"version_normalized\": \"1.3.4.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"git@github.com:udx/lib-wp-bootstrap\",\n                \"reference\": \"1.3.4\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://github.com/udx/lib-wp-bootstrap/archive/1.3.4.zip\"\n            },\n            \"require\": {\n                \"php\": \">=5.3\"\n            },\n            \"type\": \"library\",\n            \"extra\": {\n                \"installer-name\": \"lib-wp-bootstrap\"\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"classmap\": [\n                    \"lib/classes\"\n                ]\n            },\n            \"license\": [\n                \"MIT\"\n            ],\n            \"description\": \"Wordpress bootstrap library created by UsabilityDynamics\",\n            \"homepage\": \"https://github.com/udx/lib-wp-bootstrap\",\n            \"keywords\": [\n                \"wordpress\"\n            ],\n            \"install-path\": \"../udx/lib-wp-bootstrap\"\n        },\n        {\n            \"name\": \"wpackagist-plugin/meta-box\",\n            \"version\": \"5.10.19\",\n            \"version_normalized\": \"5.10.19.0\",\n            \"source\": {\n                \"type\": \"svn\",\n                \"url\": \"https://plugins.svn.wordpress.org/meta-box/\",\n                \"reference\": \"tags/5.10.19\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://downloads.wordpress.org/plugin/meta-box.5.10.19.zip\"\n            },\n            \"require\": {\n                \"composer/installers\": \"^1.0 || ^2.0\"\n            },\n            \"type\": \"wordpress-plugin\",\n            \"installation-source\": \"dist\",\n            \"homepage\": \"https://wordpress.org/plugins/meta-box/\",\n            \"install-path\": \"../wpmetabox/meta-box\"\n        }\n    ],\n    \"dev\": false,\n    \"dev-package-names\": []\n}\n"
  },
  {
    "path": "vendor/composer/installed.php",
    "content": "<?php return array(\n    'root' => array(\n        'name' => 'wpcloud/wp-stateless',\n        'pretty_version' => 'dev-latest',\n        'version' => 'dev-latest',\n        'reference' => 'f85c0f94de8b8e232088265c78c95da7162e2fac',\n        'type' => 'wordpress-plugin',\n        'install_path' => __DIR__ . '/../../',\n        'aliases' => array(),\n        'dev' => false,\n    ),\n    'versions' => array(\n        'ccampbell/chromephp' => array(\n            'pretty_version' => '4.1.0',\n            'version' => '4.1.0.0',\n            'reference' => 'c3c297615d48ae5b2a86a82311152d1ed095fcef',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../ccampbell/chromephp',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'composer/installers' => array(\n            'pretty_version' => 'v2.3.0',\n            'version' => '2.3.0.0',\n            'reference' => '12fb2dfe5e16183de69e784a7b84046c43d97e8e',\n            'type' => 'composer-plugin',\n            'install_path' => __DIR__ . '/./installers',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'firebase/php-jwt' => array(\n            'pretty_version' => 'v6.11.1',\n            'version' => '6.11.1.0',\n            'reference' => 'd1e91ecf8c598d073d0995afa8cd5c75c6e19e66',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../firebase/php-jwt',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'udx/lib-ud-api-client' => array(\n            'pretty_version' => '1.2.5',\n            'version' => '1.2.5.0',\n            'reference' => '1.2.5',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../udx/lib-ud-api-client',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'udx/lib-wp-bootstrap' => array(\n            'pretty_version' => '1.3.4',\n            'version' => '1.3.4.0',\n            'reference' => '1.3.4',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../udx/lib-wp-bootstrap',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'wpackagist-plugin/meta-box' => array(\n            'pretty_version' => '5.10.19',\n            'version' => '5.10.19.0',\n            'reference' => 'tags/5.10.19',\n            'type' => 'wordpress-plugin',\n            'install_path' => __DIR__ . '/../wpmetabox/meta-box',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'wpcloud/wp-stateless' => array(\n            'pretty_version' => 'dev-latest',\n            'version' => 'dev-latest',\n            'reference' => 'f85c0f94de8b8e232088265c78c95da7162e2fac',\n            'type' => 'wordpress-plugin',\n            'install_path' => __DIR__ . '/../../',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n    ),\n);\n"
  },
  {
    "path": "vendor/composer/installers/.github/workflows/continuous-integration.yml",
    "content": "name: \"Continuous Integration\"\n\non:\n  - push\n  - pull_request\n\nenv:\n  COMPOSER_FLAGS: \"--ansi --no-interaction --no-progress --prefer-dist\"\n  SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT: \"1\"\n\npermissions:\n  contents: read\n\njobs:\n  tests:\n    name: \"CI\"\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        php-version:\n          - \"7.2\"\n          - \"7.3\"\n          - \"7.4\"\n          - \"8.0\"\n          - \"8.1\"\n        dependencies: [locked]\n        include:\n          - php-version: \"7.2\"\n            dependencies: lowest\n          - php-version: \"8.1\"\n            dependencies: lowest\n\n    steps:\n      - name: \"Checkout\"\n        uses: \"actions/checkout@v2\"\n\n      - name: \"Install PHP\"\n        uses: \"shivammathur/setup-php@v2\"\n        with:\n          coverage: \"none\"\n          php-version: \"${{ matrix.php-version }}\"\n          tools: composer:snapshot\n\n      - name: Get composer cache directory\n        id: composercache\n        run: echo \"::set-output name=dir::$(composer config cache-files-dir)\"\n\n      - name: Cache dependencies\n        uses: actions/cache@v2\n        with:\n          path: ${{ steps.composercache.outputs.dir }}\n          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}\n          restore-keys: ${{ runner.os }}-composer-\n\n      - name: \"Handle lowest dependencies update\"\n        if: \"contains(matrix.dependencies, 'lowest')\"\n        run: \"echo \\\"COMPOSER_FLAGS=$COMPOSER_FLAGS --prefer-lowest\\\" >> $GITHUB_ENV\"\n\n      - name: \"Install latest dependencies\"\n        run: \"composer update ${{ env.COMPOSER_FLAGS }}\"\n\n      - name: \"Run tests\"\n        run: \"vendor/bin/simple-phpunit --verbose\"\n"
  },
  {
    "path": "vendor/composer/installers/.github/workflows/lint.yml",
    "content": "name: \"PHP Lint\"\n\non:\n  - push\n  - pull_request\n\npermissions:\n  contents: read\n\njobs:\n  tests:\n    name: \"Lint\"\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        php-version:\n          - \"7.2\"\n          - \"latest\"\n\n    steps:\n      - name: \"Checkout\"\n        uses: \"actions/checkout@v2\"\n\n      - name: \"Install PHP\"\n        uses: \"shivammathur/setup-php@v2\"\n        with:\n          coverage: \"none\"\n          php-version: \"${{ matrix.php-version }}\"\n\n      - name: \"Lint PHP files\"\n        run: \"find src/ -type f -name '*.php' -print0 | xargs -0 -L1 -P4 -- php -l -f\"\n"
  },
  {
    "path": "vendor/composer/installers/.github/workflows/phpstan.yml",
    "content": "name: \"PHPStan\"\n\non:\n  - push\n  - pull_request\n\nenv:\n  COMPOSER_FLAGS: \"--ansi --no-interaction --no-progress --prefer-dist\"\n  SYMFONY_PHPUNIT_VERSION: \"\"\n\npermissions:\n  contents: read\n\njobs:\n  tests:\n    name: \"PHPStan\"\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        php-version:\n          - \"8.0\"\n\n    steps:\n      - name: \"Checkout\"\n        uses: \"actions/checkout@v2\"\n\n      - name: \"Install PHP\"\n        uses: \"shivammathur/setup-php@v2\"\n        with:\n          coverage: \"none\"\n          php-version: \"${{ matrix.php-version }}\"\n\n      - name: Get composer cache directory\n        id: composercache\n        run: echo \"::set-output name=dir::$(composer config cache-files-dir)\"\n\n      - name: Cache dependencies\n        uses: actions/cache@v2\n        with:\n          path: ${{ steps.composercache.outputs.dir }}\n          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}\n          restore-keys: ${{ runner.os }}-composer-\n\n      - name: \"Install latest dependencies\"\n        run: \"composer update ${{ env.COMPOSER_FLAGS }}\"\n\n      - name: Run PHPStan\n        run: |\n          composer require --dev phpunit/phpunit:^8.5.18 --with-all-dependencies ${{ env.COMPOSER_FLAGS }}\n          vendor/bin/phpstan analyse\n"
  },
  {
    "path": "vendor/composer/installers/LICENSE",
    "content": "Copyright (c) 2012 Kyle Robinson Young\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "vendor/composer/installers/composer.json",
    "content": "{\n    \"name\": \"composer/installers\",\n    \"type\": \"composer-plugin\",\n    \"license\": \"MIT\",\n    \"description\": \"A multi-framework Composer library installer\",\n    \"keywords\": [\n        \"installer\",\n        \"AGL\",\n        \"AnnotateCms\",\n        \"Attogram\",\n        \"Bitrix\",\n        \"CakePHP\",\n        \"Chef\",\n        \"Cockpit\",\n        \"CodeIgniter\",\n        \"concrete5\",\n        \"ConcreteCMS\",\n        \"Croogo\",\n        \"DokuWiki\",\n        \"Dolibarr\",\n        \"Drupal\",\n        \"Elgg\",\n        \"Eliasis\",\n        \"ExpressionEngine\",\n        \"eZ Platform\",\n        \"FuelPHP\",\n        \"Grav\",\n        \"Hurad\",\n        \"ImageCMS\",\n        \"iTop\",\n        \"Kanboard\",\n        \"Known\",\n        \"Kohana\",\n        \"Lan Management System\",\n        \"Laravel\",\n        \"Lavalite\",\n        \"Lithium\",\n        \"Magento\",\n        \"majima\",\n        \"Mako\",\n        \"MantisBT\",\n        \"Matomo\",\n        \"Mautic\",\n        \"Maya\",\n        \"MODX\",\n        \"MODX Evo\",\n        \"MediaWiki\",\n        \"Miaoxing\",\n        \"OXID\",\n        \"osclass\",\n        \"MODULEWork\",\n        \"Moodle\",\n        \"Pantheon\",\n        \"Piwik\",\n        \"pxcms\",\n        \"phpBB\",\n        \"Plentymarkets\",\n        \"PPI\",\n        \"Puppet\",\n        \"Porto\",\n        \"ProcessWire\",\n        \"RadPHP\",\n        \"ReIndex\",\n        \"Roundcube\",\n        \"shopware\",\n        \"SilverStripe\",\n        \"SMF\",\n        \"Starbug\",\n        \"SyDES\",\n        \"Sylius\",\n        \"TastyIgniter\",\n        \"Thelia\",\n        \"WHMCS\",\n        \"WolfCMS\",\n        \"WordPress\",\n        \"YAWIK\",\n        \"Zend\",\n        \"Zikula\"\n    ],\n    \"homepage\": \"https://composer.github.io/installers/\",\n    \"authors\": [\n        {\n            \"name\": \"Kyle Robinson Young\",\n            \"email\": \"kyle@dontkry.com\",\n            \"homepage\": \"https://github.com/shama\"\n        }\n    ],\n    \"autoload\": {\n        \"psr-4\": { \"Composer\\\\Installers\\\\\": \"src/Composer/Installers\" }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": { \"Composer\\\\Installers\\\\Test\\\\\": \"tests/Composer/Installers/Test\" }\n    },\n    \"extra\": {\n        \"class\": \"Composer\\\\Installers\\\\Plugin\",\n        \"branch-alias\": {\n            \"dev-main\": \"2.x-dev\"\n        },\n        \"plugin-modifies-install-path\": true\n    },\n    \"require\": {\n        \"php\": \"^7.2 || ^8.0\",\n        \"composer-plugin-api\": \"^1.0 || ^2.0\"\n    },\n    \"require-dev\": {\n        \"composer/composer\": \"^1.10.27 || ^2.7\",\n        \"composer/semver\": \"^1.7.2 || ^3.4.0\",\n        \"symfony/phpunit-bridge\": \"^7.1.1\",\n        \"phpstan/phpstan\": \"^1.11\",\n        \"symfony/process\": \"^5 || ^6 || ^7\",\n        \"phpstan/phpstan-phpunit\": \"^1\"\n    },\n    \"scripts\": {\n        \"test\": \"@php vendor/bin/simple-phpunit\",\n        \"phpstan\": \"@php vendor/bin/phpstan analyse\"\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/AglInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass AglInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'More/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $name = preg_replace_callback('/(?:^|_|-)(.?)/', function ($matches) {\n            return strtoupper($matches[1]);\n        }, $vars['name']);\n\n        if (null === $name) {\n            throw new \\RuntimeException('Failed to run preg_replace_callback: '.preg_last_error());\n        }\n\n        $vars['name'] = $name;\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/AkauntingInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass AkauntingInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass AnnotateCmsInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'    => 'addons/modules/{$name}/',\n        'component' => 'addons/components/{$name}/',\n        'service'   => 'addons/services/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass AsgardInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'Modules/{$name}/',\n        'theme' => 'Themes/{$name}/'\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type asgard-module, cut off a trailing '-plugin' if present.\n     *\n     * For package type asgard-theme, cut off a trailing '-theme' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'asgard-module') {\n            return $this->inflectPluginVars($vars);\n        }\n\n        if ($vars['type'] === 'asgard-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectPluginVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-module$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass AttogramInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/BaseInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\IO\\IOInterface;\nuse Composer\\Composer;\nuse Composer\\Package\\PackageInterface;\n\nabstract class BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array();\n    /** @var Composer */\n    protected $composer;\n    /** @var PackageInterface */\n    protected $package;\n    /** @var IOInterface */\n    protected $io;\n\n    /**\n     * Initializes base installer.\n     */\n    public function __construct(PackageInterface $package, Composer $composer, IOInterface $io)\n    {\n        $this->composer = $composer;\n        $this->package = $package;\n        $this->io = $io;\n    }\n\n    /**\n     * Return the install path based on package type.\n     */\n    public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string\n    {\n        $type = $this->package->getType();\n\n        $prettyName = $this->package->getPrettyName();\n        if (strpos($prettyName, '/') !== false) {\n            list($vendor, $name) = explode('/', $prettyName);\n        } else {\n            $vendor = '';\n            $name = $prettyName;\n        }\n\n        $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type'));\n\n        $extra = $package->getExtra();\n        if (!empty($extra['installer-name'])) {\n            $availableVars['name'] = $extra['installer-name'];\n        }\n\n        $extra = $this->composer->getPackage()->getExtra();\n        if (!empty($extra['installer-paths'])) {\n            $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type, $vendor);\n            if ($customPath !== false) {\n                return $this->templatePath($customPath, $availableVars);\n            }\n        }\n\n        $packageType = substr($type, strlen($frameworkType) + 1);\n        $locations = $this->getLocations($frameworkType);\n        if (!isset($locations[$packageType])) {\n            throw new \\InvalidArgumentException(sprintf('Package type \"%s\" is not supported', $type));\n        }\n\n        return $this->templatePath($locations[$packageType], $availableVars);\n    }\n\n    /**\n     * For an installer to override to modify the vars per installer.\n     *\n     * @param  array<string, string> $vars This will normally receive array{name: string, vendor: string, type: string}\n     * @return array<string, string>\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        return $vars;\n    }\n\n    /**\n     * Gets the installer's locations\n     *\n     * @return array<string, string> map of package types => install path\n     */\n    public function getLocations(string $frameworkType)\n    {\n        return $this->locations;\n    }\n\n    /**\n     * Replace vars in a path\n     *\n     * @param  array<string, string> $vars\n     */\n    protected function templatePath(string $path, array $vars = array()): string\n    {\n        if (strpos($path, '{') !== false) {\n            extract($vars);\n            preg_match_all('@\\{\\$([A-Za-z0-9_]*)\\}@i', $path, $matches);\n            if (!empty($matches[1])) {\n                foreach ($matches[1] as $var) {\n                    $path = str_replace('{$' . $var . '}', $$var, $path);\n                }\n            }\n        }\n\n        return $path;\n    }\n\n    /**\n     * Search through a passed paths array for a custom install path.\n     *\n     * @param  array<string, string[]|string> $paths\n     * @return string|false\n     */\n    protected function mapCustomInstallPaths(array $paths, string $name, string $type, ?string $vendor = null)\n    {\n        foreach ($paths as $path => $names) {\n            $names = (array) $names;\n            if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) {\n                return $path;\n            }\n        }\n\n        return false;\n    }\n\n    protected function pregReplace(string $pattern, string $replacement, string $subject): string\n    {\n        $result = preg_replace($pattern, $replacement, $subject);\n        if (null === $result) {\n            throw new \\RuntimeException('Failed to run preg_replace with '.$pattern.': '.preg_last_error());\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Util\\Filesystem;\n\n/**\n * Installer for Bitrix Framework. Supported types of extensions:\n * - `bitrix-d7-module` — copy the module to directory `bitrix/modules/<vendor>.<name>`.\n * - `bitrix-d7-component` — copy the component to directory `bitrix/components/<vendor>/<name>`.\n * - `bitrix-d7-template` — copy the template to directory `bitrix/templates/<vendor>_<name>`.\n *\n * You can set custom path to directory with Bitrix kernel in `composer.json`:\n *\n * ```json\n * {\n *      \"extra\": {\n *          \"bitrix-dir\": \"s1/bitrix\"\n *      }\n * }\n * ```\n *\n * @author Nik Samokhvalov <nik@samokhvalov.info>\n * @author Denis Kulichkin <onexhovia@gmail.com>\n */\nclass BitrixInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'    => '{$bitrix_dir}/modules/{$name}/',    // deprecated, remove on the major release (Backward compatibility will be broken)\n        'component' => '{$bitrix_dir}/components/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken)\n        'theme'     => '{$bitrix_dir}/templates/{$name}/',  // deprecated, remove on the major release (Backward compatibility will be broken)\n        'd7-module'    => '{$bitrix_dir}/modules/{$vendor}.{$name}/',\n        'd7-component' => '{$bitrix_dir}/components/{$vendor}/{$name}/',\n        'd7-template'     => '{$bitrix_dir}/templates/{$vendor}_{$name}/',\n    );\n\n    /**\n     * @var string[] Storage for informations about duplicates at all the time of installation packages.\n     */\n    private static $checkedDuplicates = array();\n\n    public function inflectPackageVars(array $vars): array\n    {\n        /** @phpstan-ignore-next-line */\n        if ($this->composer->getPackage()) {\n            $extra = $this->composer->getPackage()->getExtra();\n\n            if (isset($extra['bitrix-dir'])) {\n                $vars['bitrix_dir'] = $extra['bitrix-dir'];\n            }\n        }\n\n        if (!isset($vars['bitrix_dir'])) {\n            $vars['bitrix_dir'] = 'bitrix';\n        }\n\n        return parent::inflectPackageVars($vars);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    protected function templatePath(string $path, array $vars = array()): string\n    {\n        $templatePath = parent::templatePath($path, $vars);\n        $this->checkDuplicates($templatePath, $vars);\n\n        return $templatePath;\n    }\n\n    /**\n     * Duplicates search packages.\n     *\n     * @param array<string, string> $vars\n     */\n    protected function checkDuplicates(string $path, array $vars = array()): void\n    {\n        $packageType = substr($vars['type'], strlen('bitrix') + 1);\n        $localDir = explode('/', $vars['bitrix_dir']);\n        array_pop($localDir);\n        $localDir[] = 'local';\n        $localDir = implode('/', $localDir);\n\n        $oldPath = str_replace(\n            array('{$bitrix_dir}', '{$name}'),\n            array($localDir, $vars['name']),\n            $this->locations[$packageType]\n        );\n\n        if (in_array($oldPath, static::$checkedDuplicates)) {\n            return;\n        }\n\n        if ($oldPath !== $path && file_exists($oldPath) && $this->io->isInteractive()) {\n            $this->io->writeError('    <error>Duplication of packages:</error>');\n            $this->io->writeError('    <info>Package ' . $oldPath . ' will be called instead package ' . $path . '</info>');\n\n            while (true) {\n                switch ($this->io->ask('    <info>Delete ' . $oldPath . ' [y,n,?]?</info> ', '?')) {\n                    case 'y':\n                        $fs = new Filesystem();\n                        $fs->removeDirectory($oldPath);\n                        break 2;\n\n                    case 'n':\n                        break 2;\n\n                    case '?':\n                    default:\n                        $this->io->writeError(array(\n                            '    y - delete package ' . $oldPath . ' and to continue with the installation',\n                            '    n - don\\'t delete and to continue with the installation',\n                        ));\n                        $this->io->writeError('    ? - print help');\n                        break;\n                }\n            }\n        }\n\n        static::$checkedDuplicates[] = $oldPath;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass BonefishInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'package'    => 'Packages/{$vendor}/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/BotbleInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass BotbleInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'     => 'platform/plugins/{$name}/',\n        'theme'      => 'platform/themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\DependencyResolver\\Pool;\nuse Composer\\Semver\\Constraint\\Constraint;\n\nclass CakePHPInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'Plugin/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($this->matchesCakeVersion('>=', '3.0.0')) {\n            return $vars;\n        }\n\n        $nameParts = explode('/', $vars['name']);\n        foreach ($nameParts as &$value) {\n            $value = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $value));\n            $value = str_replace(array('-', '_'), ' ', $value);\n            $value = str_replace(' ', '', ucwords($value));\n        }\n        $vars['name'] = implode('/', $nameParts);\n\n        return $vars;\n    }\n\n    /**\n     * Change the default plugin location when cakephp >= 3.0\n     */\n    public function getLocations(string $frameworkType): array\n    {\n        if ($this->matchesCakeVersion('>=', '3.0.0')) {\n            $this->locations['plugin'] =  $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/';\n        }\n        return $this->locations;\n    }\n\n    /**\n     * Check if CakePHP version matches against a version\n     *\n     * @phpstan-param '='|'=='|'<'|'<='|'>'|'>='|'<>'|'!=' $matcher\n     */\n    protected function matchesCakeVersion(string $matcher, string $version): bool\n    {\n        $repositoryManager = $this->composer->getRepositoryManager();\n        /** @phpstan-ignore-next-line */\n        if (!$repositoryManager) {\n            return false;\n        }\n\n        $repos = $repositoryManager->getLocalRepository();\n        /** @phpstan-ignore-next-line */\n        if (!$repos) {\n            return false;\n        }\n\n        return $repos->findPackage('cakephp/cakephp', new Constraint($matcher, $version)) !== null;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ChefInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ChefInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'cookbook'  => 'Chef/{$vendor}/{$name}/',\n        'role'      => 'Chef/roles/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/CiviCrmInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass CiviCrmInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'ext'    => 'ext/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ClanCatsFrameworkInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'ship'      => 'CCF/orbit/{$name}/',\n        'theme'     => 'CCF/app/themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass CockpitInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'cockpit/modules/addons/{$name}/',\n    );\n\n    /**\n     * Format module name.\n     *\n     * Strip `module-` prefix from package name.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] == 'cockpit-module') {\n            return $this->inflectModuleVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    public function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = ucfirst($this->pregReplace('/cockpit-/i', '', $vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass CodeIgniterInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'library'     => 'application/libraries/{$name}/',\n        'third-party' => 'application/third_party/{$name}/',\n        'module'      => 'application/modules/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass Concrete5Installer extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'core'       => 'concrete/',\n        'block'      => 'application/blocks/{$name}/',\n        'package'    => 'packages/{$name}/',\n        'theme'      => 'application/themes/{$name}/',\n        'update'     => 'updates/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ConcreteCMSInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ConcreteCMSInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'core'       => 'concrete/',\n        'block'      => 'application/blocks/{$name}/',\n        'package'    => 'packages/{$name}/',\n        'theme'      => 'application/themes/{$name}/',\n        'update'     => 'updates/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass CroogoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'Plugin/{$name}/',\n        'theme' => 'View/Themed/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower(str_replace(array('-', '_'), ' ', $vars['name']));\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass DecibelInstaller extends BaseInstaller\n{\n    /** @var array */\n    /** @var array<string, string> */\n    protected $locations = array(\n        'app'    => 'app/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/DframeInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass DframeInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'  => 'modules/{$vendor}/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass DokuWikiInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'lib/plugins/{$name}/',\n        'template' => 'lib/tpl/{$name}/',\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type dokuwiki-plugin, cut off a trailing '-plugin',\n     * or leading dokuwiki_ if present.\n     *\n     * For package type dokuwiki-template, cut off a trailing '-template' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'dokuwiki-plugin') {\n            return $this->inflectPluginVars($vars);\n        }\n\n        if ($vars['type'] === 'dokuwiki-template') {\n            return $this->inflectTemplateVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectPluginVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-plugin$/', '', $vars['name']);\n        $vars['name'] = $this->pregReplace('/^dokuwiki_?-?/', '', $vars['name']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectTemplateVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-template$/', '', $vars['name']);\n        $vars['name'] = $this->pregReplace('/^dokuwiki_?-?/', '', $vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * Class DolibarrInstaller\n *\n * @package Composer\\Installers\n * @author  Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>\n */\nclass DolibarrInstaller extends BaseInstaller\n{\n    //TODO: Add support for scripts and themes\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'htdocs/custom/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass DrupalInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'core'             => 'core/',\n        'module'           => 'modules/{$name}/',\n        'theme'            => 'themes/{$name}/',\n        'library'          => 'libraries/{$name}/',\n        'profile'          => 'profiles/{$name}/',\n        'database-driver'  => 'drivers/lib/Drupal/Driver/Database/{$name}/',\n        'drush'            => 'drush/{$name}/',\n        'custom-theme'     => 'themes/custom/{$name}/',\n        'custom-module'    => 'modules/custom/{$name}/',\n        'custom-profile'   => 'profiles/custom/{$name}/',\n        'drupal-multisite' => 'sites/{$name}/',\n        'console'          => 'console/{$name}/',\n        'console-language' => 'console/language/{$name}/',\n        'config'           => 'config/sync/',\n        'recipe'           => 'recipes/{$name}',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ElggInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ElggInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'mod/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass EliasisInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'component' => 'components/{$name}/',\n        'module'    => 'modules/{$name}/',\n        'plugin'    => 'plugins/{$name}/',\n        'template'  => 'templates/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Package\\PackageInterface;\n\nclass ExpressionEngineInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    private $ee2Locations = array(\n        'addon'   => 'system/expressionengine/third_party/{$name}/',\n        'theme'   => 'themes/third_party/{$name}/',\n    );\n\n    /** @var array<string, string> */\n    private $ee3Locations = array(\n        'addon'   => 'system/user/addons/{$name}/',\n        'theme'   => 'themes/user/{$name}/',\n    );\n\n    public function getLocations(string $frameworkType): array\n    {\n        if ($frameworkType === 'ee2') {\n            $this->locations = $this->ee2Locations;\n        } else {\n            $this->locations = $this->ee3Locations;\n        }\n\n        return $this->locations;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass EzPlatformInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'meta-assets' => 'web/assets/ezplatform/',\n        'assets' => 'web/assets/ezplatform/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ForkCMSInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ForkCMSInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = [\n        'module'    => 'src/Modules/{$name}/',\n        'theme'     => 'src/Themes/{$name}/'\n    ];\n\n    /**\n     * Format package name.\n     *\n     * For package type fork-cms-module, cut off a trailing '-plugin' if present.\n     *\n     * For package type fork-cms-theme, cut off a trailing '-theme' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'fork-cms-module') {\n            return $this->inflectModuleVars($vars);\n        }\n\n        if ($vars['type'] === 'fork-cms-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^fork-cms-|-module|ForkCMS|ForkCms|Forkcms|forkcms|Module$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); // replace hyphens with spaces\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); // make module name camelcased\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^fork-cms-|-theme|ForkCMS|ForkCms|Forkcms|forkcms|Theme$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); // replace hyphens with spaces\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); // make theme name camelcased\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/FuelInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass FuelInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'  => 'fuel/app/modules/{$name}/',\n        'package' => 'fuel/packages/{$name}/',\n        'theme'   => 'fuel/app/themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass FuelphpInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'component'  => 'components/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/GravInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass GravInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'user/plugins/{$name}/',\n        'theme'  => 'user/themes/{$name}/',\n    );\n\n    /**\n     * Format package name\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $restrictedWords = implode('|', array_keys($this->locations));\n\n        $vars['name'] = strtolower($vars['name']);\n        $vars['name'] = $this->pregReplace(\n            '/^(?:grav-)?(?:(?:'.$restrictedWords.')-)?(.*?)(?:-(?:'.$restrictedWords.'))?$/ui',\n            '$1',\n            $vars['name']\n        );\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/HuradInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass HuradInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n        'theme' => 'plugins/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $nameParts = explode('/', $vars['name']);\n        foreach ($nameParts as &$value) {\n            $value = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $value));\n            $value = str_replace(array('-', '_'), ' ', $value);\n            $value = str_replace(' ', '', ucwords($value));\n        }\n        $vars['name'] = implode('/', $nameParts);\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ImageCMSInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'template'    => 'templates/{$name}/',\n        'module'      => 'application/modules/{$name}/',\n        'library'     => 'application/libraries/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/Installer.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Composer;\nuse Composer\\Installer\\BinaryInstaller;\nuse Composer\\Installer\\LibraryInstaller;\nuse Composer\\IO\\IOInterface;\nuse Composer\\Package\\Package;\nuse Composer\\Package\\PackageInterface;\nuse Composer\\Repository\\InstalledRepositoryInterface;\nuse Composer\\Util\\Filesystem;\nuse React\\Promise\\PromiseInterface;\n\nclass Installer extends LibraryInstaller\n{\n    /**\n     * Package types to installer class map\n     *\n     * @var array<string, string>\n     */\n    private $supportedTypes = array(\n        'akaunting'    => 'AkauntingInstaller',\n        'asgard'       => 'AsgardInstaller',\n        'attogram'     => 'AttogramInstaller',\n        'agl'          => 'AglInstaller',\n        'annotatecms'  => 'AnnotateCmsInstaller',\n        'bitrix'       => 'BitrixInstaller',\n        'botble'       => 'BotbleInstaller',\n        'bonefish'     => 'BonefishInstaller',\n        'cakephp'      => 'CakePHPInstaller',\n        'chef'         => 'ChefInstaller',\n        'civicrm'      => 'CiviCrmInstaller',\n        'ccframework'  => 'ClanCatsFrameworkInstaller',\n        'cockpit'      => 'CockpitInstaller',\n        'codeigniter'  => 'CodeIgniterInstaller',\n        'concrete5'    => 'Concrete5Installer',\n        'concretecms'  => 'ConcreteCMSInstaller',\n        'croogo'       => 'CroogoInstaller',\n        'dframe'       => 'DframeInstaller',\n        'dokuwiki'     => 'DokuWikiInstaller',\n        'dolibarr'     => 'DolibarrInstaller',\n        'decibel'      => 'DecibelInstaller',\n        'drupal'       => 'DrupalInstaller',\n        'elgg'         => 'ElggInstaller',\n        'eliasis'      => 'EliasisInstaller',\n        'ee3'          => 'ExpressionEngineInstaller',\n        'ee2'          => 'ExpressionEngineInstaller',\n        'ezplatform'   => 'EzPlatformInstaller',\n        'fork'         => 'ForkCMSInstaller',\n        'fuel'         => 'FuelInstaller',\n        'fuelphp'      => 'FuelphpInstaller',\n        'grav'         => 'GravInstaller',\n        'hurad'        => 'HuradInstaller',\n        'tastyigniter' => 'TastyIgniterInstaller',\n        'imagecms'     => 'ImageCMSInstaller',\n        'itop'         => 'ItopInstaller',\n        'kanboard'     => 'KanboardInstaller',\n        'known'\t       => 'KnownInstaller',\n        'kodicms'      => 'KodiCMSInstaller',\n        'kohana'       => 'KohanaInstaller',\n        'lms'          => 'LanManagementSystemInstaller',\n        'laravel'      => 'LaravelInstaller',\n        'lavalite'     => 'LavaLiteInstaller',\n        'lithium'      => 'LithiumInstaller',\n        'magento'      => 'MagentoInstaller',\n        'majima'       => 'MajimaInstaller',\n        'mantisbt'     => 'MantisBTInstaller',\n        'mako'         => 'MakoInstaller',\n        'matomo'       => 'MatomoInstaller',\n        'maya'         => 'MayaInstaller',\n        'mautic'       => 'MauticInstaller',\n        'mediawiki'    => 'MediaWikiInstaller',\n        'miaoxing'     => 'MiaoxingInstaller',\n        'microweber'   => 'MicroweberInstaller',\n        'modulework'   => 'MODULEWorkInstaller',\n        'modx'         => 'ModxInstaller',\n        'modxevo'      => 'MODXEvoInstaller',\n        'moodle'       => 'MoodleInstaller',\n        'october'      => 'OctoberInstaller',\n        'ontowiki'     => 'OntoWikiInstaller',\n        'oxid'         => 'OxidInstaller',\n        'osclass'      => 'OsclassInstaller',\n        'pxcms'        => 'PxcmsInstaller',\n        'phpbb'        => 'PhpBBInstaller',\n        'piwik'        => 'PiwikInstaller',\n        'plentymarkets'=> 'PlentymarketsInstaller',\n        'ppi'          => 'PPIInstaller',\n        'puppet'       => 'PuppetInstaller',\n        'radphp'       => 'RadPHPInstaller',\n        'phifty'       => 'PhiftyInstaller',\n        'porto'        => 'PortoInstaller',\n        'processwire'  => 'ProcessWireInstaller',\n        'quicksilver'  => 'PantheonInstaller',\n        'redaxo'       => 'RedaxoInstaller',\n        'redaxo5'      => 'Redaxo5Installer',\n        'reindex'      => 'ReIndexInstaller',\n        'roundcube'    => 'RoundcubeInstaller',\n        'shopware'     => 'ShopwareInstaller',\n        'sitedirect'   => 'SiteDirectInstaller',\n        'silverstripe' => 'SilverStripeInstaller',\n        'smf'          => 'SMFInstaller',\n        'starbug'      => 'StarbugInstaller',\n        'sydes'        => 'SyDESInstaller',\n        'sylius'       => 'SyliusInstaller',\n        'tao'          => 'TaoInstaller',\n        'thelia'       => 'TheliaInstaller',\n        'tusk'         => 'TuskInstaller',\n        'userfrosting' => 'UserFrostingInstaller',\n        'vanilla'      => 'VanillaInstaller',\n        'whmcs'        => 'WHMCSInstaller',\n        'winter'       => 'WinterInstaller',\n        'wolfcms'      => 'WolfCMSInstaller',\n        'wordpress'    => 'WordPressInstaller',\n        'yawik'        => 'YawikInstaller',\n        'zend'         => 'ZendInstaller',\n        'zikula'       => 'ZikulaInstaller',\n        'prestashop'   => 'PrestashopInstaller'\n    );\n\n    /**\n     * Disables installers specified in main composer extra installer-disable\n     * list\n     */\n    public function __construct(\n        IOInterface $io,\n        Composer $composer,\n        string $type = 'library',\n        ?Filesystem $filesystem = null,\n        ?BinaryInstaller $binaryInstaller = null\n    ) {\n        parent::__construct($io, $composer, $type, $filesystem, $binaryInstaller);\n        $this->removeDisabledInstallers();\n    }\n\n    /**\n     * {@inheritDoc}\n     */\n    public function getInstallPath(PackageInterface $package)\n    {\n        $type = $package->getType();\n        $frameworkType = $this->findFrameworkType($type);\n\n        if ($frameworkType === false) {\n            throw new \\InvalidArgumentException(\n                'Sorry the package type of this package is not yet supported.'\n            );\n        }\n\n        $class = 'Composer\\\\Installers\\\\' . $this->supportedTypes[$frameworkType];\n        /**\n         * @var BaseInstaller\n         */\n        $installer = new $class($package, $this->composer, $this->getIO());\n\n        $path = $installer->getInstallPath($package, $frameworkType);\n        if (!$this->filesystem->isAbsolutePath($path)) {\n            $path = getcwd() . '/' . $path;\n        }\n\n        return $path;\n    }\n\n    public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package)\n    {\n        $installPath = $this->getPackageBasePath($package);\n        $io = $this->io;\n        $outputStatus = function () use ($io, $installPath) {\n            $io->write(sprintf('Deleting %s - %s', $installPath, !file_exists($installPath) ? '<comment>deleted</comment>' : '<error>not deleted</error>'));\n        };\n\n        $promise = parent::uninstall($repo, $package);\n\n        // Composer v2 might return a promise here\n        if ($promise instanceof PromiseInterface) {\n            return $promise->then($outputStatus);\n        }\n\n        // If not, execute the code right away as parent::uninstall executed synchronously (composer v1, or v2 without async)\n        $outputStatus();\n\n        return null;\n    }\n\n    /**\n     * {@inheritDoc}\n     *\n     * @param string $packageType\n     */\n    public function supports($packageType)\n    {\n        $frameworkType = $this->findFrameworkType($packageType);\n\n        if ($frameworkType === false) {\n            return false;\n        }\n\n        $locationPattern = $this->getLocationPattern($frameworkType);\n\n        return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1;\n    }\n\n    /**\n     * Finds a supported framework type if it exists and returns it\n     *\n     * @return string|false\n     */\n    protected function findFrameworkType(string $type)\n    {\n        krsort($this->supportedTypes);\n\n        foreach ($this->supportedTypes as $key => $val) {\n            if ($key === substr($type, 0, strlen($key))) {\n                return substr($type, 0, strlen($key));\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get the second part of the regular expression to check for support of a\n     * package type\n     */\n    protected function getLocationPattern(string $frameworkType): string\n    {\n        $pattern = null;\n        if (!empty($this->supportedTypes[$frameworkType])) {\n            $frameworkClass = 'Composer\\\\Installers\\\\' . $this->supportedTypes[$frameworkType];\n            /** @var BaseInstaller $framework */\n            $framework = new $frameworkClass(new Package('dummy/pkg', '1.0.0.0', '1.0.0'), $this->composer, $this->getIO());\n            $locations = array_keys($framework->getLocations($frameworkType));\n            if ($locations) {\n                $pattern = '(' . implode('|', $locations) . ')';\n            }\n        }\n\n        return $pattern ?: '(\\w+)';\n    }\n\n    private function getIO(): IOInterface\n    {\n        return $this->io;\n    }\n\n    /**\n     * Look for installers set to be disabled in composer's extra config and\n     * remove them from the list of supported installers.\n     *\n     * Globals:\n     *  - true, \"all\", and \"*\" - disable all installers.\n     *  - false - enable all installers (useful with\n     *     wikimedia/composer-merge-plugin or similar)\n     */\n    protected function removeDisabledInstallers(): void\n    {\n        $extra = $this->composer->getPackage()->getExtra();\n\n        if (!isset($extra['installer-disable']) || $extra['installer-disable'] === false) {\n            // No installers are disabled\n            return;\n        }\n\n        // Get installers to disable\n        $disable = $extra['installer-disable'];\n\n        // Ensure $disabled is an array\n        if (!is_array($disable)) {\n            $disable = array($disable);\n        }\n\n        // Check which installers should be disabled\n        $all = array(true, \"all\", \"*\");\n        $intersect = array_intersect($all, $disable);\n        if (!empty($intersect)) {\n            // Disable all installers\n            $this->supportedTypes = array();\n            return;\n        }\n\n        // Disable specified installers\n        foreach ($disable as $key => $installer) {\n            if (is_string($installer) && key_exists($installer, $this->supportedTypes)) {\n                unset($this->supportedTypes[$installer]);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ItopInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ItopInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'extension'    => 'extensions/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n *\n * Installer for kanboard plugins\n *\n * kanboard.net\n *\n * Class KanboardInstaller\n * @package Composer\\Installers\n */\nclass KanboardInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'  => 'plugins/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/KnownInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass KnownInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'    => 'IdnoPlugins/{$name}/',\n        'theme'     => 'Themes/{$name}/',\n        'console'   => 'ConsolePlugins/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass KodiCMSInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'cms/plugins/{$name}/',\n        'media'  => 'cms/media/vendor/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass KohanaInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass LanManagementSystemInstaller extends BaseInstaller\n{\n\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n        'template' => 'templates/{$name}/',\n        'document-template' => 'documents/templates/{$name}/',\n        'userpanel-module' => 'userpanel/modules/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass LaravelInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'library' => 'libraries/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass LavaLiteInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'package' => 'packages/{$vendor}/{$name}/',\n        'theme'   => 'public/themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass LithiumInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'library' => 'libraries/{$name}/',\n        'source'  => 'libraries/_source/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MODULEWorkInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'    => 'modules/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * An installer to handle MODX Evolution specifics when installing packages.\n */\nclass MODXEvoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'snippet'       => 'assets/snippets/{$name}/',\n        'plugin'        => 'assets/plugins/{$name}/',\n        'module'        => 'assets/modules/{$name}/',\n        'template'      => 'assets/templates/{$name}/',\n        'lib'           => 'assets/lib/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MagentoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'theme'   => 'app/design/frontend/{$name}/',\n        'skin'    => 'skin/frontend/default/{$name}/',\n        'library' => 'lib/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * Plugin/theme installer for majima\n * @author David Neustadt\n */\nclass MajimaInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n    );\n\n    /**\n     * Transforms the names\n     *\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        return $this->correctPluginName($vars);\n    }\n\n    /**\n     * Change hyphenated names to camelcase\n     *\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    private function correctPluginName(array $vars): array\n    {\n        $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) {\n            return strtoupper($matches[0][1]);\n        }, $vars['name']);\n\n        if (null === $camelCasedName) {\n            throw new \\RuntimeException('Failed to run preg_replace_callback: '.preg_last_error());\n        }\n\n        $vars['name'] = ucfirst($camelCasedName);\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MakoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MakoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'package' => 'app/packages/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MantisBTInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\DependencyResolver\\Pool;\n\nclass MantisBTInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MatomoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * Class MatomoInstaller\n *\n * @package Composer\\Installers\n */\nclass MatomoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MauticInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Package\\PackageInterface;\n\nclass MauticInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'           => 'plugins/{$name}/',\n        'theme'            => 'themes/{$name}/',\n        'core'             => 'app/',\n    );\n\n    private function getDirectoryName(): string\n    {\n        $extra = $this->package->getExtra();\n        if (!empty($extra['install-directory-name'])) {\n            return $extra['install-directory-name'];\n        }\n\n        return $this->toCamelCase($this->package->getPrettyName());\n    }\n\n    private function toCamelCase(string $packageName): string\n    {\n        return str_replace(' ', '', ucwords(str_replace('-', ' ', basename($packageName))));\n    }\n\n    /**\n     * Format package name of mautic-plugins to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] == 'mautic-plugin' || $vars['type'] == 'mautic-theme') {\n            $directoryName = $this->getDirectoryName();\n            $vars['name'] = $directoryName;\n        }\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MayaInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MayaInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type maya-module, cut off a trailing '-module' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'maya-module') {\n            return $this->inflectModuleVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-module$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MediaWikiInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'core' => 'core/',\n        'extension' => 'extensions/{$name}/',\n        'skin' => 'skins/{$name}/',\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type mediawiki-extension, cut off a trailing '-extension' if present and transform\n     * to CamelCase keeping existing uppercase chars.\n     *\n     * For package type mediawiki-skin, cut off a trailing '-skin' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'mediawiki-extension') {\n            return $this->inflectExtensionVars($vars);\n        }\n\n        if ($vars['type'] === 'mediawiki-skin') {\n            return $this->inflectSkinVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectExtensionVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-extension$/', '', $vars['name']);\n        $vars['name'] = str_replace('-', ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectSkinVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-skin$/', '', $vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MiaoxingInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MiaoxingInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MicroweberInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'userfiles/modules/{$install_item_dir}/',\n        'module-skin' => 'userfiles/modules/{$install_item_dir}/templates/',\n        'template' => 'userfiles/templates/{$install_item_dir}/',\n        'element' => 'userfiles/elements/{$install_item_dir}/',\n        'vendor' => 'vendor/{$install_item_dir}/',\n        'components' => 'components/{$install_item_dir}/'\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type microweber-module, cut off a trailing '-module' if present\n     *\n     * For package type microweber-template, cut off a trailing '-template' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($this->package->getTargetDir() !== null && $this->package->getTargetDir() !== '') {\n            $vars['install_item_dir'] = $this->package->getTargetDir();\n        } else {\n            $vars['install_item_dir'] = $vars['name'];\n            if ($vars['type'] === 'microweber-template') {\n                return $this->inflectTemplateVars($vars);\n            }\n            if ($vars['type'] === 'microweber-templates') {\n                return $this->inflectTemplatesVars($vars);\n            }\n            if ($vars['type'] === 'microweber-core') {\n                return $this->inflectCoreVars($vars);\n            }\n            if ($vars['type'] === 'microweber-adapter') {\n                return $this->inflectCoreVars($vars);\n            }\n            if ($vars['type'] === 'microweber-module') {\n                return $this->inflectModuleVars($vars);\n            }\n            if ($vars['type'] === 'microweber-modules') {\n                return $this->inflectModulesVars($vars);\n            }\n            if ($vars['type'] === 'microweber-skin') {\n                return $this->inflectSkinVars($vars);\n            }\n            if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') {\n                return $this->inflectElementVars($vars);\n            }\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectTemplateVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-template$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/template-$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectTemplatesVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-templates$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/templates-$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectCoreVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-providers$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/-provider$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/-adapter$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModuleVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-module$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/module-$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModulesVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-modules$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/modules-$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectSkinVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-skin$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/skin-$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectElementVars(array $vars): array\n    {\n        $vars['install_item_dir'] = $this->pregReplace('/-elements$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/elements-$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/-element$/', '', $vars['install_item_dir']);\n        $vars['install_item_dir'] = $this->pregReplace('/element-$/', '', $vars['install_item_dir']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ModxInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * An installer to handle MODX specifics when installing packages.\n */\nclass ModxInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'extra' => 'core/packages/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass MoodleInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'mod'                => 'mod/{$name}/',\n        'admin_report'       => 'admin/report/{$name}/',\n        'atto'               => 'lib/editor/atto/plugins/{$name}/',\n        'tool'               => 'admin/tool/{$name}/',\n        'assignment'         => 'mod/assignment/type/{$name}/',\n        'assignsubmission'   => 'mod/assign/submission/{$name}/',\n        'assignfeedback'     => 'mod/assign/feedback/{$name}/',\n        'antivirus'          => 'lib/antivirus/{$name}/',\n        'auth'               => 'auth/{$name}/',\n        'availability'       => 'availability/condition/{$name}/',\n        'block'              => 'blocks/{$name}/',\n        'booktool'           => 'mod/book/tool/{$name}/',\n        'cachestore'         => 'cache/stores/{$name}/',\n        'cachelock'          => 'cache/locks/{$name}/',\n        'calendartype'       => 'calendar/type/{$name}/',\n        'communication'      => 'communication/provider/{$name}/',\n        'customfield'        => 'customfield/field/{$name}/',\n        'fileconverter'      => 'files/converter/{$name}/',\n        'format'             => 'course/format/{$name}/',\n        'coursereport'       => 'course/report/{$name}/',\n        'contenttype'        => 'contentbank/contenttype/{$name}/',\n        'customcertelement'  => 'mod/customcert/element/{$name}/',\n        'datafield'          => 'mod/data/field/{$name}/',\n        'dataformat'         => 'dataformat/{$name}/',\n        'datapreset'         => 'mod/data/preset/{$name}/',\n        'editor'             => 'lib/editor/{$name}/',\n        'enrol'              => 'enrol/{$name}/',\n        'filter'             => 'filter/{$name}/',\n        'forumreport'        => 'mod/forum/report/{$name}/',\n        'gradeexport'        => 'grade/export/{$name}/',\n        'gradeimport'        => 'grade/import/{$name}/',\n        'gradereport'        => 'grade/report/{$name}/',\n        'gradingform'        => 'grade/grading/form/{$name}/',\n        'h5plib'             => 'h5p/h5plib/{$name}/',\n        'local'              => 'local/{$name}/',\n        'logstore'           => 'admin/tool/log/store/{$name}/',\n        'ltisource'          => 'mod/lti/source/{$name}/',\n        'ltiservice'         => 'mod/lti/service/{$name}/',\n        'media'              => 'media/player/{$name}/',\n        'message'            => 'message/output/{$name}/',\n        'mlbackend'          => 'lib/mlbackend/{$name}/',\n        'mnetservice'        => 'mnet/service/{$name}/',\n        'paygw'              => 'payment/gateway/{$name}/',\n        'plagiarism'         => 'plagiarism/{$name}/',\n        'portfolio'          => 'portfolio/{$name}/',\n        'qbank'              => 'question/bank/{$name}/',\n        'qbehaviour'         => 'question/behaviour/{$name}/',\n        'qformat'            => 'question/format/{$name}/',\n        'qtype'              => 'question/type/{$name}/',\n        'quizaccess'         => 'mod/quiz/accessrule/{$name}/',\n        'quiz'               => 'mod/quiz/report/{$name}/',\n        'report'             => 'report/{$name}/',\n        'repository'         => 'repository/{$name}/',\n        'scormreport'        => 'mod/scorm/report/{$name}/',\n        'search'             => 'search/engine/{$name}/',\n        'theme'              => 'theme/{$name}/',\n        'tiny'               => 'lib/editor/tiny/plugins/{$name}/',\n        'tinymce'            => 'lib/editor/tinymce/plugins/{$name}/',\n        'profilefield'       => 'user/profile/field/{$name}/',\n        'webservice'         => 'webservice/{$name}/',\n        'workshopallocation' => 'mod/workshop/allocation/{$name}/',\n        'workshopeval'       => 'mod/workshop/eval/{$name}/',\n        'workshopform'       => 'mod/workshop/form/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass OctoberInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'    => 'modules/{$name}/',\n        'plugin'    => 'plugins/{$vendor}/{$name}/',\n        'theme'     => 'themes/{$vendor}-{$name}/'\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type october-plugin, cut off a trailing '-plugin' if present.\n     *\n     * For package type october-theme, cut off a trailing '-theme' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'october-plugin') {\n            return $this->inflectPluginVars($vars);\n        }\n\n        if ($vars['type'] === 'october-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectPluginVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^oc-|-plugin$/', '', $vars['name']);\n        $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^oc-|-theme$/', '', $vars['name']);\n        $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass OntoWikiInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'extension' => 'extensions/{$name}/',\n        'theme' => 'extensions/themes/{$name}/',\n        'translation' => 'extensions/translations/{$name}/',\n    );\n\n    /**\n     * Format package name to lower case and remove \".ontowiki\" suffix\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($vars['name']);\n        $vars['name'] = $this->pregReplace('/.ontowiki$/', '', $vars['name']);\n        $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']);\n        $vars['name'] = $this->pregReplace('/-translation$/', '', $vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass OsclassInstaller extends BaseInstaller\n{\n    \n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'oc-content/plugins/{$name}/',\n        'theme' => 'oc-content/themes/{$name}/',\n        'language' => 'oc-content/languages/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/OxidInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Package\\PackageInterface;\n\nclass OxidInstaller extends BaseInstaller\n{\n    const VENDOR_PATTERN = '/^modules\\/(?P<vendor>.+)\\/.+/';\n\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'    => 'modules/{$name}/',\n        'theme'  => 'application/views/{$name}/',\n        'out'    => 'out/{$name}/',\n    );\n\n    public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string\n    {\n        $installPath = parent::getInstallPath($package, $frameworkType);\n        $type = $this->package->getType();\n        if ($type === 'oxid-module') {\n            $this->prepareVendorDirectory($installPath);\n        }\n        return $installPath;\n    }\n\n    /**\n     * Makes sure there is a vendormetadata.php file inside\n     * the vendor folder if there is a vendor folder.\n     */\n    protected function prepareVendorDirectory(string $installPath): void\n    {\n        $matches = '';\n        $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches);\n        if (!$hasVendorDirectory) {\n            return;\n        }\n\n        $vendorDirectory = $matches['vendor'];\n        $vendorPath = getcwd() . '/modules/' . $vendorDirectory;\n        if (!file_exists($vendorPath)) {\n            mkdir($vendorPath, 0755, true);\n        }\n\n        $vendorMetaDataPath = $vendorPath . '/vendormetadata.php';\n        touch($vendorMetaDataPath);\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PPIInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PPIInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PantheonInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PantheonInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'script' => 'web/private/scripts/quicksilver/{$name}',\n        'module' => 'web/private/scripts/quicksilver/{$name}',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PhiftyInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'bundle' => 'bundles/{$name}/',\n        'library' => 'libraries/{$name}/',\n        'framework' => 'frameworks/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PhpBBInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'extension' => 'ext/{$vendor}/{$name}/',\n        'language'  => 'language/{$name}/',\n        'style'     => 'styles/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * Class PiwikInstaller\n *\n * @package Composer\\Installers\n */\nclass PiwikInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PlentymarketsInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'   => '{$name}/'\n    );\n\n    /**\n     * Remove hyphen, \"plugin\" and format to camelcase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $nameBits = explode(\"-\", $vars['name']);\n        foreach ($nameBits as $key => $name) {\n            $nameBits[$key] = ucfirst($name);\n            if (strcasecmp($name, \"Plugin\") == 0) {\n                unset($nameBits[$key]);\n            }\n        }\n        $vars['name'] = implode('', $nameBits);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/Plugin.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Composer;\nuse Composer\\IO\\IOInterface;\nuse Composer\\Plugin\\PluginInterface;\n\nclass Plugin implements PluginInterface\n{\n    /** @var Installer */\n    private $installer;\n\n    public function activate(Composer $composer, IOInterface $io): void\n    {\n        $this->installer = new Installer($io, $composer);\n        $composer->getInstallationManager()->addInstaller($this->installer);\n    }\n\n    public function deactivate(Composer $composer, IOInterface $io): void\n    {\n        $composer->getInstallationManager()->removeInstaller($this->installer);\n    }\n\n    public function uninstall(Composer $composer, IOInterface $io): void\n    {\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PortoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PortoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'container' => 'app/Containers/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PrestashopInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n        'theme'  => 'themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ProcessWireInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ProcessWireInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'  => 'site/modules/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PuppetInstaller extends BaseInstaller\n{\n\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass PxcmsInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'app/Modules/{$name}/',\n        'theme' => 'themes/{$name}/',\n    );\n\n    /**\n     * Format package name.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'pxcms-module') {\n            return $this->inflectModuleVars($vars);\n        }\n\n        if ($vars['type'] === 'pxcms-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * For package type pxcms-module, cut off a trailing '-plugin' if present.\n     *\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = str_replace('pxcms-', '', $vars['name']);       // strip out pxcms- just incase (legacy)\n        $vars['name'] = str_replace('module-', '', $vars['name']);      // strip out module-\n        $vars['name'] = $this->pregReplace('/-module$/', '', $vars['name']);  // strip out -module\n        $vars['name'] = str_replace('-', '_', $vars['name']);           // make -'s be _'s\n        $vars['name'] = ucwords($vars['name']);                         // make module name camelcased\n\n        return $vars;\n    }\n\n    /**\n     * For package type pxcms-module, cut off a trailing '-plugin' if present.\n     *\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = str_replace('pxcms-', '', $vars['name']);       // strip out pxcms- just incase (legacy)\n        $vars['name'] = str_replace('theme-', '', $vars['name']);       // strip out theme-\n        $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']);   // strip out -theme\n        $vars['name'] = str_replace('-', '_', $vars['name']);           // make -'s be _'s\n        $vars['name'] = ucwords($vars['name']);                         // make module name camelcased\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass RadPHPInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'bundle' => 'src/{$name}/'\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $nameParts = explode('/', $vars['name']);\n        foreach ($nameParts as &$value) {\n            $value = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $value));\n            $value = str_replace(array('-', '_'), ' ', $value);\n            $value = str_replace(' ', '', ucwords($value));\n        }\n        $vars['name'] = implode('/', $nameParts);\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ReIndexInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'theme'     => 'themes/{$name}/',\n        'plugin'    => 'plugins/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass Redaxo5Installer extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'addon'          => 'redaxo/src/addons/{$name}/',\n        'bestyle-plugin' => 'redaxo/src/addons/be_style/plugins/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass RedaxoInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'addon'          => 'redaxo/include/addons/{$name}/',\n        'bestyle-plugin' => 'redaxo/include/addons/be_style/plugins/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass RoundcubeInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'plugins/{$name}/',\n    );\n\n    /**\n     * Lowercase name and changes the name to a underscores\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower(str_replace('-', '_', $vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/SMFInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass SMFInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'Sources/{$name}/',\n        'theme' => 'Themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * Plugin/theme installer for shopware\n * @author Benjamin Boit\n */\nclass ShopwareInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'backend-plugin'    => 'engine/Shopware/Plugins/Local/Backend/{$name}/',\n        'core-plugin'       => 'engine/Shopware/Plugins/Local/Core/{$name}/',\n        'frontend-plugin'   => 'engine/Shopware/Plugins/Local/Frontend/{$name}/',\n        'theme'             => 'templates/{$name}/',\n        'plugin'            => 'custom/plugins/{$name}/',\n        'frontend-theme'    => 'themes/Frontend/{$name}/',\n    );\n\n    /**\n     * Transforms the names\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'shopware-theme') {\n            return $this->correctThemeName($vars);\n        }\n\n        return $this->correctPluginName($vars);\n    }\n\n    /**\n     * Changes the name to a camelcased combination of vendor and name\n     *\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    private function correctPluginName(array $vars): array\n    {\n        $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) {\n            return strtoupper($matches[0][1]);\n        }, $vars['name']);\n\n        if (null === $camelCasedName) {\n            throw new \\RuntimeException('Failed to run preg_replace_callback: '.preg_last_error());\n        }\n\n        $vars['name'] = ucfirst($vars['vendor']) . ucfirst($camelCasedName);\n\n        return $vars;\n    }\n\n    /**\n     * Changes the name to a underscore separated name\n     *\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    private function correctThemeName(array $vars): array\n    {\n        $vars['name'] = str_replace('-', '_', $vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nuse Composer\\Package\\PackageInterface;\n\nclass SilverStripeInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => '{$name}/',\n        'theme'  => 'themes/{$name}/',\n    );\n\n    /**\n     * Return the install path based on package type.\n     *\n     * Relies on built-in BaseInstaller behaviour with one exception: silverstripe/framework\n     * must be installed to 'sapphire' and not 'framework' if the version is <3.0.0\n     */\n    public function getInstallPath(PackageInterface $package, string $frameworkType = ''): string\n    {\n        if (\n            $package->getName() == 'silverstripe/framework'\n            && preg_match('/^\\d+\\.\\d+\\.\\d+/', $package->getVersion())\n            && version_compare($package->getVersion(), '2.999.999') < 0\n        ) {\n            return $this->templatePath($this->locations['module'], array('name' => 'sapphire'));\n        }\n\n        return parent::getInstallPath($package, $frameworkType);\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass SiteDirectInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$vendor}/{$name}/',\n        'plugin' => 'plugins/{$vendor}/{$name}/'\n    );\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        return $this->parseVars($vars);\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function parseVars(array $vars): array\n    {\n        $vars['vendor'] = strtolower($vars['vendor']) == 'sitedirect' ? 'SiteDirect' : $vars['vendor'];\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/StarbugInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass StarbugInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$name}/',\n        'theme' => 'themes/{$name}/',\n        'custom-module' => 'app/modules/{$name}/',\n        'custom-theme' => 'app/themes/{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass SyDESInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'app/modules/{$name}/',\n        'theme'  => 'themes/{$name}/',\n    );\n\n    /**\n     * Format module name.\n     *\n     * Strip `sydes-` prefix and a trailing '-theme' or '-module' from package name if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] == 'sydes-module') {\n            return $this->inflectModuleVars($vars);\n        }\n\n        if ($vars['type'] === 'sydes-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    public function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/(^sydes-|-module$)/i', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/(^sydes-|-theme$)/', '', $vars['name']);\n        $vars['name'] = strtolower($vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/SyliusInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass SyliusInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'theme' => 'themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/TaoInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * An installer to handle TAO extensions.\n */\nclass TaoInstaller extends BaseInstaller\n{\n    const EXTRA_TAO_EXTENSION_NAME = 'tao-extension-name';\n\n    /** @var array<string, string> */\n    protected $locations = array(\n        'extension' => '{$name}'\n    );\n    \n    public function inflectPackageVars(array $vars): array\n    {\n        $extra = $this->package->getExtra();\n\n        if (array_key_exists(self::EXTRA_TAO_EXTENSION_NAME, $extra)) {\n            $vars['name'] = $extra[self::EXTRA_TAO_EXTENSION_NAME];\n            return $vars;\n        }\n\n        $vars['name'] = str_replace('extension-', '', $vars['name']);\n        $vars['name'] = str_replace('-', ' ', $vars['name']);\n        $vars['name'] = lcfirst(str_replace(' ', '', ucwords($vars['name'])));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass TastyIgniterInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = [\n        'module' => 'app/{$name}/',\n        'extension' => 'extensions/{$vendor}/{$name}/',\n        'theme' => 'themes/{$name}/',\n    ];\n\n    /**\n     * Format package name.\n     *\n     * Cut off leading 'ti-ext-' or 'ti-theme-' if present.\n     * Strip vendor name of characters that is not alphanumeric or an underscore\n     *\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $extra = $this->package->getExtra();\n\n        if ($vars['type'] === 'tastyigniter-module') {\n            return $this->inflectModuleVars($vars);\n        }\n\n        if ($vars['type'] === 'tastyigniter-extension') {\n            return $this->inflectExtensionVars($vars, $extra);\n        }\n\n        if ($vars['type'] === 'tastyigniter-theme') {\n            return $this->inflectThemeVars($vars, $extra);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^ti-module-/', '', $vars['name']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @param array<string, mixed> $extra\n     * @return array<string, string>\n     */\n    protected function inflectExtensionVars(array $vars, array $extra): array\n    {\n        if (!empty($extra['tastyigniter-extension']['code'])) {\n            $parts = explode('.', $extra['tastyigniter-extension']['code']);\n            $vars['vendor'] = (string)$parts[0];\n            $vars['name'] = (string)($parts[1] ?? '');\n        }\n\n        $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']);\n        $vars['name'] = $this->pregReplace('/^ti-ext-/', '', $vars['name']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @param array<string, mixed> $extra\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars, array $extra): array\n    {\n        if (!empty($extra['tastyigniter-theme']['code'])) {\n            $vars['name'] = $extra['tastyigniter-theme']['code'];\n        }\n\n        $vars['name'] = $this->pregReplace('/^ti-theme-/', '', $vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass TheliaInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'                => 'local/modules/{$name}/',\n        'frontoffice-template'  => 'templates/frontOffice/{$name}/',\n        'backoffice-template'   => 'templates/backOffice/{$name}/',\n        'email-template'        => 'templates/email/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/TuskInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\n/**\n * Composer installer for 3rd party Tusk utilities\n * @author Drew Ewing <drew@phenocode.com>\n */\nclass TuskInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'task'    => '.tusk/tasks/{$name}/',\n        'command' => '.tusk/commands/{$name}/',\n        'asset'   => 'assets/tusk/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass UserFrostingInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'sprinkle' => 'app/sprinkles/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass VanillaInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'    => 'plugins/{$name}/',\n        'theme'     => 'themes/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass VgmcpInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'bundle' => 'src/{$vendor}/{$name}/',\n        'theme' => 'themes/{$name}/'\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type vgmcp-bundle, cut off a trailing '-bundle' if present.\n     *\n     * For package type vgmcp-theme, cut off a trailing '-theme' if present.\n     *\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'vgmcp-bundle') {\n            return $this->inflectPluginVars($vars);\n        }\n\n        if ($vars['type'] === 'vgmcp-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectPluginVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-bundle$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/-theme$/', '', $vars['name']);\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass WHMCSInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'addons' => 'modules/addons/{$vendor}_{$name}/',\n        'fraud' => 'modules/fraud/{$vendor}_{$name}/',\n        'gateways' => 'modules/gateways/{$vendor}_{$name}/',\n        'notifications' => 'modules/notifications/{$vendor}_{$name}/',\n        'registrars' => 'modules/registrars/{$vendor}_{$name}/',\n        'reports' => 'modules/reports/{$vendor}_{$name}/',\n        'security' => 'modules/security/{$vendor}_{$name}/',\n        'servers' => 'modules/servers/{$vendor}_{$name}/',\n        'social' => 'modules/social/{$vendor}_{$name}/',\n        'support' => 'modules/support/{$vendor}_{$name}/',\n        'templates' => 'templates/{$vendor}_{$name}/',\n        'includes' => 'includes/{$vendor}_{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/WinterInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass WinterInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'    => 'modules/{$name}/',\n        'plugin'    => 'plugins/{$vendor}/{$name}/',\n        'theme'     => 'themes/{$name}/'\n    );\n\n    /**\n     * Format package name.\n     *\n     * For package type winter-plugin, cut off a trailing '-plugin' if present.\n     *\n     * For package type winter-theme, cut off a trailing '-theme' if present.\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        if ($vars['type'] === 'winter-module') {\n            return $this->inflectModuleVars($vars);\n        }\n        \n        if ($vars['type'] === 'winter-plugin') {\n            return $this->inflectPluginVars($vars);\n        }\n\n        if ($vars['type'] === 'winter-theme') {\n            return $this->inflectThemeVars($vars);\n        }\n\n        return $vars;\n    }\n    \n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectModuleVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^wn-|-module$/', '', $vars['name']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectPluginVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^wn-|-plugin$/', '', $vars['name']);\n        $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']);\n\n        return $vars;\n    }\n\n    /**\n     * @param array<string, string> $vars\n     * @return array<string, string>\n     */\n    protected function inflectThemeVars(array $vars): array\n    {\n        $vars['name'] = $this->pregReplace('/^wn-|-theme$/', '', $vars['name']);\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass WolfCMSInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin' => 'wolf/plugins/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass WordPressInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'plugin'    => 'wp-content/plugins/{$name}/',\n        'theme'     => 'wp-content/themes/{$name}/',\n        'muplugin'  => 'wp-content/mu-plugins/{$name}/',\n        'dropin'    => 'wp-content/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/YawikInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass YawikInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module'  => 'module/{$name}/',\n    );\n\n    /**\n     * Format package name to CamelCase\n     */\n    public function inflectPackageVars(array $vars): array\n    {\n        $vars['name'] = strtolower($this->pregReplace('/(?<=\\\\w)([A-Z])/', '_\\\\1', $vars['name']));\n        $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']);\n        $vars['name'] = str_replace(' ', '', ucwords($vars['name']));\n\n        return $vars;\n    }\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ZendInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ZendInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'library' => 'library/{$name}/',\n        'extra'   => 'extras/library/{$name}/',\n        'module'  => 'module/{$name}/',\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php",
    "content": "<?php\n\nnamespace Composer\\Installers;\n\nclass ZikulaInstaller extends BaseInstaller\n{\n    /** @var array<string, string> */\n    protected $locations = array(\n        'module' => 'modules/{$vendor}-{$name}/',\n        'theme'  => 'themes/{$vendor}-{$name}/'\n    );\n}\n"
  },
  {
    "path": "vendor/composer/installers/src/bootstrap.php",
    "content": "<?php\n\nuse Composer\\Autoload\\ClassLoader;\n\nfunction includeIfExists(string $file): ?ClassLoader\n{\n    if (file_exists($file)) {\n        return include $file;\n    }\n\n    return null;\n}\nif ((!$loader = includeIfExists(__DIR__ . '/../vendor/autoload.php')) && (!$loader = includeIfExists(__DIR__ . '/../../../autoload.php'))) {\n    die('You must set up the project dependencies, run the following commands:'.PHP_EOL.\n        'curl -s http://getcomposer.org/installer | php'.PHP_EOL.\n        'php composer.phar install'.PHP_EOL);\n}\nreturn $loader;\n"
  },
  {
    "path": "vendor/composer/platform_check.php",
    "content": "<?php\n\n// platform_check.php @generated by Composer\n\n$issues = array();\n\nif (!(PHP_VERSION_ID >= 80000)) {\n    $issues[] = 'Your Composer dependencies require a PHP version \">= 8.0.0\". You are running ' . PHP_VERSION . '.';\n}\n\nif ($issues) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);\n        } elseif (!headers_sent()) {\n            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;\n        }\n    }\n    throw new \\RuntimeException(\n        'Composer detected issues in your platform: ' . implode(' ', $issues)\n    );\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/CHANGELOG.md",
    "content": "# Changelog\n\n## [6.11.1](https://github.com/firebase/php-jwt/compare/v6.11.0...v6.11.1) (2025-04-09)\n\n\n### Bug Fixes\n\n* update error text for consistency ([#528](https://github.com/firebase/php-jwt/issues/528)) ([c11113a](https://github.com/firebase/php-jwt/commit/c11113afa13265e016a669e75494b9203b8a7775))\n\n## [6.11.0](https://github.com/firebase/php-jwt/compare/v6.10.2...v6.11.0) (2025-01-23)\n\n\n### Features\n\n* support octet typed JWK ([#587](https://github.com/firebase/php-jwt/issues/587)) ([7cb8a26](https://github.com/firebase/php-jwt/commit/7cb8a265fa81edf2fa6ef8098f5bc5ae573c33ad))\n\n\n### Bug Fixes\n\n* refactor constructor Key to use PHP 8.0 syntax ([#577](https://github.com/firebase/php-jwt/issues/577)) ([29fa2ce](https://github.com/firebase/php-jwt/commit/29fa2ce9e0582cd397711eec1e80c05ce20fabca))\n\n## [6.10.2](https://github.com/firebase/php-jwt/compare/v6.10.1...v6.10.2) (2024-11-24)\n\n\n### Bug Fixes\n\n* Mitigate PHP8.4 deprecation warnings ([#570](https://github.com/firebase/php-jwt/issues/570)) ([76808fa](https://github.com/firebase/php-jwt/commit/76808fa227f3811aa5cdb3bf81233714b799a5b5))\n* support php 8.4 ([#583](https://github.com/firebase/php-jwt/issues/583)) ([e3d68b0](https://github.com/firebase/php-jwt/commit/e3d68b044421339443c74199edd020e03fb1887e))\n\n## [6.10.1](https://github.com/firebase/php-jwt/compare/v6.10.0...v6.10.1) (2024-05-18)\n\n\n### Bug Fixes\n\n* ensure ratelimit expiry is set every time ([#556](https://github.com/firebase/php-jwt/issues/556)) ([09cb208](https://github.com/firebase/php-jwt/commit/09cb2081c2c3bc0f61e2f2a5fbea5741f7498648))\n* ratelimit cache expiration ([#550](https://github.com/firebase/php-jwt/issues/550)) ([dda7250](https://github.com/firebase/php-jwt/commit/dda725033585ece30ff8cae8937320d7e9f18bae))\n\n## [6.10.0](https://github.com/firebase/php-jwt/compare/v6.9.0...v6.10.0) (2023-11-28)\n\n\n### Features\n\n* allow typ header override ([#546](https://github.com/firebase/php-jwt/issues/546)) ([79cb30b](https://github.com/firebase/php-jwt/commit/79cb30b729a22931b2fbd6b53f20629a83031ba9))\n\n## [6.9.0](https://github.com/firebase/php-jwt/compare/v6.8.1...v6.9.0) (2023-10-04)\n\n\n### Features\n\n* add payload to jwt exception ([#521](https://github.com/firebase/php-jwt/issues/521)) ([175edf9](https://github.com/firebase/php-jwt/commit/175edf958bb61922ec135b2333acf5622f2238a2))\n\n## [6.8.1](https://github.com/firebase/php-jwt/compare/v6.8.0...v6.8.1) (2023-07-14)\n\n\n### Bug Fixes\n\n* accept float claims but round down to ignore them ([#492](https://github.com/firebase/php-jwt/issues/492)) ([3936842](https://github.com/firebase/php-jwt/commit/39368423beeaacb3002afa7dcb75baebf204fe7e))\n* different BeforeValidException messages for nbf and iat ([#526](https://github.com/firebase/php-jwt/issues/526)) ([0a53cf2](https://github.com/firebase/php-jwt/commit/0a53cf2986e45c2bcbf1a269f313ebf56a154ee4))\n\n## [6.8.0](https://github.com/firebase/php-jwt/compare/v6.7.0...v6.8.0) (2023-06-14)\n\n\n### Features\n\n* add support for P-384 curve ([#515](https://github.com/firebase/php-jwt/issues/515)) ([5de4323](https://github.com/firebase/php-jwt/commit/5de4323f4baf4d70bca8663bd87682a69c656c3d))\n\n\n### Bug Fixes\n\n* handle invalid http responses ([#508](https://github.com/firebase/php-jwt/issues/508)) ([91c39c7](https://github.com/firebase/php-jwt/commit/91c39c72b22fc3e1191e574089552c1f2041c718))\n\n## [6.7.0](https://github.com/firebase/php-jwt/compare/v6.6.0...v6.7.0) (2023-06-14)\n\n\n### Features\n\n* add ed25519 support to JWK (public keys) ([#452](https://github.com/firebase/php-jwt/issues/452)) ([e53979a](https://github.com/firebase/php-jwt/commit/e53979abae927de916a75b9d239cfda8ce32be2a))\n\n## [6.6.0](https://github.com/firebase/php-jwt/compare/v6.5.0...v6.6.0) (2023-06-13)\n\n\n### Features\n\n* allow get headers when decoding token ([#442](https://github.com/firebase/php-jwt/issues/442)) ([fb85f47](https://github.com/firebase/php-jwt/commit/fb85f47cfaeffdd94faf8defdf07164abcdad6c3))\n\n\n### Bug Fixes\n\n* only check iat if nbf is not used ([#493](https://github.com/firebase/php-jwt/issues/493)) ([398ccd2](https://github.com/firebase/php-jwt/commit/398ccd25ea12fa84b9e4f1085d5ff448c21ec797))\n\n## [6.5.0](https://github.com/firebase/php-jwt/compare/v6.4.0...v6.5.0) (2023-05-12)\n\n\n### Bug Fixes\n\n* allow KID of '0' ([#505](https://github.com/firebase/php-jwt/issues/505)) ([9dc46a9](https://github.com/firebase/php-jwt/commit/9dc46a9c3e5801294249cfd2554c5363c9f9326a))\n\n\n### Miscellaneous Chores\n\n* drop support for PHP 7.3 ([#495](https://github.com/firebase/php-jwt/issues/495))\n\n## [6.4.0](https://github.com/firebase/php-jwt/compare/v6.3.2...v6.4.0) (2023-02-08)\n\n\n### Features\n\n* add support for W3C ES256K ([#462](https://github.com/firebase/php-jwt/issues/462)) ([213924f](https://github.com/firebase/php-jwt/commit/213924f51936291fbbca99158b11bd4ae56c2c95))\n* improve caching by only decoding jwks when necessary ([#486](https://github.com/firebase/php-jwt/issues/486)) ([78d3ed1](https://github.com/firebase/php-jwt/commit/78d3ed1073553f7d0bbffa6c2010009a0d483d5c))\n\n## [6.3.2](https://github.com/firebase/php-jwt/compare/v6.3.1...v6.3.2) (2022-11-01)\n\n\n### Bug Fixes\n\n* check kid before using as array index ([bad1b04](https://github.com/firebase/php-jwt/commit/bad1b040d0c736bbf86814c6b5ae614f517cf7bd))\n\n## [6.3.1](https://github.com/firebase/php-jwt/compare/v6.3.0...v6.3.1) (2022-11-01)\n\n\n### Bug Fixes\n\n* casing of GET for PSR compat ([#451](https://github.com/firebase/php-jwt/issues/451)) ([60b52b7](https://github.com/firebase/php-jwt/commit/60b52b71978790eafcf3b95cfbd83db0439e8d22))\n* string interpolation format for php 8.2 ([#446](https://github.com/firebase/php-jwt/issues/446)) ([2e07d8a](https://github.com/firebase/php-jwt/commit/2e07d8a1524d12b69b110ad649f17461d068b8f2))\n\n## 6.3.0 / 2022-07-15\n\n - Added ES256 support to JWK parsing ([#399](https://github.com/firebase/php-jwt/pull/399))\n - Fixed potential caching error in `CachedKeySet` by caching jwks as strings ([#435](https://github.com/firebase/php-jwt/pull/435))\n\n## 6.2.0 / 2022-05-14\n\n - Added `CachedKeySet` ([#397](https://github.com/firebase/php-jwt/pull/397))\n - Added `$defaultAlg` parameter to `JWT::parseKey` and `JWT::parseKeySet` ([#426](https://github.com/firebase/php-jwt/pull/426)).\n\n## 6.1.0 / 2022-03-23\n\n - Drop support for PHP 5.3, 5.4, 5.5, 5.6, and 7.0\n - Add parameter typing and return types where possible\n\n## 6.0.0 / 2022-01-24\n\n - **Backwards-Compatibility Breaking Changes**: See the [Release Notes](https://github.com/firebase/php-jwt/releases/tag/v6.0.0) for more information.\n - New Key object to prevent key/algorithm type confusion (#365)\n - Add JWK support (#273)\n - Add ES256 support (#256)\n - Add ES384 support (#324)\n - Add Ed25519 support (#343)\n\n## 5.0.0 / 2017-06-26\n- Support RS384 and RS512.\n  See [#117](https://github.com/firebase/php-jwt/pull/117). Thanks [@joostfaassen](https://github.com/joostfaassen)!\n- Add an example for RS256 openssl.\n  See [#125](https://github.com/firebase/php-jwt/pull/125). Thanks [@akeeman](https://github.com/akeeman)!\n- Detect invalid Base64 encoding in signature.\n  See [#162](https://github.com/firebase/php-jwt/pull/162). Thanks [@psignoret](https://github.com/psignoret)!\n- Update `JWT::verify` to handle OpenSSL errors.\n  See [#159](https://github.com/firebase/php-jwt/pull/159). Thanks [@bshaffer](https://github.com/bshaffer)!\n- Add `array` type hinting to `decode` method\n  See [#101](https://github.com/firebase/php-jwt/pull/101). Thanks [@hywak](https://github.com/hywak)!\n- Add all JSON error types.\n  See [#110](https://github.com/firebase/php-jwt/pull/110). Thanks [@gbalduzzi](https://github.com/gbalduzzi)!\n- Bugfix 'kid' not in given key list.\n  See [#129](https://github.com/firebase/php-jwt/pull/129). Thanks [@stampycode](https://github.com/stampycode)!\n- Miscellaneous cleanup, documentation and test fixes.\n  See [#107](https://github.com/firebase/php-jwt/pull/107), [#115](https://github.com/firebase/php-jwt/pull/115),\n  [#160](https://github.com/firebase/php-jwt/pull/160), [#161](https://github.com/firebase/php-jwt/pull/161), and\n  [#165](https://github.com/firebase/php-jwt/pull/165). Thanks [@akeeman](https://github.com/akeeman),\n  [@chinedufn](https://github.com/chinedufn), and [@bshaffer](https://github.com/bshaffer)!\n\n## 4.0.0 / 2016-07-17\n- Add support for late static binding. See [#88](https://github.com/firebase/php-jwt/pull/88) for details. Thanks to [@chappy84](https://github.com/chappy84)!\n- Use static `$timestamp` instead of `time()` to improve unit testing. See [#93](https://github.com/firebase/php-jwt/pull/93) for details. Thanks to [@josephmcdermott](https://github.com/josephmcdermott)!\n- Fixes to exceptions classes. See [#81](https://github.com/firebase/php-jwt/pull/81) for details. Thanks to [@Maks3w](https://github.com/Maks3w)!\n- Fixes to PHPDoc. See [#76](https://github.com/firebase/php-jwt/pull/76) for details. Thanks to [@akeeman](https://github.com/akeeman)!\n\n## 3.0.0 / 2015-07-22\n- Minimum PHP version updated from `5.2.0` to `5.3.0`.\n- Add `\\Firebase\\JWT` namespace. See\n[#59](https://github.com/firebase/php-jwt/pull/59) for details. Thanks to\n[@Dashron](https://github.com/Dashron)!\n- Require a non-empty key to decode and verify a JWT. See\n[#60](https://github.com/firebase/php-jwt/pull/60) for details. Thanks to\n[@sjones608](https://github.com/sjones608)!\n- Cleaner documentation blocks in the code. See\n[#62](https://github.com/firebase/php-jwt/pull/62) for details. Thanks to\n[@johanderuijter](https://github.com/johanderuijter)!\n\n## 2.2.0 / 2015-06-22\n- Add support for adding custom, optional JWT headers to `JWT::encode()`. See\n[#53](https://github.com/firebase/php-jwt/pull/53/files) for details. Thanks to\n[@mcocaro](https://github.com/mcocaro)!\n\n## 2.1.0 / 2015-05-20\n- Add support for adding a leeway to `JWT:decode()` that accounts for clock skew\nbetween signing and verifying entities. Thanks to [@lcabral](https://github.com/lcabral)!\n- Add support for passing an object implementing the `ArrayAccess` interface for\n`$keys` argument in `JWT::decode()`. Thanks to [@aztech-dev](https://github.com/aztech-dev)!\n\n## 2.0.0 / 2015-04-01\n- **Note**: It is strongly recommended that you update to > v2.0.0 to address\n  known security vulnerabilities in prior versions when both symmetric and\n  asymmetric keys are used together.\n- Update signature for `JWT::decode(...)` to require an array of supported\n  algorithms to use when verifying token signatures.\n"
  },
  {
    "path": "vendor/firebase/php-jwt/LICENSE",
    "content": "Copyright (c) 2011, Neuman Vong\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n\n    * Neither the name of the copyright holder nor the names of other\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/firebase/php-jwt/README.md",
    "content": "![Build Status](https://github.com/firebase/php-jwt/actions/workflows/tests.yml/badge.svg)\n[![Latest Stable Version](https://poser.pugx.org/firebase/php-jwt/v/stable)](https://packagist.org/packages/firebase/php-jwt)\n[![Total Downloads](https://poser.pugx.org/firebase/php-jwt/downloads)](https://packagist.org/packages/firebase/php-jwt)\n[![License](https://poser.pugx.org/firebase/php-jwt/license)](https://packagist.org/packages/firebase/php-jwt)\n\nPHP-JWT\n=======\nA simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to [RFC 7519](https://tools.ietf.org/html/rfc7519).\n\nInstallation\n------------\n\nUse composer to manage your dependencies and download PHP-JWT:\n\n```bash\ncomposer require firebase/php-jwt\n```\n\nOptionally, install the `paragonie/sodium_compat` package from composer if your\nphp env does not have libsodium installed:\n\n```bash\ncomposer require paragonie/sodium_compat\n```\n\nExample\n-------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$key = 'example_key';\n$payload = [\n    'iss' => 'http://example.org',\n    'aud' => 'http://example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n/**\n * IMPORTANT:\n * You must specify supported algorithms for your application. See\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n * for a list of spec-compliant algorithms.\n */\n$jwt = JWT::encode($payload, $key, 'HS256');\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'));\nprint_r($decoded);\n\n// Pass a stdClass in as the third parameter to get the decoded header values\n$headers = new stdClass();\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'), $headers);\nprint_r($headers);\n\n/*\n NOTE: This will now be an object instead of an associative array. To get\n an associative array, you will need to cast it as such:\n*/\n\n$decoded_array = (array) $decoded;\n\n/**\n * You can add a leeway to account for when there is a clock skew times between\n * the signing and verifying servers. It is recommended that this leeway should\n * not be bigger than a few minutes.\n *\n * Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef\n */\nJWT::$leeway = 60; // $leeway in seconds\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'));\n```\nExample encode/decode headers\n-------\nDecoding the JWT headers without verifying the JWT first is NOT recommended, and is not supported by\nthis library. This is because without verifying the JWT, the header values could have been tampered with.\nAny value pulled from an unverified header should be treated as if it could be any string sent in from an\nattacker.  If this is something you still want to do in your application for whatever reason, it's possible to\ndecode the header values manually simply by calling `json_decode` and `base64_decode` on the JWT\nheader part:\n```php\nuse Firebase\\JWT\\JWT;\n\n$key = 'example_key';\n$payload = [\n    'iss' => 'http://example.org',\n    'aud' => 'http://example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$headers = [\n    'x-forwarded-for' => 'www.google.com'\n];\n\n// Encode headers in the JWT string\n$jwt = JWT::encode($payload, $key, 'HS256', null, $headers);\n\n// Decode headers from the JWT string WITHOUT validation\n// **IMPORTANT**: This operation is vulnerable to attacks, as the JWT has not yet been verified.\n// These headers could be any value sent by an attacker.\nlist($headersB64, $payloadB64, $sig) = explode('.', $jwt);\n$decoded = json_decode(base64_decode($headersB64), true);\n\nprint_r($decoded);\n```\nExample with RS256 (openssl)\n----------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$privateKey = <<<EOD\n-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAuzWHNM5f+amCjQztc5QTfJfzCC5J4nuW+L/aOxZ4f8J3Frew\nM2c/dufrnmedsApb0By7WhaHlcqCh/ScAPyJhzkPYLae7bTVro3hok0zDITR8F6S\nJGL42JAEUk+ILkPI+DONM0+3vzk6Kvfe548tu4czCuqU8BGVOlnp6IqBHhAswNMM\n78pos/2z0CjPM4tbeXqSTTbNkXRboxjU29vSopcT51koWOgiTf3C7nJUoMWZHZI5\nHqnIhPAG9yv8HAgNk6CMk2CadVHDo4IxjxTzTTqo1SCSH2pooJl9O8at6kkRYsrZ\nWwsKlOFE2LUce7ObnXsYihStBUDoeBQlGG/BwQIDAQABAoIBAFtGaOqNKGwggn9k\n6yzr6GhZ6Wt2rh1Xpq8XUz514UBhPxD7dFRLpbzCrLVpzY80LbmVGJ9+1pJozyWc\nVKeCeUdNwbqkr240Oe7GTFmGjDoxU+5/HX/SJYPpC8JZ9oqgEA87iz+WQX9hVoP2\noF6EB4ckDvXmk8FMwVZW2l2/kd5mrEVbDaXKxhvUDf52iVD+sGIlTif7mBgR99/b\nc3qiCnxCMmfYUnT2eh7Vv2LhCR/G9S6C3R4lA71rEyiU3KgsGfg0d82/XWXbegJW\nh3QbWNtQLxTuIvLq5aAryV3PfaHlPgdgK0ft6ocU2de2FagFka3nfVEyC7IUsNTK\nbq6nhAECgYEA7d/0DPOIaItl/8BWKyCuAHMss47j0wlGbBSHdJIiS55akMvnAG0M\n39y22Qqfzh1at9kBFeYeFIIU82ZLF3xOcE3z6pJZ4Dyvx4BYdXH77odo9uVK9s1l\n3T3BlMcqd1hvZLMS7dviyH79jZo4CXSHiKzc7pQ2YfK5eKxKqONeXuECgYEAyXlG\nvonaus/YTb1IBei9HwaccnQ/1HRn6MvfDjb7JJDIBhNClGPt6xRlzBbSZ73c2QEC\n6Fu9h36K/HZ2qcLd2bXiNyhIV7b6tVKk+0Psoj0dL9EbhsD1OsmE1nTPyAc9XZbb\nOPYxy+dpBCUA8/1U9+uiFoCa7mIbWcSQ+39gHuECgYAz82pQfct30aH4JiBrkNqP\nnJfRq05UY70uk5k1u0ikLTRoVS/hJu/d4E1Kv4hBMqYCavFSwAwnvHUo51lVCr/y\nxQOVYlsgnwBg2MX4+GjmIkqpSVCC8D7j/73MaWb746OIYZervQ8dbKahi2HbpsiG\n8AHcVSA/agxZr38qvWV54QKBgCD5TlDE8x18AuTGQ9FjxAAd7uD0kbXNz2vUYg9L\nhFL5tyL3aAAtUrUUw4xhd9IuysRhW/53dU+FsG2dXdJu6CxHjlyEpUJl2iZu/j15\nYnMzGWHIEX8+eWRDsw/+Ujtko/B7TinGcWPz3cYl4EAOiCeDUyXnqnO1btCEUU44\nDJ1BAoGBAJuPD27ErTSVtId90+M4zFPNibFP50KprVdc8CR37BE7r8vuGgNYXmnI\nRLnGP9p3pVgFCktORuYS2J/6t84I3+A17nEoB4xvhTLeAinAW/uTQOUmNicOP4Ek\n2MsLL2kHgL8bLTmvXV4FX+PXphrDKg1XxzOYn0otuoqdAQrkK4og\n-----END RSA PRIVATE KEY-----\nEOD;\n\n$publicKey = <<<EOD\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzWHNM5f+amCjQztc5QT\nfJfzCC5J4nuW+L/aOxZ4f8J3FrewM2c/dufrnmedsApb0By7WhaHlcqCh/ScAPyJ\nhzkPYLae7bTVro3hok0zDITR8F6SJGL42JAEUk+ILkPI+DONM0+3vzk6Kvfe548t\nu4czCuqU8BGVOlnp6IqBHhAswNMM78pos/2z0CjPM4tbeXqSTTbNkXRboxjU29vS\nopcT51koWOgiTf3C7nJUoMWZHZI5HqnIhPAG9yv8HAgNk6CMk2CadVHDo4IxjxTz\nTTqo1SCSH2pooJl9O8at6kkRYsrZWwsKlOFE2LUce7ObnXsYihStBUDoeBQlGG/B\nwQIDAQAB\n-----END PUBLIC KEY-----\nEOD;\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'RS256');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));\n\n/*\n NOTE: This will now be an object instead of an associative array. To get\n an associative array, you will need to cast it as such:\n*/\n\n$decoded_array = (array) $decoded;\necho \"Decode:\\n\" . print_r($decoded_array, true) . \"\\n\";\n```\n\nExample with a passphrase\n-------------------------\n\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Your passphrase\n$passphrase = '[YOUR_PASSPHRASE]';\n\n// Your private key file with passphrase\n// Can be generated with \"ssh-keygen -t rsa -m pem\"\n$privateKeyFile = '/path/to/key-with-passphrase.pem';\n\n// Create a private key of type \"resource\"\n$privateKey = openssl_pkey_get_private(\n    file_get_contents($privateKeyFile),\n    $passphrase\n);\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'RS256');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n// Get public key from the private key, or pull from from a file.\n$publicKey = openssl_pkey_get_details($privateKey)['key'];\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));\necho \"Decode:\\n\" . print_r((array) $decoded, true) . \"\\n\";\n```\n\nExample with EdDSA (libsodium and Ed25519 signature)\n----------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Public and private keys are expected to be Base64 encoded. The last\n// non-empty line is used so that keys can be generated with\n// sodium_crypto_sign_keypair(). The secret keys generated by other tools may\n// need to be adjusted to match the input expected by libsodium.\n\n$keyPair = sodium_crypto_sign_keypair();\n\n$privateKey = base64_encode(sodium_crypto_sign_secretkey($keyPair));\n\n$publicKey = base64_encode(sodium_crypto_sign_publickey($keyPair));\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'EdDSA');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'EdDSA'));\necho \"Decode:\\n\" . print_r((array) $decoded, true) . \"\\n\";\n````\n\nExample with multiple keys\n--------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Example RSA keys from previous example\n// $privateKey1 = '...';\n// $publicKey1 = '...';\n\n// Example EdDSA keys from previous example\n// $privateKey2 = '...';\n// $publicKey2 = '...';\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt1 = JWT::encode($payload, $privateKey1, 'RS256', 'kid1');\n$jwt2 = JWT::encode($payload, $privateKey2, 'EdDSA', 'kid2');\necho \"Encode 1:\\n\" . print_r($jwt1, true) . \"\\n\";\necho \"Encode 2:\\n\" . print_r($jwt2, true) . \"\\n\";\n\n$keys = [\n    'kid1' => new Key($publicKey1, 'RS256'),\n    'kid2' => new Key($publicKey2, 'EdDSA'),\n];\n\n$decoded1 = JWT::decode($jwt1, $keys);\n$decoded2 = JWT::decode($jwt2, $keys);\n\necho \"Decode 1:\\n\" . print_r((array) $decoded1, true) . \"\\n\";\necho \"Decode 2:\\n\" . print_r((array) $decoded2, true) . \"\\n\";\n```\n\nUsing JWKs\n----------\n\n```php\nuse Firebase\\JWT\\JWK;\nuse Firebase\\JWT\\JWT;\n\n// Set of keys. The \"keys\" key is required. For example, the JSON response to\n// this endpoint: https://www.gstatic.com/iap/verify/public_key-jwk\n$jwks = ['keys' => []];\n\n// JWK::parseKeySet($jwks) returns an associative array of **kid** to Firebase\\JWT\\Key\n// objects. Pass this as the second parameter to JWT::decode.\nJWT::decode($jwt, JWK::parseKeySet($jwks));\n```\n\nUsing Cached Key Sets\n---------------------\n\nThe `CachedKeySet` class can be used to fetch and cache JWKS (JSON Web Key Sets) from a public URI.\nThis has the following advantages:\n\n1. The results are cached for performance.\n2. If an unrecognized key is requested, the cache is refreshed, to accomodate for key rotation.\n3. If rate limiting is enabled, the JWKS URI will not make more than 10 requests a second.\n\n```php\nuse Firebase\\JWT\\CachedKeySet;\nuse Firebase\\JWT\\JWT;\n\n// The URI for the JWKS you wish to cache the results from\n$jwksUri = 'https://www.gstatic.com/iap/verify/public_key-jwk';\n\n// Create an HTTP client (can be any PSR-7 compatible HTTP client)\n$httpClient = new GuzzleHttp\\Client();\n\n// Create an HTTP request factory (can be any PSR-17 compatible HTTP request factory)\n$httpFactory = new GuzzleHttp\\Psr\\HttpFactory();\n\n// Create a cache item pool (can be any PSR-6 compatible cache item pool)\n$cacheItemPool = Phpfastcache\\CacheManager::getInstance('files');\n\n$keySet = new CachedKeySet(\n    $jwksUri,\n    $httpClient,\n    $httpFactory,\n    $cacheItemPool,\n    null, // $expiresAfter int seconds to set the JWKS to expire\n    true  // $rateLimit    true to enable rate limit of 10 RPS on lookup of invalid keys\n);\n\n$jwt = 'eyJhbGci...'; // Some JWT signed by a key from the $jwkUri above\n$decoded = JWT::decode($jwt, $keySet);\n```\n\nMiscellaneous\n-------------\n\n#### Exception Handling\n\nWhen a call to `JWT::decode` is invalid, it will throw one of the following exceptions:\n\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\SignatureInvalidException;\nuse Firebase\\JWT\\BeforeValidException;\nuse Firebase\\JWT\\ExpiredException;\nuse DomainException;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\ntry {\n    $decoded = JWT::decode($jwt, $keys);\n} catch (InvalidArgumentException $e) {\n    // provided key/key-array is empty or malformed.\n} catch (DomainException $e) {\n    // provided algorithm is unsupported OR\n    // provided key is invalid OR\n    // unknown error thrown in openSSL or libsodium OR\n    // libsodium is required but not available.\n} catch (SignatureInvalidException $e) {\n    // provided JWT signature verification failed.\n} catch (BeforeValidException $e) {\n    // provided JWT is trying to be used before \"nbf\" claim OR\n    // provided JWT is trying to be used before \"iat\" claim.\n} catch (ExpiredException $e) {\n    // provided JWT is trying to be used after \"exp\" claim.\n} catch (UnexpectedValueException $e) {\n    // provided JWT is malformed OR\n    // provided JWT is missing an algorithm / using an unsupported algorithm OR\n    // provided JWT algorithm does not match provided key OR\n    // provided key ID in key/key-array is empty or invalid.\n}\n```\n\nAll exceptions in the `Firebase\\JWT` namespace extend `UnexpectedValueException`, and can be simplified\nlike this:\n\n```php\nuse Firebase\\JWT\\JWT;\nuse UnexpectedValueException;\ntry {\n    $decoded = JWT::decode($jwt, $keys);\n} catch (LogicException $e) {\n    // errors having to do with environmental setup or malformed JWT Keys\n} catch (UnexpectedValueException $e) {\n    // errors having to do with JWT signature and claims\n}\n```\n\n#### Casting to array\n\nThe return value of `JWT::decode` is the generic PHP object `stdClass`. If you'd like to handle with arrays\ninstead, you can do the following:\n\n```php\n// return type is stdClass\n$decoded = JWT::decode($jwt, $keys);\n\n// cast to array\n$decoded = json_decode(json_encode($decoded), true);\n```\n\nTests\n-----\nRun the tests using phpunit:\n\n```bash\n$ pear install PHPUnit\n$ phpunit --configuration phpunit.xml.dist\nPHPUnit 3.7.10 by Sebastian Bergmann.\n.....\nTime: 0 seconds, Memory: 2.50Mb\nOK (5 tests, 5 assertions)\n```\n\nNew Lines in private keys\n-----\n\nIf your private key contains `\\n` characters, be sure to wrap it in double quotes `\"\"`\nand not single quotes `''` in order to properly interpret the escaped characters.\n\nLicense\n-------\n[3-Clause BSD](http://opensource.org/licenses/BSD-3-Clause).\n"
  },
  {
    "path": "vendor/firebase/php-jwt/composer.json",
    "content": "{\n    \"name\": \"firebase/php-jwt\",\n    \"description\": \"A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.\",\n    \"homepage\": \"https://github.com/firebase/php-jwt\",\n    \"keywords\": [\n        \"php\",\n        \"jwt\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"Neuman Vong\",\n            \"email\": \"neuman+pear@twilio.com\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Anant Narayanan\",\n            \"email\": \"anant@php.net\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"license\": \"BSD-3-Clause\",\n    \"require\": {\n        \"php\": \"^8.0\"\n    },\n    \"suggest\": {\n        \"paragonie/sodium_compat\": \"Support EdDSA (Ed25519) signatures when libsodium is not present\",\n        \"ext-sodium\": \"Support EdDSA (Ed25519) signatures\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Firebase\\\\JWT\\\\\": \"src\"\n        }\n    },\n    \"require-dev\": {\n        \"guzzlehttp/guzzle\": \"^7.4\",\n        \"phpspec/prophecy-phpunit\": \"^2.0\",\n        \"phpunit/phpunit\": \"^9.5\",\n        \"psr/cache\": \"^2.0||^3.0\",\n        \"psr/http-client\": \"^1.0\",\n        \"psr/http-factory\": \"^1.0\"\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/BeforeValidException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass BeforeValidException extends \\UnexpectedValueException implements JWTExceptionWithPayloadInterface\n{\n    private object $payload;\n\n    public function setPayload(object $payload): void\n    {\n        $this->payload = $payload;\n    }\n\n    public function getPayload(): object\n    {\n        return $this->payload;\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/CachedKeySet.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse ArrayAccess;\nuse InvalidArgumentException;\nuse LogicException;\nuse OutOfBoundsException;\nuse Psr\\Cache\\CacheItemInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Http\\Client\\ClientInterface;\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse RuntimeException;\nuse UnexpectedValueException;\n\n/**\n * @implements ArrayAccess<string, Key>\n */\nclass CachedKeySet implements ArrayAccess\n{\n    /**\n     * @var string\n     */\n    private $jwksUri;\n    /**\n     * @var ClientInterface\n     */\n    private $httpClient;\n    /**\n     * @var RequestFactoryInterface\n     */\n    private $httpFactory;\n    /**\n     * @var CacheItemPoolInterface\n     */\n    private $cache;\n    /**\n     * @var ?int\n     */\n    private $expiresAfter;\n    /**\n     * @var ?CacheItemInterface\n     */\n    private $cacheItem;\n    /**\n     * @var array<string, array<mixed>>\n     */\n    private $keySet;\n    /**\n     * @var string\n     */\n    private $cacheKey;\n    /**\n     * @var string\n     */\n    private $cacheKeyPrefix = 'jwks';\n    /**\n     * @var int\n     */\n    private $maxKeyLength = 64;\n    /**\n     * @var bool\n     */\n    private $rateLimit;\n    /**\n     * @var string\n     */\n    private $rateLimitCacheKey;\n    /**\n     * @var int\n     */\n    private $maxCallsPerMinute = 10;\n    /**\n     * @var string|null\n     */\n    private $defaultAlg;\n\n    public function __construct(\n        string $jwksUri,\n        ClientInterface $httpClient,\n        RequestFactoryInterface $httpFactory,\n        CacheItemPoolInterface $cache,\n        ?int $expiresAfter = null,\n        bool $rateLimit = false,\n        ?string $defaultAlg = null\n    ) {\n        $this->jwksUri = $jwksUri;\n        $this->httpClient = $httpClient;\n        $this->httpFactory = $httpFactory;\n        $this->cache = $cache;\n        $this->expiresAfter = $expiresAfter;\n        $this->rateLimit = $rateLimit;\n        $this->defaultAlg = $defaultAlg;\n        $this->setCacheKeys();\n    }\n\n    /**\n     * @param string $keyId\n     * @return Key\n     */\n    public function offsetGet($keyId): Key\n    {\n        if (!$this->keyIdExists($keyId)) {\n            throw new OutOfBoundsException('Key ID not found');\n        }\n        return JWK::parseKey($this->keySet[$keyId], $this->defaultAlg);\n    }\n\n    /**\n     * @param string $keyId\n     * @return bool\n     */\n    public function offsetExists($keyId): bool\n    {\n        return $this->keyIdExists($keyId);\n    }\n\n    /**\n     * @param string $offset\n     * @param Key $value\n     */\n    public function offsetSet($offset, $value): void\n    {\n        throw new LogicException('Method not implemented');\n    }\n\n    /**\n     * @param string $offset\n     */\n    public function offsetUnset($offset): void\n    {\n        throw new LogicException('Method not implemented');\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    private function formatJwksForCache(string $jwks): array\n    {\n        $jwks = json_decode($jwks, true);\n\n        if (!isset($jwks['keys'])) {\n            throw new UnexpectedValueException('\"keys\" member must exist in the JWK Set');\n        }\n\n        if (empty($jwks['keys'])) {\n            throw new InvalidArgumentException('JWK Set did not contain any keys');\n        }\n\n        $keys = [];\n        foreach ($jwks['keys'] as $k => $v) {\n            $kid = isset($v['kid']) ? $v['kid'] : $k;\n            $keys[(string) $kid] = $v;\n        }\n\n        return $keys;\n    }\n\n    private function keyIdExists(string $keyId): bool\n    {\n        if (null === $this->keySet) {\n            $item = $this->getCacheItem();\n            // Try to load keys from cache\n            if ($item->isHit()) {\n                // item found! retrieve it\n                $this->keySet = $item->get();\n                // If the cached item is a string, the JWKS response was cached (previous behavior).\n                // Parse this into expected format array<kid, jwk> instead.\n                if (\\is_string($this->keySet)) {\n                    $this->keySet = $this->formatJwksForCache($this->keySet);\n                }\n            }\n        }\n\n        if (!isset($this->keySet[$keyId])) {\n            if ($this->rateLimitExceeded()) {\n                return false;\n            }\n            $request = $this->httpFactory->createRequest('GET', $this->jwksUri);\n            $jwksResponse = $this->httpClient->sendRequest($request);\n            if ($jwksResponse->getStatusCode() !== 200) {\n                throw new UnexpectedValueException(\n                    \\sprintf('HTTP Error: %d %s for URI \"%s\"',\n                        $jwksResponse->getStatusCode(),\n                        $jwksResponse->getReasonPhrase(),\n                        $this->jwksUri,\n                    ),\n                    $jwksResponse->getStatusCode()\n                );\n            }\n            $this->keySet = $this->formatJwksForCache((string) $jwksResponse->getBody());\n\n            if (!isset($this->keySet[$keyId])) {\n                return false;\n            }\n\n            $item = $this->getCacheItem();\n            $item->set($this->keySet);\n            if ($this->expiresAfter) {\n                $item->expiresAfter($this->expiresAfter);\n            }\n            $this->cache->save($item);\n        }\n\n        return true;\n    }\n\n    private function rateLimitExceeded(): bool\n    {\n        if (!$this->rateLimit) {\n            return false;\n        }\n\n        $cacheItem = $this->cache->getItem($this->rateLimitCacheKey);\n\n        $cacheItemData = [];\n        if ($cacheItem->isHit() && \\is_array($data = $cacheItem->get())) {\n            $cacheItemData = $data;\n        }\n\n        $callsPerMinute = $cacheItemData['callsPerMinute'] ?? 0;\n        $expiry = $cacheItemData['expiry'] ?? new \\DateTime('+60 seconds', new \\DateTimeZone('UTC'));\n\n        if (++$callsPerMinute > $this->maxCallsPerMinute) {\n            return true;\n        }\n\n        $cacheItem->set(['expiry' => $expiry, 'callsPerMinute' => $callsPerMinute]);\n        $cacheItem->expiresAt($expiry);\n        $this->cache->save($cacheItem);\n        return false;\n    }\n\n    private function getCacheItem(): CacheItemInterface\n    {\n        if (\\is_null($this->cacheItem)) {\n            $this->cacheItem = $this->cache->getItem($this->cacheKey);\n        }\n\n        return $this->cacheItem;\n    }\n\n    private function setCacheKeys(): void\n    {\n        if (empty($this->jwksUri)) {\n            throw new RuntimeException('JWKS URI is empty');\n        }\n\n        // ensure we do not have illegal characters\n        $key = preg_replace('|[^a-zA-Z0-9_\\.!]|', '', $this->jwksUri);\n\n        // add prefix\n        $key = $this->cacheKeyPrefix . $key;\n\n        // Hash keys if they exceed $maxKeyLength of 64\n        if (\\strlen($key) > $this->maxKeyLength) {\n            $key = substr(hash('sha256', $key), 0, $this->maxKeyLength);\n        }\n\n        $this->cacheKey = $key;\n\n        if ($this->rateLimit) {\n            // add prefix\n            $rateLimitKey = $this->cacheKeyPrefix . 'ratelimit' . $key;\n\n            // Hash keys if they exceed $maxKeyLength of 64\n            if (\\strlen($rateLimitKey) > $this->maxKeyLength) {\n                $rateLimitKey = substr(hash('sha256', $rateLimitKey), 0, $this->maxKeyLength);\n            }\n\n            $this->rateLimitCacheKey = $rateLimitKey;\n        }\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/ExpiredException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass ExpiredException extends \\UnexpectedValueException implements JWTExceptionWithPayloadInterface\n{\n    private object $payload;\n\n    public function setPayload(object $payload): void\n    {\n        $this->payload = $payload;\n    }\n\n    public function getPayload(): object\n    {\n        return $this->payload;\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/JWK.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse DomainException;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\n/**\n * JSON Web Key implementation, based on this spec:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n *\n * PHP version 5\n *\n * @category Authentication\n * @package  Authentication_JWT\n * @author   Bui Sy Nguyen <nguyenbs@gmail.com>\n * @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD\n * @link     https://github.com/firebase/php-jwt\n */\nclass JWK\n{\n    private const OID = '1.2.840.10045.2.1';\n    private const ASN1_OBJECT_IDENTIFIER = 0x06;\n    private const ASN1_SEQUENCE = 0x10; // also defined in JWT\n    private const ASN1_BIT_STRING = 0x03;\n    private const EC_CURVES = [\n        'P-256' => '1.2.840.10045.3.1.7', // Len: 64\n        'secp256k1' => '1.3.132.0.10', // Len: 64\n        'P-384' => '1.3.132.0.34', // Len: 96\n        // 'P-521' => '1.3.132.0.35', // Len: 132 (not supported)\n    ];\n\n    // For keys with \"kty\" equal to \"OKP\" (Octet Key Pair), the \"crv\" parameter must contain the key subtype.\n    // This library supports the following subtypes:\n    private const OKP_SUBTYPES = [\n        'Ed25519' => true, // RFC 8037\n    ];\n\n    /**\n     * Parse a set of JWK keys\n     *\n     * @param array<mixed> $jwks The JSON Web Key Set as an associative array\n     * @param string       $defaultAlg The algorithm for the Key object if \"alg\" is not set in the\n     *                                 JSON Web Key Set\n     *\n     * @return array<string, Key> An associative array of key IDs (kid) to Key objects\n     *\n     * @throws InvalidArgumentException     Provided JWK Set is empty\n     * @throws UnexpectedValueException     Provided JWK Set was invalid\n     * @throws DomainException              OpenSSL failure\n     *\n     * @uses parseKey\n     */\n    public static function parseKeySet(array $jwks, ?string $defaultAlg = null): array\n    {\n        $keys = [];\n\n        if (!isset($jwks['keys'])) {\n            throw new UnexpectedValueException('\"keys\" member must exist in the JWK Set');\n        }\n\n        if (empty($jwks['keys'])) {\n            throw new InvalidArgumentException('JWK Set did not contain any keys');\n        }\n\n        foreach ($jwks['keys'] as $k => $v) {\n            $kid = isset($v['kid']) ? $v['kid'] : $k;\n            if ($key = self::parseKey($v, $defaultAlg)) {\n                $keys[(string) $kid] = $key;\n            }\n        }\n\n        if (0 === \\count($keys)) {\n            throw new UnexpectedValueException('No supported algorithms found in JWK Set');\n        }\n\n        return $keys;\n    }\n\n    /**\n     * Parse a JWK key\n     *\n     * @param array<mixed> $jwk An individual JWK\n     * @param string       $defaultAlg The algorithm for the Key object if \"alg\" is not set in the\n     *                                 JSON Web Key Set\n     *\n     * @return Key The key object for the JWK\n     *\n     * @throws InvalidArgumentException     Provided JWK is empty\n     * @throws UnexpectedValueException     Provided JWK was invalid\n     * @throws DomainException              OpenSSL failure\n     *\n     * @uses createPemFromModulusAndExponent\n     */\n    public static function parseKey(array $jwk, ?string $defaultAlg = null): ?Key\n    {\n        if (empty($jwk)) {\n            throw new InvalidArgumentException('JWK must not be empty');\n        }\n\n        if (!isset($jwk['kty'])) {\n            throw new UnexpectedValueException('JWK must contain a \"kty\" parameter');\n        }\n\n        if (!isset($jwk['alg'])) {\n            if (\\is_null($defaultAlg)) {\n                // The \"alg\" parameter is optional in a KTY, but an algorithm is required\n                // for parsing in this library. Use the $defaultAlg parameter when parsing the\n                // key set in order to prevent this error.\n                // @see https://datatracker.ietf.org/doc/html/rfc7517#section-4.4\n                throw new UnexpectedValueException('JWK must contain an \"alg\" parameter');\n            }\n            $jwk['alg'] = $defaultAlg;\n        }\n\n        switch ($jwk['kty']) {\n            case 'RSA':\n                if (!empty($jwk['d'])) {\n                    throw new UnexpectedValueException('RSA private keys are not supported');\n                }\n                if (!isset($jwk['n']) || !isset($jwk['e'])) {\n                    throw new UnexpectedValueException('RSA keys must contain values for both \"n\" and \"e\"');\n                }\n\n                $pem = self::createPemFromModulusAndExponent($jwk['n'], $jwk['e']);\n                $publicKey = \\openssl_pkey_get_public($pem);\n                if (false === $publicKey) {\n                    throw new DomainException(\n                        'OpenSSL error: ' . \\openssl_error_string()\n                    );\n                }\n                return new Key($publicKey, $jwk['alg']);\n            case 'EC':\n                if (isset($jwk['d'])) {\n                    // The key is actually a private key\n                    throw new UnexpectedValueException('Key data must be for a public key');\n                }\n\n                if (empty($jwk['crv'])) {\n                    throw new UnexpectedValueException('crv not set');\n                }\n\n                if (!isset(self::EC_CURVES[$jwk['crv']])) {\n                    throw new DomainException('Unrecognised or unsupported EC curve');\n                }\n\n                if (empty($jwk['x']) || empty($jwk['y'])) {\n                    throw new UnexpectedValueException('x and y not set');\n                }\n\n                $publicKey = self::createPemFromCrvAndXYCoordinates($jwk['crv'], $jwk['x'], $jwk['y']);\n                return new Key($publicKey, $jwk['alg']);\n            case 'OKP':\n                if (isset($jwk['d'])) {\n                    // The key is actually a private key\n                    throw new UnexpectedValueException('Key data must be for a public key');\n                }\n\n                if (!isset($jwk['crv'])) {\n                    throw new UnexpectedValueException('crv not set');\n                }\n\n                if (empty(self::OKP_SUBTYPES[$jwk['crv']])) {\n                    throw new DomainException('Unrecognised or unsupported OKP key subtype');\n                }\n\n                if (empty($jwk['x'])) {\n                    throw new UnexpectedValueException('x not set');\n                }\n\n                // This library works internally with EdDSA keys (Ed25519) encoded in standard base64.\n                $publicKey = JWT::convertBase64urlToBase64($jwk['x']);\n                return new Key($publicKey, $jwk['alg']);\n            case 'oct':\n                if (!isset($jwk['k'])) {\n                    throw new UnexpectedValueException('k not set');\n                }\n\n                return new Key(JWT::urlsafeB64Decode($jwk['k']), $jwk['alg']);\n            default:\n                break;\n        }\n\n        return null;\n    }\n\n    /**\n     * Converts the EC JWK values to pem format.\n     *\n     * @param   string  $crv The EC curve (only P-256 & P-384 is supported)\n     * @param   string  $x   The EC x-coordinate\n     * @param   string  $y   The EC y-coordinate\n     *\n     * @return  string\n     */\n    private static function createPemFromCrvAndXYCoordinates(string $crv, string $x, string $y): string\n    {\n        $pem =\n            self::encodeDER(\n                self::ASN1_SEQUENCE,\n                self::encodeDER(\n                    self::ASN1_SEQUENCE,\n                    self::encodeDER(\n                        self::ASN1_OBJECT_IDENTIFIER,\n                        self::encodeOID(self::OID)\n                    )\n                    . self::encodeDER(\n                        self::ASN1_OBJECT_IDENTIFIER,\n                        self::encodeOID(self::EC_CURVES[$crv])\n                    )\n                ) .\n                self::encodeDER(\n                    self::ASN1_BIT_STRING,\n                    \\chr(0x00) . \\chr(0x04)\n                    . JWT::urlsafeB64Decode($x)\n                    . JWT::urlsafeB64Decode($y)\n                )\n            );\n\n        return \\sprintf(\n            \"-----BEGIN PUBLIC KEY-----\\n%s\\n-----END PUBLIC KEY-----\\n\",\n            wordwrap(base64_encode($pem), 64, \"\\n\", true)\n        );\n    }\n\n    /**\n     * Create a public key represented in PEM format from RSA modulus and exponent information\n     *\n     * @param string $n The RSA modulus encoded in Base64\n     * @param string $e The RSA exponent encoded in Base64\n     *\n     * @return string The RSA public key represented in PEM format\n     *\n     * @uses encodeLength\n     */\n    private static function createPemFromModulusAndExponent(\n        string $n,\n        string $e\n    ): string {\n        $mod = JWT::urlsafeB64Decode($n);\n        $exp = JWT::urlsafeB64Decode($e);\n\n        $modulus = \\pack('Ca*a*', 2, self::encodeLength(\\strlen($mod)), $mod);\n        $publicExponent = \\pack('Ca*a*', 2, self::encodeLength(\\strlen($exp)), $exp);\n\n        $rsaPublicKey = \\pack(\n            'Ca*a*a*',\n            48,\n            self::encodeLength(\\strlen($modulus) + \\strlen($publicExponent)),\n            $modulus,\n            $publicExponent\n        );\n\n        // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.\n        $rsaOID = \\pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA\n        $rsaPublicKey = \\chr(0) . $rsaPublicKey;\n        $rsaPublicKey = \\chr(3) . self::encodeLength(\\strlen($rsaPublicKey)) . $rsaPublicKey;\n\n        $rsaPublicKey = \\pack(\n            'Ca*a*',\n            48,\n            self::encodeLength(\\strlen($rsaOID . $rsaPublicKey)),\n            $rsaOID . $rsaPublicKey\n        );\n\n        return \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n            \\chunk_split(\\base64_encode($rsaPublicKey), 64) .\n            '-----END PUBLIC KEY-----';\n    }\n\n    /**\n     * DER-encode the length\n     *\n     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See\n     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.\n     *\n     * @param int $length\n     * @return string\n     */\n    private static function encodeLength(int $length): string\n    {\n        if ($length <= 0x7F) {\n            return \\chr($length);\n        }\n\n        $temp = \\ltrim(\\pack('N', $length), \\chr(0));\n\n        return \\pack('Ca*', 0x80 | \\strlen($temp), $temp);\n    }\n\n    /**\n     * Encodes a value into a DER object.\n     * Also defined in Firebase\\JWT\\JWT\n     *\n     * @param   int     $type DER tag\n     * @param   string  $value the value to encode\n     * @return  string  the encoded object\n     */\n    private static function encodeDER(int $type, string $value): string\n    {\n        $tag_header = 0;\n        if ($type === self::ASN1_SEQUENCE) {\n            $tag_header |= 0x20;\n        }\n\n        // Type\n        $der = \\chr($tag_header | $type);\n\n        // Length\n        $der .= \\chr(\\strlen($value));\n\n        return $der . $value;\n    }\n\n    /**\n     * Encodes a string into a DER-encoded OID.\n     *\n     * @param   string $oid the OID string\n     * @return  string the binary DER-encoded OID\n     */\n    private static function encodeOID(string $oid): string\n    {\n        $octets = explode('.', $oid);\n\n        // Get the first octet\n        $first = (int) array_shift($octets);\n        $second = (int) array_shift($octets);\n        $oid = \\chr($first * 40 + $second);\n\n        // Iterate over subsequent octets\n        foreach ($octets as $octet) {\n            if ($octet == 0) {\n                $oid .= \\chr(0x00);\n                continue;\n            }\n            $bin = '';\n\n            while ($octet) {\n                $bin .= \\chr(0x80 | ($octet & 0x7f));\n                $octet >>= 7;\n            }\n            $bin[0] = $bin[0] & \\chr(0x7f);\n\n            // Convert to big endian if necessary\n            if (pack('V', 65534) == pack('L', 65534)) {\n                $oid .= strrev($bin);\n            } else {\n                $oid .= $bin;\n            }\n        }\n\n        return $oid;\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/JWT.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse ArrayAccess;\nuse DateTime;\nuse DomainException;\nuse Exception;\nuse InvalidArgumentException;\nuse OpenSSLAsymmetricKey;\nuse OpenSSLCertificate;\nuse stdClass;\nuse UnexpectedValueException;\n\n/**\n * JSON Web Token implementation, based on this spec:\n * https://tools.ietf.org/html/rfc7519\n *\n * PHP version 5\n *\n * @category Authentication\n * @package  Authentication_JWT\n * @author   Neuman Vong <neuman@twilio.com>\n * @author   Anant Narayanan <anant@php.net>\n * @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD\n * @link     https://github.com/firebase/php-jwt\n */\nclass JWT\n{\n    private const ASN1_INTEGER = 0x02;\n    private const ASN1_SEQUENCE = 0x10;\n    private const ASN1_BIT_STRING = 0x03;\n\n    /**\n     * When checking nbf, iat or expiration times,\n     * we want to provide some extra leeway time to\n     * account for clock skew.\n     *\n     * @var int\n     */\n    public static $leeway = 0;\n\n    /**\n     * Allow the current timestamp to be specified.\n     * Useful for fixing a value within unit testing.\n     * Will default to PHP time() value if null.\n     *\n     * @var ?int\n     */\n    public static $timestamp = null;\n\n    /**\n     * @var array<string, string[]>\n     */\n    public static $supported_algs = [\n        'ES384' => ['openssl', 'SHA384'],\n        'ES256' => ['openssl', 'SHA256'],\n        'ES256K' => ['openssl', 'SHA256'],\n        'HS256' => ['hash_hmac', 'SHA256'],\n        'HS384' => ['hash_hmac', 'SHA384'],\n        'HS512' => ['hash_hmac', 'SHA512'],\n        'RS256' => ['openssl', 'SHA256'],\n        'RS384' => ['openssl', 'SHA384'],\n        'RS512' => ['openssl', 'SHA512'],\n        'EdDSA' => ['sodium_crypto', 'EdDSA'],\n    ];\n\n    /**\n     * Decodes a JWT string into a PHP object.\n     *\n     * @param string                 $jwt            The JWT\n     * @param Key|ArrayAccess<string,Key>|array<string,Key> $keyOrKeyArray  The Key or associative array of key IDs\n     *                                                                      (kid) to Key objects.\n     *                                                                      If the algorithm used is asymmetric, this is\n     *                                                                      the public key.\n     *                                                                      Each Key object contains an algorithm and\n     *                                                                      matching key.\n     *                                                                      Supported algorithms are 'ES384','ES256',\n     *                                                                      'HS256', 'HS384', 'HS512', 'RS256', 'RS384'\n     *                                                                      and 'RS512'.\n     * @param stdClass               $headers                               Optional. Populates stdClass with headers.\n     *\n     * @return stdClass The JWT's payload as a PHP object\n     *\n     * @throws InvalidArgumentException     Provided key/key-array was empty or malformed\n     * @throws DomainException              Provided JWT is malformed\n     * @throws UnexpectedValueException     Provided JWT was invalid\n     * @throws SignatureInvalidException    Provided JWT was invalid because the signature verification failed\n     * @throws BeforeValidException         Provided JWT is trying to be used before it's eligible as defined by 'nbf'\n     * @throws BeforeValidException         Provided JWT is trying to be used before it's been created as defined by 'iat'\n     * @throws ExpiredException             Provided JWT has since expired, as defined by the 'exp' claim\n     *\n     * @uses jsonDecode\n     * @uses urlsafeB64Decode\n     */\n    public static function decode(\n        string $jwt,\n        $keyOrKeyArray,\n        ?stdClass &$headers = null\n    ): stdClass {\n        // Validate JWT\n        $timestamp = \\is_null(static::$timestamp) ? \\time() : static::$timestamp;\n\n        if (empty($keyOrKeyArray)) {\n            throw new InvalidArgumentException('Key may not be empty');\n        }\n        $tks = \\explode('.', $jwt);\n        if (\\count($tks) !== 3) {\n            throw new UnexpectedValueException('Wrong number of segments');\n        }\n        list($headb64, $bodyb64, $cryptob64) = $tks;\n        $headerRaw = static::urlsafeB64Decode($headb64);\n        if (null === ($header = static::jsonDecode($headerRaw))) {\n            throw new UnexpectedValueException('Invalid header encoding');\n        }\n        if ($headers !== null) {\n            $headers = $header;\n        }\n        $payloadRaw = static::urlsafeB64Decode($bodyb64);\n        if (null === ($payload = static::jsonDecode($payloadRaw))) {\n            throw new UnexpectedValueException('Invalid claims encoding');\n        }\n        if (\\is_array($payload)) {\n            // prevent PHP Fatal Error in edge-cases when payload is empty array\n            $payload = (object) $payload;\n        }\n        if (!$payload instanceof stdClass) {\n            throw new UnexpectedValueException('Payload must be a JSON object');\n        }\n        $sig = static::urlsafeB64Decode($cryptob64);\n        if (empty($header->alg)) {\n            throw new UnexpectedValueException('Empty algorithm');\n        }\n        if (empty(static::$supported_algs[$header->alg])) {\n            throw new UnexpectedValueException('Algorithm not supported');\n        }\n\n        $key = self::getKey($keyOrKeyArray, property_exists($header, 'kid') ? $header->kid : null);\n\n        // Check the algorithm\n        if (!self::constantTimeEquals($key->getAlgorithm(), $header->alg)) {\n            // See issue #351\n            throw new UnexpectedValueException('Incorrect key for this algorithm');\n        }\n        if (\\in_array($header->alg, ['ES256', 'ES256K', 'ES384'], true)) {\n            // OpenSSL expects an ASN.1 DER sequence for ES256/ES256K/ES384 signatures\n            $sig = self::signatureToDER($sig);\n        }\n        if (!self::verify(\"{$headb64}.{$bodyb64}\", $sig, $key->getKeyMaterial(), $header->alg)) {\n            throw new SignatureInvalidException('Signature verification failed');\n        }\n\n        // Check the nbf if it is defined. This is the time that the\n        // token can actually be used. If it's not yet that time, abort.\n        if (isset($payload->nbf) && floor($payload->nbf) > ($timestamp + static::$leeway)) {\n            $ex = new BeforeValidException(\n                'Cannot handle token with nbf prior to ' . \\date(DateTime::ISO8601, (int) floor($payload->nbf))\n            );\n            $ex->setPayload($payload);\n            throw $ex;\n        }\n\n        // Check that this token has been created before 'now'. This prevents\n        // using tokens that have been created for later use (and haven't\n        // correctly used the nbf claim).\n        if (!isset($payload->nbf) && isset($payload->iat) && floor($payload->iat) > ($timestamp + static::$leeway)) {\n            $ex = new BeforeValidException(\n                'Cannot handle token with iat prior to ' . \\date(DateTime::ISO8601, (int) floor($payload->iat))\n            );\n            $ex->setPayload($payload);\n            throw $ex;\n        }\n\n        // Check if this token has expired.\n        if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) {\n            $ex = new ExpiredException('Expired token');\n            $ex->setPayload($payload);\n            throw $ex;\n        }\n\n        return $payload;\n    }\n\n    /**\n     * Converts and signs a PHP array into a JWT string.\n     *\n     * @param array<mixed>          $payload PHP array\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate $key The secret key.\n     * @param string                $alg     Supported algorithms are 'ES384','ES256', 'ES256K', 'HS256',\n     *                                       'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'\n     * @param string                $keyId\n     * @param array<string, string> $head    An array with header elements to attach\n     *\n     * @return string A signed JWT\n     *\n     * @uses jsonEncode\n     * @uses urlsafeB64Encode\n     */\n    public static function encode(\n        array $payload,\n        $key,\n        string $alg,\n        ?string $keyId = null,\n        ?array $head = null\n    ): string {\n        $header = ['typ' => 'JWT'];\n        if (isset($head)) {\n            $header = \\array_merge($header, $head);\n        }\n        $header['alg'] = $alg;\n        if ($keyId !== null) {\n            $header['kid'] = $keyId;\n        }\n        $segments = [];\n        $segments[] = static::urlsafeB64Encode((string) static::jsonEncode($header));\n        $segments[] = static::urlsafeB64Encode((string) static::jsonEncode($payload));\n        $signing_input = \\implode('.', $segments);\n\n        $signature = static::sign($signing_input, $key, $alg);\n        $segments[] = static::urlsafeB64Encode($signature);\n\n        return \\implode('.', $segments);\n    }\n\n    /**\n     * Sign a string with a given key and algorithm.\n     *\n     * @param string $msg  The message to sign\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $key  The secret key.\n     * @param string $alg  Supported algorithms are 'EdDSA', 'ES384', 'ES256', 'ES256K', 'HS256',\n     *                    'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'\n     *\n     * @return string An encrypted message\n     *\n     * @throws DomainException Unsupported algorithm or bad key was specified\n     */\n    public static function sign(\n        string $msg,\n        $key,\n        string $alg\n    ): string {\n        if (empty(static::$supported_algs[$alg])) {\n            throw new DomainException('Algorithm not supported');\n        }\n        list($function, $algorithm) = static::$supported_algs[$alg];\n        switch ($function) {\n            case 'hash_hmac':\n                if (!\\is_string($key)) {\n                    throw new InvalidArgumentException('key must be a string when using hmac');\n                }\n                return \\hash_hmac($algorithm, $msg, $key, true);\n            case 'openssl':\n                $signature = '';\n                if (!\\is_resource($key) && !openssl_pkey_get_private($key)) {\n                    throw new DomainException('OpenSSL unable to validate key');\n                }\n                $success = \\openssl_sign($msg, $signature, $key, $algorithm); // @phpstan-ignore-line\n                if (!$success) {\n                    throw new DomainException('OpenSSL unable to sign data');\n                }\n                if ($alg === 'ES256' || $alg === 'ES256K') {\n                    $signature = self::signatureFromDER($signature, 256);\n                } elseif ($alg === 'ES384') {\n                    $signature = self::signatureFromDER($signature, 384);\n                }\n                return $signature;\n            case 'sodium_crypto':\n                if (!\\function_exists('sodium_crypto_sign_detached')) {\n                    throw new DomainException('libsodium is not available');\n                }\n                if (!\\is_string($key)) {\n                    throw new InvalidArgumentException('key must be a string when using EdDSA');\n                }\n                try {\n                    // The last non-empty line is used as the key.\n                    $lines = array_filter(explode(\"\\n\", $key));\n                    $key = base64_decode((string) end($lines));\n                    if (\\strlen($key) === 0) {\n                        throw new DomainException('Key cannot be empty string');\n                    }\n                    return sodium_crypto_sign_detached($msg, $key);\n                } catch (Exception $e) {\n                    throw new DomainException($e->getMessage(), 0, $e);\n                }\n        }\n\n        throw new DomainException('Algorithm not supported');\n    }\n\n    /**\n     * Verify a signature with the message, key and method. Not all methods\n     * are symmetric, so we must have a separate verify and sign method.\n     *\n     * @param string $msg         The original message (header and body)\n     * @param string $signature   The original signature\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $keyMaterial For Ed*, ES*, HS*, a string key works. for RS*, must be an instance of OpenSSLAsymmetricKey\n     * @param string $alg         The algorithm\n     *\n     * @return bool\n     *\n     * @throws DomainException Invalid Algorithm, bad key, or OpenSSL failure\n     */\n    private static function verify(\n        string $msg,\n        string $signature,\n        $keyMaterial,\n        string $alg\n    ): bool {\n        if (empty(static::$supported_algs[$alg])) {\n            throw new DomainException('Algorithm not supported');\n        }\n\n        list($function, $algorithm) = static::$supported_algs[$alg];\n        switch ($function) {\n            case 'openssl':\n                $success = \\openssl_verify($msg, $signature, $keyMaterial, $algorithm); // @phpstan-ignore-line\n                if ($success === 1) {\n                    return true;\n                }\n                if ($success === 0) {\n                    return false;\n                }\n                // returns 1 on success, 0 on failure, -1 on error.\n                throw new DomainException(\n                    'OpenSSL error: ' . \\openssl_error_string()\n                );\n            case 'sodium_crypto':\n                if (!\\function_exists('sodium_crypto_sign_verify_detached')) {\n                    throw new DomainException('libsodium is not available');\n                }\n                if (!\\is_string($keyMaterial)) {\n                    throw new InvalidArgumentException('key must be a string when using EdDSA');\n                }\n                try {\n                    // The last non-empty line is used as the key.\n                    $lines = array_filter(explode(\"\\n\", $keyMaterial));\n                    $key = base64_decode((string) end($lines));\n                    if (\\strlen($key) === 0) {\n                        throw new DomainException('Key cannot be empty string');\n                    }\n                    if (\\strlen($signature) === 0) {\n                        throw new DomainException('Signature cannot be empty string');\n                    }\n                    return sodium_crypto_sign_verify_detached($signature, $msg, $key);\n                } catch (Exception $e) {\n                    throw new DomainException($e->getMessage(), 0, $e);\n                }\n            case 'hash_hmac':\n            default:\n                if (!\\is_string($keyMaterial)) {\n                    throw new InvalidArgumentException('key must be a string when using hmac');\n                }\n                $hash = \\hash_hmac($algorithm, $msg, $keyMaterial, true);\n                return self::constantTimeEquals($hash, $signature);\n        }\n    }\n\n    /**\n     * Decode a JSON string into a PHP object.\n     *\n     * @param string $input JSON string\n     *\n     * @return mixed The decoded JSON string\n     *\n     * @throws DomainException Provided string was invalid JSON\n     */\n    public static function jsonDecode(string $input)\n    {\n        $obj = \\json_decode($input, false, 512, JSON_BIGINT_AS_STRING);\n\n        if ($errno = \\json_last_error()) {\n            self::handleJsonError($errno);\n        } elseif ($obj === null && $input !== 'null') {\n            throw new DomainException('Null result with non-null input');\n        }\n        return $obj;\n    }\n\n    /**\n     * Encode a PHP array into a JSON string.\n     *\n     * @param array<mixed> $input A PHP array\n     *\n     * @return string JSON representation of the PHP array\n     *\n     * @throws DomainException Provided object could not be encoded to valid JSON\n     */\n    public static function jsonEncode(array $input): string\n    {\n        $json = \\json_encode($input, \\JSON_UNESCAPED_SLASHES);\n        if ($errno = \\json_last_error()) {\n            self::handleJsonError($errno);\n        } elseif ($json === 'null') {\n            throw new DomainException('Null result with non-null input');\n        }\n        if ($json === false) {\n            throw new DomainException('Provided object could not be encoded to valid JSON');\n        }\n        return $json;\n    }\n\n    /**\n     * Decode a string with URL-safe Base64.\n     *\n     * @param string $input A Base64 encoded string\n     *\n     * @return string A decoded string\n     *\n     * @throws InvalidArgumentException invalid base64 characters\n     */\n    public static function urlsafeB64Decode(string $input): string\n    {\n        return \\base64_decode(self::convertBase64UrlToBase64($input));\n    }\n\n    /**\n     * Convert a string in the base64url (URL-safe Base64) encoding to standard base64.\n     *\n     * @param string $input A Base64 encoded string with URL-safe characters (-_ and no padding)\n     *\n     * @return string A Base64 encoded string with standard characters (+/) and padding (=), when\n     * needed.\n     *\n     * @see https://www.rfc-editor.org/rfc/rfc4648\n     */\n    public static function convertBase64UrlToBase64(string $input): string\n    {\n        $remainder = \\strlen($input) % 4;\n        if ($remainder) {\n            $padlen = 4 - $remainder;\n            $input .= \\str_repeat('=', $padlen);\n        }\n        return \\strtr($input, '-_', '+/');\n    }\n\n    /**\n     * Encode a string with URL-safe Base64.\n     *\n     * @param string $input The string you want encoded\n     *\n     * @return string The base64 encode of what you passed in\n     */\n    public static function urlsafeB64Encode(string $input): string\n    {\n        return \\str_replace('=', '', \\strtr(\\base64_encode($input), '+/', '-_'));\n    }\n\n\n    /**\n     * Determine if an algorithm has been provided for each Key\n     *\n     * @param Key|ArrayAccess<string,Key>|array<string,Key> $keyOrKeyArray\n     * @param string|null            $kid\n     *\n     * @throws UnexpectedValueException\n     *\n     * @return Key\n     */\n    private static function getKey(\n        $keyOrKeyArray,\n        ?string $kid\n    ): Key {\n        if ($keyOrKeyArray instanceof Key) {\n            return $keyOrKeyArray;\n        }\n\n        if (empty($kid) && $kid !== '0') {\n            throw new UnexpectedValueException('\"kid\" empty, unable to lookup correct key');\n        }\n\n        if ($keyOrKeyArray instanceof CachedKeySet) {\n            // Skip \"isset\" check, as this will automatically refresh if not set\n            return $keyOrKeyArray[$kid];\n        }\n\n        if (!isset($keyOrKeyArray[$kid])) {\n            throw new UnexpectedValueException('\"kid\" invalid, unable to lookup correct key');\n        }\n\n        return $keyOrKeyArray[$kid];\n    }\n\n    /**\n     * @param string $left  The string of known length to compare against\n     * @param string $right The user-supplied string\n     * @return bool\n     */\n    public static function constantTimeEquals(string $left, string $right): bool\n    {\n        if (\\function_exists('hash_equals')) {\n            return \\hash_equals($left, $right);\n        }\n        $len = \\min(self::safeStrlen($left), self::safeStrlen($right));\n\n        $status = 0;\n        for ($i = 0; $i < $len; $i++) {\n            $status |= (\\ord($left[$i]) ^ \\ord($right[$i]));\n        }\n        $status |= (self::safeStrlen($left) ^ self::safeStrlen($right));\n\n        return ($status === 0);\n    }\n\n    /**\n     * Helper method to create a JSON error.\n     *\n     * @param int $errno An error number from json_last_error()\n     *\n     * @throws DomainException\n     *\n     * @return void\n     */\n    private static function handleJsonError(int $errno): void\n    {\n        $messages = [\n            JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',\n            JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',\n            JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',\n            JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',\n            JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3\n        ];\n        throw new DomainException(\n            isset($messages[$errno])\n            ? $messages[$errno]\n            : 'Unknown JSON error: ' . $errno\n        );\n    }\n\n    /**\n     * Get the number of bytes in cryptographic strings.\n     *\n     * @param string $str\n     *\n     * @return int\n     */\n    private static function safeStrlen(string $str): int\n    {\n        if (\\function_exists('mb_strlen')) {\n            return \\mb_strlen($str, '8bit');\n        }\n        return \\strlen($str);\n    }\n\n    /**\n     * Convert an ECDSA signature to an ASN.1 DER sequence\n     *\n     * @param   string $sig The ECDSA signature to convert\n     * @return  string The encoded DER object\n     */\n    private static function signatureToDER(string $sig): string\n    {\n        // Separate the signature into r-value and s-value\n        $length = max(1, (int) (\\strlen($sig) / 2));\n        list($r, $s) = \\str_split($sig, $length);\n\n        // Trim leading zeros\n        $r = \\ltrim($r, \"\\x00\");\n        $s = \\ltrim($s, \"\\x00\");\n\n        // Convert r-value and s-value from unsigned big-endian integers to\n        // signed two's complement\n        if (\\ord($r[0]) > 0x7f) {\n            $r = \"\\x00\" . $r;\n        }\n        if (\\ord($s[0]) > 0x7f) {\n            $s = \"\\x00\" . $s;\n        }\n\n        return self::encodeDER(\n            self::ASN1_SEQUENCE,\n            self::encodeDER(self::ASN1_INTEGER, $r) .\n            self::encodeDER(self::ASN1_INTEGER, $s)\n        );\n    }\n\n    /**\n     * Encodes a value into a DER object.\n     *\n     * @param   int     $type DER tag\n     * @param   string  $value the value to encode\n     *\n     * @return  string  the encoded object\n     */\n    private static function encodeDER(int $type, string $value): string\n    {\n        $tag_header = 0;\n        if ($type === self::ASN1_SEQUENCE) {\n            $tag_header |= 0x20;\n        }\n\n        // Type\n        $der = \\chr($tag_header | $type);\n\n        // Length\n        $der .= \\chr(\\strlen($value));\n\n        return $der . $value;\n    }\n\n    /**\n     * Encodes signature from a DER object.\n     *\n     * @param   string  $der binary signature in DER format\n     * @param   int     $keySize the number of bits in the key\n     *\n     * @return  string  the signature\n     */\n    private static function signatureFromDER(string $der, int $keySize): string\n    {\n        // OpenSSL returns the ECDSA signatures as a binary ASN.1 DER SEQUENCE\n        list($offset, $_) = self::readDER($der);\n        list($offset, $r) = self::readDER($der, $offset);\n        list($offset, $s) = self::readDER($der, $offset);\n\n        // Convert r-value and s-value from signed two's compliment to unsigned\n        // big-endian integers\n        $r = \\ltrim($r, \"\\x00\");\n        $s = \\ltrim($s, \"\\x00\");\n\n        // Pad out r and s so that they are $keySize bits long\n        $r = \\str_pad($r, $keySize / 8, \"\\x00\", STR_PAD_LEFT);\n        $s = \\str_pad($s, $keySize / 8, \"\\x00\", STR_PAD_LEFT);\n\n        return $r . $s;\n    }\n\n    /**\n     * Reads binary DER-encoded data and decodes into a single object\n     *\n     * @param string $der the binary data in DER format\n     * @param int $offset the offset of the data stream containing the object\n     * to decode\n     *\n     * @return array{int, string|null} the new offset and the decoded object\n     */\n    private static function readDER(string $der, int $offset = 0): array\n    {\n        $pos = $offset;\n        $size = \\strlen($der);\n        $constructed = (\\ord($der[$pos]) >> 5) & 0x01;\n        $type = \\ord($der[$pos++]) & 0x1f;\n\n        // Length\n        $len = \\ord($der[$pos++]);\n        if ($len & 0x80) {\n            $n = $len & 0x1f;\n            $len = 0;\n            while ($n-- && $pos < $size) {\n                $len = ($len << 8) | \\ord($der[$pos++]);\n            }\n        }\n\n        // Value\n        if ($type === self::ASN1_BIT_STRING) {\n            $pos++; // Skip the first contents octet (padding indicator)\n            $data = \\substr($der, $pos, $len - 1);\n            $pos += $len - 1;\n        } elseif (!$constructed) {\n            $data = \\substr($der, $pos, $len);\n            $pos += $len;\n        } else {\n            $data = null;\n        }\n\n        return [$pos, $data];\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/JWTExceptionWithPayloadInterface.php",
    "content": "<?php\nnamespace Firebase\\JWT;\n\ninterface JWTExceptionWithPayloadInterface\n{\n    /**\n     * Get the payload that caused this exception.\n     *\n     * @return object\n     */\n    public function getPayload(): object;\n\n    /**\n     * Get the payload that caused this exception.\n     *\n     * @param object $payload\n     * @return void\n     */\n    public function setPayload(object $payload): void;\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/Key.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse InvalidArgumentException;\nuse OpenSSLAsymmetricKey;\nuse OpenSSLCertificate;\nuse TypeError;\n\nclass Key\n{\n    /**\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate $keyMaterial\n     * @param string $algorithm\n     */\n    public function __construct(\n        private $keyMaterial,\n        private string $algorithm\n    ) {\n        if (\n            !\\is_string($keyMaterial)\n            && !$keyMaterial instanceof OpenSSLAsymmetricKey\n            && !$keyMaterial instanceof OpenSSLCertificate\n            && !\\is_resource($keyMaterial)\n        ) {\n            throw new TypeError('Key material must be a string, resource, or OpenSSLAsymmetricKey');\n        }\n\n        if (empty($keyMaterial)) {\n            throw new InvalidArgumentException('Key material must not be empty');\n        }\n\n        if (empty($algorithm)) {\n            throw new InvalidArgumentException('Algorithm must not be empty');\n        }\n    }\n\n    /**\n     * Return the algorithm valid for this key\n     *\n     * @return string\n     */\n    public function getAlgorithm(): string\n    {\n        return $this->algorithm;\n    }\n\n    /**\n     * @return string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate\n     */\n    public function getKeyMaterial()\n    {\n        return $this->keyMaterial;\n    }\n}\n"
  },
  {
    "path": "vendor/firebase/php-jwt/src/SignatureInvalidException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass SignatureInvalidException extends \\UnexpectedValueException\n{\n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/.gitignore",
    "content": "temp\nnode_modules\nnpm-debug.log\n\nwp-test-config.php\n\n.svn\n.idea\n.idea/workspace.xml\n.DS_Store\n.dynamic\n.Trashes\n*.sublime-project\n*.sublime-workspace\n._*\n\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/.scrutinizer.yml",
    "content": "filter:\n    excluded_paths: [static/*, test/*, vendor/*, node_modules/*]\n\ntools:\n    php_analyzer: true\n    php_sim: true\n    php_pdepend: true\n    external_code_coverage: true"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/changes.md",
    "content": "### 1.2.5\n\n* Fix text domain initialization to prevent PHP notices.\n\n### 1.2.4\n\n* Require user to be logged in while dismissing Admin Panel notices.\n\n### 1.2.3\n\n* Improve security while processing AJAX requests in Admin Panel.\n\n### 1.2.2\n\n* Remove dependency from `udx/lib-utility`.\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/composer.json",
    "content": "{\n  \"name\": \"udx/lib-ud-api-client\",\n  \"description\": \"UD API Client for WooCommerce API Manager\",\n  \"type\": \"library\",\n  \"minimum-stability\": \"dev\",\n  \"repositories\": [\n    {\n      \"type\": \"git\",\n      \"url\": \"https://github.com/udx/lib-ud-api-client\"\n    }\n  ],\n  \"homepage\": \"https://github.com/udx/lib-ud-api-client\",\n  \"keywords\": [\n    \"wordpress\",\n    \"plugins\",\n    \"api\",\n    \"client\",\n    \"licenses\"\n  ],\n  \"license\": \"GPLv2\",\n  \"authors\": [\n    {\n      \"name\": \"UsabilityDynamics, Inc.\",\n      \"homepage\": \"https://www.usabilitydynamics.com\"\n    }\n  ],\n  \"require\": {\n    \"php\": \">=5.3\"\n  },\n  \"autoload\": {\n    \"classmap\": [ \"lib/classes\" ]\n  }\n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/gruntfile.js",
    "content": "/**\n * Build Plugin.\n *\n * @author potanin@UD\n * @version 1.2.5\n * @param grunt\n */\nmodule.exports = function( grunt ) {\n\n  // Automatically Load Tasks.\n  require( 'load-grunt-tasks' )( grunt, {\n    pattern: 'grunt-*',\n    config: './package.json',\n    scope: 'devDependencies'\n  });\n\n  // Build Configuration.\n  grunt.initConfig({\n\n    // Get Package.\n    package: grunt.file.readJSON( 'composer.json' ),\n\n    // Compile Core and Template Styles.\n    less: {\n      production: {\n        options: {\n          yuicompress: true,\n          relativeUrls: true\n        },\n        files: {\n          'static/css/admin.css': [ 'static/css/src/admin.less' ]\n        }\n      },\n      development: {\n        options: {\n          yuicompress: false,\n          relativeUrls: true\n        },\n        files: {\n          'static/css/wpp.admin.dev.css': [ 'static/css/src/wpp.admin.less' ]\n        }\n      }\n    },\n\n    // Generate YUIDoc documentation.\n    yuidoc: {\n      compile: {\n        name: '<%= package.name %>',\n        description: '<%= package.description %>',\n        version: '<%= package.version %>',\n        url: '<%= package.homepage %>',\n        options: {\n          extension: '.js,.php',\n          outdir: 'static/codex/',\n          \"paths\": [\n            \"./lib\",\n            \"./static/js\"\n          ]\n        }\n      }\n    },\n\n    // Watch for Development.\n    watch: {\n      options: {\n        interval: 100,\n        debounceDelay: 500\n      },\n      less: {\n        files: [ 'static/css/src/*.less' ],\n        tasks: [ 'less:production' ]\n      },\n      js: {\n        files: [ 'static/js/src/*' ],\n        tasks: [ 'uglify:production' ]\n      }\n    },\n\n    // Minify Core and Template Scripts.\n    uglify: {\n      production: {\n        options: {\n          mangle: false,\n          beautify: false\n        },\n        files: [\n          {\n            expand: true,\n            cwd: 'static/js/src',\n            src: [ '*.js' ],\n            dest: 'static/js'\n          }\n        ]\n      },\n      development: {\n        options: {\n          mangle: false,\n          beautify: true\n        },\n        files: [\n          {\n            expand: true,\n            cwd: 'static/js/src',\n            src: [ '*.js' ],\n            dest: 'static/js'\n          }\n        ]\n      }\n    },\n\n    // Generate Markdown Documentation.\n    markdown: {\n      all: {\n        files: [\n          {\n            expand: true,\n            src: 'readme.md',\n            dest: 'static/',\n            ext: '.html'\n          }\n        ],\n        options: {\n          markdownOptions: {\n            gfm: true,\n            codeLines: {\n              before: '<span>',\n              after: '</span>'\n            }\n          }\n        }\n      }\n    },\n\n    // Clean Directories.\n    clean: {\n      all: [\n        \"vendor\",\n        \"composer.lock\"\n      ]\n    },\n\n    shell: {\n      install: {\n        command: 'composer install',\n        options: {\n          stdout: true\n        }\n      },\n      update: {\n        command: 'composer update',\n        options: {\n          stdout: true\n        }\n      }\n    }\n\n  });\n\n  // Register NPM Tasks.\n  grunt.registerTask( 'default', [ 'markdown', 'less:production', 'yuidoc', 'uglify:production' ] );\n\n  // Install Library.\n  grunt.registerTask( 'install', [ 'markdown', 'less:production', 'yuidoc', 'uglify:production' ] );\n\n  // Prepare for Distribution.\n  grunt.registerTask( 'make-distribution', [ 'markdown', 'less:production', 'yuidoc', 'uglify:production' ] );\n\n};\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-admin.php",
    "content": "<?php\n/**\n * Licenses Admin\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Admin' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Admin extends Scaffold {\n    \n      /**\n       *\n       */\n      public static $version = '1.0.0';\n      \n      /**\n       *\n       */\n      private $api_url;\n      \n      /**\n       * Don't ever change this, as it will mess with the data stored of which products are activated, etc.\n       *\n       */\n      private $token;\n      \n      /**\n       *\n       */\n      private $api;\n\n      /**\n       *\n       */\n      public $error;\n\n      /**\n       *\n       */\n      public $ui;\n      \n      /**\n       *\n       */\n      private $installed_products = array();\n      \n      /**\n       *\n       */\n      private $pending_products = array();\n      \n      /**\n       *\n       */\n      private $more_products = array();\n      \n      /**\n       *\n       */\n      public function __construct( $args = array() ) {\n        parent::__construct( $args );\n        \n        //echo \"<pre>\"; print_r( $args ); echo \"</pre>\"; die();\n        \n        //** Set UD API URL. Can be defined custom one in wp-config.php */\n        $this->api_url = defined( 'UD_API_URL' ) ? trailingslashit( UD_API_URL ) : 'https://www.usabilitydynamics.com/';\n        \n        //** Don't ever change this, as it will mess with the data stored of which products are activated, etc. */\n        $this->token = 'udl_' . $this->slug;\n        \n        //** API */\n        $this->api = new API( array_merge( $args, array(\n          'api_url' => $this->api_url,\n          'token' => $this->token,\n        ) ) );\n        \n        //** Set available screens */\n        add_action('init', function () use ($args) {\n          $screens = array();\n          if( $this->type == 'theme' ) {\n            $screens =array_filter( array(\n              'licenses' => __( 'License', $this->domain ),\n              'more_products' => false,\n            ) );\n          } elseif ( $this->type == 'plugin' ) {\n            $screens =array_filter( array(\n              'licenses' => __( 'Licenses', $this->domain ),\n              'more_products' => __( 'More Products', $this->domain ),\n            ) );\n          }\n          \n          // Initialize UI\n          $this->ui = new UI( array_merge( $args, array(\n            'token' => $this->token,\n            'screens' => $screens,\n          ) ) );\n        }, 20);\n\n        $path = wp_normalize_path( dirname( dirname( __DIR__ ) ) );\n        $this->screens_path = trailingslashit( $path . '/static/templates' );\n        if( $this->type == 'theme' && strpos( $path, wp_normalize_path( WP_PLUGIN_DIR ) ) === false ) {\n          $root_path = wp_normalize_path( get_template_directory() );\n          $this->assets_url = trailingslashit( get_template_directory_uri() . str_replace( $root_path, '', $path ) . '/static' );\n        } else {\n          $this->assets_url = trailingslashit( plugin_dir_url( dirname( dirname( __DIR__ ) ) . '/readme.md' ) . 'static' );\n        }\n        \n        //** Load the updaters. */\n        add_action( 'admin_init', array( $this, 'load_updater_instances' ) );\n        \n        //** Ensure keys are actually active on specific screens */\n        add_action( 'current_screen', array( $this, 'current_screen' ) );\n        \n        if( $this->type == 'plugin' ) {\n          //** Check Activation Statuses */\n          add_action( 'plugins_loaded', array( $this, 'check_activation_status' ), 11 );\n        } \n        elseif( $this->type == 'theme' ) {\n          $this->check_activation_status();\n        }\n        \n        //** Add Licenses page */\n        add_action( 'admin_menu', array( $this, 'register_licenses_screen' ), 999 );\n        \n        //** Admin Notices Filter */\n        add_filter( 'ud:errors:admin_notices', array( $this, 'maybe_remove_notices' ) );\n        add_filter( 'ud:messages:admin_notices', array( $this, 'maybe_remove_notices' ) );\n        add_filter( 'ud:warnings:admin_notices', array( $this, 'maybe_remove_notices' ) );\n\n        /**\n         * May be add additional information about available add-ons\n         * for legacy users ( who purchased any deprecated premium feature )\n         */\n        add_action( 'ud::bootstrap::upgrade_notice::additional_info', array( $this, 'maybe_add_info_to_upgrade_notice' ), 10, 2 );\n\n      }\n      \n      /**\n       * Register the admin screen.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      public function register_licenses_screen () {\n        $args = $this->args;\n        $screen = !empty( $args[ 'screen' ] ) ? $args[ 'screen' ] : false;\n        $this->screen_type = !empty( $screen[ 'parent' ] ) ? 'submenu' : 'menu';\n        $this->icon_url = !empty( $screen[ 'icon_url' ] ) ? $screen[ 'icon_url' ] : '';\n        $this->position = !empty( $screen[ 'position' ] ) ? $screen[ 'position' ] : 66;\n        $this->menu_title = !empty( $screen[ 'menu_title' ] ) ? $screen[ 'menu_title' ] : __( 'Licenses', $this->domain );\n        $this->page_title = !empty( $screen[ 'page_title' ] ) ? $screen[ 'page_title' ] : __( 'Licenses', $this->domain );\n        $this->menu_slug = $this->slug . '_' . sanitize_key( $this->page_title );\n        \n        switch( $this->screen_type ) {\n          case 'menu':\n            global $menu;\n            $this->hook = add_menu_page( $this->page_title, $this->menu_title, 'manage_options', $this->menu_slug, array( $this, 'settings_screen' ), $this->icon_url, $this->position );\n            break;\n          case 'submenu':\n            global $submenu;\n            $this->hook = add_submenu_page( $screen[ 'parent' ], $this->page_title, $this->menu_title, 'manage_options', $this->menu_slug, array( $this, 'settings_screen' ) );\n            break;\n        }\n        \n        //** Set url for licenses page */\n        $licenses_link = isset( $screen[ 'parent' ] ) && ( strpos( $screen[ 'parent' ], '?' ) !== false || strpos( $screen[ 'parent' ], '.php' ) !== false ) ? $screen[ 'parent' ] : 'admin.php';\n        $licenses_link = add_query_arg( array(\n          'page' => $this->menu_slug,\n        ), admin_url( $licenses_link ) );\n        \n        update_option( $this->token . '-url', $licenses_link );\n        \n        add_action( 'load-' . $this->hook, array( $this, 'process_request' ) );\n        add_action( 'admin_print_styles-' . $this->hook, array( $this, 'enqueue_styles' ) );\n        add_action( 'admin_print_scripts-' . $this->hook, array( $this, 'enqueue_scripts' ) );\n      }\n      \n      /**\n       * Ensure licenses keys are actually active on 'Installed Plugins' page\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      public function current_screen ( $screen ) {\n        switch( $screen->id ) {\n          case 'plugins':\n            //** Check licenses keys once per 12 hours */\n            if ( false === ( $e = get_transient( $this->token . '_ping' ) ) ) {\n              $this->ensure_keys_are_actually_active();\n              set_transient( $this->token . '_ping', time(), 12 * HOUR_IN_SECONDS );\n            }\n            break;\n        }\n      }\n      \n      /**\n       * Load the main management screen.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      public function settings_screen () {\n        \n        $this->ui->get_header();\n\n        $screen = $this->ui->get_current_screen();\n\n        switch ( $screen ) {\n          //** Products screen. */\n          case 'more_products':\n            $this->more_products = $this->get_more_products();\n            require_once( $this->screens_path . 'screen-more.php' );\n            break;\n          //** Licenses screen. */\n          case 'licenses':\n          default:\n            $this->ensure_keys_are_actually_active();\n            $this->installed_products = $this->get_detected_products();\n            $this->pending_products = $this->get_pending_products();\n            require_once( $this->screens_path . 'screen-manage-' . $this->type . '.php' );\n          break;\n        }\n\n        $this->ui->get_footer();\n      }\n      \n      /**\n       * Process the action for the admin screen.\n       * @since  1.0.0\n       * @return  void\n       */\n      public function process_request () {\n      \n        add_action( 'admin_notices', array( $this, 'admin_notices' ) );\n      \n        $supported_actions = array( 'activate-products', 'deactivate-product' );\n        if ( !isset( $_REQUEST['action'] ) || !in_array( $_REQUEST['action'], $supported_actions ) || !check_admin_referer( 'bulk-' . 'licenses' ) ) {\n          return null;\n        }\n        \n        $response = false;\n        $status = 'false';\n        $type = $_REQUEST['action'];\n\n        switch ( $type ) {\n          case 'activate-products':\n            $products = array();\n            if ( isset( $_POST[ 'products' ] ) && 0 < count( $_POST[ 'products' ] ) ) {\n              foreach ( $_POST[ 'products' ] as $k => $v ) {\n                if ( !empty( $v[ 'license_key' ] ) ) {\n                  $products[$k] = $v;\n                }\n              }\n            }\n            if ( 0 < count( $products ) ) {\n              //echo \"<pre>\"; print_r( $products ); echo \"</pre>\"; die();\n              $response = $this->activate_products( $products );\n            } else {\n              $response = false;\n              $type = 'no-license-keys';\n            }\n          break;\n\n          case 'deactivate-product':\n            if ( isset( $_GET['filepath'] ) && ( '' != $_GET['filepath'] ) ) {\n              $response = $this->deactivate_product( $_GET['filepath'] );\n            }\n          break;\n\n          default:\n          break;\n        }\n\n        if ( $response == true ) {\n          $status = 'true';\n        }\n        \n        $redirect_url = Utility::current_url( array( 'type' => urlencode( $type ), 'status' => urlencode( $status ) ), array( 'action', 'filepath', '_wpnonce' ) );\n        wp_safe_redirect( $redirect_url );\n        exit;\n      }\n      \n      /**\n       * Enqueue admin styles.\n       * @access  public\n       * @since   1.0.0\n       * @return  void\n       */\n      public function enqueue_styles () {\n        wp_enqueue_style( 'lib-ud-api-client-admin', esc_url( $this->assets_url . 'css/admin.css' ), array(), '1.0.0', 'all' );\n      }\n      \n      /**\n       * Enqueue admin scripts.\n       *\n       * @access  public\n       * @since   1.0.0\n       * @return  void\n       */\n      public function enqueue_scripts () {\n        wp_enqueue_script( 'post' );\n      }\n      \n      /**\n       * Run checks against the API to ensure the product keys are actually active on UsabilityDynamics. If not, deactivate them locally as well.\n       *\n       * @access public\n       * @since  1.0.0\n       * @return void\n       */\n      public function ensure_keys_are_actually_active () {\n        $already_active = (array)$this->get_activated_products();\n        $products = $this->get_detected_products();\n        if ( 0 < count( $already_active ) ) {\n          foreach ( $already_active as $k => $v ) {\n            //** Only look through activated plugins */\n            if( !array_key_exists( $k, $products ) ) {\n              continue;\n            }\n            $deactivate = true;\n            \n            if ( !empty( $already_active[ $k ][2] ) ) {\n              //** Get license and activation email  */\n              $data = base64_decode( $already_active[ $k ][2] );\n              $data = explode( '::', $data );\n              $license_key = isset( $data[0] ) ? trim( $data[0] ) : '';\n              $activation_email = isset( $data[1] ) ? trim( $data[1] ) : '';\n\n              //** Do request */\n              $response = $this->api->status( array(\n                'product_id' \t=> $already_active[ $k ][0],\n                'instance' \t\t=> $already_active[ $k ][1],\n                'email'       => trim($activation_email),\n                'licence_key' => trim($license_key),\n              ), false, false );\n              \n              //** Do not deactivate if cannot reach UD */\n              if ( $response === false ) {\n                continue;\n              }\n              if( is_array( $response ) && !empty( $response[ 'status_check' ] ) && $response[ 'status_check' ] == 'active' ) {\n                $deactivate = false;\n              }\n            }\n            if( $deactivate ) {\n              $this->deactivate_product( $k, true );\n            }\n          }\n        }\n      }\n      \n      /**\n       * Activate a given array of products.\n       *\n       * @since    1.0.0\n       * @param    array   $products  Array of products ( filepath => key )\n       * @return boolean\n       */\n      protected function activate_products ( $products ) {\n        $response = true;\n        $errors = false;\n        //** Get out if we have incorrect data. */\n        if ( !is_array( $products ) || ( 0 >= count( $products ) ) ) { \n          return false; \n        }\n        $key = $this->token . '-activated';\n        $has_update = false;\n        $already_active = $this->get_activated_products();\n        $product_keys = $this->get_detected_products();\n        foreach ( $products as $k => $v ) {\n          //echo \"<pre>\"; print_r( $product_keys[ $k ] ); echo \"</pre>\"; die();\n          if( empty( $product_keys[ $k ] ) ) {\n            continue;\n          }\n          //** Perform API \"activation\" request. */\n          $activate = $this->api->activate( array(\n            'product_id'        => $product_keys[ $k ][ 'product_id' ],\n            'instance'          => $product_keys[ $k ][ 'instance_key' ],\n            'software_version'  => $product_keys[ $k ][ 'product_version' ],\n            'licence_key'       => trim($v[ 'license_key' ]),\n            'email'             => trim($v[ 'activation_email' ]),\n          ), $product_keys[ $k ] );\n          if ( false !== $activate && empty( $activate[ 'error' ] ) ) {\n            // key: base file, 0: product id, 1: instance_key, 2: hashed license and mail.\n            $hash = base64_encode( $v[ 'license_key' ] . '::' . $v[ 'activation_email' ] );\n            $already_active[$k] = array( $product_keys[$k]['product_id'], $product_keys[$k]['instance_key'], $hash );\n            $has_update = true;\n          } else {\n            $errors = true;\n          }\n        }\n\n        //** Store the error log. */\n        $this->api->store_error_log();\n\n        if ( $has_update && !update_option( $key, $already_active ) ) {\n          $response = false;\n        } elseif( $errors ) {\n          $response = false;\n        }\n        \n        return $response;\n      }\n      \n      /**\n       * Deactivate a given product key.\n       *\n       * @since    1.0.0\n       * @param    string $filename File name of the to deactivate plugin licence\n       * @param    bool $local_only Deactivate the product locally without pinging UsabilityDynamics.\n       * @return   boolean          Whether or not the deactivation was successful.\n       */\n      protected function deactivate_product ( $filename, $local_only = false ) {\n        $response = false;\n        $already_active = $this->get_activated_products();\n        $products = $this->get_detected_products();\n        if ( 0 < count( $already_active ) ) {\n          $deactivated = true;\n          if ( !empty( $products[ $filename ] ) && !empty( $already_active[ $filename ][2] ) && false == $local_only ) {\n            //** Get license and activation email  */\n            $data = base64_decode( $already_active[ $filename ][2] );\n            $data = explode( '::', $data );\n            $license_key = isset( $data[0] ) ? $data[0] : '';\n            $activation_email = isset( $data[1] ) ? $data[1] : '';\n            //** Do request */\n            $deactivated = $this->api->deactivate( array(\n              'product_id' \t=> $already_active[ $filename ][0],\n              'instance' \t\t=> $already_active[ $filename ][1],\n              'email'       => $activation_email,\n              'licence_key' => $license_key,\n            ), $products[ $filename ] );\n          }\n          if ( false !== $deactivated && empty( $deactivated[ 'error' ] ) ) {\n            unset( $already_active[ $filename ] );\n            $response = update_option( $this->token . '-activated', $already_active );\n          } else {\n            $this->api->store_error_log();\n          }\n        }\n        return $response;\n      }\n      \n      /**\n       * Load an instance of the updater class for each activated UsabilityDynamics Product.\n       * @access public\n       * @since  1.0.0\n       * @return void\n       */\n      public function load_updater_instances () {\n        $args = $this->args;\n        $products = $this->get_detected_products();\n        $activated_products = $this->get_activated_products();\n        if ( 0 < count( $products ) ) {\n          foreach ( $products as $k => $v ) {\n            if ( isset( $v['product_id'] ) && isset( $v['instance_key'] ) ) {\n              //** Maybe Get license and activation email  */\n              $api_key = '';\n              $activation_email = '';\n              if( !empty( $activated_products[ $k ][2] ) ) {\n                $data = base64_decode( $activated_products[ $k ][2] );\n                $data = explode( '::', $data );\n                $api_key = isset( $data[0] ) ? $data[0] : '';\n                $activation_email = isset( $data[1] ) ? $data[1] : '';\n              }\n              //echo \"<pre>\"; print_r( $v ); echo \"</pre>\"; //die();\n              if( !empty( $api_key ) ) {\n                new Update_Checker( array(\n                  'type' => $this->type,\n                  'upgrade_url' => $this->api_url,\n                  'name' => $v[ 'product_name' ],\n                  'file' => $v[ 'product_file_path' ],\n                  'product_id' => $v[ 'product_id' ],\n                  'api_key' => $api_key,\n                  'activation_email' => $activation_email,\n                  'renew_license_url' => trailingslashit( $this->api_url ) . 'account',\n                  'instance' => $v[ 'instance_key' ],\n                  'software_version' => $v[ 'product_version' ],\n                  'text_domain' => $this->domain,\n                  'changelog' => ( isset( $args[ 'changelog' ] ) ? $args[ 'changelog' ] : false ),\n                ), $v[ 'errors_callback' ] );\n              }\n            }\n          }\n        }\n      }\n      \n      /**\n       * Detect which products have been activated.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      protected function get_activated_products () {\n        $response = array();\n        $response = get_option( $this->token . '-activated', array() );\n        if ( ! is_array( $response ) ) $response = array();\n        return $response;\n      }\n      \n      /**\n       * Wrapper for get detected theme or plugins.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      protected function get_detected_products () {\n        if ( $this->type == 'theme' ) {\n          return $this->get_detected_theme();\n        } elseif ( $this->type == 'plugin' ) {\n          return $this->get_detected_plugins();\n        } else {\n          return array();\n        }\n      }\n      \n      /**\n       * Get a list of UsabilityDynamics plugins found on this installation.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      protected function get_detected_plugins () {\n        //** Check if get_plugins() function exists */\n        if ( ! function_exists( 'get_plugins' ) ) {\n          require_once ABSPATH . 'wp-admin/includes/plugin.php';\n        }\n        $response = array();\n        $products = get_plugins();\n        if ( is_array( $products ) && ( 0 < count( $products ) ) ) {\n          $reference_list = $this->get_product_reference_list();\n          //echo \"<pre>\"; print_r( $reference_list ); echo \"</pre>\"; die();\n          $activated_products = $this->get_activated_products();\n          if ( is_array( $reference_list ) && ( 0 < count( $reference_list ) ) ) {\n            foreach ( $products as $k => $v ) {\n              if ( in_array( $k, array_keys( $reference_list ) ) ) {\n                $status = 'inactive';\n                if ( in_array( $k, array_keys( $activated_products ) ) ) { \n                  $status = 'active'; \n                }\n                $response[$k] = array( \n                  'product_name' => $v['Name'], \n                  'product_version' => $v['Version'], \n                  'instance_key' => $reference_list[$k]['instance_key'], \n                  'product_id' => $reference_list[$k]['product_id'],\n                  'product_status' => $status, \n                  'product_file_path' => $k,\n                  'errors_callback' => isset( $reference_list[$k]['errors_callback'] ) ? $reference_list[$k]['errors_callback'] : false,\n                );\n              }\n            }\n          }\n        }\n        return $response;\n      }\n      \n      /**\n       * Get detected theme.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      protected function get_detected_theme () {\n        $response = array();\n        $reference_list = $this->get_product_reference_list();\n        $activated_products = $this->get_activated_products();\n        if ( is_array( $reference_list ) && ( 0 < count( $reference_list ) ) ) {\n          $boot_path = wp_normalize_path( get_template_directory() ) . '/style.css';\n          $product = isset( $reference_list[ $boot_path ] ) ? $reference_list[ $boot_path ] : false;\n          if ( $product ) {\n            $status = 'inactive';\n            if ( isset( $activated_products[ $boot_path ] ) ) { \n              $status = 'active'; \n            }\n            $response[ $boot_path ] = array( \n              'product_name' => $this->name, \n              'product_version' => $this->args[ 'version' ], \n              'instance_key' => $product['instance_key'], \n              'product_id' => $product['product_id'],\n              'product_status' => $status, \n              'product_file_path' => $boot_path,\n              'errors_callback' => isset( $product['errors_callback'] ) ? $product['errors_callback'] : false,\n            );\n          }\n        }\n        //echo \"<pre>\"; print_r( $response ); echo \"</pre>\"; die();\n        return $response;\n      }\n      \n      /**\n       * Get a list of UsabilityDynamics plugins or themes which are available for purchasing and downloading.\n       *\n       * @since   1.0.0\n       * @return mixed\n       */\n      protected function get_more_products() {\n        $more_products = array();\n        $trnst = get_transient( $this->token . \"-more-a\" );\n        //** If we do not have cache ( transient ), do request to get the list of all available products */\n        if( !$trnst || !is_array( $trnst ) ) {\n          $target_url = $this->api_url . 'products.json';\n          $request = wp_remote_get( $target_url, array( 'sslverify' => false ) );\n          if( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {\n            $this->error = $request;\n            return $more_products;\n          } else {\n            $response = wp_remote_retrieve_body( $request );\n            $response = @json_decode( $response, true );\n            if( empty( $response ) || !is_array( $response ) ) {\n              return $more_products;\n            } else {\n              $locale = get_locale();\n              $products = !empty( $response[ $locale ][ 'products' ] ) ? \n                $response[ $locale ][ 'products' ] : ( !empty( $response[ 'en_US' ][ 'products' ] ) ? $response[ 'en_US' ][ 'products' ] : false );\n              if( empty( $products ) || !is_array( $products ) ) {\n                return $more_products;\n              }\n              foreach( $products as $product ) {\n                $product = wp_parse_args( $product, array(\n                  'name' => '',\n                  'description' => '',\n                  'icon' => '',\n                  'url' => '',\n                  'type' => 'plugin',\n                  'product_id' => '',\n                  'referrer' => false,\n                  'requires' => false,\n                  'tested' => false,\n                  'order' => 10,\n                ) );\n                if( !empty( $product[ 'referrer' ] ) ) {\n                  $product[ 'referrer' ] = !is_array( $product[ 'referrer' ] ) ? explode( ',', $product[ 'referrer' ] ) : $product[ 'referrer' ];\n                  if( in_array( $this->slug, $product[ 'referrer' ] ) ) {\n                    $more_products[] = $product;\n                  }\n                }\n              }\n              //** Sort the list */\n              usort($more_products, function( $a,$b ) {\n                if ( $a['order'] == $b['order'] ) {\n                  return 0;\n                }\n                return ( $a['order'] < $b['order'] ) ? -1 : 1;\n              });\n              //** Set transient for one day */\n              set_transient( $this->token . \"-more\", $more_products, (60 * 60 * 24) );\n            }\n          }\n        } else {\n          $more_products = $trnst;\n        }\n        \n        //** Determine if plugin from the list is already installed and activated */\n        //** There is not check condition for 'theme' */\n        if( !empty( $more_products ) ) {\n          $reference_list = $this->get_product_reference_list();\n          foreach( $more_products as $k => $product ) {\n            if( $this->slug == $product[ 'product_id' ] ) {\n              unset( $more_products[ $k ] );\n              continue;\n            }\n            if( !empty( $reference_list ) && is_array( $reference_list ) ) {\n              foreach( $reference_list as $reference ) {\n                if( $reference[ 'product_id' ] == $product[ 'product_id' ] ) {\n                  unset( $more_products[ $k ] );\n                }\n              }\n            }\n          }\n        }\n        //echo \"<pre>\"; print_r( $more_products ); echo \"</pre>\"; die();\n        return $more_products;\n      }\n      \n      /**\n       * Get a list of products from UsabilityDynamics.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return   void\n       */\n      protected function get_product_reference_list () {\n        global $_ud_license_updater;\n        //echo \"<pre>\"; print_r( $_ud_license_updater ); echo \"</pre>\"; die();\n        $response = array();\n        if( \n          isset( $_ud_license_updater[ $this->slug ] ) \n          && is_callable( array( $_ud_license_updater[ $this->slug ], 'get_products' ) ) \n        ) {\n          $response = $_ud_license_updater[ $this->slug ]->get_products();\n        }\n        return $response;\n      }\n      \n      /**\n       * Get an array of products that haven't yet been activated.\n       *\n       * @access public\n       * @since   1.0.0\n       * @return  array Products awaiting activation.\n       */\n      protected function get_pending_products () {\n        $response = array();\n        $products = $this->installed_products;\n        if ( is_array( $products ) && ( 0 < count( $products ) ) ) {\n          $activated_products = $this->get_activated_products();\n          if ( is_array( $activated_products ) && ( 0 <= count( $activated_products ) ) ) {\n            foreach ( $products as $k => $v ) {\n              if ( !in_array( $k, array_keys( $activated_products ) ) ) {\n                $response[$k] = array( 'product_name' => $v['product_name'] );\n              }\n            }\n          }\n        }\n        //echo \"<pre>\"; print_r( $response ); echo \"</pre>\"; die();\n        return $response;\n      }\n      \n      /**\n       * Determine, if there are licenses that are not yet activated.\n       * @access  public\n       * @since   1.0.0\n       * @return  void\n       */\n      public function check_activation_status () {\n        $licenses_link = get_option( $this->token . '-url', '' );\n        //echo \"<pre>\"; print_r( $this ); echo \"</pre>\"; die();\n        $products = $this->get_detected_products();\n        //echo \"<pre>\"; print_r( $products ); echo \"</pre>\"; die();\n        $messages = array();\n        if ( 0 < count( $products ) ) {\n          foreach ( $products as $k => $v ) {\n            if ( isset( $v['product_status'] ) && 'inactive' == $v['product_status'] ) {\n              if( !empty( $licenses_link ) ) {\n                $message = sprintf( __( '%s License is not active. To get started, activate it <a href=\"%s\">here</a>.', $this->domain ), $v['product_name'], $licenses_link );\n              } else {\n                $message = sprintf( __( '%s License is not active.', $this->domain ), $v['product_name'] );\n              }\n              if( !empty( $v[ 'errors_callback' ] ) && is_callable( $v[ 'errors_callback' ] ) ) {\n                call_user_func_array( $v[ 'errors_callback' ], array( $message, 'warning' ) );\n              } else {\n                $messages[] = $message;\n              }\n            }\n          }\n        }\n        if( !empty( $messages ) ) {\n          $this->messages = $messages;\n        }\n\n        /**\n         * We also ping UD server once per 24h\n         * for getting any specific information.\n         */\n        $this->maybe_ping_ud();\n      }\n      \n      /**\n       * Remove specific plugins notices from licenses page\n       *\n       * @param $notices\n       * @author peshkov@UD\n       */\n      public function maybe_remove_notices( $notices ) {\n        global $current_screen;\n        if( $current_screen->id == $this->hook ) {\n          $notices = array();\n        }\n        return $notices;\n      }\n      \n      /**\n       * Admin notices\n       */\n      public function admin_notices() {\n        \n        //** Step 1. Look for default messages */\n        $messages = $this->messages;\n        if( !empty( $messages ) && is_array( $messages ) ) {\n          foreach( $messages as $message ) {\n            echo '<div class=\"error fade\"><p>' . $message . '</p></div>';\n          }\n        }\n        \n        //** Step 2. Look for status messages */\n        $message = '';\n        $response = '';\n\n        if ( isset( $_GET['status'] ) && in_array( $_GET['status'], array( 'true', 'false' ) ) && isset( $_GET['type'] ) ) {\n          $classes = array( 'true' => 'updated', 'false' => 'error' );\n          $request_errors = $this->api->get_error_log();\n\n          //echo \"<pre>\"; var_dump( $request_errors ); echo \"</pre>\"; die();\n          \n          switch ( $_GET['type'] ) {\n            case 'no-license-keys':\n              $message = __( 'No license keys were specified for activation.', $this->domain );\n            break;\n\n            case 'deactivate-product':\n              if ( 'true' == $_GET['status'] && empty( $request_errors ) ) {\n                if( $this->type == 'theme' ) {\n                  $message = __( 'Theme deactivated successfully.', $this->domain );\n                } else {\n                  $message = __( 'Product deactivated successfully.', $this->domain );\n                }\n              } else {\n                $message = __( 'There was an error while deactivating the product.', $this->domain );\n              }\n            break;\n\n            default:\n              if ( 'true' == $_GET['status'] && empty( $request_errors ) ) {\n                if( $this->type == 'theme' ) {\n                  $message = __( 'Theme activated successfully.', $this->domain );\n                } else {\n                  $message = __( 'Products activated successfully.', $this->domain );\n                }\n              } else {\n                if( $this->type == 'theme' ) {\n                  $message = __( 'There was an error and theme was not activated.', $this->domain );\n                } else {\n                  $message = __( 'There was an error and not all products were activated.', $this->domain );\n                }\n              }\n            break;\n          }\n\n          $response = '<div class=\"' . esc_attr( $classes[$_GET['status']] ) . ' fade\">' . \"\\n\";\n          $response .= wpautop( $message );\n          $response .= '</div>' . \"\\n\";\n\n          // Cater for API request error logs.\n          if ( is_array( $request_errors ) && ( 0 < count( $request_errors ) ) ) {\n            $message = '';\n\n            foreach ( $request_errors as $k => $v ) {\n              $message .= wpautop( $v );\n            }\n\n            $response .= '<div class=\"error fade\">' . \"\\n\";\n            $response .= make_clickable( $message );\n            $response .= '</div>' . \"\\n\";\n\n            // Clear the error log.\n            $this->api->clear_error_log();\n          }\n\n          if ( '' != $response ) {\n            echo $response;\n          }\n        }        \n        \n      }\n\n      /**\n       * May be add additional information about available add-ons\n       * for legacy users ( who purchased any deprecated premium feature )\n       * to Product's Upgrade Notice\n       *\n       * @param string $referrer\n       * @param array $vars\n       */\n      public function maybe_add_info_to_upgrade_notice( $referrer, $vars ) {\n        if( $referrer->slug != $this->referrer_slug ) {\n          return;\n        }\n\n        $transient = sanitize_key( 'ud_legacy_features_' . $this->slug );\n        $response = get_transient( $transient );\n\n        if ( false === $response || empty( $response ) ) {\n\n          $detected_products = array();\n\n          foreach( $this->get_detected_plugins() as $product ) {\n            $detected_products[ $product[ 'product_id' ] ] = array(\n              'version' => $product[ 'product_version' ],\n              'status' => $product[ 'product_status' ],\n              'product_id' => $product[ 'product_id' ],\n            );\n          }\n\n          $response = $this->api->upgrade_notice( apply_filters( 'ud:upgrade_notice:request:args', array(\n            'product_id' => $this->slug,\n            'version' => $this->args[ 'version' ],\n            'detected_products' => base64_encode( json_encode( $detected_products ) ),\n          ), $this->slug ) );\n\n          if ( false !== $response && empty( $response[ 'error' ] ) ) {\n            set_transient( $transient, json_encode($response), HOUR_IN_SECONDS );\n          }\n\n        } else {\n          $response = json_decode( $response, true );\n        }\n\n        if ( false !== $response && empty( $response[ 'error' ] ) && !empty( $response[ 'message' ] ) ) {\n          $message = @base64_decode( $response[ 'message' ] );\n          echo apply_filters( 'ud::upgrade_notice::response::admin_notice', $message, $this->slug, $response );\n        }\n      }\n\n      /**\n       * Ping UD server once per 24h to get any specific information.\n       *\n       * Maybe render Admin Notice from UD server.\n       *\n       */\n      private function maybe_ping_ud() {\n\n        /**\n         * May be dismiss notice from UD server\n         */\n        if( !empty( $_REQUEST[ 'dismiss_ud_notice' ] ) ) {\n          $notices = get_option( 'dismissed_ud_notices' );\n          if( !is_array( $notices ) ) {\n            $notices = array();\n          }\n          array_push( $notices, $_REQUEST[ 'dismiss_ud_notice' ] );\n          $notices = array_unique( $notices );\n          update_option( 'dismissed_ud_notices', $notices );\n          if( !empty( $_SERVER[ 'HTTP_REFERER' ] ) ) {\n            wp_redirect( $_SERVER[ 'HTTP_REFERER' ] );\n          } else {\n            wp_redirect( admin_url( 'index.php' ) );\n          }\n          exit;\n        }\n\n        $cache = true;\n\n        $option = sanitize_key( 'ud_ping_' . sanitize_key( $this->slug ) );\n        $response = get_option( $option );\n\n        if (\n          false === $response ||\n          empty( $response ) ||\n          empty( $response[ 'time' ] ) ||\n          ( time() - $response[ 'time' ] ) >= DAY_IN_SECONDS\n        ) {\n\n          $cache = false;\n\n          $detected_products = array();\n\n          foreach( $this->get_detected_plugins() as $product ) {\n            $detected_products[ $product[ 'product_id' ] ] = array(\n              'version' => $product[ 'product_version' ],\n              'status' => $product[ 'product_status' ],\n              'product_id' => $product[ 'product_id' ],\n            );\n          }\n\n          $response = $this->api->ping( apply_filters('ud-api-client-ping-args', array(\n            'product_id' => $this->slug,\n            'version' => $this->args[ 'version' ],\n            'detected_products' => base64_encode( json_encode( $detected_products ) ),\n          ), $this, $detected_products));\n\n          if ( false !== $response && empty( $response[ 'error' ] ) ) {\n            update_option( 'ud_ping_' . sanitize_key( $this->slug ), array(\n              'time' => time(),\n              'data' => $response\n            ) );\n          }\n\n        } else {\n          if( empty( $response[ 'data' ] ) ) {\n            return;\n          }\n          $response = $response[ 'data' ];\n        }\n\n        if ( false !== $response && empty( $response[ 'error' ] ) ) {\n\n          /**\n           * Here we can take care about response.\n           *\n           * @param string $this->slug ( product_id )\n           * @param array $response\n           * @param bool $cache got from cache or not\n           */\n          $this->ping_response = apply_filters( 'ud::ping::response', $response, $this->slug, $cache );\n\n          /**\n           * Render Admin Notice from UD server.\n           */\n          if( !empty( $this->ping_response[ 'message' ] ) ) {\n            global $_ud_ping_notices;\n\n            if( !isset( $_ud_ping_notices ) || !is_array( $_ud_ping_notices ) ) {\n              $_ud_ping_notices = array();\n            }\n\n            $notice = $this->ping_response[ 'message' ];\n\n            /** Determine if user has permissions to see plugin notices */\n            if ( ! function_exists( 'wp_get_current_user' ) ) {\n              require_once( ABSPATH . 'wp-includes/pluggable.php' );\n            }\n            if( !current_user_can( 'activate_plugins' ) ) {\n              return;\n            }\n\n            /** Determine if notice dismissed */\n            $dismissed = get_option( 'dismissed_ud_notices' );\n            $dismissed = is_array( $dismissed ) ? $dismissed : array();\n            if( in_array( md5( $notice ), $dismissed ) ) {\n              return;\n            }\n\n            if( in_array( $notice, $_ud_ping_notices ) ) {\n              return;\n            }\n\n            array_push( $_ud_ping_notices, $this->ping_response[ 'message' ] );\n\n            if( !has_action( 'admin_notices', array( __CLASS__, 'ping_admin_notices' ) ) ) {\n              add_action( 'admin_notices', array( __CLASS__, 'ping_admin_notices' ) );\n              add_filter( 'ud::ping::response::admin_notice::icon', array( $this, 'get_admin_notice_icon' ) );\n            }\n\n          }\n\n        }\n\n      }\n\n      public function get_admin_notice_icon() {\n        return $this->assets_url . 'images/ud.png';\n      }\n\n      /**\n       * Render Notices from UD server\n       *\n       */\n      static public function ping_admin_notices() {\n        global $_ud_ping_notices;\n\n        if( !isset( $_ud_ping_notices ) || !is_array( $_ud_ping_notices ) ) {\n          return;\n        }\n\n        foreach( array_unique( $_ud_ping_notices ) as $notice ) {\n          $dismiss_url = admin_url( 'index.php' ) . '?dismiss_ud_notice=' . md5( $notice );\n          $notice = @base64_decode( $notice );\n          $notice = apply_filters( 'ud::ping::response::admin_notice', $notice );\n          if( !empty( $notice ) ) {\n            $icon = apply_filters( 'ud::ping::response::admin_notice::icon', false );\n            require( dirname( dirname( __DIR__ ) ) . '/static/templates/admin-notice.php' );\n          }\n        }\n\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-api.php",
    "content": "<?php\n/**\n * Client API\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\API' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class API extends Scaffold {\n    \n      /**\n       * \n       */\n      protected $api_url;\n\n      /**\n       * \n       */\n      protected $errors;\n      \n      /**\n       * \n       */\n      protected $token;\n      \n      /**\n       *\n       */\n      public function __construct( $args ) {\n        parent::__construct( $args );\n        $this->api_url = isset( $args[ 'api_url' ] ) ? $args[ 'api_url' ] : false;\n        $this->token = isset( $args[ 'token' ] ) ? $args[ 'token' ] : false;\n      }\n      \n      /**\n       * Activate Product\n       */\n      public function activate( $args, $product = false, $error_log = true ) {\n        $args[ 'request' ] = 'activation';\n        return $this->request( $args, $product, $error_log );\n      }\n\n      /**\n       * Deactivate Product\n       */\n      public function deactivate( $args, $product = false, $error_log = true ) {\n        $args[ 'request' ] = 'deactivation';\n        return $this->request( $args, $product, $error_log );\n      }\n\n      /**\n       * Checks if the software is activated or deactivated\n       * @param  array $args\n       * @return array\n       */\n      public function status( $args, $product = false, $error_log = false ) {\n        $args[ 'request' ] = 'status';\n        return $this->request( $args, $product, $error_log );\n      }\n\n      /**\n       * Pings remote server to maybe get specific information\n       * @param  array $args\n       * @param bool $error_log\n       * @return array\n       */\n      public function ping( $args = array(), $error_log = false ) {\n        $args[ 'request' ] = 'ping';\n        return $this->request( $args, array(), $error_log );\n      }\n\n      /**\n       * May be add information to upgrade notice\n       * e.g., about available add-ons\n       * if user purchased legacy premium features\n       * COMPATIBILITY WITH OLD PRODUCTS\n       *\n       * @param  array $args\n       * @param bool $error_log\n       * @return array\n       */\n      public function upgrade_notice( $args = array(), $error_log = false ) {\n        $args[ 'request' ] = 'upgrade_notice';\n        /* DEPRECATED API KEY FOR OLD PLUGINS COMPATIBILITY */\n        $args[ 'legacy_key' ] = get_option( 'ud_api_key', '' );\n        return $this->request( $args, array(), $error_log );\n      }\n      \n      /**\n       * API Key URL\n       */\n      protected function create_software_api_url( $args ) {\n        $api_url = add_query_arg( 'wc-api', 'am-software-api', $this->api_url );\n        //return $api_url . '&' . http_build_query( $args );\n        $api_url .= '&';\n        foreach ($args AS $key=>$value)\n          $api_url .= $key.'='.urlencode($value).'&';\n        $api_url = rtrim($api_url, '&');\n        return $api_url;\n      }\n      \n      /**\n       *\n       * @author peshkov@UD\n       */\n      protected function request( $args, $product, $error_log ) {\n        $product = wp_parse_args( $product, array(\n          'product_name' => __( 'UsabilityDynamics Product', $this->domain ),\n        ) );\n        $args = wp_parse_args( $args, array(\n          'request' \t\t=> '',\n          'product_id' \t=> '',\n          'instance' \t\t=> '',\n          //'email'       => '',\n          'licence_key' => '',\n          'platform' \t  => $this->blog,\n          //** Add nocache hack. We must be sure we do not get CACHE result. peshkov@UD */\n          'nocache' => rand( 10000, 99999 ),\n        ) );\n        $target_url = $this->create_software_api_url( $args );\n        //echo \"<pre>\"; print_r( $target_url ); echo \"</pre>\"; //die();\n        $request = wp_remote_get( $target_url, array( 'timeout' => 15, 'sslverify' => false, 'headers' => array(\n          'x-ud-api-request' => $args[ 'request' ],\n          'x-ud-api-product-id' => $args[ 'product_id' ],\n          'x-ud-api-instance' => $args[ 'instance' ],\n          'x-ud-api-licence-key' => $args[ 'licence_key' ],\n          'x-ud-api-platform' => $args[ 'platform' ],\n        ) ) );\n        //echo \"<pre>\"; print_r( $request ); echo \"</pre>\"; die();\n        if( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {\n          if( $error_log ) $this->log_request_error( sprintf( __( 'There was an error making %s request for %s. Could not do request to UsabilityDynamics.', $this->domain ), $args[ 'request' ], $product[ 'product_name' ] ) );\n        } else {\n          $response = wp_remote_retrieve_body( $request );\n          $response = @json_decode( $response, true );\n          //echo \"<pre>\"; print_r( $response ); echo \"</pre>\"; die();\n          if( empty( $response ) || !is_array( $response ) ) {\n            if( $error_log ) $this->log_request_error( sprintf( __( 'There was an error making %s request for %s, please try again', $this->domain ), $args[ 'request' ], $product[ 'product_name' ] ) );\n          } elseif( !empty( $response[ 'error' ] ) ) {\n            $error = !empty( $response[ 'additional info' ] ) ? $response[ 'additional info' ] : $response[ 'error' ];\n            if( $error_log ) $this->log_request_error( sprintf( __( 'There was an error making %s request for %s: %s' ), $args[ 'request' ], $product[ 'product_name' ], $error ) );\n            return $response;\n          } else {\n            return $response;\n          }\n        }\n        return false;\n      }\n      \n      /**\n       * Log an error from an API request.\n       *\n       * @access private\n       * @since 1.0.0\n       * @param string $error\n       */\n      public function log_request_error ( $error ) {\n        $this->errors[] = $error;\n      }\n      \n      /**\n       * Store logged errors in a temporary transient, such that they survive a page load.\n       * @since  1.0.0\n       * @return  void\n       */\n      public function store_error_log () {\n        set_transient( $this->token . '-request-error', $this->errors );\n      }\n      \n      /**\n       * Get the current error log.\n       *\n       * @since  1.0.0\n       * @return  void\n       */\n      public function get_error_log () {\n        return get_transient( $this->token . '-request-error' );\n      }\n      \n      /**\n       * Clear the current error log.\n       *\n       * @since  1.0.0\n       * @return  void\n       */\n      public function clear_error_log () {\n        return delete_transient( $this->token . '-request-error' );\n      }\n    \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-bootstrap.php",
    "content": "<?php\n/**\n * UD API Updater\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Bootstrap' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Bootstrap extends Scaffold {\n    \n      /**\n       *\n       */\n      public static $version = '1.2.5';\n    \n      /**\n       *\n       */\n      private $products = array();\n      \n      /**\n       *\n       */\n      public $admin;\n      \n      /**\n       *\n       */\n      public function __construct( $args = array() ) {\n        global $_ud_license_updater;\n        parent::__construct( $args );\n        //** Maybe get queued theme update */\n        if( $this->type == 'theme' ) {\n          $this->maybe_get_queued_theme_update();\n        } \n        //** Get queued plugin updates. */\n        elseif ( $this->type == 'plugin' ) {\n          add_action( 'plugins_loaded', array( $this, 'load_queued_updates' ), 10 );\n        }\n        $_ud_license_updater = !is_array( $_ud_license_updater ) ? array() : $_ud_license_updater;\n        $_ud_license_updater[ $this->slug ] = $this;\n        //** Load the admin. */\n        if ( is_admin() ) {\n          $this->admin = new Admin( $args );          \n        }\n        \n        /**\n         * HACK.\n         * Filter the whitelist of hosts to redirect to.\n         * It adds Admin URL ( in case it's different with home or site urls )\n         * to allowed list.\n         *\n         * @param array       $hosts An array of allowed hosts.\n         * @param bool|string $host  The parsed host; empty if not isset.\n         */\n        add_filter( 'allowed_redirect_hosts', function( $hosts, $host ) {\n          if( !is_array( $hosts ) ) {\n            $hosts = array();\n          }\n          $schema = parse_url( admin_url() );\n          if( isset( $schema[ 'host' ] ) ) {\n            array_push( $hosts, $schema[ 'host' ] );\n            $hosts = array_unique( $hosts );\n          }\n          return $hosts;\n        }, 99, 2 );\n      }\n      \n      /**\n       * Add a product to await a license key for activation.\n       *\n       * Add a product into the array, to be processed with the other products.\n       *\n       * @since  1.0.0\n       * @param string $file The base file of the product to be activated.\n       * @param string $instance_key The unique ID of the product to be activated.\n       * @return  void\n       */\n      public function add_product ( $file, $instance_key, $product_id, $errors_callback ) {\n        if ( $file != '' && !isset( $this->products[ $file ] ) ) { \n          $this->products[ $file ] = array( 'instance_key' => $instance_key, 'product_id' => $product_id, 'errors_callback' => $errors_callback ); \n        }\n      }\n      \n      /**\n       * Return an array of the available product keys.\n       * @since  1.0.0\n       * @return array Product keys.\n       */\n      public function get_products () {\n        return (array) $this->products;\n      }\n      \n      /**\n       * Add 'Plugin' Product.\n       *\n       * @access public\n       * @since 1.0.0\n       * @return void\n       */\n      public function load_queued_updates() {\n        global $_ud_queued_updates;\n        //echo \"<pre>\"; print_r( $_ud_queued_updates ); echo \"</pre>\"; die();\n        if ( !empty( $_ud_queued_updates[ $this->slug ] ) && is_array( $_ud_queued_updates[ $this->slug ] ) ) {\n          foreach ( $_ud_queued_updates[ $this->slug ] as $plugin ) {\n            if ( is_object( $plugin ) && ! empty( $plugin->file ) && ! empty( $plugin->instance_key ) && ! empty( $plugin->product_id ) ) {\n              $errors_callback = isset( $plugin->errors_callback ) ? $plugin->errors_callback : false;\n              $this->add_product( $plugin->file, $plugin->instance_key, $plugin->product_id, $errors_callback );\n            }\n          }\n        }\n      }\n      \n      /**\n       * Add 'Theme' Product.\n       *\n       * @access public\n       * @since 1.0.0\n       * @return void\n       */\n      public function maybe_get_queued_theme_update() {\n        global $_ud_queued_updates;\n        //echo \"<pre>\"; print_r( $_ud_queued_updates[ '_theme_' ] ); echo \"</pre>\"; die();\n        if ( !empty( $_ud_queued_updates[ '_theme_' ] ) && is_object( $_ud_queued_updates[ '_theme_' ] ) ) {\n          $theme = $_ud_queued_updates[ '_theme_' ];\n          if( ! empty( $theme->file ) && ! empty( $theme->instance_key ) && ! empty( $theme->product_id ) ) {\n            $errors_callback = isset( $theme->errors_callback ) ? $theme->errors_callback : false;\n            $this->add_product( $theme->file, $theme->instance_key, $theme->product_id, $errors_callback );\n          }\n        }\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-licenses-table.php",
    "content": "<?php\n/**\n * Licenses Table\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Licenses_Table' ) ) {\n\n    if ( ! defined( 'ABSPATH' ) ) exit; //** Exit if accessed directly */\n\n    if( ! class_exists( 'WP_List_Table' ) ) {\n        require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );\n    }\n  \n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Licenses_Table extends \\WP_List_Table {\n      \n      public $data;\n      public $found_data;\n      public $name;\n      public $domain;\n      public $page;\n      public $per_page = 100;\n      public $activation_email;\n      \n      /**\n       * Constructor.\n       * @since  1.0.0\n       */\n      public function __construct ( $args ) {\n        global $status, $page;\n\n        $this->name = !empty( $args[ 'name' ] ) ? $args[ 'name' ] : '';\n        $this->domain = !empty( $args[ 'domain' ] ) ? $args[ 'domain' ] : false;\n        $this->page = !empty( $args[ 'page' ] ) ? $args[ 'page' ] : false;\n        $this->activation_email = isset( $args[ 'activation_email' ] ) && $args[ 'activation_email' ] ? true : false;\n        \n        $args = array(\n          'singular'  => 'license',     //singular name of the listed records\n          'plural'    => 'licenses',   //plural name of the listed records\n          'ajax'      => false        //does this table support ajax?\n        );\n\n        $this->data = array();\n\n        //** Make sure this file is loaded, so we have access to plugins_api(), etc. */\n        require_once( ABSPATH . '/wp-admin/includes/plugin-install.php' );\n\n        parent::__construct( $args );\n      }\n\n      /**\n       * Text to display if no items are present.\n       *\n       * @since  1.0.0\n       * @return  void\n       */\n      public function no_items () {\n          echo wpautop( sprintf( __( 'No active %s products found.', $this->domain ), $this->name ) );\n      }\n\n      /**\n       * The content of each column.\n       *\n       * @param  array $item         The current item in the list.\n       * @param  string $column_name The key of the current column.\n       * @since  1.0.0\n       * @return string              Output for the current column.\n       */\n      public function column_default ( $item, $column_name ) {\n        switch( $column_name ) {\n          case 'product':\n          case 'product_status':\n          case 'product_version':\n            return $item[$column_name];\n          break;\n        }\n      }\n\n      /**\n       * Retrieve an array of sortable columns.\n       * @since  1.0.0\n       * @return array\n       */\n      public function get_sortable_columns () {\n        return array();\n      }\n\n      /**\n       * Retrieve an array of columns for the list table.\n       *\n       * @since  1.0.0\n       * @return array Key => Value pairs.\n       */\n      public function get_columns () {\n        $columns = array(\n          'product_name' => __( 'Product', $this->domain ),\n          'product_version' => __( 'Version', $this->domain ),\n          'product_status' => __( 'Activation Status', $this->domain ),\n        );\n        return $columns;\n      }\n\n      /**\n       * Content for the \"product_name\" column.\n       *\n       * @param  array  $item The current item.\n       * @since  1.0.0\n       * @return string       The content of this column.\n       */\n      public function column_product_name ( $item ) {\n        return wpautop( '<strong>' . $item['product_name'] . '</strong>' );\n      }\n\n      /**\n       * Content for the \"product_version\" column.\n       * @param  array  $item The current item.\n       * @since  1.0.0\n       * @return string       The content of this column.\n       */\n      public function column_product_version ( $item ) {\n        return wpautop( $item['product_version'] );\n      }\n\n      /**\n       * Content for the \"status\" column.\n       *\n       * @param  array  $item The current item.\n       * @since  1.0.0\n       * @return string       The content of this column.\n       */\n      public function column_product_status ( $item ) {\n        $response = '';\n        if ( 'active' == $item['product_status'] ) {\n          $deactivate_url = wp_nonce_url(Utility::current_url( array(\n            'action' => 'deactivate-product',\n            'filepath' => urlencode( $item['product_file_path'] ),\n          ) ), 'bulk-licenses' );\n          //$deactivate_url = wp_nonce_url( add_query_arg( 'action', 'deactivate-product', add_query_arg( 'filepath', $item['product_file_path'], add_query_arg( 'page', $this->page, network_admin_url( 'index.php' ) ) ) ), 'bulk-licenses' );\n          $response = '<a href=\"' . esc_url( $deactivate_url ) . '\" onclick=\"return confirm(\\'' . __( 'Are you sure you want to deactivate the license?', $this->domain ) . '\\');\">' . __( 'Deactivate', $this->domain ) . '</a>' . \"\\n\";\n        } else {\n          $response .= '<ul>' . \"\\n\";\n          $response .= '<li><input name=\"products[' . esc_attr( $item['product_file_path'] ) . '][license_key]\" id=\"license_key-' . esc_attr( $item['product_file_path'] ) . '\" type=\"text\" value=\"\" size=\"37\" aria-required=\"true\" placeholder=\"' . esc_attr( __( 'Place License Key here', $this->domain ) ) . '\" /><li>' . \"\\n\";\n          \n          if( !$this->activation_email ) {\n            $response .= '</ul>' . \"\\n\";\n            $response .= '<input name=\"products[' . esc_attr( $item['product_file_path'] ) . '][activation_email]\" type=\"hidden\" value=\"\" />' . \"\\n\";\n          } else {\n            $response .= '<li><input name=\"products[' . esc_attr( $item['product_file_path'] ) . '][activation_email]\" id=\"activation_email-' . esc_attr( $item['product_file_path'] ) . '\" type=\"text\" value=\"\" size=\"37\" aria-required=\"true\" placeholder=\"' . esc_attr( __( 'Place Activation Email here', $this->domain ) ) . '\" /></li>' . \"\\n\";\n            $response .= '</ul>' . \"\\n\";\n          }\n          \n        }\n        return $response;\n      }\n\n      /**\n       * Retrieve an array of possible bulk actions.\n       *\n       * @since  1.0.0\n       * @return array\n       */\n      public function get_bulk_actions () {\n        $actions = array();\n        return $actions;\n      }\n\n      /**\n       * Prepare an array of items to be listed.\n       * @since  1.0.0\n       * @return array Prepared items.\n       */\n      public function prepare_items () {\n        $columns  = $this->get_columns();\n        $hidden   = array();\n        $sortable = $this->get_sortable_columns();\n        $this->_column_headers = array( $columns, $hidden, $sortable );\n        $total_items = count( $this->data );\n        //** only ncessary because we have sample data */\n        $this->found_data = $this->data;\n        $this->set_pagination_args( array(\n          'total_items' => $total_items, //WE have to calculate the total number of items\n          'per_page'    => $total_items //WE have to determine how many items to show on a page\n        ) );\n        $this->items = $this->found_data;\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-manager.php",
    "content": "<?php\n/**\n * Manager\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Manager' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Manager {\n    \n      private $type;\n      private $product_id;\n      private $referrer;\n      private $name;\n      private $boot_file;\n      private $instance_key;\n      \n      public $errors_callback;\n      \n      /**\n       * Constructor\n       */\n      public function __construct( $schema = array() ) {\n        $this->type = !empty( $schema[ 'type' ] ) ? $schema[ 'type' ] : false;\n        $this->product_id = !empty( $schema[ 'product_id' ] ) ? $schema[ 'product_id' ] : false;\n        $this->referrer = !empty( $schema[ 'referrer' ] ) ? $schema[ 'referrer' ] : false;\n        $this->name = !empty( $schema[ 'name' ] ) ? $schema[ 'name' ] : false;\n        $this->boot_file = !empty( $schema[ 'boot_file' ] ) ? $schema[ 'boot_file' ] : false;\n        $this->errors_callback = !empty( $schema[ 'errors_callback' ] ) ? $schema[ 'errors_callback' ] : false;\n        $this->queue_updates();\n      }\n      \n      /**\n       * Add product to global list of products.\n       */\n      public function queue_updates() {\n        global $_ud_queued_updates;\n\n        if( !$this->product_id || !$this->boot_file || !$this->name ) {\n          return false;\n        }\n        \n        //** Get instance key. If it does not exist: generate it. */\n        $option_key = sanitize_key( $this->name ) . ':instance';\n        $this->instance_key = get_option( $option_key, false );\n        if( empty( $this->instance_key ) ) {\n          $this->instance_key = $this->generate_password( 12, false );\n          update_option( $option_key, $this->instance_key );\n        }\n        \n        $product                  = new \\stdClass();\n        $product->type            = $this->type;\n        $product->product_id      = $this->product_id;\n        $product->instance_key    = $this->instance_key;\n        $product->errors_callback = $this->errors_callback;\n\n        $_ud_queued_updates = isset( $_ud_queued_updates ) ? $_ud_queued_updates : array();\n        //** Add theme */\n        if( $product->type === 'theme' ) {\n          $product->file = $this->boot_file;\n          //** Must be only one theme in the list! */\n          if( !empty( $_ud_queued_updates[ '_theme_' ] ) ) {\n            //** WTF? How it could be? */\n            wp_die( 'Are you cheating?' );\n          } else {\n            $_ud_queued_updates[ '_theme_' ] = $product;\n          }\n        } \n        //** Add plugin */\n        elseif ( $product->type === 'plugin' ) {\n          $product->file = plugin_basename( $this->boot_file );\n          if( !$this->referrer ) {\n            //** WTF? How it could be? */\n            wp_die( 'Are you cheating?' );\n          }\n          $referrer_key = strtolower( $this->referrer );\n          $referrer_key = preg_replace( '/[^a-z0-9_\\-\\/]/', '', $referrer_key );\n          $_ud_queued_updates[ $referrer_key ] = isset( $_ud_queued_updates[ $referrer_key ] ) ? $_ud_queued_updates[ $referrer_key ] : array();\n          $_ud_queued_updates[ $referrer_key ][] = $product; \n        }\n        return true;\n      }\n      \n      /**\n       * Creates a unique instance ID\n       */\n      private function generate_password( $length = 12, $special_chars = true, $extra_special_chars = false ) {\n        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n        if ( $special_chars ) {\n          $chars .= '!@#$%^&*()';\n        }\n        if ( $extra_special_chars ) {\n          $chars .= '-_ []{}<>~`+=,.;:/?|';\n        }\n        $password = '';\n        for ( $i = 0; $i < $length; $i++ ) {\n          $password .= substr( $chars, $this->rand(0, strlen($chars) - 1), 1);\n        }\n        return $password;\n      }\n      \n      /**\n       * \n       */\n      private function rand( $min = 0, $max = 0 ) {\n        global $rnd_value;\n        //** Reset $rnd_value after 14 uses */\n        //** 32(md5) + 40(sha1) + 40(sha1) / 8 = 14 random numbers from $rnd_value */\n        if ( strlen($rnd_value) < 8 ) {\n          if ( defined( 'WP_SETUP_CONFIG' ) )\n            static $seed = '';\n          else\n            $seed = get_transient('random_seed');\n          $rnd_value = md5( uniqid(microtime() . mt_rand(), true ) . $seed );\n          $rnd_value .= sha1($rnd_value);\n          $rnd_value .= sha1($rnd_value . $seed);\n          $seed = md5($seed . $rnd_value);\n          if ( ! defined( 'WP_SETUP_CONFIG' ) )\n            set_transient('random_seed', $seed);\n        }\n        //** Take the first 8 digits for our value */\n        $value = substr($rnd_value, 0, 8);\n        //** Strip the first eight, leaving the remainder for the next call to wp_rand(). */\n        $rnd_value = substr($rnd_value, 8);\n        $value = abs(hexdec($value));\n        //** Some misconfigured 32bit environments (Entropy PHP, for example) truncate integers larger than PHP_INT_MAX to PHP_INT_MAX rather than overflowing them to floats. */\n        $max_random_number = 3000000000 === 2147483647 ? (float) \"4294967295\" : 4294967295; // 4294967295 = 0xffffffff\n        //** Reduce the value to be within the min - max range */\n        if ( $max != 0 ) {\n          $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 );\n        }\n        return abs(intval($value));\n      }\n      \n    }\n  \n  }\n  \n}"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-more-products-table.php",
    "content": "<?php\n/**\n * Licenses Table\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\More_Products_Table' ) ) {\n\n    if ( ! defined( 'ABSPATH' ) ) exit; //** Exit if accessed directly */\n\n    if( ! class_exists( 'WP_List_Table' ) ) {\n        require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );\n    }\n  \n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class More_Products_Table extends \\WP_List_Table {\n      \n      public $data;\n      public $found_data;\n      public $name;\n      public $domain;\n      public $page;\n      public $error;\n      public $per_page = 100;\n      \n      /**\n       * Constructor.\n       * @since  1.0.0\n       */\n      public function __construct ( $args ) {\n        global $page;\n\n        $this->name = !empty( $args[ 'name' ] ) ? $args[ 'name' ] : '';\n        $this->domain = !empty( $args[ 'domain' ] ) ? $args[ 'domain' ] : false;\n        $this->page = !empty( $args[ 'page' ] ) ? $args[ 'page' ] : false;\n        \n        $args = array(\n          'singular'  => 'product',     //singular name of the listed records\n          'plural'    => 'products',   //plural name of the listed records\n          'ajax'      => false        //does this table support ajax?\n        );\n\n        $this->data = array();\n\n        parent::__construct( $args );\n      }\n      \n      /**\n       * Prepare an array of items to be listed.\n       * @since  1.0.0\n       * @return array Prepared items.\n       */\n      public function prepare_items () {\n        $total_items = count( $this->data );\n        //** only necessary because we have sample data */\n        $this->set_pagination_args( array(\n          'total_items' => $total_items, //WE have to calculate the total number of items\n          'per_page'    => $total_items //WE have to determine how many items to show on a page\n        ) );\n        $this->items = $this->data;\n      }\n      \n      public function no_items() {\n        if ( isset( $this->error ) ) {\n          $message = $this->error->get_error_message();\n          if($this->error->get_error_message() == 'User has blocked requests through HTTP.'){\n            $message .=  '<p>For more information please check <a href=\"https://wp-property.github.io/docs/set-accessible-host\" class=\"link\" target=\"_blank\">' . __( 'this documentation.' ) . '</a></p>';\n          }\n          $message .= '<p class=\"hide-if-no-js\"><a href=\"#\" class=\"button\" onclick=\"document.location.reload(); return false;\">' . __( 'Try again' ) . '</a></p>';\n        } else {\n          $message = sprintf( __( 'No More Available Products for %s', $this->domain ), $this->name );\n        }\n        echo '<div class=\"no-plugin-results\">' . $message . '</div>';\n      }\n      \n      public function get_columns() {\n        return array();\n      }\n      \n      protected function truncate( $string, $length = 220, $append = \"&hellip;\" ) {\n        $string = trim($string);\n        if( strlen( $string ) > $length ) {\n          $string = wordwrap($string, $length);\n          $string = explode(\"\\n\", $string, 2);\n          $string = $string[0] . $append;\n        }\n        return $string;\n      }\n      \n      /**\n       * Override the parent display() so we can provide a different container.\n       */\n      public function display() {\n        $singular = $this->_args['singular'];\n        $data_attr = '';\n        if ( $singular ) {\n          $data_attr = \" data-wp-lists='list:$singular'\";\n        }\n        $this->display_tablenav( 'top' );\n        ?>\n        <div class=\"wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>\">\n          <div id=\"the-list\"<?php echo $data_attr; ?>>\n            <?php $this->display_rows_or_placeholder(); ?>\n          </div>\n        </div>\n        <?php\n        $this->display_tablenav( 'bottom' );\n      }\n      \n      protected function get_table_classes() {\n        return array( 'widefat', $this->_args['plural'] );\n      }\n      \n      public function display_rows() {\n      \n        foreach ( (array) $this->items as $product ) {\n\n          $action_links = array();\n          if( !empty( $product['url'] ) ) {\n            $action_links[] = '<a target=\"_blank\" class=\"install-now button\" href=\"' . $product['url'] . '\" aria-label=\"' . __( 'More Details' ) . '\">' . __( 'More Details' ) . '</a>';\n          }\n          \n          ?>\n          <div class=\"plugin-card\">\n            <div class=\"plugin-card-top\" style=\"min-height:200px;\">\n              <?php if( !empty( $product[ 'icon' ] ) ) { ?>\n                <a target=\"_blank\" href=\"<?php echo esc_url( $product['url'] ); ?>\" class=\"thickbox plugin-icon\"><img src=\"<?php echo esc_attr( $product[ 'icon' ] ) ?>\" /></a>\n              <?php } ?>\n              <div class=\"name column-name\">\n                <h4><a target=\"_blank\" href=\"<?php echo esc_url( $product['url'] ); ?>\" class=\"thickbox\"><?php echo $product[ 'name' ]; ?></a></h4>\n              </div>\n              <div class=\"action-links\">\n                <?php\n                  if ( $action_links ) {\n                    echo '<ul class=\"plugin-action-buttons\"><li>' . implode( '</li><li>', $action_links ) . '</li></ul>';\n                  }\n                ?>\n              </div>\n              <div class=\"desc column-description\">\n                <p><?php echo $this->truncate( $product[ 'description' ] ); ?></p>\n              </div>\n            </div>\n            <div class=\"plugin-card-bottom\">\n              <div class=\"vers column-rating product-type\">\n                <b><?php echo ucfirst( $product['type'] ); ?></b>\n              </div>\n              <div class=\"column-compatibility\">\n                <?php\n                if ( ! empty( $product['tested'] ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $product['tested'] ) ), $product['tested'], '>' ) ) {\n                  echo '<span class=\"compatibility-untested\">' . __( '<strong>Untested</strong> with your version of WordPress' ) . '</span>';\n                } elseif ( ! empty( $product['requires'] ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $product['requires'] ) ), $product['requires'], '<' ) ) {\n                  echo '<span class=\"compatibility-incompatible\">' . __( '<strong>Incompatible</strong> with your version of WordPress' ) . '</span>';\n                } else {\n                  echo '<span class=\"compatibility-compatible\">' . __( '<strong>Compatible</strong> with your version of WordPress' ) . '</span>';\n                }\n                ?>\n              </div>\n            </div>\n          </div>\n          <?php\n        }\n      \n      }\n  \n    }\n  \n  }\n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-scaffold.php",
    "content": "<?php\n/**\n * Scaffold\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Scaffold' ) ) {\n\n    /**\n     *\n     * @class Scaffold\n     * @author: peshkov@UD\n     */\n    abstract class Scaffold {\n      \n      public $type;\n      public $blog;\n      public $name;\n      public $slug;\n      public $referrer_slug;\n      public $domain;\n      \n      /** \n       * Email is required for activation.\n       *\n       * @var boolean\n       */\n      public $activation_email;\n      \n      /**\n       * Storage for dynamic properties\n       * Used by magic __set, __get\n       *\n       * @protected\n       * @type array\n       */\n      protected $_properties = array();\n      \n      /**\n       * Constructor\n       *\n       * @author peshkov@UD\n       */\n      public function __construct( $args = array() ) {\n        //** Setup our plugin's data */\n        $this->type = isset( $args[ 'type' ] ) ? trim( $args[ 'type' ] ) : false;\n        $this->activation_email = isset( $args[ 'activation_email' ] ) && $args[ 'activation_email' ] ? true : false;\n        $this->name = isset( $args[ 'name' ] ) ? trim( $args[ 'name' ] ) : false;\n        $this->slug = isset( $args[ 'slug' ] ) ? trim( $args[ 'slug' ] ) : sanitize_key( $this->name );\n        $this->referrer_slug = isset( $args[ 'referrer_slug' ] ) ? $args[ 'referrer_slug' ] : false;\n        $this->domain = isset( $args[ 'domain' ] ) ? trim( $args[ 'domain' ] ) : false;\n        \n        /**\n         * Some web hosts have security policies that block the : (colon) and // (slashes) in http://,\n         * so only the host portion of the URL can be sent. For example the host portion might be\n         * www.example.com or example.com. http://www.example.com includes the scheme http,\n         * and the host www.example.com.\n         * Sending only the host also eliminates issues when a client site changes from http to https,\n         * but their activation still uses the original scheme.\n         * To send only the host, use a line like the one below:\n         */\n        $this->blog = str_ireplace( array( 'http://', 'https://' ), '', home_url() );\n        \n        $this->args = $args;\n      }\n      \n      /**\n       *\n       */\n      public function __get( $key ) {\n        return isset( $this->_properties[ $key ] ) ? $this->_properties[ $key ] : NULL;\n      }\n\n      /**\n       *\n       */\n      public function __set( $key, $value ) {\n        $this->_properties[ $key ] = $value;\n      }\n      \n    }\n  \n  }\n  \n}"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-ui.php",
    "content": "<?php\n/**\n * Screen UI\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\UI' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class UI extends Scaffold {\n      \n      /**\n       * Available Screens\n       */\n      public $available_screens;\n      \n      /**\n       * Token\n       */\n      public $token;\n      \n      /**\n       * Constructor\n       */\n      public function __construct( $args ) {\n        parent::__construct( $args );\n        $this->token = isset( $args[ 'token' ] ) ? $args[ 'token' ] : array();\n        $this->available_screens = isset( $args[ 'screens' ] ) ? $args[ 'screens' ] : array();\n      }\n      \n      /**\n       * Generate header HTML.\n       * @access  public\n       * @since   1.0.0\n       * @return  void\n       */\n      public function get_header ( $token = 'ud-license-manager' ) {\n        global $current_screen;\n        do_action( 'ud_licenses_screen_before', $token );\n        $html = '<div class=\"wrap ud-licenses-wrap\">' . \"\\n\";\n        $html .= '<h2 class=\"ud-licenses-title\">' . get_admin_page_title() . '</h2>' . \"\\n\";\n        $html .= '<h2 class=\"nav-tab-wrapper\">' . \"\\n\";\n        $html .= $this->get_navigation_tabs();\n        $html .= '</h2>' . \"\\n\";\n        echo $html;\n        do_action( 'ud_licenses_screen_header_before_content', $token );\n      }\n\n      /**\n       * Generate footer HTML.\n       * @access  public\n       * @since   1.0.0\n       * @return  void\n       */\n      public function get_footer ( $token = 'ud-license-manager', $screen_icon = 'tools' ) {\n        do_action( 'ud_licenses_screen_footer_after_content', $token, $screen_icon );\n        $html = '</div><!--/.wrap ud-licenses-wrap-->' . \"\\n\";\n        echo $html;\n        do_action( 'ud_licenses_screen_after', $token, $screen_icon );\n      }\n\n      /**\n       * Generate navigation tabs HTML, based on a specific admin menu.\n       * @access  public\n       * @since   1.0.0\n       * @return  string/WP_Error\n       */\n      public function get_navigation_tabs () {\n        $html = '';\n\n        $screens = !empty( $this->available_screens ) && is_array( $this->available_screens ) ? $this->available_screens : array();\n        $licenses_url = get_option( $this->token . '-url', '' );\n        \n        $current_tab = self::get_current_screen();\n        if ( 0 < count( $screens ) ) {\n          foreach ( $screens as $k => $v ) {\n            $class = 'nav-tab';\n            if ( $current_tab == $k ) {\n              $class .= ' nav-tab-active';\n            }\n            $url = add_query_arg( 'screen', $k, $licenses_url );\n            $html .= '<a href=\"' . esc_url( $url ) . '\" class=\"' . esc_attr( $class ) . '\">' . esc_html( $v ) . '</a>';\n          }\n        }\n        return $html;\n      }\n\n      /**\n       * Return the token for the current screen.\n       * @access  public\n       * @since   1.0.0\n       * @return  string The token for the current screen.\n       */\n      public function get_current_screen () {\n        $screen = 'licenses'; // Default.\n        if ( isset( $_GET['screen'] ) && '' != $_GET['screen'] ) $screen = esc_attr( $_GET['screen'] );\n        return $screen;\n      }\n      \n    }\n  \n  }\n  \n}"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-update-checker.php",
    "content": "<?php\n/**\n * Update Checker\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Update_Checker' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Update_Checker {\n    \n      /**\n       *\n       */\n      public static $version = '1.0.0';\n      \n      /**\n       * URL to access the Update API Manager.\n       */\n      private $upgrade_url;\n      \n      /**\n       * Changelog\n       */\n      private $changelog;\n      \n      /**\n       * Instance type ( plugin or theme )\n       */\n      private $type;\n      \n      /**\n       * same as plugin slug. if a theme use a theme name like 'twentyeleven'\n       */\n      private $name;\n      \n      /**\n       * Path to plugin/theme file\n       */\n      private $file; \n      \n      /**\n       * Software Title\n       */\n      private $product_id;\n      \n      /**\n       * API License Key\n       */\n      private $api_key;\n      \n      /**\n       * License Email\n       */\n      private $activation_email; \n      \n      /**\n       * URL to renew a license\n       */\n      private $renew_license_url;\n      \n      /**\n       * Instance ID (unique to each blog activation)\n       */\n      private $instance;\n      \n      /**\n       * blog domain name\n       */\n      private $blog;\n      \n      /**\n       *\n       */\n      private $software_version;\n      \n      /**\n       * 'theme' or 'plugin'\n       */\n      private $plugin_or_theme;\n      \n      /**\n       * localization for translation\n       */\n      private $text_domain;\n      \n      /**\n       * Used to send any extra information.\n       */\n      private $extra;\n      \n      /**\n       * Errors\n       */\n      public $errors;\n      \n      /**\n       * Error handler.\n       *\n       */\n      public $errors_callback;\n\n      /**\n       * Constructor.\n       *\n       * @access public\n       * @since  1.0.0\n       * @return void\n       */\n      public function __construct( $args, $errors_callback = false ) {\n        //** API data */\n        $this->upgrade_url \t\t\t  = isset( $args[ 'upgrade_url' ] ) ? $args[ 'upgrade_url' ] : false;\n        $this->type \t\t\t        = isset( $args[ 'type' ] ) ? $args[ 'type' ] : false;\n        $this->name \t\t\t        = isset( $args[ 'name' ] ) ? $args[ 'name' ] : false;\n        $this->file \t\t\t        = isset( $args[ 'file' ] ) ? $args[ 'file' ] : false;\n        $this->product_id \t\t\t  = isset( $args[ 'product_id' ] ) ? $args[ 'product_id' ] : false;\n        $this->api_key \t\t\t\t    = isset( $args[ 'api_key' ] ) ? $args[ 'api_key' ] : false;\n        $this->activation_email   = isset( $args[ 'activation_email' ] ) ? $args[ 'activation_email' ] : false;\n        $this->renew_license_url \t= isset( $args[ 'renew_license_url' ] ) ? $args[ 'renew_license_url' ] : false;\n        $this->instance \t\t\t    = isset( $args[ 'instance' ] ) ? $args[ 'instance' ] : false;\n        $this->software_version \t= isset( $args[ 'software_version' ] ) ? $args[ 'software_version' ] : false;\n        $this->text_domain \t\t\t  = isset( $args[ 'text_domain' ] ) ? $args[ 'text_domain' ] : false;\n        $this->extra \t\t\t\t      = isset( $args[ 'extra' ] ) ? $args[ 'extra' ] : false;\n        $this->changelog \t\t\t\t  = isset( $args[ 'changelog' ] ) ? $args[ 'changelog' ] : false;\n        \n        /**\n         * Some web hosts have security policies that block the : (colon) and // (slashes) in http://,\n         * so only the host portion of the URL can be sent. For example the host portion might be\n         * www.example.com or example.com. http://www.example.com includes the scheme http,\n         * and the host www.example.com.\n         * Sending only the host also eliminates issues when a client site changes from http to https,\n         * but their activation still uses the original scheme.\n         * To send only the host, use a line like the one below:\n         */\n        $this->blog = str_ireplace( array( 'http://', 'https://' ), '', home_url() );\n        \n        $this->errors_callback = $errors_callback;\n        \n        /**\n         * More info:\n         * function set_site_transient moved from wp-includes/functions.php\n         * to wp-includes/option.php in WordPress 3.4\n         *\n         * set_site_transient() contains the pre_set_site_transient_{$transient} filter\n         * {$transient} is either update_plugins or update_themes\n         *\n         * Transient data for plugins and themes exist in the Options table:\n         * _site_transient_update_themes\n         * _site_transient_update_plugins\n         */\n         \n        /**\n         * Plugin Updates\n         */\n        if( $this->type == 'plugin' ) {\n          //** Check For Plugin Updates */\n          add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'update_check' ) );\n          //** Check For Plugin/Theme Information to display on the update details page */\n          add_filter( 'plugins_api', array( $this, 'request' ), 10, 3 );\n        }\n        /**\n         * Theme Updates\n         */\n        elseif ( $this->type == 'theme' ) {\n          add_filter( 'pre_set_site_transient_update_themes', array( $this, 'update_check' ) );\n        }\n\n        add_action( 'wp_ajax_ud_api_dismiss', array( $this, 'dismiss_notices' ) );\n        \n      }\n\n      /**\n       * Upgrade API URL\n       *\n       */\n      private function create_upgrade_api_url( $args ) {\n        $upgrade_url = add_query_arg( 'wc-api', 'upgrade-api', $this->upgrade_url );\n        return $upgrade_url . '&' . http_build_query( $args );\n      }\n\n      /**\n       * Check for updates against the remote server.\n       *\n       * @access public\n       * @since  1.0.0\n       * @param  object $transient\n       * @return object $transient\n       */\n      public function update_check( $transient ) {\n        \n        //** Check if the transient contains the 'checked' information */\n        //** If no, just return its value without hacking it */\n        if ( empty( $transient->checked ) ) {\n          return $transient;\n        }\n        \n        $args = array(\n          'request' => 'pluginupdatecheck',\n          'plugin_name' => $this->name,\n          //'version' => $transient->checked[$this->name],\n          'version' => $this->software_version,\n          'product_id' => $this->product_id,\n          'api_key' => $this->api_key,\n          'activation_email' => $this->activation_email,\n          'instance' => $this->instance,\n          'domain' => $this->blog,\n          'software_version' => $this->software_version,\n          'extra' => $this->extra,\n        );\n\n        //** Check for a plugin update */\n        $response = $this->plugin_information( $args );\n        //** Displays an admin error message in the WordPress dashboard */\n        $this->check_response_for_errors( $response );\n\n        //** Set version variables */\n        if ( isset( $response ) && is_object( $response ) && $response !== false ) {\n          //** New plugin version from the API */\n          $new_ver = (string)$response->new_version;\n          //** Current installed plugin version */\n          $curr_ver = (string)$this->software_version;\n          //$curr_ver = (string)$transient->checked[$this->name];\n        }\n\n        //** If there is a new version, modify the transient to reflect an update is available */\n        if ( isset( $new_ver ) && isset( $curr_ver ) ) {\n          if ( $response !== false && version_compare( $new_ver, $curr_ver, '>' ) ) {\n            if( $this->type == 'plugin' ) {\n              if( isset( $response->slug ) ) {\n                $response->slug = sanitize_title( $response->slug );  \n              }\n              $transient->response[$this->file] = $response;\n            } else {\n              $theme = basename( dirname( $this->file ) );\n              $response = (array)$response;\n              if( empty( $response[ 'url' ] ) ) { \n                $response[ 'url' ] = !empty( $this->changelog ) ? $this->changelog : 'https://www.usabilitydynamics.com';\n              }\n              $transient->response[$theme] = (array)$response;\n            }\n            \n          }\n        }\n        \n        //echo \"<pre>\"; print_r( $this ); echo \"</pre>\"; die();\n        //echo \"<pre>\"; print_r( $transient ); echo \"</pre>\"; die();\n\n        return $transient;\n      }\n\n      /**\n       * Sends and receives data to and from the server API\n       *\n       * @access public\n       * @since  1.0.0\n       * @return object $response\n       */\n      public function plugin_information( $args ) {\n        $target_url = $this->create_upgrade_api_url( $args );\n\n        //** Check licenses keys once per one hour! */\n        $response = get_transient( md5( $target_url ) );\n        if ( false === $response || empty( $response ) ) {\n          //** Add nocache hack. We must be sure we do not get CACHE result. peshkov@UD */\n          $_target_url = $target_url . '&' . http_build_query( array( 'nocache' => rand( 10000, 99999 ) ) );\n          $request = wp_remote_get( $_target_url, array( 'decompress' => false, 'sslverify' => false ) );\n          if ( is_wp_error( $request ) || wp_remote_retrieve_response_code( $request ) != 200 ) {\n            return false;\n          }\n          $response = unserialize( wp_remote_retrieve_body( $request ) );\n\n          if( is_object( $response ) ) {\n            set_transient( md5( $target_url ), json_encode($response), HOUR_IN_SECONDS );\n          }\n        } else {\n          $r = json_decode( $response, true );\n          $response = new \\stdClass();\n          foreach( $r as $k => $v ){\n            $response->{$k} = $v;\n          }\n        }\n\n        //echo \"<pre>\"; print_r( $response ); echo \"</pre>\";\n        if ( is_object( $response ) ) {\n          return $response;\n        } else {\n          return false;\n        }\n      }\n\n      /**\n       * Generic request helper.\n       *\n       * @access public\n       * @since  1.0.0\n       * @param  array $args\n       * @return object $response or boolean false\n       */\n      public function request( $false, $action, $args ) {\n      \n        //** Check if this plugins API is about this plugin */\n        if ( isset( $args->slug ) ) {\n          //** Check if this plugins API is about this plugin */\n          if ( sanitize_key( $args->slug ) != sanitize_key( $this->name ) ) {\n            return $false;\n          }\n        } else {\n          return $false;\n        }\n\n        $args = array(\n          'request' => 'plugininformation',\n          'plugin_name' =>\t$this->name,\n          //'version' =>\t$version->checked[$this->name],\n          'version' =>\t$this->software_version,\n          'product_id' =>\t$this->product_id,\n          'api_key' =>\t$this->api_key,\n          'activation_email' =>\t$this->activation_email,\n          'instance' =>\t$this->instance,\n          'domain' =>\t$this->blog,\n          'software_version' => $this->software_version,\n          'extra' => $this->extra,\n        );\n\n        $response = $this->plugin_information( $args );\n\n        //** If everything is okay return the $response */\n        if ( isset( $response ) && is_object( $response ) && $response !== false ) {\n          return $response;\n        }\n      }\n\n      /**\n       * Displays an admin error message in the WordPress dashboard\n       * @param  array $response\n       * @return string\n       */\n      public function check_response_for_errors( $response ) {\n\n        $this->errors = array();\n      \n        if ( ! empty( $response ) ) {\n\n          $plugins = get_plugins();\n          $name = isset( $plugins[$this->name] ) ? $plugins[$this->name]['Name'] : $this->name;\n          $nonce = wp_create_nonce( 'ud_api_dismiss' );\n          \n          if ( isset( $response->errors['no_key'] ) && $response->errors['no_key'] == 'no_key' && isset( $response->errors['no_subscription'] ) && $response->errors['no_subscription'] == 'no_subscription' ) {\n\n            $no_key_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_no_key', '' );\n            $show_no_key_error = $this->check_dismiss_time( $no_key_dismissed );\n            if( $show_no_key_error ) {\n                $this->errors[] = sprintf( __( 'A license key for %s could not be found. Maybe you forgot to enter a license key when setting up %s, or the key was deactivated in your account. You can reactivate or purchase a license key from your account <a href=\"%s\" target=\"_blank\">Licences</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_no_key\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n            $no_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_no_subscription', '' );\n            $show_no_subscription_error = $this->check_dismiss_time( $no_subscription_dismissed );\n            if( $show_no_subscription_error ) {\n                $this->errors[] = sprintf( __( 'A subscription for %s could not be found. You can purchase a subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_no_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n          } else if ( isset( $response->errors['exp_license'] ) && $response->errors['exp_license'] == 'exp_license' ) {\n\n            $exp_license_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_exp_license', '' );\n            $show_exp_license_error = $this->check_dismiss_time( $exp_license_dismissed );\n            if( $show_exp_license_error ) {\n                $this->errors[] = sprintf( __( 'The license key for %s has expired. You can reactivate or get a license key from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_exp_license\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n          }  else if ( isset( $response->errors['hold_subscription'] ) && $response->errors['hold_subscription'] == 'hold_subscription' ) {\n\n            $hold_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_hold_subscription', '' );\n            $show_hold_subscription_error = $this->check_dismiss_time( $hold_subscription_dismissed );\n            if( $show_hold_subscription_error ) {\n                $this->errors[] = sprintf( __( 'The subscription for %s is on-hold. You can reactivate the subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_hold_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n          } else if ( isset( $response->errors['cancelled_subscription'] ) && $response->errors['cancelled_subscription'] == 'cancelled_subscription' ) {\n\n            $cancelled_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_cancelled_subscription', '' );\n            $show_cancelled_subscription_error = $this->check_dismiss_time( $cancelled_subscription_dismissed );\n            if( $show_cancelled_subscription_error ) {\n                $this->errors[] = sprintf( __( 'The subscription for %s has been cancelled. You can renew the subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a>. A new license key will be emailed to you after your order has been completed. <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_cancelled_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n          } else if ( isset( $response->errors['exp_subscription'] ) && $response->errors['exp_subscription'] == 'exp_subscription' ) {\n\n            $exp_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_exp_subscription', '' );\n            $show_exp_subscription_error = $this->check_dismiss_time( $exp_subscription_dismissed );\n            if( $show_exp_subscription_error ) {\n                $this->errors[] = sprintf( __( 'The subscription for %s has expired. You can reactivate the subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_exp_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce ) ;\n            }\n\n          } else if ( isset( $response->errors['suspended_subscription'] ) && $response->errors['suspended_subscription'] == 'suspended_subscription' ) {\n\n            $suspended_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_suspended_subscription', '' );\n            $show_suspended_subscription_error = $this->check_dismiss_time( $suspended_subscription_dismissed );\n            if( $show_suspended_subscription_error ) {\n                $this->errors[] = sprintf( __( 'The subscription for %s has been suspended. You can reactivate the subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_suspended_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce ) ;\n            }\n\n          } else if ( isset( $response->errors['pending_subscription'] ) && $response->errors['pending_subscription'] == 'pending_subscription' ) {\n\n            $pending_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_pending_subscription', '' );\n            $show_pending_subscription_error = $this->check_dismiss_time( $pending_subscription_dismissed );\n            if( $show_pending_subscription_error ) {\n                $this->errors[] = sprintf( __( 'The subscription for %s is still pending. You can check on the status of the subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_pending_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce ) ;\n            }\n\n          } else if ( isset( $response->errors['trash_subscription'] ) && $response->errors['trash_subscription'] == 'trash_subscription' ) {\n\n            $trash_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_trash_subscription', '' );\n            $show_trash_subscription_error = $this->check_dismiss_time( $trash_subscription_dismissed );\n            if( $show_trash_subscription_error ) {\n                $this->errors[] = sprintf( __( 'The subscription for %s has been placed in the trash and will be deleted soon. You can get a new subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_trash_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce ) ;\n            }\n\n          } else if ( isset( $response->errors['no_subscription'] ) && $response->errors['no_subscription'] == 'no_subscription' ) {\n\n            $no_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_no_subscription', '' );\n            $show_no_subscription_error = $this->check_dismiss_time( $no_subscription_dismissed );\n            if( $show_no_subscription_error ) {\n                $this->errors[] = sprintf( __( 'A subscription for %s could not be found. You can get a subscription from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_no_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n          } else if ( isset( $response->errors['no_activation'] ) && $response->errors['no_activation'] == 'no_activation' ) {\n\n            $no_activation_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_no_activation', '' );\n            $show_no_activation_error = $this->check_dismiss_time( $no_activation_dismissed );\n            if( $show_no_activation_error ) {\n                $this->errors[] = sprintf( __( '%s has not been activated. Go to the settings page and enter the license key and license email to activate %s. <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_no_activation\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $name, sanitize_key( $name ), $nonce ) ;\n            }\n\n          } else if ( isset( $response->errors['no_key'] ) && $response->errors['no_key'] == 'no_key' ) {\n\n            $no_key_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_no_key', '' );\n            $show_no_key_error = $this->check_dismiss_time( $no_key_dismissed );\n            if( $show_no_key_error ) {\n                $this->errors[] = sprintf( __( 'A license key for %s could not be found. Maybe you forgot to enter a license key when setting up %s, or the key was deactivated in your account. You can reactivate or get a license key from your account <a href=\"%s\" target=\"_blank\">Licences</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_no_key\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $name, $this->renew_license_url, sanitize_key( $name ), $nonce );\n            }\n\n          } else if ( isset( $response->errors['download_revoked'] ) && $response->errors['download_revoked'] == 'download_revoked' ) {\n\n            $download_revoked_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_download_revoked', '' );\n            $show_download_revoked_error = $this->check_dismiss_time( $download_revoked_dismissed );\n            if( $show_download_revoked_error ) {\n                $this->errors[] = sprintf( __( 'Download permission for %s has been revoked possibly due to a license key or subscription expiring. You can reactivate or get a license key from your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_download_revoked\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce ) ;\n            }\n\n          } else if ( isset( $response->errors['switched_subscription'] ) && $response->errors['switched_subscription'] == 'switched_subscription' ) {\n\n            $switched_subscription_dismissed = get_option( 'dismissed_error_' .  sanitize_key( $name ) . '_switched_subscription', '' );\n            $show_switched_subscription_error = $this->check_dismiss_time( $switched_subscription_dismissed );\n            if( $show_switched_subscription_error ) {\n                $this->errors[] = sprintf( __( 'You changed the subscription for %s, so you will need to enter your new API License Key in the settings page. The License Key should have arrived in your email inbox, if not you can get it by logging into your account <a href=\"%s\" target=\"_blank\">dashboard</a> | <a class=\"dismiss-error dismiss\" data-key=\"dismissed_error_%s_switched_subscription\" data-nonce=\"%s\" href=\"#\">dismiss</a>.', $this->text_domain ), $name, $this->renew_license_url, sanitize_key( $name ), $nonce ) ;\n            }\n\n          }\n\n        }\n        \n        if( !empty( $this->errors ) ) {\n          add_action('admin_notices', array( $this, 'print_errors') );\n        }\n\n      }\n      \n      /**\n       * Maybe print admin notices\n       */\n      public function print_errors() {\n        if( !empty( $this->errors ) && is_array( $this->errors ) ) {\n          foreach( $this->errors as $error ) {\n            echo '<div id=\"message\" class=\"error\"><p>' . $error . '</p></div>';\n          }\n          $this->print_scripts();\n        }\n      }\n\n      /**\n       * print script for ajax\n       */\n      public function print_scripts() {\n            ob_start();\n            ?>\n            <script type=\"text/javascript\">\n                jQuery( document ).ready( function () {\n\n                    jQuery( '.error' ).on( 'click', '.dismiss', function(e){\n                        e.preventDefault();\n\n                        var _this = jQuery( this );\n\n                        var data = {\n                            action: 'ud_api_dismiss',\n                            key: _this.data('key'),\n                            _ajax_nonce: _this.data('nonce'),\n                        }\n\n                        jQuery.post( \"<?php echo admin_url( 'admin-ajax.php' ); ?>\", data, function ( result_data ) {\n                            if( result_data.success == '1' ) {\n                                _this.closest('.error').remove();\n                            } else if ( result_data.success == '0' ) {\n                                console.error(result_data.error);\n                            }\n                        }, \"json\" );\n\n                    });\n\n                } );\n            </script>\n            <?php\n            echo ob_get_clean();\n        }\n\n        /**\n         * Check dismiss notice timestamp if greater than 24 hrs\n         *\n         * @param string $time\n         *\n         * @return bool\n         */\n        public function check_dismiss_time( $time = '' ) {\n            if( empty( $time ) ) {\n                return true;\n            }\n            $current_time = time();\n            $diff = $current_time - 86400;\n            if ( $diff > (int)$time ) {\n                return true;\n            }\n            return false;\n        }\n\n        /**\n         * dismiss the notice ajax callback\n         * @throws \\Exception\n         */\n        public function dismiss_notices(){\n          check_ajax_referer('ud_api_dismiss');\n\n          if ( !is_user_logged_in() ) {\n            wp_send_json_error( array( 'error' => __( 'You are not allowed to do this action.', $this->text_domain ) ) );\n          }\n\n          $response = array(\n              'success' => '0',\n              'error' => __( 'There was an error in request.', $this->text_domain ),\n          );\n\n          $error = false;\n\n          $option_key = isset($_POST['key']) ? sanitize_key($_POST['key']) : '';\n\n          if ( strpos($option_key, 'dismissed_') !== 0 ) {\n            $response['error'] = __( 'Invalid key', $this->domain );\n            $error = true;\n          }\n  \n          if ( !$error && update_option( $option_key, time() ) ) {\n            $response['success'] = '1';\n            $response['error'] = null;\n          }\n  \n          wp_send_json( $response );\n        }\n\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/lib/classes/class-utility.php",
    "content": "<?php\n/**\n * Screen UI\n *\n * @namespace UsabilityDynamics\n *\n */\nnamespace UsabilityDynamics\\UD_API {\n\n  if( !class_exists( 'UsabilityDynamics\\UD_API\\Utility' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Utility {\n      \n\n      /**\n       * Returns current url\n       *\n       * @param mixed $args GET args which should be added to url\n       * @param mixed $except_args GET args which will be removed from URL if they exist\n       *\n       * @return string\n       * @author peshkov@UD\n       */\n      static public function current_url( $args = array(), $except_args = array() ) {\n        $url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];\n\n        $args        = wp_parse_args( $args );\n        $except_args = wp_parse_args( $except_args );\n\n        if( !empty( $args ) ) {\n          foreach( (array) $args as $k => $v ) {\n            if( is_string( $v ) ) $url = add_query_arg( $k, $v, $url );\n          }\n        }\n\n        if( !empty( $except_args ) ) {\n          foreach( (array) $except_args as $arg ) {\n            if( is_string( $arg ) ) $url = remove_query_arg( $arg, $url );\n          }\n        }\n\n        return $url;\n      }\n     \n    }\n  \n  }\n  \n}"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/package.json",
    "content": "{\n  \"name\": \"lib-ud-api-client\",\n  \"version\": \"1.2.5\",\n  \"description\": \"UD Client for WooCommerce API Manager\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/udx/lib-ud-api-client\"\n  },\n  \"engines\": {\n    \"node\": \">= 0.10.0\"\n  },\n  \"dependencies\": {\n    \"load-grunt-tasks\": \"^0.6.0\"\n  },\n  \"devDependencies\": {\n    \"grunt\": \"^0.4.5\",\n    \"grunt-contrib-clean\": \"~0.5.0\",\n    \"grunt-contrib-concat\": \"~0.3.0\",\n    \"grunt-contrib-less\": \"~0.8.3\",\n    \"grunt-contrib-uglify\": \"~0.2.4\",\n    \"grunt-contrib-watch\": \"~0.5.3\",\n    \"grunt-contrib-yuidoc\": \"~0.5.0\",\n    \"grunt-markdown\": \"~0.4.0\",\n    \"grunt-shell\": \"~0.6.0\",\n    \"grunt-phpunit\": \"~0.3.3\"\n  }\n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/readme.md",
    "content": "### UD API Client for WooCommerce API Manager\n\n[![Stories](https://badge.waffle.io/usabilitydynamics/lib-ud-api-client.png?label=ready&title=Ready)](https://waffle.io/usabilitydynamics/lib-ud-api-client)\n[![Dependency](https://gemnasium.com/UsabilityDynamics/lib-ud-api-client.svg)](https://gemnasium.com/UsabilityDynamics/lib-ud-api-client)\n[![Scrutinizer](http://img.shields.io/scrutinizer/g/UsabilityDynamics/lib-ud-api-client.svg)](httpshttps://scrutinizer-ci.com/g/UsabilityDynamics/lib-ud-api-client)\n[![Scrutinizer Coverage](http://img.shields.io/scrutinizer/coverage/g/UsabilityDynamics/lib-ud-api-client.svg)](https://scrutinizer-ci.com/g/UsabilityDynamics/lib-ud-api-client)\n\n### API\n\nEvery API request is being done only for every product separately. So, e.g., if user has installed and activated four products, it does four API requests to UD to determine current status for every product separately. \n\n#### Status\n\nDetermines if product is activated on UD or not.\nIn case product is not activated on UD it will be deactivated on client's site.\n\nRequest is being called in the following cases:\n* on loading 'Installed Plugins' page once per 12 hours.\n* on loading 'Add-ons' ( licenses ) page every time.\n\nNote, 'Status' request on loading 'Add-ons' ( licenses ) page must be called every time to be synced with UD server since user can directly remove activated license on their account on UD site. \n\n```php\n$api = new UsabilityDynamics\\UD_API\\API( $args );\n\n$api->status( array(\n\t// Unique product ID. See composer.json extra:schemas:licenses:product:product_id\n\t'product_id' => $product_id,\n\t// Unique hash, which generated at once on site and belongs to specific product.\n\t// In general instance used on UD to relate current license to specific domain.\n\t'instance' => $instance,\n\t// Not used anymore. But can be included reverted to be used if needed.\n\t'email' => $email,\n\t// Client's License key\n\t'licence_key' => $license_key,\n) );\n```\n\n#### Activate\n\nRequest is being called in the following case:\n- on product activating on 'Add-ons' ( licenses ) page.\n\n```php\n$api = new UsabilityDynamics\\UD_API\\API( $args );\n\n$api->activate( array(\n\t// Unique product ID. See composer.json extra:schemas:licenses:product:product_id\n\t'product_id' => $product_id,\n\t// Unique hash, which generated at once on site and belongs to specific product.\n  // In general instance used on UD to relate current license to specific domain.\n  'instance' => $instance,\n\t// Version of product\n\t'software_version'  => $product_version,\n\t// Client's License key\n\t'licence_key' => $license_key,\n\t// Not used anymore. But can be included reverted to be used if needed.\n\t'email'             => $email,\n), $product );\n```\n\n#### Deactivate\n\nRequest is being called in the following case:\n- on product deactivating on 'Add-ons' ( licenses ) page.\n\n```php\n$api = new UsabilityDynamics\\UD_API\\API( $args );\n\n$api->deactivate( array(\n\t// Unique product ID. See composer.json extra:schemas:licenses:product:product_id\n\t'product_id' => $product_id,\n\t// Unique hash, which generated at once on site and belongs to specific product.\n  // In general instance used on UD to relate current license to specific domain.\n  'instance' => $instance,\n\t// Client's License key\n\t'licence_key' => $license_key,\n\t// Not used anymore. But can be included reverted to be used if needed.\n\t'email'             => $email,\n), $product );\n```\n\n#### Update Checker\n\nUpdate Checker is being initialized only for installed and activated plugins / theme.\n\nResponses are being cached via transient up to one hour.\n\nAttention, be sure, that temp download link expires more then in one hour ( UD generates temp link to Amazon for downloading the product ).\n\n##### Plugin\n\nAdds the following filters\n```php\n$update_checker = new UsabilityDynamics\\UD_API\\Update_Checker($args);\n\n//** Check For Plugin Updates */\nadd_filter( 'pre_set_site_transient_update_plugins', array( $update_checker, 'update_check' ) );\n//** Check For Plugin Information to display on the update details page */\nadd_filter( 'plugins_api', array( $update_checker, 'request' ), 10, 3 );\n```\n\n##### Theme\n\nAdds the following filters\n```php\n$update_checker = new UsabilityDynamics\\UD_API\\Update_Checker($args);\n\n//** Check For Plugin Updates */\nadd_filter( 'pre_set_site_transient_update_themes', array( $update_checker, 'update_check' ) );\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/static/css/admin.css",
    "content": ".ud-licenses-wrap div.updated,\n.ud-licenses-wrap div.error {\n  margin-top: 1em;\n  margin-bottom: 0;\n}\n.ud-licenses-wrap .licenses-notice {\n  margin-top: 1em;\n  margin-bottom: 0;\n  background-color: #fff;\n  border-left: 4px solid #7ad03a;\n  box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);\n  padding: 1px 12px;\n}\n.ud-licenses-wrap .ninja {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 20px;\n  width: 125px;\n  background: #42a2ce;\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n.ud-licenses-wrap .ninja img {\n  width: 100%;\n  height: auto;\n}\n.ud-licenses-wrap .feature-section ul {\n  margin-bottom: 4em;\n  padding-bottom: 1em;\n}\n.ud-licenses-wrap .feature-section li {\n  margin-left: 1.2em;\n  font-size: 13px;\n}\n.ud-licenses-wrap .feature-section img {\n  width: 75px;\n  height: 75px;\n  float: right !important;\n  margin-bottom: 1em;\n  background: none;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border: 0;\n}\n.ud-licenses-wrap .panic-button-wrap {\n  padding: 40px;\n  width: 100% !important;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  background-color: #fff;\n  overflow: hidden;\n  zoom: 1;\n  text-align: center;\n  margin: 0 auto 20px;\n  -webkit-border-radius: 4px;\n  border-radius: 4px;\n}\n.ud-licenses-wrap .panic-button-wrap a {\n  text-decoration: none;\n}\n.ud-licenses-wrap .panic-button-wrap em {\n  display: block;\n  font-style: normal;\n  color: #666;\n}\n.ud-licenses-wrap .panic-button-wrap a {\n  display: block;\n  position: relative;\n  outline: none;\n}\n.ud-licenses-wrap .panic-button-wrap a:before {\n  content: \"\";\n  display: block;\n  height: 6em;\n  width: 6em;\n  background: red;\n  margin: 0 auto 1.618em;\n  -webkit-border-radius: 100%;\n  border-radius: 100%;\n  background: #ff3019;\n  background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404));\n  background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%);\n  background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%);\n  background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%);\n  background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);\n  border: 3px solid #b60404;\n  -webkit-box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.3), 0 0 0 0.618em #eeeeee;\n  box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.3), 0 0 0 0.618em #eeeeee;\n}\n.ud-licenses-wrap .panic-button-wrap a:hover:before {\n  background: #ff4635;\n  background: -moz-linear-gradient(top, #ff4635 0%, #ce2727 100%);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff4635), color-stop(100%, #ce2727));\n  background: -webkit-linear-gradient(top, #ff4635 0%, #ce2727 100%);\n  background: -o-linear-gradient(top, #ff4635 0%, #ce2727 100%);\n  background: -ms-linear-gradient(top, #ff4635 0%, #ce2727 100%);\n  background: linear-gradient(to bottom, #ff4635 0%, #ce2727 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4635', endColorstr='#ce2727', GradientType=0);\n}\n.ud-licenses-wrap .panic-button-wrap a:active:before {\n  background: #cf0404;\n  background: -moz-linear-gradient(top, #cf0404 0%, #ff3019 100%);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #cf0404), color-stop(100%, #ff3019));\n  background: -webkit-linear-gradient(top, #cf0404 0%, #ff3019 100%);\n  background: -o-linear-gradient(top, #cf0404 0%, #ff3019 100%);\n  background: -ms-linear-gradient(top, #cf0404 0%, #ff3019 100%);\n  background: linear-gradient(to bottom, #cf0404 0%, #ff3019 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cf0404', endColorstr='#ff3019', GradientType=0);\n}\n.ud-licenses-wrap .wp-list-table.products .plugin-icon img {\n  width: 100%;\n}\n"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/static/css/src/admin.less",
    "content": ".ud-licenses-wrap {\n\tdiv.updated, div.error {\n\t\tmargin-top: 1em;\n\t\tmargin-bottom: 0;\n\t}\n  .licenses-notice {\n    margin-top: 1em;\n\t\tmargin-bottom: 0;\n    background-color: #fff;\n    border-left: 4px solid #7ad03a;\n    box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);\n    padding: 1px 12px;\n  }\n\t.ninja {\n\t\tposition: absolute;\n\t\ttop:0;\n\t\tright:0;\n\t\tpadding:20px;\n\t\twidth:125px;\n\t\tbackground: #42a2ce;\n\t\t-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n\t\tbox-shadow: 0 1px 3px rgba(0,0,0,0.2);\n\t\timg {\n\t\t\twidth:100%;\n\t\t\theight: auto;\n\t\t}\n\t}\n\t.feature-section {\n\t\tul {\n\t\t\tmargin-bottom:4em;\n\t\t\tpadding-bottom:1em;\n\t\t}\n\t\tli {\n\t\t\tmargin-left: 1.2em;\n\t\t\tfont-size:13px;\n\t\t}\n\t\timg {\n\t\t\twidth:75px;\n\t\t\theight: 75px;\n\t\t\tfloat: right !important;\n\t\t\tmargin-bottom:1em;\n\t\t\tbackground: none;\n\t\t\t-webkit-box-shadow:none;\n\t\t\t-moz-box-shadow:none;\n\t\t\tbox-shadow:none;\n\t\t\tborder:0;\n\t\t}\n\t}\n\t.panic-button-wrap {\n\t\tpadding: 40px;\n\t\twidth:100% !important;\n\t\t-webkit-box-sizing: border-box;\n\t\t-moz-box-sizing: border-box;\n\t\tbox-sizing: border-box;\n\t\tbackground-color: #fff;\n\t\toverflow: hidden;\n\t\tzoom:1;\n\t\ttext-align: center;\n\t\tmargin:0 auto 20px;\n\t\t-webkit-border-radius:4px;\n\t\tborder-radius:4px;\n\t\ta {\n\t\t\ttext-decoration: none;\n\t\t}\n\t\tem {\n\t\t\tdisplay: block;\n\t\t\tfont-style: normal;\n\t\t\tcolor: #666;\n\t\t}\n\t\ta {\n\t\t\tdisplay: block;\n\t\t\tposition: relative;\n\t\t\toutline: none;\n\t\t\t&:before {\n\t\t\t\tcontent: \"\";\n\t\t\t\tdisplay:block;\n\t\t\t\theight:6em;\n\t\t\t\twidth:6em;\n\t\t\t\tbackground: red;\n\t\t\t\tmargin:0 auto 1.618em;\n\t\t\t\t-webkit-border-radius:100%;\n\t\t\t\tborder-radius:100%;\n\t\t\t\tbackground: rgb(255,48,25);\n\t\t\t\tbackground: -moz-linear-gradient(top,  rgba(255,48,25,1) 0%, rgba(207,4,4,1) 100%);\n\t\t\t\tbackground: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,48,25,1)), color-stop(100%,rgba(207,4,4,1)));\n\t\t\t\tbackground: -webkit-linear-gradient(top,  rgba(255,48,25,1) 0%,rgba(207,4,4,1) 100%);\n\t\t\t\tbackground: -o-linear-gradient(top,  rgba(255,48,25,1) 0%,rgba(207,4,4,1) 100%);\n\t\t\t\tbackground: -ms-linear-gradient(top,  rgba(255,48,25,1) 0%,rgba(207,4,4,1) 100%);\n\t\t\t\tbackground: linear-gradient(to bottom,  rgba(255,48,25,1) 0%,rgba(207,4,4,1) 100%);\n\t\t\t\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff3019', endColorstr='#cf0404',GradientType=0 );\n\t\t\t\tborder:3px solid darken(#cf0404,5%);\n\t\t\t\t-webkit-box-shadow:\n\t\t\t\t\tinset 0 1px 1px rgba(255,255,255,0.3),\n\t\t\t\t\t0 0 0 .618em #eee;\n\t\t\t\tbox-shadow:\n\t\t\t\t\tinset 0 1px 1px rgba(255,255,255,0.3),\n\t\t\t\t\t0 0 0 .618em #eee;\n\t\t\t}\n\t\t\t&:hover {\n\t\t\t\t&:before {\n\t\t\t\t\tbackground: rgb(255,70,53);\n\t\t\t\t\tbackground: -moz-linear-gradient(top,  rgba(255,70,53,1) 0%, rgba(206,39,39,1) 100%);\n\t\t\t\t\tbackground: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,70,53,1)), color-stop(100%,rgba(206,39,39,1)));\n\t\t\t\t\tbackground: -webkit-linear-gradient(top,  rgba(255,70,53,1) 0%,rgba(206,39,39,1) 100%);\n\t\t\t\t\tbackground: -o-linear-gradient(top,  rgba(255,70,53,1) 0%,rgba(206,39,39,1) 100%);\n\t\t\t\t\tbackground: -ms-linear-gradient(top,  rgba(255,70,53,1) 0%,rgba(206,39,39,1) 100%);\n\t\t\t\t\tbackground: linear-gradient(to bottom,  rgba(255,70,53,1) 0%,rgba(206,39,39,1) 100%);\n\t\t\t\t\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff4635', endColorstr='#ce2727',GradientType=0 );\n\t\t\t\t}\n\t\t\t}\n\t\t\t&:active {\n\t\t\t\t&:before {\n\t\t\t\t\tbackground: rgb(207,4,4);\n\t\t\t\t\tbackground: -moz-linear-gradient(top,  rgba(207,4,4,1) 0%, rgba(255,48,25,1) 100%);\n\t\t\t\t\tbackground: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(207,4,4,1)), color-stop(100%,rgba(255,48,25,1)));\n\t\t\t\t\tbackground: -webkit-linear-gradient(top,  rgba(207,4,4,1) 0%,rgba(255,48,25,1) 100%);\n\t\t\t\t\tbackground: -o-linear-gradient(top,  rgba(207,4,4,1) 0%,rgba(255,48,25,1) 100%);\n\t\t\t\t\tbackground: -ms-linear-gradient(top,  rgba(207,4,4,1) 0%,rgba(255,48,25,1) 100%);\n\t\t\t\t\tbackground: linear-gradient(to bottom,  rgba(207,4,4,1) 0%,rgba(255,48,25,1) 100%);\n\t\t\t\t\tfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cf0404', endColorstr='#ff3019',GradientType=0 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.wp-list-table.products {\n\t\t.plugin-icon {\n\t\t\timg {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/static/templates/admin-notice.php",
    "content": "<?php\n/**\n * Admin Notice\n */\n?>\n<style>\n  .ud-ping-notice.updated {\n    padding: 11px;\n    position: relative;\n    border-left: 4px solid #f29816;\n    background: -moz-linear-gradient(left,  rgba(240,83,35,0.03) 0%, rgba(240,85,37,0.03) 1%, rgba(254,255,255,1) 100%);\n    background: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(240,83,35,0.03)), color-stop(1%,rgba(240,85,37,0.03)), color-stop(100%,rgba(254,255,255,1)));\n    background: -webkit-linear-gradient(left,  rgba(240,83,35,0.03) 0%,rgba(240,85,37,0.03) 1%,rgba(254,255,255,1) 100%);\n    background: -o-linear-gradient(left,  rgba(240,83,35,0.03) 0%,rgba(240,85,37,0.03) 1%,rgba(254,255,255,1) 100%);\n    background: -ms-linear-gradient(left,  rgba(240,83,35,0.03) 0%,rgba(240,85,37,0.03) 1%,rgba(254,255,255,1) 100%);\n    background: linear-gradient(to right,  rgba(240,83,35,0.03) 0%,rgba(240,85,37,0.03) 1%,rgba(254,255,255,1) 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#08f05323', endColorstr='#feffff',GradientType=1 );\n\n    -webkit-box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1);\n    -moz-box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1);\n    box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1);\n  }\n  .ud-ping-notice.updated a {\n    color: #ef5222;\n    font-weight: 500;\n  }\n  .ud-ping-notice.updated a:hover {\n    color: #cf481f;\n  }\n  .ud-ping-notice-content {\n    font-size: 16px;\n    line-height: 21px;\n    font-weight: 400;\n    margin-bottom: 36px;\n  }\n  .ud-ping-notice-dismiss {\n    position: absolute;\n    bottom: 11px;\n    font-size: 14px;\n  }\n  .ud-ping-notice-icon {\n    float: right;\n    text-align: left;\n    max-width: 75px;\n    margin-right: 10px;\n  }\n  .ud-ping-notice-icon {\n    background: url( \"<?php echo $icon; ?>\" ) center center no-repeat;\n    background-size: cover;\n    width: 75px;\n    height: 75px;\n    display: inline-block;\n  }\n  .ud-ping-notice-clear {\n    display: block;\n    clear: both;\n    height: 1px;\n    line-height: 1px;\n    font-size: 1px;\n    margin: -1px 0 0 0;\n    padding: 0;\n  }\n</style>\n<div class=\"ud-ping-notice updated fade\">\n  <?php if( !empty( $icon ) ) : ?>\n    <div class=\"ud-ping-notice-icon\"></div>\n  <?php endif; ?>\n  <div class=\"ud-ping-notice-content\">\n    <?php if( !empty( $notice ) ) echo $notice; ?>\n    <?php if( !empty( $dismiss_url ) ) : ?>\n      <div class=\"ud-ping-notice-dismiss\">\n        <?php printf( __( '<a href=\"%s\" class=\"\">Dismiss this notice</a>' ), $dismiss_url ); ?>\n      </div>\n    <?php endif; ?>\n  </div>\n  <div class=\"ud-ping-notice-clear\"></div>\n</div>"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/static/templates/screen-manage-plugin.php",
    "content": "<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>\n\n<div id=\"col-container\" class=\"<?php //about-wrap ?>\">\n  <?php\n  echo '<div class=\"licenses-notice\">' . wpautop( sprintf( __( 'See below for a list of %s Plugins active on %s. You can %s, as well as our %s on how this works. %s', $this->domain ), $this->name, get_bloginfo( 'name' ), '<a target=\"_blank\" href=\"'. trailingslashit( $this->api_url ) .'account\">view your licenses here</a>', '<a target=\"_blank\" href=\"https://www.usabilitydynamics.com/docs/products-installation/\">documentation</a>', '&nbsp;&nbsp;<a href=\"' . esc_url( admin_url( 'update-core.php' ) ) . '\" class=\"button\">' . __( 'Check for Updates', $this->domain ) . '</a>' ) ) . '</div>' . \"\\n\";\n  ?>\n  <div>\n    <form id=\"activate-products\" method=\"post\" action=\"\" class=\"validate\">\n      <input type=\"hidden\" name=\"action\" value=\"activate-products\" />\n      <input type=\"hidden\" name=\"page\" value=\"<?php echo esc_attr( $this->page_slug ); ?>\" />\n      <?php\n      //echo \"<pre>\"; print_r( $this ); echo \"</pre>\"; die();\n      $this->list_table = new UsabilityDynamics\\UD_API\\Licenses_Table( array(\n        'name' => $this->name,\n        'domain' => $this->domain,\n        'page' => $this->menu_slug,\n      ) );\n      $this->list_table->data = $this->get_detected_products();\n      $this->list_table->prepare_items();\n      $this->list_table->display();\n      submit_button( __( 'Activate Products', $this->domain ), 'button-primary' );\n      ?>\n    </form>\n  </div><!--/.col-wrap-->\n</div><!--/#col-container-->"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/static/templates/screen-manage-theme.php",
    "content": "<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>\n\n<div id=\"col-container\" class=\"<?php //about-wrap ?>\">\n  <?php\n  echo '<div class=\"licenses-notice\">' . wpautop( sprintf( __( '%s theme requires activation. You can %s, as well as our %s on how this works. %s', $this->domain ), $this->name, '<a target=\"_blank\" href=\"'. trailingslashit( $this->api_url ) .'account\">view your licenses here</a>', '<a target=\"_blank\" href=\"https://www.usabilitydynamics.com/docs/products-installation/\">documentation</a>', '&nbsp;&nbsp;<a href=\"' . esc_url( admin_url( 'update-core.php' ) ) . '\" class=\"button\">' . __( 'Check for Updates', $this->domain ) . '</a>' ) ) . '</div>' . \"\\n\";\n  ?>\n  <div>\n    <form id=\"activate-products\" method=\"post\" action=\"\" class=\"validate\">\n      <input type=\"hidden\" name=\"action\" value=\"activate-products\" />\n      <input type=\"hidden\" name=\"page\" value=\"<?php echo esc_attr( $this->page_slug ); ?>\" />\n      <?php\n      //echo \"<pre>\"; print_r( $this->get_detected_products() ); echo \"</pre>\"; die();\n      $this->list_table = new UsabilityDynamics\\UD_API\\Licenses_Table( array(\n        'name' => $this->name,\n        'domain' => $this->domain,\n        'page' => $this->menu_slug,\n      ) );\n      $this->list_table->data = $this->get_detected_products();\n      $this->list_table->prepare_items();\n      $this->list_table->display();\n      submit_button( __( 'Activate', $this->domain ), 'button-primary' );\n      ?>\n    </form>\n  </div><!--/.col-wrap-->\n</div><!--/#col-container-->"
  },
  {
    "path": "vendor/udx/lib-ud-api-client/static/templates/screen-more.php",
    "content": "<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>\n\n<div id=\"col-container\" class=\"<?php //about-wrap ?>\">\n  <div>\n    <?php\n      $this->list_table = new UsabilityDynamics\\UD_API\\More_Products_Table( array(\n        'name' => $this->name,\n        'domain' => $this->domain,\n        'page' => $this->menu_slug,\n      ) );\n\n      if(is_wp_error($this->error)){\n        $this->list_table->error = $this->error;\n      }\n      \n      $this->list_table->data = $this->more_products;\n      $this->list_table->prepare_items();\n      $this->list_table->display();\n    ?>\n  </div><!--/.col-wrap-->\n</div><!--/#col-container-->"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/.gitignore",
    "content": "temp\nnode_modules\nnpm-debug.log\n\n.svn\n.idea\n.idea/workspace.xml\n.DS_Store\n.dynamic\n.Trashes\n*.sublime-project\n*.sublime-workspace\n._*\n\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/changes.md",
    "content": "### 1.3.4\n\n* Fix notice about translations loaded too soon\n\n### 1.3.3\n\n* Require user to be logged in while dismissing Admin Panel notices.\n\n### 1.3.2\n\n* Improve security while processing AJAX requests in Admin Panel.\n\n### 1.3.1\n\n* Remove dependency from `udx/lib-utility`.\n\n### 1.2.2\n\n* Fixed `path` utility function: detecting if dir belongs to plugins directory by `WP_PLUGIN_DIR`, but not only by deprecated `PLUGINDIR`."
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/composer.json",
    "content": "{\n  \"name\": \"udx/lib-wp-bootstrap\",\n  \"description\": \"Wordpress bootstrap library created by UsabilityDynamics\",\n  \"homepage\": \"https://github.com/udx/lib-wp-bootstrap\",\n  \"keywords\": [\n    \"wordpress\"\n  ],\n  \"minimum-stability\": \"dev\",\n  \"license\": \"MIT\",\n  \"require\": {\n    \"php\": \">=5.3\"\n  },\n  \"autoload\": {\n    \"classmap\": [ \"lib/classes\" ]\n  }\n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-bootstrap-plugin.php",
    "content": "<?php\n/**\n * Bootstrap\n *\n * @namespace UsabilityDynamics\n *\n * This file can be used to bootstrap any of the UD plugins.\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !class_exists( 'UsabilityDynamics\\WP\\Bootstrap_Plugin' ) ) {\n\n    /**\n     * Bootstrap the plugin in WordPress.\n     *\n     * @class Bootstrap\n     * @author: peshkov@UD\n     */\n    class Bootstrap_Plugin extends Bootstrap {\n    \n      public static $version = '1.0.4';\n      \n      public $type = 'plugin';\n      \n      /**\n       * Constructor\n       * Attention: MUST NOT BE CALLED DIRECTLY! USE get_instance() INSTEAD!\n       *\n       * @author peshkov@UD\n       */\n      protected function __construct( $args ) {\n        parent::__construct( $args );\n        //** Maybe define license client */\n        $this->define_license_client();\n        //** Load text domain */\n        add_action( 'init', array( $this, 'load_textdomain' ), 1 );\n        //** May be initialize Licenses Manager. */\n        add_action( 'plugins_loaded', array( $this, 'define_license_manager' ), 1 );\n        //** Initialize plugin here. All plugin actions must be added on this step */\n        add_action( 'plugins_loaded', array( $this, 'pre_init' ), 100 );\n        //** TGM Plugin activation. */\n        add_action( 'plugins_loaded', array( $this, 'check_plugins_requirements' ), 10 );\n        $this->boot();\n      }\n      \n      /**\n\t     * Determine if we have errors before plugin initialization!\n\t     *\n       * @since 1.0.3\n\t     */\n      public function pre_init() {\n        //** Be sure we do not have errors. Do not initialize plugin if we have them. */\n        if( $this->has_errors() ) {\n          return null;\n        }\n        $this->init();\n      }\n\n\t    /**\n\t     * Returns absolute DIR or URL path\n\t     *\n\t     * @since 1.0.2\n\t     *\n\t     * @param $short_path\n\t     * @param string $type\n\t     *\n\t     * @return bool|string\n\t     */\n      public function path( $short_path, $type = 'url' ) {\n        switch( $type ) {\n          case 'url':\n            return $this->root_url . ltrim( $short_path, '/\\\\' );\n            break;\n          case 'dir':\n            return $this->root_path . ltrim( $short_path, '/\\\\' );\n            break;\n        }\n        return false;\n      }\n      \n      /**\n       * Called in the end of constructor.\n       * Redeclare the method in child class!\n       *\n       * @author peshkov@UD\n       */\n      public function boot() {}\n      \n      /**\n       * Load Text Domain\n       *\n       * @author peshkov@UD\n       */\n      public function load_textdomain() {\n        load_plugin_textdomain( $this->domain, false, dirname( plugin_basename( $this->boot_file ) ) . '/static/languages/' );\n      }\n      \n      /**\n       * Determine if instance already exists and Return Instance\n       *\n       * Attention: The method MUST be called from plugin core file at first to set correct path to plugin!\n       *\n       * @author peshkov@UD\n       */\n      public static function get_instance( $args = array() ) {\n        $class = get_called_class();\n        //** We must be sure that final class contains static property $instance to prevent issues. */\n        if( !property_exists( $class, 'instance' ) ) {\n          exit( \"{$class} must have property \\$instance\" );\n        }\n        $prop = new \\ReflectionProperty( $class, 'instance' );\n        if( !$prop->isStatic() ) {\n          exit( \"Property \\$instance must be <b>static</b> for {$class}\" );\n        }\n        if( null === $class::$instance ) {    \n          $dbt = debug_backtrace();\n          if( !empty( $dbt[0]['file'] ) && file_exists( $dbt[0]['file'] ) ) {\n            $pd = get_file_data( $dbt[0]['file'], array(\n              'name' => 'Plugin Name',\n              'version' => 'Version',\n              'domain' => 'Text Domain',\n              'uservoice_url' => 'UserVoice',\n              'support_url' => 'Support',\n            ), 'plugin' );\n            $args = array_merge( (array)$pd, (array)$args, array(\n              'root_path' => dirname( $dbt[0]['file'] ),\n              'root_url' => plugin_dir_url( $dbt[0]['file'] ),\n              'schema_path' => dirname( $dbt[0]['file'] ) . '/composer.json',\n              'boot_file' => $dbt[0]['file'],\n            ) );\n            $class::$instance = new $class( $args );\n            //** Register activation hook */\n            register_activation_hook( $dbt[0]['file'], array( $class::$instance, '_activate' ) );\n            //** Register activation hook */\n            register_deactivation_hook( $dbt[0]['file'], array( $class::$instance, '_deactivate' ) );\n          } else {\n            $class::$instance = new $class( $args );\n          }\n        }\n        return $class::$instance;\n      }\n\n      /**\n       * Plugin Activation\n       * Internal method. Use activate() instead\n       */\n      public function _activate() {\n        /* Delete 'Install/Upgrade' notice 'dismissed' information */\n        delete_option( sanitize_key( 'dismiss_' . $this->slug . '_' . str_replace( '.', '_', $this->args['version'] ) . '_notice' ) );\n        /* Delete 'Bootstrap' notice 'dismissed' information */\n        delete_option( 'dismissed_notice_' . sanitize_key( $this->name ) );\n        delete_option( 'dismissed_warning_' . sanitize_key( $this->name ) );\n        $this->activate();\n      }\n\n      /**\n       * Plugin Deactivation\n       * Internal method. Use deactivate() instead\n       */\n      public function _deactivate() {\n        /* Delete 'Install/Upgrade' notice 'dismissed' information */\n        delete_option( sanitize_key( 'dismiss_' . $this->slug . '_' . str_replace( '.', '_', $this->args['version'] ) . '_notice' ) );\n        /* Delete 'Bootstrap' notice 'dismissed' information */\n        delete_option( 'dismissed_notice_' . sanitize_key( $this->name ) );\n        delete_option( 'dismissed_warning_' . sanitize_key( $this->name ) );\n        $this->deactivate();\n      }\n\n      /**\n       * Plugin Activation\n       * Redeclare the method in child class!\n       */\n      public function activate() {}\n      \n      /**\n       * Plugin Deactivation\n       * Redeclare the method in child class!\n       */\n      public function deactivate() {}\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-bootstrap-theme.php",
    "content": "<?php\n/**\n * Bootstrap\n *\n * @namespace UsabilityDynamics\n *\n * This file can be used to bootstrap any of the UD plugins.\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !class_exists( 'UsabilityDynamics\\WP\\Bootstrap_Theme' ) ) {\n\n    /**\n     * Bootstrap the plugin in WordPress.\n     *\n     * @class Bootstrap\n     * @author: peshkov@UD\n     */\n    class Bootstrap_Theme extends Bootstrap {\n    \n      public static $version = '1.0.3';\n      \n      public $type = 'theme';\n      \n      /**\n       * Slug of parent theme if exist\n       *\n       * @public\n       * @property schema_path\n       * @var array\n       */\n      public $template = false;\n      \n      /**\n       * If theme is child\n       *\n       * @public\n       * @property is_child\n       * @var array\n       */\n      public $is_child = false;\n      \n      /**\n       * Constructor\n       * Attention: MUST NOT BE CALLED DIRECTLY! USE get_instance() INSTEAD!\n       *\n       * @author peshkov@UD\n       */\n      protected function __construct( $args ) {\n        parent::__construct( $args );\n        //** Load text domain */\n        add_action( 'init', array( $this, 'load_textdomain' ), 1 );\n        //** TGM Plugin activation. */\n        $this->check_plugins_requirements();\n        //** May be initialize Licenses Manager. */\n        $this->define_license_manager();\n        //** Maybe define license client */\n        $this->define_license_client();\n        add_action( 'after_setup_theme', array( $this, 'pre_init' ), 100 );\n        $this->boot();\n      }\n      \n      /**\n\t     * Determine if we have errors before plugin initialization!\n\t     *\n       * @since 1.0.6\n\t     */\n      public function pre_init() {\n        //** Be sure we do not have errors. Do not initialize plugin if we have them. */\n        if( $this->has_errors() ) {\n          if( !is_admin() ) {\n            //** Show message about error on front end only if user administrator! */\n            if( current_user_can( 'manage_options' ) ) {\n              _e( \"Theme is activated with errors. Please, follow instructions on admin panel to solve the issue!\", $this->domain );\n            }\n            die();\n          }\n        } else {\n          $this->init();  \n        }\n      }\n      \n      /**\n       * Called in the end of constructor.\n       * Redeclare the method in child class!\n       *\n       * @author peshkov@UD\n       */\n      public function boot() {}\n      \n      /**\n       * Load Text Domain\n       *\n       * @author peshkov@UD\n       */\n      public function load_textdomain() {\n        load_theme_textdomain( $this->domain, get_template_directory() . '/static/languages/' );\n      }\n      \n      /**\n       * Determine if instance already exists and Return Instance\n       *\n       * Attention: The method MUST be called from plugin core file at first to set correct path to plugin!\n       *\n       * @author peshkov@UD\n       */\n      public static function get_instance( $args = array() ) {\n        $class = get_called_class();\n        //** We must be sure that final class contains static property $instance to prevent issues. */\n        if( !property_exists( $class, 'instance' ) ) {\n          exit( \"{$class} must have property \\$instance\" );\n        }\n        $prop = new \\ReflectionProperty( $class, 'instance' );\n        if( !$prop->isStatic() ) {\n          exit( \"Property \\$instance must be <b>static</b> for {$class}\" );\n        }\n        if( null === $class::$instance ) {\n\n          //** Get custom ( undefined ) Headers from style.css */\n          global $wp_theme_directories;\n          $stylesheet = get_stylesheet();\n          $theme_root = get_raw_theme_root($stylesheet);\n          if (false === $theme_root) {\n            $theme_root = WP_CONTENT_DIR . '/themes';\n          } elseif (!in_array($theme_root, (array)$wp_theme_directories)) {\n            $theme_root = WP_CONTENT_DIR . $theme_root;\n          }\n          $data = get_file_data( $theme_root . '/' . get_stylesheet() . '/style.css', array(\n            'uservoice_url' => 'UserVoice',\n            'support_url' => 'Support',\n          ) );\n\n          $t = wp_get_theme( get_template() );\n          $args = array_merge( (array)$args, $data, array(\n            'name' => $t->get( 'Name' ),\n            'version' => $t->get( 'Version' ),\n            'template' => $t->get( 'Template' ),\n            'domain' => $t->get( 'TextDomain' ),\n            'is_child' => is_child_theme(),\n            'root_path' => trailingslashit( wp_normalize_path( get_template_directory() ) ),\n            'root_url' => trailingslashit( wp_normalize_path( get_template_directory_uri() ) ),\n            'schema_path' => trailingslashit( wp_normalize_path( get_template_directory() ) ) . 'composer.json',\n            'boot_file' => trailingslashit( wp_normalize_path( get_template_directory() ) ) . 'style.css',\n          ) );\n          //echo \"<pre>\"; print_r( $args ); echo \"</pre>\"; die();\n          $class::$instance = new $class( $args );\n        }\n        return $class::$instance;\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-bootstrap.php",
    "content": "<?php\n/**\n * Bootstrap\n *\n * @namespace UsabilityDynamics\n *\n * This file is being used to bootstrap WordPress theme.\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !class_exists( 'UsabilityDynamics\\WP\\Bootstrap' ) ) {\n\n    /**\n     * Bootstrap the theme in WordPress.\n     *\n     * @class Bootstrap\n     * @author: peshkov@UD\n     */\n    class Bootstrap extends Scaffold {\n    \n      /**\n       * Schemas\n       *\n       * @public\n       * @property schema\n       * @var array\n       */\n      public $schema = null;\n      \n      /**\n       * Absolute path to schema ( composer.json )\n       *\n       * @public\n       * @property schema_path\n       * @var array\n       */\n      public $schema_path = null;\n      \n      /**\n       * Admin Notices handler object\n       *\n       * @public\n       * @property errors\n       * @var object UsabilityDynamics\\WP\\Errors object\n       */\n      public $errors = false;\n      \n      /**\n       * Settings\n       *\n       * @public\n       * @static\n       * @property $settings\n       * @type \\UsabilityDynamics\\Settings object\n       */\n      public $settings = null;\n      \n      /**\n       * Path to main plugin/theme file\n       *\n       * @public\n       * @property boot_file\n       * @var array\n       */\n      public $boot_file = false;\n      \n      /**\n       * Constructor\n       * Attention: MUST NOT BE CALLED DIRECTLY! USE get_instance() INSTEAD!\n       *\n       * @author peshkov@UD\n       */\n      protected function __construct( $args ) {\n        parent::__construct( $args );\n        //** Define our Admin Notices handler object */\n        $this->errors = new Errors( array_merge( $args, array(\n          'type' => $this->type\n        ) ) );\n        //** Determine if Composer autoloader is included and modules classes are up to date */\n        $this->composer_dependencies();\n        //** Determine if plugin/theme requires or recommends another plugin(s) */\n        $this->plugins_dependencies();\n        // Maybe run install or upgrade processes.\n        $this->maybe_run_upgrade_process();\n        //** Set install/upgrade pages if needed */\n        $this->define_splash_pages();\n        //** Maybe need to show UD splash page. Used static functions intentionaly. */\n        if ( !has_action( 'admin_init', array( Dashboard::get_instance(), 'maybe_ud_splash_page' ) ) ) {\n          add_action( 'admin_init', array( Dashboard::get_instance(), 'maybe_ud_splash_page' ) );\n        }\n        if ( !has_action( 'admin_menu', array( Dashboard::get_instance(), 'add_ud_splash_page') ) ) {\n          add_action( 'admin_menu', array( Dashboard::get_instance(), 'add_ud_splash_page') );\n        }\n        add_action( 'wp_ajax_ud_bootstrap_dismiss_notice', array( $this, 'ud_bootstrap_dismiss_notice' ) );\n      }\n      \n      /**\n       * Initialize application.\n       * Redeclare the method in final class!\n       *\n       * @author peshkov@UD\n       */\n      public function init() {}\n      \n      /**\n       * Determine if errors exist\n       * Just wrapper.\n       */\n      public function has_errors() {\n        return $this->errors->has_errors();\n      }\n      \n      /**\n       * @param string $key\n       * @param mixed $value\n       *\n       * @author peshkov@UD\n       * @return \\UsabilityDynamics\\Settings\n       */\n      public function set( $key = null, $value = null ) {\n        if( !is_object( $this->settings ) || !is_callable( array( $this->settings, 'set' ) ) ) {\n          return false;\n        }\n        return $this->settings->set( $key, $value );\n      }\n\n      /**\n       * @param string $key\n       * @param mixed $default\n       *\n       * @author peshkov@UD\n       * @return \\UsabilityDynamics\\type\n       */\n      public function get( $key = null, $default = null ) {\n        if( !is_object( $this->settings ) || !is_callable( array( $this->settings, 'get' ) ) ) {\n          return $default;\n        }\n        return $this->settings->get( $key, $default );\n      }\n      \n      /**\n       * Returns specific schema from composer.json file.\n       *\n       * @param string $file Path to file\n       * @author peshkov@UD\n       * @return mixed array or false\n       */\n      public function get_schema( $key = '' ) {\n        if( $this->schema === null ) {\n          if( !empty( $this->schema_path ) && file_exists( $this->schema_path ) ) {\n            $this->schema = (array)Utility::l10n_localize( json_decode( file_get_contents( $this->schema_path ), true ), (array)$this->get_localization() );\n          }\n        }\n        //** Break if composer.json does not exist */\n        if( !is_array( $this->schema ) ) {\n          return false;\n        }\n        //** Resolve dot-notated key. */\n        if( strpos( $key, '.' ) ) {\n          $current = $this->schema;\n          $p = strtok( $key, '.' );\n          while( $p !== false ) {\n            if( !isset( $current[ $p ] ) ) {\n              return false;\n            }\n            $current = $current[ $p ];\n            $p = strtok( '.' );\n          }\n          return $current;\n        } \n        //** Get default key */\n        else {\n          return isset( $this->schema[ $key ] ) ? $this->schema[ $key ] : false;\n        }\n      }\n      \n      /**\n       * Return localization's list.\n       *\n       * Example:\n       * If schema contains l10n.{key} values:\n       *\n       * { 'config': 'l10n.hello_world' }\n       *\n       * the current function should return something below:\n       *\n       * return array(\n       *   'hello_world' => __( 'Hello World', $this->domain ),\n       * );\n       *\n       * @author peshkov@UD\n       * @return array\n       */\n      public function get_localization() {\n        return array();\n      }\n\n      /**\n       * Determine if product is just installed or upgraded\n       * and run install/upgrade processes\n       *\n       * @author peshkov@UD\n       */\n      protected function maybe_run_upgrade_process() {\n        //** Determine what to show depending on version installed */\n        $version = get_option($this->slug . '-current-version', 0);\n        $this->old_version = $version;\n        //** Just installed */\n        if (!$version) {\n          /* Run Install handlers */\n          add_action( 'plugins_loaded', array( $this, '_run_install_process' ), 0 );\n        }\n        //** Upgraded */\n        elseif (version_compare($version, $this->args['version']) == -1) {\n          /* Run Upgrade handlers */\n          add_action( 'plugins_loaded', array( $this, '_run_upgrade_process' ), 0 );\n        }\n        // Need to save current version on plugins_loaded action,\n        // unless _run_install_process and _run_upgrade_process not get called.\n        add_action( 'plugins_loaded', array( $this, 'save_version_no' ), 100 );\n      }\n\n      /**\n       * Saving version no to database.\n       * \n       */\n      public function save_version_no($value=''){\n        update_option( $this->slug . '-current-version', $this->args['version'] );\n      }\n\n      /**\n       * Installation Handler\n       * Internal method. Use run_install_process() instead\n       */\n      public function _run_install_process() {\n        /* Delete 'Install/Upgrade' notice 'dismissed' information */\n        delete_option( sanitize_key( 'dismiss_' . $this->slug . '_' . str_replace( '.', '_', $this->args['version'] ) . '_notice' ) );\n        /* Delete 'Bootstrap' notice 'dismissed' information */\n        delete_option( 'dismissed_notice_' . sanitize_key( $this->name ) );\n        $this->run_install_process();\n      }\n\n      /**\n       * Upgrade Handler\n       * Internal method. Use run_upgrade_process() instead\n       */\n      public function _run_upgrade_process() {\n        /* Delete 'Install/Upgrade' notice 'dismissed' information */\n        delete_option( sanitize_key( 'dismiss_' . $this->slug . '_' . str_replace( '.', '_', $this->args['version'] ) . '_notice' ) );\n        /* Delete 'Bootstrap' notice 'dismissed' information */\n        delete_option( 'dismissed_notice_' . sanitize_key( $this->name ) );\n        $this->run_upgrade_process();\n      }\n\n      /**\n       * Run Install Process.\n       *\n       * Re-define the function in child.\n       */\n      public function run_install_process() {}\n\n      /**\n       * Run Upgrade Process.\n       *\n       * Re-define the function in child.\n       */\n      public function run_upgrade_process() {}\n\n      /**\n       * Define splash pages for plugins if needed\n       * And Renders Admin Notice about installed product\n       *\n       * @return boolean\n       * @author korotkov@UD\n       * @author peshkov@UD\n       */\n      public function define_splash_pages() {\n        //** If not defined in schemas or not determined - skip */\n        if ( !$splashes = $this->get_schema( 'extra.splashes' ) ) {\n          return false;\n        }\n\n        foreach( (array)$splashes as $splash => $shortpath ) {\n          $path = $this->type == 'theme' ? get_template_directory() . '/' . ltrim( $shortpath, '/\\\\' ) : $this->path( $shortpath, 'dir' );\n          if( !file_exists( $path ) ) {\n            unset( $splashes[ $splash ] );\n          }\n        }\n\n        //** If no splash templates files or missed 'install' splash - skip */\n        if( empty( $splashes ) || !isset( $splashes[ 'install' ] ) ) {\n          return false;\n        }\n\n        $page = false;\n\n        //** Determine what to show depending on version installed */\n        $version = get_option( $this->slug . '-splash-version', 0 );\n\n        //** Just installed */\n        if( !$version ) {\n          $page = 'install';\n        }\n        //** Upgraded */\n        elseif ( version_compare( $version,  $this->args['version'] ) == -1 ) {\n          if( isset( $splashes[ 'upgrade' ] ) ) {\n            $page = 'upgrade';\n          } else {\n            $page = 'install';\n          }\n        }\n        //** In other case do not do this */\n        else {\n\n          /**\n           * Maybe Render Install Notice\n           * about current instance\n           */\n\n          $option = sanitize_key( 'dismiss_' . $this->slug . '_' . str_replace( '.', '_', $this->args['version'] ) . '_notice' );\n\n          if(\n            isset( $_REQUEST[ 'page' ] ) &&\n            $_REQUEST[ 'page' ] == Dashboard::get_instance()->page_slug &&\n            isset( $_REQUEST[ 'slug' ] ) &&\n            $_REQUEST[ 'slug' ] == $this->slug\n          ) {\n\n            /** Dismiss Admin Notice */\n            if( isset( $_REQUEST[ 'dismiss' ] ) ) {\n\n              update_option( $option, array(\n                'slug' => $this->slug,\n                'type' => $this->type,\n                'version' => $this->args['version']\n              ) );\n\n              if( !function_exists( 'wp_redirect' ) ) {\n                require_once( ABSPATH . 'wp-includes/pluggable.php' );\n              }\n\n              if( !empty( $_SERVER[ 'HTTP_REFERER' ] ) ) {\n                wp_redirect( $_SERVER[ 'HTTP_REFERER' ] );\n              } else {\n                wp_redirect( admin_url( 'plugins.php' ) );\n              }\n              exit;\n\n            }\n\n            /** Add information about product to Dashboard page */\n            else {\n\n              if( isset( $splashes[ 'upgrade' ] ) ) {\n                $page = 'upgrade';\n              } else {\n                $page = 'install';\n              }\n\n            }\n\n          }\n\n          if( !get_option( $option ) ) {\n            add_action( 'admin_notices',  array( $this, 'render_upgrade_notice' ), 1 );\n          }\n\n          if( empty( $page ) ) {\n            return false;\n          }\n\n        }\n\n        $content = $this->root_path . ltrim( $splashes[$page], '/\\\\' );\n\n        //** Abort if no files exist */\n        if ( !file_exists( $content ) ) {\n          return false;\n        }\n\n        //** Push data to temp transient */\n        $_current_pages_to_show = get_transient( Dashboard::get_instance()->transient_key );\n\n        //** If empty - create */\n        if ( !$_current_pages_to_show ) {\n          set_transient( Dashboard::get_instance()->transient_key, array(\n            $this->slug => array(\n              'name' => $this->name,\n              'content' => $content,\n              'version' => $this->args['version']\n            )\n          ), 30 );\n        }\n        //** If not empty - update */\n        else {\n          $_current_pages_to_show[$this->slug] = array(\n            'name' => $this->name,\n            'content' => $content,\n            'version' => $this->args['version']\n          );\n          set_transient( Dashboard::get_instance()->transient_key, $_current_pages_to_show, 30 );\n        }\n\n        set_transient( Dashboard::get_instance()->need_splash_key, Dashboard::get_instance()->transient_key, 30 );\n\n      }\n\n      /**\n       * Renders Upgrade Notice.\n       *\n       */\n      public function render_upgrade_notice() {\n        \n        if( $this->type == 'theme' ) {\n          if( !current_user_can( 'switch_themes' ) ) {\n            return;\n          }\n          $icon = file_exists( get_template_directory() . '/static/images/icon.png' ) ? get_template_directory_uri() . '/static/images/icon.png' : false;\n        } else {\n          if( !current_user_can( 'activate_plugins' ) ) {\n            return;\n          }\n          $icon = file_exists( $this->path( 'static/images/icon.png', 'dir' ) ) ? $this->path( 'static/images/icon.png', 'url' ) : false;\n        }\n\n        ob_start();\n        $vars = apply_filters( 'ud::bootstrap::upgrade_notice::vars', array(\n          'content' => false,\n          'icon' => $icon,\n          'name' => $this->name,\n          'type' => $this->type,\n          'slug' => $this->slug,\n          'version' => $this->args['version'],\n          'dashboard_link' => admin_url( 'index.php?page='. Dashboard::get_instance()->page_slug . '&slug=' . $this->slug ),\n          'dismiss_link' => admin_url( 'index.php?page='. Dashboard::get_instance()->page_slug . '&slug=' . $this->slug . '&dismiss=1' ),\n          'home_link' => !empty( $this->schema[ 'homepage' ] ) ? $this->schema[ 'homepage' ] : false,\n        ) );\n        extract( $vars );\n        $content = ob_get_clean();\n        echo apply_filters( 'ud::bootstrap::upgrade_notice::template', $content, $this->slug, $vars );\n      }\n\n      /**\n       * Check plugins requirements\n       *\n       * @author peshkov@UD\n       */\n      public function check_plugins_requirements() {\n        //** Determine if we have TGMA Plugin Activation initialized. */\n        $is_tgma = $this->is_tgma;\n        if( $is_tgma ) {\n          $tgma = TGM_Plugin_Activation::get_instance();\n          //** Maybe get TGMPA notices. */\n          $notices = $tgma->notices( get_class( $this ) );\n          if( !empty( $notices[ 'messages' ] ) && is_array( $notices[ 'messages' ] ) ) {\n            $error_links = false;\n            $message_links = false;\n            foreach( $notices[ 'messages' ] as $m ) {\n              if( $m[ 'type' ] == 'error' ) $error_links = true;\n              elseif( $m[ 'type' ] == 'message' ) $message_links = true;\n              $this->errors->add( $m[ 'value' ], $m[ 'type' ] );\n            }\n            //** Maybe add footer action links to errors and|or notices block. */\n            if( !empty( $notices[ 'links' ] ) && is_array( $notices[ 'links' ] ) ) {\n              foreach( $notices[ 'links' ] as $type => $links ) {\n                foreach( $links as $link ) {\n                  $this->errors->add_action_link( $link, $type );\n                }\n              }\n            }\n          }\n        }\n      }\n\n      /**\n       * Maybe determines if Composer autoloader is included and modules classes are up to date\n       *\n       * @author peshkov@UD\n       */\n      private function composer_dependencies() {\n        $dependencies = $this->get_schema( 'extra.schemas.dependencies.modules' );\n        if( !empty( $dependencies ) && is_array( $dependencies ) ) {\n          foreach( $dependencies as $module => $classes ) {\n            if( !empty( $classes ) && is_array( $classes ) ) {\n              foreach( $classes as $class => $v ) {\n                if( !class_exists( $class ) ) {\n                  $this->errors->add( sprintf( __( 'Module <b>%s</b> is not installed or the version is old, class <b>%s</b> does not exist.', $this->domain ), $module, $class ) );\n                  continue;\n                }\n                if ( '*' != trim( $v ) && ( !property_exists( $class, 'version' ) || $class::$version < $v ) ) {\n                  $this->errors->add( sprintf( __( 'Module <b>%s</b> should be updated to the latest version, class <b>%s</b> must have version <b>%s</b> or higher.', $this->domain ), $module, $class, $v ) );\n                }\n              }\n            }\n          }\n        }\n      }\n      \n      /**\n       * Determine if plugin/theme requires or recommends another plugin(s)\n       *\n       * @author peshkov@UD\n       */\n      private function plugins_dependencies() {\n        /** \n         * Dependencies must be checked before plugins_loaded hook to prevent issues!\n         * \n         * The current condition fixes incorrect behaviour on custom 'Install Plugins' page\n         * after activation plugin which has own dependencies.\n         * \n         * The condition belongs to WordPress 4.3 and higher.\n         */\n        if( did_action( 'plugins_loaded' ) && $this->type == 'plugin' ) {\n          return;\n        }\n        $plugins = $this->get_schema( 'extra.schemas.dependencies.plugins' );\n        if( !empty( $plugins ) && is_array( $plugins ) ) {\n          $tgma = TGM_Plugin_Activation::get_instance();\n          foreach( $plugins as $plugin ) {\n            $plugin[ '_referrer' ] = get_class( $this );\n            $plugin[ '_referrer_name' ] = $this->name;\n            $tgma->register( $plugin );\n          }\n          $this->is_tgma = true;\n        }\n      }\n      \n      \n      /**\n       * Defines License Client if 'licenses' schema is set\n       *\n       * @author peshkov@UD\n       */\n      protected function define_license_client() {\n        //** Break if we already have errors to prevent fatal ones. */\n        if( $this->has_errors() ) {\n          return false;\n        }\n        //** Be sure we have licenses scheme to continue */\n        $schema = $this->get_schema( 'extra.schemas.licenses.client' );\n        if( !$schema ) {\n          return false;\n        }\n        //** Licenses Manager */\n        if( !class_exists( '\\UsabilityDynamics\\UD_API\\Bootstrap' ) ) {\n          $this->errors->add( __( 'Class \\UsabilityDynamics\\UD_API\\Bootstrap does not exist. Be sure all required plugins and (or) composer modules installed and activated.', $this->domain ) );\n          return false;\n        }\n        $args = $this->args;\n        $args = array_merge( $args, array(\n          'type' => $this->type,\n          'name' => $this->name,\n          'slug' => $this->slug,\n          'referrer_slug' => $this->slug,\n          'domain' => $this->domain,\n          'errors_callback' => array( $this->errors, 'add' ),\n        ), $schema );\n        if( empty( $args[ 'screen' ] ) ) {\n          $this->errors->add( __( 'Licenses client can not be activated due to invalid \\'licenses\\' schema.', $this->domain ) );\n        }\n        $this->client = new \\UsabilityDynamics\\UD_API\\Bootstrap( $args );\n      }\n      \n      /**\n       * Defines License Manager if 'license' schema is set\n       *\n       * @author peshkov@UD\n       */\n      public function define_license_manager() {\n        //** Break if we already have errors to prevent fatal ones. */\n        if( $this->has_errors() ) {\n          return false;\n        }\n        //** Be sure we have license scheme to continue */\n        $schema = $this->get_schema( 'extra.schemas.licenses.product' );\n        if( !$schema ) {\n          return false;\n        }\n        if( empty( $schema[ 'product_id' ] ) || ( empty( $schema[ 'referrer' ] ) && $this->type !== 'theme' ) ) {\n          $this->errors->add( __( 'Product requires license, but product ID and (or) referrer is undefined. Please, be sure, that license schema has all required data.', $this->domain ), 'message' );\n        }\n        $schema = array_merge( (array)$schema, array(\n          'type' => $this->type,\n          'name' => $this->name,\n          'boot_file' => $this->boot_file,\n          'errors_callback' => array( $this->errors, 'add' )\n        ) );\n        //** Licenses Manager */\n        if( !class_exists( '\\UsabilityDynamics\\UD_API\\Manager' ) ) {\n          //$this->errors->add( __( 'Class \\UsabilityDynamics\\UD_API\\Manager does not exist. Be sure all required plugins installed and activated.', $this->domain ), 'message' );\n          return false;\n        }\n        $this->license_manager = new \\UsabilityDynamics\\UD_API\\Manager( $schema );\n        return true;\n      }\n\n      public function ud_bootstrap_dismiss_notice() {\n        $response = array(\n            'success' => '0',\n            'error' => __( 'There was an error in request.', $this->domain ),\n        );\n        $error = false;\n\n        if( empty( $_POST['key'] ) ||\n            empty( $_POST['slug'] ) ||\n            empty( $_POST['type'] ) ||\n            empty( $_POST['version'] )\n        ) {\n          $response['error'] = __( 'Invalid values', $this->domain );\n          $error = true;\n        }\n\n        if ( ! $error && update_option( ( $_POST['key'] ), array(\n                'slug' => $_POST['slug'],\n                'type' => $_POST['type'],\n                'version' => $_POST['version'],\n            ) ) ) {\n          $response['success'] = '1';\n        }\n\n        wp_send_json( $response );\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-dashboard.php",
    "content": "<?php\n/**\n * Usability Dynamics Dashboard.\n *\n * @namespace UsabilityDynamics\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !class_exists( 'UsabilityDynamics\\WP\\Dashboard' ) ) {\n\n    /**\n     * UD Plugins/Themes dashboard\n     * \n     * @author korotkov@ud\n     */\n    class Dashboard extends Scaffold {\n      \n      /**\n       * Singleton instance\n       * \n       * @var type \n       */\n      static $instance = null;\n      \n      /**\n       * Dashboard page slug\n       * \n       * @var string \n       */\n      public $page_slug = 'ud-splash';\n      \n      /**\n       * Need splash key\n       * \n       * @var string \n       */\n      public $need_splash_key = 'ud_need_splash';\n      \n      /**\n       * Transient key\n       * \n       * @var string \n       */\n      public $transient_key = 'ud_splash_dashboard';\n      \n      /**\n       * Singleton\n       * \n       * @return object\n       */\n      static function get_instance() {\n        return self::$instance ? self::$instance : self::$instance = new Dashboard();\n      }\n      \n      /**\n       * Maybe redirect to UD Splash Page\n       * \n       * @author korotkov@ud\n       */\n      public function maybe_ud_splash_page() {\n        //** If there is something to show */\n        if ( get_transient( $this->need_splash_key ) && ( !isset( $_REQUEST['page'] ) || $_REQUEST['page'] !== $this->page_slug ) ) {\n          //** Do not redirect anymore */\n          delete_transient( $this->need_splash_key );\n          //** Redirect to UD splash page */\n          wp_redirect( admin_url( 'index.php?page='.$this->page_slug ) );\n          exit;\n        }\n      }\n      \n      /**\n       * Register fake page\n       * \n       * @return null\n       */\n      public function add_ud_splash_page() {\n        if ( empty( $_GET['page'] ) ) {\n          return;\n        }\n        if ( $_GET['page'] == $this->page_slug ) {\n          add_dashboard_page( __( 'Welcome to Usability Dynamics, Inc.', $this->domain ), __( 'Welcome', $this->domain ), 'manage_options', $this->page_slug, array( $this, 'ud_splash_page' ) );\n        }\n      }\n      \n      /**\n       * Render UD dashboard page\n       * \n       * @author korotkov@ud\n       */\n      public function ud_splash_page() {\n        //** Try to get information to show */\n        $updates = get_transient( $this->transient_key );\n        ?>\n        <div class=\"wrap about-wrap\">\n          <h1><?php _e( 'Usability Dynamics, Inc.', $this->domain ) ?></h1>\n          <div class=\"about-text\"><?php _e( 'Thank you for using our products.', $this->domain ) ?></div>\n          <div class=\"wp-badge ud-badge\"></div>\n          <?php\n            //** If user visited this page directly */\n            if ( !$updates ) { \n              echo '<h2>Keep it up! There are no notices for you in the moment.</h2>'; \n              \n            //** in other case - show corresponding predefined template if it exists*/\n            } else {\n              foreach( $updates as $key => $page_data ) {\n                update_option( $key . '-splash-version', $page_data['version'] );\n                if ( file_exists( $page_data['content'] ) ) {\n                  include $page_data['content'];\n                }\n              }\n            }\n            \n            \n          ?>\n          \n          <div class=\"return-to-dashboard\">\n            <a href=\"<?php echo esc_url( self_admin_url() ); ?>\"><?php is_blog_admin() ? _e( 'Go to Dashboard &rarr; Home' ) : _e( 'Go to Dashboard' ); ?></a>\n          </div>\n          \n        </div>\n        <?php\n        delete_transient( $this->need_splash_key );\n      }\n      \n    }\n    \n  }\n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-errors.php",
    "content": "<?php\n/**\n * Admin Notices Handler\n *\n * @namespace UsabilityDynamics\n *\n * This file can be used to bootstrap any of the UD plugins, it essentially requires that you have\n * a core file which will be called after 'plugins_loaded'. In addition, if the core class has\n * 'activate' and 'deactivate' functions, then those will be called automatically by this class.\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !class_exists( 'UsabilityDynamics\\WP\\Errors' ) ) {\n\n    /**\n     * \n     * @author: peshkov@UD\n     */\n    class Errors extends Scaffold {\n    \n      /**\n       * Errors\n       *\n       * @used admin_notices\n       * @public\n       * @property $errors\n       * @type array\n       */\n      protected $errors = array();\n      \n      /**\n       * Messages\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      protected $messages = array();\n\n      /**\n       * Warnings\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      protected $warnings = array();\n      \n      /**\n       * Action Links in Footer\n       *\n       * @used admin_notices\n       * @public\n       * @property $messages\n       * @type array\n       */\n      protected $action_links = array();\n\n      /**\n       * Dismiss action link is available or not.\n       *\n       * @var bool\n       */\n      protected $dismiss = true;\n      \n      /**\n       *\n       */\n      public function __construct( $args ) {\n        parent::__construct( $args );\n        add_action( 'admin_notices', array( $this, 'admin_notices' ) );\n        add_action( 'wp_ajax_ud_dismiss', array( $this, 'dismiss_notices' ) );\n      }\n      \n      /**\n       * Add new message for admin notices\n       *\n       * @param string $message\n       * @param string $type Values: 'error', 'message', 'warning'\n       * @author peshkov@UD\n       */\n      public function add( $message, $type = 'error' ) {\n        switch( $type ) {\n          case 'error':\n            $this->errors[] = $message;\n            break;\n          case 'message':\n            $this->messages[] = $message;\n            break;\n          case 'warning':\n            $this->warnings[] = $message;\n            break;\n        }\n      }\n      \n      /**\n       * Add footer link to specific ( errors|messages|wanrnings ) block\n       *\n       * @author peshkov@UD\n       */\n      public function add_action_link( $link, $type = 'error' ) {\n        switch( $type ) {\n          case 'error':\n            $this->action_links[ 'errors' ][] = $link;\n            break;\n          case 'message':\n            $this->action_links[ 'messages' ][] = $link;\n            break;\n          case 'message':\n            $this->action_links[ 'warnings' ][] = $link;\n            break;\n        }\n      }\n      \n      /**\n       * Determine if errors exist\n       *\n       * @author peshkov@UD\n       */\n      public function has_errors() {\n        return !empty( $this->errors ) ? true : false;\n      }\n      \n      /**\n       * Renders admin notes in case there are errors or notices on bootstrap init\n       *\n       * @author peshkov@UD\n       */\n      public function admin_notices() {\n        global $wp_version;\n\n        //** Don't show the message if the user has no enough permissions. */\n        if ( ! function_exists( 'wp_get_current_user' ) ) {\n          require_once( ABSPATH . 'wp-includes/pluggable.php' );\n        }\n        \n        if(\n          empty( $this->args['type'] ) ||\n          ( $this->args['type'] == 'plugin' && !current_user_can( 'activate_plugins' ) ) ||\n          ( $this->args['type'] == 'theme' && !current_user_can( 'switch_themes' ) )\n        ) {\n          return;\n        }\n\n        //** Don't show the message if on a multisite and the user isn't a super user. */\n        if ( is_multisite() && ! is_super_admin() ) {\n          return;\n        }\n        //** Ignore messages on TGM Plugin Activation page */\n        if( TGM_Plugin_Activation::get_instance()->is_tgmpa_page() ) {\n          return;\n        }\n        \n        $errors = apply_filters( 'ud:errors:admin_notices', $this->errors, $this->args );\n        $messages = apply_filters( 'ud:messages:admin_notices', $this->messages, $this->args );\n        $warnings = apply_filters( 'ud:warnings:admin_notices', $this->warnings, $this->args );\n\n        $nonce = wp_create_nonce('ud_dismiss');\n        \n        if( !empty( $errors ) || !empty( $messages ) || !empty( $warnings ) ) {\n          echo \"<style>.ud-admin-notice a { text-decoration: underline !important; } .ud-admin-notice { display: block !important; } .ud-admin-notice.update-nag { border-color: #ffba00 !important; }</style>\";\n        }\n\n        //** Errors Block */\n        if( !empty( $errors ) && is_array( $errors ) ) {\n          $message = '<ul style=\"list-style:disc inside;\"><li>' . implode( '</li><li>', $errors ) . '</li></ul>';\n          $message = sprintf( __( '<p><b>%s</b> is not active due to following errors:</p> %s', $this->domain ), $this->name, $message );\n          if( !empty( $this->action_links[ 'errors' ] ) && is_array( $this->action_links[ 'errors' ] ) ) {\n            $message .= '<p>' . implode( ' | ', $this->action_links[ 'errors' ] ) . '</p>';\n          }\n          echo '<div class=\"ud-admin-notice error fade\" style=\"padding:11px;\">' . $message . '</div>';\n        }\n\n        //** Determine if warning has been dismissed */\n        $warning_dismissed = get_option( ( 'dismissed_warning_' . sanitize_key( $this->name ) ) );\n        $show_warnings = $this->check_dismiss_time( $warning_dismissed );\n        if ( $show_warnings && ! empty( $warnings ) && is_array( $warnings ) ) {\n          //** Warnings Block */\n          $message = '<ul style=\"list-style:disc inside;\"><li>' . implode( '</li><li>', $warnings ) . '</li></ul>';\n          $message = sprintf( __( '<p><b>%s</b> has the following warnings:</p> %s', $this->domain ), $this->name, $message );\n          if( $this->dismiss ) {\n            $this->action_links[ 'warnings' ][] = \n              '<a class=\"dismiss-warning dismiss\" ' .\n              'data-key=\"dismissed_warning_' . sanitize_key( $this->name ) . \n              '\" data-nonce=\"' . $nonce . '\" href=\"#\">' . \n              __( 'Dismiss this warning', $this->domain ) . '</a>';\n          }\n          if( !empty( $this->action_links[ 'warnings' ] ) && is_array( $this->action_links[ 'warnings' ] ) ) {\n            $message .= '<p>' . implode( ' | ', $this->action_links[ 'warnings' ] ) . '</p>';\n          }\n          echo '<div class=\"ud-admin-notice updated update-nag fade\" style=\"padding:11px;\">' . $message . '</div>';\n        }\n\n        //** Determine if message has been dismissed */\n        $message_dismissed = get_option( ( 'dismissed_notice_' . sanitize_key( $this->name ) ) );\n        if ( empty( $message_dismissed ) ) {\n          //** Notices Block */\n          if( !empty( $messages ) && is_array( $messages ) ) {\n            $message = '<ul style=\"list-style:disc inside;\"><li>' . implode( '</li><li>', $messages ) . '</li></ul>';\n            if( !empty( $errors ) ) {\n              $message = sprintf( __( '<p><b>%s</b> has the following additional notices:</p> %s', $this->domain ), $this->name, $message );\n            } else {\n              $message = sprintf( __( '<p><b>%s</b> is active, but has the following notices:</p> %s', $this->domain ), $this->name, $message );\n            }\n            if( $this->dismiss ) {\n              $this->action_links[ 'messages' ][] = \n                '<a class=\"dismiss-notice dismiss\" ' .\n                'data-key=\"dismissed_notice_' . sanitize_key( $this->name ).'\" ' .\n                'data-nonce=\"' . $nonce . '\" href=\"#\">' . \n                __( 'Dismiss this notice', $this->domain ) . '</a>';\n            }\n            $message .= '<p>' . implode( ' | ', $this->action_links[ 'messages' ] ) . '</p>';\n            echo '<div class=\"ud-admin-notice updated fade\" style=\"padding:11px;\">' . $message . '</div>';\n          }\n        }\n\n        if ( $show_warnings || empty( $message_dismissed ) ) {\n          //enqueue dismiss js for ajax requests\n          $script_path = Utility::path( 'static/scripts/ud-dismiss.js', 'url' );\n          wp_enqueue_script( \"ud-dismiss\", $script_path, array( 'jquery' ) );\n          wp_localize_script( \"ud-dismiss\", \"_ud_vars\", array(\n              \"ajaxurl\" => admin_url( 'admin-ajax.php' ),\n          ) );\n        }\n        \n      }\n\n      /**\n       * dismiss the notice ajax callback\n       * @throws \\Exception\n       */\n      public function dismiss_notices() {\n        check_ajax_referer('ud_dismiss');\n\n        if ( !is_user_logged_in() ) {\n          wp_send_json_error( array( 'error' => __( 'You are not allowed to do this action.', $this->domain ) ) );\n        }\n\n        $response = array(\n          'success' => '0',\n          'error' => __( 'There was an error in request.', $this->domain ),\n        );\n\n        $error = false;\n\n        $option_key = isset($_POST['key']) ? sanitize_key($_POST['key']) : '';\n\n        if ( strpos($option_key, 'dismissed_') !== 0 ) {\n          $response['error'] = __( 'Invalid key', $this->domain );\n          $error = true;\n        }\n\n        if ( !$error && update_option( $option_key, time() ) ) {\n          $response['success'] = '1';\n          $response['error'] = null;\n        }\n\n        wp_send_json( $response );\n      }\n\n      /**\n       * Check dismiss notice timestamp if greater than 24 hrs\n       *\n       * @param string $time\n       *\n       * @return bool\n       */\n      public function check_dismiss_time( $time = '' ) {\n        if( empty( $time ) ) {\n          return true;\n        }\n        $current_time = time();\n        $diff = $current_time - 86400;\n        if ( $diff > (int)$time ) {\n          return true;\n        }\n        return false;\n      }\n      \n    }\n  \n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-scaffold.php",
    "content": "<?php\n/**\n * Scaffold\n *\n * @namespace UsabilityDynamics\n *\n * This file can be used to bootstrap any of the UD plugins, it essentially requires that you have\n * a core file which will be called after 'plugins_loaded'. In addition, if the core class has\n * 'activate' and 'deactivate' functions, then those will be called automatically by this class.\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !class_exists( 'UsabilityDynamics\\WP\\Scaffold' ) ) {\n\n    /**\n     *\n     * @class Scaffold\n     * @author: peshkov@UD\n     */\n    abstract class Scaffold {\n    \n      /**\n       * Plugin ( Theme ) Name.\n       *\n       * @public\n       * @property $name\n       * @type string\n       */\n      public $name = false;\n      \n      /**\n       * Slug.\n       *\n       * @public\n       * @property $plugin\n       * @type string\n       */\n      public $slug = false;\n\n      /**\n       * Textdomain String\n       *\n       * @public\n       * @property domain\n       * @var string\n       */\n      public $domain = false;\n      \n      /**\n       * Root path\n       *\n       * @public\n       * @property root_path\n       * @var string\n       */\n      public $root_path = false;\n      \n      /**\n       * Root URL\n       *\n       * @public\n       * @property root_url\n       * @var string\n       */\n      public $root_url = false;\n\n      /**\n       * UserVoice URL\n       *\n       * @public\n       * @property uservoice_url\n       * @var string\n       */\n      public $uservoice_url = false;\n\n      /**\n       * Support URL\n       *\n       * @public\n       * @property support_url\n       * @var string\n       */\n      public $support_url = false;\n      \n      /**\n       * Storage for dynamic properties\n       * Used by magic __set, __get\n       *\n       * @protected\n       * @type array\n       */\n      protected $_properties = array();\n      \n      /**\n       * Constructor\n       *\n       * @author peshkov@UD\n       */\n      protected function __construct( $args = array() ) {\n        $_args = array();\n        foreach( $args as $k => $v ) {\n          if( property_exists( $this, $k ) ) {\n            $prop = new \\ReflectionProperty( $this, $k );\n            if( !$prop->isStatic() ) {\n              switch( $k ) {\n                case 'root_path':\n                  $this->root_path = trailingslashit( trim( $v ) );\n                  break;\n                case 'name':\n                  $this->slug = sanitize_key( trim( $v ) );\n                default:\n                  $this->{$k} = trim( $v );\n                  break;\n              }\n            } else {\n              $_args[ $k ] = $v;\n            }\n          } else {\n            $_args[ $k ] = $v;\n          }\n        }\n        $this->args = $_args;\n        \n        //** Debug data */\n        if( defined( 'WP_DEBUG' ) && WP_DEBUG === true ) {\n          $trace = debug_backtrace();\n          $this->debug = array(\n            /** Where from the current class is called */\n            'backtrace_path' => $trace[0]['file'],\n          );\n        }\n      }\n      \n      /**\n       *\n       */\n      public function __get( $key ) {\n        return isset( $this->_properties[ $key ] ) ? $this->_properties[ $key ] : NULL;\n      }\n\n      /**\n       *\n       */\n      public function __set( $key, $value ) {\n        $this->_properties[ $key ] = $value;\n      }\n      \n    }\n  \n  }\n  \n}"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-tgm-bulk-installer.php",
    "content": "<?php\n/**\n * Plugin installation and activation for WordPress themes.\n *\n * @package   TGM-Plugin-Activation\n * @version   2.4.0\n * @author    Thomas Griffin <thomasgriffinmedia.com>\n * @author    Gary Jones <gamajo.com>\n * @copyright Copyright (c) 2012, Thomas Griffin\n * @license   http://opensource.org/licenses/gpl-2.0.php GPL v2 or later\n * @link      https://github.com/thomasgriffin/TGM-Plugin-Activation\n */\n\n/*\n    Copyright 2014 Thomas Griffin (thomasgriffinmedia.com)\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License, version 2, as\n    published by the Free Software Foundation.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\n/**\n * The WP_Upgrader file isn't always available. If it isn't available,\n * we load it here.\n *\n * We check to make sure no action or activation keys are set so that WordPress\n * doesn't try to re-include the class when processing upgrades or installs outside\n * of the class.\n *\n * @since 2.2.0\n */\n \nnamespace UsabilityDynamics\\WP {\n  \n  if ( ! class_exists( 'WP_Upgrader' ) ) {   \n    require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';\n  }\n\n  if ( ! class_exists( 'UsabilityDynamics\\WP\\TGM_Bulk_Installer' ) ) {\n      /**\n       * Installer class to handle bulk plugin installations.\n       *\n       * Extends WP_Upgrader and customizes to suit the installation of multiple\n       * plugins.\n       *\n       * @since 2.2.0\n       *\n       * @package TGM-Plugin-Activation\n       * @author  Thomas Griffin <thomasgriffinmedia.com>\n       * @author  Gary Jones <gamajo.com>\n       */\n      class TGM_Bulk_Installer extends \\WP_Upgrader {\n\n          /**\n           * Holds result of bulk plugin installation.\n           *\n           * @since 2.2.0\n           *\n           * @var string\n           */\n          public $result;\n\n          /**\n           * Flag to check if bulk installation is occurring or not.\n           *\n           * @since 2.2.0\n           *\n           * @var boolean\n           */\n          public $bulk = false;\n\n          /**\n           * Processes the bulk installation of plugins.\n           *\n           * @since 2.2.0\n           *\n           * @param array $packages The plugin sources needed for installation.\n           * @return string|boolean Install confirmation messages on success, false on failure.\n           */\n          public function bulk_install( $packages ) {\n\n              // Pass installer skin object and set bulk property to true.\n              $this->init();\n              $this->bulk = true;\n\n              // Set install strings and automatic activation strings (if config option is set to true).\n              $this->install_strings();\n              if ( TGM_Plugin_Activation::$instance->is_automatic ) {\n                  $this->activate_strings();\n              }\n\n              // Run the header string to notify user that the process has begun.\n              $this->skin->header();\n\n              // Connect to the Filesystem.\n              $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );\n              if ( ! $res ) {\n                  $this->skin->footer();\n                  return false;\n              }\n\n              // Set the bulk header and prepare results array.\n              $this->skin->bulk_header();\n              $results = array();\n\n              // Get the total number of packages being processed and iterate as each package is successfully installed.\n              $this->update_count   = count( $packages );\n              $this->update_current = 0;\n\n              // Loop through each plugin and process the installation.\n              foreach ( $packages as $plugin ) {\n                  $this->update_current++; // Increment counter.\n\n                  // Do the plugin install.\n                  $result = $this->run(\n                      array(\n                          'package'           => $plugin, // The plugin source.\n                          'destination'       => WP_PLUGIN_DIR, // The destination dir.\n                          'clear_destination' => false, // Do we want to clear the destination or not?\n                          'clear_working'     => true, // Remove original install file.\n                          'is_multi'          => true, // Are we processing multiple installs?\n                          'hook_extra'        => array( 'plugin' => $plugin, ), // Pass plugin source as extra data.\n                      )\n                  );\n\n                  // Store installation results in result property.\n                  $results[$plugin] = $this->result;\n\n                  // Prevent credentials auth screen from displaying multiple times.\n                  if ( false === $result ) {\n                      break;\n                  }\n              }\n\n              // Pass footer skin strings.\n              $this->skin->bulk_footer();\n              $this->skin->footer();\n\n              // Return our results.\n              return $results;\n\n          }\n\n          /**\n           * Performs the actual installation of each plugin.\n           *\n           * This method also activates the plugin in the automatic flag has been\n           * set to true for the TGMPA class.\n           *\n           * @since 2.2.0\n           *\n           * @param array $options The installation cofig options\n           * @return null/array Return early if error, array of installation data on success\n           */\n          public function run( $options ) {\n\n              // Default config options.\n              $defaults = array(\n                  'package'           => '',\n                  'destination'       => '',\n                  'clear_destination' => false,\n                  'clear_working'     => true,\n                  'is_multi'          => false,\n                  'hook_extra'        => array(),\n              );\n\n              // Parse default options with config options from $this->bulk_upgrade and extract them.\n              $options = wp_parse_args( $options, $defaults );\n              extract( $options );\n\n              // Connect to the Filesystem.\n              $res = $this->fs_connect( array( WP_CONTENT_DIR, $destination ) );\n              if ( ! $res ) {\n                  return false;\n              }\n\n              // Return early if there is an error connecting to the Filesystem.\n              if ( is_wp_error( $res ) ) {\n                  $this->skin->error( $res );\n                  return $res;\n              }\n\n              // Call $this->header separately if running multiple times.\n              if ( ! $is_multi )\n                  $this->skin->header();\n\n              // Set strings before the package is installed.\n              $this->skin->before();\n\n              // Download the package (this just returns the filename of the file if the package is a local file).\n              $download = $this->download_package( $package );\n              if ( is_wp_error( $download ) ) {\n                  $this->skin->error( $download );\n                  $this->skin->after();\n                  return $download;\n              }\n\n              // Don't accidentally delete a local file.\n              $delete_package = ( $download != $package );\n\n              // Unzip file into a temporary working directory.\n              $working_dir = $this->unpack_package( $download, $delete_package );\n              if ( is_wp_error( $working_dir ) ) {\n                  $this->skin->error( $working_dir );\n                  $this->skin->after();\n                  return $working_dir;\n              }\n\n              // Install the package into the working directory with all passed config options.\n              $result = $this->install_package(\n                  array(\n                      'source'            => $working_dir,\n                      'destination'       => $destination,\n                      'clear_destination' => $clear_destination,\n                      'clear_working'     => $clear_working,\n                      'hook_extra'        => $hook_extra,\n                  )\n              );\n\n              // Pass the result of the installation.\n              $this->skin->set_result( $result );\n\n              // Set correct strings based on results.\n              if ( is_wp_error( $result ) ) {\n                  $this->skin->error( $result );\n                  $this->skin->feedback( 'process_failed' );\n              }\n              // The plugin install is successful.\n              else {\n                  $this->skin->feedback( 'process_success' );\n              }\n\n              // Only process the activation of installed plugins if the automatic flag is set to true.\n              if ( TGM_Plugin_Activation::$instance->is_automatic ) {\n                  // Flush plugins cache so we can make sure that the installed plugins list is always up to date.\n                  wp_cache_flush();\n\n                  // Get the installed plugin file and activate it.\n                  $plugin_info = $this->plugin_info( $package );\n                  $activate    = activate_plugin( $plugin_info );\n\n                  // Re-populate the file path now that the plugin has been installed and activated.\n                  TGM_Plugin_Activation::$instance->populate_file_path();\n\n                  // Set correct strings based on results.\n                  if ( is_wp_error( $activate ) ) {\n                      $this->skin->error( $activate );\n                      $this->skin->feedback( 'activation_failed' );\n                  }\n                  // The plugin activation is successful.\n                  else {\n                      $this->skin->feedback( 'activation_success' );\n                  }\n              }\n\n              // Flush plugins cache so we can make sure that the installed plugins list is always up to date.\n              wp_cache_flush();\n\n              // Set install footer strings.\n              $this->skin->after();\n              if ( ! $is_multi ) {\n                  $this->skin->footer();\n              }\n\n              return $result;\n\n          }\n\n          /**\n           * Sets the correct install strings for the installer skin to use.\n           *\n           * @since 2.2.0\n           */\n          public function install_strings() {\n\n              $this->strings['no_package']          = __( 'Install package not available.', 'tgmpa' );\n              $this->strings['downloading_package'] = __( 'Downloading install package from <span class=\"code\">%s</span>&#8230;', 'tgmpa' );\n              $this->strings['unpack_package']      = __( 'Unpacking the package&#8230;', 'tgmpa' );\n              $this->strings['installing_package']  = __( 'Installing the plugin&#8230;', 'tgmpa' );\n              $this->strings['process_failed']      = __( 'Plugin install failed.', 'tgmpa' );\n              $this->strings['process_success']     = __( 'Plugin installed successfully.', 'tgmpa' );\n\n          }\n\n          /**\n           * Sets the correct activation strings for the installer skin to use.\n           *\n           * @since 2.2.0\n           */\n          public function activate_strings() {\n\n              $this->strings['activation_failed']  = __( 'Plugin activation failed.', 'tgmpa' );\n              $this->strings['activation_success'] = __( 'Plugin activated successfully.', 'tgmpa' );\n\n          }\n\n          /**\n           * Grabs the plugin file from an installed plugin.\n           *\n           * @since 2.2.0\n           *\n           * @return string|boolean Return plugin file on success, false on failure\n           */\n          public function plugin_info() {\n\n              // Return false if installation result isn't an array or the destination name isn't set.\n              if ( ! is_array( $this->result ) ) {\n                  return false;\n              }\n\n              if ( empty( $this->result['destination_name'] ) ) {\n                  return false;\n              }\n\n              /// Get the installed plugin file or return false if it isn't set.\n              $plugin = get_plugins( '/' . $this->result['destination_name'] );\n              if ( empty( $plugin ) ) {\n                  return false;\n              }\n\n              // Assume the requested plugin is the first in the list.\n              $pluginfiles = array_keys( $plugin );\n\n              return $this->result['destination_name'] . '/' . $pluginfiles[0];\n\n          }\n\n      }\n  }\n\n  if ( ! class_exists( 'UsabilityDynamics\\WP\\TGM_Bulk_Installer_Skin' ) ) {\n      /**\n       * Installer skin to set strings for the bulk plugin installations..\n       *\n       * Extends Bulk_Upgrader_Skin and customizes to suit the installation of multiple\n       * plugins.\n       *\n       * @since 2.2.0\n       *\n       * @package TGM-Plugin-Activation\n       * @author  Thomas Griffin <thomasgriffinmedia.com>\n       * @author  Gary Jones <gamajo.com>\n       */\n      class TGM_Bulk_Installer_Skin extends \\Bulk_Upgrader_Skin {\n\n          /**\n           * Holds plugin info for each individual plugin installation.\n           *\n           * @since 2.2.0\n           *\n           * @var array\n           */\n          public $plugin_info = array();\n\n          /**\n           * Holds names of plugins that are undergoing bulk installations.\n           *\n           * @since 2.2.0\n           *\n           * @var array\n           */\n          public $plugin_names = array();\n\n          /**\n           * Integer to use for iteration through each plugin installation.\n           *\n           * @since 2.2.0\n           *\n           * @var integer\n           */\n          public $i = 0;\n\n          /**\n           * Constructor. Parses default args with new ones and extracts them for use.\n           *\n           * @since 2.2.0\n           *\n           * @param array $args Arguments to pass for use within the class.\n           */\n          public function __construct( $args = array() ) {\n\n              // Parse default and new args.\n              $defaults = array( 'url' => '', 'nonce' => '', 'names' => array() );\n              $args     = wp_parse_args( $args, $defaults );\n\n              // Set plugin names to $this->plugin_names property.\n              $this->plugin_names = $args['names'];\n\n              // Extract the new args.\n              parent::__construct( $args );\n\n          }\n\n          /**\n           * Sets install skin strings for each individual plugin.\n           *\n           * Checks to see if the automatic activation flag is set and uses the\n           * the proper strings accordingly.\n           *\n           * @since 2.2.0\n           */\n          public function add_strings() {\n\n              // Automatic activation strings.\n              if ( TGM_Plugin_Activation::$instance->is_automatic ) {\n                  $this->upgrader->strings['skin_upgrade_start']        = __( 'The installation and activation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' );\n                  $this->upgrader->strings['skin_update_successful']    = __( '%1$s installed and activated successfully.', 'tgmpa' ) . ' <a onclick=\"%2$s\" href=\"#\" class=\"hide-if-no-js\"><span>' . __( 'Show Details', 'tgmpa' ) . '</span><span class=\"hidden\">' . __( 'Hide Details', 'tgmpa' ) . '</span>.</a>';\n                  $this->upgrader->strings['skin_upgrade_end']          = __( 'All installations and activations have been completed.', 'tgmpa' );\n                  $this->upgrader->strings['skin_before_update_header'] = __( 'Installing and Activating Plugin %1$s (%2$d/%3$d)', 'tgmpa' );\n              }\n              // Default installation strings.\n              else {\n                  $this->upgrader->strings['skin_upgrade_start']        = __( 'The installation process is starting. This process may take a while on some hosts, so please be patient.', 'tgmpa' );\n                  $this->upgrader->strings['skin_update_failed_error']  = __( 'An error occurred while installing %1$s: <strong>%2$s</strong>.', 'tgmpa' );\n                  $this->upgrader->strings['skin_update_failed']        = __( 'The installation of %1$s failed.', 'tgmpa' );\n                  $this->upgrader->strings['skin_update_successful']    = __( '%1$s installed successfully.', 'tgmpa' ) . ' <a onclick=\"%2$s\" href=\"#\" class=\"hide-if-no-js\"><span>' . __( 'Show Details', 'tgmpa' ) . '</span><span class=\"hidden\">' . __( 'Hide Details', 'tgmpa' ) . '</span>.</a>';\n                  $this->upgrader->strings['skin_upgrade_end']          = __( 'All installations have been completed.', 'tgmpa' );\n                  $this->upgrader->strings['skin_before_update_header'] = __( 'Installing Plugin %1$s (%2$d/%3$d)', 'tgmpa' );\n              }\n\n          }\n\n          /**\n           * Outputs the header strings and necessary JS before each plugin installation.\n           *\n           * @since 2.2.0\n           */\n          public function before( $title = '' ) {\n\n              // We are currently in the plugin installation loop, so set to true.\n              $this->in_loop = true;\n\n              printf( '<h4>' . $this->upgrader->strings['skin_before_update_header'] . ' <img alt=\"\" src=\"' . admin_url( 'images/wpspin_light.gif' ) . '\" class=\"hidden waiting-' . $this->upgrader->update_current . '\" style=\"vertical-align:middle;\" /></h4>', $this->plugin_names[$this->i], $this->upgrader->update_current, $this->upgrader->update_count );\n              echo '<script type=\"text/javascript\">jQuery(\\'.waiting-' . esc_js( $this->upgrader->update_current ) . '\\').show();</script>';\n              echo '<div class=\"update-messages hide-if-js\" id=\"progress-' . esc_attr( $this->upgrader->update_current ) . '\"><p>';\n\n              // Flush header output buffer.\n              $this->before_flush_output();\n\n          }\n\n          /**\n           * Outputs the footer strings and necessary JS after each plugin installation.\n           *\n           * Checks for any errors and outputs them if they exist, else output\n           * success strings.\n           *\n           * @since 2.2.0\n           */\n          public function after( $title = '' ) {\n\n              // Close install strings.\n              echo '</p></div>';\n\n              // Output error strings if an error has occurred.\n              if ( $this->error || ! $this->result ) {\n                  if ( $this->error ) {\n                      echo '<div class=\"error\"><p>' . sprintf( $this->upgrader->strings['skin_update_failed_error'], $this->plugin_names[$this->i], $this->error ) . '</p></div>';\n                  } else {\n                      echo '<div class=\"error\"><p>' . sprintf( $this->upgrader->strings['skin_update_failed'], $this->plugin_names[$this->i] ) . '</p></div>';\n                  }\n\n                  echo '<script type=\"text/javascript\">jQuery(\\'#progress-' . esc_js( $this->upgrader->update_current ) . '\\').show();</script>';\n              }\n\n              // If the result is set and there are no errors, success!\n              if ( ! empty( $this->result ) && ! is_wp_error( $this->result ) ) {\n                  echo '<div class=\"updated\"><p>' . sprintf( $this->upgrader->strings['skin_update_successful'], $this->plugin_names[$this->i], 'jQuery(\\'#progress-' . esc_js( $this->upgrader->update_current ) . '\\').toggle();jQuery(\\'span\\', this).toggle(); return false;' ) . '</p></div>';\n                  echo '<script type=\"text/javascript\">jQuery(\\'.waiting-' . esc_js( $this->upgrader->update_current ) . '\\').hide();</script>';\n              }\n\n              // Set in_loop and error to false and flush footer output buffer.\n              $this->reset();\n              $this->after_flush_output();\n\n          }\n\n          /**\n           * Outputs links after bulk plugin installation is complete.\n           *\n           * @since 2.2.0\n           */\n          public function bulk_footer() {\n\n              // Serve up the string to say installations (and possibly activations) are complete.\n              parent::bulk_footer();\n\n              // Flush plugins cache so we can make sure that the installed plugins list is always up to date.\n              wp_cache_flush();\n\n              // Display message based on if all plugins are now active or not.\n              $complete = array();\n              foreach ( TGM_Plugin_Activation::$instance->plugins as $plugin ) {\n                  if ( ! is_plugin_active( $plugin['file_path'] ) ) {\n                      echo '<p><a href=\"' . esc_url( add_query_arg( 'page', TGM_Plugin_Activation::$instance->menu, network_admin_url( 'themes.php' ) ) ) . '\" title=\"' . esc_attr( TGM_Plugin_Activation::$instance->strings['return'] ) . '\" target=\"_parent\">' . TGM_Plugin_Activation::$instance->strings['return'] . '</a></p>';\n                      $complete[] = $plugin;\n                      break;\n                  }\n                  // Nothing to store.\n                  else {\n                      $complete[] = '';\n                  }\n              }\n\n              // Filter out any empty entries.\n              $complete = array_filter( $complete );\n\n              // All plugins are active, so we display the complete string and hide the menu to protect users.\n              if ( empty( $complete ) ) {\n                  echo '<p>' .  sprintf( TGM_Plugin_Activation::$instance->strings['complete'], '<a href=\"' . network_admin_url() . '\" title=\"' . __( 'Return to the Dashboard', 'tgmpa' ) . '\">' . __( 'Return to the Dashboard', 'tgmpa' ) . '</a>' ) . '</p>';\n                  echo '<style type=\"text/css\">#adminmenu .wp-submenu li.current { display: none !important; }</style>';\n              }\n\n          }\n\n          /**\n           * Flush header output buffer.\n           *\n           * @since 2.2.0\n           */\n          public function before_flush_output() {\n\n              wp_ob_end_flush_all();\n              flush();\n\n          }\n\n          /**\n           * Flush footer output buffer and iterate $this->i to make sure the\n           * installation strings reference the correct plugin.\n           *\n           * @since 2.2.0\n           */\n          public function after_flush_output() {\n\n              wp_ob_end_flush_all();\n              flush();\n              $this->i++;\n\n          }\n\n      }\n  }\n\n}"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-tgm-list-table.php",
    "content": "<?php\n/**\n * Plugin installation and activation for WordPress themes.\n *\n * @package   TGM-Plugin-Activation\n * @version   2.4.0\n * @author    Thomas Griffin <thomasgriffinmedia.com>\n * @author    Gary Jones <gamajo.com>\n * @copyright Copyright (c) 2012, Thomas Griffin\n * @license   http://opensource.org/licenses/gpl-2.0.php GPL v2 or later\n * @link      https://github.com/thomasgriffin/TGM-Plugin-Activation\n */\n\n/*\n    Copyright 2014 Thomas Griffin (thomasgriffinmedia.com)\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License, version 2, as\n    published by the Free Software Foundation.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\nnamespace UsabilityDynamics\\WP {\n\n  /**\n   * WP_List_Table isn't always available. If it isn't available,\n   * we load it here.\n   *\n   * @since 2.2.0\n   */\n  if ( ! class_exists( 'WP_List_Table' ) ) {\n      require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );\n  }\n\n  if ( ! class_exists( 'UsabilityDynamics\\WP\\TGMPA_List_Table' ) ) {\n\n    /**\n     * List table class for handling plugins.\n     *\n     * Extends the WP_List_Table class to provide a future-compatible\n     * way of listing out all required/recommended plugins.\n     *\n     * Gives users an interface similar to the Plugin Administration\n     * area with similar (albeit stripped down) capabilities.\n     *\n     * This class also allows for the bulk install of plugins.\n     *\n     * @since 2.2.0\n     *\n     * @package TGM-Plugin-Activation\n     * @author  Thomas Griffin <thomas@thomasgriffinmedia.com>\n     * @author  Gary Jones <gamajo@gamajo.com>\n     */\n    class TGMPA_List_Table extends \\WP_List_Table {\n\n        /**\n         * References parent constructor and sets defaults for class.\n         *\n         * The constructor also grabs a copy of $instance from the TGMPA class\n         * and stores it in the global object TGM_Plugin_Activation::$instance.\n         *\n         * @since 2.2.0\n         *\n         * @global unknown $status\n         * @global string $page\n         */\n        public function __construct() {\n\n            global $status, $page;\n\n            parent::__construct(\n                array(\n                    'singular' => 'plugin',\n                    'plural'   => 'plugins',\n                    'ajax'     => false,\n                )\n            );\n\n        }\n\n        /**\n         * Gathers and renames all of our plugin information to be used by\n         * WP_List_Table to create our table.\n         *\n         * @since 2.2.0\n         *\n         * @return array $table_data Information for use in table.\n         */\n        protected function _gather_plugin_data() {\n\n            // Load thickbox for plugin links.\n            TGM_Plugin_Activation::$instance->admin_init();\n            TGM_Plugin_Activation::$instance->thickbox();\n\n            // Prep variables for use and grab list of all installed plugins.\n            $table_data        = array();\n            $i                 = 0;\n            $installed_plugins = get_plugins();\n\n            foreach ( TGM_Plugin_Activation::$instance->plugins as $plugin ) {\n                if ( is_plugin_active( $plugin['file_path'] ) ) {\n                    continue; // No need to display plugins if they are installed and activated.\n                }\n\n                //echo \"<pre>\"; print_r( $plugin ); echo \"</pre>\"; //die();\n                \n                $table_data[$i]['sanitized_plugin'] = $plugin['name'];\n                $table_data[$i]['slug']             = $this->_get_plugin_data_from_name( $plugin['name'] );\n\n                $external_url = $this->_get_plugin_data_from_name( $plugin['name'], 'external_url' );\n                $source       = $this->_get_plugin_data_from_name( $plugin['name'], 'source' );\n\n                if ( $external_url && preg_match( '|^http(s)?://|', $external_url ) ) {\n                    $table_data[$i]['plugin'] = '<strong><a href=\"' . esc_url( $external_url ) . '\" title=\"' . $plugin['name'] . '\" target=\"_blank\">' . $plugin['name'] . '</a></strong>';\n                }\n                elseif ( ! $source || preg_match( '|^http://wordpress.org/extend/plugins/|', $source ) ) {\n                    $url = esc_url( add_query_arg(\n                        array(\n                            'tab'       => 'plugin-information',\n                            'plugin'    => $this->_get_plugin_data_from_name( $plugin['name'] ),\n                            'TB_iframe' => 'true',\n                            'width'     => '640',\n                            'height'    => '500',\n                        ),\n                        admin_url( 'plugin-install.php' )\n                    ) );\n\n                    $table_data[$i]['plugin'] = '<strong><a href=\"' . esc_url( $url ) . '\" class=\"thickbox\" title=\"' . $plugin['name'] . '\">' . $plugin['name'] . '</a></strong>';\n                }\n                else {\n                    $table_data[$i]['plugin'] = '<strong>' . $plugin['name'] . '</strong>'; // No hyperlink.\n                }\n\n                if ( isset( $table_data[$i]['plugin'] ) && (array) $table_data[$i]['plugin'] ) {\n                    $plugin['name'] = $table_data[$i]['plugin'];\n                }\n                \n                if ( ! empty( $plugin['source'] ) || ( isset( $plugin['private'] ) && $plugin['private'] == true ) ) {\n                    // The plugin must be from a private repository.\n                    if ( !empty( $plugin['source'] ) && preg_match( '|^http(s)?://|', $plugin['source'] ) ) {\n                      $table_data[$i]['source'] = __( 'Private Repository', 'tgmpa' );\n                    // The plugin is pre-packaged with the theme.\n                    } elseif( isset( $plugin['private'] ) && $plugin['private'] == true ) {\n                      $_source = !empty( $plugin[ 'author' ] ) ? $plugin[ 'author' ] : __( 'Private Repository', 'tgmpa' );\n                      $_url = !empty( $plugin[ 'author_url' ] ) ? $plugin[ 'author_url' ] : ( !empty( $plugin[ 'external_url' ] ) ? $plugin[ 'external_url' ] : false );\n                      $_source = !empty( $_url ) ? \"<a target=\\\"_blank\\\" href=\\\"{$_url}\\\">{$_source}</a>\" : $_source;\n                      $table_data[$i]['source'] = $_source;\n                    } else {\n                      $table_data[$i]['source'] = __( 'Pre-Packaged', 'tgmpa' );\n                    }\n                }\n                // The plugin is from the WordPress repository.\n                else {\n                    $table_data[$i]['source'] = __( 'WordPress Repository', 'tgmpa' );\n                }\n                \n                $table_data[$i]['source'] = \"<div style=\\\"min-height:44px;\\\">{$table_data[$i]['source']}</div>\";\n                $table_data[$i]['type'] = isset( $plugin['required'] ) && $plugin['required'] ? __( 'Required', 'tgmpa' ) : __( 'Recommended', 'tgmpa' );\n\n                if ( ! isset( $installed_plugins[$plugin['file_path']] ) ) {\n                    $table_data[$i]['status'] = sprintf( '%1$s', __( 'Not Installed', 'tgmpa' ) );\n                } elseif ( is_plugin_inactive( $plugin['file_path'] ) ) {\n                    $table_data[$i]['status'] = sprintf( '%1$s', __( 'Installed But Not Activated', 'tgmpa' ) );\n                }\n\n                $table_data[$i]['file_path'] = $plugin['file_path'];\n                $table_data[$i]['url']       = isset( $plugin['source'] ) ? $plugin['source'] : 'repo';\n\n                $i++;\n            }\n\n            // Sort plugins by Required/Recommended type and by alphabetical listing within each type.\n            $resort = array();\n            $req    = array();\n            $rec    = array();\n\n            // Grab all the plugin types.\n            foreach ( $table_data as $plugin ) {\n                $resort[] = $plugin['type'];\n            }\n\n            // Sort each plugin by type.\n            foreach ( $resort as $type ) {\n                if ( 'Required' == $type ) {\n                    $req[] = $type;\n                } else {\n                    $rec[] = $type;\n                }\n            }\n\n            // Sort alphabetically each plugin type array, merge them and then sort in reverse (lists Required plugins first).\n            sort( $req );\n            sort( $rec );\n            array_merge( $resort, $req, $rec );\n            array_multisort( $resort, SORT_DESC, $table_data );\n\n            return $table_data;\n\n        }\n\n        /**\n         * Retrieve plugin data, given the plugin name. Taken from the\n         * TGM_Plugin_Activation class.\n         *\n         * Loops through the registered plugins looking for $name. If it finds it,\n         * it returns the $data from that plugin. Otherwise, returns false.\n         *\n         * @since 2.2.0\n         *\n         * @param string $name Name of the plugin, as it was registered.\n         * @param string $data Optional. Array key of plugin data to return. Default is slug.\n         * @return string|boolean Plugin slug if found, false otherwise.\n         */\n        protected function _get_plugin_data_from_name( $name, $data = 'slug' ) {\n\n            foreach ( TGM_Plugin_Activation::$instance->plugins as $plugin => $values ) {\n                if ( $name == $values['name'] && isset( $values[$data] ) ) {\n                    return $values[$data];\n                }\n            }\n\n            return false;\n\n        }\n\n        /**\n         * Create default columns to display important plugin information\n         * like type, action and status.\n         *\n         * @since 2.2.0\n         *\n         * @param array $item         Array of item data.\n         * @param string $column_name The name of the column.\n         */\n        public function column_default( $item, $column_name ) {\n\n            switch ( $column_name ) {\n                case 'source':\n                case 'type':\n                case 'status':\n                    return $item[$column_name];\n            }\n\n        }\n\n        /**\n         * Create default title column along with action links of 'Install'\n         * and 'Activate'.\n         *\n         * @since 2.2.0\n         *\n         * @param array $item Array of item data.\n         * @return string     The action hover links.\n         */\n        public function column_plugin( $item ) {\n\n            //echo \"<pre>\"; print_r( $item ); echo \"</pre>\";\n        \n            $installed_plugins = get_plugins();\n            $actions = array();\n            \n            //** No need to display any hover links. */\n            if ( is_plugin_active( $item['file_path'] ) || !isset( TGM_Plugin_Activation::$instance->plugins[ $item[ 'slug' ] ] ) ) {\n              return sprintf( '%1$s %2$s', $item['plugin'], $this->row_actions( $actions ) );\n            }\n            \n            $plugin = TGM_Plugin_Activation::$instance->plugins[ $item[ 'slug' ] ];\n            \n            //** We need to display the 'Install' hover link. */\n            if ( ! isset( $installed_plugins[$item['file_path']] ) ) {\n              if( isset( $plugin[ 'private' ] ) && $plugin[ 'private' ] == true ) {\n                //** Ignore 'Install' action since plugin is not available for direct upload. */\n              } else {\n                $actions = array(\n                  'install' => sprintf(\n                    '<a href=\"%1$s\" title=\"' . __( 'Install', 'tgmpa' ) . ' %2$s\">' . __( 'Install', 'tgmpa' ) . '</a>',\n                    wp_nonce_url(\n                      esc_url( add_query_arg(\n                        array(\n                          'page'          => TGM_Plugin_Activation::$instance->menu,\n                          'plugin'        => $item['slug'],\n                          'plugin_name'   => $item['sanitized_plugin'],\n                          'plugin_source' => $item['url'],\n                          'tgmpa-install' => 'install-plugin',\n                        ),\n                        admin_url( 'themes.php' )\n                      ) ),\n                      'tgmpa-install'\n                    ),\n                    $item['sanitized_plugin']\n                  ),\n                );\n              }\n            }\n            //** We need to display the 'Activate' hover link. */\n            elseif ( is_plugin_inactive( $item['file_path'] ) ) {\n                $actions = array(\n                    'activate' => sprintf(\n                        '<a href=\"%1$s\" title=\"' . __( 'Activate', 'tgmpa' ) . ' %2$s\">' . __( 'Activate', 'tgmpa' ) . '</a>',\n                        esc_url( add_query_arg(\n                            array(\n                                'page'                 => TGM_Plugin_Activation::$instance->menu,\n                                'plugin'               => $item['slug'],\n                                'plugin_name'          => $item['sanitized_plugin'],\n                                'plugin_source'        => $item['url'],\n                                'tgmpa-activate'       => 'activate-plugin',\n                                'tgmpa-activate-nonce' => wp_create_nonce( 'tgmpa-activate' ),\n                            ),\n                            admin_url( 'themes.php' )\n                        ) ),\n                        $item['sanitized_plugin']\n                    ),\n                );\n            }\n\n            return sprintf( '%1$s %2$s', $item['plugin'], $this->row_actions( $actions ) );\n\n        }\n\n        /**\n         * Required for bulk installing.\n         *\n         * Adds a checkbox for each plugin.\n         *\n         * @since 2.2.0\n         *\n         * @param array $item Array of item data.\n         * @return string     The input checkbox with all necessary info.\n         */\n        public function column_cb( $item ) {\n          //** Ignore Plugins if they are not in list */\n          if ( is_plugin_active( $item['file_path'] ) || !isset( TGM_Plugin_Activation::$instance->plugins[ $item[ 'slug' ] ] ) ) {\n            return '';\n          }\n          //** Ignore plugin's action if it's private and not installed. */\n          $plugin = TGM_Plugin_Activation::$instance->plugins[ $item[ 'slug' ] ];\n          $installed_plugins = get_plugins();\n          if( isset( $plugin[ 'private' ] ) && $plugin[ 'private' ] == true && !isset( $installed_plugins[$item['file_path']] ) ) {\n            return '';\n          }\n          $value = $item['file_path'] . ',' . $item['url'] . ',' . $item['sanitized_plugin'];\n          return sprintf( '<input type=\"checkbox\" name=\"%1$s[]\" value=\"%2$s\" id=\"%3$s\" />', $this->_args['singular'], $value, $item['sanitized_plugin'] );\n        }\n\n        /**\n         * Sets default message within the plugins table if no plugins\n         * are left for interaction.\n         *\n         * Hides the menu item to prevent the user from clicking and\n         * getting a permissions error.\n         *\n         * @since 2.2.0\n         */\n        public function no_items() {\n\n            printf( __( 'No plugins to install or activate. <a href=\"%1$s\" title=\"Return to the Dashboard\">Return to the Dashboard</a>', 'tgmpa' ), admin_url() );\n            echo '<style type=\"text/css\">#adminmenu .wp-submenu li.current { display: none !important; }</style>';\n\n        }\n\n        /**\n         * Output all the column information within the table.\n         *\n         * @since 2.2.0\n         *\n         * @return array $columns The column names.\n         */\n        public function get_columns() {\n\n            $columns = array(\n                'cb'     => '<input type=\"checkbox\" />',\n                'plugin' => __( 'Plugin', 'tgmpa' ),\n                'source' => __( 'Source', 'tgmpa' ),\n                'type'   => __( 'Type', 'tgmpa' ),\n                'status' => __( 'Status', 'tgmpa' )\n            );\n\n            return $columns;\n\n        }\n\n        /**\n         * Defines all types of bulk actions for handling\n         * registered plugins.\n         *\n         * @since 2.2.0\n         *\n         * @return array $actions The bulk actions for the plugin install table.\n         */\n        public function get_bulk_actions() {\n\n            $actions = array(\n                'tgmpa-bulk-install'  => __( 'Install', 'tgmpa' ),\n                'tgmpa-bulk-activate' => __( 'Activate', 'tgmpa' ),\n            );\n\n            return $actions;\n\n        }\n\n        /**\n         * Processes bulk installation and activation actions.\n         *\n         * The bulk installation process looks either for the $_POST\n         * information or for the plugin info within the $_GET variable if\n         * a user has to use WP_Filesystem to enter their credentials.\n         *\n         * @since 2.2.0\n         */\n        public function process_bulk_actions() {\n\n            // Bulk installation process.\n            if ( 'tgmpa-bulk-install' === $this->current_action() ) {\n                check_admin_referer( 'bulk-' . $this->_args['plural'] );\n\n                // Prep variables to be populated.\n                $plugins_to_install = array();\n                $plugin_installs    = array();\n                $plugin_path        = array();\n                $plugin_name        = array();\n\n                // Look first to see if information has been passed via WP_Filesystem.\n                if ( isset( $_GET['plugins'] ) ) {\n                    $plugins = explode( ',', stripslashes( $_GET['plugins'] ) );\n                }\n                // Looks like the user can use the direct method, take from $_POST.\n                elseif ( isset( $_POST['plugin'] ) ) {\n                    $plugins = (array) $_POST['plugin'];\n                }\n                // Nothing has been submitted.\n                else {\n                    $plugins = array();\n                }\n\n                // Grab information from $_POST if available.\n                if ( isset( $_POST['plugin'] ) ) {\n                    foreach ( $plugins as $plugin_data ) {\n                        $plugins_to_install[] = explode( ',', $plugin_data );\n                    }\n\n                    foreach ( $plugins_to_install as $plugin_data ) {\n                        $plugin_installs[] = $plugin_data[0];\n                        $plugin_path[]     = $plugin_data[1];\n                        $plugin_name[]     = $plugin_data[2];\n                    }\n                }\n                // Information has been passed via $_GET.\n                else {\n                    foreach ( $plugins as $key => $value ) {\n                        // Grab plugin slug for each plugin.\n                        if ( 0 == $key % 3 || 0 == $key ) {\n                            $plugins_to_install[] = $value;\n                            $plugin_installs[]    = $value;\n                        }\n                    }\n                }\n\n                // Look first to see if information has been passed via WP_Filesystem.\n                if ( isset( $_GET['plugin_paths'] ) ) {\n                    $plugin_paths = explode( ',', stripslashes( $_GET['plugin_paths'] ) );\n                }\n                // Looks like the user doesn't need to enter his FTP creds.\n                elseif ( isset( $_POST['plugin'] ) ) {\n                    $plugin_paths = (array) $plugin_path;\n                }\n                // Nothing has been submitted.\n                else {\n                    $plugin_paths = array();\n                }\n\n                // Look first to see if information has been passed via WP_Filesystem.\n                if ( isset( $_GET['plugin_names'] ) ) {\n                    $plugin_names = explode( ',', stripslashes( $_GET['plugin_names'] ) );\n                }\n                // Looks like the user doesn't need to enter his FTP creds.\n                elseif ( isset( $_POST['plugin'] ) ) {\n                    $plugin_names = (array) $plugin_name;\n                }\n                // Nothing has been submitted.\n                else {\n                    $plugin_names = array();\n                }\n\n                // Loop through plugin slugs and remove already installed plugins from the list.\n                $i = 0;\n                foreach ( $plugin_installs as $key => $plugin ) {\n                    if ( preg_match( '|.php$|', $plugin ) ) {\n                        unset( $plugin_installs[$key] );\n\n                        // If the plugin path isn't in the $_GET variable, we can unset the corresponding path.\n                        if ( ! isset( $_GET['plugin_paths'] ) )\n                            unset( $plugin_paths[$i] );\n\n                        // If the plugin name isn't in the $_GET variable, we can unset the corresponding name.\n                        if ( ! isset( $_GET['plugin_names'] ) )\n                            unset( $plugin_names[$i] );\n                    }\n                    $i++;\n                }\n\n                // No need to proceed further if we have no plugins to install.\n                if ( empty( $plugin_installs ) ) {\n                    return false;\n                }\n\n                // Reset array indexes in case we removed already installed plugins.\n                $plugin_installs = array_values( $plugin_installs );\n                $plugin_paths    = array_values( $plugin_paths );\n                $plugin_names    = array_values( $plugin_names );\n\n                // If we grabbed our plugin info from $_GET, we need to decode it for use.\n                $plugin_installs = array_map( 'urldecode', $plugin_installs );\n                $plugin_paths    = array_map( 'urldecode', $plugin_paths );\n                $plugin_names    = array_map( 'urldecode', $plugin_names );\n\n                // Pass all necessary information via URL if WP_Filesystem is needed.\n                $url = wp_nonce_url(\n                    esc_url( add_query_arg(\n                        array(\n                            'page'          => TGM_Plugin_Activation::$instance->menu,\n                            'tgmpa-action'  => 'install-selected',\n                            'plugins'       => urlencode( implode( ',', $plugins ) ),\n                            'plugin_paths'  => urlencode( implode( ',', $plugin_paths ) ),\n                            'plugin_names'  => urlencode( implode( ',', $plugin_names ) ),\n                        ),\n                        admin_url( 'themes.php' )\n                    ) ),\n                    'bulk-plugins'\n                );\n                $method = ''; // Leave blank so WP_Filesystem can populate it as necessary.\n                $fields = array( 'action', '_wp_http_referer', '_wpnonce' ); // Extra fields to pass to WP_Filesystem.\n\n                if ( false === ( $creds = request_filesystem_credentials( $url, $method, false, false, $fields ) ) ) {\n                    return true;\n                }\n\n                if ( ! WP_Filesystem( $creds ) ) {\n                    request_filesystem_credentials( $url, $method, true, false, $fields ); // Setup WP_Filesystem.\n                    return true;\n                }\n\n                require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for plugins_api\n                require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes\n\n                // Store all information in arrays since we are processing a bulk installation.\n                $api          = array();\n                $sources      = array();\n                $install_path = array();\n\n                // Loop through each plugin to install and try to grab information from WordPress API, if not create 'tgmpa-empty' scalar.\n                $i = 0;\n                foreach ( $plugin_installs as $plugin ) {\n                    $api[$i] = plugins_api( 'plugin_information', array( 'slug' => $plugin, 'fields' => array( 'sections' => false ) ) ) ? plugins_api( 'plugin_information', array( 'slug' => $plugin, 'fields' => array( 'sections' => false ) ) ) : (object) $api[$i] = 'tgmpa-empty';\n                    $i++;\n                }\n\n                if ( is_wp_error( $api ) ) {\n                    wp_die( TGM_Plugin_Activation::$instance->strings['oops'] . var_dump( $api ) );\n                }\n\n                // Capture download links from $api or set install link to pre-packaged/private repo.\n                $i = 0;\n                foreach ( $api as $object ) {\n                    $sources[$i] = isset( $object->download_link ) && 'repo' == $plugin_paths[$i] ? $object->download_link : $plugin_paths[$i];\n                    $i++;\n                }\n\n                // Finally, all the data is prepared to be sent to the installer.\n                $url   = esc_url( add_query_arg( array( 'page' => TGM_Plugin_Activation::$instance->menu ), admin_url( 'themes.php' ) ) );\n                $nonce = 'bulk-plugins';\n                $names = $plugin_names;\n                \n                // Create a new instance of TGM_Bulk_Installer.\n                $installer = new TGM_Bulk_Installer( $skin = new TGM_Bulk_Installer_Skin( compact( 'url', 'nonce', 'names' ) ) );\n\n                // Wrap the install process with the appropriate HTML.\n                echo '<div class=\"tgmpa wrap\">';\n                    if ( version_compare( TGM_Plugin_Activation::$instance->wp_version, '3.8', '<' ) ) {\n                        screen_icon( apply_filters( 'tgmpa_default_screen_icon', 'themes' ) );\n                    }\n                    echo '<h2>' . esc_html( get_admin_page_title() ) . '</h2>';\n                    // Process the bulk installation submissions.\n                    $installer->bulk_install( $sources );\n                echo '</div>';\n\n                return true;\n            }\n\n            // Bulk activation process.\n            if ( 'tgmpa-bulk-activate' === $this->current_action() ) {\n                check_admin_referer( 'bulk-' . $this->_args['plural'] );\n\n                // Grab plugin data from $_POST.\n                $plugins             = isset( $_POST['plugin'] ) ? (array) $_POST['plugin'] : array();\n                $plugins_to_activate = array();\n\n                // Split plugin value into array with plugin file path, plugin source and plugin name.\n                foreach ( $plugins as $i => $plugin ) {\n                    $plugins_to_activate[] = explode( ',', $plugin );\n                }\n\n                foreach ( $plugins_to_activate as $i => $array ) {\n                    if ( ! preg_match( '|.php$|', $array[0] ) ) {\n                        unset( $plugins_to_activate[$i] );\n                    }\n                }\n\n                // Return early if there are no plugins to activate.\n                if ( empty( $plugins_to_activate ) ) {\n                    return;\n                }\n\n                $plugins      = array();\n                $plugin_names = array();\n\n                foreach ( $plugins_to_activate as $plugin_string ) {\n                    $plugins[]      = $plugin_string[0];\n                    $plugin_names[] = $plugin_string[2];\n                }\n\n                $count       = count( $plugin_names ); // Count so we can use _n function.\n                $last_plugin = array_pop( $plugin_names ); // Pop off last name to prep for readability.\n                $imploded    = empty( $plugin_names ) ? '<strong>' . $last_plugin . '</strong>' : '<strong>' . ( implode( ', ', $plugin_names ) . '</strong> and <strong>' . $last_plugin . '</strong>.' );\n\n                // Now we are good to go - let's start activating plugins.\n                $activate = activate_plugins( $plugins );\n\n                if ( is_wp_error( $activate ) ) {\n                    echo '<div id=\"message\" class=\"error\"><p>' . $activate->get_error_message() . '</p></div>';\n                } else {\n                    printf( '<div id=\"message\" class=\"updated\"><p>%1$s %2$s</p></div>', _n( 'The following plugin was activated successfully:', 'The following plugins were activated successfully:', $count, 'tgmpa' ), $imploded );\n                }\n\n                // Update recently activated plugins option.\n                $recent = (array) get_option( 'recently_activated' );\n\n                foreach ( $plugins as $plugin => $time ) {\n                    if ( isset( $recent[$plugin] ) ) {\n                        unset( $recent[$plugin] );\n                    }\n                }\n\n                update_option( 'recently_activated', $recent );\n\n                unset( $_POST ); // Reset the $_POST variable in case user wants to perform one action after another.\n            }\n        }\n\n        /**\n         * Prepares all of our information to be outputted into a usable table.\n         *\n         * @since 2.2.0\n         */\n        public function prepare_items() {\n\n            $per_page              = 100; // Set it high so we shouldn't have to worry about pagination.\n            $columns               = $this->get_columns(); // Get all necessary column information.\n            $hidden                = array(); // No columns to hide, but we must set as an array.\n            $sortable              = array(); // No reason to make sortable columns.\n            $this->_column_headers = array( $columns, $hidden, $sortable ); // Get all necessary column headers.\n\n            // Process our bulk actions here.\n            $this->process_bulk_actions();\n\n            // Store all of our plugin data into $items array so WP_List_Table can use it.\n            $this->items = $this->_gather_plugin_data();\n\n        }\n\n    }\n  }\n  \n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-tgm-plugin-activation.php",
    "content": "<?php\n/**\n * Plugin installation and activation for WordPress themes.\n *\n * @package   TGM-Plugin-Activation\n * @version   2.4.0\n * @author    Thomas Griffin <thomasgriffinmedia.com>\n * @author    Gary Jones <gamajo.com>\n * @copyright Copyright (c) 2012, Thomas Griffin\n * @license   http://opensource.org/licenses/gpl-2.0.php GPL v2 or later\n * @link      https://github.com/thomasgriffin/TGM-Plugin-Activation\n */\n\n/*\n    Copyright 2014 Thomas Griffin (thomasgriffinmedia.com)\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License, version 2, as\n    published by the Free Software Foundation.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n*/\n\nnamespace UsabilityDynamics\\WP {\n\n  if ( ! class_exists( 'UsabilityDynamics\\WP\\TGM_Plugin_Activation' ) ) {\n      /**\n       * Automatic plugin installation and activation library.\n       *\n       * Creates a way to automatically install and activate plugins from within themes.\n       * The plugins can be either pre-packaged, downloaded from the WordPress\n       * Plugin Repository or downloaded from a private repository.\n       *\n       * @since 1.0.0\n       *\n       * @package TGM-Plugin-Activation\n       * @author  Thomas Griffin <thomasgriffinmedia.com>\n       * @author  Gary Jones <gamajo.com>\n       */\n      class TGM_Plugin_Activation {\n\n          /**\n           * Holds a copy of itself, so it can be referenced by the class name.\n           *\n           * @since 1.0.0\n           *\n           * @var TGM_Plugin_Activation\n           */\n          public static $instance;\n\n          /**\n           * Holds arrays of plugin details.\n           *\n           * @since 1.0.0\n           *\n           * @var array\n           */\n          public $plugins = array();\n          \n          /**\n           *\n           */\n          public $referrers = array();\n\n          /**\n           * Name of the querystring argument for the admin page.\n           *\n           * @since 1.0.0\n           *\n           * @var string\n           */\n          public $menu = 'ud-install-plugins';\n\n          /**\n           * Default absolute path to folder containing pre-packaged plugin zip files.\n           *\n           * @since 2.0.0\n           *\n           * @var string Absolute path prefix to packaged zip file location. Default is empty string.\n           */\n          public $default_path = '';\n\n          /**\n           * Flag to show admin notices or not.\n           *\n           * @since 2.1.0\n           *\n           * @var boolean\n           */\n          public $has_notices = true;\n\n          /**\n           * Flag to determine if the user can dismiss the notice nag.\n           *\n           * @since 2.4.0\n           *\n           * @var boolean\n           */\n          public $dismissable = true;\n\n          /**\n           * Message to be output above nag notice if dismissable is false.\n           *\n           * @since 2.4.0\n           *\n           * @var string\n           */\n          public $dismiss_msg = '';\n\n          /**\n           * Flag to set automatic activation of plugins. Off by default.\n           *\n           * @since 2.2.0\n           *\n           * @var boolean\n           */\n          public $is_automatic = false;\n\n          /**\n           * Optional message to display before the plugins table.\n           *\n           * @since 2.2.0\n           *\n           * @var string Message filtered by wp_kses_post(). Default is empty string.\n           */\n          public $message = '';\n\n          /**\n           * Holds configurable array of strings.\n           *\n           * Default values are added in the constructor.\n           *\n           * @since 2.0.0\n           *\n           * @var array\n           */\n          public $strings = array();\n\n          /**\n           * Error Notice types.\n           *\n           * @var array\n           */\n          public $error_types = array(\n            'notice_can_install_required',\n            'notice_can_activate_required',\n            'notice_ask_to_update',\n          );\n          \n          /**\n           * Holds the version of WordPress.\n           *\n           * @since 2.4.0\n           *\n           * @var int\n           */\n          public $wp_version;\n\n          /**\n           * Adds a reference of this object to $instance, populates default strings,\n           * does the tgmpa_init action hook, and hooks in the interactions to init.\n           *\n           * @since 1.0.0\n           *\n           * @see TGM_Plugin_Activation::init()\n           */\n          private function __construct() {\n              \n              $this->strings = array(\n                  'page_title'                     => __( 'Install Required Plugins', 'tgmpa' ),\n                  'menu_title'                     => __( 'Install Plugins', 'tgmpa' ),\n                  'installing'                     => __( 'Installing Plugin: %s', 'tgmpa' ),\n                  'oops'                           => __( 'Something went wrong.', 'tgmpa' ),\n                  'notice_can_install_required'    => _n_noop( '%2$s requires the following plugin: %1$s.', '%2$s requires the following plugins: %1$s.' ),\n                  'notice_can_install_recommended' => _n_noop( '%2$s recommends the following plugin: %1$s.', '%2$s recommends the following plugins: %1$s.' ),\n                  'notice_cannot_install'          => _n_noop( 'Sorry, but you do not have the correct permissions to install the %s plugin. Contact the administrator of this site for help on getting the plugin installed.', 'Sorry, but you do not have the correct permissions to install the %s plugins. Contact the administrator of this site for help on getting the plugins installed.' ),\n                  'notice_can_activate_required'   => _n_noop( 'The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.' ),\n                  'notice_can_activate_recommended'=> _n_noop( 'The following recommended plugin is currently inactive: %1$s.', 'The following recommended plugins are currently inactive: %1$s.' ),\n                  'notice_cannot_activate'         => _n_noop( 'Sorry, but you do not have the correct permissions to activate the %s plugin. Contact the administrator of this site for help on getting the plugin activated.', 'Sorry, but you do not have the correct permissions to activate the %s plugins. Contact the administrator of this site for help on getting the plugins activated.' ),\n                  'notice_ask_to_update'           => _n_noop( 'The following plugin needs to be updated to its latest version to ensure maximum compatibility with %2$s: %1$s.', 'The following plugins need to be updated to their latest version to ensure maximum compatibility with %2$s: %1$s.' ),\n                  'notice_cannot_update'           => _n_noop( 'Sorry, but you do not have the correct permissions to update the %s plugin. Contact the administrator of this site for help on getting the plugin updated.', 'Sorry, but you do not have the correct permissions to update the %s plugins. Contact the administrator of this site for help on getting the plugins updated.' ),\n                  'install_link'                   => _n_noop( 'Begin installing plugin', 'Begin installing plugins' ),\n                  'activate_link'                  => _n_noop( 'Begin activating plugin', 'Begin activating plugins' ),\n                  'return'                         => __( 'Return to Required Plugins Installer', 'tgmpa' ),\n                  'dashboard'                      => __( 'Return to the dashboard', 'tgmpa' ),\n                  'plugin_activated'               => __( 'Plugin activated successfully.', 'tgmpa' ),\n                  'activated_successfully'         => __( 'The following plugin was activated successfully:', 'tgmpa' ),\n                  'complete'                       => __( 'All plugins installed and activated successfully. %1$s', 'tgmpa' ),\n                  'dismiss'                        => __( 'Dismiss this notice', 'tgmpa' ),\n              );\n\n              // Set the current WordPress version.\n              global $wp_version;\n              $this->wp_version = $wp_version;\n\n              // Announce that the class is ready, and pass the object (for advanced use).\n              do_action_ref_array( 'tgmpa_init', array( $this ) );\n\n              // When the rest of WP has loaded, kick-start the rest of the class.\n              //add_action( 'plugins_loaded', array( $this, 'init' ), 0 );\n              add_action( 'init', array( $this, 'init' ) );\n\n          }\n\n          /**\n           * Initialise the interactions between this class and WordPress.\n           *\n           * Hooks in three new methods for the class: admin_menu, notices and styles.\n           *\n           * @since 2.0.0\n           *\n           * @see TGM_Plugin_Activation::admin_menu()\n           * @see TGM_Plugin_Activation::notices()\n           * @see TGM_Plugin_Activation::styles()\n           */\n          public function init() {\n\n              // After this point, the plugins should be registered and the configuration set.\n\n              // Proceed only if we have plugins to handle.\n              if ( $this->plugins ) {\n                  $sorted = array();\n\n                  foreach ( $this->plugins as $plugin ) {\n                      $sorted[] = $plugin['name'];\n                  }\n\n                  array_multisort( $sorted, SORT_ASC, $this->plugins );\n\n                  add_action( 'admin_menu', array( $this, 'admin_menu' ) );\n                  add_filter( 'install_plugin_complete_actions', array( $this, 'actions' ) );\n                  add_action( 'switch_theme', array( $this, 'flush_plugins_cache' ) );\n\n                  // Load admin bar in the header to remove flash when installing plugins.\n                  if ( $this->is_tgmpa_page() ) {\n                      remove_action( 'wp_footer', 'wp_admin_bar_render', 1000 );\n                      remove_action( 'admin_footer', 'wp_admin_bar_render', 1000 );\n                      add_action( 'wp_head', 'wp_admin_bar_render', 1000 );\n                      add_action( 'admin_head', 'wp_admin_bar_render', 1000 );\n                  }\n\n                  if ( $this->has_notices ) {\n                      add_action( 'admin_init', array( $this, 'admin_init' ), 1 );\n                      add_action( 'admin_enqueue_scripts', array( $this, 'thickbox' ) );\n                  }\n\n                  // Setup the force activation hook.\n                  foreach ( $this->plugins as $plugin ) {\n                      if ( isset( $plugin['force_activation'] ) && true === $plugin['force_activation'] ) {\n                          add_action( 'admin_init', array( $this, 'force_activation' ) );\n                          break;\n                      }\n                  }\n\n                  // Setup the force deactivation hook.\n                  foreach ( $this->plugins as $plugin ) {\n                      if ( isset( $plugin['force_deactivation'] ) && true === $plugin['force_deactivation'] ) {\n                          add_action( 'switch_theme', array( $this, 'force_deactivation' ) );\n                          break;\n                      }\n                  }\n              }\n\n          }\n\n          /**\n           * Handles calls to show plugin information via links in the notices.\n           *\n           * We get the links in the admin notices to point to the TGMPA page, rather\n           * than the typical plugin-install.php file, so we can prepare everything\n           * beforehand.\n           *\n           * WP doesn't make it easy to show the plugin information in the thickbox -\n           * here we have to require a file that includes a function that does the\n           * main work of displaying it, enqueue some styles, set up some globals and\n           * finally call that function before exiting.\n           *\n           * Down right easy once you know how...\n           *\n           * @since 2.1.0\n           *\n           * @global string $tab Used as iframe div class names, helps with styling\n           * @global string $body_id Used as the iframe body ID, helps with styling\n           * @return null Returns early if not the TGMPA page.\n           */\n          public function admin_init() {\n\n              if ( ! $this->is_tgmpa_page() ) {\n                  return;\n              }\n\n              if ( isset( $_REQUEST['tab'] ) && 'plugin-information' == $_REQUEST['tab'] ) {\n                  require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for install_plugin_information().\n\n                  wp_enqueue_style( 'plugin-install' );\n\n                  global $tab, $body_id;\n                  $body_id = $tab = 'plugin-information';\n\n                  install_plugin_information();\n\n                  exit;\n              }\n\n          }\n\n          /**\n           * Enqueues thickbox scripts/styles for plugin info.\n           *\n           * Thickbox is not automatically included on all admin pages, so we must\n           * manually enqueue it for those pages.\n           *\n           * Thickbox is only loaded if the user has not dismissed the admin\n           * notice or if there are any plugins left to install and activate.\n           *\n           * @since 2.1.0\n           */\n          public function thickbox() {\n            add_thickbox();\n          }\n\n          /**\n           * Adds submenu page under 'Appearance' tab.\n           *\n           * This method adds the submenu page letting users know that a required\n           * plugin needs to be installed.\n           *\n           * This page disappears once the plugin has been installed and activated.\n           *\n           * @since 1.0.0\n           *\n           * @see TGM_Plugin_Activation::init()\n           * @see TGM_Plugin_Activation::install_plugins_page()\n           */\n          public function admin_menu() {\n\n              // Make sure privileges are correct to see the page\n              if ( ! current_user_can( 'install_plugins' ) ) {\n                  return;\n              }\n\n              $this->populate_file_path();\n\n              foreach ( $this->plugins as $plugin ) {\n                  if ( ! is_plugin_active( $plugin['file_path'] ) ) {\n                      add_theme_page(\n                          $this->strings['page_title'],          // Page title.\n                          $this->strings['menu_title'],          // Menu title.\n                          'edit_theme_options',                  // Capability.\n                          $this->menu,                           // Menu slug.\n                          array( $this, 'install_plugins_page' ) // Callback.\n                      );\n                  break;\n                  }\n              }\n\n          }\n\n          /**\n           * Echoes plugin installation form.\n           *\n           * This method is the callback for the admin_menu method function.\n           * This displays the admin page and form area where the user can select to install and activate the plugin.\n           *\n           * @since 1.0.0\n           *\n           * @return null Aborts early if we're processing a plugin installation action\n           */\n          public function install_plugins_page() {\n\n              // Store new instance of plugin table in object.\n              $plugin_table = new TGMPA_List_Table;\n\n              // Return early if processing a plugin installation action.\n              if ( isset( $_POST['action'] ) && 'tgmpa-bulk-install' == $_POST['action'] && $plugin_table->process_bulk_actions() || $this->do_plugin_install() ) {\n                  return;\n              }\n\n              ?>\n              <div class=\"tgmpa wrap\">\n\n                  <?php if ( version_compare( $this->wp_version, '3.8', '<' ) ) {\n                      screen_icon( apply_filters( 'ud_default_screen_icon', 'themes' ) );\n                  } ?>\n                  <h2><?php echo esc_html( get_admin_page_title() ); ?></h2>\n                  <?php $plugin_table->prepare_items(); ?>\n\n                  <?php if ( isset( $this->message ) ) {\n                      echo wp_kses_post( $this->message );\n                  } ?>\n\n                  <form id=\"tgmpa-plugins\" action=\"\" method=\"post\">\n                      <input type=\"hidden\" name=\"tgmpa-page\" value=\"<?php echo $this->menu; ?>\" />\n                      <?php $plugin_table->display(); ?>\n                  </form>\n\n              </div>\n              <?php\n\n          }\n\n          /**\n           * Installs a plugin or activates a plugin depending on the hover\n           * link clicked by the user.\n           *\n           * Checks the $_GET variable to see which actions have been\n           * passed and responds with the appropriate method.\n           *\n           * Uses WP_Filesystem to process and handle the plugin installation\n           * method.\n           *\n           * @since 1.0.0\n           *\n           * @uses WP_Filesystem\n           * @uses WP_Error\n           * @uses WP_Upgrader\n           * @uses Plugin_Upgrader\n           * @uses Plugin_Installer_Skin\n           *\n           * @return boolean True on success, false on failure\n           */\n          protected function do_plugin_install() {\n\n              // All plugin information will be stored in an array for processing.\n              $plugin = array();\n\n              // Checks for actions from hover links to process the installation.\n              if ( isset( $_GET['plugin'] ) && ( isset( $_GET['tgmpa-install'] ) && 'install-plugin' == $_GET['tgmpa-install'] ) ) {\n                  check_admin_referer( 'tgmpa-install' );\n\n                  $plugin['name']   = $_GET['plugin_name']; // Plugin name.\n                  $plugin['slug']   = $_GET['plugin']; // Plugin slug.\n                  $plugin['source'] = $_GET['plugin_source']; // Plugin source.\n\n                  // Pass all necessary information via URL if WP_Filesystem is needed.\n                  $url = wp_nonce_url(\n                      esc_url( add_query_arg(\n                          array(\n                              'page'          => $this->menu,\n                              'plugin'        => $plugin['slug'],\n                              'plugin_name'   => $plugin['name'],\n                              'plugin_source' => $plugin['source'],\n                              'tgmpa-install' => 'install-plugin',\n                          ),\n                          admin_url( 'themes.php' )\n                      ) ),\n                      'tgmpa-install'\n                  );\n                  $method = ''; // Leave blank so WP_Filesystem can populate it as necessary.\n                  $fields = array( 'tgmpa-install' ); // Extra fields to pass to WP_Filesystem.\n\n                  if ( false === ( $creds = request_filesystem_credentials( $url, $method, false, false, $fields ) ) ) {\n                      return true;\n                  }\n\n                  if ( ! WP_Filesystem( $creds ) ) {\n                      request_filesystem_credentials( $url, $method, true, false, $fields ); // Setup WP_Filesystem.\n                      return true;\n                  }\n\n                  require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Need for plugins_api.\n                  require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; // Need for upgrade classes.\n\n                  // Set plugin source to WordPress API link if available.\n                  if ( isset( $plugin['source'] ) && 'repo' == $plugin['source'] ) {\n                      $api = plugins_api( 'plugin_information', array( 'slug' => $plugin['slug'], 'fields' => array( 'sections' => false ) ) );\n\n                      if ( is_wp_error( $api ) ) {\n                          wp_die( $this->strings['oops'] . var_dump( $api ) );\n                      }\n\n                      if ( isset( $api->download_link ) ) {\n                          $plugin['source'] = $api->download_link;\n                      }\n                  }\n\n                  // Set type, based on whether the source starts with http:// or https://.\n                  $type = preg_match( '|^http(s)?://|', $plugin['source'] ) ? 'web' : 'upload';\n\n                  // Prep variables for Plugin_Installer_Skin class.\n                  $title = sprintf( $this->strings['installing'], $plugin['name'] );\n                  $url   = esc_url( add_query_arg( array( 'action' => 'install-plugin', 'plugin' => $plugin['slug'] ), 'update.php' ) );\n                  if ( isset( $_GET['from'] ) ) {\n                      $url .= esc_url( add_query_arg( 'from', urlencode( stripslashes( $_GET['from'] ) ), $url ) );\n                  }\n\n                  $nonce = 'install-plugin_' . $plugin['slug'];\n\n                  // Prefix a default path to pre-packaged plugins.\n                  $source = ( 'upload' == $type ) ? $this->default_path . $plugin['source'] : $plugin['source'];\n\n                  // Create a new instance of Plugin_Upgrader.\n                  $upgrader = new \\Plugin_Upgrader( $skin = new \\Plugin_Installer_Skin( compact( 'type', 'title', 'url', 'nonce', 'plugin', 'api' ) ) );\n\n                  // Perform the action and install the plugin from the $source urldecode().\n                  $upgrader->install( $source );\n\n                  // Flush plugins cache so we can make sure that the installed plugins list is always up to date.\n                  wp_cache_flush();\n\n                  // Only activate plugins if the config option is set to true.\n                  if ( $this->is_automatic ) {\n                      $plugin_activate = $upgrader->plugin_info(); // Grab the plugin info from the Plugin_Upgrader method.\n                      $activate        = activate_plugin( $plugin_activate ); // Activate the plugin.\n                      $this->populate_file_path(); // Re-populate the file path now that the plugin has been installed and activated.\n\n                      if ( is_wp_error( $activate ) ) {\n                          echo '<div id=\"message\" class=\"error\"><p>' . $activate->get_error_message() . '</p></div>';\n                          echo '<p><a href=\"' . esc_url( add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) ) . '\" title=\"' . esc_attr( $this->strings['return'] ) . '\" target=\"_parent\">' . $this->strings['return'] . '</a></p>';\n                          return true; // End it here if there is an error with automatic activation\n                      }\n                      else {\n                          echo '<p>' . $this->strings['plugin_activated'] . '</p>';\n                      }\n                  }\n\n                  // Display message based on if all plugins are now active or not.\n                  $complete = array();\n                  foreach ( $this->plugins as $plugin ) {\n                      if ( ! is_plugin_active( $plugin['file_path'] ) ) {\n                          echo '<p><a href=\"' . add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) . '\" title=\"' . esc_attr( $this->strings['return'] ) . '\" target=\"_parent\">' . $this->strings['return'] . '</a></p>';\n                          $complete[] = $plugin;\n                          break;\n                      }\n                      // Nothing to store.\n                      else {\n                          $complete[] = '';\n                      }\n                  }\n\n                  // Filter out any empty entries.\n                  $complete = array_filter( $complete );\n\n                  // All plugins are active, so we display the complete string and hide the plugin menu.\n                  if ( empty( $complete ) ) {\n                      echo '<p>' .  sprintf( $this->strings['complete'], '<a href=\"' . admin_url() . '\" title=\"' . __( 'Return to the Dashboard', 'tgmpa' ) . '\">' . __( 'Return to the Dashboard', 'tgmpa' ) . '</a>' ) . '</p>';\n                      echo '<style type=\"text/css\">#adminmenu .wp-submenu li.current { display: none !important; }</style>';\n                  }\n\n                  return true;\n              }\n              // Checks for actions from hover links to process the activation.\n              elseif ( isset( $_GET['plugin'] ) && ( isset( $_GET['tgmpa-activate'] ) && 'activate-plugin' == $_GET['tgmpa-activate'] ) ) {\n                  check_admin_referer( 'tgmpa-activate', 'tgmpa-activate-nonce' );\n\n                  // Populate $plugin array with necessary information.\n                  $plugin['name']   = $_GET['plugin_name'];\n                  $plugin['slug']   = $_GET['plugin'];\n                  $plugin['source'] = $_GET['plugin_source'];\n\n                  $plugin_path = $this->_get_plugin_basename_from_slug($plugin['slug']); // Retrieve all plugins.\n                  $activate = activate_plugin( $plugin_path ); // Activate the plugin.\n\n                  if ( is_wp_error( $activate ) ) {\n                      echo '<div id=\"message\" class=\"error\"><p>' . $activate->get_error_message() . '</p></div>';\n                      echo '<p><a href=\"' . esc_url( add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) ) . '\" title=\"' . esc_attr( $this->strings['return'] ) . '\" target=\"_parent\">' . $this->strings['return'] . '</a></p>';\n                      return true; // End it here if there is an error with activation.\n                  }\n                  else {\n                      // Make sure message doesn't display again if bulk activation is performed immediately after a single activation.\n                      if ( ! isset( $_POST['action'] ) ) {\n                          $msg = $this->strings['activated_successfully'] . ' <strong>' . $plugin['name'] . '</strong>';\n                          echo '<div id=\"message\" class=\"updated\"><p>' . $msg . '</p></div>';\n                      }\n                  }\n              }\n\n              return false;\n\n          }\n\n          /**\n           * Echoes required plugin notice.\n           *\n           * Outputs a message telling users that a specific plugin is required for\n           * their theme. If appropriate, it includes a link to the form page where\n           * users can install and activate the plugin.\n           *\n           * @since 1.0.0\n           *\n           * @global object $current_screen\n           * @return null Returns early if we're on the Install page.\n           */\n          public function notices( $referrer = false ) {\n              //** Check if get_plugins() function exists. This is required on the front end of the */\n              //** site, since it is in a file that is normally only loaded in the admin. */\n              if ( ! function_exists( 'get_plugins' ) ) {\n                require_once ABSPATH . 'wp-admin/includes/plugin.php';\n              }\n              \n              $installed_plugins = \\get_plugins(); // Retrieve a list of all the plugins\n              $this->populate_file_path();\n\n              $message             = array(); // Store the messages in an array to be outputted after plugins have looped through.\n              \n              $e_install_link        = false;   // Set to false, change to true in loop if conditions exist, used for action link 'install'.\n              $e_install_link_count  = 0;       // Used to determine plurality of install action link text.\n              $e_activate_link       = false;   // Set to false, change to true in loop if conditions exist, used for action link 'activate'.\n              $e_activate_link_count = 0;       // Used to determine plurality of activate action link text.\n\n              $m_install_link        = false;   // Set to false, change to true in loop if conditions exist, used for action link 'install'.\n              $m_install_link_count  = 0;       // Used to determine plurality of install action link text.\n              $m_activate_link       = false;   // Set to false, change to true in loop if conditions exist, used for action link 'activate'.\n              $m_activate_link_count = 0;       // Used to determine plurality of activate action link text.\n              \n              foreach ( $this->referrers as $plugin ) {\n                  //** We must return only notices for referrer */\n                  if( empty( $referrer ) || $referrer != $plugin[ '_referrer' ] || !isset( $this->plugins[ $plugin[ 'slug' ] ] ) ) {\n                    continue;\n                  }\n                  $plugin[ 'file_path' ] = $this->plugins[ $plugin[ 'slug' ] ][ 'file_path' ];\n                  // If the plugin is installed and active, check for minimum version argument before moving forward.\n                  if ( is_plugin_active( $plugin['file_path'] ) ) {\n                      // A minimum version has been specified.\n                      if ( isset( $plugin['version'] ) ) {\n                          if ( isset( $installed_plugins[$plugin['file_path']]['Version'] ) ) {\n                              // If the current version is less than the minimum required version, we display a message.\n                              if ( version_compare( $installed_plugins[$plugin['file_path']]['Version'], $plugin['version'], '<' ) ) {\n                                  if ( current_user_can( 'install_plugins' ) ) {\n                                      $message['notice_ask_to_update'][] = $plugin;\n                                  } else {\n                                      $message['notice_cannot_update'][] = $plugin;\n                                  }\n                              }\n                          }\n                          // Can't find the plugin, so iterate to the next condition.\n                          else {\n                              continue;\n                          }\n                      }\n                      // No minimum version specified, so iterate over the plugin.\n                      else {\n                          continue;\n                      }\n                  }\n\n                  // Not installed.\n                  if ( ! isset( $installed_plugins[$plugin['file_path']] ) ) {\n                      if ( current_user_can( 'install_plugins' ) ) {\n                          if ( isset( $plugin['required'] ) && $plugin['required'] ) {\n                            $e_install_link = true; // We need to display the 'install' action link.\n                            $e_install_link_count++; // Increment the install link count.\n                            $message['notice_can_install_required'][] = $plugin;\n                          }\n                          // This plugin is only recommended.\n                          else {\n                            $m_install_link = true; // We need to display the 'install' action link.\n                            $m_install_link_count++; // Increment the install link count.\n                            $message['notice_can_install_recommended'][] = $plugin;\n                          }\n                      } elseif( !is_user_logged_in() && isset( $plugin['required'] ) && $plugin['required'] ) {\n                          $message['notice_can_install_required'][] = $plugin;\n                      }\n                      // Need higher privileges to install the plugin.\n                      else {\n                          if ( isset( $plugin['required'] ) && $plugin['required'] ) {\n                              $message['notice_can_install_required'][] = $plugin;\n                              $message['notice_cannot_activate'][] = $plugin;\n                          }\n                          else {\n                              $message['notice_cannot_activate'][] = $plugin;\n                          }\n                      }\n                  }\n                  // Installed but not active.\n                  elseif ( is_plugin_inactive( $plugin['file_path'] ) ) {\n                      if ( current_user_can( 'activate_plugins' ) ) {\n                          if ( isset( $plugin['required'] ) && $plugin['required'] ) {\n                            $e_activate_link = true; // We need to display the 'activate' action link.\n                            $e_activate_link_count++; // Increment the activate link count.\n                            $message['notice_can_activate_required'][] = $plugin;\n                          }\n                          // This plugin is only recommended.\n                          else {\n                            $m_activate_link = true; // We need to display the 'activate' action link.\n                            $m_activate_link_count++; // Increment the activate link count.\n                            $message['notice_can_activate_recommended'][] = $plugin;\n                          }\n                      } elseif( !is_user_logged_in() && isset( $plugin['required'] ) && $plugin['required'] ) {\n                          $message['notice_can_install_required'][] = $plugin;\n                      }\n                      // Need higher privileges to activate the plugin.\n                      else {\n                          if ( isset( $plugin['required'] ) && $plugin['required'] ) {\n                              $message['notice_can_install_required'][] = $plugin;\n                              $message['notice_cannot_activate'][] = $plugin;\n                          }\n                          else {\n                              $message['notice_cannot_activate'][] = $plugin;\n                          }\n\n                      }\n                  }\n              }\n              \n              //return $message;\n\n              $prepared = array();\n              \n              // If we have notices to display, we move forward.\n              if ( ! empty( $message ) ) {\n                  krsort( $message ); // Sort messages.\n                  \n                  // Grab all plugin names.\n                  foreach ( $message as $type => $plugin_groups ) {\n                      $linked_plugin_groups = array();\n\n                      // Count number of plugins in each message group to calculate singular/plural message.\n                      $count = count( $plugin_groups );\n\n                      // Loop through the plugin names to make the ones pulled from the .org repo linked.\n                      foreach ( $plugin_groups as $plugin ) {\n                          $plugin_group_single_name = $plugin[ 'name' ];\n                          $external_url = $this->_get_plugin_data_from_name( $plugin_group_single_name, 'external_url' );\n                          $source       = $this->_get_plugin_data_from_name( $plugin_group_single_name, 'source' );\n\n                          if ( $external_url && preg_match( '|^http(s)?://|', $external_url ) ) {\n                              $linked_plugin_groups[] = '<a href=\"' . esc_url( $external_url ) . '\" title=\"' . $plugin_group_single_name . '\" target=\"_blank\">' . $plugin_group_single_name . '</a>';\n                          }\n                          elseif ( ! $source || preg_match( '|^http://wordpress.org/extend/plugins/|', $source ) ) {\n                              $url = esc_url( add_query_arg(\n                                  array(\n                                      'tab'       => 'plugin-information',\n                                      'plugin'    => $this->_get_plugin_data_from_name( $plugin_group_single_name ),\n                                      'TB_iframe' => 'true',\n                                      'width'     => '640',\n                                      'height'    => '500',\n                                  ),\n                                  admin_url( 'plugin-install.php' )\n                              ) );\n\n                              $linked_plugin_groups[] = '<a href=\"' . esc_url( $url ) . '\" class=\"thickbox\" title=\"' . $plugin_group_single_name . '\">' . $plugin_group_single_name . '</a>';\n                          }\n                          else {\n                              $linked_plugin_groups[] = $plugin_group_single_name; // No hyperlink.\n                          }\n\n                          if ( isset( $linked_plugin_groups ) && (array) $linked_plugin_groups ) {\n                              $plugin_groups = $linked_plugin_groups;\n                          }\n                      }\n\n                      $last_plugin = array_pop( $plugin_groups ); // Pop off last name to prep for readability.\n                      $imploded    = empty( $plugin_groups ) ? '<em>' . $last_plugin . '</em>' : '<em>' . ( implode( ', ', $plugin_groups ) . '</em> and <em>' . $last_plugin . '</em>' );\n                      \n                      $prepared['messages'][] = array(\n                        'type' => ( in_array( $type, $this->error_types ) && $plugin[ 'required' ] ? 'error' : 'message' ),\n                        'value' => sprintf( translate_nooped_plural( $this->strings[$type], $count, 'tgmpa' ), $imploded, $plugin[ '_referrer_name' ], $count ),\n                      );\n                      \n                  }\n                  \n                  //** Setup variables to determine if action links are needed. */\n                  $e_show_install_link  = $e_install_link ? '<a href=\"' . esc_url( add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) ) . '\">' . translate_nooped_plural( $this->strings['install_link'], $e_install_link_count, 'tgmpa' ) . '</a>' : '';\n                  $e_show_activate_link = $e_activate_link ? '<a href=\"' . esc_url( add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) ) . '\">' . translate_nooped_plural( $this->strings['activate_link'], $e_activate_link_count, 'tgmpa' ) . '</a>'  : '';\n                  \n                  $m_show_install_link  = $m_install_link ? '<a href=\"' . esc_url( add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) ) . '\">' . translate_nooped_plural( $this->strings['install_link'], $m_install_link_count, 'tgmpa' ) . '</a>' : '';\n                  $m_show_activate_link = $m_activate_link ? '<a href=\"' . esc_url( add_query_arg( 'page', $this->menu, admin_url( 'themes.php' ) ) ) . '\">' . translate_nooped_plural( $this->strings['activate_link'], $m_activate_link_count, 'tgmpa' ) . '</a>'  : '';\n                  \n                  //** Define all of the action links. */\n                  $prepared[ 'links' ] = array(\n                    'error' => array_filter( array(\n                      'install'  => ( current_user_can( 'install_plugins' ) )  ? $e_show_install_link  : false,\n                      'activate' => ( current_user_can( 'activate_plugins' ) ) ? $e_show_activate_link : false,\n                    ) ),\n                    'message' => array_filter( array(\n                      'install'  => ( current_user_can( 'install_plugins' ) )  ? $m_show_install_link  : false,\n                      'activate' => ( current_user_can( 'activate_plugins' ) ) ? $m_show_activate_link : false,\n                    ) ),\n                  );\n              }\n              \n              return $prepared;\n          }\n          \n          /**\n           * Add individual plugin to our collection of plugins.\n           *\n           * If the required keys are not set or the plugin has already\n           * been registered, the plugin is not added.\n           *\n           * @since 2.0.0\n           *\n           * @param array $plugin Array of plugin arguments.\n           */\n          public function register( $plugin ) {\n            if ( ! isset( $plugin['slug'] ) || ! isset( $plugin['name'] ) ) {\n              return;\n            }\n            if( isset( $this->plugins[ $plugin[ 'slug' ] ] ) ) {\n              $_plugin = $this->plugins[ $plugin[ 'slug' ] ];\n              //** Version must be set the highest to prevent issues. */\n              if( !empty( $_plugin[ 'version' ] ) && !empty( $plugin[ 'version' ] ) ) {\n                $version = version_compare( $_plugin[ 'version' ], $plugin[ 'version' ], '<' ) ? $plugin[ 'version' ] : $_plugin[ 'version' ];\n              } else {\n                $version = !empty( $plugin[ 'version' ] ) ? $plugin[ 'version' ] : ( !empty( $_plugin[ 'version' ] ) ? $_plugin[ 'version' ] : false );\n              }\n              if( !empty( $version ) ) {\n                $this->plugins[ $plugin[ 'slug' ] ][ 'version' ] = $version;\n              }\n              //** Parent plugin must be set as required if any child plugin requires it. */\n              $this->plugins[ $plugin[ 'slug' ] ][ 'required' ] = $_plugin[ 'required' ] == true ? $_plugin[ 'required' ] : $plugin[ 'required' ];\n            } else {\n              $_plugin = $plugin;\n              unset( $_plugin[ '_referrer' ] );\n              unset( $_plugin[ '_referrer_name' ] );\n              $this->plugins[ $plugin[ 'slug' ] ] = $_plugin;\n            }\n            $this->referrers[] = $plugin;\n          }\n\n          /**\n           * Amend default configuration settings.\n           *\n           * @since 2.0.0\n           *\n           * @param array $config Array of config options to pass as class properties.\n           */\n          public function config( $config ) {\n\n              $keys = array( 'default_path', 'has_notices', 'dismissable', 'dismiss_msg', 'menu', 'is_automatic', 'message', 'strings' );\n\n              foreach ( $keys as $key ) {\n                  if ( isset( $config[$key] ) ) {\n                      if ( is_array( $config[$key] ) ) {\n                          foreach ( $config[$key] as $subkey => $value ) {\n                              $this->{$key}[$subkey] = $value;\n                          }\n                      } else {\n                          $this->$key = $config[$key];\n                      }\n                  }\n              }\n\n          }\n\n          /**\n           * Amend action link after plugin installation.\n           *\n           * @since 2.0.0\n           *\n           * @param array $install_actions Existing array of actions.\n           * @return array                 Amended array of actions.\n           */\n          public function actions( $install_actions ) {\n\n              // Remove action links on the TGMPA install page.\n              if ( $this->is_tgmpa_page() ) {\n                  return false;\n              }\n\n              return $install_actions;\n\n          }\n\n          /**\n           * Flushes the plugins cache on theme switch to prevent stale entries\n           * from remaining in the plugin table.\n           *\n           * @since 2.4.0\n           */\n          public function flush_plugins_cache() {\n\n              wp_cache_flush();\n\n          }\n\n          /**\n           * Set file_path key for each installed plugin.\n           *\n           * @since 2.1.0\n           */\n          public function populate_file_path() {\n\n              // Add file_path key for all plugins.\n              foreach ( $this->plugins as $plugin => $values ) {\n                  $this->plugins[$plugin]['file_path'] = $this->_get_plugin_basename_from_slug( $values['slug'] );\n              }\n\n          }\n\n          /**\n           * Helper function to extract the file path of the plugin file from the\n           * plugin slug, if the plugin is installed.\n           *\n           * @since 2.0.0\n           *\n           * @param string $slug Plugin slug (typically folder name) as provided by the developer.\n           * @return string      Either file path for plugin if installed, or just the plugin slug.\n           */\n          protected function _get_plugin_basename_from_slug( $slug ) {\n              $keys = array_keys( get_plugins() );\n              $_keys = array();\n              /** Try to get slug of activated plugin at first */\n              foreach ( $keys as $key ) {\n                  if ( preg_match( '|^' . $slug .'(-v?[0-9\\.]+)?/|', $key )  ) {\n                      if( is_plugin_active( $key ) ) {\n                          return $key;\n                      } else {\n                          array_push( $_keys, $key );\n                      }\n                  }\n              }\n              /** Get key from any non activated but installed matched plugin */\n              if( !empty( $_keys ) ) {\n                return $_keys[0];\n              }\n              return $slug;\n          }\n\n          /**\n           * Retrieve plugin data, given the plugin name.\n           *\n           * Loops through the registered plugins looking for $name. If it finds it,\n           * it returns the $data from that plugin. Otherwise, returns false.\n           *\n           * @since 2.1.0\n           *\n           * @param string $name    Name of the plugin, as it was registered.\n           * @param string $data    Optional. Array key of plugin data to return. Default is slug.\n           * @return string|boolean Plugin slug if found, false otherwise.\n           */\n          protected function _get_plugin_data_from_name( $name, $data = 'slug' ) {\n\n              foreach ( $this->plugins as $plugin => $values ) {\n                  if ( $name == $values['name'] && isset( $values[$data] ) ) {\n                      return $values[$data];\n                  }\n              }\n\n              return false;\n\n          }\n\n          /**\n           * Determine if we're on the TGMPA Install page.\n           *\n           * @since 2.1.0\n           *\n           * @return boolean True when on the TGMPA page, false otherwise.\n           */\n          public function is_tgmpa_page() {\n\n              if ( isset( $_GET['page'] ) && $this->menu === $_GET['page'] ) {\n                  return true;\n              }\n\n              return false;\n\n          }\n\n          /**\n           * Forces plugin activation if the parameter 'force_activation' is\n           * set to true.\n           *\n           * This allows theme authors to specify certain plugins that must be\n           * active at all times while using the current theme.\n           *\n           * Please take special care when using this parameter as it has the\n           * potential to be harmful if not used correctly. Setting this parameter\n           * to true will not allow the specified plugin to be deactivated unless\n           * the user switches themes.\n           *\n           * @since 2.2.0\n           */\n          public function force_activation() {\n            // Set file_path parameter for any installed plugins.\n            $this->populate_file_path();\n            $installed_plugins = get_plugins();\n            foreach ( $this->plugins as $plugin ) {\n                // Oops, plugin isn't there so iterate to next condition.\n                if ( isset( $plugin['force_activation'] ) && $plugin['force_activation'] && ! isset( $installed_plugins[$plugin['file_path']] ) ) {\n                    continue;\n                }\n                // There we go, activate the plugin.\n                elseif ( isset( $plugin['force_activation'] ) && $plugin['force_activation'] && is_plugin_inactive( $plugin['file_path'] ) ) {\n                    activate_plugin( $plugin['file_path'] );\n                }\n            }\n          }\n\n          /**\n           * Forces plugin deactivation if the parameter 'force_deactivation'\n           * is set to true.\n           *\n           * This allows theme authors to specify certain plugins that must be\n           * deactived upon switching from the current theme to another.\n           *\n           * Please take special care when using this parameter as it has the\n           * potential to be harmful if not used correctly.\n           *\n           * @since 2.2.0\n           */\n          public function force_deactivation() {\n\n              // Set file_path parameter for any installed plugins.\n              $this->populate_file_path();\n\n              foreach ( $this->plugins as $plugin ) {\n                  // Only proceed forward if the paramter is set to true and plugin is active.\n                  if ( isset( $plugin['force_deactivation'] ) && $plugin['force_deactivation'] && is_plugin_active( $plugin['file_path'] ) ) {\n                      deactivate_plugins( $plugin['file_path'] );\n                  }\n              }\n\n          }\n\n          /**\n           * Returns the singleton instance of the class.\n           *\n           * @since 2.4.0\n           *\n           * @return object The TGM_Plugin_Activation object.\n           */\n          public static function get_instance() {\n            if ( ! isset( self::$instance ) && !( self::$instance instanceof TGM_Plugin_Activation ) ) {\n              self::$instance = new TGM_Plugin_Activation();\n            }\n            return self::$instance;\n          }\n\n      }\n\n  }\n\n}\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/lib/classes/class-utility.php",
    "content": "<?php\n/**\n * Helper.\n *\n */\nnamespace UsabilityDynamics\\WP {\n\n  if( !defined( 'ABSPATH' ) ) {\n    die();\n  }\n\n  if (!class_exists('UsabilityDynamics\\WP\\Utility')) {\n\n    class Utility {\n\n      /**\n       *  Return root path to library.\n       */\n      static public function path( $shortpath, $type = 'dir' ) {\n        /** Determine where th library installed ( it's a theme or plugin ) */\n        if( defined( 'WPMU_PLUGIN_DIR' ) && strpos( wp_normalize_path( dirname(__FILE__) ), wp_normalize_path( WPMU_PLUGIN_DIR ) ) !== false\n        ) {\n          $instance = 'mu-plugin';\n        } elseif ( defined( 'WP_PLUGIN_DIR' ) &&  strpos( wp_normalize_path( dirname(__FILE__) ), wp_normalize_path( WP_PLUGIN_DIR ) ) !== false\n        ){\n          $instance = 'plugin';\n        } elseif ( strpos( wp_normalize_path( get_template_directory() ), wp_normalize_path( dirname(__FILE__) ) ) !== false ){\n          $instance = 'template';\n        } else {\n          $instance = 'stylesheet';\n        }\n\n        $path = false;\n        switch( $type ) {\n          case 'dir':\n            $path = self::_path_dir( $instance );\n            break;\n          case 'url':\n            $path = self::_path_url( $instance );\n            break;\n        }\n        if( $path ) {\n          $path = preg_replace( '|^(.*)(\\/lib)(\\/classes)(\\/)?$|', '$1', $path );\n          $path = trailingslashit( $path );\n          $path .= ltrim( $shortpath, '/\\\\' );\n        }\n        return $path;\n      }\n\n      /**\n       * Returns correct absolute URL path to lib-ui directory\n       *\n       * @param $instance\n       * @return string\n       */\n      static private function _path_url( $instance ) {\n        $path = false;\n        switch( $instance ) {\n          case 'mu-plugin':\n          case 'plugin':\n            $path = plugin_dir_url( __FILE__ );\n            break;\n          case 'template':\n            $s = str_replace( wp_normalize_path( ABSPATH ), '', wp_normalize_path(get_template_directory()) );\n            $s = str_replace( '/', '\\/', $s );\n            $reg = '|^(.)*(' . $s . ')(.*)$|';\n            $p = preg_replace( $reg, '$3', wp_normalize_path( dirname( __FILE__ ) ) );\n            $path = get_template_directory_uri() . $p;\n            break;\n          case 'stylesheet':\n            $s = str_replace( wp_normalize_path( ABSPATH ), '', wp_normalize_path(get_stylesheet_directory()) );\n            $s = str_replace( '/', '\\/', $s );\n            $reg = '|^(.)*(' . $s . ')(.*)$|';\n            $p = preg_replace( $reg, '$3', wp_normalize_path( dirname( __FILE__ ) ) );\n            $path = get_stylesheet_directory_uri() . $p;\n            break;\n        }\n        return $path;\n      }\n\n      /**\n       * Returns correct absolute DIR path to lib-ui directory\n       *\n       * @param $instance\n       * @return string\n       */\n      static private function _path_dir( $instance ) {\n        $path = false;\n        switch( $instance ) {\n          case 'mu-plugin':\n          case 'plugin':\n            $path = plugin_dir_path( __FILE__ );\n            break;\n          case 'template':\n          case 'stylesheet':\n            $path = dirname( __FILE__ );\n            break;\n        }\n        if( $path )\n          $path = wp_normalize_path( $path );\n        return $path;\n      }\n\n      /**\n       * Localization Functionality.\n       *\n       * Replaces array's l10n data.\n       * Helpful for localization of data which is stored in JSON files ( see /schemas )\n       *\n       * Usage:\n       *\n       * add_filter( 'ud::schema::localization', function($locals){\n       *    return array_merge( array( 'value_for_translating' => __( 'Blah Blah' ) ), $locals );\n       * });\n       *\n       * $result = self::l10n_localize (array(\n       *  'key' => 'l10n.value_for_translating'\n       * ) );\n       *\n       *\n       * @param array $data\n       * @param array $l10n translated values\n       * @return array\n       * @author peshkov@UD\n       */\n      static public function l10n_localize( $data, $l10n = array() ) {\n\n        if ( !is_array( $data ) && !is_object( $data ) ) {\n          return $data;\n        }\n\n        //** The Localization's list. */\n        $l10n = apply_filters( 'ud::schema::localization', $l10n );\n\n        //** Replace l10n entries */\n        foreach( $data as $k => $v ) {\n          if ( is_array( $v ) ) {\n            $data[ $k ] = self::l10n_localize( $v, $l10n );\n          } elseif ( is_string( $v ) ) {\n            if ( strpos( $v, 'l10n' ) !== false ) {\n              preg_match_all( '/l10n\\.([^\\s]*)/', $v, $matches );\n              if ( !empty( $matches[ 1 ] ) ) {\n                foreach ( $matches[ 1 ] as $i => $m ) {\n                  if ( array_key_exists( $m, $l10n ) ) {\n                    $data[ $k ] = str_replace( $matches[ 0 ][ $i ], $l10n[ $m ], $data[ $k ] );\n                  }\n                }\n              }\n            }\n          }\n        }\n\n        return $data;\n      }\n\n    }\n\n  }\n\n}"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/readme.md",
    "content": "lib-wp-bootstrap\n================\n\nUD Bootstrap library for WP plugins.\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2013 Usability Dynamics, Inc. &lt;info@usabilitydynamics.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/udx/lib-wp-bootstrap/static/scripts/ud-dismiss.js",
    "content": "/**\n * EVENTS\n */\njQuery( document ).ready( function () {\n  \n  jQuery( '.ud-admin-notice' ).on( 'click', '.dismiss', function(e){\n    e.preventDefault();\n\n    var _this = jQuery( this );\n\n    var data = {\n      action: 'ud_dismiss',\n      key: _this.data('key'),\n      _ajax_nonce: _this.data('nonce'),\n    }\n\n    jQuery.post( _ud_vars.ajaxurl, data, function ( result_data ) {\n        if( result_data.success == '1' ) {\n          _this.closest('.ud-admin-notice').remove();\n        } else if ( result_data.success == '0' ) {\n          alert(result_data.error);\n        }\n    }, \"json\" );\n\n  });\n\n} );"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/autocomplete.css",
    "content": ".rwmb-autocomplete-result {\n\tborder-bottom: 1px solid #ccc;\n\tpadding: 1em 0;\n\toverflow: hidden;\n}\n.rwmb-autocomplete-result .label {\n\tfloat: left;\n\twidth: 90%;\n}\n.rwmb-autocomplete-result .actions {\n\twidth: 10%;\n\tfloat: right;\n\tcursor: pointer;\n}\n.ui-autocomplete {\n\tz-index: 999999;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/background.css",
    "content": ".rwmb-background-row {\n\tmargin-bottom: 5px;\n\tdisplay: flex;\n\tgap: 5px;\n\tflex-wrap: wrap;\n\talign-items: flex-start;\n}\n\n.rwmb-background-wrapper .wp-picker-container {\n\tposition: relative;\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n.rwmb-background-wrapper .wp-picker-holder {\n\tposition: absolute;\n\tz-index: 9;\n\tmin-width: 255px;\n}\n.rwmb-background-wrapper .rwmb-select {\n\tflex: 1;\n\tmargin-bottom: 5px;\n\tmax-width: 100%;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/button-group.css",
    "content": ".rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #2271b1);\n}\n\n.rwmb-button-input-list .rwmb-button_group {\n\tdisplay: none;\n}\n.rwmb-button-input-list label {\n\tdisplay: block;\n\tborder: 1px solid #8c8f94;\n\tposition: relative;\n\tz-index: 1;\n\tpadding: 5px 10px;\n\tbackground: #fff;\n\tcursor: pointer;\n}\n.rwmb-button-input-list .selected {\n\tborder-color: var(--color);\n\tbackground: var(--color);\n\tcolor: #fff;\n\tz-index: 2;\n}\n\n/* Layout not inline */\n.rwmb-button-input-list:not(.rwmb-inline) label:not(:first-child) {\n\t border-top-width: 0;\n}\n.rwmb-button-input-list:not(.rwmb-inline) .selected:not(:last-child) {\n\tborder-bottom-color: rgba(255, 255, 255, .25);\n}\n.rwmb-button-input-list:not(.rwmb-inline) > label:first-child:not(:last-child) {\n\tborder-top-left-radius: 3px;\n\tborder-top-right-radius: 3px;\n}\n.rwmb-button-input-list:not(.rwmb-inline)  > label:last-child:not(:first-child) {\n\tborder-bottom-right-radius: 3px;\n\tborder-bottom-left-radius: 3px;\n}\n\n/*  Layout inline */\n.rwmb-button-input-list.rwmb-inline {\n\tdisplay: flex;\n}\n.rwmb-button-input-list.rwmb-inline label:not(:first-child) {\n\tborder-left-width: 0;\n}\n.rwmb-button-input-list.rwmb-inline .selected:not(:last-child) {\n\tborder-right-color: rgba(255, 255, 255, .25);\n}\n.rwmb-button-input-list.rwmb-inline > label:first-child:not(:last-child) {\n\tborder-top-left-radius: 3px;\n\tborder-bottom-left-radius: 3px;\n}\n.rwmb-button-input-list.rwmb-inline > label:last-child:not(:first-child) {\n\tborder-top-right-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Admin color schemes */\n.admin-color-blue .rwmb-button-input-list  {\n\t--color: var(--wp-admin-theme-color, #e1a948);\n}\n.admin-color-coffee .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #c7a589);\n}\n.admin-color-ectoplasm .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #a3b745);\n}\n.admin-color-light .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #04a4cc);\n}\n.admin-color-midnight .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #e14d43);\n}\n.admin-color-modern .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #3858e9);\n}\n.admin-color-ocean .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #9ebaa0);\n}\n.admin-color-sunrise .rwmb-button-input-list {\n\t--color: var(--wp-admin-theme-color, #dd823b);\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/color.css",
    "content": ".rwmb-color-wrapper .wp-picker-container {\n\tposition: relative;\n}\n.rwmb-color-wrapper .wp-picker-holder {\n\tposition: absolute;\n\tz-index: 99;\n\tmin-width: 255px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/date.css",
    "content": "body {\n\t--mb-color-datepicker-primary: #23282d;\n\t--mb-color-datepicker-border: #23282d;\n\t--mb-color-datepicker-active: var(--wp-admin-theme-color, #2271b1);\n\t--mb-color-datepicker-heading: #fff;\n}\n\n/* Fix empty block below admin footer (issue #24) */\n#ui-datepicker-div {\n\tdisplay: none;\n\tz-index: 999999 !important;\n}\n\n/* Style for multiple months */\n.ui-datepicker-multi .ui-datepicker-group {\n\tpadding: 0 .5%;\n\tbox-sizing: border-box;\n}\n.ui-datepicker-multi .ui-datepicker-group .ui-datepicker-calendar {\n\twidth: 100%;\n}\n\n/* Date Picker Default Styles */\n.ui-datepicker {\n\tpadding: 0;\n\tborder: 1px solid #ddd;\n\tborder-radius: 4px;\n}\n.ui-datepicker * {\n\tpadding: 0;\n\tborder-radius: 0;\n}\n.ui-datepicker table {\n\tfont-size: 13px;\n\tmargin: 0;\n}\n.ui-datepicker .ui-datepicker-header,\n.ui-timepicker-div .ui-widget-header {\n\tborder: none;\n\tfont-weight: normal;\n}\n.ui-datepicker .ui-datepicker-header .ui-state-hover {\n\tborder-color: transparent;\n\tcursor: pointer;\n\tborder-radius: 0;\n}\n\n.ui-datepicker .ui-datepicker-title {\n\tmargin-top: .4em;\n\tmargin-bottom: .3em;\n\tfont-size: 14px;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover,\n.ui-datepicker .ui-datepicker-next,\n.ui-datepicker .ui-datepicker-prev {\n\theight: 1em;\n\ttop: .9em;\n\tborder: none;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-next span,\n.ui-datepicker .ui-datepicker-prev span {\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAQAAABFnnJAAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AABe4SURBVHja7V1diCXHdf56vbZmVl6nxwKFO2yyq1mM4qAwM7oDsR6C7iYIKesH3V1QHgyBu5YYJwHjrB9NQCuByIthHbAga6TZxeBgHMJKISZ+SDIb1oQgRtoVgtjGyD8PmSGQMIpfJmCLk4f+q6o+daq6+965P1VfM3Pv7VN16ud8Vd1dp6o6IUSEjBPTzkDEdBEJEDgiAXT0QOhNOxPHiUgAFT3sA9gPiQLjJsD0208Pbe9rM/OvwkaBQvP0yzhG6ASQO0AqDwmu9mOPT3nqPWsYV9qFEduVIDP/QU4BSfMC9REqAcbRAa520FDELdphc3SJCyRIcADgAAkSQXOXMs4ckrIxFEUs2oENBNSqR0WmJ2kVv2hltvRdaVPHvPtqdpVxjlD1AHIH6AupDbovH1nqkgllLd3apnQJUjV362dmDEnjOya5FUltsEqqbdtxa5Dbppx3uQ+sNLv6mblCcwLIoKlXTQ/7rQkmX4IKzdMv4xgxbgLMO3rYXyTzuhEJEDjiSGDgiAQIHJEAgSMSIHBEAgSOSIDAEQkQOOJ8ADPutPN/zGgyH8BvRoDLGdMT5wPIKbjN02U+gNsdnuV9oUjSbD6AnwdMrkK7gVYt3311u8zv0r5vfNq1L8xsgPp8gAz20fAilORvs8tdsX3mA0i5k1N3x5dBue7icyGgzwfgvus48OoF+DDu9ukzH0Bqf355s9OHnLMNmqQ0F2jjDJIcrrM+H0Ail6v/KUoe3cECpl85XecDTDv/x4zoDg4ccSAocEQCBI5IgMARCRA4IgECRyRA4IgECBwnp52BmQNNcZS/+1hp4/yf7BZ9IpUwzRyQMwftXUHumFMouX4JIED09fvsD0AtJE3RNg1X/jPTJ6IWNznaxvYrgU+oBnFPaAFcxU88CmCPn3hUkE8RSHD2+OQvEWT6Z7M0Com7BuQSygQiR2zA1Yi1/KuXAN/i22bruCspGUMHT6In0nUV7ZIDKmMnrFRNnUulaF72PJAgl3VXpZObgZrLBGh6E0gerccVyoed7dq4n3ETD+2SgXz0tq0BqQn66HbXQU3e5DGw6uJ8QvEyuQt0M1jW4epi/bpoVwtype5zE9kWboq75VoOTHdw6E8B851+i8fIOB8gcMSRwMARCRA4IgECRyRA4IgECByRAIEjEiBw6ItDi81Spwf3fuCThE8N+HhE28VzrY32TaURKgIUC6N8tntvVwHjQztdrpz71YC01Wzljes1jp35KYvDXoZe6xogI5cA+MWh8hJOH492jzk3PgrYdPltDWHPv18N2NLoGctre41iVyVw9UDdlqbXFujqQ8E+26m7lmDbFoj6zaRx58Cmx72FuzvnfhvS8z63umkTQ+5aWF4Zh1ufSJpm2WFsc1gn9TBNCeBfAUmDuH45kKvQJ3332n57+q7YLgK460A2oJsAMoEsBGj2FFBVQBuPVaLo4LWT9iml3wZVvtveQ0ipr+bS4grO7yAgpV/E5O8BXJqrvRuk9c1mLhvOB5AqQL+BkYovZ04qoqRDLZp72hdnAjcBpRIcGBtIHDTW4AfJvAfla2/8commlwA/XzU5t4iQr4JdYvtVL18Ov2tw9yltkp72L7Vx3wOwiPMBVPScb0xaOEQCBI44FBw4IgECRyRA4IgECByRAIEjEmDcmLPHKnM+gAuSv8qn6L2O/u5Jo3vuEsdg94yVvT4fQILkMfcZJSw8dqseC0zt6Lq4Sl4enjiXv7oNbIsvaZ8SqoEgNVvu3X7rg43q0sh2b//2HWgGJI+dK3ZiDaeetXk7pcWj5CX1L+mxgL8HsE06kP1V1aWhzaSFrOW4p03Z9zAg+Pr6kgZnuXS59N0rm2cS5vsCqips+gZu8xKSNIhbSP2WQLsXb7ffQkIyo6uH8Ncs7RFwzKh6ANVR2CZrrjcJuJ2tXa+OidKD8D2E/smFGE8r5lLQe48ZMb9+CTgoM8V14FkHn0334nEgzgfw8fa7t4eQUc0F4KdUyFVfXYTsu4sUIZOGUjVE2wk1EwHvDSRrB+7jLLXdBI7D2eo3a7HtjabPTSQAB0Fnxrg+iO5gHTPTNR8XIgECRxwKDhyRAIEjEiBwRAIEjkiAwDF7BEhny1u26DAJ4OfLllw25CW1hUhxeCxP4tPeB2Fm0Gy7eJ/tpBOsdMjPIQqSpGK4tlvWV1igN4B3gU4AeZRaHu0uWnWKQ5YCVA6U8mv3sq5/pQxxaIlffGu3qbra+/i9an7BURFA3+69jsofbtsyPUGSm/8DNi25a8+6/g+wIqydLVLn09dnFJha/LaPCA7FULDf6nYJxVwbm/nNuThmL+L6LZ2tS8xw5vYR0lvOg4I6JSxB3Uwm7FMZ/CZE2CeVmQSyTcngc+jaPkEn+IK9Ar4LqhdGqFVm32DE/dYL39dK2OQZBah2H1E4gvld+fX8+Lw2IgIAtz+A38r1ul/evUONJM1uHuUQurbE61wB9w5CgcL/hRH6rNjq+7hhv4voBv/tI4LCrM0HmJT5IyyYNQJEHDNmzxcQcayIBAgckQCBIxIgcCwSAfqlJ6A/Ef0nsZQfzd63OtPICDDMK24Xw9aaXnZ4+l0g3NBmCzQ1Yh975fc9Nna/Ez1O4ld4FEc4wqP4FUuBvjP3a7l0zZKGXe6KCTxnHHIKxtwOoqs0oAENSUUVtjo/JFgOKj+3tbhqCF57doyor8lHmrRPJvqN5HoOudytGfHXDPkSrRPREi0R0TotCTXAp1GHVEP+EjXEtncZyxAFk+8BAO5YJnPcxpdxD0CK2+W5O7hgZeMXLCOKy+W3o5rsJr4htL89ZBtLZNgHYU9LYQ9bSg8AbBlyN95Xcpfl0Ix/H8t4EEAf942wej6BLUbim5suL5+XsYb3y++lpoIA9/NPdRqGmuV7AH6EI3G2z1L+ecMa4qNC7Ct4D9uC/JLmSr6kUDHD2woFtvC2ISWoizP5FYYfxS/K759g8/AgPoEEp4RcXhRkpkeSl/MvoE4YLc0IXpj/D/DP6unqWnboUPAjHNXC6FnICLAiaLO1G8DVAwBvlRQgXMJbTIiCAnXzZ0iNz3rufl3M6Qb+G38I4B+xwcZ/GygpxOdgK++p9N7qOFCY/4+wrFPA936WM3+9AgG5o8razk9ZmasHKCgAi/mRpw7rTd5549PEEn6efzvLSB/Eu9jAfQAbeBcP4f8MuTkLqe0yU3dH7wrxOfxN7Vxm/i/gQQD/AADFBdz/MbBufrOAp3AKp7CMU9ZO8gE8gAcAcC3spsP8QA9v4RIu4S3LdM4+DjDEEAct7/OX8Vv5sVzLXw9nQPgFNrCBEyCcEaeUblmMf075s2EJLrhCfIs5l5H+Bj6G7wAALuBOJmj/RFsv4rIzzg+FkK4eoIcDIG/7B0z19zU5R4HfMD7NKspayQayOyK9n3gY9wH8pPx9HxvCjKIuHfxRxxD8hNmf5OXL7s9K86N8DEwdj1HuR5iXNfnL1scV+2PMjQk+BhYPSdWnLRd95hGQe4hzPeg1fQwGjayl9wmhlpDXXzwEDtSzs+MO7gP4HeX3e5YbqcmCAJxXWvr4tWeYztSUNbyvtX7E+QDBY5F8AREtEAkQOCIBAkckQOCIBFgsvIJXmkXQCZCC4FqYbQeVjoyujxZ9cB71LeXxte5vGxqPvUNDvm3IuUEn1Vu+NgE5APylo34GGLSut9P4Cr6C045QI4wwKn8pdZISUZ/6RJTWBhF2aSkfRrhG6zRkh0Fu5AMR23TDkMuebPPos+G3FE82EdEWOxBSHPX47oGcLMw6rdP6hORFmGxQx5QMqBiQS83hmtw6RNuEvHQpo/suERHdFWu3GEwa0TkCQU+gn4+h1dUT9RqNg3FyENGf5X9XrRXUp2wCSt+iH5YUXAYmAv07ge4R6N+InzJBtJ5L1gU5RPlpWqLTFnlR/SMaNa7BAtusfLsWe5tNf0hEI0qrkUTVHVw4Kfew1WqjFnWuAO85fAL7+DF+gJ/jPYtPsI89XMIbVpduF/wTfhffwwa+hyfwL9ZQ2Vj6hijXxyx1/LLmJ6wwwk0AyP/X6+9Q+8WDn21x1uMMAHwJwEp+eUzxAcoe4IYxmt6nG417ALWDs/UAV4noL4joFbaF9InY1j+uHuBvCfRdAn2Llpj0H3X0AIUcotzeA4y03JmXgIGS6wyDRuX7qib7KlOD5+hcPXUziX5OhHr1j4MAn6HfpM/R+fyvifn1WXE2AqRElFKaXy9N+XeI6Nv539/V5EX5bNfwSv64Q87Hr6692XG+IQFMd10q1JDsatLOmwrUT122RENCyaEBE0ImQN1f18T8ZvFkAvDys/Rdeph26WH6e/q0IV+t5W5trPLK/LAeuolTUW6T3s1vBE35iIpr/25bAsBxUJ6N1DM8b+C+Vb5lVDD3FJCWRecJYidghsccuesih8P8Pi73ggIpI3uKPsxv/LbpQ3qKIcBVGtXj+ibvNqh+H8rfg0qTlmXzmxTYqkld07plORFRz2GcLvKR0/yux8CKAqkl9nPl9+dqsa09kK87eB3v+gWM6IgBoHvsx4QRAOCWeTrOBwgc0RcQOCIBAkckQOCIBAgc4REgcxsPGMmgfDZ61EOPbTfFOburVgmwXlbAemt9NLUqSEHYyb/vwDar4Vq+qHS3RoHfxy4u4zI+hU/hh/h0LWZWO1fzX9mepeq+55v4LAhP4AkQPovNWnx5+4ph7cF+6JC7QgxraRgjQObZdSLapSEN6ZAqpwc34CENZpAzRPtjlOdrnR1UybBDoB1rLorhkHPsUNep8vgYOxa6Q8M8B5meAZO+fRyv8FKklmEw+UwVO7XoycYa+7k3B0z51BjrxXc1QDZKvENEh1YjTpMAxVgWn0Zh9uqzruGaONZ5gj5CCSX0ETrBGmRIIKJB6dPncicTQPWHmCuXMm9Iv6zjOgGgzaKoEyDTul2OyXIEOEOr+cEQYJhX4w4748dFAHJWgdu4cvx1Rcb1UDuKnDN/KuonSspjjUn9eh5rlx9SpWz3kOLgCWBPn8oZV7wGKn2cQwKdYwkAhQB8n7JOm7RZ+isZAuzkVcdP+XIxXA7RTMoTyOVTk1p/NeMpw8CQf5uI1vKD6DqjYVC6bLn0iU53IsBD+dmHyv9m7KL/GhLROUsPYK+/PhGdoTO0Smdok4iuZefV9wV8gBQ38fn8FknecR9OubSbuFvKpbBe7mOSrdE38U38cfn9+/g9TZYqM56AK/UxcazjS8qvl/EzIfWslszyrwD4EADwS2aDGcKKNs/KfMHFI9p5ws8MuT5f6Ca+bMzayrbwzybL7jHb+RMeB/BfAID/VGpX62APaUhD2qXZvAksWh+fxjfL1p/hrhG3n7f71Kp/s2w759jUd+gqUd4Odxh59vmQ5UbPnGhjtt/H6DHjv9x/NL8HGFKfNmmTNolos34JUK+xNvPP/lPAXSrmxnLVM3CksEPbtM1Op0IeO6MQRwESfpln12ohhrUOfGjEPFc7mt0DEA3Lw0IA31Y4LQLIR6q0+rtkes2z1uFTOlv+s57lkFIqbieTWtzP02eoJ9QSEZT7DF22lD8FZP/NbejqBDEpMhSlaum0MkZ3sIqH8BKAF/E/rHSEFdzM32aQ4n/xa9qbDVz3SIC+meUk5j23QCRA4AjPFxChIRIgcEQCBA6TAEPrfuEXcau8obwlbokaMU/QHhRuExHRbeYB5ou1h5AvTuVhLx5jPtQfz5TGfcYIdlF7eixwkVG4R0R71uR+6jkgA48Qx3/sKfTfm3puJkCA21T4nMw+4DWWAK8xCuWBoNowhNX8HEncy6tcIVxyor1yuGiPlfvlf46O6uszmoH1PsCGpgQAgV24WTd/vZ9Q19byBnSFGBHR07RET1s1+JVuQQmQXf8Lr7PeB+gFl6phm2zLwlTz7zKSQfnJXyZcxkFu+DQnAid/Ov/2tKBhT0hjgQkwIBOqAfwJwHfeuqZ7jEeuiGczvy8BUrL3MVSOsNf99RXsBOgT0R7t0R75+BXm5DArwPzelACuozBS3fyZ2W3mn4UeYIFvAqv2nyp+58oMX2cJ8HVGoasHsB1qD8THn/49gJuCc3hwRasX8ilW+hSj0FU5dqnU+nUDj1qH6PoUkIWZutHGT4A91sBqFTxfkz5vNeNASFCiR9ve43iPBSOAvzv4SQzx5/n3r+EN/Ou0xzCnhLbvAppRxPkAgSN6AwNHJEDgiAQIHJEAgSMSIHBEApgYgFpL5xAqAYjZNkEHYVyvhJgWbgjvNgeAAXZbS+cTxigd0a4wGqd6A0xJES+1ahjQbu4IGtCuoAGEfHmTLt/WNLVx1w4cg80Dj9hFDdi1zNXBV5/NhBIB1Hj1ah6UcQb5CntZg50Atvg+BJCksqOnLl2QIWFbIflpHS4CZCasfutSEErjuTTYCGCP7yZAUxPbpfwGDHN58DeBd3AB32hxPbmDC7iAbJ3cBWXMPFHOXhB3wi002OCKfzxYJG9AjeWLfA/gOgK8B1CdQYQ7eElsX5Szv/icL6hPLrbcZ/f57aRziegNNDHArmBiWTqHiAQIHHEkMHBEAgSOSIDAEQkQOCIBAodJAFJeLB4RACoCpPlWqWdx1rLXfjZ0dM0ijZhLFARIcVhuDvMIDlkjb+ACvoYXcejxQglzeGHbGIHcPmZ5hA15je0Q0V8RiOhFyvbFtY0ep+JewtWovOt3/1jl8bAchVGJ7hEI9CINCHSPbG+n3qFzlDllU6tSfqfapXw79dP5n7nT7WmSNlwv5CTKl8q/pdYOocCOkwCA8wDeBAC8BAB4Exs4X9vKdAObuIkreASXcIgruN6oq/mk0ukkqI9Afzz/S8Avvzqd/30S/ObyHwewkstXFmu8fpLIfAEpDnFfedHRPWxgRdsJt0CKQ9zBBezgClvJlO9UX9+t/re13/9h7JU7aXmEDXlXsEvVoukR8Zu4ZL7w7H0VtpfK2ObL6O8Wr883mrQ8Hpaj8AZm78O4jzfxLDbAv5Gjmg1wAWDcomrrX7A1tIuLyh28jmv5g+AbuBZfFh8K4nyAwBF9AYEjEiBwRAIEjkiAwFERwPU+gK7yJ3G9lF/Hk8cun3T5pi1vi1yn630AXeWubeYmLZ90+aYtb31kHxeJQ/U+gK5y10aTk5ZPunzTlnc4skvA5bJDSJQRvMvMNxWm/IU8boIXDPmzin4wZ5/l1FvkSYv4l9n4XPlc5Vfz3zz+20iUELb4klzNBW+VhsgGgqrRoKT2S5dzGSnkCYDnAbyunRmffp/4bv1qiKbxE/ALzKjBb1K01OV/AgD4a2v9FWc38Q7GskhNJYD+Lup6Blxy4AW8DuB5vCZWsK2C3PoTVpuvAdz6ZQJ0r5+kPN9O/jjeUcw/FgKc7K5CwYfK/+YgZ48gQ12O3kZDony2iU8ecV1usj8VZI/jnmb+sWDcl4ARgFtofwno3sXb81fX0K4Ll/T79SCuHsqW/uO4p5l/DD1AdhP4Kit7lfkmyZ8HcBM382+q/HUlFjFnX1ekLjlEOVi5nn+qnX1Vk7jkbeunKB+1lr+jmZ9PtSmCeAyb9mPopOWdxwEWfyBm2gNRk5Z3JgDoSbpeKr9OT9aCdpVfpFul/BYziDFp+aTLN215yyNOCAkc0RsYOCIBAkckQOCIBAgckQCBIxIgcKjOoLrTUcesyyNaQPcGLpffjtjQXeURM4f6JaCb6Y6cGrq13KSzhggNJgFcBjzCkShfxpHSD9ThMqA6JYoDtfT1R1hgEmAZEA24jGVRfoRlkSAEecJE7qGwIq47HjPql4DlFlr02LKGbu3XRaCIhtDfF6BJamFnXR7RAtEbGDjiQFDgiAQIHJEAgSMSIHBEAgSOSIDAMb8E6MUBoXFAJ0D3cTZCH4T+xPPdwz5WJ55KANAJsJr/TRuu1p2Z/2Da2VwE6ATYz/+mC1frjuYfI3x7AEKv9tcMzKokFpl57TQszB/vAcYCfUbQPhLss26WhPlrhi2vUIX5V0X5QbwHGBd0Akg9wGppmuKvWSe8VztTJ1FP0c9RTDd/vAiMAbPUA0TzTwG+PUB3uN/f0cz8PUu4iEbw7QGOA1Lvwpk/3gOMAfqEkB4O0JvJzpXyTt/8jOiIOCMocMyvLyBiLPh/gj9Qphd3t8gAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDFUMDU6MzM6MTAtMDg6MDApYMCSAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTAxVDA1OjMzOjEwLTA4OjAwWD14LgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=');\n\tbackground-position: -32px 0;\n\tmargin-top: 0;\n\ttop: 0;\n\tfont-weight: normal;\n}\n.ui-datepicker .ui-datepicker-prev span {\n\tbackground-position: -96px 0;\n}\n.ui-datepicker th {\n\tpadding: 0.75em 0;\n\tcolor: #fff;\n\tfont-weight: normal;\n\tborder: none;\n}\n.ui-datepicker td {\n\tbackground: #f1f1f1;\n\tborder: none;\n\tpadding: 0;\n}\n.ui-datepicker td .ui-state-default {\n\tbackground: transparent;\n\tborder: none;\n\ttext-align: center;\n\tpadding: .5em;\n\tmargin: 0;\n\tfont-weight: normal;\n\tcolor: #32373c;\n}\n.ui-datepicker td .ui-state-active,\n.ui-datepicker td .ui-state-hover {\n\tcolor: #fff;\n}\n.ui-datepicker td.ui-state-disabled,\n.ui-datepicker td.ui-state-disabled .ui-state-default {\n\topacity: 1;\n\tcolor: #999;\n}\n\n\n/* Month and year select dropdowns */\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\tbackground: none;\n\tcolor: inherit;\n\tborder: none;\n}\n.ui-datepicker select.ui-datepicker-month option,\n.ui-datepicker select.ui-datepicker-year option {\n\tcolor: #3c434a;\n\tbackground: #fff;\n}\n\n/* Button pane */\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tborder-radius: 2px;\n}\n\n/* Timepicker */\n.ui-timepicker-div .ui-slider-access {\n\tdisplay: inline-block;\n}\n.ui-timepicker-div .ui-slider-access button {\n    padding: 0 8px;\n    margin: 0 2px;\n    border-radius: 4px;\n}\n.ui-timepicker-div .ui-slider-access button span.ui-button-icon {\n\tdisplay: inline;\n}\n.ui-timepicker-oneLine .ui-widget-header {\n\tmargin-right: -2px;\n}\n\n/* Color schemes */\n.ui-datepicker .ui-datepicker-header,\n.ui-timepicker-div .ui-widget-header,\n.ui-datepicker .ui-datepicker-header .ui-state-hover,\n.ui-datepicker thead {\n\tbackground: var(--mb-color-datepicker-primary);\n\tcolor: var(--mb-color-datepicker-heading);\n}\n.ui-datepicker th {\n\tborder-top: 1px solid var(--mb-color-datepicker-border);\n}\n.ui-datepicker td .ui-state-active,\n.ui-datepicker td .ui-state-hover {\n\tbackground: var(--mb-color-datepicker-active);\n}\n.ui-datepicker .ui-datepicker-title {\n\tcolor: var(--mb-color-datepicker-heading);\n}\n\n.admin-color-blue {\n\t--mb-color-datepicker-primary: #4796b3;\n\t--mb-color-datepicker-border: #52accc;\n\t--mb-color-datepicker-active: #096484;\n}\n.admin-color-coffee {\n\t--mb-color-datepicker-primary: #46403c;\n\t--mb-color-datepicker-border: #59524c;\n\t--mb-color-datepicker-active: #c7a589;\n}\n.admin-color-ectoplasm {\n\t--mb-color-datepicker-primary: #413256;\n\t--mb-color-datepicker-border: #523f6d;\n\t--mb-color-datepicker-active: #a3b745;\n}\n.admin-color-midnight {\n\t--mb-color-datepicker-primary: #26292c;\n\t--mb-color-datepicker-border: #363b3f;\n\t--mb-color-datepicker-active: #e14d43;\n}\n.admin-color-modern {\n\t--mb-color-datepicker-primary: #1e1e1e;\n\t--mb-color-datepicker-border: #363b3f;\n\t--mb-color-datepicker-active: #3858e9;\n}\n.admin-color-ocean {\n\t--mb-color-datepicker-primary: #627c83;\n\t--mb-color-datepicker-border: #738e96;\n\t--mb-color-datepicker-active: #9ebaa0;\n}\n.admin-color-sunrise {\n\t--mb-color-datepicker-primary: #be3631;\n\t--mb-color-datepicker-border: #cf4944;\n\t--mb-color-datepicker-active: #dd823b;\n}\n.admin-color-light {\n\t--mb-color-datepicker-primary: #e5e5e5;\n\t--mb-color-datepicker-border: #f0f0f0;\n\t--mb-color-datepicker-active: #888;\n\t--mb-color-datepicker-heading: inherit;\n}\n/* Light */\n.admin-color-light .ui-datepicker .ui-datepicker-next span,\n.admin-color-light .ui-datepicker .ui-datepicker-prev span {\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAYAAADvl7rLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMUIxRjI2RjhCODYxMUUzQTEyNERCMDU1QzdBQ0EyMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMUIxRjI3MDhCODYxMUUzQTEyNERCMDU1QzdBQ0EyMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjExQjFGMjZEOEI4NjExRTNBMTI0REIwNTVDN0FDQTIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjExQjFGMjZFOEI4NjExRTNBMTI0REIwNTVDN0FDQTIwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kKfR4AAAHcRJREFUeNrsXWuMXsdZnuMu4CUN2S0t0a6o4sQqAaooTncrKGrUNbe2qSC2uQqpqtexbCqI0xaQEBclKUL8qts6stqNkuwWiYqbajtqS9oAuyEISrubrLmUFnBSfmRXFa12KT+cKk2GM9mZ7ng858w7l3PmnO88jzQ633e+8565vs+8M9+8MwXnnAEAMEzsQREAAAgAAIABYkx9OHXqFEoDMDFVho0yTJdhE8UxOjhz5gwsAICk/Exep1AkGAK0DY6G93L+eUblnw4gATPNqMceEsBURMVxSwhFbO8TEj838j4V8B6eQHF1RWyzDnTl3zRIIDTNsCJ6RABdMf+mM6XBjNfsDXP1wm2hkEGN+ze1eyFpngYJ9IcAYs0/vQEVkenz7X1SwRZv2xNhqeJNVRcxac5Vj0AAAcSYf13pBVMMPfS8xyhhaFpy9pqhQ6CqNOe0ZgBPAgg1/7rcC8aQQJEx7lzkGzoEqkpz7noEPOcAmhhPxjTGzcA42zR/m0jDZkSPGZPvmCFQVZqh/B3EWMfTV6CKvm2F5LJAQhYCmWlGPYIAAJAPMMQhAAAAIAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAhAA/zI8+wHoMcL772BEkBsA0i1J0CsM0yIAvGa0CZ55doPIIU7uF7uIJKeEUCKBpDS6yumEW4kTPt0S+mOVf7YtG84voekHXsB9IQAUlXeZgMk0JYC2dIe6swS2vBTK79P2mMdmTZayBPQEAGkrLyUJDDdkvLb0h7ryRZCAtOZlD/F8G264TwBDRJAURNYJhLwbcSpepqU+wFs9KDcqhR1OkHa4Q7cQbTlDRjjVRa6H0BuFInKbTqQ0IpE8YYqrl7n8CgcOAHkVKK+I+d+ACj/AQ4BAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAeg1sCw64IJYBFwPNt4li1Mp/DJUPBSAoQUwZ8AwKlCLOQdT5HmLlh1ZCikM6eUsyOXqUJvMRW/660hcRaUlBHDyjEqdsuzxTW+O+BJCi8lOdyRcSf5GoAaWqhJAelCcsvyKB8sQocmzeU7SBWAuorbabmjxqy3+spcrnERkPbUhFR8z3UAVIMQ7NVQbcEneRIO/UvBSW/PuWAw+U54naQJFgCFZVlgV1DiDH2LlI/K5UzNlmL55ScYtEaQ9VoFTpbbsNhHaCqdKdoh045fe0pPxFBiKJnXtIwcAx6SgSpD+VCR3bA8XmPdUkZB+sv9TzGLV135QFUHTgXTl7z5Tx5yzH0PynznvRkTJscx4lZvhHjnesw4XXFRTIP/I/qvFiJSAADBggAAAAAQAAAAIAAAAEAAAACAAAABAAAABDIwB1suvQT3WNXU3YZ6RqA6m8QtuML/Zk6N60P8rhoBs9bABdJZO2G05omadsA0Vg/DZvuKkW4lZyKY7GM9Ocwx14inm6A28Q7zVdCSGVzztKAr7pmkqYh5DyT9kGeIDy1x1QO9Vg3E1YQDmPRXceklt3OGjV91w9H6Ugiw5aAr6706Q42Ti2/FO1gZCdeTYqLBkfIoptBzEWUGia60z/UEvOVZaNTwKGNIC6sVdo5fNMSp9SAXwbQS4yrMt7G+vbiwTtILUV7Itp4r1G5gCaVP62HCtiG38KBs6xFx5FCbpo9VQ1dNv4e7qFdhBjAcWmWcA8Xj3FMe/WuYw9HWwAdZMvoZWfk4FTKUCKrb24R/2lMEFD0rtZU9Z9PCo+9nj1IlDeVZaNEkATPb5vQcb0eKkYOCQdmyy9uedbH6kIkEeUv82nfbPFNKQq981Ew+DQ4V/tMe9jDTJnFzazYJEkkGszkk2WvucqPOOf1sa9PgTYtf0D+riZSGvx4mAQoE0SAjoGLAUGABAAAAAgAAAAQAAAAIAAAAAAAQBAVnAUQfsEkMobLdSjKlWl6/GjIYUpX+6yCz0hCfUeSACpvNFCPapSnYmnxy/eN83SHFLat14s9njwgsUf8JpCgXlLaR88AVR5o/n6NKf2KQ+NX5GJz8KWlCfqhnok8kRxhypwEdgTV3kDxigwi6w7kECCOQDfjQ1iPKpsCt/WxgrcQn4pThj2aYS2k3lTmNJNPEvNrw+BxJ7KDEQQQJ0LYRs+0dNaXLEbK8QoSpHAjCwSKVauHoxnym/Kd6QYjgyKAKq80dpi4VhvuBSurLlNxqLCAuEtNvqu9cQ8sO5SHfM+qCGAbbzssyXSlFFpIRsihO4HkMqVNbbx8wQkEDoOjm30tmGQ7xCCB86rxMjWkQCD8l8NH2/AjcAKjPGlZwHviXFlTWmG6uWQwowtAuOPSXusK23oxjAxsk0ORwZNAG1MIqV6X1dcWYvM70mhwLn86aGwGYcAAAAlBAEAAAACAAAABAAAAAgAAAAQAAAAIIDRxwTD8lFgoASQ0g871LGGJ5T1fYdQ/i02On+HxZ50CwyIAGIP1kzpCDOZqXy2LEQyEamAOWR1bIAEAAoBxKyfjlnPbfbUqhee9FAUcxmpz9l6usk/aXnHlmf85r0YQk1lPW2g6QNVBMAjeyCbPzj3JBSlbLryb0dYH769vpLflnGHnCxr5t0n/3V7ErjSkmo7N2AAGCOY/TygF09hRTCL8ucYi2+zdA41VOWvKjdX+ZvbsBUV9TuNpg/YCMBstFWffUzQWK+0WMSOu32tj7q8u8qhqpenluFGTb4LTfk30fQBGwHUKV0R0fCLSDLIRSCFQQKcMBfBa4ZCrrzUlU8XdtcBBjAH4OqNQhXWd0+8mP34YuQnLbJbWh62CUpW1NwriKQTgqrt3KD4gDcBxI7fQ7elKioCi5APGfPrsqn+hiwSP2cidjs1AEOA6IZYJG7UOREzB5ALmww9PpCIAIYOKBIw2CEAAAAgAAAAQAAAAIAAAAAAAQDNYoZdvZZhpkfpF5PLe42ACeeOE8Aho8Ety3tt4/0szoc/FiKuBVa9l8BMC8q/arm/6hH3TEbyEIr+rTLcXIbLMtws740Fpj8kHzcZsjd55iNEPjZOgV9whJg8XKVLeoWcK8P7yvC0/D4h79lg+3vskOX5w2U475no32dXH8t1kvktB64jDNc75svwL2U4UfH7LWVY81ReHbMR8qsOef250KPNRKO5VPP7/jI84yCA15dhvQzj8p4ggQNl+LIkAuaZfp98VNX9JY82wCxlcIkgFyJj4s/l9aTsiFLWY1FHAExTfoEV5rcCjkog4r0HA5jRlwTGLfcuE+QWy/BgYO+3qhW0uSJPnXa8WpMHpeCrNeSxyppdn3Cpouz0MnTFr5T/Go3Y1h3vrStPlXcKmjiVqm+Hy1aROLextVlxOrY8C1kp/5dlQwldQrvX+L4Q8I7vCIzbZQG4cLiCqLj87ZxDfq2CBCg9P69ogL7nFIqy+4bl/vd4lMM18nkR33cHluUdEcO4GIIIdYcviGkpWlT+nyjD39SZa4yo9FQo5Xe9pyASwGRg2sYD0x9jAQh83kICSvk/T3yHSQIU5dcx4fhOKbvrI8pUmPtfK8Pb5fe/kveYR/6ZhYR8ymDWsKhmCcOzvsNU/l+UdVZJAqlnZqnK76O8oeaU3us826IFYJIA81R+G0n6TuLtd3ynWGD/bdy7waPnvygVfl0jBHHve8vwPLH3rduZqs0l2inM+dh3/EoZPu45b3FSG4J9Urt/xfC7ib8Btzwadp3yqjCuffbBd2nBpwdbjFR+gSmNBJTy+2zEKRReOPUckmGTtTuTL8rpB40wTig/kcfvl439G1LxD8h2xuVvoRuSznoq/r6Ka+xwNMc7/iSA+MWw+TvZ7qSiUv6VJi2AVJM04wni+VLgO2MtgCm2u+OO3utvEhv/TI08lQRe6/juakSXDHNenx+qsya+T3vO9k/BunxfyI5Eucz3y5nf4bMvxzNG/S3UKX8oAcxGmDkU5f8DqYBVv6UimSbmACjjzNkG5XVFrPvuakT63MWYTJPr7z+dJFzPuCbSeIK6/cuKK7UTWKy43+Y7QvCMhcStyv9yYXK+U9anTp1iwBXj7VsqfhfktDaQsuBar/9MT9OeqmPoG9SEoFX5z5w5k20I0HWsGdcho0Dae4tnKGUAXwAAGDBAAAAAAgAAAAQAAAAIAACATuAPZchCAOqU3NgjsUNg+i23vSeADcpHnbIYZ5bZ/bAp/+EfYtV7EXDm3qPhhEOeusCpypf8pp7IK/xRZPuZk6FtXFuG35Hh2sh3HdXCFRirUf4trcFST+gVm4gIBxB95dP9bMcD7kZ5pfhzi4U4a1qlndQUsKiRUygaUH61QMfljivK7AtGWlTaxP03svrFPue0PJtYIJShy3NygdEWOqmFJLoTzzqj+7jnllf4baNNCCVYIij9smzzy/LepNSDykU1hu6oOnxQku6C9h7KOROfNj7fHqH85oIkkf6vvFwoloVAuvLr3mirhMSLlwk/+Lrz50M3dPCRV0r3a2U4q13FfgWnPRvQjCQjteGJyzOv6mBPah4oPVVByP/nyvCjbMdF+7Yy/EMZfozRnWk423XiUTK3MvdKPpu8Qoi8+D/7BbbjonyTh7zZ+NUKvMWG26Ape9JCykWN9eYi8JOMvlJVtVmR9/NSr8XnpbqFQKbyq15vVv7WxgKLqn0EfLwM3ySJ6D/L8O9sx7tNrOJ71lP5Rd7Vzka+brm58Ndl+JEyPCaV6DFZHn8bOBzTFTJUXuCWAHmh/M8HyJk936Jn+9vybJuhFpmOGxI9o3CPluZDhpWybZsDWGDV69EVCSy00IC3ZdiSYZv5H8/1j2X4uTJ8VjaGT0r2PBeg/Oc0S6AP+Em2s/b9bdJ8FFfhTkrdYONmS2/lQ/ymvAqvCJAXPf9e5rfBy9EahXetxZ8zlN88X3KrwTmB3y3DB2p+/4B8xoV9Mqh0npblMS+HP9tVcwAnLeNZphHCWsXYtItQFsBXy/BP0pQU138LUP6Ynp+zMH/wSW3uxdcCEi6gP1+GP5VKL66/xGhuqcJj8UvamFu59CrzPUReKP6LEfL6HICv8psK/2QL1utWgHWr8Jtl+I2a30LIr5K8Xb4AIY1+SzOZ9xkm98EWFH+WoGwfb0n5Y0nAtIqo+C22sxmEmNi5Xl7Ffgq/V4YjNXJi/uY5456pdPs7LG9T/iXPcl4xlJhbFHjbUU9VJECZANT/cft7eX2zabo78q+P+VfqImvCGeh5trsT8Fci5wxC9hRci4xTWTuhyi9m+b9QMxZ+Y8PKr8qdSetHv/6MQ+45Y7z+r57x5pZf1Ig2RPkplhZlHsxGAtTZf9E+XirDu9nuZJ+YHPyI/O1xot6oMf9hXwKo2hBR78maxMmantJn+GGm1TftoT3/ag0JuP4CVD3cJa3xbHn0gLp83e8uiJ54M6IOc8nPJ1B+ZakuG0qs/w1IJW19GEclcTHp+ctl+Avt3oPyPS8Q33FaK4/aeFPvByDGiRcZAIwO5rShQR9wVPtcSYJN7QcA5QdGDSs9S6+X5QNfAAAYMEAAAAACAAAABAAAAAgAGCno7sVzRJk5drUb7s2J0uPzV2wX3MAHSQC3WhrArRnSxwfYCNQ+DI8Y9x9h/nsz3Meu9H1YJpDAj8vnjsjwOhnE8twfIsSpt533Vih/YQQdwnPxHVL+TTJwee82QvwzlrZLPVDFtReDaz8GinzsOw556g2v0yPbOgC15nulDB+W9xZlwzPdOykJ8WV9m3zMO3LgqCwzVV6qTCkLVPQ8i3cck8o/71kWKg0KYj+GZwnyIv5rLPe/VYZvMporrYj3UUk+qgz09NT51KdwBzdXkFK9WDmju5tT47Zhy/EOtZpR30BmVbtfEPJvi+Pb7thqHYDNAlDKLypJLOn9Wba7BnmdARQsamV5VCu3RQ9ZJpXeVH6qW+s+47uPG/TzUtkvy/BNSQBUPMp2l4NPsqv98ldaqIP9bNeblHlaA+buT75W6LbMp+7J6uPRyo20zBDJ0YQ4i3FaC/9DHQJ8WDM71RFH8y0pT5W50sZwgBODCwcqFJbiT3+MVXuzKYuAMoy4N7IcXtK+v8Toh2t+SPb8qpzuNZR/ifCO8Yrgg1XP+wp72ZW7P+3V4qce8inK/7Rm0jPmdzhpETF/UkjiEW3tNWzHGew1WrgCdSsBdeU/Rhx7VLFUm6Z8ivMJY3GRXX023LzH8OlYpPLbNnVhmvldhz+TCm/6DFySyu2CGPdfsMw5+KzPF77/L7A8uMby/Wvy86uJ73iP9lmQofIsvZFoBfAKsqJ0Pspa+LpG3nuk8j/Fdrboq50D4DKRE0ajU5XZxpZeLOIdvEFZah6qfOepcyh/XIZ3Wu4L99DbA5WfqoAi7fdU/PZ+tutp6Jt3KoHp4+gXtfsvyOEIdQ6gapztGsPfWPM8Z/UernrcVcO797UwB/AG+fmr2v3n9LZbNwdwQBvzPyp7fqX8B4jKYc7uVs34UuV93lE4QowsNQ/rFSb8eoDy61aE8At/0jG5pCv/QdkgC4/eVxDUAzLdeqAov8qjauhM63HUfAZ1DC3C/7GdM+5f4WF+zzK/reNMvFKGZ+X1WuNzDKjD6Ng5gBukbl+vBSaJgbuGABeloq+zK/9C8v0HYMhQ5r8qs6fZ7r8ALrzT6PFFr/k6trspxJuJY1/X7rV1eFqm/3Py+w8QlV8nsRU5Dl6RQ4ctLf/HPN71dc+0rzH75itiQ1HXCcfCVNePprd9PkwYgt3o+J3SCXKP+za8lmTKNnw8+FD/BoyBMuNNc/9Jqfx1vuVc6wXXEtWdb/nr/1psa+NefbvsPTUNWd2/qwxfZDubuW4GtCVlKt9kmcsoHJOAr2e7e2Ay7bPYTq5ug9JDjLbnpNoxK+QddbKUoewVQ4CmjwcvMsv3EdsV+b695fJ6tWa++/yjIHr3v5NEtaiRldog43/LcB1hMuzhyPRXbQ3nOpzleXb1rlLUcj2foA7Ot6k3YwwAqk3vXw+UXaohN+ZQ/lQktsaG2YF4Ab4AAAACAAAABAAAAAhAwyFGXwGocIccA5rLZ5cY/WQaAAAyE8A5I1Bwdxk+VYZ3WX57l/ztbhQ7AHSbAN5m9PyH5D1Xz3/GuGdbOXfGwxJYldbDakDenjUskLkE5TWHJuNVb2ZYRdH0gwDUARyTbHddtutQjiMe8VKfnTGuPthnfF9OoPzLRBI4ajT8owHxxb4jVl4p7IxFuV2Y9bwPdIgA9N5f92F2WQF3VTQiTnw2NZT1MZngXXMagbhIQCia6bO/6KmAse9Q8qK+xuV1MYAEZiy9+QzUZrQJQO/pJ9iVa5dPBiphKE4GxqunXy0/XQk08+cM68G1xn7R837ds/OSwOY936GU/zNsZ2XbZzQS8MUa1GQ4BDBnjP31HVWUFdDmOPg/jKsvVNqFI85hovLrPbyv8qfGeWmBnQ+QfcLxndVYbLGbrsxo5LGmkQish44TwDKhB19uMX0rMv5YpTvI3GvPbWZ+TuVXhDvB/P+KFXiL43udxRa7hHZBU3jdnXUBKtddApirMKEnCGaywFmPeKnPzrG4GXzVmCm7sKywK3fLCVX+ec/7dc8uSitm0fMd4rnHyvBWtuPd9lb5PWRbt5mEMrAAOkwAyxUmtG1zBduzF2pMSsqzrCaeUKvD15w1SSCk51+yKJrvcdWx71jSSOCypvxLnuUnTPdZwzKgzAmYlkQqywJokADWPBuGicfLcJwge1w+SzXdGaOfyZ5q2HEw0uxfMhr9UoZ3xMoXzL6vAP7KGyGMJa5Y4cP9X3LM+h7jN7ErjJjMesJTGWN6jSKCBNBbAYMigFR4Qob3ongBEGl/hgAAAIAAAAAAAQAAAAIAAAAEAAAACAAYIOZYuG9AjCyQkQBEpVF931nNO3jNd6B5LLC49fdzLHwVZows0AELQFVgLBH4koYZ30RAGlTaJyz3eEAaFE4Q5U/UpIl7lIXvseRmfCdkmOuI8nOGXZV6NwRomwjM+IQjz0FNeeYIJucy2/UADEl/yjznIFJmKKCPInOtDEOtvirZAlZBf+cAVEM+0eLYc1lrMIXWmHlNz20+G6N4ZhpClLBtxWc15ZMTGP71nABWZK/6YEtpU/EdNBrQQWZfXlpUPBvjx2+mwRex8Y8SsCS4pwSw0nJDNuOb0Ex61+YgKxoRqDmAkPSnzPNKBiIoKoKP7MGIeA/WWAEHoXYdYuWK48G5bKz3RzRa8zjn2KPCgXhz27fs5yzDqjZkgYbhOh48RYUVMAF7b26vaNZUm7JAB+cAgGFihWFfBRAAAAAgAAAAQAAAAIAAAAAAAQAAMJoEEHqyLQAAPSUAsXruHu37DTJMeLxX92C7z1MWAIBMBKBO0zXPortR3qcq8gG2swhEnAVwr5S9NUF6XQ4lJ5jdjVaFEyMuDwBeMFcCnpbXfzbur2i/HyO896ImJ5YTn2M7J/Qe0H5rAmLzi8JBIPpptaMmDwDBFoDo3eeloqohgDDf1Uk+6/J3ihWgeqxH5PPKEWY9cDjg40oqDsO8Vl71z+I6XoZVh/y1Mj79HSr4yvMI+b2WK0UeAIIsgP3yqh/ceb/2+YLswfcTeiDx3G1s51TbeTmEOCyHAuL7BxvM06sqCKQgEskrjWthvIMRFFi/vsqTxFS8k4b8JMOyWqBBC+CSvN5Z8eydxnOuIcCS1ogFEWzL6+mGen6F6yxhQl43mPsMRPHsD7Pdo9H1dzxHkL9OyutXJe8bv/4eavwAEGQBbEszfY7t/PW3pP12VPbqK/I5quIWsucXcwD7yvAoCzujnoqTZfii4/e1EZYHAC+Y+wHcKsfpasx/Qfb8BzTT/qInAajvaiOIZYIpq5vstisAABGo2g/golTy+9jOX4FK8c/Le9QZ/Lq9AAoP+aorAACJhwA6CRxG0QDA6AO+AAAAAgAAAAQAAAAIAACA4RLAHWxnDYDpiLIkf3Mht/xb2M5KQ1P+g/K3UZfve/0NXb5VmOsA7i7DGYeMePCBit9yy99Vhocc8sfL8PCIyve9/oYu3xrUOgCdAAQ7fYoo/44yfNrCfDnlf6oMnyXK/3QZHh8x+b7X39DlsxCAPgQ4YrMQmH3xzRHivSq45I+zqxcPHXfI31mRfkZ89k6P9PvIFy3Ff8Qjfmr9FQnkWab411j1sWi+8RcJ2n8RqCutDQF4TaI5oXJ9HXfq5AvNJGaaycs948+V/lTxp0h/1Tuajr8gposFps8n/iKg/Yjff1X7/tGA9mc+Kzxkn3KQY6sWAPVosMJTSaoyR5XnxliXMjZ2pYdHKHcIScRWcJE4/b7vSJl2lqD9hKSfW0jABx8xCMAHb5DKblP+zmCMdRcvVnxuAzyBhZBKgXIrcEgHkKL8U8Qb60D27kA5ofxPd1356wggtgJ4ogZ4VF6X2O5fKzENKpQEeCISaav8eKTyxhIgz0AaLgskxIL6aGD+n9JIoLPKL6BPAp71kDtLvBcqr8b+izLo96rkH/ZQpoeJ93gCeRYhzzzkz3oQCqX+eEL5ttuPWX88g/xTNcp/tosEcMFDAS4Q71XBJf+QpQE+5JD/hIcCfoJ4jyWQ5y3Ff8Ejfmr98QTyLEP83EFATcvrJMAidaU1AhD/Kx8nyBxnV/8H3QV58b/qKYL8KWb/D7bv8n2vv6HLZycAZVrOsZ39/E18SP72sMM0zSkvVliJRRYfs/z2MfnbAyMs3/f6G7p8+5MlxlJgAAAGANtKQAAABgYQAACAAAAAAAEAAAACAAAABAAAwIjD5QtgA2V9O+Tj5AEgKwEIjFvuXfZ4d255AAASDAFyKt3lBGnI2ePiSDOg1wQQq4CXtRCCcSk7nkkBq7aEokI/1BQAekcA4zXmOFWBxyPkL2skEKqAjMXtI8BZvg0pACD7EGA8Y/rGE6QhZ+/LO5AGAKjEWINj/9zyAAAEEkDKDS0hDwA9HgIAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAAVTDAuDgB4QQBdWsYm4Z7TrKCj/Rhmm0fSArhPAtHFFzx1Hhrryb6I4ga4TwIZxHbryx/TcUH5gEBYA13rKumvTwwZXCFXejQTKjzkAoDMYc1gAhXaloCBem8RsQz1/iAVgU37MAQC9IIBQC2DaojTmtUkzeNWDqHyV34cM65QfwwAAFkCHLQAoPwALIMAC6ALWEryjSeWf8nwfAPTGAhgVhFouVOXHHAAACyBAEbsO08x3fQeAvD0d5/hHCgCGCvgCAMCA8f8CDABatG6NN+gY2wAAAABJRU5ErkJggg==');\n}\n.admin-color-light .ui-datepicker .ui-datepicker-title,\n.admin-color-light .ui-datepicker td .ui-state-default,\n.admin-color-light .ui-datepicker th {\n\tcolor: #555;\n}\n.admin-color-light .ui-datepicker td .ui-state-active,\n.admin-color-light .ui-datepicker td .ui-state-hover {\n\tcolor: #fff;\n}\n.admin-color-light .ui-datepicker td.ui-state-disabled,\n.admin-color-light .ui-datepicker td.ui-state-disabled .ui-state-default {\n\tcolor: #ccc;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/divider.css",
    "content": ".rwmb-divider-wrapper hr {\n\tflex: 1;\n\tborder: none;\n\tborder-top: 1px solid #e6e6e6;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/fieldset-text.css",
    "content": ".rwmb-fieldset_text-wrapper fieldset label {\n\twidth: 20%;\n\tdisplay: inline-block;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/file-input.css",
    "content": ".rwmb-file-input-inner {\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 5px;\n}\n.rwmb-file_input {\n\tmargin: 0 4px 0 0;\n}\n.rwmb-file-input-inner .button {\n\tmargin: 0;\n}\n.rwmb-file-input-image {\n\twidth: 150px;\n\theight: auto;\n\tmargin-bottom: 4px;\n}\n.rwmb-file-input-image img{\n\tmax-width: 100%;\n\theight: auto;\n}\n.rwmb-file-input-hidden{\n\tdisplay: none;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/file.css",
    "content": ".rwmb-files {\n\tmargin: 0;\n\toverflow: hidden;\n}\n.rwmb-file {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tmargin-bottom: 12px;\n\tcursor: move;\n}\n.rwmb-file-icon {\n\twidth: 48px;\n\theight: 64px;\n\tmargin-right: 8px;\n\tborder: 1px solid rgba(0, 0, 0, .07);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n.rwmb-file-icon img {\n\tmax-width: 100%;\n\tmax-height: 100%;\n\theight: auto;\n\tdisplay: block;\n}\n.rwmb-file-title {\n\tfont-weight: 600;\n\ttext-decoration: none;\n}\n.rwmb-file-name {\n\tmargin: 2px 0 6px;\n\twhite-space: nowrap;\n}\n.rwmb-file-actions {\n\tfont-size: 11px;\n}\n.rwmb-file-edit,\n.rwmb-file-delete {\n\tcolor: inherit;\n\ttext-decoration: none;\n}\n.rwmb-file-edit:after {\n\tcontent: \"|\";\n\tcolor: #dcdcde;\n\tmargin: 0 6px;\n}\n.rwmb-file-delete {\n\tcolor: #b32d2e;\n}\n.rwmb-file-input {\n\twidth: 100%;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/fontawesome/icons.json",
    "content": "{\n  \"0\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Zero\", \"nada\", \"none\", \"zero\", \"zilch\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"30\",\n    \"label\": \"0\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 192C0 103.6 71.6 32 160 32s160 71.6 160 160V320c0 88.4-71.6 160-160 160S0 408.4 0 320V192zM160 96c-53 0-96 43-96 96V320c0 53 43 96 96 96s96-43 96-96V192c0-53-43-96-96-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 192C0 103.6 71.6 32 160 32s160 71.6 160 160V320c0 88.4-71.6 160-160 160S0 408.4 0 320V192zM160 96c-53 0-96 43-96 96V320c0 53 43 96 96 96s96-43 96-96V192c0-53-43-96-96-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"1\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit One\", \"one\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"31\",\n    \"label\": \"1\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M160 64c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.8 1.6l-96 64C-.5 111.2-4.4 131 5.4 145.8s29.7 18.7 44.4 8.9L96 123.8V416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96 96c17.7 0 32-14.3 32-32s-14.3-32-32-32H160V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M160 64c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.8 1.6l-96 64C-.5 111.2-4.4 131 5.4 145.8s29.7 18.7 44.4 8.9L96 123.8V416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96 96c17.7 0 32-14.3 32-32s-14.3-32-32-32H160V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"2\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Two\", \"two\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"32\",\n    \"label\": \"2\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M142.9 96c-21.5 0-42.2 8.5-57.4 23.8L54.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L40.2 74.5C67.5 47.3 104.4 32 142.9 32C223 32 288 97 288 177.1c0 38.5-15.3 75.4-42.5 102.6L109.3 416H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L200.2 234.5c15.2-15.2 23.8-35.9 23.8-57.4c0-44.8-36.3-81.1-81.1-81.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M142.9 96c-21.5 0-42.2 8.5-57.4 23.8L54.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L40.2 74.5C67.5 47.3 104.4 32 142.9 32C223 32 288 97 288 177.1c0 38.5-15.3 75.4-42.5 102.6L109.3 416H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L200.2 234.5c15.2-15.2 23.8-35.9 23.8-57.4c0-44.8-36.3-81.1-81.1-81.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"3\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Three\", \"three\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"33\",\n    \"label\": \"3\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H272c13.2 0 25 8.1 29.8 20.4s1.5 26.3-8.2 35.2L162.3 208H184c75.1 0 136 60.9 136 136s-60.9 136-136 136H105.4C63 480 24.2 456 5.3 418.1l-1.9-3.8c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l1.9 3.8c8.1 16.3 24.8 26.5 42.9 26.5H184c39.8 0 72-32.2 72-72s-32.2-72-72-72H80c-13.2 0-25-8.1-29.8-20.4s-1.5-26.3 8.2-35.2L189.7 96H32C14.3 96 0 81.7 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H272c13.2 0 25 8.1 29.8 20.4s1.5 26.3-8.2 35.2L162.3 208H184c75.1 0 136 60.9 136 136s-60.9 136-136 136H105.4C63 480 24.2 456 5.3 418.1l-1.9-3.8c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l1.9 3.8c8.1 16.3 24.8 26.5 42.9 26.5H184c39.8 0 72-32.2 72-72s-32.2-72-72-72H80c-13.2 0-25-8.1-29.8-20.4s-1.5-26.3 8.2-35.2L189.7 96H32C14.3 96 0 81.7 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"4\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Four\", \"four\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"34\",\n    \"label\": \"4\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M189 77.6c7.5-16 .7-35.1-15.3-42.6s-35.1-.7-42.6 15.3L3 322.4c-4.7 9.9-3.9 21.5 1.9 30.8S21 368 32 368H256v80c0 17.7 14.3 32 32 32s32-14.3 32-32V368h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V304H82.4L189 77.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M189 77.6c7.5-16 .7-35.1-15.3-42.6s-35.1-.7-42.6 15.3L3 322.4c-4.7 9.9-3.9 21.5 1.9 30.8S21 368 32 368H256v80c0 17.7 14.3 32 32 32s32-14.3 32-32V368h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320V160c0-17.7-14.3-32-32-32s-32 14.3-32 32V304H82.4L189 77.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"5\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Five\", \"five\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"35\",\n    \"label\": \"5\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M32.5 58.3C35.3 43.1 48.5 32 64 32H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H90.7L70.3 208H184c75.1 0 136 60.9 136 136s-60.9 136-136 136H100.5c-39.4 0-75.4-22.3-93-57.5l-4.1-8.2c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l4.1 8.2c6.8 13.6 20.6 22.1 35.8 22.1H184c39.8 0 72-32.2 72-72s-32.2-72-72-72H32c-9.5 0-18.5-4.2-24.6-11.5s-8.6-16.9-6.9-26.2l32-176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M32.5 58.3C35.3 43.1 48.5 32 64 32H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H90.7L70.3 208H184c75.1 0 136 60.9 136 136s-60.9 136-136 136H100.5c-39.4 0-75.4-22.3-93-57.5l-4.1-8.2c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l4.1 8.2c6.8 13.6 20.6 22.1 35.8 22.1H184c39.8 0 72-32.2 72-72s-32.2-72-72-72H32c-9.5 0-18.5-4.2-24.6-11.5s-8.6-16.9-6.9-26.2l32-176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"6\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Six\", \"six\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"36\",\n    \"label\": \"6\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M232.4 84.7c11.4-13.5 9.7-33.7-3.8-45.1s-33.7-9.7-45.1 3.8L38.6 214.7C14.7 242.9 1.1 278.4 .1 315.2c0 1.4-.1 2.9-.1 4.3c0 .2 0 .3 0 .5c0 88.4 71.6 160 160 160s160-71.6 160-160c0-85.5-67.1-155.4-151.5-159.8l63.9-75.6zM256 320A96 96 0 1 1 64 320a96 96 0 1 1 192 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M232.4 84.7c11.4-13.5 9.7-33.7-3.8-45.1s-33.7-9.7-45.1 3.8L38.6 214.7C14.7 242.9 1.1 278.4 .1 315.2c0 1.4-.1 2.9-.1 4.3c0 .2 0 .3 0 .5c0 88.4 71.6 160 160 160s160-71.6 160-160c0-85.5-67.1-155.4-151.5-159.8l63.9-75.6zM256 320A96 96 0 1 1 64 320a96 96 0 1 1 192 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"7\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Seven\", \"seven\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"37\",\n    \"label\": \"7\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H288c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-224 384c-8.9 15.3-28.5 20.4-43.8 11.5s-20.4-28.5-11.5-43.8L232.3 96H32C14.3 96 0 81.7 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H288c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-224 384c-8.9 15.3-28.5 20.4-43.8 11.5s-20.4-28.5-11.5-43.8L232.3 96H32C14.3 96 0 81.7 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"8\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Eight\", \"eight\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"38\",\n    \"label\": \"8\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M304 160c0-70.7-57.3-128-128-128H144C73.3 32 16 89.3 16 160c0 34.6 13.7 66 36 89C20.5 272.3 0 309.8 0 352c0 70.7 57.3 128 128 128h64c70.7 0 128-57.3 128-128c0-42.2-20.5-79.7-52-103c22.3-23 36-54.4 36-89zM176.1 288H192c35.3 0 64 28.7 64 64s-28.7 64-64 64H128c-35.3 0-64-28.7-64-64s28.7-64 64-64h15.9c0 0 .1 0 .1 0h32c0 0 .1 0 .1 0zm0-64c0 0 0 0 0 0H144c0 0 0 0 0 0c-35.3 0-64-28.7-64-64c0-35.3 28.7-64 64-64h32c35.3 0 64 28.7 64 64c0 35.3-28.6 64-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M304 160c0-70.7-57.3-128-128-128H144C73.3 32 16 89.3 16 160c0 34.6 13.7 66 36 89C20.5 272.3 0 309.8 0 352c0 70.7 57.3 128 128 128h64c70.7 0 128-57.3 128-128c0-42.2-20.5-79.7-52-103c22.3-23 36-54.4 36-89zM176.1 288H192c35.3 0 64 28.7 64 64s-28.7 64-64 64H128c-35.3 0-64-28.7-64-64s28.7-64 64-64h15.9c0 0 .1 0 .1 0h32c0 0 .1 0 .1 0zm0-64c0 0 0 0 0 0H144c0 0 0 0 0 0c-35.3 0-64-28.7-64-64c0-35.3 28.7-64 64-64h32c35.3 0 64 28.7 64 64c0 35.3-28.6 64-64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"9\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Digit Nine\", \"nine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"39\",\n    \"label\": \"9\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 192a96 96 0 1 0 192 0A96 96 0 1 0 64 192zm87.5 159.8C67.1 347.4 0 277.5 0 192C0 103.6 71.6 32 160 32s160 71.6 160 160c0 2.6-.1 5.3-.2 7.9c-1.7 35.7-15.2 70-38.4 97.4l-145 171.4c-11.4 13.5-31.6 15.2-45.1 3.8s-15.2-31.6-3.8-45.1l63.9-75.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 192a96 96 0 1 0 192 0A96 96 0 1 0 64 192zm87.5 159.8C67.1 347.4 0 277.5 0 192C0 103.6 71.6 32 160 32s160 71.6 160 160c0 2.6-.1 5.3-.2 7.9c-1.7 35.7-15.2 70-38.4 97.4l-145 171.4c-11.4 13.5-31.6 15.2-45.1 3.8s-15.2-31.6-3.8-45.1l63.9-75.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"42-group\": {\n    \"aliases\": {\n      \"names\": [\"innosoft\"]\n    },\n    \"changes\": [\"5.15.0\", \"6.0.0-beta2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e080\",\n    \"label\": \"42.group\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 96V416C341.011 416 361.818 411.861 381.23 403.821C400.641 395.78 418.28 383.995 433.138 369.138C447.995 354.28 459.78 336.641 467.821 317.23C475.861 297.818 480 277.011 480 256C480 234.989 475.861 214.182 467.821 194.771C459.78 175.359 447.995 157.72 433.138 142.863C418.28 128.005 400.641 116.22 381.23 108.179C361.818 100.139 341.011 96 320 96ZM0 256L160.002 416L320.003 256L160.002 96L0 256ZM480 256C480 277.011 484.138 297.818 492.179 317.23C500.219 336.643 512.005 354.28 526.862 369.138C541.72 383.995 559.357 395.781 578.77 403.821C598.182 411.862 618.989 416 640 416V96C597.565 96 556.869 112.858 526.862 142.863C496.857 172.869 480 213.565 480 256Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 96V416C341.011 416 361.818 411.861 381.23 403.821C400.641 395.78 418.28 383.995 433.138 369.138C447.995 354.28 459.78 336.641 467.821 317.23C475.861 297.818 480 277.011 480 256C480 234.989 475.861 214.182 467.821 194.771C459.78 175.359 447.995 157.72 433.138 142.863C418.28 128.005 400.641 116.22 381.23 108.179C361.818 100.139 341.011 96 320 96ZM0 256L160.002 416L320.003 256L160.002 96L0 256ZM480 256C480 277.011 484.138 297.818 492.179 317.23C500.219 336.643 512.005 354.28 526.862 369.138C541.72 383.995 559.357 395.781 578.77 403.821C598.182 411.862 618.989 416 640 416V96C597.565 96 556.869 112.858 526.862 142.863C496.857 172.869 480 213.565 480 256Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"500px\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f26e\",\n    \"label\": \"500px\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"a\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"61\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter A\", \"Latin Small Letter A\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"41\",\n    \"label\": \"A\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M221.5 51.7C216.6 39.8 204.9 32 192 32s-24.6 7.8-29.5 19.7l-120 288-40 96c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L93.3 384H290.7l31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-40-96-120-288zM264 320H120l72-172.8L264 320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M221.5 51.7C216.6 39.8 204.9 32 192 32s-24.6 7.8-29.5 19.7l-120 288-40 96c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L93.3 384H290.7l31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-40-96-120-288zM264 320H120l72-172.8L264 320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"accessible-icon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f29b\"]\n      }\n    },\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accessibility\",\n        \"handicap\",\n        \"person\",\n        \"wheelchair\",\n        \"wheelchair-alt\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f368\",\n    \"label\": \"Accessible Icon\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"accusoft\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f369\",\n    \"label\": \"Accusoft\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"address-book\": {\n    \"aliases\": {\n      \"names\": [\"contact-book\"],\n      \"unicodes\": {\n        \"composite\": [\"f2ba\"],\n        \"secondary\": [\"10f2b9\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"contact\", \"directory\", \"index\", \"little black book\", \"rolodex\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2b9\",\n    \"label\": \"Address Book\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 0C60.7 0 32 28.7 32 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H96zM208 288h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H144c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80zM496 192c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V336z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 0C60.7 0 32 28.7 32 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H96zM208 288h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H144c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80zM496 192c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V336z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M384 48c8.8 0 16 7.2 16 16V448c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H384zM96 0C60.7 0 32 28.7 32 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H96zM240 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16H336c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80H208zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80zM496 192c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V336z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M384 48c8.8 0 16 7.2 16 16V448c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H384zM96 0C60.7 0 32 28.7 32 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H96zM240 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16H336c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80H208zM512 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80zM496 192c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm16 144c0-8.8-7.2-16-16-16s-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V336z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"address-card\": {\n    \"aliases\": {\n      \"names\": [\"contact-card\", \"vcard\"],\n      \"unicodes\": {\n        \"composite\": [\"f2bc\"],\n        \"secondary\": [\"10f2bb\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"about\",\n        \"contact\",\n        \"id\",\n        \"identification\",\n        \"postcard\",\n        \"profile\",\n        \"registration\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2bb\",\n    \"label\": \"Address Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 256h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-32H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 256h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zm256-32H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M512 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H512zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM208 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16H304c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80H176zM376 144c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M512 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H512zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM208 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16H304c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80H176zM376 144c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"adn\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f170\",\n    \"label\": \"App.net\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"adversal\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f36a\",\n    \"label\": \"Adversal\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"affiliatetheme\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f36b\",\n    \"label\": \"affiliatetheme\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"airbnb\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f834\",\n    \"label\": \"Airbnb\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"algolia\": {\n    \"changes\": [\"5.0.0\", \"6.3.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f36c\",\n    \"label\": \"Algolia\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1675090779,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0C116.1 0 2 112.7 0 252.1C-2 393.6 112.9 510.8 254.5 511.6c43.7 .3 85.9-10.4 123.3-30.7c3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3c-26.1 11.1-54.5 16.8-83.7 16.4C139 461.9 46.5 366.8 48.3 252.4C50.1 139.5 142.6 48.2 256 48.2H463.7V417.2L345.9 312.5c-3.8-3.4-9.7-2.7-12.7 1.3c-18.9 25-49.7 40.6-83.9 38.2c-47.5-3.3-85.9-41.5-89.5-88.9c-4.2-56.6 40.6-103.9 96.3-103.9c50.4 0 91.9 38.8 96.2 88c.4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4c2.2-11.8 3-24.2 2.1-36.8c-4.9-72-63.3-130-135.4-134.4c-82.7-5.1-151.8 59.5-154 140.6c-2.1 78.9 62.6 147 141.6 148.7c33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7V9.7c0-5.4-4.4-9.7-9.7-9.7H256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0C116.1 0 2 112.7 0 252.1C-2 393.6 112.9 510.8 254.5 511.6c43.7 .3 85.9-10.4 123.3-30.7c3.6-2 4.2-7 1.1-9.7l-24-21.2c-4.9-4.3-11.8-5.5-17.8-3c-26.1 11.1-54.5 16.8-83.7 16.4C139 461.9 46.5 366.8 48.3 252.4C50.1 139.5 142.6 48.2 256 48.2H463.7V417.2L345.9 312.5c-3.8-3.4-9.7-2.7-12.7 1.3c-18.9 25-49.7 40.6-83.9 38.2c-47.5-3.3-85.9-41.5-89.5-88.9c-4.2-56.6 40.6-103.9 96.3-103.9c50.4 0 91.9 38.8 96.2 88c.4 4.4 2.4 8.5 5.7 11.4l30.7 27.2c3.5 3.1 9 1.2 9.9-3.4c2.2-11.8 3-24.2 2.1-36.8c-4.9-72-63.3-130-135.4-134.4c-82.7-5.1-151.8 59.5-154 140.6c-2.1 78.9 62.6 147 141.6 148.7c33 .7 63.6-9.6 88.3-27.6L495 509.4c6.6 5.8 17 1.2 17-7.7V9.7c0-5.4-4.4-9.7-9.7-9.7H256z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"align-center\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f037\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"format\", \"middle\", \"paragraph\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f037\",\n    \"label\": \"Align Center\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 64c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 64c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"align-justify\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f039\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"format\", \"paragraph\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f039\",\n    \"label\": \"Align Justify\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"align-left\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f036\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"format\", \"paragraph\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f036\",\n    \"label\": \"Align Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M288 64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32H256c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H256c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M288 64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32H256c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H256c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"align-right\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f038\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"format\", \"paragraph\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f038\",\n    \"label\": \"Align Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 64c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 64c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"alipay\": {\n    \"changes\": [\"5.3.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f642\",\n    \"label\": \"Alipay\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"amazon\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f270\",\n    \"label\": \"Amazon\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"amazon-pay\": {\n    \"changes\": [\"5.0.2\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f42c\",\n    \"label\": \"Amazon Pay\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"amilia\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f36d\",\n    \"label\": \"Amilia\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"anchor\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2693\"],\n        \"secondary\": [\"10f13d\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"anchor\",\n        \"berth\",\n        \"boat\",\n        \"dock\",\n        \"embed\",\n        \"link\",\n        \"maritime\",\n        \"moor\",\n        \"port\",\n        \"secure\",\n        \"ship\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f13d\",\n    \"label\": \"Anchor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c88.4 0 160-71.6 160-160v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-56-56c-9.4-9.4-24.6-9.4-33.9 0l-56 56c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 53-43 96-96 96H320V240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c88.4 0 160-71.6 160-160v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-56-56c-9.4-9.4-24.6-9.4-33.9 0l-56 56c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 53-43 96-96 96H320V240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"anchor-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"marina\", \"not affected\", \"ok\", \"okay\", \"port\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4aa\",\n    \"label\": \"Anchor Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2H320V368 240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2H320V368 240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"anchor-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"marina\", \"port\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ab\",\n    \"label\": \"Anchor Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2H320V368 240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2H320V368 240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"anchor-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"destroy\", \"marina\", \"port\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ac\",\n    \"label\": \"Anchor Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2H320V368 240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8.2 0 16.3-.6 24.2-1.8c-22.2-16.2-40.4-37.5-53-62.2H320V368 240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"anchor-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"closed\", \"lockdown\", \"marina\", \"port\", \"quarantine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ad\",\n    \"label\": \"Anchor Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8 0 15.9-.6 23.6-1.7c-4.8-9-7.6-19.3-7.6-30.3V446.7c-5.2 .9-10.5 1.3-16 1.3H320V240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM528 240c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 96a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm21.1 80C367 158.8 384 129.4 384 96c0-53-43-96-96-96s-96 43-96 96c0 33.4 17 62.8 42.9 80H224c-17.7 0-32 14.3-32 32s14.3 32 32 32h32V448H208c-53 0-96-43-96-96v-6.1l7 7c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L97 263c-9.4-9.4-24.6-9.4-33.9 0L7 319c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l7-7V352c0 88.4 71.6 160 160 160h80 80c8 0 15.9-.6 23.6-1.7c-4.8-9-7.6-19.3-7.6-30.3V446.7c-5.2 .9-10.5 1.3-16 1.3H320V240h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H341.1zM528 240c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"android\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"5.12.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"robot\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f17b\",\n    \"label\": \"Android\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"angellist\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f209\",\n    \"label\": \"AngelList\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"angle-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2304\"],\n        \"secondary\": [\"10f107\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Down Arrowhead\", \"arrow\", \"caret\", \"download\", \"expand\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f107\",\n    \"label\": \"Angle Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M201.4 342.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 274.7 86.6 137.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M201.4 342.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 274.7 86.6 137.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angle-left\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2039\"],\n        \"secondary\": [\"10f104\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Single Left-Pointing Angle Quotation Mark\",\n        \"arrow\",\n        \"back\",\n        \"caret\",\n        \"less\",\n        \"previous\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f104\",\n    \"label\": \"Angle Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angle-right\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"203a\"],\n        \"secondary\": [\"10f105\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Single Right-Pointing Angle Quotation Mark\",\n        \"arrow\",\n        \"care\",\n        \"forward\",\n        \"more\",\n        \"next\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f105\",\n    \"label\": \"Angle Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angle-up\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2303\"],\n        \"secondary\": [\"10f106\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Up Arrowhead\", \"arrow\", \"caret\", \"collapse\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f106\",\n    \"label\": \"Angle Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M201.4 137.4c12.5-12.5 32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L224 205.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angles-down\": {\n    \"aliases\": {\n      \"names\": [\"angle-double-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f103\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrows\", \"caret\", \"download\", \"expand\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f103\",\n    \"label\": \"Angles Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M246.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 402.7 361.4 265.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-160 160zm160-352l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 210.7 361.4 73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M246.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 402.7 361.4 265.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-160 160zm160-352l-160 160c-12.5 12.5-32.8 12.5-45.3 0l-160-160c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L224 210.7 361.4 73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angles-left\": {\n    \"aliases\": {\n      \"names\": [\"angle-double-left\"],\n      \"unicodes\": {\n        \"composite\": [\"ab\"],\n        \"secondary\": [\"10f100\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Left-Pointing Double Angle Quotation Mark\",\n        \"arrows\",\n        \"back\",\n        \"caret\",\n        \"laquo\",\n        \"previous\",\n        \"quote\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f100\",\n    \"label\": \"Angles Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angles-right\": {\n    \"aliases\": {\n      \"names\": [\"angle-double-right\"],\n      \"unicodes\": {\n        \"composite\": [\"bb\"],\n        \"secondary\": [\"10f101\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Right-Pointing Double Angle Quotation Mark\",\n        \"arrows\",\n        \"caret\",\n        \"forward\",\n        \"more\",\n        \"next\",\n        \"quote\",\n        \"raquo\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f101\",\n    \"label\": \"Angles Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M470.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 256 265.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160zm-352 160l160-160c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L210.7 256 73.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angles-up\": {\n    \"aliases\": {\n      \"names\": [\"angle-double-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f102\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrows\", \"caret\", \"collapse\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f102\",\n    \"label\": \"Angles Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"angrycreative\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f36e\",\n    \"label\": \"Angry Creative\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"angular\": {\n    \"changes\": [\"5.0.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f420\",\n    \"label\": \"Angular\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ankh\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2625\"],\n        \"secondary\": [\"10f644\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Ankh\",\n        \"amulet\",\n        \"copper\",\n        \"coptic christianity\",\n        \"copts\",\n        \"crux ansata\",\n        \"egypt\",\n        \"venus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f644\",\n    \"label\": \"Ankh\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M96 128c0-35.3 28.7-64 64-64s64 28.7 64 64c0 41.6-20.7 76.6-46.6 104.1c-5.9 6.2-11.8 11.8-17.4 16.7c-5.6-4.9-11.5-10.5-17.4-16.7C116.7 204.6 96 169.6 96 128zM160 0C89.3 0 32 57.3 32 128c0 52.4 21.5 95.5 46.8 128H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96V480c0 17.7 14.3 32 32 32s32-14.3 32-32V320h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H241.2c25.4-32.5 46.8-75.6 46.8-128C288 57.3 230.7 0 160 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M96 128c0-35.3 28.7-64 64-64s64 28.7 64 64c0 41.6-20.7 76.6-46.6 104.1c-5.9 6.2-11.8 11.8-17.4 16.7c-5.6-4.9-11.5-10.5-17.4-16.7C116.7 204.6 96 169.6 96 128zM160 0C89.3 0 32 57.3 32 128c0 52.4 21.5 95.5 46.8 128H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96V480c0 17.7 14.3 32 32 32s32-14.3 32-32V320h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H241.2c25.4-32.5 46.8-75.6 46.8-128C288 57.3 230.7 0 160 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"app-store\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f36f\",\n    \"label\": \"App Store\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"app-store-ios\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f370\",\n    \"label\": \"iOS App Store\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"apper\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f371\",\n    \"label\": \"Apper Systems AB\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"apple\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"5.0.7\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"fruit\", \"ios\", \"mac\", \"operating system\", \"os\", \"osx\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f179\",\n    \"label\": \"Apple\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"apple-pay\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f415\",\n    \"label\": \"Apple Pay\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"apple-whole\": {\n    \"aliases\": {\n      \"names\": [\"apple-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f34e\", \"1f34f\"],\n        \"secondary\": [\"10f5d1\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"apple\",\n        \"fall\",\n        \"fruit\",\n        \"fuji\",\n        \"green\",\n        \"green apple\",\n        \"macintosh\",\n        \"orchard\",\n        \"red\",\n        \"red apple\",\n        \"seasonal\",\n        \"vegan\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5d1\",\n    \"label\": \"Apple Whole\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 112c-8.8 0-16-7.2-16-16V80c0-44.2 35.8-80 80-80h16c8.8 0 16 7.2 16 16V32c0 44.2-35.8 80-80 80H224zM0 288c0-76.3 35.7-160 112-160c27.3 0 59.7 10.3 82.7 19.3c18.8 7.3 39.9 7.3 58.7 0c22.9-8.9 55.4-19.3 82.7-19.3c76.3 0 112 83.7 112 160c0 128-80 224-160 224c-16.5 0-38.1-6.6-51.5-11.3c-8.1-2.8-16.9-2.8-25 0c-13.4 4.7-35 11.3-51.5 11.3C80 512 0 416 0 288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 112c-8.8 0-16-7.2-16-16V80c0-44.2 35.8-80 80-80h16c8.8 0 16 7.2 16 16V32c0 44.2-35.8 80-80 80H224zM0 288c0-76.3 35.7-160 112-160c27.3 0 59.7 10.3 82.7 19.3c18.8 7.3 39.9 7.3 58.7 0c22.9-8.9 55.4-19.3 82.7-19.3c76.3 0 112 83.7 112 160c0 128-80 224-160 224c-16.5 0-38.1-6.6-51.5-11.3c-8.1-2.8-16.9-2.8-25 0c-13.4 4.7-35 11.3-51.5 11.3C80 512 0 416 0 288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"archway\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f557\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arc\", \"monument\", \"road\", \"street\", \"tunnel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f557\",\n    \"label\": \"Archway\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H96h64V352c0-53 43-96 96-96s96 43 96 96V480h64 64c17.7 0 32-14.3 32-32s-14.3-32-32-32V128H32V416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H96h64V352c0-53 43-96 96-96s96 43 96 96V480h64 64c17.7 0 32-14.3 32-32s-14.3-32-32-32V128H32V416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2193\"],\n        \"secondary\": [\"10f063\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Downwards Arrow\", \"download\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f063\",\n    \"label\": \"Arrow Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-1-9\": {\n    \"aliases\": {\n      \"names\": [\"sort-numeric-asc\", \"sort-numeric-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f162\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"numbers\", \"order\", \"sort-numeric-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f162\",\n    \"label\": \"Arrow Down 1 9\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M450.7 38c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2V160H384c-17.7 0-32 14.3-32 32s14.3 32 32 32h48 48c17.7 0 32-14.3 32-32s-14.3-32-32-32H464V64c0-10.3-4.9-19.9-13.3-26zM160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V365.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM418.3 307a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 307zM405.1 419.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M450.7 38c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2V160H384c-17.7 0-32 14.3-32 32s14.3 32 32 32h48 48c17.7 0 32-14.3 32-32s-14.3-32-32-32H464V64c0-10.3-4.9-19.9-13.3-26zM160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V365.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM418.3 307a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 307zM405.1 419.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-9-1\": {\n    \"aliases\": {\n      \"names\": [\"sort-numeric-desc\", \"sort-numeric-down-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f886\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"numbers\", \"order\", \"sort-numeric-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f886\",\n    \"label\": \"Arrow Down 9 1\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V365.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM450.7 294c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2V416H384c-17.7 0-32 14.3-32 32s14.3 32 32 32h48 48c17.7 0 32-14.3 32-32s-14.3-32-32-32H464V320c0-10.3-4.9-19.9-13.3-26zM418.3 91a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 91zM405.1 203.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M160 480c9 0 17.5-3.8 23.6-10.4l88-96c11.9-13 11.1-33.3-2-45.2s-33.3-11.1-45.2 2L192 365.7V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V365.7L95.6 330.4c-11.9-13-32.2-13.9-45.2-2s-13.9 32.2-2 45.2l88 96C142.5 476.2 151 480 160 480zM450.7 294c-8.3-6-19.1-7.7-28.8-4.4l-48 16c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l5.9-2V416H384c-17.7 0-32 14.3-32 32s14.3 32 32 32h48 48c17.7 0 32-14.3 32-32s-14.3-32-32-32H464V320c0-10.3-4.9-19.9-13.3-26zM418.3 91a32 32 0 1 1 27.4 57.9A32 32 0 1 1 418.3 91zM405.1 203.8l-6.8 9.2c-10.5 14.2-7.5 34.2 6.7 44.8s34.2 7.5 44.8-6.7l48.8-65.8c14-18.9 21.5-41.7 21.5-65.2c0-48.6-39.4-88-88-88s-88 39.4-88 88c0 39.2 25.6 72.4 61.1 83.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-a-z\": {\n    \"aliases\": {\n      \"names\": [\"sort-alpha-asc\", \"sort-alpha-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f15d\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alphabetical\", \"arrange\", \"filter\", \"order\", \"sort-alpha-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f15d\",\n    \"label\": \"Arrow Down A Z\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 320c0-17.7 14.3-32 32-32H480c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 416H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H352c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 352H352c-17.7 0-32-14.3-32-32zM416 32c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 224H371.8l-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128C392.8 38.8 403.9 32 416 32zM395.8 176h40.4L416 135.6 395.8 176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 320c0-17.7 14.3-32 32-32H480c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 416H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H352c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 352H352c-17.7 0-32-14.3-32-32zM416 32c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 224H371.8l-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128C392.8 38.8 403.9 32 416 32zM395.8 176h40.4L416 135.6 395.8 176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f175\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"download\", \"long-arrow-down\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f175\",\n    \"label\": \"Arrow Down Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7L86.6 329.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M169.4 502.6c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 402.7 224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 370.7L86.6 329.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-short-wide\": {\n    \"aliases\": {\n      \"names\": [\"sort-amount-desc\", \"sort-amount-down-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f884\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"order\", \"sort-amount-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f884\",\n    \"label\": \"Arrow Down Short Wide\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 128H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H320c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-up-across-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"border\", \"crossing\", \"transfer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4af\",\n    \"label\": \"Arrow Down Up Across Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M137.4 502.6c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7V288H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H448V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 109.3V224H192 128 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96V402.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96zM128 192h64V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V192zM448 320H384V448c0 17.7 14.3 32 32 32s32-14.3 32-32V320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M137.4 502.6c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7V288H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H448V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L384 109.3V224H192 128 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96V402.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96zM128 192h64V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V192zM448 320H384V448c0 17.7 14.3 32 32 32s32-14.3 32-32V320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-up-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"border\",\n        \"closed\",\n        \"crossing\",\n        \"lockdown\",\n        \"quarantine\",\n        \"transfer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b0\",\n    \"label\": \"Arrow Down Up Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M150.6 502.6l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7V288H416V272c0-17.2 3.9-33.5 10.8-48H352V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-6-6-14.1-9.4-22.6-9.4s-16.6 3.4-22.6 9.4l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 109.3V224l-128 0H96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32H96V402.7L54.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0zM160 192V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V192h64zM288 320V448c0 17.7 14.3 32 32 32s32-14.3 32-32V320H288zm240-80c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M150.6 502.6l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7V288H416V272c0-17.2 3.9-33.5 10.8-48H352V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-6-6-14.1-9.4-22.6-9.4s-16.6 3.4-22.6 9.4l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 109.3V224l-128 0H96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32H96V402.7L54.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0zM160 192V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V192h64zM288 320V448c0 17.7 14.3 32 32 32s32-14.3 32-32V320H288zm240-80c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-wide-short\": {\n    \"aliases\": {\n      \"names\": [\"sort-amount-asc\", \"sort-amount-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f160\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"number\", \"order\", \"sort-amount-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f160\",\n    \"label\": \"Arrow Down Wide Short\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H320zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H320zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M151.6 469.6C145.5 476.2 137 480 128 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L96 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 480c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H320zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H320zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320zm0-128c-17.7 0-32-14.3-32-32s14.3-32 32-32H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-down-z-a\": {\n    \"aliases\": {\n      \"names\": [\"sort-alpha-desc\", \"sort-alpha-down-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f881\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alphabetical\", \"arrange\", \"filter\", \"order\", \"sort-alpha-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f881\",\n    \"label\": \"Arrow Down Z A\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 64c0-17.7 14.3-32 32-32H480c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H352c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 96H352c-17.7 0-32-14.3-32-32zm96 192c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 448H371.8l-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128c5.4-10.8 16.5-17.7 28.6-17.7zM395.8 400h40.4L416 359.6 395.8 400z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M183.6 469.6C177.5 476.2 169 480 160 480s-17.5-3.8-23.6-10.4l-88-96c-11.9-13-11.1-33.3 2-45.2s33.3-11.1 45.2 2L128 365.7V64c0-17.7 14.3-32 32-32s32 14.3 32 32V365.7l32.4-35.4c11.9-13 32.2-13.9 45.2-2s13.9 32.2 2 45.2l-88 96zM320 64c0-17.7 14.3-32 32-32H480c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9L429.3 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H352c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9L402.7 96H352c-17.7 0-32-14.3-32-32zm96 192c12.1 0 23.2 6.8 28.6 17.7l64 128 16 32c7.9 15.8 1.5 35-14.3 42.9s-35 1.5-42.9-14.3L460.2 448H371.8l-7.2 14.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l16-32 64-128c5.4-10.8 16.5-17.7 28.6-17.7zM395.8 400h40.4L416 359.6 395.8 400z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-left\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2190\"],\n        \"secondary\": [\"10f060\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Leftwards Arrow\", \"back\", \"previous\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f060\",\n    \"label\": \"Arrow Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-left-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-left\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f177\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"back\", \"long-arrow-left\", \"previous\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f177\",\n    \"label\": \"Arrow Left Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288 480 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-370.7 0 73.4-73.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-128 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-pointer\": {\n    \"aliases\": {\n      \"names\": [\"mouse-pointer\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f245\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"cursor\", \"select\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f245\",\n    \"label\": \"Arrow Pointer\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-right\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2192\"],\n        \"secondary\": [\"10f061\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Rightwards Arrow\", \"forward\", \"next\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f061\",\n    \"label\": \"Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-right-arrow-left\": {\n    \"aliases\": {\n      \"names\": [\"exchange\"],\n      \"unicodes\": {\n        \"composite\": [\"21c4\"],\n        \"secondary\": [\"10f0ec\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Rightwards Arrow Over Leftwards Arrow\",\n        \"arrow\",\n        \"arrows\",\n        \"reciprocate\",\n        \"return\",\n        \"swap\",\n        \"transfer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ec\",\n    \"label\": \"Arrow Right Arrow Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M438.6 150.6c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 96 32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l306.7 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96zm-333.3 352c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 416 416 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M438.6 150.6c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.7 96 32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l306.7 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l96-96zm-333.3 352c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 416 416 416c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-right-from-bracket\": {\n    \"aliases\": {\n      \"names\": [\"sign-out\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f08b\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"exit\", \"leave\", \"log out\", \"logout\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f08b\",\n    \"label\": \"Arrow Right From Bracket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 192 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128zM160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 192 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128zM160 96c17.7 0 32-14.3 32-32s-14.3-32-32-32L96 32C43 32 0 75 0 128L0 384c0 53 43 96 96 96l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32l0-256c0-17.7 14.3-32 32-32l64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-right-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f178\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"long-arrow-right\", \"next\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f178\",\n    \"label\": \"Arrow Right Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M502.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l370.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-right-to-bracket\": {\n    \"aliases\": {\n      \"names\": [\"sign-in\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f090\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"enter\",\n        \"join\",\n        \"log in\",\n        \"login\",\n        \"sign in\",\n        \"sign up\",\n        \"sign-in\",\n        \"signin\",\n        \"signup\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f090\",\n    \"label\": \"Arrow Right To Bracket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M352 96l64 0c17.7 0 32 14.3 32 32l0 256c0 17.7-14.3 32-32 32l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c53 0 96-43 96-96l0-256c0-53-43-96-96-96l-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32zm-9.4 182.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L242.7 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l210.7 0-73.4 73.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-right-to-city\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"exodus\", \"rural\", \"urban\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b3\",\n    \"label\": \"Arrow Right To City\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M288 48c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48V192h40V120c0-13.3 10.7-24 24-24s24 10.7 24 24v72h24c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H432 336c-26.5 0-48-21.5-48-48V48zm64 32v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H368zM352 272v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H528zM512 368v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H528c-8.8 0-16 7.2-16 16zM166.6 153.4l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L146.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H146.7l-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M288 48c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48V192h40V120c0-13.3 10.7-24 24-24s24 10.7 24 24v72h24c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H432 336c-26.5 0-48-21.5-48-48V48zm64 32v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H368zM352 272v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H528zM512 368v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H528c-8.8 0-16 7.2-16 16zM166.6 153.4l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L146.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H146.7l-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-rotate-left\": {\n    \"aliases\": {\n      \"names\": [\n        \"arrow-left-rotate\",\n        \"arrow-rotate-back\",\n        \"arrow-rotate-backward\",\n        \"undo\"\n      ],\n      \"unicodes\": {\n        \"composite\": [\"21ba\"],\n        \"secondary\": [\"10f0e2\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Anticlockwise Open Circle Arrow\",\n        \"back\",\n        \"control z\",\n        \"exchange\",\n        \"oops\",\n        \"return\",\n        \"rotate\",\n        \"swap\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0e2\",\n    \"label\": \"Arrow Rotate Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-rotate-right\": {\n    \"aliases\": {\n      \"names\": [\"arrow-right-rotate\", \"arrow-rotate-forward\", \"redo\"],\n      \"unicodes\": {\n        \"composite\": [\"21bb\"],\n        \"secondary\": [\"10f01e\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.8.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Clockwise Open Circle Arrow\",\n        \"forward\",\n        \"refresh\",\n        \"reload\",\n        \"repeat\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f01e\",\n    \"label\": \"Arrow Rotate Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H464c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H464c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-trend-down\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"line\", \"stocks\", \"trend\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e097\",\n    \"label\": \"Arrow Trend Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384 352c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v82.7L342.6 137.4c-12.5-12.5-32.8-12.5-45.3 0L192 242.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0L320 205.3 466.7 352H384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384 352c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v82.7L342.6 137.4c-12.5-12.5-32.8-12.5-45.3 0L192 242.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0L320 205.3 466.7 352H384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-trend-up\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"line\", \"stocks\", \"trend\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e098\",\n    \"label\": \"Arrow Trend Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384 160c-17.7 0-32-14.3-32-32s14.3-32 32-32H544c17.7 0 32 14.3 32 32V288c0 17.7-14.3 32-32 32s-32-14.3-32-32V205.3L342.6 374.6c-12.5 12.5-32.8 12.5-45.3 0L192 269.3 54.6 406.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160c12.5-12.5 32.8-12.5 45.3 0L320 306.7 466.7 160H384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384 160c-17.7 0-32-14.3-32-32s14.3-32 32-32H544c17.7 0 32 14.3 32 32V288c0 17.7-14.3 32-32 32s-32-14.3-32-32V205.3L342.6 374.6c-12.5 12.5-32.8 12.5-45.3 0L192 269.3 54.6 406.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l160-160c12.5-12.5 32.8-12.5 45.3 0L320 306.7 466.7 160H384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-turn-down\": {\n    \"aliases\": {\n      \"names\": [\"level-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f149\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f149\",\n    \"label\": \"Arrow Turn Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 64C14.3 64 0 49.7 0 32S14.3 0 32 0l96 0c53 0 96 43 96 96l0 306.7 73.4-73.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-128 128c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 402.7 160 96c0-17.7-14.3-32-32-32L32 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-turn-up\": {\n    \"aliases\": {\n      \"names\": [\"level-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f148\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f148\",\n    \"label\": \"Arrow Turn Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96-43 96-96l0-306.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 416c0 17.7-14.3 32-32 32l-96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c53 0 96-43 96-96l0-306.7 73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3 160 416c0 17.7-14.3 32-32 32l-96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2191\"],\n        \"secondary\": [\"10f062\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Upwards Arrow\", \"forward\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f062\",\n    \"label\": \"Arrow Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-1-9\": {\n    \"aliases\": {\n      \"names\": [\"sort-numeric-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f163\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"numbers\", \"order\", \"sort-numeric-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f163\",\n    \"label\": \"Arrow Up 1 9\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M450.7 38c8.3 6 13.3 15.7 13.3 26v96h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H432 384c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V108.4l-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zM160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V146.3L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM445.7 364.9A32 32 0 1 0 418.3 307a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 408.4 344 375.2 344 336c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 467c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M450.7 38c8.3 6 13.3 15.7 13.3 26v96h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H432 384c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V108.4l-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zM160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V146.3L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM445.7 364.9A32 32 0 1 0 418.3 307a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 408.4 344 375.2 344 336c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 467c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-9-1\": {\n    \"aliases\": {\n      \"names\": [\"sort-numeric-up-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f887\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"numbers\", \"order\", \"sort-numeric-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f887\",\n    \"label\": \"Arrow Up 9 1\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V146.3L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM450.7 294c8.3 6 13.3 15.7 13.3 26v96h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H432 384c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V364.4l-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zm-5-145.1A32 32 0 1 0 418.3 91a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 192.4 344 159.2 344 120c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 251c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M160 32c9 0 17.5 3.8 23.6 10.4l88 96c11.9 13 11.1 33.3-2 45.2s-33.3 11.1-45.2-2L192 146.3V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V146.3L95.6 181.6c-11.9 13-32.2 13.9-45.2 2s-13.9-32.2-2-45.2l88-96C142.5 35.8 151 32 160 32zM450.7 294c8.3 6 13.3 15.7 13.3 26v96h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H432 384c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V364.4l-5.9 2c-16.8 5.6-34.9-3.5-40.5-20.2s3.5-34.9 20.2-40.5l48-16c9.8-3.3 20.5-1.6 28.8 4.4zm-5-145.1A32 32 0 1 0 418.3 91a32 32 0 1 0 27.4 57.9zm-40.7 54.9C369.6 192.4 344 159.2 344 120c0-48.6 39.4-88 88-88s88 39.4 88 88c0 23.5-7.5 46.3-21.5 65.2L449.7 251c-10.5 14.2-30.6 17.2-44.8 6.7s-17.2-30.6-6.7-44.8l6.8-9.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-a-z\": {\n    \"aliases\": {\n      \"names\": [\"sort-alpha-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f15e\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alphabetical\", \"arrange\", \"filter\", \"order\", \"sort-alpha-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f15e\",\n    \"label\": \"Arrow Up A Z\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 320c0 17.7 14.3 32 32 32h50.7l-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H429.3l73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H352c-17.7 0-32 14.3-32 32zM416 32c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3h88.4l7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 38.8 428.1 32 416 32zM395.8 176L416 135.6 436.2 176H395.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 320c0 17.7 14.3 32 32 32h50.7l-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H429.3l73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H352c-17.7 0-32 14.3-32 32zM416 32c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3h88.4l7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 38.8 428.1 32 416 32zM395.8 176L416 135.6 436.2 176H395.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-from-bracket\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"share\", \"transfer\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e09a\",\n    \"label\": \"Arrow Up From Bracket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M246.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3V320c0 17.7 14.3 32 32 32s32-14.3 32-32V109.3l73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 53 43 96 96 96H352c53 0 96-43 96-96V352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M246.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 109.3V320c0 17.7 14.3 32 32 32s32-14.3 32-32V109.3l73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 53 43 96 96 96H352c53 0 96-43 96-96V352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-from-ground-water\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"groundwater\", \"spring\", \"water supply\", \"water table\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b5\",\n    \"label\": \"Arrow Up From Ground Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 352c17.7 0 32-14.3 32-32V109.3l25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3V320c0 17.7 14.3 32 32 32zm-18.5 69.9C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM192 192H48c-26.5 0-48 21.5-48 48V425c5.3-3.1 11.2-5.4 17.5-6.9c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.1 20.3V192zm384 48c0-26.5-21.5-48-48-48H384V416.5h0c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c6.3 1.5 12.1 3.8 17.5 6.9V240z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 352c17.7 0 32-14.3 32-32V109.3l25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3V320c0 17.7 14.3 32 32 32zm-18.5 69.9C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM192 192H48c-26.5 0-48 21.5-48 48V425c5.3-3.1 11.2-5.4 17.5-6.9c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.1 20.3V192zm384 48c0-26.5-21.5-48-48-48H384V416.5h0c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c6.3 1.5 12.1 3.8 17.5 6.9V240z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-from-water-pump\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"flood\", \"groundwater\", \"pump\", \"submersible\", \"sump pump\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b6\",\n    \"label\": \"Arrow Up From Water Pump\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 0C85.5 0 64 21.5 64 48V256H48c-26.5 0-48 21.5-48 48v96c0 8 2 15.6 5.4 22.2c3.8-1.7 7.8-3.1 12-4.1c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c4.2 1 8.2 2.4 12 4.1C574 415.6 576 408 576 400V304c0-26.5-21.5-48-48-48H480l0-146.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 109.3 416 256H288V48c0-26.5-21.5-48-48-48H112zM306.5 421.9c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 0C85.5 0 64 21.5 64 48V256H48c-26.5 0-48 21.5-48 48v96c0 8 2 15.6 5.4 22.2c3.8-1.7 7.8-3.1 12-4.1c13.1-3.1 26.7-9.8 37.3-18.6c22.2-18.7 54.3-20.1 78.1-3.4c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c4.2 1 8.2 2.4 12 4.1C574 415.6 576 408 576 400V304c0-26.5-21.5-48-48-48H480l0-146.7 25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 109.3 416 256H288V48c0-26.5-21.5-48-48-48H112zM306.5 421.9c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448c-27.5 0-55-10.6-77.5-26.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f176\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"long-arrow-up\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f176\",\n    \"label\": \"Arrow Up Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V109.3l73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M214.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 109.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V109.3l73.4 73.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-right-dots\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"growth\", \"increase\", \"population\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b7\",\n    \"label\": \"Arrow Up Right Dots\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h50.7L9.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3V160c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H160zM576 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM448 208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm128 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM144 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM576 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-48-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h50.7L9.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L256 109.3V160c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H160zM576 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM448 208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm128 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM272 384a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM144 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM576 336a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-48-80a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-right-from-square\": {\n    \"aliases\": {\n      \"names\": [\"external-link\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f08e\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"new\", \"open\", \"send\", \"share\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f08e\",\n    \"label\": \"Arrow Up Right From Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-short-wide\": {\n    \"aliases\": {\n      \"names\": [\"sort-amount-up-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f885\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"order\", \"sort-amount-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f885\",\n    \"label\": \"Arrow Up Short Wide\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H320zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H320zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320zm0 128c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-wide-short\": {\n    \"aliases\": {\n      \"names\": [\"sort-amount-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f161\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"filter\", \"order\", \"sort-amount-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f161\",\n    \"label\": \"Arrow Up Wide Short\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M151.6 42.4C145.5 35.8 137 32 128 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L96 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 480h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32zm0-128H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrow-up-z-a\": {\n    \"aliases\": {\n      \"names\": [\"sort-alpha-up-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f882\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alphabetical\", \"arrange\", \"filter\", \"order\", \"sort-alpha-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f882\",\n    \"label\": \"Arrow Up Z A\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 64c0 17.7 14.3 32 32 32h50.7l-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H429.3l73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H352c-17.7 0-32 14.3-32 32zm96 192c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3h88.4l7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 262.8 428.1 256 416 256zM395.8 400L416 359.6 436.2 400H395.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M183.6 42.4C177.5 35.8 169 32 160 32s-17.5 3.8-23.6 10.4l-88 96c-11.9 13-11.1 33.3 2 45.2s33.3 11.1 45.2-2L128 146.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V146.3l32.4 35.4c11.9 13 32.2 13.9 45.2 2s13.9-32.2 2-45.2l-88-96zM320 64c0 17.7 14.3 32 32 32h50.7l-73.4 73.4c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H429.3l73.4-73.4c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H352c-17.7 0-32 14.3-32 32zm96 192c-12.1 0-23.2 6.8-28.6 17.7l-64 128-16 32c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l7.2-14.3h88.4l7.2 14.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9l-16-32-64-128C439.2 262.8 428.1 256 416 256zM395.8 400L416 359.6 436.2 400H395.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-down-to-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"scale down\", \"sink\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b8\",\n    \"label\": \"Arrows Down To Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M544 416L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zm22.6-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L480 274.7 480 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96zm-320-45.3c-12.5-12.5-32.8-12.5-45.3 0L160 274.7 160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7L54.6 233.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M544 416L32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32zm22.6-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L480 274.7 480 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96zm-320-45.3c-12.5-12.5-32.8-12.5-45.3 0L160 274.7 160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 210.7L54.6 233.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-down-to-people\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"focus\", \"targeted\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4b9\",\n    \"label\": \"Arrows Down To People\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144 0c-13.3 0-24 10.7-24 24V142.1L97 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23V24c0-13.3-10.7-24-24-24zM360 200a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM184 296a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm312 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 345.5V400c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V345.5l26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 441.5V480c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3H486.2c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3H310.2c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6H134.2c-32.4 0-62.1 17.8-77.5 46.3L18.9 468.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 441.5V480c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V441.5zM415 153l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V142.1l-23-23c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144 0c-13.3 0-24 10.7-24 24V142.1L97 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23V24c0-13.3-10.7-24-24-24zM360 200a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM184 296a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm312 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 345.5V400c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V345.5l26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 441.5V480c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V441.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3H486.2c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3H310.2c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6H134.2c-32.4 0-62.1 17.8-77.5 46.3L18.9 468.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 441.5V480c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V441.5zM415 153l64 64c9.4 9.4 24.6 9.4 33.9 0l64-64c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-23 23V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V142.1l-23-23c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-left-right\": {\n    \"aliases\": {\n      \"names\": [\"arrows-h\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f07e\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"expand\", \"horizontal\", \"landscape\", \"resize\", \"wide\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f07e\",\n    \"label\": \"Arrows Left Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M406.6 374.6l96-96c12.5-12.5 12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L402.7 224l-293.5 0 41.4-41.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 288l293.5 0-41.4 41.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-left-right-to-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"analysis\", \"expand\", \"gap\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ba\",\n    \"label\": \"Arrows Left Right To Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 64c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64zm214.6 73.4c12.5 12.5 12.5 32.8 0 45.3L205.3 224l229.5 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 288l-229.5 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0zM640 96V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V96c0-17.7 14.3-32 32-32s32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 64c17.7 0 32 14.3 32 32l0 320c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64zm214.6 73.4c12.5 12.5 12.5 32.8 0 45.3L205.3 224l229.5 0-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 288l-229.5 0 41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0zM640 96V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V96c0-17.7 14.3-32 32-32s32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-rotate\": {\n    \"aliases\": {\n      \"names\": [\"refresh\", \"sync\"],\n      \"unicodes\": {\n        \"composite\": [\"1f5d8\"],\n        \"secondary\": [\"10f021\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.8.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Clockwise Right and Left Semicircle Arrows\",\n        \"exchange\",\n        \"refresh\",\n        \"reload\",\n        \"rotate\",\n        \"swap\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f021\",\n    \"label\": \"Arrows Rotate\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V448c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H176c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V448c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H176c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-spin\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cycle\", \"rotate\", \"spin\", \"whirl\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4bb\",\n    \"label\": \"Arrows Spin\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 96c38.4 0 73.7 13.5 101.3 36.1l-32.6 32.6c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9H448c8.8 0 16-7.2 16-16V64c0-6.5-3.9-12.3-9.9-14.8s-12.9-1.1-17.4 3.5l-34 34C363.4 52.6 312.1 32 256 32c-10.9 0-21.5 .8-32 2.3V99.2c10.3-2.1 21-3.2 32-3.2zM132.1 154.7l32.6 32.6c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8V64c0-8.8-7.2-16-16-16H64c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l34 34C52.6 148.6 32 199.9 32 256c0 10.9 .8 21.5 2.3 32H99.2c-2.1-10.3-3.2-21-3.2-32c0-38.4 13.5-73.7 36.1-101.3zM477.7 224H412.8c2.1 10.3 3.2 21 3.2 32c0 38.4-13.5 73.7-36.1 101.3l-32.6-32.6c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8V448c0 8.8 7.2 16 16 16H448c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-34-34C459.4 363.4 480 312.1 480 256c0-10.9-.8-21.5-2.3-32zM256 416c-38.4 0-73.7-13.5-101.3-36.1l32.6-32.6c4.6-4.6 5.9-11.5 3.5-17.4s-8.3-9.9-14.8-9.9H64c-8.8 0-16 7.2-16 16l0 112c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l34-34C148.6 459.4 199.9 480 256 480c10.9 0 21.5-.8 32-2.3V412.8c-10.3 2.1-21 3.2-32 3.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 96c38.4 0 73.7 13.5 101.3 36.1l-32.6 32.6c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9H448c8.8 0 16-7.2 16-16V64c0-6.5-3.9-12.3-9.9-14.8s-12.9-1.1-17.4 3.5l-34 34C363.4 52.6 312.1 32 256 32c-10.9 0-21.5 .8-32 2.3V99.2c10.3-2.1 21-3.2 32-3.2zM132.1 154.7l32.6 32.6c4.6 4.6 11.5 5.9 17.4 3.5s9.9-8.3 9.9-14.8V64c0-8.8-7.2-16-16-16H64c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l34 34C52.6 148.6 32 199.9 32 256c0 10.9 .8 21.5 2.3 32H99.2c-2.1-10.3-3.2-21-3.2-32c0-38.4 13.5-73.7 36.1-101.3zM477.7 224H412.8c2.1 10.3 3.2 21 3.2 32c0 38.4-13.5 73.7-36.1 101.3l-32.6-32.6c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8V448c0 8.8 7.2 16 16 16H448c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-34-34C459.4 363.4 480 312.1 480 256c0-10.9-.8-21.5-2.3-32zM256 416c-38.4 0-73.7-13.5-101.3-36.1l32.6-32.6c4.6-4.6 5.9-11.5 3.5-17.4s-8.3-9.9-14.8-9.9H64c-8.8 0-16 7.2-16 16l0 112c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l34-34C148.6 459.4 199.9 480 256 480c10.9 0 21.5-.8 32-2.3V412.8c-10.3 2.1-21 3.2-32 3.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-split-up-and-left\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agile\", \"split\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4bc\",\n    \"label\": \"Arrows Split Up And Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M246.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L352 109.3V384c0 35.3 28.7 64 64 64h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c-70.7 0-128-57.3-128-128c0-35.3-28.7-64-64-64H109.3l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 256H224c23.3 0 45.2 6.2 64 17.1V109.3l-41.4 41.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M246.6 150.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L352 109.3V384c0 35.3 28.7 64 64 64h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c-70.7 0-128-57.3-128-128c0-35.3-28.7-64-64-64H109.3l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-96-96c-12.5-12.5-12.5-32.8 0-45.3l96-96c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L109.3 256H224c23.3 0 45.2 6.2 64 17.1V109.3l-41.4 41.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-to-circle\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"center\",\n        \"concentrate\",\n        \"coordinate\",\n        \"coordination\",\n        \"focal point\",\n        \"focus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4bd\",\n    \"label\": \"Arrows To Circle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M9.4 9.4C21.9-3.1 42.1-3.1 54.6 9.4L160 114.7V96c0-17.7 14.3-32 32-32s32 14.3 32 32v96c0 4.3-.9 8.5-2.4 12.2c-1.6 3.7-3.8 7.3-6.9 10.3l-.1 .1c-3.1 3-6.6 5.3-10.3 6.9c-3.8 1.6-7.9 2.4-12.2 2.4H96c-17.7 0-32-14.3-32-32s14.3-32 32-32h18.7L9.4 54.6C-3.1 42.1-3.1 21.9 9.4 9.4zM256 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM114.7 352H96c-17.7 0-32-14.3-32-32s14.3-32 32-32h96 0l.1 0c8.8 0 16.7 3.6 22.5 9.3l.1 .1c3 3.1 5.3 6.6 6.9 10.3c1.6 3.8 2.4 7.9 2.4 12.2v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V397.3L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L114.7 352zM416 96c0-17.7 14.3-32 32-32s32 14.3 32 32v18.7L585.4 9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 160H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H448c-8.8 0-16.8-3.6-22.6-9.3l-.1-.1c-3-3.1-5.3-6.6-6.9-10.3s-2.4-7.8-2.4-12.2l0-.1v0V96zM525.3 352L630.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 397.3V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V320v0c0 0 0-.1 0-.1c0-4.3 .9-8.4 2.4-12.2c1.6-3.8 3.9-7.3 6.9-10.4c5.8-5.8 13.7-9.3 22.5-9.4c0 0 .1 0 .1 0h0 96c17.7 0 32 14.3 32 32s-14.3 32-32 32H525.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M9.4 9.4C21.9-3.1 42.1-3.1 54.6 9.4L160 114.7V96c0-17.7 14.3-32 32-32s32 14.3 32 32v96c0 4.3-.9 8.5-2.4 12.2c-1.6 3.7-3.8 7.3-6.9 10.3l-.1 .1c-3.1 3-6.6 5.3-10.3 6.9c-3.8 1.6-7.9 2.4-12.2 2.4H96c-17.7 0-32-14.3-32-32s14.3-32 32-32h18.7L9.4 54.6C-3.1 42.1-3.1 21.9 9.4 9.4zM256 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM114.7 352H96c-17.7 0-32-14.3-32-32s14.3-32 32-32h96 0l.1 0c8.8 0 16.7 3.6 22.5 9.3l.1 .1c3 3.1 5.3 6.6 6.9 10.3c1.6 3.8 2.4 7.9 2.4 12.2v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V397.3L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L114.7 352zM416 96c0-17.7 14.3-32 32-32s32 14.3 32 32v18.7L585.4 9.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 160H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H448c-8.8 0-16.8-3.6-22.6-9.3l-.1-.1c-3-3.1-5.3-6.6-6.9-10.3s-2.4-7.8-2.4-12.2l0-.1v0V96zM525.3 352L630.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 397.3V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V320v0c0 0 0-.1 0-.1c0-4.3 .9-8.4 2.4-12.2c1.6-3.8 3.9-7.3 6.9-10.4c5.8-5.8 13.7-9.3 22.5-9.4c0 0 .1 0 .1 0h0 96c17.7 0 32 14.3 32 32s-14.3 32-32 32H525.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-to-dot\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"assembly point\", \"center\", \"condense\", \"focus\", \"minimize\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4be\",\n    \"label\": \"Arrows To Dot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c17.7 0 32 14.3 32 32V64h32c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8h32V32c0-17.7 14.3-32 32-32zM169.4 393.4l64-64c12.5-12.5 32.8-12.5 45.3 0l64 64c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H288v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H192c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9zM32 224H64V192c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c12.5 12.5 12.5 32.8 0 45.3l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3l64-64c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6v32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H448v32c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-64-64zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c17.7 0 32 14.3 32 32V64h32c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-64 64c-12.5 12.5-32.8 12.5-45.3 0l-64-64c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8h32V32c0-17.7 14.3-32 32-32zM169.4 393.4l64-64c12.5-12.5 32.8-12.5 45.3 0l64 64c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H288v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H192c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9zM32 224H64V192c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c12.5 12.5 12.5 32.8 0 45.3l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3l64-64c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6v32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H448v32c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-64-64zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-to-eye\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"center\", \"coordinated assessment\", \"focus\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4bf\",\n    \"label\": \"Arrows To Eye\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M15 15C24.4 5.7 39.6 5.7 49 15l63 63V40c0-13.3 10.7-24 24-24s24 10.7 24 24v96c0 13.3-10.7 24-24 24H40c-13.3 0-24-10.7-24-24s10.7-24 24-24H78.1L15 49C5.7 39.6 5.7 24.4 15 15zM133.5 243.9C158.6 193.6 222.7 112 320 112s161.4 81.6 186.5 131.9c3.8 7.6 3.8 16.5 0 24.2C481.4 318.4 417.3 400 320 400s-161.4-81.6-186.5-131.9c-3.8-7.6-3.8-16.5 0-24.2zM320 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM591 15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-63 63H600c13.3 0 24 10.7 24 24s-10.7 24-24 24H504c-13.3 0-24-10.7-24-24V40c0-13.3 10.7-24 24-24s24 10.7 24 24V78.1l63-63zM15 497c-9.4-9.4-9.4-24.6 0-33.9l63-63H40c-13.3 0-24-10.7-24-24s10.7-24 24-24h96c13.3 0 24 10.7 24 24v96c0 13.3-10.7 24-24 24s-24-10.7-24-24V433.9L49 497c-9.4 9.4-24.6 9.4-33.9 0zm576 0l-63-63V472c0 13.3-10.7 24-24 24s-24-10.7-24-24V376c0-13.3 10.7-24 24-24h96c13.3 0 24 10.7 24 24s-10.7 24-24 24H561.9l63 63c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M15 15C24.4 5.7 39.6 5.7 49 15l63 63V40c0-13.3 10.7-24 24-24s24 10.7 24 24v96c0 13.3-10.7 24-24 24H40c-13.3 0-24-10.7-24-24s10.7-24 24-24H78.1L15 49C5.7 39.6 5.7 24.4 15 15zM133.5 243.9C158.6 193.6 222.7 112 320 112s161.4 81.6 186.5 131.9c3.8 7.6 3.8 16.5 0 24.2C481.4 318.4 417.3 400 320 400s-161.4-81.6-186.5-131.9c-3.8-7.6-3.8-16.5 0-24.2zM320 320a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM591 15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-63 63H600c13.3 0 24 10.7 24 24s-10.7 24-24 24H504c-13.3 0-24-10.7-24-24V40c0-13.3 10.7-24 24-24s24 10.7 24 24V78.1l63-63zM15 497c-9.4-9.4-9.4-24.6 0-33.9l63-63H40c-13.3 0-24-10.7-24-24s10.7-24 24-24h96c13.3 0 24 10.7 24 24v96c0 13.3-10.7 24-24 24s-24-10.7-24-24V433.9L49 497c-9.4 9.4-24.6 9.4-33.9 0zm576 0l-63-63V472c0 13.3-10.7 24-24 24s-24-10.7-24-24V376c0-13.3 10.7-24 24-24h96c13.3 0 24 10.7 24 24s-10.7 24-24 24H561.9l63 63c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-turn-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrows\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c0\",\n    \"label\": \"Arrows Turn Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M297.4 9.4c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L338.7 160H128c-35.3 0-64 28.7-64 64v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V224C0 153.3 57.3 96 128 96H338.7L297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm-96 256c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416H96c-17.7 0-32 14.3-32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448c0-53 43-96 96-96H242.7l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M297.4 9.4c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L338.7 160H128c-35.3 0-64 28.7-64 64v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V224C0 153.3 57.3 96 128 96H338.7L297.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm-96 256c12.5-12.5 32.8-12.5 45.3 0l96 96c12.5 12.5 12.5 32.8 0 45.3l-96 96c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416H96c-17.7 0-32 14.3-32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448c0-53 43-96 96-96H242.7l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-turn-to-dots\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"destination\", \"nexus\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c1\",\n    \"label\": \"Arrows Turn To Dots\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M249.4 25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L269.3 96 416 96c53 0 96 43 96 96v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7-14.3-32-32-32l-146.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm13.3 256l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448c0-53 43-96 96-96l146.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM384 384a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192A64 64 0 1 1 64 64a64 64 0 1 1 0 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M249.4 25.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L269.3 96 416 96c53 0 96 43 96 96v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7-14.3-32-32-32l-146.7 0 25.4 25.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-80-80c-12.5-12.5-12.5-32.8 0-45.3l80-80zm13.3 256l80 80c12.5 12.5 12.5 32.8 0 45.3l-80 80c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 416 96 416c-17.7 0-32 14.3-32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448c0-53 43-96 96-96l146.7 0-25.4-25.4c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0zM384 384a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192A64 64 0 1 1 64 64a64 64 0 1 1 0 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-up-down\": {\n    \"aliases\": {\n      \"names\": [\"arrows-v\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f07d\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"expand\", \"portrait\", \"resize\", \"tall\", \"vertical\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f07d\",\n    \"label\": \"Arrows Up Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L128 109.3V402.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L128 109.3V402.7L86.6 361.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-up-down-left-right\": {\n    \"aliases\": {\n      \"names\": [\"arrows\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f047\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"arrows\",\n        \"bigger\",\n        \"enlarge\",\n        \"expand\",\n        \"fullscreen\",\n        \"move\",\n        \"position\",\n        \"reorder\",\n        \"resize\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f047\",\n    \"label\": \"Arrows Up Down Left Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4V224H109.3l9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4H224V402.7l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4V288H402.7l-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4H288V109.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4V224H109.3l9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4H224V402.7l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4V288H402.7l-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4H288V109.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"arrows-up-to-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"rise\", \"scale up\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c2\",\n    \"label\": \"Arrows Up To Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M32 96l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96zM9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 237.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96zm320 45.3c12.5 12.5 32.8 12.5 45.3 0L416 237.3 416 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M32 96l512 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32C14.3 32 0 46.3 0 64S14.3 96 32 96zM9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L96 237.3 96 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96zm320 45.3c12.5 12.5 32.8 12.5 45.3 0L416 237.3 416 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-210.7 41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"artstation\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f77a\",\n    \"label\": \"Artstation\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"asterisk\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2731\", \"f069\"],\n        \"primary\": [\"f069\"],\n        \"secondary\": [\"102a\", \"10f069\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Asterisk\",\n        \"Heavy Asterisk\",\n        \"annotation\",\n        \"details\",\n        \"reference\",\n        \"star\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"2a\",\n    \"label\": \"Asterisk\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 32c17.7 0 32 14.3 32 32V199.5l111.5-66.9c15.2-9.1 34.8-4.2 43.9 11s4.2 34.8-11 43.9L254.2 256l114.3 68.6c15.2 9.1 20.1 28.7 11 43.9s-28.7 20.1-43.9 11L224 312.5V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V312.5L48.5 379.4c-15.2 9.1-34.8 4.2-43.9-11s-4.2-34.8 11-43.9L129.8 256 15.5 187.4c-15.2-9.1-20.1-28.7-11-43.9s28.7-20.1 43.9-11L160 199.5V64c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 32c17.7 0 32 14.3 32 32V199.5l111.5-66.9c15.2-9.1 34.8-4.2 43.9 11s4.2 34.8-11 43.9L254.2 256l114.3 68.6c15.2 9.1 20.1 28.7 11 43.9s-28.7 20.1-43.9 11L224 312.5V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V312.5L48.5 379.4c-15.2 9.1-34.8 4.2-43.9-11s-4.2-34.8 11-43.9L129.8 256 15.5 187.4c-15.2-9.1-20.1-28.7-11-43.9s28.7-20.1 43.9-11L160 199.5V64c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"asymmetrik\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f372\",\n    \"label\": \"Asymmetrik, Ltd.\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"at\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f1fa\"],\n        \"primary\": [\"f1fa\"],\n        \"secondary\": [\"10f1fa\"]\n      }\n    },\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Commercial At\",\n        \"address\",\n        \"author\",\n        \"e-mail\",\n        \"email\",\n        \"fluctuate\",\n        \"handle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"40\",\n    \"label\": \"At\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767248,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256v32c0 53-43 96-96 96c-29.3 0-55.6-13.2-73.2-33.9C320 371.1 289.5 384 256 384c-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1c5.7-5 13.1-8.1 21.3-8.1c17.7 0 32 14.3 32 32v80 32c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-106-86-192-192-192zm64 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256v32c0 53-43 96-96 96c-29.3 0-55.6-13.2-73.2-33.9C320 371.1 289.5 384 256 384c-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1c5.7-5 13.1-8.1 21.3-8.1c17.7 0 32 14.3 32 32v80 32c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-106-86-192-192-192zm64 192a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"atlassian\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f77b\",\n    \"label\": \"Atlassian\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"atom\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"269b\"],\n        \"secondary\": [\"10f5d2\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"5.12.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"atheism\",\n        \"atheist\",\n        \"atom\",\n        \"atom symbol\",\n        \"chemistry\",\n        \"electron\",\n        \"ion\",\n        \"isotope\",\n        \"neutron\",\n        \"nuclear\",\n        \"proton\",\n        \"science\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5d2\",\n    \"label\": \"Atom\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 398.8c-11.8 5.1-23.4 9.7-34.9 13.5c16.7 33.8 31 35.7 34.9 35.7s18.1-1.9 34.9-35.7c-11.4-3.9-23.1-8.4-34.9-13.5zM446 256c33 45.2 44.3 90.9 23.6 128c-20.2 36.3-62.5 49.3-115.2 43.2c-22 52.1-55.6 84.8-98.4 84.8s-76.4-32.7-98.4-84.8c-52.7 6.1-95-6.8-115.2-43.2C21.7 346.9 33 301.2 66 256c-33-45.2-44.3-90.9-23.6-128c20.2-36.3 62.5-49.3 115.2-43.2C179.6 32.7 213.2 0 256 0s76.4 32.7 98.4 84.8c52.7-6.1 95 6.8 115.2 43.2c20.7 37.1 9.4 82.8-23.6 128zm-65.8 67.4c-1.7 14.2-3.9 28-6.7 41.2c31.8 1.4 38.6-8.7 40.2-11.7c2.3-4.2 7-17.9-11.9-48.1c-6.8 6.3-14 12.5-21.6 18.6zm-6.7-175.9c2.8 13.1 5 26.9 6.7 41.2c7.6 6.1 14.8 12.3 21.6 18.6c18.9-30.2 14.2-44 11.9-48.1c-1.6-2.9-8.4-13-40.2-11.7zM290.9 99.7C274.1 65.9 259.9 64 256 64s-18.1 1.9-34.9 35.7c11.4 3.9 23.1 8.4 34.9 13.5c11.8-5.1 23.4-9.7 34.9-13.5zm-159 88.9c1.7-14.3 3.9-28 6.7-41.2c-31.8-1.4-38.6 8.7-40.2 11.7c-2.3 4.2-7 17.9 11.9 48.1c6.8-6.3 14-12.5 21.6-18.6zM110.2 304.8C91.4 335 96 348.7 98.3 352.9c1.6 2.9 8.4 13 40.2 11.7c-2.8-13.1-5-26.9-6.7-41.2c-7.6-6.1-14.8-12.3-21.6-18.6zM336 256a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zm-80-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 398.8c-11.8 5.1-23.4 9.7-34.9 13.5c16.7 33.8 31 35.7 34.9 35.7s18.1-1.9 34.9-35.7c-11.4-3.9-23.1-8.4-34.9-13.5zM446 256c33 45.2 44.3 90.9 23.6 128c-20.2 36.3-62.5 49.3-115.2 43.2c-22 52.1-55.6 84.8-98.4 84.8s-76.4-32.7-98.4-84.8c-52.7 6.1-95-6.8-115.2-43.2C21.7 346.9 33 301.2 66 256c-33-45.2-44.3-90.9-23.6-128c20.2-36.3 62.5-49.3 115.2-43.2C179.6 32.7 213.2 0 256 0s76.4 32.7 98.4 84.8c52.7-6.1 95 6.8 115.2 43.2c20.7 37.1 9.4 82.8-23.6 128zm-65.8 67.4c-1.7 14.2-3.9 28-6.7 41.2c31.8 1.4 38.6-8.7 40.2-11.7c2.3-4.2 7-17.9-11.9-48.1c-6.8 6.3-14 12.5-21.6 18.6zm-6.7-175.9c2.8 13.1 5 26.9 6.7 41.2c7.6 6.1 14.8 12.3 21.6 18.6c18.9-30.2 14.2-44 11.9-48.1c-1.6-2.9-8.4-13-40.2-11.7zM290.9 99.7C274.1 65.9 259.9 64 256 64s-18.1 1.9-34.9 35.7c11.4 3.9 23.1 8.4 34.9 13.5c11.8-5.1 23.4-9.7 34.9-13.5zm-159 88.9c1.7-14.3 3.9-28 6.7-41.2c-31.8-1.4-38.6 8.7-40.2 11.7c-2.3 4.2-7 17.9 11.9 48.1c6.8-6.3 14-12.5 21.6-18.6zM110.2 304.8C91.4 335 96 348.7 98.3 352.9c1.6 2.9 8.4 13 40.2 11.7c-2.8-13.1-5-26.9-6.7-41.2c-7.6-6.1-14.8-12.3-21.6-18.6zM336 256a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zm-80-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"audible\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f373\",\n    \"label\": \"Audible\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"audio-description\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f29e\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blind\", \"narration\", \"video\", \"visual\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f29e\",\n    \"label\": \"Audio Description\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM213.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7l-9.4-18.9H150.9l-9.4 18.9c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zm-.4 106.6L192 237.7l-21.1 42.2h42.2zM304 184c0-13.3 10.7-24 24-24h56c53 0 96 43 96 96s-43 96-96 96H328c-13.3 0-24-10.7-24-24V184zm48 24v96h32c26.5 0 48-21.5 48-48s-21.5-48-48-48H352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM213.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7l-9.4-18.9H150.9l-9.4 18.9c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zm-.4 106.6L192 237.7l-21.1 42.2h42.2zM304 184c0-13.3 10.7-24 24-24h56c53 0 96 43 96 96s-43 96-96 96H328c-13.3 0-24-10.7-24-24V184zm48 24v96h32c26.5 0 48-21.5 48-48s-21.5-48-48-48H352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"austral-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Austral Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0a9\",\n    \"label\": \"Austral Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M253.5 51.7C248.6 39.8 236.9 32 224 32s-24.6 7.8-29.5 19.7L122.7 224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H96L82.7 320H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H56L34.5 435.7c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L125.3 384H322.7l31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8L392 384h24c17.7 0 32-14.3 32-32s-14.3-32-32-32H365.3L352 288h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H325.3L253.5 51.7zM256 224H192l32-76.8L256 224zm-90.7 64H282.7L296 320H152l13.3-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M253.5 51.7C248.6 39.8 236.9 32 224 32s-24.6 7.8-29.5 19.7L122.7 224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H96L82.7 320H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H56L34.5 435.7c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L125.3 384H322.7l31.8 76.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8L392 384h24c17.7 0 32-14.3 32-32s-14.3-32-32-32H365.3L352 288h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H325.3L253.5 51.7zM256 224H192l32-76.8L256 224zm-90.7 64H282.7L296 320H152l13.3-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"autoprefixer\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f41c\",\n    \"label\": \"Autoprefixer\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"avianex\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f374\",\n    \"label\": \"avianex\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"aviato\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f421\",\n    \"label\": \"Aviato\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"award\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f559\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.2.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"honor\", \"praise\", \"prize\", \"recognition\", \"ribbon\", \"trophy\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f559\",\n    \"label\": \"Award\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M173.8 5.5c11-7.3 25.4-7.3 36.4 0L228 17.2c6 3.9 13 5.8 20.1 5.4l21.3-1.3c13.2-.8 25.6 6.4 31.5 18.2l9.6 19.1c3.2 6.4 8.4 11.5 14.7 14.7L344.5 83c11.8 5.9 19 18.3 18.2 31.5l-1.3 21.3c-.4 7.1 1.5 14.2 5.4 20.1l11.8 17.8c7.3 11 7.3 25.4 0 36.4L366.8 228c-3.9 6-5.8 13-5.4 20.1l1.3 21.3c.8 13.2-6.4 25.6-18.2 31.5l-19.1 9.6c-6.4 3.2-11.5 8.4-14.7 14.7L301 344.5c-5.9 11.8-18.3 19-31.5 18.2l-21.3-1.3c-7.1-.4-14.2 1.5-20.1 5.4l-17.8 11.8c-11 7.3-25.4 7.3-36.4 0L156 366.8c-6-3.9-13-5.8-20.1-5.4l-21.3 1.3c-13.2 .8-25.6-6.4-31.5-18.2l-9.6-19.1c-3.2-6.4-8.4-11.5-14.7-14.7L39.5 301c-11.8-5.9-19-18.3-18.2-31.5l1.3-21.3c.4-7.1-1.5-14.2-5.4-20.1L5.5 210.2c-7.3-11-7.3-25.4 0-36.4L17.2 156c3.9-6 5.8-13 5.4-20.1l-1.3-21.3c-.8-13.2 6.4-25.6 18.2-31.5l19.1-9.6C65 70.2 70.2 65 73.4 58.6L83 39.5c5.9-11.8 18.3-19 31.5-18.2l21.3 1.3c7.1 .4 14.2-1.5 20.1-5.4L173.8 5.5zM272 192a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM1.3 441.8L44.4 339.3c.2 .1 .3 .2 .4 .4l9.6 19.1c11.7 23.2 36 37.3 62 35.8l21.3-1.3c.2 0 .5 0 .7 .2l17.8 11.8c5.1 3.3 10.5 5.9 16.1 7.7l-37.6 89.3c-2.3 5.5-7.4 9.2-13.3 9.7s-11.6-2.2-14.8-7.2L74.4 455.5l-56.1 8.3c-5.7 .8-11.4-1.5-15-6s-4.3-10.7-2.1-16zm248 60.4L211.7 413c5.6-1.8 11-4.3 16.1-7.7l17.8-11.8c.2-.1 .4-.2 .7-.2l21.3 1.3c26 1.5 50.3-12.6 62-35.8l9.6-19.1c.1-.2 .2-.3 .4-.4l43.2 102.5c2.2 5.3 1.4 11.4-2.1 16s-9.3 6.9-15 6l-56.1-8.3-32.2 49.2c-3.2 5-8.9 7.7-14.8 7.2s-11-4.3-13.3-9.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M173.8 5.5c11-7.3 25.4-7.3 36.4 0L228 17.2c6 3.9 13 5.8 20.1 5.4l21.3-1.3c13.2-.8 25.6 6.4 31.5 18.2l9.6 19.1c3.2 6.4 8.4 11.5 14.7 14.7L344.5 83c11.8 5.9 19 18.3 18.2 31.5l-1.3 21.3c-.4 7.1 1.5 14.2 5.4 20.1l11.8 17.8c7.3 11 7.3 25.4 0 36.4L366.8 228c-3.9 6-5.8 13-5.4 20.1l1.3 21.3c.8 13.2-6.4 25.6-18.2 31.5l-19.1 9.6c-6.4 3.2-11.5 8.4-14.7 14.7L301 344.5c-5.9 11.8-18.3 19-31.5 18.2l-21.3-1.3c-7.1-.4-14.2 1.5-20.1 5.4l-17.8 11.8c-11 7.3-25.4 7.3-36.4 0L156 366.8c-6-3.9-13-5.8-20.1-5.4l-21.3 1.3c-13.2 .8-25.6-6.4-31.5-18.2l-9.6-19.1c-3.2-6.4-8.4-11.5-14.7-14.7L39.5 301c-11.8-5.9-19-18.3-18.2-31.5l1.3-21.3c.4-7.1-1.5-14.2-5.4-20.1L5.5 210.2c-7.3-11-7.3-25.4 0-36.4L17.2 156c3.9-6 5.8-13 5.4-20.1l-1.3-21.3c-.8-13.2 6.4-25.6 18.2-31.5l19.1-9.6C65 70.2 70.2 65 73.4 58.6L83 39.5c5.9-11.8 18.3-19 31.5-18.2l21.3 1.3c7.1 .4 14.2-1.5 20.1-5.4L173.8 5.5zM272 192a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM1.3 441.8L44.4 339.3c.2 .1 .3 .2 .4 .4l9.6 19.1c11.7 23.2 36 37.3 62 35.8l21.3-1.3c.2 0 .5 0 .7 .2l17.8 11.8c5.1 3.3 10.5 5.9 16.1 7.7l-37.6 89.3c-2.3 5.5-7.4 9.2-13.3 9.7s-11.6-2.2-14.8-7.2L74.4 455.5l-56.1 8.3c-5.7 .8-11.4-1.5-15-6s-4.3-10.7-2.1-16zm248 60.4L211.7 413c5.6-1.8 11-4.3 16.1-7.7l17.8-11.8c.2-.1 .4-.2 .7-.2l21.3 1.3c26 1.5 50.3-12.6 62-35.8l9.6-19.1c.1-.2 .2-.3 .4-.4l43.2 102.5c2.2 5.3 1.4 11.4-2.1 16s-9.3 6.9-15 6l-56.1-8.3-32.2 49.2c-3.2 5-8.9 7.7-14.8 7.2s-11-4.3-13.3-9.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"aws\": {\n    \"changes\": [\"5.0.0\", \"5.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f375\",\n    \"label\": \"Amazon Web Services (AWS)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"b\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"62\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter B\", \"Latin Small Letter B\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"42\",\n    \"label\": \"B\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V256 416c0 35.3 28.7 64 64 64H192c70.7 0 128-57.3 128-128c0-46.5-24.8-87.3-62-109.7c18.7-22.3 30-51 30-82.3c0-70.7-57.3-128-128-128H64zm96 192H64V96h96c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288h96 32c35.3 0 64 28.7 64 64s-28.7 64-64 64H64V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V256 416c0 35.3 28.7 64 64 64H192c70.7 0 128-57.3 128-128c0-46.5-24.8-87.3-62-109.7c18.7-22.3 30-51 30-82.3c0-70.7-57.3-128-128-128H64zm96 192H64V96h96c35.3 0 64 28.7 64 64s-28.7 64-64 64zM64 288h96 32c35.3 0 64 28.7 64 64s-28.7 64-64 64H64V288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"baby\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f77c\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f77c\",\n    \"label\": \"Baby\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M152 88a72 72 0 1 1 144 0A72 72 0 1 1 152 88zM39.7 144.5c13-17.9 38-21.8 55.9-8.8L131.8 162c26.8 19.5 59.1 30 92.2 30s65.4-10.5 92.2-30l36.2-26.4c17.9-13 42.9-9 55.9 8.8s9 42.9-8.8 55.9l-36.2 26.4c-13.6 9.9-28.1 18.2-43.3 25V288H128V251.7c-15.2-6.7-29.7-15.1-43.3-25L48.5 200.3c-17.9-13-21.8-38-8.8-55.9zm89.8 184.8l60.6 53-26 37.2 24.3 24.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-48-48C70 438.6 68.1 417 79.2 401.1l50.2-71.8zm128.5 53l60.6-53 50.2 71.8c11.1 15.9 9.2 37.5-4.5 51.2l-48 48c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6L284 419.4l-26-37.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M152 88a72 72 0 1 1 144 0A72 72 0 1 1 152 88zM39.7 144.5c13-17.9 38-21.8 55.9-8.8L131.8 162c26.8 19.5 59.1 30 92.2 30s65.4-10.5 92.2-30l36.2-26.4c17.9-13 42.9-9 55.9 8.8s9 42.9-8.8 55.9l-36.2 26.4c-13.6 9.9-28.1 18.2-43.3 25V288H128V251.7c-15.2-6.7-29.7-15.1-43.3-25L48.5 200.3c-17.9-13-21.8-38-8.8-55.9zm89.8 184.8l60.6 53-26 37.2 24.3 24.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-48-48C70 438.6 68.1 417 79.2 401.1l50.2-71.8zm128.5 53l60.6-53 50.2 71.8c11.1 15.9 9.2 37.5-4.5 51.2l-48 48c-15.6 15.6-40.9 15.6-56.6 0s-15.6-40.9 0-56.6L284 419.4l-26-37.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"baby-carriage\": {\n    \"aliases\": {\n      \"names\": [\"carriage-baby\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f77d\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buggy\",\n        \"carrier\",\n        \"infant\",\n        \"push\",\n        \"stroller\",\n        \"transportation\",\n        \"walk\",\n        \"wheels\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f77d\",\n    \"label\": \"Baby Carriage\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 192H.1C2.7 117.9 41.3 52.9 99 14.1c13.3-8.9 30.8-4.3 39.9 8.8L256 192zm128-32c0-35.3 28.7-64 64-64h32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0v64c0 25.2-5.8 50.2-17 73.5s-27.8 44.5-48.6 62.3s-45.5 32-72.7 41.6S253.4 416 224 416s-58.5-5-85.7-14.6s-51.9-23.8-72.7-41.6s-37.3-39-48.6-62.3S0 249.2 0 224l224 0 160 0V160zM80 416a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm240 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 192H.1C2.7 117.9 41.3 52.9 99 14.1c13.3-8.9 30.8-4.3 39.9 8.8L256 192zm128-32c0-35.3 28.7-64 64-64h32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0v64c0 25.2-5.8 50.2-17 73.5s-27.8 44.5-48.6 62.3s-45.5 32-72.7 41.6S253.4 416 224 416s-58.5-5-85.7-14.6s-51.9-23.8-72.7-41.6s-37.3-39-48.6-62.3S0 249.2 0 224l224 0 160 0V160zM80 416a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm240 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"backward\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23ea\"],\n        \"secondary\": [\"10f04a\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"double\", \"fast reverse button\", \"previous\", \"rewind\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f04a\",\n    \"label\": \"Backward\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M459.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4L288 214.3V256v41.7L459.5 440.6zM256 352V256 128 96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160C4.2 237.5 0 246.5 0 256s4.2 18.5 11.5 24.6l192 160c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M459.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4L288 214.3V256v41.7L459.5 440.6zM256 352V256 128 96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160C4.2 237.5 0 246.5 0 256s4.2 18.5 11.5 24.6l192 160c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"backward-fast\": {\n    \"aliases\": {\n      \"names\": [\"fast-backward\"],\n      \"unicodes\": {\n        \"composite\": [\"23ee\"],\n        \"secondary\": [\"10f049\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"beginning\",\n        \"first\",\n        \"last track button\",\n        \"previous\",\n        \"previous scene\",\n        \"previous track\",\n        \"rewind\",\n        \"start\",\n        \"triangle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f049\",\n    \"label\": \"Backward Fast\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M493.6 445c-11.2 5.3-24.5 3.6-34.1-4.4L288 297.7V416c0 12.4-7.2 23.7-18.4 29s-24.5 3.6-34.1-4.4L64 297.7V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64s32 14.3 32 32V214.3L235.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S288 83.6 288 96V214.3L459.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S512 83.6 512 96V416c0 12.4-7.2 23.7-18.4 29z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M493.6 445c-11.2 5.3-24.5 3.6-34.1-4.4L288 297.7V416c0 12.4-7.2 23.7-18.4 29s-24.5 3.6-34.1-4.4L64 297.7V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64s32 14.3 32 32V214.3L235.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S288 83.6 288 96V214.3L459.5 71.4c9.5-7.9 22.8-9.7 34.1-4.4S512 83.6 512 96V416c0 12.4-7.2 23.7-18.4 29z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"backward-step\": {\n    \"aliases\": {\n      \"names\": [\"step-backward\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f048\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"beginning\", \"first\", \"previous\", \"rewind\", \"start\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f048\",\n    \"label\": \"Backward Step\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241V96c0-17.7-14.3-32-32-32S0 78.3 0 96V416c0 17.7 14.3 32 32 32s32-14.3 32-32V271l11.5 9.6 192 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241V96c0-17.7-14.3-32-32-32S0 78.3 0 96V416c0 17.7 14.3 32 32 32s32-14.3 32-32V271l11.5 9.6 192 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bacon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f953\"],\n        \"secondary\": [\"10f7e5\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bacon\",\n        \"blt\",\n        \"breakfast\",\n        \"food\",\n        \"ham\",\n        \"lard\",\n        \"meat\",\n        \"pancetta\",\n        \"pork\",\n        \"rasher\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7e5\",\n    \"label\": \"Bacon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M439.2 1.2c11.2-3.2 23.2-.1 31.4 8.1L518 56.7l-26.5 7.9c-58 16.6-98.1 39.6-129.6 67.4c-31.2 27.5-53.2 59.1-75.1 90.9l-2.3 3.3C241.6 288.7 195 356.6 72.8 417.7L37.9 435.2 9.4 406.6c-7.3-7.3-10.6-17.6-9-27.8s8.1-18.9 17.3-23.5C136.1 296.2 180.9 231 223.3 169.3l2.3-3.4c21.8-31.8 44.9-64.9 77.7-93.9c33.4-29.5 75.8-53.6 135.9-70.8zM61.8 459l25.4-12.7c129.5-64.7 179.9-138.1 223.8-202l2.2-3.3c22.1-32.1 42.1-60.5 69.9-85.1c27.5-24.3 63.4-45.2 117.3-60.6l0 0 .2-.1 43.1-12.9 23 23c8 8 11.2 19.7 8.3 30.7s-11.3 19.6-22.2 22.7c-51.9 14.8-85.6 34.7-111.1 57.2c-26.1 23-45.1 49.9-67.3 82.1l-2.2 3.2C327.8 365.9 275.5 442 142.3 508.6c-12.3 6.2-27.2 3.7-36.9-6L61.8 459z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M439.2 1.2c11.2-3.2 23.2-.1 31.4 8.1L518 56.7l-26.5 7.9c-58 16.6-98.1 39.6-129.6 67.4c-31.2 27.5-53.2 59.1-75.1 90.9l-2.3 3.3C241.6 288.7 195 356.6 72.8 417.7L37.9 435.2 9.4 406.6c-7.3-7.3-10.6-17.6-9-27.8s8.1-18.9 17.3-23.5C136.1 296.2 180.9 231 223.3 169.3l2.3-3.4c21.8-31.8 44.9-64.9 77.7-93.9c33.4-29.5 75.8-53.6 135.9-70.8zM61.8 459l25.4-12.7c129.5-64.7 179.9-138.1 223.8-202l2.2-3.3c22.1-32.1 42.1-60.5 69.9-85.1c27.5-24.3 63.4-45.2 117.3-60.6l0 0 .2-.1 43.1-12.9 23 23c8 8 11.2 19.7 8.3 30.7s-11.3 19.6-22.2 22.7c-51.9 14.8-85.6 34.7-111.1 57.2c-26.1 23-45.1 49.9-67.3 82.1l-2.2 3.2C327.8 365.9 275.5 442 142.3 508.6c-12.3 6.2-27.2 3.7-36.9-6L61.8 459z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bacteria\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e059\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.13.1\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"antibiotic\",\n        \"antibody\",\n        \"covid-19\",\n        \"health\",\n        \"organism\",\n        \"sick\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e059\",\n    \"label\": \"Bacteria\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M304.9 .7c-9.6-2.7-19.5 2.8-22.3 12.4l-4.3 15.2c-8.3-.6-16.8 0-25.2 1.9c-7.3 1.7-14.3 3.5-21.1 5.5l-5.5-12.7c-3.9-9.1-14.5-13.4-23.6-9.5s-13.4 14.5-9.5 23.6l4.4 10.4c-16.6 6.7-31.7 14.4-45.4 22.8L147 62c-5.5-8.3-16.7-10.5-25-5s-10.5 16.7-5 25l6 9c-13.7 11-25.5 22.8-35.8 34.9l-10-8c-7.8-6.2-19.1-5-25.3 2.8s-5 19.1 2.8 25.3L65.9 155c-1.8 2.8-3.5 5.7-5.1 8.5c-6.6 11.4-11.8 22.6-16 33l-8-3.2c-9.2-3.7-19.7 .8-23.4 10s.8 19.7 10 23.4l10.4 4.2c-.2 .8-.4 1.5-.5 2.3c-2.2 9.3-3.4 17.3-4.1 23.4c-.4 3.1-.6 5.7-.8 7.8c-.1 1.1-.1 2-.2 2.8l-.1 1.1 0 .5 0 .2 0 .1c0 0 0 .1 29.1 1l-.1 0L28 269.3c-.1 3.1 0 6.1 .2 9.1l-15.2 4.3C3.5 285.4-2 295.4 .7 304.9s12.7 15.1 22.3 12.4l15.6-4.5c7.6 13.6 18.9 25 32.6 32.6L66.7 361c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.3-12.4l4.3-15.2c1.2 .1 2.4 .2 3.6 .2c15.6 .5 30.3-3.3 43-10.2l9 9c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-7.2-7.2c9.3-12.6 15.2-27.8 16.3-44.5l7.1 3c9.1 3.9 19.7-.3 23.6-9.5s-.3-19.7-9.5-23.6l-8.6-3.7c6.4-9.9 17.3-22.4 36.9-33.3l1.3 4.4c2.7 9.6 12.7 15.1 22.3 12.4s15.1-12.7 12.4-22.3l-2.3-8.1c3.8-1.1 7.7-2.1 11.9-3.1c11.6-2.7 22.1-7.7 31.1-14.4l7.2 7.2c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-9-9c7.6-13.9 11.3-30.1 10.1-46.6l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3S370.6 64 361 66.7l-15.6 4.5c-7.7-13.9-19.1-25.1-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3zM112 272l-48-1.5 0 0c11.7 .4 27.3 .9 48 1.6zm16-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-48a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM322.7 489c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.2-12.4l4.3-15.2c8.3 .6 16.8 0 25.2-1.9c7.3-1.7 14.3-3.5 21.1-5.5l5.5 12.7c3.9 9.1 14.5 13.4 23.6 9.5s13.4-14.5 9.5-23.6l-4.4-10.4c16.6-6.7 31.7-14.4 45.4-22.8L493 450c5.5 8.3 16.7 10.5 25 5s10.5-16.7 5-25l-6-9c13.7-11 25.5-22.8 35.8-34.9l10 8c7.8 6.2 19.1 5 25.3-2.8s5-19.1-2.8-25.3L574.1 357c1.8-2.8 3.5-5.7 5.1-8.5c6.6-11.4 11.8-22.6 16-33l8 3.2c9.2 3.7 19.7-.8 23.4-10s-.8-19.7-10-23.4l-10.4-4.2c.2-.8 .4-1.5 .5-2.3c2.2-9.3 3.4-17.3 4.1-23.4c.4-3.1 .6-5.7 .8-7.8c.1-1.1 .1-2 .2-2.8l.1-1.1 0-.5 0-.2 0-.1c0 0 0-.1-29.1-1l.1 0 29.1 .9c.1-3.1 0-6.1-.2-9.1l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3s-12.7-15.1-22.3-12.4l-15.6 4.5c-7.6-13.6-18.9-25-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3s-19.5 2.8-22.3 12.4l-4.3 15.2c-1.2-.1-2.4-.2-3.6-.2c-15.6-.5-30.3 3.3-43 10.2l-9-9c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l7.2 7.2c-9.3 12.6-15.2 27.8-16.3 44.5l-7.1-3c-9.1-3.9-19.7 .3-23.6 9.5s.3 19.7 9.5 23.6l8.6 3.7c-6.4 9.9-17.3 22.4-36.9 33.3l-1.3-4.4c-2.7-9.6-12.7-15.1-22.3-12.4s-15.1 12.7-12.4 22.3l2.3 8.1c-3.8 1.1-7.7 2.1-11.9 3.1c-11.6 2.7-22.1 7.7-31.1 14.4l-7.2-7.2c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l9 9c-7.6 13.9-11.3 30.1-10.1 46.6l-15.2 4.3c-9.6 2.7-15.1 12.7-12.4 22.2s12.7 15.1 22.3 12.4l15.6-4.5c7.7 13.9 19.1 25.1 32.6 32.6L322.7 489zM576 241.5l0 0c-11.7-.4-27.3-.9-48-1.6l48 1.5zM448 384a32 32 0 1 1 -64 0 32 32 0 1 1 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M304.9 .7c-9.6-2.7-19.5 2.8-22.3 12.4l-4.3 15.2c-8.3-.6-16.8 0-25.2 1.9c-7.3 1.7-14.3 3.5-21.1 5.5l-5.5-12.7c-3.9-9.1-14.5-13.4-23.6-9.5s-13.4 14.5-9.5 23.6l4.4 10.4c-16.6 6.7-31.7 14.4-45.4 22.8L147 62c-5.5-8.3-16.7-10.5-25-5s-10.5 16.7-5 25l6 9c-13.7 11-25.5 22.8-35.8 34.9l-10-8c-7.8-6.2-19.1-5-25.3 2.8s-5 19.1 2.8 25.3L65.9 155c-1.8 2.8-3.5 5.7-5.1 8.5c-6.6 11.4-11.8 22.6-16 33l-8-3.2c-9.2-3.7-19.7 .8-23.4 10s.8 19.7 10 23.4l10.4 4.2c-.2 .8-.4 1.5-.5 2.3c-2.2 9.3-3.4 17.3-4.1 23.4c-.4 3.1-.6 5.7-.8 7.8c-.1 1.1-.1 2-.2 2.8l-.1 1.1 0 .5 0 .2 0 .1c0 0 0 .1 29.1 1l-.1 0L28 269.3c-.1 3.1 0 6.1 .2 9.1l-15.2 4.3C3.5 285.4-2 295.4 .7 304.9s12.7 15.1 22.3 12.4l15.6-4.5c7.6 13.6 18.9 25 32.6 32.6L66.7 361c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.3-12.4l4.3-15.2c1.2 .1 2.4 .2 3.6 .2c15.6 .5 30.3-3.3 43-10.2l9 9c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-7.2-7.2c9.3-12.6 15.2-27.8 16.3-44.5l7.1 3c9.1 3.9 19.7-.3 23.6-9.5s-.3-19.7-9.5-23.6l-8.6-3.7c6.4-9.9 17.3-22.4 36.9-33.3l1.3 4.4c2.7 9.6 12.7 15.1 22.3 12.4s15.1-12.7 12.4-22.3l-2.3-8.1c3.8-1.1 7.7-2.1 11.9-3.1c11.6-2.7 22.1-7.7 31.1-14.4l7.2 7.2c7 7 18.4 7 25.5 0s7-18.4 0-25.5l-9-9c7.6-13.9 11.3-30.1 10.1-46.6l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3S370.6 64 361 66.7l-15.6 4.5c-7.7-13.9-19.1-25.1-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3zM112 272l-48-1.5 0 0c11.7 .4 27.3 .9 48 1.6zm16-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-48a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM322.7 489c-2.7 9.6 2.8 19.5 12.4 22.3s19.5-2.8 22.2-12.4l4.3-15.2c8.3 .6 16.8 0 25.2-1.9c7.3-1.7 14.3-3.5 21.1-5.5l5.5 12.7c3.9 9.1 14.5 13.4 23.6 9.5s13.4-14.5 9.5-23.6l-4.4-10.4c16.6-6.7 31.7-14.4 45.4-22.8L493 450c5.5 8.3 16.7 10.5 25 5s10.5-16.7 5-25l-6-9c13.7-11 25.5-22.8 35.8-34.9l10 8c7.8 6.2 19.1 5 25.3-2.8s5-19.1-2.8-25.3L574.1 357c1.8-2.8 3.5-5.7 5.1-8.5c6.6-11.4 11.8-22.6 16-33l8 3.2c9.2 3.7 19.7-.8 23.4-10s-.8-19.7-10-23.4l-10.4-4.2c.2-.8 .4-1.5 .5-2.3c2.2-9.3 3.4-17.3 4.1-23.4c.4-3.1 .6-5.7 .8-7.8c.1-1.1 .1-2 .2-2.8l.1-1.1 0-.5 0-.2 0-.1c0 0 0-.1-29.1-1l.1 0 29.1 .9c.1-3.1 0-6.1-.2-9.1l15.2-4.3c9.6-2.7 15.1-12.7 12.4-22.3s-12.7-15.1-22.3-12.4l-15.6 4.5c-7.6-13.6-18.9-25-32.6-32.6l4.5-15.6c2.7-9.6-2.8-19.5-12.4-22.3s-19.5 2.8-22.3 12.4l-4.3 15.2c-1.2-.1-2.4-.2-3.6-.2c-15.6-.5-30.3 3.3-43 10.2l-9-9c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l7.2 7.2c-9.3 12.6-15.2 27.8-16.3 44.5l-7.1-3c-9.1-3.9-19.7 .3-23.6 9.5s.3 19.7 9.5 23.6l8.6 3.7c-6.4 9.9-17.3 22.4-36.9 33.3l-1.3-4.4c-2.7-9.6-12.7-15.1-22.3-12.4s-15.1 12.7-12.4 22.3l2.3 8.1c-3.8 1.1-7.7 2.1-11.9 3.1c-11.6 2.7-22.1 7.7-31.1 14.4l-7.2-7.2c-7-7-18.4-7-25.5 0s-7 18.4 0 25.5l9 9c-7.6 13.9-11.3 30.1-10.1 46.6l-15.2 4.3c-9.6 2.7-15.1 12.7-12.4 22.2s12.7 15.1 22.3 12.4l15.6-4.5c7.7 13.9 19.1 25.1 32.6 32.6L322.7 489zM576 241.5l0 0c-11.7-.4-27.3-.9-48-1.6l48 1.5zM448 384a32 32 0 1 1 -64 0 32 32 0 1 1 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bacterium\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e05a\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.13.1\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"antibiotic\",\n        \"antibody\",\n        \"covid-19\",\n        \"health\",\n        \"organism\",\n        \"sick\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e05a\",\n    \"label\": \"Bacterium\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M423.1 30.6c3.6-12.7-3.7-26-16.5-29.7s-26 3.7-29.7 16.5l-4.2 14.7c-9.8-.4-19.9 .5-29.9 2.8c-12.1 2.8-23.7 5.9-34.9 9.4l-5.9-13.7c-5.2-12.2-19.3-17.8-31.5-12.6s-17.8 19.3-12.6 31.5l4.9 11.3c-22 9.4-42 20.1-60.2 31.8L196 82.7c-7.4-11-22.3-14-33.3-6.7s-14 22.3-6.7 33.3l7.8 11.6c-18 15-33.7 30.8-47.3 47.1L103 157.3c-10.4-8.3-25.5-6.6-33.7 3.7s-6.6 25.5 3.7 33.7l15 12c-2.1 3.2-4.1 6.5-6 9.7c-9.4 15.7-17 31-23.2 45.3l-9.9-3.9c-12.3-4.9-26.3 1.1-31.2 13.4s1.1 26.3 13.4 31.2l11.6 4.6c-.3 1.1-.6 2.1-.9 3.1c-3.5 12.5-5.7 23.2-7.1 31.3c-.7 4.1-1.2 7.5-1.6 10.3c-.2 1.4-.3 2.6-.4 3.6l-.1 1.4-.1 .6 0 .3 0 .1c0 0 0 .1 39.2 3.7l0 0-39.2-3.6c-.5 5-.6 10-.4 14.9l-14.7 4.2C4.7 380.6-2.7 393.8 .9 406.6s16.9 20.1 29.7 16.5l13.8-3.9c10.6 20.7 27.6 37.8 48.5 48.5l-3.9 13.7c-3.6 12.7 3.7 26 16.5 29.7s26-3.7 29.7-16.5l4.2-14.7c23.8 1 46.3-5.5 65.1-17.6L215 473c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c9.1-14.1 15.1-30.5 17-48.3l.1-.8c.3-1.7 1-5.1 2.3-9.8l.2-.8 12.6 5.4c12.2 5.2 26.3-.4 31.5-12.6s-.4-26.3-12.6-31.5l-11.3-4.8c9.9-14.9 24.9-31.6 48.6-46l2.1 7.5c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7L371 259.2c6.9-2.2 14.3-4.3 22.2-6.1c12.9-3 24.7-8 35.2-14.8L439 249c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c12.2-19 18.6-41.6 17.6-65.1l14.7-4.2c12.7-3.6 20.1-16.9 16.5-29.7s-16.9-20.1-29.7-16.5l-13.7 3.9c-10.8-21.2-28-38-48.5-48.5l3.9-13.8zM92.1 363.3l0 0L144 368l-51.9-4.7zM112 320a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM240 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M423.1 30.6c3.6-12.7-3.7-26-16.5-29.7s-26 3.7-29.7 16.5l-4.2 14.7c-9.8-.4-19.9 .5-29.9 2.8c-12.1 2.8-23.7 5.9-34.9 9.4l-5.9-13.7c-5.2-12.2-19.3-17.8-31.5-12.6s-17.8 19.3-12.6 31.5l4.9 11.3c-22 9.4-42 20.1-60.2 31.8L196 82.7c-7.4-11-22.3-14-33.3-6.7s-14 22.3-6.7 33.3l7.8 11.6c-18 15-33.7 30.8-47.3 47.1L103 157.3c-10.4-8.3-25.5-6.6-33.7 3.7s-6.6 25.5 3.7 33.7l15 12c-2.1 3.2-4.1 6.5-6 9.7c-9.4 15.7-17 31-23.2 45.3l-9.9-3.9c-12.3-4.9-26.3 1.1-31.2 13.4s1.1 26.3 13.4 31.2l11.6 4.6c-.3 1.1-.6 2.1-.9 3.1c-3.5 12.5-5.7 23.2-7.1 31.3c-.7 4.1-1.2 7.5-1.6 10.3c-.2 1.4-.3 2.6-.4 3.6l-.1 1.4-.1 .6 0 .3 0 .1c0 0 0 .1 39.2 3.7l0 0-39.2-3.6c-.5 5-.6 10-.4 14.9l-14.7 4.2C4.7 380.6-2.7 393.8 .9 406.6s16.9 20.1 29.7 16.5l13.8-3.9c10.6 20.7 27.6 37.8 48.5 48.5l-3.9 13.7c-3.6 12.7 3.7 26 16.5 29.7s26-3.7 29.7-16.5l4.2-14.7c23.8 1 46.3-5.5 65.1-17.6L215 473c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c9.1-14.1 15.1-30.5 17-48.3l.1-.8c.3-1.7 1-5.1 2.3-9.8l.2-.8 12.6 5.4c12.2 5.2 26.3-.4 31.5-12.6s-.4-26.3-12.6-31.5l-11.3-4.8c9.9-14.9 24.9-31.6 48.6-46l2.1 7.5c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7L371 259.2c6.9-2.2 14.3-4.3 22.2-6.1c12.9-3 24.7-8 35.2-14.8L439 249c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-10.6-10.6c12.2-19 18.6-41.6 17.6-65.1l14.7-4.2c12.7-3.6 20.1-16.9 16.5-29.7s-16.9-20.1-29.7-16.5l-13.7 3.9c-10.8-21.2-28-38-48.5-48.5l3.9-13.8zM92.1 363.3l0 0L144 368l-51.9-4.7zM112 320a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM240 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bag-shopping\": {\n    \"aliases\": {\n      \"names\": [\"shopping-bag\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f290\"]\n      }\n    },\n    \"changes\": [\n      \"4.5.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"buy\", \"checkout\", \"grocery\", \"payment\", \"purchase\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f290\",\n    \"label\": \"Bag Shopping\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M160 112c0-35.3 28.7-64 64-64s64 28.7 64 64v48H160V112zm-48 48H48c-26.5 0-48 21.5-48 48V416c0 53 43 96 96 96H352c53 0 96-43 96-96V208c0-26.5-21.5-48-48-48H336V112C336 50.1 285.9 0 224 0S112 50.1 112 112v48zm24 48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm152 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M160 112c0-35.3 28.7-64 64-64s64 28.7 64 64v48H160V112zm-48 48H48c-26.5 0-48 21.5-48 48V416c0 53 43 96 96 96H352c53 0 96-43 96-96V208c0-26.5-21.5-48-48-48H336V112C336 50.1 285.9 0 224 0S112 50.1 112 112v48zm24 48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm152 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bahai\": {\n    \"aliases\": {\n      \"names\": [\"haykal\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f666\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"5.12.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bahai\", \"bahá'í\", \"star\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f666\",\n    \"label\": \"Bahai\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 0c14.5 0 27.2 9.7 30.9 23.8l23.9 89.6 75.9-53.3c11.9-8.3 27.8-7.6 39 1.7s14.6 24.9 8.4 38.1l-39.3 84 92.4 8c14.4 1.2 26.2 12 28.8 26.3s-4.9 28.5-18 34.6l-84.1 39.1 65.7 65.5c10.3 10.2 12.4 26.1 5.1 38.7s-22 18.7-36 14.9L391 386.8l8.2 92.4c1.3 14.4-7.3 27.9-20.9 32.9s-28.9 .1-37.2-11.7l-53.1-76-53.1 76c-8.3 11.9-23.6 16.7-37.2 11.7s-22.2-18.5-20.9-32.9l8.2-92.4L95.4 410.9c-14 3.8-28.8-2.3-36-14.9s-5.2-28.4 5.1-38.7l65.7-65.5L46 252.7c-13.1-6.1-20.5-20.3-18-34.6s14.3-25.1 28.8-26.3l92.4-8-39.3-84c-6.1-13.1-2.7-28.8 8.4-38.1s27.1-10 39-1.7l75.9 53.3 23.9-89.6C260.8 9.7 273.5 0 288 0zm0 156.2l-4.8 18c-2.7 10.1-10.2 18.2-20 21.8s-20.8 2.1-29.3-3.9l-15.2-10.7 7.9 16.8c4.4 9.5 4 20.5-1.3 29.6s-14.5 15-25 15.9l-18.5 1.6 16.8 7.8c9.5 4.4 16.2 13.2 18 23.5s-1.5 20.8-8.9 28.2l-13.2 13.1 17.9-4.8c10.1-2.7 20.9-.3 28.9 6.4s12.2 16.9 11.3 27.3l-1.6 18.5 10.6-15.2c6-8.6 15.8-13.7 26.2-13.7s20.2 5.1 26.2 13.7l10.6 15.2-1.6-18.5c-.9-10.4 3.3-20.6 11.3-27.3s18.8-9.1 28.9-6.4l17.9 4.8-13.2-13.1c-7.4-7.4-10.7-17.9-8.9-28.2s8.5-19.1 18-23.5l16.8-7.8-18.5-1.6c-10.4-.9-19.7-6.8-25-15.9s-5.7-20.1-1.3-29.6l7.9-16.8-15.2 10.7c-8.6 6-19.5 7.5-29.3 3.9s-17.3-11.7-20-21.8l-4.8-18z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 0c14.5 0 27.2 9.7 30.9 23.8l23.9 89.6 75.9-53.3c11.9-8.3 27.8-7.6 39 1.7s14.6 24.9 8.4 38.1l-39.3 84 92.4 8c14.4 1.2 26.2 12 28.8 26.3s-4.9 28.5-18 34.6l-84.1 39.1 65.7 65.5c10.3 10.2 12.4 26.1 5.1 38.7s-22 18.7-36 14.9L391 386.8l8.2 92.4c1.3 14.4-7.3 27.9-20.9 32.9s-28.9 .1-37.2-11.7l-53.1-76-53.1 76c-8.3 11.9-23.6 16.7-37.2 11.7s-22.2-18.5-20.9-32.9l8.2-92.4L95.4 410.9c-14 3.8-28.8-2.3-36-14.9s-5.2-28.4 5.1-38.7l65.7-65.5L46 252.7c-13.1-6.1-20.5-20.3-18-34.6s14.3-25.1 28.8-26.3l92.4-8-39.3-84c-6.1-13.1-2.7-28.8 8.4-38.1s27.1-10 39-1.7l75.9 53.3 23.9-89.6C260.8 9.7 273.5 0 288 0zm0 156.2l-4.8 18c-2.7 10.1-10.2 18.2-20 21.8s-20.8 2.1-29.3-3.9l-15.2-10.7 7.9 16.8c4.4 9.5 4 20.5-1.3 29.6s-14.5 15-25 15.9l-18.5 1.6 16.8 7.8c9.5 4.4 16.2 13.2 18 23.5s-1.5 20.8-8.9 28.2l-13.2 13.1 17.9-4.8c10.1-2.7 20.9-.3 28.9 6.4s12.2 16.9 11.3 27.3l-1.6 18.5 10.6-15.2c6-8.6 15.8-13.7 26.2-13.7s20.2 5.1 26.2 13.7l10.6 15.2-1.6-18.5c-.9-10.4 3.3-20.6 11.3-27.3s18.8-9.1 28.9-6.4l17.9 4.8-13.2-13.1c-7.4-7.4-10.7-17.9-8.9-28.2s8.5-19.1 18-23.5l16.8-7.8-18.5-1.6c-10.4-.9-19.7-6.8-25-15.9s-5.7-20.1-1.3-29.6l7.9-16.8-15.2 10.7c-8.6 6-19.5 7.5-29.3 3.9s-17.3-11.7-20-21.8l-4.8-18z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"baht-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0ac\",\n    \"label\": \"Baht Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M144 0c-17.7 0-32 14.3-32 32V64H37.6C16.8 64 0 80.8 0 101.6V224v41.7V288 406.3c0 23 18.7 41.7 41.7 41.7H112v32c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c61.9 0 112-50.1 112-112c0-40.1-21.1-75.3-52.7-95.1C280.3 222.6 288 200.2 288 176c0-61.9-50.1-112-112-112V32c0-17.7-14.3-32-32-32zM112 128v96H64V128h48zm64 96V128c26.5 0 48 21.5 48 48s-21.5 48-48 48zm-64 64v96H64V288h48zm64 96V288h32c26.5 0 48 21.5 48 48s-21.5 48-48 48H176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M144 0c-17.7 0-32 14.3-32 32V64H37.6C16.8 64 0 80.8 0 101.6V224v41.7V288 406.3c0 23 18.7 41.7 41.7 41.7H112v32c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c61.9 0 112-50.1 112-112c0-40.1-21.1-75.3-52.7-95.1C280.3 222.6 288 200.2 288 176c0-61.9-50.1-112-112-112V32c0-17.7-14.3-32-32-32zM112 128v96H64V128h48zm64 96V128c26.5 0 48 21.5 48 48s-21.5 48-48 48zm-64 64v96H64V288h48zm64 96V288h32c26.5 0 48 21.5 48 48s-21.5 48-48 48H176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ban\": {\n    \"aliases\": {\n      \"names\": [\"cancel\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6ab\"],\n        \"secondary\": [\"10f05e\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"abort\",\n        \"ban\",\n        \"block\",\n        \"cancel\",\n        \"delete\",\n        \"entry\",\n        \"forbidden\",\n        \"hide\",\n        \"no\",\n        \"not\",\n        \"prohibit\",\n        \"prohibited\",\n        \"remove\",\n        \"stop\",\n        \"trash\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f05e\",\n    \"label\": \"Ban\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M367.2 412.5L99.5 144.8C77.1 176.1 64 214.5 64 256c0 106 86 192 192 192c41.5 0 79.9-13.1 111.2-35.5zm45.3-45.3C434.9 335.9 448 297.5 448 256c0-106-86-192-192-192c-41.5 0-79.9 13.1-111.2 35.5L412.5 367.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ban-smoking\": {\n    \"aliases\": {\n      \"names\": [\"smoking-ban\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6ad\"],\n        \"secondary\": [\"10f54d\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ban\",\n        \"cancel\",\n        \"forbidden\",\n        \"no\",\n        \"no smoking\",\n        \"non-smoking\",\n        \"not\",\n        \"prohibited\",\n        \"smoking\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f54d\",\n    \"label\": \"Ban Smoking\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M99.5 144.8L178.7 224l96 96 92.5 92.5C335.9 434.9 297.5 448 256 448C150 448 64 362 64 256c0-41.5 13.1-79.9 35.5-111.2zM333.3 288l-32-32H384v32H333.3zm32 32H400c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H269.3L144.8 99.5C176.1 77.1 214.5 64 256 64c106 0 192 86 192 192c0 41.5-13.1 79.9-35.5 111.2L365.3 320zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM272 96c-8.8 0-16 7.2-16 16c0 26.5 21.5 48 48 48h32c8.8 0 16 7.2 16 16s7.2 16 16 16s16-7.2 16-16c0-26.5-21.5-48-48-48H304c-8.8 0-16-7.2-16-16s-7.2-16-16-16zM229.5 320l-96-96H112c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16H229.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M99.5 144.8L178.7 224l96 96 92.5 92.5C335.9 434.9 297.5 448 256 448C150 448 64 362 64 256c0-41.5 13.1-79.9 35.5-111.2zM333.3 288l-32-32H384v32H333.3zm32 32H400c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H269.3L144.8 99.5C176.1 77.1 214.5 64 256 64c106 0 192 86 192 192c0 41.5-13.1 79.9-35.5 111.2L365.3 320zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM272 96c-8.8 0-16 7.2-16 16c0 26.5 21.5 48 48 48h32c8.8 0 16 7.2 16 16s7.2 16 16 16s16-7.2 16-16c0-26.5-21.5-48-48-48H304c-8.8 0-16-7.2-16-16s-7.2-16-16-16zM229.5 320l-96-96H112c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16H229.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bandage\": {\n    \"aliases\": {\n      \"names\": [\"band-aid\"],\n      \"unicodes\": {\n        \"composite\": [\"1fa79\"],\n        \"secondary\": [\"10f462\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.7\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"adhesive bandage\", \"bandage\", \"boo boo\", \"first aid\", \"ouch\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f462\",\n    \"label\": \"Bandage\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766749,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M480 416h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H480V416zM448 96H192V416H448V96zM64 96C28.7 96 0 124.7 0 160V352c0 35.3 28.7 64 64 64h96V96H64zM248 208a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM248 304a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M480 416h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H480V416zM448 96H192V416H448V96zM64 96C28.7 96 0 124.7 0 160V352c0 35.3 28.7 64 64 64h96V96H64zM248 208a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM248 304a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bandcamp\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"5.13.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2d5\",\n    \"label\": \"Bandcamp\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bangladeshi-taka-sign\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bdt\", \"currency\", \"tk\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2e6\",\n    \"label\": \"Bangladeshi Taka Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M36 32.2C18.4 30.1 2.4 42.5 .2 60S10.5 93.6 28 95.8l7.9 1c16 2 28 15.6 28 31.8V160H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64V384c0 53 43 96 96 96h32c106 0 192-86 192-192V256c0-53-43-96-96-96H272c-17.7 0-32 14.3-32 32s14.3 32 32 32h16c17.7 0 32 14.3 32 32v32c0 70.7-57.3 128-128 128H160c-17.7 0-32-14.3-32-32V224h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H128V128.5c0-48.4-36.1-89.3-84.1-95.3l-7.9-1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M36 32.2C18.4 30.1 2.4 42.5 .2 60S10.5 93.6 28 95.8l7.9 1c16 2 28 15.6 28 31.8V160H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64V384c0 53 43 96 96 96h32c106 0 192-86 192-192V256c0-53-43-96-96-96H272c-17.7 0-32 14.3-32 32s14.3 32 32 32h16c17.7 0 32 14.3 32 32v32c0 70.7-57.3 128-128 128H160c-17.7 0-32-14.3-32-32V224h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H128V128.5c0-48.4-36.1-89.3-84.1-95.3l-7.9-1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"barcode\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f02a\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"info\", \"laser\", \"price\", \"scan\", \"upc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f02a\",\n    \"label\": \"Barcode\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M24 32C10.7 32 0 42.7 0 56V456c0 13.3 10.7 24 24 24H40c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H24zm88 0c-8.8 0-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V48c0-8.8-7.2-16-16-16zm72 0c-13.3 0-24 10.7-24 24V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H184zm96 0c-13.3 0-24 10.7-24 24V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H280zM448 56V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H472c-13.3 0-24 10.7-24 24zm-64-8V464c0 8.8 7.2 16 16 16s16-7.2 16-16V48c0-8.8-7.2-16-16-16s-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M24 32C10.7 32 0 42.7 0 56V456c0 13.3 10.7 24 24 24H40c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H24zm88 0c-8.8 0-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V48c0-8.8-7.2-16-16-16zm72 0c-13.3 0-24 10.7-24 24V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H184zm96 0c-13.3 0-24 10.7-24 24V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H280zM448 56V456c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24H472c-13.3 0-24 10.7-24 24zm-64-8V464c0 8.8 7.2 16 16 16s16-7.2 16-16V48c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bars\": {\n    \"aliases\": {\n      \"names\": [\"navicon\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0c9\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"drag\",\n        \"hamburger\",\n        \"list\",\n        \"menu\",\n        \"nav\",\n        \"navigation\",\n        \"ol\",\n        \"reorder\",\n        \"settings\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c9\",\n    \"label\": \"Bars\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bars-progress\": {\n    \"aliases\": {\n      \"names\": [\"tasks-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f828\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"downloading\",\n        \"downloads\",\n        \"loading\",\n        \"poll\",\n        \"progress\",\n        \"project management\",\n        \"settings\",\n        \"to do\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f828\",\n    \"label\": \"Bars Progress\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 160H320V128H448v32zM48 64C21.5 64 0 85.5 0 112v64c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H48zM448 352v32H192V352H448zM48 288c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V336c0-26.5-21.5-48-48-48H48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 160H320V128H448v32zM48 64C21.5 64 0 85.5 0 112v64c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H48zM448 352v32H192V352H448zM48 288c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V336c0-26.5-21.5-48-48-48H48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bars-staggered\": {\n    \"aliases\": {\n      \"names\": [\"reorder\", \"stream\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f550\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"flow\", \"list\", \"timeline\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f550\",\n    \"label\": \"Bars Staggered\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"baseball\": {\n    \"aliases\": {\n      \"names\": [\"baseball-ball\"],\n      \"unicodes\": {\n        \"composite\": [\"1f94e\", \"26be\"],\n        \"secondary\": [\"10f433\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.5\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ball\",\n        \"baseball\",\n        \"foul\",\n        \"glove\",\n        \"hardball\",\n        \"league\",\n        \"leather\",\n        \"mlb\",\n        \"softball\",\n        \"sport\",\n        \"underarm\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f433\",\n    \"label\": \"Baseball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M62.7 223.4c-4.8 .4-9.7 .6-14.7 .6c-15.6 0-30.8-2-45.2-5.9C19.2 107.1 107.1 19.2 218.1 2.8C222 17.2 224 32.4 224 48c0 4.9-.2 9.8-.6 14.7c-.7 8.8 5.8 16.5 14.6 17.3s16.5-5.8 17.3-14.6c.5-5.7 .7-11.5 .7-17.3c0-16.5-1.9-32.6-5.6-47.9c1.8 0 3.7-.1 5.6-.1C397.4 0 512 114.6 512 256c0 1.9 0 3.7-.1 5.6c-15.4-3.6-31.4-5.6-47.9-5.6c-5.8 0-11.6 .2-17.3 .7c-8.8 .7-15.4 8.5-14.6 17.3s8.5 15.4 17.3 14.6c4.8-.4 9.7-.6 14.7-.6c15.6 0 30.8 2 45.2 5.9C492.8 404.9 404.9 492.8 293.9 509.2C290 494.8 288 479.6 288 464c0-4.9 .2-9.8 .6-14.7c.7-8.8-5.8-16.5-14.6-17.3s-16.5 5.8-17.3 14.6c-.5 5.7-.7 11.5-.7 17.3c0 16.5 1.9 32.6 5.6 47.9c-1.8 0-3.7 .1-5.6 .1C114.6 512 0 397.4 0 256c0-1.9 0-3.7 .1-5.6C15.4 254.1 31.5 256 48 256c5.8 0 11.6-.2 17.3-.7c8.8-.7 15.4-8.5 14.6-17.3s-8.5-15.4-17.3-14.6zM121.3 208c-8 3.7-11.6 13.2-7.9 21.2s13.2 11.6 21.2 7.9c45.2-20.8 81.7-57.2 102.5-102.5c3.7-8 .2-17.5-7.9-21.2s-17.5-.2-21.2 7.9c-17.6 38.3-48.5 69.2-86.7 86.7zm277.2 74.7c-3.7-8-13.2-11.6-21.2-7.9c-45.2 20.8-81.7 57.2-102.5 102.5c-3.7 8-.2 17.5 7.9 21.2s17.5 .2 21.2-7.9c17.6-38.3 48.5-69.2 86.7-86.7c8-3.7 11.6-13.2 7.9-21.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M62.7 223.4c-4.8 .4-9.7 .6-14.7 .6c-15.6 0-30.8-2-45.2-5.9C19.2 107.1 107.1 19.2 218.1 2.8C222 17.2 224 32.4 224 48c0 4.9-.2 9.8-.6 14.7c-.7 8.8 5.8 16.5 14.6 17.3s16.5-5.8 17.3-14.6c.5-5.7 .7-11.5 .7-17.3c0-16.5-1.9-32.6-5.6-47.9c1.8 0 3.7-.1 5.6-.1C397.4 0 512 114.6 512 256c0 1.9 0 3.7-.1 5.6c-15.4-3.6-31.4-5.6-47.9-5.6c-5.8 0-11.6 .2-17.3 .7c-8.8 .7-15.4 8.5-14.6 17.3s8.5 15.4 17.3 14.6c4.8-.4 9.7-.6 14.7-.6c15.6 0 30.8 2 45.2 5.9C492.8 404.9 404.9 492.8 293.9 509.2C290 494.8 288 479.6 288 464c0-4.9 .2-9.8 .6-14.7c.7-8.8-5.8-16.5-14.6-17.3s-16.5 5.8-17.3 14.6c-.5 5.7-.7 11.5-.7 17.3c0 16.5 1.9 32.6 5.6 47.9c-1.8 0-3.7 .1-5.6 .1C114.6 512 0 397.4 0 256c0-1.9 0-3.7 .1-5.6C15.4 254.1 31.5 256 48 256c5.8 0 11.6-.2 17.3-.7c8.8-.7 15.4-8.5 14.6-17.3s-8.5-15.4-17.3-14.6zM121.3 208c-8 3.7-11.6 13.2-7.9 21.2s13.2 11.6 21.2 7.9c45.2-20.8 81.7-57.2 102.5-102.5c3.7-8 .2-17.5-7.9-21.2s-17.5-.2-21.2 7.9c-17.6 38.3-48.5 69.2-86.7 86.7zm277.2 74.7c-3.7-8-13.2-11.6-21.2-7.9c-45.2 20.8-81.7 57.2-102.5 102.5c-3.7 8-.2 17.5 7.9 21.2s17.5 .2 21.2-7.9c17.6-38.3 48.5-69.2 86.7-86.7c8-3.7 11.6-13.2 7.9-21.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"baseball-bat-ball\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f432\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bat\", \"league\", \"mlb\", \"slugger\", \"softball\", \"sport\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f432\",\n    \"label\": \"Baseball Bat Ball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M424 0c-12.4 0-24.2 4.9-33 13.7L233.5 171.2c-10.5 10.5-19.8 22.1-27.7 34.6L132.7 321.6c-7.3 11.5-15.8 22.2-25.5 31.9L69.9 390.7l51.3 51.3 37.3-37.3c9.6-9.6 20.3-18.2 31.9-25.5l115.8-73.1c12.5-7.9 24.1-17.2 34.6-27.7L498.3 121c8.7-8.7 13.7-20.6 13.7-33s-4.9-24.2-13.7-33L457 13.7C448.2 4.9 436.4 0 424 0zm88 432a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM15 399c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L49 399c-9.4-9.4-24.6-9.4-33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M424 0c-12.4 0-24.2 4.9-33 13.7L233.5 171.2c-10.5 10.5-19.8 22.1-27.7 34.6L132.7 321.6c-7.3 11.5-15.8 22.2-25.5 31.9L69.9 390.7l51.3 51.3 37.3-37.3c9.6-9.6 20.3-18.2 31.9-25.5l115.8-73.1c12.5-7.9 24.1-17.2 34.6-27.7L498.3 121c8.7-8.7 13.7-20.6 13.7-33s-4.9-24.2-13.7-33L457 13.7C448.2 4.9 436.4 0 424 0zm88 432a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM15 399c-9.4 9.4-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L49 399c-9.4-9.4-24.6-9.4-33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"basket-shopping\": {\n    \"aliases\": {\n      \"names\": [\"shopping-basket\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f291\"]\n      }\n    },\n    \"changes\": [\n      \"4.5.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"buy\", \"checkout\", \"grocery\", \"payment\", \"purchase\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f291\",\n    \"label\": \"Basket Shopping\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M253.3 35.1c6.1-11.8 1.5-26.3-10.2-32.4s-26.3-1.5-32.4 10.2L117.6 192H32c-17.7 0-32 14.3-32 32s14.3 32 32 32L83.9 463.5C91 492 116.6 512 146 512H430c29.4 0 55-20 62.1-48.5L544 256c17.7 0 32-14.3 32-32s-14.3-32-32-32H458.4L365.3 12.9C359.2 1.2 344.7-3.4 332.9 2.7s-16.3 20.6-10.2 32.4L404.3 192H171.7L253.3 35.1zM192 304v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V304c0-8.8 7.2-16 16-16s16 7.2 16 16zm96-16c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V304c0-8.8 7.2-16 16-16zm128 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V304c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M253.3 35.1c6.1-11.8 1.5-26.3-10.2-32.4s-26.3-1.5-32.4 10.2L117.6 192H32c-17.7 0-32 14.3-32 32s14.3 32 32 32L83.9 463.5C91 492 116.6 512 146 512H430c29.4 0 55-20 62.1-48.5L544 256c17.7 0 32-14.3 32-32s-14.3-32-32-32H458.4L365.3 12.9C359.2 1.2 344.7-3.4 332.9 2.7s-16.3 20.6-10.2 32.4L404.3 192H171.7L253.3 35.1zM192 304v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V304c0-8.8 7.2-16 16-16s16 7.2 16 16zm96-16c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V304c0-8.8 7.2-16 16-16zm128 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V304c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"basketball\": {\n    \"aliases\": {\n      \"names\": [\"basketball-ball\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3c0\"],\n        \"secondary\": [\"10f434\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.5\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ball\", \"basketball\", \"dribble\", \"dunk\", \"hoop\", \"nba\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f434\",\n    \"label\": \"Basketball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M86.6 64l85.2 85.2C194.5 121.7 208 86.4 208 48c0-14.7-2-28.9-5.7-42.4C158.6 15 119 35.5 86.6 64zM64 86.6C35.5 119 15 158.6 5.6 202.3C19.1 206 33.3 208 48 208c38.4 0 73.7-13.5 101.3-36.1L64 86.6zM256 0c-7.3 0-14.6 .3-21.8 .9C238 16 240 31.8 240 48c0 47.3-17.1 90.5-45.4 124L256 233.4 425.4 64C380.2 24.2 320.9 0 256 0zM48 240c-16.2 0-32-2-47.1-5.8C.3 241.4 0 248.7 0 256c0 64.9 24.2 124.2 64 169.4L233.4 256 172 194.6C138.5 222.9 95.3 240 48 240zm463.1 37.8c.6-7.2 .9-14.5 .9-21.8c0-64.9-24.2-124.2-64-169.4L278.6 256 340 317.4c33.4-28.3 76.7-45.4 124-45.4c16.2 0 32 2 47.1 5.8zm-4.7 31.9C492.9 306 478.7 304 464 304c-38.4 0-73.7 13.5-101.3 36.1L448 425.4c28.5-32.3 49.1-71.9 58.4-115.7zM340.1 362.7C317.5 390.3 304 425.6 304 464c0 14.7 2 28.9 5.7 42.4C353.4 497 393 476.5 425.4 448l-85.2-85.2zM317.4 340L256 278.6 86.6 448c45.1 39.8 104.4 64 169.4 64c7.3 0 14.6-.3 21.8-.9C274 496 272 480.2 272 464c0-47.3 17.1-90.5 45.4-124z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M86.6 64l85.2 85.2C194.5 121.7 208 86.4 208 48c0-14.7-2-28.9-5.7-42.4C158.6 15 119 35.5 86.6 64zM64 86.6C35.5 119 15 158.6 5.6 202.3C19.1 206 33.3 208 48 208c38.4 0 73.7-13.5 101.3-36.1L64 86.6zM256 0c-7.3 0-14.6 .3-21.8 .9C238 16 240 31.8 240 48c0 47.3-17.1 90.5-45.4 124L256 233.4 425.4 64C380.2 24.2 320.9 0 256 0zM48 240c-16.2 0-32-2-47.1-5.8C.3 241.4 0 248.7 0 256c0 64.9 24.2 124.2 64 169.4L233.4 256 172 194.6C138.5 222.9 95.3 240 48 240zm463.1 37.8c.6-7.2 .9-14.5 .9-21.8c0-64.9-24.2-124.2-64-169.4L278.6 256 340 317.4c33.4-28.3 76.7-45.4 124-45.4c16.2 0 32 2 47.1 5.8zm-4.7 31.9C492.9 306 478.7 304 464 304c-38.4 0-73.7 13.5-101.3 36.1L448 425.4c28.5-32.3 49.1-71.9 58.4-115.7zM340.1 362.7C317.5 390.3 304 425.6 304 464c0 14.7 2 28.9 5.7 42.4C353.4 497 393 476.5 425.4 448l-85.2-85.2zM317.4 340L256 278.6 86.6 448c45.1 39.8 104.4 64 169.4 64c7.3 0 14.6-.3 21.8-.9C274 496 272 480.2 272 464c0-47.3 17.1-90.5 45.4-124z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bath\": {\n    \"aliases\": {\n      \"names\": [\"bathtub\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6c1\"],\n        \"secondary\": [\"10f2cd\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bath\", \"bathtub\", \"clean\", \"shower\", \"tub\", \"wash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2cd\",\n    \"label\": \"Bath\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 77.3c0-7.3 5.9-13.3 13.3-13.3c3.5 0 6.9 1.4 9.4 3.9l14.9 14.9C130 91.8 128 101.7 128 112c0 19.9 7.2 38 19.2 52c-5.3 9.2-4 21.1 3.8 29c9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9c-7.9-7.9-19.8-9.1-29-3.8C246 39.2 227.9 32 208 32c-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0C66.6 0 32 34.6 32 77.3V256c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H96V77.3zM32 352v16c0 28.4 12.4 54 32 71.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V464H384v16c0 17.7 14.3 32 32 32s32-14.3 32-32V439.6c19.6-17.6 32-43.1 32-71.6V352H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 77.3c0-7.3 5.9-13.3 13.3-13.3c3.5 0 6.9 1.4 9.4 3.9l14.9 14.9C130 91.8 128 101.7 128 112c0 19.9 7.2 38 19.2 52c-5.3 9.2-4 21.1 3.8 29c9.4 9.4 24.6 9.4 33.9 0L289 89c9.4-9.4 9.4-24.6 0-33.9c-7.9-7.9-19.8-9.1-29-3.8C246 39.2 227.9 32 208 32c-10.3 0-20.2 2-29.2 5.5L163.9 22.6C149.4 8.1 129.7 0 109.3 0C66.6 0 32 34.6 32 77.3V256c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H96V77.3zM32 352v16c0 28.4 12.4 54 32 71.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V464H384v16c0 17.7 14.3 32 32 32s32-14.3 32-32V439.6c19.6-17.6 32-43.1 32-71.6V352H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"battery-empty\": {\n    \"aliases\": {\n      \"names\": [\"battery-0\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f244\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"charge\", \"dead\", \"power\", \"status\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f244\",\n    \"label\": \"Battery Empty\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M80 160c-8.8 0-16 7.2-16 16V336c0 8.8 7.2 16 16 16H464c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H80zM0 176c0-44.2 35.8-80 80-80H464c44.2 0 80 35.8 80 80v16c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32v16c0 44.2-35.8 80-80 80H80c-44.2 0-80-35.8-80-80V176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M80 160c-8.8 0-16 7.2-16 16V336c0 8.8 7.2 16 16 16H464c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H80zM0 176c0-44.2 35.8-80 80-80H464c44.2 0 80 35.8 80 80v16c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32v16c0 44.2-35.8 80-80 80H80c-44.2 0-80-35.8-80-80V176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"battery-full\": {\n    \"aliases\": {\n      \"names\": [\"battery\", \"battery-5\"],\n      \"unicodes\": {\n        \"composite\": [\"1f50b\"],\n        \"secondary\": [\"10f240\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"batter\", \"battery\", \"charge\", \"power\", \"status\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f240\",\n    \"label\": \"Battery Full\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm368 96H96V320H448V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm368 96H96V320H448V192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"battery-half\": {\n    \"aliases\": {\n      \"names\": [\"battery-3\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f242\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"charge\", \"power\", \"status\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f242\",\n    \"label\": \"Battery Half\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm208 96H96V320H288V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm208 96H96V320H288V192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"battery-quarter\": {\n    \"aliases\": {\n      \"names\": [\"battery-2\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f243\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"charge\", \"low\", \"power\", \"status\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f243\",\n    \"label\": \"Battery Quarter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm112 96H96V320h96V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm112 96H96V320h96V192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"battery-three-quarters\": {\n    \"aliases\": {\n      \"names\": [\"battery-4\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f241\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"charge\", \"power\", \"status\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f241\",\n    \"label\": \"Battery Three Quarters\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm272 96H96V320H352V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M464 160c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16H464zM80 96C35.8 96 0 131.8 0 176V336c0 44.2 35.8 80 80 80H464c44.2 0 80-35.8 80-80V320c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32V176c0-44.2-35.8-80-80-80H80zm272 96H96V320H352V192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"battle-net\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f835\",\n    \"label\": \"Battle.net\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bed\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6cc\"],\n        \"secondary\": [\"10f236\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"hospital\",\n        \"hotel\",\n        \"lodging\",\n        \"mattress\",\n        \"patient\",\n        \"person in bed\",\n        \"rest\",\n        \"sleep\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f236\",\n    \"label\": \"Bed\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 32c17.7 0 32 14.3 32 32V320H288V160c0-17.7 14.3-32 32-32H544c53 0 96 43 96 96V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V416H352 320 64v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 46.3 14.3 32 32 32zm144 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 32c17.7 0 32 14.3 32 32V320H288V160c0-17.7 14.3-32 32-32H544c53 0 96 43 96 96V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V416H352 320 64v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 46.3 14.3 32 32 32zm144 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bed-pulse\": {\n    \"aliases\": {\n      \"names\": [\"procedures\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f487\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"EKG\",\n        \"bed\",\n        \"electrocardiogram\",\n        \"health\",\n        \"hospital\",\n        \"life\",\n        \"patient\",\n        \"vital\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f487\",\n    \"label\": \"Bed Pulse\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M483.2 9.6L524 64h92c13.3 0 24 10.7 24 24s-10.7 24-24 24H512c-7.6 0-14.7-3.6-19.2-9.6L468.7 70.3l-47 99.9c-3.7 7.8-11.3 13.1-19.9 13.7s-16.9-3.4-21.7-10.6L339.2 112H216c-13.3 0-24-10.7-24-24s10.7-24 24-24H352c8 0 15.5 4 20 10.7l24.4 36.6 45.9-97.5C445.9 6.2 453.2 1 461.6 .1s16.6 2.7 21.6 9.5zM320 160h12.7l20.7 31.1c11.2 16.8 30.6 26.3 50.7 24.8s37.9-13.7 46.5-32L461.9 160H544c53 0 96 43 96 96V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H352 320 64v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64s32 14.3 32 32V352H288V192c0-17.7 14.3-32 32-32zm-144 0a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M483.2 9.6L524 64h92c13.3 0 24 10.7 24 24s-10.7 24-24 24H512c-7.6 0-14.7-3.6-19.2-9.6L468.7 70.3l-47 99.9c-3.7 7.8-11.3 13.1-19.9 13.7s-16.9-3.4-21.7-10.6L339.2 112H216c-13.3 0-24-10.7-24-24s10.7-24 24-24H352c8 0 15.5 4 20 10.7l24.4 36.6 45.9-97.5C445.9 6.2 453.2 1 461.6 .1s16.6 2.7 21.6 9.5zM320 160h12.7l20.7 31.1c11.2 16.8 30.6 26.3 50.7 24.8s37.9-13.7 46.5-32L461.9 160H544c53 0 96 43 96 96V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H352 320 64v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V96C0 78.3 14.3 64 32 64s32 14.3 32 32V352H288V192c0-17.7 14.3-32 32-32zm-144 0a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"beer-mug-empty\": {\n    \"aliases\": {\n      \"names\": [\"beer\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0fc\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"ale\",\n        \"bar\",\n        \"beverage\",\n        \"brew\",\n        \"brewery\",\n        \"drink\",\n        \"foam\",\n        \"lager\",\n        \"liquor\",\n        \"mug\",\n        \"stein\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0fc\",\n    \"label\": \"Beer Mug Empty\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 64c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32V96h51.2c42.4 0 76.8 34.4 76.8 76.8V274.9c0 30.4-17.9 57.9-45.6 70.2L384 381.7V416c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V64zM384 311.6l56.4-25.1c4.6-2.1 7.6-6.6 7.6-11.7V172.8c0-7.1-5.7-12.8-12.8-12.8H384V311.6zM160 144c0-8.8-7.2-16-16-16s-16 7.2-16 16V368c0 8.8 7.2 16 16 16s16-7.2 16-16V144zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V368c0 8.8 7.2 16 16 16s16-7.2 16-16V144zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V368c0 8.8 7.2 16 16 16s16-7.2 16-16V144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 64c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32V96h51.2c42.4 0 76.8 34.4 76.8 76.8V274.9c0 30.4-17.9 57.9-45.6 70.2L384 381.7V416c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V64zM384 311.6l56.4-25.1c4.6-2.1 7.6-6.6 7.6-11.7V172.8c0-7.1-5.7-12.8-12.8-12.8H384V311.6zM160 144c0-8.8-7.2-16-16-16s-16 7.2-16 16V368c0 8.8 7.2 16 16 16s16-7.2 16-16V144zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V368c0 8.8 7.2 16 16 16s16-7.2 16-16V144zm64 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V368c0 8.8 7.2 16 16 16s16-7.2 16-16V144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"behance\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1b4\",\n    \"label\": \"Behance\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bell\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f514\", \"f0a2\"],\n        \"secondary\": [\"10f0f3\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alarm\",\n        \"alert\",\n        \"bel\",\n        \"bell\",\n        \"chime\",\n        \"notification\",\n        \"reminder\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0f3\",\n    \"label\": \"Bell\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0c-17.7 0-32 14.3-32 32V51.2C119 66 64 130.6 64 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416H416c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0c-17.7 0-32 14.3-32 32V51.2C119 66 64 130.6 64 208v18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416H416c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0c-17.7 0-32 14.3-32 32V49.9C119.5 61.4 64 124.2 64 200v33.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416H424c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6C399.5 322.9 384 278.8 384 233.4V200c0-75.8-55.5-138.6-128-150.1V32c0-17.7-14.3-32-32-32zm0 96h8c57.4 0 104 46.6 104 104v33.4c0 47.9 13.9 94.6 39.7 134.6H72.3C98.1 328 112 281.3 112 233.4V200c0-57.4 46.6-104 104-104h8zm64 352H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0c-17.7 0-32 14.3-32 32V49.9C119.5 61.4 64 124.2 64 200v33.4c0 45.4-15.5 89.5-43.8 124.9L5.3 377c-5.8 7.2-6.9 17.1-2.9 25.4S14.8 416 24 416H424c9.2 0 17.6-5.3 21.6-13.6s2.9-18.2-2.9-25.4l-14.9-18.6C399.5 322.9 384 278.8 384 233.4V200c0-75.8-55.5-138.6-128-150.1V32c0-17.7-14.3-32-32-32zm0 96h8c57.4 0 104 46.6 104 104v33.4c0 47.9 13.9 94.6 39.7 134.6H72.3C98.1 328 112 281.3 112 233.4V200c0-57.4 46.6-104 104-104h8zm64 352H224 160c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"bell-concierge\": {\n    \"aliases\": {\n      \"names\": [\"concierge-bell\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6ce\"],\n        \"secondary\": [\"10f562\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"attention\",\n        \"bell\",\n        \"bellhop\",\n        \"bellhop bell\",\n        \"hotel\",\n        \"receptionist\",\n        \"service\",\n        \"support\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f562\",\n    \"label\": \"Bell Concierge\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M216 64c-13.3 0-24 10.7-24 24s10.7 24 24 24h16v33.3C119.6 157.2 32 252.4 32 368H480c0-115.6-87.6-210.8-200-222.7V112h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H256 216zM24 400c-13.3 0-24 10.7-24 24s10.7 24 24 24H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M216 64c-13.3 0-24 10.7-24 24s10.7 24 24 24h16v33.3C119.6 157.2 32 252.4 32 368H480c0-115.6-87.6-210.8-200-222.7V112h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H256 216zM24 400c-13.3 0-24 10.7-24 24s10.7 24 24 24H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bell-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f515\", \"f1f7\"],\n        \"secondary\": [\"10f1f6\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alert\",\n        \"bell\",\n        \"bell with slash\",\n        \"cancel\",\n        \"disabled\",\n        \"forbidden\",\n        \"mute\",\n        \"notification\",\n        \"off\",\n        \"quiet\",\n        \"reminder\",\n        \"silent\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1f6\",\n    \"label\": \"Bell Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-87.5-68.6c.5-1.7 .7-3.5 .7-5.4c0-27.6-11-54.1-30.5-73.7L512 320c-20.5-20.5-32-48.3-32-77.3V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V51.2c-42.6 8.6-79 34.2-102 69.3L38.8 5.1zM160 242.7c0 29-11.5 56.8-32 77.3l-1.5 1.5C107 341 96 367.5 96 395.2c0 11.5 9.3 20.8 20.8 20.8H406.2L160 222.1v20.7zM384 448H320 256c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-87.5-68.6c.5-1.7 .7-3.5 .7-5.4c0-27.6-11-54.1-30.5-73.7L512 320c-20.5-20.5-32-48.3-32-77.3V208c0-77.4-55-142-128-156.8V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V51.2c-42.6 8.6-79 34.2-102 69.3L38.8 5.1zM160 242.7c0 29-11.5 56.8-32 77.3l-1.5 1.5C107 341 96 367.5 96 395.2c0 11.5 9.3 20.8 20.8 20.8H406.2L160 222.1v20.7zM384 448H320 256c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L542.6 400c2.7-7.8 1.3-16.5-3.9-23l-14.9-18.6C495.5 322.9 480 278.8 480 233.4V200c0-75.8-55.5-138.6-128-150.1V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V49.9c-43.9 7-81.5 32.7-104.4 68.7L38.8 5.1zM221.7 148.4C239.6 117.1 273.3 96 312 96h8 8c57.4 0 104 46.6 104 104v33.4c0 32.7 6.4 64.8 18.7 94.5L221.7 148.4zM406.2 416l-60.9-48H168.3c21.2-32.8 34.4-70.3 38.4-109.1L160 222.1v11.4c0 45.4-15.5 89.5-43.8 124.9L101.3 377c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6H406.2zM384 448H320 256c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L542.6 400c2.7-7.8 1.3-16.5-3.9-23l-14.9-18.6C495.5 322.9 480 278.8 480 233.4V200c0-75.8-55.5-138.6-128-150.1V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V49.9c-43.9 7-81.5 32.7-104.4 68.7L38.8 5.1zM221.7 148.4C239.6 117.1 273.3 96 312 96h8 8c57.4 0 104 46.6 104 104v33.4c0 32.7 6.4 64.8 18.7 94.5L221.7 148.4zM406.2 416l-60.9-48H168.3c21.2-32.8 34.4-70.3 38.4-109.1L160 222.1v11.4c0 45.4-15.5 89.5-43.8 124.9L101.3 377c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6H406.2zM384 448H320 256c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7s18.7-28.3 18.7-45.3z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"bezier-curve\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f55b\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"curves\", \"illustrator\", \"lines\", \"path\", \"vector\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f55b\",\n    \"label\": \"Bezier Curve\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M296 136V88h48v48H296zM288 32c-26.5 0-48 21.5-48 48v4H121.6C111.2 62.7 89.3 48 64 48C28.7 48 0 76.7 0 112s28.7 64 64 64c25.3 0 47.2-14.7 57.6-36h66.9c-58.9 39.6-98.9 105-104 180H80c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h64c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48h-3.3c5.9-67 48.5-123.4 107.5-149.1c8.6 12.7 23.2 21.1 39.8 21.1h64c16.6 0 31.1-8.4 39.8-21.1c59 25.7 101.6 82.1 107.5 149.1H496c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h64c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48h-4.5c-5-75-45.1-140.4-104-180h66.9c10.4 21.3 32.3 36 57.6 36c35.3 0 64-28.7 64-64s-28.7-64-64-64c-25.3 0-47.2 14.7-57.6 36H400V80c0-26.5-21.5-48-48-48H288zM88 376h48v48H88V376zm416 48V376h48v48H504z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M296 136V88h48v48H296zM288 32c-26.5 0-48 21.5-48 48v4H121.6C111.2 62.7 89.3 48 64 48C28.7 48 0 76.7 0 112s28.7 64 64 64c25.3 0 47.2-14.7 57.6-36h66.9c-58.9 39.6-98.9 105-104 180H80c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h64c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48h-3.3c5.9-67 48.5-123.4 107.5-149.1c8.6 12.7 23.2 21.1 39.8 21.1h64c16.6 0 31.1-8.4 39.8-21.1c59 25.7 101.6 82.1 107.5 149.1H496c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h64c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48h-4.5c-5-75-45.1-140.4-104-180h66.9c10.4 21.3 32.3 36 57.6 36c35.3 0 64-28.7 64-64s-28.7-64-64-64c-25.3 0-47.2 14.7-57.6 36H400V80c0-26.5-21.5-48-48-48H288zM88 376h48v48H88V376zm416 48V376h48v48H504z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bicycle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6b2\"],\n        \"secondary\": [\"10f206\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bicycle\",\n        \"bike\",\n        \"gears\",\n        \"pedal\",\n        \"transportation\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f206\",\n    \"label\": \"Bicycle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24h25.7l34.6 64H222.9l-27.4-38C191 99.7 183.7 96 176 96H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h43.7l22.1 30.7-26.6 53.1c-10-2.5-20.5-3.8-31.2-3.8C57.3 224 0 281.3 0 352s57.3 128 128 128c65.3 0 119.1-48.9 127-112h49c8.5 0 16.3-4.5 20.7-11.8l84.8-143.5 21.7 40.1C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L375.4 48.8C369.8 38.4 359 32 347.2 32H312zM458.6 303.7l32.3 59.7c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-32.3-59.7c3.6-.6 7.4-.9 11.2-.9c39.8 0 72 32.2 72 72s-32.2 72-72 72s-72-32.2-72-72c0-18.6 7-35.5 18.6-48.3zM133.2 368h65c-7.3 32.1-36 56-70.2 56c-39.8 0-72-32.2-72-72s32.2-72 72-72c1.7 0 3.4 .1 5.1 .2l-24.2 48.5c-9 18.1 4.1 39.4 24.3 39.4zm33.7-48l50.7-101.3 72.9 101.2-.1 .1H166.8zm90.6-128H365.9L317 274.8 257.4 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24h25.7l34.6 64H222.9l-27.4-38C191 99.7 183.7 96 176 96H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h43.7l22.1 30.7-26.6 53.1c-10-2.5-20.5-3.8-31.2-3.8C57.3 224 0 281.3 0 352s57.3 128 128 128c65.3 0 119.1-48.9 127-112h49c8.5 0 16.3-4.5 20.7-11.8l84.8-143.5 21.7 40.1C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L375.4 48.8C369.8 38.4 359 32 347.2 32H312zM458.6 303.7l32.3 59.7c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-32.3-59.7c3.6-.6 7.4-.9 11.2-.9c39.8 0 72 32.2 72 72s-32.2 72-72 72s-72-32.2-72-72c0-18.6 7-35.5 18.6-48.3zM133.2 368h65c-7.3 32.1-36 56-70.2 56c-39.8 0-72-32.2-72-72s32.2-72 72-72c1.7 0 3.4 .1 5.1 .2l-24.2 48.5c-9 18.1 4.1 39.4 24.3 39.4zm33.7-48l50.7-101.3 72.9 101.2-.1 .1H166.8zm90.6-128H365.9L317 274.8 257.4 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bilibili\": {\n    \"changes\": [\"6.0.0-beta2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e3d9\",\n    \"label\": \"Bilibili\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M488.6 104.1C505.3 122.2 513 143.8 511.9 169.8V372.2C511.5 398.6 502.7 420.3 485.4 437.3C468.2 454.3 446.3 463.2 419.9 464H92.02C65.57 463.2 43.81 454.2 26.74 436.8C9.682 419.4 .7667 396.5 0 368.2V169.8C.7667 143.8 9.682 122.2 26.74 104.1C43.81 87.75 65.57 78.77 92.02 78H121.4L96.05 52.19C90.3 46.46 87.42 39.19 87.42 30.4C87.42 21.6 90.3 14.34 96.05 8.603C101.8 2.868 109.1 0 117.9 0C126.7 0 134 2.868 139.8 8.603L213.1 78H301.1L375.6 8.603C381.7 2.868 389.2 0 398 0C406.8 0 414.1 2.868 419.9 8.603C425.6 14.34 428.5 21.6 428.5 30.4C428.5 39.19 425.6 46.46 419.9 52.19L394.6 78L423.9 78C450.3 78.77 471.9 87.75 488.6 104.1H488.6zM449.8 173.8C449.4 164.2 446.1 156.4 439.1 150.3C433.9 144.2 425.1 140.9 416.4 140.5H96.05C86.46 140.9 78.6 144.2 72.47 150.3C66.33 156.4 63.07 164.2 62.69 173.8V368.2C62.69 377.4 65.95 385.2 72.47 391.7C78.99 398.2 86.85 401.5 96.05 401.5H416.4C425.6 401.5 433.4 398.2 439.7 391.7C446 385.2 449.4 377.4 449.8 368.2L449.8 173.8zM185.5 216.5C191.8 222.8 195.2 230.6 195.6 239.7V273C195.2 282.2 191.9 289.9 185.8 296.2C179.6 302.5 171.8 305.7 162.2 305.7C152.6 305.7 144.7 302.5 138.6 296.2C132.5 289.9 129.2 282.2 128.8 273V239.7C129.2 230.6 132.6 222.8 138.9 216.5C145.2 210.2 152.1 206.9 162.2 206.5C171.4 206.9 179.2 210.2 185.5 216.5H185.5zM377 216.5C383.3 222.8 386.7 230.6 387.1 239.7V273C386.7 282.2 383.4 289.9 377.3 296.2C371.2 302.5 363.3 305.7 353.7 305.7C344.1 305.7 336.3 302.5 330.1 296.2C323.1 289.9 320.7 282.2 320.4 273V239.7C320.7 230.6 324.1 222.8 330.4 216.5C336.7 210.2 344.5 206.9 353.7 206.5C362.9 206.9 370.7 210.2 377 216.5H377z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bimobject\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f378\",\n    \"label\": \"BIMobject\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"binoculars\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1e5\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"glasses\", \"magnify\", \"scenic\", \"spyglass\", \"view\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1e5\",\n    \"label\": \"Binoculars\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 32h32c17.7 0 32 14.3 32 32V96H96V64c0-17.7 14.3-32 32-32zm64 96V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V388.9c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28H192zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3V448c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V128h99.8zM320 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V96H320V64zm-32 64V288H224V128h64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 32h32c17.7 0 32 14.3 32 32V96H96V64c0-17.7 14.3-32 32-32zm64 96V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V388.9c0-34.6 9.4-68.6 27.2-98.3C40.9 267.8 49.7 242.4 53 216L60.5 156c2-16 15.6-28 31.8-28H192zm227.8 0c16.1 0 29.8 12 31.8 28L459 216c3.3 26.4 12.1 51.8 25.8 74.6c17.8 29.7 27.2 63.7 27.2 98.3V448c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V128h99.8zM320 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V96H320V64zm-32 64V288H224V128h64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"biohazard\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2623\"],\n        \"secondary\": [\"10f780\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"biohazard\",\n        \"covid-19\",\n        \"danger\",\n        \"dangerous\",\n        \"epidemic\",\n        \"hazmat\",\n        \"medical\",\n        \"pandemic\",\n        \"radioactive\",\n        \"sign\",\n        \"toxic\",\n        \"waste\",\n        \"zombie\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f780\",\n    \"label\": \"Biohazard\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M173.2 0c-1.8 0-3.5 .7-4.8 2C138.5 32.3 120 74 120 120c0 26.2 6 50.9 16.6 73c-22 2.4-43.8 9.1-64.2 20.5C37.9 232.8 13.3 262.4 .4 296c-.7 1.7-.5 3.7 .5 5.2c2.2 3.7 7.4 4.3 10.6 1.3C64.2 254.3 158 245.1 205 324s-8.1 153.1-77.6 173.2c-4.2 1.2-6.3 5.9-4.1 9.6c1 1.6 2.6 2.7 4.5 3c36.5 5.9 75.2 .1 109.7-19.2c20.4-11.4 37.4-26.5 50.5-43.8c13.1 17.3 30.1 32.4 50.5 43.8c34.5 19.3 73.3 25.2 109.7 19.2c1.9-.3 3.5-1.4 4.5-3c2.2-3.7 .1-8.4-4.1-9.6C379.1 477.1 324 403 371 324s140.7-69.8 193.5-21.4c3.2 2.9 8.4 2.3 10.6-1.3c1-1.6 1.1-3.5 .5-5.2c-12.9-33.6-37.5-63.2-72.1-82.5c-20.4-11.4-42.2-18.1-64.2-20.5C450 170.9 456 146.2 456 120c0-46-18.5-87.7-48.4-118c-1.3-1.3-3-2-4.8-2c-5 0-8.4 5.2-6.7 9.9C421.7 80.5 385.6 176 288 176S154.3 80.5 179.9 9.9c1.7-4.7-1.6-9.9-6.7-9.9zM240 272a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM181.7 417.6c6.3-11.8 9.8-25.1 8.6-39.8c-19.5-18-34-41.4-41.2-67.8c-12.5-8.1-26.2-11.8-40-12.4c-9-.4-18.1 .6-27.1 2.7c7.8 57.1 38.7 106.8 82.9 139.4c6.8-6.7 12.6-14.1 16.8-22.1zM288 64c-28.8 0-56.3 5.9-81.2 16.5c2 8.3 5 16.2 9 23.5c6.8 12.4 16.7 23.1 30.1 30.3c13.3-4.1 27.5-6.3 42.2-6.3s28.8 2.2 42.2 6.3c13.4-7.2 23.3-17.9 30.1-30.3c4-7.3 7-15.2 9-23.5C344.3 69.9 316.8 64 288 64zM426.9 310c-7.2 26.4-21.7 49.7-41.2 67.8c-1.2 14.7 2.2 28.1 8.6 39.8c4.3 8 10 15.4 16.8 22.1c44.3-32.6 75.2-82.3 82.9-139.4c-9-2.2-18.1-3.1-27.1-2.7c-13.8 .6-27.5 4.4-40 12.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M173.2 0c-1.8 0-3.5 .7-4.8 2C138.5 32.3 120 74 120 120c0 26.2 6 50.9 16.6 73c-22 2.4-43.8 9.1-64.2 20.5C37.9 232.8 13.3 262.4 .4 296c-.7 1.7-.5 3.7 .5 5.2c2.2 3.7 7.4 4.3 10.6 1.3C64.2 254.3 158 245.1 205 324s-8.1 153.1-77.6 173.2c-4.2 1.2-6.3 5.9-4.1 9.6c1 1.6 2.6 2.7 4.5 3c36.5 5.9 75.2 .1 109.7-19.2c20.4-11.4 37.4-26.5 50.5-43.8c13.1 17.3 30.1 32.4 50.5 43.8c34.5 19.3 73.3 25.2 109.7 19.2c1.9-.3 3.5-1.4 4.5-3c2.2-3.7 .1-8.4-4.1-9.6C379.1 477.1 324 403 371 324s140.7-69.8 193.5-21.4c3.2 2.9 8.4 2.3 10.6-1.3c1-1.6 1.1-3.5 .5-5.2c-12.9-33.6-37.5-63.2-72.1-82.5c-20.4-11.4-42.2-18.1-64.2-20.5C450 170.9 456 146.2 456 120c0-46-18.5-87.7-48.4-118c-1.3-1.3-3-2-4.8-2c-5 0-8.4 5.2-6.7 9.9C421.7 80.5 385.6 176 288 176S154.3 80.5 179.9 9.9c1.7-4.7-1.6-9.9-6.7-9.9zM240 272a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM181.7 417.6c6.3-11.8 9.8-25.1 8.6-39.8c-19.5-18-34-41.4-41.2-67.8c-12.5-8.1-26.2-11.8-40-12.4c-9-.4-18.1 .6-27.1 2.7c7.8 57.1 38.7 106.8 82.9 139.4c6.8-6.7 12.6-14.1 16.8-22.1zM288 64c-28.8 0-56.3 5.9-81.2 16.5c2 8.3 5 16.2 9 23.5c6.8 12.4 16.7 23.1 30.1 30.3c13.3-4.1 27.5-6.3 42.2-6.3s28.8 2.2 42.2 6.3c13.4-7.2 23.3-17.9 30.1-30.3c4-7.3 7-15.2 9-23.5C344.3 69.9 316.8 64 288 64zM426.9 310c-7.2 26.4-21.7 49.7-41.2 67.8c-1.2 14.7 2.2 28.1 8.6 39.8c4.3 8 10 15.4 16.8 22.1c44.3-32.6 75.2-82.3 82.9-139.4c-9-2.2-18.1-3.1-27.1-2.7c-13.8 .6-27.5 4.4-40 12.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bitbucket\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f172\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"atlassian\", \"bitbucket-square\", \"git\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f171\",\n    \"label\": \"Bitbucket\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bitcoin\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f379\",\n    \"label\": \"Bitcoin\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bitcoin-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Bitcoin Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0b4\",\n    \"label\": \"Bitcoin Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M48 32C48 14.3 62.3 0 80 0s32 14.3 32 32V64h32V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64c0 1.5-.1 3.1-.3 4.5C254.1 82.2 288 125.1 288 176c0 24.2-7.7 46.6-20.7 64.9c31.7 19.8 52.7 55 52.7 95.1c0 61.9-50.1 112-112 112v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H112v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H41.7C18.7 448 0 429.3 0 406.3V288 265.7 224 101.6C0 80.8 16.8 64 37.6 64H48V32zM64 224H176c26.5 0 48-21.5 48-48s-21.5-48-48-48H64v96zm112 64H64v96H208c26.5 0 48-21.5 48-48s-21.5-48-48-48H176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M48 32C48 14.3 62.3 0 80 0s32 14.3 32 32V64h32V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64c0 1.5-.1 3.1-.3 4.5C254.1 82.2 288 125.1 288 176c0 24.2-7.7 46.6-20.7 64.9c31.7 19.8 52.7 55 52.7 95.1c0 61.9-50.1 112-112 112v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H112v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H41.7C18.7 448 0 429.3 0 406.3V288 265.7 224 101.6C0 80.8 16.8 64 37.6 64H48V32zM64 224H176c26.5 0 48-21.5 48-48s-21.5-48-48-48H64v96zm112 64H64v96H208c26.5 0 48-21.5 48-48s-21.5-48-48-48H176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bity\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f37a\",\n    \"label\": \"Bity\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"black-tie\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f27e\",\n    \"label\": \"Font Awesome Black Tie\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"blackberry\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f37b\",\n    \"label\": \"BlackBerry\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"blender\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f517\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cocktail\", \"milkshake\", \"mixer\", \"puree\", \"smoothie\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f517\",\n    \"label\": \"Blender\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0h64 32H470.1c21.1 0 36.4 20.1 30.9 40.4L494.5 64H336c-8.8 0-16 7.2-16 16s7.2 16 16 16H485.8l-17.5 64H336c-8.8 0-16 7.2-16 16s7.2 16 16 16H459.6l-17.5 64H336c-8.8 0-16 7.2-16 16s7.2 16 16 16h97.5L416 352H160l-8.7-96H64c-35.3 0-64-28.7-64-64V64zM145.5 192L133.8 64H64V192h81.5zM144 384H432c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H144c-26.5 0-48-21.5-48-48V432c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0h64 32H470.1c21.1 0 36.4 20.1 30.9 40.4L494.5 64H336c-8.8 0-16 7.2-16 16s7.2 16 16 16H485.8l-17.5 64H336c-8.8 0-16 7.2-16 16s7.2 16 16 16H459.6l-17.5 64H336c-8.8 0-16 7.2-16 16s7.2 16 16 16h97.5L416 352H160l-8.7-96H64c-35.3 0-64-28.7-64-64V64zM145.5 192L133.8 64H64V192h81.5zM144 384H432c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H144c-26.5 0-48-21.5-48-48V432c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"blender-phone\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6b6\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"appliance\",\n        \"cocktail\",\n        \"fantasy\",\n        \"milkshake\",\n        \"mixer\",\n        \"puree\",\n        \"silly\",\n        \"smoothie\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6b6\",\n    \"label\": \"Blender Phone\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M224 352L196.8 52.3C194.2 24.2 216.3 0 244.6 0H534.1c21.1 0 36.4 20.1 30.9 40.4L558.5 64H400c-8.8 0-16 7.2-16 16s7.2 16 16 16H549.8l-17.5 64H400c-8.8 0-16 7.2-16 16s7.2 16 16 16H523.6l-17.5 64H400c-8.8 0-16 7.2-16 16s7.2 16 16 16h97.5L480 352H224zm-16 32H496c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V432c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM147.5 30.7c10.8 6.7 15.3 21 10.6 33.4l-22 57.8c-4.2 10.9-14.5 17.6-25.3 16.4l-33.3-3.6c-13.6 42.2-13.6 88.4 0 130.7l33.3-3.6c10.9-1.2 21.2 5.5 25.3 16.4l22 57.8c4.7 12.4 .2 26.7-10.6 33.4l-44 27.2c-9.7 6-21.9 4.2-29.8-4.3C-24.6 286-24.6 114 73.7 7.8C81.6-.7 93.8-2.5 103.5 3.5l44 27.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M224 352L196.8 52.3C194.2 24.2 216.3 0 244.6 0H534.1c21.1 0 36.4 20.1 30.9 40.4L558.5 64H400c-8.8 0-16 7.2-16 16s7.2 16 16 16H549.8l-17.5 64H400c-8.8 0-16 7.2-16 16s7.2 16 16 16H523.6l-17.5 64H400c-8.8 0-16 7.2-16 16s7.2 16 16 16h97.5L480 352H224zm-16 32H496c26.5 0 48 21.5 48 48v32c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V432c0-26.5 21.5-48 48-48zm144 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM147.5 30.7c10.8 6.7 15.3 21 10.6 33.4l-22 57.8c-4.2 10.9-14.5 17.6-25.3 16.4l-33.3-3.6c-13.6 42.2-13.6 88.4 0 130.7l33.3-3.6c10.9-1.2 21.2 5.5 25.3 16.4l22 57.8c4.7 12.4 .2 26.7-10.6 33.4l-44 27.2c-9.7 6-21.9 4.2-29.8-4.3C-24.6 286-24.6 114 73.7 7.8C81.6-.7 93.8-2.5 103.5 3.5l44 27.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"blog\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f781\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"journal\",\n        \"log\",\n        \"online\",\n        \"personal\",\n        \"post\",\n        \"web 2.0\",\n        \"wordpress\",\n        \"writing\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f781\",\n    \"label\": \"Blog\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 32c0 17.7 14.3 32 32 32c123.7 0 224 100.3 224 224c0 17.7 14.3 32 32 32s32-14.3 32-32C512 128.9 383.1 0 224 0c-17.7 0-32 14.3-32 32zm0 96c0 17.7 14.3 32 32 32c70.7 0 128 57.3 128 128c0 17.7 14.3 32 32 32s32-14.3 32-32c0-106-86-192-192-192c-17.7 0-32 14.3-32 32zM96 144c0-26.5-21.5-48-48-48S0 117.5 0 144V368c0 79.5 64.5 144 144 144s144-64.5 144-144s-64.5-144-144-144H128v96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48s-48-21.5-48-48V144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 32c0 17.7 14.3 32 32 32c123.7 0 224 100.3 224 224c0 17.7 14.3 32 32 32s32-14.3 32-32C512 128.9 383.1 0 224 0c-17.7 0-32 14.3-32 32zm0 96c0 17.7 14.3 32 32 32c70.7 0 128 57.3 128 128c0 17.7 14.3 32 32 32s32-14.3 32-32c0-106-86-192-192-192c-17.7 0-32 14.3-32 32zM96 144c0-26.5-21.5-48-48-48S0 117.5 0 144V368c0 79.5 64.5 144 144 144s144-64.5 144-144s-64.5-144-144-144H128v96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48s-48-21.5-48-48V144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"blogger\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f37c\",\n    \"label\": \"Blogger\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"blogger-b\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f37d\",\n    \"label\": \"Blogger B\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bluetooth\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f293\"]\n      }\n    },\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"signal\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f293\",\n    \"label\": \"Bluetooth\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bluetooth-b\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f294\",\n    \"label\": \"Bluetooth\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bold\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f032\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"emphasis\", \"format\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f032\",\n    \"label\": \"Bold\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H80 96 224c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128H96 80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V256 96H32C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64H112V224H224zM112 288V416H256c35.3 0 64-28.7 64-64s-28.7-64-64-64H224 112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H80 96 224c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128H96 80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V256 96H32C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64H112V224H224zM112 288V416H256c35.3 0 64-28.7 64-64s-28.7-64-64-64H224 112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bolt\": {\n    \"aliases\": {\n      \"names\": [\"zap\"],\n      \"unicodes\": {\n        \"composite\": [\"26a1\"],\n        \"secondary\": [\"10f0e7\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.5.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"charge\",\n        \"danger\",\n        \"electric\",\n        \"electricity\",\n        \"flash\",\n        \"high voltage\",\n        \"lightning\",\n        \"voltage\",\n        \"weather\",\n        \"zap\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0e7\",\n    \"label\": \"Bolt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288H175.5L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7H272.5L349.4 44.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M349.4 44.6c5.9-13.7 1.5-29.7-10.6-38.5s-28.6-8-39.9 1.8l-256 224c-10 8.8-13.6 22.9-8.9 35.3S50.7 288 64 288H175.5L98.6 467.4c-5.9 13.7-1.5 29.7 10.6 38.5s28.6 8 39.9-1.8l256-224c10-8.8 13.6-22.9 8.9-35.3s-16.6-20.7-30-20.7H272.5L349.4 44.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bolt-lightning\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"electricity\", \"flash\", \"lightning\", \"weather\", \"zap\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0b7\",\n    \"label\": \"Bolt Lightning\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 256L28.5 28c2-16 15.6-28 31.8-28H228.9c15 0 27.1 12.1 27.1 27.1c0 3.2-.6 6.5-1.7 9.5L208 160H347.3c20.2 0 36.7 16.4 36.7 36.7c0 7.4-2.2 14.6-6.4 20.7l-192.2 281c-5.9 8.6-15.6 13.7-25.9 13.7h-2.9c-15.7 0-28.5-12.8-28.5-28.5c0-2.3 .3-4.6 .9-6.9L176 288H32c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bomb\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4a3\"],\n        \"secondary\": [\"10f1e2\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bomb\",\n        \"comic\",\n        \"error\",\n        \"explode\",\n        \"fuse\",\n        \"grenade\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1e2\",\n    \"label\": \"Bomb\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M459.1 52.4L442.6 6.5C440.7 2.6 436.5 0 432.1 0s-8.5 2.6-10.4 6.5L405.2 52.4l-46 16.8c-4.3 1.6-7.3 5.9-7.2 10.4c0 4.5 3 8.7 7.2 10.2l45.7 16.8 16.8 45.8c1.5 4.4 5.8 7.5 10.4 7.5s8.9-3.1 10.4-7.5l16.5-45.8 45.7-16.8c4.2-1.5 7.2-5.7 7.2-10.2c0-4.6-3-8.9-7.2-10.4L459.1 52.4zm-132.4 53c-12.5-12.5-32.8-12.5-45.3 0l-2.9 2.9C256.5 100.3 232.7 96 208 96C93.1 96 0 189.1 0 304S93.1 512 208 512s208-93.1 208-208c0-24.7-4.3-48.5-12.2-70.5l2.9-2.9c12.5-12.5 12.5-32.8 0-45.3l-80-80zM200 192c-57.4 0-104 46.6-104 104v8c0 8.8-7.2 16-16 16s-16-7.2-16-16v-8c0-75.1 60.9-136 136-136h8c8.8 0 16 7.2 16 16s-7.2 16-16 16h-8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M459.1 52.4L442.6 6.5C440.7 2.6 436.5 0 432.1 0s-8.5 2.6-10.4 6.5L405.2 52.4l-46 16.8c-4.3 1.6-7.3 5.9-7.2 10.4c0 4.5 3 8.7 7.2 10.2l45.7 16.8 16.8 45.8c1.5 4.4 5.8 7.5 10.4 7.5s8.9-3.1 10.4-7.5l16.5-45.8 45.7-16.8c4.2-1.5 7.2-5.7 7.2-10.2c0-4.6-3-8.9-7.2-10.4L459.1 52.4zm-132.4 53c-12.5-12.5-32.8-12.5-45.3 0l-2.9 2.9C256.5 100.3 232.7 96 208 96C93.1 96 0 189.1 0 304S93.1 512 208 512s208-93.1 208-208c0-24.7-4.3-48.5-12.2-70.5l2.9-2.9c12.5-12.5 12.5-32.8 0-45.3l-80-80zM200 192c-57.4 0-104 46.6-104 104v8c0 8.8-7.2 16-16 16s-16-7.2-16-16v-8c0-75.1 60.9-136 136-136h8c8.8 0 16 7.2 16 16s-7.2 16-16 16h-8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bone\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9b4\"],\n        \"secondary\": [\"10f5d7\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bone\", \"calcium\", \"dog\", \"skeletal\", \"skeleton\", \"tibia\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5d7\",\n    \"label\": \"Bone\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766749,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M153.7 144.8c6.9 16.3 20.6 31.2 38.3 31.2H384c17.7 0 31.4-14.9 38.3-31.2C434.4 116.1 462.9 96 496 96c44.2 0 80 35.8 80 80c0 30.4-17 56.9-42 70.4c-3.6 1.9-6 5.5-6 9.6s2.4 7.7 6 9.6c25 13.5 42 40 42 70.4c0 44.2-35.8 80-80 80c-33.1 0-61.6-20.1-73.7-48.8C415.4 350.9 401.7 336 384 336H192c-17.7 0-31.4 14.9-38.3 31.2C141.6 395.9 113.1 416 80 416c-44.2 0-80-35.8-80-80c0-30.4 17-56.9 42-70.4c3.6-1.9 6-5.5 6-9.6s-2.4-7.7-6-9.6C17 232.9 0 206.4 0 176c0-44.2 35.8-80 80-80c33.1 0 61.6 20.1 73.7 48.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M153.7 144.8c6.9 16.3 20.6 31.2 38.3 31.2H384c17.7 0 31.4-14.9 38.3-31.2C434.4 116.1 462.9 96 496 96c44.2 0 80 35.8 80 80c0 30.4-17 56.9-42 70.4c-3.6 1.9-6 5.5-6 9.6s2.4 7.7 6 9.6c25 13.5 42 40 42 70.4c0 44.2-35.8 80-80 80c-33.1 0-61.6-20.1-73.7-48.8C415.4 350.9 401.7 336 384 336H192c-17.7 0-31.4 14.9-38.3 31.2C141.6 395.9 113.1 416 80 416c-44.2 0-80-35.8-80-80c0-30.4 17-56.9 42-70.4c3.6-1.9 6-5.5 6-9.6s-2.4-7.7-6-9.6C17 232.9 0 206.4 0 176c0-44.2 35.8-80 80-80c33.1 0 61.6 20.1 73.7 48.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bong\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f55c\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"aparatus\", \"cannabis\", \"marijuana\", \"pipe\", \"smoke\", \"smoking\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f55c\",\n    \"label\": \"Bong\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M160 208.5c0 29.1-15.6 53.9-37.2 67.8c-17.2 11.1-31.5 26.1-41.7 43.7H302.9c-10.2-17.6-24.5-32.6-41.7-43.7c-21.6-13.9-37.2-38.7-37.2-67.8V64H160V208.5zM288 64V208.5c0 5.7 3.1 10.9 7.9 14c11.2 7.2 21.5 15.5 30.9 24.8L366.1 208l-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l24 24 24 24c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-7-7-43.3 43.3C374 314.1 384 347.9 384 384c0 39.4-11.9 76.1-32.2 106.5c-9.6 14.4-26.5 21.5-43.8 21.5H76.1c-17.3 0-34.2-7.1-43.8-21.5C11.9 460.1 0 423.4 0 384c0-67.8 35.1-127.3 88.1-161.5c4.8-3.1 7.9-8.3 7.9-14V64C78.3 64 64 49.7 64 32S78.3 0 96 0h16H272h16c17.7 0 32 14.3 32 32s-14.3 32-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M160 208.5c0 29.1-15.6 53.9-37.2 67.8c-17.2 11.1-31.5 26.1-41.7 43.7H302.9c-10.2-17.6-24.5-32.6-41.7-43.7c-21.6-13.9-37.2-38.7-37.2-67.8V64H160V208.5zM288 64V208.5c0 5.7 3.1 10.9 7.9 14c11.2 7.2 21.5 15.5 30.9 24.8L366.1 208l-7-7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l24 24 24 24c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-7-7-43.3 43.3C374 314.1 384 347.9 384 384c0 39.4-11.9 76.1-32.2 106.5c-9.6 14.4-26.5 21.5-43.8 21.5H76.1c-17.3 0-34.2-7.1-43.8-21.5C11.9 460.1 0 423.4 0 384c0-67.8 35.1-127.3 88.1-161.5c4.8-3.1 7.9-8.3 7.9-14V64C78.3 64 64 49.7 64 32S78.3 0 96 0h16H272h16c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4d4\"],\n        \"secondary\": [\"10f02d\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"book\",\n        \"cover\",\n        \"decorated\",\n        \"diary\",\n        \"documentation\",\n        \"journal\",\n        \"library\",\n        \"notebook\",\n        \"notebook with decorative cover\",\n        \"read\",\n        \"research\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f02d\",\n    \"label\": \"Book\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-atlas\": {\n    \"aliases\": {\n      \"names\": [\"atlas\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f558\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"book\",\n        \"directions\",\n        \"geography\",\n        \"globe\",\n        \"library\",\n        \"map\",\n        \"research\",\n        \"travel\",\n        \"wayfinding\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f558\",\n    \"label\": \"Book Atlas\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zM247.4 283.8c-3.7 3.7-6.2 4.2-7.4 4.2s-3.7-.5-7.4-4.2c-3.8-3.7-8-10-11.8-18.9c-6.2-14.5-10.8-34.3-12.2-56.9h63c-1.5 22.6-6 42.4-12.2 56.9c-3.8 8.9-8 15.2-11.8 18.9zm42.7-9.9c7.3-18.3 12-41.1 13.4-65.9h31.1c-4.7 27.9-21.4 51.7-44.5 65.9zm0-163.8c23.2 14.2 39.9 38 44.5 65.9H303.5c-1.4-24.7-6.1-47.5-13.4-65.9zM368 192a128 128 0 1 0 -256 0 128 128 0 1 0 256 0zM145.3 208h31.1c1.4 24.7 6.1 47.5 13.4 65.9c-23.2-14.2-39.9-38-44.5-65.9zm31.1-32H145.3c4.7-27.9 21.4-51.7 44.5-65.9c-7.3 18.3-12 41.1-13.4 65.9zm56.1-75.8c3.7-3.7 6.2-4.2 7.4-4.2s3.7 .5 7.4 4.2c3.8 3.7 8 10 11.8 18.9c6.2 14.5 10.8 34.3 12.2 56.9h-63c1.5-22.6 6-42.4 12.2-56.9c3.8-8.9 8-15.2 11.8-18.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zM247.4 283.8c-3.7 3.7-6.2 4.2-7.4 4.2s-3.7-.5-7.4-4.2c-3.8-3.7-8-10-11.8-18.9c-6.2-14.5-10.8-34.3-12.2-56.9h63c-1.5 22.6-6 42.4-12.2 56.9c-3.8 8.9-8 15.2-11.8 18.9zm42.7-9.9c7.3-18.3 12-41.1 13.4-65.9h31.1c-4.7 27.9-21.4 51.7-44.5 65.9zm0-163.8c23.2 14.2 39.9 38 44.5 65.9H303.5c-1.4-24.7-6.1-47.5-13.4-65.9zM368 192a128 128 0 1 0 -256 0 128 128 0 1 0 256 0zM145.3 208h31.1c1.4 24.7 6.1 47.5 13.4 65.9c-23.2-14.2-39.9-38-44.5-65.9zm31.1-32H145.3c4.7-27.9 21.4-51.7 44.5-65.9c-7.3 18.3-12 41.1-13.4 65.9zm56.1-75.8c3.7-3.7 6.2-4.2 7.4-4.2s3.7 .5 7.4 4.2c3.8 3.7 8 10 11.8 18.9c6.2 14.5 10.8 34.3 12.2 56.9h-63c1.5-22.6 6-42.4 12.2-56.9c3.8-8.9 8-15.2 11.8-18.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-bible\": {\n    \"aliases\": {\n      \"names\": [\"bible\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f647\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"book\", \"catholicism\", \"christianity\", \"god\", \"holy\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f647\",\n    \"label\": \"Book Bible\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zM208 80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272V304c0 8.8-7.2 16-16 16H224c-8.8 0-16-7.2-16-16V192H160c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h48V80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zM208 80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272V304c0 8.8-7.2 16-16 16H224c-8.8 0-16-7.2-16-16V192H160c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h48V80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-bookmark\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"library\", \"research\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0bb\",\n    \"label\": \"Book Bookmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 43 43 0 96 0h96V190.7c0 13.4 15.5 20.9 26 12.5L272 160l54 43.2c10.5 8.4 26 .9 26-12.5V0h32 32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 43 43 0 96 0h96V190.7c0 13.4 15.5 20.9 26 12.5L272 160l54 43.2c10.5 8.4 26 .9 26-12.5V0h32 32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-journal-whills\": {\n    \"aliases\": {\n      \"names\": [\"journal-whills\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f66a\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"book\", \"force\", \"jedi\", \"sith\", \"star wars\", \"yoda\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f66a\",\n    \"label\": \"Book Journal Whills\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zm90.4-234.4l-21.2-21.2c-3 10.1-5.1 20.6-5.1 31.6c0 .2 0 .5 .1 .8s.1 .5 .1 .8L165.2 226c2.5 2.1 3.4 5.8 2.3 8.9c-1.3 3-4.1 5.1-7.5 5.1c-1.9-.1-3.8-.8-5.2-2l-23.6-20.6C142.8 267 186.9 304 240 304s97.3-37 108.9-86.6L325.3 238c-1.4 1.2-3.3 2-5.3 2c-2.2-.1-4.4-1.1-6-2.8c-1.2-1.5-1.9-3.4-2-5.2c.1-2.2 1.1-4.4 2.8-6l37.1-32.5c0-.3 0-.5 .1-.8s.1-.5 .1-.8c0-11-2.1-21.5-5.1-31.6l-21.2 21.2c-3.1 3.1-8.1 3.1-11.3 0s-3.1-8.1 0-11.2l26.4-26.5c-8.2-17-20.5-31.7-35.9-42.6c-2.7-1.9-6.2 1.4-5 4.5c8.5 22.4 3.6 48-13 65.6c-3.2 3.4-3.6 8.9-.9 12.7c9.8 14 12.7 31.9 7.5 48.5c-5.9 19.4-22 34.1-41.9 38.3l-1.4-34.3 12.6 8.6c.6 .4 1.5 .6 2.3 .6c1.5 0 2.7-.8 3.5-2s.6-2.8-.1-4L260 225.4l18-3.6c1.8-.4 3.1-2.1 3.1-4s-1.4-3.5-3.1-3.9l-18-3.7 8.5-14.3c.8-1.2 .9-2.9 .1-4.1s-2-2-3.5-2l-.1 0c-.7 .1-1.5 .3-2.1 .7l-14.1 9.6L244 87.9c-.1-2.2-1.9-3.9-4-3.9s-3.9 1.6-4 3.9l-4.6 110.8-12-8.1c-1.5-1.1-3.6-.9-5 .4s-1.6 3.4-.8 5l8.6 14.3-18 3.7c-1.8 .4-3.1 2-3.1 3.9s1.4 3.6 3.1 4l18 3.8-8.6 14.2c-.2 .6-.5 1.4-.5 2c0 1.1 .5 2.1 1.2 3c.8 .6 1.8 1 2.8 1c.7 0 1.6-.2 2.2-.6l10.4-7.1-1.4 32.8c-19.9-4.1-36-18.9-41.9-38.3c-5.1-16.6-2.2-34.4 7.6-48.5c2.7-3.9 2.3-9.3-.9-12.7c-16.6-17.5-21.6-43.1-13.1-65.5c1.2-3.1-2.3-6.4-5-4.5c-15.3 10.9-27.6 25.6-35.8 42.6l26.4 26.5c3.1 3.1 3.1 8.1 0 11.2s-8.1 3.1-11.2 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zm90.4-234.4l-21.2-21.2c-3 10.1-5.1 20.6-5.1 31.6c0 .2 0 .5 .1 .8s.1 .5 .1 .8L165.2 226c2.5 2.1 3.4 5.8 2.3 8.9c-1.3 3-4.1 5.1-7.5 5.1c-1.9-.1-3.8-.8-5.2-2l-23.6-20.6C142.8 267 186.9 304 240 304s97.3-37 108.9-86.6L325.3 238c-1.4 1.2-3.3 2-5.3 2c-2.2-.1-4.4-1.1-6-2.8c-1.2-1.5-1.9-3.4-2-5.2c.1-2.2 1.1-4.4 2.8-6l37.1-32.5c0-.3 0-.5 .1-.8s.1-.5 .1-.8c0-11-2.1-21.5-5.1-31.6l-21.2 21.2c-3.1 3.1-8.1 3.1-11.3 0s-3.1-8.1 0-11.2l26.4-26.5c-8.2-17-20.5-31.7-35.9-42.6c-2.7-1.9-6.2 1.4-5 4.5c8.5 22.4 3.6 48-13 65.6c-3.2 3.4-3.6 8.9-.9 12.7c9.8 14 12.7 31.9 7.5 48.5c-5.9 19.4-22 34.1-41.9 38.3l-1.4-34.3 12.6 8.6c.6 .4 1.5 .6 2.3 .6c1.5 0 2.7-.8 3.5-2s.6-2.8-.1-4L260 225.4l18-3.6c1.8-.4 3.1-2.1 3.1-4s-1.4-3.5-3.1-3.9l-18-3.7 8.5-14.3c.8-1.2 .9-2.9 .1-4.1s-2-2-3.5-2l-.1 0c-.7 .1-1.5 .3-2.1 .7l-14.1 9.6L244 87.9c-.1-2.2-1.9-3.9-4-3.9s-3.9 1.6-4 3.9l-4.6 110.8-12-8.1c-1.5-1.1-3.6-.9-5 .4s-1.6 3.4-.8 5l8.6 14.3-18 3.7c-1.8 .4-3.1 2-3.1 3.9s1.4 3.6 3.1 4l18 3.8-8.6 14.2c-.2 .6-.5 1.4-.5 2c0 1.1 .5 2.1 1.2 3c.8 .6 1.8 1 2.8 1c.7 0 1.6-.2 2.2-.6l10.4-7.1-1.4 32.8c-19.9-4.1-36-18.9-41.9-38.3c-5.1-16.6-2.2-34.4 7.6-48.5c2.7-3.9 2.3-9.3-.9-12.7c-16.6-17.5-21.6-43.1-13.1-65.5c1.2-3.1-2.3-6.4-5-4.5c-15.3 10.9-27.6 25.6-35.8 42.6l26.4 26.5c3.1 3.1 3.1 8.1 0 11.2s-8.1 3.1-11.2 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7e6\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"diary\",\n        \"documentation\",\n        \"health\",\n        \"history\",\n        \"journal\",\n        \"library\",\n        \"read\",\n        \"record\",\n        \"research\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7e6\",\n    \"label\": \"Book Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zM208 112v48H160c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h48c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H272V112c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zM208 112v48H160c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h48c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H272V112c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4d6\", \"1f56e\"],\n        \"secondary\": [\"10f518\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.1.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Book\",\n        \"book\",\n        \"flyer\",\n        \"library\",\n        \"notebook\",\n        \"open\",\n        \"open book\",\n        \"pamphlet\",\n        \"reading\",\n        \"research\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f518\",\n    \"label\": \"Book Open\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5V78.6c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8V454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5V83.8c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11V456c0 11.4 11.7 19.3 22.4 15.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M249.6 471.5c10.8 3.8 22.4-4.1 22.4-15.5V78.6c0-4.2-1.6-8.4-5-11C247.4 52 202.4 32 144 32C93.5 32 46.3 45.3 18.1 56.1C6.8 60.5 0 71.7 0 83.8V454.1c0 11.9 12.8 20.2 24.1 16.5C55.6 460.1 105.5 448 144 448c33.9 0 79 14 105.6 23.5zm76.8 0C353 462 398.1 448 432 448c38.5 0 88.4 12.1 119.9 22.6c11.3 3.8 24.1-4.6 24.1-16.5V83.8c0-12.1-6.8-23.3-18.1-27.6C529.7 45.3 482.5 32 432 32c-58.4 0-103.4 20-123 35.6c-3.3 2.6-5 6.8-5 11V456c0 11.4 11.7 19.3 22.4 15.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-open-reader\": {\n    \"aliases\": {\n      \"names\": [\"book-reader\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5da\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"flyer\",\n        \"library\",\n        \"notebook\",\n        \"open book\",\n        \"pamphlet\",\n        \"reading\",\n        \"research\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5da\",\n    \"label\": \"Book Open Reader\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152V512l-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427V224c0-17.7 14.3-32 32-32H62.3c63.6 0 125.6 19.6 177.7 56zm32 264V248c52.1-36.4 114.1-56 177.7-56H480c17.7 0 32 14.3 32 32V427c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152V512l-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427V224c0-17.7 14.3-32 32-32H62.3c63.6 0 125.6 19.6 177.7 56zm32 264V248c52.1-36.4 114.1-56 177.7-56H480c17.7 0 32 14.3 32 32V427c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-quran\": {\n    \"aliases\": {\n      \"names\": [\"quran\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f687\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"book\", \"islam\", \"muslim\", \"religion\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f687\",\n    \"label\": \"Book Quran\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 0c53 0 96 43 96 96V416c0 53-43 96-96 96H64 32c-17.7 0-32-14.3-32-32s14.3-32 32-32V384c-17.7 0-32-14.3-32-32V32C0 14.3 14.3 0 32 0H64 352zm0 384H96v64H352c17.7 0 32-14.3 32-32s-14.3-32-32-32zM274.1 150.2l-8.9 21.4-23.1 1.9c-5.7 .5-8 7.5-3.7 11.2L256 199.8l-5.4 22.6c-1.3 5.5 4.7 9.9 9.6 6.9L280 217.2l19.8 12.1c4.9 3 10.9-1.4 9.6-6.9L304 199.8l17.6-15.1c4.3-3.7 2-10.8-3.7-11.2l-23.1-1.9-8.9-21.4c-2.2-5.3-9.6-5.3-11.8 0zM96 192c0 70.7 57.3 128 128 128c25.6 0 49.5-7.5 69.5-20.5c3.2-2.1 4.5-6.2 3.1-9.7s-5.2-5.6-9-4.8c-6.1 1.2-12.5 1.9-19 1.9c-52.4 0-94.9-42.5-94.9-94.9s42.5-94.9 94.9-94.9c6.5 0 12.8 .7 19 1.9c3.8 .8 7.5-1.3 9-4.8s.2-7.6-3.1-9.7C273.5 71.5 249.6 64 224 64C153.3 64 96 121.3 96 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 0c53 0 96 43 96 96V416c0 53-43 96-96 96H64 32c-17.7 0-32-14.3-32-32s14.3-32 32-32V384c-17.7 0-32-14.3-32-32V32C0 14.3 14.3 0 32 0H64 352zm0 384H96v64H352c17.7 0 32-14.3 32-32s-14.3-32-32-32zM274.1 150.2l-8.9 21.4-23.1 1.9c-5.7 .5-8 7.5-3.7 11.2L256 199.8l-5.4 22.6c-1.3 5.5 4.7 9.9 9.6 6.9L280 217.2l19.8 12.1c4.9 3 10.9-1.4 9.6-6.9L304 199.8l17.6-15.1c4.3-3.7 2-10.8-3.7-11.2l-23.1-1.9-8.9-21.4c-2.2-5.3-9.6-5.3-11.8 0zM96 192c0 70.7 57.3 128 128 128c25.6 0 49.5-7.5 69.5-20.5c3.2-2.1 4.5-6.2 3.1-9.7s-5.2-5.6-9-4.8c-6.1 1.2-12.5 1.9-19 1.9c-52.4 0-94.9-42.5-94.9-94.9s42.5-94.9 94.9-94.9c6.5 0 12.8 .7 19 1.9c3.8 .8 7.5-1.3 9-4.8s.2-7.6-3.1-9.7C273.5 71.5 249.6 64 224 64C153.3 64 96 121.3 96 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-skull\": {\n    \"aliases\": {\n      \"names\": [\"book-dead\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f6b7\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"crossbones\",\n        \"d&d\",\n        \"dark arts\",\n        \"death\",\n        \"dnd\",\n        \"documentation\",\n        \"evil\",\n        \"fantasy\",\n        \"halloween\",\n        \"holiday\",\n        \"library\",\n        \"necronomicon\",\n        \"read\",\n        \"research\",\n        \"skull\",\n        \"spell\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6b7\",\n    \"label\": \"Book Skull\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zM320 112c0-35.3-35.8-64-80-64s-80 28.7-80 64c0 20.9 12.6 39.5 32 51.2V176c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V163.2c19.4-11.7 32-30.3 32-51.2zM208 96a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM134.3 209.3c-8.1-3.5-17.5 .3-21 8.4s.3 17.5 8.4 21L199.4 272l-77.7 33.3c-8.1 3.5-11.9 12.9-8.4 21s12.9 11.9 21 8.4L240 289.4l105.7 45.3c8.1 3.5 17.5-.3 21-8.4s-.3-17.5-8.4-21L280.6 272l77.7-33.3c8.1-3.5 11.9-12.9 8.4-21s-12.9-11.9-21-8.4L240 254.6 134.3 209.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 43 43 0 96 0H384h32c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384 96c-53 0-96-43-96-96V96zM64 416c0 17.7 14.3 32 32 32H352V384H96c-17.7 0-32 14.3-32 32zM320 112c0-35.3-35.8-64-80-64s-80 28.7-80 64c0 20.9 12.6 39.5 32 51.2V176c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V163.2c19.4-11.7 32-30.3 32-51.2zM208 96a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM134.3 209.3c-8.1-3.5-17.5 .3-21 8.4s.3 17.5 8.4 21L199.4 272l-77.7 33.3c-8.1 3.5-11.9 12.9-8.4 21s12.9 11.9 21 8.4L240 289.4l105.7 45.3c8.1 3.5 17.5-.3 21-8.4s-.3-17.5-8.4-21L280.6 272l77.7-33.3c8.1-3.5 11.9-12.9 8.4-21s-12.9-11.9-21-8.4L240 254.6 134.3 209.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"book-tanakh\": {\n    \"aliases\": {\n      \"names\": [\"tanakh\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f827\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"book\", \"jewish\", \"judaism\", \"religion\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f827\",\n    \"label\": \"Book Tanakh\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 0c53 0 96 43 96 96V416c0 53-43 96-96 96H64 32c-17.7 0-32-14.3-32-32s14.3-32 32-32V384c-17.7 0-32-14.3-32-32V32C0 14.3 14.3 0 32 0H64 352zm0 384H96v64H352c17.7 0 32-14.3 32-32s-14.3-32-32-32zM138.7 208l13.9 24H124.9l13.9-24zm-13.9-24L97.1 232c-6.2 10.7 1.5 24 13.9 24h55.4l27.7 48c6.2 10.7 21.6 10.7 27.7 0l27.7-48H305c12.3 0 20-13.3 13.9-24l-27.7-48 27.7-48c6.2-10.7-1.5-24-13.9-24H249.6L221.9 64c-6.2-10.7-21.6-10.7-27.7 0l-27.7 48H111c-12.3 0-20 13.3-13.9 24l27.7 48zm27.7 0l27.7-48h55.4l27.7 48-27.7 48H180.3l-27.7-48zm0-48l-13.9 24-13.9-24h27.7zm41.6-24L208 88l13.9 24H194.1zm69.3 24h27.7l-13.9 24-13.9-24zm13.9 72l13.9 24H263.4l13.9-24zm-55.4 48L208 280l-13.9-24h27.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 0c53 0 96 43 96 96V416c0 53-43 96-96 96H64 32c-17.7 0-32-14.3-32-32s14.3-32 32-32V384c-17.7 0-32-14.3-32-32V32C0 14.3 14.3 0 32 0H64 352zm0 384H96v64H352c17.7 0 32-14.3 32-32s-14.3-32-32-32zM138.7 208l13.9 24H124.9l13.9-24zm-13.9-24L97.1 232c-6.2 10.7 1.5 24 13.9 24h55.4l27.7 48c6.2 10.7 21.6 10.7 27.7 0l27.7-48H305c12.3 0 20-13.3 13.9-24l-27.7-48 27.7-48c6.2-10.7-1.5-24-13.9-24H249.6L221.9 64c-6.2-10.7-21.6-10.7-27.7 0l-27.7 48H111c-12.3 0-20 13.3-13.9 24l27.7 48zm27.7 0l27.7-48h55.4l27.7 48-27.7 48H180.3l-27.7-48zm0-48l-13.9 24-13.9-24h27.7zm41.6-24L208 88l13.9 24H194.1zm69.3 24h27.7l-13.9 24-13.9-24zm13.9 72l13.9 24H263.4l13.9-24zm-55.4 48L208 280l-13.9-24h27.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bookmark\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f516\", \"f097\"],\n        \"secondary\": [\"10f02e\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bookmark\",\n        \"favorite\",\n        \"library\",\n        \"mark\",\n        \"marker\",\n        \"read\",\n        \"remember\",\n        \"research\",\n        \"save\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f02e\",\n    \"label\": \"Bookmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 48V487.7C0 501.1 10.9 512 24.3 512c5 0 9.9-1.5 14-4.4L192 400 345.7 507.6c4.1 2.9 9 4.4 14 4.4c13.4 0 24.3-10.9 24.3-24.3V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 48V487.7C0 501.1 10.9 512 24.3 512c5 0 9.9-1.5 14-4.4L192 400 345.7 507.6c4.1 2.9 9 4.4 14 4.4c13.4 0 24.3-10.9 24.3-24.3V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0l0 48V441.4l130.1-92.9c8.3-6 19.6-6 27.9 0L336 441.4V48H48V0H336c26.5 0 48 21.5 48 48V488c0 9-5 17.2-13 21.3s-17.6 3.4-24.9-1.8L192 397.5 37.9 507.5c-7.3 5.2-16.9 5.9-24.9 1.8S0 497 0 488V48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0l0 48V441.4l130.1-92.9c8.3-6 19.6-6 27.9 0L336 441.4V48H48V0H336c26.5 0 48 21.5 48 48V488c0 9-5 17.2-13 21.3s-17.6 3.4-24.9-1.8L192 397.5 37.9 507.5c-7.3 5.2-16.9 5.9-24.9 1.8S0 497 0 488V48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"bootstrap\": {\n    \"changes\": [\"5.8.0\", \"5.15.4\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f836\",\n    \"label\": \"Bootstrap\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M333.5,201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4,238.2,333.5,225,333.5,201.4z M517,188.6 c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1,0-55.8,28.1-54.7,58.5c1,29.3-0.3,67.2-9.8,98.1 c-9.6,31-25.7,50.6-52.2,53.1v28.5c26.4,2.5,42.6,22.1,52.2,53.1c9.5,30.9,10.9,68.8,9.8,98.1c-1.1,30.5,22.7,58.5,54.7,58.5h328.7 c32.1,0,55.8-28.1,54.7-58.5c-1-29.3,0.3-67.2,9.8-98.1c9.6-31,25.7-50.6,52.1-53.1v-28.5C542.7,239.2,526.5,219.6,517,188.6z M300.2,375.1h-97.9V136.8h97.4c43.3,0,71.7,23.4,71.7,59.4c0,25.3-19.1,47.9-43.5,51.8v1.3c33.2,3.6,55.5,26.6,55.5,58.3 C383.4,349.7,352.1,375.1,300.2,375.1z M290.2,266.4h-50.1v78.4h52.3c34.2,0,52.3-13.7,52.3-39.5 C344.7,279.6,326.1,266.4,290.2,266.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M333.5,201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4,238.2,333.5,225,333.5,201.4z M517,188.6 c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1,0-55.8,28.1-54.7,58.5c1,29.3-0.3,67.2-9.8,98.1 c-9.6,31-25.7,50.6-52.2,53.1v28.5c26.4,2.5,42.6,22.1,52.2,53.1c9.5,30.9,10.9,68.8,9.8,98.1c-1.1,30.5,22.7,58.5,54.7,58.5h328.7 c32.1,0,55.8-28.1,54.7-58.5c-1-29.3,0.3-67.2,9.8-98.1c9.6-31,25.7-50.6,52.1-53.1v-28.5C542.7,239.2,526.5,219.6,517,188.6z M300.2,375.1h-97.9V136.8h97.4c43.3,0,71.7,23.4,71.7,59.4c0,25.3-19.1,47.9-43.5,51.8v1.3c33.2,3.6,55.5,26.6,55.5,58.3 C383.4,349.7,352.1,375.1,300.2,375.1z M290.2,266.4h-50.1v78.4h52.3c34.2,0,52.3-13.7,52.3-39.5 C344.7,279.6,326.1,266.4,290.2,266.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"border-all\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f84c\"]\n      }\n    },\n    \"changes\": [\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cell\", \"grid\", \"outline\", \"stroke\", \"table\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f84c\",\n    \"label\": \"Border All\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 96V224H256V96H384zm0 192V416H256V288H384zM192 224H64V96H192V224zM64 288H192V416H64V288zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 96V224H256V96H384zm0 192V416H256V288H384zM192 224H64V96H192V224zM64 288H192V416H64V288zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"border-none\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f850\"]\n      }\n    },\n    \"changes\": [\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cell\", \"grid\", \"outline\", \"stroke\", \"table\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f850\",\n    \"label\": \"Border None\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm96-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM320 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-320a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-448a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 288a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm192 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM416 192a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm96-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM320 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-320a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 480a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm0-448a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 416a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0-384a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 96a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM416 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM32 288a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm192 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 320a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM416 192a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM32 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm192 64a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"border-top-left\": {\n    \"aliases\": {\n      \"names\": [\"border-style\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f853\"]\n      }\n    },\n    \"changes\": [\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cell\", \"outline\", \"stroke\", \"table\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f853\",\n    \"label\": \"Border Top Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336c0-8.8 7.2-16 16-16l336 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32C35.8 32 0 67.8 0 112L0 448zm160 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-96 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336c0-8.8 7.2-16 16-16l336 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32C35.8 32 0 67.8 0 112L0 448zm160 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-96 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bore-hole\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bore\", \"bury\", \"drill\", \"hole\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c3\",\n    \"label\": \"Bore Hole\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c-17.7 0-32 14.3-32 32V296.6c-19.1 11.1-32 31.7-32 55.4c0 35.3 28.7 64 64 64s64-28.7 64-64c0-23.7-12.9-44.4-32-55.4V32c0-17.7-14.3-32-32-32zM48 128c-26.5 0-48 21.5-48 48V464c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H384c-17.7 0-32 14.3-32 32V352c0 53-43 96-96 96s-96-43-96-96V160c0-17.7-14.3-32-32-32H48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c-17.7 0-32 14.3-32 32V296.6c-19.1 11.1-32 31.7-32 55.4c0 35.3 28.7 64 64 64s64-28.7 64-64c0-23.7-12.9-44.4-32-55.4V32c0-17.7-14.3-32-32-32zM48 128c-26.5 0-48 21.5-48 48V464c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H384c-17.7 0-32 14.3-32 32V352c0 53-43 96-96 96s-96-43-96-96V160c0-17.7-14.3-32-32-32H48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bots\": {\n    \"changes\": [\"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e340\",\n    \"label\": \"Bots\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M86.344,197.834a51.767,51.767,0,0,0-41.57,20.058V156.018a8.19,8.19,0,0,0-8.19-8.19H8.19A8.19,8.19,0,0,0,0,156.018V333.551a8.189,8.189,0,0,0,8.19,8.189H36.584a8.189,8.189,0,0,0,8.19-8.189v-8.088c11.628,13.373,25.874,19.769,41.573,19.769,34.6,0,61.922-26.164,61.922-73.843C148.266,225.452,121.229,197.834,86.344,197.834ZM71.516,305.691c-9.593,0-21.221-4.942-26.745-12.5V250.164c5.528-7.558,17.152-12.791,26.745-12.791,17.734,0,31.107,13.082,31.107,34.013C102.623,292.609,89.25,305.691,71.516,305.691Zm156.372-59.032a17.4,17.4,0,1,0,17.4,17.4A17.4,17.4,0,0,0,227.888,246.659ZM273.956,156.7V112.039a13.308,13.308,0,1,0-10.237,0V156.7a107.49,107.49,0,1,0,10.237,0Zm85.993,107.367c0,30.531-40.792,55.281-91.112,55.281s-91.111-24.75-91.111-55.281,40.792-55.281,91.111-55.281S359.949,233.532,359.949,264.062Zm-50.163,17.4a17.4,17.4,0,1,0-17.4-17.4h0A17.4,17.4,0,0,0,309.786,281.466ZM580.7,250.455c-14.828-2.617-22.387-3.78-22.387-9.885,0-5.523,7.268-9.884,17.735-9.884a65.56,65.56,0,0,1,34.484,10.1,8.171,8.171,0,0,0,11.288-2.468c.07-.11.138-.221.2-.333l8.611-14.886a8.2,8.2,0,0,0-2.867-11.123,99.863,99.863,0,0,0-52.014-14.138c-38.956,0-60.179,21.514-60.179,46.225,0,36.342,33.725,41.864,57.563,45.642,13.373,2.326,24.13,4.361,24.13,11.048,0,6.4-5.523,10.757-18.9,10.757-13.552,0-30.994-6.222-42.623-13.579a8.206,8.206,0,0,0-11.335,2.491c-.035.054-.069.108-.1.164l-10.2,16.891a8.222,8.222,0,0,0,2.491,11.066c15.224,10.3,37.663,16.692,59.441,16.692,40.409,0,63.957-19.769,63.957-46.515C640,260.63,604.537,254.816,580.7,250.455Zm-95.928,60.787a8.211,8.211,0,0,0-9.521-5.938,23.168,23.168,0,0,1-4.155.387c-7.849,0-12.5-6.106-12.5-14.245V240.28h20.349a8.143,8.143,0,0,0,8.141-8.143V209.466a8.143,8.143,0,0,0-8.141-8.143H458.594V171.091a8.143,8.143,0,0,0-8.143-8.143H422.257a8.143,8.143,0,0,0-8.143,8.143h0v30.232H399a8.143,8.143,0,0,0-8.143,8.143h0v22.671A8.143,8.143,0,0,0,399,240.28h15.115v63.667c0,27.037,15.408,41.282,43.9,41.282,12.183,0,21.383-2.2,27.6-5.446a8.161,8.161,0,0,0,4.145-9.278Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M86.344,197.834a51.767,51.767,0,0,0-41.57,20.058V156.018a8.19,8.19,0,0,0-8.19-8.19H8.19A8.19,8.19,0,0,0,0,156.018V333.551a8.189,8.189,0,0,0,8.19,8.189H36.584a8.189,8.189,0,0,0,8.19-8.189v-8.088c11.628,13.373,25.874,19.769,41.573,19.769,34.6,0,61.922-26.164,61.922-73.843C148.266,225.452,121.229,197.834,86.344,197.834ZM71.516,305.691c-9.593,0-21.221-4.942-26.745-12.5V250.164c5.528-7.558,17.152-12.791,26.745-12.791,17.734,0,31.107,13.082,31.107,34.013C102.623,292.609,89.25,305.691,71.516,305.691Zm156.372-59.032a17.4,17.4,0,1,0,17.4,17.4A17.4,17.4,0,0,0,227.888,246.659ZM273.956,156.7V112.039a13.308,13.308,0,1,0-10.237,0V156.7a107.49,107.49,0,1,0,10.237,0Zm85.993,107.367c0,30.531-40.792,55.281-91.112,55.281s-91.111-24.75-91.111-55.281,40.792-55.281,91.111-55.281S359.949,233.532,359.949,264.062Zm-50.163,17.4a17.4,17.4,0,1,0-17.4-17.4h0A17.4,17.4,0,0,0,309.786,281.466ZM580.7,250.455c-14.828-2.617-22.387-3.78-22.387-9.885,0-5.523,7.268-9.884,17.735-9.884a65.56,65.56,0,0,1,34.484,10.1,8.171,8.171,0,0,0,11.288-2.468c.07-.11.138-.221.2-.333l8.611-14.886a8.2,8.2,0,0,0-2.867-11.123,99.863,99.863,0,0,0-52.014-14.138c-38.956,0-60.179,21.514-60.179,46.225,0,36.342,33.725,41.864,57.563,45.642,13.373,2.326,24.13,4.361,24.13,11.048,0,6.4-5.523,10.757-18.9,10.757-13.552,0-30.994-6.222-42.623-13.579a8.206,8.206,0,0,0-11.335,2.491c-.035.054-.069.108-.1.164l-10.2,16.891a8.222,8.222,0,0,0,2.491,11.066c15.224,10.3,37.663,16.692,59.441,16.692,40.409,0,63.957-19.769,63.957-46.515C640,260.63,604.537,254.816,580.7,250.455Zm-95.928,60.787a8.211,8.211,0,0,0-9.521-5.938,23.168,23.168,0,0,1-4.155.387c-7.849,0-12.5-6.106-12.5-14.245V240.28h20.349a8.143,8.143,0,0,0,8.141-8.143V209.466a8.143,8.143,0,0,0-8.141-8.143H458.594V171.091a8.143,8.143,0,0,0-8.143-8.143H422.257a8.143,8.143,0,0,0-8.143,8.143h0v30.232H399a8.143,8.143,0,0,0-8.143,8.143h0v22.671A8.143,8.143,0,0,0,399,240.28h15.115v63.667c0,27.037,15.408,41.282,43.9,41.282,12.183,0,21.383-2.2,27.6-5.446a8.161,8.161,0,0,0,4.145-9.278Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bottle-droplet\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alcohol\", \"drink\", \"oil\", \"olive oil\", \"wine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c4\",\n    \"label\": \"Bottle Droplet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M96 0C82.7 0 72 10.7 72 24s10.7 24 24 24c4.4 0 8 3.6 8 8v64.9c0 12.2-7.2 23.1-17.2 30.1C53.7 174.1 32 212.5 32 256V448c0 35.3 28.7 64 64 64H224c35.3 0 64-28.7 64-64V256c0-43.5-21.7-81.9-54.8-105c-10-7-17.2-17.9-17.2-30.1V56c0-4.4 3.6-8 8-8c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0 0 0 0H104l0 0 0 0L96 0zm64 382c-26.5 0-48-20.1-48-45c0-16.8 22.1-48.1 36.3-66.4c6-7.8 17.5-7.8 23.5 0C185.9 288.9 208 320.2 208 337c0 24.9-21.5 45-48 45z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M96 0C82.7 0 72 10.7 72 24s10.7 24 24 24c4.4 0 8 3.6 8 8v64.9c0 12.2-7.2 23.1-17.2 30.1C53.7 174.1 32 212.5 32 256V448c0 35.3 28.7 64 64 64H224c35.3 0 64-28.7 64-64V256c0-43.5-21.7-81.9-54.8-105c-10-7-17.2-17.9-17.2-30.1V56c0-4.4 3.6-8 8-8c13.3 0 24-10.7 24-24s-10.7-24-24-24l-8 0 0 0 0 0H104l0 0 0 0L96 0zm64 382c-26.5 0-48-20.1-48-45c0-16.8 22.1-48.1 36.3-66.4c6-7.8 17.5-7.8 23.5 0C185.9 288.9 208 320.2 208 337c0 24.9-21.5 45-48 45z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bottle-water\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"h2o\", \"plastic\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c5\",\n    \"label\": \"Bottle Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M120 0h80c13.3 0 24 10.7 24 24V64H96V24c0-13.3 10.7-24 24-24zM32 151.7c0-15.6 9-29.8 23.2-36.5l24.4-11.4c11-5.1 23-7.8 35.1-7.8h90.6c12.1 0 24.1 2.7 35.1 7.8l24.4 11.4c14.1 6.6 23.2 20.8 23.2 36.5c0 14.4-7.5 27-18.9 34.1c11.5 8.8 18.9 22.6 18.9 38.2c0 16.7-8.5 31.4-21.5 40c12.9 8.6 21.5 23.3 21.5 40s-8.5 31.4-21.5 40c12.9 8.6 21.5 23.3 21.5 40s-8.5 31.4-21.5 40c12.9 8.6 21.5 23.3 21.5 40c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48c0-16.7 8.5-31.4 21.5-40C40.5 415.4 32 400.7 32 384s8.5-31.4 21.5-40C40.5 335.4 32 320.7 32 304s8.5-31.4 21.5-40C40.5 255.4 32 240.7 32 224c0-15.6 7.4-29.4 18.9-38.2C39.5 178.7 32 166.1 32 151.7zM96 240c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H112c-8.8 0-16 7.2-16 16zm16 112c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M120 0h80c13.3 0 24 10.7 24 24V64H96V24c0-13.3 10.7-24 24-24zM32 151.7c0-15.6 9-29.8 23.2-36.5l24.4-11.4c11-5.1 23-7.8 35.1-7.8h90.6c12.1 0 24.1 2.7 35.1 7.8l24.4 11.4c14.1 6.6 23.2 20.8 23.2 36.5c0 14.4-7.5 27-18.9 34.1c11.5 8.8 18.9 22.6 18.9 38.2c0 16.7-8.5 31.4-21.5 40c12.9 8.6 21.5 23.3 21.5 40s-8.5 31.4-21.5 40c12.9 8.6 21.5 23.3 21.5 40s-8.5 31.4-21.5 40c12.9 8.6 21.5 23.3 21.5 40c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48c0-16.7 8.5-31.4 21.5-40C40.5 415.4 32 400.7 32 384s8.5-31.4 21.5-40C40.5 335.4 32 320.7 32 304s8.5-31.4 21.5-40C40.5 255.4 32 240.7 32 224c0-15.6 7.4-29.4 18.9-38.2C39.5 178.7 32 166.1 32 151.7zM96 240c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H112c-8.8 0-16 7.2-16 16zm16 112c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bowl-food\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"catfood\", \"dogfood\", \"food\", \"rice\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c6\",\n    \"label\": \"Bowl Food\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 192c0-35.3 28.7-64 64-64c.5 0 1.1 0 1.6 0C73 91.5 105.3 64 144 64c15 0 29 4.1 40.9 11.2C198.2 49.6 225.1 32 256 32s57.8 17.6 71.1 43.2C339 68.1 353 64 368 64c38.7 0 71 27.5 78.4 64c.5 0 1.1 0 1.6 0c35.3 0 64 28.7 64 64c0 11.7-3.1 22.6-8.6 32H8.6C3.1 214.6 0 203.7 0 192zm0 91.4C0 268.3 12.3 256 27.4 256H484.6c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28H140.2c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 192c0-35.3 28.7-64 64-64c.5 0 1.1 0 1.6 0C73 91.5 105.3 64 144 64c15 0 29 4.1 40.9 11.2C198.2 49.6 225.1 32 256 32s57.8 17.6 71.1 43.2C339 68.1 353 64 368 64c38.7 0 71 27.5 78.4 64c.5 0 1.1 0 1.6 0c35.3 0 64 28.7 64 64c0 11.7-3.1 22.6-8.6 32H8.6C3.1 214.6 0 203.7 0 192zm0 91.4C0 268.3 12.3 256 27.4 256H484.6c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28H140.2c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bowl-rice\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boiled\", \"cooked\", \"cooked rice\", \"rice\", \"steamed\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2eb\",\n    \"label\": \"Bowl Rice\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 56c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24zm24 48h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 176H72c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256H484.6c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28H140.2c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 200c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H248c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H104c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H344c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H296c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H440c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H392c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 32h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H296c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 56c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24zm24 48h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 176H72c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256H484.6c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28H140.2c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 200c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H248c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H104c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H344c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H296c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H440c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H392c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 32h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H296c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bowling-ball\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f436\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.5\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alley\", \"candlepin\", \"gutter\", \"lane\", \"strike\", \"tenpin\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f436\",\n    \"label\": \"Bowling Ball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM240 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM208 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-64-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM240 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM208 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-64-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"box\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4e6\"],\n        \"secondary\": [\"10f466\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archive\", \"box\", \"container\", \"package\", \"parcel\", \"storage\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f466\",\n    \"label\": \"Box\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M50.7 58.5L0 160H208V32H93.7C75.5 32 58.9 42.3 50.7 58.5zM240 160H448L397.3 58.5C389.1 42.3 372.5 32 354.3 32H240V160zm208 32H0V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M50.7 58.5L0 160H208V32H93.7C75.5 32 58.9 42.3 50.7 58.5zM240 160H448L397.3 58.5C389.1 42.3 372.5 32 354.3 32H240V160zm208 32H0V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"box-archive\": {\n    \"aliases\": {\n      \"names\": [\"archive\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f187\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"box\", \"package\", \"save\", \"storage\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f187\",\n    \"label\": \"Box Archive\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32H480c17.7 0 32 14.3 32 32V96c0 17.7-14.3 32-32 32H32C14.3 128 0 113.7 0 96V64C0 46.3 14.3 32 32 32zm0 128H480V416c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V160zm128 80c0 8.8 7.2 16 16 16H336c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32H480c17.7 0 32 14.3 32 32V96c0 17.7-14.3 32-32 32H32C14.3 128 0 113.7 0 96V64C0 46.3 14.3 32 32 32zm0 128H480V416c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V160zm128 80c0 8.8 7.2 16 16 16H336c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"box-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f49e\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archive\", \"container\", \"package\", \"storage\", \"unpack\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f49e\",\n    \"label\": \"Box Open\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M58.9 42.1c3-6.1 9.6-9.6 16.3-8.7L320 64 564.8 33.4c6.7-.8 13.3 2.7 16.3 8.7l41.7 83.4c9 17.9-.6 39.6-19.8 45.1L439.6 217.3c-13.9 4-28.8-1.9-36.2-14.3L320 64 236.6 203c-7.4 12.4-22.3 18.3-36.2 14.3L37.1 170.6c-19.3-5.5-28.8-27.2-19.8-45.1L58.9 42.1zM321.1 128l54.9 91.4c14.9 24.8 44.6 36.6 72.5 28.6L576 211.6v167c0 22-15 41.2-36.4 46.6l-204.1 51c-10.2 2.6-20.9 2.6-31 0l-204.1-51C79 419.7 64 400.5 64 378.5v-167L191.6 248c27.8 8 57.6-3.8 72.5-28.6L318.9 128h2.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M58.9 42.1c3-6.1 9.6-9.6 16.3-8.7L320 64 564.8 33.4c6.7-.8 13.3 2.7 16.3 8.7l41.7 83.4c9 17.9-.6 39.6-19.8 45.1L439.6 217.3c-13.9 4-28.8-1.9-36.2-14.3L320 64 236.6 203c-7.4 12.4-22.3 18.3-36.2 14.3L37.1 170.6c-19.3-5.5-28.8-27.2-19.8-45.1L58.9 42.1zM321.1 128l54.9 91.4c14.9 24.8 44.6 36.6 72.5 28.6L576 211.6v167c0 22-15 41.2-36.4 46.6l-204.1 51c-10.2 2.6-20.9 2.6-31 0l-204.1-51C79 419.7 64 400.5 64 378.5v-167L191.6 248c27.8 8 57.6-3.8 72.5-28.6L318.9 128h2.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"box-tissue\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e05b\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cough\",\n        \"covid-19\",\n        \"kleenex\",\n        \"mucus\",\n        \"nose\",\n        \"sneeze\",\n        \"snot\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e05b\",\n    \"label\": \"Box Tissue\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M92.5 0H208c40 0 52 24 64 48s24 48 64 48h85.2C436 96 448 108 448 122.8c0 3.4-.7 6.8-1.9 10L409.6 224 384 288H128l-16-64L64.9 35.4c-.6-2.3-.9-4.6-.9-6.9C64 12.8 76.8 0 92.5 0zM79 224l16 64H80c-8.8 0-16 7.2-16 16s7.2 16 16 16h48H384h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H418.5l25.6-64H464c26.5 0 48 21.5 48 48V384H0V272c0-26.5 21.5-48 48-48H79zM0 416H512v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M92.5 0H208c40 0 52 24 64 48s24 48 64 48h85.2C436 96 448 108 448 122.8c0 3.4-.7 6.8-1.9 10L409.6 224 384 288H128l-16-64L64.9 35.4c-.6-2.3-.9-4.6-.9-6.9C64 12.8 76.8 0 92.5 0zM79 224l16 64H80c-8.8 0-16 7.2-16 16s7.2 16 16 16h48H384h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H418.5l25.6-64H464c26.5 0 48 21.5 48 48V384H0V272c0-26.5 21.5-48 48-48H79zM0 416H512v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"boxes-packing\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archive\", \"box\", \"package\", \"storage\", \"supplies\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c7\",\n    \"label\": \"Boxes Packing\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 48c0-26.5 21.5-48 48-48H592c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H381.3c1.8-5 2.7-10.4 2.7-16V253.3c18.6-6.6 32-24.4 32-45.3V176c0-26.5-21.5-48-48-48H256V48zM571.3 347.3c6.2-6.2 6.2-16.4 0-22.6l-64-64c-6.2-6.2-16.4-6.2-22.6 0l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L480 310.6V432c0 8.8 7.2 16 16 16s16-7.2 16-16V310.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0zM0 176c0-8.8 7.2-16 16-16H368c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H16c-8.8 0-16-7.2-16-16V176zm352 80V480c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V256H352zM144 320c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 48c0-26.5 21.5-48 48-48H592c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H381.3c1.8-5 2.7-10.4 2.7-16V253.3c18.6-6.6 32-24.4 32-45.3V176c0-26.5-21.5-48-48-48H256V48zM571.3 347.3c6.2-6.2 6.2-16.4 0-22.6l-64-64c-6.2-6.2-16.4-6.2-22.6 0l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L480 310.6V432c0 8.8 7.2 16 16 16s16-7.2 16-16V310.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0zM0 176c0-8.8 7.2-16 16-16H368c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H16c-8.8 0-16-7.2-16-16V176zm352 80V480c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V256H352zM144 320c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"boxes-stacked\": {\n    \"aliases\": {\n      \"names\": [\"boxes\", \"boxes-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"f4a1\"],\n        \"primary\": [\"f4a1\"],\n        \"secondary\": [\"10f468\", \"10f4a1\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archives\", \"inventory\", \"storage\", \"warehouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f468\",\n    \"label\": \"Boxes Stacked\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M248 0H208c-26.5 0-48 21.5-48 48V160c0 35.3 28.7 64 64 64H352c35.3 0 64-28.7 64-64V48c0-26.5-21.5-48-48-48H328V80c0 8.8-7.2 16-16 16H264c-8.8 0-16-7.2-16-16V0zM64 256c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H224c35.3 0 64-28.7 64-64V320c0-35.3-28.7-64-64-64H184v80c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V256H64zM352 512H512c35.3 0 64-28.7 64-64V320c0-35.3-28.7-64-64-64H472v80c0 8.8-7.2 16-16 16H408c-8.8 0-16-7.2-16-16V256H352c-15 0-28.8 5.1-39.7 13.8c4.9 10.4 7.7 22 7.7 34.2V464c0 12.2-2.8 23.8-7.7 34.2C323.2 506.9 337 512 352 512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M248 0H208c-26.5 0-48 21.5-48 48V160c0 35.3 28.7 64 64 64H352c35.3 0 64-28.7 64-64V48c0-26.5-21.5-48-48-48H328V80c0 8.8-7.2 16-16 16H264c-8.8 0-16-7.2-16-16V0zM64 256c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H224c35.3 0 64-28.7 64-64V320c0-35.3-28.7-64-64-64H184v80c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V256H64zM352 512H512c35.3 0 64-28.7 64-64V320c0-35.3-28.7-64-64-64H472v80c0 8.8-7.2 16-16 16H408c-8.8 0-16-7.2-16-16V256H352c-15 0-28.8 5.1-39.7 13.8c4.9 10.4 7.7 22 7.7 34.2V464c0 12.2-2.8 23.8-7.7 34.2C323.2 506.9 337 512 352 512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"braille\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f2a1\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alphabet\", \"blind\", \"dots\", \"raised\", \"vision\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a1\",\n    \"label\": \"Braille\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 96a64 64 0 1 1 128 0A64 64 0 1 1 0 96zM224 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM80 416a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM224 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM352 96a64 64 0 1 1 128 0A64 64 0 1 1 352 96zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0A64 64 0 1 1 512 96zm64 176a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM416 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 96a64 64 0 1 1 128 0A64 64 0 1 1 0 96zM224 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM80 416a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM64 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM224 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM352 96a64 64 0 1 1 128 0A64 64 0 1 1 352 96zm240 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0A64 64 0 1 1 512 96zm64 176a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM416 272a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm0-80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm16 224a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-80 0a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"brain\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9e0\"],\n        \"secondary\": [\"10f5dc\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"5.9.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"brain\",\n        \"cerebellum\",\n        \"gray matter\",\n        \"intellect\",\n        \"intelligent\",\n        \"medulla oblongata\",\n        \"mind\",\n        \"noodle\",\n        \"wit\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5dc\",\n    \"label\": \"Brain\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766749,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M184 0c30.9 0 56 25.1 56 56V456c0 30.9-25.1 56-56 56c-28.9 0-52.7-21.9-55.7-50.1c-5.2 1.4-10.7 2.1-16.3 2.1c-35.3 0-64-28.7-64-64c0-7.4 1.3-14.6 3.6-21.2C21.4 367.4 0 338.2 0 304c0-31.9 18.7-59.5 45.8-72.3C37.1 220.8 32 207 32 192c0-30.7 21.6-56.3 50.4-62.6C80.8 123.9 80 118 80 112c0-29.9 20.6-55.1 48.3-62.1C131.3 21.9 155.1 0 184 0zM328 0c28.9 0 52.6 21.9 55.7 49.9c27.8 7 48.3 32.1 48.3 62.1c0 6-.8 11.9-2.4 17.4c28.8 6.2 50.4 31.9 50.4 62.6c0 15-5.1 28.8-13.8 39.7C493.3 244.5 512 272.1 512 304c0 34.2-21.4 63.4-51.6 74.8c2.3 6.6 3.6 13.8 3.6 21.2c0 35.3-28.7 64-64 64c-5.6 0-11.1-.7-16.3-2.1c-3 28.2-26.8 50.1-55.7 50.1c-30.9 0-56-25.1-56-56V56c0-30.9 25.1-56 56-56z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M184 0c30.9 0 56 25.1 56 56V456c0 30.9-25.1 56-56 56c-28.9 0-52.7-21.9-55.7-50.1c-5.2 1.4-10.7 2.1-16.3 2.1c-35.3 0-64-28.7-64-64c0-7.4 1.3-14.6 3.6-21.2C21.4 367.4 0 338.2 0 304c0-31.9 18.7-59.5 45.8-72.3C37.1 220.8 32 207 32 192c0-30.7 21.6-56.3 50.4-62.6C80.8 123.9 80 118 80 112c0-29.9 20.6-55.1 48.3-62.1C131.3 21.9 155.1 0 184 0zM328 0c28.9 0 52.6 21.9 55.7 49.9c27.8 7 48.3 32.1 48.3 62.1c0 6-.8 11.9-2.4 17.4c28.8 6.2 50.4 31.9 50.4 62.6c0 15-5.1 28.8-13.8 39.7C493.3 244.5 512 272.1 512 304c0 34.2-21.4 63.4-51.6 74.8c2.3 6.6 3.6 13.8 3.6 21.2c0 35.3-28.7 64-64 64c-5.6 0-11.1-.7-16.3-2.1c-3 28.2-26.8 50.1-55.7 50.1c-30.9 0-56-25.1-56-56V56c0-30.9 25.1-56 56-56z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"brazilian-real-sign\": {\n    \"changes\": [\"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"brazilian real sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e46c\",\n    \"label\": \"Brazilian Real Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M400 0c17.7 0 32 14.3 32 32V50.2c12.5 2.3 24.7 6.4 36.2 12.1l10.1 5.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-10.2-5.1c-9.9-5-20.9-7.5-32-7.5h-1.7c-29.8 0-53.9 24.1-53.9 53.9c0 22 13.4 41.8 33.9 50l52 20.8c44.7 17.9 74.1 61.2 74.1 109.4v3.4c0 51.2-33.6 94.6-80 109.2V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V460.6c-15-3.5-29.4-9.7-42.3-18.3l-23.4-15.6c-14.7-9.8-18.7-29.7-8.9-44.4s29.7-18.7 44.4-8.9L361.2 389c10.8 7.2 23.4 11 36.3 11c27.9 0 50.5-22.6 50.5-50.5v-3.4c0-22-13.4-41.8-33.9-50l-52-20.8C317.3 257.4 288 214.1 288 165.9C288 114 321.5 70 368 54.2V32c0-17.7 14.3-32 32-32zM0 64C0 46.3 14.3 32 32 32h80c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320H64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 64zM64 256h48c44.2 0 80-35.8 80-80s-35.8-80-80-80H64V256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M400 0c17.7 0 32 14.3 32 32V50.2c12.5 2.3 24.7 6.4 36.2 12.1l10.1 5.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-10.2-5.1c-9.9-5-20.9-7.5-32-7.5h-1.7c-29.8 0-53.9 24.1-53.9 53.9c0 22 13.4 41.8 33.9 50l52 20.8c44.7 17.9 74.1 61.2 74.1 109.4v3.4c0 51.2-33.6 94.6-80 109.2V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V460.6c-15-3.5-29.4-9.7-42.3-18.3l-23.4-15.6c-14.7-9.8-18.7-29.7-8.9-44.4s29.7-18.7 44.4-8.9L361.2 389c10.8 7.2 23.4 11 36.3 11c27.9 0 50.5-22.6 50.5-50.5v-3.4c0-22-13.4-41.8-33.9-50l-52-20.8C317.3 257.4 288 214.1 288 165.9C288 114 321.5 70 368 54.2V32c0-17.7 14.3-32 32-32zM0 64C0 46.3 14.3 32 32 32h80c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320H64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 64zM64 256h48c44.2 0 80-35.8 80-80s-35.8-80-80-80H64V256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bread-slice\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7ec\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bake\",\n        \"bakery\",\n        \"baking\",\n        \"dough\",\n        \"flour\",\n        \"gluten\",\n        \"grain\",\n        \"sandwich\",\n        \"sourdough\",\n        \"toast\",\n        \"wheat\",\n        \"yeast\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ec\",\n    \"label\": \"Bread Slice\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 32C192 32 0 64 0 192c0 35.3 28.7 64 64 64V432c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V256c35.3 0 64-28.7 64-64C512 64 320 32 256 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 32C192 32 0 64 0 192c0 35.3 28.7 64 64 64V432c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V256c35.3 0 64-28.7 64-64C512 64 320 32 256 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bridge\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bridge\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c8\",\n    \"label\": \"Bridge\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H72v64H0V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96s96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96V160H504V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM456 96v64H376V96h80zM328 96v64H248V96h80zM200 96v64H120V96h80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H72v64H0V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96s96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96V160H504V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM456 96v64H376V96h80zM328 96v64H248V96h80zM200 96v64H120V96h80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bridge-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bridge\", \"not affected\", \"ok\", \"okay\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4c9\",\n    \"label\": \"Bridge Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32h40v64H32V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2V160H536V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM488 96v64H408V96h80zM360 96v64H280V96h80zM232 96v64H152V96h80zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32h40v64H32V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2V160H536V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM488 96v64H408V96h80zM360 96v64H280V96h80zM232 96v64H152V96h80zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bridge-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"bridge\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ca\",\n    \"label\": \"Bridge Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32h40v64H32V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2V160H536V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM488 96v64H408V96h80zM360 96v64H280V96h80zM232 96v64H152V96h80zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32h40v64H32V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2V160H536V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM488 96v64H408V96h80zM360 96v64H280V96h80zM232 96v64H152V96h80zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bridge-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bridge\", \"destroy\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4cb\",\n    \"label\": \"Bridge Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32h40v64H32V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2V160H536V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM488 96v64H408V96h80zM360 96v64H280V96h80zM232 96v64H152V96h80zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 32C46.3 32 32 46.3 32 64s14.3 32 32 32h40v64H32V288c53 0 96 43 96 96v64c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V384c0-53 43-96 96-96c6.3 0 12.4 .6 18.3 1.7C367.1 231.8 426.9 192 496 192c42.5 0 81.6 15.1 112 40.2V160H536V96h40c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM488 96v64H408V96h80zM360 96v64H280V96h80zM232 96v64H152V96h80zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bridge-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bridge\", \"closed\", \"lockdown\", \"quarantine\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4cc\",\n    \"label\": \"Bridge Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 64c0-17.7 14.3-32 32-32H576c17.7 0 32 14.3 32 32s-14.3 32-32 32H536v64h-8c-61.9 0-112 50.1-112 112v24.6c-9.9 5.8-18.2 14.1-23.8 24.1c-17.6-20-43.4-32.7-72.2-32.7c-53 0-96 43-96 96v64c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V384c0-53-43-96-96-96V160h72V96H64C46.3 96 32 81.7 32 64zM408 96v64h80V96H408zm-48 64V96H280v64h80zM152 96v64h80V96H152zM528 240c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 64c0-17.7 14.3-32 32-32H576c17.7 0 32 14.3 32 32s-14.3 32-32 32H536v64h-8c-61.9 0-112 50.1-112 112v24.6c-9.9 5.8-18.2 14.1-23.8 24.1c-17.6-20-43.4-32.7-72.2-32.7c-53 0-96 43-96 96v64c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V384c0-53-43-96-96-96V160h72V96H64C46.3 96 32 81.7 32 64zM408 96v64h80V96H408zm-48 64V96H280v64h80zM152 96v64h80V96H152zM528 240c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bridge-water\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bridge\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ce\",\n    \"label\": \"Bridge Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 96C0 78.3 14.3 64 32 64H544c17.7 0 32 14.3 32 32v35.6c0 15.7-12.7 28.4-28.4 28.4c-37.3 0-67.6 30.2-67.6 67.6V352.5c-12.9 0-25.8 3.9-36.8 11.7c-18 12.4-40.1 20.3-59.2 20.3h0l0-.5V256c0-53-43-96-96-96s-96 43-96 96V384l0 .5c-19 0-41.2-7.9-59.1-20.3c-11.1-7.8-24-11.7-36.9-11.7V227.6C96 190.2 65.8 160 28.4 160C12.7 160 0 147.3 0 131.6V96zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 96C0 78.3 14.3 64 32 64H544c17.7 0 32 14.3 32 32v35.6c0 15.7-12.7 28.4-28.4 28.4c-37.3 0-67.6 30.2-67.6 67.6V352.5c-12.9 0-25.8 3.9-36.8 11.7c-18 12.4-40.1 20.3-59.2 20.3h0l0-.5V256c0-53-43-96-96-96s-96 43-96 96V384l0 .5c-19 0-41.2-7.9-59.1-20.3c-11.1-7.8-24-11.7-36.9-11.7V227.6C96 190.2 65.8 160 28.4 160C12.7 160 0 147.3 0 131.6V96zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"briefcase\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4bc\"],\n        \"secondary\": [\"10f0b1\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bag\",\n        \"briefcas\",\n        \"briefcase\",\n        \"business\",\n        \"luggage\",\n        \"office\",\n        \"work\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0b1\",\n    \"label\": \"Briefcase\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160v96H192 320 512V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM512 288H320v32c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V288H0V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160v96H192 320 512V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM512 288H320v32c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V288H0V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"briefcase-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f469\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"doctor\", \"emt\", \"first aid\", \"health\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f469\",\n    \"label\": \"Briefcase Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zm96 152c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H288v48c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V320H176c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h48V208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zm96 152c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H288v48c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V320H176c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h48V208z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"broom\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9f9\"],\n        \"secondary\": [\"10f51a\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"broom\",\n        \"clean\",\n        \"cleaning\",\n        \"firebolt\",\n        \"fly\",\n        \"halloween\",\n        \"nimbus 2000\",\n        \"quidditch\",\n        \"sweep\",\n        \"sweeping\",\n        \"witch\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f51a\",\n    \"label\": \"Broom\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6c-12.5 0-22.6 10.1-22.6 22.6v29.1L364.3 320h29.1c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8C76.5 307.5 64 337.7 64 369.2c0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9C0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8c30.6-30.6 45.9-73.1 42.3-115.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6c-12.5 0-22.6 10.1-22.6 22.6v29.1L364.3 320h29.1c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8C76.5 307.5 64 337.7 64 369.2c0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9C0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8c30.6-30.6 45.9-73.1 42.3-115.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"broom-ball\": {\n    \"aliases\": {\n      \"names\": [\"quidditch\", \"quidditch-broom-ball\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f458\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ball\",\n        \"bludger\",\n        \"broom\",\n        \"golden snitch\",\n        \"harry potter\",\n        \"hogwarts\",\n        \"quaffle\",\n        \"sport\",\n        \"wizard\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f458\",\n    \"label\": \"Broom Ball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M566.6 9.4c12.5 12.5 12.5 32.8 0 45.3l-192 192 34.7 34.7c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H364.3L256 211.7V182.6c0-12.5 10.1-22.6 22.6-22.6c6 0 11.8 2.4 16 6.6l34.7 34.7 192-192c12.5-12.5 32.8-12.5 45.3 0zm-344 225.5L341.1 353.4c3.7 42.7-11.7 85.2-42.3 115.8C271.4 496.6 234.2 512 195.5 512L22.1 512C9.9 512 0 502.1 0 489.9c0-6.3 2.7-12.3 7.3-16.5L133.7 359.7c4.2-3.7-.4-10.4-5.4-7.9L77.2 377.4c-6.1 3-13.2-1.4-13.2-8.2c0-31.5 12.5-61.7 34.8-84l8-8c30.6-30.6 73.1-45.9 115.8-42.3zM464 352a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M566.6 9.4c12.5 12.5 12.5 32.8 0 45.3l-192 192 34.7 34.7c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H364.3L256 211.7V182.6c0-12.5 10.1-22.6 22.6-22.6c6 0 11.8 2.4 16 6.6l34.7 34.7 192-192c12.5-12.5 32.8-12.5 45.3 0zm-344 225.5L341.1 353.4c3.7 42.7-11.7 85.2-42.3 115.8C271.4 496.6 234.2 512 195.5 512L22.1 512C9.9 512 0 502.1 0 489.9c0-6.3 2.7-12.3 7.3-16.5L133.7 359.7c4.2-3.7-.4-10.4-5.4-7.9L77.2 377.4c-6.1 3-13.2-1.4-13.2-8.2c0-31.5 12.5-61.7 34.8-84l8-8c30.6-30.6 73.1-45.9 115.8-42.3zM464 352a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"brush\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f55d\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"art\", \"bristles\", \"color\", \"handle\", \"paint\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f55d\",\n    \"label\": \"Brush\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V224v22.4V256H9.6 374.4 384v-9.6V224 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288v32c0 35.3 28.7 64 64 64h64v64c0 35.3 28.7 64 64 64s64-28.7 64-64V384h64c35.3 0 64-28.7 64-64V288H0zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M162.4 6c-1.5-3.6-5-6-8.9-6h-19c-3.9 0-7.5 2.4-8.9 6L104.9 57.7c-3.2 8-14.6 8-17.8 0L66.4 6c-1.5-3.6-5-6-8.9-6H48C21.5 0 0 21.5 0 48V224v22.4V256H9.6 374.4 384v-9.6V224 48c0-26.5-21.5-48-48-48H230.5c-3.9 0-7.5 2.4-8.9 6L200.9 57.7c-3.2 8-14.6 8-17.8 0L162.4 6zM0 288v32c0 35.3 28.7 64 64 64h64v64c0 35.3 28.7 64 64 64s64-28.7 64-64V384h64c35.3 0 64-28.7 64-64V288H0zM192 432a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"btc\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f15a\",\n    \"label\": \"BTC\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bucket\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bucket\", \"pail\", \"sandcastle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4cf\",\n    \"label\": \"Bucket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 152v8H48v-8C48 68.1 116.1 0 200 0h48c83.9 0 152 68.1 152 152v8H352v-8c0-57.4-46.6-104-104-104H200C142.6 48 96 94.6 96 152zM0 224c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32h-5.1L388.5 469c-2.6 24.4-23.2 43-47.7 43H107.2c-24.6 0-45.2-18.5-47.7-43L37.1 256H32c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 152v8H48v-8C48 68.1 116.1 0 200 0h48c83.9 0 152 68.1 152 152v8H352v-8c0-57.4-46.6-104-104-104H200C142.6 48 96 94.6 96 152zM0 224c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32h-5.1L388.5 469c-2.6 24.4-23.2 43-47.7 43H107.2c-24.6 0-45.2-18.5-47.7-43L37.1 256H32c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"buffer\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f837\",\n    \"label\": \"Buffer\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M427.84 380.67l-196.5 97.82a18.6 18.6 0 0 1-14.67 0L20.16 380.67c-4-2-4-5.28 0-7.29L67.22 350a18.65 18.65 0 0 1 14.69 0l134.76 67a18.51 18.51 0 0 0 14.67 0l134.76-67a18.62 18.62 0 0 1 14.68 0l47.06 23.43c4.05 1.96 4.05 5.24 0 7.24zm0-136.53l-47.06-23.43a18.62 18.62 0 0 0-14.68 0l-134.76 67.08a18.68 18.68 0 0 1-14.67 0L81.91 220.71a18.65 18.65 0 0 0-14.69 0l-47.06 23.43c-4 2-4 5.29 0 7.31l196.51 97.8a18.6 18.6 0 0 0 14.67 0l196.5-97.8c4.05-2.02 4.05-5.3 0-7.31zM20.16 130.42l196.5 90.29a20.08 20.08 0 0 0 14.67 0l196.51-90.29c4-1.86 4-4.89 0-6.74L231.33 33.4a19.88 19.88 0 0 0-14.67 0l-196.5 90.28c-4.05 1.85-4.05 4.88 0 6.74z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"bug\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f188\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.15.4\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"beetle\", \"error\", \"glitch\", \"insect\", \"repair\", \"report\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f188\",\n    \"label\": \"Bug\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c53 0 96 43 96 96v3.6c0 15.7-12.7 28.4-28.4 28.4H188.4c-15.7 0-28.4-12.7-28.4-28.4V96c0-53 43-96 96-96zM41.4 105.4c12.5-12.5 32.8-12.5 45.3 0l64 64c.7 .7 1.3 1.4 1.9 2.1c14.2-7.3 30.4-11.4 47.5-11.4H312c17.1 0 33.2 4.1 47.5 11.4c.6-.7 1.2-1.4 1.9-2.1l64-64c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-64 64c-.7 .7-1.4 1.3-2.1 1.9c6.2 12 10.1 25.3 11.1 39.5H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H416c0 24.6-5.5 47.8-15.4 68.6c2.2 1.3 4.2 2.9 6 4.8l64 64c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0l-63.1-63.1c-24.5 21.8-55.8 36.2-90.3 39.6V240c0-8.8-7.2-16-16-16s-16 7.2-16 16V479.2c-34.5-3.4-65.8-17.8-90.3-39.6L86.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l64-64c1.9-1.9 3.9-3.4 6-4.8C101.5 367.8 96 344.6 96 320H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96.3c1.1-14.1 5-27.5 11.1-39.5c-.7-.6-1.4-1.2-2.1-1.9l-64-64c-12.5-12.5-12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bug-slash\": {\n    \"changes\": [\"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beetle\",\n        \"fix\",\n        \"glitch\",\n        \"insect\",\n        \"optimize\",\n        \"repair\",\n        \"report\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e490\",\n    \"label\": \"Bug Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L477.4 348.9c1.7-9.4 2.6-19 2.6-28.9h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H479.7c-1.1-14.1-5-27.5-11.1-39.5c.7-.6 1.4-1.2 2.1-1.9l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-.7 .7-1.3 1.4-1.9 2.1C409.2 164.1 393.1 160 376 160H264c-8.3 0-16.3 1-24 2.8L38.8 5.1zM320 0c-53 0-96 43-96 96v3.6c0 15.7 12.7 28.4 28.4 28.4H387.6c15.7 0 28.4-12.7 28.4-28.4V96c0-53-43-96-96-96zM160.3 256H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h64c0 24.6 5.5 47.8 15.4 68.6c-2.2 1.3-4.2 2.9-6 4.8l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l63.1-63.1c24.5 21.8 55.8 36.2 90.3 39.6V335.5L166.7 227.3c-3.4 9-5.6 18.7-6.4 28.7zM336 479.2c36.6-3.6 69.7-19.6 94.8-43.8L336 360.7V479.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L477.4 348.9c1.7-9.4 2.6-19 2.6-28.9h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H479.7c-1.1-14.1-5-27.5-11.1-39.5c.7-.6 1.4-1.2 2.1-1.9l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-.7 .7-1.3 1.4-1.9 2.1C409.2 164.1 393.1 160 376 160H264c-8.3 0-16.3 1-24 2.8L38.8 5.1zM320 0c-53 0-96 43-96 96v3.6c0 15.7 12.7 28.4 28.4 28.4H387.6c15.7 0 28.4-12.7 28.4-28.4V96c0-53-43-96-96-96zM160.3 256H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h64c0 24.6 5.5 47.8 15.4 68.6c-2.2 1.3-4.2 2.9-6 4.8l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l63.1-63.1c24.5 21.8 55.8 36.2 90.3 39.6V335.5L166.7 227.3c-3.4 9-5.6 18.7-6.4 28.7zM336 479.2c36.6-3.6 69.7-19.6 94.8-43.8L336 360.7V479.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bugs\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bedbug\", \"infestation\", \"lice\", \"plague\", \"ticks\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d0\",\n    \"label\": \"Bugs\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M164.5 107.4l33.4-73.5c5.5-12.1 .1-26.3-11.9-31.8s-26.3-.1-31.8 11.9L128 71.7 101.9 14.1C96.4 2 82.1-3.3 70.1 2.1S52.7 21.9 58.1 33.9l33.4 73.5c-10.2 7.1-18.2 17-22.9 28.6h-17l-4.1-20.7c-2.6-13-15.2-21.4-28.2-18.8S-2.1 111.7 .5 124.7l8 40C10.7 175.9 20.6 184 32 184H64v23.3l-37.8 9.5c-9.5 2.4-16.6 10.2-17.9 19.9l-8 56c-1.9 13.1 7.2 25.3 20.4 27.2s25.3-7.2 27.2-20.4l5.7-40 18.4-4.6C82.7 274.6 103.8 288 128 288s45.3-13.4 56.1-33.2l18.4 4.6 5.7 40c1.9 13.1 14 22.2 27.2 20.4s22.2-14 20.4-27.2l-8-56c-1.4-9.7-8.5-17.5-17.9-19.9L192 207.3V184h32c11.4 0 21.3-8.1 23.5-19.3l8-40c2.6-13-5.8-25.6-18.8-28.2s-25.6 5.8-28.2 18.8L204.3 136h-17c-4.7-11.6-12.7-21.5-22.9-28.6zM496 286.5l65.6-47c10.8-7.7 13.3-22.7 5.6-33.5s-22.7-13.3-33.5-5.6l-51.4 36.8 6.1-62.9c1.3-13.2-8.4-24.9-21.6-26.2s-24.9 8.4-26.2 21.6L432.8 250c-12.3 1-24.2 5.6-34.1 13.3L384 254.8l6.8-20c4.2-12.6-2.5-26.2-15-30.4s-26.2 2.5-30.4 15l-13.1 38.6c-3.7 10.8 .8 22.8 10.7 28.5l27.7 16L359 322.7 321.5 312c-9.4-2.7-19.5 .6-25.5 8.3l-34.9 44.5c-8.2 10.4-6.4 25.5 4.1 33.7s25.5 6.4 33.7-4.1l25-31.8 18.2 5.2c-.5 22.6 11 44.7 32 56.8s45.9 11 65.2-.7l13.6 13.2-15.1 37.5c-4.9 12.3 1 26.3 13.3 31.2s26.3-1 31.2-13.3L503.5 440c3.6-9.1 1.4-19.4-5.6-26.2l-28-27.1 11.6-20.1 27.7 16c9.9 5.7 22.5 3.7 30-4.9L566.2 347c8.7-10 7.8-25.1-2.2-33.9s-25.1-7.8-33.9 2.2l-13.9 15.9-14.7-8.5c1.7-12.4-.2-25-5.5-36.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M164.5 107.4l33.4-73.5c5.5-12.1 .1-26.3-11.9-31.8s-26.3-.1-31.8 11.9L128 71.7 101.9 14.1C96.4 2 82.1-3.3 70.1 2.1S52.7 21.9 58.1 33.9l33.4 73.5c-10.2 7.1-18.2 17-22.9 28.6h-17l-4.1-20.7c-2.6-13-15.2-21.4-28.2-18.8S-2.1 111.7 .5 124.7l8 40C10.7 175.9 20.6 184 32 184H64v23.3l-37.8 9.5c-9.5 2.4-16.6 10.2-17.9 19.9l-8 56c-1.9 13.1 7.2 25.3 20.4 27.2s25.3-7.2 27.2-20.4l5.7-40 18.4-4.6C82.7 274.6 103.8 288 128 288s45.3-13.4 56.1-33.2l18.4 4.6 5.7 40c1.9 13.1 14 22.2 27.2 20.4s22.2-14 20.4-27.2l-8-56c-1.4-9.7-8.5-17.5-17.9-19.9L192 207.3V184h32c11.4 0 21.3-8.1 23.5-19.3l8-40c2.6-13-5.8-25.6-18.8-28.2s-25.6 5.8-28.2 18.8L204.3 136h-17c-4.7-11.6-12.7-21.5-22.9-28.6zM496 286.5l65.6-47c10.8-7.7 13.3-22.7 5.6-33.5s-22.7-13.3-33.5-5.6l-51.4 36.8 6.1-62.9c1.3-13.2-8.4-24.9-21.6-26.2s-24.9 8.4-26.2 21.6L432.8 250c-12.3 1-24.2 5.6-34.1 13.3L384 254.8l6.8-20c4.2-12.6-2.5-26.2-15-30.4s-26.2 2.5-30.4 15l-13.1 38.6c-3.7 10.8 .8 22.8 10.7 28.5l27.7 16L359 322.7 321.5 312c-9.4-2.7-19.5 .6-25.5 8.3l-34.9 44.5c-8.2 10.4-6.4 25.5 4.1 33.7s25.5 6.4 33.7-4.1l25-31.8 18.2 5.2c-.5 22.6 11 44.7 32 56.8s45.9 11 65.2-.7l13.6 13.2-15.1 37.5c-4.9 12.3 1 26.3 13.3 31.2s26.3-1 31.2-13.3L503.5 440c3.6-9.1 1.4-19.4-5.6-26.2l-28-27.1 11.6-20.1 27.7 16c9.9 5.7 22.5 3.7 30-4.9L566.2 347c8.7-10 7.8-25.1-2.2-33.9s-25.1-7.8-33.9 2.2l-13.9 15.9-14.7-8.5c1.7-12.4-.2-25-5.5-36.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3e2\", \"f0f7\"],\n        \"secondary\": [\"10f1ad\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"apartment\",\n        \"building\",\n        \"business\",\n        \"city\",\n        \"company\",\n        \"office\",\n        \"office building\",\n        \"urban\",\n        \"work\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1ad\",\n    \"label\": \"Building\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 48c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16h80V400c0-26.5 21.5-48 48-48s48 21.5 48 48v64h80c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H64zM0 64C0 28.7 28.7 0 64 0H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm88 40c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H104c-8.8 0-16-7.2-16-16V104zM232 88h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H232c-8.8 0-16-7.2-16-16V104c0-8.8 7.2-16 16-16zM88 232c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H104c-8.8 0-16-7.2-16-16V232zm144-16h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H232c-8.8 0-16-7.2-16-16V232c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 48c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16h80V400c0-26.5 21.5-48 48-48s48 21.5 48 48v64h80c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H64zM0 64C0 28.7 28.7 0 64 0H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm88 40c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H104c-8.8 0-16-7.2-16-16V104zM232 88h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H232c-8.8 0-16-7.2-16-16V104c0-8.8 7.2-16 16-16zM88 232c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H104c-8.8 0-16-7.2-16-16V232zm144-16h48c8.8 0 16 7.2 16 16v48c0 8.8-7.2 16-16 16H232c-8.8 0-16-7.2-16-16V232c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"building-circle-arrow-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"distribution center\", \"office\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d1\",\n    \"label\": \"Building Circle Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V232.2c-39.1 32.3-64 81.1-64 135.8c0 49.5 20.4 94.2 53.3 126.2C364.5 505.1 351.1 512 336 512H240V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H48c-26.5 0-48-21.5-48-48V48zM80 224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H272zM64 112v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H176zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16zm96 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm140.7-67.3c-6.2 6.2-6.2 16.4 0 22.6L521.4 352H432c-8.8 0-16 7.2-16 16s7.2 16 16 16h89.4l-28.7 28.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56-56c6.2-6.2 6.2-16.4 0-22.6l-56-56c-6.2-6.2-16.4-6.2-22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V232.2c-39.1 32.3-64 81.1-64 135.8c0 49.5 20.4 94.2 53.3 126.2C364.5 505.1 351.1 512 336 512H240V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H48c-26.5 0-48-21.5-48-48V48zM80 224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H272zM64 112v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H176zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16zm96 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm140.7-67.3c-6.2 6.2-6.2 16.4 0 22.6L521.4 352H432c-8.8 0-16 7.2-16 16s7.2 16 16 16h89.4l-28.7 28.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56-56c6.2-6.2 6.2-16.4 0-22.6l-56-56c-6.2-6.2-16.4-6.2-22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"not affected\", \"office\", \"ok\", \"okay\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d2\",\n    \"label\": \"Building Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"building\", \"city\", \"office\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d3\",\n    \"label\": \"Building Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"destroy\", \"office\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d4\",\n    \"label\": \"Building Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c15.1 0 28.5-6.9 37.3-17.8C340.4 462.2 320 417.5 320 368c0-54.7 24.9-103.5 64-135.8V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-columns\": {\n    \"aliases\": {\n      \"names\": [\"bank\", \"institution\", \"museum\", \"university\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f19c\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bank\",\n        \"building\",\n        \"college\",\n        \"education\",\n        \"institution\",\n        \"museum\",\n        \"students\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f19c\",\n    \"label\": \"Building Columns\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M243.4 2.6l-224 96c-14 6-21.8 21-18.7 35.8S16.8 160 32 160v8c0 13.3 10.7 24 24 24H456c13.3 0 24-10.7 24-24v-8c15.2 0 28.3-10.7 31.3-25.6s-4.8-29.9-18.7-35.8l-224-96c-8-3.4-17.2-3.4-25.2 0zM128 224H64V420.3c-.6 .3-1.2 .7-1.8 1.1l-48 32c-11.7 7.8-17 22.4-12.9 35.9S17.9 512 32 512H480c14.1 0 26.5-9.2 30.6-22.7s-1.1-28.1-12.9-35.9l-48-32c-.6-.4-1.2-.7-1.8-1.1V224H384V416H344V224H280V416H232V224H168V416H128V224zM256 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M243.4 2.6l-224 96c-14 6-21.8 21-18.7 35.8S16.8 160 32 160v8c0 13.3 10.7 24 24 24H456c13.3 0 24-10.7 24-24v-8c15.2 0 28.3-10.7 31.3-25.6s-4.8-29.9-18.7-35.8l-224-96c-8-3.4-17.2-3.4-25.2 0zM128 224H64V420.3c-.6 .3-1.2 .7-1.8 1.1l-48 32c-11.7 7.8-17 22.4-12.9 35.9S17.9 512 32 512H480c14.1 0 26.5-9.2 30.6-22.7s-1.1-28.1-12.9-35.9l-48-32c-.6-.4-1.2-.7-1.8-1.1V224H384V416H344V224H280V416H232V224H168V416H128V224zM256 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-flag\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \" city\",\n        \"building\",\n        \"diplomat\",\n        \"embassy\",\n        \"flag\",\n        \"headquarters\",\n        \"united nations\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d5\",\n    \"label\": \"Building Flag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM448 0c-17.7 0-32 14.3-32 32V512h64V192H624c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H480c0-17.7-14.3-32-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM448 0c-17.7 0-32 14.3-32 32V512h64V192H624c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H480c0-17.7-14.3-32-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"city\",\n        \"closed\",\n        \"lock\",\n        \"lockdown\",\n        \"quarantine\",\n        \"secure\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d6\",\n    \"label\": \"Building Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h88.6c-5.4-9.4-8.6-20.3-8.6-32V352c0-23.7 12.9-44.4 32-55.4V272c0-30.5 12.2-58.2 32-78.4V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM464 240c17.7 0 32 14.3 32 32v48H432V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h88.6c-5.4-9.4-8.6-20.3-8.6-32V352c0-23.7 12.9-44.4 32-55.4V272c0-30.5 12.2-58.2 32-78.4V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM464 240c17.7 0 32 14.3 32 32v48H432V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-ngo\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\" city\", \"building\", \"non governmental organization\", \"office\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d7\",\n    \"label\": \"Building Ngo\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM168 64h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H184v64h16V144c0-8.8 7.2-16 16-16s16 7.2 16 16v24c0 13.3-10.7 24-24 24H176c-13.3 0-24-10.7-24-24V80c0-8.8 7.2-16 16-16zM304 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16s16-7.2 16-16V112c0-8.8-7.2-16-16-16zm-48 16c0-26.5 21.5-48 48-48s48 21.5 48 48v32c0 26.5-21.5 48-48 48s-48-21.5-48-48V112zM61.3 71.1l34.7 52V80c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4L64 132.8V176c0 8.8-7.2 16-16 16s-16-7.2-16-16V80c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM168 64h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H184v64h16V144c0-8.8 7.2-16 16-16s16 7.2 16 16v24c0 13.3-10.7 24-24 24H176c-13.3 0-24-10.7-24-24V80c0-8.8 7.2-16 16-16zM304 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16s16-7.2 16-16V112c0-8.8-7.2-16-16-16zm-48 16c0-26.5 21.5-48 48-48s48 21.5 48 48v32c0 26.5-21.5 48-48 48s-48-21.5-48-48V112zM61.3 71.1l34.7 52V80c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4L64 132.8V176c0 8.8-7.2 16-16 16s-16-7.2-16-16V80c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-shield\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"police\", \"protect\", \"safety\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d8\",\n    \"label\": \"Building Shield\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V207l-42.4 17H304 272c-8.8 0-16 7.2-16 16v32 24.2V304c0 .9 .1 1.7 .2 2.6c2.3 58.1 24.1 144.8 98.7 201.5c-5.8 2.5-12.2 3.9-18.9 3.9H240V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H48c-26.5 0-48-21.5-48-48V48zM80 224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zM64 112v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H176zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16zM423.1 225.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8V461.7c68.2-33 91.5-99 95.4-149.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V207l-42.4 17H304 272c-8.8 0-16 7.2-16 16v32 24.2V304c0 .9 .1 1.7 .2 2.6c2.3 58.1 24.1 144.8 98.7 201.5c-5.8 2.5-12.2 3.9-18.9 3.9H240V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H48c-26.5 0-48-21.5-48-48V48zM80 224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zM64 112v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H176zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16zM423.1 225.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8V461.7c68.2-33 91.5-99 95.4-149.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-un\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"office\", \"united nations\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4d9\",\n    \"label\": \"Building Un\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM237.3 71.1l34.7 52V80c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52V176c0 8.8-7.2 16-16 16s-16-7.2-16-16V80c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM112 80v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80c0-8.8 7.2-16 16-16s16 7.2 16 16v64c0 26.5-21.5 48-48 48s-48-21.5-48-48V80c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h96c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM237.3 71.1l34.7 52V80c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52V176c0 8.8-7.2 16-16 16s-16-7.2-16-16V80c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM112 80v64c0 8.8 7.2 16 16 16s16-7.2 16-16V80c0-8.8 7.2-16 16-16s16 7.2 16 16v64c0 26.5-21.5 48-48 48s-48-21.5-48-48V80c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-user\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"apartment\", \"building\", \"city\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4da\",\n    \"label\": \"Building User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h89.9c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2V271.8 48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM576 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM352 477.1c0 19.3 15.6 34.9 34.9 34.9H605.1c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1H445.1c-51.4 0-93.1 41.7-93.1 93.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V464c0 26.5 21.5 48 48 48h96V432c0-26.5 21.5-48 48-48s48 21.5 48 48v80h89.9c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2V271.8 48c0-26.5-21.5-48-48-48H48zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM80 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V112zM272 96h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16zM576 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM352 477.1c0 19.3 15.6 34.9 34.9 34.9H605.1c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1H445.1c-51.4 0-93.1 41.7-93.1 93.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"building-wheat\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agriculture\", \"building\", \"city\", \"usda\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4db\",\n    \"label\": \"Building Wheat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H240V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H48c-26.5 0-48-21.5-48-48V48zM80 224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H272zM64 112v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H176zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16zm384 80v16c0 44.2-35.8 80-80 80H544V272c0-44.2 35.8-80 80-80h16zm0 128c0 44.2-35.8 80-80 80H544V384c0-44.2 35.8-80 80-80h16v16zm0 112c0 44.2-35.8 80-80 80H544V496c0-44.2 35.8-80 80-80h16v16zM512 496v16H496c-44.2 0-80-35.8-80-80V416h16c44.2 0 80 35.8 80 80zm0-96H496c-44.2 0-80-35.8-80-80V304h16c44.2 0 80 35.8 80 80v16zm0-128v16H496c-44.2 0-80-35.8-80-80V192h16c44.2 0 80 35.8 80 80zM528 32c13.3 0 24 10.7 24 24V160c0 13.3-10.7 24-24 24s-24-10.7-24-24V56c0-13.3 10.7-24 24-24zm96 64v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V96c0-13.3 10.7-24 24-24s24 10.7 24 24zM456 72c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V96c0-13.3 10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H240V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H48c-26.5 0-48-21.5-48-48V48zM80 224c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zm112-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H272zM64 112v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zM176 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H176zm80 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16zm384 80v16c0 44.2-35.8 80-80 80H544V272c0-44.2 35.8-80 80-80h16zm0 128c0 44.2-35.8 80-80 80H544V384c0-44.2 35.8-80 80-80h16v16zm0 112c0 44.2-35.8 80-80 80H544V496c0-44.2 35.8-80 80-80h16v16zM512 496v16H496c-44.2 0-80-35.8-80-80V416h16c44.2 0 80 35.8 80 80zm0-96H496c-44.2 0-80-35.8-80-80V304h16c44.2 0 80 35.8 80 80v16zm0-128v16H496c-44.2 0-80-35.8-80-80V192h16c44.2 0 80 35.8 80 80zM528 32c13.3 0 24 10.7 24 24V160c0 13.3-10.7 24-24 24s-24-10.7-24-24V56c0-13.3 10.7-24 24-24zm96 64v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V96c0-13.3 10.7-24 24-24s24 10.7 24 24zM456 72c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V96c0-13.3 10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bullhorn\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4e2\", \"1f56b\"],\n        \"secondary\": [\"10f0a1\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Bullhorn\",\n        \"announcement\",\n        \"broadcast\",\n        \"loud\",\n        \"louder\",\n        \"loudspeaker\",\n        \"megaphone\",\n        \"public address\",\n        \"share\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0a1\",\n    \"label\": \"Bullhorn\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75H192 160 64c-35.3 0-64 28.7-64 64v96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V352l8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V300.4c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4V32zm-64 76.7V240 371.3C357.2 317.8 280.5 288 200.7 288H192V192h8.7c79.8 0 156.5-29.8 215.3-83.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bullseye\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f140\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.10.1\",\n      \"5.15.4\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archery\", \"goal\", \"objective\", \"strategy\", \"target\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f140\",\n    \"label\": \"Bullseye\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 256A192 192 0 1 0 64 256a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 256A192 192 0 1 0 64 256a192 192 0 1 0 384 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 80a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zM224 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"burger\": {\n    \"aliases\": {\n      \"names\": [\"hamburger\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f805\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bacon\",\n        \"beef\",\n        \"burger\",\n        \"burger king\",\n        \"cheeseburger\",\n        \"fast food\",\n        \"grill\",\n        \"ground beef\",\n        \"mcdonalds\",\n        \"sandwich\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f805\",\n    \"label\": \"Burger\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M61.1 224C45 224 32 211 32 194.9c0-1.9 .2-3.7 .6-5.6C37.9 168.3 78.8 32 256 32s218.1 136.3 223.4 157.3c.5 1.9 .6 3.7 .6 5.6c0 16.1-13 29.1-29.1 29.1H61.1zM144 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm240 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zM272 96a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM16 304c0-26.5 21.5-48 48-48H448c26.5 0 48 21.5 48 48s-21.5 48-48 48H64c-26.5 0-48-21.5-48-48zm16 96c0-8.8 7.2-16 16-16H464c8.8 0 16 7.2 16 16v16c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V400z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M61.1 224C45 224 32 211 32 194.9c0-1.9 .2-3.7 .6-5.6C37.9 168.3 78.8 32 256 32s218.1 136.3 223.4 157.3c.5 1.9 .6 3.7 .6 5.6c0 16.1-13 29.1-29.1 29.1H61.1zM144 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm240 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zM272 96a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM16 304c0-26.5 21.5-48 48-48H448c26.5 0 48 21.5 48 48s-21.5 48-48 48H64c-26.5 0-48-21.5-48-48zm16 96c0-8.8 7.2-16 16-16H464c8.8 0 16 7.2 16 16v16c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V400z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"buromobelexperte\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f37f\",\n    \"label\": \"Büromöbel-Experte GmbH & Co. KG.\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"burst\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boom\", \"crash\", \"explosion\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4dc\",\n    \"label\": \"Burst\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M37.6 4.2C28-2.3 15.2-1.1 7 7s-9.4 21-2.8 30.5l112 163.3L16.6 233.2C6.7 236.4 0 245.6 0 256s6.7 19.6 16.6 22.8l103.1 33.4L66.8 412.8c-4.9 9.3-3.2 20.7 4.3 28.1s18.8 9.2 28.1 4.3l100.6-52.9 33.4 103.1c3.2 9.9 12.4 16.6 22.8 16.6s19.6-6.7 22.8-16.6l33.4-103.1 100.6 52.9c9.3 4.9 20.7 3.2 28.1-4.3s9.2-18.8 4.3-28.1L392.3 312.2l103.1-33.4c9.9-3.2 16.6-12.4 16.6-22.8s-6.7-19.6-16.6-22.8L388.9 198.7l25.7-70.4c3.2-8.8 1-18.6-5.6-25.2s-16.4-8.8-25.2-5.6l-70.4 25.7L278.8 16.6C275.6 6.7 266.4 0 256 0s-19.6 6.7-22.8 16.6l-32.3 99.6L37.6 4.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M37.6 4.2C28-2.3 15.2-1.1 7 7s-9.4 21-2.8 30.5l112 163.3L16.6 233.2C6.7 236.4 0 245.6 0 256s6.7 19.6 16.6 22.8l103.1 33.4L66.8 412.8c-4.9 9.3-3.2 20.7 4.3 28.1s18.8 9.2 28.1 4.3l100.6-52.9 33.4 103.1c3.2 9.9 12.4 16.6 22.8 16.6s19.6-6.7 22.8-16.6l33.4-103.1 100.6 52.9c9.3 4.9 20.7 3.2 28.1-4.3s9.2-18.8 4.3-28.1L392.3 312.2l103.1-33.4c9.9-3.2 16.6-12.4 16.6-22.8s-6.7-19.6-16.6-22.8L388.9 198.7l25.7-70.4c3.2-8.8 1-18.6-5.6-25.2s-16.4-8.8-25.2-5.6l-70.4 25.7L278.8 16.6C275.6 6.7 266.4 0 256 0s-19.6 6.7-22.8 16.6l-32.3 99.6L37.6 4.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f68d\"],\n        \"secondary\": [\"10f207\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bus\",\n        \"oncoming\",\n        \"oncoming bus\",\n        \"public transportation\",\n        \"transportation\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f207\",\n    \"label\": \"Bus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 0C422.4 0 512 35.2 512 80V96l0 32c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32l0 160c0 17.7-14.3 32-32 32v32c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32V448H192v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32l0-160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h0V96h0V80C64 35.2 153.6 0 288 0zM128 160v96c0 17.7 14.3 32 32 32H272V128H160c-17.7 0-32 14.3-32 32zM304 288H416c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H304V288zM144 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM384 80c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16s7.2 16 16 16H368c8.8 0 16-7.2 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 0C422.4 0 512 35.2 512 80V96l0 32c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32l0 160c0 17.7-14.3 32-32 32v32c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32V448H192v32c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32l0-160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h0V96h0V80C64 35.2 153.6 0 288 0zM128 160v96c0 17.7 14.3 32 32 32H272V128H160c-17.7 0-32 14.3-32 32zM304 288H416c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H304V288zM144 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM384 80c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16s7.2 16 16 16H368c8.8 0 16-7.2 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"bus-simple\": {\n    \"aliases\": {\n      \"names\": [\"bus-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f55e\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"mta\",\n        \"public transportation\",\n        \"transportation\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f55e\",\n    \"label\": \"Bus Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0C348.8 0 448 35.2 448 80V96 416c0 17.7-14.3 32-32 32v32c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V448H128v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32V96 80C0 35.2 99.2 0 224 0zM64 128V256c0 17.7 14.3 32 32 32H352c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H96c-17.7 0-32 14.3-32 32zM80 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0C348.8 0 448 35.2 448 80V96 416c0 17.7-14.3 32-32 32v32c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V448H128v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32l0-32c-17.7 0-32-14.3-32-32V96 80C0 35.2 99.2 0 224 0zM64 128V256c0 17.7 14.3 32 32 32H352c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H96c-17.7 0-32 14.3-32 32zM80 400a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm288 0a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"business-time\": {\n    \"aliases\": {\n      \"names\": [\"briefcase-clock\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f64a\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alarm\",\n        \"briefcase\",\n        \"business socks\",\n        \"clock\",\n        \"flight of the conchords\",\n        \"reminder\",\n        \"wednesday\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f64a\",\n    \"label\": \"Business Time\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160v96H192 352h8.2c32.3-39.1 81.1-64 135.8-64c5.4 0 10.7 .2 16 .7V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM320 352H224c-17.7 0-32-14.3-32-32V288H0V416c0 35.3 28.7 64 64 64H360.2C335.1 449.6 320 410.5 320 368c0-5.4 .2-10.7 .7-16l-.7 0zm320 16a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM496 288c8.8 0 16 7.2 16 16v48h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H496c-8.8 0-16-7.2-16-16V304c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96H64C28.7 96 0 124.7 0 160v96H192 352h8.2c32.3-39.1 81.1-64 135.8-64c5.4 0 10.7 .2 16 .7V160c0-35.3-28.7-64-64-64H384V56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM320 352H224c-17.7 0-32-14.3-32-32V288H0V416c0 35.3 28.7 64 64 64H360.2C335.1 449.6 320 410.5 320 368c0-5.4 .2-10.7 .7-16l-.7 0zm320 16a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zM496 288c8.8 0 16 7.2 16 16v48h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H496c-8.8 0-16-7.2-16-16V304c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"buy-n-large\": {\n    \"changes\": [\"5.11.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f8a6\",\n    \"label\": \"Buy n Large\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 32C133.27 32 7.79 132.32 7.79 256S133.27 480 288 480s280.21-100.32 280.21-224S442.73 32 288 32zm-85.39 357.19L64.1 390.55l77.25-290.74h133.44c63.15 0 84.93 28.65 78 72.84a60.24 60.24 0 0 1-1.5 6.85 77.39 77.39 0 0 0-17.21-1.93c-42.35 0-76.69 33.88-76.69 75.65 0 37.14 27.14 68 62.93 74.45-18.24 37.16-56.16 60.92-117.71 61.52zM358 207.11h32l-22.16 90.31h-35.41l-11.19-35.63-7.83 35.63h-37.83l26.63-90.31h31.34l15 36.75zm145.86 182.08H306.79L322.63 328a78.8 78.8 0 0 0 11.47.83c42.34 0 76.69-33.87 76.69-75.65 0-32.65-21-60.46-50.38-71.06l21.33-82.35h92.5l-53.05 205.36h103.87zM211.7 269.39H187l-13.8 56.47h24.7c16.14 0 32.11-3.18 37.94-26.65 5.56-22.31-7.99-29.82-24.14-29.82zM233 170h-21.34L200 217.71h21.37c18 0 35.38-14.64 39.21-30.14C265.23 168.71 251.07 170 233 170z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"buysellads\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f20d\",\n    \"label\": \"BuySellAds\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 91.6h90.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"c\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"63\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter C\", \"Latin Small Letter C\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"43\",\n    \"label\": \"C\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M329.1 142.9c-62.5-62.5-155.8-62.5-218.3 0s-62.5 163.8 0 226.3s155.8 62.5 218.3 0c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-87.5 87.5-221.3 87.5-308.8 0s-87.5-229.3 0-316.8s221.3-87.5 308.8 0c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M329.1 142.9c-62.5-62.5-155.8-62.5-218.3 0s-62.5 163.8 0 226.3s155.8 62.5 218.3 0c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3c-87.5 87.5-221.3 87.5-308.8 0s-87.5-229.3 0-316.8s221.3-87.5 308.8 0c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cable-car\": {\n    \"aliases\": {\n      \"names\": [\"tram\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6a1\", \"e0cf\"],\n        \"secondary\": [\"10f7da\"]\n      }\n    },\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"aerial tramway\",\n        \"cable\",\n        \"gondola\",\n        \"lift\",\n        \"mountain\",\n        \"mountain cableway\",\n        \"tram\",\n        \"tramway\",\n        \"trolley\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7da\",\n    \"label\": \"Cable Car\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM160 56a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM32 288c0-35.3 28.7-64 64-64H232V157.5l-203.1 42c-13 2.7-25.7-5.7-28.4-18.6s5.7-25.7 18.6-28.4l232-48 232-48c13-2.7 25.7 5.7 28.4 18.6s-5.7 25.7-18.6 28.4L280 147.5V224H416c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V288zm64 0c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H96zm112 16v64c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM160 56a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM32 288c0-35.3 28.7-64 64-64H232V157.5l-203.1 42c-13 2.7-25.7-5.7-28.4-18.6s5.7-25.7 18.6-28.4l232-48 232-48c13-2.7 25.7 5.7 28.4 18.6s-5.7 25.7-18.6 28.4L280 147.5V224H416c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V288zm64 0c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H96zm112 16v64c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cake-candles\": {\n    \"aliases\": {\n      \"names\": [\"birthday-cake\", \"cake\"],\n      \"unicodes\": {\n        \"composite\": [\"1f382\"],\n        \"secondary\": [\"10f1fd\"]\n      }\n    },\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"anniversary\",\n        \"bakery\",\n        \"birthday\",\n        \"birthday cake\",\n        \"cake\",\n        \"candles\",\n        \"celebration\",\n        \"dessert\",\n        \"frosting\",\n        \"holiday\",\n        \"party\",\n        \"pastry\",\n        \"sweet\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1fd\",\n    \"label\": \"Cake Candles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M86.4 5.5L61.8 47.6C58 54.1 56 61.6 56 69.2V72c0 22.1 17.9 40 40 40s40-17.9 40-40V69.2c0-7.6-2-15-5.8-21.6L105.6 5.5C103.6 2.1 100 0 96 0s-7.6 2.1-9.6 5.5zm128 0L189.8 47.6c-3.8 6.5-5.8 14-5.8 21.6V72c0 22.1 17.9 40 40 40s40-17.9 40-40V69.2c0-7.6-2-15-5.8-21.6L233.6 5.5C231.6 2.1 228 0 224 0s-7.6 2.1-9.6 5.5zM317.8 47.6c-3.8 6.5-5.8 14-5.8 21.6V72c0 22.1 17.9 40 40 40s40-17.9 40-40V69.2c0-7.6-2-15-5.8-21.6L361.6 5.5C359.6 2.1 356 0 352 0s-7.6 2.1-9.6 5.5L317.8 47.6zM128 176c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c-35.3 0-64 28.7-64 64v71c8.3 5.2 18.1 9 28.8 9c13.5 0 27.2-6.1 38.4-13.4c5.4-3.5 9.9-7.1 13-9.7c1.5-1.3 2.7-2.4 3.5-3.1c.4-.4 .7-.6 .8-.8l.1-.1 0 0 0 0s0 0 0 0s0 0 0 0c3.1-3.2 7.4-4.9 11.9-4.8s8.6 2.1 11.6 5.4l0 0 0 0 .1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c3-3.5 7.4-5.4 12-5.4s9 2 12 5.4l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c2.9-3.4 7.1-5.3 11.6-5.4s8.7 1.6 11.9 4.8l0 0 0 0 0 0 .1 .1c.2 .2 .4 .4 .8 .8c.8 .7 1.9 1.8 3.5 3.1c3.1 2.6 7.5 6.2 13 9.7c11.2 7.3 24.9 13.4 38.4 13.4c10.7 0 20.5-3.9 28.8-9V288c0-35.3-28.7-64-64-64V176c0-17.7-14.3-32-32-32s-32 14.3-32 32v48H256V176c0-17.7-14.3-32-32-32s-32 14.3-32 32v48H128V176zM448 394.6c-8.5 3.3-18.2 5.4-28.8 5.4c-22.5 0-42.4-9.9-55.8-18.6c-4.1-2.7-7.8-5.4-10.9-7.8c-2.8 2.4-6.1 5-9.8 7.5C329.8 390 310.6 400 288 400s-41.8-10-54.6-18.9c-3.5-2.4-6.7-4.9-9.4-7.2c-2.7 2.3-5.9 4.7-9.4 7.2C201.8 390 182.6 400 160 400s-41.8-10-54.6-18.9c-3.7-2.6-7-5.2-9.8-7.5c-3.1 2.4-6.8 5.1-10.9 7.8C71.2 390.1 51.3 400 28.8 400c-10.6 0-20.3-2.2-28.8-5.4V480c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32V394.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M86.4 5.5L61.8 47.6C58 54.1 56 61.6 56 69.2V72c0 22.1 17.9 40 40 40s40-17.9 40-40V69.2c0-7.6-2-15-5.8-21.6L105.6 5.5C103.6 2.1 100 0 96 0s-7.6 2.1-9.6 5.5zm128 0L189.8 47.6c-3.8 6.5-5.8 14-5.8 21.6V72c0 22.1 17.9 40 40 40s40-17.9 40-40V69.2c0-7.6-2-15-5.8-21.6L233.6 5.5C231.6 2.1 228 0 224 0s-7.6 2.1-9.6 5.5zM317.8 47.6c-3.8 6.5-5.8 14-5.8 21.6V72c0 22.1 17.9 40 40 40s40-17.9 40-40V69.2c0-7.6-2-15-5.8-21.6L361.6 5.5C359.6 2.1 356 0 352 0s-7.6 2.1-9.6 5.5L317.8 47.6zM128 176c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c-35.3 0-64 28.7-64 64v71c8.3 5.2 18.1 9 28.8 9c13.5 0 27.2-6.1 38.4-13.4c5.4-3.5 9.9-7.1 13-9.7c1.5-1.3 2.7-2.4 3.5-3.1c.4-.4 .7-.6 .8-.8l.1-.1 0 0 0 0s0 0 0 0s0 0 0 0c3.1-3.2 7.4-4.9 11.9-4.8s8.6 2.1 11.6 5.4l0 0 0 0 .1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c3-3.5 7.4-5.4 12-5.4s9 2 12 5.4l.1 .1c.1 .1 .4 .4 .7 .7c.7 .7 1.7 1.7 3.1 3c2.8 2.6 6.8 6.1 11.8 9.5c10.2 7.1 23 13.1 36.3 13.1s26.1-6 36.3-13.1c5-3.5 9-6.9 11.8-9.5c1.4-1.3 2.4-2.3 3.1-3c.3-.3 .6-.6 .7-.7l.1-.1c2.9-3.4 7.1-5.3 11.6-5.4s8.7 1.6 11.9 4.8l0 0 0 0 0 0 .1 .1c.2 .2 .4 .4 .8 .8c.8 .7 1.9 1.8 3.5 3.1c3.1 2.6 7.5 6.2 13 9.7c11.2 7.3 24.9 13.4 38.4 13.4c10.7 0 20.5-3.9 28.8-9V288c0-35.3-28.7-64-64-64V176c0-17.7-14.3-32-32-32s-32 14.3-32 32v48H256V176c0-17.7-14.3-32-32-32s-32 14.3-32 32v48H128V176zM448 394.6c-8.5 3.3-18.2 5.4-28.8 5.4c-22.5 0-42.4-9.9-55.8-18.6c-4.1-2.7-7.8-5.4-10.9-7.8c-2.8 2.4-6.1 5-9.8 7.5C329.8 390 310.6 400 288 400s-41.8-10-54.6-18.9c-3.5-2.4-6.7-4.9-9.4-7.2c-2.7 2.3-5.9 4.7-9.4 7.2C201.8 390 182.6 400 160 400s-41.8-10-54.6-18.9c-3.7-2.6-7-5.2-9.8-7.5c-3.1 2.4-6.8 5.1-10.9 7.8C71.2 390.1 51.3 400 28.8 400c-10.6 0-20.3-2.2-28.8-5.4V480c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32V394.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"calculator\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5a9\"],\n        \"secondary\": [\"10f1ec\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Pocket Calculator\",\n        \"abacus\",\n        \"addition\",\n        \"arithmetic\",\n        \"counting\",\n        \"math\",\n        \"multiplication\",\n        \"subtraction\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1ec\",\n    \"label\": \"Calculator\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM96 64H288c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V96c0-17.7 14.3-32 32-32zm32 160a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM96 352a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM64 416c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32zM192 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm64-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM288 448a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM96 64H288c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V96c0-17.7 14.3-32 32-32zm32 160a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM96 352a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM64 416c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32zM192 256a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm64-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm32 64a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zM288 448a32 32 0 1 1 0-64 32 32 0 1 1 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"calendar\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4c5\", \"1f4c6\"],\n        \"secondary\": [\"10f133\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"calendar\",\n        \"calendar-o\",\n        \"date\",\n        \"day\",\n        \"event\",\n        \"month\",\n        \"schedule\",\n        \"tear-off calendar\",\n        \"time\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f133\",\n    \"label\": \"Calendar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H64C28.7 64 0 92.7 0 128v16 48V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H344V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H152V24zM48 192H400V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H64C28.7 64 0 92.7 0 128v16 48V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H344V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H152V24zM48 192H400V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"calendar-check\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f274\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accept\",\n        \"agree\",\n        \"appointment\",\n        \"confirm\",\n        \"correct\",\n        \"date\",\n        \"day\",\n        \"done\",\n        \"event\",\n        \"month\",\n        \"ok\",\n        \"schedule\",\n        \"select\",\n        \"success\",\n        \"tick\",\n        \"time\",\n        \"todo\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f274\",\n    \"label\": \"Calendar Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zM329 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L329 305z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zM329 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-95 95-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L329 305z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 0c13.3 0 24 10.7 24 24V64H296V24c0-13.3 10.7-24 24-24s24 10.7 24 24V64h40c35.3 0 64 28.7 64 64v16 48V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192 144 128C0 92.7 28.7 64 64 64h40V24c0-13.3 10.7-24 24-24zM400 192H48V448c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V192zM329 297L217 409c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 95-95c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 0c13.3 0 24 10.7 24 24V64H296V24c0-13.3 10.7-24 24-24s24 10.7 24 24V64h40c35.3 0 64 28.7 64 64v16 48V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192 144 128C0 92.7 28.7 64 64 64h40V24c0-13.3 10.7-24 24-24zM400 192H48V448c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V192zM329 297L217 409c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 95-95c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"calendar-day\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f783\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"date\",\n        \"day\",\n        \"detail\",\n        \"event\",\n        \"focus\",\n        \"month\",\n        \"schedule\",\n        \"single day\",\n        \"time\",\n        \"today\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f783\",\n    \"label\": \"Calendar Day\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm80 64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm80 64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"calendar-days\": {\n    \"aliases\": {\n      \"names\": [\"calendar-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f073\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.6.0\",\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"calendar\",\n        \"date\",\n        \"day\",\n        \"event\",\n        \"month\",\n        \"schedule\",\n        \"time\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f073\",\n    \"label\": \"Calendar Days\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm64 80v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zm128 0v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H336zM64 400v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H208zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H336c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm64 80v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zm128 0v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H336zM64 400v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H208zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H336c-8.8 0-16 7.2-16 16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H64C28.7 64 0 92.7 0 128v16 48V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H344V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H152V24zM48 192h80v56H48V192zm0 104h80v64H48V296zm128 0h96v64H176V296zm144 0h80v64H320V296zm80-48H320V192h80v56zm0 160v40c0 8.8-7.2 16-16 16H320V408h80zm-128 0v56H176V408h96zm-144 0v56H64c-8.8 0-16-7.2-16-16V408h80zM272 248H176V192h96v56z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H64C28.7 64 0 92.7 0 128v16 48V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H344V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H152V24zM48 192h80v56H48V192zm0 104h80v64H48V296zm128 0h96v64H176V296zm144 0h80v64H320V296zm80-48H320V192h80v56zm0 160v40c0 8.8-7.2 16-16 16H320V408h80zm-128 0v56H176V408h96zm-144 0v56H64c-8.8 0-16-7.2-16-16V408h80zM272 248H176V192h96v56z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"calendar-minus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f272\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"calendar\",\n        \"date\",\n        \"day\",\n        \"delete\",\n        \"event\",\n        \"month\",\n        \"negative\",\n        \"remove\",\n        \"schedule\",\n        \"time\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f272\",\n    \"label\": \"Calendar Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 0c17.7 0 32 14.3 32 32V64H320V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H32V112c0-26.5 21.5-48 48-48h48V32c0-17.7 14.3-32 32-32zM32 192H480V464c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V192zM344 376c13.3 0 24-10.7 24-24s-10.7-24-24-24H168c-13.3 0-24 10.7-24 24s10.7 24 24 24H344z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 0c17.7 0 32 14.3 32 32V64H320V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H32V112c0-26.5 21.5-48 48-48h48V32c0-17.7 14.3-32 32-32zM32 192H480V464c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V192zM344 376c13.3 0 24-10.7 24-24s-10.7-24-24-24H168c-13.3 0-24 10.7-24 24s10.7 24 24 24H344z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 0c13.3 0 24 10.7 24 24V64H328V24c0-13.3 10.7-24 24-24s24 10.7 24 24V64h40c35.3 0 64 28.7 64 64v16 48V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V192 144 128c0-35.3 28.7-64 64-64h40V24c0-13.3 10.7-24 24-24zM432 192H80V448c0 8.8 7.2 16 16 16H416c8.8 0 16-7.2 16-16V192zM328 352H184c-13.3 0-24-10.7-24-24s10.7-24 24-24H328c13.3 0 24 10.7 24 24s-10.7 24-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 0c13.3 0 24 10.7 24 24V64H328V24c0-13.3 10.7-24 24-24s24 10.7 24 24V64h40c35.3 0 64 28.7 64 64v16 48V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V192 144 128c0-35.3 28.7-64 64-64h40V24c0-13.3 10.7-24 24-24zM432 192H80V448c0 8.8 7.2 16 16 16H416c8.8 0 16-7.2 16-16V192zM328 352H184c-13.3 0-24-10.7-24-24s10.7-24 24-24H328c13.3 0 24 10.7 24 24s-10.7 24-24 24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"calendar-plus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f271\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"add\",\n        \"calendar\",\n        \"create\",\n        \"date\",\n        \"day\",\n        \"event\",\n        \"month\",\n        \"new\",\n        \"positive\",\n        \"schedule\",\n        \"time\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f271\",\n    \"label\": \"Calendar Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 32V64H80c-26.5 0-48 21.5-48 48v48H480V112c0-26.5-21.5-48-48-48H384V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H192V32c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 192H32V464c0 26.5 21.5 48 48 48H432c26.5 0 48-21.5 48-48V192zM256 248c13.3 0 24 10.7 24 24v56h56c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v56c0 13.3-10.7 24-24 24s-24-10.7-24-24V376H176c-13.3 0-24-10.7-24-24s10.7-24 24-24h56V272c0-13.3 10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 32V64H80c-26.5 0-48 21.5-48 48v48H480V112c0-26.5-21.5-48-48-48H384V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H192V32c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 192H32V464c0 26.5 21.5 48 48 48H432c26.5 0 48-21.5 48-48V192zM256 248c13.3 0 24 10.7 24 24v56h56c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v56c0 13.3-10.7 24-24 24s-24-10.7-24-24V376H176c-13.3 0-24-10.7-24-24s10.7-24 24-24h56V272c0-13.3 10.7-24 24-24z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M184 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H96c-35.3 0-64 28.7-64 64v16 48V448c0 35.3 28.7 64 64 64H416c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H376V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H184V24zM80 192H432V448c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V192zm176 40c-13.3 0-24 10.7-24 24v48H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h48v48c0 13.3 10.7 24 24 24s24-10.7 24-24V352h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V256c0-13.3-10.7-24-24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M184 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H96c-35.3 0-64 28.7-64 64v16 48V448c0 35.3 28.7 64 64 64H416c35.3 0 64-28.7 64-64V192 144 128c0-35.3-28.7-64-64-64H376V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H184V24zM80 192H432V448c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V192zm176 40c-13.3 0-24 10.7-24 24v48H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h48v48c0 13.3 10.7 24 24 24s24-10.7 24-24V352h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V256c0-13.3-10.7-24-24-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"calendar-week\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f784\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"date\",\n        \"day\",\n        \"detail\",\n        \"event\",\n        \"focus\",\n        \"month\",\n        \"schedule\",\n        \"single week\",\n        \"time\",\n        \"today\",\n        \"when\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f784\",\n    \"label\": \"Calendar Week\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm80 64c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16H368c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 0c17.7 0 32 14.3 32 32V64H288V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H0V112C0 85.5 21.5 64 48 64H96V32c0-17.7 14.3-32 32-32zM0 192H448V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V192zm80 64c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16H368c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"calendar-xmark\": {\n    \"aliases\": {\n      \"names\": [\"calendar-times\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f273\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"archive\",\n        \"calendar\",\n        \"date\",\n        \"day\",\n        \"delete\",\n        \"event\",\n        \"month\",\n        \"remove\",\n        \"schedule\",\n        \"time\",\n        \"when\",\n        \"x\",\n        \"year\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f273\",\n    \"label\": \"Calendar Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 0c17.7 0 32 14.3 32 32V64H320V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H32V112c0-26.5 21.5-48 48-48h48V32c0-17.7 14.3-32 32-32zM32 192H480V464c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V192zM337 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 0c17.7 0 32 14.3 32 32V64H320V32c0-17.7 14.3-32 32-32s32 14.3 32 32V64h48c26.5 0 48 21.5 48 48v48H32V112c0-26.5 21.5-48 48-48h48V32c0-17.7 14.3-32 32-32zM32 192H480V464c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V192zM337 305c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 0c13.3 0 24 10.7 24 24V64H328V24c0-13.3 10.7-24 24-24s24 10.7 24 24V64h40c35.3 0 64 28.7 64 64v16 48V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V192 144 128c0-35.3 28.7-64 64-64h40V24c0-13.3 10.7-24 24-24zM432 192H80V448c0 8.8 7.2 16 16 16H416c8.8 0 16-7.2 16-16V192zm-95 89l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 0c13.3 0 24 10.7 24 24V64H328V24c0-13.3 10.7-24 24-24s24 10.7 24 24V64h40c35.3 0 64 28.7 64 64v16 48V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V192 144 128c0-35.3 28.7-64 64-64h40V24c0-13.3 10.7-24 24-24zM432 192H80V448c0 8.8 7.2 16 16 16H416c8.8 0 16-7.2 16-16V192zm-95 89l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"camera\": {\n    \"aliases\": {\n      \"names\": [\"camera-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"f332\"],\n        \"primary\": [\"f332\"],\n        \"secondary\": [\"10f030\", \"10f332\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"image\",\n        \"lens\",\n        \"photo\",\n        \"picture\",\n        \"record\",\n        \"shutter\",\n        \"video\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f030\",\n    \"label\": \"Camera\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M149.1 64.8L138.7 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H373.3L362.9 64.8C356.4 45.2 338.1 32 317.4 32H194.6c-20.7 0-39 13.2-45.5 32.8zM256 192a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"camera-retro\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4f7\"],\n        \"secondary\": [\"10f083\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"camera\",\n        \"image\",\n        \"lens\",\n        \"photo\",\n        \"picture\",\n        \"record\",\n        \"shutter\",\n        \"video\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f083\",\n    \"label\": \"Camera Retro\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M220.6 121.2L271.1 96 448 96v96H333.2c-21.9-15.1-48.5-24-77.2-24s-55.2 8.9-77.2 24H64V128H192c9.9 0 19.7-2.3 28.6-6.8zM0 128V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H271.1c-9.9 0-19.7 2.3-28.6 6.8L192 64H160V48c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16l0 16C28.7 64 0 92.7 0 128zM168 304a88 88 0 1 1 176 0 88 88 0 1 1 -176 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M220.6 121.2L271.1 96 448 96v96H333.2c-21.9-15.1-48.5-24-77.2-24s-55.2 8.9-77.2 24H64V128H192c9.9 0 19.7-2.3 28.6-6.8zM0 128V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H271.1c-9.9 0-19.7 2.3-28.6 6.8L192 64H160V48c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16l0 16C28.7 64 0 92.7 0 128zM168 304a88 88 0 1 1 176 0 88 88 0 1 1 -176 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"camera-rotate\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"flip\", \"front-facing\", \"photo\", \"selfie\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0d8\",\n    \"label\": \"Camera Rotate\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M213.1 64.8L202.7 96H128c-35.3 0-64 28.7-64 64V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H437.3L426.9 64.8C420.4 45.2 402.1 32 381.4 32H258.6c-20.7 0-39 13.2-45.5 32.8zM448 256c0 8.8-7.2 16-16 16H355.3c-6.2 0-11.3-5.1-11.3-11.3c0-3 1.2-5.9 3.3-8L371 229c-13.6-13.4-31.9-21-51-21c-19.2 0-37.7 7.6-51.3 21.3L249 249c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l19.7-19.7C257.4 172.7 288 160 320 160c31.8 0 62.4 12.6 85 35l23.7-23.7c2.1-2.1 5-3.3 8-3.3c6.2 0 11.3 5.1 11.3 11.3V256zM192 320c0-8.8 7.2-16 16-16h76.7c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8L269 347c13.6 13.4 31.9 21 51 21c19.2 0 37.7-7.6 51.3-21.3L391 327c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-19.7 19.7C382.6 403.3 352 416 320 416c-31.8 0-62.4-12.6-85-35l-23.7 23.7c-2.1 2.1-5 3.3-8 3.3c-6.2 0-11.3-5.1-11.3-11.3V320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M213.1 64.8L202.7 96H128c-35.3 0-64 28.7-64 64V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H437.3L426.9 64.8C420.4 45.2 402.1 32 381.4 32H258.6c-20.7 0-39 13.2-45.5 32.8zM448 256c0 8.8-7.2 16-16 16H355.3c-6.2 0-11.3-5.1-11.3-11.3c0-3 1.2-5.9 3.3-8L371 229c-13.6-13.4-31.9-21-51-21c-19.2 0-37.7 7.6-51.3 21.3L249 249c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l19.7-19.7C257.4 172.7 288 160 320 160c31.8 0 62.4 12.6 85 35l23.7-23.7c2.1-2.1 5-3.3 8-3.3c6.2 0 11.3 5.1 11.3 11.3V256zM192 320c0-8.8 7.2-16 16-16h76.7c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8L269 347c13.6 13.4 31.9 21 51 21c19.2 0 37.7-7.6 51.3-21.3L391 327c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-19.7 19.7C382.6 403.3 352 416 320 416c-31.8 0-62.4-12.6-85-35l-23.7 23.7c-2.1 2.1-5 3.3-8 3.3c-6.2 0-11.3-5.1-11.3-11.3V320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"campground\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26fa\"],\n        \"secondary\": [\"10f6bb\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"camping\", \"fall\", \"outdoors\", \"teepee\", \"tent\", \"tipi\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6bb\",\n    \"label\": \"Campground\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M377 52c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5L288 60.8 249 12c-11-13.8-31.2-16-45-5s-16 31.2-5 45l48 60L12.3 405.4C4.3 415.4 0 427.7 0 440.4V464c0 26.5 21.5 48 48 48H288 528c26.5 0 48-21.5 48-48V440.4c0-12.7-4.3-25.1-12.3-35L329 112l48-60zM288 448H168.5L288 291.7 407.5 448H288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M377 52c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5L288 60.8 249 12c-11-13.8-31.2-16-45-5s-16 31.2-5 45l48 60L12.3 405.4C4.3 415.4 0 427.7 0 440.4V464c0 26.5 21.5 48 48 48H288 528c26.5 0 48-21.5 48-48V440.4c0-12.7-4.3-25.1-12.3-35L329 112l48-60zM288 448H168.5L288 291.7 407.5 448H288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"canadian-maple-leaf\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"canada\", \"flag\", \"flora\", \"nature\", \"plant\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f785\",\n    \"label\": \"Canadian Maple Leaf\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M383.8 351.7c2.5-2.5 105.2-92.4 105.2-92.4l-17.5-7.5c-10-4.9-7.4-11.5-5-17.4 2.4-7.6 20.1-67.3 20.1-67.3s-47.7 10-57.7 12.5c-7.5 2.4-10-2.5-12.5-7.5s-15-32.4-15-32.4-52.6 59.9-55.1 62.3c-10 7.5-20.1 0-17.6-10 0-10 27.6-129.6 27.6-129.6s-30.1 17.4-40.1 22.4c-7.5 5-12.6 5-17.6-5C293.5 72.3 255.9 0 255.9 0s-37.5 72.3-42.5 79.8c-5 10-10 10-17.6 5-10-5-40.1-22.4-40.1-22.4S183.3 182 183.3 192c2.5 10-7.5 17.5-17.6 10-2.5-2.5-55.1-62.3-55.1-62.3S98.1 167 95.6 172s-5 9.9-12.5 7.5C73 177 25.4 167 25.4 167s17.6 59.7 20.1 67.3c2.4 6 5 12.5-5 17.4L23 259.3s102.6 89.9 105.2 92.4c5.1 5 10 7.5 5.1 22.5-5.1 15-10.1 35.1-10.1 35.1s95.2-20.1 105.3-22.6c8.7-.9 18.3 2.5 18.3 12.5S241 512 241 512h30s-5.8-102.7-5.8-112.8 9.5-13.4 18.4-12.5c10 2.5 105.2 22.6 105.2 22.6s-5-20.1-10-35.1 0-17.5 5-22.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"candy-cane\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f786\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"candy\",\n        \"christmas\",\n        \"holiday\",\n        \"mint\",\n        \"peppermint\",\n        \"striped\",\n        \"xmas\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f786\",\n    \"label\": \"Candy Cane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M348.8 131.5c3.7-2.3 7.9-3.5 12.2-3.5c12.7 0 23 10.3 23 23v5.6c0 9.9-5.1 19.1-13.5 24.3L30.1 393.7C.1 412.5-9 451.9 9.7 481.9s58.2 39.1 88.2 20.4L438.4 289.5c45.8-28.6 73.6-78.8 73.6-132.8V151C512 67.6 444.4 0 361 0c-28.3 0-56 8-80.1 23L254.1 39.7c-30 18.7-39.1 58.2-20.4 88.2s58.2 39.1 88.2 20.4l26.8-16.8zM298.4 49.8c9.2-5.7 19.1-10.1 29.4-13.1L348 97.5c-5.7 1.4-11.2 3.7-16.3 6.8l-12.6 7.9L298.4 49.8zm88.5 52.7l46.2-46.2c8.5 6.5 16.1 14.1 22.6 22.6l-46.2 46.2c-5.1-9.6-13-17.5-22.6-22.6zm28.9 59.3l61.6 20.5c-2.2 10.5-5.8 20.7-10.5 30.2l-62-20.7c6.2-8.8 10.1-19.1 11-30.1zm-86.1 82.5l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zm-107.2 67l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zM119.3 375.7l60.4 37.7-30.2 18.9L89.1 394.6l30.2-18.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M348.8 131.5c3.7-2.3 7.9-3.5 12.2-3.5c12.7 0 23 10.3 23 23v5.6c0 9.9-5.1 19.1-13.5 24.3L30.1 393.7C.1 412.5-9 451.9 9.7 481.9s58.2 39.1 88.2 20.4L438.4 289.5c45.8-28.6 73.6-78.8 73.6-132.8V151C512 67.6 444.4 0 361 0c-28.3 0-56 8-80.1 23L254.1 39.7c-30 18.7-39.1 58.2-20.4 88.2s58.2 39.1 88.2 20.4l26.8-16.8zM298.4 49.8c9.2-5.7 19.1-10.1 29.4-13.1L348 97.5c-5.7 1.4-11.2 3.7-16.3 6.8l-12.6 7.9L298.4 49.8zm88.5 52.7l46.2-46.2c8.5 6.5 16.1 14.1 22.6 22.6l-46.2 46.2c-5.1-9.6-13-17.5-22.6-22.6zm28.9 59.3l61.6 20.5c-2.2 10.5-5.8 20.7-10.5 30.2l-62-20.7c6.2-8.8 10.1-19.1 11-30.1zm-86.1 82.5l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zm-107.2 67l60.4 37.7-30.2 18.9-60.4-37.7 30.2-18.9zM119.3 375.7l60.4 37.7-30.2 18.9L89.1 394.6l30.2-18.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cannabis\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f55f\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bud\",\n        \"chronic\",\n        \"drugs\",\n        \"endica\",\n        \"endo\",\n        \"ganja\",\n        \"marijuana\",\n        \"mary jane\",\n        \"pot\",\n        \"reefer\",\n        \"sativa\",\n        \"spliff\",\n        \"weed\",\n        \"whacky-tabacky\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f55f\",\n    \"label\": \"Cannabis\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c5.3 0 10.3 2.7 13.3 7.1c15.8 23.5 36.7 63.7 49.2 109c7.2 26.4 11.8 55.2 10.4 84c11.5-8.8 23.7-16.7 35.8-23.6c41-23.3 84.4-36.9 112.2-42.5c5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7c-9.1 15.9-19.9 31.7-32.4 46.3c27.8 6.6 52.4 17.3 67.2 25.5c5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1c-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.1c1.5 6.1-.6 12.4-5.5 16.4s-11.6 4.6-17.2 1.9L280 417.2V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V417.2l-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.9s-7-10.3-5.5-16.4l8.3-33.1c-22.2 2.6-45 0-65.2-4.6c-28.9-6.6-54.6-17.6-69.8-26.1c-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14c14.8-8.2 39.4-18.8 67.2-25.5C78.9 296.3 68.1 280.5 59 264.6c-23.4-40.8-37.1-84-42.7-111.7c-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5c12.1 6.9 24.3 14.7 35.8 23.6c-1.4-28.7 3.1-57.6 10.4-84c12.5-45.3 33.4-85.5 49.2-109c3-4.4 8-7.1 13.3-7.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c5.3 0 10.3 2.7 13.3 7.1c15.8 23.5 36.7 63.7 49.2 109c7.2 26.4 11.8 55.2 10.4 84c11.5-8.8 23.7-16.7 35.8-23.6c41-23.3 84.4-36.9 112.2-42.5c5.2-1 10.7 .6 14.4 4.4s5.4 9.2 4.4 14.5c-5.6 27.7-19.3 70.9-42.7 111.7c-9.1 15.9-19.9 31.7-32.4 46.3c27.8 6.6 52.4 17.3 67.2 25.5c5.1 2.8 8.2 8.2 8.2 14s-3.2 11.2-8.2 14c-15.2 8.4-40.9 19.5-69.8 26.1c-20.2 4.6-42.9 7.2-65.2 4.6l8.3 33.1c1.5 6.1-.6 12.4-5.5 16.4s-11.6 4.6-17.2 1.9L280 417.2V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V417.2l-58.5 29.1c-5.6 2.8-12.3 2.1-17.2-1.9s-7-10.3-5.5-16.4l8.3-33.1c-22.2 2.6-45 0-65.2-4.6c-28.9-6.6-54.6-17.6-69.8-26.1c-5.1-2.8-8.2-8.2-8.2-14s3.2-11.2 8.2-14c14.8-8.2 39.4-18.8 67.2-25.5C78.9 296.3 68.1 280.5 59 264.6c-23.4-40.8-37.1-84-42.7-111.7c-1.1-5.2 .6-10.7 4.4-14.5s9.2-5.4 14.4-4.4c27.9 5.5 71.2 19.2 112.2 42.5c12.1 6.9 24.3 14.7 35.8 23.6c-1.4-28.7 3.1-57.6 10.4-84c12.5-45.3 33.4-85.5 49.2-109c3-4.4 8-7.1 13.3-7.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"capsules\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f46b\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drugs\", \"medicine\", \"pills\", \"prescription\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f46b\",\n    \"label\": \"Capsules\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 144c0-26.5 21.5-48 48-48s48 21.5 48 48V256H64V144zM0 144V368c0 61.9 50.1 112 112 112s112-50.1 112-112V189.6c1.8 19.1 8.2 38 19.8 54.8L372.3 431.7c35.5 51.7 105.3 64.3 156 28.1s63-107.5 27.5-159.2L427.3 113.3C391.8 61.5 321.9 49 271.3 85.2c-28 20-44.3 50.8-47.3 83V144c0-61.9-50.1-112-112-112S0 82.1 0 144zm296.6 64.2c-16-23.3-10-55.3 11.9-71c21.2-15.1 50.5-10.3 66 12.2l67 97.6L361.6 303l-65-94.8zM491 407.7c-.8 .6-1.6 1.1-2.4 1.6l4-2.8c-.5 .4-1 .8-1.6 1.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 144c0-26.5 21.5-48 48-48s48 21.5 48 48V256H64V144zM0 144V368c0 61.9 50.1 112 112 112s112-50.1 112-112V189.6c1.8 19.1 8.2 38 19.8 54.8L372.3 431.7c35.5 51.7 105.3 64.3 156 28.1s63-107.5 27.5-159.2L427.3 113.3C391.8 61.5 321.9 49 271.3 85.2c-28 20-44.3 50.8-47.3 83V144c0-61.9-50.1-112-112-112S0 82.1 0 144zm296.6 64.2c-16-23.3-10-55.3 11.9-71c21.2-15.1 50.5-10.3 66 12.2l67 97.6L361.6 303l-65-94.8zM491 407.7c-.8 .6-1.6 1.1-2.4 1.6l4-2.8c-.5 .4-1 .8-1.6 1.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car\": {\n    \"aliases\": {\n      \"names\": [\"automobile\"],\n      \"unicodes\": {\n        \"composite\": [\"1f698\"],\n        \"secondary\": [\"10f1b9\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"auto\",\n        \"automobile\",\n        \"car\",\n        \"oncoming\",\n        \"oncoming automobile\",\n        \"sedan\",\n        \"transportation\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1b9\",\n    \"label\": \"Car\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M135.2 117.4L109.1 192H402.9l-26.1-74.6C372.3 104.6 360.2 96 346.6 96H165.4c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32H346.6c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2V400v48c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V400H96v48c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V400 256c0-26.7 16.4-49.6 39.6-59.2zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M135.2 117.4L109.1 192H402.9l-26.1-74.6C372.3 104.6 360.2 96 346.6 96H165.4c-13.6 0-25.7 8.6-30.2 21.4zM39.6 196.8L74.8 96.3C88.3 57.8 124.6 32 165.4 32H346.6c40.8 0 77.1 25.8 90.6 64.3l35.2 100.5c23.2 9.6 39.6 32.5 39.6 59.2V400v48c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V400H96v48c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V400 256c0-26.7 16.4-49.6 39.6-59.2zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car-battery\": {\n    \"aliases\": {\n      \"names\": [\"battery-car\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5df\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"auto\", \"electric\", \"mechanic\", \"power\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5df\",\n    \"label\": \"Car Battery\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M80 96c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32l96 0c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32h16c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64l16 0zm304 96c0-8.8-7.2-16-16-16s-16 7.2-16 16v32H320c-8.8 0-16 7.2-16 16s7.2 16 16 16h32v32c0 8.8 7.2 16 16 16s16-7.2 16-16V256h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H384V192zM80 240c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H96c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M80 96c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32l96 0c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32h16c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64l16 0zm304 96c0-8.8-7.2-16-16-16s-16 7.2-16 16v32H320c-8.8 0-16 7.2-16 16s7.2 16 16 16h32v32c0 8.8 7.2 16 16 16s16-7.2 16-16V256h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H384V192zM80 240c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16s-7.2-16-16-16H96c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car-burst\": {\n    \"aliases\": {\n      \"names\": [\"car-crash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5e1\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accident\",\n        \"auto\",\n        \"automobile\",\n        \"insurance\",\n        \"sedan\",\n        \"transportation\",\n        \"vehicle\",\n        \"wreck\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5e1\",\n    \"label\": \"Car Burst\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M176 8c-6.6 0-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6l35.3-32.5 9.5-35.4 10.4-38.6c8-29.9 30.5-52.1 57.9-60.9l41-59.2c11.3-16.3 26.4-28.9 43.5-37.2c-.4-.6-.8-1.2-1.3-1.8c-4.1-5.1-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74C188.4 12 182.6 8 176 8zM367.7 161.5l135.6 36.3c6.5 1.8 11.3 7.4 11.8 14.2l4.6 56.5-201.5-54 32.2-46.6c3.8-5.6 10.8-8.1 17.3-6.4zm-69.9-30l-47.9 69.3c-21.6 3-40.3 18.6-46.3 41l-10.4 38.6-16.6 61.8-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9 247.3 66.3-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9L595 388l10.4-38.6c6-22.4-2.5-45.2-19.6-58.7l-6.8-84c-2.7-33.7-26.4-62-59-70.8L384.2 99.7c-32.7-8.8-67.3 4-86.5 31.8zm-17 131a24 24 0 1 1 -12.4 46.4 24 24 0 1 1 12.4-46.4zm217.9 83.2A24 24 0 1 1 545 358.1a24 24 0 1 1 -46.4-12.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M176 8c-6.6 0-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6l35.3-32.5 9.5-35.4 10.4-38.6c8-29.9 30.5-52.1 57.9-60.9l41-59.2c11.3-16.3 26.4-28.9 43.5-37.2c-.4-.6-.8-1.2-1.3-1.8c-4.1-5.1-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74C188.4 12 182.6 8 176 8zM367.7 161.5l135.6 36.3c6.5 1.8 11.3 7.4 11.8 14.2l4.6 56.5-201.5-54 32.2-46.6c3.8-5.6 10.8-8.1 17.3-6.4zm-69.9-30l-47.9 69.3c-21.6 3-40.3 18.6-46.3 41l-10.4 38.6-16.6 61.8-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9 247.3 66.3-8.3 30.9c-4.6 17.1 5.6 34.6 22.6 39.2l15.5 4.1c17.1 4.6 34.6-5.6 39.2-22.6l8.3-30.9L595 388l10.4-38.6c6-22.4-2.5-45.2-19.6-58.7l-6.8-84c-2.7-33.7-26.4-62-59-70.8L384.2 99.7c-32.7-8.8-67.3 4-86.5 31.8zm-17 131a24 24 0 1 1 -12.4 46.4 24 24 0 1 1 12.4-46.4zm217.9 83.2A24 24 0 1 1 545 358.1a24 24 0 1 1 -46.4-12.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car-on\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alarm\", \"car\", \"carjack\", \"warning\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4dd\",\n    \"label\": \"Car On\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M280 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v80c0 13.3 10.7 24 24 24s24-10.7 24-24V24zM185.8 224H326.2c6.8 0 12.8 4.3 15.1 10.6L360.3 288H151.7l19.1-53.4c2.3-6.4 8.3-10.6 15.1-10.6zm-75.3-10.9L82.2 292.4C62.1 300.9 48 320.8 48 344v40 64 32c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V448H384v32c0 17.7 14.3 32 32 32h16c17.7 0 32-14.3 32-32V448 384 344c0-23.2-14.1-43.1-34.2-51.6l-28.3-79.3C390.1 181.3 360 160 326.2 160H185.8c-33.8 0-64 21.3-75.3 53.1zM128 344a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm232 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM39 39c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L73 39c-9.4-9.4-24.6-9.4-33.9 0zm400 0L391 87c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M280 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v80c0 13.3 10.7 24 24 24s24-10.7 24-24V24zM185.8 224H326.2c6.8 0 12.8 4.3 15.1 10.6L360.3 288H151.7l19.1-53.4c2.3-6.4 8.3-10.6 15.1-10.6zm-75.3-10.9L82.2 292.4C62.1 300.9 48 320.8 48 344v40 64 32c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V448H384v32c0 17.7 14.3 32 32 32h16c17.7 0 32-14.3 32-32V448 384 344c0-23.2-14.1-43.1-34.2-51.6l-28.3-79.3C390.1 181.3 360 160 326.2 160H185.8c-33.8 0-64 21.3-75.3 53.1zM128 344a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm232 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM39 39c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L73 39c-9.4-9.4-24.6-9.4-33.9 0zm400 0L391 87c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car-rear\": {\n    \"aliases\": {\n      \"names\": [\"car-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5de\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"auto\",\n        \"automobile\",\n        \"sedan\",\n        \"transportation\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5de\",\n    \"label\": \"Car Rear\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M165.4 96H346.6c13.6 0 25.7 8.6 30.2 21.4L402.9 192H109.1l26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zm-90.6 .3L39.6 196.8C16.4 206.4 0 229.3 0 256v80c0 23.7 12.9 44.4 32 55.4V448c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V400H384v48c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V391.4c19.1-11.1 32-31.7 32-55.4V256c0-26.7-16.4-49.6-39.6-59.2L437.2 96.3C423.7 57.8 387.4 32 346.6 32H165.4c-40.8 0-77.1 25.8-90.6 64.3zM208 272h96c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H208c-8.8 0-16-7.2-16-16V288c0-8.8 7.2-16 16-16zM48 280c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H72c-13.3 0-24-10.7-24-24zm360-24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H408c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M165.4 96H346.6c13.6 0 25.7 8.6 30.2 21.4L402.9 192H109.1l26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zm-90.6 .3L39.6 196.8C16.4 206.4 0 229.3 0 256v80c0 23.7 12.9 44.4 32 55.4V448c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V400H384v48c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V391.4c19.1-11.1 32-31.7 32-55.4V256c0-26.7-16.4-49.6-39.6-59.2L437.2 96.3C423.7 57.8 387.4 32 346.6 32H165.4c-40.8 0-77.1 25.8-90.6 64.3zM208 272h96c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H208c-8.8 0-16-7.2-16-16V288c0-8.8 7.2-16 16-16zM48 280c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H72c-13.3 0-24-10.7-24-24zm360-24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H408c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car-side\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f697\"],\n        \"secondary\": [\"10f5e4\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"auto\",\n        \"automobile\",\n        \"car\",\n        \"sedan\",\n        \"transportation\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5e4\",\n    \"label\": \"Car Side\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M171.3 96H224v96H111.3l30.4-75.9C146.5 104 158.2 96 171.3 96zM272 192V96h81.2c9.7 0 18.9 4.4 25 12l67.2 84H272zm256.2 1L428.2 68c-18.2-22.8-45.8-36-75-36H171.3c-39.3 0-74.6 23.9-89.1 60.3L40.6 196.4C16.8 205.8 0 228.9 0 256V368c0 17.7 14.3 32 32 32H65.3c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80H385.3c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80H608c17.7 0 32-14.3 32-32V320c0-65.2-48.8-119-111.8-127zM434.7 368a48 48 0 1 1 90.5 32 48 48 0 1 1 -90.5-32zM160 336a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M171.3 96H224v96H111.3l30.4-75.9C146.5 104 158.2 96 171.3 96zM272 192V96h81.2c9.7 0 18.9 4.4 25 12l67.2 84H272zm256.2 1L428.2 68c-18.2-22.8-45.8-36-75-36H171.3c-39.3 0-74.6 23.9-89.1 60.3L40.6 196.4C16.8 205.8 0 228.9 0 256V368c0 17.7 14.3 32 32 32H65.3c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80H385.3c7.6 45.4 47.1 80 94.7 80s87.1-34.6 94.7-80H608c17.7 0 32-14.3 32-32V320c0-65.2-48.8-119-111.8-127zM434.7 368a48 48 0 1 1 90.5 32 48 48 0 1 1 -90.5-32zM160 336a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"car-tunnel\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"road\", \"tunnel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4de\",\n    \"label\": \"Car Tunnel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0C114.6 0 0 114.6 0 256V448c0 35.3 28.7 64 64 64h42.8c-6.6-5.9-10.8-14.4-10.8-24V376c0-20.8 11.3-38.9 28.1-48.6l21-64.7c7.5-23.1 29-38.7 53.3-38.7H313.6c24.3 0 45.8 15.6 53.3 38.7l21 64.7c16.8 9.7 28.2 27.8 28.2 48.6V488c0 9.6-4.2 18.1-10.8 24H448c35.3 0 64-28.7 64-64V256C512 114.6 397.4 0 256 0zM362.8 512c-6.6-5.9-10.8-14.4-10.8-24V448H160v40c0 9.6-4.2 18.1-10.8 24H362.8zM190.8 277.5L177 320H335l-13.8-42.5c-1.1-3.3-4.1-5.5-7.6-5.5H198.4c-3.5 0-6.5 2.2-7.6 5.5zM168 408a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm200-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0C114.6 0 0 114.6 0 256V448c0 35.3 28.7 64 64 64h42.8c-6.6-5.9-10.8-14.4-10.8-24V376c0-20.8 11.3-38.9 28.1-48.6l21-64.7c7.5-23.1 29-38.7 53.3-38.7H313.6c24.3 0 45.8 15.6 53.3 38.7l21 64.7c16.8 9.7 28.2 27.8 28.2 48.6V488c0 9.6-4.2 18.1-10.8 24H448c35.3 0 64-28.7 64-64V256C512 114.6 397.4 0 256 0zM362.8 512c-6.6-5.9-10.8-14.4-10.8-24V448H160v40c0 9.6-4.2 18.1-10.8 24H362.8zM190.8 277.5L177 320H335l-13.8-42.5c-1.1-3.3-4.1-5.5-7.6-5.5H198.4c-3.5 0-6.5 2.2-7.6 5.5zM168 408a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm200-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"caravan\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f8ff\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"camper\", \"motor home\", \"rv\", \"trailer\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8ff\",\n    \"label\": \"Caravan\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 112C0 67.8 35.8 32 80 32H416c88.4 0 160 71.6 160 160V352h32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0H288c0 53-43 96-96 96s-96-43-96-96H80c-44.2 0-80-35.8-80-80V112zM320 352H448V256H416c-8.8 0-16-7.2-16-16s7.2-16 16-16h32V160c0-17.7-14.3-32-32-32H352c-17.7 0-32 14.3-32 32V352zM96 128c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H96zm96 336a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 112C0 67.8 35.8 32 80 32H416c88.4 0 160 71.6 160 160V352h32c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32 0H288c0 53-43 96-96 96s-96-43-96-96H80c-44.2 0-80-35.8-80-80V112zM320 352H448V256H416c-8.8 0-16-7.2-16-16s7.2-16 16-16h32V160c0-17.7-14.3-32-32-32H352c-17.7 0-32 14.3-32 32V352zM96 128c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H96zm96 336a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"caret-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0d7\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"dropdown\", \"expand\", \"menu\", \"more\", \"triangle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0d7\",\n    \"label\": \"Caret Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"caret-left\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0d9\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"back\", \"previous\", \"triangle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0d9\",\n    \"label\": \"Caret Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M9.4 278.6c-12.5-12.5-12.5-32.8 0-45.3l128-128c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 256c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"caret-right\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0da\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"forward\", \"next\", \"triangle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0da\",\n    \"label\": \"Caret Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M246.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-128-128c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6l0 256c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"caret-up\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0d8\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"collapse\", \"triangle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0d8\",\n    \"label\": \"Caret Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"carrot\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f955\"],\n        \"secondary\": [\"10f787\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bugs bunny\", \"carrot\", \"food\", \"orange\", \"vegan\", \"vegetable\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f787\",\n    \"label\": \"Carrot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M346.7 6C337.6 17 320 42.3 320 72c0 40 15.3 55.3 40 80s40 40 80 40c29.7 0 55-17.6 66-26.7c4-3.3 6-8.2 6-13.3s-2-10-6-13.2c-11.4-9.1-38.3-26.8-74-26.8c-32 0-40 8-40 8s8-8 8-40c0-35.7-17.7-62.6-26.8-74C370 2 365.1 0 360 0s-10 2-13.3 6zM244.6 136c-40 0-77.1 18.1-101.7 48.2l60.5 60.5c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-55.3-55.3 0 .1L2.2 477.9C-2 487-.1 497.8 7 505s17.9 9 27.1 4.8l134.7-62.4-52.1-52.1c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L199.7 433l100.2-46.4c46.4-21.5 76.2-68 76.2-119.2C376 194.8 317.2 136 244.6 136z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M346.7 6C337.6 17 320 42.3 320 72c0 40 15.3 55.3 40 80s40 40 80 40c29.7 0 55-17.6 66-26.7c4-3.3 6-8.2 6-13.3s-2-10-6-13.2c-11.4-9.1-38.3-26.8-74-26.8c-32 0-40 8-40 8s8-8 8-40c0-35.7-17.7-62.6-26.8-74C370 2 365.1 0 360 0s-10 2-13.3 6zM244.6 136c-40 0-77.1 18.1-101.7 48.2l60.5 60.5c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-55.3-55.3 0 .1L2.2 477.9C-2 487-.1 497.8 7 505s17.9 9 27.1 4.8l134.7-62.4-52.1-52.1c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L199.7 433l100.2-46.4c46.4-21.5 76.2-68 76.2-119.2C376 194.8 317.2 136 244.6 136z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cart-arrow-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f218\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"download\", \"save\", \"shopping\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f218\",\n    \"label\": \"Cart Arrow Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48H69.5c3.8 0 7.1 2.7 7.9 6.5l51.6 271c6.5 34 36.2 58.5 70.7 58.5H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H199.7c-11.5 0-21.4-8.2-23.6-19.5L170.7 288H459.2c32.6 0 61.1-21.8 69.5-53.3l41-152.3C576.6 57 557.4 32 531.1 32H360V134.1l23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23V32H120.1C111 12.8 91.6 0 69.5 0H24zM176 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm336-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48H69.5c3.8 0 7.1 2.7 7.9 6.5l51.6 271c6.5 34 36.2 58.5 70.7 58.5H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H199.7c-11.5 0-21.4-8.2-23.6-19.5L170.7 288H459.2c32.6 0 61.1-21.8 69.5-53.3l41-152.3C576.6 57 557.4 32 531.1 32H360V134.1l23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-64 64c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23V32H120.1C111 12.8 91.6 0 69.5 0H24zM176 512a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm336-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cart-flatbed\": {\n    \"aliases\": {\n      \"names\": [\"dolly-flatbed\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f474\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"inventory\", \"shipping\", \"transport\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f474\",\n    \"label\": \"Cart Flatbed\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64H48c8.8 0 16 7.2 16 16V368c0 44.2 35.8 80 80 80h18.7c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16H450.7c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H144c-8.8 0-16-7.2-16-16V80C128 35.8 92.2 0 48 0H32zM192 80V272c0 26.5 21.5 48 48 48H560c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H464V176c0 5.9-3.2 11.3-8.5 14.1s-11.5 2.5-16.4-.8L400 163.2l-39.1 26.1c-4.9 3.3-11.2 3.6-16.4 .8s-8.5-8.2-8.5-14.1V32H240c-26.5 0-48 21.5-48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64H48c8.8 0 16 7.2 16 16V368c0 44.2 35.8 80 80 80h18.7c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16H450.7c-1.8 5-2.7 10.4-2.7 16c0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1-11-2.7-16H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H144c-8.8 0-16-7.2-16-16V80C128 35.8 92.2 0 48 0H32zM192 80V272c0 26.5 21.5 48 48 48H560c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H464V176c0 5.9-3.2 11.3-8.5 14.1s-11.5 2.5-16.4-.8L400 163.2l-39.1 26.1c-4.9 3.3-11.2 3.6-16.4 .8s-8.5-8.2-8.5-14.1V32H240c-26.5 0-48 21.5-48 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cart-flatbed-suitcase\": {\n    \"aliases\": {\n      \"names\": [\"luggage-cart\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f59d\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"airport\", \"bag\", \"baggage\", \"suitcase\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f59d\",\n    \"label\": \"Cart Flatbed Suitcase\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0H48c44.2 0 80 35.8 80 80V368c0 8.8 7.2 16 16 16H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H541.3c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16H253.3c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16H144c-44.2 0-80-35.8-80-80V80c0-8.8-7.2-16-16-16H32C14.3 64 0 49.7 0 32zM432 96V56c0-4.4-3.6-8-8-8H344c-4.4 0-8 3.6-8 8V96h96zM288 96V56c0-30.9 25.1-56 56-56h80c30.9 0 56 25.1 56 56V96 320H288V96zM512 320V96h16c26.5 0 48 21.5 48 48V272c0 26.5-21.5 48-48 48H512zM240 96h16V320H240c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0H48c44.2 0 80 35.8 80 80V368c0 8.8 7.2 16 16 16H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H541.3c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16H253.3c1.8 5 2.7 10.4 2.7 16c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-5.6 1-11 2.7-16H144c-44.2 0-80-35.8-80-80V80c0-8.8-7.2-16-16-16H32C14.3 64 0 49.7 0 32zM432 96V56c0-4.4-3.6-8-8-8H344c-4.4 0-8 3.6-8 8V96h96zM288 96V56c0-30.9 25.1-56 56-56h80c30.9 0 56 25.1 56 56V96 320H288V96zM512 320V96h16c26.5 0 48 21.5 48 48V272c0 26.5-21.5 48-48 48H512zM240 96h16V320H240c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cart-plus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f217\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"create\", \"new\", \"positive\", \"shopping\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f217\",\n    \"label\": \"Cart Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32h411c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3H170.7l5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H199.7c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5H24C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM252 160c0 11 9 20 20 20h44v44c0 11 9 20 20 20s20-9 20-20V180h44c11 0 20-9 20-20s-9-20-20-20H356V96c0-11-9-20-20-20s-20 9-20 20v44H272c-11 0-20 9-20 20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32h411c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3H170.7l5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H199.7c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5H24C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM252 160c0 11 9 20 20 20h44v44c0 11 9 20 20 20s20-9 20-20V180h44c11 0 20-9 20-20s-9-20-20-20H356V96c0-11-9-20-20-20s-20 9-20 20v44H272c-11 0-20 9-20 20z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cart-shopping\": {\n    \"aliases\": {\n      \"names\": [\"shopping-cart\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6d2\"],\n        \"secondary\": [\"10f07a\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"cart\",\n        \"checkout\",\n        \"grocery\",\n        \"payment\",\n        \"purchase\",\n        \"shopping\",\n        \"shopping cart\",\n        \"trolley\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f07a\",\n    \"label\": \"Cart Shopping\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32h411c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3H170.7l5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H199.7c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5H24C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32h411c26.3 0 45.5 25 38.6 50.4l-41 152.3c-8.5 31.4-37 53.3-69.5 53.3H170.7l5.4 28.5c2.2 11.3 12.1 19.5 23.6 19.5H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H199.7c-34.6 0-64.3-24.6-70.7-58.5L77.4 54.5c-.7-3.8-4-6.5-7.9-6.5H24C10.7 48 0 37.3 0 24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cash-register\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f788\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"cha-ching\",\n        \"change\",\n        \"checkout\",\n        \"commerce\",\n        \"leaerboard\",\n        \"machine\",\n        \"pay\",\n        \"payment\",\n        \"purchase\",\n        \"store\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f788\",\n    \"label\": \"Cash Register\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 0C46.3 0 32 14.3 32 32V96c0 17.7 14.3 32 32 32h80v32H87c-31.6 0-58.5 23.1-63.3 54.4L1.1 364.1C.4 368.8 0 373.6 0 378.4V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V378.4c0-4.8-.4-9.6-1.1-14.4L488.2 214.4C483.5 183.1 456.6 160 425 160H208V128h80c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H64zM96 48H256c8.8 0 16 7.2 16 16s-7.2 16-16 16H96c-8.8 0-16-7.2-16-16s7.2-16 16-16zM64 432c0-8.8 7.2-16 16-16H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm48-168a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm120-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM160 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM328 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM256 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM424 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM352 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 0C46.3 0 32 14.3 32 32V96c0 17.7 14.3 32 32 32h80v32H87c-31.6 0-58.5 23.1-63.3 54.4L1.1 364.1C.4 368.8 0 373.6 0 378.4V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V378.4c0-4.8-.4-9.6-1.1-14.4L488.2 214.4C483.5 183.1 456.6 160 425 160H208V128h80c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H64zM96 48H256c8.8 0 16 7.2 16 16s-7.2 16-16 16H96c-8.8 0-16-7.2-16-16s7.2-16 16-16zM64 432c0-8.8 7.2-16 16-16H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm48-168a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm120-24a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM160 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM328 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM256 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM424 240a24 24 0 1 1 -48 0 24 24 0 1 1 48 0zM352 344a24 24 0 1 1 0-48 24 24 0 1 1 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cat\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f408\"],\n        \"secondary\": [\"10f6be\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cat\",\n        \"feline\",\n        \"halloween\",\n        \"holiday\",\n        \"kitten\",\n        \"kitty\",\n        \"meow\",\n        \"pet\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6be\",\n    \"label\": \"Cat\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M320 192h17.1c22.1 38.3 63.5 64 110.9 64c11 0 21.8-1.4 32-4v4 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V339.2L280 448h56c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-53 0-96-43-96-96V192.5c0-16.1-12-29.8-28-31.8l-7.9-1c-17.5-2.2-30-18.2-27.8-35.7s18.2-30 35.7-27.8l7.9 1c48 6 84.1 46.8 84.1 95.3v85.3c34.4-51.7 93.2-85.8 160-85.8zm160 26.5v0c-10 3.5-20.8 5.5-32 5.5c-28.4 0-54-12.4-71.6-32h0c-3.7-4.1-7-8.5-9.9-13.2C357.3 164 352 146.6 352 128v0V32 12 10.7C352 4.8 356.7 .1 362.6 0h.2c3.3 0 6.4 1.6 8.4 4.2l0 .1L384 21.3l27.2 36.3L416 64h64l4.8-6.4L512 21.3 524.8 4.3l0-.1c2-2.6 5.1-4.2 8.4-4.2h.2C539.3 .1 544 4.8 544 10.7V12 32v96c0 17.3-4.6 33.6-12.6 47.6c-11.3 19.8-29.6 35.2-51.4 42.9zM432 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M320 192h17.1c22.1 38.3 63.5 64 110.9 64c11 0 21.8-1.4 32-4v4 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V339.2L280 448h56c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-53 0-96-43-96-96V192.5c0-16.1-12-29.8-28-31.8l-7.9-1c-17.5-2.2-30-18.2-27.8-35.7s18.2-30 35.7-27.8l7.9 1c48 6 84.1 46.8 84.1 95.3v85.3c34.4-51.7 93.2-85.8 160-85.8zm160 26.5v0c-10 3.5-20.8 5.5-32 5.5c-28.4 0-54-12.4-71.6-32h0c-3.7-4.1-7-8.5-9.9-13.2C357.3 164 352 146.6 352 128v0V32 12 10.7C352 4.8 356.7 .1 362.6 0h.2c3.3 0 6.4 1.6 8.4 4.2l0 .1L384 21.3l27.2 36.3L416 64h64l4.8-6.4L512 21.3 524.8 4.3l0-.1c2-2.6 5.1-4.2 8.4-4.2h.2C539.3 .1 544 4.8 544 10.7V12 32v96c0 17.3-4.6 33.6-12.6 47.6c-11.3 19.8-29.6 35.2-51.4 42.9zM432 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cc-amazon-pay\": {\n    \"changes\": [\"5.0.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f42d\",\n    \"label\": \"Amazon Pay Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-amex\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"5.7.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"amex\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1f3\",\n    \"label\": \"American Express Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M48 480C21.49 480 0 458.5 0 432V80C0 53.49 21.49 32 48 32H528C554.5 32 576 53.49 576 80V82.43H500.5L483.5 130L466.6 82.43H369.4V145.6L341.3 82.43H262.7L181 267.1H246.8V430.9H450.5L482.4 395.8L514.3 430.9H576V432C576 458.5 554.5 480 528 480H48zM482.6 364L440.4 410.3H390.5L458 338.6L390.5 266.1H441.9L483.4 312.8L525.4 266.1H576L508 338.2L576 410.3H524.6L482.6 364zM576 296.9V380.2L536.7 338.3L576 296.9zM307.6 377.1H390.6V410.3H268.6V267.1H390.6V300.2H307.6V322.6H388.5V354.9H307.6V377.2V377.1zM537.3 145.7L500.4 246.3H466L429.2 146V246.3H390.5V103H451.7L483.6 192.3L515.8 103H576V246.3H537.3V145.7zM334.5 217.6H268.6L256.7 246.3H213.7L276.1 103H327.3L390.6 246.3H346.5L334.5 217.6zM301.5 138.5L282 185.4H320.9L301.5 138.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M48 480C21.49 480 0 458.5 0 432V80C0 53.49 21.49 32 48 32H528C554.5 32 576 53.49 576 80V82.43H500.5L483.5 130L466.6 82.43H369.4V145.6L341.3 82.43H262.7L181 267.1H246.8V430.9H450.5L482.4 395.8L514.3 430.9H576V432C576 458.5 554.5 480 528 480H48zM482.6 364L440.4 410.3H390.5L458 338.6L390.5 266.1H441.9L483.4 312.8L525.4 266.1H576L508 338.2L576 410.3H524.6L482.6 364zM576 296.9V380.2L536.7 338.3L576 296.9zM307.6 377.1H390.6V410.3H268.6V267.1H390.6V300.2H307.6V322.6H388.5V354.9H307.6V377.2V377.1zM537.3 145.7L500.4 246.3H466L429.2 146V246.3H390.5V103H451.7L483.6 192.3L515.8 103H576V246.3H537.3V145.7zM334.5 217.6H268.6L256.7 246.3H213.7L276.1 103H327.3L390.6 246.3H346.5L334.5 217.6zM301.5 138.5L282 185.4H320.9L301.5 138.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-apple-pay\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f416\",\n    \"label\": \"Apple Pay Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-diners-club\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f24c\",\n    \"label\": \"Diner's Club Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-discover\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1f2\",\n    \"label\": \"Discover Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M520.4 196.1c0-7.9-5.5-12.1-15.6-12.1h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-44.1 138.9c22.6 0 52.9-4.1 52.9 24.4 0 12.6-6.6 20.7-18.7 23.2l25.8 34.4h-19.6l-22.2-32.8h-2.2v32.8h-16zm-55.9.1h45.3v14H444v18.2h28.3V217H444v22.2h29.3V253H428zm-68.7 0l21.9 55.2 22.2-55.2h17.5l-35.5 84.2h-8.6l-35-84.2zm-55.9-3c24.7 0 44.6 20 44.6 44.6 0 24.7-20 44.6-44.6 44.6-24.7 0-44.6-20-44.6-44.6 0-24.7 20-44.6 44.6-44.6zm-49.3 6.1v19c-20.1-20.1-46.8-4.7-46.8 19 0 25 27.5 38.5 46.8 19.2v19c-29.7 14.3-63.3-5.7-63.3-38.2 0-31.2 33.1-53 63.3-38zm-97.2 66.3c11.4 0 22.4-15.3-3.3-24.4-15-5.5-20.2-11.4-20.2-22.7 0-23.2 30.6-31.4 49.7-14.3l-8.4 10.8c-10.4-11.6-24.9-6.2-24.9 2.5 0 4.4 2.7 6.9 12.3 10.3 18.2 6.6 23.6 12.5 23.6 25.6 0 29.5-38.8 37.4-56.6 11.3l10.3-9.9c3.7 7.1 9.9 10.8 17.5 10.8zM55.4 253H32v-82h23.4c26.1 0 44.1 17 44.1 41.1 0 18.5-13.2 40.9-44.1 40.9zm67.5 0h-16v-82h16zM544 433c0 8.2-6.8 15-15 15H128c189.6-35.6 382.7-139.2 416-160zM74.1 191.6c-5.2-4.9-11.6-6.6-21.9-6.6H48v54.2h4.2c10.3 0 17-2 21.9-6.4 5.7-5.2 8.9-12.8 8.9-20.7s-3.2-15.5-8.9-20.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-jcb\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f24b\",\n    \"label\": \"JCB Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-mastercard\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1f1\",\n    \"label\": \"MasterCard Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.6-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-paypal\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1f4\",\n    \"label\": \"Paypal Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-stripe\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1f5\",\n    \"label\": \"Stripe Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M492.4 220.8c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7zM375 223.4c-8.2 0-13.3 2.9-17 7l.2 52.8c3.5 3.7 8.5 6.7 16.8 6.7 13.1 0 21.9-14.3 21.9-33.4 0-18.6-9-33.2-21.9-33.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM122.2 281.1c0 25.6-20.3 40.1-49.9 40.3-12.2 0-25.6-2.4-38.8-8.1v-33.9c12 6.4 27.1 11.3 38.9 11.3 7.9 0 13.6-2.1 13.6-8.7 0-17-54-10.6-54-49.9 0-25.2 19.2-40.2 48-40.2 11.8 0 23.5 1.8 35.3 6.5v33.4c-10.8-5.8-24.5-9.1-35.3-9.1-7.5 0-12.1 2.2-12.1 7.7 0 16 54.3 8.4 54.3 50.7zm68.8-56.6h-27V275c0 20.9 22.5 14.4 27 12.6v28.9c-4.7 2.6-13.3 4.7-24.9 4.7-21.1 0-36.9-15.5-36.9-36.5l.2-113.9 34.7-7.4v30.8H191zm74 2.4c-4.5-1.5-18.7-3.6-27.1 7.4v84.4h-35.5V194.2h30.7l2.2 10.5c8.3-15.3 24.9-12.2 29.6-10.5h.1zm44.1 91.8h-35.7V194.2h35.7zm0-142.9l-35.7 7.6v-28.9l35.7-7.6zm74.1 145.5c-12.4 0-20-5.3-25.1-9l-.1 40.2-35.5 7.5V194.2h31.3l1.8 8.8c4.9-4.5 13.9-11.1 27.8-11.1 24.9 0 48.4 22.5 48.4 63.8 0 45.1-23.2 65.5-48.6 65.6zm160.4-51.5h-69.5c1.6 16.6 13.8 21.5 27.6 21.5 14.1 0 25.2-3 34.9-7.9V312c-9.7 5.3-22.4 9.2-39.4 9.2-34.6 0-58.8-21.7-58.8-64.5 0-36.2 20.5-64.9 54.3-64.9 33.7 0 51.3 28.7 51.3 65.1 0 3.5-.3 10.9-.4 12.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cc-visa\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1f0\",\n    \"label\": \"Visa Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014483,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cedi-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Cedi Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0df\",\n    \"label\": \"Cedi Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V66.7C101.2 81.9 32 160.9 32 256s69.2 174.1 160 189.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V445.3c30.9-5.2 59.2-17.7 83.2-35.8c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-13.2 9.9-28.3 17.3-44.8 21.6V132c16.4 4.2 31.6 11.6 44.8 21.6c14.1 10.6 34.2 7.8 44.8-6.4s7.8-34.2-6.4-44.8c-24-18-52.4-30.6-83.2-35.8V32zM192 132V380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V66.7C101.2 81.9 32 160.9 32 256s69.2 174.1 160 189.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V445.3c30.9-5.2 59.2-17.7 83.2-35.8c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-13.2 9.9-28.3 17.3-44.8 21.6V132c16.4 4.2 31.6 11.6 44.8 21.6c14.1 10.6 34.2 7.8 44.8-6.4s7.8-34.2-6.4-44.8c-24-18-52.4-30.6-83.2-35.8V32zM192 132V380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cent-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Cent Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e3f5\",\n    \"label\": \"Cent Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M224 0c17.7 0 32 14.3 32 32V66.7c30.9 5.2 59.2 17.7 83.2 35.8c14.1 10.6 17 30.7 6.4 44.8s-30.7 17-44.8 6.4C279.4 137.5 252.9 128 224 128c-70.7 0-128 57.3-128 128s57.3 128 128 128c28.9 0 55.4-9.5 76.8-25.6c14.1-10.6 34.2-7.8 44.8 6.4s7.8 34.2-6.4 44.8c-24 18-52.4 30.6-83.2 35.8V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C101.2 430.1 32 351.1 32 256s69.2-174.1 160-189.3V32c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M224 0c17.7 0 32 14.3 32 32V66.7c30.9 5.2 59.2 17.7 83.2 35.8c14.1 10.6 17 30.7 6.4 44.8s-30.7 17-44.8 6.4C279.4 137.5 252.9 128 224 128c-70.7 0-128 57.3-128 128s57.3 128 128 128c28.9 0 55.4-9.5 76.8-25.6c14.1-10.6 34.2-7.8 44.8 6.4s7.8 34.2-6.4 44.8c-24 18-52.4 30.6-83.2 35.8V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C101.2 430.1 32 351.1 32 256s69.2-174.1 160-189.3V32c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"centercode\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f380\",\n    \"label\": \"Centercode\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"centos\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linux\", \"operating system\", \"os\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f789\",\n    \"label\": \"Centos\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M289.6 97.5l31.6 31.7-76.3 76.5V97.5zm-162.4 31.7l76.3 76.5V97.5h-44.7zm41.5-41.6h44.7v127.9l10.8 10.8 10.8-10.8V87.6h44.7L224.2 32zm26.2 168.1l-10.8-10.8H55.5v-44.8L0 255.7l55.5 55.6v-44.8h128.6l10.8-10.8zm79.3-20.7h107.9v-44.8l-31.6-31.7zm173.3 20.7L392 200.1v44.8H264.3l-10.8 10.8 10.8 10.8H392v44.8l55.5-55.6zM65.4 176.2l32.5-31.7 90.3 90.5h15.3v-15.3l-90.3-90.5 31.6-31.7H65.4zm316.7-78.7h-78.5l31.6 31.7-90.3 90.5V235h15.3l90.3-90.5 31.6 31.7zM203.5 413.9V305.8l-76.3 76.5 31.6 31.7h44.7zM65.4 235h108.8l-76.3-76.5-32.5 31.7zm316.7 100.2l-31.6 31.7-90.3-90.5h-15.3v15.3l90.3 90.5-31.6 31.7h78.5zm0-58.8H274.2l76.3 76.5 31.6-31.7zm-60.9 105.8l-76.3-76.5v108.1h44.7zM97.9 352.9l76.3-76.5H65.4v44.8zm181.8 70.9H235V295.9l-10.8-10.8-10.8 10.8v127.9h-44.7l55.5 55.6zm-166.5-41.6l90.3-90.5v-15.3h-15.3l-90.3 90.5-32.5-31.7v78.7h79.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"certificate\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0a3\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"badge\", \"star\", \"verified\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0a3\",\n    \"label\": \"Certificate\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M211 7.3C205 1 196-1.4 187.6 .8s-14.9 8.9-17.1 17.3L154.7 80.6l-62-17.5c-8.4-2.4-17.4 0-23.5 6.1s-8.5 15.1-6.1 23.5l17.5 62L18.1 170.6c-8.4 2.1-15 8.7-17.3 17.1S1 205 7.3 211l46.2 45L7.3 301C1 307-1.4 316 .8 324.4s8.9 14.9 17.3 17.1l62.5 15.8-17.5 62c-2.4 8.4 0 17.4 6.1 23.5s15.1 8.5 23.5 6.1l62-17.5 15.8 62.5c2.1 8.4 8.7 15 17.1 17.3s17.3-.2 23.4-6.4l45-46.2 45 46.2c6.1 6.2 15 8.7 23.4 6.4s14.9-8.9 17.1-17.3l15.8-62.5 62 17.5c8.4 2.4 17.4 0 23.5-6.1s8.5-15.1 6.1-23.5l-17.5-62 62.5-15.8c8.4-2.1 15-8.7 17.3-17.1s-.2-17.3-6.4-23.4l-46.2-45 46.2-45c6.2-6.1 8.7-15 6.4-23.4s-8.9-14.9-17.3-17.1l-62.5-15.8 17.5-62c2.4-8.4 0-17.4-6.1-23.5s-15.1-8.5-23.5-6.1l-62 17.5L341.4 18.1c-2.1-8.4-8.7-15-17.1-17.3S307 1 301 7.3L256 53.5 211 7.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M211 7.3C205 1 196-1.4 187.6 .8s-14.9 8.9-17.1 17.3L154.7 80.6l-62-17.5c-8.4-2.4-17.4 0-23.5 6.1s-8.5 15.1-6.1 23.5l17.5 62L18.1 170.6c-8.4 2.1-15 8.7-17.3 17.1S1 205 7.3 211l46.2 45L7.3 301C1 307-1.4 316 .8 324.4s8.9 14.9 17.3 17.1l62.5 15.8-17.5 62c-2.4 8.4 0 17.4 6.1 23.5s15.1 8.5 23.5 6.1l62-17.5 15.8 62.5c2.1 8.4 8.7 15 17.1 17.3s17.3-.2 23.4-6.4l45-46.2 45 46.2c6.1 6.2 15 8.7 23.4 6.4s14.9-8.9 17.1-17.3l15.8-62.5 62 17.5c8.4 2.4 17.4 0 23.5-6.1s8.5-15.1 6.1-23.5l-17.5-62 62.5-15.8c8.4-2.1 15-8.7 17.3-17.1s-.2-17.3-6.4-23.4l-46.2-45 46.2-45c6.2-6.1 8.7-15 6.4-23.4s-8.9-14.9-17.3-17.1l-62.5-15.8 17.5-62c2.4-8.4 0-17.4-6.1-23.5s-15.1-8.5-23.5-6.1l-62 17.5L341.4 18.1c-2.1-8.4-8.7-15-17.1-17.3S307 1 301 7.3L256 53.5 211 7.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chair\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1fa91\"],\n        \"secondary\": [\"10f6c0\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chair\", \"furniture\", \"seat\", \"sit\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6c0\",\n    \"label\": \"Chair\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M248 48V256h48V58.7c23.9 13.8 40 39.7 40 69.3V256h48V128C384 57.3 326.7 0 256 0H192C121.3 0 64 57.3 64 128V256h48V128c0-29.6 16.1-55.5 40-69.3V256h48V48h48zM48 288c-12.1 0-23.2 6.8-28.6 17.7l-16 32c-5 9.9-4.4 21.7 1.4 31.1S20.9 384 32 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32V384H352v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384c11.1 0 21.4-5.7 27.2-15.2s6.4-21.2 1.4-31.1l-16-32C423.2 294.8 412.1 288 400 288H48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M248 48V256h48V58.7c23.9 13.8 40 39.7 40 69.3V256h48V128C384 57.3 326.7 0 256 0H192C121.3 0 64 57.3 64 128V256h48V128c0-29.6 16.1-55.5 40-69.3V256h48V48h48zM48 288c-12.1 0-23.2 6.8-28.6 17.7l-16 32c-5 9.9-4.4 21.7 1.4 31.1S20.9 384 32 384l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32V384H352v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384c11.1 0 21.4-5.7 27.2-15.2s6.4-21.2 1.4-31.1l-16-32C423.2 294.8 412.1 288 400 288H48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chalkboard\": {\n    \"aliases\": {\n      \"names\": [\"blackboard\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f51b\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"blackboard\",\n        \"learning\",\n        \"school\",\n        \"teaching\",\n        \"whiteboard\",\n        \"writing\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f51b\",\n    \"label\": \"Chalkboard\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 32C60.7 32 32 60.7 32 96V384H96V96l384 0V384h64V96c0-35.3-28.7-64-64-64H96zM224 384v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H416V384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 32C60.7 32 32 60.7 32 96V384H96V96l384 0V384h64V96c0-35.3-28.7-64-64-64H96zM224 384v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H416V384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chalkboard-user\": {\n    \"aliases\": {\n      \"names\": [\"chalkboard-teacher\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f51c\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"blackboard\",\n        \"instructor\",\n        \"learning\",\n        \"professor\",\n        \"school\",\n        \"whiteboard\",\n        \"writing\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f51c\",\n    \"label\": \"Chalkboard User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M160 64c0-35.3 28.7-64 64-64H576c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H336.8c-11.8-25.5-29.9-47.5-52.4-64H384V320c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32v32h64V64L224 64v49.1C205.2 102.2 183.3 96 160 96V64zm0 64a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM133.3 352h53.3C260.3 352 320 411.7 320 485.3c0 14.7-11.9 26.7-26.7 26.7H26.7C11.9 512 0 500.1 0 485.3C0 411.7 59.7 352 133.3 352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M160 64c0-35.3 28.7-64 64-64H576c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H336.8c-11.8-25.5-29.9-47.5-52.4-64H384V320c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32v32h64V64L224 64v49.1C205.2 102.2 183.3 96 160 96V64zm0 64a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM133.3 352h53.3C260.3 352 320 411.7 320 485.3c0 14.7-11.9 26.7-26.7 26.7H26.7C11.9 512 0 500.1 0 485.3C0 411.7 59.7 352 133.3 352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"champagne-glasses\": {\n    \"aliases\": {\n      \"names\": [\"glass-cheers\"],\n      \"unicodes\": {\n        \"composite\": [\"1f942\"],\n        \"secondary\": [\"10f79f\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"bar\",\n        \"beverage\",\n        \"celebrate\",\n        \"celebration\",\n        \"champagne\",\n        \"clink\",\n        \"clinking glasses\",\n        \"drink\",\n        \"glass\",\n        \"holiday\",\n        \"new year's eve\",\n        \"party\",\n        \"toast\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f79f\",\n    \"label\": \"Champagne Glasses\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M155.6 17.3C163 3 179.9-3.6 195 1.9L320 47.5l125-45.6c15.1-5.5 32 1.1 39.4 15.4l78.8 152.9c28.8 55.8 10.3 122.3-38.5 156.6L556.1 413l41-15c16.6-6 35 2.5 41 19.1s-2.5 35-19.1 41l-71.1 25.9L476.8 510c-16.6 6.1-35-2.5-41-19.1s2.5-35 19.1-41l41-15-31.3-86.2c-59.4 5.2-116.2-34-130-95.2L320 188.8l-14.6 64.7c-13.8 61.3-70.6 100.4-130 95.2l-31.3 86.2 41 15c16.6 6 25.2 24.4 19.1 41s-24.4 25.2-41 19.1L92.2 484.1 21.1 458.2c-16.6-6.1-25.2-24.4-19.1-41s24.4-25.2 41-19.1l41 15 31.3-86.2C66.5 292.5 48.1 226 76.9 170.2L155.6 17.3zm44 54.4l-27.2 52.8L261.6 157l13.1-57.9L199.6 71.7zm240.9 0L365.4 99.1 378.5 157l89.2-32.5L440.5 71.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M155.6 17.3C163 3 179.9-3.6 195 1.9L320 47.5l125-45.6c15.1-5.5 32 1.1 39.4 15.4l78.8 152.9c28.8 55.8 10.3 122.3-38.5 156.6L556.1 413l41-15c16.6-6 35 2.5 41 19.1s-2.5 35-19.1 41l-71.1 25.9L476.8 510c-16.6 6.1-35-2.5-41-19.1s2.5-35 19.1-41l41-15-31.3-86.2c-59.4 5.2-116.2-34-130-95.2L320 188.8l-14.6 64.7c-13.8 61.3-70.6 100.4-130 95.2l-31.3 86.2 41 15c16.6 6 25.2 24.4 19.1 41s-24.4 25.2-41 19.1L92.2 484.1 21.1 458.2c-16.6-6.1-25.2-24.4-19.1-41s24.4-25.2 41-19.1l41 15 31.3-86.2C66.5 292.5 48.1 226 76.9 170.2L155.6 17.3zm44 54.4l-27.2 52.8L261.6 157l13.1-57.9L199.6 71.7zm240.9 0L365.4 99.1 378.5 157l89.2-32.5L440.5 71.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"charging-station\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5e7\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"electric\", \"ev\", \"tesla\", \"vehicle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5e7\",\n    \"label\": \"Charging Station\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C60.7 0 32 28.7 32 64V448c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32s-14.3-32-32-32V304h16c22.1 0 40 17.9 40 40v32c0 39.8 32.2 72 72 72s72-32.2 72-72V252.3c32.5-10.2 56-40.5 56-76.3V144c0-8.8-7.2-16-16-16H544V80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H480V80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H432c-8.8 0-16 7.2-16 16v32c0 35.8 23.5 66.1 56 76.3V376c0 13.3-10.7 24-24 24s-24-10.7-24-24V344c0-48.6-39.4-88-88-88H320V64c0-35.3-28.7-64-64-64H96zM216.9 82.7c6 4 8.5 11.5 6.3 18.3l-25 74.9H256c6.7 0 12.7 4.2 15 10.4s.5 13.3-4.6 17.7l-112 96c-5.5 4.7-13.4 5.1-19.3 1.1s-8.5-11.5-6.3-18.3l25-74.9H96c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7l112-96c5.5-4.7 13.4-5.1 19.3-1.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C60.7 0 32 28.7 32 64V448c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32s-14.3-32-32-32V304h16c22.1 0 40 17.9 40 40v32c0 39.8 32.2 72 72 72s72-32.2 72-72V252.3c32.5-10.2 56-40.5 56-76.3V144c0-8.8-7.2-16-16-16H544V80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H480V80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H432c-8.8 0-16 7.2-16 16v32c0 35.8 23.5 66.1 56 76.3V376c0 13.3-10.7 24-24 24s-24-10.7-24-24V344c0-48.6-39.4-88-88-88H320V64c0-35.3-28.7-64-64-64H96zM216.9 82.7c6 4 8.5 11.5 6.3 18.3l-25 74.9H256c6.7 0 12.7 4.2 15 10.4s.5 13.3-4.6 17.7l-112 96c-5.5 4.7-13.4 5.1-19.3 1.1s-8.5-11.5-6.3-18.3l25-74.9H96c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7l112-96c5.5-4.7 13.4-5.1 19.3-1.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chart-area\": {\n    \"aliases\": {\n      \"names\": [\"area-chart\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1fe\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"analytics\", \"area\", \"chart\", \"graph\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1fe\",\n    \"label\": \"Chart Area\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm96 288H448c17.7 0 32-14.3 32-32V251.8c0-7.6-2.7-15-7.7-20.8l-65.8-76.8c-12.1-14.2-33.7-15-46.9-1.8l-21 21c-10 10-26.4 9.2-35.4-1.6l-39.2-47c-12.6-15.1-35.7-15.4-48.7-.6L135.9 215c-5.1 5.8-7.9 13.3-7.9 21.1v84c0 17.7 14.3 32 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm96 288H448c17.7 0 32-14.3 32-32V251.8c0-7.6-2.7-15-7.7-20.8l-65.8-76.8c-12.1-14.2-33.7-15-46.9-1.8l-21 21c-10 10-26.4 9.2-35.4-1.6l-39.2-47c-12.6-15.1-35.7-15.4-48.7-.6L135.9 215c-5.1 5.8-7.9 13.3-7.9 21.1v84c0 17.7 14.3 32 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chart-bar\": {\n    \"aliases\": {\n      \"names\": [\"bar-chart\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f080\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"analytics\", \"bar\", \"chart\", \"graph\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f080\",\n    \"label\": \"Chart Bar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M24 32c13.3 0 24 10.7 24 24V408c0 13.3 10.7 24 24 24H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H72c-39.8 0-72-32.2-72-72V56C0 42.7 10.7 32 24 32zM128 136c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24zm24 72H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 96H424c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M24 32c13.3 0 24 10.7 24 24V408c0 13.3 10.7 24 24 24H488c13.3 0 24 10.7 24 24s-10.7 24-24 24H72c-39.8 0-72-32.2-72-72V56C0 42.7 10.7 32 24 32zM128 136c0-13.3 10.7-24 24-24l208 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-208 0c-13.3 0-24-10.7-24-24zm24 72H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 96H424c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chart-column\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bar\", \"bar chart\", \"chart\", \"graph\", \"track\", \"trend\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0e3\",\n    \"label\": \"Chart Column\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zM160 224c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm128-64V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32zm64 32c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32zM480 96V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V96c0-17.7 14.3-32 32-32s32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zM160 224c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm128-64V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32zm64 32c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32zM480 96V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V96c0-17.7 14.3-32 32-32s32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chart-gantt\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chart\", \"graph\", \"track\", \"trend\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e0e4\",\n    \"label\": \"Chart Gantt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32zm96 64H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm160 96h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32c17.7 0 32 14.3 32 32V400c0 8.8 7.2 16 16 16H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H80c-44.2 0-80-35.8-80-80V64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l96 0c17.7 0 32 14.3 32 32s-14.3 32-32 32H160c-17.7 0-32-14.3-32-32zm96 64H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm160 96h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chart-line\": {\n    \"aliases\": {\n      \"names\": [\"line-chart\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f201\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"activity\",\n        \"analytics\",\n        \"chart\",\n        \"dashboard\",\n        \"gain\",\n        \"graph\",\n        \"increase\",\n        \"line\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f201\",\n    \"label\": \"Chart Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V400c0 44.2 35.8 80 80 80H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H80c-8.8 0-16-7.2-16-16V64zm406.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L320 210.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L240 221.3l57.4 57.4c12.5 12.5 32.8 12.5 45.3 0l128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chart-pie\": {\n    \"aliases\": {\n      \"names\": [\"pie-chart\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f200\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"analytics\", \"chart\", \"diagram\", \"graph\", \"pie\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f200\",\n    \"label\": \"Chart Pie\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M304 240V16.6c0-9 7-16.6 16-16.6C443.7 0 544 100.3 544 224c0 9-7.6 16-16.6 16H304zM32 272C32 150.7 122.1 50.3 239 34.3c9.2-1.3 17 6.1 17 15.4V288L412.5 444.5c6.7 6.7 6.2 17.7-1.5 23.1C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zm526.4 16c9.3 0 16.6 7.8 15.4 17c-7.7 55.9-34.6 105.6-73.9 142.3c-6 5.6-15.4 5.2-21.2-.7L320 288H558.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M304 240V16.6c0-9 7-16.6 16-16.6C443.7 0 544 100.3 544 224c0 9-7.6 16-16.6 16H304zM32 272C32 150.7 122.1 50.3 239 34.3c9.2-1.3 17 6.1 17 15.4V288L412.5 444.5c6.7 6.7 6.2 17.7-1.5 23.1C371.8 495.6 323.8 512 272 512C139.5 512 32 404.6 32 272zm526.4 16c9.3 0 16.6 7.8 15.4 17c-7.7 55.9-34.6 105.6-73.9 142.3c-6 5.6-15.4 5.2-21.2-.7L320 288H558.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chart-simple\": {\n    \"changes\": [\"6.0.0-beta3\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"analytics\", \"bar\", \"chart\", \"column\", \"graph\", \"row\", \"trend\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e473\",\n    \"label\": \"Chart Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M160 80c0-26.5 21.5-48 48-48h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V80zM0 272c0-26.5 21.5-48 48-48H80c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272zM368 96h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H368c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M160 80c0-26.5 21.5-48 48-48h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V80zM0 272c0-26.5 21.5-48 48-48H80c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272zM368 96h32c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48H368c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"check\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2713\", \"2714\"],\n        \"secondary\": [\"10f00c\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Check Mark\",\n        \"accept\",\n        \"agree\",\n        \"check\",\n        \"check mark\",\n        \"checkmark\",\n        \"confirm\",\n        \"correct\",\n        \"done\",\n        \"mark\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"ok\",\n        \"select\",\n        \"success\",\n        \"tick\",\n        \"todo\",\n        \"yes\",\n        \"✓\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f00c\",\n    \"label\": \"Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"check-double\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f560\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.8.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accept\",\n        \"agree\",\n        \"checkmark\",\n        \"confirm\",\n        \"correct\",\n        \"done\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"ok\",\n        \"select\",\n        \"success\",\n        \"tick\",\n        \"todo\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f560\",\n    \"label\": \"Check Double\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M342.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 178.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l160-160zm96 128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 54.6 297.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l256-256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M342.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 178.7l-57.4-57.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l160-160zm96 128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 402.7 54.6 297.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l256-256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"check-to-slot\": {\n    \"aliases\": {\n      \"names\": [\"vote-yea\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f772\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accept\",\n        \"cast\",\n        \"election\",\n        \"politics\",\n        \"positive\",\n        \"voting\",\n        \"yes\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f772\",\n    \"label\": \"Check To Slot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 80c0-26.5 21.5-48 48-48H432c26.5 0 48 21.5 48 48V384H96V80zm313 47c-9.4-9.4-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L409 161c9.4-9.4 9.4-24.6 0-33.9zM0 336c0-26.5 21.5-48 48-48H64V416H512V288h16c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V336z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 80c0-26.5 21.5-48 48-48H432c26.5 0 48 21.5 48 48V384H96V80zm313 47c-9.4-9.4-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L409 161c9.4-9.4 9.4-24.6 0-33.9zM0 336c0-26.5 21.5-48 48-48H64V416H512V288h16c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V336z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cheese\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7ef\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cheddar\",\n        \"curd\",\n        \"gouda\",\n        \"melt\",\n        \"parmesan\",\n        \"sandwich\",\n        \"swiss\",\n        \"wedge\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ef\",\n    \"label\": \"Cheese\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 240.2V256H0c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7C418.8 32 512 125.2 512 240.2zm0 47.8V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V288H512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 240.2V256H0c0-20 10-38.7 26.6-49.8L274.9 40.7c8.6-5.7 18.6-8.7 28.9-8.7C418.8 32 512 125.2 512 240.2zm0 47.8V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V288H512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chess\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f439\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"board\",\n        \"castle\",\n        \"checkmate\",\n        \"game\",\n        \"king\",\n        \"rook\",\n        \"strategy\",\n        \"tournament\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f439\",\n    \"label\": \"Chess\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M144 16c0-8.8-7.2-16-16-16s-16 7.2-16 16V32H96c-8.8 0-16 7.2-16 16s7.2 16 16 16h16V96H60.2C49.1 96 40 105.1 40 116.2c0 2.5 .5 4.9 1.3 7.3L73.8 208H72c-13.3 0-24 10.7-24 24s10.7 24 24 24h4L60 384H196L180 256h4c13.3 0 24-10.7 24-24s-10.7-24-24-24h-1.8l32.5-84.5c.9-2.3 1.3-4.8 1.3-7.3c0-11.2-9.1-20.2-20.2-20.2H144V64h16c8.8 0 16-7.2 16-16s-7.2-16-16-16H144V16zM48 416L4.8 473.6C1.7 477.8 0 482.8 0 488c0 13.3 10.7 24 24 24H232c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L208 416H48zm288 0l-43.2 57.6c-3.1 4.2-4.8 9.2-4.8 14.4c0 13.3 10.7 24 24 24H488c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L464 416H336zM304 208v51.9c0 7.8 2.8 15.3 8 21.1L339.2 312 337 384H462.5l-3.3-72 28.3-30.8c5.4-5.9 8.5-13.6 8.5-21.7V208c0-8.8-7.2-16-16-16H464c-8.8 0-16 7.2-16 16v16H424V208c0-8.8-7.2-16-16-16H392c-8.8 0-16 7.2-16 16v16H352V208c0-8.8-7.2-16-16-16H320c-8.8 0-16 7.2-16 16zm80 96c0-8.8 7.2-16 16-16s16 7.2 16 16v32H384V304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M144 16c0-8.8-7.2-16-16-16s-16 7.2-16 16V32H96c-8.8 0-16 7.2-16 16s7.2 16 16 16h16V96H60.2C49.1 96 40 105.1 40 116.2c0 2.5 .5 4.9 1.3 7.3L73.8 208H72c-13.3 0-24 10.7-24 24s10.7 24 24 24h4L60 384H196L180 256h4c13.3 0 24-10.7 24-24s-10.7-24-24-24h-1.8l32.5-84.5c.9-2.3 1.3-4.8 1.3-7.3c0-11.2-9.1-20.2-20.2-20.2H144V64h16c8.8 0 16-7.2 16-16s-7.2-16-16-16H144V16zM48 416L4.8 473.6C1.7 477.8 0 482.8 0 488c0 13.3 10.7 24 24 24H232c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L208 416H48zm288 0l-43.2 57.6c-3.1 4.2-4.8 9.2-4.8 14.4c0 13.3 10.7 24 24 24H488c13.3 0 24-10.7 24-24c0-5.2-1.7-10.2-4.8-14.4L464 416H336zM304 208v51.9c0 7.8 2.8 15.3 8 21.1L339.2 312 337 384H462.5l-3.3-72 28.3-30.8c5.4-5.9 8.5-13.6 8.5-21.7V208c0-8.8-7.2-16-16-16H464c-8.8 0-16 7.2-16 16v16H424V208c0-8.8-7.2-16-16-16H392c-8.8 0-16 7.2-16 16v16H352V208c0-8.8-7.2-16-16-16H320c-8.8 0-16 7.2-16 16zm80 96c0-8.8 7.2-16 16-16s16 7.2 16 16v32H384V304z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chess-bishop\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"265d\"],\n        \"secondary\": [\"10f43a\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Black Chess Bishop\", \"board\", \"checkmate\", \"game\", \"strategy\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f43a\",\n    \"label\": \"Chess Bishop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M128 0C110.3 0 96 14.3 96 32c0 16.1 11.9 29.4 27.4 31.7C78.4 106.8 8 190 8 288c0 47.4 30.8 72.3 56 84.7V400H256V372.7c25.2-12.5 56-37.4 56-84.7c0-37.3-10.2-72.4-25.3-104.1l-99.4 99.4c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L270.8 154.6c-23.2-38.1-51.8-69.5-74.2-90.9C212.1 61.4 224 48.1 224 32c0-17.7-14.3-32-32-32H128zM48 432L6.6 473.4c-4.2 4.2-6.6 10-6.6 16C0 501.9 10.1 512 22.6 512H297.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L272 432H48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M128 0C110.3 0 96 14.3 96 32c0 16.1 11.9 29.4 27.4 31.7C78.4 106.8 8 190 8 288c0 47.4 30.8 72.3 56 84.7V400H256V372.7c25.2-12.5 56-37.4 56-84.7c0-37.3-10.2-72.4-25.3-104.1l-99.4 99.4c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L270.8 154.6c-23.2-38.1-51.8-69.5-74.2-90.9C212.1 61.4 224 48.1 224 32c0-17.7-14.3-32-32-32H128zM48 432L6.6 473.4c-4.2 4.2-6.6 10-6.6 16C0 501.9 10.1 512 22.6 512H297.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L272 432H48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M104 0C90.7 0 80 10.7 80 24c0 11.2 7.6 20.6 18 23.2c-7.8 8-16.1 17-24.4 27C38.2 116.7 0 178.8 0 250.9c0 44.8 24.6 72.2 48 87.8V352H96V325c0-9-5-17.2-13-21.3c-18-9.3-35-24.7-35-52.7c0-55.5 29.8-106.8 62.4-145.9c16-19.2 32.1-34.8 44.2-45.5c1.9-1.7 3.7-3.2 5.3-4.6c1.7 1.4 3.4 3 5.3 4.6c12.1 10.7 28.2 26.3 44.2 45.5c5.3 6.3 10.5 13 15.5 20L159 191c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57.8-57.8c12.8 25.9 21.2 54.3 21.2 83.8c0 28-17 43.4-35 52.7c-8 4.1-13 12.3-13 21.3v27h48V338.7c23.4-15.6 48-42.9 48-87.8c0-72.1-38.2-134.2-73.6-176.7c-8.3-9.9-16.6-19-24.4-27c10.3-2.7 18-12.1 18-23.2c0-13.3-10.7-24-24-24H160 104zM52.7 464l16.6-32H250.8l16.6 32H52.7zm207.9-80H59.5c-12 0-22.9 6.7-28.4 17.3L4.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C0 493.8 18.2 512 40.8 512H279.2c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2c-5.5-10.6-16.5-17.3-28.4-17.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M104 0C90.7 0 80 10.7 80 24c0 11.2 7.6 20.6 18 23.2c-7.8 8-16.1 17-24.4 27C38.2 116.7 0 178.8 0 250.9c0 44.8 24.6 72.2 48 87.8V352H96V325c0-9-5-17.2-13-21.3c-18-9.3-35-24.7-35-52.7c0-55.5 29.8-106.8 62.4-145.9c16-19.2 32.1-34.8 44.2-45.5c1.9-1.7 3.7-3.2 5.3-4.6c1.7 1.4 3.4 3 5.3 4.6c12.1 10.7 28.2 26.3 44.2 45.5c5.3 6.3 10.5 13 15.5 20L159 191c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57.8-57.8c12.8 25.9 21.2 54.3 21.2 83.8c0 28-17 43.4-35 52.7c-8 4.1-13 12.3-13 21.3v27h48V338.7c23.4-15.6 48-42.9 48-87.8c0-72.1-38.2-134.2-73.6-176.7c-8.3-9.9-16.6-19-24.4-27c10.3-2.7 18-12.1 18-23.2c0-13.3-10.7-24-24-24H160 104zM52.7 464l16.6-32H250.8l16.6 32H52.7zm207.9-80H59.5c-12 0-22.9 6.7-28.4 17.3L4.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C0 493.8 18.2 512 40.8 512H279.2c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2c-5.5-10.6-16.5-17.3-28.4-17.3z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chess-board\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f43c\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.5\",\n      \"5.7.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"board\", \"checkmate\", \"game\", \"strategy\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f43c\",\n    \"label\": \"Chess Board\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1678474324,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 64v64h64V96h64v64h64V96h64v64H320v64h64v64H320v64h64v64H320V352H256v64H192V352H128v64H64V352h64V288H64V224h64V160H64V96h64zm64 128h64V160H192v64zm0 64V224H128v64h64zm64 0H192v64h64V288zm0 0h64V224H256v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 64v64h64V96h64v64h64V96h64v64H320v64h64v64H320v64h64v64H320V352H256v64H192V352H128v64H64V352h64V288H64V224h64V160H64V96h64zm64 128h64V160H192v64zm0 64V224H128v64h64zm64 0H192v64h64V288zm0 0h64V224H256v64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chess-king\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"265a\"],\n        \"secondary\": [\"10f43f\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Black Chess King\", \"board\", \"checkmate\", \"game\", \"strategy\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f43f\",\n    \"label\": \"Chess King\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0c17.7 0 32 14.3 32 32V48h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H256v48H408c22.1 0 40 17.9 40 40c0 5.3-1 10.5-3.1 15.4L368 400H80L3.1 215.4C1 210.5 0 205.3 0 200c0-22.1 17.9-40 40-40H192V112H176c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V32c0-17.7 14.3-32 32-32zM38.6 473.4L80 432H368l41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H54.6C42.1 512 32 501.9 32 489.4c0-6 2.4-11.8 6.6-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0c17.7 0 32 14.3 32 32V48h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H256v48H408c22.1 0 40 17.9 40 40c0 5.3-1 10.5-3.1 15.4L368 400H80L3.1 215.4C1 210.5 0 205.3 0 200c0-22.1 17.9-40 40-40H192V112H176c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V32c0-17.7 14.3-32 32-32zM38.6 473.4L80 432H368l41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H54.6C42.1 512 32 501.9 32 489.4c0-6 2.4-11.8 6.6-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M248 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V56H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h32v40H59.6C26.7 144 0 170.7 0 203.6c0 8.2 1.7 16.3 4.9 23.8L59.1 352h52.3L49 208.2c-.6-1.5-1-3-1-4.6c0-6.4 5.2-11.6 11.6-11.6H224 388.4c6.4 0 11.6 5.2 11.6 11.6c0 1.6-.3 3.2-1 4.6L336.5 352h52.3l54.2-124.6c3.3-7.5 4.9-15.6 4.9-23.8c0-32.9-26.7-59.6-59.6-59.6H248V104h32c13.3 0 24-10.7 24-24s-10.7-24-24-24H248V24zM101.2 432H346.8l16.6 32H84.7l16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3H91.5c-12 0-22.9 6.7-28.4 17.3L36.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C32 493.8 50.2 512 72.8 512H375.2c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M248 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V56H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h32v40H59.6C26.7 144 0 170.7 0 203.6c0 8.2 1.7 16.3 4.9 23.8L59.1 352h52.3L49 208.2c-.6-1.5-1-3-1-4.6c0-6.4 5.2-11.6 11.6-11.6H224 388.4c6.4 0 11.6 5.2 11.6 11.6c0 1.6-.3 3.2-1 4.6L336.5 352h52.3l54.2-124.6c3.3-7.5 4.9-15.6 4.9-23.8c0-32.9-26.7-59.6-59.6-59.6H248V104h32c13.3 0 24-10.7 24-24s-10.7-24-24-24H248V24zM101.2 432H346.8l16.6 32H84.7l16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3H91.5c-12 0-22.9 6.7-28.4 17.3L36.6 452.5c-3 5.8-4.6 12.2-4.6 18.7C32 493.8 50.2 512 72.8 512H375.2c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chess-knight\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"265e\"],\n        \"secondary\": [\"10f441\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Chess Knight\",\n        \"board\",\n        \"checkmate\",\n        \"game\",\n        \"horse\",\n        \"strategy\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f441\",\n    \"label\": \"Chess Knight\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 48L82.7 61.3C70.7 73.3 64 89.5 64 106.5V238.9c0 10.7 5.3 20.7 14.2 26.6l10.6 7c14.3 9.6 32.7 10.7 48.1 3l3.2-1.6c2.6-1.3 5-2.8 7.3-4.5l49.4-37c6.6-5 15.7-5 22.3 0c10.2 7.7 9.9 23.1-.7 30.3L90.4 350C73.9 361.3 64 380 64 400H384l28.9-159c2.1-11.3 3.1-22.8 3.1-34.3V192C416 86 330 0 224 0H83.8C72.9 0 64 8.9 64 19.8c0 7.5 4.2 14.3 10.9 17.7L96 48zm24 68a20 20 0 1 1 40 0 20 20 0 1 1 -40 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512H409.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L384 432H64L22.6 473.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 48L82.7 61.3C70.7 73.3 64 89.5 64 106.5V238.9c0 10.7 5.3 20.7 14.2 26.6l10.6 7c14.3 9.6 32.7 10.7 48.1 3l3.2-1.6c2.6-1.3 5-2.8 7.3-4.5l49.4-37c6.6-5 15.7-5 22.3 0c10.2 7.7 9.9 23.1-.7 30.3L90.4 350C73.9 361.3 64 380 64 400H384l28.9-159c2.1-11.3 3.1-22.8 3.1-34.3V192C416 86 330 0 224 0H83.8C72.9 0 64 8.9 64 19.8c0 7.5 4.2 14.3 10.9 17.7L96 48zm24 68a20 20 0 1 1 40 0 20 20 0 1 1 -40 0zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512H409.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L384 432H64L22.6 473.4z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M226.6 48H117.3l17.1 12.8c6 4.5 9.6 11.6 9.6 19.2s-3.6 14.7-9.6 19.2l-6.5 4.9c-10 7.5-16 19.3-16 31.9l-.3 91c0 10.2 4.9 19.9 13.2 25.8l1.9 1.3c9.9 7.1 23.3 7 33.2-.1l49.9-36.3c10.7-7.8 25.7-5.4 33.5 5.3s5.4 25.7-5.3 33.5l-49.9 36.3-53.8 39.1c-7.3 5.3-13 12.2-16.9 20.1H66.8c5.3-22.1 17.8-41.9 35.9-56.3c-1.3-.8-2.6-1.7-3.8-2.6L97 291.8c-21-15-33.4-39.2-33.3-65l.3-91c.1-19.8 6.7-38.7 18.6-53.9l-.4-.3C70.7 73 64 59.6 64 45.3C64 20.3 84.3 0 109.3 0H226.6C331.2 0 416 84.8 416 189.4c0 11.1-1 22.2-2.9 33.2L390.1 352H341.3l24.5-137.8c1.5-8.2 2.2-16.5 2.2-24.8C368 111.3 304.7 48 226.6 48zM85.2 432L68.7 464H379.3l-16.6-32H85.2zm315.7-30.7l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8H56.8C34.2 512 16 493.8 16 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C52.5 390.7 63.5 384 75.5 384h297c12 0 22.9 6.7 28.4 17.3zM172 128a20 20 0 1 1 0 40 20 20 0 1 1 0-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M226.6 48H117.3l17.1 12.8c6 4.5 9.6 11.6 9.6 19.2s-3.6 14.7-9.6 19.2l-6.5 4.9c-10 7.5-16 19.3-16 31.9l-.3 91c0 10.2 4.9 19.9 13.2 25.8l1.9 1.3c9.9 7.1 23.3 7 33.2-.1l49.9-36.3c10.7-7.8 25.7-5.4 33.5 5.3s5.4 25.7-5.3 33.5l-49.9 36.3-53.8 39.1c-7.3 5.3-13 12.2-16.9 20.1H66.8c5.3-22.1 17.8-41.9 35.9-56.3c-1.3-.8-2.6-1.7-3.8-2.6L97 291.8c-21-15-33.4-39.2-33.3-65l.3-91c.1-19.8 6.7-38.7 18.6-53.9l-.4-.3C70.7 73 64 59.6 64 45.3C64 20.3 84.3 0 109.3 0H226.6C331.2 0 416 84.8 416 189.4c0 11.1-1 22.2-2.9 33.2L390.1 352H341.3l24.5-137.8c1.5-8.2 2.2-16.5 2.2-24.8C368 111.3 304.7 48 226.6 48zM85.2 432L68.7 464H379.3l-16.6-32H85.2zm315.7-30.7l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8H56.8C34.2 512 16 493.8 16 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C52.5 390.7 63.5 384 75.5 384h297c12 0 22.9 6.7 28.4 17.3zM172 128a20 20 0 1 1 0 40 20 20 0 1 1 0-40z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chess-pawn\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"265f\"],\n        \"secondary\": [\"10f443\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"board\",\n        \"checkmate\",\n        \"chess\",\n        \"chess pawn\",\n        \"dupe\",\n        \"expendable\",\n        \"game\",\n        \"strategy\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f443\",\n    \"label\": \"Chess Pawn\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M215.5 224c29.2-18.4 48.5-50.9 48.5-88c0-57.4-46.6-104-104-104S56 78.6 56 136c0 37.1 19.4 69.6 48.5 88H96c-17.7 0-32 14.3-32 32c0 16.5 12.5 30 28.5 31.8L80 400H240L227.5 287.8c16-1.8 28.5-15.3 28.5-31.8c0-17.7-14.3-32-32-32h-8.5zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512H281.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L256 432H64L22.6 473.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M215.5 224c29.2-18.4 48.5-50.9 48.5-88c0-57.4-46.6-104-104-104S56 78.6 56 136c0 37.1 19.4 69.6 48.5 88H96c-17.7 0-32 14.3-32 32c0 16.5 12.5 30 28.5 31.8L80 400H240L227.5 287.8c16-1.8 28.5-15.3 28.5-31.8c0-17.7-14.3-32-32-32h-8.5zM22.6 473.4c-4.2 4.2-6.6 10-6.6 16C16 501.9 26.1 512 38.6 512H281.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L256 432H64L22.6 473.4z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M232 152A72 72 0 1 0 88 152a72 72 0 1 0 144 0zm24 120H243.4l10.7 80H205.7L195 272H160 125l-10.7 80H65.9l10.7-80H64c-13.3 0-24-10.7-24-24s10.7-24 24-24c-15.1-20.1-24-45-24-72C40 85.7 93.7 32 160 32s120 53.7 120 120c0 27-8.9 51.9-24 72c13.3 0 24 10.7 24 24s-10.7 24-24 24zM52.7 464H267.3l-16.6-32H69.2L52.7 464zm207.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8H40.8C18.2 512 0 493.8 0 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C36.5 390.7 47.5 384 59.5 384h201z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M232 152A72 72 0 1 0 88 152a72 72 0 1 0 144 0zm24 120H243.4l10.7 80H205.7L195 272H160 125l-10.7 80H65.9l10.7-80H64c-13.3 0-24-10.7-24-24s10.7-24 24-24c-15.1-20.1-24-45-24-72C40 85.7 93.7 32 160 32s120 53.7 120 120c0 27-8.9 51.9-24 72c13.3 0 24 10.7 24 24s-10.7 24-24 24zM52.7 464H267.3l-16.6-32H69.2L52.7 464zm207.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8H40.8C18.2 512 0 493.8 0 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C36.5 390.7 47.5 384 59.5 384h201z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chess-queen\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"265b\"],\n        \"secondary\": [\"10f445\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Black Chess Queen\", \"board\", \"checkmate\", \"game\", \"strategy\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f445\",\n    \"label\": \"Chess Queen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0a56 56 0 1 1 0 112A56 56 0 1 1 256 0zM134.1 143.8c3.3-13 15-23.8 30.2-23.8c12.3 0 22.6 7.2 27.7 17c12 23.2 36.2 39 64 39s52-15.8 64-39c5.1-9.8 15.4-17 27.7-17c15.3 0 27 10.8 30.2 23.8c7 27.8 32.2 48.3 62.1 48.3c10.8 0 21-2.7 29.8-7.4c8.4-4.4 18.9-4.5 27.6 .9c13 8 17.1 25 9.2 38L399.7 400H384 343.6 168.4 128 112.3L5.4 223.6c-7.9-13-3.8-30 9.2-38c8.7-5.3 19.2-5.3 27.6-.9c8.9 4.7 19 7.4 29.8 7.4c29.9 0 55.1-20.5 62.1-48.3zM256 224l0 0 0 0h0zM112 432H400l41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H86.6C74.1 512 64 501.9 64 489.4c0-6 2.4-11.8 6.6-16L112 432z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0a56 56 0 1 1 0 112A56 56 0 1 1 256 0zM134.1 143.8c3.3-13 15-23.8 30.2-23.8c12.3 0 22.6 7.2 27.7 17c12 23.2 36.2 39 64 39s52-15.8 64-39c5.1-9.8 15.4-17 27.7-17c15.3 0 27 10.8 30.2 23.8c7 27.8 32.2 48.3 62.1 48.3c10.8 0 21-2.7 29.8-7.4c8.4-4.4 18.9-4.5 27.6 .9c13 8 17.1 25 9.2 38L399.7 400H384 343.6 168.4 128 112.3L5.4 223.6c-7.9-13-3.8-30 9.2-38c8.7-5.3 19.2-5.3 27.6-.9c8.9 4.7 19 7.4 29.8 7.4c29.9 0 55.1-20.5 62.1-48.3zM256 224l0 0 0 0h0zM112 432H400l41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H86.6C74.1 512 64 501.9 64 489.4c0-6 2.4-11.8 6.6-16L112 432z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-95.2-8c-18.1 0-31.3 12.8-35.6 26.9c-8 26.2-32.4 45.2-61.2 45.2c-10 0-19.4-2.3-27.7-6.3c-7.6-3.7-16.7-3.3-24 1.2C.7 162.1-3.1 177.1 3.7 188.9L97.6 352H153l-83-144.1c40.5-2.2 75.3-25.9 93.1-59.8c22 26.8 55.4 43.9 92.8 43.9s70.8-17.1 92.8-43.9c17.8 34 52.6 57.7 93.1 59.8L359 352h55.4l93.9-163.1c6.8-11.7 3-26.7-8.6-33.8c-7.3-4.5-16.4-4.9-24-1.2c-8.4 4-17.7 6.3-27.7 6.3c-28.8 0-53.2-19-61.2-45.2C382.5 100.8 369.3 88 351.2 88c-14.5 0-26.3 8.5-32.4 19.3c-12.4 22-35.9 36.7-62.8 36.7s-50.4-14.8-62.8-36.7C187.1 96.5 175.4 88 160.8 88zM133.2 432H378.8l16.6 32H116.7l16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3h-265c-12 0-22.9 6.7-28.4 17.3L68.6 452.5c-3 5.8-4.6 12.2-4.6 18.7c0 22.5 18.2 40.8 40.8 40.8H407.2c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-95.2-8c-18.1 0-31.3 12.8-35.6 26.9c-8 26.2-32.4 45.2-61.2 45.2c-10 0-19.4-2.3-27.7-6.3c-7.6-3.7-16.7-3.3-24 1.2C.7 162.1-3.1 177.1 3.7 188.9L97.6 352H153l-83-144.1c40.5-2.2 75.3-25.9 93.1-59.8c22 26.8 55.4 43.9 92.8 43.9s70.8-17.1 92.8-43.9c17.8 34 52.6 57.7 93.1 59.8L359 352h55.4l93.9-163.1c6.8-11.7 3-26.7-8.6-33.8c-7.3-4.5-16.4-4.9-24-1.2c-8.4 4-17.7 6.3-27.7 6.3c-28.8 0-53.2-19-61.2-45.2C382.5 100.8 369.3 88 351.2 88c-14.5 0-26.3 8.5-32.4 19.3c-12.4 22-35.9 36.7-62.8 36.7s-50.4-14.8-62.8-36.7C187.1 96.5 175.4 88 160.8 88zM133.2 432H378.8l16.6 32H116.7l16.6-32zm283.7-30.7c-5.5-10.6-16.5-17.3-28.4-17.3h-265c-12 0-22.9 6.7-28.4 17.3L68.6 452.5c-3 5.8-4.6 12.2-4.6 18.7c0 22.5 18.2 40.8 40.8 40.8H407.2c22.5 0 40.8-18.2 40.8-40.8c0-6.5-1.6-12.9-4.6-18.7l-26.5-51.2z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chess-rook\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"265c\"],\n        \"secondary\": [\"10f447\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Chess Rook\",\n        \"board\",\n        \"castle\",\n        \"checkmate\",\n        \"game\",\n        \"strategy\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f447\",\n    \"label\": \"Chess Rook\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 192V48c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16V88c0 4.4 3.6 8 8 8h32c4.4 0 8-3.6 8-8V48c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16V88c0 4.4 3.6 8 8 8h32c4.4 0 8-3.6 8-8V48c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16V192c0 10.1-4.7 19.6-12.8 25.6L352 256l16 144H80L96 256 44.8 217.6C36.7 211.6 32 202.1 32 192zm176 96h32c8.8 0 16-7.2 16-16V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c0 8.8 7.2 16 16 16zM22.6 473.4L64 432H384l41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H38.6C26.1 512 16 501.9 16 489.4c0-6 2.4-11.8 6.6-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 192V48c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16V88c0 4.4 3.6 8 8 8h32c4.4 0 8-3.6 8-8V48c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16V88c0 4.4 3.6 8 8 8h32c4.4 0 8-3.6 8-8V48c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16V192c0 10.1-4.7 19.6-12.8 25.6L352 256l16 144H80L96 256 44.8 217.6C36.7 211.6 32 202.1 32 192zm176 96h32c8.8 0 16-7.2 16-16V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c0 8.8 7.2 16 16 16zM22.6 473.4L64 432H384l41.4 41.4c4.2 4.2 6.6 10 6.6 16c0 12.5-10.1 22.6-22.6 22.6H38.6C26.1 512 16 501.9 16 489.4c0-6 2.4-11.8 6.6-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M80 80V192c0 2.5 1.2 4.9 3.2 6.4l51.2 38.4c6.8 5.1 10.4 13.4 9.5 21.9L133.5 352H85.2l9.4-85L54.4 236.8C40.3 226.2 32 209.6 32 192V72c0-22.1 17.9-40 40-40H376c22.1 0 40 17.9 40 40V192c0 17.6-8.3 34.2-22.4 44.8L353.4 267l9.4 85H314.5l-10.4-93.3c-.9-8.4 2.7-16.8 9.5-21.9l51.2-38.4c2-1.5 3.2-3.9 3.2-6.4V80H304v24c0 13.3-10.7 24-24 24s-24-10.7-24-24V80H192v24c0 13.3-10.7 24-24 24s-24-10.7-24-24V80H80zm4.7 384H363.3l-16.6-32H101.2L84.7 464zm271.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8H72.8C50.2 512 32 493.8 32 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C68.5 390.7 79.5 384 91.5 384h265zM208 288c-8.8 0-16-7.2-16-16V224c0-17.7 14.3-32 32-32s32 14.3 32 32v48c0 8.8-7.2 16-16 16H208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M80 80V192c0 2.5 1.2 4.9 3.2 6.4l51.2 38.4c6.8 5.1 10.4 13.4 9.5 21.9L133.5 352H85.2l9.4-85L54.4 236.8C40.3 226.2 32 209.6 32 192V72c0-22.1 17.9-40 40-40H376c22.1 0 40 17.9 40 40V192c0 17.6-8.3 34.2-22.4 44.8L353.4 267l9.4 85H314.5l-10.4-93.3c-.9-8.4 2.7-16.8 9.5-21.9l51.2-38.4c2-1.5 3.2-3.9 3.2-6.4V80H304v24c0 13.3-10.7 24-24 24s-24-10.7-24-24V80H192v24c0 13.3-10.7 24-24 24s-24-10.7-24-24V80H80zm4.7 384H363.3l-16.6-32H101.2L84.7 464zm271.9-80c12 0 22.9 6.7 28.4 17.3l26.5 51.2c3 5.8 4.6 12.2 4.6 18.7c0 22.5-18.2 40.8-40.8 40.8H72.8C50.2 512 32 493.8 32 471.2c0-6.5 1.6-12.9 4.6-18.7l26.5-51.2C68.5 390.7 79.5 384 91.5 384h265zM208 288c-8.8 0-16-7.2-16-16V224c0-17.7 14.3-32 32-32s32 14.3 32 32v48c0 8.8-7.2 16-16 16H208z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"chevron-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f078\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"download\", \"expand\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f078\",\n    \"label\": \"Chevron Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chevron-left\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2329\"],\n        \"secondary\": [\"10f053\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Left-Pointing Angle Bracket\",\n        \"arrow\",\n        \"back\",\n        \"bracket\",\n        \"previous\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f053\",\n    \"label\": \"Chevron Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chevron-right\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"232a\"],\n        \"secondary\": [\"10f054\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Right-Pointing Angle Bracket\",\n        \"arrow\",\n        \"bracket\",\n        \"forward\",\n        \"next\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f054\",\n    \"label\": \"Chevron Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chevron-up\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f077\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"collapse\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f077\",\n    \"label\": \"Chevron Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"child\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1ae\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.1.1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boy\", \"girl\", \"kid\", \"toddler\", \"young\", \"youth\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1ae\",\n    \"label\": \"Child\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M96 64a64 64 0 1 1 128 0A64 64 0 1 1 96 64zm48 320v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V287.8L59.1 321c-9.4 15-29.2 19.4-44.1 10S-4.5 301.9 4.9 287l39.9-63.3C69.7 184 113.2 160 160 160s90.3 24 115.2 63.6L315.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L240 287.8V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M96 64a64 64 0 1 1 128 0A64 64 0 1 1 96 64zm48 320v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V287.8L59.1 321c-9.4 15-29.2 19.4-44.1 10S-4.5 301.9 4.9 287l39.9-63.3C69.7 184 113.2 160 160 160s90.3 24 115.2 63.6L315.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L240 287.8V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"child-combatant\": {\n    \"aliases\": {\n      \"names\": [\"child-rifle\"]\n    },\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"combatant\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e0\",\n    \"label\": \"Child Combatant\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M176 128A64 64 0 1 0 176 0a64 64 0 1 0 0 128zm-8 352V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V300.5L260.9 321c9.4 15 29.2 19.4 44.1 10s19.4-29.2 10-44.1l-51.7-82.1c-17.6-27.9-48.3-44.9-81.2-44.9H169.8c-33 0-63.7 16.9-81.2 44.9L36.9 287c-9.4 15-4.9 34.7 10 44.1s34.7 4.9 44.1-10L104 300.5V480c0 17.7 14.3 32 32 32s32-14.3 32-32zM448 0H432 416c-8.8 0-16 7.2-16 16s7.2 16 16 16V132.3c-9.6 5.5-16 15.9-16 27.7v32c-17.7 0-32 14.3-32 32V368c0 17.7 14.3 32 32 32h16v96c0 8.8 7.2 16 16 16h59.5c10.4 0 18-9.8 15.5-19.9L484 400h44c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H480V325.3l53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2V208c0-8.8-7.2-16-16-16H512c-8.8 0-16 7.2-16 16v56l-16 5.3V160c0-11.8-6.4-22.2-16-27.7V16c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M176 128A64 64 0 1 0 176 0a64 64 0 1 0 0 128zm-8 352V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V300.5L260.9 321c9.4 15 29.2 19.4 44.1 10s19.4-29.2 10-44.1l-51.7-82.1c-17.6-27.9-48.3-44.9-81.2-44.9H169.8c-33 0-63.7 16.9-81.2 44.9L36.9 287c-9.4 15-4.9 34.7 10 44.1s34.7 4.9 44.1-10L104 300.5V480c0 17.7 14.3 32 32 32s32-14.3 32-32zM448 0H432 416c-8.8 0-16 7.2-16 16s7.2 16 16 16V132.3c-9.6 5.5-16 15.9-16 27.7v32c-17.7 0-32 14.3-32 32V368c0 17.7 14.3 32 32 32h16v96c0 8.8 7.2 16 16 16h59.5c10.4 0 18-9.8 15.5-19.9L484 400h44c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H480V325.3l53.1-17.7c6.5-2.2 10.9-8.3 10.9-15.2V208c0-8.8-7.2-16-16-16H512c-8.8 0-16 7.2-16 16v56l-16 5.3V160c0-11.8-6.4-22.2-16-27.7V16c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"child-dress\": {\n    \"changes\": [\"6.1.1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boy\", \"girl\", \"kid\", \"toddler\", \"young\", \"youth\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e59c\",\n    \"label\": \"Child Dress\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M224 64A64 64 0 1 0 96 64a64 64 0 1 0 128 0zM88 400v80c0 17.7 14.3 32 32 32s32-14.3 32-32V400h16v80c0 17.7 14.3 32 32 32s32-14.3 32-32V400h17.8c10.9 0 18.6-10.7 15.2-21.1l-31.1-93.4 28.6 37.8c10.7 14.1 30.8 16.8 44.8 6.2s16.8-30.7 6.2-44.8L254.6 207c-22.4-29.6-57.5-47-94.6-47s-72.2 17.4-94.6 47L6.5 284.7c-10.7 14.1-7.9 34.2 6.2 44.8s34.2 7.9 44.8-6.2l28.7-37.8L55 378.9C51.6 389.3 59.3 400 70.2 400H88z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M224 64A64 64 0 1 0 96 64a64 64 0 1 0 128 0zM88 400v80c0 17.7 14.3 32 32 32s32-14.3 32-32V400h16v80c0 17.7 14.3 32 32 32s32-14.3 32-32V400h17.8c10.9 0 18.6-10.7 15.2-21.1l-31.1-93.4 28.6 37.8c10.7 14.1 30.8 16.8 44.8 6.2s16.8-30.7 6.2-44.8L254.6 207c-22.4-29.6-57.5-47-94.6-47s-72.2 17.4-94.6 47L6.5 284.7c-10.7 14.1-7.9 34.2 6.2 44.8s34.2 7.9 44.8-6.2l28.7-37.8L55 378.9C51.6 389.3 59.3 400 70.2 400H88z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"child-reaching\": {\n    \"changes\": [\"6.1.1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boy\", \"girl\", \"kid\", \"toddler\", \"young\", \"youth\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e59d\",\n    \"label\": \"Child Reaching\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4V480c0 17.7 14.3 32 32 32s32-14.3 32-32V384h32v96c0 17.7 14.3 32 32 32s32-14.3 32-32V221.6c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M256 64A64 64 0 1 0 128 64a64 64 0 1 0 128 0zM152.9 169.3c-23.7-8.4-44.5-24.3-58.8-45.8L74.6 94.2C64.8 79.5 45 75.6 30.2 85.4s-18.7 29.7-8.9 44.4L40.9 159c18.1 27.1 42.8 48.4 71.1 62.4V480c0 17.7 14.3 32 32 32s32-14.3 32-32V384h32v96c0 17.7 14.3 32 32 32s32-14.3 32-32V221.6c29.1-14.2 54.4-36.2 72.7-64.2l18.2-27.9c9.6-14.8 5.4-34.6-9.4-44.3s-34.6-5.5-44.3 9.4L291 122.4c-21.8 33.4-58.9 53.6-98.8 53.6c-12.6 0-24.9-2-36.6-5.8c-.9-.3-1.8-.7-2.7-.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"children\": {\n    \"changes\": [\"6.1.0\", \"6.1.1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boy\", \"child\", \"girl\", \"kid\", \"kids\", \"young\", \"youth\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e1\",\n    \"label\": \"Children\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M160 0a64 64 0 1 1 0 128A64 64 0 1 1 160 0zM88 480V400H70.2c-10.9 0-18.6-10.7-15.2-21.1l31.1-93.4L57.5 323.3c-10.7 14.1-30.8 16.8-44.8 6.2s-16.8-30.7-6.2-44.8L65.4 207c22.4-29.6 57.5-47 94.6-47s72.2 17.4 94.6 47l58.9 77.7c10.7 14.1 7.9 34.2-6.2 44.8s-34.2 7.9-44.8-6.2l-28.6-37.8L265 378.9c3.5 10.4-4.3 21.1-15.2 21.1H232v80c0 17.7-14.3 32-32 32s-32-14.3-32-32V400H152v80c0 17.7-14.3 32-32 32s-32-14.3-32-32zM480 0a64 64 0 1 1 0 128A64 64 0 1 1 480 0zm-8 384v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V300.5L395.1 321c-9.4 15-29.2 19.4-44.1 10s-19.4-29.2-10-44.1l51.7-82.1c17.6-27.9 48.3-44.9 81.2-44.9h12.3c33 0 63.7 16.9 81.2 44.9L619.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L552 300.5V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H472z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M160 0a64 64 0 1 1 0 128A64 64 0 1 1 160 0zM88 480V400H70.2c-10.9 0-18.6-10.7-15.2-21.1l31.1-93.4L57.5 323.3c-10.7 14.1-30.8 16.8-44.8 6.2s-16.8-30.7-6.2-44.8L65.4 207c22.4-29.6 57.5-47 94.6-47s72.2 17.4 94.6 47l58.9 77.7c10.7 14.1 7.9 34.2-6.2 44.8s-34.2 7.9-44.8-6.2l-28.6-37.8L265 378.9c3.5 10.4-4.3 21.1-15.2 21.1H232v80c0 17.7-14.3 32-32 32s-32-14.3-32-32V400H152v80c0 17.7-14.3 32-32 32s-32-14.3-32-32zM480 0a64 64 0 1 1 0 128A64 64 0 1 1 480 0zm-8 384v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V300.5L395.1 321c-9.4 15-29.2 19.4-44.1 10s-19.4-29.2-10-44.1l51.7-82.1c17.6-27.9 48.3-44.9 81.2-44.9h12.3c33 0 63.7 16.9 81.2 44.9L619.1 287c9.4 15 4.9 34.7-10 44.1s-34.7 4.9-44.1-10L552 300.5V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H472z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"chrome\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f268\",\n    \"label\": \"Chrome\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256C0 209.4 12.47 165.6 34.27 127.1L144.1 318.3C166 357.5 207.9 384 256 384C270.3 384 283.1 381.7 296.8 377.4L220.5 509.6C95.9 492.3 0 385.3 0 256zM365.1 321.6C377.4 302.4 384 279.1 384 256C384 217.8 367.2 183.5 340.7 160H493.4C505.4 189.6 512 222.1 512 256C512 397.4 397.4 511.1 256 512L365.1 321.6zM477.8 128H256C193.1 128 142.3 172.1 130.5 230.7L54.19 98.47C101 38.53 174 0 256 0C350.8 0 433.5 51.48 477.8 128V128zM168 256C168 207.4 207.4 168 256 168C304.6 168 344 207.4 344 256C344 304.6 304.6 344 256 344C207.4 344 168 304.6 168 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256C0 209.4 12.47 165.6 34.27 127.1L144.1 318.3C166 357.5 207.9 384 256 384C270.3 384 283.1 381.7 296.8 377.4L220.5 509.6C95.9 492.3 0 385.3 0 256zM365.1 321.6C377.4 302.4 384 279.1 384 256C384 217.8 367.2 183.5 340.7 160H493.4C505.4 189.6 512 222.1 512 256C512 397.4 397.4 511.1 256 512L365.1 321.6zM477.8 128H256C193.1 128 142.3 172.1 130.5 230.7L54.19 98.47C101 38.53 174 0 256 0C350.8 0 433.5 51.48 477.8 128V128zM168 256C168 207.4 207.4 168 256 168C304.6 168 344 207.4 344 256C344 304.6 304.6 344 256 344C207.4 344 168 304.6 168 256z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"chromecast\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f838\",\n    \"label\": \"Chromecast\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M447.8,64H64c-23.6,0-42.7,19.1-42.7,42.7v63.9H64v-63.9h383.8v298.6H298.6V448H448c23.6,0,42.7-19.1,42.7-42.7V106.7 C490.7,83.1,471.4,64,447.8,64z M21.3,383.6L21.3,383.6l0,63.9h63.9C85.2,412.2,56.6,383.6,21.3,383.6L21.3,383.6z M21.3,298.6V341 c58.9,0,106.6,48.1,106.6,107h42.7C170.7,365.6,103.7,298.7,21.3,298.6z M213.4,448h42.7c-0.5-129.5-105.3-234.3-234.8-234.6l0,42.4 C127.3,255.6,213.3,342,213.4,448z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"church\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26ea\"],\n        \"secondary\": [\"10f51d\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Christian\",\n        \"building\",\n        \"cathedral\",\n        \"chapel\",\n        \"church\",\n        \"community\",\n        \"cross\",\n        \"religion\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f51d\",\n    \"label\": \"Church\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M344 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V48H264c-13.3 0-24 10.7-24 24s10.7 24 24 24h32v46.4L183.3 210c-14.5 8.7-23.3 24.3-23.3 41.2V512h96V416c0-35.3 28.7-64 64-64s64 28.7 64 64v96h96V251.2c0-16.9-8.8-32.5-23.3-41.2L344 142.4V96h32c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V24zM24.9 330.3C9.5 338.8 0 354.9 0 372.4V464c0 26.5 21.5 48 48 48h80V273.6L24.9 330.3zM592 512c26.5 0 48-21.5 48-48V372.4c0-17.5-9.5-33.6-24.9-42.1L512 273.6V512h80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M344 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V48H264c-13.3 0-24 10.7-24 24s10.7 24 24 24h32v46.4L183.3 210c-14.5 8.7-23.3 24.3-23.3 41.2V512h96V416c0-35.3 28.7-64 64-64s64 28.7 64 64v96h96V251.2c0-16.9-8.8-32.5-23.3-41.2L344 142.4V96h32c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V24zM24.9 330.3C9.5 338.8 0 354.9 0 372.4V464c0 26.5 21.5 48 48 48h80V273.6L24.9 330.3zM592 512c26.5 0 48-21.5 48-48V372.4c0-17.5-9.5-33.6-24.9-42.1L512 273.6V512h80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\n          \"1f534\",\n          \"1f535\",\n          \"1f7e0\",\n          \"1f7e1\",\n          \"1f7e2\",\n          \"1f7e3\",\n          \"1f7e4\",\n          \"25cf\",\n          \"26aa\",\n          \"26ab\",\n          \"2b24\",\n          \"f10c\",\n          \"f1db\"\n        ],\n        \"secondary\": [\"10f111\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Circle\",\n        \"Black Large Circle\",\n        \"black circle\",\n        \"blue\",\n        \"blue circle\",\n        \"brown\",\n        \"brown circle\",\n        \"chart\",\n        \"circle\",\n        \"circle-thin\",\n        \"diameter\",\n        \"dot\",\n        \"ellipse\",\n        \"fill\",\n        \"geometric\",\n        \"green\",\n        \"green circle\",\n        \"notification\",\n        \"orange\",\n        \"orange circle\",\n        \"progress\",\n        \"purple\",\n        \"purple circle\",\n        \"red\",\n        \"red circle\",\n        \"round\",\n        \"white circle\",\n        \"yellow\",\n        \"yellow circle\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f111\",\n    \"label\": \"Circle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-arrow-down\": {\n    \"aliases\": {\n      \"names\": [\"arrow-circle-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0ab\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"download\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ab\",\n    \"label\": \"Circle Arrow Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 281c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 136c0-13.3 10.7-24 24-24s24 10.7 24 24l0 182.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 393c-9.4 9.4-24.6 9.4-33.9 0L127 281z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM127 281c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l71 71L232 136c0-13.3 10.7-24 24-24s24 10.7 24 24l0 182.1 71-71c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 393c-9.4 9.4-24.6 9.4-33.9 0L127 281z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-arrow-left\": {\n    \"aliases\": {\n      \"names\": [\"arrow-circle-left\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0a8\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"back\", \"previous\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0a8\",\n    \"label\": \"Circle Arrow Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM231 127c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-71 71L376 232c13.3 0 24 10.7 24 24s-10.7 24-24 24l-182.1 0 71 71c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L119 273c-9.4-9.4-9.4-24.6 0-33.9L231 127z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM231 127c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-71 71L376 232c13.3 0 24 10.7 24 24s-10.7 24-24 24l-182.1 0 71 71c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L119 273c-9.4-9.4-9.4-24.6 0-33.9L231 127z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-arrow-right\": {\n    \"aliases\": {\n      \"names\": [\"arrow-circle-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0a9\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"next\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0a9\",\n    \"label\": \"Circle Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM281 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L136 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l182.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L393 239c9.4 9.4 9.4 24.6 0 33.9L281 385z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM281 385c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l71-71L136 280c-13.3 0-24-10.7-24-24s10.7-24 24-24l182.1 0-71-71c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L393 239c9.4 9.4 9.4 24.6 0 33.9L281 385z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-arrow-up\": {\n    \"aliases\": {\n      \"names\": [\"arrow-circle-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0aa\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0aa\",\n    \"label\": \"Circle Arrow Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 231c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71V376c0 13.3-10.7 24-24 24s-24-10.7-24-24V193.9l-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 119c9.4-9.4 24.6-9.4 33.9 0L385 231z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM385 231c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-71-71V376c0 13.3-10.7 24-24 24s-24-10.7-24-24V193.9l-71 71c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 119c9.4-9.4 24.6-9.4 33.9 0L385 231z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-check\": {\n    \"aliases\": {\n      \"names\": [\"check-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f05d\"],\n        \"secondary\": [\"10f058\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accept\",\n        \"affected\",\n        \"agree\",\n        \"clear\",\n        \"confirm\",\n        \"correct\",\n        \"done\",\n        \"ok\",\n        \"select\",\n        \"success\",\n        \"tick\",\n        \"todo\",\n        \"yes\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f058\",\n    \"label\": \"Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L369 209z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-111 111-47-47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l64 64c9.4 9.4 24.6 9.4 33.9 0L369 209z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-chevron-down\": {\n    \"aliases\": {\n      \"names\": [\"chevron-circle-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f13a\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"download\", \"dropdown\", \"menu\", \"more\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f13a\",\n    \"label\": \"Circle Chevron Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM135 241c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l87 87 87-87c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 345c-9.4 9.4-24.6 9.4-33.9 0L135 241z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM135 241c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l87 87 87-87c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L273 345c-9.4 9.4-24.6 9.4-33.9 0L135 241z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-chevron-left\": {\n    \"aliases\": {\n      \"names\": [\"chevron-circle-left\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f137\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"back\", \"previous\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f137\",\n    \"label\": \"Circle Chevron Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM271 135c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-87 87 87 87c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L167 273c-9.4-9.4-9.4-24.6 0-33.9L271 135z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-chevron-right\": {\n    \"aliases\": {\n      \"names\": [\"chevron-circle-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f138\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"forward\", \"next\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f138\",\n    \"label\": \"Circle Chevron Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM241 377c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l87-87-87-87c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L345 239c9.4 9.4 9.4 24.6 0 33.9L241 377z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-chevron-up\": {\n    \"aliases\": {\n      \"names\": [\"chevron-circle-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f139\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"collapse\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f139\",\n    \"label\": \"Circle Chevron Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM377 271c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-87-87-87 87c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 167c9.4-9.4 24.6-9.4 33.9 0L377 271z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM377 271c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-87-87-87 87c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L239 167c9.4-9.4 24.6-9.4 33.9 0L377 271z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-dollar-to-slot\": {\n    \"aliases\": {\n      \"names\": [\"donate\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4b9\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"contribute\", \"generosity\", \"gift\", \"give\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4b9\",\n    \"label\": \"Circle Dollar To Slot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M326.7 403.7c-22.1 8-45.9 12.3-70.7 12.3s-48.7-4.4-70.7-12.3c-.3-.1-.5-.2-.8-.3c-30-11-56.8-28.7-78.6-51.4C70 314.6 48 263.9 48 208C48 93.1 141.1 0 256 0S464 93.1 464 208c0 55.9-22 106.6-57.9 144c-1 1-2 2.1-3 3.1c-21.4 21.4-47.4 38.1-76.3 48.6zM256 91.9c-11.1 0-20.1 9-20.1 20.1v6c-5.6 1.2-10.9 2.9-15.9 5.1c-15 6.8-27.9 19.4-31.1 37.7c-1.8 10.2-.8 20 3.4 29c4.2 8.8 10.7 15 17.3 19.5c11.6 7.9 26.9 12.5 38.6 16l2.2 .7c13.9 4.2 23.4 7.4 29.3 11.7c2.5 1.8 3.4 3.2 3.7 4c.3 .8 .9 2.6 .2 6.7c-.6 3.5-2.5 6.4-8 8.8c-6.1 2.6-16 3.9-28.8 1.9c-6-1-16.7-4.6-26.2-7.9l0 0 0 0 0 0c-2.2-.7-4.3-1.5-6.4-2.1c-10.5-3.5-21.8 2.2-25.3 12.7s2.2 21.8 12.7 25.3c1.2 .4 2.7 .9 4.4 1.5c7.9 2.7 20.3 6.9 29.8 9.1V304c0 11.1 9 20.1 20.1 20.1s20.1-9 20.1-20.1v-5.5c5.3-1 10.5-2.5 15.4-4.6c15.7-6.7 28.4-19.7 31.6-38.7c1.8-10.4 1-20.3-3-29.4c-3.9-9-10.2-15.6-16.9-20.5c-12.2-8.8-28.3-13.7-40.4-17.4l-.8-.2c-14.2-4.3-23.8-7.3-29.9-11.4c-2.6-1.8-3.4-3-3.6-3.5c-.2-.3-.7-1.6-.1-5c.3-1.9 1.9-5.2 8.2-8.1c6.4-2.9 16.4-4.5 28.6-2.6c4.3 .7 17.9 3.3 21.7 4.3c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-4.4-1.2-14.4-3.2-21-4.4V112c0-11.1-9-20.1-20.1-20.1zM48 352H64c19.5 25.9 44 47.7 72.2 64H64v32H256 448V416H375.8c28.2-16.3 52.8-38.1 72.2-64h16c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V400c0-26.5 21.5-48 48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M326.7 403.7c-22.1 8-45.9 12.3-70.7 12.3s-48.7-4.4-70.7-12.3c-.3-.1-.5-.2-.8-.3c-30-11-56.8-28.7-78.6-51.4C70 314.6 48 263.9 48 208C48 93.1 141.1 0 256 0S464 93.1 464 208c0 55.9-22 106.6-57.9 144c-1 1-2 2.1-3 3.1c-21.4 21.4-47.4 38.1-76.3 48.6zM256 91.9c-11.1 0-20.1 9-20.1 20.1v6c-5.6 1.2-10.9 2.9-15.9 5.1c-15 6.8-27.9 19.4-31.1 37.7c-1.8 10.2-.8 20 3.4 29c4.2 8.8 10.7 15 17.3 19.5c11.6 7.9 26.9 12.5 38.6 16l2.2 .7c13.9 4.2 23.4 7.4 29.3 11.7c2.5 1.8 3.4 3.2 3.7 4c.3 .8 .9 2.6 .2 6.7c-.6 3.5-2.5 6.4-8 8.8c-6.1 2.6-16 3.9-28.8 1.9c-6-1-16.7-4.6-26.2-7.9l0 0 0 0 0 0c-2.2-.7-4.3-1.5-6.4-2.1c-10.5-3.5-21.8 2.2-25.3 12.7s2.2 21.8 12.7 25.3c1.2 .4 2.7 .9 4.4 1.5c7.9 2.7 20.3 6.9 29.8 9.1V304c0 11.1 9 20.1 20.1 20.1s20.1-9 20.1-20.1v-5.5c5.3-1 10.5-2.5 15.4-4.6c15.7-6.7 28.4-19.7 31.6-38.7c1.8-10.4 1-20.3-3-29.4c-3.9-9-10.2-15.6-16.9-20.5c-12.2-8.8-28.3-13.7-40.4-17.4l-.8-.2c-14.2-4.3-23.8-7.3-29.9-11.4c-2.6-1.8-3.4-3-3.6-3.5c-.2-.3-.7-1.6-.1-5c.3-1.9 1.9-5.2 8.2-8.1c6.4-2.9 16.4-4.5 28.6-2.6c4.3 .7 17.9 3.3 21.7 4.3c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-4.4-1.2-14.4-3.2-21-4.4V112c0-11.1-9-20.1-20.1-20.1zM48 352H64c19.5 25.9 44 47.7 72.2 64H64v32H256 448V416H375.8c28.2-16.3 52.8-38.1 72.2-64h16c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V400c0-26.5 21.5-48 48-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-dot\": {\n    \"aliases\": {\n      \"names\": [\"dot-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"1f518\"],\n        \"secondary\": [\"10f192\"]\n      }\n    },\n    \"changes\": [\n      \"4.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bullseye\",\n        \"button\",\n        \"geometric\",\n        \"notification\",\n        \"radio\",\n        \"radio button\",\n        \"target\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f192\",\n    \"label\": \"Circle Dot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-352a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-down\": {\n    \"aliases\": {\n      \"names\": [\"arrow-alt-circle-down\"],\n      \"unicodes\": {\n        \"composite\": [\"f01a\"],\n        \"secondary\": [\"10f358\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow-circle-o-down\", \"download\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f358\",\n    \"label\": \"Circle Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM376.9 294.6L269.8 394.5c-3.8 3.5-8.7 5.5-13.8 5.5s-10.1-2-13.8-5.5L135.1 294.6c-4.5-4.2-7.1-10.1-7.1-16.3c0-12.3 10-22.3 22.3-22.3l57.7 0 0-96c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96 57.7 0c12.3 0 22.3 10 22.3 22.3c0 6.2-2.6 12.1-7.1 16.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM376.9 294.6L269.8 394.5c-3.8 3.5-8.7 5.5-13.8 5.5s-10.1-2-13.8-5.5L135.1 294.6c-4.5-4.2-7.1-10.1-7.1-16.3c0-12.3 10-22.3 22.3-22.3l57.7 0 0-96c0-17.7 14.3-32 32-32l32 0c17.7 0 32 14.3 32 32l0 96 57.7 0c12.3 0 22.3 10 22.3 22.3c0 6.2-2.6 12.1-7.1 16.3z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 464a208 208 0 1 1 0-416 208 208 0 1 1 0 416zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM376.9 294.6c4.5-4.2 7.1-10.1 7.1-16.3c0-12.3-10-22.3-22.3-22.3H304V160c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32v96H150.3C138 256 128 266 128 278.3c0 6.2 2.6 12.1 7.1 16.3l107.1 99.9c3.8 3.5 8.7 5.5 13.8 5.5s10.1-2 13.8-5.5l107.1-99.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 464a208 208 0 1 1 0-416 208 208 0 1 1 0 416zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM376.9 294.6c4.5-4.2 7.1-10.1 7.1-16.3c0-12.3-10-22.3-22.3-22.3H304V160c0-17.7-14.3-32-32-32l-32 0c-17.7 0-32 14.3-32 32v96H150.3C138 256 128 266 128 278.3c0 6.2 2.6 12.1 7.1 16.3l107.1 99.9c3.8 3.5 8.7 5.5 13.8 5.5s10.1-2 13.8-5.5l107.1-99.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-exclamation\": {\n    \"aliases\": {\n      \"names\": [\"exclamation-circle\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f06a\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"affect\",\n        \"alert\",\n        \"damage\",\n        \"danger\",\n        \"error\",\n        \"important\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"problem\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f06a\",\n    \"label\": \"Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-h\": {\n    \"aliases\": {\n      \"names\": [\"hospital-symbol\"],\n      \"unicodes\": {\n        \"composite\": [\"24bd\"],\n        \"secondary\": [\"10f47e\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Circled Latin Capital Letter H\",\n        \"clinic\",\n        \"covid-19\",\n        \"emergency\",\n        \"letter\",\n        \"map\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f47e\",\n    \"label\": \"Circle H\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767248,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM368 152V256 360c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H192l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24v80H320V152c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM368 152V256 360c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H192l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24v80H320V152c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-half-stroke\": {\n    \"aliases\": {\n      \"names\": [\"adjust\"],\n      \"unicodes\": {\n        \"composite\": [\"25d0\"],\n        \"secondary\": [\"10f042\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Circle with Left Half Black\",\n        \"adjust\",\n        \"chart\",\n        \"contrast\",\n        \"dark\",\n        \"fill\",\n        \"light\",\n        \"pie\",\n        \"progress\",\n        \"saturation\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f042\",\n    \"label\": \"Circle Half Stroke\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 256c0-106-86-192-192-192V448c106 0 192-86 192-192zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 256c0-106-86-192-192-192V448c106 0 192-86 192-192zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-info\": {\n    \"aliases\": {\n      \"names\": [\"info-circle\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f05a\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"details\", \"help\", \"information\", \"more\", \"support\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f05a\",\n    \"label\": \"Circle Info\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-left\": {\n    \"aliases\": {\n      \"names\": [\"arrow-alt-circle-left\"],\n      \"unicodes\": {\n        \"composite\": [\"f190\"],\n        \"secondary\": [\"10f359\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow-circle-o-left\", \"back\", \"previous\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f359\",\n    \"label\": \"Circle Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM217.4 376.9L117.5 269.8c-3.5-3.8-5.5-8.7-5.5-13.8s2-10.1 5.5-13.8l99.9-107.1c4.2-4.5 10.1-7.1 16.3-7.1c12.3 0 22.3 10 22.3 22.3l0 57.7 96 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32l-96 0 0 57.7c0 12.3-10 22.3-22.3 22.3c-6.2 0-12.1-2.6-16.3-7.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 256A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM217.4 376.9L117.5 269.8c-3.5-3.8-5.5-8.7-5.5-13.8s2-10.1 5.5-13.8l99.9-107.1c4.2-4.5 10.1-7.1 16.3-7.1c12.3 0 22.3 10 22.3 22.3l0 57.7 96 0c17.7 0 32 14.3 32 32l0 32c0 17.7-14.3 32-32 32l-96 0 0 57.7c0 12.3-10 22.3-22.3 22.3c-6.2 0-12.1-2.6-16.3-7.1z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M48 256a208 208 0 1 1 416 0A208 208 0 1 1 48 256zm464 0A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM217.4 376.9c4.2 4.5 10.1 7.1 16.3 7.1c12.3 0 22.3-10 22.3-22.3V304h96c17.7 0 32-14.3 32-32V240c0-17.7-14.3-32-32-32H256V150.3c0-12.3-10-22.3-22.3-22.3c-6.2 0-12.1 2.6-16.3 7.1L117.5 242.2c-3.5 3.8-5.5 8.7-5.5 13.8s2 10.1 5.5 13.8l99.9 107.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M48 256a208 208 0 1 1 416 0A208 208 0 1 1 48 256zm464 0A256 256 0 1 0 0 256a256 256 0 1 0 512 0zM217.4 376.9c4.2 4.5 10.1 7.1 16.3 7.1c12.3 0 22.3-10 22.3-22.3V304h96c17.7 0 32-14.3 32-32V240c0-17.7-14.3-32-32-32H256V150.3c0-12.3-10-22.3-22.3-22.3c-6.2 0-12.1 2.6-16.3 7.1L117.5 242.2c-3.5 3.8-5.5 8.7-5.5 13.8s2 10.1 5.5 13.8l99.9 107.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-minus\": {\n    \"aliases\": {\n      \"names\": [\"minus-circle\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f056\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"delete\", \"hide\", \"negative\", \"remove\", \"shape\", \"trash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f056\",\n    \"label\": \"Circle Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM184 232H328c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM184 232H328c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-nodes\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cluster\", \"connect\", \"network\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e2\",\n    \"label\": \"Circle Nodes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M418.4 157.9c35.3-8.3 61.6-40 61.6-77.9c0-44.2-35.8-80-80-80c-43.4 0-78.7 34.5-80 77.5L136.2 151.1C121.7 136.8 101.9 128 80 128c-44.2 0-80 35.8-80 80s35.8 80 80 80c12.2 0 23.8-2.7 34.1-7.6L259.7 407.8c-2.4 7.6-3.7 15.8-3.7 24.2c0 44.2 35.8 80 80 80s80-35.8 80-80c0-27.7-14-52.1-35.4-66.4l37.8-207.7zM156.3 232.2c2.2-6.9 3.5-14.2 3.7-21.7l183.8-73.5c3.6 3.5 7.4 6.7 11.6 9.5L317.6 354.1c-5.5 1.3-10.8 3.1-15.8 5.5L156.3 232.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-notch\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1ce\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"circle-o-notch\",\n        \"diameter\",\n        \"dot\",\n        \"ellipse\",\n        \"round\",\n        \"spinner\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1ce\",\n    \"label\": \"Circle Notch\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M222.7 32.1c5 16.9-4.6 34.8-21.5 39.8C121.8 95.6 64 169.1 64 256c0 106 86 192 192 192s192-86 192-192c0-86.9-57.8-160.4-137.1-184.1c-16.9-5-26.6-22.9-21.5-39.8s22.9-26.6 39.8-21.5C434.9 42.1 512 140 512 256c0 141.4-114.6 256-256 256S0 397.4 0 256C0 140 77.1 42.1 182.9 10.6c16.9-5 34.8 4.6 39.8 21.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-pause\": {\n    \"aliases\": {\n      \"names\": [\"pause-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f28c\"],\n        \"secondary\": [\"10f28b\"]\n      }\n    },\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hold\", \"wait\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f28b\",\n    \"label\": \"Circle Pause\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM224 192V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7 14.3-32 32-32s32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM224 192V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0V320c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7 14.3-32 32-32s32 14.3 32 32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm224-72V328c0 13.3-10.7 24-24 24s-24-10.7-24-24V184c0-13.3 10.7-24 24-24s24 10.7 24 24zm112 0V328c0 13.3-10.7 24-24 24s-24-10.7-24-24V184c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm224-72V328c0 13.3-10.7 24-24 24s-24-10.7-24-24V184c0-13.3 10.7-24 24-24s24 10.7 24 24zm112 0V328c0 13.3-10.7 24-24 24s-24-10.7-24-24V184c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-play\": {\n    \"aliases\": {\n      \"names\": [\"play-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f01d\"],\n        \"secondary\": [\"10f144\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"audio\", \"music\", \"playing\", \"sound\", \"start\", \"video\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f144\",\n    \"label\": \"Circle Play\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9V344c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c-7.6 4.2-12.3 12.3-12.3 20.9V344c0 8.7 4.7 16.7 12.3 20.9s16.8 4.1 24.3-.5l144-88c7.1-4.4 11.5-12.1 11.5-20.5s-4.4-16.1-11.5-20.5l-144-88c-7.4-4.5-16.7-4.7-24.3-.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c7.6-4.2 16.8-4.1 24.3 .5l144 88c7.1 4.4 11.5 12.1 11.5 20.5s-4.4 16.1-11.5 20.5l-144 88c-7.4 4.5-16.7 4.7-24.3 .5s-12.3-12.2-12.3-20.9V168c0-8.7 4.7-16.7 12.3-20.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM188.3 147.1c7.6-4.2 16.8-4.1 24.3 .5l144 88c7.1 4.4 11.5 12.1 11.5 20.5s-4.4 16.1-11.5 20.5l-144 88c-7.4 4.5-16.7 4.7-24.3 .5s-12.3-12.2-12.3-20.9V168c0-8.7 4.7-16.7 12.3-20.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-plus\": {\n    \"aliases\": {\n      \"names\": [\"plus-circle\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f055\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"create\", \"expand\", \"new\", \"positive\", \"shape\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f055\",\n    \"label\": \"Circle Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344V280H168c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344V280H168c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-question\": {\n    \"aliases\": {\n      \"names\": [\"question-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f29c\"],\n        \"secondary\": [\"10f059\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"help\", \"information\", \"support\", \"unknown\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f059\",\n    \"label\": \"Circle Question\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM169.8 165.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm169.8-90.7c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm169.8-90.7c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L280 264.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V250.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H222.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-radiation\": {\n    \"aliases\": {\n      \"names\": [\"radiation-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"2622\"],\n        \"secondary\": [\"10f7ba\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.8.2\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"danger\",\n        \"dangerous\",\n        \"deadly\",\n        \"hazard\",\n        \"nuclear\",\n        \"radioactive\",\n        \"sign\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ba\",\n    \"label\": \"Circle Radiation\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 64a192 192 0 1 1 0 384 192 192 0 1 1 0-384zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM200 256c0-20.7 11.3-38.8 28-48.5l-36-62.3c-8.8-15.3-28.7-20.8-42-9c-25.6 22.6-43.9 53.3-50.9 88.1C95.7 241.5 110.3 256 128 256l72 0zm28 48.5l-36 62.4c-8.8 15.3-3.6 35.2 13.1 40.8c16 5.4 33.1 8.3 50.9 8.3s34.9-2.9 50.9-8.3c16.7-5.6 21.9-25.5 13.1-40.8l-36-62.4c-8.2 4.8-17.8 7.5-28 7.5s-19.8-2.7-28-7.5zM312 256l72 0c17.7 0 32.3-14.5 28.8-31.8c-7-34.8-25.3-65.5-50.9-88.1c-13.2-11.7-33.1-6.3-42 9l-36 62.3c16.7 9.7 28 27.8 28 48.5zm-56 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 64a192 192 0 1 1 0 384 192 192 0 1 1 0-384zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM200 256c0-20.7 11.3-38.8 28-48.5l-36-62.3c-8.8-15.3-28.7-20.8-42-9c-25.6 22.6-43.9 53.3-50.9 88.1C95.7 241.5 110.3 256 128 256l72 0zm28 48.5l-36 62.4c-8.8 15.3-3.6 35.2 13.1 40.8c16 5.4 33.1 8.3 50.9 8.3s34.9-2.9 50.9-8.3c16.7-5.6 21.9-25.5 13.1-40.8l-36-62.4c-8.2 4.8-17.8 7.5-28 7.5s-19.8-2.7-28-7.5zM312 256l72 0c17.7 0 32.3-14.5 28.8-31.8c-7-34.8-25.3-65.5-50.9-88.1c-13.2-11.7-33.1-6.3-42 9l-36 62.3c16.7 9.7 28 27.8 28 48.5zm-56 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"circle-right\": {\n    \"aliases\": {\n      \"names\": [\"arrow-alt-circle-right\"],\n      \"unicodes\": {\n        \"composite\": [\"f18e\"],\n        \"secondary\": [\"10f35a\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow-circle-o-right\", \"forward\", \"next\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f35a\",\n    \"label\": \"Circle Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM294.6 135.1l99.9 107.1c3.5 3.8 5.5 8.7 5.5 13.8s-2 10.1-5.5 13.8L294.6 376.9c-4.2 4.5-10.1 7.1-16.3 7.1C266 384 256 374 256 361.7l0-57.7-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-57.7c0-12.3 10-22.3 22.3-22.3c6.2 0 12.1 2.6 16.3 7.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM294.6 135.1l99.9 107.1c3.5 3.8 5.5 8.7 5.5 13.8s-2 10.1-5.5 13.8L294.6 376.9c-4.2 4.5-10.1 7.1-16.3 7.1C266 384 256 374 256 361.7l0-57.7-96 0c-17.7 0-32-14.3-32-32l0-32c0-17.7 14.3-32 32-32l96 0 0-57.7c0-12.3 10-22.3 22.3-22.3c6.2 0 12.1 2.6 16.3 7.1z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM294.6 135.1c-4.2-4.5-10.1-7.1-16.3-7.1C266 128 256 138 256 150.3V208H160c-17.7 0-32 14.3-32 32v32c0 17.7 14.3 32 32 32h96v57.7c0 12.3 10 22.3 22.3 22.3c6.2 0 12.1-2.6 16.3-7.1l99.9-107.1c3.5-3.8 5.5-8.7 5.5-13.8s-2-10.1-5.5-13.8L294.6 135.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM294.6 135.1c-4.2-4.5-10.1-7.1-16.3-7.1C266 128 256 138 256 150.3V208H160c-17.7 0-32 14.3-32 32v32c0 17.7 14.3 32 32 32h96v57.7c0 12.3 10 22.3 22.3 22.3c6.2 0 12.1-2.6 16.3-7.1l99.9-107.1c3.5-3.8 5.5-8.7 5.5-13.8s-2-10.1-5.5-13.8L294.6 135.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-stop\": {\n    \"aliases\": {\n      \"names\": [\"stop-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f28e\"],\n        \"secondary\": [\"10f28d\"]\n      }\n    },\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"block\", \"box\", \"circle\", \"square\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f28d\",\n    \"label\": \"Circle Stop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 160H320c17.7 0 32 14.3 32 32V320c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 160H320c17.7 0 32 14.3 32 32V320c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm192-96H320c17.7 0 32 14.3 32 32V320c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm192-96H320c17.7 0 32 14.3 32 32V320c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-up\": {\n    \"aliases\": {\n      \"names\": [\"arrow-alt-circle-up\"],\n      \"unicodes\": {\n        \"composite\": [\"f01b\"],\n        \"secondary\": [\"10f35b\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow-circle-o-up\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f35b\",\n    \"label\": \"Circle Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM135.1 217.4l107.1-99.9c3.8-3.5 8.7-5.5 13.8-5.5s10.1 2 13.8 5.5l107.1 99.9c4.5 4.2 7.1 10.1 7.1 16.3c0 12.3-10 22.3-22.3 22.3H304v96c0 17.7-14.3 32-32 32H240c-17.7 0-32-14.3-32-32V256H150.3C138 256 128 246 128 233.7c0-6.2 2.6-12.1 7.1-16.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM135.1 217.4l107.1-99.9c3.8-3.5 8.7-5.5 13.8-5.5s10.1 2 13.8 5.5l107.1 99.9c4.5 4.2 7.1 10.1 7.1 16.3c0 12.3-10 22.3-22.3 22.3H304v96c0 17.7-14.3 32-32 32H240c-17.7 0-32-14.3-32-32V256H150.3C138 256 128 246 128 233.7c0-6.2 2.6-12.1 7.1-16.3z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM135.1 217.4c-4.5 4.2-7.1 10.1-7.1 16.3c0 12.3 10 22.3 22.3 22.3H208v96c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V256h57.7c12.3 0 22.3-10 22.3-22.3c0-6.2-2.6-12.1-7.1-16.3L269.8 117.5c-3.8-3.5-8.7-5.5-13.8-5.5s-10.1 2-13.8 5.5L135.1 217.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM135.1 217.4c-4.5 4.2-7.1 10.1-7.1 16.3c0 12.3 10 22.3 22.3 22.3H208v96c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V256h57.7c12.3 0 22.3-10 22.3-22.3c0-6.2-2.6-12.1-7.1-16.3L269.8 117.5c-3.8-3.5-8.7-5.5-13.8-5.5s-10.1 2-13.8 5.5L135.1 217.4z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-user\": {\n    \"aliases\": {\n      \"names\": [\"user-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f2be\"],\n        \"secondary\": [\"10f2bd\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2bd\",\n    \"label\": \"Circle User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M399 384.2C376.9 345.8 335.4 320 288 320H224c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M399 384.2C376.9 345.8 335.4 320 288 320H224c-47.4 0-88.9 25.8-111 64.2c35.2 39.2 86.2 63.8 143 63.8s107.8-24.7 143-63.8zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 16a72 72 0 1 0 0-144 72 72 0 1 0 0 144z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M406.5 399.6C387.4 352.9 341.5 320 288 320H224c-53.5 0-99.4 32.9-118.5 79.6C69.9 362.2 48 311.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 55.7-21.9 106.2-57.5 143.6zm-40.1 32.7C334.4 452.4 296.6 464 256 464s-78.4-11.6-110.5-31.7c7.3-36.7 39.7-64.3 78.5-64.3h64c38.8 0 71.2 27.6 78.5 64.3zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-272a40 40 0 1 1 0-80 40 40 0 1 1 0 80zm-88-40a88 88 0 1 0 176 0 88 88 0 1 0 -176 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M406.5 399.6C387.4 352.9 341.5 320 288 320H224c-53.5 0-99.4 32.9-118.5 79.6C69.9 362.2 48 311.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 55.7-21.9 106.2-57.5 143.6zm-40.1 32.7C334.4 452.4 296.6 464 256 464s-78.4-11.6-110.5-31.7c7.3-36.7 39.7-64.3 78.5-64.3h64c38.8 0 71.2 27.6 78.5 64.3zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-272a40 40 0 1 1 0-80 40 40 0 1 1 0 80zm-88-40a88 88 0 1 0 176 0 88 88 0 1 0 -176 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"circle-xmark\": {\n    \"aliases\": {\n      \"names\": [\"times-circle\", \"xmark-circle\"],\n      \"unicodes\": {\n        \"composite\": [\"f05c\"],\n        \"secondary\": [\"10f057\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"close\",\n        \"cross\",\n        \"destroy\",\n        \"exit\",\n        \"incorrect\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"problem\",\n        \"wrong\",\n        \"x\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f057\",\n    \"label\": \"Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c-9.4 9.4-9.4 24.6 0 33.9l47 47-47 47c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l47-47 47 47c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-47-47 47-47c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-47 47-47-47c-9.4-9.4-24.6-9.4-33.9 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"city\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3d9\"],\n        \"secondary\": [\"10f64f\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buildings\",\n        \"busy\",\n        \"city\",\n        \"cityscape\",\n        \"skyscrapers\",\n        \"urban\",\n        \"windows\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f64f\",\n    \"label\": \"City\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M480 48c0-26.5-21.5-48-48-48H336c-26.5 0-48 21.5-48 48V96H224V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V96H112V24c0-13.3-10.7-24-24-24S64 10.7 64 24V96H48C21.5 96 0 117.5 0 144v96V464c0 26.5 21.5 48 48 48H304h32 96H592c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48H480V48zm96 320v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16zM240 416H208c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16zM128 400c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32zM560 256c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32zM256 176v32c0 8.8-7.2 16-16 16H208c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16zM112 160c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h32zM256 304c0 8.8-7.2 16-16 16H208c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32zM112 320H80c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16zm304-48v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16zM400 64c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V80c0-8.8 7.2-16 16-16h32zm16 112v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M480 48c0-26.5-21.5-48-48-48H336c-26.5 0-48 21.5-48 48V96H224V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V96H112V24c0-13.3-10.7-24-24-24S64 10.7 64 24V96H48C21.5 96 0 117.5 0 144v96V464c0 26.5 21.5 48 48 48H304h32 96H592c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48H480V48zm96 320v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16zM240 416H208c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16zM128 400c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32zM560 256c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32zM256 176v32c0 8.8-7.2 16-16 16H208c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16zM112 160c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h32zM256 304c0 8.8-7.2 16-16 16H208c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32zM112 320H80c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16zm304-48v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16zM400 64c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V80c0-8.8 7.2-16 16-16h32zm16 112v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clapperboard\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"camera\",\n        \"clapper\",\n        \"clapper board\",\n        \"director\",\n        \"film\",\n        \"movie\",\n        \"record\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e131\",\n    \"label\": \"Clapperboard\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 32H361.9l-1 1-127 127h92.1l1-1L453.8 32.3c-1.9-.2-3.8-.3-5.8-.3zm64 128V96c0-15.1-5.3-29.1-14-40l-104 104H512zM294.1 32H201.9l-1 1L73.9 160h92.1l1-1 127-127zM64 32C28.7 32 0 60.7 0 96v64H6.1l1-1 127-127H64zM512 192H0V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 32H361.9l-1 1-127 127h92.1l1-1L453.8 32.3c-1.9-.2-3.8-.3-5.8-.3zm64 128V96c0-15.1-5.3-29.1-14-40l-104 104H512zM294.1 32H201.9l-1 1L73.9 160h92.1l1-1 127-127zM64 32C28.7 32 0 60.7 0 96v64H6.1l1-1 127-127H64zM512 192H0V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clipboard\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4cb\"],\n        \"secondary\": [\"10f328\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clipboar\", \"clipboard\", \"copy\", \"notes\", \"paste\", \"record\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f328\",\n    \"label\": \"Clipboard\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM112 192H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM112 192H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"clipboard-check\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f46c\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accept\",\n        \"agree\",\n        \"confirm\",\n        \"done\",\n        \"ok\",\n        \"select\",\n        \"success\",\n        \"tick\",\n        \"todo\",\n        \"yes\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f46c\",\n    \"label\": \"Clipboard Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM305 273L177 401c-9.4 9.4-24.6 9.4-33.9 0L79 337c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L271 239c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clipboard-list\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f46d\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"completed\",\n        \"done\",\n        \"finished\",\n        \"intinerary\",\n        \"ol\",\n        \"schedule\",\n        \"tick\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f46d\",\n    \"label\": \"Clipboard List\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM72 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104-16H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16zM72 368a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm88 0c0-8.8 7.2-16 16-16H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM72 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104-16H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16zM72 368a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm88 0c0-8.8 7.2-16 16-16H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clipboard-question\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"assistance\", \"interview\", \"query\", \"question\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e3\",\n    \"label\": \"Clipboard Question\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM105.8 229.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L216 328.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V314.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H158.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM160 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM105.8 229.3c7.9-22.3 29.1-37.3 52.8-37.3h58.3c34.9 0 63.1 28.3 63.1 63.1c0 22.6-12.1 43.5-31.7 54.8L216 328.4c-.2 13-10.9 23.6-24 23.6c-13.3 0-24-10.7-24-24V314.5c0-8.6 4.6-16.5 12.1-20.8l44.3-25.4c4.7-2.7 7.6-7.7 7.6-13.1c0-8.4-6.8-15.1-15.1-15.1H158.6c-3.4 0-6.4 2.1-7.5 5.3l-.4 1.2c-4.4 12.5-18.2 19-30.6 14.6s-19-18.2-14.6-30.6l.4-1.2zM160 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clipboard-user\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7f3\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"attendance\", \"record\", \"roster\", \"staff\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7f3\",\n    \"label\": \"Clipboard User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM128 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 432c0-44.2 35.8-80 80-80h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM128 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 432c0-44.2 35.8-80 80-80h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clock\": {\n    \"aliases\": {\n      \"names\": [\"clock-four\"],\n      \"unicodes\": {\n        \"composite\": [\"1f553\"],\n        \"secondary\": [\"10f017\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.12.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"00\",\n        \"4\",\n        \"4:00\",\n        \"clock\",\n        \"date\",\n        \"four\",\n        \"four o’clock\",\n        \"hour\",\n        \"late\",\n        \"minute\",\n        \"o'clock\",\n        \"o’clock\",\n        \"schedule\",\n        \"ticking\",\n        \"time\",\n        \"timer\",\n        \"timestamp\",\n        \"watch\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f017\",\n    \"label\": \"Clock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"clock-rotate-left\": {\n    \"aliases\": {\n      \"names\": [\"history\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1da\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Rewind\",\n        \"clock\",\n        \"reverse\",\n        \"time\",\n        \"time machine\",\n        \"time travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1da\",\n    \"label\": \"Clock Rotate Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"clone\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f24d\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"copy\", \"duplicate\", \"paste\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f24d\",\n    \"label\": \"Clone\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 448H64V224h64V160H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H288c35.3 0 64-28.7 64-64V384H288v64zm-64-96H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H224c-35.3 0-64 28.7-64 64V288c0 35.3 28.7 64 64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 448H64V224h64V160H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H288c35.3 0 64-28.7 64-64V384H288v64zm-64-96H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H224c-35.3 0-64 28.7-64 64V288c0 35.3 28.7 64 64 64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 464H288c8.8 0 16-7.2 16-16V384h48v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h64v48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM224 304H448c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16V288c0 8.8 7.2 16 16 16zm-64-16V64c0-35.3 28.7-64 64-64H448c35.3 0 64 28.7 64 64V288c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 464H288c8.8 0 16-7.2 16-16V384h48v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h64v48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM224 304H448c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H224c-8.8 0-16 7.2-16 16V288c0 8.8 7.2 16 16 16zm-64-16V64c0-35.3 28.7-64 64-64H448c35.3 0 64 28.7 64 64V288c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"closed-captioning\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f20a\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cc\",\n        \"deaf\",\n        \"hearing\",\n        \"subtitle\",\n        \"subtitling\",\n        \"text\",\n        \"video\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f20a\",\n    \"label\": \"Closed Captioning\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H512c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H512c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M512 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H512zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M512 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H512zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 208c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48s21.5-48 48-48zm144 48c0-26.5 21.5-48 48-48c14.2 0 27 6.1 35.8 16c8.8 9.9 24 10.7 33.9 1.9s10.7-24 1.9-33.9c-17.5-19.6-43.1-32-71.5-32c-53 0-96 43-96 96s43 96 96 96c28.4 0 54-12.4 71.5-32c8.8-9.9 8-25-1.9-33.9s-25-8-33.9 1.9c-8.8 9.9-21.6 16-35.8 16c-26.5 0-48-21.5-48-48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"cloud\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2601\"],\n        \"secondary\": [\"10f0c2\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"atmosphere\",\n        \"cloud\",\n        \"fog\",\n        \"overcast\",\n        \"save\",\n        \"upload\",\n        \"weather\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c2\",\n    \"label\": \"Cloud\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 336c0 79.5 64.5 144 144 144H512c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 336c0 79.5 64.5 144 144 144H512c70.7 0 128-57.3 128-128c0-61.9-44-113.6-102.4-125.4c4.1-10.7 6.4-22.4 6.4-34.6c0-53-43-96-96-96c-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32C167.6 32 96 103.6 96 192c0 2.7 .1 5.4 .2 8.1C40.2 219.8 0 273.2 0 336z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-arrow-down\": {\n    \"aliases\": {\n      \"names\": [\"cloud-download\", \"cloud-download-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"f381\"],\n        \"primary\": [\"f381\"],\n        \"secondary\": [\"10f0ed\", \"10f381\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"download\", \"export\", \"save\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ed\",\n    \"label\": \"Cloud Arrow Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-167l80 80c9.4 9.4 24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-39 39V184c0-13.3-10.7-24-24-24s-24 10.7-24 24V318.1l-39-39c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-167l80 80c9.4 9.4 24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-39 39V184c0-13.3-10.7-24-24-24s-24 10.7-24 24V318.1l-39-39c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-arrow-up\": {\n    \"aliases\": {\n      \"names\": [\"cloud-upload\", \"cloud-upload-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"f382\"],\n        \"primary\": [\"f382\"],\n        \"secondary\": [\"10f0ee\", \"10f382\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"import\", \"save\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ee\",\n    \"label\": \"Cloud Arrow Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V392c0 13.3 10.7 24 24 24s24-10.7 24-24V257.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144 480C64.5 480 0 415.5 0 336c0-62.8 40.2-116.2 96.2-135.9c-.1-2.7-.2-5.4-.2-8.1c0-88.4 71.6-160 160-160c59.3 0 111 32.2 138.7 80.2C409.9 102 428.3 96 448 96c53 0 96 43 96 96c0 12.2-2.3 23.8-6.4 34.6C596 238.4 640 290.1 640 352c0 70.7-57.3 128-128 128H144zm79-217c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V392c0 13.3 10.7 24 24 24s24-10.7 24-24V257.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0l-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-bolt\": {\n    \"aliases\": {\n      \"names\": [\"thunderstorm\"],\n      \"unicodes\": {\n        \"composite\": [\"1f329\"],\n        \"secondary\": [\"10f76c\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bolt\",\n        \"cloud\",\n        \"cloud with lightning\",\n        \"lightning\",\n        \"precipitation\",\n        \"rain\",\n        \"storm\",\n        \"weather\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f76c\",\n    \"label\": \"Cloud Bolt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 224c0 53 43 96 96 96h47.2L290 202.5c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L333.7 320H352h64c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm330.1 3.6c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7h70.1L177.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7H281.9l52.4-104.8c3.4-6.7 1.6-14.9-4.2-19.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 224c0 53 43 96 96 96h47.2L290 202.5c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L333.7 320H352h64c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm330.1 3.6c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7h70.1L177.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7H281.9l52.4-104.8c3.4-6.7 1.6-14.9-4.2-19.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-meatball\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f73b\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"FLDSMDFR\", \"food\", \"spaghetti\", \"storm\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f73b\",\n    \"label\": \"Cloud Meatball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 224c0 53 43 96 96 96h44.7c9.5-23.5 32.5-40 59.3-40c2 0 3.9 .1 5.8 .3C217.6 265.5 235.7 256 256 256s38.4 9.5 50.2 24.3c1.9-.2 3.9-.3 5.8-.3c26.9 0 49.9 16.5 59.3 40H416c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm288 96c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 1 .1 2.1 .1 3.1c-.7-.8-1.4-1.6-2.1-2.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3c.7 .7 1.5 1.4 2.3 2.1c-1-.1-2.1-.1-3.1-.1c-17.7 0-32 14.3-32 32s14.3 32 32 32c1 0 2.1-.1 3.1-.1c-.8 .7-1.6 1.3-2.3 2.1c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0c.7-.7 1.4-1.5 2.1-2.3c-.1 1-.1 2.1-.1 3.1c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1-.1-2.1-.1-3.1c.7 .8 1.3 1.6 2.1 2.3c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3c-.7-.7-1.5-1.4-2.3-2.1c1 .1 2.1 .1 3.1 .1c17.7 0 32-14.3 32-32s-14.3-32-32-32c-1 0-2.1 .1-3.1 .1c.8-.7 1.6-1.3 2.3-2.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-.7 .7-1.4 1.5-2.1 2.3c.1-1 .1-2.1 .1-3.1zM48 448a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm416 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 224c0 53 43 96 96 96h44.7c9.5-23.5 32.5-40 59.3-40c2 0 3.9 .1 5.8 .3C217.6 265.5 235.7 256 256 256s38.4 9.5 50.2 24.3c1.9-.2 3.9-.3 5.8-.3c26.9 0 49.9 16.5 59.3 40H416c53 0 96-43 96-96s-43-96-96-96c-.5 0-1.1 0-1.6 0c1.1-5.2 1.6-10.5 1.6-16c0-44.2-35.8-80-80-80c-24.3 0-46.1 10.9-60.8 28C256.5 24.3 219.1 0 176 0C114.1 0 64 50.1 64 112c0 7.1 .7 14.1 1.9 20.8C27.6 145.4 0 181.5 0 224zm288 96c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 1 .1 2.1 .1 3.1c-.7-.8-1.4-1.6-2.1-2.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3c.7 .7 1.5 1.4 2.3 2.1c-1-.1-2.1-.1-3.1-.1c-17.7 0-32 14.3-32 32s14.3 32 32 32c1 0 2.1-.1 3.1-.1c-.8 .7-1.6 1.3-2.3 2.1c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0c.7-.7 1.4-1.5 2.1-2.3c-.1 1-.1 2.1-.1 3.1c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1-.1-2.1-.1-3.1c.7 .8 1.3 1.6 2.1 2.3c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3c-.7-.7-1.5-1.4-2.3-2.1c1 .1 2.1 .1 3.1 .1c17.7 0 32-14.3 32-32s-14.3-32-32-32c-1 0-2.1 .1-3.1 .1c.8-.7 1.6-1.3 2.3-2.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-.7 .7-1.4 1.5-2.1 2.3c.1-1 .1-2.1 .1-3.1zM48 448a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm416 0a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-moon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6c3\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"crescent\", \"evening\", \"lunar\", \"night\", \"partly cloudy\", \"sky\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6c3\",\n    \"label\": \"Cloud Moon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M495.8 0c5.5 0 10.9 .2 16.3 .7c7 .6 12.8 5.7 14.3 12.5s-1.6 13.9-7.7 17.3c-44.4 25.2-74.4 73-74.4 127.8c0 81 65.5 146.6 146.2 146.6c8.6 0 17-.7 25.1-2.1c6.9-1.2 13.8 2.2 17 8.5s1.9 13.8-3.1 18.7c-34.5 33.6-81.7 54.4-133.6 54.4c-9.3 0-18.4-.7-27.4-1.9c-11.2-22.6-29.8-40.9-52.6-51.7c-2.7-58.5-50.3-105.3-109.2-106.7c-1.7-10.4-2.6-21-2.6-31.8C304 86.1 389.8 0 495.8 0zM447.9 431.9c0 44.2-35.8 80-80 80H96c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M495.8 0c5.5 0 10.9 .2 16.3 .7c7 .6 12.8 5.7 14.3 12.5s-1.6 13.9-7.7 17.3c-44.4 25.2-74.4 73-74.4 127.8c0 81 65.5 146.6 146.2 146.6c8.6 0 17-.7 25.1-2.1c6.9-1.2 13.8 2.2 17 8.5s1.9 13.8-3.1 18.7c-34.5 33.6-81.7 54.4-133.6 54.4c-9.3 0-18.4-.7-27.4-1.9c-11.2-22.6-29.8-40.9-52.6-51.7c-2.7-58.5-50.3-105.3-109.2-106.7c-1.7-10.4-2.6-21-2.6-31.8C304 86.1 389.8 0 495.8 0zM447.9 431.9c0 44.2-35.8 80-80 80H96c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-moon-rain\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f73c\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"crescent\",\n        \"evening\",\n        \"lunar\",\n        \"night\",\n        \"partly cloudy\",\n        \"precipitation\",\n        \"rain\",\n        \"sky\",\n        \"storm\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f73c\",\n    \"label\": \"Cloud Moon Rain\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M481.2 0C417 0 363.5 46.5 353.7 107.6c35.4 17.6 60.2 53.3 62.1 95.1c23.2 11 42 29.7 53.1 52.7c4 .4 8.1 .6 12.3 .6c34.9 0 66.7-13.8 89.9-36.1c5.1-4.9 6.4-12.5 3.2-18.7s-10.1-9.7-17-8.6c-4.9 .8-10 1.3-15.2 1.3c-49 0-88.4-39.3-88.4-87.4c0-32.6 18-61.1 44.9-76.1c6.1-3.4 9.3-10.5 7.8-17.4s-7.3-12-14.3-12.6c-3.6-.3-7.3-.5-10.9-.5zM367.9 383.9c44.2 0 80-35.8 80-80c0-39.3-28.4-72.1-65.8-78.7c1.2-5.6 1.9-11.3 1.9-17.2c0-44.2-35.8-80-80-80c-17 0-32.8 5.3-45.8 14.4C241.3 114.6 210.8 96 176 96c-53 0-96 43-96 96l0 1.3c-45.4 7.6-80 47.1-80 94.6c0 53 43 96 96 96H367.9zM85.4 420.1c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M481.2 0C417 0 363.5 46.5 353.7 107.6c35.4 17.6 60.2 53.3 62.1 95.1c23.2 11 42 29.7 53.1 52.7c4 .4 8.1 .6 12.3 .6c34.9 0 66.7-13.8 89.9-36.1c5.1-4.9 6.4-12.5 3.2-18.7s-10.1-9.7-17-8.6c-4.9 .8-10 1.3-15.2 1.3c-49 0-88.4-39.3-88.4-87.4c0-32.6 18-61.1 44.9-76.1c6.1-3.4 9.3-10.5 7.8-17.4s-7.3-12-14.3-12.6c-3.6-.3-7.3-.5-10.9-.5zM367.9 383.9c44.2 0 80-35.8 80-80c0-39.3-28.4-72.1-65.8-78.7c1.2-5.6 1.9-11.3 1.9-17.2c0-44.2-35.8-80-80-80c-17 0-32.8 5.3-45.8 14.4C241.3 114.6 210.8 96 176 96c-53 0-96 43-96 96l0 1.3c-45.4 7.6-80 47.1-80 94.6c0 53 43 96 96 96H367.9zM85.4 420.1c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3zm96 0c-11-7.4-25.9-4.4-33.3 6.7l-32 48c-7.4 11-4.4 25.9 6.7 33.3s25.9 4.4 33.3-6.7l32-48c7.4-11 4.4-25.9-6.7-33.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-rain\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f327\", \"26c6\"],\n        \"secondary\": [\"10f73d\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Rain\",\n        \"cloud\",\n        \"cloud with rain\",\n        \"precipitation\",\n        \"rain\",\n        \"sky\",\n        \"storm\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f73d\",\n    \"label\": \"Cloud Rain\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96H96zm-6.8 52c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3v3c0 26.5-21.5 48-48 48s-48-21.5-48-48v-3c0-8.5 2.1-16.9 6.2-24.3L89.2 372zm160 0c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3v3c0 26.5-21.5 48-48 48s-48-21.5-48-48v-3c0-8.5 2.1-16.9 6.2-24.3L249.2 372zm124.9 64.6L409.2 372c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3v3c0 26.5-21.5 48-48 48s-48-21.5-48-48v-3c0-8.5 2.1-16.9 6.2-24.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96H96zm-6.8 52c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3v3c0 26.5-21.5 48-48 48s-48-21.5-48-48v-3c0-8.5 2.1-16.9 6.2-24.3L89.2 372zm160 0c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3v3c0 26.5-21.5 48-48 48s-48-21.5-48-48v-3c0-8.5 2.1-16.9 6.2-24.3L249.2 372zm124.9 64.6L409.2 372c1.3-2.5 3.9-4 6.8-4s5.4 1.5 6.8 4l35.1 64.6c4.1 7.5 6.2 15.8 6.2 24.3v3c0 26.5-21.5 48-48 48s-48-21.5-48-48v-3c0-8.5 2.1-16.9 6.2-24.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-showers-heavy\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f740\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"precipitation\", \"rain\", \"sky\", \"storm\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f740\",\n    \"label\": \"Cloud Showers Heavy\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96H96zM81.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6S-3.3 490.7 1.9 478.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm120 0c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm244.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6s17.8 19.3 12.6 31.5zM313.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 320c-53 0-96-43-96-96c0-42.5 27.6-78.6 65.9-91.2C64.7 126.1 64 119.1 64 112C64 50.1 114.1 0 176 0c43.1 0 80.5 24.3 99.2 60c14.7-17.1 36.5-28 60.8-28c44.2 0 80 35.8 80 80c0 5.5-.6 10.8-1.6 16c.5 0 1.1 0 1.6 0c53 0 96 43 96 96s-43 96-96 96H96zM81.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6S-3.3 490.7 1.9 478.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm120 0c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6zm244.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6s17.8 19.3 12.6 31.5zM313.5 353.9c12.2 5.2 17.8 19.3 12.6 31.5l-48 112c-5.2 12.2-19.3 17.8-31.5 12.6s-17.8-19.3-12.6-31.5l48-112c5.2-12.2 19.3-17.8 31.5-12.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-showers-water\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cloud\", \"deluge\", \"flood\", \"rain\", \"storm\", \"surge\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e4\",\n    \"label\": \"Cloud Showers Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M224 0c38.6 0 71.9 22.8 87.2 55.7C325.7 41.1 345.8 32 368 32c38.7 0 71 27.5 78.4 64H448c35.3 0 64 28.7 64 64s-28.7 64-64 64H128c-35.3 0-64-28.7-64-64s28.7-64 64-64c0-53 43-96 96-96zM140.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm327.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM252.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm103.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M224 0c38.6 0 71.9 22.8 87.2 55.7C325.7 41.1 345.8 32 368 32c38.7 0 71 27.5 78.4 64H448c35.3 0 64 28.7 64 64s-28.7 64-64 64H128c-35.3 0-64-28.7-64-64s28.7-64 64-64c0-53 43-96 96-96zM140.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm327.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM252.6 292.3l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2s15.1 21.6 8.2 32.9zm103.8-32.9c11.4 6.8 15 21.6 8.2 32.9l-48 80c-6.8 11.4-21.6 15-32.9 8.2s-15.1-21.6-8.2-32.9l48-80c6.8-11.4 21.6-15.1 32.9-8.2zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-sun\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26c5\"],\n        \"secondary\": [\"10f6c4\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"clear\",\n        \"cloud\",\n        \"day\",\n        \"daytime\",\n        \"fall\",\n        \"outdoors\",\n        \"overcast\",\n        \"partly cloudy\",\n        \"sun\",\n        \"sun behind cloud\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6c4\",\n    \"label\": \"Cloud Sun\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l14.1 84.7 84.7 14.1c5.4 .9 10 4.5 12.1 9.6s1.5 10.9-1.6 15.4l-38.5 55c-2.2-.1-4.4-.2-6.7-.2c-23.3 0-45.1 6.2-64 17.1l0-1.1c0-53-43-96-96-96s-96 43-96 96s43 96 96 96c8.1 0 15.9-1 23.4-2.9c-36.6 18.1-63.3 53.1-69.8 94.9l-24.4 17c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM144 208a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM639.9 431.9c0 44.2-35.8 80-80 80H288c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l14.1 84.7 84.7 14.1c5.4 .9 10 4.5 12.1 9.6s1.5 10.9-1.6 15.4l-38.5 55c-2.2-.1-4.4-.2-6.7-.2c-23.3 0-45.1 6.2-64 17.1l0-1.1c0-53-43-96-96-96s-96 43-96 96s43 96 96 96c8.1 0 15.9-1 23.4-2.9c-36.6 18.1-63.3 53.1-69.8 94.9l-24.4 17c-4.5 3.2-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM144 208a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM639.9 431.9c0 44.2-35.8 80-80 80H288c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloud-sun-rain\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f326\"],\n        \"secondary\": [\"10f743\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cloud\",\n        \"day\",\n        \"overcast\",\n        \"precipitation\",\n        \"rain\",\n        \"storm\",\n        \"summer\",\n        \"sun\",\n        \"sun behind rain cloud\",\n        \"sunshower\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f743\",\n    \"label\": \"Cloud Sun Rain\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l10.4 62.4c-23.3 10.8-42.9 28.4-56 50.3c-14.6-9-31.8-14.1-50.2-14.1c-53 0-96 43-96 96c0 35.5 19.3 66.6 48 83.2c.8 31.8 13.2 60.7 33.1 82.7l-56 39.2c-4.5 3.1-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM208 144c13.8 0 26.7 4.4 37.1 11.9c-1.2 4.1-2.2 8.3-3 12.6c-37.9 14.6-67.2 46.6-77.8 86.4C151.8 243.1 144 226.5 144 208c0-35.3 28.7-64 64-64zm69.4 276c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm74.5-116.1c0 44.2-35.8 80-80 80H288c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M294.2 1.2c5.1 2.1 8.7 6.7 9.6 12.1l10.4 62.4c-23.3 10.8-42.9 28.4-56 50.3c-14.6-9-31.8-14.1-50.2-14.1c-53 0-96 43-96 96c0 35.5 19.3 66.6 48 83.2c.8 31.8 13.2 60.7 33.1 82.7l-56 39.2c-4.5 3.1-10.3 3.8-15.4 1.6s-8.7-6.7-9.6-12.1L98.1 317.9 13.4 303.8c-5.4-.9-10-4.5-12.1-9.6s-1.5-10.9 1.6-15.4L52.5 208 2.9 137.2c-3.2-4.5-3.8-10.3-1.6-15.4s6.7-8.7 12.1-9.6L98.1 98.1l14.1-84.7c.9-5.4 4.5-10 9.6-12.1s10.9-1.5 15.4 1.6L208 52.5 278.8 2.9c4.5-3.2 10.3-3.8 15.4-1.6zM208 144c13.8 0 26.7 4.4 37.1 11.9c-1.2 4.1-2.2 8.3-3 12.6c-37.9 14.6-67.2 46.6-77.8 86.4C151.8 243.1 144 226.5 144 208c0-35.3 28.7-64 64-64zm69.4 276c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm96 0c11 7.4 14 22.3 6.7 33.3l-32 48c-7.4 11-22.3 14-33.3 6.7s-14-22.3-6.7-33.3l32-48c7.4-11 22.3-14 33.3-6.7zm74.5-116.1c0 44.2-35.8 80-80 80H288c-53 0-96-43-96-96c0-47.6 34.6-87 80-94.6l0-1.3c0-53 43-96 96-96c34.9 0 65.4 18.6 82.2 46.4c13-9.1 28.8-14.4 45.8-14.4c44.2 0 80 35.8 80 80c0 5.9-.6 11.7-1.9 17.2c37.4 6.7 65.8 39.4 65.8 78.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cloudflare\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e07d\",\n    \"label\": \"Cloudflare\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M407.906,319.913l-230.8-2.928a4.58,4.58,0,0,1-3.632-1.926,4.648,4.648,0,0,1-.494-4.147,6.143,6.143,0,0,1,5.361-4.076L411.281,303.9c27.631-1.26,57.546-23.574,68.022-50.784l13.286-34.542a7.944,7.944,0,0,0,.524-2.936,7.735,7.735,0,0,0-.164-1.631A151.91,151.91,0,0,0,201.257,198.4,68.12,68.12,0,0,0,94.2,269.59C41.924,271.106,0,313.728,0,366.12a96.054,96.054,0,0,0,1.029,13.958,4.508,4.508,0,0,0,4.445,3.871l426.1.051c.043,0,.08-.019.122-.02a5.606,5.606,0,0,0,5.271-4l3.273-11.265c3.9-13.4,2.448-25.8-4.1-34.9C430.124,325.423,420.09,320.487,407.906,319.913ZM513.856,221.1c-2.141,0-4.271.062-6.391.164a3.771,3.771,0,0,0-3.324,2.653l-9.077,31.193c-3.9,13.4-2.449,25.786,4.1,34.89,6.02,8.4,16.054,13.323,28.238,13.9l49.2,2.939a4.491,4.491,0,0,1,3.51,1.894,4.64,4.64,0,0,1,.514,4.169,6.153,6.153,0,0,1-5.351,4.075l-51.125,2.939c-27.754,1.27-57.669,23.574-68.145,50.784l-3.695,9.606a2.716,2.716,0,0,0,2.427,3.68c.046,0,.088.017.136.017h175.91a4.69,4.69,0,0,0,4.539-3.37,124.807,124.807,0,0,0,4.682-34C640,277.3,583.524,221.1,513.856,221.1Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M407.906,319.913l-230.8-2.928a4.58,4.58,0,0,1-3.632-1.926,4.648,4.648,0,0,1-.494-4.147,6.143,6.143,0,0,1,5.361-4.076L411.281,303.9c27.631-1.26,57.546-23.574,68.022-50.784l13.286-34.542a7.944,7.944,0,0,0,.524-2.936,7.735,7.735,0,0,0-.164-1.631A151.91,151.91,0,0,0,201.257,198.4,68.12,68.12,0,0,0,94.2,269.59C41.924,271.106,0,313.728,0,366.12a96.054,96.054,0,0,0,1.029,13.958,4.508,4.508,0,0,0,4.445,3.871l426.1.051c.043,0,.08-.019.122-.02a5.606,5.606,0,0,0,5.271-4l3.273-11.265c3.9-13.4,2.448-25.8-4.1-34.9C430.124,325.423,420.09,320.487,407.906,319.913ZM513.856,221.1c-2.141,0-4.271.062-6.391.164a3.771,3.771,0,0,0-3.324,2.653l-9.077,31.193c-3.9,13.4-2.449,25.786,4.1,34.89,6.02,8.4,16.054,13.323,28.238,13.9l49.2,2.939a4.491,4.491,0,0,1,3.51,1.894,4.64,4.64,0,0,1,.514,4.169,6.153,6.153,0,0,1-5.351,4.075l-51.125,2.939c-27.754,1.27-57.669,23.574-68.145,50.784l-3.695,9.606a2.716,2.716,0,0,0,2.427,3.68c.046,0,.088.017.136.017h175.91a4.69,4.69,0,0,0,4.539-3.37,124.807,124.807,0,0,0,4.682-34C640,277.3,583.524,221.1,513.856,221.1Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cloudscale\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f383\",\n    \"label\": \"cloudscale.ch\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cloudsmith\": {\n    \"changes\": [\"5.0.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f384\",\n    \"label\": \"Cloudsmith\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1684948301,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 227.6v56.9L284.4 512H227.6L0 284.4V227.6L227.6 0h56.9L512 227.6zm-256 162a133.6 133.6 0 1 0 0-267.1 133.6 133.6 0 1 0 0 267.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 227.6v56.9L284.4 512H227.6L0 284.4V227.6L227.6 0h56.9L512 227.6zm-256 162a133.6 133.6 0 1 0 0-267.1 133.6 133.6 0 1 0 0 267.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cloudversify\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f385\",\n    \"label\": \"cloudversify\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 616 512\\\"><path d=\\\"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 616, 512],\n        \"width\": 616,\n        \"height\": 512,\n        \"path\": \"M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"clover\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"4\",\n        \"charm\",\n        \"clover\",\n        \"four\",\n        \"four leaf clover\",\n        \"four-leaf clover\",\n        \"leaf\",\n        \"leprechaun\",\n        \"luck\",\n        \"lucky\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e139\",\n    \"label\": \"Clover\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M173.3 32C139.4 32 112 59.4 112 93.3v4.9c0 12 3.3 23.7 9.4 34l18.8 31.3c1.1 1.8 1.2 3.1 1 4.2c-.2 1.2-.8 2.5-2 3.6s-2.4 1.8-3.6 2c-1 .2-2.4 .1-4.2-1l-31.3-18.8c-10.3-6.2-22-9.4-34-9.4H61.3C27.4 144 0 171.4 0 205.3c0 16.2 6.5 31.8 17.9 43.3l1.2 1.2c3.4 3.4 3.4 9 0 12.4l-1.2 1.2C6.5 274.9 0 290.5 0 306.7C0 340.6 27.4 368 61.3 368h4.9c12 0 23.7-3.3 34-9.4l31.3-18.8c1.8-1.1 3.1-1.2 4.2-1c1.2 .2 2.5 .8 3.6 2s1.8 2.4 2 3.6c.2 1 .1 2.4-1 4.2l-18.8 31.3c-6.2 10.3-9.4 22-9.4 34v4.9c0 33.8 27.4 61.3 61.3 61.3c16.2 0 31.8-6.5 43.3-17.9l1.2-1.2c3.4-3.4 9-3.4 12.4 0l1.2 1.2c11.5 11.5 27.1 17.9 43.3 17.9c33.8 0 61.3-27.4 61.3-61.3v-4.9c0-12-3.3-23.7-9.4-34l-18.8-31.3c-1.1-1.8-1.2-3.1-1-4.2c.2-1.2 .8-2.5 2-3.6s2.4-1.8 3.6-2c1-.2 2.4-.1 4.2 1l31.3 18.8c10.3 6.2 22 9.4 34 9.4h4.9c33.8 0 61.3-27.4 61.3-61.3c0-16.2-6.5-31.8-17.9-43.3l-1.2-1.2c-3.4-3.4-3.4-9 0-12.4l1.2-1.2c11.5-11.5 17.9-27.1 17.9-43.3c0-33.8-27.4-61.3-61.3-61.3h-4.9c-12 0-23.7 3.3-34 9.4l-31.3 18.8c-1.8 1.1-3.1 1.2-4.2 1c-1.2-.2-2.5-.8-3.6-2s-1.8-2.4-2-3.6c-.2-1-.1-2.4 1-4.2l18.8-31.3c6.2-10.3 9.4-22 9.4-34V93.3C336 59.4 308.6 32 274.7 32c-16.2 0-31.8 6.5-43.3 17.9l-1.2 1.2c-3.4 3.4-9 3.4-12.4 0l-1.2-1.2C205.1 38.5 189.5 32 173.3 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M173.3 32C139.4 32 112 59.4 112 93.3v4.9c0 12 3.3 23.7 9.4 34l18.8 31.3c1.1 1.8 1.2 3.1 1 4.2c-.2 1.2-.8 2.5-2 3.6s-2.4 1.8-3.6 2c-1 .2-2.4 .1-4.2-1l-31.3-18.8c-10.3-6.2-22-9.4-34-9.4H61.3C27.4 144 0 171.4 0 205.3c0 16.2 6.5 31.8 17.9 43.3l1.2 1.2c3.4 3.4 3.4 9 0 12.4l-1.2 1.2C6.5 274.9 0 290.5 0 306.7C0 340.6 27.4 368 61.3 368h4.9c12 0 23.7-3.3 34-9.4l31.3-18.8c1.8-1.1 3.1-1.2 4.2-1c1.2 .2 2.5 .8 3.6 2s1.8 2.4 2 3.6c.2 1 .1 2.4-1 4.2l-18.8 31.3c-6.2 10.3-9.4 22-9.4 34v4.9c0 33.8 27.4 61.3 61.3 61.3c16.2 0 31.8-6.5 43.3-17.9l1.2-1.2c3.4-3.4 9-3.4 12.4 0l1.2 1.2c11.5 11.5 27.1 17.9 43.3 17.9c33.8 0 61.3-27.4 61.3-61.3v-4.9c0-12-3.3-23.7-9.4-34l-18.8-31.3c-1.1-1.8-1.2-3.1-1-4.2c.2-1.2 .8-2.5 2-3.6s2.4-1.8 3.6-2c1-.2 2.4-.1 4.2 1l31.3 18.8c10.3 6.2 22 9.4 34 9.4h4.9c33.8 0 61.3-27.4 61.3-61.3c0-16.2-6.5-31.8-17.9-43.3l-1.2-1.2c-3.4-3.4-3.4-9 0-12.4l1.2-1.2c11.5-11.5 17.9-27.1 17.9-43.3c0-33.8-27.4-61.3-61.3-61.3h-4.9c-12 0-23.7 3.3-34 9.4l-31.3 18.8c-1.8 1.1-3.1 1.2-4.2 1c-1.2-.2-2.5-.8-3.6-2s-1.8-2.4-2-3.6c-.2-1-.1-2.4 1-4.2l18.8-31.3c6.2-10.3 9.4-22 9.4-34V93.3C336 59.4 308.6 32 274.7 32c-16.2 0-31.8 6.5-43.3 17.9l-1.2 1.2c-3.4 3.4-9 3.4-12.4 0l-1.2-1.2C205.1 38.5 189.5 32 173.3 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cmplid\": {\n    \"changes\": [\"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e360\",\n    \"label\": \"Cmplid\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M226.119,388.165a3.816,3.816,0,0,0-2.294-3.5,3.946,3.946,0,0,0-1.629-.385L72.6,384.3a19.243,19.243,0,0,1-17.924-26.025L81.585,255.692a35.72,35.72,0,0,1,32.373-26H262.525a7.07,7.07,0,0,0,6.392-5.194l10.769-41.131a3.849,3.849,0,0,0-2.237-4.937,3.755,3.755,0,0,0-1.377-.261c-.063,0-.126,0-.189.005H127.38a106.8,106.8,0,0,0-96.99,77.1L3.483,358.824A57.469,57.469,0,0,0,57.314,436q1.43,0,2.86-.072H208.742a7.131,7.131,0,0,0,6.391-5.193L225.839,389.6A3.82,3.82,0,0,0,226.119,388.165ZM306.658,81.2a3.861,3.861,0,0,0,.251-1.367A3.813,3.813,0,0,0,303.079,76c-.064,0-.128,0-.192,0h-41A7.034,7.034,0,0,0,255.5,81.2l-21.347,80.915h51.131ZM180.364,368.249H231.5L263.452,245.69H212.321ZM511.853,79.723a3.809,3.809,0,0,0-3.8-3.661c-.058,0-.137,0-.23.007h-41a7.1,7.1,0,0,0-6.584,5.129L368.91,430.634a3.54,3.54,0,0,0-.262,1.335,3.873,3.873,0,0,0,3.864,3.863c.056,0,.112,0,.169,0h41a7.068,7.068,0,0,0,6.392-5.193L511.533,81.2A3.624,3.624,0,0,0,511.853,79.723ZM324.649,384.47h-41a7.2,7.2,0,0,0-6.392,5.194L266.52,430.8a3.662,3.662,0,0,0-.268,1.374A3.783,3.783,0,0,0,270.023,436c.06,0,.166,0,.3-.012h40.905a7.036,7.036,0,0,0,6.391-5.193l10.769-41.131a3.75,3.75,0,0,0-3.445-5.208c-.108,0-.217,0-.326.014Zm311.324-308.4h-41a7.066,7.066,0,0,0-6.392,5.129l-91.46,349.436a4.073,4.073,0,0,0-.229,1.347,3.872,3.872,0,0,0,3.863,3.851c.056,0,.112,0,.169,0h40.968a7.1,7.1,0,0,0,6.392-5.193L639.68,81.2a3.624,3.624,0,0,0,.32-1.475,3.841,3.841,0,0,0-3.821-3.564c-.068,0-.137,0-.206.006ZM371.562,225.236l10.8-41.1a4.369,4.369,0,0,0,.227-1.388,3.869,3.869,0,0,0-3.861-3.842c-.057,0-.113,0-.169,0h-41.1a7.292,7.292,0,0,0-6.391,5.226l-10.834,41.1a4.417,4.417,0,0,0-.26,1.493c0,.069,0,.138,0,.206a3.776,3.776,0,0,0,3.757,3.507c.076,0,.18,0,.3-.012h41.129A7.034,7.034,0,0,0,371.562,225.236Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M226.119,388.165a3.816,3.816,0,0,0-2.294-3.5,3.946,3.946,0,0,0-1.629-.385L72.6,384.3a19.243,19.243,0,0,1-17.924-26.025L81.585,255.692a35.72,35.72,0,0,1,32.373-26H262.525a7.07,7.07,0,0,0,6.392-5.194l10.769-41.131a3.849,3.849,0,0,0-2.237-4.937,3.755,3.755,0,0,0-1.377-.261c-.063,0-.126,0-.189.005H127.38a106.8,106.8,0,0,0-96.99,77.1L3.483,358.824A57.469,57.469,0,0,0,57.314,436q1.43,0,2.86-.072H208.742a7.131,7.131,0,0,0,6.391-5.193L225.839,389.6A3.82,3.82,0,0,0,226.119,388.165ZM306.658,81.2a3.861,3.861,0,0,0,.251-1.367A3.813,3.813,0,0,0,303.079,76c-.064,0-.128,0-.192,0h-41A7.034,7.034,0,0,0,255.5,81.2l-21.347,80.915h51.131ZM180.364,368.249H231.5L263.452,245.69H212.321ZM511.853,79.723a3.809,3.809,0,0,0-3.8-3.661c-.058,0-.137,0-.23.007h-41a7.1,7.1,0,0,0-6.584,5.129L368.91,430.634a3.54,3.54,0,0,0-.262,1.335,3.873,3.873,0,0,0,3.864,3.863c.056,0,.112,0,.169,0h41a7.068,7.068,0,0,0,6.392-5.193L511.533,81.2A3.624,3.624,0,0,0,511.853,79.723ZM324.649,384.47h-41a7.2,7.2,0,0,0-6.392,5.194L266.52,430.8a3.662,3.662,0,0,0-.268,1.374A3.783,3.783,0,0,0,270.023,436c.06,0,.166,0,.3-.012h40.905a7.036,7.036,0,0,0,6.391-5.193l10.769-41.131a3.75,3.75,0,0,0-3.445-5.208c-.108,0-.217,0-.326.014Zm311.324-308.4h-41a7.066,7.066,0,0,0-6.392,5.129l-91.46,349.436a4.073,4.073,0,0,0-.229,1.347,3.872,3.872,0,0,0,3.863,3.851c.056,0,.112,0,.169,0h40.968a7.1,7.1,0,0,0,6.392-5.193L639.68,81.2a3.624,3.624,0,0,0,.32-1.475,3.841,3.841,0,0,0-3.821-3.564c-.068,0-.137,0-.206.006ZM371.562,225.236l10.8-41.1a4.369,4.369,0,0,0,.227-1.388,3.869,3.869,0,0,0-3.861-3.842c-.057,0-.113,0-.169,0h-41.1a7.292,7.292,0,0,0-6.391,5.226l-10.834,41.1a4.417,4.417,0,0,0-.26,1.493c0,.069,0,.138,0,.206a3.776,3.776,0,0,0,3.757,3.507c.076,0,.18,0,.3-.012h41.129A7.034,7.034,0,0,0,371.562,225.236Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"code\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f121\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"brackets\", \"code\", \"development\", \"html\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f121\",\n    \"label\": \"Code\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"code-branch\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f126\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"branch\", \"git\", \"github\", \"rebase\", \"svn\", \"vcs\", \"version\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f126\",\n    \"label\": \"Code Branch\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3v87.8c18.8-10.9 40.7-17.1 64-17.1h96c35.3 0 64-28.7 64-64v-6.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V160c0 70.7-57.3 128-128 128H176c-35.3 0-64 28.7-64 64v6.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V352 153.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3v87.8c18.8-10.9 40.7-17.1 64-17.1h96c35.3 0 64-28.7 64-64v-6.7C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V160c0 70.7-57.3 128-128 128H176c-35.3 0-64 28.7-64 64v6.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V352 153.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm232 0a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM80 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"code-commit\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f386\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.1.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"commit\",\n        \"git\",\n        \"github\",\n        \"hash\",\n        \"rebase\",\n        \"svn\",\n        \"vcs\",\n        \"version\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f386\",\n    \"label\": \"Code Commit\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm156.8-48C462 361 397.4 416 320 416s-142-55-156.8-128H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H163.2C178 151 242.6 96 320 96s142 55 156.8 128H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H476.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"code-compare\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"compare\", \"git\", \"github\", \"svn\", \"version\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e13a\",\n    \"label\": \"Code Compare\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M320 488c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1s14.2 12.4 14.2 21.9v40h16c35.3 0 64-28.7 64-64V153.3C371.7 141 352 112.8 352 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V320c0 70.7-57.3 128-128 128H320v40zM456 80a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 24c0-9.5 5.6-18.1 14.2-21.9s18.8-2.3 25.8 4.1l80 72c5.1 4.6 7.9 11 7.9 17.8s-2.9 13.3-7.9 17.8l-80 72c-7 6.3-17.2 7.9-25.8 4.1s-14.2-12.4-14.2-21.9V128H176c-35.3 0-64 28.7-64 64V358.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V192c0-70.7 57.3-128 128-128h16V24zM56 432a24 24 0 1 0 48 0 24 24 0 1 0 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M320 488c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1s14.2 12.4 14.2 21.9v40h16c35.3 0 64-28.7 64-64V153.3C371.7 141 352 112.8 352 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V320c0 70.7-57.3 128-128 128H320v40zM456 80a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 24c0-9.5 5.6-18.1 14.2-21.9s18.8-2.3 25.8 4.1l80 72c5.1 4.6 7.9 11 7.9 17.8s-2.9 13.3-7.9 17.8l-80 72c-7 6.3-17.2 7.9-25.8 4.1s-14.2-12.4-14.2-21.9V128H176c-35.3 0-64 28.7-64 64V358.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V192c0-70.7 57.3-128 128-128h16V24zM56 432a24 24 0 1 0 48 0 24 24 0 1 0 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"code-fork\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"fork\", \"git\", \"github\", \"svn\", \"version\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e13b\",\n    \"label\": \"Code Fork\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3V192c0 17.7 14.3 32 32 32H304c17.7 0 32-14.3 32-32V153.3C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V192c0 53-43 96-96 96H256v70.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V288H144c-53 0-96-43-96-96V153.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm208 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M80 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm80-24c0 32.8-19.7 61-48 73.3V192c0 17.7 14.3 32 32 32H304c17.7 0 32-14.3 32-32V153.3C307.7 141 288 112.8 288 80c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V192c0 53-43 96-96 96H256v70.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V288H144c-53 0-96-43-96-96V153.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80zm208 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM248 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"code-merge\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f387\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"git\",\n        \"github\",\n        \"merge\",\n        \"pr\",\n        \"rebase\",\n        \"svn\",\n        \"vcs\",\n        \"version\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f387\",\n    \"label\": \"Code Merge\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M80 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32.4 97.2c28-12.4 47.6-40.5 47.6-73.2c0-44.2-35.8-80-80-80S0 35.8 0 80c0 32.8 19.7 61 48 73.3V358.7C19.7 371 0 399.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3V272c26.7 20.1 60 32 96 32h86.7c12.3 28.3 40.5 48 73.3 48c44.2 0 80-35.8 80-80s-35.8-80-80-80c-32.8 0-61 19.7-73.3 48H208c-49.9 0-91-38.1-95.6-86.8zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM344 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M80 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32.4 97.2c28-12.4 47.6-40.5 47.6-73.2c0-44.2-35.8-80-80-80S0 35.8 0 80c0 32.8 19.7 61 48 73.3V358.7C19.7 371 0 399.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3V272c26.7 20.1 60 32 96 32h86.7c12.3 28.3 40.5 48 73.3 48c44.2 0 80-35.8 80-80s-35.8-80-80-80c-32.8 0-61 19.7-73.3 48H208c-49.9 0-91-38.1-95.6-86.8zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM344 272a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"code-pull-request\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"git\", \"github\", \"pr\", \"svn\", \"version\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e13c\",\n    \"label\": \"Code Pull Request\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M305.8 2.1C314.4 5.9 320 14.5 320 24V64h16c70.7 0 128 57.3 128 128V358.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V192c0-35.3-28.7-64-64-64H320v40c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1zM104 80A24 24 0 1 0 56 80a24 24 0 1 0 48 0zm8 73.3V358.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V153.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80c0 32.8-19.7 61-48 73.3zM104 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm328 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M305.8 2.1C314.4 5.9 320 14.5 320 24V64h16c70.7 0 128 57.3 128 128V358.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V192c0-35.3-28.7-64-64-64H320v40c0 9.5-5.6 18.1-14.2 21.9s-18.8 2.3-25.8-4.1l-80-72c-5.1-4.6-7.9-11-7.9-17.8s2.9-13.3 7.9-17.8l80-72c7-6.3 17.2-7.9 25.8-4.1zM104 80A24 24 0 1 0 56 80a24 24 0 1 0 48 0zm8 73.3V358.7c28.3 12.3 48 40.5 48 73.3c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-32.8 19.7-61 48-73.3V153.3C19.7 141 0 112.8 0 80C0 35.8 35.8 0 80 0s80 35.8 80 80c0 32.8-19.7 61-48 73.3zM104 432a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm328 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"codepen\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1cb\",\n    \"label\": \"Codepen\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"codiepie\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f284\",\n    \"label\": \"Codie Pie\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 472 512\\\"><path d=\\\"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 472, 512],\n        \"width\": 472,\n        \"height\": 512,\n        \"path\": \"M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"coins\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f51e\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"currency\", \"dime\", \"financial\", \"gold\", \"money\", \"penny\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f51e\",\n    \"label\": \"Coins\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 80c0 18-14.3 34.6-38.4 48c-29.1 16.1-72.5 27.5-122.3 30.9c-3.7-1.8-7.4-3.5-11.3-5C300.6 137.4 248.2 128 192 128c-8.3 0-16.4 .2-24.5 .6l-1.1-.6C142.3 114.6 128 98 128 80c0-44.2 86-80 192-80S512 35.8 512 80zM160.7 161.1c10.2-.7 20.7-1.1 31.3-1.1c62.2 0 117.4 12.3 152.5 31.4C369.3 204.9 384 221.7 384 240c0 4-.7 7.9-2.1 11.7c-4.6 13.2-17 25.3-35 35.5c0 0 0 0 0 0c-.1 .1-.3 .1-.4 .2l0 0 0 0c-.3 .2-.6 .3-.9 .5c-35 19.4-90.8 32-153.6 32c-59.6 0-112.9-11.3-148.2-29.1c-1.9-.9-3.7-1.9-5.5-2.9C14.3 274.6 0 258 0 240c0-34.8 53.4-64.5 128-75.4c10.5-1.5 21.4-2.7 32.7-3.5zM416 240c0-21.9-10.6-39.9-24.1-53.4c28.3-4.4 54.2-11.4 76.2-20.5c16.3-6.8 31.5-15.2 43.9-25.5V176c0 19.3-16.5 37.1-43.8 50.9c-14.6 7.4-32.4 13.7-52.4 18.5c.1-1.8 .2-3.5 .2-5.3zm-32 96c0 18-14.3 34.6-38.4 48c-1.8 1-3.6 1.9-5.5 2.9C304.9 404.7 251.6 416 192 416c-62.8 0-118.6-12.6-153.6-32C14.3 370.6 0 354 0 336V300.6c12.5 10.3 27.6 18.7 43.9 25.5C83.4 342.6 135.8 352 192 352s108.6-9.4 148.1-25.9c7.8-3.2 15.3-6.9 22.4-10.9c6.1-3.4 11.8-7.2 17.2-11.2c1.5-1.1 2.9-2.3 4.3-3.4V304v5.7V336zm32 0V304 278.1c19-4.2 36.5-9.5 52.1-16c16.3-6.8 31.5-15.2 43.9-25.5V272c0 10.5-5 21-14.9 30.9c-16.3 16.3-45 29.7-81.3 38.4c.1-1.7 .2-3.5 .2-5.3zM192 448c56.2 0 108.6-9.4 148.1-25.9c16.3-6.8 31.5-15.2 43.9-25.5V432c0 44.2-86 80-192 80S0 476.2 0 432V396.6c12.5 10.3 27.6 18.7 43.9 25.5C83.4 438.6 135.8 448 192 448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 80c0 18-14.3 34.6-38.4 48c-29.1 16.1-72.5 27.5-122.3 30.9c-3.7-1.8-7.4-3.5-11.3-5C300.6 137.4 248.2 128 192 128c-8.3 0-16.4 .2-24.5 .6l-1.1-.6C142.3 114.6 128 98 128 80c0-44.2 86-80 192-80S512 35.8 512 80zM160.7 161.1c10.2-.7 20.7-1.1 31.3-1.1c62.2 0 117.4 12.3 152.5 31.4C369.3 204.9 384 221.7 384 240c0 4-.7 7.9-2.1 11.7c-4.6 13.2-17 25.3-35 35.5c0 0 0 0 0 0c-.1 .1-.3 .1-.4 .2l0 0 0 0c-.3 .2-.6 .3-.9 .5c-35 19.4-90.8 32-153.6 32c-59.6 0-112.9-11.3-148.2-29.1c-1.9-.9-3.7-1.9-5.5-2.9C14.3 274.6 0 258 0 240c0-34.8 53.4-64.5 128-75.4c10.5-1.5 21.4-2.7 32.7-3.5zM416 240c0-21.9-10.6-39.9-24.1-53.4c28.3-4.4 54.2-11.4 76.2-20.5c16.3-6.8 31.5-15.2 43.9-25.5V176c0 19.3-16.5 37.1-43.8 50.9c-14.6 7.4-32.4 13.7-52.4 18.5c.1-1.8 .2-3.5 .2-5.3zm-32 96c0 18-14.3 34.6-38.4 48c-1.8 1-3.6 1.9-5.5 2.9C304.9 404.7 251.6 416 192 416c-62.8 0-118.6-12.6-153.6-32C14.3 370.6 0 354 0 336V300.6c12.5 10.3 27.6 18.7 43.9 25.5C83.4 342.6 135.8 352 192 352s108.6-9.4 148.1-25.9c7.8-3.2 15.3-6.9 22.4-10.9c6.1-3.4 11.8-7.2 17.2-11.2c1.5-1.1 2.9-2.3 4.3-3.4V304v5.7V336zm32 0V304 278.1c19-4.2 36.5-9.5 52.1-16c16.3-6.8 31.5-15.2 43.9-25.5V272c0 10.5-5 21-14.9 30.9c-16.3 16.3-45 29.7-81.3 38.4c.1-1.7 .2-3.5 .2-5.3zM192 448c56.2 0 108.6-9.4 148.1-25.9c16.3-6.8 31.5-15.2 43.9-25.5V432c0 44.2-86 80-192 80S0 476.2 0 432V396.6c12.5 10.3 27.6 18.7 43.9 25.5C83.4 438.6 135.8 448 192 448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"colon-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Colon Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e140\",\n    \"label\": \"Colon Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M255 39.8c4.3-17.1-6.1-34.5-23.3-38.8S197.2 7.1 193 24.2L181.9 68.6C96.1 87.8 32 164.4 32 256c0 58.1 25.8 110.2 66.7 145.4L81 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l13-52.1c9 3.4 18.4 6.2 28 8.2L177 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l10.4-41.4c33.4-4.4 64.1-17.4 89.8-36.7c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-10.2 7.7-21.7 13.9-34 18.3L321 160c9.4-.3 18.5-4.7 24.6-12.8c10.6-14.1 7.8-34.2-6.4-44.8c-1.1-.8-2.2-1.6-3.3-2.4L351 39.8c4.3-17.1-6.1-34.5-23.3-38.8S293.2 7.1 289 24.2L277.2 71.5c-9.3-2.7-18.8-4.6-28.6-5.9L255 39.8zM163.2 143.3L117.3 326.8C103.9 306.5 96 282.2 96 256c0-48.7 27.2-91 67.2-112.7zm8.6 229.5l61.1-244.6c9.9 .7 19.5 2.5 28.7 5.3l-62 248.1c-9.7-1.9-19-4.8-27.8-8.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M255 39.8c4.3-17.1-6.1-34.5-23.3-38.8S197.2 7.1 193 24.2L181.9 68.6C96.1 87.8 32 164.4 32 256c0 58.1 25.8 110.2 66.7 145.4L81 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l13-52.1c9 3.4 18.4 6.2 28 8.2L177 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l10.4-41.4c33.4-4.4 64.1-17.4 89.8-36.7c14.1-10.6 17-30.7 6.4-44.8s-30.7-17-44.8-6.4c-10.2 7.7-21.7 13.9-34 18.3L321 160c9.4-.3 18.5-4.7 24.6-12.8c10.6-14.1 7.8-34.2-6.4-44.8c-1.1-.8-2.2-1.6-3.3-2.4L351 39.8c4.3-17.1-6.1-34.5-23.3-38.8S293.2 7.1 289 24.2L277.2 71.5c-9.3-2.7-18.8-4.6-28.6-5.9L255 39.8zM163.2 143.3L117.3 326.8C103.9 306.5 96 282.2 96 256c0-48.7 27.2-91 67.2-112.7zm8.6 229.5l61.1-244.6c9.9 .7 19.5 2.5 28.7 5.3l-62 248.1c-9.7-1.9-19-4.8-27.8-8.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"comment\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5e9\", \"f0e5\"],\n        \"secondary\": [\"10f075\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Right Speech Bubble\",\n        \"bubble\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"feedback\",\n        \"message\",\n        \"note\",\n        \"notification\",\n        \"sms\",\n        \"speech\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f075\",\n    \"label\": \"Comment\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 240c0 114.9-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6C73.6 471.1 44.7 480 16 480c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4l0 0 0 0 0 0 0 0 .3-.3c.3-.3 .7-.7 1.3-1.4c1.1-1.2 2.8-3.1 4.9-5.7c4.1-5 9.6-12.4 15.2-21.6c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 240c0 114.9-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6C73.6 471.1 44.7 480 16 480c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4l0 0 0 0 0 0 0 0 .3-.3c.3-.3 .7-.7 1.3-1.4c1.1-1.2 2.8-3.1 4.9-5.7c4.1-5 9.6-12.4 15.2-21.6c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M123.6 391.3c12.9-9.4 29.6-11.8 44.6-6.4c26.5 9.6 56.2 15.1 87.8 15.1c124.7 0 208-80.5 208-160s-83.3-160-208-160S48 160.5 48 240c0 32 12.4 62.8 35.7 89.2c8.6 9.7 12.8 22.5 11.8 35.5c-1.4 18.1-5.7 34.7-11.3 49.4c17-7.9 31.1-16.7 39.4-22.7zM21.2 431.9c1.8-2.7 3.5-5.4 5.1-8.1c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208s-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6c-15.1 6.6-32.3 12.6-50.1 16.1c-.8 .2-1.6 .3-2.4 .5c-4.4 .8-8.7 1.5-13.2 1.9c-.2 0-.5 .1-.7 .1c-5.1 .5-10.2 .8-15.3 .8c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c4.1-4.2 7.8-8.7 11.3-13.5c1.7-2.3 3.3-4.6 4.8-6.9c.1-.2 .2-.3 .3-.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M123.6 391.3c12.9-9.4 29.6-11.8 44.6-6.4c26.5 9.6 56.2 15.1 87.8 15.1c124.7 0 208-80.5 208-160s-83.3-160-208-160S48 160.5 48 240c0 32 12.4 62.8 35.7 89.2c8.6 9.7 12.8 22.5 11.8 35.5c-1.4 18.1-5.7 34.7-11.3 49.4c17-7.9 31.1-16.7 39.4-22.7zM21.2 431.9c1.8-2.7 3.5-5.4 5.1-8.1c10-16.6 19.5-38.4 21.4-62.9C17.7 326.8 0 285.1 0 240C0 125.1 114.6 32 256 32s256 93.1 256 208s-114.6 208-256 208c-37.1 0-72.3-6.4-104.1-17.9c-11.9 8.7-31.3 20.6-54.3 30.6c-15.1 6.6-32.3 12.6-50.1 16.1c-.8 .2-1.6 .3-2.4 .5c-4.4 .8-8.7 1.5-13.2 1.9c-.2 0-.5 .1-.7 .1c-5.1 .5-10.2 .8-15.3 .8c-6.5 0-12.3-3.9-14.8-9.9c-2.5-6-1.1-12.8 3.4-17.4c4.1-4.2 7.8-8.7 11.3-13.5c1.7-2.3 3.3-4.6 4.8-6.9c.1-.2 .2-.3 .3-.5z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"comment-dollar\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f651\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bubble\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"feedback\",\n        \"message\",\n        \"money\",\n        \"note\",\n        \"notification\",\n        \"pay\",\n        \"sms\",\n        \"speech\",\n        \"spend\",\n        \"texting\",\n        \"transfer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f651\",\n    \"label\": \"Comment Dollar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm20-312v13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9V344c0 11-9 20-20 20s-20-9-20-20V329.4c-10.3-2.2-20-5.5-28.2-8.4l0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5V136c0-11 9-20 20-20s20 9 20 20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zm20-312v13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9V344c0 11-9 20-20 20s-20-9-20-20V329.4c-10.3-2.2-20-5.5-28.2-8.4l0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5V136c0-11 9-20 20-20s20 9 20 20z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"comment-dots\": {\n    \"aliases\": {\n      \"names\": [\"commenting\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4ac\", \"f27b\"],\n        \"secondary\": [\"10f4ad\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"balloon\",\n        \"bubble\",\n        \"chat\",\n        \"comic\",\n        \"commenting\",\n        \"conversation\",\n        \"dialog\",\n        \"feedback\",\n        \"message\",\n        \"more\",\n        \"note\",\n        \"notification\",\n        \"reply\",\n        \"sms\",\n        \"speech\",\n        \"speech balloon\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f4ad\",\n    \"label\": \"Comment Dots\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM128 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM128 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M168.2 384.9c-15-5.4-31.7-3.1-44.6 6.4c-8.2 6-22.3 14.8-39.4 22.7c5.6-14.7 9.9-31.3 11.3-49.4c1-12.9-3.3-25.7-11.8-35.5C60.4 302.8 48 272 48 240c0-79.5 83.3-160 208-160s208 80.5 208 160s-83.3 160-208 160c-31.6 0-61.3-5.5-87.8-15.1zM26.3 423.8c-1.6 2.7-3.3 5.4-5.1 8.1l-.3 .5c-1.6 2.3-3.2 4.6-4.8 6.9c-3.5 4.7-7.3 9.3-11.3 13.5c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c5.1 0 10.2-.3 15.3-.8l.7-.1c4.4-.5 8.8-1.1 13.2-1.9c.8-.1 1.6-.3 2.4-.5c17.8-3.5 34.9-9.5 50.1-16.1c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9zM144 272a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm80 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M168.2 384.9c-15-5.4-31.7-3.1-44.6 6.4c-8.2 6-22.3 14.8-39.4 22.7c5.6-14.7 9.9-31.3 11.3-49.4c1-12.9-3.3-25.7-11.8-35.5C60.4 302.8 48 272 48 240c0-79.5 83.3-160 208-160s208 80.5 208 160s-83.3 160-208 160c-31.6 0-61.3-5.5-87.8-15.1zM26.3 423.8c-1.6 2.7-3.3 5.4-5.1 8.1l-.3 .5c-1.6 2.3-3.2 4.6-4.8 6.9c-3.5 4.7-7.3 9.3-11.3 13.5c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c5.1 0 10.2-.3 15.3-.8l.7-.1c4.4-.5 8.8-1.1 13.2-1.9c.8-.1 1.6-.3 2.4-.5c17.8-3.5 34.9-9.5 50.1-16.1c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9zM144 272a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm80 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"comment-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7f5\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"advice\",\n        \"bubble\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"diagnose\",\n        \"feedback\",\n        \"message\",\n        \"note\",\n        \"notification\",\n        \"prescription\",\n        \"sms\",\n        \"speech\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7f5\",\n    \"label\": \"Comment Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM224 160c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H288v48c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V272H176c-8.8 0-16-7.2-16-16V224c0-8.8 7.2-16 16-16h48V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM224 160c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H288v48c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V272H176c-8.8 0-16-7.2-16-16V224c0-8.8 7.2-16 16-16h48V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"comment-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4b3\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bubble\",\n        \"cancel\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"feedback\",\n        \"message\",\n        \"mute\",\n        \"note\",\n        \"notification\",\n        \"quiet\",\n        \"sms\",\n        \"speech\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4b3\",\n    \"label\": \"Comment Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L512.9 376.7C552.2 340.2 576 292.3 576 240C576 125.1 461.4 32 320 32c-67.7 0-129.3 21.4-175.1 56.3L38.8 5.1zM64 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c37 0 72.3-6.4 104-17.9L82.9 161.3C70.7 185.6 64 212.2 64 240z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L512.9 376.7C552.2 340.2 576 292.3 576 240C576 125.1 461.4 32 320 32c-67.7 0-129.3 21.4-175.1 56.3L38.8 5.1zM64 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9c37 0 72.3-6.4 104-17.9L82.9 161.3C70.7 185.6 64 212.2 64 240z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"comment-sms\": {\n    \"aliases\": {\n      \"names\": [\"sms\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7cd\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"chat\",\n        \"conversation\",\n        \"message\",\n        \"mobile\",\n        \"notification\",\n        \"phone\",\n        \"sms\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7cd\",\n    \"label\": \"Comment Sms\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM202.9 176.8c6.5-2.2 13.7 .1 17.9 5.6L256 229.3l35.2-46.9c4.1-5.5 11.3-7.8 17.9-5.6s10.9 8.3 10.9 15.2v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V240l-19.2 25.6c-3 4-7.8 6.4-12.8 6.4s-9.8-2.4-12.8-6.4L224 240v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-6.9 4.4-13 10.9-15.2zm173.1 38c0 .2 0 .4 0 .4c.1 .1 .6 .8 2.2 1.7c3.9 2.3 9.6 4.1 18.3 6.8l.6 .2c7.4 2.2 17.3 5.2 25.2 10.2c9.1 5.7 17.4 15.2 17.6 29.9c.2 15-7.6 26-17.8 32.3c-9.5 5.9-20.9 7.9-30.7 7.6c-12.2-.4-23.7-4.4-32.6-7.4l0 0 0 0c-1.4-.5-2.7-.9-4-1.4c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c1.7 .6 3.3 1.1 4.9 1.6l0 0 0 0c9.1 3.1 15.6 5.3 22.6 5.5c5.3 .2 10-1 12.8-2.8c1.2-.8 1.8-1.5 2.1-2c.2-.4 .6-1.2 .6-2.7l0-.2c0-.7 0-1.4-2.7-3.1c-3.8-2.4-9.6-4.3-18-6.9l-1.2-.4c-7.2-2.2-16.7-5-24.3-9.6c-9-5.4-17.7-14.7-17.7-29.4c-.1-15.2 8.6-25.7 18.5-31.6c9.4-5.5 20.5-7.5 29.7-7.4c10 .2 19.7 2.3 27.9 4.4c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-7.3-1.9-14.1-3.3-20.1-3.4c-4.9-.1-9.8 1.1-12.9 2.9c-1.4 .8-2.1 1.6-2.4 2c-.2 .3-.4 .8-.4 1.9zm-272 0c0 .2 0 .4 0 .4c.1 .1 .6 .8 2.2 1.7c3.9 2.3 9.6 4.1 18.3 6.8l.6 .2c7.4 2.2 17.3 5.2 25.2 10.2c9.1 5.7 17.4 15.2 17.6 29.9c.2 15-7.6 26-17.8 32.3c-9.5 5.9-20.9 7.9-30.7 7.6c-12.3-.4-24.2-4.5-33.2-7.6l0 0 0 0c-1.3-.4-2.5-.8-3.6-1.2c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c1.4 .5 2.8 .9 4.1 1.4l0 0 0 0c9.5 3.2 16.5 5.6 23.7 5.8c5.3 .2 10-1 12.8-2.8c1.2-.8 1.8-1.5 2.1-2c.2-.4 .6-1.2 .6-2.7l0-.2c0-.7 0-1.4-2.7-3.1c-3.8-2.4-9.6-4.3-18-6.9l-1.2-.4 0 0c-7.2-2.2-16.7-5-24.3-9.6C80.8 239 72.1 229.7 72 215c-.1-15.2 8.6-25.7 18.5-31.6c9.4-5.5 20.5-7.5 29.7-7.4c9.5 .1 22.2 2.1 31.1 4.4c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-6.6-1.8-16.8-3.3-23.3-3.4c-4.9-.1-9.8 1.1-12.9 2.9c-1.4 .8-2.1 1.6-2.4 2c-.2 .3-.4 .8-.4 1.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 448c141.4 0 256-93.1 256-208S397.4 32 256 32S0 125.1 0 240c0 45.1 17.7 86.8 47.7 120.9c-1.9 24.5-11.4 46.3-21.4 62.9c-5.5 9.2-11.1 16.6-15.2 21.6c-2.1 2.5-3.7 4.4-4.9 5.7c-.6 .6-1 1.1-1.3 1.4l-.3 .3 0 0 0 0 0 0 0 0c-4.6 4.6-5.9 11.4-3.4 17.4c2.5 6 8.3 9.9 14.8 9.9c28.7 0 57.6-8.9 81.6-19.3c22.9-10 42.4-21.9 54.3-30.6c31.8 11.5 67 17.9 104.1 17.9zM202.9 176.8c6.5-2.2 13.7 .1 17.9 5.6L256 229.3l35.2-46.9c4.1-5.5 11.3-7.8 17.9-5.6s10.9 8.3 10.9 15.2v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V240l-19.2 25.6c-3 4-7.8 6.4-12.8 6.4s-9.8-2.4-12.8-6.4L224 240v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-6.9 4.4-13 10.9-15.2zm173.1 38c0 .2 0 .4 0 .4c.1 .1 .6 .8 2.2 1.7c3.9 2.3 9.6 4.1 18.3 6.8l.6 .2c7.4 2.2 17.3 5.2 25.2 10.2c9.1 5.7 17.4 15.2 17.6 29.9c.2 15-7.6 26-17.8 32.3c-9.5 5.9-20.9 7.9-30.7 7.6c-12.2-.4-23.7-4.4-32.6-7.4l0 0 0 0c-1.4-.5-2.7-.9-4-1.4c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c1.7 .6 3.3 1.1 4.9 1.6l0 0 0 0c9.1 3.1 15.6 5.3 22.6 5.5c5.3 .2 10-1 12.8-2.8c1.2-.8 1.8-1.5 2.1-2c.2-.4 .6-1.2 .6-2.7l0-.2c0-.7 0-1.4-2.7-3.1c-3.8-2.4-9.6-4.3-18-6.9l-1.2-.4c-7.2-2.2-16.7-5-24.3-9.6c-9-5.4-17.7-14.7-17.7-29.4c-.1-15.2 8.6-25.7 18.5-31.6c9.4-5.5 20.5-7.5 29.7-7.4c10 .2 19.7 2.3 27.9 4.4c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-7.3-1.9-14.1-3.3-20.1-3.4c-4.9-.1-9.8 1.1-12.9 2.9c-1.4 .8-2.1 1.6-2.4 2c-.2 .3-.4 .8-.4 1.9zm-272 0c0 .2 0 .4 0 .4c.1 .1 .6 .8 2.2 1.7c3.9 2.3 9.6 4.1 18.3 6.8l.6 .2c7.4 2.2 17.3 5.2 25.2 10.2c9.1 5.7 17.4 15.2 17.6 29.9c.2 15-7.6 26-17.8 32.3c-9.5 5.9-20.9 7.9-30.7 7.6c-12.3-.4-24.2-4.5-33.2-7.6l0 0 0 0c-1.3-.4-2.5-.8-3.6-1.2c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c1.4 .5 2.8 .9 4.1 1.4l0 0 0 0c9.5 3.2 16.5 5.6 23.7 5.8c5.3 .2 10-1 12.8-2.8c1.2-.8 1.8-1.5 2.1-2c.2-.4 .6-1.2 .6-2.7l0-.2c0-.7 0-1.4-2.7-3.1c-3.8-2.4-9.6-4.3-18-6.9l-1.2-.4 0 0c-7.2-2.2-16.7-5-24.3-9.6C80.8 239 72.1 229.7 72 215c-.1-15.2 8.6-25.7 18.5-31.6c9.4-5.5 20.5-7.5 29.7-7.4c9.5 .1 22.2 2.1 31.1 4.4c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-6.6-1.8-16.8-3.3-23.3-3.4c-4.9-.1-9.8 1.1-12.9 2.9c-1.4 .8-2.1 1.6-2.4 2c-.2 .3-.4 .8-.4 1.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"comments\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5ea\", \"f0e6\"],\n        \"secondary\": [\"10f086\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Two Speech Bubbles\",\n        \"bubble\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"feedback\",\n        \"message\",\n        \"note\",\n        \"notification\",\n        \"sms\",\n        \"speech\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f086\",\n    \"label\": \"Comments\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2 0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.3-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9l0 0 0 0-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M208 352c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176c0 38.6 14.7 74.3 39.6 103.4c-3.5 9.4-8.7 17.7-14.2 24.7c-4.8 6.2-9.7 11-13.3 14.3c-1.8 1.6-3.3 2.9-4.3 3.7c-.5 .4-.9 .7-1.1 .8l-.2 .2 0 0 0 0C1 327.2-1.4 334.4 .8 340.9S9.1 352 16 352c21.8 0 43.8-5.6 62.1-12.5c9.2-3.5 17.8-7.4 25.3-11.4C134.1 343.3 169.8 352 208 352zM448 176c0 112.3-99.1 196.9-216.5 207C255.8 457.4 336.4 512 432 512c38.2 0 73.9-8.7 104.7-23.9c7.5 4 16 7.9 25.2 11.4c18.3 6.9 40.3 12.5 62.1 12.5c6.9 0 13.1-4.5 15.2-11.1c2.1-6.6-.2-13.8-5.8-17.9l0 0 0 0-.2-.2c-.2-.2-.6-.4-1.1-.8c-1-.8-2.5-2-4.3-3.7c-3.6-3.3-8.5-8.1-13.3-14.3c-5.5-7-10.7-15.4-14.2-24.7c24.9-29 39.6-64.7 39.6-103.4c0-92.8-84.9-168.9-192.6-175.5c.4 5.1 .6 10.3 .6 15.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128s-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6c-10.4-2-21.2-.6-30.7 4.2c-4.1 2.1-8.3 4.1-12.6 6c-16 7.2-32.9 13.5-49.9 18c2.8-4.6 5.4-9.1 7.9-13.6c1.1-1.9 2.2-3.9 3.2-5.9zM0 176c0 41.8 17.2 80.1 45.9 110.3c-.9 1.7-1.9 3.5-2.8 5.1c-10.3 18.4-22.3 36.5-36.6 52.1c-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7c4.8-2.2 9.6-4.5 14.2-6.8c15.1 3 30.9 4.5 47.1 4.5c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176zM432 480c16.2 0 31.9-1.6 47.1-4.5c4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5c3.8-8.8 2-19-4.6-25.9c-14.2-15.6-26.2-33.7-36.6-52.1c-.9-1.7-1.9-3.4-2.8-5.1C622.8 384.1 640 345.8 640 304c0-94.4-87.9-171.5-198.2-175.8c4.1 15.2 6.2 31.2 6.2 47.8l0 .6c87.2 6.7 144 67.5 144 127.4c0 28-11.4 54.9-32.7 77.2c-14.3 15-17.3 37.6-7.5 55.8c1.1 2 2.2 4 3.2 5.9c2.5 4.5 5.2 9 7.9 13.6c-17-4.5-33.9-10.7-49.9-18c-4.3-1.9-8.5-3.9-12.6-6c-9.5-4.8-20.3-6.2-30.7-4.2c-12.1 2.4-24.7 3.6-37.8 3.6c-61.7 0-110-26.5-136.8-62.3c-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M88.2 309.1c9.8-18.3 6.8-40.8-7.5-55.8C59.4 230.9 48 204 48 176c0-63.5 63.8-128 160-128s160 64.5 160 128s-63.8 128-160 128c-13.1 0-25.8-1.3-37.8-3.6c-10.4-2-21.2-.6-30.7 4.2c-4.1 2.1-8.3 4.1-12.6 6c-16 7.2-32.9 13.5-49.9 18c2.8-4.6 5.4-9.1 7.9-13.6c1.1-1.9 2.2-3.9 3.2-5.9zM0 176c0 41.8 17.2 80.1 45.9 110.3c-.9 1.7-1.9 3.5-2.8 5.1c-10.3 18.4-22.3 36.5-36.6 52.1c-6.6 7-8.3 17.2-4.6 25.9C5.8 378.3 14.4 384 24 384c43 0 86.5-13.3 122.7-29.7c4.8-2.2 9.6-4.5 14.2-6.8c15.1 3 30.9 4.5 47.1 4.5c114.9 0 208-78.8 208-176S322.9 0 208 0S0 78.8 0 176zM432 480c16.2 0 31.9-1.6 47.1-4.5c4.6 2.3 9.4 4.6 14.2 6.8C529.5 498.7 573 512 616 512c9.6 0 18.2-5.7 22-14.5c3.8-8.8 2-19-4.6-25.9c-14.2-15.6-26.2-33.7-36.6-52.1c-.9-1.7-1.9-3.4-2.8-5.1C622.8 384.1 640 345.8 640 304c0-94.4-87.9-171.5-198.2-175.8c4.1 15.2 6.2 31.2 6.2 47.8l0 .6c87.2 6.7 144 67.5 144 127.4c0 28-11.4 54.9-32.7 77.2c-14.3 15-17.3 37.6-7.5 55.8c1.1 2 2.2 4 3.2 5.9c2.5 4.5 5.2 9 7.9 13.6c-17-4.5-33.9-10.7-49.9-18c-4.3-1.9-8.5-3.9-12.6-6c-9.5-4.8-20.3-6.2-30.7-4.2c-12.1 2.4-24.7 3.6-37.8 3.6c-61.7 0-110-26.5-136.8-62.3c-16 5.4-32.8 9.4-50 11.8C279 439.8 350 480 432 480z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"comments-dollar\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f653\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bubble\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"feedback\",\n        \"message\",\n        \"money\",\n        \"note\",\n        \"notification\",\n        \"pay\",\n        \"sms\",\n        \"speech\",\n        \"spend\",\n        \"texting\",\n        \"transfer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f653\",\n    \"label\": \"Comments Dollar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M416 176c0 97.2-93.1 176-208 176c-38.2 0-73.9-8.7-104.7-23.9c-7.5 4-16 7.9-25.2 11.4C59.8 346.4 37.8 352 16 352c-6.9 0-13.1-4.5-15.2-11.1s.2-13.8 5.8-17.9l0 0 0 0 .2-.2c.2-.2 .6-.4 1.1-.8c1-.8 2.5-2 4.3-3.7c3.6-3.3 8.5-8.1 13.3-14.3c5.5-7 10.7-15.4 14.2-24.7C14.7 250.3 0 214.6 0 176C0 78.8 93.1 0 208 0S416 78.8 416 176zM231.5 383C348.9 372.9 448 288.3 448 176c0-5.2-.2-10.4-.6-15.5C555.1 167.1 640 243.2 640 336c0 38.6-14.7 74.3-39.6 103.4c3.5 9.4 8.7 17.7 14.2 24.7c4.8 6.2 9.7 11 13.3 14.3c1.8 1.6 3.3 2.9 4.3 3.7c.5 .4 .9 .7 1.1 .8l.2 .2 0 0 0 0c5.6 4.1 7.9 11.3 5.8 17.9c-2.1 6.6-8.3 11.1-15.2 11.1c-21.8 0-43.8-5.6-62.1-12.5c-9.2-3.5-17.8-7.4-25.2-11.4C505.9 503.3 470.2 512 432 512c-95.6 0-176.2-54.6-200.5-129zM228 72c0-11-9-20-20-20s-20 9-20 20V86c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1l0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4V280c0 11 9 20 20 20s20-9 20-20V266.2c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7V72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M416 176c0 97.2-93.1 176-208 176c-38.2 0-73.9-8.7-104.7-23.9c-7.5 4-16 7.9-25.2 11.4C59.8 346.4 37.8 352 16 352c-6.9 0-13.1-4.5-15.2-11.1s.2-13.8 5.8-17.9l0 0 0 0 .2-.2c.2-.2 .6-.4 1.1-.8c1-.8 2.5-2 4.3-3.7c3.6-3.3 8.5-8.1 13.3-14.3c5.5-7 10.7-15.4 14.2-24.7C14.7 250.3 0 214.6 0 176C0 78.8 93.1 0 208 0S416 78.8 416 176zM231.5 383C348.9 372.9 448 288.3 448 176c0-5.2-.2-10.4-.6-15.5C555.1 167.1 640 243.2 640 336c0 38.6-14.7 74.3-39.6 103.4c3.5 9.4 8.7 17.7 14.2 24.7c4.8 6.2 9.7 11 13.3 14.3c1.8 1.6 3.3 2.9 4.3 3.7c.5 .4 .9 .7 1.1 .8l.2 .2 0 0 0 0c5.6 4.1 7.9 11.3 5.8 17.9c-2.1 6.6-8.3 11.1-15.2 11.1c-21.8 0-43.8-5.6-62.1-12.5c-9.2-3.5-17.8-7.4-25.2-11.4C505.9 503.3 470.2 512 432 512c-95.6 0-176.2-54.6-200.5-129zM228 72c0-11-9-20-20-20s-20 9-20 20V86c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1l0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4V280c0 11 9 20 20 20s20-9 20-20V266.2c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7V72z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"compact-disc\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4bf\", \"1f4c0\", \"1f5b8\"],\n        \"secondary\": [\"10f51f\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.10.1\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Optical Disc Icon\",\n        \"album\",\n        \"blu-ray\",\n        \"bluray\",\n        \"cd\",\n        \"computer\",\n        \"disc\",\n        \"disk\",\n        \"dvd\",\n        \"media\",\n        \"movie\",\n        \"music\",\n        \"optical\",\n        \"optical disk\",\n        \"record\",\n        \"video\",\n        \"vinyl\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f51f\",\n    \"label\": \"Compact Disc\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-96-32a96 96 0 1 0 192 0 96 96 0 1 0 -192 0zM96 240c0-35 17.5-71.1 45.2-98.8S205 96 240 96c8.8 0 16-7.2 16-16s-7.2-16-16-16c-45.4 0-89.2 22.3-121.5 54.5S64 194.6 64 240c0 8.8 7.2 16 16 16s16-7.2 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm-96-32a96 96 0 1 0 192 0 96 96 0 1 0 -192 0zM96 240c0-35 17.5-71.1 45.2-98.8S205 96 240 96c8.8 0 16-7.2 16-16s-7.2-16-16-16c-45.4 0-89.2 22.3-121.5 54.5S64 194.6 64 240c0 8.8 7.2 16 16 16s16-7.2 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"compass\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9ed\"],\n        \"secondary\": [\"10f14e\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"compass\",\n        \"directions\",\n        \"directory\",\n        \"location\",\n        \"magnetic\",\n        \"menu\",\n        \"navigation\",\n        \"orienteering\",\n        \"safari\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f14e\",\n    \"label\": \"Compass\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm50.7-186.9L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm306.7 69.1L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm306.7 69.1L162.4 380.6c-19.4 7.5-38.5-11.6-31-31l55.5-144.3c3.3-8.5 9.9-15.1 18.4-18.4l144.3-55.5c19.4-7.5 38.5 11.6 31 31L325.1 306.7c-3.2 8.5-9.9 15.1-18.4 18.4zM288 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"compass-drafting\": {\n    \"aliases\": {\n      \"names\": [\"drafting-compass\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f568\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"map\", \"mechanical drawing\", \"plot\", \"plotting\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f568\",\n    \"label\": \"Compass Drafting\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M352 96c0 14.3-3.1 27.9-8.8 40.2L396 227.4c-23.7 25.3-54.2 44.1-88.5 53.6L256 192h0 0l-68 117.5c21.5 6.8 44.3 10.5 68.1 10.5c70.7 0 133.8-32.7 174.9-84c11.1-13.8 31.2-16 45-5s16 31.2 5 45C428.1 341.8 347 384 256 384c-35.4 0-69.4-6.4-100.7-18.1L98.7 463.7C94 471.8 87 478.4 78.6 482.6L23.2 510.3c-5 2.5-10.9 2.2-15.6-.7S0 501.5 0 496V440.6c0-8.4 2.2-16.7 6.5-24.1l60-103.7C53.7 301.6 41.8 289.3 31.2 276c-11.1-13.8-8.8-33.9 5-45s33.9-8.8 45 5c5.7 7.1 11.8 13.8 18.2 20.1l69.4-119.9c-5.6-12.2-8.8-25.8-8.8-40.2c0-53 43-96 96-96s96 43 96 96zm21 297.9c32.6-12.8 62.5-30.8 88.9-52.9l43.7 75.5c4.2 7.3 6.5 15.6 6.5 24.1V496c0 5.5-2.9 10.7-7.6 13.6s-10.6 3.2-15.6 .7l-55.4-27.7c-8.4-4.2-15.4-10.8-20.1-18.9L373 393.9zM256 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M352 96c0 14.3-3.1 27.9-8.8 40.2L396 227.4c-23.7 25.3-54.2 44.1-88.5 53.6L256 192h0 0l-68 117.5c21.5 6.8 44.3 10.5 68.1 10.5c70.7 0 133.8-32.7 174.9-84c11.1-13.8 31.2-16 45-5s16 31.2 5 45C428.1 341.8 347 384 256 384c-35.4 0-69.4-6.4-100.7-18.1L98.7 463.7C94 471.8 87 478.4 78.6 482.6L23.2 510.3c-5 2.5-10.9 2.2-15.6-.7S0 501.5 0 496V440.6c0-8.4 2.2-16.7 6.5-24.1l60-103.7C53.7 301.6 41.8 289.3 31.2 276c-11.1-13.8-8.8-33.9 5-45s33.9-8.8 45 5c5.7 7.1 11.8 13.8 18.2 20.1l69.4-119.9c-5.6-12.2-8.8-25.8-8.8-40.2c0-53 43-96 96-96s96 43 96 96zm21 297.9c32.6-12.8 62.5-30.8 88.9-52.9l43.7 75.5c4.2 7.3 6.5 15.6 6.5 24.1V496c0 5.5-2.9 10.7-7.6 13.6s-10.6 3.2-15.6 .7l-55.4-27.7c-8.4-4.2-15.4-10.8-20.1-18.9L373 393.9zM256 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"compress\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f066\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"collapse\",\n        \"fullscreen\",\n        \"minimize\",\n        \"move\",\n        \"resize\",\n        \"shrink\",\n        \"smaller\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f066\",\n    \"label\": \"Compress\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V64zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32H96v64c0 17.7 14.3 32 32 32s32-14.3 32-32V352c0-17.7-14.3-32-32-32H32zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V64zM320 320c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M160 64c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V64zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32H96v64c0 17.7 14.3 32 32 32s32-14.3 32-32V352c0-17.7-14.3-32-32-32H32zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V64zM320 320c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"computer\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"computer\", \"desktop\", \"display\", \"monitor\", \"tower\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e5\",\n    \"label\": \"Computer\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M384 96V320H64L64 96H384zM64 32C28.7 32 0 60.7 0 96V320c0 35.3 28.7 64 64 64H181.3l-10.7 32H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H277.3l-10.7-32H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm464 0c-26.5 0-48 21.5-48 48V432c0 26.5 21.5 48 48 48h64c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H528zm16 64h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H544c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-16 80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H544c-8.8 0-16-7.2-16-16zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M384 96V320H64L64 96H384zM64 32C28.7 32 0 60.7 0 96V320c0 35.3 28.7 64 64 64H181.3l-10.7 32H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H277.3l-10.7-32H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm464 0c-26.5 0-48 21.5-48 48V432c0 26.5 21.5 48 48 48h64c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H528zm16 64h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H544c-8.8 0-16-7.2-16-16s7.2-16 16-16zm-16 80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H544c-8.8 0-16-7.2-16-16zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"computer-mouse\": {\n    \"aliases\": {\n      \"names\": [\"mouse\"],\n      \"unicodes\": {\n        \"composite\": [\"1f5b1\"],\n        \"secondary\": [\"10f8cc\"]\n      }\n    },\n    \"changes\": [\"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"click\",\n        \"computer\",\n        \"computer mouse\",\n        \"cursor\",\n        \"input\",\n        \"peripheral\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8cc\",\n    \"label\": \"Computer Mouse\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 192H176V0H160C71.6 0 0 71.6 0 160v32zm0 32V352c0 88.4 71.6 160 160 160h64c88.4 0 160-71.6 160-160V224H192 0zm384-32V160C384 71.6 312.4 0 224 0H208V192H384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 192H176V0H160C71.6 0 0 71.6 0 160v32zm0 32V352c0 88.4 71.6 160 160 160h64c88.4 0 160-71.6 160-160V224H192 0zm384-32V160C384 71.6 312.4 0 224 0H208V192H384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"confluence\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"atlassian\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f78d\",\n    \"label\": \"Confluence\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M2.3 412.2c-4.5 7.6-2.1 17.5 5.5 22.2l105.9 65.2c7.7 4.7 17.7 2.4 22.4-5.3 0-.1.1-.2.1-.2 67.1-112.2 80.5-95.9 280.9-.7 8.1 3.9 17.8.4 21.7-7.7.1-.1.1-.3.2-.4l50.4-114.1c3.6-8.1-.1-17.6-8.1-21.3-22.2-10.4-66.2-31.2-105.9-50.3C127.5 179 44.6 345.3 2.3 412.2zm507.4-312.1c4.5-7.6 2.1-17.5-5.5-22.2L398.4 12.8c-7.5-5-17.6-3.1-22.6 4.4-.2.3-.4.6-.6 1-67.3 112.6-81.1 95.6-280.6.9-8.1-3.9-17.8-.4-21.7 7.7-.1.1-.1.3-.2.4L22.2 141.3c-3.6 8.1.1 17.6 8.1 21.3 22.2 10.4 66.3 31.2 106 50.4 248 120 330.8-45.4 373.4-112.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"connectdevelop\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f20e\",\n    \"label\": \"Connect Develop\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"contao\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f26d\",\n    \"label\": \"Contao\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cookie\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f36a\"],\n        \"secondary\": [\"10f563\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"baked good\",\n        \"chips\",\n        \"chocolate\",\n        \"cookie\",\n        \"dessert\",\n        \"eat\",\n        \"snack\",\n        \"sweet\",\n        \"treat\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f563\",\n    \"label\": \"Cookie\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M247.2 17c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9l-14.6-82.8c-3.9-22.1-14.6-42.3-30.7-57.9L388.9 57.5c-16.1-15.6-36.6-25.6-58.7-28.7L247.2 17zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M247.2 17c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9l-14.6-82.8c-3.9-22.1-14.6-42.3-30.7-57.9L388.9 57.5c-16.1-15.6-36.6-25.6-58.7-28.7L247.2 17zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cookie-bite\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f564\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"baked good\",\n        \"bitten\",\n        \"chips\",\n        \"chocolate\",\n        \"eat\",\n        \"snack\",\n        \"sweet\",\n        \"treat\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f564\",\n    \"label\": \"Cookie Bite\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9c-.9-5.3-5.3-9.3-10.6-10.1c-51.5-8.2-92.8-47.1-104.5-97.4c-1.8-7.6-8-13.4-15.7-14.6c-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M257.5 27.6c-.8-5.4-4.9-9.8-10.3-10.6c-22.1-3.1-44.6 .9-64.4 11.4l-74 39.5C89.1 78.4 73.2 94.9 63.4 115L26.7 190.6c-9.8 20.1-13 42.9-9.1 64.9l14.5 82.8c3.9 22.1 14.6 42.3 30.7 57.9l60.3 58.4c16.1 15.6 36.6 25.6 58.7 28.7l83 11.7c22.1 3.1 44.6-.9 64.4-11.4l74-39.5c19.7-10.5 35.6-27 45.4-47.2l36.7-75.5c9.8-20.1 13-42.9 9.1-64.9c-.9-5.3-5.3-9.3-10.6-10.1c-51.5-8.2-92.8-47.1-104.5-97.4c-1.8-7.6-8-13.4-15.7-14.6c-54.6-8.7-97.7-52-106.2-106.8zM208 144a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM144 336a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm224-64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"copy\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0c5\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clone\", \"duplicate\", \"file\", \"files-o\", \"paper\", \"paste\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0c5\",\n    \"label\": \"Copy\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M208 0H332.1c12.7 0 24.9 5.1 33.9 14.1l67.9 67.9c9 9 14.1 21.2 14.1 33.9V336c0 26.5-21.5 48-48 48H208c-26.5 0-48-21.5-48-48V48c0-26.5 21.5-48 48-48zM48 128h80v64H64V448H256V416h64v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 336H192c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16l140.1 0L400 115.9V320c0 8.8-7.2 16-16 16zM192 384H384c35.3 0 64-28.7 64-64V115.9c0-12.7-5.1-24.9-14.1-33.9L366.1 14.1c-9-9-21.2-14.1-33.9-14.1H192c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H256c35.3 0 64-28.7 64-64V416H272v32c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H96V128H64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"copyright\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"a9\"],\n        \"secondary\": [\"10f1f9\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"brand\", \"c\", \"copyright\", \"mark\", \"register\", \"trademark\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1f9\",\n    \"label\": \"Copyright\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c31.2 31.2 81.9 31.2 113.1 0c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-50 50-131 50-181 0s-50-131 0-181s131-50 181 0c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-31.2-31.2-81.9-31.2-113.1 0s-31.2 81.9 0 113.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c31.2 31.2 81.9 31.2 113.1 0c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-50 50-131 50-181 0s-50-131 0-181s131-50 181 0c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-31.2-31.2-81.9-31.2-113.1 0s-31.2 81.9 0 113.1z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c-31.2-31.2-31.2-81.9 0-113.1s81.9-31.2 113.1 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9c-50-50-131-50-181 0s-50 131 0 181s131 50 181 0c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0c-31.2 31.2-81.9 31.2-113.1 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM199.4 312.6c-31.2-31.2-31.2-81.9 0-113.1s81.9-31.2 113.1 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9c-50-50-131-50-181 0s-50 131 0 181s131 50 181 0c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0c-31.2 31.2-81.9 31.2-113.1 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"cotton-bureau\": {\n    \"changes\": [\"5.10.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clothing\", \"t-shirts\", \"tshirts\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f89e\",\n    \"label\": \"Cotton Bureau\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M474.31 330.41c-23.66 91.85-94.23 144.59-201.9 148.35V429.6c0-48 26.41-74.39 74.39-74.39 62 0 99.2-37.2 99.2-99.21 0-61.37-36.53-98.28-97.38-99.06-33-69.32-146.5-64.65-177.24 0C110.52 157.72 74 194.63 74 256c0 62.13 37.27 99.41 99.4 99.41 48 0 74.55 26.23 74.55 74.39V479c-134.43-5-211.1-85.07-211.1-223 0-141.82 81.35-223.2 223.2-223.2 114.77 0 189.84 53.2 214.69 148.81H500C473.88 71.51 388.22 8 259.82 8 105 8 12 101.19 12 255.82 12 411.14 105.19 504.34 259.82 504c128.27 0 213.87-63.81 239.67-173.59zM357 182.33c41.37 3.45 64.2 29 64.2 73.67 0 48-26.43 74.41-74.4 74.41-28.61 0-49.33-9.59-61.59-27.33 83.06-16.55 75.59-99.67 71.79-120.75zm-81.68 97.36c-2.46-10.34-16.33-87 56.23-97 2.27 10.09 16.52 87.11-56.26 97zM260 132c28.61 0 49 9.67 61.44 27.61-28.36 5.48-49.36 20.59-61.59 43.45-12.23-22.86-33.23-38-61.6-43.45 12.41-17.69 33.27-27.35 61.57-27.35zm-71.52 50.72c73.17 10.57 58.91 86.81 56.49 97-72.41-9.84-59-86.95-56.25-97zM173.2 330.41c-48 0-74.4-26.4-74.4-74.41 0-44.36 22.86-70 64.22-73.67-6.75 37.2-1.38 106.53 71.65 120.75-12.14 17.63-32.84 27.3-61.14 27.3zm53.21 12.39A80.8 80.8 0 0 0 260 309.25c7.77 14.49 19.33 25.54 33.82 33.55a80.28 80.28 0 0 0-33.58 33.83c-8-14.5-19.07-26.23-33.56-33.83z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"couch\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4b8\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chair\", \"cushion\", \"furniture\", \"relax\", \"sofa\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4b8\",\n    \"label\": \"Couch\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 160C64 89.3 121.3 32 192 32H448c70.7 0 128 57.3 128 128v33.6c-36.5 7.4-64 39.7-64 78.4v48H128V272c0-38.7-27.5-71-64-78.4V160zM544 272c0-20.9 13.4-38.7 32-45.3c5-1.8 10.4-2.7 16-2.7c26.5 0 48 21.5 48 48V448c0 17.7-14.3 32-32 32H576c-17.7 0-32-14.3-32-32H96c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V272c0-26.5 21.5-48 48-48c5.6 0 11 1 16 2.7c18.6 6.6 32 24.4 32 45.3v48 32h32H512h32V320 272z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 160C64 89.3 121.3 32 192 32H448c70.7 0 128 57.3 128 128v33.6c-36.5 7.4-64 39.7-64 78.4v48H128V272c0-38.7-27.5-71-64-78.4V160zM544 272c0-20.9 13.4-38.7 32-45.3c5-1.8 10.4-2.7 16-2.7c26.5 0 48 21.5 48 48V448c0 17.7-14.3 32-32 32H576c-17.7 0-32-14.3-32-32H96c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V272c0-26.5 21.5-48 48-48c5.6 0 11 1 16 2.7c18.6 6.6 32 24.4 32 45.3v48 32h32H512h32V320 272z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cow\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f404\"],\n        \"secondary\": [\"10f6c8\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"agriculture\",\n        \"animal\",\n        \"beef\",\n        \"bovine\",\n        \"co\",\n        \"cow\",\n        \"farm\",\n        \"fauna\",\n        \"livestock\",\n        \"mammal\",\n        \"milk\",\n        \"moo\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6c8\",\n    \"label\": \"Cow\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 224v32V416c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V327.8c9.9 6.6 20.6 12 32 16.1V368c0 8.8 7.2 16 16 16s16-7.2 16-16V351.1c5.3 .6 10.6 .9 16 .9s10.7-.3 16-.9V368c0 8.8 7.2 16 16 16s16-7.2 16-16V343.8c11.4-4 22.1-9.4 32-16.1V416c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V256l32 32v49.5c0 9.5 2.8 18.7 8.1 26.6L530 427c8.8 13.1 23.5 21 39.3 21c22.5 0 41.9-15.9 46.3-38l20.3-101.6c2.6-13-.3-26.5-8-37.3l-3.9-5.5V184c0-13.3-10.7-24-24-24s-24 10.7-24 24v14.4l-52.9-74.1C496 86.5 452.4 64 405.9 64H272 256 192 144C77.7 64 24 117.7 24 184v54C9.4 249.8 0 267.8 0 288v17.6c0 8 6.4 14.4 14.4 14.4C46.2 320 72 294.2 72 262.4V256 224 184c0-24.3 12.1-45.8 30.5-58.9C98.3 135.9 96 147.7 96 160v64zM560 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM166.6 166.6c-4.2-4.2-6.6-10-6.6-16c0-12.5 10.1-22.6 22.6-22.6H361.4c12.5 0 22.6 10.1 22.6 22.6c0 6-2.4 11.8-6.6 16l-23.4 23.4C332.2 211.8 302.7 224 272 224s-60.2-12.2-81.9-33.9l-23.4-23.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 224v32V416c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V327.8c9.9 6.6 20.6 12 32 16.1V368c0 8.8 7.2 16 16 16s16-7.2 16-16V351.1c5.3 .6 10.6 .9 16 .9s10.7-.3 16-.9V368c0 8.8 7.2 16 16 16s16-7.2 16-16V343.8c11.4-4 22.1-9.4 32-16.1V416c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V256l32 32v49.5c0 9.5 2.8 18.7 8.1 26.6L530 427c8.8 13.1 23.5 21 39.3 21c22.5 0 41.9-15.9 46.3-38l20.3-101.6c2.6-13-.3-26.5-8-37.3l-3.9-5.5V184c0-13.3-10.7-24-24-24s-24 10.7-24 24v14.4l-52.9-74.1C496 86.5 452.4 64 405.9 64H272 256 192 144C77.7 64 24 117.7 24 184v54C9.4 249.8 0 267.8 0 288v17.6c0 8 6.4 14.4 14.4 14.4C46.2 320 72 294.2 72 262.4V256 224 184c0-24.3 12.1-45.8 30.5-58.9C98.3 135.9 96 147.7 96 160v64zM560 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM166.6 166.6c-4.2-4.2-6.6-10-6.6-16c0-12.5 10.1-22.6 22.6-22.6H361.4c12.5 0 22.6 10.1 22.6 22.6c0 6-2.4 11.8-6.6 16l-23.4 23.4C332.2 211.8 302.7 224 272 224s-60.2-12.2-81.9-33.9l-23.4-23.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cpanel\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f388\",\n    \"label\": \"cPanel\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M210.3 220.2c-5.6-24.8-26.9-41.2-51-41.2h-37c-7.1 0-12.5 4.5-14.3 10.9L73.1 320l24.7-.1c6.8 0 12.3-4.5 14.2-10.7l25.8-95.7h19.8c8.4 0 16.2 5.6 18.3 14.8 2.5 10.9-5.9 22.6-18.3 22.6h-10.3c-7 0-12.5 4.6-14.3 10.8l-6.4 23.8h32c37.2 0 58.3-36.2 51.7-65.3zm-156.5 28h18.6c6.9 0 12.4-4.4 14.3-10.9l6.2-23.6h-40C30 213.7 9 227.8 1.7 254.8-7 288.6 18.5 320 52 320h12.4l7.1-26.1c1.2-4.4-2.2-8.3-6.4-8.3H53.8c-24.7 0-24.9-37.4 0-37.4zm247.5-34.8h-77.9l-3.5 13.4c-2.4 9.6 4.5 18.5 14.2 18.5h57.5c4 0 2.4 4.3 2.1 5.3l-8.6 31.8c-.4 1.4-.9 5.3-5.5 5.3h-34.9c-5.3 0-5.3-7.9 0-7.9h21.6c6.8 0 12.3-4.6 14.2-10.8l3.5-13.2h-48.4c-39.2 0-43.6 63.8-.7 63.8l57.5.2c11.2 0 20.6-7.2 23.4-17.8l14-51.8c4.8-19.2-9.7-36.8-28.5-36.8zM633.1 179h-18.9c-4.9 0-9.2 3.2-10.4 7.9L568.2 320c20.7 0 39.8-13.8 44.9-34.5l26.5-98.2c1.2-4.3-2-8.3-6.5-8.3zm-236.3 34.7v.1h-48.3l-26.2 98c-1.2 4.4 2.2 8.3 6.4 8.3h18.9c4.8 0 9.2-3 10.4-7.8l17.2-64H395c12.5 0 21.4 11.8 18.1 23.4l-10.6 40c-1.2 4.3 1.9 8.3 6.4 8.3H428c4.6 0 9.1-2.9 10.3-7.8l8.8-33.1c9-33.1-15.9-65.4-50.3-65.4zm98.3 74.6c-3.6 0-6-3.4-5.1-6.7l8-30c.9-3.9 3.7-6 7.8-6h32.9c2.6 0 4.6 2.4 3.9 5.1l-.7 2.6c-.6 2-1.9 3-3.9 3h-21.6c-7 0-12.6 4.6-14.2 10.8l-3.5 13h53.4c10.5 0 20.3-6.6 23.2-17.6l3.2-12c4.9-19.1-9.3-36.8-28.3-36.8h-47.3c-17.9 0-33.8 12-38.6 29.6l-10.8 40c-5 17.7 8.3 36.7 28.3 36.7h66.7c6.8 0 12.3-4.5 14.2-10.7l5.7-21z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"5.0.11\", \"5.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f25e\",\n    \"label\": \"Creative Commons\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l30.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-by\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4e7\",\n    \"label\": \"Creative Commons Attribution\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-nc\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4e8\",\n    \"label\": \"Creative Commons Noncommercial\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-nc-eu\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4e9\",\n    \"label\": \"Creative Commons Noncommercial (Euro Sign)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-nc-jp\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4ea\",\n    \"label\": \"Creative Commons Noncommercial (Yen Sign)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-nd\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4eb\",\n    \"label\": \"Creative Commons No Derivative Works\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-pd\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4ec\",\n    \"label\": \"Creative Commons Public Domain\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-pd-alt\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4ed\",\n    \"label\": \"Alternate Creative Commons Public Domain\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C104.7 8 0 123.1 0 256c0 138.5 113.6 248 247.6 248C377.5 504 496 403.1 496 256 496 118.1 389.4 8 247.6 8zm.8 450.8c-112.5 0-203.7-93-203.7-202.8 0-105.4 85.5-203.3 203.7-203.3 112.6 0 202.9 89.5 202.8 203.3 0 121.7-99.6 202.8-202.8 202.8zM316.7 186h-53.2v137.2h53.2c21.4 0 70-5.1 70-68.6 0-63.4-48.6-68.6-70-68.6zm.8 108.5h-19.9v-79.7l19.4-.1c3.8 0 35-2.1 35 39.9 0 24.6-10.5 39.9-34.5 39.9zM203.7 186h-68.2v137.3h34.6V279h27c54.1 0 57.1-37.5 57.1-46.5 0-31-16.8-46.5-50.5-46.5zm-4.9 67.3h-29.2v-41.6h28.3c30.9 0 28.8 41.6.9 41.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-remix\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4ee\",\n    \"label\": \"Creative Commons Remix\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-sa\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4ef\",\n    \"label\": \"Creative Commons Share Alike\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-sampling\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f0\",\n    \"label\": \"Creative Commons Sampling\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.6-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-sampling-plus\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f1\",\n    \"label\": \"Creative Commons Sampling +\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-share\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f2\",\n    \"label\": \"Creative Commons Share\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"creative-commons-zero\": {\n    \"changes\": [\"5.0.11\", \"5.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f3\",\n    \"label\": \"Creative Commons CC0\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm-.4 60.5c-81.9 0-102.5 77.3-102.5 142.8 0 65.5 20.6 142.8 102.5 142.8S350.5 321.5 350.5 256c0-65.5-20.6-142.8-102.5-142.8zm0 53.9c3.3 0 6.4.5 9.2 1.2 5.9 5.1 8.8 12.1 3.1 21.9l-54.5 100.2c-1.7-12.7-1.9-25.1-1.9-34.4 0-28.8 2-88.9 44.1-88.9zm40.8 46.2c2.9 15.4 3.3 31.4 3.3 42.7 0 28.9-2 88.9-44.1 88.9-13.5 0-32.6-7.7-20.1-26.4l60.9-105.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"credit-card\": {\n    \"aliases\": {\n      \"names\": [\"credit-card-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4b3\", \"f283\"],\n        \"secondary\": [\"10f09d\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"card\",\n        \"checkout\",\n        \"credit\",\n        \"credit card\",\n        \"credit-card-alt\",\n        \"debit\",\n        \"money\",\n        \"payment\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f09d\",\n    \"label\": \"Credit Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96v32H576V96c0-35.3-28.7-64-64-64H64zM576 224H0V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V224zM112 352h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm112 16c0-8.8 7.2-16 16-16H368c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96v32H576V96c0-35.3-28.7-64-64-64H64zM576 224H0V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V224zM112 352h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm112 16c0-8.8 7.2-16 16-16H368c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M512 80c8.8 0 16 7.2 16 16v32H48V96c0-8.8 7.2-16 16-16H512zm16 144V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V224H528zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm56 304c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H120zm128 0c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24H248z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M512 80c8.8 0 16 7.2 16 16v32H48V96c0-8.8 7.2-16 16-16H512zm16 144V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V224H528zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm56 304c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H120zm128 0c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24H248z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"critical-role\": {\n    \"changes\": [\"5.4.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"game\",\n        \"gaming\",\n        \"tabletop\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f6c9\",\n    \"label\": \"Critical Role\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M225.82 0c.26.15 216.57 124.51 217.12 124.72 3 1.18 3.7 3.46 3.7 6.56q-.11 125.17 0 250.36a5.88 5.88 0 0 1-3.38 5.78c-21.37 12-207.86 118.29-218.93 124.58h-3C142 466.34 3.08 386.56 2.93 386.48a3.29 3.29 0 0 1-1.88-3.24c0-.87 0-225.94-.05-253.1a5 5 0 0 1 2.93-4.93C27.19 112.11 213.2 6 224.07 0zM215.4 20.42l-.22-.16Q118.06 75.55 21 130.87c0 .12.08.23.13.35l30.86 11.64c-7.71 6-8.32 6-10.65 5.13-.1 0-24.17-9.28-26.8-10v230.43c.88-1.41 64.07-110.91 64.13-111 1.62-2.82 3-1.92 9.12-1.52 1.4.09 1.48.22.78 1.42-41.19 71.33-36.4 63-67.48 116.94-.81 1.4-.61 1.13 1.25 1.13h186.5c1.44 0 1.69-.23 1.7-1.64v-8.88c0-1.34 2.36-.81-18.37-1-7.46-.07-14.14-3.22-21.38-12.7-7.38-9.66-14.62-19.43-21.85-29.21-2.28-3.08-3.45-2.38-16.76-2.38-1.75 0-1.78 0-1.76 1.82.29 26.21.15 25.27 1 32.66.52 4.37 2.16 4.2 9.69 4.81 3.14.26 3.88 4.08.52 4.92-1.57.39-31.6.51-33.67-.1a2.42 2.42 0 0 1 .3-4.73c3.29-.76 6.16.81 6.66-4.44 1.3-13.66 1.17-9 1.1-79.42 0-10.82-.35-12.58-5.36-13.55-1.22-.24-3.54-.16-4.69-.55-2.88-1-2-4.84 1.77-4.85 33.67 0 46.08-1.07 56.06 4.86 7.74 4.61 12 11.48 12.51 20.4.88 14.59-6.51 22.35-15 32.59a1.46 1.46 0 0 0 0 2.22c2.6 3.25 5 6.63 7.71 9.83 27.56 33.23 24.11 30.54 41.28 33.06.89.13 1-.42 1-1.15v-11c0-1 .32-1.43 1.41-1.26a72.37 72.37 0 0 0 23.58-.3c1.08-.15 1.5.2 1.48 1.33 0 .11.88 26.69.87 26.8-.05 1.52.67 1.62 1.89 1.62h186.71Q386.51 304.6 346 234.33c2.26-.66-.4 0 6.69-1.39 2-.39 2.05-.41 3.11 1.44 7.31 12.64 77.31 134 77.37 134.06V138c-1.72.5-103.3 38.72-105.76 39.68-1.08.42-1.55.2-1.91-.88-.63-1.9-1.34-3.76-2.09-5.62-.32-.79-.09-1.13.65-1.39.1 0 95.53-35.85 103-38.77-65.42-37.57-130.56-75-196-112.6l86.82 150.39-.28.33c-9.57-.9-10.46-1.6-11.8-3.94-1-1.69-73.5-127.71-82-142.16-9.1 14.67-83.56 146.21-85.37 146.32-2.93.17-5.88.08-9.25.08q43.25-74.74 86.18-149zm51.93 129.92a37.68 37.68 0 0 0 5.54-.85c1.69-.3 2.53.2 2.6 1.92 0 .11.07 19.06-.86 20.45s-1.88 1.22-2.6-.19c-5-9.69 6.22-9.66-39.12-12-.7 0-1 .23-1 .93 0 .13 3.72 122 3.73 122.11 0 .89.52 1.2 1.21 1.51a83.92 83.92 0 0 1 8.7 4.05c7.31 4.33 11.38 10.84 12.41 19.31 1.44 11.8-2.77 35.77-32.21 37.14-2.75.13-28.26 1.08-34.14-23.25-4.66-19.26 8.26-32.7 19.89-36.4a2.45 2.45 0 0 0 2-2.66c.1-5.63 3-107.1 3.71-121.35.05-1.08-.62-1.16-1.35-1.15-32.35.52-36.75-.34-40.22 8.52-2.42 6.18-4.14 1.32-3.95.23q1.59-9 3.31-18c.4-2.11 1.43-2.61 3.43-1.86 5.59 2.11 6.72 1.7 37.25 1.92 1.73 0 1.78-.08 1.82-1.85.68-27.49.58-22.59 1-29.55a2.69 2.69 0 0 0-1.63-2.8c-5.6-2.91-8.75-7.55-8.9-13.87-.35-14.81 17.72-21.67 27.38-11.51 6.84 7.19 5.8 18.91-2.45 24.15a4.35 4.35 0 0 0-2.22 4.34c0 .59-.11-4.31 1 30.05 0 .9.43 1.12 1.24 1.11.1 0 23-.09 34.47-.37zM68.27 141.7c19.84-4.51 32.68-.56 52.49 1.69 2.76.31 3.74 1.22 3.62 4-.21 5-1.16 22.33-1.24 23.15a2.65 2.65 0 0 1-1.63 2.34c-4.06 1.7-3.61-4.45-4-7.29-3.13-22.43-73.87-32.7-74.63 25.4-.31 23.92 17 53.63 54.08 50.88 27.24-2 19-20.19 24.84-20.47a2.72 2.72 0 0 1 3 3.36c-1.83 10.85-3.42 18.95-3.45 19.15-1.54 9.17-86.7 22.09-93.35-42.06-2.71-25.85 10.44-53.37 40.27-60.15zm80 87.67h-19.49a2.57 2.57 0 0 1-2.66-1.79c2.38-3.75 5.89.92 5.86-6.14-.08-25.75.21-38 .23-40.1 0-3.42-.53-4.65-3.32-4.94-7-.72-3.11-3.37-1.11-3.38 11.84-.1 22.62-.18 30.05.72 8.77 1.07 16.71 12.63 7.93 22.62-2 2.25-4 4.42-6.14 6.73.95 1.15 6.9 8.82 17.28 19.68 2.66 2.78 6.15 3.51 9.88 3.13a2.21 2.21 0 0 0 2.23-2.12c.3-3.42.26 4.73.45-40.58 0-5.65-.34-6.58-3.23-6.83-3.95-.35-4-2.26-.69-3.37l19.09-.09c.32 0 4.49.53 1 3.38 0 .05-.16 0-.24 0-3.61.26-3.94 1-4 4.62-.27 43.93.07 40.23.41 42.82.11.84.27 2.23 5.1 2.14 2.49 0 3.86 3.37 0 3.4-10.37.08-20.74 0-31.11.07-10.67 0-13.47-6.2-24.21-20.82-1.6-2.18-8.31-2.36-8.2-.37.88 16.47 0 17.78 4 17.67 4.75-.1 4.73 3.57.83 3.55zm275-10.15c-1.21 7.13.17 10.38-5.3 10.34-61.55-.42-47.82-.22-50.72-.31a18.4 18.4 0 0 1-3.63-.73c-2.53-.6 1.48-1.23-.38-5.6-1.43-3.37-2.78-6.78-4.11-10.19a1.94 1.94 0 0 0-2-1.44 138 138 0 0 0-14.58.07 2.23 2.23 0 0 0-1.62 1.06c-1.58 3.62-3.07 7.29-4.51 11-1.27 3.23 7.86 1.32 12.19 2.16 3 .57 4.53 3.72.66 3.73H322.9c-2.92 0-3.09-3.15-.74-3.21a6.3 6.3 0 0 0 5.92-3.47c1.5-3 2.8-6 4.11-9.09 18.18-42.14 17.06-40.17 18.42-41.61a1.83 1.83 0 0 1 3 0c2.93 3.34 18.4 44.71 23.62 51.92 2 2.7 5.74 2 6.36 2 3.61.13 4-1.11 4.13-4.29.09-1.87.08 1.17.07-41.24 0-4.46-2.36-3.74-5.55-4.27-.26 0-2.56-.63-.08-3.06.21-.2-.89-.24 21.7-.15 2.32 0 5.32 2.75-1.21 3.45a2.56 2.56 0 0 0-2.66 2.83c-.07 1.63-.19 38.89.29 41.21a3.06 3.06 0 0 0 3.23 2.43c13.25.43 14.92.44 16-3.41 1.67-5.78 4.13-2.52 3.73-.19zm-104.72 64.37c-4.24 0-4.42-3.39-.61-3.41 35.91-.16 28.11.38 37.19-.65 1.68-.19 2.38.24 2.25 1.89-.26 3.39-.64 6.78-1 10.16-.25 2.16-3.2 2.61-3.4-.15-.38-5.31-2.15-4.45-15.63-5.08-1.58-.07-1.64 0-1.64 1.52V304c0 1.65 0 1.6 1.62 1.47 3.12-.25 10.31.34 15.69-1.52.47-.16 3.3-1.79 3.07 1.76 0 .21-.76 10.35-1.18 11.39-.53 1.29-1.88 1.51-2.58.32-1.17-2 0-5.08-3.71-5.3-15.42-.9-12.91-2.55-12.91 6 0 12.25-.76 16.11 3.89 16.24 16.64.48 14.4 0 16.43-5.71.84-2.37 3.5-1.77 3.18.58-.44 3.21-.85 6.43-1.23 9.64 0 .36-.16 2.4-4.66 2.39-37.16-.08-34.54-.19-35.21-.31-2.72-.51-2.2-3 .22-3.45 1.1-.19 4 .54 4.16-2.56 2.44-56.22-.07-51.34-3.91-51.33zm-.41-109.52c2.46.61 3.13 1.76 2.95 4.65-.33 5.3-.34 9-.55 9.69-.66 2.23-3.15 2.12-3.34-.27-.38-4.81-3.05-7.82-7.57-9.15-26.28-7.73-32.81 15.46-27.17 30.22 5.88 15.41 22 15.92 28.86 13.78 5.92-1.85 5.88-6.5 6.91-7.58 1.23-1.3 2.25-1.84 3.12 1.1 0 .1.57 11.89-6 12.75-1.6.21-19.38 3.69-32.68-3.39-21-11.19-16.74-35.47-6.88-45.33 14-14.06 39.91-7.06 42.32-6.47zM289.8 280.14c3.28 0 3.66 3 .16 3.43-2.61.32-5-.42-5 5.46 0 2-.19 29.05.4 41.45.11 2.29 1.15 3.52 3.44 3.65 22 1.21 14.95-1.65 18.79-6.34 1.83-2.24 2.76.84 2.76 1.08.35 13.62-4 12.39-5.19 12.4l-38.16-.19c-1.93-.23-2.06-3-.42-3.38 2-.48 4.94.4 5.13-2.8 1-15.87.57-44.65.34-47.81-.27-3.77-2.8-3.27-5.68-3.71-2.47-.38-2-3.22.34-3.22 1.45-.02 17.97-.03 23.09-.02zm-31.63-57.79c.07 4.08 2.86 3.46 6 3.58 2.61.1 2.53 3.41-.07 3.43-6.48 0-13.7 0-21.61-.06-3.84 0-3.38-3.35 0-3.37 4.49 0 3.24 1.61 3.41-45.54 0-5.08-3.27-3.54-4.72-4.23-2.58-1.23-1.36-3.09.41-3.15 1.29 0 20.19-.41 21.17.21s1.87 1.65-.42 2.86c-1 .52-3.86-.28-4.15 2.47 0 .21-.82 1.63-.07 43.8zm-36.91 274.27a2.93 2.93 0 0 0 3.26 0c17-9.79 182-103.57 197.42-112.51-.14-.43 11.26-.18-181.52-.27-1.22 0-1.57.37-1.53 1.56 0 .1 1.25 44.51 1.22 50.38a28.33 28.33 0 0 1-1.36 7.71c-.55 1.83.38-.5-13.5 32.23-.73 1.72-1 2.21-2-.08-4.19-10.34-8.28-20.72-12.57-31a23.6 23.6 0 0 1-2-10.79c.16-2.46.8-16.12 1.51-48 0-1.95 0-2-2-2h-183c2.58 1.63 178.32 102.57 196 112.76zm-90.9-188.75c0 2.4.36 2.79 2.76 3 11.54 1.17 21 3.74 25.64-7.32 6-14.46 2.66-34.41-12.48-38.84-2-.59-16-2.76-15.94 1.51.05 8.04.01 11.61.02 41.65zm105.75-15.05c0 2.13 1.07 38.68 1.09 39.13.34 9.94-25.58 5.77-25.23-2.59.08-2 1.37-37.42 1.1-39.43-14.1 7.44-14.42 40.21 6.44 48.8a17.9 17.9 0 0 0 22.39-7.07c4.91-7.76 6.84-29.47-5.43-39a2.53 2.53 0 0 1-.36.12zm-12.28-198c-9.83 0-9.73 14.75-.07 14.87s10.1-14.88.07-14.91zm-80.15 103.83c0 1.8.41 2.4 2.17 2.58 13.62 1.39 12.51-11 12.16-13.36-1.69-11.22-14.38-10.2-14.35-7.81.05 4.5-.03 13.68.02 18.59zm212.32 6.4l-6.1-15.84c-2.16 5.48-4.16 10.57-6.23 15.84z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"crop\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f125\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"frame\", \"mask\", \"resize\", \"shrink\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f125\",\n    \"label\": \"Crop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 109.3l54.6-54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L402.7 64 160 64v64l178.7 0L128 338.7V32c0-17.7-14.3-32-32-32S64 14.3 64 32V64H32C14.3 64 0 78.3 0 96s14.3 32 32 32H64V384c0 35.3 28.7 64 64 64H352V384H173.3L384 173.3 384 480c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H448l0-274.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 109.3l54.6-54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L402.7 64 160 64v64l178.7 0L128 338.7V32c0-17.7-14.3-32-32-32S64 14.3 64 32V64H32C14.3 64 0 78.3 0 96s14.3 32 32 32H64V384c0 35.3 28.7 64 64 64H352V384H173.3L384 173.3 384 480c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H448l0-274.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"crop-simple\": {\n    \"aliases\": {\n      \"names\": [\"crop-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f565\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"frame\", \"mask\", \"resize\", \"shrink\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f565\",\n    \"label\": \"Crop Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32V64H32C14.3 64 0 78.3 0 96s14.3 32 32 32H64V384c0 35.3 28.7 64 64 64H352V384H128V32zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H448l0-256c0-35.3-28.7-64-64-64L160 64v64l224 0 0 352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 32c0-17.7-14.3-32-32-32S64 14.3 64 32V64H32C14.3 64 0 78.3 0 96s14.3 32 32 32H64V384c0 35.3 28.7 64 64 64H352V384H128V32zM384 480c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H448l0-256c0-35.3-28.7-64-64-64L160 64v64l224 0 0 352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cross\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f547\", \"271d\"],\n        \"secondary\": [\"10f654\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Christian\",\n        \"Heavy Latin Cross\",\n        \"catholicism\",\n        \"christianity\",\n        \"church\",\n        \"cross\",\n        \"jesus\",\n        \"latin cross\",\n        \"religion\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f654\",\n    \"label\": \"Cross\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M176 0c-26.5 0-48 21.5-48 48v80H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h80V464c0 26.5 21.5 48 48 48h32c26.5 0 48-21.5 48-48V256h80c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H256V48c0-26.5-21.5-48-48-48H176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M176 0c-26.5 0-48 21.5-48 48v80H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h80V464c0 26.5 21.5 48 48 48h32c26.5 0 48-21.5 48-48V256h80c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H256V48c0-26.5-21.5-48-48-48H176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"crosshairs\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f05b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"aim\", \"bullseye\", \"gpd\", \"picker\", \"position\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f05b\",\n    \"label\": \"Crosshairs\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"crow\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f520\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bird\", \"bullfrog\", \"fauna\", \"halloween\", \"holiday\", \"toad\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f520\",\n    \"label\": \"Crow\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M456 0c-48.6 0-88 39.4-88 88v29.2L12.5 390.6c-14 10.8-16.6 30.9-5.9 44.9s30.9 16.6 44.9 5.9L126.1 384H259.2l46.6 113.1c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3L311.1 384H352c1.1 0 2.1 0 3.2 0l46.6 113.2c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3l-42-102C484.9 354.1 544 280 544 192V128v-8l80.5-20.1c8.6-2.1 13.8-10.8 11.6-19.4C629 52 603.4 32 574 32H523.9C507.7 12.5 483.3 0 456 0zm0 64a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M456 0c-48.6 0-88 39.4-88 88v29.2L12.5 390.6c-14 10.8-16.6 30.9-5.9 44.9s30.9 16.6 44.9 5.9L126.1 384H259.2l46.6 113.1c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3L311.1 384H352c1.1 0 2.1 0 3.2 0l46.6 113.2c5 12.3 19.1 18.1 31.3 13.1s18.1-19.1 13.1-31.3l-42-102C484.9 354.1 544 280 544 192V128v-8l80.5-20.1c8.6-2.1 13.8-10.8 11.6-19.4C629 52 603.4 32 574 32H523.9C507.7 12.5 483.3 0 456 0zm0 64a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"crown\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f451\"],\n        \"secondary\": [\"10f521\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"award\",\n        \"clothing\",\n        \"crown\",\n        \"favorite\",\n        \"king\",\n        \"queen\",\n        \"royal\",\n        \"tiara\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f521\",\n    \"label\": \"Crown\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6H426.6c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6H426.6c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"crutch\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7f7\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cane\", \"injury\", \"mobility\", \"wheelchair\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7f7\",\n    \"label\": \"Crutch\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M297.4 9.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0zm-96 144l-34.8 34.8c-12.9 12.9-21.9 29.2-25.8 47.1L116.8 342.9c-1.3 5.9-4.3 11.4-8.6 15.7L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l98.8-98.8c4.3-4.3 9.7-7.3 15.7-8.6l107.6-23.9c17.8-4 34.1-12.9 47.1-25.8l34.7-34.7c0 0 .1-.1 .1-.1s.1-.1 .1-.1l74.6-74.6-45.3-45.3L336 242.7 269.3 176l52.1-52.1L276.1 78.6l-74.7 74.7zM224 221.3L290.7 288l-12.2 12.2c-4.3 4.3-9.7 7.3-15.7 8.6l-76.7 17 17-76.7c1.3-5.9 4.3-11.4 8.6-15.7L224 221.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M297.4 9.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0zm-96 144l-34.8 34.8c-12.9 12.9-21.9 29.2-25.8 47.1L116.8 342.9c-1.3 5.9-4.3 11.4-8.6 15.7L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l98.8-98.8c4.3-4.3 9.7-7.3 15.7-8.6l107.6-23.9c17.8-4 34.1-12.9 47.1-25.8l34.7-34.7c0 0 .1-.1 .1-.1s.1-.1 .1-.1l74.6-74.6-45.3-45.3L336 242.7 269.3 176l52.1-52.1L276.1 78.6l-74.7 74.7zM224 221.3L290.7 288l-12.2 12.2c-4.3 4.3-9.7 7.3-15.7 8.6l-76.7 17 17-76.7c1.3-5.9 4.3-11.4 8.6-15.7L224 221.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cruzeiro-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Cruzeiro Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e152\",\n    \"label\": \"Cruzeiro Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 256c0-88.4 71.6-160 160-160c41 0 78.3 15.4 106.7 40.7c13.2 11.8 33.4 10.7 45.2-2.5s10.7-33.4-2.5-45.2c-39.6-35.5-92-57-149.3-57C132.3 32 32 132.3 32 256s100.3 224 224 224c57.4 0 109.7-21.6 149.3-57c13.2-11.8 14.3-32 2.5-45.2s-32-14.3-45.2-2.5C334.3 400.6 297 416 256 416V320v-8.7c0-12.8 10.4-23.3 23.3-23.3c4.6 0 9.1 1.4 12.9 3.9l10.1 6.7c14.7 9.8 34.6 5.8 44.4-8.9s5.8-34.6-8.9-44.4l-10.1-6.7c-14.3-9.6-31.2-14.7-48.4-14.7c-12.4 0-24.2 2.6-34.9 7.3c-5.5-4.5-12.6-7.3-20.3-7.3c-17.7 0-32 14.3-32 32v55.3V320v82.7C135.5 378 96 321.6 96 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 256c0-88.4 71.6-160 160-160c41 0 78.3 15.4 106.7 40.7c13.2 11.8 33.4 10.7 45.2-2.5s10.7-33.4-2.5-45.2c-39.6-35.5-92-57-149.3-57C132.3 32 32 132.3 32 256s100.3 224 224 224c57.4 0 109.7-21.6 149.3-57c13.2-11.8 14.3-32 2.5-45.2s-32-14.3-45.2-2.5C334.3 400.6 297 416 256 416V320v-8.7c0-12.8 10.4-23.3 23.3-23.3c4.6 0 9.1 1.4 12.9 3.9l10.1 6.7c14.7 9.8 34.6 5.8 44.4-8.9s5.8-34.6-8.9-44.4l-10.1-6.7c-14.3-9.6-31.2-14.7-48.4-14.7c-12.4 0-24.2 2.6-34.9 7.3c-5.5-4.5-12.6-7.3-20.3-7.3c-17.7 0-32 14.3-32 32v55.3V320v82.7C135.5 378 96 321.6 96 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"css3\": {\n    \"changes\": [\"3.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"code\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f13c\",\n    \"label\": \"CSS 3 Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"css3-alt\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f38b\",\n    \"label\": \"Alternate CSS3 Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"cube\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1b2\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"3d\", \"block\", \"dice\", \"package\", \"square\", \"tesseract\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1b2\",\n    \"label\": \"Cube\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6C495 83.4 512 107.5 512 134.6V377.4c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4V134.6c0-27 17-51.2 42.5-60.3l192-68.6zM256 66L82.3 128 256 190l173.7-62L256 66zm32 368.6l160-57.1v-188L288 246.6v188z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M234.5 5.7c13.9-5 29.1-5 43.1 0l192 68.6C495 83.4 512 107.5 512 134.6V377.4c0 27-17 51.2-42.5 60.3l-192 68.6c-13.9 5-29.1 5-43.1 0l-192-68.6C17 428.6 0 404.5 0 377.4V134.6c0-27 17-51.2 42.5-60.3l192-68.6zM256 66L82.3 128 256 190l173.7-62L256 66zm32 368.6l160-57.1v-188L288 246.6v188z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cubes\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1b3\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"3d\",\n        \"block\",\n        \"dice\",\n        \"package\",\n        \"pyramid\",\n        \"square\",\n        \"stack\",\n        \"tesseract\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1b3\",\n    \"label\": \"Cubes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M290.8 48.6l78.4 29.7L288 109.5 206.8 78.3l78.4-29.7c1.8-.7 3.8-.7 5.7 0zM136 92.5V204.7c-1.3 .4-2.6 .8-3.9 1.3l-96 36.4C14.4 250.6 0 271.5 0 294.7V413.9c0 22.2 13.1 42.3 33.5 51.3l96 42.2c14.4 6.3 30.7 6.3 45.1 0L288 457.5l113.5 49.9c14.4 6.3 30.7 6.3 45.1 0l96-42.2c20.3-8.9 33.5-29.1 33.5-51.3V294.7c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-1.3-.5-2.6-.9-3.9-1.3V92.5c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-12.8-4.8-26.9-4.8-39.7 0l-96 36.4C150.4 48.4 136 69.3 136 92.5zM392 210.6l-82.4 31.2V152.6L392 121v89.6zM154.8 250.9l78.4 29.7L152 311.7 70.8 280.6l78.4-29.7c1.8-.7 3.8-.7 5.7 0zm18.8 204.4V354.8L256 323.2v95.9l-82.4 36.2zM421.2 250.9c1.8-.7 3.8-.7 5.7 0l78.4 29.7L424 311.7l-81.2-31.1 78.4-29.7zM523.2 421.2l-77.6 34.1V354.8L528 323.2v90.7c0 3.2-1.9 6-4.8 7.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M290.8 48.6l78.4 29.7L288 109.5 206.8 78.3l78.4-29.7c1.8-.7 3.8-.7 5.7 0zM136 92.5V204.7c-1.3 .4-2.6 .8-3.9 1.3l-96 36.4C14.4 250.6 0 271.5 0 294.7V413.9c0 22.2 13.1 42.3 33.5 51.3l96 42.2c14.4 6.3 30.7 6.3 45.1 0L288 457.5l113.5 49.9c14.4 6.3 30.7 6.3 45.1 0l96-42.2c20.3-8.9 33.5-29.1 33.5-51.3V294.7c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-1.3-.5-2.6-.9-3.9-1.3V92.5c0-23.3-14.4-44.1-36.1-52.4l-96-36.4c-12.8-4.8-26.9-4.8-39.7 0l-96 36.4C150.4 48.4 136 69.3 136 92.5zM392 210.6l-82.4 31.2V152.6L392 121v89.6zM154.8 250.9l78.4 29.7L152 311.7 70.8 280.6l78.4-29.7c1.8-.7 3.8-.7 5.7 0zm18.8 204.4V354.8L256 323.2v95.9l-82.4 36.2zM421.2 250.9c1.8-.7 3.8-.7 5.7 0l78.4 29.7L424 311.7l-81.2-31.1 78.4-29.7zM523.2 421.2l-77.6 34.1V354.8L528 323.2v90.7c0 3.2-1.9 6-4.8 7.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cubes-stacked\": {\n    \"changes\": [\"6.1.0\", \"6.1.1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blocks\", \"cubes\", \"sugar\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e6\",\n    \"label\": \"Cubes Stacked\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M192 64v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H224c-17.7 0-32 14.3-32 32zM82.7 207c-15.3 8.8-20.5 28.4-11.7 43.7l32 55.4c8.8 15.3 28.4 20.5 43.7 11.7l55.4-32c15.3-8.8 20.5-28.4 11.7-43.7l-32-55.4c-8.8-15.3-28.4-20.5-43.7-11.7L82.7 207zM288 192c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32H288zm64 160c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32H352zM160 384v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32zM32 352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M192 64v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H224c-17.7 0-32 14.3-32 32zM82.7 207c-15.3 8.8-20.5 28.4-11.7 43.7l32 55.4c8.8 15.3 28.4 20.5 43.7 11.7l55.4-32c15.3-8.8 20.5-28.4 11.7-43.7l-32-55.4c-8.8-15.3-28.4-20.5-43.7-11.7L82.7 207zM288 192c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32H288zm64 160c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32H352zM160 384v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32zM32 352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"cuttlefish\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f38c\",\n    \"label\": \"Cuttlefish\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 440 512\\\"><path d=\\\"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 440, 512],\n        \"width\": 440,\n        \"height\": 512,\n        \"path\": \"M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"d\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"64\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter D\", \"Latin Small Letter D\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"44\",\n    \"label\": \"D\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32h96c123.7 0 224 100.3 224 224s-100.3 224-224 224H64c-35.3 0-64-28.7-64-64V96zm160 0H64V416h96c88.4 0 160-71.6 160-160s-71.6-160-160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32h96c123.7 0 224 100.3 224 224s-100.3 224-224 224H64c-35.3 0-64-28.7-64-64V96zm160 0H64V416h96c88.4 0 160-71.6 160-160s-71.6-160-160-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"d-and-d\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f38d\",\n    \"label\": \"Dungeons & Dragons\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.6-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"d-and-d-beyond\": {\n    \"changes\": [\"5.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"gaming\",\n        \"tabletop\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f6ca\",\n    \"label\": \"D&D Beyond\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M313.8 241.5c13.8 0 21-10.1 24.8-17.9-1-1.1-5-4.2-7.4-6.6-2.4 4.3-8.2 10.7-13.9 10.7-10.2 0-15.4-14.7-3.2-26.6-.5-.2-4.3-1.8-8 2.4 0-3 1-5.1 2.1-6.6-3.5 1.3-9.8 5.6-11.4 7.9.2-5.8 1.6-7.5.6-9l-.2-.2s-8.5 5.6-9.3 14.7c0 0 1.1-1.6 2.1-1.9.6-.3 1.3 0 .6 1.9-.2.6-5.8 15.7 5.1 26-.6-1.6-1.9-7.6 2.4-1.9-.3.1 5.8 7.1 15.7 7.1zm52.4-21.1c0-4-4.9-4.4-5.6-4.5 2 3.9.9 7.5.2 9 2.5-.4 5.4-1.6 5.4-4.5zm10.3 5.2c0-6.4-6.2-11.4-13.5-10.7 8 1.3 5.6 13.8-5 11.4 3.7-2.6 3.2-9.9-1.3-12.5 1.4 4.2-3 8.2-7.4 4.6-2.4-1.9-8-6.6-10.6-8.6-2.4-2.1-5.5-1-6.6-1.8-1.3-1.1-.5-3.8-2.2-5-1.6-.8-3-.3-4.8-1-1.6-.6-2.7-1.9-2.6-3.5-2.5 4.4 3.4 6.3 4.5 8.5 1 1.9-.8 4.8 4 8.5 14.8 11.6 9.1 8 10.4 18.1.6 4.3 4.2 6.7 6.4 7.4-2.1-1.9-2.9-6.4 0-9.3 0 13.9 19.2 13.3 23.1 6.4-2.4 1.1-7-.2-9-1.9 7.7 1 14.2-4.1 14.6-10.6zm-39.4-18.4c2 .8 1.6.7 6.4 4.5 10.2-24.5 21.7-15.7 22-15.5 2.2-1.9 9.8-3.8 13.8-2.7-2.4-2.7-7.5-6.2-13.3-6.2-4.7 0-7.4 2.2-8 1.3-.8-1.4 3.2-3.4 3.2-3.4-5.4.2-9.6 6.7-11.2 5.9-1.1-.5 1.4-3.7 1.4-3.7-5.1 2.9-9.3 9.1-10.2 13 4.6-5.8 13.8-9.8 19.7-9-10.5.5-19.5 9.7-23.8 15.8zm242.5 51.9c-20.7 0-40 1.3-50.3 2.1l7.4 8.2v77.2l-7.4 8.2c10.4.8 30.9 2.1 51.6 2.1 42.1 0 59.1-20.7 59.1-48.9 0-29.3-23.2-48.9-60.4-48.9zm-15.1 75.6v-53.3c30.1-3.3 46.8 3.8 46.8 26.3 0 25.6-21.4 30.2-46.8 27zM301.6 181c-1-3.4-.2-6.9 1.1-9.4 1 3 2.6 6.4 7.5 9-.5-2.4-.2-5.6.5-8-1.4-5.4 2.1-9.9 6.4-9.9 6.9 0 8.5 8.8 4.7 14.4 2.1 3.2 5.5 5.6 7.7 7.8 3.2-3.7 5.5-9.5 5.5-13.8 0-8.2-5.5-15.9-16.7-16.5-20-.9-20.2 16.6-20 18.9.5 5.2 3.4 7.8 3.3 7.5zm-.4 6c-.5 1.8-7 3.7-10.2 6.9 4.8-1 7-.2 7.8 1.8.5 1.4-.2 3.4-.5 5.6 1.6-1.8 7-5.5 11-6.2-1-.3-3.4-.8-4.3-.8 2.9-3.4 9.3-4.5 12.8-3.7-2.2-.2-6.7 1.1-8.5 2.6 1.6.3 3 .6 4.3 1.1-2.1.8-4.8 3.4-5.8 6.1 7-5 13.1 5.2 7 8.2.8.2 2.7 0 3.5-.5-.3 1.1-1.9 3-3 3.4 2.9 0 7-1.9 8.2-4.6 0 0-1.8.6-2.6-.2s.3-4.3.3-4.3c-2.3 2.9-3.4-1.3-1.3-4.2-1-.3-3.5-.6-4.6-.5 3.2-1.1 10.4-1.8 11.2-.3.6 1.1-1 3.4-1 3.4 4-.5 8.3 1.1 6.7 5.1 2.9-1.4 5.5-5.9 4.8-10.4-.3 1-1.6 2.4-2.9 2.7.2-1.4-1-2.2-1.9-2.6 1.7-9.6-14.6-14.2-14.1-23.9-1 1.3-1.8 5-.8 7.1 2.7 3.2 8.7 6.7 10.1 12.2-2.6-6.4-15.1-11.4-14.6-20.2-1.6 1.6-2.6 7.8-1.3 11 2.4 1.4 4.5 3.8 4.8 6.1-2.2-5.1-11.4-6.1-13.9-12.2-.6 2.2-.3 5 1 6.7 0 0-2.2-.8-7-.6 1.7.6 5.1 3.5 4.8 5.2zm25.9 7.4c-2.7 0-3.5-2.1-4.2-4.3 3.3 1.3 4.2 4.3 4.2 4.3zm38.9 3.7l-1-.6c-1.1-1-2.9-1.4-4.7-1.4-2.9 0-5.8 1.3-7.5 3.4-.8.8-1.4 1.8-2.1 2.6v15.7c3.5 2.6 7.1-2.9 3-7.2 1.5.3 4.6 2.7 5.1 3.2 0 0 2.6-.5 5-.5 2.1 0 3.9.3 5.6 1.1V196c-1.1.5-2.2 1-2.7 1.4zM79.9 305.9c17.2-4.6 16.2-18 16.2-19.9 0-20.6-24.1-25-37-25H3l8.3 8.6v29.5H0l11.4 14.6V346L3 354.6c61.7 0 73.8 1.5 86.4-5.9 6.7-4 9.9-9.8 9.9-17.6 0-5.1 2.6-18.8-19.4-25.2zm-41.3-27.5c20 0 29.6-.8 29.6 9.1v3c0 12.1-19 8.8-29.6 8.8zm0 59.2V315c12.2 0 32.7-2.3 32.7 8.8v4.5h.2c0 11.2-12.5 9.3-32.9 9.3zm101.2-19.3l23.1.2v-.2l14.1-21.2h-37.2v-14.9h52.4l-14.1-21v-.2l-73.5.2 7.4 8.2v77.1l-7.4 8.2h81.2l14.1-21.2-60.1.2zm214.7-60.1c-73.9 0-77.5 99.3-.3 99.3 77.9 0 74.1-99.3.3-99.3zm-.3 77.5c-37.4 0-36.9-55.3.2-55.3 36.8.1 38.8 55.3-.2 55.3zm-91.3-8.3l44.1-66.2h-41.7l6.1 7.2-20.5 37.2h-.3l-21-37.2 6.4-7.2h-44.9l44.1 65.8.2 19.4-7.7 8.2h42.6l-7.2-8.2zm-28.4-151.3c1.6 1.3 2.9 2.4 2.9 6.6v38.8c0 4.2-.8 5.3-2.7 6.4-.1.1-7.5 4.5-7.9 4.6h35.1c10 0 17.4-1.5 26-8.6-.6-5 .2-9.5.8-12 0-.2-1.8 1.4-2.7 3.5 0-5.7 1.6-15.4 9.6-20.5-.1 0-3.7-.8-9 1.1 2-3.1 10-7.9 10.4-7.9-8.2-26-38-22.9-32.2-22.9-30.9 0-32.6.3-39.9-4 .1.8.5 8.2 9.6 14.9zm21.5 5.5c4.6 0 23.1-3.3 23.1 17.3 0 20.7-18.4 17.3-23.1 17.3zm228.9 79.6l7 8.3V312h-.3c-5.4-14.4-42.3-41.5-45.2-50.9h-31.6l7.4 8.5v76.9l-7.2 8.3h39l-7.4-8.2v-47.4h.3c3.7 10.6 44.5 42.9 48.5 55.6h21.3v-85.2l7.4-8.3zm-106.7-96.1c-32.2 0-32.8.2-39.9-4 .1.7.5 8.3 9.6 14.9 3.1 2 2.9 4.3 2.9 9.5 1.8-1.1 3.8-2.2 6.1-3-1.1 1.1-2.7 2.7-3.5 4.5 1-1.1 7.5-5.1 14.6-3.5-1.6.3-4 1.1-6.1 2.9.1 0 2.1-1.1 7.5-.3v-4.3c4.7 0 23.1-3.4 23.1 17.3 0 20.5-18.5 17.3-19.7 17.3 5.7 4.4 5.8 12 2.2 16.3h.3c33.4 0 36.7-27.3 36.7-34 0-3.8-1.1-32-33.8-33.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dailymotion\": {\n    \"changes\": [\"5.12.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e052\",\n    \"label\": \"dailymotion\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M298.93,267a48.4,48.4,0,0,0-24.36-6.21q-19.83,0-33.44,13.27t-13.61,33.42q0,21.16,13.28,34.6t33.43,13.44q20.5,0,34.11-13.78T322,307.47A47.13,47.13,0,0,0,315.9,284,44.13,44.13,0,0,0,298.93,267ZM0,32V480H448V32ZM374.71,405.26h-53.1V381.37h-.67q-15.79,26.2-55.78,26.2-27.56,0-48.89-13.1a88.29,88.29,0,0,1-32.94-35.77q-11.6-22.68-11.59-50.89,0-27.56,11.76-50.22a89.9,89.9,0,0,1,32.93-35.78q21.18-13.09,47.72-13.1a80.87,80.87,0,0,1,29.74,5.21q13.28,5.21,25,17V153l55.79-12.09Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dashcube\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f210\",\n    \"label\": \"DashCube\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"database\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c0\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"computer\", \"development\", \"directory\", \"memory\", \"storage\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1c0\",\n    \"label\": \"Database\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 80v48c0 44.2-100.3 80-224 80S0 172.2 0 128V80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6V288c0 44.2-100.3 80-224 80S0 332.2 0 288V186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6V432c0 44.2-100.3 80-224 80S0 476.2 0 432V346.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 80v48c0 44.2-100.3 80-224 80S0 172.2 0 128V80C0 35.8 100.3 0 224 0S448 35.8 448 80zM393.2 214.7c20.8-7.4 39.9-16.9 54.8-28.6V288c0 44.2-100.3 80-224 80S0 332.2 0 288V186.1c14.9 11.8 34 21.2 54.8 28.6C99.7 230.7 159.5 240 224 240s124.3-9.3 169.2-25.3zM0 346.1c14.9 11.8 34 21.2 54.8 28.6C99.7 390.7 159.5 400 224 400s124.3-9.3 169.2-25.3c20.8-7.4 39.9-16.9 54.8-28.6V432c0 44.2-100.3 80-224 80S0 476.2 0 432V346.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"debian\": {\n    \"changes\": [\"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e60b\",\n    \"label\": \"Debian\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1682957890,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M248.2 .9c-4 .2-8.1 .4-11.4 1.6l-3.4-.5c5.4-.7 10.9-1.1 16.4-1.5c2.4-.2 4.8-.4 7.2-.6c-2.7 .6-5.7 .8-8.8 .9zm132 244.7c3-7.6 5.5-14 5.2-24.4l-4.3 9c4.4-13.2 4-27.1 3.6-40.4c-.2-6-.3-11.8 0-17.4l-1.8-.5c-1.5-45.2-40.6-93.1-75.3-109.4c-30-13.8-76.1-16.2-97.3-5.8c1.3-1.1 4.2-2 6.8-2.7c3.4-1 6.3-1.8 4.3-3c-19.2 1.9-24.9 5.5-31.1 9.4c-4.6 2.9-9.5 6-20.3 8.7c-3.5 3.4 1.7 2 5.8 .9c4.1-1.1 7.2-1.9-.1 2.4c-3.6 1-6.7 1.3-9.7 1.6c-8.3 .8-15.8 1.6-30.7 17c.8 1.3 3.5-.3 5.4-1.4c2.3-1.4 3.4-2-1.7 4.4c-19.1-2.4-60.3 43.7-69.1 59l4.6 .8c-3.2 8-6.8 14.8-10 20.8c-4.3 8.1-7.9 14.9-8.7 21.3c-.4 5.9-1.2 12.9-2 20.3c-3 27.4-6.8 61.3 3.8 73.6l-1.3 13c.6 1.2 1.1 2.3 1.6 3.5c1.2 2.5 2.3 5 3.9 7.4l-3 .2c7 22.2 10.8 22.5 15.1 22.9c4.4 .4 9.3 .9 18.7 24.2c-2.7-.9-5.5-1.9-9.4-7.2c-.5 4.1 5.8 16.3 13.1 25.8l-3.1 3.6c3.2 5.8 6.1 8.1 8.6 10l0 0c.8 .6 1.5 1.1 2.1 1.7c-11.9-6.5 3.2 13.7 11.9 25.2c2.5 3.4 4.5 6 5.1 7l2.4-4.2c-.3 6.1 4.3 13.9 13.1 24.7l7.3-.3c3 6 14 16.7 20.7 17.2l-4.4 5.8c8.1 2.6 10.3 4.3 12.7 6.2c2.6 2.1 5.4 4.3 16.1 8.1l-4.2-7.4c3.5 3 6.2 5.9 8.8 8.7c5.2 5.6 9.9 10.7 19.8 15.4c11.2 3.9 17.1 4.8 23.6 5.9c5.4 .8 11.2 1.8 20.8 4.5c-2.2-.1-4.4-.1-6.7-.2l0 0h0c-16.3-.4-34-.8-46.4-5.2C107.8 480.5 19.5 367.2 26 250.6c-.6-9.9-.3-20.9 0-30.7c.4-13.5 .7-24.8-1.6-28.3l1-3.1c5.3-17.4 11.7-38.2 23.8-62.8l-.1-.2 0-.1 0 0 0 0c.4 .4 3.4 3.4 8.8-5.8c1.3-2.9 2.5-5.8 3.8-8.8l0 0c2.5-6.1 5.1-12.3 8.4-17.9l2.6-.6c1.7-10.1 17-23.8 29.8-35.2l0 0c6.1-5.5 11.6-10.4 14.7-14.1l.7 4.4c17.1-16 45-27.7 66.1-36.6c4.8-2 9.3-3.9 13.3-5.7c-3.4 3.8 2.2 2.7 10 1c4.8-1 10.4-2.1 15.3-2.4c-1.3 .7-2.6 1.4-3.9 2.1l0 0 0 0c-2.7 1.4-5.4 2.8-8 4.6c8.3-2 11.9-1.4 16-.8c3.5 .6 7.3 1.2 14.6 .2c-5.6 .8-12.3 3-11.2 3.8c7.9 .9 12.8-.1 17.2-1c5.6-1.1 10.4-2.1 19.5 .9l-1-4.8c7.5 2.7 13.1 4.4 18 5.9c10 3 17.6 5.3 34.2 14.1c3.2 .2 5.3-.5 7.4-1.2c3.6-1.1 7-2.2 15.3 1.2c.5 .8 .7 1.5 1 2.1c1 2.6 1.7 4.6 14.6 12.2c1.8-.7-3.1-5.1-7-8.7l-.2-.1c32.3 17.3 67.5 54.1 78.2 93.6c-6-11.1-5.2-5.5-4.3 .5c.6 4 1.2 8.1-.2 7.5c4.5 12.1 8.1 24.5 10.4 37.4l-.8-2.9c-3.3-11.8-9.6-34.5-20-49.6c-.4 4.4-2.9 3.9-5.3 3.5c-3.3-.6-6.3-1.2-1.9 12.6c2.6 3.8 3.1 2.4 3.5 1.1c.5-1.5 .9-2.8 4.7 5.2c.1 4.3 1.1 8.5 2.2 13.3l0 0 0 0 0 0 0 0 0 0 0 0c.7 3 1.5 6.2 2.1 9.8c-1.1-.2-2.3-2.2-3.4-4.2l0 0 0 0c-1.4-2.4-2.8-4.7-3.7-3.2c2.4 11.5 6.5 17.4 8 18.3c-.3 .6-.6 .7-1.1 .7c-.8 0-1.8 .1-1.9 5.3c.7 13.7 3.3 12.5 5.3 11.6c.6-.3 1.2-.6 1.7-.4c-.6 2.5-1.6 5.1-2.7 7.9l0 0c-2.8 7.1-6 15.4-3.4 26.1c-.8-3.1-2.1-6.3-3.3-9.3l0 0 0 0c-.5-1.3-1.1-2.6-1.5-3.8c-.6 4.8-.3 8.2-.1 11.3c.4 5.3 .7 10-3 19.9c4.3-14.2 3.8-26.9-.2-20.8c1 11-3.8 20.5-8.1 29.1c-3.6 7.1-6.8 13.5-5.9 19.3l-5.2-7.1c-7.6 11-7 13.3-6.5 15.6c.5 1.9 1 3.8-3.4 10.8c1.7-2.9 1.3-3.6 1-4.2c-.4-.8-.7-1.5 1.7-5.1c-1.6 .1-5.5 3.9-10.1 8.5l0 0c-3.9 3.9-8.5 8.4-12.8 11.8c-37.5 30.1-82.3 34-125.6 17.8l0 0c.2-1-.2-2.1-3.1-4.1c-36.8-28.2-58.5-52.1-50.9-107.5c2.2-1.7 3.7-6.2 5.6-11.6c2.9-8.4 6.5-18.9 14.3-23.9c7.8-17.3 31.3-33.3 56.4-33.7c25.6-1.4 47.2 13.7 58.1 27.9c-19.8-18.4-52.1-24-79.7-10.4c-28.2 12.7-45 43.8-42.5 74.7c.3-.5 .7-.7 1-.9c.6-.5 1.2-.9 1.5-3.4c-.9 60.2 64.8 104.3 112.1 82l.6 1.3c12.7-3.5 15.9-6.5 20.3-10.7c2.2-2.1 4.7-4.5 9-7.4c-.3 .7-1.3 1.7-2.4 2.7c-2.2 2.1-4.6 4.5-1.6 4.6c5.3-1.4 20.1-14.8 30.2-23.8l0 0 0 0c1.6-1.4 3-2.7 4.3-3.9c2-4.3 1.6-5.7 1.3-7.1c-.4-1.6-.8-3.3 2.4-9.6l7.3-3.7c1-2.8 2-5.4 2.9-7.8l0 0zM233.1 321.9a.9 .9 0 1 0 -1.7 0 .9 .9 0 1 0 1.7 0zm-.2 .5l-.2 .4c-.3 .7-.6 1.4-.3 2.4c-12.2-5.7-23.4-14.3-32.6-24.9c4.9 7.1 10.1 14.1 17 19.5c-6.9-2.3-15.2-11.9-21.7-19.4l0 0 0 0c-4.3-5-7.9-9.1-9.7-9.5c19.8 35.5 80.5 62.3 112.3 49c-14.7 .5-33.4 .3-49.9-5.8c-6.3-3.2-14.6-9.6-14.9-11.8zM237.5 7c3.8 .6 7.3 1.2 6.7 2.1c5-1.1 6.1-2.1-9-2.5c.8 .1 1.6 .3 2.4 .4zm92.2 208.4c-1 3.9-1.8 1.4-2.7-1.2c-.5-1.5-1.1-3.1-1.7-3.4c1.4-5.8 5.4-10.7 4.4 4.6zm-6.8 21.2c-1.3 7.9-5 15.5-10.1 22.5c.2-2-1.2-2.4-2.6-2.8c-2.9-.8-5.9-1.6 5.6-16.1c-.5 2-2.3 4.9-4 7.7l0 0c-3.6 5.9-6.7 11 4 4.3l1-1.8c2.6-4.5 5-8.8 6-13.8zM280 276.6c-11.1-1.7-21.2-6-12.7-6.1c7.1 .6 14.1 .6 21-1.1c-2.5 2.4-5.2 4.8-8.3 7.2zM244.2 9.1l-.2 .4-3 .3 3.2-.7zm-69.5 273c3.7 7.2 6.5 11.7 9.1 15.9c2.3 3.7 4.4 7.1 6.8 11.7c-5.2-4.3-8.9-9.8-12.8-15.5c-1.4-2.1-2.8-4.2-4.4-6.2l1.2-5.9zm7.3-10c1.7 3.4 3.3 6.7 5.9 9.5l2.6 7.7-1.3-2.1c-3.2-5.3-6.3-10.6-8-16.7l.8 1.6zm239.1-41.2c-2.3 17.4-7.7 34.6-16 50.3c7.6-14.9 12.5-30.9 14.8-47.2l1.2-3.1zM35.4 109.6c0 .3 0 .5 .1 .7c0-.2 0-.5-.1-.7zm.1 .7c.3 1.2 1.4 .9 2.4 .6c1.9-.5 3.6-.9-.1 7.6c-2.4 1.7-3.8 2.8-4.6 3.4c-.6 .4-.8 .6-.8 .6c0 0 .1-.2 .3-.5c.8-1.4 3.4-5.5 2.9-11.7zm-10.2 42c-.7 3.7-1.5 7.9-3.4 13.9c.2-1.9 0-3.5-.2-4.9c-.4-3.4-.8-6.3 4.3-12.9c-.3 1.2-.5 2.5-.7 3.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M248.2 .9c-4 .2-8.1 .4-11.4 1.6l-3.4-.5c5.4-.7 10.9-1.1 16.4-1.5c2.4-.2 4.8-.4 7.2-.6c-2.7 .6-5.7 .8-8.8 .9zm132 244.7c3-7.6 5.5-14 5.2-24.4l-4.3 9c4.4-13.2 4-27.1 3.6-40.4c-.2-6-.3-11.8 0-17.4l-1.8-.5c-1.5-45.2-40.6-93.1-75.3-109.4c-30-13.8-76.1-16.2-97.3-5.8c1.3-1.1 4.2-2 6.8-2.7c3.4-1 6.3-1.8 4.3-3c-19.2 1.9-24.9 5.5-31.1 9.4c-4.6 2.9-9.5 6-20.3 8.7c-3.5 3.4 1.7 2 5.8 .9c4.1-1.1 7.2-1.9-.1 2.4c-3.6 1-6.7 1.3-9.7 1.6c-8.3 .8-15.8 1.6-30.7 17c.8 1.3 3.5-.3 5.4-1.4c2.3-1.4 3.4-2-1.7 4.4c-19.1-2.4-60.3 43.7-69.1 59l4.6 .8c-3.2 8-6.8 14.8-10 20.8c-4.3 8.1-7.9 14.9-8.7 21.3c-.4 5.9-1.2 12.9-2 20.3c-3 27.4-6.8 61.3 3.8 73.6l-1.3 13c.6 1.2 1.1 2.3 1.6 3.5c1.2 2.5 2.3 5 3.9 7.4l-3 .2c7 22.2 10.8 22.5 15.1 22.9c4.4 .4 9.3 .9 18.7 24.2c-2.7-.9-5.5-1.9-9.4-7.2c-.5 4.1 5.8 16.3 13.1 25.8l-3.1 3.6c3.2 5.8 6.1 8.1 8.6 10l0 0c.8 .6 1.5 1.1 2.1 1.7c-11.9-6.5 3.2 13.7 11.9 25.2c2.5 3.4 4.5 6 5.1 7l2.4-4.2c-.3 6.1 4.3 13.9 13.1 24.7l7.3-.3c3 6 14 16.7 20.7 17.2l-4.4 5.8c8.1 2.6 10.3 4.3 12.7 6.2c2.6 2.1 5.4 4.3 16.1 8.1l-4.2-7.4c3.5 3 6.2 5.9 8.8 8.7c5.2 5.6 9.9 10.7 19.8 15.4c11.2 3.9 17.1 4.8 23.6 5.9c5.4 .8 11.2 1.8 20.8 4.5c-2.2-.1-4.4-.1-6.7-.2l0 0h0c-16.3-.4-34-.8-46.4-5.2C107.8 480.5 19.5 367.2 26 250.6c-.6-9.9-.3-20.9 0-30.7c.4-13.5 .7-24.8-1.6-28.3l1-3.1c5.3-17.4 11.7-38.2 23.8-62.8l-.1-.2 0-.1 0 0 0 0c.4 .4 3.4 3.4 8.8-5.8c1.3-2.9 2.5-5.8 3.8-8.8l0 0c2.5-6.1 5.1-12.3 8.4-17.9l2.6-.6c1.7-10.1 17-23.8 29.8-35.2l0 0c6.1-5.5 11.6-10.4 14.7-14.1l.7 4.4c17.1-16 45-27.7 66.1-36.6c4.8-2 9.3-3.9 13.3-5.7c-3.4 3.8 2.2 2.7 10 1c4.8-1 10.4-2.1 15.3-2.4c-1.3 .7-2.6 1.4-3.9 2.1l0 0 0 0c-2.7 1.4-5.4 2.8-8 4.6c8.3-2 11.9-1.4 16-.8c3.5 .6 7.3 1.2 14.6 .2c-5.6 .8-12.3 3-11.2 3.8c7.9 .9 12.8-.1 17.2-1c5.6-1.1 10.4-2.1 19.5 .9l-1-4.8c7.5 2.7 13.1 4.4 18 5.9c10 3 17.6 5.3 34.2 14.1c3.2 .2 5.3-.5 7.4-1.2c3.6-1.1 7-2.2 15.3 1.2c.5 .8 .7 1.5 1 2.1c1 2.6 1.7 4.6 14.6 12.2c1.8-.7-3.1-5.1-7-8.7l-.2-.1c32.3 17.3 67.5 54.1 78.2 93.6c-6-11.1-5.2-5.5-4.3 .5c.6 4 1.2 8.1-.2 7.5c4.5 12.1 8.1 24.5 10.4 37.4l-.8-2.9c-3.3-11.8-9.6-34.5-20-49.6c-.4 4.4-2.9 3.9-5.3 3.5c-3.3-.6-6.3-1.2-1.9 12.6c2.6 3.8 3.1 2.4 3.5 1.1c.5-1.5 .9-2.8 4.7 5.2c.1 4.3 1.1 8.5 2.2 13.3l0 0 0 0 0 0 0 0 0 0 0 0c.7 3 1.5 6.2 2.1 9.8c-1.1-.2-2.3-2.2-3.4-4.2l0 0 0 0c-1.4-2.4-2.8-4.7-3.7-3.2c2.4 11.5 6.5 17.4 8 18.3c-.3 .6-.6 .7-1.1 .7c-.8 0-1.8 .1-1.9 5.3c.7 13.7 3.3 12.5 5.3 11.6c.6-.3 1.2-.6 1.7-.4c-.6 2.5-1.6 5.1-2.7 7.9l0 0c-2.8 7.1-6 15.4-3.4 26.1c-.8-3.1-2.1-6.3-3.3-9.3l0 0 0 0c-.5-1.3-1.1-2.6-1.5-3.8c-.6 4.8-.3 8.2-.1 11.3c.4 5.3 .7 10-3 19.9c4.3-14.2 3.8-26.9-.2-20.8c1 11-3.8 20.5-8.1 29.1c-3.6 7.1-6.8 13.5-5.9 19.3l-5.2-7.1c-7.6 11-7 13.3-6.5 15.6c.5 1.9 1 3.8-3.4 10.8c1.7-2.9 1.3-3.6 1-4.2c-.4-.8-.7-1.5 1.7-5.1c-1.6 .1-5.5 3.9-10.1 8.5l0 0c-3.9 3.9-8.5 8.4-12.8 11.8c-37.5 30.1-82.3 34-125.6 17.8l0 0c.2-1-.2-2.1-3.1-4.1c-36.8-28.2-58.5-52.1-50.9-107.5c2.2-1.7 3.7-6.2 5.6-11.6c2.9-8.4 6.5-18.9 14.3-23.9c7.8-17.3 31.3-33.3 56.4-33.7c25.6-1.4 47.2 13.7 58.1 27.9c-19.8-18.4-52.1-24-79.7-10.4c-28.2 12.7-45 43.8-42.5 74.7c.3-.5 .7-.7 1-.9c.6-.5 1.2-.9 1.5-3.4c-.9 60.2 64.8 104.3 112.1 82l.6 1.3c12.7-3.5 15.9-6.5 20.3-10.7c2.2-2.1 4.7-4.5 9-7.4c-.3 .7-1.3 1.7-2.4 2.7c-2.2 2.1-4.6 4.5-1.6 4.6c5.3-1.4 20.1-14.8 30.2-23.8l0 0 0 0c1.6-1.4 3-2.7 4.3-3.9c2-4.3 1.6-5.7 1.3-7.1c-.4-1.6-.8-3.3 2.4-9.6l7.3-3.7c1-2.8 2-5.4 2.9-7.8l0 0zM233.1 321.9a.9 .9 0 1 0 -1.7 0 .9 .9 0 1 0 1.7 0zm-.2 .5l-.2 .4c-.3 .7-.6 1.4-.3 2.4c-12.2-5.7-23.4-14.3-32.6-24.9c4.9 7.1 10.1 14.1 17 19.5c-6.9-2.3-15.2-11.9-21.7-19.4l0 0 0 0c-4.3-5-7.9-9.1-9.7-9.5c19.8 35.5 80.5 62.3 112.3 49c-14.7 .5-33.4 .3-49.9-5.8c-6.3-3.2-14.6-9.6-14.9-11.8zM237.5 7c3.8 .6 7.3 1.2 6.7 2.1c5-1.1 6.1-2.1-9-2.5c.8 .1 1.6 .3 2.4 .4zm92.2 208.4c-1 3.9-1.8 1.4-2.7-1.2c-.5-1.5-1.1-3.1-1.7-3.4c1.4-5.8 5.4-10.7 4.4 4.6zm-6.8 21.2c-1.3 7.9-5 15.5-10.1 22.5c.2-2-1.2-2.4-2.6-2.8c-2.9-.8-5.9-1.6 5.6-16.1c-.5 2-2.3 4.9-4 7.7l0 0c-3.6 5.9-6.7 11 4 4.3l1-1.8c2.6-4.5 5-8.8 6-13.8zM280 276.6c-11.1-1.7-21.2-6-12.7-6.1c7.1 .6 14.1 .6 21-1.1c-2.5 2.4-5.2 4.8-8.3 7.2zM244.2 9.1l-.2 .4-3 .3 3.2-.7zm-69.5 273c3.7 7.2 6.5 11.7 9.1 15.9c2.3 3.7 4.4 7.1 6.8 11.7c-5.2-4.3-8.9-9.8-12.8-15.5c-1.4-2.1-2.8-4.2-4.4-6.2l1.2-5.9zm7.3-10c1.7 3.4 3.3 6.7 5.9 9.5l2.6 7.7-1.3-2.1c-3.2-5.3-6.3-10.6-8-16.7l.8 1.6zm239.1-41.2c-2.3 17.4-7.7 34.6-16 50.3c7.6-14.9 12.5-30.9 14.8-47.2l1.2-3.1zM35.4 109.6c0 .3 0 .5 .1 .7c0-.2 0-.5-.1-.7zm.1 .7c.3 1.2 1.4 .9 2.4 .6c1.9-.5 3.6-.9-.1 7.6c-2.4 1.7-3.8 2.8-4.6 3.4c-.6 .4-.8 .6-.8 .6c0 0 .1-.2 .3-.5c.8-1.4 3.4-5.5 2.9-11.7zm-10.2 42c-.7 3.7-1.5 7.9-3.4 13.9c.2-1.9 0-3.5-.2-4.9c-.4-3.4-.8-6.3 4.3-12.9c-.3 1.2-.5 2.5-.7 3.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"deezer\": {\n    \"changes\": [\"5.13.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e077\",\n    \"label\": \"Deezer\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M451.46,244.71H576V172H451.46Zm0-173.89v72.67H576V70.82Zm0,275.06H576V273.2H451.46ZM0,447.09H124.54V374.42H0Zm150.47,0H275V374.42H150.47Zm150.52,0H425.53V374.42H301Zm150.47,0H576V374.42H451.46ZM301,345.88H425.53V273.2H301Zm-150.52,0H275V273.2H150.47Zm0-101.17H275V172H150.47Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"delete-left\": {\n    \"aliases\": {\n      \"names\": [\"backspace\"],\n      \"unicodes\": {\n        \"composite\": [\"232b\"],\n        \"secondary\": [\"10f55a\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Erase to the Left\",\n        \"command\",\n        \"delete\",\n        \"erase\",\n        \"keyboard\",\n        \"undo\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f55a\",\n    \"label\": \"Delete Left\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M576 128c0-35.3-28.7-64-64-64H205.3c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7H512c35.3 0 64-28.7 64-64V128zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M576 128c0-35.3-28.7-64-64-64H205.3c-17 0-33.3 6.7-45.3 18.7L9.4 233.4c-6 6-9.4 14.1-9.4 22.6s3.4 16.6 9.4 22.6L160 429.3c12 12 28.3 18.7 45.3 18.7H512c35.3 0 64-28.7 64-64V128zM271 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"delicious\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a5\",\n    \"label\": \"Delicious\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"democrat\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f747\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"american\",\n        \"democratic party\",\n        \"donkey\",\n        \"election\",\n        \"left\",\n        \"left-wing\",\n        \"liberal\",\n        \"politics\",\n        \"usa\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f747\",\n    \"label\": \"Democrat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 32c0-8.9 3.8-20.9 6.2-27.3C71.2 1.8 74 0 77 0c1.9 0 3.8 .7 5.2 2.1L128 45.7 173.8 2.1C175.2 .7 177.1 0 179 0c3 0 5.8 1.8 6.8 4.7c2.4 6.5 6.2 18.4 6.2 27.3c0 26.5-21.9 42-29.5 46.6l76.2 72.6c6 5.7 13.9 8.8 22.1 8.8H480l32 0c40.3 0 78.2 19 102.4 51.2l19.2 25.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4l-19.2-25.6c-5.3-7-11.8-12.8-19.2-17V320H192l-40.4-94.3c-3.9-9.2-15.3-12.6-23.6-7l-42.1 28c-9.1 6.1-19.7 9.3-30.7 9.3h-2C23.9 256 0 232.1 0 202.7c0-12.1 4.1-23.8 11.7-33.3L87.6 74.6C78.1 67.4 64 53.2 64 32zM448 352h96v64 64c0 17.7-14.3 32-32 32H480c-17.7 0-32-14.3-32-32V416H288v64c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V416 352h96H448zM260.9 210.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.3-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5zM368.1 208c-2 0-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5c-.9-1.8-2.8-2.9-4.8-2.9zm116.8 2.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 32c0-8.9 3.8-20.9 6.2-27.3C71.2 1.8 74 0 77 0c1.9 0 3.8 .7 5.2 2.1L128 45.7 173.8 2.1C175.2 .7 177.1 0 179 0c3 0 5.8 1.8 6.8 4.7c2.4 6.5 6.2 18.4 6.2 27.3c0 26.5-21.9 42-29.5 46.6l76.2 72.6c6 5.7 13.9 8.8 22.1 8.8H480l32 0c40.3 0 78.2 19 102.4 51.2l19.2 25.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4l-19.2-25.6c-5.3-7-11.8-12.8-19.2-17V320H192l-40.4-94.3c-3.9-9.2-15.3-12.6-23.6-7l-42.1 28c-9.1 6.1-19.7 9.3-30.7 9.3h-2C23.9 256 0 232.1 0 202.7c0-12.1 4.1-23.8 11.7-33.3L87.6 74.6C78.1 67.4 64 53.2 64 32zM448 352h96v64 64c0 17.7-14.3 32-32 32H480c-17.7 0-32-14.3-32-32V416H288v64c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V416 352h96H448zM260.9 210.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.3-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5zM368.1 208c-2 0-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5c-.9-1.8-2.8-2.9-4.8-2.9zm116.8 2.9c-.9-1.8-2.8-2.9-4.8-2.9s-3.9 1.1-4.8 2.9l-10.5 20.5-23.5 3.3c-2 .3-3.7 1.6-4.3 3.5s-.1 3.9 1.3 5.3l17 16-4 22.6c-.3 1.9 .5 3.9 2.1 5s3.8 1.3 5.6 .4l21-10.7 21 10.7c1.8 .9 4 .8 5.6-.4s2.5-3.1 2.1-5l-4-22.6 17-16c1.5-1.4 2-3.4 1.4-5.3s-2.3-3.2-4.3-3.5l-23.5-3.3-10.5-20.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"deploydog\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f38e\",\n    \"label\": \"deploy.dog\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V128c0-35.2-28.8-64-64-64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"deskpro\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f38f\",\n    \"label\": \"Deskpro\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 480 512\\\"><path d=\\\"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 480, 512],\n        \"width\": 480,\n        \"height\": 512,\n        \"path\": \"M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"desktop\": {\n    \"aliases\": {\n      \"names\": [\"desktop-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f5a5\", \"f108\"],\n        \"primary\": [\"f108\"],\n        \"secondary\": [\"10f108\", \"10f390\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"computer\",\n        \"cpu\",\n        \"demo\",\n        \"desktop\",\n        \"desktop computer\",\n        \"device\",\n        \"imac\",\n        \"machine\",\n        \"monitor\",\n        \"pc\",\n        \"screen\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f390\",\n    \"label\": \"Desktop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V352c0 35.3 28.7 64 64 64H240l-10.7 32H160c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H346.7L336 416H512c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM512 64V288H64V64H512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V352c0 35.3 28.7 64 64 64H240l-10.7 32H160c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H346.7L336 416H512c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM512 64V288H64V64H512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dev\": {\n    \"changes\": [\"5.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f6cc\",\n    \"label\": \"DEV\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"deviantart\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1bd\",\n    \"label\": \"deviantART\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dharmachakra\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2638\"],\n        \"secondary\": [\"10f655\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Buddhist\",\n        \"buddhism\",\n        \"buddhist\",\n        \"dharma\",\n        \"religion\",\n        \"wheel\",\n        \"wheel of dharma\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f655\",\n    \"label\": \"Dharmachakra\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M337.8 205.7l48.6-42.5c13.8 19.3 23.4 41.9 27.4 66.2l-64.4 4.3c-2.4-10.1-6.4-19.5-11.6-28zm140.1 19.5c-5.3-38.8-20.6-74.5-43.2-104.3l.8-.7C449 108.4 449.7 87.6 437 75s-33.4-12-45.2 1.5l-.7 .8c-29.8-22.6-65.5-37.9-104.3-43.2l.1-1.1c1.2-17.9-13-33-30.9-33s-32.1 15.2-30.9 33l.1 1.1c-38.8 5.3-74.5 20.6-104.3 43.2l-.7-.8C108.4 63 87.6 62.3 75 75s-12 33.4 1.5 45.2l.8 .7c-22.6 29.8-37.9 65.5-43.2 104.3l-1.1-.1c-17.9-1.2-33 13-33 30.9s15.2 32.1 33 30.9l1.1-.1c5.3 38.8 20.6 74.5 43.2 104.3l-.8 .7C63 403.6 62.3 424.4 75 437s33.4 12 45.2-1.5l.7-.8c29.8 22.6 65.5 37.9 104.3 43.2l-.1 1.1c-1.2 17.9 13 33 30.9 33s32.1-15.2 30.9-33l-.1-1.1c38.8-5.3 74.5-20.6 104.3-43.2l.7 .8c11.8 13.5 32.5 14.2 45.2 1.5s12-33.4-1.5-45.2l-.8-.7c22.6-29.8 37.9-65.5 43.2-104.3l1.1 .1c17.9 1.2 33-13 33-30.9s-15.2-32.1-33-30.9l-1.1 .1zM163.2 125.6c19.3-13.8 41.9-23.4 66.2-27.5l4.3 64.4c-10 2.4-19.5 6.4-28 11.6l-42.5-48.6zm-65 103.8c4.1-24.4 13.7-46.9 27.5-66.2l48.6 42.5c-5.3 8.5-9.2 18-11.6 28l-64.4-4.3zm27.5 119.4c-13.8-19.3-23.4-41.9-27.5-66.2l64.4-4.3c2.4 10 6.4 19.5 11.6 28l-48.6 42.5zm103.8 65c-24.4-4.1-46.9-13.7-66.2-27.4l42.5-48.6c8.5 5.3 18 9.2 28 11.6l-4.3 64.4zm119.4-27.4c-19.3 13.8-41.9 23.4-66.2 27.4l-4.3-64.4c10-2.4 19.5-6.4 28-11.6l42.5 48.6zm65-103.8c-4.1 24.4-13.7 46.9-27.4 66.2l-48.6-42.5c5.3-8.5 9.2-18 11.6-28l64.4 4.3zm-65-156.9l-42.5 48.6c-8.5-5.3-18-9.2-28-11.6l4.3-64.4c24.4 4.1 46.9 13.7 66.2 27.5zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M337.8 205.7l48.6-42.5c13.8 19.3 23.4 41.9 27.4 66.2l-64.4 4.3c-2.4-10.1-6.4-19.5-11.6-28zm140.1 19.5c-5.3-38.8-20.6-74.5-43.2-104.3l.8-.7C449 108.4 449.7 87.6 437 75s-33.4-12-45.2 1.5l-.7 .8c-29.8-22.6-65.5-37.9-104.3-43.2l.1-1.1c1.2-17.9-13-33-30.9-33s-32.1 15.2-30.9 33l.1 1.1c-38.8 5.3-74.5 20.6-104.3 43.2l-.7-.8C108.4 63 87.6 62.3 75 75s-12 33.4 1.5 45.2l.8 .7c-22.6 29.8-37.9 65.5-43.2 104.3l-1.1-.1c-17.9-1.2-33 13-33 30.9s15.2 32.1 33 30.9l1.1-.1c5.3 38.8 20.6 74.5 43.2 104.3l-.8 .7C63 403.6 62.3 424.4 75 437s33.4 12 45.2-1.5l.7-.8c29.8 22.6 65.5 37.9 104.3 43.2l-.1 1.1c-1.2 17.9 13 33 30.9 33s32.1-15.2 30.9-33l-.1-1.1c38.8-5.3 74.5-20.6 104.3-43.2l.7 .8c11.8 13.5 32.5 14.2 45.2 1.5s12-33.4-1.5-45.2l-.8-.7c22.6-29.8 37.9-65.5 43.2-104.3l1.1 .1c17.9 1.2 33-13 33-30.9s-15.2-32.1-33-30.9l-1.1 .1zM163.2 125.6c19.3-13.8 41.9-23.4 66.2-27.5l4.3 64.4c-10 2.4-19.5 6.4-28 11.6l-42.5-48.6zm-65 103.8c4.1-24.4 13.7-46.9 27.5-66.2l48.6 42.5c-5.3 8.5-9.2 18-11.6 28l-64.4-4.3zm27.5 119.4c-13.8-19.3-23.4-41.9-27.5-66.2l64.4-4.3c2.4 10 6.4 19.5 11.6 28l-48.6 42.5zm103.8 65c-24.4-4.1-46.9-13.7-66.2-27.4l42.5-48.6c8.5 5.3 18 9.2 28 11.6l-4.3 64.4zm119.4-27.4c-19.3 13.8-41.9 23.4-66.2 27.4l-4.3-64.4c10-2.4 19.5-6.4 28-11.6l42.5 48.6zm65-103.8c-4.1 24.4-13.7 46.9-27.4 66.2l-48.6-42.5c5.3-8.5 9.2-18 11.6-28l64.4 4.3zm-65-156.9l-42.5 48.6c-8.5-5.3-18-9.2-28-11.6l4.3-64.4c24.4 4.1 46.9 13.7 66.2 27.5zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dhl\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Dalsey\", \"Hillblom and Lynn\", \"german\", \"package\", \"shipping\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f790\",\n    \"label\": \"DHL\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M238 301.2h58.7L319 271h-58.7L238 301.2zM0 282.9v6.4h81.8l4.7-6.4H0zM172.9 271c-8.7 0-6-3.6-4.6-5.5 2.8-3.8 7.6-10.4 10.4-14.1 2.8-3.7 2.8-5.9-2.8-5.9h-51l-41.1 55.8h100.1c33.1 0 51.5-22.5 57.2-30.3h-68.2zm317.5-6.9l39.3-53.4h-62.2l-39.3 53.4h62.2zM95.3 271H0v6.4h90.6l4.7-6.4zm111-26.6c-2.8 3.8-7.5 10.4-10.3 14.2-1.4 2-4.1 5.5 4.6 5.5h45.6s7.3-10 13.5-18.4c8.4-11.4.7-35-29.2-35H112.6l-20.4 27.8h111.4c5.6 0 5.5 2.2 2.7 5.9zM0 301.2h73.1l4.7-6.4H0v6.4zm323 0h58.7L404 271h-58.7c-.1 0-22.3 30.2-22.3 30.2zm222 .1h95v-6.4h-90.3l-4.7 6.4zm22.3-30.3l-4.7 6.4H640V271h-72.7zm-13.5 18.3H640v-6.4h-81.5l-4.7 6.4zm-164.2-78.6l-22.5 30.6h-26.2l22.5-30.6h-58.7l-39.3 53.4H409l39.3-53.4h-58.7zm33.5 60.3s-4.3 5.9-6.4 8.7c-7.4 10-.9 21.6 23.2 21.6h94.3l22.3-30.3H423.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"diagram-next\": {\n    \"changes\": [\"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cells\",\n        \"chart\",\n        \"gantt\",\n        \"row\",\n        \"subtask\",\n        \"successor\",\n        \"table\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e476\",\n    \"label\": \"Diagram Next\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 160c0 35.3-28.7 64-64 64H280v64h46.1c21.4 0 32.1 25.9 17 41L273 399c-9.4 9.4-24.6 9.4-33.9 0L169 329c-15.1-15.1-4.4-41 17-41H232V224H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64v64zM448 416V352H365.3l.4-.4c18.4-18.4 20.4-43.7 11-63.6l71.3 0c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64V352c0-35.3 28.7-64 64-64l71.3 0c-9.4 19.9-7.4 45.2 11 63.6l.4 .4H64v64H210.7l5.7 5.7c21.9 21.9 57.3 21.9 79.2 0l5.7-5.7H448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 160c0 35.3-28.7 64-64 64H280v64h46.1c21.4 0 32.1 25.9 17 41L273 399c-9.4 9.4-24.6 9.4-33.9 0L169 329c-15.1-15.1-4.4-41 17-41H232V224H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64v64zM448 416V352H365.3l.4-.4c18.4-18.4 20.4-43.7 11-63.6l71.3 0c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64V352c0-35.3 28.7-64 64-64l71.3 0c-9.4 19.9-7.4 45.2 11 63.6l.4 .4H64v64H210.7l5.7 5.7c21.9 21.9 57.3 21.9 79.2 0l5.7-5.7H448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"diagram-predecessor\": {\n    \"changes\": [\"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cells\",\n        \"chart\",\n        \"gantt\",\n        \"predecessor\",\n        \"previous\",\n        \"row\",\n        \"subtask\",\n        \"table\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e477\",\n    \"label\": \"Diagram Predecessor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767208,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 416l0-64L64 352l0 64 384 0zm0 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64zM288 160c0 35.3-28.7 64-64 64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l144 0 16 0 144 0c44.2 0 80 35.8 80 80l0 16 38.1 0c21.4 0 32.1 25.9 17 41L433 239c-9.4 9.4-24.6 9.4-33.9 0L329 169c-15.1-15.1-4.4-41 17-41l38.1 0 0-16c0-8.8-7.2-16-16-16l-80 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 416l0-64L64 352l0 64 384 0zm0 64L64 480c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l384 0c35.3 0 64 28.7 64 64l0 64c0 35.3-28.7 64-64 64zM288 160c0 35.3-28.7 64-64 64L64 224c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l144 0 16 0 144 0c44.2 0 80 35.8 80 80l0 16 38.1 0c21.4 0 32.1 25.9 17 41L433 239c-9.4 9.4-24.6 9.4-33.9 0L329 169c-15.1-15.1-4.4-41 17-41l38.1 0 0-16c0-8.8-7.2-16-16-16l-80 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"diagram-project\": {\n    \"aliases\": {\n      \"names\": [\"project-diagram\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f542\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chart\", \"graph\", \"network\", \"pert\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f542\",\n    \"label\": \"Diagram Project\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 80C0 53.5 21.5 32 48 32h96c26.5 0 48 21.5 48 48V96H384V80c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H432c-26.5 0-48-21.5-48-48V160H192v16c0 1.7-.1 3.4-.3 5L272 288h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H272c-26.5 0-48-21.5-48-48V336c0-1.7 .1-3.4 .3-5L144 224H48c-26.5 0-48-21.5-48-48V80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 80C0 53.5 21.5 32 48 32h96c26.5 0 48 21.5 48 48V96H384V80c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H432c-26.5 0-48-21.5-48-48V160H192v16c0 1.7-.1 3.4-.3 5L272 288h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H272c-26.5 0-48-21.5-48-48V336c0-1.7 .1-3.4 .3-5L144 224H48c-26.5 0-48-21.5-48-48V80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"diagram-successor\": {\n    \"changes\": [\"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cells\",\n        \"chart\",\n        \"gantt\",\n        \"next\",\n        \"row\",\n        \"subtask\",\n        \"successor\",\n        \"table\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e47a\",\n    \"label\": \"Diagram Successor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 416l0-64c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64zM64 160l0-64 144 0 16 0 0 64L64 160zm224 0l0-64 80 0c8.8 0 16 7.2 16 16l0 16-38.1 0c-21.4 0-32.1 25.9-17 41L399 239c9.4 9.4 24.6 9.4 33.9 0L503 169c15.1-15.1 4.4-41-17-41L448 128l0-16c0-44.2-35.8-80-80-80L224 32l-16 0L64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 416l0-64c0-35.3-28.7-64-64-64L64 288c-35.3 0-64 28.7-64 64l0 64c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64zM64 160l0-64 144 0 16 0 0 64L64 160zm224 0l0-64 80 0c8.8 0 16 7.2 16 16l0 16-38.1 0c-21.4 0-32.1 25.9-17 41L399 239c9.4 9.4 24.6 9.4 33.9 0L503 169c15.1-15.1 4.4-41-17-41L448 128l0-16c0-44.2-35.8-80-80-80L224 32l-16 0L64 32C28.7 32 0 60.7 0 96l0 64c0 35.3 28.7 64 64 64l160 0c35.3 0 64-28.7 64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"diamond\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2666\"],\n        \"secondary\": [\"10f219\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"card\",\n        \"cards\",\n        \"diamond suit\",\n        \"game\",\n        \"gem\",\n        \"gemstone\",\n        \"poker\",\n        \"suit\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f219\",\n    \"label\": \"Diamond\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M284.3 11.7c-15.6-15.6-40.9-15.6-56.6 0l-216 216c-15.6 15.6-15.6 40.9 0 56.6l216 216c15.6 15.6 40.9 15.6 56.6 0l216-216c15.6-15.6 15.6-40.9 0-56.6l-216-216z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"diamond-turn-right\": {\n    \"aliases\": {\n      \"names\": [\"directions\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5eb\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"map\", \"navigation\", \"sign\", \"turn\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5eb\",\n    \"label\": \"Diamond Turn Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M227.7 11.7c15.6-15.6 40.9-15.6 56.6 0l216 216c15.6 15.6 15.6 40.9 0 56.6l-216 216c-15.6 15.6-40.9 15.6-56.6 0l-216-216c-15.6-15.6-15.6-40.9 0-56.6l216-216zm87.6 137c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8v56H224c-35.3 0-64 28.7-64 64v48c0 13.3 10.7 24 24 24s24-10.7 24-24V280c0-8.8 7.2-16 16-16h64v56c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l80-80c6.2-6.2 6.2-16.4 0-22.6l-80-80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M227.7 11.7c15.6-15.6 40.9-15.6 56.6 0l216 216c15.6 15.6 15.6 40.9 0 56.6l-216 216c-15.6 15.6-40.9 15.6-56.6 0l-216-216c-15.6-15.6-15.6-40.9 0-56.6l216-216zm87.6 137c-4.6-4.6-11.5-5.9-17.4-3.5s-9.9 8.3-9.9 14.8v56H224c-35.3 0-64 28.7-64 64v48c0 13.3 10.7 24 24 24s24-10.7 24-24V280c0-8.8 7.2-16 16-16h64v56c0 6.5 3.9 12.3 9.9 14.8s12.9 1.1 17.4-3.5l80-80c6.2-6.2 6.2-16.4 0-22.6l-80-80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"diaspora\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f791\",\n    \"label\": \"Diaspora\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M251.64 354.55c-1.4 0-88 119.9-88.7 119.9S76.34 414 76 413.25s86.6-125.7 86.6-127.4c0-2.2-129.6-44-137.6-47.1-1.3-.5 31.4-101.8 31.7-102.1.6-.7 144.4 47 145.5 47 .4 0 .9-.6 1-1.3.4-2 1-148.6 1.7-149.6.8-1.2 104.5-.7 105.1-.3 1.5 1 3.5 156.1 6.1 156.1 1.4 0 138.7-47 139.3-46.3.8.9 31.9 102.2 31.5 102.6-.9.9-140.2 47.1-140.6 48.8-.3 1.4 82.8 122.1 82.5 122.9s-85.5 63.5-86.3 63.5c-1-.2-89-125.5-90.9-125.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dice\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3b2\"],\n        \"secondary\": [\"10f522\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chance\", \"dice\", \"die\", \"gambling\", \"game\", \"game die\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f522\",\n    \"label\": \"Dice\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H461.7c11.6 36 3.1 77-25.4 105.5L320 413.8V448zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M274.9 34.3c-28.1-28.1-73.7-28.1-101.8 0L34.3 173.1c-28.1 28.1-28.1 73.7 0 101.8L173.1 413.7c28.1 28.1 73.7 28.1 101.8 0L413.7 274.9c28.1-28.1 28.1-73.7 0-101.8L274.9 34.3zM200 224a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM96 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 376a24 24 0 1 1 0-48 24 24 0 1 1 0 48zM352 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM224 120a24 24 0 1 1 0-48 24 24 0 1 1 0 48zm96 328c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H461.7c11.6 36 3.1 77-25.4 105.5L320 413.8V448zM480 328a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-d20\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6cf\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"chance\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"gambling\",\n        \"game\",\n        \"roll\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6cf\",\n    \"label\": \"Dice D20\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M48.7 125.8l53.2 31.9c7.8 4.7 17.8 2 22.2-5.9L201.6 12.1c3-5.4-.9-12.1-7.1-12.1c-1.6 0-3.2 .5-4.6 1.4L47.9 98.8c-9.6 6.6-9.2 20.9 .8 26.9zM16 171.7V295.3c0 8 10.4 11 14.7 4.4l60-92c5-7.6 2.6-17.8-5.2-22.5L40.2 158C29.6 151.6 16 159.3 16 171.7zM310.4 12.1l77.6 139.6c4.4 7.9 14.5 10.6 22.2 5.9l53.2-31.9c10-6 10.4-20.3 .8-26.9L322.1 1.4c-1.4-.9-3-1.4-4.6-1.4c-6.2 0-10.1 6.7-7.1 12.1zM496 171.7c0-12.4-13.6-20.1-24.2-13.7l-45.3 27.2c-7.8 4.7-10.1 14.9-5.2 22.5l60 92c4.3 6.7 14.7 3.6 14.7-4.4V171.7zm-49.3 246L286.1 436.6c-8.1 .9-14.1 7.8-14.1 15.9v52.8c0 3.7 3 6.8 6.8 6.8c.8 0 1.6-.1 2.4-.4l172.7-64c6.1-2.2 10.1-8 10.1-14.5c0-9.3-8.1-16.5-17.3-15.4zM233.2 512c3.7 0 6.8-3 6.8-6.8V452.6c0-8.1-6.1-14.9-14.1-15.9l-160.6-19c-9.2-1.1-17.3 6.1-17.3 15.4c0 6.5 4 12.3 10.1 14.5l172.7 64c.8 .3 1.6 .4 2.4 .4zM41.7 382.9l170.9 20.2c7.8 .9 13.4-7.5 9.5-14.3l-85.7-150c-5.9-10.4-20.7-10.8-27.3-.8L30.2 358.2c-6.5 9.9-.3 23.3 11.5 24.7zm439.6-24.8L402.9 238.1c-6.5-10-21.4-9.6-27.3 .8L290.2 388.5c-3.9 6.8 1.6 15.2 9.5 14.3l170.1-20c11.8-1.4 18-14.7 11.5-24.6zm-216.9 11l78.4-137.2c6.1-10.7-1.6-23.9-13.9-23.9H183.1c-12.3 0-20 13.3-13.9 23.9l78.4 137.2c3.7 6.4 13 6.4 16.7 0zM174.4 176H337.6c12.2 0 19.9-13.1 14-23.8l-80-144c-2.8-5.1-8.2-8.2-14-8.2h-3.2c-5.8 0-11.2 3.2-14 8.2l-80 144c-5.9 10.7 1.8 23.8 14 23.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M48.7 125.8l53.2 31.9c7.8 4.7 17.8 2 22.2-5.9L201.6 12.1c3-5.4-.9-12.1-7.1-12.1c-1.6 0-3.2 .5-4.6 1.4L47.9 98.8c-9.6 6.6-9.2 20.9 .8 26.9zM16 171.7V295.3c0 8 10.4 11 14.7 4.4l60-92c5-7.6 2.6-17.8-5.2-22.5L40.2 158C29.6 151.6 16 159.3 16 171.7zM310.4 12.1l77.6 139.6c4.4 7.9 14.5 10.6 22.2 5.9l53.2-31.9c10-6 10.4-20.3 .8-26.9L322.1 1.4c-1.4-.9-3-1.4-4.6-1.4c-6.2 0-10.1 6.7-7.1 12.1zM496 171.7c0-12.4-13.6-20.1-24.2-13.7l-45.3 27.2c-7.8 4.7-10.1 14.9-5.2 22.5l60 92c4.3 6.7 14.7 3.6 14.7-4.4V171.7zm-49.3 246L286.1 436.6c-8.1 .9-14.1 7.8-14.1 15.9v52.8c0 3.7 3 6.8 6.8 6.8c.8 0 1.6-.1 2.4-.4l172.7-64c6.1-2.2 10.1-8 10.1-14.5c0-9.3-8.1-16.5-17.3-15.4zM233.2 512c3.7 0 6.8-3 6.8-6.8V452.6c0-8.1-6.1-14.9-14.1-15.9l-160.6-19c-9.2-1.1-17.3 6.1-17.3 15.4c0 6.5 4 12.3 10.1 14.5l172.7 64c.8 .3 1.6 .4 2.4 .4zM41.7 382.9l170.9 20.2c7.8 .9 13.4-7.5 9.5-14.3l-85.7-150c-5.9-10.4-20.7-10.8-27.3-.8L30.2 358.2c-6.5 9.9-.3 23.3 11.5 24.7zm439.6-24.8L402.9 238.1c-6.5-10-21.4-9.6-27.3 .8L290.2 388.5c-3.9 6.8 1.6 15.2 9.5 14.3l170.1-20c11.8-1.4 18-14.7 11.5-24.6zm-216.9 11l78.4-137.2c6.1-10.7-1.6-23.9-13.9-23.9H183.1c-12.3 0-20 13.3-13.9 23.9l78.4 137.2c3.7 6.4 13 6.4 16.7 0zM174.4 176H337.6c12.2 0 19.9-13.1 14-23.8l-80-144c-2.8-5.1-8.2-8.2-14-8.2h-3.2c-5.8 0-11.2 3.2-14 8.2l-80 144c-5.9 10.7 1.8 23.8 14 23.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-d6\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6d1\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"chance\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"gambling\",\n        \"game\",\n        \"roll\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6d1\",\n    \"label\": \"Dice D6\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M201 10.3c14.3-7.8 31.6-7.8 46 0L422.3 106c5.1 2.8 8.3 8.2 8.3 14s-3.2 11.2-8.3 14L231.7 238c-4.8 2.6-10.5 2.6-15.3 0L25.7 134c-5.1-2.8-8.3-8.2-8.3-14s3.2-11.2 8.3-14L201 10.3zM23.7 170l176 96c5.1 2.8 8.3 8.2 8.3 14V496c0 5.6-3 10.9-7.8 13.8s-10.9 3-15.8 .3L25 423.1C9.6 414.7 0 398.6 0 381V184c0-5.6 3-10.9 7.8-13.8s10.9-3 15.8-.3zm400.7 0c5-2.7 11-2.6 15.8 .3s7.8 8.1 7.8 13.8V381c0 17.6-9.6 33.7-25 42.1L263.7 510c-5 2.7-11 2.6-15.8-.3s-7.8-8.1-7.8-13.8V280c0-5.9 3.2-11.2 8.3-14l176-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M201 10.3c14.3-7.8 31.6-7.8 46 0L422.3 106c5.1 2.8 8.3 8.2 8.3 14s-3.2 11.2-8.3 14L231.7 238c-4.8 2.6-10.5 2.6-15.3 0L25.7 134c-5.1-2.8-8.3-8.2-8.3-14s3.2-11.2 8.3-14L201 10.3zM23.7 170l176 96c5.1 2.8 8.3 8.2 8.3 14V496c0 5.6-3 10.9-7.8 13.8s-10.9 3-15.8 .3L25 423.1C9.6 414.7 0 398.6 0 381V184c0-5.6 3-10.9 7.8-13.8s10.9-3 15.8-.3zm400.7 0c5-2.7 11-2.6 15.8 .3s7.8 8.1 7.8 13.8V381c0 17.6-9.6 33.7-25 42.1L263.7 510c-5 2.7-11 2.6-15.8-.3s-7.8-8.1-7.8-13.8V280c0-5.9 3.2-11.2 8.3-14l176-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-five\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2684\"],\n        \"secondary\": [\"10f523\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Die Face-5\", \"chance\", \"gambling\", \"game\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f523\",\n    \"label\": \"Dice Five\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64-64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 160a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-four\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2683\"],\n        \"secondary\": [\"10f524\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Die Face-4\", \"chance\", \"gambling\", \"game\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f524\",\n    \"label\": \"Dice Four\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM352 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM352 160a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-one\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2680\"],\n        \"secondary\": [\"10f525\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Die Face-1\", \"chance\", \"gambling\", \"game\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f525\",\n    \"label\": \"Dice One\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM224 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-six\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2685\"],\n        \"secondary\": [\"10f526\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Die Face-6\", \"chance\", \"gambling\", \"game\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f526\",\n    \"label\": \"Dice Six\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm160 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-three\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2682\"],\n        \"secondary\": [\"10f527\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Die Face-3\", \"chance\", \"gambling\", \"game\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f527\",\n    \"label\": \"Dice Three\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dice-two\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2681\"],\n        \"secondary\": [\"10f528\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Die Face-2\", \"chance\", \"gambling\", \"game\", \"roll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f528\",\n    \"label\": \"Dice Two\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM352 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM352 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 192a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"digg\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a6\",\n    \"label\": \"Digg Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"digital-ocean\": {\n    \"changes\": [\"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f391\",\n    \"label\": \"Digital Ocean\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M87 481.8h73.7v-73.6H87zM25.4 346.6v61.6H87v-61.6zm466.2-169.7c-23-74.2-82.4-133.3-156.6-156.6C164.9-32.8 8 93.7 8 255.9h95.8c0-101.8 101-180.5 208.1-141.7 39.7 14.3 71.5 46.1 85.8 85.7 39.1 107-39.7 207.8-141.4 208v.3h-.3V504c162.6 0 288.8-156.8 235.6-327.1zm-235.3 231v-95.3h-95.6v95.6H256v-.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"discord\": {\n    \"changes\": [\"5.0.0\", \"5.15.4\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f392\",\n    \"label\": \"Discord\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"discourse\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f393\",\n    \"label\": \"Discourse\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"disease\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7fa\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bacteria\",\n        \"cancer\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flu\",\n        \"illness\",\n        \"infection\",\n        \"pandemic\",\n        \"sickness\",\n        \"virus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7fa\",\n    \"label\": \"Disease\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M236.4 61.4L227 75.5c-21.3 32-59.4 48.5-97.3 42.1l-59.6-9.9C33.4 101.6 0 129.9 .1 167.1c0 15.9 6.4 31.2 17.6 42.5l29.2 29.2c11 11 17.2 25.9 17.2 41.5c0 15.8-6.4 30.9-17.7 42L33.3 335.1C22.2 345.9 16 360.7 16 376.2c0 36.8 34.1 64.2 70.1 56.2l62.3-13.8c7.7-1.7 15.7-2.6 23.6-2.6h10c27.2 0 53.7 9.3 75 26.3L287.8 467c10.5 8.4 23.6 13 37 13c32.7 0 59.3-26.5 59.3-59.3l0-25.2c0-34.9 21.4-66.2 53.9-78.8l36.9-14.3c22.4-8.7 37.2-30.3 37.2-54.3c0-28.1-20.1-52.3-47.8-57.3l-28-5.1c-36.5-6.7-65.4-34.5-73.6-70.7l-7.1-31.5C348.9 53.4 322.1 32 291.3 32c-22 0-42.6 11-54.9 29.4zM160 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm0 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M236.4 61.4L227 75.5c-21.3 32-59.4 48.5-97.3 42.1l-59.6-9.9C33.4 101.6 0 129.9 .1 167.1c0 15.9 6.4 31.2 17.6 42.5l29.2 29.2c11 11 17.2 25.9 17.2 41.5c0 15.8-6.4 30.9-17.7 42L33.3 335.1C22.2 345.9 16 360.7 16 376.2c0 36.8 34.1 64.2 70.1 56.2l62.3-13.8c7.7-1.7 15.7-2.6 23.6-2.6h10c27.2 0 53.7 9.3 75 26.3L287.8 467c10.5 8.4 23.6 13 37 13c32.7 0 59.3-26.5 59.3-59.3l0-25.2c0-34.9 21.4-66.2 53.9-78.8l36.9-14.3c22.4-8.7 37.2-30.3 37.2-54.3c0-28.1-20.1-52.3-47.8-57.3l-28-5.1c-36.5-6.7-65.4-34.5-73.6-70.7l-7.1-31.5C348.9 53.4 322.1 32 291.3 32c-22 0-42.6 11-54.9 29.4zM160 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm0 80a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"display\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Screen\", \"computer\", \"desktop\", \"imac\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e163\",\n    \"label\": \"Display\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V352c0 35.3 28.7 64 64 64H240l-10.7 32H160c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H346.7L336 416H512c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM512 64V352H64V64H512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V352c0 35.3 28.7 64 64 64H240l-10.7 32H160c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H346.7L336 416H512c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM512 64V352H64V64H512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"divide\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2797\", \"f7\"],\n        \"secondary\": [\"10f529\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Division Sign\",\n        \"arithmetic\",\n        \"calculus\",\n        \"divide\",\n        \"division\",\n        \"math\",\n        \"sign\",\n        \"÷\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f529\",\n    \"label\": \"Divide\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M272 96a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 320a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 288c17.7 0 32-14.3 32-32s-14.3-32-32-32H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H400z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M272 96a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 320a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM400 288c17.7 0 32-14.3 32-32s-14.3-32-32-32H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H400z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dna\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9ec\"],\n        \"secondary\": [\"10f471\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"5.0.10\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"biologist\",\n        \"dna\",\n        \"double helix\",\n        \"evolution\",\n        \"gene\",\n        \"genetic\",\n        \"genetics\",\n        \"helix\",\n        \"life\",\n        \"molecule\",\n        \"protein\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f471\",\n    \"label\": \"Dna\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M416 0c17.7 0 32 14.3 32 32c0 59.8-30.3 107.5-69.4 146.6c-28 28-62.5 53.5-97.3 77.4l-2.5 1.7c-11.9 8.1-23.8 16.1-35.5 23.9l0 0 0 0 0 0-1.6 1c-6 4-11.9 7.9-17.8 11.9c-20.9 14-40.8 27.7-59.3 41.5H283.3c-9.8-7.4-20.1-14.7-30.7-22.1l7-4.7 3-2c15.1-10.1 30.9-20.6 46.7-31.6c25 18.1 48.9 37.3 69.4 57.7C417.7 372.5 448 420.2 448 480c0 17.7-14.3 32-32 32s-32-14.3-32-32H64c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-59.8 30.3-107.5 69.4-146.6c28-28 62.5-53.5 97.3-77.4c-34.8-23.9-69.3-49.3-97.3-77.4C30.3 139.5 0 91.8 0 32C0 14.3 14.3 0 32 0S64 14.3 64 32H384c0-17.7 14.3-32 32-32zM338.6 384H109.4c-10.1 10.6-18.6 21.3-25.5 32H364.1c-6.8-10.7-15.3-21.4-25.5-32zM109.4 128H338.6c10.1-10.7 18.6-21.3 25.5-32H83.9c6.8 10.7 15.3 21.3 25.5 32zm55.4 48c18.4 13.8 38.4 27.5 59.3 41.5c20.9-14 40.8-27.7 59.3-41.5H164.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M416 0c17.7 0 32 14.3 32 32c0 59.8-30.3 107.5-69.4 146.6c-28 28-62.5 53.5-97.3 77.4l-2.5 1.7c-11.9 8.1-23.8 16.1-35.5 23.9l0 0 0 0 0 0-1.6 1c-6 4-11.9 7.9-17.8 11.9c-20.9 14-40.8 27.7-59.3 41.5H283.3c-9.8-7.4-20.1-14.7-30.7-22.1l7-4.7 3-2c15.1-10.1 30.9-20.6 46.7-31.6c25 18.1 48.9 37.3 69.4 57.7C417.7 372.5 448 420.2 448 480c0 17.7-14.3 32-32 32s-32-14.3-32-32H64c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-59.8 30.3-107.5 69.4-146.6c28-28 62.5-53.5 97.3-77.4c-34.8-23.9-69.3-49.3-97.3-77.4C30.3 139.5 0 91.8 0 32C0 14.3 14.3 0 32 0S64 14.3 64 32H384c0-17.7 14.3-32 32-32zM338.6 384H109.4c-10.1 10.6-18.6 21.3-25.5 32H364.1c-6.8-10.7-15.3-21.4-25.5-32zM109.4 128H338.6c10.1-10.7 18.6-21.3 25.5-32H83.9c6.8 10.7 15.3 21.3 25.5 32zm55.4 48c18.4 13.8 38.4 27.5 59.3 41.5c20.9-14 40.8-27.7 59.3-41.5H164.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dochub\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f394\",\n    \"label\": \"DocHub\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 416 512\\\"><path d=\\\"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 416, 512],\n        \"width\": 416,\n        \"height\": 512,\n        \"path\": \"M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"docker\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f395\",\n    \"label\": \"Docker\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dog\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f415\"],\n        \"secondary\": [\"10f6d3\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"animal\",\n        \"canine\",\n        \"dog\",\n        \"fauna\",\n        \"mammal\",\n        \"pet\",\n        \"pooch\",\n        \"puppy\",\n        \"woof\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6d3\",\n    \"label\": \"Dog\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M309.6 158.5L332.7 19.8C334.6 8.4 344.5 0 356.1 0c7.5 0 14.5 3.5 19 9.5L392 32h52.1c12.7 0 24.9 5.1 33.9 14.1L496 64h56c13.3 0 24 10.7 24 24v24c0 44.2-35.8 80-80 80H464 448 426.7l-5.1 30.5-112-64zM416 256.1L416 480c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V364.8c-24 12.3-51.2 19.2-80 19.2s-56-6.9-80-19.2V480c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V249.8c-28.8-10.9-51.4-35.3-59.2-66.5L1 167.8c-4.3-17.1 6.1-34.5 23.3-38.8s34.5 6.1 38.8 23.3l3.9 15.5C70.5 182 83.3 192 98 192h30 16H303.8L416 256.1zM464 80a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M309.6 158.5L332.7 19.8C334.6 8.4 344.5 0 356.1 0c7.5 0 14.5 3.5 19 9.5L392 32h52.1c12.7 0 24.9 5.1 33.9 14.1L496 64h56c13.3 0 24 10.7 24 24v24c0 44.2-35.8 80-80 80H464 448 426.7l-5.1 30.5-112-64zM416 256.1L416 480c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V364.8c-24 12.3-51.2 19.2-80 19.2s-56-6.9-80-19.2V480c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V249.8c-28.8-10.9-51.4-35.3-59.2-66.5L1 167.8c-4.3-17.1 6.1-34.5 23.3-38.8s34.5 6.1 38.8 23.3l3.9 15.5C70.5 182 83.3 192 98 192h30 16H303.8L416 256.1zM464 80a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dollar-sign\": {\n    \"aliases\": {\n      \"names\": [\"dollar\", \"usd\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4b2\", \"f155\"],\n        \"primary\": [\"f155\"],\n        \"secondary\": [\"1024\", \"10f155\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dollar Sign\",\n        \"currency\",\n        \"dollar\",\n        \"heavy dollar sign\",\n        \"money\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"24\",\n    \"label\": \"Dollar Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 0c17.7 0 32 14.3 32 32V67.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.1c-.4-.1-.9-.1-1.3-.2l-.2 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11V32c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 0c17.7 0 32 14.3 32 32V67.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.1c-.4-.1-.9-.1-1.3-.2l-.2 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11V32c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dolly\": {\n    \"aliases\": {\n      \"names\": [\"dolly-box\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f472\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"shipping\", \"transport\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f472\",\n    \"label\": \"Dolly\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0h72.9c27.5 0 52 17.6 60.7 43.8L257.7 320c30.1 .5 56.8 14.9 74 37l202.1-67.4c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5L352 417.7c-.9 52.2-43.5 94.3-96 94.3c-53 0-96-43-96-96c0-30.8 14.5-58.2 37-75.8L104.9 64H32C14.3 64 0 49.7 0 32zM244.8 134.5c-5.5-16.8 3.7-34.9 20.5-40.3L311 79.4l19.8 60.9 60.9-19.8L371.8 59.6l45.7-14.8c16.8-5.5 34.9 3.7 40.3 20.5l49.4 152.2c5.5 16.8-3.7 34.9-20.5 40.3L334.5 307.2c-16.8 5.5-34.9-3.7-40.3-20.5L244.8 134.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0h72.9c27.5 0 52 17.6 60.7 43.8L257.7 320c30.1 .5 56.8 14.9 74 37l202.1-67.4c16.8-5.6 34.9 3.5 40.5 20.2s-3.5 34.9-20.2 40.5L352 417.7c-.9 52.2-43.5 94.3-96 94.3c-53 0-96-43-96-96c0-30.8 14.5-58.2 37-75.8L104.9 64H32C14.3 64 0 49.7 0 32zM244.8 134.5c-5.5-16.8 3.7-34.9 20.5-40.3L311 79.4l19.8 60.9 60.9-19.8L371.8 59.6l45.7-14.8c16.8-5.5 34.9 3.7 40.3 20.5l49.4 152.2c5.5 16.8-3.7 34.9-20.5 40.3L334.5 307.2c-16.8 5.5-34.9-3.7-40.3-20.5L244.8 134.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dong-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Dong Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e169\",\n    \"label\": \"Dong Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M288 32c-17.7 0-32 14.3-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h32v49.1c-18.8-10.9-40.7-17.1-64-17.1c-70.7 0-128 57.3-128 128s57.3 128 128 128c24.5 0 47.4-6.9 66.8-18.8c5 11.1 16.2 18.8 29.2 18.8c17.7 0 32-14.3 32-32V288 128c17.7 0 32-14.3 32-32s-14.3-32-32-32c0-17.7-14.3-32-32-32zM128 288a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M288 32c-17.7 0-32 14.3-32 32l-32 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h32v49.1c-18.8-10.9-40.7-17.1-64-17.1c-70.7 0-128 57.3-128 128s57.3 128 128 128c24.5 0 47.4-6.9 66.8-18.8c5 11.1 16.2 18.8 29.2 18.8c17.7 0 32-14.3 32-32V288 128c17.7 0 32-14.3 32-32s-14.3-32-32-32c0-17.7-14.3-32-32-32zM128 288a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"door-closed\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6aa\"],\n        \"secondary\": [\"10f52a\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"doo\", \"door\", \"enter\", \"exit\", \"locked\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f52a\",\n    \"label\": \"Door Closed\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 64c0-35.3 28.7-64 64-64H416c35.3 0 64 28.7 64 64V448h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H432 144 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96V64zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 64c0-35.3 28.7-64 64-64H416c35.3 0 64 28.7 64 64V448h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H432 144 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96V64zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"door-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f52b\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"enter\", \"exit\", \"welcome\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f52b\",\n    \"label\": \"Door Open\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M320 32c0-9.9-4.5-19.2-12.3-25.2S289.8-1.4 280.2 1l-179.9 45C79 51.3 64 70.5 64 92.5V448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H96 288h32V480 32zM256 256c0 17.7-10.7 32-24 32s-24-14.3-24-32s10.7-32 24-32s24 14.3 24 32zm96-128h96V480c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H512V128c0-35.3-28.7-64-64-64H352v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M320 32c0-9.9-4.5-19.2-12.3-25.2S289.8-1.4 280.2 1l-179.9 45C79 51.3 64 70.5 64 92.5V448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H96 288h32V480 32zM256 256c0 17.7-10.7 32-24 32s-24-14.3-24-32s10.7-32 24-32s24 14.3 24 32zm96-128h96V480c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H512V128c0-35.3-28.7-64-64-64H352v64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dove\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f54a\"],\n        \"secondary\": [\"10f4ba\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bird\", \"dove\", \"fauna\", \"fly\", \"flying\", \"peace\", \"war\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4ba\",\n    \"label\": \"Dove\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160.8 96.5c14 17 31 30.9 49.5 42.2c25.9 15.8 53.7 25.9 77.7 31.6V138.8C265.8 108.5 250 71.5 248.6 28c-.4-11.3-7.5-21.5-18.4-24.4c-7.6-2-15.8-.2-21 5.8c-13.3 15.4-32.7 44.6-48.4 87.2zM320 144v30.6l0 0v1.3l0 0 0 32.1c-60.8-5.1-185-43.8-219.3-157.2C97.4 40 87.9 32 76.6 32c-7.9 0-15.3 3.9-18.8 11C46.8 65.9 32 112.1 32 176c0 116.9 80.1 180.5 118.4 202.8L11.8 416.6C6.7 418 2.6 421.8 .9 426.8s-.8 10.6 2.3 14.8C21.7 466.2 77.3 512 160 512c3.6 0 7.2-1.2 10-3.5L245.6 448H320c88.4 0 160-71.6 160-160V128l29.9-44.9c1.3-2 2.1-4.4 2.1-6.8c0-6.8-5.5-12.3-12.3-12.3H400c-44.2 0-80 35.8-80 80zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160.8 96.5c14 17 31 30.9 49.5 42.2c25.9 15.8 53.7 25.9 77.7 31.6V138.8C265.8 108.5 250 71.5 248.6 28c-.4-11.3-7.5-21.5-18.4-24.4c-7.6-2-15.8-.2-21 5.8c-13.3 15.4-32.7 44.6-48.4 87.2zM320 144v30.6l0 0v1.3l0 0 0 32.1c-60.8-5.1-185-43.8-219.3-157.2C97.4 40 87.9 32 76.6 32c-7.9 0-15.3 3.9-18.8 11C46.8 65.9 32 112.1 32 176c0 116.9 80.1 180.5 118.4 202.8L11.8 416.6C6.7 418 2.6 421.8 .9 426.8s-.8 10.6 2.3 14.8C21.7 466.2 77.3 512 160 512c3.6 0 7.2-1.2 10-3.5L245.6 448H320c88.4 0 160-71.6 160-160V128l29.9-44.9c1.3-2 2.1-4.4 2.1-6.8c0-6.8-5.5-12.3-12.3-12.3H400c-44.2 0-80 35.8-80 80zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"down-left-and-up-right-to-center\": {\n    \"aliases\": {\n      \"names\": [\"compress-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f422\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"collapse\",\n        \"fullscreen\",\n        \"minimize\",\n        \"move\",\n        \"resize\",\n        \"shrink\",\n        \"smaller\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f422\",\n    \"label\": \"Down Left And Up Right To Center\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M439 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8H296c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39L439 7zM72 272H216c13.3 0 24 10.7 24 24V440c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39L73 505c-9.4 9.4-24.6 9.4-33.9 0L7 473c-9.4-9.4-9.4-24.6 0-33.9l87-87L55 313c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M439 7c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8H296c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39L439 7zM72 272H216c13.3 0 24 10.7 24 24V440c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39L73 505c-9.4 9.4-24.6 9.4-33.9 0L7 473c-9.4-9.4-9.4-24.6 0-33.9l87-87L55 313c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"down-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-alt-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f309\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"download\", \"long-arrow-down\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f309\",\n    \"label\": \"Down Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M2 334.5c-3.8 8.8-2 19 4.6 26l136 144c4.5 4.8 10.8 7.5 17.4 7.5s12.9-2.7 17.4-7.5l136-144c6.6-7 8.4-17.2 4.6-26s-12.5-14.5-22-14.5l-72 0 0-288c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32l0 288-72 0c-9.6 0-18.2 5.7-22 14.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M2 334.5c-3.8 8.8-2 19 4.6 26l136 144c4.5 4.8 10.8 7.5 17.4 7.5s12.9-2.7 17.4-7.5l136-144c6.6-7 8.4-17.2 4.6-26s-12.5-14.5-22-14.5l-72 0 0-288c0-17.7-14.3-32-32-32L128 0C110.3 0 96 14.3 96 32l0 288-72 0c-9.6 0-18.2 5.7-22 14.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"download\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f019\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"export\", \"hard drive\", \"save\", \"transfer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f019\",\n    \"label\": \"Download\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"draft2digital\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f396\",\n    \"label\": \"Draft2digital\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 480 512\\\"><path d=\\\"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 480, 512],\n        \"width\": 480,\n        \"height\": 512,\n        \"path\": \"M480 398.1l-144-82.2v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480zM369.9 371l47.1 27.2-47.1 27.2zM134.2 161.4c0 12.4-10 22.4-22.4 22.4s-22.4-10-22.4-22.4 10-22.4 22.4-22.4 22.4 10.1 22.4 22.4zM82.5 380.5c25.6-27.4 97.7-104.7 150.8-169.9 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dragon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f409\"],\n        \"secondary\": [\"10f6d5\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"d&d\",\n        \"dnd\",\n        \"dragon\",\n        \"fairy tale\",\n        \"fantasy\",\n        \"fire\",\n        \"lizard\",\n        \"serpent\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6d5\",\n    \"label\": \"Dragon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4L294.4 28.8c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0H416h32 16c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8c0 26.5-21.5 48-48 48H538.5c-17 0-33.3-6.7-45.3-18.7L480 160H448v21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1C640 462.9 590.9 512 530.2 512H496 432 32.3c-3.3 0-6.6-.4-9.6-1.4C13.5 507.8 6 501 2.4 492.1C1 488.7 .2 485.2 0 481.4c-.2-3.7 .3-7.3 1.3-10.7c2.8-9.2 9.6-16.7 18.6-20.4c3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1c0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1V181.5v-57zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3v.6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9c0 13.3 10.7 24 24 24c10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87V227c0 32.8 8.4 64.8 24 93H112c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9s-1.5-14.1 3.8-18.8L130.9 116.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M352 124.5l-51.9-13c-6.5-1.6-11.3-7.1-12-13.8s2.8-13.1 8.7-16.1l40.8-20.4L294.4 28.8c-5.5-4.1-7.8-11.3-5.6-17.9S297.1 0 304 0H416h32 16c30.2 0 58.7 14.2 76.8 38.4l57.6 76.8c6.2 8.3 9.6 18.4 9.6 28.8c0 26.5-21.5 48-48 48H538.5c-17 0-33.3-6.7-45.3-18.7L480 160H448v21.5c0 24.8 12.8 47.9 33.8 61.1l106.6 66.6c32.1 20.1 51.6 55.2 51.6 93.1C640 462.9 590.9 512 530.2 512H496 432 32.3c-3.3 0-6.6-.4-9.6-1.4C13.5 507.8 6 501 2.4 492.1C1 488.7 .2 485.2 0 481.4c-.2-3.7 .3-7.3 1.3-10.7c2.8-9.2 9.6-16.7 18.6-20.4c3-1.2 6.2-2 9.5-2.2L433.3 412c8.3-.7 14.7-7.7 14.7-16.1c0-4.3-1.7-8.4-4.7-11.4l-44.4-44.4c-30-30-46.9-70.7-46.9-113.1V181.5v-57zM512 72.3c0-.1 0-.2 0-.3s0-.2 0-.3v.6zm-1.3 7.4L464.3 68.1c-.2 1.3-.3 2.6-.3 3.9c0 13.3 10.7 24 24 24c10.6 0 19.5-6.8 22.7-16.3zM130.9 116.5c16.3-14.5 40.4-16.2 58.5-4.1l130.6 87V227c0 32.8 8.4 64.8 24 93H112c-6.7 0-12.7-4.2-15-10.4s-.5-13.3 4.6-17.7L171 232.3 18.4 255.8c-7 1.1-13.9-2.6-16.9-9s-1.5-14.1 3.8-18.8L130.9 116.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"draw-polygon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5ee\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"anchors\", \"lines\", \"object\", \"render\", \"shape\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ee\",\n    \"label\": \"Draw Polygon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 151.4V360.6c9.7 5.6 17.8 13.7 23.4 23.4H328.6c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1l0 0 32-56 4.5-7.9-.1-.3H119.4c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V151.4C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32H328.6c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 151.4V360.6c9.7 5.6 17.8 13.7 23.4 23.4H328.6c0-.1 .1-.2 .1-.3l-4.5-7.9-32-56 0 0c-1.4 .1-2.8 .1-4.2 .1c-35.3 0-64-28.7-64-64s28.7-64 64-64c1.4 0 2.8 0 4.2 .1l0 0 32-56 4.5-7.9-.1-.3H119.4c-5.6 9.7-13.7 17.8-23.4 23.4zM384.3 352c35.2 .2 63.7 28.7 63.7 64c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V151.4C12.9 140.4 0 119.7 0 96C0 60.7 28.7 32 64 32c23.7 0 44.4 12.9 55.4 32H328.6c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 35.3-28.5 63.8-63.7 64l-4.5 7.9-32 56-2.3 4c4.2 8.5 6.5 18 6.5 28.1s-2.3 19.6-6.5 28.1l2.3 4 32 56 4.5 7.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dribbble\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f17d\",\n    \"label\": \"Dribbble\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dropbox\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"5.0.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f16b\",\n    \"label\": \"Dropbox\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 528 512\\\"><path d=\\\"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 528, 512],\n        \"width\": 528,\n        \"height\": 512,\n        \"path\": \"M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"droplet\": {\n    \"aliases\": {\n      \"names\": [\"tint\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4a7\"],\n        \"secondary\": [\"10f043\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cold\",\n        \"color\",\n        \"comic\",\n        \"drop\",\n        \"droplet\",\n        \"raindrop\",\n        \"sweat\",\n        \"waterdrop\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f043\",\n    \"label\": \"Droplet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"droplet-slash\": {\n    \"aliases\": {\n      \"names\": [\"tint-slash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5c7\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"color\", \"drop\", \"droplet\", \"raindrop\", \"waterdrop\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5c7\",\n    \"label\": \"Droplet Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.1 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0h-1.8c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 512c53.2 0 101.4-21.6 136.1-56.6l-298.3-235C140 257.1 128 292.3 128 320c0 106 86 192 192 192zM505.2 370.7c4.4-16.1 6.8-33.1 6.8-50.7c0-91.2-130.2-262.3-166.6-308.3C339.4 4.2 330.5 0 320.9 0h-1.8c-9.6 0-18.5 4.2-24.5 11.7C277.8 33 240.7 81.3 205.8 136L38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L505.2 370.7zM224 336c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"drum\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f941\"],\n        \"secondary\": [\"10f569\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"drum\",\n        \"drumsticks\",\n        \"instrument\",\n        \"music\",\n        \"percussion\",\n        \"snare\",\n        \"sound\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f569\",\n    \"label\": \"Drum\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M501.2 76.1c11.1-7.3 14.2-22.1 6.9-33.2s-22.1-14.2-33.2-6.9L370.2 104.5C335.8 98.7 297 96 256 96C114.6 96 0 128 0 208V368c0 31.3 27.4 58.8 72 78.7V344c0-13.3 10.7-24 24-24s24 10.7 24 24V463.4c33 8.9 71.1 14.5 112 16.1V376c0-13.3 10.7-24 24-24s24 10.7 24 24V479.5c40.9-1.6 79-7.2 112-16.1V344c0-13.3 10.7-24 24-24s24 10.7 24 24V446.7c44.6-19.9 72-47.4 72-78.7V208c0-41.1-30.2-69.5-78.8-87.4l67.9-44.5zM307.4 145.6l-64.6 42.3c-11.1 7.3-14.2 22.1-6.9 33.2s22.1 14.2 33.2 6.9l111.1-72.8c14.7 3.2 27.9 7 39.4 11.5C458.4 181.8 464 197.4 464 208c0 .8-2.7 17.2-46 35.9C379.1 260.7 322 272 256 272s-123.1-11.3-162-28.1C50.7 225.2 48 208.8 48 208c0-10.6 5.6-26.2 44.4-41.3C130.6 151.9 187.8 144 256 144c18 0 35.1 .5 51.4 1.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M501.2 76.1c11.1-7.3 14.2-22.1 6.9-33.2s-22.1-14.2-33.2-6.9L370.2 104.5C335.8 98.7 297 96 256 96C114.6 96 0 128 0 208V368c0 31.3 27.4 58.8 72 78.7V344c0-13.3 10.7-24 24-24s24 10.7 24 24V463.4c33 8.9 71.1 14.5 112 16.1V376c0-13.3 10.7-24 24-24s24 10.7 24 24V479.5c40.9-1.6 79-7.2 112-16.1V344c0-13.3 10.7-24 24-24s24 10.7 24 24V446.7c44.6-19.9 72-47.4 72-78.7V208c0-41.1-30.2-69.5-78.8-87.4l67.9-44.5zM307.4 145.6l-64.6 42.3c-11.1 7.3-14.2 22.1-6.9 33.2s22.1 14.2 33.2 6.9l111.1-72.8c14.7 3.2 27.9 7 39.4 11.5C458.4 181.8 464 197.4 464 208c0 .8-2.7 17.2-46 35.9C379.1 260.7 322 272 256 272s-123.1-11.3-162-28.1C50.7 225.2 48 208.8 48 208c0-10.6 5.6-26.2 44.4-41.3C130.6 151.9 187.8 144 256 144c18 0 35.1 .5 51.4 1.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"drum-steelpan\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f56a\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"calypso\",\n        \"instrument\",\n        \"music\",\n        \"percussion\",\n        \"reggae\",\n        \"snare\",\n        \"sound\",\n        \"steel\",\n        \"tropical\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f56a\",\n    \"label\": \"Drum Steelpan\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 32c159.1 0 288 48 288 128V352c0 80-128.9 128-288 128S0 432 0 352V160C0 80 128.9 32 288 32zM528 160c0-9.9-8-29.9-55-49.8c-18.6-7.9-40.9-14.4-66-19.4l-27.8 43.6c-7.3 11.5-11.2 24.8-11.2 38.4c0 17.5 6.4 34.4 18.1 47.5l9.8 11c29.8-5.2 55.9-12.5 77.2-21.5c47.1-19.9 55-39.9 55-49.8zM349.2 237.3c-8-26.2-32.4-45.3-61.2-45.3s-53.3 19.1-61.2 45.3c19.4 1.7 39.9 2.7 61.2 2.7s41.8-.9 61.2-2.7zM169 90.8c-25.2 5-47.4 11.6-66 19.4C56 130.1 48 150.1 48 160s8 29.9 55 49.8c21.3 9 47.4 16.3 77.2 21.5l9.8-11c11.6-13.1 18.1-30 18.1-47.5c0-13.6-3.9-26.9-11.2-38.4L169 90.8zm56.3-8C224.5 87 224 91.5 224 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-4.5-.5-9-1.4-13.2C330.8 81 309.8 80 288 80s-42.8 1-62.6 2.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 32c159.1 0 288 48 288 128V352c0 80-128.9 128-288 128S0 432 0 352V160C0 80 128.9 32 288 32zM528 160c0-9.9-8-29.9-55-49.8c-18.6-7.9-40.9-14.4-66-19.4l-27.8 43.6c-7.3 11.5-11.2 24.8-11.2 38.4c0 17.5 6.4 34.4 18.1 47.5l9.8 11c29.8-5.2 55.9-12.5 77.2-21.5c47.1-19.9 55-39.9 55-49.8zM349.2 237.3c-8-26.2-32.4-45.3-61.2-45.3s-53.3 19.1-61.2 45.3c19.4 1.7 39.9 2.7 61.2 2.7s41.8-.9 61.2-2.7zM169 90.8c-25.2 5-47.4 11.6-66 19.4C56 130.1 48 150.1 48 160s8 29.9 55 49.8c21.3 9 47.4 16.3 77.2 21.5l9.8-11c11.6-13.1 18.1-30 18.1-47.5c0-13.6-3.9-26.9-11.2-38.4L169 90.8zm56.3-8C224.5 87 224 91.5 224 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-4.5-.5-9-1.4-13.2C330.8 81 309.8 80 288 80s-42.8 1-62.6 2.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"drumstick-bite\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6d7\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bone\", \"chicken\", \"leg\", \"meat\", \"poultry\", \"turkey\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6d7\",\n    \"label\": \"Drumstick Bite\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 265.2c0 8.5-3.4 16.6-9.4 22.6l-26.8 26.8c-12.3 12.3-32.5 11.4-49.4 7.2C69.8 320.6 65 320 60 320c-33.1 0-60 26.9-60 60s26.9 60 60 60c6.3 0 12 5.7 12 12c0 33.1 26.9 60 60 60s60-26.9 60-60c0-5-.6-9.8-1.8-14.5c-4.2-16.9-5.2-37.1 7.2-49.4l26.8-26.8c6-6 14.1-9.4 22.6-9.4H336c6.3 0 12.4-.3 18.5-1c11.9-1.2 16.4-15.5 10.8-26c-8.5-15.8-13.3-33.8-13.3-53c0-61.9 50.1-112 112-112c8 0 15.7 .8 23.2 2.4c11.7 2.5 24.1-5.9 22-17.6C494.5 62.5 422.5 0 336 0C238.8 0 160 78.8 160 176v89.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 265.2c0 8.5-3.4 16.6-9.4 22.6l-26.8 26.8c-12.3 12.3-32.5 11.4-49.4 7.2C69.8 320.6 65 320 60 320c-33.1 0-60 26.9-60 60s26.9 60 60 60c6.3 0 12 5.7 12 12c0 33.1 26.9 60 60 60s60-26.9 60-60c0-5-.6-9.8-1.8-14.5c-4.2-16.9-5.2-37.1 7.2-49.4l26.8-26.8c6-6 14.1-9.4 22.6-9.4H336c6.3 0 12.4-.3 18.5-1c11.9-1.2 16.4-15.5 10.8-26c-8.5-15.8-13.3-33.8-13.3-53c0-61.9 50.1-112 112-112c8 0 15.7 .8 23.2 2.4c11.7 2.5 24.1-5.9 22-17.6C494.5 62.5 422.5 0 336 0C238.8 0 160 78.8 160 176v89.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"drupal\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a9\",\n    \"label\": \"Drupal Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M303.973,108.136C268.2,72.459,234.187,38.35,224.047,0c-9.957,38.35-44.25,72.459-80.019,108.136C90.467,161.7,29.716,222.356,29.716,313.436c-2.337,107.3,82.752,196.18,190.053,198.517S415.948,429.2,418.285,321.9q.091-4.231,0-8.464C418.285,222.356,357.534,161.7,303.973,108.136Zm-174.326,223a130.282,130.282,0,0,0-15.211,24.153,4.978,4.978,0,0,1-3.319,2.766h-1.659c-4.333,0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.247-25.72-1.475-62.318-1.475-62.318h0a160.585,160.585,0,0,1,23.231-49.873A290.8,290.8,0,0,1,138.5,201.613l9.219,9.219,43.512,44.434a4.979,4.979,0,0,1,0,6.638L145.78,312.33h0Zm96.612,127.311a67.2,67.2,0,0,1-49.781-111.915c14.2-16.871,31.528-33.464,50.334-55.313,22.309,23.785,36.875,40.1,51.164,57.986a28.413,28.413,0,0,1,2.95,4.425,65.905,65.905,0,0,1,11.984,37.981,66.651,66.651,0,0,1-66.466,66.836ZM352.371,351.6h0a7.743,7.743,0,0,1-6.176,5.347H344.9a11.249,11.249,0,0,1-6.269-5.07h0a348.21,348.21,0,0,0-39.456-48.952L281.387,284.49,222.3,223.185a497.888,497.888,0,0,1-35.4-36.322,12.033,12.033,0,0,0-.922-1.382,35.4,35.4,0,0,1-4.7-9.219V174.51a31.346,31.346,0,0,1,9.218-27.656c11.432-11.431,22.955-22.954,33.833-34.939,11.984,13.275,24.8,26,37.428,38.627h0a530.991,530.991,0,0,1,69.6,79.1,147.494,147.494,0,0,1,27.011,83.8A134.109,134.109,0,0,1,352.371,351.6Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M303.973,108.136C268.2,72.459,234.187,38.35,224.047,0c-9.957,38.35-44.25,72.459-80.019,108.136C90.467,161.7,29.716,222.356,29.716,313.436c-2.337,107.3,82.752,196.18,190.053,198.517S415.948,429.2,418.285,321.9q.091-4.231,0-8.464C418.285,222.356,357.534,161.7,303.973,108.136Zm-174.326,223a130.282,130.282,0,0,0-15.211,24.153,4.978,4.978,0,0,1-3.319,2.766h-1.659c-4.333,0-9.219-8.481-9.219-8.481h0c-1.29-2.028-2.489-4.149-3.687-6.361l-.83-1.752c-11.247-25.72-1.475-62.318-1.475-62.318h0a160.585,160.585,0,0,1,23.231-49.873A290.8,290.8,0,0,1,138.5,201.613l9.219,9.219,43.512,44.434a4.979,4.979,0,0,1,0,6.638L145.78,312.33h0Zm96.612,127.311a67.2,67.2,0,0,1-49.781-111.915c14.2-16.871,31.528-33.464,50.334-55.313,22.309,23.785,36.875,40.1,51.164,57.986a28.413,28.413,0,0,1,2.95,4.425,65.905,65.905,0,0,1,11.984,37.981,66.651,66.651,0,0,1-66.466,66.836ZM352.371,351.6h0a7.743,7.743,0,0,1-6.176,5.347H344.9a11.249,11.249,0,0,1-6.269-5.07h0a348.21,348.21,0,0,0-39.456-48.952L281.387,284.49,222.3,223.185a497.888,497.888,0,0,1-35.4-36.322,12.033,12.033,0,0,0-.922-1.382,35.4,35.4,0,0,1-4.7-9.219V174.51a31.346,31.346,0,0,1,9.218-27.656c11.432-11.431,22.955-22.954,33.833-34.939,11.984,13.275,24.8,26,37.428,38.627h0a530.991,530.991,0,0,1,69.6,79.1,147.494,147.494,0,0,1,27.011,83.8A134.109,134.109,0,0,1,352.371,351.6Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"dumbbell\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f44b\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"exercise\", \"gym\", \"strength\", \"weight\", \"weight-lifting\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f44b\",\n    \"label\": \"Dumbbell\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V224v64V448c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V384H64c-17.7 0-32-14.3-32-32V288c-17.7 0-32-14.3-32-32s14.3-32 32-32V160c0-17.7 14.3-32 32-32H96V64zm448 0v64h32c17.7 0 32 14.3 32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32v64c0 17.7-14.3 32-32 32H544v64c0 17.7-14.3 32-32 32H480c-17.7 0-32-14.3-32-32V288 224 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32zM416 224v64H224V224H416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V224v64V448c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V384H64c-17.7 0-32-14.3-32-32V288c-17.7 0-32-14.3-32-32s14.3-32 32-32V160c0-17.7 14.3-32 32-32H96V64zm448 0v64h32c17.7 0 32 14.3 32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32v64c0 17.7-14.3 32-32 32H544v64c0 17.7-14.3 32-32 32H480c-17.7 0-32-14.3-32-32V288 224 64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32zM416 224v64H224V224H416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dumpster\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f793\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alley\", \"bin\", \"commercial\", \"trash\", \"waste\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f793\",\n    \"label\": \"Dumpster\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160h94L140.5 32H49.7zM272 160V32H173.1L147.5 160H272zm32 0H428.5L402.9 32H304V160zm157.1 0h94c11.5 0 20.9-9.3 20.9-20.9c0-2.1-.3-4.1-.9-6.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32H435.5l25.6 128zM32 192l4 32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H44L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32H448c0 17.7 14.3 32 32 32s32-14.3 32-32l20-160h12c17.7 0 32-14.3 32-32s-14.3-32-32-32h-4l4-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160h94L140.5 32H49.7zM272 160V32H173.1L147.5 160H272zm32 0H428.5L402.9 32H304V160zm157.1 0h94c11.5 0 20.9-9.3 20.9-20.9c0-2.1-.3-4.1-.9-6.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32H435.5l25.6 128zM32 192l4 32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H44L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32H448c0 17.7 14.3 32 32 32s32-14.3 32-32l20-160h12c17.7 0 32-14.3 32-32s-14.3-32-32-32h-4l4-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dumpster-fire\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f794\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alley\",\n        \"bin\",\n        \"commercial\",\n        \"danger\",\n        \"dangerous\",\n        \"euphemism\",\n        \"flame\",\n        \"heat\",\n        \"hot\",\n        \"trash\",\n        \"waste\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f794\",\n    \"label\": \"Dumpster Fire\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160h94L140.5 32H49.7zM272 160V32H173.1L147.5 160H272zm32 0h58c15.1-18.1 32.1-35.7 50.5-52.1c1.5-1.4 3.2-2.6 4.8-3.8L402.9 32H304V160zm209.9-23.7c17.4-15.8 43.9-16.2 61.7-1.2c-.1-.7-.3-1.4-.5-2.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32H435.5l12.8 64.2c9.6 1 19 4.9 26.6 11.8c11.7 10.6 23 21.6 33.9 33.1c1.6-1.6 3.3-3.2 5-4.8zM325.2 210.7c3.8-6.2 7.9-12.5 12.3-18.7H32l4 32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H44L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32H337.6c-31-34.7-49.6-80.6-49.6-129.9c0-35.2 16.3-73.6 37.2-107.4zm128.4-78.9c-2.8-2.5-6.3-3.7-9.8-3.8c-3.6 0-7.2 1.2-10 3.7c-33.2 29.7-61.4 63.4-81.4 95.8c-19.7 31.9-32.4 66.2-32.4 92.6C320 407.9 390.3 480 480 480c88.7 0 160-72 160-159.8c0-20.2-9.6-50.9-24.2-79c-14.8-28.5-35.7-58.5-60.4-81.1c-5.6-5.1-14.4-5.2-20 0c-9.6 8.8-18.6 19.6-26.5 29.5c-17.3-20.7-35.8-39.9-55.5-57.7zM530 401c-15 10-31 15-49 15c-45 0-81-29-81-78c0-24 15-45 45-82c4 5 62 79 62 79l36-42c3 4 5 8 7 12c18 33 10 75-20 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M49.7 32c-10.5 0-19.8 6.9-22.9 16.9L.9 133c-.6 2-.9 4.1-.9 6.1C0 150.7 9.3 160 20.9 160h94L140.5 32H49.7zM272 160V32H173.1L147.5 160H272zm32 0h58c15.1-18.1 32.1-35.7 50.5-52.1c1.5-1.4 3.2-2.6 4.8-3.8L402.9 32H304V160zm209.9-23.7c17.4-15.8 43.9-16.2 61.7-1.2c-.1-.7-.3-1.4-.5-2.1L549.2 48.9C546.1 38.9 536.8 32 526.3 32H435.5l12.8 64.2c9.6 1 19 4.9 26.6 11.8c11.7 10.6 23 21.6 33.9 33.1c1.6-1.6 3.3-3.2 5-4.8zM325.2 210.7c3.8-6.2 7.9-12.5 12.3-18.7H32l4 32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H44L64 448c0 17.7 14.3 32 32 32s32-14.3 32-32H337.6c-31-34.7-49.6-80.6-49.6-129.9c0-35.2 16.3-73.6 37.2-107.4zm128.4-78.9c-2.8-2.5-6.3-3.7-9.8-3.8c-3.6 0-7.2 1.2-10 3.7c-33.2 29.7-61.4 63.4-81.4 95.8c-19.7 31.9-32.4 66.2-32.4 92.6C320 407.9 390.3 480 480 480c88.7 0 160-72 160-159.8c0-20.2-9.6-50.9-24.2-79c-14.8-28.5-35.7-58.5-60.4-81.1c-5.6-5.1-14.4-5.2-20 0c-9.6 8.8-18.6 19.6-26.5 29.5c-17.3-20.7-35.8-39.9-55.5-57.7zM530 401c-15 10-31 15-49 15c-45 0-81-29-81-78c0-24 15-45 45-82c4 5 62 79 62 79l36-42c3 4 5 8 7 12c18 33 10 75-20 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dungeon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6d9\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"building\",\n        \"d&d\",\n        \"dnd\",\n        \"door\",\n        \"entrance\",\n        \"fantasy\",\n        \"gate\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6d9\",\n    \"label\": \"Dungeon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M336.6 156.5c1.3 1.1 2.7 2.2 3.9 3.3c9.3 8.2 23 10.5 33.4 3.6l67.6-45.1c11.4-7.6 14.2-23.2 5.1-33.4C430 66.6 410.9 50.6 389.7 37.6c-11.9-7.3-26.9-1.4-32.1 11.6l-30.5 76.2c-4.5 11.1 .2 23.6 9.5 31.2zM328 36.8c5.1-12.8-1.6-27.4-15-30.5C294.7 2.2 275.6 0 256 0s-38.7 2.2-57 6.4C185.5 9.4 178.8 24 184 36.8l30.3 75.8c4.5 11.3 16.8 17.2 29 16c4.2-.4 8.4-.6 12.7-.6s8.6 .2 12.7 .6c12.1 1.2 24.4-4.7 29-16L328 36.8zM65.5 85c-9.1 10.2-6.3 25.8 5.1 33.4l67.6 45.1c10.3 6.9 24.1 4.6 33.4-3.6c1.3-1.1 2.6-2.3 4-3.3c9.3-7.5 13.9-20.1 9.5-31.2L154.4 49.2c-5.2-12.9-20.3-18.8-32.1-11.6C101.1 50.6 82 66.6 65.5 85zm314 137.1c.9 3.3 1.7 6.6 2.3 10c2.5 13 13 23.9 26.2 23.9h80c13.3 0 24.1-10.8 22.9-24c-2.5-27.2-9.3-53.2-19.7-77.3c-5.5-12.9-21.4-16.6-33.1-8.9l-68.6 45.7c-9.8 6.5-13.2 19.2-10 30.5zM53.9 145.8c-11.6-7.8-27.6-4-33.1 8.9C10.4 178.8 3.6 204.8 1.1 232c-1.2 13.2 9.6 24 22.9 24h80c13.3 0 23.8-10.8 26.2-23.9c.6-3.4 1.4-6.7 2.3-10c3.1-11.4-.2-24-10-30.5L53.9 145.8zM104 288H24c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V312c0-13.3-10.7-24-24-24zm304 0c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V312c0-13.3-10.7-24-24-24H408zM24 416c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V440c0-13.3-10.7-24-24-24H24zm384 0c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V440c0-13.3-10.7-24-24-24H408zM272 192c0-8.8-7.2-16-16-16s-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V192zm-64 32c0-8.8-7.2-16-16-16s-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V224zm128 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M336.6 156.5c1.3 1.1 2.7 2.2 3.9 3.3c9.3 8.2 23 10.5 33.4 3.6l67.6-45.1c11.4-7.6 14.2-23.2 5.1-33.4C430 66.6 410.9 50.6 389.7 37.6c-11.9-7.3-26.9-1.4-32.1 11.6l-30.5 76.2c-4.5 11.1 .2 23.6 9.5 31.2zM328 36.8c5.1-12.8-1.6-27.4-15-30.5C294.7 2.2 275.6 0 256 0s-38.7 2.2-57 6.4C185.5 9.4 178.8 24 184 36.8l30.3 75.8c4.5 11.3 16.8 17.2 29 16c4.2-.4 8.4-.6 12.7-.6s8.6 .2 12.7 .6c12.1 1.2 24.4-4.7 29-16L328 36.8zM65.5 85c-9.1 10.2-6.3 25.8 5.1 33.4l67.6 45.1c10.3 6.9 24.1 4.6 33.4-3.6c1.3-1.1 2.6-2.3 4-3.3c9.3-7.5 13.9-20.1 9.5-31.2L154.4 49.2c-5.2-12.9-20.3-18.8-32.1-11.6C101.1 50.6 82 66.6 65.5 85zm314 137.1c.9 3.3 1.7 6.6 2.3 10c2.5 13 13 23.9 26.2 23.9h80c13.3 0 24.1-10.8 22.9-24c-2.5-27.2-9.3-53.2-19.7-77.3c-5.5-12.9-21.4-16.6-33.1-8.9l-68.6 45.7c-9.8 6.5-13.2 19.2-10 30.5zM53.9 145.8c-11.6-7.8-27.6-4-33.1 8.9C10.4 178.8 3.6 204.8 1.1 232c-1.2 13.2 9.6 24 22.9 24h80c13.3 0 23.8-10.8 26.2-23.9c.6-3.4 1.4-6.7 2.3-10c3.1-11.4-.2-24-10-30.5L53.9 145.8zM104 288H24c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V312c0-13.3-10.7-24-24-24zm304 0c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V312c0-13.3-10.7-24-24-24H408zM24 416c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V440c0-13.3-10.7-24-24-24H24zm384 0c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V440c0-13.3-10.7-24-24-24H408zM272 192c0-8.8-7.2-16-16-16s-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V192zm-64 32c0-8.8-7.2-16-16-16s-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V224zm128 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V464c0 8.8 7.2 16 16 16s16-7.2 16-16V224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"dyalog\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f399\",\n    \"label\": \"Dyalog\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 416 512\\\"><path d=\\\"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 416, 512],\n        \"width\": 416,\n        \"height\": 512,\n        \"path\": \"M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"e\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"65\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter E\", \"Latin Small Letter E\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"45\",\n    \"label\": \"E\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V256 416c0 35.3 28.7 64 64 64H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V288H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V96H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V256 416c0 35.3 28.7 64 64 64H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V288H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V96H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ear-deaf\": {\n    \"aliases\": {\n      \"names\": [\"deaf\", \"deafness\", \"hard-of-hearing\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2a4\"]\n      }\n    },\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ear\", \"hearing\", \"sign language\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a4\",\n    \"label\": \"Ear Deaf\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M502.6 54.6l-40 40c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l40-40c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-320 320l-128 128c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM240 128c-57.6 0-105.1 43.6-111.3 99.5c-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3C74.8 132.5 149.4 64 240 64c97.2 0 176 78.8 176 176c0 46-17.7 87.9-46.6 119.3c-12 13-17.4 24.8-17.4 34.7V400c0 61.9-50.1 112-112 112c-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48v-6.1c0-32.9 17.4-59.6 34.4-78c18.4-20 29.6-46.6 29.6-75.9c0-61.9-50.1-112-112-112zm0 80c-17.7 0-32 14.3-32 32c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M502.6 54.6l-40 40c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l40-40c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zm-320 320l-128 128c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3zM240 128c-57.6 0-105.1 43.6-111.3 99.5c-1.9 17.6-17.8 30.2-35.3 28.3s-30.2-17.8-28.3-35.3C74.8 132.5 149.4 64 240 64c97.2 0 176 78.8 176 176c0 46-17.7 87.9-46.6 119.3c-12 13-17.4 24.8-17.4 34.7V400c0 61.9-50.1 112-112 112c-17.7 0-32-14.3-32-32s14.3-32 32-32c26.5 0 48-21.5 48-48v-6.1c0-32.9 17.4-59.6 34.4-78c18.4-20 29.6-46.6 29.6-75.9c0-61.9-50.1-112-112-112zm0 80c-17.7 0-32 14.3-32 32c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-17.7-14.3-32-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ear-listen\": {\n    \"aliases\": {\n      \"names\": [\"assistive-listening-systems\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2a2\"]\n      }\n    },\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"amplify\",\n        \"audio\",\n        \"deaf\",\n        \"ear\",\n        \"headset\",\n        \"hearing\",\n        \"sound\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a2\",\n    \"label\": \"Ear Listen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M398.3 3.4c-15.8-7.9-35-1.5-42.9 14.3c-7.9 15.8-1.5 34.9 14.2 42.9l.4 .2c.4 .2 1.1 .6 2.1 1.2c2 1.2 5 3 8.7 5.6c7.5 5.2 17.6 13.2 27.7 24.2C428.5 113.4 448 146 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32c0-66-28.5-113.4-56.5-143.7C441.6 33.2 427.7 22.2 417.3 15c-5.3-3.7-9.7-6.4-13-8.3c-1.6-1-3-1.7-4-2.2c-.5-.3-.9-.5-1.2-.7l-.4-.2-.2-.1-.1 0 0 0c0 0 0 0-14.3 28.6L398.3 3.4zM128.7 227.5c6.2-56 53.7-99.5 111.3-99.5c61.9 0 112 50.1 112 112c0 29.3-11.2 55.9-29.6 75.9c-17 18.4-34.4 45.1-34.4 78V400c0 26.5-21.5 48-48 48c-17.7 0-32 14.3-32 32s14.3 32 32 32c61.9 0 112-50.1 112-112v-6.1c0-9.8 5.4-21.7 17.4-34.7C398.3 327.9 416 286 416 240c0-97.2-78.8-176-176-176C149.4 64 74.8 132.5 65.1 220.5c-1.9 17.6 10.7 33.4 28.3 35.3s33.4-10.7 35.3-28.3zM32 512a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM192 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0zM208 240c0-17.7 14.3-32 32-32s32 14.3 32 32c0 13.3 10.7 24 24 24s24-10.7 24-24c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 13.3 10.7 24 24 24s24-10.7 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M398.3 3.4c-15.8-7.9-35-1.5-42.9 14.3c-7.9 15.8-1.5 34.9 14.2 42.9l.4 .2c.4 .2 1.1 .6 2.1 1.2c2 1.2 5 3 8.7 5.6c7.5 5.2 17.6 13.2 27.7 24.2C428.5 113.4 448 146 448 192c0 17.7 14.3 32 32 32s32-14.3 32-32c0-66-28.5-113.4-56.5-143.7C441.6 33.2 427.7 22.2 417.3 15c-5.3-3.7-9.7-6.4-13-8.3c-1.6-1-3-1.7-4-2.2c-.5-.3-.9-.5-1.2-.7l-.4-.2-.2-.1-.1 0 0 0c0 0 0 0-14.3 28.6L398.3 3.4zM128.7 227.5c6.2-56 53.7-99.5 111.3-99.5c61.9 0 112 50.1 112 112c0 29.3-11.2 55.9-29.6 75.9c-17 18.4-34.4 45.1-34.4 78V400c0 26.5-21.5 48-48 48c-17.7 0-32 14.3-32 32s14.3 32 32 32c61.9 0 112-50.1 112-112v-6.1c0-9.8 5.4-21.7 17.4-34.7C398.3 327.9 416 286 416 240c0-97.2-78.8-176-176-176C149.4 64 74.8 132.5 65.1 220.5c-1.9 17.6 10.7 33.4 28.3 35.3s33.4-10.7 35.3-28.3zM32 512a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM192 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0zM208 240c0-17.7 14.3-32 32-32s32 14.3 32 32c0 13.3 10.7 24 24 24s24-10.7 24-24c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 13.3 10.7 24 24 24s24-10.7 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"earlybirds\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f39a\",\n    \"label\": \"Earlybirds\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 480 512\\\"><path d=\\\"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 480, 512],\n        \"width\": 480,\n        \"height\": 512,\n        \"path\": \"M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"earth-africa\": {\n    \"aliases\": {\n      \"names\": [\"globe-africa\"],\n      \"unicodes\": {\n        \"composite\": [\"1f30d\"],\n        \"secondary\": [\"10f57c\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"africa\",\n        \"all\",\n        \"country\",\n        \"earth\",\n        \"europe\",\n        \"global\",\n        \"globe\",\n        \"gps\",\n        \"language\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"online\",\n        \"place\",\n        \"planet\",\n        \"translate\",\n        \"travel\",\n        \"world\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f57c\",\n    \"label\": \"Earth Africa\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M177.8 63.2l10 17.4c2.8 4.8 4.2 10.3 4.2 15.9v41.4c0 3.9 1.6 7.7 4.3 10.4c6.2 6.2 16.5 5.7 22-1.2l13.6-17c4.7-5.9 12.9-7.7 19.6-4.3l15.2 7.6c3.4 1.7 7.2 2.6 11 2.6c6.5 0 12.8-2.6 17.4-7.2l3.9-3.9c2.9-2.9 7.3-3.6 11-1.8l29.2 14.6c7.8 3.9 12.6 11.8 12.6 20.5c0 10.5-7.1 19.6-17.3 22.2l-35.4 8.8c-7.4 1.8-15.1 1.5-22.4-.9l-32-10.7c-3.3-1.1-6.7-1.7-10.2-1.7c-7 0-13.8 2.3-19.4 6.5L176 212c-10.1 7.6-16 19.4-16 32v28c0 26.5 21.5 48 48 48h32c8.8 0 16 7.2 16 16v48c0 17.7 14.3 32 32 32c10.1 0 19.6-4.7 25.6-12.8l25.6-34.1c8.3-11.1 12.8-24.6 12.8-38.4V318.6c0-3.9 2.6-7.3 6.4-8.2l5.3-1.3c11.9-3 20.3-13.7 20.3-26c0-7.1-2.8-13.9-7.8-18.9l-33.5-33.5c-3.7-3.7-3.7-9.7 0-13.4c5.7-5.7 14.1-7.7 21.8-5.1l14.1 4.7c12.3 4.1 25.7-1.5 31.5-13c3.5-7 11.2-10.8 18.9-9.2l27.4 5.5C432 112.4 351.5 48 256 48c-27.7 0-54 5.4-78.2 15.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M177.8 63.2l10 17.4c2.8 4.8 4.2 10.3 4.2 15.9v41.4c0 3.9 1.6 7.7 4.3 10.4c6.2 6.2 16.5 5.7 22-1.2l13.6-17c4.7-5.9 12.9-7.7 19.6-4.3l15.2 7.6c3.4 1.7 7.2 2.6 11 2.6c6.5 0 12.8-2.6 17.4-7.2l3.9-3.9c2.9-2.9 7.3-3.6 11-1.8l29.2 14.6c7.8 3.9 12.6 11.8 12.6 20.5c0 10.5-7.1 19.6-17.3 22.2l-35.4 8.8c-7.4 1.8-15.1 1.5-22.4-.9l-32-10.7c-3.3-1.1-6.7-1.7-10.2-1.7c-7 0-13.8 2.3-19.4 6.5L176 212c-10.1 7.6-16 19.4-16 32v28c0 26.5 21.5 48 48 48h32c8.8 0 16 7.2 16 16v48c0 17.7 14.3 32 32 32c10.1 0 19.6-4.7 25.6-12.8l25.6-34.1c8.3-11.1 12.8-24.6 12.8-38.4V318.6c0-3.9 2.6-7.3 6.4-8.2l5.3-1.3c11.9-3 20.3-13.7 20.3-26c0-7.1-2.8-13.9-7.8-18.9l-33.5-33.5c-3.7-3.7-3.7-9.7 0-13.4c5.7-5.7 14.1-7.7 21.8-5.1l14.1 4.7c12.3 4.1 25.7-1.5 31.5-13c3.5-7 11.2-10.8 18.9-9.2l27.4 5.5C432 112.4 351.5 48 256 48c-27.7 0-54 5.4-78.2 15.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"earth-americas\": {\n    \"aliases\": {\n      \"names\": [\"earth\", \"earth-america\", \"globe-americas\"],\n      \"unicodes\": {\n        \"composite\": [\"1f30e\"],\n        \"secondary\": [\"10f57d\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"all\",\n        \"america\",\n        \"country\",\n        \"earth\",\n        \"global\",\n        \"globe\",\n        \"gps\",\n        \"language\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"online\",\n        \"place\",\n        \"planet\",\n        \"translate\",\n        \"travel\",\n        \"world\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f57d\",\n    \"label\": \"Earth Americas\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M57.7 193l9.4 16.4c8.3 14.5 21.9 25.2 38 29.8L163 255.7c17.2 4.9 29 20.6 29 38.5v39.9c0 11 6.2 21 16 25.9s16 14.9 16 25.9v39c0 15.6 14.9 26.9 29.9 22.6c16.1-4.6 28.6-17.5 32.7-33.8l2.8-11.2c4.2-16.9 15.2-31.4 30.3-40l8.1-4.6c15-8.5 24.2-24.5 24.2-41.7v-8.3c0-12.7-5.1-24.9-14.1-33.9l-3.9-3.9c-9-9-21.2-14.1-33.9-14.1H257c-11.1 0-22.1-2.9-31.8-8.4l-34.5-19.7c-4.3-2.5-7.6-6.5-9.2-11.2c-3.2-9.6 1.1-20 10.2-24.5l5.9-3c6.6-3.3 14.3-3.9 21.3-1.5l23.2 7.7c8.2 2.7 17.2-.4 21.9-7.5c4.7-7 4.2-16.3-1.2-22.8l-13.6-16.3c-10-12-9.9-29.5 .3-41.3l15.7-18.3c8.8-10.3 10.2-25 3.5-36.7l-2.4-4.2c-3.5-.2-6.9-.3-10.4-.3C163.1 48 84.4 108.9 57.7 193zM464 256c0-36.8-9.6-71.4-26.4-101.5L412 164.8c-15.7 6.3-23.8 23.8-18.5 39.8l16.9 50.7c3.5 10.4 12 18.3 22.6 20.9l29.1 7.3c1.2-9 1.8-18.2 1.8-27.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M57.7 193l9.4 16.4c8.3 14.5 21.9 25.2 38 29.8L163 255.7c17.2 4.9 29 20.6 29 38.5v39.9c0 11 6.2 21 16 25.9s16 14.9 16 25.9v39c0 15.6 14.9 26.9 29.9 22.6c16.1-4.6 28.6-17.5 32.7-33.8l2.8-11.2c4.2-16.9 15.2-31.4 30.3-40l8.1-4.6c15-8.5 24.2-24.5 24.2-41.7v-8.3c0-12.7-5.1-24.9-14.1-33.9l-3.9-3.9c-9-9-21.2-14.1-33.9-14.1H257c-11.1 0-22.1-2.9-31.8-8.4l-34.5-19.7c-4.3-2.5-7.6-6.5-9.2-11.2c-3.2-9.6 1.1-20 10.2-24.5l5.9-3c6.6-3.3 14.3-3.9 21.3-1.5l23.2 7.7c8.2 2.7 17.2-.4 21.9-7.5c4.7-7 4.2-16.3-1.2-22.8l-13.6-16.3c-10-12-9.9-29.5 .3-41.3l15.7-18.3c8.8-10.3 10.2-25 3.5-36.7l-2.4-4.2c-3.5-.2-6.9-.3-10.4-.3C163.1 48 84.4 108.9 57.7 193zM464 256c0-36.8-9.6-71.4-26.4-101.5L412 164.8c-15.7 6.3-23.8 23.8-18.5 39.8l16.9 50.7c3.5 10.4 12 18.3 22.6 20.9l29.1 7.3c1.2-9 1.8-18.2 1.8-27.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"earth-asia\": {\n    \"aliases\": {\n      \"names\": [\"globe-asia\"],\n      \"unicodes\": {\n        \"composite\": [\"1f30f\"],\n        \"secondary\": [\"10f57e\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"all\",\n        \"asia\",\n        \"australia\",\n        \"country\",\n        \"earth\",\n        \"global\",\n        \"globe\",\n        \"gps\",\n        \"language\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"online\",\n        \"place\",\n        \"planet\",\n        \"translate\",\n        \"travel\",\n        \"world\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f57e\",\n    \"label\": \"Earth Asia\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M51.7 295.1l31.7 6.3c7.9 1.6 16-.9 21.7-6.6l15.4-15.4c11.6-11.6 31.1-8.4 38.4 6.2l9.3 18.5c4.8 9.6 14.6 15.7 25.4 15.7c15.2 0 26.1-14.6 21.7-29.2l-6-19.9c-4.6-15.4 6.9-30.9 23-30.9h2.3c13.4 0 25.9-6.7 33.3-17.8l10.7-16.1c5.6-8.5 5.3-19.6-.8-27.7l-16.1-21.5c-10.3-13.7-3.3-33.5 13.4-37.7l17-4.3c7.5-1.9 13.6-7.2 16.5-14.4l16.4-40.9C303.4 52.1 280.2 48 256 48C141.1 48 48 141.1 48 256c0 13.4 1.3 26.5 3.7 39.1zm407.7 4.6c-3-.3-6-.1-9 .8l-15.8 4.4c-6.7 1.9-13.8-.9-17.5-6.7l-2-3.1c-6-9.4-16.4-15.1-27.6-15.1s-21.6 5.7-27.6 15.1l-6.1 9.5c-1.4 2.2-3.4 4.1-5.7 5.3L312 330.1c-18.1 10.1-25.5 32.4-17 51.3l5.5 12.4c8.6 19.2 30.7 28.5 50.5 21.1l2.6-1c10-3.7 21.3-2.2 29.9 4.1l1.5 1.1c37.2-29.5 64.1-71.4 74.4-119.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm144.5 92.1c-2.1 8.6 3.1 17.3 11.6 19.4l32 8c8.6 2.1 17.3-3.1 19.4-11.6s-3.1-17.3-11.6-19.4l-32-8c-8.6-2.1-17.3 3.1-19.4 11.6zm92-20c-2.1 8.6 3.1 17.3 11.6 19.4s17.3-3.1 19.4-11.6l8-32c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-8 32zM343.2 113.7c-7.9-4-17.5-.7-21.5 7.2l-16 32c-4 7.9-.7 17.5 7.2 21.5s17.5 .7 21.5-7.2l16-32c4-7.9 .7-17.5-7.2-21.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M51.7 295.1l31.7 6.3c7.9 1.6 16-.9 21.7-6.6l15.4-15.4c11.6-11.6 31.1-8.4 38.4 6.2l9.3 18.5c4.8 9.6 14.6 15.7 25.4 15.7c15.2 0 26.1-14.6 21.7-29.2l-6-19.9c-4.6-15.4 6.9-30.9 23-30.9h2.3c13.4 0 25.9-6.7 33.3-17.8l10.7-16.1c5.6-8.5 5.3-19.6-.8-27.7l-16.1-21.5c-10.3-13.7-3.3-33.5 13.4-37.7l17-4.3c7.5-1.9 13.6-7.2 16.5-14.4l16.4-40.9C303.4 52.1 280.2 48 256 48C141.1 48 48 141.1 48 256c0 13.4 1.3 26.5 3.7 39.1zm407.7 4.6c-3-.3-6-.1-9 .8l-15.8 4.4c-6.7 1.9-13.8-.9-17.5-6.7l-2-3.1c-6-9.4-16.4-15.1-27.6-15.1s-21.6 5.7-27.6 15.1l-6.1 9.5c-1.4 2.2-3.4 4.1-5.7 5.3L312 330.1c-18.1 10.1-25.5 32.4-17 51.3l5.5 12.4c8.6 19.2 30.7 28.5 50.5 21.1l2.6-1c10-3.7 21.3-2.2 29.9 4.1l1.5 1.1c37.2-29.5 64.1-71.4 74.4-119.5zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm144.5 92.1c-2.1 8.6 3.1 17.3 11.6 19.4l32 8c8.6 2.1 17.3-3.1 19.4-11.6s-3.1-17.3-11.6-19.4l-32-8c-8.6-2.1-17.3 3.1-19.4 11.6zm92-20c-2.1 8.6 3.1 17.3 11.6 19.4s17.3-3.1 19.4-11.6l8-32c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-8 32zM343.2 113.7c-7.9-4-17.5-.7-21.5 7.2l-16 32c-4 7.9-.7 17.5 7.2 21.5s17.5 .7 21.5-7.2l16-32c4-7.9 .7-17.5-7.2-21.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"earth-europe\": {\n    \"aliases\": {\n      \"names\": [\"globe-europe\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7a2\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"all\",\n        \"country\",\n        \"earth\",\n        \"europe\",\n        \"global\",\n        \"globe\",\n        \"gps\",\n        \"language\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"online\",\n        \"place\",\n        \"planet\",\n        \"translate\",\n        \"travel\",\n        \"world\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7a2\",\n    \"label\": \"Earth Europe\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1v9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1h1c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24v4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6H400c8.8 0 16 7.2 16 16s-7.2 16-16 16H379.3c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3h11.3c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16H454c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.7-15.4H251.4c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3v3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3H248c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M266.3 48.3L232.5 73.6c-5.4 4-8.5 10.4-8.5 17.1v9.1c0 6.8 5.5 12.3 12.3 12.3c2.4 0 4.8-.7 6.8-2.1l41.8-27.9c2-1.3 4.4-2.1 6.8-2.1h1c6.2 0 11.3 5.1 11.3 11.3c0 3-1.2 5.9-3.3 8l-19.9 19.9c-5.8 5.8-12.9 10.2-20.7 12.8l-26.5 8.8c-5.8 1.9-9.6 7.3-9.6 13.4c0 3.7-1.5 7.3-4.1 10l-17.9 17.9c-6.4 6.4-9.9 15-9.9 24v4.3c0 16.4 13.6 29.7 29.9 29.7c11 0 21.2-6.2 26.1-16l4-8.1c2.4-4.8 7.4-7.9 12.8-7.9c4.5 0 8.7 2.1 11.4 5.7l16.3 21.7c2.1 2.9 5.5 4.5 9.1 4.5c8.4 0 13.9-8.9 10.1-16.4l-1.1-2.3c-3.5-7 0-15.5 7.5-18l21.2-7.1c7.6-2.5 12.7-9.6 12.7-17.6c0-10.3 8.3-18.6 18.6-18.6H400c8.8 0 16 7.2 16 16s-7.2 16-16 16H379.3c-7.2 0-14.2 2.9-19.3 8l-4.7 4.7c-2.1 2.1-3.3 5-3.3 8c0 6.2 5.1 11.3 11.3 11.3h11.3c6 0 11.8 2.4 16 6.6l6.5 6.5c1.8 1.8 2.8 4.3 2.8 6.8s-1 5-2.8 6.8l-7.5 7.5C386 262 384 266.9 384 272s2 10 5.7 13.7L408 304c10.2 10.2 24.1 16 38.6 16H454c6.5-20.2 10-41.7 10-64c0-111.4-87.6-202.4-197.7-207.7zm172 307.9c-3.7-2.6-8.2-4.1-13-4.1c-6 0-11.8-2.4-16-6.6L396 332c-7.7-7.7-18-12-28.9-12c-9.7 0-19.2-3.5-26.6-9.8L314 287.4c-11.6-9.9-26.4-15.4-41.7-15.4H251.4c-12.6 0-25 3.7-35.5 10.7L188.5 301c-17.8 11.9-28.5 31.9-28.5 53.3v3.2c0 17 6.7 33.3 18.7 45.3l16 16c8.5 8.5 20 13.3 32 13.3H248c13.3 0 24 10.7 24 24c0 2.5 .4 5 1.1 7.3c71.3-5.8 132.5-47.6 165.2-107.2zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM187.3 100.7c-6.2-6.2-16.4-6.2-22.6 0l-32 32c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l32-32c6.2-6.2 6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"earth-oceania\": {\n    \"aliases\": {\n      \"names\": [\"globe-oceania\"]\n    },\n    \"changes\": [\"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"all\",\n        \"australia\",\n        \"country\",\n        \"earth\",\n        \"global\",\n        \"globe\",\n        \"gps\",\n        \"language\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"melanesia\",\n        \"micronesia\",\n        \"new zealand\",\n        \"online\",\n        \"place\",\n        \"planet\",\n        \"polynesia\",\n        \"translate\",\n        \"travel\",\n        \"world\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e47b\",\n    \"label\": \"Earth Oceania\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM208.6 357.3l-39-13.5c-6.5-2.2-13.6-2.3-20.1-.3l-15.3 4.9c-18.5 5.9-38.5-2.4-47.5-19.5l-3.3-6.2c-10.6-20.1-2.3-45 18.2-54.7l35.3-16.8c2.3-1.1 4.4-2.8 5.9-4.8l5.3-7c7.2-9.6 18.6-15.3 30.6-15.3s23.4 5.7 30.6 15.3l4.6 6.1c2 2.6 4.9 4.5 8.1 5.1c7.8 1.6 15.7-1.5 20.4-7.9l10.4-14.2c2-2.8 5.3-4.4 8.7-4.4c4.4 0 8.4 2.7 10 6.8l10.1 25.9c2.8 7.2 6.7 14 11.5 20.2L311 299.8c5.8 7.4 9 16.6 9 26s-3.2 18.6-9 26L299 367.2c-8.3 10.6-21 16.8-34.4 16.8c-8.4 0-16.6-2.4-23.7-7l-25.4-16.4c-2.2-1.4-4.5-2.5-6.9-3.4zm65.2-214.8L296 164.7c10.1 10.1 2.9 27.3-11.3 27.3H254.8c-5.6 0-11.1-1.2-16.2-3.4l-42.8-19c-14.3-6.3-11.9-27.3 3.4-30.3l38.5-7.7c13.1-2.6 26.7 1.5 36.1 10.9zM248 432c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H264c-8.8 0-16-7.2-16-16zM431.2 298.9l8 24c2.8 8.4-1.7 17.4-10.1 20.2s-17.4-1.7-20.2-10.1l-8-24c-2.8-8.4 1.7-17.4 10.1-20.2s17.4 1.7 20.2 10.1zm-19.9 80.4l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM208.6 357.3l-39-13.5c-6.5-2.2-13.6-2.3-20.1-.3l-15.3 4.9c-18.5 5.9-38.5-2.4-47.5-19.5l-3.3-6.2c-10.6-20.1-2.3-45 18.2-54.7l35.3-16.8c2.3-1.1 4.4-2.8 5.9-4.8l5.3-7c7.2-9.6 18.6-15.3 30.6-15.3s23.4 5.7 30.6 15.3l4.6 6.1c2 2.6 4.9 4.5 8.1 5.1c7.8 1.6 15.7-1.5 20.4-7.9l10.4-14.2c2-2.8 5.3-4.4 8.7-4.4c4.4 0 8.4 2.7 10 6.8l10.1 25.9c2.8 7.2 6.7 14 11.5 20.2L311 299.8c5.8 7.4 9 16.6 9 26s-3.2 18.6-9 26L299 367.2c-8.3 10.6-21 16.8-34.4 16.8c-8.4 0-16.6-2.4-23.7-7l-25.4-16.4c-2.2-1.4-4.5-2.5-6.9-3.4zm65.2-214.8L296 164.7c10.1 10.1 2.9 27.3-11.3 27.3H254.8c-5.6 0-11.1-1.2-16.2-3.4l-42.8-19c-14.3-6.3-11.9-27.3 3.4-30.3l38.5-7.7c13.1-2.6 26.7 1.5 36.1 10.9zM248 432c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H264c-8.8 0-16-7.2-16-16zM431.2 298.9l8 24c2.8 8.4-1.7 17.4-10.1 20.2s-17.4-1.7-20.2-10.1l-8-24c-2.8-8.4 1.7-17.4 10.1-20.2s17.4 1.7 20.2 10.1zm-19.9 80.4l-32 32c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l32-32c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ebay\": {\n    \"changes\": [\"5.0.11\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f4\",\n    \"label\": \"eBay\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M606 189.5l-54.8 109.9-54.9-109.9h-37.5l10.9 20.6c-11.5-19-35.9-26-63.3-26-31.8 0-67.9 8.7-71.5 43.1h33.7c1.4-13.8 15.7-21.8 35-21.8 26 0 41 9.6 41 33v3.4c-12.7 0-28 .1-41.7.4-42.4.9-69.6 10-76.7 34.4 1-5.2 1.5-10.6 1.5-16.2 0-52.1-39.7-76.2-75.4-76.2-21.3 0-43 5.5-58.7 24.2v-80.6h-32.1v169.5c0 10.3-.6 22.9-1.1 33.1h31.5c.7-6.3 1.1-12.9 1.1-19.5 13.6 16.6 35.4 24.9 58.7 24.9 36.9 0 64.9-21.9 73.3-54.2-.5 2.8-.7 5.8-.7 9 0 24.1 21.1 45 60.6 45 26.6 0 45.8-5.7 61.9-25.5 0 6.6.3 13.3 1.1 20.2h29.8c-.7-8.2-1-17.5-1-26.8v-65.6c0-9.3-1.7-17.2-4.8-23.8l61.5 116.1-28.5 54.1h35.9L640 189.5zM243.7 313.8c-29.6 0-50.2-21.5-50.2-53.8 0-32.4 20.6-53.8 50.2-53.8 29.8 0 50.2 21.4 50.2 53.8 0 32.3-20.4 53.8-50.2 53.8zm200.9-47.3c0 30-17.9 48.4-51.6 48.4-25.1 0-35-13.4-35-25.8 0-19.1 18.1-24.4 47.2-25.3 13.1-.5 27.6-.6 39.4-.6zm-411.9 1.6h128.8v-8.5c0-51.7-33.1-75.4-78.4-75.4-56.8 0-83 30.8-83 77.6 0 42.5 25.3 74 82.5 74 31.4 0 68-11.7 74.4-46.1h-33.1c-12 35.8-87.7 36.7-91.2-21.6zm95-21.4H33.3c6.9-56.6 92.1-54.7 94.4 0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"edge\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"5.12.1\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\", \"ie\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f282\",\n    \"label\": \"Edge Browser\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M120.1 37.44C161.1 12.23 207.7-.7753 255 .0016C423 .0016 512 123.8 512 219.5C511.9 252.2 499 283.4 476.1 306.7C453.2 329.9 422.1 343.2 389.4 343.7C314.2 343.7 297.9 320.6 297.9 311.7C297.9 307.9 299.1 305.5 302.7 302.3L303.7 301.1L304.1 299.5C314.6 288 320 273.3 320 257.9C320 179.2 237.8 115.2 136 115.2C98.46 114.9 61.46 124.1 28.48 142.1C55.48 84.58 111.2 44.5 119.8 38.28C120.6 37.73 120.1 37.44 120.1 37.44V37.44zM135.7 355.5C134.3 385.5 140.3 415.5 152.1 442.7C165.7 469.1 184.8 493.7 208.6 512C149.1 500.5 97.11 468.1 59.2 422.7C21.12 376.3 0 318.4 0 257.9C0 206.7 62.4 163.5 136 163.5C172.6 162.9 208.4 174.4 237.8 196.2L234.2 197.4C182.7 215 135.7 288.1 135.7 355.5V355.5zM469.8 400L469.1 400.1C457.3 418.9 443.2 435.2 426.9 449.6C396.1 477.6 358.8 495.1 318.1 499.5C299.5 499.8 281.3 496.3 264.3 488.1C238.7 477.8 217.2 458.1 202.7 435.1C188.3 411.2 181.6 383.4 183.7 355.5C183.1 335.4 189.1 315.2 198.7 297.3C212.6 330.4 236.2 358.6 266.3 378.1C296.4 397.6 331.8 407.6 367.7 406.7C398.7 407 429.8 400 457.9 386.2L459.8 385.3C463.7 383 467.5 381.4 471.4 385.3C475.9 390.2 473.2 394.5 470.2 399.3C470 399.5 469.9 399.8 469.8 400V400z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M120.1 37.44C161.1 12.23 207.7-.7753 255 .0016C423 .0016 512 123.8 512 219.5C511.9 252.2 499 283.4 476.1 306.7C453.2 329.9 422.1 343.2 389.4 343.7C314.2 343.7 297.9 320.6 297.9 311.7C297.9 307.9 299.1 305.5 302.7 302.3L303.7 301.1L304.1 299.5C314.6 288 320 273.3 320 257.9C320 179.2 237.8 115.2 136 115.2C98.46 114.9 61.46 124.1 28.48 142.1C55.48 84.58 111.2 44.5 119.8 38.28C120.6 37.73 120.1 37.44 120.1 37.44V37.44zM135.7 355.5C134.3 385.5 140.3 415.5 152.1 442.7C165.7 469.1 184.8 493.7 208.6 512C149.1 500.5 97.11 468.1 59.2 422.7C21.12 376.3 0 318.4 0 257.9C0 206.7 62.4 163.5 136 163.5C172.6 162.9 208.4 174.4 237.8 196.2L234.2 197.4C182.7 215 135.7 288.1 135.7 355.5V355.5zM469.8 400L469.1 400.1C457.3 418.9 443.2 435.2 426.9 449.6C396.1 477.6 358.8 495.1 318.1 499.5C299.5 499.8 281.3 496.3 264.3 488.1C238.7 477.8 217.2 458.1 202.7 435.1C188.3 411.2 181.6 383.4 183.7 355.5C183.1 335.4 189.1 315.2 198.7 297.3C212.6 330.4 236.2 358.6 266.3 378.1C296.4 397.6 331.8 407.6 367.7 406.7C398.7 407 429.8 400 457.9 386.2L459.8 385.3C463.7 383 467.5 381.4 471.4 385.3C475.9 390.2 473.2 394.5 470.2 399.3C470 399.5 469.9 399.8 469.8 400V400z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"edge-legacy\": {\n    \"changes\": [\"5.13.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e078\",\n    \"label\": \"Edge Legacy Browser\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M25.71,228.16l.35-.48c0,.16,0,.32-.07.48Zm460.58,15.51c0-44-7.76-84.46-28.81-122.4C416.5,47.88,343.91,8,258.89,8,119,7.72,40.62,113.21,26.06,227.68c42.42-61.31,117.07-121.38,220.37-125,0,0,109.67,0,99.42,105H170c6.37-37.39,18.55-59,34.34-78.93-75.05,34.9-121.85,96.1-120.75,188.32.83,71.45,50.13,144.84,120.75,172,83.35,31.84,192.77,7.2,240.13-21.33V363.31C363.6,419.8,173.6,424.23,172.21,295.74H486.29V243.67Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"egg\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f95a\"],\n        \"secondary\": [\"10f7fb\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"breakfast\",\n        \"chicken\",\n        \"easter\",\n        \"egg\",\n        \"food\",\n        \"shell\",\n        \"yolk\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7fb\",\n    \"label\": \"Egg\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 496C86 496 0 394 0 288C0 176 64 16 192 16s192 160 192 272c0 106-86 208-192 208zM154.8 134c6.5-6 7-16.1 1-22.6s-16.1-7-22.6-1c-23.9 21.8-41.1 52.7-52.3 84.2C69.7 226.1 64 259.7 64 288c0 8.8 7.2 16 16 16s16-7.2 16-16c0-24.5 5-54.4 15.1-82.8c10.1-28.5 25-54.1 43.7-71.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 496C86 496 0 394 0 288C0 176 64 16 192 16s192 160 192 272c0 106-86 208-192 208zM154.8 134c6.5-6 7-16.1 1-22.6s-16.1-7-22.6-1c-23.9 21.8-41.1 52.7-52.3 84.2C69.7 226.1 64 259.7 64 288c0 8.8 7.2 16 16 16s16-7.2 16-16c0-24.5 5-54.4 15.1-82.8c10.1-28.5 25-54.1 43.7-71.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"eject\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23cf\"],\n        \"secondary\": [\"10f052\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abort\", \"cancel\", \"cd\", \"discharge\", \"eject\", \"eject button\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f052\",\n    \"label\": \"Eject\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 32c13.5 0 26.3 5.6 35.4 15.6l176 192c12.9 14 16.2 34.3 8.6 51.8S419 320 400 320H48c-19 0-36.3-11.2-43.9-28.7s-4.3-37.7 8.6-51.8l176-192C197.7 37.6 210.5 32 224 32zM0 432c0-26.5 21.5-48 48-48H400c26.5 0 48 21.5 48 48s-21.5 48-48 48H48c-26.5 0-48-21.5-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 32c13.5 0 26.3 5.6 35.4 15.6l176 192c12.9 14 16.2 34.3 8.6 51.8S419 320 400 320H48c-19 0-36.3-11.2-43.9-28.7s-4.3-37.7 8.6-51.8l176-192C197.7 37.6 210.5 32 224 32zM0 432c0-26.5 21.5-48 48-48H400c26.5 0 48 21.5 48 48s-21.5 48-48 48H48c-26.5 0-48-21.5-48-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"elementor\": {\n    \"changes\": [\"5.0.3\", \"6.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f430\",\n    \"label\": \"Elementor\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M.361 256C.361 397 114 511 255 511C397 511 511 397 511 256C511 116 397 2.05 255 2.05C114 2.05 .361 116 .361 256zM192 150V363H149V150H192zM234 150H362V193H234V150zM362 235V278H234V235H362zM234 320H362V363H234V320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M.361 256C.361 397 114 511 255 511C397 511 511 397 511 256C511 116 397 2.05 255 2.05C114 2.05 .361 116 .361 256zM192 150V363H149V150H192zM234 150H362V193H234V150zM362 235V278H234V235H362zM234 320H362V363H234V320z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"elevator\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"accessibility\", \"elevator\", \"hoist\", \"lift\", \"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e16d\",\n    \"label\": \"Elevator\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M132.7 4.7l-64 64c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9H208c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-64-64c-6.2-6.2-16.4-6.2-22.6 0zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64H64zm96 96a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM80 400c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v16c0 17.7-14.3 32-32 32H112c-17.7 0-32-14.3-32-32V400zm192 0c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v16c0 17.7-14.3 32-32 32H304c-17.7 0-32-14.3-32-32V400zm32-128a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM356.7 91.3c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S438.5 0 432 0H304c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M132.7 4.7l-64 64c-4.6 4.6-5.9 11.5-3.5 17.4s8.3 9.9 14.8 9.9H208c6.5 0 12.3-3.9 14.8-9.9s1.1-12.9-3.5-17.4l-64-64c-6.2-6.2-16.4-6.2-22.6 0zM64 128c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64H64zm96 96a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM80 400c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v16c0 17.7-14.3 32-32 32H112c-17.7 0-32-14.3-32-32V400zm192 0c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v16c0 17.7-14.3 32-32 32H304c-17.7 0-32-14.3-32-32V400zm32-128a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM356.7 91.3c6.2 6.2 16.4 6.2 22.6 0l64-64c4.6-4.6 5.9-11.5 3.5-17.4S438.5 0 432 0H304c-6.5 0-12.3 3.9-14.8 9.9s-1.1 12.9 3.5 17.4l64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ellipsis\": {\n    \"aliases\": {\n      \"names\": [\"ellipsis-h\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f141\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"dots\",\n        \"drag\",\n        \"kebab\",\n        \"list\",\n        \"menu\",\n        \"nav\",\n        \"navigation\",\n        \"ol\",\n        \"pacman\",\n        \"reorder\",\n        \"settings\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f141\",\n    \"label\": \"Ellipsis\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M8 256a56 56 0 1 1 112 0A56 56 0 1 1 8 256zm160 0a56 56 0 1 1 112 0 56 56 0 1 1 -112 0zm216-56a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ellipsis-vertical\": {\n    \"aliases\": {\n      \"names\": [\"ellipsis-v\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f142\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"dots\",\n        \"drag\",\n        \"kebab\",\n        \"list\",\n        \"menu\",\n        \"nav\",\n        \"navigation\",\n        \"ol\",\n        \"reorder\",\n        \"settings\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f142\",\n    \"label\": \"Ellipsis Vertical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 128 512\\\"><path d=\\\"M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 128, 512],\n        \"width\": 128,\n        \"height\": 512,\n        \"path\": \"M64 360a56 56 0 1 0 0 112 56 56 0 1 0 0-112zm0-160a56 56 0 1 0 0 112 56 56 0 1 0 0-112zM120 96A56 56 0 1 0 8 96a56 56 0 1 0 112 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ello\": {\n    \"changes\": [\"5.2.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5f1\",\n    \"label\": \"Ello\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ember\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f423\",\n    \"label\": \"Ember\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1-44.2-27.6-49-24c-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-11.4-6.8-21.3-.5-27.2 5.3 13.6-17.3 46.4-64.2 36.9-105.2-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5-28.5 18.8-28.5 18.8-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7 16.4 1 36.5-47.9c11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7 30.9 5.3 30.9 5.3 15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"empire\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d1\",\n    \"label\": \"Galactic Empire\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"envelope\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f582\", \"2709\", \"f003\"],\n        \"secondary\": [\"10f0e0\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Back of Envelope\",\n        \"e-mail\",\n        \"email\",\n        \"envelope\",\n        \"letter\",\n        \"mail\",\n        \"message\",\n        \"notification\",\n        \"support\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0e0\",\n    \"label\": \"Envelope\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 112c-8.8 0-16 7.2-16 16v22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16H64zM48 212.2V384c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 112c-8.8 0-16 7.2-16 16v22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16H64zM48 212.2V384c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"envelope-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"check\",\n        \"email\",\n        \"envelope\",\n        \"mail\",\n        \"not affected\",\n        \"ok\",\n        \"okay\",\n        \"read\",\n        \"sent\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e8\",\n    \"label\": \"Envelope Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0l57.4-43c23.9-59.8 79.7-103.3 146.3-109.8l13.9-10.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176V384c0 35.3 28.7 64 64 64H360.2C335.1 417.6 320 378.5 320 336c0-5.6 .3-11.1 .8-16.6l-26.4 19.8zM640 336a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 353.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0l57.4-43c23.9-59.8 79.7-103.3 146.3-109.8l13.9-10.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176V384c0 35.3 28.7 64 64 64H360.2C335.1 417.6 320 378.5 320 336c0-5.6 .3-11.1 .8-16.6l-26.4 19.8zM640 336a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 353.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"envelope-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f2b7\"],\n        \"secondary\": [\"10f2b6\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"e-mail\",\n        \"email\",\n        \"letter\",\n        \"mail\",\n        \"message\",\n        \"notification\",\n        \"support\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2b6\",\n    \"label\": \"Envelope Open\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 208.1L256 65.9 448 208.1v47.4L289.5 373c-9.7 7.2-21.4 11-33.5 11s-23.8-3.9-33.5-11L64 255.5V208.1zM256 0c-12.1 0-23.8 3.9-33.5 11L25.9 156.7C9.6 168.8 0 187.8 0 208.1V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V208.1c0-20.3-9.6-39.4-25.9-51.4L289.5 11C279.8 3.9 268.1 0 256 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 208.1L256 65.9 448 208.1v47.4L289.5 373c-9.7 7.2-21.4 11-33.5 11s-23.8-3.9-33.5-11L64 255.5V208.1zM256 0c-12.1 0-23.8 3.9-33.5 11L25.9 156.7C9.6 168.8 0 187.8 0 208.1V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V208.1c0-20.3-9.6-39.4-25.9-51.4L289.5 11C279.8 3.9 268.1 0 256 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M255.4 48.2c.2-.1 .4-.2 .6-.2s.4 .1 .6 .2L460.6 194c2.1 1.5 3.4 3.9 3.4 6.5v13.6L291.5 355.7c-20.7 17-50.4 17-71.1 0L48 214.1V200.5c0-2.6 1.2-5 3.4-6.5L255.4 48.2zM48 276.2L190 392.8c38.4 31.5 93.7 31.5 132 0L464 276.2V456c0 4.4-3.6 8-8 8H56c-4.4 0-8-3.6-8-8V276.2zM256 0c-10.2 0-20.2 3.2-28.5 9.1L23.5 154.9C8.7 165.4 0 182.4 0 200.5V456c0 30.9 25.1 56 56 56H456c30.9 0 56-25.1 56-56V200.5c0-18.1-8.7-35.1-23.4-45.6L284.5 9.1C276.2 3.2 266.2 0 256 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M255.4 48.2c.2-.1 .4-.2 .6-.2s.4 .1 .6 .2L460.6 194c2.1 1.5 3.4 3.9 3.4 6.5v13.6L291.5 355.7c-20.7 17-50.4 17-71.1 0L48 214.1V200.5c0-2.6 1.2-5 3.4-6.5L255.4 48.2zM48 276.2L190 392.8c38.4 31.5 93.7 31.5 132 0L464 276.2V456c0 4.4-3.6 8-8 8H56c-4.4 0-8-3.6-8-8V276.2zM256 0c-10.2 0-20.2 3.2-28.5 9.1L23.5 154.9C8.7 165.4 0 182.4 0 200.5V456c0 30.9 25.1 56 56 56H456c30.9 0 56-25.1 56-56V200.5c0-18.1-8.7-35.1-23.4-45.6L284.5 9.1C276.2 3.2 266.2 0 256 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"envelope-open-text\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f658\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.10.1\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"e-mail\",\n        \"email\",\n        \"letter\",\n        \"mail\",\n        \"message\",\n        \"notification\",\n        \"support\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f658\",\n    \"label\": \"Envelope Open Text\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M215.4 96H144 107.8 96v8.8V144v40.4 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3V96c0-26.5 21.5-48 48-48h76.6l49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48H416c26.5 0 48 21.5 48 48v44.3l22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4v-89V144 104.8 96H404.2 368 296.6 215.4zM0 448V242.1L217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1V448v0c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64v0zM176 160H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M215.4 96H144 107.8 96v8.8V144v40.4 89L.2 202.5c1.6-18.1 10.9-34.9 25.7-45.8L48 140.3V96c0-26.5 21.5-48 48-48h76.6l49.9-36.9C232.2 3.9 243.9 0 256 0s23.8 3.9 33.5 11L339.4 48H416c26.5 0 48 21.5 48 48v44.3l22.1 16.4c14.8 10.9 24.1 27.7 25.7 45.8L416 273.4v-89V144 104.8 96H404.2 368 296.6 215.4zM0 448V242.1L217.6 403.3c11.1 8.2 24.6 12.7 38.4 12.7s27.3-4.4 38.4-12.7L512 242.1V448v0c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64v0zM176 160H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"envelopes-bulk\": {\n    \"aliases\": {\n      \"names\": [\"mail-bulk\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f674\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"archive\",\n        \"envelope\",\n        \"letter\",\n        \"post office\",\n        \"postal\",\n        \"postcard\",\n        \"send\",\n        \"stamp\",\n        \"usps\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f674\",\n    \"label\": \"Envelopes Bulk\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M128 0C110.3 0 96 14.3 96 32V224h96V192c0-35.3 28.7-64 64-64H480V32c0-17.7-14.3-32-32-32H128zM256 160c-17.7 0-32 14.3-32 32v32h96c35.3 0 64 28.7 64 64V416H576c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32H256zm240 64h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H496c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zM64 256c-17.7 0-32 14.3-32 32v13L187.1 415.9c1.4 1 3.1 1.6 4.9 1.6s3.5-.6 4.9-1.6L352 301V288c0-17.7-14.3-32-32-32H64zm288 84.8L216 441.6c-6.9 5.1-15.3 7.9-24 7.9s-17-2.8-24-7.9L32 340.8V480c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V340.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M128 0C110.3 0 96 14.3 96 32V224h96V192c0-35.3 28.7-64 64-64H480V32c0-17.7-14.3-32-32-32H128zM256 160c-17.7 0-32 14.3-32 32v32h96c35.3 0 64 28.7 64 64V416H576c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32H256zm240 64h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H496c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zM64 256c-17.7 0-32 14.3-32 32v13L187.1 415.9c1.4 1 3.1 1.6 4.9 1.6s3.5-.6 4.9-1.6L352 301V288c0-17.7-14.3-32-32-32H64zm288 84.8L216 441.6c-6.9 5.1-15.3 7.9-24 7.9s-17-2.8-24-7.9L32 340.8V480c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V340.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"envira\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"leaf\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f299\",\n    \"label\": \"Envira Gallery\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"equals\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f52c\"],\n        \"primary\": [\"f52c\"],\n        \"secondary\": [\"103d\", \"10f52c\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Equals Sign\", \"arithmetic\", \"even\", \"match\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"3d\",\n    \"label\": \"Equals\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M48 128c-17.7 0-32 14.3-32 32s14.3 32 32 32H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H48zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M48 128c-17.7 0-32 14.3-32 32s14.3 32 32 32H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H48zm0 192c-17.7 0-32 14.3-32 32s14.3 32 32 32H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"eraser\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f12d\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.8.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"art\", \"delete\", \"remove\", \"rubber\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f12d\",\n    \"label\": \"Eraser\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"erlang\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f39d\",\n    \"label\": \"Erlang\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M87.2 53.5H0v405h100.4c-49.7-52.6-78.8-125.3-78.7-212.1-.1-76.7 24-142.7 65.5-192.9zm238.2 9.7c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2zm230.7-9.6h.3l-.1-.1zm.3 0c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ethereum\": {\n    \"changes\": [\"5.0.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f42e\",\n    \"label\": \"Ethereum\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ethernet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f796\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cable\",\n        \"cat 5\",\n        \"cat 6\",\n        \"connection\",\n        \"hardware\",\n        \"internet\",\n        \"network\",\n        \"wired\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f796\",\n    \"label\": \"Ethernet\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 224V416c0 17.7 14.3 32 32 32H96V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32H448V160c0-17.7-14.3-32-32-32H384V96c0-17.7-14.3-32-32-32H160c-17.7 0-32 14.3-32 32v32H96c-17.7 0-32 14.3-32 32v32H32c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 224V416c0 17.7 14.3 32 32 32H96V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64V336c0-8.8 7.2-16 16-16s16 7.2 16 16V448h64c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32H448V160c0-17.7-14.3-32-32-32H384V96c0-17.7-14.3-32-32-32H160c-17.7 0-32 14.3-32 32v32H96c-17.7 0-32 14.3-32 32v32H32c-17.7 0-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"etsy\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2d7\",\n    \"label\": \"Etsy\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"euro-sign\": {\n    \"aliases\": {\n      \"names\": [\"eur\", \"euro\"],\n      \"unicodes\": {\n        \"composite\": [\"20ac\"],\n        \"secondary\": [\"10f153\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Euro Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f153\",\n    \"label\": \"Euro Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M48.1 240c-.1 2.7-.1 5.3-.1 8v16c0 2.7 0 5.3 .1 8H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H60.3C89.9 419.9 170 480 264 480h24c17.7 0 32-14.3 32-32s-14.3-32-32-32H264c-57.9 0-108.2-32.4-133.9-80H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H112.2c-.1-2.6-.2-5.3-.2-8V248c0-2.7 .1-5.4 .2-8H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H130.1c25.7-47.6 76-80 133.9-80h24c17.7 0 32-14.3 32-32s-14.3-32-32-32H264C170 32 89.9 92.1 60.3 176H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M48.1 240c-.1 2.7-.1 5.3-.1 8v16c0 2.7 0 5.3 .1 8H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H60.3C89.9 419.9 170 480 264 480h24c17.7 0 32-14.3 32-32s-14.3-32-32-32H264c-57.9 0-108.2-32.4-133.9-80H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H112.2c-.1-2.6-.2-5.3-.2-8V248c0-2.7 .1-5.4 .2-8H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H130.1c25.7-47.6 76-80 133.9-80h24c17.7 0 32-14.3 32-32s-14.3-32-32-32H264C170 32 89.9 92.1 60.3 176H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"evernote\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f839\",\n    \"label\": \"Evernote\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M120.82 132.21c1.6 22.31-17.55 21.59-21.61 21.59-68.93 0-73.64-1-83.58 3.34-.56.22-.74 0-.37-.37L123.79 46.45c.38-.37.6-.22.38.37-4.35 9.99-3.35 15.09-3.35 85.39zm79 308c-14.68-37.08 13-76.93 52.52-76.62 17.49 0 22.6 23.21 7.95 31.42-6.19 3.3-24.95 1.74-25.14 19.2-.05 17.09 19.67 25 31.2 24.89A45.64 45.64 0 0 0 312 393.45v-.08c0-11.63-7.79-47.22-47.54-55.34-7.72-1.54-65-6.35-68.35-50.52-3.74 16.93-17.4 63.49-43.11 69.09-8.74 1.94-69.68 7.64-112.92-36.77 0 0-18.57-15.23-28.23-57.95-3.38-15.75-9.28-39.7-11.14-62 0-18 11.14-30.45 25.07-32.2 81 0 90 2.32 101-7.8 9.82-9.24 7.8-15.5 7.8-102.78 1-8.3 7.79-30.81 53.41-24.14 6 .86 31.91 4.18 37.48 30.64l64.26 11.15c20.43 3.71 70.94 7 80.6 57.94 22.66 121.09 8.91 238.46 7.8 238.46C362.15 485.53 267.06 480 267.06 480c-18.95-.23-54.25-9.4-67.27-39.83zm80.94-204.84c-1 1.92-2.2 6 .85 7 14.09 4.93 39.75 6.84 45.88 5.53 3.11-.25 3.05-4.43 2.48-6.65-3.53-21.85-40.83-26.5-49.24-5.92z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"exclamation\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2755\", \"2757\", \"f12a\"],\n        \"primary\": [\"f12a\"],\n        \"secondary\": [\"1021\", \"10f12a\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"!\",\n        \"Exclamation Mark\",\n        \"alert\",\n        \"danger\",\n        \"error\",\n        \"exclamation\",\n        \"important\",\n        \"mark\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"outlined\",\n        \"problem\",\n        \"punctuation\",\n        \"red exclamation mark\",\n        \"warning\",\n        \"white exclamation mark\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"21\",\n    \"label\": \"Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 64 512\\\"><path d=\\\"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V320c0 17.7 14.3 32 32 32s32-14.3 32-32V64zM32 480a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 64, 512],\n        \"width\": 64,\n        \"height\": 512,\n        \"path\": \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V320c0 17.7 14.3 32 32 32s32-14.3 32-32V64zM32 480a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"expand\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f065\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bigger\",\n        \"crop\",\n        \"enlarge\",\n        \"focus\",\n        \"fullscreen\",\n        \"resize\",\n        \"viewfinder\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f065\",\n    \"label\": \"Expand\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V96h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V352zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h64v64c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H320zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V96h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V352zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h64v64c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H320zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"expeditedssl\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f23e\",\n    \"label\": \"ExpeditedSSL\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4 1.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"explosion\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blast\", \"blowup\", \"boom\", \"crash\", \"detonation\", \"explosion\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4e9\",\n    \"label\": \"Explosion\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M499.6 11.3c6.7-10.7 20.5-14.5 31.7-8.5s15.8 19.5 10.6 31L404.8 338.6c2.2 2.3 4.3 4.7 6.3 7.1l97.2-54.7c10.5-5.9 23.6-3.1 30.9 6.4s6.3 23-2.2 31.5l-87 87H378.5c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H117.8L42.3 363.7c-9.7-6.7-13.1-19.6-7.9-30.3s17.4-15.9 28.7-12.4l97.2 30.4c3-3.9 6.1-7.7 9.4-11.3L107.4 236.3c-6.1-10.1-3.9-23.1 5.1-30.7s22.2-7.5 31.1 .1L246 293.6c1.5-.4 3-.8 4.5-1.1l13.6-142.7c1.2-12.3 11.5-21.7 23.9-21.7s22.7 9.4 23.9 21.7l13.5 141.9L499.6 11.3zM64 448v0H512v0h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H64zM288 0c13.3 0 24 10.7 24 24V72c0 13.3-10.7 24-24 24s-24-10.7-24-24V24c0-13.3 10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M499.6 11.3c6.7-10.7 20.5-14.5 31.7-8.5s15.8 19.5 10.6 31L404.8 338.6c2.2 2.3 4.3 4.7 6.3 7.1l97.2-54.7c10.5-5.9 23.6-3.1 30.9 6.4s6.3 23-2.2 31.5l-87 87H378.5c-13.2-37.3-48.7-64-90.5-64s-77.4 26.7-90.5 64H117.8L42.3 363.7c-9.7-6.7-13.1-19.6-7.9-30.3s17.4-15.9 28.7-12.4l97.2 30.4c3-3.9 6.1-7.7 9.4-11.3L107.4 236.3c-6.1-10.1-3.9-23.1 5.1-30.7s22.2-7.5 31.1 .1L246 293.6c1.5-.4 3-.8 4.5-1.1l13.6-142.7c1.2-12.3 11.5-21.7 23.9-21.7s22.7 9.4 23.9 21.7l13.5 141.9L499.6 11.3zM64 448v0H512v0h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H64zM288 0c13.3 0 24 10.7 24 24V72c0 13.3-10.7 24-24 24s-24-10.7-24-24V24c0-13.3 10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"eye\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f441\"],\n        \"secondary\": [\"10f06e\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"body\",\n        \"eye\",\n        \"look\",\n        \"optic\",\n        \"see\",\n        \"seen\",\n        \"show\",\n        \"sight\",\n        \"views\",\n        \"visible\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f06e\",\n    \"label\": \"Eye\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"eye-dropper\": {\n    \"aliases\": {\n      \"names\": [\"eye-dropper-empty\", \"eyedropper\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1fb\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"beaker\", \"clone\", \"color\", \"copy\", \"eyedropper\", \"pipette\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1fb\",\n    \"label\": \"Eye Dropper\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M341.6 29.2L240.1 130.8l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L482.8 170.4c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6v42.4L5.4 462.2c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4L89.7 480h42.4c21.2 0 41.6-8.4 56.6-23.4L309.4 335.9l-45.3-45.3L143.4 411.3c-3 3-7.1 4.7-11.3 4.7H96V379.9c0-4.2 1.7-8.3 4.7-11.3L221.4 247.9l-45.3-45.3L55.4 323.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M341.6 29.2L240.1 130.8l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L482.8 170.4c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6v42.4L5.4 462.2c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4L89.7 480h42.4c21.2 0 41.6-8.4 56.6-23.4L309.4 335.9l-45.3-45.3L143.4 411.3c-3 3-7.1 4.7-11.3 4.7H96V379.9c0-4.2 1.7-8.3 4.7-11.3L221.4 247.9l-45.3-45.3L55.4 323.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"eye-low-vision\": {\n    \"aliases\": {\n      \"names\": [\"low-vision\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2a8\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blind\", \"eye\", \"sight\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a8\",\n    \"label\": \"Eye Low Vision\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223 149.5c48.6-44.3 123-50.8 179.3-11.7c60.8 42.4 78.9 123.2 44.2 186.9L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3L223 149.5zm223.1 298L83.1 161.5c-11 14.4-20.5 28.7-28.4 42.2l339 265.7c18.7-5.5 36.2-13 52.6-21.8zM34.5 268.3c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c3.1 0 6.1-.1 9.2-.2L33.1 247.8c-1.8 6.8-1.3 14 1.4 20.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223 149.5c48.6-44.3 123-50.8 179.3-11.7c60.8 42.4 78.9 123.2 44.2 186.9L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3L223 149.5zm223.1 298L83.1 161.5c-11 14.4-20.5 28.7-28.4 42.2l339 265.7c18.7-5.5 36.2-13 52.6-21.8zM34.5 268.3c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c3.1 0 6.1-.1 9.2-.2L33.1 247.8c-1.8 6.8-1.3 14 1.4 20.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"eye-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f070\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"blind\",\n        \"hide\",\n        \"show\",\n        \"toggle\",\n        \"unseen\",\n        \"views\",\n        \"visible\",\n        \"visiblity\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f070\",\n    \"label\": \"Eye Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c8.4-19.3 10.6-41.4 4.8-63.3c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zM373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5L373 389.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zm151 118.3C226 97.7 269.5 80 320 80c65.2 0 118.8 29.6 159.9 67.7C518.4 183.5 545 226 558.6 256c-12.6 28-36.6 66.8-70.9 100.9l-53.8-42.2c9.1-17.6 14.2-37.5 14.2-58.7c0-70.7-57.3-128-128-128c-32.2 0-61.7 11.9-84.2 31.5l-46.1-36.1zM394.9 284.2l-81.5-63.9c4.2-8.5 6.6-18.2 6.6-28.3c0-5.5-.7-10.9-2-16c.7 0 1.3 0 2 0c44.2 0 80 35.8 80 80c0 9.9-1.8 19.4-5.1 28.2zm9.4 130.3C378.8 425.4 350.7 432 320 432c-65.2 0-118.8-29.6-159.9-67.7C121.6 328.5 95 286 81.4 256c8.3-18.4 21.5-41.5 39.4-64.8L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5l-41.9-33zM192 256c0 70.7 57.3 128 128 128c13.3 0 26.1-2 38.2-5.8L302 334c-23.5-5.4-43.1-21.2-53.7-42.3l-56.1-44.2c-.2 2.8-.3 5.6-.3 8.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zm151 118.3C226 97.7 269.5 80 320 80c65.2 0 118.8 29.6 159.9 67.7C518.4 183.5 545 226 558.6 256c-12.6 28-36.6 66.8-70.9 100.9l-53.8-42.2c9.1-17.6 14.2-37.5 14.2-58.7c0-70.7-57.3-128-128-128c-32.2 0-61.7 11.9-84.2 31.5l-46.1-36.1zM394.9 284.2l-81.5-63.9c4.2-8.5 6.6-18.2 6.6-28.3c0-5.5-.7-10.9-2-16c.7 0 1.3 0 2 0c44.2 0 80 35.8 80 80c0 9.9-1.8 19.4-5.1 28.2zm9.4 130.3C378.8 425.4 350.7 432 320 432c-65.2 0-118.8-29.6-159.9-67.7C121.6 328.5 95 286 81.4 256c8.3-18.4 21.5-41.5 39.4-64.8L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5l-41.9-33zM192 256c0 70.7 57.3 128 128 128c13.3 0 26.1-2 38.2-5.8L302 334c-23.5-5.4-43.1-21.2-53.7-42.3l-56.1-44.2c-.2 2.8-.3 5.6-.3 8.5z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"f\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"66\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter F\", \"Latin Small Letter F\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"46\",\n    \"label\": \"F\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V256 448c0 17.7 14.3 32 32 32s32-14.3 32-32V288H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V96H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V256 448c0 17.7 14.3 32 32 32s32-14.3 32-32V288H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V96H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"face-angry\": {\n    \"aliases\": {\n      \"names\": [\"angry\"],\n      \"unicodes\": {\n        \"composite\": [\"1f620\"],\n        \"secondary\": [\"10f556\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"angry\",\n        \"angry face\",\n        \"disapprove\",\n        \"emoticon\",\n        \"face\",\n        \"mad\",\n        \"upset\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f556\",\n    \"label\": \"Face Angry\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM338.7 395.9c6.6-5.9 7.1-16 1.2-22.6C323.8 355.4 295.7 336 256 336s-67.8 19.4-83.9 37.3c-5.9 6.6-5.4 16.7 1.2 22.6s16.7 5.4 22.6-1.2c11.7-13 31.6-26.7 60.1-26.7s48.4 13.7 60.1 26.7c5.9 6.6 16 7.1 22.6 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM338.7 395.9c6.6-5.9 7.1-16 1.2-22.6C323.8 355.4 295.7 336 256 336s-67.8 19.4-83.9 37.3c-5.9 6.6-5.4 16.7 1.2 22.6s16.7 5.4 22.6-1.2c11.7-13 31.6-26.7 60.1-26.7s48.4 13.7 60.1 26.7c5.9 6.6 16 7.1 22.6 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm72.4-118.5c9.7-9 10.2-24.2 1.2-33.9C315.3 344.3 290.6 328 256 328s-59.3 16.3-73.5 31.6c-9 9.7-8.5 24.9 1.2 33.9s24.9 8.5 33.9-1.2c7.4-7.9 20-16.4 38.5-16.4s31.1 8.5 38.5 16.4c9 9.7 24.2 10.2 33.9 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm72.4-118.5c9.7-9 10.2-24.2 1.2-33.9C315.3 344.3 290.6 328 256 328s-59.3 16.3-73.5 31.6c-9 9.7-8.5 24.9 1.2 33.9s24.9 8.5 33.9-1.2c7.4-7.9 20-16.4 38.5-16.4s31.1 8.5 38.5 16.4c9 9.7 24.2 10.2 33.9 1.2zM176.4 272c17.7 0 32-14.3 32-32c0-1.5-.1-3-.3-4.4l10.9 3.6c8.4 2.8 17.4-1.7 20.2-10.1s-1.7-17.4-10.1-20.2l-96-32c-8.4-2.8-17.4 1.7-20.2 10.1s1.7 17.4 10.1 20.2l30.7 10.2c-5.8 5.8-9.3 13.8-9.3 22.6c0 17.7 14.3 32 32 32zm192-32c0-8.9-3.6-17-9.5-22.8l30.2-10.1c8.4-2.8 12.9-11.9 10.1-20.2s-11.9-12.9-20.2-10.1l-96 32c-8.4 2.8-12.9 11.9-10.1 20.2s11.9 12.9 20.2 10.1l11.7-3.9c-.2 1.5-.3 3.1-.3 4.7c0 17.7 14.3 32 32 32s32-14.3 32-32z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-dizzy\": {\n    \"aliases\": {\n      \"names\": [\"dizzy\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f567\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dazed\", \"dead\", \"disapprove\", \"emoticon\", \"face\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f567\",\n    \"label\": \"Face Dizzy\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-224a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM100.7 132.7c6.2-6.2 16.4-6.2 22.6 0L160 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L182.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L160 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L137.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6zm192 0c6.2-6.2 16.4-6.2 22.6 0L352 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L374.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L352 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L329.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm0-224a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM100.7 132.7c6.2-6.2 16.4-6.2 22.6 0L160 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L182.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L160 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L137.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6zm192 0c6.2-6.2 16.4-6.2 22.6 0L352 169.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L374.6 192l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L352 214.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L329.4 192l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM103 135c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9zm192 0c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM103 135c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9zm192 0c9.4-9.4 24.6-9.4 33.9 0l23 23 23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-23 23 23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23-23-23c-9.4-9.4-9.4-24.6 0-33.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-flushed\": {\n    \"aliases\": {\n      \"names\": [\"flushed\"],\n      \"unicodes\": {\n        \"composite\": [\"1f633\"],\n        \"secondary\": [\"10f579\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"dazed\",\n        \"embarrassed\",\n        \"emoticon\",\n        \"face\",\n        \"flushed\",\n        \"flushed face\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f579\",\n    \"label\": \"Face Flushed\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM176 384c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16s-7.2-16-16-16H192c-8.8 0-16 7.2-16 16zm-16-88a72 72 0 1 0 0-144 72 72 0 1 0 0 144zm264-72a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zm-288 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm192 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM176 384c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16s-7.2-16-16-16H192c-8.8 0-16 7.2-16 16zm-16-88a72 72 0 1 0 0-144 72 72 0 1 0 0 144zm264-72a72 72 0 1 0 -144 0 72 72 0 1 0 144 0zm-288 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm192 0a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM160.4 248a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm216-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 336c-13.3 0-24 10.7-24 24s10.7 24 24 24H320c13.3 0 24-10.7 24-24s-10.7-24-24-24H192zM160 176a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm144-80a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM160.4 248a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm216-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM192 336c-13.3 0-24 10.7-24 24s10.7 24 24 24H320c13.3 0 24-10.7 24-24s-10.7-24-24-24H192zM160 176a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm144-80a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 0a80 80 0 1 0 -160 0 80 80 0 1 0 160 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-frown\": {\n    \"aliases\": {\n      \"names\": [\"frown\"],\n      \"unicodes\": {\n        \"composite\": [\"2639\"],\n        \"secondary\": [\"10f119\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"disapprove\",\n        \"emoticon\",\n        \"face\",\n        \"frown\",\n        \"frowning face\",\n        \"rating\",\n        \"sad\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f119\",\n    \"label\": \"Face Frown\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.3 388.7c-2.6 8.4-11.6 13.2-20 10.5s-13.2-11.6-10.5-20C145.2 326.1 196.3 288 256 288s110.8 38.1 127.3 91.3c2.6 8.4-2.1 17.4-10.5 20s-17.4-2.1-20-10.5C340.5 349.4 302.1 320 256 320s-84.5 29.4-96.7 68.7zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.3 388.7c-2.6 8.4-11.6 13.2-20 10.5s-13.2-11.6-10.5-20C145.2 326.1 196.3 288 256 288s110.8 38.1 127.3 91.3c2.6 8.4-2.1 17.4-10.5 20s-17.4-2.1-20-10.5C340.5 349.4 302.1 320 256 320s-84.5 29.4-96.7 68.7zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM174.6 384.1c-4.5 12.5-18.2 18.9-30.7 14.4s-18.9-18.2-14.4-30.7C146.9 319.4 198.9 288 256 288s109.1 31.4 126.6 79.9c4.5 12.5-2 26.2-14.4 30.7s-26.2-2-30.7-14.4C328.2 358.5 297.2 336 256 336s-72.2 22.5-81.4 48.1zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM174.6 384.1c-4.5 12.5-18.2 18.9-30.7 14.4s-18.9-18.2-14.4-30.7C146.9 319.4 198.9 288 256 288s109.1 31.4 126.6 79.9c4.5 12.5-2 26.2-14.4 30.7s-26.2-2-30.7-14.4C328.2 358.5 297.2 336 256 336s-72.2 22.5-81.4 48.1zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-frown-open\": {\n    \"aliases\": {\n      \"names\": [\"frown-open\"],\n      \"unicodes\": {\n        \"composite\": [\"1f626\"],\n        \"secondary\": [\"10f57a\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"disapprove\",\n        \"emoticon\",\n        \"face\",\n        \"frown\",\n        \"frowning face with open mouth\",\n        \"mouth\",\n        \"open\",\n        \"rating\",\n        \"sad\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f57a\",\n    \"label\": \"Face Frown Open\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-122 174.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm-122 174.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM182.4 382.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM182.4 382.5c-12.4 5.2-26.5-4.1-21.1-16.4c16-36.6 52.4-62.1 94.8-62.1s78.8 25.6 94.8 62.1c5.4 12.3-8.7 21.6-21.1 16.4c-22.4-9.5-47.4-14.8-73.7-14.8s-51.3 5.3-73.7 14.8zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grimace\": {\n    \"aliases\": {\n      \"names\": [\"grimace\"],\n      \"unicodes\": {\n        \"composite\": [\"1f62c\"],\n        \"secondary\": [\"10f57f\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cringe\",\n        \"emoticon\",\n        \"face\",\n        \"grimace\",\n        \"grimacing face\",\n        \"teeth\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f57f\",\n    \"label\": \"Face Grimace\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm96-112h-8V360l55.3 0c-3.8 22.7-23.6 40-47.3 40zm47.3-56L344 344V304h8c23.8 0 43.5 17.3 47.3 40zM328 344H264V304h64v40zm0 56H264V360h64v40zm-80-96v40l-64 0V304h64zm0 56v40H184V360l64 0zm-80-16H112.7c3.8-22.7 23.6-40 47.3-40h8v40zm0 56h-8c-23.8 0-43.5-17.3-47.3-40H168v40zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm96-112h-8V360l55.3 0c-3.8 22.7-23.6 40-47.3 40zm47.3-56L344 344V304h8c23.8 0 43.5 17.3 47.3 40zM328 344H264V304h64v40zm0 56H264V360h64v40zm-80-96v40l-64 0V304h64zm0 56v40H184V360l64 0zm-80-16H112.7c3.8-22.7 23.6-40 47.3-40h8v40zm0 56h-8c-23.8 0-43.5-17.3-47.3-40H168v40zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM168 320c-13.3 0-24 10.7-24 24s10.7 24 24 24h8V320h-8zm40 48h32V320H208v48zm96 0V320H272v48h32zm32 0h8c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8v48zM168 288H344c30.9 0 56 25.1 56 56s-25.1 56-56 56H168c-30.9 0-56-25.1-56-56s25.1-56 56-56zm-23.6-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM168 320c-13.3 0-24 10.7-24 24s10.7 24 24 24h8V320h-8zm40 48h32V320H208v48zm96 0V320H272v48h32zm32 0h8c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8v48zM168 288H344c30.9 0 56 25.1 56 56s-25.1 56-56 56H168c-30.9 0-56-25.1-56-56s25.1-56 56-56zm-23.6-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin\": {\n    \"aliases\": {\n      \"names\": [\"grin\"],\n      \"unicodes\": {\n        \"composite\": [\"1f600\"],\n        \"secondary\": [\"10f580\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"emoticon\", \"face\", \"grin\", \"grinning face\", \"laugh\", \"smile\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f580\",\n    \"label\": \"Face Grin\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-beam\": {\n    \"aliases\": {\n      \"names\": [\"grin-beam\"],\n      \"unicodes\": {\n        \"composite\": [\"1f604\"],\n        \"secondary\": [\"10f582\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"grinning face with smiling eyes\",\n        \"laugh\",\n        \"mouth\",\n        \"open\",\n        \"smile\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f582\",\n    \"label\": \"Face Grin Beam\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-170.5-84l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-170.5-84l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM217.6 228.8l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM217.6 228.8l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-beam-sweat\": {\n    \"aliases\": {\n      \"names\": [\"grin-beam-sweat\"],\n      \"unicodes\": {\n        \"composite\": [\"1f605\"],\n        \"secondary\": [\"10f583\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cold\",\n        \"embarass\",\n        \"emoticon\",\n        \"face\",\n        \"grinning face with sweat\",\n        \"open\",\n        \"smile\",\n        \"sweat\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f583\",\n    \"label\": \"Face Grin Beam Sweat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M476.8 126.3c-4.1 1.1-8.4 1.7-12.8 1.7c-26.5 0-48-21-48-47c0-5 1.8-11.3 4.6-18.1c.3-.7 .6-1.4 .9-2.1c9-20.2 26.5-44.9 36-57.5c3.2-4.4 9.6-4.4 12.8 0C483.4 20.6 512 61 512 81c0 21.7-14.9 39.8-35.2 45.3zM256 0c51.4 0 99.3 15.2 139.4 41.2c-1.5 3.1-3 6.2-4.3 9.3c-3.4 8-7.1 19-7.1 30.5c0 44.3 36.6 79 80 79c9.6 0 18.8-1.7 27.4-4.8c13.3 30.9 20.6 65 20.6 100.8c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0zM383.8 317.8C345.3 329.4 301.9 336 256 336s-89.3-6.6-127.8-18.2c-12.3-3.7-24.3 7-19.2 18.7c24.5 56.9 81.1 96.7 147 96.7s122.5-39.8 147-96.7c5.1-11.8-6.9-22.4-19.2-18.7zm-166.2-89l0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0 0 0zm160 0l0 0 0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M476.8 126.3c-4.1 1.1-8.4 1.7-12.8 1.7c-26.5 0-48-21-48-47c0-5 1.8-11.3 4.6-18.1c.3-.7 .6-1.4 .9-2.1c9-20.2 26.5-44.9 36-57.5c3.2-4.4 9.6-4.4 12.8 0C483.4 20.6 512 61 512 81c0 21.7-14.9 39.8-35.2 45.3zM256 0c51.4 0 99.3 15.2 139.4 41.2c-1.5 3.1-3 6.2-4.3 9.3c-3.4 8-7.1 19-7.1 30.5c0 44.3 36.6 79 80 79c9.6 0 18.8-1.7 27.4-4.8c13.3 30.9 20.6 65 20.6 100.8c0 141.4-114.6 256-256 256S0 397.4 0 256S114.6 0 256 0zM383.8 317.8C345.3 329.4 301.9 336 256 336s-89.3-6.6-127.8-18.2c-12.3-3.7-24.3 7-19.2 18.7c24.5 56.9 81.1 96.7 147 96.7s122.5-39.8 147-96.7c5.1-11.8-6.9-22.4-19.2-18.7zm-166.2-89l0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0 0 0zm160 0l0 0 0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M476.8 126.3C497.1 120.8 512 102.7 512 81c0-20-28.6-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0c-9.5 12.6-27.1 37.2-36 57.5c-.3 .7-.6 1.4-.9 2.1C417.8 69.7 416 76 416 81c0 26 21.5 47 48 47c4.4 0 8.7-.6 12.8-1.7zM395.4 41.2C355.3 15.2 307.4 0 256 0C114.6 0 0 114.6 0 256S114.6 512 256 512s256-114.6 256-256c0-35.8-7.3-69.9-20.6-100.8c-8.6 3.1-17.8 4.8-27.4 4.8c-8.9 0-17.6-1.5-25.7-4.2C454.7 185.5 464 219.7 464 256c0 114.9-93.1 208-208 208S48 370.9 48 256S141.1 48 256 48c48.7 0 93.4 16.7 128.9 44.7c-.6-3.8-.9-7.7-.9-11.7c0-11.4 3.8-22.4 7.1-30.5c1.3-3.1 2.7-6.2 4.3-9.3zM375 336.5c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5zM217.6 228.8l0 0 0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0zm160 0l0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M476.8 126.3C497.1 120.8 512 102.7 512 81c0-20-28.6-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0c-9.5 12.6-27.1 37.2-36 57.5c-.3 .7-.6 1.4-.9 2.1C417.8 69.7 416 76 416 81c0 26 21.5 47 48 47c4.4 0 8.7-.6 12.8-1.7zM395.4 41.2C355.3 15.2 307.4 0 256 0C114.6 0 0 114.6 0 256S114.6 512 256 512s256-114.6 256-256c0-35.8-7.3-69.9-20.6-100.8c-8.6 3.1-17.8 4.8-27.4 4.8c-8.9 0-17.6-1.5-25.7-4.2C454.7 185.5 464 219.7 464 256c0 114.9-93.1 208-208 208S48 370.9 48 256S141.1 48 256 48c48.7 0 93.4 16.7 128.9 44.7c-.6-3.8-.9-7.7-.9-11.7c0-11.4 3.8-22.4 7.1-30.5c1.3-3.1 2.7-6.2 4.3-9.3zM375 336.5c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5zM217.6 228.8l0 0 0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C126.7 188.4 120 206.1 120 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0zm160 0l0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C286.7 188.4 280 206.1 280 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0 0 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-hearts\": {\n    \"aliases\": {\n      \"names\": [\"grin-hearts\"],\n      \"unicodes\": {\n        \"composite\": [\"1f60d\"],\n        \"secondary\": [\"10f584\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"love\",\n        \"smile\",\n        \"smiling face with heart-eyes\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f584\",\n    \"label\": \"Face Grin Hearts\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM199.3 129.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm154.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM199.3 129.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm154.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM215.3 137.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm122.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM215.3 137.1c17.8 4.8 28.4 23.1 23.6 40.8l-17.4 65c-2.3 8.5-11.1 13.6-19.6 11.3l-65.1-17.4c-17.8-4.8-28.4-23.1-23.6-40.8s23.1-28.4 40.8-23.6l16.1 4.3 4.3-16.1c4.8-17.8 23.1-28.4 40.8-23.6zm122.3 23.6l4.3 16.1 16.1-4.3c17.8-4.8 36.1 5.8 40.8 23.6s-5.8 36.1-23.6 40.8l-65.1 17.4c-8.5 2.3-17.3-2.8-19.6-11.3l-17.4-65c-4.8-17.8 5.8-36.1 23.6-40.8s36.1 5.8 40.9 23.6z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-squint\": {\n    \"aliases\": {\n      \"names\": [\"grin-squint\"],\n      \"unicodes\": {\n        \"composite\": [\"1f606\"],\n        \"secondary\": [\"10f585\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"face\",\n        \"grinning squinting face\",\n        \"laugh\",\n        \"mouth\",\n        \"satisfied\",\n        \"smile\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f585\",\n    \"label\": \"Face Grin Squint\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM133.5 146.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM133.5 146.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zm-216-161.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zm-216-161.7l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-squint-tears\": {\n    \"aliases\": {\n      \"names\": [\"grin-squint-tears\"],\n      \"unicodes\": {\n        \"composite\": [\"1f923\"],\n        \"secondary\": [\"10f586\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"face\",\n        \"floor\",\n        \"happy\",\n        \"laugh\",\n        \"rolling\",\n        \"rolling on the floor laughing\",\n        \"smile\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f586\",\n    \"label\": \"Face Grin Squint Tears\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-6.8 6.8-21.4 12.4-37.4 16.7c-16.3 4.4-34.1 7.5-46.3 9.3c-1.6 .2-3.1 .5-4.6 .6c-4.9 .8-9.1-2.8-9.5-7.4c-.1-.7 0-1.4 .1-2.1c1.6-11.2 4.6-29.6 9-47c.3-1.3 .7-2.6 1-3.9c4.3-15.9 9.8-30.5 16.7-37.4zm-44.7 19c-1.5 4.8-2.9 9.6-4.1 14.3c-4.8 18.9-8 38.5-9.7 50.3c-4 26.8 18.9 49.7 45.7 45.8c11.9-1.6 31.5-4.8 50.4-9.7c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c4.8-18.9 8-38.5 9.7-50.3c4-26.8-18.9-49.7-45.7-45.8c-11.9 1.6-31.5 4.8-50.4 9.7c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75C158.2-8.3 284.5-22.2 382.2 33.2zM51.5 410.1c18.5-5 38.8-8.3 50.9-10c.4-.1 .7-.1 1-.1c5.1-.2 9.2 4.3 8.4 9.6c-1.7 12.1-5 32.4-10 50.9C97.6 476.4 92 491 85.2 497.8C66 517 34.5 516.6 14.9 497.1s-20-51-.7-70.3c6.8-6.8 21.4-12.4 37.4-16.7zM416.9 209c-4.7-11.9-20.8-11-26.8 .3c-19 35.5-45 70.8-77.5 103.3S244.8 371.1 209.3 390c-11.3 6-12.2 22.1-.3 26.8c57.6 22.9 125.8 11 172.3-35.5s58.4-114.8 35.5-172.3zM87.1 285.1c2 2 4.6 3.2 7.3 3.4l56.1 5.1 5.1 56.1c.3 2.8 1.5 5.4 3.4 7.3c6.3 6.3 17.2 3.6 19.8-4.9l29.7-97.4c3.5-11.6-7.3-22.5-19-19L92 265.3c-8.6 2.6-11.3 13.4-4.9 19.8zM265.3 92l-29.7 97.4c-3.5 11.6 7.3 22.5 19 19l97.4-29.7c8.6-2.6 11.3-13.4 4.9-19.8c-2-2-4.6-3.2-7.3-3.4l-56.1-5.1-5.1-56.1c-.3-2.8-1.5-5.4-3.4-7.3c-6.3-6.3-17.2-3.6-19.8 4.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-6.8 6.8-21.4 12.4-37.4 16.7c-16.3 4.4-34.1 7.5-46.3 9.3c-1.6 .2-3.1 .5-4.6 .6c-4.9 .8-9.1-2.8-9.5-7.4c-.1-.7 0-1.4 .1-2.1c1.6-11.2 4.6-29.6 9-47c.3-1.3 .7-2.6 1-3.9c4.3-15.9 9.8-30.5 16.7-37.4zm-44.7 19c-1.5 4.8-2.9 9.6-4.1 14.3c-4.8 18.9-8 38.5-9.7 50.3c-4 26.8 18.9 49.7 45.7 45.8c11.9-1.6 31.5-4.8 50.4-9.7c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c4.8-18.9 8-38.5 9.7-50.3c4-26.8-18.9-49.7-45.7-45.8c-11.9 1.6-31.5 4.8-50.4 9.7c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75C158.2-8.3 284.5-22.2 382.2 33.2zM51.5 410.1c18.5-5 38.8-8.3 50.9-10c.4-.1 .7-.1 1-.1c5.1-.2 9.2 4.3 8.4 9.6c-1.7 12.1-5 32.4-10 50.9C97.6 476.4 92 491 85.2 497.8C66 517 34.5 516.6 14.9 497.1s-20-51-.7-70.3c6.8-6.8 21.4-12.4 37.4-16.7zM416.9 209c-4.7-11.9-20.8-11-26.8 .3c-19 35.5-45 70.8-77.5 103.3S244.8 371.1 209.3 390c-11.3 6-12.2 22.1-.3 26.8c57.6 22.9 125.8 11 172.3-35.5s58.4-114.8 35.5-172.3zM87.1 285.1c2 2 4.6 3.2 7.3 3.4l56.1 5.1 5.1 56.1c.3 2.8 1.5 5.4 3.4 7.3c6.3 6.3 17.2 3.6 19.8-4.9l29.7-97.4c3.5-11.6-7.3-22.5-19-19L92 265.3c-8.6 2.6-11.3 13.4-4.9 19.8zM265.3 92l-29.7 97.4c-3.5 11.6 7.3 22.5 19 19l97.4-29.7c8.6-2.6 11.3-13.4 4.9-19.8c-2-2-4.6-3.2-7.3-3.4l-56.1-5.1-5.1-56.1c-.3-2.8-1.5-5.4-3.4-7.3c-6.3-6.3-17.2-3.6-19.8 4.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-14.8 14.8-65.7 23.6-88.3 26.7c-5.6 .9-10.3-3.9-9.5-9.5C403.3 79.9 412 29 426.8 14.2zM75 75C158.2-8.3 284.5-22.2 382.2 33.2c-1.5 4.8-2.9 9.6-4.1 14.3c-3.1 12.2-5.5 24.6-7.3 35c-80.8-53.6-190.7-44.8-261.9 26.4C37.7 180.1 28.9 290 82.5 370.8c-10.5 1.8-22.9 4.2-35 7.3c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75zm389.6 58.9c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c3.1-12.2 5.5-24.6 7.3-35c80.8 53.6 190.7 44.8 261.9-26.4c71.2-71.2 80-181.1 26.4-261.9c10.5-1.8 22.9-4.2 35-7.3zm-105.4 93c10.1-16.3 33.9-16.9 37.9 1.9c9.5 44.4-3.7 93.5-39.3 129.1s-84.8 48.8-129.1 39.3c-18.7-4-18.2-27.8-1.9-37.9c25.2-15.7 50.2-35.4 73.6-58.8s43.1-48.4 58.8-73.6zM92 265.3l97.4-29.7c11.6-3.5 22.5 7.3 19 19l-29.7 97.4c-2.6 8.6-13.4 11.3-19.8 4.9c-2-2-3.2-4.6-3.4-7.3l-5.1-56.1-56.1-5.1c-2.8-.3-5.4-1.5-7.3-3.4c-6.3-6.3-3.6-17.2 4.9-19.8zm193-178.2c2 2 3.2 4.6 3.4 7.3l5.1 56.1 56.1 5.1c2.8 .3 5.4 1.5 7.3 3.4c6.3 6.3 3.6 17.2-4.9 19.8l-97.4 29.7c-11.6 3.5-22.5-7.3-19-19L265.3 92c2.6-8.6 13.4-11.3 19.8-4.9zM14.9 497.1c-19.6-19.6-20-51-.7-70.3C29 412 79.8 403.2 102.4 400.1c5.6-.9 10.3 3.9 9.5 9.5c-3.2 22.5-11.9 73.5-26.7 88.3C66 517 34.5 516.6 14.9 497.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M426.8 14.2C446-5 477.5-4.6 497.1 14.9s20 51 .7 70.3c-14.8 14.8-65.7 23.6-88.3 26.7c-5.6 .9-10.3-3.9-9.5-9.5C403.3 79.9 412 29 426.8 14.2zM75 75C158.2-8.3 284.5-22.2 382.2 33.2c-1.5 4.8-2.9 9.6-4.1 14.3c-3.1 12.2-5.5 24.6-7.3 35c-80.8-53.6-190.7-44.8-261.9 26.4C37.7 180.1 28.9 290 82.5 370.8c-10.5 1.8-22.9 4.2-35 7.3c-4.7 1.2-9.5 2.5-14.3 4.1C-22.2 284.5-8.2 158.2 75 75zm389.6 58.9c4.7-1.2 9.5-2.5 14.3-4.1C534.2 227.5 520.2 353.8 437 437c-83.2 83.2-209.5 97.2-307.2 41.8c1.5-4.8 2.8-9.6 4-14.3c3.1-12.2 5.5-24.6 7.3-35c80.8 53.6 190.7 44.8 261.9-26.4c71.2-71.2 80-181.1 26.4-261.9c10.5-1.8 22.9-4.2 35-7.3zm-105.4 93c10.1-16.3 33.9-16.9 37.9 1.9c9.5 44.4-3.7 93.5-39.3 129.1s-84.8 48.8-129.1 39.3c-18.7-4-18.2-27.8-1.9-37.9c25.2-15.7 50.2-35.4 73.6-58.8s43.1-48.4 58.8-73.6zM92 265.3l97.4-29.7c11.6-3.5 22.5 7.3 19 19l-29.7 97.4c-2.6 8.6-13.4 11.3-19.8 4.9c-2-2-3.2-4.6-3.4-7.3l-5.1-56.1-56.1-5.1c-2.8-.3-5.4-1.5-7.3-3.4c-6.3-6.3-3.6-17.2 4.9-19.8zm193-178.2c2 2 3.2 4.6 3.4 7.3l5.1 56.1 56.1 5.1c2.8 .3 5.4 1.5 7.3 3.4c6.3 6.3 3.6 17.2-4.9 19.8l-97.4 29.7c-11.6 3.5-22.5-7.3-19-19L265.3 92c2.6-8.6 13.4-11.3 19.8-4.9zM14.9 497.1c-19.6-19.6-20-51-.7-70.3C29 412 79.8 403.2 102.4 400.1c5.6-.9 10.3 3.9 9.5 9.5c-3.2 22.5-11.9 73.5-26.7 88.3C66 517 34.5 516.6 14.9 497.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-stars\": {\n    \"aliases\": {\n      \"names\": [\"grin-stars\"],\n      \"unicodes\": {\n        \"composite\": [\"1f929\"],\n        \"secondary\": [\"10f587\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"eyes\",\n        \"face\",\n        \"grinning\",\n        \"star\",\n        \"star-struck\",\n        \"starry-eyed\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f587\",\n    \"label\": \"Face Grin Stars\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm407.4 75.5c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM160 120c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L160 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L226.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6zm192 0c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L352 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L418.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm407.4 75.5c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM160 120c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L160 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L226.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6zm192 0c-3.1 0-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L352 232.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L418.4 178c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7c-1.3-2.8-4.1-4.6-7.2-4.6z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM183.2 132.6c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L176 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L242.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm160 0c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L336 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L402.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm6.3 175.8c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5c10.4-16.1-6.8-32.5-25.5-28.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM183.2 132.6c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L176 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L242.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm160 0c-1.3-2.8-4.1-4.6-7.2-4.6s-5.9 1.8-7.2 4.6l-16.6 34.7-38.1 5c-3.1 .4-5.6 2.5-6.6 5.5s-.1 6.2 2.1 8.3l27.9 26.5-7 37.8c-.6 3 .7 6.1 3.2 7.9s5.8 2 8.5 .6L336 240.5l33.8 18.3c2.7 1.5 6 1.3 8.5-.6s3.7-4.9 3.2-7.9l-7-37.8L402.4 186c2.2-2.1 3.1-5.3 2.1-8.3s-3.5-5.1-6.6-5.5l-38.1-5-16.6-34.7zm6.3 175.8c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c24.6 38.1 68.7 63.5 119.1 63.5s94.5-25.4 119.1-63.5c10.4-16.1-6.8-32.5-25.5-28.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-tears\": {\n    \"aliases\": {\n      \"names\": [\"grin-tears\"],\n      \"unicodes\": {\n        \"composite\": [\"1f602\"],\n        \"secondary\": [\"10f588\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"LOL\",\n        \"emoticon\",\n        \"face\",\n        \"face with tears of joy\",\n        \"joy\",\n        \"laugh\",\n        \"tear\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f588\",\n    \"label\": \"Face Grin Tears\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M548.6 371.4C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c3.6-8.8 6.5-18.4 8.8-27.5c4.6-18.2 7.7-37 9.3-48.2c3.9-26.5-18.8-49.2-45.2-45.4c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-26.5-3.9-49.2 18.8-45.2 45.4c1.6 11.3 4.6 30 9.3 48.2c2.3 9.1 5.2 18.8 8.8 27.5c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3zM107 254.1c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9zm454.5 87.1c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zm-90.1-9.7c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.4 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM281.6 228.8l0 0 0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C190.7 188.4 184 206.1 184 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0zm160 0l0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C350.7 188.4 344 206.1 344 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M548.6 371.4C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c3.6-8.8 6.5-18.4 8.8-27.5c4.6-18.2 7.7-37 9.3-48.2c3.9-26.5-18.8-49.2-45.2-45.4c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-26.5-3.9-49.2 18.8-45.2 45.4c1.6 11.3 4.6 30 9.3 48.2c2.3 9.1 5.2 18.8 8.8 27.5c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3zM107 254.1c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9zm454.5 87.1c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zm-90.1-9.7c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.4 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c25 59.1 83.2 100.5 151.1 100.5s126.2-41.4 151.1-100.5zM281.6 228.8l0 0 0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C190.7 188.4 184 206.1 184 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0zm160 0l0 0 0 0c2.1 2.8 5.7 3.9 8.9 2.8s5.5-4.1 5.5-7.6c0-17.9-6.7-35.6-16.6-48.8c-9.8-13-23.9-23.2-39.4-23.2s-29.6 10.2-39.4 23.2C350.7 188.4 344 206.1 344 224c0 3.4 2.2 6.5 5.5 7.6s6.9 0 8.9-2.8l0 0 0 0 0 0 .2-.2c.2-.2 .4-.5 .7-.9c.6-.8 1.6-2 2.8-3.4c2.5-2.8 6-6.6 10.2-10.3c8.8-7.8 18.8-14 27.7-14s18.9 6.2 27.7 14c4.2 3.7 7.7 7.5 10.2 10.3c1.2 1.4 2.2 2.6 2.8 3.4c.3 .4 .6 .7 .7 .9l.2 .2 0 0 0 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M516.1 325.5c1 3 2.1 6 3.3 8.9c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c1.2-2.9 2.3-5.9 3.3-8.9C152.5 406.2 229.5 464 320 464s167.5-57.8 196.1-138.5zM320 48c-101.4 0-185.8 72.5-204.3 168.5c-6.7-3.1-14.3-4.3-22.3-3.1c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-8-1.2-15.7 .1-22.3 3.1C505.8 120.5 421.4 48 320 48zM78.5 341.1C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7zm483 0c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zM439 336.5C414.4 374.6 370.3 400 319.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1zM281.6 228.8l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0zm160 0l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M516.1 325.5c1 3 2.1 6 3.3 8.9c3.3 8.1 8.4 18.5 16.5 26.6c3.9 3.9 8.2 7.4 12.7 10.3C506.4 454.8 419.9 512 320 512s-186.4-57.2-228.6-140.6c4.5-2.9 8.7-6.3 12.7-10.3c8.1-8.1 13.2-18.6 16.5-26.6c1.2-2.9 2.3-5.9 3.3-8.9C152.5 406.2 229.5 464 320 464s167.5-57.8 196.1-138.5zM320 48c-101.4 0-185.8 72.5-204.3 168.5c-6.7-3.1-14.3-4.3-22.3-3.1c-6.8 .9-16.2 2.4-26.6 4.4C85.3 94.5 191.6 0 320 0S554.7 94.5 573.2 217.7c-10.3-2-19.8-3.5-26.6-4.4c-8-1.2-15.7 .1-22.3 3.1C505.8 120.5 421.4 48 320 48zM78.5 341.1C60 356.7 32 355.5 14.3 337.7c-18.7-18.7-19.1-48.8-.7-67.2c8.6-8.6 30.1-15.1 50.5-19.6c13-2.8 25.5-4.8 33.9-6c5.4-.8 9.9 3.7 9 9c-3.1 21.5-11.4 70.2-25.5 84.4c-.9 1-1.9 1.8-2.9 2.7zm483 0c-.8-.6-1.5-1.3-2.3-2c-.2-.2-.5-.4-.7-.7c-14.1-14.1-22.5-62.9-25.5-84.4c-.8-5.4 3.7-9.9 9-9c1 .1 2.2 .3 3.3 .5c8.2 1.2 19.2 3 30.6 5.5c20.4 4.4 41.9 10.9 50.5 19.6c18.4 18.4 18 48.5-.7 67.2c-17.7 17.7-45.7 19-64.2 3.4zM439 336.5C414.4 374.6 370.3 400 319.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1zM281.6 228.8l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0zm160 0l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-tongue\": {\n    \"aliases\": {\n      \"names\": [\"grin-tongue\"],\n      \"unicodes\": {\n        \"composite\": [\"1f61b\"],\n        \"secondary\": [\"10f589\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"LOL\", \"emoticon\", \"face\", \"face with tongue\", \"tongue\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f589\",\n    \"label\": \"Face Grin Tongue\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448V400.7c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6V448c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 448V402.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V448c0 35.3 28.7 64 64 64s64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448V400.7c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6V448c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 448V402.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V448c0 35.3 28.7 64 64 64s64-28.7 64-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4V363.6c-8.9-8-16.7-17.1-23.1-27.1c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1c-6.4 9.9-14.2 19-23 27V416c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 416V378.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V416c0 35.3 28.7 64 64 64s64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4V363.6c-8.9-8-16.7-17.1-23.1-27.1c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5c18.7-4.4 35.9 12 25.5 28.1c-6.4 9.9-14.2 19-23 27V416c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 416V378.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V416c0 35.3 28.7 64 64 64s64-28.7 64-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-tongue-squint\": {\n    \"aliases\": {\n      \"names\": [\"grin-tongue-squint\"],\n      \"unicodes\": {\n        \"composite\": [\"1f61d\"],\n        \"secondary\": [\"10f58a\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"LOL\",\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"horrible\",\n        \"squinting face with tongue\",\n        \"taste\",\n        \"tongue\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f58a\",\n    \"label\": \"Face Grin Tongue Squint\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448V400.7c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6V448c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zM116 141.1c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 448V402.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V448c0 35.3 28.7 64 64 64s64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256C0 368.9 73.1 464.7 174.5 498.8C165.3 484 160 466.6 160 448V400.7c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6V448c0 18.6-5.3 36-14.5 50.8C438.9 464.7 512 368.9 512 256C512 114.6 397.4 0 256 0S0 114.6 0 256zM116 141.1c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 448V402.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V448c0 35.3 28.7 64 64 64s64-28.7 64-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4V392.7c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6V416c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm116-98.9c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 416V378.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V416c0 35.3 28.7 64 64 64s64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256c0-114.9-93.1-208-208-208S48 141.1 48 256c0 81.7 47.1 152.4 115.7 186.4c-2.4-8.4-3.7-17.3-3.7-26.4V392.7c-24-17.5-43.1-41.4-54.8-69.2c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19c12.3-3.8 24.3 6.9 19.3 18.7c-11.8 28-31.1 52-55.4 69.6V416c0 9.2-1.3 18-3.7 26.4C416.9 408.4 464 337.7 464 256zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm116-98.9c0-9 9.6-14.7 17.5-10.5l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6zm262.5-10.5c7.9-4.2 17.5 1.5 17.5 10.5c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9zM320 416V378.6c0-14.7-11.9-26.6-26.6-26.6h-2c-11.3 0-21.1 7.9-23.6 18.9c-2.8 12.6-20.8 12.6-23.6 0c-2.5-11.1-12.3-18.9-23.6-18.9h-2c-14.7 0-26.6 11.9-26.6 26.6V416c0 35.3 28.7 64 64 64s64-28.7 64-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-tongue-wink\": {\n    \"aliases\": {\n      \"names\": [\"grin-tongue-wink\"],\n      \"unicodes\": {\n        \"composite\": [\"1f61c\"],\n        \"secondary\": [\"10f58b\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"LOL\",\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"joke\",\n        \"tongue\",\n        \"wink\",\n        \"winking face with tongue\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f58b\",\n    \"label\": \"Face Grin Tongue Wink\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M174.5 498.8C73.1 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 112.9-73.1 208.7-174.5 242.8C346.7 484 352 466.6 352 448V401.1c24.3-17.5 43.6-41.6 55.4-69.6c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c11.7 27.8 30.8 51.7 54.8 69.2V448c0 18.6 5.3 36 14.5 50.8zm20.7-265.2c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zM336 272a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM320 402.6V448c0 35.3-28.7 64-64 64s-64-28.7-64-64V402.6c0-14.7 11.9-26.6 26.6-26.6h2c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9h2c14.7 0 26.6 11.9 26.6 26.6zM336 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M174.5 498.8C73.1 464.7 0 368.9 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 112.9-73.1 208.7-174.5 242.8C346.7 484 352 466.6 352 448V401.1c24.3-17.5 43.6-41.6 55.4-69.6c5-11.8-7-22.5-19.3-18.7c-39.7 12.2-84.5 19-131.8 19s-92.1-6.8-131.8-19c-12.3-3.8-24.3 6.9-19.3 18.7c11.7 27.8 30.8 51.7 54.8 69.2V448c0 18.6 5.3 36 14.5 50.8zm20.7-265.2c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zM336 272a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM320 402.6V448c0 35.3-28.7 64-64 64s-64-28.7-64-64V402.6c0-14.7 11.9-26.6 26.6-26.6h2c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9h2c14.7 0 26.6 11.9 26.6 26.6zM336 184a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M348.3 442.4c2.4-8.4 3.7-17.3 3.7-26.4V363.5c8.8-8 16.6-17.1 23-27c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c6.5 10 14.3 19.1 23.1 27.1V416c0 9.2 1.3 18 3.7 26.4C95.1 408.4 48 337.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 81.7-47.1 152.4-115.7 186.4zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm176.7 12a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-.4-72a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM320 416c0 35.3-28.7 64-64 64s-64-28.7-64-64V378.6c0-14.7 11.9-26.6 26.6-26.6h2c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9h2c14.7 0 26.6 11.9 26.6 26.6V416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M348.3 442.4c2.4-8.4 3.7-17.3 3.7-26.4V363.5c8.8-8 16.6-17.1 23-27c10.4-16.1-6.8-32.5-25.5-28.1c-28.9 6.8-60.5 10.5-93.6 10.5s-64.7-3.7-93.6-10.5c-18.7-4.4-35.9 12-25.5 28.1c6.5 10 14.3 19.1 23.1 27.1V416c0 9.2 1.3 18 3.7 26.4C95.1 408.4 48 337.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 81.7-47.1 152.4-115.7 186.4zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm176.7 12a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-.4-72a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm0 128a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM320 416c0 35.3-28.7 64-64 64s-64-28.7-64-64V378.6c0-14.7 11.9-26.6 26.6-26.6h2c11.3 0 21.1 7.9 23.6 18.9c2.8 12.6 20.8 12.6 23.6 0c2.5-11.1 12.3-18.9 23.6-18.9h2c14.7 0 26.6 11.9 26.6 26.6V416z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-wide\": {\n    \"aliases\": {\n      \"names\": [\"grin-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f603\"],\n        \"secondary\": [\"10f581\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"face\",\n        \"grinning face with big eyes\",\n        \"laugh\",\n        \"mouth\",\n        \"open\",\n        \"smile\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f581\",\n    \"label\": \"Face Grin Wide\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zM208 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm128 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM224 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm96 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM224 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64zm96 64c-17.7 0-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64s-14.3 64-32 64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-grin-wink\": {\n    \"aliases\": {\n      \"names\": [\"grin-wink\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f58c\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.1.1\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"emoticon\", \"face\", \"flirt\", \"laugh\", \"smile\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f58c\",\n    \"label\": \"Face Grin Wink\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-16.9-79.2c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM388.1 312.8c12.3-3.8 24.3 6.9 19.3 18.7C382.4 390.6 324.2 432 256.3 432s-126.2-41.4-151.1-100.5c-5-11.8 7-22.5 19.3-18.7c39.7 12.2 84.5 19 131.8 19s92.1-6.8 131.8-19zm-16.9-79.2c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm349.5 52.4c18.7-4.4 35.9 12 25.5 28.1C350.4 374.6 306.3 400 255.9 400s-94.5-25.4-119.1-63.5c-10.4-16.1 6.8-32.5 25.5-28.1c28.9 6.8 60.5 10.5 93.6 10.5s64.7-3.7 93.6-10.5zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-kiss\": {\n    \"aliases\": {\n      \"names\": [\"kiss\"],\n      \"unicodes\": {\n        \"composite\": [\"1f617\"],\n        \"secondary\": [\"10f596\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.1.1\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beso\",\n        \"emoticon\",\n        \"face\",\n        \"kiss\",\n        \"kissing face\",\n        \"love\",\n        \"smooch\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f596\",\n    \"label\": \"Face Kiss\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 25.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 411.1 257.4 416 240 416c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.8-.5-.1-.1-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 25.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 411.1 257.4 416 240 416c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.8-.5-.1-.1-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-kiss-beam\": {\n    \"aliases\": {\n      \"names\": [\"kiss-beam\"],\n      \"unicodes\": {\n        \"composite\": [\"1f619\"],\n        \"secondary\": [\"10f597\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beso\",\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"kiss\",\n        \"kissing face with smiling eyes\",\n        \"love\",\n        \"smile\",\n        \"smooch\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f597\",\n    \"label\": \"Face Kiss Beam\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-84.9l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm48.7-198.3c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 443.1 257.4 448 240 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1 .3-.2 .6-.4c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.4-.3-.5-.3-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-84.9l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 41.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 427.1 257.4 432 240 432c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-68.9l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm304.7 41.7c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C274.7 427.1 257.4 432 240 432c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4zm-87.1-68.9l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-kiss-wink-heart\": {\n    \"aliases\": {\n      \"names\": [\"kiss-wink-heart\"],\n      \"unicodes\": {\n        \"composite\": [\"1f618\"],\n        \"secondary\": [\"10f598\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beso\",\n        \"emoticon\",\n        \"face\",\n        \"face blowing a kiss\",\n        \"kiss\",\n        \"love\",\n        \"smooch\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f598\",\n    \"label\": \"Face Kiss Wink Heart\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M498 339.7c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-22.9-89.3c-10-39 11.8-80.9 51.8-92.1c37.2-10.4 73.8 10.1 87.5 44c12.7-1.6 25.1 .4 36.2 5zM296 332c0 6.9-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C258.7 443.1 241.4 448 224 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.6-.4-.3-.2-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm194.8 57.6c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M498 339.7c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-22.9-89.3c-10-39 11.8-80.9 51.8-92.1c37.2-10.4 73.8 10.1 87.5 44c12.7-1.6 25.1 .4 36.2 5zM296 332c0 6.9-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4c-2.7 1.5-5.7 3-8.7 4.3c3.1 1.3 6 2.7 8.7 4.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3s-3.1 13.2-7.3 18.3c-4.3 5.2-10.1 9.7-16.7 13.4C258.7 443.1 241.4 448 224 448c-3.6 0-6.8-2.5-7.7-6s.6-7.2 3.8-9l0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1l-.6-.4-.3-.2-.2-.1 0 0 0 0 0 0c-2.5-1.4-4.1-4.1-4.1-7s1.6-5.6 4.1-7l0 0 0 0 0 0 0 0 0 0 .2-.1c.2-.1 .5-.3 .9-.5c.8-.5 2-1.2 3.4-2.1c2.8-1.9 6.5-4.5 10.2-7.6c3.7-3.1 7.2-6.6 9.6-10.1c2.5-3.5 3.5-6.4 3.5-8.6s-1-5-3.5-8.6c-2.5-3.5-5.9-6.9-9.6-10.1c-3.7-3.1-7.4-5.7-10.2-7.6c-1.4-.9-2.6-1.6-3.4-2.1c-.4-.2-.7-.4-.9-.5l-.2-.1 0 0 0 0 0 0c-3.2-1.8-4.7-5.5-3.8-9s4.1-6 7.7-6c17.4 0 34.7 4.9 47.9 12.3c6.6 3.7 12.5 8.2 16.7 13.4c4.3 5.1 7.3 11.4 7.3 18.3zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm194.8 57.6c-17.6-23.5-52.8-23.5-70.4 0c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M338.9 446.8c-25.4 11-53.4 17.2-82.9 17.2C141.1 464 48 370.9 48 256S141.1 48 256 48s208 93.1 208 208c0 22.4-3.5 43.9-10.1 64.1c3.1 4.5 5.7 9.4 7.8 14.6c12.7-1.6 25.1 .4 36.2 5c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-6.5-25.3zM296 316c0-6.9-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4C258.7 276.9 241.4 272 224 272c-3.6 0-6.8 2.5-7.7 6s.6 7.2 3.8 9l0 0 0 0 0 0 .2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1 0 0 0 0 0 0 0 0 0 0c-2.5 1.4-4.1 4.1-4.1 7s1.6 5.6 4.1 7l0 0 0 0 0 0 .2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1 0 0 0 0 0 0 0 0c-3.2 1.8-4.7 5.5-3.8 9s4.1 6 7.7 6c17.4 0 34.7-4.9 47.9-12.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3s-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4c-2.7-1.5-5.7-3-8.7-4.3c3.1-1.3 6-2.7 8.7-4.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm159.3-20c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C375.7 186.8 355 180 335.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M338.9 446.8c-25.4 11-53.4 17.2-82.9 17.2C141.1 464 48 370.9 48 256S141.1 48 256 48s208 93.1 208 208c0 22.4-3.5 43.9-10.1 64.1c3.1 4.5 5.7 9.4 7.8 14.6c12.7-1.6 25.1 .4 36.2 5c9.1-26.2 14-54.4 14-83.7C512 114.6 397.4 0 256 0S0 114.6 0 256S114.6 512 256 512c35.4 0 69.1-7.2 99.7-20.2c-4.8-5.5-8.5-12.2-10.4-19.7l-6.5-25.3zM296 316c0-6.9-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4C258.7 276.9 241.4 272 224 272c-3.6 0-6.8 2.5-7.7 6s.6 7.2 3.8 9l0 0 0 0 0 0 .2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1 0 0 0 0 0 0 0 0 0 0c-2.5 1.4-4.1 4.1-4.1 7s1.6 5.6 4.1 7l0 0 0 0 0 0 .2 .1c.2 .1 .5 .3 .9 .5c.8 .5 2 1.2 3.4 2.1c2.8 1.9 6.5 4.5 10.2 7.6c3.7 3.1 7.2 6.6 9.6 10.1c2.5 3.5 3.5 6.4 3.5 8.6s-1 5-3.5 8.6c-2.5 3.5-5.9 6.9-9.6 10.1c-3.7 3.1-7.4 5.7-10.2 7.6c-1.4 .9-2.6 1.6-3.4 2.1c-.4 .2-.7 .4-.9 .5l-.2 .1 0 0 0 0 0 0 0 0c-3.2 1.8-4.7 5.5-3.8 9s4.1 6 7.7 6c17.4 0 34.7-4.9 47.9-12.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3s-3.1-13.2-7.3-18.3c-4.3-5.2-10.1-9.7-16.7-13.4c-2.7-1.5-5.7-3-8.7-4.3c3.1-1.3 6-2.7 8.7-4.3c6.6-3.7 12.5-8.2 16.7-13.4c4.3-5.1 7.3-11.4 7.3-18.3zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm159.3-20c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C375.7 186.8 355 180 335.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zM434 352.3c-6-23.2-28.8-37-51.1-30.8s-35.4 30.1-29.5 53.4l22.9 89.3c2.2 8.7 11.2 13.9 19.8 11.4l84.9-23.8c22.2-6.2 35.4-30.1 29.5-53.4s-28.8-37-51.1-30.8l-20.2 5.6-5.4-21z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-laugh\": {\n    \"aliases\": {\n      \"names\": [\"laugh\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f599\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"LOL\", \"emoticon\", \"face\", \"laugh\", \"smile\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f599\",\n    \"label\": \"Face Laugh\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-laugh-beam\": {\n    \"aliases\": {\n      \"names\": [\"laugh-beam\"],\n      \"unicodes\": {\n        \"composite\": [\"1f601\"],\n        \"secondary\": [\"10f59a\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"LOL\",\n        \"beaming face with smiling eyes\",\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"grin\",\n        \"happy\",\n        \"smile\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f59a\",\n    \"label\": \"Face Laugh Beam\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM217.6 212.8l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM217.6 212.8l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm86.9-85.1l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm86.9-85.1l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-laugh-squint\": {\n    \"aliases\": {\n      \"names\": [\"laugh-squint\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f59b\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"LOL\", \"emoticon\", \"face\", \"happy\", \"smile\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f59b\",\n    \"label\": \"Face Laugh Squint\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zm36.7-199.4l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 125.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zm36.7-199.4l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 125.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm2.8-183.3l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 141.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zm2.8-183.3l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 141.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-laugh-wink\": {\n    \"aliases\": {\n      \"names\": [\"laugh-wink\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f59c\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"LOL\", \"emoticon\", \"face\", \"happy\", \"smile\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f59c\",\n    \"label\": \"Face Laugh Wink\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM96.8 314.1c-3.8-13.7 7.4-26.1 21.6-26.1H393.6c14.2 0 25.5 12.4 21.6 26.1C396.2 382 332.1 432 256 432s-140.2-50-159.2-117.9zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm130.7 57.9c-4.2-13.6 7.1-25.9 21.3-25.9H364.5c14.2 0 25.5 12.4 21.3 25.9C369 368.4 318.2 408 258.2 408s-110.8-39.6-127.5-94.1zM144.4 192a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-meh\": {\n    \"aliases\": {\n      \"names\": [\"meh\"],\n      \"unicodes\": {\n        \"composite\": [\"1f610\"],\n        \"secondary\": [\"10f11a\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"deadpan\",\n        \"emoticon\",\n        \"face\",\n        \"meh\",\n        \"neutral\",\n        \"neutral face\",\n        \"rating\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f11a\",\n    \"label\": \"Face Meh\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM160 336H352c8.8 0 16 7.2 16 16s-7.2 16-16 16H160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM160 336H352c8.8 0 16 7.2 16 16s-7.2 16-16 16H160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm192-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM184 328c-13.3 0-24 10.7-24 24s10.7 24 24 24H328c13.3 0 24-10.7 24-24s-10.7-24-24-24H184z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM256 0a256 256 0 1 0 0 512A256 256 0 1 0 256 0zM176.4 240a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm192-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM184 328c-13.3 0-24 10.7-24 24s10.7 24 24 24H328c13.3 0 24-10.7 24-24s-10.7-24-24-24H184z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-meh-blank\": {\n    \"aliases\": {\n      \"names\": [\"meh-blank\"],\n      \"unicodes\": {\n        \"composite\": [\"1f636\"],\n        \"secondary\": [\"10f5a4\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"face\",\n        \"face without mouth\",\n        \"mouth\",\n        \"neutral\",\n        \"quiet\",\n        \"rating\",\n        \"silent\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5a4\",\n    \"label\": \"Face Meh Blank\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm208.4-48a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm208.4-48a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 0 0 416 208 208 0 1 0 0-416zM512 256A256 256 0 1 1 0 256a256 256 0 1 1 512 0zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-rolling-eyes\": {\n    \"aliases\": {\n      \"names\": [\"meh-rolling-eyes\"],\n      \"unicodes\": {\n        \"composite\": [\"1f644\"],\n        \"secondary\": [\"10f5a5\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"eyeroll\",\n        \"eyes\",\n        \"face\",\n        \"face with rolling eyes\",\n        \"neutral\",\n        \"rating\",\n        \"rolling\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5a5\",\n    \"label\": \"Face Rolling Eyes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 368H320c8.8 0 16 7.2 16 16s-7.2 16-16 16H192c-8.8 0-16-7.2-16-16s7.2-16 16-16zm32-144c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C208.5 175.6 224 198 224 224zm128 64c-35.3 0-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C400.5 175.6 416 198 416 224c0 35.3-28.7 64-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM192 368H320c8.8 0 16 7.2 16 16s-7.2 16-16 16H192c-8.8 0-16-7.2-16-16s7.2-16 16-16zm32-144c0 35.3-28.7 64-64 64s-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C208.5 175.6 224 198 224 224zm128 64c-35.3 0-64-28.7-64-64c0-26 15.5-48.4 37.8-58.4c-3.7 5.2-5.8 11.6-5.8 18.4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.9-2.2-13.2-5.8-18.4C400.5 175.6 416 198 416 224c0 35.3-28.7 64-64 64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM168 376c0 13.3 10.7 24 24 24H320c13.3 0 24-10.7 24-24s-10.7-24-24-24H192c-13.3 0-24 10.7-24 24zm-8-104c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm192-32c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM168 376c0 13.3 10.7 24 24 24H320c13.3 0 24-10.7 24-24s-10.7-24-24-24H192c-13.3 0-24 10.7-24 24zm-8-104c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm192-32c-26.5 0-48-21.5-48-48c0-14.3 6.3-27.2 16.2-36c-.2 1.3-.2 2.6-.2 4c0 17.7 14.3 32 32 32s32-14.3 32-32c0-1.4-.1-2.7-.2-4c10 8.8 16.2 21.7 16.2 36c0 26.5-21.5 48-48 48zm0 32a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-sad-cry\": {\n    \"aliases\": {\n      \"names\": [\"sad-cry\"],\n      \"unicodes\": {\n        \"composite\": [\"1f62d\"],\n        \"secondary\": [\"10f5b3\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cry\",\n        \"emoticon\",\n        \"face\",\n        \"loudly crying face\",\n        \"sad\",\n        \"sob\",\n        \"tear\",\n        \"tears\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5b3\",\n    \"label\": \"Face Sad Cry\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M352 493.4c-29.6 12-62.1 18.6-96 18.6s-66.4-6.6-96-18.6V288c0-8.8-7.2-16-16-16s-16 7.2-16 16V477.8C51.5 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 94.8-51.5 177.5-128 221.8V288c0-8.8-7.2-16-16-16s-16 7.2-16 16V493.4zM195.2 233.6c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zm121.6 0c17.6-23.5 52.8-23.5 70.4 0c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2zM208 336v32c0 26.5 21.5 48 48 48s48-21.5 48-48V336c0-26.5-21.5-48-48-48s-48 21.5-48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M352 493.4c-29.6 12-62.1 18.6-96 18.6s-66.4-6.6-96-18.6V288c0-8.8-7.2-16-16-16s-16 7.2-16 16V477.8C51.5 433.5 0 350.8 0 256C0 114.6 114.6 0 256 0S512 114.6 512 256c0 94.8-51.5 177.5-128 221.8V288c0-8.8-7.2-16-16-16s-16 7.2-16 16V493.4zM195.2 233.6c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2c17.6-23.5 52.8-23.5 70.4 0zm121.6 0c17.6-23.5 52.8-23.5 70.4 0c5.3 7.1 15.3 8.5 22.4 3.2s8.5-15.3 3.2-22.4c-30.4-40.5-91.2-40.5-121.6 0c-5.3 7.1-3.9 17.1 3.2 22.4s17.1 3.9 22.4-3.2zM208 336v32c0 26.5 21.5 48 48 48s48-21.5 48-48V336c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M400 406.1V288c0-13.3-10.7-24-24-24s-24 10.7-24 24V440.6c-28.7 15-61.4 23.4-96 23.4s-67.3-8.5-96-23.4V288c0-13.3-10.7-24-24-24s-24 10.7-24 24V406.1C72.6 368.2 48 315 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 59-24.6 112.2-64 150.1zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm166.6 9.7c5.5-5.8 14.8-9.7 25.4-9.7s19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C391.7 186.8 371 180 351.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9zM208 320v32c0 26.5 21.5 48 48 48s48-21.5 48-48V320c0-26.5-21.5-48-48-48s-48 21.5-48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M400 406.1V288c0-13.3-10.7-24-24-24s-24 10.7-24 24V440.6c-28.7 15-61.4 23.4-96 23.4s-67.3-8.5-96-23.4V288c0-13.3-10.7-24-24-24s-24 10.7-24 24V406.1C72.6 368.2 48 315 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208c0 59-24.6 112.2-64 150.1zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM159.6 220c10.6 0 19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C199.7 186.8 179 180 159.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9c5.5-5.8 14.8-9.7 25.4-9.7zm166.6 9.7c5.5-5.8 14.8-9.7 25.4-9.7s19.9 3.8 25.4 9.7c7.6 8.1 20.2 8.5 28.3 .9s8.5-20.2 .9-28.3C391.7 186.8 371 180 351.6 180s-40.1 6.8-54.6 22.3c-7.6 8.1-7.1 20.7 .9 28.3s20.7 7.1 28.3-.9zM208 320v32c0 26.5 21.5 48 48 48s48-21.5 48-48V320c0-26.5-21.5-48-48-48s-48 21.5-48 48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-sad-tear\": {\n    \"aliases\": {\n      \"names\": [\"sad-tear\"],\n      \"unicodes\": {\n        \"composite\": [\"1f622\"],\n        \"secondary\": [\"10f5b4\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cry\",\n        \"crying face\",\n        \"emoticon\",\n        \"face\",\n        \"sad\",\n        \"tear\",\n        \"tears\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5b4\",\n    \"label\": \"Face Sad Tear\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm240 80c0-8.8 7.2-16 16-16c45 0 85.6 20.5 115.7 53.1c6 6.5 5.6 16.6-.9 22.6s-16.6 5.6-22.6-.9c-25-27.1-57.4-42.9-92.3-42.9c-8.8 0-16-7.2-16-16zm-80 80c-26.5 0-48-21-48-47c0-20 28.6-60.4 41.6-77.7c3.2-4.4 9.6-4.4 12.8 0C179.6 308.6 208 349 208 369c0 26-21.5 47-48 47zM367.6 208a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zm240 80c0-8.8 7.2-16 16-16c45 0 85.6 20.5 115.7 53.1c6 6.5 5.6 16.6-.9 22.6s-16.6 5.6-22.6-.9c-25-27.1-57.4-42.9-92.3-42.9c-8.8 0-16-7.2-16-16zm-80 80c-26.5 0-48-21-48-47c0-20 28.6-60.4 41.6-77.7c3.2-4.4 9.6-4.4 12.8 0C179.6 308.6 208 349 208 369c0 26-21.5 47-48 47zM367.6 208a32 32 0 1 1 -64 0 32 32 0 1 1 64 0zm-192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M175.9 448c-35-.1-65.5-22.6-76-54.6C67.6 356.8 48 308.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208s-93.1 208-208 208c-28.4 0-55.5-5.7-80.1-16zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM128 369c0 26 21.5 47 48 47s48-21 48-47c0-20-28.4-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0C156.6 308.6 128 349 128 369zm128-65c-13.3 0-24 10.7-24 24s10.7 24 24 24c30.7 0 58.7 11.5 80 30.6c9.9 8.8 25 8 33.9-1.9s8-25-1.9-33.9C338.3 320.2 299 304 256 304zm47.6-96a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm-128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M175.9 448c-35-.1-65.5-22.6-76-54.6C67.6 356.8 48 308.7 48 256C48 141.1 141.1 48 256 48s208 93.1 208 208s-93.1 208-208 208c-28.4 0-55.5-5.7-80.1-16zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM128 369c0 26 21.5 47 48 47s48-21 48-47c0-20-28.4-60.4-41.6-77.7c-3.2-4.4-9.6-4.4-12.8 0C156.6 308.6 128 349 128 369zm128-65c-13.3 0-24 10.7-24 24s10.7 24 24 24c30.7 0 58.7 11.5 80 30.6c9.9 8.8 25 8 33.9-1.9s8-25-1.9-33.9C338.3 320.2 299 304 256 304zm47.6-96a32 32 0 1 0 64 0 32 32 0 1 0 -64 0zm-128 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-smile\": {\n    \"aliases\": {\n      \"names\": [\"smile\"],\n      \"unicodes\": {\n        \"composite\": [\"1f642\"],\n        \"secondary\": [\"10f118\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"approve\",\n        \"emoticon\",\n        \"face\",\n        \"happy\",\n        \"rating\",\n        \"satisfied\",\n        \"slightly smiling face\",\n        \"smile\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f118\",\n    \"label\": \"Face Smile\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm192-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-smile-beam\": {\n    \"aliases\": {\n      \"names\": [\"smile-beam\"],\n      \"unicodes\": {\n        \"composite\": [\"1f60a\"],\n        \"secondary\": [\"10f5b8\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"blush\",\n        \"emoticon\",\n        \"eye\",\n        \"face\",\n        \"happy\",\n        \"positive\",\n        \"smile\",\n        \"smiling face with smiling eyes\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5b8\",\n    \"label\": \"Face Smile Beam\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zm53.5-96.7l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zm53.5-96.7l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zm40-89.3l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zm40-89.3l0 0 0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0zm160 0l0 0-.2-.2c-.2-.2-.4-.5-.7-.9c-.6-.8-1.6-2-2.8-3.4c-2.5-2.8-6-6.6-10.2-10.3c-8.8-7.8-18.8-14-27.7-14s-18.9 6.2-27.7 14c-4.2 3.7-7.7 7.5-10.2 10.3c-1.2 1.4-2.2 2.6-2.8 3.4c-.3 .4-.6 .7-.7 .9l-.2 .2 0 0 0 0 0 0c-2.1 2.8-5.7 3.9-8.9 2.8s-5.5-4.1-5.5-7.6c0-17.9 6.7-35.6 16.6-48.8c9.8-13 23.9-23.2 39.4-23.2s29.6 10.2 39.4 23.2c9.9 13.2 16.6 30.9 16.6 48.8c0 3.4-2.2 6.5-5.5 7.6s-6.9 0-8.9-2.8l0 0 0 0 0 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-smile-wink\": {\n    \"aliases\": {\n      \"names\": [\"smile-wink\"],\n      \"unicodes\": {\n        \"composite\": [\"1f609\"],\n        \"secondary\": [\"10f4da\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"face\",\n        \"happy\",\n        \"hint\",\n        \"joke\",\n        \"wink\",\n        \"winking face\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f4da\",\n    \"label\": \"Face Smile Wink\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.1 325.5C182 346.2 212.6 368 256 368s74-21.8 91.9-42.5c5.8-6.7 15.9-7.4 22.6-1.6s7.4 15.9 1.6 22.6C349.8 372.1 311.1 400 256 400s-93.8-27.9-116.1-53.5c-5.8-6.7-5.1-16.8 1.6-22.6s16.8-5.1 22.6 1.6zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm156.4 25.6c-5.3 7.1-15.3 8.5-22.4 3.2s-8.5-15.3-3.2-22.4c30.4-40.5 91.2-40.5 121.6 0c5.3 7.1 3.9 17.1-3.2 22.4s-17.1 3.9-22.4-3.2c-17.6-23.5-52.8-23.5-70.4 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm177.6 62.1C192.8 334.5 218.8 352 256 352s63.2-17.5 78.4-33.9c9-9.7 24.2-10.4 33.9-1.4s10.4 24.2 1.4 33.9c-22 23.8-60 49.4-113.6 49.4s-91.7-25.5-113.6-49.4c-9-9.7-8.4-24.9 1.4-33.9s24.9-8.4 33.9 1.4zM144.4 208a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm165.8 21.7c-7.6 8.1-20.2 8.5-28.3 .9s-8.5-20.2-.9-28.3c14.5-15.5 35.2-22.3 54.6-22.3s40.1 6.8 54.6 22.3c7.6 8.1 7.1 20.7-.9 28.3s-20.7 7.1-28.3-.9c-5.5-5.8-14.8-9.7-25.4-9.7s-19.9 3.8-25.4 9.7z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-surprise\": {\n    \"aliases\": {\n      \"names\": [\"surprise\"],\n      \"unicodes\": {\n        \"composite\": [\"1f62e\"],\n        \"secondary\": [\"10f5c2\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"emoticon\",\n        \"face\",\n        \"face with open mouth\",\n        \"mouth\",\n        \"open\",\n        \"shocked\",\n        \"sympathy\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5c2\",\n    \"label\": \"Face Surprise\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM176.4 176a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.4-80a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm128 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM256 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"face-tired\": {\n    \"aliases\": {\n      \"names\": [\"tired\"],\n      \"unicodes\": {\n        \"composite\": [\"1f62b\"],\n        \"secondary\": [\"10f5c8\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"angry\",\n        \"emoticon\",\n        \"face\",\n        \"grumpy\",\n        \"tired\",\n        \"tired face\",\n        \"upset\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5c8\",\n    \"label\": \"Face Tired\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.7 328.7c22-22 53.9-40.7 91.3-40.7s69.3 18.7 91.3 40.7c11.1 11.1 20.1 23.4 26.4 35.4c6.2 11.7 10.3 24.4 10.3 35.9c0 5.2-2.6 10.2-6.9 13.2s-9.8 3.7-14.7 1.8l-20.5-7.7c-26.9-10.1-55.5-15.3-84.3-15.3h-3.2c-28.8 0-57.3 5.2-84.3 15.3L149.6 415c-4.9 1.8-10.4 1.2-14.7-1.8s-6.9-7.9-6.9-13.2c0-11.6 4.2-24.2 10.3-35.9c6.3-12 15.3-24.3 26.4-35.4zm-31.2-182l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM164.7 328.7c22-22 53.9-40.7 91.3-40.7s69.3 18.7 91.3 40.7c11.1 11.1 20.1 23.4 26.4 35.4c6.2 11.7 10.3 24.4 10.3 35.9c0 5.2-2.6 10.2-6.9 13.2s-9.8 3.7-14.7 1.8l-20.5-7.7c-26.9-10.1-55.5-15.3-84.3-15.3h-3.2c-28.8 0-57.3 5.2-84.3 15.3L149.6 415c-4.9 1.8-10.4 1.2-14.7-1.8s-6.9-7.9-6.9-13.2c0-11.6 4.2-24.2 10.3-35.9c6.3-12 15.3-24.3 26.4-35.4zm-31.2-182l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767583,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.5 64.3C196.1 302.1 223.8 288 256 288s59.9 14.1 79.5 32.3C354.5 338.1 368 362 368 384c0 5.4-2.7 10.4-7.2 13.4s-10.2 3.4-15.2 1.3l-17.2-7.5c-22.8-10-47.5-15.1-72.4-15.1s-49.6 5.2-72.4 15.1l-17.2 7.5c-4.9 2.2-10.7 1.7-15.2-1.3s-7.2-8-7.2-13.4c0-22 13.5-45.9 32.5-63.7zm-43-173.6l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 256A208 208 0 1 0 48 256a208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm176.5 64.3C196.1 302.1 223.8 288 256 288s59.9 14.1 79.5 32.3C354.5 338.1 368 362 368 384c0 5.4-2.7 10.4-7.2 13.4s-10.2 3.4-15.2 1.3l-17.2-7.5c-22.8-10-47.5-15.1-72.4-15.1s-49.6 5.2-72.4 15.1l-17.2 7.5c-4.9 2.2-10.7 1.7-15.2-1.3s-7.2-8-7.2-13.4c0-22 13.5-45.9 32.5-63.7zm-43-173.6l89.9 47.9c10.7 5.7 10.7 21.1 0 26.8l-89.9 47.9c-7.9 4.2-17.5-1.5-17.5-10.5c0-2.8 1-5.5 2.8-7.6l36-43.2-36-43.2c-1.8-2.1-2.8-4.8-2.8-7.6c0-9 9.6-14.7 17.5-10.5zM396 157.1c0 2.8-1 5.5-2.8 7.6l-36 43.2 36 43.2c1.8 2.1 2.8 4.8 2.8 7.6c0 9-9.6 14.7-17.5 10.5l-89.9-47.9c-10.7-5.7-10.7-21.1 0-26.8l89.9-47.9c7.9-4.2 17.5 1.5 17.5 10.5z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"facebook\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f230\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"facebook-official\", \"social network\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f09a\",\n    \"label\": \"Facebook\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"facebook-f\": {\n    \"changes\": [\"5.0.0\", \"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"facebook\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f39e\",\n    \"label\": \"Facebook F\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"facebook-messenger\": {\n    \"changes\": [\"5.0.0\", \"5.8.2\", \"5.9.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f39f\",\n    \"label\": \"Facebook Messenger\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256.55 8C116.52 8 8 110.34 8 248.57c0 72.3 29.71 134.78 78.07 177.94 8.35 7.51 6.63 11.86 8.05 58.23A19.92 19.92 0 0 0 122 502.31c52.91-23.3 53.59-25.14 62.56-22.7C337.85 521.8 504 423.7 504 248.57 504 110.34 396.59 8 256.55 8zm149.24 185.13l-73 115.57a37.37 37.37 0 0 1-53.91 9.93l-58.08-43.47a15 15 0 0 0-18 0l-78.37 59.44c-10.46 7.93-24.16-4.6-17.11-15.67l73-115.57a37.36 37.36 0 0 1 53.91-9.93l58.06 43.46a15 15 0 0 0 18 0l78.41-59.38c10.44-7.98 24.14 4.54 17.09 15.62z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"fan\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f863\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ac\", \"air conditioning\", \"blade\", \"blower\", \"cool\", \"hot\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f863\",\n    \"label\": \"Fan\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M258.6 0c-1.7 0-3.4 .1-5.1 .5C168 17 115.6 102.3 130.5 189.3c2.9 17 8.4 32.9 15.9 47.4L32 224H29.4C13.2 224 0 237.2 0 253.4c0 1.7 .1 3.4 .5 5.1C17 344 102.3 396.4 189.3 381.5c17-2.9 32.9-8.4 47.4-15.9L224 480v2.6c0 16.2 13.2 29.4 29.4 29.4c1.7 0 3.4-.1 5.1-.5C344 495 396.4 409.7 381.5 322.7c-2.9-17-8.4-32.9-15.9-47.4L480 288h2.6c16.2 0 29.4-13.2 29.4-29.4c0-1.7-.1-3.4-.5-5.1C495 168 409.7 115.6 322.7 130.5c-17 2.9-32.9 8.4-47.4 15.9L288 32V29.4C288 13.2 274.8 0 258.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M258.6 0c-1.7 0-3.4 .1-5.1 .5C168 17 115.6 102.3 130.5 189.3c2.9 17 8.4 32.9 15.9 47.4L32 224H29.4C13.2 224 0 237.2 0 253.4c0 1.7 .1 3.4 .5 5.1C17 344 102.3 396.4 189.3 381.5c17-2.9 32.9-8.4 47.4-15.9L224 480v2.6c0 16.2 13.2 29.4 29.4 29.4c1.7 0 3.4-.1 5.1-.5C344 495 396.4 409.7 381.5 322.7c-2.9-17-8.4-32.9-15.9-47.4L480 288h2.6c16.2 0 29.4-13.2 29.4-29.4c0-1.7-.1-3.4-.5-5.1C495 168 409.7 115.6 322.7 130.5c-17 2.9-32.9 8.4-47.4 15.9L288 32V29.4C288 13.2 274.8 0 258.6 0zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fantasy-flight-games\": {\n    \"changes\": [\"5.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"game\",\n        \"gaming\",\n        \"tabletop\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f6dc\",\n    \"label\": \"Fantasy Flight-games\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 32.86L32.86 256 256 479.14 479.14 256 256 32.86zM88.34 255.83c1.96-2 11.92-12.3 96.49-97.48 41.45-41.75 86.19-43.77 119.77-18.69 24.63 18.4 62.06 58.9 62.15 59 .68.74 1.07 2.86.58 3.38-11.27 11.84-22.68 23.54-33.5 34.69-34.21-32.31-40.52-38.24-48.51-43.95-17.77-12.69-41.4-10.13-56.98 5.1-2.17 2.13-1.79 3.43.12 5.35 2.94 2.95 28.1 28.33 35.09 35.78-11.95 11.6-23.66 22.97-35.69 34.66-12.02-12.54-24.48-25.53-36.54-38.11-21.39 21.09-41.69 41.11-61.85 60.99zm234.82 101.6c-35.49 35.43-78.09 38.14-106.99 20.47-22.08-13.5-39.38-32.08-72.93-66.84 12.05-12.37 23.79-24.42 35.37-36.31 33.02 31.91 37.06 36.01 44.68 42.09 18.48 14.74 42.52 13.67 59.32-1.8 3.68-3.39 3.69-3.64.14-7.24-10.59-10.73-21.19-21.44-31.77-32.18-1.32-1.34-3.03-2.48-.8-4.69 10.79-10.71 21.48-21.52 32.21-32.29.26-.26.65-.38 1.91-1.07 12.37 12.87 24.92 25.92 37.25 38.75 21.01-20.73 41.24-40.68 61.25-60.42 13.68 13.4 27.13 26.58 40.86 40.03-20.17 20.86-81.68 82.71-100.5 101.5zM256 0L0 256l256 256 256-256L256 0zM16 256L256 16l240 240-240 240L16 256z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"faucet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e005\"]\n      }\n    },\n    \"changes\": [\"5.12.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"drinking\",\n        \"drip\",\n        \"house\",\n        \"hygiene\",\n        \"kitchen\",\n        \"potable\",\n        \"potable water\",\n        \"sanitation\",\n        \"sink\",\n        \"water\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e005\",\n    \"label\": \"Faucet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 96v12L96 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l96-12 31-3.9 1-.1 1 .1 31 3.9 96 12c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 12V96c0-17.7-14.3-32-32-32s-32 14.3-32 32zM32 256c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H132.1c20.2 29 53.9 48 91.9 48s71.7-19 91.9-48H352c17.7 0 32 14.3 32 32s14.3 32 32 32h64c17.7 0 32-14.3 32-32c0-88.4-71.6-160-160-160H320l-22.6-22.6c-6-6-14.1-9.4-22.6-9.4H256V180.2l-32-4-32 4V224H173.3c-8.5 0-16.6 3.4-22.6 9.4L128 256H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 96v12L96 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l96-12 31-3.9 1-.1 1 .1 31 3.9 96 12c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 12V96c0-17.7-14.3-32-32-32s-32 14.3-32 32zM32 256c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H132.1c20.2 29 53.9 48 91.9 48s71.7-19 91.9-48H352c17.7 0 32 14.3 32 32s14.3 32 32 32h64c17.7 0 32-14.3 32-32c0-88.4-71.6-160-160-160H320l-22.6-22.6c-6-6-14.1-9.4-22.6-9.4H256V180.2l-32-4-32 4V224H173.3c-8.5 0-16.6 3.4-22.6 9.4L128 256H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"faucet-drip\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6b0\"],\n        \"secondary\": [\"10e006\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"drinking\",\n        \"drip\",\n        \"house\",\n        \"hygiene\",\n        \"kitchen\",\n        \"potable\",\n        \"potable water\",\n        \"sanitation\",\n        \"sink\",\n        \"water\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e006\",\n    \"label\": \"Faucet Drip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M224 0c17.7 0 32 14.3 32 32V44l96-12c17.7 0 32 14.3 32 32s-14.3 32-32 32L256 84l-31-3.9-1-.1-1 .1L192 84 96 96C78.3 96 64 81.7 64 64s14.3-32 32-32l96 12V32c0-17.7 14.3-32 32-32zM0 224c0-17.7 14.3-32 32-32h96l22.6-22.6c6-6 14.1-9.4 22.6-9.4H192V116.2l32-4 32 4V160h18.7c8.5 0 16.6 3.4 22.6 9.4L320 192h32c88.4 0 160 71.6 160 160c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32s-14.3-32-32-32H315.9c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48H32c-17.7 0-32-14.3-32-32V224zM436.8 423.4c1.9-4.5 6.3-7.4 11.2-7.4s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V480c0 17.7-14.3 32-32 32s-32-14.3-32-32v-1.2c0-4.5 .9-8.9 2.7-13.1l18.2-42.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M224 0c17.7 0 32 14.3 32 32V44l96-12c17.7 0 32 14.3 32 32s-14.3 32-32 32L256 84l-31-3.9-1-.1-1 .1L192 84 96 96C78.3 96 64 81.7 64 64s14.3-32 32-32l96 12V32c0-17.7 14.3-32 32-32zM0 224c0-17.7 14.3-32 32-32h96l22.6-22.6c6-6 14.1-9.4 22.6-9.4H192V116.2l32-4 32 4V160h18.7c8.5 0 16.6 3.4 22.6 9.4L320 192h32c88.4 0 160 71.6 160 160c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32s-14.3-32-32-32H315.9c-20.2 29-53.9 48-91.9 48s-71.7-19-91.9-48H32c-17.7 0-32-14.3-32-32V224zM436.8 423.4c1.9-4.5 6.3-7.4 11.2-7.4s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V480c0 17.7-14.3 32-32 32s-32-14.3-32-32v-1.2c0-4.5 .9-8.9 2.7-13.1l18.2-42.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fax\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4e0\", \"1f5b7\"],\n        \"secondary\": [\"10f1ac\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Fax Icon\",\n        \"business\",\n        \"communicate\",\n        \"copy\",\n        \"facsimile\",\n        \"fax\",\n        \"fax machine\",\n        \"send\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1ac\",\n    \"label\": \"Fax\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 64v96h64V64H386.7L416 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L432 18.7C420 6.7 403.7 0 386.7 0H192c-35.3 0-64 28.7-64 64zM0 160V480c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zm480 32H128V480c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM256 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 64v96h64V64H386.7L416 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L432 18.7C420 6.7 403.7 0 386.7 0H192c-35.3 0-64 28.7-64 64zM0 160V480c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zm480 32H128V480c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM256 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 96a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM224 416a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"feather\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1fab6\"],\n        \"secondary\": [\"10f52d\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bird\",\n        \"feather\",\n        \"flight\",\n        \"light\",\n        \"plucked\",\n        \"plumage\",\n        \"quill\",\n        \"write\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f52d\",\n    \"label\": \"Feather\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l57-57h68c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v55.3L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"feather-pointed\": {\n    \"aliases\": {\n      \"names\": [\"feather-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f56b\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bird\", \"light\", \"plucked\", \"quill\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f56b\",\n    \"label\": \"Feather Pointed\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l74.8-74.8c7.4 4.6 15.3 8.2 23.8 10.5C200.3 452.8 270 454.5 338 409.4c12.2-8.1 5.8-25.4-8.8-25.4l-16.1 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l97.7-29.3c3.4-1 6.4-3.1 8.4-6.1c4.4-6.4 8.6-12.9 12.6-19.6c6.2-10.3-1.5-23-13.5-23l-38.6 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l80.9-24.3c4.6-1.4 8.4-4.8 10.2-9.3C494.5 163 507.8 86.1 511.9 36.8c.8-9.9-3-19.6-10-26.6s-16.7-10.8-26.6-10C391.5 7 228.5 40.5 137.4 131.6C57.3 211.7 56.7 302.3 71.3 356.4c2.1 7.9 12 9.6 17.8 3.8L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M278.5 215.6L23 471c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l74.8-74.8c7.4 4.6 15.3 8.2 23.8 10.5C200.3 452.8 270 454.5 338 409.4c12.2-8.1 5.8-25.4-8.8-25.4l-16.1 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l97.7-29.3c3.4-1 6.4-3.1 8.4-6.1c4.4-6.4 8.6-12.9 12.6-19.6c6.2-10.3-1.5-23-13.5-23l-38.6 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l80.9-24.3c4.6-1.4 8.4-4.8 10.2-9.3C494.5 163 507.8 86.1 511.9 36.8c.8-9.9-3-19.6-10-26.6s-16.7-10.8-26.6-10C391.5 7 228.5 40.5 137.4 131.6C57.3 211.7 56.7 302.3 71.3 356.4c2.1 7.9 12 9.6 17.8 3.8L253.6 195.8c6.2-6.2 16.4-6.2 22.6 0c5.4 5.4 6.1 13.6 2.2 19.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fedex\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Federal Express\", \"package\", \"shipping\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f797\",\n    \"label\": \"FedEx\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M586 284.5l53.3-59.9h-62.4l-21.7 24.8-22.5-24.8H414v-16h56.1v-48.1H318.9V236h-.5c-9.6-11-21.5-14.8-35.4-14.8-28.4 0-49.8 19.4-57.3 44.9-18-59.4-97.4-57.6-121.9-14v-24.2H49v-26.2h60v-41.1H0V345h49v-77.5h48.9c-1.5 5.7-2.3 11.8-2.3 18.2 0 73.1 102.6 91.4 130.2 23.7h-42c-14.7 20.9-45.8 8.9-45.8-14.6h85.5c3.7 30.5 27.4 56.9 60.1 56.9 14.1 0 27-6.9 34.9-18.6h.5V345h212.2l22.1-25 22.3 25H640l-54-60.5zm-446.7-16.6c6.1-26.3 41.7-25.6 46.5 0h-46.5zm153.4 48.9c-34.6 0-34-62.8 0-62.8 32.6 0 34.5 62.8 0 62.8zm167.8 19.1h-94.4V169.4h95v30.2H405v33.9h55.5v28.1h-56.1v44.7h56.1v29.6zm-45.9-39.8v-24.4h56.1v-44l50.7 57-50.7 57v-45.6h-56.1zm138.6 10.3l-26.1 29.5H489l45.6-51.2-45.6-51.2h39.7l26.6 29.3 25.6-29.3h38.5l-45.4 51 46 51.4h-40.5l-26.3-29.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"fedora\": {\n    \"changes\": [\"5.6.0\", \"5.6.3\", \"5.8.0\", \"6.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linux\", \"operating system\", \"os\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f798\",\n    \"label\": \"Fedora\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M.0413 255.8C.1219 132.2 100.3 32 224 32C347.7 32 448 132.3 448 256C448 379.7 347.8 479.9 224.1 480H50.93C22.84 480 .0832 457.3 .0416 429.2H0V255.8H.0413zM342.6 192.7C342.6 153 307 124.2 269.4 124.2C234.5 124.2 203.6 150.5 199.3 184.1C199.1 187.9 198.9 189.1 198.9 192.6C198.8 213.7 198.9 235.4 198.1 257C199 283.1 199.1 309.1 198.1 333.6C198.1 360.7 178.7 379.1 153.4 379.1C128.1 379.1 107.6 358.9 107.6 333.6C108.1 305.9 130.2 288.3 156.1 287.5H156.3L182.6 287.3V250L156.3 250.2C109.2 249.8 71.72 286.7 70.36 333.6C70.36 379.2 107.9 416.5 153.4 416.5C196.4 416.5 232.1 382.9 236 340.9L236.2 287.4L268.8 287.1C294.1 287.3 293.8 249.3 268.6 249.8L236.2 250.1C236.2 243.7 236.3 237.3 236.3 230.9C236.4 218.2 236.4 205.5 236.2 192.7C236.3 176.2 252 161.5 269.4 161.5C286.9 161.5 305.3 170.2 305.3 192.7C305.3 195.9 305.2 197.8 305 199C303.1 209.5 310.2 219.4 320.7 220.9C331.3 222.4 340.9 214.8 341.9 204.3C342.5 200.1 342.6 196.4 342.6 192.7H342.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ferry\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"barge\", \"boat\", \"carry\", \"ferryboat\", \"ship\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ea\",\n    \"label\": \"Ferry\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M224 0H352c17.7 0 32 14.3 32 32h75.1c20.6 0 31.6 24.3 18.1 39.8L456 96H120L98.8 71.8C85.3 56.3 96.3 32 116.9 32H192c0-17.7 14.3-32 32-32zM96 128H480c17.7 0 32 14.3 32 32V283.5c0 13.3-4.2 26.3-11.9 37.2l-51.4 71.9c-1.9 1.1-3.7 2.2-5.5 3.5c-15.5 10.7-34 18-51 19.9H375.6c-17.1-1.8-35-9-50.8-19.9c-22.1-15.5-51.6-15.5-73.7 0c-14.8 10.2-32.5 18-50.6 19.9H183.9c-17-1.8-35.6-9.2-51-19.9c-1.8-1.3-3.7-2.4-5.6-3.5L75.9 320.7C68.2 309.8 64 296.8 64 283.5V160c0-17.7 14.3-32 32-32zm32 64v96H448V192H128zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.3-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M224 0H352c17.7 0 32 14.3 32 32h75.1c20.6 0 31.6 24.3 18.1 39.8L456 96H120L98.8 71.8C85.3 56.3 96.3 32 116.9 32H192c0-17.7 14.3-32 32-32zM96 128H480c17.7 0 32 14.3 32 32V283.5c0 13.3-4.2 26.3-11.9 37.2l-51.4 71.9c-1.9 1.1-3.7 2.2-5.5 3.5c-15.5 10.7-34 18-51 19.9H375.6c-17.1-1.8-35-9-50.8-19.9c-22.1-15.5-51.6-15.5-73.7 0c-14.8 10.2-32.5 18-50.6 19.9H183.9c-17-1.8-35.6-9.2-51-19.9c-1.8-1.3-3.7-2.4-5.6-3.5L75.9 320.7C68.2 309.8 64 296.8 64 283.5V160c0-17.7 14.3-32 32-32zm32 64v96H448V192H128zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.3-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"figma\": {\n    \"changes\": [\"5.6.0\", \"5.7.0\", \"5.8.0\", \"5.15.4\", \"6.0.0-beta2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"app\", \"design\", \"interface\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f799\",\n    \"label\": \"Figma\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M14 95.7924C14 42.8877 56.8878 0 109.793 0H274.161C327.066 0 369.954 42.8877 369.954 95.7924C369.954 129.292 352.758 158.776 326.711 175.897C352.758 193.019 369.954 222.502 369.954 256.002C369.954 308.907 327.066 351.795 274.161 351.795H272.081C247.279 351.795 224.678 342.369 207.666 326.904V415.167C207.666 468.777 163.657 512 110.309 512C57.5361 512 14 469.243 14 416.207C14 382.709 31.1945 353.227 57.2392 336.105C31.1945 318.983 14 289.5 14 256.002C14 222.502 31.196 193.019 57.2425 175.897C31.196 158.776 14 129.292 14 95.7924ZM176.288 191.587H109.793C74.2172 191.587 45.3778 220.427 45.3778 256.002C45.3778 291.44 73.9948 320.194 109.381 320.416C109.518 320.415 109.655 320.415 109.793 320.415H176.288V191.587ZM207.666 256.002C207.666 291.577 236.505 320.417 272.081 320.417H274.161C309.737 320.417 338.576 291.577 338.576 256.002C338.576 220.427 309.737 191.587 274.161 191.587H272.081C236.505 191.587 207.666 220.427 207.666 256.002ZM109.793 351.795C109.655 351.795 109.518 351.794 109.381 351.794C73.9948 352.015 45.3778 380.769 45.3778 416.207C45.3778 451.652 74.6025 480.622 110.309 480.622C146.591 480.622 176.288 451.186 176.288 415.167V351.795H109.793ZM109.793 31.3778C74.2172 31.3778 45.3778 60.2173 45.3778 95.7924C45.3778 131.368 74.2172 160.207 109.793 160.207H176.288V31.3778H109.793ZM207.666 160.207H274.161C309.737 160.207 338.576 131.368 338.576 95.7924C338.576 60.2173 309.737 31.3778 274.161 31.3778H207.666V160.207Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M14 95.7924C14 42.8877 56.8878 0 109.793 0H274.161C327.066 0 369.954 42.8877 369.954 95.7924C369.954 129.292 352.758 158.776 326.711 175.897C352.758 193.019 369.954 222.502 369.954 256.002C369.954 308.907 327.066 351.795 274.161 351.795H272.081C247.279 351.795 224.678 342.369 207.666 326.904V415.167C207.666 468.777 163.657 512 110.309 512C57.5361 512 14 469.243 14 416.207C14 382.709 31.1945 353.227 57.2392 336.105C31.1945 318.983 14 289.5 14 256.002C14 222.502 31.196 193.019 57.2425 175.897C31.196 158.776 14 129.292 14 95.7924ZM176.288 191.587H109.793C74.2172 191.587 45.3778 220.427 45.3778 256.002C45.3778 291.44 73.9948 320.194 109.381 320.416C109.518 320.415 109.655 320.415 109.793 320.415H176.288V191.587ZM207.666 256.002C207.666 291.577 236.505 320.417 272.081 320.417H274.161C309.737 320.417 338.576 291.577 338.576 256.002C338.576 220.427 309.737 191.587 274.161 191.587H272.081C236.505 191.587 207.666 220.427 207.666 256.002ZM109.793 351.795C109.655 351.795 109.518 351.794 109.381 351.794C73.9948 352.015 45.3778 380.769 45.3778 416.207C45.3778 451.652 74.6025 480.622 110.309 480.622C146.591 480.622 176.288 451.186 176.288 415.167V351.795H109.793ZM109.793 31.3778C74.2172 31.3778 45.3778 60.2173 45.3778 95.7924C45.3778 131.368 74.2172 160.207 109.793 160.207H176.288V31.3778H109.793ZM207.666 160.207H274.161C309.737 160.207 338.576 131.368 338.576 95.7924C338.576 60.2173 309.737 31.3778 274.161 31.3778H207.666V160.207Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"file\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4c4\", \"1f5cb\", \"f016\"],\n        \"secondary\": [\"10f15b\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Empty Document\",\n        \"document\",\n        \"new\",\n        \"page\",\n        \"page facing up\",\n        \"pdf\",\n        \"resume\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f15b\",\n    \"label\": \"File\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-arrow-down\": {\n    \"aliases\": {\n      \"names\": [\"file-download\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f56d\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"export\", \"save\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f56d\",\n    \"label\": \"File Arrow Down\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM216 232V334.1l31-31c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0l-72-72c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l31 31V232c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM216 232V334.1l31-31c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-72 72c-9.4 9.4-24.6 9.4-33.9 0l-72-72c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l31 31V232c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-arrow-up\": {\n    \"aliases\": {\n      \"names\": [\"file-upload\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f574\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"import\", \"page\", \"save\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f574\",\n    \"label\": \"File Arrow Up\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM216 408c0 13.3-10.7 24-24 24s-24-10.7-24-24V305.9l-31 31c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l72-72c9.4-9.4 24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-31-31V408z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM216 408c0 13.3-10.7 24-24 24s-24-10.7-24-24V305.9l-31 31c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l72-72c9.4-9.4 24.6-9.4 33.9 0l72 72c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-31-31V408z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-audio\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c7\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"mp3\", \"music\", \"page\", \"play\", \"sound\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c7\",\n    \"label\": \"File Audio\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zm2 226.3c37.1 22.4 62 63.1 62 109.7s-24.9 87.3-62 109.7c-7.6 4.6-17.4 2.1-22-5.4s-2.1-17.4 5.4-22C269.4 401.5 288 370.9 288 336s-18.6-65.5-46.5-82.3c-7.6-4.6-10-14.4-5.4-22s14.4-10 22-5.4zm-91.9 30.9c6 2.5 9.9 8.3 9.9 14.8V400c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L113.4 376H80c-8.8 0-16-7.2-16-16V312c0-8.8 7.2-16 16-16h33.4l35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5zm51 34.9c6.6-5.9 16.7-5.3 22.6 1.3C249.8 304.6 256 319.6 256 336s-6.2 31.4-16.3 42.7c-5.9 6.6-16 7.1-22.6 1.3s-7.1-16-1.3-22.6c5.1-5.7 8.1-13.1 8.1-21.3s-3.1-15.7-8.1-21.3c-5.9-6.6-5.3-16.7 1.3-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zm2 226.3c37.1 22.4 62 63.1 62 109.7s-24.9 87.3-62 109.7c-7.6 4.6-17.4 2.1-22-5.4s-2.1-17.4 5.4-22C269.4 401.5 288 370.9 288 336s-18.6-65.5-46.5-82.3c-7.6-4.6-10-14.4-5.4-22s14.4-10 22-5.4zm-91.9 30.9c6 2.5 9.9 8.3 9.9 14.8V400c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L113.4 376H80c-8.8 0-16-7.2-16-16V312c0-8.8 7.2-16 16-16h33.4l35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5zm51 34.9c6.6-5.9 16.7-5.3 22.6 1.3C249.8 304.6 256 319.6 256 336s-6.2 31.4-16.3 42.7c-5.9 6.6-16 7.1-22.6 1.3s-7.1-16-1.3-22.6c5.1-5.7 8.1-13.1 8.1-21.3s-3.1-15.7-8.1-21.3c-5.9-6.6-5.3-16.7 1.3-22.6z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 464H320c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM192 272V400c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L129.4 376H112c-8.8 0-16-7.2-16-16V312c0-8.8 7.2-16 16-16h17.4l35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8zm85.8-4c11.6 20 18.2 43.3 18.2 68s-6.6 48-18.2 68c-6.6 11.5-21.3 15.4-32.8 8.8s-15.4-21.3-8.8-32.8c7.5-12.9 11.8-27.9 11.8-44s-4.3-31.1-11.8-44c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 464H320c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM192 272V400c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5L129.4 376H112c-8.8 0-16-7.2-16-16V312c0-8.8 7.2-16 16-16h17.4l35.3-35.3c4.6-4.6 11.5-5.9 17.4-3.5s9.9 8.3 9.9 14.8zm85.8-4c11.6 20 18.2 43.3 18.2 68s-6.6 48-18.2 68c-6.6 11.5-21.3 15.4-32.8 8.8s-15.4-21.3-8.8-32.8c7.5-12.9 11.8-27.9 11.8-44s-4.3-31.1-11.8-44c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-circle-check\": {\n    \"changes\": [\"6.0.0\", \"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"file\", \"not affected\", \"ok\", \"okay\", \"paper\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e5a0\",\n    \"label\": \"File Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"file\", \"paper\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4eb\",\n    \"label\": \"File Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-circle-minus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"file\", \"paper\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ed\",\n    \"label\": \"File Circle Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H496c8.8 0 16-7.2 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H496c8.8 0 16-7.2 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-circle-plus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"e4ee\"]\n      }\n    },\n    \"changes\": [\"6.0.0\", \"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"document\", \"file\", \"new\", \"page\", \"paper\", \"pdf\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e494\",\n    \"label\": \"File Circle Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H368c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v48c0 8.8 7.2 16 16 16s16-7.2 16-16V384h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H448V304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H368c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v48c0 8.8 7.2 16 16 16s16-7.2 16-16V384h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H448V304z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-circle-question\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"file\", \"paper\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ef\",\n    \"label\": \"File Circle Question\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6V328c0 8.8 7.2 16 16 16s16-7.2 16-16v-6.4c0-5.3 4.3-9.6 9.6-9.6h40.5c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2V384c0 8.8 7.2 16 16 16s16-7.2 16-16v-5.1l23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9H409.6c-23 0-41.6 18.6-41.6 41.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6V328c0 8.8 7.2 16 16 16s16-7.2 16-16v-6.4c0-5.3 4.3-9.6 9.6-9.6h40.5c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2V384c0 8.8 7.2 16 16 16s16-7.2 16-16v-5.1l23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9H409.6c-23 0-41.6 18.6-41.6 41.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"file\", \"paper\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e5a1\",\n    \"label\": \"File Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v38.6C310.1 219.5 256 287.4 256 368c0 59.1 29.1 111.3 73.7 143.3c-3.2 .5-6.4 .7-9.7 .7H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm48 96a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-code\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c9\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"css\", \"development\", \"document\", \"html\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c9\",\n    \"label\": \"File Code\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM153 289l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L71 337c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM265 255l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM153 289l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L71 337c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM265 255l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm97 289c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L79 303c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-31-31 31-31zM257 255c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9l-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm97 289c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L79 303c-9.4 9.4-9.4 24.6 0 33.9l48 48c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-31-31 31-31zM257 255c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l48-48c9.4-9.4 9.4-24.6 0-33.9l-48-48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-contract\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f56c\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agreement\", \"binding\", \"document\", \"legal\", \"signature\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f56c\",\n    \"label\": \"File Contract\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM80 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm54.2 253.8c-6.1 20.3-24.8 34.2-46 34.2H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h8.2c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.7 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 349l-9.8 32.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM80 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm54.2 253.8c-6.1 20.3-24.8 34.2-46 34.2H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h8.2c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.7 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 349l-9.8 32.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-csv\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6dd\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"excel\", \"numbers\", \"spreadsheets\", \"table\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6dd\",\n    \"label\": \"File Csv\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V304H176c-35.3 0-64 28.7-64 64V512H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM200 352h16c22.1 0 40 17.9 40 40v8c0 8.8-7.2 16-16 16s-16-7.2-16-16v-8c0-4.4-3.6-8-8-8H200c-4.4 0-8 3.6-8 8v80c0 4.4 3.6 8 8 8h16c4.4 0 8-3.6 8-8v-8c0-8.8 7.2-16 16-16s16 7.2 16 16v8c0 22.1-17.9 40-40 40H200c-22.1 0-40-17.9-40-40V392c0-22.1 17.9-40 40-40zm133.1 0H368c8.8 0 16 7.2 16 16s-7.2 16-16 16H333.1c-7.2 0-13.1 5.9-13.1 13.1c0 5.2 3 9.9 7.8 12l37.4 16.6c16.3 7.2 26.8 23.4 26.8 41.2c0 24.9-20.2 45.1-45.1 45.1H304c-8.8 0-16-7.2-16-16s7.2-16 16-16h42.9c7.2 0 13.1-5.9 13.1-13.1c0-5.2-3-9.9-7.8-12l-37.4-16.6c-16.3-7.2-26.8-23.4-26.8-41.2c0-24.9 20.2-45.1 45.1-45.1zm98.9 0c8.8 0 16 7.2 16 16v31.6c0 23 5.5 45.6 16 66c10.5-20.3 16-42.9 16-66V368c0-8.8 7.2-16 16-16s16 7.2 16 16v31.6c0 34.7-10.3 68.7-29.6 97.6l-5.1 7.7c-3 4.5-8 7.1-13.3 7.1s-10.3-2.7-13.3-7.1l-5.1-7.7c-19.3-28.9-29.6-62.9-29.6-97.6V368c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V304H176c-35.3 0-64 28.7-64 64V512H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM200 352h16c22.1 0 40 17.9 40 40v8c0 8.8-7.2 16-16 16s-16-7.2-16-16v-8c0-4.4-3.6-8-8-8H200c-4.4 0-8 3.6-8 8v80c0 4.4 3.6 8 8 8h16c4.4 0 8-3.6 8-8v-8c0-8.8 7.2-16 16-16s16 7.2 16 16v8c0 22.1-17.9 40-40 40H200c-22.1 0-40-17.9-40-40V392c0-22.1 17.9-40 40-40zm133.1 0H368c8.8 0 16 7.2 16 16s-7.2 16-16 16H333.1c-7.2 0-13.1 5.9-13.1 13.1c0 5.2 3 9.9 7.8 12l37.4 16.6c16.3 7.2 26.8 23.4 26.8 41.2c0 24.9-20.2 45.1-45.1 45.1H304c-8.8 0-16-7.2-16-16s7.2-16 16-16h42.9c7.2 0 13.1-5.9 13.1-13.1c0-5.2-3-9.9-7.8-12l-37.4-16.6c-16.3-7.2-26.8-23.4-26.8-41.2c0-24.9 20.2-45.1 45.1-45.1zm98.9 0c8.8 0 16 7.2 16 16v31.6c0 23 5.5 45.6 16 66c10.5-20.3 16-42.9 16-66V368c0-8.8 7.2-16 16-16s16 7.2 16 16v31.6c0 34.7-10.3 68.7-29.6 97.6l-5.1 7.7c-3 4.5-8 7.1-13.3 7.1s-10.3-2.7-13.3-7.1l-5.1-7.7c-19.3-28.9-29.6-62.9-29.6-97.6V368c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-excel\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c3\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"csv\", \"document\", \"numbers\", \"spreadsheets\", \"table\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c3\",\n    \"label\": \"File Excel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM155.7 250.2L192 302.1l36.3-51.9c7.6-10.9 22.6-13.5 33.4-5.9s13.5 22.6 5.9 33.4L221.3 344l46.4 66.2c7.6 10.9 5 25.8-5.9 33.4s-25.8 5-33.4-5.9L192 385.8l-36.3 51.9c-7.6 10.9-22.6 13.5-33.4 5.9s-13.5-22.6-5.9-33.4L162.7 344l-46.4-66.2c-7.6-10.9-5-25.8 5.9-33.4s25.8-5 33.4 5.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM155.7 250.2L192 302.1l36.3-51.9c7.6-10.9 22.6-13.5 33.4-5.9s13.5 22.6 5.9 33.4L221.3 344l46.4 66.2c7.6 10.9 5 25.8-5.9 33.4s-25.8 5-33.4-5.9L192 385.8l-36.3 51.9c-7.6 10.9-22.6 13.5-33.4 5.9s-13.5-22.6-5.9-33.4L162.7 344l-46.4-66.2c-7.6-10.9-5-25.8 5.9-33.4s25.8-5 33.4 5.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M48 448V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm90.9 233.3c-8.1-10.5-23.2-12.3-33.7-4.2s-12.3 23.2-4.2 33.7L161.6 320l-44.5 57.3c-8.1 10.5-6.3 25.5 4.2 33.7s25.5 6.3 33.7-4.2L192 359.1l37.1 47.6c8.1 10.5 23.2 12.3 33.7 4.2s12.3-23.2 4.2-33.7L222.4 320l44.5-57.3c8.1-10.5 6.3-25.5-4.2-33.7s-25.5-6.3-33.7 4.2L192 280.9l-37.1-47.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M48 448V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm90.9 233.3c-8.1-10.5-23.2-12.3-33.7-4.2s-12.3 23.2-4.2 33.7L161.6 320l-44.5 57.3c-8.1 10.5-6.3 25.5 4.2 33.7s25.5 6.3 33.7-4.2L192 359.1l37.1 47.6c8.1 10.5 23.2 12.3 33.7 4.2s12.3-23.2 4.2-33.7L222.4 320l44.5-57.3c8.1-10.5 6.3-25.5-4.2-33.7s-25.5-6.3-33.7 4.2L192 280.9l-37.1-47.6z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-export\": {\n    \"aliases\": {\n      \"names\": [\"arrow-right-from-file\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f56e\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"download\", \"save\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f56e\",\n    \"label\": \"File Export\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V288H216c-13.3 0-24 10.7-24 24s10.7 24 24 24H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM384 336V288H494.1l-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39H384zm0-208H256V0L384 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V288H216c-13.3 0-24 10.7-24 24s10.7 24 24 24H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM384 336V288H494.1l-39-39c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l39-39H384zm0-208H256V0L384 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-image\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5bb\"],\n        \"secondary\": [\"10f1c5\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Document with Picture\",\n        \"document\",\n        \"image\",\n        \"jpg\",\n        \"photo\",\n        \"png\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c5\",\n    \"label\": \"File Image\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM64 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm152 32c5.3 0 10.2 2.6 13.2 6.9l88 128c3.4 4.9 3.7 11.3 1 16.5s-8.2 8.6-14.2 8.6H216 176 128 80c-5.8 0-11.1-3.1-13.9-8.1s-2.8-11.2 .2-16.1l48-80c2.9-4.8 8.1-7.8 13.7-7.8s10.8 2.9 13.7 7.8l12.8 21.4 48.3-70.2c3-4.3 7.9-6.9 13.2-6.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM64 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm152 32c5.3 0 10.2 2.6 13.2 6.9l88 128c3.4 4.9 3.7 11.3 1 16.5s-8.2 8.6-14.2 8.6H216 176 128 80c-5.8 0-11.1-3.1-13.9-8.1s-2.8-11.2 .2-16.1l48-80c2.9-4.8 8.1-7.8 13.7-7.8s10.8 2.9 13.7 7.8l12.8 21.4 48.3-70.2c3-4.3 7.9-6.9 13.2-6.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm96 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm69.2 46.9c-3-4.3-7.9-6.9-13.2-6.9s-10.2 2.6-13.2 6.9l-41.3 59.7-11.9-19.1c-2.9-4.7-8.1-7.5-13.6-7.5s-10.6 2.8-13.6 7.5l-40 64c-3.1 4.9-3.2 11.1-.4 16.2s8.2 8.2 14 8.2h48 32 40 72c6 0 11.4-3.3 14.2-8.6s2.4-11.6-1-16.5l-72-104z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm96 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm69.2 46.9c-3-4.3-7.9-6.9-13.2-6.9s-10.2 2.6-13.2 6.9l-41.3 59.7-11.9-19.1c-2.9-4.7-8.1-7.5-13.6-7.5s-10.6 2.8-13.6 7.5l-40 64c-3.1 4.9-3.2 11.1-.4 16.2s8.2 8.2 14 8.2h48 32 40 72c6 0 11.4-3.3 14.2-8.6s2.4-11.6-1-16.5l-72-104z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-import\": {\n    \"aliases\": {\n      \"names\": [\"arrow-right-to-file\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f56f\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"copy\", \"document\", \"send\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f56f\",\n    \"label\": \"File Import\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 64c0-35.3 28.7-64 64-64H352V128c0 17.7 14.3 32 32 32H512V448c0 35.3-28.7 64-64 64H192c-35.3 0-64-28.7-64-64V336H302.1l-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39H128V64zm0 224v48H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H128zM512 128H384V0L512 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 64c0-35.3 28.7-64 64-64H352V128c0 17.7 14.3 32 32 32H512V448c0 35.3-28.7 64-64 64H192c-35.3 0-64-28.7-64-64V336H302.1l-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39H128V64zm0 224v48H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H128zM512 128H384V0L512 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-invoice\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f570\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"account\", \"bill\", \"charge\", \"document\", \"payment\", \"receipt\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f570\",\n    \"label\": \"File Invoice\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM80 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 96H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm0 32v64H288V256H96zM240 416h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM80 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 96H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm0 32v64H288V256H96zM240 416h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-invoice-dollar\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f571\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"$\",\n        \"account\",\n        \"bill\",\n        \"charge\",\n        \"document\",\n        \"dollar-sign\",\n        \"money\",\n        \"payment\",\n        \"receipt\",\n        \"usd\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f571\",\n    \"label\": \"File Invoice Dollar\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM64 80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm128 72c8.8 0 16 7.2 16 16v17.3c8.5 1.2 16.7 3.1 24.1 5.1c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-11.1-3-22-5.2-32.1-5.3c-8.4-.1-17.4 1.8-23.6 5.5c-5.7 3.4-8.1 7.3-8.1 12.8c0 3.7 1.3 6.5 7.3 10.1c6.9 4.1 16.6 7.1 29.2 10.9l.5 .1 0 0 0 0c11.3 3.4 25.3 7.6 36.3 14.6c12.1 7.6 22.4 19.7 22.7 38.2c.3 19.3-9.6 33.3-22.9 41.6c-7.7 4.8-16.4 7.6-25.1 9.1V440c0 8.8-7.2 16-16 16s-16-7.2-16-16V422.2c-11.2-2.1-21.7-5.7-30.9-8.9l0 0c-2.1-.7-4.2-1.4-6.2-2.1c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c2.5 .8 4.8 1.6 7.1 2.4l0 0 0 0 0 0c13.6 4.6 24.6 8.4 36.3 8.7c9.1 .3 17.9-1.7 23.7-5.3c5.1-3.2 7.9-7.3 7.8-14c-.1-4.6-1.8-7.8-7.7-11.6c-6.8-4.3-16.5-7.4-29-11.2l-1.6-.5 0 0c-11-3.3-24.3-7.3-34.8-13.7c-12-7.2-22.6-18.9-22.7-37.3c-.1-19.4 10.8-32.8 23.8-40.5c7.5-4.4 15.8-7.2 24.1-8.7V232c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM64 80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm128 72c8.8 0 16 7.2 16 16v17.3c8.5 1.2 16.7 3.1 24.1 5.1c8.5 2.3 13.6 11 11.3 19.6s-11 13.6-19.6 11.3c-11.1-3-22-5.2-32.1-5.3c-8.4-.1-17.4 1.8-23.6 5.5c-5.7 3.4-8.1 7.3-8.1 12.8c0 3.7 1.3 6.5 7.3 10.1c6.9 4.1 16.6 7.1 29.2 10.9l.5 .1 0 0 0 0c11.3 3.4 25.3 7.6 36.3 14.6c12.1 7.6 22.4 19.7 22.7 38.2c.3 19.3-9.6 33.3-22.9 41.6c-7.7 4.8-16.4 7.6-25.1 9.1V440c0 8.8-7.2 16-16 16s-16-7.2-16-16V422.2c-11.2-2.1-21.7-5.7-30.9-8.9l0 0c-2.1-.7-4.2-1.4-6.2-2.1c-8.4-2.8-12.9-11.9-10.1-20.2s11.9-12.9 20.2-10.1c2.5 .8 4.8 1.6 7.1 2.4l0 0 0 0 0 0c13.6 4.6 24.6 8.4 36.3 8.7c9.1 .3 17.9-1.7 23.7-5.3c5.1-3.2 7.9-7.3 7.8-14c-.1-4.6-1.8-7.8-7.7-11.6c-6.8-4.3-16.5-7.4-29-11.2l-1.6-.5 0 0c-11-3.3-24.3-7.3-34.8-13.7c-12-7.2-22.6-18.9-22.7-37.3c-.1-19.4 10.8-32.8 23.8-40.5c7.5-4.4 15.8-7.2 24.1-8.7V232c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-lines\": {\n    \"aliases\": {\n      \"names\": [\"file-alt\", \"file-text\"],\n      \"unicodes\": {\n        \"composite\": [\"1f5b9\", \"1f5ce\", \"f0f6\"],\n        \"secondary\": [\"10f15c\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Document\",\n        \"Document with Text\",\n        \"document\",\n        \"file-text\",\n        \"invoice\",\n        \"new\",\n        \"page\",\n        \"pdf\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f15c\",\n    \"label\": \"File Lines\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM112 256H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM112 256H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm56 256c-13.3 0-24 10.7-24 24s10.7 24 24 24H264c13.3 0 24-10.7 24-24s-10.7-24-24-24H120zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H264c13.3 0 24-10.7 24-24s-10.7-24-24-24H120z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm56 256c-13.3 0-24 10.7-24 24s10.7 24 24 24H264c13.3 0 24-10.7 24-24s-10.7-24-24-24H120zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H264c13.3 0 24-10.7 24-24s-10.7-24-24-24H120z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f477\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"health\", \"history\", \"prescription\", \"record\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f477\",\n    \"label\": \"File Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM160 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H224v48c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V352H112c-8.8 0-16-7.2-16-16V304c0-8.8 7.2-16 16-16h48V240z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM160 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H224v48c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V352H112c-8.8 0-16-7.2-16-16V304c0-8.8 7.2-16 16-16h48V240z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-pdf\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c1\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"acrobat\", \"document\", \"preview\", \"save\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c1\",\n    \"label\": \"File Pdf\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V304H176c-35.3 0-64 28.7-64 64V512H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V304H176c-35.3 0-64 28.7-64 64V512H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 464H96v48H64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V288H336V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 464H96v48H64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V288H336V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-pen\": {\n    \"aliases\": {\n      \"names\": [\"file-edit\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4dd\"],\n        \"secondary\": [\"10f31c\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"memo\", \"pen\", \"pencil\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f31c\",\n    \"label\": \"File Pen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V285.7l-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V285.7l-86.8 86.8c-10.3 10.3-17.5 23.1-21 37.2l-18.7 74.9c-2.3 9.2-1.8 18.8 1.3 27.5H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM549.8 235.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-29.4 29.4-71-71 29.4-29.4c15.6-15.6 40.9-15.6 56.6 0zM311.9 417L441.1 287.8l71 71L382.9 487.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-powerpoint\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c4\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"display\", \"document\", \"keynote\", \"presentation\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c4\",\n    \"label\": \"File Powerpoint\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM136 240h68c42 0 76 34 76 76s-34 76-76 76H160v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V368 264c0-13.3 10.7-24 24-24zm68 104c15.5 0 28-12.5 28-28s-12.5-28-28-28H160v56h44z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM136 240h68c42 0 76 34 76 76s-34 76-76 76H160v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V368 264c0-13.3 10.7-24 24-24zm68 104c15.5 0 28-12.5 28-28s-12.5-28-28-28H160v56h44z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm72 208c-13.3 0-24 10.7-24 24V336v56c0 13.3 10.7 24 24 24s24-10.7 24-24V360h44c42 0 76-34 76-76s-34-76-76-76H136zm68 104H160V256h44c15.5 0 28 12.5 28 28s-12.5 28-28 28z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm72 208c-13.3 0-24 10.7-24 24V336v56c0 13.3 10.7 24 24 24s24-10.7 24-24V360h44c42 0 76-34 76-76s-34-76-76-76H136zm68 104H160V256h44c15.5 0 28 12.5 28 28s-12.5 28-28 28z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-prescription\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f572\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"drugs\", \"medical\", \"medicine\", \"rx\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f572\",\n    \"label\": \"File Prescription\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM104 196h72c33.1 0 60 26.9 60 60c0 25.5-15.9 47.2-38.3 55.9l43 40.3 33.8-31c8.1-7.5 20.8-6.9 28.3 1.2s6.9 20.8-1.2 28.3L270 379.7l31.7 29.7c8.1 7.6 8.5 20.2 .9 28.3s-20.2 8.5-28.3 .9l-33.9-31.8-34.9 32c-8.1 7.5-20.8 6.9-28.3-1.2s-6.9-20.8 1.2-28.3l32.6-29.9-64.8-60.8c-.9-.8-1.6-1.7-2.3-2.6H124v44c0 11-9 20-20 20s-20-9-20-20V296 216c0-11 9-20 20-20zm72 80c11 0 20-9 20-20s-9-20-20-20H124v40h52z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM104 196h72c33.1 0 60 26.9 60 60c0 25.5-15.9 47.2-38.3 55.9l43 40.3 33.8-31c8.1-7.5 20.8-6.9 28.3 1.2s6.9 20.8-1.2 28.3L270 379.7l31.7 29.7c8.1 7.6 8.5 20.2 .9 28.3s-20.2 8.5-28.3 .9l-33.9-31.8-34.9 32c-8.1 7.5-20.8 6.9-28.3-1.2s-6.9-20.8 1.2-28.3l32.6-29.9-64.8-60.8c-.9-.8-1.6-1.7-2.3-2.6H124v44c0 11-9 20-20 20s-20-9-20-20V296 216c0-11 9-20 20-20zm72 80c11 0 20-9 20-20s-9-20-20-20H124v40h52z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-shield\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"antivirus\",\n        \"data\",\n        \"document\",\n        \"protect\",\n        \"safe\",\n        \"safety\",\n        \"secure\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f0\",\n    \"label\": \"File Shield\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v47l-92.8 37.1c-21.3 8.5-35.2 29.1-35.2 52c0 56.6 18.9 148 94.2 208.3c-9 4.8-19.3 7.6-30.2 7.6H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm39.1 97.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8V461.7c68.2-33 91.5-99 95.4-149.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384v47l-92.8 37.1c-21.3 8.5-35.2 29.1-35.2 52c0 56.6 18.9 148 94.2 208.3c-9 4.8-19.3 7.6-30.2 7.6H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zm39.1 97.7c5.7-2.3 12.1-2.3 17.8 0l120 48C570 277.4 576 286.2 576 296c0 63.3-25.9 168.8-134.8 214.2c-5.9 2.5-12.6 2.5-18.5 0C313.9 464.8 288 359.3 288 296c0-9.8 6-18.6 15.1-22.3l120-48zM527.4 312L432 273.8V461.7c68.2-33 91.5-99 95.4-149.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-signature\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f573\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"John Hancock\", \"contract\", \"document\", \"name\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f573\",\n    \"label\": \"File Signature\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V428.7c-2.7 1.1-5.4 2-8.2 2.7l-60.1 15c-3 .7-6 1.2-9 1.4c-.9 .1-1.8 .2-2.7 .2H240c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 381l-9.8 32.8c-6.1 20.3-24.8 34.2-46 34.2H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h8.2c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.8 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8h8.9c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7L384 203.6V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM549.8 139.7c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM311.9 321c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L512.1 262.7l-71-71L311.9 321z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V428.7c-2.7 1.1-5.4 2-8.2 2.7l-60.1 15c-3 .7-6 1.2-9 1.4c-.9 .1-1.8 .2-2.7 .2H240c-6.1 0-11.6-3.4-14.3-8.8l-8.8-17.7c-1.7-3.4-5.1-5.5-8.8-5.5s-7.2 2.1-8.8 5.5l-8.8 17.7c-2.9 5.9-9.2 9.4-15.7 8.8s-12.1-5.1-13.9-11.3L144 381l-9.8 32.8c-6.1 20.3-24.8 34.2-46 34.2H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h8.2c7.1 0 13.3-4.6 15.3-11.4l14.9-49.5c3.4-11.3 13.8-19.1 25.6-19.1s22.2 7.8 25.6 19.1l11.6 38.6c7.4-6.2 16.8-9.7 26.8-9.7c15.9 0 30.4 9 37.5 23.2l4.4 8.8h8.9c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7L384 203.6V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM549.8 139.7c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM311.9 321c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L512.1 262.7l-71-71L311.9 321z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-video\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c8\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"m4v\", \"movie\", \"mp4\", \"play\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c8\",\n    \"label\": \"File Video\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM64 288c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V288zM300.9 397.9L256 368V304l44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3V387.7c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM64 288c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V288zM300.9 397.9L256 368V304l44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3V387.7c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM80 288c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32v16l44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3V387.7c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1L240 368v16c0 17.7-14.3 32-32 32H112c-17.7 0-32-14.3-32-32V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM80 288c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32v16l44.9-29.9c2-1.3 4.4-2.1 6.8-2.1c6.8 0 12.3 5.5 12.3 12.3V387.7c0 6.8-5.5 12.3-12.3 12.3c-2.4 0-4.8-.7-6.8-2.1L240 368v16c0 17.7-14.3 32-32 32H112c-17.7 0-32-14.3-32-32V288z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-waveform\": {\n    \"aliases\": {\n      \"names\": [\"file-medical-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f478\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"health\", \"history\", \"prescription\", \"record\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f478\",\n    \"label\": \"File Waveform\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 0C60.7 0 32 28.7 32 64V288H144c6.1 0 11.6 3.4 14.3 8.8L176 332.2l49.7-99.4c2.7-5.4 8.3-8.8 14.3-8.8s11.6 3.4 14.3 8.8L281.9 288H352c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-6.1 0-11.6-3.4-14.3-8.8L240 275.8l-49.7 99.4c-2.7 5.4-8.3 8.8-14.3 8.8s-11.6-3.4-14.3-8.8L134.1 320H32V448c0 35.3 28.7 64 64 64H352c35.3 0 64-28.7 64-64V160H288c-17.7 0-32-14.3-32-32V0H96zM288 0V128H416L288 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 0C60.7 0 32 28.7 32 64V288H144c6.1 0 11.6 3.4 14.3 8.8L176 332.2l49.7-99.4c2.7-5.4 8.3-8.8 14.3-8.8s11.6 3.4 14.3 8.8L281.9 288H352c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-6.1 0-11.6-3.4-14.3-8.8L240 275.8l-49.7 99.4c-2.7 5.4-8.3 8.8-14.3 8.8s-11.6-3.4-14.3-8.8L134.1 320H32V448c0 35.3 28.7 64 64 64H352c35.3 0 64-28.7 64-64V160H288c-17.7 0-32-14.3-32-32V0H96zM288 0V128H416L288 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"file-word\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1c2\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"edit\", \"page\", \"text\", \"writing\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c2\",\n    \"label\": \"File Word\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM111 257.1l26.8 89.2 31.6-90.3c3.4-9.6 12.5-16.1 22.7-16.1s19.3 6.4 22.7 16.1l31.6 90.3L273 257.1c3.8-12.7 17.2-19.9 29.9-16.1s19.9 17.2 16.1 29.9l-48 160c-3 10-12 16.9-22.4 17.1s-19.8-6.2-23.2-16.1L192 336.6l-33.3 95.3c-3.4 9.8-12.8 16.3-23.2 16.1s-19.5-7.1-22.4-17.1l-48-160c-3.8-12.7 3.4-26.1 16.1-29.9s26.1 3.4 29.9 16.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM111 257.1l26.8 89.2 31.6-90.3c3.4-9.6 12.5-16.1 22.7-16.1s19.3 6.4 22.7 16.1l31.6 90.3L273 257.1c3.8-12.7 17.2-19.9 29.9-16.1s19.9 17.2 16.1 29.9l-48 160c-3 10-12 16.9-22.4 17.1s-19.8-6.2-23.2-16.1L192 336.6l-33.3 95.3c-3.4 9.8-12.8 16.3-23.2 16.1s-19.5-7.1-22.4-17.1l-48-160c-3.8-12.7 3.4-26.1 16.1-29.9s26.1 3.4 29.9 16.1z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M48 448V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm55 241.1c-3.8-12.7-17.2-19.9-29.9-16.1s-19.9 17.2-16.1 29.9l48 160c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l25-83.4 25 83.4c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l48-160c3.8-12.7-3.4-26.1-16.1-29.9s-26.1 3.4-29.9 16.1l-25 83.4-25-83.4c-3-10.2-12.4-17.1-23-17.1s-19.9 7-23 17.1l-25 83.4-25-83.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M48 448V64c0-8.8 7.2-16 16-16H224v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm55 241.1c-3.8-12.7-17.2-19.9-29.9-16.1s-19.9 17.2-16.1 29.9l48 160c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l25-83.4 25 83.4c3 10.2 12.4 17.1 23 17.1s19.9-7 23-17.1l48-160c3.8-12.7-3.4-26.1-16.1-29.9s-26.1 3.4-29.9 16.1l-25 83.4-25-83.4c-3-10.2-12.4-17.1-23-17.1s-19.9 7-23 17.1l-25 83.4-25-83.4z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"file-zipper\": {\n    \"aliases\": {\n      \"names\": [\"file-archive\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1c6\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\".zip\", \"bundle\", \"compress\", \"compression\", \"download\", \"zip\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1c6\",\n    \"label\": \"File Zipper\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16h48v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm48 112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H128c-8.8 0-16 7.2-16 16zm0 64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H128c-8.8 0-16 7.2-16 16zm-6.3 71.8L82.1 335.9c-1.4 5.4-2.1 10.9-2.1 16.4c0 35.2 28.8 63.7 64 63.7s64-28.5 64-63.7c0-5.5-.7-11.1-2.1-16.4l-23.5-88.2c-3.7-14-16.4-23.8-30.9-23.8H136.6c-14.5 0-27.2 9.7-30.9 23.8zM128 336h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H128c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 464c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16h48v80c0 17.7 14.3 32 32 32h80V448c0 8.8-7.2 16-16 16H64zM64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V154.5c0-17-6.7-33.3-18.7-45.3L274.7 18.7C262.7 6.7 246.5 0 229.5 0H64zm48 112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H128c-8.8 0-16 7.2-16 16zm0 64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H128c-8.8 0-16 7.2-16 16zm-6.3 71.8L82.1 335.9c-1.4 5.4-2.1 10.9-2.1 16.4c0 35.2 28.8 63.7 64 63.7s64-28.5 64-63.7c0-5.5-.7-11.1-2.1-16.4l-23.5-88.2c-3.7-14-16.4-23.8-30.9-23.8H136.6c-14.5 0-27.2 9.7-30.9 23.8zM128 336h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H128c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"fill\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f575\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bucket\", \"color\", \"paint\", \"paint bucket\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f575\",\n    \"label\": \"Fill\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M86.6 9.4C74.1-3.1 53.9-3.1 41.4 9.4s-12.5 32.8 0 45.3L122.7 136 30.6 228.1c-37.5 37.5-37.5 98.3 0 135.8L148.1 481.4c37.5 37.5 98.3 37.5 135.8 0L474.3 290.9c28.1-28.1 28.1-73.7 0-101.8L322.9 37.7c-28.1-28.1-73.7-28.1-101.8 0L168 90.7 86.6 9.4zM168 181.3l49.4 49.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L213.3 136l53.1-53.1c3.1-3.1 8.2-3.1 11.3 0L429.1 234.3c3.1 3.1 3.1 8.2 0 11.3L386.7 288H67.5c1.4-5.4 4.2-10.4 8.4-14.6L168 181.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M86.6 9.4C74.1-3.1 53.9-3.1 41.4 9.4s-12.5 32.8 0 45.3L122.7 136 30.6 228.1c-37.5 37.5-37.5 98.3 0 135.8L148.1 481.4c37.5 37.5 98.3 37.5 135.8 0L474.3 290.9c28.1-28.1 28.1-73.7 0-101.8L322.9 37.7c-28.1-28.1-73.7-28.1-101.8 0L168 90.7 86.6 9.4zM168 181.3l49.4 49.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L213.3 136l53.1-53.1c3.1-3.1 8.2-3.1 11.3 0L429.1 234.3c3.1 3.1 3.1 8.2 0 11.3L386.7 288H67.5c1.4-5.4 4.2-10.4 8.4-14.6L168 181.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fill-drip\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f576\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bucket\", \"color\", \"drop\", \"paint\", \"paint bucket\", \"spill\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f576\",\n    \"label\": \"Fill Drip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M41.4 9.4C53.9-3.1 74.1-3.1 86.6 9.4L168 90.7l53.1-53.1c28.1-28.1 73.7-28.1 101.8 0L474.3 189.1c28.1 28.1 28.1 73.7 0 101.8L283.9 481.4c-37.5 37.5-98.3 37.5-135.8 0L30.6 363.9c-37.5-37.5-37.5-98.3 0-135.8L122.7 136 41.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm176 221.3L168 181.3 75.9 273.4c-4.2 4.2-7 9.3-8.4 14.6H386.7l42.3-42.3c3.1-3.1 3.1-8.2 0-11.3L277.7 82.9c-3.1-3.1-8.2-3.1-11.3 0L213.3 136l49.4 49.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0zM512 512c-35.3 0-64-28.7-64-64c0-25.2 32.6-79.6 51.2-108.7c6-9.4 19.5-9.4 25.5 0C543.4 368.4 576 422.8 576 448c0 35.3-28.7 64-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M41.4 9.4C53.9-3.1 74.1-3.1 86.6 9.4L168 90.7l53.1-53.1c28.1-28.1 73.7-28.1 101.8 0L474.3 189.1c28.1 28.1 28.1 73.7 0 101.8L283.9 481.4c-37.5 37.5-98.3 37.5-135.8 0L30.6 363.9c-37.5-37.5-37.5-98.3 0-135.8L122.7 136 41.4 54.6c-12.5-12.5-12.5-32.8 0-45.3zm176 221.3L168 181.3 75.9 273.4c-4.2 4.2-7 9.3-8.4 14.6H386.7l42.3-42.3c3.1-3.1 3.1-8.2 0-11.3L277.7 82.9c-3.1-3.1-8.2-3.1-11.3 0L213.3 136l49.4 49.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0zM512 512c-35.3 0-64-28.7-64-64c0-25.2 32.6-79.6 51.2-108.7c6-9.4 19.5-9.4 25.5 0C543.4 368.4 576 422.8 576 448c0 35.3-28.7 64-64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"film\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f39e\"],\n        \"secondary\": [\"10f008\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cinema\",\n        \"film\",\n        \"film frames\",\n        \"frames\",\n        \"movie\",\n        \"strip\",\n        \"video\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f008\",\n    \"label\": \"Film\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM48 368v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H416zM48 240v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H416zM48 112v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H416zM160 128v64c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32H192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM48 368v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H416zM48 240v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zm368-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H416zM48 112v32c0 8.8 7.2 16 16 16H96c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zM416 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H416zM160 128v64c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32zm32 160c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32H192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"filter\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0b0\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"funnel\", \"options\", \"separate\", \"sort\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0b0\",\n    \"label\": \"Filter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M3.9 54.9C10.5 40.9 24.5 32 40 32H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L320 320.9V448c0 12.1-6.8 23.2-17.7 28.6s-23.8 4.3-33.5-3l-64-48c-8.1-6-12.8-15.5-12.8-25.6V320.9L9 97.3C-.7 85.4-2.8 68.8 3.9 54.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"filter-circle-dollar\": {\n    \"aliases\": {\n      \"names\": [\"funnel-dollar\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f662\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"filter\", \"money\", \"options\", \"separate\", \"sort\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f662\",\n    \"label\": \"Filter Circle Dollar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M3.9 22.9C10.5 8.9 24.5 0 40 0H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6V288.9L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm120.8-32.6c.6-.9 1.8-2.1 4.2-3.4c5.1-2.7 12.5-4.1 18.7-4c8.2 .1 17.1 1.8 26.4 4.1c8.6 2.1 17.3-3.1 19.4-11.7s-3.1-17.3-11.7-19.4c-5.6-1.4-11.6-2.7-17.9-3.7V288c0-8.8-7.2-16-16-16s-16 7.2-16 16v9.5c-6.1 1.2-12.3 3.2-18 6.3c-11.8 6.3-23 18.4-21.8 37.2c1 16 11.7 25.3 21.6 30.7c8.8 4.7 19.7 7.8 28.6 10.3l1.8 .5c10.3 2.9 17.9 5.2 23.2 8.3c4.5 2.7 4.7 4.2 4.7 5.6c.1 2.4-.5 3.7-1 4.5c-.6 1-1.8 2.2-4 3.3c-4.7 2.5-11.8 3.8-18.5 3.6c-9.5-.3-18.5-3.1-29.9-6.8c-1.9-.6-3.8-1.2-5.8-1.8c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20c1.6 .5 3.3 1 5 1.6l0 0 0 0c7 2.3 15.1 4.8 23.7 6.6v11.4c0 8.8 7.2 16 16 16s16-7.2 16-16V438.7c6.2-1.1 12.5-3.1 18.3-6.2c12.1-6.5 22.3-18.7 21.7-36.9c-.5-16.2-10.3-26.3-20.5-32.3c-9.4-5.6-21.2-8.9-30.5-11.5l-.2 0c-10.4-2.9-18.3-5.2-23.9-8.2c-4.8-2.6-4.8-4-4.8-4.5l0-.1c-.1-1.9 .3-2.9 .8-3.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M3.9 22.9C10.5 8.9 24.5 0 40 0H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6V288.9L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM288 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm120.8-32.6c.6-.9 1.8-2.1 4.2-3.4c5.1-2.7 12.5-4.1 18.7-4c8.2 .1 17.1 1.8 26.4 4.1c8.6 2.1 17.3-3.1 19.4-11.7s-3.1-17.3-11.7-19.4c-5.6-1.4-11.6-2.7-17.9-3.7V288c0-8.8-7.2-16-16-16s-16 7.2-16 16v9.5c-6.1 1.2-12.3 3.2-18 6.3c-11.8 6.3-23 18.4-21.8 37.2c1 16 11.7 25.3 21.6 30.7c8.8 4.7 19.7 7.8 28.6 10.3l1.8 .5c10.3 2.9 17.9 5.2 23.2 8.3c4.5 2.7 4.7 4.2 4.7 5.6c.1 2.4-.5 3.7-1 4.5c-.6 1-1.8 2.2-4 3.3c-4.7 2.5-11.8 3.8-18.5 3.6c-9.5-.3-18.5-3.1-29.9-6.8c-1.9-.6-3.8-1.2-5.8-1.8c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20c1.6 .5 3.3 1 5 1.6l0 0 0 0c7 2.3 15.1 4.8 23.7 6.6v11.4c0 8.8 7.2 16 16 16s16-7.2 16-16V438.7c6.2-1.1 12.5-3.1 18.3-6.2c12.1-6.5 22.3-18.7 21.7-36.9c-.5-16.2-10.3-26.3-20.5-32.3c-9.4-5.6-21.2-8.9-30.5-11.5l-.2 0c-10.4-2.9-18.3-5.2-23.9-8.2c-4.8-2.6-4.8-4-4.8-4.5l0-.1c-.1-1.9 .3-2.9 .8-3.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"filter-circle-xmark\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cancel\", \"funnel\", \"options\", \"remove\", \"separate\", \"sort\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e17b\",\n    \"label\": \"Filter Circle Xmark\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M3.9 22.9C10.5 8.9 24.5 0 40 0H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6V288.9L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M3.9 22.9C10.5 8.9 24.5 0 40 0H472c15.5 0 29.5 8.9 36.1 22.9s4.6 30.5-5.2 42.5L396.4 195.6C316.2 212.1 256 283 256 368c0 27.4 6.3 53.4 17.5 76.5c-1.6-.8-3.2-1.8-4.7-2.9l-64-48c-8.1-6-12.8-15.5-12.8-25.6V288.9L9 65.3C-.7 53.4-2.8 36.8 3.9 22.9zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fingerprint\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f577\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"human\",\n        \"id\",\n        \"identification\",\n        \"lock\",\n        \"smudge\",\n        \"touch\",\n        \"unique\",\n        \"unlock\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f577\",\n    \"label\": \"Fingerprint\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128v24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7V256c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256v24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8V256c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96v24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7V256c0-28.7 23.3-52 52-52s52 23.3 52 52v24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1V256c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24v24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9V256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M48 256C48 141.1 141.1 48 256 48c63.1 0 119.6 28.1 157.8 72.5c8.6 10.1 23.8 11.2 33.8 2.6s11.2-23.8 2.6-33.8C403.3 34.6 333.7 0 256 0C114.6 0 0 114.6 0 256v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256zm458.5-52.9c-2.7-13-15.5-21.3-28.4-18.5s-21.3 15.5-18.5 28.4c2.9 13.9 4.5 28.3 4.5 43.1v40c0 13.3 10.7 24 24 24s24-10.7 24-24V256c0-18.1-1.9-35.8-5.5-52.9zM256 80c-19 0-37.4 3-54.5 8.6c-15.2 5-18.7 23.7-8.3 35.9c7.1 8.3 18.8 10.8 29.4 7.9c10.6-2.9 21.8-4.4 33.4-4.4c70.7 0 128 57.3 128 128v24.9c0 25.2-1.5 50.3-4.4 75.3c-1.7 14.6 9.4 27.8 24.2 27.8c11.8 0 21.9-8.6 23.3-20.3c3.3-27.4 5-55 5-82.7V256c0-97.2-78.8-176-176-176zM150.7 148.7c-9.1-10.6-25.3-11.4-33.9-.4C93.7 178 80 215.4 80 256v24.9c0 24.2-2.6 48.4-7.8 71.9C68.8 368.4 80.1 384 96.1 384c10.5 0 19.9-7 22.2-17.3c6.4-28.1 9.7-56.8 9.7-85.8V256c0-27.2 8.5-52.4 22.9-73.1c7.2-10.4 8-24.6-.2-34.2zM256 160c-53 0-96 43-96 96v24.9c0 35.9-4.6 71.5-13.8 106.1c-3.8 14.3 6.7 29 21.5 29c9.5 0 17.9-6.2 20.4-15.4c10.5-39 15.9-79.2 15.9-119.7V256c0-28.7 23.3-52 52-52s52 23.3 52 52v24.9c0 36.3-3.5 72.4-10.4 107.9c-2.7 13.9 7.7 27.2 21.8 27.2c10.2 0 19-7 21-17c7.7-38.8 11.6-78.3 11.6-118.1V256c0-53-43-96-96-96zm24 96c0-13.3-10.7-24-24-24s-24 10.7-24 24v24.9c0 59.9-11 119.3-32.5 175.2l-5.9 15.3c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8l5.9-15.3C267.9 411.9 280 346.7 280 280.9V256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fire\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f525\"],\n        \"secondary\": [\"10f06d\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.6.0\",\n      \"5.6.3\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"burn\",\n        \"caliente\",\n        \"fire\",\n        \"flame\",\n        \"heat\",\n        \"hot\",\n        \"popular\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f06d\",\n    \"label\": \"Fire\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-4.5-9-16-9.6-22.5-2l-25.2 29.3c-6.6 7.6-18.5 7.4-24.7-.5c-16.5-21-46-58.5-62.8-79.8c-6.3-8-18.3-8.1-24.7-.1c-33.8 42.5-50.8 69.3-50.8 99.4C112 375.4 162.6 416 225.7 416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-4.5-9-16-9.6-22.5-2l-25.2 29.3c-6.6 7.6-18.5 7.4-24.7-.5c-16.5-21-46-58.5-62.8-79.8c-6.3-8-18.3-8.1-24.7-.1c-33.8 42.5-50.8 69.3-50.8 99.4C112 375.4 162.6 416 225.7 416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fire-burner\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cook\", \"fire\", \"flame\", \"kitchen\", \"stove\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f1\",\n    \"label\": \"Fire Burner\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M293.5 3.8c19.7 17.8 38.2 37 55.5 57.7c7.9-9.9 16.8-20.7 26.5-29.5c5.6-5.1 14.4-5.1 20 0c24.7 22.7 45.6 52.7 60.4 81.1c14.5 28 24.2 58.8 24.2 79C480 280 408.7 352 320 352c-89.7 0-160-72.1-160-159.8c0-26.4 12.7-60.7 32.4-92.6c20-32.4 48.1-66.1 81.4-95.8c2.8-2.5 6.4-3.8 10-3.7c3.5 0 7 1.3 9.8 3.8zM370 273c30-21 38-63 20-96c-2-4-4-8-7-12l-36 42s-58-74-62-79c-30 37-45 58-45 82c0 49 36 78 81 78c18 0 34-5 49-15zM32 288c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32s-14.3 32-32 32v64H544V320c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32v96c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32V288zM320 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm160-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM192 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M293.5 3.8c19.7 17.8 38.2 37 55.5 57.7c7.9-9.9 16.8-20.7 26.5-29.5c5.6-5.1 14.4-5.1 20 0c24.7 22.7 45.6 52.7 60.4 81.1c14.5 28 24.2 58.8 24.2 79C480 280 408.7 352 320 352c-89.7 0-160-72.1-160-159.8c0-26.4 12.7-60.7 32.4-92.6c20-32.4 48.1-66.1 81.4-95.8c2.8-2.5 6.4-3.8 10-3.7c3.5 0 7 1.3 9.8 3.8zM370 273c30-21 38-63 20-96c-2-4-4-8-7-12l-36 42s-58-74-62-79c-30 37-45 58-45 82c0 49 36 78 81 78c18 0 34-5 49-15zM32 288c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32s-14.3 32-32 32v64H544V320c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32v96c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32V288zM320 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm160-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM192 480a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fire-extinguisher\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9ef\"],\n        \"secondary\": [\"10f134\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"burn\",\n        \"caliente\",\n        \"extinguish\",\n        \"fire\",\n        \"fire extinguisher\",\n        \"fire fighter\",\n        \"flame\",\n        \"heat\",\n        \"hot\",\n        \"quench\",\n        \"rescue\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f134\",\n    \"label\": \"Fire Extinguisher\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M500.3 7.3C507.7 13.3 512 22.4 512 32v96c0 9.6-4.3 18.7-11.7 24.7s-17.2 8.5-26.6 6.6l-160-32C301.5 124.9 292 115.7 289 104H224v34.8c37.8 18 64 56.5 64 101.2V384H64V240c0-44.7 26.2-83.2 64-101.2V110c-36.2 11.1-66 36.9-82.3 70.5c-5.8 11.9-20.2 16.9-32.1 11.1S-3.3 171.4 2.5 159.5C26.7 109.8 72.7 72.6 128 60.4V32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V56h65c3-11.7 12.5-20.9 24.7-23.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM288 416v32c0 35.3-28.7 64-64 64H128c-35.3 0-64-28.7-64-64V416H288zM176 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M500.3 7.3C507.7 13.3 512 22.4 512 32v96c0 9.6-4.3 18.7-11.7 24.7s-17.2 8.5-26.6 6.6l-160-32C301.5 124.9 292 115.7 289 104H224v34.8c37.8 18 64 56.5 64 101.2V384H64V240c0-44.7 26.2-83.2 64-101.2V110c-36.2 11.1-66 36.9-82.3 70.5c-5.8 11.9-20.2 16.9-32.1 11.1S-3.3 171.4 2.5 159.5C26.7 109.8 72.7 72.6 128 60.4V32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V56h65c3-11.7 12.5-20.9 24.7-23.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM288 416v32c0 35.3-28.7 64-64 64H128c-35.3 0-64-28.7-64-64V416H288zM176 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fire-flame-curved\": {\n    \"aliases\": {\n      \"names\": [\"fire-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7e4\"]\n      }\n    },\n    \"changes\": [\"5.6.3\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"burn\", \"caliente\", \"flame\", \"heat\", \"hot\", \"popular\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7e4\",\n    \"label\": \"Fire Flame Curved\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M153.6 29.9l16-21.3C173.6 3.2 180 0 186.7 0C198.4 0 208 9.6 208 21.3V43.5c0 13.1 5.4 25.7 14.9 34.7L307.6 159C356.4 205.6 384 270.2 384 337.7C384 434 306 512 209.7 512H192C86 512 0 426 0 320v-3.8c0-48.8 19.4-95.6 53.9-130.1l3.5-3.5c4.2-4.2 10-6.6 16-6.6C85.9 176 96 186.1 96 198.6V288c0 35.3 28.7 64 64 64s64-28.7 64-64v-3.9c0-18-7.2-35.3-19.9-48l-38.6-38.6c-24-24-37.5-56.7-37.5-90.7c0-27.7 9-54.8 25.6-76.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M153.6 29.9l16-21.3C173.6 3.2 180 0 186.7 0C198.4 0 208 9.6 208 21.3V43.5c0 13.1 5.4 25.7 14.9 34.7L307.6 159C356.4 205.6 384 270.2 384 337.7C384 434 306 512 209.7 512H192C86 512 0 426 0 320v-3.8c0-48.8 19.4-95.6 53.9-130.1l3.5-3.5c4.2-4.2 10-6.6 16-6.6C85.9 176 96 186.1 96 198.6V288c0 35.3 28.7 64 64 64s64-28.7 64-64v-3.9c0-18-7.2-35.3-19.9-48l-38.6-38.6c-24-24-37.5-56.7-37.5-90.7c0-27.7 9-54.8 25.6-76.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fire-flame-simple\": {\n    \"aliases\": {\n      \"names\": [\"burn\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f46a\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"caliente\", \"energy\", \"fire\", \"flame\", \"gas\", \"heat\", \"hot\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f46a\",\n    \"label\": \"Fire Flame Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M372.5 256.5l-.7-1.9C337.8 160.8 282 76.5 209.1 8.5l-3.3-3C202.1 2 197.1 0 192 0s-10.1 2-13.8 5.5l-3.3 3C102 76.5 46.2 160.8 12.2 254.6l-.7 1.9C3.9 277.3 0 299.4 0 321.6C0 426.7 86.8 512 192 512s192-85.3 192-190.4c0-22.2-3.9-44.2-11.5-65.1zm-90.8 49.5c4.1 9.3 6.2 19.4 6.2 29.5c0 53-43 96.5-96 96.5s-96-43.5-96-96.5c0-10.1 2.1-20.3 6.2-29.5l1.9-4.3c15.8-35.4 37.9-67.7 65.3-95.1l8.9-8.9c3.6-3.6 8.5-5.6 13.6-5.6s10 2 13.6 5.6l8.9 8.9c27.4 27.4 49.6 59.7 65.3 95.1l1.9 4.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M372.5 256.5l-.7-1.9C337.8 160.8 282 76.5 209.1 8.5l-3.3-3C202.1 2 197.1 0 192 0s-10.1 2-13.8 5.5l-3.3 3C102 76.5 46.2 160.8 12.2 254.6l-.7 1.9C3.9 277.3 0 299.4 0 321.6C0 426.7 86.8 512 192 512s192-85.3 192-190.4c0-22.2-3.9-44.2-11.5-65.1zm-90.8 49.5c4.1 9.3 6.2 19.4 6.2 29.5c0 53-43 96.5-96 96.5s-96-43.5-96-96.5c0-10.1 2.1-20.3 6.2-29.5l1.9-4.3c15.8-35.4 37.9-67.7 65.3-95.1l8.9-8.9c3.6-3.6 8.5-5.6 13.6-5.6s10 2 13.6 5.6l8.9 8.9c27.4 27.4 49.6 59.7 65.3 95.1l1.9 4.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"firefox\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"5.0.1\", \"5.12.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f269\",\n    \"label\": \"Firefox\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M503.52,241.48c-.12-1.56-.24-3.12-.24-4.68v-.12l-.36-4.68v-.12a245.86,245.86,0,0,0-7.32-41.15c0-.12,0-.12-.12-.24l-1.08-4c-.12-.24-.12-.48-.24-.6-.36-1.2-.72-2.52-1.08-3.72-.12-.24-.12-.6-.24-.84-.36-1.2-.72-2.4-1.08-3.48-.12-.36-.24-.6-.36-1-.36-1.2-.72-2.28-1.2-3.48l-.36-1.08c-.36-1.08-.84-2.28-1.2-3.36a8.27,8.27,0,0,0-.36-1c-.48-1.08-.84-2.28-1.32-3.36-.12-.24-.24-.6-.36-.84-.48-1.2-1-2.28-1.44-3.48,0-.12-.12-.24-.12-.36-1.56-3.84-3.24-7.68-5-11.4l-.36-.72c-.48-1-.84-1.8-1.32-2.64-.24-.48-.48-1.08-.72-1.56-.36-.84-.84-1.56-1.2-2.4-.36-.6-.6-1.2-1-1.8s-.84-1.44-1.2-2.28c-.36-.6-.72-1.32-1.08-1.92s-.84-1.44-1.2-2.16a18.07,18.07,0,0,0-1.2-2c-.36-.72-.84-1.32-1.2-2s-.84-1.32-1.2-2-.84-1.32-1.2-1.92-.84-1.44-1.32-2.16a15.63,15.63,0,0,0-1.2-1.8L463.2,119a15.63,15.63,0,0,0-1.2-1.8c-.48-.72-1.08-1.56-1.56-2.28-.36-.48-.72-1.08-1.08-1.56l-1.8-2.52c-.36-.48-.6-.84-1-1.32-1-1.32-1.8-2.52-2.76-3.72a248.76,248.76,0,0,0-23.51-26.64A186.82,186.82,0,0,0,412,62.46c-4-3.48-8.16-6.72-12.48-9.84a162.49,162.49,0,0,0-24.6-15.12c-2.4-1.32-4.8-2.52-7.2-3.72a254,254,0,0,0-55.43-19.56c-1.92-.36-3.84-.84-5.64-1.2h-.12c-1-.12-1.8-.36-2.76-.48a236.35,236.35,0,0,0-38-4H255.14a234.62,234.62,0,0,0-45.48,5c-33.59,7.08-63.23,21.24-82.91,39-1.08,1-1.92,1.68-2.4,2.16l-.48.48H124l-.12.12.12-.12a.12.12,0,0,0,.12-.12l-.12.12a.42.42,0,0,1,.24-.12c14.64-8.76,34.92-16,49.44-19.56l5.88-1.44c.36-.12.84-.12,1.2-.24,1.68-.36,3.36-.72,5.16-1.08.24,0,.6-.12.84-.12C250.94,20.94,319.34,40.14,367,85.61a171.49,171.49,0,0,1,26.88,32.76c30.36,49.2,27.48,111.11,3.84,147.59-34.44,53-111.35,71.27-159,24.84a84.19,84.19,0,0,1-25.56-59,74.05,74.05,0,0,1,6.24-31c1.68-3.84,13.08-25.67,18.24-24.59-13.08-2.76-37.55,2.64-54.71,28.19-15.36,22.92-14.52,58.2-5,83.28a132.85,132.85,0,0,1-12.12-39.24c-12.24-82.55,43.31-153,94.31-170.51-27.48-24-96.47-22.31-147.71,15.36-29.88,22-51.23,53.16-62.51,90.36,1.68-20.88,9.6-52.08,25.8-83.88-17.16,8.88-39,37-49.8,62.88-15.6,37.43-21,82.19-16.08,124.79.36,3.24.72,6.36,1.08,9.6,19.92,117.11,122,206.38,244.78,206.38C392.77,503.42,504,392.19,504,255,503.88,250.48,503.76,245.92,503.52,241.48Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"firefox-browser\": {\n    \"changes\": [\"5.12.0\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e007\",\n    \"label\": \"Firefox Browser\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M130.22 127.548C130.38 127.558 130.3 127.558 130.22 127.548V127.548ZM481.64 172.898C471.03 147.398 449.56 119.898 432.7 111.168C446.42 138.058 454.37 165.048 457.4 185.168C457.405 185.306 457.422 185.443 457.45 185.578C429.87 116.828 383.098 89.1089 344.9 28.7479C329.908 5.05792 333.976 3.51792 331.82 4.08792L331.7 4.15792C284.99 30.1109 256.365 82.5289 249.12 126.898C232.503 127.771 216.219 131.895 201.19 139.035C199.838 139.649 198.736 140.706 198.066 142.031C197.396 143.356 197.199 144.87 197.506 146.323C197.7 147.162 198.068 147.951 198.586 148.639C199.103 149.327 199.76 149.899 200.512 150.318C201.264 150.737 202.096 150.993 202.954 151.071C203.811 151.148 204.676 151.045 205.491 150.768L206.011 150.558C221.511 143.255 238.408 139.393 255.541 139.238C318.369 138.669 352.698 183.262 363.161 201.528C350.161 192.378 326.811 183.338 304.341 187.248C392.081 231.108 368.541 381.784 246.951 376.448C187.487 373.838 149.881 325.467 146.421 285.648C146.421 285.648 157.671 243.698 227.041 243.698C234.541 243.698 255.971 222.778 256.371 216.698C256.281 214.698 213.836 197.822 197.281 181.518C188.434 172.805 184.229 168.611 180.511 165.458C178.499 163.75 176.392 162.158 174.201 160.688C168.638 141.231 168.399 120.638 173.51 101.058C148.45 112.468 128.96 130.508 114.8 146.428H114.68C105.01 134.178 105.68 93.7779 106.25 85.3479C106.13 84.8179 99.022 89.0159 98.1 89.6579C89.5342 95.7103 81.5528 102.55 74.26 110.088C57.969 126.688 30.128 160.242 18.76 211.318C14.224 231.701 12 255.739 12 263.618C12 398.318 121.21 507.508 255.92 507.508C376.56 507.508 478.939 420.281 496.35 304.888C507.922 228.192 481.64 173.82 481.64 172.898Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M130.22 127.548C130.38 127.558 130.3 127.558 130.22 127.548V127.548ZM481.64 172.898C471.03 147.398 449.56 119.898 432.7 111.168C446.42 138.058 454.37 165.048 457.4 185.168C457.405 185.306 457.422 185.443 457.45 185.578C429.87 116.828 383.098 89.1089 344.9 28.7479C329.908 5.05792 333.976 3.51792 331.82 4.08792L331.7 4.15792C284.99 30.1109 256.365 82.5289 249.12 126.898C232.503 127.771 216.219 131.895 201.19 139.035C199.838 139.649 198.736 140.706 198.066 142.031C197.396 143.356 197.199 144.87 197.506 146.323C197.7 147.162 198.068 147.951 198.586 148.639C199.103 149.327 199.76 149.899 200.512 150.318C201.264 150.737 202.096 150.993 202.954 151.071C203.811 151.148 204.676 151.045 205.491 150.768L206.011 150.558C221.511 143.255 238.408 139.393 255.541 139.238C318.369 138.669 352.698 183.262 363.161 201.528C350.161 192.378 326.811 183.338 304.341 187.248C392.081 231.108 368.541 381.784 246.951 376.448C187.487 373.838 149.881 325.467 146.421 285.648C146.421 285.648 157.671 243.698 227.041 243.698C234.541 243.698 255.971 222.778 256.371 216.698C256.281 214.698 213.836 197.822 197.281 181.518C188.434 172.805 184.229 168.611 180.511 165.458C178.499 163.75 176.392 162.158 174.201 160.688C168.638 141.231 168.399 120.638 173.51 101.058C148.45 112.468 128.96 130.508 114.8 146.428H114.68C105.01 134.178 105.68 93.7779 106.25 85.3479C106.13 84.8179 99.022 89.0159 98.1 89.6579C89.5342 95.7103 81.5528 102.55 74.26 110.088C57.969 126.688 30.128 160.242 18.76 211.318C14.224 231.701 12 255.739 12 263.618C12 398.318 121.21 507.508 255.92 507.508C376.56 507.508 478.939 420.281 496.35 304.888C507.922 228.192 481.64 173.82 481.64 172.898Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"first-order\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2b0\",\n    \"label\": \"First Order\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"first-order-alt\": {\n    \"changes\": [\"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f50a\",\n    \"label\": \"Alternate First Order\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"firstdraft\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a1\",\n    \"label\": \"firstdraft\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"fish\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f41f\"],\n        \"secondary\": [\"10f578\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Pisces\",\n        \"fauna\",\n        \"fish\",\n        \"gold\",\n        \"seafood\",\n        \"swimming\",\n        \"zodiac\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f578\",\n    \"label\": \"Fish\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M180.5 141.5C219.7 108.5 272.6 80 336 80s116.3 28.5 155.5 61.5c39.1 33 66.9 72.4 81 99.8c4.7 9.2 4.7 20.1 0 29.3c-14.1 27.4-41.9 66.8-81 99.8C452.3 403.5 399.4 432 336 432s-116.3-28.5-155.5-61.5c-16.2-13.7-30.5-28.5-42.7-43.1L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l89.7 52.3c12.2-14.6 26.5-29.4 42.7-43.1zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M180.5 141.5C219.7 108.5 272.6 80 336 80s116.3 28.5 155.5 61.5c39.1 33 66.9 72.4 81 99.8c4.7 9.2 4.7 20.1 0 29.3c-14.1 27.4-41.9 66.8-81 99.8C452.3 403.5 399.4 432 336 432s-116.3-28.5-155.5-61.5c-16.2-13.7-30.5-28.5-42.7-43.1L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l89.7 52.3c12.2-14.6 26.5-29.4 42.7-43.1zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fish-fins\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"fish\", \"fishery\", \"pisces\", \"seafood\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f2\",\n    \"label\": \"Fish Fins\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5c-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.7 4.9S-3 163.3 4.2 175.9L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.7 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3c15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8c39.2-29.4 67.2-64.7 81.6-89.5c5.8-9.9 5.8-22.2 0-32.1c-14.4-24.8-42.5-60.1-81.6-89.5c-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M275.2 38.4c-10.6-8-25-8.5-36.3-1.5S222 57.3 224.6 70.3l9.7 48.6c-19.4 9-36.9 19.9-52.4 31.5c-15.3 11.5-29 23.9-40.7 36.3L48.1 132.4c-12.5-7.3-28.4-5.3-38.7 4.9S-3 163.3 4.2 175.9L50 256 4.2 336.1c-7.2 12.6-5 28.4 5.3 38.6s26.1 12.2 38.7 4.9l93.1-54.3c11.8 12.3 25.4 24.8 40.7 36.3c15.5 11.6 33 22.5 52.4 31.5l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c54.9-4 101.5-27 137.2-53.8c39.2-29.4 67.2-64.7 81.6-89.5c5.8-9.9 5.8-22.2 0-32.1c-14.4-24.8-42.5-60.1-81.6-89.5c-35.8-26.8-82.3-49.8-137.2-53.8L275.2 38.4zM384 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"flag\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3f4\", \"f11d\"],\n        \"secondary\": [\"10f024\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"black flag\",\n        \"country\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"pole\",\n        \"report\",\n        \"symbol\",\n        \"waving\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f024\",\n    \"label\": \"Flag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 368 480c0 17.7 14.3 32 32 32s32-14.3 32-32V352l64.3-16.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30V66.1c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L64 48V32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32V64 368 480c0 17.7 14.3 32 32 32s32-14.3 32-32V352l64.3-16.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30V66.1c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L64 48V32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M48 24C48 10.7 37.3 0 24 0S0 10.7 0 24V64 350.5 400v88c0 13.3 10.7 24 24 24s24-10.7 24-24V388l80.3-20.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30V66.1c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L48 52V24zm0 77.5l96.6-24.2c27-6.7 55.5-3.6 80.4 8.8c54.9 27.4 118.7 29.7 175 6.8V334.7l-24.4 9.1c-33.7 12.6-71.2 10.7-103.4-5.4c-48.2-24.1-103.3-30.1-155.6-17.1L48 338.5v-237z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M48 24C48 10.7 37.3 0 24 0S0 10.7 0 24V64 350.5 400v88c0 13.3 10.7 24 24 24s24-10.7 24-24V388l80.3-20.1c41.1-10.3 84.6-5.5 122.5 13.4c44.2 22.1 95.5 24.8 141.7 7.4l34.7-13c12.5-4.7 20.8-16.6 20.8-30V66.1c0-23-24.2-38-44.8-27.7l-9.6 4.8c-46.3 23.2-100.8 23.2-147.1 0c-35.1-17.6-75.4-22-113.5-12.5L48 52V24zm0 77.5l96.6-24.2c27-6.7 55.5-3.6 80.4 8.8c54.9 27.4 118.7 29.7 175 6.8V334.7l-24.4 9.1c-33.7 12.6-71.2 10.7-103.4-5.4c-48.2-24.1-103.3-30.1-155.6-17.1L48 338.5v-237z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"flag-checkered\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3c1\"],\n        \"secondary\": [\"10f11e\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checkered\",\n        \"chequered\",\n        \"chequered flag\",\n        \"finish\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"pole\",\n        \"racing\",\n        \"report\",\n        \"start\",\n        \"symbol\",\n        \"win\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f11e\",\n    \"label\": \"Flag Checkered\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 0C49.7 0 64 14.3 64 32V48l69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1V345.8c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 384v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V400 334 64 32C0 14.3 14.3 0 32 0zM64 187.1l64-13.9v65.5L64 252.6V318l48.8-12.2c5.1-1.3 10.1-2.4 15.2-3.3V238.7l38.9-8.4c8.3-1.8 16.7-2.5 25.1-2.1l0-64c13.6 .4 27.2 2.6 40.4 6.4l23.6 6.9v66.7l-41.7-12.3c-7.3-2.1-14.8-3.4-22.3-3.8v71.4c21.8 1.9 43.3 6.7 64 14.4V244.2l22.7 6.7c13.5 4 27.3 6.4 41.3 7.4V194c-7.8-.8-15.6-2.3-23.2-4.5l-40.8-12v-62c-13-3.8-25.8-8.8-38.2-15c-8.2-4.1-16.9-7-25.8-8.8v72.4c-13-.4-26 .8-38.7 3.6L128 173.2V98L64 114v73.1zM320 335.7c16.8 1.5 33.9-.7 50-6.8l14-5.2V251.9l-7.9 1.8c-18.4 4.3-37.3 5.7-56.1 4.5v77.4zm64-149.4V115.4c-20.9 6.1-42.4 9.1-64 9.1V194c13.9 1.4 28 .5 41.7-2.6l22.3-5.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 0C49.7 0 64 14.3 64 32V48l69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1V345.8c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 384v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V400 334 64 32C0 14.3 14.3 0 32 0zM64 187.1l64-13.9v65.5L64 252.6V318l48.8-12.2c5.1-1.3 10.1-2.4 15.2-3.3V238.7l38.9-8.4c8.3-1.8 16.7-2.5 25.1-2.1l0-64c13.6 .4 27.2 2.6 40.4 6.4l23.6 6.9v66.7l-41.7-12.3c-7.3-2.1-14.8-3.4-22.3-3.8v71.4c21.8 1.9 43.3 6.7 64 14.4V244.2l22.7 6.7c13.5 4 27.3 6.4 41.3 7.4V194c-7.8-.8-15.6-2.3-23.2-4.5l-40.8-12v-62c-13-3.8-25.8-8.8-38.2-15c-8.2-4.1-16.9-7-25.8-8.8v72.4c-13-.4-26 .8-38.7 3.6L128 173.2V98L64 114v73.1zM320 335.7c16.8 1.5 33.9-.7 50-6.8l14-5.2V251.9l-7.9 1.8c-18.4 4.3-37.3 5.7-56.1 4.5v77.4zm64-149.4V115.4c-20.9 6.1-42.4 9.1-64 9.1V194c13.9 1.4 28 .5 41.7-2.6l22.3-5.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"flag-usa\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f74d\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"betsy ross\",\n        \"country\",\n        \"fla\",\n        \"flag: United States\",\n        \"old glory\",\n        \"stars\",\n        \"stripes\",\n        \"symbol\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f74d\",\n    \"label\": \"Flag Usa\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 0C49.7 0 64 14.3 64 32V48l69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1v36.1l-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-20.3-9-41.8-14.7-63.6-16.9v32.2c17.4 2.1 34.4 6.7 50.6 13.9l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 136.3v62l-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 203.1v32.7l70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 232.3v62l-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 299.1v32.7l70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 328.3v33.5c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 400v80c0 17.7-14.3 32-32 32s-32-14.3-32-32V416 345.5 312.8 249.5 216.8 153.5 120.8 64 32C0 14.3 14.3 0 32 0zm80 96A16 16 0 1 0 80 96a16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-32 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 0C49.7 0 64 14.3 64 32V48l69-17.2c38.1-9.5 78.3-5.1 113.5 12.5c46.3 23.2 100.8 23.2 147.1 0l9.6-4.8C423.8 28.1 448 43.1 448 66.1v36.1l-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-20.3-9-41.8-14.7-63.6-16.9v32.2c17.4 2.1 34.4 6.7 50.6 13.9l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 136.3v62l-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 203.1v32.7l70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 232.3v62l-44.7 16.2c-42.8 15.6-90 13.9-131.6-4.6l-16.1-7.2c-40.2-17.9-85-22.5-128.1-13.3L64 299.1v32.7l70.2-15.1c36.4-7.8 74.3-3.9 108.4 11.3l16.1 7.2c49.2 21.9 105 23.8 155.6 5.4L448 328.3v33.5c0 13.3-8.3 25.3-20.8 30l-34.7 13c-46.2 17.3-97.6 14.6-141.7-7.4c-37.9-19-81.3-23.7-122.5-13.4L64 400v80c0 17.7-14.3 32-32 32s-32-14.3-32-32V416 345.5 312.8 249.5 216.8 153.5 120.8 64 32C0 14.3 14.3 0 32 0zm80 96A16 16 0 1 0 80 96a16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-32 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm32 0a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"flask\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0c3\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beaker\",\n        \"chemicals\",\n        \"experiment\",\n        \"experimental\",\n        \"labs\",\n        \"liquid\",\n        \"potion\",\n        \"science\",\n        \"vial\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c3\",\n    \"label\": \"Flask\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M288 0H160 128C110.3 0 96 14.3 96 32s14.3 32 32 32V196.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512H378.6c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288zM192 196.8V64h64V196.8c0 23.7 6.6 46.9 19 67.1L309.5 320h-171L173 263.9c12.4-20.2 19-43.4 19-67.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M288 0H160 128C110.3 0 96 14.3 96 32s14.3 32 32 32V196.8c0 11.8-3.3 23.5-9.5 33.5L10.3 406.2C3.6 417.2 0 429.7 0 442.6C0 480.9 31.1 512 69.4 512H378.6c38.3 0 69.4-31.1 69.4-69.4c0-12.8-3.6-25.4-10.3-36.4L329.5 230.4c-6.2-10.1-9.5-21.7-9.5-33.5V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288zM192 196.8V64h64V196.8c0 23.7 6.6 46.9 19 67.1L309.5 320h-171L173 263.9c12.4-20.2 19-43.4 19-67.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"flask-vial\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \" beaker\",\n        \" chemicals\",\n        \" experiment\",\n        \" experimental\",\n        \" labs\",\n        \" liquid\",\n        \" science\",\n        \" vial\",\n        \"ampule\",\n        \"chemistry\",\n        \"lab\",\n        \"laboratory\",\n        \"potion\",\n        \"test\",\n        \"test tube\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f3\",\n    \"label\": \"Flask Vial\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M175 389.4c-9.8 16-15 34.3-15 53.1c-10 3.5-20.8 5.5-32 5.5c-53 0-96-43-96-96V64C14.3 64 0 49.7 0 32S14.3 0 32 0H96h64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32V309.9l-49 79.6zM96 64v96h64V64H96zM352 0H480h32c17.7 0 32 14.3 32 32s-14.3 32-32 32V214.9L629.7 406.2c6.7 10.9 10.3 23.5 10.3 36.4c0 38.3-31.1 69.4-69.4 69.4H261.4c-38.3 0-69.4-31.1-69.4-69.4c0-12.8 3.6-25.4 10.3-36.4L320 214.9V64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32zm32 64V224c0 5.9-1.6 11.7-4.7 16.8L330.5 320h171l-48.8-79.2c-3.1-5-4.7-10.8-4.7-16.8V64H384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M175 389.4c-9.8 16-15 34.3-15 53.1c-10 3.5-20.8 5.5-32 5.5c-53 0-96-43-96-96V64C14.3 64 0 49.7 0 32S14.3 0 32 0H96h64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32V309.9l-49 79.6zM96 64v96h64V64H96zM352 0H480h32c17.7 0 32 14.3 32 32s-14.3 32-32 32V214.9L629.7 406.2c6.7 10.9 10.3 23.5 10.3 36.4c0 38.3-31.1 69.4-69.4 69.4H261.4c-38.3 0-69.4-31.1-69.4-69.4c0-12.8 3.6-25.4 10.3-36.4L320 214.9V64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32zm32 64V224c0 5.9-1.6 11.7-4.7 16.8L330.5 320h171l-48.8-79.2c-3.1-5-4.7-10.8-4.7-16.8V64H384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"flickr\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f16e\",\n    \"label\": \"Flickr\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"flipboard\": {\n    \"changes\": [\"5.0.5\", \"5.0.9\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f44d\",\n    \"label\": \"Flipboard\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"floppy-disk\": {\n    \"aliases\": {\n      \"names\": [\"save\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4be\", \"1f5aa\"],\n        \"secondary\": [\"10f0c7\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Hard Shell Floppy Disk\",\n        \"computer\",\n        \"disk\",\n        \"download\",\n        \"floppy\",\n        \"floppy disk\",\n        \"floppy-o\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0c7\",\n    \"label\": \"Floppy Disk\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M48 96V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V170.5c0-4.2-1.7-8.3-4.7-11.3l33.9-33.9c12 12 18.7 28.3 18.7 45.3V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H309.5c17 0 33.3 6.7 45.3 18.7l74.5 74.5-33.9 33.9L320.8 84.7c-.3-.3-.5-.5-.8-.8V184c0 13.3-10.7 24-24 24H104c-13.3 0-24-10.7-24-24V80H64c-8.8 0-16 7.2-16 16zm80-16v80H272V80H128zm32 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M48 96V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V170.5c0-4.2-1.7-8.3-4.7-11.3l33.9-33.9c12 12 18.7 28.3 18.7 45.3V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H309.5c17 0 33.3 6.7 45.3 18.7l74.5 74.5-33.9 33.9L320.8 84.7c-.3-.3-.5-.5-.8-.8V184c0 13.3-10.7 24-24 24H104c-13.3 0-24-10.7-24-24V80H64c-8.8 0-16 7.2-16 16zm80-16v80H272V80H128zm32 240a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"florin-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e184\",\n    \"label\": \"Florin Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224H64c-17.7 0-32 14.3-32 32s14.3 32 32 32h80L98.9 396.3c-5 11.9-16.6 19.7-29.5 19.7H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H69.3c38.8 0 73.7-23.3 88.6-59.1L213.3 288H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H240l45.1-108.3c5-11.9 16.6-19.7 29.5-19.7H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H314.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M314.7 32c-38.8 0-73.7 23.3-88.6 59.1L170.7 224H64c-17.7 0-32 14.3-32 32s14.3 32 32 32h80L98.9 396.3c-5 11.9-16.6 19.7-29.5 19.7H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H69.3c38.8 0 73.7-23.3 88.6-59.1L213.3 288H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H240l45.1-108.3c5-11.9 16.6-19.7 29.5-19.7H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H314.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fly\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f417\",\n    \"label\": \"Fly\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"folder\": {\n    \"aliases\": {\n      \"names\": [\"folder-blank\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4c1\", \"1f5bf\", \"f114\"],\n        \"secondary\": [\"10f07b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Folder\",\n        \"archive\",\n        \"directory\",\n        \"document\",\n        \"file\",\n        \"file folder\",\n        \"folder\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f07b\",\n    \"label\": \"Folder\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 480H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H288c-10.1 0-19.6-4.7-25.6-12.8L243.2 57.6C231.1 41.5 212.1 32 192 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 480H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H288c-10.1 0-19.6-4.7-25.6-12.8L243.2 57.6C231.1 41.5 212.1 32 192 32H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H196.1c19.1 0 37.4 7.6 50.9 21.1L289.9 96H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16H286.6c-10.6 0-20.8-4.2-28.3-11.7L213.1 87c-4.5-4.5-10.6-7-17-7H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H196.1c19.1 0 37.4 7.6 50.9 21.1L289.9 96H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16H286.6c-10.6 0-20.8-4.2-28.3-11.7L213.1 87c-4.5-4.5-10.6-7-17-7H64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"folder-closed\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"file\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"e185\",\n    \"label\": \"Folder Closed\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 480H64c-35.3 0-64-28.7-64-64V192H512V416c0 35.3-28.7 64-64 64zm64-320H0V96C0 60.7 28.7 32 64 32H192c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8H448c35.3 0 64 28.7 64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 480H64c-35.3 0-64-28.7-64-64V192H512V416c0 35.3-28.7 64-64 64zm64-320H0V96C0 60.7 28.7 32 64 32H192c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8H448c35.3 0 64 28.7 64 64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M251.7 127.6l0 0c10.5 10.5 24.7 16.4 39.6 16.4H448c8.8 0 16 7.2 16 16v32H48V96c0-8.8 7.2-16 16-16H197.5c4.2 0 8.3 1.7 11.3 4.7l33.9-33.9L208.8 84.7l42.9 42.9zM48 240H464V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V240zM285.7 93.7L242.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H291.3c-2.1 0-4.2-.8-5.7-2.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M251.7 127.6l0 0c10.5 10.5 24.7 16.4 39.6 16.4H448c8.8 0 16 7.2 16 16v32H48V96c0-8.8 7.2-16 16-16H197.5c4.2 0 8.3 1.7 11.3 4.7l33.9-33.9L208.8 84.7l42.9 42.9zM48 240H464V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V240zM285.7 93.7L242.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H291.3c-2.1 0-4.2-.8-5.7-2.3z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"folder-minus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f65d\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"archive\",\n        \"delete\",\n        \"directory\",\n        \"document\",\n        \"file\",\n        \"negative\",\n        \"remove\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f65d\",\n    \"label\": \"Folder Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 480H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H192c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64zM184 272c-13.3 0-24 10.7-24 24s10.7 24 24 24H328c13.3 0 24-10.7 24-24s-10.7-24-24-24H184z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 480H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H192c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64zM184 272c-13.3 0-24 10.7-24 24s10.7 24 24 24H328c13.3 0 24-10.7 24-24s-10.7-24-24-24H184z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"folder-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4c2\", \"1f5c1\", \"f115\"],\n        \"secondary\": [\"10f07c\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Open Folder\",\n        \"archive\",\n        \"directory\",\n        \"document\",\n        \"empty\",\n        \"file\",\n        \"folder\",\n        \"new\",\n        \"open\",\n        \"open file folder\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f07c\",\n    \"label\": \"Folder Open\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M88.7 223.8L0 375.8V96C0 60.7 28.7 32 64 32H181.5c17 0 33.3 6.7 45.3 18.7l26.5 26.5c12 12 28.3 18.7 45.3 18.7H416c35.3 0 64 28.7 64 64v32H144c-22.8 0-43.8 12.1-55.3 31.8zm27.6 16.1C122.1 230 132.6 224 144 224H544c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-112 192C453.9 474 443.4 480 432 480H32c-11.5 0-22-6.1-27.7-16.1s-5.7-22.2 .1-32.1l112-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M88.7 223.8L0 375.8V96C0 60.7 28.7 32 64 32H181.5c17 0 33.3 6.7 45.3 18.7l26.5 26.5c12 12 28.3 18.7 45.3 18.7H416c35.3 0 64 28.7 64 64v32H144c-22.8 0-43.8 12.1-55.3 31.8zm27.6 16.1C122.1 230 132.6 224 144 224H544c11.5 0 22 6.1 27.7 16.1s5.7 22.2-.1 32.1l-112 192C453.9 474 443.4 480 432 480H32c-11.5 0-22-6.1-27.7-16.1s-5.7-22.2 .1-32.1l112-192z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384 480h48c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224H144c-11.4 0-21.9 6-27.6 15.9L48 357.1V96c0-8.8 7.2-16 16-16H181.5c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8H416c8.8 0 16 7.2 16 16v32h48V160c0-35.3-28.7-64-64-64H298.5c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H87.7 384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384 480h48c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224H144c-11.4 0-21.9 6-27.6 15.9L48 357.1V96c0-8.8 7.2-16 16-16H181.5c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8H416c8.8 0 16 7.2 16 16v32h48V160c0-35.3-28.7-64-64-64H298.5c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H87.7 384z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"folder-plus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f65e\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.11.0\",\n      \"5.12.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"add\",\n        \"archive\",\n        \"create\",\n        \"directory\",\n        \"document\",\n        \"file\",\n        \"new\",\n        \"positive\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f65e\",\n    \"label\": \"Folder Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H192c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8H448c35.3 0 64 28.7 64 64V416zM232 376c0 13.3 10.7 24 24 24s24-10.7 24-24V312h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V200c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H192c20.1 0 39.1 9.5 51.2 25.6l19.2 25.6c6 8.1 15.5 12.8 25.6 12.8H448c35.3 0 64 28.7 64 64V416zM232 376c0 13.3 10.7 24 24 24s24-10.7 24-24V312h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H280V200c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H168c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"folder-tree\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f802\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"archive\",\n        \"directory\",\n        \"document\",\n        \"file\",\n        \"search\",\n        \"structure\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f802\",\n    \"label\": \"Folder Tree\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32v96V384c0 35.3 28.7 64 64 64H256V384H64V160H256V96H64V32zM288 192c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H445.3c-8.5 0-16.6-3.4-22.6-9.4L409.4 9.4c-6-6-14.1-9.4-22.6-9.4H320c-17.7 0-32 14.3-32 32V192zm0 288c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32H445.3c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4H320c-17.7 0-32 14.3-32 32V480z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C64 14.3 49.7 0 32 0S0 14.3 0 32v96V384c0 35.3 28.7 64 64 64H256V384H64V160H256V96H64V32zM288 192c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H445.3c-8.5 0-16.6-3.4-22.6-9.4L409.4 9.4c-6-6-14.1-9.4-22.6-9.4H320c-17.7 0-32 14.3-32 32V192zm0 288c0 17.7 14.3 32 32 32H544c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32H445.3c-8.5 0-16.6-3.4-22.6-9.4l-13.3-13.3c-6-6-14.1-9.4-22.6-9.4H320c-17.7 0-32 14.3-32 32V480z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"font\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f031\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alphabet\", \"glyph\", \"text\", \"type\", \"typeface\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f031\",\n    \"label\": \"Font\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-1.8l18-48H303.8l18 48H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H390.2L254 52.8zM279.8 304H168.2L224 155.1 279.8 304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-1.8l18-48H303.8l18 48H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H390.2L254 52.8zM279.8 304H168.2L224 155.1 279.8 304z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"font-awesome\": {\n    \"aliases\": {\n      \"names\": [\"font-awesome-flag\", \"font-awesome-logo-full\"],\n      \"unicodes\": {\n        \"composite\": [\"f425\", \"f4e6\"],\n        \"primary\": [\"f4e6\"],\n        \"secondary\": [\"10f2b4\", \"10f4e6\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"5.15.4\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"awesome\", \"flag\", \"font\", \"icons\", \"typeface\"]\n    },\n    \"styles\": [\"solid\", \"regular\", \"brands\"],\n    \"unicode\": \"f2b4\",\n    \"label\": \"Font Awesome\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 48V384c-63.1 22.5-82.3 32-119.5 32c-62.8 0-86.6-32-149.3-32c-20.6 0-36.6 3.6-51.2 8.2v-64c14.6-4.6 30.6-8.2 51.2-8.2c62.7 0 86.5 32 149.3 32c20.4 0 35.6-3 55.5-9.3v-208c-19.9 6.3-35.1 9.3-55.5 9.3c-62.8 0-86.6-32-149.3-32c-50.8 0-74.9 20.6-115.2 28.7V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 46.3 14.3 32 32 32s32 14.3 32 32V76.7c40.3-8 64.4-28.7 115.2-28.7c62.7 0 86.5 32 149.3 32c37.1 0 56.4-9.5 119.5-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 48V384c-63.1 22.5-82.3 32-119.5 32c-62.8 0-86.6-32-149.3-32c-20.6 0-36.6 3.6-51.2 8.2v-64c14.6-4.6 30.6-8.2 51.2-8.2c62.7 0 86.5 32 149.3 32c20.4 0 35.6-3 55.5-9.3v-208c-19.9 6.3-35.1 9.3-55.5 9.3c-62.8 0-86.6-32-149.3-32c-50.8 0-74.9 20.6-115.2 28.7V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 46.3 14.3 32 32 32s32 14.3 32 32V76.7c40.3-8 64.4-28.7 115.2-28.7c62.7 0 86.5 32 149.3 32c37.1 0 56.4-9.5 119.5-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M48 56c0-13.3-10.7-24-24-24S0 42.7 0 56V456c0 13.3 10.7 24 24 24s24-10.7 24-24V124.2l12.5-2.4c16.7-3.2 31.5-8.5 44.2-13.1l0 0 0 0c3.7-1.3 7.1-2.6 10.4-3.7c15.2-5.2 30.4-9.1 51.2-9.1c25.6 0 43 6 63.5 13.3l.5 .2c20.9 7.4 44.8 15.9 79.1 15.9c32.4 0 53.7-6.8 90.5-19.6V342.9l-9.5 3.3c-41.5 14.4-55.2 19.2-81 19.2c-25.7 0-43.1-6-63.6-13.3l-.6-.2c-20.8-7.4-44.8-15.8-79-15.8c-16.8 0-31 2-43.9 5c-12.9 3-20.9 16-17.9 28.9s16 20.9 28.9 17.9c9.6-2.2 20.1-3.7 32.9-3.7c25.6 0 43 6 63.5 13.3l.5 .2c20.9 7.4 44.8 15.9 79.1 15.9c34.4 0 56.4-7.7 97.8-22.2c7.5-2.6 15.5-5.4 24.4-8.5l16.2-5.5V360 72 38.4L416.2 49.3c-9.7 3.3-18.2 6.3-25.7 8.9c-41.5 14.4-55.2 19.2-81 19.2c-25.7 0-43.1-6-63.6-13.3l-.6-.2c-20.8-7.4-44.8-15.8-79-15.8c-27.8 0-48.5 5.5-66.6 11.6c-4.9 1.7-9.3 3.3-13.6 4.8c-11.9 4.3-22 7.9-34.7 10.3L48 75.4V56z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M48 56c0-13.3-10.7-24-24-24S0 42.7 0 56V456c0 13.3 10.7 24 24 24s24-10.7 24-24V124.2l12.5-2.4c16.7-3.2 31.5-8.5 44.2-13.1l0 0 0 0c3.7-1.3 7.1-2.6 10.4-3.7c15.2-5.2 30.4-9.1 51.2-9.1c25.6 0 43 6 63.5 13.3l.5 .2c20.9 7.4 44.8 15.9 79.1 15.9c32.4 0 53.7-6.8 90.5-19.6V342.9l-9.5 3.3c-41.5 14.4-55.2 19.2-81 19.2c-25.7 0-43.1-6-63.6-13.3l-.6-.2c-20.8-7.4-44.8-15.8-79-15.8c-16.8 0-31 2-43.9 5c-12.9 3-20.9 16-17.9 28.9s16 20.9 28.9 17.9c9.6-2.2 20.1-3.7 32.9-3.7c25.6 0 43 6 63.5 13.3l.5 .2c20.9 7.4 44.8 15.9 79.1 15.9c34.4 0 56.4-7.7 97.8-22.2c7.5-2.6 15.5-5.4 24.4-8.5l16.2-5.5V360 72 38.4L416.2 49.3c-9.7 3.3-18.2 6.3-25.7 8.9c-41.5 14.4-55.2 19.2-81 19.2c-25.7 0-43.1-6-63.6-13.3l-.6-.2c-20.8-7.4-44.8-15.8-79-15.8c-27.8 0-48.5 5.5-66.6 11.6c-4.9 1.7-9.3 3.3-13.6 4.8c-11.9 4.3-22 7.9-34.7 10.3L48 75.4V56z\"\n      },\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 48V384C385 407 366 416 329 416C266 416 242 384 179 384C159 384 143 388 128 392V328C143 324 159 320 179 320C242 320 266 352 329 352C349 352 364 349 384 343V135C364 141 349 144 329 144C266 144 242 112 179 112C128 112 104 133 64 141V448C64 466 50 480 32 480S0 466 0 448V64C0 46 14 32 32 32S64 46 64 64V77C104 69 128 48 179 48C242 48 266 80 329 80C366 80 385 71 448 48Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 48V384C385 407 366 416 329 416C266 416 242 384 179 384C159 384 143 388 128 392V328C143 324 159 320 179 320C242 320 266 352 329 352C349 352 364 349 384 343V135C364 141 349 144 329 144C266 144 242 112 179 112C128 112 104 133 64 141V448C64 466 50 480 32 480S0 466 0 448V64C0 46 14 32 32 32S64 46 64 64V77C104 69 128 48 179 48C242 48 266 80 329 80C366 80 385 71 448 48Z\"\n      }\n    },\n    \"free\": [\"brands\", \"regular\", \"solid\"]\n  },\n  \"fonticons\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f280\",\n    \"label\": \"Fonticons\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v448h448V32zm187 140.9c-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23zm74.3 241.8v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm80.8-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"fonticons-fi\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a2\",\n    \"label\": \"Fonticons Fi\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"football\": {\n    \"aliases\": {\n      \"names\": [\"football-ball\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3c8\"],\n        \"secondary\": [\"10f44e\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.5\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"american\",\n        \"american football\",\n        \"ball\",\n        \"fall\",\n        \"football\",\n        \"nfl\",\n        \"pigskin\",\n        \"seasonal\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f44e\",\n    \"label\": \"Football\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M247.5 25.4c-13.5 3.3-26.4 7.2-38.6 11.7C142.9 61.6 96.7 103.6 66 153.6c-18.3 29.8-30.9 62.3-39.2 95.4L264.5 486.6c13.5-3.3 26.4-7.2 38.6-11.7c66-24.5 112.2-66.5 142.9-116.5c18.3-29.8 30.9-62.3 39.1-95.3L247.5 25.4zM495.2 205.3c6.1-56.8 1.4-112.2-7.7-156.4c-2.7-12.9-13-22.9-26.1-25.1c-58.2-9.7-109.9-12-155.6-7.9L495.2 205.3zM206.1 496L16.8 306.7c-6.1 56.8-1.4 112.2 7.7 156.4c2.7 12.9 13 22.9 26.1 25.1c58.2 9.7 109.9 12 155.6 7.9zm54.6-331.3c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M247.5 25.4c-13.5 3.3-26.4 7.2-38.6 11.7C142.9 61.6 96.7 103.6 66 153.6c-18.3 29.8-30.9 62.3-39.2 95.4L264.5 486.6c13.5-3.3 26.4-7.2 38.6-11.7c66-24.5 112.2-66.5 142.9-116.5c18.3-29.8 30.9-62.3 39.1-95.3L247.5 25.4zM495.2 205.3c6.1-56.8 1.4-112.2-7.7-156.4c-2.7-12.9-13-22.9-26.1-25.1c-58.2-9.7-109.9-12-155.6-7.9L495.2 205.3zM206.1 496L16.8 306.7c-6.1 56.8-1.4 112.2 7.7 156.4c2.7 12.9 13 22.9 26.1 25.1c58.2 9.7 109.9 12 155.6 7.9zm54.6-331.3c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6zm-48 48c6.2-6.2 16.4-6.2 22.6 0l64 64c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-64-64c-6.2-6.2-6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fort-awesome\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"castle\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f286\",\n    \"label\": \"Fort Awesome\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"fort-awesome-alt\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"castle\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a3\",\n    \"label\": \"Alternate Fort Awesome\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M208 237.4h-22.2c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7H208c2.1 0 3.7-1.6 3.7-3.7v-51.7c0-2.1-1.6-3.7-3.7-3.7zm118.2 0H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm132-125.1c-2.3-3.2-4.6-6.4-7.1-9.5-9.8-12.5-20.8-24-32.8-34.4-4.5-3.9-9.1-7.6-13.9-11.2-1.6-1.2-3.2-2.3-4.8-3.5C372 34.1 340.3 20 306 13c-16.2-3.3-32.9-5-50-5s-33.9 1.7-50 5c-34.3 7.1-66 21.2-93.3 40.8-1.6 1.1-3.2 2.3-4.8 3.5-4.8 3.6-9.4 7.3-13.9 11.2-3 2.6-5.9 5.3-8.8 8s-5.7 5.5-8.4 8.4c-5.5 5.7-10.7 11.8-15.6 18-2.4 3.1-4.8 6.3-7.1 9.5C25.2 153 8.3 202.5 8.3 256c0 2 .1 4 .1 6 .1.7.1 1.3.1 2 .1 1.3.1 2.7.2 4 0 .8.1 1.5.1 2.3 0 1.3.1 2.5.2 3.7.1.8.1 1.6.2 2.4.1 1.1.2 2.3.3 3.5 0 .8.1 1.6.2 2.4.1 1.2.3 2.4.4 3.6.1.8.2 1.5.3 2.3.1 1.3.3 2.6.5 3.9.1.6.2 1.3.3 1.9l.9 5.7c.1.6.2 1.1.3 1.7.3 1.3.5 2.7.8 4 .2.8.3 1.6.5 2.4.2 1 .5 2.1.7 3.2.2.9.4 1.7.6 2.6.2 1 .4 2 .7 3 .2.9.5 1.8.7 2.7.3 1 .5 1.9.8 2.9.3.9.5 1.8.8 2.7.2.9.5 1.9.8 2.8s.5 1.8.8 2.7c.3 1 .6 1.9.9 2.8.6 1.6 1.1 3.3 1.7 4.9.4 1 .7 1.9 1 2.8.3 1 .7 2 1.1 3 .3.8.6 1.5.9 2.3l1.2 3c.3.7.6 1.5.9 2.2.4 1 .9 2 1.3 3l.9 2.1c.5 1 .9 2 1.4 3 .3.7.6 1.3.9 2 .5 1 1 2.1 1.5 3.1.2.6.5 1.1.8 1.7.6 1.1 1.1 2.2 1.7 3.3.1.2.2.3.3.5 2.2 4.1 4.4 8.2 6.8 12.2.2.4.5.8.7 1.2.7 1.1 1.3 2.2 2 3.3.3.5.6.9.9 1.4.6 1.1 1.3 2.1 2 3.2.3.5.6.9.9 1.4.7 1.1 1.4 2.1 2.1 3.2.2.4.5.8.8 1.2.7 1.1 1.5 2.2 2.3 3.3.2.2.3.5.5.7 37.5 51.7 94.4 88.5 160 99.4.9.1 1.7.3 2.6.4 1 .2 2.1.4 3.1.5s1.9.3 2.8.4c1 .2 2 .3 3 .4.9.1 1.9.2 2.9.3s1.9.2 2.9.3 2.1.2 3.1.3c.9.1 1.8.1 2.7.2 1.1.1 2.3.1 3.4.2.8 0 1.7.1 2.5.1 1.3 0 2.6.1 3.9.1.7.1 1.4.1 2.1.1 2 .1 4 .1 6 .1s4-.1 6-.1c.7 0 1.4-.1 2.1-.1 1.3 0 2.6 0 3.9-.1.8 0 1.7-.1 2.5-.1 1.1-.1 2.3-.1 3.4-.2.9 0 1.8-.1 2.7-.2 1-.1 2.1-.2 3.1-.3s1.9-.2 2.9-.3c.9-.1 1.9-.2 2.9-.3s2-.3 3-.4 1.9-.3 2.8-.4c1-.2 2.1-.3 3.1-.5.9-.1 1.7-.3 2.6-.4 65.6-11 122.5-47.7 160.1-102.4.2-.2.3-.5.5-.7.8-1.1 1.5-2.2 2.3-3.3.2-.4.5-.8.8-1.2.7-1.1 1.4-2.1 2.1-3.2.3-.5.6-.9.9-1.4.6-1.1 1.3-2.1 2-3.2.3-.5.6-.9.9-1.4.7-1.1 1.3-2.2 2-3.3.2-.4.5-.8.7-1.2 2.4-4 4.6-8.1 6.8-12.2.1-.2.2-.3.3-.5.6-1.1 1.1-2.2 1.7-3.3.2-.6.5-1.1.8-1.7.5-1 1-2.1 1.5-3.1.3-.7.6-1.3.9-2 .5-1 1-2 1.4-3l.9-2.1c.5-1 .9-2 1.3-3 .3-.7.6-1.5.9-2.2l1.2-3c.3-.8.6-1.5.9-2.3.4-1 .7-2 1.1-3s.7-1.9 1-2.8c.6-1.6 1.2-3.3 1.7-4.9.3-1 .6-1.9.9-2.8s.5-1.8.8-2.7c.2-.9.5-1.9.8-2.8s.6-1.8.8-2.7c.3-1 .5-1.9.8-2.9.2-.9.5-1.8.7-2.7.2-1 .5-2 .7-3 .2-.9.4-1.7.6-2.6.2-1 .5-2.1.7-3.2.2-.8.3-1.6.5-2.4.3-1.3.6-2.7.8-4 .1-.6.2-1.1.3-1.7l.9-5.7c.1-.6.2-1.3.3-1.9.1-1.3.3-2.6.5-3.9.1-.8.2-1.5.3-2.3.1-1.2.3-2.4.4-3.6 0-.8.1-1.6.2-2.4.1-1.1.2-2.3.3-3.5.1-.8.1-1.6.2-2.4.1 1.7.1.5.2-.7 0-.8.1-1.5.1-2.3.1-1.3.2-2.7.2-4 .1-.7.1-1.3.1-2 .1-2 .1-4 .1-6 0-53.5-16.9-103-45.8-143.7zM448 371.5c-9.4 15.5-20.6 29.9-33.6 42.9-20.6 20.6-44.5 36.7-71.2 48-13.9 5.8-28.2 10.3-42.9 13.2v-75.8c0-58.6-88.6-58.6-88.6 0v75.8c-14.7-2.9-29-7.3-42.9-13.2-26.7-11.3-50.6-27.4-71.2-48-13-13-24.2-27.4-33.6-42.9v-71.3c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7V326h29.6V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-4.8 6.5-3.7 9.5-3.7V88.1c-4.4-2-7.4-6.7-7.4-11.5 0-16.8 25.4-16.8 25.4 0 0 4.8-3 9.4-7.4 11.5V92c6.3-1.4 12.7-2.3 19.2-2.3 9.4 0 18.4 3.5 26.3 3.5 7.2 0 15.2-3.5 19.4-3.5 2.1 0 3.7 1.6 3.7 3.7v48.4c0 5.6-18.7 6.5-22.4 6.5-8.6 0-16.6-3.5-25.4-3.5-7 0-14.1 1.2-20.8 2.8v30.7c3 0 9.5-1.1 9.5 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7v25.9h29.5V182c0-2.1 1.6-3.7 3.7-3.7h22.1c2.1 0 3.7 1.6 3.7 3.7v144h29.5v-25.8c0-2.1 1.6-3.7 3.7-3.7h22.2c2.1 0 3.7 1.6 3.7 3.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"forumbee\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f211\",\n    \"label\": \"Forumbee\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"forward\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23e9\"],\n        \"secondary\": [\"10f04e\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"double\",\n        \"fast\",\n        \"fast-forward button\",\n        \"forward\",\n        \"next\",\n        \"skip\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f04e\",\n    \"label\": \"Forward\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4L224 214.3V256v41.7L52.5 440.6zM256 352V256 128 96c0-12.4 7.2-23.7 18.4-29s24.5-3.6 34.1 4.4l192 160c7.3 6.1 11.5 15.1 11.5 24.6s-4.2 18.5-11.5 24.6l-192 160c-9.5 7.9-22.8 9.7-34.1 4.4s-18.4-16.6-18.4-29V352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4L224 214.3V256v41.7L52.5 440.6zM256 352V256 128 96c0-12.4 7.2-23.7 18.4-29s24.5-3.6 34.1 4.4l192 160c7.3 6.1 11.5 15.1 11.5 24.6s-4.2 18.5-11.5 24.6l-192 160c-9.5 7.9-22.8 9.7-34.1 4.4s-18.4-16.6-18.4-29V352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"forward-fast\": {\n    \"aliases\": {\n      \"names\": [\"fast-forward\"],\n      \"unicodes\": {\n        \"composite\": [\"23ed\"],\n        \"secondary\": [\"10f050\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"end\",\n        \"last\",\n        \"next\",\n        \"next scene\",\n        \"next track\",\n        \"next track button\",\n        \"triangle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f050\",\n    \"label\": \"Forward Fast\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M18.4 445c11.2 5.3 24.5 3.6 34.1-4.4L224 297.7V416c0 12.4 7.2 23.7 18.4 29s24.5 3.6 34.1-4.4L448 297.7V416c0 17.7 14.3 32 32 32s32-14.3 32-32V96c0-17.7-14.3-32-32-32s-32 14.3-32 32V214.3L276.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S224 83.6 224 96V214.3L52.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S0 83.6 0 96V416c0 12.4 7.2 23.7 18.4 29z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M18.4 445c11.2 5.3 24.5 3.6 34.1-4.4L224 297.7V416c0 12.4 7.2 23.7 18.4 29s24.5 3.6 34.1-4.4L448 297.7V416c0 17.7 14.3 32 32 32s32-14.3 32-32V96c0-17.7-14.3-32-32-32s-32 14.3-32 32V214.3L276.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S224 83.6 224 96V214.3L52.5 71.4c-9.5-7.9-22.8-9.7-34.1-4.4S0 83.6 0 96V416c0 12.4 7.2 23.7 18.4 29z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"forward-step\": {\n    \"aliases\": {\n      \"names\": [\"step-forward\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f051\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"end\", \"last\", \"next\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f051\",\n    \"label\": \"Forward Step\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241V96c0-17.7 14.3-32 32-32s32 14.3 32 32V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V271l-11.5 9.6-192 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241V96c0-17.7 14.3-32 32-32s32 14.3 32 32V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V271l-11.5 9.6-192 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"foursquare\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f180\",\n    \"label\": \"Foursquare\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 368 512\\\"><path d=\\\"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 368, 512],\n        \"width\": 368,\n        \"height\": 512,\n        \"path\": \"M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"franc-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"French Franc Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e18f\",\n    \"label\": \"Franc Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M80 32C62.3 32 48 46.3 48 64V224v96H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48v64c0 17.7 14.3 32 32 32s32-14.3 32-32V384h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V256H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V96H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M80 32C62.3 32 48 46.3 48 64V224v96H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48v64c0 17.7 14.3 32 32 32s32-14.3 32-32V384h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V256H256c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V96H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"free-code-camp\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"5.12.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2c5\",\n    \"label\": \"freeCodeCamp\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"freebsd\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a4\",\n    \"label\": \"FreeBSD\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-53.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"frog\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f52e\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"amphibian\",\n        \"bullfrog\",\n        \"fauna\",\n        \"hop\",\n        \"kermit\",\n        \"kiss\",\n        \"prince\",\n        \"ribbit\",\n        \"toad\",\n        \"wart\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f52e\",\n    \"label\": \"Frog\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M368 32c41.7 0 75.9 31.8 79.7 72.5l85.6 26.3c25.4 7.8 42.8 31.3 42.8 57.9c0 21.8-11.7 41.9-30.7 52.7L400.8 323.5 493.3 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H480c-8.5 0-16.6-3.4-22.6-9.4L346.9 360.2c11.7-36 3.2-77.1-25.4-105.7c-40.6-40.6-106.3-40.6-146.9-.1L101 324.4c-6.4 6.1-6.7 16.2-.6 22.6s16.2 6.6 22.6 .6l73.8-70.2 .1-.1 .1-.1c3.5-3.5 7.3-6.6 11.3-9.2c27.9-18.5 65.9-15.4 90.5 9.2c24.7 24.7 27.7 62.9 9 90.9c-2.6 3.8-5.6 7.5-9 10.9L261.8 416H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-35.3 0-64-28.7-64-64C0 249.6 127 112.9 289.3 97.5C296.2 60.2 328.8 32 368 32zm0 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M368 32c41.7 0 75.9 31.8 79.7 72.5l85.6 26.3c25.4 7.8 42.8 31.3 42.8 57.9c0 21.8-11.7 41.9-30.7 52.7L400.8 323.5 493.3 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H480c-8.5 0-16.6-3.4-22.6-9.4L346.9 360.2c11.7-36 3.2-77.1-25.4-105.7c-40.6-40.6-106.3-40.6-146.9-.1L101 324.4c-6.4 6.1-6.7 16.2-.6 22.6s16.2 6.6 22.6 .6l73.8-70.2 .1-.1 .1-.1c3.5-3.5 7.3-6.6 11.3-9.2c27.9-18.5 65.9-15.4 90.5 9.2c24.7 24.7 27.7 62.9 9 90.9c-2.6 3.8-5.6 7.5-9 10.9L261.8 416H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-35.3 0-64-28.7-64-64C0 249.6 127 112.9 289.3 97.5C296.2 60.2 328.8 32 368 32zm0 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"fulcrum\": {\n    \"changes\": [\"5.0.12\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f50b\",\n    \"label\": \"Fulcrum\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M95.75 164.14l-35.38 43.55L25 164.14l35.38-43.55zM144.23 0l-20.54 198.18L72.72 256l51 57.82L144.23 512V300.89L103.15 256l41.08-44.89zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55zm-48.48 47L216.5 256l-41.08 44.89V512L196 313.82 247 256l-51-57.82L175.42 0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"futbol\": {\n    \"aliases\": {\n      \"names\": [\"futbol-ball\", \"soccer-ball\"],\n      \"unicodes\": {\n        \"composite\": [\"26bd\"],\n        \"secondary\": [\"10f1e3\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.0.5\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ball\", \"football\", \"mls\", \"soccer\", \"soccer ball\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1e3\",\n    \"label\": \"Futbol\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M417.3 360.1l-71.6-4.8c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-17.6 69.6C289.5 445.8 273 448 256 448s-33.5-2.2-49.2-6.4L189.2 372c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-71.6 4.8c-17.6-27.2-28.5-59.2-30.4-93.6L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15l-26.7-66.6C128 109.2 155.3 89 186.7 76.9l55.2 46c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l55.2-46c31.3 12.1 58.7 32.3 79.6 57.9l-26.7 66.6c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9l60.7 38.2c-1.9 34.4-12.8 66.4-30.4 93.6zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6h59.2c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M417.3 360.1l-71.6-4.8c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-17.6 69.6C289.5 445.8 273 448 256 448s-33.5-2.2-49.2-6.4L189.2 372c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-71.6 4.8c-17.6-27.2-28.5-59.2-30.4-93.6L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15l-26.7-66.6C128 109.2 155.3 89 186.7 76.9l55.2 46c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l55.2-46c31.3 12.1 58.7 32.3 79.6 57.9l-26.7 66.6c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9l60.7 38.2c-1.9 34.4-12.8 66.4-30.4 93.6zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6h59.2c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M435.4 361.3l-89.7-6c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-22 87.2c-14.4 3.2-29.4 4.8-44.8 4.8s-30.3-1.7-44.8-4.8l-22-87.2c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-89.7 6C61.7 335.9 51.9 307 49 276.2L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15L100.4 118c19.9-22.4 44.6-40.5 72.4-52.7l69.1 57.6c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l69.1-57.6c27.8 12.2 52.5 30.3 72.4 52.7l-33.4 83.4c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9L463 276.2c-3 30.8-12.7 59.7-27.6 85.1zM256 48l.9 0h-1.8l.9 0zM56.7 196.2c.9-3 1.9-6.1 2.9-9.1l-2.9 9.1zM132 423l3.8 2.7c-1.3-.9-2.5-1.8-3.8-2.7zm248.1-.1c-1.3 1-2.7 2-4 2.9l4-2.9zm75.2-226.6l-3-9.2c1.1 3 2.1 6.1 3 9.2zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6h59.2c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M435.4 361.3l-89.7-6c-5.2-.3-10.3 1.1-14.5 4.2s-7.2 7.4-8.4 12.5l-22 87.2c-14.4 3.2-29.4 4.8-44.8 4.8s-30.3-1.7-44.8-4.8l-22-87.2c-1.3-5-4.3-9.4-8.4-12.5s-9.3-4.5-14.5-4.2l-89.7 6C61.7 335.9 51.9 307 49 276.2L125 228.3c4.4-2.8 7.6-7 9.2-11.9s1.4-10.2-.5-15L100.4 118c19.9-22.4 44.6-40.5 72.4-52.7l69.1 57.6c4 3.3 9 5.1 14.1 5.1s10.2-1.8 14.1-5.1l69.1-57.6c27.8 12.2 52.5 30.3 72.4 52.7l-33.4 83.4c-1.9 4.8-2.1 10.1-.5 15s4.9 9.1 9.2 11.9L463 276.2c-3 30.8-12.7 59.7-27.6 85.1zM256 48l.9 0h-1.8l.9 0zM56.7 196.2c.9-3 1.9-6.1 2.9-9.1l-2.9 9.1zM132 423l3.8 2.7c-1.3-.9-2.5-1.8-3.8-2.7zm248.1-.1c-1.3 1-2.7 2-4 2.9l4-2.9zm75.2-226.6l-3-9.2c1.1 3 2.1 6.1 3 9.2zM256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm14.1-325.7c-8.4-6.1-19.8-6.1-28.2 0L194 221c-8.4 6.1-11.9 16.9-8.7 26.8l18.3 56.3c3.2 9.9 12.4 16.6 22.8 16.6h59.2c10.4 0 19.6-6.7 22.8-16.6l18.3-56.3c3.2-9.9-.3-20.7-8.7-26.8l-47.9-34.8z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"g\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"67\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter G\", \"Latin Small Letter G\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"47\",\n    \"label\": \"G\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 96C135.6 96 64 167.6 64 256s71.6 160 160 160c77.4 0 142-55 156.8-128H256c-17.7 0-32-14.3-32-32s14.3-32 32-32H400c25.8 0 49.6 21.4 47.2 50.6C437.8 389.6 341.4 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32c57.4 0 109.7 21.6 149.3 57c13.2 11.8 14.3 32 2.5 45.2s-32 14.3-45.2 2.5C302.3 111.4 265 96 224 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 96C135.6 96 64 167.6 64 256s71.6 160 160 160c77.4 0 142-55 156.8-128H256c-17.7 0-32-14.3-32-32s14.3-32 32-32H400c25.8 0 49.6 21.4 47.2 50.6C437.8 389.6 341.4 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32c57.4 0 109.7 21.6 149.3 57c13.2 11.8 14.3 32 2.5 45.2s-32 14.3-45.2 2.5C302.3 111.4 265 96 224 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"galactic-republic\": {\n    \"changes\": [\"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"politics\", \"star wars\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f50c\",\n    \"label\": \"Galactic Republic\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"galactic-senate\": {\n    \"changes\": [\"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"star wars\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f50d\",\n    \"label\": \"Galactic Senate\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gamepad\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f11b\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arcade\",\n        \"controller\",\n        \"d-pad\",\n        \"joystick\",\n        \"video\",\n        \"video game\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f11b\",\n    \"label\": \"Gamepad\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 64C86 64 0 150 0 256S86 448 192 448H448c106 0 192-86 192-192s-86-192-192-192H192zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24v32h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H216v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V200z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 64C86 64 0 150 0 256S86 448 192 448H448c106 0 192-86 192-192s-86-192-192-192H192zM496 168a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM392 304a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM168 200c0-13.3 10.7-24 24-24s24 10.7 24 24v32h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H216v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V200z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gas-pump\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26fd\"],\n        \"secondary\": [\"10f52f\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"car\",\n        \"diesel\",\n        \"fuel\",\n        \"fuel pump\",\n        \"fuelpump\",\n        \"gas\",\n        \"gasoline\",\n        \"petrol\",\n        \"pump\",\n        \"station\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f52f\",\n    \"label\": \"Gas Pump\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 64C32 28.7 60.7 0 96 0H256c35.3 0 64 28.7 64 64V256h8c48.6 0 88 39.4 88 88v32c0 13.3 10.7 24 24 24s24-10.7 24-24V222c-27.6-7.1-48-32.2-48-62V96L384 64c-8.8-8.8-8.8-23.2 0-32s23.2-8.8 32 0l77.3 77.3c12 12 18.7 28.3 18.7 45.3V168v24 32V376c0 39.8-32.2 72-72 72s-72-32.2-72-72V344c0-22.1-17.9-40-40-40h-8V448c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V64zM96 80v96c0 8.8 7.2 16 16 16H240c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16H112c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 64C32 28.7 60.7 0 96 0H256c35.3 0 64 28.7 64 64V256h8c48.6 0 88 39.4 88 88v32c0 13.3 10.7 24 24 24s24-10.7 24-24V222c-27.6-7.1-48-32.2-48-62V96L384 64c-8.8-8.8-8.8-23.2 0-32s23.2-8.8 32 0l77.3 77.3c12 12 18.7 28.3 18.7 45.3V168v24 32V376c0 39.8-32.2 72-72 72s-72-32.2-72-72V344c0-22.1-17.9-40-40-40h-8V448c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V64zM96 80v96c0 8.8 7.2 16 16 16H240c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16H112c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gauge\": {\n    \"aliases\": {\n      \"names\": [\"dashboard\", \"gauge-med\", \"tachometer-alt-average\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f624\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dashboard\", \"fast\", \"odometer\", \"speed\", \"speedometer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f624\",\n    \"label\": \"Gauge\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3V88c0-13.3-10.7-24-24-24s-24 10.7-24 24V292.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm-16 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM400 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3V88c0-13.3-10.7-24-24-24s-24 10.7-24 24V292.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64zM144 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm-16 80a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM400 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gauge-high\": {\n    \"aliases\": {\n      \"names\": [\"tachometer-alt\", \"tachometer-alt-fast\"],\n      \"unicodes\": {\n        \"composite\": [\"f3fd\"],\n        \"primary\": [\"f3fd\"],\n        \"secondary\": [\"10f3fd\", \"10f625\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dashboard\", \"fast\", \"odometer\", \"speed\", \"speedometer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f625\",\n    \"label\": \"Gauge High\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gauge-simple\": {\n    \"aliases\": {\n      \"names\": [\"gauge-simple-med\", \"tachometer-average\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f629\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dashboard\", \"fast\", \"odometer\", \"speed\", \"speedometer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f629\",\n    \"label\": \"Gauge Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3V88c0-13.3-10.7-24-24-24s-24 10.7-24 24V292.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-26.9-16.5-49.9-40-59.3V88c0-13.3-10.7-24-24-24s-24 10.7-24 24V292.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64s64-28.7 64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gauge-simple-high\": {\n    \"aliases\": {\n      \"names\": [\"tachometer\", \"tachometer-fast\"],\n      \"unicodes\": {\n        \"composite\": [\"f0e4\"],\n        \"primary\": [\"f0e4\"],\n        \"secondary\": [\"10f0e4\", \"10f62a\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dashboard\", \"fast\", \"odometer\", \"speed\", \"speedometer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f62a\",\n    \"label\": \"Gauge Simple High\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-15.9-5.8-30.4-15.3-41.6l76.6-147.4c6.1-11.8 1.5-26.3-10.2-32.4s-26.2-1.5-32.4 10.2L262.1 288.3c-2-.2-4-.3-6.1-.3c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm320 96c0-15.9-5.8-30.4-15.3-41.6l76.6-147.4c6.1-11.8 1.5-26.3-10.2-32.4s-26.2-1.5-32.4 10.2L262.1 288.3c-2-.2-4-.3-6.1-.3c-35.3 0-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gavel\": {\n    \"aliases\": {\n      \"names\": [\"legal\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0e3\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hammer\", \"judge\", \"law\", \"lawyer\", \"opinion\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0e3\",\n    \"label\": \"Gavel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M318.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-120 120c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l4-4L325.4 293.4l-4 4c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l120-120c12.5-12.5 12.5-32.8 0-45.3l-16-16c-12.5-12.5-32.8-12.5-45.3 0l-4 4L330.6 74.6l4-4c12.5-12.5 12.5-32.8 0-45.3l-16-16zm-152 288c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l48 48c12.5 12.5 32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-1.4-1.4L272 285.3 226.7 240 168 298.7l-1.4-1.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M318.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-120 120c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l4-4L325.4 293.4l-4 4c-12.5 12.5-12.5 32.8 0 45.3l16 16c12.5 12.5 32.8 12.5 45.3 0l120-120c12.5-12.5 12.5-32.8 0-45.3l-16-16c-12.5-12.5-32.8-12.5-45.3 0l-4 4L330.6 74.6l4-4c12.5-12.5 12.5-32.8 0-45.3l-16-16zm-152 288c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l48 48c12.5 12.5 32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-1.4-1.4L272 285.3 226.7 240 168 298.7l-1.4-1.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gear\": {\n    \"aliases\": {\n      \"names\": [\"cog\"],\n      \"unicodes\": {\n        \"composite\": [\"2699\"],\n        \"secondary\": [\"10f013\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cog\",\n        \"cogwheel\",\n        \"gear\",\n        \"mechanical\",\n        \"settings\",\n        \"sprocket\",\n        \"tool\",\n        \"wheel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f013\",\n    \"label\": \"Gear\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gears\": {\n    \"aliases\": {\n      \"names\": [\"cogs\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f085\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"gears\", \"mechanical\", \"settings\", \"sprocket\", \"wheel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f085\",\n    \"label\": \"Gears\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8h-.7c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8h-.7c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gem\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f48e\"],\n        \"secondary\": [\"10f3a5\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"diamond\",\n        \"gem\",\n        \"gem stone\",\n        \"jewel\",\n        \"jewelry\",\n        \"sapphire\",\n        \"stone\",\n        \"treasure\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f3a5\",\n    \"label\": \"Gem\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.6L63.3 192c-4.1 .3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16c.4 0 .9 0 1.3 0l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8L301.5 179.8l57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1L256 172.2 165.9 74.6c-2.8-3-7.4-3.4-10.7-1z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M168.5 72L256 165l87.5-93h-175zM383.9 99.1L311.5 176h129L383.9 99.1zm50 124.9H256 78.1L256 420.3 433.9 224zM71.5 176h129L128.1 99.1 71.5 176zm434.3 40.1l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M168.5 72L256 165l87.5-93h-175zM383.9 99.1L311.5 176h129L383.9 99.1zm50 124.9H256 78.1L256 420.3 433.9 224zM71.5 176h129L128.1 99.1 71.5 176zm434.3 40.1l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4l112-152c4.5-6.1 11.7-9.8 19.3-9.8H376c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"genderless\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f22d\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"androgynous\", \"asexual\", \"gender\", \"sexless\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f22d\",\n    \"label\": \"Genderless\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 144a112 112 0 1 1 0 224 112 112 0 1 1 0-224zm0 288a176 176 0 1 0 0-352 176 176 0 1 0 0 352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 144a112 112 0 1 1 0 224 112 112 0 1 1 0-224zm0 288a176 176 0 1 0 0-352 176 176 0 1 0 0 352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"get-pocket\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f265\",\n    \"label\": \"Get Pocket\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gg\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f260\",\n    \"label\": \"GG Currency\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gg-circle\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f261\",\n    \"label\": \"GG Currency Circle\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ghost\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f47b\"],\n        \"secondary\": [\"10f6e2\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"apparition\",\n        \"blinky\",\n        \"clyde\",\n        \"creature\",\n        \"face\",\n        \"fairy tale\",\n        \"fantasy\",\n        \"floating\",\n        \"ghost\",\n        \"halloween\",\n        \"holiday\",\n        \"inky\",\n        \"monster\",\n        \"pacman\",\n        \"pinky\",\n        \"spirit\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6e2\",\n    \"label\": \"Ghost\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M40.1 467.1l-11.2 9c-3.2 2.5-7.1 3.9-11.1 3.9C8 480 0 472 0 462.2V192C0 86 86 0 192 0S384 86 384 192V462.2c0 9.8-8 17.8-17.8 17.8c-4 0-7.9-1.4-11.1-3.9l-11.2-9c-13.4-10.7-32.8-9-44.1 3.9L269.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6l-26.6-30.5c-12.7-14.6-35.4-14.6-48.2 0L141.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6L84.2 471c-11.3-12.9-30.7-14.6-44.1-3.9zM160 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M40.1 467.1l-11.2 9c-3.2 2.5-7.1 3.9-11.1 3.9C8 480 0 472 0 462.2V192C0 86 86 0 192 0S384 86 384 192V462.2c0 9.8-8 17.8-17.8 17.8c-4 0-7.9-1.4-11.1-3.9l-11.2-9c-13.4-10.7-32.8-9-44.1 3.9L269.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6l-26.6-30.5c-12.7-14.6-35.4-14.6-48.2 0L141.3 506c-3.3 3.8-8.2 6-13.3 6s-9.9-2.2-13.3-6L84.2 471c-11.3-12.9-30.7-14.6-44.1-3.9zM160 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gift\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f381\"],\n        \"secondary\": [\"10f06b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"box\",\n        \"celebration\",\n        \"christmas\",\n        \"generosity\",\n        \"gift\",\n        \"giving\",\n        \"holiday\",\n        \"party\",\n        \"present\",\n        \"wrapped\",\n        \"wrapped gift\",\n        \"xmas\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f06b\",\n    \"label\": \"Gift\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M190.5 68.8L225.3 128H224 152c-22.1 0-40-17.9-40-40s17.9-40 40-40h2.2c14.9 0 28.8 7.9 36.3 20.8zM64 88c0 14.4 3.5 28 9.6 40H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H438.4c6.1-12 9.6-25.6 9.6-40c0-48.6-39.4-88-88-88h-2.2c-31.9 0-61.5 16.9-77.7 44.4L256 85.5l-24.1-41C215.7 16.9 186.1 0 154.2 0H152C103.4 0 64 39.4 64 88zm336 0c0 22.1-17.9 40-40 40H288h-1.3l34.8-59.2C329.1 55.9 342.9 48 357.8 48H360c22.1 0 40 17.9 40 40zM32 288V464c0 26.5 21.5 48 48 48H224V288H32zM288 512H432c26.5 0 48-21.5 48-48V288H288V512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M190.5 68.8L225.3 128H224 152c-22.1 0-40-17.9-40-40s17.9-40 40-40h2.2c14.9 0 28.8 7.9 36.3 20.8zM64 88c0 14.4 3.5 28 9.6 40H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H438.4c6.1-12 9.6-25.6 9.6-40c0-48.6-39.4-88-88-88h-2.2c-31.9 0-61.5 16.9-77.7 44.4L256 85.5l-24.1-41C215.7 16.9 186.1 0 154.2 0H152C103.4 0 64 39.4 64 88zm336 0c0 22.1-17.9 40-40 40H288h-1.3l34.8-59.2C329.1 55.9 342.9 48 357.8 48H360c22.1 0 40 17.9 40 40zM32 288V464c0 26.5 21.5 48 48 48H224V288H32zM288 512H432c26.5 0 48-21.5 48-48V288H288V512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gifts\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f79c\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"christmas\",\n        \"generosity\",\n        \"giving\",\n        \"holiday\",\n        \"party\",\n        \"present\",\n        \"wrapped\",\n        \"xmas\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f79c\",\n    \"label\": \"Gifts\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M200.6 32C205 19.5 198.5 5.8 186 1.4S159.8 3.5 155.4 16L144.7 46.2l-9.9-29.8C130.6 3.8 117-3 104.4 1.2S85 19 89.2 31.6l8.3 25-27.4-20c-10.7-7.8-25.7-5.4-33.5 5.3s-5.4 25.7 5.3 33.5L70.2 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H200.6c-5.4-9.4-8.6-20.3-8.6-32V256c0-29.9 20.5-55 48.2-62c1.8-31 17.1-58.2 40.1-76.1C271.7 104.7 256.9 96 240 96H217.8l28.3-20.6c10.7-7.8 13.1-22.8 5.3-33.5s-22.8-13.1-33.5-5.3L192.5 55.1 200.6 32zM363.5 185.5L393.1 224H344c-13.3 0-24-10.7-24-24c0-13.1 10.8-24 24.2-24c7.6 0 14.7 3.5 19.3 9.5zM272 200c0 8.4 1.4 16.5 4.1 24H272c-26.5 0-48 21.5-48 48v80H416V256h32v96H640V272c0-26.5-21.5-48-48-48h-4.1c2.7-7.5 4.1-15.6 4.1-24c0-39.9-32.5-72-72.2-72c-22.4 0-43.6 10.4-57.3 28.2L432 195.8l-30.5-39.6c-13.7-17.8-35-28.2-57.3-28.2c-39.7 0-72.2 32.1-72.2 72zM224 464c0 26.5 21.5 48 48 48H416V384H224v80zm224 48H592c26.5 0 48-21.5 48-48V384H448V512zm96-312c0 13.3-10.7 24-24 24H470.9l29.6-38.5c4.6-5.9 11.7-9.5 19.3-9.5c13.4 0 24.2 10.9 24.2 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M200.6 32C205 19.5 198.5 5.8 186 1.4S159.8 3.5 155.4 16L144.7 46.2l-9.9-29.8C130.6 3.8 117-3 104.4 1.2S85 19 89.2 31.6l8.3 25-27.4-20c-10.7-7.8-25.7-5.4-33.5 5.3s-5.4 25.7 5.3 33.5L70.2 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H200.6c-5.4-9.4-8.6-20.3-8.6-32V256c0-29.9 20.5-55 48.2-62c1.8-31 17.1-58.2 40.1-76.1C271.7 104.7 256.9 96 240 96H217.8l28.3-20.6c10.7-7.8 13.1-22.8 5.3-33.5s-22.8-13.1-33.5-5.3L192.5 55.1 200.6 32zM363.5 185.5L393.1 224H344c-13.3 0-24-10.7-24-24c0-13.1 10.8-24 24.2-24c7.6 0 14.7 3.5 19.3 9.5zM272 200c0 8.4 1.4 16.5 4.1 24H272c-26.5 0-48 21.5-48 48v80H416V256h32v96H640V272c0-26.5-21.5-48-48-48h-4.1c2.7-7.5 4.1-15.6 4.1-24c0-39.9-32.5-72-72.2-72c-22.4 0-43.6 10.4-57.3 28.2L432 195.8l-30.5-39.6c-13.7-17.8-35-28.2-57.3-28.2c-39.7 0-72.2 32.1-72.2 72zM224 464c0 26.5 21.5 48 48 48H416V384H224v80zm224 48H592c26.5 0 48-21.5 48-48V384H448V512zm96-312c0 13.3-10.7 24-24 24H470.9l29.6-38.5c4.6-5.9 11.7-9.5 19.3-9.5c13.4 0 24.2 10.9 24.2 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"git\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d3\",\n    \"label\": \"Git\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"git-alt\": {\n    \"changes\": [\"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f841\",\n    \"label\": \"Git Alt\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M439.55 236.05L244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"github\": {\n    \"changes\": [\"2.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"octocat\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f09b\",\n    \"label\": \"GitHub\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"github-alt\": {\n    \"changes\": [\"3.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"octocat\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f113\",\n    \"label\": \"Alternate GitHub\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 480 512\\\"><path d=\\\"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 480, 512],\n        \"width\": 480,\n        \"height\": 512,\n        \"path\": \"M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gitkraken\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a6\",\n    \"label\": \"GitKraken\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 592 512\\\"><path d=\\\"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 592, 512],\n        \"width\": 592,\n        \"height\": 512,\n        \"path\": \"M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gitlab\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"5.7.0\", \"6.0.0-beta1\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Axosoft\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f296\",\n    \"label\": \"GitLab\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gitter\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f426\",\n    \"label\": \"Gitter\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"glass-water\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"potable\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f4\",\n    \"label\": \"Glass Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3H275.3c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0H32zM73 156.5L66.4 64H317.6L311 156.5l-24.2 12.1c-19.4 9.7-42.2 9.7-61.6 0c-20.9-10.4-45.5-10.4-66.4 0c-19.4 9.7-42.2 9.7-61.6 0L73 156.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3H275.3c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0H32zM73 156.5L66.4 64H317.6L311 156.5l-24.2 12.1c-19.4 9.7-42.2 9.7-61.6 0c-20.9-10.4-45.5-10.4-66.4 0c-19.4 9.7-42.2 9.7-61.6 0L73 156.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"glass-water-droplet\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"potable\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f5\",\n    \"label\": \"Glass Water Droplet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3H275.3c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0H32zM83 297.5L66.4 64H317.6L301 297.5 288 304c-20.1 10.1-43.9 10.1-64 0s-43.9-10.1-64 0s-43.9 10.1-64 0l-13-6.5zM256 196c0-24-33.7-70.1-52.2-93.5c-6.1-7.7-17.5-7.7-23.6 0C161.7 125.9 128 172 128 196c0 33.1 28.7 60 64 60s64-26.9 64-60z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 0C23.1 0 14.6 3.7 8.6 10.2S-.6 25.4 .1 34.3L28.9 437.7c3 41.9 37.8 74.3 79.8 74.3H275.3c42 0 76.8-32.4 79.8-74.3L383.9 34.3c.6-8.9-2.4-17.6-8.5-24.1S360.9 0 352 0H32zM83 297.5L66.4 64H317.6L301 297.5 288 304c-20.1 10.1-43.9 10.1-64 0s-43.9-10.1-64 0s-43.9 10.1-64 0l-13-6.5zM256 196c0-24-33.7-70.1-52.2-93.5c-6.1-7.7-17.5-7.7-23.6 0C161.7 125.9 128 172 128 196c0 33.1 28.7 60 64 60s64-26.9 64-60z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"glasses\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f530\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hipster\", \"nerd\", \"reading\", \"sight\", \"spectacles\", \"vision\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f530\",\n    \"label\": \"Glasses\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M118.6 80c-11.5 0-21.4 7.9-24 19.1L57 260.3c20.5-6.2 48.3-12.3 78.7-12.3c32.3 0 61.8 6.9 82.8 13.5c10.6 3.3 19.3 6.7 25.4 9.2c3.1 1.3 5.5 2.4 7.3 3.2c.9 .4 1.6 .7 2.1 1l.6 .3 .2 .1 .1 0 0 0 0 0s0 0-6.3 12.7h0l6.3-12.7c5.8 2.9 10.4 7.3 13.5 12.7h40.6c3.1-5.3 7.7-9.8 13.5-12.7l6.3 12.7h0c-6.3-12.7-6.3-12.7-6.3-12.7l0 0 0 0 .1 0 .2-.1 .6-.3c.5-.2 1.2-.6 2.1-1c1.8-.8 4.2-1.9 7.3-3.2c6.1-2.6 14.8-5.9 25.4-9.2c21-6.6 50.4-13.5 82.8-13.5c30.4 0 58.2 6.1 78.7 12.3L481.4 99.1c-2.6-11.2-12.6-19.1-24-19.1c-3.1 0-6.2 .6-9.2 1.8L416.9 94.3c-12.3 4.9-26.3-1.1-31.2-13.4s1.1-26.3 13.4-31.2l31.3-12.5c8.6-3.4 17.7-5.2 27-5.2c33.8 0 63.1 23.3 70.8 56.2l43.9 188c1.7 7.3 2.9 14.7 3.5 22.1c.3 1.9 .5 3.8 .5 5.7v6.7V352v16c0 61.9-50.1 112-112 112H419.7c-59.4 0-108.5-46.4-111.8-105.8L306.6 352H269.4l-1.2 22.2C264.9 433.6 215.8 480 156.3 480H112C50.1 480 0 429.9 0 368V352 310.7 304c0-1.9 .2-3.8 .5-5.7c.6-7.4 1.8-14.8 3.5-22.1l43.9-188C55.5 55.3 84.8 32 118.6 32c9.2 0 18.4 1.8 27 5.2l31.3 12.5c12.3 4.9 18.3 18.9 13.4 31.2s-18.9 18.3-31.2 13.4L127.8 81.8c-2.9-1.2-6-1.8-9.2-1.8zM64 325.4V368c0 26.5 21.5 48 48 48h44.3c25.5 0 46.5-19.9 47.9-45.3l2.5-45.6c-2.3-.8-4.9-1.7-7.5-2.5c-17.2-5.4-39.9-10.5-63.6-10.5c-23.7 0-46.2 5.1-63.2 10.5c-3.1 1-5.9 1.9-8.5 2.9zM512 368V325.4c-2.6-.9-5.5-1.9-8.5-2.9c-17-5.4-39.5-10.5-63.2-10.5c-23.7 0-46.4 5.1-63.6 10.5c-2.7 .8-5.2 1.7-7.5 2.5l2.5 45.6c1.4 25.4 22.5 45.3 47.9 45.3H464c26.5 0 48-21.5 48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M118.6 80c-11.5 0-21.4 7.9-24 19.1L57 260.3c20.5-6.2 48.3-12.3 78.7-12.3c32.3 0 61.8 6.9 82.8 13.5c10.6 3.3 19.3 6.7 25.4 9.2c3.1 1.3 5.5 2.4 7.3 3.2c.9 .4 1.6 .7 2.1 1l.6 .3 .2 .1 .1 0 0 0 0 0s0 0-6.3 12.7h0l6.3-12.7c5.8 2.9 10.4 7.3 13.5 12.7h40.6c3.1-5.3 7.7-9.8 13.5-12.7l6.3 12.7h0c-6.3-12.7-6.3-12.7-6.3-12.7l0 0 0 0 .1 0 .2-.1 .6-.3c.5-.2 1.2-.6 2.1-1c1.8-.8 4.2-1.9 7.3-3.2c6.1-2.6 14.8-5.9 25.4-9.2c21-6.6 50.4-13.5 82.8-13.5c30.4 0 58.2 6.1 78.7 12.3L481.4 99.1c-2.6-11.2-12.6-19.1-24-19.1c-3.1 0-6.2 .6-9.2 1.8L416.9 94.3c-12.3 4.9-26.3-1.1-31.2-13.4s1.1-26.3 13.4-31.2l31.3-12.5c8.6-3.4 17.7-5.2 27-5.2c33.8 0 63.1 23.3 70.8 56.2l43.9 188c1.7 7.3 2.9 14.7 3.5 22.1c.3 1.9 .5 3.8 .5 5.7v6.7V352v16c0 61.9-50.1 112-112 112H419.7c-59.4 0-108.5-46.4-111.8-105.8L306.6 352H269.4l-1.2 22.2C264.9 433.6 215.8 480 156.3 480H112C50.1 480 0 429.9 0 368V352 310.7 304c0-1.9 .2-3.8 .5-5.7c.6-7.4 1.8-14.8 3.5-22.1l43.9-188C55.5 55.3 84.8 32 118.6 32c9.2 0 18.4 1.8 27 5.2l31.3 12.5c12.3 4.9 18.3 18.9 13.4 31.2s-18.9 18.3-31.2 13.4L127.8 81.8c-2.9-1.2-6-1.8-9.2-1.8zM64 325.4V368c0 26.5 21.5 48 48 48h44.3c25.5 0 46.5-19.9 47.9-45.3l2.5-45.6c-2.3-.8-4.9-1.7-7.5-2.5c-17.2-5.4-39.9-10.5-63.6-10.5c-23.7 0-46.2 5.1-63.2 10.5c-3.1 1-5.9 1.9-8.5 2.9zM512 368V325.4c-2.6-.9-5.5-1.9-8.5-2.9c-17-5.4-39.5-10.5-63.2-10.5c-23.7 0-46.4 5.1-63.6 10.5c-2.7 .8-5.2 1.7-7.5 2.5l2.5 45.6c1.4 25.4 22.5 45.3 47.9 45.3H464c26.5 0 48-21.5 48-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"glide\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2a5\",\n    \"label\": \"Glide\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"glide-g\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2a6\",\n    \"label\": \"Glide G\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 117.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"globe\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f310\"],\n        \"secondary\": [\"10f0ac\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"all\",\n        \"coordinates\",\n        \"country\",\n        \"earth\",\n        \"global\",\n        \"globe\",\n        \"globe with meridians\",\n        \"gps\",\n        \"internet\",\n        \"language\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"meridians\",\n        \"network\",\n        \"online\",\n        \"place\",\n        \"planet\",\n        \"translate\",\n        \"travel\",\n        \"world\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ac\",\n    \"label\": \"Globe\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gofore\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a7\",\n    \"label\": \"Gofore\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 400 512\\\"><path d=\\\"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 400, 512],\n        \"width\": 400,\n        \"height\": 512,\n        \"path\": \"M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"golang\": {\n    \"changes\": [\"6.0.0-beta2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e40f\",\n    \"label\": \"Go\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M400.1 194.8C389.2 197.6 380.2 199.1 371 202.4C363.7 204.3 356.3 206.3 347.8 208.5L347.2 208.6C343 209.8 342.6 209.9 338.7 205.4C334 200.1 330.6 196.7 324.1 193.5C304.4 183.9 285.4 186.7 267.7 198.2C246.5 211.9 235.6 232.2 235.9 257.4C236.2 282.4 253.3 302.9 277.1 306.3C299.1 309.1 316.9 301.7 330.9 285.8C333 283.2 334.9 280.5 337 277.5V277.5L337 277.5C337.8 276.5 338.5 275.4 339.3 274.2H279.2C272.7 274.2 271.1 270.2 273.3 264.9C277.3 255.2 284.8 239 289.2 230.9C290.1 229.1 292.3 225.1 296.1 225.1H397.2C401.7 211.7 409 198.2 418.8 185.4C441.5 155.5 468.1 139.9 506 133.4C537.8 127.8 567.7 130.9 594.9 149.3C619.5 166.1 634.7 188.9 638.8 218.8C644.1 260.9 631.9 295.1 602.1 324.4C582.4 345.3 557.2 358.4 528.2 364.3C522.6 365.3 517.1 365.8 511.7 366.3C508.8 366.5 506 366.8 503.2 367.1C474.9 366.5 449 358.4 427.2 339.7C411.9 326.4 401.3 310.1 396.1 291.2C392.4 298.5 388.1 305.6 382.1 312.3C360.5 341.9 331.2 360.3 294.2 365.2C263.6 369.3 235.3 363.4 210.3 344.7C187.3 327.2 174.2 304.2 170.8 275.5C166.7 241.5 176.7 210.1 197.2 184.2C219.4 155.2 248.7 136.8 284.5 130.3C313.8 124.1 341.8 128.4 367.1 145.6C383.6 156.5 395.4 171.4 403.2 189.5C405.1 192.3 403.8 193.9 400.1 194.8zM48.3 200.4C47.05 200.4 46.74 199.8 47.36 198.8L53.91 190.4C54.53 189.5 56.09 188.9 57.34 188.9H168.6C169.8 188.9 170.1 189.8 169.5 190.7L164.2 198.8C163.6 199.8 162 200.7 161.1 200.7L48.3 200.4zM1.246 229.1C0 229.1-.3116 228.4 .3116 227.5L6.855 219.1C7.479 218.2 9.037 217.5 10.28 217.5H152.4C153.6 217.5 154.2 218.5 153.9 219.4L151.4 226.9C151.1 228.1 149.9 228.8 148.6 228.8L1.246 229.1zM75.72 255.9C75.1 256.8 75.41 257.7 76.65 257.7L144.6 258C145.5 258 146.8 257.1 146.8 255.9L147.4 248.4C147.4 247.1 146.8 246.2 145.5 246.2H83.2C81.95 246.2 80.71 247.1 80.08 248.1L75.72 255.9zM577.2 237.9C577 235.3 576.9 233.1 576.5 230.9C570.9 200.1 542.5 182.6 512.9 189.5C483.9 196 465.2 214.4 458.4 243.7C452.8 268 464.6 292.6 487 302.6C504.2 310.1 521.3 309.2 537.8 300.7C562.4 287.1 575.8 268 577.4 241.2C577.3 240 577.3 238.9 577.2 237.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"golf-ball-tee\": {\n    \"aliases\": {\n      \"names\": [\"golf-ball\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f450\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"caddy\", \"eagle\", \"putt\", \"tee\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f450\",\n    \"label\": \"Golf Ball Tee\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 192c0 66.8-34.1 125.6-85.8 160H85.8C34.1 317.6 0 258.8 0 192C0 86 86 0 192 0S384 86 384 192zM242.1 256.6c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zm-52.3-49.3c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4c0 18.5-15 33.5-33.5 33.5zm113.5-17.5c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zM96 416c0-17.7 14.3-32 32-32h64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H240c-8.8 0-16 7.2-16 16v16c0 17.7-14.3 32-32 32s-32-14.3-32-32V464c0-8.8-7.2-16-16-16H128c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 192c0 66.8-34.1 125.6-85.8 160H85.8C34.1 317.6 0 258.8 0 192C0 86 86 0 192 0S384 86 384 192zM242.1 256.6c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zm-52.3-49.3c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4c0 18.5-15 33.5-33.5 33.5zm113.5-17.5c0 18.5-15 33.5-33.5 33.5c-4.9 0-9.1 5.1-5.4 8.4c5.9 5.2 13.7 8.4 22.1 8.4c18.5 0 33.5-15 33.5-33.5c0-8.5-3.2-16.2-8.4-22.1c-3.3-3.7-8.4 .5-8.4 5.4zM96 416c0-17.7 14.3-32 32-32h64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H240c-8.8 0-16 7.2-16 16v16c0 17.7-14.3 32-32 32s-32-14.3-32-32V464c0-8.8-7.2-16-16-16H128c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"goodreads\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a8\",\n    \"label\": \"Goodreads\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"goodreads-g\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3a9\",\n    \"label\": \"Goodreads G\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a0\",\n    \"label\": \"Google Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 488 512\\\"><path d=\\\"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 488, 512],\n        \"width\": 488,\n        \"height\": 512,\n        \"path\": \"M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google-drive\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3aa\",\n    \"label\": \"Google Drive\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google-pay\": {\n    \"changes\": [\"5.13.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e079\",\n    \"label\": \"Google Pay\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014458,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M105.72,215v41.25h57.1a49.66,49.66,0,0,1-21.14,32.6c-9.54,6.55-21.72,10.28-36,10.28-27.6,0-50.93-18.91-59.3-44.22a65.61,65.61,0,0,1,0-41l0,0c8.37-25.46,31.7-44.37,59.3-44.37a56.43,56.43,0,0,1,40.51,16.08L176.47,155a101.24,101.24,0,0,0-70.75-27.84,105.55,105.55,0,0,0-94.38,59.11,107.64,107.64,0,0,0,0,96.18v.15a105.41,105.41,0,0,0,94.38,59c28.47,0,52.55-9.53,70-25.91,20-18.61,31.41-46.15,31.41-78.91A133.76,133.76,0,0,0,205.38,215Zm389.41-4c-10.13-9.38-23.93-14.14-41.39-14.14-22.46,0-39.34,8.34-50.5,24.86l20.85,13.26q11.45-17,31.26-17a34.05,34.05,0,0,1,22.75,8.79A28.14,28.14,0,0,1,487.79,248v5.51c-9.1-5.07-20.55-7.75-34.64-7.75-16.44,0-29.65,3.88-39.49,11.77s-14.82,18.31-14.82,31.56a39.74,39.74,0,0,0,13.94,31.27c9.25,8.34,21,12.51,34.79,12.51,16.29,0,29.21-7.3,39-21.89h1v17.72h22.61V250C510.25,233.45,505.26,220.34,495.13,211ZM475.9,300.3a37.32,37.32,0,0,1-26.57,11.16A28.61,28.61,0,0,1,431,305.21a19.41,19.41,0,0,1-7.77-15.63c0-7,3.22-12.81,9.54-17.42s14.53-7,24.07-7C470,265,480.3,268,487.64,273.94,487.64,284.07,483.68,292.85,475.9,300.3Zm-93.65-142A55.71,55.71,0,0,0,341.74,142H279.07V328.74H302.7V253.1h39c16,0,29.5-5.36,40.51-15.93.88-.89,1.76-1.79,2.65-2.68A54.45,54.45,0,0,0,382.25,158.26Zm-16.58,62.23a30.65,30.65,0,0,1-23.34,9.68H302.7V165h39.63a32,32,0,0,1,22.6,9.23A33.18,33.18,0,0,1,365.67,220.49ZM614.31,201,577.77,292.7h-.45L539.9,201H514.21L566,320.55l-29.35,64.32H561L640,201Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google-play\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ab\",\n    \"label\": \"Google Play\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google-plus\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"5.13.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"google-plus-circle\", \"google-plus-official\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2b3\",\n    \"label\": \"Google Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google-plus-g\": {\n    \"changes\": [\"2.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"google-plus\", \"social network\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f0d5\",\n    \"label\": \"Google Plus G\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"google-wallet\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1ee\",\n    \"label\": \"Google Wallet\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gopuram\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f664\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.7.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"entrance\", \"hinduism\", \"temple\", \"tower\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f664\",\n    \"label\": \"Gopuram\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M120 0c13.3 0 24 10.7 24 24v8h40V24c0-13.3 10.7-24 24-24s24 10.7 24 24v8h48V24c0-13.3 10.7-24 24-24s24 10.7 24 24v8h40V24c0-13.3 10.7-24 24-24s24 10.7 24 24v8V64v64c17.7 0 32 14.3 32 32v64c17.7 0 32 14.3 32 32v96c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H416V352H384V224H352V128H320v96h32V352h32V512H304V464c0-26.5-21.5-48-48-48s-48 21.5-48 48v48H128V352h32V224h32V128H160v96H128V352H96V512H32c-17.7 0-32-14.3-32-32V384c0-17.7 14.3-32 32-32V256c0-17.7 14.3-32 32-32V160c0-17.7 14.3-32 32-32V64 32 24c0-13.3 10.7-24 24-24zM256 272c-17.7 0-32 14.3-32 32v48h64V304c0-17.7-14.3-32-32-32zm-32-80v32h64V192c0-17.7-14.3-32-32-32s-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M120 0c13.3 0 24 10.7 24 24v8h40V24c0-13.3 10.7-24 24-24s24 10.7 24 24v8h48V24c0-13.3 10.7-24 24-24s24 10.7 24 24v8h40V24c0-13.3 10.7-24 24-24s24 10.7 24 24v8V64v64c17.7 0 32 14.3 32 32v64c17.7 0 32 14.3 32 32v96c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H416V352H384V224H352V128H320v96h32V352h32V512H304V464c0-26.5-21.5-48-48-48s-48 21.5-48 48v48H128V352h32V224h32V128H160v96H128V352H96V512H32c-17.7 0-32-14.3-32-32V384c0-17.7 14.3-32 32-32V256c0-17.7 14.3-32 32-32V160c0-17.7 14.3-32 32-32V64 32 24c0-13.3 10.7-24 24-24zM256 272c-17.7 0-32 14.3-32 32v48h64V304c0-17.7-14.3-32-32-32zm-32-80v32h64V192c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"graduation-cap\": {\n    \"aliases\": {\n      \"names\": [\"mortar-board\"],\n      \"unicodes\": {\n        \"composite\": [\"1f393\"],\n        \"secondary\": [\"10f19d\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cap\",\n        \"celebration\",\n        \"ceremony\",\n        \"clothing\",\n        \"college\",\n        \"graduate\",\n        \"graduation\",\n        \"graduation cap\",\n        \"hat\",\n        \"learning\",\n        \"school\",\n        \"student\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f19d\",\n    \"label\": \"Graduation Cap\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 32c-8.1 0-16.1 1.4-23.7 4.1L15.8 137.4C6.3 140.9 0 149.9 0 160s6.3 19.1 15.8 22.6l57.9 20.9C57.3 229.3 48 259.8 48 291.9v28.1c0 28.4-10.8 57.7-22.3 80.8c-6.5 13-13.9 25.8-22.5 37.6C0 442.7-.9 448.3 .9 453.4s6 8.9 11.2 10.2l64 16c4.2 1.1 8.7 .3 12.4-2s6.3-6.1 7.1-10.4c8.6-42.8 4.3-81.2-2.1-108.7C90.3 344.3 86 329.8 80 316.5V291.9c0-30.2 10.2-58.7 27.9-81.5c12.9-15.5 29.6-28 49.2-35.7l157-61.7c8.2-3.2 17.5 .8 20.7 9s-.8 17.5-9 20.7l-157 61.7c-12.4 4.9-23.3 12.4-32.2 21.6l159.6 57.6c7.6 2.7 15.6 4.1 23.7 4.1s16.1-1.4 23.7-4.1L624.2 182.6c9.5-3.4 15.8-12.5 15.8-22.6s-6.3-19.1-15.8-22.6L343.7 36.1C336.1 33.4 328.1 32 320 32zM128 408c0 35.3 86 72 192 72s192-36.7 192-72L496.7 262.6 354.5 314c-11.1 4-22.8 6-34.5 6s-23.5-2-34.5-6L143.3 262.6 128 408z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gratipay\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"favorite\", \"heart\", \"like\", \"love\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f184\",\n    \"label\": \"Gratipay (Gittip)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"grav\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2d6\",\n    \"label\": \"Grav\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"greater-than\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f531\"],\n        \"primary\": [\"f531\"],\n        \"secondary\": [\"103e\", \"10f531\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Greater-Than Sign\", \"arithmetic\", \"compare\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"3e\",\n    \"label\": \"Greater Than\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M3.4 81.7c-7.9 15.8-1.5 35 14.3 42.9L280.5 256 17.7 387.4C1.9 395.3-4.5 414.5 3.4 430.3s27.1 22.2 42.9 14.3l320-160c10.8-5.4 17.7-16.5 17.7-28.6s-6.8-23.2-17.7-28.6l-320-160c-15.8-7.9-35-1.5-42.9 14.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M3.4 81.7c-7.9 15.8-1.5 35 14.3 42.9L280.5 256 17.7 387.4C1.9 395.3-4.5 414.5 3.4 430.3s27.1 22.2 42.9 14.3l320-160c10.8-5.4 17.7-16.5 17.7-28.6s-6.8-23.2-17.7-28.6l-320-160c-15.8-7.9-35-1.5-42.9 14.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"greater-than-equal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f532\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arithmetic\", \"compare\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f532\",\n    \"label\": \"Greater Than Equal\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M52.1 93.7C35.7 87.1 27.7 68.5 34.3 52.1s25.2-24.4 41.6-17.8l320 128C408 167.1 416 178.9 416 192s-8 24.9-20.1 29.7l-320 128c-16.4 6.6-35-1.4-41.6-17.8s1.4-35 17.8-41.6L297.8 192 52.1 93.7zM416 416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M52.1 93.7C35.7 87.1 27.7 68.5 34.3 52.1s25.2-24.4 41.6-17.8l320 128C408 167.1 416 178.9 416 192s-8 24.9-20.1 29.7l-320 128c-16.4 6.6-35-1.4-41.6-17.8s1.4-35 17.8-41.6L297.8 192 52.1 93.7zM416 416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"grip\": {\n    \"aliases\": {\n      \"names\": [\"grip-horizontal\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f58d\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affordance\", \"drag\", \"drop\", \"grab\", \"handle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f58d\",\n    \"label\": \"Grip\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40H40c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40H200c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40H360c-22.1 0-40 17.9-40 40v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 136c0-22.1-17.9-40-40-40L40 96C17.9 96 0 113.9 0 136l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40H40c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40H88c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM288 328c0-22.1-17.9-40-40-40H200c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328zm32-192v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V136c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM448 328c0-22.1-17.9-40-40-40H360c-22.1 0-40 17.9-40 40v48c0 22.1 17.9 40 40 40h48c22.1 0 40-17.9 40-40V328z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"grip-lines\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7a4\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affordance\", \"drag\", \"drop\", \"grab\", \"handle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7a4\",\n    \"label\": \"Grip Lines\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 288zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32l384 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"grip-lines-vertical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7a5\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affordance\", \"drag\", \"drop\", \"grab\", \"handle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7a5\",\n    \"label\": \"Grip Lines Vertical\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 192 512\\\"><path d=\\\"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64zm128 0c0-17.7-14.3-32-32-32s-32 14.3-32 32V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 192, 512],\n        \"width\": 192,\n        \"height\": 512,\n        \"path\": \"M64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64zm128 0c0-17.7-14.3-32-32-32s-32 14.3-32 32V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"grip-vertical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f58e\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affordance\", \"drag\", \"drop\", \"grab\", \"handle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f58e\",\n    \"label\": \"Grip Vertical\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M40 352l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm192 0l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 320c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 192l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 160c-22.1 0-40-17.9-40-40L0 72C0 49.9 17.9 32 40 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M40 352l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zm192 0l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 320c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 192l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40zM40 160c-22.1 0-40-17.9-40-40L0 72C0 49.9 17.9 32 40 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0zM232 32l48 0c22.1 0 40 17.9 40 40l0 48c0 22.1-17.9 40-40 40l-48 0c-22.1 0-40-17.9-40-40l0-48c0-22.1 17.9-40 40-40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gripfire\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ac\",\n    \"label\": \"Gripfire, Inc.\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M112.5 301.4c0-73.8 105.1-122.5 105.1-203 0-47.1-34-88-39.1-90.4.4 3.3.6 6.7.6 10C179.1 110.1 32 171.9 32 286.6c0 49.8 32.2 79.2 66.5 108.3 65.1 46.7 78.1 71.4 78.1 86.6 0 10.1-4.8 17-4.8 22.3 13.1-16.7 17.4-31.9 17.5-46.4 0-29.6-21.7-56.3-44.2-86.5-16-22.3-32.6-42.6-32.6-69.5zm205.3-39c-12.1-66.8-78-124.4-94.7-130.9l4 7.2c2.4 5.1 3.4 10.9 3.4 17.1 0 44.7-54.2 111.2-56.6 116.7-2.2 5.1-3.2 10.5-3.2 15.8 0 20.1 15.2 42.1 17.9 42.1 2.4 0 56.6-55.4 58.1-87.7 6.4 11.7 9.1 22.6 9.1 33.4 0 41.2-41.8 96.9-41.8 96.9 0 11.6 31.9 53.2 35.5 53.2 1 0 2.2-1.4 3.2-2.4 37.9-39.3 67.3-85 67.3-136.8 0-8-.7-16.2-2.2-24.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"group-arrows-rotate\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"community\", \"engagement\", \"spin\", \"sync\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f6\",\n    \"label\": \"Group Arrows Rotate\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M201.1 71.9c16.9-5 26.6-22.9 21.5-39.8s-22.9-26.6-39.8-21.5c-21.5 6.4-41.8 15.5-60.6 27C114.3 34 105.4 32 96 32C60.7 32 32 60.7 32 96c0 9.4 2 18.3 5.6 26.3c-11.5 18.7-20.6 39-27 60.6c-5 16.9 4.6 34.8 21.5 39.8s34.8-4.6 39.8-21.5c4.3-14.6 10.4-28.5 17.9-41.4c2 .2 4.1 .3 6.1 .3c35.3 0 64-28.7 64-64c0-2.1-.1-4.1-.3-6.1c12.9-7.5 26.8-13.6 41.4-17.9zm128-61.3c-16.9-5-34.8 4.6-39.8 21.5s4.6 34.8 21.5 39.8c14.6 4.3 28.5 10.4 41.4 17.9c-.2 2-.3 4.1-.3 6.1c0 35.3 28.7 64 64 64c2.1 0 4.1-.1 6.2-.3c7.5 12.9 13.6 26.8 17.9 41.4c5 16.9 22.9 26.6 39.8 21.5s26.6-22.9 21.5-39.8c-6.4-21.5-15.5-41.8-27-60.6c3.6-8 5.6-16.9 5.6-26.3c0-35.3-28.7-64-64-64c-9.4 0-18.3 2-26.3 5.6c-18.7-11.5-39-20.6-60.6-27zM71.9 310.9c-5-16.9-22.9-26.6-39.8-21.5s-26.6 22.9-21.5 39.8c6.4 21.5 15.5 41.8 27 60.6C34 397.7 32 406.6 32 416c0 35.3 28.7 64 64 64c9.4 0 18.3-2 26.3-5.6c18.7 11.5 39 20.6 60.6 27c16.9 5 34.8-4.6 39.8-21.5s-4.6-34.8-21.5-39.8c-14.6-4.3-28.5-10.4-41.4-17.9c.2-2 .3-4.1 .3-6.2c0-35.3-28.7-64-64-64c-2.1 0-4.1 .1-6.2 .3c-7.5-12.9-13.6-26.8-17.9-41.4zm429.4 18.3c5-16.9-4.6-34.8-21.5-39.8s-34.8 4.6-39.8 21.5c-4.3 14.6-10.4 28.5-17.9 41.4c-2-.2-4.1-.3-6.2-.3c-35.3 0-64 28.7-64 64c0 2.1 .1 4.1 .3 6.2c-12.9 7.5-26.8 13.6-41.4 17.9c-16.9 5-26.6 22.9-21.5 39.8s22.9 26.6 39.8 21.5c21.5-6.4 41.8-15.5 60.6-27c8 3.6 16.9 5.6 26.3 5.6c35.3 0 64-28.7 64-64c0-9.4-2-18.3-5.6-26.3c11.5-18.7 20.6-39 27-60.6zM192.8 256.8c0-15.6 5.6-29.9 14.9-41.1L223 231c6.6 6.6 17.8 1.9 17.8-7.4V163.2c0-5.7-4.7-10.4-10.4-10.4H169.9c-9.3 0-13.9 11.2-7.4 17.8l11.2 11.2c-17.9 19.8-28.9 46.2-28.9 75.1c0 43.6 24.9 81.3 61.1 99.8c11.8 6 26.3 1.4 32.3-10.4s1.4-26.3-10.4-32.3c-20.8-10.6-34.9-32.2-34.9-57zm93.1-58.6c20.8 10.6 34.9 32.2 34.9 57c0 15.6-5.6 29.9-14.9 41.1L290.6 281c-6.6-6.6-17.8-1.9-17.8 7.4v60.5c0 5.7 4.7 10.4 10.4 10.4h60.5c9.3 0 13.9-11.2 7.4-17.8l-11.2-11.2c17.9-19.8 28.9-46.2 28.9-75.1c0-43.6-24.9-81.3-61.1-99.8c-11.8-6-26.3-1.4-32.3 10.4s-1.4 26.3 10.4 32.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M201.1 71.9c16.9-5 26.6-22.9 21.5-39.8s-22.9-26.6-39.8-21.5c-21.5 6.4-41.8 15.5-60.6 27C114.3 34 105.4 32 96 32C60.7 32 32 60.7 32 96c0 9.4 2 18.3 5.6 26.3c-11.5 18.7-20.6 39-27 60.6c-5 16.9 4.6 34.8 21.5 39.8s34.8-4.6 39.8-21.5c4.3-14.6 10.4-28.5 17.9-41.4c2 .2 4.1 .3 6.1 .3c35.3 0 64-28.7 64-64c0-2.1-.1-4.1-.3-6.1c12.9-7.5 26.8-13.6 41.4-17.9zm128-61.3c-16.9-5-34.8 4.6-39.8 21.5s4.6 34.8 21.5 39.8c14.6 4.3 28.5 10.4 41.4 17.9c-.2 2-.3 4.1-.3 6.1c0 35.3 28.7 64 64 64c2.1 0 4.1-.1 6.2-.3c7.5 12.9 13.6 26.8 17.9 41.4c5 16.9 22.9 26.6 39.8 21.5s26.6-22.9 21.5-39.8c-6.4-21.5-15.5-41.8-27-60.6c3.6-8 5.6-16.9 5.6-26.3c0-35.3-28.7-64-64-64c-9.4 0-18.3 2-26.3 5.6c-18.7-11.5-39-20.6-60.6-27zM71.9 310.9c-5-16.9-22.9-26.6-39.8-21.5s-26.6 22.9-21.5 39.8c6.4 21.5 15.5 41.8 27 60.6C34 397.7 32 406.6 32 416c0 35.3 28.7 64 64 64c9.4 0 18.3-2 26.3-5.6c18.7 11.5 39 20.6 60.6 27c16.9 5 34.8-4.6 39.8-21.5s-4.6-34.8-21.5-39.8c-14.6-4.3-28.5-10.4-41.4-17.9c.2-2 .3-4.1 .3-6.2c0-35.3-28.7-64-64-64c-2.1 0-4.1 .1-6.2 .3c-7.5-12.9-13.6-26.8-17.9-41.4zm429.4 18.3c5-16.9-4.6-34.8-21.5-39.8s-34.8 4.6-39.8 21.5c-4.3 14.6-10.4 28.5-17.9 41.4c-2-.2-4.1-.3-6.2-.3c-35.3 0-64 28.7-64 64c0 2.1 .1 4.1 .3 6.2c-12.9 7.5-26.8 13.6-41.4 17.9c-16.9 5-26.6 22.9-21.5 39.8s22.9 26.6 39.8 21.5c21.5-6.4 41.8-15.5 60.6-27c8 3.6 16.9 5.6 26.3 5.6c35.3 0 64-28.7 64-64c0-9.4-2-18.3-5.6-26.3c11.5-18.7 20.6-39 27-60.6zM192.8 256.8c0-15.6 5.6-29.9 14.9-41.1L223 231c6.6 6.6 17.8 1.9 17.8-7.4V163.2c0-5.7-4.7-10.4-10.4-10.4H169.9c-9.3 0-13.9 11.2-7.4 17.8l11.2 11.2c-17.9 19.8-28.9 46.2-28.9 75.1c0 43.6 24.9 81.3 61.1 99.8c11.8 6 26.3 1.4 32.3-10.4s1.4-26.3-10.4-32.3c-20.8-10.6-34.9-32.2-34.9-57zm93.1-58.6c20.8 10.6 34.9 32.2 34.9 57c0 15.6-5.6 29.9-14.9 41.1L290.6 281c-6.6-6.6-17.8-1.9-17.8 7.4v60.5c0 5.7 4.7 10.4 10.4 10.4h60.5c9.3 0 13.9-11.2 7.4-17.8l-11.2-11.2c17.9-19.8 28.9-46.2 28.9-75.1c0-43.6-24.9-81.3-61.1-99.8c-11.8-6-26.3-1.4-32.3 10.4s-1.4 26.3 10.4 32.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"grunt\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ad\",\n    \"label\": \"Grunt\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm142.1 45.8c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm62.7-45.8c3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6 7.5-11.4 25.4-26 44.9-37zM160 418.5h-29.4c-5.5 0-8.2 1.6-9.5 2.9-1.9 2-2.2 4.7-.9 8.1 3.5 9.1 11.4 16.5 13.7 18.6 3.1 2.7 7.5 4.3 11.8 4.3 4.4 0 8.3-1.7 11-4.6 7.5-8.2 11.9-17.1 13-19.8.6-1.5 1.3-4.5-.9-6.8-1.8-1.8-4.7-2.7-8.8-2.7zm189.2-101.2c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59zM191.9 187.7h.2c12.7-.1 27.2-17.8 27.2-17.8-9.9 6-18.8 8.1-27.3 8.3-8.5-.2-17.4-2.3-27.3-8.3 0 0 14.5 17.6 27.2 17.8zm61.7 230.7h-29.4c-4.2 0-7.2.9-8.9 2.7-2.2 2.3-1.5 5.2-.9 6.7 1 2.6 5.5 11.3 13 19.3 2.7 2.9 6.6 4.5 11 4.5s8.7-1.6 11.8-4.2c2.3-2 10.2-9.2 13.7-18.1 1.3-3.3 1-6-.9-7.9-1.3-1.3-4-2.9-9.4-3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"guarani-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Guarani Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e19a\",\n    \"label\": \"Guarani Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0c-17.7 0-32 14.3-32 32V66.7C69.2 81.9 0 160.9 0 256s69.2 174.1 160 189.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V445.3c90.8-15.2 160-94.2 160-189.3c0-17.7-14.3-32-32-32H224V132c22.1 5.7 41.8 17.1 57.6 32.6c12.6 12.4 32.9 12.2 45.3-.4s12.2-32.9-.5-45.3C299 92 263.5 73.3 224 66.7V32c0-17.7-14.3-32-32-32zM160 132V380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124zM224 380V288h92c-11.6 45-47 80.4-92 92z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0c-17.7 0-32 14.3-32 32V66.7C69.2 81.9 0 160.9 0 256s69.2 174.1 160 189.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V445.3c90.8-15.2 160-94.2 160-189.3c0-17.7-14.3-32-32-32H224V132c22.1 5.7 41.8 17.1 57.6 32.6c12.6 12.4 32.9 12.2 45.3-.4s12.2-32.9-.5-45.3C299 92 263.5 73.3 224 66.7V32c0-17.7-14.3-32-32-32zM160 132V380c-55.2-14.2-96-64.3-96-124s40.8-109.8 96-124zM224 380V288h92c-11.6 45-47 80.4-92 92z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"guilded\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e07e\",\n    \"label\": \"Guilded\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M443.427,64H4.571c0,103.26,22.192,180.06,43.418,222.358C112.046,414.135,224,448,225.256,448a312.824,312.824,0,0,0,140.55-103.477c25.907-33.923,53.1-87.19,65.916-145.761H171.833c4.14,36.429,22.177,67.946,45.1,86.944h88.589c-17.012,28.213-48.186,54.4-80.456,69.482-31.232-13.259-69.09-46.544-96.548-98.362-26.726-53.833-27.092-105.883-27.092-105.883H437.573A625.91,625.91,0,0,0,443.427,64Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M443.427,64H4.571c0,103.26,22.192,180.06,43.418,222.358C112.046,414.135,224,448,225.256,448a312.824,312.824,0,0,0,140.55-103.477c25.907-33.923,53.1-87.19,65.916-145.761H171.833c4.14,36.429,22.177,67.946,45.1,86.944h88.589c-17.012,28.213-48.186,54.4-80.456,69.482-31.232-13.259-69.09-46.544-96.548-98.362-26.726-53.833-27.092-105.883-27.092-105.883H437.573A625.91,625.91,0,0,0,443.427,64Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"guitar\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7a6\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"acoustic\",\n        \"instrument\",\n        \"music\",\n        \"rock\",\n        \"rock and roll\",\n        \"song\",\n        \"strings\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7a6\",\n    \"label\": \"Guitar\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M465 7c-9.4-9.4-24.6-9.4-33.9 0L383 55c-2.4 2.4-4.3 5.3-5.5 8.5l-15.4 41-77.5 77.6c-45.1-29.4-99.3-30.2-131 1.6c-11 11-18 24.6-21.4 39.6c-3.7 16.6-19.1 30.7-36.1 31.6c-25.6 1.3-49.3 10.7-67.3 28.6C-16 328.4-7.6 409.4 47.5 464.5s136.1 63.5 180.9 18.7c17.9-17.9 27.4-41.7 28.6-67.3c.9-17 15-32.3 31.6-36.1c15-3.4 28.6-10.5 39.6-21.4c31.8-31.8 31-85.9 1.6-131l77.6-77.6 41-15.4c3.2-1.2 6.1-3.1 8.5-5.5l48-48c9.4-9.4 9.4-24.6 0-33.9L465 7zM208 256a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M465 7c-9.4-9.4-24.6-9.4-33.9 0L383 55c-2.4 2.4-4.3 5.3-5.5 8.5l-15.4 41-77.5 77.6c-45.1-29.4-99.3-30.2-131 1.6c-11 11-18 24.6-21.4 39.6c-3.7 16.6-19.1 30.7-36.1 31.6c-25.6 1.3-49.3 10.7-67.3 28.6C-16 328.4-7.6 409.4 47.5 464.5s136.1 63.5 180.9 18.7c17.9-17.9 27.4-41.7 28.6-67.3c.9-17 15-32.3 31.6-36.1c15-3.4 28.6-10.5 39.6-21.4c31.8-31.8 31-85.9 1.6-131l77.6-77.6 41-15.4c3.2-1.2 6.1-3.1 8.5-5.5l48-48c9.4-9.4 9.4-24.6 0-33.9L465 7zM208 256a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"gulp\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ae\",\n    \"label\": \"Gulp\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.6 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"gun\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"firearm\", \"pistol\", \"weapon\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e19b\",\n    \"label\": \"Gun\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24v8H32C14.3 64 0 78.3 0 96V208c0 17.7 14.3 32 32 32H42c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480h96c14.7 0 27.5-10 31-24.2L217 352H321.4c23.7 0 44.8-14.9 52.7-37.2L400.9 240H432c8.5 0 16.6-3.4 22.6-9.4L477.3 208H544c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32H528V56zM321.4 304H229l16-64h105l-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128H464c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M528 56c0-13.3-10.7-24-24-24s-24 10.7-24 24v8H32C14.3 64 0 78.3 0 96V208c0 17.7 14.3 32 32 32H42c20.8 0 36.1 19.6 31 39.8L33 440.2c-2.4 9.6-.2 19.7 5.8 27.5S54.1 480 64 480h96c14.7 0 27.5-10 31-24.2L217 352H321.4c23.7 0 44.8-14.9 52.7-37.2L400.9 240H432c8.5 0 16.6-3.4 22.6-9.4L477.3 208H544c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32H528V56zM321.4 304H229l16-64h105l-21 58.7c-1.1 3.2-4.2 5.3-7.5 5.3zM80 128H464c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"h\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"68\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter H\", \"Latin Small Letter H\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"48\",\n    \"label\": \"H\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M320 256l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V192L64 192 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M320 256l0 192c0 17.7 14.3 32 32 32s32-14.3 32-32l0-224V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V192L64 192 64 64c0-17.7-14.3-32-32-32S0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-192 256 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hacker-news\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d4\",\n    \"label\": \"Hacker News\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hackerrank\": {\n    \"changes\": [\"5.2.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5f7\",\n    \"label\": \"Hackerrank\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M477.5 128C463 103.05 285.13 0 256.16 0S49.25 102.79 34.84 128s-14.49 230.8 0 256 192.38 128 221.32 128S463 409.08 477.49 384s14.51-231 .01-256zM316.13 414.22c-4 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32 0-2-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 6-5.74 5.94-10.13 0-20.27-.11-30.41-.08-4.1 0-5.87-1.53-5.74-6.11.92-33.44 3-84-.15-212.67v-3.17c-9.67-.35-16.38-1-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69s41.17 35.78 38.27 38.69c-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46 0 4.57 1.72 4.5 5.38C333 354.64 336 341.29 336 373.69c8.87.35 16.82 1 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hammer\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f528\"],\n        \"secondary\": [\"10f6e3\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"fix\",\n        \"hammer\",\n        \"recovery\",\n        \"repair\",\n        \"settings\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6e3\",\n    \"label\": \"Hammer\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6V105.5L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0h18.1c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M413.5 237.5c-28.2 4.8-58.2-3.6-80-25.4l-38.1-38.1C280.4 159 272 138.8 272 117.6V105.5L192.3 62c-5.3-2.9-8.6-8.6-8.3-14.7s3.9-11.5 9.5-14l47.2-21C259.1 4.2 279 0 299.2 0h18.1c36.7 0 72 14 98.7 39.1l44.6 42c24.2 22.8 33.2 55.7 26.6 86L503 183l8-8c9.4-9.4 24.6-9.4 33.9 0l24 24c9.4 9.4 9.4 24.6 0 33.9l-88 88c-9.4 9.4-24.6 9.4-33.9 0l-24-24c-9.4-9.4-9.4-24.6 0-33.9l8-8-17.5-17.5zM27.4 377.1L260.9 182.6c3.5 4.9 7.5 9.6 11.8 14l38.1 38.1c6 6 12.4 11.2 19.2 15.7L134.9 484.6c-14.5 17.4-36 27.4-58.6 27.4C34.1 512 0 477.8 0 435.7c0-22.6 10.1-44.1 27.4-58.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hamsa\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f665\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"amulet\",\n        \"christianity\",\n        \"islam\",\n        \"jewish\",\n        \"judaism\",\n        \"muslim\",\n        \"protection\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f665\",\n    \"label\": \"Hamsa\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M34.6 288H80c8.8 0 16-7.2 16-16V72c0-22.1 17.9-40 40-40s40 17.9 40 40V204c0 11 9 20 20 20s20-9 20-20V40c0-22.1 17.9-40 40-40s40 17.9 40 40V204c0 11 9 20 20 20s20-9 20-20V72c0-22.1 17.9-40 40-40s40 17.9 40 40V272c0 8.8 7.2 16 16 16h45.4c19.1 0 34.6 15.5 34.6 34.6c0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71s-119.4-25.8-160.6-71L9 345.9c-5.8-6.4-9-14.7-9-23.3C0 303.5 15.5 288 34.6 288zM256 288c-38.4 0-76.8 35.8-90.6 50.2c-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M34.6 288H80c8.8 0 16-7.2 16-16V72c0-22.1 17.9-40 40-40s40 17.9 40 40V204c0 11 9 20 20 20s20-9 20-20V40c0-22.1 17.9-40 40-40s40 17.9 40 40V204c0 11 9 20 20 20s20-9 20-20V72c0-22.1 17.9-40 40-40s40 17.9 40 40V272c0 8.8 7.2 16 16 16h45.4c19.1 0 34.6 15.5 34.6 34.6c0 8.6-3.2 16.9-9 23.3L416.6 441c-41.1 45.2-99.4 71-160.6 71s-119.4-25.8-160.6-71L9 345.9c-5.8-6.4-9-14.7-9-23.3C0 303.5 15.5 288 34.6 288zM256 288c-38.4 0-76.8 35.8-90.6 50.2c-3.6 3.7-5.4 8.7-5.4 13.8s1.8 10.1 5.4 13.8C179.2 380.2 217.6 416 256 416s76.8-35.8 90.6-50.2c3.6-3.7 5.4-8.7 5.4-13.8s-1.8-10.1-5.4-13.8C332.8 323.8 294.4 288 256 288zm0 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand\": {\n    \"aliases\": {\n      \"names\": [\"hand-paper\"],\n      \"unicodes\": {\n        \"composite\": [\"1f91a\", \"270b\"],\n        \"secondary\": [\"10f256\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Raised Hand\",\n        \"backhand\",\n        \"game\",\n        \"halt\",\n        \"palm\",\n        \"raised\",\n        \"raised back of hand\",\n        \"roshambo\",\n        \"stop\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f256\",\n    \"label\": \"Hand\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V336c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64H304c97.2 0 176-78.8 176-176V128c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V336c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64H304c97.2 0 176-78.8 176-176V128c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c-25.3 0-47.2 14.7-57.6 36c-7-2.6-14.5-4-22.4-4c-35.3 0-64 28.7-64 64V261.5l-2.7-2.7c-25-25-65.5-25-90.5 0s-25 65.5 0 90.5L106.5 437c48 48 113.1 75 181 75H296h8c1.5 0 3-.1 4.5-.4c91.7-6.2 165-79.4 171.1-171.1c.3-1.5 .4-3 .4-4.5V160c0-35.3-28.7-64-64-64c-5.5 0-10.9 .7-16 2V96c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4C303.2 14.7 281.3 0 256 0zM240 96.1c0 0 0-.1 0-.1V64c0-8.8 7.2-16 16-16s16 7.2 16 16V95.9c0 0 0 .1 0 .1V232c0 13.3 10.7 24 24 24s24-10.7 24-24V96c0 0 0 0 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16v55.9c0 0 0 .1 0 .1v80c0 13.3 10.7 24 24 24s24-10.7 24-24V160.1c0 0 0-.1 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16V332.9c-.1 .6-.1 1.3-.2 1.9c-3.4 69.7-59.3 125.6-129 129c-.6 0-1.3 .1-1.9 .2H296h-8.5c-55.2 0-108.1-21.9-147.1-60.9L52.7 315.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L119 336.4c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V96c0-8.8 7.2-16 16-16c8.8 0 16 7.1 16 15.9V232c0 13.3 10.7 24 24 24s24-10.7 24-24V96.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c-25.3 0-47.2 14.7-57.6 36c-7-2.6-14.5-4-22.4-4c-35.3 0-64 28.7-64 64V261.5l-2.7-2.7c-25-25-65.5-25-90.5 0s-25 65.5 0 90.5L106.5 437c48 48 113.1 75 181 75H296h8c1.5 0 3-.1 4.5-.4c91.7-6.2 165-79.4 171.1-171.1c.3-1.5 .4-3 .4-4.5V160c0-35.3-28.7-64-64-64c-5.5 0-10.9 .7-16 2V96c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4C303.2 14.7 281.3 0 256 0zM240 96.1c0 0 0-.1 0-.1V64c0-8.8 7.2-16 16-16s16 7.2 16 16V95.9c0 0 0 .1 0 .1V232c0 13.3 10.7 24 24 24s24-10.7 24-24V96c0 0 0 0 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16v55.9c0 0 0 .1 0 .1v80c0 13.3 10.7 24 24 24s24-10.7 24-24V160.1c0 0 0-.1 0-.1c0-8.8 7.2-16 16-16s16 7.2 16 16V332.9c-.1 .6-.1 1.3-.2 1.9c-3.4 69.7-59.3 125.6-129 129c-.6 0-1.3 .1-1.9 .2H296h-8.5c-55.2 0-108.1-21.9-147.1-60.9L52.7 315.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L119 336.4c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V96c0-8.8 7.2-16 16-16c8.8 0 16 7.1 16 15.9V232c0 13.3 10.7 24 24 24s24-10.7 24-24V96.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-back-fist\": {\n    \"aliases\": {\n      \"names\": [\"hand-rock\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f255\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"fist\", \"game\", \"roshambo\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f255\",\n    \"label\": \"Hand Back Fist\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M144 0C117.5 0 96 21.5 96 48V96v28.5V176c0 8.8-7.2 16-16 16s-16-7.2-16-16V149.3l-9 7.5C40.4 169 32 187 32 206V244c0 38 16.9 74 46.1 98.3L128 384v96c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V374.7c46.9-19 80-65 80-118.7V176 160 144c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 83.5 329.3 64 304 64c-12.4 0-23.6 4.7-32.1 12.3C270 51.5 249.3 32 224 32c-12.4 0-23.6 4.7-32.1 12.3C190 19.5 169.3 0 144 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M144 0C117.5 0 96 21.5 96 48V96v28.5V176c0 8.8-7.2 16-16 16s-16-7.2-16-16V149.3l-9 7.5C40.4 169 32 187 32 206V244c0 38 16.9 74 46.1 98.3L128 384v96c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V374.7c46.9-19 80-65 80-118.7V176 160 144c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 83.5 329.3 64 304 64c-12.4 0-23.6 4.7-32.1 12.3C270 51.5 249.3 32 224 32c-12.4 0-23.6 4.7-32.1 12.3C190 19.5 169.3 0 144 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M144 64c0-8.8 7.2-16 16-16s16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16V264c0 31.3-20 58-48 67.9c-9.6 3.4-16 12.5-16 22.6V488c0 13.3 10.7 24 24 24s24-10.7 24-24V370.2c38-20.1 64-60.1 64-106.2V160c0-35.3-28.7-64-64-64c-2.8 0-5.6 .2-8.3 .5C332.8 77.1 311.9 64 288 64c-2.8 0-5.6 .2-8.3 .5C268.8 45.1 247.9 32 224 32c-2.8 0-5.6 .2-8.3 .5C204.8 13.1 183.9 0 160 0C124.7 0 96 28.7 96 64v64.3c-11.7 7.4-22.5 16.4-32 26.9l17.8 16.1L64 155.2l-9.4 10.5C40 181.8 32 202.8 32 224.6v12.8c0 49.6 24.2 96.1 64.8 124.5l13.8-19.7L96.8 361.9l8.9 6.2c6.9 4.8 14.4 8.6 22.3 11.3V488c0 13.3 10.7 24 24 24s24-10.7 24-24V359.9c0-12.6-9.8-23.1-22.4-23.9c-7.3-.5-14.3-2.9-20.3-7.1l-13.1 18.7 13.1-18.7-8.9-6.2C96.6 303.1 80 271.3 80 237.4V224.6c0-9.9 3.7-19.4 10.3-26.8l9.4-10.5c3.8-4.2 7.9-8.1 12.3-11.6V208c0 8.8 7.2 16 16 16s16-7.2 16-16V142.3 128 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M144 64c0-8.8 7.2-16 16-16s16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16V264c0 31.3-20 58-48 67.9c-9.6 3.4-16 12.5-16 22.6V488c0 13.3 10.7 24 24 24s24-10.7 24-24V370.2c38-20.1 64-60.1 64-106.2V160c0-35.3-28.7-64-64-64c-2.8 0-5.6 .2-8.3 .5C332.8 77.1 311.9 64 288 64c-2.8 0-5.6 .2-8.3 .5C268.8 45.1 247.9 32 224 32c-2.8 0-5.6 .2-8.3 .5C204.8 13.1 183.9 0 160 0C124.7 0 96 28.7 96 64v64.3c-11.7 7.4-22.5 16.4-32 26.9l17.8 16.1L64 155.2l-9.4 10.5C40 181.8 32 202.8 32 224.6v12.8c0 49.6 24.2 96.1 64.8 124.5l13.8-19.7L96.8 361.9l8.9 6.2c6.9 4.8 14.4 8.6 22.3 11.3V488c0 13.3 10.7 24 24 24s24-10.7 24-24V359.9c0-12.6-9.8-23.1-22.4-23.9c-7.3-.5-14.3-2.9-20.3-7.1l-13.1 18.7 13.1-18.7-8.9-6.2C96.6 303.1 80 271.3 80 237.4V224.6c0-9.9 3.7-19.4 10.3-26.8l9.4-10.5c3.8-4.2 7.9-8.1 12.3-11.6V208c0 8.8 7.2 16 16 16s16-7.2 16-16V142.3 128 64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-dots\": {\n    \"aliases\": {\n      \"names\": [\"allergies\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f461\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"allergy\",\n        \"freckles\",\n        \"hand\",\n        \"hives\",\n        \"palm\",\n        \"pox\",\n        \"skin\",\n        \"spots\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f461\",\n    \"label\": \"Hand Dots\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V336c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64H304c97.2 0 176-78.8 176-176V128c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V32zM240 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80 16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48-16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-16 80a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM240 432a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-48-48a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V336c0 1.5 0 3.1 .1 4.6L67.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L124.8 448c43.1 41.1 100.4 64 160 64H304c97.2 0 176-78.8 176-176V128c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V32zM240 336a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80 16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48-16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-16 80a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM240 432a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm-48-48a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-fist\": {\n    \"aliases\": {\n      \"names\": [\"fist-raised\"],\n      \"unicodes\": {\n        \"composite\": [\"270a\"],\n        \"secondary\": [\"10f6de\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"clenched\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"fist\",\n        \"hand\",\n        \"ki\",\n        \"monk\",\n        \"punch\",\n        \"raised fist\",\n        \"resist\",\n        \"strength\",\n        \"unarmed combat\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6de\",\n    \"label\": \"Hand Fist\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M192 0c17.7 0 32 14.3 32 32V144H160V32c0-17.7 14.3-32 32-32zM64 64c0-17.7 14.3-32 32-32s32 14.3 32 32v80H64V64zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V64zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V128zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V256c0 52.3-25.1 98.8-64 128v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V401.6c-17.3-7.9-33.2-18.8-46.9-32.5L69.5 357.5C45.5 333.5 32 300.9 32 267V240c0-35.3 28.7-64 64-64h88c22.1 0 40 17.9 40 40s-17.9 40-40 40H128c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M192 0c17.7 0 32 14.3 32 32V144H160V32c0-17.7 14.3-32 32-32zM64 64c0-17.7 14.3-32 32-32s32 14.3 32 32v80H64V64zm192 0c0-17.7 14.3-32 32-32s32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V64zm96 64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V128zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V256c0 52.3-25.1 98.8-64 128v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V401.6c-17.3-7.9-33.2-18.8-46.9-32.5L69.5 357.5C45.5 333.5 32 300.9 32 267V240c0-35.3 28.7-64 64-64h88c22.1 0 40 17.9 40 40s-17.9 40-40 40H128c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-holding\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4bd\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"lift\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4bd\",\n    \"label\": \"Hand Holding\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h16 64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288 272 193.7c-29.1 0-57.3 9.9-80 28L68.8 384H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H192 352.5c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-366.1-8.3a.5 .5 0 1 1 -.9 .1 .5 .5 0 1 1 .9-.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h16 64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288 272 193.7c-29.1 0-57.3 9.9-80 28L68.8 384H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H192 352.5c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-366.1-8.3a.5 .5 0 1 1 -.9 .1 .5 .5 0 1 1 .9-.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-holding-dollar\": {\n    \"aliases\": {\n      \"names\": [\"hand-holding-usd\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4c0\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"$\",\n        \"carry\",\n        \"dollar sign\",\n        \"donation\",\n        \"giving\",\n        \"lift\",\n        \"money\",\n        \"price\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4c0\",\n    \"label\": \"Hand Holding Dollar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M312 24V34.5c6.4 1.2 12.6 2.7 18.2 4.2c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17c-10.9-2.9-21.1-4.9-30.2-5c-7.3-.1-14.7 1.7-19.4 4.4c-2.1 1.3-3.1 2.4-3.5 3c-.3 .5-.7 1.2-.7 2.8c0 .3 0 .5 0 .6c.2 .2 .9 1.2 3.3 2.6c5.8 3.5 14.4 6.2 27.4 10.1l.9 .3c11.1 3.3 25.9 7.8 37.9 15.3c13.7 8.6 26.1 22.9 26.4 44.9c.3 22.5-11.4 38.9-26.7 48.5c-6.7 4.1-13.9 7-21.3 8.8V232c0 13.3-10.7 24-24 24s-24-10.7-24-24V220.6c-9.5-2.3-18.2-5.3-25.6-7.8c-2.1-.7-4.1-1.4-6-2c-12.6-4.2-19.4-17.8-15.2-30.4s17.8-19.4 30.4-15.2c2.6 .9 5 1.7 7.3 2.5c13.6 4.6 23.4 7.9 33.9 8.3c8 .3 15.1-1.6 19.2-4.1c1.9-1.2 2.8-2.2 3.2-2.9c.4-.6 .9-1.8 .8-4.1l0-.2c0-1 0-2.1-4-4.6c-5.7-3.6-14.3-6.4-27.1-10.3l-1.9-.6c-10.8-3.2-25-7.5-36.4-14.4c-13.5-8.1-26.5-22-26.6-44.1c-.1-22.9 12.9-38.6 27.7-47.4c6.4-3.8 13.3-6.4 20.2-8.2V24c0-13.3 10.7-24 24-24s24 10.7 24 24zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M312 24V34.5c6.4 1.2 12.6 2.7 18.2 4.2c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17c-10.9-2.9-21.1-4.9-30.2-5c-7.3-.1-14.7 1.7-19.4 4.4c-2.1 1.3-3.1 2.4-3.5 3c-.3 .5-.7 1.2-.7 2.8c0 .3 0 .5 0 .6c.2 .2 .9 1.2 3.3 2.6c5.8 3.5 14.4 6.2 27.4 10.1l.9 .3c11.1 3.3 25.9 7.8 37.9 15.3c13.7 8.6 26.1 22.9 26.4 44.9c.3 22.5-11.4 38.9-26.7 48.5c-6.7 4.1-13.9 7-21.3 8.8V232c0 13.3-10.7 24-24 24s-24-10.7-24-24V220.6c-9.5-2.3-18.2-5.3-25.6-7.8c-2.1-.7-4.1-1.4-6-2c-12.6-4.2-19.4-17.8-15.2-30.4s17.8-19.4 30.4-15.2c2.6 .9 5 1.7 7.3 2.5c13.6 4.6 23.4 7.9 33.9 8.3c8 .3 15.1-1.6 19.2-4.1c1.9-1.2 2.8-2.2 3.2-2.9c.4-.6 .9-1.8 .8-4.1l0-.2c0-1 0-2.1-4-4.6c-5.7-3.6-14.3-6.4-27.1-10.3l-1.9-.6c-10.8-3.2-25-7.5-36.4-14.4c-13.5-8.1-26.5-22-26.6-44.1c-.1-22.9 12.9-38.6 27.7-47.4c6.4-3.8 13.3-6.4 20.2-8.2V24c0-13.3 10.7-24 24-24s24 10.7 24 24zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-holding-droplet\": {\n    \"aliases\": {\n      \"names\": [\"hand-holding-water\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4c1\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.13.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"covid-19\", \"drought\", \"grow\", \"lift\", \"sanitation\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4c1\",\n    \"label\": \"Hand Holding Droplet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M275.5 6.6C278.3 2.5 283 0 288 0s9.7 2.5 12.5 6.6L366.8 103C378 119.3 384 138.6 384 158.3V160c0 53-43 96-96 96s-96-43-96-96v-1.7c0-19.8 6-39 17.2-55.3L275.5 6.6zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M275.5 6.6C278.3 2.5 283 0 288 0s9.7 2.5 12.5 6.6L366.8 103C378 119.3 384 138.6 384 158.3V160c0 53-43 96-96 96s-96-43-96-96v-1.7c0-19.8 6-39 17.2-55.3L275.5 6.6zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-holding-hand\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"care\", \"give\", \"help\", \"hold\", \"protect\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f7\",\n    \"label\": \"Hand Holding Hand\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M7.8 207.7c-13.1-17.8-9.3-42.8 8.5-55.9L142.9 58.5C166.2 41.3 194.5 32 223.5 32H384 544c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H507.2l-44.9 36c-22.7 18.2-50.9 28-80 28H304 288 224c-17.7 0-32-14.3-32-32s14.3-32 32-32h64 16c8.8 0 16-7.2 16-16s-7.2-16-16-16H183.4L63.7 216.2c-17.8 13.1-42.8 9.3-55.9-8.5zM382.4 160l0 0 .9 0c-.3 0-.6 0-.9 0zM568.2 304.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 453.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V384c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 352l0 0-.9 0c.3 0 .6 0 .9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M7.8 207.7c-13.1-17.8-9.3-42.8 8.5-55.9L142.9 58.5C166.2 41.3 194.5 32 223.5 32H384 544c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H507.2l-44.9 36c-22.7 18.2-50.9 28-80 28H304 288 224c-17.7 0-32-14.3-32-32s14.3-32 32-32h64 16c8.8 0 16-7.2 16-16s-7.2-16-16-16H183.4L63.7 216.2c-17.8 13.1-42.8 9.3-55.9-8.5zM382.4 160l0 0 .9 0c-.3 0-.6 0-.9 0zM568.2 304.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 453.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V384c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 352l0 0-.9 0c.3 0 .6 0 .9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-holding-heart\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4be\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"charity\", \"gift\", \"lift\", \"package\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4be\",\n    \"label\": \"Hand Holding Heart\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M163.9 136.9c-29.4-29.8-29.4-78.2 0-108s77-29.8 106.4 0l17.7 18 17.7-18c29.4-29.8 77-29.8 106.4 0s29.4 78.2 0 108L310.5 240.1c-6.2 6.3-14.3 9.4-22.5 9.4s-16.3-3.1-22.5-9.4L163.9 136.9zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M163.9 136.9c-29.4-29.8-29.4-78.2 0-108s77-29.8 106.4 0l17.7 18 17.7-18c29.4-29.8 77-29.8 106.4 0s29.4 78.2 0 108L310.5 240.1c-6.2 6.3-14.3 9.4-22.5 9.4s-16.3-3.1-22.5-9.4L163.9 136.9zM568.2 336.3c13.1 17.8 9.3 42.8-8.5 55.9L433.1 485.5c-23.4 17.2-51.6 26.5-80.7 26.5H192 32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32H68.8l44.9-36c22.7-18.2 50.9-28 80-28H272h16 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H288 272c-8.8 0-16 7.2-16 16s7.2 16 16 16H392.6l119.7-88.2c17.8-13.1 42.8-9.3 55.9 8.5zM193.6 384l0 0-.9 0c.3 0 .6 0 .9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-holding-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e05c\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"care\", \"covid-19\", \"donate\", \"help\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e05c\",\n    \"label\": \"Hand Holding Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M224 24V80H168c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h56v56c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V176h56c13.3 0 24-10.7 24-24V104c0-13.3-10.7-24-24-24H320V24c0-13.3-10.7-24-24-24H248c-13.3 0-24 10.7-24 24zM559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h16 64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288 272 193.7c-29.1 0-57.3 9.9-80 28L68.8 384H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H192 352.5c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2l.9 0 0 0c-.3 0-.6 0-.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M224 24V80H168c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h56v56c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V176h56c13.3 0 24-10.7 24-24V104c0-13.3-10.7-24-24-24H320V24c0-13.3-10.7-24-24-24H248c-13.3 0-24 10.7-24 24zM559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h16 64c17.7 0 32-14.3 32-32s-14.3-32-32-32H288 272 193.7c-29.1 0-57.3 9.9-80 28L68.8 384H32c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H192 352.5c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2l.9 0 0 0c-.3 0-.6 0-.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-lizard\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f258\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"game\", \"roshambo\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f258\",\n    \"label\": \"Hand Lizard\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 112C0 85.5 21.5 64 48 64H160h80 46.5c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8v12 16 48c0 17.7-14.3 32-32 32H384c-17.7 0-32-14.3-32-32V402.2L273.9 352H240 160 112c-26.5 0-48-21.5-48-48s21.5-48 48-48h48 80c26.5 0 48-21.5 48-48s-21.5-48-48-48H160 48c-26.5 0-48-21.5-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 112C0 85.5 21.5 64 48 64H160h80 46.5c36.8 0 71.2 18 92.1 48.2l113.5 164c13 18.7 19.9 41 19.9 63.8v12 16 48c0 17.7-14.3 32-32 32H384c-17.7 0-32-14.3-32-32V402.2L273.9 352H240 160 112c-26.5 0-48-21.5-48-48s21.5-48 48-48h48 80c26.5 0 48-21.5 48-48s-21.5-48-48-48H160 48c-26.5 0-48-21.5-48-48z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M72 112c-13.3 0-24 10.7-24 24s10.7 24 24 24H240c35.3 0 64 28.7 64 64s-28.7 64-64 64H136c-13.3 0-24 10.7-24 24s10.7 24 24 24H288c4.5 0 8.9 1.3 12.7 3.6l64 40c7 4.4 11.3 12.1 11.3 20.4v24c0 13.3-10.7 24-24 24s-24-10.7-24-24V413.3L281.1 384H136c-39.8 0-72-32.2-72-72s32.2-72 72-72H240c8.8 0 16-7.2 16-16s-7.2-16-16-16H72c-39.8 0-72-32.2-72-72S32.2 64 72 64H281.6c46.7 0 90.9 21.5 119.7 58.3l78.4 100.1c20.9 26.7 32.3 59.7 32.3 93.7V424c0 13.3-10.7 24-24 24s-24-10.7-24-24V316.1c0-23.2-7.8-45.8-22.1-64.1L363.5 151.9c-19.7-25.2-49.9-39.9-81.9-39.9H72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M72 112c-13.3 0-24 10.7-24 24s10.7 24 24 24H240c35.3 0 64 28.7 64 64s-28.7 64-64 64H136c-13.3 0-24 10.7-24 24s10.7 24 24 24H288c4.5 0 8.9 1.3 12.7 3.6l64 40c7 4.4 11.3 12.1 11.3 20.4v24c0 13.3-10.7 24-24 24s-24-10.7-24-24V413.3L281.1 384H136c-39.8 0-72-32.2-72-72s32.2-72 72-72H240c8.8 0 16-7.2 16-16s-7.2-16-16-16H72c-39.8 0-72-32.2-72-72S32.2 64 72 64H281.6c46.7 0 90.9 21.5 119.7 58.3l78.4 100.1c20.9 26.7 32.3 59.7 32.3 93.7V424c0 13.3-10.7 24-24 24s-24-10.7-24-24V316.1c0-23.2-7.8-45.8-22.1-64.1L363.5 151.9c-19.7-25.2-49.9-39.9-81.9-39.9H72z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-middle-finger\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f595\"],\n        \"secondary\": [\"10f806\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"finger\",\n        \"flip the bird\",\n        \"gesture\",\n        \"hand\",\n        \"hate\",\n        \"middle finger\",\n        \"rude\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f806\",\n    \"label\": \"Hand Middle Finger\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M232 0c-22.1 0-40 17.9-40 40V204.2c-8.5-7.6-19.7-12.2-32-12.2c-26.5 0-48 21.5-48 48v7 73c0 8.8-7.2 16-16 16s-16-7.2-16-16V264.3c-2 1.4-3.9 3-5.8 4.5L55 284.8C40.4 297 32 315 32 334V372c0 38 16.9 74 46.1 98.3l5.4 4.5c28.8 24 65 37.1 102.4 37.1H304c70.7 0 128-57.3 128-128V320 288c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 227.5 329.3 208 304 208c-12.3 0-23.5 4.6-32 12.2V40c0-22.1-17.9-40-40-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M232 0c-22.1 0-40 17.9-40 40V204.2c-8.5-7.6-19.7-12.2-32-12.2c-26.5 0-48 21.5-48 48v7 73c0 8.8-7.2 16-16 16s-16-7.2-16-16V264.3c-2 1.4-3.9 3-5.8 4.5L55 284.8C40.4 297 32 315 32 334V372c0 38 16.9 74 46.1 98.3l5.4 4.5c28.8 24 65 37.1 102.4 37.1H304c70.7 0 128-57.3 128-128V320 288c0-26.5-21.5-48-48-48c-12.4 0-23.6 4.7-32.1 12.3C350 227.5 329.3 208 304 208c-12.3 0-23.5 4.6-32 12.2V40c0-22.1-17.9-40-40-40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-peace\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"270c\"],\n        \"secondary\": [\"10f25b\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hand\", \"rest\", \"truce\", \"v\", \"victory\", \"victory hand\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f25b\",\n    \"label\": \"Hand Peace\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M224 0c17.7 0 32 14.3 32 32V240H192V32c0-17.7 14.3-32 32-32zm96 160c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7 14.3-32 32-32zm64 64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224zM93.3 51.2L175.9 240H106.1L34.7 76.8C27.6 60.6 35 41.8 51.2 34.7s35.1 .3 42.1 16.5zm27 221.3l-.2-.5h69.9H216c22.1 0 40 17.9 40 40s-17.9 40-40 40H160c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V352c0 88.4-71.6 160-160 160H226.3c-42.4 0-83.1-16.9-113.1-46.9l-11.6-11.6C77.5 429.5 64 396.9 64 363V336c0-32.7 24.6-59.7 56.3-63.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M224 0c17.7 0 32 14.3 32 32V240H192V32c0-17.7 14.3-32 32-32zm96 160c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V192c0-17.7 14.3-32 32-32zm64 64c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224zM93.3 51.2L175.9 240H106.1L34.7 76.8C27.6 60.6 35 41.8 51.2 34.7s35.1 .3 42.1 16.5zm27 221.3l-.2-.5h69.9H216c22.1 0 40 17.9 40 40s-17.9 40-40 40H160c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V352c0 88.4-71.6 160-160 160H226.3c-42.4 0-83.1-16.9-113.1-46.9l-11.6-11.6C77.5 429.5 64 396.9 64 363V336c0-32.7 24.6-59.7 56.3-63.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M250.8 1.4c-35.2-3.7-66.6 21.8-70.3 57L174 119 156.7 69.6C145 36.3 108.4 18.8 75.1 30.5S24.2 78.8 35.9 112.1L88.7 262.2C73.5 276.7 64 297.3 64 320v0 24c0 92.8 75.2 168 168 168h48c92.8 0 168-75.2 168-168V272 256 224c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4c-10.4-21.3-32.3-36-57.6-36c-.7 0-1.5 0-2.2 0l5.9-56.3c3.7-35.2-21.8-66.6-57-70.3zm-.2 155.4C243.9 166.9 240 179 240 192v48c0 .7 0 1.4 0 2c-5.1-1.3-10.5-2-16-2h-7.4l-5.4-15.3 17-161.3c.9-8.8 8.8-15.2 17.6-14.2s15.2 8.8 14.2 17.6l-9.5 90.1zM111.4 85.6L165.7 240H144c-4 0-8 .3-11.9 .9L81.2 96.2c-2.9-8.3 1.5-17.5 9.8-20.4s17.5 1.5 20.4 9.8zM288 192c0-8.8 7.2-16 16-16s16 7.2 16 16v32 16c0 8.8-7.2 16-16 16s-16-7.2-16-16V192zm38.4 108c10.4 21.3 32.3 36 57.6 36c5.5 0 10.9-.7 16-2v10c0 66.3-53.7 120-120 120H232c-66.3 0-120-53.7-120-120l0-24 0 0c0-17.7 14.3-32 32-32h80c8.8 0 16 7.2 16 16s-7.2 16-16 16H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h40c35.3 0 64-28.7 64-64c0-.7 0-1.4 0-2c5.1 1.3 10.5 2 16 2c7.9 0 15.4-1.4 22.4-4zM400 272c0 8.8-7.2 16-16 16s-16-7.2-16-16V240 224c0-8.8 7.2-16 16-16s16 7.2 16 16v32 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M250.8 1.4c-35.2-3.7-66.6 21.8-70.3 57L174 119 156.7 69.6C145 36.3 108.4 18.8 75.1 30.5S24.2 78.8 35.9 112.1L88.7 262.2C73.5 276.7 64 297.3 64 320v0 24c0 92.8 75.2 168 168 168h48c92.8 0 168-75.2 168-168V272 256 224c0-35.3-28.7-64-64-64c-7.9 0-15.4 1.4-22.4 4c-10.4-21.3-32.3-36-57.6-36c-.7 0-1.5 0-2.2 0l5.9-56.3c3.7-35.2-21.8-66.6-57-70.3zm-.2 155.4C243.9 166.9 240 179 240 192v48c0 .7 0 1.4 0 2c-5.1-1.3-10.5-2-16-2h-7.4l-5.4-15.3 17-161.3c.9-8.8 8.8-15.2 17.6-14.2s15.2 8.8 14.2 17.6l-9.5 90.1zM111.4 85.6L165.7 240H144c-4 0-8 .3-11.9 .9L81.2 96.2c-2.9-8.3 1.5-17.5 9.8-20.4s17.5 1.5 20.4 9.8zM288 192c0-8.8 7.2-16 16-16s16 7.2 16 16v32 16c0 8.8-7.2 16-16 16s-16-7.2-16-16V192zm38.4 108c10.4 21.3 32.3 36 57.6 36c5.5 0 10.9-.7 16-2v10c0 66.3-53.7 120-120 120H232c-66.3 0-120-53.7-120-120l0-24 0 0c0-17.7 14.3-32 32-32h80c8.8 0 16 7.2 16 16s-7.2 16-16 16H184c-13.3 0-24 10.7-24 24s10.7 24 24 24h40c35.3 0 64-28.7 64-64c0-.7 0-1.4 0-2c5.1 1.3 10.5 2 16 2c7.9 0 15.4-1.4 22.4-4zM400 272c0 8.8-7.2 16-16 16s-16-7.2-16-16V240 224c0-8.8 7.2-16 16-16s16 7.2 16 16v32 16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-point-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0a7\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"finger\", \"hand-o-down\", \"point\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0a7\",\n    \"label\": \"Hand Point Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 480c0 17.7 14.3 32 32 32s32-14.3 32-32V272H32V480zM224 320c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-17.7-14.3-32-32-32s-32 14.3-32 32v64zm-64 64c17.7 0 32-14.3 32-32V304c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c0 17.7 14.3 32 32 32zm160-96c0 17.7 14.3 32 32 32s32-14.3 32-32V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64zm-96-88l0 .6c9.4-5.4 20.3-8.6 32-8.6c13.2 0 25.4 4 35.6 10.8c8.7-24.9 32.5-42.8 60.4-42.8c11.7 0 22.6 3.1 32 8.6V160C384 71.6 312.4 0 224 0H162.3C119.8 0 79.1 16.9 49.1 46.9L37.5 58.5C13.5 82.5 0 115.1 0 149v27c0 35.3 28.7 64 64 64h88c22.1 0 40-17.9 40-40s-17.9-40-40-40H96c-8.8 0-16-7.2-16-16s7.2-16 16-16h56c39.8 0 72 32.2 72 72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 480c0 17.7 14.3 32 32 32s32-14.3 32-32V272H32V480zM224 320c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-17.7-14.3-32-32-32s-32 14.3-32 32v64zm-64 64c17.7 0 32-14.3 32-32V304c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c0 17.7 14.3 32 32 32zm160-96c0 17.7 14.3 32 32 32s32-14.3 32-32V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64zm-96-88l0 .6c9.4-5.4 20.3-8.6 32-8.6c13.2 0 25.4 4 35.6 10.8c8.7-24.9 32.5-42.8 60.4-42.8c11.7 0 22.6 3.1 32 8.6V160C384 71.6 312.4 0 224 0H162.3C119.8 0 79.1 16.9 49.1 46.9L37.5 58.5C13.5 82.5 0 115.1 0 149v27c0 35.3 28.7 64 64 64h88c22.1 0 40-17.9 40-40s-17.9-40-40-40H96c-8.8 0-16-7.2-16-16s7.2-16 16-16h56c39.8 0 72 32.2 72 72z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 448l0-177.6c5.2 1 10.5 1.6 16 1.6l16 0 0 32 0 144c0 8.8-7.2 16-16 16s-16-7.2-16-16zM80 224c-17.7 0-32-14.3-32-32c0 0 0 0 0 0l0-24c0-66.3 53.7-120 120-120l48 0c52.5 0 97.1 33.7 113.4 80.7c-3.1-.5-6.2-.7-9.4-.7c-20 0-37.9 9.2-49.7 23.6c-9-4.9-19.4-7.6-30.3-7.6c-15.1 0-29 5.3-40 14c-11-8.8-24.9-14-40-14l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-40 0-40 0zM0 192s0 0 0 0c0 18 6 34.6 16 48l0 208c0 35.3 28.7 64 64 64s64-28.7 64-64l0-82c5.1 1.3 10.5 2 16 2c25.3 0 47.2-14.7 57.6-36c7 2.6 14.5 4 22.4 4c20 0 37.9-9.2 49.7-23.6c9 4.9 19.4 7.6 30.3 7.6c35.3 0 64-28.7 64-64l0-64 0-24C384 75.2 308.8 0 216 0L168 0C75.2 0 0 75.2 0 168l0 24zm336 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64zM160 272c5.5 0 10.9-.7 16-2l0 2 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32 16 0zm64-24l0-40c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 448l0-177.6c5.2 1 10.5 1.6 16 1.6l16 0 0 32 0 144c0 8.8-7.2 16-16 16s-16-7.2-16-16zM80 224c-17.7 0-32-14.3-32-32c0 0 0 0 0 0l0-24c0-66.3 53.7-120 120-120l48 0c52.5 0 97.1 33.7 113.4 80.7c-3.1-.5-6.2-.7-9.4-.7c-20 0-37.9 9.2-49.7 23.6c-9-4.9-19.4-7.6-30.3-7.6c-15.1 0-29 5.3-40 14c-11-8.8-24.9-14-40-14l-40 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-40 0-40 0zM0 192s0 0 0 0c0 18 6 34.6 16 48l0 208c0 35.3 28.7 64 64 64s64-28.7 64-64l0-82c5.1 1.3 10.5 2 16 2c25.3 0 47.2-14.7 57.6-36c7 2.6 14.5 4 22.4 4c20 0 37.9-9.2 49.7-23.6c9 4.9 19.4 7.6 30.3 7.6c35.3 0 64-28.7 64-64l0-64 0-24C384 75.2 308.8 0 216 0L168 0C75.2 0 0 75.2 0 168l0 24zm336 64c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-48 0-16c0-8.8 7.2-16 16-16s16 7.2 16 16l0 64zM160 272c5.5 0 10.9-.7 16-2l0 2 0 32c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-32 16 0zm64-24l0-40c0-8.8 7.2-16 16-16s16 7.2 16 16l0 48 0 16c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-point-left\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0a5\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"back\", \"finger\", \"hand-o-left\", \"left\", \"point\", \"previous\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0a5\",\n    \"label\": \"Hand Point Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l208 0 0-64L32 96zM192 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm-64-64c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0c-17.7 0-32 14.3-32 32zm96 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm88-96l-.6 0c5.4 9.4 8.6 20.3 8.6 32c0 13.2-4 25.4-10.8 35.6c24.9 8.7 42.8 32.5 42.8 60.4c0 11.7-3.1 22.6-8.6 32l8.6 0c88.4 0 160-71.6 160-160l0-61.7c0-42.4-16.9-83.1-46.9-113.1l-11.6-11.6C429.5 77.5 396.9 64 363 64l-27 0c-35.3 0-64 28.7-64 64l0 88c0 22.1 17.9 40 40 40s40-17.9 40-40l0-56c0-8.8 7.2-16 16-16s16 7.2 16 16l0 56c0 39.8-32.2 72-72 72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 96C14.3 96 0 110.3 0 128s14.3 32 32 32l208 0 0-64L32 96zM192 288c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm-64-64c0 17.7 14.3 32 32 32l48 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-48 0c-17.7 0-32 14.3-32 32zm96 160c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0zm88-96l-.6 0c5.4 9.4 8.6 20.3 8.6 32c0 13.2-4 25.4-10.8 35.6c24.9 8.7 42.8 32.5 42.8 60.4c0 11.7-3.1 22.6-8.6 32l8.6 0c88.4 0 160-71.6 160-160l0-61.7c0-42.4-16.9-83.1-46.9-113.1l-11.6-11.6C429.5 77.5 396.9 64 363 64l-27 0c-35.3 0-64 28.7-64 64l0 88c0 22.1 17.9 40 40 40s40-17.9 40-40l0-56c0-8.8 7.2-16 16-16s16 7.2 16 16l0 56c0 39.8-32.2 72-72 72z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 128l177.6 0c-1 5.2-1.6 10.5-1.6 16l0 16-32 0L64 160c-8.8 0-16-7.2-16-16s7.2-16 16-16zm224 16c0-17.7 14.3-32 32-32c0 0 0 0 0 0l24 0c66.3 0 120 53.7 120 120l0 48c0 52.5-33.7 97.1-80.7 113.4c.5-3.1 .7-6.2 .7-9.4c0-20-9.2-37.9-23.6-49.7c4.9-9 7.6-19.4 7.6-30.3c0-15.1-5.3-29-14-40c8.8-11 14-24.9 14-40l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-40 0-40zm32-80s0 0 0 0c-18 0-34.6 6-48 16L64 80C28.7 80 0 108.7 0 144s28.7 64 64 64l82 0c-1.3 5.1-2 10.5-2 16c0 25.3 14.7 47.2 36 57.6c-2.6 7-4 14.5-4 22.4c0 20 9.2 37.9 23.6 49.7c-4.9 9-7.6 19.4-7.6 30.3c0 35.3 28.7 64 64 64l64 0 24 0c92.8 0 168-75.2 168-168l0-48c0-92.8-75.2-168-168-168l-24 0zM256 400c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0zM240 224c0 5.5 .7 10.9 2 16l-2 0-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0 16zm24 64l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l24 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 128l177.6 0c-1 5.2-1.6 10.5-1.6 16l0 16-32 0L64 160c-8.8 0-16-7.2-16-16s7.2-16 16-16zm224 16c0-17.7 14.3-32 32-32c0 0 0 0 0 0l24 0c66.3 0 120 53.7 120 120l0 48c0 52.5-33.7 97.1-80.7 113.4c.5-3.1 .7-6.2 .7-9.4c0-20-9.2-37.9-23.6-49.7c4.9-9 7.6-19.4 7.6-30.3c0-15.1-5.3-29-14-40c8.8-11 14-24.9 14-40l0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-40 0-40zm32-80s0 0 0 0c-18 0-34.6 6-48 16L64 80C28.7 80 0 108.7 0 144s28.7 64 64 64l82 0c-1.3 5.1-2 10.5-2 16c0 25.3 14.7 47.2 36 57.6c-2.6 7-4 14.5-4 22.4c0 20 9.2 37.9 23.6 49.7c-4.9 9-7.6 19.4-7.6 30.3c0 35.3 28.7 64 64 64l64 0 24 0c92.8 0 168-75.2 168-168l0-48c0-92.8-75.2-168-168-168l-24 0zM256 400c-8.8 0-16-7.2-16-16s7.2-16 16-16l48 0 16 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-64 0zM240 224c0 5.5 .7 10.9 2 16l-2 0-32 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l32 0 0 16zm24 64l40 0c8.8 0 16 7.2 16 16s-7.2 16-16 16l-48 0-16 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l24 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-point-right\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0a4\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"finger\", \"forward\", \"hand-o-right\", \"next\", \"point\", \"right\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0a4\",\n    \"label\": \"Hand Point Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M480 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-208 0 0-64 208 0zM320 288c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm64-64c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0c17.7 0 32 14.3 32 32zM288 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm-88-96l.6 0c-5.4 9.4-8.6 20.3-8.6 32c0 13.2 4 25.4 10.8 35.6C177.9 364.3 160 388.1 160 416c0 11.7 3.1 22.6 8.6 32l-8.6 0C71.6 448 0 376.4 0 288l0-61.7c0-42.4 16.9-83.1 46.9-113.1l11.6-11.6C82.5 77.5 115.1 64 149 64l27 0c35.3 0 64 28.7 64 64l0 88c0 22.1-17.9 40-40 40s-40-17.9-40-40l0-56c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 56c0 39.8 32.2 72 72 72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M480 96c17.7 0 32 14.3 32 32s-14.3 32-32 32l-208 0 0-64 208 0zM320 288c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm64-64c0 17.7-14.3 32-32 32l-48 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l48 0c17.7 0 32 14.3 32 32zM288 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0zm-88-96l.6 0c-5.4 9.4-8.6 20.3-8.6 32c0 13.2 4 25.4 10.8 35.6C177.9 364.3 160 388.1 160 416c0 11.7 3.1 22.6 8.6 32l-8.6 0C71.6 448 0 376.4 0 288l0-61.7c0-42.4 16.9-83.1 46.9-113.1l11.6-11.6C82.5 77.5 115.1 64 149 64l27 0c35.3 0 64 28.7 64 64l0 88c0 22.1-17.9 40-40 40s-40-17.9-40-40l0-56c0-8.8-7.2-16-16-16s-16 7.2-16 16l0 56c0 39.8 32.2 72 72 72z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 128l-177.6 0c1 5.2 1.6 10.5 1.6 16l0 16 32 0 144 0c8.8 0 16-7.2 16-16s-7.2-16-16-16zM224 144c0-17.7-14.3-32-32-32c0 0 0 0 0 0l-24 0c-66.3 0-120 53.7-120 120l0 48c0 52.5 33.7 97.1 80.7 113.4c-.5-3.1-.7-6.2-.7-9.4c0-20 9.2-37.9 23.6-49.7c-4.9-9-7.6-19.4-7.6-30.3c0-15.1 5.3-29 14-40c-8.8-11-14-24.9-14-40l0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40c0 8.8 7.2 16 16 16s16-7.2 16-16l0-40 0-40zM192 64s0 0 0 0c18 0 34.6 6 48 16l208 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-82 0c1.3 5.1 2 10.5 2 16c0 25.3-14.7 47.2-36 57.6c2.6 7 4 14.5 4 22.4c0 20-9.2 37.9-23.6 49.7c4.9 9 7.6 19.4 7.6 30.3c0 35.3-28.7 64-64 64l-64 0-24 0C75.2 448 0 372.8 0 280l0-48C0 139.2 75.2 64 168 64l24 0zm64 336c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0zm16-176c0 5.5-.7 10.9-2 16l2 0 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0 16zm-24 64l-40 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-24 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 128l-177.6 0c1 5.2 1.6 10.5 1.6 16l0 16 32 0 144 0c8.8 0 16-7.2 16-16s-7.2-16-16-16zM224 144c0-17.7-14.3-32-32-32c0 0 0 0 0 0l-24 0c-66.3 0-120 53.7-120 120l0 48c0 52.5 33.7 97.1 80.7 113.4c-.5-3.1-.7-6.2-.7-9.4c0-20 9.2-37.9 23.6-49.7c-4.9-9-7.6-19.4-7.6-30.3c0-15.1 5.3-29 14-40c-8.8-11-14-24.9-14-40l0-40c0-13.3 10.7-24 24-24s24 10.7 24 24l0 40c0 8.8 7.2 16 16 16s16-7.2 16-16l0-40 0-40zM192 64s0 0 0 0c18 0 34.6 6 48 16l208 0c35.3 0 64 28.7 64 64s-28.7 64-64 64l-82 0c1.3 5.1 2 10.5 2 16c0 25.3-14.7 47.2-36 57.6c2.6 7 4 14.5 4 22.4c0 20-9.2 37.9-23.6 49.7c4.9 9 7.6 19.4 7.6 30.3c0 35.3-28.7 64-64 64l-64 0-24 0C75.2 448 0 372.8 0 280l0-48C0 139.2 75.2 64 168 64l24 0zm64 336c8.8 0 16-7.2 16-16s-7.2-16-16-16l-48 0-16 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l64 0zm16-176c0 5.5-.7 10.9-2 16l2 0 32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0 0 16zm-24 64l-40 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l48 0 16 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-24 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-point-up\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"261d\"],\n        \"secondary\": [\"10f0a6\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"finger\",\n        \"hand\",\n        \"hand-o-up\",\n        \"index\",\n        \"index pointing up\",\n        \"point\",\n        \"up\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0a6\",\n    \"label\": \"Hand Point Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 32C32 14.3 46.3 0 64 0S96 14.3 96 32V240H32V32zM224 192c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V192zm-64-64c17.7 0 32 14.3 32 32v48c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32zm160 96c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V352c0 88.4-71.6 160-160 160H162.3c-42.4 0-83.1-16.9-113.1-46.9L37.5 453.5C13.5 429.5 0 396.9 0 363V336c0-35.3 28.7-64 64-64h88c22.1 0 40 17.9 40 40s-17.9 40-40 40H96c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 32C32 14.3 46.3 0 64 0S96 14.3 96 32V240H32V32zM224 192c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V192zm-64-64c17.7 0 32 14.3 32 32v48c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32zm160 96c0-17.7 14.3-32 32-32s32 14.3 32 32v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224zm-96 88l0-.6c9.4 5.4 20.3 8.6 32 8.6c13.2 0 25.4-4 35.6-10.8c8.7 24.9 32.5 42.8 60.4 42.8c11.7 0 22.6-3.1 32-8.6V352c0 88.4-71.6 160-160 160H162.3c-42.4 0-83.1-16.9-113.1-46.9L37.5 453.5C13.5 429.5 0 396.9 0 363V336c0-35.3 28.7-64 64-64h88c22.1 0 40 17.9 40 40s-17.9 40-40 40H96c-8.8 0-16 7.2-16 16s7.2 16 16 16h56c39.8 0 72-32.2 72-72z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 64V241.6c5.2-1 10.5-1.6 16-1.6H96V208 64c0-8.8-7.2-16-16-16s-16 7.2-16 16zM80 288c-17.7 0-32 14.3-32 32c0 0 0 0 0 0v24c0 66.3 53.7 120 120 120h48c52.5 0 97.1-33.7 113.4-80.7c-3.1 .5-6.2 .7-9.4 .7c-20 0-37.9-9.2-49.7-23.6c-9 4.9-19.4 7.6-30.3 7.6c-15.1 0-29-5.3-40-14c-11 8.8-24.9 14-40 14H120c-13.3 0-24-10.7-24-24s10.7-24 24-24h40c8.8 0 16-7.2 16-16s-7.2-16-16-16H120 80zM0 320s0 0 0 0c0-18 6-34.6 16-48V64C16 28.7 44.7 0 80 0s64 28.7 64 64v82c5.1-1.3 10.5-2 16-2c25.3 0 47.2 14.7 57.6 36c7-2.6 14.5-4 22.4-4c20 0 37.9 9.2 49.7 23.6c9-4.9 19.4-7.6 30.3-7.6c35.3 0 64 28.7 64 64v64 24c0 92.8-75.2 168-168 168H168C75.2 512 0 436.8 0 344V320zm336-64c0-8.8-7.2-16-16-16s-16 7.2-16 16v48 16c0 8.8 7.2 16 16 16s16-7.2 16-16V256zM160 240c5.5 0 10.9 .7 16 2v-2V208c0-8.8-7.2-16-16-16s-16 7.2-16 16v32h16zm64 24v40c0 8.8 7.2 16 16 16s16-7.2 16-16V256 240c0-8.8-7.2-16-16-16s-16 7.2-16 16v24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 64V241.6c5.2-1 10.5-1.6 16-1.6H96V208 64c0-8.8-7.2-16-16-16s-16 7.2-16 16zM80 288c-17.7 0-32 14.3-32 32c0 0 0 0 0 0v24c0 66.3 53.7 120 120 120h48c52.5 0 97.1-33.7 113.4-80.7c-3.1 .5-6.2 .7-9.4 .7c-20 0-37.9-9.2-49.7-23.6c-9 4.9-19.4 7.6-30.3 7.6c-15.1 0-29-5.3-40-14c-11 8.8-24.9 14-40 14H120c-13.3 0-24-10.7-24-24s10.7-24 24-24h40c8.8 0 16-7.2 16-16s-7.2-16-16-16H120 80zM0 320s0 0 0 0c0-18 6-34.6 16-48V64C16 28.7 44.7 0 80 0s64 28.7 64 64v82c5.1-1.3 10.5-2 16-2c25.3 0 47.2 14.7 57.6 36c7-2.6 14.5-4 22.4-4c20 0 37.9 9.2 49.7 23.6c9-4.9 19.4-7.6 30.3-7.6c35.3 0 64 28.7 64 64v64 24c0 92.8-75.2 168-168 168H168C75.2 512 0 436.8 0 344V320zm336-64c0-8.8-7.2-16-16-16s-16 7.2-16 16v48 16c0 8.8 7.2 16 16 16s16-7.2 16-16V256zM160 240c5.5 0 10.9 .7 16 2v-2V208c0-8.8-7.2-16-16-16s-16 7.2-16 16v32h16zm64 24v40c0 8.8 7.2 16 16 16s16-7.2 16-16V256 240c0-8.8-7.2-16-16-16s-16 7.2-16 16v24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-pointer\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f25a\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"cursor\", \"select\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f25a\",\n    \"label\": \"Hand Pointer\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40V188.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48v48 16 48c0 70.7-57.3 128-128 128l-16 0H240l-.1 0h-5.2c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7V40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304zm48-16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40V188.2c8.5-7.6 19.7-12.2 32-12.2c20.6 0 38.2 13 45 31.2c8.8-9.3 21.2-15.2 35-15.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48v48 16 48c0 70.7-57.3 128-128 128l-16 0H240l-.1 0h-5.2c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7V40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304zm48-16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M160 64c0-8.8 7.2-16 16-16s16 7.2 16 16V200c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c8.8 0 16 7.2 16 16c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c7.8 0 14.3 5.6 15.7 13c1.6 8.2 7.3 15.1 15.1 18s16.7 1.6 23.3-3.6c2.7-2.1 6.1-3.4 9.9-3.4c8.8 0 16 7.2 16 16l0 16V392c0 39.8-32.2 72-72 72H272 212.3h-.9c-37.4 0-72.4-18.7-93.2-49.9L50.7 312.9c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4L116 353.2c5.9 8.8 16.8 12.7 26.9 9.7s17-12.4 17-23V320 64zM176 0c-35.3 0-64 28.7-64 64V261.7C91.2 238 55.5 232.8 28.5 250.7C-.9 270.4-8.9 310.1 10.8 339.5L78.3 440.8c29.7 44.5 79.6 71.2 133.1 71.2h.9H272h56c66.3 0 120-53.7 120-120V288l0-16c0-35.3-28.7-64-64-64c-4.5 0-8.8 .5-13 1.3c-11.7-15.4-30.2-25.3-51-25.3c-6.9 0-13.5 1.1-19.7 3.1C288.7 170.7 269.6 160 248 160c-2.7 0-5.4 .2-8 .5V64c0-35.3-28.7-64-64-64zm48 304c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304zm48-16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M160 64c0-8.8 7.2-16 16-16s16 7.2 16 16V200c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c8.8 0 16 7.2 16 16c0 10.3 6.6 19.5 16.4 22.8s20.6-.1 26.8-8.3c3-3.9 7.6-6.4 12.8-6.4c7.8 0 14.3 5.6 15.7 13c1.6 8.2 7.3 15.1 15.1 18s16.7 1.6 23.3-3.6c2.7-2.1 6.1-3.4 9.9-3.4c8.8 0 16 7.2 16 16l0 16V392c0 39.8-32.2 72-72 72H272 212.3h-.9c-37.4 0-72.4-18.7-93.2-49.9L50.7 312.9c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4L116 353.2c5.9 8.8 16.8 12.7 26.9 9.7s17-12.4 17-23V320 64zM176 0c-35.3 0-64 28.7-64 64V261.7C91.2 238 55.5 232.8 28.5 250.7C-.9 270.4-8.9 310.1 10.8 339.5L78.3 440.8c29.7 44.5 79.6 71.2 133.1 71.2h.9H272h56c66.3 0 120-53.7 120-120V288l0-16c0-35.3-28.7-64-64-64c-4.5 0-8.8 .5-13 1.3c-11.7-15.4-30.2-25.3-51-25.3c-6.9 0-13.5 1.1-19.7 3.1C288.7 170.7 269.6 160 248 160c-2.7 0-5.4 .2-8 .5V64c0-35.3-28.7-64-64-64zm48 304c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304zm48-16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-scissors\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f257\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cut\", \"game\", \"roshambo\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f257\",\n    \"label\": \"Hand Scissors\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32c0 25.3 19.5 46 44.3 47.9c-7.7 8.5-12.3 19.8-12.3 32.1c0 26.5 21.5 48 48 48l32 0 64 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3C444.8 76.8 413.9 64 381.7 64L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4L288 129.9l0 .1L84 65.8C62.9 59.2 40.5 70.9 33.8 92s5.1 43.5 26.2 50.2L269.5 208 40 208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M40 208c-22.1 0-40 17.9-40 40s17.9 40 40 40l180.2 0c-7.6 8.5-12.2 19.7-12.2 32c0 25.3 19.5 46 44.3 47.9c-7.7 8.5-12.3 19.8-12.3 32.1c0 26.5 21.5 48 48 48l32 0 64 0c70.7 0 128-57.3 128-128l0-113.1c0-40.2-16-78.8-44.4-107.3C444.8 76.8 413.9 64 381.7 64L336 64c-21.3 0-39.3 13.9-45.6 33.1l74.5 23.7c8.4 2.7 13.1 11.7 10.4 20.1s-11.7 13.1-20.1 10.4L288 129.9l0 .1L84 65.8C62.9 59.2 40.5 70.9 33.8 92s5.1 43.5 26.2 50.2L269.5 208 40 208z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M.2 276.3c-1.2-35.3 26.4-65 61.7-66.2l3.3-.1L57 208.1C22.5 200.5 .7 166.3 8.3 131.8S50.2 75.5 84.7 83.2l173 38.3c2.3-2.9 4.7-5.7 7.1-8.5l18.4-20.3C299.9 74.5 323.5 64 348.3 64l10.2 0c54.1 0 104.1 28.7 131.3 75.4l1.5 2.6c13.6 23.2 20.7 49.7 20.7 76.6L512 344c0 66.3-53.7 120-120 120l-8 0-96 0c-35.3 0-64-28.7-64-64c0-2.8 .2-5.6 .5-8.3c-19.4-11-32.5-31.8-32.5-55.7c0-.8 0-1.6 0-2.4L66.4 338c-35.3 1.2-65-26.4-66.2-61.7zm63.4-18.2c-8.8 .3-15.7 7.7-15.4 16.5s7.7 15.7 16.5 15.4l161.5-5.6c9.8-.3 18.7 5.3 22.7 14.2s2.2 19.3-4.5 26.4c-2.8 2.9-4.4 6.7-4.4 11c0 8.8 7.2 16 16 16c9.1 0 17.4 5.1 21.5 13.3s3.2 17.9-2.3 25.1c-2 2.7-3.2 6-3.2 9.6c0 8.8 7.2 16 16 16l96 0 8 0c39.8 0 72-32.2 72-72l0-125.4c0-18.4-4.9-36.5-14.2-52.4l-1.5-2.6c-18.6-32-52.8-51.6-89.8-51.6l-10.2 0c-11.3 0-22 4.8-29.6 13.1l-17.5-15.9 17.5 15.9-18.4 20.3c-.6 .6-1.1 1.3-1.7 1.9l57 13.2c8.6 2 14 10.6 12 19.2s-10.6 14-19.2 12l-85.6-19.7L74.3 130c-8.6-1.9-17.2 3.5-19.1 12.2s3.5 17.2 12.2 19.1l187.5 41.6c10.2 2.3 17.8 10.9 18.7 21.4l.1 1c.6 6.6-1.5 13.1-5.8 18.1s-10.6 7.9-17.2 8.2L63.6 258.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M.2 276.3c-1.2-35.3 26.4-65 61.7-66.2l3.3-.1L57 208.1C22.5 200.5 .7 166.3 8.3 131.8S50.2 75.5 84.7 83.2l173 38.3c2.3-2.9 4.7-5.7 7.1-8.5l18.4-20.3C299.9 74.5 323.5 64 348.3 64l10.2 0c54.1 0 104.1 28.7 131.3 75.4l1.5 2.6c13.6 23.2 20.7 49.7 20.7 76.6L512 344c0 66.3-53.7 120-120 120l-8 0-96 0c-35.3 0-64-28.7-64-64c0-2.8 .2-5.6 .5-8.3c-19.4-11-32.5-31.8-32.5-55.7c0-.8 0-1.6 0-2.4L66.4 338c-35.3 1.2-65-26.4-66.2-61.7zm63.4-18.2c-8.8 .3-15.7 7.7-15.4 16.5s7.7 15.7 16.5 15.4l161.5-5.6c9.8-.3 18.7 5.3 22.7 14.2s2.2 19.3-4.5 26.4c-2.8 2.9-4.4 6.7-4.4 11c0 8.8 7.2 16 16 16c9.1 0 17.4 5.1 21.5 13.3s3.2 17.9-2.3 25.1c-2 2.7-3.2 6-3.2 9.6c0 8.8 7.2 16 16 16l96 0 8 0c39.8 0 72-32.2 72-72l0-125.4c0-18.4-4.9-36.5-14.2-52.4l-1.5-2.6c-18.6-32-52.8-51.6-89.8-51.6l-10.2 0c-11.3 0-22 4.8-29.6 13.1l-17.5-15.9 17.5 15.9-18.4 20.3c-.6 .6-1.1 1.3-1.7 1.9l57 13.2c8.6 2 14 10.6 12 19.2s-10.6 14-19.2 12l-85.6-19.7L74.3 130c-8.6-1.9-17.2 3.5-19.1 12.2s3.5 17.2 12.2 19.1l187.5 41.6c10.2 2.3 17.8 10.9 18.7 21.4l.1 1c.6 6.6-1.5 13.1-5.8 18.1s-10.6 7.9-17.2 8.2L63.6 258.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hand-sparkles\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e05d\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clean\", \"covid-19\", \"hygiene\", \"magic\", \"palm\", \"soap\", \"wash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e05d\",\n    \"label\": \"Hand Sparkles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 0c17.7 0 32 14.3 32 32V240c0 8.8 7.2 16 16 16s16-7.2 16-16V64c0-17.7 14.3-32 32-32s32 14.3 32 32V240c0 8.8 7.2 16 16 16s16-7.2 16-16V128c0-17.7 14.3-32 32-32s32 14.3 32 32V323.1c-11.9 4.8-21.3 14.9-25 27.8l-8.9 31.2L478.9 391C460.6 396.3 448 413 448 432c0 18.9 12.5 35.6 30.6 40.9C448.4 497.4 409.9 512 368 512H348.8c-59.6 0-116.9-22.9-160-64L76.4 341c-16-15.2-16.6-40.6-1.4-56.6s40.6-16.6 56.6-1.4l60.5 57.6c0-1.5-.1-3.1-.1-4.6V64c0-17.7 14.3-32 32-32s32 14.3 32 32V240c0 8.8 7.2 16 16 16s16-7.2 16-16V32c0-17.7 14.3-32 32-32zm-7.3 326.6c-1.1-3.9-4.7-6.6-8.7-6.6s-7.6 2.7-8.7 6.6L288 352l-25.4 7.3c-3.9 1.1-6.6 4.7-6.6 8.7s2.7 7.6 6.6 8.7L288 384l7.3 25.4c1.1 3.9 4.7 6.6 8.7 6.6s7.6-2.7 8.7-6.6L320 384l25.4-7.3c3.9-1.1 6.6-4.7 6.6-8.7s-2.7-7.6-6.6-8.7L320 352l-7.3-25.4zM104 120l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L104 168 90.2 216.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L56 168 7.7 154.2C3.1 152.9 0 148.7 0 144s3.1-8.9 7.7-10.2L56 120 69.8 71.7C71.1 67.1 75.3 64 80 64s8.9 3.1 10.2 7.7L104 120zM584 408l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L584 456l-13.8 48.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L536 456l-48.3-13.8c-4.6-1.3-7.7-5.5-7.7-10.2s3.1-8.9 7.7-10.2L536 408l13.8-48.3c1.3-4.6 5.5-7.7 10.2-7.7s8.9 3.1 10.2 7.7L584 408z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 0c17.7 0 32 14.3 32 32V240c0 8.8 7.2 16 16 16s16-7.2 16-16V64c0-17.7 14.3-32 32-32s32 14.3 32 32V240c0 8.8 7.2 16 16 16s16-7.2 16-16V128c0-17.7 14.3-32 32-32s32 14.3 32 32V323.1c-11.9 4.8-21.3 14.9-25 27.8l-8.9 31.2L478.9 391C460.6 396.3 448 413 448 432c0 18.9 12.5 35.6 30.6 40.9C448.4 497.4 409.9 512 368 512H348.8c-59.6 0-116.9-22.9-160-64L76.4 341c-16-15.2-16.6-40.6-1.4-56.6s40.6-16.6 56.6-1.4l60.5 57.6c0-1.5-.1-3.1-.1-4.6V64c0-17.7 14.3-32 32-32s32 14.3 32 32V240c0 8.8 7.2 16 16 16s16-7.2 16-16V32c0-17.7 14.3-32 32-32zm-7.3 326.6c-1.1-3.9-4.7-6.6-8.7-6.6s-7.6 2.7-8.7 6.6L288 352l-25.4 7.3c-3.9 1.1-6.6 4.7-6.6 8.7s2.7 7.6 6.6 8.7L288 384l7.3 25.4c1.1 3.9 4.7 6.6 8.7 6.6s7.6-2.7 8.7-6.6L320 384l25.4-7.3c3.9-1.1 6.6-4.7 6.6-8.7s-2.7-7.6-6.6-8.7L320 352l-7.3-25.4zM104 120l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L104 168 90.2 216.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L56 168 7.7 154.2C3.1 152.9 0 148.7 0 144s3.1-8.9 7.7-10.2L56 120 69.8 71.7C71.1 67.1 75.3 64 80 64s8.9 3.1 10.2 7.7L104 120zM584 408l48.3 13.8c4.6 1.3 7.7 5.5 7.7 10.2s-3.1 8.9-7.7 10.2L584 456l-13.8 48.3c-1.3 4.6-5.5 7.7-10.2 7.7s-8.9-3.1-10.2-7.7L536 456l-48.3-13.8c-4.6-1.3-7.7-5.5-7.7-10.2s3.1-8.9 7.7-10.2L536 408l13.8-48.3c1.3-4.6 5.5-7.7 10.2-7.7s8.9 3.1 10.2 7.7L584 408z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hand-spock\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f596\"],\n        \"secondary\": [\"10f259\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"finger\",\n        \"hand\",\n        \"live long\",\n        \"palm\",\n        \"prosper\",\n        \"salute\",\n        \"spock\",\n        \"star trek\",\n        \"vulcan\",\n        \"vulcan salute\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f259\",\n    \"label\": \"Hand Spock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M246.9 23.7C242.3 6.6 224.8-3.5 207.7 1.1s-27.2 22.1-22.6 39.2L238 237.8c2.5 9.2-4.5 18.2-14 18.2c-6.4 0-12-4.2-13.9-10.3L166.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L99.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L156.8 448c43.1 41.1 100.4 64 160 64h10.9 8.2c.1 0 .1-.1 .1-.1v0c0-.1 .1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L443.5 247.1c-1.6 5.3-6.4 8.9-12 8.9c-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-37.9 24.7L355.1 235.1c-2.6 12.2-13.3 20.9-25.8 20.9c-11.9 0-22.4-8-25.4-19.5l-57-212.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M246.9 23.7C242.3 6.6 224.8-3.5 207.7 1.1s-27.2 22.1-22.6 39.2L238 237.8c2.5 9.2-4.5 18.2-14 18.2c-6.4 0-12-4.2-13.9-10.3L166.6 102.7c-5.1-16.9-23-26.4-39.9-21.3s-26.4 23-21.3 39.9l62.8 206.4c2.4 7.9-7.2 13.8-13.2 8.1L99.6 283c-16-15.2-41.3-14.6-56.6 1.4s-14.6 41.3 1.4 56.6L156.8 448c43.1 41.1 100.4 64 160 64h10.9 8.2c.1 0 .1-.1 .1-.1v0c0-.1 .1-.1 .1-.1c58.3-3.5 108.6-43.2 125.3-99.7l81.2-275c5-16.9-4.7-34.7-21.6-39.8s-34.7 4.7-39.8 21.6L443.5 247.1c-1.6 5.3-6.4 8.9-12 8.9c-7.9 0-13.8-7.3-12.2-15.1l36-170.3c3.7-17.3-7.4-34.3-24.7-37.9s-34.3 7.4-37.9 24.7L355.1 235.1c-2.6 12.2-13.3 20.9-25.8 20.9c-11.9 0-22.4-8-25.4-19.5l-57-212.8z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M170.2 80.8C161 47 180.8 12 214.6 2.4c34-9.6 69.4 10.2 79 44.2l30.3 107.1L337.1 84c6.6-34.7 40.1-57.5 74.8-50.9c31.4 6 53 33.9 52 64.9c10-2.6 20.8-2.8 31.5-.1c34.3 8.6 55.1 43.3 46.6 77.6L486.7 397.2C469.8 464.7 409.2 512 339.6 512c-11.2 0-22.5 0-33.7 0c-56.9 0-112.2-19-157.2-53.9l-92-71.6c-27.9-21.7-32.9-61.9-11.2-89.8s61.9-32.9 89.8-11.2l17 13.2L100.5 167.5c-13-32.9 3.2-70.1 36-83c11.1-4.4 22.7-5.4 33.7-3.7zm77.1-21.2c-2.4-8.5-11.2-13.4-19.7-11s-13.4 11.2-11 19.7l54.8 182.4c3.5 12.3-3.3 25.2-15.4 29.3s-25.3-2-30-13.9L174.9 138.1c-3.2-8.2-12.5-12.3-20.8-9s-12.3 12.5-9 20.8l73.3 185.6c12 30.3-23.7 57-49.4 37l-63.1-49.1c-7-5.4-17-4.2-22.5 2.8s-4.2 17 2.8 22.5l92 71.6c36.5 28.4 81.4 43.8 127.7 43.8c11.2 0 22.5 0 33.7 0c47.5 0 89-32.4 100.5-78.5l55.4-221.6c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-26 104C435.6 271.8 425 280 413 280c-16.5 0-28.9-15-25.8-31.2L415.7 99c1.7-8.7-4-17.1-12.7-18.7s-17.1 4-18.7 12.7L352.5 260c-2.2 11.6-12.4 20-24.2 20c-11 0-20.7-7.3-23.7-17.9L247.4 59.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M170.2 80.8C161 47 180.8 12 214.6 2.4c34-9.6 69.4 10.2 79 44.2l30.3 107.1L337.1 84c6.6-34.7 40.1-57.5 74.8-50.9c31.4 6 53 33.9 52 64.9c10-2.6 20.8-2.8 31.5-.1c34.3 8.6 55.1 43.3 46.6 77.6L486.7 397.2C469.8 464.7 409.2 512 339.6 512c-11.2 0-22.5 0-33.7 0c-56.9 0-112.2-19-157.2-53.9l-92-71.6c-27.9-21.7-32.9-61.9-11.2-89.8s61.9-32.9 89.8-11.2l17 13.2L100.5 167.5c-13-32.9 3.2-70.1 36-83c11.1-4.4 22.7-5.4 33.7-3.7zm77.1-21.2c-2.4-8.5-11.2-13.4-19.7-11s-13.4 11.2-11 19.7l54.8 182.4c3.5 12.3-3.3 25.2-15.4 29.3s-25.3-2-30-13.9L174.9 138.1c-3.2-8.2-12.5-12.3-20.8-9s-12.3 12.5-9 20.8l73.3 185.6c12 30.3-23.7 57-49.4 37l-63.1-49.1c-7-5.4-17-4.2-22.5 2.8s-4.2 17 2.8 22.5l92 71.6c36.5 28.4 81.4 43.8 127.7 43.8c11.2 0 22.5 0 33.7 0c47.5 0 89-32.4 100.5-78.5l55.4-221.6c2.1-8.6-3.1-17.3-11.6-19.4s-17.3 3.1-19.4 11.6l-26 104C435.6 271.8 425 280 413 280c-16.5 0-28.9-15-25.8-31.2L415.7 99c1.7-8.7-4-17.1-12.7-18.7s-17.1 4-18.7 12.7L352.5 260c-2.2 11.6-12.4 20-24.2 20c-11 0-20.7-7.3-23.7-17.9L247.4 59.6z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"handcuffs\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrest\",\n        \"criminal\",\n        \"handcuffs\",\n        \"jail\",\n        \"lock\",\n        \"police\",\n        \"wrist\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f8\",\n    \"label\": \"Handcuffs\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M240 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM192 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32 80c17.7 0 32 14.3 32 32h8c13.3 0 24 10.7 24 24v16c0 1.7-.2 3.4-.5 5.1C280.3 229.6 320 286.2 320 352c0 88.4-71.6 160-160 160S0 440.4 0 352c0-65.8 39.7-122.4 96.5-146.9c-.4-1.6-.5-3.3-.5-5.1V184c0-13.3 10.7-24 24-24h8c0-17.7 14.3-32 32-32zm0 320a96 96 0 1 0 0-192 96 96 0 1 0 0 192zm192-96c0-25.9-5.1-50.5-14.4-73.1c16.9-32.9 44.8-59.1 78.9-73.9c-.4-1.6-.5-3.3-.5-5.1V184c0-13.3 10.7-24 24-24h8c0-17.7 14.3-32 32-32s32 14.3 32 32h8c13.3 0 24 10.7 24 24v16c0 1.7-.2 3.4-.5 5.1C600.3 229.6 640 286.2 640 352c0 88.4-71.6 160-160 160c-62 0-115.8-35.3-142.4-86.9c9.3-22.5 14.4-47.2 14.4-73.1zm224 0a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM368 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm80 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M240 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM192 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32 80c17.7 0 32 14.3 32 32h8c13.3 0 24 10.7 24 24v16c0 1.7-.2 3.4-.5 5.1C280.3 229.6 320 286.2 320 352c0 88.4-71.6 160-160 160S0 440.4 0 352c0-65.8 39.7-122.4 96.5-146.9c-.4-1.6-.5-3.3-.5-5.1V184c0-13.3 10.7-24 24-24h8c0-17.7 14.3-32 32-32zm0 320a96 96 0 1 0 0-192 96 96 0 1 0 0 192zm192-96c0-25.9-5.1-50.5-14.4-73.1c16.9-32.9 44.8-59.1 78.9-73.9c-.4-1.6-.5-3.3-.5-5.1V184c0-13.3 10.7-24 24-24h8c0-17.7 14.3-32 32-32s32 14.3 32 32h8c13.3 0 24 10.7 24 24v16c0 1.7-.2 3.4-.5 5.1C600.3 229.6 640 286.2 640 352c0 88.4-71.6 160-160 160c-62 0-115.8-35.3-142.4-86.9c9.3-22.5 14.4-47.2 14.4-73.1zm224 0a96 96 0 1 0 -192 0 96 96 0 1 0 192 0zM368 0a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm80 48a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands\": {\n    \"aliases\": {\n      \"names\": [\"sign-language\", \"signing\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2a7\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Translate\", \"asl\", \"deaf\", \"hands\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a7\",\n    \"label\": \"Hands\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M544 160l-.1 72.6c-.1 52.2-24 101-64 133.1c.1-1.9 .1-3.8 .1-5.7v-8c0-71.8-37-138.6-97.9-176.7l-60.2-37.6c-8.6-5.4-17.9-8.4-27.3-9.4L248.7 48.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8l78 135.1c3.3 5.7 10.7 7.7 16.4 4.4s7.7-10.7 4.4-16.4l-62-107.4c-6.6-11.5-2.7-26.2 8.8-32.8S362 5 368.6 16.5l68 117.8 0 0 0 0 43.3 75L480 160c0-17.7 14.4-32 32-32s32 14.4 32 32zM243.9 88.5L268.5 131c-13.9 4.5-26.4 13.7-34.7 27c-.9 1.4-1.7 2.9-2.5 4.4l-28.9-50c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zm-46.4 63.7l26.8 46.4c.6 6 2.1 11.8 4.3 17.4H224 210.7l0 0H179l-23-39.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zM260.9 175c9.4-15 29.1-19.5 44.1-10.2l60.2 37.6C416.7 234.7 448 291.2 448 352v8c0 83.9-68.1 152-152 152H120c-13.3 0-24-10.7-24-24s10.7-24 24-24h92c6.6 0 12-5.4 12-12s-5.4-12-12-12H88c-13.3 0-24-10.7-24-24s10.7-24 24-24H212c6.6 0 12-5.4 12-12s-5.4-12-12-12H56c-13.3 0-24-10.7-24-24s10.7-24 24-24H212c6.6 0 12-5.4 12-12s-5.4-12-12-12H88c-13.3 0-24-10.7-24-24s10.7-24 24-24H224l0 0 0 0h93.2L271 219.1c-15-9.4-19.5-29.1-10.2-44.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M544 160l-.1 72.6c-.1 52.2-24 101-64 133.1c.1-1.9 .1-3.8 .1-5.7v-8c0-71.8-37-138.6-97.9-176.7l-60.2-37.6c-8.6-5.4-17.9-8.4-27.3-9.4L248.7 48.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8l78 135.1c3.3 5.7 10.7 7.7 16.4 4.4s7.7-10.7 4.4-16.4l-62-107.4c-6.6-11.5-2.7-26.2 8.8-32.8S362 5 368.6 16.5l68 117.8 0 0 0 0 43.3 75L480 160c0-17.7 14.4-32 32-32s32 14.4 32 32zM243.9 88.5L268.5 131c-13.9 4.5-26.4 13.7-34.7 27c-.9 1.4-1.7 2.9-2.5 4.4l-28.9-50c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zm-46.4 63.7l26.8 46.4c.6 6 2.1 11.8 4.3 17.4H224 210.7l0 0H179l-23-39.8c-6.6-11.5-2.7-26.2 8.8-32.8s26.2-2.7 32.8 8.8zM260.9 175c9.4-15 29.1-19.5 44.1-10.2l60.2 37.6C416.7 234.7 448 291.2 448 352v8c0 83.9-68.1 152-152 152H120c-13.3 0-24-10.7-24-24s10.7-24 24-24h92c6.6 0 12-5.4 12-12s-5.4-12-12-12H88c-13.3 0-24-10.7-24-24s10.7-24 24-24H212c6.6 0 12-5.4 12-12s-5.4-12-12-12H56c-13.3 0-24-10.7-24-24s10.7-24 24-24H212c6.6 0 12-5.4 12-12s-5.4-12-12-12H88c-13.3 0-24-10.7-24-24s10.7-24 24-24H224l0 0 0 0h93.2L271 219.1c-15-9.4-19.5-29.1-10.2-44.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-asl-interpreting\": {\n    \"aliases\": {\n      \"names\": [\n        \"american-sign-language-interpreting\",\n        \"asl-interpreting\",\n        \"hands-american-sign-language-interpreting\"\n      ],\n      \"unicodes\": {\n        \"secondary\": [\"10f2a3\"]\n      }\n    },\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"asl\", \"deaf\", \"finger\", \"hand\", \"interpret\", \"speak\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a3\",\n    \"label\": \"Hands Asl Interpreting\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M156.6 46.3c7.9-15.8 1.5-35-14.3-42.9s-35-1.5-42.9 14.3L13.5 189.4C4.6 207.2 0 226.8 0 246.7V256c0 70.7 57.3 128 128 128h72 8v-.3c35.2-2.7 65.4-22.8 82.1-51.7c8.8-15.3 3.6-34.9-11.7-43.7s-34.9-3.6-43.7 11.7c-7 12-19.9 20-34.7 20c-22.1 0-40-17.9-40-40s17.9-40 40-40c14.8 0 27.7 8 34.7 20c8.8 15.3 28.4 20.5 43.7 11.7s20.5-28.4 11.7-43.7c-12.8-22.1-33.6-39.1-58.4-47.1l80.8-22c17-4.6 27.1-22.2 22.5-39.3s-22.2-27.1-39.3-22.5L194.9 124.6l81.6-68c13.6-11.3 15.4-31.5 4.1-45.1S249.1-3.9 235.5 7.4L133.6 92.3l23-46zM483.4 465.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l85.9-171.7c8.9-17.8 13.5-37.4 13.5-57.2V256c0-70.7-57.3-128-128-128H440h-8v.3c-35.2 2.7-65.4 22.8-82.1 51.7c-8.9 15.3-3.6 34.9 11.7 43.7s34.9 3.6 43.7-11.7c7-12 19.9-20 34.7-20c22.1 0 40 17.9 40 40s-17.9 40-40 40c-14.8 0-27.7-8-34.7-20c-8.9-15.3-28.4-20.5-43.7-11.7s-20.5 28.4-11.7 43.7c12.8 22.1 33.6 39.1 58.4 47.1l-80.8 22c-17.1 4.7-27.1 22.2-22.5 39.3s22.2 27.1 39.3 22.5l100.7-27.5-81.6 68c-13.6 11.3-15.4 31.5-4.1 45.1s31.5 15.4 45.1 4.1l101.9-84.9-23 46z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M156.6 46.3c7.9-15.8 1.5-35-14.3-42.9s-35-1.5-42.9 14.3L13.5 189.4C4.6 207.2 0 226.8 0 246.7V256c0 70.7 57.3 128 128 128h72 8v-.3c35.2-2.7 65.4-22.8 82.1-51.7c8.8-15.3 3.6-34.9-11.7-43.7s-34.9-3.6-43.7 11.7c-7 12-19.9 20-34.7 20c-22.1 0-40-17.9-40-40s17.9-40 40-40c14.8 0 27.7 8 34.7 20c8.8 15.3 28.4 20.5 43.7 11.7s20.5-28.4 11.7-43.7c-12.8-22.1-33.6-39.1-58.4-47.1l80.8-22c17-4.6 27.1-22.2 22.5-39.3s-22.2-27.1-39.3-22.5L194.9 124.6l81.6-68c13.6-11.3 15.4-31.5 4.1-45.1S249.1-3.9 235.5 7.4L133.6 92.3l23-46zM483.4 465.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3l85.9-171.7c8.9-17.8 13.5-37.4 13.5-57.2V256c0-70.7-57.3-128-128-128H440h-8v.3c-35.2 2.7-65.4 22.8-82.1 51.7c-8.9 15.3-3.6 34.9 11.7 43.7s34.9 3.6 43.7-11.7c7-12 19.9-20 34.7-20c22.1 0 40 17.9 40 40s-17.9 40-40 40c-14.8 0-27.7-8-34.7-20c-8.9-15.3-28.4-20.5-43.7-11.7s-20.5 28.4-11.7 43.7c12.8 22.1 33.6 39.1 58.4 47.1l-80.8 22c-17.1 4.7-27.1 22.2-22.5 39.3s22.2 27.1 39.3 22.5l100.7-27.5-81.6 68c-13.6 11.3-15.4 31.5-4.1 45.1s31.5 15.4 45.1 4.1l101.9-84.9-23 46z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-bound\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abduction\", \"bound\", \"handcuff\", \"wrist\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4f9\",\n    \"label\": \"Hands Bound\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 32C96 14.3 81.7 0 64 0S32 14.3 32 32V96v59.1 .7V192v21.9c0 14.2 5.1 27.9 14.3 38.7L131.6 352H128c-13.3 0-24 10.7-24 24s10.7 24 24 24h32H288h64H480h32c13.3 0 24-10.7 24-24s-10.7-24-24-24h-3.6l85.3-99.5c9.2-10.8 14.3-24.5 14.3-38.7V192 155.8v-.7V96 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V96v48.8l-69.3 92.4c-5.7 7.6-16.1 9.6-24.2 4.8c-9.7-5.7-12.1-18.7-5.1-27.5L473 180c10.8-13.5 8.9-33.3-4.4-44.5s-33-9.8-44.5 3.2l-46.7 52.5C361 209.7 352 233.4 352 258.1V320v32H288V320 258.1c0-24.6-9-48.4-25.4-66.8l-46.7-52.5c-11.5-13-31.3-14.4-44.5-3.2s-15.2 30.9-4.4 44.5l27.6 34.5c7 8.8 4.7 21.8-5.1 27.5c-8.1 4.8-18.6 2.7-24.2-4.8L96 144.8V96 32zm64 448v32H288V480h64v32H480V480h32c13.3 0 24-10.7 24-24s-10.7-24-24-24H480 352 288 160 128c-13.3 0-24 10.7-24 24s10.7 24 24 24h32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 32C96 14.3 81.7 0 64 0S32 14.3 32 32V96v59.1 .7V192v21.9c0 14.2 5.1 27.9 14.3 38.7L131.6 352H128c-13.3 0-24 10.7-24 24s10.7 24 24 24h32H288h64H480h32c13.3 0 24-10.7 24-24s-10.7-24-24-24h-3.6l85.3-99.5c9.2-10.8 14.3-24.5 14.3-38.7V192 155.8v-.7V96 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V96v48.8l-69.3 92.4c-5.7 7.6-16.1 9.6-24.2 4.8c-9.7-5.7-12.1-18.7-5.1-27.5L473 180c10.8-13.5 8.9-33.3-4.4-44.5s-33-9.8-44.5 3.2l-46.7 52.5C361 209.7 352 233.4 352 258.1V320v32H288V320 258.1c0-24.6-9-48.4-25.4-66.8l-46.7-52.5c-11.5-13-31.3-14.4-44.5-3.2s-15.2 30.9-4.4 44.5l27.6 34.5c7 8.8 4.7 21.8-5.1 27.5c-8.1 4.8-18.6 2.7-24.2-4.8L96 144.8V96 32zm64 448v32H288V480h64v32H480V480h32c13.3 0 24-10.7 24-24s-10.7-24-24-24H480 352 288 160 128c-13.3 0-24 10.7-24 24s10.7 24 24 24h32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-bubbles\": {\n    \"aliases\": {\n      \"names\": [\"hands-wash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e05e\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"covid-19\", \"hygiene\", \"soap\", \"wash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e05e\",\n    \"label\": \"Hands Bubbles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M416 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM160 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM32 160l.1 72.6c.1 52.2 24 101 64 133.1c-.1-1.9-.1-3.8-.1-5.7v-8c0-71.8 37-138.6 97.9-176.7l60.2-37.6c8.6-5.4 17.9-8.4 27.3-9.4l45.9-79.5c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8l-78 135.1c-3.3 5.7-10.7 7.7-16.4 4.4s-7.7-10.7-4.4-16.4l62-107.4c6.6-11.5 2.7-26.2-8.8-32.8S214 5 207.4 16.5l-68 117.8 0 0 0 0-43.3 75L96 160c0-17.7-14.4-32-32-32s-32 14.4-32 32zM332.1 88.5L307.5 131c13.9 4.5 26.4 13.7 34.7 27c.9 1.5 1.7 2.9 2.5 4.4l28.9-50c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zm46.4 63.7l-26.8 46.4c-.6 6-2.1 11.8-4.3 17.4H352h13.3l0 0H397l23-39.8c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zM315.1 175c-9.4-15-29.1-19.5-44.1-10.2l-60.2 37.6C159.3 234.7 128 291.2 128 352v8c0 8.9 .8 17.6 2.2 26.1c35.4 8.2 61.8 40 61.8 77.9c0 6.3-.7 12.5-2.1 18.4C215.1 501 246.3 512 280 512H456c13.3 0 24-10.7 24-24s-10.7-24-24-24H364c-6.6 0-12-5.4-12-12s5.4-12 12-12H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H364c-6.6 0-12-5.4-12-12s5.4-12 12-12H520c13.3 0 24-10.7 24-24s-10.7-24-24-24H364c-6.6 0-12-5.4-12-12s5.4-12 12-12H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H352l0 0 0 0H258.8L305 219.1c15-9.4 19.5-29.1 10.2-44.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M416 64a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM160 464a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM32 160l.1 72.6c.1 52.2 24 101 64 133.1c-.1-1.9-.1-3.8-.1-5.7v-8c0-71.8 37-138.6 97.9-176.7l60.2-37.6c8.6-5.4 17.9-8.4 27.3-9.4l45.9-79.5c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8l-78 135.1c-3.3 5.7-10.7 7.7-16.4 4.4s-7.7-10.7-4.4-16.4l62-107.4c6.6-11.5 2.7-26.2-8.8-32.8S214 5 207.4 16.5l-68 117.8 0 0 0 0-43.3 75L96 160c0-17.7-14.4-32-32-32s-32 14.4-32 32zM332.1 88.5L307.5 131c13.9 4.5 26.4 13.7 34.7 27c.9 1.5 1.7 2.9 2.5 4.4l28.9-50c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zm46.4 63.7l-26.8 46.4c-.6 6-2.1 11.8-4.3 17.4H352h13.3l0 0H397l23-39.8c6.6-11.5 2.7-26.2-8.8-32.8s-26.2-2.7-32.8 8.8zM315.1 175c-9.4-15-29.1-19.5-44.1-10.2l-60.2 37.6C159.3 234.7 128 291.2 128 352v8c0 8.9 .8 17.6 2.2 26.1c35.4 8.2 61.8 40 61.8 77.9c0 6.3-.7 12.5-2.1 18.4C215.1 501 246.3 512 280 512H456c13.3 0 24-10.7 24-24s-10.7-24-24-24H364c-6.6 0-12-5.4-12-12s5.4-12 12-12H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H364c-6.6 0-12-5.4-12-12s5.4-12 12-12H520c13.3 0 24-10.7 24-24s-10.7-24-24-24H364c-6.6 0-12-5.4-12-12s5.4-12 12-12H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H352l0 0 0 0H258.8L305 219.1c15-9.4 19.5-29.1 10.2-44.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-clapping\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"applause\", \"clap\", \"clapping hands\", \"hand\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1a8\",\n    \"label\": \"Hands Clapping\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M336 16V80c0 8.8-7.2 16-16 16s-16-7.2-16-16V16c0-8.8 7.2-16 16-16s16 7.2 16 16zm-98.7 7.1l32 48c4.9 7.4 2.9 17.3-4.4 22.2s-17.3 2.9-22.2-4.4l-32-48c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4zM135 119c9.4-9.4 24.6-9.4 33.9 0L292.7 242.7c10.1 10.1 27.3 2.9 27.3-11.3V192c0-17.7 14.3-32 32-32s32 14.3 32 32V345.6c0 57.1-30 110-78.9 139.4c-64 38.4-145.8 28.3-198.5-24.4L7 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l53 53c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L23 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l93 93c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L55 185c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l117 117c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1l-93-93c-9.4-9.4-9.4-24.6 0-33.9zM433.1 484.9c-24.2 14.5-50.9 22.1-77.7 23.1c48.1-39.6 76.6-99 76.6-162.4l0-98.1c8.2-.1 16-6.4 16-16V192c0-17.7 14.3-32 32-32s32 14.3 32 32V345.6c0 57.1-30 110-78.9 139.4zM424.9 18.7c7.4 4.9 9.3 14.8 4.4 22.2l-32 48c-4.9 7.4-14.8 9.3-22.2 4.4s-9.3-14.8-4.4-22.2l32-48c4.9-7.4 14.8-9.3 22.2-4.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M336 16V80c0 8.8-7.2 16-16 16s-16-7.2-16-16V16c0-8.8 7.2-16 16-16s16 7.2 16 16zm-98.7 7.1l32 48c4.9 7.4 2.9 17.3-4.4 22.2s-17.3 2.9-22.2-4.4l-32-48c-4.9-7.4-2.9-17.3 4.4-22.2s17.3-2.9 22.2 4.4zM135 119c9.4-9.4 24.6-9.4 33.9 0L292.7 242.7c10.1 10.1 27.3 2.9 27.3-11.3V192c0-17.7 14.3-32 32-32s32 14.3 32 32V345.6c0 57.1-30 110-78.9 139.4c-64 38.4-145.8 28.3-198.5-24.4L7 361c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l53 53c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L23 265c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l93 93c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1L55 185c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l117 117c6.1 6.1 16 6.1 22.1 0s6.1-16 0-22.1l-93-93c-9.4-9.4-9.4-24.6 0-33.9zM433.1 484.9c-24.2 14.5-50.9 22.1-77.7 23.1c48.1-39.6 76.6-99 76.6-162.4l0-98.1c8.2-.1 16-6.4 16-16V192c0-17.7 14.3-32 32-32s32 14.3 32 32V345.6c0 57.1-30 110-78.9 139.4zM424.9 18.7c7.4 4.9 9.3 14.8 4.4 22.2l-32 48c-4.9 7.4-14.8 9.3-22.2 4.4s-9.3-14.8-4.4-22.2l32-48c4.9-7.4 14.8-9.3 22.2-4.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-holding\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4c2\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"hold\", \"lift\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4c2\",\n    \"label\": \"Hands Holding\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M80 104c0-22.1-17.9-40-40-40S0 81.9 0 104v56 64V325.5c0 25.5 10.1 49.9 28.1 67.9L128 493.3c12 12 28.3 18.7 45.3 18.7H240c26.5 0 48-21.5 48-48V385.1c0-29.7-11.8-58.2-32.8-79.2l-25.3-25.3 0 0-15.2-15.2-32-32c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l32 32 15.2 15.2c11 11 9.2 29.2-3.7 37.8c-9.7 6.5-22.7 5.2-31-3.1L98.7 309.5c-12-12-18.7-28.3-18.7-45.3V224 144 104zm480 0v40 80 40.2c0 17-6.7 33.3-18.7 45.3l-51.1 51.1c-8.3 8.3-21.3 9.6-31 3.1c-12.9-8.6-14.7-26.9-3.7-37.8l15.2-15.2 32-32c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-32 32-15.2 15.2 0 0-25.3 25.3c-21 21-32.8 49.5-32.8 79.2V464c0 26.5 21.5 48 48 48h66.7c17 0 33.3-6.7 45.3-18.7l99.9-99.9c18-18 28.1-42.4 28.1-67.9V224 160 104c0-22.1-17.9-40-40-40s-40 17.9-40 40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M80 104c0-22.1-17.9-40-40-40S0 81.9 0 104v56 64V325.5c0 25.5 10.1 49.9 28.1 67.9L128 493.3c12 12 28.3 18.7 45.3 18.7H240c26.5 0 48-21.5 48-48V385.1c0-29.7-11.8-58.2-32.8-79.2l-25.3-25.3 0 0-15.2-15.2-32-32c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l32 32 15.2 15.2c11 11 9.2 29.2-3.7 37.8c-9.7 6.5-22.7 5.2-31-3.1L98.7 309.5c-12-12-18.7-28.3-18.7-45.3V224 144 104zm480 0v40 80 40.2c0 17-6.7 33.3-18.7 45.3l-51.1 51.1c-8.3 8.3-21.3 9.6-31 3.1c-12.9-8.6-14.7-26.9-3.7-37.8l15.2-15.2 32-32c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-32 32-15.2 15.2 0 0-25.3 25.3c-21 21-32.8 49.5-32.8 79.2V464c0 26.5 21.5 48 48 48h66.7c17 0 33.3-6.7 45.3-18.7l99.9-99.9c18-18 28.1-42.4 28.1-67.9V224 160 104c0-22.1-17.9-40-40-40s-40 17.9-40 40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-holding-child\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"care\", \"give\", \"help\", \"hold\", \"protect\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4fa\",\n    \"label\": \"Hands Holding Child\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 0a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm44.7 164.3L375.8 253c1.6 13.2-7.7 25.1-20.8 26.8s-25.1-7.7-26.8-20.8l-4.4-35h-7.6l-4.4 35c-1.6 13.2-13.6 22.5-26.8 20.8s-22.5-13.6-20.8-26.8l11.1-88.8L255.5 181c-10.1 8.6-25.3 7.3-33.8-2.8s-7.3-25.3 2.8-33.8l27.9-23.6C271.3 104.8 295.3 96 320 96s48.7 8.8 67.6 24.7l27.9 23.6c10.1 8.6 11.4 23.7 2.8 33.8s-23.7 11.4-33.8 2.8l-19.8-16.7zM40 64c22.1 0 40 17.9 40 40v40 80 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2 0 0 25.3 25.3c21 21 32.8 49.5 32.8 79.2V464c0 26.5-21.5 48-48 48H173.3c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5V224 160 104C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40v56 64V325.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7H400c-26.5 0-48-21.5-48-48V385.1c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3 0 0 15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3V224 144 104c0-22.1 17.9-40 40-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 0a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm44.7 164.3L375.8 253c1.6 13.2-7.7 25.1-20.8 26.8s-25.1-7.7-26.8-20.8l-4.4-35h-7.6l-4.4 35c-1.6 13.2-13.6 22.5-26.8 20.8s-22.5-13.6-20.8-26.8l11.1-88.8L255.5 181c-10.1 8.6-25.3 7.3-33.8-2.8s-7.3-25.3 2.8-33.8l27.9-23.6C271.3 104.8 295.3 96 320 96s48.7 8.8 67.6 24.7l27.9 23.6c10.1 8.6 11.4 23.7 2.8 33.8s-23.7 11.4-33.8 2.8l-19.8-16.7zM40 64c22.1 0 40 17.9 40 40v40 80 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2 0 0 25.3 25.3c21 21 32.8 49.5 32.8 79.2V464c0 26.5-21.5 48-48 48H173.3c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5V224 160 104C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40v56 64V325.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7H400c-26.5 0-48-21.5-48-48V385.1c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3 0 0 15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3V224 144 104c0-22.1 17.9-40 40-40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-holding-circle\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"circle\", \"gift\", \"protection\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4fb\",\n    \"label\": \"Hands Holding Circle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 0a128 128 0 1 1 0 256A128 128 0 1 1 320 0zM40 64c22.1 0 40 17.9 40 40v40 80 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2 0 0 25.3 25.3c21 21 32.8 49.5 32.8 79.2V464c0 26.5-21.5 48-48 48H173.3c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5V224 160 104C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40v56 64V325.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7H400c-26.5 0-48-21.5-48-48V385.1c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3 0 0 15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3V224 144 104c0-22.1 17.9-40 40-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 0a128 128 0 1 1 0 256A128 128 0 1 1 320 0zM40 64c22.1 0 40 17.9 40 40v40 80 40.2c0 17 6.7 33.3 18.7 45.3l51.1 51.1c8.3 8.3 21.3 9.6 31 3.1c12.9-8.6 14.7-26.9 3.7-37.8l-15.2-15.2-32-32c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l32 32 15.2 15.2 0 0 25.3 25.3c21 21 32.8 49.5 32.8 79.2V464c0 26.5-21.5 48-48 48H173.3c-17 0-33.3-6.7-45.3-18.7L28.1 393.4C10.1 375.4 0 351 0 325.5V224 160 104C0 81.9 17.9 64 40 64zm560 0c22.1 0 40 17.9 40 40v56 64V325.5c0 25.5-10.1 49.9-28.1 67.9L512 493.3c-12 12-28.3 18.7-45.3 18.7H400c-26.5 0-48-21.5-48-48V385.1c0-29.7 11.8-58.2 32.8-79.2l25.3-25.3 0 0 15.2-15.2 32-32c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3l-32 32-15.2 15.2c-11 11-9.2 29.2 3.7 37.8c9.7 6.5 22.7 5.2 31-3.1l51.1-51.1c12-12 18.7-28.3 18.7-45.3V224 144 104c0-22.1 17.9-40 40-40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hands-praying\": {\n    \"aliases\": {\n      \"names\": [\"praying-hands\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f684\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"kneel\", \"preach\", \"religion\", \"worship\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f684\",\n    \"label\": \"Hands Praying\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M351.2 4.8c3.2-2 6.6-3.3 10-4.1c4.7-1 9.6-.9 14.1 .1c7.7 1.8 14.8 6.5 19.4 13.6L514.6 194.2c8.8 13.1 13.4 28.6 13.4 44.4v73.5c0 6.9 4.4 13 10.9 15.2l79.2 26.4C631.2 358 640 370.2 640 384v96c0 9.9-4.6 19.3-12.5 25.4s-18.1 8.1-27.7 5.5L431 465.9c-56-14.9-95-65.7-95-123.7V224c0-17.7 14.3-32 32-32s32 14.3 32 32v80c0 8.8 7.2 16 16 16s16-7.2 16-16V219.1c0-7-1.8-13.8-5.3-19.8L340.3 48.1c-1.7-3-2.9-6.1-3.6-9.3c-1-4.7-1-9.6 .1-14.1c1.9-8 6.8-15.2 14.3-19.9zm-62.4 0c7.5 4.6 12.4 11.9 14.3 19.9c1.1 4.6 1.2 9.4 .1 14.1c-.7 3.2-1.9 6.3-3.6 9.3L213.3 199.3c-3.5 6-5.3 12.9-5.3 19.8V304c0 8.8 7.2 16 16 16s16-7.2 16-16V224c0-17.7 14.3-32 32-32s32 14.3 32 32V342.3c0 58-39 108.7-95 123.7l-168.7 45c-9.6 2.6-19.9 .5-27.7-5.5S0 490 0 480V384c0-13.8 8.8-26 21.9-30.4l79.2-26.4c6.5-2.2 10.9-8.3 10.9-15.2V238.5c0-15.8 4.7-31.2 13.4-44.4L245.2 14.5c4.6-7.1 11.7-11.8 19.4-13.6c4.6-1.1 9.4-1.2 14.1-.1c3.5 .8 6.9 2.1 10 4.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M351.2 4.8c3.2-2 6.6-3.3 10-4.1c4.7-1 9.6-.9 14.1 .1c7.7 1.8 14.8 6.5 19.4 13.6L514.6 194.2c8.8 13.1 13.4 28.6 13.4 44.4v73.5c0 6.9 4.4 13 10.9 15.2l79.2 26.4C631.2 358 640 370.2 640 384v96c0 9.9-4.6 19.3-12.5 25.4s-18.1 8.1-27.7 5.5L431 465.9c-56-14.9-95-65.7-95-123.7V224c0-17.7 14.3-32 32-32s32 14.3 32 32v80c0 8.8 7.2 16 16 16s16-7.2 16-16V219.1c0-7-1.8-13.8-5.3-19.8L340.3 48.1c-1.7-3-2.9-6.1-3.6-9.3c-1-4.7-1-9.6 .1-14.1c1.9-8 6.8-15.2 14.3-19.9zm-62.4 0c7.5 4.6 12.4 11.9 14.3 19.9c1.1 4.6 1.2 9.4 .1 14.1c-.7 3.2-1.9 6.3-3.6 9.3L213.3 199.3c-3.5 6-5.3 12.9-5.3 19.8V304c0 8.8 7.2 16 16 16s16-7.2 16-16V224c0-17.7 14.3-32 32-32s32 14.3 32 32V342.3c0 58-39 108.7-95 123.7l-168.7 45c-9.6 2.6-19.9 .5-27.7-5.5S0 490 0 480V384c0-13.8 8.8-26 21.9-30.4l79.2-26.4c6.5-2.2 10.9-8.3 10.9-15.2V238.5c0-15.8 4.7-31.2 13.4-44.4L245.2 14.5c4.6-7.1 11.7-11.8 19.4-13.6c4.6-1.1 9.4-1.2 14.1-.1c3.5 .8 6.9 2.1 10 4.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"handshake\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f2b5\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agreement\", \"greeting\", \"meeting\", \"partnership\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2b5\",\n    \"label\": \"Handshake\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8V128h-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48V352h28.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123zM16 128c-8.8 0-16 7.2-16 16V352c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V128H16zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128V352c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V144c0-8.8-7.2-16-16-16H544zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8V128h-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48V352h28.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123zM16 128c-8.8 0-16 7.2-16 16V352c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V128H16zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128V352c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V144c0-8.8-7.2-16-16-16H544zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M272.2 64.6l-51.1 51.1c-15.3 4.2-29.5 11.9-41.5 22.5L153 161.9C142.8 171 129.5 176 115.8 176H96V304c20.4 .6 39.8 8.9 54.3 23.4l35.6 35.6 7 7 0 0L219.9 397c6.2 6.2 16.4 6.2 22.6 0c1.7-1.7 3-3.7 3.7-5.8c2.8-7.7 9.3-13.5 17.3-15.3s16.4 .6 22.2 6.5L296.5 393c11.6 11.6 30.4 11.6 41.9 0c5.4-5.4 8.3-12.3 8.6-19.4c.4-8.8 5.6-16.6 13.6-20.4s17.3-3 24.4 2.1c9.4 6.7 22.5 5.8 30.9-2.6c9.4-9.4 9.4-24.6 0-33.9L340.1 243l-35.8 33c-27.3 25.2-69.2 25.6-97 .9c-31.7-28.2-32.4-77.4-1.6-106.5l70.1-66.2C303.2 78.4 339.4 64 377.1 64c36.1 0 71 13.3 97.9 37.2L505.1 128H544h40 40c8.8 0 16 7.2 16 16V352c0 17.7-14.3 32-32 32H576c-11.8 0-22.2-6.4-27.7-16H463.4c-3.4 6.7-7.9 13.1-13.5 18.7c-17.1 17.1-40.8 23.8-63 20.1c-3.6 7.3-8.5 14.1-14.6 20.2c-27.3 27.3-70 30-100.4 8.1c-25.1 20.8-62.5 19.5-86-4.1L159 404l-7-7-35.6-35.6c-5.5-5.5-12.7-8.7-20.4-9.3C96 369.7 81.6 384 64 384H32c-17.7 0-32-14.3-32-32V144c0-8.8 7.2-16 16-16H56 96h19.8c2 0 3.9-.7 5.3-2l26.5-23.6C175.5 77.7 211.4 64 248.7 64H259c4.4 0 8.9 .2 13.2 .6zM544 320V176H496c-5.9 0-11.6-2.2-15.9-6.1l-36.9-32.8c-18.2-16.2-41.7-25.1-66.1-25.1c-25.4 0-49.8 9.7-68.3 27.1l-70.1 66.2c-10.3 9.8-10.1 26.3 .5 35.7c9.3 8.3 23.4 8.1 32.5-.3l71.9-66.4c9.7-9 24.9-8.4 33.9 1.4s8.4 24.9-1.4 33.9l-.8 .8 74.4 74.4c10 10 16.5 22.3 19.4 35.1H544zM64 336a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm528 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M272.2 64.6l-51.1 51.1c-15.3 4.2-29.5 11.9-41.5 22.5L153 161.9C142.8 171 129.5 176 115.8 176H96V304c20.4 .6 39.8 8.9 54.3 23.4l35.6 35.6 7 7 0 0L219.9 397c6.2 6.2 16.4 6.2 22.6 0c1.7-1.7 3-3.7 3.7-5.8c2.8-7.7 9.3-13.5 17.3-15.3s16.4 .6 22.2 6.5L296.5 393c11.6 11.6 30.4 11.6 41.9 0c5.4-5.4 8.3-12.3 8.6-19.4c.4-8.8 5.6-16.6 13.6-20.4s17.3-3 24.4 2.1c9.4 6.7 22.5 5.8 30.9-2.6c9.4-9.4 9.4-24.6 0-33.9L340.1 243l-35.8 33c-27.3 25.2-69.2 25.6-97 .9c-31.7-28.2-32.4-77.4-1.6-106.5l70.1-66.2C303.2 78.4 339.4 64 377.1 64c36.1 0 71 13.3 97.9 37.2L505.1 128H544h40 40c8.8 0 16 7.2 16 16V352c0 17.7-14.3 32-32 32H576c-11.8 0-22.2-6.4-27.7-16H463.4c-3.4 6.7-7.9 13.1-13.5 18.7c-17.1 17.1-40.8 23.8-63 20.1c-3.6 7.3-8.5 14.1-14.6 20.2c-27.3 27.3-70 30-100.4 8.1c-25.1 20.8-62.5 19.5-86-4.1L159 404l-7-7-35.6-35.6c-5.5-5.5-12.7-8.7-20.4-9.3C96 369.7 81.6 384 64 384H32c-17.7 0-32-14.3-32-32V144c0-8.8 7.2-16 16-16H56 96h19.8c2 0 3.9-.7 5.3-2l26.5-23.6C175.5 77.7 211.4 64 248.7 64H259c4.4 0 8.9 .2 13.2 .6zM544 320V176H496c-5.9 0-11.6-2.2-15.9-6.1l-36.9-32.8c-18.2-16.2-41.7-25.1-66.1-25.1c-25.4 0-49.8 9.7-68.3 27.1l-70.1 66.2c-10.3 9.8-10.1 26.3 .5 35.7c9.3 8.3 23.4 8.1 32.5-.3l71.9-66.4c9.7-9 24.9-8.4 33.9 1.4s8.4 24.9-1.4 33.9l-.8 .8 74.4 74.4c10 10 16.5 22.3 19.4 35.1H544zM64 336a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm528 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"handshake-angle\": {\n    \"aliases\": {\n      \"names\": [\"hands-helping\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4c4\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"aid\", \"assistance\", \"handshake\", \"partnership\", \"volunteering\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4c4\",\n    \"label\": \"Handshake Angle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M544 248v3.3l69.7-69.7c21.9-21.9 21.9-57.3 0-79.2L535.6 24.4c-21.9-21.9-57.3-21.9-79.2 0L416.3 64.5c-2.7-.3-5.5-.5-8.3-.5H296c-37.1 0-67.6 28-71.6 64H224V248c0 22.1 17.9 40 40 40s40-17.9 40-40V176c0 0 0-.1 0-.1V160l16 0 136 0c0 0 0 0 .1 0H464c44.2 0 80 35.8 80 80v8zM336 192v56c0 39.8-32.2 72-72 72s-72-32.2-72-72V129.4c-35.9 6.2-65.8 32.3-76 68.2L99.5 255.2 26.3 328.4c-21.9 21.9-21.9 57.3 0 79.2l78.1 78.1c21.9 21.9 57.3 21.9 79.2 0l37.7-37.7c.9 0 1.8 .1 2.7 .1H384c26.5 0 48-21.5 48-48c0-5.6-1-11-2.7-16H432c26.5 0 48-21.5 48-48c0-12.8-5-24.4-13.2-33c25.7-5 45.1-27.6 45.2-54.8v-.4c-.1-30.8-25.1-55.8-56-55.8c0 0 0 0 0 0l-120 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M544 248v3.3l69.7-69.7c21.9-21.9 21.9-57.3 0-79.2L535.6 24.4c-21.9-21.9-57.3-21.9-79.2 0L416.3 64.5c-2.7-.3-5.5-.5-8.3-.5H296c-37.1 0-67.6 28-71.6 64H224V248c0 22.1 17.9 40 40 40s40-17.9 40-40V176c0 0 0-.1 0-.1V160l16 0 136 0c0 0 0 0 .1 0H464c44.2 0 80 35.8 80 80v8zM336 192v56c0 39.8-32.2 72-72 72s-72-32.2-72-72V129.4c-35.9 6.2-65.8 32.3-76 68.2L99.5 255.2 26.3 328.4c-21.9 21.9-21.9 57.3 0 79.2l78.1 78.1c21.9 21.9 57.3 21.9 79.2 0l37.7-37.7c.9 0 1.8 .1 2.7 .1H384c26.5 0 48-21.5 48-48c0-5.6-1-11-2.7-16H432c26.5 0 48-21.5 48-48c0-12.8-5-24.4-13.2-33c25.7-5 45.1-27.6 45.2-54.8v-.4c-.1-30.8-25.1-55.8-56-55.8c0 0 0 0 0 0l-120 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"handshake-simple\": {\n    \"aliases\": {\n      \"names\": [\"handshake-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f91d\"],\n        \"secondary\": [\"10f4c6\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"agreement\",\n        \"greeting\",\n        \"hand\",\n        \"handshake\",\n        \"meeting\",\n        \"partnership\",\n        \"shake\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4c6\",\n    \"label\": \"Handshake Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352H592c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H516h-4-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48H48c-26.5 0-48 21.5-48 48V304c0 26.5 21.5 48 48 48H156.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M323.4 85.2l-96.8 78.4c-16.1 13-19.2 36.4-7 53.1c12.9 17.8 38 21.3 55.3 7.8l99.3-77.2c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352H592c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H516h-4-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2zm22.8 124.4l-51.7 40.2C263 274.4 217.3 268 193.7 235.6c-22.2-30.5-16.6-73.1 12.7-96.8l83.2-67.3c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-72 48H48c-26.5 0-48 21.5-48 48V304c0 26.5 21.5 48 48 48H156.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c4.5-4.9 7.8-10.6 9.9-16.5c19.4 13 45.8 10.3 62.1-7.5c17.9-19.5 16.6-49.9-2.9-67.8l-134.2-123z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"handshake-simple-slash\": {\n    \"aliases\": {\n      \"names\": [\"handshake-alt-slash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e05f\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"broken\", \"covid-19\", \"social distance\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e05f\",\n    \"label\": \"Handshake Simple Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.3-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352H592c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H516h-4-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM413.6 421.9L41.2 128.5C17.9 131.8 0 151.8 0 176V304c0 26.5 21.5 48 48 48H156.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.3-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L550.2 352H592c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48H516h-4-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM413.6 421.9L41.2 128.5C17.9 131.8 0 151.8 0 176V304c0 26.5 21.5 48 48 48H156.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"handshake-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e060\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"broken\", \"covid-19\", \"social distance\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e060\",\n    \"label\": \"Handshake Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766194,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.3-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8V128h-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM413.6 421.9L128 196.8V352h28.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6zM96 171.6L40.6 128H16c-8.8 0-16 7.2-16 16V352c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V171.6zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128V352c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V144c0-8.8-7.2-16-16-16H544zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-135-105.8c-1.1-11.3-6.3-22.3-15.3-30.7l-134.2-123-23.4 18.2-26-20.3 77.2-60.1c7-5.4 17-4.2 22.5 2.8s4.2 17-2.8 22.5l-20.9 16.2L512 316.8V128h-.7l-3.9-2.5L434.8 79c-15.3-9.8-33.2-15-51.4-15c-21.8 0-43 7.5-60 21.2l-89.7 72.6-25.8-20.3 81.8-66.2c-11.6-4.9-24.1-7.4-36.8-7.4C234 64 215.7 69.6 200 80l-35.5 23.7L38.8 5.1zM413.6 421.9L128 196.8V352h28.2l91.4 83.4c19.6 17.9 49.9 16.5 67.8-3.1c5.5-6.1 9.2-13.2 11.1-20.6l17 15.6c19.5 17.9 49.9 16.6 67.8-2.9c.8-.8 1.5-1.7 2.2-2.6zM96 171.6L40.6 128H16c-8.8 0-16 7.2-16 16V352c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V171.6zM48 320a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM544 128V352c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V144c0-8.8-7.2-16-16-16H544zm32 208a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hanukiah\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f54e\"],\n        \"secondary\": [\"10f6e6\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"candelabrum\",\n        \"candle\",\n        \"candlestick\",\n        \"hanukkah\",\n        \"jewish\",\n        \"judaism\",\n        \"light\",\n        \"menorah\",\n        \"religion\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6e6\",\n    \"label\": \"Hanukiah\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M314.2 3.3C309.1 12.1 296 36.6 296 56c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C324.6 1.2 322.4 0 320 0s-4.6 1.2-5.8 3.3zm-288 48C21.1 60.1 8 84.6 8 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C36.6 49.2 34.4 48 32 48s-4.6 1.2-5.8 3.3zM88 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C101.1 60.1 88 84.6 88 104zm82.2-52.7C165.1 60.1 152 84.6 152 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM216 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C229.1 60.1 216 84.6 216 104zM394.2 51.3C389.1 60.1 376 84.6 376 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM440 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C453.1 60.1 440 84.6 440 104zm82.2-52.7C517.1 60.1 504 84.6 504 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM584 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C597.1 60.1 584 84.6 584 104zM112 160c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zM352 144c0-17.7-14.3-32-32-32s-32 14.3-32 32V320H96c-17.7 0-32-14.3-32-32V192c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 53 43 96 96 96H288v64H160c-17.7 0-32 14.3-32 32s14.3 32 32 32H320 480c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V384H544c53 0 96-43 96-96V192c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H352V144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M314.2 3.3C309.1 12.1 296 36.6 296 56c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C324.6 1.2 322.4 0 320 0s-4.6 1.2-5.8 3.3zm-288 48C21.1 60.1 8 84.6 8 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7C36.6 49.2 34.4 48 32 48s-4.6 1.2-5.8 3.3zM88 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C101.1 60.1 88 84.6 88 104zm82.2-52.7C165.1 60.1 152 84.6 152 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM216 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C229.1 60.1 216 84.6 216 104zM394.2 51.3C389.1 60.1 376 84.6 376 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM440 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C453.1 60.1 440 84.6 440 104zm82.2-52.7C517.1 60.1 504 84.6 504 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3zM584 104c0 13.3 10.7 24 24 24s24-10.7 24-24c0-19.4-13.1-43.9-18.2-52.7c-1.2-2.1-3.4-3.3-5.8-3.3s-4.6 1.2-5.8 3.3C597.1 60.1 584 84.6 584 104zM112 160c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm160 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zm64 0c-8.8 0-16 7.2-16 16v96 16h32V272 176c0-8.8-7.2-16-16-16zM352 144c0-17.7-14.3-32-32-32s-32 14.3-32 32V320H96c-17.7 0-32-14.3-32-32V192c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 53 43 96 96 96H288v64H160c-17.7 0-32 14.3-32 32s14.3 32 32 32H320 480c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V384H544c53 0 96-43 96-96V192c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H352V144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hard-drive\": {\n    \"aliases\": {\n      \"names\": [\"hdd\"],\n      \"unicodes\": {\n        \"composite\": [\"1f5b4\"],\n        \"secondary\": [\"10f0a0\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Hard Disk\",\n        \"cpu\",\n        \"hard drive\",\n        \"harddrive\",\n        \"machine\",\n        \"save\",\n        \"storage\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0a0\",\n    \"label\": \"Hard Drive\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V280.4c-17-15.2-39.4-24.4-64-24.4H64c-24.6 0-47 9.2-64 24.4V96zM64 288H448c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V352c0-35.3 28.7-64 64-64zM320 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V280.4c-17-15.2-39.4-24.4-64-24.4H64c-24.6 0-47 9.2-64 24.4V96zM64 288H448c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V352c0-35.3 28.7-64 64-64zM320 416a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm128-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V258c5.1-1.3 10.5-2 16-2H448c5.5 0 10.9 .7 16 2V96c0-8.8-7.2-16-16-16H64zM48 320v96c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V320c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zM0 320V96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V320v96c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320zm280 48a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V258c5.1-1.3 10.5-2 16-2H448c5.5 0 10.9 .7 16 2V96c0-8.8-7.2-16-16-16H64zM48 320v96c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V320c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16zM0 320V96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V320v96c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320zm280 48a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm120-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hashnode\": {\n    \"changes\": [\"6.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e499\",\n    \"label\": \"Hashnode\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hashtag\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f292\"],\n        \"primary\": [\"f292\"],\n        \"secondary\": [\"1023\", \"10f292\"]\n      }\n    },\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Number Sign\",\n        \"Twitter\",\n        \"instagram\",\n        \"pound\",\n        \"social media\",\n        \"tag\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"23\",\n    \"label\": \"Hashtag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128h95.1l11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H347.1L325.8 320H384c17.7 0 32 14.3 32 32s-14.3 32-32 32H315.1l-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7H155.1l-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l21.3-128H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320h95.1l21.3-128H187.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M181.3 32.4c17.4 2.9 29.2 19.4 26.3 36.8L197.8 128h95.1l11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3s29.2 19.4 26.3 36.8L357.8 128H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H347.1L325.8 320H384c17.7 0 32 14.3 32 32s-14.3 32-32 32H315.1l-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l9.8-58.7H155.1l-11.5 69.3c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8L90.2 384H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l21.3-128H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l11.5-69.3c2.9-17.4 19.4-29.2 36.8-26.3zM187.1 192L165.8 320h95.1l21.3-128H187.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hat-cowboy\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f8c0\"]\n      }\n    },\n    \"changes\": [\"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buckaroo\",\n        \"horse\",\n        \"jackeroo\",\n        \"john b.\",\n        \"old west\",\n        \"pardner\",\n        \"ranch\",\n        \"rancher\",\n        \"rodeo\",\n        \"western\",\n        \"wrangler\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8c0\",\n    \"label\": \"Hat Cowboy\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 64c14.4 0 22.3-7 30.8-14.4C360.4 41.1 370.7 32 392 32c49.3 0 84.4 152.2 97.9 221.9C447.8 272.1 390.9 288 320 288s-127.8-15.9-169.9-34.1C163.6 184.2 198.7 32 248 32c21.3 0 31.6 9.1 41.2 17.6C297.7 57 305.6 64 320 64zM111.1 270.7c47.2 24.5 117.5 49.3 209 49.3s161.8-24.8 208.9-49.3c24.8-12.9 49.8-28.3 70.1-47.7c7.9-7.9 20.2-9.2 29.6-3.3c9.5 5.9 13.5 17.9 9.9 28.5c-13.5 37.7-38.4 72.3-66.1 100.6C523.7 398.9 443.6 448 320 448s-203.6-49.1-252.5-99.2C39.8 320.4 14.9 285.8 1.4 248.1c-3.6-10.6 .4-22.6 9.9-28.5c9.5-5.9 21.7-4.5 29.6 3.3c20.4 19.4 45.3 34.8 70.1 47.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 64c14.4 0 22.3-7 30.8-14.4C360.4 41.1 370.7 32 392 32c49.3 0 84.4 152.2 97.9 221.9C447.8 272.1 390.9 288 320 288s-127.8-15.9-169.9-34.1C163.6 184.2 198.7 32 248 32c21.3 0 31.6 9.1 41.2 17.6C297.7 57 305.6 64 320 64zM111.1 270.7c47.2 24.5 117.5 49.3 209 49.3s161.8-24.8 208.9-49.3c24.8-12.9 49.8-28.3 70.1-47.7c7.9-7.9 20.2-9.2 29.6-3.3c9.5 5.9 13.5 17.9 9.9 28.5c-13.5 37.7-38.4 72.3-66.1 100.6C523.7 398.9 443.6 448 320 448s-203.6-49.1-252.5-99.2C39.8 320.4 14.9 285.8 1.4 248.1c-3.6-10.6 .4-22.6 9.9-28.5c9.5-5.9 21.7-4.5 29.6 3.3c20.4 19.4 45.3 34.8 70.1 47.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hat-cowboy-side\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f8c1\"]\n      }\n    },\n    \"changes\": [\"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buckaroo\",\n        \"horse\",\n        \"jackeroo\",\n        \"john b.\",\n        \"old west\",\n        \"pardner\",\n        \"ranch\",\n        \"rancher\",\n        \"rodeo\",\n        \"western\",\n        \"wrangler\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8c1\",\n    \"label\": \"Hat Cowboy Side\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M152.7 135.9l-10.4 57.2c6.8-.7 13.6-1.1 20.5-1.1h10.7c39.4 0 77.8 12.1 110.1 34.7L562.4 421.8l35.1 24.6c24.4-6 42.5-28.1 42.5-54.4c0-75.8-94.7-126.6-134.6-144.7L474 83.9C468.2 53.8 441.8 32 411.1 32h-2.7c-5.6 0-11.1 .7-16.5 2.2L199.2 85.5c-23.9 6.4-42 26-46.5 50.4zM0 384c0 35.3 28.7 64 64 64H544L265.3 252.9c-26.9-18.8-58.9-28.9-91.8-28.9H162.9c-60.6 0-116 34.2-143.1 88.4L13.5 325C4.6 342.7 0 362.3 0 382.2V384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M152.7 135.9l-10.4 57.2c6.8-.7 13.6-1.1 20.5-1.1h10.7c39.4 0 77.8 12.1 110.1 34.7L562.4 421.8l35.1 24.6c24.4-6 42.5-28.1 42.5-54.4c0-75.8-94.7-126.6-134.6-144.7L474 83.9C468.2 53.8 441.8 32 411.1 32h-2.7c-5.6 0-11.1 .7-16.5 2.2L199.2 85.5c-23.9 6.4-42 26-46.5 50.4zM0 384c0 35.3 28.7 64 64 64H544L265.3 252.9c-26.9-18.8-58.9-28.9-91.8-28.9H162.9c-60.6 0-116 34.2-143.1 88.4L13.5 325C4.6 342.7 0 362.3 0 382.2V384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hat-wizard\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6e8\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"accessory\",\n        \"buckle\",\n        \"clothing\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"halloween\",\n        \"head\",\n        \"holiday\",\n        \"mage\",\n        \"magic\",\n        \"pointy\",\n        \"witch\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6e8\",\n    \"label\": \"Hat Wizard\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 416L168.6 180.7c15.3-34.4 40.3-63.5 72-83.7l146.9-94c3-1.9 6.5-2.9 10-2.9C407.7 0 416 8.3 416 18.6v1.6c0 2.6-.5 5.1-1.4 7.5L354.8 176.9c-1.9 4.7-2.8 9.7-2.8 14.7c0 5.5 1.2 11 3.4 16.1L448 416H240.9l11.8-35.4 40.4-13.5c6.5-2.2 10.9-8.3 10.9-15.2s-4.4-13-10.9-15.2l-40.4-13.5-13.5-40.4C237 276.4 230.9 272 224 272s-13 4.4-15.2 10.9l-13.5 40.4-40.4 13.5C148.4 339 144 345.1 144 352s4.4 13 10.9 15.2l40.4 13.5L207.1 416H64zM279.6 141.5c-1.1-3.3-4.1-5.5-7.6-5.5s-6.5 2.2-7.6 5.5l-6.7 20.2-20.2 6.7c-3.3 1.1-5.5 4.1-5.5 7.6s2.2 6.5 5.5 7.6l20.2 6.7 6.7 20.2c1.1 3.3 4.1 5.5 7.6 5.5s6.5-2.2 7.6-5.5l6.7-20.2 20.2-6.7c3.3-1.1 5.5-4.1 5.5-7.6s-2.2-6.5-5.5-7.6l-20.2-6.7-6.7-20.2zM32 448H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 416L168.6 180.7c15.3-34.4 40.3-63.5 72-83.7l146.9-94c3-1.9 6.5-2.9 10-2.9C407.7 0 416 8.3 416 18.6v1.6c0 2.6-.5 5.1-1.4 7.5L354.8 176.9c-1.9 4.7-2.8 9.7-2.8 14.7c0 5.5 1.2 11 3.4 16.1L448 416H240.9l11.8-35.4 40.4-13.5c6.5-2.2 10.9-8.3 10.9-15.2s-4.4-13-10.9-15.2l-40.4-13.5-13.5-40.4C237 276.4 230.9 272 224 272s-13 4.4-15.2 10.9l-13.5 40.4-40.4 13.5C148.4 339 144 345.1 144 352s4.4 13 10.9 15.2l40.4 13.5L207.1 416H64zM279.6 141.5c-1.1-3.3-4.1-5.5-7.6-5.5s-6.5 2.2-7.6 5.5l-6.7 20.2-20.2 6.7c-3.3 1.1-5.5 4.1-5.5 7.6s2.2 6.5 5.5 7.6l20.2 6.7 6.7 20.2c1.1 3.3 4.1 5.5 7.6 5.5s6.5-2.2 7.6-5.5l6.7-20.2 20.2-6.7c3.3-1.1 5.5-4.1 5.5-7.6s-2.2-6.5-5.5-7.6l-20.2-6.7-6.7-20.2zM32 448H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"head-side-cough\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e061\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cough\", \"covid-19\", \"germs\", \"lungs\", \"respiratory\", \"sick\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e061\",\n    \"label\": \"Head Side Cough\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 224.2C0 100.6 100.2 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v0 32L339.2 365.6c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9L448 416v16c0 26.5-21.5 48-48 48H320v8c0 13.3-10.7 24-24 24H256v0H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zm352-.2a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM464 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm152-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM592 480a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 312a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 224.2C0 100.6 100.2 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v0 32L339.2 365.6c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9L448 416v16c0 26.5-21.5 48-48 48H320v8c0 13.3-10.7 24-24 24H256v0H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zm352-.2a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM464 384a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm152-24a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM592 480a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 312a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM552 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"head-side-cough-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e062\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cough\", \"covid-19\", \"germs\", \"lungs\", \"respiratory\", \"sick\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e062\",\n    \"label\": \"Head Side Cough Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M448 325.8l44 34.5c8.1 1.4 14.8 6.8 18 14.1L552.9 408c10.6 .4 19.5 7.6 22.2 17.4l39.1 30.6c.6 0 1.2-.1 1.8-.1c11.1 0 20.4 7.5 23.2 17.8h-3.9c6.2 8.5 6.4 20.4-.4 29c-8.2 10.4-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L89.6 44.9C127 16.7 173.5 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v0 5.8zM0 224.2c0-38.7 9.8-75.1 27.1-106.9L341.8 365.3l-2.5 .3c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9l62 3.9 43 33.9C439.3 466.2 421.2 480 400 480H320v8c0 13.3-10.7 24-24 24H256v0H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM616 360a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-64-48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M448 325.8l44 34.5c8.1 1.4 14.8 6.8 18 14.1L552.9 408c10.6 .4 19.5 7.6 22.2 17.4l39.1 30.6c.6 0 1.2-.1 1.8-.1c11.1 0 20.4 7.5 23.2 17.8h-3.9c6.2 8.5 6.4 20.4-.4 29c-8.2 10.4-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L89.6 44.9C127 16.7 173.5 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v0 5.8zM0 224.2c0-38.7 9.8-75.1 27.1-106.9L341.8 365.3l-2.5 .3c-11 1.4-19.2 10.7-19.2 21.8c0 11.6 9 21.2 20.6 21.9l62 3.9 43 33.9C439.3 466.2 421.2 480 400 480H320v8c0 13.3-10.7 24-24 24H256v0H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM616 360a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm-64-48a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40-24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"head-side-mask\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e063\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"breath\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"filter\",\n        \"flu\",\n        \"infection\",\n        \"pandemic\",\n        \"respirator\",\n        \"virus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e063\",\n    \"label\": \"Head Side Mask\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M32 224.2c0-22.2 3.2-43.6 9.2-63.9L262.2 321c-4 9.5-6.2 20-6.2 31V512H128c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C48.6 322.4 32 274.1 32 224.2zm248.3 70.4L53 129.3C88.7 53 166.2 0 256 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c5.4 6.7 8.6 14.8 9.4 23.2H336c-21.7 0-41.3 8.6-55.7 22.6zM336 304H534l0 0h10l-19.7 64H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H514.5l-9.8 32H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H494.8l-.9 2.8c-8.3 26.9-33.1 45.2-61.2 45.2H288V352c0-14 6-26.7 15.6-35.4c0 0 0 0 0 0c8.5-7.8 19.9-12.6 32.4-12.6zm48-80a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M32 224.2c0-22.2 3.2-43.6 9.2-63.9L262.2 321c-4 9.5-6.2 20-6.2 31V512H128c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C48.6 322.4 32 274.1 32 224.2zm248.3 70.4L53 129.3C88.7 53 166.2 0 256 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c5.4 6.7 8.6 14.8 9.4 23.2H336c-21.7 0-41.3 8.6-55.7 22.6zM336 304H534l0 0h10l-19.7 64H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H514.5l-9.8 32H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H494.8l-.9 2.8c-8.3 26.9-33.1 45.2-61.2 45.2H288V352c0-14 6-26.7 15.6-35.4c0 0 0 0 0 0c8.5-7.8 19.9-12.6 32.4-12.6zm48-80a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"head-side-virus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e064\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cold\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flu\",\n        \"infection\",\n        \"pandemic\",\n        \"sick\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e064\",\n    \"label\": \"Head Side Virus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 224.2C0 100.6 100.2 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v64c0 35.3-28.7 64-64 64H320v32c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM224 64c-8.8 0-16 7.2-16 16c0 33-39.9 49.5-63.2 26.2c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6C145.5 152.1 129 192 96 192c-8.8 0-16 7.2-16 16s7.2 16 16 16c33 0 49.5 39.9 26.2 63.2c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0C168.1 286.5 208 303 208 336c0 8.8 7.2 16 16 16s16-7.2 16-16c0-33 39.9-49.5 63.2-26.2c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6C302.5 263.9 319 224 352 224c8.8 0 16-7.2 16-16s-7.2-16-16-16c-33 0-49.5-39.9-26.2-63.2c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0C279.9 129.5 240 113 240 80c0-8.8-7.2-16-16-16zm-24 96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 80a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 224.2C0 100.6 100.2 0 224 0h24c95.2 0 181.2 69.3 197.3 160.2c2.3 13 6.8 25.7 15.1 36l42 52.6c6.2 7.8 9.6 17.4 9.6 27.4c0 24.2-19.6 43.8-43.8 43.8H448v64c0 35.3-28.7 64-64 64H320v32c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V407.3c0-16.7-6.9-32.5-17.1-45.8C16.6 322.4 0 274.1 0 224.2zM224 64c-8.8 0-16 7.2-16 16c0 33-39.9 49.5-63.2 26.2c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6C145.5 152.1 129 192 96 192c-8.8 0-16 7.2-16 16s7.2 16 16 16c33 0 49.5 39.9 26.2 63.2c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0C168.1 286.5 208 303 208 336c0 8.8 7.2 16 16 16s16-7.2 16-16c0-33 39.9-49.5 63.2-26.2c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6C302.5 263.9 319 224 352 224c8.8 0 16-7.2 16-16s-7.2-16-16-16c-33 0-49.5-39.9-26.2-63.2c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0C279.9 129.5 240 113 240 80c0-8.8-7.2-16-16-16zm-24 96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm40 80a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heading\": {\n    \"aliases\": {\n      \"names\": [\"header\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1dc\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"format\", \"header\", \"text\", \"title\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1dc\",\n    \"label\": \"Heading\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H80h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H112V208H336V96H320c-17.7 0-32-14.3-32-32s14.3-32 32-32h48 48c17.7 0 32 14.3 32 32s-14.3 32-32 32H400V240 416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H368 320c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112V416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V240 96H32C14.3 96 0 81.7 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H80h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H112V208H336V96H320c-17.7 0-32-14.3-32-32s14.3-32 32-32h48 48c17.7 0 32 14.3 32 32s-14.3 32-32 32H400V240 416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H368 320c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112V416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V240 96H32C14.3 96 0 81.7 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"headphones\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3a7\"],\n        \"secondary\": [\"10f025\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"earbud\",\n        \"headphone\",\n        \"listen\",\n        \"music\",\n        \"sound\",\n        \"speaker\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f025\",\n    \"label\": \"Headphones\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 80C149.9 80 62.4 159.4 49.6 262c9.4-3.8 19.6-6 30.4-6c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48c-44.2 0-80-35.8-80-80V384 336 288C0 146.6 114.6 32 256 32s256 114.6 256 256v48 48 16c0 44.2-35.8 80-80 80c-26.5 0-48-21.5-48-48V304c0-26.5 21.5-48 48-48c10.8 0 21 2.1 30.4 6C449.6 159.4 362.1 80 256 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 80C149.9 80 62.4 159.4 49.6 262c9.4-3.8 19.6-6 30.4-6c26.5 0 48 21.5 48 48V432c0 26.5-21.5 48-48 48c-44.2 0-80-35.8-80-80V384 336 288C0 146.6 114.6 32 256 32s256 114.6 256 256v48 48 16c0 44.2-35.8 80-80 80c-26.5 0-48-21.5-48-48V304c0-26.5 21.5-48 48-48c10.8 0 21 2.1 30.4 6C449.6 159.4 362.1 80 256 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"headphones-simple\": {\n    \"aliases\": {\n      \"names\": [\"headphones-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f58f\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"audio\", \"listen\", \"music\", \"sound\", \"speaker\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f58f\",\n    \"label\": \"Headphones Simple\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 80C141.1 80 48 173.1 48 288V392c0 13.3-10.7 24-24 24s-24-10.7-24-24V288C0 146.6 114.6 32 256 32s256 114.6 256 256V392c0 13.3-10.7 24-24 24s-24-10.7-24-24V288c0-114.9-93.1-208-208-208zM80 352c0-35.3 28.7-64 64-64h16c17.7 0 32 14.3 32 32V448c0 17.7-14.3 32-32 32H144c-35.3 0-64-28.7-64-64V352zm288-64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H352c-17.7 0-32-14.3-32-32V320c0-17.7 14.3-32 32-32h16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 80C141.1 80 48 173.1 48 288V392c0 13.3-10.7 24-24 24s-24-10.7-24-24V288C0 146.6 114.6 32 256 32s256 114.6 256 256V392c0 13.3-10.7 24-24 24s-24-10.7-24-24V288c0-114.9-93.1-208-208-208zM80 352c0-35.3 28.7-64 64-64h16c17.7 0 32 14.3 32 32V448c0 17.7-14.3 32-32 32H144c-35.3 0-64-28.7-64-64V352zm288-64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H352c-17.7 0-32-14.3-32-32V320c0-17.7 14.3-32 32-32h16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"headset\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f590\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"gamer\",\n        \"gaming\",\n        \"listen\",\n        \"live chat\",\n        \"microphone\",\n        \"shot caller\",\n        \"sound\",\n        \"support\",\n        \"telemarketer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f590\",\n    \"label\": \"Headset\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48C141.1 48 48 141.1 48 256v40c0 13.3-10.7 24-24 24s-24-10.7-24-24V256C0 114.6 114.6 0 256 0S512 114.6 512 256V400.1c0 48.6-39.4 88-88.1 88L313.6 488c-8.3 14.3-23.8 24-41.6 24H240c-26.5 0-48-21.5-48-48s21.5-48 48-48h32c17.8 0 33.3 9.7 41.6 24l110.4 .1c22.1 0 40-17.9 40-40V256c0-114.9-93.1-208-208-208zM144 208h16c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H144c-35.3 0-64-28.7-64-64V272c0-35.3 28.7-64 64-64zm224 0c35.3 0 64 28.7 64 64v48c0 35.3-28.7 64-64 64H352c-17.7 0-32-14.3-32-32V240c0-17.7 14.3-32 32-32h16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48C141.1 48 48 141.1 48 256v40c0 13.3-10.7 24-24 24s-24-10.7-24-24V256C0 114.6 114.6 0 256 0S512 114.6 512 256V400.1c0 48.6-39.4 88-88.1 88L313.6 488c-8.3 14.3-23.8 24-41.6 24H240c-26.5 0-48-21.5-48-48s21.5-48 48-48h32c17.8 0 33.3 9.7 41.6 24l110.4 .1c22.1 0 40-17.9 40-40V256c0-114.9-93.1-208-208-208zM144 208h16c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H144c-35.3 0-64-28.7-64-64V272c0-35.3 28.7-64 64-64zm224 0c35.3 0 64 28.7 64 64v48c0 35.3-28.7 64-64 64H352c-17.7 0-32-14.3-32-32V240c0-17.7 14.3-32 32-32h16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\n          \"1f499\",\n          \"1f49a\",\n          \"1f49b\",\n          \"1f49c\",\n          \"1f5a4\",\n          \"1f90d\",\n          \"1f90e\",\n          \"1f9e1\",\n          \"2665\",\n          \"2764\",\n          \"f08a\"\n        ],\n        \"secondary\": [\"10f004\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"black\",\n        \"black heart\",\n        \"blue\",\n        \"blue heart\",\n        \"brown\",\n        \"brown heart\",\n        \"card\",\n        \"evil\",\n        \"favorite\",\n        \"game\",\n        \"green\",\n        \"green heart\",\n        \"heart\",\n        \"heart suit\",\n        \"like\",\n        \"love\",\n        \"orange\",\n        \"orange heart\",\n        \"purple\",\n        \"purple heart\",\n        \"red heart\",\n        \"relationship\",\n        \"valentine\",\n        \"white\",\n        \"white heart\",\n        \"wicked\",\n        \"yellow\",\n        \"yellow heart\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f004\",\n    \"label\": \"Heart\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8v-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5v3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20c0 0-.1-.1-.1-.1c0 0 0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5v3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2v-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8v-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5v3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20c0 0-.1-.1-.1-.1c0 0 0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5v3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2v-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"heart-circle-bolt\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cardiogram\", \"ekg\", \"electric\", \"heart\", \"love\", \"pacemaker\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4fc\",\n    \"label\": \"Heart Circle Bolt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356H488c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380H376c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356H488c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380H376c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"favorite\", \"heart\", \"love\", \"not affected\", \"ok\", \"okay\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4fd\",\n    \"label\": \"Heart Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"favorite\", \"heart\", \"love\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4fe\",\n    \"label\": \"Heart Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-circle-minus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"favorite\", \"heart\", \"love\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4ff\",\n    \"label\": \"Heart Circle Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16H496c8.8 0 16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16H496c8.8 0 16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-circle-plus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"favorite\", \"heart\", \"love\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e500\",\n    \"label\": \"Heart Circle Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208v48h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V384H368c-8.8 0-16-7.2-16-16s7.2-16 16-16h48V304c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208v48h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V384H368c-8.8 0-16-7.2-16-16s7.2-16 16-16h48V304c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"favorite\", \"heart\", \"love\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e501\",\n    \"label\": \"Heart Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9l2.6-2.4C267.2 438.6 256 404.6 256 368c0-97.2 78.8-176 176-176c28.3 0 55 6.7 78.7 18.5c.9-6.5 1.3-13 1.3-19.6v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-crack\": {\n    \"aliases\": {\n      \"names\": [\"heart-broken\"],\n      \"unicodes\": {\n        \"composite\": [\"1f494\"],\n        \"secondary\": [\"10f7a9\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"break\",\n        \"breakup\",\n        \"broken\",\n        \"broken heart\",\n        \"crushed\",\n        \"dislike\",\n        \"dumped\",\n        \"grief\",\n        \"love\",\n        \"lovesick\",\n        \"relationship\",\n        \"sad\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7a9\",\n    \"label\": \"Heart Crack\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M119.4 44.1c23.3-3.9 46.8-1.9 68.6 5.3l49.8 77.5-75.4 75.4c-1.5 1.5-2.4 3.6-2.3 5.8s1 4.2 2.6 5.7l112 104c2.9 2.7 7.4 2.9 10.5 .3s3.8-7 1.7-10.4l-60.4-98.1 90.7-75.6c2.6-2.1 3.5-5.7 2.4-8.8L296.8 61.8c28.5-16.7 62.4-23.2 95.7-17.6C461.5 55.6 512 115.2 512 185.1v5.8c0 41.5-17.2 81.2-47.6 109.5L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9L47.6 300.4C17.2 272.1 0 232.4 0 190.9v-5.8c0-69.9 50.5-129.5 119.4-141z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M119.4 44.1c23.3-3.9 46.8-1.9 68.6 5.3l49.8 77.5-75.4 75.4c-1.5 1.5-2.4 3.6-2.3 5.8s1 4.2 2.6 5.7l112 104c2.9 2.7 7.4 2.9 10.5 .3s3.8-7 1.7-10.4l-60.4-98.1 90.7-75.6c2.6-2.1 3.5-5.7 2.4-8.8L296.8 61.8c28.5-16.7 62.4-23.2 95.7-17.6C461.5 55.6 512 115.2 512 185.1v5.8c0 41.5-17.2 81.2-47.6 109.5L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9L47.6 300.4C17.2 272.1 0 232.4 0 190.9v-5.8c0-69.9 50.5-129.5 119.4-141z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"heart-pulse\": {\n    \"aliases\": {\n      \"names\": [\"heartbeat\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f21e\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ekg\", \"electrocardiogram\", \"health\", \"lifeline\", \"vital signs\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f21e\",\n    \"label\": \"Heart Pulse\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4h87c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31H476.3c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240h-132c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9H16c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9v-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1v5.8c0 16.9-2.8 33.5-8.3 49.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M228.3 469.1L47.6 300.4c-4.2-3.9-8.2-8.1-11.9-12.4h87c22.6 0 43-13.6 51.7-34.5l10.5-25.2 49.3 109.5c3.8 8.5 12.1 14 21.4 14.1s17.8-5 22-13.3L320 253.7l1.7 3.4c9.5 19 28.9 31 50.1 31H476.3c-3.7 4.3-7.7 8.5-11.9 12.4L283.7 469.1c-7.5 7-17.4 10.9-27.7 10.9s-20.2-3.9-27.7-10.9zM503.7 240h-132c-3 0-5.8-1.7-7.2-4.4l-23.2-46.3c-4.1-8.1-12.4-13.3-21.5-13.3s-17.4 5.1-21.5 13.3l-41.4 82.8L205.9 158.2c-3.9-8.7-12.7-14.3-22.2-14.1s-18.1 5.9-21.8 14.8l-31.8 76.3c-1.2 3-4.2 4.9-7.4 4.9H16c-2.6 0-5 .4-7.3 1.1C3 225.2 0 208.2 0 190.9v-5.8c0-69.9 50.5-129.5 119.4-141C165 36.5 211.4 51.4 244 84l12 12 12-12c32.6-32.6 79-47.5 124.6-39.9C461.5 55.6 512 115.2 512 185.1v5.8c0 16.9-2.8 33.5-8.3 49.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"helicopter\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f681\"],\n        \"secondary\": [\"10f533\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airwolf\",\n        \"apache\",\n        \"chopper\",\n        \"flight\",\n        \"fly\",\n        \"helicopter\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f533\",\n    \"label\": \"Helicopter\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M128 32c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H384v64h32c88.4 0 160 71.6 160 160v64c0 17.7-14.3 32-32 32H384 320c-20.1 0-39.1-9.5-51.2-25.6l-71.4-95.2c-3.5-4.7-8.3-8.3-13.7-10.5L47.2 198.1c-9.5-3.8-16.7-12-19.2-22L5 83.9C2.4 73.8 10.1 64 20.5 64H48c10.1 0 19.6 4.7 25.6 12.8L112 128H320V64H160c-17.7 0-32-14.3-32-32zM384 320H512V288c0-53-43-96-96-96H384V320zM630.6 425.4c12.5 12.5 12.5 32.8 0 45.3l-3.9 3.9c-24 24-56.6 37.5-90.5 37.5H256c-17.7 0-32-14.3-32-32s14.3-32 32-32H536.2c17 0 33.3-6.7 45.3-18.7l3.9-3.9c12.5-12.5 32.8-12.5 45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M128 32c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H384v64h32c88.4 0 160 71.6 160 160v64c0 17.7-14.3 32-32 32H384 320c-20.1 0-39.1-9.5-51.2-25.6l-71.4-95.2c-3.5-4.7-8.3-8.3-13.7-10.5L47.2 198.1c-9.5-3.8-16.7-12-19.2-22L5 83.9C2.4 73.8 10.1 64 20.5 64H48c10.1 0 19.6 4.7 25.6 12.8L112 128H320V64H160c-17.7 0-32-14.3-32-32zM384 320H512V288c0-53-43-96-96-96H384V320zM630.6 425.4c12.5 12.5 12.5 32.8 0 45.3l-3.9 3.9c-24 24-56.6 37.5-90.5 37.5H256c-17.7 0-32-14.3-32-32s14.3-32 32-32H536.2c17 0 33.3-6.7 45.3-18.7l3.9-3.9c12.5-12.5 32.8-12.5 45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"helicopter-symbol\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chopper\", \"helicopter\", \"landing pad\", \"whirlybird\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e502\",\n    \"label\": \"Helicopter Symbol\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M445.3 224H510C495.6 108.2 403.8 16.4 288 2V66.7C368.4 80.1 431.9 143.6 445.3 224zM510 288H445.3C431.9 368.4 368.4 431.9 288 445.4V510c115.8-14.4 207.6-106.2 222-222zM2 288C16.4 403.8 108.2 495.6 224 510V445.4C143.6 431.9 80.1 368.4 66.7 288H2zm0-64H66.7C80.1 143.6 143.6 80.1 224 66.7V2C108.2 16.4 16.4 108.2 2 224zm206-64c0-17.7-14.3-32-32-32s-32 14.3-32 32V352c0 17.7 14.3 32 32 32s32-14.3 32-32V288h96v64c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H208V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M445.3 224H510C495.6 108.2 403.8 16.4 288 2V66.7C368.4 80.1 431.9 143.6 445.3 224zM510 288H445.3C431.9 368.4 368.4 431.9 288 445.4V510c115.8-14.4 207.6-106.2 222-222zM2 288C16.4 403.8 108.2 495.6 224 510V445.4C143.6 431.9 80.1 368.4 66.7 288H2zm0-64H66.7C80.1 143.6 143.6 80.1 224 66.7V2C108.2 16.4 16.4 108.2 2 224zm206-64c0-17.7-14.3-32-32-32s-32 14.3-32 32V352c0 17.7 14.3 32 32 32s32-14.3 32-32V288h96v64c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H208V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"helmet-safety\": {\n    \"aliases\": {\n      \"names\": [\"hard-hat\", \"hat-hard\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f807\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"construction\", \"hardhat\", \"helmet\", \"safety\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f807\",\n    \"label\": \"Helmet Safety\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M256 32c-17.7 0-32 14.3-32 32v2.3 99.6c0 5.6-4.5 10.1-10.1 10.1c-3.6 0-7-1.9-8.8-5.1L157.1 87C83 123.5 32 199.8 32 288v64H544l0-66.4c-.9-87.2-51.7-162.4-125.1-198.6l-48 83.9c-1.8 3.2-5.2 5.1-8.8 5.1c-5.6 0-10.1-4.5-10.1-10.1V66.3 64c0-17.7-14.3-32-32-32H256zM16.6 384C7.4 384 0 391.4 0 400.6c0 4.7 2 9.2 5.8 11.9C27.5 428.4 111.8 480 288 480s260.5-51.6 282.2-67.5c3.8-2.8 5.8-7.2 5.8-11.9c0-9.2-7.4-16.6-16.6-16.6H16.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M256 32c-17.7 0-32 14.3-32 32v2.3 99.6c0 5.6-4.5 10.1-10.1 10.1c-3.6 0-7-1.9-8.8-5.1L157.1 87C83 123.5 32 199.8 32 288v64H544l0-66.4c-.9-87.2-51.7-162.4-125.1-198.6l-48 83.9c-1.8 3.2-5.2 5.1-8.8 5.1c-5.6 0-10.1-4.5-10.1-10.1V66.3 64c0-17.7-14.3-32-32-32H256zM16.6 384C7.4 384 0 391.4 0 400.6c0 4.7 2 9.2 5.8 11.9C27.5 428.4 111.8 480 288 480s260.5-51.6 282.2-67.5c3.8-2.8 5.8-7.2 5.8-11.9c0-9.2-7.4-16.6-16.6-16.6H16.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"helmet-un\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"helmet\", \"united nations\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e503\",\n    \"label\": \"Helmet Un\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M479.5 224C471.2 98.9 367.2 0 240 0C107.5 0 0 107.5 0 240v56.3C0 344.8 39.2 384 87.7 384H200h14.9L343.5 505.4c4.5 4.2 10.4 6.6 16.5 6.6h96c13.3 0 24-10.7 24-24s-10.7-24-24-24H369.5l-1.5-1.5V288h80 32c17.7 0 32-14.3 32-32s-14.3-32-32-32h-.5zM320 417.2l-78-73.7L274.4 288H320V417.2zM285.3 103.1l34.7 52V112c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52V208c0 8.8-7.2 16-16 16s-16-7.2-16-16V112c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM160 112v64c0 8.8 7.2 16 16 16s16-7.2 16-16V112c0-8.8 7.2-16 16-16s16 7.2 16 16v64c0 26.5-21.5 48-48 48s-48-21.5-48-48V112c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M479.5 224C471.2 98.9 367.2 0 240 0C107.5 0 0 107.5 0 240v56.3C0 344.8 39.2 384 87.7 384H200h14.9L343.5 505.4c4.5 4.2 10.4 6.6 16.5 6.6h96c13.3 0 24-10.7 24-24s-10.7-24-24-24H369.5l-1.5-1.5V288h80 32c17.7 0 32-14.3 32-32s-14.3-32-32-32h-.5zM320 417.2l-78-73.7L274.4 288H320V417.2zM285.3 103.1l34.7 52V112c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52V208c0 8.8-7.2 16-16 16s-16-7.2-16-16V112c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM160 112v64c0 8.8 7.2 16 16 16s16-7.2 16-16V112c0-8.8 7.2-16 16-16s16 7.2 16 16v64c0 26.5-21.5 48-48 48s-48-21.5-48-48V112c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"highlighter\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f591\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"marker\", \"sharpie\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f591\",\n    \"label\": \"Highlighter\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H224l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H24c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M315 315l158.4-215L444.1 70.6 229 229 315 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L420.6 8.4C428 2.9 437 0 446.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L334.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H224l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L128 320zM7 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H24c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hill-avalanche\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mudslide\", \"snow\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e507\",\n    \"label\": \"Hill Avalanche\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M439.7 401.9c34.2 23.1 81.1 19.5 111.4-10.8c34.4-34.4 34.4-90.1 0-124.4c-27.8-27.8-69.5-33.1-102.6-16c-11.8 6.1-16.4 20.6-10.3 32.3s20.6 16.4 32.3 10.3c15.1-7.8 34-5.3 46.6 7.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-81.7-81.7C401.2 261.3 416 236.4 416 208c0-33.9-21.1-62.9-50.9-74.5c1.9-6.8 2.9-14 2.9-21.5c0-44.2-35.8-80-80-80c-27.3 0-51.5 13.7-65.9 34.6C216.3 46.6 197.9 32 176 32c-26.5 0-48 21.5-48 48c0 4 .5 7.9 1.4 11.6L439.7 401.9zM480 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM68.3 87C43.1 61.8 0 79.7 0 115.3V432c0 44.2 35.8 80 80 80H396.7c35.6 0 53.5-43.1 28.3-68.3L68.3 87z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M439.7 401.9c34.2 23.1 81.1 19.5 111.4-10.8c34.4-34.4 34.4-90.1 0-124.4c-27.8-27.8-69.5-33.1-102.6-16c-11.8 6.1-16.4 20.6-10.3 32.3s20.6 16.4 32.3 10.3c15.1-7.8 34-5.3 46.6 7.3c15.6 15.6 15.6 40.9 0 56.6s-40.9 15.6-56.6 0l-81.7-81.7C401.2 261.3 416 236.4 416 208c0-33.9-21.1-62.9-50.9-74.5c1.9-6.8 2.9-14 2.9-21.5c0-44.2-35.8-80-80-80c-27.3 0-51.5 13.7-65.9 34.6C216.3 46.6 197.9 32 176 32c-26.5 0-48 21.5-48 48c0 4 .5 7.9 1.4 11.6L439.7 401.9zM480 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM68.3 87C43.1 61.8 0 79.7 0 115.3V432c0 44.2 35.8 80 80 80H396.7c35.6 0 53.5-43.1 28.3-68.3L68.3 87z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hill-rockslide\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mudslide\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e508\",\n    \"label\": \"Hill Rockslide\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M252.4 103.8l27 48c2.8 5 8.2 8.2 13.9 8.2l53.3 0c5.8 0 11.1-3.1 13.9-8.2l27-48c2.7-4.9 2.7-10.8 0-15.7l-27-48c-2.8-5-8.2-8.2-13.9-8.2H293.4c-5.8 0-11.1 3.1-13.9 8.2l-27 48c-2.7 4.9-2.7 10.8 0 15.7zM68.3 87C43.1 61.8 0 79.7 0 115.3V432c0 44.2 35.8 80 80 80H396.7c35.6 0 53.5-43.1 28.3-68.3L68.3 87zM504.2 403.6c4.9 2.7 10.8 2.7 15.7 0l48-27c5-2.8 8.2-8.2 8.2-13.9V309.4c0-5.8-3.1-11.1-8.2-13.9l-48-27c-4.9-2.7-10.8-2.7-15.7 0l-48 27c-5 2.8-8.2 8.2-8.2 13.9v53.3c0 5.8 3.1 11.1 8.2 13.9l48 27zM192 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M252.4 103.8l27 48c2.8 5 8.2 8.2 13.9 8.2l53.3 0c5.8 0 11.1-3.1 13.9-8.2l27-48c2.7-4.9 2.7-10.8 0-15.7l-27-48c-2.8-5-8.2-8.2-13.9-8.2H293.4c-5.8 0-11.1 3.1-13.9 8.2l-27 48c-2.7 4.9-2.7 10.8 0 15.7zM68.3 87C43.1 61.8 0 79.7 0 115.3V432c0 44.2 35.8 80 80 80H396.7c35.6 0 53.5-43.1 28.3-68.3L68.3 87zM504.2 403.6c4.9 2.7 10.8 2.7 15.7 0l48-27c5-2.8 8.2-8.2 8.2-13.9V309.4c0-5.8-3.1-11.1-8.2-13.9l-48-27c-4.9-2.7-10.8-2.7-15.7 0l-48 27c-5 2.8-8.2 8.2-8.2 13.9v53.3c0 5.8 3.1 11.1 8.2 13.9l48 27zM192 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hippo\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f99b\"],\n        \"secondary\": [\"10f6ed\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"animal\", \"fauna\", \"hippo\", \"hippopotamus\", \"hungry\", \"mammal\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6ed\",\n    \"label\": \"Hippo\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M407 47c9.4-9.4 24.6-9.4 33.9 0l17.2 17.2c1.9-.1 3.9-.2 5.8-.2h32c11.2 0 21.9 2.3 31.6 6.5L543 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L564 101.9c7.6 12.2 12 26.7 12 42.1c0 10.2 7.4 18.8 16.7 23c27.9 12.5 47.3 40.5 47.3 73c0 26.2-12.6 49.4-32 64v32c0 8.8-7.2 16-16 16H560c-8.8 0-16-7.2-16-16V320H480v16c0 8.8-7.2 16-16 16H432c-8.8 0-16-7.2-16-16V318.4c-11.8-2.4-22.7-7.4-32-14.4c-1.5-1.1-2.9-2.3-4.3-3.5c-17-14.7-27.7-36.4-27.7-60.5c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 44.7 26.2 83.2 64 101.2V352c0 17.7 14.3 32 32 32h32v64c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V372c-19.8 7.7-41.4 12-64 12s-44.2-4.3-64-12v76c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V329.1L45.9 369.7c-5.4 12.1-19.6 17.6-31.7 12.2S-3.3 362.4 2.1 350.3L24 300.9c5.3-11.9 8-24.7 8-37.7C32 155.7 117.2 68 223.8 64.1l.2-.1h7.2H256h32c41.7 0 83.4 12.1 117.2 25.7c1.7-1.8 3.5-3.6 5.3-5.2L407 81c-9.4-9.4-9.4-24.6 0-33.9zm73 185a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm88 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM480 144a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M407 47c9.4-9.4 24.6-9.4 33.9 0l17.2 17.2c1.9-.1 3.9-.2 5.8-.2h32c11.2 0 21.9 2.3 31.6 6.5L543 55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L564 101.9c7.6 12.2 12 26.7 12 42.1c0 10.2 7.4 18.8 16.7 23c27.9 12.5 47.3 40.5 47.3 73c0 26.2-12.6 49.4-32 64v32c0 8.8-7.2 16-16 16H560c-8.8 0-16-7.2-16-16V320H480v16c0 8.8-7.2 16-16 16H432c-8.8 0-16-7.2-16-16V318.4c-11.8-2.4-22.7-7.4-32-14.4c-1.5-1.1-2.9-2.3-4.3-3.5c-17-14.7-27.7-36.4-27.7-60.5c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 44.7 26.2 83.2 64 101.2V352c0 17.7 14.3 32 32 32h32v64c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V372c-19.8 7.7-41.4 12-64 12s-44.2-4.3-64-12v76c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V329.1L45.9 369.7c-5.4 12.1-19.6 17.6-31.7 12.2S-3.3 362.4 2.1 350.3L24 300.9c5.3-11.9 8-24.7 8-37.7C32 155.7 117.2 68 223.8 64.1l.2-.1h7.2H256h32c41.7 0 83.4 12.1 117.2 25.7c1.7-1.8 3.5-3.6 5.3-5.2L407 81c-9.4-9.4-9.4-24.6 0-33.9zm73 185a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm88 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM480 144a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hips\": {\n    \"changes\": [\"5.0.5\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f452\",\n    \"label\": \"Hips\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M251.6 157.6c0-1.9-.9-2.8-2.8-2.8h-40.9c-1.6 0-2.7 1.4-2.7 2.8v201.8c0 1.4 1.1 2.8 2.7 2.8h40.9c1.9 0 2.8-.9 2.8-2.8zM156.5 168c-16.1-11.8-36.3-17.9-60.3-18-18.1-.1-34.6 3.7-49.8 11.4V80.2c0-1.8-.9-2.7-2.8-2.7H2.7c-1.8 0-2.7.9-2.7 2.7v279.2c0 1.9.9 2.8 2.7 2.8h41c1.9 0 2.8-.9 2.8-2.8V223.3c0-.8-2.8-27 45.8-27 48.5 0 45.8 26.1 45.8 27v122.6c0 9 7.3 16.3 16.4 16.3h27.3c1.8 0 2.7-.9 2.7-2.8V223.3c0-23.4-9.3-41.8-28-55.3zm478.4 110.1c-6.8-15.7-18.4-27-34.9-34.1l-57.6-25.3c-8.6-3.6-9.2-11.2-2.6-16.1 7.4-5.5 44.3-13.9 84 6.8 1.7 1 4-.3 4-2.4v-44.7c0-1.3-.6-2.1-1.9-2.6-17.7-6.6-36.1-9.9-55.1-9.9-26.5 0-45.3 5.8-58.5 15.4-.5.4-28.4 20-22.7 53.7 3.4 19.6 15.8 34.2 37.2 43.6l53.6 23.5c11.6 5.1 15.2 13.3 12.2 21.2-3.7 9.1-13.2 13.6-36.5 13.6-24.3 0-44.7-8.9-58.4-19.1-2.1-1.4-4.4.2-4.4 2.3v34.4c0 10.4 4.9 17.3 14.6 20.7 15.6 5.5 31.6 8.2 48.2 8.2 12.7 0 25.8-1.2 36.3-4.3.7-.3 36-8.9 45.6-45.8 3.5-13.5 2.4-26.5-3.1-39.1zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zM228.3 72.5c-15.9 0-28.8 12.9-28.9 28.9 0 15.6 12.7 28.9 28.9 28.9s28.9-13.1 28.9-28.9c0-16.2-13-28.9-28.9-28.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hire-a-helper\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b0\",\n    \"label\": \"HireAHelper\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hive\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e07f\",\n    \"label\": \"Hive Blockchain Network\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M260.353,254.878,131.538,33.1a2.208,2.208,0,0,0-3.829.009L.3,254.887A2.234,2.234,0,0,0,.3,257.122L129.116,478.9a2.208,2.208,0,0,0,3.83-.009L260.358,257.113A2.239,2.239,0,0,0,260.353,254.878Zm39.078-25.713a2.19,2.19,0,0,0,1.9,1.111h66.509a2.226,2.226,0,0,0,1.9-3.341L259.115,33.111a2.187,2.187,0,0,0-1.9-1.111H190.707a2.226,2.226,0,0,0-1.9,3.341ZM511.7,254.886,384.9,33.112A2.2,2.2,0,0,0,382.99,32h-66.6a2.226,2.226,0,0,0-1.906,3.34L440.652,256,314.481,476.66a2.226,2.226,0,0,0,1.906,3.34h66.6a2.2,2.2,0,0,0,1.906-1.112L511.7,257.114A2.243,2.243,0,0,0,511.7,254.886ZM366.016,284.917H299.508a2.187,2.187,0,0,0-1.9,1.111l-108.8,190.631a2.226,2.226,0,0,0,1.9,3.341h66.509a2.187,2.187,0,0,0,1.9-1.111l108.8-190.631A2.226,2.226,0,0,0,366.016,284.917Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M260.353,254.878,131.538,33.1a2.208,2.208,0,0,0-3.829.009L.3,254.887A2.234,2.234,0,0,0,.3,257.122L129.116,478.9a2.208,2.208,0,0,0,3.83-.009L260.358,257.113A2.239,2.239,0,0,0,260.353,254.878Zm39.078-25.713a2.19,2.19,0,0,0,1.9,1.111h66.509a2.226,2.226,0,0,0,1.9-3.341L259.115,33.111a2.187,2.187,0,0,0-1.9-1.111H190.707a2.226,2.226,0,0,0-1.9,3.341ZM511.7,254.886,384.9,33.112A2.2,2.2,0,0,0,382.99,32h-66.6a2.226,2.226,0,0,0-1.906,3.34L440.652,256,314.481,476.66a2.226,2.226,0,0,0,1.906,3.34h66.6a2.2,2.2,0,0,0,1.906-1.112L511.7,257.114A2.243,2.243,0,0,0,511.7,254.886ZM366.016,284.917H299.508a2.187,2.187,0,0,0-1.9,1.111l-108.8,190.631a2.226,2.226,0,0,0,1.9,3.341h66.509a2.187,2.187,0,0,0,1.9-1.111l108.8-190.631A2.226,2.226,0,0,0,366.016,284.917Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hockey-puck\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f453\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ice\", \"nhl\", \"sport\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f453\",\n    \"label\": \"Hockey Puck\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 256C114.6 256 0 213 0 160s114.6-96 256-96s256 43 256 96s-114.6 96-256 96zm192.3 1.8c24.7-9.3 46.9-21 63.7-35.6V352c0 53-114.6 96-256 96S0 405 0 352V222.3c16.8 14.6 39 26.3 63.7 35.6C114.5 276.9 182.5 288 256 288s141.5-11.1 192.3-30.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 256C114.6 256 0 213 0 160s114.6-96 256-96s256 43 256 96s-114.6 96-256 96zm192.3 1.8c24.7-9.3 46.9-21 63.7-35.6V352c0 53-114.6 96-256 96S0 405 0 352V222.3c16.8 14.6 39 26.3 63.7 35.6C114.5 276.9 182.5 288 256 288s141.5-11.1 192.3-30.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"holly-berry\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7aa\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"catwoman\",\n        \"christmas\",\n        \"decoration\",\n        \"flora\",\n        \"halle\",\n        \"holiday\",\n        \"ororo munroe\",\n        \"plant\",\n        \"storm\",\n        \"xmas\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7aa\",\n    \"label\": \"Holly Berry\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM276.8 383.8c1 .1 2.1 .2 3.2 .2c39.8 0 72 32.2 72 72v22.7c0 16.4 16 27.9 31.6 22.8l12.8-4.3c18-6 37.3-6.5 55.6-1.5l19.4 5.3c17.9 4.9 34.4-11.6 29.5-29.5L495.6 452c-5-18.3-4.4-37.6 1.5-55.6l4.3-12.8c5.2-15.5-6.4-31.6-22.8-31.6c-34.6 0-62.7-28.1-62.7-62.7v-32c0-16.4-16-27.9-31.6-22.8l-12.8 4.3c-18 6-37.3 6.5-55.6 1.5l-29.6-8.1c-2.9-.8-5.9-1-8.7-.7c4.2 9.7 5.8 20.8 3.7 32.3L275 298.7c-1.5 8.4-1.4 17 .5 25.3l5.3 23.9c2.8 12.7 1.1 25.2-4 35.9zM127.6 234.5c-15.5-5.2-31.6 6.4-31.6 22.8v32C96 323.9 67.9 352 33.3 352c-16.4 0-27.9 16-22.8 31.6l4.3 12.8c6 18 6.5 37.3 1.5 55.6l-5.3 19.4C6.2 489.4 22.6 505.8 40.5 501L60 495.6c18.3-5 37.6-4.5 55.6 1.5l12.8 4.3c15.5 5.2 31.6-6.4 31.6-22.8v-32c0-34.6 28.1-62.7 62.7-62.7c16.4 0 27.9-16 22.8-31.6l-4.3-12.8c-6-18-6.5-37.3-1.5-55.6l5.3-19.4c4.9-17.9-11.6-34.4-29.5-29.5L196 240.4c-18.3 5-37.6 4.4-55.6-1.5l-12.8-4.3zM384 144a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM276.8 383.8c1 .1 2.1 .2 3.2 .2c39.8 0 72 32.2 72 72v22.7c0 16.4 16 27.9 31.6 22.8l12.8-4.3c18-6 37.3-6.5 55.6-1.5l19.4 5.3c17.9 4.9 34.4-11.6 29.5-29.5L495.6 452c-5-18.3-4.4-37.6 1.5-55.6l4.3-12.8c5.2-15.5-6.4-31.6-22.8-31.6c-34.6 0-62.7-28.1-62.7-62.7v-32c0-16.4-16-27.9-31.6-22.8l-12.8 4.3c-18 6-37.3 6.5-55.6 1.5l-29.6-8.1c-2.9-.8-5.9-1-8.7-.7c4.2 9.7 5.8 20.8 3.7 32.3L275 298.7c-1.5 8.4-1.4 17 .5 25.3l5.3 23.9c2.8 12.7 1.1 25.2-4 35.9zM127.6 234.5c-15.5-5.2-31.6 6.4-31.6 22.8v32C96 323.9 67.9 352 33.3 352c-16.4 0-27.9 16-22.8 31.6l4.3 12.8c6 18 6.5 37.3 1.5 55.6l-5.3 19.4C6.2 489.4 22.6 505.8 40.5 501L60 495.6c18.3-5 37.6-4.5 55.6 1.5l12.8 4.3c15.5 5.2 31.6-6.4 31.6-22.8v-32c0-34.6 28.1-62.7 62.7-62.7c16.4 0 27.9-16 22.8-31.6l-4.3-12.8c-6-18-6.5-37.3-1.5-55.6l5.3-19.4c4.9-17.9-11.6-34.4-29.5-29.5L196 240.4c-18.3 5-37.6 4.4-55.6-1.5l-12.8-4.3zM384 144a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hooli\": {\n    \"changes\": [\"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f427\",\n    \"label\": \"Hooli\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014483,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8zm57.7-5.3v5.3l-19.4.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3zm408.9-115.2c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zm-29 120.5H640V241.5h-57.9zm-73.7 0h57.9V156.7L508.4 184zm-31-119.4c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6s-1.4 34.3 16.8 52.5 50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9zm-106.2-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.8 110.8V352h57.9v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.4-21.6-38.4-31.4v-31c13.1 14.7 30.5 31.4 53.4 50.3l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5s50.4 17.1 50.4 17.1 32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zM65.2 184v63.3c-48.7-54.5-38.9-76-35.2-79.1 13.5-11.4 37.5-8 64.4 2.1zm226.5 120.5c0 3.6-1.8 12.5-10.7 12.5s-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9s10.7 2.1 10.7 10.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hornbill\": {\n    \"changes\": [\"5.1.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f592\",\n    \"label\": \"Hornbill\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M76.38 370.3a37.8 37.8 0 1 1-32.07-32.42c-78.28-111.35 52-190.53 52-190.53-5.86 43-8.24 91.16-8.24 91.16-67.31 41.49.93 64.06 39.81 72.87a140.38 140.38 0 0 0 131.66 91.94c1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zm108-327.7A37.57 37.57 0 0 0 181 21.45a37.95 37.95 0 1 0-31.17 54.22c-22.55 29.91-53.83 89.57-52.42 190l21.84-.15c0-.9-.14-1.77-.14-2.68A140.42 140.42 0 0 1 207 132.71c8-37.71 30.7-114.3 73.8-44.29 0 0 48.14 2.38 91.18 8.24 0 0-77.84-128-187.59-54.06zm304.19 134.17a37.94 37.94 0 1 0-53.84-28.7C403 126.13 344.89 99 251.28 100.33l.14 22.5c2.7-.15 5.39-.41 8.14-.41a140.37 140.37 0 0 1 130.49 88.76c39.1 9 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 49-194.61a37.45 37.45 0 0 0 19.31-3.5zM374.06 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15a140.34 140.34 0 0 1-91.39 131.45c-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 51a37.5 37.5 0 0 0 3.64 14 37.93 37.93 0 1 0 33.89-54.29z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"horse\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f40e\"],\n        \"secondary\": [\"10f6f0\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"equestrian\",\n        \"equus\",\n        \"fauna\",\n        \"horse\",\n        \"mammmal\",\n        \"mare\",\n        \"neigh\",\n        \"pony\",\n        \"racehorse\",\n        \"racing\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6f0\",\n    \"label\": \"Horse\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M448 238.1V160h16l9.8 19.6c12.5 25.1 42.2 36.4 68.3 26c20.5-8.2 33.9-28 33.9-50.1V80c0-19.1-8.4-36.3-21.7-48H560c8.8 0 16-7.2 16-16s-7.2-16-16-16H480 448C377.3 0 320 57.3 320 128H224 203.2 148.8c-30.7 0-57.6 16.3-72.5 40.8C33.2 174.5 0 211.4 0 256v56c0 13.3 10.7 24 24 24s24-10.7 24-24V256c0-13.4 6.6-25.2 16.7-32.5c1.6 13 6.3 25.4 13.6 36.4l28.2 42.4c8.3 12.4 6.4 28.7-1.2 41.6c-16.5 28-20.6 62.2-10 93.9l17.5 52.4c4.4 13.1 16.6 21.9 30.4 21.9h33.7c21.8 0 37.3-21.4 30.4-42.1l-20.8-62.5c-2.1-6.4-.5-13.4 4.3-18.2l12.7-12.7c13.2-13.2 20.6-31.1 20.6-49.7c0-2.3-.1-4.6-.3-6.9l84 24c4.1 1.2 8.2 2.1 12.3 2.8V480c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V315.7c19.2-19.2 31.5-45.7 32-75.7h0v-1.9zM496 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M448 238.1V160h16l9.8 19.6c12.5 25.1 42.2 36.4 68.3 26c20.5-8.2 33.9-28 33.9-50.1V80c0-19.1-8.4-36.3-21.7-48H560c8.8 0 16-7.2 16-16s-7.2-16-16-16H480 448C377.3 0 320 57.3 320 128H224 203.2 148.8c-30.7 0-57.6 16.3-72.5 40.8C33.2 174.5 0 211.4 0 256v56c0 13.3 10.7 24 24 24s24-10.7 24-24V256c0-13.4 6.6-25.2 16.7-32.5c1.6 13 6.3 25.4 13.6 36.4l28.2 42.4c8.3 12.4 6.4 28.7-1.2 41.6c-16.5 28-20.6 62.2-10 93.9l17.5 52.4c4.4 13.1 16.6 21.9 30.4 21.9h33.7c21.8 0 37.3-21.4 30.4-42.1l-20.8-62.5c-2.1-6.4-.5-13.4 4.3-18.2l12.7-12.7c13.2-13.2 20.6-31.1 20.6-49.7c0-2.3-.1-4.6-.3-6.9l84 24c4.1 1.2 8.2 2.1 12.3 2.8V480c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V315.7c19.2-19.2 31.5-45.7 32-75.7h0v-1.9zM496 64a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"horse-head\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7ab\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"equus\", \"fauna\", \"mammmal\", \"mare\", \"neigh\", \"pony\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ab\",\n    \"label\": \"Horse Head\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 464V316.9c0-108.4 68.3-205.1 170.5-241.3L404.2 15.5C425.6 7.9 448 23.8 448 46.4c0 11-5.5 21.2-14.6 27.3L400 96c48.1 0 91.2 29.8 108.1 74.9l48.6 129.5c11.8 31.4 4.1 66.8-19.6 90.5c-16 16-37.8 25.1-60.5 25.1h-3.4c-26.1 0-50.9-11.6-67.6-31.7l-32.3-38.7c-11.7 4.1-24.2 6.4-37.3 6.4l-.1 0 0 0c-6.3 0-12.5-.5-18.6-1.5c-3.6-.6-7.2-1.4-10.7-2.3l0 0c-28.9-7.8-53.1-26.8-67.8-52.2c-4.4-7.6-14.2-10.3-21.9-5.8s-10.3 14.2-5.8 21.9c24 41.5 68.3 70 119.3 71.9l47.2 70.8c4 6.1 6.2 13.2 6.2 20.4c0 20.3-16.5 36.8-36.8 36.8H112c-26.5 0-48-21.5-48-48zM392 224a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 464V316.9c0-108.4 68.3-205.1 170.5-241.3L404.2 15.5C425.6 7.9 448 23.8 448 46.4c0 11-5.5 21.2-14.6 27.3L400 96c48.1 0 91.2 29.8 108.1 74.9l48.6 129.5c11.8 31.4 4.1 66.8-19.6 90.5c-16 16-37.8 25.1-60.5 25.1h-3.4c-26.1 0-50.9-11.6-67.6-31.7l-32.3-38.7c-11.7 4.1-24.2 6.4-37.3 6.4l-.1 0 0 0c-6.3 0-12.5-.5-18.6-1.5c-3.6-.6-7.2-1.4-10.7-2.3l0 0c-28.9-7.8-53.1-26.8-67.8-52.2c-4.4-7.6-14.2-10.3-21.9-5.8s-10.3 14.2-5.8 21.9c24 41.5 68.3 70 119.3 71.9l47.2 70.8c4 6.1 6.2 13.2 6.2 20.4c0 20.3-16.5 36.8-36.8 36.8H112c-26.5 0-48-21.5-48-48zM392 224a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hospital\": {\n    \"aliases\": {\n      \"names\": [\"hospital-alt\", \"hospital-wide\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3e5\", \"f47d\"],\n        \"primary\": [\"f47d\"],\n        \"secondary\": [\"10f0f8\", \"10f47d\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"covid-19\",\n        \"doctor\",\n        \"emergency room\",\n        \"hospital\",\n        \"medical center\",\n        \"medicine\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0f8\",\n    \"label\": \"Hospital\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 48c0-26.5 21.5-48 48-48H400c26.5 0 48 21.5 48 48V512H368V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H192V48zM48 96H160V512H48c-26.5 0-48-21.5-48-48V320H80c8.8 0 16-7.2 16-16s-7.2-16-16-16H0V224H80c8.8 0 16-7.2 16-16s-7.2-16-16-16H0V144c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48v48H560c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H560c-8.8 0-16 7.2-16 16s7.2 16 16 16h80V464c0 26.5-21.5 48-48 48H480V96H592zM312 64c-8.8 0-16 7.2-16 16v24H272c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h24v24c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V152h24c8.8 0 16-7.2 16-16V120c0-8.8-7.2-16-16-16H344V80c0-8.8-7.2-16-16-16H312z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 48c0-26.5 21.5-48 48-48H400c26.5 0 48 21.5 48 48V512H368V432c0-26.5-21.5-48-48-48s-48 21.5-48 48v80H192V48zM48 96H160V512H48c-26.5 0-48-21.5-48-48V320H80c8.8 0 16-7.2 16-16s-7.2-16-16-16H0V224H80c8.8 0 16-7.2 16-16s-7.2-16-16-16H0V144c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48v48H560c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H560c-8.8 0-16 7.2-16 16s7.2 16 16 16h80V464c0 26.5-21.5 48-48 48H480V96H592zM312 64c-8.8 0-16 7.2-16 16v24H272c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h24v24c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V152h24c8.8 0 16-7.2 16-16V120c0-8.8-7.2-16-16-16H344V80c0-8.8-7.2-16-16-16H312z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M232 0c-39.8 0-72 32.2-72 72v8H72C32.2 80 0 112.2 0 152V440c0 39.8 32.2 72 72 72h.2 .2 .2 .2 .2H73h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2H75h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2H77h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2H79h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2H82h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2H85h.2 .2 .2 .2H86h.2 .2 .2 .2H87h.2 .2 .2 .2H88h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2H98h.2 .2 .2 .2H99h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2v0H456h8v0H568c39.8 0 72-32.2 72-72V152c0-39.8-32.2-72-72-72H480V72c0-39.8-32.2-72-72-72H232zM480 128h88c13.3 0 24 10.7 24 24v40H536c-13.3 0-24 10.7-24 24s10.7 24 24 24h56v48H536c-13.3 0-24 10.7-24 24s10.7 24 24 24h56V440c0 13.3-10.7 24-24 24H480V336 128zM72 128h88V464h-.1-.2-.2-.2H159h-.2-.2-.2H158h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H154h-.2-.2-.2H153h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H150h-.2-.2-.2H149h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H146h-.2-.2-.2H145h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H142h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H139h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H136h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H133h-.2-.2-.2-.2-.2-.2-.2-.2H131h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H128h-.2-.2-.2-.2-.2-.2-.2-.2H126h-.2-.2-.2-.2-.2-.2-.2-.2H124h-.2-.2-.2-.2-.2-.2-.2-.2H122h-.2-.2-.2-.2-.2-.2-.2-.2H120h-.2-.2-.2-.2-.2-.2-.2-.2H118h-.2-.2-.2-.2-.2-.2-.2-.2H116h-.2-.2-.2-.2-.2-.2-.2-.2H114h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H111h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H108h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H105h-.2-.2-.2-.2H104h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H100h-.2-.2-.2-.2H99h-.2-.2-.2-.2H98h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H88h-.2-.2-.2-.2H87h-.2-.2-.2-.2H86h-.2-.2-.2-.2H85h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H82h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H79h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H77h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H75h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H73h-.2-.2-.2-.2-.2H72c-13.2 0-24-10.7-24-24V336h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H48V240h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H48V152c0-13.3 10.7-24 24-24zM208 72c0-13.3 10.7-24 24-24H408c13.3 0 24 10.7 24 24V336 464H368V400c0-26.5-21.5-48-48-48s-48 21.5-48 48v64H208V72zm88 24v24H272c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h24v24c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V168h24c8.8 0 16-7.2 16-16V136c0-8.8-7.2-16-16-16H344V96c0-8.8-7.2-16-16-16H312c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M232 0c-39.8 0-72 32.2-72 72v8H72C32.2 80 0 112.2 0 152V440c0 39.8 32.2 72 72 72h.2 .2 .2 .2 .2H73h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2H75h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2H77h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2H79h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2H82h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2H85h.2 .2 .2 .2H86h.2 .2 .2 .2H87h.2 .2 .2 .2H88h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2H98h.2 .2 .2 .2H99h.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2v0H456h8v0H568c39.8 0 72-32.2 72-72V152c0-39.8-32.2-72-72-72H480V72c0-39.8-32.2-72-72-72H232zM480 128h88c13.3 0 24 10.7 24 24v40H536c-13.3 0-24 10.7-24 24s10.7 24 24 24h56v48H536c-13.3 0-24 10.7-24 24s10.7 24 24 24h56V440c0 13.3-10.7 24-24 24H480V336 128zM72 128h88V464h-.1-.2-.2-.2H159h-.2-.2-.2H158h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H154h-.2-.2-.2H153h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H150h-.2-.2-.2H149h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H146h-.2-.2-.2H145h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H142h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H139h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H136h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H133h-.2-.2-.2-.2-.2-.2-.2-.2H131h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H128h-.2-.2-.2-.2-.2-.2-.2-.2H126h-.2-.2-.2-.2-.2-.2-.2-.2H124h-.2-.2-.2-.2-.2-.2-.2-.2H122h-.2-.2-.2-.2-.2-.2-.2-.2H120h-.2-.2-.2-.2-.2-.2-.2-.2H118h-.2-.2-.2-.2-.2-.2-.2-.2H116h-.2-.2-.2-.2-.2-.2-.2-.2H114h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H111h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H108h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H105h-.2-.2-.2-.2H104h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H100h-.2-.2-.2-.2H99h-.2-.2-.2-.2H98h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H88h-.2-.2-.2-.2H87h-.2-.2-.2-.2H86h-.2-.2-.2-.2H85h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H82h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H79h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H77h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H75h-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2H73h-.2-.2-.2-.2-.2H72c-13.2 0-24-10.7-24-24V336h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H48V240h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H48V152c0-13.3 10.7-24 24-24zM208 72c0-13.3 10.7-24 24-24H408c13.3 0 24 10.7 24 24V336 464H368V400c0-26.5-21.5-48-48-48s-48 21.5-48 48v64H208V72zm88 24v24H272c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h24v24c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V168h24c8.8 0 16-7.2 16-16V136c0-8.8-7.2-16-16-16H344V96c0-8.8-7.2-16-16-16H312c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hospital-user\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f80d\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"covid-19\", \"doctor\", \"network\", \"patient\", \"primary care\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f80d\",\n    \"label\": \"Hospital User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V256H144c8.8 0 16 7.2 16 16s-7.2 16-16 16H0v64H144c8.8 0 16 7.2 16 16s-7.2 16-16 16H0v80c0 26.5 21.5 48 48 48H265.9c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2V271.8 48c0-26.5-21.5-48-48-48H48zM152 64h16c8.8 0 16 7.2 16 16v24h24c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H184v24c0 8.8-7.2 16-16 16H152c-8.8 0-16-7.2-16-16V152H112c-8.8 0-16-7.2-16-16V120c0-8.8 7.2-16 16-16h24V80c0-8.8 7.2-16 16-16zM512 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM288 477.1c0 19.3 15.6 34.9 34.9 34.9H541.1c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1H381.1c-51.4 0-93.1 41.7-93.1 93.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V256H144c8.8 0 16 7.2 16 16s-7.2 16-16 16H0v64H144c8.8 0 16 7.2 16 16s-7.2 16-16 16H0v80c0 26.5 21.5 48 48 48H265.9c-6.3-10.2-9.9-22.2-9.9-35.1c0-46.9 25.8-87.8 64-109.2V271.8 48c0-26.5-21.5-48-48-48H48zM152 64h16c8.8 0 16 7.2 16 16v24h24c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H184v24c0 8.8-7.2 16-16 16H152c-8.8 0-16-7.2-16-16V152H112c-8.8 0-16-7.2-16-16V120c0-8.8 7.2-16 16-16h24V80c0-8.8 7.2-16 16-16zM512 272a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM288 477.1c0 19.3 15.6 34.9 34.9 34.9H541.1c19.3 0 34.9-15.6 34.9-34.9c0-51.4-41.7-93.1-93.1-93.1H381.1c-51.4 0-93.1 41.7-93.1 93.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hot-tub-person\": {\n    \"aliases\": {\n      \"names\": [\"hot-tub\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f593\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"jacuzzi\", \"spa\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f593\",\n    \"label\": \"Hot Tub Person\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M272 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5V200c0 13.3 10.7 24 24 24s24-10.7 24-24V186.8c0-34-14.4-66.4-39.7-89.2L295.8 82.8C280.7 69.1 272 49.7 272 29.2V24zM0 320v16V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V320c0-35.3-28.7-64-64-64H277.3c-13.8 0-27.3-4.5-38.4-12.8l-85.3-64C137 166.7 116.8 160 96 160c-53 0-96 43-96 96v64zm128 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm112 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM360 0c-13.3 0-24 10.7-24 24v5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5V200c0 13.3 10.7 24 24 24s24-10.7 24-24V186.8c0-34-14.4-66.4-39.7-89.2L407.8 82.8C392.7 69.1 384 49.7 384 29.2V24c0-13.3-10.7-24-24-24zM64 128A64 64 0 1 0 64 0a64 64 0 1 0 0 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M272 24c0-13.3-10.7-24-24-24s-24 10.7-24 24v5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5V200c0 13.3 10.7 24 24 24s24-10.7 24-24V186.8c0-34-14.4-66.4-39.7-89.2L295.8 82.8C280.7 69.1 272 49.7 272 29.2V24zM0 320v16V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V320c0-35.3-28.7-64-64-64H277.3c-13.8 0-27.3-4.5-38.4-12.8l-85.3-64C137 166.7 116.8 160 96 160c-53 0-96 43-96 96v64zm128 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm112 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16s16 7.2 16 16zm80-16c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16s-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM360 0c-13.3 0-24 10.7-24 24v5.2c0 34 14.4 66.4 39.7 89.2l16.4 14.8c15.2 13.7 23.8 33.1 23.8 53.5V200c0 13.3 10.7 24 24 24s24-10.7 24-24V186.8c0-34-14.4-66.4-39.7-89.2L407.8 82.8C392.7 69.1 384 49.7 384 29.2V24c0-13.3-10.7-24-24-24zM64 128A64 64 0 1 0 64 0a64 64 0 1 0 0 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hotdog\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f32d\"],\n        \"secondary\": [\"10f80f\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bun\",\n        \"chili\",\n        \"frankfurt\",\n        \"frankfurter\",\n        \"hot dog\",\n        \"hotdog\",\n        \"kosher\",\n        \"polish\",\n        \"sandwich\",\n        \"sausage\",\n        \"vienna\",\n        \"weiner\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f80f\",\n    \"label\": \"Hotdog\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M488.6 23.4c31.2 31.2 31.2 81.9 0 113.1l-352 352c-31.2 31.2-81.9 31.2-113.1 0s-31.2-81.9 0-113.1l352-352c31.2-31.2 81.9-31.2 113.1 0zM443.3 92.7c-6.2-6.2-16.4-6.2-22.6 0c-12.5 12.5-23.8 15.1-37.5 17.6l-2.5 .4c-13.8 2.5-31.6 5.6-48 22c-16.7 16.7-20.9 36-24.1 50.9l0 0v0l-.2 1c-3.4 15.6-6 26.4-15.7 36.1s-20.5 12.3-36.1 15.7l-1 .2c-14.9 3.2-34.2 7.4-50.9 24.1s-20.9 36-24.1 50.9l-.2 1c-3.4 15.6-6 26.4-15.7 36.1c-9.2 9.2-18 10.8-32.7 13.4l0 0-.9 .2c-15.6 2.8-34.9 6.9-54.4 26.4c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0c12.5-12.5 23.8-15.1 37.5-17.6l2.5-.4c13.8-2.5 31.6-5.6 48-22c16.7-16.7 20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1s20.5-12.3 36.1-15.7l1-.2c14.9-3.2 34.2-7.4 50.9-24.1s20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1c9.2-9.2 18-10.8 32.7-13.4l.9-.2c15.6-2.8 34.9-6.9 54.4-26.4c6.2-6.2 6.2-16.4 0-22.6zM191.2 479.2l288-288L495 207c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41L289 495c-10.9 10.9-25.6 17-41 17s-30.1-6.1-41-17l-15.8-15.8zM17 305C6.1 294.1 0 279.4 0 264s6.1-30.1 17-41L223 17C233.9 6.1 248.6 0 264 0s30.1 6.1 41 17l15.8 15.8-288 288L17 305z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M488.6 23.4c31.2 31.2 31.2 81.9 0 113.1l-352 352c-31.2 31.2-81.9 31.2-113.1 0s-31.2-81.9 0-113.1l352-352c31.2-31.2 81.9-31.2 113.1 0zM443.3 92.7c-6.2-6.2-16.4-6.2-22.6 0c-12.5 12.5-23.8 15.1-37.5 17.6l-2.5 .4c-13.8 2.5-31.6 5.6-48 22c-16.7 16.7-20.9 36-24.1 50.9l0 0v0l-.2 1c-3.4 15.6-6 26.4-15.7 36.1s-20.5 12.3-36.1 15.7l-1 .2c-14.9 3.2-34.2 7.4-50.9 24.1s-20.9 36-24.1 50.9l-.2 1c-3.4 15.6-6 26.4-15.7 36.1c-9.2 9.2-18 10.8-32.7 13.4l0 0-.9 .2c-15.6 2.8-34.9 6.9-54.4 26.4c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0c12.5-12.5 23.8-15.1 37.5-17.6l2.5-.4c13.8-2.5 31.6-5.6 48-22c16.7-16.7 20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1s20.5-12.3 36.1-15.7l1-.2c14.9-3.2 34.2-7.4 50.9-24.1s20.9-36 24.1-50.9l.2-1c3.4-15.6 6-26.4 15.7-36.1c9.2-9.2 18-10.8 32.7-13.4l.9-.2c15.6-2.8 34.9-6.9 54.4-26.4c6.2-6.2 6.2-16.4 0-22.6zM191.2 479.2l288-288L495 207c10.9 10.9 17 25.6 17 41s-6.1 30.1-17 41L289 495c-10.9 10.9-25.6 17-41 17s-30.1-6.1-41-17l-15.8-15.8zM17 305C6.1 294.1 0 279.4 0 264s6.1-30.1 17-41L223 17C233.9 6.1 248.6 0 264 0s30.1 6.1 41 17l15.8 15.8-288 288L17 305z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hotel\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3e8\"],\n        \"secondary\": [\"10f594\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"hotel\",\n        \"inn\",\n        \"lodging\",\n        \"motel\",\n        \"resort\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f594\",\n    \"label\": \"Hotel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0H480c17.7 0 32 14.3 32 32s-14.3 32-32 32V448c17.7 0 32 14.3 32 32s-14.3 32-32 32H304V464c0-26.5-21.5-48-48-48s-48 21.5-48 48v48H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V64C14.3 64 0 49.7 0 32zm96 80v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H112c-8.8 0-16 7.2-16 16zM240 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H240zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zM112 192c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H112zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H368zM328 384c13.3 0 24.3-10.9 21-23.8c-10.6-41.5-48.2-72.2-93-72.2s-82.5 30.7-93 72.2c-3.3 12.8 7.8 23.8 21 23.8H328z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0H480c17.7 0 32 14.3 32 32s-14.3 32-32 32V448c17.7 0 32 14.3 32 32s-14.3 32-32 32H304V464c0-26.5-21.5-48-48-48s-48 21.5-48 48v48H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V64C14.3 64 0 49.7 0 32zm96 80v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H112c-8.8 0-16 7.2-16 16zM240 96c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H240zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V112c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zM112 192c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H112zm112 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16zm144-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H368zM328 384c13.3 0 24.3-10.9 21-23.8c-10.6-41.5-48.2-72.2-93-72.2s-82.5 30.7-93 72.2c-3.3 12.8 7.8 23.8 21 23.8H328z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hotjar\": {\n    \"changes\": [\"5.0.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b1\",\n    \"label\": \"Hotjar\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1688044785,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M361.5 0c0 131.6-80.7 176.8-140.2 209.4c-.6 .3-1.1 .6-1.6 .9c-53.8 30.2-88.7 49.8-89.6 122H32C32 200.8 112.7 155.6 172.2 123C227 93.2 262.5 73 262.5 0h98.9zM301 302.6c54.8-29.8 90.3-50 90.3-123h98c0 131.6-80.7 176.7-140.2 209.4c-54.8 29.8-90.3 50-90.3 123h-98c0-131.6 80.7-176.8 140.2-209.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M361.5 0c0 131.6-80.7 176.8-140.2 209.4c-.6 .3-1.1 .6-1.6 .9c-53.8 30.2-88.7 49.8-89.6 122H32C32 200.8 112.7 155.6 172.2 123C227 93.2 262.5 73 262.5 0h98.9zM301 302.6c54.8-29.8 90.3-50 90.3-123h98c0 131.6-80.7 176.7-140.2 209.4c-54.8 29.8-90.3 50-90.3 123h-98c0-131.6 80.7-176.8 140.2-209.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hourglass\": {\n    \"aliases\": {\n      \"names\": [\"hourglass-empty\"],\n      \"unicodes\": {\n        \"composite\": [\"23f3\", \"f250\"],\n        \"secondary\": [\"10f254\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"hour\",\n        \"hourglass\",\n        \"hourglass not done\",\n        \"minute\",\n        \"sand\",\n        \"stopwatch\",\n        \"time\",\n        \"timer\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f254\",\n    \"label\": \"Hourglass\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0H64 320h32c17.7 0 32 14.3 32 32s-14.3 32-32 32V75c0 42.4-16.9 83.1-46.9 113.1L237.3 256l67.9 67.9c30 30 46.9 70.7 46.9 113.1v11c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 64 32c-17.7 0-32-14.3-32-32s14.3-32 32-32V437c0-42.4 16.9-83.1 46.9-113.1L146.7 256 78.9 188.1C48.9 158.1 32 117.4 32 75V64C14.3 64 0 49.7 0 32zM96 64V75c0 25.5 10.1 49.9 28.1 67.9L192 210.7l67.9-67.9c18-18 28.1-42.4 28.1-67.9V64H96zm0 384H288V437c0-25.5-10.1-49.9-28.1-67.9L192 301.3l-67.9 67.9c-18 18-28.1 42.4-28.1 67.9v11z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0H64 320h32c17.7 0 32 14.3 32 32s-14.3 32-32 32V75c0 42.4-16.9 83.1-46.9 113.1L237.3 256l67.9 67.9c30 30 46.9 70.7 46.9 113.1v11c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 64 32c-17.7 0-32-14.3-32-32s14.3-32 32-32V437c0-42.4 16.9-83.1 46.9-113.1L146.7 256 78.9 188.1C48.9 158.1 32 117.4 32 75V64C14.3 64 0 49.7 0 32zM96 64V75c0 25.5 10.1 49.9 28.1 67.9L192 210.7l67.9-67.9c18-18 28.1-42.4 28.1-67.9V64H96zm0 384H288V437c0-25.5-10.1-49.9-28.1-67.9L192 301.3l-67.9 67.9c-18 18-28.1 42.4-28.1 67.9v11z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48h8V67c0 40.3 16 79 44.5 107.5L158.1 256 76.5 337.5C48 366 32 404.7 32 445v19H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8V445c0-40.3-16-79-44.5-107.5L225.9 256l81.5-81.5C336 146 352 107.3 352 67V48h8c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM192 289.9l81.5 81.5C293 391 304 417.4 304 445v19H80V445c0-27.6 11-54 30.5-73.5L192 289.9zm0-67.9l-81.5-81.5C91 121 80 94.6 80 67V48H304V67c0 27.6-11 54-30.5 73.5L192 222.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48h8V67c0 40.3 16 79 44.5 107.5L158.1 256 76.5 337.5C48 366 32 404.7 32 445v19H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8V445c0-40.3-16-79-44.5-107.5L225.9 256l81.5-81.5C336 146 352 107.3 352 67V48h8c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM192 289.9l81.5 81.5C293 391 304 417.4 304 445v19H80V445c0-27.6 11-54 30.5-73.5L192 289.9zm0-67.9l-81.5-81.5C91 121 80 94.6 80 67V48H304V67c0 27.6-11 54-30.5 73.5L192 222.1z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hourglass-end\": {\n    \"aliases\": {\n      \"names\": [\"hourglass-3\"],\n      \"unicodes\": {\n        \"composite\": [\"231b\"],\n        \"secondary\": [\"10f253\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"hour\",\n        \"hourglass done\",\n        \"minute\",\n        \"sand\",\n        \"stopwatch\",\n        \"time\",\n        \"timer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f253\",\n    \"label\": \"Hourglass End\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM96 75V64H288V75c0 25.5-10.1 49.9-28.1 67.9L192 210.7l-67.9-67.9C106.1 124.9 96 100.4 96 75z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM96 75V64H288V75c0 25.5-10.1 49.9-28.1 67.9L192 210.7l-67.9-67.9C106.1 124.9 96 100.4 96 75z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"hourglass-half\": {\n    \"aliases\": {\n      \"names\": [\"hourglass-2\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f252\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hour\", \"minute\", \"sand\", \"stopwatch\", \"time\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f252\",\n    \"label\": \"Hourglass Half\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM96 75V64H288V75c0 19-5.6 37.4-16 53H112c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9L192 301.3l67.9 67.9c4.6 4.6 8.6 9.6 12.1 14.9H112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM96 75V64H288V75c0 19-5.6 37.4-16 53H112c-10.3-15.6-16-34-16-53zm16 309c3.5-5.3 7.6-10.3 12.1-14.9L192 301.3l67.9 67.9c4.6 4.6 8.6 9.6 12.1 14.9H112z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 24C0 10.7 10.7 0 24 0H360c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8V67c0 40.3-16 79-44.5 107.5L225.9 256l81.5 81.5C336 366 352 404.7 352 445v19h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V445c0-40.3 16-79 44.5-107.5L158.1 256 76.5 174.5C48 146 32 107.3 32 67V48H24C10.7 48 0 37.3 0 24zM110.5 371.5c-3.9 3.9-7.5 8.1-10.7 12.5H284.2c-3.2-4.4-6.8-8.6-10.7-12.5L192 289.9l-81.5 81.5zM284.2 128C297 110.4 304 89 304 67V48H80V67c0 22.1 7 43.4 19.8 61H284.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 24C0 10.7 10.7 0 24 0H360c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8V67c0 40.3-16 79-44.5 107.5L225.9 256l81.5 81.5C336 366 352 404.7 352 445v19h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V445c0-40.3 16-79 44.5-107.5L158.1 256 76.5 174.5C48 146 32 107.3 32 67V48H24C10.7 48 0 37.3 0 24zM110.5 371.5c-3.9 3.9-7.5 8.1-10.7 12.5H284.2c-3.2-4.4-6.8-8.6-10.7-12.5L192 289.9l-81.5 81.5zM284.2 128C297 110.4 304 89 304 67V48H80V67c0 22.1 7 43.4 19.8 61H284.2z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"hourglass-start\": {\n    \"aliases\": {\n      \"names\": [\"hourglass-1\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f251\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hour\", \"minute\", \"sand\", \"stopwatch\", \"time\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f251\",\n    \"label\": \"Hourglass Start\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM288 437v11H96V437c0-25.5 10.1-49.9 28.1-67.9L192 301.3l67.9 67.9c18 18 28.1 42.4 28.1 67.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 0C14.3 0 0 14.3 0 32S14.3 64 32 64V75c0 42.4 16.9 83.1 46.9 113.1L146.7 256 78.9 323.9C48.9 353.9 32 394.6 32 437v11c-17.7 0-32 14.3-32 32s14.3 32 32 32H64 320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V437c0-42.4-16.9-83.1-46.9-113.1L237.3 256l67.9-67.9c30-30 46.9-70.7 46.9-113.1V64c17.7 0 32-14.3 32-32s-14.3-32-32-32H320 64 32zM288 437v11H96V437c0-25.5 10.1-49.9 28.1-67.9L192 301.3l67.9 67.9c18 18 28.1 42.4 28.1 67.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house\": {\n    \"aliases\": {\n      \"names\": [\"home\", \"home-alt\", \"home-lg-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3e0\", \"f80a\", \"f80c\"],\n        \"primary\": [\"f80a\", \"f80c\"],\n        \"secondary\": [\"10f015\", \"10f80a\", \"10f80c\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abode\", \"building\", \"home\", \"house\", \"main\", \"residence\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f015\",\n    \"label\": \"House\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c0 2.7-.2 5.4-.5 8.1V472c0 22.1-17.9 40-40 40H456c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1H416 392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c0 2.7-.2 5.4-.5 8.1V472c0 22.1-17.9 40-40 40H456c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1H416 392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-chimney\": {\n    \"aliases\": {\n      \"names\": [\"home-lg\"],\n      \"unicodes\": {\n        \"composite\": [\"f80b\"],\n        \"primary\": [\"f80b\"],\n        \"secondary\": [\"10f80b\"]\n      }\n    },\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"abode\",\n        \"building\",\n        \"chimney\",\n        \"house\",\n        \"main\",\n        \"residence\",\n        \"smokestack\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e3af\",\n    \"label\": \"House Chimney\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185V64c0-17.7-14.3-32-32-32H448c-17.7 0-32 14.3-32 32v36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32v64 24c0 22.1 17.9 40 40 40h24 32.5c1.4 0 2.8 0 4.2-.1c1.1 .1 2.2 .1 3.3 .1h16c22.1 0 40-17.9 40-40V455.8c.3-2.6 .5-5.3 .5-8.1l-.7-160.2h32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185V64c0-17.7-14.3-32-32-32H448c-17.7 0-32 14.3-32 32v36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32v64 24c0 22.1 17.9 40 40 40h24 32.5c1.4 0 2.8 0 4.2-.1c1.1 .1 2.2 .1 3.3 .1h16c22.1 0 40-17.9 40-40V455.8c.3-2.6 .5-5.3 .5-8.1l-.7-160.2h32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-chimney-crack\": {\n    \"aliases\": {\n      \"names\": [\"house-damage\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f6f1\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"devastation\",\n        \"disaster\",\n        \"earthquake\",\n        \"home\",\n        \"insurance\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6f1\",\n    \"label\": \"House Chimney Crack\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H326.4L288 448l80.8-67.3c7.8-6.5 7.6-18.6-.4-24.9L250.6 263.2c-14.6-11.5-33.8 7-22.8 22L288 368l-85.5 71.2c-6.1 5-7.5 13.8-3.5 20.5L230.4 512H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7V64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V185l52.8 46.4c8 7 12 15 11 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H326.4L288 448l80.8-67.3c7.8-6.5 7.6-18.6-.4-24.9L250.6 263.2c-14.6-11.5-33.8 7-22.8 22L288 368l-85.5 71.2c-6.1 5-7.5 13.8-3.5 20.5L230.4 512H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7V64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V185l52.8 46.4c8 7 12 15 11 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-chimney-medical\": {\n    \"aliases\": {\n      \"names\": [\"clinic-medical\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7f2\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"doctor\",\n        \"general practitioner\",\n        \"hospital\",\n        \"infirmary\",\n        \"medicine\",\n        \"office\",\n        \"outpatient\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7f2\",\n    \"label\": \"House Chimney Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7V64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V185l52.8 46.4c8 7 12 15 11 24zM272 192c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h48c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H320V208c0-8.8-7.2-16-16-16H272z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7V64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V185l52.8 46.4c8 7 12 15 11 24zM272 192c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h48c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H320V208c0-8.8-7.2-16-16-16H272z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-chimney-user\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e065\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"covid-19\", \"home\", \"isolation\", \"quarantine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e065\",\n    \"label\": \"House Chimney User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185V64c0-17.7-14.3-32-32-32H448c-17.7 0-32 14.3-32 32v36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32V448c0 35.3 28.7 64 64 64H448.5c35.5 0 64.2-28.8 64-64.3l-.7-160.2h32zM288 160a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM176 400c0-44.2 35.8-80 80-80h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H192c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L512 185V64c0-17.7-14.3-32-32-32H448c-17.7 0-32 14.3-32 32v36.7L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32V448c0 35.3 28.7 64 64 64H448.5c35.5 0 64.2-28.8 64-64.3l-.7-160.2h32zM288 160a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM176 400c0-44.2 35.8-80 80-80h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H192c-8.8 0-16-7.2-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-chimney-window\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e00d\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abode\", \"building\", \"family\", \"home\", \"residence\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e00d\",\n    \"label\": \"House Chimney Window\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7V64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V185l52.8 46.4c8 7 12 15 11 24zM248 192c-13.3 0-24 10.7-24 24v80c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V216c0-13.3-10.7-24-24-24H248z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L416 100.7V64c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V185l52.8 46.4c8 7 12 15 11 24zM248 192c-13.3 0-24 10.7-24 24v80c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V216c0-13.3-10.7-24-24-24H248z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abode\", \"home\", \"house\", \"not affected\", \"ok\", \"okay\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e509\",\n    \"label\": \"House Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64l.7 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64l.7 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abode\", \"affected\", \"home\", \"house\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e50a\",\n    \"label\": \"House Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64l.7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64l.7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abode\", \"destroy\", \"home\", \"house\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e50b\",\n    \"label\": \"House Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64l.7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320.7 352c8.1-89.7 83.5-160 175.3-160c8.9 0 17.6 .7 26.1 1.9L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32v69.7c-.1 .9-.1 1.8-.1 2.8V472c0 22.1 17.9 40 40 40h16c1.2 0 2.4-.1 3.6-.2c1.5 .1 3 .2 4.5 .2H160h24c22.1 0 40-17.9 40-40V448 384c0-17.7 14.3-32 32-32h64l.7 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-crack\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"devastation\",\n        \"disaster\",\n        \"earthquake\",\n        \"home\",\n        \"insurance\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e3b1\",\n    \"label\": \"House Crack\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32V448c0 35.3 28.7 64 64 64H230.4l-31.3-52.2c-4.1-6.8-2.6-15.5 3.5-20.5L288 368l-60.2-82.8c-10.9-15 8.2-33.5 22.8-22l117.9 92.6c8 6.3 8.2 18.4 .4 24.9L288 448l38.4 64H448.5c35.5 0 64.2-28.8 64-64.3l-.7-160.2h32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32V448c0 35.3 28.7 64 64 64H230.4l-31.3-52.2c-4.1-6.8-2.6-15.5 3.5-20.5L288 368l-60.2-82.8c-10.9-15 8.2-33.5 22.8-22l117.9 92.6c8 6.3 8.2 18.4 .4 24.9L288 448l38.4 64H448.5c35.5 0 64.2-28.8 64-64.3l-.7-160.2h32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-fire\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"burn\", \"emergency\", \"home\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e50c\",\n    \"label\": \"House Fire\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M288 350.1l0 1.9H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L447.3 128.1c-12.3-1-25 3-34.8 11.7c-35.4 31.6-65.6 67.7-87.3 102.8C304.3 276.5 288 314.9 288 350.1zM453.5 163.8c19.7 17.8 38.2 37 55.5 57.7c7.9-9.9 16.8-20.7 26.5-29.5c5.6-5.1 14.4-5.1 20 0c24.7 22.7 45.6 52.7 60.4 81.1c14.5 28 24.2 58.8 24.2 79C640 440 568.7 512 480 512c-89.7 0-160-72.1-160-159.8c0-26.4 12.7-60.7 32.4-92.6c20-32.4 48.1-66.1 81.4-95.8c2.8-2.5 6.4-3.8 10-3.7c3.5 0 7 1.3 9.8 3.8zM530 433c30-21 38-63 20-96c-2-4-4-8-7-12l-36 42s-58-74-62-79c-30 37-45 58-45 82c0 49 36 78 81 78c18 0 34-5 49-15z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M288 350.1l0 1.9H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L447.3 128.1c-12.3-1-25 3-34.8 11.7c-35.4 31.6-65.6 67.7-87.3 102.8C304.3 276.5 288 314.9 288 350.1zM453.5 163.8c19.7 17.8 38.2 37 55.5 57.7c7.9-9.9 16.8-20.7 26.5-29.5c5.6-5.1 14.4-5.1 20 0c24.7 22.7 45.6 52.7 60.4 81.1c14.5 28 24.2 58.8 24.2 79C640 440 568.7 512 480 512c-89.7 0-160-72.1-160-159.8c0-26.4 12.7-60.7 32.4-92.6c20-32.4 48.1-66.1 81.4-95.8c2.8-2.5 6.4-3.8 10-3.7c3.5 0 7 1.3 9.8 3.8zM530 433c30-21 38-63 20-96c-2-4-4-8-7-12l-36 42s-58-74-62-79c-30 37-45 58-45 82c0 49 36 78 81 78c18 0 34-5 49-15z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-flag\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"camp\", \"home\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e50d\",\n    \"label\": \"House Flag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M480 0c-17.7 0-32 14.3-32 32V192 512h64V192H624c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H512c0-17.7-14.3-32-32-32zM416 159L276.8 39.7c-12-10.3-29.7-10.3-41.7 0l-224 192C1 240.4-2.7 254.5 2 267.1S18.6 288 32 288H64V480c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32v96c0 17.7 14.3 32 32 32h64.7l.2 0h-1V159z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M480 0c-17.7 0-32 14.3-32 32V192 512h64V192H624c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H512c0-17.7-14.3-32-32-32zM416 159L276.8 39.7c-12-10.3-29.7-10.3-41.7 0l-224 192C1 240.4-2.7 254.5 2 267.1S18.6 288 32 288H64V480c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32v96c0 17.7 14.3 32 32 32h64.7l.2 0h-1V159z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-flood-water\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"damage\", \"flood\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e50e\",\n    \"label\": \"House Flood Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M306.8 6.1C295.6-2 280.4-2 269.2 6.1l-176 128c-11.2 8.2-15.9 22.6-11.6 35.8S98.1 192 112 192h16v73c1.7 1 3.3 2 4.9 3.1c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c1.5-1 3-2 4.5-2.9l-.3-73.2H464c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128zM269.5 309.9C247 325.4 219.5 336 192 336c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 389.7 159 400 192 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7l0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M306.8 6.1C295.6-2 280.4-2 269.2 6.1l-176 128c-11.2 8.2-15.9 22.6-11.6 35.8S98.1 192 112 192h16v73c1.7 1 3.3 2 4.9 3.1c18 12.4 40.1 20.3 59.2 20.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c1.5-1 3-2 4.5-2.9l-.3-73.2H464c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128zM269.5 309.9C247 325.4 219.5 336 192 336c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 389.7 159 400 192 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7l0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-flood-water-circle-arrow-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"damage\", \"flood\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e50f\",\n    \"label\": \"House Flood Water Circle Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M288 144A144 144 0 1 0 0 144a144 144 0 1 0 288 0zM140.7 76.7c6.2-6.2 16.4-6.2 22.6 0l56 56c6.2 6.2 6.2 16.4 0 22.6l-56 56c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L169.4 160H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h89.4L140.7 99.3c-6.2-6.2-6.2-16.4 0-22.6zM320 144c0 57.3-27.4 108.2-69.8 140.3c11.8-3.6 23-9.4 33-16.2c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c2.1 1.7 4.2 3.3 6.5 4.9l-.3-84.4H576c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128C407.6-2 392.4-2 381.2 6.1L301 64.4c12.1 23.9 19 50.9 19 79.6zm18.5 165.9c-11.1-7.9-25.9-7.9-37 0C279 325.4 251.5 336 224 336c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 389.7 191 400 224 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7l0 0C471.4 325.2 442.9 336 416 336c-27.5 0-55-10.6-77.5-26.1zm0 112c-11.1-7.9-25.9-7.9-37 0C279 437.4 251.5 448 224 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 501.7 191 512 224 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C471.4 437.2 442.9 448 416 448c-27.5 0-55-10.6-77.5-26.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M288 144A144 144 0 1 0 0 144a144 144 0 1 0 288 0zM140.7 76.7c6.2-6.2 16.4-6.2 22.6 0l56 56c6.2 6.2 6.2 16.4 0 22.6l-56 56c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L169.4 160H80c-8.8 0-16-7.2-16-16s7.2-16 16-16h89.4L140.7 99.3c-6.2-6.2-6.2-16.4 0-22.6zM320 144c0 57.3-27.4 108.2-69.8 140.3c11.8-3.6 23-9.4 33-16.2c22.1-15.5 51.6-15.5 73.7 0c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.4 78.1 3.4c2.1 1.7 4.2 3.3 6.5 4.9l-.3-84.4H576c13.9 0 26.1-8.9 30.4-22.1s-.4-27.6-11.6-35.8l-176-128C407.6-2 392.4-2 381.2 6.1L301 64.4c12.1 23.9 19 50.9 19 79.6zm18.5 165.9c-11.1-7.9-25.9-7.9-37 0C279 325.4 251.5 336 224 336c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 389.7 191 400 224 400c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7l0 0C471.4 325.2 442.9 336 416 336c-27.5 0-55-10.6-77.5-26.1zm0 112c-11.1-7.9-25.9-7.9-37 0C279 437.4 251.5 448 224 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C158.5 501.7 191 512 224 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.6 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C471.4 437.2 442.9 448 416 448c-27.5 0-55-10.6-77.5-26.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-laptop\": {\n    \"aliases\": {\n      \"names\": [\"laptop-house\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e066\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"computer\",\n        \"covid-19\",\n        \"device\",\n        \"office\",\n        \"remote\",\n        \"work from home\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e066\",\n    \"label\": \"House Laptop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M218.3 8.5c12.3-11.3 31.2-11.3 43.4 0l208 192c6.7 6.2 10.3 14.8 10.3 23.5H336c-19.1 0-36.3 8.4-48 21.7V208c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64V416H112c-26.5 0-48-21.5-48-48V256H32c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8.1-35.2l208-192zM352 304V448H544V304H352zm-48-16c0-17.7 14.3-32 32-32H560c17.7 0 32 14.3 32 32V448h32c8.8 0 16 7.2 16 16c0 26.5-21.5 48-48 48H544 352 304c-26.5 0-48-21.5-48-48c0-8.8 7.2-16 16-16h32V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M218.3 8.5c12.3-11.3 31.2-11.3 43.4 0l208 192c6.7 6.2 10.3 14.8 10.3 23.5H336c-19.1 0-36.3 8.4-48 21.7V208c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h64V416H112c-26.5 0-48-21.5-48-48V256H32c-13.2 0-25-8.1-29.8-20.3s-1.6-26.2 8.1-35.2l208-192zM352 304V448H544V304H352zm-48-16c0-17.7 14.3-32 32-32H560c17.7 0 32 14.3 32 32V448h32c8.8 0 16 7.2 16 16c0 26.5-21.5 48-48 48H544 352 304c-26.5 0-48-21.5-48-48c0-8.8 7.2-16 16-16h32V288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"closed\", \"home\", \"house\", \"lockdown\", \"quarantine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e510\",\n    \"label\": \"House Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M384 480c0 11.7 3.1 22.6 8.6 32H392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L490.7 166.3C447.2 181.7 416 223.2 416 272v24.6c-19.1 11.1-32 31.7-32 55.4V480zM528 240c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M384 480c0 11.7 3.1 22.6 8.6 32H392c-22.1 0-40-17.9-40-40V448 384c0-17.7-14.3-32-32-32H256c-17.7 0-32 14.3-32 32v64 24c0 22.1-17.9 40-40 40H160 128.1c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2H104c-22.1 0-40-17.9-40-40V360c0-.9 0-1.9 .1-2.8V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L490.7 166.3C447.2 181.7 416 223.2 416 272v24.6c-19.1 11.1-32 31.7-32 55.4V480zM528 240c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-medical\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"doctor\",\n        \"facility\",\n        \"general practitioner\",\n        \"health\",\n        \"hospital\",\n        \"infirmary\",\n        \"medicine\",\n        \"office\",\n        \"outpatient\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e3b2\",\n    \"label\": \"House Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32V448c0 35.3 28.7 64 64 64H448.5c35.5 0 64.2-28.8 64-64.3l-.7-160.2h32zM256 208c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V320H208c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h48V208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M543.8 287.6c17 0 32-14 32-32.1c1-9-3-17-11-24L309.5 7c-6-5-14-7-21-7s-15 1-22 8L10 231.5c-7 7-10 15-10 24c0 18 14 32.1 32 32.1h32V448c0 35.3 28.7 64 64 64H448.5c35.5 0 64.2-28.8 64-64.3l-.7-160.2h32zM256 208c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V320H208c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h48V208z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-medical-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clinic\", \"hospital\", \"not affected\", \"ok\", \"okay\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e511\",\n    \"label\": \"House Medical Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 368c0 59.5 29.5 112.1 74.8 144H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64H320V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm32 0a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 368c0 59.5 29.5 112.1 74.8 144H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64H320V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm32 0a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-medical-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"clinic\", \"hospital\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e512\",\n    \"label\": \"House Medical Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 368c0 59.5 29.5 112.1 74.8 144H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64H320V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 368c0 59.5 29.5 112.1 74.8 144H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64H320V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-medical-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clinic\", \"destroy\", \"hospital\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e513\",\n    \"label\": \"House Medical Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 368c0 59.5 29.5 112.1 74.8 144H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64H320V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 368c0 59.5 29.5 112.1 74.8 144H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L522.1 193.9c-8.5-1.3-17.3-1.9-26.1-1.9c-54.7 0-103.5 24.9-135.8 64H320V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-medical-flag\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clinic\", \"hospital\", \"mash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e514\",\n    \"label\": \"House Medical Flag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M480 0c17.7 0 32 14.3 32 32H624c8.8 0 16 7.2 16 16V176c0 8.8-7.2 16-16 16H512V512H448V192 32c0-17.7 14.3-32 32-32zM276.8 39.7L416 159V512h1l-.2 0H96c-17.7 0-32-14.3-32-32V288H32c-13.4 0-25.4-8.3-30-20.9s-1-26.7 9.2-35.4l224-192c12-10.3 29.7-10.3 41.7 0zM224 208v48H176c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h48c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H288V208c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M480 0c17.7 0 32 14.3 32 32H624c8.8 0 16 7.2 16 16V176c0 8.8-7.2 16-16 16H512V512H448V192 32c0-17.7 14.3-32 32-32zM276.8 39.7L416 159V512h1l-.2 0H96c-17.7 0-32-14.3-32-32V288H32c-13.4 0-25.4-8.3-30-20.9s-1-26.7 9.2-35.4l224-192c12-10.3 29.7-10.3 41.7 0zM224 208v48H176c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h48c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H288V208c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-signal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e012\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"abode\",\n        \"building\",\n        \"connect\",\n        \"family\",\n        \"home\",\n        \"residence\",\n        \"smart home\",\n        \"wifi\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e012\",\n    \"label\": \"House Signal\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M357.7 8.5c-12.3-11.3-31.2-11.3-43.4 0l-208 192c-9.4 8.6-12.7 22-8.5 34c87.1 25.3 155.6 94.2 180.3 181.6H464c26.5 0 48-21.5 48-48V256h32c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8.1-35.2l-208-192zM288 208c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H304c-8.8 0-16-7.2-16-16V208zM24 256c-13.3 0-24 10.7-24 24s10.7 24 24 24c101.6 0 184 82.4 184 184c0 13.3 10.7 24 24 24s24-10.7 24-24c0-128.1-103.9-232-232-232zm8 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM0 376c0 13.3 10.7 24 24 24c48.6 0 88 39.4 88 88c0 13.3 10.7 24 24 24s24-10.7 24-24c0-75.1-60.9-136-136-136c-13.3 0-24 10.7-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M357.7 8.5c-12.3-11.3-31.2-11.3-43.4 0l-208 192c-9.4 8.6-12.7 22-8.5 34c87.1 25.3 155.6 94.2 180.3 181.6H464c26.5 0 48-21.5 48-48V256h32c13.2 0 25-8.1 29.8-20.3s1.6-26.2-8.1-35.2l-208-192zM288 208c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H304c-8.8 0-16-7.2-16-16V208zM24 256c-13.3 0-24 10.7-24 24s10.7 24 24 24c101.6 0 184 82.4 184 184c0 13.3 10.7 24 24 24s24-10.7 24-24c0-128.1-103.9-232-232-232zm8 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM0 376c0 13.3 10.7 24 24 24c48.6 0 88 39.4 88 88c0 13.3 10.7 24 24 24s24-10.7 24-24c0-75.1-60.9-136-136-136c-13.3 0-24 10.7-24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-tsunami\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"damage\", \"flood\", \"tidal wave\", \"wave\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e515\",\n    \"label\": \"House Tsunami\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M80.8 136.5C104.9 93.8 152.6 64 209 64c16.9 0 33.1 2.7 48.2 7.7c16.8 5.5 34.9-3.6 40.4-20.4s-3.6-34.9-20.4-40.4C255.8 3.8 232.8 0 209 0C95.2 0 0 88 0 200c0 91.6 53.5 172.1 142.2 194.1c13.4 3.8 27.5 5.9 42.2 5.9c.7 0 1.4 0 2.1-.1c1.8 0 3.7 .1 5.5 .1l0 0c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7l0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0c-22.4 15.5-49.9 26.1-77.4 26.1c0 0-.1 0-.1 0c-12.4 0-24-1.5-34.9-4.3C121.6 320.2 96 287 96 248c0-48.5 39.5-88 88.4-88c13.5 0 26.1 3 37.5 8.3c16 7.5 35.1 .6 42.5-15.5s.6-35.1-15.5-42.5C229.3 101.1 207.4 96 184.4 96c-40 0-76.4 15.4-103.6 40.5zm252-18.1c-8.1 6-12.8 15.5-12.8 25.6V265c1.6 1 3.3 2 4.8 3.1c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c5.8 1.4 11.2 3.4 16.2 6.2c.7-2.7 1.1-5.5 1.1-8.4l-.4-144c0-10-4.7-19.4-12.7-25.5l-95.5-72c-11.4-8.6-27.1-8.6-38.5 0l-96 72zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M80.8 136.5C104.9 93.8 152.6 64 209 64c16.9 0 33.1 2.7 48.2 7.7c16.8 5.5 34.9-3.6 40.4-20.4s-3.6-34.9-20.4-40.4C255.8 3.8 232.8 0 209 0C95.2 0 0 88 0 200c0 91.6 53.5 172.1 142.2 194.1c13.4 3.8 27.5 5.9 42.2 5.9c.7 0 1.4 0 2.1-.1c1.8 0 3.7 .1 5.5 .1l0 0c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.5-27.3-10.1-39.2-1.7l0 0C439.4 325.2 410.9 336 384 336c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0c-22.4 15.5-49.9 26.1-77.4 26.1c0 0-.1 0-.1 0c-12.4 0-24-1.5-34.9-4.3C121.6 320.2 96 287 96 248c0-48.5 39.5-88 88.4-88c13.5 0 26.1 3 37.5 8.3c16 7.5 35.1 .6 42.5-15.5s.6-35.1-15.5-42.5C229.3 101.1 207.4 96 184.4 96c-40 0-76.4 15.4-103.6 40.5zm252-18.1c-8.1 6-12.8 15.5-12.8 25.6V265c1.6 1 3.3 2 4.8 3.1c18.4 12.7 39.6 20.3 59.2 20.3c19 0 41.2-7.9 59.2-20.3c23.8-16.7 55.8-15.3 78.1 3.4c10.6 8.8 24.2 15.6 37.3 18.6c5.8 1.4 11.2 3.4 16.2 6.2c.7-2.7 1.1-5.5 1.1-8.4l-.4-144c0-10-4.7-19.4-12.7-25.5l-95.5-72c-11.4-8.6-27.1-8.6-38.5 0l-96 72zM384 448c-27.5 0-55-10.6-77.5-26.1c-11.1-7.9-25.9-7.9-37 0C247 437.4 219.5 448 192 448c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 501.7 159 512 192 512c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 437.2 410.9 448 384 448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"house-user\": {\n    \"aliases\": {\n      \"names\": [\"home-user\"]\n    },\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"house\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1b0\",\n    \"label\": \"House User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24zM352 224a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm-96 96c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80H256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M575.8 255.5c0 18-15 32.1-32 32.1h-32l.7 160.2c.2 35.5-28.5 64.3-64 64.3H128.1c-35.3 0-64-28.7-64-64V287.6H32c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24zM352 224a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm-96 96c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80H256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"houzz\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"5.0.9\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f27c\",\n    \"label\": \"Houzz\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M275.9 330.7H171.3V480H17V32h109.5v104.5l305.1 85.6V480H275.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hryvnia-sign\": {\n    \"aliases\": {\n      \"names\": [\"hryvnia\"],\n      \"unicodes\": {\n        \"composite\": [\"20b4\"],\n        \"secondary\": [\"10f6f2\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Hryvnia Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6f2\",\n    \"label\": \"Hryvnia Sign\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M121.9 116.2C138.3 103.1 158.7 96 179.6 96H223c27.1 0 49 21.9 49 49c0 11.5-4 22.4-11.1 31H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H155.5l-50.6 28.9c-1.7 1-3.4 2-5.1 3.1H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H52.3c-2.8 9.9-4.3 20.4-4.3 31c0 62.4 50.6 113 113 113h43.4c35.5 0 70-12.1 97.7-34.3L308 441c13.8-11 16-31.2 5-45s-31.2-16-45-5l-5.9 4.7c-16.4 13.1-36.7 20.2-57.7 20.2H161c-27.1 0-49-21.9-49-49c0-11.5 4-22.4 11.1-31H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H228.5l50.6-28.9c1.7-1 3.4-2 5.1-3.1H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H331.7c2.8-10 4.3-20.4 4.3-31c0-62.4-50.6-113-113-113H179.6c-35.5 0-70 12.1-97.7 34.3L76 71c-13.8 11-16 31.2-5 45s31.2 16 45 5l5.9-4.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M121.9 116.2C138.3 103.1 158.7 96 179.6 96H223c27.1 0 49 21.9 49 49c0 11.5-4 22.4-11.1 31H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H155.5l-50.6 28.9c-1.7 1-3.4 2-5.1 3.1H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H52.3c-2.8 9.9-4.3 20.4-4.3 31c0 62.4 50.6 113 113 113h43.4c35.5 0 70-12.1 97.7-34.3L308 441c13.8-11 16-31.2 5-45s-31.2-16-45-5l-5.9 4.7c-16.4 13.1-36.7 20.2-57.7 20.2H161c-27.1 0-49-21.9-49-49c0-11.5 4-22.4 11.1-31H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H228.5l50.6-28.9c1.7-1 3.4-2 5.1-3.1H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H331.7c2.8-10 4.3-20.4 4.3-31c0-62.4-50.6-113-113-113H179.6c-35.5 0-70 12.1-97.7 34.3L76 71c-13.8 11-16 31.2-5 45s31.2 16 45 5l5.9-4.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"html5\": {\n    \"changes\": [\"3.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f13b\",\n    \"label\": \"HTML 5 Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hubspot\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b2\",\n    \"label\": \"HubSpot\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"hurricane\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f751\"]\n      }\n    },\n    \"changes\": [\n      \"5.5.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"coriolis effect\",\n        \"eye\",\n        \"storm\",\n        \"tropical cyclone\",\n        \"typhoon\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f751\",\n    \"label\": \"Hurricane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 208C0 104.4 75.7 18.5 174.9 2.6C184 1.2 192 8.6 192 17.9V81.2c0 8.4 6.5 15.3 14.7 16.5C307 112.5 384 199 384 303.4c0 103.6-75.7 189.5-174.9 205.4c-9.2 1.5-17.1-5.9-17.1-15.2V430.2c0-8.4-6.5-15.3-14.7-16.5C77 398.9 0 312.4 0 208zm288 48A96 96 0 1 0 96 256a96 96 0 1 0 192 0zm-96-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 208C0 104.4 75.7 18.5 174.9 2.6C184 1.2 192 8.6 192 17.9V81.2c0 8.4 6.5 15.3 14.7 16.5C307 112.5 384 199 384 303.4c0 103.6-75.7 189.5-174.9 205.4c-9.2 1.5-17.1-5.9-17.1-15.2V430.2c0-8.4-6.5-15.3-14.7-16.5C77 398.9 0 312.4 0 208zm288 48A96 96 0 1 0 96 256a96 96 0 1 0 192 0zm-96-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"i\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"69\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter I\", \"Latin Small Letter I\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"49\",\n    \"label\": \"I\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96h96V416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H192V96h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H160 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96h96V416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H192V96h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H160 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"i-cursor\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f246\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"editing\", \"i-beam\", \"type\", \"writing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f246\",\n    \"label\": \"I Cursor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3V224H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H96v95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7s16.9 30.7 34.5 29.2l8-.7c34.1-2.8 64.2-18.9 85.4-42.9c21.2 24 51.2 40.1 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7V288h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H160V128.3c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7C179.2 3.6 149.2 19.7 128 43.7c-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M.1 29.3C-1.4 47 11.7 62.4 29.3 63.9l8 .7C70.5 67.3 96 95 96 128.3V224H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H96v95.7c0 33.3-25.5 61-58.7 63.8l-8 .7C11.7 449.6-1.4 465 .1 482.7s16.9 30.7 34.5 29.2l8-.7c34.1-2.8 64.2-18.9 85.4-42.9c21.2 24 51.2 40.1 85.4 42.9l8 .7c17.6 1.5 33.1-11.6 34.5-29.2s-11.6-33.1-29.2-34.5l-8-.7C185.5 444.7 160 417 160 383.7V288h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H160V128.3c0-33.3 25.5-61 58.7-63.8l8-.7c17.6-1.5 30.7-16.9 29.2-34.5S239-1.4 221.3 .1l-8 .7C179.2 3.6 149.2 19.7 128 43.7c-21.2-24-51.2-40-85.4-42.9l-8-.7C17-1.4 1.6 11.7 .1 29.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ice-cream\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f368\"],\n        \"secondary\": [\"10f810\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"chocolate\",\n        \"cone\",\n        \"cream\",\n        \"dessert\",\n        \"frozen\",\n        \"ice\",\n        \"ice cream\",\n        \"scoop\",\n        \"sorbet\",\n        \"sweet\",\n        \"vanilla\",\n        \"yogurt\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f810\",\n    \"label\": \"Ice Cream\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M367.1 160c.6-5.3 .9-10.6 .9-16C368 64.5 303.5 0 224 0S80 64.5 80 144c0 5.4 .3 10.7 .9 16H80c-26.5 0-48 21.5-48 48s21.5 48 48 48h53.5 181H368c26.5 0 48-21.5 48-48s-21.5-48-48-48h-.9zM96 288L200.8 497.7c4.4 8.8 13.3 14.3 23.2 14.3s18.8-5.5 23.2-14.3L352 288H96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M367.1 160c.6-5.3 .9-10.6 .9-16C368 64.5 303.5 0 224 0S80 64.5 80 144c0 5.4 .3 10.7 .9 16H80c-26.5 0-48 21.5-48 48s21.5 48 48 48h53.5 181H368c26.5 0 48-21.5 48-48s-21.5-48-48-48h-.9zM96 288L200.8 497.7c4.4 8.8 13.3 14.3 23.2 14.3s18.8-5.5 23.2-14.3L352 288H96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"icicles\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7ad\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cold\", \"frozen\", \"hanging\", \"ice\", \"seasonal\", \"sharp\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ad\",\n    \"label\": \"Icicles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M75.8 304.8L1 35.7c-.7-2.5-1-5-1-7.5C0 12.6 12.6 0 28.2 0H482.4C498.8 0 512 13.2 512 29.6c0 1.6-.1 3.3-.4 4.9L434.6 496.1c-1.5 9.2-9.5 15.9-18.8 15.9c-9.2 0-17.1-6.6-18.7-15.6L336 160 307.2 303.9c-1.9 9.3-10.1 16.1-19.6 16.1c-9.2 0-17.2-6.2-19.4-15.1L240 192 210.6 368.2c-1.5 9.1-9.4 15.8-18.6 15.8s-17.1-6.7-18.6-15.8L144 192 115.9 304.3c-2.3 9.2-10.6 15.7-20.1 15.7c-9.3 0-17.5-6.2-20-15.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M75.8 304.8L1 35.7c-.7-2.5-1-5-1-7.5C0 12.6 12.6 0 28.2 0H482.4C498.8 0 512 13.2 512 29.6c0 1.6-.1 3.3-.4 4.9L434.6 496.1c-1.5 9.2-9.5 15.9-18.8 15.9c-9.2 0-17.1-6.6-18.7-15.6L336 160 307.2 303.9c-1.9 9.3-10.1 16.1-19.6 16.1c-9.2 0-17.2-6.2-19.4-15.1L240 192 210.6 368.2c-1.5 9.1-9.4 15.8-18.6 15.8s-17.1-6.7-18.6-15.8L144 192 115.9 304.3c-2.3 9.2-10.6 15.7-20.1 15.7c-9.3 0-17.5-6.2-20-15.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"icons\": {\n    \"aliases\": {\n      \"names\": [\"heart-music-camera-bolt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f86d\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bolt\", \"emoji\", \"heart\", \"image\", \"music\", \"photo\", \"symbols\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f86d\",\n    \"label\": \"Icons\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M500.3 7.3C507.7 13.3 512 22.4 512 32V176c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48V71L352 90.2V208c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48V64c0-15.3 10.8-28.4 25.7-31.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM74.7 304l11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2h61.7c10.7 0 20.7 5.3 26.6 14.2L213.3 304H240c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V352c0-26.5 21.5-48 48-48H74.7zM192 408a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM478.7 278.3L440.3 368H496c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.2-12.4-5.3-19.2L391.7 400H336c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112c5.6-4.9 13.9-5.3 19.9-.9s8.2 12.4 5.3 19.2zm-339-59.2c-6.5 6.5-17 6.5-23 0L19.9 119.2c-28-29-26.5-76.9 5-103.9c27-23.5 68.4-19 93.4 6.5l10 10.5 9.5-10.5c25-25.5 65.9-30 93.9-6.5c31 27 32.5 74.9 4.5 103.9l-96.4 99.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M500.3 7.3C507.7 13.3 512 22.4 512 32V176c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48V71L352 90.2V208c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48V64c0-15.3 10.8-28.4 25.7-31.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM74.7 304l11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2h61.7c10.7 0 20.7 5.3 26.6 14.2L213.3 304H240c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V352c0-26.5 21.5-48 48-48H74.7zM192 408a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM478.7 278.3L440.3 368H496c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.2-12.4-5.3-19.2L391.7 400H336c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112c5.6-4.9 13.9-5.3 19.9-.9s8.2 12.4 5.3 19.2zm-339-59.2c-6.5 6.5-17 6.5-23 0L19.9 119.2c-28-29-26.5-76.9 5-103.9c27-23.5 68.4-19 93.4 6.5l10 10.5 9.5-10.5c25-25.5 65.9-30 93.9-6.5c31 27 32.5 74.9 4.5 103.9l-96.4 99.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"id-badge\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f2c1\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"address\", \"contact\", \"identification\", \"license\", \"profile\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2c1\",\n    \"label\": \"Id Badge\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zm96 320h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM144 64h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zm96 320h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM144 64h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M256 48V64c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H256zM0 64C0 28.7 28.7 0 64 0H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM160 320h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M256 48V64c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H256zM0 64C0 28.7 28.7 0 64 0H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM160 320h64c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-32-96a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"id-card\": {\n    \"aliases\": {\n      \"names\": [\"drivers-license\"],\n      \"unicodes\": {\n        \"composite\": [\"f2c3\"],\n        \"secondary\": [\"10f2c2\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.8.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"contact\",\n        \"demographics\",\n        \"document\",\n        \"identification\",\n        \"issued\",\n        \"profile\",\n        \"registration\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2c2\",\n    \"label\": \"Id Card\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 96l576 0c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96zm0 32V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128H0zM64 405.3c0-29.5 23.9-53.3 53.3-53.3H234.7c29.5 0 53.3 23.9 53.3 53.3c0 5.9-4.8 10.7-10.7 10.7H74.7c-5.9 0-10.7-4.8-10.7-10.7zM176 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm176 16c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 96l576 0c0-35.3-28.7-64-64-64H64C28.7 32 0 60.7 0 96zm0 32V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128H0zM64 405.3c0-29.5 23.9-53.3 53.3-53.3H234.7c29.5 0 53.3 23.9 53.3 53.3c0 5.9-4.8 10.7-10.7 10.7H74.7c-5.9 0-10.7-4.8-10.7-10.7zM176 192a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm176 16c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H368c-8.8 0-16-7.2-16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M528 160V416c0 8.8-7.2 16-16 16H320c0-44.2-35.8-80-80-80H176c-44.2 0-80 35.8-80 80H64c-8.8 0-16-7.2-16-16V160H528zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM272 256a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm104-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M528 160V416c0 8.8-7.2 16-16 16H320c0-44.2-35.8-80-80-80H176c-44.2 0-80 35.8-80 80H64c-8.8 0-16-7.2-16-16V160H528zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM272 256a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zm104-48c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H376z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"id-card-clip\": {\n    \"aliases\": {\n      \"names\": [\"id-card-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f47f\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"contact\",\n        \"demographics\",\n        \"document\",\n        \"identification\",\n        \"issued\",\n        \"profile\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f47f\",\n    \"label\": \"Id Card Clip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M256 0h64c17.7 0 32 14.3 32 32V96c0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32V32c0-17.7 14.3-32 32-32zM64 64H192v48c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48V64H512c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64zM176 437.3c0 5.9 4.8 10.7 10.7 10.7H389.3c5.9 0 10.7-4.8 10.7-10.7c0-29.5-23.9-53.3-53.3-53.3H229.3c-29.5 0-53.3 23.9-53.3 53.3zM288 352a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M256 0h64c17.7 0 32 14.3 32 32V96c0 17.7-14.3 32-32 32H256c-17.7 0-32-14.3-32-32V32c0-17.7 14.3-32 32-32zM64 64H192v48c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48V64H512c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64zM176 437.3c0 5.9 4.8 10.7 10.7 10.7H389.3c5.9 0 10.7-4.8 10.7-10.7c0-29.5-23.9-53.3-53.3-53.3H229.3c-29.5 0-53.3 23.9-53.3 53.3zM288 352a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ideal\": {\n    \"changes\": [\"5.12.0\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e013\",\n    \"label\": \"iDeal\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M125.61,165.48a49.07,49.07,0,1,0,49.06,49.06A49.08,49.08,0,0,0,125.61,165.48ZM86.15,425.84h78.94V285.32H86.15Zm151.46-211.6c0-20-10-22.53-18.74-22.53H204.82V237.5h14.05C228.62,237.5,237.61,234.69,237.61,214.24Zm201.69,46V168.93h22.75V237.5h33.69C486.5,113.08,388.61,86.19,299.67,86.19H204.84V169h14c25.6,0,41.5,17.35,41.5,45.26,0,28.81-15.52,46-41.5,46h-14V425.88h94.83c144.61,0,194.94-67.16,196.72-165.64Zm-109.75,0H273.3V169h54.43v22.73H296v10.58h30V225H296V237.5h33.51Zm74.66,0-5.16-17.67H369.31l-5.18,17.67H340.47L368,168.92h32.35l27.53,91.34ZM299.65,32H32V480H299.65c161.85,0,251-79.73,251-224.52C550.62,172,518,32,299.65,32Zm0,426.92H53.07V53.07H299.65c142.1,0,229.9,64.61,229.9,202.41C529.55,389.57,448.55,458.92,299.65,458.92Zm83.86-264.85L376,219.88H392.4l-7.52-25.81Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"igloo\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7ae\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dome\", \"dwelling\", \"eskimo\", \"home\", \"house\", \"ice\", \"snow\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ae\",\n    \"label\": \"Igloo\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M320 33.8V160H48.5C100.2 82.8 188.1 32 288 32c10.8 0 21.5 .6 32 1.8zM352 160V39.1C424.9 55.7 487.2 99.8 527.5 160H352zM29.9 192H96V320H0c0-46 10.8-89.4 29.9-128zM192 320H128V192H448V320H384v32H576v80c0 26.5-21.5 48-48 48H352V352c0-35.3-28.7-64-64-64s-64 28.7-64 64V480H48c-26.5 0-48-21.5-48-48V352H192V320zm288 0V192h66.1c19.2 38.6 29.9 82 29.9 128H480z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M320 33.8V160H48.5C100.2 82.8 188.1 32 288 32c10.8 0 21.5 .6 32 1.8zM352 160V39.1C424.9 55.7 487.2 99.8 527.5 160H352zM29.9 192H96V320H0c0-46 10.8-89.4 29.9-128zM192 320H128V192H448V320H384v32H576v80c0 26.5-21.5 48-48 48H352V352c0-35.3-28.7-64-64-64s-64 28.7-64 64V480H48c-26.5 0-48-21.5-48-48V352H192V320zm288 0V192h66.1c19.2 38.6 29.9 82 29.9 128H480z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"image\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f03e\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"album\", \"landscape\", \"photo\", \"picture\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f03e\",\n    \"label\": \"Image\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6h96 32H424c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6h96 32H424c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 80c8.8 0 16 7.2 16 16V415.8l-5-6.5-136-176c-4.5-5.9-11.6-9.3-19-9.3s-14.4 3.4-19 9.3L202 340.7l-30.5-42.7C167 291.7 159.8 288 152 288s-15 3.7-19.5 10.1l-80 112L48 416.3l0-.3V96c0-8.8 7.2-16 16-16H448zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 80c8.8 0 16 7.2 16 16V415.8l-5-6.5-136-176c-4.5-5.9-11.6-9.3-19-9.3s-14.4 3.4-19 9.3L202 340.7l-30.5-42.7C167 291.7 159.8 288 152 288s-15 3.7-19.5 10.1l-80 112L48 416.3l0-.3V96c0-8.8 7.2-16 16-16H448zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm80 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"image-portrait\": {\n    \"aliases\": {\n      \"names\": [\"portrait\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3e0\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"5.0.3\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"id\", \"image\", \"photo\", \"picture\", \"selfie\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3e0\",\n    \"label\": \"Image Portrait\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 64c0-35.3-28.7-64-64-64H64C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64l0-384zM128 192a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 356.6c0-37.9 30.7-68.6 68.6-68.6h86.9c37.9 0 68.6 30.7 68.6 68.6c0 15.1-12.3 27.4-27.4 27.4H107.4C92.3 384 80 371.7 80 356.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 64c0-35.3-28.7-64-64-64H64C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64l0-384zM128 192a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM80 356.6c0-37.9 30.7-68.6 68.6-68.6h86.9c37.9 0 68.6 30.7 68.6 68.6c0 15.1-12.3 27.4-27.4 27.4H107.4C92.3 384 80 371.7 80 356.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"images\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f302\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"album\", \"landscape\", \"photo\", \"picture\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f302\",\n    \"label\": \"Images\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M160 32c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H160zM396 138.7l96 144c4.9 7.4 5.4 16.8 1.2 24.6S480.9 320 472 320H328 280 200c-9.2 0-17.6-5.3-21.6-13.6s-2.9-18.2 2.9-25.4l64-80c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l17.3 21.6 56-84C360.5 132 368 128 376 128s15.5 4 20 10.7zM192 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120V344c0 75.1 60.9 136 136 136H456c13.3 0 24-10.7 24-24s-10.7-24-24-24H136c-48.6 0-88-39.4-88-88V120z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M160 32c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H160zM396 138.7l96 144c4.9 7.4 5.4 16.8 1.2 24.6S480.9 320 472 320H328 280 200c-9.2 0-17.6-5.3-21.6-13.6s-2.9-18.2 2.9-25.4l64-80c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l17.3 21.6 56-84C360.5 132 368 128 376 128s15.5 4 20 10.7zM192 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120V344c0 75.1 60.9 136 136 136H456c13.3 0 24-10.7 24-24s-10.7-24-24-24H136c-48.6 0-88-39.4-88-88V120z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M160 80H512c8.8 0 16 7.2 16 16V320c0 8.8-7.2 16-16 16H490.8L388.1 178.9c-4.4-6.8-12-10.9-20.1-10.9s-15.7 4.1-20.1 10.9l-52.2 79.8-12.4-16.9c-4.5-6.2-11.7-9.8-19.4-9.8s-14.8 3.6-19.4 9.8L175.6 336H160c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16zM96 96V320c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H160c-35.3 0-64 28.7-64 64zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120V344c0 75.1 60.9 136 136 136H456c13.3 0 24-10.7 24-24s-10.7-24-24-24H136c-48.6 0-88-39.4-88-88V120zm208 24a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M160 80H512c8.8 0 16 7.2 16 16V320c0 8.8-7.2 16-16 16H490.8L388.1 178.9c-4.4-6.8-12-10.9-20.1-10.9s-15.7 4.1-20.1 10.9l-52.2 79.8-12.4-16.9c-4.5-6.2-11.7-9.8-19.4-9.8s-14.8 3.6-19.4 9.8L175.6 336H160c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16zM96 96V320c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H160c-35.3 0-64 28.7-64 64zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120V344c0 75.1 60.9 136 136 136H456c13.3 0 24-10.7 24-24s-10.7-24-24-24H136c-48.6 0-88-39.4-88-88V120zm208 24a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"imdb\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2d8\",\n    \"label\": \"IMDB\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M89.5 323.6H53.93V186.2H89.5V323.6zM156.1 250.5L165.2 186.2H211.5V323.6H180.5V230.9L167.1 323.6H145.8L132.8 232.9L132.7 323.6H101.5V186.2H147.6C148.1 194.5 150.4 204.3 151.9 215.6L156.1 250.5zM223.7 323.6V186.2H250.3C267.3 186.2 277.3 187.1 283.3 188.6C289.4 190.3 294 192.8 297.2 196.5C300.3 199.8 302.3 203.1 303 208.5C303.9 212.9 304.4 221.6 304.4 234.7V282.9C304.4 295.2 303.7 303.4 302.5 307.6C301.4 311.7 299.4 315 296.5 317.3C293.7 319.7 290.1 321.4 285.8 322.3C281.6 323.1 275.2 323.6 266.7 323.6H223.7zM259.2 209.7V299.1C264.3 299.1 267.5 298.1 268.6 296.8C269.7 294.8 270.4 289.2 270.4 280.1V226.8C270.4 220.6 270.3 216.6 269.7 214.8C269.4 213 268.5 211.8 267.1 210.1C265.7 210.1 263 209.7 259.2 209.7V209.7zM316.5 323.6V186.2H350.6V230.1C353.5 227.7 356.7 225.2 360.1 223.5C363.7 222 368.9 221.1 372.9 221.1C377.7 221.1 381.8 221.9 385.2 223.3C388.6 224.8 391.2 226.8 393.2 229.5C394.9 232.1 395.9 234.8 396.3 237.3C396.7 239.9 396.1 245.3 396.1 253.5V292.1C396.1 300.3 396.3 306.4 395.3 310.5C394.2 314.5 391.5 318.1 387.5 320.1C383.4 324 378.6 325.4 372.9 325.4C368.9 325.4 363.7 324.5 360.2 322.9C356.7 321.1 353.5 318.4 350.6 314.9L348.5 323.6L316.5 323.6zM361.6 302.9C362.3 301.1 362.6 296.9 362.6 290.4V255C362.6 249.4 362.3 245.5 361.5 243.8C360.8 241.9 357.8 241.1 355.7 241.1C353.7 241.1 352.3 241.9 351.6 243.4C351 244.9 350.6 248.8 350.6 255V291.4C350.6 297.5 351 301.4 351.8 303C352.4 304.7 353.9 305.5 355.9 305.5C358.1 305.5 360.1 304.7 361.6 302.9L361.6 302.9zM418.4 32.04C434.1 33.27 447.1 47.28 447.1 63.92V448.1C447.1 464.5 435.2 478.5 418.9 479.1C418.6 479.1 418.4 480 418.1 480H29.88C29.6 480 29.32 479.1 29.04 479.9C13.31 478.5 1.093 466.1 0 449.7L.0186 61.78C1.081 45.88 13.82 33.09 30.26 31.1H417.7C417.9 31.1 418.2 32.01 418.4 32.04L418.4 32.04zM30.27 41.26C19 42.01 10.02 51.01 9.257 62.4V449.7C9.63 455.1 11.91 460.2 15.7 464C19.48 467.9 24.51 470.3 29.89 470.7H418.1C429.6 469.7 438.7 459.1 438.7 448.1V63.91C438.7 58.17 436.6 52.65 432.7 48.45C428.8 44.24 423.4 41.67 417.7 41.26L30.27 41.26z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M89.5 323.6H53.93V186.2H89.5V323.6zM156.1 250.5L165.2 186.2H211.5V323.6H180.5V230.9L167.1 323.6H145.8L132.8 232.9L132.7 323.6H101.5V186.2H147.6C148.1 194.5 150.4 204.3 151.9 215.6L156.1 250.5zM223.7 323.6V186.2H250.3C267.3 186.2 277.3 187.1 283.3 188.6C289.4 190.3 294 192.8 297.2 196.5C300.3 199.8 302.3 203.1 303 208.5C303.9 212.9 304.4 221.6 304.4 234.7V282.9C304.4 295.2 303.7 303.4 302.5 307.6C301.4 311.7 299.4 315 296.5 317.3C293.7 319.7 290.1 321.4 285.8 322.3C281.6 323.1 275.2 323.6 266.7 323.6H223.7zM259.2 209.7V299.1C264.3 299.1 267.5 298.1 268.6 296.8C269.7 294.8 270.4 289.2 270.4 280.1V226.8C270.4 220.6 270.3 216.6 269.7 214.8C269.4 213 268.5 211.8 267.1 210.1C265.7 210.1 263 209.7 259.2 209.7V209.7zM316.5 323.6V186.2H350.6V230.1C353.5 227.7 356.7 225.2 360.1 223.5C363.7 222 368.9 221.1 372.9 221.1C377.7 221.1 381.8 221.9 385.2 223.3C388.6 224.8 391.2 226.8 393.2 229.5C394.9 232.1 395.9 234.8 396.3 237.3C396.7 239.9 396.1 245.3 396.1 253.5V292.1C396.1 300.3 396.3 306.4 395.3 310.5C394.2 314.5 391.5 318.1 387.5 320.1C383.4 324 378.6 325.4 372.9 325.4C368.9 325.4 363.7 324.5 360.2 322.9C356.7 321.1 353.5 318.4 350.6 314.9L348.5 323.6L316.5 323.6zM361.6 302.9C362.3 301.1 362.6 296.9 362.6 290.4V255C362.6 249.4 362.3 245.5 361.5 243.8C360.8 241.9 357.8 241.1 355.7 241.1C353.7 241.1 352.3 241.9 351.6 243.4C351 244.9 350.6 248.8 350.6 255V291.4C350.6 297.5 351 301.4 351.8 303C352.4 304.7 353.9 305.5 355.9 305.5C358.1 305.5 360.1 304.7 361.6 302.9L361.6 302.9zM418.4 32.04C434.1 33.27 447.1 47.28 447.1 63.92V448.1C447.1 464.5 435.2 478.5 418.9 479.1C418.6 479.1 418.4 480 418.1 480H29.88C29.6 480 29.32 479.1 29.04 479.9C13.31 478.5 1.093 466.1 0 449.7L.0186 61.78C1.081 45.88 13.82 33.09 30.26 31.1H417.7C417.9 31.1 418.2 32.01 418.4 32.04L418.4 32.04zM30.27 41.26C19 42.01 10.02 51.01 9.257 62.4V449.7C9.63 455.1 11.91 460.2 15.7 464C19.48 467.9 24.51 470.3 29.89 470.7H418.1C429.6 469.7 438.7 459.1 438.7 448.1V63.91C438.7 58.17 436.6 52.65 432.7 48.45C428.8 44.24 423.4 41.67 417.7 41.26L30.27 41.26z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"inbox\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f01c\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archive\", \"desk\", \"email\", \"mail\", \"message\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f01c\",\n    \"label\": \"Inbox\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M121 32C91.6 32 66 52 58.9 80.5L1.9 308.4C.6 313.5 0 318.7 0 323.9V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V323.9c0-5.2-.6-10.4-1.9-15.5l-57-227.9C446 52 420.4 32 391 32H121zm0 64H391l48 192H387.8c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7H195.8c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7H73L121 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M121 32C91.6 32 66 52 58.9 80.5L1.9 308.4C.6 313.5 0 318.7 0 323.9V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V323.9c0-5.2-.6-10.4-1.9-15.5l-57-227.9C446 52 420.4 32 391 32H121zm0 64H391l48 192H387.8c-12.1 0-23.2 6.8-28.6 17.7l-14.3 28.6c-5.4 10.8-16.5 17.7-28.6 17.7H195.8c-12.1 0-23.2-6.8-28.6-17.7l-14.3-28.6c-5.4-10.8-16.5-17.7-28.6-17.7H73L121 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"indent\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f03c\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"align\", \"justify\", \"paragraph\", \"tab\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f03c\",\n    \"label\": \"Indent\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32zm32 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3V176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32zm32 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3V176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"indian-rupee-sign\": {\n    \"aliases\": {\n      \"names\": [\"indian-rupee\", \"inr\"]\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Indian Rupee Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1bc\",\n    \"label\": \"Indian Rupee Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H96h16H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H231.8c9.6 14.4 16.7 30.6 20.7 48H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H252.4c-13.2 58.3-61.9 103.2-122.2 110.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256h80c32.8 0 61-19.7 73.3-48H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H185.3C173 115.7 144.8 96 112 96H96 32C14.3 96 0 81.7 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H96h16H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H231.8c9.6 14.4 16.7 30.6 20.7 48H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H252.4c-13.2 58.3-61.9 103.2-122.2 110.9L274.6 422c14.4 10.3 17.7 30.3 7.4 44.6s-30.3 17.7-44.6 7.4L13.4 314C2.1 306-2.7 291.5 1.5 278.2S18.1 256 32 256h80c32.8 0 61-19.7 73.3-48H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H185.3C173 115.7 144.8 96 112 96H96 32C14.3 96 0 81.7 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"industry\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f275\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"factory\",\n        \"industrial\",\n        \"manufacturing\",\n        \"mill\",\n        \"warehouse\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f275\",\n    \"label\": \"Industry\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C46.3 32 32 46.3 32 64V304v48 80c0 26.5 21.5 48 48 48H496c26.5 0 48-21.5 48-48V304 152.2c0-18.2-19.4-29.7-35.4-21.1L352 215.4V152.2c0-18.2-19.4-29.7-35.4-21.1L160 215.4V64c0-17.7-14.3-32-32-32H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C46.3 32 32 46.3 32 64V304v48 80c0 26.5 21.5 48 48 48H496c26.5 0 48-21.5 48-48V304 152.2c0-18.2-19.4-29.7-35.4-21.1L352 215.4V152.2c0-18.2-19.4-29.7-35.4-21.1L160 215.4V64c0-17.7-14.3-32-32-32H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"infinity\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"221e\", \"267e\"],\n        \"secondary\": [\"10f534\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.3.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Infinity\",\n        \"eternity\",\n        \"forever\",\n        \"infinity\",\n        \"math\",\n        \"unbounded\",\n        \"universal\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f534\",\n    \"label\": \"Infinity\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 241.1C0 161 65 96 145.1 96c38.5 0 75.4 15.3 102.6 42.5L320 210.7l72.2-72.2C419.5 111.3 456.4 96 494.9 96C575 96 640 161 640 241.1v29.7C640 351 575 416 494.9 416c-38.5 0-75.4-15.3-102.6-42.5L320 301.3l-72.2 72.2C220.5 400.7 183.6 416 145.1 416C65 416 0 351 0 270.9V241.1zM274.7 256l-72.2-72.2c-15.2-15.2-35.9-23.8-57.4-23.8C100.3 160 64 196.3 64 241.1v29.7c0 44.8 36.3 81.1 81.1 81.1c21.5 0 42.2-8.5 57.4-23.8L274.7 256zm90.5 0l72.2 72.2c15.2 15.2 35.9 23.8 57.4 23.8c44.8 0 81.1-36.3 81.1-81.1V241.1c0-44.8-36.3-81.1-81.1-81.1c-21.5 0-42.2 8.5-57.4 23.8L365.3 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 241.1C0 161 65 96 145.1 96c38.5 0 75.4 15.3 102.6 42.5L320 210.7l72.2-72.2C419.5 111.3 456.4 96 494.9 96C575 96 640 161 640 241.1v29.7C640 351 575 416 494.9 416c-38.5 0-75.4-15.3-102.6-42.5L320 301.3l-72.2 72.2C220.5 400.7 183.6 416 145.1 416C65 416 0 351 0 270.9V241.1zM274.7 256l-72.2-72.2c-15.2-15.2-35.9-23.8-57.4-23.8C100.3 160 64 196.3 64 241.1v29.7c0 44.8 36.3 81.1 81.1 81.1c21.5 0 42.2-8.5 57.4-23.8L274.7 256zm90.5 0l72.2 72.2c15.2 15.2 35.9 23.8 57.4 23.8c44.8 0 81.1-36.3 81.1-81.1V241.1c0-44.8-36.3-81.1-81.1-81.1c-21.5 0-42.2 8.5-57.4 23.8L365.3 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"info\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f129\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"details\", \"help\", \"information\", \"more\", \"support\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f129\",\n    \"label\": \"Info\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767248,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 192 512\\\"><path d=\\\"M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32V448h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H64V256H32c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 192, 512],\n        \"width\": 192,\n        \"height\": 512,\n        \"path\": \"M48 80a48 48 0 1 1 96 0A48 48 0 1 1 48 80zM0 224c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32V448h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H64V256H32c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"instagram\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f16d\",\n    \"label\": \"Instagram\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"instalod\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e081\",\n    \"label\": \"InstaLOD\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M153.384,480H387.113L502.554,275.765,204.229,333.211ZM504.726,240.078,387.113,32H155.669L360.23,267.9ZM124.386,48.809,7.274,256,123.236,461.154,225.627,165.561Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M153.384,480H387.113L502.554,275.765,204.229,333.211ZM504.726,240.078,387.113,32H155.669L360.23,267.9ZM124.386,48.809,7.274,256,123.236,461.154,225.627,165.561Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"intercom\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"app\", \"customer\", \"messenger\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7af\",\n    \"label\": \"Intercom\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014458,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zm-108.3 82.1c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zm-74.6-7.5c0-19.8 29.9-19.8 29.9 0v216.5c0 19.8-29.9 19.8-29.9 0V106.6zm-74.7 7.5c0-19.8 29.9-19.8 29.9 0v199.5c0 19.8-29.9 19.8-29.9 0V114.1zM59.7 144c0-19.8 29.9-19.8 29.9 0v134.3c0 19.8-29.9 19.8-29.9 0V144zm323.4 227.8c-72.8 63-241.7 65.4-318.1 0-15-12.8 4.4-35.5 19.4-22.7 65.9 55.3 216.1 53.9 279.3 0 14.9-12.9 34.3 9.8 19.4 22.7zm5.2-93.5c0 19.8-29.9 19.8-29.9 0V144c0-19.8 29.9-19.8 29.9 0v134.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"internet-explorer\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\", \"ie\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f26b\",\n    \"label\": \"Internet-explorer\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"invision\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"app\", \"design\", \"interface\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7b0\",\n    \"label\": \"InVision\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M407.4 32H40.6C18.2 32 0 50.2 0 72.6v366.8C0 461.8 18.2 480 40.6 480h366.8c22.4 0 40.6-18.2 40.6-40.6V72.6c0-22.4-18.2-40.6-40.6-40.6zM176.1 145.6c.4 23.4-22.4 27.3-26.6 27.4-14.9 0-27.1-12-27.1-27 .1-35.2 53.1-35.5 53.7-.4zM332.8 377c-65.6 0-34.1-74-25-106.6 14.1-46.4-45.2-59-59.9.7l-25.8 103.3H177l8.1-32.5c-31.5 51.8-94.6 44.4-94.6-4.3.1-14.3.9-14 23-104.1H81.7l9.7-35.6h76.4c-33.6 133.7-32.6 126.9-32.9 138.2 0 20.9 40.9 13.5 57.4-23.2l19.8-79.4h-32.3l9.7-35.6h68.8l-8.9 40.5c40.5-75.5 127.9-47.8 101.8 38-14.2 51.1-14.6 50.7-14.9 58.8 0 15.5 17.5 22.6 31.8-16.9L386 325c-10.5 36.7-29.4 52-53.2 52z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ioxhost\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f208\",\n    \"label\": \"ioxhost\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"italic\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f033\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"emphasis\", \"font\", \"format\", \"text\", \"type\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f033\",\n    \"label\": \"Italic\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M128 64c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H293.3L160 416h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H90.7L224 96H160c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M128 64c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H293.3L160 416h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H90.7L224 96H160c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"itch-io\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f83a\",\n    \"label\": \"itch.io\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M71.92 34.77C50.2 47.67 7.4 96.84 7 109.73v21.34c0 27.06 25.29 50.84 48.25 50.84 27.57 0 50.54-22.85 50.54-50 0 27.12 22.18 50 49.76 50s49-22.85 49-50c0 27.12 23.59 50 51.16 50h.5c27.57 0 51.16-22.85 51.16-50 0 27.12 21.47 50 49 50s49.76-22.85 49.76-50c0 27.12 23 50 50.54 50 23 0 48.25-23.78 48.25-50.84v-21.34c-.4-12.9-43.2-62.07-64.92-75C372.56 32.4 325.76 32 256 32S91.14 33.1 71.92 34.77zm132.32 134.39c-22 38.4-77.9 38.71-99.85.25-13.17 23.14-43.17 32.07-56 27.66-3.87 40.15-13.67 237.13 17.73 269.15 80 18.67 302.08 18.12 379.76 0 31.65-32.27 21.32-232 17.75-269.15-12.92 4.44-42.88-4.6-56-27.66-22 38.52-77.85 38.1-99.85-.24-7.1 12.49-23.05 28.94-51.76 28.94a57.54 57.54 0 0 1-51.75-28.94zm-41.58 53.77c16.47 0 31.09 0 49.22 19.78a436.91 436.91 0 0 1 88.18 0C318.22 223 332.85 223 349.31 223c52.33 0 65.22 77.53 83.87 144.45 17.26 62.15-5.52 63.67-33.95 63.73-42.15-1.57-65.49-32.18-65.49-62.79-39.25 6.43-101.93 8.79-155.55 0 0 30.61-23.34 61.22-65.49 62.79-28.42-.06-51.2-1.58-33.94-63.73 18.67-67 31.56-144.45 83.88-144.45zM256 270.79s-44.38 40.77-52.35 55.21l29-1.17v25.32c0 1.55 21.34.16 23.33.16 11.65.54 23.31 1 23.31-.16v-25.28l29 1.17c-8-14.48-52.35-55.24-52.35-55.24z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"itunes\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b4\",\n    \"label\": \"iTunes\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"itunes-note\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b5\",\n    \"label\": \"Itunes Note\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"j\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"6a\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter J\", \"Latin Small Letter J\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"4a\",\n    \"label\": \"J\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M288 32c17.7 0 32 14.3 32 32V320c0 88.4-71.6 160-160 160S0 408.4 0 320V288c0-17.7 14.3-32 32-32s32 14.3 32 32v32c0 53 43 96 96 96s96-43 96-96V64c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M288 32c17.7 0 32 14.3 32 32V320c0 88.4-71.6 160-160 160S0 408.4 0 320V288c0-17.7 14.3-32 32-32s32 14.3 32 32v32c0 53 43 96 96 96s96-43 96-96V64c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"jar\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"jam\", \"jelly\", \"storage\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e516\",\n    \"label\": \"Jar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M32 32C32 14.3 46.3 0 64 0H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160zm96 64c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M32 32C32 14.3 46.3 0 64 0H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160zm96 64c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"jar-wheat\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"flour\", \"storage\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e517\",\n    \"label\": \"Jar Wheat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M32 32C32 14.3 46.3 0 64 0H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160zm112 0H69.8c-3.2 0-5.8 2.6-5.8 5.8C64 198 90 224 122.2 224H144h32 21.8c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8H208c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7zm48 117.7c-11.7-13.3-28.9-21.7-48-21.7H69.8c-3.2 0-5.8 2.6-5.8 5.8C64 294 90 320 122.2 320H144h32 21.8c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8H208c-19.1 0-36.3 8.4-48 21.7zM112 352H69.8c-3.2 0-5.8 2.6-5.8 5.8C64 390 90 416 122.2 416H144v32c0 8.8 7.2 16 16 16s16-7.2 16-16V416h21.8c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8H208c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M32 32C32 14.3 46.3 0 64 0H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160zm112 0H69.8c-3.2 0-5.8 2.6-5.8 5.8C64 198 90 224 122.2 224H144h32 21.8c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8H208c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7zm48 117.7c-11.7-13.3-28.9-21.7-48-21.7H69.8c-3.2 0-5.8 2.6-5.8 5.8C64 294 90 320 122.2 320H144h32 21.8c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8H208c-19.1 0-36.3 8.4-48 21.7zM112 352H69.8c-3.2 0-5.8 2.6-5.8 5.8C64 390 90 416 122.2 416H144v32c0 8.8 7.2 16 16 16s16-7.2 16-16V416h21.8c32.1 0 58.2-26 58.2-58.2c0-3.2-2.6-5.8-5.8-5.8H208c-19.1 0-36.3 8.4-48 21.7c-11.7-13.3-28.9-21.7-48-21.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"java\": {\n    \"changes\": [\"5.0.10\", \"5.7.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4e4\",\n    \"label\": \"Java\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"jedi\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f669\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"crest\", \"force\", \"sith\", \"skywalker\", \"star wars\", \"yoda\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f669\",\n    \"label\": \"Jedi\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M246 315.7l-21.2-31.9c-2.1-3.2-1.7-7.4 1-10.1s6.9-3.1 10.1-1l29.5 19.7c2.1 1.4 4.9 0 5-2.6L279.7 8c.1-4.5 3.8-8 8.3-8s8.1 3.5 8.3 8l9.4 281.9c.1 2.5 2.9 3.9 5 2.6l29.5-19.7c3.2-2.1 7.4-1.7 10.1 1s3.1 6.9 1 10.1L330 315.7c-1.3 1.9-.2 4.5 2 4.9l37.6 7.5c3.7 .7 6.4 4 6.4 7.8s-2.7 7.1-6.4 7.8L332 351.4c-2.2 .4-3.3 3-2 4.9l21.2 31.9c2.1 3.2 1.7 7.4-1 10.1s-6.9 3.1-10.1 1l-26.3-17.6c-2.2-1.4-5.1 .2-5 2.8l2.1 61.5C370.6 435.2 416 382.9 416 320c0-37-15.7-70.4-40.8-93.7c-7-6.5-6.5-18.6 1-24.4C410.1 175.5 432 134.3 432 88c0-16.8-2.9-33-8.2-48c-4.6-13 10.2-30 21.4-22c53.5 38 92.7 94.8 107.8 160.7c.5 2.1-.2 4.3-1.7 5.9l-28.4 28.4c-4 4-1.2 10.9 4.5 10.9h26c3.4 0 6.2 2.6 6.3 6c.1 3.3 .2 6.6 .2 10c0 17.5-1.7 34.7-4.8 51.3c-.2 1.2-.9 2.4-1.7 3.3l-46.5 46.5c-4 4-1.2 10.9 4.5 10.9H526c4.6 0 7.7 4.8 5.7 9C487.2 450.5 394.8 512 288 512S88.8 450.5 44.3 361c-2.1-4.2 1-9 5.7-9H64.5c5.7 0 8.6-6.9 4.5-10.9L22.6 294.6c-.9-.9-1.5-2-1.7-3.3C17.7 274.7 16 257.5 16 240c0-3.3 .1-6.7 .2-10c.1-3.4 2.9-6 6.3-6h26c5.7 0 8.6-6.9 4.5-10.9L24.6 184.6c-1.5-1.5-2.2-3.8-1.7-5.9C38.1 112.8 77.3 56 130.8 18c11.3-8 26 8.9 21.4 22c-5.3 15-8.2 31.2-8.2 48c0 46.3 21.9 87.5 55.8 113.9c7.5 5.8 8 17.9 1 24.4C175.7 249.6 160 283 160 320c0 62.9 45.4 115.2 105.1 126l2.1-61.5c.1-2.6-2.8-4.2-5-2.8l-26.3 17.6c-3.2 2.1-7.4 1.7-10.1-1s-3.1-6.9-1-10.1L246 356.3c1.3-1.9 .2-4.5-2-4.9l-37.6-7.5c-3.7-.7-6.4-4-6.4-7.8s2.7-7.1 6.4-7.8l37.6-7.5c2.2-.4 3.3-3 2-4.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M246 315.7l-21.2-31.9c-2.1-3.2-1.7-7.4 1-10.1s6.9-3.1 10.1-1l29.5 19.7c2.1 1.4 4.9 0 5-2.6L279.7 8c.1-4.5 3.8-8 8.3-8s8.1 3.5 8.3 8l9.4 281.9c.1 2.5 2.9 3.9 5 2.6l29.5-19.7c3.2-2.1 7.4-1.7 10.1 1s3.1 6.9 1 10.1L330 315.7c-1.3 1.9-.2 4.5 2 4.9l37.6 7.5c3.7 .7 6.4 4 6.4 7.8s-2.7 7.1-6.4 7.8L332 351.4c-2.2 .4-3.3 3-2 4.9l21.2 31.9c2.1 3.2 1.7 7.4-1 10.1s-6.9 3.1-10.1 1l-26.3-17.6c-2.2-1.4-5.1 .2-5 2.8l2.1 61.5C370.6 435.2 416 382.9 416 320c0-37-15.7-70.4-40.8-93.7c-7-6.5-6.5-18.6 1-24.4C410.1 175.5 432 134.3 432 88c0-16.8-2.9-33-8.2-48c-4.6-13 10.2-30 21.4-22c53.5 38 92.7 94.8 107.8 160.7c.5 2.1-.2 4.3-1.7 5.9l-28.4 28.4c-4 4-1.2 10.9 4.5 10.9h26c3.4 0 6.2 2.6 6.3 6c.1 3.3 .2 6.6 .2 10c0 17.5-1.7 34.7-4.8 51.3c-.2 1.2-.9 2.4-1.7 3.3l-46.5 46.5c-4 4-1.2 10.9 4.5 10.9H526c4.6 0 7.7 4.8 5.7 9C487.2 450.5 394.8 512 288 512S88.8 450.5 44.3 361c-2.1-4.2 1-9 5.7-9H64.5c5.7 0 8.6-6.9 4.5-10.9L22.6 294.6c-.9-.9-1.5-2-1.7-3.3C17.7 274.7 16 257.5 16 240c0-3.3 .1-6.7 .2-10c.1-3.4 2.9-6 6.3-6h26c5.7 0 8.6-6.9 4.5-10.9L24.6 184.6c-1.5-1.5-2.2-3.8-1.7-5.9C38.1 112.8 77.3 56 130.8 18c11.3-8 26 8.9 21.4 22c-5.3 15-8.2 31.2-8.2 48c0 46.3 21.9 87.5 55.8 113.9c7.5 5.8 8 17.9 1 24.4C175.7 249.6 160 283 160 320c0 62.9 45.4 115.2 105.1 126l2.1-61.5c.1-2.6-2.8-4.2-5-2.8l-26.3 17.6c-3.2 2.1-7.4 1.7-10.1-1s-3.1-6.9-1-10.1L246 356.3c1.3-1.9 .2-4.5-2-4.9l-37.6-7.5c-3.7-.7-6.4-4-6.4-7.8s2.7-7.1 6.4-7.8l37.6-7.5c2.2-.4 3.3-3 2-4.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"jedi-order\": {\n    \"changes\": [\"5.0.12\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"star wars\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f50e\",\n    \"label\": \"Jedi Order\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M398.5 373.6c95.9-122.1 17.2-233.1 17.2-233.1 45.4 85.8-41.4 170.5-41.4 170.5 105-171.5-60.5-271.5-60.5-271.5 96.9 72.7-10.1 190.7-10.1 190.7 85.8 158.4-68.6 230.1-68.6 230.1s-.4-16.9-2.2-85.7c4.3 4.5 34.5 36.2 34.5 36.2l-24.2-47.4 62.6-9.1-62.6-9.1 20.2-55.5-31.4 45.9c-2.2-87.7-7.8-305.1-7.9-306.9v-2.4 1-1 2.4c0 1-5.6 219-7.9 306.9l-31.4-45.9 20.2 55.5-62.6 9.1 62.6 9.1-24.2 47.4 34.5-36.2c-1.8 68.8-2.2 85.7-2.2 85.7s-154.4-71.7-68.6-230.1c0 0-107-118.1-10.1-190.7 0 0-165.5 99.9-60.5 271.5 0 0-86.8-84.8-41.4-170.5 0 0-78.7 111 17.2 233.1 0 0-26.2-16.1-49.4-77.7 0 0 16.9 183.3 222 185.7h4.1c205-2.4 222-185.7 222-185.7-23.6 61.5-49.9 77.7-49.9 77.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"jenkins\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b6\",\n    \"label\": \"Jenkis\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"jet-fighter\": {\n    \"aliases\": {\n      \"names\": [\"fighter-jet\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0fb\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airforce\",\n        \"airplane\",\n        \"airport\",\n        \"fast\",\n        \"fly\",\n        \"goose\",\n        \"marines\",\n        \"maverick\",\n        \"military\",\n        \"plane\",\n        \"quick\",\n        \"top gun\",\n        \"transportation\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0fb\",\n    \"label\": \"Jet Fighter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M160 24c0-13.3 10.7-24 24-24H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H280L384 192H500.4c7.7 0 15.3 1.4 22.5 4.1L625 234.4c9 3.4 15 12 15 21.6s-6 18.2-15 21.6L522.9 315.9c-7.2 2.7-14.8 4.1-22.5 4.1H384L280 464h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V320H160l-54.6 54.6c-6 6-14.1 9.4-22.6 9.4H64c-17.7 0-32-14.3-32-32V288c-17.7 0-32-14.3-32-32s14.3-32 32-32V160c0-17.7 14.3-32 32-32H82.7c8.5 0 16.6 3.4 22.6 9.4L160 192h32V48h-8c-13.3 0-24-10.7-24-24zM80 240c-8.8 0-16 7.2-16 16s7.2 16 16 16h64c8.8 0 16-7.2 16-16s-7.2-16-16-16H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M160 24c0-13.3 10.7-24 24-24H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H280L384 192H500.4c7.7 0 15.3 1.4 22.5 4.1L625 234.4c9 3.4 15 12 15 21.6s-6 18.2-15 21.6L522.9 315.9c-7.2 2.7-14.8 4.1-22.5 4.1H384L280 464h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V320H160l-54.6 54.6c-6 6-14.1 9.4-22.6 9.4H64c-17.7 0-32-14.3-32-32V288c-17.7 0-32-14.3-32-32s14.3-32 32-32V160c0-17.7 14.3-32 32-32H82.7c8.5 0 16.6 3.4 22.6 9.4L160 192h32V48h-8c-13.3 0-24-10.7-24-24zM80 240c-8.8 0-16 7.2-16 16s7.2 16 16 16h64c8.8 0 16-7.2 16-16s-7.2-16-16-16H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"jet-fighter-up\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airforce\",\n        \"airplane\",\n        \"airport\",\n        \"fast\",\n        \"fly\",\n        \"goose\",\n        \"marines\",\n        \"maverick\",\n        \"military\",\n        \"plane\",\n        \"quick\",\n        \"top gun\",\n        \"transportation\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e518\",\n    \"label\": \"Jet Fighter Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M270.7 9.7C268.2 3.8 262.4 0 256 0s-12.2 3.8-14.7 9.7L197.2 112.6c-3.4 8-5.2 16.5-5.2 25.2v77l-144 84V280c0-13.3-10.7-24-24-24s-24 10.7-24 24v56 32 24c0 13.3 10.7 24 24 24s24-10.7 24-24v-8H192v32.7L133.5 468c-3.5 3-5.5 7.4-5.5 12v16c0 8.8 7.2 16 16 16h96V448c0-8.8 7.2-16 16-16s16 7.2 16 16v64h96c8.8 0 16-7.2 16-16V480c0-4.6-2-9-5.5-12L320 416.7V384H464v8c0 13.3 10.7 24 24 24s24-10.7 24-24V368 336 280c0-13.3-10.7-24-24-24s-24 10.7-24 24v18.8l-144-84v-77c0-8.7-1.8-17.2-5.2-25.2L270.7 9.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M270.7 9.7C268.2 3.8 262.4 0 256 0s-12.2 3.8-14.7 9.7L197.2 112.6c-3.4 8-5.2 16.5-5.2 25.2v77l-144 84V280c0-13.3-10.7-24-24-24s-24 10.7-24 24v56 32 24c0 13.3 10.7 24 24 24s24-10.7 24-24v-8H192v32.7L133.5 468c-3.5 3-5.5 7.4-5.5 12v16c0 8.8 7.2 16 16 16h96V448c0-8.8 7.2-16 16-16s16 7.2 16 16v64h96c8.8 0 16-7.2 16-16V480c0-4.6-2-9-5.5-12L320 416.7V384H464v8c0 13.3 10.7 24 24 24s24-10.7 24-24V368 336 280c0-13.3-10.7-24-24-24s-24 10.7-24 24v18.8l-144-84v-77c0-8.7-1.8-17.2-5.2-25.2L270.7 9.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"jira\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"atlassian\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7b1\",\n    \"label\": \"Jira\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"joget\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b7\",\n    \"label\": \"Joget\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"joint\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f595\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"blunt\",\n        \"cannabis\",\n        \"doobie\",\n        \"drugs\",\n        \"marijuana\",\n        \"roach\",\n        \"smoke\",\n        \"smoking\",\n        \"spliff\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f595\",\n    \"label\": \"Joint\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43c0 55.2 21.9 108.1 60.9 147.1l21 21c9 9 14.1 21.2 14.1 33.9v11c0 17.7 14.3 32 32 32s32-14.3 32-32V245c0-29.7-11.8-58.2-32.8-79.2l-21-21C463.2 117.8 448 81.2 448 43V32zM576 256c0 17.7 14.3 32 32 32s32-14.3 32-32V245c0-55.2-21.9-108.1-60.9-147.1l-21-21c-9-9-14.1-21.2-14.1-33.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43c0 29.7 11.8 58.2 32.8 79.2l21 21c27 27 42.2 63.6 42.2 101.8v11zM229.8 360c-4.7-2.3-10-2.7-15.2-2c-37.8 5.6-75.2 14.3-106.9 22.8C81.3 388 58.3 395.1 42 400.4c-8.2 2.7-14.7 4.9-19.2 6.5c-2.3 .8-4 1.4-5.2 1.8l-1.3 .5C6.8 412.5 0 421.4 0 432s6.8 19.5 16.3 22.7l1.3 .5c1.2 .4 3 1.1 5.2 1.8c4.5 1.6 11 3.8 19.2 6.5c16.3 5.4 39.2 12.5 65.7 19.6C160.3 497.3 228.8 512 288 512h67.3c4.1 0 6.3-5.1 3.6-8.3L256.5 380.8c-7.4-8.9-16.5-15.9-26.7-20.8zM445 512h19 51.3c4.1 0 6.3-5.1 3.6-8.3L416.5 380.8C401.3 362.5 378.8 352 355 352H336 288c-1.1 0-2.3 0-3.4 0c-4.1 0-6.2 5.1-3.5 8.3L383.5 483.2C398.7 501.5 421.2 512 445 512zm-3.9-151.7L543.5 483.2c14.6 17.5 35.9 27.9 58.6 28.7c21.1-1.1 37.9-18.6 37.9-39.9V392c0-22.1-17.9-40-40-40H444.7c-4.1 0-6.3 5.1-3.6 8.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M448 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43c0 55.2 21.9 108.1 60.9 147.1l21 21c9 9 14.1 21.2 14.1 33.9v11c0 17.7 14.3 32 32 32s32-14.3 32-32V245c0-29.7-11.8-58.2-32.8-79.2l-21-21C463.2 117.8 448 81.2 448 43V32zM576 256c0 17.7 14.3 32 32 32s32-14.3 32-32V245c0-55.2-21.9-108.1-60.9-147.1l-21-21c-9-9-14.1-21.2-14.1-33.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43c0 29.7 11.8 58.2 32.8 79.2l21 21c27 27 42.2 63.6 42.2 101.8v11zM229.8 360c-4.7-2.3-10-2.7-15.2-2c-37.8 5.6-75.2 14.3-106.9 22.8C81.3 388 58.3 395.1 42 400.4c-8.2 2.7-14.7 4.9-19.2 6.5c-2.3 .8-4 1.4-5.2 1.8l-1.3 .5C6.8 412.5 0 421.4 0 432s6.8 19.5 16.3 22.7l1.3 .5c1.2 .4 3 1.1 5.2 1.8c4.5 1.6 11 3.8 19.2 6.5c16.3 5.4 39.2 12.5 65.7 19.6C160.3 497.3 228.8 512 288 512h67.3c4.1 0 6.3-5.1 3.6-8.3L256.5 380.8c-7.4-8.9-16.5-15.9-26.7-20.8zM445 512h19 51.3c4.1 0 6.3-5.1 3.6-8.3L416.5 380.8C401.3 362.5 378.8 352 355 352H336 288c-1.1 0-2.3 0-3.4 0c-4.1 0-6.2 5.1-3.5 8.3L383.5 483.2C398.7 501.5 421.2 512 445 512zm-3.9-151.7L543.5 483.2c14.6 17.5 35.9 27.9 58.6 28.7c21.1-1.1 37.9-18.6 37.9-39.9V392c0-22.1-17.9-40-40-40H444.7c-4.1 0-6.3 5.1-3.6 8.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"joomla\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1aa\",\n    \"label\": \"Joomla Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"js\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b8\",\n    \"label\": \"JavaScript (JS)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"jsfiddle\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1cc\",\n    \"label\": \"jsFiddle\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"jug-detergent\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"detergent\", \"laundry\", \"soap\", \"wash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e519\",\n    \"label\": \"Jug Detergent\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M96 24c0-13.3 10.7-24 24-24h80c13.3 0 24 10.7 24 24V48h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H88C74.7 96 64 85.3 64 72s10.7-24 24-24h8V24zM0 256c0-70.7 57.3-128 128-128H256c70.7 0 128 57.3 128 128V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256zm256 0v96c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-17.7-14.3-32-32-32s-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M96 24c0-13.3 10.7-24 24-24h80c13.3 0 24 10.7 24 24V48h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H88C74.7 96 64 85.3 64 72s10.7-24 24-24h8V24zM0 256c0-70.7 57.3-128 128-128H256c70.7 0 128 57.3 128 128V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256zm256 0v96c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"k\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"6b\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter K\", \"Latin Small Letter K\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"4b\",\n    \"label\": \"K\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7l-155.2 160L64 249V64c0-17.7-14.3-32-32-32S0 46.3 0 64V328 448c0 17.7 14.3 32 32 32s32-14.3 32-32V341l64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M311 86.3c12.3-12.7 12-32.9-.7-45.2s-32.9-12-45.2 .7l-155.2 160L64 249V64c0-17.7-14.3-32-32-32S0 46.3 0 64V328 448c0 17.7 14.3 32 32 32s32-14.3 32-32V341l64.7-66.7 133 192c10.1 14.5 30 18.1 44.5 8.1s18.1-30 8.1-44.5L174.1 227.4 311 86.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"kaaba\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f54b\"],\n        \"secondary\": [\"10f66b\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Muslim\",\n        \"building\",\n        \"cube\",\n        \"islam\",\n        \"kaaba\",\n        \"muslim\",\n        \"religion\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f66b\",\n    \"label\": \"Kaaba\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M60 120l228 71.2L516 120 288 48.8 60 120zM278.5 1.5c6.2-1.9 12.9-1.9 19.1 0l256 80C566.9 85.6 576 98 576 112v16 0 21.2L292.8 237.7c-3.1 1-6.4 1-9.5 0L0 149.2V128 112C0 98 9.1 85.6 22.5 81.5l256-80zm23.9 266.8L576 182.8v46.5l-52.8 16.5c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5L576 262.8V400c0 14-9.1 26.4-22.5 30.5l-256 80c-6.2 1.9-12.9 1.9-19.1 0l-256-80C9.1 426.4 0 414 0 400V262.8l43.2 13.5c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20L0 229.2V182.8l273.7 85.5c9.3 2.9 19.3 2.9 28.6 0zm-185.5-2.6c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l64 20c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20l-64-20zm352 30.5c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-64 20c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5l64-20zm-224 9.5c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l38.5 12c9.3 2.9 19.3 2.9 28.6 0l38.5-12c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-38.5 12c-3.1 1-6.4 1-9.5 0l-38.5-12z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M60 120l228 71.2L516 120 288 48.8 60 120zM278.5 1.5c6.2-1.9 12.9-1.9 19.1 0l256 80C566.9 85.6 576 98 576 112v16 0 21.2L292.8 237.7c-3.1 1-6.4 1-9.5 0L0 149.2V128 112C0 98 9.1 85.6 22.5 81.5l256-80zm23.9 266.8L576 182.8v46.5l-52.8 16.5c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5L576 262.8V400c0 14-9.1 26.4-22.5 30.5l-256 80c-6.2 1.9-12.9 1.9-19.1 0l-256-80C9.1 426.4 0 414 0 400V262.8l43.2 13.5c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20L0 229.2V182.8l273.7 85.5c9.3 2.9 19.3 2.9 28.6 0zm-185.5-2.6c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l64 20c8.4 2.6 17.4-2.1 20-10.5s-2.1-17.4-10.5-20l-64-20zm352 30.5c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-64 20c-8.4 2.6-13.1 11.6-10.5 20s11.6 13.1 20 10.5l64-20zm-224 9.5c-8.4-2.6-17.4 2.1-20 10.5s2.1 17.4 10.5 20l38.5 12c9.3 2.9 19.3 2.9 28.6 0l38.5-12c8.4-2.6 13.1-11.6 10.5-20s-11.6-13.1-20-10.5l-38.5 12c-3.1 1-6.4 1-9.5 0l-38.5-12z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"kaggle\": {\n    \"changes\": [\"5.2.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5fa\",\n    \"label\": \"Kaggle\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"key\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f511\"],\n        \"secondary\": [\"10f084\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"key\", \"lock\", \"password\", \"private\", \"secret\", \"unlock\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f084\",\n    \"label\": \"Key\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17v80c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V448h40c13.3 0 24-10.7 24-24V384h40c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M336 352c97.2 0 176-78.8 176-176S433.2 0 336 0S160 78.8 160 176c0 18.7 2.9 36.8 8.3 53.7L7 391c-4.5 4.5-7 10.6-7 17v80c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V448h40c13.3 0 24-10.7 24-24V384h40c6.4 0 12.5-2.5 17-7l33.3-33.3c16.9 5.4 35 8.3 53.7 8.3zM376 96a40 40 0 1 1 0 80 40 40 0 1 1 0-80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"keybase\": {\n    \"changes\": [\"5.0.11\", \"5.8.0\", \"5.10.2\", \"5.11.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f5\",\n    \"label\": \"Keybase\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"keyboard\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2328\"],\n        \"secondary\": [\"10f11c\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accessory\",\n        \"computer\",\n        \"edit\",\n        \"input\",\n        \"keyboard\",\n        \"text\",\n        \"type\",\n        \"write\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f11c\",\n    \"label\": \"Keyboard\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm16 64h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm80-176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V144zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zM160 336c0-8.8 7.2-16 16-16H400c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V336zM272 128h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM256 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM368 128h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM352 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V240zM464 128h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H464c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM448 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H464c-8.8 0-16-7.2-16-16V240zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H464c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm16 64h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM64 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V240zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm80-176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V144zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16zM160 336c0-8.8 7.2-16 16-16H400c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V336zM272 128h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM256 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V240zM368 128h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM352 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V240zM464 128h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H464c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16zM448 240c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H464c-8.8 0-16-7.2-16-16V240zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H464c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 112c-8.8 0-16 7.2-16 16V384c0 8.8 7.2 16 16 16H512c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H64zM0 128C0 92.7 28.7 64 64 64H512c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zM176 320H400c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm-72-72c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H200c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H200c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H280c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H280c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H360c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H360c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H440c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H440c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 112c-8.8 0-16 7.2-16 16V384c0 8.8 7.2 16 16 16H512c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H64zM0 128C0 92.7 28.7 64 64 64H512c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zM176 320H400c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm-72-72c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H120c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H200c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H200c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H280c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H280c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H360c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H360c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16zm64 96c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H440c-8.8 0-16-7.2-16-16V248zm16-96h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H440c-8.8 0-16-7.2-16-16V168c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"keycdn\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ba\",\n    \"label\": \"KeyCDN\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"khanda\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"262c\"],\n        \"secondary\": [\"10f66d\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Adi Shakti\", \"chakkar\", \"sikh\", \"sikhism\", \"sword\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f66d\",\n    \"label\": \"Khanda\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M245.8 3.7c5.9-4.9 14.6-4.9 20.5 0l48 40c5.9 4.9 7.5 13.2 3.8 19.9l0 0 0 0 0 0 0 0-.1 .1-.3 .6c-.3 .5-.7 1.3-1.2 2.3c-1 2-2.6 5-4.4 8.6c-.5 .9-.9 1.9-1.4 2.9C344.9 97.4 368 134 368 176s-23.1 78.6-57.3 97.8c.5 1 1 2 1.4 2.9c1.8 3.7 3.3 6.6 4.4 8.6c.5 1 .9 1.8 1.2 2.3l.3 .6 .1 .1 0 0 0 0c3.6 6.7 2 15-3.8 19.9L272 343.5v19.8l35.6-24.5 41.1-28.2c42.8-29.4 68.4-78 68.4-130c0-31.1-9.2-61.6-26.5-87.5l-2.8-4.2c-4-6-3.5-14 1.3-19.5s12.7-7 19.2-3.7L401.1 80c7.2-14.3 7.2-14.3 7.2-14.3l0 0 0 0 .1 0 .3 .2 1 .5c.8 .4 2 1.1 3.5 1.9c2.9 1.7 7 4.1 11.8 7.3c9.6 6.4 22.5 16.1 35.4 29c25.7 25.7 52.7 65.6 52.7 119.3c0 53.1-26.4 100.5-51.2 133.6c-12.6 16.7-25.1 30.3-34.5 39.7c-4.7 4.7-8.7 8.4-11.5 10.9c-1.4 1.3-2.5 2.2-3.3 2.9l-.9 .8-.3 .2-.1 .1 0 0 0 0s0 0-10.2-12.3l10.2 12.3c-5.1 4.3-12.4 4.9-18.2 1.6l-75.6-43-32.7 22.5 45.5 31.3c1.8-.4 3.7-.7 5.7-.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-12.2 0-22.3-9.1-23.8-21L272 423.4v28.9c9.6 5.5 16 15.9 16 27.7c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-11.8 6.4-22.2 16-27.7V424.1l-40.3 27.7C197.8 463.3 187.9 472 176 472c-13.3 0-24-10.7-24-24s10.7-24 24-24c2.2 0 4.4 .3 6.5 .9l45.8-31.5-32.7-22.5-75.6 43c-5.8 3.3-13 2.7-18.2-1.6L112 400c-10.2 12.3-10.2 12.3-10.3 12.3l0 0 0 0-.1-.1-.3-.2-.9-.8c-.8-.7-1.9-1.7-3.3-2.9c-2.8-2.5-6.7-6.2-11.5-10.9c-9.4-9.4-21.9-23-34.5-39.7C26.4 324.5 0 277.1 0 224c0-53.7 26.9-93.6 52.7-119.3c12.9-12.9 25.8-22.6 35.4-29C93 72.5 97 70 99.9 68.4c1.5-.8 2.6-1.5 3.5-1.9l1-.5 .3-.2 .1 0 0 0 0 0s0 0 7.2 14.3l-7.2-14.3c6.5-3.2 14.3-1.7 19.2 3.7s5.3 13.4 1.3 19.5l-2.8 4.2C105.2 119 96 149.5 96 180.6c0 51.9 25.6 100.6 68.4 130l41.1 28.2L240 362.6V343.5l-42.2-35.2c-5.9-4.9-7.5-13.2-3.8-19.9l0 0 0 0 0 0 .1-.1 .3-.6c.3-.5 .7-1.3 1.2-2.3c1-2 2.6-5 4.4-8.6c.5-.9 .9-1.9 1.4-2.9C167.1 254.6 144 218 144 176s23.1-78.6 57.3-97.8c-.5-1-1-2-1.4-2.9c-1.8-3.7-3.3-6.6-4.4-8.6c-.5-1-.9-1.8-1.2-2.3l-.3-.6-.1-.1 0 0 0 0 0 0c-3.6-6.7-2-15 3.8-19.9l48-40zM220.2 122.9c-17 11.5-28.2 31-28.2 53.1s11.2 41.6 28.2 53.1C227 210.2 232 190.9 232 176s-5-34.2-11.8-53.1zm71.5 106.2c17-11.5 28.2-31 28.2-53.1s-11.2-41.6-28.2-53.1C285 141.8 280 161.1 280 176s5 34.2 11.8 53.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M245.8 3.7c5.9-4.9 14.6-4.9 20.5 0l48 40c5.9 4.9 7.5 13.2 3.8 19.9l0 0 0 0 0 0 0 0-.1 .1-.3 .6c-.3 .5-.7 1.3-1.2 2.3c-1 2-2.6 5-4.4 8.6c-.5 .9-.9 1.9-1.4 2.9C344.9 97.4 368 134 368 176s-23.1 78.6-57.3 97.8c.5 1 1 2 1.4 2.9c1.8 3.7 3.3 6.6 4.4 8.6c.5 1 .9 1.8 1.2 2.3l.3 .6 .1 .1 0 0 0 0c3.6 6.7 2 15-3.8 19.9L272 343.5v19.8l35.6-24.5 41.1-28.2c42.8-29.4 68.4-78 68.4-130c0-31.1-9.2-61.6-26.5-87.5l-2.8-4.2c-4-6-3.5-14 1.3-19.5s12.7-7 19.2-3.7L401.1 80c7.2-14.3 7.2-14.3 7.2-14.3l0 0 0 0 .1 0 .3 .2 1 .5c.8 .4 2 1.1 3.5 1.9c2.9 1.7 7 4.1 11.8 7.3c9.6 6.4 22.5 16.1 35.4 29c25.7 25.7 52.7 65.6 52.7 119.3c0 53.1-26.4 100.5-51.2 133.6c-12.6 16.7-25.1 30.3-34.5 39.7c-4.7 4.7-8.7 8.4-11.5 10.9c-1.4 1.3-2.5 2.2-3.3 2.9l-.9 .8-.3 .2-.1 .1 0 0 0 0s0 0-10.2-12.3l10.2 12.3c-5.1 4.3-12.4 4.9-18.2 1.6l-75.6-43-32.7 22.5 45.5 31.3c1.8-.4 3.7-.7 5.7-.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-12.2 0-22.3-9.1-23.8-21L272 423.4v28.9c9.6 5.5 16 15.9 16 27.7c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-11.8 6.4-22.2 16-27.7V424.1l-40.3 27.7C197.8 463.3 187.9 472 176 472c-13.3 0-24-10.7-24-24s10.7-24 24-24c2.2 0 4.4 .3 6.5 .9l45.8-31.5-32.7-22.5-75.6 43c-5.8 3.3-13 2.7-18.2-1.6L112 400c-10.2 12.3-10.2 12.3-10.3 12.3l0 0 0 0-.1-.1-.3-.2-.9-.8c-.8-.7-1.9-1.7-3.3-2.9c-2.8-2.5-6.7-6.2-11.5-10.9c-9.4-9.4-21.9-23-34.5-39.7C26.4 324.5 0 277.1 0 224c0-53.7 26.9-93.6 52.7-119.3c12.9-12.9 25.8-22.6 35.4-29C93 72.5 97 70 99.9 68.4c1.5-.8 2.6-1.5 3.5-1.9l1-.5 .3-.2 .1 0 0 0 0 0s0 0 7.2 14.3l-7.2-14.3c6.5-3.2 14.3-1.7 19.2 3.7s5.3 13.4 1.3 19.5l-2.8 4.2C105.2 119 96 149.5 96 180.6c0 51.9 25.6 100.6 68.4 130l41.1 28.2L240 362.6V343.5l-42.2-35.2c-5.9-4.9-7.5-13.2-3.8-19.9l0 0 0 0 0 0 .1-.1 .3-.6c.3-.5 .7-1.3 1.2-2.3c1-2 2.6-5 4.4-8.6c.5-.9 .9-1.9 1.4-2.9C167.1 254.6 144 218 144 176s23.1-78.6 57.3-97.8c-.5-1-1-2-1.4-2.9c-1.8-3.7-3.3-6.6-4.4-8.6c-.5-1-.9-1.8-1.2-2.3l-.3-.6-.1-.1 0 0 0 0 0 0c-3.6-6.7-2-15 3.8-19.9l48-40zM220.2 122.9c-17 11.5-28.2 31-28.2 53.1s11.2 41.6 28.2 53.1C227 210.2 232 190.9 232 176s-5-34.2-11.8-53.1zm71.5 106.2c17-11.5 28.2-31 28.2-53.1s-11.2-41.6-28.2-53.1C285 141.8 280 161.1 280 176s5 34.2 11.8 53.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"kickstarter\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3bb\",\n    \"label\": \"Kickstarter\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"kickstarter-k\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3bc\",\n    \"label\": \"Kickstarter K\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"kip-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Kip Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1c4\",\n    \"label\": \"Kip Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M340.8 88.3c13.4-11.5 15-31.7 3.5-45.1s-31.7-15-45.1-3.5L128 186.4V64c0-17.7-14.3-32-32-32S64 46.3 64 64V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V325.6L299.2 472.3c13.4 11.5 33.6 9.9 45.1-3.5s9.9-33.6-3.5-45.1L182.5 288H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H182.5L340.8 88.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M340.8 88.3c13.4-11.5 15-31.7 3.5-45.1s-31.7-15-45.1-3.5L128 186.4V64c0-17.7-14.3-32-32-32S64 46.3 64 64V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V325.6L299.2 472.3c13.4 11.5 33.6 9.9 45.1-3.5s9.9-33.6-3.5-45.1L182.5 288H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H182.5L340.8 88.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"kit-medical\": {\n    \"aliases\": {\n      \"names\": [\"first-aid\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f479\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"emergency\", \"emt\", \"health\", \"medical\", \"rescue\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f479\",\n    \"label\": \"Kit Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H96V32H64zm64 0V480H448V32H128zM512 480c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H480V480h32zM256 176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V288H208c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16h48V176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H96V32H64zm64 0V480H448V32H128zM512 480c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H480V480h32zM256 176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H320v48c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V288H208c-8.8 0-16-7.2-16-16V240c0-8.8 7.2-16 16-16h48V176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"kitchen-set\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chef\", \"cook\", \"cup\", \"kitchen\", \"pan\", \"pot\", \"skillet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e51a\",\n    \"label\": \"Kitchen Set\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M240 144A96 96 0 1 0 48 144a96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288C64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112h71.8c8.8-9.8 21.6-16 35.8-16H496c26.5 0 48 21.5 48 48s-21.5 48-48 48H392c-14.2 0-27-6.2-35.8-16H284.4zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24v8h96c13.3 0 24 10.7 24 24s-10.7 24-24 24H280c-13.3 0-24-10.7-24-24s10.7-24 24-24h96v-8c0-13.3 10.7-24 24-24zM288 464V352H512V464c0 26.5-21.5 48-48 48H336c-26.5 0-48-21.5-48-48zM48 320h80 16 32c26.5 0 48 21.5 48 48s-21.5 48-48 48H160c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V336c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16H160v32h16zM24 464H200c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M240 144A96 96 0 1 0 48 144a96 96 0 1 0 192 0zm44.4 32C269.9 240.1 212.5 288 144 288C64.5 288 0 223.5 0 144S64.5 0 144 0c68.5 0 125.9 47.9 140.4 112h71.8c8.8-9.8 21.6-16 35.8-16H496c26.5 0 48 21.5 48 48s-21.5 48-48 48H392c-14.2 0-27-6.2-35.8-16H284.4zM144 80a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c13.3 0 24 10.7 24 24v8h96c13.3 0 24 10.7 24 24s-10.7 24-24 24H280c-13.3 0-24-10.7-24-24s10.7-24 24-24h96v-8c0-13.3 10.7-24 24-24zM288 464V352H512V464c0 26.5-21.5 48-48 48H336c-26.5 0-48-21.5-48-48zM48 320h80 16 32c26.5 0 48 21.5 48 48s-21.5 48-48 48H160c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V336c0-8.8 7.2-16 16-16zm128 64c8.8 0 16-7.2 16-16s-7.2-16-16-16H160v32h16zM24 464H200c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"kiwi-bird\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f535\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bird\", \"fauna\", \"new zealand\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f535\",\n    \"label\": \"Kiwi Bird\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M291.2 388.4c31.2-18.8 64.7-36.4 101.1-36.4H448c4.6 0 9.1-.2 13.6-.7l85.3 121.9c4 5.7 11.3 8.2 17.9 6.1s11.2-8.3 11.2-15.3V224c0-70.7-57.3-128-128-128H392.3c-36.4 0-69.9-17.6-101.1-36.4C262.3 42.1 228.3 32 192 32C86 32 0 118 0 224c0 71.1 38.6 133.1 96 166.3V456c0 13.3 10.7 24 24 24s24-10.7 24-24V410c15.3 3.9 31.4 6 48 6c5.4 0 10.7-.2 16-.7V456c0 13.3 10.7 24 24 24s24-10.7 24-24V405.1c12.4-4.4 24.2-10 35.2-16.7zM448 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M291.2 388.4c31.2-18.8 64.7-36.4 101.1-36.4H448c4.6 0 9.1-.2 13.6-.7l85.3 121.9c4 5.7 11.3 8.2 17.9 6.1s11.2-8.3 11.2-15.3V224c0-70.7-57.3-128-128-128H392.3c-36.4 0-69.9-17.6-101.1-36.4C262.3 42.1 228.3 32 192 32C86 32 0 118 0 224c0 71.1 38.6 133.1 96 166.3V456c0 13.3 10.7 24 24 24s24-10.7 24-24V410c15.3 3.9 31.4 6 48 6c5.4 0 10.7-.2 16-.7V456c0 13.3 10.7 24 24 24s24-10.7 24-24V405.1c12.4-4.4 24.2-10 35.2-16.7zM448 200a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"korvue\": {\n    \"changes\": [\"5.0.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f42f\",\n    \"label\": \"KORVUE\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014458,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 446 512\\\"><path d=\\\"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 446, 512],\n        \"width\": 446,\n        \"height\": 512,\n        \"path\": \"M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"l\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"6c\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter L\", \"Latin Small Letter L\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"4c\",\n    \"label\": \"L\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 32c17.7 0 32 14.3 32 32V416H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 32c17.7 0 32 14.3 32 32V416H288c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"land-mine-on\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bomb\", \"danger\", \"explosion\", \"war\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e51b\",\n    \"label\": \"Land Mine On\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M344 24V168c0 13.3-10.7 24-24 24s-24-10.7-24-24V24c0-13.3 10.7-24 24-24s24 10.7 24 24zM192 320c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32v32H192V320zm-77.3 90.5c8.1-16.3 24.8-26.5 42.9-26.5H482.3c18.2 0 34.8 10.3 42.9 26.5l27.6 55.2C563.5 487 548 512 524.2 512H115.8c-23.8 0-39.3-25-28.6-46.3l27.6-55.2zM36.3 138.3c7.5-10.9 22.5-13.6 33.4-6.1l104 72c10.9 7.5 13.6 22.5 6.1 33.4s-22.5 13.6-33.4 6.1l-104-72c-10.9-7.5-13.6-22.5-6.1-33.4zm534.1-6.1c10.9-7.5 25.8-4.8 33.4 6.1s4.8 25.8-6.1 33.4l-104 72c-10.9 7.5-25.8 4.8-33.4-6.1s-4.8-25.8 6.1-33.4l104-72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M344 24V168c0 13.3-10.7 24-24 24s-24-10.7-24-24V24c0-13.3 10.7-24 24-24s24 10.7 24 24zM192 320c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32v32H192V320zm-77.3 90.5c8.1-16.3 24.8-26.5 42.9-26.5H482.3c18.2 0 34.8 10.3 42.9 26.5l27.6 55.2C563.5 487 548 512 524.2 512H115.8c-23.8 0-39.3-25-28.6-46.3l27.6-55.2zM36.3 138.3c7.5-10.9 22.5-13.6 33.4-6.1l104 72c10.9 7.5 13.6 22.5 6.1 33.4s-22.5 13.6-33.4 6.1l-104-72c-10.9-7.5-13.6-22.5-6.1-33.4zm534.1-6.1c10.9-7.5 25.8-4.8 33.4 6.1s4.8 25.8-6.1 33.4l-104 72c-10.9 7.5-25.8 4.8-33.4-6.1s-4.8-25.8 6.1-33.4l104-72z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"landmark\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3db\"],\n        \"secondary\": [\"10f66f\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"classical\",\n        \"historic\",\n        \"memorable\",\n        \"monument\",\n        \"museum\",\n        \"politics\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f66f\",\n    \"label\": \"Landmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M240.1 4.2c9.8-5.6 21.9-5.6 31.8 0l171.8 98.1L448 104l0 .9 47.9 27.4c12.6 7.2 18.8 22 15.1 36s-16.4 23.8-30.9 23.8H32c-14.5 0-27.2-9.8-30.9-23.8s2.5-28.8 15.1-36L64 104.9V104l4.4-1.6L240.1 4.2zM64 224h64V416h40V224h64V416h48V224h64V416h40V224h64V420.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512H32c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1V224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M240.1 4.2c9.8-5.6 21.9-5.6 31.8 0l171.8 98.1L448 104l0 .9 47.9 27.4c12.6 7.2 18.8 22 15.1 36s-16.4 23.8-30.9 23.8H32c-14.5 0-27.2-9.8-30.9-23.8s2.5-28.8 15.1-36L64 104.9V104l4.4-1.6L240.1 4.2zM64 224h64V416h40V224h64V416h48V224h64V416h40V224h64V420.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512H32c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1V224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"landmark-dome\": {\n    \"aliases\": {\n      \"names\": [\"landmark-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f752\"]\n      }\n    },\n    \"changes\": [\n      \"5.5.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"historic\", \"memorable\", \"monument\", \"politics\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f752\",\n    \"label\": \"Landmark Dome\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M248 0h16c13.3 0 24 10.7 24 24V34.7C368.4 48.1 431.9 111.6 445.3 192H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h2.7C80.1 111.6 143.6 48.1 224 34.7V24c0-13.3 10.7-24 24-24zM64 288h64V416h40V288h64V416h48V288h64V416h40V288h64V420.3c.6 .3 1.2 .7 1.7 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512H32c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M248 0h16c13.3 0 24 10.7 24 24V34.7C368.4 48.1 431.9 111.6 445.3 192H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h2.7C80.1 111.6 143.6 48.1 224 34.7V24c0-13.3 10.7-24 24-24zM64 288h64V416h40V288h64V416h48V288h64V416h40V288h64V420.3c.6 .3 1.2 .7 1.7 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512H32c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1V288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"landmark-flag\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"capitol\", \"flag\", \"landmark\", \"memorial\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e51c\",\n    \"label\": \"Landmark Flag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M272 0h80c8.8 0 16 7.2 16 16V80c0 8.8-7.2 16-16 16H272v32H464c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H240V16c0-8.8 7.2-16 16-16h16zM64 224h64V416h40V224h64V416h48V224h64V416h40V224h64V420.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512H32c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1V224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M272 0h80c8.8 0 16 7.2 16 16V80c0 8.8-7.2 16-16 16H272v32H464c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H240V16c0-8.8 7.2-16 16-16h16zM64 224h64V416h40V224h64V416h48V224h64V416h40V224h64V420.3c.6 .3 1.2 .7 1.8 1.1l48 32c11.7 7.8 17 22.4 12.9 35.9S494.1 512 480 512H32c-14.1 0-26.5-9.2-30.6-22.7s1.1-28.1 12.9-35.9l48-32c.6-.4 1.2-.7 1.8-1.1V224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"language\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1ab\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"dialect\",\n        \"idiom\",\n        \"localize\",\n        \"speech\",\n        \"translate\",\n        \"vernacular\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1ab\",\n    \"label\": \"Language\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"laptop\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4bb\"],\n        \"secondary\": [\"10f109\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"computer\",\n        \"cpu\",\n        \"dell\",\n        \"demo\",\n        \"device\",\n        \"laptop\",\n        \"mac\",\n        \"macbook\",\n        \"machine\",\n        \"pc\",\n        \"personal\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f109\",\n    \"label\": \"Laptop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M128 32C92.7 32 64 60.7 64 96V352h64V96H512V352h64V96c0-35.3-28.7-64-64-64H128zM19.2 384C8.6 384 0 392.6 0 403.2C0 445.6 34.4 480 76.8 480H563.2c42.4 0 76.8-34.4 76.8-76.8c0-10.6-8.6-19.2-19.2-19.2H19.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M128 32C92.7 32 64 60.7 64 96V352h64V96H512V352h64V96c0-35.3-28.7-64-64-64H128zM19.2 384C8.6 384 0 392.6 0 403.2C0 445.6 34.4 480 76.8 480H563.2c42.4 0 76.8-34.4 76.8-76.8c0-10.6-8.6-19.2-19.2-19.2H19.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"laptop-code\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5fc\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"computer\",\n        \"cpu\",\n        \"dell\",\n        \"demo\",\n        \"develop\",\n        \"device\",\n        \"mac\",\n        \"macbook\",\n        \"machine\",\n        \"pc\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5fc\",\n    \"label\": \"Laptop Code\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 96c0-35.3 28.7-64 64-64H512c35.3 0 64 28.7 64 64V352H512V96H128V352H64V96zM0 403.2C0 392.6 8.6 384 19.2 384H620.8c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8H76.8C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 96c0-35.3 28.7-64 64-64H512c35.3 0 64 28.7 64 64V352H512V96H128V352H64V96zM0 403.2C0 392.6 8.6 384 19.2 384H620.8c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8H76.8C34.4 480 0 445.6 0 403.2zM281 209l-31 31 31 31c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-48-48c-9.4-9.4-9.4-24.6 0-33.9l48-48c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM393 175l48 48c9.4 9.4 9.4 24.6 0 33.9l-48 48c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l31-31-31-31c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"laptop-file\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"computer\", \"education\", \"laptop\", \"learning\", \"remote work\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e51d\",\n    \"label\": \"Laptop File\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M128 0C92.7 0 64 28.7 64 64V288H19.2C8.6 288 0 296.6 0 307.2C0 349.6 34.4 384 76.8 384H320V288H128V64H448V96h64V64c0-35.3-28.7-64-64-64H128zM512 128H400c-26.5 0-48 21.5-48 48V464c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V256H544c-17.7 0-32-14.3-32-32V128zm32 0v96h96l-96-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M128 0C92.7 0 64 28.7 64 64V288H19.2C8.6 288 0 296.6 0 307.2C0 349.6 34.4 384 76.8 384H320V288H128V64H448V96h64V64c0-35.3-28.7-64-64-64H128zM512 128H400c-26.5 0-48 21.5-48 48V464c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V256H544c-17.7 0-32-14.3-32-32V128zm32 0v96h96l-96-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"laptop-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f812\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"computer\",\n        \"device\",\n        \"ehr\",\n        \"electronic health records\",\n        \"history\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f812\",\n    \"label\": \"Laptop Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 96c0-35.3 28.7-64 64-64H512c35.3 0 64 28.7 64 64V352H512V96H128V352H64V96zM0 403.2C0 392.6 8.6 384 19.2 384H620.8c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8H76.8C34.4 480 0 445.6 0 403.2zM288 160c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H352v48c0 8.8-7.2 16-16 16H304c-8.8 0-16-7.2-16-16V272H240c-8.8 0-16-7.2-16-16V224c0-8.8 7.2-16 16-16h48V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 96c0-35.3 28.7-64 64-64H512c35.3 0 64 28.7 64 64V352H512V96H128V352H64V96zM0 403.2C0 392.6 8.6 384 19.2 384H620.8c10.6 0 19.2 8.6 19.2 19.2c0 42.4-34.4 76.8-76.8 76.8H76.8C34.4 480 0 445.6 0 403.2zM288 160c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H352v48c0 8.8-7.2 16-16 16H304c-8.8 0-16-7.2-16-16V272H240c-8.8 0-16-7.2-16-16V224c0-8.8 7.2-16 16-16h48V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"laravel\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\", \"5.11.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3bd\",\n    \"label\": \"Laravel\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M504.4,115.83a5.72,5.72,0,0,0-.28-.68,8.52,8.52,0,0,0-.53-1.25,6,6,0,0,0-.54-.71,9.36,9.36,0,0,0-.72-.94c-.23-.22-.52-.4-.77-.6a8.84,8.84,0,0,0-.9-.68L404.4,55.55a8,8,0,0,0-8,0L300.12,111h0a8.07,8.07,0,0,0-.88.69,7.68,7.68,0,0,0-.78.6,8.23,8.23,0,0,0-.72.93c-.17.24-.39.45-.54.71a9.7,9.7,0,0,0-.52,1.25c-.08.23-.21.44-.28.68a8.08,8.08,0,0,0-.28,2.08V223.18l-80.22,46.19V63.44a7.8,7.8,0,0,0-.28-2.09c-.06-.24-.2-.45-.28-.68a8.35,8.35,0,0,0-.52-1.24c-.14-.26-.37-.47-.54-.72a9.36,9.36,0,0,0-.72-.94,9.46,9.46,0,0,0-.78-.6,9.8,9.8,0,0,0-.88-.68h0L115.61,1.07a8,8,0,0,0-8,0L11.34,56.49h0a6.52,6.52,0,0,0-.88.69,7.81,7.81,0,0,0-.79.6,8.15,8.15,0,0,0-.71.93c-.18.25-.4.46-.55.72a7.88,7.88,0,0,0-.51,1.24,6.46,6.46,0,0,0-.29.67,8.18,8.18,0,0,0-.28,2.1v329.7a8,8,0,0,0,4,6.95l192.5,110.84a8.83,8.83,0,0,0,1.33.54c.21.08.41.2.63.26a7.92,7.92,0,0,0,4.1,0c.2-.05.37-.16.55-.22a8.6,8.6,0,0,0,1.4-.58L404.4,400.09a8,8,0,0,0,4-6.95V287.88l92.24-53.11a8,8,0,0,0,4-7V117.92A8.63,8.63,0,0,0,504.4,115.83ZM111.6,17.28h0l80.19,46.15-80.2,46.18L31.41,63.44Zm88.25,60V278.6l-46.53,26.79-33.69,19.4V123.5l46.53-26.79Zm0,412.78L23.37,388.5V77.32L57.06,96.7l46.52,26.8V338.68a6.94,6.94,0,0,0,.12.9,8,8,0,0,0,.16,1.18h0a5.92,5.92,0,0,0,.38.9,6.38,6.38,0,0,0,.42,1v0a8.54,8.54,0,0,0,.6.78,7.62,7.62,0,0,0,.66.84l0,0c.23.22.52.38.77.58a8.93,8.93,0,0,0,.86.66l0,0,0,0,92.19,52.18Zm8-106.17-80.06-45.32,84.09-48.41,92.26-53.11,80.13,46.13-58.8,33.56Zm184.52,4.57L215.88,490.11V397.8L346.6,323.2l45.77-26.15Zm0-119.13L358.68,250l-46.53-26.79V131.79l33.69,19.4L392.37,178Zm8-105.28-80.2-46.17,80.2-46.16,80.18,46.15Zm8,105.28V178L455,151.19l33.68-19.4v91.39h0Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M504.4,115.83a5.72,5.72,0,0,0-.28-.68,8.52,8.52,0,0,0-.53-1.25,6,6,0,0,0-.54-.71,9.36,9.36,0,0,0-.72-.94c-.23-.22-.52-.4-.77-.6a8.84,8.84,0,0,0-.9-.68L404.4,55.55a8,8,0,0,0-8,0L300.12,111h0a8.07,8.07,0,0,0-.88.69,7.68,7.68,0,0,0-.78.6,8.23,8.23,0,0,0-.72.93c-.17.24-.39.45-.54.71a9.7,9.7,0,0,0-.52,1.25c-.08.23-.21.44-.28.68a8.08,8.08,0,0,0-.28,2.08V223.18l-80.22,46.19V63.44a7.8,7.8,0,0,0-.28-2.09c-.06-.24-.2-.45-.28-.68a8.35,8.35,0,0,0-.52-1.24c-.14-.26-.37-.47-.54-.72a9.36,9.36,0,0,0-.72-.94,9.46,9.46,0,0,0-.78-.6,9.8,9.8,0,0,0-.88-.68h0L115.61,1.07a8,8,0,0,0-8,0L11.34,56.49h0a6.52,6.52,0,0,0-.88.69,7.81,7.81,0,0,0-.79.6,8.15,8.15,0,0,0-.71.93c-.18.25-.4.46-.55.72a7.88,7.88,0,0,0-.51,1.24,6.46,6.46,0,0,0-.29.67,8.18,8.18,0,0,0-.28,2.1v329.7a8,8,0,0,0,4,6.95l192.5,110.84a8.83,8.83,0,0,0,1.33.54c.21.08.41.2.63.26a7.92,7.92,0,0,0,4.1,0c.2-.05.37-.16.55-.22a8.6,8.6,0,0,0,1.4-.58L404.4,400.09a8,8,0,0,0,4-6.95V287.88l92.24-53.11a8,8,0,0,0,4-7V117.92A8.63,8.63,0,0,0,504.4,115.83ZM111.6,17.28h0l80.19,46.15-80.2,46.18L31.41,63.44Zm88.25,60V278.6l-46.53,26.79-33.69,19.4V123.5l46.53-26.79Zm0,412.78L23.37,388.5V77.32L57.06,96.7l46.52,26.8V338.68a6.94,6.94,0,0,0,.12.9,8,8,0,0,0,.16,1.18h0a5.92,5.92,0,0,0,.38.9,6.38,6.38,0,0,0,.42,1v0a8.54,8.54,0,0,0,.6.78,7.62,7.62,0,0,0,.66.84l0,0c.23.22.52.38.77.58a8.93,8.93,0,0,0,.86.66l0,0,0,0,92.19,52.18Zm8-106.17-80.06-45.32,84.09-48.41,92.26-53.11,80.13,46.13-58.8,33.56Zm184.52,4.57L215.88,490.11V397.8L346.6,323.2l45.77-26.15Zm0-119.13L358.68,250l-46.53-26.79V131.79l33.69,19.4L392.37,178Zm8-105.28-80.2-46.17,80.2-46.16,80.18,46.15Zm8,105.28V178L455,151.19l33.68-19.4v91.39h0Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"lari-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Lari Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1c8\",\n    \"label\": \"Lari Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M144 32c17.7 0 32 14.3 32 32V96.7c5.3-.4 10.6-.7 16-.7s10.7 .2 16 .7V64c0-17.7 14.3-32 32-32s32 14.3 32 32v49.4c54.9 25.2 95.8 75.5 108.2 136.2c3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.1-29.9-22.5-55.9-45.4-74.3V256c0 17.7-14.3 32-32 32s-32-14.3-32-32V161c-5.2-.7-10.6-1-16-1s-10.8 .3-16 1v95c0 17.7-14.3 32-32 32s-32-14.3-32-32V188.1C82.7 211.5 64 247.6 64 288c0 70.7 57.3 128 128 128H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H192 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48.9C18.5 382 0 337.2 0 288c0-77.5 45.9-144.3 112-174.6V64c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M144 32c17.7 0 32 14.3 32 32V96.7c5.3-.4 10.6-.7 16-.7s10.7 .2 16 .7V64c0-17.7 14.3-32 32-32s32 14.3 32 32v49.4c54.9 25.2 95.8 75.5 108.2 136.2c3.5 17.3-7.7 34.2-25 37.7s-34.2-7.7-37.7-25c-6.1-29.9-22.5-55.9-45.4-74.3V256c0 17.7-14.3 32-32 32s-32-14.3-32-32V161c-5.2-.7-10.6-1-16-1s-10.8 .3-16 1v95c0 17.7-14.3 32-32 32s-32-14.3-32-32V188.1C82.7 211.5 64 247.6 64 288c0 70.7 57.3 128 128 128H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H192 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48.9C18.5 382 0 337.2 0 288c0-77.5 45.9-144.3 112-174.6V64c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lastfm\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f202\",\n    \"label\": \"last.fm\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014483,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"layer-group\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5fd\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrange\", \"develop\", \"layers\", \"map\", \"stack\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5fd\",\n    \"label\": \"Layer Group\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M264.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 149.8C37.4 145.8 32 137.3 32 128s5.4-17.9 13.9-21.8L264.5 5.2zM476.9 209.6l53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 277.8C37.4 273.8 32 265.3 32 256s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0l152-70.2zm-152 198.2l152-70.2 53.2 24.6c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L45.9 405.8C37.4 401.8 32 393.3 32 384s5.4-17.9 13.9-21.8l53.2-24.6 152 70.2c23.4 10.8 50.4 10.8 73.8 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"leaf\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f06c\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"eco\", \"flora\", \"nature\", \"plant\", \"vegan\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f06c\",\n    \"label\": \"Leaf\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M272 96c-78.6 0-145.1 51.5-167.7 122.5c33.6-17 71.5-26.5 111.7-26.5h88c8.8 0 16 7.2 16 16s-7.2 16-16 16H288 216s0 0 0 0c-16.6 0-32.7 1.9-48.2 5.4c-25.9 5.9-50 16.4-71.4 30.7c0 0 0 0 0 0C38.3 298.8 0 364.9 0 440v16c0 13.3 10.7 24 24 24s24-10.7 24-24V440c0-48.7 20.7-92.5 53.8-123.2C121.6 392.3 190.3 448 272 448l1 0c132.1-.7 239-130.9 239-291.4c0-42.6-7.5-83.1-21.1-119.6c-2.6-6.9-12.7-6.6-16.2-.1C455.9 72.1 418.7 96 376 96L272 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M272 96c-78.6 0-145.1 51.5-167.7 122.5c33.6-17 71.5-26.5 111.7-26.5h88c8.8 0 16 7.2 16 16s-7.2 16-16 16H288 216s0 0 0 0c-16.6 0-32.7 1.9-48.2 5.4c-25.9 5.9-50 16.4-71.4 30.7c0 0 0 0 0 0C38.3 298.8 0 364.9 0 440v16c0 13.3 10.7 24 24 24s24-10.7 24-24V440c0-48.7 20.7-92.5 53.8-123.2C121.6 392.3 190.3 448 272 448l1 0c132.1-.7 239-130.9 239-291.4c0-42.6-7.5-83.1-21.1-119.6c-2.6-6.9-12.7-6.6-16.2-.1C455.9 72.1 418.7 96 376 96L272 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"leanpub\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f212\",\n    \"label\": \"Leanpub\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"left-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-alt-left\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f30a\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"back\", \"long-arrow-left\", \"previous\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f30a\",\n    \"label\": \"Left Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M177.5 414c-8.8 3.8-19 2-26-4.6l-144-136C2.7 268.9 0 262.6 0 256s2.7-12.9 7.5-17.4l144-136c7-6.6 17.2-8.4 26-4.6s14.5 12.5 14.5 22l0 72 288 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-288 0 0 72c0 9.6-5.7 18.2-14.5 22z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M177.5 414c-8.8 3.8-19 2-26-4.6l-144-136C2.7 268.9 0 262.6 0 256s2.7-12.9 7.5-17.4l144-136c7-6.6 17.2-8.4 26-4.6s14.5 12.5 14.5 22l0 72 288 0c17.7 0 32 14.3 32 32l0 64c0 17.7-14.3 32-32 32l-288 0 0 72c0 9.6-5.7 18.2-14.5 22z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"left-right\": {\n    \"aliases\": {\n      \"names\": [\"arrows-alt-h\"],\n      \"unicodes\": {\n        \"composite\": [\"2194\"],\n        \"secondary\": [\"10f337\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"arrows-h\",\n        \"expand\",\n        \"horizontal\",\n        \"landscape\",\n        \"left-right arrow\",\n        \"resize\",\n        \"wide\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f337\",\n    \"label\": \"Left Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M504.3 273.6c4.9-4.5 7.7-10.9 7.7-17.6s-2.8-13-7.7-17.6l-112-104c-7-6.5-17.2-8.2-25.9-4.4s-14.4 12.5-14.4 22l0 56-192 0 0-56c0-9.5-5.7-18.2-14.4-22s-18.9-2.1-25.9 4.4l-112 104C2.8 243 0 249.3 0 256s2.8 13 7.7 17.6l112 104c7 6.5 17.2 8.2 25.9 4.4s14.4-12.5 14.4-22l0-56 192 0 0 56c0 9.5 5.7 18.2 14.4 22s18.9 2.1 25.9-4.4l112-104z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M504.3 273.6c4.9-4.5 7.7-10.9 7.7-17.6s-2.8-13-7.7-17.6l-112-104c-7-6.5-17.2-8.2-25.9-4.4s-14.4 12.5-14.4 22l0 56-192 0 0-56c0-9.5-5.7-18.2-14.4-22s-18.9-2.1-25.9 4.4l-112 104C2.8 243 0 249.3 0 256s2.8 13 7.7 17.6l112 104c7 6.5 17.2 8.2 25.9 4.4s14.4-12.5 14.4-22l0-56 192 0 0 56c0 9.5 5.7 18.2 14.4 22s18.9 2.1 25.9-4.4l112-104z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lemon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f34b\"],\n        \"secondary\": [\"10f094\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"citrus\", \"fruit\", \"lemon\", \"lemonade\", \"lime\", \"tart\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f094\",\n    \"label\": \"Lemon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 96c0-35.3-28.7-64-64-64c-6.6 0-13 1-19 2.9c-22.5 7-48.1 14.9-71 9c-75.2-19.1-156.4 11-213.7 68.3S-7.2 250.8 11.9 326c5.8 22.9-2 48.4-9 71C1 403 0 409.4 0 416c0 35.3 28.7 64 64 64c6.6 0 13-1 19.1-2.9c22.5-7 48.1-14.9 71-9c75.2 19.1 156.4-11 213.7-68.3s87.5-138.5 68.3-213.7c-5.8-22.9 2-48.4 9-71c1.9-6 2.9-12.4 2.9-19.1zM212.5 127.4c-54.6 16-101.1 62.5-117.1 117.1C92.9 253 84 257.8 75.5 255.4S62.2 244 64.6 235.5c19.1-65.1 73.7-119.8 138.9-138.9c8.5-2.5 17.4 2.4 19.9 10.9s-2.4 17.4-10.9 19.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 96c0-35.3-28.7-64-64-64c-6.6 0-13 1-19 2.9c-22.5 7-48.1 14.9-71 9c-75.2-19.1-156.4 11-213.7 68.3S-7.2 250.8 11.9 326c5.8 22.9-2 48.4-9 71C1 403 0 409.4 0 416c0 35.3 28.7 64 64 64c6.6 0 13-1 19.1-2.9c22.5-7 48.1-14.9 71-9c75.2 19.1 156.4-11 213.7-68.3s87.5-138.5 68.3-213.7c-5.8-22.9 2-48.4 9-71c1.9-6 2.9-12.4 2.9-19.1zM212.5 127.4c-54.6 16-101.1 62.5-117.1 117.1C92.9 253 84 257.8 75.5 255.4S62.2 244 64.6 235.5c19.1-65.1 73.7-119.8 138.9-138.9c8.5-2.5 17.4 2.4 19.9 10.9s-2.4 17.4-10.9 19.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M368 80c-3.2 0-6.2 .4-8.9 1.3C340 86.8 313 91.9 284.8 84.6C227.4 69.7 160.2 92 110.1 142.1S37.7 259.4 52.6 316.8c7.3 28.2 2.2 55.2-3.3 74.3c-.8 2.8-1.3 5.8-1.3 8.9c0 17.7 14.3 32 32 32c3.2 0 6.2-.4 8.9-1.3c19.1-5.5 46.1-10.7 74.3-3.3c57.4 14.9 124.6-7.4 174.7-57.5s72.4-117.3 57.5-174.7c-7.3-28.2-2.2-55.2 3.3-74.3c.8-2.8 1.3-5.8 1.3-8.9c0-17.7-14.3-32-32-32zm0-48c44.2 0 80 35.8 80 80c0 7.7-1.1 15.2-3.1 22.3c-4.6 15.8-7.1 32.9-3 48.9c20.1 77.6-10.9 161.5-70 220.7s-143.1 90.2-220.7 70c-16-4.1-33-1.6-48.9 3c-7.1 2-14.6 3.1-22.3 3.1c-44.2 0-80-35.8-80-80c0-7.7 1.1-15.2 3.1-22.3c4.6-15.8 7.1-32.9 3-48.9C-14 251.3 17 167.3 76.2 108.2S219.3 18 296.8 38.1c16 4.1 33 1.6 48.9-3c7.1-2 14.6-3.1 22.3-3.1zM246.7 167c-52 15.2-96.5 59.7-111.7 111.7c-3.7 12.7-17.1 20-29.8 16.3s-20-17.1-16.3-29.8c19.8-67.7 76.6-124.5 144.3-144.3c12.7-3.7 26.1 3.6 29.8 16.3s-3.6 26.1-16.3 29.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M368 80c-3.2 0-6.2 .4-8.9 1.3C340 86.8 313 91.9 284.8 84.6C227.4 69.7 160.2 92 110.1 142.1S37.7 259.4 52.6 316.8c7.3 28.2 2.2 55.2-3.3 74.3c-.8 2.8-1.3 5.8-1.3 8.9c0 17.7 14.3 32 32 32c3.2 0 6.2-.4 8.9-1.3c19.1-5.5 46.1-10.7 74.3-3.3c57.4 14.9 124.6-7.4 174.7-57.5s72.4-117.3 57.5-174.7c-7.3-28.2-2.2-55.2 3.3-74.3c.8-2.8 1.3-5.8 1.3-8.9c0-17.7-14.3-32-32-32zm0-48c44.2 0 80 35.8 80 80c0 7.7-1.1 15.2-3.1 22.3c-4.6 15.8-7.1 32.9-3 48.9c20.1 77.6-10.9 161.5-70 220.7s-143.1 90.2-220.7 70c-16-4.1-33-1.6-48.9 3c-7.1 2-14.6 3.1-22.3 3.1c-44.2 0-80-35.8-80-80c0-7.7 1.1-15.2 3.1-22.3c4.6-15.8 7.1-32.9 3-48.9C-14 251.3 17 167.3 76.2 108.2S219.3 18 296.8 38.1c16 4.1 33 1.6 48.9-3c7.1-2 14.6-3.1 22.3-3.1zM246.7 167c-52 15.2-96.5 59.7-111.7 111.7c-3.7 12.7-17.1 20-29.8 16.3s-20-17.1-16.3-29.8c19.8-67.7 76.6-124.5 144.3-144.3c12.7-3.7 26.1 3.6 29.8 16.3s-3.6 26.1-16.3 29.8z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"less\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f41d\",\n    \"label\": \"Less\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-51.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"less-than\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f536\"],\n        \"primary\": [\"f536\"],\n        \"secondary\": [\"103c\", \"10f536\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Less-Than Sign\", \"arithmetic\", \"compare\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"3c\",\n    \"label\": \"Less Than\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M380.6 81.7c7.9 15.8 1.5 35-14.3 42.9L103.6 256 366.3 387.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-320-160C6.8 279.2 0 268.1 0 256s6.8-23.2 17.7-28.6l320-160c15.8-7.9 35-1.5 42.9 14.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M380.6 81.7c7.9 15.8 1.5 35-14.3 42.9L103.6 256 366.3 387.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-320-160C6.8 279.2 0 268.1 0 256s6.8-23.2 17.7-28.6l320-160c15.8-7.9 35-1.5 42.9 14.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"less-than-equal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f537\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arithmetic\", \"compare\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f537\",\n    \"label\": \"Less Than Equal\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M395.9 93.7c16.4-6.6 24.4-25.2 17.8-41.6s-25.2-24.4-41.6-17.8l-320 128C40 167.1 32 178.9 32 192s8 24.9 20.1 29.7l320 128c16.4 6.6 35-1.4 41.6-17.8s-1.4-35-17.8-41.6L150.2 192 395.9 93.7zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M395.9 93.7c16.4-6.6 24.4-25.2 17.8-41.6s-25.2-24.4-41.6-17.8l-320 128C40 167.1 32 178.9 32 192s8 24.9 20.1 29.7l320 128c16.4 6.6 35-1.4 41.6-17.8s-1.4-35-17.8-41.6L150.2 192 395.9 93.7zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"life-ring\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1cd\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"coast guard\", \"help\", \"overboard\", \"save\", \"support\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1cd\",\n    \"label\": \"Life Ring\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M367.2 412.5C335.9 434.9 297.5 448 256 448s-79.9-13.1-111.2-35.5l58-58c15.8 8.6 34 13.5 53.3 13.5s37.4-4.9 53.3-13.5l58 58zm90.7 .8c33.8-43.4 54-98 54-157.3s-20.2-113.9-54-157.3c9-12.5 7.9-30.1-3.4-41.3S425.8 45 413.3 54C369.9 20.2 315.3 0 256 0S142.1 20.2 98.7 54c-12.5-9-30.1-7.9-41.3 3.4S45 86.2 54 98.7C20.2 142.1 0 196.7 0 256s20.2 113.9 54 157.3c-9 12.5-7.9 30.1 3.4 41.3S86.2 467 98.7 458c43.4 33.8 98 54 157.3 54s113.9-20.2 157.3-54c12.5 9 30.1 7.9 41.3-3.4s12.4-28.8 3.4-41.3zm-45.5-46.1l-58-58c8.6-15.8 13.5-34 13.5-53.3s-4.9-37.4-13.5-53.3l58-58C434.9 176.1 448 214.5 448 256s-13.1 79.9-35.5 111.2zM367.2 99.5l-58 58c-15.8-8.6-34-13.5-53.3-13.5s-37.4 4.9-53.3 13.5l-58-58C176.1 77.1 214.5 64 256 64s79.9 13.1 111.2 35.5zM157.5 309.3l-58 58C77.1 335.9 64 297.5 64 256s13.1-79.9 35.5-111.2l58 58c-8.6 15.8-13.5 34-13.5 53.3s4.9 37.4 13.5 53.3zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M367.2 412.5C335.9 434.9 297.5 448 256 448s-79.9-13.1-111.2-35.5l58-58c15.8 8.6 34 13.5 53.3 13.5s37.4-4.9 53.3-13.5l58 58zm90.7 .8c33.8-43.4 54-98 54-157.3s-20.2-113.9-54-157.3c9-12.5 7.9-30.1-3.4-41.3S425.8 45 413.3 54C369.9 20.2 315.3 0 256 0S142.1 20.2 98.7 54c-12.5-9-30.1-7.9-41.3 3.4S45 86.2 54 98.7C20.2 142.1 0 196.7 0 256s20.2 113.9 54 157.3c-9 12.5-7.9 30.1 3.4 41.3S86.2 467 98.7 458c43.4 33.8 98 54 157.3 54s113.9-20.2 157.3-54c12.5 9 30.1 7.9 41.3-3.4s12.4-28.8 3.4-41.3zm-45.5-46.1l-58-58c8.6-15.8 13.5-34 13.5-53.3s-4.9-37.4-13.5-53.3l58-58C434.9 176.1 448 214.5 448 256s-13.1 79.9-35.5 111.2zM367.2 99.5l-58 58c-15.8-8.6-34-13.5-53.3-13.5s-37.4 4.9-53.3 13.5l-58-58C176.1 77.1 214.5 64 256 64s79.9 13.1 111.2 35.5zM157.5 309.3l-58 58C77.1 335.9 64 297.5 64 256s13.1-79.9 35.5-111.2l58 58c-8.6 15.8-13.5 34-13.5 53.3s4.9 37.4 13.5 53.3zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M385.1 419.1C349.7 447.2 304.8 464 256 464s-93.7-16.8-129.1-44.9l80.4-80.4c14.3 8.4 31 13.3 48.8 13.3s34.5-4.8 48.8-13.3l80.4 80.4zm68.1 .2C489.9 374.9 512 318.1 512 256s-22.1-118.9-58.8-163.3L465 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L419.3 58.8C374.9 22.1 318.1 0 256 0S137.1 22.1 92.7 58.8L81 47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L58.8 92.7C22.1 137.1 0 193.9 0 256s22.1 118.9 58.8 163.3L47 431c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l11.8-11.8C137.1 489.9 193.9 512 256 512s118.9-22.1 163.3-58.8L431 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-11.8-11.8zm-34.1-34.1l-80.4-80.4c8.4-14.3 13.3-31 13.3-48.8s-4.8-34.5-13.3-48.8l80.4-80.4C447.2 162.3 464 207.2 464 256s-16.8 93.7-44.9 129.1zM385.1 92.9l-80.4 80.4c-14.3-8.4-31-13.3-48.8-13.3s-34.5 4.8-48.8 13.3L126.9 92.9C162.3 64.8 207.2 48 256 48s93.7 16.8 129.1 44.9zM173.3 304.8L92.9 385.1C64.8 349.7 48 304.8 48 256s16.8-93.7 44.9-129.1l80.4 80.4c-8.4 14.3-13.3 31-13.3 48.8s4.8 34.5 13.3 48.8zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M385.1 419.1C349.7 447.2 304.8 464 256 464s-93.7-16.8-129.1-44.9l80.4-80.4c14.3 8.4 31 13.3 48.8 13.3s34.5-4.8 48.8-13.3l80.4 80.4zm68.1 .2C489.9 374.9 512 318.1 512 256s-22.1-118.9-58.8-163.3L465 81c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L419.3 58.8C374.9 22.1 318.1 0 256 0S137.1 22.1 92.7 58.8L81 47c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L58.8 92.7C22.1 137.1 0 193.9 0 256s22.1 118.9 58.8 163.3L47 431c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l11.8-11.8C137.1 489.9 193.9 512 256 512s118.9-22.1 163.3-58.8L431 465c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-11.8-11.8zm-34.1-34.1l-80.4-80.4c8.4-14.3 13.3-31 13.3-48.8s-4.8-34.5-13.3-48.8l80.4-80.4C447.2 162.3 464 207.2 464 256s-16.8 93.7-44.9 129.1zM385.1 92.9l-80.4 80.4c-14.3-8.4-31-13.3-48.8-13.3s-34.5 4.8-48.8 13.3L126.9 92.9C162.3 64.8 207.2 48 256 48s93.7 16.8 129.1 44.9zM173.3 304.8L92.9 385.1C64.8 349.7 48 304.8 48 256s16.8-93.7 44.9-129.1l80.4 80.4c-8.4 14.3-13.3 31-13.3 48.8s4.8 34.5 13.3 48.8zM208 256a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"lightbulb\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4a1\"],\n        \"secondary\": [\"10f0eb\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"  comic\",\n        \"  electric\",\n        \"  idea\",\n        \"  innovation\",\n        \"  inspiration\",\n        \"  light\",\n        \"  light bulb\",\n        \" bulb\",\n        \"bulb\",\n        \"comic\",\n        \"electric\",\n        \"energy\",\n        \"idea\",\n        \"inspiration\",\n        \"mechanical\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0eb\",\n    \"label\": \"Lightbulb\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M272 384c9.6-31.9 29.5-59.1 49.2-86.2l0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4l0 0c19.8 27.1 39.7 54.4 49.2 86.2H272zM192 512c44.2 0 80-35.8 80-80V416H112v16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M272 384c9.6-31.9 29.5-59.1 49.2-86.2l0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4l0 0c19.8 27.1 39.7 54.4 49.2 86.2H272zM192 512c44.2 0 80-35.8 80-80V416H112v16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M297.2 248.9C311.6 228.3 320 203.2 320 176c0-70.7-57.3-128-128-128S64 105.3 64 176c0 27.2 8.4 52.3 22.8 72.9c3.7 5.3 8.1 11.3 12.8 17.7l0 0c12.9 17.7 28.3 38.9 39.8 59.8c10.4 19 15.7 38.8 18.3 57.5H109c-2.2-12-5.9-23.7-11.8-34.5c-9.9-18-22.2-34.9-34.5-51.8l0 0 0 0c-5.2-7.1-10.4-14.2-15.4-21.4C27.6 247.9 16 213.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176c0 37.3-11.6 71.9-31.4 100.3c-5 7.2-10.2 14.3-15.4 21.4l0 0 0 0c-12.3 16.8-24.6 33.7-34.5 51.8c-5.9 10.8-9.6 22.5-11.8 34.5H226.4c2.6-18.7 7.9-38.6 18.3-57.5c11.5-20.9 26.9-42.1 39.8-59.8l0 0 0 0 0 0c4.7-6.4 9-12.4 12.7-17.7zM192 128c-26.5 0-48 21.5-48 48c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16s-7.2 16-16 16zm0 384c-44.2 0-80-35.8-80-80V416H272v16c0 44.2-35.8 80-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M297.2 248.9C311.6 228.3 320 203.2 320 176c0-70.7-57.3-128-128-128S64 105.3 64 176c0 27.2 8.4 52.3 22.8 72.9c3.7 5.3 8.1 11.3 12.8 17.7l0 0c12.9 17.7 28.3 38.9 39.8 59.8c10.4 19 15.7 38.8 18.3 57.5H109c-2.2-12-5.9-23.7-11.8-34.5c-9.9-18-22.2-34.9-34.5-51.8l0 0 0 0c-5.2-7.1-10.4-14.2-15.4-21.4C27.6 247.9 16 213.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176c0 37.3-11.6 71.9-31.4 100.3c-5 7.2-10.2 14.3-15.4 21.4l0 0 0 0c-12.3 16.8-24.6 33.7-34.5 51.8c-5.9 10.8-9.6 22.5-11.8 34.5H226.4c2.6-18.7 7.9-38.6 18.3-57.5c11.5-20.9 26.9-42.1 39.8-59.8l0 0 0 0 0 0c4.7-6.4 9-12.4 12.7-17.7zM192 128c-26.5 0-48 21.5-48 48c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16s-7.2 16-16 16zm0 384c-44.2 0-80-35.8-80-80V416H272v16c0 44.2-35.8 80-80 80z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"line\": {\n    \"changes\": [\"5.0.0\", \"6.3.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3c0\",\n    \"label\": \"Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1672840969,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M311 196.8v81.3c0 2.1-1.6 3.7-3.7 3.7h-13c-1.3 0-2.4-.7-3-1.5l-37.3-50.3v48.2c0 2.1-1.6 3.7-3.7 3.7h-13c-2.1 0-3.7-1.6-3.7-3.7V196.9c0-2.1 1.6-3.7 3.7-3.7h12.9c1.1 0 2.4 .6 3 1.6l37.3 50.3V196.9c0-2.1 1.6-3.7 3.7-3.7h13c2.1-.1 3.8 1.6 3.8 3.5zm-93.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 2.1 1.6 3.7 3.7 3.7h13c2.1 0 3.7-1.6 3.7-3.7V196.8c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1H150.3V196.8c0-2.1-1.6-3.7-3.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 1 .3 1.8 1 2.5c.7 .6 1.5 1 2.5 1h52.2c2.1 0 3.7-1.6 3.7-3.7v-13c0-1.9-1.6-3.7-3.5-3.7zm193.7-68.1H327.3c-1.9 0-3.7 1.6-3.7 3.7v81.3c0 1.9 1.6 3.7 3.7 3.7h52.2c2.1 0 3.7-1.6 3.7-3.7V265c0-2.1-1.6-3.7-3.7-3.7H344V247.7h35.5c2.1 0 3.7-1.6 3.7-3.7V230.9c0-2.1-1.6-3.7-3.7-3.7H344V213.5h35.5c2.1 0 3.7-1.6 3.7-3.7v-13c-.1-1.9-1.7-3.7-3.7-3.7zM512 93.4V419.4c-.1 51.2-42.1 92.7-93.4 92.6H92.6C41.4 511.9-.1 469.8 0 418.6V92.6C.1 41.4 42.2-.1 93.4 0H419.4c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3s-186.4 67.9-186.4 151.3c0 74.7 66.3 137.4 155.9 149.3c21.8 4.7 19.3 12.7 14.4 42.1c-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M311 196.8v81.3c0 2.1-1.6 3.7-3.7 3.7h-13c-1.3 0-2.4-.7-3-1.5l-37.3-50.3v48.2c0 2.1-1.6 3.7-3.7 3.7h-13c-2.1 0-3.7-1.6-3.7-3.7V196.9c0-2.1 1.6-3.7 3.7-3.7h12.9c1.1 0 2.4 .6 3 1.6l37.3 50.3V196.9c0-2.1 1.6-3.7 3.7-3.7h13c2.1-.1 3.8 1.6 3.8 3.5zm-93.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 2.1 1.6 3.7 3.7 3.7h13c2.1 0 3.7-1.6 3.7-3.7V196.8c0-1.9-1.6-3.7-3.7-3.7zm-31.4 68.1H150.3V196.8c0-2.1-1.6-3.7-3.7-3.7h-13c-2.1 0-3.7 1.6-3.7 3.7v81.3c0 1 .3 1.8 1 2.5c.7 .6 1.5 1 2.5 1h52.2c2.1 0 3.7-1.6 3.7-3.7v-13c0-1.9-1.6-3.7-3.5-3.7zm193.7-68.1H327.3c-1.9 0-3.7 1.6-3.7 3.7v81.3c0 1.9 1.6 3.7 3.7 3.7h52.2c2.1 0 3.7-1.6 3.7-3.7V265c0-2.1-1.6-3.7-3.7-3.7H344V247.7h35.5c2.1 0 3.7-1.6 3.7-3.7V230.9c0-2.1-1.6-3.7-3.7-3.7H344V213.5h35.5c2.1 0 3.7-1.6 3.7-3.7v-13c-.1-1.9-1.7-3.7-3.7-3.7zM512 93.4V419.4c-.1 51.2-42.1 92.7-93.4 92.6H92.6C41.4 511.9-.1 469.8 0 418.6V92.6C.1 41.4 42.2-.1 93.4 0H419.4c51.2 .1 92.7 42.1 92.6 93.4zM441.6 233.5c0-83.4-83.7-151.3-186.4-151.3s-186.4 67.9-186.4 151.3c0 74.7 66.3 137.4 155.9 149.3c21.8 4.7 19.3 12.7 14.4 42.1c-.8 4.7-3.8 18.4 16.1 10.1s107.3-63.2 146.5-108.2c27-29.7 39.9-59.8 39.9-93.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"lines-leaning\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"canted\",\n        \"domino\",\n        \"falling\",\n        \"resilience\",\n        \"resilient\",\n        \"tipped\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e51e\",\n    \"label\": \"Lines Leaning\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M190.4 74.1c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-128 384c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l128-384zm70.9-41.7c-17.4-2.9-33.9 8.9-36.8 26.3l-64 384c-2.9 17.4 8.9 33.9 26.3 36.8s33.9-8.9 36.8-26.3l64-384c2.9-17.4-8.9-33.9-26.3-36.8zM352 32c-17.7 0-32 14.3-32 32V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M190.4 74.1c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2l-128 384c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l128-384zm70.9-41.7c-17.4-2.9-33.9 8.9-36.8 26.3l-64 384c-2.9 17.4 8.9 33.9 26.3 36.8s33.9-8.9 36.8-26.3l64-384c2.9-17.4-8.9-33.9-26.3-36.8zM352 32c-17.7 0-32 14.3-32 32V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"link\": {\n    \"aliases\": {\n      \"names\": [\"chain\"],\n      \"unicodes\": {\n        \"composite\": [\"1f517\"],\n        \"secondary\": [\"10f0c1\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"attach\", \"attachment\", \"chain\", \"connect\", \"lin\", \"link\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c1\",\n    \"label\": \"Link\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"link-slash\": {\n    \"aliases\": {\n      \"names\": [\"chain-broken\", \"chain-slash\", \"unlink\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f127\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"attachment\", \"chain\", \"chain-broken\", \"remove\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f127\",\n    \"label\": \"Link Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L489.3 358.2l90.5-90.5c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114l-96 96-31.9-25C430.9 239.6 420.1 175.1 377 132c-52.2-52.3-134.5-56.2-191.3-11.7L38.8 5.1zM239 162c30.1-14.9 67.7-9.9 92.8 15.3c20 20 27.5 48.3 21.7 74.5L239 162zM406.6 416.4L220.9 270c-2.1 39.8 12.2 80.1 42.2 110c38.9 38.9 94.4 51 143.6 36.3zm-290-228.5L60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5l61.8-61.8-50.6-39.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L489.3 358.2l90.5-90.5c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114l-96 96-31.9-25C430.9 239.6 420.1 175.1 377 132c-52.2-52.3-134.5-56.2-191.3-11.7L38.8 5.1zM239 162c30.1-14.9 67.7-9.9 92.8 15.3c20 20 27.5 48.3 21.7 74.5L239 162zM406.6 416.4L220.9 270c-2.1 39.8 12.2 80.1 42.2 110c38.9 38.9 94.4 51 143.6 36.3zm-290-228.5L60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5l61.8-61.8-50.6-39.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"linkedin\": {\n    \"changes\": [\"1.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linkedin-square\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f08c\",\n    \"label\": \"LinkedIn\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"linkedin-in\": {\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"5.4.1\", \"5.8.0\", \"5.8.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linkedin\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f0e1\",\n    \"label\": \"LinkedIn In\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"linode\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2b8\",\n    \"label\": \"Linode\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M366.036,186.867l-59.5,36.871-.838,36.871-29.329-19.273-39.384,24.3c2.238,55.211,2.483,59.271,2.51,59.5l-97.2,65.359L127.214,285.748l108.1-62.01L195.09,197.761l-75.417,38.547L98.723,93.015,227.771,43.574,136.432,0,10.737,39.385,38.39,174.3l41.9,32.681L48.445,222.062,69.394,323.457,98.723,351.11,77.774,363.679l16.76,78.769L160.733,512c-10.8-74.842-11.658-78.641-11.725-78.773l77.925-55.3c16.759-12.57,15.083-10.894,15.083-10.894l.838,24.3,33.519,28.491-.838-77.093,46.927-33.519,26.815-18.435-2.514,36.033,25.139,17.6,6.7-74.579,58.657-43.575Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M366.036,186.867l-59.5,36.871-.838,36.871-29.329-19.273-39.384,24.3c2.238,55.211,2.483,59.271,2.51,59.5l-97.2,65.359L127.214,285.748l108.1-62.01L195.09,197.761l-75.417,38.547L98.723,93.015,227.771,43.574,136.432,0,10.737,39.385,38.39,174.3l41.9,32.681L48.445,222.062,69.394,323.457,98.723,351.11,77.774,363.679l16.76,78.769L160.733,512c-10.8-74.842-11.658-78.641-11.725-78.773l77.925-55.3c16.759-12.57,15.083-10.894,15.083-10.894l.838,24.3,33.519,28.491-.838-77.093,46.927-33.519,26.815-18.435-2.514,36.033,25.139,17.6,6.7-74.579,58.657-43.575Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"linux\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"tux\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f17c\",\n    \"label\": \"Linux\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"lira-sign\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"20a4\"],\n        \"secondary\": [\"10f195\"]\n      }\n    },\n    \"changes\": [\n      \"4.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Lira Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f195\",\n    \"label\": \"Lira Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4V192H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H46c-2.2 10.5-6.1 20.6-11.7 29.9L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H88.5l.7-1.1c11.6-19.3 18.9-40.7 21.6-62.9H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V256H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V160.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4V192H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H46c-2.2 10.5-6.1 20.6-11.7 29.9L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H88.5l.7-1.1c11.6-19.3 18.9-40.7 21.6-62.9H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V256H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V160.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"list\": {\n    \"aliases\": {\n      \"names\": [\"list-squares\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f03a\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"completed\",\n        \"done\",\n        \"finished\",\n        \"ol\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f03a\",\n    \"label\": \"List\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M40 48C26.7 48 16 58.7 16 72v48c0 13.3 10.7 24 24 24H88c13.3 0 24-10.7 24-24V72c0-13.3-10.7-24-24-24H40zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zM16 232v48c0 13.3 10.7 24 24 24H88c13.3 0 24-10.7 24-24V232c0-13.3-10.7-24-24-24H40c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24H88c13.3 0 24-10.7 24-24V392c0-13.3-10.7-24-24-24H40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M40 48C26.7 48 16 58.7 16 72v48c0 13.3 10.7 24 24 24H88c13.3 0 24-10.7 24-24V72c0-13.3-10.7-24-24-24H40zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zM16 232v48c0 13.3 10.7 24 24 24H88c13.3 0 24-10.7 24-24V232c0-13.3-10.7-24-24-24H40c-13.3 0-24 10.7-24 24zM40 368c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24H88c13.3 0 24-10.7 24-24V392c0-13.3-10.7-24-24-24H40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"list-check\": {\n    \"aliases\": {\n      \"names\": [\"tasks\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0ae\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"downloading\",\n        \"downloads\",\n        \"loading\",\n        \"progress\",\n        \"project management\",\n        \"settings\",\n        \"to do\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ae\",\n    \"label\": \"List Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M152.1 38.2c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 113C-2.3 103.6-2.3 88.4 7 79s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zm0 160c9.9 8.9 10.7 24 1.8 33.9l-72 80c-4.4 4.9-10.6 7.8-17.2 7.9s-12.9-2.4-17.6-7L7 273c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.1 22.1 55.1-61.2c8.9-9.9 24-10.7 33.9-1.8zM224 96c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zm0 160c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zM160 416c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H192c-17.7 0-32-14.3-32-32zM48 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"list-ol\": {\n    \"aliases\": {\n      \"names\": [\"list-1-2\", \"list-numeric\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0cb\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"completed\",\n        \"done\",\n        \"finished\",\n        \"numbers\",\n        \"ol\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0cb\",\n    \"label\": \"List Ol\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H40c-13.3 0-24-10.7-24-24s10.7-24 24-24H56V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H32c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H40c-13.3 0-24-10.7-24-24s10.7-24 24-24H56V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H32c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"list-ul\": {\n    \"aliases\": {\n      \"names\": [\"list-dots\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0ca\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"completed\",\n        \"done\",\n        \"finished\",\n        \"ol\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ca\",\n    \"label\": \"List Ul\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zM64 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 144a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zM64 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm48-208a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"litecoin-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1d3\",\n    \"label\": \"Litecoin Sign\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M128 64c0-17.7-14.3-32-32-32S64 46.3 64 64V213.6L23.2 225.2c-17 4.9-26.8 22.6-22 39.6s22.6 26.8 39.6 22L64 280.1V448c0 17.7 14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H128V261.9l136.8-39.1c17-4.9 26.8-22.6 22-39.6s-22.6-26.8-39.6-22L128 195.3V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M128 64c0-17.7-14.3-32-32-32S64 46.3 64 64V213.6L23.2 225.2c-17 4.9-26.8 22.6-22 39.6s22.6 26.8 39.6 22L64 280.1V448c0 17.7 14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H128V261.9l136.8-39.1c17-4.9 26.8-22.6 22-39.6s-22.6-26.8-39.6-22L128 195.3V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"location-arrow\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f124\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"compass\",\n        \"coordinate\",\n        \"direction\",\n        \"gps\",\n        \"map\",\n        \"navigation\",\n        \"place\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f124\",\n    \"label\": \"Location Arrow\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M429.6 92.1c4.9-11.9 2.1-25.6-7-34.7s-22.8-11.9-34.7-7l-352 144c-14.2 5.8-22.2 20.8-19.3 35.8s16.1 25.8 31.4 25.8H224V432c0 15.3 10.8 28.4 25.8 31.4s30-5.1 35.8-19.3l144-352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M429.6 92.1c4.9-11.9 2.1-25.6-7-34.7s-22.8-11.9-34.7-7l-352 144c-14.2 5.8-22.2 20.8-19.3 35.8s16.1 25.8 31.4 25.8H224V432c0 15.3 10.8 28.4 25.8 31.4s30-5.1 35.8-19.3l144-352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"location-crosshairs\": {\n    \"aliases\": {\n      \"names\": [\"location\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f601\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"coordinate\",\n        \"direction\",\n        \"gps\",\n        \"location\",\n        \"map\",\n        \"navigation\",\n        \"place\",\n        \"where\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f601\",\n    \"label\": \"Location Crosshairs\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c17.7 0 32 14.3 32 32V66.7C368.4 80.1 431.9 143.6 445.3 224H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H445.3C431.9 368.4 368.4 431.9 288 445.3V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C143.6 431.9 80.1 368.4 66.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H66.7C80.1 143.6 143.6 80.1 224 66.7V32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c17.7 0 32 14.3 32 32V66.7C368.4 80.1 431.9 143.6 445.3 224H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H445.3C431.9 368.4 368.4 431.9 288 445.3V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V445.3C143.6 431.9 80.1 368.4 66.7 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H66.7C80.1 143.6 143.6 80.1 224 66.7V32c0-17.7 14.3-32 32-32zM128 256a128 128 0 1 0 256 0 128 128 0 1 0 -256 0zm128-80a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"location-dot\": {\n    \"aliases\": {\n      \"names\": [\"map-marker-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3c5\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"coordinates\",\n        \"destination\",\n        \"gps\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"navigation\",\n        \"paper\",\n        \"pin\",\n        \"place\",\n        \"point of interest\",\n        \"position\",\n        \"route\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3c5\",\n    \"label\": \"Location Dot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"location-pin\": {\n    \"aliases\": {\n      \"names\": [\"map-marker\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f041\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"coordinates\",\n        \"destination\",\n        \"gps\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"navigation\",\n        \"paper\",\n        \"pin\",\n        \"place\",\n        \"point of interest\",\n        \"position\",\n        \"route\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f041\",\n    \"label\": \"Location Pin\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 192c0 87.4-117 243-168.3 307.2c-12.3 15.3-35.1 15.3-47.4 0C117 435 0 279.4 0 192C0 86 86 0 192 0S384 86 384 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"location-pin-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"closed\", \"lockdown\", \"map\", \"quarantine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e51f\",\n    \"label\": \"Location Pin Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M215.7 499.2c11-13.8 25.1-31.7 40.3-52.3V352c0-23.7 12.9-44.4 32-55.4V272c0-55.6 40.5-101.7 93.6-110.5C367 70 287.7 0 192 0C86 0 0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c17.7 0 32 14.3 32 32v48H368V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M215.7 499.2c11-13.8 25.1-31.7 40.3-52.3V352c0-23.7 12.9-44.4 32-55.4V272c0-55.6 40.5-101.7 93.6-110.5C367 70 287.7 0 192 0C86 0 0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 128a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM400 240c17.7 0 32 14.3 32 32v48H368V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H480c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lock\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f512\"],\n        \"secondary\": [\"10f023\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"closed\",\n        \"lock\",\n        \"locked\",\n        \"open\",\n        \"password\",\n        \"private\",\n        \"protect\",\n        \"security\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f023\",\n    \"label\": \"Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lock-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f3c1\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.0.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"lock\",\n        \"open\",\n        \"password\",\n        \"private\",\n        \"protect\",\n        \"security\",\n        \"unlock\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3c1\",\n    \"label\": \"Lock Open\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M352 144c0-44.2 35.8-80 80-80s80 35.8 80 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32V144C576 64.5 511.5 0 432 0S288 64.5 288 144v48H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H352V144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M352 144c0-44.2 35.8-80 80-80s80 35.8 80 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32V144C576 64.5 511.5 0 432 0S288 64.5 288 144v48H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H352V144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"locust\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"horde\", \"infestation\", \"locust\", \"plague\", \"swarm\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e520\",\n    \"label\": \"Locust\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24h16c98.7 0 180.6 71.4 197 165.4c-9-3.5-18.8-5.4-29-5.4H431.8l-41.8-97.5c-3.4-7.9-10.8-13.4-19.3-14.4s-17 2.7-22.1 9.6l-40.9 55.5-21.7-50.7c-3.3-7.8-10.5-13.2-18.9-14.3s-16.7 2.3-22 8.9l-240 304c-8.2 10.4-6.4 25.5 4 33.7s25.5 6.4 33.7-4l79.4-100.5 43 16.4-40.5 55c-7.9 10.7-5.6 25.7 5.1 33.6s25.7 5.6 33.6-5.1L215.1 400h74.5l-29.3 42.3c-7.5 10.9-4.8 25.8 6.1 33.4s25.8 4.8 33.4-6.1L348 400h80.4l38.8 67.9c6.6 11.5 21.2 15.5 32.7 8.9s15.5-21.2 8.9-32.7L483.6 400H496c44.1 0 79.8-35.7 80-79.7c0-.1 0-.2 0-.3V280C576 143 465 32 328 32H312zm50.5 168l17.1 40H333l29.5-40zm-87.7 38.1l-1.4 1.9H225.1l32.7-41.5 16.9 39.5zM88.8 240C57.4 240 32 265.4 32 296.8c0 15.5 6.3 30 16.9 40.4L126.7 240H88.8zM496 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M312 32c-13.3 0-24 10.7-24 24s10.7 24 24 24h16c98.7 0 180.6 71.4 197 165.4c-9-3.5-18.8-5.4-29-5.4H431.8l-41.8-97.5c-3.4-7.9-10.8-13.4-19.3-14.4s-17 2.7-22.1 9.6l-40.9 55.5-21.7-50.7c-3.3-7.8-10.5-13.2-18.9-14.3s-16.7 2.3-22 8.9l-240 304c-8.2 10.4-6.4 25.5 4 33.7s25.5 6.4 33.7-4l79.4-100.5 43 16.4-40.5 55c-7.9 10.7-5.6 25.7 5.1 33.6s25.7 5.6 33.6-5.1L215.1 400h74.5l-29.3 42.3c-7.5 10.9-4.8 25.8 6.1 33.4s25.8 4.8 33.4-6.1L348 400h80.4l38.8 67.9c6.6 11.5 21.2 15.5 32.7 8.9s15.5-21.2 8.9-32.7L483.6 400H496c44.1 0 79.8-35.7 80-79.7c0-.1 0-.2 0-.3V280C576 143 465 32 328 32H312zm50.5 168l17.1 40H333l29.5-40zm-87.7 38.1l-1.4 1.9H225.1l32.7-41.5 16.9 39.5zM88.8 240C57.4 240 32 265.4 32 296.8c0 15.5 6.3 30 16.9 40.4L126.7 240H88.8zM496 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lungs\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1fac1\"],\n        \"secondary\": [\"10f604\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"air\",\n        \"breath\",\n        \"covid-19\",\n        \"exhalation\",\n        \"inhalation\",\n        \"lungs\",\n        \"organ\",\n        \"respiration\",\n        \"respiratory\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f604\",\n    \"label\": \"Lungs\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 0c17.7 0 32 14.3 32 32V164.1c0 16.4 8.4 31.7 22.2 40.5l9.8 6.2V165.3C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4v7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2C414 480.5 384 442.1 384 398V325l90.5 57.6c7.5 4.7 17.3 2.5 22.1-4.9s2.5-17.3-4.9-22.1L384 287.1v-.4l-44.1-28.1c-7.3-4.6-13.9-10.1-19.9-16.1c-5.9 6-12.6 11.5-19.9 16.1L256 286.7 161.2 347l-13.5 8.6c0 0 0 0-.1 0c-7.4 4.8-9.6 14.6-4.8 22.1c4.7 7.5 14.6 9.7 22.1 4.9l91.1-58V398c0 44.1-30 82.5-72.7 93.1l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89v-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3v45.5l9.8-6.2c13.8-8.8 22.2-24.1 22.2-40.5V32c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 0c17.7 0 32 14.3 32 32V164.1c0 16.4 8.4 31.7 22.2 40.5l9.8 6.2V165.3C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4v7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2C414 480.5 384 442.1 384 398V325l90.5 57.6c7.5 4.7 17.3 2.5 22.1-4.9s2.5-17.3-4.9-22.1L384 287.1v-.4l-44.1-28.1c-7.3-4.6-13.9-10.1-19.9-16.1c-5.9 6-12.6 11.5-19.9 16.1L256 286.7 161.2 347l-13.5 8.6c0 0 0 0-.1 0c-7.4 4.8-9.6 14.6-4.8 22.1c4.7 7.5 14.6 9.7 22.1 4.9l91.1-58V398c0 44.1-30 82.5-72.7 93.1l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89v-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3v45.5l9.8-6.2c13.8-8.8 22.2-24.1 22.2-40.5V32c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lungs-virus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e067\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"breath\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flu\",\n        \"infection\",\n        \"pandemic\",\n        \"respiratory\",\n        \"sick\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e067\",\n    \"label\": \"Lungs Virus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 0c17.7 0 32 14.3 32 32V156.2c-8.5-7.6-19.7-12.2-32-12.2s-23.5 4.6-32 12.2V32c0-17.7 14.3-32 32-32zM444.5 195.5c-16.4-16.4-41.8-18.5-60.5-6.1V165.3C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4v7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2c-20.9-5.2-38.7-17.1-51.5-32.9c14 1.5 28.5-3 39.2-13.8l-22.6-22.6 22.6 22.6c18.7-18.7 18.7-49.1 0-67.9c-1.1-1.1-1.4-2-1.5-2.5c-.1-.8-.1-1.8 .4-2.9s1.2-1.9 1.8-2.3c.5-.3 1.3-.8 2.9-.8c26.5 0 48-21.5 48-48s-21.5-48-48-48c-1.6 0-2.4-.4-2.9-.8c-.6-.4-1.3-1.2-1.8-2.3s-.5-2.2-.4-2.9c.1-.6 .4-1.4 1.5-2.5c18.7-18.7 18.7-49.1 0-67.9zM421.8 421.8c-6.2 6.2-16.4 6.2-22.6 0C375.9 398.5 336 415 336 448c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C241.5 375.9 225 336 192 336c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C264.1 241.5 304 225 304 192c0-8.8 7.2-16 16-16s16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C398.5 264.1 415 304 448 304c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6zM183.3 491.2l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89v-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3v24.1c-18.6-12.4-44-10.3-60.5 6.1c-18.7 18.7-18.7 49.1 0 67.9c1.1 1.1 1.4 2 1.5 2.5c.1 .8 .1 1.8-.4 2.9s-1.2 1.9-1.8 2.3c-.5 .3-1.3 .8-2.9 .8c-26.5 0-48 21.5-48 48s21.5 48 48 48c1.6 0 2.4 .4 2.9 .8c.6 .4 1.3 1.2 1.8 2.3s.5 2.2 .4 2.9c-.1 .6-.4 1.4-1.5 2.5c-18.7 18.7-18.7 49.1 0 67.9c10.7 10.7 25.3 15.3 39.2 13.8c-12.8 15.9-30.6 27.7-51.5 32.9zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 0c17.7 0 32 14.3 32 32V156.2c-8.5-7.6-19.7-12.2-32-12.2s-23.5 4.6-32 12.2V32c0-17.7 14.3-32 32-32zM444.5 195.5c-16.4-16.4-41.8-18.5-60.5-6.1V165.3C384 127 415 96 453.3 96c21.7 0 42.8 10.2 55.8 28.8c15.4 22.1 44.3 65.4 71 116.9c26.5 50.9 52.4 112.5 59.6 170.3c.2 1.3 .2 2.6 .2 4v7c0 49.1-39.8 89-89 89c-7.3 0-14.5-.9-21.6-2.7l-72.7-18.2c-20.9-5.2-38.7-17.1-51.5-32.9c14 1.5 28.5-3 39.2-13.8l-22.6-22.6 22.6 22.6c18.7-18.7 18.7-49.1 0-67.9c-1.1-1.1-1.4-2-1.5-2.5c-.1-.8-.1-1.8 .4-2.9s1.2-1.9 1.8-2.3c.5-.3 1.3-.8 2.9-.8c26.5 0 48-21.5 48-48s-21.5-48-48-48c-1.6 0-2.4-.4-2.9-.8c-.6-.4-1.3-1.2-1.8-2.3s-.5-2.2-.4-2.9c.1-.6 .4-1.4 1.5-2.5c18.7-18.7 18.7-49.1 0-67.9zM421.8 421.8c-6.2 6.2-16.4 6.2-22.6 0C375.9 398.5 336 415 336 448c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C241.5 375.9 225 336 192 336c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C264.1 241.5 304 225 304 192c0-8.8 7.2-16 16-16s16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C398.5 264.1 415 304 448 304c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6zM183.3 491.2l-72.7 18.2c-7.1 1.8-14.3 2.7-21.6 2.7c-49.1 0-89-39.8-89-89v-7c0-1.3 .1-2.7 .2-4c7.2-57.9 33.1-119.4 59.6-170.3c26.8-51.5 55.6-94.8 71-116.9c13-18.6 34-28.8 55.8-28.8C225 96 256 127 256 165.3v24.1c-18.6-12.4-44-10.3-60.5 6.1c-18.7 18.7-18.7 49.1 0 67.9c1.1 1.1 1.4 2 1.5 2.5c.1 .8 .1 1.8-.4 2.9s-1.2 1.9-1.8 2.3c-.5 .3-1.3 .8-2.9 .8c-26.5 0-48 21.5-48 48s21.5 48 48 48c1.6 0 2.4 .4 2.9 .8c.6 .4 1.3 1.2 1.8 2.3s.5 2.2 .4 2.9c-.1 .6-.4 1.4-1.5 2.5c-18.7 18.7-18.7 49.1 0 67.9c10.7 10.7 25.3 15.3 39.2 13.8c-12.8 15.9-30.6 27.7-51.5 32.9zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"lyft\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3c3\",\n    \"label\": \"lyft\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"m\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"6d\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter M\", \"Latin Small Letter M\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"4d\",\n    \"label\": \"M\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M22.7 33.4c13.5-4.1 28.1 1.1 35.9 12.9L224 294.3 389.4 46.2c7.8-11.7 22.4-17 35.9-12.9S448 49.9 448 64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V169.7L250.6 369.8c-5.9 8.9-15.9 14.2-26.6 14.2s-20.7-5.3-26.6-14.2L64 169.7V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 49.9 9.2 37.5 22.7 33.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M22.7 33.4c13.5-4.1 28.1 1.1 35.9 12.9L224 294.3 389.4 46.2c7.8-11.7 22.4-17 35.9-12.9S448 49.9 448 64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V169.7L250.6 369.8c-5.9 8.9-15.9 14.2-26.6 14.2s-20.7-5.3-26.6-14.2L64 169.7V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 49.9 9.2 37.5 22.7 33.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magento\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3c4\",\n    \"label\": \"Magento\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"magnet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9f2\"],\n        \"secondary\": [\"10f076\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.8.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Attract\",\n        \"attraction\",\n        \"horseshoe\",\n        \"lodestone\",\n        \"magnet\",\n        \"magnetic\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f076\",\n    \"label\": \"Magnet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 160v96C0 379.7 100.3 480 224 480s224-100.3 224-224V160H320v96c0 53-43 96-96 96s-96-43-96-96V160H0zm0-32H128V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64zm320 0H448V64c0-17.7-14.3-32-32-32H352c-17.7 0-32 14.3-32 32v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 160v96C0 379.7 100.3 480 224 480s224-100.3 224-224V160H320v96c0 53-43 96-96 96s-96-43-96-96V160H0zm0-32H128V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64zm320 0H448V64c0-17.7-14.3-32-32-32H352c-17.7 0-32 14.3-32 32v64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass\": {\n    \"aliases\": {\n      \"names\": [\"search\"],\n      \"unicodes\": {\n        \"composite\": [\"1f50d\"],\n        \"secondary\": [\"10f002\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bigger\",\n        \"enlarge\",\n        \"find\",\n        \"glass\",\n        \"magnify\",\n        \"magnifying\",\n        \"magnifying glass tilted left\",\n        \"preview\",\n        \"search\",\n        \"tool\",\n        \"zoom\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f002\",\n    \"label\": \"Magnifying Glass\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass-arrow-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"find\", \"next\", \"search\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e521\",\n    \"label\": \"Magnifying Glass Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM241 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31H120c-13.3 0-24 10.7-24 24s10.7 24 24 24H238.1l-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9l-72-72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM241 119c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l31 31H120c-13.3 0-24 10.7-24 24s10.7 24 24 24H238.1l-31 31c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9l-72-72z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass-chart\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \" data\",\n        \" graph\",\n        \" intelligence\",\n        \"analysis\",\n        \"chart\",\n        \"market\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e522\",\n    \"label\": \"Magnifying Glass Chart\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zm-312 8v64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80-96V280c0 13.3 10.7 24 24 24s24-10.7 24-24V120c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80 64v96c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24s-24 10.7-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zm-312 8v64c0 13.3 10.7 24 24 24s24-10.7 24-24l0-64c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80-96V280c0 13.3 10.7 24 24 24s24-10.7 24-24V120c0-13.3-10.7-24-24-24s-24 10.7-24 24zm80 64v96c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass-dollar\": {\n    \"aliases\": {\n      \"names\": [\"search-dollar\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f688\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bigger\",\n        \"enlarge\",\n        \"find\",\n        \"magnify\",\n        \"money\",\n        \"preview\",\n        \"zoom\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f688\",\n    \"label\": \"Magnifying Glass Dollar\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM228 104c0-11-9-20-20-20s-20 9-20 20v14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1l0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4V312c0 11 9 20 20 20s20-9 20-20V298.2c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7V104z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM228 104c0-11-9-20-20-20s-20 9-20 20v14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1l0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4V312c0 11 9 20 20 20s20-9 20-20V298.2c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7V104z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass-location\": {\n    \"aliases\": {\n      \"names\": [\"search-location\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f689\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bigger\", \"enlarge\", \"find\", \"magnify\", \"preview\", \"zoom\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f689\",\n    \"label\": \"Magnifying Glass Location\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6c6 7.3 16.8 7.3 22.7 0c22.1-27 68.6-89.8 68.6-138.6zm-112 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6c6 7.3 16.8 7.3 22.7 0c22.1-27 68.6-89.8 68.6-138.6zm-112 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass-minus\": {\n    \"aliases\": {\n      \"names\": [\"search-minus\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f010\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"minify\", \"negative\", \"smaller\", \"zoom\", \"zoom out\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f010\",\n    \"label\": \"Magnifying Glass Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"magnifying-glass-plus\": {\n    \"aliases\": {\n      \"names\": [\"search-plus\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f00e\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bigger\", \"enlarge\", \"magnify\", \"positive\", \"zoom\", \"zoom in\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f00e\",\n    \"label\": \"Magnifying Glass Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mailchimp\": {\n    \"changes\": [\"5.1.0\", \"5.7.0\", \"5.8.0\", \"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f59e\",\n    \"label\": \"Mailchimp\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M330.61 243.52a36.15 36.15 0 0 1 9.3 0c1.66-3.83 1.95-10.43.45-17.61-2.23-10.67-5.25-17.14-11.48-16.13s-6.47 8.74-4.24 19.42c1.26 6 3.49 11.14 6 14.32zM277.05 252c4.47 2 7.2 3.26 8.28 2.13 1.89-1.94-3.48-9.39-12.12-13.09a31.44 31.44 0 0 0-30.61 3.68c-3 2.18-5.81 5.22-5.41 7.06.85 3.74 10-2.71 22.6-3.48 7-.44 12.8 1.75 17.26 3.71zm-9 5.13c-9.07 1.42-15 6.53-13.47 10.1.9.34 1.17.81 5.21-.81a37 37 0 0 1 18.72-1.95c2.92.34 4.31.52 4.94-.49 1.46-2.22-5.71-8-15.39-6.85zm54.17 17.1c3.38-6.87-10.9-13.93-14.3-7s10.92 13.88 14.32 6.97zm15.66-20.47c-7.66-.13-7.95 15.8-.26 15.93s7.98-15.81.28-15.96zm-218.79 78.9c-1.32.31-6 1.45-8.47-2.35-5.2-8 11.11-20.38 3-35.77-9.1-17.47-27.82-13.54-35.05-5.54-8.71 9.6-8.72 23.54-5 24.08 4.27.57 4.08-6.47 7.38-11.63a12.83 12.83 0 0 1 17.85-3.72c11.59 7.59 1.37 17.76 2.28 28.62 1.39 16.68 18.42 16.37 21.58 9a2.08 2.08 0 0 0-.2-2.33c.03.89.68-1.3-3.35-.39zm299.72-17.07c-3.35-11.73-2.57-9.22-6.78-20.52 2.45-3.67 15.29-24-3.07-43.25-10.4-10.92-33.9-16.54-41.1-18.54-1.5-11.39 4.65-58.7-21.52-83 20.79-21.55 33.76-45.29 33.73-65.65-.06-39.16-48.15-51-107.42-26.47l-12.55 5.33c-.06-.05-22.71-22.27-23.05-22.57C169.5-18-41.77 216.81 25.78 273.85l14.76 12.51a72.49 72.49 0 0 0-4.1 33.5c3.36 33.4 36 60.42 67.53 60.38 57.73 133.06 267.9 133.28 322.29 3 1.74-4.47 9.11-24.61 9.11-42.38s-10.09-25.27-16.53-25.27zm-316 48.16c-22.82-.61-47.46-21.15-49.91-45.51-6.17-61.31 74.26-75.27 84-12.33 4.54 29.64-4.67 58.49-34.12 57.81zM84.3 249.55C69.14 252.5 55.78 261.09 47.6 273c-4.88-4.07-14-12-15.59-15-13.01-24.85 14.24-73 33.3-100.21C112.42 90.56 186.19 39.68 220.36 48.91c5.55 1.57 23.94 22.89 23.94 22.89s-34.15 18.94-65.8 45.35c-42.66 32.85-74.89 80.59-94.2 132.4zM323.18 350.7s-35.74 5.3-69.51-7.07c6.21-20.16 27 6.1 96.4-13.81 15.29-4.38 35.37-13 51-25.35a102.85 102.85 0 0 1 7.12 24.28c3.66-.66 14.25-.52 11.44 18.1-3.29 19.87-11.73 36-25.93 50.84A106.86 106.86 0 0 1 362.55 421a132.45 132.45 0 0 1-20.34 8.58c-53.51 17.48-108.3-1.74-126-43a66.33 66.33 0 0 1-3.55-9.74c-7.53-27.2-1.14-59.83 18.84-80.37 1.23-1.31 2.48-2.85 2.48-4.79a8.45 8.45 0 0 0-1.92-4.54c-7-10.13-31.19-27.4-26.33-60.83 3.5-24 24.49-40.91 44.07-39.91l5 .29c8.48.5 15.89 1.59 22.88 1.88 11.69.5 22.2-1.19 34.64-11.56 4.2-3.5 7.57-6.54 13.26-7.51a17.45 17.45 0 0 1 13.6 2.24c10 6.64 11.4 22.73 11.92 34.49.29 6.72 1.1 23 1.38 27.63.63 10.67 3.43 12.17 9.11 14 3.19 1.05 6.15 1.83 10.51 3.06 13.21 3.71 21 7.48 26 12.31a16.38 16.38 0 0 1 4.74 9.29c1.56 11.37-8.82 25.4-36.31 38.16-46.71 21.68-93.68 14.45-100.48 13.68-20.15-2.71-31.63 23.32-19.55 41.15 22.64 33.41 122.4 20 151.37-21.35.69-1 .12-1.59-.73-1-41.77 28.58-97.06 38.21-128.46 26-4.77-1.85-14.73-6.44-15.94-16.67 43.6 13.49 71 .74 71 .74s2.03-2.79-.56-2.53zm-68.47-5.7zm-83.4-187.5c16.74-19.35 37.36-36.18 55.83-45.63a.73.73 0 0 1 1 1c-1.46 2.66-4.29 8.34-5.19 12.65a.75.75 0 0 0 1.16.79c11.49-7.83 31.48-16.22 49-17.3a.77.77 0 0 1 .52 1.38 41.86 41.86 0 0 0-7.71 7.74.75.75 0 0 0 .59 1.19c12.31.09 29.66 4.4 41 10.74.76.43.22 1.91-.64 1.72-69.55-15.94-123.08 18.53-134.5 26.83a.76.76 0 0 1-1-1.12z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"manat-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Manat Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1d5\",\n    \"label\": \"Manat Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 32c-17.7 0-32 14.3-32 32V98.7C69.2 113.9 0 192.9 0 288V448c0 17.7 14.3 32 32 32s32-14.3 32-32V288c0-59.6 40.8-109.8 96-124V448c0 17.7 14.3 32 32 32s32-14.3 32-32V164c55.2 14.2 96 64.3 96 124V448c0 17.7 14.3 32 32 32s32-14.3 32-32V288c0-95.1-69.2-174.1-160-189.3V64c0-17.7-14.3-32-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 32c-17.7 0-32 14.3-32 32V98.7C69.2 113.9 0 192.9 0 288V448c0 17.7 14.3 32 32 32s32-14.3 32-32V288c0-59.6 40.8-109.8 96-124V448c0 17.7 14.3 32 32 32s32-14.3 32-32V164c55.2 14.2 96 64.3 96 124V448c0 17.7 14.3 32 32 32s32-14.3 32-32V288c0-95.1-69.2-174.1-160-189.3V64c0-17.7-14.3-32-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mandalorian\": {\n    \"changes\": [\"5.0.12\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f50f\",\n    \"label\": \"Mandalorian\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M232.27 511.89c-1-3.26-1.69-15.83-1.39-24.58.55-15.89 1-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-1 .4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-1-11.43a92.38 92.38 0 0 0-.34-12.71c-2-13-3.46-27.7-3.25-33.9s.43-7.15 2.06-9.67c3.05-4.71 6.51-14 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74a109.54 109.54 0 0 1 4.42-15.05c2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71s-4.76 4.8-8.29 7.36c-8.37 6.08-11.7 9.39-12.66 12.58s-1 7.23-.16 7.76c.34.21 1.29 2.4 2.11 4.88a28.83 28.83 0 0 1 .72 15.36c-.39 1.77-1 5.47-1.46 8.23s-1 6.46-1.25 8.22a9.85 9.85 0 0 1-1.55 4.26c-1 1-1.14.91-2.05-.53a14.87 14.87 0 0 1-1.44-4.75c-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-1-21a14.24 14.24 0 0 0 1.67-4.61c0-2.39-2.2-5.32-7.41-9.89-7-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3-2.6 9.11-3 22l-.34 12.19 2 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56s.95 22.75 2 24.71c.36.66.51 1.35.34 1.52s.41 2.09 1.29 4.27a38.14 38.14 0 0 1 2.06 9 91 91 0 0 0 1.71 10.37c2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 58-2 61.21-.12 2-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4-4.79-2.83-9.95.7-3 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73s.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57 0-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-11-1.9-23.85-14.55-6.15-6-12.34-12-13.75-13.19-2.81-2.42-2.79-2-.56-9.63l1.35-4.65-1.69-3a32.22 32.22 0 0 0-2.59-4.07c-1.33-1.51-5.5-10.89-6-13.49a4.24 4.24 0 0 1 .87-3.9c2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1 9.41 5 1.34 4.79 1.37 9.79.1 18.55a101.2 101.2 0 0 0-1 11.11c0 4 .19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52a18.67 18.67 0 0 1 4.72 2.85c11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 8 4.54 10 13.39 1.31 5.65 4 11.14 5.46 11.14a9.38 9.38 0 0 0 3.33-1.39c2-1.22 2.25-1.73 2.25-4.18a132.88 132.88 0 0 0-2-17.84c-.37-1.66-.78-4.06-.93-5.35s-.61-3.85-1-5.69c-2.55-11.16-3.65-15.46-4.1-16-1.55-2-4.08-10.2-4.93-15.92-1.64-11.11-4-14.23-12.91-17.39A43.15 43.15 0 0 1 165.24 78c-1.15-1-4-3.22-6.35-5.06s-4.41-3.53-4.6-3.76a22.7 22.7 0 0 0-2.69-2c-6.24-4.22-8.84-7-11.26-12l-2.44-5-.22-13-.22-13 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2 8.53-.19 10.12 0 11.66 1.56s1.36 6.4-.29 8.5a6.66 6.66 0 0 0-1.34 2.32c0 .58-2.61 4.91-5.42 9a30.39 30.39 0 0 0-2.37 6.82c20.44 13.39 21.55 3.77 14.07 29L194 66.92c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-12-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28a45.3 45.3 0 0 1 7.55-1.68 29.57 29.57 0 0 0 6-1.29c3.65-1.11 4.5-1.17 6.35-.4a29.54 29.54 0 0 0 5.82 1.36 18.18 18.18 0 0 1 6 1.91 22.67 22.67 0 0 0 5 2.17c2.51.68 3 .57 7.05-1.67l4.35-2.4L268.32 5c10.44-.4 10.81-.47 15.26-2.68L288.16 0l2.46 1.43c1.76 1 3.14 2.73 4.85 6 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44-.89 3.3-.1 6.39a35.76 35.76 0 0 0 2.1 5.91 13.55 13.55 0 0 1 1.31 4c.31 4.33 0 5.3-2.41 6.92-2.17 1.47-7 7.91-7 9.34a14.77 14.77 0 0 1-1.07 3c-5 11.51-6.76 13.56-14.26 17-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26a18.33 18.33 0 0 1-4.09 3.71 13.62 13.62 0 0 0-4.38 4.78 5.89 5.89 0 0 1-2.49 2.91 6.88 6.88 0 0 0-2.45 1.71 67.62 67.62 0 0 1-7 5.38c-3.33 2.34-6.87 5-7.87 6A7.27 7.27 0 0 1 224 100a5.76 5.76 0 0 0-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6a36.45 36.45 0 0 0 1.42 5.88c1.32 3.8 1.31 7.86 0 10.57s-.89 6.65 1.35 9.59c2 2.63 2.16 4.56.71 8.84a33.45 33.45 0 0 0-1.06 8.91c0 4.88.22 6.28 1.46 8.38s1.82 2.48 3.24 2.32c2-.23 2.3-1.05 4.71-12.12 2.18-10 3.71-11.92 13.76-17.08 2.94-1.51 7.46-4 10-5.44s6.79-3.69 9.37-4.91a40.09 40.09 0 0 0 15.22-11.67c7.11-8.79 10-16.22 12.85-33.3a18.37 18.37 0 0 1 2.86-7.73 20.39 20.39 0 0 0 2.89-7.31c1-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8-2.18 3.11-6.46 13-8.76 20.26l-2.29 7.22-7 6.49c-3.83 3.57-8 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 10a14.62 14.62 0 0 0 1.59 7.26 42 42 0 0 1 2.09 4.83 9.28 9.28 0 0 0 1.57 2.89c1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12-4.7 12-1.79 0-4.06 9.27-5.07 20.74-.18 2-.62 5.94-1 8.7s-1 10-1.35 16.05c-.77 12.22-.19 18.77 2 23.15 3.41 6.69.52 12.69-11 22.84l-4 3.49.07 5.19a40.81 40.81 0 0 0 1.14 8.87c4.61 16 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15a61.31 61.31 0 0 1 1.08 7c.17 2 .66 5.33 1.08 7.36.47 2.26.78 11 .79 22.74v19.06l-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3-17.66-3-21.3 0-4.23 1-6 5.28-9.13s4.86-3.14 5.48-.72c.28 1.1 1.45 5.62 2.6 10 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-1 7.07-1.17 12.39-1 28.43.17 19.4-.64 35.73-2 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-71-37.58a101 101 0 0 1-1.73-10.79 100.5 100.5 0 0 0-1.73-10.79 37.53 37.53 0 0 1-1-6.49c-.31-3.19-.91-7.46-1.33-9.48-1-4.79-3.35-19.35-3.42-21.07 0-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29 1-1 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83s-.49 9.87-.67 11.71-.61 9.36-.94 16.72c-.79 17.41-1.94 31.29-2.65 32a.62.62 0 0 1-1-.14zm-87.18-266.59c21.07 12.79 17.84 14.15 28.49 17.66 13 4.29 18.87 7.13 23.15 16.87C111.6 233.28 86.25 255 78.55 268c-31 52-6 101.59 62.75 87.21-14.18 29.23-78 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-68 3-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.3 70.64-78.7 91.18-105.29 61.71z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"map\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5fa\", \"f278\"],\n        \"secondary\": [\"10f279\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"coordinates\",\n        \"destination\",\n        \"gps\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"navigation\",\n        \"paper\",\n        \"pin\",\n        \"place\",\n        \"point of interest\",\n        \"position\",\n        \"route\",\n        \"travel\",\n        \"world\",\n        \"world map\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f279\",\n    \"label\": \"Map\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384 476.1L192 421.2V35.9L384 90.8V476.1zm32-1.2V88.4L543.1 37.5c15.8-6.3 32.9 5.3 32.9 22.3V394.6c0 9.8-6 18.6-15.1 22.3L416 474.8zM15.1 95.1L160 37.2V423.6L32.9 474.5C17.1 480.8 0 469.2 0 452.2V117.4c0-9.8 6-18.6 15.1-22.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384 476.1L192 421.2V35.9L384 90.8V476.1zm32-1.2V88.4L543.1 37.5c15.8-6.3 32.9 5.3 32.9 22.3V394.6c0 9.8-6 18.6-15.1 22.3L416 474.8zM15.1 95.1L160 37.2V423.6L32.9 474.5C17.1 480.8 0 469.2 0 452.2V117.4c0-9.8 6-18.6 15.1-22.3z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M565.6 36.2C572.1 40.7 576 48.1 576 56V392c0 10-6.2 18.9-15.5 22.4l-168 64c-5.2 2-10.9 2.1-16.1 .3L192.5 417.5l-160 61c-7.4 2.8-15.7 1.8-22.2-2.7S0 463.9 0 456V120c0-10 6.1-18.9 15.5-22.4l168-64c5.2-2 10.9-2.1 16.1-.3L383.5 94.5l160-61c7.4-2.8 15.7-1.8 22.2 2.7zM48 136.5V421.2l120-45.7V90.8L48 136.5zM360 422.7V137.3l-144-48V374.7l144 48zm48-1.5l120-45.7V90.8L408 136.5V421.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M565.6 36.2C572.1 40.7 576 48.1 576 56V392c0 10-6.2 18.9-15.5 22.4l-168 64c-5.2 2-10.9 2.1-16.1 .3L192.5 417.5l-160 61c-7.4 2.8-15.7 1.8-22.2-2.7S0 463.9 0 456V120c0-10 6.1-18.9 15.5-22.4l168-64c5.2-2 10.9-2.1 16.1-.3L383.5 94.5l160-61c7.4-2.8 15.7-1.8 22.2 2.7zM48 136.5V421.2l120-45.7V90.8L48 136.5zM360 422.7V137.3l-144-48V374.7l144 48zm48-1.5l120-45.7V90.8L408 136.5V421.2z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"map-location\": {\n    \"aliases\": {\n      \"names\": [\"map-marked\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f59f\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"coordinates\",\n        \"destination\",\n        \"gps\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"navigation\",\n        \"paper\",\n        \"pin\",\n        \"place\",\n        \"point of interest\",\n        \"position\",\n        \"route\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f59f\",\n    \"label\": \"Map Location\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M302.8 312C334.9 271.9 408 174.6 408 120C408 53.7 354.3 0 288 0S168 53.7 168 120c0 54.6 73.1 151.9 105.2 192c7.7 9.6 22 9.6 29.6 0zM416 503l144.9-58c9.1-3.6 15.1-12.5 15.1-22.3V152c0-17-17.1-28.6-32.9-22.3l-116 46.4c-.5 1.2-1 2.5-1.5 3.7c-2.9 6.8-6.1 13.7-9.6 20.6V503zM15.1 187.3C6 191 0 199.8 0 209.6V480.4c0 17 17.1 28.6 32.9 22.3L160 451.8V200.4c-3.5-6.9-6.7-13.8-9.6-20.6c-5.6-13.2-10.4-27.4-12.8-41.5l-122.6 49zM384 255c-20.5 31.3-42.3 59.6-56.2 77c-20.5 25.6-59.1 25.6-79.6 0c-13.9-17.4-35.7-45.7-56.2-77V449.4l192 54.9V255z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M302.8 312C334.9 271.9 408 174.6 408 120C408 53.7 354.3 0 288 0S168 53.7 168 120c0 54.6 73.1 151.9 105.2 192c7.7 9.6 22 9.6 29.6 0zM416 503l144.9-58c9.1-3.6 15.1-12.5 15.1-22.3V152c0-17-17.1-28.6-32.9-22.3l-116 46.4c-.5 1.2-1 2.5-1.5 3.7c-2.9 6.8-6.1 13.7-9.6 20.6V503zM15.1 187.3C6 191 0 199.8 0 209.6V480.4c0 17 17.1 28.6 32.9 22.3L160 451.8V200.4c-3.5-6.9-6.7-13.8-9.6-20.6c-5.6-13.2-10.4-27.4-12.8-41.5l-122.6 49zM384 255c-20.5 31.3-42.3 59.6-56.2 77c-20.5 25.6-59.1 25.6-79.6 0c-13.9-17.4-35.7-45.7-56.2-77V449.4l192 54.9V255z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"map-location-dot\": {\n    \"aliases\": {\n      \"names\": [\"map-marked-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5a0\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"coordinates\",\n        \"destination\",\n        \"gps\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"navigation\",\n        \"paper\",\n        \"pin\",\n        \"place\",\n        \"point of interest\",\n        \"position\",\n        \"route\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5a0\",\n    \"label\": \"Map Location Dot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M408 120c0 54.6-73.1 151.9-105.2 192c-7.7 9.6-22 9.6-29.6 0C241.1 271.9 168 174.6 168 120C168 53.7 221.7 0 288 0s120 53.7 120 120zm8 80.4c3.5-6.9 6.7-13.8 9.6-20.6c.5-1.2 1-2.5 1.5-3.7l116-46.4C558.9 123.4 576 135 576 152V422.8c0 9.8-6 18.6-15.1 22.3L416 503V200.4zM137.6 138.3c2.4 14.1 7.2 28.3 12.8 41.5c2.9 6.8 6.1 13.7 9.6 20.6V451.8L32.9 502.7C17.1 509 0 497.4 0 480.4V209.6c0-9.8 6-18.6 15.1-22.3l122.6-49zM327.8 332c13.9-17.4 35.7-45.7 56.2-77V504.3L192 449.4V255c20.5 31.3 42.3 59.6 56.2 77c20.5 25.6 59.1 25.6 79.6 0zM288 152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M408 120c0 54.6-73.1 151.9-105.2 192c-7.7 9.6-22 9.6-29.6 0C241.1 271.9 168 174.6 168 120C168 53.7 221.7 0 288 0s120 53.7 120 120zm8 80.4c3.5-6.9 6.7-13.8 9.6-20.6c.5-1.2 1-2.5 1.5-3.7l116-46.4C558.9 123.4 576 135 576 152V422.8c0 9.8-6 18.6-15.1 22.3L416 503V200.4zM137.6 138.3c2.4 14.1 7.2 28.3 12.8 41.5c2.9 6.8 6.1 13.7 9.6 20.6V451.8L32.9 502.7C17.1 509 0 497.4 0 480.4V209.6c0-9.8 6-18.6 15.1-22.3l122.6-49zM327.8 332c13.9-17.4 35.7-45.7 56.2-77V504.3L192 449.4V255c20.5 31.3 42.3 59.6 56.2 77c20.5 25.6 59.1 25.6 79.6 0zM288 152a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"map-pin\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4cd\"],\n        \"secondary\": [\"10f276\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"agree\",\n        \"coordinates\",\n        \"destination\",\n        \"gps\",\n        \"localize\",\n        \"location\",\n        \"map\",\n        \"marker\",\n        \"navigation\",\n        \"pin\",\n        \"place\",\n        \"position\",\n        \"pushpin\",\n        \"round pushpin\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f276\",\n    \"label\": \"Map Pin\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480V317.1c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M16 144a144 144 0 1 1 288 0A144 144 0 1 1 16 144zM160 80c8.8 0 16-7.2 16-16s-7.2-16-16-16c-53 0-96 43-96 96c0 8.8 7.2 16 16 16s16-7.2 16-16c0-35.3 28.7-64 64-64zM128 480V317.1c10.4 1.9 21.1 2.9 32 2.9s21.6-1 32-2.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"markdown\": {\n    \"changes\": [\"5.2.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f60f\",\n    \"label\": \"Markdown\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"marker\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5a1\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"edit\", \"sharpie\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5a1\",\n    \"label\": \"Marker\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M481 31C445.1-4.8 386.9-4.8 351 31l-15 15L322.9 33C294.8 4.9 249.2 4.9 221.1 33L135 119c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L255 66.9c9.4-9.4 24.6-9.4 33.9 0L302.1 80 186.3 195.7 316.3 325.7 481 161c35.9-35.9 35.9-94.1 0-129.9zM293.7 348.3L163.7 218.3 99.5 282.5c-48 48-80.8 109.2-94.1 175.8l-5 25c-1.6 7.9 .9 16 6.6 21.7s13.8 8.1 21.7 6.6l25-5c66.6-13.3 127.8-46.1 175.8-94.1l64.2-64.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M481 31C445.1-4.8 386.9-4.8 351 31l-15 15L322.9 33C294.8 4.9 249.2 4.9 221.1 33L135 119c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L255 66.9c9.4-9.4 24.6-9.4 33.9 0L302.1 80 186.3 195.7 316.3 325.7 481 161c35.9-35.9 35.9-94.1 0-129.9zM293.7 348.3L163.7 218.3 99.5 282.5c-48 48-80.8 109.2-94.1 175.8l-5 25c-1.6 7.9 .9 16 6.6 21.7s13.8 8.1 21.7 6.6l25-5c66.6-13.3 127.8-46.1 175.8-94.1l64.2-64.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2642\"],\n        \"secondary\": [\"10f222\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"gender\", \"male\", \"male sign\", \"man\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f222\",\n    \"label\": \"Mars\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M289.8 46.8c3.7-9 12.5-14.8 22.2-14.8H424c13.3 0 24 10.7 24 24V168c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L321 204.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176S0 401.2 0 304s78.8-176 176-176c37 0 71.4 11.4 99.8 31l52.6-52.6L295 73c-6.9-6.9-8.9-17.2-5.2-26.2zM400 80l0 0h0v0zM176 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M289.8 46.8c3.7-9 12.5-14.8 22.2-14.8H424c13.3 0 24 10.7 24 24V168c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L321 204.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176S0 401.2 0 304s78.8-176 176-176c37 0 71.4 11.4 99.8 31l52.6-52.6L295 73c-6.9-6.9-8.9-17.2-5.2-26.2zM400 80l0 0h0v0zM176 416a112 112 0 1 0 0-224 112 112 0 1 0 0 224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars-and-venus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26a5\"],\n        \"secondary\": [\"10f224\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Male and Female Sign\",\n        \"female\",\n        \"gender\",\n        \"intersex\",\n        \"male\",\n        \"transgender\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f224\",\n    \"label\": \"Mars And Venus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M337.8 14.8C341.5 5.8 350.3 0 360 0H472c13.3 0 24 10.7 24 24V136c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-24.7 24.7C407 163.3 416 192.6 416 224c0 80.2-59.1 146.7-136.1 158.2c0 .6 .1 1.2 .1 1.8v.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .3 .4 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3h24c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0l-24 0-24 0v0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V486 486v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V485 485v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V484v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V483v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V481v-.1-.1-.1-.1-.1-.1-.1-.1V480v-.1-.1-.1-.1-.1-.1-.1V479v-.1-.1-.1-.1-.1-.1-.1V478v-.1-.1-.1-.1-.1-.1V477v-.1-.1-.1-.1-.1-.1V476v-.1-.1-.1-.1-.1-.1V475v-.1-.2-.2-.2-.2-.2V474v-.2-.2-.2-.2-.2V473v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V470v-.2-.2-.2-.2-.2V469v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V467v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V463v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V459v-.2-.2-.2-.2-.2-.2-.2-.2V457v-.2-.2-.2-.2V456H208c-13.3 0-24-10.7-24-24s10.7-24 24-24h24v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3V403v-.3-.3V402v-.3-.3V401v-.3-.3V400v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.4-.3-.4-.4-.4-.4V393v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V388v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V384c0-.6 0-1.2 .1-1.8C155.1 370.7 96 304.2 96 224c0-88.4 71.6-160 160-160c39.6 0 75.9 14.4 103.8 38.2L382.1 80 343 41c-6.9-6.9-8.9-17.2-5.2-26.2zM448 48l0 0h0v0zM256 488h24c0 13.3-10.7 24-24 24s-24-10.7-24-24h24zm96-264a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M337.8 14.8C341.5 5.8 350.3 0 360 0H472c13.3 0 24 10.7 24 24V136c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-24.7 24.7C407 163.3 416 192.6 416 224c0 80.2-59.1 146.7-136.1 158.2c0 .6 .1 1.2 .1 1.8v.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .3 .4 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3h24c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0l-24 0-24 0v0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V486 486v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V485 485v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V484v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V483v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V481v-.1-.1-.1-.1-.1-.1-.1-.1V480v-.1-.1-.1-.1-.1-.1-.1V479v-.1-.1-.1-.1-.1-.1-.1V478v-.1-.1-.1-.1-.1-.1V477v-.1-.1-.1-.1-.1-.1V476v-.1-.1-.1-.1-.1-.1V475v-.1-.2-.2-.2-.2-.2V474v-.2-.2-.2-.2-.2V473v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V470v-.2-.2-.2-.2-.2V469v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V467v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V463v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V459v-.2-.2-.2-.2-.2-.2-.2-.2V457v-.2-.2-.2-.2V456H208c-13.3 0-24-10.7-24-24s10.7-24 24-24h24v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3V403v-.3-.3V402v-.3-.3V401v-.3-.3V400v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.4-.3-.4-.4-.4-.4V393v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V388v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V384c0-.6 0-1.2 .1-1.8C155.1 370.7 96 304.2 96 224c0-88.4 71.6-160 160-160c39.6 0 75.9 14.4 103.8 38.2L382.1 80 343 41c-6.9-6.9-8.9-17.2-5.2-26.2zM448 48l0 0h0v0zM256 488h24c0 13.3-10.7 24-24 24s-24-10.7-24-24h24zm96-264a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars-and-venus-burst\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"gender\", \"violence\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e523\",\n    \"label\": \"Mars And Venus Burst\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M504 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l39 39-22.2 22.2C475.9 78.4 439.6 64 400 64c-88.4 0-160 71.6-160 160c0 80.2 59.1 146.7 136.1 158.2c0 .6-.1 1.2-.1 1.8v.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .3 .4 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3H352c-13.3 0-24 10.7-24 24s10.7 24 24 24h24v.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0l24 0H376c0 13.3 10.7 24 24 24s24-10.7 24-24H400l24 0v0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V486 486v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V485 485v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V484v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V483v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V481v-.1-.1-.1-.1-.1-.1-.1-.1V480v-.1-.1-.1-.1-.1-.1-.1V479v-.1-.1-.1-.1-.1-.1-.1V478v-.1-.1-.1-.1-.1-.1V477v-.1-.1-.1-.1-.1-.1V476v-.1-.1-.1-.1-.1-.1V475v-.1-.2-.2-.2-.2-.2V474v-.2-.2-.2-.2-.2V473v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V470v-.2-.2-.2-.2-.2V469v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V467v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V463v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V459v-.2-.2-.2-.2-.2-.2-.2-.2V457v-.2-.2-.2-.2V456h24c13.3 0 24-10.7 24-24s-10.7-24-24-24H424v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3V403v-.3-.3V402v-.3-.3V401v-.3-.3V400v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.4-.3-.4-.4-.4-.4V393v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V388v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V384c0-.6 0-1.2-.1-1.8c77-11.6 136.1-78 136.1-158.2c0-31.4-9-60.7-24.7-85.4L560 113.9l39 39c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V24c0-13.3-10.7-24-24-24H504zM400 128a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.1 3.8 9.9 5.1 15.2 3.6C223.6 310.8 208 269.2 208 224c0-60.8 28.3-115 72.4-150.2L220.3 92.1l-29.4-74z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M504 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l39 39-22.2 22.2C475.9 78.4 439.6 64 400 64c-88.4 0-160 71.6-160 160c0 80.2 59.1 146.7 136.1 158.2c0 .6-.1 1.2-.1 1.8v.4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .4 .3 .4 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3 .3H352c-13.3 0-24 10.7-24 24s10.7 24 24 24h24v.2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .2 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 .1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0l24 0H376c0 13.3 10.7 24 24 24s24-10.7 24-24H400l24 0v0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V486 486v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V485 485v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V484v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V483v-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1-.1V481v-.1-.1-.1-.1-.1-.1-.1-.1V480v-.1-.1-.1-.1-.1-.1-.1V479v-.1-.1-.1-.1-.1-.1-.1V478v-.1-.1-.1-.1-.1-.1V477v-.1-.1-.1-.1-.1-.1V476v-.1-.1-.1-.1-.1-.1V475v-.1-.2-.2-.2-.2-.2V474v-.2-.2-.2-.2-.2V473v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V470v-.2-.2-.2-.2-.2V469v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V467v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V463v-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2-.2V459v-.2-.2-.2-.2-.2-.2-.2-.2V457v-.2-.2-.2-.2V456h24c13.3 0 24-10.7 24-24s-10.7-24-24-24H424v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3V403v-.3-.3V402v-.3-.3V401v-.3-.3V400v-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.3-.4-.3-.4-.4-.4-.4V393v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V388v-.4-.4-.4-.4-.4-.4-.4-.4-.4-.4V384c0-.6 0-1.2-.1-1.8c77-11.6 136.1-78 136.1-158.2c0-31.4-9-60.7-24.7-85.4L560 113.9l39 39c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V24c0-13.3-10.7-24-24-24H504zM400 128a96 96 0 1 1 0 192 96 96 0 1 1 0-192zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.1 3.8 9.9 5.1 15.2 3.6C223.6 310.8 208 269.2 208 224c0-60.8 28.3-115 72.4-150.2L220.3 92.1l-29.4-74z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars-double\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26a3\"],\n        \"secondary\": [\"10f227\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Doubled Male Sign\", \"gay\", \"gender\", \"male\", \"men\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f227\",\n    \"label\": \"Mars Double\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L275.8 159c-28.4-19.5-62.7-31-99.8-31C78.8 128 0 206.8 0 304s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L407 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H312zm88 48h0v0l0 0zM64 304a112 112 0 1 1 224 0A112 112 0 1 1 64 304zM368 480c97.2 0 176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L599 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H504c-9.7 0-18.5 5.8-22.2 14.8c-1.2 2.9-1.8 6-1.8 9l0 .2v.2c0 6.2 2.5 12.2 7 16.8l33.4 33.4L480 146.7V168c0 22.6-13.6 43.1-34.6 51.7c-.8 .3-1.7 .7-2.5 1C465.7 241.2 480 270.9 480 304c0 61.9-50.1 112-112 112c-5.4 0-10.8-.4-16-1.1c-12.9 20.4-29.1 38.3-48.1 53.1c19.8 7.8 41.4 12 64 12z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M312 32c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L275.8 159c-28.4-19.5-62.7-31-99.8-31C78.8 128 0 206.8 0 304s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L407 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H312zm88 48h0v0l0 0zM64 304a112 112 0 1 1 224 0A112 112 0 1 1 64 304zM368 480c97.2 0 176-78.8 176-176c0-37-11.4-71.4-31-99.8l52.6-52.6L599 185c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H504c-9.7 0-18.5 5.8-22.2 14.8c-1.2 2.9-1.8 6-1.8 9l0 .2v.2c0 6.2 2.5 12.2 7 16.8l33.4 33.4L480 146.7V168c0 22.6-13.6 43.1-34.6 51.7c-.8 .3-1.7 .7-2.5 1C465.7 241.2 480 270.9 480 304c0 61.9-50.1 112-112 112c-5.4 0-10.8-.4-16-1.1c-12.9 20.4-29.1 38.3-48.1 53.1c19.8 7.8 41.4 12 64 12z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars-stroke\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26a6\"],\n        \"secondary\": [\"10f229\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Male with Stroke Sign\", \"gender\", \"transgender\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f229\",\n    \"label\": \"Mars Stroke\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M376 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L370.3 96.4 345 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l25.4 25.4L307.8 159c-28.4-19.5-62.7-31-99.8-31c-97.2 0-176 78.8-176 176s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l28.6-28.6L407 201c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-25.4-25.4 22.1-22.1L471 153c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V24c0-13.3-10.7-24-24-24H376zm88 48h0v0l0 0zM96 304a112 112 0 1 1 224 0A112 112 0 1 1 96 304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M376 0c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l33.4 33.4L370.3 96.4 345 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l25.4 25.4L307.8 159c-28.4-19.5-62.7-31-99.8-31c-97.2 0-176 78.8-176 176s78.8 176 176 176s176-78.8 176-176c0-37-11.4-71.4-31-99.8l28.6-28.6L407 201c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-25.4-25.4 22.1-22.1L471 153c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V24c0-13.3-10.7-24-24-24H376zm88 48h0v0l0 0zM96 304a112 112 0 1 1 224 0A112 112 0 1 1 96 304z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars-stroke-right\": {\n    \"aliases\": {\n      \"names\": [\"mars-stroke-h\"],\n      \"unicodes\": {\n        \"composite\": [\"26a9\"],\n        \"secondary\": [\"10f22b\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Horizontal Male with Stroke Sign\", \"gender\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f22b\",\n    \"label\": \"Mars Stroke Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M208 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm174.4-88C370.7 365.8 297.1 432 208 432c-97.2 0-176-78.8-176-176s78.8-176 176-176c89.1 0 162.7 66.2 174.4 152H416V176c0-13.3 10.7-24 24-24s24 10.7 24 24v56h32V176c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2V280H464v56c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H382.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M208 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zm174.4-88C370.7 365.8 297.1 432 208 432c-97.2 0-176-78.8-176-176s78.8-176 176-176c89.1 0 162.7 66.2 174.4 152H416V176c0-13.3 10.7-24 24-24s24 10.7 24 24v56h32V176c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l80 80c9.4 9.4 9.4 24.6 0 33.9l-80 80c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2V280H464v56c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H382.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mars-stroke-up\": {\n    \"aliases\": {\n      \"names\": [\"mars-stroke-v\"],\n      \"unicodes\": {\n        \"composite\": [\"26a8\"],\n        \"secondary\": [\"10f22a\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Vertical Male with Stroke Sign\", \"gender\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f22a\",\n    \"label\": \"Mars Stroke Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M148.7 4.7c6.2-6.2 16.4-6.2 22.6 0l64 64c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9H184v24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H184v24c0 .6 0 1.2-.1 1.8c77 11.6 136.1 78 136.1 158.2c0 88.4-71.6 160-160 160S0 440.4 0 352c0-80.2 59.1-146.7 136.1-158.2c0-.6-.1-1.2-.1-1.8V168H104c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V96H96c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l64-64zM256 352A96 96 0 1 0 64 352a96 96 0 1 0 192 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M148.7 4.7c6.2-6.2 16.4-6.2 22.6 0l64 64c4.6 4.6 5.9 11.5 3.5 17.4s-8.3 9.9-14.8 9.9H184v24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H184v24c0 .6 0 1.2-.1 1.8c77 11.6 136.1 78 136.1 158.2c0 88.4-71.6 160-160 160S0 440.4 0 352c0-80.2 59.1-146.7 136.1-158.2c0-.6-.1-1.2-.1-1.8V168H104c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V96H96c-6.5 0-12.3-3.9-14.8-9.9s-1.1-12.9 3.5-17.4l64-64zM256 352A96 96 0 1 0 64 352a96 96 0 1 0 192 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"martini-glass\": {\n    \"aliases\": {\n      \"names\": [\"glass-martini-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f378\"],\n        \"secondary\": [\"10f57b\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"bar\",\n        \"beverage\",\n        \"cocktail\",\n        \"cocktail glass\",\n        \"drink\",\n        \"glass\",\n        \"liquor\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f57b\",\n    \"label\": \"Martini Glass\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3V448H160c-17.7 0-32 14.3-32 32s14.3 32 32 32h96 96c17.7 0 32-14.3 32-32s-14.3-32-32-32H288V269.3L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0H32zM173.3 128l-64-64H402.7l-64 64H173.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3V448H160c-17.7 0-32 14.3-32 32s14.3 32 32 32h96 96c17.7 0 32-14.3 32-32s-14.3-32-32-32H288V269.3L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0H32zM173.3 128l-64-64H402.7l-64 64H173.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"martini-glass-citrus\": {\n    \"aliases\": {\n      \"names\": [\"cocktail\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f561\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"beverage\",\n        \"drink\",\n        \"gin\",\n        \"glass\",\n        \"margarita\",\n        \"martini\",\n        \"vodka\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f561\",\n    \"label\": \"Martini Glass Citrus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M432 240c53 0 96-43 96-96s-43-96-96-96c-35.5 0-66.6 19.3-83.2 48H296.2C316 40.1 369.3 0 432 0c79.5 0 144 64.5 144 144s-64.5 144-144 144c-27.7 0-53.5-7.8-75.5-21.3l35.4-35.4c12.2 5.6 25.8 8.7 40.1 8.7zM1.8 142.8C5.5 133.8 14.3 128 24 128H392c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-177 177V464h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H208 120c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V345.9L7 169c-6.9-6.9-8.9-17.2-5.2-26.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M432 240c53 0 96-43 96-96s-43-96-96-96c-35.5 0-66.6 19.3-83.2 48H296.2C316 40.1 369.3 0 432 0c79.5 0 144 64.5 144 144s-64.5 144-144 144c-27.7 0-53.5-7.8-75.5-21.3l35.4-35.4c12.2 5.6 25.8 8.7 40.1 8.7zM1.8 142.8C5.5 133.8 14.3 128 24 128H392c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-177 177V464h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H208 120c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V345.9L7 169c-6.9-6.9-8.9-17.2-5.2-26.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"martini-glass-empty\": {\n    \"aliases\": {\n      \"names\": [\"glass-martini\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f000\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"alcohol\", \"bar\", \"beverage\", \"drink\", \"liquor\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f000\",\n    \"label\": \"Martini Glass Empty\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3V448H160c-17.7 0-32 14.3-32 32s14.3 32 32 32h96 96c17.7 0 32-14.3 32-32s-14.3-32-32-32H288V269.3L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0H32zM256 210.7L109.3 64H402.7L256 210.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 0C19.1 0 7.4 7.8 2.4 19.8s-2.2 25.7 6.9 34.9L224 269.3V448H160c-17.7 0-32 14.3-32 32s14.3 32 32 32h96 96c17.7 0 32-14.3 32-32s-14.3-32-32-32H288V269.3L502.6 54.6c9.2-9.2 11.9-22.9 6.9-34.9S492.9 0 480 0H32zM256 210.7L109.3 64H402.7L256 210.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mask\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6fa\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"carnivale\",\n        \"costume\",\n        \"disguise\",\n        \"halloween\",\n        \"secret\",\n        \"super hero\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6fa\",\n    \"label\": \"Mask\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 64C64 64 0 160 0 272S80 448 176 448h8.4c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4H400c96 0 176-64 176-176s-64-208-288-208zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 64C64 64 0 160 0 272S80 448 176 448h8.4c24.2 0 46.4-13.7 57.2-35.4l23.2-46.3c4.4-8.8 13.3-14.3 23.2-14.3s18.8 5.5 23.2 14.3l23.2 46.3c10.8 21.7 33 35.4 57.2 35.4H400c96 0 176-64 176-176s-64-208-288-208zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm320-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mask-face\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"breath\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"filter\",\n        \"flu\",\n        \"infection\",\n        \"pandemic\",\n        \"respirator\",\n        \"virus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1d7\",\n    \"label\": \"Mask Face\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766749,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 64c-27.2 0-53.8 8-76.4 23.1l-37.1 24.8c-15.8 10.5-34.3 16.1-53.3 16.1H144 128 56c-30.9 0-56 25.1-56 56v85c0 55.1 37.5 103.1 90.9 116.4l108 27C233.8 435 275.4 448 320 448s86.2-13 121.1-35.5l108-27C602.5 372.1 640 324.1 640 269V184c0-30.9-25.1-56-56-56H512 496h-9.2c-19 0-37.5-5.6-53.3-16.1L396.4 87.1C373.8 72 347.2 64 320 64zM132.3 346.3l-29.8-7.4C70.5 330.9 48 302.1 48 269V184c0-4.4 3.6-8 8-8H96v48c0 45.1 13.4 87.2 36.3 122.3zm405.1-7.4l-29.8 7.4c23-35.2 36.3-77.2 36.3-122.3V176h40c4.4 0 8 3.6 8 8v85c0 33-22.5 61.8-54.5 69.9zM192 208c0-8.8 7.2-16 16-16H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H208c-8.8 0-16-7.2-16-16zm16 48H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H208c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 80c0-8.8 7.2-16 16-16H400c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 64c-27.2 0-53.8 8-76.4 23.1l-37.1 24.8c-15.8 10.5-34.3 16.1-53.3 16.1H144 128 56c-30.9 0-56 25.1-56 56v85c0 55.1 37.5 103.1 90.9 116.4l108 27C233.8 435 275.4 448 320 448s86.2-13 121.1-35.5l108-27C602.5 372.1 640 324.1 640 269V184c0-30.9-25.1-56-56-56H512 496h-9.2c-19 0-37.5-5.6-53.3-16.1L396.4 87.1C373.8 72 347.2 64 320 64zM132.3 346.3l-29.8-7.4C70.5 330.9 48 302.1 48 269V184c0-4.4 3.6-8 8-8H96v48c0 45.1 13.4 87.2 36.3 122.3zm405.1-7.4l-29.8 7.4c23-35.2 36.3-77.2 36.3-122.3V176h40c4.4 0 8 3.6 8 8v85c0 33-22.5 61.8-54.5 69.9zM192 208c0-8.8 7.2-16 16-16H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H208c-8.8 0-16-7.2-16-16zm16 48H432c8.8 0 16 7.2 16 16s-7.2 16-16 16H208c-8.8 0-16-7.2-16-16s7.2-16 16-16zm16 80c0-8.8 7.2-16 16-16H400c8.8 0 16 7.2 16 16s-7.2 16-16 16H240c-8.8 0-16-7.2-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mask-ventilator\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"breath\", \"gas\", \"mask\", \"oxygen\", \"respirator\", \"ventilator\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e524\",\n    \"label\": \"Mask Ventilator\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M159.1 176C139.4 219.2 128 264.7 128 300.8c0 15.9 2.2 31.4 6.3 46l-31.8-7.9C70.5 330.9 48 302.1 48 269V184c0-4.4 3.6-8 8-8H159.1zm26-48H56c-30.9 0-56 25.1-56 56v85c0 55.1 37.5 103.1 90.9 116.4l71.3 17.8c22.7 30.5 55.4 54.1 93.8 66.6V393.3c-19.7-16.4-32-40.3-32-66.9c0-49.5 43-134.4 96-134.4c52.5 0 96 84.9 96 134.4c0 26.7-12.4 50.4-32 66.8v76.6c38-12.6 70.6-36 93.5-66.4l71.6-17.9C602.5 372.1 640 324.1 640 269V184c0-30.9-25.1-56-56-56H454.5C419.7 73.8 372.1 32 320 32c-52.6 0-100.2 41.8-134.9 96zm295.6 48H584c4.4 0 8 3.6 8 8v85c0 33-22.5 61.8-54.5 69.9l-31.8 8c4.2-14.7 6.4-30.1 6.4-46.1c0-36.1-11.6-81.6-31.3-124.8zM288 320V512h64V320c0-17.7-14.3-32-32-32s-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M159.1 176C139.4 219.2 128 264.7 128 300.8c0 15.9 2.2 31.4 6.3 46l-31.8-7.9C70.5 330.9 48 302.1 48 269V184c0-4.4 3.6-8 8-8H159.1zm26-48H56c-30.9 0-56 25.1-56 56v85c0 55.1 37.5 103.1 90.9 116.4l71.3 17.8c22.7 30.5 55.4 54.1 93.8 66.6V393.3c-19.7-16.4-32-40.3-32-66.9c0-49.5 43-134.4 96-134.4c52.5 0 96 84.9 96 134.4c0 26.7-12.4 50.4-32 66.8v76.6c38-12.6 70.6-36 93.5-66.4l71.6-17.9C602.5 372.1 640 324.1 640 269V184c0-30.9-25.1-56-56-56H454.5C419.7 73.8 372.1 32 320 32c-52.6 0-100.2 41.8-134.9 96zm295.6 48H584c4.4 0 8 3.6 8 8v85c0 33-22.5 61.8-54.5 69.9l-31.8 8c4.2-14.7 6.4-30.1 6.4-46.1c0-36.1-11.6-81.6-31.3-124.8zM288 320V512h64V320c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"masks-theater\": {\n    \"aliases\": {\n      \"names\": [\"theater-masks\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3ad\"],\n        \"secondary\": [\"10f630\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"art\",\n        \"comedy\",\n        \"mask\",\n        \"perform\",\n        \"performing\",\n        \"performing arts\",\n        \"theater\",\n        \"theatre\",\n        \"tragedy\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f630\",\n    \"label\": \"Masks Theater\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M74.6 373.2c41.7 36.1 108 82.5 166.1 73.7c6.1-.9 12.1-2.5 18-4.5c-9.2-12.3-17.3-24.4-24.2-35.4c-21.9-35-28.8-75.2-25.9-113.6c-20.6 4.1-39.2 13-54.7 25.4c-6.5 5.2-16.3 1.3-14.8-7c6.4-33.5 33-60.9 68.2-66.3c2.6-.4 5.3-.7 7.9-.8l19.4-131.3c2-13.8 8-32.7 25-45.9C278.2 53.2 310.5 37 363.2 32.2c-.8-.7-1.6-1.4-2.4-2.1C340.6 14.5 288.4-11.5 175.7 5.6S20.5 63 5.7 83.9C0 91.9-.8 102 .6 111.8L24.8 276.1c5.5 37.3 21.5 72.6 49.8 97.2zm87.7-219.6c4.4-3.1 10.8-2 11.8 3.3c.1 .5 .2 1.1 .3 1.6c3.2 21.8-11.6 42-33.1 45.3s-41.5-11.8-44.7-33.5c-.1-.5-.1-1.1-.2-1.6c-.6-5.4 5.2-8.4 10.3-6.7c9 3 18.8 3.9 28.7 2.4s19.1-5.3 26.8-10.8zM261.6 390c29.4 46.9 79.5 110.9 137.6 119.7s124.5-37.5 166.1-73.7c28.3-24.5 44.3-59.8 49.8-97.2l24.2-164.3c1.4-9.8 .6-19.9-5.1-27.9c-14.8-20.9-57.3-61.2-170-78.3S299.4 77.2 279.2 92.8c-7.8 6-11.5 15.4-12.9 25.2L242.1 282.3c-5.5 37.3-.4 75.8 19.6 107.7zM404.5 235.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6c-1 5.3-7.4 6.4-11.8 3.3zm136.2 15.5c-1 5.3-7.4 6.4-11.8 3.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6zM530 350.2c-19.6 44.7-66.8 72.5-116.8 64.9s-87.1-48.2-93-96.7c-1-8.3 8.9-12.1 15.2-6.7c23.9 20.8 53.6 35.3 87 40.3s66.1 .1 94.9-12.8c7.6-3.4 16 3.2 12.6 10.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M74.6 373.2c41.7 36.1 108 82.5 166.1 73.7c6.1-.9 12.1-2.5 18-4.5c-9.2-12.3-17.3-24.4-24.2-35.4c-21.9-35-28.8-75.2-25.9-113.6c-20.6 4.1-39.2 13-54.7 25.4c-6.5 5.2-16.3 1.3-14.8-7c6.4-33.5 33-60.9 68.2-66.3c2.6-.4 5.3-.7 7.9-.8l19.4-131.3c2-13.8 8-32.7 25-45.9C278.2 53.2 310.5 37 363.2 32.2c-.8-.7-1.6-1.4-2.4-2.1C340.6 14.5 288.4-11.5 175.7 5.6S20.5 63 5.7 83.9C0 91.9-.8 102 .6 111.8L24.8 276.1c5.5 37.3 21.5 72.6 49.8 97.2zm87.7-219.6c4.4-3.1 10.8-2 11.8 3.3c.1 .5 .2 1.1 .3 1.6c3.2 21.8-11.6 42-33.1 45.3s-41.5-11.8-44.7-33.5c-.1-.5-.1-1.1-.2-1.6c-.6-5.4 5.2-8.4 10.3-6.7c9 3 18.8 3.9 28.7 2.4s19.1-5.3 26.8-10.8zM261.6 390c29.4 46.9 79.5 110.9 137.6 119.7s124.5-37.5 166.1-73.7c28.3-24.5 44.3-59.8 49.8-97.2l24.2-164.3c1.4-9.8 .6-19.9-5.1-27.9c-14.8-20.9-57.3-61.2-170-78.3S299.4 77.2 279.2 92.8c-7.8 6-11.5 15.4-12.9 25.2L242.1 282.3c-5.5 37.3-.4 75.8 19.6 107.7zM404.5 235.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6c-1 5.3-7.4 6.4-11.8 3.3zm136.2 15.5c-1 5.3-7.4 6.4-11.8 3.3c-7.7-5.5-16.8-9.3-26.8-10.8s-19.8-.6-28.7 2.4c-5.1 1.7-10.9-1.3-10.3-6.7c.1-.5 .1-1.1 .2-1.6c3.2-21.8 23.2-36.8 44.7-33.5s36.3 23.5 33.1 45.3c-.1 .5-.2 1.1-.3 1.6zM530 350.2c-19.6 44.7-66.8 72.5-116.8 64.9s-87.1-48.2-93-96.7c-1-8.3 8.9-12.1 15.2-6.7c23.9 20.8 53.6 35.3 87 40.3s66.1 .1 94.9-12.8c7.6-3.4 16 3.2 12.6 10.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mastodon\": {\n    \"changes\": [\"5.0.11\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f6\",\n    \"label\": \"Mastodon\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"mattress-pillow\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"air mattress\", \"mattress\", \"pillow\", \"rest\", \"sleep\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e525\",\n    \"label\": \"Mattress Pillow\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 64H64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H256V64zm32 384H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H288V448zM64 160c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 64H64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H256V64zm32 384H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H288V448zM64 160c0-17.7 14.3-32 32-32h64c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"maxcdn\": {\n    \"changes\": [\"3.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f136\",\n    \"label\": \"MaxCDN\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"maximize\": {\n    \"aliases\": {\n      \"names\": [\"expand-arrows-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f31e\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"5.8.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bigger\", \"enlarge\", \"fullscreen\", \"move\", \"resize\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f31e\",\n    \"label\": \"Maximize\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M200 32H56C42.7 32 32 42.7 32 56V200c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l40-40 79 79-79 79L73 295c-6.9-6.9-17.2-8.9-26.2-5.2S32 302.3 32 312V456c0 13.3 10.7 24 24 24H200c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H456c13.3 0 24-10.7 24-24V312c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H312c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S209.7 32 200 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M200 32H56C42.7 32 32 42.7 32 56V200c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l40-40 79 79-79 79L73 295c-6.9-6.9-17.2-8.9-26.2-5.2S32 302.3 32 312V456c0 13.3 10.7 24 24 24H200c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H456c13.3 0 24-10.7 24-24V312c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H312c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S209.7 32 200 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mdb\": {\n    \"changes\": [\"5.11.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f8ca\",\n    \"label\": \"Material Design for Bootstrap\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M17.37 160.41L7 352h43.91l5.59-79.83L84.43 352h44.71l25.54-77.43 4.79 77.43H205l-12.79-191.59H146.7L106 277.74 63.67 160.41zm281 0h-47.9V352h47.9s95 .8 94.2-95.79c-.78-94.21-94.18-95.78-94.18-95.78zm-1.2 146.46V204.78s46 4.27 46.8 50.57-46.78 51.54-46.78 51.54zm238.29-74.24a56.16 56.16 0 0 0 8-38.31c-5.34-35.76-55.08-34.32-55.08-34.32h-51.9v191.58H482s87 4.79 87-63.85c0-43.14-33.52-55.08-33.52-55.08zm-51.9-31.94s13.57-1.59 16 9.59c1.43 6.66-4 12-4 12h-12v-21.57zm-.1 109.46l.1-24.92V267h.08s41.58-4.73 41.19 22.43c-.33 25.65-41.35 20.74-41.35 20.74z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"medal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3c5\"],\n        \"secondary\": [\"10f5a2\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"award\", \"medal\", \"ribbon\", \"sports medal\", \"star\", \"trophy\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5a2\",\n    \"label\": \"Medal\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M4.1 38.2C1.4 34.2 0 29.4 0 24.6C0 11 11 0 24.6 0H133.9c11.2 0 21.7 5.9 27.4 15.5l68.5 114.1c-48.2 6.1-91.3 28.6-123.4 61.9L4.1 38.2zm503.7 0L405.6 191.5c-32.1-33.3-75.2-55.8-123.4-61.9L350.7 15.5C356.5 5.9 366.9 0 378.1 0H487.4C501 0 512 11 512 24.6c0 4.8-1.4 9.6-4.1 13.6zM80 336a176 176 0 1 1 352 0A176 176 0 1 1 80 336zm184.4-94.9c-3.4-7-13.3-7-16.8 0l-22.4 45.4c-1.4 2.8-4 4.7-7 5.1L168 298.9c-7.7 1.1-10.7 10.5-5.2 16l36.3 35.4c2.2 2.2 3.2 5.2 2.7 8.3l-8.6 49.9c-1.3 7.6 6.7 13.5 13.6 9.9l44.8-23.6c2.7-1.4 6-1.4 8.7 0l44.8 23.6c6.9 3.6 14.9-2.2 13.6-9.9l-8.6-49.9c-.5-3 .5-6.1 2.7-8.3l36.3-35.4c5.6-5.4 2.5-14.8-5.2-16l-50.1-7.3c-3-.4-5.7-2.4-7-5.1l-22.4-45.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M4.1 38.2C1.4 34.2 0 29.4 0 24.6C0 11 11 0 24.6 0H133.9c11.2 0 21.7 5.9 27.4 15.5l68.5 114.1c-48.2 6.1-91.3 28.6-123.4 61.9L4.1 38.2zm503.7 0L405.6 191.5c-32.1-33.3-75.2-55.8-123.4-61.9L350.7 15.5C356.5 5.9 366.9 0 378.1 0H487.4C501 0 512 11 512 24.6c0 4.8-1.4 9.6-4.1 13.6zM80 336a176 176 0 1 1 352 0A176 176 0 1 1 80 336zm184.4-94.9c-3.4-7-13.3-7-16.8 0l-22.4 45.4c-1.4 2.8-4 4.7-7 5.1L168 298.9c-7.7 1.1-10.7 10.5-5.2 16l36.3 35.4c2.2 2.2 3.2 5.2 2.7 8.3l-8.6 49.9c-1.3 7.6 6.7 13.5 13.6 9.9l44.8-23.6c2.7-1.4 6-1.4 8.7 0l44.8 23.6c6.9 3.6 14.9-2.2 13.6-9.9l-8.6-49.9c-.5-3 .5-6.1 2.7-8.3l36.3-35.4c5.6-5.4 2.5-14.8-5.2-16l-50.1-7.3c-3-.4-5.7-2.4-7-5.1l-22.4-45.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"medapps\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3c6\",\n    \"label\": \"MedApps\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"medium\": {\n    \"aliases\": {\n      \"names\": [\"medium-m\"],\n      \"unicodes\": {\n        \"composite\": [\"f3c7\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f23a\",\n    \"label\": \"Medium\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"medrt\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3c8\",\n    \"label\": \"MRT\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 544 512\\\"><path d=\\\"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 544, 512],\n        \"width\": 544,\n        \"height\": 512,\n        \"path\": \"M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"meetup\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2e0\",\n    \"label\": \"Meetup\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 30.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"megaport\": {\n    \"changes\": [\"5.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5a3\",\n    \"label\": \"Megaport\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M214.5 209.6v66.2l33.5 33.5 33.3-33.3v-66.4l-33.4-33.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm145.1 414.4L367 441.6l-26-19.2v-65.5l-33.4-33.4-33.4 33.4v65.5L248 441.6l-26.1-19.2v-65.5l-33.4-33.4-33.5 33.4v65.5l-26.1 19.2-26.1-19.2v-87l59.5-59.5V188l59.5-59.5V52.9l26.1-19.2L274 52.9v75.6l59.5 59.5v87.6l59.7 59.7v87.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"memory\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f538\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"DIMM\", \"RAM\", \"hardware\", \"storage\", \"technology\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f538\",\n    \"label\": \"Memory\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128v7.4c0 6.8 4.4 12.6 10.1 16.3C23.3 160.3 32 175.1 32 192s-8.7 31.7-21.9 40.3C4.4 236 0 241.8 0 248.6V320H576V248.6c0-6.8-4.4-12.6-10.1-16.3C552.7 223.7 544 208.9 544 192s8.7-31.7 21.9-40.3c5.7-3.7 10.1-9.5 10.1-16.3V128c0-35.3-28.7-64-64-64H64zM576 352H0v64c0 17.7 14.3 32 32 32H80V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h96V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h96V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h96V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h48c17.7 0 32-14.3 32-32V352zM192 160v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128v7.4c0 6.8 4.4 12.6 10.1 16.3C23.3 160.3 32 175.1 32 192s-8.7 31.7-21.9 40.3C4.4 236 0 241.8 0 248.6V320H576V248.6c0-6.8-4.4-12.6-10.1-16.3C552.7 223.7 544 208.9 544 192s8.7-31.7 21.9-40.3c5.7-3.7 10.1-9.5 10.1-16.3V128c0-35.3-28.7-64-64-64H64zM576 352H0v64c0 17.7 14.3 32 32 32H80V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h96V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h96V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h96V416c0-8.8 7.2-16 16-16s16 7.2 16 16v32h48c17.7 0 32-14.3 32-32V352zM192 160v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32zm128 0v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mendeley\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7b3\",\n    \"label\": \"Mendeley\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M624.6 325.2c-12.3-12.4-29.7-19.2-48.4-17.2-43.3-1-49.7-34.9-37.5-98.8 22.8-57.5-14.9-131.5-87.4-130.8-77.4.7-81.7 82-130.9 82-48.1 0-54-81.3-130.9-82-72.9-.8-110.1 73.3-87.4 130.8 12.2 63.9 5.8 97.8-37.5 98.8-21.2-2.3-37 6.5-53 22.5-19.9 19.7-19.3 94.8 42.6 102.6 47.1 5.9 81.6-42.9 61.2-87.8-47.3-103.7 185.9-106.1 146.5-8.2-.1.1-.2.2-.3.4-26.8 42.8 6.8 97.4 58.8 95.2 52.1 2.1 85.4-52.6 58.8-95.2-.1-.2-.2-.3-.3-.4-39.4-97.9 193.8-95.5 146.5 8.2-4.6 10-6.7 21.3-5.7 33 4.9 53.4 68.7 74.1 104.9 35.2 17.8-14.8 23.1-65.6 0-88.3zm-303.9-19.1h-.6c-43.4 0-62.8-37.5-62.8-62.8 0-34.7 28.2-62.8 62.8-62.8h.6c34.7 0 62.8 28.1 62.8 62.8 0 25-19.2 62.8-62.8 62.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"menorah\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f676\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"candle\", \"hanukkah\", \"jewish\", \"judaism\", \"light\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f676\",\n    \"label\": \"Menorah\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M20.8 7.4C22.8 2.9 27.1 0 32 0s9.2 2.9 11.2 7.4L61.3 49.7c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32S0 81.7 0 64V62.8c0-4.5 .9-8.9 2.7-13.1L20.8 7.4zm96 0C118.8 2.9 123.1 0 128 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1L116.8 7.4zm77.8 42.4L212.8 7.4C214.8 2.9 219.1 0 224 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1zM308.8 7.4C310.8 2.9 315.1 0 320 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1L308.8 7.4zm77.8 42.4L404.8 7.4C406.8 2.9 411.1 0 416 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1zM500.8 7.4C502.8 2.9 507.1 0 512 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1L500.8 7.4zm77.8 42.4L596.8 7.4C598.8 2.9 603.1 0 608 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1zM32 128c17.7 0 32 14.3 32 32V288c0 17.7 14.3 32 32 32H288V160c0-17.7 14.3-32 32-32s32 14.3 32 32V320H544c17.7 0 32-14.3 32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32V288c0 53-43 96-96 96H352v64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 160c-17.7 0-32-14.3-32-32s14.3-32 32-32H288V384H96c-53 0-96-43-96-96V160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96 32H96V256 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96 32H192V256 160c0-17.7 14.3-32 32-32zm192 0c17.7 0 32 14.3 32 32v96 32H384V256 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96 32H480V256 160c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M20.8 7.4C22.8 2.9 27.1 0 32 0s9.2 2.9 11.2 7.4L61.3 49.7c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32S0 81.7 0 64V62.8c0-4.5 .9-8.9 2.7-13.1L20.8 7.4zm96 0C118.8 2.9 123.1 0 128 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1L116.8 7.4zm77.8 42.4L212.8 7.4C214.8 2.9 219.1 0 224 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1zM308.8 7.4C310.8 2.9 315.1 0 320 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1L308.8 7.4zm77.8 42.4L404.8 7.4C406.8 2.9 411.1 0 416 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1zM500.8 7.4C502.8 2.9 507.1 0 512 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1L500.8 7.4zm77.8 42.4L596.8 7.4C598.8 2.9 603.1 0 608 0s9.2 2.9 11.2 7.4l18.2 42.4c1.8 4.1 2.7 8.6 2.7 13.1V64c0 17.7-14.3 32-32 32s-32-14.3-32-32V62.8c0-4.5 .9-8.9 2.7-13.1zM32 128c17.7 0 32 14.3 32 32V288c0 17.7 14.3 32 32 32H288V160c0-17.7 14.3-32 32-32s32 14.3 32 32V320H544c17.7 0 32-14.3 32-32V160c0-17.7 14.3-32 32-32s32 14.3 32 32V288c0 53-43 96-96 96H352v64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 160c-17.7 0-32-14.3-32-32s14.3-32 32-32H288V384H96c-53 0-96-43-96-96V160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96 32H96V256 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96 32H192V256 160c0-17.7 14.3-32 32-32zm192 0c17.7 0 32 14.3 32 32v96 32H384V256 160c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96 32H480V256 160c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mercury\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"263f\"],\n        \"secondary\": [\"10f223\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Mercury\", \"gender\", \"hybrid\", \"transgender\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f223\",\n    \"label\": \"Mercury\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M72.1 7C85.8-4 106-1.8 117 12c17.6 22 44.7 36 75 36s57.3-14 75-36c11.1-13.8 31.2-16 45-5s16 31.2 5 45c-7.8 9.7-16.6 18.4-26.4 26.1C337.3 109.7 368 163.3 368 224c0 89.1-66.2 162.7-152 174.4V424h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H216v16c0 13.3-10.7 24-24 24s-24-10.7-24-24V472H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V398.4C82.2 386.7 16 313.1 16 224c0-60.7 30.7-114.3 77.5-145.9C83.7 70.5 74.9 61.7 67.1 52c-11.1-13.8-8.8-33.9 5-45zM80 224a112 112 0 1 0 224 0A112 112 0 1 0 80 224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M72.1 7C85.8-4 106-1.8 117 12c17.6 22 44.7 36 75 36s57.3-14 75-36c11.1-13.8 31.2-16 45-5s16 31.2 5 45c-7.8 9.7-16.6 18.4-26.4 26.1C337.3 109.7 368 163.3 368 224c0 89.1-66.2 162.7-152 174.4V424h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H216v16c0 13.3-10.7 24-24 24s-24-10.7-24-24V472H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V398.4C82.2 386.7 16 313.1 16 224c0-60.7 30.7-114.3 77.5-145.9C83.7 70.5 74.9 61.7 67.1 52c-11.1-13.8-8.8-33.9 5-45zM80 224a112 112 0 1 0 224 0A112 112 0 1 0 80 224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"message\": {\n    \"aliases\": {\n      \"names\": [\"comment-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f27a\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bubble\",\n        \"chat\",\n        \"commenting\",\n        \"conversation\",\n        \"feedback\",\n        \"message\",\n        \"note\",\n        \"notification\",\n        \"sms\",\n        \"speech\",\n        \"texting\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f27a\",\n    \"label\": \"Message\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V352c0 35.3 28.7 64 64 64h96v80c0 6.1 3.4 11.6 8.8 14.3s11.9 2.1 16.8-1.5L309.3 416H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V352c0 35.3 28.7 64 64 64h96v80c0 6.1 3.4 11.6 8.8 14.3s11.9 2.1 16.8-1.5L309.3 416H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 368c26.5 0 48 21.5 48 48v16l72.5-54.4c8.3-6.2 18.4-9.6 28.8-9.6H448c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16V352c0 8.8 7.2 16 16 16h96zm48 124l-.2 .2-5.1 3.8-17.1 12.8c-4.8 3.6-11.3 4.2-16.8 1.5s-8.8-8.2-8.8-14.3V474.7v-6.4V468v-4V416H112 64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0H448c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H309.3L208 492z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 368c26.5 0 48 21.5 48 48v16l72.5-54.4c8.3-6.2 18.4-9.6 28.8-9.6H448c8.8 0 16-7.2 16-16V64c0-8.8-7.2-16-16-16H64c-8.8 0-16 7.2-16 16V352c0 8.8 7.2 16 16 16h96zm48 124l-.2 .2-5.1 3.8-17.1 12.8c-4.8 3.6-11.3 4.2-16.8 1.5s-8.8-8.2-8.8-14.3V474.7v-6.4V468v-4V416H112 64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0H448c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H309.3L208 492z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"meta\": {\n    \"changes\": [\"6.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e49b\",\n    \"label\": \"Meta\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 317.9C640 409.2 600.6 466.4 529.7 466.4C467.1 466.4 433.9 431.8 372.8 329.8L341.4 277.2C333.1 264.7 326.9 253 320.2 242.2C300.1 276 273.1 325.2 273.1 325.2C206.1 441.8 168.5 466.4 116.2 466.4C43.42 466.4 0 409.1 0 320.5C0 177.5 79.78 42.4 183.9 42.4C234.1 42.4 277.7 67.08 328.7 131.9C365.8 81.8 406.8 42.4 459.3 42.4C558.4 42.4 640 168.1 640 317.9H640zM287.4 192.2C244.5 130.1 216.5 111.7 183 111.7C121.1 111.7 69.22 217.8 69.22 321.7C69.22 370.2 87.7 397.4 118.8 397.4C149 397.4 167.8 378.4 222 293.6C222 293.6 246.7 254.5 287.4 192.2V192.2zM531.2 397.4C563.4 397.4 578.1 369.9 578.1 322.5C578.1 198.3 523.8 97.08 454.9 97.08C421.7 97.08 393.8 123 360 175.1C369.4 188.9 379.1 204.1 389.3 220.5L426.8 282.9C485.5 377 500.3 397.4 531.2 397.4L531.2 397.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 317.9C640 409.2 600.6 466.4 529.7 466.4C467.1 466.4 433.9 431.8 372.8 329.8L341.4 277.2C333.1 264.7 326.9 253 320.2 242.2C300.1 276 273.1 325.2 273.1 325.2C206.1 441.8 168.5 466.4 116.2 466.4C43.42 466.4 0 409.1 0 320.5C0 177.5 79.78 42.4 183.9 42.4C234.1 42.4 277.7 67.08 328.7 131.9C365.8 81.8 406.8 42.4 459.3 42.4C558.4 42.4 640 168.1 640 317.9H640zM287.4 192.2C244.5 130.1 216.5 111.7 183 111.7C121.1 111.7 69.22 217.8 69.22 321.7C69.22 370.2 87.7 397.4 118.8 397.4C149 397.4 167.8 378.4 222 293.6C222 293.6 246.7 254.5 287.4 192.2V192.2zM531.2 397.4C563.4 397.4 578.1 369.9 578.1 322.5C578.1 198.3 523.8 97.08 454.9 97.08C421.7 97.08 393.8 123 360 175.1C369.4 188.9 379.1 204.1 389.3 220.5L426.8 282.9C485.5 377 500.3 397.4 531.2 397.4L531.2 397.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"meteor\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2604\"],\n        \"secondary\": [\"10f753\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"5.12.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"armageddon\", \"asteroid\", \"comet\", \"shooting star\", \"space\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f753\",\n    \"label\": \"Meteor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M493.7 .9L299.4 75.6l2.3-29.3c1-12.8-12.8-21.5-24-15.1L101.3 133.4C38.6 169.7 0 236.6 0 309C0 421.1 90.9 512 203 512c72.4 0 139.4-38.6 175.7-101.3L480.8 234.3c6.5-11.1-2.2-25-15.1-24l-29.3 2.3L511.1 18.3c.6-1.5 .9-3.2 .9-4.8C512 6 506 0 498.5 0c-1.7 0-3.3 .3-4.8 .9zM192 192a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm16 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M493.7 .9L299.4 75.6l2.3-29.3c1-12.8-12.8-21.5-24-15.1L101.3 133.4C38.6 169.7 0 236.6 0 309C0 421.1 90.9 512 203 512c72.4 0 139.4-38.6 175.7-101.3L480.8 234.3c6.5-11.1-2.2-25-15.1-24l-29.3 2.3L511.1 18.3c.6-1.5 .9-3.2 .9-4.8C512 6 506 0 498.5 0c-1.7 0-3.3 .3-4.8 .9zM192 192a128 128 0 1 1 0 256 128 128 0 1 1 0-256zm0 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm16 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microblog\": {\n    \"changes\": [\"5.12.0\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e01a\",\n    \"label\": \"Micro.blog\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M399.36,362.23c29.49-34.69,47.1-78.34,47.1-125.79C446.46,123.49,346.86,32,224,32S1.54,123.49,1.54,236.44,101.14,440.87,224,440.87a239.28,239.28,0,0,0,79.44-13.44,7.18,7.18,0,0,1,8.12,2.56c18.58,25.09,47.61,42.74,79.89,49.92a4.42,4.42,0,0,0,5.22-3.43,4.37,4.37,0,0,0-.85-3.62,87,87,0,0,1,3.69-110.69ZM329.52,212.4l-57.3,43.49L293,324.75a6.5,6.5,0,0,1-9.94,7.22L224,290.92,164.94,332a6.51,6.51,0,0,1-9.95-7.22l20.79-68.86-57.3-43.49a6.5,6.5,0,0,1,3.8-11.68l71.88-1.51,23.66-67.92a6.5,6.5,0,0,1,12.28,0l23.66,67.92,71.88,1.51a6.5,6.5,0,0,1,3.88,11.68Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"microchip\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f2db\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cpu\", \"hardware\", \"processor\", \"technology\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2db\",\n    \"label\": \"Microchip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64c-35.3 0-64 28.7-64 64H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64c0 35.3 28.7 64 64 64v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448c35.3 0 64-28.7 64-64h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448V280h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448V176h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448c0-35.3-28.7-64-64-64V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H280V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H176V24zM160 128H352c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32zm192 32H160V352H352V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64c-35.3 0-64 28.7-64 64H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64v56H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H64c0 35.3 28.7 64 64 64v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448h56v40c0 13.3 10.7 24 24 24s24-10.7 24-24V448c35.3 0 64-28.7 64-64h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448V280h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448V176h40c13.3 0 24-10.7 24-24s-10.7-24-24-24H448c0-35.3-28.7-64-64-64V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H280V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V64H176V24zM160 128H352c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32zm192 32H160V352H352V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microphone\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f130\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"address\",\n        \"audio\",\n        \"information\",\n        \"podcast\",\n        \"public\",\n        \"record\",\n        \"sing\",\n        \"sound\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f130\",\n    \"label\": \"Microphone\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0C139 0 96 43 96 96V256c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H216V430.4c85.8-11.7 152-85.3 152-174.4V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128s-128-57.3-128-128V216z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0C139 0 96 43 96 96V256c0 53 43 96 96 96s96-43 96-96V96c0-53-43-96-96-96zM64 216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H216V430.4c85.8-11.7 152-85.3 152-174.4V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 70.7-57.3 128-128 128s-128-57.3-128-128V216z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microphone-lines\": {\n    \"aliases\": {\n      \"names\": [\"microphone-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f399\"],\n        \"secondary\": [\"10f3c9\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"mic\",\n        \"microphone\",\n        \"music\",\n        \"podcast\",\n        \"record\",\n        \"sing\",\n        \"sound\",\n        \"studio\",\n        \"studio microphone\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3c9\",\n    \"label\": \"Microphone Lines\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M96 96V256c0 53 43 96 96 96s96-43 96-96H208c-8.8 0-16-7.2-16-16s7.2-16 16-16h80V192H208c-8.8 0-16-7.2-16-16s7.2-16 16-16h80V128H208c-8.8 0-16-7.2-16-16s7.2-16 16-16h80c0-53-43-96-96-96S96 43 96 96zM320 240v16c0 70.7-57.3 128-128 128s-128-57.3-128-128V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H216V430.4c85.8-11.7 152-85.3 152-174.4V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M96 96V256c0 53 43 96 96 96s96-43 96-96H208c-8.8 0-16-7.2-16-16s7.2-16 16-16h80V192H208c-8.8 0-16-7.2-16-16s7.2-16 16-16h80V128H208c-8.8 0-16-7.2-16-16s7.2-16 16-16h80c0-53-43-96-96-96S96 43 96 96zM320 240v16c0 70.7-57.3 128-128 128s-128-57.3-128-128V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 89.1 66.2 162.7 152 174.4V464H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H216V430.4c85.8-11.7 152-85.3 152-174.4V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microphone-lines-slash\": {\n    \"aliases\": {\n      \"names\": [\"microphone-alt-slash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f539\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"disable\",\n        \"mute\",\n        \"podcast\",\n        \"record\",\n        \"sing\",\n        \"sound\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f539\",\n    \"label\": \"Microphone Lines Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v24 16c0 21.2-5.1 41.1-14.2 58.7L416 300.8V256H358.9l-34.5-27c2.9-3.1 7-5 11.6-5h80V192H336c-8.8 0-16-7.2-16-16s7.2-16 16-16h80V128H336c-8.8 0-16-7.2-16-16s7.2-16 16-16h80c0-53-43-96-96-96s-96 43-96 96v54.3L38.8 5.1zm362.5 407l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128v-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6v40c0 89.1 66.2 162.7 152 174.4V464H248c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V430.4c20.4-2.8 39.7-9.1 57.3-18.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v24 16c0 21.2-5.1 41.1-14.2 58.7L416 300.8V256H358.9l-34.5-27c2.9-3.1 7-5 11.6-5h80V192H336c-8.8 0-16-7.2-16-16s7.2-16 16-16h80V128H336c-8.8 0-16-7.2-16-16s7.2-16 16-16h80c0-53-43-96-96-96s-96 43-96 96v54.3L38.8 5.1zm362.5 407l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128v-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6v40c0 89.1 66.2 162.7 152 174.4V464H248c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V430.4c20.4-2.8 39.7-9.1 57.3-18.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microphone-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f131\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"disable\",\n        \"mute\",\n        \"podcast\",\n        \"record\",\n        \"sing\",\n        \"sound\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f131\",\n    \"label\": \"Microphone Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 21.2-5.1 41.1-14.2 58.7L416 300.8V96c0-53-43-96-96-96s-96 43-96 96v54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128v-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6v40c0 89.1 66.2 162.7 152 174.4V464H248c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V430.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c15.2-26 23.9-56.3 23.9-88.7V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v40c0 21.2-5.1 41.1-14.2 58.7L416 300.8V96c0-53-43-96-96-96s-96 43-96 96v54.3L38.8 5.1zM344 430.4c20.4-2.8 39.7-9.1 57.3-18.2l-43.1-33.9C346.1 382 333.3 384 320 384c-70.7 0-128-57.3-128-128v-8.7L144.7 210c-.5 1.9-.7 3.9-.7 6v40c0 89.1 66.2 162.7 152 174.4V464H248c-13.3 0-24 10.7-24 24s10.7 24 24 24h72 72c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V430.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microscope\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f52c\"],\n        \"secondary\": [\"10f610\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"electron\",\n        \"lens\",\n        \"microscope\",\n        \"optics\",\n        \"science\",\n        \"shrink\",\n        \"testing\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f610\",\n    \"label\": \"Microscope\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32c17.7 0 32 14.3 32 32V288c0 17.7-14.3 32-32 32c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32zM32 448H320c70.7 0 128-57.3 128-128s-57.3-128-128-128V128c106 0 192 86 192 192c0 49.2-18.5 94-48.9 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm80-64H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32c17.7 0 32 14.3 32 32V288c0 17.7-14.3 32-32 32c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32zM32 448H320c70.7 0 128-57.3 128-128s-57.3-128-128-128V128c106 0 192 86 192 192c0 49.2-18.5 94-48.9 128H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm80-64H304c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"microsoft\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ca\",\n    \"label\": \"Microsoft\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"mill-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Mill Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1ed\",\n    \"label\": \"Mill Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M302.1 42.8c5.9-16.6-2.7-35-19.4-40.9s-35 2.7-40.9 19.4L208 116.1c-5.7 4-11.1 8.5-16 13.5C171.7 108.9 143.3 96 112 96c-19.5 0-37.8 5-53.7 13.7C52.5 101.4 42.9 96 32 96C14.3 96 0 110.3 0 128v80V416c0 17.7 14.3 32 32 32s32-14.3 32-32V208c0-26.5 21.5-48 48-48s48 21.5 48 48v42.5L81.9 469.2c-5.9 16.6 2.7 35 19.4 40.9s35-2.7 40.9-19.4l21.4-60C168.9 441 179.6 448 192 448c17.7 0 32-14.3 32-32V261.5l35.7-100c3.9-1 8.1-1.6 12.3-1.6c26.5 0 48 21.5 48 48V416c0 17.7 14.3 32 32 32s32-14.3 32-32V208c0-58.2-44.3-106-101.1-111.5l19.2-53.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M302.1 42.8c5.9-16.6-2.7-35-19.4-40.9s-35 2.7-40.9 19.4L208 116.1c-5.7 4-11.1 8.5-16 13.5C171.7 108.9 143.3 96 112 96c-19.5 0-37.8 5-53.7 13.7C52.5 101.4 42.9 96 32 96C14.3 96 0 110.3 0 128v80V416c0 17.7 14.3 32 32 32s32-14.3 32-32V208c0-26.5 21.5-48 48-48s48 21.5 48 48v42.5L81.9 469.2c-5.9 16.6 2.7 35 19.4 40.9s35-2.7 40.9-19.4l21.4-60C168.9 441 179.6 448 192 448c17.7 0 32-14.3 32-32V261.5l35.7-100c3.9-1 8.1-1.6 12.3-1.6c26.5 0 48 21.5 48 48V416c0 17.7 14.3 32 32 32s32-14.3 32-32V208c0-58.2-44.3-106-101.1-111.5l19.2-53.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"minimize\": {\n    \"aliases\": {\n      \"names\": [\"compress-arrows-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f78c\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"collapse\",\n        \"fullscreen\",\n        \"minimize\",\n        \"move\",\n        \"resize\",\n        \"shrink\",\n        \"smaller\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f78c\",\n    \"label\": \"Minimize\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M456 224H312c-13.3 0-24-10.7-24-24V56c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l40 40L442.3 5.7C446 2 450.9 0 456 0s10 2 13.7 5.7l36.7 36.7C510 46 512 50.9 512 56s-2 10-5.7 13.7L433 143l40 40c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8zm0 64c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-40 40 73.4 73.4c3.6 3.6 5.7 8.5 5.7 13.7s-2 10-5.7 13.7l-36.7 36.7C466 510 461.1 512 456 512s-10-2-13.7-5.7L369 433l-40 40c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2V312c0-13.3 10.7-24 24-24H456zm-256 0c13.3 0 24 10.7 24 24V456c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-40-40L69.7 506.3C66 510 61.1 512 56 512s-10-2-13.7-5.7L5.7 469.7C2 466 0 461.1 0 456s2-10 5.7-13.7L79 369 39 329c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8H200zM56 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l40-40L5.7 69.7C2 66 0 61.1 0 56s2-10 5.7-13.7L42.3 5.7C46 2 50.9 0 56 0s10 2 13.7 5.7L143 79l40-40c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2V200c0 13.3-10.7 24-24 24H56z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M456 224H312c-13.3 0-24-10.7-24-24V56c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l40 40L442.3 5.7C446 2 450.9 0 456 0s10 2 13.7 5.7l36.7 36.7C510 46 512 50.9 512 56s-2 10-5.7 13.7L433 143l40 40c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8zm0 64c9.7 0 18.5 5.8 22.2 14.8s1.7 19.3-5.2 26.2l-40 40 73.4 73.4c3.6 3.6 5.7 8.5 5.7 13.7s-2 10-5.7 13.7l-36.7 36.7C466 510 461.1 512 456 512s-10-2-13.7-5.7L369 433l-40 40c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2V312c0-13.3 10.7-24 24-24H456zm-256 0c13.3 0 24 10.7 24 24V456c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-40-40L69.7 506.3C66 510 61.1 512 56 512s-10-2-13.7-5.7L5.7 469.7C2 466 0 461.1 0 456s2-10 5.7-13.7L79 369 39 329c-6.9-6.9-8.9-17.2-5.2-26.2s12.5-14.8 22.2-14.8H200zM56 224c-9.7 0-18.5-5.8-22.2-14.8s-1.7-19.3 5.2-26.2l40-40L5.7 69.7C2 66 0 61.1 0 56s2-10 5.7-13.7L42.3 5.7C46 2 50.9 0 56 0s10 2 13.7 5.7L143 79l40-40c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2V200c0 13.3-10.7 24-24 24H56z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"minus\": {\n    \"aliases\": {\n      \"names\": [\"subtract\"],\n      \"unicodes\": {\n        \"composite\": [\"2013\", \"2212\", \"2796\"],\n        \"secondary\": [\"10f068\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"En Dash\",\n        \"Minus Sign\",\n        \"collapse\",\n        \"delete\",\n        \"hide\",\n        \"math\",\n        \"minify\",\n        \"minus\",\n        \"negative\",\n        \"remove\",\n        \"sign\",\n        \"trash\",\n        \"−\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f068\",\n    \"label\": \"Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mitten\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7b5\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"clothing\",\n        \"cold\",\n        \"glove\",\n        \"hands\",\n        \"knitted\",\n        \"seasonal\",\n        \"warmth\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7b5\",\n    \"label\": \"Mitten\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 384H64L5.4 178.9C1.8 166.4 0 153.4 0 140.3C0 62.8 62.8 0 140.3 0h3.4c66 0 123.5 44.9 139.5 108.9l31.4 125.8 17.6-20.1C344.8 200.2 362.9 192 382 192h2.8c34.9 0 63.3 28.3 63.3 63.3c0 15.9-6 31.2-16.8 42.9L352 384zM32 448c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 384H64L5.4 178.9C1.8 166.4 0 153.4 0 140.3C0 62.8 62.8 0 140.3 0h3.4c66 0 123.5 44.9 139.5 108.9l31.4 125.8 17.6-20.1C344.8 200.2 362.9 192 382 192h2.8c34.9 0 63.3 28.3 63.3 63.3c0 15.9-6 31.2-16.8 42.9L352 384zM32 448c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mix\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3cb\",\n    \"label\": \"Mix\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"mixcloud\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f289\",\n    \"label\": \"Mixcloud\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M212.98 346.566H179.789V195.114L185.973 173.47H175.262L137.127 346.566H76.1069L37.7323 173.47H27.276L33.1913 195.114V346.566H0V165H65.6506L102.248 338.096H110.747L147.329 165H212.98L212.98 346.566ZM544.459 283.589L458.434 345.655V307.534L531.329 255.776L458.434 204.017V165.896L544.459 228.231H553.721L640 165.896V204.017L566.866 255.776L640 307.549V345.655L553.721 283.589H544.459ZM430.157 272.311H248.113V239.255H430.157V272.311Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M212.98 346.566H179.789V195.114L185.973 173.47H175.262L137.127 346.566H76.1069L37.7323 173.47H27.276L33.1913 195.114V346.566H0V165H65.6506L102.248 338.096H110.747L147.329 165H212.98L212.98 346.566ZM544.459 283.589L458.434 345.655V307.534L531.329 255.776L458.434 204.017V165.896L544.459 228.231H553.721L640 165.896V204.017L566.866 255.776L640 307.549V345.655L553.721 283.589H544.459ZM430.157 272.311H248.113V239.255H430.157V272.311Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"mixer\": {\n    \"changes\": [\"5.12.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e056\",\n    \"label\": \"Mixer\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M114.57,76.07a45.71,45.71,0,0,0-67.51-6.41c-17.58,16.18-19,43.52-4.75,62.77l91.78,123L41.76,379.58c-14.23,19.25-13.11,46.59,4.74,62.77A45.71,45.71,0,0,0,114,435.94L242.89,262.7a12.14,12.14,0,0,0,0-14.23ZM470.24,379.58,377.91,255.45l91.78-123c14.22-19.25,12.83-46.59-4.75-62.77a45.71,45.71,0,0,0-67.51,6.41l-128,172.12a12.14,12.14,0,0,0,0,14.23L398,435.94a45.71,45.71,0,0,0,67.51,6.41C483.35,426.17,484.47,398.83,470.24,379.58Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"mizuni\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3cc\",\n    \"label\": \"Mizuni\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"mobile\": {\n    \"aliases\": {\n      \"names\": [\"mobile-android\", \"mobile-phone\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4f1\"],\n        \"secondary\": [\"10f3ce\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"android\",\n        \"call\",\n        \"cell\",\n        \"cell phone\",\n        \"device\",\n        \"mobile\",\n        \"mobile phone\",\n        \"number\",\n        \"phone\",\n        \"screen\",\n        \"telephone\",\n        \"text\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3ce\",\n    \"label\": \"Mobile\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M80 0C44.7 0 16 28.7 16 64V448c0 35.3 28.7 64 64 64H304c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H80zm80 432h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M80 0C44.7 0 16 28.7 16 64V448c0 35.3 28.7 64 64 64H304c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H80zm80 432h64c8.8 0 16 7.2 16 16s-7.2 16-16 16H160c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mobile-button\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f10b\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"apple\",\n        \"call\",\n        \"cell phone\",\n        \"device\",\n        \"iphone\",\n        \"number\",\n        \"screen\",\n        \"telephone\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f10b\",\n    \"label\": \"Mobile Button\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M80 0C44.7 0 16 28.7 16 64V448c0 35.3 28.7 64 64 64H304c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H80zM192 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M80 0C44.7 0 16 28.7 16 64V448c0 35.3 28.7 64 64 64H304c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H80zM192 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mobile-retro\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cellphone\", \"cellular\", \"phone\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e527\",\n    \"label\": \"Mobile Retro\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm64 96v64c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H96c-17.7 0-32 14.3-32 32zM80 352a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM128 48c-8.8 0-16 7.2-16 16s7.2 16 16 16h64c8.8 0 16-7.2 16-16s-7.2-16-16-16H128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm64 96v64c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H96c-17.7 0-32 14.3-32 32zM80 352a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm56-56a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm24 56a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM128 48c-8.8 0-16 7.2-16 16s7.2 16 16 16h64c8.8 0 16-7.2 16-16s-7.2-16-16-16H128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mobile-screen\": {\n    \"aliases\": {\n      \"names\": [\"mobile-android-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3cf\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"android\",\n        \"call\",\n        \"cell phone\",\n        \"device\",\n        \"number\",\n        \"screen\",\n        \"telephone\",\n        \"text\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3cf\",\n    \"label\": \"Mobile Screen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M16 64C16 28.7 44.7 0 80 0H304c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H80c-35.3 0-64-28.7-64-64V64zM144 448c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16s-7.2-16-16-16H160c-8.8 0-16 7.2-16 16zM304 64H80V384H304V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M16 64C16 28.7 44.7 0 80 0H304c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H80c-35.3 0-64-28.7-64-64V64zM144 448c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16s-7.2-16-16-16H160c-8.8 0-16 7.2-16 16zM304 64H80V384H304V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mobile-screen-button\": {\n    \"aliases\": {\n      \"names\": [\"mobile-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3cd\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"apple\",\n        \"call\",\n        \"cell phone\",\n        \"device\",\n        \"iphone\",\n        \"number\",\n        \"screen\",\n        \"telephone\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3cd\",\n    \"label\": \"Mobile Screen Button\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M16 64C16 28.7 44.7 0 80 0H304c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H80c-35.3 0-64-28.7-64-64V64zM224 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM304 64H80V384H304V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M16 64C16 28.7 44.7 0 80 0H304c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H80c-35.3 0-64-28.7-64-64V64zM224 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM304 64H80V384H304V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"modx\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f285\",\n    \"label\": \"MODX\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"monero\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d0\",\n    \"label\": \"Monero\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014483,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"money-bill\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0d6\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"cash\",\n        \"checkout\",\n        \"money\",\n        \"payment\",\n        \"price\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0d6\",\n    \"label\": \"Money Bill\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm64 320H64V320c35.3 0 64 28.7 64 64zM64 192V128h64c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64v64H448zm64-192c-35.3 0-64-28.7-64-64h64v64zM288 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm64 320H64V320c35.3 0 64 28.7 64 64zM64 192V128h64c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64v64H448zm64-192c-35.3 0-64-28.7-64-64h64v64zM288 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-bill-1\": {\n    \"aliases\": {\n      \"names\": [\"money-bill-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3d1\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"cash\",\n        \"checkout\",\n        \"money\",\n        \"payment\",\n        \"price\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f3d1\",\n    \"label\": \"Money Bill 1\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm64 320H64V320c35.3 0 64 28.7 64 64zM64 192V128h64c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64v64H448zm64-192c-35.3 0-64-28.7-64-64h64v64zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm76-48c0 9.7 6.9 17.7 16 19.6V276h-4c-11 0-20 9-20 20s9 20 20 20h24 24c11 0 20-9 20-20s-9-20-20-20h-4V208c0-11-9-20-20-20H272c-11 0-20 9-20 20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm64 320H64V320c35.3 0 64 28.7 64 64zM64 192V128h64c0 35.3-28.7 64-64 64zM448 384c0-35.3 28.7-64 64-64v64H448zm64-192c-35.3 0-64-28.7-64-64h64v64zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm76-48c0 9.7 6.9 17.7 16 19.6V276h-4c-11 0-20 9-20 20s9 20 20 20h24 24c11 0 20-9 20-20s-9-20-20-20h-4V208c0-11-9-20-20-20H272c-11 0-20 9-20 20z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 112c0 35.3-28.7 64-64 64V336c35.3 0 64 28.7 64 64H464c0-35.3 28.7-64 64-64V176c-35.3 0-64-28.7-64-64H112zM0 128C0 92.7 28.7 64 64 64H512c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm80-48c0 8.8 7.2 16 16 16v64h-8c-8.8 0-16 7.2-16 16s7.2 16 16 16h24 24c8.8 0 16-7.2 16-16s-7.2-16-16-16h-8V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 112c0 35.3-28.7 64-64 64V336c35.3 0 64 28.7 64 64H464c0-35.3 28.7-64 64-64V176c-35.3 0-64-28.7-64-64H112zM0 128C0 92.7 28.7 64 64 64H512c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zM176 256a112 112 0 1 1 224 0 112 112 0 1 1 -224 0zm80-48c0 8.8 7.2 16 16 16v64h-8c-8.8 0-16 7.2-16 16s7.2 16 16 16h24 24c8.8 0 16-7.2 16-16s-7.2-16-16-16h-8V208c0-8.8-7.2-16-16-16H272c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"money-bill-1-wave\": {\n    \"aliases\": {\n      \"names\": [\"money-bill-wave-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f53b\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"cash\",\n        \"checkout\",\n        \"money\",\n        \"payment\",\n        \"price\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f53b\",\n    \"label\": \"Money Bill 1 Wave\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 112.5V422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4V89.7c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM128 416H64V352c35.3 0 64 28.7 64 64zM64 224V160h64c0 35.3-28.7 64-64 64zM448 352c0-35.3 28.7-64 64-64v64H448zm64-192c-35.3 0-64-28.7-64-64h64v64zM384 256c0 61.9-43 112-96 112s-96-50.1-96-112s43-112 96-112s96 50.1 96 112zM252 208c0 9.7 6.9 17.7 16 19.6V276h-4c-11 0-20 9-20 20s9 20 20 20h24 24c11 0 20-9 20-20s-9-20-20-20h-4V208c0-11-9-20-20-20H272c-11 0-20 9-20 20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 112.5V422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4V89.7c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM128 416H64V352c35.3 0 64 28.7 64 64zM64 224V160h64c0 35.3-28.7 64-64 64zM448 352c0-35.3 28.7-64 64-64v64H448zm64-192c-35.3 0-64-28.7-64-64h64v64zM384 256c0 61.9-43 112-96 112s-96-50.1-96-112s43-112 96-112s96 50.1 96 112zM252 208c0 9.7 6.9 17.7 16 19.6V276h-4c-11 0-20 9-20 20s9 20 20 20h24 24c11 0 20-9 20-20s-9-20-20-20h-4V208c0-11-9-20-20-20H272c-11 0-20 9-20 20z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-bill-transfer\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bank\",\n        \"conversion\",\n        \"deposit\",\n        \"money\",\n        \"transfer\",\n        \"withdrawal\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e528\",\n    \"label\": \"Money Bill Transfer\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M535 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l64 64c4.5 4.5 7 10.6 7 17s-2.5 12.5-7 17l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23L384 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l174.1 0L535 41zM105 377l-23 23L256 400c13.3 0 24 10.7 24 24s-10.7 24-24 24L81.9 448l23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 441c-4.5-4.5-7-10.6-7-17s2.5-12.5 7-17l64-64c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM96 64H337.9c-3.7 7.2-5.9 15.3-5.9 24c0 28.7 23.3 52 52 52l117.4 0c-4 17 .6 35.5 13.8 48.8c20.3 20.3 53.2 20.3 73.5 0L608 169.5V384c0 35.3-28.7 64-64 64H302.1c3.7-7.2 5.9-15.3 5.9-24c0-28.7-23.3-52-52-52l-117.4 0c4-17-.6-35.5-13.8-48.8c-20.3-20.3-53.2-20.3-73.5 0L32 342.5V128c0-35.3 28.7-64 64-64zm64 64H96v64c35.3 0 64-28.7 64-64zM544 320c-35.3 0-64 28.7-64 64h64V320zM320 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M535 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l64 64c4.5 4.5 7 10.6 7 17s-2.5 12.5-7 17l-64 64c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l23-23L384 112c-13.3 0-24-10.7-24-24s10.7-24 24-24l174.1 0L535 41zM105 377l-23 23L256 400c13.3 0 24 10.7 24 24s-10.7 24-24 24L81.9 448l23 23c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 441c-4.5-4.5-7-10.6-7-17s2.5-12.5 7-17l64-64c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9zM96 64H337.9c-3.7 7.2-5.9 15.3-5.9 24c0 28.7 23.3 52 52 52l117.4 0c-4 17 .6 35.5 13.8 48.8c20.3 20.3 53.2 20.3 73.5 0L608 169.5V384c0 35.3-28.7 64-64 64H302.1c3.7-7.2 5.9-15.3 5.9-24c0-28.7-23.3-52-52-52l-117.4 0c4-17-.6-35.5-13.8-48.8c-20.3-20.3-53.2-20.3-73.5 0L32 342.5V128c0-35.3 28.7-64 64-64zm64 64H96v64c35.3 0 64-28.7 64-64zM544 320c-35.3 0-64 28.7-64 64h64V320zM320 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-bill-trend-up\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bank\", \"bonds\", \"inflation\", \"market\", \"stocks\", \"trade\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e529\",\n    \"label\": \"Money Bill Trend Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M470.7 9.4c3 3.1 5.3 6.6 6.9 10.3s2.4 7.8 2.4 12.2l0 .1v0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3L310.6 214.6c-11.8 11.8-30.8 12.6-43.5 1.7L176 138.1 84.8 216.3c-13.4 11.5-33.6 9.9-45.1-3.5s-9.9-33.6 3.5-45.1l112-96c12-10.3 29.7-10.3 41.7 0l89.5 76.7L370.7 64H352c-17.7 0-32-14.3-32-32s14.3-32 32-32h96 0c8.8 0 16.8 3.6 22.6 9.3l.1 .1zM0 304c0-26.5 21.5-48 48-48H464c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V304zM48 416v48H96c0-26.5-21.5-48-48-48zM96 304H48v48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48h48V416zM416 304c0 26.5 21.5 48 48 48V304H416zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M470.7 9.4c3 3.1 5.3 6.6 6.9 10.3s2.4 7.8 2.4 12.2l0 .1v0 96c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3L310.6 214.6c-11.8 11.8-30.8 12.6-43.5 1.7L176 138.1 84.8 216.3c-13.4 11.5-33.6 9.9-45.1-3.5s-9.9-33.6 3.5-45.1l112-96c12-10.3 29.7-10.3 41.7 0l89.5 76.7L370.7 64H352c-17.7 0-32-14.3-32-32s14.3-32 32-32h96 0c8.8 0 16.8 3.6 22.6 9.3l.1 .1zM0 304c0-26.5 21.5-48 48-48H464c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V304zM48 416v48H96c0-26.5-21.5-48-48-48zM96 304H48v48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48h48V416zM416 304c0 26.5 21.5 48 48 48V304H416zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-bill-wave\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f53a\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buy\",\n        \"cash\",\n        \"checkout\",\n        \"money\",\n        \"payment\",\n        \"price\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f53a\",\n    \"label\": \"Money Bill Wave\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 112.5V422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4V89.7c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM288 352c-44.2 0-80-43-80-96s35.8-96 80-96s80 43 80 96s-35.8 96-80 96zM64 352c35.3 0 64 28.7 64 64H64V352zm64-208c0 35.3-28.7 64-64 64V144h64zM512 304v64H448c0-35.3 28.7-64 64-64zM448 96h64v64c-35.3 0-64-28.7-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 112.5V422.3c0 18 10.1 35 27 41.3c87 32.5 174 10.3 261-11.9c79.8-20.3 159.6-40.7 239.3-18.9c23 6.3 48.7-9.5 48.7-33.4V89.7c0-18-10.1-35-27-41.3C462 15.9 375 38.1 288 60.3C208.2 80.6 128.4 100.9 48.7 79.1C25.6 72.8 0 88.6 0 112.5zM288 352c-44.2 0-80-43-80-96s35.8-96 80-96s80 43 80 96s-35.8 96-80 96zM64 352c35.3 0 64 28.7 64 64H64V352zm64-208c0 35.3-28.7 64-64 64V144h64zM512 304v64H448c0-35.3 28.7-64 64-64zM448 96h64v64c-35.3 0-64-28.7-64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-bill-wheat\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"agribusiness\",\n        \"agriculture\",\n        \"farming\",\n        \"food\",\n        \"livelihood\",\n        \"subsidy\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e52a\",\n    \"label\": \"Money Bill Wheat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zM56 16h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56C42.7 64 32 53.3 32 40s10.7-24 24-24zM24 88H136c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24S10.7 88 24 88zm8 96c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24zM272 16c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80zM400 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zm80 144c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 128c8.8 0 16 7.2 16 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-96 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM0 304c0-26.5 21.5-48 48-48H464c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V304zM48 416v48H96c0-26.5-21.5-48-48-48zM96 304H48v48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48h48V416zM416 304c0 26.5 21.5 48 48 48V304H416zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zM56 16h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56C42.7 64 32 53.3 32 40s10.7-24 24-24zM24 88H136c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24S10.7 88 24 88zm8 96c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24zM272 16c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80zM400 0c44.2 0 80 35.8 80 80c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80c0-8.8 7.2-16 16-16zm80 144c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 128c8.8 0 16 7.2 16 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80zm-96 16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM0 304c0-26.5 21.5-48 48-48H464c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V304zM48 416v48H96c0-26.5-21.5-48-48-48zM96 304H48v48c26.5 0 48-21.5 48-48zM464 416c-26.5 0-48 21.5-48 48h48V416zM416 304c0 26.5 21.5 48 48 48V304H416zm-96 80a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-bills\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"atm\", \"cash\", \"money\", \"moolah\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1f3\",\n    \"label\": \"Money Bills\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 96V320c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H160c-35.3 0-64 28.7-64 64zm64 160c35.3 0 64 28.7 64 64H160V256zM224 96c0 35.3-28.7 64-64 64V96h64zM576 256v64H512c0-35.3 28.7-64 64-64zM512 96h64v64c-35.3 0-64-28.7-64-64zM288 208a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120V360c0 66.3 53.7 120 120 120H520c13.3 0 24-10.7 24-24s-10.7-24-24-24H120c-39.8 0-72-32.2-72-72V120z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 96V320c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H160c-35.3 0-64 28.7-64 64zm64 160c35.3 0 64 28.7 64 64H160V256zM224 96c0 35.3-28.7 64-64 64V96h64zM576 256v64H512c0-35.3 28.7-64 64-64zM512 96h64v64c-35.3 0-64-28.7-64-64zM288 208a80 80 0 1 1 160 0 80 80 0 1 1 -160 0zM48 120c0-13.3-10.7-24-24-24S0 106.7 0 120V360c0 66.3 53.7 120 120 120H520c13.3 0 24-10.7 24-24s-10.7-24-24-24H120c-39.8 0-72-32.2-72-72V120z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-check\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f53c\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bank check\",\n        \"buy\",\n        \"checkout\",\n        \"cheque\",\n        \"money\",\n        \"payment\",\n        \"price\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f53c\",\n    \"label\": \"Money Check\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm48 160H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zM96 336c0-8.8 7.2-16 16-16H464c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zM376 160h80c13.3 0 24 10.7 24 24v48c0 13.3-10.7 24-24 24H376c-13.3 0-24-10.7-24-24V184c0-13.3 10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm48 160H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zM96 336c0-8.8 7.2-16 16-16H464c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zM376 160h80c13.3 0 24 10.7 24 24v48c0 13.3-10.7 24-24 24H376c-13.3 0-24-10.7-24-24V184c0-13.3 10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"money-check-dollar\": {\n    \"aliases\": {\n      \"names\": [\"money-check-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f53d\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bank check\",\n        \"buy\",\n        \"checkout\",\n        \"cheque\",\n        \"money\",\n        \"payment\",\n        \"price\",\n        \"purchase\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f53d\",\n    \"label\": \"Money Check Dollar\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zM272 192H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-8.8 0-16-7.2-16-16s7.2-16 16-16zM256 304c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-8.8 0-16-7.2-16-16zM164 152v13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9V360c0 11-9 20-20 20s-20-9-20-20V345.4c-10.3-2.2-20-5.5-28.2-8.4l0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5V152c0-11 9-20 20-20s20 9 20 20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zM272 192H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-8.8 0-16-7.2-16-16s7.2-16 16-16zM256 304c0-8.8 7.2-16 16-16H496c8.8 0 16 7.2 16 16s-7.2 16-16 16H272c-8.8 0-16-7.2-16-16zM164 152v13.9c7.5 1.2 14.6 2.9 21.1 4.7c10.7 2.8 17 13.8 14.2 24.5s-13.8 17-24.5 14.2c-11-2.9-21.6-5-31.2-5.2c-7.9-.1-16 1.8-21.5 5c-4.8 2.8-6.2 5.6-6.2 9.3c0 1.8 .1 3.5 5.3 6.7c6.3 3.8 15.5 6.7 28.3 10.5l.7 .2c11.2 3.4 25.6 7.7 37.1 15c12.9 8.1 24.3 21.3 24.6 41.6c.3 20.9-10.5 36.1-24.8 45c-7.2 4.5-15.2 7.3-23.2 9V360c0 11-9 20-20 20s-20-9-20-20V345.4c-10.3-2.2-20-5.5-28.2-8.4l0 0 0 0c-2.1-.7-4.1-1.4-6.1-2.1c-10.5-3.5-16.1-14.8-12.6-25.3s14.8-16.1 25.3-12.6c2.5 .8 4.9 1.7 7.2 2.4c13.6 4.6 24 8.1 35.1 8.5c8.6 .3 16.5-1.6 21.4-4.7c4.1-2.5 6-5.5 5.9-10.5c0-2.9-.8-5-5.9-8.2c-6.3-4-15.4-6.9-28-10.7l-1.7-.5c-10.9-3.3-24.6-7.4-35.6-14c-12.7-7.7-24.6-20.5-24.7-40.7c-.1-21.1 11.8-35.7 25.8-43.9c6.9-4.1 14.5-6.8 22.2-8.5V152c0-11 9-20 20-20s20 9 20 20z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"monument\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5a6\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"historic\", \"landmark\", \"memorable\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5a6\",\n    \"label\": \"Monument\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M180.7 4.7c6.2-6.2 16.4-6.2 22.6 0l80 80c2.5 2.5 4.1 5.8 4.6 9.3l40.2 322H55.9L96.1 94c.4-3.5 2-6.8 4.6-9.3l80-80zM152 272c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H152zM32 448H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M180.7 4.7c6.2-6.2 16.4-6.2 22.6 0l80 80c2.5 2.5 4.1 5.8 4.6 9.3l40.2 322H55.9L96.1 94c.4-3.5 2-6.8 4.6-9.3l80-80zM152 272c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H152zM32 448H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"moon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f319\", \"23fe\"],\n        \"secondary\": [\"10f186\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Power Sleep Symbol\",\n        \"contrast\",\n        \"crescent\",\n        \"crescent moon\",\n        \"dark\",\n        \"lunar\",\n        \"moon\",\n        \"night\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f186\",\n    \"label\": \"Moon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M223.5 32C100 32 0 132.3 0 256S100 480 223.5 480c60.6 0 115.5-24.2 155.8-63.4c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-9.8 1.7-19.8 2.6-30.1 2.6c-96.9 0-175.5-78.8-175.5-176c0-65.8 36-123.1 89.3-153.3c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-6.3-.5-12.6-.8-19-.8z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M144.7 98.7c-21 34.1-33.1 74.3-33.1 117.3c0 98 62.8 181.4 150.4 211.7c-12.4 2.8-25.3 4.3-38.6 4.3C126.6 432 48 353.3 48 256c0-68.9 39.4-128.4 96.8-157.3zm62.1-66C91.1 41.2 0 137.9 0 256C0 379.7 100 480 223.5 480c47.8 0 92-15 128.4-40.6c1.9-1.3 3.7-2.7 5.5-4c4.8-3.6 9.4-7.4 13.9-11.4c2.7-2.4 5.3-4.8 7.9-7.3c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-3.7 .6-7.4 1.2-11.1 1.6c-5 .5-10.1 .9-15.3 1c-1.2 0-2.5 0-3.7 0c-.1 0-.2 0-.3 0c-96.8-.2-175.2-78.9-175.2-176c0-54.8 24.9-103.7 64.1-136c1-.9 2.1-1.7 3.2-2.6c4-3.2 8.2-6.2 12.5-9c3.1-2 6.3-4 9.6-5.8c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-3.6-.3-7.1-.5-10.7-.6c-2.7-.1-5.5-.1-8.2-.1c-3.3 0-6.5 .1-9.8 .2c-2.3 .1-4.6 .2-6.9 .4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M144.7 98.7c-21 34.1-33.1 74.3-33.1 117.3c0 98 62.8 181.4 150.4 211.7c-12.4 2.8-25.3 4.3-38.6 4.3C126.6 432 48 353.3 48 256c0-68.9 39.4-128.4 96.8-157.3zm62.1-66C91.1 41.2 0 137.9 0 256C0 379.7 100 480 223.5 480c47.8 0 92-15 128.4-40.6c1.9-1.3 3.7-2.7 5.5-4c4.8-3.6 9.4-7.4 13.9-11.4c2.7-2.4 5.3-4.8 7.9-7.3c5-4.9 6.3-12.5 3.1-18.7s-10.1-9.7-17-8.5c-3.7 .6-7.4 1.2-11.1 1.6c-5 .5-10.1 .9-15.3 1c-1.2 0-2.5 0-3.7 0c-.1 0-.2 0-.3 0c-96.8-.2-175.2-78.9-175.2-176c0-54.8 24.9-103.7 64.1-136c1-.9 2.1-1.7 3.2-2.6c4-3.2 8.2-6.2 12.5-9c3.1-2 6.3-4 9.6-5.8c6.1-3.5 9.2-10.5 7.7-17.3s-7.3-11.9-14.3-12.5c-3.6-.3-7.1-.5-10.7-.6c-2.7-.1-5.5-.1-8.2-.1c-3.3 0-6.5 .1-9.8 .2c-2.3 .1-4.6 .2-6.9 .4z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"mortar-pestle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5a7\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"crush\",\n        \"culinary\",\n        \"grind\",\n        \"medical\",\n        \"mix\",\n        \"pharmacy\",\n        \"prescription\",\n        \"spices\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5a7\",\n    \"label\": \"Mortar Pestle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M504.3 11.1C493.3-1.6 474.5-3.7 461 6.2L252.3 160H397.3L502.6 54.6c11.8-11.8 12.6-30.8 1.6-43.5zM32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32c0 82.5 43.4 147.7 123.9 176.2c-11.1 13.9-19.4 30.3-23.9 48.1C127.6 497.4 142.3 512 160 512H352c17.7 0 32.4-14.6 28.1-31.7c-4.5-17.8-12.8-34.1-23.9-48.1C436.6 403.7 480 338.5 480 256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M504.3 11.1C493.3-1.6 474.5-3.7 461 6.2L252.3 160H397.3L502.6 54.6c11.8-11.8 12.6-30.8 1.6-43.5zM32 192c-17.7 0-32 14.3-32 32s14.3 32 32 32c0 82.5 43.4 147.7 123.9 176.2c-11.1 13.9-19.4 30.3-23.9 48.1C127.6 497.4 142.3 512 160 512H352c17.7 0 32.4-14.6 28.1-31.7c-4.5-17.8-12.8-34.1-23.9-48.1C436.6 403.7 480 338.5 480 256c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mosque\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f54c\"],\n        \"secondary\": [\"10f678\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Muslim\",\n        \"building\",\n        \"islam\",\n        \"landmark\",\n        \"mosque\",\n        \"muslim\",\n        \"religion\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f678\",\n    \"label\": \"Mosque\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M400 0c5 0 9.8 2.4 12.8 6.4c34.7 46.3 78.1 74.9 133.5 111.5l0 0 0 0c5.2 3.4 10.5 7 16 10.6c28.9 19.2 45.7 51.7 45.7 86.1c0 28.6-11.3 54.5-29.8 73.4H221.8c-18.4-19-29.8-44.9-29.8-73.4c0-34.4 16.7-66.9 45.7-86.1c5.4-3.6 10.8-7.1 16-10.6l0 0 0 0C309.1 81.3 352.5 52.7 387.2 6.4c3-4 7.8-6.4 12.8-6.4zM288 512V440c0-13.3-10.7-24-24-24s-24 10.7-24 24v72H192c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32H608c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H560V440c0-13.3-10.7-24-24-24s-24 10.7-24 24v72H448V454c0-19-8.4-37-23-49.2L400 384l-25 20.8C360.4 417 352 435 352 454v58H288zM70.4 5.2c5.7-4.3 13.5-4.3 19.2 0l16 12C139.8 42.9 160 83.2 160 126v2H0v-2C0 83.2 20.2 42.9 54.4 17.2l16-12zM0 160H160V296.6c-19.1 11.1-32 31.7-32 55.4V480c0 9.6 2.1 18.6 5.8 26.8c-6.6 3.4-14 5.2-21.8 5.2H48c-26.5 0-48-21.5-48-48V176 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M400 0c5 0 9.8 2.4 12.8 6.4c34.7 46.3 78.1 74.9 133.5 111.5l0 0 0 0c5.2 3.4 10.5 7 16 10.6c28.9 19.2 45.7 51.7 45.7 86.1c0 28.6-11.3 54.5-29.8 73.4H221.8c-18.4-19-29.8-44.9-29.8-73.4c0-34.4 16.7-66.9 45.7-86.1c5.4-3.6 10.8-7.1 16-10.6l0 0 0 0C309.1 81.3 352.5 52.7 387.2 6.4c3-4 7.8-6.4 12.8-6.4zM288 512V440c0-13.3-10.7-24-24-24s-24 10.7-24 24v72H192c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32H608c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H560V440c0-13.3-10.7-24-24-24s-24 10.7-24 24v72H448V454c0-19-8.4-37-23-49.2L400 384l-25 20.8C360.4 417 352 435 352 454v58H288zM70.4 5.2c5.7-4.3 13.5-4.3 19.2 0l16 12C139.8 42.9 160 83.2 160 126v2H0v-2C0 83.2 20.2 42.9 54.4 17.2l16-12zM0 160H160V296.6c-19.1 11.1-32 31.7-32 55.4V480c0 9.6 2.1 18.6 5.8 26.8c-6.6 3.4-14 5.2-21.8 5.2H48c-26.5 0-48-21.5-48-48V176 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mosquito\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bite\", \"bug\", \"mosquito\", \"west nile\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e52b\",\n    \"label\": \"Mosquito\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M463.7 505.9c9.8-8.9 10.7-24.3 2.1-34.3l-42.1-49 0-54.7c0-5.5-1.8-10.8-5.1-15.1L352 266.3l0-.3L485.4 387.8C542.4 447.6 640 405.2 640 320.6c0-47.9-34-88.3-79.4-94.2l-153-23.9 40.8-40.9c7.8-7.8 9.4-20.1 3.9-29.8L428.5 90.1l38.2-50.9c8-10.6 6.1-25.9-4.3-34.1s-25.2-6.3-33.2 4.4l-48 63.9c-5.9 7.9-6.6 18.6-1.7 27.2L402.2 140 352 190.3l0-38.2c0-14.9-10.2-27.4-24-31l0-57.2c0-4.4-3.6-8-8-8s-8 3.6-8 8l0 57.2c-13.8 3.6-24 16.1-24 31l0 38.1L237.8 140l22.6-39.5c4.9-8.6 4.2-19.3-1.7-27.2l-48-63.9c-8-10.6-22.8-12.6-33.2-4.4s-12.2 23.5-4.3 34.1l38.2 50.9-23.9 41.7c-5.5 9.7-3.9 22 3.9 29.8l40.8 40.9-153 23.9C34 232.3 0 272.7 0 320.6c0 84.6 97.6 127 154.6 67.1L288 266l0 .3-66.5 86.4c-3.3 4.3-5.1 9.6-5.1 15.1l0 54.7-42.1 49c-8.6 10.1-7.7 25.5 2.1 34.3s24.7 7.9 33.4-2.1l48-55.9c3.8-4.4 5.9-10.2 5.9-16.1l0-55.4L288 344.7l0 63.1c0 17.7 14.3 32 32 32s32-14.3 32-32l0-63.1 24.3 31.6 0 55.4c0 5.9 2.1 11.7 5.9 16.1l48 55.9c8.6 10.1 23.6 11 33.4 2.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M463.7 505.9c9.8-8.9 10.7-24.3 2.1-34.3l-42.1-49 0-54.7c0-5.5-1.8-10.8-5.1-15.1L352 266.3l0-.3L485.4 387.8C542.4 447.6 640 405.2 640 320.6c0-47.9-34-88.3-79.4-94.2l-153-23.9 40.8-40.9c7.8-7.8 9.4-20.1 3.9-29.8L428.5 90.1l38.2-50.9c8-10.6 6.1-25.9-4.3-34.1s-25.2-6.3-33.2 4.4l-48 63.9c-5.9 7.9-6.6 18.6-1.7 27.2L402.2 140 352 190.3l0-38.2c0-14.9-10.2-27.4-24-31l0-57.2c0-4.4-3.6-8-8-8s-8 3.6-8 8l0 57.2c-13.8 3.6-24 16.1-24 31l0 38.1L237.8 140l22.6-39.5c4.9-8.6 4.2-19.3-1.7-27.2l-48-63.9c-8-10.6-22.8-12.6-33.2-4.4s-12.2 23.5-4.3 34.1l38.2 50.9-23.9 41.7c-5.5 9.7-3.9 22 3.9 29.8l40.8 40.9-153 23.9C34 232.3 0 272.7 0 320.6c0 84.6 97.6 127 154.6 67.1L288 266l0 .3-66.5 86.4c-3.3 4.3-5.1 9.6-5.1 15.1l0 54.7-42.1 49c-8.6 10.1-7.7 25.5 2.1 34.3s24.7 7.9 33.4-2.1l48-55.9c3.8-4.4 5.9-10.2 5.9-16.1l0-55.4L288 344.7l0 63.1c0 17.7 14.3 32 32 32s32-14.3 32-32l0-63.1 24.3 31.6 0 55.4c0 5.9 2.1 11.7 5.9 16.1l48 55.9c8.6 10.1 23.6 11 33.4 2.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mosquito-net\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bite\", \"malaria\", \"mosquito\", \"net\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e52c\",\n    \"label\": \"Mosquito Net\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M168.8 462.3c-7.9-4-11.1-13.6-7.2-21.5L192 380.2l0-44.2c0-4.2 1.7-8.3 4.7-11.3L256 265.4V242.2L139.2 344C87.8 395.3 0 358.9 0 286.3c0-41.1 30.6-75.8 71.4-80.9l159.9-23.9-49.6-41.3c-5.1-4.2-7-11.1-4.9-17.4l13.9-41.7-29-58.1c-4-7.9-.7-17.5 7.2-21.5s17.5-.7 21.5 7.2l32 64c1.9 3.8 2.2 8.2 .9 12.2l-12.5 37.6L256 160.5V137.9c0-14.9 10.1-27.3 23.8-31V63.7c0-4.5 3.7-8.2 8.2-8.2s8.2 3.7 8.2 8.2V107c13.7 3.6 23.8 16.1 23.8 31v22.6l45.4-37.8L352.8 85.1c-1.3-4-1-8.4 .9-12.2l32-64c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-29 58.1 13.9 41.7c2.1 6.2 .1 13.1-4.9 17.4l-49.6 41.3 159.9 23.9c22.5 2.8 41.8 14.6 54.7 31.4c-2.7 2.6-5.2 5.4-7.3 8.6c-8.6-12.9-23.3-21.5-40-21.5s-31.4 8.5-40 21.5c-8.6-12.9-23.3-21.5-40-21.5c-21.7 0-40 14.3-45.9 34.1c-10.7 3.2-19.8 10.1-25.9 19.2l-40.2-35v23.1l32.4 32.4c-.3 2-.4 4.1-.4 6.2c0 16.7 8.5 31.4 21.5 40c-4 2.6-7.5 5.9-10.6 9.5L320 310.6v50c0 17.7-14.3 32-32 32s-32-14.3-32-32v-50l-32 32 0 41.4c0 2.5-.6 4.9-1.7 7.2l-32 64c-4 7.9-13.6 11.1-21.5 7.2zM512 256c8.8 0 16 7.2 16 16v16h48V272c0-8.8 7.2-16 16-16s16 7.2 16 16v16h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H608v48h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H608v48h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H608v16c0 8.8-7.2 16-16 16s-16-7.2-16-16V480H528v16c0 8.8-7.2 16-16 16s-16-7.2-16-16V480H448v16c0 8.8-7.2 16-16 16s-16-7.2-16-16V480H400c-8.8 0-16-7.2-16-16s7.2-16 16-16h16V400H400c-8.8 0-16-7.2-16-16s7.2-16 16-16h16V320H400c-8.8 0-16-7.2-16-16s7.2-16 16-16h16V272c0-8.8 7.2-16 16-16s16 7.2 16 16v16h48V272c0-8.8 7.2-16 16-16zm16 112h48V320H528v48zm0 80h48V400H528v48zM448 320v48h48V320H448zm0 80v48h48V400H448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M168.8 462.3c-7.9-4-11.1-13.6-7.2-21.5L192 380.2l0-44.2c0-4.2 1.7-8.3 4.7-11.3L256 265.4V242.2L139.2 344C87.8 395.3 0 358.9 0 286.3c0-41.1 30.6-75.8 71.4-80.9l159.9-23.9-49.6-41.3c-5.1-4.2-7-11.1-4.9-17.4l13.9-41.7-29-58.1c-4-7.9-.7-17.5 7.2-21.5s17.5-.7 21.5 7.2l32 64c1.9 3.8 2.2 8.2 .9 12.2l-12.5 37.6L256 160.5V137.9c0-14.9 10.1-27.3 23.8-31V63.7c0-4.5 3.7-8.2 8.2-8.2s8.2 3.7 8.2 8.2V107c13.7 3.6 23.8 16.1 23.8 31v22.6l45.4-37.8L352.8 85.1c-1.3-4-1-8.4 .9-12.2l32-64c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-29 58.1 13.9 41.7c2.1 6.2 .1 13.1-4.9 17.4l-49.6 41.3 159.9 23.9c22.5 2.8 41.8 14.6 54.7 31.4c-2.7 2.6-5.2 5.4-7.3 8.6c-8.6-12.9-23.3-21.5-40-21.5s-31.4 8.5-40 21.5c-8.6-12.9-23.3-21.5-40-21.5c-21.7 0-40 14.3-45.9 34.1c-10.7 3.2-19.8 10.1-25.9 19.2l-40.2-35v23.1l32.4 32.4c-.3 2-.4 4.1-.4 6.2c0 16.7 8.5 31.4 21.5 40c-4 2.6-7.5 5.9-10.6 9.5L320 310.6v50c0 17.7-14.3 32-32 32s-32-14.3-32-32v-50l-32 32 0 41.4c0 2.5-.6 4.9-1.7 7.2l-32 64c-4 7.9-13.6 11.1-21.5 7.2zM512 256c8.8 0 16 7.2 16 16v16h48V272c0-8.8 7.2-16 16-16s16 7.2 16 16v16h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H608v48h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H608v48h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H608v16c0 8.8-7.2 16-16 16s-16-7.2-16-16V480H528v16c0 8.8-7.2 16-16 16s-16-7.2-16-16V480H448v16c0 8.8-7.2 16-16 16s-16-7.2-16-16V480H400c-8.8 0-16-7.2-16-16s7.2-16 16-16h16V400H400c-8.8 0-16-7.2-16-16s7.2-16 16-16h16V320H400c-8.8 0-16-7.2-16-16s7.2-16 16-16h16V272c0-8.8 7.2-16 16-16s16 7.2 16 16v16h48V272c0-8.8 7.2-16 16-16zm16 112h48V320H528v48zm0 80h48V400H528v48zM448 320v48h48V320H448zm0 80v48h48V400H448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"motorcycle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3cd\"],\n        \"secondary\": [\"10f21c\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bike\",\n        \"machine\",\n        \"motorcycle\",\n        \"racing\",\n        \"transportation\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f21c\",\n    \"label\": \"Motorcycle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M280 32c-13.3 0-24 10.7-24 24s10.7 24 24 24h57.7l16.4 30.3L256 192l-45.3-45.3c-12-12-28.3-18.7-45.3-18.7H64c-17.7 0-32 14.3-32 32v32h96c88.4 0 160 71.6 160 160c0 11-1.1 21.7-3.2 32h70.4c-2.1-10.3-3.2-21-3.2-32c0-52.2 25-98.6 63.7-127.8l15.4 28.6C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L418.2 128H480c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H459.6c-7.5 0-14.7 2.6-20.5 7.4L391.7 78.9l-14-26c-7-12.9-20.5-21-35.2-21H280zM462.7 311.2l28.2 52.2c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-28.2-52.2c2.3-.3 4.7-.4 7.1-.4c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-15.5 5.5-29.7 14.7-40.8zM187.3 376c-9.5 23.5-32.5 40-59.3 40c-35.3 0-64-28.7-64-64s28.7-64 64-64c26.9 0 49.9 16.5 59.3 40h66.4C242.5 268.8 190.5 224 128 224C57.3 224 0 281.3 0 352s57.3 128 128 128c62.5 0 114.5-44.8 125.8-104H187.3zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M280 32c-13.3 0-24 10.7-24 24s10.7 24 24 24h57.7l16.4 30.3L256 192l-45.3-45.3c-12-12-28.3-18.7-45.3-18.7H64c-17.7 0-32 14.3-32 32v32h96c88.4 0 160 71.6 160 160c0 11-1.1 21.7-3.2 32h70.4c-2.1-10.3-3.2-21-3.2-32c0-52.2 25-98.6 63.7-127.8l15.4 28.6C402.4 276.3 384 312 384 352c0 70.7 57.3 128 128 128s128-57.3 128-128s-57.3-128-128-128c-13.5 0-26.5 2.1-38.7 6L418.2 128H480c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H459.6c-7.5 0-14.7 2.6-20.5 7.4L391.7 78.9l-14-26c-7-12.9-20.5-21-35.2-21H280zM462.7 311.2l28.2 52.2c6.3 11.7 20.9 16 32.5 9.7s16-20.9 9.7-32.5l-28.2-52.2c2.3-.3 4.7-.4 7.1-.4c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-15.5 5.5-29.7 14.7-40.8zM187.3 376c-9.5 23.5-32.5 40-59.3 40c-35.3 0-64-28.7-64-64s28.7-64 64-64c26.9 0 49.9 16.5 59.3 40h66.4C242.5 268.8 190.5 224 128 224C57.3 224 0 281.3 0 352s57.3 128 128 128c62.5 0 114.5-44.8 125.8-104H187.3zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mound\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"barrier\", \"hill\", \"pitcher\", \"speedbump\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e52d\",\n    \"label\": \"Mound\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M144.1 179.2C173.8 127.7 228.6 96 288 96s114.2 31.7 143.9 83.2L540.4 368c12.3 21.3-3.1 48-27.7 48H63.3c-24.6 0-40-26.6-27.7-48L144.1 179.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M144.1 179.2C173.8 127.7 228.6 96 288 96s114.2 31.7 143.9 83.2L540.4 368c12.3 21.3-3.1 48-27.7 48H63.3c-24.6 0-40-26.6-27.7-48L144.1 179.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mountain\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3d4\"],\n        \"secondary\": [\"10f6fc\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cold\",\n        \"glacier\",\n        \"hiking\",\n        \"hill\",\n        \"landscape\",\n        \"mountain\",\n        \"snow\",\n        \"snow-capped mountain\",\n        \"travel\",\n        \"view\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6fc\",\n    \"label\": \"Mountain\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 32c12.5 0 24.1 6.4 30.8 17L503.4 394.4c5.6 8.9 8.6 19.2 8.6 29.7c0 30.9-25 55.9-55.9 55.9H55.9C25 480 0 455 0 424.1c0-10.5 3-20.8 8.6-29.7L225.2 49c6.6-10.6 18.3-17 30.8-17zm65 192L256 120.4 176.9 246.5l18.3 24.4c6.4 8.5 19.2 8.5 25.6 0l25.6-34.1c6-8.1 15.5-12.8 25.6-12.8h49z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 32c12.5 0 24.1 6.4 30.8 17L503.4 394.4c5.6 8.9 8.6 19.2 8.6 29.7c0 30.9-25 55.9-55.9 55.9H55.9C25 480 0 455 0 424.1c0-10.5 3-20.8 8.6-29.7L225.2 49c6.6-10.6 18.3-17 30.8-17zm65 192L256 120.4 176.9 246.5l18.3 24.4c6.4 8.5 19.2 8.5 25.6 0l25.6-34.1c6-8.1 15.5-12.8 25.6-12.8h49z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mountain-city\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"location\", \"rural\", \"urban\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e52e\",\n    \"label\": \"Mountain City\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M336 0c-26.5 0-48 21.5-48 48v92.1l71.4 118.4c2.5-1.6 5.4-2.5 8.6-2.5h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16h-3.5l73.8 122.4c12.4 20.6 12.9 46.3 1.2 67.3c-.4 .8-.9 1.6-1.4 2.3H592c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48H568V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v72H480V48c0-26.5-21.5-48-48-48H336zm32 64h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V80c0-8.8 7.2-16 16-16zM352 176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V176zm160 96c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V272zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zM224 188.9L283.8 288H223l-48 64-24.6-41.2L224 188.9zm29.4-44.2C247.1 134.3 236 128 224 128s-23.1 6.3-29.4 16.7L5.1 458.9c-6.5 10.8-6.7 24.3-.7 35.3S22 512 34.5 512H413.5c12.5 0 24-6.8 30.1-17.8s5.8-24.5-.7-35.3L253.4 144.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M336 0c-26.5 0-48 21.5-48 48v92.1l71.4 118.4c2.5-1.6 5.4-2.5 8.6-2.5h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16h-3.5l73.8 122.4c12.4 20.6 12.9 46.3 1.2 67.3c-.4 .8-.9 1.6-1.4 2.3H592c26.5 0 48-21.5 48-48V240c0-26.5-21.5-48-48-48H568V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v72H480V48c0-26.5-21.5-48-48-48H336zm32 64h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V80c0-8.8 7.2-16 16-16zM352 176c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16V176zm160 96c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V272zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H528c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zM224 188.9L283.8 288H223l-48 64-24.6-41.2L224 188.9zm29.4-44.2C247.1 134.3 236 128 224 128s-23.1 6.3-29.4 16.7L5.1 458.9c-6.5 10.8-6.7 24.3-.7 35.3S22 512 34.5 512H413.5c12.5 0 24-6.8 30.1-17.8s5.8-24.5-.7-35.3L253.4 144.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mountain-sun\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"country\", \"hiking\", \"landscape\", \"rural\", \"travel\", \"view\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e52f\",\n    \"label\": \"Mountain Sun\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M560 160A80 80 0 1 0 560 0a80 80 0 1 0 0 160zM55.9 512H381.1h75H578.9c33.8 0 61.1-27.4 61.1-61.1c0-11.2-3.1-22.2-8.9-31.8l-132-216.3C495 196.1 487.8 192 480 192s-15 4.1-19.1 10.7l-48.2 79L286.8 81c-6.6-10.6-18.3-17-30.8-17s-24.1 6.4-30.8 17L8.6 426.4C3 435.3 0 445.6 0 456.1C0 487 25 512 55.9 512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M560 160A80 80 0 1 0 560 0a80 80 0 1 0 0 160zM55.9 512H381.1h75H578.9c33.8 0 61.1-27.4 61.1-61.1c0-11.2-3.1-22.2-8.9-31.8l-132-216.3C495 196.1 487.8 192 480 192s-15 4.1-19.1 10.7l-48.2 79L286.8 81c-6.6-10.6-18.3-17-30.8-17s-24.1 6.4-30.8 17L8.6 426.4C3 435.3 0 445.6 0 456.1C0 487 25 512 55.9 512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mug-hot\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2615\"],\n        \"secondary\": [\"10f7b6\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beverage\",\n        \"caliente\",\n        \"cocoa\",\n        \"coffee\",\n        \"cup\",\n        \"drink\",\n        \"holiday\",\n        \"hot\",\n        \"hot beverage\",\n        \"hot chocolate\",\n        \"steam\",\n        \"steaming\",\n        \"tea\",\n        \"warmth\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7b6\",\n    \"label\": \"Mug Hot\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32V416c0 53 43 96 96 96H288c53 0 96-43 96-96h16c61.9 0 112-50.1 112-112s-50.1-112-112-112H352 32zm352 64h16c26.5 0 48 21.5 48 48s-21.5 48-48 48H384V256zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32V416c0 53 43 96 96 96H288c53 0 96-43 96-96h16c61.9 0 112-50.1 112-112s-50.1-112-112-112H352 32zm352 64h16c26.5 0 48 21.5 48 48s-21.5 48-48 48H384V256zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"mug-saucer\": {\n    \"aliases\": {\n      \"names\": [\"coffee\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0f4\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beverage\",\n        \"breakfast\",\n        \"cafe\",\n        \"drink\",\n        \"fall\",\n        \"morning\",\n        \"mug\",\n        \"seasonal\",\n        \"tea\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0f4\",\n    \"label\": \"Mug Saucer\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 64c0-17.7 14.3-32 32-32H448h64c70.7 0 128 57.3 128 128s-57.3 128-128 128H480c0 53-43 96-96 96H192c-53 0-96-43-96-96V64zM480 224h32c35.3 0 64-28.7 64-64s-28.7-64-64-64H480V224zM32 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 64c0-17.7 14.3-32 32-32H448h64c70.7 0 128 57.3 128 128s-57.3 128-128 128H480c0 53-43 96-96 96H192c-53 0-96-43-96-96V64zM480 224h32c35.3 0 64-28.7 64-64s-28.7-64-64-64H480V224zM32 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"music\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3b5\"],\n        \"secondary\": [\"10f001\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"lyrics\",\n        \"melody\",\n        \"music\",\n        \"musical note\",\n        \"note\",\n        \"sing\",\n        \"sound\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f001\",\n    \"label\": \"Music\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M499.1 6.3c8.1 6 12.9 15.6 12.9 25.7v72V368c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6V147L192 223.8V432c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6V200 128c0-14.1 9.3-26.6 22.8-30.7l320-96c9.7-2.9 20.2-1.1 28.3 5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M499.1 6.3c8.1 6 12.9 15.6 12.9 25.7v72V368c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6V147L192 223.8V432c0 44.2-43 80-96 80s-96-35.8-96-80s43-80 96-80c11.2 0 22 1.6 32 4.6V200 128c0-14.1 9.3-26.6 22.8-30.7l320-96c9.7-2.9 20.2-1.1 28.3 5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"n\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"6e\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Latin Capital Letter N\",\n        \"Latin Small Letter N\",\n        \"letter\",\n        \"nay\",\n        \"no\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"4e\",\n    \"label\": \"N\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M21.1 33.9c12.7-4.6 26.9-.7 35.5 9.6L320 359.6V64c0-17.7 14.3-32 32-32s32 14.3 32 32V448c0 13.5-8.4 25.5-21.1 30.1s-26.9 .7-35.5-9.6L64 152.4V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 50.5 8.4 38.5 21.1 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M21.1 33.9c12.7-4.6 26.9-.7 35.5 9.6L320 359.6V64c0-17.7 14.3-32 32-32s32 14.3 32 32V448c0 13.5-8.4 25.5-21.1 30.1s-26.9 .7-35.5-9.6L64 152.4V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V64C0 50.5 8.4 38.5 21.1 33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"naira-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Naira Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1f6\",\n    \"label\": \"Naira Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M122.6 46.3c-7.8-11.7-22.4-17-35.9-12.9S64 49.9 64 64V256H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V320H228.2l97.2 145.8c7.8 11.7 22.4 17 35.9 12.9s22.7-16.5 22.7-30.6V320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H384V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V256H262.5L122.6 46.3zM305.1 320H320v22.3L305.1 320zM185.5 256H128V169.7L185.5 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M122.6 46.3c-7.8-11.7-22.4-17-35.9-12.9S64 49.9 64 64V256H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V320H228.2l97.2 145.8c7.8 11.7 22.4 17 35.9 12.9s22.7-16.5 22.7-30.6V320h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H384V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V256H262.5L122.6 46.3zM305.1 320H320v22.3L305.1 320zM185.5 256H128V169.7L185.5 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"napster\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d2\",\n    \"label\": \"Napster\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"neos\": {\n    \"changes\": [\"5.2.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f612\",\n    \"label\": \"Neos\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M415.44 512h-95.11L212.12 357.46v91.1L125.69 512H28V29.82L68.47 0h108.05l123.74 176.13V63.45L386.69 0h97.69v461.5zM38.77 35.27V496l72-52.88V194l215.5 307.64h84.79l52.35-38.17h-78.27L69 13zm82.54 466.61l80-58.78v-101l-79.76-114.4v220.94L49 501.89h72.34zM80.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L170.91 10.77zM311 191.65l72 102.81V15.93l-72 53v122.72z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"network-wired\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6ff\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"computer\", \"connect\", \"ethernet\", \"internet\", \"intranet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6ff\",\n    \"label\": \"Network Wired\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 64H384v64H256V64zM240 0c-26.5 0-48 21.5-48 48v96c0 26.5 21.5 48 48 48h48v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96v32H80c-26.5 0-48 21.5-48 48v96c0 26.5 21.5 48 48 48H240c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48H192V288H448v32H400c-26.5 0-48 21.5-48 48v96c0 26.5 21.5 48 48 48H560c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48H512V288h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V192h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H240zM96 448V384H224v64H96zm320-64H544v64H416V384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 64H384v64H256V64zM240 0c-26.5 0-48 21.5-48 48v96c0 26.5 21.5 48 48 48h48v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96v32H80c-26.5 0-48 21.5-48 48v96c0 26.5 21.5 48 48 48H240c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48H192V288H448v32H400c-26.5 0-48 21.5-48 48v96c0 26.5 21.5 48 48 48H560c26.5 0 48-21.5 48-48V368c0-26.5-21.5-48-48-48H512V288h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V192h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H240zM96 448V384H224v64H96zm320-64H544v64H416V384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"neuter\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26b2\"],\n        \"secondary\": [\"10f22c\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Neuter\", \"gender\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f22c\",\n    \"label\": \"Neuter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1V480c0 17.7 14.3 32 32 32s32-14.3 32-32V349.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1V480c0 17.7 14.3 32 32 32s32-14.3 32-32V349.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"newspaper\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4f0\"],\n        \"secondary\": [\"10f1ea\"]\n      }\n    },\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"article\",\n        \"editorial\",\n        \"headline\",\n        \"journal\",\n        \"journalism\",\n        \"news\",\n        \"newspaper\",\n        \"paper\",\n        \"press\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1ea\",\n    \"label\": \"Newspaper\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 96c0-35.3 28.7-64 64-64H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H80c-44.2 0-80-35.8-80-80V128c0-17.7 14.3-32 32-32s32 14.3 32 32V400c0 8.8 7.2 16 16 16s16-7.2 16-16V96zm64 24v80c0 13.3 10.7 24 24 24H296c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24zm208-8c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H384c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H384c-8.8 0-16 7.2-16 16zM160 304c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 96c0-35.3 28.7-64 64-64H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H80c-44.2 0-80-35.8-80-80V128c0-17.7 14.3-32 32-32s32 14.3 32 32V400c0 8.8 7.2 16 16 16s16-7.2 16-16V96zm64 24v80c0 13.3 10.7 24 24 24H296c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24H184c-13.3 0-24 10.7-24 24zm208-8c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H384c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H384c-8.8 0-16 7.2-16 16zM160 304c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16zm0 96c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16s-7.2-16-16-16H176c-8.8 0-16 7.2-16 16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M168 80c-13.3 0-24 10.7-24 24V408c0 8.4-1.4 16.5-4.1 24H440c13.3 0 24-10.7 24-24V104c0-13.3-10.7-24-24-24H168zM72 480c-39.8 0-72-32.2-72-72V112C0 98.7 10.7 88 24 88s24 10.7 24 24V408c0 13.3 10.7 24 24 24s24-10.7 24-24V104c0-39.8 32.2-72 72-72H440c39.8 0 72 32.2 72 72V408c0 39.8-32.2 72-72 72H72zM176 136c0-13.3 10.7-24 24-24h96c13.3 0 24 10.7 24 24v80c0 13.3-10.7 24-24 24H200c-13.3 0-24-10.7-24-24V136zm200-24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H376c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H376c-13.3 0-24-10.7-24-24s10.7-24 24-24zM200 272H408c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80H408c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M168 80c-13.3 0-24 10.7-24 24V408c0 8.4-1.4 16.5-4.1 24H440c13.3 0 24-10.7 24-24V104c0-13.3-10.7-24-24-24H168zM72 480c-39.8 0-72-32.2-72-72V112C0 98.7 10.7 88 24 88s24 10.7 24 24V408c0 13.3 10.7 24 24 24s24-10.7 24-24V104c0-39.8 32.2-72 72-72H440c39.8 0 72 32.2 72 72V408c0 39.8-32.2 72-72 72H72zM176 136c0-13.3 10.7-24 24-24h96c13.3 0 24 10.7 24 24v80c0 13.3-10.7 24-24 24H200c-13.3 0-24-10.7-24-24V136zm200-24h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H376c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H376c-13.3 0-24-10.7-24-24s10.7-24 24-24zM200 272H408c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24zm0 80H408c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"nfc-directional\": {\n    \"changes\": [\"6.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"connect\",\n        \"data\",\n        \"near field communication\",\n        \"nfc\",\n        \"scan\",\n        \"signal\",\n        \"transfer\",\n        \"wireless\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e530\",\n    \"label\": \"NFC Directional\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M211.8 488.6C213.4 491.1 213.9 494.2 213.2 497.1C212.6 500 210.8 502.6 208.3 504.2C205.7 505.8 202.7 506.3 199.7 505.7C138.3 491.8 84.1 455.8 47.53 404.5C10.97 353.2-5.395 290.3 1.57 227.7C8.536 165 38.34 107.2 85.29 65.21C132.2 23.2 193-.0131 256 0C257.5 0 258.1 .2931 260.3 .8627C261.7 1.432 262.1 2.267 264 3.319C265.1 4.371 265.9 5.619 266.5 6.993C267 8.367 267.3 9.839 267.3 11.32V112.3L291.8 86.39C292.8 85.31 294 84.44 295.4 83.84C296.7 83.23 298.2 82.9 299.7 82.86C301.2 82.81 302.6 83.06 304 83.59C305.4 84.12 306.7 84.92 307.8 85.94C308.8 86.96 309.7 88.18 310.3 89.54C310.9 90.89 311.3 92.35 311.3 93.84C311.3 95.32 311.1 96.8 310.6 98.18C310 99.57 309.2 100.8 308.2 101.9L264.2 148.5C263.1 149.6 261.9 150.5 260.5 151.1C259 151.7 257.5 152 255.1 152C254.5 152 252.9 151.7 251.5 151.1C250.1 150.5 248.8 149.6 247.8 148.5L203.7 101.9C201.7 99.74 200.6 96.83 200.7 93.84C200.7 90.84 202 87.1 204.2 85.94C206.4 83.88 209.3 82.77 212.3 82.86C215.3 82.94 218.1 84.21 220.2 86.39L244.7 112.4V22.89C188.3 25.64 134.9 48.73 94.23 87.87C53.58 127 28.49 179.6 23.61 235.8C18.73 292 34.38 348.1 67.68 393.7C100.1 439.2 149.7 471.2 204.7 483.6C207.6 484.3 210.2 486.1 211.8 488.6L211.8 488.6zM171.4 126.1C170.6 127.4 169.5 128.5 168.3 129.3C147.8 143.2 131.1 161.9 119.5 183.8C107.9 205.7 101.8 230.1 101.8 254.9C101.8 279.7 107.9 304.1 119.5 325.1C131.1 347.9 147.8 366.6 168.3 380.5C170.8 382.2 172.5 384.8 173 387.8C173.6 390.7 172.1 393.8 171.3 396.2C169.6 398.7 166.1 400.4 164 400.1C161.1 401.5 158 400.9 155.6 399.2C132 383.2 112.8 361.7 99.46 336.5C86.15 311.4 79.19 283.4 79.19 254.9C79.19 226.5 86.15 198.4 99.46 173.3C112.8 148.1 132 126.6 155.6 110.6C156.8 109.8 158.2 109.2 159.6 108.8C161.1 108.5 162.6 108.5 164.1 108.8C165.5 109 166.9 109.6 168.2 110.4C169.5 111.2 170.5 112.3 171.4 113.5C172.2 114.7 172.8 116.1 173.1 117.6C173.4 119.1 173.4 120.6 173.1 122C172.8 123.5 172.3 124.9 171.4 126.1H171.4zM340.9 383.5C341.7 382.3 342.8 381.2 343.1 380.4V380.3C364.4 366.3 381.1 347.6 392.7 325.7C404.2 303.9 410.2 279.5 410.2 254.8C410.2 230.1 404.2 205.7 392.7 183.8C381.1 161.1 364.4 143.3 343.1 129.3C342.8 128.5 341.7 127.4 340.9 126.2C340.1 124.9 339.5 123.5 339.3 122.1C338.1 120.6 339 119.1 339.3 117.7C339.6 116.2 340.2 114.8 341 113.6C341.9 112.4 342.1 111.3 344.2 110.5C345.4 109.7 346.8 109.2 348.3 108.9C349.8 108.6 351.2 108.6 352.7 108.9C354.2 109.2 355.5 109.8 356.8 110.7C380.2 126.7 399.5 148.2 412.7 173.3C426 198.4 432.1 226.4 432.1 254.8C432.1 283.3 426 311.3 412.7 336.4C399.5 361.5 380.2 383 356.8 399C355.5 399.9 354.2 400.5 352.7 400.8C351.2 401.1 349.8 401.1 348.3 400.8C346.8 400.5 345.4 399.1 344.2 399.2C342.1 398.4 341.9 397.3 341 396.1C340.2 394.9 339.6 393.5 339.3 392C339 390.6 338.1 389.1 339.3 387.6C339.5 386.2 340.1 384.8 340.9 383.5V383.5zM312.3 6.307C368.5 19.04 418.7 50.28 455 95.01C485.4 132.6 504.6 178 510.3 226C515.9 274 507.9 322.7 487.1 366.3C466.2 409.9 433.5 446.8 392.6 472.6C351.7 498.3 304.4 512 256 512C254.5 512 253.1 511.7 251.7 511.1C250.3 510.6 249.1 509.7 248 508.7C246.1 507.6 246.1 506.4 245.6 505C245 503.6 244.7 502.2 244.7 500.7V401.5L220.2 427.5C218.1 429.7 215.3 430.1 212.3 431.1C209.3 431.2 206.4 430 204.2 427.1C202 425.9 200.7 423.1 200.7 420.1C200.6 417.1 201.7 414.2 203.7 412L247.8 365.4C249.1 363.2 252.9 362 255.1 362C259.1 362 262 363.2 264.2 365.4L308.2 412C310.3 414.2 311.4 417.1 311.3 420.1C311.2 423.1 309.9 425.9 307.8 427.1C305.6 430 302.7 431.2 299.7 431.1C296.7 430.1 293.8 429.7 291.8 427.5L267.3 401.6V489.1C323.7 486.3 377.1 463.3 417.8 424.1C458.5 384.1 483.6 332.4 488.5 276.2C493.3 219.1 477.7 163.9 444.4 118.3C411.1 72.75 362.4 40.79 307.4 28.36C305.9 28.03 304.6 27.42 303.3 26.57C302.1 25.71 301.1 24.63 300.3 23.37C299.5 22.12 298.1 20.72 298.7 19.26C298.5 17.8 298.5 16.3 298.8 14.85C299.2 13.41 299.8 12.04 300.6 10.82C301.5 9.61 302.6 8.577 303.8 7.784C305.1 6.99 306.5 6.451 307.9 6.198C309.4 5.945 310.9 5.982 312.3 6.307L312.3 6.307zM353.1 256.1C353.1 287.5 335.6 317.2 303.8 339.6C301.7 341.1 299 341.9 296.4 341.6C293.7 341.4 291.2 340.3 289.4 338.4L219.3 268.6C217.1 266.5 215.1 263.6 215.9 260.6C215.9 257.6 217.1 254.7 219.2 252.6C221.4 250.5 224.2 249.3 227.2 249.3C230.2 249.3 233.1 250.5 235.2 252.6L298.3 315.4C319.1 298.3 330.5 277.5 330.5 256.1C330.5 232.2 316.4 209.1 290.8 191C288.3 189.3 286.7 186.7 286.2 183.7C285.7 180.8 286.3 177.7 288.1 175.3C289.8 172.8 292.4 171.2 295.4 170.7C298.3 170.2 301.4 170.8 303.8 172.6C335.6 195 353.1 224.7 353.1 256.1V256.1zM216.7 341.5C213.7 342 210.7 341.3 208.2 339.6C176.5 317.2 158.1 287.5 158.1 256.1C158.1 224.7 176.5 195 208.2 172.6C210.4 171 213.1 170.3 215.7 170.5C218.4 170.8 220.8 171.9 222.7 173.8L292.8 243.6C294.9 245.7 296.1 248.6 296.1 251.6C296.1 254.6 294.1 257.4 292.8 259.6C290.7 261.7 287.8 262.9 284.9 262.9C281.9 262.9 278.1 261.7 276.9 259.6L213.8 196.7C192.9 214 181.6 234.7 181.6 256.1C181.6 279.1 195.7 303.1 221.3 321.1C223.7 322.9 225.4 325.5 225.9 328.5C226.4 331.4 225.7 334.4 224 336.9C222.3 339.3 219.6 341 216.7 341.5L216.7 341.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M211.8 488.6C213.4 491.1 213.9 494.2 213.2 497.1C212.6 500 210.8 502.6 208.3 504.2C205.7 505.8 202.7 506.3 199.7 505.7C138.3 491.8 84.1 455.8 47.53 404.5C10.97 353.2-5.395 290.3 1.57 227.7C8.536 165 38.34 107.2 85.29 65.21C132.2 23.2 193-.0131 256 0C257.5 0 258.1 .2931 260.3 .8627C261.7 1.432 262.1 2.267 264 3.319C265.1 4.371 265.9 5.619 266.5 6.993C267 8.367 267.3 9.839 267.3 11.32V112.3L291.8 86.39C292.8 85.31 294 84.44 295.4 83.84C296.7 83.23 298.2 82.9 299.7 82.86C301.2 82.81 302.6 83.06 304 83.59C305.4 84.12 306.7 84.92 307.8 85.94C308.8 86.96 309.7 88.18 310.3 89.54C310.9 90.89 311.3 92.35 311.3 93.84C311.3 95.32 311.1 96.8 310.6 98.18C310 99.57 309.2 100.8 308.2 101.9L264.2 148.5C263.1 149.6 261.9 150.5 260.5 151.1C259 151.7 257.5 152 255.1 152C254.5 152 252.9 151.7 251.5 151.1C250.1 150.5 248.8 149.6 247.8 148.5L203.7 101.9C201.7 99.74 200.6 96.83 200.7 93.84C200.7 90.84 202 87.1 204.2 85.94C206.4 83.88 209.3 82.77 212.3 82.86C215.3 82.94 218.1 84.21 220.2 86.39L244.7 112.4V22.89C188.3 25.64 134.9 48.73 94.23 87.87C53.58 127 28.49 179.6 23.61 235.8C18.73 292 34.38 348.1 67.68 393.7C100.1 439.2 149.7 471.2 204.7 483.6C207.6 484.3 210.2 486.1 211.8 488.6L211.8 488.6zM171.4 126.1C170.6 127.4 169.5 128.5 168.3 129.3C147.8 143.2 131.1 161.9 119.5 183.8C107.9 205.7 101.8 230.1 101.8 254.9C101.8 279.7 107.9 304.1 119.5 325.1C131.1 347.9 147.8 366.6 168.3 380.5C170.8 382.2 172.5 384.8 173 387.8C173.6 390.7 172.1 393.8 171.3 396.2C169.6 398.7 166.1 400.4 164 400.1C161.1 401.5 158 400.9 155.6 399.2C132 383.2 112.8 361.7 99.46 336.5C86.15 311.4 79.19 283.4 79.19 254.9C79.19 226.5 86.15 198.4 99.46 173.3C112.8 148.1 132 126.6 155.6 110.6C156.8 109.8 158.2 109.2 159.6 108.8C161.1 108.5 162.6 108.5 164.1 108.8C165.5 109 166.9 109.6 168.2 110.4C169.5 111.2 170.5 112.3 171.4 113.5C172.2 114.7 172.8 116.1 173.1 117.6C173.4 119.1 173.4 120.6 173.1 122C172.8 123.5 172.3 124.9 171.4 126.1H171.4zM340.9 383.5C341.7 382.3 342.8 381.2 343.1 380.4V380.3C364.4 366.3 381.1 347.6 392.7 325.7C404.2 303.9 410.2 279.5 410.2 254.8C410.2 230.1 404.2 205.7 392.7 183.8C381.1 161.1 364.4 143.3 343.1 129.3C342.8 128.5 341.7 127.4 340.9 126.2C340.1 124.9 339.5 123.5 339.3 122.1C338.1 120.6 339 119.1 339.3 117.7C339.6 116.2 340.2 114.8 341 113.6C341.9 112.4 342.1 111.3 344.2 110.5C345.4 109.7 346.8 109.2 348.3 108.9C349.8 108.6 351.2 108.6 352.7 108.9C354.2 109.2 355.5 109.8 356.8 110.7C380.2 126.7 399.5 148.2 412.7 173.3C426 198.4 432.1 226.4 432.1 254.8C432.1 283.3 426 311.3 412.7 336.4C399.5 361.5 380.2 383 356.8 399C355.5 399.9 354.2 400.5 352.7 400.8C351.2 401.1 349.8 401.1 348.3 400.8C346.8 400.5 345.4 399.1 344.2 399.2C342.1 398.4 341.9 397.3 341 396.1C340.2 394.9 339.6 393.5 339.3 392C339 390.6 338.1 389.1 339.3 387.6C339.5 386.2 340.1 384.8 340.9 383.5V383.5zM312.3 6.307C368.5 19.04 418.7 50.28 455 95.01C485.4 132.6 504.6 178 510.3 226C515.9 274 507.9 322.7 487.1 366.3C466.2 409.9 433.5 446.8 392.6 472.6C351.7 498.3 304.4 512 256 512C254.5 512 253.1 511.7 251.7 511.1C250.3 510.6 249.1 509.7 248 508.7C246.1 507.6 246.1 506.4 245.6 505C245 503.6 244.7 502.2 244.7 500.7V401.5L220.2 427.5C218.1 429.7 215.3 430.1 212.3 431.1C209.3 431.2 206.4 430 204.2 427.1C202 425.9 200.7 423.1 200.7 420.1C200.6 417.1 201.7 414.2 203.7 412L247.8 365.4C249.1 363.2 252.9 362 255.1 362C259.1 362 262 363.2 264.2 365.4L308.2 412C310.3 414.2 311.4 417.1 311.3 420.1C311.2 423.1 309.9 425.9 307.8 427.1C305.6 430 302.7 431.2 299.7 431.1C296.7 430.1 293.8 429.7 291.8 427.5L267.3 401.6V489.1C323.7 486.3 377.1 463.3 417.8 424.1C458.5 384.1 483.6 332.4 488.5 276.2C493.3 219.1 477.7 163.9 444.4 118.3C411.1 72.75 362.4 40.79 307.4 28.36C305.9 28.03 304.6 27.42 303.3 26.57C302.1 25.71 301.1 24.63 300.3 23.37C299.5 22.12 298.1 20.72 298.7 19.26C298.5 17.8 298.5 16.3 298.8 14.85C299.2 13.41 299.8 12.04 300.6 10.82C301.5 9.61 302.6 8.577 303.8 7.784C305.1 6.99 306.5 6.451 307.9 6.198C309.4 5.945 310.9 5.982 312.3 6.307L312.3 6.307zM353.1 256.1C353.1 287.5 335.6 317.2 303.8 339.6C301.7 341.1 299 341.9 296.4 341.6C293.7 341.4 291.2 340.3 289.4 338.4L219.3 268.6C217.1 266.5 215.1 263.6 215.9 260.6C215.9 257.6 217.1 254.7 219.2 252.6C221.4 250.5 224.2 249.3 227.2 249.3C230.2 249.3 233.1 250.5 235.2 252.6L298.3 315.4C319.1 298.3 330.5 277.5 330.5 256.1C330.5 232.2 316.4 209.1 290.8 191C288.3 189.3 286.7 186.7 286.2 183.7C285.7 180.8 286.3 177.7 288.1 175.3C289.8 172.8 292.4 171.2 295.4 170.7C298.3 170.2 301.4 170.8 303.8 172.6C335.6 195 353.1 224.7 353.1 256.1V256.1zM216.7 341.5C213.7 342 210.7 341.3 208.2 339.6C176.5 317.2 158.1 287.5 158.1 256.1C158.1 224.7 176.5 195 208.2 172.6C210.4 171 213.1 170.3 215.7 170.5C218.4 170.8 220.8 171.9 222.7 173.8L292.8 243.6C294.9 245.7 296.1 248.6 296.1 251.6C296.1 254.6 294.1 257.4 292.8 259.6C290.7 261.7 287.8 262.9 284.9 262.9C281.9 262.9 278.1 261.7 276.9 259.6L213.8 196.7C192.9 214 181.6 234.7 181.6 256.1C181.6 279.1 195.7 303.1 221.3 321.1C223.7 322.9 225.4 325.5 225.9 328.5C226.4 331.4 225.7 334.4 224 336.9C222.3 339.3 219.6 341 216.7 341.5L216.7 341.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"nfc-symbol\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"connect\",\n        \"data\",\n        \"near field communication\",\n        \"nfc\",\n        \"scan\",\n        \"signal\",\n        \"transfer\",\n        \"wireless\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e531\",\n    \"label\": \"Nfc Symbol\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M392.9 32.43C400.6 31.1 408.6 32.89 414.1 37.41C498.2 96.14 544 173.7 544 255.1C544 338.2 498.2 415.9 414.1 474.6C409.3 478.6 402.4 480.5 395.5 479.9C388.5 479.3 382 476.3 377.1 471.4L193.7 288.7C188.1 283.2 185 275.7 184.1 267.8C184.1 260 188.1 252.5 193.6 246.9C199.2 241.4 206.7 238.2 214.5 238.2C222.4 238.2 229.9 241.3 235.4 246.8L400.5 411.2C455.1 366.5 484.8 312 484.8 255.1C484.8 193.5 447.9 132.9 380.9 85.76C374.5 81.24 370.1 74.35 368.8 66.62C367.4 58.89 369.2 50.94 373.8 44.53C378.3 38.12 385.2 33.77 392.9 32.43V32.43zM186.9 479.6C179.2 480.9 171.3 479.1 164.8 474.6C81.67 415.9 35.84 338.2 35.84 255.1C35.84 173.7 81.67 96.14 164.8 37.41C170.5 33.4 177.4 31.53 184.4 32.12C191.3 32.71 197.8 35.72 202.7 40.63L386.1 223.3C391.7 228.8 394.8 236.3 394.8 244.2C394.9 251.1 391.8 259.5 386.2 265.1C380.7 270.6 373.2 273.8 365.3 273.8C357.5 273.8 349.1 270.7 344.4 265.2L179.3 100.7C124.7 145.9 95.03 199.9 95.03 255.1C95.03 318.5 131.9 379.1 198.1 426.2C205.4 430.8 209.7 437.6 211.1 445.4C212.4 453.1 210.6 461.1 206.1 467.5C201.6 473.9 194.7 478.2 186.9 479.6V479.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M392.9 32.43C400.6 31.1 408.6 32.89 414.1 37.41C498.2 96.14 544 173.7 544 255.1C544 338.2 498.2 415.9 414.1 474.6C409.3 478.6 402.4 480.5 395.5 479.9C388.5 479.3 382 476.3 377.1 471.4L193.7 288.7C188.1 283.2 185 275.7 184.1 267.8C184.1 260 188.1 252.5 193.6 246.9C199.2 241.4 206.7 238.2 214.5 238.2C222.4 238.2 229.9 241.3 235.4 246.8L400.5 411.2C455.1 366.5 484.8 312 484.8 255.1C484.8 193.5 447.9 132.9 380.9 85.76C374.5 81.24 370.1 74.35 368.8 66.62C367.4 58.89 369.2 50.94 373.8 44.53C378.3 38.12 385.2 33.77 392.9 32.43V32.43zM186.9 479.6C179.2 480.9 171.3 479.1 164.8 474.6C81.67 415.9 35.84 338.2 35.84 255.1C35.84 173.7 81.67 96.14 164.8 37.41C170.5 33.4 177.4 31.53 184.4 32.12C191.3 32.71 197.8 35.72 202.7 40.63L386.1 223.3C391.7 228.8 394.8 236.3 394.8 244.2C394.9 251.1 391.8 259.5 386.2 265.1C380.7 270.6 373.2 273.8 365.3 273.8C357.5 273.8 349.1 270.7 344.4 265.2L179.3 100.7C124.7 145.9 95.03 199.9 95.03 255.1C95.03 318.5 131.9 379.1 198.1 426.2C205.4 430.8 209.7 437.6 211.1 445.4C212.4 453.1 210.6 461.1 206.1 467.5C201.6 473.9 194.7 478.2 186.9 479.6V479.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"nimblr\": {\n    \"changes\": [\"5.1.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5a8\",\n    \"label\": \"Nimblr\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M246.6 299.29c15.57 0 27.15 11.46 27.15 27s-11.62 27-27.15 27c-15.7 0-27.15-11.57-27.15-27s11.55-27 27.15-27zM113 326.25c0-15.61 11.68-27 27.15-27s27.15 11.46 27.15 27-11.47 27-27.15 27c-15.44 0-27.15-11.31-27.15-27M191.76 159C157 159 89.45 178.77 59.25 227L14 0v335.48C14 433.13 93.61 512 191.76 512s177.76-78.95 177.76-176.52S290.13 159 191.76 159zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59s59.24-131.59 132.51-131.59 132.51 58.86 132.51 131.54S265 467.07 191.76 467.07z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"node\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f419\",\n    \"label\": \"Node.js\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.6c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"node-js\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d3\",\n    \"label\": \"Node.js JS\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"not-equal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f53e\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arithmetic\", \"compare\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f53e\",\n    \"label\": \"Not Equal\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M369.8 37.4c14.7 9.8 18.7 29.7 8.9 44.4L337.1 144H400c17.7 0 32 14.3 32 32s-14.3 32-32 32H294.5l-64 96H400c17.7 0 32 14.3 32 32s-14.3 32-32 32H187.8l-65.2 97.7c-9.8 14.7-29.7 18.7-44.4 8.9s-18.7-29.7-8.9-44.4L110.9 368H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H153.5l64-96H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H260.2l65.2-97.7c9.8-14.7 29.7-18.7 44.4-8.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M369.8 37.4c14.7 9.8 18.7 29.7 8.9 44.4L337.1 144H400c17.7 0 32 14.3 32 32s-14.3 32-32 32H294.5l-64 96H400c17.7 0 32 14.3 32 32s-14.3 32-32 32H187.8l-65.2 97.7c-9.8 14.7-29.7 18.7-44.4 8.9s-18.7-29.7-8.9-44.4L110.9 368H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H153.5l64-96H48c-17.7 0-32-14.3-32-32s14.3-32 32-32H260.2l65.2-97.7c9.8-14.7 29.7-18.7 44.4-8.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"notdef\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"close\", \"missing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e1fe\",\n    \"label\": \"Notdef\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 390.3L153.5 256 64 121.7V390.3zM102.5 448H281.5L192 313.7 102.5 448zm128-192L320 390.3V121.7L230.5 256zM281.5 64H102.5L192 198.3 281.5 64zM0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 390.3L153.5 256 64 121.7V390.3zM102.5 448H281.5L192 313.7 102.5 448zm128-192L320 390.3V121.7L230.5 256zM281.5 64H102.5L192 198.3 281.5 64zM0 48C0 21.5 21.5 0 48 0H336c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"note-sticky\": {\n    \"aliases\": {\n      \"names\": [\"sticky-note\"],\n      \"unicodes\": {\n        \"composite\": [\"f24a\"],\n        \"secondary\": [\"10f249\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"message\", \"note\", \"paper\", \"reminder\", \"sticker\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f249\",\n    \"label\": \"Note Sticky\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H288V368c0-26.5 21.5-48 48-48H448V96c0-35.3-28.7-64-64-64H64zM448 352H402.7 336c-8.8 0-16 7.2-16 16v66.7V480l32-32 64-64 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H288V368c0-26.5 21.5-48 48-48H448V96c0-35.3-28.7-64-64-64H64zM448 352H402.7 336c-8.8 0-16 7.2-16 16v66.7V480l32-32 64-64 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H288V352c0-17.7 14.3-32 32-32h80V96c0-8.8-7.2-16-16-16H64zM288 480H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V320v5.5c0 17-6.7 33.3-18.7 45.3l-90.5 90.5c-12 12-28.3 18.7-45.3 18.7H288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H288V352c0-17.7 14.3-32 32-32h80V96c0-8.8-7.2-16-16-16H64zM288 480H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V320v5.5c0 17-6.7 33.3-18.7 45.3l-90.5 90.5c-12 12-28.3 18.7-45.3 18.7H288z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"notes-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f481\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clipboard\", \"doctor\", \"ehr\", \"health\", \"history\", \"records\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f481\",\n    \"label\": \"Notes Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 352V96c0-35.3 28.7-64 64-64H416c35.3 0 64 28.7 64 64V293.5c0 17-6.7 33.3-18.7 45.3l-58.5 58.5c-12 12-28.3 18.7-45.3 18.7H160c-35.3 0-64-28.7-64-64zM272 128c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V256h48c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H320V144c0-8.8-7.2-16-16-16H272zm24 336c13.3 0 24 10.7 24 24s-10.7 24-24 24H136C60.9 512 0 451.1 0 376V152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88H296z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 352V96c0-35.3 28.7-64 64-64H416c35.3 0 64 28.7 64 64V293.5c0 17-6.7 33.3-18.7 45.3l-58.5 58.5c-12 12-28.3 18.7-45.3 18.7H160c-35.3 0-64-28.7-64-64zM272 128c-8.8 0-16 7.2-16 16v48H208c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V256h48c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H320V144c0-8.8-7.2-16-16-16H272zm24 336c13.3 0 24 10.7 24 24s-10.7 24-24 24H136C60.9 512 0 451.1 0 376V152c0-13.3 10.7-24 24-24s24 10.7 24 24l0 224c0 48.6 39.4 88 88 88H296z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"npm\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d4\",\n    \"label\": \"npm\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ns8\": {\n    \"changes\": [\"5.0.0\", \"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d5\",\n    \"label\": \"NS8\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M104.324,269.172h26.067V242.994H104.324Zm52.466-26.178-.055-26.178v-.941a39.325,39.325,0,0,0-78.644.941v.166h26.4v-.166a12.98,12.98,0,0,1,25.956,0v26.178Zm52.356,25.846a91.1,91.1,0,0,1-91.1,91.1h-.609a91.1,91.1,0,0,1-91.1-91.1H0v.166A117.33,117.33,0,0,0,117.44,386.28h.775A117.331,117.331,0,0,0,235.49,268.84V242.828H209.146Zm-157.233,0a65.362,65.362,0,0,0,130.723,0H156.292a39.023,39.023,0,0,1-78.035,0V242.883H51.968v-26.62A65.42,65.42,0,0,1,182.8,217.48v25.293h26.344V217.48a91.761,91.761,0,0,0-183.522,0v25.4H51.913Zm418.4-71.173c13.67,0,24.573,6.642,30.052,18.264l.719,1.549,23.245-11.511-.609-1.439c-8.025-19.26-28.5-31.27-53.407-31.27-23.134,0-43.611,11.4-50.972,28.447-.123,26.876-.158,23.9,0,24.85,4.7,11.013,14.555,19.37,28.668,24.241a102.033,102.033,0,0,0,19.813,3.984c5.479.72,10.626,1.384,15.829,3.1,6.364,2.1,10.46,5.257,12.84,9.851v9.851c-3.708,7.527-13.781,12.342-25.791,12.342-14.334,0-25.956-6.918-31.933-19.039l-.72-1.494L415.026,280.9l.553,1.439c7.915,19.426,29.609,32.044,55.289,32.044,23.632,0,44.608-11.4,52.3-28.447l.166-25.9-.166-.664c-4.87-11.014-15.219-19.647-28.944-24.241-7.693-2.712-14.335-3.6-20.7-4.427a83.777,83.777,0,0,1-14.832-2.878c-6.31-1.937-10.4-5.092-12.619-9.63v-8.412C449.45,202.427,458.969,197.667,470.315,197.667ZM287.568,311.344h26.067v-68.4H287.568Zm352.266-53.3c-2.933-6.254-8.3-12.01-15.441-16.714A37.99,37.99,0,0,0,637.4,226l.166-25.347-.166-.664C630.038,184,610.667,173.26,589.25,173.26S548.461,184,541.1,199.992l-.166,25.347.166.664a39.643,39.643,0,0,0,13.006,15.331c-7.2,4.7-12.508,10.46-15.441,16.714l-.166,28.889.166.72c7.582,15.994,27.893,26.731,50.585,26.731s43.057-10.737,50.584-26.731l.166-28.89Zm-73.22-50.806c3.6-6.31,12.563-10.516,22.58-10.516s19.038,4.206,22.636,10.516v13.725c-3.542,6.2-12.563,10.349-22.636,10.349s-19.094-4.15-22.58-10.349Zm47.319,72.169c-3.764,6.641-13.338,10.9-24.683,10.9-11.125,0-20.976-4.372-24.684-10.9V263.25c3.708-6.309,13.5-10.515,24.684-10.515,11.345,0,20.919,4.15,24.683,10.515ZM376.4,265.962l-59.827-89.713h-29v40.623h26.51v.387l62.539,94.085H402.3V176.249H376.4Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M104.324,269.172h26.067V242.994H104.324Zm52.466-26.178-.055-26.178v-.941a39.325,39.325,0,0,0-78.644.941v.166h26.4v-.166a12.98,12.98,0,0,1,25.956,0v26.178Zm52.356,25.846a91.1,91.1,0,0,1-91.1,91.1h-.609a91.1,91.1,0,0,1-91.1-91.1H0v.166A117.33,117.33,0,0,0,117.44,386.28h.775A117.331,117.331,0,0,0,235.49,268.84V242.828H209.146Zm-157.233,0a65.362,65.362,0,0,0,130.723,0H156.292a39.023,39.023,0,0,1-78.035,0V242.883H51.968v-26.62A65.42,65.42,0,0,1,182.8,217.48v25.293h26.344V217.48a91.761,91.761,0,0,0-183.522,0v25.4H51.913Zm418.4-71.173c13.67,0,24.573,6.642,30.052,18.264l.719,1.549,23.245-11.511-.609-1.439c-8.025-19.26-28.5-31.27-53.407-31.27-23.134,0-43.611,11.4-50.972,28.447-.123,26.876-.158,23.9,0,24.85,4.7,11.013,14.555,19.37,28.668,24.241a102.033,102.033,0,0,0,19.813,3.984c5.479.72,10.626,1.384,15.829,3.1,6.364,2.1,10.46,5.257,12.84,9.851v9.851c-3.708,7.527-13.781,12.342-25.791,12.342-14.334,0-25.956-6.918-31.933-19.039l-.72-1.494L415.026,280.9l.553,1.439c7.915,19.426,29.609,32.044,55.289,32.044,23.632,0,44.608-11.4,52.3-28.447l.166-25.9-.166-.664c-4.87-11.014-15.219-19.647-28.944-24.241-7.693-2.712-14.335-3.6-20.7-4.427a83.777,83.777,0,0,1-14.832-2.878c-6.31-1.937-10.4-5.092-12.619-9.63v-8.412C449.45,202.427,458.969,197.667,470.315,197.667ZM287.568,311.344h26.067v-68.4H287.568Zm352.266-53.3c-2.933-6.254-8.3-12.01-15.441-16.714A37.99,37.99,0,0,0,637.4,226l.166-25.347-.166-.664C630.038,184,610.667,173.26,589.25,173.26S548.461,184,541.1,199.992l-.166,25.347.166.664a39.643,39.643,0,0,0,13.006,15.331c-7.2,4.7-12.508,10.46-15.441,16.714l-.166,28.889.166.72c7.582,15.994,27.893,26.731,50.585,26.731s43.057-10.737,50.584-26.731l.166-28.89Zm-73.22-50.806c3.6-6.31,12.563-10.516,22.58-10.516s19.038,4.206,22.636,10.516v13.725c-3.542,6.2-12.563,10.349-22.636,10.349s-19.094-4.15-22.58-10.349Zm47.319,72.169c-3.764,6.641-13.338,10.9-24.683,10.9-11.125,0-20.976-4.372-24.684-10.9V263.25c3.708-6.309,13.5-10.515,24.684-10.515,11.345,0,20.919,4.15,24.683,10.515ZM376.4,265.962l-59.827-89.713h-29v40.623h26.51v.387l62.539,94.085H402.3V176.249H376.4Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"nutritionix\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d6\",\n    \"label\": \"Nutritionix\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 400 512\\\"><path d=\\\"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 400, 512],\n        \"width\": 400,\n        \"height\": 512,\n        \"path\": \"M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"o\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"6f\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter O\", \"Latin Small Letter O\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"4f\",\n    \"label\": \"O\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 96a160 160 0 1 0 0 320 160 160 0 1 0 0-320zM448 256A224 224 0 1 1 0 256a224 224 0 1 1 448 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 96a160 160 0 1 0 0 320 160 160 0 1 0 0-320zM448 256A224 224 0 1 1 0 256a224 224 0 1 1 448 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"object-group\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f247\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"combine\", \"copy\", \"design\", \"merge\", \"select\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f247\",\n    \"label\": \"Object Group\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32H456.6C467.6 12.9 488.3 0 512 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4V392.6c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V119.4zM456.6 96H119.4c-5.6 9.7-13.7 17.8-23.4 23.4V392.6c9.7 5.6 17.8 13.7 23.4 23.4H456.6c5.6-9.7 13.7-17.8 23.4-23.4V119.4c-9.7-5.6-17.8-13.7-23.4-23.4zM128 160c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160zM256 320h32c35.3 0 64-28.7 64-64V224h64c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H288c-17.7 0-32-14.3-32-32V320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32H456.6C467.6 12.9 488.3 0 512 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4V392.6c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V119.4zM456.6 96H119.4c-5.6 9.7-13.7 17.8-23.4 23.4V392.6c9.7 5.6 17.8 13.7 23.4 23.4H456.6c5.6-9.7 13.7-17.8 23.4-23.4V119.4c-9.7-5.6-17.8-13.7-23.4-23.4zM128 160c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160zM256 320h32c35.3 0 64-28.7 64-64V224h64c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H288c-17.7 0-32-14.3-32-32V320z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M48 115.8C38.2 107 32 94.2 32 80c0-26.5 21.5-48 48-48c14.2 0 27 6.2 35.8 16H460.2c8.8-9.8 21.6-16 35.8-16c26.5 0 48 21.5 48 48c0 14.2-6.2 27-16 35.8V396.2c9.8 8.8 16 21.6 16 35.8c0 26.5-21.5 48-48 48c-14.2 0-27-6.2-35.8-16H115.8c-8.8 9.8-21.6 16-35.8 16c-26.5 0-48-21.5-48-48c0-14.2 6.2-27 16-35.8V115.8zM125.3 96c-4.8 13.6-15.6 24.4-29.3 29.3V386.7c13.6 4.8 24.4 15.6 29.3 29.3H450.7c4.8-13.6 15.6-24.4 29.3-29.3V125.3c-13.6-4.8-24.4-15.6-29.3-29.3H125.3zm2.7 64c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160zM256 320h32c35.3 0 64-28.7 64-64V224h64c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H288c-17.7 0-32-14.3-32-32V320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M48 115.8C38.2 107 32 94.2 32 80c0-26.5 21.5-48 48-48c14.2 0 27 6.2 35.8 16H460.2c8.8-9.8 21.6-16 35.8-16c26.5 0 48 21.5 48 48c0 14.2-6.2 27-16 35.8V396.2c9.8 8.8 16 21.6 16 35.8c0 26.5-21.5 48-48 48c-14.2 0-27-6.2-35.8-16H115.8c-8.8 9.8-21.6 16-35.8 16c-26.5 0-48-21.5-48-48c0-14.2 6.2-27 16-35.8V115.8zM125.3 96c-4.8 13.6-15.6 24.4-29.3 29.3V386.7c13.6 4.8 24.4 15.6 29.3 29.3H450.7c4.8-13.6 15.6-24.4 29.3-29.3V125.3c-13.6-4.8-24.4-15.6-29.3-29.3H125.3zm2.7 64c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32V160zM256 320h32c35.3 0 64-28.7 64-64V224h64c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H288c-17.7 0-32-14.3-32-32V320z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"object-ungroup\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f248\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"copy\", \"design\", \"merge\", \"select\", \"separate\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f248\",\n    \"label\": \"Object Ungroup\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32H328.6C339.6 12.9 360.3 0 384 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4V232.6c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V119.4zM119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4V232.6c9.7 5.6 17.8 13.7 23.4 23.4H328.6c5.6-9.7 13.7-17.8 23.4-23.4V119.4c-9.7-5.6-17.8-13.7-23.4-23.4H119.4zm192 384c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V352h64v40.6c9.7 5.6 17.8 13.7 23.4 23.4H520.6c5.6-9.7 13.7-17.8 23.4-23.4V279.4c-9.7-5.6-17.8-13.7-23.4-23.4h-46c-5.4-15.4-14.6-28.9-26.5-39.6V192h72.6c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4V392.6c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H311.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 119.4C12.9 108.4 0 87.7 0 64C0 28.7 28.7 0 64 0c23.7 0 44.4 12.9 55.4 32H328.6C339.6 12.9 360.3 0 384 0c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4V232.6c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H119.4c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V119.4zM119.4 96c-5.6 9.7-13.7 17.8-23.4 23.4V232.6c9.7 5.6 17.8 13.7 23.4 23.4H328.6c5.6-9.7 13.7-17.8 23.4-23.4V119.4c-9.7-5.6-17.8-13.7-23.4-23.4H119.4zm192 384c-11.1 19.1-31.7 32-55.4 32c-35.3 0-64-28.7-64-64c0-23.7 12.9-44.4 32-55.4V352h64v40.6c9.7 5.6 17.8 13.7 23.4 23.4H520.6c5.6-9.7 13.7-17.8 23.4-23.4V279.4c-9.7-5.6-17.8-13.7-23.4-23.4h-46c-5.4-15.4-14.6-28.9-26.5-39.6V192h72.6c11.1-19.1 31.7-32 55.4-32c35.3 0 64 28.7 64 64c0 23.7-12.9 44.4-32 55.4V392.6c19.1 11.1 32 31.7 32 55.4c0 35.3-28.7 64-64 64c-23.7 0-44.4-12.9-55.4-32H311.4z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48.2 66.8c-.1-.8-.2-1.7-.2-2.5c0-.1 0-.1 0-.2c0-8.8 7.2-16 16-16c.9 0 1.9 .1 2.8 .2C74.3 49.5 80 56.1 80 64c0 8.8-7.2 16-16 16c-7.9 0-14.5-5.7-15.8-13.2zM0 64c0 26.9 16.5 49.9 40 59.3V228.7C16.5 238.1 0 261.1 0 288c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40H324.7c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3V123.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40H123.3C113.9 16.5 90.9 0 64 0C28.7 0 0 28.7 0 64zm368 0a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM324.7 88c6.5 16 19.3 28.9 35.3 35.3V228.7c-16 6.5-28.9 19.3-35.3 35.3H123.3c-6.5-16-19.3-28.9-35.3-35.3V123.3c16-6.5 28.9-19.3 35.3-35.3H324.7zM384 272a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM80 288c0 7.9-5.7 14.5-13.2 15.8c-.8 .1-1.7 .2-2.5 .2l-.2 0c-8.8 0-16-7.2-16-16c0-.9 .1-1.9 .2-2.8C49.5 277.7 56.1 272 64 272c8.8 0 16 7.2 16 16zm391.3-40h45.4c6.5 16 19.3 28.9 35.3 35.3V388.7c-16 6.5-28.9 19.3-35.3 35.3H315.3c-6.5-16-19.3-28.9-35.3-35.3V352H232v36.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40H516.7c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3V283.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40H448v16.4c9.8 8.8 17.8 19.5 23.3 31.6zm88.9-26.7a16 16 0 1 1 31.5 5.5 16 16 0 1 1 -31.5-5.5zM271.8 450.7a16 16 0 1 1 -31.5-5.5 16 16 0 1 1 31.5 5.5zm301.5 13c-7.5-1.3-13.2-7.9-13.2-15.8c0-8.8 7.2-16 16-16c7.9 0 14.5 5.7 15.8 13.2l0 .1c.1 .9 .2 1.8 .2 2.7c0 8.8-7.2 16-16 16c-.9 0-1.9-.1-2.8-.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48.2 66.8c-.1-.8-.2-1.7-.2-2.5c0-.1 0-.1 0-.2c0-8.8 7.2-16 16-16c.9 0 1.9 .1 2.8 .2C74.3 49.5 80 56.1 80 64c0 8.8-7.2 16-16 16c-7.9 0-14.5-5.7-15.8-13.2zM0 64c0 26.9 16.5 49.9 40 59.3V228.7C16.5 238.1 0 261.1 0 288c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40H324.7c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3V123.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40H123.3C113.9 16.5 90.9 0 64 0C28.7 0 0 28.7 0 64zm368 0a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM324.7 88c6.5 16 19.3 28.9 35.3 35.3V228.7c-16 6.5-28.9 19.3-35.3 35.3H123.3c-6.5-16-19.3-28.9-35.3-35.3V123.3c16-6.5 28.9-19.3 35.3-35.3H324.7zM384 272a16 16 0 1 1 0 32 16 16 0 1 1 0-32zM80 288c0 7.9-5.7 14.5-13.2 15.8c-.8 .1-1.7 .2-2.5 .2l-.2 0c-8.8 0-16-7.2-16-16c0-.9 .1-1.9 .2-2.8C49.5 277.7 56.1 272 64 272c8.8 0 16 7.2 16 16zm391.3-40h45.4c6.5 16 19.3 28.9 35.3 35.3V388.7c-16 6.5-28.9 19.3-35.3 35.3H315.3c-6.5-16-19.3-28.9-35.3-35.3V352H232v36.7c-23.5 9.5-40 32.5-40 59.3c0 35.3 28.7 64 64 64c26.9 0 49.9-16.5 59.3-40H516.7c9.5 23.5 32.5 40 59.3 40c35.3 0 64-28.7 64-64c0-26.9-16.5-49.9-40-59.3V283.3c23.5-9.5 40-32.5 40-59.3c0-35.3-28.7-64-64-64c-26.9 0-49.9 16.5-59.3 40H448v16.4c9.8 8.8 17.8 19.5 23.3 31.6zm88.9-26.7a16 16 0 1 1 31.5 5.5 16 16 0 1 1 -31.5-5.5zM271.8 450.7a16 16 0 1 1 -31.5-5.5 16 16 0 1 1 31.5 5.5zm301.5 13c-7.5-1.3-13.2-7.9-13.2-15.8c0-8.8 7.2-16 16-16c7.9 0 14.5 5.7 15.8 13.2l0 .1c.1 .9 .2 1.8 .2 2.7c0 8.8-7.2 16-16 16c-.9 0-1.9-.1-2.8-.2z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"octopus-deploy\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e082\",\n    \"label\": \"Octopus Deploy\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M455.6,349.2c-45.891-39.09-36.67-77.877-16.095-128.11C475.16,134.04,415.967,34.14,329.93,8.3,237.04-19.6,134.252,24.341,99.677,117.147a180.862,180.862,0,0,0-10.988,73.544c1.733,29.543,14.717,52.97,24.09,80.3,17.2,50.161-28.1,92.743-66.662,117.582-46.806,30.2-36.319,39.857-8.428,41.858,23.378,1.68,44.478-4.548,65.265-15.045,9.2-4.647,40.687-18.931,45.13-28.588C135.9,413.388,111.122,459.5,126.621,488.9c19.1,36.229,67.112-31.77,76.709-45.812,8.591-12.572,42.963-81.279,63.627-46.926,18.865,31.361,8.6,76.391,35.738,104.622,32.854,34.2,51.155-18.312,51.412-44.221.163-16.411-6.1-95.852,29.9-59.944C405.428,418,436.912,467.8,472.568,463.642c38.736-4.516-22.123-67.967-28.262-78.695,5.393,4.279,53.665,34.128,53.818,9.52C498.234,375.678,468.039,359.8,455.6,349.2Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M455.6,349.2c-45.891-39.09-36.67-77.877-16.095-128.11C475.16,134.04,415.967,34.14,329.93,8.3,237.04-19.6,134.252,24.341,99.677,117.147a180.862,180.862,0,0,0-10.988,73.544c1.733,29.543,14.717,52.97,24.09,80.3,17.2,50.161-28.1,92.743-66.662,117.582-46.806,30.2-36.319,39.857-8.428,41.858,23.378,1.68,44.478-4.548,65.265-15.045,9.2-4.647,40.687-18.931,45.13-28.588C135.9,413.388,111.122,459.5,126.621,488.9c19.1,36.229,67.112-31.77,76.709-45.812,8.591-12.572,42.963-81.279,63.627-46.926,18.865,31.361,8.6,76.391,35.738,104.622,32.854,34.2,51.155-18.312,51.412-44.221.163-16.411-6.1-95.852,29.9-59.944C405.428,418,436.912,467.8,472.568,463.642c38.736-4.516-22.123-67.967-28.262-78.695,5.393,4.279,53.665,34.128,53.818,9.52C498.234,375.678,468.039,359.8,455.6,349.2Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"odnoklassniki\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f263\",\n    \"label\": \"Odnoklassniki\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"odysee\": {\n    \"changes\": [\"6.2.1\", \"6.3.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e5c6\",\n    \"label\": \"Odysee\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1667828915,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M406.7 463c-42.3 30.8-94.4 49-150.7 49C144.9 512 50.3 441.2 14.9 342.2c2.4 1.7 5.9 3.6 7.9 4.4c16.3 7.4 40.1-5.4 62.9-28.7c6.9-6.9 14.4-12.4 22.8-17.3c18.3-11.9 37.6-20.8 58.4-27.2c0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1c-11-.5-70-3-56 51.1c14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4c.8 4.6 1.1 9.9 1.4 15.5c1.1 21.2 2.3 45.6 35.3 46.4c5.3 0 10.6-.8 15.5-2zm-95.3-23.7c-2-.5-3.5-2.5-3-5c1-2.5 3-3.5 5-3s3.5 3 3 5s-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3c0 2-1 4-3 4c-1.5 .5-3.5-1-4-3c-.5-1.5 1-3.5 3-4zM451.8 421C489.3 376.4 512 318.8 512 256c0-67.5-26.1-128.9-68.8-174.7c-.1 23.5-6.1 48.2-16.8 69.2c-11.9 20.3-49 58.9-69.8 78.7c-.7 .3-1.1 .9-1.5 1.4c-.2 .2-.3 .4-.5 .6c-5 6.9-4 16.8 3 21.8c21.3 15.8 56.4 45.6 59.4 72.8c3.5 34.9 27.9 75.6 34.2 86.2l0 0c.8 1.3 1.3 2.1 1.4 2.4c0 2.2-.4 4.3-.8 6.5zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4s-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4l0 0c-.3 1.4-.7 2.8-1 4.2c-9.5 38.5-30.6 37.6-41.7 37.2c-1.1 0-2-.1-2.9-.1c-5.1 0-6-4-8.9-17.1c-2.6-12.1-6.9-32-17.9-63.6C271.4-2.5 211.4 13.9 165.9 41.1C110.6 74.2 131.5 143 146.1 190.5c.7 2.2 1.4 4.4 2 6.6c-4 4-13.8 7.5-26 11.9c-12.1 4.3-26.6 9.5-40.3 16.9C47.9 243.9 11.5 274.9 2 288.5C.7 277.8 0 267 0 256C0 114.6 114.6 0 256 0c51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4s4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5c1.5 2.5 1 5.4-1.5 6.4c-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3c1.5 .5 3-.5 3-2c.5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54c44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9s-61.9-4.5-64.9-42.6zm89.6 14.9h1c2.5 0 5-2 5-5c2-6.9 1-14.4-2-20.8c-1.5-2-4-3.5-6.4-2.5c-3 1-4.5 4-3.5 6.9c2 4.5 3 9.9 1.5 14.9c-.5 3 1.5 5.9 4.5 6.4zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3c-.2 .1-.4 .2-.6 .2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M406.7 463c-42.3 30.8-94.4 49-150.7 49C144.9 512 50.3 441.2 14.9 342.2c2.4 1.7 5.9 3.6 7.9 4.4c16.3 7.4 40.1-5.4 62.9-28.7c6.9-6.9 14.4-12.4 22.8-17.3c18.3-11.9 37.6-20.8 58.4-27.2c0 0 22.3 34.2 43.1 74.8s-22.3 54-27.2 54c-.3 0-.8 0-1.5-.1c-11-.5-70-3-56 51.1c14.9 57.4 97.5 36.6 139.6 8.9s31.7-118.3 31.7-118.3c41.1-6.4 54 37.1 57.9 59.4c.8 4.6 1.1 9.9 1.4 15.5c1.1 21.2 2.3 45.6 35.3 46.4c5.3 0 10.6-.8 15.5-2zm-95.3-23.7c-2-.5-3.5-2.5-3-5c1-2.5 3-3.5 5-3s3.5 3 3 5s-2.5 3.5-5 3zm-207-95.6c1.5-.5 3.5 1 4 3c0 2-1 4-3 4c-1.5 .5-3.5-1-4-3c-.5-1.5 1-3.5 3-4zM451.8 421C489.3 376.4 512 318.8 512 256c0-67.5-26.1-128.9-68.8-174.7c-.1 23.5-6.1 48.2-16.8 69.2c-11.9 20.3-49 58.9-69.8 78.7c-.7 .3-1.1 .9-1.5 1.4c-.2 .2-.3 .4-.5 .6c-5 6.9-4 16.8 3 21.8c21.3 15.8 56.4 45.6 59.4 72.8c3.5 34.9 27.9 75.6 34.2 86.2l0 0c.8 1.3 1.3 2.1 1.4 2.4c0 2.2-.4 4.3-.8 6.5zM390.7 251c-.5 3 1 5.9 4 6.4s5.9-1 6.4-4s-1-5.9-4-6.4c-3-1-5.9 1-6.4 4zm61.4-60.9l-11.4 5.4-3 12.9-5.4-11.4-12.9-3 11.4-5.4 3-12.9 5.4 11.4 12.9 3zM395.5 41.3c-16.2 8.2-22.1 32.8-29 61.4l0 0c-.3 1.4-.7 2.8-1 4.2c-9.5 38.5-30.6 37.6-41.7 37.2c-1.1 0-2-.1-2.9-.1c-5.1 0-6-4-8.9-17.1c-2.6-12.1-6.9-32-17.9-63.6C271.4-2.5 211.4 13.9 165.9 41.1C110.6 74.2 131.5 143 146.1 190.5c.7 2.2 1.4 4.4 2 6.6c-4 4-13.8 7.5-26 11.9c-12.1 4.3-26.6 9.5-40.3 16.9C47.9 243.9 11.5 274.9 2 288.5C.7 277.8 0 267 0 256C0 114.6 114.6 0 256 0c51.4 0 99.4 15.2 139.5 41.3zM58.9 189.6c-1.5-2-4.5-3-6.4-1.5s-3 4.5-1.5 6.4s4.5 3 6.4 1.5c2.5-1.5 3-4.5 1.5-6.4zM327.3 64.9c2-1.5 5-.5 6.4 1.5c1.5 2.5 1 5.4-1.5 6.4c-2 1.5-5 .5-6.4-1.5s-.5-5 1.5-6.4zM95.1 105c-.5 1.5 .5 3 2 3c1.5 .5 3-.5 3-2c.5-1.5-.5-3-2-3s-3 .5-3 2zm84.7-.5c-3.5-43.1 37.1-54 37.1-54c44.1-15.4 56 5.9 66.4 37.6s3 42.6-38.6 58.9s-61.9-4.5-64.9-42.6zm89.6 14.9h1c2.5 0 5-2 5-5c2-6.9 1-14.4-2-20.8c-1.5-2-4-3.5-6.4-2.5c-3 1-4.5 4-3.5 6.9c2 4.5 3 9.9 1.5 14.9c-.5 3 1.5 5.9 4.5 6.4zm-9.9-41.6c-2 0-4-1-5-3s-2-3.5-3-5c-2-2-2-5.4 0-7.4s5.4-2 7.4 0c2 2.5 3.5 5 5 7.4s.5 5.9-2.5 7.4c-.6 0-1 .2-1.3 .3c-.2 .1-.4 .2-.6 .2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"oil-can\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f613\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"auto\", \"crude\", \"gasoline\", \"grease\", \"lubricate\", \"petroleum\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f613\",\n    \"label\": \"Oil Can\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 128c17.7 0 32-14.3 32-32s-14.3-32-32-32H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h32v32H144 96 48c-26.5 0-48 21.5-48 48v64.8c0 19 11.2 36.2 28.5 43.9l67.5 30V368c0 26.5 21.5 48 48 48H403.1c18.4 0 35.8-7.9 48-21.7L633.5 187.7c12.3-13.9-.3-35.4-18.4-31.5L448 192l-50.5-25.2c-8.9-4.4-18.7-6.8-28.6-6.8H288V128h32zM96 208v86.1L48 272.8V208H96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 128c17.7 0 32-14.3 32-32s-14.3-32-32-32H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h32v32H144 96 48c-26.5 0-48 21.5-48 48v64.8c0 19 11.2 36.2 28.5 43.9l67.5 30V368c0 26.5 21.5 48 48 48H403.1c18.4 0 35.8-7.9 48-21.7L633.5 187.7c12.3-13.9-.3-35.4-18.4-31.5L448 192l-50.5-25.2c-8.9-4.4-18.7-6.8-28.6-6.8H288V128h32zM96 208v86.1L48 272.8V208H96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"oil-well\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drill\", \"oil\", \"rig\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e532\",\n    \"label\": \"Oil Well\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4L308.5 167.5l-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39L96 222.6V184c0-13.3-10.7-24-24-24s-24 10.7-24 24V448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H406.7L340 257.5l-62.2 16.1L305.3 352H238.7L265 277l-74.6 19.3L137.3 448H96V288.8l337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l11.2-32H327.7l11.2 32H205.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M528.3 61.3c-11.4-42.7-55.3-68-98-56.6L414.9 8.8C397.8 13.4 387.7 31 392.3 48l24.5 91.4L308.5 167.5l-6.3-18.1C297.7 136.6 285.6 128 272 128s-25.7 8.6-30.2 21.4l-13.6 39L96 222.6V184c0-13.3-10.7-24-24-24s-24 10.7-24 24V448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H406.7L340 257.5l-62.2 16.1L305.3 352H238.7L265 277l-74.6 19.3L137.3 448H96V288.8l337.4-87.5 25.2 94c4.6 17.1 22.1 27.2 39.2 22.6l15.5-4.1c42.7-11.4 68-55.3 56.6-98L528.3 61.3zM205.1 448l11.2-32H327.7l11.2 32H205.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"old-republic\": {\n    \"changes\": [\"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"politics\", \"star wars\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f510\",\n    \"label\": \"Old Republic\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.67zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"om\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f549\"],\n        \"secondary\": [\"10f679\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Hindu\",\n        \"buddhism\",\n        \"hinduism\",\n        \"jainism\",\n        \"mantra\",\n        \"om\",\n        \"religion\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f679\",\n    \"label\": \"Om\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M379.3 4.7c-6.2-6.2-16.4-6.2-22.6 0l-16 16c-6.2 6.2-6.2 16.4 0 22.6l16 16c6.2 6.2 16.4 6.2 22.6 0l16-16c6.2-6.2 6.2-16.4 0-22.6l-16-16zM115.2 169.6c8-6 17.9-9.6 28.8-9.6c26.5 0 48 21.5 48 48s-21.5 48-48 48H109.8c-7.6 0-13.8 6.2-13.8 13.8c0 1.5 .2 2.9 .7 4.4l8 24c4.4 13.1 16.6 21.9 30.4 21.9H144h16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-50.8 0-82.7-21.5-102.2-42.8c-9.9-10.8-16.6-21.6-20.9-29.7c-2.1-4-3.6-7.3-4.5-9.6c-.5-1.1-.8-2-1-2.5l-.2-.5 0-.1c-2.6-7.8-10.7-12.3-18.7-10.5C4.4 354.2-.9 361.8 .1 370L16 368C.1 370 .1 370 .1 370l0 0 0 0 0 .1 .1 .4c0 .3 .1 .8 .2 1.3c.2 1.1 .4 2.7 .8 4.6c.8 3.9 2 9.4 3.9 15.9c3.8 13 10.3 30.4 21.3 48C48.7 476.2 89.4 512 160 512c70.7 0 128-57.3 128-128c0-23.3-6.2-45.2-17.1-64h22.6c25.5 0 49.9-10.1 67.9-28.1l26.5-26.5c6-6 14.1-9.4 22.6-9.4H416c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32c-25.7 0-41.4-12.5-51.2-25.6c-5-6.7-8.4-13.4-10.5-18.6c-1.1-2.5-1.8-4.6-2.2-6c-.2-.7-.4-1.2-.5-1.5l-.1-.3 0 0c0 0 0 0 0 0c-1.9-7.3-8.6-12.4-16.2-12.1c-7.6 .3-13.9 5.9-15.1 13.4L336 368c-15.8-2.6-15.8-2.6-15.8-2.6l0 0 0 0 0 .1-.1 .3c0 .3-.1 .6-.2 1.1c-.1 .9-.3 2.1-.4 3.6c-.3 3-.6 7.3-.6 12.4c0 10.1 1.1 23.9 5.8 38.1c4.8 14.3 13.4 29.3 28.6 40.7C368.7 473.3 389.3 480 416 480c53 0 96-43 96-96V288c0-53-43-96-96-96h-5.5c-25.5 0-49.9 10.1-67.9 28.1l-26.5 26.5c-6 6-14.1 9.4-22.6 9.4H245.2c6.9-14.5 10.8-30.8 10.8-48c0-61.9-50.1-112-112-112c-25.2 0-48.5 8.3-67.2 22.4c-14.1 10.6-17 30.7-6.4 44.8s30.7 17 44.8 6.4zM280.9 66.7c-6-4-14-3.5-19.5 1.3s-7 12.7-3.7 19.2L272 80c-14.3 7.2-14.3 7.2-14.3 7.2l0 0 0 0 0 .1 .1 .2 .4 .7c.3 .6 .8 1.4 1.4 2.4c1.2 2 2.9 4.8 5.1 8.2c4.4 6.7 11.1 15.5 20 24.4C302.4 141.1 330.3 160 368 160c31.2 0 56.6-10.4 73.9-20.2c8.7-5 15.6-9.9 20.4-13.8c2.4-1.9 4.3-3.6 5.7-4.9c.7-.6 1.3-1.2 1.7-1.6l.6-.5 .2-.2 .1-.1 0 0 0 0c0 0 0 0-22.6-22.6l22.6 22.6c12.5-12.5 12.5-32.8 0-45.3c-12.4-12.4-32.6-12.5-45.1-.2c-.1 .1-.2 .2-.5 .4c-.5 .5-1.5 1.3-2.8 2.4c-2.7 2.2-6.8 5.2-12.1 8.2C399.4 90.4 384.8 96 368 96c-20.8 0-42.4-7-59.5-14.6c-8.4-3.7-15.4-7.5-20.3-10.3c-2.4-1.4-4.3-2.5-5.6-3.3c-.6-.4-1.1-.7-1.4-.9l-.3-.2 0 0 0 0 0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M379.3 4.7c-6.2-6.2-16.4-6.2-22.6 0l-16 16c-6.2 6.2-6.2 16.4 0 22.6l16 16c6.2 6.2 16.4 6.2 22.6 0l16-16c6.2-6.2 6.2-16.4 0-22.6l-16-16zM115.2 169.6c8-6 17.9-9.6 28.8-9.6c26.5 0 48 21.5 48 48s-21.5 48-48 48H109.8c-7.6 0-13.8 6.2-13.8 13.8c0 1.5 .2 2.9 .7 4.4l8 24c4.4 13.1 16.6 21.9 30.4 21.9H144h16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-50.8 0-82.7-21.5-102.2-42.8c-9.9-10.8-16.6-21.6-20.9-29.7c-2.1-4-3.6-7.3-4.5-9.6c-.5-1.1-.8-2-1-2.5l-.2-.5 0-.1c-2.6-7.8-10.7-12.3-18.7-10.5C4.4 354.2-.9 361.8 .1 370L16 368C.1 370 .1 370 .1 370l0 0 0 0 0 .1 .1 .4c0 .3 .1 .8 .2 1.3c.2 1.1 .4 2.7 .8 4.6c.8 3.9 2 9.4 3.9 15.9c3.8 13 10.3 30.4 21.3 48C48.7 476.2 89.4 512 160 512c70.7 0 128-57.3 128-128c0-23.3-6.2-45.2-17.1-64h22.6c25.5 0 49.9-10.1 67.9-28.1l26.5-26.5c6-6 14.1-9.4 22.6-9.4H416c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32c-25.7 0-41.4-12.5-51.2-25.6c-5-6.7-8.4-13.4-10.5-18.6c-1.1-2.5-1.8-4.6-2.2-6c-.2-.7-.4-1.2-.5-1.5l-.1-.3 0 0c0 0 0 0 0 0c-1.9-7.3-8.6-12.4-16.2-12.1c-7.6 .3-13.9 5.9-15.1 13.4L336 368c-15.8-2.6-15.8-2.6-15.8-2.6l0 0 0 0 0 .1-.1 .3c0 .3-.1 .6-.2 1.1c-.1 .9-.3 2.1-.4 3.6c-.3 3-.6 7.3-.6 12.4c0 10.1 1.1 23.9 5.8 38.1c4.8 14.3 13.4 29.3 28.6 40.7C368.7 473.3 389.3 480 416 480c53 0 96-43 96-96V288c0-53-43-96-96-96h-5.5c-25.5 0-49.9 10.1-67.9 28.1l-26.5 26.5c-6 6-14.1 9.4-22.6 9.4H245.2c6.9-14.5 10.8-30.8 10.8-48c0-61.9-50.1-112-112-112c-25.2 0-48.5 8.3-67.2 22.4c-14.1 10.6-17 30.7-6.4 44.8s30.7 17 44.8 6.4zM280.9 66.7c-6-4-14-3.5-19.5 1.3s-7 12.7-3.7 19.2L272 80c-14.3 7.2-14.3 7.2-14.3 7.2l0 0 0 0 0 .1 .1 .2 .4 .7c.3 .6 .8 1.4 1.4 2.4c1.2 2 2.9 4.8 5.1 8.2c4.4 6.7 11.1 15.5 20 24.4C302.4 141.1 330.3 160 368 160c31.2 0 56.6-10.4 73.9-20.2c8.7-5 15.6-9.9 20.4-13.8c2.4-1.9 4.3-3.6 5.7-4.9c.7-.6 1.3-1.2 1.7-1.6l.6-.5 .2-.2 .1-.1 0 0 0 0c0 0 0 0-22.6-22.6l22.6 22.6c12.5-12.5 12.5-32.8 0-45.3c-12.4-12.4-32.6-12.5-45.1-.2c-.1 .1-.2 .2-.5 .4c-.5 .5-1.5 1.3-2.8 2.4c-2.7 2.2-6.8 5.2-12.1 8.2C399.4 90.4 384.8 96 368 96c-20.8 0-42.4-7-59.5-14.6c-8.4-3.7-15.4-7.5-20.3-10.3c-2.4-1.4-4.3-2.5-5.6-3.3c-.6-.4-1.1-.7-1.4-.9l-.3-.2 0 0 0 0 0 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"opencart\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f23d\",\n    \"label\": \"OpenCart\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"openid\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f19b\",\n    \"label\": \"OpenID\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"opera\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f26a\",\n    \"label\": \"Opera\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"optin-monster\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f23c\",\n    \"label\": \"Optin Monster\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M572.6 421.4c5.6-9.5 4.7-15.2-5.4-11.6-3-4.9-7-9.5-11.1-13.8 2.9-9.7-.7-14.2-10.8-9.2-4.6-3.2-10.3-6.5-15.9-9.2 0-15.1-11.6-11.6-17.6-5.7-10.4-1.5-18.7-.3-26.8 5.7.3-6.5.3-13 .3-19.7 12.6 0 40.2-11 45.9-36.2 1.4-6.8 1.6-13.8-.3-21.9-3-13.5-14.3-21.3-25.1-25.7-.8-5.9-7.6-14.3-14.9-15.9s-12.4 4.9-14.1 10.3c-8.5 0-19.2 2.8-21.1 8.4-5.4-.5-11.1-1.4-16.8-1.9 2.7-1.9 5.4-3.5 8.4-4.6 5.4-9.2 14.6-11.4 25.7-11.6V256c19.5-.5 43-5.9 53.8-18.1 12.7-13.8 14.6-37.3 12.4-55.1-2.4-17.3-9.7-37.6-24.6-48.1-8.4-5.9-21.6-.8-22.7 9.5-2.2 19.6 1.2 30-38.6 25.1-10.3-23.8-24.6-44.6-42.7-60C341 49.6 242.9 55.5 166.4 71.7c19.7 4.6 41.1 8.6 59.7 16.5-26.2 2.4-52.7 11.3-76.2 23.2-32.8 17-44 29.9-56.7 42.4 14.9-2.2 28.9-5.1 43.8-3.8-9.7 5.4-18.4 12.2-26.5 20-25.8.9-23.8-5.3-26.2-25.9-1.1-10.5-14.3-15.4-22.7-9.7-28.1 19.9-33.5 79.9-12.2 103.5 10.8 12.2 35.1 17.3 54.9 17.8-.3 1.1-.3 1.9-.3 2.7 10.8.5 19.5 2.7 24.6 11.6 3 1.1 5.7 2.7 8.1 4.6-5.4.5-11.1 1.4-16.5 1.9-3.3-6.6-13.7-8.1-21.1-8.1-1.6-5.7-6.5-12.2-14.1-10.3-6.8 1.9-14.1 10-14.9 15.9-22.5 9.5-30.1 26.8-25.1 47.6 5.3 24.8 33 36.2 45.9 36.2v19.7c-6.6-5-14.3-7.5-26.8-5.7-5.5-5.5-17.3-10.1-17.3 5.7-5.9 2.7-11.4 5.9-15.9 9.2-9.8-4.9-13.6-1.7-11.1 9.2-4.1 4.3-7.8 8.6-11.1 13.8-10.2-3.7-11 2.2-5.4 11.6-1.1 3.5-1.6 7-1.9 10.8-.5 31.6 44.6 64 73.5 65.1 17.3.5 34.6-8.4 43-23.5 113.2 4.9 226.7 4.1 340.2 0 8.1 15.1 25.4 24.3 42.7 23.5 29.2-1.1 74.3-33.5 73.5-65.1.2-3.7-.7-7.2-1.7-10.7zm-73.8-254c1.1-3 2.4-8.4 2.4-14.6 0-5.9 6.8-8.1 14.1-.8 11.1 11.6 14.9 40.5 13.8 51.1-4.1-13.6-13-29-30.3-35.7zm-4.6 6.7c19.5 6.2 28.6 27.6 29.7 48.9-1.1 2.7-3 5.4-4.9 7.6-5.7 5.9-15.4 10-26.2 12.2 4.3-21.3.3-47.3-12.7-63 4.9-.8 10.9-2.4 14.1-5.7zm-24.1 6.8c13.8 11.9 20 39.2 14.1 63.5-4.1.5-8.1.8-11.6.8-1.9-21.9-6.8-44-14.3-64.6 3.7.3 8.1.3 11.8.3zM47.5 203c-1.1-10.5 2.4-39.5 13.8-51.1 7-7.3 14.1-5.1 14.1.8 0 6.2 1.4 11.6 2.4 14.6-17.3 6.8-26.2 22.2-30.3 35.7zm9.7 27.6c-1.9-2.2-3.5-4.9-4.9-7.6 1.4-21.3 10.3-42.7 29.7-48.9 3.2 3.2 9.2 4.9 14.1 5.7-13 15.7-17 41.6-12.7 63-10.8-2.2-20.5-6-26.2-12.2zm47.9 14.6c-4.1 0-8.1-.3-12.7-.8-4.6-18.6-1.9-38.9 5.4-53v.3l12.2-5.1c4.9-1.9 9.7-3.8 14.9-4.9-10.7 19.7-17.4 41.3-19.8 63.5zm184-162.7c41.9 0 76.2 34 76.2 75.9 0 42.2-34.3 76.2-76.2 76.2s-76.2-34-76.2-76.2c0-41.8 34.3-75.9 76.2-75.9zm115.6 174.3c-.3 17.8-7 48.9-23 57-13.2 6.6-6.5-7.5-16.5-58.1 13.3.3 26.6.3 39.5 1.1zm-54-1.6c.8 4.9 3.8 40.3-1.6 41.9-11.6 3.5-40 4.3-51.1-1.1-4.1-3-4.6-35.9-4.3-41.1v.3c18.9-.3 38.1-.3 57 0zM278.3 309c-13 3.5-41.6 4.1-54.6-1.6-6.5-2.7-3.8-42.4-1.9-51.6 19.2-.5 38.4-.5 57.8-.8v.3c1.1 8.3 3.3 51.2-1.3 53.7zm-106.5-51.1c12.2-.8 24.6-1.4 36.8-1.6-2.4 15.4-3 43.5-4.9 52.2-1.1 6.8-4.3 6.8-9.7 4.3-21.9-9.8-27.6-35.2-22.2-54.9zm-35.4 31.3c7.8-1.1 15.7-1.9 23.5-2.7 1.6 6.2 3.8 11.9 7 17.6 10 17 44 35.7 45.1 7 6.2 14.9 40.8 12.2 54.9 10.8 15.7-1.4 23.8-1.4 26.8-14.3 12.4 4.3 30.8 4.1 44 3 11.3-.8 20.8-.5 24.6-8.9 1.1 5.1 1.9 11.6 4.6 16.8 10.8 21.3 37.3 1.4 46.8-31.6 8.6.8 17.6 1.9 26.5 2.7-.4 1.3-3.8 7.3 7.3 11.6-47.6 47-95.7 87.8-163.2 107-63.2-20.8-112.1-59.5-155.9-106.5 9.6-3.4 10.4-8.8 8-12.5zm-21.6 172.5c-3.8 17.8-21.9 29.7-39.7 28.9-19.2-.8-46.5-17-59.2-36.5-2.7-31.1 43.8-61.3 66.2-54.6 14.9 4.3 27.8 30.8 33.5 54 0 3-.3 5.7-.8 8.2zm-8.7-66c-.5-13.5-.5-27-.3-40.5h.3c2.7-1.6 5.7-3.8 7.8-6.5 6.5-1.6 13-5.1 15.1-9.2 3.3-7.1-7-7.5-5.4-12.4 2.7-1.1 5.7-2.2 7.8-3.5 29.2 29.2 58.6 56.5 97.3 77-36.8 11.3-72.4 27.6-105.9 47-1.2-18.6-7.7-35.9-16.7-51.9zm337.6 64.6c-103 3.5-206.2 4.1-309.4 0 0 .3 0 .3-.3.3v-.3h.3c35.1-21.6 72.2-39.2 112.4-50.8 11.6 5.1 23 9.5 34.9 13.2 2.2.8 2.2.8 4.3 0 14.3-4.1 28.4-9.2 42.2-15.4 41.5 11.7 78.8 31.7 115.6 53zm10.5-12.4c-35.9-19.5-73-35.9-111.9-47.6 38.1-20 71.9-47.3 103.5-76.7 2.2 1.4 4.6 2.4 7.6 3.2 0 .8.3 1.9.5 2.4-4.6 2.7-7.8 6.2-5.9 10.3 2.2 3.8 8.6 7.6 15.1 8.9 2.4 2.7 5.1 5.1 8.1 6.8 0 13.8-.3 27.6-.8 41.3l.3-.3c-9.3 15.9-15.5 37-16.5 51.7zm105.9 6.2c-12.7 19.5-40 35.7-59.2 36.5-19.3.9-40.5-13.2-40.5-37 5.7-23.2 18.9-49.7 33.5-54 22.7-6.9 69.2 23.4 66.2 54.5zM372.9 75.2c-3.8-72.1-100.8-79.7-126-23.5 44.6-24.3 90.3-15.7 126 23.5zM74.8 407.1c-15.7 1.6-49.5 25.4-49.5 43.2 0 11.6 15.7 19.5 32.2 14.9 12.2-3.2 31.1-17.6 35.9-27.3 6-11.6-3.7-32.7-18.6-30.8zm215.9-176.2c28.6 0 51.9-21.6 51.9-48.4 0-36.1-40.5-58.1-72.2-44.3 9.5 3 16.5 11.6 16.5 21.6 0 23.3-33.3 32-46.5 11.3-7.3 34.1 19.4 59.8 50.3 59.8zM68 474.1c.5 6.5 12.2 12.7 21.6 9.5 6.8-2.7 14.6-10.5 17.3-16.2 3-7-1.1-20-9.7-18.4-8.9 1.6-29.7 16.7-29.2 25.1zm433.2-67c-14.9-1.9-24.6 19.2-18.9 30.8 4.9 9.7 24.1 24.1 36.2 27.3 16.5 4.6 32.2-3.2 32.2-14.9 0-17.8-33.8-41.6-49.5-43.2zM478.8 449c-8.4-1.6-12.4 11.3-9.5 18.4 2.4 5.7 10.3 13.5 17.3 16.2 9.2 3.2 21.1-3 21.3-9.5.9-8.4-20.2-23.5-29.1-25.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"orcid\": {\n    \"changes\": [\"5.11.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f8d2\",\n    \"label\": \"ORCID\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"osi\": {\n    \"changes\": [\"5.0.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f41a\",\n    \"label\": \"Open Source Initiative\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M8 266.44C10.3 130.64 105.4 34 221.8 18.34c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7q-26.7-69.45-53.4-139c-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8a71.47 71.47 0 0 0-64.5-82.2c-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4 11.5 8.6 7.8 18.4q-26.85 69.9-53.7 139.9c-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119-24.9-49.2-25.2-87.7-26.8-108.7zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3q22.35-58.65 45-117.3c1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6a91.64 91.64 0 0 1 45.2 90.4c-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6q22.8 58.8 45.2 117.7c1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161-13.7-117.5-119.4-214.8-255.5-198-106.1 13-195.3 102.5-197.1 225.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"otter\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9a6\"],\n        \"secondary\": [\"10f700\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"animal\",\n        \"badger\",\n        \"fauna\",\n        \"fishing\",\n        \"fur\",\n        \"mammal\",\n        \"marten\",\n        \"otter\",\n        \"playful\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f700\",\n    \"label\": \"Otter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M181.5 197.1l12.9 6.4c5.9 3 12.4 4.5 19.1 4.5c23.5 0 42.6-19.1 42.6-42.6V144c0-35.3-28.7-64-64-64H128c-35.3 0-64 28.7-64 64v21.4c0 23.5 19.1 42.6 42.6 42.6c6.6 0 13.1-1.5 19.1-4.5l12.9-6.4 8.4-4.2L135.1 185c-4.5-3-7.1-8-7.1-13.3V168c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24v3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4L160 240l-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6c-3.6 0-7.1-.2-10.6-.6v.6c0 35.3 28.7 64 64 64h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V336 320c0-23.7 12.9-44.4 32-55.4c9.4-5.4 20.3-8.6 32-8.6V240c0-26.5 21.5-48 48-48c8.8 0 16 7.2 16 16v32 16 48c0 8.8 7.2 16 16 16s16-7.2 16-16V204.3c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4C576 86.1 640 164.2 640 254.9l0 1.1h0c0 123.7-100.3 224-224 224h-1.1H256h-.6C132 480 32 380 32 256.6V256 216.8c-10.1-14.6-16-32.3-16-51.4V144l0-1.4C6.7 139.3 0 130.5 0 120c0-13.3 10.7-24 24-24h2.8C44.8 58.2 83.3 32 128 32h64c44.7 0 83.2 26.2 101.2 64H296c13.3 0 24 10.7 24 24c0 10.5-6.7 19.3-16 22.6l0 1.4v21.4c0 1.4 0 2.8-.1 4.3c12-6.2 25.7-9.6 40.1-9.6h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-13.3 0-24 10.7-24 24v8h56.4c-15.2 17-24.4 39.4-24.4 64H320c-42.3 0-78.2-27.4-91-65.3c-5.1 .9-10.3 1.3-15.6 1.3c-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M181.5 197.1l12.9 6.4c5.9 3 12.4 4.5 19.1 4.5c23.5 0 42.6-19.1 42.6-42.6V144c0-35.3-28.7-64-64-64H128c-35.3 0-64 28.7-64 64v21.4c0 23.5 19.1 42.6 42.6 42.6c6.6 0 13.1-1.5 19.1-4.5l12.9-6.4 8.4-4.2L135.1 185c-4.5-3-7.1-8-7.1-13.3V168c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24v3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4L160 240l-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6c-3.6 0-7.1-.2-10.6-.6v.6c0 35.3 28.7 64 64 64h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V336 320c0-23.7 12.9-44.4 32-55.4c9.4-5.4 20.3-8.6 32-8.6V240c0-26.5 21.5-48 48-48c8.8 0 16 7.2 16 16v32 16 48c0 8.8 7.2 16 16 16s16-7.2 16-16V204.3c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4C576 86.1 640 164.2 640 254.9l0 1.1h0c0 123.7-100.3 224-224 224h-1.1H256h-.6C132 480 32 380 32 256.6V256 216.8c-10.1-14.6-16-32.3-16-51.4V144l0-1.4C6.7 139.3 0 130.5 0 120c0-13.3 10.7-24 24-24h2.8C44.8 58.2 83.3 32 128 32h64c44.7 0 83.2 26.2 101.2 64H296c13.3 0 24 10.7 24 24c0 10.5-6.7 19.3-16 22.6l0 1.4v21.4c0 1.4 0 2.8-.1 4.3c12-6.2 25.7-9.6 40.1-9.6h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-13.3 0-24 10.7-24 24v8h56.4c-15.2 17-24.4 39.4-24.4 64H320c-42.3 0-78.2-27.4-91-65.3c-5.1 .9-10.3 1.3-15.6 1.3c-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"outdent\": {\n    \"aliases\": {\n      \"names\": [\"dedent\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f03b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"align\", \"justify\", \"paragraph\", \"tab\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f03b\",\n    \"label\": \"Outdent\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32zm32 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM.2 268.6c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6V335.3c0 13.3-15.3 20.8-25.8 12.6L.2 268.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32zm32 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM.2 268.6c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6V335.3c0 13.3-15.3 20.8-25.8 12.6L.2 268.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"p\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"70\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter P\", \"Latin Small Letter P\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"50\",\n    \"label\": \"P\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32h96c88.4 0 160 71.6 160 160s-71.6 160-160 160H64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V320 96zM64 288h96c53 0 96-43 96-96s-43-96-96-96H64V288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32h96c88.4 0 160 71.6 160 160s-71.6 160-160 160H64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V320 96zM64 288h96c53 0 96-43 96-96s-43-96-96-96H64V288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"padlet\": {\n    \"changes\": [\"6.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e4a0\",\n    \"label\": \"Padlet\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M297.9 0L298 .001C305.6 .1078 312.4 4.72 315.5 11.78L447.5 320.3L447.8 320.2L448 320.6L445.2 330.6L402.3 488.6C398.6 504.8 382.6 514.9 366.5 511.2L298.1 495.6L229.6 511.2C213.5 514.9 197.5 504.8 193.8 488.6L150.9 330.6L148.2 320.6L148.3 320.2L280.4 11.78C283.4 4.797 290.3 .1837 297.9 .0006L297.9 0zM160.1 322.1L291.1 361.2L298 483.7L305.9 362.2L436.5 322.9L436.7 322.8L305.7 347.9L297.1 27.72L291.9 347.9L160.1 322.1zM426 222.6L520.4 181.6H594.2L437.2 429.2L468.8 320.2L426 222.6zM597.5 181.4L638.9 257.6C642.9 265.1 635 273.5 627.3 269.8L579.7 247.1L597.5 181.4zM127.3 318.5L158.7 430L1.61 154.5C-4.292 144.1 7.128 132.5 17.55 138.3L169.4 222.5L127.3 318.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"page4\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d7\",\n    \"label\": \"page4 Corporation\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pagelines\": {\n    \"changes\": [\"4.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"eco\", \"flora\", \"leaf\", \"leaves\", \"nature\", \"plant\", \"tree\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f18c\",\n    \"label\": \"Pagelines\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pager\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4df\"],\n        \"secondary\": [\"10f815\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"beeper\", \"cell phone\", \"communication\", \"page\", \"pager\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f815\",\n    \"label\": \"Pager\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zm64 32v64c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H96c-17.7 0-32 14.3-32 32zM80 320c-13.3 0-24 10.7-24 24s10.7 24 24 24h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H80zm136 0c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H216z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 128C0 92.7 28.7 64 64 64H448c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zm64 32v64c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32H96c-17.7 0-32 14.3-32 32zM80 320c-13.3 0-24 10.7-24 24s10.7 24 24 24h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H80zm136 0c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H216z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paint-roller\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5aa\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"acrylic\",\n        \"art\",\n        \"brush\",\n        \"color\",\n        \"fill\",\n        \"paint\",\n        \"pigment\",\n        \"watercolor\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5aa\",\n    \"label\": \"Paint Roller\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H352c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM160 352c0-17.7 14.3-32 32-32V304c0-44.2 35.8-80 80-80H416c17.7 0 32-14.3 32-32V160 69.5c37.3 13.2 64 48.7 64 90.5v32c0 53-43 96-96 96H272c-8.8 0-16 7.2-16 16v16c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H352c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM160 352c0-17.7 14.3-32 32-32V304c0-44.2 35.8-80 80-80H416c17.7 0 32-14.3 32-32V160 69.5c37.3 13.2 64 48.7 64 90.5v32c0 53-43 96-96 96H272c-8.8 0-16 7.2-16 16v16c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paintbrush\": {\n    \"aliases\": {\n      \"names\": [\"paint-brush\"],\n      \"unicodes\": {\n        \"composite\": [\"1f58c\"],\n        \"secondary\": [\"10f1fc\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"acrylic\",\n        \"art\",\n        \"brush\",\n        \"color\",\n        \"fill\",\n        \"paint\",\n        \"paintbrush\",\n        \"painting\",\n        \"pigment\",\n        \"watercolor\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1fc\",\n    \"label\": \"Paintbrush\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M339.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L568.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S517.7-4.4 499.1 9.6L262.4 187.2c-24 18-38.2 46.1-38.4 76.1L339.3 367.1zm-19.6 25.4l-116-104.4C143.9 290.3 96 339.6 96 400c0 3.9 .2 7.8 .6 11.6C98.4 429.1 86.4 448 68.8 448H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H208c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M339.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L568.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S517.7-4.4 499.1 9.6L262.4 187.2c-24 18-38.2 46.1-38.4 76.1L339.3 367.1zm-19.6 25.4l-116-104.4C143.9 290.3 96 339.6 96 400c0 3.9 .2 7.8 .6 11.6C98.4 429.1 86.4 448 68.8 448H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H208c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"palette\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3a8\"],\n        \"secondary\": [\"10f53f\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"acrylic\",\n        \"art\",\n        \"artist palette\",\n        \"brush\",\n        \"color\",\n        \"fill\",\n        \"museum\",\n        \"paint\",\n        \"painting\",\n        \"palette\",\n        \"pigment\",\n        \"watercolor\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f53f\",\n    \"label\": \"Palette\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3H344c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 256c0 .9 0 1.8 0 2.7c-.4 36.5-33.6 61.3-70.1 61.3H344c-26.5 0-48 21.5-48 48c0 3.4 .4 6.7 1 9.9c2.1 10.2 6.5 20 10.8 29.9c6.1 13.8 12.1 27.5 12.1 42c0 31.8-21.6 60.7-53.4 62c-3.5 .1-7 .2-10.6 .2C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256zM128 288a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"palfed\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d8\",\n    \"label\": \"Palfed\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pallet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f482\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archive\", \"box\", \"inventory\", \"shipping\", \"warehouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f482\",\n    \"label\": \"Pallet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32H64v64H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H96 320 544h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H576V384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H544 320 96 32zm96 64H288v64H128V384zm224 0H512v64H352V384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32H64v64H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H96 320 544h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H576V384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H544 320 96 32zm96 64H288v64H128V384zm224 0H512v64H352V384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"panorama\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"image\", \"landscape\", \"photo\", \"wide\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e209\",\n    \"label\": \"Panorama\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M45.6 32C20.4 32 0 52.4 0 77.6V434.4C0 459.6 20.4 480 45.6 480c5.1 0 10-.8 14.7-2.4C74.6 472.8 177.6 440 320 440s245.4 32.8 259.6 37.6c4.7 1.6 9.7 2.4 14.7 2.4c25.2 0 45.6-20.4 45.6-45.6V77.6C640 52.4 619.6 32 594.4 32c-5 0-10 .8-14.7 2.4C565.4 39.2 462.4 72 320 72S74.6 39.2 60.4 34.4C55.6 32.8 50.7 32 45.6 32zM96 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm272 0c7.9 0 15.4 3.9 19.8 10.5L512.3 353c5.4 8 5.6 18.4 .4 26.5s-14.7 12.3-24.2 10.7C442.7 382.4 385.2 376 320 376c-65.6 0-123.4 6.5-169.3 14.4c-9.8 1.7-19.7-2.9-24.7-11.5s-4.3-19.4 1.9-27.2L197.3 265c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l26.4 33.1 87-127.6c4.5-6.6 11.9-10.5 19.8-10.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M45.6 32C20.4 32 0 52.4 0 77.6V434.4C0 459.6 20.4 480 45.6 480c5.1 0 10-.8 14.7-2.4C74.6 472.8 177.6 440 320 440s245.4 32.8 259.6 37.6c4.7 1.6 9.7 2.4 14.7 2.4c25.2 0 45.6-20.4 45.6-45.6V77.6C640 52.4 619.6 32 594.4 32c-5 0-10 .8-14.7 2.4C565.4 39.2 462.4 72 320 72S74.6 39.2 60.4 34.4C55.6 32.8 50.7 32 45.6 32zM96 160a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm272 0c7.9 0 15.4 3.9 19.8 10.5L512.3 353c5.4 8 5.6 18.4 .4 26.5s-14.7 12.3-24.2 10.7C442.7 382.4 385.2 376 320 376c-65.6 0-123.4 6.5-169.3 14.4c-9.8 1.7-19.7-2.9-24.7-11.5s-4.3-19.4 1.9-27.2L197.3 265c4.6-5.7 11.4-9 18.7-9s14.2 3.3 18.7 9l26.4 33.1 87-127.6c4.5-6.6 11.9-10.5 19.8-10.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paper-plane\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f1d9\"],\n        \"secondary\": [\"10f1d8\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"air\", \"float\", \"fold\", \"mail\", \"paper\", \"send\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f1d8\",\n    \"label\": \"Paper Plane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480V396.4c0-4 1.5-7.8 4.2-10.7L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M498.1 5.6c10.1 7 15.4 19.1 13.5 31.2l-64 416c-1.5 9.7-7.4 18.2-16 23s-18.9 5.4-28 1.6L284 427.7l-68.5 74.1c-8.9 9.7-22.9 12.9-35.2 8.1S160 493.2 160 480V396.4c0-4 1.5-7.8 4.2-10.7L331.8 202.8c5.8-6.3 5.6-16-.4-22s-15.7-6.4-22-.7L106 360.8 17.7 316.6C7.1 311.3 .3 300.7 0 288.9s5.9-22.8 16.1-28.7l448-256c10.7-6.1 23.9-5.5 34 1.4z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M16.1 260.2c-22.6 12.9-20.5 47.3 3.6 57.3L160 376V479.3c0 18.1 14.6 32.7 32.7 32.7c9.7 0 18.9-4.3 25.1-11.8l62-74.3 123.9 51.6c18.9 7.9 40.8-4.5 43.9-24.7l64-416c1.9-12.1-3.4-24.3-13.5-31.2s-23.3-7.5-34-1.4l-448 256zm52.1 25.5L409.7 90.6 190.1 336l1.2 1L68.2 285.7zM403.3 425.4L236.7 355.9 450.8 116.6 403.3 425.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M16.1 260.2c-22.6 12.9-20.5 47.3 3.6 57.3L160 376V479.3c0 18.1 14.6 32.7 32.7 32.7c9.7 0 18.9-4.3 25.1-11.8l62-74.3 123.9 51.6c18.9 7.9 40.8-4.5 43.9-24.7l64-416c1.9-12.1-3.4-24.3-13.5-31.2s-23.3-7.5-34-1.4l-448 256zm52.1 25.5L409.7 90.6 190.1 336l1.2 1L68.2 285.7zM403.3 425.4L236.7 355.9 450.8 116.6 403.3 425.4z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"paperclip\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4ce\"],\n        \"secondary\": [\"10f0c6\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"attach\",\n        \"attachment\",\n        \"connect\",\n        \"link\",\n        \"papercli\",\n        \"paperclip\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c6\",\n    \"label\": \"Paperclip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M364.2 83.8c-24.4-24.4-64-24.4-88.4 0l-184 184c-42.1 42.1-42.1 110.3 0 152.4s110.3 42.1 152.4 0l152-152c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-152 152c-64 64-167.6 64-231.6 0s-64-167.6 0-231.6l184-184c46.3-46.3 121.3-46.3 167.6 0s46.3 121.3 0 167.6l-176 176c-28.6 28.6-75 28.6-103.6 0s-28.6-75 0-103.6l144-144c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-144 144c-6.7 6.7-6.7 17.7 0 24.4s17.7 6.7 24.4 0l176-176c24.4-24.4 24.4-64 0-88.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M364.2 83.8c-24.4-24.4-64-24.4-88.4 0l-184 184c-42.1 42.1-42.1 110.3 0 152.4s110.3 42.1 152.4 0l152-152c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-152 152c-64 64-167.6 64-231.6 0s-64-167.6 0-231.6l184-184c46.3-46.3 121.3-46.3 167.6 0s46.3 121.3 0 167.6l-176 176c-28.6 28.6-75 28.6-103.6 0s-28.6-75 0-103.6l144-144c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6l-144 144c-6.7 6.7-6.7 17.7 0 24.4s17.7 6.7 24.4 0l176-176c24.4-24.4 24.4-64 0-88.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"parachute-box\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4cd\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"aid\", \"assistance\", \"goods\", \"relief\", \"rescue\", \"supplies\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4cd\",\n    \"label\": \"Parachute Box\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M383.5 192c.3-5.3 .5-10.6 .5-16c0-51-15.9-96-40.2-127.6C319.5 16.9 288.2 0 256 0s-63.5 16.9-87.8 48.4C143.9 80 128 125 128 176c0 5.4 .2 10.7 .5 16H240V320H208c-7 0-13.7 1.5-19.7 4.2L68.2 192H96.5c-.3-5.3-.5-10.6-.5-16c0-64 22.2-121.2 57.1-159.3C62 49.3 18.6 122.6 4.2 173.6C1.5 183.1 9 192 18.9 192h6L165.2 346.3c-3.3 6.5-5.2 13.9-5.2 21.7v96c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48V368c0-7.8-1.9-15.2-5.2-21.7L487.1 192h6c9.9 0 17.4-8.9 14.7-18.4C493.4 122.6 450 49.3 358.9 16.7C393.8 54.8 416 112.1 416 176c0 5.4-.2 10.7-.5 16h28.3L323.7 324.2c-6-2.7-12.7-4.2-19.7-4.2H272V192H383.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M383.5 192c.3-5.3 .5-10.6 .5-16c0-51-15.9-96-40.2-127.6C319.5 16.9 288.2 0 256 0s-63.5 16.9-87.8 48.4C143.9 80 128 125 128 176c0 5.4 .2 10.7 .5 16H240V320H208c-7 0-13.7 1.5-19.7 4.2L68.2 192H96.5c-.3-5.3-.5-10.6-.5-16c0-64 22.2-121.2 57.1-159.3C62 49.3 18.6 122.6 4.2 173.6C1.5 183.1 9 192 18.9 192h6L165.2 346.3c-3.3 6.5-5.2 13.9-5.2 21.7v96c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48V368c0-7.8-1.9-15.2-5.2-21.7L487.1 192h6c9.9 0 17.4-8.9 14.7-18.4C493.4 122.6 450 49.3 358.9 16.7C393.8 54.8 416 112.1 416 176c0 5.4-.2 10.7-.5 16h28.3L323.7 324.2c-6-2.7-12.7-4.2-19.7-4.2H272V192H383.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paragraph\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"b6\"],\n        \"secondary\": [\"10f1dd\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Pilcrow Sign\", \"edit\", \"format\", \"text\", \"writing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1dd\",\n    \"label\": \"Paragraph\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M192 32h64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H384l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352H288V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H192c-88.4 0-160-71.6-160-160s71.6-160 160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M192 32h64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H384l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352H288V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H192c-88.4 0-160-71.6-160-160s71.6-160 160-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"passport\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5ab\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"document\", \"id\", \"identification\", \"issued\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ab\",\n    \"label\": \"Passport\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H384c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM183 278.8c-27.9-13.2-48.4-39.4-53.7-70.8h39.1c1.6 30.4 7.7 53.8 14.6 70.8zm41.3 9.2l-.3 0-.3 0c-2.4-3.5-5.7-8.9-9.1-16.5c-6-13.6-12.4-34.3-14.2-63.5h47.1c-1.8 29.2-8.1 49.9-14.2 63.5c-3.4 7.6-6.7 13-9.1 16.5zm40.7-9.2c6.8-17.1 12.9-40.4 14.6-70.8h39.1c-5.3 31.4-25.8 57.6-53.7 70.8zM279.6 176c-1.6-30.4-7.7-53.8-14.6-70.8c27.9 13.2 48.4 39.4 53.7 70.8H279.6zM223.7 96l.3 0 .3 0c2.4 3.5 5.7 8.9 9.1 16.5c6 13.6 12.4 34.3 14.2 63.5H200.5c1.8-29.2 8.1-49.9 14.2-63.5c3.4-7.6 6.7-13 9.1-16.5zM183 105.2c-6.8 17.1-12.9 40.4-14.6 70.8H129.3c5.3-31.4 25.8-57.6 53.7-70.8zM352 192A128 128 0 1 0 96 192a128 128 0 1 0 256 0zM112 384c-8.8 0-16 7.2-16 16s7.2 16 16 16H336c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H384c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM183 278.8c-27.9-13.2-48.4-39.4-53.7-70.8h39.1c1.6 30.4 7.7 53.8 14.6 70.8zm41.3 9.2l-.3 0-.3 0c-2.4-3.5-5.7-8.9-9.1-16.5c-6-13.6-12.4-34.3-14.2-63.5h47.1c-1.8 29.2-8.1 49.9-14.2 63.5c-3.4 7.6-6.7 13-9.1 16.5zm40.7-9.2c6.8-17.1 12.9-40.4 14.6-70.8h39.1c-5.3 31.4-25.8 57.6-53.7 70.8zM279.6 176c-1.6-30.4-7.7-53.8-14.6-70.8c27.9 13.2 48.4 39.4 53.7 70.8H279.6zM223.7 96l.3 0 .3 0c2.4 3.5 5.7 8.9 9.1 16.5c6 13.6 12.4 34.3 14.2 63.5H200.5c1.8-29.2 8.1-49.9 14.2-63.5c3.4-7.6 6.7-13 9.1-16.5zM183 105.2c-6.8 17.1-12.9 40.4-14.6 70.8H129.3c5.3-31.4 25.8-57.6 53.7-70.8zM352 192A128 128 0 1 0 96 192a128 128 0 1 0 256 0zM112 384c-8.8 0-16 7.2-16 16s7.2 16 16 16H336c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paste\": {\n    \"aliases\": {\n      \"names\": [\"file-clipboard\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0ea\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clipboard\", \"copy\", \"document\", \"paper\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0ea\",\n    \"label\": \"Paste\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 0c-23.7 0-44.4 12.9-55.4 32H48C21.5 32 0 53.5 0 80V400c0 26.5 21.5 48 48 48H192V176c0-44.2 35.8-80 80-80h48V80c0-26.5-21.5-48-48-48H215.4C204.4 12.9 183.7 0 160 0zM272 128c-26.5 0-48 21.5-48 48V448v16c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V256H416c-17.7 0-32-14.3-32-32V128H320 272zM160 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm256 88v96h96l-96-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 0c-23.7 0-44.4 12.9-55.4 32H48C21.5 32 0 53.5 0 80V400c0 26.5 21.5 48 48 48H192V176c0-44.2 35.8-80 80-80h48V80c0-26.5-21.5-48-48-48H215.4C204.4 12.9 183.7 0 160 0zM272 128c-26.5 0-48 21.5-48 48V448v16c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V256H416c-17.7 0-32-14.3-32-32V128H320 272zM160 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm256 88v96h96l-96-96z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M80 96v16c0 17.7 14.3 32 32 32h60.8c16.6-28.7 47.6-48 83.2-48h62c-7.1-27.6-32.2-48-62-48H215.4C211.6 20.9 188.2 0 160 0s-51.6 20.9-55.4 48H64C28.7 48 0 76.7 0 112V384c0 35.3 28.7 64 64 64h96V400H64c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H80zm64-40a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM256 464c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H384v48c0 17.7 14.3 32 32 32h48V448c0 8.8-7.2 16-16 16H256zm192 48c35.3 0 64-28.7 64-64V227.9c0-12.7-5.1-24.9-14.1-33.9l-51.9-51.9c-9-9-21.2-14.1-33.9-14.1H256c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M80 96v16c0 17.7 14.3 32 32 32h60.8c16.6-28.7 47.6-48 83.2-48h62c-7.1-27.6-32.2-48-62-48H215.4C211.6 20.9 188.2 0 160 0s-51.6 20.9-55.4 48H64C28.7 48 0 76.7 0 112V384c0 35.3 28.7 64 64 64h96V400H64c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H80zm64-40a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zM256 464c-8.8 0-16-7.2-16-16V192c0-8.8 7.2-16 16-16H384v48c0 17.7 14.3 32 32 32h48V448c0 8.8-7.2 16-16 16H256zm192 48c35.3 0 64-28.7 64-64V227.9c0-12.7-5.1-24.9-14.1-33.9l-51.9-51.9c-9-9-21.2-14.1-33.9-14.1H256c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H448z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"patreon\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3d9\",\n    \"label\": \"Patreon\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pause\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23f8\"],\n        \"secondary\": [\"10f04c\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bar\",\n        \"double\",\n        \"hold\",\n        \"pause\",\n        \"pause button\",\n        \"vertical\",\n        \"wait\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f04c\",\n    \"label\": \"Pause\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M48 64C21.5 64 0 85.5 0 112V400c0 26.5 21.5 48 48 48H80c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H48zm192 0c-26.5 0-48 21.5-48 48V400c0 26.5 21.5 48 48 48h32c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H240z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M48 64C21.5 64 0 85.5 0 112V400c0 26.5 21.5 48 48 48H80c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H48zm192 0c-26.5 0-48 21.5-48 48V400c0 26.5 21.5 48 48 48h32c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48H240z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paw\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1b0\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"animal\", \"cat\", \"dog\", \"pet\", \"print\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1b0\",\n    \"label\": \"Paw\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M226.5 92.9c14.3 42.9-.3 86.2-32.6 96.8s-70.1-15.6-84.4-58.5s.3-86.2 32.6-96.8s70.1 15.6 84.4 58.5zM100.4 198.6c18.9 32.4 14.3 70.1-10.2 84.1s-59.7-.9-78.5-33.3S-2.7 179.3 21.8 165.3s59.7 .9 78.5 33.3zM69.2 401.2C121.6 259.9 214.7 224 256 224s134.4 35.9 186.8 177.2c3.6 9.7 5.2 20.1 5.2 30.5v1.6c0 25.8-20.9 46.7-46.7 46.7c-11.5 0-22.9-1.4-34-4.2l-88-22c-15.3-3.8-31.3-3.8-46.6 0l-88 22c-11.1 2.8-22.5 4.2-34 4.2C84.9 480 64 459.1 64 433.3v-1.6c0-10.4 1.6-20.8 5.2-30.5zM421.8 282.7c-24.5-14-29.1-51.7-10.2-84.1s54-47.3 78.5-33.3s29.1 51.7 10.2 84.1s-54 47.3-78.5 33.3zM310.1 189.7c-32.3-10.6-46.9-53.9-32.6-96.8s52.1-69.1 84.4-58.5s46.9 53.9 32.6 96.8s-52.1 69.1-84.4 58.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M226.5 92.9c14.3 42.9-.3 86.2-32.6 96.8s-70.1-15.6-84.4-58.5s.3-86.2 32.6-96.8s70.1 15.6 84.4 58.5zM100.4 198.6c18.9 32.4 14.3 70.1-10.2 84.1s-59.7-.9-78.5-33.3S-2.7 179.3 21.8 165.3s59.7 .9 78.5 33.3zM69.2 401.2C121.6 259.9 214.7 224 256 224s134.4 35.9 186.8 177.2c3.6 9.7 5.2 20.1 5.2 30.5v1.6c0 25.8-20.9 46.7-46.7 46.7c-11.5 0-22.9-1.4-34-4.2l-88-22c-15.3-3.8-31.3-3.8-46.6 0l-88 22c-11.1 2.8-22.5 4.2-34 4.2C84.9 480 64 459.1 64 433.3v-1.6c0-10.4 1.6-20.8 5.2-30.5zM421.8 282.7c-24.5-14-29.1-51.7-10.2-84.1s54-47.3 78.5-33.3s29.1 51.7 10.2 84.1s-54 47.3-78.5 33.3zM310.1 189.7c-32.3-10.6-46.9-53.9-32.6-96.8s52.1-69.1 84.4-58.5s46.9 53.9 32.6 96.8s-52.1 69.1-84.4 58.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"paypal\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1ed\",\n    \"label\": \"Paypal\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"peace\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"262e\"],\n        \"secondary\": [\"10f67c\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"peace\",\n        \"peace symbol\",\n        \"serenity\",\n        \"tranquility\",\n        \"truce\",\n        \"war\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f67c\",\n    \"label\": \"Peace\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M224 445.3V323.5l-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8V66.7C133.2 81.9 64 160.9 64 256c0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5L288 323.5V445.3c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1c0-95.1-69.2-174.1-160-189.3V240.8L422.8 351.1zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M224 445.3V323.5l-94.3 77.1c26.1 22.8 58.5 38.7 94.3 44.7zM89.2 351.1L224 240.8V66.7C133.2 81.9 64 160.9 64 256c0 34.6 9.2 67.1 25.2 95.1zm293.1 49.5L288 323.5V445.3c35.7-6 68.1-21.9 94.3-44.7zm40.6-49.5c16-28 25.2-60.5 25.2-95.1c0-95.1-69.2-174.1-160-189.3V240.8L422.8 351.1zM0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pen\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f58a\"],\n        \"secondary\": [\"10f304\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ballpoint\", \"design\", \"edit\", \"pen\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f304\",\n    \"label\": \"Pen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pen-clip\": {\n    \"aliases\": {\n      \"names\": [\"pen-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f305\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"edit\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f305\",\n    \"label\": \"Pen Clip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1 0 0-1-1 0 0-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1 0 0-1-1 0 0-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pen-fancy\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f58b\", \"2712\"],\n        \"secondary\": [\"10f5ac\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"black nib\",\n        \"design\",\n        \"edit\",\n        \"fountain\",\n        \"fountain pen\",\n        \"nib\",\n        \"pen\",\n        \"update\",\n        \"write\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ac\",\n    \"label\": \"Pen Fancy\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M373.5 27.1C388.5 9.9 410.2 0 433 0c43.6 0 79 35.4 79 79c0 22.8-9.9 44.6-27.1 59.6L277.7 319l-10.3-10.3-64-64L193 234.3 373.5 27.1zM170.3 256.9l10.4 10.4 64 64 10.4 10.4-19.2 83.4c-3.9 17.1-16.9 30.7-33.8 35.4L24.4 510.3l95.4-95.4c2.6 .7 5.4 1.1 8.3 1.1c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32 32c0 2.9 .4 5.6 1.1 8.3L1.7 487.6 51.5 310c4.7-16.9 18.3-29.9 35.4-33.8l83.4-19.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M373.5 27.1C388.5 9.9 410.2 0 433 0c43.6 0 79 35.4 79 79c0 22.8-9.9 44.6-27.1 59.6L277.7 319l-10.3-10.3-64-64L193 234.3 373.5 27.1zM170.3 256.9l10.4 10.4 64 64 10.4 10.4-19.2 83.4c-3.9 17.1-16.9 30.7-33.8 35.4L24.4 510.3l95.4-95.4c2.6 .7 5.4 1.1 8.3 1.1c17.7 0 32-14.3 32-32s-14.3-32-32-32s-32 14.3-32 32c0 2.9 .4 5.6 1.1 8.3L1.7 487.6 51.5 310c4.7-16.9 18.3-29.9 35.4-33.8l83.4-19.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pen-nib\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2711\"],\n        \"secondary\": [\"10f5ad\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"edit\", \"fountain pen\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ad\",\n    \"label\": \"Pen Nib\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.8-9.2L288 94.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M368.4 18.3L312.7 74.1 437.9 199.3l55.7-55.7c21.9-21.9 21.9-57.3 0-79.2L447.6 18.3c-21.9-21.9-57.3-21.9-79.2 0zM288 94.6l-9.2 2.8L134.7 140.6c-19.9 6-35.7 21.2-42.3 41L3.8 445.8c-3.8 11.3-1 23.9 7.3 32.4L164.7 324.7c-3-6.3-4.7-13.3-4.7-20.7c0-26.5 21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48c-7.4 0-14.4-1.7-20.7-4.7L33.7 500.9c8.6 8.3 21.1 11.2 32.4 7.3l264.3-88.6c19.7-6.6 35-22.4 41-42.3l43.2-144.1 2.8-9.2L288 94.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pen-ruler\": {\n    \"aliases\": {\n      \"names\": [\"pencil-ruler\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5ae\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"draft\", \"draw\", \"pencil\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ae\",\n    \"label\": \"Pen Ruler\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M469.3 19.3l23.4 23.4c25 25 25 65.5 0 90.5l-56.4 56.4L322.3 75.7l56.4-56.4c25-25 65.5-25 90.5 0zM44.9 353.2L299.7 98.3 413.7 212.3 158.8 467.1c-6.7 6.7-15.1 11.6-24.2 14.2l-104 29.7c-8.4 2.4-17.4 .1-23.6-6.1s-8.5-15.2-6.1-23.6l29.7-104c2.6-9.2 7.5-17.5 14.2-24.2zM249.4 103.4L103.4 249.4 16 161.9c-18.7-18.7-18.7-49.1 0-67.9L94.1 16c18.7-18.7 49.1-18.7 67.9 0l19.8 19.8c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1l45.1 45.1zM408.6 262.6l45.1 45.1c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1L496 350.1c18.7 18.7 18.7 49.1 0 67.9L417.9 496c-18.7 18.7-49.1 18.7-67.9 0l-87.4-87.4L408.6 262.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M469.3 19.3l23.4 23.4c25 25 25 65.5 0 90.5l-56.4 56.4L322.3 75.7l56.4-56.4c25-25 65.5-25 90.5 0zM44.9 353.2L299.7 98.3 413.7 212.3 158.8 467.1c-6.7 6.7-15.1 11.6-24.2 14.2l-104 29.7c-8.4 2.4-17.4 .1-23.6-6.1s-8.5-15.2-6.1-23.6l29.7-104c2.6-9.2 7.5-17.5 14.2-24.2zM249.4 103.4L103.4 249.4 16 161.9c-18.7-18.7-18.7-49.1 0-67.9L94.1 16c18.7-18.7 49.1-18.7 67.9 0l19.8 19.8c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1l45.1 45.1zM408.6 262.6l45.1 45.1c-.3 .3-.7 .6-1 .9l-64 64c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l64-64c.3-.3 .6-.7 .9-1L496 350.1c18.7 18.7 18.7 49.1 0 67.9L417.9 496c-18.7 18.7-49.1 18.7-67.9 0l-87.4-87.4L408.6 262.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pen-to-square\": {\n    \"aliases\": {\n      \"names\": [\"edit\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f044\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"pen\", \"pencil\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f044\",\n    \"label\": \"Pen To Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M471.6 21.7c-21.9-21.9-57.3-21.9-79.2 0L362.3 51.7l97.9 97.9 30.1-30.1c21.9-21.9 21.9-57.3 0-79.2L471.6 21.7zm-299.2 220c-6.1 6.1-10.8 13.6-13.5 21.9l-29.6 88.8c-2.9 8.6-.6 18.1 5.8 24.6s15.9 8.7 24.6 5.8l88.8-29.6c8.2-2.7 15.7-7.4 21.9-13.5L437.7 172.3 339.7 74.3 172.4 241.7zM96 64C43 64 0 107 0 160V416c0 53 43 96 96 96H352c53 0 96-43 96-96V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H96z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M441 58.9L453.1 71c9.4 9.4 9.4 24.6 0 33.9L424 134.1 377.9 88 407 58.9c9.4-9.4 24.6-9.4 33.9 0zM209.8 256.2L344 121.9 390.1 168 255.8 302.2c-2.9 2.9-6.5 5-10.4 6.1l-58.5 16.7 16.7-58.5c1.1-3.9 3.2-7.5 6.1-10.4zM373.1 25L175.8 222.2c-8.7 8.7-15 19.4-18.3 31.1l-28.6 100c-2.4 8.4-.1 17.4 6.1 23.6s15.2 8.5 23.6 6.1l100-28.6c11.8-3.4 22.5-9.7 31.1-18.3L487 138.9c28.1-28.1 28.1-73.7 0-101.8L474.9 25C446.8-3.1 401.2-3.1 373.1 25zM88 64C39.4 64 0 103.4 0 152V424c0 48.6 39.4 88 88 88H360c48.6 0 88-39.4 88-88V312c0-13.3-10.7-24-24-24s-24 10.7-24 24V424c0 22.1-17.9 40-40 40H88c-22.1 0-40-17.9-40-40V152c0-22.1 17.9-40 40-40H200c13.3 0 24-10.7 24-24s-10.7-24-24-24H88z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M441 58.9L453.1 71c9.4 9.4 9.4 24.6 0 33.9L424 134.1 377.9 88 407 58.9c9.4-9.4 24.6-9.4 33.9 0zM209.8 256.2L344 121.9 390.1 168 255.8 302.2c-2.9 2.9-6.5 5-10.4 6.1l-58.5 16.7 16.7-58.5c1.1-3.9 3.2-7.5 6.1-10.4zM373.1 25L175.8 222.2c-8.7 8.7-15 19.4-18.3 31.1l-28.6 100c-2.4 8.4-.1 17.4 6.1 23.6s15.2 8.5 23.6 6.1l100-28.6c11.8-3.4 22.5-9.7 31.1-18.3L487 138.9c28.1-28.1 28.1-73.7 0-101.8L474.9 25C446.8-3.1 401.2-3.1 373.1 25zM88 64C39.4 64 0 103.4 0 152V424c0 48.6 39.4 88 88 88H360c48.6 0 88-39.4 88-88V312c0-13.3-10.7-24-24-24s-24 10.7-24 24V424c0 22.1-17.9 40-40 40H88c-22.1 0-40-17.9-40-40V152c0-22.1 17.9-40 40-40H200c13.3 0 24-10.7 24-24s-10.7-24-24-24H88z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"pencil\": {\n    \"aliases\": {\n      \"names\": [\"pencil-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"270f\", \"f040\"],\n        \"primary\": [\"f040\"],\n        \"secondary\": [\"10f040\", \"10f303\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Lower Left Pencil\",\n        \"design\",\n        \"draw\",\n        \"edit\",\n        \"lead\",\n        \"pencil\",\n        \"update\",\n        \"write\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f303\",\n    \"label\": \"Pencil\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M410.3 231l11.3-11.3-33.9-33.9-62.1-62.1L291.7 89.8l-11.3 11.3-22.6 22.6L58.6 322.9c-10.4 10.4-18 23.3-22.2 37.4L1 480.7c-2.5 8.4-.2 17.5 6.1 23.7s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L387.7 253.7 410.3 231zM160 399.4l-9.1 22.7c-4 3.1-8.5 5.4-13.3 6.9L59.4 452l23-78.1c1.4-4.9 3.8-9.4 6.9-13.3l22.7-9.1v32c0 8.8 7.2 16 16 16h32zM362.7 18.7L348.3 33.2 325.7 55.8 314.3 67.1l33.9 33.9 62.1 62.1 33.9 33.9 11.3-11.3 22.6-22.6 14.5-14.5c25-25 25-65.5 0-90.5L453.3 18.7c-25-25-65.5-25-90.5 0zm-47.4 168l-144 144c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l144-144c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-arrows\": {\n    \"aliases\": {\n      \"names\": [\"people-arrows-left-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e068\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"distance\",\n        \"isolation\",\n        \"separate\",\n        \"social distancing\",\n        \"users-people\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e068\",\n    \"label\": \"People Arrows\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 64a64 64 0 1 1 128 0A64 64 0 1 1 64 64zM25.9 233.4C29.3 191.9 64 160 105.6 160h44.8c27 0 51 13.4 65.5 34.1c-2.7 1.9-5.2 4-7.5 6.3l-64 64c-21.9 21.9-21.9 57.3 0 79.2L192 391.2V464c0 26.5-21.5 48-48 48H112c-26.5 0-48-21.5-48-48V348.3c-26.5-9.5-44.7-35.8-42.2-65.6l4.1-49.3zM448 64a64 64 0 1 1 128 0A64 64 0 1 1 448 64zM431.6 200.4c-2.3-2.3-4.9-4.4-7.5-6.3c14.5-20.7 38.6-34.1 65.5-34.1h44.8c41.6 0 76.3 31.9 79.7 73.4l4.1 49.3c2.5 29.8-15.7 56.1-42.2 65.6V464c0 26.5-21.5 48-48 48H496c-26.5 0-48-21.5-48-48V391.2l47.6-47.6c21.9-21.9 21.9-57.3 0-79.2l-64-64zM272 240v32h96V240c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2V336H272v32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 64a64 64 0 1 1 128 0A64 64 0 1 1 64 64zM25.9 233.4C29.3 191.9 64 160 105.6 160h44.8c27 0 51 13.4 65.5 34.1c-2.7 1.9-5.2 4-7.5 6.3l-64 64c-21.9 21.9-21.9 57.3 0 79.2L192 391.2V464c0 26.5-21.5 48-48 48H112c-26.5 0-48-21.5-48-48V348.3c-26.5-9.5-44.7-35.8-42.2-65.6l4.1-49.3zM448 64a64 64 0 1 1 128 0A64 64 0 1 1 448 64zM431.6 200.4c-2.3-2.3-4.9-4.4-7.5-6.3c14.5-20.7 38.6-34.1 65.5-34.1h44.8c41.6 0 76.3 31.9 79.7 73.4l4.1 49.3c2.5 29.8-15.7 56.1-42.2 65.6V464c0 26.5-21.5 48-48 48H496c-26.5 0-48-21.5-48-48V391.2l47.6-47.6c21.9-21.9 21.9-57.3 0-79.2l-64-64zM272 240v32h96V240c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l64 64c9.4 9.4 9.4 24.6 0 33.9l-64 64c-6.9 6.9-17.2 8.9-26.2 5.2s-14.8-12.5-14.8-22.2V336H272v32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-carry-box\": {\n    \"aliases\": {\n      \"names\": [\"people-carry\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4ce\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4ce\",\n    \"label\": \"People Carry Box\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm64 193.7v65.1l51 51c7.1 7.1 11.8 16.2 13.4 26.1l15.2 90.9c2.9 17.4-8.9 33.9-26.3 36.8s-33.9-8.9-36.8-26.3l-14.3-85.9L66.8 320C54.8 308 48 291.7 48 274.7V186.6c0-32.4 26.2-58.6 58.6-58.6c24.1 0 46.5 12 59.9 32l47.4 71.1 10.1 5V160c0-17.7 14.3-32 32-32H384c17.7 0 32 14.3 32 32v76.2l10.1-5L473.5 160c13.3-20 35.8-32 59.9-32c32.4 0 58.6 26.2 58.6 58.6v88.1c0 17-6.7 33.3-18.7 45.3l-79.4 79.4-14.3 85.9c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l15.2-90.9c1.6-9.9 6.3-19 13.4-26.1l51-51V241.7l-19 28.5c-4.6 7-11 12.6-18.5 16.3l-59.6 29.8c-2.4 1.3-4.9 2.2-7.6 2.8c-2.6 .6-5.3 .9-7.9 .8H256.7c-2.5 .1-5-.2-7.5-.7c-2.9-.6-5.6-1.6-8.1-3l-59.5-29.8c-7.5-3.7-13.8-9.4-18.5-16.3l-19-28.5zM2.3 468.1L50.1 348.6l49.2 49.2-37.6 94c-6.6 16.4-25.2 24.4-41.6 17.8S-4.3 484.5 2.3 468.1zM512 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm77.9 348.6l47.8 119.5c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8l-37.6-94 49.2-49.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm64 193.7v65.1l51 51c7.1 7.1 11.8 16.2 13.4 26.1l15.2 90.9c2.9 17.4-8.9 33.9-26.3 36.8s-33.9-8.9-36.8-26.3l-14.3-85.9L66.8 320C54.8 308 48 291.7 48 274.7V186.6c0-32.4 26.2-58.6 58.6-58.6c24.1 0 46.5 12 59.9 32l47.4 71.1 10.1 5V160c0-17.7 14.3-32 32-32H384c17.7 0 32 14.3 32 32v76.2l10.1-5L473.5 160c13.3-20 35.8-32 59.9-32c32.4 0 58.6 26.2 58.6 58.6v88.1c0 17-6.7 33.3-18.7 45.3l-79.4 79.4-14.3 85.9c-2.9 17.4-19.4 29.2-36.8 26.3s-29.2-19.4-26.3-36.8l15.2-90.9c1.6-9.9 6.3-19 13.4-26.1l51-51V241.7l-19 28.5c-4.6 7-11 12.6-18.5 16.3l-59.6 29.8c-2.4 1.3-4.9 2.2-7.6 2.8c-2.6 .6-5.3 .9-7.9 .8H256.7c-2.5 .1-5-.2-7.5-.7c-2.9-.6-5.6-1.6-8.1-3l-59.5-29.8c-7.5-3.7-13.8-9.4-18.5-16.3l-19-28.5zM2.3 468.1L50.1 348.6l49.2 49.2-37.6 94c-6.6 16.4-25.2 24.4-41.6 17.8S-4.3 484.5 2.3 468.1zM512 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm77.9 348.6l47.8 119.5c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8l-37.6-94 49.2-49.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-group\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"family\", \"group\", \"team\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e533\",\n    \"label\": \"People Group\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M72 88a56 56 0 1 1 112 0A56 56 0 1 1 72 88zM64 245.7C54 256.9 48 271.8 48 288s6 31.1 16 42.3V245.7zm144.4-49.3C178.7 222.7 160 261.2 160 304c0 34.3 12 65.8 32 90.5V416c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V389.2C26.2 371.2 0 332.7 0 288c0-61.9 50.1-112 112-112h32c24 0 46.2 7.5 64.4 20.3zM448 416V394.5c20-24.7 32-56.2 32-90.5c0-42.8-18.7-81.3-48.4-107.7C449.8 183.5 472 176 496 176h32c61.9 0 112 50.1 112 112c0 44.7-26.2 83.2-64 101.2V416c0 17.7-14.3 32-32 32H480c-17.7 0-32-14.3-32-32zm8-328a56 56 0 1 1 112 0A56 56 0 1 1 456 88zM576 245.7v84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM320 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM240 304c0 16.2 6 31 16 42.3V261.7c-10 11.3-16 26.1-16 42.3zm144-42.3v84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM448 304c0 44.7-26.2 83.2-64 101.2V448c0 17.7-14.3 32-32 32H288c-17.7 0-32-14.3-32-32V405.2c-37.8-18-64-56.5-64-101.2c0-61.9 50.1-112 112-112h32c61.9 0 112 50.1 112 112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M72 88a56 56 0 1 1 112 0A56 56 0 1 1 72 88zM64 245.7C54 256.9 48 271.8 48 288s6 31.1 16 42.3V245.7zm144.4-49.3C178.7 222.7 160 261.2 160 304c0 34.3 12 65.8 32 90.5V416c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V389.2C26.2 371.2 0 332.7 0 288c0-61.9 50.1-112 112-112h32c24 0 46.2 7.5 64.4 20.3zM448 416V394.5c20-24.7 32-56.2 32-90.5c0-42.8-18.7-81.3-48.4-107.7C449.8 183.5 472 176 496 176h32c61.9 0 112 50.1 112 112c0 44.7-26.2 83.2-64 101.2V416c0 17.7-14.3 32-32 32H480c-17.7 0-32-14.3-32-32zm8-328a56 56 0 1 1 112 0A56 56 0 1 1 456 88zM576 245.7v84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM320 32a64 64 0 1 1 0 128 64 64 0 1 1 0-128zM240 304c0 16.2 6 31 16 42.3V261.7c-10 11.3-16 26.1-16 42.3zm144-42.3v84.7c10-11.3 16-26.1 16-42.3s-6-31.1-16-42.3zM448 304c0 44.7-26.2 83.2-64 101.2V448c0 17.7-14.3 32-32 32H288c-17.7 0-32-14.3-32-32V405.2c-37.8-18-64-56.5-64-101.2c0-61.9 50.1-112 112-112h32c61.9 0 112 50.1 112 112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"group\", \"need\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e534\",\n    \"label\": \"People Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M360 72a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM144 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM496 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 217.5V272c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V217.5l26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 313.5V352c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3H486.2c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3H310.2c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6H134.2c-32.4 0-62.1 17.8-77.5 46.3L18.9 340.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 313.5V352c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V313.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M360 72a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zM144 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM496 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM200 313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-36.3-67.5c1.7-1.7 3.2-3.6 4.3-5.8L264 217.5V272c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V217.5l26.9 49.9c1.2 2.2 2.6 4.1 4.3 5.8l-36.3 67.5c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L440 313.5V352c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3H486.2c-16.3 0-31.9 4.5-45.4 12.6l-33.6-62.3c-15.3-28.5-45.1-46.3-77.5-46.3H310.2c-32.4 0-62.1 17.8-77.5 46.3l-33.6 62.3c-13.5-8.1-29.1-12.6-45.4-12.6H134.2c-32.4 0-62.1 17.8-77.5 46.3L18.9 340.6c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L88 313.5V352c0 17.7 14.3 32 32 32h48c17.7 0 32-14.3 32-32V313.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-pulling\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forced return\", \"yanking\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e535\",\n    \"label\": \"People Pulling\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64V320c0 17.7 14.3 32 32 32c9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8L123.1 352h15.7l30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7c8.6 3.6 18 3.1 25.9-.7c3.4-1.6 6.6-3.9 9.3-6.7c3.1-3.2 5.5-7 7.1-11.4c.1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L537 232.7l-15.3-36.8C504.5 154.8 464.3 128 419.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128H64zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zM64 128c-35.3 0-64 28.7-64 64V320c0 17.7 14.3 32 32 32c9.8 0 18.5-4.4 24.4-11.2L80.4 485.3c2.9 17.4 19.4 29.2 36.8 26.3s29.2-19.4 26.3-36.8L123.1 352h15.7l30 134.9c3.8 17.3 20.9 28.1 38.2 24.3s28.1-20.9 24.3-38.2l-57.3-258 116.3 53.8c.5 .3 1.1 .5 1.6 .7c8.6 3.6 18 3.1 25.9-.7c3.4-1.6 6.6-3.9 9.3-6.7c3.1-3.2 5.5-7 7.1-11.4c.1-.3 .2-.7 .3-1l2.5-7.5c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L537 232.7l-15.3-36.8C504.5 154.8 464.3 128 419.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-24.4 10.9-44.6 29-58.1 51.6L157.3 136.9C144.7 131 130.9 128 117 128H64zM464 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM349.7 335.6l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L372.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-robbery\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"criminal\", \"hands up\", \"looting\", \"robbery\", \"steal\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e536\",\n    \"label\": \"People Robbery\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M488.2 59.1C478.1 99.6 441.7 128 400 128s-78.1-28.4-88.2-68.9L303 24.2C298.8 7.1 281.4-3.3 264.2 1S236.7 22.6 241 39.8l8.7 34.9c11 44 40.2 79.6 78.3 99.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V174.3c38.1-20 67.3-55.6 78.3-99.6L559 39.8c4.3-17.1-6.1-34.5-23.3-38.8S501.2 7.1 497 24.2l-8.7 34.9zM400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zm-8 32c-35.3 0-64 28.7-64 64v96l0 .6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352H88V480c0 17.7 14.3 32 32 32s32-14.3 32-32V252.7l13 20.5c5.9 9.2 16.1 14.9 27 14.9h48c17.7 0 32-14.3 32-32s-14.3-32-32-32H209.6l-37.4-58.9C157.6 142 132.1 128 104.7 128H72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M488.2 59.1C478.1 99.6 441.7 128 400 128s-78.1-28.4-88.2-68.9L303 24.2C298.8 7.1 281.4-3.3 264.2 1S236.7 22.6 241 39.8l8.7 34.9c11 44 40.2 79.6 78.3 99.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V174.3c38.1-20 67.3-55.6 78.3-99.6L559 39.8c4.3-17.1-6.1-34.5-23.3-38.8S501.2 7.1 497 24.2l-8.7 34.9zM400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM80 96A48 48 0 1 0 80 0a48 48 0 1 0 0 96zm-8 32c-35.3 0-64 28.7-64 64v96l0 .6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352H88V480c0 17.7 14.3 32 32 32s32-14.3 32-32V252.7l13 20.5c5.9 9.2 16.1 14.9 27 14.9h48c17.7 0 32-14.3 32-32s-14.3-32-32-32H209.6l-37.4-58.9C157.6 142 132.1 128 104.7 128H72z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"people-roof\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"family\", \"group\", \"manage\", \"people\", \"safe\", \"shelter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e537\",\n    \"label\": \"People Roof\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M335.5 4l288 160c15.4 8.6 21 28.1 12.4 43.5s-28.1 21-43.5 12.4L320 68.6 47.5 220c-15.4 8.6-34.9 3-43.5-12.4s-3-34.9 12.4-43.5L304.5 4c9.7-5.4 21.4-5.4 31.1 0zM320 160a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM144 256a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm312 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM226.9 491.4L200 441.5V480c0 17.7-14.3 32-32 32H120c-17.7 0-32-14.3-32-32V441.5L61.1 491.4c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l37.9-70.3c15.3-28.5 45.1-46.3 77.5-46.3h19.5c16.3 0 31.9 4.5 45.4 12.6l33.6-62.3c15.3-28.5 45.1-46.3 77.5-46.3h19.5c32.4 0 62.1 17.8 77.5 46.3l33.6 62.3c13.5-8.1 29.1-12.6 45.4-12.6h19.5c32.4 0 62.1 17.8 77.5 46.3l37.9 70.3c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8L552 441.5V480c0 17.7-14.3 32-32 32H472c-17.7 0-32-14.3-32-32V441.5l-26.9 49.9c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l36.3-67.5c-1.7-1.7-3.2-3.6-4.3-5.8L376 345.5V400c0 17.7-14.3 32-32 32H296c-17.7 0-32-14.3-32-32V345.5l-26.9 49.9c-1.2 2.2-2.6 4.1-4.3 5.8l36.3 67.5c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M335.5 4l288 160c15.4 8.6 21 28.1 12.4 43.5s-28.1 21-43.5 12.4L320 68.6 47.5 220c-15.4 8.6-34.9 3-43.5-12.4s-3-34.9 12.4-43.5L304.5 4c9.7-5.4 21.4-5.4 31.1 0zM320 160a40 40 0 1 1 0 80 40 40 0 1 1 0-80zM144 256a40 40 0 1 1 0 80 40 40 0 1 1 0-80zm312 40a40 40 0 1 1 80 0 40 40 0 1 1 -80 0zM226.9 491.4L200 441.5V480c0 17.7-14.3 32-32 32H120c-17.7 0-32-14.3-32-32V441.5L61.1 491.4c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l37.9-70.3c15.3-28.5 45.1-46.3 77.5-46.3h19.5c16.3 0 31.9 4.5 45.4 12.6l33.6-62.3c15.3-28.5 45.1-46.3 77.5-46.3h19.5c32.4 0 62.1 17.8 77.5 46.3l33.6 62.3c13.5-8.1 29.1-12.6 45.4-12.6h19.5c32.4 0 62.1 17.8 77.5 46.3l37.9 70.3c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8L552 441.5V480c0 17.7-14.3 32-32 32H472c-17.7 0-32-14.3-32-32V441.5l-26.9 49.9c-6.3 11.7-20.8 16-32.5 9.8s-16-20.8-9.8-32.5l36.3-67.5c-1.7-1.7-3.2-3.6-4.3-5.8L376 345.5V400c0 17.7-14.3 32-32 32H296c-17.7 0-32-14.3-32-32V345.5l-26.9 49.9c-1.2 2.2-2.6 4.1-4.3 5.8l36.3 67.5c6.3 11.7 1.9 26.2-9.8 32.5s-26.2 1.9-32.5-9.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pepper-hot\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f336\"],\n        \"secondary\": [\"10f816\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"buffalo wings\",\n        \"capsicum\",\n        \"chili\",\n        \"chilli\",\n        \"habanero\",\n        \"hot\",\n        \"hot pepper\",\n        \"jalapeno\",\n        \"mexican\",\n        \"pepper\",\n        \"spicy\",\n        \"tabasco\",\n        \"vegetable\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f816\",\n    \"label\": \"Pepper Hot\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M428.3 3c11.6-6.4 26.2-2.3 32.6 9.3l4.8 8.7c19.3 34.7 19.8 75.7 3.4 110C495.8 159.6 512 197.9 512 240c0 18.5-3.1 36.3-8.9 52.8c-6.1 17.3-28.5 16.3-36.8-.1l-11.7-23.4c-4.1-8.1-12.4-13.3-21.5-13.3H360c-13.3 0-24-10.7-24-24V152c0-13.3-10.7-24-24-24l-17.1 0c-21.3 0-30-23.9-10.8-32.9C304.7 85.4 327.7 80 352 80c28.3 0 54.8 7.3 77.8 20.2c5.5-18.2 3.7-38.4-6-55.8L419 35.7c-6.4-11.6-2.3-26.2 9.3-32.6zM171.2 345.5L264 160l40 0v80c0 26.5 21.5 48 48 48h76.2l23.9 47.8C372.3 443.9 244.3 512 103.2 512H44.4C19.9 512 0 492.1 0 467.6c0-20.8 14.5-38.8 34.8-43.3l49.8-11.1c37.6-8.4 69.5-33.2 86.7-67.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M428.3 3c11.6-6.4 26.2-2.3 32.6 9.3l4.8 8.7c19.3 34.7 19.8 75.7 3.4 110C495.8 159.6 512 197.9 512 240c0 18.5-3.1 36.3-8.9 52.8c-6.1 17.3-28.5 16.3-36.8-.1l-11.7-23.4c-4.1-8.1-12.4-13.3-21.5-13.3H360c-13.3 0-24-10.7-24-24V152c0-13.3-10.7-24-24-24l-17.1 0c-21.3 0-30-23.9-10.8-32.9C304.7 85.4 327.7 80 352 80c28.3 0 54.8 7.3 77.8 20.2c5.5-18.2 3.7-38.4-6-55.8L419 35.7c-6.4-11.6-2.3-26.2 9.3-32.6zM171.2 345.5L264 160l40 0v80c0 26.5 21.5 48 48 48h76.2l23.9 47.8C372.3 443.9 244.3 512 103.2 512H44.4C19.9 512 0 492.1 0 467.6c0-20.8 14.5-38.8 34.8-43.3l49.8-11.1c37.6-8.4 69.5-33.2 86.7-67.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"perbyte\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e083\",\n    \"label\": \"PerByte\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M305.314,284.578H246.6V383.3h58.711q24.423,0,38.193-13.77t13.77-36.11q0-21.826-14.032-35.335T305.314,284.578ZM149.435,128.7H90.724v98.723h58.711q24.42,0,38.19-13.773t13.77-36.107q0-21.826-14.029-35.338T149.435,128.7ZM366.647,32H81.353A81.445,81.445,0,0,0,0,113.352V398.647A81.445,81.445,0,0,0,81.353,480H366.647A81.445,81.445,0,0,0,448,398.647V113.352A81.445,81.445,0,0,0,366.647,32Zm63.635,366.647a63.706,63.706,0,0,1-63.635,63.635H81.353a63.706,63.706,0,0,1-63.635-63.635V113.352A63.706,63.706,0,0,1,81.353,49.718H366.647a63.706,63.706,0,0,1,63.635,63.634ZM305.314,128.7H246.6v98.723h58.711q24.423,0,38.193-13.773t13.77-36.107q0-21.826-14.032-35.338T305.314,128.7Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M305.314,284.578H246.6V383.3h58.711q24.423,0,38.193-13.77t13.77-36.11q0-21.826-14.032-35.335T305.314,284.578ZM149.435,128.7H90.724v98.723h58.711q24.42,0,38.19-13.773t13.77-36.107q0-21.826-14.029-35.338T149.435,128.7ZM366.647,32H81.353A81.445,81.445,0,0,0,0,113.352V398.647A81.445,81.445,0,0,0,81.353,480H366.647A81.445,81.445,0,0,0,448,398.647V113.352A81.445,81.445,0,0,0,366.647,32Zm63.635,366.647a63.706,63.706,0,0,1-63.635,63.635H81.353a63.706,63.706,0,0,1-63.635-63.635V113.352A63.706,63.706,0,0,1,81.353,49.718H366.647a63.706,63.706,0,0,1,63.635,63.634ZM305.314,128.7H246.6v98.723h58.711q24.423,0,38.193-13.773t13.77-36.107q0-21.826-14.032-35.338T305.314,128.7Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"percent\": {\n    \"aliases\": {\n      \"names\": [\"percentage\"],\n      \"unicodes\": {\n        \"composite\": [\"f295\", \"f541\"],\n        \"primary\": [\"f295\", \"f541\"],\n        \"secondary\": [\"1025\", \"10f295\", \"10f541\"]\n      }\n    },\n    \"changes\": [\"4.5.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Percent Sign\",\n        \"discount\",\n        \"fraction\",\n        \"proportion\",\n        \"rate\",\n        \"ratio\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"25\",\n    \"label\": \"Percent\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M374.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-320 320c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l320-320zM128 128A64 64 0 1 0 0 128a64 64 0 1 0 128 0zM384 384a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M374.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-320 320c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l320-320zM128 128A64 64 0 1 0 0 128a64 64 0 1 0 128 0zM384 384a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"periscope\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3da\",\n    \"label\": \"Periscope\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"person\": {\n    \"aliases\": {\n      \"names\": [\"male\"],\n      \"unicodes\": {\n        \"composite\": [\"1f9cd\"],\n        \"secondary\": [\"10f183\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"man\", \"person standing\", \"stand\", \"standing\", \"woman\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f183\",\n    \"label\": \"Person\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-arrow-down-to-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ground\", \"indigenous\", \"native\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e538\",\n    \"label\": \"Person Arrow Down To Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352V352h16v96H184zm-64 0H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H152h80H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H264V256.9l28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6H177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V448zM464 64V306.7l-25.4-25.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L528 306.7V64c0-17.7-14.3-32-32-32s-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352V352h16v96H184zm-64 0H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H152h80H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H264V256.9l28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6H177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V448zM464 64V306.7l-25.4-25.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l80 80c12.5 12.5 32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L528 306.7V64c0-17.7-14.3-32-32-32s-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-arrow-up-from-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"population\", \"rise\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e539\",\n    \"label\": \"Person Arrow Up From Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352V352h16v96H184zm-64 0H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H152h80H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H264V256.9l28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6H177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V448zM598.6 121.4l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L464 141.3 464 384c0 17.7 14.3 32 32 32s32-14.3 32-32V141.3l25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 352V352h16v96H184zm-64 0H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H152h80H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H264V256.9l28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6H177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V448zM598.6 121.4l-80-80c-12.5-12.5-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L464 141.3 464 384c0 17.7 14.3 32 32 32s32-14.3 32-32V141.3l25.4 25.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-biking\": {\n    \"aliases\": {\n      \"names\": [\"biking\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6b4\"],\n        \"secondary\": [\"10f84a\"]\n      }\n    },\n    \"changes\": [\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bicycle\",\n        \"bike\",\n        \"biking\",\n        \"cyclist\",\n        \"pedal\",\n        \"person biking\",\n        \"summer\",\n        \"wheel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f84a\",\n    \"label\": \"Person Biking\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L288 305.1V416c0 17.7 14.3 32 32 32s32-14.3 32-32V288c0-10.7-5.3-20.7-14.2-26.6L295 232.9l60.3-48.5L396 217c5.7 4.5 12.7 7 20 7h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H427.2zM56 384a72 72 0 1 1 144 0A72 72 0 1 1 56 384zm200 0A128 128 0 1 0 0 384a128 128 0 1 0 256 0zm184 0a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zm200 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M400 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm27.2 64l-61.8-48.8c-17.3-13.6-41.7-13.8-59.1-.3l-83.1 64.2c-30.7 23.8-28.5 70.8 4.3 91.6L288 305.1V416c0 17.7 14.3 32 32 32s32-14.3 32-32V288c0-10.7-5.3-20.7-14.2-26.6L295 232.9l60.3-48.5L396 217c5.7 4.5 12.7 7 20 7h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H427.2zM56 384a72 72 0 1 1 144 0A72 72 0 1 1 56 384zm200 0A128 128 0 1 0 0 384a128 128 0 1 0 256 0zm184 0a72 72 0 1 1 144 0 72 72 0 1 1 -144 0zm200 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-booth\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f756\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"changing room\", \"curtain\", \"vote\", \"voting\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f756\",\n    \"label\": \"Person Booth\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V192h64V32zm320 0c0-17.7-14.3-32-32-32s-32 14.3-32 32V480c0 17.7 14.3 32 32 32s32-14.3 32-32V32zM224 512c17.7 0 32-14.3 32-32V320H192V480c0 17.7 14.3 32 32 32zM320 0c-9.3 0-18.1 4-24.2 11s-8.8 16.3-7.5 25.5l31.2 218.6L288.6 409.7c-3.5 17.3 7.8 34.2 25.1 37.7s34.2-7.8 37.7-25.1l.7-3.6c1.3 16.4 15.1 29.4 31.9 29.4c17.7 0 32-14.3 32-32c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM112 80A48 48 0 1 0 16 80a48 48 0 1 0 96 0zm0 261.3V269.3l4.7 4.7c9 9 21.2 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H157.3l-41.6-41.6c-14.3-14.3-33.8-22.4-54-22.4C27.6 160 0 187.6 0 221.6v55.7l0 .9V480c0 17.7 14.3 32 32 32s32-14.3 32-32V384l32 42.7V480c0 17.7 14.3 32 32 32s32-14.3 32-32V421.3c0-10.4-3.4-20.5-9.6-28.8L112 341.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V192h64V32zm320 0c0-17.7-14.3-32-32-32s-32 14.3-32 32V480c0 17.7 14.3 32 32 32s32-14.3 32-32V32zM224 512c17.7 0 32-14.3 32-32V320H192V480c0 17.7 14.3 32 32 32zM320 0c-9.3 0-18.1 4-24.2 11s-8.8 16.3-7.5 25.5l31.2 218.6L288.6 409.7c-3.5 17.3 7.8 34.2 25.1 37.7s34.2-7.8 37.7-25.1l.7-3.6c1.3 16.4 15.1 29.4 31.9 29.4c17.7 0 32-14.3 32-32c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM112 80A48 48 0 1 0 16 80a48 48 0 1 0 96 0zm0 261.3V269.3l4.7 4.7c9 9 21.2 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H157.3l-41.6-41.6c-14.3-14.3-33.8-22.4-54-22.4C27.6 160 0 187.6 0 221.6v55.7l0 .9V480c0 17.7 14.3 32 32 32s32-14.3 32-32V384l32 42.7V480c0 17.7 14.3 32 32 32s32-14.3 32-32V421.3c0-10.4-3.4-20.5-9.6-28.8L112 341.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-breastfeeding\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"baby\", \"child\", \"infant\", \"mother\", \"nutrition\", \"sustenance\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e53a\",\n    \"label\": \"Person Breastfeeding\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0a80 80 0 1 1 0 160A80 80 0 1 1 224 0zM436.8 382.8L373.5 462c-16.6 20.7-46.8 24.1-67.5 7.5c-17.6-14.1-22.7-38.1-13.5-57.7l-.8-.1c-38.9-5.6-74.3-25.1-99.7-54.8V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c0 .8 0 1.6 .1 2.4l101.4 50.7c23.7 11.9 33.3 40.7 21.5 64.4s-40.7 33.3-64.4 21.5L27.2 427.3c-1.1-.5-2.2-1.1-3.3-1.7c-4.9-2.8-9.2-6.4-12.6-10.6c-4.6-5.4-7.8-11.7-9.6-18.4c-3.3-12-1.9-25.2 4.8-36.6c.6-1.1 1.3-2.2 2-3.2L75.6 256.1c26.7-40.1 71.7-64.1 119.8-64.1h75.2c46.5 0 90.1 22.5 117.2 60.3l50.7 70.9c2.2 3 4 6.1 5.5 9.4c2.9 6.7 4.3 13.8 4 20.8c-.3 10.6-4.2 21-11.2 29.4zM320 332a44 44 0 1 0 -88 0 44 44 0 1 0 88 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0a80 80 0 1 1 0 160A80 80 0 1 1 224 0zM436.8 382.8L373.5 462c-16.6 20.7-46.8 24.1-67.5 7.5c-17.6-14.1-22.7-38.1-13.5-57.7l-.8-.1c-38.9-5.6-74.3-25.1-99.7-54.8V320c0-17.7-14.3-32-32-32s-32 14.3-32 32v48c0 .8 0 1.6 .1 2.4l101.4 50.7c23.7 11.9 33.3 40.7 21.5 64.4s-40.7 33.3-64.4 21.5L27.2 427.3c-1.1-.5-2.2-1.1-3.3-1.7c-4.9-2.8-9.2-6.4-12.6-10.6c-4.6-5.4-7.8-11.7-9.6-18.4c-3.3-12-1.9-25.2 4.8-36.6c.6-1.1 1.3-2.2 2-3.2L75.6 256.1c26.7-40.1 71.7-64.1 119.8-64.1h75.2c46.5 0 90.1 22.5 117.2 60.3l50.7 70.9c2.2 3 4 6.1 5.5 9.4c2.9 6.7 4.3 13.8 4 20.8c-.3 10.6-4.2 21-11.2 29.4zM320 332a44 44 0 1 0 -88 0 44 44 0 1 0 88 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-burst\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abuse\", \"accident\", \"crash\", \"explode\", \"violence\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e53b\",\n    \"label\": \"Person Burst\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M480 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V256.9l28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6H465.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L408 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M480 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V256.9l28.6 47.5c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-58.3-97c-17.4-28.9-48.6-46.6-82.3-46.6H465.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L408 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-cane\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"aging\", \"cane\", \"elderly\", \"old\", \"staff\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e53c\",\n    \"label\": \"Person Cane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M272 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-8 187.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7H177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V235.3zM352 376c0-4.4 3.6-8 8-8s8 3.6 8 8V488c0 13.3 10.7 24 24 24s24-10.7 24-24V376c0-30.9-25.1-56-56-56s-56 25.1-56 56v8c0 13.3 10.7 24 24 24s24-10.7 24-24v-8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M272 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm-8 187.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7H177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V235.3zM352 376c0-4.4 3.6-8 8-8s8 3.6 8 8V488c0 13.3 10.7 24 24 24s24-10.7 24-24V376c0-30.9-25.1-56-56-56s-56 25.1-56 56v8c0 13.3 10.7 24 24 24s24-10.7 24-24v-8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-chalkboard\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"blackboard\",\n        \"instructor\",\n        \"keynote\",\n        \"lesson\",\n        \"presentation\",\n        \"teacher\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e53d\",\n    \"label\": \"Person Chalkboard\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V192h56 64 16c17.7 0 32-14.3 32-32s-14.3-32-32-32H384V64H576V256H384V224H320v48c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H368c-26.5 0-48 21.5-48 48v80H243.1 177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8 384V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V192h56 64 16c17.7 0 32-14.3 32-32s-14.3-32-32-32H384V64H576V256H384V224H320v48c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H368c-26.5 0-48 21.5-48 48v80H243.1 177.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9L120 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"approved\", \"not affected\", \"ok\", \"okay\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e53e\",\n    \"label\": \"Person Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L416 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"alert\", \"lost\", \"missing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e53f\",\n    \"label\": \"Person Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-circle-minus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"delete\", \"remove\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e540\",\n    \"label\": \"Person Circle Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H496c8.8 0 16-7.2 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zm136 16a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm224 0c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16s7.2 16 16 16H496c8.8 0 16-7.2 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-circle-plus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"found\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e541\",\n    \"label\": \"Person Circle Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H368c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v48c0 8.8 7.2 16 16 16s16-7.2 16-16V384h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H448V304z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm16 80c0-8.8-7.2-16-16-16s-16 7.2-16 16v48H368c-8.8 0-16 7.2-16 16s7.2 16 16 16h48v48c0 8.8 7.2 16 16 16s16-7.2 16-16V384h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H448V304z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-circle-question\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"lost\", \"missing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e542\",\n    \"label\": \"Person Circle Question\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6V328c0 8.8 7.2 16 16 16s16-7.2 16-16v-6.4c0-5.3 4.3-9.6 9.6-9.6h40.5c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2V384c0 8.8 7.2 16 16 16s16-7.2 16-16v-5.1l23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9H409.6c-23 0-41.6 18.6-41.6 41.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zM368 321.6V328c0 8.8 7.2 16 16 16s16-7.2 16-16v-6.4c0-5.3 4.3-9.6 9.6-9.6h40.5c7.7 0 13.9 6.2 13.9 13.9c0 5.2-2.9 9.9-7.4 12.3l-32 16.8c-5.3 2.8-8.6 8.2-8.6 14.2V384c0 8.8 7.2 16 16 16s16-7.2 16-16v-5.1l23.5-12.3c15.1-7.9 24.5-23.6 24.5-40.6c0-25.4-20.6-45.9-45.9-45.9H409.6c-23 0-41.6 18.6-41.6 41.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dead\", \"removed\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e543\",\n    \"label\": \"Person Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9L59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l44.9 74.7c-16.1 17.6-28.6 38.5-36.6 61.5c-1.9-1.8-3.5-3.9-4.9-6.3L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H152zM432 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm59.3 107.3c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L432 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L409.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L432 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L454.6 368l36.7-36.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-digging\": {\n    \"aliases\": {\n      \"names\": [\"digging\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f85e\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bury\", \"construction\", \"debris\", \"dig\", \"men at work\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f85e\",\n    \"label\": \"Person Digging\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M208 64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM9.8 214.8c5.1-12.2 19.1-18 31.4-12.9L60.7 210l22.9-38.1C99.9 144.6 129.3 128 161 128c51.4 0 97 32.9 113.3 81.7l34.6 103.7 79.3 33.1 34.2-45.6c6.4-8.5 16.6-13.3 27.2-12.8s20.3 6.4 25.8 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2s-16.3 16.2-27.8 16.2H288c-11.1 0-21.4-5.7-27.2-15.2s-6.4-21.2-1.4-31.1l16-32c5.4-10.8 16.5-17.7 28.6-17.7h32l22.5-30L22.8 246.2c-12.2-5.1-18-19.1-12.9-31.4zm82.8 91.8l112 48c11.8 5 19.4 16.6 19.4 29.4v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V405.1l-60.6-26-37 111c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.6 469.9l48-144 11-33 32 13.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M208 64a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM9.8 214.8c5.1-12.2 19.1-18 31.4-12.9L60.7 210l22.9-38.1C99.9 144.6 129.3 128 161 128c51.4 0 97 32.9 113.3 81.7l34.6 103.7 79.3 33.1 34.2-45.6c6.4-8.5 16.6-13.3 27.2-12.8s20.3 6.4 25.8 15.5l96 160c5.9 9.9 6.1 22.2 .4 32.2s-16.3 16.2-27.8 16.2H288c-11.1 0-21.4-5.7-27.2-15.2s-6.4-21.2-1.4-31.1l16-32c5.4-10.8 16.5-17.7 28.6-17.7h32l22.5-30L22.8 246.2c-12.2-5.1-18-19.1-12.9-31.4zm82.8 91.8l112 48c11.8 5 19.4 16.6 19.4 29.4v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V405.1l-60.6-26-37 111c-5.6 16.8-23.7 25.8-40.5 20.2S-3.9 486.6 1.6 469.9l48-144 11-33 32 13.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-dots-from-line\": {\n    \"aliases\": {\n      \"names\": [\"diagnoses\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f470\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"allergy\", \"diagnosis\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f470\",\n    \"label\": \"Person Dots From Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 176A88 88 0 1 0 288 0a88 88 0 1 0 0 176zM78.7 372.9c15-12.5 50-34.4 97.3-50.1V432H400V322.7c47.3 15.8 82.3 37.7 97.3 50.1c20.4 17 50.6 14.2 67.6-6.1s14.2-50.6-6.1-67.6c-12-10-30.1-22.5-53.2-35C497.2 278.4 481.7 288 464 288c-26.5 0-48-21.5-48-48c0-4.3 .6-8.4 1.6-12.4C379.1 215.9 335.3 208 288 208c-60.2 0-114.9 12.9-160 29.9c0 .7 0 1.4 0 2.1c0 26.5-21.5 48-48 48c-11.8 0-22.7-4.3-31-11.4c-13.1 8.1-23.7 15.9-31.7 22.5c-20.4 17-23.1 47.2-6.1 67.6s47.2 23.1 67.6 6.1zM24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24H552c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM224 280a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM96 240a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm368 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 176A88 88 0 1 0 288 0a88 88 0 1 0 0 176zM78.7 372.9c15-12.5 50-34.4 97.3-50.1V432H400V322.7c47.3 15.8 82.3 37.7 97.3 50.1c20.4 17 50.6 14.2 67.6-6.1s14.2-50.6-6.1-67.6c-12-10-30.1-22.5-53.2-35C497.2 278.4 481.7 288 464 288c-26.5 0-48-21.5-48-48c0-4.3 .6-8.4 1.6-12.4C379.1 215.9 335.3 208 288 208c-60.2 0-114.9 12.9-160 29.9c0 .7 0 1.4 0 2.1c0 26.5-21.5 48-48 48c-11.8 0-22.7-4.3-31-11.4c-13.1 8.1-23.7 15.9-31.7 22.5c-20.4 17-23.1 47.2-6.1 67.6s47.2 23.1 67.6 6.1zM24 464c-13.3 0-24 10.7-24 24s10.7 24 24 24H552c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM224 280a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zm104 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM96 240a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm368 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-dress\": {\n    \"aliases\": {\n      \"names\": [\"female\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f182\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"man\", \"skirt\", \"woman\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f182\",\n    \"label\": \"Person Dress\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM88 384H70.2c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2c20.3-33.7 56.7-54.3 96-54.3h11.6c39.3 0 75.7 20.6 96 54.3l53.6 89.2c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9l-33.9-56.3L265 362.9c3.5 10.4-4.3 21.1-15.2 21.1H232v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H152v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM88 384H70.2c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2c20.3-33.7 56.7-54.3 96-54.3h11.6c39.3 0 75.7 20.6 96 54.3l53.6 89.2c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9l-33.9-56.3L265 362.9c3.5 10.4-4.3 21.1-15.2 21.1H232v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H152v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-dress-burst\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abuse\", \"accident\", \"crash\", \"explode\", \"violence\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e544\",\n    \"label\": \"Person Dress Burst\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M528 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM390.2 384H408v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h16v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h17.8c10.9 0 18.6-10.7 15.2-21.1L546.7 248.1l33.9 56.3c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-53.6-89.2c-20.2-33.7-56.7-54.3-96-54.3H474.2c-39.3 0-75.7 20.6-96 54.3l-53.6 89.2c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9l33.9-56.3L375 362.9c-3.5 10.4 4.3 21.1 15.2 21.1zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M528 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM390.2 384H408v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h16v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h17.8c10.9 0 18.6-10.7 15.2-21.1L546.7 248.1l33.9 56.3c9.1 15.1 28.8 20 43.9 10.9s20-28.8 10.9-43.9l-53.6-89.2c-20.2-33.7-56.7-54.3-96-54.3H474.2c-39.3 0-75.7 20.6-96 54.3l-53.6 89.2c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9l33.9-56.3L375 362.9c-3.5 10.4 4.3 21.1 15.2 21.1zM190.9 18.1C188.4 12 182.6 8 176 8s-12.4 4-14.9 10.1l-29.4 74L55.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1L10.9 206.4c-5.4 3.7-8 10.3-6.5 16.7s6.7 11.2 13.1 12.2l78.7 12.2L90.6 327c-.5 6.5 3.1 12.7 9 15.5s12.9 1.8 17.8-2.6L176 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 50.5-7.8 24.4-40.5-55.2-38L315 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L220.3 92.1l-29.4-74z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-drowning\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drown\", \"emergency\", \"swim\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e545\",\n    \"label\": \"Person Drowning\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32V96.2c0 54.1 23.5 104 62.2 138.3l-21 146.7c7.8 2.1 15.5 3.3 22.8 3.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c12.4 8.5 26.1 14.8 39.7 18l17.7-97.6c10.7-1.2 21.3-3.1 31.9-5.5l105-23.9c17.2-3.9 28-21.1 24.1-38.3s-21.1-28-38.3-24.1L400 216.6c-41 9.3-83.7 7.5-123.7-5.2c-50.2-16-84.3-62.6-84.3-115.3V64zM320 192a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM306.5 389.9c-11.1-7.9-25.9-7.9-37 0C247 405.4 219.5 416 192 416c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 469.7 159 480 192 480c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 405.2 410.9 416 384 416c-27.5 0-55-10.6-77.5-26.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M192 64c0-17.7-14.3-32-32-32s-32 14.3-32 32V96.2c0 54.1 23.5 104 62.2 138.3l-21 146.7c7.8 2.1 15.5 3.3 22.8 3.3c21.1 0 42-8.5 59.2-20.3c22.1-15.5 51.6-15.5 73.7 0c12.4 8.5 26.1 14.8 39.7 18l17.7-97.6c10.7-1.2 21.3-3.1 31.9-5.5l105-23.9c17.2-3.9 28-21.1 24.1-38.3s-21.1-28-38.3-24.1L400 216.6c-41 9.3-83.7 7.5-123.7-5.2c-50.2-16-84.3-62.6-84.3-115.3V64zM320 192a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM306.5 389.9c-11.1-7.9-25.9-7.9-37 0C247 405.4 219.5 416 192 416c-26.9 0-55.3-10.8-77.4-26.1l0 0c-11.9-8.5-28.1-7.8-39.2 1.7c-14.4 11.9-32.5 21-50.6 25.2c-17.2 4-27.9 21.2-23.9 38.4s21.2 27.9 38.4 23.9c24.5-5.7 44.9-16.5 58.2-25C126.5 469.7 159 480 192 480c31.9 0 60.6-9.9 80.4-18.9c5.8-2.7 11.1-5.3 15.6-7.7c4.5 2.4 9.7 5.1 15.6 7.7c19.8 9 48.5 18.9 80.4 18.9c33 0 65.5-10.3 94.5-25.8c13.4 8.4 33.7 19.3 58.2 25c17.2 4 34.4-6.7 38.4-23.9s-6.7-34.4-23.9-38.4c-18.1-4.2-36.2-13.3-50.6-25.2c-11.1-9.4-27.3-10.1-39.2-1.7l0 0C439.4 405.2 410.9 416 384 416c-27.5 0-55-10.6-77.5-26.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-falling\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"accident\", \"fall\", \"trip\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e546\",\n    \"label\": \"Person Falling\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 0c17.7 0 32 14.3 32 32l0 9.8c0 54.6-27.9 104.6-72.5 133.6l.2 .3L304.5 256l87.5 0c15.1 0 29.3 7.1 38.4 19.2l43.2 57.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4L384 320l-96 0h-1.4l92.3 142.6c9.6 14.8 5.4 34.6-9.5 44.3s-34.6 5.4-44.3-9.5L164.5 249.2c-2.9 9.2-4.5 19-4.5 29l0 73.8c0 17.7-14.3 32-32 32s-32-14.3-32-32V278.2c0-65.1 39.6-123.7 100.1-147.9C232.3 115.8 256 80.8 256 41.8l0-9.8c0-17.7 14.3-32 32-32zM112 32a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 0c17.7 0 32 14.3 32 32l0 9.8c0 54.6-27.9 104.6-72.5 133.6l.2 .3L304.5 256l87.5 0c15.1 0 29.3 7.1 38.4 19.2l43.2 57.6c10.6 14.1 7.7 34.2-6.4 44.8s-34.2 7.7-44.8-6.4L384 320l-96 0h-1.4l92.3 142.6c9.6 14.8 5.4 34.6-9.5 44.3s-34.6 5.4-44.3-9.5L164.5 249.2c-2.9 9.2-4.5 19-4.5 29l0 73.8c0 17.7-14.3 32-32 32s-32-14.3-32-32V278.2c0-65.1 39.6-123.7 100.1-147.9C232.3 115.8 256 80.8 256 41.8l0-9.8c0-17.7 14.3-32 32-32zM112 32a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-falling-burst\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"accident\", \"crash\", \"death\", \"fall\", \"homicide\", \"murder\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e547\",\n    \"label\": \"Person Falling Burst\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 9.8c0 39-23.7 74-59.9 88.4C71.6 154.5 32 213 32 278.2V352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-73.8c0-10 1.6-19.8 4.5-29L261.1 497.4c9.6 14.8 29.4 19.1 44.3 9.5s19.1-29.4 9.5-44.3L222.6 320H224l80 0 38.4 51.2c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8l-43.2-57.6C341.3 263.1 327.1 256 312 256l-71.5 0-56.8-80.2-.2-.3c44.7-29 72.5-79 72.5-133.6l0-9.8zM96 80A48 48 0 1 0 0 80a48 48 0 1 0 96 0zM464 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 78.7-12.2c6.5-1 11.7-5.9 13.1-12.2s-1.1-13-6.5-16.7l-65.6-45.1L603 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L508.3 92.1l-29.4-74C476.4 12 470.6 8 464 8s-12.4 4-14.9 10.1l-29.4 74L343.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1-65.6 45.1c-5.4 3.7-8 10.3-6.5 16.7c.1 .3 .1 .6 .2 .8l19.4 0c20.1 0 39.2 7.5 53.8 20.8l18.4 2.9L383 265.3l36.2 48.3c2.1 2.8 3.9 5.7 5.5 8.6L464 286.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 9.8c0 39-23.7 74-59.9 88.4C71.6 154.5 32 213 32 278.2V352c0 17.7 14.3 32 32 32s32-14.3 32-32l0-73.8c0-10 1.6-19.8 4.5-29L261.1 497.4c9.6 14.8 29.4 19.1 44.3 9.5s19.1-29.4 9.5-44.3L222.6 320H224l80 0 38.4 51.2c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8l-43.2-57.6C341.3 263.1 327.1 256 312 256l-71.5 0-56.8-80.2-.2-.3c44.7-29 72.5-79 72.5-133.6l0-9.8zM96 80A48 48 0 1 0 0 80a48 48 0 1 0 96 0zM464 286.1l58.6 53.9c4.8 4.4 11.9 5.5 17.8 2.6s9.5-9 9-15.5l-5.6-79.4 78.7-12.2c6.5-1 11.7-5.9 13.1-12.2s-1.1-13-6.5-16.7l-65.6-45.1L603 92.2c3.3-5.7 2.7-12.8-1.4-17.9s-10.9-7.2-17.2-5.3L508.3 92.1l-29.4-74C476.4 12 470.6 8 464 8s-12.4 4-14.9 10.1l-29.4 74L343.6 68.9c-6.3-1.9-13.1 .2-17.2 5.3s-4.6 12.2-1.4 17.9l39.5 69.1-65.6 45.1c-5.4 3.7-8 10.3-6.5 16.7c.1 .3 .1 .6 .2 .8l19.4 0c20.1 0 39.2 7.5 53.8 20.8l18.4 2.9L383 265.3l36.2 48.3c2.1 2.8 3.9 5.7 5.5 8.6L464 286.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-half-dress\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"gender\", \"man\", \"restroom\", \"transgender\", \"woman\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e548\",\n    \"label\": \"Person Half Dress\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm8 352V128h6.9c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352h0zM58.2 182.3c19.9-33.1 55.3-53.5 93.8-54.3V384h0v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H70.2c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm8 352V128h6.9c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L232 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352h0zM58.2 182.3c19.9-33.1 55.3-53.5 93.8-54.3V384h0v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H70.2c-10.9 0-18.6-10.7-15.2-21.1L93.3 248.1 59.4 304.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l53.6-89.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-harassing\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"abuse\", \"scream\", \"shame\", \"shout\", \"yell\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e549\",\n    \"label\": \"Person Harassing\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM59.4 304.5L88 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V235.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7H145.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9zM480 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM464 344v58.7l-41.4-41.4c-7.3-7.3-17.6-10.6-27.8-9s-18.9 8.1-23.5 17.3l-48 96c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L408.8 438l54.7 54.7c12.4 12.4 29.1 19.3 46.6 19.3c36.4 0 65.9-29.5 65.9-65.9V344c0-30.9-25.1-56-56-56s-56 25.1-56 56zM288 48c0 8.8 7.2 16 16 16h56c8.8 0 16-7.2 16-16s-7.2-16-16-16H304c-8.8 0-16 7.2-16 16zm-.8 49.7c-7.9-4-17.5-.7-21.5 7.2s-.7 17.5 7.2 21.5l48 24c7.9 4 17.5 .7 21.5-7.2s.7-17.5-7.2-21.5l-48-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM59.4 304.5L88 256.9V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352h16V480c0 17.7 14.3 32 32 32s32-14.3 32-32V235.3l47.4 57.1c11.3 13.6 31.5 15.5 45.1 4.2s15.5-31.5 4.2-45.1l-73.7-88.9c-18.2-22-45.3-34.7-73.9-34.7H145.1c-33.7 0-64.9 17.7-82.3 46.6l-58.3 97c-9.1 15.1-4.2 34.8 10.9 43.9s34.8 4.2 43.9-10.9zM480 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM464 344v58.7l-41.4-41.4c-7.3-7.3-17.6-10.6-27.8-9s-18.9 8.1-23.5 17.3l-48 96c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L408.8 438l54.7 54.7c12.4 12.4 29.1 19.3 46.6 19.3c36.4 0 65.9-29.5 65.9-65.9V344c0-30.9-25.1-56-56-56s-56 25.1-56 56zM288 48c0 8.8 7.2 16 16 16h56c8.8 0 16-7.2 16-16s-7.2-16-16-16H304c-8.8 0-16 7.2-16 16zm-.8 49.7c-7.9-4-17.5-.7-21.5 7.2s-.7 17.5 7.2 21.5l48 24c7.9 4 17.5 .7 21.5-7.2s.7-17.5-7.2-21.5l-48-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-hiking\": {\n    \"aliases\": {\n      \"names\": [\"hiking\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f6ec\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"autumn\",\n        \"fall\",\n        \"hike\",\n        \"mountain\",\n        \"outdoors\",\n        \"summer\",\n        \"walk\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6ec\",\n    \"label\": \"Person Hiking\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm51.3 182.7L224.2 307l49.7 49.7c9 9 14.1 21.2 14.1 33.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V397.3l-73.9-73.9c-15.8-15.8-22.2-38.6-16.9-60.3l20.4-84c8.3-34.1 42.7-54.9 76.7-46.4c19 4.8 35.6 16.4 46.4 32.7L305.1 208H336V184c0-13.3 10.7-24 24-24s24 10.7 24 24v55.8c0 .1 0 .2 0 .2s0 .2 0 .2V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V272H296.6c-16 0-31-8-39.9-21.4l-13.3-20zM81.1 471.9L117.3 334c3 4.2 6.4 8.2 10.1 11.9l41.9 41.9L142.9 488.1c-4.5 17.1-22 27.3-39.1 22.8s-27.3-22-22.8-39.1zm55.5-346L101.4 266.5c-3 12.1-14.9 19.9-27.2 17.9l-47.9-8c-14-2.3-22.9-16.3-19.2-30L31.9 155c9.5-34.8 41.1-59 77.2-59h4.2c15.6 0 27.1 14.7 23.3 29.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm51.3 182.7L224.2 307l49.7 49.7c9 9 14.1 21.2 14.1 33.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V397.3l-73.9-73.9c-15.8-15.8-22.2-38.6-16.9-60.3l20.4-84c8.3-34.1 42.7-54.9 76.7-46.4c19 4.8 35.6 16.4 46.4 32.7L305.1 208H336V184c0-13.3 10.7-24 24-24s24 10.7 24 24v55.8c0 .1 0 .2 0 .2s0 .2 0 .2V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V272H296.6c-16 0-31-8-39.9-21.4l-13.3-20zM81.1 471.9L117.3 334c3 4.2 6.4 8.2 10.1 11.9l41.9 41.9L142.9 488.1c-4.5 17.1-22 27.3-39.1 22.8s-27.3-22-22.8-39.1zm55.5-346L101.4 266.5c-3 12.1-14.9 19.9-27.2 17.9l-47.9-8c-14-2.3-22.9-16.3-19.2-30L31.9 155c9.5-34.8 41.1-59 77.2-59h4.2c15.6 0 27.1 14.7 23.3 29.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-military-pointing\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"army\", \"customs\", \"guard\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e54a\",\n    \"label\": \"Person Military Pointing\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M246.9 14.1C234 15.2 224 26 224 39c0 13.8 11.2 25 25 25H400c8.8 0 16-7.2 16-16V17.4C416 8 408 .7 398.7 1.4L246.9 14.1zM240 112c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H241.6c-1 5.2-1.6 10.5-1.6 16zM72 224c-22.1 0-40 17.9-40 40s17.9 40 40 40H224v89.4L386.8 230.5c-13.3-4.3-27.3-6.5-41.6-6.5H240 72zm345.7 20.9L246.6 416H416V369.7l53.6 90.6c11.2 19 35.8 25.3 54.8 14.1s25.3-35.8 14.1-54.8L462.3 290.8c-11.2-18.9-26.6-34.5-44.6-45.9zM224 448v32c0 17.7 14.3 32 32 32H384c17.7 0 32-14.3 32-32V448H224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M246.9 14.1C234 15.2 224 26 224 39c0 13.8 11.2 25 25 25H400c8.8 0 16-7.2 16-16V17.4C416 8 408 .7 398.7 1.4L246.9 14.1zM240 112c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H241.6c-1 5.2-1.6 10.5-1.6 16zM72 224c-22.1 0-40 17.9-40 40s17.9 40 40 40H224v89.4L386.8 230.5c-13.3-4.3-27.3-6.5-41.6-6.5H240 72zm345.7 20.9L246.6 416H416V369.7l53.6 90.6c11.2 19 35.8 25.3 54.8 14.1s25.3-35.8 14.1-54.8L462.3 290.8c-11.2-18.9-26.6-34.5-44.6-45.9zM224 448v32c0 17.7 14.3 32 32 32H384c17.7 0 32-14.3 32-32V448H224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-military-rifle\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"armed forces\", \"army\", \"military\", \"rifle\", \"war\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e54b\",\n    \"label\": \"Person Military Rifle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 39c0-13 10-23.8 22.9-24.9L334.7 1.4C344 .7 352 8 352 17.4V48c0 8.8-7.2 16-16 16H185c-13.8 0-25-11.2-25-25zm17.6 57H334.4c1 5.2 1.6 10.5 1.6 16c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-5.5 .6-10.8 1.6-16zm228 364.3L352 369.7V480c0 1.3-.1 2.5-.2 3.8L177.5 234.9c16.6-7.1 34.6-10.9 53.3-10.9h50.4c15.9 0 31.3 2.8 45.8 7.9L421.9 67.7c-7.7-4.4-10.3-14.2-5.9-21.9s14.2-10.3 21.9-5.9l13.9 8 13.9 8c7.7 4.4 10.3 14.2 5.9 21.9L416 173.9l1.6 .9c15.3 8.8 20.6 28.4 11.7 43.7L392.6 282c2 2.8 3.9 5.8 5.7 8.8l76.1 128.8c11.2 19 4.9 43.5-14.1 54.8s-43.5 4.9-54.8-14.1zM320 512H192c-17.7 0-32-14.3-32-32V369.7l-53.6 90.6c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8l76.1-128.8c9.4-15.8 21.7-29.3 36-40L331.1 510c-3.5 1.3-7.2 2-11.1 2zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 39c0-13 10-23.8 22.9-24.9L334.7 1.4C344 .7 352 8 352 17.4V48c0 8.8-7.2 16-16 16H185c-13.8 0-25-11.2-25-25zm17.6 57H334.4c1 5.2 1.6 10.5 1.6 16c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-5.5 .6-10.8 1.6-16zm228 364.3L352 369.7V480c0 1.3-.1 2.5-.2 3.8L177.5 234.9c16.6-7.1 34.6-10.9 53.3-10.9h50.4c15.9 0 31.3 2.8 45.8 7.9L421.9 67.7c-7.7-4.4-10.3-14.2-5.9-21.9s14.2-10.3 21.9-5.9l13.9 8 13.9 8c7.7 4.4 10.3 14.2 5.9 21.9L416 173.9l1.6 .9c15.3 8.8 20.6 28.4 11.7 43.7L392.6 282c2 2.8 3.9 5.8 5.7 8.8l76.1 128.8c11.2 19 4.9 43.5-14.1 54.8s-43.5 4.9-54.8-14.1zM320 512H192c-17.7 0-32-14.3-32-32V369.7l-53.6 90.6c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8l76.1-128.8c9.4-15.8 21.7-29.3 36-40L331.1 510c-3.5 1.3-7.2 2-11.1 2zM296 320a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-military-to-person\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"civilian\", \"coordination\", \"military\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e54c\",\n    \"label\": \"Person Military To Person\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M71 12.5c-8.6 1-15 8.2-15 16.8c0 9.3 7.5 16.8 16.7 16.9H184.1c8.8-.1 15.9-7.2 15.9-16V16c0-9.5-8.3-17-17.8-15.9L71 12.5zM189.5 78.1H66.5C64.9 83.8 64 89.8 64 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-6.2-.9-12.2-2.5-17.9zM32 256v32c0 17.7 14.3 32 32 32H192c1.8 0 3.5-.1 5.2-.4L53 208.6C40.1 220.3 32 237.2 32 256zm190.2 42.5c1.1-3.3 1.8-6.8 1.8-10.5V256c0-35.3-28.7-64-64-64H96c-3.7 0-7.4 .3-10.9 .9L222.2 298.5zM384 160a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32H448c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H352zM215.8 450.1c5.2-4.6 8.2-11.1 8.2-18.1s-3-13.5-8.2-18.1l-64-56c-7.1-6.2-17.1-7.7-25.7-3.8S112 366.6 112 376v32l-88 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l88 0v32c0 9.4 5.5 18 14.1 21.9s18.6 2.4 25.7-3.8l64-56zM288 431.9c0 6.9 2.9 13.5 8.1 18.1l64 56.4c7.1 6.2 17.1 7.8 25.7 3.9s14.1-12.4 14.1-21.9l0-32.4 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-32c0-9.4-5.5-18-14.1-21.9s-18.6-2.4-25.7 3.8l-64 56c-5.2 4.5-8.2 11.1-8.2 18z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M71 12.5c-8.6 1-15 8.2-15 16.8c0 9.3 7.5 16.8 16.7 16.9H184.1c8.8-.1 15.9-7.2 15.9-16V16c0-9.5-8.3-17-17.8-15.9L71 12.5zM189.5 78.1H66.5C64.9 83.8 64 89.8 64 96c0 35.3 28.7 64 64 64s64-28.7 64-64c0-6.2-.9-12.2-2.5-17.9zM32 256v32c0 17.7 14.3 32 32 32H192c1.8 0 3.5-.1 5.2-.4L53 208.6C40.1 220.3 32 237.2 32 256zm190.2 42.5c1.1-3.3 1.8-6.8 1.8-10.5V256c0-35.3-28.7-64-64-64H96c-3.7 0-7.4 .3-10.9 .9L222.2 298.5zM384 160a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32H448c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H352zM215.8 450.1c5.2-4.6 8.2-11.1 8.2-18.1s-3-13.5-8.2-18.1l-64-56c-7.1-6.2-17.1-7.7-25.7-3.8S112 366.6 112 376v32l-88 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l88 0v32c0 9.4 5.5 18 14.1 21.9s18.6 2.4 25.7-3.8l64-56zM288 431.9c0 6.9 2.9 13.5 8.1 18.1l64 56.4c7.1 6.2 17.1 7.8 25.7 3.9s14.1-12.4 14.1-21.9l0-32.4 88 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-88 0 0-32c0-9.4-5.5-18-14.1-21.9s-18.6-2.4-25.7 3.8l-64 56c-5.2 4.5-8.2 11.1-8.2 18z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-praying\": {\n    \"aliases\": {\n      \"names\": [\"pray\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6d0\"],\n        \"secondary\": [\"10f683\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"kneel\", \"place of worship\", \"religion\", \"thank\", \"worship\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f683\",\n    \"label\": \"Person Praying\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 64A64 64 0 1 0 224 64a64 64 0 1 0 128 0zM232.7 264l22.9 31.5c6.5 8.9 16.3 14.7 27.2 16.1s21.9-1.7 30.4-8.7l88-72c17.1-14 19.6-39.2 5.6-56.3s-39.2-19.6-56.3-5.6l-55.2 45.2-26.2-36C253.6 156.7 228.6 144 202 144c-30.9 0-59.2 17.1-73.6 44.4L79.8 280.9c-20.2 38.5-9.4 85.9 25.6 111.8L158.6 432H72c-22.1 0-40 17.9-40 40s17.9 40 40 40H280c17.3 0 32.6-11.1 38-27.5s-.3-34.4-14.2-44.7L187.7 354l45-90z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 64A64 64 0 1 0 224 64a64 64 0 1 0 128 0zM232.7 264l22.9 31.5c6.5 8.9 16.3 14.7 27.2 16.1s21.9-1.7 30.4-8.7l88-72c17.1-14 19.6-39.2 5.6-56.3s-39.2-19.6-56.3-5.6l-55.2 45.2-26.2-36C253.6 156.7 228.6 144 202 144c-30.9 0-59.2 17.1-73.6 44.4L79.8 280.9c-20.2 38.5-9.4 85.9 25.6 111.8L158.6 432H72c-22.1 0-40 17.9-40 40s17.9 40 40 40H280c17.3 0 32.6-11.1 38-27.5s-.3-34.4-14.2-44.7L187.7 354l45-90z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-pregnant\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"baby\", \"birth\", \"child\", \"pregnant\", \"pregnant woman\", \"woman\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e31e\",\n    \"label\": \"Person Pregnant\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM120 383c-13.8-3.6-24-16.1-24-31V296.9l-4.6 7.6c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c15-24.9 40.3-41.5 68.7-45.6c4.1-.6 8.2-1 12.5-1h1.1 12.5H192c1.4 0 2.8 .1 4.1 .3c35.7 2.9 65.4 29.3 72.1 65l6.1 32.5c44.3 8.6 77.7 47.5 77.7 94.3v32c0 17.7-14.3 32-32 32H304 264v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384h-8-8v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V383z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM120 383c-13.8-3.6-24-16.1-24-31V296.9l-4.6 7.6c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c15-24.9 40.3-41.5 68.7-45.6c4.1-.6 8.2-1 12.5-1h1.1 12.5H192c1.4 0 2.8 .1 4.1 .3c35.7 2.9 65.4 29.3 72.1 65l6.1 32.5c44.3 8.6 77.7 47.5 77.7 94.3v32c0 17.7-14.3 32-32 32H304 264v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384h-8-8v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V383z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-rays\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"focus\", \"shine\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e54d\",\n    \"label\": \"Person Rays\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767533,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M208 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9l-28.6 47.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L328 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H248zM7 7C16.4-2.3 31.6-2.3 41 7l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 41C-2.3 31.6-2.3 16.4 7 7zM471 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L471 7zM7 505c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-9.4 9.4-24.6 9.4-33.9 0zm464 0l-80-80c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M208 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V256.9l-28.6 47.5c-9.1 15.1-28.8 20-43.9 10.9s-20-28.8-10.9-43.9l58.3-97c17.4-28.9 48.6-46.6 82.3-46.6h29.7c33.7 0 64.9 17.7 82.3 46.6l58.3 97c9.1 15.1 4.2 34.8-10.9 43.9s-34.8 4.2-43.9-10.9L328 256.9V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H248zM7 7C16.4-2.3 31.6-2.3 41 7l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L7 41C-2.3 31.6-2.3 16.4 7 7zM471 7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-80 80c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L471 7zM7 505c-9.4-9.4-9.4-24.6 0-33.9l80-80c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-9.4 9.4-24.6 9.4-33.9 0zm464 0l-80-80c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l80 80c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-rifle\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"army\", \"combatant\", \"gun\", \"military\", \"rifle\", \"war\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e54e\",\n    \"label\": \"Person Rifle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M265.2 192c25.4 0 49.8 7.1 70.8 19.9V512H144V337.7L90.4 428.3c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8L97.7 258.8c24.5-41.4 69-66.8 117.1-66.8h50.4zM160 80a80 80 0 1 1 160 0A80 80 0 1 1 160 80zM448 0c8.8 0 16 7.2 16 16V132.3c9.6 5.5 16 15.9 16 27.7V269.3l16-5.3V208c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v84.5c0 6.9-4.4 13-10.9 15.2L480 325.3V352h48c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H484l23 92.1c2.5 10.1-5.1 19.9-15.5 19.9H432c-8.8 0-16-7.2-16-16V400H400c-17.7 0-32-14.3-32-32V224c0-17.7 14.3-32 32-32V160c0-11.8 6.4-22.2 16-27.7V32c-8.8 0-16-7.2-16-16s7.2-16 16-16h16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M265.2 192c25.4 0 49.8 7.1 70.8 19.9V512H144V337.7L90.4 428.3c-11.2 19-35.8 25.3-54.8 14.1s-25.3-35.8-14.1-54.8L97.7 258.8c24.5-41.4 69-66.8 117.1-66.8h50.4zM160 80a80 80 0 1 1 160 0A80 80 0 1 1 160 80zM448 0c8.8 0 16 7.2 16 16V132.3c9.6 5.5 16 15.9 16 27.7V269.3l16-5.3V208c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v84.5c0 6.9-4.4 13-10.9 15.2L480 325.3V352h48c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16H484l23 92.1c2.5 10.1-5.1 19.9-15.5 19.9H432c-8.8 0-16-7.2-16-16V400H400c-17.7 0-32-14.3-32-32V224c0-17.7 14.3-32 32-32V160c0-11.8 6.4-22.2 16-27.7V32c-8.8 0-16-7.2-16-16s7.2-16 16-16h16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-running\": {\n    \"aliases\": {\n      \"names\": [\"running\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3c3\"],\n        \"secondary\": [\"10f70c\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"exit\", \"flee\", \"marathon\", \"person running\", \"race\", \"running\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f70c\",\n    \"label\": \"Person Running\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M320 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM125.7 175.5c9.9-9.9 23.4-15.5 37.5-15.5c1.9 0 3.8 .1 5.6 .3L137.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9-25.4 88.8c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l28.7-100.4c5.9-20.6-2.6-42.6-20.7-53.9L238 299l30.9-82.4 5.1 12.3C289 264.7 323.9 288 362.7 288H384c17.7 0 32-14.3 32-32s-14.3-32-32-32H362.7c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3L57.4 153.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l23.1-23.1zM91.2 352H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h69.6c19 0 36.2-11.2 43.9-28.5L157 361.6l-9.5-6c-17.5-10.9-30.5-26.8-37.9-44.9L91.2 352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M320 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM125.7 175.5c9.9-9.9 23.4-15.5 37.5-15.5c1.9 0 3.8 .1 5.6 .3L137.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9-25.4 88.8c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l28.7-100.4c5.9-20.6-2.6-42.6-20.7-53.9L238 299l30.9-82.4 5.1 12.3C289 264.7 323.9 288 362.7 288H384c17.7 0 32-14.3 32-32s-14.3-32-32-32H362.7c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3L57.4 153.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l23.1-23.1zM91.2 352H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h69.6c19 0 36.2-11.2 43.9-28.5L157 361.6l-9.5-6c-17.5-10.9-30.5-26.8-37.9-44.9L91.2 352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-shelter\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"house\", \"inside\", \"roof\", \"safe\", \"safety\", \"shelter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e54f\",\n    \"label\": \"Person Shelter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160V480c0 17.7 14.3 32 32 32s32-14.3 32-32V178.6L256 68.9 448 178.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 280V400h16v88c0 13.3 10.7 24 24 24s24-10.7 24-24V313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3H246.2c-32.4 0-62.1 17.8-77.5 46.3l-37.9 70.3c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5V488c0 13.3 10.7 24 24 24s24-10.7 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M271.9 4.2c-9.8-5.6-21.9-5.6-31.8 0l-224 128C6.2 137.9 0 148.5 0 160V480c0 17.7 14.3 32 32 32s32-14.3 32-32V178.6L256 68.9 448 178.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-11.5-6.2-22.1-16.1-27.8l-224-128zM256 208a40 40 0 1 0 0-80 40 40 0 1 0 0 80zm-8 280V400h16v88c0 13.3 10.7 24 24 24s24-10.7 24-24V313.5l26.9 49.9c6.3 11.7 20.8 16 32.5 9.8s16-20.8 9.8-32.5l-37.9-70.3c-15.3-28.5-45.1-46.3-77.5-46.3H246.2c-32.4 0-62.1 17.8-77.5 46.3l-37.9 70.3c-6.3 11.7-1.9 26.2 9.8 32.5s26.2 1.9 32.5-9.8L200 313.5V488c0 13.3 10.7 24 24 24s24-10.7 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-skating\": {\n    \"aliases\": {\n      \"names\": [\"skating\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7c5\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"figure skating\", \"ice\", \"olympics\", \"rink\", \"skate\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7c5\",\n    \"label\": \"Person Skating\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM128 128c0-17.7 14.3-32 32-32H319.4c43.6 0 64.6 53.4 32.8 83.1l-74.4 69.4 60.2 60.2c9 9 14.1 21.2 14.1 33.9V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V349.3l-77.9-77.8c-26.6-26.6-24.6-70.3 4.3-94.4l20.4-17H160c-17.7 0-32-14.3-32-32zM81.4 353.4l86.9-86.9c4.6 10 11 19.3 19.3 27.5l21.8 21.8-82.7 82.7c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zm322.5 95.1c8.6 2.1 13.8 10.8 11.6 19.4l-.4 1.7c-6.2 24.9-28.6 42.4-54.3 42.4H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h88.8c11 0 20.6-7.5 23.3-18.2l.4-1.7c2.1-8.6 10.8-13.8 19.4-11.6zM135.2 478.3l-6.2 3.1c-21.6 10.8-47.6 6.6-64.6-10.5L4.7 411.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l59.6 59.6c7.3 7.3 18.5 9.1 27.7 4.5l6.2-3.1c7.9-4 17.5-.7 21.5 7.2s.7 17.5-7.2 21.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM128 128c0-17.7 14.3-32 32-32H319.4c43.6 0 64.6 53.4 32.8 83.1l-74.4 69.4 60.2 60.2c9 9 14.1 21.2 14.1 33.9V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V349.3l-77.9-77.8c-26.6-26.6-24.6-70.3 4.3-94.4l20.4-17H160c-17.7 0-32-14.3-32-32zM81.4 353.4l86.9-86.9c4.6 10 11 19.3 19.3 27.5l21.8 21.8-82.7 82.7c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3zm322.5 95.1c8.6 2.1 13.8 10.8 11.6 19.4l-.4 1.7c-6.2 24.9-28.6 42.4-54.3 42.4H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h88.8c11 0 20.6-7.5 23.3-18.2l.4-1.7c2.1-8.6 10.8-13.8 19.4-11.6zM135.2 478.3l-6.2 3.1c-21.6 10.8-47.6 6.6-64.6-10.5L4.7 411.3c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0l59.6 59.6c7.3 7.3 18.5 9.1 27.7 4.5l6.2-3.1c7.9-4 17.5-.7 21.5 7.2s.7 17.5-7.2 21.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-skiing\": {\n    \"aliases\": {\n      \"names\": [\"skiing\"],\n      \"unicodes\": {\n        \"composite\": [\"26f7\"],\n        \"secondary\": [\"10f7c9\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"downhill\", \"olympics\", \"ski\", \"skier\", \"snow\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7c9\",\n    \"label\": \"Person Skiing\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M380.7 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM2.7 268.9c6.1-11.8 20.6-16.3 32.4-10.2L232.7 361.3l46.2-69.2-75.1-75.1c-14.6-14.6-20.4-33.9-18.4-52.1l108.8 52 39.3 39.3c16.2 16.2 18.7 41.5 6 60.6L289.8 391l128.7 66.8c13.6 7.1 29.8 7.2 43.6 .3l15.2-7.6c11.9-5.9 26.3-1.1 32.2 10.7s1.1 26.3-10.7 32.2l-15.2 7.6c-27.5 13.7-59.9 13.5-87.2-.7L12.9 301.3C1.2 295.2-3.4 280.7 2.7 268.9zM118.9 65.6L137 74.2l8.7-17.4c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-8.5 16.9 54.7 26.2c1.5-.7 3.1-1.4 4.7-2.1l83.4-33.4c34.2-13.7 72.8 4.2 84.5 39.2l17.1 51.2 52.1 26.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-58.1-29c-11.4-5.7-20-15.7-24.1-27.8l-5.8-17.3-27.3 12.1-6.8 3-6.7-3.2L151.5 116.7l-9.2 18.4c-4 7.9-13.6 11.1-21.5 7.2s-11.1-13.6-7.2-21.5l9-18-17.6-8.4c-8-3.8-11.3-13.4-7.5-21.3s13.4-11.3 21.3-7.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M380.7 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM2.7 268.9c6.1-11.8 20.6-16.3 32.4-10.2L232.7 361.3l46.2-69.2-75.1-75.1c-14.6-14.6-20.4-33.9-18.4-52.1l108.8 52 39.3 39.3c16.2 16.2 18.7 41.5 6 60.6L289.8 391l128.7 66.8c13.6 7.1 29.8 7.2 43.6 .3l15.2-7.6c11.9-5.9 26.3-1.1 32.2 10.7s1.1 26.3-10.7 32.2l-15.2 7.6c-27.5 13.7-59.9 13.5-87.2-.7L12.9 301.3C1.2 295.2-3.4 280.7 2.7 268.9zM118.9 65.6L137 74.2l8.7-17.4c4-7.9 13.6-11.1 21.5-7.2s11.1 13.6 7.2 21.5l-8.5 16.9 54.7 26.2c1.5-.7 3.1-1.4 4.7-2.1l83.4-33.4c34.2-13.7 72.8 4.2 84.5 39.2l17.1 51.2 52.1 26.1c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3l-58.1-29c-11.4-5.7-20-15.7-24.1-27.8l-5.8-17.3-27.3 12.1-6.8 3-6.7-3.2L151.5 116.7l-9.2 18.4c-4 7.9-13.6 11.1-21.5 7.2s-11.1-13.6-7.2-21.5l9-18-17.6-8.4c-8-3.8-11.3-13.4-7.5-21.3s13.4-11.3 21.3-7.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-skiing-nordic\": {\n    \"aliases\": {\n      \"names\": [\"skiing-nordic\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7ca\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cross country\", \"olympics\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ca\",\n    \"label\": \"Person Skiing Nordic\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M336 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM227.2 160c1.9 0 3.8 .1 5.6 .3L201.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9L291.3 464H202.8l41.1-88.1-32.4-20.3c-7.8-4.9-14.7-10.7-20.6-17.3L132.2 464H99.7l54.2-257.6c4.6-1.5 9-4.1 12.7-7.8l23.1-23.1c9.9-9.9 23.4-15.5 37.5-15.5zM121.4 198.6c.4 .4 .8 .8 1.3 1.2L67 464H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H159.3c.4 0 .9 0 1.3 0H319.3c.5 0 1 0 1.4 0H504c39.8 0 72-32.2 72-72v-8c0-13.3-10.7-24-24-24s-24 10.7-24 24v8c0 13.3-10.7 24-24 24H434.6l27.6-179.3c10.5-5.2 17.8-16.1 17.8-28.7c0-17.7-14.3-32-32-32H426.7c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3l-23.1 23.1c-12.5 12.5-12.5 32.8 0 45.3zm308 89.4L402.3 464H357.8l21.6-75.6c5.9-20.6-2.6-42.6-20.7-53.9L302 299l30.9-82.4 5.1 12.3C353 264.7 387.9 288 426.7 288h2.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M336 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM227.2 160c1.9 0 3.8 .1 5.6 .3L201.6 254c-9.3 28 1.7 58.8 26.8 74.5l86.2 53.9L291.3 464H202.8l41.1-88.1-32.4-20.3c-7.8-4.9-14.7-10.7-20.6-17.3L132.2 464H99.7l54.2-257.6c4.6-1.5 9-4.1 12.7-7.8l23.1-23.1c9.9-9.9 23.4-15.5 37.5-15.5zM121.4 198.6c.4 .4 .8 .8 1.3 1.2L67 464H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H159.3c.4 0 .9 0 1.3 0H319.3c.5 0 1 0 1.4 0H504c39.8 0 72-32.2 72-72v-8c0-13.3-10.7-24-24-24s-24 10.7-24 24v8c0 13.3-10.7 24-24 24H434.6l27.6-179.3c10.5-5.2 17.8-16.1 17.8-28.7c0-17.7-14.3-32-32-32H426.7c-12.9 0-24.6-7.8-29.5-19.7l-6.3-15c-14.6-35.1-44.1-61.9-80.5-73.1l-48.7-15c-11.1-3.4-22.7-5.2-34.4-5.2c-31 0-60.8 12.3-82.7 34.3l-23.1 23.1c-12.5 12.5-12.5 32.8 0 45.3zm308 89.4L402.3 464H357.8l21.6-75.6c5.9-20.6-2.6-42.6-20.7-53.9L302 299l30.9-82.4 5.1 12.3C353 264.7 387.9 288 426.7 288h2.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-snowboarding\": {\n    \"aliases\": {\n      \"names\": [\"snowboarding\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3c2\"],\n        \"secondary\": [\"10f7ce\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"olympics\", \"ski\", \"snow\", \"snowboard\", \"snowboarder\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7ce\",\n    \"label\": \"Person Snowboarding\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M209.7 3.4c15.8-7.9 35-1.5 42.9 14.3l25 50 42.4 8.5c19.5 3.9 37.8 12.3 53.5 24.5l126.1 98.1c14 10.9 16.5 31 5.6 44.9s-31 16.5-44.9 5.6l-72.1-56.1-71.5 31.8 33.1 27.6c23.2 19.3 33.5 50 26.7 79.4l-17.4 75.2c-2.2 9.4-8.2 16.8-16.1 21l86.5 33.1c4.6 1.8 9.4 2.6 14.3 2.6H472c13.3 0 24 10.7 24 24s-10.7 24-24 24H443.8c-10.8 0-21.4-2-31.5-5.8L60.1 371.3c-11.5-4.4-22-11.2-30.8-20L7 329c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.4 22.4c4 4 8.7 7.1 14 9.1l22.4 8.6c-.8-1.6-1.5-3.2-2.1-4.9c-5.6-16.8 3.5-34.9 20.2-40.5L192 264.9l0-53.2c0-24.2 13.7-46.4 35.4-57.2l45.2-22.6-7.5-1.5c-19.4-3.9-35.9-16.5-44.7-34.1l-25-50c-7.9-15.8-1.5-35 14.3-42.9zM139 350.1l159 60.9c-2.1-5.6-2.6-11.9-1.1-18.2l17.4-75.2c1.4-5.9-.7-12-5.3-15.9l-52.8-44 0 18.8c0 20.7-13.2 39-32.8 45.5L139 350.1zM432 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M209.7 3.4c15.8-7.9 35-1.5 42.9 14.3l25 50 42.4 8.5c19.5 3.9 37.8 12.3 53.5 24.5l126.1 98.1c14 10.9 16.5 31 5.6 44.9s-31 16.5-44.9 5.6l-72.1-56.1-71.5 31.8 33.1 27.6c23.2 19.3 33.5 50 26.7 79.4l-17.4 75.2c-2.2 9.4-8.2 16.8-16.1 21l86.5 33.1c4.6 1.8 9.4 2.6 14.3 2.6H472c13.3 0 24 10.7 24 24s-10.7 24-24 24H443.8c-10.8 0-21.4-2-31.5-5.8L60.1 371.3c-11.5-4.4-22-11.2-30.8-20L7 329c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l22.4 22.4c4 4 8.7 7.1 14 9.1l22.4 8.6c-.8-1.6-1.5-3.2-2.1-4.9c-5.6-16.8 3.5-34.9 20.2-40.5L192 264.9l0-53.2c0-24.2 13.7-46.4 35.4-57.2l45.2-22.6-7.5-1.5c-19.4-3.9-35.9-16.5-44.7-34.1l-25-50c-7.9-15.8-1.5-35 14.3-42.9zM139 350.1l159 60.9c-2.1-5.6-2.6-11.9-1.1-18.2l17.4-75.2c1.4-5.9-.7-12-5.3-15.9l-52.8-44 0 18.8c0 20.7-13.2 39-32.8 45.5L139 350.1zM432 0a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-swimming\": {\n    \"aliases\": {\n      \"names\": [\"swimmer\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3ca\"],\n        \"secondary\": [\"10f5c4\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ocean\", \"person swimming\", \"pool\", \"sea\", \"swim\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5c4\",\n    \"label\": \"Person Swimming\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M309.5 178.4L447.9 297.1c-1.6 .9-3.2 2-4.8 3c-18 12.4-40.1 20.3-59.2 20.3c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-10.1 0-21.1-2.2-31.9-6.2C163.1 193.2 262.2 96 384 96h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384c-26.9 0-52.3 6.6-74.5 18.4zM160 160A64 64 0 1 1 32 160a64 64 0 1 1 128 0zM306.5 325.9C329 341.4 356.5 352 384 352c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 405.7 417 416 384 416c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 341.2 165.1 352 192 352c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M309.5 178.4L447.9 297.1c-1.6 .9-3.2 2-4.8 3c-18 12.4-40.1 20.3-59.2 20.3c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-10.1 0-21.1-2.2-31.9-6.2C163.1 193.2 262.2 96 384 96h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H384c-26.9 0-52.3 6.6-74.5 18.4zM160 160A64 64 0 1 1 32 160a64 64 0 1 1 128 0zM306.5 325.9C329 341.4 356.5 352 384 352c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 405.7 417 416 384 416c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 341.2 165.1 352 192 352c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-through-window\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"door\",\n        \"exit\",\n        \"forced entry\",\n        \"leave\",\n        \"robbery\",\n        \"steal\",\n        \"window\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e5a9\",\n    \"label\": \"Person Through Window\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 64l224 0 0 9.8c0 39-23.7 74-59.9 88.4C167.6 186.5 128 245 128 310.2l0 73.8s0 0 0 0H64V64zm288 0l224 0V384H508.3l-3.7-4.5-75.2-90.2c-9.1-10.9-22.6-17.3-36.9-17.3l-71.1 0-41-63.1c-.3-.5-.6-1-1-1.4c44.7-29 72.5-79 72.5-133.6l0-9.8zm73 320H379.2l42.7 64H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48V400c0 26.5 21.5 48 48 48H308.2l33.2 49.8c9.8 14.7 29.7 18.7 44.4 8.9s18.7-29.7 8.9-44.4L310.5 336l74.6 0 40 48zm-159.5 0H192s0 0 0 0l0-73.8c0-10.2 1.6-20.1 4.7-29.5L265.5 384zM192 128a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 64l224 0 0 9.8c0 39-23.7 74-59.9 88.4C167.6 186.5 128 245 128 310.2l0 73.8s0 0 0 0H64V64zm288 0l224 0V384H508.3l-3.7-4.5-75.2-90.2c-9.1-10.9-22.6-17.3-36.9-17.3l-71.1 0-41-63.1c-.3-.5-.6-1-1-1.4c44.7-29 72.5-79 72.5-133.6l0-9.8zm73 320H379.2l42.7 64H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48V400c0 26.5 21.5 48 48 48H308.2l33.2 49.8c9.8 14.7 29.7 18.7 44.4 8.9s18.7-29.7 8.9-44.4L310.5 336l74.6 0 40 48zm-159.5 0H192s0 0 0 0l0-73.8c0-10.2 1.6-20.1 4.7-29.5L265.5 384zM192 128a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-walking\": {\n    \"aliases\": {\n      \"names\": [\"walking\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6b6\"],\n        \"secondary\": [\"10f554\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"crosswalk\",\n        \"exercise\",\n        \"hike\",\n        \"move\",\n        \"person walking\",\n        \"walk\",\n        \"walking\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f554\",\n    \"label\": \"Person Walking\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM126.5 199.3c-1 .4-1.9 .8-2.9 1.2l-8 3.5c-16.4 7.3-29 21.2-34.7 38.2l-2.6 7.8c-5.6 16.8-23.7 25.8-40.5 20.2s-25.8-23.7-20.2-40.5l2.6-7.8c11.4-34.1 36.6-61.9 69.4-76.5l8-3.5c20.8-9.2 43.3-14 66.1-14c44.6 0 84.8 26.8 101.9 67.9L281 232.7l21.4 10.7c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L247 287.3c-10.3-5.2-18.4-13.8-22.8-24.5l-9.6-23-19.3 65.5 49.5 54c5.4 5.9 9.2 13 11.2 20.8l23 92.1c4.3 17.1-6.1 34.5-23.3 38.8s-34.5-6.1-38.8-23.3l-22-88.1-70.7-77.1c-14.8-16.1-20.3-38.6-14.7-59.7l16.9-63.5zM68.7 398l25-62.4c2.1 3 4.5 5.8 7 8.6l40.7 44.4-14.5 36.2c-2.4 6-6 11.5-10.6 16.1L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L68.7 398z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM126.5 199.3c-1 .4-1.9 .8-2.9 1.2l-8 3.5c-16.4 7.3-29 21.2-34.7 38.2l-2.6 7.8c-5.6 16.8-23.7 25.8-40.5 20.2s-25.8-23.7-20.2-40.5l2.6-7.8c11.4-34.1 36.6-61.9 69.4-76.5l8-3.5c20.8-9.2 43.3-14 66.1-14c44.6 0 84.8 26.8 101.9 67.9L281 232.7l21.4 10.7c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L247 287.3c-10.3-5.2-18.4-13.8-22.8-24.5l-9.6-23-19.3 65.5 49.5 54c5.4 5.9 9.2 13 11.2 20.8l23 92.1c4.3 17.1-6.1 34.5-23.3 38.8s-34.5-6.1-38.8-23.3l-22-88.1-70.7-77.1c-14.8-16.1-20.3-38.6-14.7-59.7l16.9-63.5zM68.7 398l25-62.4c2.1 3 4.5 5.8 7 8.6l40.7 44.4-14.5 36.2c-2.4 6-6 11.5-10.6 16.1L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L68.7 398z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-walking-arrow-loop-left\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"population return\", \"return\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e551\",\n    \"label\": \"Person Walking Arrow Loop Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zm347.7 119c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L461.3 384H480c88.4 0 160-71.6 160-160s-71.6-160-160-160L352 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c53 0 96 43 96 96s-43 96-96 96H461.3l25.4-25.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3l80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zm347.7 119c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L461.3 384H480c88.4 0 160-71.6 160-160s-71.6-160-160-160L352 64c-17.7 0-32 14.3-32 32s14.3 32 32 32l128 0c53 0 96 43 96 96s-43 96-96 96H461.3l25.4-25.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-80 80c-12.5 12.5-12.5 32.8 0 45.3l80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-walking-arrow-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"exit\", \"internally displaced\", \"leave\", \"refugee\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e552\",\n    \"label\": \"Person Walking Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224H384c-17.7 0-32 14.3-32 32s14.3 32 32 32H530.7l-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224H384c-17.7 0-32 14.3-32 32s14.3 32 32 32H530.7l-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-walking-dashed-line-arrow-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"exit\", \"refugee\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e553\",\n    \"label\": \"Person Walking Dashed Line Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224H384c-17.7 0-32 14.3-32 32s14.3 32 32 32H530.7l-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80zM392 0c-13.3 0-24 10.7-24 24V72c0 13.3 10.7 24 24 24s24-10.7 24-24V24c0-13.3-10.7-24-24-24zm24 152c0-13.3-10.7-24-24-24s-24 10.7-24 24v16c0 13.3 10.7 24 24 24s24-10.7 24-24V152zM392 320c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24s24-10.7 24-24V344c0-13.3-10.7-24-24-24zm24 120c0-13.3-10.7-24-24-24s-24 10.7-24 24v48c0 13.3 10.7 24 24 24s24-10.7 24-24V440z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM123.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L281 232.7l-15.3-36.8C248.5 154.8 208.3 128 163.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1L68.7 398 9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L116.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM550.6 153.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L530.7 224H384c-17.7 0-32 14.3-32 32s14.3 32 32 32H530.7l-25.4 25.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l80-80c12.5-12.5 12.5-32.8 0-45.3l-80-80zM392 0c-13.3 0-24 10.7-24 24V72c0 13.3 10.7 24 24 24s24-10.7 24-24V24c0-13.3-10.7-24-24-24zm24 152c0-13.3-10.7-24-24-24s-24 10.7-24 24v16c0 13.3 10.7 24 24 24s24-10.7 24-24V152zM392 320c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24s24-10.7 24-24V344c0-13.3-10.7-24-24-24zm24 120c0-13.3-10.7-24-24-24s-24 10.7-24 24v48c0 13.3 10.7 24 24 24s24-10.7 24-24V440z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-walking-luggage\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bag\",\n        \"baggage\",\n        \"briefcase\",\n        \"carry-on\",\n        \"deployment\",\n        \"rolling\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e554\",\n    \"label\": \"Person Walking Luggage\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M432 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM347.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L505 232.7l-15.3-36.8C472.5 154.8 432.3 128 387.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L340.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM256 274.1c-7.7-4.4-17.4-1.8-21.9 5.9l-32 55.4L147.7 304c-15.3-8.8-34.9-3.6-43.7 11.7L40 426.6c-8.8 15.3-3.6 34.9 11.7 43.7l55.4 32c15.3 8.8 34.9 3.6 43.7-11.7l64-110.9c1.5-2.6 2.6-5.2 3.3-8L261.9 296c4.4-7.7 1.8-17.4-5.9-21.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M432 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM347.7 200.5c1-.4 1.9-.8 2.9-1.2l-16.9 63.5c-5.6 21.1-.1 43.6 14.7 59.7l70.7 77.1 22 88.1c4.3 17.1 21.7 27.6 38.8 23.3s27.6-21.7 23.3-38.8l-23-92.1c-1.9-7.8-5.8-14.9-11.2-20.8l-49.5-54 19.3-65.5 9.6 23c4.4 10.6 12.5 19.3 22.8 24.5l26.7 13.3c15.8 7.9 35 1.5 42.9-14.3s1.5-35-14.3-42.9L505 232.7l-15.3-36.8C472.5 154.8 432.3 128 387.7 128c-22.8 0-45.3 4.8-66.1 14l-8 3.5c-32.9 14.6-58.1 42.4-69.4 76.5l-2.6 7.8c-5.6 16.8 3.5 34.9 20.2 40.5s34.9-3.5 40.5-20.2l2.6-7.8c5.7-17.1 18.3-30.9 34.7-38.2l8-3.5zm-30 135.1l-25 62.4-59.4 59.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L340.3 441c4.6-4.6 8.2-10.1 10.6-16.1l14.5-36.2-40.7-44.4c-2.5-2.7-4.8-5.6-7-8.6zM256 274.1c-7.7-4.4-17.4-1.8-21.9 5.9l-32 55.4L147.7 304c-15.3-8.8-34.9-3.6-43.7 11.7L40 426.6c-8.8 15.3-3.6 34.9 11.7 43.7l55.4 32c15.3 8.8 34.9 3.6 43.7-11.7l64-110.9c1.5-2.6 2.6-5.2 3.3-8L261.9 296c4.4-7.7 1.8-17.4-5.9-21.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"person-walking-with-cane\": {\n    \"aliases\": {\n      \"names\": [\"blind\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f29d\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blind\", \"cane\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f29d\",\n    \"label\": \"Person Walking With Cane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8.4 32c-36.4 0-69.6 20.5-85.9 53.1L35.4 273.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L128 231.6v43.2c0 17 6.7 33.3 18.7 45.3L224 397.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V390.6c0-12.7-5.1-24.9-14.1-33.9L224 306.7V213.3l70.4 93.9c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8L268.8 166.4C250.7 142.2 222.2 128 192 128H167.6zM128.3 346.8L97 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l22-88.2-52.8-52.8zM450.8 505.1c5 7.3 15 9.1 22.3 4s9.1-15 4-22.3L358.9 316.1c-2.8 3.8-6.1 7.3-10.1 10.3c-5 3.8-10.5 6.4-16.2 7.9L450.8 505.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-8.4 32c-36.4 0-69.6 20.5-85.9 53.1L35.4 273.7c-7.9 15.8-1.5 35 14.3 42.9s35 1.5 42.9-14.3L128 231.6v43.2c0 17 6.7 33.3 18.7 45.3L224 397.3V480c0 17.7 14.3 32 32 32s32-14.3 32-32V390.6c0-12.7-5.1-24.9-14.1-33.9L224 306.7V213.3l70.4 93.9c10.6 14.1 30.7 17 44.8 6.4s17-30.7 6.4-44.8L268.8 166.4C250.7 142.2 222.2 128 192 128H167.6zM128.3 346.8L97 472.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l22-88.2-52.8-52.8zM450.8 505.1c5 7.3 15 9.1 22.3 4s9.1-15 4-22.3L358.9 316.1c-2.8 3.8-6.1 7.3-10.1 10.3c-5 3.8-10.5 6.4-16.2 7.9L450.8 505.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"peseta-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Peseta Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e221\",\n    \"label\": \"Peseta Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 32C46.3 32 32 46.3 32 64v96c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 96V448c0 17.7 14.3 32 32 32s32-14.3 32-32V352h96c77.4 0 142-55 156.8-128H352c17.7 0 32-14.3 32-32s-14.3-32-32-32h-3.2C334 87 269.4 32 192 32H64zM282.5 160H96V96h96c41.8 0 77.4 26.7 90.5 64zM96 224H282.5c-13.2 37.3-48.7 64-90.5 64H96V224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 32C46.3 32 32 46.3 32 64v96c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 96V448c0 17.7 14.3 32 32 32s32-14.3 32-32V352h96c77.4 0 142-55 156.8-128H352c17.7 0 32-14.3 32-32s-14.3-32-32-32h-3.2C334 87 269.4 32 192 32H64zM282.5 160H96V96h96c41.8 0 77.4 26.7 90.5 64zM96 224H282.5c-13.2 37.3-48.7 64-90.5 64H96V224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"peso-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Peso Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e222\",\n    \"label\": \"Peso Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 32C46.3 32 32 46.3 32 64v64c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h80c68.4 0 127.7-39 156.8-96H352c17.7 0 32-14.3 32-32s-14.3-32-32-32h-.7c.5-5.3 .7-10.6 .7-16s-.2-10.7-.7-16h.7c17.7 0 32-14.3 32-32s-14.3-32-32-32H332.8C303.7 71 244.4 32 176 32H64zm190.4 96H96V96h80c30.5 0 58.2 12.2 78.4 32zM96 192H286.9c.7 5.2 1.1 10.6 1.1 16s-.4 10.8-1.1 16H96V192zm158.4 96c-20.2 19.8-47.9 32-78.4 32H96V288H254.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 32C46.3 32 32 46.3 32 64v64c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V384h80c68.4 0 127.7-39 156.8-96H352c17.7 0 32-14.3 32-32s-14.3-32-32-32h-.7c.5-5.3 .7-10.6 .7-16s-.2-10.7-.7-16h.7c17.7 0 32-14.3 32-32s-14.3-32-32-32H332.8C303.7 71 244.4 32 176 32H64zm190.4 96H96V96h80c30.5 0 58.2 12.2 78.4 32zM96 192H286.9c.7 5.2 1.1 10.6 1.1 16s-.4 10.8-1.1 16H96V192zm158.4 96c-20.2 19.8-47.9 32-78.4 32H96V288H254.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"phabricator\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3db\",\n    \"label\": \"Phabricator\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"phoenix-framework\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3dc\",\n    \"label\": \"Phoenix Framework\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"phoenix-squadron\": {\n    \"changes\": [\"5.0.12\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f511\",\n    \"label\": \"Phoenix Squadron\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 63.38C142.49 27.25 201.55 7.31 260.51 8.81c29.58-.38 59.11 5.37 86.91 15.33-24.13-4.63-49-6.34-73.38-2.45C231.17 27 191 48.84 162.21 80.87c5.67-1 10.78-3.67 16-5.86 18.14-7.87 37.49-13.26 57.23-14.83 19.74-2.13 39.64-.43 59.28 1.92-14.42 2.79-29.12 4.57-43 9.59-34.43 11.07-65.27 33.16-86.3 62.63-13.8 19.71-23.63 42.86-24.67 67.13-.35 16.49 5.22 34.81 19.83 44a53.27 53.27 0 0 0 37.52 6.74c15.45-2.46 30.07-8.64 43.6-16.33 11.52-6.82 22.67-14.55 32-24.25 3.79-3.22 2.53-8.45 2.62-12.79-2.12-.34-4.38-1.11-6.3.3a203 203 0 0 1-35.82 15.37c-20 6.17-42.16 8.46-62.1.78 12.79 1.73 26.06.31 37.74-5.44 20.23-9.72 36.81-25.2 54.44-38.77a526.57 526.57 0 0 1 88.9-55.31c25.71-12 52.94-22.78 81.57-24.12-15.63 13.72-32.15 26.52-46.78 41.38-14.51 14-27.46 29.5-40.11 45.18-3.52 4.6-8.95 6.94-13.58 10.16a150.7 150.7 0 0 0-51.89 60.1c-9.33 19.68-14.5 41.85-11.77 63.65 1.94 13.69 8.71 27.59 20.9 34.91 12.9 8 29.05 8.07 43.48 5.1 32.8-7.45 61.43-28.89 81-55.84 20.44-27.52 30.52-62.2 29.16-96.35-.52-7.5-1.57-15-1.66-22.49 8 19.48 14.82 39.71 16.65 60.83 2 14.28.75 28.76-1.62 42.9-1.91 11-5.67 21.51-7.78 32.43a165 165 0 0 0 39.34-81.07 183.64 183.64 0 0 0-14.21-104.64c20.78 32 32.34 69.58 35.71 107.48.49 12.73.49 25.51 0 38.23A243.21 243.21 0 0 1 482 371.34c-26.12 47.34-68 85.63-117.19 108-78.29 36.23-174.68 31.32-248-14.68A248.34 248.34 0 0 1 25.36 366 238.34 238.34 0 0 1 0 273.08v-31.34C3.93 172 40.87 105.82 96 63.38m222 80.33a79.13 79.13 0 0 0 16-4.48c5-1.77 9.24-5.94 10.32-11.22-8.96 4.99-17.98 9.92-26.32 15.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"phone\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4de\", \"1f57b\"],\n        \"secondary\": [\"10f095\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Left Hand Telephone Receiver\",\n        \"call\",\n        \"earphone\",\n        \"number\",\n        \"phone\",\n        \"receiver\",\n        \"support\",\n        \"telephone\",\n        \"telephone receiver\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f095\",\n    \"label\": \"Phone\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"phone-flip\": {\n    \"aliases\": {\n      \"names\": [\"phone-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f57d\"],\n        \"secondary\": [\"10f879\"]\n      }\n    },\n    \"changes\": [\n      \"5.9.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Right Hand Telephone Receiver\",\n        \"call\",\n        \"earphone\",\n        \"number\",\n        \"support\",\n        \"telephone\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f879\",\n    \"label\": \"Phone Flip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767391,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M347.1 24.6c7.7-18.6 28-28.5 47.4-23.2l88 24C499.9 30.2 512 46 512 64c0 247.4-200.6 448-448 448c-18 0-33.8-12.1-38.6-29.5l-24-88c-5.3-19.4 4.6-39.7 23.2-47.4l96-40c16.3-6.8 35.2-2.1 46.3 11.6L207.3 368c70.4-33.3 127.4-90.3 160.7-160.7L318.7 167c-13.7-11.2-18.4-30-11.6-46.3l40-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M347.1 24.6c7.7-18.6 28-28.5 47.4-23.2l88 24C499.9 30.2 512 46 512 64c0 247.4-200.6 448-448 448c-18 0-33.8-12.1-38.6-29.5l-24-88c-5.3-19.4 4.6-39.7 23.2-47.4l96-40c16.3-6.8 35.2-2.1 46.3 11.6L207.3 368c70.4-33.3 127.4-90.3 160.7-160.7L318.7 167c-13.7-11.2-18.4-30-11.6-46.3l40-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"phone-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f3dd\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"call\",\n        \"cancel\",\n        \"earphone\",\n        \"mute\",\n        \"number\",\n        \"support\",\n        \"telephone\",\n        \"voice\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3dd\",\n    \"label\": \"Phone Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M228.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C76.1 30.2 64 46 64 64c0 107.4 37.8 206 100.8 283.1L9.2 469.1c-10.4 8.2-12.3 23.3-4.1 33.7s23.3 12.3 33.7 4.1l592-464c10.4-8.2 12.3-23.3 4.1-33.7s-23.3-12.3-33.7-4.1L253 278c-17.8-21.5-32.9-45.2-45-70.7L257.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96zm96.8 319l-91.3 72C310.7 476 407.1 512 512 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L368.7 368c-15-7.1-29.3-15.2-43-24.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M228.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C76.1 30.2 64 46 64 64c0 107.4 37.8 206 100.8 283.1L9.2 469.1c-10.4 8.2-12.3 23.3-4.1 33.7s23.3 12.3 33.7 4.1l592-464c10.4-8.2 12.3-23.3 4.1-33.7s-23.3-12.3-33.7-4.1L253 278c-17.8-21.5-32.9-45.2-45-70.7L257.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96zm96.8 319l-91.3 72C310.7 476 407.1 512 512 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L368.7 368c-15-7.1-29.3-15.2-43-24.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"phone-volume\": {\n    \"aliases\": {\n      \"names\": [\"volume-control-phone\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2a0\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"call\",\n        \"earphone\",\n        \"number\",\n        \"sound\",\n        \"support\",\n        \"telephone\",\n        \"voice\",\n        \"volume-control-phone\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2a0\",\n    \"label\": \"Phone Volume\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M280 0C408.1 0 512 103.9 512 232c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32-72c0-13.3 10.7-24 24-24c75.1 0 136 60.9 136 136c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88c-13.3 0-24-10.7-24-24zM117.5 1.4c19.4-5.3 39.7 4.6 47.4 23.2l40 96c6.8 16.3 2.1 35.2-11.6 46.3L144 207.3c33.3 70.4 90.3 127.4 160.7 160.7L345 318.7c11.2-13.7 30-18.4 46.3-11.6l96 40c18.6 7.7 28.5 28 23.2 47.4l-24 88C481.8 499.9 466 512 448 512C200.6 512 0 311.4 0 64C0 46 12.1 30.2 29.5 25.4l88-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M280 0C408.1 0 512 103.9 512 232c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-101.6-82.4-184-184-184c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 192a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm-32-72c0-13.3 10.7-24 24-24c75.1 0 136 60.9 136 136c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-48.6-39.4-88-88-88c-13.3 0-24-10.7-24-24zM117.5 1.4c19.4-5.3 39.7 4.6 47.4 23.2l40 96c6.8 16.3 2.1 35.2-11.6 46.3L144 207.3c33.3 70.4 90.3 127.4 160.7 160.7L345 318.7c11.2-13.7 30-18.4 46.3-11.6l96 40c18.6 7.7 28.5 28 23.2 47.4l-24 88C481.8 499.9 466 512 448 512C200.6 512 0 311.4 0 64C0 46 12.1 30.2 29.5 25.4l88-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"photo-film\": {\n    \"aliases\": {\n      \"names\": [\"photo-video\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f87c\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"av\", \"film\", \"image\", \"library\", \"media\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f87c\",\n    \"label\": \"Photo Film\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 0H576c35.3 0 64 28.7 64 64V288c0 35.3-28.7 64-64 64H256c-35.3 0-64-28.7-64-64V64c0-35.3 28.7-64 64-64zM476 106.7C471.5 100 464 96 456 96s-15.5 4-20 10.7l-56 84L362.7 169c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6h80 48H552c8.9 0 17-4.9 21.2-12.7s3.7-17.3-1.2-24.6l-96-144zM336 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM64 128h96V384v32c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V384H512v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64zm8 64c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H72zm0 104c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V312c0-8.8-7.2-16-16-16H72zm0 104c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V416c0-8.8-7.2-16-16-16H72zm336 16v16c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V416c0-8.8-7.2-16-16-16H424c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 0H576c35.3 0 64 28.7 64 64V288c0 35.3-28.7 64-64 64H256c-35.3 0-64-28.7-64-64V64c0-35.3 28.7-64 64-64zM476 106.7C471.5 100 464 96 456 96s-15.5 4-20 10.7l-56 84L362.7 169c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6h80 48H552c8.9 0 17-4.9 21.2-12.7s3.7-17.3-1.2-24.6l-96-144zM336 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM64 128h96V384v32c0 17.7 14.3 32 32 32H320c17.7 0 32-14.3 32-32V384H512v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64zm8 64c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H72zm0 104c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V312c0-8.8-7.2-16-16-16H72zm0 104c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16H88c8.8 0 16-7.2 16-16V416c0-8.8-7.2-16-16-16H72zm336 16v16c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16V416c0-8.8-7.2-16-16-16H424c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"php\": {\n    \"changes\": [\"5.0.5\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f457\",\n    \"label\": \"PHP\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 96.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pied-piper\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"5.0.10\", \"5.12.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2ae\",\n    \"label\": \"Pied Piper Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 480 512\\\"><path d=\\\"M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 480, 512],\n        \"width\": 480,\n        \"height\": 512,\n        \"path\": \"M455.93,23.2C429.23,30,387.79,51.69,341.35,90.66A206,206,0,0,0,240,64C125.13,64,32,157.12,32,272s93.13,208,208,208,208-93.13,208-208a207.25,207.25,0,0,0-58.75-144.81,155.35,155.35,0,0,0-17,27.4A176.16,176.16,0,0,1,417.1,272c0,97.66-79.44,177.11-177.09,177.11a175.81,175.81,0,0,1-87.63-23.4c82.94-107.33,150.79-37.77,184.31-226.65,5.79-32.62,28-94.26,126.23-160.18C471,33.45,465.35,20.8,455.93,23.2ZM125,406.4A176.66,176.66,0,0,1,62.9,272C62.9,174.34,142.35,94.9,240,94.9a174,174,0,0,1,76.63,17.75C250.64,174.76,189.77,265.52,125,406.4Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pied-piper-alt\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a8\",\n    \"label\": \"Alternate Pied Piper Logo (Old)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9zm135.9 197.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM340.8 177c6.6 2.8 11.5 9.2 22.7 22.1 2-1.4 7.5-5.2 7.5-8.6 0-4.9-11.8-13.2-13.2-23 11.2-5.7 25.2-6 37.6-8.9 68.1-16.4 116.3-52.9 146.8-116.7C548.3 29.3 554 16.1 554.6 2l-2 2.6c-28.4 50-33 63.2-81.3 100-31.9 24.4-69.2 40.2-106.6 54.6l-6.3-.3v-21.8c-19.6 1.6-19.7-14.6-31.6-23-18.7 20.6-31.6 40.8-58.9 51.1-12.7 4.8-19.6 10-25.9 21.8 34.9-16.4 91.2-13.5 98.8-10zM555.5 0l-.6 1.1-.3.9.6-.6zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46.1v27.2l11.8-3.4-2.9-23.8zm-68.7-150.4l24.1 61.2 21-13.8-31.3-50.9zm84.4 154.9l2 12.4c9-1.5 58.4-6.6 58.4-14.1 0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pied-piper-hat\": {\n    \"changes\": [\"5.0.10\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clothing\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4e5\",\n    \"label\": \"Pied Piper Hat (Old)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pied-piper-pp\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a7\",\n    \"label\": \"Pied Piper PP Logo (Old)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"piggy-bank\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4d3\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bank\", \"save\", \"savings\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4d3\",\n    \"label\": \"Piggy Bank\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M400 96l0 .7c-5.3-.4-10.6-.7-16-.7H256c-16.5 0-32.5 2.1-47.8 6c-.1-2-.2-4-.2-6c0-53 43-96 96-96s96 43 96 96zm-16 32c3.5 0 7 .1 10.4 .3c4.2 .3 8.4 .7 12.6 1.3C424.6 109.1 450.8 96 480 96h11.5c10.4 0 18 9.8 15.5 19.9l-13.8 55.2c15.8 14.8 28.7 32.8 37.5 52.9H544c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H512c-9.1 12.1-19.9 22.9-32 32v64c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32V448H256v32c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V416c-34.9-26.2-58.7-66.3-63.2-112H68c-37.6 0-68-30.4-68-68s30.4-68 68-68h4c13.3 0 24 10.7 24 24s-10.7 24-24 24H68c-11 0-20 9-20 20s9 20 20 20H99.2c12.1-59.8 57.7-107.5 116.3-122.8c12.9-3.4 26.5-5.2 40.5-5.2H384zm64 136a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M400 96l0 .7c-5.3-.4-10.6-.7-16-.7H256c-16.5 0-32.5 2.1-47.8 6c-.1-2-.2-4-.2-6c0-53 43-96 96-96s96 43 96 96zm-16 32c3.5 0 7 .1 10.4 .3c4.2 .3 8.4 .7 12.6 1.3C424.6 109.1 450.8 96 480 96h11.5c10.4 0 18 9.8 15.5 19.9l-13.8 55.2c15.8 14.8 28.7 32.8 37.5 52.9H544c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H512c-9.1 12.1-19.9 22.9-32 32v64c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32V448H256v32c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V416c-34.9-26.2-58.7-66.3-63.2-112H68c-37.6 0-68-30.4-68-68s30.4-68 68-68h4c13.3 0 24 10.7 24 24s-10.7 24-24 24H68c-11 0-20 9-20 20s9 20 20 20H99.2c12.1-59.8 57.7-107.5 116.3-122.8c12.9-3.4 26.5-5.2 40.5-5.2H384zm64 136a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pills\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f484\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drugs\", \"medicine\", \"prescription\", \"tablets\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f484\",\n    \"label\": \"Pills\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 96c-26.5 0-48 21.5-48 48V256h96V144c0-26.5-21.5-48-48-48zM0 144C0 82.1 50.1 32 112 32s112 50.1 112 112V368c0 61.9-50.1 112-112 112S0 429.9 0 368V144zM554.9 399.4c-7.1 12.3-23.7 13.1-33.8 3.1L333.5 214.9c-10-10-9.3-26.7 3.1-33.8C360 167.7 387.1 160 416 160c88.4 0 160 71.6 160 160c0 28.9-7.7 56-21.1 79.4zm-59.5 59.5C472 472.3 444.9 480 416 480c-88.4 0-160-71.6-160-160c0-28.9 7.7-56 21.1-79.4c7.1-12.3 23.7-13.1 33.8-3.1L498.5 425.1c10 10 9.3 26.7-3.1 33.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 96c-26.5 0-48 21.5-48 48V256h96V144c0-26.5-21.5-48-48-48zM0 144C0 82.1 50.1 32 112 32s112 50.1 112 112V368c0 61.9-50.1 112-112 112S0 429.9 0 368V144zM554.9 399.4c-7.1 12.3-23.7 13.1-33.8 3.1L333.5 214.9c-10-10-9.3-26.7 3.1-33.8C360 167.7 387.1 160 416 160c88.4 0 160 71.6 160 160c0 28.9-7.7 56-21.1 79.4zm-59.5 59.5C472 472.3 444.9 480 416 480c-88.4 0-160-71.6-160-160c0-28.9 7.7-56 21.1-79.4c7.1-12.3 23.7-13.1 33.8-3.1L498.5 425.1c10 10 9.3 26.7-3.1 33.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pinterest\": {\n    \"changes\": [\"2.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f0d2\",\n    \"label\": \"Pinterest\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pinterest-p\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f231\",\n    \"label\": \"Pinterest P\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pix\": {\n    \"changes\": [\"6.0.0-beta2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e43a\",\n    \"label\": \"Pix\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014458,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M242.4 292.5C247.8 287.1 257.1 287.1 262.5 292.5L339.5 369.5C353.7 383.7 372.6 391.5 392.6 391.5H407.7L310.6 488.6C280.3 518.1 231.1 518.1 200.8 488.6L103.3 391.2H112.6C132.6 391.2 151.5 383.4 165.7 369.2L242.4 292.5zM262.5 218.9C256.1 224.4 247.9 224.5 242.4 218.9L165.7 142.2C151.5 127.1 132.6 120.2 112.6 120.2H103.3L200.7 22.76C231.1-7.586 280.3-7.586 310.6 22.76L407.8 119.9H392.6C372.6 119.9 353.7 127.7 339.5 141.9L262.5 218.9zM112.6 142.7C126.4 142.7 139.1 148.3 149.7 158.1L226.4 234.8C233.6 241.1 243 245.6 252.5 245.6C261.9 245.6 271.3 241.1 278.5 234.8L355.5 157.8C365.3 148.1 378.8 142.5 392.6 142.5H430.3L488.6 200.8C518.9 231.1 518.9 280.3 488.6 310.6L430.3 368.9H392.6C378.8 368.9 365.3 363.3 355.5 353.5L278.5 276.5C264.6 262.6 240.3 262.6 226.4 276.6L149.7 353.2C139.1 363 126.4 368.6 112.6 368.6H80.78L22.76 310.6C-7.586 280.3-7.586 231.1 22.76 200.8L80.78 142.7H112.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pizza-slice\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f818\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cheese\",\n        \"chicago\",\n        \"italian\",\n        \"mozzarella\",\n        \"new york\",\n        \"pepperoni\",\n        \"pie\",\n        \"slice\",\n        \"teenage mutant ninja turtles\",\n        \"tomato\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f818\",\n    \"label\": \"Pizza Slice\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M169.7 .9c-22.8-1.6-41.9 14-47.5 34.7L110.4 80c.5 0 1.1 0 1.6 0c176.7 0 320 143.3 320 320c0 .5 0 1.1 0 1.6l44.4-11.8c20.8-5.5 36.3-24.7 34.7-47.5C498.5 159.5 352.5 13.5 169.7 .9zM399.8 410.2c.1-3.4 .2-6.8 .2-10.2c0-159.1-128.9-288-288-288c-3.4 0-6.8 .1-10.2 .2L.5 491.9c-1.5 5.5 .1 11.4 4.1 15.4s9.9 5.6 15.4 4.1L399.8 410.2zM176 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M169.7 .9c-22.8-1.6-41.9 14-47.5 34.7L110.4 80c.5 0 1.1 0 1.6 0c176.7 0 320 143.3 320 320c0 .5 0 1.1 0 1.6l44.4-11.8c20.8-5.5 36.3-24.7 34.7-47.5C498.5 159.5 352.5 13.5 169.7 .9zM399.8 410.2c.1-3.4 .2-6.8 .2-10.2c0-159.1-128.9-288-288-288c-3.4 0-6.8 .1-10.2 .2L.5 491.9c-1.5 5.5 .1 11.4 4.1 15.4s9.9 5.6 15.4 4.1L399.8 410.2zM176 208a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 128a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM96 384a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"place-of-worship\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f67f\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"church\", \"holy\", \"mosque\", \"synagogue\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f67f\",\n    \"label\": \"Place Of Worship\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 109.3V217.6L183.3 242c-14.5 8.7-23.3 24.3-23.3 41.2V512h96V416c0-35.3 28.7-64 64-64s64 28.7 64 64v96h96V283.2c0-16.9-8.8-32.5-23.3-41.2L416 217.6V109.3c0-8.5-3.4-16.6-9.4-22.6L331.3 11.3c-6.2-6.2-16.4-6.2-22.6 0L233.4 86.6c-6 6-9.4 14.1-9.4 22.6zM24.9 330.3C9.5 338.8 0 354.9 0 372.4V464c0 26.5 21.5 48 48 48h80V273.6L24.9 330.3zM592 512c26.5 0 48-21.5 48-48V372.4c0-17.5-9.5-33.6-24.9-42.1L512 273.6V512h80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 109.3V217.6L183.3 242c-14.5 8.7-23.3 24.3-23.3 41.2V512h96V416c0-35.3 28.7-64 64-64s64 28.7 64 64v96h96V283.2c0-16.9-8.8-32.5-23.3-41.2L416 217.6V109.3c0-8.5-3.4-16.6-9.4-22.6L331.3 11.3c-6.2-6.2-16.4-6.2-22.6 0L233.4 86.6c-6 6-9.4 14.1-9.4 22.6zM24.9 330.3C9.5 338.8 0 354.9 0 372.4V464c0 26.5 21.5 48 48 48h80V273.6L24.9 330.3zM592 512c26.5 0 48-21.5 48-48V372.4c0-17.5-9.5-33.6-24.9-42.1L512 273.6V512h80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f072\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airplane\",\n        \"airport\",\n        \"destination\",\n        \"fly\",\n        \"location\",\n        \"mode\",\n        \"travel\",\n        \"trip\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f072\",\n    \"label\": \"Plane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L112 320 68.8 377.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L32 256 .5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-7.8 6.3-14 14-14l42 0c5 0 9.8 2.4 12.8 6.4L112 192l102.9 0-49-171.6C162.9 10.2 170.6 0 181.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L365.7 192l116.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6L112 320 68.8 377.6c-3 4-7.8 6.4-12.8 6.4l-42 0c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L32 256 .5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-7.8 6.3-14 14-14l42 0c5 0 9.8 2.4 12.8 6.4L112 192l102.9 0-49-171.6C162.9 10.2 170.6 0 181.2 0l56.2 0c11.5 0 22.1 6.2 27.8 16.1L365.7 192l116.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-arrival\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6ec\"],\n        \"secondary\": [\"10f5af\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"aeroplane\",\n        \"airplane\",\n        \"airplane arrival\",\n        \"airport\",\n        \"arrivals\",\n        \"arriving\",\n        \"destination\",\n        \"fly\",\n        \"land\",\n        \"landing\",\n        \"location\",\n        \"mode\",\n        \"travel\",\n        \"trip\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5af\",\n    \"label\": \"Plane Arrival\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M.3 166.9L0 68C0 57.7 9.5 50.1 19.5 52.3l35.6 7.9c10.6 2.3 19.2 9.9 23 20L96 128l127.3 37.6L181.8 20.4C178.9 10.2 186.6 0 197.2 0h40.1c11.6 0 22.2 6.2 27.9 16.3l109 193.8 107.2 31.7c15.9 4.7 30.8 12.5 43.7 22.8l34.4 27.6c24 19.2 18.1 57.3-10.7 68.2c-41.2 15.6-86.2 18.1-128.8 7L121.7 289.8c-11.1-2.9-21.2-8.7-29.3-16.9L9.5 189.4c-5.9-6-9.3-14-9.3-22.5zM32 448H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128-16a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M.3 166.9L0 68C0 57.7 9.5 50.1 19.5 52.3l35.6 7.9c10.6 2.3 19.2 9.9 23 20L96 128l127.3 37.6L181.8 20.4C178.9 10.2 186.6 0 197.2 0h40.1c11.6 0 22.2 6.2 27.9 16.3l109 193.8 107.2 31.7c15.9 4.7 30.8 12.5 43.7 22.8l34.4 27.6c24 19.2 18.1 57.3-10.7 68.2c-41.2 15.6-86.2 18.1-128.8 7L121.7 289.8c-11.1-2.9-21.2-8.7-29.3-16.9L9.5 189.4c-5.9-6-9.3-14-9.3-22.5zM32 448H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm96-80a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm128-16a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airplane\",\n        \"airport\",\n        \"flight\",\n        \"fly\",\n        \"not affected\",\n        \"ok\",\n        \"okay\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e555\",\n    \"label\": \"Plane Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 0c-35 0-64 59.5-64 93.7v84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9v65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8v42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3V93.7C320 59.5 292 0 256 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 0c-35 0-64 59.5-64 93.7v84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9v65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8v42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3V93.7C320 59.5 292 0 256 0zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"airplane\", \"airport\", \"flight\", \"fly\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e556\",\n    \"label\": \"Plane Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 0c-35 0-64 59.5-64 93.7v84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9v65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8v42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3V93.7C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 0c-35 0-64 59.5-64 93.7v84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9v65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8v42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3V93.7C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"airplane\", \"airport\", \"destroy\", \"flight\", \"fly\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e557\",\n    \"label\": \"Plane Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M256 0c-35 0-64 59.5-64 93.7v84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9v65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8v42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3V93.7C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M256 0c-35 0-64 59.5-64 93.7v84.6L8.1 283.4c-5 2.8-8.1 8.2-8.1 13.9v65.5c0 10.6 10.2 18.3 20.4 15.4l171.6-49 0 70.9-57.6 43.2c-4 3-6.4 7.8-6.4 12.8v42c0 7.8 6.3 14 14 14c1.3 0 2.6-.2 3.9-.5L256 480l110.1 31.5c1.3 .4 2.6 .5 3.9 .5c6 0 11.1-3.7 13.1-9C344.5 470.7 320 422.2 320 368c0-60.6 30.6-114 77.1-145.6L320 178.3V93.7C320 59.5 292 0 256 0zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L518.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-departure\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6eb\"],\n        \"secondary\": [\"10f5b0\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.8.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"aeroplane\",\n        \"airplane\",\n        \"airplane departure\",\n        \"airport\",\n        \"check-in\",\n        \"departing\",\n        \"departure\",\n        \"departures\",\n        \"destination\",\n        \"fly\",\n        \"location\",\n        \"mode\",\n        \"take off\",\n        \"taking off\",\n        \"travel\",\n        \"trip\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5b0\",\n    \"label\": \"Plane Departure\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M381 114.9L186.1 41.8c-16.7-6.2-35.2-5.3-51.1 2.7L89.1 67.4C78 73 77.2 88.5 87.6 95.2l146.9 94.5L136 240 77.8 214.1c-8.7-3.9-18.8-3.7-27.3 .6L18.3 230.8c-9.3 4.7-11.8 16.8-5 24.7l73.1 85.3c6.1 7.1 15 11.2 24.3 11.2H248.4c5 0 9.9-1.2 14.3-3.4L535.6 212.2c46.5-23.3 82.5-63.3 100.8-112C645.9 75 627.2 48 600.2 48H542.8c-20.2 0-40.2 4.8-58.2 14L381 114.9zM0 480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M381 114.9L186.1 41.8c-16.7-6.2-35.2-5.3-51.1 2.7L89.1 67.4C78 73 77.2 88.5 87.6 95.2l146.9 94.5L136 240 77.8 214.1c-8.7-3.9-18.8-3.7-27.3 .6L18.3 230.8c-9.3 4.7-11.8 16.8-5 24.7l73.1 85.3c6.1 7.1 15 11.2 24.3 11.2H248.4c5 0 9.9-1.2 14.3-3.4L535.6 212.2c46.5-23.3 82.5-63.3 100.8-112C645.9 75 627.2 48 600.2 48H542.8c-20.2 0-40.2 4.8-58.2 14L381 114.9zM0 480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airplane\",\n        \"airport\",\n        \"closed\",\n        \"flight\",\n        \"fly\",\n        \"lockdown\",\n        \"quarantine\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e558\",\n    \"label\": \"Plane Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7v84.6l101.8 58.2C418 247.6 416 259.6 416 272v24.6c-17.9 10.4-30.3 29.1-31.8 50.9L320 329.1V400l57.6 43.2c4 3 6.4 7.8 6.4 12.8v24 18c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14V456c0-5 2.4-9.8 6.4-12.8L192 400l0-70.9-171.6 49C10.2 381.1 0 373.4 0 362.8V297.3c0-5.7 3.1-11 8.1-13.9L192 178.3V93.7zM528 240c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7v84.6l101.8 58.2C418 247.6 416 259.6 416 272v24.6c-17.9 10.4-30.3 29.1-31.8 50.9L320 329.1V400l57.6 43.2c4 3 6.4 7.8 6.4 12.8v24 18c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14V456c0-5 2.4-9.8 6.4-12.8L192 400l0-70.9-171.6 49C10.2 381.1 0 373.4 0 362.8V297.3c0-5.7 3.1-11 8.1-13.9L192 178.3V93.7zM528 240c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e069\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airplane mode\",\n        \"airport\",\n        \"canceled\",\n        \"covid-19\",\n        \"delayed\",\n        \"grounded\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e069\",\n    \"label\": \"Plane Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M514.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64H440.6L630.8 469.1c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L238.1 161.3 197.8 20.4C194.9 10.2 202.6 0 213.2 0h56.2c11.5 0 22.1 6.2 27.8 16.1L397.7 192l116.6 0zM41.5 128.7l321 252.9L297.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6H144l-43.2 57.6c-3 4-7.8 6.4-12.8 6.4H46c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L64 256 32.5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-6.2 4-11.4 9.5-13.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M514.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64H440.6L630.8 469.1c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2S28.4-3.1 38.8 5.1L238.1 161.3 197.8 20.4C194.9 10.2 202.6 0 213.2 0h56.2c11.5 0 22.1 6.2 27.8 16.1L397.7 192l116.6 0zM41.5 128.7l321 252.9L297.2 495.9c-5.7 10-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.2-15.4-20.4l49-171.6H144l-43.2 57.6c-3 4-7.8 6.4-12.8 6.4H46c-7.8 0-14-6.3-14-14c0-1.3 .2-2.6 .5-3.9L64 256 32.5 145.9c-.4-1.3-.5-2.6-.5-3.9c0-6.2 4-11.4 9.5-13.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plane-up\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airplane\",\n        \"airport\",\n        \"internet\",\n        \"signal\",\n        \"sky\",\n        \"wifi\",\n        \"wireless\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e22d\",\n    \"label\": \"Plane Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 66.3L497.8 278.5c8.9 5.9 14.2 15.9 14.2 26.6v56.7c0 10.9-10.7 18.6-21.1 15.2L320 320v80l57.6 43.2c4 3 6.4 7.8 6.4 12.8v42c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14V456c0-5 2.4-9.8 6.4-12.8L192 400V320L21.1 377C10.7 380.4 0 372.7 0 361.8V305.1c0-10.7 5.3-20.7 14.2-26.6L192 160V93.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 93.7C192 59.5 221 0 256 0c36 0 64 59.5 64 93.7l0 66.3L497.8 278.5c8.9 5.9 14.2 15.9 14.2 26.6v56.7c0 10.9-10.7 18.6-21.1 15.2L320 320v80l57.6 43.2c4 3 6.4 7.8 6.4 12.8v42c0 7.8-6.3 14-14 14c-1.3 0-2.6-.2-3.9-.5L256 480 145.9 511.5c-1.3 .4-2.6 .5-3.9 .5c-7.8 0-14-6.3-14-14V456c0-5 2.4-9.8 6.4-12.8L192 400V320L21.1 377C10.7 380.4 0 372.7 0 361.8V305.1c0-10.7 5.3-20.7 14.2-26.6L192 160V93.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plant-wilt\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drought\", \"planting\", \"vegetation\", \"wilt\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e5aa\",\n    \"label\": \"Plant Wilt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 120c0-30.9 25.1-56 56-56s56 25.1 56 56v13c-29.3 10-48 34.5-48 70.1c0 27.9 25.3 74.8 66 111.6c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1V120C464 53.7 410.3 0 344 0S224 53.7 224 120v21.8C207.3 133 188.2 128 168 128c-66.3 0-120 53.7-120 120v13c-29.3 10-48 34.5-48 70.1C0 359 25.3 405.9 66 442.7c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1V248c0-30.9 25.1-56 56-56s56 25.1 56 56v32V480c0 17.7 14.3 32 32 32s32-14.3 32-32V280 248 120z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 120c0-30.9 25.1-56 56-56s56 25.1 56 56v13c-29.3 10-48 34.5-48 70.1c0 27.9 25.3 74.8 66 111.6c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1V120C464 53.7 410.3 0 344 0S224 53.7 224 120v21.8C207.3 133 188.2 128 168 128c-66.3 0-120 53.7-120 120v13c-29.3 10-48 34.5-48 70.1C0 359 25.3 405.9 66 442.7c3.8 3.5 8.9 5.3 14 5.3s10.2-1.8 14-5.3c40.7-36.8 66-83.7 66-111.6c0-35.6-18.7-60.2-48-70.1V248c0-30.9 25.1-56 56-56s56 25.1 56 56v32V480c0 17.7 14.3 32 32 32s32-14.3 32-32V280 248 120z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plate-wheat\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bowl\", \"hunger\", \"rations\", \"wheat\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e55a\",\n    \"label\": \"Plate Wheat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 32c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48c0-8.8 7.2-16 16-16zM56 64h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24s10.7-24 24-24zM24 136H136c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48zM400 32c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48c0-8.8 7.2-16 16-16zm80 160v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80zm-96 16v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320H484.2c14.8 0 26.2 12.9 24.4 27.6C502.3 397.8 464.2 437 416 446v2c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32v-2c-48.2-9-86.3-48.2-92.5-98.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 32c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48c0-8.8 7.2-16 16-16zM56 64h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24s10.7-24 24-24zM24 136H136c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48zM400 32c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48c0-8.8 7.2-16 16-16zm80 160v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80zm-96 16v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320H484.2c14.8 0 26.2 12.9 24.4 27.6C502.3 397.8 464.2 437 416 446v2c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32v-2c-48.2-9-86.3-48.2-92.5-98.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"play\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"25b6\"],\n        \"secondary\": [\"10f04b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"audio\",\n        \"music\",\n        \"play\",\n        \"play button\",\n        \"playing\",\n        \"right\",\n        \"sound\",\n        \"start\",\n        \"triangle\",\n        \"video\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f04b\",\n    \"label\": \"Play\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"playstation\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3df\",\n    \"label\": \"PlayStation\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"plug\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f50c\"],\n        \"secondary\": [\"10f1e6\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"connect\",\n        \"electric\",\n        \"electric plug\",\n        \"electricity\",\n        \"online\",\n        \"plug\",\n        \"power\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1e6\",\n    \"label\": \"Plug\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8C297 398 352 333.4 352 256V224c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8C297 398 352 333.4 352 256V224c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plug-circle-bolt\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"electric\", \"electricity\", \"plug\", \"power\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e55b\",\n    \"label\": \"Plug Circle Bolt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356H488c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380H376c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm47.9-225c4.3 3.7 5.4 9.9 2.6 14.9L452.4 356H488c5.2 0 9.8 3.3 11.4 8.2s-.1 10.3-4.2 13.4l-96 72c-4.5 3.4-10.8 3.2-15.1-.6s-5.4-9.9-2.6-14.9L411.6 380H376c-5.2 0-9.8-3.3-11.4-8.2s.1-10.3 4.2-13.4l96-72c4.5-3.4 10.8-3.2 15.1 .6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plug-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"electric\",\n        \"electricity\",\n        \"not affected\",\n        \"ok\",\n        \"okay\",\n        \"plug\",\n        \"power\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e55c\",\n    \"label\": \"Plug Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-76.7-43.3c6.2 6.2 6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L416 385.4l60.7-60.7c6.2-6.2 16.4-6.2 22.6 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plug-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"electric\", \"electricity\", \"plug\", \"power\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e55d\",\n    \"label\": \"Plug Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plug-circle-minus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"electric\", \"electricity\", \"plug\", \"power\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e55e\",\n    \"label\": \"Plug Circle Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16H496c8.8 0 16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM576 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-64 0c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s7.2-16 16-16H496c8.8 0 16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plug-circle-plus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"electric\", \"electricity\", \"plug\", \"power\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e55f\",\n    \"label\": \"Plug Circle Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208v48h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V384H368c-8.8 0-16-7.2-16-16s7.2-16 16-16h48V304c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm16-208v48h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V384H368c-8.8 0-16-7.2-16-16s7.2-16 16-16h48V304c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plug-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"destroy\", \"electric\", \"electricity\", \"outage\", \"plug\", \"power\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e560\",\n    \"label\": \"Plug Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 0C78.3 0 64 14.3 64 32v96h64V32c0-17.7-14.3-32-32-32zM288 0c-17.7 0-32 14.3-32 32v96h64V32c0-17.7-14.3-32-32-32zM32 160c-17.7 0-32 14.3-32 32s14.3 32 32 32v32c0 77.4 55 142 128 156.8V480c0 17.7 14.3 32 32 32s32-14.3 32-32V412.8c12.3-2.5 24.1-6.4 35.1-11.5c-2.1-10.8-3.1-21.9-3.1-33.3c0-80.3 53.8-148 127.3-169.2c.5-2.2 .7-4.5 .7-6.8c0-17.7-14.3-32-32-32H32zM432 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm59.3-180.7L454.6 368l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L432 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L409.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L432 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plus\": {\n    \"aliases\": {\n      \"names\": [\"add\"],\n      \"unicodes\": {\n        \"composite\": [\"2795\", \"f067\"],\n        \"primary\": [\"f067\"],\n        \"secondary\": [\"102b\", \"10f067\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"+\",\n        \"Plus Sign\",\n        \"add\",\n        \"create\",\n        \"expand\",\n        \"math\",\n        \"new\",\n        \"plus\",\n        \"positive\",\n        \"shape\",\n        \"sign\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"2b\",\n    \"label\": \"Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"plus-minus\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Plus-Minus Sign\", \"add\", \"math\", \"subtract\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e43c\",\n    \"label\": \"Plus Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V144H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H160V320c0 17.7 14.3 32 32 32s32-14.3 32-32V208H336c17.7 0 32-14.3 32-32s-14.3-32-32-32H224V32zM0 480c0 17.7 14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M224 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V144H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H160V320c0 17.7 14.3 32 32 32s32-14.3 32-32V208H336c17.7 0 32-14.3 32-32s-14.3-32-32-32H224V32zM0 480c0 17.7 14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"podcast\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f2ce\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"audio\", \"broadcast\", \"music\", \"sound\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2ce\",\n    \"label\": \"Podcast\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M319.4 372c48.5-31.3 80.6-85.9 80.6-148c0-97.2-78.8-176-176-176S48 126.8 48 224c0 62.1 32.1 116.6 80.6 148c1.2 17.3 4 38 7.2 57.1l.2 1C56 395.8 0 316.5 0 224C0 100.3 100.3 0 224 0S448 100.3 448 224c0 92.5-56 171.9-136 206.1l.2-1.1c3.1-19.2 6-39.8 7.2-57zm-2.3-38.1c-1.6-5.7-3.9-11.1-7-16.2c-5.8-9.7-13.5-17-21.9-22.4c19.5-17.6 31.8-43 31.8-71.3c0-53-43-96-96-96s-96 43-96 96c0 28.3 12.3 53.8 31.8 71.3c-8.4 5.4-16.1 12.7-21.9 22.4c-3.1 5.1-5.4 10.5-7 16.2C99.8 307.5 80 268 80 224c0-79.5 64.5-144 144-144s144 64.5 144 144c0 44-19.8 83.5-50.9 109.9zM224 312c32.9 0 64 8.6 64 43.8c0 33-12.9 104.1-20.6 132.9c-5.1 19-24.5 23.4-43.4 23.4s-38.2-4.4-43.4-23.4c-7.8-28.5-20.6-99.7-20.6-132.8c0-35.1 31.1-43.8 64-43.8zm0-144a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M319.4 372c48.5-31.3 80.6-85.9 80.6-148c0-97.2-78.8-176-176-176S48 126.8 48 224c0 62.1 32.1 116.6 80.6 148c1.2 17.3 4 38 7.2 57.1l.2 1C56 395.8 0 316.5 0 224C0 100.3 100.3 0 224 0S448 100.3 448 224c0 92.5-56 171.9-136 206.1l.2-1.1c3.1-19.2 6-39.8 7.2-57zm-2.3-38.1c-1.6-5.7-3.9-11.1-7-16.2c-5.8-9.7-13.5-17-21.9-22.4c19.5-17.6 31.8-43 31.8-71.3c0-53-43-96-96-96s-96 43-96 96c0 28.3 12.3 53.8 31.8 71.3c-8.4 5.4-16.1 12.7-21.9 22.4c-3.1 5.1-5.4 10.5-7 16.2C99.8 307.5 80 268 80 224c0-79.5 64.5-144 144-144s144 64.5 144 144c0 44-19.8 83.5-50.9 109.9zM224 312c32.9 0 64 8.6 64 43.8c0 33-12.9 104.1-20.6 132.9c-5.1 19-24.5 23.4-43.4 23.4s-38.2-4.4-43.4-23.4c-7.8-28.5-20.6-99.7-20.6-132.8c0-35.1 31.1-43.8 64-43.8zm0-144a56 56 0 1 1 0 112 56 56 0 1 1 0-112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"poo\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4a9\"],\n        \"secondary\": [\"10f2fe\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"crap\",\n        \"dung\",\n        \"face\",\n        \"monster\",\n        \"pile of poo\",\n        \"poo\",\n        \"poop\",\n        \"shit\",\n        \"smile\",\n        \"turd\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2fe\",\n    \"label\": \"Poo\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M268.9 .9c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.4c2.8 8.2 4.3 16.9 4.3 26.1c0 44.1-35.7 79.9-79.8 80H160c-35.3 0-64 28.7-64 64c0 19.1 8.4 36.3 21.7 48H104c-39.8 0-72 32.2-72 72c0 23.2 11 43.8 28 57c-34.1 5.7-60 35.3-60 71c0 39.8 32.2 72 72 72H440c39.8 0 72-32.2 72-72c0-35.7-25.9-65.3-60-71c17-13.2 28-33.8 28-57c0-39.8-32.2-72-72-72H394.3c13.3-11.7 21.7-28.9 21.7-48c0-35.3-28.7-64-64-64h-5.5c3.5-10 5.5-20.8 5.5-32c0-48.6-36.2-88.8-83.1-95.1zM192 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm64 108.3c0 2.4-.7 4.8-2.2 6.7c-8.2 10.5-39.5 45-93.8 45s-85.6-34.6-93.8-45c-1.5-1.9-2.2-4.3-2.2-6.7c0-6.8 5.5-12.3 12.3-12.3H339.7c6.8 0 12.3 5.5 12.3 12.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M268.9 .9c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.4c2.8 8.2 4.3 16.9 4.3 26.1c0 44.1-35.7 79.9-79.8 80H160c-35.3 0-64 28.7-64 64c0 19.1 8.4 36.3 21.7 48H104c-39.8 0-72 32.2-72 72c0 23.2 11 43.8 28 57c-34.1 5.7-60 35.3-60 71c0 39.8 32.2 72 72 72H440c39.8 0 72-32.2 72-72c0-35.7-25.9-65.3-60-71c17-13.2 28-33.8 28-57c0-39.8-32.2-72-72-72H394.3c13.3-11.7 21.7-28.9 21.7-48c0-35.3-28.7-64-64-64h-5.5c3.5-10 5.5-20.8 5.5-32c0-48.6-36.2-88.8-83.1-95.1zM192 256a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm96 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm64 108.3c0 2.4-.7 4.8-2.2 6.7c-8.2 10.5-39.5 45-93.8 45s-85.6-34.6-93.8-45c-1.5-1.9-2.2-4.3-2.2-6.7c0-6.8 5.5-12.3 12.3-12.3H339.7c6.8 0 12.3 5.5 12.3 12.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"poo-storm\": {\n    \"aliases\": {\n      \"names\": [\"poo-bolt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f75a\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bolt\",\n        \"cloud\",\n        \"euphemism\",\n        \"lightning\",\n        \"mess\",\n        \"poop\",\n        \"shit\",\n        \"turd\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f75a\",\n    \"label\": \"Poo Storm\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M236.9 .2c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.3c2.8 8.2 4.3 16.9 4.3 26.1c0 21.7-8.5 37.2-21.9 47.6c-13.8 10.8-34 17-57.8 17H128c-35.3 0-64 28.7-64 64c0 12.2 3.4 23.5 9.3 33.2C31.7 216.2 0 252.4 0 296c0 41 28 75.4 65.8 85.2c-5.3-18.5 1-38.5 16.2-50.7l160-128c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L285.7 320H304c20.4 0 38.5 12.9 45.3 32.1c3.7 10.6 3.5 21.8 0 31.9H360c48.6 0 88-39.4 88-88c0-43.6-31.7-79.8-73.3-86.8c5.9-9.7 9.3-21.1 9.3-33.2c0-35.3-28.7-64-64-64h-1.4c.9-5.4 1.4-10.9 1.4-16.6c0-48.7-36.1-88.9-83.1-95.2zm45.1 227.4c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7h70.1L129.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7H233.9l52.4-104.8c3.4-6.7 1.6-14.9-4.3-19.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M236.9 .2c-5.5-.7-11 1.4-14.5 5.7s-4.6 10.1-2.8 15.3c2.8 8.2 4.3 16.9 4.3 26.1c0 21.7-8.5 37.2-21.9 47.6c-13.8 10.8-34 17-57.8 17H128c-35.3 0-64 28.7-64 64c0 12.2 3.4 23.5 9.3 33.2C31.7 216.2 0 252.4 0 296c0 41 28 75.4 65.8 85.2c-5.3-18.5 1-38.5 16.2-50.7l160-128c17.6-14.1 42.6-14 60.2 .2s22.8 38.6 12.8 58.8L285.7 320H304c20.4 0 38.5 12.9 45.3 32.1c3.7 10.6 3.5 21.8 0 31.9H360c48.6 0 88-39.4 88-88c0-43.6-31.7-79.8-73.3-86.8c5.9-9.7 9.3-21.1 9.3-33.2c0-35.3-28.7-64-64-64h-1.4c.9-5.4 1.4-10.9 1.4-16.6c0-48.7-36.1-88.9-83.1-95.2zm45.1 227.4c-5.8-4.7-14.2-4.7-20.1-.1l-160 128c-5.3 4.2-7.4 11.4-5.1 17.8s8.3 10.7 15.1 10.7h70.1L129.7 488.8c-3.4 6.7-1.6 14.9 4.3 19.6s14.2 4.7 20.1 .1l160-128c5.3-4.2 7.4-11.4 5.1-17.8s-8.3-10.7-15.1-10.7H233.9l52.4-104.8c3.4-6.7 1.6-14.9-4.3-19.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"poop\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f619\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\", \"6.4.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"crap\", \"poop\", \"shit\", \"smile\", \"turd\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f619\",\n    \"label\": \"Poop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M254.4 6.6c3.5-4.3 9-6.5 14.5-5.7C315.8 7.2 352 47.4 352 96c0 11.2-1.9 22-5.5 32H352c35.3 0 64 28.7 64 64c0 19.1-8.4 36.3-21.7 48H408c39.8 0 72 32.2 72 72c0 23.2-11 43.8-28 57c34.1 5.7 60 35.3 60 71c0 39.8-32.2 72-72 72H72c-39.8 0-72-32.2-72-72c0-35.7 25.9-65.3 60-71c-17-13.2-28-33.8-28-57c0-39.8 32.2-72 72-72h13.7C104.4 228.3 96 211.1 96 192c0-35.3 28.7-64 64-64h16.2c44.1-.1 79.8-35.9 79.8-80c0-9.2-1.5-17.9-4.3-26.1c-1.8-5.2-.8-11.1 2.8-15.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M254.4 6.6c3.5-4.3 9-6.5 14.5-5.7C315.8 7.2 352 47.4 352 96c0 11.2-1.9 22-5.5 32H352c35.3 0 64 28.7 64 64c0 19.1-8.4 36.3-21.7 48H408c39.8 0 72 32.2 72 72c0 23.2-11 43.8-28 57c34.1 5.7 60 35.3 60 71c0 39.8-32.2 72-72 72H72c-39.8 0-72-32.2-72-72c0-35.7 25.9-65.3 60-71c-17-13.2-28-33.8-28-57c0-39.8 32.2-72 72-72h13.7C104.4 228.3 96 211.1 96 192c0-35.3 28.7-64 64-64h16.2c44.1-.1 79.8-35.9 79.8-80c0-9.2-1.5-17.9-4.3-26.1c-1.8-5.2-.8-11.1 2.8-15.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"power-off\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23fb\"],\n        \"secondary\": [\"10f011\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Power Symbol\", \"cancel\", \"computer\", \"on\", \"reboot\", \"restart\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f011\",\n    \"label\": \"Power Off\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V256c0 17.7 14.3 32 32 32s32-14.3 32-32V32zM143.5 120.6c13.6-11.3 15.4-31.5 4.1-45.1s-31.5-15.4-45.1-4.1C49.7 115.4 16 181.8 16 256c0 132.5 107.5 240 240 240s240-107.5 240-240c0-74.2-33.8-140.6-86.6-184.6c-13.6-11.3-33.8-9.4-45.1 4.1s-9.4 33.8 4.1 45.1c38.9 32.3 63.5 81 63.5 135.4c0 97.2-78.8 176-176 176s-176-78.8-176-176c0-54.4 24.7-103.1 63.5-135.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V256c0 17.7 14.3 32 32 32s32-14.3 32-32V32zM143.5 120.6c13.6-11.3 15.4-31.5 4.1-45.1s-31.5-15.4-45.1-4.1C49.7 115.4 16 181.8 16 256c0 132.5 107.5 240 240 240s240-107.5 240-240c0-74.2-33.8-140.6-86.6-184.6c-13.6-11.3-33.8-9.4-45.1 4.1s-9.4 33.8 4.1 45.1c38.9 32.3 63.5 81 63.5 135.4c0 97.2-78.8 176-176 176s-176-78.8-176-176c0-54.4 24.7-103.1 63.5-135.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"prescription\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5b1\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drugs\", \"medical\", \"medicine\", \"pharmacy\", \"rx\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5b1\",\n    \"label\": \"Prescription\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 0C14.3 0 0 14.3 0 32V192v96c0 17.7 14.3 32 32 32s32-14.3 32-32V224h50.7l128 128L137.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 397.3 393.4 502.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L333.3 352 438.6 246.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 306.7l-85.8-85.8C251.4 209.1 288 164.8 288 112C288 50.1 237.9 0 176 0H32zM176 160H64V64H176c26.5 0 48 21.5 48 48s-21.5 48-48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 0C14.3 0 0 14.3 0 32V192v96c0 17.7 14.3 32 32 32s32-14.3 32-32V224h50.7l128 128L137.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L288 397.3 393.4 502.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L333.3 352 438.6 246.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 306.7l-85.8-85.8C251.4 209.1 288 164.8 288 112C288 50.1 237.9 0 176 0H32zM176 160H64V64H176c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"prescription-bottle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f485\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drugs\", \"medical\", \"medicine\", \"pharmacy\", \"rx\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f485\",\n    \"label\": \"Prescription Bottle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0H352c17.7 0 32 14.3 32 32V64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64V32zm32 96H352V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V416H144c8.8 0 16-7.2 16-16s-7.2-16-16-16H32V320H144c8.8 0 16-7.2 16-16s-7.2-16-16-16H32V224H144c8.8 0 16-7.2 16-16s-7.2-16-16-16H32V128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0H352c17.7 0 32 14.3 32 32V64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64V32zm32 96H352V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V416H144c8.8 0 16-7.2 16-16s-7.2-16-16-16H32V320H144c8.8 0 16-7.2 16-16s-7.2-16-16-16H32V224H144c8.8 0 16-7.2 16-16s-7.2-16-16-16H32V128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"prescription-bottle-medical\": {\n    \"aliases\": {\n      \"names\": [\"prescription-bottle-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f486\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drugs\", \"medical\", \"medicine\", \"pharmacy\", \"rx\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f486\",\n    \"label\": \"Prescription Bottle Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0H352c17.7 0 32 14.3 32 32V64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64V32zm32 96H352V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zM160 240v48H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V352h48c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H224V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0H352c17.7 0 32 14.3 32 32V64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64V32zm32 96H352V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zM160 240v48H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V352h48c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16H224V240c0-8.8-7.2-16-16-16H176c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"print\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5a8\", \"1f5b6\", \"2399\"],\n        \"secondary\": [\"10f02f\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Print Screen Symbol\",\n        \"Printer Icon\",\n        \"business\",\n        \"computer\",\n        \"copy\",\n        \"document\",\n        \"office\",\n        \"paper\",\n        \"printer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f02f\",\n    \"label\": \"Print\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zM432 248a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zM432 248a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"product-hunt\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f288\",\n    \"label\": \"Product Hunt\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"pump-medical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e06a\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"anti-bacterial\",\n        \"clean\",\n        \"covid-19\",\n        \"disinfect\",\n        \"hygiene\",\n        \"medical grade\",\n        \"sanitizer\",\n        \"soap\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e06a\",\n    \"label\": \"Pump Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 32v96H256V96h60.1c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4H256c0-17.7-14.3-32-32-32H160c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512H285.2c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7H117.4zM216 280v32h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H216v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V360H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V280c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 32v96H256V96h60.1c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4H256c0-17.7-14.3-32-32-32H160c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512H285.2c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7H117.4zM216 280v32h32c13.3 0 24 10.7 24 24s-10.7 24-24 24H216v32c0 13.3-10.7 24-24 24s-24-10.7-24-24V360H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h32V280c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pump-soap\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e06b\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"anti-bacterial\",\n        \"clean\",\n        \"covid-19\",\n        \"disinfect\",\n        \"hygiene\",\n        \"sanitizer\",\n        \"soap\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e06b\",\n    \"label\": \"Pump Soap\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M128 32v96H256V96h60.1c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4H256c0-17.7-14.3-32-32-32H160c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512H285.2c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7H117.4zM256 360c0 35.3-28.7 56-64 56s-64-20.7-64-56c0-32.5 37-80.9 50.9-97.9c3.2-3.9 8.1-6.1 13.1-6.1s9.9 2.2 13.1 6.1C219 279.1 256 327.5 256 360z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M128 32v96H256V96h60.1c4.2 0 8.3 1.7 11.3 4.7l33.9 33.9c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L372.7 55.4c-15-15-35.4-23.4-56.6-23.4H256c0-17.7-14.3-32-32-32H160c-17.7 0-32 14.3-32 32zM117.4 160c-33.3 0-61 25.5-63.8 58.7L35 442.7C31.9 480 61.3 512 98.8 512H285.2c37.4 0 66.9-32 63.8-69.3l-18.7-224c-2.8-33.2-30.5-58.7-63.8-58.7H117.4zM256 360c0 35.3-28.7 56-64 56s-64-20.7-64-56c0-32.5 37-80.9 50.9-97.9c3.2-3.9 8.1-6.1 13.1-6.1s9.9 2.2 13.1 6.1C219 279.1 256 327.5 256 360z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"pushed\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e1\",\n    \"label\": \"Pushed\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 432 512\\\"><path d=\\\"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 432, 512],\n        \"width\": 432,\n        \"height\": 512,\n        \"path\": \"M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"puzzle-piece\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9e9\"],\n        \"secondary\": [\"10f12e\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"add-on\",\n        \"addon\",\n        \"clue\",\n        \"game\",\n        \"interlocking\",\n        \"jigsaw\",\n        \"piece\",\n        \"puzzle\",\n        \"puzzle piece\",\n        \"section\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f12e\",\n    \"label\": \"Puzzle Piece\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 104.8c0-9.2-5.8-17.3-13.2-22.8C167.2 73.3 160 61.3 160 48c0-26.5 28.7-48 64-48s64 21.5 64 48c0 13.3-7.2 25.3-18.8 34c-7.4 5.5-13.2 13.6-13.2 22.8v0c0 12.8 10.4 23.2 23.2 23.2H336c26.5 0 48 21.5 48 48v56.8c0 12.8 10.4 23.2 23.2 23.2v0c9.2 0 17.3-5.8 22.8-13.2c8.7-11.6 20.7-18.8 34-18.8c26.5 0 48 28.7 48 64s-21.5 64-48 64c-13.3 0-25.3-7.2-34-18.8c-5.5-7.4-13.6-13.2-22.8-13.2v0c-12.8 0-23.2 10.4-23.2 23.2V464c0 26.5-21.5 48-48 48H279.2c-12.8 0-23.2-10.4-23.2-23.2v0c0-9.2 5.8-17.3 13.2-22.8c11.6-8.7 18.8-20.7 18.8-34c0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34c7.4 5.5 13.2 13.6 13.2 22.8v0c0 12.8-10.4 23.2-23.2 23.2H48c-26.5 0-48-21.5-48-48V343.2C0 330.4 10.4 320 23.2 320v0c9.2 0 17.3 5.8 22.8 13.2C54.7 344.8 66.7 352 80 352c26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8C40.5 250.2 32.4 256 23.2 256v0C10.4 256 0 245.6 0 232.8V176c0-26.5 21.5-48 48-48H168.8c12.8 0 23.2-10.4 23.2-23.2v0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 104.8c0-9.2-5.8-17.3-13.2-22.8C167.2 73.3 160 61.3 160 48c0-26.5 28.7-48 64-48s64 21.5 64 48c0 13.3-7.2 25.3-18.8 34c-7.4 5.5-13.2 13.6-13.2 22.8v0c0 12.8 10.4 23.2 23.2 23.2H336c26.5 0 48 21.5 48 48v56.8c0 12.8 10.4 23.2 23.2 23.2v0c9.2 0 17.3-5.8 22.8-13.2c8.7-11.6 20.7-18.8 34-18.8c26.5 0 48 28.7 48 64s-21.5 64-48 64c-13.3 0-25.3-7.2-34-18.8c-5.5-7.4-13.6-13.2-22.8-13.2v0c-12.8 0-23.2 10.4-23.2 23.2V464c0 26.5-21.5 48-48 48H279.2c-12.8 0-23.2-10.4-23.2-23.2v0c0-9.2 5.8-17.3 13.2-22.8c11.6-8.7 18.8-20.7 18.8-34c0-26.5-28.7-48-64-48s-64 21.5-64 48c0 13.3 7.2 25.3 18.8 34c7.4 5.5 13.2 13.6 13.2 22.8v0c0 12.8-10.4 23.2-23.2 23.2H48c-26.5 0-48-21.5-48-48V343.2C0 330.4 10.4 320 23.2 320v0c9.2 0 17.3 5.8 22.8 13.2C54.7 344.8 66.7 352 80 352c26.5 0 48-28.7 48-64s-21.5-64-48-64c-13.3 0-25.3 7.2-34 18.8C40.5 250.2 32.4 256 23.2 256v0C10.4 256 0 245.6 0 232.8V176c0-26.5 21.5-48 48-48H168.8c12.8 0 23.2-10.4 23.2-23.2v0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"python\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e2\",\n    \"label\": \"Python\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3zM167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4zm-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"q\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"71\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter Q\", \"Latin Small Letter Q\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"51\",\n    \"label\": \"Q\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 256c0 88.4 71.6 160 160 160c28.9 0 56-7.7 79.4-21.1l-72-86.4c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l70.9 85.1C371.9 325.8 384 292.3 384 256c0-88.4-71.6-160-160-160S64 167.6 64 256zM344.9 444.6C310 467 268.5 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32s224 100.3 224 224c0 56.1-20.6 107.4-54.7 146.7l47.3 56.8c11.3 13.6 9.5 33.8-4.1 45.1s-33.8 9.5-45.1-4.1l-46.6-55.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 256c0 88.4 71.6 160 160 160c28.9 0 56-7.7 79.4-21.1l-72-86.4c-11.3-13.6-9.5-33.8 4.1-45.1s33.8-9.5 45.1 4.1l70.9 85.1C371.9 325.8 384 292.3 384 256c0-88.4-71.6-160-160-160S64 167.6 64 256zM344.9 444.6C310 467 268.5 480 224 480C100.3 480 0 379.7 0 256S100.3 32 224 32s224 100.3 224 224c0 56.1-20.6 107.4-54.7 146.7l47.3 56.8c11.3 13.6 9.5 33.8-4.1 45.1s-33.8 9.5-45.1-4.1l-46.6-55.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"qq\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d6\",\n    \"label\": \"QQ\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"qrcode\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f029\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"barcode\", \"info\", \"information\", \"scan\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f029\",\n    \"label\": \"Qrcode\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 80C0 53.5 21.5 32 48 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80zM64 96v64h64V96H64zM0 336c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V336zm64 16v64h64V352H64zM304 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H304c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48zm80 64H320v64h64V96zM256 304c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s7.2-16 16-16s16 7.2 16 16v96c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s-7.2-16-16-16s-16 7.2-16 16v64c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V304zM368 480a16 16 0 1 1 0-32 16 16 0 1 1 0 32zm64 0a16 16 0 1 1 0-32 16 16 0 1 1 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 80C0 53.5 21.5 32 48 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80zM64 96v64h64V96H64zM0 336c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V336zm64 16v64h64V352H64zM304 32h96c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H304c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48zm80 64H320v64h64V96zM256 304c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s7.2-16 16-16s16 7.2 16 16v96c0 8.8-7.2 16-16 16H368c-8.8 0-16-7.2-16-16s-7.2-16-16-16s-16 7.2-16 16v64c0 8.8-7.2 16-16 16H272c-8.8 0-16-7.2-16-16V304zM368 480a16 16 0 1 1 0-32 16 16 0 1 1 0 32zm64 0a16 16 0 1 1 0-32 16 16 0 1 1 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"question\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2753\", \"2754\", \"f128\"],\n        \"primary\": [\"f128\"],\n        \"secondary\": [\"103f\", \"10f128\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"?\",\n        \"Question Mark\",\n        \"help\",\n        \"information\",\n        \"mark\",\n        \"outlined\",\n        \"punctuation\",\n        \"question\",\n        \"red question mark\",\n        \"support\",\n        \"unknown\",\n        \"white question mark\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"3f\",\n    \"label\": \"Question\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M80 160c0-35.3 28.7-64 64-64h32c35.3 0 64 28.7 64 64v3.6c0 21.8-11.1 42.1-29.4 53.8l-42.2 27.1c-25.2 16.2-40.4 44.1-40.4 74V320c0 17.7 14.3 32 32 32s32-14.3 32-32v-1.4c0-8.2 4.2-15.8 11-20.2l42.2-27.1c36.6-23.6 58.8-64.1 58.8-107.7V160c0-70.7-57.3-128-128-128H144C73.3 32 16 89.3 16 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm80 320a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M80 160c0-35.3 28.7-64 64-64h32c35.3 0 64 28.7 64 64v3.6c0 21.8-11.1 42.1-29.4 53.8l-42.2 27.1c-25.2 16.2-40.4 44.1-40.4 74V320c0 17.7 14.3 32 32 32s32-14.3 32-32v-1.4c0-8.2 4.2-15.8 11-20.2l42.2-27.1c36.6-23.6 58.8-64.1 58.8-107.7V160c0-70.7-57.3-128-128-128H144C73.3 32 16 89.3 16 160c0 17.7 14.3 32 32 32s32-14.3 32-32zm80 320a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"quinscape\": {\n    \"changes\": [\"5.0.5\", \"5.7.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f459\",\n    \"label\": \"QuinScape\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M313.6 474.6h-1a158.1 158.1 0 0 1 0-316.2c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C501.1 117.5 391.6 8 256.5 8S12 117.5 12 252.6s109.5 244.6 244.5 244.6a237.36 237.36 0 0 0 70.4-10.1c-5.2-3.5-8.9-8.1-13.3-12.5zm-.1-.1l.4.1zm78.4-168.9a99.2 99.2 0 1 0 99.2 99.2 99.18 99.18 0 0 0-99.2-99.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"quora\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2c4\",\n    \"label\": \"Quora\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"quote-left\": {\n    \"aliases\": {\n      \"names\": [\"quote-left-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"201c\"],\n        \"secondary\": [\"10f10d\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Left Double Quotation Mark\",\n        \"mention\",\n        \"note\",\n        \"phrase\",\n        \"text\",\n        \"type\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f10d\",\n    \"label\": \"Quote Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 216C0 149.7 53.7 96 120 96h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320 288 216zm256 0c0-66.3 53.7-120 120-120h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H320c-35.3 0-64-28.7-64-64V320 288 216z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 216C0 149.7 53.7 96 120 96h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320 288 216zm256 0c0-66.3 53.7-120 120-120h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H320c-35.3 0-64-28.7-64-64V320 288 216z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"quote-right\": {\n    \"aliases\": {\n      \"names\": [\"quote-right-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"201d\"],\n        \"secondary\": [\"10f10e\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Right Double Quotation Mark\",\n        \"mention\",\n        \"note\",\n        \"phrase\",\n        \"text\",\n        \"type\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f10e\",\n    \"label\": \"Quote Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 296c0 66.3-53.7 120-120 120h-8c-17.7 0-32-14.3-32-32s14.3-32 32-32h8c30.9 0 56-25.1 56-56v-8H320c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64h64c35.3 0 64 28.7 64 64v32 32 72zm-256 0c0 66.3-53.7 120-120 120H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h8c30.9 0 56-25.1 56-56v-8H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64h64c35.3 0 64 28.7 64 64v32 32 72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 296c0 66.3-53.7 120-120 120h-8c-17.7 0-32-14.3-32-32s14.3-32 32-32h8c30.9 0 56-25.1 56-56v-8H320c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64h64c35.3 0 64 28.7 64 64v32 32 72zm-256 0c0 66.3-53.7 120-120 120H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h8c30.9 0 56-25.1 56-56v-8H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64h64c35.3 0 64 28.7 64 64v32 32 72z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"r\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"72\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter R\", \"Latin Small Letter R\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"52\",\n    \"label\": \"R\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V288 448c0 17.7 14.3 32 32 32s32-14.3 32-32V320h95.3L261.8 466.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176c0-79.5-64.5-144-144-144H64zM176 256H64V96H176c44.2 0 80 35.8 80 80s-35.8 80-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V288 448c0 17.7 14.3 32 32 32s32-14.3 32-32V320h95.3L261.8 466.4c10.1 14.5 30.1 18 44.6 7.9s18-30.1 7.9-44.6L230.1 309.5C282.8 288.1 320 236.4 320 176c0-79.5-64.5-144-144-144H64zM176 256H64V96H176c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"r-project\": {\n    \"changes\": [\"5.0.11\", \"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f7\",\n    \"label\": \"R Project\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 581 512\\\"><path d=\\\"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 581, 512],\n        \"width\": 581,\n        \"height\": 512,\n        \"path\": \"M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"radiation\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7b9\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.8.2\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"danger\",\n        \"dangerous\",\n        \"deadly\",\n        \"hazard\",\n        \"nuclear\",\n        \"radioactive\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7b9\",\n    \"label\": \"Radiation\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M216 186.7c-23.9 13.8-40 39.7-40 69.3L32 256C14.3 256-.2 241.6 2 224.1C10.7 154 47.8 92.7 101.3 52c14.1-10.7 33.8-5.3 42.7 10l72 124.7zM256 336c14.6 0 28.2-3.9 40-10.7l72 124.8c8.8 15.3 3.7 35.1-12.6 41.9c-30.6 12.9-64.2 20-99.4 20s-68.9-7.1-99.4-20c-16.3-6.9-21.4-26.6-12.6-41.9l72-124.8c11.8 6.8 25.4 10.7 40 10.7zm224-80l-144 0c0-29.6-16.1-55.5-40-69.3L368 62c8.8-15.3 28.6-20.7 42.7-10c53.6 40.7 90.6 102 99.4 172.1c2.2 17.5-12.4 31.9-30 31.9zM256 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M216 186.7c-23.9 13.8-40 39.7-40 69.3L32 256C14.3 256-.2 241.6 2 224.1C10.7 154 47.8 92.7 101.3 52c14.1-10.7 33.8-5.3 42.7 10l72 124.7zM256 336c14.6 0 28.2-3.9 40-10.7l72 124.8c8.8 15.3 3.7 35.1-12.6 41.9c-30.6 12.9-64.2 20-99.4 20s-68.9-7.1-99.4-20c-16.3-6.9-21.4-26.6-12.6-41.9l72-124.8c11.8 6.8 25.4 10.7 40 10.7zm224-80l-144 0c0-29.6-16.1-55.5-40-69.3L368 62c8.8-15.3 28.6-20.7 42.7-10c53.6 40.7 90.6 102 99.4 172.1c2.2 17.5-12.4 31.9-30 31.9zM256 208a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"radio\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4fb\"],\n        \"secondary\": [\"10f8d7\"]\n      }\n    },\n    \"changes\": [\"5.11.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"am\",\n        \"broadcast\",\n        \"fm\",\n        \"frequency\",\n        \"music\",\n        \"news\",\n        \"radio\",\n        \"receiver\",\n        \"transmitter\",\n        \"tuner\",\n        \"video\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8d7\",\n    \"label\": \"Radio\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M494.8 47c12.7-3.7 20-17.1 16.3-29.8S494-2.8 481.2 1L51.7 126.9c-9.4 2.7-17.9 7.3-25.1 13.2C10.5 151.7 0 170.6 0 192v4V304 448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64H218.5L494.8 47zM368 240a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM80 256c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H96c-8.8 0-16-7.2-16-16zM64 320c0-8.8 7.2-16 16-16H208c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm16 64c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H96c-8.8 0-16-7.2-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M494.8 47c12.7-3.7 20-17.1 16.3-29.8S494-2.8 481.2 1L51.7 126.9c-9.4 2.7-17.9 7.3-25.1 13.2C10.5 151.7 0 170.6 0 192v4V304 448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64H218.5L494.8 47zM368 240a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM80 256c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H96c-8.8 0-16-7.2-16-16zM64 320c0-8.8 7.2-16 16-16H208c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm16 64c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H96c-8.8 0-16-7.2-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rainbow\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f308\"],\n        \"secondary\": [\"10f75b\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"gold\", \"leprechaun\", \"prism\", \"rain\", \"rainbow\", \"sky\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f75b\",\n    \"label\": \"Rainbow\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 96C178.6 96 64 210.6 64 352v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352C0 175.3 143.3 32 320 32s320 143.3 320 320v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352C576 210.6 461.4 96 320 96zm0 192c-35.3 0-64 28.7-64 64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-70.7 57.3-128 128-128s128 57.3 128 128v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-35.3-28.7-64-64-64zM160 352v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-123.7 100.3-224 224-224s224 100.3 224 224v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-88.4-71.6-160-160-160s-160 71.6-160 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 96C178.6 96 64 210.6 64 352v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352C0 175.3 143.3 32 320 32s320 143.3 320 320v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352C576 210.6 461.4 96 320 96zm0 192c-35.3 0-64 28.7-64 64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-70.7 57.3-128 128-128s128 57.3 128 128v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-35.3-28.7-64-64-64zM160 352v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-123.7 100.3-224 224-224s224 100.3 224 224v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352c0-88.4-71.6-160-160-160s-160 71.6-160 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ranking-star\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chart\", \"first place\", \"podium\", \"rank\", \"win\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e561\",\n    \"label\": \"Ranking Star\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M353.8 54.1L330.2 6.3c-3.9-8.3-16.1-8.6-20.4 0L286.2 54.1l-52.3 7.5c-9.3 1.4-13.3 12.9-6.4 19.8l38 37-9 52.1c-1.4 9.3 8.2 16.5 16.8 12.2l46.9-24.8 46.6 24.4c8.6 4.3 18.3-2.9 16.8-12.2l-9-52.1 38-36.6c6.8-6.8 2.9-18.3-6.4-19.8l-52.3-7.5zM256 256c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H384c17.7 0 32-14.3 32-32V288c0-17.7-14.3-32-32-32H256zM32 320c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H160c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32H32zm416 96v64c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H480c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M353.8 54.1L330.2 6.3c-3.9-8.3-16.1-8.6-20.4 0L286.2 54.1l-52.3 7.5c-9.3 1.4-13.3 12.9-6.4 19.8l38 37-9 52.1c-1.4 9.3 8.2 16.5 16.8 12.2l46.9-24.8 46.6 24.4c8.6 4.3 18.3-2.9 16.8-12.2l-9-52.1 38-36.6c6.8-6.8 2.9-18.3-6.4-19.8l-52.3-7.5zM256 256c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H384c17.7 0 32-14.3 32-32V288c0-17.7-14.3-32-32-32H256zM32 320c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H160c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32H32zm416 96v64c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V416c0-17.7-14.3-32-32-32H480c-17.7 0-32 14.3-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"raspberry-pi\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7bb\",\n    \"label\": \"Raspberry Pi\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 407 512\\\"><path d=\\\"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 407, 512],\n        \"width\": 407,\n        \"height\": 512,\n        \"path\": \"M372 232.5l-3.7-6.5c.1-46.4-21.4-65.3-46.5-79.7 7.6-2 15.4-3.6 17.6-13.2 13.1-3.3 15.8-9.4 17.1-15.8 3.4-2.3 14.8-8.7 13.6-19.7 6.4-4.4 10-10.1 8.1-18.1 6.9-7.5 8.7-13.7 5.8-19.4 8.3-10.3 4.6-15.6 1.1-20.9 6.2-11.2.7-23.2-16.6-21.2-6.9-10.1-21.9-7.8-24.2-7.8-2.6-3.2-6-6-16.5-4.7-6.8-6.1-14.4-5-22.3-2.1-9.3-7.3-15.5-1.4-22.6.8C271.6.6 269 5.5 263.5 7.6c-12.3-2.6-16.1 3-22 8.9l-6.9-.1c-18.6 10.8-27.8 32.8-31.1 44.1-3.3-11.3-12.5-33.3-31.1-44.1l-6.9.1c-5.9-5.9-9.7-11.5-22-8.9-5.6-2-8.1-7-19.4-3.4-4.6-1.4-8.9-4.4-13.9-4.3-2.6.1-5.5 1-8.7 3.5-7.9-3-15.5-4-22.3 2.1-10.5-1.3-14 1.4-16.5 4.7-2.3 0-17.3-2.3-24.2 7.8C21.2 16 15.8 28 22 39.2c-3.5 5.4-7.2 10.7 1.1 20.9-2.9 5.7-1.1 11.9 5.8 19.4-1.8 8 1.8 13.7 8.1 18.1-1.2 11 10.2 17.4 13.6 19.7 1.3 6.4 4 12.4 17.1 15.8 2.2 9.5 10 11.2 17.6 13.2-25.1 14.4-46.6 33.3-46.5 79.7l-3.7 6.5c-28.8 17.2-54.7 72.7-14.2 117.7 2.6 14.1 7.1 24.2 11 35.4 5.9 45.2 44.5 66.3 54.6 68.8 14.9 11.2 30.8 21.8 52.2 29.2C159 504.2 181 512 203 512h1c22.1 0 44-7.8 64.2-28.4 21.5-7.4 37.3-18 52.2-29.2 10.2-2.5 48.7-23.6 54.6-68.8 3.9-11.2 8.4-21.3 11-35.4 40.6-45.1 14.7-100.5-14-117.7zm-22.2-8c-1.5 18.7-98.9-65.1-82.1-67.9 45.7-7.5 83.6 19.2 82.1 67.9zm-43 93.1c-24.5 15.8-59.8 5.6-78.8-22.8s-14.6-64.2 9.9-80c24.5-15.8 59.8-5.6 78.8 22.8s14.6 64.2-9.9 80zM238.9 29.3c.8 4.2 1.8 6.8 2.9 7.6 5.4-5.8 9.8-11.7 16.8-17.3 0 3.3-1.7 6.8 2.5 9.4 3.7-5 8.8-9.5 15.5-13.3-3.2 5.6-.6 7.3 1.2 9.6 5.1-4.4 10-8.8 19.4-12.3-2.6 3.1-6.2 6.2-2.4 9.8 5.3-3.3 10.6-6.6 23.1-8.9-2.8 3.1-8.7 6.3-5.1 9.4 6.6-2.5 14-4.4 22.1-5.4-3.9 3.2-7.1 6.3-3.9 8.8 7.1-2.2 16.9-5.1 26.4-2.6l-6 6.1c-.7.8 14.1.6 23.9.8-3.6 5-7.2 9.7-9.3 18.2 1 1 5.8.4 10.4 0-4.7 9.9-12.8 12.3-14.7 16.6 2.9 2.2 6.8 1.6 11.2.1-3.4 6.9-10.4 11.7-16 17.3 1.4 1 3.9 1.6 9.7.9-5.2 5.5-11.4 10.5-18.8 15 1.3 1.5 5.8 1.5 10 1.6-6.7 6.5-15.3 9.9-23.4 14.2 4 2.7 6.9 2.1 10 2.1-5.7 4.7-15.4 7.1-24.4 10 1.7 2.7 3.4 3.4 7.1 4.1-9.5 5.3-23.2 2.9-27 5.6.9 2.7 3.6 4.4 6.7 5.8-15.4.9-57.3-.6-65.4-32.3 15.7-17.3 44.4-37.5 93.7-62.6-38.4 12.8-73 30-102 53.5-34.3-15.9-10.8-55.9 5.8-71.8zm-34.4 114.6c24.2-.3 54.1 17.8 54 34.7-.1 15-21 27.1-53.8 26.9-32.1-.4-53.7-15.2-53.6-29.8 0-11.9 26.2-32.5 53.4-31.8zm-123-12.8c3.7-.7 5.4-1.5 7.1-4.1-9-2.8-18.7-5.3-24.4-10 3.1 0 6 .7 10-2.1-8.1-4.3-16.7-7.7-23.4-14.2 4.2-.1 8.7 0 10-1.6-7.4-4.5-13.6-9.5-18.8-15 5.8.7 8.3.1 9.7-.9-5.6-5.6-12.7-10.4-16-17.3 4.3 1.5 8.3 2 11.2-.1-1.9-4.2-10-6.7-14.7-16.6 4.6.4 9.4 1 10.4 0-2.1-8.5-5.8-13.3-9.3-18.2 9.8-.1 24.6 0 23.9-.8l-6-6.1c9.5-2.5 19.3.4 26.4 2.6 3.2-2.5-.1-5.6-3.9-8.8 8.1 1.1 15.4 2.9 22.1 5.4 3.5-3.1-2.3-6.3-5.1-9.4 12.5 2.3 17.8 5.6 23.1 8.9 3.8-3.6.2-6.7-2.4-9.8 9.4 3.4 14.3 7.9 19.4 12.3 1.7-2.3 4.4-4 1.2-9.6 6.7 3.8 11.8 8.3 15.5 13.3 4.1-2.6 2.5-6.2 2.5-9.4 7 5.6 11.4 11.5 16.8 17.3 1.1-.8 2-3.4 2.9-7.6 16.6 15.9 40.1 55.9 6 71.8-29-23.5-63.6-40.7-102-53.5 49.3 25 78 45.3 93.7 62.6-8 31.8-50 33.2-65.4 32.3 3.1-1.4 5.8-3.2 6.7-5.8-4-2.8-17.6-.4-27.2-5.6zm60.1 24.1c16.8 2.8-80.6 86.5-82.1 67.9-1.5-48.7 36.5-75.5 82.1-67.9zM38.2 342c-23.7-18.8-31.3-73.7 12.6-98.3 26.5-7 9 107.8-12.6 98.3zm91 98.2c-13.3 7.9-45.8 4.7-68.8-27.9-15.5-27.4-13.5-55.2-2.6-63.4 16.3-9.8 41.5 3.4 60.9 25.6 16.9 20 24.6 55.3 10.5 65.7zm-26.4-119.7c-24.5-15.8-28.9-51.6-9.9-80s54.3-38.6 78.8-22.8 28.9 51.6 9.9 80c-19.1 28.4-54.4 38.6-78.8 22.8zM205 496c-29.4 1.2-58.2-23.7-57.8-32.3-.4-12.7 35.8-22.6 59.3-22 23.7-1 55.6 7.5 55.7 18.9.5 11-28.8 35.9-57.2 35.4zm58.9-124.9c.2 29.7-26.2 53.8-58.8 54-32.6.2-59.2-23.8-59.4-53.4v-.6c-.2-29.7 26.2-53.8 58.8-54 32.6-.2 59.2 23.8 59.4 53.4v.6zm82.2 42.7c-25.3 34.6-59.6 35.9-72.3 26.3-13.3-12.4-3.2-50.9 15.1-72 20.9-23.3 43.3-38.5 58.9-26.6 10.5 10.3 16.7 49.1-1.7 72.3zm22.9-73.2c-21.5 9.4-39-105.3-12.6-98.3 43.9 24.7 36.3 79.6 12.6 98.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ravelry\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"5.15.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2d9\",\n    \"label\": \"Ravelry\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M498.252,234.223c-1.208-10.34-1.7-20.826-3.746-31a310.306,310.306,0,0,0-9.622-36.6,184.068,184.068,0,0,0-30.874-57.5,251.154,251.154,0,0,0-18.818-21.689,237.362,237.362,0,0,0-47.113-36.116A240.8,240.8,0,0,0,331.356,26.65c-11.018-3.1-22.272-5.431-33.515-7.615-6.78-1.314-13.749-1.667-20.627-2.482-.316-.036-.6-.358-.9-.553q-16.143.009-32.288.006c-2.41.389-4.808.925-7.236,1.15a179.331,179.331,0,0,0-34.256,7.1,221.5,221.5,0,0,0-39.768,16.355,281.385,281.385,0,0,0-38.08,24.158c-6.167,4.61-12.268,9.36-17.974,14.518C96.539,88.494,86.34,97.72,76.785,107.555a243.878,243.878,0,0,0-33.648,43.95,206.488,206.488,0,0,0-20.494,44.6,198.2,198.2,0,0,0-7.691,34.759A201.13,201.13,0,0,0,13.4,266.385a299.716,299.716,0,0,0,4.425,40.24,226.865,226.865,0,0,0,16.73,53.3,210.543,210.543,0,0,0,24,39.528,213.589,213.589,0,0,0,26.358,28.416A251.313,251.313,0,0,0,126.7,458.455a287.831,287.831,0,0,0,55.9,25.277,269.5,269.5,0,0,0,40.641,9.835c6.071,1.01,12.275,1.253,18.412,1.873a4.149,4.149,0,0,1,1.19.56h32.289c2.507-.389,5-.937,7.527-1.143,16.336-1.332,32.107-5.335,47.489-10.717A219.992,219.992,0,0,0,379.1,460.322c9.749-6.447,19.395-13.077,28.737-20.1,5.785-4.348,10.988-9.5,16.3-14.457,3.964-3.7,7.764-7.578,11.51-11.5a232.162,232.162,0,0,0,31.427-41.639c9.542-16.045,17.355-32.905,22.3-50.926,2.859-10.413,4.947-21.045,7.017-31.652,1.032-5.279,1.251-10.723,1.87-16.087.036-.317.358-.6.552-.9V236.005A9.757,9.757,0,0,1,498.252,234.223Zm-161.117-1.15s-16.572-2.98-28.47-2.98c-27.2,0-33.57,14.9-33.57,37.04V360.8H201.582V170.062H275.1v31.931c8.924-26.822,26.771-36.189,62.04-36.189Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M498.252,234.223c-1.208-10.34-1.7-20.826-3.746-31a310.306,310.306,0,0,0-9.622-36.6,184.068,184.068,0,0,0-30.874-57.5,251.154,251.154,0,0,0-18.818-21.689,237.362,237.362,0,0,0-47.113-36.116A240.8,240.8,0,0,0,331.356,26.65c-11.018-3.1-22.272-5.431-33.515-7.615-6.78-1.314-13.749-1.667-20.627-2.482-.316-.036-.6-.358-.9-.553q-16.143.009-32.288.006c-2.41.389-4.808.925-7.236,1.15a179.331,179.331,0,0,0-34.256,7.1,221.5,221.5,0,0,0-39.768,16.355,281.385,281.385,0,0,0-38.08,24.158c-6.167,4.61-12.268,9.36-17.974,14.518C96.539,88.494,86.34,97.72,76.785,107.555a243.878,243.878,0,0,0-33.648,43.95,206.488,206.488,0,0,0-20.494,44.6,198.2,198.2,0,0,0-7.691,34.759A201.13,201.13,0,0,0,13.4,266.385a299.716,299.716,0,0,0,4.425,40.24,226.865,226.865,0,0,0,16.73,53.3,210.543,210.543,0,0,0,24,39.528,213.589,213.589,0,0,0,26.358,28.416A251.313,251.313,0,0,0,126.7,458.455a287.831,287.831,0,0,0,55.9,25.277,269.5,269.5,0,0,0,40.641,9.835c6.071,1.01,12.275,1.253,18.412,1.873a4.149,4.149,0,0,1,1.19.56h32.289c2.507-.389,5-.937,7.527-1.143,16.336-1.332,32.107-5.335,47.489-10.717A219.992,219.992,0,0,0,379.1,460.322c9.749-6.447,19.395-13.077,28.737-20.1,5.785-4.348,10.988-9.5,16.3-14.457,3.964-3.7,7.764-7.578,11.51-11.5a232.162,232.162,0,0,0,31.427-41.639c9.542-16.045,17.355-32.905,22.3-50.926,2.859-10.413,4.947-21.045,7.017-31.652,1.032-5.279,1.251-10.723,1.87-16.087.036-.317.358-.6.552-.9V236.005A9.757,9.757,0,0,1,498.252,234.223Zm-161.117-1.15s-16.572-2.98-28.47-2.98c-27.2,0-33.57,14.9-33.57,37.04V360.8H201.582V170.062H275.1v31.931c8.924-26.822,26.771-36.189,62.04-36.189Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"react\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f41b\",\n    \"label\": \"React\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"reacteurope\": {\n    \"changes\": [\"5.5.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f75d\",\n    \"label\": \"ReactEurope\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M250.6 211.74l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm63.7 0l5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.2-.1-2.3-6.8-2.3 6.8-7.2.1 5.7 4.3zm-91.3 50.5h-3.4c-4.8 0-3.8 4-3.8 12.1 0 4.7-2.3 6.1-5.8 6.1s-5.8-1.4-5.8-6.1v-36.6c0-4.7 2.3-6.1 5.8-6.1s5.8 1.4 5.8 6.1c0 7.2-.7 10.5 3.8 10.5h3.4c4.7-.1 3.8-3.9 3.8-12.3 0-9.9-6.7-14.1-16.8-14.1h-.2c-10.1 0-16.8 4.2-16.8 14.1V276c0 10.4 6.7 14.1 16.8 14.1h.2c10.1 0 16.8-3.8 16.8-14.1 0-9.86 1.1-13.76-3.8-13.76zm-80.7 17.4h-14.7v-19.3H139c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-11.4v-18.3H142c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-21.7c-2.4-.1-3.7 1.3-3.7 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h21.9c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8zm-42-18.5c4.6-2 7.3-6 7.3-12.4v-11.9c0-10.1-6.7-14.1-16.8-14.1H77.4c-2.5 0-3.8 1.3-3.8 3.8v59.1c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5 0 3.8-1.3 3.8-3.8v-22.9h5.6l7.4 23.5a4.1 4.1 0 0 0 4.3 3.2h3.3c2.8 0 4-1.8 3.2-4.4zm-3.8-14c0 4.8-2.5 6.1-6.1 6.1h-5.8v-20.9h5.8c3.6 0 6.1 1.3 6.1 6.1zM176 226a3.82 3.82 0 0 0-4.2-3.4h-6.9a3.68 3.68 0 0 0-4 3.4l-11 59.2c-.5 2.7.9 4.1 3.4 4.1h3a3.74 3.74 0 0 0 4.1-3.5l1.8-11.3h12.2l1.8 11.3a3.74 3.74 0 0 0 4.1 3.5h3.5c2.6 0 3.9-1.4 3.4-4.1zm-12.3 39.3l4.7-29.7 4.7 29.7zm89.3 20.2v-53.2h7.5c2.5 0 3.8-1.3 3.8-3.8v-2.1c0-2.5-1.3-3.8-3.8-3.8h-25.8c-2.5 0-3.8 1.3-3.8 3.8v2.1c0 2.5 1.3 3.8 3.8 3.8h7.3v53.2c0 2.5 1.3 3.8 3.8 3.8h3.4c2.5.04 3.8-1.3 3.8-3.76zm248-.8h-19.4V258h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9H501a1.81 1.81 0 0 0 2-1.9v-.8a1.84 1.84 0 0 0-2-1.96zm-93.1-62.9h-.8c-10.1 0-15.3 4.7-15.3 14.1V276c0 9.3 5.2 14.1 15.3 14.1h.8c10.1 0 15.3-4.8 15.3-14.1v-40.1c0-9.36-5.2-14.06-15.3-14.06zm10.2 52.4c-.1 8-3 11.1-10.5 11.1s-10.5-3.1-10.5-11.1v-36.6c0-7.9 3-11.1 10.5-11.1s10.5 3.2 10.5 11.1zm-46.5-14.5c6.1-1.6 9.2-6.1 9.2-13.3v-9.7c0-9.4-5.2-14.1-15.3-14.1h-13.7a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.9h11.6l10.4 27.2a2.32 2.32 0 0 0 2.3 1.5h1.5c1.4 0 2-1 1.5-2.3zm-6.4-3.9H355v-28.5h10.2c7.5 0 10.5 3.1 10.5 11.1v6.4c0 7.84-3 11.04-10.5 11.04zm85.9-33.1h-13.7a1.62 1.62 0 0 0-2 1.8v63a1.81 1.81 0 0 0 2 1.9h1.2a1.74 1.74 0 0 0 1.9-1.9v-26.1h10.6c10.1 0 15.3-4.8 15.3-14.1v-10.5c0-9.4-5.2-14.1-15.3-14.1zm10.2 22.8c0 7.9-3 11.1-10.5 11.1h-10.2v-29.2h10.2c7.5-.1 10.5 3.1 10.5 11zM259.5 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm227.6-136.1a364.42 364.42 0 0 0-35.6-11.3c19.6-78 11.6-134.7-22.3-153.9C394.7-12.66 343.3 11 291 61.94q5.1 4.95 10.2 10.2c82.5-80 119.6-53.5 120.9-52.8 22.4 12.7 36 55.8 15.5 137.8a587.83 587.83 0 0 0-84.6-13C281.1 43.64 212.4 2 170.8 2 140 2 127 23 123.2 29.74c-18.1 32-13.3 84.2.1 133.8-70.5 20.3-120.7 54.1-120.3 95 .5 59.6 103.2 87.8 122.1 92.8-20.5 81.9-10.1 135.6 22.3 153.9 28 15.8 75.1 6 138.2-55.2q-5.1-4.95-10.2-10.2c-82.5 80-119.7 53.5-120.9 52.8-22.3-12.6-36-55.6-15.5-137.9 12.4 2.9 41.8 9.5 84.6 13 71.9 100.4 140.6 142 182.1 142 30.8 0 43.8-21 47.6-27.7 18-31.9 13.3-84.1-.1-133.8 152.3-43.8 156.2-130.2 33.9-176.3zM135.9 36.84c2.9-5.1 11.9-20.3 34.9-20.3 36.8 0 98.8 39.6 163.3 126.2a714 714 0 0 0-93.9.9 547.76 547.76 0 0 1 42.2-52.4Q277.3 86 272.2 81a598.25 598.25 0 0 0-50.7 64.2 569.69 569.69 0 0 0-84.4 14.6c-.2-1.4-24.3-82.2-1.2-123zm304.8 438.3c-2.9 5.1-11.8 20.3-34.9 20.3-36.7 0-98.7-39.4-163.3-126.2a695.38 695.38 0 0 0 93.9-.9 547.76 547.76 0 0 1-42.2 52.4q5.1 5.25 10.2 10.2a588.47 588.47 0 0 0 50.7-64.2c47.3-4.7 80.3-13.5 84.4-14.6 22.7 84.4 4.5 117 1.2 123zm9.1-138.6c-3.6-11.9-7.7-24.1-12.4-36.4a12.67 12.67 0 0 1-10.7-5.7l-.1.1a19.61 19.61 0 0 1-5.4 3.6c5.7 14.3 10.6 28.4 14.7 42.2a535.3 535.3 0 0 1-72 13c3.5-5.3 17.2-26.2 32.2-54.2a24.6 24.6 0 0 1-6-3.2c-1.1 1.2-3.6 4.2-10.9 4.2-6.2 11.2-17.4 30.9-33.9 55.2a711.91 711.91 0 0 1-112.4 1c-7.9-11.2-21.5-31.1-36.8-57.8a21 21 0 0 1-3-1.5c-1.9 1.6-3.9 3.2-12.6 3.2 6.3 11.2 17.5 30.7 33.8 54.6a548.81 548.81 0 0 1-72.2-11.7q5.85-21 14.1-42.9c-3.2 0-5.4.2-8.4-1a17.58 17.58 0 0 1-6.9 1c-4.9 13.4-9.1 26.5-12.7 39.4C-31.7 297-12.1 216 126.7 175.64c3.6 11.9 7.7 24.1 12.4 36.4 10.4 0 12.9 3.4 14.4 5.3a12 12 0 0 1 2.3-2.2c-5.8-14.7-10.9-29.2-15.2-43.3 7-1.8 32.4-8.4 72-13-15.9 24.3-26.7 43.9-32.8 55.3a14.22 14.22 0 0 1 6.4 8 23.42 23.42 0 0 1 10.2-8.4c6.5-11.7 17.9-31.9 34.8-56.9a711.72 711.72 0 0 1 112.4-1c31.5 44.6 28.9 48.1 42.5 64.5a21.42 21.42 0 0 1 10.4-7.4c-6.4-11.4-17.6-31-34.3-55.5 40.4 4.1 65 10 72.2 11.7-4 14.4-8.9 29.2-14.6 44.2a20.74 20.74 0 0 1 6.8 4.3l.1.1a12.72 12.72 0 0 1 8.9-5.6c4.9-13.4 9.2-26.6 12.8-39.5a359.71 359.71 0 0 1 34.5 11c106.1 39.9 74 87.9 72.6 90.4-19.8 35.1-80.1 55.2-105.7 62.5zm-114.4-114h-1.2a1.74 1.74 0 0 0-1.9 1.9v49.8c0 7.9-2.6 11.1-10.1 11.1s-10.1-3.1-10.1-11.1v-49.8a1.69 1.69 0 0 0-1.9-1.9H309a1.81 1.81 0 0 0-2 1.9v51.5c0 9.6 5 14.1 15.1 14.1h.4c10.1 0 15.1-4.6 15.1-14.1v-51.5a2 2 0 0 0-2.2-1.9zM321.7 308l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm-31.1 7.4l-2.3-6.8-2.3 6.8-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3zm5.1-30.8h-19.4v-26.7h16.1a1.89 1.89 0 0 0 2-2v-.8a1.89 1.89 0 0 0-2-2h-16.1v-25.8h19.1a1.89 1.89 0 0 0 2-2v-.8a1.77 1.77 0 0 0-2-1.9h-22.2a1.81 1.81 0 0 0-2 1.9v63a1.81 1.81 0 0 0 2 1.9h22.5a1.77 1.77 0 0 0 2-1.9v-.8a1.83 1.83 0 0 0-2-2.06zm-7.4-99.4L286 192l-7.1.1 5.7 4.3-2.1 6.8 5.8-4.1 5.8 4.1-2.1-6.8 5.7-4.3-7.1-.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"readme\": {\n    \"changes\": [\"5.0.9\", \"5.0.10\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4d5\",\n    \"label\": \"ReadMe\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"rebel\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d0\",\n    \"label\": \"Rebel Alliance\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"receipt\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9fe\"],\n        \"secondary\": [\"10f543\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accounting\",\n        \"bookkeeping\",\n        \"check\",\n        \"evidence\",\n        \"invoice\",\n        \"money\",\n        \"pay\",\n        \"proof\",\n        \"receipt\",\n        \"table\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f543\",\n    \"label\": \"Receipt\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.3-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6s14 12.4 14 21.8V488c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6L304 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L192 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488V24C0 14.6 5.5 6.1 14 2.2zM96 144c-8.8 0-16 7.2-16 16s7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H96zM80 352c0 8.8 7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H96c-8.8 0-16 7.2-16 16zM96 240c-8.8 0-16 7.2-16 16s7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M14 2.2C22.5-1.7 32.5-.3 39.6 5.8L80 40.4 120.4 5.8c9-7.7 22.3-7.7 31.2 0L192 40.4 232.4 5.8c9-7.7 22.3-7.7 31.2 0L304 40.4 344.4 5.8c7.1-6.1 17.1-7.5 25.6-3.6s14 12.4 14 21.8V488c0 9.4-5.5 17.9-14 21.8s-18.5 2.5-25.6-3.6L304 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L192 471.6l-40.4 34.6c-9 7.7-22.3 7.7-31.2 0L80 471.6 39.6 506.2c-7.1 6.1-17.1 7.5-25.6 3.6S0 497.4 0 488V24C0 14.6 5.5 6.1 14 2.2zM96 144c-8.8 0-16 7.2-16 16s7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H96zM80 352c0 8.8 7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H96c-8.8 0-16 7.2-16 16zM96 240c-8.8 0-16 7.2-16 16s7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"record-vinyl\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f8d9\"]\n      }\n    },\n    \"changes\": [\"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"LP\", \"album\", \"analog\", \"music\", \"phonograph\", \"sound\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8d9\",\n    \"label\": \"Record Vinyl\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 224a128 128 0 1 0 0-256 128 128 0 1 0 0 256zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm256-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm0 224a128 128 0 1 0 0-256 128 128 0 1 0 0 256zm0-96a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rectangle-ad\": {\n    \"aliases\": {\n      \"names\": [\"ad\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f641\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"advertisement\", \"media\", \"newspaper\", \"promotion\", \"publicity\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f641\",\n    \"label\": \"Rectangle Ad\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM229.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7L253.2 328H162.8l-5.4 10.7c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zM208 237.7L186.8 280h42.3L208 237.7zM392 256a24 24 0 1 0 0 48 24 24 0 1 0 0-48zm24-43.9V184c0-13.3 10.7-24 24-24s24 10.7 24 24v96 48c0 13.3-10.7 24-24 24c-6.6 0-12.6-2.7-17-7c-9.4 4.5-19.9 7-31 7c-39.8 0-72-32.2-72-72s32.2-72 72-72c8.4 0 16.5 1.4 24 4.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM229.5 173.3l72 144c5.9 11.9 1.1 26.3-10.7 32.2s-26.3 1.1-32.2-10.7L253.2 328H162.8l-5.4 10.7c-5.9 11.9-20.3 16.7-32.2 10.7s-16.7-20.3-10.7-32.2l72-144c4.1-8.1 12.4-13.3 21.5-13.3s17.4 5.1 21.5 13.3zM208 237.7L186.8 280h42.3L208 237.7zM392 256a24 24 0 1 0 0 48 24 24 0 1 0 0-48zm24-43.9V184c0-13.3 10.7-24 24-24s24 10.7 24 24v96 48c0 13.3-10.7 24-24 24c-6.6 0-12.6-2.7-17-7c-9.4 4.5-19.9 7-31 7c-39.8 0-72-32.2-72-72s32.2-72 72-72c8.4 0 16.5 1.4 24 4.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rectangle-list\": {\n    \"aliases\": {\n      \"names\": [\"list-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f022\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"completed\",\n        \"done\",\n        \"finished\",\n        \"ol\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f022\",\n    \"label\": \"Rectangle List\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H512c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32-128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96-248c-13.3 0-24 10.7-24 24s10.7 24 24 24H448c13.3 0 24-10.7 24-24s-10.7-24-24-24H224zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H448c13.3 0 24-10.7 24-24s-10.7-24-24-24H224zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H448c13.3 0 24-10.7 24-24s-10.7-24-24-24H224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H512c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32-128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96-248c-13.3 0-24 10.7-24 24s10.7 24 24 24H448c13.3 0 24-10.7 24-24s-10.7-24-24-24H224zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H448c13.3 0 24-10.7 24-24s-10.7-24-24-24H224zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24H448c13.3 0 24-10.7 24-24s-10.7-24-24-24H224z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H512c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H512c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm96 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm104 0c0-13.3 10.7-24 24-24H448c13.3 0 24 10.7 24 24s-10.7 24-24 24H224c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24H448c13.3 0 24 10.7 24 24s-10.7 24-24 24H224c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24H448c13.3 0 24 10.7 24 24s-10.7 24-24 24H224c-13.3 0-24-10.7-24-24zm-72-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H512c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H512c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm96 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm104 0c0-13.3 10.7-24 24-24H448c13.3 0 24 10.7 24 24s-10.7 24-24 24H224c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24H448c13.3 0 24 10.7 24 24s-10.7 24-24 24H224c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24H448c13.3 0 24 10.7 24 24s-10.7 24-24 24H224c-13.3 0-24-10.7-24-24zm-72-64a32 32 0 1 1 0-64 32 32 0 1 1 0 64zM96 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"rectangle-xmark\": {\n    \"aliases\": {\n      \"names\": [\"rectangle-times\", \"times-rectangle\", \"window-close\"],\n      \"unicodes\": {\n        \"composite\": [\"f2d4\"],\n        \"secondary\": [\"10f410\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\", \"cancel\", \"computer\", \"development\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f410\",\n    \"label\": \"Rectangle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm175 79c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm175 79c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"recycle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2672\", \"267a\", \"267b\"],\n        \"secondary\": [\"10f1b8\"]\n      }\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Recycling Symbol For Generic Materials\",\n        \"Universal Recycling Symbol\",\n        \"Waste\",\n        \"compost\",\n        \"garbage\",\n        \"recycle\",\n        \"recycling symbol\",\n        \"reuse\",\n        \"trash\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1b8\",\n    \"label\": \"Recycle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M174.7 45.1C192.2 17 223 0 256 0s63.8 17 81.3 45.1l38.6 61.7 27-15.6c8.4-4.9 18.9-4.2 26.6 1.7s11.1 15.9 8.6 25.3l-23.4 87.4c-3.4 12.8-16.6 20.4-29.4 17l-87.4-23.4c-9.4-2.5-16.3-10.4-17.6-20s3.4-19.1 11.8-23.9l28.4-16.4L283 79c-5.8-9.3-16-15-27-15s-21.2 5.7-27 15l-17.5 28c-9.2 14.8-28.6 19.5-43.6 10.5c-15.3-9.2-20.2-29.2-10.7-44.4l17.5-28zM429.5 251.9c15-9 34.4-4.3 43.6 10.5l24.4 39.1c9.4 15.1 14.4 32.4 14.6 50.2c.3 53.1-42.7 96.4-95.8 96.4L320 448v32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2v32l96.2 0c17.6 0 31.9-14.4 31.8-32c0-5.9-1.7-11.7-4.8-16.7l-24.4-39.1c-9.5-15.2-4.7-35.2 10.7-44.4zm-364.6-31L36 204.2c-8.4-4.9-13.1-14.3-11.8-23.9s8.2-17.5 17.6-20l87.4-23.4c12.8-3.4 26 4.2 29.4 17L182 241.2c2.5 9.4-.9 19.3-8.6 25.3s-18.2 6.6-26.6 1.7l-26.5-15.3L68.8 335.3c-3.1 5-4.8 10.8-4.8 16.7c-.1 17.6 14.2 32 31.8 32l32.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32.2 0C42.7 448-.3 404.8 0 351.6c.1-17.8 5.1-35.1 14.6-50.2l50.3-80.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M174.7 45.1C192.2 17 223 0 256 0s63.8 17 81.3 45.1l38.6 61.7 27-15.6c8.4-4.9 18.9-4.2 26.6 1.7s11.1 15.9 8.6 25.3l-23.4 87.4c-3.4 12.8-16.6 20.4-29.4 17l-87.4-23.4c-9.4-2.5-16.3-10.4-17.6-20s3.4-19.1 11.8-23.9l28.4-16.4L283 79c-5.8-9.3-16-15-27-15s-21.2 5.7-27 15l-17.5 28c-9.2 14.8-28.6 19.5-43.6 10.5c-15.3-9.2-20.2-29.2-10.7-44.4l17.5-28zM429.5 251.9c15-9 34.4-4.3 43.6 10.5l24.4 39.1c9.4 15.1 14.4 32.4 14.6 50.2c.3 53.1-42.7 96.4-95.8 96.4L320 448v32c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-64-64c-9.4-9.4-9.4-24.6 0-33.9l64-64c6.9-6.9 17.2-8.9 26.2-5.2s14.8 12.5 14.8 22.2v32l96.2 0c17.6 0 31.9-14.4 31.8-32c0-5.9-1.7-11.7-4.8-16.7l-24.4-39.1c-9.5-15.2-4.7-35.2 10.7-44.4zm-364.6-31L36 204.2c-8.4-4.9-13.1-14.3-11.8-23.9s8.2-17.5 17.6-20l87.4-23.4c12.8-3.4 26 4.2 29.4 17L182 241.2c2.5 9.4-.9 19.3-8.6 25.3s-18.2 6.6-26.6 1.7l-26.5-15.3L68.8 335.3c-3.1 5-4.8 10.8-4.8 16.7c-.1 17.6 14.2 32 31.8 32l32.2 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-32.2 0C42.7 448-.3 404.8 0 351.6c.1-17.8 5.1-35.1 14.6-50.2l50.3-80.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"red-river\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e3\",\n    \"label\": \"red river\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"reddit\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a1\",\n    \"label\": \"reddit Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"reddit-alien\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f281\",\n    \"label\": \"reddit Alien\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"redhat\": {\n    \"changes\": [\"5.6.0\", \"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linux\", \"operating system\", \"os\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7bc\",\n    \"label\": \"Redhat\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"registered\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"ae\"],\n        \"secondary\": [\"10f25d\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"copyright\", \"mark\", \"r\", \"registered\", \"trademark\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f25d\",\n    \"label\": \"Registered\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152c0-13.3 10.7-24 24-24h88c44.2 0 80 35.8 80 80c0 28-14.4 52.7-36.3 67l34.1 75.1c5.5 12.1 .1 26.3-11.9 31.8s-26.3 .1-31.8-11.9L268.9 288H208v72c0 13.3-10.7 24-24 24s-24-10.7-24-24V264 152zm48 88h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H208v64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152c0-13.3 10.7-24 24-24h88c44.2 0 80 35.8 80 80c0 28-14.4 52.7-36.3 67l34.1 75.1c5.5 12.1 .1 26.3-11.9 31.8s-26.3 .1-31.8-11.9L268.9 288H208v72c0 13.3-10.7 24-24 24s-24-10.7-24-24V264 152zm48 88h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H208v64z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152V264v96c0 13.3 10.7 24 24 24s24-10.7 24-24V288h60.9l37.2 81.9c5.5 12.1 19.7 17.4 31.8 11.9s17.4-19.7 11.9-31.8L315.7 275c21.8-14.3 36.3-39 36.3-67c0-44.2-35.8-80-80-80H184c-13.3 0-24 10.7-24 24zm48 88V176h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM160 152V264v96c0 13.3 10.7 24 24 24s24-10.7 24-24V288h60.9l37.2 81.9c5.5 12.1 19.7 17.4 31.8 11.9s17.4-19.7 11.9-31.8L315.7 275c21.8-14.3 36.3-39 36.3-67c0-44.2-35.8-80-80-80H184c-13.3 0-24 10.7-24 24zm48 88V176h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H208z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"renren\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f18b\",\n    \"label\": \"Renren\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"repeat\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f501\"],\n        \"secondary\": [\"10f363\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"clockwise\",\n        \"flip\",\n        \"reload\",\n        \"repeat\",\n        \"repeat button\",\n        \"rewind\",\n        \"switch\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f363\",\n    \"label\": \"Repeat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 224c0 17.7 14.3 32 32 32s32-14.3 32-32c0-53 43-96 96-96H320v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S320 19.1 320 32V64H160C71.6 64 0 135.6 0 224zm512 64c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 53-43 96-96 96H192V352c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V448H352c88.4 0 160-71.6 160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 224c0 17.7 14.3 32 32 32s32-14.3 32-32c0-53 43-96 96-96H320v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9S320 19.1 320 32V64H160C71.6 64 0 135.6 0 224zm512 64c0-17.7-14.3-32-32-32s-32 14.3-32 32c0 53-43 96-96 96H192V352c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V448H352c88.4 0 160-71.6 160-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"reply\": {\n    \"aliases\": {\n      \"names\": [\"mail-reply\"],\n      \"unicodes\": {\n        \"composite\": [\"f112\"],\n        \"secondary\": [\"10f3e5\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mail\", \"message\", \"respond\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3e5\",\n    \"label\": \"Reply\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M205 34.8c11.5 5.1 19 16.6 19 29.2v64H336c97.2 0 176 78.8 176 176c0 113.3-81.5 163.9-100.2 174.1c-2.5 1.4-5.3 1.9-8.1 1.9c-10.9 0-19.7-8.9-19.7-19.7c0-7.5 4.3-14.4 9.8-19.5c9.4-8.8 22.2-26.4 22.2-56.7c0-53-43-96-96-96H224v64c0 12.6-7.4 24.1-19 29.2s-25 3-34.4-5.4l-160-144C3.9 225.7 0 217.1 0 208s3.9-17.7 10.6-23.8l160-144c9.4-8.5 22.9-10.6 34.4-5.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M205 34.8c11.5 5.1 19 16.6 19 29.2v64H336c97.2 0 176 78.8 176 176c0 113.3-81.5 163.9-100.2 174.1c-2.5 1.4-5.3 1.9-8.1 1.9c-10.9 0-19.7-8.9-19.7-19.7c0-7.5 4.3-14.4 9.8-19.5c9.4-8.8 22.2-26.4 22.2-56.7c0-53-43-96-96-96H224v64c0 12.6-7.4 24.1-19 29.2s-25 3-34.4-5.4l-160-144C3.9 225.7 0 217.1 0 208s3.9-17.7 10.6-23.8l160-144c9.4-8.5 22.9-10.6 34.4-5.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"reply-all\": {\n    \"aliases\": {\n      \"names\": [\"mail-reply-all\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f122\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mail\", \"message\", \"respond\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f122\",\n    \"label\": \"Reply All\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M209.4 39.5c-9.1-9.6-24.3-10-33.9-.9L33.8 173.2c-19.9 18.9-19.9 50.7 0 69.6L175.5 377.4c9.6 9.1 24.8 8.7 33.9-.9s8.7-24.8-.9-33.9L66.8 208 208.5 73.4c9.6-9.1 10-24.3 .9-33.9zM352 64c0-12.6-7.4-24.1-19-29.2s-25-3-34.4 5.4l-160 144c-6.7 6.1-10.6 14.7-10.6 23.8s3.9 17.7 10.6 23.8l160 144c9.4 8.5 22.9 10.6 34.4 5.4s19-16.6 19-29.2V288h32c53 0 96 43 96 96c0 30.4-12.8 47.9-22.2 56.7c-5.5 5.1-9.8 12-9.8 19.5c0 10.9 8.8 19.7 19.7 19.7c2.8 0 5.6-.6 8.1-1.9C494.5 467.9 576 417.3 576 304c0-97.2-78.8-176-176-176H352V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M209.4 39.5c-9.1-9.6-24.3-10-33.9-.9L33.8 173.2c-19.9 18.9-19.9 50.7 0 69.6L175.5 377.4c9.6 9.1 24.8 8.7 33.9-.9s8.7-24.8-.9-33.9L66.8 208 208.5 73.4c9.6-9.1 10-24.3 .9-33.9zM352 64c0-12.6-7.4-24.1-19-29.2s-25-3-34.4 5.4l-160 144c-6.7 6.1-10.6 14.7-10.6 23.8s3.9 17.7 10.6 23.8l160 144c9.4 8.5 22.9 10.6 34.4 5.4s19-16.6 19-29.2V288h32c53 0 96 43 96 96c0 30.4-12.8 47.9-22.2 56.7c-5.5 5.1-9.8 12-9.8 19.5c0 10.9 8.8 19.7 19.7 19.7c2.8 0 5.6-.6 8.1-1.9C494.5 467.9 576 417.3 576 304c0-97.2-78.8-176-176-176H352V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"replyd\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e6\",\n    \"label\": \"replyd\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"republican\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f75e\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"american\",\n        \"conservative\",\n        \"election\",\n        \"elephant\",\n        \"politics\",\n        \"republican party\",\n        \"right\",\n        \"right-wing\",\n        \"usa\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f75e\",\n    \"label\": \"Republican\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 192C0 103.6 71.6 32 160 32H384c88.4 0 160 71.6 160 160v64H0V192zm415.9-64c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L466 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm-138.3 3.4c-1.1-2.1-3.3-3.4-5.7-3.4s-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L322 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6zM127.9 128c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L178 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm.1 160H320h96 32 64 32v32 80c0 8.8 7.2 16 16 16s16-7.2 16-16V352c0-17.7 14.3-32 32-32s32 14.3 32 32v48c0 44.2-35.8 80-80 80s-80-35.8-80-80V352H448v32 64c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V384H128v64c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V384 288H128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 192C0 103.6 71.6 32 160 32H384c88.4 0 160 71.6 160 160v64H0V192zm415.9-64c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L466 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm-138.3 3.4c-1.1-2.1-3.3-3.4-5.7-3.4s-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L322 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6zM127.9 128c-2.4 0-4.7 1.3-5.7 3.4l-12.6 24.6-28.2 4c-2.4 .3-4.4 2-5.2 4.2s-.1 4.7 1.6 6.3l20.4 19.2-4.8 27.1c-.4 2.3 .6 4.7 2.5 6s4.6 1.6 6.7 .5l25.2-12.8 25.2 12.8c2.2 1.1 4.8 .9 6.7-.5s3-3.7 2.5-6l-4.8-27.1L178 170.5c1.7-1.6 2.4-4.1 1.6-6.3s-2.8-3.9-5.2-4.2l-28.2-4-12.6-24.6c-1.1-2.1-3.3-3.4-5.7-3.4zm.1 160H320h96 32 64 32v32 80c0 8.8 7.2 16 16 16s16-7.2 16-16V352c0-17.7 14.3-32 32-32s32 14.3 32 32v48c0 44.2-35.8 80-80 80s-80-35.8-80-80V352H448v32 64c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V384H128v64c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V384 288H128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"researchgate\": {\n    \"changes\": [\"5.0.11\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f8\",\n    \"label\": \"Researchgate\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"resolving\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e7\",\n    \"label\": \"Resolving\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"restroom\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7bd\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bathroom\", \"toilet\", \"water closet\", \"wc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7bd\",\n    \"label\": \"Restroom\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V325.2c-8.1 9.2-21.1 13.2-33.5 9.4c-16.9-5.3-26.3-23.2-21-40.1l30.9-99.1C44.9 155.3 82 128 124 128h8c42 0 79.1 27.3 91.6 67.4l30.9 99.1c5.3 16.9-4.1 34.8-21 40.1c-12.4 3.9-25.4-.2-33.5-9.4V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H120zM320 0c13.3 0 24 10.7 24 24V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V24c0-13.3 10.7-24 24-24zM464 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM440 480V384H422.2c-10.9 0-18.6-10.7-15.2-21.1l9-26.9c-3.2 0-6.4-.5-9.5-1.5c-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C428.4 156.9 467.6 128 512 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1c-3.2 1-6.4 1.5-9.5 1.5l9 26.9c3.5 10.4-4.3 21.1-15.2 21.1H584v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H504v96c0 17.7-14.3 32-32 32s-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M80 48a48 48 0 1 1 96 0A48 48 0 1 1 80 48zm40 304V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V325.2c-8.1 9.2-21.1 13.2-33.5 9.4c-16.9-5.3-26.3-23.2-21-40.1l30.9-99.1C44.9 155.3 82 128 124 128h8c42 0 79.1 27.3 91.6 67.4l30.9 99.1c5.3 16.9-4.1 34.8-21 40.1c-12.4 3.9-25.4-.2-33.5-9.4V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H120zM320 0c13.3 0 24 10.7 24 24V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V24c0-13.3 10.7-24 24-24zM464 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM440 480V384H422.2c-10.9 0-18.6-10.7-15.2-21.1l9-26.9c-3.2 0-6.4-.5-9.5-1.5c-16.9-5.3-26.3-23.2-21-40.1l29.7-95.2C428.4 156.9 467.6 128 512 128s83.6 28.9 96.8 71.2l29.7 95.2c5.3 16.9-4.1 34.8-21 40.1c-3.2 1-6.4 1.5-9.5 1.5l9 26.9c3.5 10.4-4.3 21.1-15.2 21.1H584v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384H504v96c0 17.7-14.3 32-32 32s-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"retweet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f079\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"refresh\", \"reload\", \"share\", \"swap\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f079\",\n    \"label\": \"Retweet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M272 416c17.7 0 32-14.3 32-32s-14.3-32-32-32H160c-17.7 0-32-14.3-32-32V192h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 128c0 53 43 96 96 96H272zM304 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32 14.3 32 32l0 128H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0V192c0-53-43-96-96-96L304 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M272 416c17.7 0 32-14.3 32-32s-14.3-32-32-32H160c-17.7 0-32-14.3-32-32V192h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l32 0 0 128c0 53 43 96 96 96H272zM304 96c-17.7 0-32 14.3-32 32s14.3 32 32 32l112 0c17.7 0 32 14.3 32 32l0 128H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8l-32 0V192c0-53-43-96-96-96L304 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rev\": {\n    \"changes\": [\"5.1.0\", \"5.1.1\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5b2\",\n    \"label\": \"Rev.io\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M289.67 274.89a65.57 65.57 0 1 1-65.56-65.56 65.64 65.64 0 0 1 65.56 65.56zm139.55-5.05h-.13a204.69 204.69 0 0 0-74.32-153l-45.38 26.2a157.07 157.07 0 0 1 71.81 131.84C381.2 361.5 310.73 432 224.11 432S67 361.5 67 274.88c0-81.88 63-149.27 143-156.43v39.12l108.77-62.79L210 32v38.32c-106.7 7.25-191 96-191 204.57 0 111.59 89.12 202.29 200.06 205v.11h210.16V269.84z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ribbon\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f397\"],\n        \"secondary\": [\"10f4d6\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"badge\",\n        \"cause\",\n        \"celebration\",\n        \"lapel\",\n        \"pin\",\n        \"reminder\",\n        \"reminder ribbon\",\n        \"ribbon\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4d6\",\n    \"label\": \"Ribbon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M333.2 322.8l0 0-133.9-146 0 0L146 118.6c7.8-5.1 37-22.6 78-22.6s70.2 17.4 78 22.6L245.7 180l85.6 93.4 27.4-29.8c16.3-17.7 25.3-40.9 25.3-65V149.1c0-19-5.6-37.5-16.1-53.3L327.8 35.6C312.9 13.4 287.9 0 261.2 0h-76c-25.8 0-50.1 12.5-65.1 33.5L81.9 87C70.3 103.2 64 122.8 64 142.8V164c0 23.2 8.4 45.6 23.6 63.1l56 64.2 0 0 83.3 95.6 0 0 91.8 105.3c10 11.5 26.8 14.3 40 6.8l54.5-31.1c17.8-10.2 21.6-34.3 7.7-49.4l-87.7-95.7zM205.2 410.6l-83.3-95.6L27.1 418.5c-13.9 15.1-10.1 39.2 7.7 49.4l55.1 31.5c13 7.4 29.3 4.9 39.4-6.1l75.9-82.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M333.2 322.8l0 0-133.9-146 0 0L146 118.6c7.8-5.1 37-22.6 78-22.6s70.2 17.4 78 22.6L245.7 180l85.6 93.4 27.4-29.8c16.3-17.7 25.3-40.9 25.3-65V149.1c0-19-5.6-37.5-16.1-53.3L327.8 35.6C312.9 13.4 287.9 0 261.2 0h-76c-25.8 0-50.1 12.5-65.1 33.5L81.9 87C70.3 103.2 64 122.8 64 142.8V164c0 23.2 8.4 45.6 23.6 63.1l56 64.2 0 0 83.3 95.6 0 0 91.8 105.3c10 11.5 26.8 14.3 40 6.8l54.5-31.1c17.8-10.2 21.6-34.3 7.7-49.4l-87.7-95.7zM205.2 410.6l-83.3-95.6L27.1 418.5c-13.9 15.1-10.1 39.2 7.7 49.4l55.1 31.5c13 7.4 29.3 4.9 39.4-6.1l75.9-82.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"right-from-bracket\": {\n    \"aliases\": {\n      \"names\": [\"sign-out-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2f5\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"exit\", \"leave\", \"log out\", \"logout\", \"sign-out\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2f5\",\n    \"label\": \"Right From Bracket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"right-left\": {\n    \"aliases\": {\n      \"names\": [\"exchange-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f362\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"arrows\",\n        \"exchange\",\n        \"reciprocate\",\n        \"return\",\n        \"swap\",\n        \"transfer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f362\",\n    \"label\": \"Right Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 96l320 0V32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160L32 160c-17.7 0-32-14.3-32-32s14.3-32 32-32zM480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32H160v64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96c-6-6-9.4-14.1-9.4-22.6s3.4-16.6 9.4-22.6l96-96c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 64H480z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 96l320 0V32c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l96 96c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-96 96c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160L32 160c-17.7 0-32-14.3-32-32s14.3-32 32-32zM480 352c17.7 0 32 14.3 32 32s-14.3 32-32 32H160v64c0 12.9-7.8 24.6-19.8 29.6s-25.7 2.2-34.9-6.9l-96-96c-6-6-9.4-14.1-9.4-22.6s3.4-16.6 9.4-22.6l96-96c9.2-9.2 22.9-11.9 34.9-6.9s19.8 16.6 19.8 29.6l0 64H480z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"right-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-alt-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f30b\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"long-arrow-right\", \"next\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f30b\",\n    \"label\": \"Right Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M334.5 414c8.8 3.8 19 2 26-4.6l144-136c4.8-4.5 7.5-10.8 7.5-17.4s-2.7-12.9-7.5-17.4l-144-136c-7-6.6-17.2-8.4-26-4.6s-14.5 12.5-14.5 22l0 72L32 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l288 0 0 72c0 9.6 5.7 18.2 14.5 22z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M334.5 414c8.8 3.8 19 2 26-4.6l144-136c4.8-4.5 7.5-10.8 7.5-17.4s-2.7-12.9-7.5-17.4l-144-136c-7-6.6-17.2-8.4-26-4.6s-14.5 12.5-14.5 22l0 72L32 192c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l288 0 0 72c0 9.6 5.7 18.2 14.5 22z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"right-to-bracket\": {\n    \"aliases\": {\n      \"names\": [\"sign-in-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2f6\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"enter\",\n        \"join\",\n        \"log in\",\n        \"login\",\n        \"sign in\",\n        \"sign up\",\n        \"sign-in\",\n        \"signin\",\n        \"signup\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2f6\",\n    \"label\": \"Right To Bracket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M217.9 105.9L340.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L217.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1L32 320c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM352 416l64 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M217.9 105.9L340.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L217.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1L32 320c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM352 416l64 0c17.7 0 32-14.3 32-32l0-256c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l64 0c53 0 96 43 96 96l0 256c0 53-43 96-96 96l-64 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ring\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f70b\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"Gollum\",\n        \"band\",\n        \"binding\",\n        \"d&d\",\n        \"dnd\",\n        \"engagement\",\n        \"fantasy\",\n        \"gold\",\n        \"jewelry\",\n        \"marriage\",\n        \"precious\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f70b\",\n    \"label\": \"Ring\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 208c0 7.8 4.4 18.7 17.1 30.3C126.5 214.1 188.9 200 256 200s129.5 14.1 174.9 38.3C443.6 226.7 448 215.8 448 208c0-12.3-10.8-32-47.9-50.6C364.9 139.8 314 128 256 128s-108.9 11.8-144.1 29.4C74.8 176 64 195.7 64 208zm192 40c-47 0-89.3 7.6-122.9 19.7C166.3 280.2 208.8 288 256 288s89.7-7.8 122.9-20.3C345.3 255.6 303 248 256 248zM0 208c0-49.6 39.4-85.8 83.3-107.8C129.1 77.3 190.3 64 256 64s126.9 13.3 172.7 36.2c43.9 22 83.3 58.2 83.3 107.8v96c0 49.6-39.4 85.8-83.3 107.8C382.9 434.7 321.7 448 256 448s-126.9-13.3-172.7-36.2C39.4 389.8 0 353.6 0 304V208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 208c0 7.8 4.4 18.7 17.1 30.3C126.5 214.1 188.9 200 256 200s129.5 14.1 174.9 38.3C443.6 226.7 448 215.8 448 208c0-12.3-10.8-32-47.9-50.6C364.9 139.8 314 128 256 128s-108.9 11.8-144.1 29.4C74.8 176 64 195.7 64 208zm192 40c-47 0-89.3 7.6-122.9 19.7C166.3 280.2 208.8 288 256 288s89.7-7.8 122.9-20.3C345.3 255.6 303 248 256 248zM0 208c0-49.6 39.4-85.8 83.3-107.8C129.1 77.3 190.3 64 256 64s126.9 13.3 172.7 36.2c43.9 22 83.3 58.2 83.3 107.8v96c0 49.6-39.4 85.8-83.3 107.8C382.9 434.7 321.7 448 256 448s-126.9-13.3-172.7-36.2C39.4 389.8 0 353.6 0 304V208z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6e3\"],\n        \"secondary\": [\"10f018\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"highway\",\n        \"map\",\n        \"motorway\",\n        \"pavement\",\n        \"road\",\n        \"route\",\n        \"street\",\n        \"travel\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f018\",\n    \"label\": \"Road\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M256 32H181.2c-27.1 0-51.3 17.1-60.3 42.6L3.1 407.2C1.1 413 0 419.2 0 425.4C0 455.5 24.5 480 54.6 480H256V416c0-17.7 14.3-32 32-32s32 14.3 32 32v64H521.4c30.2 0 54.6-24.5 54.6-54.6c0-6.2-1.1-12.4-3.1-18.2L455.1 74.6C446 49.1 421.9 32 394.8 32H320V96c0 17.7-14.3 32-32 32s-32-14.3-32-32V32zm64 192v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32s32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M256 32H181.2c-27.1 0-51.3 17.1-60.3 42.6L3.1 407.2C1.1 413 0 419.2 0 425.4C0 455.5 24.5 480 54.6 480H256V416c0-17.7 14.3-32 32-32s32 14.3 32 32v64H521.4c30.2 0 54.6-24.5 54.6-54.6c0-6.2-1.1-12.4-3.1-18.2L455.1 74.6C446 49.1 421.9 32 394.8 32H320V96c0 17.7-14.3 32-32 32s-32-14.3-32-32V32zm64 192v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32s32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-barrier\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"block\", \"border\", \"no entry\", \"roadblock\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e562\",\n    \"label\": \"Road Barrier\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V266.3L149.2 96H64V64c0-17.7-14.3-32-32-32zM405.2 96H330.8l-5.4 10.7L234.8 288h74.3l5.4-10.7L405.2 96zM362.8 288h74.3l5.4-10.7L533.2 96H458.8l-5.4 10.7L362.8 288zM202.8 96l-5.4 10.7L106.8 288h74.3l5.4-10.7L277.2 96H202.8zm288 192H576V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v53.7L490.8 288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V266.3L149.2 96H64V64c0-17.7-14.3-32-32-32zM405.2 96H330.8l-5.4 10.7L234.8 288h74.3l5.4-10.7L405.2 96zM362.8 288h74.3l5.4-10.7L533.2 96H458.8l-5.4 10.7L362.8 288zM202.8 96l-5.4 10.7L106.8 288h74.3l5.4-10.7L277.2 96H202.8zm288 192H576V448c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v53.7L490.8 288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-bridge\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bridge\", \"infrastructure\", \"road\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e563\",\n    \"label\": \"Road Bridge\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M352 0H608c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V32c0-17.7 14.3-32 32-32zM480 200c-13.3 0-24 10.7-24 24v64c0 13.3 10.7 24 24 24s24-10.7 24-24V224c0-13.3-10.7-24-24-24zm24 184c0-13.3-10.7-24-24-24s-24 10.7-24 24v64c0 13.3 10.7 24 24 24s24-10.7 24-24V384zM480 40c-13.3 0-24 10.7-24 24v64c0 13.3 10.7 24 24 24s24-10.7 24-24V64c0-13.3-10.7-24-24-24zM32 96H288v64H248v64h40v96c-53 0-96 43-96 96v64c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416c0-53-43-96-96-96V224H72V160H32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm168 64H120v64h80V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M352 0H608c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H352c-17.7 0-32-14.3-32-32V32c0-17.7 14.3-32 32-32zM480 200c-13.3 0-24 10.7-24 24v64c0 13.3 10.7 24 24 24s24-10.7 24-24V224c0-13.3-10.7-24-24-24zm24 184c0-13.3-10.7-24-24-24s-24 10.7-24 24v64c0 13.3 10.7 24 24 24s24-10.7 24-24V384zM480 40c-13.3 0-24 10.7-24 24v64c0 13.3 10.7 24 24 24s24-10.7 24-24V64c0-13.3-10.7-24-24-24zM32 96H288v64H248v64h40v96c-53 0-96 43-96 96v64c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V416c0-53-43-96-96-96V224H72V160H32c-17.7 0-32-14.3-32-32s14.3-32 32-32zm168 64H120v64h80V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"freeway\",\n        \"highway\",\n        \"not affected\",\n        \"ok\",\n        \"okay\",\n        \"pavement\",\n        \"road\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e564\",\n    \"label\": \"Road Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M213.2 32H288V96c0 17.7 14.3 32 32 32s32-14.3 32-32V32h74.8c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32v64H86.6C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M213.2 32H288V96c0 17.7 14.3 32 32 32s32-14.3 32-32V32h74.8c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32v64H86.6C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L480 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"freeway\", \"highway\", \"pavement\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e565\",\n    \"label\": \"Road Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M213.2 32H288V96c0 17.7 14.3 32 32 32s32-14.3 32-32V32h74.8c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32v64H86.6C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M213.2 32H288V96c0 17.7 14.3 32 32 32s32-14.3 32-32V32h74.8c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32v64H86.6C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm0 240a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0-192c-8.8 0-16 7.2-16 16v80c0 8.8 7.2 16 16 16s16-7.2 16-16V288c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"destroy\", \"freeway\", \"highway\", \"pavement\", \"road\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e566\",\n    \"label\": \"Road Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M213.2 32H288V96c0 17.7 14.3 32 32 32s32-14.3 32-32V32h74.8c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32v64H86.6C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M213.2 32H288V96c0 17.7 14.3 32 32 32s32-14.3 32-32V32h74.8c27.1 0 51.3 17.1 60.3 42.6l42.7 120.6c-10.9-2.1-22.2-3.2-33.8-3.2c-59.5 0-112.1 29.6-144 74.8V224c0-17.7-14.3-32-32-32s-32 14.3-32 32v64c0 17.7 14.3 32 32 32c2.3 0 4.6-.3 6.8-.7c-4.5 15.5-6.8 31.8-6.8 48.7c0 5.4 .2 10.7 .7 16l-.7 0c-17.7 0-32 14.3-32 32v64H86.6C56.5 480 32 455.5 32 425.4c0-6.2 1.1-12.4 3.1-18.2L152.9 74.6C162 49.1 186.1 32 213.2 32zM496 224a144 144 0 1 1 0 288 144 144 0 1 1 0-288zm22.6 144l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L496 345.4l-36.7-36.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L473.4 368l-36.7 36.7c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L496 390.6l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L518.6 368z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"closed\",\n        \"freeway\",\n        \"highway\",\n        \"lockdown\",\n        \"pavement\",\n        \"quarantine\",\n        \"road\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e567\",\n    \"label\": \"Road Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M288 32H213.2c-27.1 0-51.3 17.1-60.3 42.6L35.1 407.2c-2.1 5.9-3.1 12-3.1 18.2C32 455.5 56.5 480 86.6 480H288V416c0-17.7 14.3-32 32-32s32 14.3 32 32v64h32V352c0-23.7 12.9-44.4 32-55.4V272c0-58.3 44.6-106.2 101.5-111.5L487.1 74.6C478 49.1 453.9 32 426.8 32H352V96c0 17.7-14.3 32-32 32s-32-14.3-32-32V32zm64 192v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32s32 14.3 32 32zm176 16c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M288 32H213.2c-27.1 0-51.3 17.1-60.3 42.6L35.1 407.2c-2.1 5.9-3.1 12-3.1 18.2C32 455.5 56.5 480 86.6 480H288V416c0-17.7 14.3-32 32-32s32 14.3 32 32v64h32V352c0-23.7 12.9-44.4 32-55.4V272c0-58.3 44.6-106.2 101.5-111.5L487.1 74.6C478 49.1 453.9 32 426.8 32H352V96c0 17.7-14.3 32-32 32s-32-14.3-32-32V32zm64 192v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32s32 14.3 32 32zm176 16c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"road-spikes\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"barrier\", \"roadblock\", \"spikes\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e568\",\n    \"label\": \"Road Spikes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 116.8c0-15.8 20.5-22 29.3-8.9L192 256V116.8c0-15.8 20.5-22 29.3-8.9L320 256V116.8c0-15.8 20.5-22 29.3-8.9L448 256V116.8c0-15.8 20.5-22 29.3-8.9L606.8 302.2c14.2 21.3-1.1 49.7-26.6 49.7H512 448 384 320 256 192 64V116.8zM32 384H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 116.8c0-15.8 20.5-22 29.3-8.9L192 256V116.8c0-15.8 20.5-22 29.3-8.9L320 256V116.8c0-15.8 20.5-22 29.3-8.9L448 256V116.8c0-15.8 20.5-22 29.3-8.9L606.8 302.2c14.2 21.3-1.1 49.7-26.6 49.7H512 448 384 320 256 192 64V116.8zM32 384H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"robot\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f916\"],\n        \"secondary\": [\"10f544\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"5.12.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"android\",\n        \"automate\",\n        \"computer\",\n        \"cyborg\",\n        \"face\",\n        \"monster\",\n        \"robot\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f544\",\n    \"label\": \"Robot\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 0c17.7 0 32 14.3 32 32V96H472c39.8 0 72 32.2 72 72V440c0 39.8-32.2 72-72 72H168c-39.8 0-72-32.2-72-72V168c0-39.8 32.2-72 72-72H288V32c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H208zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H304zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H400zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224H64V416H48c-26.5 0-48-21.5-48-48V272c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H576V224h16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 0c17.7 0 32 14.3 32 32V96H472c39.8 0 72 32.2 72 72V440c0 39.8-32.2 72-72 72H168c-39.8 0-72-32.2-72-72V168c0-39.8 32.2-72 72-72H288V32c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H208zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H304zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H400zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224H64V416H48c-26.5 0-48-21.5-48-48V272c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48H576V224h16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rocket\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f135\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"aircraft\", \"app\", \"jet\", \"launch\", \"nasa\", \"space\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f135\",\n    \"label\": \"Rocket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767636,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M156.6 384.9L125.7 354c-8.5-8.5-11.5-20.8-7.7-32.2c3-8.9 7-20.5 11.8-33.8L24 288c-8.6 0-16.6-4.6-20.9-12.1s-4.2-16.7 .2-24.1l52.5-88.5c13-21.9 36.5-35.3 61.9-35.3l82.3 0c2.4-4 4.8-7.7 7.2-11.3C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-3.5 2.4-7.3 4.8-11.3 7.2v82.3c0 25.4-13.4 49-35.3 61.9l-88.5 52.5c-7.4 4.4-16.6 4.5-24.1 .2s-12.1-12.2-12.1-20.9V380.8c-14.1 4.9-26.4 8.9-35.7 11.9c-11.2 3.6-23.4 .5-31.8-7.8zM384 168a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M156.6 384.9L125.7 354c-8.5-8.5-11.5-20.8-7.7-32.2c3-8.9 7-20.5 11.8-33.8L24 288c-8.6 0-16.6-4.6-20.9-12.1s-4.2-16.7 .2-24.1l52.5-88.5c13-21.9 36.5-35.3 61.9-35.3l82.3 0c2.4-4 4.8-7.7 7.2-11.3C289.1-4.1 411.1-8.1 483.9 5.3c11.6 2.1 20.6 11.2 22.8 22.8c13.4 72.9 9.3 194.8-111.4 276.7c-3.5 2.4-7.3 4.8-11.3 7.2v82.3c0 25.4-13.4 49-35.3 61.9l-88.5 52.5c-7.4 4.4-16.6 4.5-24.1 .2s-12.1-12.2-12.1-20.9V380.8c-14.1 4.9-26.4 8.9-35.7 11.9c-11.2 3.6-23.4 .5-31.8-7.8zM384 168a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rocketchat\": {\n    \"changes\": [\"5.0.0\", \"5.4.2\", \"5.8.0\", \"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e8\",\n    \"label\": \"Rocket.Chat\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M284.046,224.8a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,284.046,224.8Zm-110.45,0a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,173.6,224.8Zm220.923,0a34.114,34.114,0,1,0,34.317,34.113A34.215,34.215,0,0,0,394.519,224.8Zm153.807-55.319c-15.535-24.172-37.31-45.57-64.681-63.618-52.886-34.817-122.374-54-195.666-54a405.975,405.975,0,0,0-72.032,6.357,238.524,238.524,0,0,0-49.51-36.588C99.684-11.7,40.859.711,11.135,11.421A14.291,14.291,0,0,0,5.58,34.782C26.542,56.458,61.222,99.3,52.7,138.252c-33.142,33.9-51.112,74.776-51.112,117.337,0,43.372,17.97,84.248,51.112,118.148,8.526,38.956-26.154,81.816-47.116,103.491a14.284,14.284,0,0,0,5.555,23.34c29.724,10.709,88.549,23.147,155.324-10.2a238.679,238.679,0,0,0,49.51-36.589A405.972,405.972,0,0,0,288,460.14c73.313,0,142.8-19.159,195.667-53.975,27.371-18.049,49.145-39.426,64.679-63.619,17.309-26.923,26.07-55.916,26.07-86.125C574.394,225.4,565.634,196.43,548.326,169.485ZM284.987,409.9a345.65,345.65,0,0,1-89.446-11.5l-20.129,19.393a184.366,184.366,0,0,1-37.138,27.585,145.767,145.767,0,0,1-52.522,14.87c.983-1.771,1.881-3.563,2.842-5.356q30.258-55.68,16.325-100.078c-32.992-25.962-52.778-59.2-52.778-95.4,0-83.1,104.254-150.469,232.846-150.469s232.867,67.373,232.867,150.469C517.854,342.525,413.6,409.9,284.987,409.9Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M284.046,224.8a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,284.046,224.8Zm-110.45,0a34.114,34.114,0,1,0,34.317,34.113A34.217,34.217,0,0,0,173.6,224.8Zm220.923,0a34.114,34.114,0,1,0,34.317,34.113A34.215,34.215,0,0,0,394.519,224.8Zm153.807-55.319c-15.535-24.172-37.31-45.57-64.681-63.618-52.886-34.817-122.374-54-195.666-54a405.975,405.975,0,0,0-72.032,6.357,238.524,238.524,0,0,0-49.51-36.588C99.684-11.7,40.859.711,11.135,11.421A14.291,14.291,0,0,0,5.58,34.782C26.542,56.458,61.222,99.3,52.7,138.252c-33.142,33.9-51.112,74.776-51.112,117.337,0,43.372,17.97,84.248,51.112,118.148,8.526,38.956-26.154,81.816-47.116,103.491a14.284,14.284,0,0,0,5.555,23.34c29.724,10.709,88.549,23.147,155.324-10.2a238.679,238.679,0,0,0,49.51-36.589A405.972,405.972,0,0,0,288,460.14c73.313,0,142.8-19.159,195.667-53.975,27.371-18.049,49.145-39.426,64.679-63.619,17.309-26.923,26.07-55.916,26.07-86.125C574.394,225.4,565.634,196.43,548.326,169.485ZM284.987,409.9a345.65,345.65,0,0,1-89.446-11.5l-20.129,19.393a184.366,184.366,0,0,1-37.138,27.585,145.767,145.767,0,0,1-52.522,14.87c.983-1.771,1.881-3.563,2.842-5.356q30.258-55.68,16.325-100.078c-32.992-25.962-52.778-59.2-52.778-95.4,0-83.1,104.254-150.469,232.846-150.469s232.867,67.373,232.867,150.469C517.854,342.525,413.6,409.9,284.987,409.9Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"rockrms\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e9\",\n    \"label\": \"Rockrms\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"rotate\": {\n    \"aliases\": {\n      \"names\": [\"sync-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f504\"],\n        \"secondary\": [\"10f2f1\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"anticlockwise\",\n        \"arrow\",\n        \"counterclockwise\",\n        \"counterclockwise arrows button\",\n        \"exchange\",\n        \"refresh\",\n        \"reload\",\n        \"rotate\",\n        \"swap\",\n        \"withershins\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2f1\",\n    \"label\": \"Rotate\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M142.9 142.9c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5c0 0 0 0 0 0H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5c7.7-21.8 20.2-42.3 37.8-59.8zM16 312v7.6 .7V440c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l41.6-41.6c87.6 86.5 228.7 86.2 315.8-1c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.2 62.2-162.7 62.5-225.3 1L185 329c6.9-6.9 8.9-17.2 5.2-26.2s-12.5-14.8-22.2-14.8H48.4h-.7H40c-13.3 0-24 10.7-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M142.9 142.9c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5c0 0 0 0 0 0H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5c7.7-21.8 20.2-42.3 37.8-59.8zM16 312v7.6 .7V440c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l41.6-41.6c87.6 86.5 228.7 86.2 315.8-1c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.2 62.2-162.7 62.5-225.3 1L185 329c6.9-6.9 8.9-17.2 5.2-26.2s-12.5-14.8-22.2-14.8H48.4h-.7H40c-13.3 0-24 10.7-24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rotate-left\": {\n    \"aliases\": {\n      \"names\": [\"rotate-back\", \"rotate-backward\", \"undo-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2ea\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"back\", \"control z\", \"exchange\", \"oops\", \"return\", \"swap\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2ea\",\n    \"label\": \"Rotate Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M48.5 224H40c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8H48.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M48.5 224H40c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8H48.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rotate-right\": {\n    \"aliases\": {\n      \"names\": [\"redo-alt\", \"rotate-forward\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2f9\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"refresh\", \"reload\", \"repeat\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2f9\",\n    \"label\": \"Rotate Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M463.5 224H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M463.5 224H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"route\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4d7\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"directions\", \"navigation\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4d7\",\n    \"label\": \"Route\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 96c0 50.2-59.1 125.1-84.6 155c-3.8 4.4-9.4 6.1-14.5 5H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c53 0 96 43 96 96s-43 96-96 96H139.6c8.7-9.9 19.3-22.6 30-36.8c6.3-8.4 12.8-17.6 19-27.2H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-53 0-96-43-96-96s43-96 96-96h39.8c-21-31.5-39.8-67.7-39.8-96c0-53 43-96 96-96s96 43 96 96zM117.1 489.1c-3.8 4.3-7.2 8.1-10.1 11.3l-1.8 2-.2-.2c-6 4.6-14.6 4-20-1.8C59.8 473 0 402.5 0 352c0-53 43-96 96-96s96 43 96 96c0 30-21.1 67-43.5 97.9c-10.7 14.7-21.7 28-30.8 38.5l-.6 .7zM128 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 96c0 50.2-59.1 125.1-84.6 155c-3.8 4.4-9.4 6.1-14.5 5H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c53 0 96 43 96 96s-43 96-96 96H139.6c8.7-9.9 19.3-22.6 30-36.8c6.3-8.4 12.8-17.6 19-27.2H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320c-53 0-96-43-96-96s43-96 96-96h39.8c-21-31.5-39.8-67.7-39.8-96c0-53 43-96 96-96s96 43 96 96zM117.1 489.1c-3.8 4.3-7.2 8.1-10.1 11.3l-1.8 2-.2-.2c-6 4.6-14.6 4-20-1.8C59.8 473 0 402.5 0 352c0-53 43-96 96-96s96 43 96 96c0 30-21.1 67-43.5 97.9c-10.7 14.7-21.7 28-30.8 38.5l-.6 .7zM128 352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rss\": {\n    \"aliases\": {\n      \"names\": [\"feed\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f09e\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blog\", \"feed\", \"journal\", \"news\", \"writing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f09e\",\n    \"label\": \"Rss\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ruble-sign\": {\n    \"aliases\": {\n      \"names\": [\"rouble\", \"rub\", \"ruble\"],\n      \"unicodes\": {\n        \"composite\": [\"20bd\"],\n        \"secondary\": [\"10f158\"]\n      }\n    },\n    \"changes\": [\n      \"4.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Ruble Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f158\",\n    \"label\": \"Ruble Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M96 32C78.3 32 64 46.3 64 64V256H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V416H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H128V320H240c79.5 0 144-64.5 144-144s-64.5-144-144-144H96zM240 256H128V96H240c44.2 0 80 35.8 80 80s-35.8 80-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M96 32C78.3 32 64 46.3 64 64V256H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64v32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V416H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H128V320H240c79.5 0 144-64.5 144-144s-64.5-144-144-144H96zM240 256H128V96H240c44.2 0 80 35.8 80 80s-35.8 80-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rug\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blanket\", \"carpet\", \"rug\", \"textile\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e569\",\n    \"label\": \"Rug\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M24 64H56 80V88v88 80 80 88 24H56 24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V360H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V280H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V200H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V112H24C10.7 112 0 101.3 0 88S10.7 64 24 64zm88 0H528V448H112V64zM640 88c0 13.3-10.7 24-24 24h-8v40h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8v32h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8v32h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8v40h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H584 560V424 336 256 176 88 64h24 32c13.3 0 24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M24 64H56 80V88v88 80 80 88 24H56 24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V360H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V280H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V200H24c-13.3 0-24-10.7-24-24s10.7-24 24-24h8V112H24C10.7 112 0 101.3 0 88S10.7 64 24 64zm88 0H528V448H112V64zM640 88c0 13.3-10.7 24-24 24h-8v40h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8v32h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8v32h8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8v40h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H584 560V424 336 256 176 88 64h24 32c13.3 0 24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ruler\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4cf\"],\n        \"secondary\": [\"10f545\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"design\",\n        \"draft\",\n        \"length\",\n        \"measure\",\n        \"planning\",\n        \"ruler\",\n        \"straight edge\",\n        \"straight ruler\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f545\",\n    \"label\": \"Ruler\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M177.9 494.1c-18.7 18.7-49.1 18.7-67.9 0L17.9 401.9c-18.7-18.7-18.7-49.1 0-67.9l50.7-50.7 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 50.7-50.7c18.7-18.7 49.1-18.7 67.9 0l92.1 92.1c18.7 18.7 18.7 49.1 0 67.9L177.9 494.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M177.9 494.1c-18.7 18.7-49.1 18.7-67.9 0L17.9 401.9c-18.7-18.7-18.7-49.1 0-67.9l50.7-50.7 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 41.4-41.4 48 48c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-48-48 50.7-50.7c18.7-18.7 49.1-18.7 67.9 0l92.1 92.1c18.7 18.7 18.7 49.1 0 67.9L177.9 494.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ruler-combined\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f546\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"draft\", \"length\", \"measure\", \"planning\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f546\",\n    \"label\": \"Ruler Combined\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ruler-horizontal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f547\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"draft\", \"length\", \"measure\", \"planning\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f547\",\n    \"label\": \"Ruler Horizontal\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 336c0 26.5 21.5 48 48 48l544 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48l-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0c-26.5 0-48 21.5-48 48L0 336z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 336c0 26.5 21.5 48 48 48l544 0c26.5 0 48-21.5 48-48l0-160c0-26.5-21.5-48-48-48l-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0c-26.5 0-48 21.5-48 48L0 336z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ruler-vertical\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f548\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"draft\", \"length\", \"measure\", \"planning\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f548\",\n    \"label\": \"Ruler Vertical\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H208c26.5 0 48 21.5 48 48V96H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H208c26.5 0 48 21.5 48 48V96H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v64H176c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v48c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rupee-sign\": {\n    \"aliases\": {\n      \"names\": [\"rupee\"],\n      \"unicodes\": {\n        \"composite\": [\"20a8\"],\n        \"secondary\": [\"10f156\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Rupee Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f156\",\n    \"label\": \"Rupee Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32h80c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320H64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 64zM64 256h48c44.2 0 80-35.8 80-80s-35.8-80-80-80H64V256zm256.5 16.4c-.9 6 0 8.7 .4 9.8c.4 1.1 1.4 2.6 4.2 4.9c7.2 5.7 18.7 10 37.9 16.8l1.3 .5c16 5.6 38.7 13.6 55.7 28.1c9.5 8.1 17.9 18.6 23.1 32.3c5.1 13.7 6.1 28.5 3.8 44c-4.2 28.1-20.5 49.3-43.8 60.9c-22.1 11-48.1 12.5-73.2 8l-.2 0 0 0c-9.3-1.8-20.5-5.7-29.3-9c-6-2.3-12.6-4.9-17.7-6.9l0 0c-2.5-1-4.6-1.8-6.3-2.5c-16.5-6.4-24.6-25-18.2-41.4s24.9-24.6 41.4-18.2c2.6 1 5.2 2 7.9 3.1l0 0c4.8 1.9 9.8 3.9 15.4 6c8.8 3.3 15.3 5.4 18.7 6c15.7 2.8 26.7 .8 32.9-2.3c5-2.5 8-6 9.1-13c1-6.9 .2-10.5-.5-12.3c-.6-1.7-1.8-3.6-4.5-5.9c-6.9-5.8-18.2-10.4-36.9-17l-3-1.1c-15.5-5.4-37-13-53.3-25.9c-9.5-7.5-18.3-17.6-23.7-31c-5.5-13.4-6.6-28-4.4-43.2c8.4-57.1 67-78 116.9-68.9c6.9 1.3 27.3 5.8 35.4 8.4c16.9 5.2 26.3 23.2 21.1 40.1s-23.2 26.3-40.1 21.1c-4.7-1.4-22.3-5.5-27.9-6.5c-14.6-2.7-25.8-.4-32.6 3.2c-6.3 3.3-8.9 7.6-9.5 12z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32h80c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320H64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 64zM64 256h48c44.2 0 80-35.8 80-80s-35.8-80-80-80H64V256zm256.5 16.4c-.9 6 0 8.7 .4 9.8c.4 1.1 1.4 2.6 4.2 4.9c7.2 5.7 18.7 10 37.9 16.8l1.3 .5c16 5.6 38.7 13.6 55.7 28.1c9.5 8.1 17.9 18.6 23.1 32.3c5.1 13.7 6.1 28.5 3.8 44c-4.2 28.1-20.5 49.3-43.8 60.9c-22.1 11-48.1 12.5-73.2 8l-.2 0 0 0c-9.3-1.8-20.5-5.7-29.3-9c-6-2.3-12.6-4.9-17.7-6.9l0 0c-2.5-1-4.6-1.8-6.3-2.5c-16.5-6.4-24.6-25-18.2-41.4s24.9-24.6 41.4-18.2c2.6 1 5.2 2 7.9 3.1l0 0c4.8 1.9 9.8 3.9 15.4 6c8.8 3.3 15.3 5.4 18.7 6c15.7 2.8 26.7 .8 32.9-2.3c5-2.5 8-6 9.1-13c1-6.9 .2-10.5-.5-12.3c-.6-1.7-1.8-3.6-4.5-5.9c-6.9-5.8-18.2-10.4-36.9-17l-3-1.1c-15.5-5.4-37-13-53.3-25.9c-9.5-7.5-18.3-17.6-23.7-31c-5.5-13.4-6.6-28-4.4-43.2c8.4-57.1 67-78 116.9-68.9c6.9 1.3 27.3 5.8 35.4 8.4c16.9 5.2 26.3 23.2 21.1 40.1s-23.2 26.3-40.1 21.1c-4.7-1.4-22.3-5.5-27.9-6.5c-14.6-2.7-25.8-.4-32.6 3.2c-6.3 3.3-8.9 7.6-9.5 12z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rupiah-sign\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e23d\",\n    \"label\": \"Rupiah Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32h80c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320H64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 64zM64 256h48c44.2 0 80-35.8 80-80s-35.8-80-80-80H64V256zm256-96h80c61.9 0 112 50.1 112 112s-50.1 112-112 112H352v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352 192c0-17.7 14.3-32 32-32zm80 160c26.5 0 48-21.5 48-48s-21.5-48-48-48H352v96h48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32h80c79.5 0 144 64.5 144 144c0 58.8-35.2 109.3-85.7 131.7l51.4 128.4c6.6 16.4-1.4 35-17.8 41.6s-35-1.4-41.6-17.8L106.3 320H64V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 64zM64 256h48c44.2 0 80-35.8 80-80s-35.8-80-80-80H64V256zm256-96h80c61.9 0 112 50.1 112 112s-50.1 112-112 112H352v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V352 192c0-17.7 14.3-32 32-32zm80 160c26.5 0 48-21.5 48-48s-21.5-48-48-48H352v96h48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"rust\": {\n    \"changes\": [\"5.13.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e07a\",\n    \"label\": \"Rust\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M508.52,249.75,486.7,236.24c-.17-2-.34-3.93-.55-5.88l18.72-17.5a7.35,7.35,0,0,0-2.44-12.25l-24-9c-.54-1.88-1.08-3.78-1.67-5.64l15-20.83a7.35,7.35,0,0,0-4.79-11.54l-25.42-4.15c-.9-1.73-1.79-3.45-2.73-5.15l10.68-23.42a7.35,7.35,0,0,0-6.95-10.39l-25.82.91q-1.79-2.22-3.61-4.4L439,81.84A7.36,7.36,0,0,0,430.16,73L405,78.93q-2.17-1.83-4.4-3.61l.91-25.82a7.35,7.35,0,0,0-10.39-7L367.7,53.23c-1.7-.94-3.43-1.84-5.15-2.73L358.4,25.08a7.35,7.35,0,0,0-11.54-4.79L326,35.26c-1.86-.59-3.75-1.13-5.64-1.67l-9-24a7.35,7.35,0,0,0-12.25-2.44l-17.5,18.72c-1.95-.21-3.91-.38-5.88-.55L262.25,3.48a7.35,7.35,0,0,0-12.5,0L236.24,25.3c-2,.17-3.93.34-5.88.55L212.86,7.13a7.35,7.35,0,0,0-12.25,2.44l-9,24c-1.89.55-3.79,1.08-5.66,1.68l-20.82-15a7.35,7.35,0,0,0-11.54,4.79l-4.15,25.41c-1.73.9-3.45,1.79-5.16,2.73L120.88,42.55a7.35,7.35,0,0,0-10.39,7l.92,25.81c-1.49,1.19-3,2.39-4.42,3.61L81.84,73A7.36,7.36,0,0,0,73,81.84L78.93,107c-1.23,1.45-2.43,2.93-3.62,4.41l-25.81-.91a7.42,7.42,0,0,0-6.37,3.26,7.35,7.35,0,0,0-.57,7.13l10.66,23.41c-.94,1.7-1.83,3.43-2.73,5.16L25.08,153.6a7.35,7.35,0,0,0-4.79,11.54l15,20.82c-.59,1.87-1.13,3.77-1.68,5.66l-24,9a7.35,7.35,0,0,0-2.44,12.25l18.72,17.5c-.21,1.95-.38,3.91-.55,5.88L3.48,249.75a7.35,7.35,0,0,0,0,12.5L25.3,275.76c.17,2,.34,3.92.55,5.87L7.13,299.13a7.35,7.35,0,0,0,2.44,12.25l24,9c.55,1.89,1.08,3.78,1.68,5.65l-15,20.83a7.35,7.35,0,0,0,4.79,11.54l25.42,4.15c.9,1.72,1.79,3.45,2.73,5.14L42.56,391.12a7.35,7.35,0,0,0,.57,7.13,7.13,7.13,0,0,0,6.37,3.26l25.83-.91q1.77,2.22,3.6,4.4L73,430.16A7.36,7.36,0,0,0,81.84,439L107,433.07q2.18,1.83,4.41,3.61l-.92,25.82a7.35,7.35,0,0,0,10.39,6.95l23.43-10.68c1.69.94,3.42,1.83,5.14,2.73l4.15,25.42a7.34,7.34,0,0,0,11.54,4.78l20.83-15c1.86.6,3.76,1.13,5.65,1.68l9,24a7.36,7.36,0,0,0,12.25,2.44l17.5-18.72c1.95.21,3.92.38,5.88.55l13.51,21.82a7.35,7.35,0,0,0,12.5,0l13.51-21.82c2-.17,3.93-.34,5.88-.56l17.5,18.73a7.36,7.36,0,0,0,12.25-2.44l9-24c1.89-.55,3.78-1.08,5.65-1.68l20.82,15a7.34,7.34,0,0,0,11.54-4.78l4.15-25.42c1.72-.9,3.45-1.79,5.15-2.73l23.42,10.68a7.35,7.35,0,0,0,10.39-6.95l-.91-25.82q2.22-1.79,4.4-3.61L430.16,439a7.36,7.36,0,0,0,8.84-8.84L433.07,405q1.83-2.17,3.61-4.4l25.82.91a7.23,7.23,0,0,0,6.37-3.26,7.35,7.35,0,0,0,.58-7.13L458.77,367.7c.94-1.7,1.83-3.43,2.73-5.15l25.42-4.15a7.35,7.35,0,0,0,4.79-11.54l-15-20.83c.59-1.87,1.13-3.76,1.67-5.65l24-9a7.35,7.35,0,0,0,2.44-12.25l-18.72-17.5c.21-1.95.38-3.91.55-5.87l21.82-13.51a7.35,7.35,0,0,0,0-12.5Zm-151,129.08A13.91,13.91,0,0,0,341,389.51l-7.64,35.67A187.51,187.51,0,0,1,177,424.44l-7.64-35.66a13.87,13.87,0,0,0-16.46-10.68l-31.51,6.76a187.38,187.38,0,0,1-16.26-19.21H258.3c1.72,0,2.89-.29,2.89-1.91V309.55c0-1.57-1.17-1.91-2.89-1.91H213.47l.05-34.35H262c4.41,0,23.66,1.28,29.79,25.87,1.91,7.55,6.17,32.14,9.06,40,2.89,8.82,14.6,26.46,27.1,26.46H407a187.3,187.3,0,0,1-17.34,20.09Zm25.77,34.49A15.24,15.24,0,1,1,368,398.08h.44A15.23,15.23,0,0,1,383.24,413.32Zm-225.62-.68a15.24,15.24,0,1,1-15.25-15.25h.45A15.25,15.25,0,0,1,157.62,412.64ZM69.57,234.15l32.83-14.6a13.88,13.88,0,0,0,7.06-18.33L102.69,186h26.56V305.73H75.65A187.65,187.65,0,0,1,69.57,234.15ZM58.31,198.09a15.24,15.24,0,0,1,15.23-15.25H74a15.24,15.24,0,1,1-15.67,15.24Zm155.16,24.49.05-35.32h63.26c3.28,0,23.07,3.77,23.07,18.62,0,12.29-15.19,16.7-27.68,16.7ZM399,306.71c-9.8,1.13-20.63-4.12-22-10.09-5.78-32.49-15.39-39.4-30.57-51.4,18.86-11.95,38.46-29.64,38.46-53.26,0-25.52-17.49-41.59-29.4-49.48-16.76-11-35.28-13.23-40.27-13.23H116.32A187.49,187.49,0,0,1,221.21,70.06l23.47,24.6a13.82,13.82,0,0,0,19.6.44l26.26-25a187.51,187.51,0,0,1,128.37,91.43l-18,40.57A14,14,0,0,0,408,220.43l34.59,15.33a187.12,187.12,0,0,1,.4,32.54H423.71c-1.91,0-2.69,1.27-2.69,3.13v8.82C421,301,409.31,305.58,399,306.71ZM240,60.21A15.24,15.24,0,0,1,255.21,45h.45A15.24,15.24,0,1,1,240,60.21ZM436.84,214a15.24,15.24,0,1,1,0-30.48h.44a15.24,15.24,0,0,1-.44,30.48Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"s\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"73\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter S\", \"Latin Small Letter S\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"53\",\n    \"label\": \"S\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M99.1 105.4C79 114 68.2 127.2 65.2 144.8c-2.4 14.1-.7 23.2 2 29.4c2.8 6.3 7.9 12.4 16.7 18.6c19.2 13.4 48.3 22.1 84.9 32.5c1 .3 1.9 .6 2.9 .8c32.7 9.3 72 20.6 100.9 40.7c15.7 10.9 29.9 25.5 38.6 45.1c8.8 19.8 10.8 42 6.6 66.3c-7.3 42.5-35.3 71.7-71.8 87.3c-35.4 15.2-79.1 17.9-123.7 10.9l-.2 0 0 0c-24-3.9-62.7-17.1-87.6-25.6c-4.8-1.7-9.2-3.1-12.8-4.3C5.1 440.8-3.9 422.7 1.6 405.9s23.7-25.8 40.5-20.3c4.9 1.6 10.2 3.4 15.9 5.4c25.4 8.6 56.4 19.2 74.4 22.1c36.8 5.7 67.5 2.5 88.5-6.5c20.1-8.6 30.8-21.8 33.9-39.4c2.4-14.1 .7-23.2-2-29.4c-2.8-6.3-7.9-12.4-16.7-18.6c-19.2-13.4-48.3-22.1-84.9-32.5c-1-.3-1.9-.6-2.9-.8c-32.7-9.3-72-20.6-100.9-40.7c-15.7-10.9-29.9-25.5-38.6-45.1c-8.8-19.8-10.8-42-6.6-66.3l31.5 5.5L2.1 133.9C9.4 91.4 37.4 62.2 73.9 46.6c35.4-15.2 79.1-17.9 123.7-10.9c13 2 52.4 9.6 66.6 13.4c17.1 4.5 27.2 22.1 22.7 39.2s-22.1 27.2-39.2 22.7c-11.2-3-48.1-10.2-60.1-12l4.9-31.5-4.9 31.5c-36.9-5.8-67.5-2.5-88.6 6.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M99.1 105.4C79 114 68.2 127.2 65.2 144.8c-2.4 14.1-.7 23.2 2 29.4c2.8 6.3 7.9 12.4 16.7 18.6c19.2 13.4 48.3 22.1 84.9 32.5c1 .3 1.9 .6 2.9 .8c32.7 9.3 72 20.6 100.9 40.7c15.7 10.9 29.9 25.5 38.6 45.1c8.8 19.8 10.8 42 6.6 66.3c-7.3 42.5-35.3 71.7-71.8 87.3c-35.4 15.2-79.1 17.9-123.7 10.9l-.2 0 0 0c-24-3.9-62.7-17.1-87.6-25.6c-4.8-1.7-9.2-3.1-12.8-4.3C5.1 440.8-3.9 422.7 1.6 405.9s23.7-25.8 40.5-20.3c4.9 1.6 10.2 3.4 15.9 5.4c25.4 8.6 56.4 19.2 74.4 22.1c36.8 5.7 67.5 2.5 88.5-6.5c20.1-8.6 30.8-21.8 33.9-39.4c2.4-14.1 .7-23.2-2-29.4c-2.8-6.3-7.9-12.4-16.7-18.6c-19.2-13.4-48.3-22.1-84.9-32.5c-1-.3-1.9-.6-2.9-.8c-32.7-9.3-72-20.6-100.9-40.7c-15.7-10.9-29.9-25.5-38.6-45.1c-8.8-19.8-10.8-42-6.6-66.3l31.5 5.5L2.1 133.9C9.4 91.4 37.4 62.2 73.9 46.6c35.4-15.2 79.1-17.9 123.7-10.9c13 2 52.4 9.6 66.6 13.4c17.1 4.5 27.2 22.1 22.7 39.2s-22.1 27.2-39.2 22.7c-11.2-3-48.1-10.2-60.1-12l4.9-31.5-4.9 31.5c-36.9-5.8-67.5-2.5-88.6 6.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sack-dollar\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4b0\"],\n        \"secondary\": [\"10f81d\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bag\",\n        \"burlap\",\n        \"cash\",\n        \"dollar\",\n        \"money\",\n        \"money bag\",\n        \"moneybag\",\n        \"robber\",\n        \"santa\",\n        \"usd\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f81d\",\n    \"label\": \"Sack Dollar\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M320 96H192L144.6 24.9C137.5 14.2 145.1 0 157.9 0H354.1c12.8 0 20.4 14.2 13.3 24.9L320 96zM192 128H320c3.8 2.5 8.1 5.3 13 8.4C389.7 172.7 512 250.9 512 416c0 53-43 96-96 96H96c-53 0-96-43-96-96C0 250.9 122.3 172.7 179 136.4l0 0 0 0c4.8-3.1 9.2-5.9 13-8.4zm84 88c0-11-9-20-20-20s-20 9-20 20v14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1l0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4V424c0 11 9 20 20 20s20-9 20-20V410.2c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l0 0-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7V216z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M320 96H192L144.6 24.9C137.5 14.2 145.1 0 157.9 0H354.1c12.8 0 20.4 14.2 13.3 24.9L320 96zM192 128H320c3.8 2.5 8.1 5.3 13 8.4C389.7 172.7 512 250.9 512 416c0 53-43 96-96 96H96c-53 0-96-43-96-96C0 250.9 122.3 172.7 179 136.4l0 0 0 0c4.8-3.1 9.2-5.9 13-8.4zm84 88c0-11-9-20-20-20s-20 9-20 20v14c-7.6 1.7-15.2 4.4-22.2 8.5c-13.9 8.3-25.9 22.8-25.8 43.9c.1 20.3 12 33.1 24.7 40.7c11 6.6 24.7 10.8 35.6 14l1.7 .5c12.6 3.8 21.8 6.8 28 10.7c5.1 3.2 5.8 5.4 5.9 8.2c.1 5-1.8 8-5.9 10.5c-5 3.1-12.9 5-21.4 4.7c-11.1-.4-21.5-3.9-35.1-8.5c-2.3-.8-4.7-1.6-7.2-2.4c-10.5-3.5-21.8 2.2-25.3 12.6s2.2 21.8 12.6 25.3c1.9 .6 4 1.3 6.1 2.1l0 0 0 0c8.3 2.9 17.9 6.2 28.2 8.4V424c0 11 9 20 20 20s20-9 20-20V410.2c8-1.7 16-4.5 23.2-9c14.3-8.9 25.1-24.1 24.8-45c-.3-20.3-11.7-33.4-24.6-41.6c-11.5-7.2-25.9-11.6-37.1-15l0 0-.7-.2c-12.8-3.9-21.9-6.7-28.3-10.5c-5.2-3.1-5.3-4.9-5.3-6.7c0-3.7 1.4-6.5 6.2-9.3c5.4-3.2 13.6-5.1 21.5-5c9.6 .1 20.2 2.2 31.2 5.2c10.7 2.8 21.6-3.5 24.5-14.2s-3.5-21.6-14.2-24.5c-6.5-1.7-13.7-3.4-21.1-4.7V216z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sack-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bag\", \"burlap\", \"rations\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e56a\",\n    \"label\": \"Sack Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 96H320l47.4-71.1C374.5 14.2 366.9 0 354.1 0H157.9c-12.8 0-20.4 14.2-13.3 24.9L192 96zm128 32H192c-3.8 2.5-8.1 5.3-13 8.4l0 0 0 0C122.3 172.7 0 250.9 0 416c0 53 43 96 96 96H416c53 0 96-43 96-96c0-165.1-122.3-243.3-179-279.6c-4.8-3.1-9.2-5.9-13-8.4zM289.9 336l47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 96H320l47.4-71.1C374.5 14.2 366.9 0 354.1 0H157.9c-12.8 0-20.4 14.2-13.3 24.9L192 96zm128 32H192c-3.8 2.5-8.1 5.3-13 8.4l0 0 0 0C122.3 172.7 0 250.9 0 416c0 53 43 96 96 96H416c53 0 96-43 96-96c0-165.1-122.3-243.3-179-279.6c-4.8-3.1-9.2-5.9-13-8.4zM289.9 336l47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"safari\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"5.12.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f267\",\n    \"label\": \"Safari\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M274.69,274.69l-37.38-37.38L166,346ZM256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8ZM411.85,182.79l14.78-6.13A8,8,0,0,1,437.08,181h0a8,8,0,0,1-4.33,10.46L418,197.57a8,8,0,0,1-10.45-4.33h0A8,8,0,0,1,411.85,182.79ZM314.43,94l6.12-14.78A8,8,0,0,1,331,74.92h0a8,8,0,0,1,4.33,10.45l-6.13,14.78a8,8,0,0,1-10.45,4.33h0A8,8,0,0,1,314.43,94ZM256,60h0a8,8,0,0,1,8,8V84a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V68A8,8,0,0,1,256,60ZM181,74.92a8,8,0,0,1,10.46,4.33L197.57,94a8,8,0,1,1-14.78,6.12l-6.13-14.78A8,8,0,0,1,181,74.92Zm-63.58,42.49h0a8,8,0,0,1,11.31,0L140,128.72A8,8,0,0,1,140,140h0a8,8,0,0,1-11.31,0l-11.31-11.31A8,8,0,0,1,117.41,117.41ZM60,256h0a8,8,0,0,1,8-8H84a8,8,0,0,1,8,8h0a8,8,0,0,1-8,8H68A8,8,0,0,1,60,256Zm40.15,73.21-14.78,6.13A8,8,0,0,1,74.92,331h0a8,8,0,0,1,4.33-10.46L94,314.43a8,8,0,0,1,10.45,4.33h0A8,8,0,0,1,100.15,329.21Zm4.33-136h0A8,8,0,0,1,94,197.57l-14.78-6.12A8,8,0,0,1,74.92,181h0a8,8,0,0,1,10.45-4.33l14.78,6.13A8,8,0,0,1,104.48,193.24ZM197.57,418l-6.12,14.78a8,8,0,0,1-14.79-6.12l6.13-14.78A8,8,0,1,1,197.57,418ZM264,444a8,8,0,0,1-8,8h0a8,8,0,0,1-8-8V428a8,8,0,0,1,8-8h0a8,8,0,0,1,8,8Zm67-6.92h0a8,8,0,0,1-10.46-4.33L314.43,418a8,8,0,0,1,4.33-10.45h0a8,8,0,0,1,10.45,4.33l6.13,14.78A8,8,0,0,1,331,437.08Zm63.58-42.49h0a8,8,0,0,1-11.31,0L372,383.28A8,8,0,0,1,372,372h0a8,8,0,0,1,11.31,0l11.31,11.31A8,8,0,0,1,394.59,394.59ZM286.25,286.25,110.34,401.66,225.75,225.75,401.66,110.34ZM437.08,331h0a8,8,0,0,1-10.45,4.33l-14.78-6.13a8,8,0,0,1-4.33-10.45h0A8,8,0,0,1,418,314.43l14.78,6.12A8,8,0,0,1,437.08,331ZM444,264H428a8,8,0,0,1-8-8h0a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8h0A8,8,0,0,1,444,264Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sailboat\": {\n    \"changes\": [\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dinghy\", \"mast\", \"sailboat\", \"sailing\", \"yacht\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e445\",\n    \"label\": \"Sailboat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M256 16c0-7 4.5-13.2 11.2-15.3s13.9 .4 17.9 6.1l224 320c3.4 4.9 3.8 11.3 1.1 16.6s-8.2 8.6-14.2 8.6H272c-8.8 0-16-7.2-16-16V16zM212.1 96.5c7 1.9 11.9 8.2 11.9 15.5V336c0 8.8-7.2 16-16 16H80c-5.7 0-11-3-13.8-8s-2.9-11-.1-16l128-224c3.6-6.3 11-9.4 18-7.5zM5.7 404.3C2.8 394.1 10.5 384 21.1 384H554.9c10.6 0 18.3 10.1 15.4 20.3l-4 14.3C550.7 473.9 500.4 512 443 512H133C75.6 512 25.3 473.9 9.7 418.7l-4-14.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M256 16c0-7 4.5-13.2 11.2-15.3s13.9 .4 17.9 6.1l224 320c3.4 4.9 3.8 11.3 1.1 16.6s-8.2 8.6-14.2 8.6H272c-8.8 0-16-7.2-16-16V16zM212.1 96.5c7 1.9 11.9 8.2 11.9 15.5V336c0 8.8-7.2 16-16 16H80c-5.7 0-11-3-13.8-8s-2.9-11-.1-16l128-224c3.6-6.3 11-9.4 18-7.5zM5.7 404.3C2.8 394.1 10.5 384 21.1 384H554.9c10.6 0 18.3 10.1 15.4 20.3l-4 14.3C550.7 473.9 500.4 512 443 512H133C75.6 512 25.3 473.9 9.7 418.7l-4-14.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"salesforce\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f83b\",\n    \"label\": \"Salesforce\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M248.89 245.64h-26.35c.69-5.16 3.32-14.12 13.64-14.12 6.75 0 11.97 3.82 12.71 14.12zm136.66-13.88c-.47 0-14.11-1.77-14.11 20s13.63 20 14.11 20c13 0 14.11-13.54 14.11-20 0-21.76-13.66-20-14.11-20zm-243.22 23.76a8.63 8.63 0 0 0-3.29 7.29c0 4.78 2.08 6.05 3.29 7.05 4.7 3.7 15.07 2.12 20.93.95v-16.94c-5.32-1.07-16.73-1.96-20.93 1.65zM640 232c0 87.58-80 154.39-165.36 136.43-18.37 33-70.73 70.75-132.2 41.63-41.16 96.05-177.89 92.18-213.81-5.17C8.91 428.78-50.19 266.52 53.36 205.61 18.61 126.18 76 32 167.67 32a124.24 124.24 0 0 1 98.56 48.7c20.7-21.4 49.4-34.81 81.15-34.81 42.34 0 79 23.52 98.8 58.57C539 63.78 640 132.69 640 232zm-519.55 31.8c0-11.76-11.69-15.17-17.87-17.17-5.27-2.11-13.41-3.51-13.41-8.94 0-9.46 17-6.66 25.17-2.12 0 0 1.17.71 1.64-.47.24-.7 2.36-6.58 2.59-7.29a1.13 1.13 0 0 0-.7-1.41c-12.33-7.63-40.7-8.51-40.7 12.7 0 12.46 11.49 15.44 17.88 17.17 4.72 1.58 13.17 3 13.17 8.7 0 4-3.53 7.06-9.17 7.06a31.76 31.76 0 0 1-19-6.35c-.47-.23-1.42-.71-1.65.71l-2.4 7.47c-.47.94.23 1.18.23 1.41 1.75 1.4 10.3 6.59 22.82 6.59 13.17 0 21.4-7.06 21.4-18.11zm32-42.58c-10.13 0-18.66 3.17-21.4 5.18a1 1 0 0 0-.24 1.41l2.59 7.06a1 1 0 0 0 1.18.7c.65 0 6.8-4 16.93-4 4 0 7.06.71 9.18 2.36 3.6 2.8 3.06 8.29 3.06 10.58-4.79-.3-19.11-3.44-29.41 3.76a16.92 16.92 0 0 0-7.34 14.54c0 5.9 1.51 10.4 6.59 14.35 12.24 8.16 36.28 2 38.1 1.41 1.58-.32 3.53-.66 3.53-1.88v-33.88c.04-4.61.32-21.64-22.78-21.64zM199 200.24a1.11 1.11 0 0 0-1.18-1.18H188a1.11 1.11 0 0 0-1.17 1.18v79a1.11 1.11 0 0 0 1.17 1.18h9.88a1.11 1.11 0 0 0 1.18-1.18zm55.75 28.93c-2.1-2.31-6.79-7.53-17.65-7.53-3.51 0-14.16.23-20.7 8.94-6.35 7.63-6.58 18.11-6.58 21.41 0 3.12.15 14.26 7.06 21.17 2.64 2.91 9.06 8.23 22.81 8.23 10.82 0 16.47-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.35-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.94-16.7h37.17a1.23 1.23 0 0 0 1.17-.94c-.29 0 2.07-14.7-6.09-24.23zm36.69 52.69c13.17 0 21.41-7.06 21.41-18.11 0-11.76-11.7-15.17-17.88-17.17-4.14-1.66-13.41-3.38-13.41-8.94 0-3.76 3.29-6.35 8.47-6.35a38.11 38.11 0 0 1 16.7 4.23s1.18.71 1.65-.47c.23-.7 2.35-6.58 2.58-7.29a1.13 1.13 0 0 0-.7-1.41c-7.91-4.9-16.74-4.94-20.23-4.94-12 0-20.46 7.29-20.46 17.64 0 12.46 11.48 15.44 17.87 17.17 6.11 2 13.17 3.26 13.17 8.7 0 4-3.52 7.06-9.17 7.06a31.8 31.8 0 0 1-19-6.35 1 1 0 0 0-1.65.71l-2.35 7.52c-.47.94.23 1.18.23 1.41 1.72 1.4 10.33 6.59 22.79 6.59zM357.09 224c0-.71-.24-1.18-1.18-1.18h-11.76c0-.14.94-8.94 4.47-12.47 4.16-4.15 11.76-1.64 12-1.64 1.17.47 1.41 0 1.64-.47l2.83-7.77c.7-.94 0-1.17-.24-1.41-5.09-2-17.35-2.87-24.46 4.24-5.48 5.48-7 13.92-8 19.52h-8.47a1.28 1.28 0 0 0-1.17 1.18l-1.42 7.76c0 .7.24 1.17 1.18 1.17h8.23c-8.51 47.9-8.75 50.21-10.35 55.52-1.08 3.62-3.29 6.9-5.88 7.76-.09 0-3.88 1.68-9.64-.24 0 0-.94-.47-1.41.71-.24.71-2.59 6.82-2.83 7.53s0 1.41.47 1.41c5.11 2 13 1.77 17.88 0 6.28-2.28 9.72-7.89 11.53-12.94 2.75-7.71 2.81-9.79 11.76-59.74h12.23a1.29 1.29 0 0 0 1.18-1.18zm53.39 16c-.56-1.68-5.1-18.11-25.17-18.11-15.25 0-23 10-25.16 18.11-1 3-3.18 14 0 23.52.09.3 4.41 18.12 25.16 18.12 14.95 0 22.9-9.61 25.17-18.12 3.21-9.61 1.01-20.52 0-23.52zm45.4-16.7c-5-1.65-16.62-1.9-22.11 5.41v-4.47a1.11 1.11 0 0 0-1.18-1.17h-9.4a1.11 1.11 0 0 0-1.18 1.17v55.28a1.12 1.12 0 0 0 1.18 1.18h9.64a1.12 1.12 0 0 0 1.18-1.18v-27.77c0-2.91.05-11.37 4.46-15.05 4.9-4.9 12-3.36 13.41-3.06a1.57 1.57 0 0 0 1.41-.94 74 74 0 0 0 3.06-8 1.16 1.16 0 0 0-.47-1.41zm46.81 54.1l-2.12-7.29c-.47-1.18-1.41-.71-1.41-.71-4.23 1.82-10.15 1.89-11.29 1.89-4.64 0-17.17-1.13-17.17-19.76 0-6.23 1.85-19.76 16.47-19.76a34.85 34.85 0 0 1 11.52 1.65s.94.47 1.18-.71c.94-2.59 1.64-4.47 2.59-7.53.23-.94-.47-1.17-.71-1.17-11.59-3.87-22.34-2.53-27.76 0-1.59.74-16.23 6.49-16.23 27.52 0 2.9-.58 30.11 28.94 30.11a44.45 44.45 0 0 0 15.52-2.83 1.3 1.3 0 0 0 .47-1.42zm53.87-39.52c-.8-3-5.37-16.23-22.35-16.23-16 0-23.52 10.11-25.64 18.59a38.58 38.58 0 0 0-1.65 11.76c0 25.87 18.84 29.4 29.88 29.4 10.82 0 16.46-2.35 18.58-3.76.47-.24.71-.71.24-1.88l-2.36-6.83a1.26 1.26 0 0 0-1.41-.7c-2.59.94-6.35 2.82-15.29 2.82-17.42 0-16.85-14.74-16.93-16.7h37.16a1.25 1.25 0 0 0 1.18-.94c-.24-.01.94-7.07-1.41-15.54zm-23.29-6.35c-10.33 0-13 9-13.64 14.12H546c-.88-11.92-7.62-14.13-12.73-14.13z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sass\": {\n    \"changes\": [\"5.0.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f41e\",\n    \"label\": \"Sass\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M301.84 378.92c-.3.6-.6 1.08 0 0zm249.13-87a131.16 131.16 0 0 0-58 13.5c-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.3-6.7-24 2.5-25.29 5.9a122.83 122.83 0 0 0-5.3 19.1c-2.3 11.7-25.79 53.5-39.09 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2-1.4-6.6-14.29-6.7-24 2.5-25.3 5.9-2.7 11.4-5.3 19.1-33.89 77.3-42.08 95.4c-4.2 9.2-7.8 16.6-10.4 21.6-.4.8-.7 1.3-.9 1.7.3-.5.5-1 .5-.8-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2s-1.4 2-1.4 2 10.1-42.4-19.39-42.4c-18.4 0-44 20.2-56.58 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.79-38.2-101.87-65.2-99.07-116.5 1-18.7 7.5-67.8 127.07-127.4 98-48.8 176.35-35.4 189.84-5.6 19.4 42.5-41.89 121.6-143.66 133-38.79 4.3-59.18-10.7-64.28-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.79 28.9 18.7 6.1 64.18 9.5 119.17-11.8 61.78-23.8 109.87-90.1 95.77-145.6C386.52 18.32 293-.18 204.57 31.22c-52.69 18.7-109.67 48.1-150.66 86.4-48.69 45.6-56.48 85.3-53.28 101.9 11.39 58.9 92.57 97.3 125.06 125.7-1.6.9-3.1 1.7-4.5 2.5-16.29 8.1-78.18 40.5-93.67 74.7-17.5 38.8 2.9 66.6 16.29 70.4 41.79 11.6 84.58-9.3 107.57-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.29-4.9 16.39-9.4 23.49-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.49 5 15.39 5 13.8 0 20-11.4 26.89-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.39 0 18.79-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.59-46 16.2-31.8 31.69-71.5 31.69-71.5a201.24 201.24 0 0 0 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2a.31.31 0 0 0 .1.2c-3 4-6.4 8.3-9.9 12.5-12.79 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.69 2.5 11.5-.8 19.6-3.6 23.5-5.4a82.2 82.2 0 0 0 20.19-10.6c12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5C434.8 301.72 450.1 270 450.1 270a201.24 201.24 0 0 0 6.2 25.8c2.4 8.1 7.09 17 11.39 25.7-18.59 15.1-30.09 32.6-34.09 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5a79.46 79.46 0 0 0 21.59-11.1c12.5-9.2 24.59-22.1 23.79-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.09-10.2 62.09-7.2 55.68 6.5 66.58 41.3 64.48 55.8s-13.8 22.6-17.7 25-5.1 3.3-4.8 5.1c.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.19-11.8 30.29-38.7 1.6-34-31.09-71.4-89-71.1zm-429.18 144.7c-18.39 20.1-44.19 27.7-55.28 21.3C54.61 451 59.31 421.42 82 400c13.8-13 31.59-25 43.39-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.29 30.4.3 57.2-19.1 78.3zm134.36-91.4c-6.4 15.7-19.89 55.7-28.09 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.09-11.3 21.19-14.9 23.79-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.89-13.9 0 .5.1 1 .1 1.6-.13 17.9-17.32 30-25.12 34.8zm85.58-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.59-15.3 19-24.5a36.18 36.18 0 0 1 1.9 10.8c-.1 22.5-16.2 30.9-25.89 34.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"satellite\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6f0\"],\n        \"secondary\": [\"10f7bf\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.10.1\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"communications\", \"hardware\", \"orbit\", \"satellite\", \"space\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7bf\",\n    \"label\": \"Satellite\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M233 7c-9.4-9.4-24.6-9.4-33.9 0l-96 96c-9.4 9.4-9.4 24.6 0 33.9l89.4 89.4-15.5 15.5C152.3 230.4 124.9 224 96 224c-31.7 0-61.5 7.7-87.8 21.2c-9 4.7-10.3 16.7-3.1 23.8L112.7 376.7 96.3 393.1c-2.6-.7-5.4-1.1-8.3-1.1c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32c0-2.9-.4-5.6-1.1-8.3l16.4-16.4L242.9 506.9c7.2 7.2 19.2 5.9 23.8-3.1C280.3 477.5 288 447.7 288 416c0-28.9-6.4-56.3-17.8-80.9l15.5-15.5L375 409c9.4 9.4 24.6 9.4 33.9 0l96-96c9.4-9.4 9.4-24.6 0-33.9l-89.4-89.4 55-55c12.5-12.5 12.5-32.8 0-45.3l-48-48c-12.5-12.5-32.8-12.5-45.3 0l-55 55L233 7zm159 351l-72.4-72.4 62.1-62.1L454.1 296 392 358.1zM226.3 192.4L153.9 120 216 57.9l72.4 72.4-62.1 62.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M233 7c-9.4-9.4-24.6-9.4-33.9 0l-96 96c-9.4 9.4-9.4 24.6 0 33.9l89.4 89.4-15.5 15.5C152.3 230.4 124.9 224 96 224c-31.7 0-61.5 7.7-87.8 21.2c-9 4.7-10.3 16.7-3.1 23.8L112.7 376.7 96.3 393.1c-2.6-.7-5.4-1.1-8.3-1.1c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32c0-2.9-.4-5.6-1.1-8.3l16.4-16.4L242.9 506.9c7.2 7.2 19.2 5.9 23.8-3.1C280.3 477.5 288 447.7 288 416c0-28.9-6.4-56.3-17.8-80.9l15.5-15.5L375 409c9.4 9.4 24.6 9.4 33.9 0l96-96c9.4-9.4 9.4-24.6 0-33.9l-89.4-89.4 55-55c12.5-12.5 12.5-32.8 0-45.3l-48-48c-12.5-12.5-32.8-12.5-45.3 0l-55 55L233 7zm159 351l-72.4-72.4 62.1-62.1L454.1 296 392 358.1zM226.3 192.4L153.9 120 216 57.9l72.4 72.4-62.1 62.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"satellite-dish\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4e1\"],\n        \"secondary\": [\"10f7c0\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.12.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"SETI\",\n        \"antenna\",\n        \"communications\",\n        \"dish\",\n        \"hardware\",\n        \"radar\",\n        \"receiver\",\n        \"satellite\",\n        \"satellite antenna\",\n        \"saucer\",\n        \"signal\",\n        \"space\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7c0\",\n    \"label\": \"Satellite Dish\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 32c0-17.7 14.3-32 32-32C383.1 0 512 128.9 512 288c0 17.7-14.3 32-32 32s-32-14.3-32-32C448 164.3 347.7 64 224 64c-17.7 0-32-14.3-32-32zM60.6 220.6L164.7 324.7l28.4-28.4c-.7-2.6-1.1-5.4-1.1-8.3c0-17.7 14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32c-2.9 0-5.6-.4-8.3-1.1l-28.4 28.4L291.4 451.4c14.5 14.5 11.8 38.8-7.3 46.3C260.5 506.9 234.9 512 208 512C93.1 512 0 418.9 0 304c0-26.9 5.1-52.5 14.4-76.1c7.5-19 31.8-21.8 46.3-7.3zM224 96c106 0 192 86 192 192c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-70.7-57.3-128-128-128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 32c0-17.7 14.3-32 32-32C383.1 0 512 128.9 512 288c0 17.7-14.3 32-32 32s-32-14.3-32-32C448 164.3 347.7 64 224 64c-17.7 0-32-14.3-32-32zM60.6 220.6L164.7 324.7l28.4-28.4c-.7-2.6-1.1-5.4-1.1-8.3c0-17.7 14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32c-2.9 0-5.6-.4-8.3-1.1l-28.4 28.4L291.4 451.4c14.5 14.5 11.8 38.8-7.3 46.3C260.5 506.9 234.9 512 208 512C93.1 512 0 418.9 0 304c0-26.9 5.1-52.5 14.4-76.1c7.5-19 31.8-21.8 46.3-7.3zM224 96c106 0 192 86 192 192c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-70.7-57.3-128-128-128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"scale-balanced\": {\n    \"aliases\": {\n      \"names\": [\"balance-scale\"],\n      \"unicodes\": {\n        \"composite\": [\"2696\"],\n        \"secondary\": [\"10f24e\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Libra\",\n        \"balance\",\n        \"balance scale\",\n        \"balanced\",\n        \"justice\",\n        \"law\",\n        \"legal\",\n        \"measure\",\n        \"rule\",\n        \"scale\",\n        \"weight\",\n        \"zodiac\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f24e\",\n    \"label\": \"Scale Balanced\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M384 32H512c17.7 0 32 14.3 32 32s-14.3 32-32 32H398.4c-5.2 25.8-22.9 47.1-46.4 57.3V448H512c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 128c-17.7 0-32-14.3-32-32s14.3-32 32-32H288V153.3c-23.5-10.3-41.2-31.6-46.4-57.3H128c-17.7 0-32-14.3-32-32s14.3-32 32-32H256c14.6-19.4 37.8-32 64-32s49.4 12.6 64 32zm55.6 288H584.4L512 195.8 439.6 320zM512 416c-62.9 0-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C627.2 382 574.9 416 512 416zM126.8 195.8L54.4 320H199.3L126.8 195.8zM.9 337.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C242 382 189.7 416 126.8 416S11.7 382 .9 337.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M384 32H512c17.7 0 32 14.3 32 32s-14.3 32-32 32H398.4c-5.2 25.8-22.9 47.1-46.4 57.3V448H512c17.7 0 32 14.3 32 32s-14.3 32-32 32H320 128c-17.7 0-32-14.3-32-32s14.3-32 32-32H288V153.3c-23.5-10.3-41.2-31.6-46.4-57.3H128c-17.7 0-32-14.3-32-32s14.3-32 32-32H256c14.6-19.4 37.8-32 64-32s49.4 12.6 64 32zm55.6 288H584.4L512 195.8 439.6 320zM512 416c-62.9 0-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C627.2 382 574.9 416 512 416zM126.8 195.8L54.4 320H199.3L126.8 195.8zM.9 337.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C242 382 189.7 416 126.8 416S11.7 382 .9 337.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"scale-unbalanced\": {\n    \"aliases\": {\n      \"names\": [\"balance-scale-left\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f515\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.9.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"justice\", \"legal\", \"measure\", \"unbalanced\", \"weight\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f515\",\n    \"label\": \"Scale Unbalanced\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M522.1 62.4c16.8-5.6 25.8-23.7 20.2-40.5S518.6-3.9 501.9 1.6l-113 37.7C375 15.8 349.3 0 320 0c-44.2 0-80 35.8-80 80c0 3 .2 5.9 .5 8.8L117.9 129.6c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l135.5-45.2c4.5 3.2 9.3 5.9 14.4 8.2V480c0 17.7 14.3 32 32 32H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V153.3c21-9.2 37.2-27 44.2-49l125.9-42zM439.6 288L512 163.8 584.4 288H439.6zM512 384c62.9 0 115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L536.1 109.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L392.7 273.1c-5.7 9.8-9.3 21.1-6.7 32.1C396.8 350 449.1 384 512 384zM129.2 291.8L201.6 416H56.7l72.4-124.2zM3.2 433.1C14 478 66.3 512 129.2 512s115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L153.2 237.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L9.9 401.1c-5.7 9.8-9.3 21.1-6.7 32.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M522.1 62.4c16.8-5.6 25.8-23.7 20.2-40.5S518.6-3.9 501.9 1.6l-113 37.7C375 15.8 349.3 0 320 0c-44.2 0-80 35.8-80 80c0 3 .2 5.9 .5 8.8L117.9 129.6c-16.8 5.6-25.8 23.7-20.2 40.5s23.7 25.8 40.5 20.2l135.5-45.2c4.5 3.2 9.3 5.9 14.4 8.2V480c0 17.7 14.3 32 32 32H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V153.3c21-9.2 37.2-27 44.2-49l125.9-42zM439.6 288L512 163.8 584.4 288H439.6zM512 384c62.9 0 115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L536.1 109.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L392.7 273.1c-5.7 9.8-9.3 21.1-6.7 32.1C396.8 350 449.1 384 512 384zM129.2 291.8L201.6 416H56.7l72.4-124.2zM3.2 433.1C14 478 66.3 512 129.2 512s115.2-34 126-78.9c2.6-11-1-22.3-6.7-32.1L153.2 237.8c-5-8.6-14.2-13.8-24.1-13.8s-19.1 5.3-24.1 13.8L9.9 401.1c-5.7 9.8-9.3 21.1-6.7 32.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"scale-unbalanced-flip\": {\n    \"aliases\": {\n      \"names\": [\"balance-scale-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f516\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.9.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"justice\", \"legal\", \"measure\", \"unbalanced\", \"weight\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f516\",\n    \"label\": \"Scale Unbalanced Flip\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M117.9 62.4c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l113 37.7C265 15.8 290.7 0 320 0c44.2 0 80 35.8 80 80c0 3-.2 5.9-.5 8.8l122.6 40.9c16.8 5.6 25.8 23.7 20.2 40.5s-23.7 25.8-40.5 20.2L366.4 145.2c-4.5 3.2-9.3 5.9-14.4 8.2V480c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32s14.3-32 32-32H288V153.3c-21-9.2-37.2-27-44.2-49l-125.9-42zM200.4 288L128 163.8 55.6 288H200.4zM128 384C65.1 384 12.8 350 2 305.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C243.2 350 190.9 384 128 384zm382.8-92.2L438.4 416H583.3L510.8 291.8zm126 141.3C626 478 573.7 512 510.8 512s-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M117.9 62.4c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l113 37.7C265 15.8 290.7 0 320 0c44.2 0 80 35.8 80 80c0 3-.2 5.9-.5 8.8l122.6 40.9c16.8 5.6 25.8 23.7 20.2 40.5s-23.7 25.8-40.5 20.2L366.4 145.2c-4.5 3.2-9.3 5.9-14.4 8.2V480c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32s14.3-32 32-32H288V153.3c-21-9.2-37.2-27-44.2-49l-125.9-42zM200.4 288L128 163.8 55.6 288H200.4zM128 384C65.1 384 12.8 350 2 305.1c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1C243.2 350 190.9 384 128 384zm382.8-92.2L438.4 416H583.3L510.8 291.8zm126 141.3C626 478 573.7 512 510.8 512s-115.2-34-126-78.9c-2.6-11 1-22.3 6.7-32.1l95.2-163.2c5-8.6 14.2-13.8 24.1-13.8s19.1 5.3 24.1 13.8l95.2 163.2c5.7 9.8 9.3 21.1 6.7 32.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"schlix\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ea\",\n    \"label\": \"SCHLIX\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"school\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3eb\"],\n        \"secondary\": [\"10f549\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"education\",\n        \"learn\",\n        \"school\",\n        \"student\",\n        \"teacher\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f549\",\n    \"label\": \"School\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM256 416c0-35.3 28.7-64 64-64s64 28.7 64 64v96H256V416zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H512c-8.8 0-16-7.2-16-16V208zM96 320h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H512c-8.8 0-16-7.2-16-16V336zM232 176a88 88 0 1 1 176 0 88 88 0 1 1 -176 0zm88-48c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H592c26.5 0 48-21.5 48-48V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM256 416c0-35.3 28.7-64 64-64s64 28.7 64 64v96H256V416zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H512c-8.8 0-16-7.2-16-16V208zM96 320h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm400 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H512c-8.8 0-16-7.2-16-16V336zM232 176a88 88 0 1 1 176 0 88 88 0 1 1 -176 0zm88-48c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"school-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"not affected\", \"ok\", \"okay\", \"schoolhouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e56b\",\n    \"label\": \"School Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H320v0H256V416c0-35.3 28.7-64 64-64l.3 0h.5c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm0 128h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-99.3-43.3c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H320v0H256V416c0-35.3 28.7-64 64-64l.3 0h.5c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm0 128h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16zM640 368a144 144 0 1 0 -288 0 144 144 0 1 0 288 0zm-99.3-43.3c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-72 72c-6.2 6.2-16.4 6.2-22.6 0l-40-40c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L480 385.4l60.7-60.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"school-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"schoolhouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e56c\",\n    \"label\": \"School Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H320v0H256V416c0-35.3 28.7-64 64-64l.3 0h.5c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm0 128h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H320v0H256V416c0-35.3 28.7-64 64-64l.3 0h.5c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm0 128h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"school-circle-xmark\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"destroy\", \"schoolhouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e56d\",\n    \"label\": \"School Circle Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H320v0H256V416c0-35.3 28.7-64 64-64l.3 0h.5c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm0 128h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 368z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M337.8 5.4C327-1.8 313-1.8 302.2 5.4L166.3 96H48C21.5 96 0 117.5 0 144V464c0 26.5 21.5 48 48 48H320v0H256V416c0-35.3 28.7-64 64-64l.3 0h.5c3.4-37.7 18.7-72.1 42.2-99.1C350.2 260 335.6 264 320 264c-48.6 0-88-39.4-88-88s39.4-88 88-88s88 39.4 88 88c0 18.3-5.6 35.3-15.1 49.4c29-21 64.6-33.4 103.1-33.4c59.5 0 112.1 29.6 144 74.8V144c0-26.5-21.5-48-48-48H473.7L337.8 5.4zM96 192h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V208c0-8.8 7.2-16 16-16zm0 128h32c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H96c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zM320 128c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H336V144c0-8.8-7.2-16-16-16zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm22.6-144l36.7 36.7c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0L496 390.6l-36.7 36.7c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6L473.4 368l-36.7-36.7c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0L496 345.4l36.7-36.7c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6L518.6 368z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"school-flag\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"educate\", \"flag\", \"school\", \"schoolhouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e56e\",\n    \"label\": \"School Flag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 0H400c8.8 0 16 7.2 16 16V80c0 8.8-7.2 16-16 16H320.7l89.6 64H512c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H336V400c0-26.5-21.5-48-48-48s-48 21.5-48 48V512H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64H165.7L256 95.5V32c0-17.7 14.3-32 32-32zm48 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM80 224c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm368 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H464c-8.8 0-16 7.2-16 16zM80 352c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H80zm384 0c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H464z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 0H400c8.8 0 16 7.2 16 16V80c0 8.8-7.2 16-16 16H320.7l89.6 64H512c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H336V400c0-26.5-21.5-48-48-48s-48 21.5-48 48V512H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64H165.7L256 95.5V32c0-17.7 14.3-32 32-32zm48 240a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM80 224c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H80zm368 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16H464c-8.8 0-16 7.2-16 16zM80 352c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H80zm384 0c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H464z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"school-lock\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"closed\", \"lockdown\", \"quarantine\", \"schoolhouse\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e56f\",\n    \"label\": \"School Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M302.2 5.4c10.7-7.2 24.8-7.2 35.5 0L473.7 96H592c26.5 0 48 21.5 48 48V272c0-61.9-50.1-112-112-112s-112 50.1-112 112v24.6c-19.1 11.1-32 31.7-32 55.4H320.3l-.3 0c-35.3 0-64 28.7-64 64v96h64v0H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48H166.3L302.2 5.4zM80 208v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H96c-8.8 0-16 7.2-16 16zm0 128v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-8.8-7.2-16-16-16H96c-8.8 0-16 7.2-16 16zm240-72a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm16-120v16h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H320c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16s16 7.2 16 16zm192 96c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M302.2 5.4c10.7-7.2 24.8-7.2 35.5 0L473.7 96H592c26.5 0 48 21.5 48 48V272c0-61.9-50.1-112-112-112s-112 50.1-112 112v24.6c-19.1 11.1-32 31.7-32 55.4H320.3l-.3 0c-35.3 0-64 28.7-64 64v96h64v0H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48H166.3L302.2 5.4zM80 208v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16H96c-8.8 0-16 7.2-16 16zm0 128v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-8.8-7.2-16-16-16H96c-8.8 0-16 7.2-16 16zm240-72a88 88 0 1 0 0-176 88 88 0 1 0 0 176zm16-120v16h16c8.8 0 16 7.2 16 16s-7.2 16-16 16H320c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16s16 7.2 16 16zm192 96c-17.7 0-32 14.3-32 32v48h64V272c0-17.7-14.3-32-32-32zm-80 32c0-44.2 35.8-80 80-80s80 35.8 80 80v48c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H448c-17.7 0-32-14.3-32-32V352c0-17.7 14.3-32 32-32V272z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"scissors\": {\n    \"aliases\": {\n      \"names\": [\"cut\"],\n      \"unicodes\": {\n        \"composite\": [\"2700\", \"2702\", \"2704\"],\n        \"secondary\": [\"10f0c4\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Safety Scissors\",\n        \"White Scissors\",\n        \"clip\",\n        \"cutting\",\n        \"scissors\",\n        \"snip\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c4\",\n    \"label\": \"Scissors\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 192l-39.5-39.5c4.9-12.6 7.5-26.2 7.5-40.5C224 50.1 173.9 0 112 0S0 50.1 0 112s50.1 112 112 112c14.3 0 27.9-2.7 40.5-7.5L192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5C50.1 288 0 338.1 0 400s50.1 112 112 112s112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6c-28.3-28.3-74.1-28.3-102.4 0L256 192zm22.6 150.6L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0c7.1-7.1 7.1-18.5 0-25.6L342.6 278.6l-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 192l-39.5-39.5c4.9-12.6 7.5-26.2 7.5-40.5C224 50.1 173.9 0 112 0S0 50.1 0 112s50.1 112 112 112c14.3 0 27.9-2.7 40.5-7.5L192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5C50.1 288 0 338.1 0 400s50.1 112 112 112s112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6c-28.3-28.3-74.1-28.3-102.4 0L256 192zm22.6 150.6L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0c7.1-7.1 7.1-18.5 0-25.6L342.6 278.6l-64 64zM64 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm48 240a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"screenpal\": {\n    \"changes\": [\"6.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e570\",\n    \"label\": \"Screenpal\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M233.5 22.49C233.5 10.07 243.6 0 256 0C268.4 0 278.5 10.07 278.5 22.49C278.5 34.91 268.4 44.98 256 44.98C243.6 44.98 233.5 34.91 233.5 22.49zM313.4 259C313.4 290.7 287.7 316.4 256 316.4C224.3 316.4 198.6 290.7 198.6 259C198.6 227.3 224.3 201.6 256 201.6C287.7 201.6 313.4 227.3 313.4 259zM337.2 350C359.5 330.1 373.7 302.7 377.1 273H496.6C493.1 334.4 466.2 392.2 421.4 434.4C376.7 476.6 317.5 500.2 256 500.2C194.5 500.2 135.3 476.6 90.56 434.4C45.83 392.2 18.94 334.4 15.39 273H135.1C138.5 302.7 152.7 330.1 175 350C197.3 369.9 226.2 380.9 256.1 380.9C285.1 380.9 314.8 369.9 337.2 350zM73.14 140.3C73.54 152.7 63.81 163.1 51.39 163.5C38.97 163.9 28.59 154.2 28.18 141.8C27.78 129.3 37.52 118.9 49.94 118.5C62.35 118.1 72.74 127.9 73.14 140.3zM438.9 141C438.9 128.6 448.9 118.5 461.4 118.5C473.8 118.5 483.8 128.6 483.8 141C483.8 153.5 473.8 163.5 461.4 163.5C448.9 163.5 438.9 153.5 438.9 141zM317.9 95.27C300.6 109.1 278.7 118.1 256 118.1C233.3 118.1 211.4 109.1 194.1 95.27C176.8 80.55 165.3 60.18 161.7 37.78C176.8 31.37 192.5 26.52 208.6 23.31C208.6 35.88 213.6 47.93 222.5 56.82C231.4 65.7 243.4 70.7 256 70.7C268.6 70.7 280.6 65.7 289.5 56.82C298.4 47.93 303.4 35.88 303.4 23.31C319.5 26.52 335.2 31.37 350.3 37.78C346.7 60.18 335.2 80.55 317.9 95.27H317.9zM82.78 231C61.42 238.6 38.06 238.4 16.86 230.4C18.82 214.1 22.46 198.1 27.71 182.5C33.1 185.6 39.05 187.6 45.22 188.5C51.39 189.3 57.67 188.9 63.68 187.3C69.69 185.6 75.33 182.9 80.27 179.1C85.21 175.3 89.36 170.6 92.47 165.2C95.58 159.8 97.61 153.8 98.42 147.7C99.23 141.5 98.83 135.2 97.22 129.2C95.61 123.2 92.83 117.6 89.04 112.6C85.25 107.7 80.53 103.5 75.14 100.4C85.96 88.11 98.01 76.94 111.1 67.07C128.7 81.42 140.6 101.6 144.7 123.9C148.8 146.2 144.8 169.3 133.5 188.9C122.1 208.5 104.1 223.4 82.78 231V231zM429.2 231.1C407.9 223.5 389.9 208.5 378.5 188.9C367.2 169.3 363.3 146.2 367.4 123.9C371.5 101.7 383.4 81.54 400.9 67.19C414 77.04 426.1 88.21 436.9 100.5C426.2 106.9 418.5 117.2 415.4 129.3C412.2 141.3 413.1 154.1 420.2 164.9C426.4 175.7 436.6 183.6 448.6 186.9C460.6 190.2 473.5 188.6 484.3 182.6C489.6 198.1 493.2 214.2 495.2 230.4C473.1 238.5 450.6 238.7 429.2 231.1L429.2 231.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M233.5 22.49C233.5 10.07 243.6 0 256 0C268.4 0 278.5 10.07 278.5 22.49C278.5 34.91 268.4 44.98 256 44.98C243.6 44.98 233.5 34.91 233.5 22.49zM313.4 259C313.4 290.7 287.7 316.4 256 316.4C224.3 316.4 198.6 290.7 198.6 259C198.6 227.3 224.3 201.6 256 201.6C287.7 201.6 313.4 227.3 313.4 259zM337.2 350C359.5 330.1 373.7 302.7 377.1 273H496.6C493.1 334.4 466.2 392.2 421.4 434.4C376.7 476.6 317.5 500.2 256 500.2C194.5 500.2 135.3 476.6 90.56 434.4C45.83 392.2 18.94 334.4 15.39 273H135.1C138.5 302.7 152.7 330.1 175 350C197.3 369.9 226.2 380.9 256.1 380.9C285.1 380.9 314.8 369.9 337.2 350zM73.14 140.3C73.54 152.7 63.81 163.1 51.39 163.5C38.97 163.9 28.59 154.2 28.18 141.8C27.78 129.3 37.52 118.9 49.94 118.5C62.35 118.1 72.74 127.9 73.14 140.3zM438.9 141C438.9 128.6 448.9 118.5 461.4 118.5C473.8 118.5 483.8 128.6 483.8 141C483.8 153.5 473.8 163.5 461.4 163.5C448.9 163.5 438.9 153.5 438.9 141zM317.9 95.27C300.6 109.1 278.7 118.1 256 118.1C233.3 118.1 211.4 109.1 194.1 95.27C176.8 80.55 165.3 60.18 161.7 37.78C176.8 31.37 192.5 26.52 208.6 23.31C208.6 35.88 213.6 47.93 222.5 56.82C231.4 65.7 243.4 70.7 256 70.7C268.6 70.7 280.6 65.7 289.5 56.82C298.4 47.93 303.4 35.88 303.4 23.31C319.5 26.52 335.2 31.37 350.3 37.78C346.7 60.18 335.2 80.55 317.9 95.27H317.9zM82.78 231C61.42 238.6 38.06 238.4 16.86 230.4C18.82 214.1 22.46 198.1 27.71 182.5C33.1 185.6 39.05 187.6 45.22 188.5C51.39 189.3 57.67 188.9 63.68 187.3C69.69 185.6 75.33 182.9 80.27 179.1C85.21 175.3 89.36 170.6 92.47 165.2C95.58 159.8 97.61 153.8 98.42 147.7C99.23 141.5 98.83 135.2 97.22 129.2C95.61 123.2 92.83 117.6 89.04 112.6C85.25 107.7 80.53 103.5 75.14 100.4C85.96 88.11 98.01 76.94 111.1 67.07C128.7 81.42 140.6 101.6 144.7 123.9C148.8 146.2 144.8 169.3 133.5 188.9C122.1 208.5 104.1 223.4 82.78 231V231zM429.2 231.1C407.9 223.5 389.9 208.5 378.5 188.9C367.2 169.3 363.3 146.2 367.4 123.9C371.5 101.7 383.4 81.54 400.9 67.19C414 77.04 426.1 88.21 436.9 100.5C426.2 106.9 418.5 117.2 415.4 129.3C412.2 141.3 413.1 154.1 420.2 164.9C426.4 175.7 436.6 183.6 448.6 186.9C460.6 190.2 473.5 188.6 484.3 182.6C489.6 198.1 493.2 214.2 495.2 230.4C473.1 238.5 450.6 238.7 429.2 231.1L429.2 231.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"screwdriver\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1fa9b\"],\n        \"secondary\": [\"10f54a\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"fix\",\n        \"mechanic\",\n        \"repair\",\n        \"screw\",\n        \"screwdriver\",\n        \"settings\",\n        \"tool\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f54a\",\n    \"label\": \"Screwdriver\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M465 7c-8.5-8.5-22-9.4-31.6-2.1l-104 80c-5.9 4.5-9.4 11.6-9.4 19v54.1l-85.6 85.6c6.7 4.2 13 9.3 18.8 15.1s10.9 12.2 15.1 18.8L353.9 192H408c7.5 0 14.5-3.5 19-9.4l80-104c7.4-9.6 6.5-23.1-2.1-31.6L465 7zM121.4 281.4l-112 112c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l112-112c30.2-30.2 30.2-79.1 0-109.3s-79.1-30.2-109.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M465 7c-8.5-8.5-22-9.4-31.6-2.1l-104 80c-5.9 4.5-9.4 11.6-9.4 19v54.1l-85.6 85.6c6.7 4.2 13 9.3 18.8 15.1s10.9 12.2 15.1 18.8L353.9 192H408c7.5 0 14.5-3.5 19-9.4l80-104c7.4-9.6 6.5-23.1-2.1-31.6L465 7zM121.4 281.4l-112 112c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l112-112c30.2-30.2 30.2-79.1 0-109.3s-79.1-30.2-109.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"screwdriver-wrench\": {\n    \"aliases\": {\n      \"names\": [\"tools\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f7d9\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"fix\",\n        \"repair\",\n        \"screwdriver\",\n        \"settings\",\n        \"tools\",\n        \"wrench\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7d9\",\n    \"label\": \"Screwdriver Wrench\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4h54.1l109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109V104c0-7.5-3.5-14.5-9.4-19L78.6 5zM19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7L19.9 396.1zM512 144c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7H352c-8.8 0-16-7.2-16-16V102.6c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144l0 .8 85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5c49-23 83-72.8 83-130.5zM56 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M78.6 5C69.1-2.4 55.6-1.5 47 7L7 47c-8.5 8.5-9.4 22-2.1 31.6l80 104c4.5 5.9 11.6 9.4 19 9.4h54.1l109 109c-14.7 29-10 65.4 14.3 89.6l112 112c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-112-112c-24.2-24.2-60.6-29-89.6-14.3l-109-109V104c0-7.5-3.5-14.5-9.4-19L78.6 5zM19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L233.7 374.3c-7.8-20.9-9-43.6-3.6-65.1l-61.7-61.7L19.9 396.1zM512 144c0-10.5-1.1-20.7-3.2-30.5c-2.4-11.2-16.1-14.1-24.2-6l-63.9 63.9c-3 3-7.1 4.7-11.3 4.7H352c-8.8 0-16-7.2-16-16V102.6c0-4.2 1.7-8.3 4.7-11.3l63.9-63.9c8.1-8.1 5.2-21.8-6-24.2C388.7 1.1 378.5 0 368 0C288.5 0 224 64.5 224 144l0 .8 85.3 85.3c36-9.1 75.8 .5 104 28.7L429 274.5c49-23 83-72.8 83-130.5zM56 432a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"scribd\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f28a\",\n    \"label\": \"Scribd\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"scroll\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f4dc\"],\n        \"secondary\": [\"10f70e\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"announcement\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"paper\",\n        \"script\",\n        \"scroll\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f70e\",\n    \"label\": \"Scroll\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 80v48c0 17.7 14.3 32 32 32H48 96V80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48V384c0 35.3 28.7 64 64 64s64-28.7 64-64v-5.3c0-32.4 26.3-58.7 58.7-58.7H480V128c0-53-43-96-96-96H112zM464 480c61.9 0 112-50.1 112-112c0-8.8-7.2-16-16-16H314.7c-14.7 0-26.7 11.9-26.7 26.7V384c0 53-43 96-96 96H368h96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 80v48c0 17.7 14.3 32 32 32H48 96V80c0-26.5-21.5-48-48-48S0 53.5 0 80zM112 32c10 13.4 16 30 16 48V384c0 35.3 28.7 64 64 64s64-28.7 64-64v-5.3c0-32.4 26.3-58.7 58.7-58.7H480V128c0-53-43-96-96-96H112zM464 480c61.9 0 112-50.1 112-112c0-8.8-7.2-16-16-16H314.7c-14.7 0-26.7 11.9-26.7 26.7V384c0 53-43 96-96 96H368h96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"scroll-torah\": {\n    \"aliases\": {\n      \"names\": [\"torah\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f6a0\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.7.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"book\", \"jewish\", \"judaism\", \"religion\", \"scroll\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6a0\",\n    \"label\": \"Scroll Torah\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767393,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 480V32C96 14.3 74.5 0 48 0S0 14.3 0 32V480c0 17.7 21.5 32 48 32s48-14.3 48-32zM512 32H128V480H512V32zM592 0c-26.5 0-48 14.3-48 32V480c0 17.7 21.5 32 48 32s48-14.3 48-32V32c0-17.7-21.5-32-48-32zM196 313.7c0-3.2 .9-6.4 2.5-9.2L226.7 256l-28.3-48.5c-1.6-2.8-2.5-6-2.5-9.2c0-10.1 8.2-18.3 18.3-18.3H271l31.4-53.9c3.6-6.3 10.3-10.1 17.6-10.1s13.9 3.8 17.6 10.1L369 180h56.7c10.1 0 18.3 8.2 18.3 18.3c0 3.2-.9 6.4-2.5 9.2L413.3 256l28.3 48.5c1.6 2.8 2.5 6 2.5 9.2c0 10.1-8.2 18.3-18.3 18.3H369l-31.4 53.9c-3.6 6.3-10.3 10.1-17.6 10.1s-13.9-3.8-17.6-10.1L271 332H214.3c-10.1 0-18.3-8.2-18.3-18.3zm124 54.7L341.2 332H298.8L320 368.4zM254.5 256l30.3 52h70.4l30.3-52-30.3-52H284.8l-30.3 52zm144.9 23.8L383 308h32.8l-16.4-28.2zM415.8 204H383l16.4 28.2L415.8 204zM320 143.6L298.8 180h42.4L320 143.6zM224.2 204l16.4 28.2L257 204H224.2zM257 308l-16.4-28.2L224.2 308H257z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 480V32C96 14.3 74.5 0 48 0S0 14.3 0 32V480c0 17.7 21.5 32 48 32s48-14.3 48-32zM512 32H128V480H512V32zM592 0c-26.5 0-48 14.3-48 32V480c0 17.7 21.5 32 48 32s48-14.3 48-32V32c0-17.7-21.5-32-48-32zM196 313.7c0-3.2 .9-6.4 2.5-9.2L226.7 256l-28.3-48.5c-1.6-2.8-2.5-6-2.5-9.2c0-10.1 8.2-18.3 18.3-18.3H271l31.4-53.9c3.6-6.3 10.3-10.1 17.6-10.1s13.9 3.8 17.6 10.1L369 180h56.7c10.1 0 18.3 8.2 18.3 18.3c0 3.2-.9 6.4-2.5 9.2L413.3 256l28.3 48.5c1.6 2.8 2.5 6 2.5 9.2c0 10.1-8.2 18.3-18.3 18.3H369l-31.4 53.9c-3.6 6.3-10.3 10.1-17.6 10.1s-13.9-3.8-17.6-10.1L271 332H214.3c-10.1 0-18.3-8.2-18.3-18.3zm124 54.7L341.2 332H298.8L320 368.4zM254.5 256l30.3 52h70.4l30.3-52-30.3-52H284.8l-30.3 52zm144.9 23.8L383 308h32.8l-16.4-28.2zM415.8 204H383l16.4 28.2L415.8 204zM320 143.6L298.8 180h42.4L320 143.6zM224.2 204l16.4 28.2L257 204H224.2zM257 308l-16.4-28.2L224.2 308H257z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sd-card\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7c2\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"image\", \"memory\", \"photo\", \"save\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7c2\",\n    \"label\": \"Sd Card\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M320 0H141.3C124.3 0 108 6.7 96 18.7L18.7 96C6.7 108 0 124.3 0 141.3V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 88v48c0 13.3-10.7 24-24 24s-24-10.7-24-24V88c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0v48c0 13.3-10.7 24-24 24s-24-10.7-24-24V88c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0v48c0 13.3-10.7 24-24 24s-24-10.7-24-24V88c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M320 0H141.3C124.3 0 108 6.7 96 18.7L18.7 96C6.7 108 0 124.3 0 141.3V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 88v48c0 13.3-10.7 24-24 24s-24-10.7-24-24V88c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0v48c0 13.3-10.7 24-24 24s-24-10.7-24-24V88c0-13.3 10.7-24 24-24s24 10.7 24 24zm80 0v48c0 13.3-10.7 24-24 24s-24-10.7-24-24V88c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"searchengin\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3eb\",\n    \"label\": \"Searchengin\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 460 512\\\"><path d=\\\"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 460, 512],\n        \"width\": 460,\n        \"height\": 512,\n        \"path\": \"M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"section\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Section Sign\", \"law\", \"legal\", \"silcrow\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e447\",\n    \"label\": \"Section\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M64.9 96C67.1 84.4 73.7 76.2 86 70.6c13.8-6.2 34.8-8.9 61.2-4.5c8.8 1.4 36.1 7.1 44.1 9.3c17 4.8 34.7-5.1 39.5-22.2s-5.1-34.7-22.2-39.5c-11.1-3.1-41-9.2-50.9-10.8C123-2.7 88.3-.6 59.7 12.3C29.9 25.8 7.5 50.9 1.6 86.5c-.1 .5-.2 1.1-.2 1.6c-2.2 19.7 .3 37.9 8.1 54.1c7.7 16.1 19.4 28 32 36.9c.6 .5 1.3 .9 2 1.4C22.3 194.2 6.5 215.1 1.7 243c-.1 .6-.2 1.1-.2 1.7c-2.3 19.3 .4 37.1 8.4 53c7.9 15.6 19.8 27 32.3 35.5c22.4 15.2 51.9 24 75.4 31l0 0 3.7 1.1c27.2 8.2 46.9 14.6 59.4 23.8c5.5 4 8.2 7.6 9.5 10.9c1.3 3.2 2.6 8.6 .9 18.1c-1.7 10.1-7.7 18-20.7 23.5c-14 6-35.4 8.5-62 4.4c-12.8-2.1-35.1-9.7-54.1-16.2l0 0c-4.3-1.5-8.5-2.9-12.3-4.2C25.3 420 7.2 429.1 1.6 445.8s3.5 34.9 20.3 40.5c2.6 .8 5.7 1.9 9.2 3.1c18.6 6.3 48.5 16.6 67.3 19.6l0 0 .2 0c34.5 5.4 68.8 3.4 97.2-8.7c29.4-12.6 52.5-36.5 58.5-71.5c3.3-19.3 1.9-37.4-5-53.9c-6.3-15-16.4-26.4-27.6-35.2c16.5-13.9 28.5-33.2 32.6-58.2c3.2-19.8 1.9-38.3-4.8-55.1c-6.7-16.8-17.8-29.4-30.2-39c-22.8-17.6-53.6-27.4-77.7-35l-1.4-.5c-27.4-8.7-47.8-15.3-61.5-25c-6.1-4.4-9.5-8.5-11.4-12.4c-1.8-3.7-3.2-9.3-2.3-18.5zm76.7 208.5c-.2-.1-.4-.1-.6-.2l-1.4-.4c-27.4-8.2-47.9-14.5-61.7-23.8c-6.2-4.2-9.3-7.9-11-11.3c-1.5-3-2.9-7.7-2.1-15.7c1.9-9.7 7.9-17.3 20.5-22.7c14-6 35.4-8.5 62.1-4.3l16.4 2.6c6.3 2.9 11.7 6 16.2 9.5c5.5 4.2 8.4 8.2 10 12.2c1.6 4 2.8 10.4 1.1 20.9c-2.4 14.7-12.8 26.4-37.1 31l-12.4 2.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M64.9 96C67.1 84.4 73.7 76.2 86 70.6c13.8-6.2 34.8-8.9 61.2-4.5c8.8 1.4 36.1 7.1 44.1 9.3c17 4.8 34.7-5.1 39.5-22.2s-5.1-34.7-22.2-39.5c-11.1-3.1-41-9.2-50.9-10.8C123-2.7 88.3-.6 59.7 12.3C29.9 25.8 7.5 50.9 1.6 86.5c-.1 .5-.2 1.1-.2 1.6c-2.2 19.7 .3 37.9 8.1 54.1c7.7 16.1 19.4 28 32 36.9c.6 .5 1.3 .9 2 1.4C22.3 194.2 6.5 215.1 1.7 243c-.1 .6-.2 1.1-.2 1.7c-2.3 19.3 .4 37.1 8.4 53c7.9 15.6 19.8 27 32.3 35.5c22.4 15.2 51.9 24 75.4 31l0 0 3.7 1.1c27.2 8.2 46.9 14.6 59.4 23.8c5.5 4 8.2 7.6 9.5 10.9c1.3 3.2 2.6 8.6 .9 18.1c-1.7 10.1-7.7 18-20.7 23.5c-14 6-35.4 8.5-62 4.4c-12.8-2.1-35.1-9.7-54.1-16.2l0 0c-4.3-1.5-8.5-2.9-12.3-4.2C25.3 420 7.2 429.1 1.6 445.8s3.5 34.9 20.3 40.5c2.6 .8 5.7 1.9 9.2 3.1c18.6 6.3 48.5 16.6 67.3 19.6l0 0 .2 0c34.5 5.4 68.8 3.4 97.2-8.7c29.4-12.6 52.5-36.5 58.5-71.5c3.3-19.3 1.9-37.4-5-53.9c-6.3-15-16.4-26.4-27.6-35.2c16.5-13.9 28.5-33.2 32.6-58.2c3.2-19.8 1.9-38.3-4.8-55.1c-6.7-16.8-17.8-29.4-30.2-39c-22.8-17.6-53.6-27.4-77.7-35l-1.4-.5c-27.4-8.7-47.8-15.3-61.5-25c-6.1-4.4-9.5-8.5-11.4-12.4c-1.8-3.7-3.2-9.3-2.3-18.5zm76.7 208.5c-.2-.1-.4-.1-.6-.2l-1.4-.4c-27.4-8.2-47.9-14.5-61.7-23.8c-6.2-4.2-9.3-7.9-11-11.3c-1.5-3-2.9-7.7-2.1-15.7c1.9-9.7 7.9-17.3 20.5-22.7c14-6 35.4-8.5 62.1-4.3l16.4 2.6c6.3 2.9 11.7 6 16.2 9.5c5.5 4.2 8.4 8.2 10 12.2c1.6 4 2.8 10.4 1.1 20.9c-2.4 14.7-12.8 26.4-37.1 31l-12.4 2.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"seedling\": {\n    \"aliases\": {\n      \"names\": [\"sprout\"],\n      \"unicodes\": {\n        \"composite\": [\"1f331\"],\n        \"secondary\": [\"10f4d8\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"environment\",\n        \"flora\",\n        \"grow\",\n        \"plant\",\n        \"sapling\",\n        \"seedling\",\n        \"vegan\",\n        \"young\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4d8\",\n    \"label\": \"Seedling\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768130,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 32c0 113.6-84.6 207.5-194.2 222c-7.1-53.4-30.6-101.6-65.3-139.3C290.8 46.3 364 0 448 0h32c17.7 0 32 14.3 32 32zM0 96C0 78.3 14.3 64 32 64H64c123.7 0 224 100.3 224 224v32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V320C100.3 320 0 219.7 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 32c0 113.6-84.6 207.5-194.2 222c-7.1-53.4-30.6-101.6-65.3-139.3C290.8 46.3 364 0 448 0h32c17.7 0 32 14.3 32 32zM0 96C0 78.3 14.3 64 32 64H64c123.7 0 224 100.3 224 224v32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V320C100.3 320 0 219.7 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sellcast\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"eercast\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2da\",\n    \"label\": \"Sellcast\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sellsy\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f213\",\n    \"label\": \"Sellsy\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"server\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f233\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"computer\", \"cpu\", \"database\", \"hardware\", \"network\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f233\",\n    \"label\": \"Server\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm48 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM64 288c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V352c0-35.3-28.7-64-64-64H64zm280 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm56 24a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"servicestack\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ec\",\n    \"label\": \"Servicestack\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"shapes\": {\n    \"aliases\": {\n      \"names\": [\"triangle-circle-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f61f\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blocks\", \"build\", \"circle\", \"square\", \"triangle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f61f\",\n    \"label\": \"Shapes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M315.4 15.5C309.7 5.9 299.2 0 288 0s-21.7 5.9-27.4 15.5l-96 160c-5.9 9.9-6.1 22.2-.4 32.2s16.3 16.2 27.8 16.2H384c11.5 0 22.2-6.2 27.8-16.2s5.5-22.3-.4-32.2l-96-160zM288 312V456c0 22.1 17.9 40 40 40H472c22.1 0 40-17.9 40-40V312c0-22.1-17.9-40-40-40H328c-22.1 0-40 17.9-40 40zM128 512a128 128 0 1 0 0-256 128 128 0 1 0 0 256z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M315.4 15.5C309.7 5.9 299.2 0 288 0s-21.7 5.9-27.4 15.5l-96 160c-5.9 9.9-6.1 22.2-.4 32.2s16.3 16.2 27.8 16.2H384c11.5 0 22.2-6.2 27.8-16.2s5.5-22.3-.4-32.2l-96-160zM288 312V456c0 22.1 17.9 40 40 40H472c22.1 0 40-17.9 40-40V312c0-22.1-17.9-40-40-40H328c-22.1 0-40 17.9-40 40zM128 512a128 128 0 1 0 0-256 128 128 0 1 0 0 256z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"share\": {\n    \"aliases\": {\n      \"names\": [\"arrow-turn-right\", \"mail-forward\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f064\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"save\", \"send\", \"social\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f064\",\n    \"label\": \"Share\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M307 34.8c-11.5 5.1-19 16.6-19 29.2v64H176C78.8 128 0 206.8 0 304C0 417.3 81.5 467.9 100.2 478.1c2.5 1.4 5.3 1.9 8.1 1.9c10.9 0 19.7-8.9 19.7-19.7c0-7.5-4.3-14.4-9.8-19.5C108.8 431.9 96 414.4 96 384c0-53 43-96 96-96h96v64c0 12.6 7.4 24.1 19 29.2s25 3 34.4-5.4l160-144c6.7-6.1 10.6-14.7 10.6-23.8s-3.8-17.7-10.6-23.8l-160-144c-9.4-8.5-22.9-10.6-34.4-5.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M307 34.8c-11.5 5.1-19 16.6-19 29.2v64H176C78.8 128 0 206.8 0 304C0 417.3 81.5 467.9 100.2 478.1c2.5 1.4 5.3 1.9 8.1 1.9c10.9 0 19.7-8.9 19.7-19.7c0-7.5-4.3-14.4-9.8-19.5C108.8 431.9 96 414.4 96 384c0-53 43-96 96-96h96v64c0 12.6 7.4 24.1 19 29.2s25 3 34.4-5.4l160-144c6.7-6.1 10.6-14.7 10.6-23.8s-3.8-17.7-10.6-23.8l-160-144c-9.4-8.5-22.9-10.6-34.4-5.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"share-from-square\": {\n    \"aliases\": {\n      \"names\": [\"share-square\"],\n      \"unicodes\": {\n        \"composite\": [\"f045\"],\n        \"secondary\": [\"10f14d\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"save\", \"send\", \"social\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f14d\",\n    \"label\": \"Share From Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M352 224H305.5c-45 0-81.5 36.5-81.5 81.5c0 22.3 10.3 34.3 19.2 40.5c6.8 4.7 12.8 12 12.8 20.3c0 9.8-8 17.8-17.8 17.8h-2.5c-2.4 0-4.8-.4-7.1-1.4C210.8 374.8 128 333.4 128 240c0-79.5 64.5-144 144-144h80V34.7C352 15.5 367.5 0 386.7 0c8.6 0 16.8 3.2 23.2 8.9L548.1 133.3c7.6 6.8 11.9 16.5 11.9 26.7s-4.3 19.9-11.9 26.7l-139 125.1c-5.9 5.3-13.5 8.2-21.4 8.2H384c-17.7 0-32-14.3-32-32V224zM80 96c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16H400c8.8 0 16-7.2 16-16V384c0-17.7 14.3-32 32-32s32 14.3 32 32v48c0 44.2-35.8 80-80 80H80c-44.2 0-80-35.8-80-80V112C0 67.8 35.8 32 80 32h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M352 224H305.5c-45 0-81.5 36.5-81.5 81.5c0 22.3 10.3 34.3 19.2 40.5c6.8 4.7 12.8 12 12.8 20.3c0 9.8-8 17.8-17.8 17.8h-2.5c-2.4 0-4.8-.4-7.1-1.4C210.8 374.8 128 333.4 128 240c0-79.5 64.5-144 144-144h80V34.7C352 15.5 367.5 0 386.7 0c8.6 0 16.8 3.2 23.2 8.9L548.1 133.3c7.6 6.8 11.9 16.5 11.9 26.7s-4.3 19.9-11.9 26.7l-139 125.1c-5.9 5.3-13.5 8.2-21.4 8.2H384c-17.7 0-32-14.3-32-32V224zM80 96c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16H400c8.8 0 16-7.2 16-16V384c0-17.7 14.3-32 32-32s32 14.3 32 32v48c0 44.2-35.8 80-80 80H80c-44.2 0-80-35.8-80-80V112C0 67.8 35.8 32 80 32h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H80z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M400 255.4V240 208c0-8.8-7.2-16-16-16H352 336 289.5c-50.9 0-93.9 33.5-108.3 79.6c-3.3-9.4-5.2-19.8-5.2-31.6c0-61.9 50.1-112 112-112h48 16 32c8.8 0 16-7.2 16-16V80 64.6L506 160 400 255.4zM336 240h16v48c0 17.7 14.3 32 32 32h3.7c7.9 0 15.5-2.9 21.4-8.2l139-125.1c7.6-6.8 11.9-16.5 11.9-26.7s-4.3-19.9-11.9-26.7L409.9 8.9C403.5 3.2 395.3 0 386.7 0C367.5 0 352 15.5 352 34.7V80H336 304 288c-88.4 0-160 71.6-160 160c0 60.4 34.6 99.1 63.9 120.9c5.9 4.4 11.5 8.1 16.7 11.2c4.4 2.7 8.5 4.9 11.9 6.6c3.4 1.7 6.2 3 8.2 3.9c2.2 1 4.6 1.4 7.1 1.4h2.5c9.8 0 17.8-8 17.8-17.8c0-7.8-5.3-14.7-11.6-19.5l0 0c-.4-.3-.7-.5-1.1-.8c-1.7-1.1-3.4-2.5-5-4.1c-.8-.8-1.7-1.6-2.5-2.6s-1.6-1.9-2.4-2.9c-1.8-2.5-3.5-5.3-5-8.5c-2.6-6-4.3-13.3-4.3-22.4c0-36.1 29.3-65.5 65.5-65.5H304h32zM72 32C32.2 32 0 64.2 0 104V440c0 39.8 32.2 72 72 72H408c39.8 0 72-32.2 72-72V376c0-13.3-10.7-24-24-24s-24 10.7-24 24v64c0 13.3-10.7 24-24 24H72c-13.3 0-24-10.7-24-24V104c0-13.3 10.7-24 24-24h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H72z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M400 255.4V240 208c0-8.8-7.2-16-16-16H352 336 289.5c-50.9 0-93.9 33.5-108.3 79.6c-3.3-9.4-5.2-19.8-5.2-31.6c0-61.9 50.1-112 112-112h48 16 32c8.8 0 16-7.2 16-16V80 64.6L506 160 400 255.4zM336 240h16v48c0 17.7 14.3 32 32 32h3.7c7.9 0 15.5-2.9 21.4-8.2l139-125.1c7.6-6.8 11.9-16.5 11.9-26.7s-4.3-19.9-11.9-26.7L409.9 8.9C403.5 3.2 395.3 0 386.7 0C367.5 0 352 15.5 352 34.7V80H336 304 288c-88.4 0-160 71.6-160 160c0 60.4 34.6 99.1 63.9 120.9c5.9 4.4 11.5 8.1 16.7 11.2c4.4 2.7 8.5 4.9 11.9 6.6c3.4 1.7 6.2 3 8.2 3.9c2.2 1 4.6 1.4 7.1 1.4h2.5c9.8 0 17.8-8 17.8-17.8c0-7.8-5.3-14.7-11.6-19.5l0 0c-.4-.3-.7-.5-1.1-.8c-1.7-1.1-3.4-2.5-5-4.1c-.8-.8-1.7-1.6-2.5-2.6s-1.6-1.9-2.4-2.9c-1.8-2.5-3.5-5.3-5-8.5c-2.6-6-4.3-13.3-4.3-22.4c0-36.1 29.3-65.5 65.5-65.5H304h32zM72 32C32.2 32 0 64.2 0 104V440c0 39.8 32.2 72 72 72H408c39.8 0 72-32.2 72-72V376c0-13.3-10.7-24-24-24s-24 10.7-24 24v64c0 13.3-10.7 24-24 24H72c-13.3 0-24-10.7-24-24V104c0-13.3 10.7-24 24-24h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H72z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"share-nodes\": {\n    \"aliases\": {\n      \"names\": [\"share-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1e0\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"save\", \"send\", \"social\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1e0\",\n    \"label\": \"Share Nodes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M352 224c53 0 96-43 96-96s-43-96-96-96s-96 43-96 96c0 4 .2 8 .7 11.9l-94.1 47C145.4 170.2 121.9 160 96 160c-53 0-96 43-96 96s43 96 96 96c25.9 0 49.4-10.2 66.6-26.9l94.1 47c-.5 3.9-.7 7.8-.7 11.9c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-25.9 0-49.4 10.2-66.6 26.9l-94.1-47c.5-3.9 .7-7.8 .7-11.9s-.2-8-.7-11.9l94.1-47C302.6 213.8 326.1 224 352 224z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sheet-plastic\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"plastic\",\n        \"plastic wrap\",\n        \"protect\",\n        \"tarp\",\n        \"tarpaulin\",\n        \"waterproof\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e571\",\n    \"label\": \"Sheet Plastic\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 448c0 35.3 28.7 64 64 64H224V384c0-17.7 14.3-32 32-32H384V64c0-35.3-28.7-64-64-64H64C28.7 0 0 28.7 0 64V448zM171.3 75.3l-96 96c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l96-96c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zm96 32l-160 160c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l160-160c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zM384 384H256V512L384 384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 448c0 35.3 28.7 64 64 64H224V384c0-17.7 14.3-32 32-32H384V64c0-35.3-28.7-64-64-64H64C28.7 0 0 28.7 0 64V448zM171.3 75.3l-96 96c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l96-96c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zm96 32l-160 160c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6l160-160c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6zM384 384H256V512L384 384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shekel-sign\": {\n    \"aliases\": {\n      \"names\": [\"ils\", \"shekel\", \"sheqel\", \"sheqel-sign\"],\n      \"unicodes\": {\n        \"composite\": [\"20aa\"],\n        \"secondary\": [\"10f20b\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"New Sheqel Sign\", \"currency\", \"ils\", \"money\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f20b\",\n    \"label\": \"Shekel Sign\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V96H192c35.3 0 64 28.7 64 64V320c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-70.7-57.3-128-128-128H32zM320 480c70.7 0 128-57.3 128-128V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V352c0 35.3-28.7 64-64 64H192V192c0-17.7-14.3-32-32-32s-32 14.3-32 32V448c0 17.7 14.3 32 32 32H320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64V448c0 17.7 14.3 32 32 32s32-14.3 32-32V96H192c35.3 0 64 28.7 64 64V320c0 17.7 14.3 32 32 32s32-14.3 32-32V160c0-70.7-57.3-128-128-128H32zM320 480c70.7 0 128-57.3 128-128V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V352c0 35.3-28.7 64-64 64H192V192c0-17.7-14.3-32-32-32s-32 14.3-32 32V448c0 17.7 14.3 32 32 32H320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shield\": {\n    \"aliases\": {\n      \"names\": [\"shield-blank\"],\n      \"unicodes\": {\n        \"composite\": [\"1f6e1\"],\n        \"secondary\": [\"10f132\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"achievement\",\n        \"armor\",\n        \"award\",\n        \"block\",\n        \"cleric\",\n        \"defend\",\n        \"defense\",\n        \"holy\",\n        \"paladin\",\n        \"protect\",\n        \"safety\",\n        \"security\",\n        \"shield\",\n        \"weapon\",\n        \"winner\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f132\",\n    \"label\": \"Shield\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shield-cat\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"animal\", \"feline\", \"pet\", \"protect\", \"safety\", \"veterinary\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e572\",\n    \"label\": \"Shield Cat\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160 154.4c0-5.8 4.7-10.4 10.4-10.4h.2c3.4 0 6.5 1.6 8.5 4.3l40 53.3c3 4 7.8 6.4 12.8 6.4h48c5 0 9.8-2.4 12.8-6.4l40-53.3c2-2.7 5.2-4.3 8.5-4.3h.2c5.8 0 10.4 4.7 10.4 10.4V272c0 53-43 96-96 96s-96-43-96-96V154.4zM216 288a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm96-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160 154.4c0-5.8 4.7-10.4 10.4-10.4h.2c3.4 0 6.5 1.6 8.5 4.3l40 53.3c3 4 7.8 6.4 12.8 6.4h48c5 0 9.8-2.4 12.8-6.4l40-53.3c2-2.7 5.2-4.3 8.5-4.3h.2c5.8 0 10.4 4.7 10.4 10.4V272c0 53-43 96-96 96s-96-43-96-96V154.4zM216 288a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm96-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shield-dog\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"animal\", \"canine\", \"pet\", \"protect\", \"safety\", \"veterinary\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e573\",\n    \"label\": \"Shield Dog\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160.9 286.2c4.8 1.2 9.9 1.8 15.1 1.8c35.3 0 64-28.7 64-64V160h44.2c12.1 0 23.2 6.8 28.6 17.7L320 192h64c8.8 0 16 7.2 16 16v32c0 44.2-35.8 80-80 80H272v50.7c0 7.3-5.9 13.3-13.3 13.3c-1.8 0-3.6-.4-5.2-1.1l-98.7-42.3c-6.6-2.8-10.8-9.3-10.8-16.4c0-2.8 .6-5.5 1.9-8l15-30zM160 160h40 8v32 32c0 17.7-14.3 32-32 32s-32-14.3-32-32V176c0-8.8 7.2-16 16-16zm128 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM160.9 286.2c4.8 1.2 9.9 1.8 15.1 1.8c35.3 0 64-28.7 64-64V160h44.2c12.1 0 23.2 6.8 28.6 17.7L320 192h64c8.8 0 16 7.2 16 16v32c0 44.2-35.8 80-80 80H272v50.7c0 7.3-5.9 13.3-13.3 13.3c-1.8 0-3.6-.4-5.2-1.1l-98.7-42.3c-6.6-2.8-10.8-9.3-10.8-16.4c0-2.8 .6-5.5 1.9-8l15-30zM160 160h40 8v32 32c0 17.7-14.3 32-32 32s-32-14.3-32-32V176c0-8.8 7.2-16 16-16zm128 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shield-halved\": {\n    \"aliases\": {\n      \"names\": [\"shield-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3ed\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"achievement\",\n        \"armor\",\n        \"award\",\n        \"block\",\n        \"cleric\",\n        \"defend\",\n        \"defense\",\n        \"holy\",\n        \"paladin\",\n        \"security\",\n        \"shield\",\n        \"weapon\",\n        \"winner\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3ed\",\n    \"label\": \"Shield Halved\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shield-heart\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"love\", \"protect\", \"safe\", \"safety\", \"shield\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e574\",\n    \"label\": \"Shield Heart\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM144 221.3c0-33.8 27.4-61.3 61.3-61.3c16.2 0 31.8 6.5 43.3 17.9l7.4 7.4 7.4-7.4c11.5-11.5 27.1-17.9 43.3-17.9c33.8 0 61.3 27.4 61.3 61.3c0 16.2-6.5 31.8-17.9 43.3l-82.7 82.7c-6.2 6.2-16.4 6.2-22.6 0l-82.7-82.7c-11.5-11.5-17.9-27.1-17.9-43.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM144 221.3c0-33.8 27.4-61.3 61.3-61.3c16.2 0 31.8 6.5 43.3 17.9l7.4 7.4 7.4-7.4c11.5-11.5 27.1-17.9 43.3-17.9c33.8 0 61.3 27.4 61.3 61.3c0 16.2-6.5 31.8-17.9 43.3l-82.7 82.7c-6.2 6.2-16.4 6.2-22.6 0l-82.7-82.7c-11.5-11.5-17.9-27.1-17.9-43.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shield-virus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e06c\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"antibodies\",\n        \"barrier\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flu\",\n        \"health\",\n        \"infection\",\n        \"pandemic\",\n        \"protect\",\n        \"safety\",\n        \"vaccine\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e06c\",\n    \"label\": \"Shield Virus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM256 112c8.8 0 16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C334.5 200.1 351 240 384 240c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C311.9 334.5 272 351 272 384c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C177.5 311.9 161 272 128 272c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C200.1 177.5 240 161 240 128c0-8.8 7.2-16 16-16zM232 256a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c16.7 8 36.1 8 52.8 0C454.7 420.7 495.5 239.2 496 140c.1-26.2-16.3-47.9-38.3-57.2L269.4 2.9zM256 112c8.8 0 16 7.2 16 16c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C334.5 200.1 351 240 384 240c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C311.9 334.5 272 351 272 384c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C177.5 311.9 161 272 128 272c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C200.1 177.5 240 161 240 128c0-8.8 7.2-16 16-16zM232 256a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm72 32a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ship\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6a2\"],\n        \"secondary\": [\"10f21a\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"boat\", \"passenger\", \"sea\", \"ship\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f21a\",\n    \"label\": \"Ship\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M192 32c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32V64h48c26.5 0 48 21.5 48 48V240l44.4 14.8c23.1 7.7 29.5 37.5 11.5 53.9l-101 92.6c-16.2 9.4-34.7 15.1-50.9 15.1c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-16.2 0-34.7-5.7-50.9-15.1l-101-92.6c-18-16.5-11.6-46.2 11.5-53.9L96 240V112c0-26.5 21.5-48 48-48h48V32zM160 218.7l107.8-35.9c13.1-4.4 27.3-4.4 40.5 0L416 218.7V128H160v90.7zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M192 32c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32V64h48c26.5 0 48 21.5 48 48V240l44.4 14.8c23.1 7.7 29.5 37.5 11.5 53.9l-101 92.6c-16.2 9.4-34.7 15.1-50.9 15.1c-19.6 0-40.8-7.7-59.2-20.3c-22.1-15.5-51.6-15.5-73.7 0c-17.1 11.8-38 20.3-59.2 20.3c-16.2 0-34.7-5.7-50.9-15.1l-101-92.6c-18-16.5-11.6-46.2 11.5-53.9L96 240V112c0-26.5 21.5-48 48-48h48V32zM160 218.7l107.8-35.9c13.1-4.4 27.3-4.4 40.5 0L416 218.7V128H160v90.7zM306.5 421.9C329 437.4 356.5 448 384 448c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 501.7 417 512 384 512c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 437.2 165.1 448 192 448c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shirt\": {\n    \"aliases\": {\n      \"names\": [\"t-shirt\", \"tshirt\"],\n      \"unicodes\": {\n        \"composite\": [\"1f455\"],\n        \"secondary\": [\"10f553\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"clothing\",\n        \"fashion\",\n        \"garment\",\n        \"shirt\",\n        \"short sleeve\",\n        \"t-shirt\",\n        \"tshirt\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f553\",\n    \"label\": \"Shirt\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M211.8 0c7.8 0 14.3 5.7 16.7 13.2C240.8 51.9 277.1 80 320 80s79.2-28.1 91.5-66.8C413.9 5.7 420.4 0 428.2 0h12.6c22.5 0 44.2 7.9 61.5 22.3L628.5 127.4c6.6 5.5 10.7 13.5 11.4 22.1s-2.1 17.1-7.8 23.6l-56 64c-11.4 13.1-31.2 14.6-44.6 3.5L480 197.7V448c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64V197.7l-51.5 42.9c-13.3 11.1-33.1 9.6-44.6-3.5l-56-64c-5.7-6.5-8.5-15-7.8-23.6s4.8-16.6 11.4-22.1L137.7 22.3C155 7.9 176.7 0 199.2 0h12.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M211.8 0c7.8 0 14.3 5.7 16.7 13.2C240.8 51.9 277.1 80 320 80s79.2-28.1 91.5-66.8C413.9 5.7 420.4 0 428.2 0h12.6c22.5 0 44.2 7.9 61.5 22.3L628.5 127.4c6.6 5.5 10.7 13.5 11.4 22.1s-2.1 17.1-7.8 23.6l-56 64c-11.4 13.1-31.2 14.6-44.6 3.5L480 197.7V448c0 35.3-28.7 64-64 64H224c-35.3 0-64-28.7-64-64V197.7l-51.5 42.9c-13.3 11.1-33.1 9.6-44.6-3.5l-56-64c-5.7-6.5-8.5-15-7.8-23.6s4.8-16.6 11.4-22.1L137.7 22.3C155 7.9 176.7 0 199.2 0h12.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shirtsinbulk\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f214\",\n    \"label\": \"Shirts in Bulk\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M100 410.3l30.6 13.4 4.4-9.9-30.6-13.4zm39.4 17.5l30.6 13.4 4.4-9.9-30.6-13.4zm172.1-14l4.4 9.9 30.6-13.4-4.4-9.9zM179.1 445l30.3 13.7 4.4-9.9-30.3-13.4zM60.4 392.8L91 406.2l4.4-9.6-30.6-13.7zm211.4 38.5l4.4 9.9 30.6-13.4-4.4-9.9zm-39.3 17.5l4.4 9.9 30.6-13.7-4.4-9.6zm118.4-52.2l4.4 9.6 30.6-13.4-4.4-9.9zM170 46.6h-33.5v10.5H170zm-47.2 0H89.2v10.5h33.5zm-47.3 0H42.3v10.5h33.3zm141.5 0h-33.2v10.5H217zm94.5 0H278v10.5h33.5zm47.3 0h-33.5v10.5h33.5zm-94.6 0H231v10.5h33.2zm141.5 0h-33.3v10.5h33.3zM52.8 351.1H42v33.5h10.8zm70-215.9H89.2v10.5h33.5zm-70 10.6h22.8v-10.5H42v33.5h10.8zm168.9 228.6c50.5 0 91.3-40.8 91.3-91.3 0-50.2-40.8-91.3-91.3-91.3-50.2 0-91.3 41.1-91.3 91.3 0 50.5 41.1 91.3 91.3 91.3zm-48.2-111.1c0-25.4 29.5-31.8 49.6-31.8 16.9 0 29.2 5.8 44.3 12l-8.8 16.9h-.9c-6.4-9.9-24.8-13.1-35.6-13.1-9 0-29.8 1.8-29.8 14.9 0 21.6 78.5-10.2 78.5 37.9 0 25.4-31.5 31.2-51 31.2-18.1 0-32.4-2.9-47.2-12.2l9-18.4h.9c6.1 12.2 23.6 14.9 35.9 14.9 8.7 0 32.7-1.2 32.7-14.3 0-26.1-77.6 6.3-77.6-38zM52.8 178.4H42V212h10.8zm342.4 206.2H406v-33.5h-10.8zM52.8 307.9H42v33.5h10.8zM0 3.7v406l221.7 98.6L448 409.7V3.7zm418.8 387.1L222 476.5 29.2 390.8V120.7h389.7v270.1zm0-299.3H29.2V32.9h389.7v58.6zm-366 130.1H42v33.5h10.8zm0 43.2H42v33.5h10.8zM170 135.2h-33.5v10.5H170zm225.2 163.1H406v-33.5h-10.8zm0-43.2H406v-33.5h-10.8zM217 135.2h-33.2v10.5H217zM395.2 212H406v-33.5h-10.8zm0 129.5H406V308h-10.8zm-131-206.3H231v10.5h33.2zm47.3 0H278v10.5h33.5zm83.7 33.6H406v-33.5h-33.5v10.5h22.8zm-36.4-33.6h-33.5v10.5h33.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"shoe-prints\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f54b\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"feet\", \"footprints\", \"steps\", \"walk\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f54b\",\n    \"label\": \"Shoe Prints\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M416 0C352.3 0 256 32 256 32V160c48 0 76 16 104 32s56 32 104 32c56.4 0 176-16 176-96S512 0 416 0zM128 96c0 35.3 28.7 64 64 64h32V32H192c-35.3 0-64 28.7-64 64zM288 512c96 0 224-48 224-128s-119.6-96-176-96c-48 0-76 16-104 32s-56 32-104 32V480s96.3 32 160 32zM0 416c0 35.3 28.7 64 64 64H96V352H64c-35.3 0-64 28.7-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M416 0C352.3 0 256 32 256 32V160c48 0 76 16 104 32s56 32 104 32c56.4 0 176-16 176-96S512 0 416 0zM128 96c0 35.3 28.7 64 64 64h32V32H192c-35.3 0-64 28.7-64 64zM288 512c96 0 224-48 224-128s-119.6-96-176-96c-48 0-76 16-104 32s-56 32-104 32V480s96.3 32 160 32zM0 416c0 35.3 28.7 64 64 64H96V352H64c-35.3 0-64 28.7-64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shop\": {\n    \"aliases\": {\n      \"names\": [\"store-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f54f\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bodega\",\n        \"building\",\n        \"buy\",\n        \"market\",\n        \"purchase\",\n        \"shopping\",\n        \"store\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f54f\",\n    \"label\": \"Shop\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M36.8 192H603.2c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0H121.7c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM64 224V384v80c0 26.5 21.5 48 48 48H336c26.5 0 48-21.5 48-48V384 224H320V384H128V224H64zm448 0V480c0 17.7 14.3 32 32 32s32-14.3 32-32V224H512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M36.8 192H603.2c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0H121.7c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM64 224V384v80c0 26.5 21.5 48 48 48H336c26.5 0 48-21.5 48-48V384 224H320V384H128V224H64zm448 0V480c0 17.7 14.3 32 32 32s32-14.3 32-32V224H512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shop-lock\": {\n    \"changes\": [\"6.0.0\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bodega\",\n        \"building\",\n        \"buy\",\n        \"closed\",\n        \"lock\",\n        \"lockdown\",\n        \"market\",\n        \"purchase\",\n        \"quarantine\",\n        \"shop\",\n        \"shopping\",\n        \"store\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4a5\",\n    \"label\": \"Shop Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M36.8 192H449.6c20.2-19.8 47.9-32 78.4-32c30.5 0 58.1 12.2 78.3 31.9c18.9-1.6 33.7-17.4 33.7-36.7c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0H121.7c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM384 224H320V384H128V224H64V384v80c0 26.5 21.5 48 48 48H336c26.5 0 48-21.5 48-48V384 352 224zm144 16c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M36.8 192H449.6c20.2-19.8 47.9-32 78.4-32c30.5 0 58.1 12.2 78.3 31.9c18.9-1.6 33.7-17.4 33.7-36.7c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0H121.7c-16 0-31 8-39.9 21.4L6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM384 224H320V384H128V224H64V384v80c0 26.5 21.5 48 48 48H336c26.5 0 48-21.5 48-48V384 352 224zm144 16c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shop-slash\": {\n    \"aliases\": {\n      \"names\": [\"store-alt-slash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e070\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"buy\", \"closed\", \"covid-19\", \"purchase\", \"shopping\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e070\",\n    \"label\": \"Shop Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-54.8-43V224H512V376L384 275.7V224H320v1.5L277.2 192H603.2c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0H121.7c-16 0-31 8-39.9 21.4L74.1 32.8 38.8 5.1zM36.8 192h85L21 112.5 6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM320 384H128V224H64V384v80c0 26.5 21.5 48 48 48H336c26.5 0 48-21.5 48-48V398.5l-64-50.4V384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-54.8-43V224H512V376L384 275.7V224H320v1.5L277.2 192H603.2c20.3 0 36.8-16.5 36.8-36.8c0-7.3-2.2-14.4-6.2-20.4L558.2 21.4C549.3 8 534.4 0 518.3 0H121.7c-16 0-31 8-39.9 21.4L74.1 32.8 38.8 5.1zM36.8 192h85L21 112.5 6.2 134.7c-4 6.1-6.2 13.2-6.2 20.4C0 175.5 16.5 192 36.8 192zM320 384H128V224H64V384v80c0 26.5 21.5 48 48 48H336c26.5 0 48-21.5 48-48V398.5l-64-50.4V384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shopify\": {\n    \"changes\": [\"5.12.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e057\",\n    \"label\": \"Shopify\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M388.32,104.1a4.66,4.66,0,0,0-4.4-4c-2,0-37.23-.8-37.23-.8s-21.61-20.82-29.62-28.83V503.2L442.76,472S388.72,106.5,388.32,104.1ZM288.65,70.47a116.67,116.67,0,0,0-7.21-17.61C271,32.85,255.42,22,237,22a15,15,0,0,0-4,.4c-.4-.8-1.2-1.2-1.6-2C223.4,11.63,213,7.63,200.58,8c-24,.8-48,18-67.25,48.83-13.61,21.62-24,48.84-26.82,70.06-27.62,8.4-46.83,14.41-47.23,14.81-14,4.4-14.41,4.8-16,18-1.2,10-38,291.82-38,291.82L307.86,504V65.67a41.66,41.66,0,0,0-4.4.4S297.86,67.67,288.65,70.47ZM233.41,87.69c-16,4.8-33.63,10.4-50.84,15.61,4.8-18.82,14.41-37.63,25.62-50,4.4-4.4,10.41-9.61,17.21-12.81C232.21,54.86,233.81,74.48,233.41,87.69ZM200.58,24.44A27.49,27.49,0,0,1,215,28c-6.4,3.2-12.81,8.41-18.81,14.41-15.21,16.42-26.82,42-31.62,66.45-14.42,4.41-28.83,8.81-42,12.81C131.33,83.28,163.75,25.24,200.58,24.44ZM154.15,244.61c1.6,25.61,69.25,31.22,73.25,91.66,2.8,47.64-25.22,80.06-65.65,82.47-48.83,3.2-75.65-25.62-75.65-25.62l10.4-44s26.82,20.42,48.44,18.82c14-.8,19.22-12.41,18.81-20.42-2-33.62-57.24-31.62-60.84-86.86-3.2-46.44,27.22-93.27,94.47-97.68,26-1.6,39.23,4.81,39.23,4.81L221.4,225.39s-17.21-8-37.63-6.4C154.15,221,153.75,239.8,154.15,244.61ZM249.42,82.88c0-12-1.6-29.22-7.21-43.63,18.42,3.6,27.22,24,31.23,36.43Q262.63,78.68,249.42,82.88Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"shopware\": {\n    \"changes\": [\"5.1.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5b5\",\n    \"label\": \"Shopware\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014483,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M403.5 455.41A246.17 246.17 0 0 1 256 504C118.81 504 8 393 8 256 8 118.81 119 8 256 8a247.39 247.39 0 0 1 165.7 63.5 3.57 3.57 0 0 1-2.86 6.18A418.62 418.62 0 0 0 362.13 74c-129.36 0-222.4 53.47-222.4 155.35 0 109 92.13 145.88 176.83 178.73 33.64 13 65.4 25.36 87 41.59a3.58 3.58 0 0 1 0 5.72zM503 233.09a3.64 3.64 0 0 0-1.27-2.44c-51.76-43-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93a3.57 3.57 0 0 0 5-1.82A249 249 0 0 0 503 233.09z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"shower\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6bf\"],\n        \"secondary\": [\"10f2cc\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bath\", \"clean\", \"faucet\", \"shower\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2cc\",\n    \"label\": \"Shower\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 131.9C64 112.1 80.1 96 99.9 96c9.5 0 18.6 3.8 25.4 10.5l16.2 16.2c-21 38.9-17.4 87.5 10.9 123L151 247c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L345 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-1.3 1.3c-35.5-28.3-84.2-31.9-123-10.9L170.5 61.3C151.8 42.5 126.4 32 99.9 32C44.7 32 0 76.7 0 131.9V448c0 17.7 14.3 32 32 32s32-14.3 32-32V131.9zM256 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32-32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 131.9C64 112.1 80.1 96 99.9 96c9.5 0 18.6 3.8 25.4 10.5l16.2 16.2c-21 38.9-17.4 87.5 10.9 123L151 247c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L345 121c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-1.3 1.3c-35.5-28.3-84.2-31.9-123-10.9L170.5 61.3C151.8 42.5 126.4 32 99.9 32C44.7 32 0 76.7 0 131.9V448c0 17.7 14.3 32 32 32s32-14.3 32-32V131.9zM256 352a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm64 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm32-32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shrimp\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f990\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"allergy\",\n        \"crustacean\",\n        \"prawn\",\n        \"seafood\",\n        \"shellfish\",\n        \"shrimp\",\n        \"tail\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e448\",\n    \"label\": \"Shrimp\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96s28.7 64 64 64h1c3.7 88.9 77 160 167 160h56V128H264 88.8 64c-17.7 0-32-14.3-32-32s14.3-32 32-32H464c8.8 0 16-7.2 16-16s-7.2-16-16-16H64zM224 456c0 13.3 10.7 24 24 24h72V407.8l-64.1-22.4c-12.5-4.4-26.2 2.2-30.6 14.7s2.2 26.2 14.7 30.6l4.5 1.6C233 433.9 224 443.9 224 456zm128 23.3c36.4-3.3 69.5-17.6 96.1-39.6l-86.5-34.6c-3 1.8-6.2 3.2-9.6 4.3v69.9zM472.6 415c24.6-30.3 39.4-68.9 39.4-111c0-12.3-1.3-24.3-3.7-35.9L382.8 355.1c.8 3.4 1.2 7 1.2 10.6c0 4.6-.7 9-1.9 13.1L472.6 415zM336 128H320V320h18.3c9.9 0 19.1 3.2 26.6 8.5l133.5-92.4C471.8 172.6 409.1 128 336 128zM168 192a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96s28.7 64 64 64h1c3.7 88.9 77 160 167 160h56V128H264 88.8 64c-17.7 0-32-14.3-32-32s14.3-32 32-32H464c8.8 0 16-7.2 16-16s-7.2-16-16-16H64zM224 456c0 13.3 10.7 24 24 24h72V407.8l-64.1-22.4c-12.5-4.4-26.2 2.2-30.6 14.7s2.2 26.2 14.7 30.6l4.5 1.6C233 433.9 224 443.9 224 456zm128 23.3c36.4-3.3 69.5-17.6 96.1-39.6l-86.5-34.6c-3 1.8-6.2 3.2-9.6 4.3v69.9zM472.6 415c24.6-30.3 39.4-68.9 39.4-111c0-12.3-1.3-24.3-3.7-35.9L382.8 355.1c.8 3.4 1.2 7 1.2 10.6c0 4.6-.7 9-1.9 13.1L472.6 415zM336 128H320V320h18.3c9.9 0 19.1 3.2 26.6 8.5l133.5-92.4C471.8 172.6 409.1 128 336 128zM168 192a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shuffle\": {\n    \"aliases\": {\n      \"names\": [\"random\"],\n      \"unicodes\": {\n        \"composite\": [\"1f500\"],\n        \"secondary\": [\"10f074\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"arrows\",\n        \"crossed\",\n        \"shuffle\",\n        \"shuffle tracks button\",\n        \"sort\",\n        \"swap\",\n        \"switch\",\n        \"transfer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f074\",\n    \"label\": \"Shuffle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160H352c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96h32V64c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V416H352c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8h32V320c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M403.8 34.4c12-5 25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V160H352c-10.1 0-19.6 4.7-25.6 12.8L284 229.3 244 176l31.2-41.6C293.3 110.2 321.8 96 352 96h32V64c0-12.9 7.8-24.6 19.8-29.6zM164 282.7L204 336l-31.2 41.6C154.7 401.8 126.2 416 96 416H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c10.1 0 19.6-4.7 25.6-12.8L164 282.7zm274.6 188c-9.2 9.2-22.9 11.9-34.9 6.9s-19.8-16.6-19.8-29.6V416H352c-30.2 0-58.7-14.2-76.8-38.4L121.6 172.8c-6-8.1-15.5-12.8-25.6-12.8H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H96c30.2 0 58.7 14.2 76.8 38.4L326.4 339.2c6 8.1 15.5 12.8 25.6 12.8h32V320c0-12.9 7.8-24.6 19.8-29.6s25.7-2.2 34.9 6.9l64 64c6 6 9.4 14.1 9.4 22.6s-3.4 16.6-9.4 22.6l-64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"shuttle-space\": {\n    \"aliases\": {\n      \"names\": [\"space-shuttle\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f197\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"astronaut\",\n        \"machine\",\n        \"nasa\",\n        \"rocket\",\n        \"space\",\n        \"transportation\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f197\",\n    \"label\": \"Shuttle Space\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M130 480c40.6 0 80.4-11 115.2-31.9L352 384l-224 0 0 96h2zM352 128L245.2 63.9C210.4 43 170.6 32 130 32h-2v96l224 0zM96 128l0-96H80C53.5 32 32 53.5 32 80v48h8c-22.1 0-40 17.9-40 40v16V328v16c0 22.1 17.9 40 40 40H32v48c0 26.5 21.5 48 48 48H96l0-96h8c26.2 0 49.4-12.6 64-32H456c69.3 0 135-22.7 179.2-81.6c6.4-8.5 6.4-20.3 0-28.8C591 182.7 525.3 160 456 160H168c-14.6-19.4-37.8-32-64-32l-8 0zM512 243.6v24.9c0 19.6-15.9 35.6-35.6 35.6c-2.5 0-4.4-2-4.4-4.4V212.4c0-2.5 2-4.4 4.4-4.4c19.6 0 35.6 15.9 35.6 35.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M130 480c40.6 0 80.4-11 115.2-31.9L352 384l-224 0 0 96h2zM352 128L245.2 63.9C210.4 43 170.6 32 130 32h-2v96l224 0zM96 128l0-96H80C53.5 32 32 53.5 32 80v48h8c-22.1 0-40 17.9-40 40v16V328v16c0 22.1 17.9 40 40 40H32v48c0 26.5 21.5 48 48 48H96l0-96h8c26.2 0 49.4-12.6 64-32H456c69.3 0 135-22.7 179.2-81.6c6.4-8.5 6.4-20.3 0-28.8C591 182.7 525.3 160 456 160H168c-14.6-19.4-37.8-32-64-32l-8 0zM512 243.6v24.9c0 19.6-15.9 35.6-35.6 35.6c-2.5 0-4.4-2-4.4-4.4V212.4c0-2.5 2-4.4 4.4-4.4c19.6 0 35.6 15.9 35.6 35.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sign-hanging\": {\n    \"aliases\": {\n      \"names\": [\"sign\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4d9\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"directions\", \"real estate\", \"signage\", \"wayfinding\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4d9\",\n    \"label\": \"Sign Hanging\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 0c17.7 0 32 14.3 32 32V64l352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-352 0V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V128H32C14.3 128 0 113.7 0 96S14.3 64 32 64H64V32C64 14.3 78.3 0 96 0zm96 160H448c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 0c17.7 0 32 14.3 32 32V64l352 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-352 0V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V128H32C14.3 128 0 113.7 0 96S14.3 64 32 64H64V32C64 14.3 78.3 0 96 0zm96 160H448c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32V192c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"signal\": {\n    \"aliases\": {\n      \"names\": [\"signal-5\", \"signal-perfect\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4f6\"],\n        \"secondary\": [\"10f012\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"antenna\",\n        \"antenna bars\",\n        \"bar\",\n        \"bars\",\n        \"cell\",\n        \"graph\",\n        \"mobile\",\n        \"online\",\n        \"phone\",\n        \"reception\",\n        \"status\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f012\",\n    \"label\": \"Signal\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M576 0c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V32c0-17.7 14.3-32 32-32zM448 96c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V128c0-17.7 14.3-32 32-32zM352 224V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32s32 14.3 32 32zM192 288c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V320c0-17.7 14.3-32 32-32zM96 416v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V416c0-17.7 14.3-32 32-32s32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M576 0c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V32c0-17.7 14.3-32 32-32zM448 96c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V128c0-17.7 14.3-32 32-32zM352 224V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32s32 14.3 32 32zM192 288c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V320c0-17.7 14.3-32 32-32zM96 416v64c0 17.7-14.3 32-32 32s-32-14.3-32-32V416c0-17.7 14.3-32 32-32s32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"signature\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5b7\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"John Hancock\", \"cursive\", \"name\", \"writing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5b7\",\n    \"label\": \"Signature\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32v7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92v71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3V128c0-53-43-96-96-96s-96 43-96 96v32c0 17.7 14.3 32 32 32s32-14.3 32-32V128zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5V335.6c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24H64.3c-.2-2.8-.3-5.6-.3-8.5V368H24zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24H305.9c-6.7 16.3-14.2 32.3-22.3 48H616z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 128c0-17.7 14.3-32 32-32s32 14.3 32 32v7.8c0 27.7-2.4 55.3-7.1 82.5l-84.4 25.3c-40.6 12.2-68.4 49.6-68.4 92v71.9c0 40 32.5 72.5 72.5 72.5c26 0 50-13.9 62.9-36.5l13.9-24.3c26.8-47 46.5-97.7 58.4-150.5l94.4-28.3-12.5 37.5c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l18-53.9c3.8-11.3 .9-23.8-7.4-32.4s-20.7-11.8-32.2-8.4L316.4 198.1c2.4-20.7 3.6-41.4 3.6-62.3V128c0-53-43-96-96-96s-96 43-96 96v32c0 17.7 14.3 32 32 32s32-14.3 32-32V128zm-9.2 177l49-14.7c-10.4 33.8-24.5 66.4-42.1 97.2l-13.9 24.3c-1.5 2.6-4.3 4.3-7.4 4.3c-4.7 0-8.5-3.8-8.5-8.5V335.6c0-14.1 9.3-26.6 22.8-30.7zM24 368c-13.3 0-24 10.7-24 24s10.7 24 24 24H64.3c-.2-2.8-.3-5.6-.3-8.5V368H24zm592 48c13.3 0 24-10.7 24-24s-10.7-24-24-24H305.9c-6.7 16.3-14.2 32.3-22.3 48H616z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"signs-post\": {\n    \"aliases\": {\n      \"names\": [\"map-signs\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f277\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"directions\", \"directory\", \"map\", \"signage\", \"wayfinding\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f277\",\n    \"label\": \"Signs Post\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M224 32H64C46.3 32 32 46.3 32 64v64c0 17.7 14.3 32 32 32H441.4c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7H288c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 256c0-17.7-14.3-32-32-32H288V192H224v32H70.6c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7H448c17.7 0 32-14.3 32-32V256zM288 480V384H224v96c0 17.7 14.3 32 32 32s32-14.3 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M224 32H64C46.3 32 32 46.3 32 64v64c0 17.7 14.3 32 32 32H441.4c4.2 0 8.3-1.7 11.3-4.7l48-48c6.2-6.2 6.2-16.4 0-22.6l-48-48c-3-3-7.1-4.7-11.3-4.7H288c0-17.7-14.3-32-32-32s-32 14.3-32 32zM480 256c0-17.7-14.3-32-32-32H288V192H224v32H70.6c-4.2 0-8.3 1.7-11.3 4.7l-48 48c-6.2 6.2-6.2 16.4 0 22.6l48 48c3 3 7.1 4.7 11.3 4.7H448c17.7 0 32-14.3 32-32V256zM288 480V384H224v96c0 17.7 14.3 32 32 32s32-14.3 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sim-card\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7c4\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"5.8.2\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"hard drive\",\n        \"hardware\",\n        \"portable\",\n        \"storage\",\n        \"technology\",\n        \"tiny\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7c4\",\n    \"label\": \"Sim Card\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M64 0H242.7c17 0 33.3 6.7 45.3 18.7L365.3 96c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0zM96 192c-17.7 0-32 14.3-32 32v32h64V192H96zM64 352h80 96 80V288H240 144 64v64zM320 224c0-17.7-14.3-32-32-32H256v64h64V224zM160 192v64h64V192H160zM288 448c17.7 0 32-14.3 32-32V384H256v64h32zM160 384v64h64V384H160zM64 416c0 17.7 14.3 32 32 32h32V384H64v32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M64 0H242.7c17 0 33.3 6.7 45.3 18.7L365.3 96c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0zM96 192c-17.7 0-32 14.3-32 32v32h64V192H96zM64 352h80 96 80V288H240 144 64v64zM320 224c0-17.7-14.3-32-32-32H256v64h64V224zM160 192v64h64V192H160zM288 448c17.7 0 32-14.3 32-32V384H256v64h32zM160 384v64h64V384H160zM64 416c0 17.7 14.3 32 32 32h32V384H64v32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"simplybuilt\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f215\",\n    \"label\": \"SimplyBuilt\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sink\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e06d\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.13.1\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bathroom\", \"covid-19\", \"faucet\", \"kitchen\", \"wash\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e06d\",\n    \"label\": \"Sink\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 96c0-17.7 14.3-32 32-32s32 14.3 32 32s14.3 32 32 32s32-14.3 32-32c0-53-43-96-96-96s-96 43-96 96V288H160V264c0-30.9-25.1-56-56-56H56c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c4.4 0 8 3.6 8 8v24H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H256 480c17.7 0 32-14.3 32-32s-14.3-32-32-32H400V264c0-4.4 3.6-8 8-8h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H408c-30.9 0-56 25.1-56 56v24H288V96zM480 416V384H32v32c0 53 43 96 96 96H384c53 0 96-43 96-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 96c0-17.7 14.3-32 32-32s32 14.3 32 32s14.3 32 32 32s32-14.3 32-32c0-53-43-96-96-96s-96 43-96 96V288H160V264c0-30.9-25.1-56-56-56H56c-13.3 0-24 10.7-24 24s10.7 24 24 24h48c4.4 0 8 3.6 8 8v24H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H256 480c17.7 0 32-14.3 32-32s-14.3-32-32-32H400V264c0-4.4 3.6-8 8-8h56c13.3 0 24-10.7 24-24s-10.7-24-24-24H408c-30.9 0-56 25.1-56 56v24H288V96zM480 416V384H32v32c0 53 43 96 96 96H384c53 0 96-43 96-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sistrix\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3ee\",\n    \"label\": \"SISTRIX\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sitemap\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0e8\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"directory\",\n        \"hierarchy\",\n        \"ia\",\n        \"information architecture\",\n        \"organization\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0e8\",\n    \"label\": \"Sitemap\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48h-8v40H464c30.9 0 56 25.1 56 56v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-4.4-3.6-8-8-8H312v40h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V280H112c-4.4 0-8 3.6-8 8v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-30.9 25.1-56 56-56H264V192h-8c-26.5 0-48-21.5-48-48V80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M208 80c0-26.5 21.5-48 48-48h64c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48h-8v40H464c30.9 0 56 25.1 56 56v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H464c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-4.4-3.6-8-8-8H312v40h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H256c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V280H112c-4.4 0-8 3.6-8 8v32h8c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V368c0-26.5 21.5-48 48-48h8V288c0-30.9 25.1-56 56-56H264V192h-8c-26.5 0-48-21.5-48-48V80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sith\": {\n    \"changes\": [\"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f512\",\n    \"label\": \"Sith\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sitrox\": {\n    \"changes\": [\"6.0.0-beta2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e44a\",\n    \"label\": \"Sitrox\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M212.439 0.00846128V0H448V128H64C64 57.6008 141.755 0.475338 212.439 0.00846128ZM237.256 192V192.007C307.135 192.475 384 249.6 384 320H210.809V319.995C140.915 319.563 64 262.424 64 192H237.256ZM235.565 511.993C306.251 511.521 384 454.399 384 384H0V512H235.565V511.993Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M212.439 0.00846128V0H448V128H64C64 57.6008 141.755 0.475338 212.439 0.00846128ZM237.256 192V192.007C307.135 192.475 384 249.6 384 320H210.809V319.995C140.915 319.563 64 262.424 64 192H237.256ZM235.565 511.993C306.251 511.521 384 454.399 384 384H0V512H235.565V511.993Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sketch\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"app\", \"design\", \"interface\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7c6\",\n    \"label\": \"Sketch\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M27.5 162.2L9 187.1h90.5l6.9-130.7-78.9 105.8zM396.3 45.7L267.7 32l135.7 147.2-7.1-133.5zM112.2 218.3l-11.2-22H9.9L234.8 458zm2-31.2h284l-81.5-88.5L256.3 33zm297.3 9.1L277.6 458l224.8-261.7h-90.9zM415.4 69L406 56.4l.9 17.3 6.1 113.4h90.3zM113.5 93.5l-4.6 85.6L244.7 32 116.1 45.7zm287.7 102.7h-290l42.4 82.9L256.3 480l144.9-283.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"skull\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f480\"],\n        \"secondary\": [\"10f54c\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bones\",\n        \"death\",\n        \"face\",\n        \"fairy tale\",\n        \"monster\",\n        \"skeleton\",\n        \"skull\",\n        \"x-ray\",\n        \"yorick\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f54c\",\n    \"label\": \"Skull\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1v64c0 26.5 21.5 48 48 48h48V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h64V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h48c26.5 0 48-21.5 48-48V400c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 398.9c58.5-41.1 96-104.1 96-174.9C512 100.3 397.4 0 256 0S0 100.3 0 224c0 70.7 37.5 133.8 96 174.9c0 .4 0 .7 0 1.1v64c0 26.5 21.5 48 48 48h48V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h64V464c0-8.8 7.2-16 16-16s16 7.2 16 16v48h48c26.5 0 48-21.5 48-48V400c0-.4 0-.7 0-1.1zM96 256a64 64 0 1 1 128 0A64 64 0 1 1 96 256zm256-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"skull-crossbones\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f571\", \"2620\"],\n        \"secondary\": [\"10f714\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Skull and Crossbones\",\n        \"Dungeons & Dragons\",\n        \"alert\",\n        \"bones\",\n        \"crossbones\",\n        \"d&d\",\n        \"danger\",\n        \"dangerous area\",\n        \"dead\",\n        \"deadly\",\n        \"death\",\n        \"dnd\",\n        \"face\",\n        \"fantasy\",\n        \"halloween\",\n        \"holiday\",\n        \"jolly-roger\",\n        \"monster\",\n        \"pirate\",\n        \"poison\",\n        \"skeleton\",\n        \"skull\",\n        \"skull and crossbones\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f714\",\n    \"label\": \"Skull Crossbones\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767582,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M368 128c0 44.4-25.4 83.5-64 106.4V256c0 17.7-14.3 32-32 32H176c-17.7 0-32-14.3-32-32V234.4c-38.6-23-64-62.1-64-106.4C80 57.3 144.5 0 224 0s144 57.3 144 128zM168 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM3.4 273.7c7.9-15.8 27.1-22.2 42.9-14.3L224 348.2l177.7-88.8c15.8-7.9 35-1.5 42.9 14.3s1.5 35-14.3 42.9L295.6 384l134.8 67.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L224 419.8 46.3 508.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9L152.4 384 17.7 316.6C1.9 308.7-4.5 289.5 3.4 273.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M368 128c0 44.4-25.4 83.5-64 106.4V256c0 17.7-14.3 32-32 32H176c-17.7 0-32-14.3-32-32V234.4c-38.6-23-64-62.1-64-106.4C80 57.3 144.5 0 224 0s144 57.3 144 128zM168 176a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm144-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM3.4 273.7c7.9-15.8 27.1-22.2 42.9-14.3L224 348.2l177.7-88.8c15.8-7.9 35-1.5 42.9 14.3s1.5 35-14.3 42.9L295.6 384l134.8 67.4c15.8 7.9 22.2 27.1 14.3 42.9s-27.1 22.2-42.9 14.3L224 419.8 46.3 508.6c-15.8 7.9-35 1.5-42.9-14.3s-1.5-35 14.3-42.9L152.4 384 17.7 316.6C1.9 308.7-4.5 289.5 3.4 273.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"skyatlas\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f216\",\n    \"label\": \"skyatlas\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"skype\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f17e\",\n    \"label\": \"Skype\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"slack\": {\n    \"aliases\": {\n      \"names\": [\"slack-hash\"],\n      \"unicodes\": {\n        \"composite\": [\"f3ef\"]\n      }\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"anchor\", \"hash\", \"hashtag\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f198\",\n    \"label\": \"Slack Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f715\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cancel\", \"close\", \"mute\", \"off\", \"stop\", \"x\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f715\",\n    \"label\": \"Slash\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M5.1 9.2C13.3-1.2 28.4-3.1 38.8 5.1l592 464c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M5.1 9.2C13.3-1.2 28.4-3.1 38.8 5.1l592 464c10.4 8.2 12.3 23.3 4.1 33.7s-23.3 12.3-33.7 4.1L9.2 42.9C-1.2 34.7-3.1 19.6 5.1 9.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sleigh\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7cc\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"christmas\",\n        \"claus\",\n        \"fly\",\n        \"holiday\",\n        \"santa\",\n        \"sled\",\n        \"snow\",\n        \"xmas\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7cc\",\n    \"label\": \"Sleigh\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96V256c0 53 43 96 96 96v32h64V352H384v32h64V352c53 0 96-43 96-96V160c17.7 0 32-14.3 32-32s-14.3-32-32-32H512 480c-17.7 0-32 14.3-32 32v41.3c0 30.2-24.5 54.7-54.7 54.7c-75.5 0-145.6-38.9-185.6-102.9l-4.3-6.9C174.2 67.6 125 37.6 70.7 32.7c-2.2-.5-4.4-.7-6.7-.7H55 32zM640 384c0-17.7-14.3-32-32-32s-32 14.3-32 32v8c0 13.3-10.7 24-24 24H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H552c48.6 0 88-39.4 88-88v-8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96V256c0 53 43 96 96 96v32h64V352H384v32h64V352c53 0 96-43 96-96V160c17.7 0 32-14.3 32-32s-14.3-32-32-32H512 480c-17.7 0-32 14.3-32 32v41.3c0 30.2-24.5 54.7-54.7 54.7c-75.5 0-145.6-38.9-185.6-102.9l-4.3-6.9C174.2 67.6 125 37.6 70.7 32.7c-2.2-.5-4.4-.7-6.7-.7H55 32zM640 384c0-17.7-14.3-32-32-32s-32 14.3-32 32v8c0 13.3-10.7 24-24 24H64c-17.7 0-32 14.3-32 32s14.3 32 32 32H552c48.6 0 88-39.4 88-88v-8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sliders\": {\n    \"aliases\": {\n      \"names\": [\"sliders-h\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1de\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"adjust\", \"settings\", \"sliders\", \"toggle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1de\",\n    \"label\": \"Sliders\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 416c0 17.7 14.3 32 32 32l54.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 448c17.7 0 32-14.3 32-32s-14.3-32-32-32l-246.7 0c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48L32 384c-17.7 0-32 14.3-32 32zm128 0a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM320 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32-80c-32.8 0-61 19.7-73.3 48L32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l246.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48l54.7 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-54.7 0c-12.3-28.3-40.5-48-73.3-48zM192 128a32 32 0 1 1 0-64 32 32 0 1 1 0 64zm73.3-64C253 35.7 224.8 16 192 16s-61 19.7-73.3 48L32 64C14.3 64 0 78.3 0 96s14.3 32 32 32l86.7 0c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48L480 128c17.7 0 32-14.3 32-32s-14.3-32-32-32L265.3 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"slideshare\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1e7\",\n    \"label\": \"Slideshare\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M187.7 153.7c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7s61.7-26 61.7-57.7c0-32-27.7-57.7-61.7-57.7zm143.4 0c-34 0-61.7 25.7-61.7 57.7 0 31.7 27.7 57.7 61.7 57.7 34.3 0 61.7-26 61.7-57.7.1-32-27.4-57.7-61.7-57.7zm156.6 90l-6 4.3V49.7c0-27.4-20.6-49.7-46-49.7H76.6c-25.4 0-46 22.3-46 49.7V248c-2-1.4-4.3-2.9-6.3-4.3-15.1-10.6-25.1 4-16 17.7 18.3 22.6 53.1 50.3 106.3 72C58.3 525.1 252 555.7 248.9 457.5c0-.7.3-56.6.3-96.6 5.1 1.1 9.4 2.3 13.7 3.1 0 39.7.3 92.8.3 93.5-3.1 98.3 190.6 67.7 134.3-124 53.1-21.7 88-49.4 106.3-72 9.1-13.8-.9-28.3-16.1-17.8zm-30.5 19.2c-68.9 37.4-128.3 31.1-160.6 29.7-23.7-.9-32.6 9.1-33.7 24.9-10.3-7.7-18.6-15.5-20.3-17.1-5.1-5.4-13.7-8-27.1-7.7-31.7 1.1-89.7 7.4-157.4-28V72.3c0-34.9 8.9-45.7 40.6-45.7h317.7c30.3 0 40.9 12.9 40.9 45.7v190.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"smog\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f75f\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dragon\", \"fog\", \"haze\", \"pollution\", \"smoke\", \"weather\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f75f\",\n    \"label\": \"Smog\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 144c0 79.5 64.5 144 144 144H299.3c22.6 19.9 52.2 32 84.7 32s62.1-12.1 84.7-32H496c61.9 0 112-50.1 112-112s-50.1-112-112-112c-10.7 0-21 1.5-30.8 4.3C443.8 27.7 401.1 0 352 0c-32.6 0-62.4 12.2-85.1 32.3C242.1 12.1 210.5 0 176 0C96.5 0 32 64.5 32 144zM616 368H280c-13.3 0-24 10.7-24 24s10.7 24 24 24H616c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-64 96H440c-13.3 0-24 10.7-24 24s10.7 24 24 24H552c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-192 0H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24zM224 392c0-13.3-10.7-24-24-24H96c-13.3 0-24 10.7-24 24s10.7 24 24 24H200c13.3 0 24-10.7 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 144c0 79.5 64.5 144 144 144H299.3c22.6 19.9 52.2 32 84.7 32s62.1-12.1 84.7-32H496c61.9 0 112-50.1 112-112s-50.1-112-112-112c-10.7 0-21 1.5-30.8 4.3C443.8 27.7 401.1 0 352 0c-32.6 0-62.4 12.2-85.1 32.3C242.1 12.1 210.5 0 176 0C96.5 0 32 64.5 32 144zM616 368H280c-13.3 0-24 10.7-24 24s10.7 24 24 24H616c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-64 96H440c-13.3 0-24 10.7-24 24s10.7 24 24 24H552c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-192 0H24c-13.3 0-24 10.7-24 24s10.7 24 24 24H360c13.3 0 24-10.7 24-24s-10.7-24-24-24zM224 392c0-13.3-10.7-24-24-24H96c-13.3 0-24 10.7-24 24s10.7 24 24 24H200c13.3 0 24-10.7 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"smoking\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6ac\"],\n        \"secondary\": [\"10f48d\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cancer\",\n        \"cigarette\",\n        \"nicotine\",\n        \"smoking\",\n        \"smoking status\",\n        \"tobacco\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f48d\",\n    \"label\": \"Smoking\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M448 32V43c0 38.2 15.2 74.8 42.2 101.8l21 21c21 21 32.8 49.5 32.8 79.2v11c0 17.7-14.3 32-32 32s-32-14.3-32-32V245c0-12.7-5.1-24.9-14.1-33.9l-21-21C405.9 151.1 384 98.1 384 43V32c0-17.7 14.3-32 32-32s32 14.3 32 32zM576 256V245c0-38.2-15.2-74.8-42.2-101.8l-21-21c-21-21-32.8-49.5-32.8-79.2V32c0-17.7 14.3-32 32-32s32 14.3 32 32V43c0 12.7 5.1 24.9 14.1 33.9l21 21c39 39 60.9 91.9 60.9 147.1v11c0 17.7-14.3 32-32 32s-32-14.3-32-32zM0 416c0-35.3 28.7-64 64-64H416c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H64c-35.3 0-64-28.7-64-64V416zm224 0v32H384V416H224zm288-64c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M448 32V43c0 38.2 15.2 74.8 42.2 101.8l21 21c21 21 32.8 49.5 32.8 79.2v11c0 17.7-14.3 32-32 32s-32-14.3-32-32V245c0-12.7-5.1-24.9-14.1-33.9l-21-21C405.9 151.1 384 98.1 384 43V32c0-17.7 14.3-32 32-32s32 14.3 32 32zM576 256V245c0-38.2-15.2-74.8-42.2-101.8l-21-21c-21-21-32.8-49.5-32.8-79.2V32c0-17.7 14.3-32 32-32s32 14.3 32 32V43c0 12.7 5.1 24.9 14.1 33.9l21 21c39 39 60.9 91.9 60.9 147.1v11c0 17.7-14.3 32-32 32s-32-14.3-32-32zM0 416c0-35.3 28.7-64 64-64H416c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H64c-35.3 0-64-28.7-64-64V416zm224 0v32H384V416H224zm288-64c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384c0-17.7 14.3-32 32-32zm96 0c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"snapchat\": {\n    \"aliases\": {\n      \"names\": [\"snapchat-ghost\"],\n      \"unicodes\": {\n        \"composite\": [\"f2ac\"]\n      }\n    },\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2ab\",\n    \"label\": \"Snapchat\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"snowflake\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2744\", \"2746\"],\n        \"secondary\": [\"10f2dc\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.5.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Heavy Chevron Snowflake\",\n        \"cold\",\n        \"precipitation\",\n        \"rain\",\n        \"snow\",\n        \"snowfall\",\n        \"snowflake\",\n        \"winter\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2dc\",\n    \"label\": \"Snowflake\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0c17.7 0 32 14.3 32 32V62.1l15-15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-49 49v70.3l61.4-35.8 17.7-66.1c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4l-5.2 19.3 23.6-13.8c15.3-8.9 34.9-3.7 43.8 11.5s3.8 34.9-11.5 43.8l-25.3 14.8 21.7 5.8c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-67.7-18.1L287.5 256l60.9 35.5 67.7-18.1c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4l-21.7 5.8 25.3 14.8c15.3 8.9 20.4 28.5 11.5 43.8s-28.5 20.4-43.8 11.5l-23.6-13.8 5.2 19.3c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-17.7-66.1L256 311.7v70.3l49 49c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V449.9l-15 15c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l49-49V311.7l-61.4 35.8-17.7 66.1c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4l5.2-19.3L48.1 395.6c-15.3 8.9-34.9 3.7-43.8-11.5s-3.7-34.9 11.5-43.8l25.3-14.8-21.7-5.8c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l67.7 18.1L160.5 256 99.6 220.5 31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4l21.7-5.8L15.9 171.6C.6 162.7-4.5 143.1 4.4 127.9s28.5-20.4 43.8-11.5l23.6 13.8-5.2-19.3c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l17.7 66.1L192 200.3V129.9L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l15 15V32c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0c17.7 0 32 14.3 32 32V62.1l15-15c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-49 49v70.3l61.4-35.8 17.7-66.1c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4l-5.2 19.3 23.6-13.8c15.3-8.9 34.9-3.7 43.8 11.5s3.8 34.9-11.5 43.8l-25.3 14.8 21.7 5.8c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-67.7-18.1L287.5 256l60.9 35.5 67.7-18.1c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4l-21.7 5.8 25.3 14.8c15.3 8.9 20.4 28.5 11.5 43.8s-28.5 20.4-43.8 11.5l-23.6-13.8 5.2 19.3c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-17.7-66.1L256 311.7v70.3l49 49c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V449.9l-15 15c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l49-49V311.7l-61.4 35.8-17.7 66.1c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4l5.2-19.3L48.1 395.6c-15.3 8.9-34.9 3.7-43.8-11.5s-3.7-34.9 11.5-43.8l25.3-14.8-21.7-5.8c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l67.7 18.1L160.5 256 99.6 220.5 31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4l21.7-5.8L15.9 171.6C.6 162.7-4.5 143.1 4.4 127.9s28.5-20.4 43.8-11.5l23.6 13.8-5.2-19.3c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l17.7 66.1L192 200.3V129.9L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l15 15V32c0-17.7 14.3-32 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 0c13.3 0 24 10.7 24 24V70.1l23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-57 57v76.5l66.2-38.2 20.9-77.8c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4L373 142.2l37.1-21.4c11.5-6.6 26.2-2.7 32.8 8.8s2.7 26.2-8.8 32.8L397 183.8l31.5 8.4c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-77.8-20.9L272 256l66.2 38.2 77.8-20.9c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4L397 328.2l37.1 21.4c11.5 6.6 15.4 21.3 8.8 32.8s-21.3 15.4-32.8 8.8L373 369.8l8.4 31.5c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-20.9-77.8L248 297.6v76.5l57 57c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V441.9l-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57V297.6l-66.2 38.2-20.9 77.8c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4L75 369.8 37.9 391.2c-11.5 6.6-26.2 2.7-32.8-8.8s-2.7-26.2 8.8-32.8L51 328.2l-31.5-8.4c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l77.8 20.9L176 256l-66.2-38.2L31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4L51 183.8 13.9 162.4c-11.5-6.6-15.4-21.3-8.8-32.8s21.3-15.4 32.8-8.8L75 142.2l-8.4-31.5c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l20.9 77.8L200 214.4V137.9L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23V24c0-13.3 10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 0c13.3 0 24 10.7 24 24V70.1l23-23c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-57 57v76.5l66.2-38.2 20.9-77.8c3.4-12.8 16.6-20.4 29.4-17s20.4 16.6 17 29.4L373 142.2l37.1-21.4c11.5-6.6 26.2-2.7 32.8 8.8s2.7 26.2-8.8 32.8L397 183.8l31.5 8.4c12.8 3.4 20.4 16.6 17 29.4s-16.6 20.4-29.4 17l-77.8-20.9L272 256l66.2 38.2 77.8-20.9c12.8-3.4 26 4.2 29.4 17s-4.2 26-17 29.4L397 328.2l37.1 21.4c11.5 6.6 15.4 21.3 8.8 32.8s-21.3 15.4-32.8 8.8L373 369.8l8.4 31.5c3.4 12.8-4.2 26-17 29.4s-26-4.2-29.4-17l-20.9-77.8L248 297.6v76.5l57 57c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-23-23V488c0 13.3-10.7 24-24 24s-24-10.7-24-24V441.9l-23 23c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57V297.6l-66.2 38.2-20.9 77.8c-3.4 12.8-16.6 20.4-29.4 17s-20.4-16.6-17-29.4L75 369.8 37.9 391.2c-11.5 6.6-26.2 2.7-32.8-8.8s-2.7-26.2 8.8-32.8L51 328.2l-31.5-8.4c-12.8-3.4-20.4-16.6-17-29.4s16.6-20.4 29.4-17l77.8 20.9L176 256l-66.2-38.2L31.9 238.6c-12.8 3.4-26-4.2-29.4-17s4.2-26 17-29.4L51 183.8 13.9 162.4c-11.5-6.6-15.4-21.3-8.8-32.8s21.3-15.4 32.8-8.8L75 142.2l-8.4-31.5c-3.4-12.8 4.2-26 17-29.4s26 4.2 29.4 17l20.9 77.8L200 214.4V137.9L143 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l23 23V24c0-13.3 10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"snowman\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2603\", \"26c4\"],\n        \"secondary\": [\"10f7d0\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cold\",\n        \"decoration\",\n        \"frost\",\n        \"frosty\",\n        \"holiday\",\n        \"snow\",\n        \"snowman\",\n        \"snowman without snow\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7d0\",\n    \"label\": \"Snowman\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M341.1 140.6c-2 3.9-1.6 8.6 1.2 12c7 8.5 12.9 18.1 17.2 28.4L408 160.2V120c0-13.3 10.7-24 24-24s24 10.7 24 24v19.6l22.5-9.7c12.2-5.2 26.3 .4 31.5 12.6s-.4 26.3-12.6 31.5l-56 24-73.6 31.5c-.5 9.5-2.1 18.6-4.8 27.3c-1.2 3.8-.1 8 2.8 10.8C396.7 296.9 416 338.2 416 384c0 44.7-18.3 85-47.8 114.1c-9.9 9.7-23.7 13.9-37.5 13.9H181.3c-13.9 0-27.7-4.2-37.5-13.9C114.3 469 96 428.7 96 384c0-45.8 19.3-87.1 50.1-116.3c2.9-2.8 4-6.9 2.8-10.8c-2.7-8.7-4.3-17.9-4.8-27.3L70.5 198.1l-56-24C2.4 168.8-3.3 154.7 1.9 142.5s19.3-17.8 31.5-12.6L56 139.6V120c0-13.3 10.7-24 24-24s24 10.7 24 24v40.2L152.6 181c4.3-10.3 10.1-19.9 17.2-28.4c2.8-3.4 3.3-8.1 1.2-12C164 127.2 160 112.1 160 96c0-53 43-96 96-96s96 43 96 96c0 16.1-4 31.2-10.9 44.6zM224 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm48 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-16 80a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm16 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM288 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48 24v3.2c0 3.2 .8 6.3 2.3 9l9 16.9c.9 1.7 2.7 2.8 4.7 2.8s3.8-1.1 4.7-2.8l9-16.9c1.5-2.8 2.3-5.9 2.3-9V120c0-8.8-7.2-16-16-16s-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M341.1 140.6c-2 3.9-1.6 8.6 1.2 12c7 8.5 12.9 18.1 17.2 28.4L408 160.2V120c0-13.3 10.7-24 24-24s24 10.7 24 24v19.6l22.5-9.7c12.2-5.2 26.3 .4 31.5 12.6s-.4 26.3-12.6 31.5l-56 24-73.6 31.5c-.5 9.5-2.1 18.6-4.8 27.3c-1.2 3.8-.1 8 2.8 10.8C396.7 296.9 416 338.2 416 384c0 44.7-18.3 85-47.8 114.1c-9.9 9.7-23.7 13.9-37.5 13.9H181.3c-13.9 0-27.7-4.2-37.5-13.9C114.3 469 96 428.7 96 384c0-45.8 19.3-87.1 50.1-116.3c2.9-2.8 4-6.9 2.8-10.8c-2.7-8.7-4.3-17.9-4.8-27.3L70.5 198.1l-56-24C2.4 168.8-3.3 154.7 1.9 142.5s19.3-17.8 31.5-12.6L56 139.6V120c0-13.3 10.7-24 24-24s24 10.7 24 24v40.2L152.6 181c4.3-10.3 10.1-19.9 17.2-28.4c2.8-3.4 3.3-8.1 1.2-12C164 127.2 160 112.1 160 96c0-53 43-96 96-96s96 43 96 96c0 16.1-4 31.2-10.9 44.6zM224 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm48 128a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm-16 80a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm16 48a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zM288 96a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48 24v3.2c0 3.2 .8 6.3 2.3 9l9 16.9c.9 1.7 2.7 2.8 4.7 2.8s3.8-1.1 4.7-2.8l9-16.9c1.5-2.8 2.3-5.9 2.3-9V120c0-8.8-7.2-16-16-16s-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"snowplow\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f7d2\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clean up\", \"cold\", \"road\", \"storm\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7d2\",\n    \"label\": \"Snowplow\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M298.9 64l68.6 160H256l-64-64V64H298.9zM445.1 242.7l-87.4-204C347.6 15.3 324.5 0 298.9 0H176c-26.5 0-48 21.5-48 48V160H96c-17.7 0-32 14.3-32 32V298.8C26.2 316.8 0 355.3 0 400c0 61.9 50.1 112 112 112H368c61.9 0 112-50.1 112-112c0-17.2-3.9-33.5-10.8-48H512v50.7c0 17 6.7 33.3 18.7 45.3l54.6 54.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L576 402.7V320 235.2L633 164c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5l-57 71.2c-9.1 11.3-14 25.4-14 40V288H448V256.7c.1-2.4-.2-4.8-.6-7.1s-1.2-4.7-2.2-6.8zM368 352c26.5 0 48 21.5 48 48s-21.5 48-48 48H112c-26.5 0-48-21.5-48-48s21.5-48 48-48H368zM144 400a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm216 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-56-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM200 424a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M298.9 64l68.6 160H256l-64-64V64H298.9zM445.1 242.7l-87.4-204C347.6 15.3 324.5 0 298.9 0H176c-26.5 0-48 21.5-48 48V160H96c-17.7 0-32 14.3-32 32V298.8C26.2 316.8 0 355.3 0 400c0 61.9 50.1 112 112 112H368c61.9 0 112-50.1 112-112c0-17.2-3.9-33.5-10.8-48H512v50.7c0 17 6.7 33.3 18.7 45.3l54.6 54.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L576 402.7V320 235.2L633 164c11-13.8 8.8-33.9-5-45s-33.9-8.8-45 5l-57 71.2c-9.1 11.3-14 25.4-14 40V288H448V256.7c.1-2.4-.2-4.8-.6-7.1s-1.2-4.7-2.2-6.8zM368 352c26.5 0 48 21.5 48 48s-21.5 48-48 48H112c-26.5 0-48-21.5-48-48s21.5-48 48-48H368zM144 400a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zm216 24a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm-56-24a24 24 0 1 0 -48 0 24 24 0 1 0 48 0zM200 424a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"soap\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9fc\"],\n        \"secondary\": [\"10e06e\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bar\",\n        \"bathing\",\n        \"bubbles\",\n        \"clean\",\n        \"cleaning\",\n        \"covid-19\",\n        \"hygiene\",\n        \"lather\",\n        \"soap\",\n        \"soapdish\",\n        \"wash\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e06e\",\n    \"label\": \"Soap\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM416 32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 160c0 27.6-11.7 52.5-30.4 70.1C422.1 275.7 448 310.8 448 352c0 53-43 96-96 96H160c-53 0-96-43-96-96s43-96 96-96h88.4c-15.2-17-24.4-39.4-24.4-64H96c-53 0-96 43-96 96V416c0 53 43 96 96 96H416c53 0 96-43 96-96V288c0-53-43-96-96-96zM160 288c-35.3 0-64 28.7-64 64s28.7 64 64 64H352c35.3 0 64-28.7 64-64s-28.7-64-64-64H320 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M208 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM416 32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm0 160c0 27.6-11.7 52.5-30.4 70.1C422.1 275.7 448 310.8 448 352c0 53-43 96-96 96H160c-53 0-96-43-96-96s43-96 96-96h88.4c-15.2-17-24.4-39.4-24.4-64H96c-53 0-96 43-96 96V416c0 53 43 96 96 96H416c53 0 96-43 96-96V288c0-53-43-96-96-96zM160 288c-35.3 0-64 28.7-64 64s28.7 64 64 64H352c35.3 0 64-28.7 64-64s-28.7-64-64-64H320 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"socks\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9e6\"],\n        \"secondary\": [\"10f696\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"business socks\",\n        \"business time\",\n        \"clothing\",\n        \"feet\",\n        \"flight of the conchords\",\n        \"socks\",\n        \"stocking\",\n        \"wednesday\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f696\",\n    \"label\": \"Socks\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M175.2 476.6c-9.7-18-15.2-38.7-15.2-60.6c0-40.3 19-78.2 51.2-102.4l64-48c8.1-6 12.8-15.5 12.8-25.6V96H128V240c0 20.1-9.5 39.1-25.6 51.2l-64 48C14.2 357.3 0 385.8 0 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l21.6-16.2zM128 64H288V48c0-14.5 3.9-28.2 10.7-39.9C291 3 281.9 0 272 0H176c-26.5 0-48 21.5-48 48V64zM320 96V240c0 20.1-9.5 39.1-25.6 51.2l-64 48C206.2 357.3 192 385.8 192 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l115.2-86.4C493 382.2 512 344.3 512 304V96H320zM512 64V48c0-26.5-21.5-48-48-48H368c-26.5 0-48 21.5-48 48V64H512z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M175.2 476.6c-9.7-18-15.2-38.7-15.2-60.6c0-40.3 19-78.2 51.2-102.4l64-48c8.1-6 12.8-15.5 12.8-25.6V96H128V240c0 20.1-9.5 39.1-25.6 51.2l-64 48C14.2 357.3 0 385.8 0 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l21.6-16.2zM128 64H288V48c0-14.5 3.9-28.2 10.7-39.9C291 3 281.9 0 272 0H176c-26.5 0-48 21.5-48 48V64zM320 96V240c0 20.1-9.5 39.1-25.6 51.2l-64 48C206.2 357.3 192 385.8 192 416c0 53 43 96 96 96c20.8 0 41-6.7 57.6-19.2l115.2-86.4C493 382.2 512 344.3 512 304V96H320zM512 64V48c0-26.5-21.5-48-48-48H368c-26.5 0-48 21.5-48 48V64H512z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"solar-panel\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5ba\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clean\", \"eco-friendly\", \"energy\", \"green\", \"sun\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ba\",\n    \"label\": \"Solar Panel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M122.2 0C91.7 0 65.5 21.5 59.5 51.4L8.3 307.4C.4 347 30.6 384 71 384H288v64H224c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V384H569c40.4 0 70.7-36.9 62.8-76.6l-51.2-256C574.5 21.5 548.3 0 517.8 0H122.2zM260.9 64H379.1l10.4 104h-139L260.9 64zM202.3 168H101.4L122.2 64h90.4L202.3 168zM91.8 216H197.5L187.1 320H71L91.8 216zm153.9 0H394.3l10.4 104-169.4 0 10.4-104zm196.8 0H548.2L569 320h-116L442.5 216zm96-48H437.7L427.3 64h90.4l31.4-6.3L517.8 64l20.8 104z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M122.2 0C91.7 0 65.5 21.5 59.5 51.4L8.3 307.4C.4 347 30.6 384 71 384H288v64H224c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H352V384H569c40.4 0 70.7-36.9 62.8-76.6l-51.2-256C574.5 21.5 548.3 0 517.8 0H122.2zM260.9 64H379.1l10.4 104h-139L260.9 64zM202.3 168H101.4L122.2 64h90.4L202.3 168zM91.8 216H197.5L187.1 320H71L91.8 216zm153.9 0H394.3l10.4 104-169.4 0 10.4-104zm196.8 0H548.2L569 320h-116L442.5 216zm96-48H437.7L427.3 64h90.4l31.4-6.3L517.8 64l20.8 104z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sort\": {\n    \"aliases\": {\n      \"names\": [\"unsorted\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0dc\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"filter\", \"order\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0dc\",\n    \"label\": \"Sort\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l128 128c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H32c-12.9 0-24.6-7.8-29.6-19.8s-2.2-25.7 6.9-34.9l128-128zm0 429.3l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128c-12.5 12.5-32.8 12.5-45.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sort-down\": {\n    \"aliases\": {\n      \"names\": [\"sort-desc\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0dd\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"descending\", \"filter\", \"order\", \"sort-desc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0dd\",\n    \"label\": \"Sort Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M182.6 470.6c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-9.2-9.2-11.9-22.9-6.9-34.9s16.6-19.8 29.6-19.8H288c12.9 0 24.6 7.8 29.6 19.8s2.2 25.7-6.9 34.9l-128 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sort-up\": {\n    \"aliases\": {\n      \"names\": [\"sort-asc\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0de\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"ascending\", \"filter\", \"order\", \"sort-asc\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0de\",\n    \"label\": \"Sort Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H288c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"soundcloud\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1be\",\n    \"label\": \"SoundCloud\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sourcetree\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7d3\",\n    \"label\": \"Sourcetree\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M427.2 203c0-112.1-90.9-203-203-203C112.1-.2 21.2 90.6 21 202.6A202.86 202.86 0 0 0 161.5 396v101.7a14.3 14.3 0 0 0 14.3 14.3h96.4a14.3 14.3 0 0 0 14.3-14.3V396.1A203.18 203.18 0 0 0 427.2 203zm-271.6 0c0-90.8 137.3-90.8 137.3 0-.1 89.9-137.3 91-137.3 0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"spa\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5bb\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"flora\", \"massage\", \"mindfulness\", \"plant\", \"wellness\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5bb\",\n    \"label\": \"Spa\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M183.1 235.3c33.7 20.7 62.9 48.1 85.8 80.5c7 9.9 13.4 20.3 19.1 31c5.7-10.8 12.1-21.1 19.1-31c22.9-32.4 52.1-59.8 85.8-80.5C437.6 207.8 490.1 192 546 192h9.9c11.1 0 20.1 9 20.1 20.1C576 360.1 456.1 480 308.1 480H288 267.9C119.9 480 0 360.1 0 212.1C0 201 9 192 20.1 192H30c55.9 0 108.4 15.8 153.1 43.3zM301.5 37.6c15.7 16.9 61.1 71.8 84.4 164.6c-38 21.6-71.4 50.8-97.9 85.6c-26.5-34.8-59.9-63.9-97.9-85.6c23.2-92.8 68.6-147.7 84.4-164.6C278 33.9 282.9 32 288 32s10 1.9 13.5 5.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M183.1 235.3c33.7 20.7 62.9 48.1 85.8 80.5c7 9.9 13.4 20.3 19.1 31c5.7-10.8 12.1-21.1 19.1-31c22.9-32.4 52.1-59.8 85.8-80.5C437.6 207.8 490.1 192 546 192h9.9c11.1 0 20.1 9 20.1 20.1C576 360.1 456.1 480 308.1 480H288 267.9C119.9 480 0 360.1 0 212.1C0 201 9 192 20.1 192H30c55.9 0 108.4 15.8 153.1 43.3zM301.5 37.6c15.7 16.9 61.1 71.8 84.4 164.6c-38 21.6-71.4 50.8-97.9 85.6c-26.5-34.8-59.9-63.9-97.9-85.6c23.2-92.8 68.6-147.7 84.4-164.6C278 33.9 282.9 32 288 32s10 1.9 13.5 5.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"space-awesome\": {\n    \"changes\": [\"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"adventure\", \"rocket\", \"ship\", \"shuttle\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e5ac\",\n    \"label\": \"Space Awesome\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 256H128V512H0V352H32V320H64V288H96V256zM512 352V512H384V256H416V288H448V320H480V352H512zM320 64H352V448H320V416H192V448H160V64H192V32H224V0H288V32H320V64zM288 128H224V192H288V128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 256H128V512H0V352H32V320H64V288H96V256zM512 352V512H384V256H416V288H448V320H480V352H512zM320 64H352V448H320V416H192V448H160V64H192V32H224V0H288V32H320V64zM288 128H224V192H288V128z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"spaghetti-monster-flying\": {\n    \"aliases\": {\n      \"names\": [\"pastafarianism\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f67b\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agnosticism\", \"atheism\", \"flying spaghetti monster\", \"fsm\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f67b\",\n    \"label\": \"Spaghetti Monster Flying\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M208 64a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 0c0 16.2-6 31.1-16 42.3l15.6 31.2c18.7-6 39.9-9.5 64.4-9.5s45.8 3.5 64.4 9.5L400 106.3C390 95.1 384 80.2 384 64c0-35.3 28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64c-1.7 0-3.4-.1-5.1-.2L427.8 158c21.1 13.6 37.7 30.2 51.4 46.4c7.1 8.3 13.5 16.6 19.3 24l1.4 1.8c6.3 8.1 11.6 14.8 16.7 20.4C527.3 262.3 532.7 264 536 264c2.5 0 4.3-.6 7.1-3.3c3.7-3.5 7.1-8.8 12.5-17.4l.6-.9c4.6-7.4 11-17.6 19.4-25.7c9.7-9.3 22.9-16.7 40.4-16.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-2.5 0-4.3 .6-7.1 3.3c-3.7 3.5-7.1 8.8-12.5 17.4l-.6 .9c-4.6 7.4-11 17.6-19.4 25.7c-9.7 9.3-22.9 16.7-40.4 16.7c-18.5 0-32.9-8.5-44.3-18.6c-3.1 4-6.6 8.3-10.5 12.7c1.4 4.3 2.8 8.5 4 12.5c.9 3 1.8 5.8 2.6 8.6c3 9.8 5.5 18.2 8.6 25.9c3.9 9.8 7.4 15.4 10.8 18.5c2.6 2.4 5.9 4.3 12.8 4.3c8.7 0 16.9-4.2 33.7-13.2c15-8 35.7-18.8 62.3-18.8c13.3 0 24 10.7 24 24s-10.7 24-24 24c-13.4 0-24.7 5.2-39.7 13.2c-1 .6-2.1 1.1-3.2 1.7C559.9 414 541.4 424 520 424c-18.4 0-33.6-6.1-45.5-17.2c-11.1-10.3-17.9-23.7-22.7-36c-3.6-9-6.7-19.1-9.5-28.5c-16.4 12.3-36.1 23.6-58.9 31.3c3.6 10.8 8.4 23.5 14.4 36.2c7.5 15.9 16.2 30.4 25.8 40.5C433 460.5 441.2 464 448 464c13.3 0 24 10.7 24 24s-10.7 24-24 24c-25.2 0-45-13.5-59.5-28.8c-14.5-15.4-25.7-34.9-34.2-53c-8-17-14.1-33.8-18.3-46.9c-5.2 .4-10.6 .6-16 .6s-10.8-.2-16-.6c-4.2 13-10.3 29.9-18.3 46.9c-8.5 18.1-19.8 37.6-34.2 53C237 498.5 217.2 512 192 512c-13.3 0-24-10.7-24-24s10.7-24 24-24c6.8 0 15-3.5 24.5-13.7c9.5-10.1 18.3-24.6 25.8-40.5c5.9-12.6 10.7-25.4 14.4-36.2c-22.8-7.7-42.5-19-58.9-31.3c-2.9 9.4-6 19.5-9.5 28.5c-4.8 12.2-11.6 25.6-22.7 36C153.6 417.9 138.4 424 120 424c-21.4 0-39.9-10-53.1-17.1l0 0c-1.1-.6-2.2-1.2-3.2-1.7c-15-8-26.3-13.2-39.7-13.2c-13.3 0-24-10.7-24-24s10.7-24 24-24c26.6 0 47.3 10.8 62.3 18.8c16.8 9 25 13.2 33.7 13.2c6.8 0 10.2-1.9 12.8-4.3c3.4-3.2 7-8.8 10.8-18.5c3-7.7 5.6-16.1 8.6-25.9c.8-2.7 1.7-5.6 2.6-8.6c1.2-4 2.6-8.2 4-12.5c-3.9-4.5-7.4-8.8-10.5-12.7C136.9 303.5 122.5 312 104 312c-17.5 0-30.7-7.4-40.4-16.7c-8.4-8.1-14.8-18.3-19.4-25.7l-.6-.9c-5.4-8.6-8.8-13.9-12.5-17.4c-2.8-2.7-4.6-3.3-7.1-3.3c-13.3 0-24-10.7-24-24s10.7-24 24-24c17.5 0 30.7 7.4 40.4 16.7c8.4 8.1 14.8 18.3 19.4 25.7l.6 .9c5.4 8.6 8.8 13.9 12.5 17.4c2.8 2.7 4.6 3.3 7.1 3.3c3.3 0 8.7-1.7 19.4-13.4c5.1-5.6 10.4-12.3 16.7-20.4l1.4-1.8c5.8-7.4 12.2-15.7 19.3-24c13.8-16.2 30.3-32.8 51.4-46.4l-15.1-30.2c-1.7 .1-3.4 .2-5.1 .2c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64zm208 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M208 64a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 0c0 16.2-6 31.1-16 42.3l15.6 31.2c18.7-6 39.9-9.5 64.4-9.5s45.8 3.5 64.4 9.5L400 106.3C390 95.1 384 80.2 384 64c0-35.3 28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64c-1.7 0-3.4-.1-5.1-.2L427.8 158c21.1 13.6 37.7 30.2 51.4 46.4c7.1 8.3 13.5 16.6 19.3 24l1.4 1.8c6.3 8.1 11.6 14.8 16.7 20.4C527.3 262.3 532.7 264 536 264c2.5 0 4.3-.6 7.1-3.3c3.7-3.5 7.1-8.8 12.5-17.4l.6-.9c4.6-7.4 11-17.6 19.4-25.7c9.7-9.3 22.9-16.7 40.4-16.7c13.3 0 24 10.7 24 24s-10.7 24-24 24c-2.5 0-4.3 .6-7.1 3.3c-3.7 3.5-7.1 8.8-12.5 17.4l-.6 .9c-4.6 7.4-11 17.6-19.4 25.7c-9.7 9.3-22.9 16.7-40.4 16.7c-18.5 0-32.9-8.5-44.3-18.6c-3.1 4-6.6 8.3-10.5 12.7c1.4 4.3 2.8 8.5 4 12.5c.9 3 1.8 5.8 2.6 8.6c3 9.8 5.5 18.2 8.6 25.9c3.9 9.8 7.4 15.4 10.8 18.5c2.6 2.4 5.9 4.3 12.8 4.3c8.7 0 16.9-4.2 33.7-13.2c15-8 35.7-18.8 62.3-18.8c13.3 0 24 10.7 24 24s-10.7 24-24 24c-13.4 0-24.7 5.2-39.7 13.2c-1 .6-2.1 1.1-3.2 1.7C559.9 414 541.4 424 520 424c-18.4 0-33.6-6.1-45.5-17.2c-11.1-10.3-17.9-23.7-22.7-36c-3.6-9-6.7-19.1-9.5-28.5c-16.4 12.3-36.1 23.6-58.9 31.3c3.6 10.8 8.4 23.5 14.4 36.2c7.5 15.9 16.2 30.4 25.8 40.5C433 460.5 441.2 464 448 464c13.3 0 24 10.7 24 24s-10.7 24-24 24c-25.2 0-45-13.5-59.5-28.8c-14.5-15.4-25.7-34.9-34.2-53c-8-17-14.1-33.8-18.3-46.9c-5.2 .4-10.6 .6-16 .6s-10.8-.2-16-.6c-4.2 13-10.3 29.9-18.3 46.9c-8.5 18.1-19.8 37.6-34.2 53C237 498.5 217.2 512 192 512c-13.3 0-24-10.7-24-24s10.7-24 24-24c6.8 0 15-3.5 24.5-13.7c9.5-10.1 18.3-24.6 25.8-40.5c5.9-12.6 10.7-25.4 14.4-36.2c-22.8-7.7-42.5-19-58.9-31.3c-2.9 9.4-6 19.5-9.5 28.5c-4.8 12.2-11.6 25.6-22.7 36C153.6 417.9 138.4 424 120 424c-21.4 0-39.9-10-53.1-17.1l0 0c-1.1-.6-2.2-1.2-3.2-1.7c-15-8-26.3-13.2-39.7-13.2c-13.3 0-24-10.7-24-24s10.7-24 24-24c26.6 0 47.3 10.8 62.3 18.8c16.8 9 25 13.2 33.7 13.2c6.8 0 10.2-1.9 12.8-4.3c3.4-3.2 7-8.8 10.8-18.5c3-7.7 5.6-16.1 8.6-25.9c.8-2.7 1.7-5.6 2.6-8.6c1.2-4 2.6-8.2 4-12.5c-3.9-4.5-7.4-8.8-10.5-12.7C136.9 303.5 122.5 312 104 312c-17.5 0-30.7-7.4-40.4-16.7c-8.4-8.1-14.8-18.3-19.4-25.7l-.6-.9c-5.4-8.6-8.8-13.9-12.5-17.4c-2.8-2.7-4.6-3.3-7.1-3.3c-13.3 0-24-10.7-24-24s10.7-24 24-24c17.5 0 30.7 7.4 40.4 16.7c8.4 8.1 14.8 18.3 19.4 25.7l.6 .9c5.4 8.6 8.8 13.9 12.5 17.4c2.8 2.7 4.6 3.3 7.1 3.3c3.3 0 8.7-1.7 19.4-13.4c5.1-5.6 10.4-12.3 16.7-20.4l1.4-1.8c5.8-7.4 12.2-15.7 19.3-24c13.8-16.2 30.3-32.8 51.4-46.4l-15.1-30.2c-1.7 .1-3.4 .2-5.1 .2c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64zm208 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"speakap\": {\n    \"changes\": [\"5.0.0\", \"5.4.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3f3\",\n    \"label\": \"Speakap\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 391.78C-15.41 303.59-8 167.42 80.64 87.64s224.8-73 304.21 15.24 72 224.36-16.64 304.14c-18.74 16.87 64 43.09 42 52.26-82.06 34.21-253.91 35-346.23-67.5zm213.31-211.6l38.5-40.86c-9.61-8.89-32-26.83-76.17-27.6-52.33-.91-95.86 28.3-96.77 80-.2 11.33.29 36.72 29.42 54.83 34.46 21.42 86.52 21.51 86 52.26-.37 21.28-26.42 25.81-38.59 25.6-3-.05-30.23-.46-47.61-24.62l-40 42.61c28.16 27 59 32.62 83.49 33.05 10.23.18 96.42.33 97.84-81 .28-15.81-2.07-39.72-28.86-56.59-34.36-21.64-85-19.45-84.43-49.75.41-23.25 31-25.37 37.53-25.26.43 0 26.62.26 39.62 17.37z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"speaker-deck\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f83c\",\n    \"label\": \"Speaker Deck\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M213.86 296H100a100 100 0 0 1 0-200h132.84a40 40 0 0 1 0 80H98c-26.47 0-26.45 40 0 40h113.82a100 100 0 0 1 0 200H40a40 40 0 0 1 0-80h173.86c26.48 0 26.46-40 0-40zM298 416a120.21 120.21 0 0 0 51.11-80h64.55a19.83 19.83 0 0 0 19.66-20V196a19.83 19.83 0 0 0-19.66-20H296.42a60.77 60.77 0 0 0 0-80h136.93c43.44 0 78.65 35.82 78.65 80v160c0 44.18-35.21 80-78.65 80z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"spell-check\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f891\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dictionary\", \"edit\", \"editor\", \"grammar\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f891\",\n    \"label\": \"Spell Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M112 0C99.1 0 87.4 7.8 82.5 19.7l-66.7 160-13.3 32c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L66.7 224h90.7l5.1 12.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-13.3-32-66.7-160C136.6 7.8 124.9 0 112 0zm18.7 160H93.3L112 115.2 130.7 160zM256 32v96 96c0 17.7 14.3 32 32 32h80c44.2 0 80-35.8 80-80c0-23.1-9.8-43.8-25.4-58.4c6-11.2 9.4-24 9.4-37.6c0-44.2-35.8-80-80-80H288c-17.7 0-32 14.3-32 32zm96 64H320V64h32c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-32 64h32 16c8.8 0 16 7.2 16 16s-7.2 16-16 16H320V160zM566.6 310.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L352 434.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l192-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M112 0C99.1 0 87.4 7.8 82.5 19.7l-66.7 160-13.3 32c-6.8 16.3 .9 35 17.2 41.8s35-.9 41.8-17.2L66.7 224h90.7l5.1 12.3c6.8 16.3 25.5 24 41.8 17.2s24-25.5 17.2-41.8l-13.3-32-66.7-160C136.6 7.8 124.9 0 112 0zm18.7 160H93.3L112 115.2 130.7 160zM256 32v96 96c0 17.7 14.3 32 32 32h80c44.2 0 80-35.8 80-80c0-23.1-9.8-43.8-25.4-58.4c6-11.2 9.4-24 9.4-37.6c0-44.2-35.8-80-80-80H288c-17.7 0-32 14.3-32 32zm96 64H320V64h32c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-32 64h32 16c8.8 0 16 7.2 16 16s-7.2 16-16 16H320V160zM566.6 310.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L352 434.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l192-192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"spider\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f577\"],\n        \"secondary\": [\"10f717\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arachnid\",\n        \"bug\",\n        \"charlotte\",\n        \"crawl\",\n        \"eight\",\n        \"halloween\",\n        \"insect\",\n        \"spider\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f717\",\n    \"label\": \"Spider\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M158.4 32.6c4.8-12.4-1.4-26.3-13.8-31s-26.3 1.4-31 13.8L81.1 100c-7.9 20.7-3 44.1 12.7 59.7l57.4 57.4L70.8 190.3c-2.4-.8-4.3-2.7-5.1-5.1L46.8 128.4C42.6 115.8 29 109 16.4 113.2S-3 131 1.2 143.6l18.9 56.8c5.6 16.7 18.7 29.8 35.4 35.4L116.1 256 55.6 276.2c-16.7 5.6-29.8 18.7-35.4 35.4L1.2 368.4C-3 381 3.8 394.6 16.4 398.8s26.2-2.6 30.4-15.2l18.9-56.8c.8-2.4 2.7-4.3 5.1-5.1l80.4-26.8L93.7 352.3C78.1 368 73.1 391.4 81.1 412l32.5 84.6c4.8 12.4 18.6 18.5 31 13.8s18.5-18.6 13.8-31l-32.5-84.6c-1.1-3-.4-6.3 1.8-8.5L160 353.9c1 52.1 43.6 94.1 96 94.1s95-41.9 96-94.1l32.3 32.3c2.2 2.2 2.9 5.6 1.8 8.5l-32.5 84.6c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8L430.9 412c7.9-20.7 3-44.1-12.7-59.7l-57.4-57.4 80.4 26.8c2.4 .8 4.3 2.7 5.1 5.1l18.9 56.8c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-18.9-56.8c-5.6-16.7-18.7-29.8-35.4-35.4L395.9 256l60.5-20.2c16.7-5.6 29.8-18.7 35.4-35.4l18.9-56.8c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-18.9 56.8c-.8 2.4-2.7 4.3-5.1 5.1l-80.4 26.8 57.4-57.4c15.6-15.6 20.6-39 12.7-59.7L398.4 15.4C393.6 3 379.8-3.2 367.4 1.6s-18.5 18.6-13.8 31l32.5 84.6c1.1 3 .4 6.3-1.8 8.5L336 174.1V160c0-31.8-18.6-59.3-45.5-72.2c-9.1-4.4-18.5 3.3-18.5 13.4V112c0 8.8-7.2 16-16 16s-16-7.2-16-16V101.2c0-10.1-9.4-17.7-18.5-13.4C194.6 100.7 176 128.2 176 160v14.1l-48.3-48.3c-2.2-2.2-2.9-5.6-1.8-8.5l32.5-84.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M158.4 32.6c4.8-12.4-1.4-26.3-13.8-31s-26.3 1.4-31 13.8L81.1 100c-7.9 20.7-3 44.1 12.7 59.7l57.4 57.4L70.8 190.3c-2.4-.8-4.3-2.7-5.1-5.1L46.8 128.4C42.6 115.8 29 109 16.4 113.2S-3 131 1.2 143.6l18.9 56.8c5.6 16.7 18.7 29.8 35.4 35.4L116.1 256 55.6 276.2c-16.7 5.6-29.8 18.7-35.4 35.4L1.2 368.4C-3 381 3.8 394.6 16.4 398.8s26.2-2.6 30.4-15.2l18.9-56.8c.8-2.4 2.7-4.3 5.1-5.1l80.4-26.8L93.7 352.3C78.1 368 73.1 391.4 81.1 412l32.5 84.6c4.8 12.4 18.6 18.5 31 13.8s18.5-18.6 13.8-31l-32.5-84.6c-1.1-3-.4-6.3 1.8-8.5L160 353.9c1 52.1 43.6 94.1 96 94.1s95-41.9 96-94.1l32.3 32.3c2.2 2.2 2.9 5.6 1.8 8.5l-32.5 84.6c-4.8 12.4 1.4 26.3 13.8 31s26.3-1.4 31-13.8L430.9 412c7.9-20.7 3-44.1-12.7-59.7l-57.4-57.4 80.4 26.8c2.4 .8 4.3 2.7 5.1 5.1l18.9 56.8c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-18.9-56.8c-5.6-16.7-18.7-29.8-35.4-35.4L395.9 256l60.5-20.2c16.7-5.6 29.8-18.7 35.4-35.4l18.9-56.8c4.2-12.6-2.6-26.2-15.2-30.4s-26.2 2.6-30.4 15.2l-18.9 56.8c-.8 2.4-2.7 4.3-5.1 5.1l-80.4 26.8 57.4-57.4c15.6-15.6 20.6-39 12.7-59.7L398.4 15.4C393.6 3 379.8-3.2 367.4 1.6s-18.5 18.6-13.8 31l32.5 84.6c1.1 3 .4 6.3-1.8 8.5L336 174.1V160c0-31.8-18.6-59.3-45.5-72.2c-9.1-4.4-18.5 3.3-18.5 13.4V112c0 8.8-7.2 16-16 16s-16-7.2-16-16V101.2c0-10.1-9.4-17.7-18.5-13.4C194.6 100.7 176 128.2 176 160v14.1l-48.3-48.3c-2.2-2.2-2.9-5.6-1.8-8.5l32.5-84.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"spinner\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f110\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"circle\", \"loading\", \"progress\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f110\",\n    \"label\": \"Spinner\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"splotch\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5bc\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Ink\", \"blob\", \"blotch\", \"glob\", \"stain\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5bc\",\n    \"label\": \"Splotch\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M208.5 62.3l28.1-36.9C248.8 9.4 267.8 0 288 0c28.5 0 53.6 18.7 61.8 46l17.8 59.4c10.3 34.4 36.1 62 69.8 74.6l39.8 14.9c20.9 7.9 34.8 27.9 34.8 50.2c0 16.9-7.9 32.8-21.5 42.9l-67.3 50.5c-24.3 18.2-37.2 47.9-33.8 78.1l2.5 22.7c4.3 38.7-26 72.6-65 72.6c-14.8 0-29.3-5.1-40.8-14.3l-55.4-44.3c-4.5-3.6-9.3-6.7-14.5-9.2c-15.8-7.9-33.7-10.4-51-7.3L82.4 451.9C47.8 458.2 16 431.6 16 396.5c0-13.2 4.7-26 13.1-36.2l11.2-13.4c14.6-17.4 22.6-39.4 22.6-62.1c0-18.8-5.5-37.2-15.8-53L8.8 173.5C3.1 164.7 0 154.4 0 143.9c0-33.4 30.1-58.8 63-53.2l51.3 8.7c35.9 6.1 72.2-8.2 94.2-37.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M208.5 62.3l28.1-36.9C248.8 9.4 267.8 0 288 0c28.5 0 53.6 18.7 61.8 46l17.8 59.4c10.3 34.4 36.1 62 69.8 74.6l39.8 14.9c20.9 7.9 34.8 27.9 34.8 50.2c0 16.9-7.9 32.8-21.5 42.9l-67.3 50.5c-24.3 18.2-37.2 47.9-33.8 78.1l2.5 22.7c4.3 38.7-26 72.6-65 72.6c-14.8 0-29.3-5.1-40.8-14.3l-55.4-44.3c-4.5-3.6-9.3-6.7-14.5-9.2c-15.8-7.9-33.7-10.4-51-7.3L82.4 451.9C47.8 458.2 16 431.6 16 396.5c0-13.2 4.7-26 13.1-36.2l11.2-13.4c14.6-17.4 22.6-39.4 22.6-62.1c0-18.8-5.5-37.2-15.8-53L8.8 173.5C3.1 164.7 0 154.4 0 143.9c0-33.4 30.1-58.8 63-53.2l51.3 8.7c35.9 6.1 72.2-8.2 94.2-37.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"spoon\": {\n    \"aliases\": {\n      \"names\": [\"utensil-spoon\"],\n      \"unicodes\": {\n        \"composite\": [\"1f944\", \"f1b1\"],\n        \"secondary\": [\"10f2e5\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cutlery\",\n        \"dining\",\n        \"scoop\",\n        \"silverware\",\n        \"spoon\",\n        \"tableware\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2e5\",\n    \"label\": \"Spoon\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767421,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M245.8 220.9c-14.5-17.6-21.8-39.2-21.8-60.8C224 80 320 0 416 0c53 0 96 43 96 96c0 96-80 192-160.2 192c-21.6 0-43.2-7.3-60.8-21.8L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L245.8 220.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M245.8 220.9c-14.5-17.6-21.8-39.2-21.8-60.8C224 80 320 0 416 0c53 0 96 43 96 96c0 96-80 192-160.2 192c-21.6 0-43.2-7.3-60.8-21.8L54.6 502.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L245.8 220.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"spotify\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1bc\",\n    \"label\": \"Spotify\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"spray-can\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5bd\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Paint\", \"aerosol\", \"design\", \"graffiti\", \"tag\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5bd\",\n    \"label\": \"Spray Can\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 0h64c17.7 0 32 14.3 32 32v96H96V32c0-17.7 14.3-32 32-32zM0 256c0-53 43-96 96-96H224c53 0 96 43 96 96V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V256zm240 80A80 80 0 1 0 80 336a80 80 0 1 0 160 0zM256 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM448 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 0h64c17.7 0 32 14.3 32 32v96H96V32c0-17.7 14.3-32 32-32zM0 256c0-53 43-96 96-96H224c53 0 96 43 96 96V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V256zm240 80A80 80 0 1 0 80 336a80 80 0 1 0 160 0zM256 64a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm64 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm32 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM448 256a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM384 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"spray-can-sparkles\": {\n    \"aliases\": {\n      \"names\": [\"air-freshener\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5d0\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"car\", \"clean\", \"deodorize\", \"fresh\", \"pine\", \"scent\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5d0\",\n    \"label\": \"Spray Can Sparkles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 32v96H224V32c0-17.7-14.3-32-32-32H128C110.3 0 96 14.3 96 32zm0 128c-53 0-96 43-96 96V464c0 26.5 21.5 48 48 48H272c26.5 0 48-21.5 48-48V256c0-53-43-96-96-96H96zm64 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM384 48c0-1.4-1-3-2.2-3.6L352 32 339.6 2.2C339 1 337.4 0 336 0s-3 1-3.6 2.2L320 32 290.2 44.4C289 45 288 46.6 288 48c0 1.4 1 3 2.2 3.6L320 64l12.4 29.8C333 95 334.6 96 336 96s3-1 3.6-2.2L352 64l29.8-12.4C383 51 384 49.4 384 48zm76.4 45.8C461 95 462.6 96 464 96s3-1 3.6-2.2L480 64l29.8-12.4C511 51 512 49.4 512 48c0-1.4-1-3-2.2-3.6L480 32 467.6 2.2C467 1 465.4 0 464 0s-3 1-3.6 2.2L448 32 418.2 44.4C417 45 416 46.6 416 48c0 1.4 1 3 2.2 3.6L448 64l12.4 29.8zm7.2 100.4c-.6-1.2-2.2-2.2-3.6-2.2s-3 1-3.6 2.2L448 224l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L448 256l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L480 256l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6c0-1.4-1-3-2.2-3.6L480 224l-12.4-29.8zM448 144c0-1.4-1-3-2.2-3.6L416 128 403.6 98.2C403 97 401.4 96 400 96s-3 1-3.6 2.2L384 128l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L384 160l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L416 160l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 32v96H224V32c0-17.7-14.3-32-32-32H128C110.3 0 96 14.3 96 32zm0 128c-53 0-96 43-96 96V464c0 26.5 21.5 48 48 48H272c26.5 0 48-21.5 48-48V256c0-53-43-96-96-96H96zm64 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160zM384 48c0-1.4-1-3-2.2-3.6L352 32 339.6 2.2C339 1 337.4 0 336 0s-3 1-3.6 2.2L320 32 290.2 44.4C289 45 288 46.6 288 48c0 1.4 1 3 2.2 3.6L320 64l12.4 29.8C333 95 334.6 96 336 96s3-1 3.6-2.2L352 64l29.8-12.4C383 51 384 49.4 384 48zm76.4 45.8C461 95 462.6 96 464 96s3-1 3.6-2.2L480 64l29.8-12.4C511 51 512 49.4 512 48c0-1.4-1-3-2.2-3.6L480 32 467.6 2.2C467 1 465.4 0 464 0s-3 1-3.6 2.2L448 32 418.2 44.4C417 45 416 46.6 416 48c0 1.4 1 3 2.2 3.6L448 64l12.4 29.8zm7.2 100.4c-.6-1.2-2.2-2.2-3.6-2.2s-3 1-3.6 2.2L448 224l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L448 256l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L480 256l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6c0-1.4-1-3-2.2-3.6L480 224l-12.4-29.8zM448 144c0-1.4-1-3-2.2-3.6L416 128 403.6 98.2C403 97 401.4 96 400 96s-3 1-3.6 2.2L384 128l-29.8 12.4c-1.2 .6-2.2 2.2-2.2 3.6c0 1.4 1 3 2.2 3.6L384 160l12.4 29.8c.6 1.2 2.2 2.2 3.6 2.2s3-1 3.6-2.2L416 160l29.8-12.4c1.2-.6 2.2-2.2 2.2-3.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"25a0\", \"25fb\", \"25fc\", \"f096\"],\n        \"secondary\": [\"10f0c8\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Square\",\n        \"black medium square\",\n        \"block\",\n        \"box\",\n        \"geometric\",\n        \"shape\",\n        \"square\",\n        \"white medium square\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0c8\",\n    \"label\": \"Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 80c8.8 0 16 7.2 16 16V416c0 8.8-7.2 16-16 16H64c-8.8 0-16-7.2-16-16V96c0-8.8 7.2-16 16-16H384zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-arrow-up-right\": {\n    \"aliases\": {\n      \"names\": [\"external-link-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f14c\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"diagonal\", \"new\", \"open\", \"send\", \"share\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f14c\",\n    \"label\": \"Square Arrow Up Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM160 144c-13.3 0-24 10.7-24 24s10.7 24 24 24h94.1L119 327c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135V328c0 13.3 10.7 24 24 24s24-10.7 24-24V168c0-13.3-10.7-24-24-24H160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM160 144c-13.3 0-24 10.7-24 24s10.7 24 24 24h94.1L119 327c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135V328c0 13.3 10.7 24 24 24s24-10.7 24-24V168c0-13.3-10.7-24-24-24H160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-behance\": {\n    \"aliases\": {\n      \"names\": [\"behance-square\"]\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.0.3\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1b5\",\n    \"label\": \"Behance Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-caret-down\": {\n    \"aliases\": {\n      \"names\": [\"caret-square-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f150\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"caret-square-o-down\",\n        \"dropdown\",\n        \"expand\",\n        \"menu\",\n        \"more\",\n        \"triangle\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f150\",\n    \"label\": \"Square Caret Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 480c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 432c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0zm64-16c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 432c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0zm64-16c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320zM224 352c-6.7 0-13-2.8-17.6-7.7l-104-112c-6.5-7-8.2-17.2-4.4-25.9s12.5-14.4 22-14.4l208 0c9.5 0 18.2 5.7 22 14.4s2.1 18.9-4.4 25.9l-104 112c-4.5 4.9-10.9 7.7-17.6 7.7z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-caret-left\": {\n    \"aliases\": {\n      \"names\": [\"caret-square-left\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f191\"]\n      }\n    },\n    \"changes\": [\"4.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"back\", \"caret-square-o-left\", \"previous\", \"triangle\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f191\",\n    \"label\": \"Square Caret Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416zM128 256c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416zM128 256c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M48 416c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320zm16 64c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480zm64-224c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M48 416c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320zm16 64c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480zm64-224c0-6.7 2.8-13 7.7-17.6l112-104c7-6.5 17.2-8.2 25.9-4.4s14.4 12.5 14.4 22l0 208c0 9.5-5.7 18.2-14.4 22s-18.9 2.1-25.9-4.4l-112-104c-4.9-4.5-7.7-10.9-7.7-17.6z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-caret-right\": {\n    \"aliases\": {\n      \"names\": [\"caret-square-right\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f152\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"caret-square-o-right\", \"forward\", \"next\", \"triangle\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f152\",\n    \"label\": \"Square Caret Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 96c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320zM384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 96c0-8.8-7.2-16-16-16L64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320zM384 32c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96C0 60.7 28.7 32 64 32l320 0zM320 256c0 6.7-2.8 13-7.7 17.6l-112 104c-7 6.5-17.2 8.2-25.9 4.4s-14.4-12.5-14.4-22l0-208c0-9.5 5.7-18.2 14.4-22s18.9-2.1 25.9 4.4l112 104c4.9 4.5 7.7 10.9 7.7 17.6z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-caret-up\": {\n    \"aliases\": {\n      \"names\": [\"caret-square-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f151\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"caret-square-o-up\", \"collapse\", \"triangle\", \"upload\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f151\",\n    \"label\": \"Square Caret Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4H120c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM224 160c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4H120c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766331,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm224 64c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16l0 320c0 8.8 7.2 16 16 16l320 0c8.8 0 16-7.2 16-16l0-320c0-8.8-7.2-16-16-16L64 80zM0 96C0 60.7 28.7 32 64 32l320 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zm224 64c6.7 0 13 2.8 17.6 7.7l104 112c6.5 7 8.2 17.2 4.4 25.9s-12.5 14.4-22 14.4l-208 0c-9.5 0-18.2-5.7-22-14.4s-2.1-18.9 4.4-25.9l104-112c4.5-4.9 10.9-7.7 17.6-7.7z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-check\": {\n    \"aliases\": {\n      \"names\": [\"check-square\"],\n      \"unicodes\": {\n        \"composite\": [\"2611\", \"2705\", \"f046\"],\n        \"secondary\": [\"10f14a\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"accept\",\n        \"agree\",\n        \"box\",\n        \"button\",\n        \"check\",\n        \"check box with check\",\n        \"check mark button\",\n        \"checkmark\",\n        \"confirm\",\n        \"correct\",\n        \"done\",\n        \"mark\",\n        \"ok\",\n        \"select\",\n        \"success\",\n        \"tick\",\n        \"todo\",\n        \"yes\",\n        \"✓\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f14a\",\n    \"label\": \"Square Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-dribbble\": {\n    \"aliases\": {\n      \"names\": [\"dribbble-square\"]\n    },\n    \"changes\": [\"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f397\",\n    \"label\": \"Dribbble Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-5.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-envelope\": {\n    \"aliases\": {\n      \"names\": [\"envelope-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f199\"]\n      }\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"e-mail\",\n        \"email\",\n        \"letter\",\n        \"mail\",\n        \"message\",\n        \"notification\",\n        \"support\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f199\",\n    \"label\": \"Square Envelope\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM218 271.7L64.2 172.4C66 156.4 79.5 144 96 144H352c16.5 0 30 12.4 31.8 28.4L230 271.7c-1.8 1.2-3.9 1.8-6 1.8s-4.2-.6-6-1.8zm29.4 26.9L384 210.4V336c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V210.4l136.6 88.2c7 4.5 15.1 6.9 23.4 6.9s16.4-2.4 23.4-6.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM218 271.7L64.2 172.4C66 156.4 79.5 144 96 144H352c16.5 0 30 12.4 31.8 28.4L230 271.7c-1.8 1.2-3.9 1.8-6 1.8s-4.2-.6-6-1.8zm29.4 26.9L384 210.4V336c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V210.4l136.6 88.2c7 4.5 15.1 6.9 23.4 6.9s16.4-2.4 23.4-6.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-facebook\": {\n    \"aliases\": {\n      \"names\": [\"facebook-square\"]\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"5.8.2\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"social network\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f082\",\n    \"label\": \"Facebook Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-font-awesome\": {\n    \"changes\": [\"5.0.0\", \"5.0.1\", \"6.0.0-beta1\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e5ad\",\n    \"label\": \"Font Awesome in Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384.5,32.5h-320c-35.3,0-64,28.7-64,64v320c0,35.3,28.7,64,64,64h320c35.3,0,64-28.7,64-64v-320 C448.5,61.2,419.8,32.5,384.5,32.5z M336.5,312.5c-31.6,11.2-41.2,16-59.8,16c-31.4,0-43.2-16-74.6-16c-10.2,0-18.2,1.6-25.6,4v-32 c7.4-2.2,15.4-4,25.6-4c31.2,0,43.2,16,74.6,16c10.2,0,17.8-1.4,27.8-4.6v-96c-10,3.2-17.6,4.6-27.8,4.6c-31.4,0-43.2-16-74.6-16 c-25.4,0-37.4,10.4-57.6,14.4v153.6c0,8.8-7.2,16-16,16c-8.8,0-16-7.2-16-16v-192c0-8.8,7.2-16,16-16c8.8,0,16,7.2,16,16v6.4 c20.2-4,32.2-14.4,57.6-14.4c31.2,0,43.2,16,74.6,16c18.6,0,28.2-4.8,59.8-16V312.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384.5,32.5h-320c-35.3,0-64,28.7-64,64v320c0,35.3,28.7,64,64,64h320c35.3,0,64-28.7,64-64v-320 C448.5,61.2,419.8,32.5,384.5,32.5z M336.5,312.5c-31.6,11.2-41.2,16-59.8,16c-31.4,0-43.2-16-74.6-16c-10.2,0-18.2,1.6-25.6,4v-32 c7.4-2.2,15.4-4,25.6-4c31.2,0,43.2,16,74.6,16c10.2,0,17.8-1.4,27.8-4.6v-96c-10,3.2-17.6,4.6-27.8,4.6c-31.4,0-43.2-16-74.6-16 c-25.4,0-37.4,10.4-57.6,14.4v153.6c0,8.8-7.2,16-16,16c-8.8,0-16-7.2-16-16v-192c0-8.8,7.2-16,16-16c8.8,0,16,7.2,16,16v6.4 c20.2-4,32.2-14.4,57.6-14.4c31.2,0,43.2,16,74.6,16c18.6,0,28.2-4.8,59.8-16V312.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-font-awesome-stroke\": {\n    \"aliases\": {\n      \"names\": [\"font-awesome-alt\"]\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f35c\",\n    \"label\": \"Font Awesome in Square with Stroke Outline\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M201.6,152c-25.4,0-37.4,10.4-57.6,14.4V160c0-8.8-7.2-16-16-16s-16,7.2-16,16v192c0,0.8,0.1,1.6,0.2,2.4 c0.1,0.4,0.1,0.8,0.2,1.2c1.6,7.1,8,12.4,15.6,12.4s14-5.3,15.6-12.4c0.1-0.4,0.2-0.8,0.2-1.2c0.1-0.8,0.2-1.6,0.2-2.4V198.4 c4-0.8,7.7-1.8,11.2-3c14.3-4.7,26-11.4,46.4-11.4c31.4,0,43.2,16,74.6,16c8.9,0,15.9-1.1,24.2-3.5c1.2-0.3,2.4-0.7,3.6-1.1v96 c-10,3.2-17.6,4.6-27.8,4.6c-31.4,0-43.4-16-74.6-16c-10.2,0-18.2,1.8-25.6,4v32c7.4-2.4,15.4-4,25.6-4c31.4,0,43.2,16,74.6,16 c18.6,0,28.2-4.8,59.8-16V152c-31.6,11.2-41.2,16-59.8,16C244.8,168,232.8,152,201.6,152z M384,32H64C28.7,32,0,60.7,0,96v320 c0,35.3,28.7,64,64,64h320c35.3,0,64-28.7,64-64V96C448,60.7,419.3,32,384,32z M416,416c0,17.6-14.4,32-32,32H64 c-17.6,0-32-14.4-32-32V96c0-17.6,14.4-32,32-32h320c17.6,0,32,14.4,32,32V416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M201.6,152c-25.4,0-37.4,10.4-57.6,14.4V160c0-8.8-7.2-16-16-16s-16,7.2-16,16v192c0,0.8,0.1,1.6,0.2,2.4 c0.1,0.4,0.1,0.8,0.2,1.2c1.6,7.1,8,12.4,15.6,12.4s14-5.3,15.6-12.4c0.1-0.4,0.2-0.8,0.2-1.2c0.1-0.8,0.2-1.6,0.2-2.4V198.4 c4-0.8,7.7-1.8,11.2-3c14.3-4.7,26-11.4,46.4-11.4c31.4,0,43.2,16,74.6,16c8.9,0,15.9-1.1,24.2-3.5c1.2-0.3,2.4-0.7,3.6-1.1v96 c-10,3.2-17.6,4.6-27.8,4.6c-31.4,0-43.4-16-74.6-16c-10.2,0-18.2,1.8-25.6,4v32c7.4-2.4,15.4-4,25.6-4c31.4,0,43.2,16,74.6,16 c18.6,0,28.2-4.8,59.8-16V152c-31.6,11.2-41.2,16-59.8,16C244.8,168,232.8,152,201.6,152z M384,32H64C28.7,32,0,60.7,0,96v320 c0,35.3,28.7,64,64,64h320c35.3,0,64-28.7,64-64V96C448,60.7,419.3,32,384,32z M416,416c0,17.6-14.4,32-32,32H64 c-17.6,0-32-14.4-32-32V96c0-17.6,14.4-32,32-32h320c17.6,0,32,14.4,32,32V416z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-full\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\n          \"1f7e5\",\n          \"1f7e6\",\n          \"1f7e7\",\n          \"1f7e8\",\n          \"1f7e9\",\n          \"1f7ea\",\n          \"1f7eb\",\n          \"2b1b\",\n          \"2b1c\"\n        ],\n        \"secondary\": [\"10f45c\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.5\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"black large square\",\n        \"block\",\n        \"blue\",\n        \"blue square\",\n        \"box\",\n        \"brown\",\n        \"brown square\",\n        \"geometric\",\n        \"green\",\n        \"green square\",\n        \"orange\",\n        \"orange square\",\n        \"purple\",\n        \"purple square\",\n        \"red\",\n        \"red square\",\n        \"shape\",\n        \"square\",\n        \"white large square\",\n        \"yellow\",\n        \"yellow square\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f45c\",\n    \"label\": \"Square Full\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 0H512V512H0V0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 0H512V512H0V0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 48V464H48V48H464zM48 0H0V48 464v48H48 464h48V464 48 0H464 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 48V464H48V48H464zM48 0H0V48 464v48H48 464h48V464 48 0H464 48z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-git\": {\n    \"aliases\": {\n      \"names\": [\"git-square\"]\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.8.2\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d2\",\n    \"label\": \"Git Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M100.59 334.24c48.57 3.31 58.95 2.11 58.95 11.94 0 20-65.55 20.06-65.55 1.52.01-5.09 3.29-9.4 6.6-13.46zm27.95-116.64c-32.29 0-33.75 44.47-.75 44.47 32.51 0 31.71-44.47.75-44.47zM448 80v352a48 48 0 0 1-48 48H48a48 48 0 0 1-48-48V80a48 48 0 0 1 48-48h352a48 48 0 0 1 48 48zm-227 69.31c0 14.49 8.38 22.88 22.86 22.88 14.74 0 23.13-8.39 23.13-22.88S258.62 127 243.88 127c-14.48 0-22.88 7.84-22.88 22.31zM199.18 195h-49.55c-25-6.55-81.56-4.85-81.56 46.75 0 18.8 9.4 32 21.85 38.11C74.23 294.23 66.8 301 66.8 310.6c0 6.87 2.79 13.22 11.18 16.76-8.9 8.4-14 14.48-14 25.92C64 373.35 81.53 385 127.52 385c44.22 0 69.87-16.51 69.87-45.73 0-36.67-28.23-35.32-94.77-39.38l8.38-13.43c17 4.74 74.19 6.23 74.19-42.43 0-11.69-4.83-19.82-9.4-25.67l23.38-1.78zm84.34 109.84l-13-1.78c-3.82-.51-4.07-1-4.07-5.09V192.52h-52.6l-2.79 20.57c15.75 5.55 17 4.86 17 10.17V298c0 5.62-.31 4.58-17 6.87v20.06h72.42zM384 315l-6.87-22.37c-40.93 15.37-37.85-12.41-37.85-16.73v-60.72h37.85v-25.41h-35.82c-2.87 0-2 2.52-2-38.63h-24.18c-2.79 27.7-11.68 38.88-34 41.42v22.62c20.47 0 19.82-.85 19.82 2.54v66.57c0 28.72 11.43 40.91 41.67 40.91 14.45 0 30.45-4.83 41.38-10.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-github\": {\n    \"aliases\": {\n      \"names\": [\"github-square\"]\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"octocat\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f092\",\n    \"label\": \"GitHub Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-gitlab\": {\n    \"aliases\": {\n      \"names\": [\"gitlab-square\"]\n    },\n    \"changes\": [\"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e5ae\",\n    \"label\": \"Square Gitlab\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M48 32H400C426.5 32 448 53.5 448 80V432C448 458.5 426.5 480 400 480H48C21.5 480 0 458.5 0 432V80C0 53.5 21.5 32 48 32zM382.1 224.9L337.5 108.5C336.6 106.2 334.9 104.2 332.9 102.9C331.3 101.9 329.5 101.3 327.7 101.1C325.9 100.9 324 101.2 322.3 101.8C320.6 102.5 319 103.5 317.8 104.9C316.6 106.3 315.7 107.9 315.2 109.7L285 201.9H162.1L132.9 109.7C132.4 107.9 131.4 106.3 130.2 104.9C128.1 103.6 127.4 102.5 125.7 101.9C123.1 101.2 122.1 100.1 120.3 101.1C118.5 101.3 116.7 101.9 115.1 102.9C113.1 104.2 111.5 106.2 110.6 108.5L65.94 224.9L65.47 226.1C59.05 242.9 58.26 261.3 63.22 278.6C68.18 295.9 78.62 311.1 92.97 321.9L93.14 322L93.52 322.3L161.4 373.2L215.6 414.1C217.1 415.1 220.9 416.9 223.9 416.9C226.9 416.9 229.9 415.1 232.3 414.1L286.4 373.2L354.8 322L355 321.9C369.4 311 379.8 295.8 384.8 278.6C389.7 261.3 388.1 242.9 382.5 226.1L382.1 224.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M48 32H400C426.5 32 448 53.5 448 80V432C448 458.5 426.5 480 400 480H48C21.5 480 0 458.5 0 432V80C0 53.5 21.5 32 48 32zM382.1 224.9L337.5 108.5C336.6 106.2 334.9 104.2 332.9 102.9C331.3 101.9 329.5 101.3 327.7 101.1C325.9 100.9 324 101.2 322.3 101.8C320.6 102.5 319 103.5 317.8 104.9C316.6 106.3 315.7 107.9 315.2 109.7L285 201.9H162.1L132.9 109.7C132.4 107.9 131.4 106.3 130.2 104.9C128.1 103.6 127.4 102.5 125.7 101.9C123.1 101.2 122.1 100.1 120.3 101.1C118.5 101.3 116.7 101.9 115.1 102.9C113.1 104.2 111.5 106.2 110.6 108.5L65.94 224.9L65.47 226.1C59.05 242.9 58.26 261.3 63.22 278.6C68.18 295.9 78.62 311.1 92.97 321.9L93.14 322L93.52 322.3L161.4 373.2L215.6 414.1C217.1 415.1 220.9 416.9 223.9 416.9C226.9 416.9 229.9 415.1 232.3 414.1L286.4 373.2L354.8 322L355 321.9C369.4 311 379.8 295.8 384.8 278.6C389.7 261.3 388.1 242.9 382.5 226.1L382.1 224.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-google-plus\": {\n    \"aliases\": {\n      \"names\": [\"google-plus-square\"]\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"social network\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f0d4\",\n    \"label\": \"Google Plus Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014470,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-h\": {\n    \"aliases\": {\n      \"names\": [\"h-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0fd\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"directions\", \"emergency\", \"hospital\", \"hotel\", \"letter\", \"map\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0fd\",\n    \"label\": \"Square H\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM336 152V256 360c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H160l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24v80H288V152c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM336 152V256 360c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H160l0 80c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-208c0-13.3 10.7-24 24-24s24 10.7 24 24v80H288V152c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-hacker-news\": {\n    \"aliases\": {\n      \"names\": [\"hacker-news-square\"]\n    },\n    \"changes\": [\"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3af\",\n    \"label\": \"Hacker News Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-instagram\": {\n    \"aliases\": {\n      \"names\": [\"instagram-square\"]\n    },\n    \"changes\": [\"5.12.1\", \"5.14.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e055\",\n    \"label\": \"Instagram Square\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224,202.66A53.34,53.34,0,1,0,277.36,256,53.38,53.38,0,0,0,224,202.66Zm124.71-41a54,54,0,0,0-30.41-30.41c-21-8.29-71-6.43-94.3-6.43s-73.25-1.93-94.31,6.43a54,54,0,0,0-30.41,30.41c-8.28,21-6.43,71.05-6.43,94.33S91,329.26,99.32,350.33a54,54,0,0,0,30.41,30.41c21,8.29,71,6.43,94.31,6.43s73.24,1.93,94.3-6.43a54,54,0,0,0,30.41-30.41c8.35-21,6.43-71.05,6.43-94.33S357.1,182.74,348.75,161.67ZM224,338a82,82,0,1,1,82-82A81.9,81.9,0,0,1,224,338Zm85.38-148.3a19.14,19.14,0,1,1,19.13-19.14A19.1,19.1,0,0,1,309.42,189.74ZM400,32H48A48,48,0,0,0,0,80V432a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V80A48,48,0,0,0,400,32ZM382.88,322c-1.29,25.63-7.14,48.34-25.85,67s-41.4,24.63-67,25.85c-26.41,1.49-105.59,1.49-132,0-25.63-1.29-48.26-7.15-67-25.85s-24.63-41.42-25.85-67c-1.49-26.42-1.49-105.61,0-132,1.29-25.63,7.07-48.34,25.85-67s41.47-24.56,67-25.78c26.41-1.49,105.59-1.49,132,0,25.63,1.29,48.33,7.15,67,25.85s24.63,41.42,25.85,67.05C384.37,216.44,384.37,295.56,382.88,322Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-js\": {\n    \"aliases\": {\n      \"names\": [\"js-square\"]\n    },\n    \"changes\": [\"5.0.0\", \"5.0.3\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3b9\",\n    \"label\": \"JavaScript (JS) Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-lastfm\": {\n    \"aliases\": {\n      \"names\": [\"lastfm-square\"]\n    },\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"5.0.11\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f203\",\n    \"label\": \"last.fm Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-minus\": {\n    \"aliases\": {\n      \"names\": [\"minus-square\"],\n      \"unicodes\": {\n        \"composite\": [\"f147\"],\n        \"secondary\": [\"10f146\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"collapse\",\n        \"delete\",\n        \"hide\",\n        \"minify\",\n        \"negative\",\n        \"remove\",\n        \"shape\",\n        \"trash\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f146\",\n    \"label\": \"Square Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm88 200H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm88 200H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767553,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM152 232H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM152 232H296c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-nfi\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"non-food item\", \"supplies\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e576\",\n    \"label\": \"Square Nfi\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm75.7 64.6C68.8 162.5 64 168.8 64 176V336c0 8.8 7.2 16 16 16s16-7.2 16-16V233.8l66.3 110.5c3.7 6.2 11.1 9.1 18 7.2s11.7-8.2 11.7-15.4V176c0-8.8-7.2-16-16-16s-16 7.2-16 16V278.2L93.7 167.8c-3.7-6.2-11.1-9.1-18-7.2zM224 176v64 96c0 8.8 7.2 16 16 16s16-7.2 16-16V256h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H256V192h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H240c-8.8 0-16 7.2-16 16zm160 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V336c0 8.8 7.2 16 16 16s16-7.2 16-16V176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm75.7 64.6C68.8 162.5 64 168.8 64 176V336c0 8.8 7.2 16 16 16s16-7.2 16-16V233.8l66.3 110.5c3.7 6.2 11.1 9.1 18 7.2s11.7-8.2 11.7-15.4V176c0-8.8-7.2-16-16-16s-16 7.2-16 16V278.2L93.7 167.8c-3.7-6.2-11.1-9.1-18-7.2zM224 176v64 96c0 8.8 7.2 16 16 16s16-7.2 16-16V256h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H256V192h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H240c-8.8 0-16 7.2-16 16zm160 0c0-8.8-7.2-16-16-16s-16 7.2-16 16V336c0 8.8 7.2 16 16 16s16-7.2 16-16V176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-odnoklassniki\": {\n    \"aliases\": {\n      \"names\": [\"odnoklassniki-square\"]\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f264\",\n    \"label\": \"Odnoklassniki Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.6 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-parking\": {\n    \"aliases\": {\n      \"names\": [\"parking\"],\n      \"unicodes\": {\n        \"composite\": [\"1f17f\"],\n        \"secondary\": [\"10f540\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"auto\", \"car\", \"garage\", \"meter\", \"parking\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f540\",\n    \"label\": \"Square Parking\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM192 256h48c17.7 0 32-14.3 32-32s-14.3-32-32-32H192v64zm48 64H192v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 168c0-22.1 17.9-40 40-40h72c53 0 96 43 96 96s-43 96-96 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM192 256h48c17.7 0 32-14.3 32-32s-14.3-32-32-32H192v64zm48 64H192v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V288 168c0-22.1 17.9-40 40-40h72c53 0 96 43 96 96s-43 96-96 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-pen\": {\n    \"aliases\": {\n      \"names\": [\"pen-square\", \"pencil-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f14b\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"pencil-square\", \"update\", \"write\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f14b\",\n    \"label\": \"Square Pen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM325.8 139.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-21.4 21.4-71-71 21.4-21.4c15.6-15.6 40.9-15.6 56.6 0zM119.9 289L225.1 183.8l71 71L190.9 359.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM325.8 139.7l14.4 14.4c15.6 15.6 15.6 40.9 0 56.6l-21.4 21.4-71-71 21.4-21.4c15.6-15.6 40.9-15.6 56.6 0zM119.9 289L225.1 183.8l71 71L190.9 359.9c-4.1 4.1-9.2 7-14.9 8.4l-60.1 15c-5.5 1.4-11.2-.2-15.2-4.2s-5.6-9.7-4.2-15.2l15-60.1c1.4-5.6 4.3-10.8 8.4-14.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-person-confined\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"captivity\", \"confined\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e577\",\n    \"label\": \"Square Person Confined\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm96 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm80 104c0-30.9 25.1-56 56-56s56 25.1 56 56V350.1c0 36.4-29.5 65.9-65.9 65.9c-17.5 0-34.3-6.9-46.6-19.3L184.8 342l-28.1 56.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l48-96c4.6-9.2 13.3-15.6 23.5-17.3s20.5 1.7 27.8 9L240 306.7V248z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm96 112a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm80 104c0-30.9 25.1-56 56-56s56 25.1 56 56V350.1c0 36.4-29.5 65.9-65.9 65.9c-17.5 0-34.3-6.9-46.6-19.3L184.8 342l-28.1 56.3c-7.9 15.8-27.1 22.2-42.9 14.3s-22.2-27.1-14.3-42.9l48-96c4.6-9.2 13.3-15.6 23.5-17.3s20.5 1.7 27.8 9L240 306.7V248z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-phone\": {\n    \"aliases\": {\n      \"names\": [\"phone-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f098\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"call\", \"earphone\", \"number\", \"support\", \"telephone\", \"voice\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f098\",\n    \"label\": \"Square Phone\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm90.7 96.7c9.7-2.6 19.9 2.3 23.7 11.6l20 48c3.4 8.2 1 17.6-5.8 23.2L168 231.7c16.6 35.2 45.1 63.7 80.3 80.3l20.2-24.7c5.6-6.8 15-9.2 23.2-5.8l48 20c9.3 3.9 14.2 14 11.6 23.7l-12 44C336.9 378 329 384 320 384C196.3 384 96 283.7 96 160c0-9 6-16.9 14.7-19.3l44-12z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm90.7 96.7c9.7-2.6 19.9 2.3 23.7 11.6l20 48c3.4 8.2 1 17.6-5.8 23.2L168 231.7c16.6 35.2 45.1 63.7 80.3 80.3l20.2-24.7c5.6-6.8 15-9.2 23.2-5.8l48 20c9.3 3.9 14.2 14 11.6 23.7l-12 44C336.9 378 329 384 320 384C196.3 384 96 283.7 96 160c0-9 6-16.9 14.7-19.3l44-12z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-phone-flip\": {\n    \"aliases\": {\n      \"names\": [\"phone-square-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f87b\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"5.10.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"call\", \"earphone\", \"number\", \"support\", \"telephone\", \"voice\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f87b\",\n    \"label\": \"Square Phone Flip\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767392,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zm-90.7 96.7c-9.7-2.6-19.9 2.3-23.7 11.6l-20 48c-3.4 8.2-1 17.6 5.8 23.2L280 231.7c-16.6 35.2-45.1 63.7-80.3 80.3l-20.2-24.7c-5.6-6.8-15-9.2-23.2-5.8l-48 20c-9.3 3.9-14.2 14-11.6 23.7l12 44C111.1 378 119 384 128 384c123.7 0 224-100.3 224-224c0-9-6-16.9-14.7-19.3l-44-12z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zm-90.7 96.7c-9.7-2.6-19.9 2.3-23.7 11.6l-20 48c-3.4 8.2-1 17.6 5.8 23.2L280 231.7c-16.6 35.2-45.1 63.7-80.3 80.3l-20.2-24.7c-5.6-6.8-15-9.2-23.2-5.8l-48 20c-9.3 3.9-14.2 14-11.6 23.7l12 44C111.1 378 119 384 128 384c123.7 0 224-100.3 224-224c0-9-6-16.9-14.7-19.3l-44-12z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-pied-piper\": {\n    \"aliases\": {\n      \"names\": [\"pied-piper-square\"]\n    },\n    \"changes\": [\"5.12.0\", \"5.14.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e01e\",\n    \"label\": \"Pied Piper Square Logo (Old)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-pinterest\": {\n    \"aliases\": {\n      \"names\": [\"pinterest-square\"]\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f0d3\",\n    \"label\": \"Pinterest Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-plus\": {\n    \"aliases\": {\n      \"names\": [\"plus-square\"],\n      \"unicodes\": {\n        \"composite\": [\"f196\"],\n        \"secondary\": [\"10f0fe\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"create\", \"expand\", \"new\", \"positive\", \"shape\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f0fe\",\n    \"label\": \"Square Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H384c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"square-poll-horizontal\": {\n    \"aliases\": {\n      \"names\": [\"poll-h\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f682\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"chart\",\n        \"graph\",\n        \"results\",\n        \"survey\",\n        \"trend\",\n        \"vote\",\n        \"voting\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f682\",\n    \"label\": \"Square Poll Horizontal\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256 160c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32zm64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0zM192 352c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 96c0-35.3-28.7-64-64-64L64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320zM256 160c0 17.7-14.3 32-32 32l-96 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l96 0c17.7 0 32 14.3 32 32zm64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l192 0zM192 352c0 17.7-14.3 32-32 32l-32 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l32 0c17.7 0 32 14.3 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-poll-vertical\": {\n    \"aliases\": {\n      \"names\": [\"poll\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f681\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"chart\",\n        \"graph\",\n        \"results\",\n        \"survey\",\n        \"trend\",\n        \"vote\",\n        \"voting\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f681\",\n    \"label\": \"Square Poll Vertical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 192c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm64-64c0-17.7 14.3-32 32-32s32 14.3 32 32V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V160zM320 288c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V320c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm64 192c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V256c0-17.7 14.3-32 32-32zm64-64c0-17.7 14.3-32 32-32s32 14.3 32 32V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V160zM320 288c17.7 0 32 14.3 32 32v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V320c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-reddit\": {\n    \"aliases\": {\n      \"names\": [\"reddit-square\"]\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a2\",\n    \"label\": \"reddit Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-root-variable\": {\n    \"aliases\": {\n      \"names\": [\"square-root-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f698\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arithmetic\", \"calculus\", \"division\", \"math\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f698\",\n    \"label\": \"Square Root Variable\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M282.6 78.1c8-27.3 33-46.1 61.4-46.1H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H344L238.7 457c-3.6 12.3-14.1 21.2-26.8 22.8s-25.1-4.6-31.5-15.6L77.6 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H77.6c22.8 0 43.8 12.1 55.3 31.8l65.2 111.8L282.6 78.1zM393.4 233.4c12.5-12.5 32.8-12.5 45.3 0L480 274.7l41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 320l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 365.3l-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 320l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M282.6 78.1c8-27.3 33-46.1 61.4-46.1H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H344L238.7 457c-3.6 12.3-14.1 21.2-26.8 22.8s-25.1-4.6-31.5-15.6L77.6 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H77.6c22.8 0 43.8 12.1 55.3 31.8l65.2 111.8L282.6 78.1zM393.4 233.4c12.5-12.5 32.8-12.5 45.3 0L480 274.7l41.4-41.4c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L525.3 320l41.4 41.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L480 365.3l-41.4 41.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L434.7 320l-41.4-41.4c-12.5-12.5-12.5-32.8 0-45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-rss\": {\n    \"aliases\": {\n      \"names\": [\"rss-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f143\"]\n      }\n    },\n    \"changes\": [\"3.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blog\", \"feed\", \"journal\", \"news\", \"writing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f143\",\n    \"label\": \"Square Rss\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM96 136c0-13.3 10.7-24 24-24c137 0 248 111 248 248c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24c83.9 0 152 68.1 152 152c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104c-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM96 136c0-13.3 10.7-24 24-24c137 0 248 111 248 248c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24c83.9 0 152 68.1 152 152c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104c-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-share-nodes\": {\n    \"aliases\": {\n      \"names\": [\"share-alt-square\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1e1\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"forward\", \"save\", \"send\", \"social\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1e1\",\n    \"label\": \"Square Share Nodes\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM384 160c0 35.3-28.7 64-64 64c-15.4 0-29.5-5.4-40.6-14.5L194.1 256l85.3 46.5c11-9.1 25.2-14.5 40.6-14.5c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-2.5 .1-4.9 .4-7.3L174.5 300c-11.7 12.3-28.2 20-46.5 20c-35.3 0-64-28.7-64-64s28.7-64 64-64c18.3 0 34.8 7.7 46.5 20l81.9-44.7c-.3-2.4-.4-4.9-.4-7.3c0-35.3 28.7-64 64-64s64 28.7 64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM384 160c0 35.3-28.7 64-64 64c-15.4 0-29.5-5.4-40.6-14.5L194.1 256l85.3 46.5c11-9.1 25.2-14.5 40.6-14.5c35.3 0 64 28.7 64 64s-28.7 64-64 64s-64-28.7-64-64c0-2.5 .1-4.9 .4-7.3L174.5 300c-11.7 12.3-28.2 20-46.5 20c-35.3 0-64-28.7-64-64s28.7-64 64-64c18.3 0 34.8 7.7 46.5 20l81.9-44.7c-.3-2.4-.4-4.9-.4-7.3c0-35.3 28.7-64 64-64s64 28.7 64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-snapchat\": {\n    \"aliases\": {\n      \"names\": [\"snapchat-square\"]\n    },\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2ad\",\n    \"label\": \"Snapchat Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384,32H64A64,64,0,0,0,0,96V416a64,64,0,0,0,64,64H384a64,64,0,0,0,64-64V96A64,64,0,0,0,384,32Zm-3.907,319.309-.083.1a32.364,32.364,0,0,1-8.717,6.823,90.26,90.26,0,0,1-20.586,8.2,12.694,12.694,0,0,0-3.852,1.76c-2.158,1.909-2.1,4.64-4.4,8.55a23.137,23.137,0,0,1-6.84,7.471c-6.707,4.632-14.244,4.923-22.23,5.23-7.214.274-15.39.581-24.729,3.669-3.761,1.245-7.753,3.694-12.377,6.533-11.265,6.9-26.68,16.353-52.3,16.353s-40.925-9.4-52.106-16.279c-4.657-2.888-8.675-5.362-12.543-6.64-9.339-3.08-17.516-3.4-24.729-3.67-7.986-.307-15.523-.6-22.231-5.229a23.085,23.085,0,0,1-6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.428,13.428,0,0,0-4.1-1.834,89.986,89.986,0,0,1-20.313-8.127,32.905,32.905,0,0,1-8.3-6.284c-6.583-6.757-8.276-14.776-5.686-21.824,3.436-9.338,11.571-12.111,19.4-16.262,14.776-8.027,26.348-18.055,34.433-29.884a68.236,68.236,0,0,0,5.985-10.567c.789-2.158.772-3.329.241-4.416a7.386,7.386,0,0,0-2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.245a28.4,28.4,0,0,1-1.369-23.584c4.134-10.924,14.469-17.706,26.978-17.706a37.141,37.141,0,0,1,7.845.83c.689.15,1.37.307,2.042.482-.108-7.43.058-15.357.722-23.119,2.358-27.261,11.912-41.589,21.874-52.994a86.836,86.836,0,0,1,22.28-17.931C188.254,100.383,205.312,96,224,96s35.828,4.383,50.944,13.016a87.169,87.169,0,0,1,22.239,17.9c9.961,11.406,19.516,25.709,21.874,52.995a231.194,231.194,0,0,1,.713,23.118c.673-.174,1.362-.332,2.051-.481a37.131,37.131,0,0,1,7.844-.83c12.5,0,22.82,6.782,26.971,17.706a28.37,28.37,0,0,1-1.4,23.559c-2.74,5.2-7.123,9.861-13.39,14.244-1.668,1.187-4.258,2.864-7.529,4.981-1.835,1.187-4.541,2.947-7.164,4.682a6.856,6.856,0,0,0-1.951,2.034c-.506,1.046-.539,2.191.166,4.208a69.015,69.015,0,0,0,6.085,10.792c8.268,12.1,20.188,22.313,35.454,30.407,1.486.772,2.98,1.5,4.441,2.258.722.332,1.569.763,2.491,1.3,4.9,2.723,9.2,6.01,11.455,12.153C387.821,336.915,386.269,344.7,380.093,351.309Zm-16.719-18.461c-50.313-24.314-58.332-61.918-58.689-64.749-.431-3.379-.921-6.035,2.806-9.472,3.594-3.328,19.541-13.19,23.965-16.278,7.33-5.114,10.534-10.219,8.16-16.495-1.66-4.316-5.686-5.976-9.961-5.976a18.5,18.5,0,0,0-3.993.448c-8.035,1.743-15.838,5.769-20.354,6.857a7.1,7.1,0,0,1-1.66.224c-2.408,0-3.279-1.071-3.088-3.968.564-8.783,1.759-25.925.373-41.937-1.884-22.032-8.99-32.948-17.432-42.6-4.051-4.624-23.135-24.654-59.536-24.654S168.53,134.359,164.479,139c-8.434,9.654-15.531,20.57-17.432,42.6-1.386,16.013-.141,33.147.373,41.937.166,2.756-.68,3.968-3.088,3.968a7.1,7.1,0,0,1-1.66-.224c-4.507-1.087-12.31-5.113-20.346-6.856a18.494,18.494,0,0,0-3.993-.449c-4.25,0-8.3,1.636-9.961,5.977-2.374,6.276.847,11.381,8.168,16.494,4.425,3.088,20.371,12.958,23.966,16.279,3.719,3.437,3.237,6.093,2.805,9.471-.356,2.79-8.384,40.394-58.689,64.749-2.946,1.428-7.96,4.45.88,9.331,13.88,7.628,23.111,6.807,30.3,11.43,6.093,3.927,2.5,12.394,6.923,15.449,5.454,3.76,21.583-.266,42.335,6.6,17.433,5.744,28.116,22.015,58.963,22.015s41.788-16.3,58.938-21.973c20.795-6.865,36.89-2.839,42.336-6.6,4.433-3.055.822-11.522,6.923-15.448,7.181-4.624,16.411-3.8,30.3-11.472C371.36,337.355,366.346,334.333,363.374,332.848Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384,32H64A64,64,0,0,0,0,96V416a64,64,0,0,0,64,64H384a64,64,0,0,0,64-64V96A64,64,0,0,0,384,32Zm-3.907,319.309-.083.1a32.364,32.364,0,0,1-8.717,6.823,90.26,90.26,0,0,1-20.586,8.2,12.694,12.694,0,0,0-3.852,1.76c-2.158,1.909-2.1,4.64-4.4,8.55a23.137,23.137,0,0,1-6.84,7.471c-6.707,4.632-14.244,4.923-22.23,5.23-7.214.274-15.39.581-24.729,3.669-3.761,1.245-7.753,3.694-12.377,6.533-11.265,6.9-26.68,16.353-52.3,16.353s-40.925-9.4-52.106-16.279c-4.657-2.888-8.675-5.362-12.543-6.64-9.339-3.08-17.516-3.4-24.729-3.67-7.986-.307-15.523-.6-22.231-5.229a23.085,23.085,0,0,1-6.01-6.11c-3.2-4.632-2.855-7.8-5.254-9.895a13.428,13.428,0,0,0-4.1-1.834,89.986,89.986,0,0,1-20.313-8.127,32.905,32.905,0,0,1-8.3-6.284c-6.583-6.757-8.276-14.776-5.686-21.824,3.436-9.338,11.571-12.111,19.4-16.262,14.776-8.027,26.348-18.055,34.433-29.884a68.236,68.236,0,0,0,5.985-10.567c.789-2.158.772-3.329.241-4.416a7.386,7.386,0,0,0-2.208-2.217c-2.532-1.676-5.113-3.353-6.882-4.5-3.27-2.141-5.868-3.818-7.529-4.98-6.267-4.383-10.65-9.04-13.4-14.245a28.4,28.4,0,0,1-1.369-23.584c4.134-10.924,14.469-17.706,26.978-17.706a37.141,37.141,0,0,1,7.845.83c.689.15,1.37.307,2.042.482-.108-7.43.058-15.357.722-23.119,2.358-27.261,11.912-41.589,21.874-52.994a86.836,86.836,0,0,1,22.28-17.931C188.254,100.383,205.312,96,224,96s35.828,4.383,50.944,13.016a87.169,87.169,0,0,1,22.239,17.9c9.961,11.406,19.516,25.709,21.874,52.995a231.194,231.194,0,0,1,.713,23.118c.673-.174,1.362-.332,2.051-.481a37.131,37.131,0,0,1,7.844-.83c12.5,0,22.82,6.782,26.971,17.706a28.37,28.37,0,0,1-1.4,23.559c-2.74,5.2-7.123,9.861-13.39,14.244-1.668,1.187-4.258,2.864-7.529,4.981-1.835,1.187-4.541,2.947-7.164,4.682a6.856,6.856,0,0,0-1.951,2.034c-.506,1.046-.539,2.191.166,4.208a69.015,69.015,0,0,0,6.085,10.792c8.268,12.1,20.188,22.313,35.454,30.407,1.486.772,2.98,1.5,4.441,2.258.722.332,1.569.763,2.491,1.3,4.9,2.723,9.2,6.01,11.455,12.153C387.821,336.915,386.269,344.7,380.093,351.309Zm-16.719-18.461c-50.313-24.314-58.332-61.918-58.689-64.749-.431-3.379-.921-6.035,2.806-9.472,3.594-3.328,19.541-13.19,23.965-16.278,7.33-5.114,10.534-10.219,8.16-16.495-1.66-4.316-5.686-5.976-9.961-5.976a18.5,18.5,0,0,0-3.993.448c-8.035,1.743-15.838,5.769-20.354,6.857a7.1,7.1,0,0,1-1.66.224c-2.408,0-3.279-1.071-3.088-3.968.564-8.783,1.759-25.925.373-41.937-1.884-22.032-8.99-32.948-17.432-42.6-4.051-4.624-23.135-24.654-59.536-24.654S168.53,134.359,164.479,139c-8.434,9.654-15.531,20.57-17.432,42.6-1.386,16.013-.141,33.147.373,41.937.166,2.756-.68,3.968-3.088,3.968a7.1,7.1,0,0,1-1.66-.224c-4.507-1.087-12.31-5.113-20.346-6.856a18.494,18.494,0,0,0-3.993-.449c-4.25,0-8.3,1.636-9.961,5.977-2.374,6.276.847,11.381,8.168,16.494,4.425,3.088,20.371,12.958,23.966,16.279,3.719,3.437,3.237,6.093,2.805,9.471-.356,2.79-8.384,40.394-58.689,64.749-2.946,1.428-7.96,4.45.88,9.331,13.88,7.628,23.111,6.807,30.3,11.43,6.093,3.927,2.5,12.394,6.923,15.449,5.454,3.76,21.583-.266,42.335,6.6,17.433,5.744,28.116,22.015,58.963,22.015s41.788-16.3,58.938-21.973c20.795-6.865,36.89-2.839,42.336-6.6,4.433-3.055.822-11.522,6.923-15.448,7.181-4.624,16.411-3.8,30.3-11.472C371.36,337.355,366.346,334.333,363.374,332.848Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-steam\": {\n    \"aliases\": {\n      \"names\": [\"steam-square\"]\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1b7\",\n    \"label\": \"Steam Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-threads\": {\n    \"changes\": [\"6.4.1\", \"6.4.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e619\",\n    \"label\": \"Square Threads\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1690904784,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM294.2 244.3c19.5 9.3 33.7 23.5 41.2 40.9c10.4 24.3 11.4 63.9-20.2 95.4c-24.2 24.1-53.5 35-95.1 35.3h-.2c-46.8-.3-82.8-16.1-106.9-46.8C91.5 341.8 80.4 303.7 80 256v-.1-.1c.4-47.7 11.5-85.7 33-113.1c24.2-30.7 60.2-46.5 106.9-46.8h.2c46.9 .3 83.3 16 108.2 46.6c12.3 15.1 21.3 33.3 27 54.4l-26.9 7.2c-4.7-17.2-11.9-31.9-21.4-43.6c-19.4-23.9-48.7-36.1-87-36.4c-38 .3-66.8 12.5-85.5 36.2c-17.5 22.3-26.6 54.4-26.9 95.5c.3 41.1 9.4 73.3 26.9 95.5c18.7 23.8 47.4 36 85.5 36.2c34.3-.3 56.9-8.4 75.8-27.3c21.5-21.5 21.1-47.9 14.2-64c-4-9.4-11.4-17.3-21.3-23.3c-2.4 18-7.9 32.2-16.5 43.2c-11.4 14.5-27.7 22.4-48.4 23.5c-15.7 .9-30.8-2.9-42.6-10.7c-13.9-9.2-22-23.2-22.9-39.5c-1.7-32.2 23.8-55.3 63.5-57.6c14.1-.8 27.3-.2 39.5 1.9c-1.6-9.9-4.9-17.7-9.8-23.4c-6.7-7.8-17.1-11.8-30.8-11.9h-.4c-11 0-26 3.1-35.6 17.6l-23-15.8c12.8-19.4 33.6-30.1 58.5-30.1h.6c41.8 .3 66.6 26.3 69.1 71.8c1.4 .6 2.8 1.2 4.2 1.9l.1 .5zm-71.8 67.5c17-.9 36.4-7.6 39.7-48.8c-8.8-1.9-18.6-2.9-29-2.9c-3.2 0-6.4 .1-9.6 .3c-28.6 1.6-38.1 15.5-37.4 27.9c.9 16.7 19 24.5 36.4 23.6l-.1-.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM294.2 244.3c19.5 9.3 33.7 23.5 41.2 40.9c10.4 24.3 11.4 63.9-20.2 95.4c-24.2 24.1-53.5 35-95.1 35.3h-.2c-46.8-.3-82.8-16.1-106.9-46.8C91.5 341.8 80.4 303.7 80 256v-.1-.1c.4-47.7 11.5-85.7 33-113.1c24.2-30.7 60.2-46.5 106.9-46.8h.2c46.9 .3 83.3 16 108.2 46.6c12.3 15.1 21.3 33.3 27 54.4l-26.9 7.2c-4.7-17.2-11.9-31.9-21.4-43.6c-19.4-23.9-48.7-36.1-87-36.4c-38 .3-66.8 12.5-85.5 36.2c-17.5 22.3-26.6 54.4-26.9 95.5c.3 41.1 9.4 73.3 26.9 95.5c18.7 23.8 47.4 36 85.5 36.2c34.3-.3 56.9-8.4 75.8-27.3c21.5-21.5 21.1-47.9 14.2-64c-4-9.4-11.4-17.3-21.3-23.3c-2.4 18-7.9 32.2-16.5 43.2c-11.4 14.5-27.7 22.4-48.4 23.5c-15.7 .9-30.8-2.9-42.6-10.7c-13.9-9.2-22-23.2-22.9-39.5c-1.7-32.2 23.8-55.3 63.5-57.6c14.1-.8 27.3-.2 39.5 1.9c-1.6-9.9-4.9-17.7-9.8-23.4c-6.7-7.8-17.1-11.8-30.8-11.9h-.4c-11 0-26 3.1-35.6 17.6l-23-15.8c12.8-19.4 33.6-30.1 58.5-30.1h.6c41.8 .3 66.6 26.3 69.1 71.8c1.4 .6 2.8 1.2 4.2 1.9l.1 .5zm-71.8 67.5c17-.9 36.4-7.6 39.7-48.8c-8.8-1.9-18.6-2.9-29-2.9c-3.2 0-6.4 .1-9.6 .3c-28.6 1.6-38.1 15.5-37.4 27.9c.9 16.7 19 24.5 36.4 23.6l-.1-.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-tumblr\": {\n    \"aliases\": {\n      \"names\": [\"tumblr-square\"]\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f174\",\n    \"label\": \"Tumblr Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-twitter\": {\n    \"aliases\": {\n      \"names\": [\"twitter-square\"]\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.1.2\", \"6.4.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"social network\", \"tweet\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f081\",\n    \"label\": \"Square Twitter\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1690904784,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM351.3 199.3v0c0 86.7-66 186.6-186.6 186.6c-37.2 0-71.7-10.8-100.7-29.4c5.3 .6 10.4 .8 15.8 .8c30.7 0 58.9-10.4 81.4-28c-28.8-.6-53-19.5-61.3-45.5c10.1 1.5 19.2 1.5 29.6-1.2c-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3c-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1c32.3 39.8 80.8 65.8 135.2 68.6c-9.3-44.5 24-80.6 64-80.6c18.9 0 35.9 7.9 47.9 20.7c14.8-2.8 29-8.3 41.6-15.8c-4.9 15.2-15.2 28-28.8 36.1c13.2-1.4 26-5.1 37.8-10.2c-8.9 13.1-20.1 24.7-32.9 34c.2 2.8 .2 5.7 .2 8.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM351.3 199.3v0c0 86.7-66 186.6-186.6 186.6c-37.2 0-71.7-10.8-100.7-29.4c5.3 .6 10.4 .8 15.8 .8c30.7 0 58.9-10.4 81.4-28c-28.8-.6-53-19.5-61.3-45.5c10.1 1.5 19.2 1.5 29.6-1.2c-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3c-9-6-16.4-14.1-21.5-23.6s-7.8-20.2-7.7-31c0-12.2 3.2-23.4 8.9-33.1c32.3 39.8 80.8 65.8 135.2 68.6c-9.3-44.5 24-80.6 64-80.6c18.9 0 35.9 7.9 47.9 20.7c14.8-2.8 29-8.3 41.6-15.8c-4.9 15.2-15.2 28-28.8 36.1c13.2-1.4 26-5.1 37.8-10.2c-8.9 13.1-20.1 24.7-32.9 34c.2 2.8 .2 5.7 .2 8.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-up-right\": {\n    \"aliases\": {\n      \"names\": [\"external-link-square-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"2197\"],\n        \"secondary\": [\"10f360\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"diagonal\",\n        \"direction\",\n        \"external-link-square\",\n        \"intercardinal\",\n        \"new\",\n        \"northeast\",\n        \"open\",\n        \"share\",\n        \"up-right arrow\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f360\",\n    \"label\": \"Square Up Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766332,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM320 313.4V176c0-8.8-7.2-16-16-16H166.6c-12.5 0-22.6 10.1-22.6 22.6c0 6 2.4 11.8 6.6 16L184 232l-66.3 66.3C114 302 112 306.9 112 312s2 10 5.7 13.7l36.7 36.7c3.6 3.6 8.5 5.7 13.7 5.7s10-2 13.7-5.7L248 296l33.4 33.4c4.2 4.2 10 6.6 16 6.6c12.5 0 22.6-10.1 22.6-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M384 32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96C0 60.7 28.7 32 64 32H384zM320 313.4V176c0-8.8-7.2-16-16-16H166.6c-12.5 0-22.6 10.1-22.6 22.6c0 6 2.4 11.8 6.6 16L184 232l-66.3 66.3C114 302 112 306.9 112 312s2 10 5.7 13.7l36.7 36.7c3.6 3.6 8.5 5.7 13.7 5.7s10-2 13.7-5.7L248 296l33.4 33.4c4.2 4.2 10 6.6 16 6.6c12.5 0 22.6-10.1 22.6-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-viadeo\": {\n    \"aliases\": {\n      \"names\": [\"viadeo-square\"]\n    },\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"5.7.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2aa\",\n    \"label\": \"Viadeo Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-vimeo\": {\n    \"aliases\": {\n      \"names\": [\"vimeo-square\"]\n    },\n    \"changes\": [\"4.0.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f194\",\n    \"label\": \"Vimeo Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-virus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"coronavirus\",\n        \"covid-19\",\n        \"disease\",\n        \"flu\",\n        \"infection\",\n        \"pandemic\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e578\",\n    \"label\": \"Square Virus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM223.8 93.7c13.3 0 24 10.7 24 24c0 29.3 35.4 43.9 56.1 23.2c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-20.7 20.7-6 56.1 23.2 56.1c13.3 0 24 10.7 24 24s-10.7 24-24 24c-29.3 0-43.9 35.4-23.2 56.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-20.7-20.7-56.1-6-56.1 23.2c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-29.3-35.4-43.9-56.1-23.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c20.7-20.7 6-56.1-23.2-56.1c-13.3 0-24-10.7-24-24s10.7-24 24-24c29.3 0 43.9-35.4 23.2-56.1c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c20.7 20.7 56.1 6 56.1-23.2c0-13.3 10.7-24 24-24zM192 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm88 32a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM223.8 93.7c13.3 0 24 10.7 24 24c0 29.3 35.4 43.9 56.1 23.2c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9c-20.7 20.7-6 56.1 23.2 56.1c13.3 0 24 10.7 24 24s-10.7 24-24 24c-29.3 0-43.9 35.4-23.2 56.1c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0c-20.7-20.7-56.1-6-56.1 23.2c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-29.3-35.4-43.9-56.1-23.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9c20.7-20.7 6-56.1-23.2-56.1c-13.3 0-24-10.7-24-24s10.7-24 24-24c29.3 0 43.9-35.4 23.2-56.1c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0c20.7 20.7 56.1 6 56.1-23.2c0-13.3 10.7-24 24-24zM192 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm88 32a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-whatsapp\": {\n    \"aliases\": {\n      \"names\": [\"whatsapp-square\"]\n    },\n    \"changes\": [\"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f40c\",\n    \"label\": \"What's App Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-x-twitter\": {\n    \"changes\": [\"6.4.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\" elon\", \" x\", \"twitter\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e61a\",\n    \"label\": \"Square X Twitter\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1690904784,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396H283.8L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5L313.6 116h47.5zM323.3 367.6L153.4 142.9H125.1L296.9 367.6h26.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396H283.8L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5L313.6 116h47.5zM323.3 367.6L153.4 142.9H125.1L296.9 367.6h26.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-xing\": {\n    \"aliases\": {\n      \"names\": [\"xing-square\"]\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f169\",\n    \"label\": \"Xing Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"square-xmark\": {\n    \"aliases\": {\n      \"names\": [\"times-square\", \"xmark-square\"],\n      \"unicodes\": {\n        \"composite\": [\"274e\"],\n        \"secondary\": [\"10f2d3\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"close\",\n        \"cross\",\n        \"cross mark button\",\n        \"incorrect\",\n        \"mark\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"problem\",\n        \"square\",\n        \"window\",\n        \"wrong\",\n        \"x\",\n        \"×\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2d3\",\n    \"label\": \"Square Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm79 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm79 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"square-youtube\": {\n    \"aliases\": {\n      \"names\": [\"youtube-square\"],\n      \"unicodes\": {\n        \"composite\": [\"f166\"]\n      }\n    },\n    \"changes\": [\"5.0.3\", \"6.1.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f431\",\n    \"label\": \"YouTube Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"squarespace\": {\n    \"changes\": [\"5.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5be\",\n    \"label\": \"Squarespace\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stack-exchange\": {\n    \"changes\": [\"4.0.0\", \"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f18d\",\n    \"label\": \"Stack Exchange\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stack-overflow\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f16c\",\n    \"label\": \"Stack Overflow\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014479,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stackpath\": {\n    \"changes\": [\"5.8.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f842\",\n    \"label\": \"Stackpath\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M244.6 232.4c0 8.5-4.26 20.49-21.34 20.49h-19.61v-41.47h19.61c17.13 0 21.34 12.36 21.34 20.98zM448 32v448H0V32zM151.3 287.84c0-21.24-12.12-34.54-46.72-44.85-20.57-7.41-26-10.91-26-18.63s7-14.61 20.41-14.61c14.09 0 20.79 8.45 20.79 18.35h30.7l.19-.57c.5-19.57-15.06-41.65-51.12-41.65-23.37 0-52.55 10.75-52.55 38.29 0 19.4 9.25 31.29 50.74 44.37 17.26 6.15 21.91 10.4 21.91 19.48 0 15.2-19.13 14.23-19.47 14.23-20.4 0-25.65-9.1-25.65-21.9h-30.8l-.18.56c-.68 31.32 28.38 45.22 56.63 45.22 29.98 0 51.12-13.55 51.12-38.29zm125.38-55.63c0-25.3-18.43-45.46-53.42-45.46h-51.78v138.18h32.17v-47.36h19.61c30.25 0 53.42-15.95 53.42-45.36zM297.94 325L347 186.78h-31.09L268 325zm106.52-138.22h-31.09L325.46 325h29.94z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"staff-snake\": {\n    \"aliases\": {\n      \"names\": [\"rod-asclepius\", \"rod-snake\", \"staff-aesculapius\"]\n    },\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"asclepius\", \"asklepian\", \"health\", \"serpent\", \"wellness\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e579\",\n    \"label\": \"Staff Snake\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M222.6 43.2l-.1 4.8H288c53 0 96 43 96 96s-43 96-96 96H248V160h40c8.8 0 16-7.2 16-16s-7.2-16-16-16H248 220l-4.5 144H256c53 0 96 43 96 96s-43 96-96 96H240V384h16c8.8 0 16-7.2 16-16s-7.2-16-16-16H213l-3.1 99.5L208.5 495l0 1c-.3 8.9-7.6 16-16.5 16s-16.2-7.1-16.5-16l0-1-1-31H136c-22.1 0-40-17.9-40-40s17.9-40 40-40h36l-1-32H152c-53 0-96-43-96-96c0-47.6 34.6-87.1 80-94.7V256c0 8.8 7.2 16 16 16h16.5L164 128H136 122.6c-9 18.9-28.3 32-50.6 32H56c-30.9 0-56-25.1-56-56S25.1 48 56 48h8 8 89.5l-.1-4.8L161 32c0-.7 0-1.3 0-1.9c.5-16.6 14.1-30 31-30s30.5 13.4 31 30c0 .6 0 1.3 0 1.9l-.4 11.2zM64 112a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M222.6 43.2l-.1 4.8H288c53 0 96 43 96 96s-43 96-96 96H248V160h40c8.8 0 16-7.2 16-16s-7.2-16-16-16H248 220l-4.5 144H256c53 0 96 43 96 96s-43 96-96 96H240V384h16c8.8 0 16-7.2 16-16s-7.2-16-16-16H213l-3.1 99.5L208.5 495l0 1c-.3 8.9-7.6 16-16.5 16s-16.2-7.1-16.5-16l0-1-1-31H136c-22.1 0-40-17.9-40-40s17.9-40 40-40h36l-1-32H152c-53 0-96-43-96-96c0-47.6 34.6-87.1 80-94.7V256c0 8.8 7.2 16 16 16h16.5L164 128H136 122.6c-9 18.9-28.3 32-50.6 32H56c-30.9 0-56-25.1-56-56S25.1 48 56 48h8 8 89.5l-.1-4.8L161 32c0-.7 0-1.3 0-1.9c.5-16.6 14.1-30 31-30s30.5 13.4 31 30c0 .6 0 1.3 0 1.9l-.4 11.2zM64 112a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stairs\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"exit\", \"steps\", \"up\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e289\",\n    \"label\": \"Stairs\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384 64c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H448v96c0 17.7-14.3 32-32 32H320v96c0 17.7-14.3 32-32 32H192v96c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h96V320c0-17.7 14.3-32 32-32h96V192c0-17.7 14.3-32 32-32h96V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384 64c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H448v96c0 17.7-14.3 32-32 32H320v96c0 17.7-14.3 32-32 32H192v96c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h96V320c0-17.7 14.3-32 32-32h96V192c0-17.7 14.3-32 32-32h96V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stamp\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5bf\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"art\", \"certificate\", \"imprint\", \"rubber\", \"seal\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5bf\",\n    \"label\": \"Stamp\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2H112C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3V464c0 26.5 21.5 48 48 48H432c26.5 0 48-21.5 48-48V413.3c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112H366.2c-29.9 0-54.2-24.3-54.2-54.2zM416 416v32H96V416H416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M312 201.8c0-17.4 9.2-33.2 19.9-47C344.5 138.5 352 118.1 352 96c0-53-43-96-96-96s-96 43-96 96c0 22.1 7.5 42.5 20.1 58.8c10.7 13.8 19.9 29.6 19.9 47c0 29.9-24.3 54.2-54.2 54.2H112C50.1 256 0 306.1 0 368c0 20.9 13.4 38.7 32 45.3V464c0 26.5 21.5 48 48 48H432c26.5 0 48-21.5 48-48V413.3c18.6-6.6 32-24.4 32-45.3c0-61.9-50.1-112-112-112H366.2c-29.9 0-54.2-24.3-54.2-54.2zM416 416v32H96V416H416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stapler\": {\n    \"changes\": [\"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"desktop\", \"milton\", \"office\", \"paperclip\", \"staple\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e5af\",\n    \"label\": \"Stapler\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 299.3V304 432c0 26.5-21.5 48-48 48H512 448 64c-17.7 0-32-14.3-32-32s14.3-32 32-32H448V368H96c-17.7 0-32-14.3-32-32V219.4L33.8 214C14.2 210.5 0 193.5 0 173.7c0-8.9 2.9-17.5 8.2-24.6l35.6-47.5C76.7 57.8 128.2 32 182.9 32c27 0 53.6 6.3 77.8 18.4L586.9 213.5C619.5 229.7 640 263 640 299.3zM448 304V288L128 230.9V304H448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 299.3V304 432c0 26.5-21.5 48-48 48H512 448 64c-17.7 0-32-14.3-32-32s14.3-32 32-32H448V368H96c-17.7 0-32-14.3-32-32V219.4L33.8 214C14.2 210.5 0 193.5 0 173.7c0-8.9 2.9-17.5 8.2-24.6l35.6-47.5C76.7 57.8 128.2 32 182.9 32c27 0 53.6 6.3 77.8 18.4L586.9 213.5C619.5 229.7 640 263 640 299.3zM448 304V288L128 230.9V304H448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"star\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2b50\", \"f006\"],\n        \"secondary\": [\"10f005\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"achievement\",\n        \"award\",\n        \"favorite\",\n        \"important\",\n        \"night\",\n        \"rating\",\n        \"score\",\n        \"star\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f005\",\n    \"label\": \"Star\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M287.9 0c9.2 0 17.6 5.2 21.6 13.5l68.6 141.3 153.2 22.6c9 1.3 16.5 7.6 19.3 16.3s.5 18.1-5.9 24.5L433.6 328.4l26.2 155.6c1.5 9-2.2 18.1-9.6 23.5s-17.3 6-25.3 1.7l-137-73.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.2c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5C270.4 5.2 278.7 0 287.9 0zm0 79L235.4 187.2c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l105.2-56.2c7.1-3.8 15.6-3.8 22.6 0l105.2 56.2L384.2 324.1c-1.3-7.7 1.2-15.5 6.8-21l85.9-85.1L358.6 200.5c-7.8-1.2-14.6-6.1-18.1-13.3L287.9 79z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M287.9 0c9.2 0 17.6 5.2 21.6 13.5l68.6 141.3 153.2 22.6c9 1.3 16.5 7.6 19.3 16.3s.5 18.1-5.9 24.5L433.6 328.4l26.2 155.6c1.5 9-2.2 18.1-9.6 23.5s-17.3 6-25.3 1.7l-137-73.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.2c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5C270.4 5.2 278.7 0 287.9 0zm0 79L235.4 187.2c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l105.2-56.2c7.1-3.8 15.6-3.8 22.6 0l105.2 56.2L384.2 324.1c-1.3-7.7 1.2-15.5 6.8-21l85.9-85.1L358.6 200.5c-7.8-1.2-14.6-6.1-18.1-13.3L287.9 79z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"star-and-crescent\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"262a\"],\n        \"secondary\": [\"10f699\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Muslim\", \"islam\", \"muslim\", \"religion\", \"star and crescent\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f699\",\n    \"label\": \"Star And Crescent\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767603,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256C0 114.6 114.6 0 256 0c33 0 64.6 6.3 93.6 17.7c7.4 2.9 11.5 10.7 9.8 18.4s-8.8 13-16.7 12.4c-4.8-.3-9.7-.5-14.6-.5c-114.9 0-208 93.1-208 208s93.1 208 208 208c4.9 0 9.8-.2 14.6-.5c7.9-.5 15 4.7 16.7 12.4s-2.4 15.5-9.8 18.4C320.6 505.7 289 512 256 512C114.6 512 0 397.4 0 256zM375.4 137.4c3.5-7.1 13.7-7.1 17.2 0l31.5 63.8c1.4 2.8 4.1 4.8 7.2 5.3l70.4 10.2c7.9 1.1 11 10.8 5.3 16.4l-50.9 49.6c-2.3 2.2-3.3 5.4-2.8 8.5l12 70.1c1.3 7.8-6.9 13.8-13.9 10.1l-63-33.1c-2.8-1.5-6.1-1.5-8.9 0l-63 33.1c-7 3.7-15.3-2.3-13.9-10.1l12-70.1c.5-3.1-.5-6.3-2.8-8.5L261 233.1c-5.7-5.6-2.6-15.2 5.3-16.4l70.4-10.2c3.1-.5 5.8-2.4 7.2-5.3l31.5-63.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256C0 114.6 114.6 0 256 0c33 0 64.6 6.3 93.6 17.7c7.4 2.9 11.5 10.7 9.8 18.4s-8.8 13-16.7 12.4c-4.8-.3-9.7-.5-14.6-.5c-114.9 0-208 93.1-208 208s93.1 208 208 208c4.9 0 9.8-.2 14.6-.5c7.9-.5 15 4.7 16.7 12.4s-2.4 15.5-9.8 18.4C320.6 505.7 289 512 256 512C114.6 512 0 397.4 0 256zM375.4 137.4c3.5-7.1 13.7-7.1 17.2 0l31.5 63.8c1.4 2.8 4.1 4.8 7.2 5.3l70.4 10.2c7.9 1.1 11 10.8 5.3 16.4l-50.9 49.6c-2.3 2.2-3.3 5.4-2.8 8.5l12 70.1c1.3 7.8-6.9 13.8-13.9 10.1l-63-33.1c-2.8-1.5-6.1-1.5-8.9 0l-63 33.1c-7 3.7-15.3-2.3-13.9-10.1l12-70.1c.5-3.1-.5-6.3-2.8-8.5L261 233.1c-5.7-5.6-2.6-15.2 5.3-16.4l70.4-10.2c3.1-.5 5.8-2.4 7.2-5.3l31.5-63.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"star-half\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f123\"],\n        \"secondary\": [\"10f089\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"achievement\",\n        \"award\",\n        \"rating\",\n        \"score\",\n        \"star-half-empty\",\n        \"star-half-full\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f089\",\n    \"label\": \"Star Half\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 0c-12.2 .1-23.3 7-28.6 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3L288 439.8V0zM429.9 512c1.1 .1 2.1 .1 3.2 0h-3.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 0c-12.2 .1-23.3 7-28.6 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3L288 439.8V0zM429.9 512c1.1 .1 2.1 .1 3.2 0h-3.2z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767551,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M293.3 .6c10.9 2.5 18.6 12.2 18.6 23.4V408.7c0 8.9-4.9 17-12.7 21.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.2c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5c4.9-10.1 16.1-15.4 27-12.9zM263.9 128.4l-28.6 58.8c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l92.5-49.4V128.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M293.3 .6c10.9 2.5 18.6 12.2 18.6 23.4V408.7c0 8.9-4.9 17-12.7 21.2L151 509.1c-8.1 4.3-17.9 3.7-25.3-1.7s-11.2-14.5-9.7-23.5l26.2-155.6L31.1 218.2c-6.5-6.4-8.7-15.9-5.9-24.5s10.3-14.9 19.3-16.3l153.2-22.6L266.3 13.5c4.9-10.1 16.1-15.4 27-12.9zM263.9 128.4l-28.6 58.8c-3.5 7.1-10.2 12.1-18.1 13.3L99 217.9 184.9 303c5.5 5.5 8.1 13.3 6.8 21L171.4 443.7l92.5-49.4V128.4z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"star-half-stroke\": {\n    \"aliases\": {\n      \"names\": [\"star-half-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5c0\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"achievement\",\n        \"award\",\n        \"rating\",\n        \"score\",\n        \"star-half-empty\",\n        \"star-half-full\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f5c0\",\n    \"label\": \"Star Half Stroke\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M320 376.4l.1-.1 26.4 14.1 85.2 45.5-16.5-97.6-4.8-28.7 20.7-20.5 70.1-69.3-96.1-14.2-29.3-4.3-12.9-26.6L320.1 86.9l-.1 .3V376.4zm175.1 98.3c2 12-3 24.2-12.9 31.3s-23 8-33.8 2.3L320.1 439.8 191.8 508.3C181 514 167.9 513.1 158 506s-14.9-19.3-12.9-31.3L169.8 329 65.6 225.9c-8.6-8.5-11.7-21.2-7.9-32.7s13.7-19.9 25.7-21.7L227 150.3 291.4 18c5.4-11 16.5-18 28.8-18s23.4 7 28.8 18l64.3 132.3 143.6 21.2c12 1.8 22 10.2 25.7 21.7s.7 24.2-7.9 32.7L470.5 329l24.6 145.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M320 376.4l.1-.1 26.4 14.1 85.2 45.5-16.5-97.6-4.8-28.7 20.7-20.5 70.1-69.3-96.1-14.2-29.3-4.3-12.9-26.6L320.1 86.9l-.1 .3V376.4zm175.1 98.3c2 12-3 24.2-12.9 31.3s-23 8-33.8 2.3L320.1 439.8 191.8 508.3C181 514 167.9 513.1 158 506s-14.9-19.3-12.9-31.3L169.8 329 65.6 225.9c-8.6-8.5-11.7-21.2-7.9-32.7s13.7-19.9 25.7-21.7L227 150.3 291.4 18c5.4-11 16.5-18 28.8-18s23.4 7 28.8 18l64.3 132.3 143.6 21.2c12 1.8 22 10.2 25.7 21.7s.7 24.2-7.9 32.7L470.5 329l24.6 145.7z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M341.5 13.5C337.5 5.2 329.1 0 319.9 0s-17.6 5.2-21.6 13.5L229.7 154.8 76.5 177.5c-9 1.3-16.5 7.6-19.3 16.3s-.5 18.1 5.9 24.5L174.2 328.4 148 483.9c-1.5 9 2.2 18.1 9.7 23.5s17.3 6 25.3 1.7l137-73.2 137 73.2c8.1 4.3 17.9 3.7 25.3-1.7s11.2-14.5 9.7-23.5L465.6 328.4 576.8 218.2c6.5-6.4 8.7-15.9 5.9-24.5s-10.3-14.9-19.3-16.3L410.1 154.8 341.5 13.5zM320 384.7V79.1l52.5 108.1c3.5 7.1 10.2 12.1 18.1 13.3l118.3 17.5L423 303c-5.5 5.5-8.1 13.3-6.8 21l20.2 119.6L331.2 387.5c-3.5-1.9-7.4-2.8-11.2-2.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M341.5 13.5C337.5 5.2 329.1 0 319.9 0s-17.6 5.2-21.6 13.5L229.7 154.8 76.5 177.5c-9 1.3-16.5 7.6-19.3 16.3s-.5 18.1 5.9 24.5L174.2 328.4 148 483.9c-1.5 9 2.2 18.1 9.7 23.5s17.3 6 25.3 1.7l137-73.2 137 73.2c8.1 4.3 17.9 3.7 25.3-1.7s11.2-14.5 9.7-23.5L465.6 328.4 576.8 218.2c6.5-6.4 8.7-15.9 5.9-24.5s-10.3-14.9-19.3-16.3L410.1 154.8 341.5 13.5zM320 384.7V79.1l52.5 108.1c3.5 7.1 10.2 12.1 18.1 13.3l118.3 17.5L423 303c-5.5 5.5-8.1 13.3-6.8 21l20.2 119.6L331.2 387.5c-3.5-1.9-7.4-2.8-11.2-2.8z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"star-of-david\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2721\"],\n        \"secondary\": [\"10f69a\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"David\",\n        \"Jew\",\n        \"Jewish\",\n        \"jewish\",\n        \"judaism\",\n        \"religion\",\n        \"star\",\n        \"star of David\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f69a\",\n    \"label\": \"Star Of David\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M404.2 309.5L383.1 344h42.3l-21.1-34.5zM371.4 256l-54-88H194.6l-54 88 54 88H317.4l54-88zm65.7 0l53.4 87c3.6 5.9 5.5 12.7 5.5 19.6c0 20.7-16.8 37.4-37.4 37.4H348.7l-56.2 91.5C284.8 504.3 270.9 512 256 512s-28.8-7.7-36.6-20.5L163.3 400H53.4C32.8 400 16 383.2 16 362.6c0-6.9 1.9-13.7 5.5-19.6l53.4-87L21.5 169c-3.6-5.9-5.5-12.7-5.5-19.6C16 128.8 32.8 112 53.4 112H163.3l56.2-91.5C227.2 7.7 241.1 0 256 0s28.8 7.7 36.6 20.5L348.7 112H458.6c20.7 0 37.4 16.8 37.4 37.4c0 6.9-1.9 13.7-5.5 19.6l-53.4 87zm-54-88l21.1 34.5L425.4 168H383.1zM283 112L256 68l-27 44h54zM128.9 168H86.6l21.1 34.5L128.9 168zM107.8 309.5L86.6 344h42.3l-21.1-34.5zM229 400l27 44 27-44H229z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M404.2 309.5L383.1 344h42.3l-21.1-34.5zM371.4 256l-54-88H194.6l-54 88 54 88H317.4l54-88zm65.7 0l53.4 87c3.6 5.9 5.5 12.7 5.5 19.6c0 20.7-16.8 37.4-37.4 37.4H348.7l-56.2 91.5C284.8 504.3 270.9 512 256 512s-28.8-7.7-36.6-20.5L163.3 400H53.4C32.8 400 16 383.2 16 362.6c0-6.9 1.9-13.7 5.5-19.6l53.4-87L21.5 169c-3.6-5.9-5.5-12.7-5.5-19.6C16 128.8 32.8 112 53.4 112H163.3l56.2-91.5C227.2 7.7 241.1 0 256 0s28.8 7.7 36.6 20.5L348.7 112H458.6c20.7 0 37.4 16.8 37.4 37.4c0 6.9-1.9 13.7-5.5 19.6l-53.4 87zm-54-88l21.1 34.5L425.4 168H383.1zM283 112L256 68l-27 44h54zM128.9 168H86.6l21.1 34.5L128.9 168zM107.8 309.5L86.6 344h42.3l-21.1-34.5zM229 400l27 44 27-44H229z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"star-of-life\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f621\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"doctor\", \"emt\", \"first aid\", \"health\", \"medical\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f621\",\n    \"label\": \"Star Of Life\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M208 32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V172.9l122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.5 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1V480c0 17.7-14.3 32-32 32H240c-17.7 0-32-14.3-32-32V339.1L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4V32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M208 32c0-17.7 14.3-32 32-32h32c17.7 0 32 14.3 32 32V172.9l122-70.4c15.3-8.8 34.9-3.6 43.7 11.7l16 27.7c8.8 15.3 3.6 34.9-11.7 43.7L352 256l122 70.4c15.3 8.8 20.5 28.4 11.7 43.7l-16 27.7c-8.8 15.3-28.4 20.6-43.7 11.7L304 339.1V480c0 17.7-14.3 32-32 32H240c-17.7 0-32-14.3-32-32V339.1L86 409.6c-15.3 8.8-34.9 3.6-43.7-11.7l-16-27.7c-8.8-15.3-3.6-34.9 11.7-43.7L160 256 38 185.6c-15.3-8.8-20.5-28.4-11.7-43.7l16-27.7C51.1 98.8 70.7 93.6 86 102.4l122 70.4V32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"staylinked\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3f5\",\n    \"label\": \"StayLinked\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 440 512\\\"><path d=\\\"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 440, 512],\n        \"width\": 440,\n        \"height\": 512,\n        \"path\": \"M382.7 292.5l2.7 2.7-170-167.3c-3.5-3.5-9.7-3.7-13.8-.5L144.3 171c-4.2 3.2-4.6 8.7-1.1 12.2l68.1 64.3c3.6 3.5 9.9 3.7 14 .5l.1-.1c4.1-3.2 10.4-3 14 .5l84 81.3c3.6 3.5 3.2 9-.9 12.2l-93.2 74c-4.2 3.3-10.5 3.1-14.2-.4L63.2 268c-3.5-3.5-9.7-3.7-13.9-.5L3.5 302.4c-4.2 3.2-4.7 8.7-1.2 12.2L211 510.7s7.4 6.8 17.3-.8l198-163.9c4-3.2 4.4-8.7.7-12.2zm54.5-83.4L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7 171.7 165.1c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"steam\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1b6\",\n    \"label\": \"Steam\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014477,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"steam-symbol\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3f6\",\n    \"label\": \"Steam Symbol\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014458,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"sterling-sign\": {\n    \"aliases\": {\n      \"names\": [\"gbp\", \"pound-sign\"],\n      \"unicodes\": {\n        \"composite\": [\"a3\"],\n        \"secondary\": [\"10f154\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Pound Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f154\",\n    \"label\": \"Sterling Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48v44.5c0 17.4-4.7 34.5-13.7 49.4L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H88.5l.7-1.1C104.1 390 112 361.5 112 332.5V288H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V160.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M112 160.4c0-35.5 28.8-64.4 64.4-64.4c6.9 0 13.8 1.1 20.4 3.3l81.2 27.1c16.8 5.6 34.9-3.5 40.5-20.2s-3.5-34.9-20.2-40.5L217 38.6c-13.1-4.4-26.8-6.6-40.6-6.6C105.5 32 48 89.5 48 160.4V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H48v44.5c0 17.4-4.7 34.5-13.7 49.4L4.6 431.5c-5.9 9.9-6.1 22.2-.4 32.2S20.5 480 32 480H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H88.5l.7-1.1C104.1 390 112 361.5 112 332.5V288H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H112V160.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stethoscope\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1fa7a\"],\n        \"secondary\": [\"10f0f1\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"diagnosis\",\n        \"doctor\",\n        \"general practitioner\",\n        \"heart\",\n        \"hospital\",\n        \"infirmary\",\n        \"medicine\",\n        \"office\",\n        \"outpatient\",\n        \"stethoscope\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0f1\",\n    \"label\": \"Stethoscope\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M142.4 21.9c5.6 16.8-3.5 34.9-20.2 40.5L96 71.1V192c0 53 43 96 96 96s96-43 96-96V71.1l-26.1-8.7c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l26.1 8.7C334.4 19.1 352 43.5 352 71.1V192c0 77.2-54.6 141.6-127.3 156.7C231 404.6 278.4 448 336 448c61.9 0 112-50.1 112-112V265.3c-28.3-12.3-48-40.5-48-73.3c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V336c0 97.2-78.8 176-176 176c-92.9 0-168.9-71.9-175.5-163.1C87.2 334.2 32 269.6 32 192V71.1c0-27.5 17.6-52 43.8-60.7l26.1-8.7c16.8-5.6 34.9 3.5 40.5 20.2zM480 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M142.4 21.9c5.6 16.8-3.5 34.9-20.2 40.5L96 71.1V192c0 53 43 96 96 96s96-43 96-96V71.1l-26.1-8.7c-16.8-5.6-25.8-23.7-20.2-40.5s23.7-25.8 40.5-20.2l26.1 8.7C334.4 19.1 352 43.5 352 71.1V192c0 77.2-54.6 141.6-127.3 156.7C231 404.6 278.4 448 336 448c61.9 0 112-50.1 112-112V265.3c-28.3-12.3-48-40.5-48-73.3c0-44.2 35.8-80 80-80s80 35.8 80 80c0 32.8-19.7 61-48 73.3V336c0 97.2-78.8 176-176 176c-92.9 0-168.9-71.9-175.5-163.1C87.2 334.2 32 269.6 32 192V71.1c0-27.5 17.6-52 43.8-60.7l26.1-8.7c16.8-5.6 34.9 3.5 40.5 20.2zM480 224a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sticker-mule\": {\n    \"changes\": [\"5.0.0\", \"5.7.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3f7\",\n    \"label\": \"Sticker Mule\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M561.7 199.6c-1.3.3.3 0 0 0zm-6.2-77.4c-7.7-22.3-5.1-7.2-13.4-36.9-1.6-6.5-3.6-14.5-6.2-20-4.4-8.7-4.6-7.5-4.6-9.5 0-5.3 30.7-45.3 19-46.9-5.7-.6-12.2 11.6-20.6 17-8.6 4.2-8 5-10.3 5-2.6 0-5.7-3-6.2-5-2-5.7 1.9-25.9-3.6-25.9-3.6 0-12.3 24.8-17 25.8-5.2 1.3-27.9-11.4-75.1 18-25.3 13.2-86.9 65.2-87 65.3-6.7 4.7-20 4.7-35.5 16-44.4 30.1-109.6 9.4-110.7 9-110.6-26.8-128-15.2-159 11.5-20.8 17.9-23.7 36.5-24.2 38.9-4.2 20.4 5.2 48.3 6.7 64.3 1.8 19.3-2.7 17.7 7.7 98.3.5 1 4.1 0 5.1 1.5 0 8.4-3.8 12.1-4.1 13-1.5 4.5-1.5 10.5 0 16 2.3 8.2 8.2 37.2 8.2 46.9 0 41.8.4 44 2.6 49.4 3.9 10 12.5 9.1 17 12 3.1 3.5-.5 8.5 1 12.5.5 2 3.6 4 6.2 5 9.2 3.6 27 .3 29.9-2.5 1.6-1.5.5-4.5 3.1-5 5.1 0 10.8-.5 14.4-2.5 5.1-2.5 4.1-6 1.5-10.5-.4-.8-7-13.3-9.8-16-2.1-2-5.1-3-7.2-4.5-5.8-4.9-10.3-19.4-10.3-19.5-4.6-19.4-10.3-46.3-4.1-66.8 4.6-17.2 39.5-87.7 39.6-87.8 4.1-6.5 17-11.5 27.3-7 6 1.9 19.3 22 65.4 30.9 47.9 8.7 97.4-2 112.2-2 2.8 2-1.9 13-.5 38.9 0 26.4-.4 13.7-4.1 29.9-2.2 9.7 3.4 23.2-1.5 46.9-1.4 9.8-9.9 32.7-8.2 43.4.5 1 1 2 1.5 3.5.5 4.5 1.5 8.5 4.6 10 7.3 3.6 12-3.5 9.8 11.5-.7 3.1-2.6 12 1.5 15 4.4 3.7 30.6 3.4 36.5.5 2.6-1.5 1.6-4.5 6.4-7.4 1.9-.9 11.3-.4 11.3-6.5.3-1.8-9.2-19.9-9.3-20-2.6-3.5-9.2-4.5-11.3-8-6.9-10.1-1.7-52.6.5-59.4 3-11 5.6-22.4 8.7-32.4 11-42.5 10.3-50.6 16.5-68.3.8-1.8 6.4-23.1 10.3-29.9 9.3-17 21.7-32.4 33.5-47.4 18-22.9 34-46.9 52-69.8 6.1-7 8.2-13.7 18-8 10.8 5.7 21.6 7 31.9 17 14.6 12.8 10.2 18.2 11.8 22.9 1.5 5 7.7 10.5 14.9 9.5 10.4-2 13-2.5 13.4-2.5 2.6-.5 5.7-5 7.2-8 3.1-5.5 7.2-9 7.2-16.5 0-7.7-.4-2.8-20.6-52.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stop\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23f9\"],\n        \"secondary\": [\"10f04d\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"block\", \"box\", \"square\", \"stop\", \"stop button\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f04d\",\n    \"label\": \"Stop\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stopwatch\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"23f1\"],\n        \"secondary\": [\"10f2f2\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"clock\", \"reminder\", \"stopwatch\", \"time\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2f2\",\n    \"label\": \"Stopwatch\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h16V98.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6V64h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H224 176zm72 192V320c0 13.3-10.7 24-24 24s-24-10.7-24-24V192c0-13.3 10.7-24 24-24s24 10.7 24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h16V98.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6V64h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H224 176zm72 192V320c0 13.3-10.7 24-24 24s-24-10.7-24-24V192c0-13.3 10.7-24 24-24s24 10.7 24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stopwatch-20\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e06f\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ABCs\",\n        \"countdown\",\n        \"covid-19\",\n        \"happy birthday\",\n        \"i will survive\",\n        \"reminder\",\n        \"seconds\",\n        \"time\",\n        \"timer\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e06f\",\n    \"label\": \"Stopwatch 20\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767327,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h16V98.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6V64h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H176zM288 204c28.7 0 52 23.3 52 52v96c0 28.7-23.3 52-52 52s-52-23.3-52-52V256c0-28.7 23.3-52 52-52zm-12 52v96c0 6.6 5.4 12 12 12s12-5.4 12-12V256c0-6.6-5.4-12-12-12s-12 5.4-12 12zM159.5 244c-5.4 0-10.2 3.5-11.9 8.6l-.6 1.7c-3.5 10.5-14.8 16.1-25.3 12.6s-16.1-14.8-12.6-25.3l.6-1.7c7.2-21.5 27.2-35.9 49.8-35.9c29 0 52.5 23.5 52.5 52.5v2.2c0 13.4-4.9 26.4-13.8 36.4l-39 43.9c-6.2 7-10 15.7-10.9 24.9H192c11 0 20 9 20 20s-9 20-20 20H128c-11 0-20-9-20-20V368.3c0-20.6 7.5-40.4 21.2-55.8l39-43.9c2.4-2.7 3.7-6.2 3.7-9.8v-2.2c0-6.9-5.6-12.5-12.5-12.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M176 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h16V98.4C92.3 113.8 16 200 16 304c0 114.9 93.1 208 208 208s208-93.1 208-208c0-41.8-12.3-80.7-33.5-113.2l24.1-24.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L355.7 143c-28.1-23-62.2-38.8-99.7-44.6V64h16c17.7 0 32-14.3 32-32s-14.3-32-32-32H176zM288 204c28.7 0 52 23.3 52 52v96c0 28.7-23.3 52-52 52s-52-23.3-52-52V256c0-28.7 23.3-52 52-52zm-12 52v96c0 6.6 5.4 12 12 12s12-5.4 12-12V256c0-6.6-5.4-12-12-12s-12 5.4-12 12zM159.5 244c-5.4 0-10.2 3.5-11.9 8.6l-.6 1.7c-3.5 10.5-14.8 16.1-25.3 12.6s-16.1-14.8-12.6-25.3l.6-1.7c7.2-21.5 27.2-35.9 49.8-35.9c29 0 52.5 23.5 52.5 52.5v2.2c0 13.4-4.9 26.4-13.8 36.4l-39 43.9c-6.2 7-10 15.7-10.9 24.9H192c11 0 20 9 20 20s-9 20-20 20H128c-11 0-20-9-20-20V368.3c0-20.6 7.5-40.4 21.2-55.8l39-43.9c2.4-2.7 3.7-6.2 3.7-9.8v-2.2c0-6.9-5.6-12.5-12.5-12.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"store\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f54e\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bodega\",\n        \"building\",\n        \"buy\",\n        \"market\",\n        \"purchase\",\n        \"shopping\",\n        \"store\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f54e\",\n    \"label\": \"Store\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M547.6 103.8L490.3 13.1C485.2 5 476.1 0 466.4 0H109.6C99.9 0 90.8 5 85.7 13.1L28.3 103.8c-29.6 46.8-3.4 111.9 51.9 119.4c4 .5 8.1 .8 12.1 .8c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4zM499.7 254.9l-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3V384H128V250.6c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3V384v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V384 252.6c-4 1-8 1.8-12.3 2.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M547.6 103.8L490.3 13.1C485.2 5 476.1 0 466.4 0H109.6C99.9 0 90.8 5 85.7 13.1L28.3 103.8c-29.6 46.8-3.4 111.9 51.9 119.4c4 .5 8.1 .8 12.1 .8c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.1 0 49.3-11.4 65.2-29c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4zM499.7 254.9l-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3V384H128V250.6c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3V384v64c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V384 252.6c-4 1-8 1.8-12.3 2.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"store-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e071\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"buy\", \"closed\", \"covid-19\", \"purchase\", \"shopping\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e071\",\n    \"label\": \"Store Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.8-68V384 252.6c-4 1-8 1.8-12.3 2.3l-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3V350.9L301.2 210.7c7-4.4 13.3-9.7 18.8-15.7c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4L522.3 13.1C517.2 5 508.1 0 498.4 0H141.6c-9.7 0-18.8 5-23.9 13.1l-22.7 36L38.8 5.1zm73.4 218.1c4 .5 8.1 .8 12.1 .8c11 0 21.4-2 31-5.6L48.9 134.5c-6.1 40.6 19.5 82.8 63.3 88.7zM160 384V250.6c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3V384v64c0 35.3 28.7 64 64 64H480c12.9 0 24.8-3.8 34.9-10.3L365.5 384H160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.8-68V384 252.6c-4 1-8 1.8-12.3 2.3l-.1 0c-5.3 .7-10.7 1.1-16.2 1.1c-12.4 0-24.3-1.9-35.4-5.3V350.9L301.2 210.7c7-4.4 13.3-9.7 18.8-15.7c15.9 17.6 39.1 29 65.2 29c26.2 0 49.3-11.4 65.2-29c16 17.6 39.1 29 65.2 29c4.1 0 8.1-.3 12.1-.8c55.5-7.4 81.8-72.5 52.1-119.4L522.3 13.1C517.2 5 508.1 0 498.4 0H141.6c-9.7 0-18.8 5-23.9 13.1l-22.7 36L38.8 5.1zm73.4 218.1c4 .5 8.1 .8 12.1 .8c11 0 21.4-2 31-5.6L48.9 134.5c-6.1 40.6 19.5 82.8 63.3 88.7zM160 384V250.6c-11.2 3.5-23.2 5.4-35.6 5.4c-5.5 0-11-.4-16.3-1.1l-.1 0c-4.1-.6-8.1-1.3-12-2.3V384v64c0 35.3 28.7 64 64 64H480c12.9 0 24.8-3.8 34.9-10.3L365.5 384H160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"strava\": {\n    \"changes\": [\"5.0.0\", \"5.0.1\", \"5.7.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f428\",\n    \"label\": \"Strava\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M158.4 0L7 292h89.2l62.2-116.1L220.1 292h88.5zm150.2 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"street-view\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f21d\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"directions\", \"location\", \"map\", \"navigation\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f21d\",\n    \"label\": \"Street View\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767489,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64v48c0 17.7 14.3 32 32 32h1.8l11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5h38.7c16.3 0 30-12.3 31.8-28.5L318.2 304H320c17.7 0 32-14.3 32-32V224c0-35.3-28.7-64-64-64H224zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M320 64A64 64 0 1 0 192 64a64 64 0 1 0 128 0zm-96 96c-35.3 0-64 28.7-64 64v48c0 17.7 14.3 32 32 32h1.8l11.1 99.5c1.8 16.2 15.5 28.5 31.8 28.5h38.7c16.3 0 30-12.3 31.8-28.5L318.2 304H320c17.7 0 32-14.3 32-32V224c0-35.3-28.7-64-64-64H224zM132.3 394.2c13-2.4 21.7-14.9 19.3-27.9s-14.9-21.7-27.9-19.3c-32.4 5.9-60.9 14.2-82 24.8c-10.5 5.3-20.3 11.7-27.8 19.6C6.4 399.5 0 410.5 0 424c0 21.4 15.5 36.1 29.1 45c14.7 9.6 34.3 17.3 56.4 23.4C130.2 504.7 190.4 512 256 512s125.8-7.3 170.4-19.6c22.1-6.1 41.8-13.8 56.4-23.4c13.7-8.9 29.1-23.6 29.1-45c0-13.5-6.4-24.5-14-32.6c-7.5-7.9-17.3-14.3-27.8-19.6c-21-10.6-49.5-18.9-82-24.8c-13-2.4-25.5 6.3-27.9 19.3s6.3 25.5 19.3 27.9c30.2 5.5 53.7 12.8 69 20.5c3.2 1.6 5.8 3.1 7.9 4.5c3.6 2.4 3.6 7.2 0 9.6c-8.8 5.7-23.1 11.8-43 17.3C374.3 457 318.5 464 256 464s-118.3-7-157.7-17.9c-19.9-5.5-34.2-11.6-43-17.3c-3.6-2.4-3.6-7.2 0-9.6c2.1-1.4 4.8-2.9 7.9-4.5c15.3-7.7 38.8-14.9 69-20.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"strikethrough\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0cc\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cancel\", \"edit\", \"font\", \"format\", \"text\", \"type\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0cc\",\n    \"label\": \"Strikethrough\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H270.1c-.1 0-.3-.1-.4-.1l-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3l0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6l0 0 .2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1H335.1c7 5.6 11.4 11.2 13.9 17.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H270.1c-.1 0-.3-.1-.4-.1l-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3l0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6l0 0 .2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1H335.1c7 5.6 11.4 11.2 13.9 17.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stripe\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f429\",\n    \"label\": \"Stripe\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M165 144.7l-43.3 9.2-.2 142.4c0 26.3 19.8 43.3 46.1 43.3 14.6 0 25.3-2.7 31.2-5.9v-33.8c-5.7 2.3-33.7 10.5-33.7-15.7V221h33.7v-37.8h-33.7zm89.1 51.6l-2.7-13.1H213v153.2h44.3V233.3c10.5-13.8 28.2-11.1 33.9-9.3v-40.8c-6-2.1-26.7-6-37.1 13.1zm92.3-72.3l-44.6 9.5v36.2l44.6-9.5zM44.9 228.3c0-6.9 5.8-9.6 15.1-9.7 13.5 0 30.7 4.1 44.2 11.4v-41.8c-14.7-5.8-29.4-8.1-44.1-8.1-36 0-60 18.8-60 50.2 0 49.2 67.5 41.2 67.5 62.4 0 8.2-7.1 10.9-17 10.9-14.7 0-33.7-6.1-48.6-14.2v40c16.5 7.1 33.2 10.1 48.5 10.1 36.9 0 62.3-15.8 62.3-47.8 0-52.9-67.9-43.4-67.9-63.4zM640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9zm-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7zm-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8zm-126.7 33.7h44.6V183.2h-44.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stripe-s\": {\n    \"changes\": [\"5.0.1\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f42a\",\n    \"label\": \"Stripe S\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M155.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C298.3 7.2 251.1 0 203.8 0 88.1 0 11 60.4 11 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5a396.09 396.09 0 0 0 156 32.4c118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stroopwafel\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f551\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"caramel\", \"cookie\", \"dessert\", \"sweets\", \"waffle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f551\",\n    \"label\": \"Stroopwafel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM312.6 63.7c-6.2-6.2-16.4-6.2-22.6 0L256 97.6 222.1 63.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l33.9 33.9-45.3 45.3-56.6-56.6c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l56.6 56.6-45.3 45.3L86.3 199.4c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L97.6 256 63.7 289.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 45.3 45.3-56.6 56.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56.6-56.6 45.3 45.3-33.9 33.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L256 414.4l33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 45.3-45.3 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 45.3-45.3 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L414.4 256l33.9-33.9c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-33.9 33.9-45.3-45.3 56.6-56.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-56.6 56.6-45.3-45.3 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6zM142.9 256l45.3-45.3L233.4 256l-45.3 45.3L142.9 256zm67.9 67.9L256 278.6l45.3 45.3L256 369.1l-45.3-45.3zM278.6 256l45.3-45.3L369.1 256l-45.3 45.3L278.6 256zm22.6-67.9L256 233.4l-45.3-45.3L256 142.9l45.3 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM312.6 63.7c-6.2-6.2-16.4-6.2-22.6 0L256 97.6 222.1 63.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l33.9 33.9-45.3 45.3-56.6-56.6c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l56.6 56.6-45.3 45.3L86.3 199.4c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L97.6 256 63.7 289.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l33.9-33.9 45.3 45.3-56.6 56.6c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0l56.6-56.6 45.3 45.3-33.9 33.9c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L256 414.4l33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-33.9-33.9 45.3-45.3 56.6 56.6c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-56.6-56.6 45.3-45.3 33.9 33.9c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L414.4 256l33.9-33.9c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-33.9 33.9-45.3-45.3 56.6-56.6c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0l-56.6 56.6-45.3-45.3 33.9-33.9c6.2-6.2 6.2-16.4 0-22.6zM142.9 256l45.3-45.3L233.4 256l-45.3 45.3L142.9 256zm67.9 67.9L256 278.6l45.3 45.3L256 369.1l-45.3-45.3zM278.6 256l45.3-45.3L369.1 256l-45.3 45.3L278.6 256zm22.6-67.9L256 233.4l-45.3-45.3L256 142.9l45.3 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"stubber\": {\n    \"changes\": [\"6.2.1\", \"6.3.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e5c7\",\n    \"label\": \"Stubber\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1667828915,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1c49.4 0 71.4 63.6 142.4 63.6c15.6 0 35.9-2.8 55.3-13.3V368c0 61.8-50.4 112-112.3 112H0l41.8-56L0 368l41.7-56L0 256.1l41.8-56L0 144.1 41.8 88 0 32H335.7C397.6 32 448 82.3 448 144.1v51.3c-9.2 36.3-25.9 60.6-55 60.6c-49.6 0-71.6-63.5-142.4-63.5c-35.9 0-95.2 14.6-114.1 101.6h0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M136.5 294.2l58.8 22.9c9.1-36.8 25.4-61.1 55-61.1c49.4 0 71.4 63.6 142.4 63.6c15.6 0 35.9-2.8 55.3-13.3V368c0 61.8-50.4 112-112.3 112H0l41.8-56L0 368l41.7-56L0 256.1l41.8-56L0 144.1 41.8 88 0 32H335.7C397.6 32 448 82.3 448 144.1v51.3c-9.2 36.3-25.9 60.6-55 60.6c-49.6 0-71.6-63.5-142.4-63.5c-35.9 0-95.2 14.6-114.1 101.6h0z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"studiovinari\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3f8\",\n    \"label\": \"Studio Vinari\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stumbleupon\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a4\",\n    \"label\": \"StumbleUpon Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"stumbleupon-circle\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1a3\",\n    \"label\": \"StumbleUpon Circle\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"subscript\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f12c\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"font\", \"format\", \"text\", \"type\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f12c\",\n    \"label\": \"Subscript\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V320z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V320z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"suitcase\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9f3\"],\n        \"secondary\": [\"10f0f2\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"baggage\",\n        \"luggage\",\n        \"move\",\n        \"packing\",\n        \"suitcase\",\n        \"travel\",\n        \"trip\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0f2\",\n    \"label\": \"Suitcase\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 56V96H336V56c0-4.4-3.6-8-8-8H184c-4.4 0-8 3.6-8 8zM128 96V56c0-30.9 25.1-56 56-56H328c30.9 0 56 25.1 56 56V96v32V480H128V128 96zM64 96H96V480H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64zM448 480H416V96h32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 56V96H336V56c0-4.4-3.6-8-8-8H184c-4.4 0-8 3.6-8 8zM128 96V56c0-30.9 25.1-56 56-56H328c30.9 0 56 25.1 56 56V96v32V480H128V128 96zM64 96H96V480H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64zM448 480H416V96h32c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"suitcase-medical\": {\n    \"aliases\": {\n      \"names\": [\"medkit\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0fa\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"first aid\",\n        \"firstaid\",\n        \"health\",\n        \"help\",\n        \"medical\",\n        \"supply\",\n        \"support\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0fa\",\n    \"label\": \"Suitcase Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96v32V480H384V128 96 56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM96 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H96V96zM416 480h32c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H416V480zM224 208c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H288v48c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V320H176c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h48V208z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M184 48H328c4.4 0 8 3.6 8 8V96H176V56c0-4.4 3.6-8 8-8zm-56 8V96v32V480H384V128 96 56c0-30.9-25.1-56-56-56H184c-30.9 0-56 25.1-56 56zM96 96H64C28.7 96 0 124.7 0 160V416c0 35.3 28.7 64 64 64H96V96zM416 480h32c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H416V480zM224 208c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v48h48c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H288v48c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V320H176c-8.8 0-16-7.2-16-16V272c0-8.8 7.2-16 16-16h48V208z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"suitcase-rolling\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5c1\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"baggage\", \"luggage\", \"move\", \"suitcase\", \"travel\", \"trip\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5c1\",\n    \"label\": \"Suitcase Rolling\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M144 56c0-4.4 3.6-8 8-8h80c4.4 0 8 3.6 8 8v72H144V56zm176 72H288V56c0-30.9-25.1-56-56-56H152C121.1 0 96 25.1 96 56v72H64c-35.3 0-64 28.7-64 64V416c0 35.3 28.7 64 64 64c0 17.7 14.3 32 32 32s32-14.3 32-32H256c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64zM112 224H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 128H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M144 56c0-4.4 3.6-8 8-8h80c4.4 0 8 3.6 8 8v72H144V56zm176 72H288V56c0-30.9-25.1-56-56-56H152C121.1 0 96 25.1 96 56v72H64c-35.3 0-64 28.7-64 64V416c0 35.3 28.7 64 64 64c0 17.7 14.3 32 32 32s32-14.3 32-32H256c0 17.7 14.3 32 32 32s32-14.3 32-32c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64zM112 224H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 128H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"sun\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2600\"],\n        \"secondary\": [\"10f185\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.5.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bright\",\n        \"brighten\",\n        \"contrast\",\n        \"day\",\n        \"lighter\",\n        \"rays\",\n        \"sol\",\n        \"solar\",\n        \"star\",\n        \"sun\",\n        \"sunny\",\n        \"weather\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f185\",\n    \"label\": \"Sun\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M375.7 19.7c-1.5-8-6.9-14.7-14.4-17.8s-16.1-2.2-22.8 2.4L256 61.1 173.5 4.2c-6.7-4.6-15.3-5.5-22.8-2.4s-12.9 9.8-14.4 17.8l-18.1 98.5L19.7 136.3c-8 1.5-14.7 6.9-17.8 14.4s-2.2 16.1 2.4 22.8L61.1 256 4.2 338.5c-4.6 6.7-5.5 15.3-2.4 22.8s9.8 13 17.8 14.4l98.5 18.1 18.1 98.5c1.5 8 6.9 14.7 14.4 17.8s16.1 2.2 22.8-2.4L256 450.9l82.5 56.9c6.7 4.6 15.3 5.5 22.8 2.4s12.9-9.8 14.4-17.8l18.1-98.5 98.5-18.1c8-1.5 14.7-6.9 17.8-14.4s2.2-16.1-2.4-22.8L450.9 256l56.9-82.5c4.6-6.7 5.5-15.3 2.4-22.8s-9.8-12.9-17.8-14.4l-98.5-18.1L375.7 19.7zM269.6 110l65.6-45.2 14.4 78.3c1.8 9.8 9.5 17.5 19.3 19.3l78.3 14.4L402 242.4c-5.7 8.2-5.7 19 0 27.2l45.2 65.6-78.3 14.4c-9.8 1.8-17.5 9.5-19.3 19.3l-14.4 78.3L269.6 402c-8.2-5.7-19-5.7-27.2 0l-65.6 45.2-14.4-78.3c-1.8-9.8-9.5-17.5-19.3-19.3L64.8 335.2 110 269.6c5.7-8.2 5.7-19 0-27.2L64.8 176.8l78.3-14.4c9.8-1.8 17.5-9.5 19.3-19.3l14.4-78.3L242.4 110c8.2 5.7 19 5.7 27.2 0zM256 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM192 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M375.7 19.7c-1.5-8-6.9-14.7-14.4-17.8s-16.1-2.2-22.8 2.4L256 61.1 173.5 4.2c-6.7-4.6-15.3-5.5-22.8-2.4s-12.9 9.8-14.4 17.8l-18.1 98.5L19.7 136.3c-8 1.5-14.7 6.9-17.8 14.4s-2.2 16.1 2.4 22.8L61.1 256 4.2 338.5c-4.6 6.7-5.5 15.3-2.4 22.8s9.8 13 17.8 14.4l98.5 18.1 18.1 98.5c1.5 8 6.9 14.7 14.4 17.8s16.1 2.2 22.8-2.4L256 450.9l82.5 56.9c6.7 4.6 15.3 5.5 22.8 2.4s12.9-9.8 14.4-17.8l18.1-98.5 98.5-18.1c8-1.5 14.7-6.9 17.8-14.4s2.2-16.1-2.4-22.8L450.9 256l56.9-82.5c4.6-6.7 5.5-15.3 2.4-22.8s-9.8-12.9-17.8-14.4l-98.5-18.1L375.7 19.7zM269.6 110l65.6-45.2 14.4 78.3c1.8 9.8 9.5 17.5 19.3 19.3l78.3 14.4L402 242.4c-5.7 8.2-5.7 19 0 27.2l45.2 65.6-78.3 14.4c-9.8 1.8-17.5 9.5-19.3 19.3l-14.4 78.3L269.6 402c-8.2-5.7-19-5.7-27.2 0l-65.6 45.2-14.4-78.3c-1.8-9.8-9.5-17.5-19.3-19.3L64.8 335.2 110 269.6c5.7-8.2 5.7-19 0-27.2L64.8 176.8l78.3-14.4c9.8-1.8 17.5-9.5 19.3-19.3l14.4-78.3L242.4 110c8.2 5.7 19 5.7 27.2 0zM256 368a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM192 256a64 64 0 1 1 128 0 64 64 0 1 1 -128 0z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"sun-plant-wilt\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arid\", \"droop\", \"drought\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e57a\",\n    \"label\": \"Sun Plant Wilt\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M160 0c-6.3 0-12 3.7-14.6 9.5L120.6 64.9 63.9 43.2c-5.9-2.3-12.6-.8-17 3.6s-5.9 11.1-3.6 17l21.7 56.7L9.5 145.4C3.7 148 0 153.7 0 160s3.7 12 9.5 14.6l55.4 24.8L43.2 256.1c-2.3 5.9-.8 12.6 3.6 17s11.1 5.9 17 3.6l56.7-21.7 24.8 55.4c2.6 5.8 8.3 9.5 14.6 9.5s12-3.7 14.6-9.5l24.8-55.4 56.7 21.7c5.9 2.3 12.6 .8 17-3.6s5.9-11.1 3.6-17l-21.7-56.7 55.4-24.8c5.8-2.6 9.5-8.3 9.5-14.6s-3.7-12-9.5-14.6l-55.4-24.8 21.7-56.7c2.3-5.9 .8-12.6-3.6-17s-11.1-5.9-17-3.6L199.4 64.9 174.6 9.5C172 3.7 166.3 0 160 0zm0 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm312 16c0-17.7 14.3-32 32-32s32 14.3 32 32v53.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C624 318 640 290.7 640 274c0-21.5-9.2-37-24-44.6V176c0-44.2-35.8-80-80-80s-80 35.8-80 80v22.7c-9.8-4.3-20.6-6.7-32-6.7c-44.2 0-80 35.8-80 80v21.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C400 382 416 354.7 416 338c0-21.5-9.2-37-24-44.6V272c0-17.7 14.3-32 32-32s32 14.3 32 32v8V448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H504V280v-8V176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M160 0c-6.3 0-12 3.7-14.6 9.5L120.6 64.9 63.9 43.2c-5.9-2.3-12.6-.8-17 3.6s-5.9 11.1-3.6 17l21.7 56.7L9.5 145.4C3.7 148 0 153.7 0 160s3.7 12 9.5 14.6l55.4 24.8L43.2 256.1c-2.3 5.9-.8 12.6 3.6 17s11.1 5.9 17 3.6l56.7-21.7 24.8 55.4c2.6 5.8 8.3 9.5 14.6 9.5s12-3.7 14.6-9.5l24.8-55.4 56.7 21.7c5.9 2.3 12.6 .8 17-3.6s5.9-11.1 3.6-17l-21.7-56.7 55.4-24.8c5.8-2.6 9.5-8.3 9.5-14.6s-3.7-12-9.5-14.6l-55.4-24.8 21.7-56.7c2.3-5.9 .8-12.6-3.6-17s-11.1-5.9-17-3.6L199.4 64.9 174.6 9.5C172 3.7 166.3 0 160 0zm0 96a64 64 0 1 1 0 128 64 64 0 1 1 0-128zm32 64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm312 16c0-17.7 14.3-32 32-32s32 14.3 32 32v53.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C624 318 640 290.7 640 274c0-21.5-9.2-37-24-44.6V176c0-44.2-35.8-80-80-80s-80 35.8-80 80v22.7c-9.8-4.3-20.6-6.7-32-6.7c-44.2 0-80 35.8-80 80v21.4c-14.8 7.7-24 23.1-24 44.6c0 16.8 16 44 37.4 67.2c5.8 6.2 15.5 6.2 21.2 0C400 382 416 354.7 416 338c0-21.5-9.2-37-24-44.6V272c0-17.7 14.3-32 32-32s32 14.3 32 32v8V448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H504V280v-8V176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"superpowers\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2dd\",\n    \"label\": \"Superpowers\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"superscript\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f12b\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"exponential\", \"font\", \"format\", \"text\", \"type\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f12b\",\n    \"label\": \"Superscript\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V32zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V32zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"supple\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3f9\",\n    \"label\": \"Supple\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.6v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"suse\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linux\", \"operating system\", \"os\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7d6\",\n    \"label\": \"Suse\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M471.08 102.66s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.06a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2.3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9.5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5.4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3.5-76.2-25.4-81.6-28.2-.3-.4.1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7.8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3.1-.1-.9-.3-.9.7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0-25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M471.08 102.66s-.3 18.3-.3 20.3c-9.1-3-74.4-24.1-135.7-26.3-51.9-1.8-122.8-4.3-223 57.3-19.4 12.4-73.9 46.1-99.6 109.7C7 277-.12 307 7 335.06a111 111 0 0 0 16.5 35.7c17.4 25 46.6 41.6 78.1 44.4 44.4 3.9 78.1-16 90-53.3 8.2-25.8 0-63.6-31.5-82.9-25.6-15.7-53.3-12.1-69.2-1.6-13.9 9.2-21.8 23.5-21.6 39.2.3 27.8 24.3 42.6 41.5 42.6a49 49 0 0 0 15.8-2.7c6.5-1.8 13.3-6.5 13.3-14.9 0-12.1-11.6-14.8-16.8-13.9-2.9.5-4.5 2-11.8 2.4-2-.2-12-3.1-12-14V316c.2-12.3 13.2-18 25.5-16.9 32.3 2.8 47.7 40.7 28.5 65.7-18.3 23.7-76.6 23.2-99.7-20.4-26-49.2 12.7-111.2 87-98.4 33.2 5.7 83.6 35.5 102.4 104.3h45.9c-5.7-17.6-8.9-68.3 42.7-68.3 56.7 0 63.9 39.9 79.8 68.3H460c-12.8-18.3-21.7-38.7-18.9-55.8 5.6-33.8 39.7-18.4 82.4-17.4 66.5.4 102.1-27 103.1-28 3.7-3.1 6.5-15.8 7-17.7 1.3-5.1-3.2-2.4-3.2-2.4-8.7 5.2-30.5 15.2-50.9 15.6-25.3.5-76.2-25.4-81.6-28.2-.3-.4.1 1.2-11-25.5 88.4 58.3 118.3 40.5 145.2 21.7.8-.6 4.3-2.9 3.6-5.7-13.8-48.1-22.4-62.7-34.5-69.6-37-21.6-125-34.7-129.2-35.3.1-.1-.9-.3-.9.7zm60.4 72.8a37.54 37.54 0 0 1 38.9-36.3c33.4 1.2 48.8 42.3 24.4 65.2-24.2 22.7-64.4 4.6-63.3-28.9zm38.6-25.3a26.27 26.27 0 1 0 25.4 27.2 26.19 26.19 0 0 0-25.4-27.2zm4.3 28.8c-15.4 0-15.4-15.6 0-15.6s15.4 15.64 0 15.64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"swatchbook\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5c3\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Pantone\", \"color\", \"design\", \"hue\", \"palette\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5c3\",\n    \"label\": \"Swatchbook\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 32C0 14.3 14.3 0 32 0H160c17.7 0 32 14.3 32 32V416c0 53-43 96-96 96s-96-43-96-96V32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9V154l75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192H480c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H182.8zM128 64H64v64h64V64zM64 192v64h64V192H64zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 32C0 14.3 14.3 0 32 0H160c17.7 0 32 14.3 32 32V416c0 53-43 96-96 96s-96-43-96-96V32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9V154l75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192H480c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H182.8zM128 64H64v64h64V64zM64 192v64h64V192H64zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"swift\": {\n    \"changes\": [\"5.11.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f8e1\",\n    \"label\": \"Swift\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 156.09c0-4.51-.08-9-.2-13.52a196.31 196.31 0 0 0-2.58-29.42 99.62 99.62 0 0 0-9.22-28A94.08 94.08 0 0 0 394.84 44a99.17 99.17 0 0 0-28-9.22 195 195 0 0 0-29.43-2.59c-4.51-.12-9-.17-13.52-.2H124.14c-4.51 0-9 .08-13.52.2-2.45.07-4.91.15-7.37.27a171.68 171.68 0 0 0-22.06 2.32 103.06 103.06 0 0 0-21.21 6.1q-3.46 1.45-6.81 3.12a94.66 94.66 0 0 0-18.39 12.32c-1.88 1.61-3.69 3.28-5.43 5A93.86 93.86 0 0 0 12 85.17a99.45 99.45 0 0 0-9.22 28 196.31 196.31 0 0 0-2.54 29.4c-.13 4.51-.18 9-.21 13.52v199.83c0 4.51.08 9 .21 13.51a196.08 196.08 0 0 0 2.58 29.42 99.3 99.3 0 0 0 9.22 28A94.31 94.31 0 0 0 53.17 468a99.47 99.47 0 0 0 28 9.21 195 195 0 0 0 29.43 2.59c4.5.12 9 .17 13.52.2H323.91c4.51 0 9-.08 13.52-.2a196.59 196.59 0 0 0 29.44-2.59 99.57 99.57 0 0 0 28-9.21A94.22 94.22 0 0 0 436 426.84a99.3 99.3 0 0 0 9.22-28 194.79 194.79 0 0 0 2.59-29.42c.12-4.5.17-9 .2-13.51V172.14c-.01-5.35-.01-10.7-.01-16.05zm-69.88 241c-20-38.93-57.23-29.27-76.31-19.47-1.72 1-3.48 2-5.25 3l-.42.25c-39.5 21-92.53 22.54-145.85-.38A234.64 234.64 0 0 1 45 290.12a230.63 230.63 0 0 0 39.17 23.37c56.36 26.4 113 24.49 153 0-57-43.85-104.6-101-141.09-147.22a197.09 197.09 0 0 1-18.78-25.9c43.7 40 112.7 90.22 137.48 104.12-52.57-55.49-98.89-123.94-96.72-121.74 82.79 83.42 159.18 130.59 159.18 130.59 2.88 1.58 5 2.85 6.73 4a127.44 127.44 0 0 0 4.16-12.47c13.22-48.33-1.66-103.58-35.31-149.2C329.61 141.75 375 229.34 356.4 303.42c-.44 1.73-.95 3.4-1.44 5.09 38.52 47.4 28.04 98.17 23.13 88.59z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"symfony\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f83d\",\n    \"label\": \"Symfony\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm133.74 143.54c-11.47.41-19.4-6.45-19.77-16.87-.27-9.18 6.68-13.44 6.53-18.85-.23-6.55-10.16-6.82-12.87-6.67-39.78 1.29-48.59 57-58.89 113.85 21.43 3.15 36.65-.72 45.14-6.22 12-7.75-3.34-15.72-1.42-24.56 4-18.16 32.55-19 32 5.3-.36 17.86-25.92 41.81-77.6 35.7-10.76 59.52-18.35 115-58.2 161.72-29 34.46-58.4 39.82-71.58 40.26-24.65.85-41-12.31-41.58-29.84-.56-17 14.45-26.26 24.31-26.59 21.89-.75 30.12 25.67 14.88 34-12.09 9.71.11 12.61 2.05 12.55 10.42-.36 17.34-5.51 22.18-9 24-20 33.24-54.86 45.35-118.35 8.19-49.66 17-78 18.23-82-16.93-12.75-27.08-28.55-49.85-34.72-15.61-4.23-25.12-.63-31.81 7.83-7.92 10-5.29 23 2.37 30.7l12.63 14c15.51 17.93 24 31.87 20.8 50.62-5.06 29.93-40.72 52.9-82.88 39.94-36-11.11-42.7-36.56-38.38-50.62 7.51-24.15 42.36-11.72 34.62 13.6-2.79 8.6-4.92 8.68-6.28 13.07-4.56 14.77 41.85 28.4 51-1.39 4.47-14.52-5.3-21.71-22.25-39.85-28.47-31.75-16-65.49 2.95-79.67C204.23 140.13 251.94 197 262 205.29c37.17-109 100.53-105.46 102.43-105.53 25.16-.81 44.19 10.59 44.83 28.65.25 7.69-4.17 22.59-19.52 23.13z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"synagogue\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f54d\"],\n        \"secondary\": [\"10f69b\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Jew\",\n        \"Jewish\",\n        \"building\",\n        \"jewish\",\n        \"judaism\",\n        \"religion\",\n        \"star of david\",\n        \"synagogue\",\n        \"temple\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f69b\",\n    \"label\": \"Synagogue\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M309.8 3.7c5.9-4.9 14.6-4.9 20.5 0l121 100.8C469.5 119.7 480 142.2 480 166V280.1 512H464 352V416c0-17.7-14.3-32-32-32s-32 14.3-32 32v96H176 160V280.1 166c0-23.7 10.5-46.3 28.8-61.5L309.8 3.7zM512 512V244.5l28.1-31.2c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3l63.8 70.9c7.9 8.8 12.3 20.3 12.3 32.1V448c0 35.3-28.7 64-64 64H512zM128 244.5V512H64c-35.3 0-64-28.7-64-64V316.3c0-11.9 4.4-23.3 12.3-32.1l63.8-70.9c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3L128 244.5zM327 124.3c-3.1-5.4-10.9-5.4-13.9 0l-15.9 28.1-32.3-.3c-6.2-.1-10.1 6.7-7 12.1L274.3 192l-16.4 27.8c-3.2 5.4 .7 12.1 7 12.1l32.3-.3L313 259.7c3.1 5.4 10.9 5.4 13.9 0l15.9-28.1 32.3 .3c6.2 .1 10.1-6.7 7-12.1L365.7 192l16.4-27.8c3.2-5.4-.7-12.1-7-12.1l-32.3 .3L327 124.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M309.8 3.7c5.9-4.9 14.6-4.9 20.5 0l121 100.8C469.5 119.7 480 142.2 480 166V280.1 512H464 352V416c0-17.7-14.3-32-32-32s-32 14.3-32 32v96H176 160V280.1 166c0-23.7 10.5-46.3 28.8-61.5L309.8 3.7zM512 512V244.5l28.1-31.2c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3l63.8 70.9c7.9 8.8 12.3 20.3 12.3 32.1V448c0 35.3-28.7 64-64 64H512zM128 244.5V512H64c-35.3 0-64-28.7-64-64V316.3c0-11.9 4.4-23.3 12.3-32.1l63.8-70.9c3-3.4 7.4-5.3 11.9-5.3s8.9 1.9 11.9 5.3L128 244.5zM327 124.3c-3.1-5.4-10.9-5.4-13.9 0l-15.9 28.1-32.3-.3c-6.2-.1-10.1 6.7-7 12.1L274.3 192l-16.4 27.8c-3.2 5.4 .7 12.1 7 12.1l32.3-.3L313 259.7c3.1 5.4 10.9 5.4 13.9 0l15.9-28.1 32.3 .3c6.2 .1 10.1-6.7 7-12.1L365.7 192l16.4-27.8c3.2-5.4-.7-12.1-7-12.1l-32.3 .3L327 124.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"syringe\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f489\"],\n        \"secondary\": [\"10f48e\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"doctor\",\n        \"immunizations\",\n        \"medical\",\n        \"medicine\",\n        \"needle\",\n        \"shot\",\n        \"sick\",\n        \"syringe\",\n        \"vaccinate\",\n        \"vaccine\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f48e\",\n    \"label\": \"Syringe\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766749,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M441 7l32 32 32 32c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15L417.9 128l55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-72-72L295 73c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l55 55L422.1 56 407 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0zM210.3 155.7l61.1-61.1c.3 .3 .6 .7 1 1l16 16 56 56 56 56 16 16c.3 .3 .6 .6 1 1l-191 191c-10.5 10.5-24.7 16.4-39.6 16.4H97.9L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57V325.3c0-14.9 5.9-29.1 16.4-39.6l43.3-43.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M441 7l32 32 32 32c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-15-15L417.9 128l55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-72-72L295 73c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l55 55L422.1 56 407 41c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0zM210.3 155.7l61.1-61.1c.3 .3 .6 .7 1 1l16 16 56 56 56 56 16 16c.3 .3 .6 .6 1 1l-191 191c-10.5 10.5-24.7 16.4-39.6 16.4H97.9L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l57-57V325.3c0-14.9 5.9-29.1 16.4-39.6l43.3-43.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"t\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"74\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter T\", \"Latin Small Letter T\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"54\",\n    \"label\": \"T\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H160V448c0 17.7 14.3 32 32 32s32-14.3 32-32V96H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H192 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H160V448c0 17.7 14.3 32 32 32s32-14.3 32-32V96H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H192 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"table\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0ce\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"data\", \"excel\", \"spreadsheet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ce\",\n    \"label\": \"Table\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 256V160H224v96H64zm0 64H224v96H64V320zm224 96V320H448v96H288zM448 256H288V160H448v96zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 256V160H224v96H64zm0 64H224v96H64V320zm224 96V320H448v96H288zM448 256H288V160H448v96zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"table-cells\": {\n    \"aliases\": {\n      \"names\": [\"th\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f00a\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blocks\", \"boxes\", \"grid\", \"squares\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f00a\",\n    \"label\": \"Table Cells\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm88 64v64H64V96h88zm56 0h88v64H208V96zm240 0v64H360V96h88zM64 224h88v64H64V224zm232 0v64H208V224h88zm64 0h88v64H360V224zM152 352v64H64V352h88zm56 0h88v64H208V352zm240 0v64H360V352h88z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm88 64v64H64V96h88zm56 0h88v64H208V96zm240 0v64H360V96h88zM64 224h88v64H64V224zm232 0v64H208V224h88zm64 0h88v64H360V224zM152 352v64H64V352h88zm56 0h88v64H208V352zm240 0v64H360V352h88z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"table-cells-large\": {\n    \"aliases\": {\n      \"names\": [\"th-large\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f009\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"blocks\", \"boxes\", \"grid\", \"squares\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f009\",\n    \"label\": \"Table Cells Large\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 96V224H288V96H448zm0 192V416H288V288H448zM224 224H64V96H224V224zM64 288H224V416H64V288zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 96V224H288V96H448zm0 192V416H288V288H448zM224 224H64V96H224V224zM64 288H224V416H64V288zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"table-columns\": {\n    \"aliases\": {\n      \"names\": [\"columns\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0db\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\", \"dashboard\", \"organize\", \"panes\", \"split\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0db\",\n    \"label\": \"Table Columns\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm64 64V416H224V160H64zm384 0H288V416H448V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm64 64V416H224V160H64zm384 0H288V416H448V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"table-list\": {\n    \"aliases\": {\n      \"names\": [\"th-list\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f00b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"checklist\",\n        \"completed\",\n        \"done\",\n        \"finished\",\n        \"ol\",\n        \"todo\",\n        \"ul\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f00b\",\n    \"label\": \"Table List\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm64 0v64h64V96H64zm384 0H192v64H448V96zM64 224v64h64V224H64zm384 0H192v64H448V224zM64 352v64h64V352H64zm384 0H192v64H448V352z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm64 0v64h64V96H64zm384 0H192v64H448V96zM64 224v64h64V224H64zm384 0H192v64H448V224zM64 352v64h64V352H64zm384 0H192v64H448V352z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"table-tennis-paddle-ball\": {\n    \"aliases\": {\n      \"names\": [\"ping-pong-paddle-ball\", \"table-tennis\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3d3\"],\n        \"secondary\": [\"10f45d\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ball\", \"bat\", \"game\", \"paddle\", \"ping pong\", \"table tennis\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f45d\",\n    \"label\": \"Table Tennis Paddle Ball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M480 288c-50.1 0-93.6 28.8-114.6 70.8L132.9 126.3l.6-.6 60.1-60.1c87.5-87.5 229.3-87.5 316.8 0c67.1 67.1 82.7 166.3 46.8 248.3C535.8 297.6 509 288 480 288zM113.3 151.9L354.1 392.7c-1.4 7.5-2.1 15.3-2.1 23.3c0 23.2 6.2 44.9 16.9 63.7c-3 .2-6.1 .3-9.2 .3H357c-33.9 0-66.5-13.5-90.5-37.5l-9.8-9.8c-13.1-13.1-34.6-12.4-46.8 1.7L152.2 501c-5.8 6.7-14.2 10.7-23 11s-17.5-3.1-23.8-9.4l-32-32c-6.3-6.3-9.7-14.9-9.4-23.8s4.3-17.2 11-23l66.6-57.7c14-12.2 14.8-33.7 1.7-46.8l-9.8-9.8c-24-24-37.5-56.6-37.5-90.5v-2.7c0-22.8 6.1-44.9 17.3-64.3zM480 320a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M480 288c-50.1 0-93.6 28.8-114.6 70.8L132.9 126.3l.6-.6 60.1-60.1c87.5-87.5 229.3-87.5 316.8 0c67.1 67.1 82.7 166.3 46.8 248.3C535.8 297.6 509 288 480 288zM113.3 151.9L354.1 392.7c-1.4 7.5-2.1 15.3-2.1 23.3c0 23.2 6.2 44.9 16.9 63.7c-3 .2-6.1 .3-9.2 .3H357c-33.9 0-66.5-13.5-90.5-37.5l-9.8-9.8c-13.1-13.1-34.6-12.4-46.8 1.7L152.2 501c-5.8 6.7-14.2 10.7-23 11s-17.5-3.1-23.8-9.4l-32-32c-6.3-6.3-9.7-14.9-9.4-23.8s4.3-17.2 11-23l66.6-57.7c14-12.2 14.8-33.7 1.7-46.8l-9.8-9.8c-24-24-37.5-56.6-37.5-90.5v-2.7c0-22.8 6.1-44.9 17.3-64.3zM480 320a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tablet\": {\n    \"aliases\": {\n      \"names\": [\"tablet-android\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3fb\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"device\", \"kindle\", \"screen\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3fb\",\n    \"label\": \"Tablet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM176 432h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM176 432h96c8.8 0 16 7.2 16 16s-7.2 16-16 16H176c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tablet-button\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f10a\"]\n      }\n    },\n    \"changes\": [\"3.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"apple\", \"device\", \"ipad\", \"kindle\", \"screen\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f10a\",\n    \"label\": \"Tablet Button\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM224 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM224 400a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tablet-screen-button\": {\n    \"aliases\": {\n      \"names\": [\"tablet-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3fa\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"apple\", \"device\", \"ipad\", \"kindle\", \"screen\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3fa\",\n    \"label\": \"Tablet Screen Button\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 64C0 28.7 28.7 0 64 0H384c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM256 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 64H64V384H384V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 64C0 28.7 28.7 0 64 0H384c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM256 448a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM384 64H64V384H384V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tablets\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f490\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"drugs\", \"medicine\", \"pills\", \"prescription\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f490\",\n    \"label\": \"Tablets\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M614.3 247c16.3-25 25.7-54.9 25.7-87C640 71.6 568.4 0 480 0c-32.1 0-61.9 9.4-87 25.7c-7.9 5.2-8.5 16.2-1.8 22.9L591.4 248.8c6.7 6.7 17.8 6.2 22.9-1.8zM567 294.3c7.9-5.2 8.5-16.2 1.8-22.9L368.6 71.2c-6.7-6.7-17.8-6.2-22.9 1.8c-16.3 25-25.7 54.9-25.7 87c0 88.4 71.6 160 160 160c32.1 0 61.9-9.4 87-25.7zM301.5 368H18.5c-9.5 0-16.9 8.2-15 17.5C18.9 457.8 83.1 512 160 512s141.1-54.2 156.5-126.5c2-9.3-5.5-17.5-15-17.5zm0-32c9.5 0 16.9-8.2 15-17.5C301.1 246.2 236.9 192 160 192S18.9 246.2 3.5 318.5c-2 9.3 5.5 17.5 15 17.5H301.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M614.3 247c16.3-25 25.7-54.9 25.7-87C640 71.6 568.4 0 480 0c-32.1 0-61.9 9.4-87 25.7c-7.9 5.2-8.5 16.2-1.8 22.9L591.4 248.8c6.7 6.7 17.8 6.2 22.9-1.8zM567 294.3c7.9-5.2 8.5-16.2 1.8-22.9L368.6 71.2c-6.7-6.7-17.8-6.2-22.9 1.8c-16.3 25-25.7 54.9-25.7 87c0 88.4 71.6 160 160 160c32.1 0 61.9-9.4 87-25.7zM301.5 368H18.5c-9.5 0-16.9 8.2-15 17.5C18.9 457.8 83.1 512 160 512s141.1-54.2 156.5-126.5c2-9.3-5.5-17.5-15-17.5zm0-32c9.5 0 16.9-8.2 15-17.5C301.1 246.2 236.9 192 160 192S18.9 246.2 3.5 318.5c-2 9.3 5.5 17.5 15 17.5H301.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tachograph-digital\": {\n    \"aliases\": {\n      \"names\": [\"digital-tachograph\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f566\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"data\", \"distance\", \"speed\", \"tachometer\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f566\",\n    \"label\": \"Tachograph Digital\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767343,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm32 64H320c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32zM64 368c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm320 0c0-8.8 7.2-16 16-16H560c8.8 0 16 7.2 16 16s-7.2 16-16 16H400c-8.8 0-16-7.2-16-16zM80 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H64zm32 64H320c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32zM64 368c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H80c-8.8 0-16-7.2-16-16zm320 0c0-8.8 7.2-16 16-16H560c8.8 0 16 7.2 16 16s-7.2 16-16 16H400c-8.8 0-16-7.2-16-16zM80 288a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm48 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0zm80-16a16 16 0 1 1 0 32 16 16 0 1 1 0-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tag\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3f7\"],\n        \"secondary\": [\"10f02b\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"discount\", \"labe\", \"label\", \"price\", \"shopping\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f02b\",\n    \"label\": \"Tag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 80V229.5c0 17 6.7 33.3 18.7 45.3l176 176c25 25 65.5 25 90.5 0L418.7 317.3c25-25 25-65.5 0-90.5l-176-176c-12-12-28.3-18.7-45.3-18.7H48C21.5 32 0 53.5 0 80zm112 32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tags\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f02c\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"discount\", \"label\", \"price\", \"shopping\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f02c\",\n    \"label\": \"Tags\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5V80C0 53.5 21.5 32 48 32H197.5c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5V80C0 53.5 21.5 32 48 32H197.5c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tape\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4db\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"design\", \"package\", \"sticky\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4db\",\n    \"label\": \"Tape\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M380.8 416c41.5-40.7 67.2-97.3 67.2-160C448 132.3 347.7 32 224 32S0 132.3 0 256S100.3 480 224 480H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H380.8zM224 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm64 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M380.8 416c41.5-40.7 67.2-97.3 67.2-160C448 132.3 347.7 32 224 32S0 132.3 0 256S100.3 480 224 480H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H380.8zM224 160a96 96 0 1 1 0 192 96 96 0 1 1 0-192zm64 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tarp\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"protection\", \"tarp\", \"tent\", \"waterproof\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e57b\",\n    \"label\": \"Tarp\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M576 128c0-35.3-28.7-64-64-64H64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64l352 0 0-128c0-17.7 14.3-32 32-32H576V128zM448 448L576 320H448l0 128zM96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M576 128c0-35.3-28.7-64-64-64H64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64l352 0 0-128c0-17.7 14.3-32 32-32H576V128zM448 448L576 320H448l0 128zM96 128a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tarp-droplet\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"protection\", \"tarp\", \"tent\", \"waterproof\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e57c\",\n    \"label\": \"Tarp Droplet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 160c-35.3 0-64-26.9-64-60c0-24 33.7-70.1 52.2-93.5c6.1-7.7 17.5-7.7 23.6 0C318.3 29.9 352 76 352 100c0 33.1-28.7 60-64 60zM64 128H197.5c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H512c35.3 0 64 28.7 64 64V352H448c-17.7 0-32 14.3-32 32l0 128L64 512c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64zM448 512l0-128H576L448 512zM96 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 160c-35.3 0-64-26.9-64-60c0-24 33.7-70.1 52.2-93.5c6.1-7.7 17.5-7.7 23.6 0C318.3 29.9 352 76 352 100c0 33.1-28.7 60-64 60zM64 128H197.5c13.2 37.3 48.7 64 90.5 64s77.4-26.7 90.5-64H512c35.3 0 64 28.7 64 64V352H448c-17.7 0-32 14.3-32 32l0 128L64 512c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64zM448 512l0-128H576L448 512zM96 256a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"taxi\": {\n    \"aliases\": {\n      \"names\": [\"cab\"],\n      \"unicodes\": {\n        \"composite\": [\"1f696\"],\n        \"secondary\": [\"10f1ba\"]\n      }\n    },\n    \"changes\": [\n      \"4.1.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cab\",\n        \"cabbie\",\n        \"car\",\n        \"car service\",\n        \"lyft\",\n        \"machine\",\n        \"oncoming\",\n        \"oncoming taxi\",\n        \"taxi\",\n        \"transportation\",\n        \"travel\",\n        \"uber\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1ba\",\n    \"label\": \"Taxi\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 0c-17.7 0-32 14.3-32 32V64c0 .1 0 .1 0 .2c-38.6 2.2-72.3 27.3-85.2 64.1L39.6 228.8C16.4 238.4 0 261.3 0 288V432v48c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V432H416v48c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V432 288c0-26.7-16.4-49.6-39.6-59.2L437.2 128.3c-12.9-36.8-46.6-62-85.2-64.1c0-.1 0-.1 0-.2V32c0-17.7-14.3-32-32-32H192zM165.4 128H346.6c13.6 0 25.7 8.6 30.2 21.4L402.9 224H109.1l26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zM96 288a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 0c-17.7 0-32 14.3-32 32V64c0 .1 0 .1 0 .2c-38.6 2.2-72.3 27.3-85.2 64.1L39.6 228.8C16.4 238.4 0 261.3 0 288V432v48c0 17.7 14.3 32 32 32H64c17.7 0 32-14.3 32-32V432H416v48c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V432 288c0-26.7-16.4-49.6-39.6-59.2L437.2 128.3c-12.9-36.8-46.6-62-85.2-64.1c0-.1 0-.1 0-.2V32c0-17.7-14.3-32-32-32H192zM165.4 128H346.6c13.6 0 25.7 8.6 30.2 21.4L402.9 224H109.1l26.1-74.6c4.5-12.8 16.6-21.4 30.2-21.4zM96 288a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm288 32a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"teamspeak\": {\n    \"changes\": [\"5.0.11\", \"5.1.0\", \"5.8.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f4f9\",\n    \"label\": \"Teamspeak\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1678906824,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M152.8 37.2c-32.2 38.1-56.1 82.6-69.9 130.5c0 .2-.1 .3-.1 .5C43.5 184.4 16 223 16 268c0 59.6 48.4 108 108 108s108-48.4 108-108c0-53.5-38.9-97.9-90-106.5c15.7-41.8 40.4-79.6 72.3-110.7c1.8-1.6 4-2.6 6.3-3.1c37.2-11.5 76.7-13.3 114.8-5.2C454.7 67.6 534 180.7 517.1 301.3c-8.4 62.6-38.6 112.7-87.7 151.4c-50.1 39.7-107.5 54.3-170.2 52.2l-24-1c12.4 2.8 25 4.9 37.6 6.3c40.7 4.2 81.4 2.1 120.1-12.5c94-35.5 149.3-102.3 162.9-202.5c4.8-52.6-5.8-105.4-30.8-152C454.6 11.3 290.8-38.4 159 32c-2.4 1.4-4.5 3.1-6.3 5.2zM309.4 433.9c-2.1 11.5-4.2 21.9-14.6 31.3c53.2-1 123.2-29.2 161.8-97.1c39.7-69.9 37.6-139.9-6.3-207.8C413.8 105 360.5 77.9 293.7 73.7c1.5 2.3 3.2 4.4 5.2 6.3l5.2 6.3c25.1 31.3 37.6 67.9 42.8 107.5c2.1 15.7-1 30.3-13.6 41.8c-4.2 3.1-5.2 6.3-4.2 10.4l7.3 17.7L365.7 318c5.2 11.5 4.2 19.8-6.3 28.2c-3.2 2.5-6.7 4.6-10.4 6.3l-18.8 8.4 3.1 13.6c3.1 6.3 1 12.5-3.1 17.7c-2.5 2.4-3.8 5.9-3.1 9.4c2.1 11.5-2.1 19.8-12.5 25.1c-2.1 1-4.2 5.2-5.2 7.3zm-133.6-3.1c16.7 11.5 34.5 20.9 53.2 26.1c24 5.2 41.8-6.3 44.9-30.3c1-8.4 5.2-14.6 12.5-17.7c7.3-4.2 8.4-7.3 2.1-13.6l-9.4-8.4 13.6-4.2c6.3-2.1 7.3-5.2 5.2-11.5c-1.4-3-2.4-6.2-3.1-9.4c-3.1-14.6-2.1-15.7 11.5-18.8c8.4-3.1 15.7-6.3 21.9-12.5c3.1-2.1 3.1-4.2 1-8.4l-16.7-30.3c-1-1.9-2.1-3.8-3.1-5.7c-6.4-11.7-13-23.6-15.7-37.1c-2.1-9.4-1-17.7 8.4-24c5.2-4.2 8.4-9.4 8.4-16.7c-.4-10.1-1.5-20.3-3.1-30.3c-6.3-37.6-23-68.9-51.2-95c-5.2-4.2-9.4-6.3-16.7-4.2L203.9 91.5c2 1.2 4 2.4 6 3.6l0 0c6.3 3.7 12.2 7.3 17 12.1c30.3 26.1 41.8 61.6 45.9 100.2c1 8.4 0 16.7-7.3 21.9c-8.4 5.2-10.4 12.5-7.3 20.9c4.9 13.2 10.4 26 16.7 38.6L291.6 318c-6.3 8.4-13.6 11.5-21.9 14.6c-12.5 3.1-14.6 7.3-10.4 20.9c.6 1.5 1.4 2.8 2.1 4.2c2.1 5.2 1 8.4-4.2 10.4l-12.5 3.1 5.2 4.2 4.2 4.2c4.2 5.2 4.2 8.4-2.1 10.4c-7.3 4.2-11.5 9.4-11.5 17.7c0 12.5-7.3 19.8-18.8 24c-3.8 1-7.6 1.5-11.5 1l-34.5-2.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"teeth\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f62e\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bite\", \"dental\", \"dentist\", \"gums\", \"mouth\", \"smile\", \"tooth\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f62e\",\n    \"label\": \"Teeth\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 128C0 75 43 32 96 32H480c53 0 96 43 96 96V384c0 53-43 96-96 96H96c-53 0-96-43-96-96V128zm176 48v56c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V176c0-26.5-21.5-48-48-48s-48 21.5-48 48zm176-48c-26.5 0-48 21.5-48 48v56c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V176c0-26.5-21.5-48-48-48zM48 208v24c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V208c0-26.5-21.5-48-48-48s-48 21.5-48 48zM96 384c26.5 0 48-21.5 48-48V312c0-13.3-10.7-24-24-24H72c-13.3 0-24 10.7-24 24v24c0 26.5 21.5 48 48 48zm80-48c0 26.5 21.5 48 48 48s48-21.5 48-48V312c0-13.3-10.7-24-24-24H200c-13.3 0-24 10.7-24 24v24zm176 48c26.5 0 48-21.5 48-48V312c0-13.3-10.7-24-24-24H328c-13.3 0-24 10.7-24 24v24c0 26.5 21.5 48 48 48zm80-176v24c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V208c0-26.5-21.5-48-48-48s-48 21.5-48 48zm48 176c26.5 0 48-21.5 48-48V312c0-13.3-10.7-24-24-24H456c-13.3 0-24 10.7-24 24v24c0 26.5 21.5 48 48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 128C0 75 43 32 96 32H480c53 0 96 43 96 96V384c0 53-43 96-96 96H96c-53 0-96-43-96-96V128zm176 48v56c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V176c0-26.5-21.5-48-48-48s-48 21.5-48 48zm176-48c-26.5 0-48 21.5-48 48v56c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V176c0-26.5-21.5-48-48-48zM48 208v24c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V208c0-26.5-21.5-48-48-48s-48 21.5-48 48zM96 384c26.5 0 48-21.5 48-48V312c0-13.3-10.7-24-24-24H72c-13.3 0-24 10.7-24 24v24c0 26.5 21.5 48 48 48zm80-48c0 26.5 21.5 48 48 48s48-21.5 48-48V312c0-13.3-10.7-24-24-24H200c-13.3 0-24 10.7-24 24v24zm176 48c26.5 0 48-21.5 48-48V312c0-13.3-10.7-24-24-24H328c-13.3 0-24 10.7-24 24v24c0 26.5 21.5 48 48 48zm80-176v24c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V208c0-26.5-21.5-48-48-48s-48 21.5-48 48zm48 176c26.5 0 48-21.5 48-48V312c0-13.3-10.7-24-24-24H456c-13.3 0-24 10.7-24 24v24c0 26.5 21.5 48 48 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"teeth-open\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f62f\"]\n      }\n    },\n    \"changes\": [\"5.2.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dental\", \"dentist\", \"gums bite\", \"mouth\", \"smile\", \"tooth\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f62f\",\n    \"label\": \"Teeth Open\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M96 32C43 32 0 75 0 128v64c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-53-43-96-96-96H96zM224 96c26.5 0 48 21.5 48 48v56c0 13.3-10.7 24-24 24H200c-13.3 0-24-10.7-24-24V144c0-26.5 21.5-48 48-48zm80 48c0-26.5 21.5-48 48-48s48 21.5 48 48v56c0 13.3-10.7 24-24 24H328c-13.3 0-24-10.7-24-24V144zM96 128c26.5 0 48 21.5 48 48v24c0 13.3-10.7 24-24 24H72c-13.3 0-24-10.7-24-24V176c0-26.5 21.5-48 48-48zm336 48c0-26.5 21.5-48 48-48s48 21.5 48 48v24c0 13.3-10.7 24-24 24H456c-13.3 0-24-10.7-24-24V176zM96 480H480c53 0 96-43 96-96V352c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v32c0 53 43 96 96 96zm0-64c-26.5 0-48-21.5-48-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48zm80-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48s-48-21.5-48-48zm176 48c-26.5 0-48-21.5-48-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48zm80-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48s-48-21.5-48-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M96 32C43 32 0 75 0 128v64c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V128c0-53-43-96-96-96H96zM224 96c26.5 0 48 21.5 48 48v56c0 13.3-10.7 24-24 24H200c-13.3 0-24-10.7-24-24V144c0-26.5 21.5-48 48-48zm80 48c0-26.5 21.5-48 48-48s48 21.5 48 48v56c0 13.3-10.7 24-24 24H328c-13.3 0-24-10.7-24-24V144zM96 128c26.5 0 48 21.5 48 48v24c0 13.3-10.7 24-24 24H72c-13.3 0-24-10.7-24-24V176c0-26.5 21.5-48 48-48zm336 48c0-26.5 21.5-48 48-48s48 21.5 48 48v24c0 13.3-10.7 24-24 24H456c-13.3 0-24-10.7-24-24V176zM96 480H480c53 0 96-43 96-96V352c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v32c0 53 43 96 96 96zm0-64c-26.5 0-48-21.5-48-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48zm80-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48s-48-21.5-48-48zm176 48c-26.5 0-48-21.5-48-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48zm80-48V344c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24v24c0 26.5-21.5 48-48 48s-48-21.5-48-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"telegram\": {\n    \"aliases\": {\n      \"names\": [\"telegram-plane\"],\n      \"unicodes\": {\n        \"composite\": [\"f3fe\"],\n        \"secondary\": [\"10f3fe\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2c6\",\n    \"label\": \"Telegram\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"temperature-arrow-down\": {\n    \"aliases\": {\n      \"names\": [\"temperature-down\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e03f\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"air conditioner\",\n        \"cold\",\n        \"heater\",\n        \"mercury\",\n        \"thermometer\",\n        \"winter\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e03f\",\n    \"label\": \"Temperature Arrow Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5V112zM176 0C114.1 0 64 50.1 64 112V276.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3V272c0-8.8-7.2-16-16-16s-16 7.2-16 16v50.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zm336-64H480V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V352H384c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c6 6 14.1 9.4 22.6 9.4s16.6-3.4 22.6-9.4l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5V112zM176 0C114.1 0 64 50.1 64 112V276.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3V272c0-8.8-7.2-16-16-16s-16 7.2-16 16v50.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zm336-64H480V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V352H384c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c6 6 14.1 9.4 22.6 9.4s16.6-3.4 22.6-9.4l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-arrow-up\": {\n    \"aliases\": {\n      \"names\": [\"temperature-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10e040\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"air conditioner\",\n        \"cold\",\n        \"heater\",\n        \"mercury\",\n        \"thermometer\",\n        \"winter\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e040\",\n    \"label\": \"Temperature Arrow Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5V112zM176 0C114.1 0 64 50.1 64 112V276.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3V112c0-8.8-7.2-16-16-16s-16 7.2-16 16V322.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zM480 160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V448c0 17.7 14.3 32 32 32s32-14.3 32-32V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M128 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C249.8 332.6 256 349.5 256 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5V112zM176 0C114.1 0 64 50.1 64 112V276.4c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C43.2 304.2 32 334.8 32 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C288 50.1 237.9 0 176 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3V112c0-8.8-7.2-16-16-16s-16 7.2-16 16V322.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48zM480 160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V448c0 17.7 14.3 32 32 32s32-14.3 32-32V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-empty\": {\n    \"aliases\": {\n      \"names\": [\"temperature-0\", \"thermometer-0\", \"thermometer-empty\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2cb\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cold\", \"mercury\", \"status\", \"temperature\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2cb\",\n    \"label\": \"Temperature Empty\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M112 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C233.8 332.6 240 349.5 240 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5V112zM160 0C98.1 0 48 50.2 48 112V276.5c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C27.2 304.2 16 334.8 16 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C272 50.2 221.9 0 160 0zm0 416a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M112 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C233.8 332.6 240 349.5 240 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9c8.2-10.6 15.3-25.2 15.3-42.5V112zM160 0C98.1 0 48 50.2 48 112V276.5c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C27.2 304.2 16 334.8 16 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C272 50.2 221.9 0 160 0zm0 416a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-full\": {\n    \"aliases\": {\n      \"names\": [\"temperature-4\", \"thermometer-4\", \"thermometer-full\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2c7\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"fever\", \"hot\", \"mercury\", \"status\", \"temperature\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2c7\",\n    \"label\": \"Temperature Full\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V112c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V112c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-half\": {\n    \"aliases\": {\n      \"names\": [\"temperature-2\", \"thermometer-2\", \"thermometer-half\"],\n      \"unicodes\": {\n        \"composite\": [\"1f321\"],\n        \"secondary\": [\"10f2c9\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mercury\", \"status\", \"temperature\", \"thermometer\", \"weather\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2c9\",\n    \"label\": \"Temperature Half\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V208c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V208c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-high\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f769\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cook\", \"covid-19\", \"mercury\", \"summer\", \"thermometer\", \"warm\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f769\",\n    \"label\": \"Temperature High\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M416 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 128A96 96 0 1 0 416 0a96 96 0 1 0 0 192zM96 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C217.8 332.6 224 349.5 224 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9C88.9 308.4 96 293.8 96 276.5V112zM144 0C82.1 0 32 50.2 32 112V276.5c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C11.2 304.2 0 334.8 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C256 50.2 205.9 0 144 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3V112c0-8.8-7.2-16-16-16s-16 7.2-16 16V322.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M416 64a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm0 128A96 96 0 1 0 416 0a96 96 0 1 0 0 192zM96 112c0-26.5 21.5-48 48-48s48 21.5 48 48V276.5c0 17.3 7.1 31.9 15.3 42.5C217.8 332.6 224 349.5 224 368c0 44.2-35.8 80-80 80s-80-35.8-80-80c0-18.5 6.2-35.4 16.7-48.9C88.9 308.4 96 293.8 96 276.5V112zM144 0C82.1 0 32 50.2 32 112V276.5c0 .1-.1 .3-.2 .6c-.2 .6-.8 1.6-1.7 2.8C11.2 304.2 0 334.8 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-33.2-11.2-63.8-30.1-88.1c-.9-1.2-1.5-2.2-1.7-2.8c-.1-.3-.2-.5-.2-.6V112C256 50.2 205.9 0 144 0zm0 416c26.5 0 48-21.5 48-48c0-20.9-13.4-38.7-32-45.3V112c0-8.8-7.2-16-16-16s-16 7.2-16 16V322.7c-18.6 6.6-32 24.4-32 45.3c0 26.5 21.5 48 48 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-low\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f76b\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cold\", \"cool\", \"covid-19\", \"mercury\", \"thermometer\", \"winter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f76b\",\n    \"label\": \"Temperature Low\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M448 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 96a96 96 0 1 1 192 0A96 96 0 1 1 320 96zM144 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C70.2 332.6 64 349.5 64 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM32 112C32 50.2 82.1 0 144 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S0 447.5 0 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM192 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V272c0-8.8 7.2-16 16-16s16 7.2 16 16v50.7c18.6 6.6 32 24.4 32 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M448 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM320 96a96 96 0 1 1 192 0A96 96 0 1 1 320 96zM144 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C70.2 332.6 64 349.5 64 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM32 112C32 50.2 82.1 0 144 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S0 447.5 0 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM192 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V272c0-8.8 7.2-16 16-16s16 7.2 16 16v50.7c18.6 6.6 32 24.4 32 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-quarter\": {\n    \"aliases\": {\n      \"names\": [\"temperature-1\", \"thermometer-1\", \"thermometer-quarter\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2ca\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mercury\", \"status\", \"temperature\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2ca\",\n    \"label\": \"Temperature Quarter\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V272c0-8.8 7.2-16 16-16s16 7.2 16 16v50.7c18.6 6.6 32 24.4 32 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V272c0-8.8 7.2-16 16-16s16 7.2 16 16v50.7c18.6 6.6 32 24.4 32 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"temperature-three-quarters\": {\n    \"aliases\": {\n      \"names\": [\"temperature-3\", \"thermometer-3\", \"thermometer-three-quarters\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f2c8\"]\n      }\n    },\n    \"changes\": [\"4.7.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"mercury\", \"status\", \"temperature\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2c8\",\n    \"label\": \"Temperature Three Quarters\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V144c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V144c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tencent-weibo\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d5\",\n    \"label\": \"Tencent Weibo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"tenge-sign\": {\n    \"aliases\": {\n      \"names\": [\"tenge\"],\n      \"unicodes\": {\n        \"composite\": [\"20b8\"],\n        \"secondary\": [\"10f7d7\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Tenge Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7d7\",\n    \"label\": \"Tenge Sign\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM0 192c0-17.7 14.3-32 32-32H192 352c17.7 0 32 14.3 32 32s-14.3 32-32 32H224V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V224H32c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM0 192c0-17.7 14.3-32 32-32H192 352c17.7 0 32 14.3 32 32s-14.3 32-32 32H224V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V224H32c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tent\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bivouac\", \"campground\", \"refugee\", \"shelter\", \"tent\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e57d\",\n    \"label\": \"Tent\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M269.4 6C280.5-2 295.5-2 306.6 6l224 160c7.4 5.3 12.2 13.5 13.2 22.5l32 288c1 9-1.9 18.1-8 24.9s-14.7 10.7-23.8 10.7H416L288 288V512H32c-9.1 0-17.8-3.9-23.8-10.7s-9-15.8-8-24.9l32-288c1-9 5.8-17.2 13.2-22.5L269.4 6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M269.4 6C280.5-2 295.5-2 306.6 6l224 160c7.4 5.3 12.2 13.5 13.2 22.5l32 288c1 9-1.9 18.1-8 24.9s-14.7 10.7-23.8 10.7H416L288 288V512H32c-9.1 0-17.8-3.9-23.8-10.7s-9-15.8-8-24.9l32-288c1-9 5.8-17.2 13.2-22.5L269.4 6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tent-arrow-down-to-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"permanent\", \"refugee\", \"shelter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e57e\",\n    \"label\": \"Tent Arrow Down To Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M241.8 111.9c8.9 9.9 8.1 25-1.8 33.9l-80 72c-9.1 8.2-23 8.2-32.1 0l-80-72c-9.9-8.9-10.7-24-1.8-33.9s24-10.7 33.9-1.8l39.9 36L120 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 122.1 39.9-36c9.9-8.9 25-8.1 33.9 1.8zm122.8 22.6c11.5-8.7 27.3-8.7 38.8 0l168 128c6.6 5 11 12.5 12.3 20.7l24 160 .7 4.7c17.5 .2 31.6 14.4 31.6 32c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H159.6l.7-4.7 24-160c1.2-8.2 5.6-15.7 12.3-20.7l168-128zM384 448h76.8L384 320V448z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M241.8 111.9c8.9 9.9 8.1 25-1.8 33.9l-80 72c-9.1 8.2-23 8.2-32.1 0l-80-72c-9.9-8.9-10.7-24-1.8-33.9s24-10.7 33.9-1.8l39.9 36L120 24c0-13.3 10.7-24 24-24s24 10.7 24 24l0 122.1 39.9-36c9.9-8.9 25-8.1 33.9 1.8zm122.8 22.6c11.5-8.7 27.3-8.7 38.8 0l168 128c6.6 5 11 12.5 12.3 20.7l24 160 .7 4.7c17.5 .2 31.6 14.4 31.6 32c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H159.6l.7-4.7 24-160c1.2-8.2 5.6-15.7 12.3-20.7l168-128zM384 448h76.8L384 320V448z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tent-arrow-left-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"refugee\", \"shelter\", \"transition\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e57f\",\n    \"label\": \"Tent Arrow Left Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M488.1 6.2c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9L489.5 72 86.5 72l33.5-30.2c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120l402.9 0-33.5 30.2c-9.9 8.9-10.7 24-1.8 33.9s24 10.7 33.9 1.8l80-72c5.1-4.6 7.9-11 7.9-17.8s-2.9-13.3-7.9-17.8l-80-72zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512H288V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M488.1 6.2c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9L489.5 72 86.5 72l33.5-30.2c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120l402.9 0-33.5 30.2c-9.9 8.9-10.7 24-1.8 33.9s24 10.7 33.9 1.8l80-72c5.1-4.6 7.9-11 7.9-17.8s-2.9-13.3-7.9-17.8l-80-72zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512H288V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tent-arrow-turn-left\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"refugee\", \"shelter\", \"temporary\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e580\",\n    \"label\": \"Tent Arrow Turn Left\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M120.1 41.8c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120 456 120c39.8 0 72 32.2 72 72v40c0 13.3 10.7 24 24 24s24-10.7 24-24V192c0-66.3-53.7-120-120-120L86.5 72l33.5-30.2zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512H288V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M120.1 41.8c9.9-8.9 10.7-24 1.8-33.9S97.8-2.7 87.9 6.2l-80 72C2.9 82.7 0 89.2 0 96s2.9 13.3 7.9 17.8l80 72c9.9 8.9 25 8.1 33.9-1.8s8.1-25-1.8-33.9L86.5 120 456 120c39.8 0 72 32.2 72 72v40c0 13.3 10.7 24 24 24s24-10.7 24-24V192c0-66.3-53.7-120-120-120L86.5 72l33.5-30.2zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512H288V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tent-arrows-down\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"refugee\", \"shelter\", \"spontaneous\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e581\",\n    \"label\": \"Tent Arrows Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M209.8 111.9c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L136 24c0-13.3-10.7-24-24-24S88 10.7 88 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zm352 0c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V146.1l-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512H288V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M209.8 111.9c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36L136 24c0-13.3-10.7-24-24-24S88 10.7 88 24l0 122.1-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zm352 0c-8.9-9.9-24-10.7-33.9-1.8l-39.9 36V24c0-13.3-10.7-24-24-24s-24 10.7-24 24V146.1l-39.9-36c-9.9-8.9-25-8.1-33.9 1.8s-8.1 25 1.8 33.9l80 72c9.1 8.2 23 8.2 32.1 0l80-72c9.9-8.9 10.7-24 1.8-33.9zM307.4 166.5c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S86.7 512 96 512H288V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tents\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bivouac\", \"campground\", \"refugee\", \"shelter\", \"tent\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e582\",\n    \"label\": \"Tents\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M396.6 6.5L235.8 129.1c9.6 1.8 18.9 5.8 27 12l168 128c13.2 10.1 22 24.9 24.5 41.4l6.2 41.5H608c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128c-11.5-8.7-27.3-8.7-38.8 0zm-153.2 160c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S22.7 512 32 512H224V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M396.6 6.5L235.8 129.1c9.6 1.8 18.9 5.8 27 12l168 128c13.2 10.1 22 24.9 24.5 41.4l6.2 41.5H608c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128c-11.5-8.7-27.3-8.7-38.8 0zm-153.2 160c-11.5-8.7-27.3-8.7-38.8 0l-168 128c-6.6 5-11 12.5-12.3 20.7l-24 160c-1.4 9.2 1.3 18.6 7.4 25.6S22.7 512 32 512H224V352l96 160h96c9.3 0 18.2-4.1 24.2-11.1s8.8-16.4 7.4-25.6l-24-160c-1.2-8.2-5.6-15.7-12.3-20.7l-168-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"terminal\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f120\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"code\",\n        \"coding\",\n        \"command\",\n        \"console\",\n        \"development\",\n        \"prompt\",\n        \"terminal\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f120\",\n    \"label\": \"Terminal\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767552,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"text-height\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f034\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"font\", \"format\", \"text\", \"type\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f034\",\n    \"label\": \"Text Height\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767248,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 128V96h64l0 320H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H192l0-320h64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V80c0-26.5-21.5-48-48-48H160 48C21.5 32 0 53.5 0 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V352H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H512V160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 128V96h64l0 320H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H192l0-320h64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V80c0-26.5-21.5-48-48-48H160 48C21.5 32 0 53.5 0 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32zM502.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V352H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H512V160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"text-slash\": {\n    \"aliases\": {\n      \"names\": [\"remove-format\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f87d\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cancel\", \"font\", \"format\", \"remove\", \"style\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f87d\",\n    \"label\": \"Text Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L355.7 253.5 400.2 96H503L497 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C577.6 61.3 554.7 32 523.5 32H376.1h-.3H204.5c-22 0-41.2 15-46.6 36.4l-6.3 25.2L38.8 5.1zm168 131.7c.1-.3 .2-.7 .3-1L217 96H333.7L301.3 210.8l-94.5-74.1zM243.3 416H192c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H309.8l17.6-62.1L272.9 311 243.3 416z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L355.7 253.5 400.2 96H503L497 120.2c-4.3 17.1 6.1 34.5 23.3 38.8s34.5-6.1 38.8-23.3l11-44.1C577.6 61.3 554.7 32 523.5 32H376.1h-.3H204.5c-22 0-41.2 15-46.6 36.4l-6.3 25.2L38.8 5.1zm168 131.7c.1-.3 .2-.7 .3-1L217 96H333.7L301.3 210.8l-94.5-74.1zM243.3 416H192c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c17.7 0 32-14.3 32-32s-14.3-32-32-32H309.8l17.6-62.1L272.9 311 243.3 416z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"text-width\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f035\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"font\", \"format\", \"text\", \"type\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f035\",\n    \"label\": \"Text Width\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M64 128V96H192l0 128H176c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H256l0-128H384v32c0 17.7 14.3 32 32 32s32-14.3 32-32V80c0-26.5-21.5-48-48-48H224 48C21.5 32 0 53.5 0 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32zM9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V416H320v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H128V320c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M64 128V96H192l0 128H176c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H256l0-128H384v32c0 17.7 14.3 32 32 32s32-14.3 32-32V80c0-26.5-21.5-48-48-48H224 48C21.5 32 0 53.5 0 80v48c0 17.7 14.3 32 32 32s32-14.3 32-32zM9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V416H320v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H128V320c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"the-red-yeti\": {\n    \"changes\": [\"5.3.0\", \"5.7.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f69d\",\n    \"label\": \"The Red Yeti\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014480,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M488.23 241.7l20.7 7.1c-9.6-23.9-23.9-37-31.7-44.8l7.1-18.2c.2 0 12.3-27.8-2.5-30.7-.6-11.3-6.6-27-18.4-27-7.6-10.6-17.7-12.3-30.7-5.9a122.2 122.2 0 0 0-25.3 16.5c-5.3-6.4-3 .4-3-29.8-37.1-24.3-45.4-11.7-74.8 3l.5.5a239.36 239.36 0 0 0-68.4-13.3c-5.5-8.7-18.6-19.1-25.1-25.1l24.8 7.1c-5.5-5.5-26.8-12.9-34.2-15.2 18.2-4.1 29.8-20.8 42.5-33-34.9-10.1-67.9-5.9-97.9 11.8l12-44.2L182 0c-31.6 24.2-33 41.9-33.7 45.5-.9-2.4-6.3-19.6-15.2-27a35.12 35.12 0 0 0-.5 25.3c3 8.4 5.9 14.8 8.4 18.9-16-3.3-28.3-4.9-49.2 0h-3.7l33 14.3a194.26 194.26 0 0 0-46.7 67.4l-1.7 8.4 1.7 1.7 7.6-4.7c-3.3 11.6-5.3 19.4-6.6 25.8a200.18 200.18 0 0 0-27.8 40.3c-15 1-31.8 10.8-40.3 14.3l3 3.4 28.8 1c-.5 1-.7 2.2-1.2 3.2-7.3 6.4-39.8 37.7-33 80.7l20.2-22.4c.5 1.7.7 3.4 1.2 5.2 0 25.5.4 89.6 64.9 150.5 43.6 40 96 60.2 157.5 60.2 121.7 0 223-87.3 223-211.5 6.8-9.7-1.2 3 16.7-25.1l13 14.3 2.5-.5A181.84 181.84 0 0 0 495 255a44.74 44.74 0 0 0-6.8-13.3zM398 111.2l-.5 21.9c5.5 18.1 16.9 17.2 22.4 17.2l-3.4-4.7 22.4-5.4a242.44 242.44 0 0 1-27 0c12.8-2.1 33.3-29 43-11.3 3.4 7.6 6.4 17.2 9.3 27.8l1.7-5.9a56.38 56.38 0 0 1-1.7-15.2c5.4.5 8.8 3.4 9.3 10.1.5 6.4 1.7 14.8 3.4 25.3l4.7-11.3c4.6 0 4.5-3.6-2.5 20.7-20.9-8.7-35.1-8.4-46.5-8.4l18.2-16c-25.3 8.2-33 10.8-54.8 20.9-1.1-5.4-5-13.5-16-19.9-3.2 3.8-2.8.9-.7 14.8h-2.5a62.32 62.32 0 0 0-8.4-23.1l4.2-3.4c8.4-7.1 11.8-14.3 10.6-21.9-.5-6.4-5.4-13.5-13.5-20.7 5.6-3.4 15.2-.4 28.3 8.5zm-39.6-10.1c2.7 1.9 11.4 5.4 18.9 17.2 4.2 8.4 4 9.8 3.4 11.1-.5 2.4-.5 4.3-3 7.1-1.7 2.5-5.4 4.7-11.8 7.6-7.6-13-16.5-23.6-27.8-31.2zM91 143.1l1.2-1.7c1.2-2.9 4.2-7.6 9.3-15.2l2.5-3.4-13 12.3 5.4-4.7-10.1 9.3-4.2 1.2c12.3-24.1 23.1-41.3 32.5-50.2 9.3-9.3 16-16 20.2-19.4l-6.4 1.2c-11.3-4.2-19.4-7.1-24.8-8.4 2.5-.5 3.7-.5 3.2-.5 10.3 0 17.5.5 20.9 1.2a52.35 52.35 0 0 0 16 2.5l.5-1.7-8.4-35.8 13.5 29a42.89 42.89 0 0 0 5.9-14.3c1.7-6.4 5.4-13 10.1-19.4s7.6-10.6 9.3-11.3a234.68 234.68 0 0 0-6.4 25.3l-1.7 7.1-.5 4.7 2.5 2.5C190.4 39.9 214 34 239.8 34.5l21.1.5c-11.8 13.5-27.8 21.9-48.5 24.8a201.26 201.26 0 0 1-23.4 2.9l-.2-.5-2.5-1.2a20.75 20.75 0 0 0-14 2c-2.5-.2-4.9-.5-7.1-.7l-2.5 1.7.5 1.2c2 .2 3.9.5 6.2.7l-2 3.4 3.4-.5-10.6 11.3c-4.2 3-5.4 6.4-4.2 9.3l5.4-3.4h1.2a39.4 39.4 0 0 1 25.3-15.2v-3c6.4.5 13 1 19.4 1.2 6.4 0 8.4.5 5.4 1.2a189.6 189.6 0 0 1 20.7 13.5c13.5 10.1 23.6 21.9 30 35.4 8.8 18.2 13.5 37.1 13.5 56.6a141.13 141.13 0 0 1-3 28.3 209.91 209.91 0 0 1-16 46l2.5.5c18.2-19.7 41.9-16 49.2-16l-6.4 5.9 22.4 17.7-1.7 30.7c-5.4-12.3-16.5-21.1-33-27.8 16.5 14.8 23.6 21.1 21.9 20.2-4.8-2.8-3.5-1.9-10.8-3.7 4.1 4.1 17.5 18.8 18.2 20.7l.2.2-.2.2c0 1.8 1.6-1.2-14 22.9-75.2-15.3-106.27-42.7-141.2-63.2l11.8 1.2c-11.8-18.5-15.6-17.7-38.4-26.1L149 225c-8.8-3-18.2-3-28.3.5l7.6-10.6-1.2-1.7c-14.9 4.3-19.8 9.2-22.6 11.3-1.1-5.5-2.8-12.4-12.3-28.8l-1.2 27-13.2-5c1.5-25.2 5.4-50.5 13.2-74.6zm276.5 330c-49.9 25-56.1 22.4-59 23.9-29.8-11.8-50.9-31.7-63.5-58.8l30 16.5c-9.8-9.3-18.3-16.5-38.4-44.3l11.8 23.1-17.7-7.6c14.2 21.1 23.5 51.7 66.6 73.5-120.8 24.2-199-72.1-200.9-74.3a262.57 262.57 0 0 0 35.4 24.8c3.4 1.7 7.1 2.5 10.1 1.2l-16-20.7c9.2 4.2 9.5 4.5 69.1 29-42.5-20.7-73.8-40.8-93.2-60.2-.5 6.4-1.2 10.1-1.2 10.1a80.25 80.25 0 0 1 20.7 26.6c-39-18.9-57.6-47.6-71.3-82.6 49.9 55.1 118.9 37.5 120.5 37.1 34.8 16.4 69.9 23.6 113.9 10.6 3.3 0 20.3 17 25.3 39.1l4.2-3-2.5-23.6c9 9 24.9 22.6 34.4 13-15.6-5.3-23.5-9.5-29.5-31.7 4.6 4.2 7.6 9 27.8 15l1.2-1.2-10.5-14.2c11.7-4.8-3.5 1 32-10.8 4.3 34.3 9 49.2.7 89.5zm115.3-214.4l-2.5.5 3 9.3c-3.5 5.9-23.7 44.3-71.6 79.7-39.5 29.8-76.6 39.1-80.9 40.3l-7.6-7.1-1.2 3 14.3 16-7.1-4.7 3.4 4.2h-1.2l-21.9-13.5 9.3 26.6-19-27.9-1.2 2.5 7.6 29c-6.1-8.2-21-32.6-56.8-39.6l32.5 21.2a214.82 214.82 0 0 1-93.2-6.4c-4.2-1.2-8.9-2.5-13.5-4.2l1.2-3-44.8-22.4 26.1 22.4c-57.7 9.1-113-25.4-126.4-83.4l-2.5-16.4-22.27 22.3c19.5-57.5 25.6-57.9 51.4-70.1-9.1-5.3-1.6-3.3-38.4-9.3 15.8-5.8 33-15.4 73 5.2a18.5 18.5 0 0 1 3.7-1.7c.6-3.2.4-.8 1-11.8 3.9 10 3.6 8.7 3 9.3l1.7.5c12.7-6.5 8.9-4.5 17-8.9l-5.4 13.5 22.3-5.8-8.4 8.4 2.5 2.5c4.5-1.8 30.3 3.4 40.8 16l-23.6-2.5c39.4 23 51.5 54 55.8 69.6l1.7-1.2c-2.8-22.3-12.4-33.9-16-40.1 4.2 5 39.2 34.6 110.4 46-11.3-.5-23.1 5.4-34.9 18.9l46.7-20.2-9.3 21.9c7.6-10.1 14.8-23.6 21.2-39.6v-.5l1.2-3-1.2 16c13.5-41.8 25.3-78.5 35.4-109.7l13.5-27.8v-2l-5.4-4.2h10.1l5.9 4.2 2.5-1.2-3.4-16 12.3 18.9 41.8-20.2-14.8 13 .5 2.9 17.7-.5a184 184 0 0 1 33 4.2l-23.6 2.5-1.2 3 26.6 23.1a254.21 254.21 0 0 1 27 32c-11.2-3.3-10.3-3.4-21.2-3.4l12.3 32.5zm-6.1-71.3l-3.9 13-14.3-11.8zm-254.8 7.1c1.7 10.6 4.7 17.7 8.8 21.9-9.3 6.6-27.5 13.9-46.5 16l.5 1.2a50.22 50.22 0 0 0 24.8-2.5l-7.1 13c4.2-1.7 10.1-7.1 17.7-14.8 11.9-5.5 12.7-5.1 20.2-16-12.7-6.4-15.7-13.7-18.4-18.8zm3.7-102.3c-6.4-3.4-10.6 3-12.3 18.9s2.5 29.5 11.8 39.6 18.2 10.6 26.1 3 3.4-23.6-11.3-47.7a39.57 39.57 0 0 0-14.27-13.8zm-4.7 46.3c5.4 2.2 10.5 1.9 12.3-10.6v-4.7l-1.2.5c-4.3-3.1-2.5-4.5-1.7-6.2l.5-.5c-.9-1.2-5-8.1-12.5 4.7-.5-13.5.5-21.9 3-24.8 1.2-2.5 4.7-1.2 11.3 4.2 6.4 5.4 11.3 16 15.2 32.5 6.5 28-19.8 26.2-26.9 4.9zm-45-5.5c1.6.3 9.3-1.1 9.3-14.8h-.5c-5.4-1.1-2.2-5.5-.7-5.9-1.7-3-3.4-4.2-5.4-4.7-8.1 0-11.6 12.7-8.1 21.2a7.51 7.51 0 0 0 5.43 4.2zM216 82.9l-2.5.5.5 3a48.94 48.94 0 0 1 26.1 5.9c-2.5-5.5-10-14.3-28.3-14.3l.5 2.5zm-71.8 49.4c21.7 16.8 16.5 21.4 46.5 23.6l-2.9-4.7a42.67 42.67 0 0 0 14.8-28.3c1.7-16-1.2-29.5-8.8-41.3l13-7.6a2.26 2.26 0 0 0-.5-1.7 14.21 14.21 0 0 0-13.5 1.7c-12.7 6.7-28 20.9-29 22.4-1.7 1.7-3.4 5.9-5.4 13.5a99.61 99.61 0 0 0-2.9 23.6c-4.7-8-10.5-6.4-19.9-5.9l7.1 7.6c-16.5 0-23.3 15.4-23.6 16 6.8 0 4.6-7.6 30-12.3-4.3-6.3-3.3-5-4.9-6.6zm18.7-18.7c1.2-7.6 3.4-13 6.4-17.2 5.4-6.4 10.6-10.1 16-11.8 4.2-1.7 7.1 1.2 10.1 9.3a72.14 72.14 0 0 1 3 25.3c-.5 9.3-3.4 17.2-8.4 23.1-2.9 3.4-5.4 5.9-6.4 7.6a39.21 39.21 0 0 1-11.3-.5l-7.1-3.4-5.4-6.4c.8-10 1.3-18.8 3.1-26zm42 56.1c-34.8 14.4-34.7 14-36.1 14.3-20.8 4.7-19-24.4-18.9-24.8l5.9-1.2-.5-2.5c-20.2-2.6-31 4.2-32.5 4.9.5.5 3 3.4 5.9 9.3 4.2-6.4 8.8-10.1 15.2-10.6a83.47 83.47 0 0 0 1.7 33.7c.1.5 2.6 17.4 27.5 24.1 11.3 3 27 1.2 48.9-5.4l-9.2.5c-4.2-14.8-6.4-24.8-5.9-29.5 11.3-8.8 21.9-11.3 30.7-7.6h2.5l-11.8-7.6-7.1.5c-5.9 1.2-12.3 4.2-19.4 8.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"themeco\": {\n    \"changes\": [\"5.1.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5c6\",\n    \"label\": \"Themeco\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M202.9 8.43c9.9-5.73 26-5.82 35.95-.21L430 115.85c10 5.6 18 19.44 18 30.86V364c0 11.44-8.06 25.29-18 31L238.81 503.74c-9.93 5.66-26 5.57-35.85-.21L17.86 395.12C8 389.34 0 375.38 0 364V146.71c0-11.44 8-25.36 17.91-31.08zm-77.4 199.83c-15.94 0-31.89.14-47.83.14v101.45H96.8V280h28.7c49.71 0 49.56-71.74 0-71.74zm140.14 100.29l-30.73-34.64c37-7.51 34.8-65.23-10.87-65.51-16.09 0-32.17-.14-48.26-.14v101.59h19.13v-33.91h18.41l29.56 33.91h22.76zm-41.59-82.32c23.34 0 23.26 32.46 0 32.46h-29.13v-32.46zm-95.56-1.6c21.18 0 21.11 38.85 0 38.85H96.18v-38.84zm192.65-18.25c-68.46 0-71 105.8 0 105.8 69.48-.01 69.41-105.8 0-105.8zm0 17.39c44.12 0 44.8 70.86 0 70.86s-44.43-70.86 0-70.86z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"themeisle\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2b2\",\n    \"label\": \"ThemeIsle\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"thermometer\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f491\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"covid-19\", \"mercury\", \"status\", \"temperature\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f491\",\n    \"label\": \"Thermometer\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M96 382.1V293.3c0-14.9 5.9-29.1 16.4-39.6l27.3-27.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 45.5-45.5C355.2 10.9 381.4 0 408.8 0C465.8 0 512 46.2 512 103.2c0 27.4-10.9 53.6-30.2 73L258.3 399.6c-10.5 10.5-24.7 16.4-39.6 16.4H129.9L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l89-89z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M96 382.1V293.3c0-14.9 5.9-29.1 16.4-39.6l27.3-27.3 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 41.4-41.4 57 57c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6l-57-57 45.5-45.5C355.2 10.9 381.4 0 408.8 0C465.8 0 512 46.2 512 103.2c0 27.4-10.9 53.6-30.2 73L258.3 399.6c-10.5 10.5-24.7 16.4-39.6 16.4H129.9L41 505c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l89-89z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"think-peaks\": {\n    \"changes\": [\"5.4.2\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f731\",\n    \"label\": \"Think Peaks\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M465.4 409.4l87.1-150.2-32-.3-55.1 95L259.2 0 23 407.4l32 .3L259.2 55.6zm-355.3-44.1h32.1l117.4-202.5L463 511.9l32.5.1-235.8-404.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"threads\": {\n    \"changes\": [\"6.4.1\", \"6.4.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e618\",\n    \"label\": \"Threads\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1690904784,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M331.5 235.7c2.2 .9 4.2 1.9 6.3 2.8c29.2 14.1 50.6 35.2 61.8 61.4c15.7 36.5 17.2 95.8-30.3 143.2c-36.2 36.2-80.3 52.5-142.6 53h-.3c-70.2-.5-124.1-24.1-160.4-70.2c-32.3-41-48.9-98.1-49.5-169.6V256v-.2C17 184.3 33.6 127.2 65.9 86.2C102.2 40.1 156.2 16.5 226.4 16h.3c70.3 .5 124.9 24 162.3 69.9c18.4 22.7 32 50 40.6 81.7l-40.4 10.8c-7.1-25.8-17.8-47.8-32.2-65.4c-29.2-35.8-73-54.2-130.5-54.6c-57 .5-100.1 18.8-128.2 54.4C72.1 146.1 58.5 194.3 58 256c.5 61.7 14.1 109.9 40.3 143.3c28 35.6 71.2 53.9 128.2 54.4c51.4-.4 85.4-12.6 113.7-40.9c32.3-32.2 31.7-71.8 21.4-95.9c-6.1-14.2-17.1-26-31.9-34.9c-3.7 26.9-11.8 48.3-24.7 64.8c-17.1 21.8-41.4 33.6-72.7 35.3c-23.6 1.3-46.3-4.4-63.9-16c-20.8-13.8-33-34.8-34.3-59.3c-2.5-48.3 35.7-83 95.2-86.4c21.1-1.2 40.9-.3 59.2 2.8c-2.4-14.8-7.3-26.6-14.6-35.2c-10-11.7-25.6-17.7-46.2-17.8H227c-16.6 0-39 4.6-53.3 26.3l-34.4-23.6c19.2-29.1 50.3-45.1 87.8-45.1h.8c62.6 .4 99.9 39.5 103.7 107.7l-.2 .2zm-156 68.8c1.3 25.1 28.4 36.8 54.6 35.3c25.6-1.4 54.6-11.4 59.5-73.2c-13.2-2.9-27.8-4.4-43.4-4.4c-4.8 0-9.6 .1-14.4 .4c-42.9 2.4-57.2 23.2-56.2 41.8l-.1 .1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"thumbs-down\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f44e\", \"f088\"],\n        \"secondary\": [\"10f165\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"-1\",\n        \"disagree\",\n        \"disapprove\",\n        \"dislike\",\n        \"down\",\n        \"hand\",\n        \"social\",\n        \"thumb\",\n        \"thumbs down\",\n        \"thumbs-o-down\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f165\",\n    \"label\": \"Thumbs Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M313.4 479.1c26-5.2 42.9-30.5 37.7-56.5l-2.3-11.4c-5.3-26.7-15.1-52.1-28.8-75.2H464c26.5 0 48-21.5 48-48c0-18.5-10.5-34.6-25.9-42.6C497 236.6 504 223.1 504 208c0-23.4-16.8-42.9-38.9-47.1c4.4-7.3 6.9-15.8 6.9-24.9c0-21.3-13.9-39.4-33.1-45.6c.7-3.3 1.1-6.8 1.1-10.4c0-26.5-21.5-48-48-48H294.5c-19 0-37.5 5.6-53.3 16.1L202.7 73.8C176 91.6 160 121.6 160 153.7V192v48 24.9c0 29.2 13.3 56.7 36 75l7.4 5.9c26.5 21.2 44.6 51 51.2 84.2l2.3 11.4c5.2 26 30.5 42.9 56.5 37.7zM32 384H96c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H32C14.3 96 0 110.3 0 128V352c0 17.7 14.3 32 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M313.4 479.1c26-5.2 42.9-30.5 37.7-56.5l-2.3-11.4c-5.3-26.7-15.1-52.1-28.8-75.2H464c26.5 0 48-21.5 48-48c0-18.5-10.5-34.6-25.9-42.6C497 236.6 504 223.1 504 208c0-23.4-16.8-42.9-38.9-47.1c4.4-7.3 6.9-15.8 6.9-24.9c0-21.3-13.9-39.4-33.1-45.6c.7-3.3 1.1-6.8 1.1-10.4c0-26.5-21.5-48-48-48H294.5c-19 0-37.5 5.6-53.3 16.1L202.7 73.8C176 91.6 160 121.6 160 153.7V192v48 24.9c0 29.2 13.3 56.7 36 75l7.4 5.9c26.5 21.2 44.6 51 51.2 84.2l2.3 11.4c5.2 26 30.5 42.9 56.5 37.7zM32 384H96c17.7 0 32-14.3 32-32V128c0-17.7-14.3-32-32-32H32C14.3 96 0 110.3 0 128V352c0 17.7 14.3 32 32 32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M323.8 477.2c-38.2 10.9-78.1-11.2-89-49.4l-5.7-20c-3.7-13-10.4-25-19.5-35l-51.3-56.4c-8.9-9.8-8.2-25 1.6-33.9s25-8.2 33.9 1.6l51.3 56.4c14.1 15.5 24.4 34 30.1 54.1l5.7 20c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7l-5.7-20c-5.7-19.9-14.7-38.7-26.6-55.5c-5.2-7.3-5.8-16.9-1.7-24.9s12.3-13 21.3-13L448 288c8.8 0 16-7.2 16-16c0-6.8-4.3-12.7-10.4-15c-7.4-2.8-13-9-14.9-16.7s.1-15.8 5.3-21.7c2.5-2.8 4-6.5 4-10.6c0-7.8-5.6-14.3-13-15.7c-8.2-1.6-15.1-7.3-18-15.2s-1.6-16.7 3.6-23.3c2.1-2.7 3.4-6.1 3.4-9.9c0-6.7-4.2-12.6-10.2-14.9c-11.5-4.5-17.7-16.9-14.4-28.8c.4-1.3 .6-2.8 .6-4.3c0-8.8-7.2-16-16-16H286.5c-12.6 0-25 3.7-35.5 10.7l-61.7 41.1c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l61.7-41.1c18.4-12.3 40-18.8 62.1-18.8H384c34.7 0 62.9 27.6 64 62c14.6 11.7 24 29.7 24 50c0 4.5-.5 8.8-1.3 13c15.4 11.7 25.3 30.2 25.3 51c0 6.5-1 12.8-2.8 18.7C504.8 238.3 512 254.3 512 272c0 35.3-28.6 64-64 64l-92.3 0c4.7 10.4 8.7 21.2 11.8 32.2l5.7 20c10.9 38.2-11.2 78.1-49.4 89zM32 384c-17.7 0-32-14.3-32-32V128c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M323.8 477.2c-38.2 10.9-78.1-11.2-89-49.4l-5.7-20c-3.7-13-10.4-25-19.5-35l-51.3-56.4c-8.9-9.8-8.2-25 1.6-33.9s25-8.2 33.9 1.6l51.3 56.4c14.1 15.5 24.4 34 30.1 54.1l5.7 20c3.6 12.7 16.9 20.1 29.7 16.5s20.1-16.9 16.5-29.7l-5.7-20c-5.7-19.9-14.7-38.7-26.6-55.5c-5.2-7.3-5.8-16.9-1.7-24.9s12.3-13 21.3-13L448 288c8.8 0 16-7.2 16-16c0-6.8-4.3-12.7-10.4-15c-7.4-2.8-13-9-14.9-16.7s.1-15.8 5.3-21.7c2.5-2.8 4-6.5 4-10.6c0-7.8-5.6-14.3-13-15.7c-8.2-1.6-15.1-7.3-18-15.2s-1.6-16.7 3.6-23.3c2.1-2.7 3.4-6.1 3.4-9.9c0-6.7-4.2-12.6-10.2-14.9c-11.5-4.5-17.7-16.9-14.4-28.8c.4-1.3 .6-2.8 .6-4.3c0-8.8-7.2-16-16-16H286.5c-12.6 0-25 3.7-35.5 10.7l-61.7 41.1c-11 7.4-25.9 4.4-33.3-6.7s-4.4-25.9 6.7-33.3l61.7-41.1c18.4-12.3 40-18.8 62.1-18.8H384c34.7 0 62.9 27.6 64 62c14.6 11.7 24 29.7 24 50c0 4.5-.5 8.8-1.3 13c15.4 11.7 25.3 30.2 25.3 51c0 6.5-1 12.8-2.8 18.7C504.8 238.3 512 254.3 512 272c0 35.3-28.6 64-64 64l-92.3 0c4.7 10.4 8.7 21.2 11.8 32.2l5.7 20c10.9 38.2-11.2 78.1-49.4 89zM32 384c-17.7 0-32-14.3-32-32V128c0-17.7 14.3-32 32-32H96c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H32z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"thumbs-up\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f44d\", \"f087\"],\n        \"secondary\": [\"10f164\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"+1\",\n        \"agree\",\n        \"approve\",\n        \"favorite\",\n        \"hand\",\n        \"like\",\n        \"ok\",\n        \"okay\",\n        \"social\",\n        \"success\",\n        \"thumb\",\n        \"thumbs up\",\n        \"thumbs-o-up\",\n        \"up\",\n        \"yes\",\n        \"you got it dude\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f164\",\n    \"label\": \"Thumbs Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2H464c26.5 0 48 21.5 48 48c0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1c4.4 7.3 6.9 15.8 6.9 24.9c0 21.3-13.9 39.4-33.1 45.6c.7 3.3 1.1 6.8 1.1 10.4c0 26.5-21.5 48-48 48H294.5c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3V320 272 247.1c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192H96c17.7 0 32 14.3 32 32V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V224c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M313.4 32.9c26 5.2 42.9 30.5 37.7 56.5l-2.3 11.4c-5.3 26.7-15.1 52.1-28.8 75.2H464c26.5 0 48 21.5 48 48c0 18.5-10.5 34.6-25.9 42.6C497 275.4 504 288.9 504 304c0 23.4-16.8 42.9-38.9 47.1c4.4 7.3 6.9 15.8 6.9 24.9c0 21.3-13.9 39.4-33.1 45.6c.7 3.3 1.1 6.8 1.1 10.4c0 26.5-21.5 48-48 48H294.5c-19 0-37.5-5.6-53.3-16.1l-38.5-25.7C176 420.4 160 390.4 160 358.3V320 272 247.1c0-29.2 13.3-56.7 36-75l7.4-5.9c26.5-21.2 44.6-51 51.2-84.2l2.3-11.4c5.2-26 30.5-42.9 56.5-37.7zM32 192H96c17.7 0 32 14.3 32 32V448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V224c0-17.7 14.3-32 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684766193,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M323.8 34.8c-38.2-10.9-78.1 11.2-89 49.4l-5.7 20c-3.7 13-10.4 25-19.5 35l-51.3 56.4c-8.9 9.8-8.2 25 1.6 33.9s25 8.2 33.9-1.6l51.3-56.4c14.1-15.5 24.4-34 30.1-54.1l5.7-20c3.6-12.7 16.9-20.1 29.7-16.5s20.1 16.9 16.5 29.7l-5.7 20c-5.7 19.9-14.7 38.7-26.6 55.5c-5.2 7.3-5.8 16.9-1.7 24.9s12.3 13 21.3 13L448 224c8.8 0 16 7.2 16 16c0 6.8-4.3 12.7-10.4 15c-7.4 2.8-13 9-14.9 16.7s.1 15.8 5.3 21.7c2.5 2.8 4 6.5 4 10.6c0 7.8-5.6 14.3-13 15.7c-8.2 1.6-15.1 7.3-18 15.1s-1.6 16.7 3.6 23.3c2.1 2.7 3.4 6.1 3.4 9.9c0 6.7-4.2 12.6-10.2 14.9c-11.5 4.5-17.7 16.9-14.4 28.8c.4 1.3 .6 2.8 .6 4.3c0 8.8-7.2 16-16 16H286.5c-12.6 0-25-3.7-35.5-10.7l-61.7-41.1c-11-7.4-25.9-4.4-33.3 6.7s-4.4 25.9 6.7 33.3l61.7 41.1c18.4 12.3 40 18.8 62.1 18.8H384c34.7 0 62.9-27.6 64-62c14.6-11.7 24-29.7 24-50c0-4.5-.5-8.8-1.3-13c15.4-11.7 25.3-30.2 25.3-51c0-6.5-1-12.8-2.8-18.7C504.8 273.7 512 257.7 512 240c0-35.3-28.6-64-64-64l-92.3 0c4.7-10.4 8.7-21.2 11.8-32.2l5.7-20c10.9-38.2-11.2-78.1-49.4-89zM32 192c-17.7 0-32 14.3-32 32V448c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M323.8 34.8c-38.2-10.9-78.1 11.2-89 49.4l-5.7 20c-3.7 13-10.4 25-19.5 35l-51.3 56.4c-8.9 9.8-8.2 25 1.6 33.9s25 8.2 33.9-1.6l51.3-56.4c14.1-15.5 24.4-34 30.1-54.1l5.7-20c3.6-12.7 16.9-20.1 29.7-16.5s20.1 16.9 16.5 29.7l-5.7 20c-5.7 19.9-14.7 38.7-26.6 55.5c-5.2 7.3-5.8 16.9-1.7 24.9s12.3 13 21.3 13L448 224c8.8 0 16 7.2 16 16c0 6.8-4.3 12.7-10.4 15c-7.4 2.8-13 9-14.9 16.7s.1 15.8 5.3 21.7c2.5 2.8 4 6.5 4 10.6c0 7.8-5.6 14.3-13 15.7c-8.2 1.6-15.1 7.3-18 15.1s-1.6 16.7 3.6 23.3c2.1 2.7 3.4 6.1 3.4 9.9c0 6.7-4.2 12.6-10.2 14.9c-11.5 4.5-17.7 16.9-14.4 28.8c.4 1.3 .6 2.8 .6 4.3c0 8.8-7.2 16-16 16H286.5c-12.6 0-25-3.7-35.5-10.7l-61.7-41.1c-11-7.4-25.9-4.4-33.3 6.7s-4.4 25.9 6.7 33.3l61.7 41.1c18.4 12.3 40 18.8 62.1 18.8H384c34.7 0 62.9-27.6 64-62c14.6-11.7 24-29.7 24-50c0-4.5-.5-8.8-1.3-13c15.4-11.7 25.3-30.2 25.3-51c0-6.5-1-12.8-2.8-18.7C504.8 273.7 512 257.7 512 240c0-35.3-28.6-64-64-64l-92.3 0c4.7-10.4 8.7-21.2 11.8-32.2l5.7-20c10.9-38.2-11.2-78.1-49.4-89zM32 192c-17.7 0-32 14.3-32 32V448c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"thumbtack\": {\n    \"aliases\": {\n      \"names\": [\"thumb-tack\"],\n      \"unicodes\": {\n        \"composite\": [\"1f4cc\", \"1f588\"],\n        \"secondary\": [\"10f08d\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Pushpin\",\n        \"coordinates\",\n        \"location\",\n        \"marker\",\n        \"pin\",\n        \"pushpin\",\n        \"thumb-tack\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f08d\",\n    \"label\": \"Thumbtack\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 32C32 14.3 46.3 0 64 0H320c17.7 0 32 14.3 32 32s-14.3 32-32 32H290.5l11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3H32c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64H64C46.3 64 32 49.7 32 32zM160 384h64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 32C32 14.3 46.3 0 64 0H320c17.7 0 32 14.3 32 32s-14.3 32-32 32H290.5l11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3H32c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64H64C46.3 64 32 49.7 32 32zM160 384h64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ticket\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f39f\"],\n        \"secondary\": [\"10f145\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admission\",\n        \"admission tickets\",\n        \"movie\",\n        \"pass\",\n        \"support\",\n        \"ticket\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f145\",\n    \"label\": \"Ticket\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 64C28.7 64 0 92.7 0 128v64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320v64c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V320c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6V128c0-35.3-28.7-64-64-64H64zm64 112l0 160c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16zM96 160c0-17.7 14.3-32 32-32H448c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 64C28.7 64 0 92.7 0 128v64c0 8.8 7.4 15.7 15.7 18.6C34.5 217.1 48 235 48 256s-13.5 38.9-32.3 45.4C7.4 304.3 0 311.2 0 320v64c0 35.3 28.7 64 64 64H512c35.3 0 64-28.7 64-64V320c0-8.8-7.4-15.7-15.7-18.6C541.5 294.9 528 277 528 256s13.5-38.9 32.3-45.4c8.3-2.9 15.7-9.8 15.7-18.6V128c0-35.3-28.7-64-64-64H64zm64 112l0 160c0 8.8 7.2 16 16 16H432c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16zM96 160c0-17.7 14.3-32 32-32H448c17.7 0 32 14.3 32 32V352c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32V160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ticket-simple\": {\n    \"aliases\": {\n      \"names\": [\"ticket-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f3ff\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"movie\", \"pass\", \"support\", \"ticket\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3ff\",\n    \"label\": \"Ticket Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 128C0 92.7 28.7 64 64 64H512c35.3 0 64 28.7 64 64v64c0 8.8-7.4 15.7-15.7 18.6C541.5 217.1 528 235 528 256s13.5 38.9 32.3 45.4c8.3 2.9 15.7 9.8 15.7 18.6v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320c0-8.8 7.4-15.7 15.7-18.6C34.5 294.9 48 277 48 256s-13.5-38.9-32.3-45.4C7.4 207.7 0 200.8 0 192V128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 128C0 92.7 28.7 64 64 64H512c35.3 0 64 28.7 64 64v64c0 8.8-7.4 15.7-15.7 18.6C541.5 217.1 528 235 528 256s13.5 38.9 32.3 45.4c8.3 2.9 15.7 9.8 15.7 18.6v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320c0-8.8 7.4-15.7 15.7-18.6C34.5 294.9 48 277 48 256s-13.5-38.9-32.3-45.4C7.4 207.7 0 200.8 0 192V128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tiktok\": {\n    \"changes\": [\"5.13.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e07b\",\n    \"label\": \"TikTok\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"timeline\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"chronological\", \"deadline\", \"history\", \"linear\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e29c\",\n    \"label\": \"Timeline\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32 97.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80S48 51.8 48 96c0 32.8 19.7 61 48 73.3V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H288v54.7c-28.3 12.3-48 40.5-48 73.3c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3V288H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H544V169.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 32.8 19.7 61 48 73.3V224H160V169.3zM488 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM320 392a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M128 72a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm32 97.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80S48 51.8 48 96c0 32.8 19.7 61 48 73.3V224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H288v54.7c-28.3 12.3-48 40.5-48 73.3c0 44.2 35.8 80 80 80s80-35.8 80-80c0-32.8-19.7-61-48-73.3V288H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H544V169.3c28.3-12.3 48-40.5 48-73.3c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 32.8 19.7 61 48 73.3V224H160V169.3zM488 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0zM320 392a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toggle-off\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f204\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"button\", \"off\", \"on\", \"switch\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f204\",\n    \"label\": \"Toggle Off\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M384 128c70.7 0 128 57.3 128 128s-57.3 128-128 128H192c-70.7 0-128-57.3-128-128s57.3-128 128-128H384zM576 256c0-106-86-192-192-192H192C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192zM192 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M384 128c70.7 0 128 57.3 128 128s-57.3 128-128 128H192c-70.7 0-128-57.3-128-128s57.3-128 128-128H384zM576 256c0-106-86-192-192-192H192C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192zM192 352a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toggle-on\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f205\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"button\", \"off\", \"on\", \"switch\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f205\",\n    \"label\": \"Toggle On\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M192 64C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192s-86-192-192-192H192zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M192 64C86 64 0 150 0 256S86 448 192 448H384c106 0 192-86 192-192s-86-192-192-192H192zm192 96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toilet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6bd\"],\n        \"secondary\": [\"10f7d8\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bathroom\",\n        \"flush\",\n        \"john\",\n        \"loo\",\n        \"pee\",\n        \"plumbing\",\n        \"poop\",\n        \"porcelain\",\n        \"potty\",\n        \"restroom\",\n        \"throne\",\n        \"toile\",\n        \"toilet\",\n        \"washroom\",\n        \"waste\",\n        \"wc\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7d8\",\n    \"label\": \"Toilet\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48h8V196.9c-1.9 1.4-3.8 2.9-5.6 4.4C10.9 214.5 0 232.9 0 256c0 46.9 14.3 84.1 37 112.5c14.2 17.7 31.1 31.3 48.5 41.8L65.6 469.9c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H352c10.3 0 19.9-4.9 26-13.3s7.7-19.1 4.4-28.8l-19.8-59.5c17.4-10.5 34.3-24.1 48.5-41.8c22.7-28.4 37-65.5 37-112.5c0-23.1-10.9-41.5-26.4-54.6c-1.8-1.5-3.7-3-5.6-4.4V48h8c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM384 256.3c0 1-.3 2.6-3.8 5.6c-4.8 4.1-14 9-29.3 13.4C320.5 284 276.1 288 224 288s-96.5-4-126.9-12.8c-15.3-4.4-24.5-9.3-29.3-13.4c-3.5-3-3.8-4.6-3.8-5.6l0-.3 0-.1c0-1 0-2.5 3.8-5.8c4.8-4.1 14-9 29.3-13.4C127.5 228 171.9 224 224 224s96.5 4 126.9 12.8c15.3 4.4 24.5 9.3 29.3 13.4c3.8 3.2 3.8 4.8 3.8 5.8l0 .1 0 .3zM328.2 384l-.2 .5 0-.5h.2zM112 64h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M24 0C10.7 0 0 10.7 0 24S10.7 48 24 48h8V196.9c-1.9 1.4-3.8 2.9-5.6 4.4C10.9 214.5 0 232.9 0 256c0 46.9 14.3 84.1 37 112.5c14.2 17.7 31.1 31.3 48.5 41.8L65.6 469.9c-3.3 9.8-1.6 20.5 4.4 28.8s15.7 13.3 26 13.3H352c10.3 0 19.9-4.9 26-13.3s7.7-19.1 4.4-28.8l-19.8-59.5c17.4-10.5 34.3-24.1 48.5-41.8c22.7-28.4 37-65.5 37-112.5c0-23.1-10.9-41.5-26.4-54.6c-1.8-1.5-3.7-3-5.6-4.4V48h8c13.3 0 24-10.7 24-24s-10.7-24-24-24H24zM384 256.3c0 1-.3 2.6-3.8 5.6c-4.8 4.1-14 9-29.3 13.4C320.5 284 276.1 288 224 288s-96.5-4-126.9-12.8c-15.3-4.4-24.5-9.3-29.3-13.4c-3.5-3-3.8-4.6-3.8-5.6l0-.3 0-.1c0-1 0-2.5 3.8-5.8c4.8-4.1 14-9 29.3-13.4C127.5 228 171.9 224 224 224s96.5 4 126.9 12.8c15.3 4.4 24.5 9.3 29.3 13.4c3.8 3.2 3.8 4.8 3.8 5.8l0 .1 0 .3zM328.2 384l-.2 .5 0-.5h.2zM112 64h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toilet-paper\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9fb\"],\n        \"secondary\": [\"10f71e\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bathroom\",\n        \"covid-19\",\n        \"halloween\",\n        \"holiday\",\n        \"lavatory\",\n        \"paper towels\",\n        \"prank\",\n        \"privy\",\n        \"restroom\",\n        \"roll\",\n        \"roll of paper\",\n        \"toilet\",\n        \"toilet paper\",\n        \"wipe\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f71e\",\n    \"label\": \"Toilet Paper\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M444.2 0C397.2 49.6 384 126.5 384 192c0 158.8-27.3 247-42.7 283.9c-10 24-33.2 36.1-55.4 36.1H48c-11.5 0-22.2-6.2-27.8-16.2s-5.6-22.3 .4-32.2c9.8-17.7 15.4-38.2 20.5-57.7C52.3 362.8 64 293.5 64 192C64 86 107 0 160 0H444.2zM512 384c-53 0-96-86-96-192S459 0 512 0s96 86 96 192s-43 192-96 192zm0-128c17.7 0 32-28.7 32-64s-14.3-64-32-64s-32 28.7-32 64s14.3 64 32 64zM144 208a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm64 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm80-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M444.2 0C397.2 49.6 384 126.5 384 192c0 158.8-27.3 247-42.7 283.9c-10 24-33.2 36.1-55.4 36.1H48c-11.5 0-22.2-6.2-27.8-16.2s-5.6-22.3 .4-32.2c9.8-17.7 15.4-38.2 20.5-57.7C52.3 362.8 64 293.5 64 192C64 86 107 0 160 0H444.2zM512 384c-53 0-96-86-96-192S459 0 512 0s96 86 96 192s-43 192-96 192zm0-128c17.7 0 32-28.7 32-64s-14.3-64-32-64s-32 28.7-32 64s14.3 64 32 64zM144 208a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm64 0a16 16 0 1 0 -32 0 16 16 0 1 0 32 0zm48 16a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm80-16a16 16 0 1 0 -32 0 16 16 0 1 0 32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toilet-paper-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e072\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bathroom\",\n        \"covid-19\",\n        \"halloween\",\n        \"holiday\",\n        \"lavatory\",\n        \"leaves\",\n        \"prank\",\n        \"privy\",\n        \"restroom\",\n        \"roll\",\n        \"toilet\",\n        \"trouble\",\n        \"ut oh\",\n        \"wipe\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e072\",\n    \"label\": \"Toilet Paper Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-109.7-86C569.9 374 608 291.9 608 192C608 86 565 0 512 0s-96 86-96 192c0 49.1 9.2 93.9 24.4 127.9l-59-46.2c1.6-24.8 2.6-52 2.6-81.6c0-65.5 13.2-142.4 60.2-192H160c-24.8 0-47.4 18.8-64.4 49.6L38.8 5.1zM367.3 385.4L66.5 148.4C64.9 162.4 64 177 64 192c0 101.5-11.7 170.8-23 213.9c-5.1 19.4-10.7 39.9-20.5 57.7c-5.9 9.9-6.1 22.1-.4 32.2S36.5 512 48 512H285.9c22.3 0 45.4-12.1 55.4-36.1c7.4-17.7 17.5-47.2 26-90.6zM544 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-109.7-86C569.9 374 608 291.9 608 192C608 86 565 0 512 0s-96 86-96 192c0 49.1 9.2 93.9 24.4 127.9l-59-46.2c1.6-24.8 2.6-52 2.6-81.6c0-65.5 13.2-142.4 60.2-192H160c-24.8 0-47.4 18.8-64.4 49.6L38.8 5.1zM367.3 385.4L66.5 148.4C64.9 162.4 64 177 64 192c0 101.5-11.7 170.8-23 213.9c-5.1 19.4-10.7 39.9-20.5 57.7c-5.9 9.9-6.1 22.1-.4 32.2S36.5 512 48 512H285.9c22.3 0 45.4-12.1 55.4-36.1c7.4-17.7 17.5-47.2 26-90.6zM544 192c0 35.3-14.3 64-32 64s-32-28.7-32-64s14.3-64 32-64s32 28.7 32 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toilet-portable\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"outhouse\", \"toilet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e583\",\n    \"label\": \"Toilet Portable\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M0 32V64H320V32c0-17.7-14.3-32-32-32H32C14.3 0 0 14.3 0 32zM24 96H0v24V488c0 13.3 10.7 24 24 24s24-10.7 24-24v-8H272v8c0 13.3 10.7 24 24 24s24-10.7 24-24V120 96H296 24zM256 240v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V240c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M0 32V64H320V32c0-17.7-14.3-32-32-32H32C14.3 0 0 14.3 0 32zM24 96H0v24V488c0 13.3 10.7 24 24 24s24-10.7 24-24v-8H272v8c0 13.3 10.7 24 24 24s24-10.7 24-24V120 96H296 24zM256 240v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V240c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toilets-portable\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"outhouse\", \"toilet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e584\",\n    \"label\": \"Toilets Portable\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M32 0H224c17.7 0 32 14.3 32 32V64H0V32C0 14.3 14.3 0 32 0zM0 96H24 232h24v24V488c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8H48v8c0 13.3-10.7 24-24 24s-24-10.7-24-24V120 96zM192 224c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V240c0-8.8-7.2-16-16-16zM352 0H544c17.7 0 32 14.3 32 32V64H320V32c0-17.7 14.3-32 32-32zM320 96h24H552h24v24V488c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8H368v8c0 13.3-10.7 24-24 24s-24-10.7-24-24V120 96zM512 224c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V240c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M32 0H224c17.7 0 32 14.3 32 32V64H0V32C0 14.3 14.3 0 32 0zM0 96H24 232h24v24V488c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8H48v8c0 13.3-10.7 24-24 24s-24-10.7-24-24V120 96zM192 224c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V240c0-8.8-7.2-16-16-16zM352 0H544c17.7 0 32 14.3 32 32V64H320V32c0-17.7 14.3-32 32-32zM320 96h24H552h24v24V488c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8H368v8c0 13.3-10.7 24-24 24s-24-10.7-24-24V120 96zM512 224c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16s16-7.2 16-16V240c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"toolbox\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9f0\"],\n        \"secondary\": [\"10f552\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"chest\",\n        \"container\",\n        \"fix\",\n        \"mechanic\",\n        \"repair\",\n        \"settings\",\n        \"tool\",\n        \"toolbox\",\n        \"tools\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f552\",\n    \"label\": \"Toolbox\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767442,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M176 88v40H336V88c0-4.4-3.6-8-8-8H184c-4.4 0-8 3.6-8 8zm-48 40V88c0-30.9 25.1-56 56-56H328c30.9 0 56 25.1 56 56v40h28.1c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9V304H384V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v16H192V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v16H0V227.9c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1H128zM0 416V336H128v16c0 17.7 14.3 32 32 32s32-14.3 32-32V336H320v16c0 17.7 14.3 32 32 32s32-14.3 32-32V336H512v80c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M176 88v40H336V88c0-4.4-3.6-8-8-8H184c-4.4 0-8 3.6-8 8zm-48 40V88c0-30.9 25.1-56 56-56H328c30.9 0 56 25.1 56 56v40h28.1c12.7 0 24.9 5.1 33.9 14.1l51.9 51.9c9 9 14.1 21.2 14.1 33.9V304H384V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v16H192V288c0-17.7-14.3-32-32-32s-32 14.3-32 32v16H0V227.9c0-12.7 5.1-24.9 14.1-33.9l51.9-51.9c9-9 21.2-14.1 33.9-14.1H128zM0 416V336H128v16c0 17.7 14.3 32 32 32s32-14.3 32-32V336H320v16c0 17.7 14.3 32 32 32s32-14.3 32-32V336H512v80c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tooth\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9b7\"],\n        \"secondary\": [\"10f5c9\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bicuspid\",\n        \"dental\",\n        \"dentist\",\n        \"molar\",\n        \"mouth\",\n        \"teeth\",\n        \"tooth\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5c9\",\n    \"label\": \"Tooth\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M186.1 52.1C169.3 39.1 148.7 32 127.5 32C74.7 32 32 74.7 32 127.5v6.2c0 15.8 3.7 31.3 10.7 45.5l23.5 47.1c4.5 8.9 7.6 18.4 9.4 28.2l36.7 205.8c2 11.2 11.6 19.4 22.9 19.8s21.4-7.4 24-18.4l28.9-121.3C192.2 323.7 207 312 224 312s31.8 11.7 35.8 28.3l28.9 121.3c2.6 11.1 12.7 18.8 24 18.4s20.9-8.6 22.9-19.8l36.7-205.8c1.8-9.8 4.9-19.3 9.4-28.2l23.5-47.1c7.1-14.1 10.7-29.7 10.7-45.5v-2.1c0-55-44.6-99.6-99.6-99.6c-24.1 0-47.4 8.8-65.6 24.6l-3.2 2.8 19.5 15.2c7 5.4 8.2 15.5 2.8 22.5s-15.5 8.2-22.5 2.8l-24.4-19-37-28.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M186.1 52.1C169.3 39.1 148.7 32 127.5 32C74.7 32 32 74.7 32 127.5v6.2c0 15.8 3.7 31.3 10.7 45.5l23.5 47.1c4.5 8.9 7.6 18.4 9.4 28.2l36.7 205.8c2 11.2 11.6 19.4 22.9 19.8s21.4-7.4 24-18.4l28.9-121.3C192.2 323.7 207 312 224 312s31.8 11.7 35.8 28.3l28.9 121.3c2.6 11.1 12.7 18.8 24 18.4s20.9-8.6 22.9-19.8l36.7-205.8c1.8-9.8 4.9-19.3 9.4-28.2l23.5-47.1c7.1-14.1 10.7-29.7 10.7-45.5v-2.1c0-55-44.6-99.6-99.6-99.6c-24.1 0-47.4 8.8-65.6 24.6l-3.2 2.8 19.5 15.2c7 5.4 8.2 15.5 2.8 22.5s-15.5 8.2-22.5 2.8l-24.4-19-37-28.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"torii-gate\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26e9\"],\n        \"secondary\": [\"10f6a1\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"building\",\n        \"religion\",\n        \"shinto\",\n        \"shinto shrine\",\n        \"shintoism\",\n        \"shrine\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6a1\",\n    \"label\": \"Torii Gate\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766828,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 80c0 26.5 21.5 48 48 48H64v64h64V128h96v64h64V128h96v64h64V128h16c26.5 0 48-21.5 48-48V13.4C512 6 506 0 498.6 0c-1.7 0-3.4 .3-5 1l-49 19.6C425.7 28.1 405.5 32 385.2 32H126.8c-20.4 0-40.5-3.9-59.4-11.4L18.4 1c-1.6-.6-3.3-1-5-1C6 0 0 6 0 13.4V80zM64 288V480c0 17.7 14.3 32 32 32s32-14.3 32-32V288H384V480c0 17.7 14.3 32 32 32s32-14.3 32-32V288h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 80c0 26.5 21.5 48 48 48H64v64h64V128h96v64h64V128h96v64h64V128h16c26.5 0 48-21.5 48-48V13.4C512 6 506 0 498.6 0c-1.7 0-3.4 .3-5 1l-49 19.6C425.7 28.1 405.5 32 385.2 32H126.8c-20.4 0-40.5-3.9-59.4-11.4L18.4 1c-1.6-.6-3.3-1-5-1C6 0 0 6 0 13.4V80zM64 288V480c0 17.7 14.3 32 32 32s32-14.3 32-32V288H384V480c0 17.7 14.3 32 32 32s32-14.3 32-32V288h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tornado\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f32a\"],\n        \"secondary\": [\"10f76f\"]\n      }\n    },\n    \"changes\": [\n      \"5.5.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cloud\",\n        \"cyclone\",\n        \"dorothy\",\n        \"landspout\",\n        \"tornado\",\n        \"toto\",\n        \"twister\",\n        \"vortext\",\n        \"waterspout\",\n        \"weather\",\n        \"whirlwind\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f76f\",\n    \"label\": \"Tornado\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 32V45.6C0 62.7 1.7 79.6 5 96H357.8c3.2-6.9 7.5-13.3 13-18.8l38.6-38.6c4.2-4.2 6.6-10 6.6-16C416 10.1 405.9 0 393.4 0H32C14.3 0 0 14.3 0 32zm352.2 96H13.6c12.2 35.9 32.3 68.7 58.8 96H412l-47.2-62.9c-7.3-9.7-11.6-21.2-12.6-33.1zm-226 138.2l116.4 68.5c8.2 4.8 15.8 10.7 22.5 17.3H445c2-9.8 3-19.9 3-30.1c0-23-5.3-45.5-15.3-65.9H110.2c5.2 3.6 10.5 7 16 10.2zM288 384c10.3 21.4 13.8 45.5 9.9 69l-5.9 35.7c-2 12.2 7.4 23.4 19.8 23.4c5.3 0 10.4-2.1 14.2-5.9l78.2-78.2c12.8-12.8 23.1-27.7 30.4-43.9H288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 32V45.6C0 62.7 1.7 79.6 5 96H357.8c3.2-6.9 7.5-13.3 13-18.8l38.6-38.6c4.2-4.2 6.6-10 6.6-16C416 10.1 405.9 0 393.4 0H32C14.3 0 0 14.3 0 32zm352.2 96H13.6c12.2 35.9 32.3 68.7 58.8 96H412l-47.2-62.9c-7.3-9.7-11.6-21.2-12.6-33.1zm-226 138.2l116.4 68.5c8.2 4.8 15.8 10.7 22.5 17.3H445c2-9.8 3-19.9 3-30.1c0-23-5.3-45.5-15.3-65.9H110.2c5.2 3.6 10.5 7 16 10.2zM288 384c10.3 21.4 13.8 45.5 9.9 69l-5.9 35.7c-2 12.2 7.4 23.4 19.8 23.4c5.3 0 10.4-2.1 14.2-5.9l78.2-78.2c12.8-12.8 23.1-27.7 30.4-43.9H288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tower-broadcast\": {\n    \"aliases\": {\n      \"names\": [\"broadcast-tower\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f519\"]\n      }\n    },\n    \"changes\": [\"5.0.13\", \"6.0.0-beta1\", \"6.2.0\", \"6.2.1\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airwaves\",\n        \"antenna\",\n        \"communication\",\n        \"emergency\",\n        \"radio\",\n        \"reception\",\n        \"waves\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f519\",\n    \"label\": \"Tower Broadcast\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M80.3 44C69.8 69.9 64 98.2 64 128s5.8 58.1 16.3 84c6.6 16.4-1.3 35-17.7 41.7s-35-1.3-41.7-17.7C7.4 202.6 0 166.1 0 128S7.4 53.4 20.9 20C27.6 3.6 46.2-4.3 62.6 2.3S86.9 27.6 80.3 44zM555.1 20C568.6 53.4 576 89.9 576 128s-7.4 74.6-20.9 108c-6.6 16.4-25.3 24.3-41.7 17.7S489.1 228.4 495.7 212c10.5-25.9 16.3-54.2 16.3-84s-5.8-58.1-16.3-84C489.1 27.6 497 9 513.4 2.3s35 1.3 41.7 17.7zM352 128c0 23.7-12.9 44.4-32 55.4V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V183.4c-19.1-11.1-32-31.7-32-55.4c0-35.3 28.7-64 64-64s64 28.7 64 64zM170.6 76.8C163.8 92.4 160 109.7 160 128s3.8 35.6 10.6 51.2c7.1 16.2-.3 35.1-16.5 42.1s-35.1-.3-42.1-16.5c-10.3-23.6-16-49.6-16-76.8s5.7-53.2 16-76.8c7.1-16.2 25.9-23.6 42.1-16.5s23.6 25.9 16.5 42.1zM464 51.2c10.3 23.6 16 49.6 16 76.8s-5.7 53.2-16 76.8c-7.1 16.2-25.9 23.6-42.1 16.5s-23.6-25.9-16.5-42.1c6.8-15.6 10.6-32.9 10.6-51.2s-3.8-35.6-10.6-51.2c-7.1-16.2 .3-35.1 16.5-42.1s35.1 .3 42.1 16.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M80.3 44C69.8 69.9 64 98.2 64 128s5.8 58.1 16.3 84c6.6 16.4-1.3 35-17.7 41.7s-35-1.3-41.7-17.7C7.4 202.6 0 166.1 0 128S7.4 53.4 20.9 20C27.6 3.6 46.2-4.3 62.6 2.3S86.9 27.6 80.3 44zM555.1 20C568.6 53.4 576 89.9 576 128s-7.4 74.6-20.9 108c-6.6 16.4-25.3 24.3-41.7 17.7S489.1 228.4 495.7 212c10.5-25.9 16.3-54.2 16.3-84s-5.8-58.1-16.3-84C489.1 27.6 497 9 513.4 2.3s35 1.3 41.7 17.7zM352 128c0 23.7-12.9 44.4-32 55.4V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V183.4c-19.1-11.1-32-31.7-32-55.4c0-35.3 28.7-64 64-64s64 28.7 64 64zM170.6 76.8C163.8 92.4 160 109.7 160 128s3.8 35.6 10.6 51.2c7.1 16.2-.3 35.1-16.5 42.1s-35.1-.3-42.1-16.5c-10.3-23.6-16-49.6-16-76.8s5.7-53.2 16-76.8c7.1-16.2 25.9-23.6 42.1-16.5s23.6 25.9 16.5 42.1zM464 51.2c10.3 23.6 16 49.6 16 76.8s-5.7 53.2-16 76.8c-7.1 16.2-25.9 23.6-42.1 16.5s-23.6-25.9-16.5-42.1c6.8-15.6 10.6-32.9 10.6-51.2s-3.8-35.6-10.6-51.2c-7.1-16.2 .3-35.1 16.5-42.1s35.1 .3 42.1 16.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tower-cell\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airwaves\",\n        \"antenna\",\n        \"communication\",\n        \"radio\",\n        \"reception\",\n        \"waves\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e585\",\n    \"label\": \"Tower Cell\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M62.6 2.3C46.2-4.3 27.6 3.6 20.9 20C7.4 53.4 0 89.9 0 128s7.4 74.6 20.9 108c6.6 16.4 25.3 24.3 41.7 17.7S86.9 228.4 80.3 212C69.8 186.1 64 157.8 64 128s5.8-58.1 16.3-84C86.9 27.6 79 9 62.6 2.3zm450.8 0C497 9 489.1 27.6 495.7 44C506.2 69.9 512 98.2 512 128s-5.8 58.1-16.3 84c-6.6 16.4 1.3 35 17.7 41.7s35-1.3 41.7-17.7c13.5-33.4 20.9-69.9 20.9-108s-7.4-74.6-20.9-108C548.4 3.6 529.8-4.3 513.4 2.3zM340.1 165.2c7.5-10.5 11.9-23.3 11.9-37.2c0-35.3-28.7-64-64-64s-64 28.7-64 64c0 13.9 4.4 26.7 11.9 37.2L98.9 466.8c-7.3 16.1-.2 35.1 15.9 42.4s35.1 .2 42.4-15.9L177.7 448H398.3l20.6 45.2c7.3 16.1 26.3 23.2 42.4 15.9s23.2-26.3 15.9-42.4L340.1 165.2zM369.2 384H206.8l14.5-32H354.7l14.5 32zM288 205.3L325.6 288H250.4L288 205.3zM163.3 73.6c5.3-12.1-.2-26.3-12.4-31.6s-26.3 .2-31.6 12.4C109.5 77 104 101.9 104 128s5.5 51 15.3 73.6c5.3 12.1 19.5 17.7 31.6 12.4s17.7-19.5 12.4-31.6C156 165.8 152 147.4 152 128s4-37.8 11.3-54.4zM456.7 54.4c-5.3-12.1-19.5-17.7-31.6-12.4s-17.7 19.5-12.4 31.6C420 90.2 424 108.6 424 128s-4 37.8-11.3 54.4c-5.3 12.1 .2 26.3 12.4 31.6s26.3-.2 31.6-12.4C466.5 179 472 154.1 472 128s-5.5-51-15.3-73.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M62.6 2.3C46.2-4.3 27.6 3.6 20.9 20C7.4 53.4 0 89.9 0 128s7.4 74.6 20.9 108c6.6 16.4 25.3 24.3 41.7 17.7S86.9 228.4 80.3 212C69.8 186.1 64 157.8 64 128s5.8-58.1 16.3-84C86.9 27.6 79 9 62.6 2.3zm450.8 0C497 9 489.1 27.6 495.7 44C506.2 69.9 512 98.2 512 128s-5.8 58.1-16.3 84c-6.6 16.4 1.3 35 17.7 41.7s35-1.3 41.7-17.7c13.5-33.4 20.9-69.9 20.9-108s-7.4-74.6-20.9-108C548.4 3.6 529.8-4.3 513.4 2.3zM340.1 165.2c7.5-10.5 11.9-23.3 11.9-37.2c0-35.3-28.7-64-64-64s-64 28.7-64 64c0 13.9 4.4 26.7 11.9 37.2L98.9 466.8c-7.3 16.1-.2 35.1 15.9 42.4s35.1 .2 42.4-15.9L177.7 448H398.3l20.6 45.2c7.3 16.1 26.3 23.2 42.4 15.9s23.2-26.3 15.9-42.4L340.1 165.2zM369.2 384H206.8l14.5-32H354.7l14.5 32zM288 205.3L325.6 288H250.4L288 205.3zM163.3 73.6c5.3-12.1-.2-26.3-12.4-31.6s-26.3 .2-31.6 12.4C109.5 77 104 101.9 104 128s5.5 51 15.3 73.6c5.3 12.1 19.5 17.7 31.6 12.4s17.7-19.5 12.4-31.6C156 165.8 152 147.4 152 128s4-37.8 11.3-54.4zM456.7 54.4c-5.3-12.1-19.5-17.7-31.6-12.4s-17.7 19.5-12.4 31.6C420 90.2 424 108.6 424 128s-4 37.8-11.3 54.4c-5.3 12.1 .2 26.3 12.4 31.6s26.3-.2 31.6-12.4C466.5 179 472 154.1 472 128s-5.5-51-15.3-73.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tower-observation\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"fire tower\", \"view\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e586\",\n    \"label\": \"Tower Observation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M241.7 3.4c9-4.5 19.6-4.5 28.6 0l160 80c15.8 7.9 22.2 27.1 14.3 42.9C439 137.5 427.7 144 416 144v80c0 17.7-14.3 32-32 32h-4.9l32 192H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H384.5c-.4 0-.8 0-1.1 0H128.6c-.4 0-.8 0-1.1 0H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l32-192H128c-17.7 0-32-14.3-32-32V144c-11.7 0-23-6.5-28.6-17.7c-7.9-15.8-1.5-35 14.3-42.9l160-80zM314.5 448L256 399.2 197.5 448h117zM197.8 256l-4.7 28.3L256 336.8l62.9-52.5L314.2 256H197.8zm-13.9 83.2l-11.2 67L218.5 368l-34.6-28.8zM293.5 368l45.8 38.1-11.2-67L293.5 368zM176 128c-8.8 0-16 7.2-16 16s7.2 16 16 16H336c8.8 0 16-7.2 16-16s-7.2-16-16-16H176z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M241.7 3.4c9-4.5 19.6-4.5 28.6 0l160 80c15.8 7.9 22.2 27.1 14.3 42.9C439 137.5 427.7 144 416 144v80c0 17.7-14.3 32-32 32h-4.9l32 192H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H384.5c-.4 0-.8 0-1.1 0H128.6c-.4 0-.8 0-1.1 0H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h68.9l32-192H128c-17.7 0-32-14.3-32-32V144c-11.7 0-23-6.5-28.6-17.7c-7.9-15.8-1.5-35 14.3-42.9l160-80zM314.5 448L256 399.2 197.5 448h117zM197.8 256l-4.7 28.3L256 336.8l62.9-52.5L314.2 256H197.8zm-13.9 83.2l-11.2 67L218.5 368l-34.6-28.8zM293.5 368l45.8 38.1-11.2-67L293.5 368zM176 128c-8.8 0-16 7.2-16 16s7.2 16 16 16H336c8.8 0 16-7.2 16-16s-7.2-16-16-16H176z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tractor\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f69c\"],\n        \"secondary\": [\"10f722\"]\n      }\n    },\n    \"changes\": [\n      \"5.4.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agriculture\", \"farm\", \"tractor\", \"vehicle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f722\",\n    \"label\": \"Tractor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 64c0-35.3 28.7-64 64-64H266.3c26.2 0 49.7 15.9 59.4 40.2L373.7 160H480V126.2c0-24.8 5.8-49.3 16.9-71.6l2.5-5c7.9-15.8 27.1-22.2 42.9-14.3s22.2 27.1 14.3 42.9l-2.5 5c-6.7 13.3-10.1 28-10.1 42.9V160h56c22.1 0 40 17.9 40 40v45.4c0 16.5-8.5 31.9-22.6 40.7l-43.3 27.1c-14.2-5.9-29.8-9.2-46.1-9.2c-39.3 0-74.1 18.9-96 48H352c0 17.7-14.3 32-32 32h-8.2c-1.7 4.8-3.7 9.5-5.8 14.1l5.8 5.8c12.5 12.5 12.5 32.8 0 45.3l-22.6 22.6c-12.5 12.5-32.8 12.5-45.3 0l-5.8-5.8c-4.6 2.2-9.3 4.1-14.1 5.8V480c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32v-8.2c-4.8-1.7-9.5-3.7-14.1-5.8l-5.8 5.8c-12.5 12.5-32.8 12.5-45.3 0L40.2 449.1c-12.5-12.5-12.5-32.8 0-45.3l5.8-5.8c-2.2-4.6-4.1-9.3-5.8-14.1H32c-17.7 0-32-14.3-32-32V320c0-17.7 14.3-32 32-32h8.2c1.7-4.8 3.7-9.5 5.8-14.1l-5.8-5.8c-12.5-12.5-12.5-32.8 0-45.3l22.6-22.6c9-9 21.9-11.5 33.1-7.6V192 160 64zm170.3 0H160v96h32H304.7L266.3 64zM176 256a80 80 0 1 0 0 160 80 80 0 1 0 0-160zM528 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0 64c-48.6 0-88-39.4-88-88c0-29.8 14.8-56.1 37.4-72c14.3-10.1 31.8-16 50.6-16c2.7 0 5.3 .1 7.9 .3c44.9 4 80.1 41.7 80.1 87.7c0 48.6-39.4 88-88 88z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 64c0-35.3 28.7-64 64-64H266.3c26.2 0 49.7 15.9 59.4 40.2L373.7 160H480V126.2c0-24.8 5.8-49.3 16.9-71.6l2.5-5c7.9-15.8 27.1-22.2 42.9-14.3s22.2 27.1 14.3 42.9l-2.5 5c-6.7 13.3-10.1 28-10.1 42.9V160h56c22.1 0 40 17.9 40 40v45.4c0 16.5-8.5 31.9-22.6 40.7l-43.3 27.1c-14.2-5.9-29.8-9.2-46.1-9.2c-39.3 0-74.1 18.9-96 48H352c0 17.7-14.3 32-32 32h-8.2c-1.7 4.8-3.7 9.5-5.8 14.1l5.8 5.8c12.5 12.5 12.5 32.8 0 45.3l-22.6 22.6c-12.5 12.5-32.8 12.5-45.3 0l-5.8-5.8c-4.6 2.2-9.3 4.1-14.1 5.8V480c0 17.7-14.3 32-32 32H160c-17.7 0-32-14.3-32-32v-8.2c-4.8-1.7-9.5-3.7-14.1-5.8l-5.8 5.8c-12.5 12.5-32.8 12.5-45.3 0L40.2 449.1c-12.5-12.5-12.5-32.8 0-45.3l5.8-5.8c-2.2-4.6-4.1-9.3-5.8-14.1H32c-17.7 0-32-14.3-32-32V320c0-17.7 14.3-32 32-32h8.2c1.7-4.8 3.7-9.5 5.8-14.1l-5.8-5.8c-12.5-12.5-12.5-32.8 0-45.3l22.6-22.6c9-9 21.9-11.5 33.1-7.6V192 160 64zm170.3 0H160v96h32H304.7L266.3 64zM176 256a80 80 0 1 0 0 160 80 80 0 1 0 0-160zM528 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48zm0 64c-48.6 0-88-39.4-88-88c0-29.8 14.8-56.1 37.4-72c14.3-10.1 31.8-16 50.6-16c2.7 0 5.3 .1 7.9 .3c44.9 4 80.1 41.7 80.1 87.7c0 48.6-39.4 88-88 88z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trade-federation\": {\n    \"changes\": [\"5.0.12\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f513\",\n    \"label\": \"Trade Federation\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8.8c-137 0-248 111-248 248s111 248 248 248 248-111 248-248-111-248-248-248zm0 482.8c-129.7 0-234.8-105.1-234.8-234.8S118.3 22 248 22s234.8 105.1 234.8 234.8S377.7 491.6 248 491.6zm155.1-328.5v-46.8H209.3V198H54.2l36.7 46h117.7v196.8h48.8V245h83.3v-47h-83.3v-34.8h145.7zm-73.3 45.1v23.9h-82.9v197.4h-26.8V232.1H96.3l-20.1-23.9h143.9v-80.6h171.8V152h-145v56.2zm-161.3-69l-12.4-20.7 2.1 23.8-23.5 5.4 23.3 5.4-2.1 24 12.3-20.5 22.2 9.5-15.7-18.1 15.8-18.1zm-29.6-19.7l9.3-11.5-12.7 5.9-8-12.4 1.7 13.9-14.3 3.8 13.7 2.7-.8 14.7 6.8-12.2 13.8 5.3zm165.4 145.2l-13.1 5.6-7.3-12.2 1.3 14.2-13.9 3.2 13.9 3.2-1.2 14.2 7.3-12.2 13.1 5.5-9.4-10.7zm106.9-77.2l-20.9 9.1-12-19.6 2.2 22.7-22.3 5.4 22.2 4.9-1.8 22.9 11.5-19.6 21.2 8.8-15.1-17zM248 29.9c-125.3 0-226.9 101.6-226.9 226.9S122.7 483.7 248 483.7s226.9-101.6 226.9-226.9S373.3 29.9 248 29.9zM342.6 196v51h-83.3v195.7h-52.7V245.9H89.9l-40-49.9h157.4v-81.6h197.8v50.7H259.4V196zM248 43.2c60.3 0 114.8 25 153.6 65.2H202.5V190H45.1C73.1 104.8 153.4 43.2 248 43.2zm0 427.1c-117.9 0-213.6-95.6-213.6-213.5 0-21.2 3.1-41.8 8.9-61.1L87.1 252h114.7v196.8h64.6V253h83.3v-62.7h-83.2v-19.2h145.6v-50.8c30.8 37 49.3 84.6 49.3 136.5.1 117.9-95.5 213.5-213.4 213.5zM178.8 275l-11-21.4 1.7 24.5-23.7 3.9 23.8 5.9-3.7 23.8 13-20.9 21.5 10.8-15.8-18.8 16.9-17.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"trademark\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2122\"],\n        \"secondary\": [\"10f25c\"]\n      }\n    },\n    \"changes\": [\"4.4.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"copyright\",\n        \"mark\",\n        \"register\",\n        \"symbol\",\n        \"tm\",\n        \"trade mark\",\n        \"trademark\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f25c\",\n    \"label\": \"Trademark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M345.6 108.8c-8.3-11-22.7-15.5-35.7-11.2S288 114.2 288 128V384c0 17.7 14.3 32 32 32s32-14.3 32-32V224l86.4 115.2c6 8.1 15.5 12.8 25.6 12.8s19.6-4.7 25.6-12.8L576 224V384c0 17.7 14.3 32 32 32s32-14.3 32-32V128c0-13.8-8.8-26-21.9-30.4s-27.5 .1-35.7 11.2L464 266.7 345.6 108.8zM0 128c0 17.7 14.3 32 32 32H96V384c0 17.7 14.3 32 32 32s32-14.3 32-32V160h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32C14.3 96 0 110.3 0 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M345.6 108.8c-8.3-11-22.7-15.5-35.7-11.2S288 114.2 288 128V384c0 17.7 14.3 32 32 32s32-14.3 32-32V224l86.4 115.2c6 8.1 15.5 12.8 25.6 12.8s19.6-4.7 25.6-12.8L576 224V384c0 17.7 14.3 32 32 32s32-14.3 32-32V128c0-13.8-8.8-26-21.9-30.4s-27.5 .1-35.7 11.2L464 266.7 345.6 108.8zM0 128c0 17.7 14.3 32 32 32H96V384c0 17.7 14.3 32 32 32s32-14.3 32-32V160h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32C14.3 96 0 110.3 0 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"traffic-light\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6a6\"],\n        \"secondary\": [\"10f637\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"direction\",\n        \"light\",\n        \"road\",\n        \"signal\",\n        \"traffic\",\n        \"travel\",\n        \"vertical traffic light\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f637\",\n    \"label\": \"Traffic Light\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767488,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V352c0 88.4 71.6 160 160 160s160-71.6 160-160V64c0-35.3-28.7-64-64-64H64zm96 416a48 48 0 1 1 0-96 48 48 0 1 1 0 96zm48-176a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm-48-80a48 48 0 1 1 0-96 48 48 0 1 1 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trailer\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e041\"]\n      }\n    },\n    \"changes\": [\n      \"5.12.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"carry\", \"haul\", \"moving\", \"travel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e041\",\n    \"label\": \"Trailer\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 32C21.5 32 0 53.5 0 80V336c0 26.5 21.5 48 48 48H65.1c7.8-54.3 54.4-96 110.9-96s103.1 41.7 110.9 96H488h8H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H544V80c0-26.5-21.5-48-48-48H48zM80 96c8.8 0 16 7.2 16 16l0 131.2c-11.4 5.9-22.2 12.9-32 21V112c0-8.8 7.2-16 16-16zm96 128c-5.4 0-10.7 .2-16 .7L160 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112.7c-5.3-.5-10.6-.7-16-.7zm80 19.2L256 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 152.2c-9.8-8.1-20.6-15.2-32-21zM368 96c8.8 0 16 7.2 16 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16zm112 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16s16 7.2 16 16zM176 480a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-112a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 32C21.5 32 0 53.5 0 80V336c0 26.5 21.5 48 48 48H65.1c7.8-54.3 54.4-96 110.9-96s103.1 41.7 110.9 96H488h8H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H544V80c0-26.5-21.5-48-48-48H48zM80 96c8.8 0 16 7.2 16 16l0 131.2c-11.4 5.9-22.2 12.9-32 21V112c0-8.8 7.2-16 16-16zm96 128c-5.4 0-10.7 .2-16 .7L160 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 112.7c-5.3-.5-10.6-.7-16-.7zm80 19.2L256 112c0-8.8 7.2-16 16-16s16 7.2 16 16l0 152.2c-9.8-8.1-20.6-15.2-32-21zM368 96c8.8 0 16 7.2 16 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16zm112 16l0 192c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-192c0-8.8 7.2-16 16-16s16 7.2 16 16zM176 480a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-112a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"train\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f686\"],\n        \"secondary\": [\"10f238\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bullet\", \"commute\", \"locomotive\", \"railway\", \"subway\", \"train\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f238\",\n    \"label\": \"Train\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 0C43 0 0 43 0 96V352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512H82.7c8.5 0 16.6-3.4 22.6-9.4L160 448H288l54.6 54.6c6 6 14.1 9.4 22.6 9.4H405c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9V96c0-53-43-96-96-96H96zM64 96c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V96zM224 288a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 0C43 0 0 43 0 96V352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512H82.7c8.5 0 16.6-3.4 22.6-9.4L160 448H288l54.6 54.6c6 6 14.1 9.4 22.6 9.4H405c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9V96c0-53-43-96-96-96H96zM64 96c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V96zM224 288a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"train-subway\": {\n    \"aliases\": {\n      \"names\": [\"subway\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f239\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"machine\", \"railway\", \"train\", \"transportation\", \"vehicle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f239\",\n    \"label\": \"Train Subway\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 0C43 0 0 43 0 96V352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512H82.7c8.5 0 16.6-3.4 22.6-9.4L160 448H288l54.6 54.6c6 6 14.1 9.4 22.6 9.4H405c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9V96c0-53-43-96-96-96H96zM64 128c0-17.7 14.3-32 32-32h80c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM272 96h80c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H272c-17.7 0-32-14.3-32-32V128c0-17.7 14.3-32 32-32zM64 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 0C43 0 0 43 0 96V352c0 48 35.2 87.7 81.1 94.9l-46 46C28.1 499.9 33.1 512 43 512H82.7c8.5 0 16.6-3.4 22.6-9.4L160 448H288l54.6 54.6c6 6 14.1 9.4 22.6 9.4H405c10 0 15-12.1 7.9-19.1l-46-46c46-7.1 81.1-46.9 81.1-94.9V96c0-53-43-96-96-96H96zM64 128c0-17.7 14.3-32 32-32h80c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM272 96h80c17.7 0 32 14.3 32 32v96c0 17.7-14.3 32-32 32H272c-17.7 0-32-14.3-32-32V128c0-17.7 14.3-32 32-32zM64 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm288-32a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"train-tram\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f68a\"]\n      }\n    },\n    \"changes\": [\n      \"5.6.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"crossing\",\n        \"machine\",\n        \"mountains\",\n        \"seasonal\",\n        \"tram\",\n        \"transportation\",\n        \"trolleybus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e5b4\",\n    \"label\": \"Train Tram\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M86.8 48c-12.2 0-23.6 5.5-31.2 15L42.7 79C34.5 89.3 19.4 91 9 82.7S-3 59.4 5.3 49L18 33C34.7 12.2 60 0 86.8 0H361.2c26.7 0 52 12.2 68.7 33l12.8 16c8.3 10.4 6.6 25.5-3.8 33.7s-25.5 6.6-33.7-3.7L392.5 63c-7.6-9.5-19.1-15-31.2-15H248V96h40c53 0 96 43 96 96V352c0 30.6-14.3 57.8-36.6 75.4l65.5 65.5c7.1 7.1 2.1 19.1-7.9 19.1H365.3c-8.5 0-16.6-3.4-22.6-9.4L288 448H160l-54.6 54.6c-6 6-14.1 9.4-22.6 9.4H43c-10 0-15-12.1-7.9-19.1l65.5-65.5C78.3 409.8 64 382.6 64 352V192c0-53 43-96 96-96h40V48H86.8zM160 160c-17.7 0-32 14.3-32 32v32c0 17.7 14.3 32 32 32H288c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32H160zm32 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M86.8 48c-12.2 0-23.6 5.5-31.2 15L42.7 79C34.5 89.3 19.4 91 9 82.7S-3 59.4 5.3 49L18 33C34.7 12.2 60 0 86.8 0H361.2c26.7 0 52 12.2 68.7 33l12.8 16c8.3 10.4 6.6 25.5-3.8 33.7s-25.5 6.6-33.7-3.7L392.5 63c-7.6-9.5-19.1-15-31.2-15H248V96h40c53 0 96 43 96 96V352c0 30.6-14.3 57.8-36.6 75.4l65.5 65.5c7.1 7.1 2.1 19.1-7.9 19.1H365.3c-8.5 0-16.6-3.4-22.6-9.4L288 448H160l-54.6 54.6c-6 6-14.1 9.4-22.6 9.4H43c-10 0-15-12.1-7.9-19.1l65.5-65.5C78.3 409.8 64 382.6 64 352V192c0-53 43-96 96-96h40V48H86.8zM160 160c-17.7 0-32 14.3-32 32v32c0 17.7 14.3 32 32 32H288c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32H160zm32 192a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm96 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"transgender\": {\n    \"aliases\": {\n      \"names\": [\"transgender-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"26a7\"],\n        \"secondary\": [\"10f225\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"female\",\n        \"gender\",\n        \"intersex\",\n        \"male\",\n        \"transgender\",\n        \"transgender symbol\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f225\",\n    \"label\": \"Transgender\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M112 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-31 31L112 78.1l7-7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-7 7 15.2 15.2C187.7 107.6 220.5 96 256 96s68.3 11.6 94.9 31.2l68.8-68.8-31-31c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9h96c8.8 0 16 7.2 16 16v96c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-31-31-68.8 68.8C404.4 187.7 416 220.5 416 256c0 80.2-59 146.6-136 158.2V432h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v8c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h16V414.2C155 402.6 96 336.2 96 256c0-35.5 11.6-68.3 31.2-94.9L112 145.9l-7 7c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l7-7L58.3 92.3l-31 31c-4.6 4.6-11.5 5.9-17.4 3.5S0 118.5 0 112V16C0 7.2 7.2 0 16 0h96zM352 256a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M112 0c6.5 0 12.3 3.9 14.8 9.9s1.1 12.9-3.5 17.4l-31 31L112 78.1l7-7c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-7 7 15.2 15.2C187.7 107.6 220.5 96 256 96s68.3 11.6 94.9 31.2l68.8-68.8-31-31c-4.6-4.6-5.9-11.5-3.5-17.4s8.3-9.9 14.8-9.9h96c8.8 0 16 7.2 16 16v96c0 6.5-3.9 12.3-9.9 14.8s-12.9 1.1-17.4-3.5l-31-31-68.8 68.8C404.4 187.7 416 220.5 416 256c0 80.2-59 146.6-136 158.2V432h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H280v8c0 13.3-10.7 24-24 24s-24-10.7-24-24v-8H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h16V414.2C155 402.6 96 336.2 96 256c0-35.5 11.6-68.3 31.2-94.9L112 145.9l-7 7c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l7-7L58.3 92.3l-31 31c-4.6 4.6-11.5 5.9-17.4 3.5S0 118.5 0 112V16C0 7.2 7.2 0 16 0h96zM352 256a96 96 0 1 0 -192 0 96 96 0 1 0 192 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f1f8\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"delete\", \"garbage\", \"hide\", \"remove\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1f8\",\n    \"label\": \"Trash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trash-arrow-up\": {\n    \"aliases\": {\n      \"names\": [\"trash-restore\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f829\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"back\",\n        \"control z\",\n        \"delete\",\n        \"garbage\",\n        \"hide\",\n        \"oops\",\n        \"remove\",\n        \"undo\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f829\",\n    \"label\": \"Trash Arrow Up\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128H416L394.8 467c-1.6 25.3-22.6 45-47.9 45H101.1c-25.3 0-46.3-19.7-47.9-45L32 128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V408c0 13.3 10.7 24 24 24s24-10.7 24-24V273.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128H416L394.8 467c-1.6 25.3-22.6 45-47.9 45H101.1c-25.3 0-46.3-19.7-47.9-45L32 128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V408c0 13.3 10.7 24 24 24s24-10.7 24-24V273.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trash-can\": {\n    \"aliases\": {\n      \"names\": [\"trash-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"f014\"],\n        \"secondary\": [\"10f2ed\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"delete\", \"garbage\", \"hide\", \"remove\", \"trash-o\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2ed\",\n    \"label\": \"Trash Can\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M135.2 17.7C140.6 6.8 151.7 0 163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm96 64c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M135.2 17.7C140.6 6.8 151.7 0 163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm96 64c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16zm96 0c-8.8 0-16 7.2-16 16V432c0 8.8 7.2 16 16 16s16-7.2 16-16V208c0-8.8-7.2-16-16-16z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M170.5 51.6L151.5 80h145l-19-28.4c-1.5-2.2-4-3.6-6.7-3.6H177.1c-2.7 0-5.2 1.3-6.7 3.6zm147-26.6L354.2 80H368h48 8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8V432c0 44.2-35.8 80-80 80H112c-44.2 0-80-35.8-80-80V128H24c-13.3 0-24-10.7-24-24S10.7 80 24 80h8H80 93.8l36.7-55.1C140.9 9.4 158.4 0 177.1 0h93.7c18.7 0 36.2 9.4 46.6 24.9zM80 128V432c0 17.7 14.3 32 32 32H336c17.7 0 32-14.3 32-32V128H80zm80 64V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M170.5 51.6L151.5 80h145l-19-28.4c-1.5-2.2-4-3.6-6.7-3.6H177.1c-2.7 0-5.2 1.3-6.7 3.6zm147-26.6L354.2 80H368h48 8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8V432c0 44.2-35.8 80-80 80H112c-44.2 0-80-35.8-80-80V128H24c-13.3 0-24-10.7-24-24S10.7 80 24 80h8H80 93.8l36.7-55.1C140.9 9.4 158.4 0 177.1 0h93.7c18.7 0 36.2 9.4 46.6 24.9zM80 128V432c0 17.7 14.3 32 32 32H336c17.7 0 32-14.3 32-32V128H80zm80 64V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"trash-can-arrow-up\": {\n    \"aliases\": {\n      \"names\": [\"trash-restore-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f82a\"]\n      }\n    },\n    \"changes\": [\n      \"5.7.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"back\",\n        \"control z\",\n        \"delete\",\n        \"garbage\",\n        \"hide\",\n        \"oops\",\n        \"remove\",\n        \"undo\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f82a\",\n    \"label\": \"Trash Can Arrow Up\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V408c0 13.3 10.7 24 24 24s24-10.7 24-24V273.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M163.8 0H284.2c12.1 0 23.2 6.8 28.6 17.7L320 32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32h96l7.2-14.3C140.6 6.8 151.7 0 163.8 0zM32 128H416V448c0 35.3-28.7 64-64 64H96c-35.3 0-64-28.7-64-64V128zm192 64c-6.4 0-12.5 2.5-17 7l-80 80c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l39-39V408c0 13.3 10.7 24 24 24s24-10.7 24-24V273.9l39 39c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-80-80c-4.5-4.5-10.6-7-17-7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tree\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f332\"],\n        \"secondary\": [\"10f1bb\"]\n      }\n    },\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bark\",\n        \"evergreen tree\",\n        \"fall\",\n        \"flora\",\n        \"forest\",\n        \"nature\",\n        \"plant\",\n        \"seasonal\",\n        \"tree\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1bb\",\n    \"label\": \"Tree\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208H104L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320H80L5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5H192v32c0 17.7 14.3 32 32 32s32-14.3 32-32V448H424.5c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320h33.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208h24.9c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208H104L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320H80L5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5H192v32c0 17.7 14.3 32 32 32s32-14.3 32-32V448H424.5c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320h33.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208h24.9c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tree-city\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"city\", \"urban\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e587\",\n    \"label\": \"Tree City\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M288 48c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48V192h40V120c0-13.3 10.7-24 24-24s24 10.7 24 24v72h24c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H432 336c-26.5 0-48-21.5-48-48V48zm64 32v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H368zM352 272v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H528zM512 368v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H528c-8.8 0-16 7.2-16 16zM224 160c0 6-1 11-2 16c20 14 34 38 34 64c0 45-36 80-80 80H160V480c0 18-15 32-32 32c-18 0-32-14-32-32V320H80c-45 0-80-35-80-80c0-26 13-50 33-64c-1-5-1-10-1-16c0-53 42-96 96-96c53 0 96 43 96 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M288 48c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48V192h40V120c0-13.3 10.7-24 24-24s24 10.7 24 24v72h24c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H432 336c-26.5 0-48-21.5-48-48V48zm64 32v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm16 80c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V176c0-8.8-7.2-16-16-16H368zM352 272v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H368c-8.8 0-16 7.2-16 16zm176-16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V272c0-8.8-7.2-16-16-16H528zM512 368v32c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16H528c-8.8 0-16 7.2-16 16zM224 160c0 6-1 11-2 16c20 14 34 38 34 64c0 45-36 80-80 80H160V480c0 18-15 32-32 32c-18 0-32-14-32-32V320H80c-45 0-80-35-80-80c0-26 13-50 33-64c-1-5-1-10-1-16c0-53 42-96 96-96c53 0 96 43 96 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trello\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"atlassian\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f181\",\n    \"label\": \"Trello\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M392.3 32H56.1C25.1 32 0 57.1 0 88c-.1 0 0-4 0 336 0 30.9 25.1 56 56 56h336.2c30.8-.2 55.7-25.2 55.7-56V88c.1-30.8-24.8-55.8-55.6-56zM197 371.3c-.2 14.7-12.1 26.6-26.9 26.6H87.4c-14.8.1-26.9-11.8-27-26.6V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v254.2zm193.1-112c0 14.8-12 26.9-26.9 26.9h-81c-14.8 0-26.9-12-26.9-26.9V117.2c0-14.8 12-26.9 26.8-26.9h81.1c14.8 0 26.9 12 26.9 26.9v142.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"triangle-exclamation\": {\n    \"aliases\": {\n      \"names\": [\"exclamation-triangle\", \"warning\"],\n      \"unicodes\": {\n        \"composite\": [\"26a0\"],\n        \"secondary\": [\"10f071\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.6.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alert\",\n        \"danger\",\n        \"error\",\n        \"important\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"problem\",\n        \"warnin\",\n        \"warning\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f071\",\n    \"label\": \"Triangle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trophy\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3c6\"],\n        \"secondary\": [\"10f091\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"achievement\",\n        \"award\",\n        \"cup\",\n        \"game\",\n        \"prize\",\n        \"trophy\",\n        \"winner\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f091\",\n    \"label\": \"Trophy\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M400 0H176c-26.5 0-48.1 21.8-47.1 48.2c.2 5.3 .4 10.6 .7 15.8H24C10.7 64 0 74.7 0 88c0 92.6 33.5 157 78.5 200.7c44.3 43.1 98.3 64.8 138.1 75.8c23.4 6.5 39.4 26 39.4 45.6c0 20.9-17 37.9-37.9 37.9H192c-17.7 0-32 14.3-32 32s14.3 32 32 32H384c17.7 0 32-14.3 32-32s-14.3-32-32-32H357.9C337 448 320 431 320 410.1c0-19.6 15.9-39.2 39.4-45.6c39.9-11 93.9-32.7 138.2-75.8C542.5 245 576 180.6 576 88c0-13.3-10.7-24-24-24H446.4c.3-5.2 .5-10.4 .7-15.8C448.1 21.8 426.5 0 400 0zM48.9 112h84.4c9.1 90.1 29.2 150.3 51.9 190.6c-24.9-11-50.8-26.5-73.2-48.3c-32-31.1-58-76-63-142.3zM464.1 254.3c-22.4 21.8-48.3 37.3-73.2 48.3c22.7-40.3 42.8-100.5 51.9-190.6h84.4c-5.1 66.3-31.1 111.2-63 142.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M400 0H176c-26.5 0-48.1 21.8-47.1 48.2c.2 5.3 .4 10.6 .7 15.8H24C10.7 64 0 74.7 0 88c0 92.6 33.5 157 78.5 200.7c44.3 43.1 98.3 64.8 138.1 75.8c23.4 6.5 39.4 26 39.4 45.6c0 20.9-17 37.9-37.9 37.9H192c-17.7 0-32 14.3-32 32s14.3 32 32 32H384c17.7 0 32-14.3 32-32s-14.3-32-32-32H357.9C337 448 320 431 320 410.1c0-19.6 15.9-39.2 39.4-45.6c39.9-11 93.9-32.7 138.2-75.8C542.5 245 576 180.6 576 88c0-13.3-10.7-24-24-24H446.4c.3-5.2 .5-10.4 .7-15.8C448.1 21.8 426.5 0 400 0zM48.9 112h84.4c9.1 90.1 29.2 150.3 51.9 190.6c-24.9-11-50.8-26.5-73.2-48.3c-32-31.1-58-76-63-142.3zM464.1 254.3c-22.4 21.8-48.3 37.3-73.2 48.3c22.7-40.3 42.8-100.5 51.9-190.6h84.4c-5.1 66.3-31.1 111.2-63 142.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trowel\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"build\", \"construction\", \"tool\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e589\",\n    \"label\": \"Trowel\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767441,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M343.9 213.4L245.3 312l65.4 65.4c7.9 7.9 11.1 19.4 8.4 30.3s-10.8 19.6-21.5 22.9l-256 80c-11.4 3.5-23.8 .5-32.2-7.9S-2.1 481.8 1.5 470.5l80-256c3.3-10.7 12-18.9 22.9-21.5s22.4 .5 30.3 8.4L200 266.7l98.6-98.6c-14.3-14.6-14.2-38 .3-52.5l95.4-95.4c26.9-26.9 70.5-26.9 97.5 0s26.9 70.5 0 97.5l-95.4 95.4c-14.5 14.5-37.9 14.6-52.5 .3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M343.9 213.4L245.3 312l65.4 65.4c7.9 7.9 11.1 19.4 8.4 30.3s-10.8 19.6-21.5 22.9l-256 80c-11.4 3.5-23.8 .5-32.2-7.9S-2.1 481.8 1.5 470.5l80-256c3.3-10.7 12-18.9 22.9-21.5s22.4 .5 30.3 8.4L200 266.7l98.6-98.6c-14.3-14.6-14.2-38 .3-52.5l95.4-95.4c26.9-26.9 70.5-26.9 97.5 0s26.9 70.5 0 97.5l-95.4 95.4c-14.5 14.5-37.9 14.6-52.5 .3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"trowel-bricks\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"build\", \"construction\", \"reconstruction\", \"tool\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e58a\",\n    \"label\": \"Trowel Bricks\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767444,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M240.8 4.8C250.3 10.6 256 20.9 256 32v72h89c3.6-13.8 16.1-24 31-24h88c26.5 0 48 21.5 48 48s-21.5 48-48 48H376c-14.9 0-27.4-10.2-31-24H256v72c0 11.1-5.7 21.4-15.2 27.2s-21.2 6.4-31.1 1.4l-192-96C6.8 151.2 0 140.1 0 128s6.8-23.2 17.7-28.6l192-96c9.9-5 21.7-4.4 31.1 1.4zM288 256c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H320c-17.7 0-32-14.3-32-32V256zM32 384h96c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32zm192 0H480c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M240.8 4.8C250.3 10.6 256 20.9 256 32v72h89c3.6-13.8 16.1-24 31-24h88c26.5 0 48 21.5 48 48s-21.5 48-48 48H376c-14.9 0-27.4-10.2-31-24H256v72c0 11.1-5.7 21.4-15.2 27.2s-21.2 6.4-31.1 1.4l-192-96C6.8 151.2 0 140.1 0 128s6.8-23.2 17.7-28.6l192-96c9.9-5 21.7-4.4 31.1 1.4zM288 256c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H320c-17.7 0-32-14.3-32-32V256zM32 384h96c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32zm192 0H480c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H224c-17.7 0-32-14.3-32-32V416c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f69a\", \"26df\"],\n        \"secondary\": [\"10f0d1\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Black Truck\",\n        \"cargo\",\n        \"delivery\",\n        \"delivery truck\",\n        \"shipping\",\n        \"truck\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0d1\",\n    \"label\": \"Truck\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 0C21.5 0 0 21.5 0 48V368c0 26.5 21.5 48 48 48H64c0 53 43 96 96 96s96-43 96-96H384c0 53 43 96 96 96s96-43 96-96h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V288 256 237.3c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7H416V48c0-26.5-21.5-48-48-48H48zM416 160h50.7L544 237.3V256H416V160zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 0C21.5 0 0 21.5 0 48V368c0 26.5 21.5 48 48 48H64c0 53 43 96 96 96s96-43 96-96H384c0 53 43 96 96 96s96-43 96-96h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V288 256 237.3c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7H416V48c0-26.5-21.5-48-48-48H48zM416 160h50.7L544 237.3V256H416V160zM112 416a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-arrow-right\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"access\", \"fast\", \"shipping\", \"transport\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e58b\",\n    \"label\": \"Truck Arrow Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H368c26.5 0 48 21.5 48 48V96h50.7c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3V256v32 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V48zM416 256H544V237.3L466.7 160H416v96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM257 95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39H96c-13.3 0-24 10.7-24 24s10.7 24 24 24H262.1l-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9L257 95z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H368c26.5 0 48 21.5 48 48V96h50.7c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3V256v32 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V48zM416 256H544V237.3L466.7 160H416v96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM257 95c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39H96c-13.3 0-24 10.7-24 24s10.7 24 24 24H262.1l-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9L257 95z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-droplet\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"thirst\", \"truck\", \"water\", \"water supply\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e58c\",\n    \"label\": \"Truck Droplet\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H368c26.5 0 48 21.5 48 48V96h50.7c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3V256v32 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V48zM416 256H544V237.3L466.7 160H416v96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM208 272c39.8 0 72-29.6 72-66c0-27-39.4-82.9-59.9-110.3c-6.1-8.2-18.1-8.2-24.2 0C175.4 123 136 179 136 206c0 36.5 32.2 66 72 66z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H368c26.5 0 48 21.5 48 48V96h50.7c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3V256v32 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V48zM416 256H544V237.3L466.7 160H416v96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM208 272c39.8 0 72-29.6 72-66c0-27-39.4-82.9-59.9-110.3c-6.1-8.2-18.1-8.2-24.2 0C175.4 123 136 179 136 206c0 36.5 32.2 66 72 66z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-fast\": {\n    \"aliases\": {\n      \"names\": [\"shipping-fast\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f48b\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"express\", \"fedex\", \"mail\", \"overnight\", \"package\", \"ups\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f48b\",\n    \"label\": \"Truck Fast\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M112 0C85.5 0 64 21.5 64 48V96H16c-8.8 0-16 7.2-16 16s7.2 16 16 16H64 272c8.8 0 16 7.2 16 16s-7.2 16-16 16H64 48c-8.8 0-16 7.2-16 16s7.2 16 16 16H64 240c8.8 0 16 7.2 16 16s-7.2 16-16 16H64 16c-8.8 0-16 7.2-16 16s7.2 16 16 16H64 208c8.8 0 16 7.2 16 16s-7.2 16-16 16H64V416c0 53 43 96 96 96s96-43 96-96H384c0 53 43 96 96 96s96-43 96-96h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V288 256 237.3c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7H416V48c0-26.5-21.5-48-48-48H112zM544 237.3V256H416V160h50.7L544 237.3zM160 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm272 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M112 0C85.5 0 64 21.5 64 48V96H16c-8.8 0-16 7.2-16 16s7.2 16 16 16H64 272c8.8 0 16 7.2 16 16s-7.2 16-16 16H64 48c-8.8 0-16 7.2-16 16s7.2 16 16 16H64 240c8.8 0 16 7.2 16 16s-7.2 16-16 16H64 16c-8.8 0-16 7.2-16 16s7.2 16 16 16H64 208c8.8 0 16 7.2 16 16s-7.2 16-16 16H64V416c0 53 43 96 96 96s96-43 96-96H384c0 53 43 96 96 96s96-43 96-96h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V288 256 237.3c0-17-6.7-33.3-18.7-45.3L512 114.7c-12-12-28.3-18.7-45.3-18.7H416V48c0-26.5-21.5-48-48-48H112zM544 237.3V256H416V160h50.7L544 237.3zM160 368a48 48 0 1 1 0 96 48 48 0 1 1 0-96zm272 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-field\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"supplies\", \"truck\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e58d\",\n    \"label\": \"Truck Field\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 96c0-35.3 28.7-64 64-64H320c23.7 0 44.4 12.9 55.4 32h51.8c25.3 0 48.2 14.9 58.5 38l52.8 118.8c.5 1.1 .9 2.1 1.3 3.2H544c35.3 0 64 28.7 64 64v32c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V288c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32V96zM384 224h85.9l-42.7-96H384v96zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 96c0-35.3 28.7-64 64-64H320c23.7 0 44.4 12.9 55.4 32h51.8c25.3 0 48.2 14.9 58.5 38l52.8 118.8c.5 1.1 .9 2.1 1.3 3.2H544c35.3 0 64 28.7 64 64v32c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V288c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32V96zM384 224h85.9l-42.7-96H384v96zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-field-un\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"supplies\", \"truck\", \"united nations\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e58e\",\n    \"label\": \"Truck Field Un\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 32C60.7 32 32 60.7 32 96v32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32v32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c0 53 43 96 96 96s96-43 96-96H384c0 53 43 96 96 96s96-43 96-96h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V288c0-35.3-28.7-64-64-64h-4.2c-.4-1.1-.9-2.1-1.3-3.2L485.7 102c-10.3-23.1-33.2-38-58.5-38H375.4C364.4 44.9 343.7 32 320 32H96zm288 96h43.2l42.7 96H384V128zM112 384a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM253.3 135.1l34.7 52V144c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V144c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM128 144v64c0 8.8 7.2 16 16 16s16-7.2 16-16V144c0-8.8 7.2-16 16-16s16 7.2 16 16v64c0 26.5-21.5 48-48 48s-48-21.5-48-48V144c0-8.8 7.2-16 16-16s16 7.2 16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 32C60.7 32 32 60.7 32 96v32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32v32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c0 53 43 96 96 96s96-43 96-96H384c0 53 43 96 96 96s96-43 96-96h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V288c0-35.3-28.7-64-64-64h-4.2c-.4-1.1-.9-2.1-1.3-3.2L485.7 102c-10.3-23.1-33.2-38-58.5-38H375.4C364.4 44.9 343.7 32 320 32H96zm288 96h43.2l42.7 96H384V128zM112 384a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm368-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96zM253.3 135.1l34.7 52V144c0-8.8 7.2-16 16-16s16 7.2 16 16v96c0 7.1-4.6 13.3-11.4 15.3s-14-.6-17.9-6.4l-34.7-52V240c0 8.8-7.2 16-16 16s-16-7.2-16-16V144c0-7.1 4.6-13.3 11.4-15.3s14 .6 17.9 6.4zM128 144v64c0 8.8 7.2 16 16 16s16-7.2 16-16V144c0-8.8 7.2-16 16-16s16 7.2 16 16v64c0 26.5-21.5 48-48 48s-48-21.5-48-48V144c0-8.8 7.2-16 16-16s16 7.2 16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-front\": {\n    \"changes\": [\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"shuttle\", \"truck\", \"van\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2b7\",\n    \"label\": \"Truck Front\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 80C0 35.8 35.8 0 80 0H432c44.2 0 80 35.8 80 80V368c0 26.2-12.6 49.4-32 64v48c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32V448H128v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V432C12.6 417.4 0 394.2 0 368V80zm129.9 72.2L112 224H400l-17.9-71.8C378.5 138 365.7 128 351 128H161c-14.7 0-27.5 10-31 24.2zM128 320a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 80C0 35.8 35.8 0 80 0H432c44.2 0 80 35.8 80 80V368c0 26.2-12.6 49.4-32 64v48c0 17.7-14.3 32-32 32H416c-17.7 0-32-14.3-32-32V448H128v32c0 17.7-14.3 32-32 32H64c-17.7 0-32-14.3-32-32V432C12.6 417.4 0 394.2 0 368V80zm129.9 72.2L112 224H400l-17.9-71.8C378.5 138 365.7 128 351 128H161c-14.7 0-27.5 10-31 24.2zM128 320a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm288 32a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-medical\": {\n    \"aliases\": {\n      \"names\": [\"ambulance\"],\n      \"unicodes\": {\n        \"composite\": [\"1f691\"],\n        \"secondary\": [\"10f0f9\"]\n      }\n    },\n    \"changes\": [\n      \"3.0.0\",\n      \"5.0.0\",\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ambulance\",\n        \"clinic\",\n        \"covid-19\",\n        \"emergency\",\n        \"emt\",\n        \"er\",\n        \"help\",\n        \"hospital\",\n        \"mobile\",\n        \"support\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0f9\",\n    \"label\": \"Truck Medical\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 48C0 21.5 21.5 0 48 0H368c26.5 0 48 21.5 48 48V96h50.7c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3V256v32 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V48zM416 256H544V237.3L466.7 160H416v96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM176 80v48l-48 0c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V192h48c8.8 0 16-7.2 16-16V144c0-8.8-7.2-16-16-16H240V80c0-8.8-7.2-16-16-16H192c-8.8 0-16 7.2-16 16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 48C0 21.5 21.5 0 48 0H368c26.5 0 48 21.5 48 48V96h50.7c17 0 33.3 6.7 45.3 18.7L589.3 192c12 12 18.7 28.3 18.7 45.3V256v32 64c17.7 0 32 14.3 32 32s-14.3 32-32 32H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V48zM416 256H544V237.3L466.7 160H416v96zM160 464a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm368-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM176 80v48l-48 0c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V192h48c8.8 0 16-7.2 16-16V144c0-8.8-7.2-16-16-16H240V80c0-8.8-7.2-16-16-16H192c-8.8 0-16 7.2-16 16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-monster\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f63b\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"offroad\", \"vehicle\", \"wheel\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f63b\",\n    \"label\": \"Truck Monster\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M288 64v64H416L368 64H288zM419.2 25.6L496 128h80c17.7 0 32 14.3 32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64H288c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32V160c0-17.7 14.3-32 32-32H224V48c0-26.5 21.5-48 48-48h96c20.1 0 39.1 9.5 51.2 25.6zM152 256h16c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.7 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.3 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8v16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.3 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.8 3.7-14.1 6.8-21.7 9C190.1 503.1 180.1 512 168 512H152c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2L63.8 468.9c-8.6-8.6-9.3-21.9-2.3-31.3c-3.7-6.9-6.8-14.1-9-21.8C40.9 414.1 32 404.1 32 392V376c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.3-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9c1.7-11.6 11.7-20.6 23.8-20.6zm8 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM448.2 276.6c1.7-11.6 11.7-20.6 23.8-20.6h16c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.8 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.2 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8v16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.2 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.9 3.7-14.1 6.8-21.8 9C510.1 503.1 500.1 512 488 512H472c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2l-11.3-11.3c-8.6-8.6-9.3-21.9-2.2-31.3c-3.7-6.9-6.8-14.1-9-21.8C360.9 414.1 352 404.1 352 392V376c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.2-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9zM528 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M288 64v64H416L368 64H288zM419.2 25.6L496 128h80c17.7 0 32 14.3 32 32v64c17.7 0 32 14.3 32 32s-14.3 32-32 32c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64H288c-29.2-38.9-75.7-64-128-64s-98.8 25.1-128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32V160c0-17.7 14.3-32 32-32H224V48c0-26.5 21.5-48 48-48h96c20.1 0 39.1 9.5 51.2 25.6zM152 256h16c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.7 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.3 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8v16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.3 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.8 3.7-14.1 6.8-21.7 9C190.1 503.1 180.1 512 168 512H152c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2L63.8 468.9c-8.6-8.6-9.3-21.9-2.3-31.3c-3.7-6.9-6.8-14.1-9-21.8C40.9 414.1 32 404.1 32 392V376c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.3-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9c1.7-11.6 11.7-20.6 23.8-20.6zm8 176a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM448.2 276.6c1.7-11.6 11.7-20.6 23.8-20.6h16c12.1 0 22.1 8.9 23.8 20.6c7.6 2.2 14.9 5.3 21.8 9c9.4-7 22.8-6.3 31.3 2.3l11.3 11.3c8.6 8.6 9.3 21.9 2.2 31.3c3.7 6.8 6.8 14.1 9 21.7c11.6 1.7 20.6 11.7 20.6 23.8v16c0 12.1-8.9 22.1-20.6 23.8c-2.2 7.6-5.3 14.9-9 21.7c7 9.4 6.3 22.8-2.2 31.3l-11.3 11.3c-8.6 8.6-21.9 9.3-31.3 2.2c-6.9 3.7-14.1 6.8-21.8 9C510.1 503.1 500.1 512 488 512H472c-12.1 0-22.1-8.9-23.8-20.6c-7.6-2.2-14.9-5.3-21.7-9c-9.4 7.1-22.8 6.3-31.3-2.2l-11.3-11.3c-8.6-8.6-9.3-21.9-2.2-31.3c-3.7-6.9-6.8-14.1-9-21.8C360.9 414.1 352 404.1 352 392V376c0-12.1 8.9-22.1 20.6-23.8c2.2-7.6 5.3-14.9 9-21.8c-7-9.4-6.3-22.8 2.2-31.3l11.3-11.3c8.6-8.6 21.9-9.3 31.3-2.3c6.8-3.7 14.1-6.8 21.7-9zM528 384a48 48 0 1 0 -96 0 48 48 0 1 0 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-moving\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4df\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"cargo\", \"inventory\", \"rental\", \"vehicle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4df\",\n    \"label\": \"Truck Moving\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V304v80 16c0 44.2 35.8 80 80 80c26.2 0 49.4-12.6 64-32c14.6 19.4 37.8 32 64 32c44.2 0 80-35.8 80-80c0-5.5-.6-10.8-1.6-16H416h33.6c-1 5.2-1.6 10.5-1.6 16c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H608c17.7 0 32-14.3 32-32V288 272 261.7c0-9.2-3.2-18.2-9-25.3l-58.8-71.8c-10.6-13-26.5-20.5-43.3-20.5H480V96c0-35.3-28.7-64-64-64H64zM585 256H480V192h48.8c2.4 0 4.7 1.1 6.2 2.9L585 256zM528 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM176 400a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM80 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V304v80 16c0 44.2 35.8 80 80 80c26.2 0 49.4-12.6 64-32c14.6 19.4 37.8 32 64 32c44.2 0 80-35.8 80-80c0-5.5-.6-10.8-1.6-16H416h33.6c-1 5.2-1.6 10.5-1.6 16c0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H608c17.7 0 32-14.3 32-32V288 272 261.7c0-9.2-3.2-18.2-9-25.3l-58.8-71.8c-10.6-13-26.5-20.5-43.3-20.5H480V96c0-35.3-28.7-64-64-64H64zM585 256H480V192h48.8c2.4 0 4.7 1.1 6.2 2.9L585 256zM528 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64zM176 400a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zM80 368a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-pickup\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f6fb\"],\n        \"secondary\": [\"10f63c\"]\n      }\n    },\n    \"changes\": [\n      \"5.2.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cargo\",\n        \"pick-up\",\n        \"pickup\",\n        \"pickup truck\",\n        \"truck\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f63c\",\n    \"label\": \"Truck Pickup\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767649,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M368.6 96l76.8 96H288V96h80.6zM224 80V192H64c-17.7 0-32 14.3-32 32v64c-17.7 0-32 14.3-32 32s14.3 32 32 32H65.1c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16h66.3c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16H608c17.7 0 32-14.3 32-32s-14.3-32-32-32V224c0-17.7-14.3-32-32-32H527.4L418.6 56c-12.1-15.2-30.5-24-50-24H272c-26.5 0-48 21.5-48 48zm0 288a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm288 0a48 48 0 1 1 -96 0 48 48 0 1 1 96 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M368.6 96l76.8 96H288V96h80.6zM224 80V192H64c-17.7 0-32 14.3-32 32v64c-17.7 0-32 14.3-32 32s14.3 32 32 32H65.1c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16h66.3c-.7 5.2-1.1 10.6-1.1 16c0 61.9 50.1 112 112 112s112-50.1 112-112c0-5.4-.4-10.8-1.1-16H608c17.7 0 32-14.3 32-32s-14.3-32-32-32V224c0-17.7-14.3-32-32-32H527.4L418.6 56c-12.1-15.2-30.5-24-50-24H272c-26.5 0-48 21.5-48 48zm0 288a48 48 0 1 1 -96 0 48 48 0 1 1 96 0zm288 0a48 48 0 1 1 -96 0 48 48 0 1 1 96 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-plane\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"airplane\", \"plane\", \"transportation\", \"truck\", \"vehicle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e58f\",\n    \"label\": \"Truck Plane\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767637,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M200 0c-30.6 0-56 54.7-56 86.1V192.5L7.8 274.3C2.9 277.2 0 282.4 0 288v64c0 5.1 2.4 9.8 6.4 12.8s9.3 3.9 14.1 2.5l123.4-37v81.2l-50 40c-3.8 3-6 7.6-6 12.5v32c0 5.1 2.5 10 6.6 13s9.5 3.8 14.4 2.2L200 480.9 290.4 511c-1.6-4.7-2.4-9.8-2.4-15V463.4c-18.2-10.5-30.7-29.7-31.9-51.8l-.1-.1V408 325.5 184l0-1.1 0 0V86.1C256 54.7 231.5 0 200 0zm88 176V400c0 20.9 13.4 38.7 32 45.3V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V448H544v40c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V445.3c18.6-6.6 32-24.4 32-45.3V176c0-26.5-21.5-48-48-48H336c-26.5 0-48 21.5-48 48zm79.8 78.7c3.3-8.7 11.2-14.7 20.5-14.7H539.7c9.2 0 17.2 6 20.5 14.7L576 304H352l15.8-49.3zM568 352a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM336 376a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M200 0c-30.6 0-56 54.7-56 86.1V192.5L7.8 274.3C2.9 277.2 0 282.4 0 288v64c0 5.1 2.4 9.8 6.4 12.8s9.3 3.9 14.1 2.5l123.4-37v81.2l-50 40c-3.8 3-6 7.6-6 12.5v32c0 5.1 2.5 10 6.6 13s9.5 3.8 14.4 2.2L200 480.9 290.4 511c-1.6-4.7-2.4-9.8-2.4-15V463.4c-18.2-10.5-30.7-29.7-31.9-51.8l-.1-.1V408 325.5 184l0-1.1 0 0V86.1C256 54.7 231.5 0 200 0zm88 176V400c0 20.9 13.4 38.7 32 45.3V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V448H544v40c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V445.3c18.6-6.6 32-24.4 32-45.3V176c0-26.5-21.5-48-48-48H336c-26.5 0-48 21.5-48 48zm79.8 78.7c3.3-8.7 11.2-14.7 20.5-14.7H539.7c9.2 0 17.2 6 20.5 14.7L576 304H352l15.8-49.3zM568 352a24 24 0 1 1 0 48 24 24 0 1 1 0-48zM336 376a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"truck-ramp-box\": {\n    \"aliases\": {\n      \"names\": [\"truck-loading\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4de\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"box\",\n        \"cargo\",\n        \"delivery\",\n        \"inventory\",\n        \"moving\",\n        \"rental\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4de\",\n    \"label\": \"Truck Ramp Box\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 0V400c0 61.9-50.1 112-112 112c-61 0-110.5-48.7-112-109.3L48.4 502.9c-17.1 4.6-34.6-5.4-39.3-22.5s5.4-34.6 22.5-39.3L352 353.8V64c0-35.3 28.7-64 64-64H640zM576 400a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM23.1 207.7c-4.6-17.1 5.6-34.6 22.6-39.2l46.4-12.4 20.7 77.3c2.3 8.5 11.1 13.6 19.6 11.3l30.9-8.3c8.5-2.3 13.6-11.1 11.3-19.6l-20.7-77.3 46.4-12.4c17.1-4.6 34.6 5.6 39.2 22.6l41.4 154.5c4.6 17.1-5.6 34.6-22.6 39.2L103.7 384.9c-17.1 4.6-34.6-5.6-39.2-22.6L23.1 207.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 0V400c0 61.9-50.1 112-112 112c-61 0-110.5-48.7-112-109.3L48.4 502.9c-17.1 4.6-34.6-5.4-39.3-22.5s5.4-34.6 22.5-39.3L352 353.8V64c0-35.3 28.7-64 64-64H640zM576 400a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM23.1 207.7c-4.6-17.1 5.6-34.6 22.6-39.2l46.4-12.4 20.7 77.3c2.3 8.5 11.1 13.6 19.6 11.3l30.9-8.3c8.5-2.3 13.6-11.1 11.3-19.6l-20.7-77.3 46.4-12.4c17.1-4.6 34.6 5.6 39.2 22.6l41.4 154.5c4.6 17.1-5.6 34.6-22.6 39.2L103.7 384.9c-17.1 4.6-34.6-5.6-39.2-22.6L23.1 207.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tty\": {\n    \"aliases\": {\n      \"names\": [\"teletype\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1e4\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.7.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"communication\", \"deaf\", \"telephone\", \"teletypewriter\", \"text\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1e4\",\n    \"label\": \"Tty\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767390,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M38.3 241.3L15.1 200.6c-9.2-16.2-8.4-36.5 4.5-50C61.4 106.8 144.7 48 256 48s194.6 58.8 236.4 102.6c12.9 13.5 13.7 33.8 4.5 50l-23.1 40.7c-7.5 13.2-23.3 19.3-37.8 14.6l-81.1-26.6c-13.1-4.3-22-16.6-22-30.4V144c-49.6-18.1-104-18.1-153.6 0v54.8c0 13.8-8.9 26.1-22 30.4L76.1 255.8c-14.5 4.7-30.3-1.4-37.8-14.6zM32 336c0-8.8 7.2-16 16-16H80c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16V336zm0 96c0-8.8 7.2-16 16-16H80c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16V432zM144 320h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H144c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V336zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H336c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H432c-8.8 0-16-7.2-16-16V336zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H432c-8.8 0-16-7.2-16-16V432c0-8.8 7.2-16 16-16zM128 432c0-8.8 7.2-16 16-16H368c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H144c-8.8 0-16-7.2-16-16V432z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M38.3 241.3L15.1 200.6c-9.2-16.2-8.4-36.5 4.5-50C61.4 106.8 144.7 48 256 48s194.6 58.8 236.4 102.6c12.9 13.5 13.7 33.8 4.5 50l-23.1 40.7c-7.5 13.2-23.3 19.3-37.8 14.6l-81.1-26.6c-13.1-4.3-22-16.6-22-30.4V144c-49.6-18.1-104-18.1-153.6 0v54.8c0 13.8-8.9 26.1-22 30.4L76.1 255.8c-14.5 4.7-30.3-1.4-37.8-14.6zM32 336c0-8.8 7.2-16 16-16H80c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16V336zm0 96c0-8.8 7.2-16 16-16H80c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16V432zM144 320h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H144c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H240c-8.8 0-16-7.2-16-16V336zm112-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H336c-8.8 0-16-7.2-16-16V336c0-8.8 7.2-16 16-16zm80 16c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H432c-8.8 0-16-7.2-16-16V336zm16 80h32c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H432c-8.8 0-16-7.2-16-16V432c0-8.8 7.2-16 16-16zM128 432c0-8.8 7.2-16 16-16H368c8.8 0 16 7.2 16 16v32c0 8.8-7.2 16-16 16H144c-8.8 0-16-7.2-16-16V432z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tumblr\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f173\",\n    \"label\": \"Tumblr\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"turkish-lira-sign\": {\n    \"aliases\": {\n      \"names\": [\"try\", \"turkish-lira\"]\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Turkish Lira Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2bb\",\n    \"label\": \"Turkish Lira Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M96 32c17.7 0 32 14.3 32 32V99.3L247.2 65.2c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 165.9v29.4l119.2-34.1c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 261.9V416h63.8c68.2 0 124.4-53.5 127.8-121.6l.4-8c.9-17.7 15.9-31.2 33.6-30.4s31.2 15.9 30.4 33.6l-.4 8C378.5 399.8 294.1 480 191.8 480H96c-17.7 0-32-14.3-32-32V280.1l-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 213.6V184.1l-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 117.6V64c0-17.7 14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M96 32c17.7 0 32 14.3 32 32V99.3L247.2 65.2c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 165.9v29.4l119.2-34.1c17-4.9 34.7 5 39.6 22s-5 34.7-22 39.6L128 261.9V416h63.8c68.2 0 124.4-53.5 127.8-121.6l.4-8c.9-17.7 15.9-31.2 33.6-30.4s31.2 15.9 30.4 33.6l-.4 8C378.5 399.8 294.1 480 191.8 480H96c-17.7 0-32-14.3-32-32V280.1l-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 213.6V184.1l-23.2 6.6c-17 4.9-34.7-5-39.6-22s5-34.7 22-39.6L64 117.6V64c0-17.7 14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"turn-down\": {\n    \"aliases\": {\n      \"names\": [\"level-down-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"2935\"],\n        \"secondary\": [\"10f3be\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"down\", \"level-down\", \"right arrow curving down\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3be\",\n    \"label\": \"Turn Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M350 334.5c3.8 8.8 2 19-4.6 26l-136 144c-4.5 4.8-10.8 7.5-17.4 7.5s-12.9-2.7-17.4-7.5l-136-144c-6.6-7-8.4-17.2-4.6-26s12.5-14.5 22-14.5h88l0-192c0-17.7-14.3-32-32-32H32C14.3 96 0 81.7 0 64V32C0 14.3 14.3 0 32 0l80 0c70.7 0 128 57.3 128 128l0 192h88c9.6 0 18.2 5.7 22 14.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M350 334.5c3.8 8.8 2 19-4.6 26l-136 144c-4.5 4.8-10.8 7.5-17.4 7.5s-12.9-2.7-17.4-7.5l-136-144c-6.6-7-8.4-17.2-4.6-26s12.5-14.5 22-14.5h88l0-192c0-17.7-14.3-32-32-32H32C14.3 96 0 81.7 0 64V32C0 14.3 14.3 0 32 0l80 0c70.7 0 128 57.3 128 128l0 192h88c9.6 0 18.2 5.7 22 14.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"turn-up\": {\n    \"aliases\": {\n      \"names\": [\"level-up-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"2934\"],\n        \"secondary\": [\"10f3bf\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrow\", \"level-up\", \"right arrow curving up\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f3bf\",\n    \"label\": \"Turn Up\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M350 177.5c3.8-8.8 2-19-4.6-26l-136-144C204.9 2.7 198.6 0 192 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26s12.5 14.5 22 14.5h88l0 192c0 17.7-14.3 32-32 32H32c-17.7 0-32 14.3-32 32v32c0 17.7 14.3 32 32 32l80 0c70.7 0 128-57.3 128-128l0-192h88c9.6 0 18.2-5.7 22-14.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M350 177.5c3.8-8.8 2-19-4.6-26l-136-144C204.9 2.7 198.6 0 192 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26s12.5 14.5 22 14.5h88l0 192c0 17.7-14.3 32-32 32H32c-17.7 0-32 14.3-32 32v32c0 17.7 14.3 32 32 32l80 0c70.7 0 128-57.3 128-128l0-192h88c9.6 0 18.2-5.7 22-14.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"tv\": {\n    \"aliases\": {\n      \"names\": [\"television\", \"tv-alt\"],\n      \"unicodes\": {\n        \"composite\": [\"f8e5\"],\n        \"primary\": [\"f8e5\"],\n        \"secondary\": [\"10f26c\", \"10f8e5\"]\n      }\n    },\n    \"changes\": [\n      \"4.4.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"computer\", \"display\", \"monitor\", \"television\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f26c\",\n    \"label\": \"Tv\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 64V352H576V64H64zM0 64C0 28.7 28.7 0 64 0H576c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM128 448H512c17.7 0 32 14.3 32 32s-14.3 32-32 32H128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 64V352H576V64H64zM0 64C0 28.7 28.7 0 64 0H576c35.3 0 64 28.7 64 64V352c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zM128 448H512c17.7 0 32 14.3 32 32s-14.3 32-32 32H128c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"twitch\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"5.12.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1e8\",\n    \"label\": \"Twitch\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"twitter\": {\n    \"changes\": [\"2.0.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"social network\", \"tweet\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f099\",\n    \"label\": \"Twitter\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"typo3\": {\n    \"changes\": [\"5.0.1\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f42b\",\n    \"label\": \"Typo3\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M178.7 78.4c0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-176.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C7 246 113.8 480 191.1 480c36.3 0 97.3-59.5 146.7-139-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9zM301.5 32c-30.1 0-41.7 5.4-41.7 36.3 0 66.4 53.8 198.5 101.7 198.5 26.3 0 78.8-99.7 78.8-182.3 0-40.9-67-52.5-138.8-52.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"u\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"75\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter U\", \"Latin Small Letter U\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"55\",\n    \"label\": \"U\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M32 32c17.7 0 32 14.3 32 32V288c0 70.7 57.3 128 128 128s128-57.3 128-128V64c0-17.7 14.3-32 32-32s32 14.3 32 32V288c0 106-86 192-192 192S0 394 0 288V64C0 46.3 14.3 32 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M32 32c17.7 0 32 14.3 32 32V288c0 70.7 57.3 128 128 128s128-57.3 128-128V64c0-17.7 14.3-32 32-32s32 14.3 32 32V288c0 106-86 192-192 192S0 394 0 288V64C0 46.3 14.3 32 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"uber\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f402\",\n    \"label\": \"Uber\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ubuntu\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"linux\", \"operating system\", \"os\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7df\",\n    \"label\": \"Ubuntu\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1.7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm52.7 93c8.8-15.2 28.3-20.5 43.5-11.7 15.3 8.8 20.5 28.3 11.7 43.6-8.8 15.2-28.3 20.5-43.5 11.7-15.3-8.9-20.5-28.4-11.7-43.6zM87.4 287.9c-17.6 0-31.9-14.3-31.9-31.9 0-17.6 14.3-31.9 31.9-31.9 17.6 0 31.9 14.3 31.9 31.9 0 17.6-14.3 31.9-31.9 31.9zm28.1 3.1c22.3-17.9 22.4-51.9 0-69.9 8.6-32.8 29.1-60.7 56.5-79.1l23.7 39.6c-51.5 36.3-51.5 112.5 0 148.8L172 370c-27.4-18.3-47.8-46.3-56.5-79zm228.7 131.7c-15.3 8.8-34.7 3.6-43.5-11.7-8.8-15.3-3.6-34.8 11.7-43.6 15.2-8.8 34.7-3.6 43.5 11.7 8.8 15.3 3.6 34.8-11.7 43.6zm.3-69.5c-26.7-10.3-56.1 6.6-60.5 35-5.2 1.4-48.9 14.3-96.7-9.4l22.5-40.3c57 26.5 123.4-11.7 128.9-74.4l46.1.7c-2.3 34.5-17.3 65.5-40.3 88.4zm-5.9-105.3c-5.4-62-71.3-101.2-128.9-74.4l-22.5-40.3c47.9-23.7 91.5-10.8 96.7-9.4 4.4 28.3 33.8 45.3 60.5 35 23.1 22.9 38 53.9 40.2 88.5l-46 .6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"uikit\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f403\",\n    \"label\": \"UIkit\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"umbraco\": {\n    \"changes\": [\"5.11.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f8e8\",\n    \"label\": \"Umbraco\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014472,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 510 512\\\"><path d=\\\"M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 510, 512],\n        \"width\": 510,\n        \"height\": 512,\n        \"path\": \"M255.35 8C118.36 7.83 7.14 118.72 7 255.68c-.07 137 111 248.2 248 248.27 136.85 0 247.82-110.7 248-247.67S392.34 8.17 255.35 8zm145 266q-1.14 40.68-14 65t-43.51 35q-30.61 10.7-85.45 10.47h-4.6q-54.78.22-85.44-10.47t-43.52-35q-12.85-24.36-14-65a224.81 224.81 0 0 1 0-30.71 418.37 418.37 0 0 1 3.6-43.88c1.88-13.39 3.57-22.58 5.4-32 1-4.88 1.28-6.42 1.82-8.45a5.09 5.09 0 0 1 4.9-3.89h.69l32 5a5.07 5.07 0 0 1 4.16 5 5 5 0 0 1 0 .77l-1.7 8.78q-2.41 13.25-4.84 33.68a380.62 380.62 0 0 0-2.64 42.15q-.28 40.43 8.13 59.83a43.87 43.87 0 0 0 31.31 25.18A243 243 0 0 0 250 340.6h10.25a242.64 242.64 0 0 0 57.27-5.16 43.86 43.86 0 0 0 31.15-25.23q8.53-19.42 8.13-59.78a388 388 0 0 0-2.6-42.15q-2.48-20.38-4.89-33.68l-1.69-8.78a5 5 0 0 1 0-.77 5 5 0 0 1 4.2-5l32-5h.82a5 5 0 0 1 4.9 3.89c.55 2.05.81 3.57 1.83 8.45 1.82 9.62 3.52 18.78 5.39 32a415.71 415.71 0 0 1 3.61 43.88 228.06 228.06 0 0 1-.04 30.73z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"umbrella\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0e9\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"protection\", \"rain\", \"storm\", \"wet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0e9\",\n    \"label\": \"Umbrella\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M288 0c17.7 0 32 14.3 32 32V49.7C451.8 63.4 557.7 161 573.9 285.9c2 15.6-17.3 24.4-27.8 12.7C532.1 283 504.8 272 480 272c-38.7 0-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C359 299.5 326.7 272 288 272s-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C167 299.5 134.7 272 96 272c-24.8 0-52.1 11-66.1 26.7C19.4 310.4 .1 301.5 2.1 285.9C18.3 161 124.2 63.4 256 49.7V32c0-17.7 14.3-32 32-32zm0 304c12.3 0 23.5 4.6 32 12.2V430.6c0 45-36.5 81.4-81.4 81.4c-30.8 0-59-17.4-72.8-45l-2.3-4.7c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l2.3 4.7c3 5.9 9 9.6 15.6 9.6c9.6 0 17.4-7.8 17.4-17.4V316.2c8.5-7.6 19.7-12.2 32-12.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M288 0c17.7 0 32 14.3 32 32V49.7C451.8 63.4 557.7 161 573.9 285.9c2 15.6-17.3 24.4-27.8 12.7C532.1 283 504.8 272 480 272c-38.7 0-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C359 299.5 326.7 272 288 272s-71 27.5-78.4 64.1c-1.7 8.7-8.7 15.9-17.6 15.9s-15.8-7.2-17.6-15.9C167 299.5 134.7 272 96 272c-24.8 0-52.1 11-66.1 26.7C19.4 310.4 .1 301.5 2.1 285.9C18.3 161 124.2 63.4 256 49.7V32c0-17.7 14.3-32 32-32zm0 304c12.3 0 23.5 4.6 32 12.2V430.6c0 45-36.5 81.4-81.4 81.4c-30.8 0-59-17.4-72.8-45l-2.3-4.7c-7.9-15.8-1.5-35 14.3-42.9s35-1.5 42.9 14.3l2.3 4.7c3 5.9 9 9.6 15.6 9.6c9.6 0 17.4-7.8 17.4-17.4V316.2c8.5-7.6 19.7-12.2 32-12.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"umbrella-beach\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f3d6\"],\n        \"secondary\": [\"10f5ca\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"beach\",\n        \"beach with umbrella\",\n        \"protection\",\n        \"recreation\",\n        \"sand\",\n        \"shade\",\n        \"summer\",\n        \"sun\",\n        \"umbrella\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ca\",\n    \"label\": \"Umbrella Beach\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M346.3 271.8l-60.1-21.9L214 448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H282.1l64.1-176.2zm121.1-.2l-3.3 9.1 67.7 24.6c18.1 6.6 38-4.2 39.6-23.4c6.5-78.5-23.9-155.5-80.8-208.5c2 8 3.2 16.3 3.4 24.8l.2 6c1.8 57-7.3 113.8-26.8 167.4zM462 99.1c-1.1-34.4-22.5-64.8-54.4-77.4c-.9-.4-1.9-.7-2.8-1.1c-33-11.7-69.8-2.4-93.1 23.8l-4 4.5C272.4 88.3 245 134.2 226.8 184l-3.3 9.1L434 269.7l3.3-9.1c18.1-49.8 26.6-102.5 24.9-155.5l-.2-6zM107.2 112.9c-11.1 15.7-2.8 36.8 15.3 43.4l71 25.8 3.3-9.1c19.5-53.6 49.1-103 87.1-145.5l4-4.5c6.2-6.9 13.1-13 20.5-18.2c-79.6 2.5-154.7 42.2-201.2 108z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M346.3 271.8l-60.1-21.9L214 448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H282.1l64.1-176.2zm121.1-.2l-3.3 9.1 67.7 24.6c18.1 6.6 38-4.2 39.6-23.4c6.5-78.5-23.9-155.5-80.8-208.5c2 8 3.2 16.3 3.4 24.8l.2 6c1.8 57-7.3 113.8-26.8 167.4zM462 99.1c-1.1-34.4-22.5-64.8-54.4-77.4c-.9-.4-1.9-.7-2.8-1.1c-33-11.7-69.8-2.4-93.1 23.8l-4 4.5C272.4 88.3 245 134.2 226.8 184l-3.3 9.1L434 269.7l3.3-9.1c18.1-49.8 26.6-102.5 24.9-155.5l-.2-6zM107.2 112.9c-11.1 15.7-2.8 36.8 15.3 43.4l71 25.8 3.3-9.1c19.5-53.6 49.1-103 87.1-145.5l4-4.5c6.2-6.9 13.1-13 20.5-18.2c-79.6 2.5-154.7 42.2-201.2 108z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"uncharted\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e084\",\n    \"label\": \"Uncharted Software\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M171.73,232.813A5.381,5.381,0,0,0,176.7,229.5,48.081,48.081,0,0,1,191.6,204.244c1.243-.828,1.657-2.484,1.657-4.141a4.22,4.22,0,0,0-2.071-3.312L74.429,128.473,148.958,85a9.941,9.941,0,0,0,4.968-8.281,9.108,9.108,0,0,0-4.968-8.281L126.6,55.6a9.748,9.748,0,0,0-9.523,0l-100.2,57.966a9.943,9.943,0,0,0-4.969,8.281V236.954a9.109,9.109,0,0,0,4.969,8.281L39.235,258.07a8.829,8.829,0,0,0,4.968,1.242,9.4,9.4,0,0,0,6.625-2.484,10.8,10.8,0,0,0,2.9-7.039V164.5L169.66,232.4A4.5,4.5,0,0,0,171.73,232.813ZM323.272,377.73a12.478,12.478,0,0,0-4.969,1.242l-74.528,43.062V287.882c0-2.9-2.9-5.8-6.211-4.555a53.036,53.036,0,0,1-28.984.414,4.86,4.86,0,0,0-6.21,4.555V421.619l-74.529-43.061a8.83,8.83,0,0,0-4.969-1.242,9.631,9.631,0,0,0-9.523,9.523v26.085a9.107,9.107,0,0,0,4.969,8.281l100.2,57.553A8.829,8.829,0,0,0,223.486,480a11.027,11.027,0,0,0,4.969-1.242l100.2-57.553a9.941,9.941,0,0,0,4.968-8.281V386.839C332.8,382.285,328.24,377.73,323.272,377.73ZM286.007,78a23,23,0,1,0-23-23A23,23,0,0,0,286.007,78Zm63.627-10.086a23,23,0,1,0,23,23A23,23,0,0,0,349.634,67.914ZM412.816,151.6a23,23,0,1,0-23-23A23,23,0,0,0,412.816,151.6Zm-63.182-9.2a23,23,0,1,0,23,23A23,23,0,0,0,349.634,142.4Zm-63.627,83.244a23,23,0,1,0-23-23A23,23,0,0,0,286.007,225.648Zm-62.074,36.358a23,23,0,1,0-23-23A23,23,0,0,0,223.933,262.006Zm188.883-82.358a23,23,0,1,0,23,23A23,23,0,0,0,412.816,179.648Zm0,72.272a23,23,0,1,0,23,23A23,23,0,0,0,412.816,251.92Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M171.73,232.813A5.381,5.381,0,0,0,176.7,229.5,48.081,48.081,0,0,1,191.6,204.244c1.243-.828,1.657-2.484,1.657-4.141a4.22,4.22,0,0,0-2.071-3.312L74.429,128.473,148.958,85a9.941,9.941,0,0,0,4.968-8.281,9.108,9.108,0,0,0-4.968-8.281L126.6,55.6a9.748,9.748,0,0,0-9.523,0l-100.2,57.966a9.943,9.943,0,0,0-4.969,8.281V236.954a9.109,9.109,0,0,0,4.969,8.281L39.235,258.07a8.829,8.829,0,0,0,4.968,1.242,9.4,9.4,0,0,0,6.625-2.484,10.8,10.8,0,0,0,2.9-7.039V164.5L169.66,232.4A4.5,4.5,0,0,0,171.73,232.813ZM323.272,377.73a12.478,12.478,0,0,0-4.969,1.242l-74.528,43.062V287.882c0-2.9-2.9-5.8-6.211-4.555a53.036,53.036,0,0,1-28.984.414,4.86,4.86,0,0,0-6.21,4.555V421.619l-74.529-43.061a8.83,8.83,0,0,0-4.969-1.242,9.631,9.631,0,0,0-9.523,9.523v26.085a9.107,9.107,0,0,0,4.969,8.281l100.2,57.553A8.829,8.829,0,0,0,223.486,480a11.027,11.027,0,0,0,4.969-1.242l100.2-57.553a9.941,9.941,0,0,0,4.968-8.281V386.839C332.8,382.285,328.24,377.73,323.272,377.73ZM286.007,78a23,23,0,1,0-23-23A23,23,0,0,0,286.007,78Zm63.627-10.086a23,23,0,1,0,23,23A23,23,0,0,0,349.634,67.914ZM412.816,151.6a23,23,0,1,0-23-23A23,23,0,0,0,412.816,151.6Zm-63.182-9.2a23,23,0,1,0,23,23A23,23,0,0,0,349.634,142.4Zm-63.627,83.244a23,23,0,1,0-23-23A23,23,0,0,0,286.007,225.648Zm-62.074,36.358a23,23,0,1,0-23-23A23,23,0,0,0,223.933,262.006Zm188.883-82.358a23,23,0,1,0,23,23A23,23,0,0,0,412.816,179.648Zm0,72.272a23,23,0,1,0,23,23A23,23,0,0,0,412.816,251.92Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"underline\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0cd\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.9.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"edit\", \"emphasis\", \"format\", \"text\", \"writing\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0cd\",\n    \"label\": \"Underline\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M16 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H128V224c0 53 43 96 96 96s96-43 96-96V96H304c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V224c0 88.4-71.6 160-160 160s-160-71.6-160-160V96H48C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M16 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H128V224c0 53 43 96 96 96s96-43 96-96V96H304c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V224c0 88.4-71.6 160-160 160s-160-71.6-160-160V96H48C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"uniregistry\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f404\",\n    \"label\": \"Uniregistry\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480zm-89.1-193.1v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4zm20.5 57H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8zm-17.7-34.7H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3zm-2.8-69.3H0v17.3h102.9zm0-173.2H0v4.9h102.9zm0-34.7H0v2.5h102.9zm0 69.3H0v7.4h102.9zm0 104H0v14.8h102.9zm0-69.3H0v9.9h102.9zm0 34.6H0V183h102.9zm166.2 160.9h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3zm12-185.7H384V136H281.1zm0 37.2H384v-12.4H281.1zm0-74.3H384v-7.4H281.1zm0-76.7v2.5H384V32zm-203 410.9h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7zm203-371.3H384v-4.9H281.1zm0 148.5H384v-14.8H281.1zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2zm188.8-37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8zm53.5-81.7c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1zm0-29.7H384v-17.3H281.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"unity\": {\n    \"changes\": [\"5.12.0\", \"5.14.0\", \"6.0.0-beta3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e049\",\n    \"label\": \"Unity 3D\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M243.583 91.6027L323.695 138.384C326.575 140.026 326.68 144.583 323.695 146.225L228.503 201.854C225.623 203.55 222.22 203.444 219.549 201.854L124.357 146.225C121.425 144.636 121.373 139.973 124.357 138.384L204.417 91.6027V0L0 119.417V358.252L78.3843 312.477V218.914C78.3319 215.576 82.2066 213.192 85.0865 214.993L180.279 270.622C183.159 272.318 184.782 275.338 184.782 278.464V389.669C184.834 393.007 180.959 395.391 178.079 393.589L97.9673 346.808L19.583 392.583L224 512L428.417 392.583L350.033 346.808L269.921 393.589C267.093 395.338 263.114 393.06 263.218 389.669V278.464C263.218 275.126 265.051 272.159 267.721 270.622L362.914 214.993C365.741 213.245 369.72 215.47 369.616 218.914V312.477L448 358.252V119.417L243.583 0V91.6027Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M243.583 91.6027L323.695 138.384C326.575 140.026 326.68 144.583 323.695 146.225L228.503 201.854C225.623 203.55 222.22 203.444 219.549 201.854L124.357 146.225C121.425 144.636 121.373 139.973 124.357 138.384L204.417 91.6027V0L0 119.417V358.252L78.3843 312.477V218.914C78.3319 215.576 82.2066 213.192 85.0865 214.993L180.279 270.622C183.159 272.318 184.782 275.338 184.782 278.464V389.669C184.834 393.007 180.959 395.391 178.079 393.589L97.9673 346.808L19.583 392.583L224 512L428.417 392.583L350.033 346.808L269.921 393.589C267.093 395.338 263.114 393.06 263.218 389.669V278.464C263.218 275.126 265.051 272.159 267.721 270.622L362.914 214.993C365.741 213.245 369.72 215.47 369.616 218.914V312.477L448 358.252V119.417L243.583 0V91.6027Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"universal-access\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f29a\"]\n      }\n    },\n    \"changes\": [\n      \"4.6.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f29a\",\n    \"label\": \"Universal Access\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm161.5-86.1c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5l11.9 5.1c17.3 7.4 35.2 12.9 53.6 16.3v50.1c0 4.3-.7 8.6-2.1 12.6l-28.7 86.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l24.4-73.2c1.3-3.8 4.8-6.4 8.8-6.4s7.6 2.6 8.8 6.4l24.4 73.2c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-28.7-86.1c-1.4-4.1-2.1-8.3-2.1-12.6V235.5c18.4-3.5 36.3-8.9 53.6-16.3l11.9-5.1c12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6L338.7 175c-26.1 11.2-54.2 17-82.7 17s-56.5-5.8-82.7-17l-11.9-5.1zM256 160a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zm161.5-86.1c-12.2-5.2-26.3 .4-31.5 12.6s.4 26.3 12.6 31.5l11.9 5.1c17.3 7.4 35.2 12.9 53.6 16.3v50.1c0 4.3-.7 8.6-2.1 12.6l-28.7 86.1c-4.2 12.6 2.6 26.2 15.2 30.4s26.2-2.6 30.4-15.2l24.4-73.2c1.3-3.8 4.8-6.4 8.8-6.4s7.6 2.6 8.8 6.4l24.4 73.2c4.2 12.6 17.8 19.4 30.4 15.2s19.4-17.8 15.2-30.4l-28.7-86.1c-1.4-4.1-2.1-8.3-2.1-12.6V235.5c18.4-3.5 36.3-8.9 53.6-16.3l11.9-5.1c12.2-5.2 17.8-19.3 12.6-31.5s-19.3-17.8-31.5-12.6L338.7 175c-26.1 11.2-54.2 17-82.7 17s-56.5-5.8-82.7-17l-11.9-5.1zM256 160a40 40 0 1 0 0-80 40 40 0 1 0 0 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"unlock\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f513\"],\n        \"secondary\": [\"10f09c\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"admin\",\n        \"lock\",\n        \"open\",\n        \"password\",\n        \"private\",\n        \"protect\",\n        \"unlock\",\n        \"unlocked\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f09c\",\n    \"label\": \"Unlock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M144 144c0-44.2 35.8-80 80-80c31.9 0 59.4 18.6 72.3 45.7c7.6 16 26.7 22.8 42.6 15.2s22.8-26.7 15.2-42.6C331 33.7 281.5 0 224 0C144.5 0 80 64.5 80 144v48H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H144V144z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M144 144c0-44.2 35.8-80 80-80c31.9 0 59.4 18.6 72.3 45.7c7.6 16 26.7 22.8 42.6 15.2s22.8-26.7 15.2-42.6C331 33.7 281.5 0 224 0C144.5 0 80 64.5 80 144v48H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V256c0-35.3-28.7-64-64-64H144V144z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"unlock-keyhole\": {\n    \"aliases\": {\n      \"names\": [\"unlock-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f13e\"]\n      }\n    },\n    \"changes\": [\n      \"3.1.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"admin\", \"lock\", \"password\", \"private\", \"protect\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f13e\",\n    \"label\": \"Unlock Keyhole\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 64c-44.2 0-80 35.8-80 80v48H384c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80V144C80 64.5 144.5 0 224 0c57.5 0 107 33.7 130.1 82.3c7.6 16 .8 35.1-15.2 42.6s-35.1 .8-42.6-15.2C283.4 82.6 255.9 64 224 64zm32 320c17.7 0 32-14.3 32-32s-14.3-32-32-32H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 64c-44.2 0-80 35.8-80 80v48H384c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80V144C80 64.5 144.5 0 224 0c57.5 0 107 33.7 130.1 82.3c7.6 16 .8 35.1-15.2 42.6s-35.1 .8-42.6-15.2C283.4 82.6 255.9 64 224 64zm32 320c17.7 0 32-14.3 32-32s-14.3-32-32-32H192c-17.7 0-32 14.3-32 32s14.3 32 32 32h64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"unsplash\": {\n    \"changes\": [\"5.13.1\", \"5.14.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e07c\",\n    \"label\": \"Unsplash\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"untappd\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f405\",\n    \"label\": \"Untappd\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"up-down\": {\n    \"aliases\": {\n      \"names\": [\"arrows-alt-v\"],\n      \"unicodes\": {\n        \"composite\": [\"2195\", \"2b0d\"],\n        \"secondary\": [\"10f338\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"5.11.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Up Down Black Arrow\",\n        \"arrow\",\n        \"arrows-v\",\n        \"expand\",\n        \"portrait\",\n        \"resize\",\n        \"tall\",\n        \"up-down arrow\",\n        \"vertical\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f338\",\n    \"label\": \"Up Down\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M145.6 7.7C141 2.8 134.7 0 128 0s-13 2.8-17.6 7.7l-104 112c-6.5 7-8.2 17.2-4.4 25.9S14.5 160 24 160H80V352H24c-9.5 0-18.2 5.7-22 14.4s-2.1 18.9 4.4 25.9l104 112c4.5 4.9 10.9 7.7 17.6 7.7s13-2.8 17.6-7.7l104-112c6.5-7 8.2-17.2 4.4-25.9s-12.5-14.4-22-14.4H176V160h56c9.5 0 18.2-5.7 22-14.4s2.1-18.9-4.4-25.9l-104-112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M145.6 7.7C141 2.8 134.7 0 128 0s-13 2.8-17.6 7.7l-104 112c-6.5 7-8.2 17.2-4.4 25.9S14.5 160 24 160H80V352H24c-9.5 0-18.2 5.7-22 14.4s-2.1 18.9 4.4 25.9l104 112c4.5 4.9 10.9 7.7 17.6 7.7s13-2.8 17.6-7.7l104-112c6.5-7 8.2-17.2 4.4-25.9s-12.5-14.4-22-14.4H176V160h56c9.5 0 18.2-5.7 22-14.4s2.1-18.9-4.4-25.9l-104-112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"up-down-left-right\": {\n    \"aliases\": {\n      \"names\": [\"arrows-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0b2\"]\n      }\n    },\n    \"changes\": [\"2.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"arrow\",\n        \"arrows\",\n        \"bigger\",\n        \"enlarge\",\n        \"expand\",\n        \"fullscreen\",\n        \"move\",\n        \"position\",\n        \"reorder\",\n        \"resize\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0b2\",\n    \"label\": \"Up Down Left Right\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32v96H128V192c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V288h96v96H192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H288V288h96v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H288V128h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32v96H128V192c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V288h96v96H192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H288V288h96v32c0 12.9 7.8 24.6 19.8 29.6s25.7 2.2 34.9-6.9l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-9.2-9.2-22.9-11.9-34.9-6.9s-19.8 16.6-19.8 29.6v32H288V128h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"up-long\": {\n    \"aliases\": {\n      \"names\": [\"long-arrow-alt-up\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f30c\"]\n      }\n    },\n    \"changes\": [\"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"long-arrow-up\", \"upload\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f30c\",\n    \"label\": \"Up Long\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766329,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192H96l0 288c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32l0-288h72c9.6 0 18.2-5.7 22-14.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192H96l0 288c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32l0-288h72c9.6 0 18.2-5.7 22-14.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"up-right-and-down-left-from-center\": {\n    \"aliases\": {\n      \"names\": [\"expand-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f424\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.12.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"arrows\", \"bigger\", \"enlarge\", \"fullscreen\", \"resize\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f424\",\n    \"label\": \"Up Right And Down Left From Center\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766328,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M344 0H488c13.3 0 24 10.7 24 24V168c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87L327 41c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512H24c-13.3 0-24-10.7-24-24V344c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M344 0H488c13.3 0 24 10.7 24 24V168c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-39-39-87 87c-9.4 9.4-24.6 9.4-33.9 0l-32-32c-9.4-9.4-9.4-24.6 0-33.9l87-87L327 41c-6.9-6.9-8.9-17.2-5.2-26.2S334.3 0 344 0zM168 512H24c-13.3 0-24-10.7-24-24V344c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2l39 39 87-87c9.4-9.4 24.6-9.4 33.9 0l32 32c9.4 9.4 9.4 24.6 0 33.9l-87 87 39 39c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"up-right-from-square\": {\n    \"aliases\": {\n      \"names\": [\"external-link-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f35d\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.11.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.2.1\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"external-link\", \"new\", \"open\", \"share\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f35d\",\n    \"label\": \"Up Right From Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766330,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M352 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9L370.7 96 201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 141.3l41.4 41.4c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V32c0-17.7-14.3-32-32-32H352zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M352 0c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9L370.7 96 201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L416 141.3l41.4 41.4c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6V32c0-17.7-14.3-32-32-32H352zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"upload\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f093\"]\n      }\n    },\n    \"changes\": [\"1.0.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"hard drive\", \"import\", \"publish\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f093\",\n    \"label\": \"Upload\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767342,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"ups\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"United Parcel Service\", \"package\", \"shipping\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7e0\",\n    \"label\": \"UPS\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M103.2 303c-5.2 3.6-32.6 13.1-32.6-19V180H37.9v102.6c0 74.9 80.2 51.1 97.9 39V180h-32.6zM4 74.82v220.9c0 103.7 74.9 135.2 187.7 184.1 112.4-48.9 187.7-80.2 187.7-184.1V74.82c-116.3-61.6-281.8-49.6-375.4 0zm358.1 220.9c0 86.6-53.2 113.6-170.4 165.3-117.5-51.8-170.5-78.7-170.5-165.3v-126.4c102.3-93.8 231.6-100 340.9-89.8zm-209.6-107.4v212.8h32.7v-68.7c24.4 7.3 71.7-2.6 71.7-78.5 0-97.4-80.7-80.92-104.4-65.6zm32.7 117.3v-100.3c8.4-4.2 38.4-12.7 38.4 49.3 0 67.9-36.4 51.8-38.4 51zm79.1-86.4c.1 47.3 51.6 42.5 52.2 70.4.6 23.5-30.4 23-50.8 4.9v30.1c36.2 21.5 81.9 8.1 83.2-33.5 1.7-51.5-54.1-46.6-53.4-73.2.6-20.3 30.6-20.5 48.5-2.2v-28.4c-28.5-22-79.9-9.2-79.7 31.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"usb\": {\n    \"changes\": [\"4.5.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f287\",\n    \"label\": \"USB\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"user\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f464\", \"f2c0\"],\n        \"secondary\": [\"10f007\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"adult\",\n        \"bust\",\n        \"bust in silhouette\",\n        \"gender-neutral\",\n        \"person\",\n        \"profile\",\n        \"silhouette\",\n        \"unspecified gender\",\n        \"users-people\"\n      ]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f007\",\n    \"label\": \"User\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464H398.7c-8.9-63.3-63.3-112-129-112H178.3c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M304 128a80 80 0 1 0 -160 0 80 80 0 1 0 160 0zM96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM49.3 464H398.7c-8.9-63.3-63.3-112-129-112H178.3c-65.7 0-120.1 48.7-129 112zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"user-astronaut\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4fb\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"avatar\", \"clothing\", \"cosmonaut\", \"nasa\", \"space\", \"suit\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4fb\",\n    \"label\": \"User Astronaut\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M370.7 96.1C346.1 39.5 289.7 0 224 0S101.9 39.5 77.3 96.1C60.9 97.5 48 111.2 48 128v64c0 16.8 12.9 30.5 29.3 31.9C101.9 280.5 158.3 320 224 320s122.1-39.5 146.7-96.1c16.4-1.4 29.3-15.1 29.3-31.9V128c0-16.8-12.9-30.5-29.3-31.9zM336 144v16c0 53-43 96-96 96H208c-53 0-96-43-96-96V144c0-26.5 21.5-48 48-48H288c26.5 0 48 21.5 48 48zM189.3 162.7l-6-21.2c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6zM112.7 316.5C46.7 342.6 0 407 0 482.3C0 498.7 13.3 512 29.7 512H128V448c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64l98.3 0c16.4 0 29.7-13.3 29.7-29.7c0-75.3-46.7-139.7-112.7-165.8C303.9 338.8 265.5 352 224 352s-79.9-13.2-111.3-35.5zM176 448c-8.8 0-16 7.2-16 16v48h32V464c0-8.8-7.2-16-16-16zm96 32a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M370.7 96.1C346.1 39.5 289.7 0 224 0S101.9 39.5 77.3 96.1C60.9 97.5 48 111.2 48 128v64c0 16.8 12.9 30.5 29.3 31.9C101.9 280.5 158.3 320 224 320s122.1-39.5 146.7-96.1c16.4-1.4 29.3-15.1 29.3-31.9V128c0-16.8-12.9-30.5-29.3-31.9zM336 144v16c0 53-43 96-96 96H208c-53 0-96-43-96-96V144c0-26.5 21.5-48 48-48H288c26.5 0 48 21.5 48 48zM189.3 162.7l-6-21.2c-.9-3.3-3.9-5.5-7.3-5.5s-6.4 2.2-7.3 5.5l-6 21.2-21.2 6c-3.3 .9-5.5 3.9-5.5 7.3s2.2 6.4 5.5 7.3l21.2 6 6 21.2c.9 3.3 3.9 5.5 7.3 5.5s6.4-2.2 7.3-5.5l6-21.2 21.2-6c3.3-.9 5.5-3.9 5.5-7.3s-2.2-6.4-5.5-7.3l-21.2-6zM112.7 316.5C46.7 342.6 0 407 0 482.3C0 498.7 13.3 512 29.7 512H128V448c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64l98.3 0c16.4 0 29.7-13.3 29.7-29.7c0-75.3-46.7-139.7-112.7-165.8C303.9 338.8 265.5 352 224 352s-79.9-13.2-111.3-35.5zM176 448c-8.8 0-16 7.2-16 16v48h32V464c0-8.8-7.2-16-16-16zm96 32a16 16 0 1 0 0-32 16 16 0 1 0 0 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-check\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4fc\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4fc\",\n    \"label\": \"User Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM625 177L497 305c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L591 143c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM625 177L497 305c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L591 143c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-clock\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4fd\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4fd\",\n    \"label\": \"User Clock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767619,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304h91.4c20.6 0 40.4 3.5 58.8 9.9C323 331 320 349.1 320 368c0 59.5 29.5 112.1 74.8 144H29.7C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-80c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H512V304c0-8.8-7.2-16-16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304h91.4c20.6 0 40.4 3.5 58.8 9.9C323 331 320 349.1 320 368c0 59.5 29.5 112.1 74.8 144H29.7C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM352 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-80c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h48c8.8 0 16-7.2 16-16s-7.2-16-16-16H512V304c0-8.8-7.2-16-16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-doctor\": {\n    \"aliases\": {\n      \"names\": [\"user-md\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0f0\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.7\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"health\",\n        \"job\",\n        \"medical\",\n        \"nurse\",\n        \"occupation\",\n        \"physician\",\n        \"profile\",\n        \"surgeon\",\n        \"worker\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0f0\",\n    \"label\": \"User Doctor\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-96 55.2C54 332.9 0 401.3 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-81-54-149.4-128-171.1V362c27.6 7.1 48 32.2 48 62v40c0 8.8-7.2 16-16 16H336c-8.8 0-16-7.2-16-16s7.2-16 16-16V424c0-17.7-14.3-32-32-32s-32 14.3-32 32v24c8.8 0 16 7.2 16 16s-7.2 16-16 16H256c-8.8 0-16-7.2-16-16V424c0-29.8 20.4-54.9 48-62V304.9c-6-.6-12.1-.9-18.3-.9H178.3c-6.2 0-12.3 .3-18.3 .9v65.4c23.1 6.9 40 28.3 40 53.7c0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.4 16.9-46.8 40-53.7V311.2zM144 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-96 55.2C54 332.9 0 401.3 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-81-54-149.4-128-171.1V362c27.6 7.1 48 32.2 48 62v40c0 8.8-7.2 16-16 16H336c-8.8 0-16-7.2-16-16s7.2-16 16-16V424c0-17.7-14.3-32-32-32s-32 14.3-32 32v24c8.8 0 16 7.2 16 16s-7.2 16-16 16H256c-8.8 0-16-7.2-16-16V424c0-29.8 20.4-54.9 48-62V304.9c-6-.6-12.1-.9-18.3-.9H178.3c-6.2 0-12.3 .3-18.3 .9v65.4c23.1 6.9 40 28.3 40 53.7c0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.4 16.9-46.8 40-53.7V311.2zM144 448a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-gear\": {\n    \"aliases\": {\n      \"names\": [\"user-cog\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4fe\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4fe\",\n    \"label\": \"User Gear\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304h91.4c11.8 0 23.4 1.2 34.5 3.3c-2.1 18.5 7.4 35.6 21.8 44.8c-16.6 10.6-26.7 31.6-20 53.3c4 12.9 9.4 25.5 16.4 37.6s15.2 23.1 24.4 33c15.7 16.9 39.6 18.4 57.2 8.7v.9c0 9.2 2.7 18.5 7.9 26.3H29.7C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM436 218.2c0-7 4.5-13.3 11.3-14.8c10.5-2.4 21.5-3.7 32.7-3.7s22.2 1.3 32.7 3.7c6.8 1.5 11.3 7.8 11.3 14.8v30.6c7.9 3.4 15.4 7.7 22.3 12.8l24.9-14.3c6.1-3.5 13.7-2.7 18.5 2.4c7.6 8.1 14.3 17.2 20.1 27.2s10.3 20.4 13.5 31c2.1 6.7-1.1 13.7-7.2 17.2l-25 14.4c.4 4 .7 8.1 .7 12.3s-.2 8.2-.7 12.3l25 14.4c6.1 3.5 9.2 10.5 7.2 17.2c-3.3 10.6-7.8 21-13.5 31s-12.5 19.1-20.1 27.2c-4.8 5.1-12.5 5.9-18.5 2.4l-24.9-14.3c-6.9 5.1-14.3 9.4-22.3 12.8l0 30.6c0 7-4.5 13.3-11.3 14.8c-10.5 2.4-21.5 3.7-32.7 3.7s-22.2-1.3-32.7-3.7c-6.8-1.5-11.3-7.8-11.3-14.8V454.8c-8-3.4-15.6-7.7-22.5-12.9l-24.7 14.3c-6.1 3.5-13.7 2.7-18.5-2.4c-7.6-8.1-14.3-17.2-20.1-27.2s-10.3-20.4-13.5-31c-2.1-6.7 1.1-13.7 7.2-17.2l24.8-14.3c-.4-4.1-.7-8.2-.7-12.4s.2-8.3 .7-12.4L343.8 325c-6.1-3.5-9.2-10.5-7.2-17.2c3.3-10.6 7.7-21 13.5-31s12.5-19.1 20.1-27.2c4.8-5.1 12.4-5.9 18.5-2.4l24.8 14.3c6.9-5.1 14.5-9.4 22.5-12.9V218.2zm92.1 133.5a48.1 48.1 0 1 0 -96.1 0 48.1 48.1 0 1 0 96.1 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 0a128 128 0 1 1 0 256A128 128 0 1 1 224 0zM178.3 304h91.4c11.8 0 23.4 1.2 34.5 3.3c-2.1 18.5 7.4 35.6 21.8 44.8c-16.6 10.6-26.7 31.6-20 53.3c4 12.9 9.4 25.5 16.4 37.6s15.2 23.1 24.4 33c15.7 16.9 39.6 18.4 57.2 8.7v.9c0 9.2 2.7 18.5 7.9 26.3H29.7C13.3 512 0 498.7 0 482.3C0 383.8 79.8 304 178.3 304zM436 218.2c0-7 4.5-13.3 11.3-14.8c10.5-2.4 21.5-3.7 32.7-3.7s22.2 1.3 32.7 3.7c6.8 1.5 11.3 7.8 11.3 14.8v30.6c7.9 3.4 15.4 7.7 22.3 12.8l24.9-14.3c6.1-3.5 13.7-2.7 18.5 2.4c7.6 8.1 14.3 17.2 20.1 27.2s10.3 20.4 13.5 31c2.1 6.7-1.1 13.7-7.2 17.2l-25 14.4c.4 4 .7 8.1 .7 12.3s-.2 8.2-.7 12.3l25 14.4c6.1 3.5 9.2 10.5 7.2 17.2c-3.3 10.6-7.8 21-13.5 31s-12.5 19.1-20.1 27.2c-4.8 5.1-12.5 5.9-18.5 2.4l-24.9-14.3c-6.9 5.1-14.3 9.4-22.3 12.8l0 30.6c0 7-4.5 13.3-11.3 14.8c-10.5 2.4-21.5 3.7-32.7 3.7s-22.2-1.3-32.7-3.7c-6.8-1.5-11.3-7.8-11.3-14.8V454.8c-8-3.4-15.6-7.7-22.5-12.9l-24.7 14.3c-6.1 3.5-13.7 2.7-18.5-2.4c-7.6-8.1-14.3-17.2-20.1-27.2s-10.3-20.4-13.5-31c-2.1-6.7 1.1-13.7 7.2-17.2l24.8-14.3c-.4-4.1-.7-8.2-.7-12.4s.2-8.3 .7-12.4L343.8 325c-6.1-3.5-9.2-10.5-7.2-17.2c3.3-10.6 7.7-21 13.5-31s12.5-19.1 20.1-27.2c4.8-5.1 12.4-5.9 18.5-2.4l24.8 14.3c6.9-5.1 14.5-9.4 22.5-12.9V218.2zm92.1 133.5a48.1 48.1 0 1 0 -96.1 0 48.1 48.1 0 1 0 96.1 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-graduate\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f501\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f501\",\n    \"label\": \"User Graduate\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M219.3 .5c3.1-.6 6.3-.6 9.4 0l200 40C439.9 42.7 448 52.6 448 64s-8.1 21.3-19.3 23.5L352 102.9V160c0 70.7-57.3 128-128 128s-128-57.3-128-128V102.9L48 93.3v65.1l15.7 78.4c.9 4.7-.3 9.6-3.3 13.3s-7.6 5.9-12.4 5.9H16c-4.8 0-9.3-2.1-12.4-5.9s-4.3-8.6-3.3-13.3L16 158.4V86.6C6.5 83.3 0 74.3 0 64C0 52.6 8.1 42.7 19.3 40.5l200-40zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7H30.7C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M219.3 .5c3.1-.6 6.3-.6 9.4 0l200 40C439.9 42.7 448 52.6 448 64s-8.1 21.3-19.3 23.5L352 102.9V160c0 70.7-57.3 128-128 128s-128-57.3-128-128V102.9L48 93.3v65.1l15.7 78.4c.9 4.7-.3 9.6-3.3 13.3s-7.6 5.9-12.4 5.9H16c-4.8 0-9.3-2.1-12.4-5.9s-4.3-8.6-3.3-13.3L16 158.4V86.6C6.5 83.3 0 74.3 0 64C0 52.6 8.1 42.7 19.3 40.5l200-40zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7H30.7C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-group\": {\n    \"aliases\": {\n      \"names\": [\"user-friends\"],\n      \"unicodes\": {\n        \"composite\": [\"1f465\"],\n        \"secondary\": [\"10f500\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bust\", \"busts in silhouette\", \"silhouette\", \"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f500\",\n    \"label\": \"User Group\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM609.3 512H471.4c5.4-9.4 8.6-20.3 8.6-32v-8c0-60.7-27.1-115.2-69.8-151.8c2.4-.1 4.7-.2 7.1-.2h61.4C567.8 320 640 392.2 640 481.3c0 17-13.8 30.7-30.7 30.7zM432 256c-31 0-59-12.6-79.3-32.9C372.4 196.5 384 163.6 384 128c0-26.8-6.6-52.1-18.3-74.3C384.3 40.1 407.2 32 432 32c61.9 0 112 50.1 112 112s-50.1 112-112 112z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM609.3 512H471.4c5.4-9.4 8.6-20.3 8.6-32v-8c0-60.7-27.1-115.2-69.8-151.8c2.4-.1 4.7-.2 7.1-.2h61.4C567.8 320 640 392.2 640 481.3c0 17-13.8 30.7-30.7 30.7zM432 256c-31 0-59-12.6-79.3-32.9C372.4 196.5 384 163.6 384 128c0-26.8-6.6-52.1-18.3-74.3C384.3 40.1 407.2 32 432 32c61.9 0 112 50.1 112 112s-50.1 112-112 112z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-injured\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f728\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f728\",\n    \"label\": \"User Injured\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767619,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M240 80H342.7c-7.9-19.5-20.4-36.5-36.2-49.9L240 80zm37.7-68.2C261.3 4.2 243.2 0 224 0c-53.7 0-99.7 33.1-118.7 80h81.4l91-68.2zM224 256c70.7 0 128-57.3 128-128c0-5.4-.3-10.8-1-16H97c-.7 5.2-1 10.6-1 16c0 70.7 57.3 128 128 128zM124 312.4c-9.7 3.1-19.1 7-28 11.7V512H243.7L181.5 408.2 124 312.4zm33-7.2L204.3 384H272c44.2 0 80 35.8 80 80c0 18-6 34.6-16 48h82.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3c-7.2 0-14.3 .4-21.3 1.3zM0 482.3C0 498.7 13.3 512 29.7 512H64V345.4C24.9 378.1 0 427.3 0 482.3zM320 464c0-26.5-21.5-48-48-48H223.5l57.1 95.2C303 507.2 320 487.6 320 464z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M240 80H342.7c-7.9-19.5-20.4-36.5-36.2-49.9L240 80zm37.7-68.2C261.3 4.2 243.2 0 224 0c-53.7 0-99.7 33.1-118.7 80h81.4l91-68.2zM224 256c70.7 0 128-57.3 128-128c0-5.4-.3-10.8-1-16H97c-.7 5.2-1 10.6-1 16c0 70.7 57.3 128 128 128zM124 312.4c-9.7 3.1-19.1 7-28 11.7V512H243.7L181.5 408.2 124 312.4zm33-7.2L204.3 384H272c44.2 0 80 35.8 80 80c0 18-6 34.6-16 48h82.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3c-7.2 0-14.3 .4-21.3 1.3zM0 482.3C0 498.7 13.3 512 29.7 512H64V345.4C24.9 378.1 0 427.3 0 482.3zM320 464c0-26.5-21.5-48-48-48H223.5l57.1 95.2C303 507.2 320 487.6 320 464z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-large\": {\n    \"aliases\": {\n      \"names\": [\"user-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f406\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f406\",\n    \"label\": \"User Large\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767619,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 288A144 144 0 1 0 256 0a144 144 0 1 0 0 288zm-94.7 32C72.2 320 0 392.2 0 481.3c0 17 13.8 30.7 30.7 30.7H481.3c17 0 30.7-13.8 30.7-30.7C512 392.2 439.8 320 350.7 320H161.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 288A144 144 0 1 0 256 0a144 144 0 1 0 0 288zm-94.7 32C72.2 320 0 392.2 0 481.3c0 17 13.8 30.7 30.7 30.7H481.3c17 0 30.7-13.8 30.7-30.7C512 392.2 439.8 320 350.7 320H161.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-large-slash\": {\n    \"aliases\": {\n      \"names\": [\"user-alt-slash\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4fa\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4fa\",\n    \"label\": \"User Large Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L381.9 274c48.5-23.2 82.1-72.7 82.1-130C464 64.5 399.5 0 320 0C250.4 0 192.4 49.3 178.9 114.9L38.8 5.1zM545.5 512H528L284.3 320h-59C136.2 320 64 392.2 64 481.3c0 17 13.8 30.7 30.7 30.7H545.3l.3 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L381.9 274c48.5-23.2 82.1-72.7 82.1-130C464 64.5 399.5 0 320 0C250.4 0 192.4 49.3 178.9 114.9L38.8 5.1zM545.5 512H528L284.3 320h-59C136.2 320 64 392.2 64 481.3c0 17 13.8 30.7 30.7 30.7H545.3l.3 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-lock\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f502\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f502\",\n    \"label\": \"User Lock\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H392.6c-5.4-9.4-8.6-20.3-8.6-32V352c0-2.1 .1-4.2 .3-6.3c-31-26-71-41.7-114.6-41.7H178.3zM528 240c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H392.6c-5.4-9.4-8.6-20.3-8.6-32V352c0-2.1 .1-4.2 .3-6.3c-31-26-71-41.7-114.6-41.7H178.3zM528 240c17.7 0 32 14.3 32 32v48H496V272c0-17.7 14.3-32 32-32zm-80 32v48c-17.7 0-32 14.3-32 32V480c0 17.7 14.3 32 32 32H608c17.7 0 32-14.3 32-32V352c0-17.7-14.3-32-32-32V272c0-44.2-35.8-80-80-80s-80 35.8-80 80z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-minus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f503\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"delete\", \"negative\", \"remove\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f503\",\n    \"label\": \"User Minus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM472 200H616c13.3 0 24 10.7 24 24s-10.7 24-24 24H472c-13.3 0-24-10.7-24-24s10.7-24 24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM472 200H616c13.3 0 24 10.7 24 24s-10.7 24-24 24H472c-13.3 0-24-10.7-24-24s10.7-24 24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-ninja\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f977\"],\n        \"secondary\": [\"10f504\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"assassin\",\n        \"avatar\",\n        \"dangerous\",\n        \"deadly\",\n        \"fighter\",\n        \"hidden\",\n        \"ninja\",\n        \"sneaky\",\n        \"stealth\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f504\",\n    \"label\": \"User Ninja\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 256c-57.2 0-105.6-37.5-122-89.3c-1.1 1.3-2.2 2.6-3.5 3.8c-15.8 15.8-38.8 20.7-53.6 22.1c-8.1 .8-14.6-5.7-13.8-13.8c1.4-14.7 6.3-37.8 22.1-53.6c5.8-5.8 12.6-10.1 19.6-13.4c-7-3.2-13.8-7.6-19.6-13.4C37.4 82.7 32.6 59.7 31.1 44.9c-.8-8.1 5.7-14.6 13.8-13.8c14.7 1.4 37.8 6.3 53.6 22.1c4.8 4.8 8.7 10.4 11.7 16.1C131.4 28.2 174.4 0 224 0c70.7 0 128 57.3 128 128s-57.3 128-128 128zM0 482.3C0 399.5 56.4 330 132.8 309.9c6-1.6 12.2 .9 15.9 5.8l62.5 83.3c6.4 8.5 19.2 8.5 25.6 0l62.5-83.3c3.7-4.9 9.9-7.4 15.9-5.8C391.6 330 448 399.5 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM160 96c-8.8 0-16 7.2-16 16s7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 256c-57.2 0-105.6-37.5-122-89.3c-1.1 1.3-2.2 2.6-3.5 3.8c-15.8 15.8-38.8 20.7-53.6 22.1c-8.1 .8-14.6-5.7-13.8-13.8c1.4-14.7 6.3-37.8 22.1-53.6c5.8-5.8 12.6-10.1 19.6-13.4c-7-3.2-13.8-7.6-19.6-13.4C37.4 82.7 32.6 59.7 31.1 44.9c-.8-8.1 5.7-14.6 13.8-13.8c14.7 1.4 37.8 6.3 53.6 22.1c4.8 4.8 8.7 10.4 11.7 16.1C131.4 28.2 174.4 0 224 0c70.7 0 128 57.3 128 128s-57.3 128-128 128zM0 482.3C0 399.5 56.4 330 132.8 309.9c6-1.6 12.2 .9 15.9 5.8l62.5 83.3c6.4 8.5 19.2 8.5 25.6 0l62.5-83.3c3.7-4.9 9.9-7.4 15.9-5.8C391.6 330 448 399.5 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM160 96c-8.8 0-16 7.2-16 16s7.2 16 16 16H288c8.8 0 16-7.2 16-16s-7.2-16-16-16H160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-nurse\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f82f\"]\n      }\n    },\n    \"changes\": [\"5.7.0\", \"5.12.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"covid-19\",\n        \"doctor\",\n        \"health\",\n        \"md\",\n        \"medical\",\n        \"midwife\",\n        \"physician\",\n        \"practitioner\",\n        \"surgeon\",\n        \"worker\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f82f\",\n    \"label\": \"User Nurse\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767619,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M96 128V70.2c0-13.3 8.3-25.3 20.8-30l96-36c7.2-2.7 15.2-2.7 22.5 0l96 36c12.5 4.7 20.8 16.6 20.8 30V128h-.3c.2 2.6 .3 5.3 .3 8v40c0 70.7-57.3 128-128 128s-128-57.3-128-128V136c0-2.7 .1-5.4 .3-8H96zm48 48c0 44.2 35.8 80 80 80s80-35.8 80-80V160H144v16zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7H30.7C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6zM208 48V64H192c-4.4 0-8 3.6-8 8V88c0 4.4 3.6 8 8 8h16v16c0 4.4 3.6 8 8 8h16c4.4 0 8-3.6 8-8V96h16c4.4 0 8-3.6 8-8V72c0-4.4-3.6-8-8-8H240V48c0-4.4-3.6-8-8-8H216c-4.4 0-8 3.6-8 8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M96 128V70.2c0-13.3 8.3-25.3 20.8-30l96-36c7.2-2.7 15.2-2.7 22.5 0l96 36c12.5 4.7 20.8 16.6 20.8 30V128h-.3c.2 2.6 .3 5.3 .3 8v40c0 70.7-57.3 128-128 128s-128-57.3-128-128V136c0-2.7 .1-5.4 .3-8H96zm48 48c0 44.2 35.8 80 80 80s80-35.8 80-80V160H144v16zM111.9 327.7c10.5-3.4 21.8 .4 29.4 8.5l71 75.5c6.3 6.7 17 6.7 23.3 0l71-75.5c7.6-8.1 18.9-11.9 29.4-8.5C401 348.6 448 409.4 448 481.3c0 17-13.8 30.7-30.7 30.7H30.7C13.8 512 0 498.2 0 481.3c0-71.9 47-132.7 111.9-153.6zM208 48V64H192c-4.4 0-8 3.6-8 8V88c0 4.4 3.6 8 8 8h16v16c0 4.4 3.6 8 8 8h16c4.4 0 8-3.6 8-8V96h16c4.4 0 8-3.6 8-8V72c0-4.4-3.6-8-8-8H240V48c0-4.4-3.6-8-8-8H216c-4.4 0-8 3.6-8 8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-pen\": {\n    \"aliases\": {\n      \"names\": [\"user-edit\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f4ff\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4ff\",\n    \"label\": \"User Pen\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H322.8c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7l40.3-40.3c-32.1-31-75.7-50.1-123.9-50.1H178.3zm435.5-68.3c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM375.9 417c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L576.1 358.7l-71-71L375.9 417z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H322.8c-3.1-8.8-3.7-18.4-1.4-27.8l15-60.1c2.8-11.3 8.6-21.5 16.8-29.7l40.3-40.3c-32.1-31-75.7-50.1-123.9-50.1H178.3zm435.5-68.3c-15.6-15.6-40.9-15.6-56.6 0l-29.4 29.4 71 71 29.4-29.4c15.6-15.6 15.6-40.9 0-56.6l-14.4-14.4zM375.9 417c-4.1 4.1-7 9.2-8.4 14.9l-15 60.1c-1.4 5.5 .2 11.2 4.2 15.2s9.7 5.6 15.2 4.2l60.1-15c5.6-1.4 10.8-4.3 14.9-8.4L576.1 358.7l-71-71L375.9 417z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-plus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f234\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"avatar\", \"positive\", \"sign up\", \"signup\", \"team\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f234\",\n    \"label\": \"User Plus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM504 312V248H440c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V136c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM504 312V248H440c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V136c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H552v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-secret\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f575\"],\n        \"secondary\": [\"10f21b\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"detective\", \"sleuth\", \"spy\", \"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f21b\",\n    \"label\": \"User Secret\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48H45.4C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4H342.7c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208H267.6c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2H168c-22.1 0-40-17.9-40-40V169.6c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4V184c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 16c-6.7 0-10.8-2.8-15.5-6.1C201.9 5.4 194 0 176 0c-30.5 0-52 43.7-66 89.4C62.7 98.1 32 112.2 32 128c0 14.3 25 27.1 64.6 35.9c-.4 4-.6 8-.6 12.1c0 17 3.3 33.2 9.3 48H45.4C38 224 32 230 32 237.4c0 1.7 .3 3.4 1 5l38.8 96.9C28.2 371.8 0 423.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7c0-58.5-28.2-110.4-71.7-143L415 242.4c.6-1.6 1-3.3 1-5c0-7.4-6-13.4-13.4-13.4H342.7c6-14.8 9.3-31 9.3-48c0-4.1-.2-8.1-.6-12.1C391 155.1 416 142.3 416 128c0-15.8-30.7-29.9-78-38.6C324 43.7 302.5 0 272 0c-18 0-25.9 5.4-32.5 9.9c-4.8 3.3-8.8 6.1-15.5 6.1zm56 208H267.6c-16.5 0-31.1-10.6-36.3-26.2c-2.3-7-12.2-7-14.5 0c-5.2 15.6-19.9 26.2-36.3 26.2H168c-22.1 0-40-17.9-40-40V169.6c28.2 4.1 61 6.4 96 6.4s67.8-2.3 96-6.4V184c0 22.1-17.9 40-40 40zm-88 96l16 32L176 480 128 288l64 32zm128-32L272 480 240 352l16-32 64-32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-shield\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f505\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"protect\", \"safety\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f505\",\n    \"label\": \"User Shield\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c1.8 0 3.5-.2 5.3-.5c-76.3-55.1-99.8-141-103.1-200.2c-16.1-4.8-33.1-7.3-50.7-7.3H178.3zm308.8-78.3l-120 48C358 277.4 352 286.2 352 296c0 63.3 25.9 168.8 134.8 214.2c5.9 2.5 12.6 2.5 18.5 0C614.1 464.8 640 359.3 640 296c0-9.8-6-18.6-15.1-22.3l-120-48c-5.7-2.3-12.1-2.3-17.8 0zM591.4 312c-3.9 50.7-27.2 116.7-95.4 149.7V273.8L591.4 312z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c1.8 0 3.5-.2 5.3-.5c-76.3-55.1-99.8-141-103.1-200.2c-16.1-4.8-33.1-7.3-50.7-7.3H178.3zm308.8-78.3l-120 48C358 277.4 352 286.2 352 296c0 63.3 25.9 168.8 134.8 214.2c5.9 2.5 12.6 2.5 18.5 0C614.1 464.8 640 359.3 640 296c0-9.8-6-18.6-15.1-22.3l-120-48c-5.7-2.3-12.1-2.3-17.8 0zM591.4 312c-3.9 50.7-27.2 116.7-95.4 149.7V273.8L591.4 312z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f506\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ban\", \"delete\", \"remove\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f506\",\n    \"label\": \"User Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L353.3 251.6C407.9 237 448 187.2 448 128C448 57.3 390.7 0 320 0C250.2 0 193.5 55.8 192 125.2L38.8 5.1zM264.3 304.3C170.5 309.4 96 387.2 96 482.3c0 16.4 13.3 29.7 29.7 29.7H514.3c3.9 0 7.6-.7 11-2.1l-261-205.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L353.3 251.6C407.9 237 448 187.2 448 128C448 57.3 390.7 0 320 0C250.2 0 193.5 55.8 192 125.2L38.8 5.1zM264.3 304.3C170.5 309.4 96 387.2 96 482.3c0 16.4 13.3 29.7 29.7 29.7H514.3c3.9 0 7.6-.7 11-2.1l-261-205.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-tag\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f507\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f507\",\n    \"label\": \"User Tag\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c10 0 18.8-4.9 24.2-12.5l-99.2-99.2c-14.9-14.9-23.3-35.1-23.3-56.1v-33c-15.9-4.7-32.8-7.2-50.3-7.2H178.3zM384 224c-17.7 0-32 14.3-32 32v82.7c0 17 6.7 33.3 18.7 45.3L478.1 491.3c18.7 18.7 49.1 18.7 67.9 0l73.4-73.4c18.7-18.7 18.7-49.1 0-67.9L512 242.7c-12-12-28.3-18.7-45.3-18.7H384zm24 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c10 0 18.8-4.9 24.2-12.5l-99.2-99.2c-14.9-14.9-23.3-35.1-23.3-56.1v-33c-15.9-4.7-32.8-7.2-50.3-7.2H178.3zM384 224c-17.7 0-32 14.3-32 32v82.7c0 17 6.7 33.3 18.7 45.3L478.1 491.3c18.7 18.7 49.1 18.7 67.9 0l73.4-73.4c18.7-18.7 18.7-49.1 0-67.9L512 242.7c-12-12-28.3-18.7-45.3-18.7H384zm24 80a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-tie\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f508\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"avatar\",\n        \"business\",\n        \"clothing\",\n        \"formal\",\n        \"professional\",\n        \"suit\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f508\",\n    \"label\": \"User Tie\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224 256A128 128 0 1 1 224 0a128 128 0 1 1 0 256zM209.1 359.2l-18.6-31c-6.4-10.7 1.3-24.2 13.7-24.2H224h19.7c12.4 0 20.1 13.6 13.7 24.2l-18.6 31 33.4 123.9 36-146.9c2-8.1 9.8-13.4 17.9-11.3c70.1 17.6 121.9 81 121.9 156.4c0 17-13.8 30.7-30.7 30.7H285.5c-2.1 0-4-.4-5.8-1.1l.3 1.1H168l.3-1.1c-1.8 .7-3.8 1.1-5.8 1.1H30.7C13.8 512 0 498.2 0 481.3c0-75.5 51.9-138.9 121.9-156.4c8.1-2 15.9 3.3 17.9 11.3l36 146.9 33.4-123.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224 256A128 128 0 1 1 224 0a128 128 0 1 1 0 256zM209.1 359.2l-18.6-31c-6.4-10.7 1.3-24.2 13.7-24.2H224h19.7c12.4 0 20.1 13.6 13.7 24.2l-18.6 31 33.4 123.9 36-146.9c2-8.1 9.8-13.4 17.9-11.3c70.1 17.6 121.9 81 121.9 156.4c0 17-13.8 30.7-30.7 30.7H285.5c-2.1 0-4-.4-5.8-1.1l.3 1.1H168l.3-1.1c-1.8 .7-3.8 1.1-5.8 1.1H30.7C13.8 512 0 498.2 0 481.3c0-75.5 51.9-138.9 121.9-156.4c8.1-2 15.9 3.3 17.9 11.3l36 146.9 33.4-123.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"user-xmark\": {\n    \"aliases\": {\n      \"names\": [\"user-times\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f235\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"archive\", \"delete\", \"remove\", \"x\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f235\",\n    \"label\": \"User Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM471 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM471 143c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f0c0\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.3\",\n      \"5.0.11\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0c0\",\n    \"label\": \"Users\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144 0a80 80 0 1 1 0 160A80 80 0 1 1 144 0zM512 0a80 80 0 1 1 0 160A80 80 0 1 1 512 0zM0 298.7C0 239.8 47.8 192 106.7 192h42.7c15.9 0 31 3.5 44.6 9.7c-1.3 7.2-1.9 14.7-1.9 22.3c0 38.2 16.8 72.5 43.3 96c-.2 0-.4 0-.7 0H21.3C9.6 320 0 310.4 0 298.7zM405.3 320c-.2 0-.4 0-.7 0c26.6-23.5 43.3-57.8 43.3-96c0-7.6-.7-15-1.9-22.3c13.6-6.3 28.7-9.7 44.6-9.7h42.7C592.2 192 640 239.8 640 298.7c0 11.8-9.6 21.3-21.3 21.3H405.3zM224 224a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zM128 485.3C128 411.7 187.7 352 261.3 352H378.7C452.3 352 512 411.7 512 485.3c0 14.7-11.9 26.7-26.7 26.7H154.7c-14.7 0-26.7-11.9-26.7-26.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-between-lines\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"covered\", \"group\", \"people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e591\",\n    \"label\": \"Users Between Lines\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 24C0 10.7 10.7 0 24 0H616c13.3 0 24 10.7 24 24s-10.7 24-24 24H24C10.7 48 0 37.3 0 24zM0 488c0-13.3 10.7-24 24-24H616c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24zM83.2 160a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 320c0-35.3 28.7-64 64-64h96c12.2 0 23.7 3.4 33.4 9.4c-37.2 15.1-65.6 47.2-75.8 86.6H64c-17.7 0-32-14.3-32-32zm461.6 32c-10.3-40.1-39.6-72.6-77.7-87.4c9.4-5.5 20.4-8.6 32.1-8.6h96c35.3 0 64 28.7 64 64c0 17.7-14.3 32-32 32H493.6zM391.2 290.4c32.1 7.4 58.1 30.9 68.9 61.6c3.5 10 5.5 20.8 5.5 32c0 17.7-14.3 32-32 32h-224c-17.7 0-32-14.3-32-32c0-11.2 1.9-22 5.5-32c10.5-29.7 35.3-52.8 66.1-60.9c7.8-2.1 16-3.1 24.5-3.1h96c7.4 0 14.7 .8 21.6 2.4zm44-130.4a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM321.6 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 24C0 10.7 10.7 0 24 0H616c13.3 0 24 10.7 24 24s-10.7 24-24 24H24C10.7 48 0 37.3 0 24zM0 488c0-13.3 10.7-24 24-24H616c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24zM83.2 160a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM32 320c0-35.3 28.7-64 64-64h96c12.2 0 23.7 3.4 33.4 9.4c-37.2 15.1-65.6 47.2-75.8 86.6H64c-17.7 0-32-14.3-32-32zm461.6 32c-10.3-40.1-39.6-72.6-77.7-87.4c9.4-5.5 20.4-8.6 32.1-8.6h96c35.3 0 64 28.7 64 64c0 17.7-14.3 32-32 32H493.6zM391.2 290.4c32.1 7.4 58.1 30.9 68.9 61.6c3.5 10 5.5 20.8 5.5 32c0 17.7-14.3 32-32 32h-224c-17.7 0-32-14.3-32-32c0-11.2 1.9-22 5.5-32c10.5-29.7 35.3-52.8 66.1-60.9c7.8-2.1 16-3.1 24.5-3.1h96c7.4 0 14.7 .8 21.6 2.4zm44-130.4a64 64 0 1 1 128 0 64 64 0 1 1 -128 0zM321.6 96a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-gear\": {\n    \"aliases\": {\n      \"names\": [\"users-cog\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f509\"]\n      }\n    },\n    \"changes\": [\"5.0.11\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f509\",\n    \"label\": \"Users Gear\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767619,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144 160A80 80 0 1 0 144 0a80 80 0 1 0 0 160zm368 0A80 80 0 1 0 512 0a80 80 0 1 0 0 160zM0 298.7C0 310.4 9.6 320 21.3 320H234.7c.2 0 .4 0 .7 0c-26.6-23.5-43.3-57.8-43.3-96c0-7.6 .7-15 1.9-22.3c-13.6-6.3-28.7-9.7-44.6-9.7H106.7C47.8 192 0 239.8 0 298.7zM320 320c24 0 45.9-8.8 62.7-23.3c2.5-3.7 5.2-7.3 8-10.7c2.7-3.3 5.7-6.1 9-8.3C410 262.3 416 243.9 416 224c0-53-43-96-96-96s-96 43-96 96s43 96 96 96zm65.4 60.2c-10.3-5.9-18.1-16.2-20.8-28.2H261.3C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7H455.2c-2.1-5.2-3.2-10.9-3.2-16.4v-3c-1.3-.7-2.7-1.5-4-2.3l-2.6 1.5c-16.8 9.7-40.5 8-54.7-9.7c-4.5-5.6-8.6-11.5-12.4-17.6l-.1-.2-.1-.2-2.4-4.1-.1-.2-.1-.2c-3.4-6.2-6.4-12.6-9-19.3c-8.2-21.2 2.2-42.6 19-52.3l2.7-1.5c0-.8 0-1.5 0-2.3s0-1.5 0-2.3l-2.7-1.5zM533.3 192H490.7c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 17.4-3.5 33.9-9.7 49c2.5 .9 4.9 2 7.1 3.3l2.6 1.5c1.3-.8 2.6-1.6 4-2.3v-3c0-19.4 13.3-39.1 35.8-42.6c7.9-1.2 16-1.9 24.2-1.9s16.3 .6 24.2 1.9c22.5 3.5 35.8 23.2 35.8 42.6v3c1.3 .7 2.7 1.5 4 2.3l2.6-1.5c16.8-9.7 40.5-8 54.7 9.7c2.3 2.8 4.5 5.8 6.6 8.7c-2.1-57.1-49-102.7-106.6-102.7zm91.3 163.9c6.3-3.6 9.5-11.1 6.8-18c-2.1-5.5-4.6-10.8-7.4-15.9l-2.3-4c-3.1-5.1-6.5-9.9-10.2-14.5c-4.6-5.7-12.7-6.7-19-3L574.4 311c-8.9-7.6-19.1-13.6-30.4-17.6v-21c0-7.3-4.9-13.8-12.1-14.9c-6.5-1-13.1-1.5-19.9-1.5s-13.4 .5-19.9 1.5c-7.2 1.1-12.1 7.6-12.1 14.9v21c-11.2 4-21.5 10-30.4 17.6l-18.2-10.5c-6.3-3.6-14.4-2.6-19 3c-3.7 4.6-7.1 9.5-10.2 14.6l-2.3 3.9c-2.8 5.1-5.3 10.4-7.4 15.9c-2.6 6.8 .5 14.3 6.8 17.9l18.2 10.5c-1 5.7-1.6 11.6-1.6 17.6s.6 11.9 1.6 17.5l-18.2 10.5c-6.3 3.6-9.5 11.1-6.8 17.9c2.1 5.5 4.6 10.7 7.4 15.8l2.4 4.1c3 5.1 6.4 9.9 10.1 14.5c4.6 5.7 12.7 6.7 19 3L449.6 457c8.9 7.6 19.2 13.6 30.4 17.6v21c0 7.3 4.9 13.8 12.1 14.9c6.5 1 13.1 1.5 19.9 1.5s13.4-.5 19.9-1.5c7.2-1.1 12.1-7.6 12.1-14.9v-21c11.2-4 21.5-10 30.4-17.6l18.2 10.5c6.3 3.6 14.4 2.6 19-3c3.7-4.6 7.1-9.4 10.1-14.5l2.4-4.2c2.8-5.1 5.3-10.3 7.4-15.8c2.6-6.8-.5-14.3-6.8-17.9l-18.2-10.5c1-5.7 1.6-11.6 1.6-17.5s-.6-11.9-1.6-17.6l18.2-10.5zM472 384a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144 160A80 80 0 1 0 144 0a80 80 0 1 0 0 160zm368 0A80 80 0 1 0 512 0a80 80 0 1 0 0 160zM0 298.7C0 310.4 9.6 320 21.3 320H234.7c.2 0 .4 0 .7 0c-26.6-23.5-43.3-57.8-43.3-96c0-7.6 .7-15 1.9-22.3c-13.6-6.3-28.7-9.7-44.6-9.7H106.7C47.8 192 0 239.8 0 298.7zM320 320c24 0 45.9-8.8 62.7-23.3c2.5-3.7 5.2-7.3 8-10.7c2.7-3.3 5.7-6.1 9-8.3C410 262.3 416 243.9 416 224c0-53-43-96-96-96s-96 43-96 96s43 96 96 96zm65.4 60.2c-10.3-5.9-18.1-16.2-20.8-28.2H261.3C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7H455.2c-2.1-5.2-3.2-10.9-3.2-16.4v-3c-1.3-.7-2.7-1.5-4-2.3l-2.6 1.5c-16.8 9.7-40.5 8-54.7-9.7c-4.5-5.6-8.6-11.5-12.4-17.6l-.1-.2-.1-.2-2.4-4.1-.1-.2-.1-.2c-3.4-6.2-6.4-12.6-9-19.3c-8.2-21.2 2.2-42.6 19-52.3l2.7-1.5c0-.8 0-1.5 0-2.3s0-1.5 0-2.3l-2.7-1.5zM533.3 192H490.7c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 17.4-3.5 33.9-9.7 49c2.5 .9 4.9 2 7.1 3.3l2.6 1.5c1.3-.8 2.6-1.6 4-2.3v-3c0-19.4 13.3-39.1 35.8-42.6c7.9-1.2 16-1.9 24.2-1.9s16.3 .6 24.2 1.9c22.5 3.5 35.8 23.2 35.8 42.6v3c1.3 .7 2.7 1.5 4 2.3l2.6-1.5c16.8-9.7 40.5-8 54.7 9.7c2.3 2.8 4.5 5.8 6.6 8.7c-2.1-57.1-49-102.7-106.6-102.7zm91.3 163.9c6.3-3.6 9.5-11.1 6.8-18c-2.1-5.5-4.6-10.8-7.4-15.9l-2.3-4c-3.1-5.1-6.5-9.9-10.2-14.5c-4.6-5.7-12.7-6.7-19-3L574.4 311c-8.9-7.6-19.1-13.6-30.4-17.6v-21c0-7.3-4.9-13.8-12.1-14.9c-6.5-1-13.1-1.5-19.9-1.5s-13.4 .5-19.9 1.5c-7.2 1.1-12.1 7.6-12.1 14.9v21c-11.2 4-21.5 10-30.4 17.6l-18.2-10.5c-6.3-3.6-14.4-2.6-19 3c-3.7 4.6-7.1 9.5-10.2 14.6l-2.3 3.9c-2.8 5.1-5.3 10.4-7.4 15.9c-2.6 6.8 .5 14.3 6.8 17.9l18.2 10.5c-1 5.7-1.6 11.6-1.6 17.6s.6 11.9 1.6 17.5l-18.2 10.5c-6.3 3.6-9.5 11.1-6.8 17.9c2.1 5.5 4.6 10.7 7.4 15.8l2.4 4.1c3 5.1 6.4 9.9 10.1 14.5c4.6 5.7 12.7 6.7 19 3L449.6 457c8.9 7.6 19.2 13.6 30.4 17.6v21c0 7.3 4.9 13.8 12.1 14.9c6.5 1 13.1 1.5 19.9 1.5s13.4-.5 19.9-1.5c7.2-1.1 12.1-7.6 12.1-14.9v-21c11.2-4 21.5-10 30.4-17.6l18.2 10.5c6.3 3.6 14.4 2.6 19-3c3.7-4.6 7.1-9.4 10.1-14.5l2.4-4.2c2.8-5.1 5.3-10.3 7.4-15.8c2.6-6.8-.5-14.3-6.8-17.9l-18.2-10.5c1-5.7 1.6-11.6 1.6-17.5s-.6-11.9-1.6-17.6l18.2-10.5zM472 384a40 40 0 1 1 80 0 40 40 0 1 1 -80 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-line\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"group\", \"need\", \"people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e592\",\n    \"label\": \"Users Line\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M211.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM32 256c0 17.7 14.3 32 32 32h85.6c10.1-39.4 38.6-71.5 75.8-86.6c-9.7-6-21.2-9.4-33.4-9.4H96c-35.3 0-64 28.7-64 64zm461.6 32H576c17.7 0 32-14.3 32-32c0-35.3-28.7-64-64-64H448c-11.7 0-22.7 3.1-32.1 8.6c38.1 14.8 67.4 47.3 77.7 87.4zM391.2 226.4c-6.9-1.6-14.2-2.4-21.6-2.4h-96c-8.5 0-16.7 1.1-24.5 3.1c-30.8 8.1-55.6 31.1-66.1 60.9c-3.5 10-5.5 20.8-5.5 32c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32c0-11.2-1.9-22-5.5-32c-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM321.6 192a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M211.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM32 256c0 17.7 14.3 32 32 32h85.6c10.1-39.4 38.6-71.5 75.8-86.6c-9.7-6-21.2-9.4-33.4-9.4H96c-35.3 0-64 28.7-64 64zm461.6 32H576c17.7 0 32-14.3 32-32c0-35.3-28.7-64-64-64H448c-11.7 0-22.7 3.1-32.1 8.6c38.1 14.8 67.4 47.3 77.7 87.4zM391.2 226.4c-6.9-1.6-14.2-2.4-21.6-2.4h-96c-8.5 0-16.7 1.1-24.5 3.1c-30.8 8.1-55.6 31.1-66.1 60.9c-3.5 10-5.5 20.8-5.5 32c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32c0-11.2-1.9-22-5.5-32c-10.8-30.7-36.8-54.2-68.9-61.6zM563.2 96a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM321.6 192a80 80 0 1 0 0-160 80 80 0 1 0 0 160zM32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-rays\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"affected\", \"focused\", \"group\", \"people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e593\",\n    \"label\": \"Users Rays\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M41 7C31.6-2.3 16.4-2.3 7 7S-2.3 31.6 7 41l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L41 7zM599 7L527 79c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0zM7 505c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 471c-9.4 9.4-9.4 24.6 0 33.9zm592 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM212.1 336c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24H408c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-.5-1.4-1-2.7-1.6-4c-9.4-22.3-29.8-38.9-54.3-43c-3.9-.7-7.9-1-12-1H280c-4.1 0-8.1 .3-12 1c-.8 .1-1.7 .3-2.5 .5c-24.9 5.1-45.1 23-53.4 46.5zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7h56.1c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4H149.3zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3H421.3c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6h56.1zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M41 7C31.6-2.3 16.4-2.3 7 7S-2.3 31.6 7 41l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L41 7zM599 7L527 79c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0zM7 505c9.4 9.4 24.6 9.4 33.9 0l72-72c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 471c-9.4 9.4-9.4 24.6 0 33.9zm592 0c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-72-72c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l72 72zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zM212.1 336c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24H408c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-.5-1.4-1-2.7-1.6-4c-9.4-22.3-29.8-38.9-54.3-43c-3.9-.7-7.9-1-12-1H280c-4.1 0-8.1 .3-12 1c-.8 .1-1.7 .3-2.5 .5c-24.9 5.1-45.1 23-53.4 46.5zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7h56.1c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4H149.3zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3H421.3c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6h56.1zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-rectangle\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"focus\", \"group\", \"people\", \"reached\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e594\",\n    \"label\": \"Users Rectangle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H544c53 0 96-43 96-96V96c0-53-43-96-96-96H96zM64 96c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32V416c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V96zm159.8 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM96 309.3c0 14.7 11.9 26.7 26.7 26.7h56.1c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4H149.3C119.9 256 96 279.9 96 309.3zM461.2 336h56.1c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3H421.3c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6zM372 289c-3.9-.7-7.9-1-12-1H280c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24H408c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-8.6-24.3-29.9-42.6-55.9-47zM512 176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H544c53 0 96-43 96-96V96c0-53-43-96-96-96H96zM64 96c0-17.7 14.3-32 32-32H544c17.7 0 32 14.3 32 32V416c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V96zm159.8 80a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM96 309.3c0 14.7 11.9 26.7 26.7 26.7h56.1c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4H149.3C119.9 256 96 279.9 96 309.3zM461.2 336h56.1c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3H421.3c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6zM372 289c-3.9-.7-7.9-1-12-1H280c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24H408c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24c-8.6-24.3-29.9-42.6-55.9-47zM512 176a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM320 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e073\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e073\",\n    \"label\": \"Users Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767621,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L440.6 320H618.7c11.8 0 21.3-9.6 21.3-21.3C640 239.8 592.2 192 533.3 192H490.7c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 30.2-10.5 58-28 79.9l-25.2-19.7C408.1 267.7 416 246.8 416 224c0-53-43-96-96-96c-31.1 0-58.7 14.8-76.3 37.7l-40.6-31.8c13-14.2 20.9-33.1 20.9-53.9c0-44.2-35.8-80-80-80C116.3 0 91.9 14.1 77.5 35.5L38.8 5.1zM106.7 192C47.8 192 0 239.8 0 298.7C0 310.4 9.6 320 21.3 320H234.7c.2 0 .4 0 .7 0c-20.6-18.2-35.2-42.8-40.8-70.8L121.8 192H106.7zM261.3 352C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7H485.3c10.5 0 19.5-6 23.9-14.8L324.9 352H261.3zM512 160A80 80 0 1 0 512 0a80 80 0 1 0 0 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L440.6 320H618.7c11.8 0 21.3-9.6 21.3-21.3C640 239.8 592.2 192 533.3 192H490.7c-15.9 0-31 3.5-44.6 9.7c1.3 7.2 1.9 14.7 1.9 22.3c0 30.2-10.5 58-28 79.9l-25.2-19.7C408.1 267.7 416 246.8 416 224c0-53-43-96-96-96c-31.1 0-58.7 14.8-76.3 37.7l-40.6-31.8c13-14.2 20.9-33.1 20.9-53.9c0-44.2-35.8-80-80-80C116.3 0 91.9 14.1 77.5 35.5L38.8 5.1zM106.7 192C47.8 192 0 239.8 0 298.7C0 310.4 9.6 320 21.3 320H234.7c.2 0 .4 0 .7 0c-20.6-18.2-35.2-42.8-40.8-70.8L121.8 192H106.7zM261.3 352C187.7 352 128 411.7 128 485.3c0 14.7 11.9 26.7 26.7 26.7H485.3c10.5 0 19.5-6 23.9-14.8L324.9 352H261.3zM512 160A80 80 0 1 0 512 0a80 80 0 1 0 0 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"users-viewfinder\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"focus\", \"group\", \"people\", \"targeted\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e595\",\n    \"label\": \"Users Viewfinder\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767620,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M48 48h88c13.3 0 24-10.7 24-24s-10.7-24-24-24H32C14.3 0 0 14.3 0 32V136c0 13.3 10.7 24 24 24s24-10.7 24-24V48zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7h56.1c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4H149.3zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3H421.3c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6h56.1zm-89.4 0c-8.6-24.3-29.9-42.6-55.9-47c-3.9-.7-7.9-1-12-1H280c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24H408c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-32a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM504 48h88v88c0 13.3 10.7 24 24 24s24-10.7 24-24V32c0-17.7-14.3-32-32-32H504c-13.3 0-24 10.7-24 24s10.7 24 24 24zM48 464V376c0-13.3-10.7-24-24-24s-24 10.7-24 24V480c0 17.7 14.3 32 32 32H136c13.3 0 24-10.7 24-24s-10.7-24-24-24H48zm456 0c-13.3 0-24 10.7-24 24s10.7 24 24 24H608c17.7 0 32-14.3 32-32V376c0-13.3-10.7-24-24-24s-24 10.7-24 24v88H504z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M48 48h88c13.3 0 24-10.7 24-24s-10.7-24-24-24H32C14.3 0 0 14.3 0 32V136c0 13.3 10.7 24 24 24s24-10.7 24-24V48zM175.8 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-26.5 32C119.9 256 96 279.9 96 309.3c0 14.7 11.9 26.7 26.7 26.7h56.1c8-34.1 32.8-61.7 65.2-73.6c-7.5-4.1-16.2-6.4-25.3-6.4H149.3zm368 80c14.7 0 26.7-11.9 26.7-26.7c0-29.5-23.9-53.3-53.3-53.3H421.3c-9.2 0-17.8 2.3-25.3 6.4c32.4 11.9 57.2 39.5 65.2 73.6h56.1zm-89.4 0c-8.6-24.3-29.9-42.6-55.9-47c-3.9-.7-7.9-1-12-1H280c-4.1 0-8.1 .3-12 1c-26 4.4-47.3 22.7-55.9 47c-2.7 7.5-4.1 15.6-4.1 24c0 13.3 10.7 24 24 24H408c13.3 0 24-10.7 24-24c0-8.4-1.4-16.5-4.1-24zM464 224a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm-80-32a64 64 0 1 0 -128 0 64 64 0 1 0 128 0zM504 48h88v88c0 13.3 10.7 24 24 24s24-10.7 24-24V32c0-17.7-14.3-32-32-32H504c-13.3 0-24 10.7-24 24s10.7 24 24 24zM48 464V376c0-13.3-10.7-24-24-24s-24 10.7-24 24V480c0 17.7 14.3 32 32 32H136c13.3 0 24-10.7 24-24s-10.7-24-24-24H48zm456 0c-13.3 0-24 10.7-24 24s10.7 24 24 24H608c17.7 0 32-14.3 32-32V376c0-13.3-10.7-24-24-24s-24 10.7-24 24v88H504z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"usps\": {\n    \"changes\": [\"5.6.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"american\", \"package\", \"shipping\", \"usa\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7e1\",\n    \"label\": \"United States Postal Service\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M460.3 241.7c25.8-41.3 15.2-48.8-11.7-48.8h-27c-.1 0-1.5-1.4-10.9 8-11.2 5.6-37.9 6.3-37.9 8.7 0 4.5 70.3-3.1 88.1 0 9.5 1.5-1.5 20.4-4.4 32-.5 4.5 2.4 2.3 3.8.1zm-112.1 22.6c64-21.3 97.3-23.9 102-26.2 4.4-2.9-4.4-6.6-26.2-5.8-51.7 2.2-137.6 37.1-172.6 53.9l-30.7-93.3h196.6c-2.7-28.2-152.9-22.6-337.9-22.6L27 415.8c196.4-97.3 258.9-130.3 321.2-151.5zM94.7 96c253.3 53.7 330 65.7 332.1 85.2 36.4 0 45.9 0 52.4 6.6 21.1 19.7-14.6 67.7-14.6 67.7-4.4 2.9-406.4 160.2-406.4 160.2h423.1L549 96z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"ussunnah\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f407\",\n    \"label\": \"us-Sunnah Foundation\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1677678764,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 482 512\\\"><path d=\\\"M481.9 268.1A240.9 240.9 0 1 1 .1 268a240.9 240.9 0 1 1 481.9 0zM24.5 268a216.5 216.5 0 1 0 432.9 0A216.5 216.5 0 1 0 24.5 268zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9c-5.5-4.3-8.2-12.3-8.2-23.8V205.1c0-6.5-5.2-20.2-15.7-41.2c7 0 17-9.1 30-27.2V284.5c0 11 2.4 19.4 7 25.3c3.7 4.7 10.1 8.9 19 12.6c1.2 .4 2.6 .9 4.1 1.4c2.9 .9 6.3 2.1 10.3 3.5c-1.8 2.7-8.3 4-19.9 4zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4h-8.3H53.6c3.3-5.3 4.9-8.8 4.9-10.8c0-2-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4c0-7.4 2.1-13.9 6.3-19.3L80 253.4l-7.1-17.7L89 215.9l6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7c0 4.2 2.8 13.3 8.3 27.3l16.2 40.7H135h8 .3c2.8 .4 7.7 5 14.6 13.9c1.8 2.4 4.3 5.8 7.7 10.2c1.4 1.9 2.9 3.9 4.6 6.1c1.3-2.3 2-4.6 2-7.1c0-2-1.3-6.6-4-13.4L163 304.1c-4-10.6-6.1-17.7-6.1-21.3c0-6.3 1.9-12.3 5.8-17.9c.5-.6 1-1.3 1.5-1.9c4.4-5.6 8.8-11.1 13.3-16.5c-1.1 4.6-1.7 8.7-1.7 12c0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3h17.6 8.3l-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32h13.4L245 292.2c-1.5-3.9-4-7-7.7-9.3L253 262.8 270.3 308h13.4l-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20L302.6 308h10.3 8.3 7.6c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3V205.1c0-6.5-4.5-20.3-13.7-41.2c5.4 0 14.1-9.1 26.2-27.2V300.2c0 7.2 .6 12 1.7 14.6c1.6 3.4 5.3 6.2 11.1 8.2c-3.9 5.6-8.7 8.5-14.5 8.5H321.1h-8.3H210.5h-19zM93.4 287.3c-2.7-6.7-4-11.7-4-15c-.6 1.2-2.4 3.7-5.4 7.6c-1.4 1.9-2.2 3.7-2.2 5.3c0 2.6 .8 5.7 2.2 9.3l5.6 13.9h0c5 0 9 0 11.9-.1l-8.2-20.9zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm-27.6 0c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm87 27.5c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 482, 512],\n        \"width\": 482,\n        \"height\": 512,\n        \"path\": \"M481.9 268.1A240.9 240.9 0 1 1 .1 268a240.9 240.9 0 1 1 481.9 0zM24.5 268a216.5 216.5 0 1 0 432.9 0A216.5 216.5 0 1 0 24.5 268zm385.9 63.3c-12.7 0-21.6-1.9-26.7-5.9c-5.5-4.3-8.2-12.3-8.2-23.8V205.1c0-6.5-5.2-20.2-15.7-41.2c7 0 17-9.1 30-27.2V284.5c0 11 2.4 19.4 7 25.3c3.7 4.7 10.1 8.9 19 12.6c1.2 .4 2.6 .9 4.1 1.4c2.9 .9 6.3 2.1 10.3 3.5c-1.8 2.7-8.3 4-19.9 4zm-219 0c-1.3 2.4-3.6 5.5-6.8 9.4l-18.5 22.5c-1-6.1-4-13-9.3-20.6s-9.7-11.4-13.4-11.4h-8.3H53.6c3.3-5.3 4.9-8.8 4.9-10.8c0-2-.8-5.3-2.4-9.7c-1.5-4.4-2.4-8.5-2.4-12.4c0-7.4 2.1-13.9 6.3-19.3L80 253.4l-7.1-17.7L89 215.9l6.7 16.8 8-10.3c-1.8 6.4-2.6 12.3-2.6 17.7c0 4.2 2.8 13.3 8.3 27.3l16.2 40.7H135h8 .3c2.8 .4 7.7 5 14.6 13.9c1.8 2.4 4.3 5.8 7.7 10.2c1.4 1.9 2.9 3.9 4.6 6.1c1.3-2.3 2-4.6 2-7.1c0-2-1.3-6.6-4-13.4L163 304.1c-4-10.6-6.1-17.7-6.1-21.3c0-6.3 1.9-12.3 5.8-17.9c.5-.6 1-1.3 1.5-1.9c4.4-5.6 8.8-11.1 13.3-16.5c-1.1 4.6-1.7 8.7-1.7 12c0 3.7 1.7 9.9 5.1 18.8l7.9 20.4c1.9 4.7 3 8.2 3.7 10.3h17.6 8.3l-.9-2.6c-1.4-3.9-4-7-7.7-9.3l15.6-20.1 12.3 32h13.4L245 292.2c-1.5-3.9-4-7-7.7-9.3L253 262.8 270.3 308h13.4l-11.4-29.4c-1.5-3.9-4-7-7.7-9.3l15.6-20L302.6 308h10.3 8.3 7.6c1.5 0 3-1.1 4.5-3.1s2.2-4.1 2.2-6.3V205.1c0-6.5-4.5-20.3-13.7-41.2c5.4 0 14.1-9.1 26.2-27.2V300.2c0 7.2 .6 12 1.7 14.6c1.6 3.4 5.3 6.2 11.1 8.2c-3.9 5.6-8.7 8.5-14.5 8.5H321.1h-8.3H210.5h-19zM93.4 287.3c-2.7-6.7-4-11.7-4-15c-.6 1.2-2.4 3.7-5.4 7.6c-1.4 1.9-2.2 3.7-2.2 5.3c0 2.6 .8 5.7 2.2 9.3l5.6 13.9h0c5 0 9 0 11.9-.1l-8.2-20.9zm13.5-72.4c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm-27.6 0c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3zm87 27.5c-3-5.2-7-9.3-11.9-11.9c-3.5-1.9-5.3-4.3-5.3-7.4c0-2.4 4.6-8.6 14-18.3c.2 3.8 1.9 7.6 4.9 11.2c3.1 3.6 4.6 7 4.6 10.1c0 2.6-2.1 8-6.2 16.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"utensils\": {\n    \"aliases\": {\n      \"names\": [\"cutlery\"],\n      \"unicodes\": {\n        \"composite\": [\"1f374\", \"f0f5\"],\n        \"secondary\": [\"10f2e7\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"cooking\",\n        \"cutlery\",\n        \"dining\",\n        \"dinner\",\n        \"eat\",\n        \"food\",\n        \"fork\",\n        \"fork and knife\",\n        \"knife\",\n        \"restaurant\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f2e7\",\n    \"label\": \"Utensils\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M416 0C400 0 288 32 288 176V288c0 35.3 28.7 64 64 64h32V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352 240 32c0-17.7-14.3-32-32-32zM64 16C64 7.8 57.9 1 49.7 .1S34.2 4.6 32.4 12.5L2.1 148.8C.7 155.1 0 161.5 0 167.9c0 45.9 35.1 83.6 80 87.7V480c0 17.7 14.3 32 32 32s32-14.3 32-32V255.6c44.9-4.1 80-41.8 80-87.7c0-6.4-.7-12.8-2.1-19.1L191.6 12.5c-1.8-8-9.3-13.3-17.4-12.4S160 7.8 160 16V150.2c0 5.4-4.4 9.8-9.8 9.8c-5.1 0-9.3-3.9-9.8-9L127.9 14.6C127.2 6.3 120.3 0 112 0s-15.2 6.3-15.9 14.6L83.7 151c-.5 5.1-4.7 9-9.8 9c-5.4 0-9.8-4.4-9.8-9.8V16zm48.3 152l-.3 0-.3 0 .3-.7 .3 .7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M416 0C400 0 288 32 288 176V288c0 35.3 28.7 64 64 64h32V480c0 17.7 14.3 32 32 32s32-14.3 32-32V352 240 32c0-17.7-14.3-32-32-32zM64 16C64 7.8 57.9 1 49.7 .1S34.2 4.6 32.4 12.5L2.1 148.8C.7 155.1 0 161.5 0 167.9c0 45.9 35.1 83.6 80 87.7V480c0 17.7 14.3 32 32 32s32-14.3 32-32V255.6c44.9-4.1 80-41.8 80-87.7c0-6.4-.7-12.8-2.1-19.1L191.6 12.5c-1.8-8-9.3-13.3-17.4-12.4S160 7.8 160 16V150.2c0 5.4-4.4 9.8-9.8 9.8c-5.1 0-9.3-3.9-9.8-9L127.9 14.6C127.2 6.3 120.3 0 112 0s-15.2 6.3-15.9 14.6L83.7 151c-.5 5.1-4.7 9-9.8 9c-5.4 0-9.8-4.4-9.8-9.8V16zm48.3 152l-.3 0-.3 0 .3-.7 .3 .7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"v\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"76\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter V\", \"Latin Small Letter V\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"56\",\n    \"label\": \"V\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M19.7 34.5c16.3-6.8 35 .9 41.8 17.2L192 364.8 322.5 51.7c6.8-16.3 25.5-24 41.8-17.2s24 25.5 17.2 41.8l-160 384c-5 11.9-16.6 19.7-29.5 19.7s-24.6-7.8-29.5-19.7L2.5 76.3c-6.8-16.3 .9-35 17.2-41.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M19.7 34.5c16.3-6.8 35 .9 41.8 17.2L192 364.8 322.5 51.7c6.8-16.3 25.5-24 41.8-17.2s24 25.5 17.2 41.8l-160 384c-5 11.9-16.6 19.7-29.5 19.7s-24.6-7.8-29.5-19.7L2.5 76.3c-6.8-16.3 .9-35 17.2-41.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vaadin\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f408\",\n    \"label\": \"Vaadin\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014460,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"van-shuttle\": {\n    \"aliases\": {\n      \"names\": [\"shuttle-van\"],\n      \"unicodes\": {\n        \"composite\": [\"1f690\"],\n        \"secondary\": [\"10f5b6\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta2\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"airport\",\n        \"bus\",\n        \"machine\",\n        \"minibus\",\n        \"public-transportation\",\n        \"transportation\",\n        \"travel\",\n        \"vehicle\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5b6\",\n    \"label\": \"Van Shuttle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767650,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M64 104v88h96V96H72c-4.4 0-8 3.6-8 8zm482 88L465.1 96H384v96H546zm-226 0V96H224v96h96zM592 384H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V104C0 64.2 32.2 32 72 32H192 352 465.1c18.9 0 36.8 8.3 49 22.8L625 186.5c9.7 11.5 15 26.1 15 41.2V336c0 26.5-21.5 48-48 48zm-64 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M64 104v88h96V96H72c-4.4 0-8 3.6-8 8zm482 88L465.1 96H384v96H546zm-226 0V96H224v96h96zM592 384H576c0 53-43 96-96 96s-96-43-96-96H256c0 53-43 96-96 96s-96-43-96-96H48c-26.5 0-48-21.5-48-48V104C0 64.2 32.2 32 72 32H192 352 465.1c18.9 0 36.8 8.3 49 22.8L625 186.5c9.7 11.5 15 26.1 15 41.2V336c0 26.5-21.5 48-48 48zm-64 0a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM160 432a48 48 0 1 0 0-96 48 48 0 1 0 0 96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vault\": {\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0-beta3\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"bank\", \"important\", \"lock\", \"money\", \"safe\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2c5\",\n    \"label\": \"Vault\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M64 0C28.7 0 0 28.7 0 64V416c0 35.3 28.7 64 64 64H80l16 32h64l16-32H400l16 32h64l16-32h16c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM224 320a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-240a160 160 0 1 1 0 320 160 160 0 1 1 0-320zM480 221.3V336c0 8.8-7.2 16-16 16s-16-7.2-16-16V221.3c-18.6-6.6-32-24.4-32-45.3c0-26.5 21.5-48 48-48s48 21.5 48 48c0 20.9-13.4 38.7-32 45.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M64 0C28.7 0 0 28.7 0 64V416c0 35.3 28.7 64 64 64H80l16 32h64l16-32H400l16 32h64l16-32h16c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H64zM224 320a80 80 0 1 0 0-160 80 80 0 1 0 0 160zm0-240a160 160 0 1 1 0 320 160 160 0 1 1 0-320zM480 221.3V336c0 8.8-7.2 16-16 16s-16-7.2-16-16V221.3c-18.6-6.6-32-24.4-32-45.3c0-26.5 21.5-48 48-48s48 21.5 48 48c0 20.9-13.4 38.7-32 45.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vector-square\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5cb\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"anchors\", \"lines\", \"object\", \"render\", \"shape\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5cb\",\n    \"label\": \"Vector Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767367,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M368 80h32v32H368V80zM352 32c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32V160c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H352zM96 160c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32V160zM48 400H80v32H48V400zm320 32V400h32v32H368zM48 112V80H80v32H48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M368 80h32v32H368V80zM352 32c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32v64c0 17.7 14.3 32 32 32H96c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32V384c0-17.7-14.3-32-32-32V160c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32H352zM96 160c17.7 0 32-14.3 32-32H320c0 17.7 14.3 32 32 32V352c-17.7 0-32 14.3-32 32H128c0-17.7-14.3-32-32-32V160zM48 400H80v32H48V400zm320 32V400h32v32H368zM48 112V80H80v32H48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"venus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"2640\"],\n        \"secondary\": [\"10f221\"]\n      }\n    },\n    \"changes\": [\n      \"4.3.0\",\n      \"5.0.0\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"female\", \"female sign\", \"gender\", \"woman\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f221\",\n    \"label\": \"Venus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1V384H128c-17.7 0-32 14.3-32 32s14.3 32 32 32h32v32c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H224V349.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M80 176a112 112 0 1 1 224 0A112 112 0 1 1 80 176zM224 349.1c81.9-15 144-86.8 144-173.1C368 78.8 289.2 0 192 0S16 78.8 16 176c0 86.3 62.1 158.1 144 173.1V384H128c-17.7 0-32 14.3-32 32s14.3 32 32 32h32v32c0 17.7 14.3 32 32 32s32-14.3 32-32V448h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H224V349.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"venus-double\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26a2\"],\n        \"secondary\": [\"10f226\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Doubled Female Sign\", \"female\", \"gender\", \"lesbian\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f226\",\n    \"label\": \"Venus Double\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM368 176c0 86.3-62.1 158.1-144 173.1V384h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H224v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H128c-17.7 0-32-14.3-32-32s14.3-32 32-32h32V349.1C78.1 334.1 16 262.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176zM344 318c14.6-15.6 26.8-33.4 36-53c18.8 14.4 42.4 23 68 23c61.9 0 112-50.1 112-112s-50.1-112-112-112c-25.6 0-49.1 8.6-68 23c-9.3-19.5-21.5-37.4-36-53C373.1 12.6 409.1 0 448 0c97.2 0 176 78.8 176 176c0 86.3-62.1 158.1-144 173.1V384h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H480v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h32V349.1c-26.6-4.9-51.1-15.7-72-31.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM368 176c0 86.3-62.1 158.1-144 173.1V384h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H224v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H128c-17.7 0-32-14.3-32-32s14.3-32 32-32h32V349.1C78.1 334.1 16 262.3 16 176C16 78.8 94.8 0 192 0s176 78.8 176 176zM344 318c14.6-15.6 26.8-33.4 36-53c18.8 14.4 42.4 23 68 23c61.9 0 112-50.1 112-112s-50.1-112-112-112c-25.6 0-49.1 8.6-68 23c-9.3-19.5-21.5-37.4-36-53C373.1 12.6 409.1 0 448 0c97.2 0 176 78.8 176 176c0 86.3-62.1 158.1-144 173.1V384h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H480v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h32V349.1c-26.6-4.9-51.1-15.7-72-31.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"venus-mars\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"26a4\"],\n        \"secondary\": [\"10f228\"]\n      }\n    },\n    \"changes\": [\"4.3.0\", \"5.0.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Interlocked Female and Male Sign\",\n        \"female\",\n        \"gender\",\n        \"heterosexual\",\n        \"male\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f228\",\n    \"label\": \"Venus Mars\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M176 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM352 176c0 86.3-62.1 158.1-144 173.1V384h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H208v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H112c-17.7 0-32-14.3-32-32s14.3-32 32-32h32V349.1C62.1 334.1 0 262.3 0 176C0 78.8 78.8 0 176 0s176 78.8 176 176zM271.9 360.6c19.3-10.1 36.9-23.1 52.1-38.4c20 18.5 46.7 29.8 76.1 29.8c61.9 0 112-50.1 112-112s-50.1-112-112-112c-7.2 0-14.3 .7-21.1 2c-4.9-21.5-13-41.7-24-60.2C369.3 66 384.4 64 400 64c37 0 71.4 11.4 99.8 31l20.6-20.6L487 41c-6.9-6.9-8.9-17.2-5.2-26.2S494.3 0 504 0H616c13.3 0 24 10.7 24 24V136c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L545 140.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176c-50.5 0-96-21.3-128.1-55.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M176 288a112 112 0 1 0 0-224 112 112 0 1 0 0 224zM352 176c0 86.3-62.1 158.1-144 173.1V384h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H208v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H112c-17.7 0-32-14.3-32-32s14.3-32 32-32h32V349.1C62.1 334.1 0 262.3 0 176C0 78.8 78.8 0 176 0s176 78.8 176 176zM271.9 360.6c19.3-10.1 36.9-23.1 52.1-38.4c20 18.5 46.7 29.8 76.1 29.8c61.9 0 112-50.1 112-112s-50.1-112-112-112c-7.2 0-14.3 .7-21.1 2c-4.9-21.5-13-41.7-24-60.2C369.3 66 384.4 64 400 64c37 0 71.4 11.4 99.8 31l20.6-20.6L487 41c-6.9-6.9-8.9-17.2-5.2-26.2S494.3 0 504 0H616c13.3 0 24 10.7 24 24V136c0 9.7-5.8 18.5-14.8 22.2s-19.3 1.7-26.2-5.2l-33.4-33.4L545 140.2c19.5 28.4 31 62.7 31 99.8c0 97.2-78.8 176-176 176c-50.5 0-96-21.3-128.1-55.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vest\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e085\"]\n      }\n    },\n    \"changes\": [\"5.15.0\", \"5.15.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"biker\", \"fashion\", \"style\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e085\",\n    \"label\": \"Vest\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M207.1 237.4L151.2 69.7C168.6 79.7 192.6 88 224 88s55.4-8.3 72.8-18.3L226.5 280.6c-1.6 4.9-2.5 10-2.5 15.2V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V270.5c0-9.5-2.8-18.7-8.1-26.6l-47.9-71.8c-5.3-7.9-8.1-17.1-8.1-26.6V128 54.3 48c0-26.5-21.5-48-48-48h-4.5c-.2 0-.4 0-.6 0c-.4 0-.8 0-1.2 0C311 0 295.7 9.7 285.7 18.8C276.4 27.2 257.2 40 224 40s-52.4-12.8-61.7-21.2C152.3 9.7 137 0 118.3 0c-.4 0-.8 0-1.2 0c-.2 0-.4 0-.6 0H112C85.5 0 64 21.5 64 48v6.3V128v17.5c0 9.5-2.8 18.7-8.1 26.6L8.1 243.9C2.8 251.8 0 261.1 0 270.5V464c0 26.5 21.5 48 48 48H176c9.9 0 19-3 26.7-8.1C195.9 492.2 192 478.5 192 464V295.8c0-8.6 1.4-17.1 4.1-25.3l11-33.1zM347.3 356.7l48 48c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-48-48c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0zm-294.6 48l48-48c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-48 48c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M207.1 237.4L151.2 69.7C168.6 79.7 192.6 88 224 88s55.4-8.3 72.8-18.3L226.5 280.6c-1.6 4.9-2.5 10-2.5 15.2V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V270.5c0-9.5-2.8-18.7-8.1-26.6l-47.9-71.8c-5.3-7.9-8.1-17.1-8.1-26.6V128 54.3 48c0-26.5-21.5-48-48-48h-4.5c-.2 0-.4 0-.6 0c-.4 0-.8 0-1.2 0C311 0 295.7 9.7 285.7 18.8C276.4 27.2 257.2 40 224 40s-52.4-12.8-61.7-21.2C152.3 9.7 137 0 118.3 0c-.4 0-.8 0-1.2 0c-.2 0-.4 0-.6 0H112C85.5 0 64 21.5 64 48v6.3V128v17.5c0 9.5-2.8 18.7-8.1 26.6L8.1 243.9C2.8 251.8 0 261.1 0 270.5V464c0 26.5 21.5 48 48 48H176c9.9 0 19-3 26.7-8.1C195.9 492.2 192 478.5 192 464V295.8c0-8.6 1.4-17.1 4.1-25.3l11-33.1zM347.3 356.7l48 48c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0l-48-48c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0zm-294.6 48l48-48c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6l-48 48c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vest-patches\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e086\"]\n      }\n    },\n    \"changes\": [\"5.15.0\", \"5.15.1\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"biker\", \"fashion\", \"style\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e086\",\n    \"label\": \"Vest Patches\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M151.2 69.7l55.9 167.7-11 33.1c-2.7 8.2-4.1 16.7-4.1 25.3V464c0 14.5 3.9 28.2 10.7 39.9C195 509 185.9 512 176 512H48c-26.5 0-48-21.5-48-48V270.5c0-9.5 2.8-18.7 8.1-26.6l47.9-71.8c5.3-7.9 8.1-17.1 8.1-26.6V128 54.3 48C64 21.5 85.5 0 112 0h4.5c.2 0 .4 0 .6 0c.4 0 .8 0 1.2 0c18.8 0 34.1 9.7 44.1 18.8C171.6 27.2 190.8 40 224 40s52.4-12.8 61.7-21.2C295.7 9.7 311 0 329.7 0c.4 0 .8 0 1.2 0c.2 0 .4 0 .6 0H336c26.5 0 48 21.5 48 48v6.3V128v17.5c0 9.5 2.8 18.7 8.1 26.6l47.9 71.8c5.3 7.9 8.1 17.1 8.1 26.6V464c0 26.5-21.5 48-48 48H272c-26.5 0-48-21.5-48-48V295.8c0-5.2 .8-10.3 2.5-15.2L296.8 69.7C279.4 79.7 255.4 88 224 88s-55.4-8.3-72.8-18.3zM96 456a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM63.5 255.5c-4.7 4.7-4.7 12.3 0 17L79 288 63.5 303.5c-4.7 4.7-4.7 12.3 0 17s12.3 4.7 17 0L96 305l15.5 15.5c4.7 4.7 12.3 4.7 17 0s4.7-12.3 0-17L113 288l15.5-15.5c4.7-4.7 4.7-12.3 0-17s-12.3-4.7-17 0L96 271 80.5 255.5c-4.7-4.7-12.3-4.7-17 0zM304 280v8 32c0 8.8 7.2 16 16 16h32 8c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8v-8c0-13.3-10.7-24-24-24s-24 10.7-24 24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M151.2 69.7l55.9 167.7-11 33.1c-2.7 8.2-4.1 16.7-4.1 25.3V464c0 14.5 3.9 28.2 10.7 39.9C195 509 185.9 512 176 512H48c-26.5 0-48-21.5-48-48V270.5c0-9.5 2.8-18.7 8.1-26.6l47.9-71.8c5.3-7.9 8.1-17.1 8.1-26.6V128 54.3 48C64 21.5 85.5 0 112 0h4.5c.2 0 .4 0 .6 0c.4 0 .8 0 1.2 0c18.8 0 34.1 9.7 44.1 18.8C171.6 27.2 190.8 40 224 40s52.4-12.8 61.7-21.2C295.7 9.7 311 0 329.7 0c.4 0 .8 0 1.2 0c.2 0 .4 0 .6 0H336c26.5 0 48 21.5 48 48v6.3V128v17.5c0 9.5 2.8 18.7 8.1 26.6l47.9 71.8c5.3 7.9 8.1 17.1 8.1 26.6V464c0 26.5-21.5 48-48 48H272c-26.5 0-48-21.5-48-48V295.8c0-5.2 .8-10.3 2.5-15.2L296.8 69.7C279.4 79.7 255.4 88 224 88s-55.4-8.3-72.8-18.3zM96 456a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM63.5 255.5c-4.7 4.7-4.7 12.3 0 17L79 288 63.5 303.5c-4.7 4.7-4.7 12.3 0 17s12.3 4.7 17 0L96 305l15.5 15.5c4.7 4.7 12.3 4.7 17 0s4.7-12.3 0-17L113 288l15.5-15.5c4.7-4.7 4.7-12.3 0-17s-12.3-4.7-17 0L96 271 80.5 255.5c-4.7-4.7-12.3-4.7-17 0zM304 280v8 32c0 8.8 7.2 16 16 16h32 8c13.3 0 24-10.7 24-24s-10.7-24-24-24h-8v-8c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"viacoin\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f237\",\n    \"label\": \"Viacoin\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"viadeo\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2a9\",\n    \"label\": \"Viadeo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"vial\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f9ea\"],\n        \"secondary\": [\"10f492\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ampule\",\n        \"chemist\",\n        \"chemistry\",\n        \"experiment\",\n        \"lab\",\n        \"sample\",\n        \"science\",\n        \"test\",\n        \"test tube\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f492\",\n    \"label\": \"Vial\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M342.6 9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L28.1 342.6C10.1 360.6 0 385 0 410.5V416c0 53 43 96 96 96h5.5c25.5 0 49.9-10.1 67.9-28.1L448 205.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-32-32-96-96-32-32zM205.3 256L352 109.3 402.7 160l-96 96H205.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M342.6 9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4L28.1 342.6C10.1 360.6 0 385 0 410.5V416c0 53 43 96 96 96h5.5c25.5 0 49.9-10.1 67.9-28.1L448 205.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-32-32-96-96-32-32zM205.3 256L352 109.3 402.7 160l-96 96H205.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vial-circle-check\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ampule\",\n        \"chemist\",\n        \"chemistry\",\n        \"not affected\",\n        \"ok\",\n        \"okay\",\n        \"success\",\n        \"test tube\",\n        \"tube\",\n        \"vaccine\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e596\",\n    \"label\": \"Vial Circle Check\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H96h64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32V266.8c-20.2 28.6-32 63.5-32 101.2c0 25.2 5.3 49.1 14.8 70.8C189.5 463.7 160.6 480 128 480c-53 0-96-43-96-96V96C14.3 96 0 81.7 0 64zM96 96v96h64V96H96zM224 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L352 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H96h64 64c17.7 0 32 14.3 32 32s-14.3 32-32 32V266.8c-20.2 28.6-32 63.5-32 101.2c0 25.2 5.3 49.1 14.8 70.8C189.5 463.7 160.6 480 128 480c-53 0-96-43-96-96V96C14.3 96 0 81.7 0 64zM96 96v96h64V96H96zM224 368a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm211.3-43.3c-6.2-6.2-16.4-6.2-22.6 0L352 385.4l-28.7-28.7c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l40 40c6.2 6.2 16.4 6.2 22.6 0l72-72c6.2-6.2 6.2-16.4 0-22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vial-virus\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ampule\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flue\",\n        \"infection\",\n        \"lab\",\n        \"laboratory\",\n        \"pandemic\",\n        \"test\",\n        \"test tube\",\n        \"vaccine\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e597\",\n    \"label\": \"Vial Virus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96V384c0 53 43 96 96 96c28.6 0 54.2-12.5 71.8-32.3c.1-14.2 5.6-28.3 16.4-39.1c.2-.2 .1-.6-.2-.6c-30.9 0-56-25.1-56-56s25.1-56 56-56c.3 0 .4-.4 .2-.6c-21.9-21.9-21.9-57.3 0-79.2c2.4-2.4 5-4.6 7.8-6.5V96c17.7 0 32-14.3 32-32s-14.3-32-32-32H160 96 32zM96 192V96h64v96H96zM216 376c28.8 0 43.2 34.8 22.9 55.2c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c20.4-20.4 55.2-5.9 55.2 22.9c0 13.3 10.7 24 24 24s24-10.7 24-24c0-28.8 34.8-43.2 55.2-22.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9C444.8 410.8 459.2 376 488 376c13.3 0 24-10.7 24-24s-10.7-24-24-24c-28.8 0-43.2-34.8-22.9-55.2c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0C410.8 259.2 376 244.8 376 216c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 28.8-34.8 43.2-55.2 22.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c20.4 20.4 5.9 55.2-22.9 55.2c-13.3 0-24 10.7-24 24s10.7 24 24 24zm104-88a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm40 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96V384c0 53 43 96 96 96c28.6 0 54.2-12.5 71.8-32.3c.1-14.2 5.6-28.3 16.4-39.1c.2-.2 .1-.6-.2-.6c-30.9 0-56-25.1-56-56s25.1-56 56-56c.3 0 .4-.4 .2-.6c-21.9-21.9-21.9-57.3 0-79.2c2.4-2.4 5-4.6 7.8-6.5V96c17.7 0 32-14.3 32-32s-14.3-32-32-32H160 96 32zM96 192V96h64v96H96zM216 376c28.8 0 43.2 34.8 22.9 55.2c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0c20.4-20.4 55.2-5.9 55.2 22.9c0 13.3 10.7 24 24 24s24-10.7 24-24c0-28.8 34.8-43.2 55.2-22.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9C444.8 410.8 459.2 376 488 376c13.3 0 24-10.7 24-24s-10.7-24-24-24c-28.8 0-43.2-34.8-22.9-55.2c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0C410.8 259.2 376 244.8 376 216c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 28.8-34.8 43.2-55.2 22.9c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9c20.4 20.4 5.9 55.2-22.9 55.2c-13.3 0-24 10.7-24 24s10.7 24 24 24zm104-88a32 32 0 1 1 0 64 32 32 0 1 1 0-64zm40 96a24 24 0 1 1 48 0 24 24 0 1 1 -48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vials\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f493\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"ampule\",\n        \"experiment\",\n        \"lab\",\n        \"sample\",\n        \"science\",\n        \"test\",\n        \"test tube\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f493\",\n    \"label\": \"Vials\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H88h48 56c17.7 0 32 14.3 32 32s-14.3 32-32 32V400c0 44.2-35.8 80-80 80s-80-35.8-80-80V96C14.3 96 0 81.7 0 64zM136 96H88V256h48V96zM288 64c0-17.7 14.3-32 32-32h56 48 56c17.7 0 32 14.3 32 32s-14.3 32-32 32V400c0 44.2-35.8 80-80 80s-80-35.8-80-80V96c-17.7 0-32-14.3-32-32zM424 96H376V256h48V96z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H88h48 56c17.7 0 32 14.3 32 32s-14.3 32-32 32V400c0 44.2-35.8 80-80 80s-80-35.8-80-80V96C14.3 96 0 81.7 0 64zM136 96H88V256h48V96zM288 64c0-17.7 14.3-32 32-32h56 48 56c17.7 0 32 14.3 32 32s-14.3 32-32 32V400c0 44.2-35.8 80-80 80s-80-35.8-80-80V96c-17.7 0-32-14.3-32-32zM424 96H376V256h48V96z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"viber\": {\n    \"changes\": [\"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f409\",\n    \"label\": \"Viber\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014468,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-5.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"video\": {\n    \"aliases\": {\n      \"names\": [\"video-camera\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f03d\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.9\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"camera\", \"film\", \"movie\", \"record\", \"video-camera\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f03d\",\n    \"label\": \"Video\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2V384c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1V320 192 174.9l14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M0 128C0 92.7 28.7 64 64 64H320c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128zM559.1 99.8c10.4 5.6 16.9 16.4 16.9 28.2V384c0 11.8-6.5 22.6-16.9 28.2s-23 5-32.9-1.6l-96-64L416 337.1V320 192 174.9l14.2-9.5 96-64c9.8-6.5 22.4-7.2 32.9-1.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"video-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f4e2\"]\n      }\n    },\n    \"changes\": [\"5.0.9\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"add\", \"create\", \"film\", \"new\", \"positive\", \"record\", \"video\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4e2\",\n    \"label\": \"Video Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767341,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.4-67.7 13.8 9.2c9.8 6.5 22.4 7.2 32.9 1.6s16.9-16.4 16.9-28.2V128c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.9 1.6l-96 64L448 174.9V192 320v5.8l-32-25.1V128c0-35.3-28.7-64-64-64H113.9L38.8 5.1zM407 416.7L32.3 121.5c-.2 2.1-.3 4.3-.3 6.5V384c0 35.3 28.7 64 64 64H352c23.4 0 43.9-12.6 55-31.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-86.4-67.7 13.8 9.2c9.8 6.5 22.4 7.2 32.9 1.6s16.9-16.4 16.9-28.2V128c0-11.8-6.5-22.6-16.9-28.2s-23-5-32.9 1.6l-96 64L448 174.9V192 320v5.8l-32-25.1V128c0-35.3-28.7-64-64-64H113.9L38.8 5.1zM407 416.7L32.3 121.5c-.2 2.1-.3 4.3-.3 6.5V384c0 35.3 28.7 64 64 64H352c23.4 0 43.9-12.6 55-31.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vihara\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f6a7\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"buddhism\", \"buddhist\", \"building\", \"monastery\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6a7\",\n    \"label\": \"Vihara\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M281 22L305.8 4.7c1.3-.9 2.7-1.8 4.1-2.4C313.1 .7 316.6 0 320 0s6.9 .7 10.1 2.2c1.4 .7 2.8 1.5 4.1 2.4L359 22C393 45.8 430.8 63.5 470.8 74.4l23 6.3c1.8 .5 3.6 1.1 5.2 2c3.2 1.7 5.9 4 8.1 6.8c3.8 4.9 5.6 11.3 4.7 17.8c-.4 2.8-1.2 5.4-2.5 7.8c-1.7 3.2-4 5.9-6.8 8.1c-4.3 3.2-9.6 5.1-15.1 4.9H480v56.1l6.4 5.1 5.2 4.1c21.1 16.7 45 29.6 70.5 38.1l28.9 9.6c1.6 .5 3.2 1.2 4.6 2c3.1 1.7 5.8 4.1 7.8 6.9s3.5 6.1 4.1 9.6c.5 2.7 .6 5.5 .1 8.3s-1.4 5.4-2.7 7.8c-1.7 3.1-4.1 5.8-6.9 7.8s-6.1 3.5-9.6 4.1c-1.6 .3-3.3 .4-5 .4H544v65.9c20.5 22.8 47.4 39.2 77.4 46.7C632 403 640 412.6 640 424c0 13.3-10.7 24-24 24H576v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H352v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H128v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H24c-13.3 0-24-10.7-24-24c0-11.4 8-21 18.6-23.4c30-7.6 56.9-23.9 77.4-46.7V288H56.6c-1.7 0-3.4-.1-5-.4c-3.5-.7-6.8-2.1-9.6-4.1s-5.2-4.7-7-7.8c-1.3-2.4-2.3-5-2.7-7.8s-.4-5.6 .1-8.3c.7-3.5 2.1-6.8 4.1-9.6s4.7-5.2 7.8-6.9c1.4-.8 3-1.5 4.6-2l28.9-9.6c25.5-8.5 49.4-21.4 70.5-38.1l5.2-4.1 6.4-5.1V176 128h-7.5c-5.5 .1-10.8-1.7-15.1-4.9c-2.8-2.1-5.1-4.8-6.8-8.1c-1.2-2.4-2.1-5-2.5-7.8c-.9-6.5 .9-12.8 4.7-17.8c2.1-2.8 4.8-5.1 8.1-6.8c1.6-.8 3.4-1.5 5.2-2l23-6.3C209.2 63.5 247 45.8 281 22zM416 128H320 224v64h72 48 72V128zM160 288v64H296h24 24H480V288H344 320h0H296 160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M281 22L305.8 4.7c1.3-.9 2.7-1.8 4.1-2.4C313.1 .7 316.6 0 320 0s6.9 .7 10.1 2.2c1.4 .7 2.8 1.5 4.1 2.4L359 22C393 45.8 430.8 63.5 470.8 74.4l23 6.3c1.8 .5 3.6 1.1 5.2 2c3.2 1.7 5.9 4 8.1 6.8c3.8 4.9 5.6 11.3 4.7 17.8c-.4 2.8-1.2 5.4-2.5 7.8c-1.7 3.2-4 5.9-6.8 8.1c-4.3 3.2-9.6 5.1-15.1 4.9H480v56.1l6.4 5.1 5.2 4.1c21.1 16.7 45 29.6 70.5 38.1l28.9 9.6c1.6 .5 3.2 1.2 4.6 2c3.1 1.7 5.8 4.1 7.8 6.9s3.5 6.1 4.1 9.6c.5 2.7 .6 5.5 .1 8.3s-1.4 5.4-2.7 7.8c-1.7 3.1-4.1 5.8-6.9 7.8s-6.1 3.5-9.6 4.1c-1.6 .3-3.3 .4-5 .4H544v65.9c20.5 22.8 47.4 39.2 77.4 46.7C632 403 640 412.6 640 424c0 13.3-10.7 24-24 24H576v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H352v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H128v32c0 17.7-14.3 32-32 32s-32-14.3-32-32V448H24c-13.3 0-24-10.7-24-24c0-11.4 8-21 18.6-23.4c30-7.6 56.9-23.9 77.4-46.7V288H56.6c-1.7 0-3.4-.1-5-.4c-3.5-.7-6.8-2.1-9.6-4.1s-5.2-4.7-7-7.8c-1.3-2.4-2.3-5-2.7-7.8s-.4-5.6 .1-8.3c.7-3.5 2.1-6.8 4.1-9.6s4.7-5.2 7.8-6.9c1.4-.8 3-1.5 4.6-2l28.9-9.6c25.5-8.5 49.4-21.4 70.5-38.1l5.2-4.1 6.4-5.1V176 128h-7.5c-5.5 .1-10.8-1.7-15.1-4.9c-2.8-2.1-5.1-4.8-6.8-8.1c-1.2-2.4-2.1-5-2.5-7.8c-.9-6.5 .9-12.8 4.7-17.8c2.1-2.8 4.8-5.1 8.1-6.8c1.6-.8 3.4-1.5 5.2-2l23-6.3C209.2 63.5 247 45.8 281 22zM416 128H320 224v64h72 48 72V128zM160 288v64H296h24 24H480V288H344 320h0H296 160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vimeo\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f40a\",\n    \"label\": \"Vimeo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014466,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"vimeo-v\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"vimeo\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f27d\",\n    \"label\": \"Vimeo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"vine\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1ca\",\n    \"label\": \"Vine\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"virus\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e074\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bug\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flu\",\n        \"health\",\n        \"infection\",\n        \"pandemic\",\n        \"sick\",\n        \"vaccine\",\n        \"viral\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e074\",\n    \"label\": \"Virus\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43.5c0 49.9-60.3 74.9-95.6 39.6L120.2 75C107.7 62.5 87.5 62.5 75 75s-12.5 32.8 0 45.3l8.2 8.2C118.4 163.7 93.4 224 43.5 224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H43.5c49.9 0 74.9 60.3 39.6 95.6L75 391.8c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V468.5c0-49.9 60.3-74.9 95.6-39.6l8.2 8.2c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-8.2-8.2c-35.3-35.3-10.3-95.6 39.6-95.6H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H468.5c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C348.3 118.4 288 93.4 288 43.5V32zM176 224a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43.5c0 49.9-60.3 74.9-95.6 39.6L120.2 75C107.7 62.5 87.5 62.5 75 75s-12.5 32.8 0 45.3l8.2 8.2C118.4 163.7 93.4 224 43.5 224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H43.5c49.9 0 74.9 60.3 39.6 95.6L75 391.8c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V468.5c0-49.9 60.3-74.9 95.6-39.6l8.2 8.2c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-8.2-8.2c-35.3-35.3-10.3-95.6 39.6-95.6H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H468.5c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C348.3 118.4 288 93.4 288 43.5V32zM176 224a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm128 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"virus-covid\": {\n    \"changes\": [\"6.0.0\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bug\",\n        \"covid-19\",\n        \"flu\",\n        \"health\",\n        \"infection\",\n        \"pandemic\",\n        \"vaccine\",\n        \"viral\",\n        \"virus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4a8\",\n    \"label\": \"Virus Covid\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 24c0-13.3 10.7-24 24-24h80c13.3 0 24 10.7 24 24s-10.7 24-24 24H280V81.6c30.7 4.2 58.8 16.3 82.3 34.1L386.1 92 374.8 80.6c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.6 56.6c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L420 125.9l-23.8 23.8c17.9 23.5 29.9 51.7 34.1 82.3H464V216c0-13.3 10.7-24 24-24s24 10.7 24 24v80c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H430.4c-4.2 30.7-16.3 58.8-34.1 82.3L420 386.1l11.3-11.3c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-56.6 56.6c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L386.1 420l-23.8-23.8c-23.5 17.9-51.7 29.9-82.3 34.1V464h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h16V430.4c-30.7-4.2-58.8-16.3-82.3-34.1L125.9 420l11.3 11.3c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L46.7 408.7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L92 386.1l23.8-23.8C97.9 338.8 85.8 310.7 81.6 280H48v16c0 13.3-10.7 24-24 24s-24-10.7-24-24V216c0-13.3 10.7-24 24-24s24 10.7 24 24v16H81.6c4.2-30.7 16.3-58.8 34.1-82.3L92 125.9 80.6 137.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l56.6-56.6c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L125.9 92l23.8 23.8c23.5-17.9 51.7-29.9 82.3-34.1V48H216c-13.3 0-24-10.7-24-24zm48 200a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm64 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 24c0-13.3 10.7-24 24-24h80c13.3 0 24 10.7 24 24s-10.7 24-24 24H280V81.6c30.7 4.2 58.8 16.3 82.3 34.1L386.1 92 374.8 80.6c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l56.6 56.6c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L420 125.9l-23.8 23.8c17.9 23.5 29.9 51.7 34.1 82.3H464V216c0-13.3 10.7-24 24-24s24 10.7 24 24v80c0 13.3-10.7 24-24 24s-24-10.7-24-24V280H430.4c-4.2 30.7-16.3 58.8-34.1 82.3L420 386.1l11.3-11.3c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-56.6 56.6c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L386.1 420l-23.8-23.8c-23.5 17.9-51.7 29.9-82.3 34.1V464h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h16V430.4c-30.7-4.2-58.8-16.3-82.3-34.1L125.9 420l11.3 11.3c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L46.7 408.7c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L92 386.1l23.8-23.8C97.9 338.8 85.8 310.7 81.6 280H48v16c0 13.3-10.7 24-24 24s-24-10.7-24-24V216c0-13.3 10.7-24 24-24s24 10.7 24 24v16H81.6c4.2-30.7 16.3-58.8 34.1-82.3L92 125.9 80.6 137.2c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l56.6-56.6c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L125.9 92l23.8 23.8c23.5-17.9 51.7-29.9 82.3-34.1V48H216c-13.3 0-24-10.7-24-24zm48 200a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm64 104a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"virus-covid-slash\": {\n    \"changes\": [\"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bug\",\n        \"covid-19\",\n        \"flu\",\n        \"health\",\n        \"infection\",\n        \"pandemic\",\n        \"vaccine\",\n        \"viral\",\n        \"virus\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e4a9\",\n    \"label\": \"Virus Covid Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c11.4-19.5 19.1-41.4 22.3-64.7H528v16c0 13.3 10.7 24 24 24s24-10.7 24-24V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v16H494.4c-4.2-30.7-16.3-58.8-34.1-82.3L484 125.9l11.3 11.3c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L472.7 46.7c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L450.1 92l-23.8 23.8C402.8 97.9 374.7 85.8 344 81.6V48h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H280c-13.3 0-24 10.7-24 24s10.7 24 24 24h16V81.6c-30.7 4.2-58.8 16.3-82.3 34.1L189.9 92l11.3-11.3c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L134.1 79.8 38.8 5.1zM149.2 213.5c-1.5 6-2.7 12.2-3.5 18.5H112V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v80c0 13.3 10.7 24 24 24s24-10.7 24-24V280h33.6c4.2 30.7 16.3 58.8 34.1 82.3L156 386.1l-11.3-11.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56.6 56.6c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L189.9 420l23.8-23.8c23.5 17.9 51.7 29.9 82.3 34.1V464H280c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V430.4c20.4-2.8 39.7-9.1 57.3-18.2L149.2 213.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L472.1 344.7c11.4-19.5 19.1-41.4 22.3-64.7H528v16c0 13.3 10.7 24 24 24s24-10.7 24-24V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v16H494.4c-4.2-30.7-16.3-58.8-34.1-82.3L484 125.9l11.3 11.3c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L472.7 46.7c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9L450.1 92l-23.8 23.8C402.8 97.9 374.7 85.8 344 81.6V48h16c13.3 0 24-10.7 24-24s-10.7-24-24-24H280c-13.3 0-24 10.7-24 24s10.7 24 24 24h16V81.6c-30.7 4.2-58.8 16.3-82.3 34.1L189.9 92l11.3-11.3c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L134.1 79.8 38.8 5.1zM149.2 213.5c-1.5 6-2.7 12.2-3.5 18.5H112V216c0-13.3-10.7-24-24-24s-24 10.7-24 24v80c0 13.3 10.7 24 24 24s24-10.7 24-24V280h33.6c4.2 30.7 16.3 58.8 34.1 82.3L156 386.1l-11.3-11.3c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l56.6 56.6c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L189.9 420l23.8-23.8c23.5 17.9 51.7 29.9 82.3 34.1V464H280c-13.3 0-24 10.7-24 24s10.7 24 24 24h80c13.3 0 24-10.7 24-24s-10.7-24-24-24H344V430.4c20.4-2.8 39.7-9.1 57.3-18.2L149.2 213.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"virus-slash\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e075\"]\n      }\n    },\n    \"changes\": [\n      \"5.13.0\",\n      \"5.14.0\",\n      \"6.0.0-beta1\",\n      \"6.1.2\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bug\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"cure\",\n        \"eliminate\",\n        \"flu\",\n        \"health\",\n        \"infection\",\n        \"pandemic\",\n        \"sick\",\n        \"vaccine\",\n        \"viral\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e075\",\n    \"label\": \"Virus Slash\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-154.3-121c-2-30.1 20.8-60.1 56-60.1H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H532.5c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C412.3 118.4 352 93.4 352 43.5V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43.5c0 49.9-60.3 74.9-95.6 39.6L184.2 75c-12.5-12.5-32.8-12.5-45.3 0c-1.6 1.6-3.1 3.4-4.3 5.3L38.8 5.1zm225.8 177c6.9-3.9 14.9-6.1 23.4-6.1c26.5 0 48 21.5 48 48c0 4.4-.6 8.7-1.7 12.7l-69.7-54.6zM402 412.7L144.7 210c-9.5 8.5-22.2 14-37.2 14H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h11.5c49.9 0 74.9 60.3 39.6 95.6l-8.2 8.2c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V468.5c0-31.2 23.6-52.7 50-55.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7l-154.3-121c-2-30.1 20.8-60.1 56-60.1H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H532.5c-49.9 0-74.9-60.3-39.6-95.6l8.2-8.2c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-8.2 8.2C412.3 118.4 352 93.4 352 43.5V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V43.5c0 49.9-60.3 74.9-95.6 39.6L184.2 75c-12.5-12.5-32.8-12.5-45.3 0c-1.6 1.6-3.1 3.4-4.3 5.3L38.8 5.1zm225.8 177c6.9-3.9 14.9-6.1 23.4-6.1c26.5 0 48 21.5 48 48c0 4.4-.6 8.7-1.7 12.7l-69.7-54.6zM402 412.7L144.7 210c-9.5 8.5-22.2 14-37.2 14H96c-17.7 0-32 14.3-32 32s14.3 32 32 32h11.5c49.9 0 74.9 60.3 39.6 95.6l-8.2 8.2c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l8.2-8.2c35.3-35.3 95.6-10.3 95.6 39.6V480c0 17.7 14.3 32 32 32s32-14.3 32-32V468.5c0-31.2 23.6-52.7 50-55.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"viruses\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10e076\"]\n      }\n    },\n    \"changes\": [\"5.13.0\", \"5.14.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"bugs\",\n        \"coronavirus\",\n        \"covid-19\",\n        \"flu\",\n        \"health\",\n        \"infection\",\n        \"multiply\",\n        \"pandemic\",\n        \"sick\",\n        \"spread\",\n        \"vaccine\",\n        \"viral\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e076\",\n    \"label\": \"Viruses\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766750,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M192 0c13.3 0 24 10.7 24 24V37.5c0 35.6 43.1 53.5 68.3 28.3l9.5-9.5c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-9.5 9.5C293 124.9 310.9 168 346.5 168H360c13.3 0 24 10.7 24 24s-10.7 24-24 24H346.5c-35.6 0-53.5 43.1-28.3 68.3l9.5 9.5c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-9.5-9.5C259.1 293 216 310.9 216 346.5V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V346.5c0-35.6-43.1-53.5-68.3-28.3l-9.5 9.5c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l9.5-9.5C91 259.1 73.1 216 37.5 216H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H37.5c35.6 0 53.5-43.1 28.3-68.3l-9.5-9.5c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l9.5 9.5C124.9 91 168 73.1 168 37.5V24c0-13.3 10.7-24 24-24zm48 224a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48-64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm320 80c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C574.5 312.1 591 352 624 352c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C551.9 446.5 512 463 512 496c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C417.5 423.9 401 384 368 384c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C440.1 289.5 480 273 480 240c0-8.8 7.2-16 16-16s16 7.2 16 16zm0 112a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M192 0c13.3 0 24 10.7 24 24V37.5c0 35.6 43.1 53.5 68.3 28.3l9.5-9.5c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-9.5 9.5C293 124.9 310.9 168 346.5 168H360c13.3 0 24 10.7 24 24s-10.7 24-24 24H346.5c-35.6 0-53.5 43.1-28.3 68.3l9.5 9.5c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-9.5-9.5C259.1 293 216 310.9 216 346.5V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V346.5c0-35.6-43.1-53.5-68.3-28.3l-9.5 9.5c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l9.5-9.5C91 259.1 73.1 216 37.5 216H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H37.5c35.6 0 53.5-43.1 28.3-68.3l-9.5-9.5c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l9.5 9.5C124.9 91 168 73.1 168 37.5V24c0-13.3 10.7-24 24-24zm48 224a16 16 0 1 0 0-32 16 16 0 1 0 0 32zm-48-64a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm320 80c0 33 39.9 49.5 63.2 26.2c6.2-6.2 16.4-6.2 22.6 0s6.2 16.4 0 22.6C574.5 312.1 591 352 624 352c8.8 0 16 7.2 16 16s-7.2 16-16 16c-33 0-49.5 39.9-26.2 63.2c6.2 6.2 6.2 16.4 0 22.6s-16.4 6.2-22.6 0C551.9 446.5 512 463 512 496c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-33-39.9-49.5-63.2-26.2c-6.2 6.2-16.4 6.2-22.6 0s-6.2-16.4 0-22.6C417.5 423.9 401 384 368 384c-8.8 0-16-7.2-16-16s7.2-16 16-16c33 0 49.5-39.9 26.2-63.2c-6.2-6.2-6.2-16.4 0-22.6s16.4-6.2 22.6 0C440.1 289.5 480 273 480 240c0-8.8 7.2-16 16-16s16 7.2 16 16zm0 112a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vk\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\", \"6.0.0-beta3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f189\",\n    \"label\": \"VK\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M31.4907 63.4907C0 94.9813 0 145.671 0 247.04V264.96C0 366.329 0 417.019 31.4907 448.509C62.9813 480 113.671 480 215.04 480H232.96C334.329 480 385.019 480 416.509 448.509C448 417.019 448 366.329 448 264.96V247.04C448 145.671 448 94.9813 416.509 63.4907C385.019 32 334.329 32 232.96 32H215.04C113.671 32 62.9813 32 31.4907 63.4907ZM75.6 168.267H126.747C128.427 253.76 166.133 289.973 196 297.44V168.267H244.16V242C273.653 238.827 304.64 205.227 315.093 168.267H363.253C359.313 187.435 351.46 205.583 340.186 221.579C328.913 237.574 314.461 251.071 297.733 261.227C316.41 270.499 332.907 283.63 346.132 299.751C359.357 315.873 369.01 334.618 374.453 354.747H321.44C316.555 337.262 306.614 321.61 292.865 309.754C279.117 297.899 262.173 290.368 244.16 288.107V354.747H238.373C136.267 354.747 78.0267 284.747 75.6 168.267Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M31.4907 63.4907C0 94.9813 0 145.671 0 247.04V264.96C0 366.329 0 417.019 31.4907 448.509C62.9813 480 113.671 480 215.04 480H232.96C334.329 480 385.019 480 416.509 448.509C448 417.019 448 366.329 448 264.96V247.04C448 145.671 448 94.9813 416.509 63.4907C385.019 32 334.329 32 232.96 32H215.04C113.671 32 62.9813 32 31.4907 63.4907ZM75.6 168.267H126.747C128.427 253.76 166.133 289.973 196 297.44V168.267H244.16V242C273.653 238.827 304.64 205.227 315.093 168.267H363.253C359.313 187.435 351.46 205.583 340.186 221.579C328.913 237.574 314.461 251.071 297.733 261.227C316.41 270.499 332.907 283.63 346.132 299.751C359.357 315.873 369.01 334.618 374.453 354.747H321.44C316.555 337.262 306.614 321.61 292.865 309.754C279.117 297.899 262.173 290.368 244.16 288.107V354.747H238.373C136.267 354.747 78.0267 284.747 75.6 168.267Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"vnv\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f40b\",\n    \"label\": \"VNV\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"voicemail\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f897\"]\n      }\n    },\n    \"changes\": [\"5.9.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"answer\", \"inbox\", \"message\", \"phone\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f897\",\n    \"label\": \"Voicemail\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767389,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M144 320a80 80 0 1 1 0-160 80 80 0 1 1 0 160zm119.8 0c15.3-22.9 24.2-50.4 24.2-80c0-79.5-64.5-144-144-144S0 160.5 0 240s64.5 144 144 144H496c79.5 0 144-64.5 144-144s-64.5-144-144-144s-144 64.5-144 144c0 29.6 8.9 57.1 24.2 80H263.8zM496 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M144 320a80 80 0 1 1 0-160 80 80 0 1 1 0 160zm119.8 0c15.3-22.9 24.2-50.4 24.2-80c0-79.5-64.5-144-144-144S0 160.5 0 240s64.5 144 144 144H496c79.5 0 144-64.5 144-144s-64.5-144-144-144s-144 64.5-144 144c0 29.6 8.9 57.1 24.2 80H263.8zM496 160a80 80 0 1 1 0 160 80 80 0 1 1 0-160z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"volcano\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f30b\"],\n        \"secondary\": [\"10f770\"]\n      }\n    },\n    \"changes\": [\n      \"5.5.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.1.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"caldera\",\n        \"eruption\",\n        \"lava\",\n        \"magma\",\n        \"mountain\",\n        \"smoke\",\n        \"volcano\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f770\",\n    \"label\": \"Volcano\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M160 144c-35.3 0-64-28.7-64-64s28.7-64 64-64c15.7 0 30 5.6 41.2 15C212.4 12.4 232.7 0 256 0s43.6 12.4 54.8 31C322 21.6 336.3 16 352 16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-14.7 0-28.3-5-39.1-13.3l-32 48C275.3 187 266 192 256 192s-19.3-5-24.9-13.3l-32-48C188.3 139 174.7 144 160 144zM144 352l48.4-24.2c10.2-5.1 21.6-7.8 33-7.8c19.6 0 38.4 7.8 52.2 21.6l32.5 32.5c6.3 6.3 14.9 9.9 23.8 9.9c11.3 0 21.8-5.6 28-15l9.7-14.6-58.9-66.3c-9.1-10.2-22.2-16.1-35.9-16.1H235.1c-13.7 0-26.8 5.9-35.9 16.1l-59.9 67.4L144 352zm19.4-95.8c18.2-20.5 44.3-32.2 71.8-32.2h41.8c27.4 0 53.5 11.7 71.8 32.2l150.2 169c8.5 9.5 13.2 21.9 13.2 34.7c0 28.8-23.4 52.2-52.2 52.2H52.2C23.4 512 0 488.6 0 459.8c0-12.8 4.7-25.1 13.2-34.7l150.2-169z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M160 144c-35.3 0-64-28.7-64-64s28.7-64 64-64c15.7 0 30 5.6 41.2 15C212.4 12.4 232.7 0 256 0s43.6 12.4 54.8 31C322 21.6 336.3 16 352 16c35.3 0 64 28.7 64 64s-28.7 64-64 64c-14.7 0-28.3-5-39.1-13.3l-32 48C275.3 187 266 192 256 192s-19.3-5-24.9-13.3l-32-48C188.3 139 174.7 144 160 144zM144 352l48.4-24.2c10.2-5.1 21.6-7.8 33-7.8c19.6 0 38.4 7.8 52.2 21.6l32.5 32.5c6.3 6.3 14.9 9.9 23.8 9.9c11.3 0 21.8-5.6 28-15l9.7-14.6-58.9-66.3c-9.1-10.2-22.2-16.1-35.9-16.1H235.1c-13.7 0-26.8 5.9-35.9 16.1l-59.9 67.4L144 352zm19.4-95.8c18.2-20.5 44.3-32.2 71.8-32.2h41.8c27.4 0 53.5 11.7 71.8 32.2l150.2 169c8.5 9.5 13.2 21.9 13.2 34.7c0 28.8-23.4 52.2-52.2 52.2H52.2C23.4 512 0 488.6 0 459.8c0-12.8 4.7-25.1 13.2-34.7l150.2-169z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"volleyball\": {\n    \"aliases\": {\n      \"names\": [\"volleyball-ball\"],\n      \"unicodes\": {\n        \"composite\": [\"1f3d0\"],\n        \"secondary\": [\"10f45f\"]\n      }\n    },\n    \"changes\": [\"5.0.5\", \"5.8.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ball\", \"beach\", \"game\", \"olympics\", \"sport\", \"volleyball\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f45f\",\n    \"label\": \"Volleyball\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767071,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M511.8 267.4c-26.1 8.7-53.4 13.8-81 15.1c9.2-105.3-31.5-204.2-103.2-272.4C434.1 41.1 512 139.5 512 256c0 3.8-.1 7.6-.2 11.4zm-3.9 34.7c-5.8 32-17.6 62-34.2 88.7c-97.5 48.5-217.7 42.6-311.9-24.5c23.7-36.2 55.4-67.7 94.5-91.8c79.9 43.2 170.1 50.8 251.6 27.6zm-236-55.5c-2.5-90.9-41.1-172.7-101.9-231.7C196.8 5.2 225.8 0 256 0c2.7 0 5.3 0 7.9 .1c90.8 60.2 145.7 167.2 134.7 282.3c-43.1-2.4-86.4-14.1-126.8-35.9zM138 28.8c20.6 18.3 38.7 39.4 53.7 62.6C95.9 136.1 30.6 220.8 7.3 316.9C2.5 297.4 0 277 0 256C0 157.2 56 71.5 138 28.8zm69.6 90.5c19.5 38.6 31 81.9 32.3 127.7C162.5 294.6 110.9 368.9 90.2 451C66 430.4 45.6 405.4 30.4 377.2c6.7-108.7 71.9-209.9 177.1-257.9zM256 512c-50.7 0-98-14.7-137.8-40.2c5.6-27 14.8-53.1 27.4-77.7C232.2 454.6 338.1 468.8 433 441c-46 44-108.3 71-177 71z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M511.8 267.4c-26.1 8.7-53.4 13.8-81 15.1c9.2-105.3-31.5-204.2-103.2-272.4C434.1 41.1 512 139.5 512 256c0 3.8-.1 7.6-.2 11.4zm-3.9 34.7c-5.8 32-17.6 62-34.2 88.7c-97.5 48.5-217.7 42.6-311.9-24.5c23.7-36.2 55.4-67.7 94.5-91.8c79.9 43.2 170.1 50.8 251.6 27.6zm-236-55.5c-2.5-90.9-41.1-172.7-101.9-231.7C196.8 5.2 225.8 0 256 0c2.7 0 5.3 0 7.9 .1c90.8 60.2 145.7 167.2 134.7 282.3c-43.1-2.4-86.4-14.1-126.8-35.9zM138 28.8c20.6 18.3 38.7 39.4 53.7 62.6C95.9 136.1 30.6 220.8 7.3 316.9C2.5 297.4 0 277 0 256C0 157.2 56 71.5 138 28.8zm69.6 90.5c19.5 38.6 31 81.9 32.3 127.7C162.5 294.6 110.9 368.9 90.2 451C66 430.4 45.6 405.4 30.4 377.2c6.7-108.7 71.9-209.9 177.1-257.9zM256 512c-50.7 0-98-14.7-137.8-40.2c5.6-27 14.8-53.1 27.4-77.7C232.2 454.6 338.1 468.8 433 441c-46 44-108.3 71-177 71z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"volume-high\": {\n    \"aliases\": {\n      \"names\": [\"volume-up\"],\n      \"unicodes\": {\n        \"composite\": [\"1f50a\"],\n        \"secondary\": [\"10f028\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"higher\",\n        \"loud\",\n        \"louder\",\n        \"music\",\n        \"sound\",\n        \"speaker\",\n        \"speaker high volume\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f028\",\n    \"label\": \"Volume High\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M533.6 32.5C598.5 85.3 640 165.8 640 256s-41.5 170.8-106.4 223.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C557.5 398.2 592 331.2 592 256s-34.5-142.2-88.7-186.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM473.1 107c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C475.3 341.3 496 301.1 496 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M533.6 32.5C598.5 85.3 640 165.8 640 256s-41.5 170.8-106.4 223.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C557.5 398.2 592 331.2 592 256s-34.5-142.2-88.7-186.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM473.1 107c43.2 35.2 70.9 88.9 70.9 149s-27.7 113.8-70.9 149c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C475.3 341.3 496 301.1 496 256s-20.7-85.3-53.2-111.8c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zm-60.5 74.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5zM301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"volume-low\": {\n    \"aliases\": {\n      \"names\": [\"volume-down\"],\n      \"unicodes\": {\n        \"composite\": [\"1f508\"],\n        \"secondary\": [\"10f027\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"audio\",\n        \"lower\",\n        \"music\",\n        \"quieter\",\n        \"soft\",\n        \"sound\",\n        \"speaker\",\n        \"speaker low volume\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f027\",\n    \"label\": \"Volume Low\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM412.6 181.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM412.6 181.5C434.1 199.1 448 225.9 448 256s-13.9 56.9-35.4 74.5c-10.3 8.4-25.4 6.8-33.8-3.5s-6.8-25.4 3.5-33.8C393.1 284.4 400 271 400 256s-6.9-28.4-17.7-37.3c-10.3-8.4-11.8-23.5-3.5-33.8s23.5-11.8 33.8-3.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"volume-off\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f026\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.8.0\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"audio\", \"ban\", \"music\", \"mute\", \"quiet\", \"silent\", \"sound\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f026\",\n    \"label\": \"Volume Off\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M320 64c0-12.6-7.4-24-18.9-29.2s-25-3.1-34.4 5.3L131.8 160H64c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64h67.8L266.7 471.9c9.4 8.4 22.9 10.4 34.4 5.3S320 460.6 320 448V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M320 64c0-12.6-7.4-24-18.9-29.2s-25-3.1-34.4 5.3L131.8 160H64c-35.3 0-64 28.7-64 64v64c0 35.3 28.7 64 64 64h67.8L266.7 471.9c9.4 8.4 22.9 10.4 34.4 5.3S320 460.6 320 448V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"volume-xmark\": {\n    \"aliases\": {\n      \"names\": [\"volume-mute\", \"volume-times\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f6a9\"]\n      }\n    },\n    \"changes\": [\"5.3.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"audio\", \"music\", \"quiet\", \"sound\", \"speaker\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6a9\",\n    \"label\": \"Volume Xmark\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM425 167l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M301.1 34.8C312.6 40 320 51.4 320 64V448c0 12.6-7.4 24-18.9 29.2s-25 3.1-34.4-5.3L131.8 352H64c-35.3 0-64-28.7-64-64V224c0-35.3 28.7-64 64-64h67.8L266.7 40.1c9.4-8.4 22.9-10.4 34.4-5.3zM425 167l55 55 55-55c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-55 55 55 55c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-55-55-55 55c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l55-55-55-55c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vr-cardboard\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f729\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"3d\", \"augment\", \"google\", \"reality\", \"virtual\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f729\",\n    \"label\": \"Vr Cardboard\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M576 64H64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H184.4c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M576 64H64C28.7 64 0 92.7 0 128V384c0 35.3 28.7 64 64 64H184.4c24.2 0 46.4-13.7 57.2-35.4l32-64c8.8-17.5 26.7-28.6 46.3-28.6s37.5 11.1 46.3 28.6l32 64c10.8 21.7 33 35.4 57.2 35.4H576c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64zM96 240a64 64 0 1 1 128 0A64 64 0 1 1 96 240zm384-64a64 64 0 1 1 0 128 64 64 0 1 1 0-128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"vuejs\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f41f\",\n    \"label\": \"Vue.js\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"w\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"77\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter W\", \"Latin Small Letter W\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"57\",\n    \"label\": \"W\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767247,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M20.8 34c16.5-6.2 35 2.2 41.2 18.7l110.2 294L257.3 55c4-13.7 16.5-23 30.7-23s26.7 9.4 30.7 23l85.1 291.7L514 52.8c6.2-16.5 24.6-24.9 41.2-18.7s24.9 24.7 18.7 41.2l-144 384c-4.8 12.9-17.4 21.3-31.2 20.7s-25.7-9.8-29.5-23L288 178.3 206.7 457c-3.9 13.2-15.8 22.5-29.5 23s-26.3-7.8-31.2-20.7L2 75.2C-4.2 58.7 4.2 40.2 20.8 34z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M20.8 34c16.5-6.2 35 2.2 41.2 18.7l110.2 294L257.3 55c4-13.7 16.5-23 30.7-23s26.7 9.4 30.7 23l85.1 291.7L514 52.8c6.2-16.5 24.6-24.9 41.2-18.7s24.9 24.7 18.7 41.2l-144 384c-4.8 12.9-17.4 21.3-31.2 20.7s-25.7-9.8-29.5-23L288 178.3 206.7 457c-3.9 13.2-15.8 22.5-29.5 23s-26.3-7.8-31.2-20.7L2 75.2C-4.2 58.7 4.2 40.2 20.8 34z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"walkie-talkie\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f8ef\"]\n      }\n    },\n    \"changes\": [\"5.11.0\", \"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"communication\",\n        \"copy\",\n        \"intercom\",\n        \"over\",\n        \"portable\",\n        \"radio\",\n        \"two way radio\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f8ef\",\n    \"label\": \"Walkie Talkie\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766675,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M112 24c0-13.3-10.7-24-24-24S64 10.7 64 24V96H48C21.5 96 0 117.5 0 144V300.1c0 12.7 5.1 24.9 14.1 33.9l3.9 3.9c9 9 14.1 21.2 14.1 33.9V464c0 26.5 21.5 48 48 48H304c26.5 0 48-21.5 48-48V371.9c0-12.7 5.1-24.9 14.1-33.9l3.9-3.9c9-9 14.1-21.2 14.1-33.9V144c0-26.5-21.5-48-48-48H320c0-17.7-14.3-32-32-32s-32 14.3-32 32H224c0-17.7-14.3-32-32-32s-32 14.3-32 32H112V24zm0 136H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M112 24c0-13.3-10.7-24-24-24S64 10.7 64 24V96H48C21.5 96 0 117.5 0 144V300.1c0 12.7 5.1 24.9 14.1 33.9l3.9 3.9c9 9 14.1 21.2 14.1 33.9V464c0 26.5 21.5 48 48 48H304c26.5 0 48-21.5 48-48V371.9c0-12.7 5.1-24.9 14.1-33.9l3.9-3.9c9-9 14.1-21.2 14.1-33.9V144c0-26.5-21.5-48-48-48H320c0-17.7-14.3-32-32-32s-32 14.3-32 32H224c0-17.7-14.3-32-32-32s-32 14.3-32 32H112V24zm0 136H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wallet\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f555\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"billfold\", \"cash\", \"currency\", \"money\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f555\",\n    \"label\": \"Wallet\",\n    \"voted\": true,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64H80c-8.8 0-16-7.2-16-16s7.2-16 16-16H448c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM416 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V192c0-35.3-28.7-64-64-64H80c-8.8 0-16-7.2-16-16s7.2-16 16-16H448c17.7 0 32-14.3 32-32s-14.3-32-32-32H64zM416 272a32 32 0 1 1 0 64 32 32 0 1 1 0-64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wand-magic\": {\n    \"aliases\": {\n      \"names\": [\"magic\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f0d0\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.1.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"autocomplete\",\n        \"automatic\",\n        \"mage\",\n        \"magic\",\n        \"spell\",\n        \"wand\",\n        \"witch\",\n        \"wizard\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0d0\",\n    \"label\": \"Wand Magic\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767366,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M14.1 463.3c-18.7-18.7-18.7-49.1 0-67.9L395.4 14.1c18.7-18.7 49.1-18.7 67.9 0l34.6 34.6c18.7 18.7 18.7 49.1 0 67.9L116.5 497.9c-18.7 18.7-49.1 18.7-67.9 0L14.1 463.3zM347.6 187.6l105-105L429.4 59.3l-105 105 23.3 23.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M14.1 463.3c-18.7-18.7-18.7-49.1 0-67.9L395.4 14.1c18.7-18.7 49.1-18.7 67.9 0l34.6 34.6c18.7 18.7 18.7 49.1 0 67.9L116.5 497.9c-18.7 18.7-49.1 18.7-67.9 0L14.1 463.3zM347.6 187.6l105-105L429.4 59.3l-105 105 23.3 23.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wand-magic-sparkles\": {\n    \"aliases\": {\n      \"names\": [\"magic-wand-sparkles\"]\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.0.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"auto\", \"magic\", \"magic wand\", \"trick\", \"witch\", \"wizard\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2ca\",\n    \"label\": \"Wand Magic Sparkles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767368,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wand-sparkles\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f72b\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"autocomplete\",\n        \"automatic\",\n        \"fantasy\",\n        \"halloween\",\n        \"holiday\",\n        \"magic\",\n        \"weapon\",\n        \"witch\",\n        \"wizard\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f72b\",\n    \"label\": \"Wand Sparkles\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M464 6.1c9.5-8.5 24-8.1 33 .9l8 8c9 9 9.4 23.5 .9 33l-85.8 95.9c-2.6 2.9-4.1 6.7-4.1 10.7V176c0 8.8-7.2 16-16 16H384.2c-4.6 0-8.9 1.9-11.9 5.3L100.7 500.9C94.3 508 85.3 512 75.8 512c-8.8 0-17.3-3.5-23.5-9.8L9.7 459.7C3.5 453.4 0 445 0 436.2c0-9.5 4-18.5 11.1-24.8l111.6-99.8c3.4-3 5.3-7.4 5.3-11.9V272c0-8.8 7.2-16 16-16h34.6c3.9 0 7.7-1.5 10.7-4.1L464 6.1zM432 288c3.6 0 6.7 2.4 7.7 5.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8l-14.8-51.7-51.7-14.8c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8zM87.7 69.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8L87.7 218.2c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8L57.5 166.5 5.8 151.7c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8L72.3 69.8c1-3.4 4.1-5.8 7.7-5.8s6.7 2.4 7.7 5.8zM208 0c3.7 0 6.9 2.5 7.8 6.1l6.8 27.3 27.3 6.8c3.6 .9 6.1 4.1 6.1 7.8s-2.5 6.9-6.1 7.8l-27.3 6.8-6.8 27.3c-.9 3.6-4.1 6.1-7.8 6.1s-6.9-2.5-7.8-6.1l-6.8-27.3-27.3-6.8c-3.6-.9-6.1-4.1-6.1-7.8s2.5-6.9 6.1-7.8l27.3-6.8 6.8-27.3c.9-3.6 4.1-6.1 7.8-6.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M464 6.1c9.5-8.5 24-8.1 33 .9l8 8c9 9 9.4 23.5 .9 33l-85.8 95.9c-2.6 2.9-4.1 6.7-4.1 10.7V176c0 8.8-7.2 16-16 16H384.2c-4.6 0-8.9 1.9-11.9 5.3L100.7 500.9C94.3 508 85.3 512 75.8 512c-8.8 0-17.3-3.5-23.5-9.8L9.7 459.7C3.5 453.4 0 445 0 436.2c0-9.5 4-18.5 11.1-24.8l111.6-99.8c3.4-3 5.3-7.4 5.3-11.9V272c0-8.8 7.2-16 16-16h34.6c3.9 0 7.7-1.5 10.7-4.1L464 6.1zM432 288c3.6 0 6.7 2.4 7.7 5.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8-14.8 51.7c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8l-14.8-51.7-51.7-14.8c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8 14.8-51.7c1-3.4 4.1-5.8 7.7-5.8zM87.7 69.8l14.8 51.7 51.7 14.8c3.4 1 5.8 4.1 5.8 7.7s-2.4 6.7-5.8 7.7l-51.7 14.8L87.7 218.2c-1 3.4-4.1 5.8-7.7 5.8s-6.7-2.4-7.7-5.8L57.5 166.5 5.8 151.7c-3.4-1-5.8-4.1-5.8-7.7s2.4-6.7 5.8-7.7l51.7-14.8L72.3 69.8c1-3.4 4.1-5.8 7.7-5.8s6.7 2.4 7.7 5.8zM208 0c3.7 0 6.9 2.5 7.8 6.1l6.8 27.3 27.3 6.8c3.6 .9 6.1 4.1 6.1 7.8s-2.5 6.9-6.1 7.8l-27.3 6.8-6.8 27.3c-.9 3.6-4.1 6.1-7.8 6.1s-6.9-2.5-7.8-6.1l-6.8-27.3-27.3-6.8c-3.6-.9-6.1-4.1-6.1-7.8s2.5-6.9 6.1-7.8l27.3-6.8 6.8-27.3c.9-3.6 4.1-6.1 7.8-6.1z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"warehouse\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f494\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.7\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"building\", \"capacity\", \"garage\", \"inventory\", \"storage\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f494\",\n    \"label\": \"Warehouse\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766827,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M0 488V171.3c0-26.2 15.9-49.7 40.2-59.4L308.1 4.8c7.6-3.1 16.1-3.1 23.8 0L599.8 111.9c24.3 9.7 40.2 33.3 40.2 59.4V488c0 13.3-10.7 24-24 24H568c-13.3 0-24-10.7-24-24V224c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32V488c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24zm488 24l-336 0c-13.3 0-24-10.7-24-24V432H512l0 56c0 13.3-10.7 24-24 24zM128 400V336H512v64H128zm0-96V224H512l0 80H128z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M0 488V171.3c0-26.2 15.9-49.7 40.2-59.4L308.1 4.8c7.6-3.1 16.1-3.1 23.8 0L599.8 111.9c24.3 9.7 40.2 33.3 40.2 59.4V488c0 13.3-10.7 24-24 24H568c-13.3 0-24-10.7-24-24V224c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32V488c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24zm488 24l-336 0c-13.3 0-24-10.7-24-24V432H512l0 56c0 13.3-10.7 24-24 24zM128 400V336H512v64H128zm0-96V224H512l0 80H128z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"watchman-monitoring\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e087\",\n    \"label\": \"Watchman Monitoring\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16ZM121.69,429.122C70.056,388.972,36.741,326.322,36.741,256a218.519,218.519,0,0,1,9.587-64.122l102.9-17.895-.121,10.967-13.943,2.013s-.144,12.5-.144,19.549a12.778,12.778,0,0,0,4.887,10.349l9.468,7.4Zm105.692-283.27,8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46,0,0,0-32.342,30.474-39.529,34.5-7.078,3.964-.144,9.344-.144,9.344l8.481,7.618-.048,4.369L75.982,131.045c39.644-56.938,105.532-94.3,180.018-94.3A218.754,218.754,0,0,1,420.934,111.77l-193.512,37.7Zm34.063,329.269-33.9-250.857,9.467-7.4a12.778,12.778,0,0,0,4.888-10.349c0-7.044-.144-19.549-.144-19.549l-13.943-2.013-.116-10.474,241.711,31.391A218.872,218.872,0,0,1,475.259,256C475.259,375.074,379.831,472.212,261.445,475.121Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496,496,388.548,496,256,388.548,16,256,16ZM121.69,429.122C70.056,388.972,36.741,326.322,36.741,256a218.519,218.519,0,0,1,9.587-64.122l102.9-17.895-.121,10.967-13.943,2.013s-.144,12.5-.144,19.549a12.778,12.778,0,0,0,4.887,10.349l9.468,7.4Zm105.692-283.27,8.48-7.618s6.934-5.38-.143-9.344c-7.188-4.024-39.53-34.5-39.53-34.5-5.348-5.477-8.257-7.347-15.46,0,0,0-32.342,30.474-39.529,34.5-7.078,3.964-.144,9.344-.144,9.344l8.481,7.618-.048,4.369L75.982,131.045c39.644-56.938,105.532-94.3,180.018-94.3A218.754,218.754,0,0,1,420.934,111.77l-193.512,37.7Zm34.063,329.269-33.9-250.857,9.467-7.4a12.778,12.778,0,0,0,4.888-10.349c0-7.044-.144-19.549-.144-19.549l-13.943-2.013-.116-10.474,241.711,31.391A218.872,218.872,0,0,1,475.259,256C475.259,375.074,379.831,472.212,261.445,475.121Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"water\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f773\"]\n      }\n    },\n    \"changes\": [\"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"lake\", \"liquid\", \"ocean\", \"sea\", \"swim\", \"wet\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f773\",\n    \"label\": \"Water\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767662,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M269.5 69.9c11.1-7.9 25.9-7.9 37 0C329 85.4 356.5 96 384 96c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 149.7 417 160 384 160c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4C42.8 92.6 61 83.5 75.3 71.6c11.1-9.5 27.3-10.1 39.2-1.7l0 0C136.7 85.2 165.1 96 192 96c27.5 0 55-10.6 77.5-26.1zm37 288C329 373.4 356.5 384 384 384c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 437.7 417 448 384 448c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 373.2 165.1 384 192 384c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0zm0-144C329 229.4 356.5 240 384 240c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 293.7 417 304 384 304c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.5 27.3-10.1 39.2-1.7l0 0C136.7 229.2 165.1 240 192 240c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M269.5 69.9c11.1-7.9 25.9-7.9 37 0C329 85.4 356.5 96 384 96c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 149.7 417 160 384 160c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4C42.8 92.6 61 83.5 75.3 71.6c11.1-9.5 27.3-10.1 39.2-1.7l0 0C136.7 85.2 165.1 96 192 96c27.5 0 55-10.6 77.5-26.1zm37 288C329 373.4 356.5 384 384 384c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 437.7 417 448 384 448c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 373.2 165.1 384 192 384c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0zm0-144C329 229.4 356.5 240 384 240c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 293.7 417 304 384 304c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.5 27.3-10.1 39.2-1.7l0 0C136.7 229.2 165.1 240 192 240c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"water-ladder\": {\n    \"aliases\": {\n      \"names\": [\"ladder-water\", \"swimming-pool\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5c5\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"ladder\", \"recreation\", \"swim\", \"water\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5c5\",\n    \"label\": \"Water Ladder\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767070,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M128 127.7C128 74.9 170.9 32 223.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7V224H384V127.7C384 74.9 426.9 32 479.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7V361c-1.6 1-3.3 2-4.8 3.1c-18 12.4-40.1 20.3-59.2 20.3h0V288H192v96.5c-19 0-41.2-7.9-59.1-20.3c-1.6-1.1-3.2-2.2-4.9-3.1V127.7zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M128 127.7C128 74.9 170.9 32 223.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7V224H384V127.7C384 74.9 426.9 32 479.7 32c48.3 0 89 36 95 83.9l1 8.2c2.2 17.5-10.2 33.5-27.8 35.7s-33.5-10.2-35.7-27.8l-1-8.2c-2-15.9-15.5-27.8-31.5-27.8c-17.5 0-31.7 14.2-31.7 31.7V361c-1.6 1-3.3 2-4.8 3.1c-18 12.4-40.1 20.3-59.2 20.3h0V288H192v96.5c-19 0-41.2-7.9-59.1-20.3c-1.6-1.1-3.2-2.2-4.9-3.1V127.7zM306.5 389.9C329 405.4 356.5 416 384 416c26.9 0 55.4-10.8 77.4-26.1l0 0c11.9-8.5 28.1-7.8 39.2 1.7c14.4 11.9 32.5 21 50.6 25.2c17.2 4 27.9 21.2 23.9 38.4s-21.2 27.9-38.4 23.9c-24.5-5.7-44.9-16.5-58.2-25C449.5 469.7 417 480 384 480c-31.9 0-60.6-9.9-80.4-18.9c-5.8-2.7-11.1-5.3-15.6-7.7c-4.5 2.4-9.7 5.1-15.6 7.7c-19.8 9-48.5 18.9-80.4 18.9c-33 0-65.5-10.3-94.5-25.8c-13.4 8.4-33.7 19.3-58.2 25c-17.2 4-34.4-6.7-38.4-23.9s6.7-34.4 23.9-38.4c18.1-4.2 36.2-13.3 50.6-25.2c11.1-9.4 27.3-10.1 39.2-1.7l0 0C136.7 405.2 165.1 416 192 416c27.5 0 55-10.6 77.5-26.1c11.1-7.9 25.9-7.9 37 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wave-square\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f83e\"]\n      }\n    },\n    \"changes\": [\"5.8.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"frequency\", \"pulse\", \"signal\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f83e\",\n    \"label\": \"Wave Square\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766677,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M128 64c0-17.7 14.3-32 32-32H320c17.7 0 32 14.3 32 32V416h96V256c0-17.7 14.3-32 32-32H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H512V448c0 17.7-14.3 32-32 32H320c-17.7 0-32-14.3-32-32V96H192V256c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h96V64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M128 64c0-17.7 14.3-32 32-32H320c17.7 0 32 14.3 32 32V416h96V256c0-17.7 14.3-32 32-32H608c17.7 0 32 14.3 32 32s-14.3 32-32 32H512V448c0 17.7-14.3 32-32 32H320c-17.7 0-32-14.3-32-32V96H192V256c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h96V64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"waze\": {\n    \"changes\": [\"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f83f\",\n    \"label\": \"Waze\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M502.17 201.67C516.69 287.53 471.23 369.59 389 409.8c13 34.1-12.4 70.2-48.32 70.2a51.68 51.68 0 0 1-51.57-49c-6.44.19-64.2 0-76.33-.64A51.69 51.69 0 0 1 159 479.92c-33.86-1.36-57.95-34.84-47-67.92-37.21-13.11-72.54-34.87-99.62-70.8-13-17.28-.48-41.8 20.84-41.8 46.31 0 32.22-54.17 43.15-110.26C94.8 95.2 193.12 32 288.09 32c102.48 0 197.15 70.67 214.08 169.67zM373.51 388.28c42-19.18 81.33-56.71 96.29-102.14 40.48-123.09-64.15-228-181.71-228-83.45 0-170.32 55.42-186.07 136-9.53 48.91 5 131.35-68.75 131.35C58.21 358.6 91.6 378.11 127 389.54c24.66-21.8 63.87-15.47 79.83 14.34 14.22 1 79.19 1.18 87.9.82a51.69 51.69 0 0 1 78.78-16.42zM205.12 187.13c0-34.74 50.84-34.75 50.84 0s-50.84 34.74-50.84 0zm116.57 0c0-34.74 50.86-34.75 50.86 0s-50.86 34.75-50.86 0zm-122.61 70.69c-3.44-16.94 22.18-22.18 25.62-5.21l.06.28c4.14 21.42 29.85 44 64.12 43.07 35.68-.94 59.25-22.21 64.11-42.77 4.46-16.05 28.6-10.36 25.47 6-5.23 22.18-31.21 62-91.46 62.9-42.55 0-80.88-27.84-87.9-64.25z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"weebly\": {\n    \"changes\": [\"5.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5cc\",\n    \"label\": \"Weebly\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"weibo\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f18a\",\n    \"label\": \"Weibo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"weight-hanging\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f5cd\"]\n      }\n    },\n    \"changes\": [\"5.1.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"anvil\", \"heavy\", \"measurement\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5cd\",\n    \"label\": \"Weight Hanging\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M224 96a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm122.5 32c3.5-10 5.5-20.8 5.5-32c0-53-43-96-96-96s-96 43-96 96c0 11.2 1.9 22 5.5 32H120c-22 0-41.2 15-46.6 36.4l-72 288c-3.6 14.3-.4 29.5 8.7 41.2S33.2 512 48 512H464c14.8 0 28.7-6.8 37.8-18.5s12.3-26.8 8.7-41.2l-72-288C433.2 143 414 128 392 128H346.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M224 96a32 32 0 1 1 64 0 32 32 0 1 1 -64 0zm122.5 32c3.5-10 5.5-20.8 5.5-32c0-53-43-96-96-96s-96 43-96 96c0 11.2 1.9 22 5.5 32H120c-22 0-41.2 15-46.6 36.4l-72 288c-3.6 14.3-.4 29.5 8.7 41.2S33.2 512 48 512H464c14.8 0 28.7-6.8 37.8-18.5s12.3-26.8 8.7-41.2l-72-288C433.2 143 414 128 392 128H346.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"weight-scale\": {\n    \"aliases\": {\n      \"names\": [\"weight\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f496\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"health\", \"measurement\", \"scale\", \"weight\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f496\",\n    \"label\": \"Weight Scale\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M128 176a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zM391.8 64C359.5 24.9 310.7 0 256 0S152.5 24.9 120.2 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H391.8zM296 224c0-10.6-4.1-20.2-10.9-27.4l33.6-78.3c3.5-8.1-.3-17.5-8.4-21s-17.5 .3-21 8.4L255.7 184c-22 .1-39.7 18-39.7 40c0 22.1 17.9 40 40 40s40-17.9 40-40z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M128 176a128 128 0 1 1 256 0 128 128 0 1 1 -256 0zM391.8 64C359.5 24.9 310.7 0 256 0S152.5 24.9 120.2 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H391.8zM296 224c0-10.6-4.1-20.2-10.9-27.4l33.6-78.3c3.5-8.1-.3-17.5-8.4-21s-17.5 .3-21 8.4L255.7 184c-22 .1-39.7 18-39.7 40c0 22.1 17.9 40 40 40s40-17.9 40-40z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"weixin\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1d7\",\n    \"label\": \"Weixin (WeChat)\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"whatsapp\": {\n    \"changes\": [\"4.3.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f232\",\n    \"label\": \"What's App\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014465,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wheat-awn\": {\n    \"aliases\": {\n      \"names\": [\"wheat-alt\"]\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"agriculture\", \"autumn\", \"fall\", \"farming\", \"grain\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2cd\",\n    \"label\": \"Wheat Awn\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0L486.5 231c6.2-6.2 6.2-16.4 0-22.6L475.2 197c-5.2-5.2-10.6-9.8-16.4-13.9L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0L486.5 231c6.2-6.2 6.2-16.4 0-22.6L475.2 197c-5.2-5.2-10.6-9.8-16.4-13.9L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wheat-awn-circle-exclamation\": {\n    \"changes\": [\"6.1.0\", \"6.1.2\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"affected\",\n        \"famine\",\n        \"food\",\n        \"gluten\",\n        \"hunger\",\n        \"starve\",\n        \"straw\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e598\",\n    \"label\": \"Wheat Awn Circle Exclamation\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c22.5 22.5 53.3 31.5 82.4 27c0-1 0-2.1 0-3.1c0-33.1 9.1-64.1 25-90.6c-15.5-8.7-32.5-13.8-49.8-15.5l31.9-31.9 12.2 12.2c6 6 12.6 11.1 19.7 15.2c27.5-34 67.3-57.5 112.6-63.8c-4.1-3.8-8.4-7.3-12.9-10.5L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M505 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L383 95c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l88-88zM305.5 27.3c-6.2-6.2-16.4-6.2-22.6 0L271.5 38.6c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4-30.5 30.5c-3.4-27.3-15.5-53.8-36.5-74.8L101.8 231c-6.2-6.2-16.4-6.2-22.6 0L67.9 242.3c-37.5 37.5-37.5 98.3 0 135.8l10.4 10.4L9.4 457.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l68.9-68.9 12.2 12.2c37.5 37.5 98.3 37.5 135.8 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-21.8-21.8-49.6-34.1-78.1-36.9l31.9-31.9 12.2 12.2c22.5 22.5 53.3 31.5 82.4 27c0-1 0-2.1 0-3.1c0-33.1 9.1-64.1 25-90.6c-15.5-8.7-32.5-13.8-49.8-15.5l31.9-31.9 12.2 12.2c6 6 12.6 11.1 19.7 15.2c27.5-34 67.3-57.5 112.6-63.8c-4.1-3.8-8.4-7.3-12.9-10.5L505 137c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-59.4 59.4c-20.6-4.4-42-3.7-62.3 2.1c6.1-21.3 6.6-43.8 1.4-65.3L409 41c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L329.1 52.9c-3.7-5-7.8-9.8-12.4-14.3L305.5 27.3zM496 512a144 144 0 1 0 0-288 144 144 0 1 0 0 288zm0-96a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm0-144c8.8 0 16 7.2 16 16v80c0 8.8-7.2 16-16 16s-16-7.2-16-16V288c0-8.8 7.2-16 16-16z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wheelchair\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f193\"]\n      }\n    },\n    \"changes\": [\n      \"4.0.0\",\n      \"5.0.0\",\n      \"5.10.2\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"users-people\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f193\",\n    \"label\": \"Wheelchair\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767532,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM120.5 247.2c12.4-4.7 18.7-18.5 14-30.9s-18.5-18.7-30.9-14C43.1 225.1 0 283.5 0 352c0 88.4 71.6 160 160 160c61.2 0 114.3-34.3 141.2-84.7c6.2-11.7 1.8-26.2-9.9-32.5s-26.2-1.8-32.5 9.9C240 440 202.8 464 160 464C98.1 464 48 413.9 48 352c0-47.9 30.1-88.8 72.5-104.8zM259.8 176l-1.9-9.7c-4.5-22.3-24-38.3-46.8-38.3c-30.1 0-52.7 27.5-46.8 57l23.1 115.5c6 29.9 32.2 51.4 62.8 51.4h5.1c.4 0 .8 0 1.3 0h94.1c6.7 0 12.6 4.1 15 10.4L402 459.2c6 16.1 23.8 24.6 40.1 19.1l48-16c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2l-18.7 6.2-25.5-68c-11.7-31.2-41.6-51.9-74.9-51.9H282.2l-9.6-48H336c17.7 0 32-14.3 32-32s-14.3-32-32-32H259.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M192 96a48 48 0 1 0 0-96 48 48 0 1 0 0 96zM120.5 247.2c12.4-4.7 18.7-18.5 14-30.9s-18.5-18.7-30.9-14C43.1 225.1 0 283.5 0 352c0 88.4 71.6 160 160 160c61.2 0 114.3-34.3 141.2-84.7c6.2-11.7 1.8-26.2-9.9-32.5s-26.2-1.8-32.5 9.9C240 440 202.8 464 160 464C98.1 464 48 413.9 48 352c0-47.9 30.1-88.8 72.5-104.8zM259.8 176l-1.9-9.7c-4.5-22.3-24-38.3-46.8-38.3c-30.1 0-52.7 27.5-46.8 57l23.1 115.5c6 29.9 32.2 51.4 62.8 51.4h5.1c.4 0 .8 0 1.3 0h94.1c6.7 0 12.6 4.1 15 10.4L402 459.2c6 16.1 23.8 24.6 40.1 19.1l48-16c16.8-5.6 25.8-23.7 20.2-40.5s-23.7-25.8-40.5-20.2l-18.7 6.2-25.5-68c-11.7-31.2-41.6-51.9-74.9-51.9H282.2l-9.6-48H336c17.7 0 32-14.3 32-32s-14.3-32-32-32H259.8z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wheelchair-move\": {\n    \"aliases\": {\n      \"names\": [\"wheelchair-alt\"]\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"access\",\n        \"handicap\",\n        \"impairment\",\n        \"physical\",\n        \"wheelchair symbol\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e2ce\",\n    \"label\": \"Wheelchair Move\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767531,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M320 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM204.5 121.3c-5.4-2.5-11.7-1.9-16.4 1.7l-40.9 30.7c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l40.9-30.7c23.7-17.8 55.3-21 82.1-8.4l90.4 42.5c29.1 13.7 36.8 51.6 15.2 75.5L299.1 224h97.4c30.3 0 53 27.7 47.1 57.4L415.4 422.3c-3.5 17.3-20.3 28.6-37.7 25.1s-28.6-20.3-25.1-37.7L377 288H306.7c8.6 19.6 13.3 41.2 13.3 64c0 88.4-71.6 160-160 160S0 440.4 0 352s71.6-160 160-160c11.1 0 22 1.1 32.4 3.3l54.2-54.2-42.1-19.8zM160 448a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M320 48a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM204.5 121.3c-5.4-2.5-11.7-1.9-16.4 1.7l-40.9 30.7c-14.1 10.6-34.2 7.7-44.8-6.4s-7.7-34.2 6.4-44.8l40.9-30.7c23.7-17.8 55.3-21 82.1-8.4l90.4 42.5c29.1 13.7 36.8 51.6 15.2 75.5L299.1 224h97.4c30.3 0 53 27.7 47.1 57.4L415.4 422.3c-3.5 17.3-20.3 28.6-37.7 25.1s-28.6-20.3-25.1-37.7L377 288H306.7c8.6 19.6 13.3 41.2 13.3 64c0 88.4-71.6 160-160 160S0 440.4 0 352s71.6-160 160-160c11.1 0 22 1.1 32.4 3.3l54.2-54.2-42.1-19.8zM160 448a96 96 0 1 0 0-192 96 96 0 1 0 0 192z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"whiskey-glass\": {\n    \"aliases\": {\n      \"names\": [\"glass-whiskey\"],\n      \"unicodes\": {\n        \"composite\": [\"1f943\"],\n        \"secondary\": [\"10f7a0\"]\n      }\n    },\n    \"changes\": [\"5.6.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"bar\",\n        \"beverage\",\n        \"bourbon\",\n        \"drink\",\n        \"glass\",\n        \"liquor\",\n        \"neat\",\n        \"rye\",\n        \"scotch\",\n        \"shot\",\n        \"tumbler\",\n        \"tumbler glass\",\n        \"whisky\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f7a0\",\n    \"label\": \"Whiskey Glass\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767420,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 32c-9.3 0-18.1 4-24.2 11.1S-1 59.4 .3 68.6l50 342.9c5.7 39.3 39.4 68.5 79.2 68.5h253c39.7 0 73.4-29.1 79.2-68.5l50-342.9c1.3-9.2-1.4-18.5-7.5-25.5S489.3 32 480 32H32zM87.7 224L69 96H443L424.3 224H87.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 32c-9.3 0-18.1 4-24.2 11.1S-1 59.4 .3 68.6l50 342.9c5.7 39.3 39.4 68.5 79.2 68.5h253c39.7 0 73.4-29.1 79.2-68.5l50-342.9c1.3-9.2-1.4-18.5-7.5-25.5S489.3 32 480 32H32zM87.7 224L69 96H443L424.3 224H87.7z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"whmcs\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f40d\",\n    \"label\": \"WHMCS\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014481,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wifi\": {\n    \"aliases\": {\n      \"names\": [\"wifi-3\", \"wifi-strong\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f1eb\"]\n      }\n    },\n    \"changes\": [\n      \"4.2.0\",\n      \"5.0.0\",\n      \"5.3.0\",\n      \"5.10.1\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"connection\", \"hotspot\", \"internet\", \"network\", \"wireless\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f1eb\",\n    \"label\": \"Wifi\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766676,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M54.2 202.9C123.2 136.7 216.8 96 320 96s196.8 40.7 265.8 106.9c12.8 12.2 33 11.8 45.2-.9s11.8-33-.9-45.2C549.7 79.5 440.4 32 320 32S90.3 79.5 9.8 156.7C-2.9 169-3.3 189.2 8.9 202s32.5 13.2 45.2 .9zM320 256c56.8 0 108.6 21.1 148.2 56c13.3 11.7 33.5 10.4 45.2-2.8s10.4-33.5-2.8-45.2C459.8 219.2 393 192 320 192s-139.8 27.2-190.5 72c-13.3 11.7-14.5 31.9-2.8 45.2s31.9 14.5 45.2 2.8c39.5-34.9 91.3-56 148.2-56zm64 160a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M54.2 202.9C123.2 136.7 216.8 96 320 96s196.8 40.7 265.8 106.9c12.8 12.2 33 11.8 45.2-.9s11.8-33-.9-45.2C549.7 79.5 440.4 32 320 32S90.3 79.5 9.8 156.7C-2.9 169-3.3 189.2 8.9 202s32.5 13.2 45.2 .9zM320 256c56.8 0 108.6 21.1 148.2 56c13.3 11.7 33.5 10.4 45.2-2.8s10.4-33.5-2.8-45.2C459.8 219.2 393 192 320 192s-139.8 27.2-190.5 72c-13.3 11.7-14.5 31.9-2.8 45.2s31.9 14.5 45.2 2.8c39.5-34.9 91.3-56 148.2-56zm64 160a64 64 0 1 0 -128 0 64 64 0 1 0 128 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wikipedia-w\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f266\",\n    \"label\": \"Wikipedia W\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wind\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f72e\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"5.5.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"air\", \"blow\", \"breeze\", \"fall\", \"seasonal\", \"weather\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f72e\",\n    \"label\": \"Wind\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767661,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M288 32c0 17.7 14.3 32 32 32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c53 0 96-43 96-96s-43-96-96-96H320c-17.7 0-32 14.3-32 32zm64 352c0 17.7 14.3 32 32 32h32c53 0 96-43 96-96s-43-96-96-96H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H384c-17.7 0-32 14.3-32 32zM128 512h32c53 0 96-43 96-96s-43-96-96-96H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H160c17.7 0 32 14.3 32 32s-14.3 32-32 32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M288 32c0 17.7 14.3 32 32 32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H352c53 0 96-43 96-96s-43-96-96-96H320c-17.7 0-32 14.3-32 32zm64 352c0 17.7 14.3 32 32 32h32c53 0 96-43 96-96s-43-96-96-96H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H384c-17.7 0-32 14.3-32 32zM128 512h32c53 0 96-43 96-96s-43-96-96-96H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H160c17.7 0 32 14.3 32 32s-14.3 32-32 32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"window-maximize\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5d6\"],\n        \"secondary\": [\"10f2d0\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Maximize\", \"browser\", \"computer\", \"development\", \"expand\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2d0\",\n    \"label\": \"Window Maximize\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM96 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32s14.3-32 32-32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM96 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767206,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M.3 89.5C.1 91.6 0 93.8 0 96V224 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64V224 96c0-35.3-28.7-64-64-64H64c-2.2 0-4.4 .1-6.5 .3c-9.2 .9-17.8 3.8-25.5 8.2C21.8 46.5 13.4 55.1 7.7 65.5c-3.9 7.3-6.5 15.4-7.4 24zM48 224H464l0 192c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-192z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M.3 89.5C.1 91.6 0 93.8 0 96V224 416c0 35.3 28.7 64 64 64l384 0c35.3 0 64-28.7 64-64V224 96c0-35.3-28.7-64-64-64H64c-2.2 0-4.4 .1-6.5 .3c-9.2 .9-17.8 3.8-25.5 8.2C21.8 46.5 13.4 55.1 7.7 65.5c-3.9 7.3-6.5 15.4-7.4 24zM48 224H464l0 192c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16l0-192z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"window-minimize\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f5d5\"],\n        \"secondary\": [\"10f2d1\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"5.10.1\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Minimize\", \"browser\", \"collapse\", \"computer\", \"development\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2d1\",\n    \"label\": \"Window Minimize\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M32 416c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767205,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M24 432c-13.3 0-24 10.7-24 24s10.7 24 24 24H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M24 432c-13.3 0-24 10.7-24 24s10.7 24 24 24H488c13.3 0 24-10.7 24-24s-10.7-24-24-24H24z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"window-restore\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f2d2\"]\n      }\n    },\n    \"changes\": [\n      \"4.7.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"browser\", \"computer\", \"development\"]\n    },\n    \"styles\": [\"solid\", \"regular\"],\n    \"unicode\": \"f2d2\",\n    \"label\": \"Window Restore\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M432 64H208c-8.8 0-16 7.2-16 16V96H128V80c0-44.2 35.8-80 80-80H432c44.2 0 80 35.8 80 80V304c0 44.2-35.8 80-80 80H416V320h16c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM0 192c0-35.3 28.7-64 64-64H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192zm64 32c0 17.7 14.3 32 32 32H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H96c-17.7 0-32 14.3-32 32z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M432 64H208c-8.8 0-16 7.2-16 16V96H128V80c0-44.2 35.8-80 80-80H432c44.2 0 80 35.8 80 80V304c0 44.2-35.8 80-80 80H416V320h16c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM0 192c0-35.3 28.7-64 64-64H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192zm64 32c0 17.7 14.3 32 32 32H288c17.7 0 32-14.3 32-32s-14.3-32-32-32H96c-17.7 0-32 14.3-32 32z\"\n      },\n      \"regular\": {\n        \"last_modified\": 1684767207,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M432 48H208c-17.7 0-32 14.3-32 32V96H128V80c0-44.2 35.8-80 80-80H432c44.2 0 80 35.8 80 80V304c0 44.2-35.8 80-80 80H416V336h16c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32zM48 448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V256H48V448zM64 128H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M432 48H208c-17.7 0-32 14.3-32 32V96H128V80c0-44.2 35.8-80 80-80H432c44.2 0 80 35.8 80 80V304c0 44.2-35.8 80-80 80H416V336h16c17.7 0 32-14.3 32-32V80c0-17.7-14.3-32-32-32zM48 448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V256H48V448zM64 128H320c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V192c0-35.3 28.7-64 64-64z\"\n      }\n    },\n    \"free\": [\"regular\", \"solid\"]\n  },\n  \"windows\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"microsoft\", \"operating system\", \"os\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f17a\",\n    \"label\": \"Windows\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wine-bottle\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f72f\"]\n      }\n    },\n    \"changes\": [\"5.4.0\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"beverage\",\n        \"cabernet\",\n        \"drink\",\n        \"glass\",\n        \"grapes\",\n        \"merlot\",\n        \"sauvignon\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f72f\",\n    \"label\": \"Wine Bottle\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M393.4 9.4c12.5-12.5 32.8-12.5 45.3 0l64 64c12.5 12.5 12.5 32.8 0 45.3c-11.8 11.8-30.7 12.5-43.2 1.9l-9.5 9.5-48.8 48.8c-9.2 9.2-11.5 22.9-8.6 35.6c9.4 40.9-1.9 85.6-33.8 117.5L197.3 493.3c-25 25-65.5 25-90.5 0l-88-88c-25-25-25-65.5 0-90.5L180.2 153.3c31.9-31.9 76.6-43.1 117.5-33.8c12.6 2.9 26.4 .5 35.5-8.6l48.8-48.8 9.5-9.5c-10.6-12.6-10-31.4 1.9-43.2zM99.3 347.3l65.4 65.4c6.2 6.2 16.4 6.2 22.6 0l97.4-97.4c6.2-6.2 6.2-16.4 0-22.6l-65.4-65.4c-6.2-6.2-16.4-6.2-22.6 0L99.3 324.7c-6.2 6.2-6.2 16.4 0 22.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M393.4 9.4c12.5-12.5 32.8-12.5 45.3 0l64 64c12.5 12.5 12.5 32.8 0 45.3c-11.8 11.8-30.7 12.5-43.2 1.9l-9.5 9.5-48.8 48.8c-9.2 9.2-11.5 22.9-8.6 35.6c9.4 40.9-1.9 85.6-33.8 117.5L197.3 493.3c-25 25-65.5 25-90.5 0l-88-88c-25-25-25-65.5 0-90.5L180.2 153.3c31.9-31.9 76.6-43.1 117.5-33.8c12.6 2.9 26.4 .5 35.5-8.6l48.8-48.8 9.5-9.5c-10.6-12.6-10-31.4 1.9-43.2zM99.3 347.3l65.4 65.4c6.2 6.2 16.4 6.2 22.6 0l97.4-97.4c6.2-6.2 6.2-16.4 0-22.6l-65.4-65.4c-6.2-6.2-16.4-6.2-22.6 0L99.3 324.7c-6.2 6.2-6.2 16.4 0 22.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wine-glass\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f377\"],\n        \"secondary\": [\"10f4e3\"]\n      }\n    },\n    \"changes\": [\n      \"5.0.9\",\n      \"5.1.0\",\n      \"5.10.1\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"bar\",\n        \"beverage\",\n        \"cabernet\",\n        \"drink\",\n        \"glass\",\n        \"grapes\",\n        \"merlot\",\n        \"sauvignon\",\n        \"wine\",\n        \"wine glass\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f4e3\",\n    \"label\": \"Wine Glass\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767419,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M32.1 29.3C33.5 12.8 47.4 0 64 0H256c16.6 0 30.5 12.8 31.9 29.3l14 168.4c6 72-42.5 135.2-109.9 150.6V448h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H160 80c-17.7 0-32-14.3-32-32s14.3-32 32-32h48V348.4C60.6 333 12.1 269.8 18.1 197.8l14-168.4zm56 98.7H231.9l-5.3-64H93.4l-5.3 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M32.1 29.3C33.5 12.8 47.4 0 64 0H256c16.6 0 30.5 12.8 31.9 29.3l14 168.4c6 72-42.5 135.2-109.9 150.6V448h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H160 80c-17.7 0-32-14.3-32-32s14.3-32 32-32h48V348.4C60.6 333 12.1 269.8 18.1 197.8l14-168.4zm56 98.7H231.9l-5.3-64H93.4l-5.3 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wine-glass-empty\": {\n    \"aliases\": {\n      \"names\": [\"wine-glass-alt\"],\n      \"unicodes\": {\n        \"secondary\": [\"10f5ce\"]\n      }\n    },\n    \"changes\": [\n      \"5.1.0\",\n      \"5.10.1\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\",\n      \"6.4.1\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"alcohol\",\n        \"beverage\",\n        \"cabernet\",\n        \"drink\",\n        \"grapes\",\n        \"merlot\",\n        \"sauvignon\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f5ce\",\n    \"label\": \"Wine Glass Empty\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767418,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M64 0C47.4 0 33.5 12.8 32.1 29.3l-14 168.4c-6 72 42.5 135.2 109.9 150.6V448H80c-17.7 0-32 14.3-32 32s14.3 32 32 32h80 80c17.7 0 32-14.3 32-32s-14.3-32-32-32H192V348.4c67.4-15.4 115.9-78.6 109.9-150.6l-14-168.4C286.5 12.8 272.6 0 256 0H64zM81.9 203.1L93.4 64H226.6l11.6 139.1C242 248.8 205.9 288 160 288s-82-39.2-78.1-84.9z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M64 0C47.4 0 33.5 12.8 32.1 29.3l-14 168.4c-6 72 42.5 135.2 109.9 150.6V448H80c-17.7 0-32 14.3-32 32s14.3 32 32 32h80 80c17.7 0 32-14.3 32-32s-14.3-32-32-32H192V348.4c67.4-15.4 115.9-78.6 109.9-150.6l-14-168.4C286.5 12.8 272.6 0 256 0H64zM81.9 203.1L93.4 64H226.6l11.6 139.1C242 248.8 205.9 288 160 288s-82-39.2-78.1-84.9z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wirsindhandwerk\": {\n    \"aliases\": {\n      \"names\": [\"wsh\"]\n    },\n    \"changes\": [\"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e2d0\",\n    \"label\": \"wirsindhandwerk\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M50.77161,479.81213h83.36071V367.84741l-83.36071,47.009Zm329.04675,0h82.35022V414.85645l-82.35022-47.009Zm.00568-448V251.568L256.1759,179.1861,134.50378,251.568V31.81213H50.77161V392.60565L256.1759,270.31909,462.16858,392.60565V31.81213Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M50.77161,479.81213h83.36071V367.84741l-83.36071,47.009Zm329.04675,0h82.35022V414.85645l-82.35022-47.009Zm.00568-448V251.568L256.1759,179.1861,134.50378,251.568V31.81213H50.77161V392.60565L256.1759,270.31909,462.16858,392.60565V31.81213Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wix\": {\n    \"changes\": [\"5.1.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f5cf\",\n    \"label\": \"Wix\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014463,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wizards-of-the-coast\": {\n    \"changes\": [\"5.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Dungeons & Dragons\",\n        \"d&d\",\n        \"dnd\",\n        \"fantasy\",\n        \"game\",\n        \"gaming\",\n        \"tabletop\"\n      ]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f730\",\n    \"label\": \"Wizards of the Coast\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014478,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M219.19 345.69c-1.9 1.38-11.07 8.44-.26 23.57 4.64 6.42 14.11 12.79 21.73 6.55 6.5-4.88 7.35-12.92.26-23.04-5.47-7.76-14.28-12.88-21.73-7.08zm336.75 75.94c-.34 1.7-.55 1.67.79 0 2.09-4.19 4.19-10.21 4.98-19.9 3.14-38.49-40.33-71.49-101.34-78.03-54.73-6.02-124.38 9.17-188.8 60.49l-.26 1.57c2.62 4.98 4.98 10.74 3.4 21.21l.79.26c63.89-58.4 131.19-77.25 184.35-73.85 58.4 3.67 100.03 34.04 100.03 68.08-.01 9.96-2.63 15.72-3.94 20.17zM392.28 240.42c.79 7.07 4.19 10.21 9.17 10.47 5.5.26 9.43-2.62 10.47-6.55.79-3.4 2.09-29.85 2.09-29.85s-11.26 6.55-14.93 10.47c-3.66 3.68-7.33 8.39-6.8 15.46zm-50.02-151.1C137.75 89.32 13.1 226.8.79 241.2c-1.05.52-1.31.79.79 1.31 60.49 16.5 155.81 81.18 196.13 202.16l1.05.26c55.25-69.92 140.88-128.05 236.99-128.05 80.92 0 130.15 42.16 130.15 80.39 0 18.33-6.55 33.52-22.26 46.35 0 .96-.2.79.79.79 14.66-10.74 27.5-28.8 27.5-48.18 0-22.78-12.05-38.23-12.05-38.23 7.07 7.07 10.74 16.24 10.74 16.24 5.76-40.85 26.97-62.32 26.97-62.32-2.36-9.69-6.81-17.81-6.81-17.81 7.59 8.12 14.4 27.5 14.4 41.37 0 10.47-3.4 22.78-12.57 31.95l.26.52c8.12-4.98 16.5-16.76 16.5-37.97 0-15.71-4.71-25.92-4.71-25.92 5.76-5.24 11.26-9.17 15.97-11.78.79 3.4 2.09 9.69 2.36 14.93 0 1.05.79 1.83 1.05 0 .79-5.76-.26-16.24-.26-16.5 6.02-3.14 9.69-4.45 9.69-4.45C617.74 176 489.43 89.32 342.26 89.32zm-99.24 289.62c-11.06 8.99-24.2 4.08-30.64-4.19-7.45-9.58-6.76-24.09 4.19-32.47 14.85-11.35 27.08-.49 31.16 5.5.28.39 12.13 16.57-4.71 31.16zm2.09-136.43l9.43-17.81 11.78 70.96-12.57 6.02-24.62-28.8 14.14-26.71 3.67 4.45-1.83-8.11zm18.59 117.58l-.26-.26c2.05-4.1-2.5-6.61-17.54-31.69-1.31-2.36-3.14-2.88-4.45-2.62l-.26-.52c7.86-5.76 15.45-10.21 25.4-15.71l.52.26c1.31 1.83 2.09 2.88 3.4 4.71l-.26.52c-1.05-.26-2.36-.79-5.24.26-2.09.79-7.86 3.67-12.31 7.59v1.31c1.57 2.36 3.93 6.55 5.76 9.69h.26c10.05-6.28 7.56-4.55 11.52-7.86h.26c.52 1.83.52 1.83 1.83 5.5l-.26.26c-3.06.61-4.65.34-11.52 5.5v.26c9.46 17.02 11.01 16.75 12.57 15.97l.26.26c-2.34 1.59-6.27 4.21-9.68 6.57zm55.26-32.47c-3.14 1.57-6.02 2.88-9.95 4.98l-.26-.26c1.29-2.59 1.16-2.71-11.78-32.47l-.26-.26c-.15 0-8.9 3.65-9.95 7.33h-.52l-1.05-5.76.26-.52c7.29-4.56 25.53-11.64 27.76-12.57l.52.26 3.14 4.98-.26.52c-3.53-1.76-7.35.76-12.31 2.62v.26c12.31 32.01 12.67 30.64 14.66 30.64v.25zm44.77-16.5c-4.19 1.05-5.24 1.31-9.69 2.88l-.26-.26.52-4.45c-1.05-3.4-3.14-11.52-3.67-13.62l-.26-.26c-3.4.79-8.9 2.62-12.83 3.93l-.26.26c.79 2.62 3.14 9.95 4.19 13.88.79 2.36 1.83 2.88 2.88 3.14v.52c-3.67 1.05-7.07 2.62-10.21 3.93l-.26-.26c1.05-1.31 1.05-2.88.26-4.98-1.05-3.14-8.12-23.83-9.17-27.23-.52-1.83-1.57-3.14-2.62-3.14v-.52c3.14-1.05 6.02-2.09 10.74-3.4l.26.26-.26 4.71c1.31 3.93 2.36 7.59 3.14 9.69h.26c3.93-1.31 9.43-2.88 12.83-3.93l.26-.26-2.62-9.43c-.52-1.83-1.05-3.4-2.62-3.93v-.26c4.45-1.05 7.33-1.83 10.74-2.36l.26.26c-1.05 1.31-1.05 2.88-.52 4.45 1.57 6.28 4.71 20.43 6.28 26.45.54 2.62 1.85 3.41 2.63 3.93zm32.21-6.81l-.26.26c-4.71.52-14.14 2.36-22.52 4.19l-.26-.26.79-4.19c-1.57-7.86-3.4-18.59-4.98-26.19-.26-1.83-.79-2.88-2.62-3.67l.79-.52c9.17-1.57 20.16-2.36 24.88-2.62l.26.26c.52 2.36.79 3.14 1.57 5.5l-.26.26c-1.14-1.14-3.34-3.2-16.24-.79l-.26.26c.26 1.57 1.05 6.55 1.57 9.95l.26.26c9.52-1.68 4.76-.06 10.74-2.36h.26c0 1.57-.26 1.83-.26 5.24h-.26c-4.81-1.03-2.15-.9-10.21 0l-.26.26c.26 2.09 1.57 9.43 2.09 12.57l.26.26c1.15.38 14.21-.65 16.24-4.71h.26c-.53 2.38-1.05 4.21-1.58 6.04zm10.74-44.51c-4.45 2.36-8.12 2.88-11 2.88-.25.02-11.41 1.09-17.54-9.95-6.74-10.79-.98-25.2 5.5-31.69 8.8-8.12 23.35-10.1 28.54-17.02 8.03-10.33-13.04-22.31-29.59-5.76l-2.62-2.88 5.24-16.24c25.59-1.57 45.2-3.04 50.02 16.24.79 3.14 0 9.43-.26 12.05 0 2.62-1.83 18.85-2.09 23.04-.52 4.19-.79 18.33-.79 20.69.26 2.36.52 4.19 1.57 5.5 1.57 1.83 5.76 1.83 5.76 1.83l-.79 4.71c-11.82-1.07-10.28-.59-20.43-1.05-3.22-5.15-2.23-3.28-4.19-7.86 0 .01-4.19 3.94-7.33 5.51zm37.18 21.21c-6.35-10.58-19.82-7.16-21.73 5.5-2.63 17.08 14.3 19.79 20.69 10.21l.26.26c-.52 1.83-1.83 6.02-1.83 6.28l-.52.52c-10.3 6.87-28.5-2.5-25.66-18.59 1.94-10.87 14.44-18.93 28.8-9.95l.26.52c0 1.06-.27 3.41-.27 5.25zm5.77-87.73v-6.55c.69 0 19.65 3.28 27.76 7.33l-1.57 17.54s10.21-9.43 15.45-10.74c5.24-1.57 14.93 7.33 14.93 7.33l-11.26 11.26c-12.07-6.35-19.59-.08-20.69.79-5.29 38.72-8.6 42.17 4.45 46.09l-.52 4.71c-17.55-4.29-18.53-4.5-36.92-7.33l.79-4.71c7.25 0 7.48-5.32 7.59-6.81 0 0 4.98-53.16 4.98-55.25-.02-2.87-4.99-3.66-4.99-3.66zm10.99 114.44c-8.12-2.09-14.14-11-10.74-20.69 3.14-9.43 12.31-12.31 18.85-10.21 9.17 2.62 12.83 11.78 10.74 19.38-2.61 8.9-9.42 13.87-18.85 11.52zm42.16 9.69c-2.36-.52-7.07-2.36-8.64-2.88v-.26l1.57-1.83c.59-8.24.59-7.27.26-7.59-4.82-1.81-6.66-2.36-7.07-2.36-1.31 1.83-2.88 4.45-3.67 5.5l-.79 3.4v.26c-1.31-.26-3.93-1.31-6.02-1.57v-.26l2.62-1.83c3.4-4.71 9.95-14.14 13.88-20.16v-2.09l.52-.26c2.09.79 5.5 2.09 7.59 2.88.48.48.18-1.87-1.05 25.14-.24 1.81.02 2.6.8 3.91zm-4.71-89.82c11.25-18.27 30.76-16.19 34.04-3.4L539.7 198c2.34-6.25-2.82-9.9-4.45-11.26l1.83-3.67c12.22 10.37 16.38 13.97 22.52 20.43-25.91 73.07-30.76 80.81-24.62 84.32l-1.83 4.45c-6.37-3.35-8.9-4.42-17.81-8.64l2.09-6.81c-.26-.26-3.93 3.93-9.69 3.67-19.06-1.3-22.89-31.75-9.67-52.9zm29.33 79.34c0-5.71-6.34-7.89-7.86-5.24-1.31 2.09 1.05 4.98 2.88 8.38 1.57 2.62 2.62 6.28 1.05 9.43-2.64 6.34-12.4 5.31-15.45-.79 0-.7-.27.09 1.83-4.71l.79-.26c-.57 5.66 6.06 9.61 8.38 4.98 1.05-2.09-.52-5.5-2.09-8.38-1.57-2.62-3.67-6.28-1.83-9.69 2.72-5.06 11.25-4.47 14.66 2.36v.52l-2.36 3.4zm21.21 13.36c-1.96-3.27-.91-2.14-4.45-4.71h-.26c-2.36 4.19-5.76 10.47-8.64 16.24-1.31 2.36-1.05 3.4-.79 3.93l-.26.26-5.76-4.45.26-.26 2.09-1.31c3.14-5.76 6.55-12.05 9.17-17.02v-.26c-2.64-1.98-1.22-1.51-6.02-1.83v-.26l3.14-3.4h.26c3.67 2.36 9.95 6.81 12.31 8.9l.26.26-1.31 3.91zm27.23-44.26l-2.88-2.88c.79-2.36 1.83-4.98 2.09-7.59.75-9.74-11.52-11.84-11.52-4.98 0 4.98 7.86 19.38 7.86 27.76 0 10.21-5.76 15.71-13.88 16.5-8.38.79-20.16-10.47-20.16-10.47l4.98-14.4 2.88 2.09c-2.97 17.8 17.68 20.37 13.35 5.24-1.06-4.02-18.75-34.2 2.09-38.23 13.62-2.36 23.04 16.5 23.04 16.5l-7.85 10.46zm35.62-10.21c-11-30.38-60.49-127.53-191.95-129.62-53.42-1.05-94.27 15.45-132.76 37.97l85.63-9.17-91.39 20.69 25.14 19.64-3.93-16.5c7.5-1.71 39.15-8.45 66.77-8.9l-22.26 80.39c13.61-.7 18.97-8.98 19.64-22.78l4.98-1.05.26 26.71c-22.46 3.21-37.3 6.69-49.49 9.95l13.09-43.21-61.54-36.66 2.36 8.12 10.21 4.98c6.28 18.59 19.38 56.56 20.43 58.66 1.95 4.28 3.16 5.78 12.05 4.45l1.05 4.98c-16.08 4.86-23.66 7.61-39.02 14.4l-2.36-4.71c4.4-2.94 8.73-3.94 5.5-12.83-23.7-62.5-21.48-58.14-22.78-59.44l2.36-4.45 33.52 67.3c-3.84-11.87 1.68 1.69-32.99-78.82l-41.9 88.51 4.71-13.88-35.88-42.16 27.76 93.48-11.78 8.38C95 228.58 101.05 231.87 93.23 231.52c-5.5-.26-13.62 5.5-13.62 5.5L74.63 231c30.56-23.53 31.62-24.33 58.4-42.68l4.19 7.07s-5.76 4.19-7.86 7.07c-5.9 9.28 1.67 13.28 61.8 75.68l-18.85-58.92 39.8-10.21 25.66 30.64 4.45-12.31-4.98-24.62 13.09-3.4.52 3.14 3.67-10.47-94.27 29.33 11.26-4.98-13.62-42.42 17.28-9.17 30.11 36.14 28.54-13.09c-1.41-7.47-2.47-14.5-4.71-19.64l17.28 13.88 4.71-2.09-59.18-42.68 23.08 11.5c18.98-6.07 25.23-7.47 32.21-9.69l2.62 11c-12.55 12.55 1.43 16.82 6.55 19.38l-13.62-61.01 12.05 28.28c4.19-1.31 7.33-2.09 7.33-2.09l2.62 8.64s-3.14 1.05-6.28 2.09l8.9 20.95 33.78-65.73-20.69 61.01c42.42-24.09 81.44-36.66 131.98-35.88 67.04 1.05 167.33 40.85 199.8 139.83.78 2.1-.01 2.63-.79.27zM203.48 152.43s1.83-.52 4.19-1.31l9.43 7.59c-.4 0-3.44-.25-11.26 2.36l-2.36-8.64zm143.76 38.5c-1.57-.6-26.46-4.81-33.26 20.69l21.73 17.02 11.53-37.71zM318.43 67.07c-58.4 0-106.05 12.05-114.96 14.4v.79c8.38 2.09 14.4 4.19 21.21 11.78l1.57.26c6.55-1.83 48.97-13.88 110.24-13.88 180.16 0 301.67 116.79 301.67 223.37v9.95c0 1.31.79 2.62 1.05.52.52-2.09.79-8.64.79-19.64.26-83.79-96.63-227.55-321.57-227.55zm211.06 169.68c1.31-5.76 0-12.31-7.33-13.09-9.62-1.13-16.14 23.79-17.02 33.52-.79 5.5-1.31 14.93 6.02 14.93 4.68-.01 9.72-.91 18.33-35.36zm-61.53 42.95c-2.62-.79-9.43-.79-12.57 10.47-1.83 6.81.52 13.35 6.02 14.66 3.67 1.05 8.9.52 11.78-10.74 2.62-9.94-1.83-13.61-5.23-14.39zM491 300.65c1.83.52 3.14 1.05 5.76 1.83 0-1.83.52-8.38.79-12.05-1.05 1.31-5.5 8.12-6.55 9.95v.27z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wodu\": {\n    \"changes\": [\"5.15.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e088\",\n    \"label\": \"Wodu\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M178.414 339.706H141.1L112.166 223.475h-.478L83.228 339.706H45.2L0 168.946H37.548L64.574 285.177h.478L94.707 168.946h35.157l29.178 117.667h.479L187.5 168.946h36.831zM271.4 212.713c38.984 0 64.1 25.828 64.1 65.291 0 39.222-25.111 65.05-64.1 65.05-38.743 0-63.855-25.828-63.855-65.05C207.547 238.541 232.659 212.713 271.4 212.713zm0 104.753c23.2 0 30.133-19.852 30.133-39.462 0-19.852-6.934-39.7-30.133-39.7-27.7 0-29.894 19.85-29.894 39.7C241.508 297.614 248.443 317.466 271.4 317.466zM435.084 323.922h-.478c-7.893 13.392-21.765 19.132-37.548 19.132-37.31 0-55.485-32.045-55.485-66.246 0-33.243 18.415-64.095 54.767-64.095 14.589 0 28.938 6.218 36.831 18.416h.24V168.946h33.96v170.76H435.084zM405.428 238.3c-22.24 0-29.894 19.134-29.894 39.463 0 19.371 8.848 39.7 29.894 39.7 22.482 0 29.178-19.613 29.178-39.94C434.606 257.436 427.432 238.3 405.428 238.3zM592.96 339.706H560.673V322.487h-.718c-8.609 13.87-23.436 20.567-37.786 20.567-36.113 0-45.2-20.328-45.2-50.941V216.061h33.959V285.9c0 20.329 5.979 30.372 21.765 30.372 18.415 0 26.306-10.283 26.306-35.393V216.061H592.96zM602.453 302.876H640v36.83H602.453z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M178.414 339.706H141.1L112.166 223.475h-.478L83.228 339.706H45.2L0 168.946H37.548L64.574 285.177h.478L94.707 168.946h35.157l29.178 117.667h.479L187.5 168.946h36.831zM271.4 212.713c38.984 0 64.1 25.828 64.1 65.291 0 39.222-25.111 65.05-64.1 65.05-38.743 0-63.855-25.828-63.855-65.05C207.547 238.541 232.659 212.713 271.4 212.713zm0 104.753c23.2 0 30.133-19.852 30.133-39.462 0-19.852-6.934-39.7-30.133-39.7-27.7 0-29.894 19.85-29.894 39.7C241.508 297.614 248.443 317.466 271.4 317.466zM435.084 323.922h-.478c-7.893 13.392-21.765 19.132-37.548 19.132-37.31 0-55.485-32.045-55.485-66.246 0-33.243 18.415-64.095 54.767-64.095 14.589 0 28.938 6.218 36.831 18.416h.24V168.946h33.96v170.76H435.084zM405.428 238.3c-22.24 0-29.894 19.134-29.894 39.463 0 19.371 8.848 39.7 29.894 39.7 22.482 0 29.178-19.613 29.178-39.94C434.606 257.436 427.432 238.3 405.428 238.3zM592.96 339.706H560.673V322.487h-.718c-8.609 13.87-23.436 20.567-37.786 20.567-36.113 0-45.2-20.328-45.2-50.941V216.061h33.959V285.9c0 20.329 5.979 30.372 21.765 30.372 18.415 0 26.306-10.283 26.306-35.393V216.061H592.96zM602.453 302.876H640v36.83H602.453z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wolf-pack-battalion\": {\n    \"changes\": [\"5.0.12\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f514\",\n    \"label\": \"Wolf Pack Battalion\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M267.73 471.53l10.56 15.84 5.28-12.32 5.28 7V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05C421 189 447 196.21 456.43 239.73l-30.35 8.36c11.15 23 17 46.76 13.2 72.14L412 313.18l-6.16 33.43-18.47-7-8.8 33.39-19.35-7 26.39 21.11 8.8-28.15L419 364.2l7-35.63 26.39 14.52c.25-20 7-58.06-8.8-84.45l26.39 5.28c4-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 2-19.87 17.45-42.62 43.11-49.7-44 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.39 22.87-89.65 65.1-93.2 147.79l-58 38.71-3.52 93.25L369.78 220l7 7-17.59 3.52-44 38.71-15.84-5.28-28.1 49.25-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-44-38.71-17.58-3.51 7-7 107.33 59.82-3.52-93.25-58.06-38.71C185 65.1 135.77 22.87 95.3 0c-17.54 61.12-4.4 118.76 0 130.2 15-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9-31.65 1.72-61.15 33.44-61.59 58.51l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7 35.63 24.63-5.28 8.8 28.15L153.35 366 134 373l-8.8-33.43-18.47 7-6.16-33.43-27.27 7c-3.82-25.38 2-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.83l5.28-7 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95L331.06 366c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.22-.27 13.84-3.51 22.84zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7 8.24-7.94 15.55-16.32 22.87-24.68zm24.63 5.28c0-13.43-2.05-24.21-5.28-33.43a235 235 0 0 1-18.47 27.27zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-12 6.65-28.14 7-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 44-14.08-10.61-18.96-27.2-25.53-45.76-28.16zM165.68 376.52L181.52 366c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7-8.24-7.93-15.55-16.31-22.87-24.67zm-24.64 5.28c0-13.43 2-24.21 5.28-33.43a235 235 0 0 0 18.47 27.27zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 37-10.56-5-12-6.65-28.14-7-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-44-14.08 10.63-18.95 27.23-25.52 45.76-28.15z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"won-sign\": {\n    \"aliases\": {\n      \"names\": [\"krw\", \"won\"],\n      \"unicodes\": {\n        \"composite\": [\"20a9\"],\n        \"secondary\": [\"10f159\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Won Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f159\",\n    \"label\": \"Won Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M62.4 53.9C56.8 37.1 38.6 28.1 21.9 33.6S-3.9 57.4 1.6 74.1L51.6 224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H72.9l56.7 170.1c4.5 13.5 17.4 22.4 31.6 21.9s26.4-10.4 29.8-24.2L233 288h46L321 455.8c3.4 13.8 15.6 23.7 29.8 24.2s27.1-8.4 31.6-21.9L439.1 288H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l50-149.9c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2L392.9 224H329L287 56.2C283.5 42 270.7 32 256 32s-27.5 10-31 24.2L183 224h-64L62.4 53.9zm78 234.1H167l-11.4 45.6L140.4 288zM249 224l7-28.1 7 28.1H249zm96 64h26.6l-15.2 45.6L345 288z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M62.4 53.9C56.8 37.1 38.6 28.1 21.9 33.6S-3.9 57.4 1.6 74.1L51.6 224H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H72.9l56.7 170.1c4.5 13.5 17.4 22.4 31.6 21.9s26.4-10.4 29.8-24.2L233 288h46L321 455.8c3.4 13.8 15.6 23.7 29.8 24.2s27.1-8.4 31.6-21.9L439.1 288H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H460.4l50-149.9c5.6-16.8-3.5-34.9-20.2-40.5s-34.9 3.5-40.5 20.2L392.9 224H329L287 56.2C283.5 42 270.7 32 256 32s-27.5 10-31 24.2L183 224h-64L62.4 53.9zm78 234.1H167l-11.4 45.6L140.4 288zM249 224l7-28.1 7 28.1H249zm96 64h26.6l-15.2 45.6L345 288z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wordpress\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f19a\",\n    \"label\": \"WordPress Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wordpress-simple\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f411\",\n    \"label\": \"Wordpress Simple\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014459,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"worm\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"dirt\", \"garden\", \"worm\", \"wriggle\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e599\",\n    \"label\": \"Worm\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684768131,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 96c0-53 43-96 96-96h38.4C439.9 0 480 40.1 480 89.6V176v16V376c0 75.1-60.9 136-136 136s-136-60.9-136-136V296c0-22.1-17.9-40-40-40s-40 17.9-40 40V464c0 26.5-21.5 48-48 48s-48-21.5-48-48V296c0-75.1 60.9-136 136-136s136 60.9 136 136v80c0 22.1 17.9 40 40 40s40-17.9 40-40V192H352c-53 0-96-43-96-96zm144-8a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 96c0-53 43-96 96-96h38.4C439.9 0 480 40.1 480 89.6V176v16V376c0 75.1-60.9 136-136 136s-136-60.9-136-136V296c0-22.1-17.9-40-40-40s-40 17.9-40 40V464c0 26.5-21.5 48-48 48s-48-21.5-48-48V296c0-75.1 60.9-136 136-136s136 60.9 136 136v80c0 22.1 17.9 40 40 40s40-17.9 40-40V192H352c-53 0-96-43-96-96zm144-8a24 24 0 1 0 -48 0 24 24 0 1 0 48 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"wpbeginner\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f297\",\n    \"label\": \"WPBeginner\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wpexplorer\": {\n    \"changes\": [\"4.7.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2de\",\n    \"label\": \"WPExplorer\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wpforms\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f298\",\n    \"label\": \"WPForms\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014469,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wpressr\": {\n    \"aliases\": {\n      \"names\": [\"rendact\"]\n    },\n    \"changes\": [\"5.4.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"rendact\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f3e4\",\n    \"label\": \"wpressr\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014476,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm171.33 158.6c-15.18 34.51-30.37 69.02-45.63 103.5-2.44 5.51-6.89 8.24-12.97 8.24-23.02-.01-46.03.06-69.05-.05-5.12-.03-8.25 1.89-10.34 6.72-10.19 23.56-20.63 47-30.95 70.5-1.54 3.51-4.06 5.29-7.92 5.29-45.94-.01-91.87-.02-137.81 0-3.13 0-5.63-1.15-7.72-3.45-11.21-12.33-22.46-24.63-33.68-36.94-2.69-2.95-2.79-6.18-1.21-9.73 8.66-19.54 17.27-39.1 25.89-58.66 12.93-29.35 25.89-58.69 38.75-88.08 1.7-3.88 4.28-5.68 8.54-5.65 14.24.1 28.48.02 42.72.05 6.24.01 9.2 4.84 6.66 10.59-13.6 30.77-27.17 61.55-40.74 92.33-5.72 12.99-11.42 25.99-17.09 39-3.91 8.95 7.08 11.97 10.95 5.6.23-.37-1.42 4.18 30.01-67.69 1.36-3.1 3.41-4.4 6.77-4.39 15.21.08 30.43.02 45.64.04 5.56.01 7.91 3.64 5.66 8.75-8.33 18.96-16.71 37.9-24.98 56.89-4.98 11.43 8.08 12.49 11.28 5.33.04-.08 27.89-63.33 32.19-73.16 2.02-4.61 5.44-6.51 10.35-6.5 26.43.05 52.86 0 79.29.05 12.44.02 13.93-13.65 3.9-13.64-25.26.03-50.52.02-75.78.02-6.27 0-7.84-2.47-5.27-8.27 5.78-13.06 11.59-26.11 17.3-39.21 1.73-3.96 4.52-5.79 8.84-5.78 23.09.06 25.98.02 130.78.03 6.08-.01 8.03 2.79 5.62 8.27z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"wrench\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"1f527\"],\n        \"secondary\": [\"10f0ad\"]\n      }\n    },\n    \"changes\": [\n      \"2.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"construction\",\n        \"fix\",\n        \"mechanic\",\n        \"plumbing\",\n        \"settings\",\n        \"spanner\",\n        \"tool\",\n        \"update\",\n        \"wrench\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f0ad\",\n    \"label\": \"Wrench\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767602,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7H336c-8.8 0-16-7.2-16-16V118.6c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M352 320c88.4 0 160-71.6 160-160c0-15.3-2.2-30.1-6.2-44.2c-3.1-10.8-16.4-13.2-24.3-5.3l-76.8 76.8c-3 3-7.1 4.7-11.3 4.7H336c-8.8 0-16-7.2-16-16V118.6c0-4.2 1.7-8.3 4.7-11.3l76.8-76.8c7.9-7.9 5.4-21.2-5.3-24.3C382.1 2.2 367.3 0 352 0C263.6 0 192 71.6 192 160c0 19.1 3.4 37.5 9.5 54.5L19.9 396.1C7.2 408.8 0 426.1 0 444.1C0 481.6 30.4 512 67.9 512c18 0 35.3-7.2 48-19.9L297.5 310.5c17 6.2 35.4 9.5 54.5 9.5zM80 408a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"x\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"78\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter X\", \"Latin Small Letter X\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"58\",\n    \"label\": \"X\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767244,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"x-ray\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"secondary\": [\"10f497\"]\n      }\n    },\n    \"changes\": [\"5.0.7\", \"5.10.2\", \"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"health\",\n        \"medical\",\n        \"radiological images\",\n        \"radiology\",\n        \"skeleton\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f497\",\n    \"label\": \"X Ray\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766751,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32V416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V96C14.3 96 0 81.7 0 64zM256 96c-8.8 0-16 7.2-16 16v32H160c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v48H128c-8.8 0-16 7.2-16 16s7.2 16 16 16H240v70.6L189.1 307c-5.2-2-10.6-3-16.2-3h-2.1c-23.6 0-42.8 19.2-42.8 42.8c0 9.6 3.2 18.9 9.1 26.4l18.2 23.2c9.7 12.4 24.6 19.6 40.3 19.6H316.4c15.7 0 30.6-7.2 40.3-19.6l18.2-23.2c5.9-7.5 9.1-16.8 9.1-26.4c0-23.6-19.2-42.8-42.8-42.8H339c-5.5 0-11 1-16.2 3L272 326.6V256H384c8.8 0 16-7.2 16-16s-7.2-16-16-16H272V176h80c8.8 0 16-7.2 16-16s-7.2-16-16-16H272V112c0-8.8-7.2-16-16-16zM208 352a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm80 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32V416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32V96C14.3 96 0 81.7 0 64zM256 96c-8.8 0-16 7.2-16 16v32H160c-8.8 0-16 7.2-16 16s7.2 16 16 16h80v48H128c-8.8 0-16 7.2-16 16s7.2 16 16 16H240v70.6L189.1 307c-5.2-2-10.6-3-16.2-3h-2.1c-23.6 0-42.8 19.2-42.8 42.8c0 9.6 3.2 18.9 9.1 26.4l18.2 23.2c9.7 12.4 24.6 19.6 40.3 19.6H316.4c15.7 0 30.6-7.2 40.3-19.6l18.2-23.2c5.9-7.5 9.1-16.8 9.1-26.4c0-23.6-19.2-42.8-42.8-42.8H339c-5.5 0-11 1-16.2 3L272 326.6V256H384c8.8 0 16-7.2 16-16s-7.2-16-16-16H272V176h80c8.8 0 16-7.2 16-16s-7.2-16-16-16H272V112c0-8.8-7.2-16-16-16zM208 352a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm80 16a16 16 0 1 1 32 0 16 16 0 1 1 -32 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"x-twitter\": {\n    \"changes\": [\"6.4.2\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"  elon\", \" twitter\", \" x\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"e61b\",\n    \"label\": \"X Twitter\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1690904784,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"xbox\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f412\",\n    \"label\": \"Xbox\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014467,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"xing\": {\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f168\",\n    \"label\": \"Xing\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"xmark\": {\n    \"aliases\": {\n      \"names\": [\"close\", \"multiply\", \"remove\", \"times\"],\n      \"unicodes\": {\n        \"composite\": [\"1f5d9\", \"2715\", \"2716\", \"274c\", \"d7\"],\n        \"secondary\": [\"10f00d\"]\n      }\n    },\n    \"changes\": [\n      \"1.0.0\",\n      \"5.0.0\",\n      \"5.0.13\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Cancellation X\",\n        \"Multiplication Sign\",\n        \"Multiplication X\",\n        \"cancel\",\n        \"close\",\n        \"cross\",\n        \"cross mark\",\n        \"error\",\n        \"exit\",\n        \"incorrect\",\n        \"mark\",\n        \"multiplication\",\n        \"multiply\",\n        \"notice\",\n        \"notification\",\n        \"notify\",\n        \"problem\",\n        \"sign\",\n        \"wrong\",\n        \"x\",\n        \"×\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f00d\",\n    \"label\": \"Xmark\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"xmarks-lines\": {\n    \"changes\": [\"6.1.0\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"barricade\", \"barrier\", \"fence\", \"poison\", \"roadblock\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"e59a\",\n    \"label\": \"Xmarks Lines\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767443,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM7 167c-9.4 9.4-9.4 24.6 0 33.9l55 55L7 311c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55L41 167c-9.4-9.4-24.6-9.4-33.9 0zM265 167c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55zM455 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M32 32C14.3 32 0 46.3 0 64S14.3 96 32 96H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zm0 384c-17.7 0-32 14.3-32 32s14.3 32 32 32H608c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM7 167c-9.4 9.4-9.4 24.6 0 33.9l55 55L7 311c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55L41 167c-9.4-9.4-24.6-9.4-33.9 0zM265 167c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55zM455 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"y\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"79\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"Latin Capital Letter Y\",\n        \"Latin Small Letter Y\",\n        \"letter\",\n        \"yay\",\n        \"yes\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"59\",\n    \"label\": \"Y\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767245,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M58 45.4C47.8 31 27.8 27.7 13.4 38S-4.3 68.2 6 82.6L160 298.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V298.3L378 82.6c10.3-14.4 6.9-34.4-7.4-44.6S336.2 31 326 45.4L192 232.9 58 45.4z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M58 45.4C47.8 31 27.8 27.7 13.4 38S-4.3 68.2 6 82.6L160 298.3V448c0 17.7 14.3 32 32 32s32-14.3 32-32V298.3L378 82.6c10.3-14.4 6.9-34.4-7.4-44.6S336.2 31 326 45.4L192 232.9 58 45.4z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"y-combinator\": {\n    \"changes\": [\"4.4.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f23b\",\n    \"label\": \"Y Combinator\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014473,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yahoo\": {\n    \"changes\": [\"4.1.0\", \"5.0.0\", \"5.0.3\", \"5.13.1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f19e\",\n    \"label\": \"Yahoo Logo\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014471,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yammer\": {\n    \"changes\": [\"5.8.0\", \"6.0.0-beta1\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f840\",\n    \"label\": \"Yammer\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M500.676,159.486a12.779,12.779,0,0,0-6.4-8.282,13.954,13.954,0,0,0-10.078-1.125L457.8,156.7l-.043-.2-22.3,5.785-1.243.333-.608-2.17A369.037,369.037,0,0,0,347.538,4.289a14.1,14.1,0,0,0-19.784-.463l-102.9,102.747H24.947A24.9,24.9,0,0,0,0,131.417V380.38a24.963,24.963,0,0,0,24.918,24.9H224.986L328.072,508a13.667,13.667,0,0,0,19.327,0c.126-.126.249-.255.37-.385a368.025,368.025,0,0,0,69.577-107.374,403.45,403.45,0,0,0,17.3-50.8v-.028l20.406,5.336.029-.073L483.345,362a20.253,20.253,0,0,0,2.619.5,13.359,13.359,0,0,0,4.139-.072,13.5,13.5,0,0,0,10.515-9.924,415.855,415.855,0,0,0,.058-193.013ZM337.125,24.65l.013.014h-.013Zm-110.2,165.161L174.311,281.1a11.338,11.338,0,0,0-1.489,5.655v46.189a22.04,22.04,0,0,1-22.041,22h-3.4A22.068,22.068,0,0,1,125.3,332.962V287.294a11.532,11.532,0,0,0-1.388-5.51l-51.6-92.2a21.988,21.988,0,0,1,19.264-32.726h3.268a22.059,22.059,0,0,1,19.611,11.916l36.357,70.281,37.515-70.512a22.066,22.066,0,0,1,38.556-.695,21.7,21.7,0,0,1,0,21.967ZM337.145,24.673a348.147,348.147,0,0,1,75.8,141.335l.564,1.952-114.134,29.6V131.417a25.006,25.006,0,0,0-24.947-24.9H255.067Zm60.5,367.305v-.043l-.014.014a347.19,347.19,0,0,1-60.177,95.227l-82.2-81.893h19.177a24.978,24.978,0,0,0,24.947-24.9v-66.2l114.6,29.862A385.191,385.191,0,0,1,397.648,391.978Zm84-52.45.015.014-50.618-13.131L299.379,292.1V219.572l119.746-30.99,4.468-1.157,39.54-10.253,18.511-4.816A393,393,0,0,1,481.644,339.528Z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M500.676,159.486a12.779,12.779,0,0,0-6.4-8.282,13.954,13.954,0,0,0-10.078-1.125L457.8,156.7l-.043-.2-22.3,5.785-1.243.333-.608-2.17A369.037,369.037,0,0,0,347.538,4.289a14.1,14.1,0,0,0-19.784-.463l-102.9,102.747H24.947A24.9,24.9,0,0,0,0,131.417V380.38a24.963,24.963,0,0,0,24.918,24.9H224.986L328.072,508a13.667,13.667,0,0,0,19.327,0c.126-.126.249-.255.37-.385a368.025,368.025,0,0,0,69.577-107.374,403.45,403.45,0,0,0,17.3-50.8v-.028l20.406,5.336.029-.073L483.345,362a20.253,20.253,0,0,0,2.619.5,13.359,13.359,0,0,0,4.139-.072,13.5,13.5,0,0,0,10.515-9.924,415.855,415.855,0,0,0,.058-193.013ZM337.125,24.65l.013.014h-.013Zm-110.2,165.161L174.311,281.1a11.338,11.338,0,0,0-1.489,5.655v46.189a22.04,22.04,0,0,1-22.041,22h-3.4A22.068,22.068,0,0,1,125.3,332.962V287.294a11.532,11.532,0,0,0-1.388-5.51l-51.6-92.2a21.988,21.988,0,0,1,19.264-32.726h3.268a22.059,22.059,0,0,1,19.611,11.916l36.357,70.281,37.515-70.512a22.066,22.066,0,0,1,38.556-.695,21.7,21.7,0,0,1,0,21.967ZM337.145,24.673a348.147,348.147,0,0,1,75.8,141.335l.564,1.952-114.134,29.6V131.417a25.006,25.006,0,0,0-24.947-24.9H255.067Zm60.5,367.305v-.043l-.014.014a347.19,347.19,0,0,1-60.177,95.227l-82.2-81.893h19.177a24.978,24.978,0,0,0,24.947-24.9v-66.2l114.6,29.862A385.191,385.191,0,0,1,397.648,391.978Zm84-52.45.015.014-50.618-13.131L299.379,292.1V219.572l119.746-30.99,4.468-1.157,39.54-10.253,18.511-4.816A393,393,0,0,1,481.644,339.528Z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yandex\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f413\",\n    \"label\": \"Yandex\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014464,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 256 512\\\"><path d=\\\"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 256, 512],\n        \"width\": 256,\n        \"height\": 512,\n        \"path\": \"M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yandex-international\": {\n    \"changes\": [\"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f414\",\n    \"label\": \"Yandex International\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014462,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yarn\": {\n    \"changes\": [\"5.6.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f7e3\",\n    \"label\": \"Yarn\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014474,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 496 512\\\"><path d=\\\"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 496, 512],\n        \"width\": 496,\n        \"height\": 512,\n        \"path\": \"M393.9 345.2c-39 9.3-48.4 32.1-104 47.4 0 0-2.7 4-10.4 5.8-13.4 3.3-63.9 6-68.5 6.1-12.4.1-19.9-3.2-22-8.2-6.4-15.3 9.2-22 9.2-22-8.1-5-9-9.9-9.8-8.1-2.4 5.8-3.6 20.1-10.1 26.5-8.8 8.9-25.5 5.9-35.3.8-10.8-5.7.8-19.2.8-19.2s-5.8 3.4-10.5-3.6c-6-9.3-17.1-37.3 11.5-62-1.3-10.1-4.6-53.7 40.6-85.6 0 0-20.6-22.8-12.9-43.3 5-13.4 7-13.3 8.6-13.9 5.7-2.2 11.3-4.6 15.4-9.1 20.6-22.2 46.8-18 46.8-18s12.4-37.8 23.9-30.4c3.5 2.3 16.3 30.6 16.3 30.6s13.6-7.9 15.1-5c8.2 16 9.2 46.5 5.6 65.1-6.1 30.6-21.4 47.1-27.6 57.5-1.4 2.4 16.5 10 27.8 41.3 10.4 28.6 1.1 52.7 2.8 55.3.8 1.4 13.7.8 36.4-13.2 12.8-7.9 28.1-16.9 45.4-17 16.7-.5 17.6 19.2 4.9 22.2zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-79.3 75.2c-1.7-13.6-13.2-23-28-22.8-22 .3-40.5 11.7-52.8 19.2-4.8 3-8.9 5.2-12.4 6.8 3.1-44.5-22.5-73.1-28.7-79.4 7.8-11.3 18.4-27.8 23.4-53.2 4.3-21.7 3-55.5-6.9-74.5-1.6-3.1-7.4-11.2-21-7.4-9.7-20-13-22.1-15.6-23.8-1.1-.7-23.6-16.4-41.4 28-12.2.9-31.3 5.3-47.5 22.8-2 2.2-5.9 3.8-10.1 5.4h.1c-8.4 3-12.3 9.9-16.9 22.3-6.5 17.4.2 34.6 6.8 45.7-17.8 15.9-37 39.8-35.7 82.5-34 36-11.8 73-5.6 79.6-1.6 11.1 3.7 19.4 12 23.8 12.6 6.7 30.3 9.6 43.9 2.8 4.9 5.2 13.8 10.1 30 10.1 6.8 0 58-2.9 72.6-6.5 6.8-1.6 11.5-4.5 14.6-7.1 9.8-3.1 36.8-12.3 62.2-28.7 18-11.7 24.2-14.2 37.6-17.4 12.9-3.2 21-15.1 19.4-28.2z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yelp\": {\n    \"changes\": [\"4.2.0\", \"5.0.0\", \"5.7.0\", \"5.8.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f1e9\",\n    \"label\": \"Yelp\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014483,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M42.9 240.32l99.62 48.61c19.2 9.4 16.2 37.51-4.5 42.71L30.5 358.45a22.79 22.79 0 0 1-28.21-19.6 197.16 197.16 0 0 1 9-85.32 22.8 22.8 0 0 1 31.61-13.21zm44 239.25a199.45 199.45 0 0 0 79.42 32.11A22.78 22.78 0 0 0 192.94 490l3.9-110.82c.7-21.3-25.5-31.91-39.81-16.1l-74.21 82.4a22.82 22.82 0 0 0 4.09 34.09zm145.34-109.92l58.81 94a22.93 22.93 0 0 0 34 5.5 198.36 198.36 0 0 0 52.71-67.61A23 23 0 0 0 364.17 370l-105.42-34.26c-20.31-6.5-37.81 15.8-26.51 33.91zm148.33-132.23a197.44 197.44 0 0 0-50.41-69.31 22.85 22.85 0 0 0-34 4.4l-62 91.92c-11.9 17.7 4.7 40.61 25.2 34.71L366 268.63a23 23 0 0 0 14.61-31.21zM62.11 30.18a22.86 22.86 0 0 0-9.9 32l104.12 180.44c11.7 20.2 42.61 11.9 42.61-11.4V22.88a22.67 22.67 0 0 0-24.5-22.8 320.37 320.37 0 0 0-112.33 30.1z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"yen-sign\": {\n    \"aliases\": {\n      \"names\": [\"cny\", \"jpy\", \"rmb\", \"yen\"],\n      \"unicodes\": {\n        \"composite\": [\"a5\"],\n        \"secondary\": [\"10f157\"]\n      }\n    },\n    \"changes\": [\n      \"3.2.0\",\n      \"5.0.0\",\n      \"6.0.0-beta1\",\n      \"6.0.0-beta3\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Yen Sign\", \"currency\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f157\",\n    \"label\": \"Yen Sign\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684766475,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\"><path d=\\\"M58.6 46.2C48.8 31.5 29 27.6 14.3 37.4S-4.4 67 5.4 81.7L100.2 224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32h80v32H48c-17.7 0-32 14.3-32 32s14.3 32 32 32h80v64c0 17.7 14.3 32 32 32s32-14.3 32-32V384h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H192V288h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H219.8L314.6 81.7c9.8-14.7 5.8-34.6-8.9-44.4s-34.6-5.8-44.4 8.9L160 198.3 58.6 46.2z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 320, 512],\n        \"width\": 320,\n        \"height\": 512,\n        \"path\": \"M58.6 46.2C48.8 31.5 29 27.6 14.3 37.4S-4.4 67 5.4 81.7L100.2 224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32h80v32H48c-17.7 0-32 14.3-32 32s14.3 32 32 32h80v64c0 17.7 14.3 32 32 32s32-14.3 32-32V384h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H192V288h80c17.7 0 32-14.3 32-32s-14.3-32-32-32H219.8L314.6 81.7c9.8-14.7 5.8-34.6-8.9-44.4s-34.6-5.8-44.4 8.9L160 198.3 58.6 46.2z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"yin-yang\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"262f\"],\n        \"secondary\": [\"10f6ad\"]\n      }\n    },\n    \"changes\": [\n      \"5.3.0\",\n      \"5.10.2\",\n      \"5.11.0\",\n      \"5.11.1\",\n      \"6.0.0-beta1\",\n      \"6.2.0\",\n      \"6.3.0\",\n      \"6.4.0\"\n    ],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\n        \"daoism\",\n        \"opposites\",\n        \"religion\",\n        \"tao\",\n        \"taoism\",\n        \"taoist\",\n        \"yang\",\n        \"yin\",\n        \"yin yang\"\n      ]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"f6ad\",\n    \"label\": \"Yin Yang\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767601,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 64c53 0 96 43 96 96s-43 96-96 96s-96 43-96 96s43 96 96 96C150 448 64 362 64 256S150 64 256 64zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm32-352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 512, 512],\n        \"width\": 512,\n        \"height\": 512,\n        \"path\": \"M256 64c53 0 96 43 96 96s-43 96-96 96s-96 43-96 96s43 96 96 96C150 448 64 362 64 256S150 64 256 64zm0 448A256 256 0 1 0 256 0a256 256 0 1 0 0 512zm32-352a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM224 352a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"yoast\": {\n    \"changes\": [\"4.6.0\", \"5.0.0\", \"5.0.3\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f2b1\",\n    \"label\": \"Yoast\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014482,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 448 512\\\"><path d=\\\"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 448, 512],\n        \"width\": 448,\n        \"height\": 512,\n        \"path\": \"M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"youtube\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"f16a\"]\n      }\n    },\n    \"changes\": [\"3.2.0\", \"5.0.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"film\", \"video\", \"youtube-play\", \"youtube-square\"]\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f167\",\n    \"label\": \"YouTube\",\n    \"voted\": false,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014461,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 576 512\\\"><path d=\\\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 576, 512],\n        \"width\": 576,\n        \"height\": 512,\n        \"path\": \"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  },\n  \"z\": {\n    \"aliases\": {\n      \"unicodes\": {\n        \"composite\": [\"7a\"]\n      }\n    },\n    \"changes\": [\"6.0.0-beta1\", \"6.2.0\", \"6.3.0\", \"6.4.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": [\"Latin Capital Letter Z\", \"Latin Small Letter Z\", \"letter\"]\n    },\n    \"styles\": [\"solid\"],\n    \"unicode\": \"5a\",\n    \"label\": \"Z\",\n    \"voted\": false,\n    \"svg\": {\n      \"solid\": {\n        \"last_modified\": 1684767246,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 384 512\\\"><path d=\\\"M0 64C0 46.3 14.3 32 32 32H352c12.4 0 23.7 7.2 29 18.4s3.6 24.5-4.4 34.1L100.3 416H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-12.4 0-23.7-7.2-29-18.4s-3.6-24.5 4.4-34.1L283.7 96H32C14.3 96 0 81.7 0 64z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 384, 512],\n        \"width\": 384,\n        \"height\": 512,\n        \"path\": \"M0 64C0 46.3 14.3 32 32 32H352c12.4 0 23.7 7.2 29 18.4s3.6 24.5-4.4 34.1L100.3 416H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-12.4 0-23.7-7.2-29-18.4s-3.6-24.5 4.4-34.1L283.7 96H32C14.3 96 0 81.7 0 64z\"\n      }\n    },\n    \"free\": [\"solid\"]\n  },\n  \"zhihu\": {\n    \"changes\": [\"5.2.0\"],\n    \"ligatures\": [],\n    \"search\": {\n      \"terms\": []\n    },\n    \"styles\": [\"brands\"],\n    \"unicode\": \"f63f\",\n    \"label\": \"Zhihu\",\n    \"voted\": true,\n    \"svg\": {\n      \"brands\": {\n        \"last_modified\": 1660014458,\n        \"raw\": \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 640 512\\\"><path d=\\\"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\\\"/></svg>\",\n        \"viewBox\": [0, 0, 640, 512],\n        \"width\": 640,\n        \"height\": 512,\n        \"path\": \"M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z\"\n      }\n    },\n    \"free\": [\"brands\"]\n  }\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/heading.css",
    "content": ".rwmb-heading-wrapper {\n\tdisplay: block;\n}\n.rwmb-heading-wrapper h4 {\n\tdisplay: block;\n\tfont-size: .75rem;\n\tline-height: 1.4;\n\tborder-bottom: 1px solid rgb(230, 230, 230);\n\ttext-transform: uppercase;\n\tpadding: .75rem 0 .375rem;\n\tmargin: 0 0 6px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/icon.css",
    "content": ".rwmb-icon-select {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n}\n\n.rwmb-icon-select i {\n    width: 16px;\n}\n\n.rwmb-icon-select svg {\n  width: 16px;\n  height: 16px;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/image-select.css",
    "content": ".rwmb-image-select {\n\twidth: 80px;\n\theight: 80px;\n\tfloat: left;\n\tmargin: 0 8px 8px 0;\n\tborder: 3px solid #d8d8d8;\n\tborder-radius: 4px;\n\tpadding: 1px;\n\tcursor: pointer;\n\n\t--color: #2271b1;\n}\n\n.block-editor-page .rwmb-image-select {\n\t--color: var(--wp-admin-theme-color, #2271b1);\n}\n\n.rwmb-image-select img {\n\twidth: 100%;\n\theight: 100%;\n\tobject-fit: cover;\n}\n\n.rwmb-image-select:hover,\n.rwmb-image-select:has(:checked) {\n\tborder-color: var(--color);\n}\n\n.rwmb-image_select.rwmb-image_select {\n\tdisplay: none;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/image.css",
    "content": ".rwmb-image-item {\n\tposition: relative;\n\tfloat: left;\n\tmargin: 0 12px 12px 0;\n\tlist-style: none;\n\tbox-sizing: border-box;\n\tcursor: move;\n}\n.rwmb-image-item .rwmb-file-icon {\n\twidth: 150px;\n\theight: 150px;\n\tmargin-right: 0;\n}\n\n.rwmb-image-actions {\n\tposition: absolute;\n\tz-index: 2;\n\tright: 8px;\n\ttop: 8px;\n\topacity: 0;\n\ttransition: opacity .2s;\n\tcolor: #fff;\n}\n.rwmb-image-edit,\n.rwmb-image-delete {\n\tcolor: inherit;\n\ttext-decoration: none;\n}\n.rwmb-image-actions a:hover {\n\tcolor: #fff;\n\topacity: .8;\n}\n.rwmb-image-overlay {\n\tposition: absolute;\n\tz-index: 1;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: #000;\n\topacity: 0;\n\ttransition: opacity .2s;\n}\n.rwmb-image-item:hover .rwmb-image-actions {\n\topacity: 1;\n}\n.rwmb-image-item:hover .rwmb-image-overlay {\n\topacity: .6;\n}\n.rwmb-image-item .rwmb-edit-media:after {\n\tdisplay: none;\n}\n\n@media (max-width: 767px) {\n\t.rwmb-image-actions {\n\t\topacity: 1;\n\t\tz-index: 99;\n\t}\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/input-list.css",
    "content": ".rwmb-toggle-all-wrapper {\n\tmargin-top: 0;\n}\n.rwmb-input-list {\n\tline-height: 1.8;\n}\n.rwmb-input-list.hidden {\n\tdisplay: none;\n}\n.rwmb-input-list .rwmb-input-list {\n\tmargin-left: 20px;\n}\n.rwmb-input-list > label {\n\tdisplay: block;\n}\n.rwmb-input-list.rwmb-inline {\n\tline-height: inherit;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 6px 12px;\n}\n\n/* Media modal */\n.attachment-details .compat-attachment-fields .rwmb-input-list > label > input {\n\tmargin: 0 0.25rem 0 0;\n}\n.compat-attachment-fields .rwmb-input-list.rwmb-inline {\n\tgap: 10px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/input.css",
    "content": ".rwmb-input-group {\n\tdisplay: flex;\n\talign-items: stretch;\n}\n.rwmb-input-group-text {\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 8px;\n\tbackground: #f0f0f0;\n\tborder: 1px solid #7e8993;\n\tborder-radius: 4px;\n\twhite-space: nowrap;\n}\n.rwmb-input-group-text:first-child,\n.rwmb-input-group input:not(:last-child) {\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n.rwmb-input-group-text:last-child,\n.rwmb-input-group input:not(:first-child) {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n.rwmb-input-group input {\n\tmargin: 0;\n}\n.rwmb-input-group.rwmb-input-group.rwmb-input-group :not(:first-child) {\n\tmargin-left: -1px;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/jqueryui/core.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\t-ms-filter: \"alpha(opacity=0)\"; /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/jqueryui/datepicker.css",
    "content": "/*!\n * jQuery UI Datepicker 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/datepicker/#theming\n */\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/jqueryui/slider.css",
    "content": "/*!\n * jQuery UI Slider 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slider/#theming\n */\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: pointer;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/jqueryui/theme.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.13.2\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\n\tfont-size: 1em/*{fsDefault}*/;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd/*{borderColorContent}*/;\n\tbackground: #ffffff/*{bgColorContent}*/ /*{bgImgUrlContent}*/ /*{bgContentXPos}*/ /*{bgContentYPos}*/ /*{bgContentRepeat}*/;\n\tcolor: #333333/*{fcContent}*/;\n}\n.ui-widget-content a {\n\tcolor: #333333/*{fcContent}*/;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd/*{borderColorHeader}*/;\n\tbackground: #e9e9e9/*{bgColorHeader}*/ /*{bgImgUrlHeader}*/ /*{bgHeaderXPos}*/ /*{bgHeaderYPos}*/ /*{bgHeaderRepeat}*/;\n\tcolor: #333333/*{fcHeader}*/;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333/*{fcHeader}*/;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\n\tbackground: #f6f6f6/*{bgColorDefault}*/ /*{bgImgUrlDefault}*/ /*{bgDefaultXPos}*/ /*{bgDefaultYPos}*/ /*{bgDefaultRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #454545/*{fcDefault}*/;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545/*{fcDefault}*/;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc/*{borderColorHover}*/;\n\tbackground: #ededed/*{bgColorHover}*/ /*{bgImgUrlHover}*/ /*{bgHoverXPos}*/ /*{bgHoverYPos}*/ /*{bgHoverRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #2b2b2b/*{fcHover}*/;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b/*{fcHover}*/;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff/*{borderColorActive}*/;\n\tbackground: #007fff/*{bgColorActive}*/ /*{bgImgUrlActive}*/ /*{bgActiveXPos}*/ /*{bgActiveYPos}*/ /*{bgActiveRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #ffffff/*{fcActive}*/;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff/*{borderColorActive}*/;\n\tbackground-color: #ffffff/*{fcActive}*/;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff/*{fcActive}*/;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\n\tbackground: #fffa90/*{bgColorHighlight}*/ /*{bgImgUrlHighlight}*/ /*{bgHighlightXPos}*/ /*{bgHighlightYPos}*/ /*{bgHighlightRepeat}*/;\n\tcolor: #777620/*{fcHighlight}*/;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\n\tbackground: #fffa90/*{bgColorHighlight}*/;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620/*{fcHighlight}*/;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899/*{borderColorError}*/;\n\tbackground: #fddfdf/*{bgColorError}*/ /*{bgImgUrlError}*/ /*{bgErrorXPos}*/ /*{bgErrorYPos}*/ /*{bgErrorRepeat}*/;\n\tcolor: #5f3f3f/*{fcError}*/;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f/*{fcError}*/;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f/*{fcError}*/;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\t-ms-filter: \"alpha(opacity=70)\"; /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\t-ms-filter: \"alpha(opacity=35)\"; /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\t-ms-filter: \"alpha(opacity=35)\"; /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n\n/* positioning */\n/* Three classes needed to override `.ui-button:hover .ui-icon` */\n.ui-icon-blank.ui-icon-blank.ui-icon-blank {\n\tbackground-image: none;\n}\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px/*{cornerRadius}*/;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa/*{bgColorOverlay}*/ /*{bgImgUrlOverlay}*/ /*{bgOverlayXPos}*/ /*{bgOverlayYPos}*/ /*{bgOverlayRepeat}*/;\n\topacity: .3/*{opacityOverlay}*/;\n\t-ms-filter: \"alpha(opacity=30)\"/*{opacityFilterOverlay}*/; /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\n\tbox-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/key-value.css",
    "content": ".rwmb-key_value-clone {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n.rwmb-key_value-clone input {\n\tflex: 1;\n}\n.rwmb-key_value-clone .remove-clone {\n\tposition: static;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/map.css",
    "content": ".rwmb-map-canvas {\n\twidth: 100%;\n\theight: 400px;\n\tmargin-bottom: 10px;\n}\n\n/* Autocomplete style, copy from WordPress's common.css and forms.css */\n\ninput.ui-autocomplete-input.open {\n\tborder-bottom-color: transparent;\n}\n\n.ui-autocomplete {\n\tpadding: 0;\n\tmargin: 0;\n\tlist-style: none;\n\tposition: absolute;\n\tz-index: 10000;\n\tborder: 1px solid #5b9dd9;\n\tbox-shadow: 0 1px 2px rgba( 30, 140, 190, 0.8 );\n\tbackground-color: #fff;\n}\n\n.ui-autocomplete li {\n\tmargin-bottom: 0;\n\tpadding: 4px 10px;\n\twhite-space: nowrap;\n\ttext-align: left;\n\tcursor: pointer;\n}\n\n/* Colors for the wplink toolbar autocomplete. */\n.ui-autocomplete .ui-state-focus {\n\tbackground-color: #ddd;\n}\n\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(1px, 1px, 1px, 1px);\n\t-webkit-clip-path: inset(50%);\n\tclip-path: inset(50%);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n\tword-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/media.css",
    "content": ".rwmb-media-list {\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n}\n.rwmb-edit-media,\n.rwmb-remove-media {\n\tcolor: inherit;\n\ttext-decoration: none;\n}\n.rwmb-edit-media:after {\n\tcontent: \"|\";\n\tcolor: #dcdcde;\n\tmargin: 0 6px;\n}\n.rwmb-remove-media {\n\tcolor: #b32d2e;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/modal.css",
    "content": ".rwmb-modal-add-button {\n\tdisplay: inline-block;\n\tmargin-top: 6px;\n}\n\nbody.rwmb-modal-show,\nbody.rwmb-modal-show .interface-interface-skeleton__sidebar {\n\toverflow: hidden;\n}\n\n/* Mimic style of media modal */\n.rwmb-modal {\n\tposition: fixed;\n\ttop: 30px;\n\tleft: 30px;\n\tright: 30px;\n\tbottom: 30px;\n\tz-index: 160000;\n    margin: auto;\n\toverflow: hidden;\n\tflex-direction: column;\n\tdisplay: none;\n}\n\n.rwmb-modal[size=\"small\"] {\n    max-width: 600px;\n}\n\n.rwmb-modal-content {\n    overflow: hidden;\n    flex: 1;\n}\n\niframe#rwmb-modal-iframe {\n    width: 100%;\n    height: 100%;\n    border: none;\n    overflow: hidden;\n}\n\n.rwmb-modal-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tmin-height: 360px;\n\tbackground: #000;\n\topacity: 0.7;\n\tz-index: 159900;\n\tdisplay: none;\n}\n\n.rwmb-modal-title {\n\tbackground: #f0f0f1;\n\tborder-bottom: 1px solid #c3c4c7;\n\tposition: relative;\n}\n\n.rwmb-modal-title h2 {\n\tfont-size: 22px;\n\tline-height: 50px;\n\tpadding: 0 20px;\n\tmargin: 0;\n}\n\n.rwmb-modal-close {\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\twidth: 50px;\n\theight: 50px;\n\tfont-size: 22px;\n\tline-height: 50px;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: none;\n\tbackground: none;\n\tcolor: #646970;\n\tz-index: 1000;\n\tcursor: pointer;\n\toutline: none;\n\ttransition: color .1s ease-in-out;\n}\n.rwmb-modal-close:hover,\n.rwmb-modal-close:active {\n\tcolor: #135e96;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/oembed.css",
    "content": ".rwmb-oembed-wrapper .spinner {\n\tfloat: none;\n\tvertical-align: top;\n\tdisplay: inline-block;\n}\n.rwmb-embed-media {\n\tmargin-top: 1em;\n}\n.rwmb-embed-media iframe {\n\tmax-width: 100%;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/osm-frontend.css",
    "content": "img.leaflet-marker-icon {\n\tmargin-left: -12px;\n\tmargin-top: -41px;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/osm.css",
    "content": ".rwmb-osm-canvas {\n\twidth: 100%;\n\theight: 400px;\n\tmargin-bottom: 10px;\n}\n\n/* Autocomplete style, copy from WordPress's common.css and forms.css */\n\ninput.ui-autocomplete-input.open {\n\tborder-bottom-color: transparent;\n}\n\n.ui-autocomplete {\n\tpadding: 0;\n\tmargin: 0;\n\tlist-style: none;\n\tposition: absolute;\n\tz-index: 10000;\n\tborder: 1px solid #5b9dd9;\n\tbox-shadow: 0 1px 2px rgba( 30, 140, 190, 0.8 );\n\tbackground-color: #fff;\n}\n\n.ui-autocomplete li {\n\tmargin-bottom: 0;\n\tpadding: 4px 10px;\n\twhite-space: nowrap;\n\ttext-align: left;\n\tcursor: pointer;\n}\n\n/* Colors for the wplink toolbar autocomplete. */\n.ui-autocomplete .ui-state-focus {\n\tbackground-color: #ddd;\n}\n\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(1px, 1px, 1px, 1px);\n\t-webkit-clip-path: inset(50%);\n\tclip-path: inset(50%);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n\tword-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/password.css",
    "content": ".rwmb-password-wrapper .rwmb-input {\n\tposition: relative;\n}\n\n.rwmb-password-toggle {\n\tbackground: none;\n\tborder: none;\n\tpadding: 0;\n\tcursor: pointer;\n\tposition: absolute;\n\twidth: 36px;\n\theight: 36px;\n\ttop: 0;\n\tright: 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.rwmb-password-toggle svg {\n\twidth: 20px;\n\theight: 20px;\n\tfill: #2C3338;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/range.css",
    "content": ".rwmb-range-inner {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n.rwmb-range {\n\tflex: 1;\n}\n.rwmb-range.rwmb-range,\n.rwmb-range.rwmb-range:hover {\n\tvertical-align: middle;\n\tpadding: 0;\n\tborder: none;\n}\n.rwmb-range-output {\n\tmargin-left: 8px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/select-advanced.css",
    "content": ".rwmb-field .select2-container {\n\theight: auto;\n\tmin-width: 160px;\n\tmax-width: 100%;\n}\n.select2-container .select2-selection--single,\n.select2-container .select2-selection--multiple,\n.select2-dropdown {\n\tborder-color: #7e8993;\n}\n.select2-container .select2-selection--multiple {\n\tmin-height: 30px;\n}\n.select2-container--open .select2-dropdown--below {\n\tborder-top: 1px solid #7e8993;\n}\n.select2-container--open .select2-dropdown--above {\n\tborder-bottom: 1px solid #7e8993;\n}\n.select2-container .select2-selection--single {\n\theight: 30px;\n}\n.select2-container .select2-selection--multiple .select2-selection__rendered {\n\tdisplay: block;\n}\n.select2-container--default .select2-selection--single .select2-selection__rendered {\n\tline-height: 30px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n\theight: 28px;\n}\n.select2-results__option {\n\tmargin-bottom: 0;\n}\n.select2-container .select2-search--inline {\n\tmargin-bottom: 0;\n}\n.select2-container .select2-search--inline .select2-search__field {\n\tmargin-top: 0;\n\tmin-height: auto;\n}\n.select2-search--dropdown .select2-search__field {\n\tpadding: 0 4px;\n\tmin-height: 30px;\n}\n\nbody > .select2-container {\n\tz-index: 999999;\n}\n\n@media (max-width: 782px) {\n\t.select2-container .select2-selection--single {\n\t\theight: 40px;\n\t}\n\t.select2-container--default .select2-selection--single .select2-selection__rendered {\n\t\tline-height: 40px;\n\t}\n\t.select2-container--default .select2-selection--single .select2-selection__arrow {\n\t\theight: 38px;\n\t}\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/select-tree.css",
    "content": ".rwmb-select-tree .rwmb-select-tree {\n\tmargin-top: 6px;\n}\n\n.rwmb-select-tree.hidden {\n\tdisplay: none;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/select.css",
    "content": ".rwmb-select {\n\tmin-width: 160px;\n}\n.rwmb-select.rwmb-select[multiple] {\n\tpadding: 0;\n}\n.rwmb-select option {\n\tpadding: 4px 8px;\n}\n.rwmb-select-all-none {\n\tdisplay: block;\n\tmargin-top: 5px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/select2/select2.css",
    "content": ".select2-container {\n  box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-align: middle; }\n  .select2-container .select2-selection--single {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    height: 28px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--single .select2-selection__rendered {\n      display: block;\n      padding-left: 8px;\n      padding-right: 20px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n    .select2-container .select2-selection--single .select2-selection__clear {\n      position: relative; }\n  .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n    padding-right: 8px;\n    padding-left: 20px; }\n  .select2-container .select2-selection--multiple {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    min-height: 32px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--multiple .select2-selection__rendered {\n      display: inline-block;\n      overflow: hidden;\n      padding-left: 8px;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n  .select2-container .select2-search--inline {\n    float: left; }\n    .select2-container .select2-search--inline .select2-search__field {\n      box-sizing: border-box;\n      border: none;\n      font-size: 100%;\n      margin-top: 5px;\n      padding: 0; }\n      .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n        -webkit-appearance: none; }\n\n.select2-dropdown {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  box-sizing: border-box;\n  display: block;\n  position: absolute;\n  left: -100000px;\n  width: 100%;\n  z-index: 1051; }\n\n.select2-results {\n  display: block; }\n\n.select2-results__options {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n\n.select2-results__option {\n  padding: 6px;\n  user-select: none;\n  -webkit-user-select: none; }\n  .select2-results__option[aria-selected] {\n    cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n  left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n  display: block;\n  padding: 4px; }\n  .select2-search--dropdown .select2-search__field {\n    padding: 4px;\n    width: 100%;\n    box-sizing: border-box; }\n    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n      -webkit-appearance: none; }\n  .select2-search--dropdown.select2-search--hide {\n    display: none; }\n\n.select2-close-mask {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  display: block;\n  position: fixed;\n  left: 0;\n  top: 0;\n  min-height: 100%;\n  min-width: 100%;\n  height: auto;\n  width: auto;\n  opacity: 0;\n  z-index: 99;\n  background-color: #fff;\n  filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n  border: 0 !important;\n  clip: rect(0 0 0 0) !important;\n  height: 1px !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important; }\n\n.select2-container--default .select2-selection--single {\n  background-color: #fff;\n  border: 1px solid #aaa;\n  border-radius: 4px; }\n  .select2-container--default .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--default .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold; }\n  .select2-container--default .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--default .select2-selection--single .select2-selection__arrow {\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px; }\n    .select2-container--default .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  left: 1px;\n  right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n  background-color: #eee;\n  cursor: default; }\n  .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n    display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #888 transparent;\n  border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text; }\n  .select2-container--default .select2-selection--multiple .select2-selection__rendered {\n    box-sizing: border-box;\n    list-style: none;\n    margin: 0;\n    padding: 0 5px;\n    width: 100%; }\n    .select2-container--default .select2-selection--multiple .select2-selection__rendered li {\n      list-style: none; }\n  .select2-container--default .select2-selection--multiple .select2-selection__placeholder {\n    color: #999;\n    margin-top: 5px;\n    float: left; }\n  .select2-container--default .select2-selection--multiple .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-top: 5px;\n    margin-right: 10px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n    color: #999;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #333; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n  float: right; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border: solid black 1px;\n  outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n  background-color: #eee;\n  cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n  display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n  background: transparent;\n  border: none;\n  outline: 0;\n  box-shadow: none;\n  -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--default .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999; }\n\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd; }\n\n.select2-container--default .select2-results__option .select2-results__option {\n  padding-left: 1em; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n    padding-left: 0; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n    margin-left: -1em;\n    padding-left: 2em; }\n    .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n      margin-left: -2em;\n      padding-left: 3em; }\n      .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n        margin-left: -3em;\n        padding-left: 4em; }\n        .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n          margin-left: -4em;\n          padding-left: 5em; }\n          .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n            margin-left: -5em;\n            padding-left: 6em; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #5897fb;\n  color: white; }\n\n.select2-container--default .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n  background-color: #f7f7f7;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  outline: 0;\n  background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n  .select2-container--classic .select2-selection--single:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--classic .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-right: 10px; }\n  .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--classic .select2-selection--single .select2-selection__arrow {\n    background-color: #ddd;\n    border: none;\n    border-left: 1px solid #aaa;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px;\n    background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n    .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  border: none;\n  border-right: 1px solid #aaa;\n  border-radius: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  left: 1px;\n  right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n  border: 1px solid #5897fb; }\n  .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n    background: transparent;\n    border: none; }\n    .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n      border-color: transparent transparent #888 transparent;\n      border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text;\n  outline: 0; }\n  .select2-container--classic .select2-selection--multiple:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n    list-style: none;\n    margin: 0;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n    display: none; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n    color: #888;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #555; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  float: right; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n  border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa;\n  outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n  outline: 0;\n  box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n  background-color: white;\n  border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n  border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n  border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--classic .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n  color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n  background-color: #3875d7;\n  color: white; }\n\n.select2-container--classic .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n  border-color: #5897fb; }\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/slider.css",
    "content": ".rwmb-slider-inner {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n.rwmb-slider-ui {\n\tflex: 1;\n}\n.rwmb-slider-label {\n\tmargin-left: 8px;\n}\n\n/* Fix slider handle being visible through jQuery panel */\n.ui-slider .ui-slider-handle {\n\tz-index: 1;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/style-rtl.css",
    "content": ".rwmb-label, .rwmb-input{\n\tfloat: right;\n}\nlabel.error{\n\tpadding-left: auto;\n\tpadding-right: 3px;\n}\n.rwmb-button.remove-clone {\n\tright: auto;\n\tleft: 0;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/style.css",
    "content": "/* Styles for 'normal' meta boxes\n-------------------------------------------------------------- */\n\n/* Lower specificity so it field classes are applied */\n:where(.rwmb-field) {\n\tdisplay: flex;\n}\n.rwmb-field:not(:last-of-type) {\n\tmargin: 0 0 12px;\n}\n.rwmb-label {\n\twidth: 25%;\n}\n.rwmb-input {\n\tflex: 1;\n}\n\n.rwmb-label > label {\n\tfont-weight: 600;\n}\n.rwmb-required {\n\tcolor: #dc3232;\n\tfont-weight: bold;\n\tmargin-left: 3px;\n}\n\n.rwmb-input h4 {\n\tmargin: 0;\n}\n.rwmb-input input:not([size]),\n.rwmb-input-group,\n.rwmb-input select,\n.rwmb-input .select2-container,\n.rwmb-input textarea:not([cols]) {\n\twidth: 100%;\n\tbox-sizing: border-box;\n}\n.rwmb-input input[type=\"checkbox\"],\n.rwmb-input input[type=\"radio\"] {\n\twidth: 1em;\n}\n.rwmb-input input[type=\"button\"] {\n\twidth: auto;\n}\n.rwmb-input input:not([type=\"checkbox\"]):not([type=\"radio\"]),\n.rwmb-input textarea,\n.rwmb-input select {\n\tmax-width: 100%;\n\tmargin-inline: 0;\n}\n.rwmb-textarea {\n\tresize: vertical;\n}\n\n/* Clone */\n.rwmb-clone {\n\tmin-height: 24px;\n\tmargin-bottom: 12px;\n\tpadding-right: 24px;\n\tposition: relative;\n\tclear: both;\n\tbackground: #fff;\n}\n.rwmb-clone > input[type='radio'],\n.rwmb-clone > input[type='checkbox'] {\n\tmargin: 6px 0 0 4px;\n}\n.rwmb-button.remove-clone {\n\ttext-decoration: none;\n\tcolor: #ccc;\n\tdisplay: inline-block;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\twidth: 20px;\n\theight: 20px;\n\ttransition: color 200ms;\n}\n.rwmb-button.remove-clone .dashicons {\n\tfont-size: 20px;\n}\n.rwmb-button.remove-clone:hover {\n\tcolor: #dc3232;\n}\n.remove-clone:focus {\n\toutline: 0;\n\tbox-shadow: none;\n}\n.rwmb-button.add-clone {\n\tmargin-top: 4px;\n}\n.rwmb-clone-icon {\n\tcursor: move;\n\tbackground: url(../img/drag_icon.gif) no-repeat;\n\theight: 23px;\n\twidth: 15px;\n\tvertical-align: top;\n\tdisplay: inline-block;\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n}\n.rwmb-sort-clone {\n\tpadding-left: 15px;\n}\n\n.rwmb-clone.rwmb-clone-template {\n\tdisplay: none;\n}\n\n/* jQuery validation */\np.rwmb-error {\n\tcolor: #dc3232;\n\tmargin: 4px 0;\n\tclear: both;\n}\ninput.rwmb-error.rwmb-error,\ntextarea.rwmb-error,\nselect.rwmb-error {\n\tborder-color: #dc3232;\n\tbackground: #ffebe8;\n}\n\n/* Utilities\n-------------------------------------------------------------- */\n.rwmb-sortable-placeholder {\n\tbackground: #fcf8e3;\n\tborder: 1px solid #faebcc;\n\tdisplay: block;\n}\n\n\n/* Styles for 'side' meta boxes\n-------------------------------------------------------------- */\n#side-sortables .rwmb-field {\n\tflex-direction: column;\n}\n#side-sortables .rwmb-label {\n\twidth: 100%;\n\tmargin-bottom: 4px;\n}\n\n/* Block editor */\n.edit-post-meta-boxes-area.is-side .inside:has(.rwmb-meta-box) {\n\tpadding-inline: 16px;\n}\n.edit-post-meta-boxes-area.is-side #poststuff .postbox:has(.rwmb-meta-box) h2.hndle {\n\tpadding-left: 16px;\n\tfont-weight: 500;\n\tcolor: #1e1e1e;\n}\n\n/* Mobile style */\n@media (max-width: 782px) {\n\t.rwmb-field {\n\t\tflex-direction: column;\n\t}\n\t.rwmb-label {\n\t\twidth: 100%;\n\t\tmargin-bottom: 4px;\n\t}\n\t.rwmb-input input[type=\"radio\"],\n\t.rwmb-input input[type=\"checkbox\"] {\n\t\twidth: 1.5625rem;\n\t}\n}\n\n/* Seamless style\n--------------------------------------------------------------*/\n.rwmb-seamless {\n\tbackground: none;\n\tborder: none;\n\tbox-shadow: none;\n}\n.rwmb-seamless .inside.inside {\n\tpadding-left: 0;\n\tpadding-right: 0;\n}\n.postbox.rwmb-seamless .hndle,\n.postbox.rwmb-seamless .handlediv,\n.postbox.rwmb-seamless .postbox-header {\n\tdisplay: none;\n}\n.rwmb-seamless .rwmb-clone {\n\tbackground: none;\n}\n\n/* CSS fixes\n--------------------------------------------------------------*/\n/* Fix color picker field is hidden by the post editor at after_title position. https://metabox.io/support/topic/bug-color-picker-field-is-showed-below-the-title-field/ */\n.postarea {\n\tposition: relative;\n\tz-index: 0;\n}\n.rwmb-hidden-wrapper {\n\tdisplay: none;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/switch.css",
    "content": ".rwmb-switch-label {\n\t--size: 13px;\n\t--padding: 2px;\n\t--color: var(--wp-admin-theme-color, #2271b1);\n\n\tcursor: pointer;\n\tposition: relative;\n\tdisplay: inline-block;\n\tbackground-color: #ccc;\n\tpadding: var(--padding);\n\tborder-radius: 3px;\n\tmin-width: calc(var(--size) * 2 + var(--padding) * 2);\n\theight: calc(var(--size) + var(--padding) * 2);\n\tbox-sizing: border-box;\n}\n.rwmb-switch.rwmb-switch {\n\tdisplay: none;\n}\n\n.rwmb-switch:checked + .rwmb-switch-status .rwmb-switch-slider {\n\tbackground-color: var(--color);\n\tbox-shadow: 0 0 1px var(--color);\n}\n\n.rwmb-switch:checked + .rwmb-switch-status .rwmb-switch-slider:before {\n\tleft: calc(100% - var(--size) - var(--padding));\n}\n\n.rwmb-switch:checked + .rwmb-switch-status .rwmb-switch-off {\n\tvisibility: hidden;\n\tdisplay: none;\n}\n\n.rwmb-switch:not(:checked) + .rwmb-switch-status .rwmb-switch-on {\n\tvisibility: hidden;\n\tdisplay: none;\n}\n\n.rwmb-switch-slider {\n\tposition: absolute;\n\tcursor: pointer;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tz-index: 15;\n\ttransition: .4s;\n}\n\n.rwmb-switch-slider:before {\n\tposition: absolute;\n\tcontent: attr(title-before) \"\";\n\theight: var(--size);\n\twidth: var(--size);\n\tleft: var(--padding);\n\tbottom: var(--padding);\n\tz-index: 99;\n\tbackground-color: white;\n\ttransition: .4s;\n\tborder-radius: 2px;\n}\n\n.rwmb-switch-label--square .rwmb-switch-slider {\n\tborder-radius: 3px;\n}\n\n.rwmb-switch-label--rounded,\n.rwmb-switch-label--rounded .rwmb-switch-slider {\n\tborder-radius: 99px;\n}\n\n.rwmb-switch-label--rounded .rwmb-switch-slider:before {\n\tborder-radius: 50%;\n}\n\n.rwmb-switch-on,\n.rwmb-switch-off {\n\tdisplay: inline-block;\n\tfloat: left;\n\tmargin: 0 4px;\n\tcolor: #fff;\n\ttext-transform: uppercase;\n\tfont-size: 11px;\n\tposition: relative;\n\tz-index: 20;\n\tline-height: var(--size);\n}\n\n.rwmb-switch-on {\n\tpadding-right: calc(var(--size) + var(--padding));\n}\n\n.rwmb-switch-off {\n\tpadding-left: calc(var(--size) + var(--padding));\n}\n\n/* Admin color schemes */\n.admin-color-blue .rwmb-switch-label  {\n\t--color: var(--wp-admin-theme-color, #e1a948);\n}\n.admin-color-coffee .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #c7a589);\n}\n.admin-color-ectoplasm .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #a3b745);\n}\n.admin-color-light .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #04a4cc);\n}\n.admin-color-midnight .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #e14d43);\n}\n.admin-color-modern .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #3858e9);\n}\n.admin-color-ocean .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #9ebaa0);\n}\n.admin-color-sunrise .rwmb-switch-label {\n\t--color: var(--wp-admin-theme-color, #dd823b);\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/text-list.css",
    "content": ".rwmb-text_list-non-cloneable > .rwmb-input,\n.rwmb-text_list-clone {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n.rwmb-text_list-non-cloneable > .rwmb-input > label,\n.rwmb-text_list-clone > label {\n\tmargin: 0 10px 10px 0;\n\tflex: 1;\n}\n.rwmb-text_list-non-cloneable > .rwmb-input > label:last-child,\n.rwmb-text_list-clone > label:last-child {\n\tmargin-right: 0;\n}\n\n.rwmb-text-list-label {\n\tfont-weight: 600;\n\tdisplay: block;\n\tmargin-bottom: 3px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/upload.css",
    "content": ".rwmb-upload-area {\n\theight: 200px;\n\tborder: 4px dashed #ddd;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttext-align: center;\n}\n\n.rwmb-upload-inside h3 {\n\tfont-size: 20px;\n\tline-height: 1.4;\n\tfont-weight: 400;\n\tmargin: 0;\n}\n\n.rwmb-upload-inside p {\n\tmargin: .5em 0;\n}\n\n/* Progress bar */\n.rwmb-progress {\n\t--height: 16px;\n\n\tmargin-bottom: 12px;\n\n\tposition: relative;\n\tz-index: 1;\n\n\tborder-radius: 99px;\n\tbackground-color: #ddd;\n\n\theight: var(--height);\n\tline-height: var(--height);\n\tcolor: #fff;\n\tfont-size: 11px;\n\ttext-align: center;\n}\n\n.rwmb-progress:before {\n\tdisplay: block;\n\tcontent: \"\";\n\n\tposition: absolute;\n\twidth: calc(var(--value) * 1%);\n\theight: 100%;\n\tz-index: -1;\n\n\tbackground-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n\tbackground-size: 16px 16px;\n\tbackground-color: var(--wp-admin-theme-color, #2271b1);\n\tborder-radius: 99px 0 0 99px;\n}\n\n.rwmb-progress--completed:before {\n\tborder-radius: 99px;\n\tanimation: progress 1s linear infinite;\n}\n\n@keyframes progress {\n\t0% {\n\t\tbackground-position: 0 0;\n\t}\n\n\t100% {\n\t\tbackground-position: 16px 0px;\n\t}\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/video.css",
    "content": ".rwmb-video-item {\n\tposition: relative;\n\tfloat: left;\n\tmargin: 0 12px 12px 0;\n\tlist-style: none;\n\twidth: 300px;\n\tbox-sizing: border-box;\n}\n\n.rwmb-video-item video {\n\twidth: auto;\n\theight: 100%;\n}\n\n.rwmb-video-item .rwmb-media-info {\n\tmargin-top: 12px;\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/css/wysiwyg.css",
    "content": ".rwmb-field .mceIframeContainer {\n\tbackground: #fff;\n}\n.rwmb-wysiwyg-clone {\n\tpadding-top: 20px;\n}\n\n/* Fix style for Gutenberg */\n.block-editor .wp-editor-wrap {\n\tbox-sizing: content-box;\n}\n\n/* Fix fullscreen mode still shows admin menu */\ndiv.mce-fullscreen {\n\tz-index: 999999;\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/autoloader.php",
    "content": "<?php\n/**\n * Autoload plugin classes.\n */\nclass RWMB_Autoloader {\n\tprotected $dirs = [];\n\n\t/**\n\t * Adds a base directory for a class name prefix and/or suffix.\n\t *\n\t * @param string $dir    A base directory for class files.\n\t * @param string $prefix The class name prefix.\n\t * @param string $suffix The class name suffix.\n\t */\n\tpublic function add( string $dir, string $prefix, string $suffix = '' ) {\n\t\t$this->dirs[] = [\n\t\t\t'dir'    => trailingslashit( $dir ),\n\t\t\t'prefix' => $prefix,\n\t\t\t'suffix' => $suffix,\n\t\t];\n\t}\n\n\tpublic function register() {\n\t\tspl_autoload_register( [ $this, 'autoload' ] );\n\t}\n\n\tpublic function autoload( string $class_name ) {\n\t\tforeach ( $this->dirs as $dir ) {\n\t\t\tif (\n\t\t\t\t( $dir['prefix'] && ! str_starts_with( $class_name, $dir['prefix'] ) )\n\t\t\t\t|| ( $dir['suffix'] && ! str_ends_with( $class_name, $dir['suffix'] ) )\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t$file = substr( $class_name, strlen( $dir['prefix'] ) );\n\t\t\tif ( $dir['suffix'] && strlen( $file ) > strlen( $dir['suffix'] ) ) {\n\t\t\t\t$file = substr( $file, 0, - strlen( $dir['suffix'] ) );\n\t\t\t}\n\t\t\tif ( function_exists( 'mb_strtolower' ) && function_exists( 'mb_detect_encoding' ) ) {\n\t\t\t\t$file = mb_strtolower( str_replace( '_', '-', $file ), mb_detect_encoding( $file ) ) . '.php';\n\t\t\t} else {\n\t\t\t\t$file = strtolower( str_replace( '_', '-', $file ) ) . '.php';\n\t\t\t}\n\t\t\t$file = $dir['dir'] . $file;\n\t\t\t$this->require( $file );\n\t\t}\n\t}\n\n\tprivate function require( string $file ) {\n\t\tif ( file_exists( $file ) ) {\n\t\t\trequire_once $file;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/clone.php",
    "content": "<?php\n/**\n * The clone module, allowing users to clone (duplicate) fields.\n */\nclass RWMB_Clone {\n\tpublic static function html( array $meta, array $field ): string {\n\t\t$field_html = '';\n\n\t\t$count = count( $meta );\n\t\tforeach ( $meta as $index => $sub_meta ) {\n\t\t\t$sub_field               = $field;\n\t\t\t$sub_field['field_name'] = $field['field_name'] . \"[{$index}]\";\n\t\t\t$attributes_id           = $sub_field['attributes']['id'] ?? $sub_field['id'];\n\n\t\t\tif ( $index === 0 && $count > 1 ) {\n\t\t\t\t$sub_field['attributes']['id'] = $attributes_id . '_rwmb_template';\n\t\t\t}\n\n\t\t\tif ( $index === 1 ) {\n\t\t\t\t$sub_field['attributes']['id'] = $attributes_id;\n\t\t\t}\n\n\t\t\tif ( $index > 1 ) {\n\t\t\t\tif ( isset( $sub_field['address_field'] ) ) {\n\t\t\t\t\t$sub_field['address_field'] = $field['address_field'] . \"_{$index}\";\n\t\t\t\t}\n\t\t\t\t$sub_field['id'] = $field['id'] . \"_{$index}\";\n\n\t\t\t\tif ( ! empty( $sub_field['attributes']['id'] ) ) {\n\t\t\t\t\t$sub_field['attributes']['id'] .= \"_{$index}\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( in_array( $sub_field['type'], [ 'file', 'image' ], true ) ) {\n\t\t\t\t$sub_field['input_name']  = '_file_' . uniqid();\n\t\t\t\t$sub_field['index_name'] .= \"[{$index}]\";\n\t\t\t} elseif ( $field['multiple'] ) {\n\t\t\t\t$sub_field['field_name'] .= '[]';\n\t\t\t}\n\n\t\t\t// Wrap field HTML in a div with class=\"rwmb-clone\" if needed.\n\t\t\t$class     = \"rwmb-clone rwmb-{$field['type']}-clone\";\n\t\t\t$sort_icon = '';\n\t\t\tif ( $field['sort_clone'] ) {\n\t\t\t\t$class    .= ' rwmb-sort-clone';\n\t\t\t\t$sort_icon = \"<a href='javascript:;' class='rwmb-clone-icon'></a>\";\n\t\t\t}\n\n\t\t\t$class     .= $index === 0 ? ' rwmb-clone-template' : '';\n\t\t\t$input_html = \"<div class='$class'>\" . $sort_icon;\n\n\t\t\t// Call separated methods for displaying each type of field.\n\t\t\t$input_html .= RWMB_Field::call( $sub_field, 'html', $sub_meta );\n\t\t\t$input_html  = RWMB_Field::filter( 'html', $input_html, $sub_field, $sub_meta );\n\n\t\t\t// Remove clone button.\n\t\t\t$input_html .= self::remove_clone_button( $sub_field );\n\t\t\t$input_html .= '</div>';\n\n\t\t\t$field_html .= $input_html;\n\t\t}\n\n\t\treturn $field_html;\n\t}\n\n\t/**\n\t * Set value of meta before saving into database\n\t *\n\t * @param mixed $new       The submitted meta value.\n\t * @param mixed $old       The existing meta value.\n\t * @param int   $object_id The object ID.\n\t * @param array $field     The field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function value( $new, $old, $object_id, array $field ) {\n\t\tif ( ! is_array( $new ) ) {\n\t\t\t$new = [];\n\t\t}\n\n\t\tif ( in_array( $field['type'], [ 'file', 'image' ], true ) ) {\n\t\t\t$new = RWMB_File_Field::clone_value( $new, $old, $object_id, $field );\n\t\t} else {\n\t\t\tforeach ( $new as $key => $value ) {\n\t\t\t\t$old_value   = $old[ $key ] ?? null;\n\t\t\t\t$value       = RWMB_Field::call( $field, 'value', $value, $old_value, $object_id );\n\t\t\t\t$new[ $key ] = RWMB_Field::filter( 'sanitize', $value, $field, $old_value, $object_id );\n\t\t\t}\n\t\t}\n\n\t\t// Remove empty clones.\n\t\t$new = array_filter( $new, 'RWMB_Helpers_Value::is_valid_for_field' );\n\n\t\t// Reset indexes.\n\t\t$new = array_values( $new );\n\n\t\treturn $new;\n\t}\n\n\tpublic static function add_clone_button( array $field ): string {\n\t\tif ( ! $field['clone'] ) {\n\t\t\treturn '';\n\t\t}\n\t\t$text = RWMB_Field::filter( 'add_clone_button_text', $field['add_button'], $field );\n\t\treturn '<a href=\"#\" class=\"rwmb-button button add-clone\">' . esc_html( $text ) . '</a>';\n\t}\n\n\tpublic static function remove_clone_button( array $field ): string {\n\t\t$text = RWMB_Field::filter( 'remove_clone_button_text', '<span class=\"dashicons dashicons-dismiss\"></span>', $field );\n\t\treturn '<a href=\"#\" class=\"rwmb-button remove-clone\">' . $text . '</a>';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/core.php",
    "content": "<?php\nclass RWMB_Core {\n\tpublic function init() {\n\t\tadd_filter( 'plugin_action_links_meta-box/meta-box.php', [ $this, 'plugin_links' ], 20 );\n\n\t\t// Uses priority 20 to support custom port types registered using the default priority.\n\t\tadd_action( 'init', [ $this, 'register_meta_boxes' ], 20 );\n\t\tadd_action( 'edit_page_form', [ $this, 'fix_page_template' ] );\n\t\t$this->add_context_hooks();\n\t}\n\n\tpublic function plugin_links( array $links ): array {\n\t\t$links[] = '<a href=\"https://docs.metabox.io?utm_source=plugin_links&utm_medium=link&utm_campaign=meta_box\" target=\"_blank\">' . esc_html__( 'Docs', 'meta-box' ) . '</a>';\n\n\t\t$utc_timezone = new DateTimeZone( 'UTC' );\n\t\t$now = new DateTime( 'now', $utc_timezone );\n\t\t$sale_end = new DateTime( '2025-12-02 00:00:00', $utc_timezone );\n\t\tif ( $now < $sale_end ) {\n\t\t\t$links[] = '<a href=\"https://metabox.io/black-friday/?utm_source=plugin_links&utm_medium=link&utm_campaign=black_friday\" target=\"_blank\" style=\"color: #39b54a; font-weight: bold\">' . esc_html__( 'Black Friday Sale', 'meta-box' ) . '</a>';\n\t\t}\n\t\treturn $links;\n\t}\n\n\tpublic function register_meta_boxes() {\n\t\t$configs  = apply_filters( 'rwmb_meta_boxes', [] );\n\t\t$registry = rwmb_get_registry( 'meta_box' );\n\n\t\tforeach ( $configs as $config ) {\n\t\t\tif ( ! is_array( $config ) || empty( $config ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t$meta_box = $registry->make( $config );\n\t\t\t$meta_box->register_fields();\n\t\t}\n\t}\n\n\t/**\n\t * WordPress will prevent post data saving if a page template has been selected that does not exist.\n\t * This is especially a problem when switching themes, and old page templates are in the post data.\n\t * Unset the page template if the page does not exist to allow the post to save.\n\t */\n\tpublic function fix_page_template( WP_Post $post ) {\n\t\t$template       = get_post_meta( $post->ID, '_wp_page_template', true );\n\t\t$page_templates = wp_get_theme()->get_page_templates();\n\n\t\t// If the template doesn't exists, remove the data to allow WordPress to save.\n\t\tif ( ! isset( $page_templates[ $template ] ) ) {\n\t\t\tdelete_post_meta( $post->ID, '_wp_page_template' );\n\t\t}\n\t}\n\n\t/**\n\t * Get registered meta boxes via a filter.\n\t * @deprecated No longer used. Keep for backward-compatibility with extensions.\n\t */\n\tpublic static function get_meta_boxes(): array {\n\t\t$meta_boxes = rwmb_get_registry( 'meta_box' )->all();\n\t\treturn wp_list_pluck( $meta_boxes, 'meta_box' );\n\t}\n\n\tpublic function add_context_hooks() {\n\t\t$hooks = [\n\t\t\t'edit_form_top',\n\t\t\t'edit_form_after_title',\n\t\t\t'edit_form_after_editor',\n\t\t\t'edit_form_before_permalink',\n\t\t];\n\n\t\tforeach ( $hooks as $hook ) {\n\t\t\tadd_action( $hook, [ $this, 'render_meta_boxes_for_context' ] );\n\t\t}\n\t}\n\n\tpublic function render_meta_boxes_for_context( $post ) {\n\t\t$hook    = current_filter();\n\t\t$context = 'edit_form_top' === $hook ? 'form_top' : substr( $hook, 10 );\n\t\tdo_meta_boxes( null, $context, $post );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/field-registry.php",
    "content": "<?php\n/**\n * A registry for storing all fields.\n *\n * @link https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html\n */\nclass RWMB_Field_Registry {\n\tprivate $data = [];\n\n\t/**\n\t * Add a single field to the registry.\n\t *\n\t * @param array  $field       Field configuration.\n\t * @param string $type        Post type|Taxonomy|'user'|Setting page which the field belongs to.\n\t * @param string $object_type Object type which the field belongs to.\n\t */\n\tpublic function add( array $field, string $type, string $object_type = 'post' ) {\n\t\tif ( ! isset( $field['id'] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( empty( $this->data[ $object_type ] ) ) {\n\t\t\t$this->data[ $object_type ] = [];\n\t\t}\n\t\tif ( empty( $this->data[ $object_type ][ $type ] ) ) {\n\t\t\t$this->data[ $object_type ][ $type ] = [];\n\t\t}\n\t\t$this->data[ $object_type ][ $type ][ $field['id'] ] = $field;\n\n\t\tdo_action( 'rwmb_field_registered', $field, $type, $object_type );\n\t}\n\n\t/**\n\t * Retrieve a field.\n\t *\n\t * @param string $id          A meta box instance id.\n\t * @param string $type        Post type|Taxonomy|'user'|Setting page which the field belongs to.\n\t * @param string $object_type Object type which the field belongs to.\n\t *\n\t * @return bool|array False or field configuration.\n\t */\n\tpublic function get( $id, $type, $object_type = 'post' ) {\n\t\treturn $this->data[ $object_type ][ $type ][ $id ] ?? false;\n\t}\n\n\t/**\n\t * Retrieve fields by object type.\n\t *\n\t * @param string $object_type Object type which the field belongs to.\n\t *\n\t * @return array List of fields.\n\t */\n\tpublic function get_by_object_type( string $object_type = 'post' ): array {\n\t\treturn $this->data[ $object_type ] ?? [];\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/field.php",
    "content": "<?php\nuse MetaBox\\Support\\Arr;\n\n/**\n * The field base class.\n * This is the parent class of all custom fields defined by the plugin, which defines all the common methods.\n * Fields must inherit this class and overwrite methods with its own.\n */\nabstract class RWMB_Field {\n\tpublic static function add_actions() {}\n\n\tpublic static function admin_enqueue_scripts() {}\n\n\t/**\n\t * Show field HTML\n\t * Filters are put inside this method, not inside methods such as \"meta\", \"html\", \"begin_html\", etc.\n\t * That ensures the returned value are always been applied filters.\n\t * This method is not meant to be overwritten in specific fields.\n\t *\n\t * @param array $field   Field parameters.\n\t * @param bool  $saved   Whether the meta box is saved at least once.\n\t * @param int   $post_id Post ID.\n\t */\n\tpublic static function show( array $field, bool $saved, $post_id = 0 ) {\n\t\t$meta = self::call( $field, 'meta', $post_id, $saved );\n\t\t$meta = self::filter( 'field_meta', $meta, $field, $saved );\n\n\t\t$begin = static::begin_html( $field );\n\t\t$begin = self::filter( 'begin_html', $begin, $field, $meta );\n\n\t\t// Separate code for cloneable and non-cloneable fields to make easy to maintain.\n\t\tif ( $field['clone'] ) {\n\t\t\t$field_html = RWMB_Clone::html( $meta, $field );\n\t\t} else {\n\t\t\t// Call separated methods for displaying each type of field.\n\t\t\t$field_html = self::call( $field, 'html', $meta );\n\t\t\t$field_html = self::filter( 'html', $field_html, $field, $meta );\n\t\t}\n\n\t\t$end  = static::end_html( $field );\n\t\t$end  = self::filter( 'end_html', $end, $field, $meta );\n\t\t$html = self::filter( 'wrapper_html', $begin . $field_html . $end, $field, $meta );\n\n\t\t// Display label and input in DIV and allow user-defined classes to be appended.\n\t\t$classes  = \"rwmb-field rwmb-{$field['type']}-wrapper \" . $field['class'];\n\t\t$required = $field['required'] || ! empty( $field['attributes']['required'] );\n\n\t\tif ( $required ) {\n\t\t\t$classes .= ' required';\n\t\t}\n\n\t\t$classes = esc_attr( trim( $classes ) );\n\n\t\t$outer_html  = $field['before'];\n\t\t$outer_html .= '<div class=\"' . $classes . '\">' . $html . '</div>';\n\t\t$outer_html .= $field['after'];\n\n\t\t$outer_html = self::filter( 'outer_html', $outer_html, $field, $meta );\n\n\t\techo $outer_html; // phpcs:ignore WordPress.Security.EscapeOutput\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\treturn '';\n\t}\n\n\tprotected static function begin_html( array $field ): string {\n\t\t$id       = $field['attributes']['id'] ?? $field['id'];\n\t\t$required = $field['required'] || ! empty( $field['attributes']['required'] );\n\t\t$required = $required ? '<span class=\"rwmb-required\">*</span>' : '';\n\n\t\t$label = $field['name'] ? sprintf(\n\t\t\t// Translators: %1$s - field ID, %2$s - field label, %3$s - required asterisk, %4$s - label description.\n\t\t\t'<div class=\"rwmb-label\" id=\"%1$s-label\"><label for=\"%1$s\">%2$s%3$s</label>%4$s</div>',\n\t\t\tesc_attr( $id ),\n\t\t\t$field['name'],\n\t\t\t$required,\n\t\t\tstatic::label_description( $field )\n\t\t) : '';\n\n\t\t$data_max_clone   = is_numeric( $field['max_clone'] ) && $field['max_clone'] > 0 ? ' data-max-clone=' . $field['max_clone'] : '';\n\t\t$data_min_clone   = is_numeric( $field['min_clone'] ) && $field['min_clone'] > 0 ? ' data-min-clone=' . $field['min_clone'] : '';\n\t\t$data_empty_start = $field['clone_empty_start'] ? ' data-clone-empty-start=\"1\"' : ' data-clone-empty-start=\"0\"';\n\n\t\t$input_open = sprintf(\n\t\t\t'<div class=\"rwmb-input\" %s %s %s>',\n\t\t\t$data_min_clone,\n\t\t\t$data_max_clone,\n\t\t\t$data_empty_start\n\t\t);\n\n\t\treturn $label . $input_open;\n\t}\n\n\tprotected static function end_html( array $field ): string {\n\t\treturn RWMB_Clone::add_clone_button( $field ) . static::input_description( $field ) . '</div>';\n\t}\n\n\tprotected static function label_description( array $field ): string {\n\t\t$id = $field['id'] ? ' id=\"' . esc_attr( $field['id'] ) . '-label-description\"' : '';\n\t\treturn $field['label_description'] ? \"<p{$id} class='description'>{$field['label_description']}</p>\" : '';\n\t}\n\n\tprotected static function input_description( array $field ): string {\n\t\t$id = $field['id'] ? ' id=\"' . esc_attr( $field['id'] ) . '-description\"' : '';\n\t\treturn $field['desc'] ? \"<p{$id} class='description'>{$field['desc']}</p>\" : '';\n\t}\n\n\t/**\n\t * Get raw meta value.\n\t *\n\t * @param int   $object_id Object ID.\n\t * @param array $field     Field parameters.\n\t * @param array $args      Arguments of {@see rwmb_meta()} helper.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function raw_meta( $object_id, $field, $args = [] ) {\n\t\tif ( empty( $field['id'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif ( isset( $field['storage'] ) ) {\n\t\t\t$storage = $field['storage'];\n\t\t} elseif ( isset( $args['object_type'] ) ) {\n\t\t\t$storage = rwmb_get_storage( $args['object_type'] );\n\t\t} else {\n\t\t\t$storage = rwmb_get_storage( 'post' );\n\t\t}\n\n\t\tif ( ! isset( $args['single'] ) ) {\n\t\t\t$args['single'] = $field['clone'] || ! $field['multiple'];\n\t\t}\n\n\t\tif ( $field['clone'] && $field['clone_as_multiple'] ) {\n\t\t\t$args['single'] = false;\n\t\t}\n\n\t\t$value = $storage->get( $object_id, $field['id'], $args );\n\t\t$value = self::filter( 'raw_meta', $value, $field, $object_id, $args );\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Get meta value.\n\t *\n\t * @param int   $post_id Post ID.\n\t * @param bool  $saved   Whether the meta box is saved at least once.\n\t * @param array $field   Field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function meta( $post_id, $saved, $field ) {\n\t\t/**\n\t\t * For special fields like 'divider', 'heading' which don't have ID, just return empty string\n\t\t * to prevent notice error when displaying fields.\n\t\t */\n\t\tif ( empty( $field['id'] ) ) {\n\t\t\treturn '';\n\t\t}\n\t\t// Get raw meta.\n\t\t$raw_meta   = self::call( $field, 'raw_meta', $post_id );\n\t\t$single_std = self::call( 'get_single_std', $field );\n\t\t$std        = self::call( 'get_std', $field );\n\n\t\t$saved = $saved && $field['save_field'];\n\t\t// Use $field['std'] only when the meta box hasn't been saved (i.e. the first time we run).\n\t\t$meta = $saved ? $raw_meta : $std;\n\n\t\tif ( ! $field['clone'] ) {\n\t\t\treturn $meta;\n\t\t}\n\n\t\t// When a field is cloneable, it should always return an array.\n\t\t$meta = is_array( $raw_meta ) ? $raw_meta : [];\n\n\t\tif ( empty( $meta ) ) {\n\t\t\t$empty_meta = empty( $raw_meta ) ? [ null ] : $raw_meta;\n\t\t\t$std        = $field['clone_empty_start'] ? [] : $std;\n\t\t\t$empty_std  = $field['clone_empty_start'] ? [] : Arr::to_depth( $empty_meta, Arr::depth( $std ) );\n\n\t\t\t$meta = $saved ? $empty_std : $std;\n\t\t}\n\n\t\t// 2. Always prepend a template\n\t\tarray_unshift( $meta, $single_std );\n\n\t\treturn $meta;\n\t}\n\n\t/**\n\t * Process the submitted value before saving into the database.\n\t *\n\t * @param mixed $value     The submitted value.\n\t * @param int   $object_id The object ID.\n\t * @param array $field     The field settings.\n\t */\n\tpublic static function process_value( $value, $object_id, array $field ) {\n\t\t$old_value = self::call( $field, 'raw_meta', $object_id );\n\n\t\t// Allow field class change the value.\n\t\tif ( $field['clone'] ) {\n\t\t\t$value = RWMB_Clone::value( $value, $old_value, $object_id, $field );\n\t\t} else {\n\t\t\t$value = self::call( $field, 'value', $value, $old_value, $object_id );\n\t\t\t$value = self::filter( 'sanitize', $value, $field, $old_value, $object_id );\n\t\t}\n\t\t$value = self::filter( 'value', $value, $field, $old_value, $object_id );\n\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Set value of meta before saving into database.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Save meta value.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t */\n\tpublic static function save( $new, $old, $post_id, $field ) {\n\t\tif ( empty( $field['id'] ) || ! $field['save_field'] ) {\n\t\t\treturn;\n\t\t}\n\t\t$name    = $field['id'];\n\t\t$storage = $field['storage'];\n\n\t\t// Remove post meta if it's empty.\n\t\tif ( ! RWMB_Helpers_Value::is_valid_for_field( $new ) ) {\n\t\t\t$storage->delete( $post_id, $name );\n\t\t\treturn;\n\t\t}\n\n\t\t// If field is cloneable AND not force to save as multiple rows, value is saved as a single row in the database.\n\t\tif ( $field['clone'] && ! $field['clone_as_multiple'] ) {\n\t\t\t$storage->update( $post_id, $name, $new );\n\t\t\treturn;\n\t\t}\n\n\t\t// Save cloned fields as multiple values instead serialized array.\n\t\tif ( ( $field['clone'] && $field['clone_as_multiple'] ) || $field['multiple'] ) {\n\t\t\t$storage->delete( $post_id, $name );\n\t\t\t$new = (array) $new;\n\t\t\tforeach ( $new as $new_value ) {\n\t\t\t\t$storage->add( $post_id, $name, $new_value, false );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Default: just update post meta.\n\t\t$storage->update( $post_id, $name, $new );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array|string $field Field settings.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t// Quick define text fields with \"name\" attribute only.\n\t\tif ( is_string( $field ) ) {\n\t\t\t$field = [\n\t\t\t\t'name' => $field,\n\t\t\t\t'id'   => sanitize_key( $field ),\n\t\t\t];\n\t\t}\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'id'                => '',\n\t\t\t'name'              => '',\n\t\t\t'type'              => 'text',\n\t\t\t'label_description' => '',\n\t\t\t'multiple'          => false,\n\t\t\t'std'               => '',\n\t\t\t'desc'              => '',\n\t\t\t'format'            => '',\n\t\t\t'before'            => '',\n\t\t\t'after'             => '',\n\t\t\t'field_name'        => $field['id'] ?? '',\n\t\t\t'placeholder'       => '',\n\t\t\t'save_field'        => true,\n\n\t\t\t'clone'             => false,\n\t\t\t'min_clone'         => 0,\n\t\t\t'max_clone'         => 0,\n\t\t\t'sort_clone'        => false,\n\t\t\t'add_button'        => __( '+ Add more', 'meta-box' ),\n\t\t\t'clone_default'     => false,\n\t\t\t'clone_as_multiple' => false,\n\t\t\t'clone_empty_start' => false,\n\n\t\t\t'class'             => '',\n\t\t\t'disabled'          => false,\n\t\t\t'required'          => false,\n\t\t\t'autofocus'         => false,\n\t\t\t'attributes'        => [],\n\n\t\t\t'sanitize_callback' => null,\n\t\t] );\n\n\t\t// Store the original ID to run correct filters for the cloneable field.\n\t\tif ( $field['clone'] ) {\n\t\t\t$field['_original_id'] = $field['id'];\n\t\t}\n\n\t\tif ( $field['clone_default'] ) {\n\t\t\t$field['attributes'] = wp_parse_args( $field['attributes'], [\n\t\t\t\t'data-default'       => $field['std'],\n\t\t\t\t'data-clone-default' => 'true',\n\t\t\t] );\n\t\t}\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = wp_parse_args( $field['attributes'], [\n\t\t\t'disabled'  => $field['disabled'],\n\t\t\t'autofocus' => $field['autofocus'],\n\t\t\t'required'  => $field['required'],\n\t\t\t'id'        => $field['id'],\n\t\t\t'class'     => '',\n\t\t\t'name'      => $field['field_name'],\n\t\t] );\n\n\t\t$attributes['class'] = trim( implode( ' ', array_merge( [ \"rwmb-{$field['type']}\" ], (array) $attributes['class'] ) ) );\n\n\t\t$id = $attributes['id'] ?: $field['id'];\n\t\tif ( $field['name'] || $field['label_description'] ) {\n\t\t\t$attributes['aria-labelledby'] = \"$id-label\";\n\t\t}\n\t\tif ( $field['desc'] ) {\n\t\t\t$attributes['aria-describedby'] = \"$id-description\";\n\t\t}\n\n\t\treturn $attributes;\n\t}\n\n\tpublic static function render_attributes( array $attributes ): string {\n\t\t$output = '';\n\n\t\t$attributes = array_filter( $attributes, 'RWMB_Helpers_Value::is_valid_for_attribute' );\n\t\tforeach ( $attributes as $key => $value ) {\n\t\t\tif ( is_array( $value ) ) {\n\t\t\t\t$value = wp_json_encode( $value );\n\t\t\t}\n\n\t\t\t$output .= sprintf( ' %s=\"%s\"', $key, esc_attr( $value ) );\n\t\t}\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Get the field value.\n\t * The difference between this function and 'meta' function is 'meta' function always returns the escaped value\n\t * of the field saved in the database, while this function returns more meaningful value of the field, for ex.:\n\t * for file/image: return array of file/image information instead of file/image IDs.\n\t *\n\t * Each field can extend this function and add more data to the returned value.\n\t * See specific field classes for details.\n\t *\n\t * @param  array $field   Field parameters.\n\t * @param  array $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param  ?int  $post_id Post ID.\n\t *\n\t * @return mixed Field value\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\t// Some fields does not have ID like heading, custom HTML, etc.\n\t\tif ( empty( $field['id'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif ( ! $post_id ) {\n\t\t\t$post_id = get_the_ID();\n\t\t}\n\n\t\t// Get raw meta value in the database, no escape.\n\t\t$value = self::call( $field, 'raw_meta', $post_id, $args );\n\n\t\t// Make sure meta value is an array for cloneable and multiple fields.\n\t\tif ( $field['clone'] || $field['multiple'] ) {\n\t\t\t$value = is_array( $value ) && ! empty( $value ) ? $value : [];\n\t\t}\n\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Output the field value.\n\t * Depends on field value and field types, each field can extend this method to output its value in its own way\n\t * See specific field classes for details.\n\t *\n\t * Note: we don't echo the field value directly. We return the output HTML of field, which will be used in\n\t * rwmb_the_field function later.\n\t *\n\t * @use self::get_value()\n\t * @see rwmb_the_value()\n\t *\n\t * @param  array    $field   Field parameters.\n\t * @param  array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param  int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string HTML output of the field\n\t */\n\tpublic static function the_value( $field, $args = [], $post_id = null ) {\n\t\t$value = self::call( 'get_value', $field, $args, $post_id );\n\n\t\tif ( false === $value ) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn self::call( 'format_value', $field, $value, $args, $post_id );\n\t}\n\n\t/**\n\t * Format value for the helper functions.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_value( $field, $value, $args, $post_id ) {\n\t\tif ( ! $field['clone'] ) {\n\t\t\treturn self::call( 'format_clone_value', $field, $value, $args, $post_id );\n\t\t}\n\t\t$output = '<ul>';\n\t\tforeach ( $value as $clone ) {\n\t\t\t$output .= '<li>' . self::call( 'format_clone_value', $field, $clone, $args, $post_id ) . '</li>';\n\t\t}\n\t\t$output .= '</ul>';\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Format value for a clone.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_clone_value( $field, $value, $args, $post_id ) {\n\t\tif ( ! $field['multiple'] ) {\n\t\t\treturn self::call( 'format_single_value', $field, $value, $args, $post_id );\n\t\t}\n\t\t$output = '<ul>';\n\t\tforeach ( $value as $single ) {\n\t\t\t$output .= '<li>' . self::call( 'format_single_value', $field, $single, $args, $post_id ) . '</li>';\n\t\t}\n\t\t$output .= '</ul>';\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Call a method of a field.\n\t */\n\tpublic static function call() {\n\t\t$args = func_get_args();\n\n\t\t$check = reset( $args );\n\n\t\t// Params: method name, field, other params.\n\t\tif ( is_string( $check ) ) {\n\t\t\t$method = array_shift( $args );\n\t\t\t$field  = reset( $args ); // Keep field as 1st param.\n\t\t} else {\n\t\t\t// Params: field, method name, other params.\n\t\t\t$field  = array_shift( $args );\n\t\t\t$method = array_shift( $args );\n\n\t\t\tif ( 'raw_meta' === $method ) {\n\t\t\t\t// Add field param after object id.\n\t\t\t\tarray_splice( $args, 1, 0, [ $field ] );\n\t\t\t} else {\n\t\t\t\t$args[] = $field; // Add field as last param.\n\t\t\t}\n\t\t}\n\n\t\t$class = RWMB_Helpers_Field::get_class( $field );\n\t\tif ( method_exists( $class, $method ) ) {\n\t\t\treturn call_user_func_array( [ $class, $method ], $args );\n\t\t}\n\n\t\t_deprecated_function( esc_html( \"$class::$method\" ), '5.4.8' );\n\t}\n\n\t/**\n\t * Apply various filters based on field type, id.\n\t * Filters:\n\t * - rwmb_{$name}\n\t * - rwmb_{$field['type']}_{$name}\n\t * - rwmb_{$field['id']}_{$name}\n\t *\n\t * @return mixed\n\t */\n\tpublic static function filter() {\n\t\t$args = func_get_args();\n\n\t\t// 3 first params must be: filter name, value, field. Other params will be used for filters.\n\t\t$name  = array_shift( $args );\n\t\t$value = array_shift( $args );\n\t\t$field = array_shift( $args );\n\n\t\t// List of filters.\n\t\t$filters = [\n\t\t\t'rwmb_' . $name,\n\t\t\t'rwmb_' . $field['type'] . '_' . $name,\n\t\t];\n\t\tif ( $field['id'] ) {\n\t\t\t$field_id  = $field['clone'] ? $field['_original_id'] : $field['id'];\n\t\t\t$filters[] = 'rwmb_' . $field_id . '_' . $name;\n\t\t}\n\n\t\t// Filter params: value, field, other params. Note: value is changed after each run.\n\t\tarray_unshift( $args, $field );\n\t\tforeach ( $filters as $filter ) {\n\t\t\t$filter_args = $args;\n\t\t\tarray_unshift( $filter_args, $value );\n\t\t\t$value = apply_filters_ref_array( $filter, $filter_args );\n\t\t}\n\n\t\treturn $value;\n\t}\n\n\tprotected static function get_std( array $field ) {\n\t\t$depth = 0;\n\n\t\tif ( $field['multiple'] ) {\n\t\t\t++$depth;\n\t\t}\n\n\t\tif ( $field['clone'] ) {\n\t\t\t++$depth;\n\t\t}\n\n\t\treturn Arr::to_depth( $field['std'], $depth );\n\t}\n\n\tprotected static function get_single_std( array $field ) {\n\t\t$depth = 0;\n\n\t\tif ( $field['multiple'] ) {\n\t\t\t++$depth;\n\t\t}\n\n\t\treturn Arr::to_depth( $field['std'], $depth );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/autocomplete.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The autocomplete field.\n */\nclass RWMB_Autocomplete_Field extends RWMB_Multiple_Values_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-autocomplete', RWMB_CSS_URL . 'autocomplete.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-autocomplete', 'path', RWMB_CSS_DIR . 'autocomplete.css' );\n\t\twp_enqueue_script( 'rwmb-autocomplete', RWMB_JS_URL . 'autocomplete.js', [ 'jquery-ui-autocomplete' ], RWMB_VER, true );\n\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-autocomplete', 'RWMB_Autocomplete', [\n\t\t\t'delete' => __( 'Delete', 'meta-box' ),\n\t\t] );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\tif ( ! is_array( $meta ) ) {\n\t\t\t$meta = [ $meta ];\n\t\t}\n\n\t\t// Filter out empty values in case the array started with empty or 0 values\n\t\t$meta = array_filter( $meta, function ( $index ) use ( $meta ) {\n\t\t\treturn $meta[ $index ] !== '';\n\t\t}, ARRAY_FILTER_USE_KEY );\n\n\t\t$field   = apply_filters( 'rwmb_autocomplete_field', $field, $meta );\n\t\t$options = $field['options'];\n\n\t\tif ( is_array( $field['options'] ) ) {\n\t\t\t$options = [];\n\t\t\tforeach ( $field['options'] as $value => $label ) {\n\t\t\t\t$options[] = [\n\t\t\t\t\t'value' => (string) $value,\n\t\t\t\t\t'label' => $label,\n\t\t\t\t];\n\t\t\t}\n\t\t\t$options = wp_json_encode( $options );\n\t\t}\n\n\t\t// Input field that triggers autocomplete.\n\t\t// This field doesn't store field values, so it doesn't have \"name\" attribute.\n\t\t// The value(s) of the field is store in hidden input(s). See below.\n\t\t$html = sprintf(\n\t\t\t'<input type=\"text\" class=\"rwmb-autocomplete-search\">\n\t\t\t<input type=\"hidden\" name=\"%s\" class=\"rwmb-autocomplete\" data-options=\"%s\" disabled>',\n\t\t\tesc_attr( $field['field_name'] ),\n\t\t\tesc_attr( $options )\n\t\t);\n\n\t\t$html .= '<div class=\"rwmb-autocomplete-results\">';\n\n\t\t// Each value is displayed with label and 'Delete' option.\n\t\t// The hidden input has to have \".rwmb-*\" class to make clone work.\n\t\t$tpl = '\n\t\t\t<div class=\"rwmb-autocomplete-result\">\n\t\t\t\t<div class=\"label\">%s</div>\n\t\t\t\t<div class=\"actions\">%s</div>\n\t\t\t\t<input type=\"hidden\" class=\"rwmb-autocomplete-value\" name=\"%s\" value=\"%s\">\n\t\t\t</div>\n\t\t';\n\n\t\tif ( is_array( $field['options'] ) ) {\n\t\t\tforeach ( $field['options'] as $value => $label ) {\n\t\t\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\t\t\tif ( ! in_array( $value, $meta ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t$html .= sprintf(\n\t\t\t\t\t$tpl,\n\t\t\t\t\tesc_html( $label ),\n\t\t\t\t\tesc_html__( 'Delete', 'meta-box' ),\n\t\t\t\t\tesc_attr( $field['field_name'] ),\n\t\t\t\t\tesc_attr( $value )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t$meta = array_filter( $meta );\n\t\t\tforeach ( $meta as $value ) {\n\t\t\t\t$label = apply_filters( 'rwmb_autocomplete_result_label', $value, $field );\n\t\t\t\t$html .= sprintf(\n\t\t\t\t\t$tpl,\n\t\t\t\t\tesc_html( $label ),\n\t\t\t\t\tesc_html__( 'Delete', 'meta-box' ),\n\t\t\t\t\tesc_attr( $field['field_name'] ),\n\t\t\t\t\tesc_attr( $value )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t$html .= '</div>'; // .rwmb-autocomplete-results.\n\n\t\treturn $html;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/background.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The background field.\n */\nclass RWMB_Background_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-background', RWMB_CSS_URL . 'background.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-background', 'path', RWMB_CSS_DIR . 'background.css' );\n\n\t\t$args  = func_get_args();\n\t\t$field = reset( $args );\n\t\t$color = RWMB_Color_Field::normalize( [\n\t\t\t'type'          => 'color',\n\t\t\t'id'            => \"{$field['id']}_color\",\n\t\t\t'field_name'    => \"{$field['field_name']}[color]\",\n\t\t\t'alpha_channel' => true,\n\t\t] );\n\t\tRWMB_Color_Field::admin_enqueue_scripts( $color );\n\t\tRWMB_File_Input_Field::admin_enqueue_scripts();\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field settings.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$meta = wp_parse_args( $meta, [\n\t\t\t'color'      => '',\n\t\t\t'image'      => '',\n\t\t\t'repeat'     => '',\n\t\t\t'attachment' => '',\n\t\t\t'position'   => '',\n\t\t\t'size'       => '',\n\t\t] );\n\n\t\t$output = '<div class=\"rwmb-background-row\">';\n\n\t\t// Color.\n\t\t$color   = RWMB_Color_Field::normalize( [\n\t\t\t'type'          => 'color',\n\t\t\t'id'            => \"{$field['id']}_color\",\n\t\t\t'field_name'    => \"{$field['field_name']}[color]\",\n\t\t\t'alpha_channel' => true,\n\t\t] );\n\t\t$output .= RWMB_Color_Field::html( $meta['color'], $color );\n\n\t\t$output .= '</div><!-- .rwmb-background-row -->';\n\t\t$output .= '<div class=\"rwmb-background-row\">';\n\n\t\t// Image.\n\t\t$image   = RWMB_File_Input_Field::normalize( [\n\t\t\t'type'        => 'file_input',\n\t\t\t'id'          => \"{$field['id']}_image\",\n\t\t\t'field_name'  => \"{$field['field_name']}[image]\",\n\t\t\t'placeholder' => __( 'Background Image', 'meta-box' ),\n\t\t] );\n\t\t$output .= RWMB_File_Input_Field::html( $meta['image'], $image );\n\n\t\t$output .= '</div><!-- .rwmb-background-row -->';\n\t\t$output .= '<div class=\"rwmb-background-row\">';\n\n\t\t// Repeat.\n\t\t$repeat  = RWMB_Select_Field::normalize( [\n\t\t\t'type'        => 'select',\n\t\t\t'id'          => \"{$field['id']}_repeat\",\n\t\t\t'field_name'  => \"{$field['field_name']}[repeat]\",\n\t\t\t'placeholder' => esc_html__( '-- Repeat --', 'meta-box' ),\n\t\t\t'options'     => [\n\t\t\t\t'no-repeat' => esc_html__( 'No Repeat', 'meta-box' ),\n\t\t\t\t'repeat'    => esc_html__( 'Repeat All', 'meta-box' ),\n\t\t\t\t'repeat-x'  => esc_html__( 'Repeat Horizontally', 'meta-box' ),\n\t\t\t\t'repeat-y'  => esc_html__( 'Repeat Vertically', 'meta-box' ),\n\t\t\t\t'inherit'   => esc_html__( 'Inherit', 'meta-box' ),\n\t\t\t],\n\t\t] );\n\t\t$output .= RWMB_Select_Field::html( $meta['repeat'], $repeat );\n\n\t\t// Position.\n\t\t$position = RWMB_Select_Field::normalize( [\n\t\t\t'type'        => 'select',\n\t\t\t'id'          => \"{$field['id']}_position\",\n\t\t\t'field_name'  => \"{$field['field_name']}[position]\",\n\t\t\t'placeholder' => esc_html__( '-- Position --', 'meta-box' ),\n\t\t\t'options'     => [\n\t\t\t\t'top left'      => esc_html__( 'Top Left', 'meta-box' ),\n\t\t\t\t'top center'    => esc_html__( 'Top Center', 'meta-box' ),\n\t\t\t\t'top right'     => esc_html__( 'Top Right', 'meta-box' ),\n\t\t\t\t'center left'   => esc_html__( 'Center Left', 'meta-box' ),\n\t\t\t\t'center center' => esc_html__( 'Center Center', 'meta-box' ),\n\t\t\t\t'center right'  => esc_html__( 'Center Right', 'meta-box' ),\n\t\t\t\t'bottom left'   => esc_html__( 'Bottom Left', 'meta-box' ),\n\t\t\t\t'bottom center' => esc_html__( 'Bottom Center', 'meta-box' ),\n\t\t\t\t'bottom right'  => esc_html__( 'Bottom Right', 'meta-box' ),\n\t\t\t],\n\t\t] );\n\t\t$output  .= RWMB_Select_Field::html( $meta['position'], $position );\n\n\t\t// Attachment.\n\t\t$attachment = RWMB_Select_Field::normalize( [\n\t\t\t'type'        => 'select',\n\t\t\t'id'          => \"{$field['id']}_attachment\",\n\t\t\t'field_name'  => \"{$field['field_name']}[attachment]\",\n\t\t\t'placeholder' => esc_html__( '-- Attachment --', 'meta-box' ),\n\t\t\t'options'     => [\n\t\t\t\t'fixed'   => esc_html__( 'Fixed', 'meta-box' ),\n\t\t\t\t'scroll'  => esc_html__( 'Scroll', 'meta-box' ),\n\t\t\t\t'inherit' => esc_html__( 'Inherit', 'meta-box' ),\n\t\t\t],\n\t\t] );\n\t\t$output    .= RWMB_Select_Field::html( $meta['attachment'], $attachment );\n\n\t\t// Size.\n\t\t$size    = RWMB_Select_Field::normalize( [\n\t\t\t'type'        => 'select',\n\t\t\t'id'          => \"{$field['id']}_size\",\n\t\t\t'field_name'  => \"{$field['field_name']}[size]\",\n\t\t\t'placeholder' => esc_html__( '-- Size --', 'meta-box' ),\n\t\t\t'options'     => [\n\t\t\t\t'inherit' => esc_html__( 'Inherit', 'meta-box' ),\n\t\t\t\t'cover'   => esc_html__( 'Cover', 'meta-box' ),\n\t\t\t\t'contain' => esc_html__( 'Contain', 'meta-box' ),\n\t\t\t],\n\t\t] );\n\t\t$output .= RWMB_Select_Field::html( $meta['size'], $size );\n\t\t$output .= '</div><!-- .rwmb-background-row -->';\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param array    $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\tif ( empty( $value ) ) {\n\t\t\treturn '';\n\t\t}\n\t\t$output = '';\n\t\t$value  = array_filter( $value );\n\t\tforeach ( $value as $key => $subvalue ) {\n\t\t\t$subvalue = 'image' === $key ? 'url(' . esc_url( $subvalue ) . ')' : $subvalue;\n\t\t\t$output  .= 'background-' . $key . ': ' . $subvalue . ';';\n\t\t}\n\t\treturn $output;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/button-group.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The Button group.\n */\nclass RWMB_Button_Group_Field extends RWMB_Choice_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-button-group', RWMB_CSS_URL . 'button-group.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-button-group', 'path', RWMB_CSS_DIR . 'button-group.css' );\n\t\twp_enqueue_script( 'rwmb-button-group', RWMB_JS_URL . 'button-group.js', [ 'rwmb' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$options = self::transform_options( $field['options'] );\n\t\t$walker  = new RWMB_Walker_Input_List( $field, $meta );\n\n\t\t$output  = sprintf(\n\t\t\t'<fieldset class=\"rwmb-button-input-list %s\">',\n\t\t\t$field['inline'] ? 'rwmb-inline' : ''\n\t\t);\n\t\t$output .= $walker->walk( $options, -1 );\n\t\t$output .= '</fieldset>';\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'inline' => true,\n\t\t] );\n\n\t\t$field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field;\n\t\t$field = RWMB_Input_Field::normalize( $field );\n\n\t\t$field['flatten'] = true;\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes          = RWMB_Input_Field::get_attributes( $field, $value );\n\t\t$attributes['id']    = false;\n\t\t$attributes['type']  = $field['multiple'] ? 'checkbox' : 'radio';\n\t\t$attributes['value'] = $value;\n\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/button.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The button field. Simply displays a HTML button which might be used for JavaScript actions.\n */\nclass RWMB_Button_Field extends RWMB_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field The field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = self::get_attributes( $field );\n\t\treturn sprintf( '<button %s>%s</button>', self::render_attributes( $attributes ), $field['std'] );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field The field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'std' => __( 'Click me', 'meta-box' ),\n\t\t] );\n\t\t$field = parent::normalize( $field );\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field The field parameters.\n\t * @param mixed $value The attribute value.\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes           = parent::get_attributes( $field, $value );\n\t\t$attributes           = wp_parse_args( $attributes, [\n\t\t\t'type' => $field['type'],\n\t\t] );\n\t\t$attributes['class'] .= ' button hide-if-no-js';\n\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/checkbox-list.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The checkbox list field which shows a list of choices and allow users to select multiple options.\n */\nclass RWMB_Checkbox_List_Field extends RWMB_Input_List_Field {\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field['multiple'] = true;\n\t\t$field             = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/checkbox.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The checkbox field.\n */\nclass RWMB_Checkbox_Field extends RWMB_Input_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = self::get_attributes( $field, 1 );\n\t\t$output     = sprintf(\n\t\t\t'<input %s %s>',\n\t\t\tself::render_attributes( $attributes ),\n\t\t\tchecked( ! empty( $meta ), 1, false )\n\t\t);\n\t\tif ( $field['desc'] ) {\n\t\t\t$output = \"<label id='{$field['id']}_description' class='description'>$output {$field['desc']}</label>\";\n\t\t}\n\t\treturn $output;\n\t}\n\n\tprotected static function input_description( array $field ): string {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn $value ? __( 'Yes', 'meta-box' ) : __( 'No', 'meta-box' );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/choice.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The abstract choice field.\n */\nabstract class RWMB_Choice_Field extends RWMB_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'flatten' => true,\n\t\t\t'options' => [],\n\t\t] );\n\n\t\t// Use callback: function_name format from Meta Box Builder.\n\t\tif ( isset( $field['_callback'] ) && is_callable( $field['_callback'] ) ) {\n\t\t\t$field['options'] = call_user_func( $field['_callback'] );\n\t\t}\n\n\t\treturn $field;\n\t}\n\n\tpublic static function transform_options( $options ): array {\n\t\t$transformed = [];\n\t\t$options     = (array) $options;\n\t\tforeach ( $options as $value => $label ) {\n\t\t\t$option = is_array( $label ) ? $label : [\n\t\t\t\t'label' => (string) $label,\n\t\t\t\t'value' => (string) $value,\n\t\t\t];\n\t\t\tif ( isset( $option['label'] ) && isset( $option['value'] ) ) {\n\t\t\t\t$transformed[ $option['value'] ] = (object) $option;\n\t\t\t}\n\t\t}\n\t\treturn $transformed;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t$options = self::transform_options( $field['options'] );\n\t\treturn isset( $options[ $value ] ) ? $options[ $value ]->label : '';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/color.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The color field which uses WordPress color picker to select a color.\n */\nclass RWMB_Color_Field extends RWMB_Input_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-color', RWMB_CSS_URL . 'color.css', [ 'wp-color-picker' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-color', 'path', RWMB_CSS_DIR . 'color.css' );\n\n\t\t$dependencies = [ 'wp-color-picker' ];\n\t\t$args         = func_get_args();\n\t\t$field        = reset( $args );\n\t\tif ( ! empty( $field['alpha_channel'] ) ) {\n\t\t\twp_enqueue_script( 'wp-color-picker-alpha', RWMB_JS_URL . 'wp-color-picker-alpha/wp-color-picker-alpha.min.js', [ 'wp-color-picker' ], RWMB_VER, true );\n\t\t\t$dependencies = [ 'wp-color-picker-alpha' ];\n\t\t}\n\t\twp_enqueue_script( 'rwmb-color', RWMB_JS_URL . 'color.js', $dependencies, RWMB_VER, true );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'alpha_channel' => false,\n\t\t\t'js_options'    => [],\n\t\t] );\n\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'defaultColor' => false,\n\t\t\t'hide'         => true,\n\t\t\t'palettes'     => true,\n\t\t] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes         = parent::get_attributes( $field, $value );\n\t\t$attributes         = wp_parse_args( $attributes, [\n\t\t\t'data-options' => wp_json_encode( $field['js_options'] ),\n\t\t] );\n\t\t$attributes['type'] = 'text';\n\n\t\tif ( $field['alpha_channel'] ) {\n\t\t\t$attributes['data-alpha-enabled']    = 'true';\n\t\t\t$attributes['data-alpha-color-type'] = 'hex';\n\t\t}\n\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn sprintf( \"<span style='display:inline-block;width:20px;height:20px;border-radius:50%%;background:%s;'></span>\", $value );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/custom-html.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The custom HTML field which allows users to output any kind of content to the meta box.\n */\nclass RWMB_Custom_Html_Field extends RWMB_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$html = ! empty( $field['std'] ) ? $field['std'] : '';\n\t\tif ( ! empty( $field['callback'] ) && is_callable( $field['callback'] ) ) {\n\t\t\t$html = call_user_func_array( $field['callback'], [ $meta, $field ] );\n\t\t}\n\t\treturn $html;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/date.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The date picker field, which uses built-in jQueryUI date picker widget.\n */\nclass RWMB_Date_Field extends RWMB_Datetime_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::register_assets();\n\t\twp_enqueue_style( 'rwmb-date' );\n\t\twp_enqueue_script( 'rwmb-date' );\n\t}\n\n\t/**\n\t * Returns a date() compatible format string from the JavaScript format.\n\t * @link http://www.php.net/manual/en/function.date.php\n\t */\n\tprotected static function get_php_format( array $js_options ): string {\n\t\treturn strtr( $js_options['dateFormat'], self::$date_formats );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/datetime.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\nuse MetaBox\\Support\\Arr;\n\n/**\n * The date and time picker field which allows users to select both date and time via jQueryUI datetime picker.\n */\nclass RWMB_Datetime_Field extends RWMB_Input_Field {\n\t/**\n\t * Translate date format from jQuery UI date picker to PHP date().\n\t * It's used to store timestamp value of the field.\n\t * Missing:  '!' => '', 'oo' => '', '@' => '', \"''\" => \"'\".\n\t *\n\t * @var array\n\t */\n\tprotected static $date_formats = [\n\t\t'd'  => 'j',\n\t\t'dd' => 'd',\n\t\t'oo' => 'z',\n\t\t'D'  => 'D',\n\t\t'DD' => 'l',\n\t\t'm'  => 'n',\n\t\t'mm' => 'm',\n\t\t'M'  => 'M',\n\t\t'MM' => 'F',\n\t\t'y'  => 'y',\n\t\t'yy' => 'Y',\n\t\t'o'  => 'z',\n\t];\n\n\t/**\n\t * Translate time format from jQuery UI time picker to PHP date().\n\t * It's used to store timestamp value of the field.\n\t * Missing: 't' => '', T' => '', 'm' => '', 's' => ''.\n\t *\n\t * @var array\n\t */\n\tprotected static $time_formats = [\n\t\t'H'  => 'G',\n\t\t'HH' => 'H',\n\t\t'h'  => 'g',\n\t\t'hh' => 'h',\n\t\t'mm' => 'i',\n\t\t'ss' => 's',\n\t\t'l'  => 'u',\n\t\t'tt' => 'a',\n\t\t'TT' => 'A',\n\t];\n\n\tpublic static function register_assets() {\n\t\t// jQueryUI base theme: https://github.com/jquery/jquery-ui/tree/1.13.2/themes/base\n\t\t$url = RWMB_CSS_URL . 'jqueryui';\n\t\twp_register_style( 'jquery-ui-core', \"$url/core.css\", [], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-core', 'path', RWMB_CSS_DIR . 'jqueryui/core.css' );\n\n\t\twp_register_style( 'jquery-ui-theme', \"$url/theme.css\", [], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-theme', 'path', RWMB_CSS_DIR . 'jqueryui/theme.css' );\n\n\t\twp_register_style( 'jquery-ui-datepicker', \"$url/datepicker.css\", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-datepicker', 'path', RWMB_CSS_DIR . 'jqueryui/datepicker.css' );\n\n\t\twp_register_style( 'jquery-ui-slider', \"$url/slider.css\", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-slider', 'path', RWMB_CSS_DIR . 'jqueryui/slider.css' );\n\n\t\t// jQueryUI timepicker addon: https://github.com/trentrichardson/jQuery-Timepicker-Addon\n\t\twp_register_style( 'jquery-ui-timepicker', \"$url/jquery-ui-timepicker-addon.min.css\", [ 'rwmb-date', 'jquery-ui-slider' ], '1.6.3' );\n\t\twp_style_add_data( 'jquery-ui-timepicker', 'path', RWMB_CSS_DIR . 'jqueryui/jquery-ui-timepicker-addon.min.css' );\n\n\t\twp_register_style( 'rwmb-date', RWMB_CSS_URL . 'date.css', [ 'jquery-ui-datepicker' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-date', 'path', RWMB_CSS_DIR . 'date.css' );\n\n\t\t// Scripts.\n\t\t$url = RWMB_JS_URL . 'jqueryui';\n\t\twp_register_script( 'jquery-ui-timepicker', \"$url/jquery-ui-timepicker-addon.min.js\", [ 'jquery-ui-datepicker', 'jquery-ui-slider' ], '1.6.3', true );\n\t\twp_register_script( 'jquery-ui-timepicker-slider', \"$url/jquery-ui-sliderAccess.js\", [ 'jquery-ui-datepicker', 'jquery-ui-slider' ], '0.3', true );\n\t\twp_register_script( 'jquery-ui-timepicker-i18n', \"$url/jquery-ui-timepicker-addon-i18n.min.js\", [ 'jquery-ui-timepicker' ], '1.6.3', true );\n\n\t\twp_register_script( 'rwmb-datetime', RWMB_JS_URL . 'datetime.js', [ 'jquery-ui-datepicker', 'jquery-ui-timepicker-i18n', 'underscore', 'jquery-ui-button', 'jquery-ui-timepicker-slider', 'rwmb' ], RWMB_VER, true );\n\t\twp_register_script( 'rwmb-date', RWMB_JS_URL . 'date.js', [ 'jquery-ui-datepicker', 'underscore', 'rwmb' ], RWMB_VER, true );\n\t\twp_register_script( 'rwmb-time', RWMB_JS_URL . 'time.js', [ 'jquery-ui-timepicker-i18n', 'jquery-ui-button', 'jquery-ui-timepicker-slider', 'rwmb' ], RWMB_VER, true );\n\n\t\t$handles      = [ 'datetime', 'time' ];\n\t\t$locale       = str_replace( '_', '-', get_user_locale() );\n\t\t$locale_short = substr( $locale, 0, 2 );\n\t\t$data         = [\n\t\t\t'locale'      => $locale,\n\t\t\t'localeShort' => $locale_short,\n\t\t];\n\t\tforeach ( $handles as $handle ) {\n\t\t\tRWMB_Helpers_Field::localize_script_once( \"rwmb-$handle\", 'RWMB_' . ucfirst( $handle ), $data );\n\t\t}\n\t}\n\n\t/**\n\t * Enqueue scripts and styles.\n\t */\n\tpublic static function admin_enqueue_scripts() {\n\t\tself::register_assets();\n\t\twp_enqueue_style( 'jquery-ui-timepicker' );\n\t\twp_enqueue_script( 'rwmb-datetime' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  The field meta value.\n\t * @param array $field The field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$output = '';\n\n\t\tif ( $field['timestamp'] ) {\n\t\t\t$name      = $field['field_name'];\n\t\t\t$field     = wp_parse_args( [ 'field_name' => $name . '[formatted]' ], $field );\n\t\t\t$timestamp = $meta['timestamp'] ?? 0;\n\t\t\t$output   .= sprintf(\n\t\t\t\t'<input type=\"hidden\" name=\"%s\" class=\"rwmb-datetime-timestamp\" value=\"%s\">',\n\t\t\t\tesc_attr( $name . '[timestamp]' ),\n\t\t\t\t(int) $timestamp\n\t\t\t);\n\n\t\t\t$meta = $meta['formatted'] ?? '';\n\t\t}\n\n\t\t$output .= parent::html( $meta, $field );\n\n\t\tif ( $field['inline'] ) {\n\t\t\t$output .= '<div class=\"rwmb-datetime-inline\"></div>';\n\t\t}\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Calculates the timestamp from the datetime string and returns it if $field['timestamp'] is set or the datetime string if not.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return string|int\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\tif ( $field['timestamp'] ) {\n\t\t\tif ( is_array( $new ) ) {\n\t\t\t\treturn $new['timestamp'];\n\t\t\t}\n\t\t\tif ( ! is_numeric( $new ) ) {\n\t\t\t\treturn strtotime( $new );\n\t\t\t}\n\t\t\treturn $new;\n\t\t}\n\n\t\tif ( $field['save_format'] ) {\n\t\t\t// Fix 'c' and 'r' formats not containing WordPress timezone.\n\t\t\t$timezone = in_array( $field['save_format'], [ 'c', 'r' ], true ) ? wp_timezone() : null;\n\t\t\t$date     = DateTimeImmutable::createFromFormat( $field['php_format'], $new, $timezone );\n\t\t\treturn $date === false ? $new : $date->format( $field['save_format'] );\n\t\t}\n\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Get meta value.\n\t *\n\t * @param int   $post_id The post ID.\n\t * @param bool  $saved   Whether the meta box is saved at least once.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function meta( $post_id, $saved, $field ) {\n\t\t$meta = parent::meta( $post_id, $saved, $field );\n\n\t\tif ( $field['timestamp'] ) {\n\t\t\treturn Arr::map( $meta, __CLASS__ . '::from_timestamp', $field );\n\t\t}\n\n\t\tif ( $field['save_format'] && $meta ) {\n\t\t\treturn Arr::map( $meta, __CLASS__ . '::from_save_format', $field );\n\t\t}\n\n\t\treturn $meta;\n\t}\n\n\t/**\n\t * Format meta value if set 'timestamp'.\n\t */\n\tpublic static function from_timestamp( $meta, array $field ): array {\n\t\treturn [\n\t\t\t'timestamp' => $meta ?: null,\n\t\t\t'formatted' => $meta ? gmdate( $field['php_format'], intval( $meta ) ) : '',\n\t\t];\n\t}\n\n\t/**\n\t * Transform meta value from save format to the JS format.\n\t */\n\tpublic static function from_save_format( $meta, array $field ): string {\n\t\t$formats = array_merge(\n\t\t\t[\n\t\t\t\t$field['save_format'] => $field['save_format'],\n\t\t\t],\n\t\t\t[\n\t\t\t\t'c' => DateTimeInterface::ATOM,\n\t\t\t\t'r' => DateTimeInterface::RFC2822,\n\t\t\t]\n\t\t);\n\t\t$format  = $formats[ $field['save_format'] ];\n\t\t$date    = DateTimeImmutable::createFromFormat( $format, (string) $meta );\n\t\treturn false === $date ? (string) $meta : $date->format( $field['php_format'] );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field The field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'timestamp'    => false,\n\t\t\t'inline'       => false,\n\t\t\t'js_options'   => [],\n\t\t\t'save_format'  => '',\n\t\t\t'autocomplete' => 'off',\n\t\t] );\n\n\t\t// Deprecate 'format', but keep it for backward compatible.\n\t\t// Use 'js_options' instead.\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'timeFormat'       => 'HH:mm',\n\t\t\t'separator'        => ' ',\n\t\t\t'dateFormat'       => $field['format'] ?? 'yy-mm-dd',\n\t\t\t'showButtonPanel'  => true,\n\t\t\t'changeYear'       => true,\n\t\t\t'yearRange'        => '-100:+100',\n\t\t\t'changeMonth'      => true,\n\t\t\t'oneLine'          => true,\n\t\t\t'stepMinute'       => 5,\n\t\t\t'controlType'      => 'select', // select or slider\n\t\t\t'addSliderAccess'  => true,\n\t\t\t'sliderAccessArgs' => [\n\t\t\t\t'touchonly' => true, // To show sliderAccess only on touch devices\n\t\t\t],\n\t\t] );\n\n\t\tif ( $field['inline'] ) {\n\t\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [ 'altFieldTimeOnly' => false ] );\n\t\t}\n\n\t\t$field['php_format'] = static::get_php_format( $field['js_options'] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field The field parameters.\n\t * @param mixed $value The meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes         = parent::get_attributes( $field, $value );\n\t\t$attributes         = wp_parse_args( $attributes, [ 'data-options' => wp_json_encode( $field['js_options'] ) ] );\n\t\t$attributes['type'] = 'text';\n\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Returns a date() compatible format string from the JavaScript format.\n\t * @link http://www.php.net/manual/en/function.date.php\n\t */\n\tprotected static function get_php_format( array $js_options ): string {\n\t\treturn strtr( $js_options['dateFormat'], self::$date_formats )\n\t\t. $js_options['separator']\n\t\t. strtr( $js_options['timeFormat'], self::$time_formats );\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\tif ( $field['timestamp'] ) {\n\t\t\t$value = self::from_timestamp( $value, $field );\n\t\t} else {\n\t\t\t$value = [\n\t\t\t\t'timestamp' => strtotime( $value ),\n\t\t\t\t'formatted' => $value,\n\t\t\t];\n\t\t}\n\t\treturn empty( $args['format'] ) ? $value['formatted'] : gmdate( $args['format'], $value['timestamp'] );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/divider.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The divider field which displays a simple horizontal line.\n */\nclass RWMB_Divider_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-divider', RWMB_CSS_URL . 'divider.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-divider', 'path', RWMB_CSS_DIR . 'divider.css' );\n\t}\n\n\tprotected static function begin_html( array $field ): string {\n\t\t$attributes = empty( $field['id'] ) ? '' : \" id='{$field['id']}'\";\n\t\treturn \"<hr$attributes>\";\n\t}\n\n\tpublic static function end_html( array $field ): string {\n\t\treturn '';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/fieldset-text.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The text fieldset field, which allows users to enter content for a list of text fields.\n */\nclass RWMB_Fieldset_Text_Field extends RWMB_Input_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-fieldset-text', RWMB_CSS_URL . 'fieldset-text.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-fieldset-text', 'path', RWMB_CSS_DIR . 'fieldset-text.css' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$html = [];\n\t\t$tpl  = '<p><label>%s</label> %s</p>';\n\n\t\tif ( ! is_array( $field['options'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tforeach ( $field['options'] as $key => $label ) {\n\t\t\t$value                       = $meta[ $key ] ?? '';\n\t\t\t$field['attributes']['name'] = $field['field_name'] . \"[{$key}]\";\n\t\t\t$html[]                      = sprintf( $tpl, $label, parent::html( $value, $field ) );\n\t\t}\n\n\t\t$out = '<fieldset>' . ( $field['desc'] ? '<legend>' . $field['desc'] . '</legend>' : '' ) . implode( ' ', $html ) . '</fieldset>';\n\n\t\treturn $out;\n\t}\n\n\tprotected static function input_description( array $field ): string {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field                       = parent::normalize( $field );\n\t\t$field['multiple']           = false;\n\t\t$field['attributes']['id']   = false;\n\t\t$field['attributes']['type'] = 'text';\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Format value for the helper functions.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_value( $field, $value, $args, $post_id ) {\n\t\t$output = '<table><thead><tr>';\n\t\tforeach ( $field['options'] as $label ) {\n\t\t\t$output .= \"<th>$label</th>\";\n\t\t}\n\t\t$output .= '</tr></thead></tbody>';\n\n\t\tif ( ! $field['clone'] ) {\n\t\t\t$output .= self::format_single_value( $field, $value, $args, $post_id );\n\t\t} else {\n\t\t\tforeach ( $value as $subvalue ) {\n\t\t\t\t$output .= self::format_single_value( $field, $subvalue, $args, $post_id );\n\t\t\t}\n\t\t}\n\t\t$output .= '</tbody></table>';\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param array    $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t$output = '<tr>';\n\t\tforeach ( $value as $subvalue ) {\n\t\t\t$output .= \"<td>$subvalue</td>\";\n\t\t}\n\t\t$output .= '</tr>';\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Since we're using an array of text fields, we need to check if all of them are empty.\n\t * Otherwise, there is no way to know if the field is empty or not.\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$all_empty = empty( array_filter( (array) $new ) );\n\n\t\treturn $all_empty ? [] : $new;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/file-input.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The file input field which allows users to enter a file URL or select it from the Media Library.\n */\nclass RWMB_File_Input_Field extends RWMB_Input_Field {\n\t/**\n\t * Enqueue scripts and styles.\n\t */\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_media();\n\t\twp_enqueue_style( 'rwmb-file-input', RWMB_CSS_URL . 'file-input.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-file-input', 'path', RWMB_CSS_DIR . 'file-input.css' );\n\t\twp_enqueue_script( 'rwmb-file-input', RWMB_JS_URL . 'file-input.js', [ 'jquery' ], RWMB_VER, true );\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-file-input', 'rwmbFileInput', [\n\t\t\t'frameTitle' => esc_html__( 'Select File', 'meta-box' ),\n\t\t] );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = self::get_attributes( $field, $meta );\n\t\t$meta_array = explode( '.', $meta );\n\t\t$file_ext   = strtolower( end( $meta_array ) );\n\t\t$extensions = [ 'jpeg', 'jpg', 'png', 'gif' ];\n\t\treturn sprintf(\n\t\t\t'<div class=\"rwmb-file-input-image %s\">\n\t\t\t\t<img src=\"%s\">\n\t\t\t</div>\n\t\t\t<div class=\"rwmb-file-input-inner\">\n\t\t\t\t<input %s>\n\t\t\t\t<a href=\"#\" class=\"rwmb-file-input-select button\">%s</a>\n\t\t\t\t<a href=\"#\" class=\"rwmb-file-input-remove button %s\">%s</a>\n\t\t\t</div>',\n\t\t\tin_array( $file_ext, $extensions, true ) ? '' : 'rwmb-file-input-hidden',\n\t\t\t$meta,\n\t\t\tself::render_attributes( $attributes ),\n\t\t\tesc_html__( 'Select', 'meta-box' ),\n\t\t\t$meta ? '' : 'hidden',\n\t\t\tesc_html__( 'Remove', 'meta-box' )\n\t\t);\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes         = parent::get_attributes( $field, $value );\n\t\t$attributes['type'] = 'text';\n\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/file-upload.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The file upload field which allows users to drag and drop files to upload.\n */\nclass RWMB_File_Upload_Field extends RWMB_Media_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\twp_enqueue_style( 'rwmb-upload', RWMB_CSS_URL . 'upload.css', [ 'rwmb-media' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-upload', 'path', RWMB_CSS_DIR . 'upload.css' );\n\t\twp_enqueue_script( 'rwmb-file-upload', RWMB_JS_URL . 'file-upload.js', [ 'rwmb-media' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'max_file_size' => 0,\n\t\t] );\n\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'maxFileSize' => $field['max_file_size'],\n\t\t] );\n\n\t\treturn $field;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/file.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The file upload file which allows users to upload files via the default HTML <input type=\"file\">.\n */\nclass RWMB_File_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-file', RWMB_CSS_URL . 'file.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-file', 'path', RWMB_CSS_DIR . 'file.css' );\n\t\twp_enqueue_script( 'rwmb-file', RWMB_JS_URL . 'file.js', [ 'jquery-ui-sortable' ], RWMB_VER, true );\n\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-file', 'rwmbFile', [\n\t\t\t// Translators: %d is the number of files in singular form.\n\t\t\t'maxFileUploadsSingle' => __( 'You may only upload maximum %d file', 'meta-box' ),\n\t\t\t// Translators: %d is the number of files in plural form.\n\t\t\t'maxFileUploadsPlural' => __( 'You may only upload maximum %d files', 'meta-box' ),\n\t\t] );\n\t}\n\n\tpublic static function add_actions() {\n\t\tadd_action( 'post_edit_form_tag', [ __CLASS__, 'post_edit_form_tag' ] );\n\t\tadd_action( 'wp_ajax_rwmb_delete_file', [ __CLASS__, 'ajax_delete_file' ] );\n\t}\n\n\tpublic static function post_edit_form_tag() {\n\t\techo ' enctype=\"multipart/form-data\"';\n\t}\n\n\tpublic static function ajax_delete_file() {\n\t\t$request  = rwmb_request();\n\t\t$field_id = (string) $request->filter_post( 'field_id' );\n\t\t$type     = str_contains( $request->filter_post( 'field_name' ), '[' ) ? 'child' : 'top';\n\t\tcheck_ajax_referer( \"rwmb-delete-file_{$field_id}\" );\n\n\t\tif ( 'child' === $type ) {\n\t\t\t$field_group = explode( '[', $request->filter_post( 'field_name' ) );\n\t\t\t$field_id    = $field_group[0]; // This is top parent field_id.\n\t\t}\n\t\t// Make sure the file to delete is in the custom field.\n\t\t$attachment  = $request->post( 'attachment_id' );\n\t\t$object_id   = $request->filter_post( 'object_id' );\n\t\t$object_type = (string) $request->filter_post( 'object_type' );\n\t\t$field       = rwmb_get_field_settings( $field_id, [ 'object_type' => $object_type ], $object_id );\n\t\t$field_value = self::raw_meta( $object_id, $field );\n\n\t\tif ( ! self::in_array_r( $attachment, $field_value ) ) {\n\t\t\twp_send_json_error( __( 'Error: Invalid file', 'meta-box' ) );\n\t\t}\n\t\t// Delete the file.\n\t\tif ( is_numeric( $attachment ) ) {\n\t\t\t$result = wp_delete_attachment( $attachment );\n\t\t} else {\n\t\t\t$path   = str_replace( home_url( '/' ), trailingslashit( ABSPATH ), $attachment );\n\t\t\t$result = unlink( $path ); // phpcs:ignore WordPress.WP.AlternativeFunctions.unlink_unlink\n\t\t}\n\n\t\tif ( $result ) {\n\t\t\twp_send_json_success();\n\t\t}\n\t\twp_send_json_error( __( 'Error: Cannot delete file', 'meta-box' ) );\n\t}\n\n\t/**\n\t * Recursively search needle in haystack\n\t */\n\tprotected static function in_array_r( $needle, $haystack, $strict = false ): bool {\n\t\tforeach ( $haystack as $item ) {\n\t\t\t// phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual\n\t\t\tif ( ( $strict ? $item === $needle : $item == $needle ) || ( is_array( $item ) && self::in_array_r( $needle, $item, $strict ) ) ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$meta      = array_filter( (array) $meta );\n\t\t$i18n_more = apply_filters( 'rwmb_file_add_string', _x( '+ Add new file', 'file upload', 'meta-box' ), $field );\n\t\t$html      = self::get_uploaded_files( $meta, $field );\n\n\t\t// Show form upload.\n\t\t$attributes          = self::get_attributes( $field, $meta );\n\t\t$attributes['type']  = 'file';\n\t\t$attributes['name']  = \"{$field['input_name']}[]\";\n\t\t$attributes['class'] = 'rwmb-file-input';\n\n\t\t/*\n\t\t * Use JavaScript to toggle 'required' attribute, because:\n\t\t * - Field might already have value (uploaded files).\n\t\t * - Be able to detect when uploading multiple files.\n\t\t */\n\t\tif ( $attributes['required'] ) {\n\t\t\t$attributes['data-required'] = 1;\n\t\t\t$attributes['required']      = false;\n\t\t}\n\n\t\t// Upload new files.\n\t\t$html .= sprintf(\n\t\t\t'<div class=\"rwmb-file-new\"><input %s>',\n\t\t\tself::render_attributes( $attributes )\n\t\t);\n\t\tif ( 1 !== $field['max_file_uploads'] ) {\n\t\t\t$html .= sprintf(\n\t\t\t\t'<a class=\"rwmb-file-add\" href=\"#\"><strong>%s</strong></a>',\n\t\t\t\t$i18n_more\n\t\t\t);\n\t\t}\n\t\t$html .= '</div>';\n\n\t\t$html .= sprintf(\n\t\t\t'<input type=\"hidden\" class=\"rwmb-file-index\" name=\"%s\" value=\"%s\">',\n\t\t\t$field['index_name'],\n\t\t\t$field['input_name']\n\t\t);\n\n\t\treturn $html;\n\t}\n\n\t/**\n\t * Get HTML for uploaded files.\n\t *\n\t * @param array $files List of uploaded files.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tprotected static function get_uploaded_files( $files, $field ) {\n\t\t$delete_nonce = wp_create_nonce( \"rwmb-delete-file_{$field['id']}\" );\n\t\t$output       = '';\n\n\t\tforeach ( (array) $files as $k => $file ) {\n\t\t\t// Ignore deleted files (if users accidentally deleted files or uses `force_delete` without saving post).\n\t\t\tif ( get_attached_file( $file ) || $field['upload_dir'] ) {\n\t\t\t\t$output .= static::file_html( $file, $k, $field );\n\t\t\t}\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t'<ul class=\"rwmb-files\" data-field_id=\"%s\" data-field_name=\"%s\" data-delete_nonce=\"%s\" data-force_delete=\"%s\" data-max_file_uploads=\"%s\" data-mime_type=\"%s\">%s</ul>',\n\t\t\t$field['id'],\n\t\t\t$field['field_name'],\n\t\t\t$delete_nonce,\n\t\t\t$field['force_delete'] ? 1 : 0,\n\t\t\t$field['max_file_uploads'],\n\t\t\t$field['mime_type'],\n\t\t\t$output\n\t\t);\n\t}\n\n\t/**\n\t * Get HTML for uploaded file.\n\t *\n\t * @param int   $file  Attachment (file) ID.\n\t * @param int   $index File index.\n\t * @param array $field Field data.\n\t * @return string\n\t */\n\tprotected static function file_html( $file, $index, $field ) {\n\t\t$i18n_delete = apply_filters( 'rwmb_file_delete_string', _x( 'Delete', 'file upload', 'meta-box' ) );\n\t\t$i18n_edit   = apply_filters( 'rwmb_file_edit_string', _x( 'Edit', 'file upload', 'meta-box' ) );\n\t\t$attributes  = self::get_attributes( $field, $file );\n\n\t\tif ( ! $file ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif ( $field['upload_dir'] ) {\n\t\t\t$data = self::file_info_custom_dir( $file, $field );\n\t\t} else {\n\t\t\t$data      = [\n\t\t\t\t'icon'      => wp_get_attachment_image( $file, [ 48, 64 ], true ),\n\t\t\t\t'name'      => basename( get_attached_file( $file ) ),\n\t\t\t\t'url'       => wp_get_attachment_url( $file ),\n\t\t\t\t'title'     => get_the_title( $file ),\n\t\t\t\t'edit_link' => '',\n\t\t\t];\n\t\t\t$edit_link = get_edit_post_link( $file );\n\t\t\tif ( $edit_link ) {\n\t\t\t\t$data['edit_link'] = sprintf( '<a href=\"%s\" class=\"rwmb-file-edit\" target=\"_blank\">%s</a>', $edit_link, $i18n_edit );\n\t\t\t}\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t'<li class=\"rwmb-file\">\n\t\t\t\t<div class=\"rwmb-file-icon\">%s</div>\n\t\t\t\t<div class=\"rwmb-file-info\">\n\t\t\t\t\t<a href=\"%s\" target=\"_blank\" class=\"rwmb-file-title\">%s</a>\n\t\t\t\t\t<div class=\"rwmb-file-name\">%s</div>\n\t\t\t\t\t<div class=\"rwmb-file-actions\">\n\t\t\t\t\t\t%s\n\t\t\t\t\t\t<a href=\"#\" class=\"rwmb-file-delete\" data-attachment_id=\"%s\">%s</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<input type=\"hidden\" name=\"%s[%s]\" value=\"%s\">\n\t\t\t</li>',\n\t\t\t$data['icon'],\n\t\t\tesc_url( $data['url'] ),\n\t\t\tesc_html( $data['title'] ),\n\t\t\tesc_html( $data['name'] ),\n\t\t\t$data['edit_link'],\n\t\t\tesc_attr( $file ),\n\t\t\tesc_html( $i18n_delete ),\n\t\t\tesc_attr( $attributes['name'] ),\n\t\t\tesc_attr( $index ),\n\t\t\tesc_attr( $file )\n\t\t);\n\t}\n\n\tprotected static function file_info_custom_dir( string $file, array $field ): array {\n\t\t$path     = wp_normalize_path( trailingslashit( $field['upload_dir'] ) . basename( $file ) );\n\t\t$ext      = pathinfo( $path, PATHINFO_EXTENSION );\n\t\t$icon_url = wp_mime_type_icon( wp_ext2type( $ext ) );\n\t\t$data     = [\n\t\t\t'icon'      => '<img width=\"48\" height=\"64\" src=\"' . esc_url( $icon_url ) . '\" alt=\"\">',\n\t\t\t'name'      => basename( $path ),\n\t\t\t'path'      => $path,\n\t\t\t'url'       => $file,\n\t\t\t'title'     => preg_replace( '/\\.[^.]+$/', '', basename( $path ) ),\n\t\t\t'edit_link' => '',\n\t\t];\n\t\treturn $data;\n\t}\n\n\t/**\n\t * Get meta values to save.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return array|mixed\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$input = $field['index'] ?? $field['input_name'];\n\n\t\t// @codingStandardsIgnoreLine\n\t\tif ( empty( $input ) || empty( $_FILES[ $input ] ) ) {\n\t\t\treturn $new;\n\t\t}\n\n\t\t$new = array_filter( (array) $new );\n\n\t\t$count = self::transform( $input );\n\t\tfor ( $i = 0; $i < $count; $i++ ) {\n\t\t\t$attachment = self::handle_upload( \"{$input}_{$i}\", $post_id, $field );\n\t\t\tif ( $attachment && ! is_wp_error( $attachment ) ) {\n\t\t\t\t$new[] = $attachment;\n\t\t\t}\n\t\t}\n\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Get meta values to save for cloneable fields.\n\t *\n\t * @param array $new         The submitted meta value.\n\t * @param array $old         The existing meta value.\n\t * @param int   $object_id   The object ID.\n\t * @param array $field       The field settings.\n\t * @param array $data_source Data source. Either $_POST or custom array. Used in group to get uploaded files.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function clone_value( $new, $old, $object_id, $field, $data_source = null ) {\n\t\tif ( ! $data_source ) {\n\t\t\t// @codingStandardsIgnoreLine\n\t\t\t$data_source = $_POST;\n\t\t}\n\n\t\t$indexes = $data_source[ \"_index_{$field['id']}\" ] ?? [];\n\t\tforeach ( $indexes as $key => $index ) {\n\t\t\t$field['index'] = $index;\n\n\t\t\t$old_value   = $old[ $key ] ?? [];\n\t\t\t$value       = $new[ $key ] ?? [];\n\t\t\t$value       = self::value( $value, $old_value, $object_id, $field );\n\t\t\t$new[ $key ] = self::filter( 'sanitize', $value, $field, $old_value, $object_id );\n\t\t}\n\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Handle file upload.\n\t * Consider upload to Media Library or custom folder.\n\t *\n\t * @param string $file_id File ID in $_FILES when uploading.\n\t * @param int    $post_id Post ID.\n\t * @param array  $field   Field settings.\n\t *\n\t * @return \\WP_Error|int|string WP_Error if has error, attachment ID if upload in Media Library, URL to file if upload to custom folder.\n\t */\n\tprotected static function handle_upload( $file_id, $post_id, $field ) {\n\t\treturn $field['upload_dir'] ? self::handle_upload_custom_dir( $file_id, $field ) : media_handle_upload( $file_id, $post_id );\n\t}\n\n\t/**\n\t * Transform $_FILES from $_FILES['field']['key']['index'] to $_FILES['field_index']['key'].\n\t *\n\t * @param string $input_name The field input name.\n\t *\n\t * @return int The number of uploaded files.\n\t */\n\tprotected static function transform( $input_name ): int {\n\t\t// phpcs:disable\n\t\tforeach ( $_FILES[ $input_name ] as $key => $list ) {\n\t\t\tforeach ( $list as $index => $value ) {\n\t\t\t\t$file_key = sanitize_text_field( \"{$input_name}_{$index}\" );\n\t\t\t\tif ( ! isset( $_FILES[ $file_key ] ) ) {\n\t\t\t\t\t$_FILES[ $file_key ] = [];\n\t\t\t\t}\n\t\t\t\t$_FILES[ $file_key ][ $key ] = $value;\n\t\t\t}\n\t\t}\n\n\t\treturn count( $_FILES[ $input_name ]['name'] );\n\t\t// phpcs:enable\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'std'                      => [],\n\t\t\t'force_delete'             => false,\n\t\t\t'max_file_uploads'         => 0,\n\t\t\t'mime_type'                => '',\n\t\t\t'upload_dir'               => '',\n\t\t\t'unique_filename_callback' => null,\n\t\t] );\n\n\t\t$field['multiple']   = true;\n\t\t$field['input_name'] = \"_file_{$field['id']}\";\n\t\t$field['index_name'] = \"_index_{$field['id']}\";\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the field value. Return meaningful info of the files.\n\t *\n\t * @param  array    $field   Field parameters.\n\t * @param  array    $args    Not used for this field.\n\t * @param  int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return mixed Full info of uploaded files\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\t$value = parent::get_value( $field, $args, $post_id );\n\t\tif ( ! $field['clone'] ) {\n\t\t\t$value = static::files_info( $field, $value, $args );\n\t\t} else {\n\t\t\t$return = [];\n\t\t\tforeach ( $value as $subvalue ) {\n\t\t\t\t$return[] = static::files_info( $field, $subvalue, $args );\n\t\t\t}\n\t\t\t$value = $return;\n\t\t}\n\t\tif ( isset( $args['limit'] ) ) {\n\t\t\t$value = array_slice( $value, 0, intval( $args['limit'] ) );\n\t\t}\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Get uploaded files information.\n\t *\n\t * @param array $field Field parameters.\n\t * @param array $files Files IDs.\n\t * @param array $args  Additional arguments (for image size).\n\t * @return array\n\t */\n\tpublic static function files_info( $field, $files, $args ) {\n\t\t$return = [];\n\t\tforeach ( (array) $files as $file ) {\n\t\t\t$info = static::file_info( $file, $args, $field );\n\t\t\tif ( $info ) {\n\t\t\t\t$return[ $file ] = $info;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/**\n\t * Get uploaded file information.\n\t *\n\t * @param int   $file  Attachment file ID (post ID). Required.\n\t * @param array $args  Array of arguments (for size).\n\t * @param array $field Field settings.\n\t *\n\t * @return array|bool False if file not found. Array of (id, name, path, url) on success.\n\t */\n\tpublic static function file_info( $file, $args = [], $field = [] ) {\n\t\tif ( ! empty( $field['upload_dir'] ) ) {\n\t\t\treturn self::file_info_custom_dir( $file, $field );\n\t\t}\n\n\t\t$path = get_attached_file( $file );\n\t\tif ( ! $path ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn wp_parse_args(\n\t\t\t[\n\t\t\t\t'ID'    => $file,\n\t\t\t\t'name'  => basename( $path ),\n\t\t\t\t'path'  => $path,\n\t\t\t\t'url'   => wp_get_attachment_url( $file ),\n\t\t\t\t'title' => get_the_title( $file ),\n\t\t\t],\n\t\t\twp_get_attachment_metadata( $file )\n\t\t);\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param array    $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn sprintf( '<a href=\"%s\" target=\"_blank\">%s</a>', esc_url( $value['url'] ), esc_html( $value['title'] ) );\n\t}\n\n\t/**\n\t * Handle upload for files in custom directory.\n\t *\n\t * @param string $file_id File ID in $_FILES when uploading.\n\t * @param array  $field   Field settings.\n\t *\n\t * @return string URL to uploaded file.\n\t */\n\tpublic static function handle_upload_custom_dir( $file_id, $field ) {\n\t\t// @codingStandardsIgnoreStart\n\t\tif ( empty( $_FILES[ $file_id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\t$file = $_FILES[ $file_id ];\n\t\t// @codingStandardsIgnoreEnd\n\n\t\t// Use a closure to filter upload directory. Requires PHP >= 5.3.0.\n\t\t$filter_upload_dir = function ( $uploads ) use ( $field ) {\n\t\t\t$uploads['path']    = $field['upload_dir'];\n\t\t\t$uploads['url']     = self::convert_path_to_url( $field['upload_dir'] );\n\t\t\t$uploads['subdir']  = '';\n\t\t\t$uploads['basedir'] = $field['upload_dir'];\n\n\t\t\treturn $uploads;\n\t\t};\n\n\t\t// Make sure upload dir is inside WordPress.\n\t\t$upload_dir = wp_normalize_path( untrailingslashit( $field['upload_dir'] ) );\n\t\t$root       = wp_normalize_path( untrailingslashit( ABSPATH ) );\n\t\tif ( ! str_starts_with( $upload_dir, $root ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Let WordPress handle upload to the custom directory.\n\t\tadd_filter( 'upload_dir', $filter_upload_dir );\n\t\t$overrides = [\n\t\t\t'test_form'                => false,\n\t\t\t'unique_filename_callback' => $field['unique_filename_callback'],\n\t\t];\n\t\t$file_info = wp_handle_upload( $file, $overrides );\n\t\tremove_filter( 'upload_dir', $filter_upload_dir );\n\n\t\treturn empty( $file_info['url'] ) ? null : $file_info['url'];\n\t}\n\n\tpublic static function convert_path_to_url( string $path ): string {\n\t\t$path          = wp_normalize_path( untrailingslashit( $path ) );\n\t\t$root          = wp_normalize_path( untrailingslashit( ABSPATH ) );\n\t\t$relative_path = str_replace( $root, '', $path );\n\n\t\treturn home_url( $relative_path );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/heading.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The heading field which displays a simple heading text.\n */\nclass RWMB_Heading_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-heading', RWMB_CSS_URL . 'heading.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-heading', 'path', RWMB_CSS_DIR . 'heading.css' );\n\t}\n\n\tprotected static function begin_html( array $field ): string {\n\t\t$attributes = empty( $field['id'] ) ? '' : \" id='{$field['id']}'\";\n\t\treturn sprintf( '<h4%s>%s</h4>', $attributes, $field['name'] );\n\t}\n\n\tprotected static function end_html( array $field ): string {\n\t\treturn self::input_description( $field );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/icon.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The icon field.\n */\nclass RWMB_Icon_Field extends RWMB_Select_Advanced_Field {\n\tconst CACHE_GROUP = 'meta-box-icon-field';\n\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\n\t\twp_enqueue_style( 'rwmb-icon', RWMB_CSS_URL . 'icon.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-icon', 'path', RWMB_CSS_DIR . 'icon.css' );\n\t\twp_enqueue_script( 'rwmb-icon', RWMB_JS_URL . 'icon.js', [ 'rwmb-select2', 'rwmb-select', 'underscore' ], RWMB_VER, true );\n\n\t\t$args  = func_get_args();\n\t\t$field = $args[0];\n\t\tself::enqueue_icon_font_style( $field );\n\t}\n\n\tprivate static function enqueue_icon_font_style( array $field ): void {\n\t\tif ( is_string( $field['icon_css'] ) ) {\n\t\t\t$handle = md5( $field['icon_css'] );\n\t\t\twp_enqueue_style( $handle, $field['icon_css'], [], RWMB_VER );\n\t\t} elseif ( is_callable( $field['icon_css'] ) ) {\n\t\t\t$field['icon_css']();\n\t\t}\n\t}\n\n\tprivate static function get_icons( array $field ): array {\n\t\t// Get from cache to prevent reading large files.\n\t\t$params = [\n\t\t\t'icon_file' => $field['icon_file'],\n\t\t\t'icon_dir'  => $field['icon_dir'],\n\t\t\t'icon_css'  => is_string( $field['icon_css'] ) ? $field['icon_css'] : '',\n\t\t];\n\t\t// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize\n\t\t$cache_key = md5( serialize( $params ) ) . '-icons';\n\t\t$icons     = wp_cache_get( $cache_key, self::CACHE_GROUP );\n\t\tif ( false !== $icons ) {\n\t\t\treturn $icons;\n\t\t}\n\n\t\t$data = self::parse_icon_data( $field );\n\n\t\t// Reformat icons.\n\t\t$icons = [];\n\t\tforeach ( $data as $key => $icon ) {\n\t\t\t$icon = self::normalize_icon( $field, $key, $icon );\n\n\t\t\tif ( is_numeric( key( $icon ) ) ) {\n\t\t\t\t$icons = array_merge( $icons, $icon );\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t$icons[] = $icon;\n\t\t}\n\n\t\t// Cache the result.\n\t\twp_cache_set( $cache_key, $icons, self::CACHE_GROUP );\n\t\treturn $icons;\n\t}\n\n\tprivate static function parse_icon_data( array $field ): array {\n\t\t$keys = [\n\t\t\t'icon_file',\n\t\t\t'icon_css',\n\t\t\t'icon_dir',\n\t\t];\n\t\tforeach ( $keys as $key ) {\n\t\t\tif ( ! empty( $field[ $key ] ) && is_string( $field[ $key ] ) ) {\n\t\t\t\treturn call_user_func( [ __CLASS__, \"parse_$key\" ], $field );\n\t\t\t}\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tprivate static function parse_icon_file( array $field ): array {\n\t\tif ( ! file_exists( $field['icon_file'] ) ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents\n\t\t$data    = (string) file_get_contents( $field['icon_file'] );\n\t\t$decoded = json_decode( $data, true );\n\n\t\t// JSON file.\n\t\tif ( JSON_ERROR_NONE === json_last_error() ) {\n\t\t\treturn $decoded;\n\t\t}\n\n\t\t// Text file: each icon on a line.\n\t\treturn array_map( 'trim', explode( \"\\n\", $data ) );\n\t}\n\n\tprivate static function parse_icon_css( array $field ): array {\n\t\t// Parse local CSS file only.\n\t\t$file = self::url_to_path( $field['icon_css'] );\n\t\tif ( ! file_exists( $file ) ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents\n\t\t$css = (string) file_get_contents( $file );\n\n\t\tpreg_match_all( '/\\.([^\\s:]+):before/', $css, $matches );\n\n\t\tif ( empty( $matches[1] ) ) {\n\t\t\tpreg_match_all( '/\\.([^\\s:]+)/', $css, $matches );\n\t\t}\n\n\t\treturn $matches[1];\n\t}\n\n\tprivate static function parse_icon_dir( array $field ): array {\n\t\t$dir = $field['icon_dir'];\n\t\tif ( ! is_dir( $dir ) ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t$icons = [];\n\t\t$files = glob( trailingslashit( $dir ) . '*.svg' );\n\n\t\tforeach ( $files as $file ) {\n\t\t\t$filename = substr( basename( $file ), 0, -4 );\n\t\t\t$icons[]  = [\n\t\t\t\t'value' => $filename,\n\t\t\t\t'label' => $filename,\n\t\t\t\t// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents\n\t\t\t\t'svg'   => file_get_contents( $file ),\n\t\t\t];\n\t\t}\n\n\t\treturn $icons;\n\t}\n\n\tprivate static function normalize_icon( array $field, $key, $icon ): array {\n\t\t// Default: Font Awesome Free.\n\t\tif ( $field['icon_set'] === 'font-awesome-free' ) {\n\t\t\t$style = $icon['styles'][0];\n\t\t\treturn [\n\t\t\t\t'value' => \"fa-{$style} fa-{$key}\",\n\t\t\t\t'label' => $icon['label'],\n\t\t\t\t'svg'   => $icon['svg'][ $style ]['raw'],\n\t\t\t];\n\t\t}\n\n\t\t// Font Awesome Pro.\n\t\tif ( $field['icon_set'] === 'font-awesome-pro' ) {\n\t\t\t$icons = [];\n\t\t\tforeach ( $icon['styles'] as $style ) {\n\t\t\t\t$icons[] = [\n\t\t\t\t\t'value' => \"fa-{$style} fa-{$key}\",\n\t\t\t\t\t'label' => \"{$icon[ 'label' ]} ({$style})\",\n\t\t\t\t\t'svg'   => $icon['svg'][ $style ]['raw'],\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn $icons;\n\t\t}\n\n\t\t// JSON file: \"icon-class\": { \"label\": \"Label\", \"svg\": \"<svg...>\" } or from `icon_dir`.\n\t\tif ( is_array( $icon ) ) {\n\t\t\treturn [\n\t\t\t\t'value' => $icon['value'] ?? $key,\n\t\t\t\t'label' => $icon['label'] ?? $key,\n\t\t\t\t'svg'   => $icon['svg'] ?? '',\n\t\t\t];\n\t\t}\n\n\t\t// JSON file: \"icon-class\": \"Label\" or \"icon-class\": \"<svg...>\".\n\t\tif ( is_string( $key ) ) {\n\t\t\t$label = str_contains( $icon, '<svg' ) ? $key : $icon;\n\t\t\t$svg   = str_contains( $icon, '<svg' ) ? $icon : '';\n\t\t\treturn [\n\t\t\t\t'value' => $key,\n\t\t\t\t'label' => $label,\n\t\t\t\t'svg'   => $svg,\n\t\t\t];\n\t\t}\n\n\t\t// Parse classes from CSS.\n\t\tif ( $field['icon_css'] && ! $field['icon_file'] ) {\n\t\t\t$icon = trim( $field['icon_base_class'] . ' ' . $icon );\n\t\t}\n\n\t\t// Text file: each icon on a line.\n\t\treturn [\n\t\t\t'value' => $icon,\n\t\t\t'label' => $icon,\n\t\t\t'svg'   => '',\n\t\t];\n\t}\n\n\tprivate static function get_svg( array $field, string $value ): string {\n\t\t$file = trailingslashit( $field['icon_dir'] ) . $value . '.svg';\n\n\t\t// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents\n\t\treturn file_exists( $file ) ? file_get_contents( $file ) : '';\n\t}\n\n\tprivate static function get_options( array $field ): array {\n\t\t$icons = self::get_icons( $field );\n\n\t\t$options = [];\n\t\tforeach ( $icons as $icon ) {\n\t\t\t$svg = ! $icon['svg'] && $field['icon_dir'] ? self::get_svg( $field, $icon['value'] ) : $icon['svg'];\n\n\t\t\t$options[] = [\n\t\t\t\t'value' => $icon['value'],\n\t\t\t\t'label' => $svg . $icon['label'],\n\t\t\t];\n\t\t}\n\n\t\treturn $options;\n\t}\n\n\t/**\n\t * Normalize field settings.\n\t *\n\t * @param array $field Field settings.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'placeholder'     => __( 'Select an icon', 'meta-box' ),\n\t\t\t'icon_css'        => '',\n\t\t\t'icon_set'        => '',\n\t\t\t'icon_file'       => '',\n\t\t\t'icon_dir'        => '',\n\t\t\t'icon_base_class' => '',\n\t\t] );\n\n\t\t// Ensure absolute paths and URLs.\n\t\t$field['icon_file'] = self::ensure_absolute_path( $field['icon_file'] );\n\t\t$field['icon_dir']  = self::ensure_absolute_path( $field['icon_dir'] );\n\t\tif ( is_string( $field['icon_css'] ) && $field['icon_css'] ) {\n\t\t\t$field['icon_css'] = self::ensure_absolute_url( $field['icon_css'] );\n\t\t}\n\n\t\t// Font Awesome Pro.\n\t\t// phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf\n\t\tif ( $field['icon_set'] === 'font-awesome-pro' ) {\n\n\t\t} elseif ( $field['icon_file'] || $field['icon_dir'] || $field['icon_css'] ) {\n\t\t\t// Custom icon set.\n\t\t\t$field['icon_set'] = 'custom';\n\t\t} else {\n\t\t\t// Font Awesome Free.\n\t\t\t$field['icon_set']  = 'font-awesome-free';\n\t\t\t$field['icon_file'] = RWMB_DIR . 'css/fontawesome/icons.json';\n\t\t}\n\n\t\t$field['options'] = self::get_options( $field );\n\n\t\t$field = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Format value for the helper functions.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t// SVG from file.\n\t\tif ( $field['icon_dir'] ) {\n\t\t\treturn self::get_svg( $field, $value );\n\t\t}\n\n\t\t$icons = self::get_icons( $field );\n\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\t$key = array_search( $value, array_column( $icons, 'value' ) );\n\t\tif ( false === $key ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Embed SVG.\n\t\tif ( $icons[ $key ]['svg'] ) {\n\t\t\treturn $icons[ $key ]['svg'];\n\t\t}\n\n\t\t// Render with class and use css.\n\t\tself::enqueue_icon_font_style( $field );\n\t\treturn sprintf( '<span class=\"%s\"></span>', $value );\n\t}\n\n\tprivate static function url_to_path( string $url ): string {\n\t\treturn str_starts_with( $url, home_url( '/' ) ) ? str_replace( home_url( '/' ), trailingslashit( ABSPATH ), $url ) : '';\n\t}\n\n\tprivate static function ensure_absolute_path( string $path ): string {\n\t\tif ( ! $path || file_exists( $path ) ) {\n\t\t\treturn $path;\n\t\t}\n\n\t\t$root = wp_normalize_path( ABSPATH );\n\t\t$path = wp_normalize_path( $path );\n\n\t\treturn str_starts_with( $path, $root ) ? $path : trailingslashit( $root ) . ltrim( $path, '/' );\n\t}\n\n\tprivate static function ensure_absolute_url( string $url ): string {\n\t\treturn filter_var( $url, FILTER_VALIDATE_URL ) ? $url : home_url( $url );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/image-advanced.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The advanced image upload field which uses WordPress media popup to upload and select images.\n */\nclass RWMB_Image_Advanced_Field extends RWMB_Media_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\tRWMB_Image_Field::admin_enqueue_scripts();\n\t\twp_enqueue_script( 'rwmb-image-advanced', RWMB_JS_URL . 'image-advanced.js', [ 'rwmb-media' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field['mime_type'] = 'image';\n\t\t$field              = wp_parse_args( $field, [\n\t\t\t'image_size' => 'thumbnail',\n\t\t] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'imageSize' => $field['image_size'],\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the field value.\n\t *\n\t * @param array $field   Field parameters.\n\t * @param array $args    Additional arguments.\n\t * @param ?int  $post_id Post ID.\n\t * @return mixed\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\treturn RWMB_Image_Field::get_value( $field, $args, $post_id );\n\t}\n\n\t/**\n\t * Get uploaded file information.\n\t *\n\t * @param int   $file  Attachment image ID (post ID). Required.\n\t * @param array $args  Array of arguments (for size).\n\t * @param array $field Field settings.\n\t *\n\t * @return array|bool False if file not found. Array of image info on success.\n\t */\n\tpublic static function file_info( $file, $args = [], $field = [] ) {\n\t\treturn RWMB_Image_Field::file_info( $file, $args, $field );\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param array    $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn RWMB_Image_Field::format_single_value( $field, $value, $args, $post_id );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/image-select.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The image select field which behaves similar to the radio field but uses images as options.\n */\nclass RWMB_Image_Select_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-image-select', RWMB_CSS_URL . 'image-select.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-image-select', 'path', RWMB_CSS_DIR . 'image-select.css' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$html = [];\n\t\t$meta = (array) $meta;\n\t\tforeach ( $field['options'] as $value => $image ) {\n\t\t\t$attributes = self::get_attributes( $field, $value );\n\t\t\t$html[]     = sprintf(\n\t\t\t\t'<label class=\"rwmb-image-select\"><img src=\"%s\"><input %s%s></label>',\n\t\t\t\t$image,\n\t\t\t\tself::render_attributes( $attributes ),\n\t\t\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\t\t\tchecked( in_array( $value, $meta ), true, false )\n\t\t\t);\n\t\t}\n\n\t\treturn implode( ' ', $html );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field                = parent::normalize( $field );\n\t\t$field['options']     = $field['options'] ?? [];\n\t\t$field['field_name'] .= $field['multiple'] ? '[]' : '';\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes          = parent::get_attributes( $field, $value );\n\t\t$attributes['id']    = false;\n\t\t$attributes['type']  = $field['multiple'] ? 'checkbox' : 'radio';\n\t\t$attributes['value'] = $value;\n\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn $value ? sprintf( '<img src=\"%s\">', esc_url( $field['options'][ $value ] ) ) : '';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/image-upload.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The image upload field which allows users to drag and drop images.\n */\nclass RWMB_Image_Upload_Field extends RWMB_Image_Advanced_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\tRWMB_File_Upload_Field::admin_enqueue_scripts();\n\t\twp_enqueue_script( 'rwmb-image-upload', RWMB_JS_URL . 'image-upload.js', [ 'rwmb-file-upload', 'rwmb-image-advanced' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\treturn RWMB_File_Upload_Field::normalize( $field );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/image.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The image field which uploads images via HTML <input type=\"file\">.\n */\nclass RWMB_Image_Field extends RWMB_File_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\twp_enqueue_media();\n\t\twp_enqueue_style( 'rwmb-image', RWMB_CSS_URL . 'image.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-image', 'path', RWMB_CSS_DIR . 'image.css' );\n\t}\n\n\t/**\n\t * Get HTML for uploaded file.\n\t *\n\t * @param int   $file  Attachment (file) ID.\n\t * @param int   $index File index.\n\t * @param array $field Field data.\n\t *\n\t * @return string\n\t */\n\tprotected static function file_html( $file, $index, $field ) {\n\t\t$attributes = self::get_attributes( $field, $file );\n\n\t\t$edit_link = get_edit_post_link( $file );\n\t\tif ( $edit_link ) {\n\t\t\t$edit_link = sprintf( '<a href=\"%s\" class=\"rwmb-image-edit\" target=\"_blank\"><span class=\"dashicons dashicons-edit\"></span></a>', $edit_link );\n\t\t}\n\n\t\t$attachment_image = is_numeric( $file ) ? wp_get_attachment_image( $file, $field['image_size'] ) : '<img width=\"150\" height=\"150\" src=\"' . esc_url( $file ) . '\" alt=\"\" />';\n\n\t\treturn sprintf(\n\t\t\t'<li class=\"rwmb-image-item\">\n\t\t\t\t<div class=\"rwmb-file-icon\">%s</div>\n\t\t\t\t<div class=\"rwmb-image-overlay\"></div>\n\t\t\t\t<div class=\"rwmb-image-actions\">\n\t\t\t\t\t%s\n\t\t\t\t\t<a href=\"#\" class=\"rwmb-image-delete rwmb-file-delete\" data-attachment_id=\"%s\"><span class=\"dashicons dashicons-no-alt\"></span></a>\n\t\t\t\t</div>\n\t\t\t\t<input type=\"hidden\" name=\"%s[%s]\" value=\"%s\">\n\t\t\t</li>',\n\t\t\t$attachment_image,\n\t\t\t$edit_link,\n\t\t\tesc_attr( $file ),\n\t\t\tesc_attr( $attributes['name'] ),\n\t\t\tesc_attr( $index ),\n\t\t\tesc_attr( $file )\n\t\t);\n\t}\n\n\t/**\n\t * Normalize field settings.\n\t *\n\t * @param array $field Field settings.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field               = parent::normalize( $field );\n\t\t$field               = wp_parse_args( $field, [ 'image_size' => 'thumbnail' ] );\n\t\t$field['attributes'] = wp_parse_args( $field['attributes'], [ 'accept' => 'image/*' ] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param array    $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t$output = sprintf( '<img src=\"%s\" alt=\"%s\">', esc_url( $value['url'] ), esc_attr( $value['alt'] ) );\n\n\t\t// Link thumbnail to full size image?\n\t\tif ( ! empty( $args['link'] ) ) {\n\t\t\t$output = sprintf( '<a href=\"%s\" title=\"%s\">%s</a>', esc_url( $value['full_url'] ), esc_attr( $value['title'] ), $output );\n\t\t}\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Get uploaded file information.\n\t *\n\t * @param int   $file  Attachment image ID (post ID). Required.\n\t * @param array $args  Array of arguments (for size).\n\t * @param array $field Field settings.\n\t *\n\t * @return array|bool False if file not found. Array of image info on success.\n\t */\n\tpublic static function file_info( $file, $args = [], $field = [] ) {\n\t\tif ( ! empty( $field['upload_dir'] ) ) {\n\t\t\treturn self::file_info_custom_dir( $file, $field );\n\t\t}\n\n\t\t$path = get_attached_file( $file );\n\t\tif ( ! $path ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$args  = wp_parse_args( $args, [ 'size' => 'thumbnail' ] );\n\t\t$image = wp_get_attachment_image_src( $file, $args['size'] );\n\t\tif ( ! $image ) {\n\t\t\treturn false;\n\t\t}\n\t\t$attachment = get_post( $file );\n\t\t$info       = [\n\t\t\t'ID'          => $file,\n\t\t\t'name'        => basename( $path ),\n\t\t\t'path'        => $path,\n\t\t\t'url'         => $image[0],\n\t\t\t'full_url'    => wp_get_attachment_url( $file ),\n\t\t\t'title'       => $attachment->post_title,\n\t\t\t'caption'     => $attachment->post_excerpt,\n\t\t\t'description' => $attachment->post_content,\n\t\t\t'alt'         => get_post_meta( $file, '_wp_attachment_image_alt', true ),\n\t\t];\n\t\tif ( function_exists( 'wp_get_attachment_image_srcset' ) ) {\n\t\t\t$info['srcset'] = wp_get_attachment_image_srcset( $file, $args['size'] );\n\t\t}\n\n\t\t$info = wp_parse_args( $info, self::get_image_meta_data( $file ) );\n\n\t\t// Do not overwrite width and height by returned value of image meta.\n\t\t$info['width']  = $image[1];\n\t\t$info['height'] = $image[2];\n\n\t\treturn $info;\n\t}\n\n\t/**\n\t * Get image meta data.\n\t *\n\t * @param  int $attachment_id Attachment ID.\n\t * @return array\n\t */\n\tprotected static function get_image_meta_data( $attachment_id ) {\n\t\t$metadata = wp_get_attachment_metadata( $attachment_id );\n\t\tif ( empty( $metadata['sizes'] ) ) {\n\t\t\treturn $metadata;\n\t\t}\n\n\t\t$dir_url = dirname( wp_get_attachment_url( $attachment_id ) );\n\t\tforeach ( $metadata['sizes'] as &$size ) {\n\t\t\t$size['url'] = \"{$dir_url}/{$size['file']}\";\n\t\t}\n\t\treturn $metadata;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/input-list.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The input list field which displays choices in a list of inputs.\n */\nclass RWMB_Input_List_Field extends RWMB_Choice_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-input-list', RWMB_CSS_URL . 'input-list.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-input-list', 'path', RWMB_CSS_DIR . 'input-list.css' );\n\t\twp_enqueue_script( 'rwmb-input-list', RWMB_JS_URL . 'input-list.js', [], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$options = self::transform_options( $field['options'] );\n\t\t$walker  = new RWMB_Walker_Input_List( $field, $meta );\n\t\t$output  = self::get_select_all_html( $field );\n\t\t$output .= sprintf(\n\t\t\t'<fieldset class=\"rwmb-input-list%s%s\">',\n\t\t\t$field['collapse'] ? ' rwmb-collapse' : '',\n\t\t\t$field['inline'] ? ' rwmb-inline' : ''\n\t\t);\n\t\t$output .= $walker->walk( $options, $field['flatten'] ? -1 : 0 );\n\t\t$output .= '</fieldset>';\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field;\n\t\t$field = RWMB_Input_Field::normalize( $field );\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'collapse'        => true,\n\t\t\t'inline'          => null,\n\t\t\t'select_all_none' => false,\n\t\t] );\n\n\t\t$field['flatten'] = $field['multiple'] ? $field['flatten'] : true;\n\t\t$field['inline']  = ! $field['multiple'] && ! isset( $field['inline'] ) ? true : $field['inline'];\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes          = RWMB_Input_Field::get_attributes( $field, $value );\n\t\t$attributes['id']    = false;\n\t\t$attributes['type']  = $field['multiple'] ? 'checkbox' : 'radio';\n\t\t$attributes['value'] = $value;\n\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Get html for select all|none for multiple checkbox.\n\t *\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function get_select_all_html( $field ) {\n\t\tif ( $field['multiple'] && $field['select_all_none'] ) {\n\t\t\treturn sprintf( '<p class=\"rwmb-toggle-all-wrapper\"><button class=\"rwmb-input-list-select-all-none button\" data-name=\"%s\">%s</button></p>', $field['id'], __( 'Toggle All', 'meta-box' ) );\n\t\t}\n\t\treturn '';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/input.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The abstract input field which is used for all <input> fields.\n */\nabstract class RWMB_Input_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-input', RWMB_CSS_URL . 'input.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-input', 'path', RWMB_CSS_DIR . 'input.css' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$output = '';\n\n\t\tif ( $field['prepend'] || $field['append'] ) {\n\t\t\t$output = '<div class=\"rwmb-input-group\">';\n\t\t}\n\n\t\tif ( $field['prepend'] ) {\n\t\t\t$output .= '<span class=\"rwmb-input-group-text\">' . $field['prepend'] . '</span>';\n\t\t}\n\n\t\t$attributes = static::get_attributes( $field, $meta );\n\t\t$output    .= sprintf( '<input %s>%s', self::render_attributes( $attributes ), self::datalist( $field ) );\n\n\t\tif ( $field['append'] ) {\n\t\t\t$output .= '<span class=\"rwmb-input-group-text\">' . $field['append'] . '</span>';\n\t\t}\n\n\t\tif ( $field['prepend'] || $field['append'] ) {\n\t\t\t$output .= '</div>';\n\t\t}\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'autocomplete' => false,\n\t\t\t'datalist'     => false,\n\t\t\t'readonly'     => false,\n\t\t\t'maxlength'    => false,\n\t\t\t'minlength'    => false,\n\t\t\t'pattern'      => false,\n\t\t\t'prepend'      => '',\n\t\t\t'append'       => '',\n\t\t] );\n\t\tif ( $field['datalist'] ) {\n\t\t\t$field['datalist'] = wp_parse_args( $field['datalist'], [\n\t\t\t\t'id'      => $field['id'] . '_list',\n\t\t\t\t'options' => [],\n\t\t\t] );\n\t\t}\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = parent::get_attributes( $field, $value );\n\t\t$attributes = wp_parse_args( $attributes, [\n\t\t\t'autocomplete' => $field['autocomplete'],\n\t\t\t'list'         => $field['datalist'] ? $field['datalist']['id'] : false,\n\t\t\t'readonly'     => $field['readonly'],\n\t\t\t'maxlength'    => $field['maxlength'],\n\t\t\t'minlength'    => $field['minlength'],\n\t\t\t'pattern'      => $field['pattern'],\n\t\t\t'value'        => $value,\n\t\t\t'placeholder'  => $field['placeholder'],\n\t\t\t'type'         => $field['type'],\n\t\t] );\n\t\tif ( isset( $field['size'] ) ) {\n\t\t\t$attributes['size'] = $field['size'];\n\t\t}\n\n\t\treturn $attributes;\n\t}\n\n\tprotected static function datalist( array $field ): string {\n\t\tif ( empty( $field['datalist'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$datalist = $field['datalist'];\n\t\t$html     = sprintf( '<datalist id=\"%s\">', $datalist['id'] );\n\t\tforeach ( $datalist['options'] as $option ) {\n\t\t\t$html .= sprintf( '<option value=\"%s\"></option>', $option );\n\t\t}\n\t\t$html .= '</datalist>';\n\t\treturn $html;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/key-value.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The key-value field which allows users to add pairs of keys and values.\n */\nclass RWMB_Key_Value_Field extends RWMB_Input_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-key-value', RWMB_CSS_URL . 'key-value.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-key-value', 'path', RWMB_CSS_DIR . 'key-value.css' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t// Key.\n\t\t$key                       = isset( $meta[0] ) ? $meta[0] : '';\n\t\t$attributes                = self::get_attributes( $field, $key );\n\t\t$attributes['placeholder'] = $field['placeholder']['key'];\n\t\t$html                      = sprintf( '<input %s>', self::render_attributes( $attributes ) );\n\n\t\t// Value.\n\t\t$val                       = isset( $meta[1] ) ? $meta[1] : '';\n\t\t$attributes                = self::get_attributes( $field, $val );\n\t\t$attributes['placeholder'] = $field['placeholder']['value'];\n\t\t$html                     .= sprintf( '<input %s>', self::render_attributes( $attributes ) );\n\n\t\treturn $html;\n\t}\n\n\tprotected static function begin_html( array $field ): string {\n\t\treturn parent::begin_html( $field ) . parent::input_description( $field );\n\t}\n\n\tprotected static function input_description( array $field ): string {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Sanitize field value.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\tforeach ( $new as &$arr ) {\n\t\t\tif ( empty( $arr[0] ) && empty( $arr[1] ) ) {\n\t\t\t\t$arr = false;\n\t\t\t}\n\t\t}\n\t\t$new = array_filter( $new );\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field['clone']    = true;\n\t\t$field['multiple'] = true;\n\t\t$field             = parent::normalize( $field );\n\n\t\t$field['attributes']['type'] = 'text';\n\t\t$field['placeholder']        = wp_parse_args( (array) $field['placeholder'], [\n\t\t\t'key'   => __( 'Key', 'meta-box' ),\n\t\t\t'value' => __( 'Value', 'meta-box' ),\n\t\t] );\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Format value for the helper functions.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_clone_value( $field, $value, $args, $post_id ) {\n\t\treturn sprintf( '<label>%s:</label> %s', $value[0], $value[1] );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/map.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The Google Maps field.\n */\nclass RWMB_Map_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-map', RWMB_CSS_URL . 'map.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-map', 'path', RWMB_CSS_DIR . 'map.css' );\n\n\t\t$args            = func_get_args();\n\t\t$field           = $args[0];\n\t\t$google_maps_url = add_query_arg( [\n\t\t\t'key'       => $field['api_key'],\n\t\t\t'language'  => $field['language'],\n\t\t\t'libraries' => 'places',\n\t\t], 'https://maps.google.com/maps/api/js' );\n\n\t\t/**\n\t\t * Allows developers load more libraries via a filter.\n\t\t * @link https://developers.google.com/maps/documentation/javascript/libraries\n\t\t */\n\t\t$google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url );\n\n\t\twp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), [], RWMB_VER, true );\n\t\twp_enqueue_script( 'rwmb-map', RWMB_JS_URL . 'map.js', [ 'jquery-ui-autocomplete', 'google-maps' ], RWMB_VER, true );\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-map', 'RWMB_Map', [\n\t\t\t'no_results_string' => __( 'No results found', 'meta-box' ),\n\t\t] );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$address = is_array( $field['address_field'] ) ? implode( ',', $field['address_field'] ) : $field['address_field'];\n\t\t$html    = sprintf(\n\t\t\t'<div class=\"rwmb-map-field\" data-address-field=\"%s\">',\n\t\t\tesc_attr( $address )\n\t\t);\n\n\t\t$attributes          = self::get_attributes( $field, $meta );\n\t\t$attributes['type']  = 'hidden';\n\t\t$attributes['value'] = $meta;\n\n\t\t$html .= sprintf(\n\t\t\t'<div class=\"rwmb-map-canvas\" data-default-loc=\"%s\" data-region=\"%s\"  data-marker_draggable=\"%s\"></div>\n\t\t\t<input %s>',\n\t\t\tesc_attr( $field['std'] ),\n\t\t\tesc_attr( $field['region'] ),\n\t\t\tesc_attr( $field['marker_draggable'] ? 'true' : 'false' ),\n\t\t\tself::render_attributes( $attributes )\n\t\t);\n\n\t\t$html .= '</div>';\n\n\t\treturn $html;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'std'              => '',\n\t\t\t'address_field'    => '',\n\t\t\t'language'         => '',\n\t\t\t'region'           => '',\n\t\t\t'marker_draggable' => true,\n\n\t\t\t// Default API key, required by Google Maps since June 2016.\n\t\t\t// Users should overwrite this key with their own key.\n\t\t\t'api_key'          => 'AIzaSyC1mUh87SGFyf133tpZQJa-s96p0tgnraQ',\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the field value.\n\t * The difference between this function and 'meta' function is 'meta' function always returns the escaped value\n\t * of the field saved in the database, while this function returns more meaningful value of the field.\n\t *\n\t * @param  array    $field   Field parameters.\n\t * @param  array    $args    Not used for this field.\n\t * @param  int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return mixed Array(latitude, longitude, zoom)\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\t$value = parent::get_value( $field, $args, $post_id );\n\n\t\tif ( is_array( $value ) ) {\n\t\t\t$location = [];\n\t\t\tforeach ( $value as $clone ) {\n\t\t\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $clone . ',,' );\n\t\t\t\t$location[]                          = compact( 'latitude', 'longitude', 'zoom' );\n\t\t\t}\n\t\t\treturn $location;\n\t\t}\n\n\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $value . ',,' );\n\t\treturn compact( 'latitude', 'longitude', 'zoom' );\n\t}\n\n\t/**\n\t * Format value before render map\n\t * @param array $field    Field settings.\n\t * @param mixed $value    Field value.\n\t * @param mixed $args     Additional arguments.\n\t * @param mixed $post_id  Post ID.\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t$args = wp_parse_args( $args, [\n\t\t\t'api_key' => $field['api_key'] ?? '',\n\t\t] );\n\t\treturn self::render_map( $value, $args );\n\t}\n\n\t/**\n\t * Render a map in the frontend.\n\t *\n\t * @param string $location The \"latitude,longitude[,zoom]\" location.\n\t * @param array  $args     Additional arguments for the map.\n\t *\n\t * @return string\n\t */\n\tpublic static function render_map( $location, $args = [] ) {\n\t\t// For compatibility with previous version, or within groups.\n\t\tif ( is_string( $location ) ) {\n\t\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $location . ',,' );\n\t\t} else {\n\t\t\t// phpcs:ignore WordPress.PHP.DontExtract.extract_extract\n\t\t\textract( $location );\n\t\t}\n\n\t\tif ( ! $latitude || ! $longitude ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$args = wp_parse_args( $args, [\n\t\t\t'latitude'     => $latitude,\n\t\t\t'longitude'    => $longitude,\n\t\t\t'width'        => '100%',\n\t\t\t'height'       => '480px',\n\t\t\t'marker'       => true, // Display marker?\n\t\t\t'marker_title' => '', // Marker title, when hover.\n\t\t\t'info_window'  => '', // Content of info window (when click on marker). HTML allowed.\n\t\t\t'js_options'   => [],\n\t\t\t'zoom'         => $zoom,\n\n\t\t\t// Default API key, required by Google Maps since June 2016.\n\t\t\t// Users should overwrite this key with their own key.\n\t\t\t'api_key'      => 'AIzaSyC1mUh87SGFyf133tpZQJa-s96p0tgnraQ',\n\t\t] );\n\n\t\t$google_maps_url = add_query_arg( 'key', $args['api_key'], 'https://maps.google.com/maps/api/js' );\n\n\t\t/*\n\t\t * Allows developers load more libraries via a filter.\n\t\t * @link https://developers.google.com/maps/documentation/javascript/libraries\n\t\t */\n\t\t$google_maps_url = apply_filters( 'rwmb_google_maps_url', $google_maps_url );\n\t\twp_register_script( 'google-maps', esc_url_raw( $google_maps_url ), [], RWMB_VER, true );\n\t\twp_enqueue_script( 'rwmb-map-frontend', RWMB_JS_URL . 'map-frontend.js', [ 'google-maps', 'jquery' ], RWMB_VER, true );\n\n\t\t/*\n\t\t * Google Maps options.\n\t\t * Option name is the same as specified in Google Maps documentation.\n\t\t * This array will be convert to Javascript Object and pass as map options.\n\t\t * @link https://developers.google.com/maps/documentation/javascript/reference\n\t\t */\n\t\t$args['js_options'] = wp_parse_args( $args['js_options'], [\n\t\t\t// Default to 'zoom' level set in admin, but can be overwritten.\n\t\t\t'zoom'           => $args['zoom'],\n\n\t\t\t// Map type, see https://developers.google.com/maps/documentation/javascript/reference#MapTypeId.\n\t\t\t'mapTypeId'      => 'ROADMAP',\n\n\t\t\t// Open Info Window\n\t\t\t'openInfoWindow' => false,\n\t\t] );\n\n\t\t$output = sprintf(\n\t\t\t'<div class=\"rwmb-map-canvas\" data-map_options=\"%s\" style=\"width:%s;height:%s\"></div>',\n\t\t\tesc_attr( wp_json_encode( $args ) ),\n\t\t\tesc_attr( $args['width'] ),\n\t\t\tesc_attr( $args['height'] )\n\t\t);\n\t\treturn $output;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/media.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Media field class which users WordPress media popup to upload and select files.\n */\nclass RWMB_Media_Field extends RWMB_File_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\n\t\twp_enqueue_media();\n\t\tif ( ! is_admin() ) {\n\t\t\twp_register_script( 'media-grid', includes_url( 'js/media-grid.min.js' ), [ 'media-editor' ], '4.9.7', true );\n\t\t}\n\t\twp_enqueue_style( 'rwmb-media', RWMB_CSS_URL . 'media.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-media', 'path', RWMB_CSS_DIR . 'media.css' );\n\t\twp_enqueue_script( 'rwmb-media', RWMB_JS_URL . 'media.js', [ 'jquery-ui-sortable', 'underscore', 'backbone', 'media-grid' ], RWMB_VER, true );\n\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-media', 'i18nRwmbMedia', [\n\t\t\t'add'                => apply_filters( 'rwmb_media_add_string', _x( '+ Add Media', 'media', 'meta-box' ) ),\n\t\t\t'single'             => apply_filters( 'rwmb_media_single_files_string', _x( ' file', 'media', 'meta-box' ) ),\n\t\t\t'multiple'           => apply_filters( 'rwmb_media_multiple_files_string', _x( ' files', 'media', 'meta-box' ) ),\n\t\t\t'remove'             => apply_filters( 'rwmb_media_remove_string', _x( 'Remove', 'media', 'meta-box' ) ),\n\t\t\t'edit'               => apply_filters( 'rwmb_media_edit_string', _x( 'Edit', 'media', 'meta-box' ) ),\n\t\t\t'view'               => apply_filters( 'rwmb_media_view_string', _x( 'View', 'media', 'meta-box' ) ),\n\t\t\t'noTitle'            => _x( 'No Title', 'media', 'meta-box' ),\n\t\t\t'loadingUrl'         => admin_url( 'images/spinner.gif' ),\n\t\t\t'extensions'         => static::get_mime_extensions(),\n\t\t\t'select'             => apply_filters( 'rwmb_media_select_string', _x( 'Select Files', 'media', 'meta-box' ) ),\n\t\t\t'or'                 => apply_filters( 'rwmb_media_or_string', _x( 'or', 'media', 'meta-box' ) ),\n\t\t\t'uploadInstructions' => apply_filters( 'rwmb_media_upload_instructions_string', _x( 'Drop files here to upload', 'media', 'meta-box' ) ),\n\t\t] );\n\t}\n\n\t/**\n\t * Get meta value.\n\t *\n\t * @param int   $post_id Post ID.\n\t * @param bool  $saved   Whether the meta box is saved at least once.\n\t * @param array $field   Field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function meta( $post_id, $saved, $field ) {\n\t\t$meta = parent::meta( $post_id, $saved, $field );\n\n\t\t/*\n\t\t * Update meta cache for all attachments, preparing for getting data for rendering in JS.\n\t\t * This reduces the number of queries for updating all attachments' meta.\n\t\t * @see get_attributes()\n\t\t */\n\t\t$ids = (array) $meta;\n\t\tif ( $field['clone'] ) {\n\t\t\tforeach ( $ids as &$value ) {\n\t\t\t\t$value = (array) $value;\n\t\t\t}\n\t\t\t$ids = call_user_func_array( 'array_merge', $ids );\n\t\t}\n\t\tupdate_meta_cache( 'post', $ids );\n\n\t\treturn $meta;\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = static::get_attributes( $field, $meta );\n\n\t\t$html = sprintf(\n\t\t\t'<input %s data-options=\"%s\">',\n\t\t\tself::render_attributes( $attributes ),\n\t\t\tesc_attr( wp_json_encode( $field['js_options'] ) )\n\t\t);\n\n\t\treturn $html;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'std'              => [],\n\t\t\t'mime_type'        => '',\n\t\t\t'max_file_uploads' => 0,\n\t\t\t'force_delete'     => false,\n\t\t\t'max_status'       => true,\n\t\t\t'js_options'       => [],\n\t\t\t'add_to'           => 'end',\n\t\t] );\n\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'mimeType'    => $field['mime_type'],\n\t\t\t'maxFiles'    => $field['max_file_uploads'],\n\t\t\t'forceDelete' => $field['force_delete'],\n\t\t\t'maxStatus'   => $field['max_status'],\n\t\t\t'addTo'       => $field['add_to'],\n\t\t] );\n\n\t\t$field['multiple'] = true;\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$value = (array) $value;\n\n\t\t$attributes           = parent::get_attributes( $field, $value );\n\t\t$attributes['type']   = 'hidden';\n\t\t$attributes['name']   = $field['clone'] ? str_replace( '[]', '', $attributes['name'] ) : $attributes['name'];\n\t\t$attributes['id']     = false;\n\t\t$attributes['value']  = implode( ',', $value );\n\t\t$attributes['class'] .= ' rwmb-media';\n\n\t\t// Add attachment details.\n\t\t$attachments                    = array_values( array_filter( array_map( 'wp_prepare_attachment_for_js', $value ) ) );\n\t\t$attributes['data-attachments'] = wp_json_encode( $attachments );\n\n\t\tif ( empty( $attachments ) ) {\n\t\t\tunset( $attributes['value'] );\n\t\t}\n\n\t\treturn $attributes;\n\t}\n\n\tprotected static function get_mime_extensions(): array {\n\t\t$mime_types = wp_get_mime_types();\n\t\t$extensions = [];\n\t\tforeach ( $mime_types as $ext => $mime ) {\n\t\t\t$ext                 = explode( '|', $ext );\n\t\t\t$extensions[ $mime ] = $ext;\n\n\t\t\t$mime_parts = explode( '/', $mime );\n\t\t\tif ( empty( $extensions[ $mime_parts[0] ] ) ) {\n\t\t\t\t$extensions[ $mime_parts[0] ] = [];\n\t\t\t}\n\t\t\t$extensions[ $mime_parts[0] ]        = array_merge( $extensions[ $mime_parts[0] ], $ext );\n\t\t\t$extensions[ $mime_parts[0] . '/*' ] = $extensions[ $mime_parts[0] ];\n\t\t}\n\n\t\treturn $extensions;\n\t}\n\n\t/**\n\t * Get meta values to save.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$new = wp_parse_id_list( $new );\n\n\t\tif ( empty( $new ) ) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// Attach the uploaded images to the post if needed.\n\t\tglobal $wpdb;\n\t\t$ids = implode( ',', $new );\n\t\t// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching\n\t\t$wpdb->query( $wpdb->prepare( \"UPDATE $wpdb->posts SET post_parent=%d WHERE post_parent=0 AND ID IN ($ids)\", $post_id ) );\n\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Save meta value.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t */\n\tpublic static function save( $new, $old, $post_id, $field ) {\n\t\tif ( empty( $field['id'] ) || ! $field['save_field'] ) {\n\t\t\treturn;\n\t\t}\n\t\t$storage = $field['storage'];\n\t\t$storage->delete( $post_id, $field['id'] );\n\t\tparent::save( $new, [], $post_id, $field );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/multiple-values.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * This class implements common methods used in fields which have multiple values\n * like checkbox list, autocomplete, etc.\n *\n * The difference when handling actions for these fields are the way they get/set\n * meta value. Briefly:\n * - If field is cloneable, value is saved as a single entry in the database\n * - Otherwise value is saved as multiple entries\n */\nabstract class RWMB_Multiple_Values_Field extends RWMB_Field {\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field               = parent::normalize( $field );\n\t\t$field['multiple']   = true;\n\t\t$field['field_name'] = $field['id'];\n\t\tif ( ! $field['clone'] ) {\n\t\t\t$field['field_name'] .= '[]';\n\t\t}\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn $field['options'][ $value ];\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/number.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The number field which uses HTML <input type=\"number\">.\n */\nclass RWMB_Number_Field extends RWMB_Input_Field {\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'step' => 1,\n\t\t\t'min'  => 0,\n\t\t\t'max'  => false,\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = parent::get_attributes( $field, $value );\n\t\t$attributes = wp_parse_args( $attributes, [\n\t\t\t'step' => $field['step'],\n\t\t\t'max'  => $field['max'],\n\t\t\t'min'  => $field['min'],\n\t\t] );\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/object-choice.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\nuse MetaBox\\Support\\Arr;\n\n/**\n * The object choice class which allows users to select specific objects (post, user, taxonomy) in WordPress.\n */\nabstract class RWMB_Object_Choice_Field extends RWMB_Choice_Field {\n\t/**\n\t * Show field HTML.\n\t * Populate field options before showing to make sure query is made only once.\n\t *\n\t * @param array $field   Field parameters.\n\t * @param bool  $saved   Whether the meta box is saved at least once.\n\t * @param int   $post_id Post ID.\n\t */\n\tpublic static function show( array $field, bool $saved, $post_id = 0 ) {\n\t\t// Get unique saved IDs for ajax fields.\n\t\t$meta = static::meta( $post_id, $saved, $field );\n\t\t$meta = self::filter( 'field_meta', $meta, $field, $saved );\n\t\t$meta = Arr::flatten( (array) $meta );\n\t\t$meta = array_filter( wp_parse_id_list( $meta ) );\n\t\tsort( $meta );\n\n\t\t$field['options'] = static::query( $meta, $field );\n\n\t\tparent::show( $field, $saved, $post_id );\n\t}\n\n\tabstract public static function query( $meta, array $field ): array;\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$html = call_user_func( [ self::get_type_class( $field ), 'html' ], $meta, $field );\n\n\t\tif ( $field['add_new'] ) {\n\t\t\t$html .= static::add_new_form( $field );\n\t\t}\n\n\t\treturn $html;\n\t}\n\n\tpublic static function add_new_form( array $field ): string {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'flatten'    => true,\n\t\t\t'query_args' => [],\n\t\t\t'field_type' => 'select_advanced',\n\t\t\t'add_new'    => false,\n\t\t\t'ajax'       => true,\n\t\t] );\n\t\tif ( 'select_advanced' !== $field['field_type'] ) {\n\t\t\t$field['ajax'] = false;\n\t\t}\n\t\tif ( 'checkbox_tree' === $field['field_type'] ) {\n\t\t\t$field['field_type'] = 'checkbox_list';\n\t\t\t$field['flatten']    = false;\n\t\t}\n\t\tif ( 'radio_list' === $field['field_type'] ) {\n\t\t\t$field['field_type'] = 'radio';\n\t\t}\n\t\t$field = call_user_func( [ self::get_type_class( $field ), 'normalize' ], $field );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Set ajax parameters.\n\t *\n\t * @param array $field Field settings.\n\t */\n\tprotected static function set_ajax_params( &$field ) {\n\t\tif ( ! $field['ajax'] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( empty( $field['js_options']['ajax'] ) ) {\n\t\t\t$field['js_options']['ajax'] = [];\n\t\t}\n\t\t$field['js_options']['ajax']      = wp_parse_args(\n\t\t\t[\n\t\t\t\t'url' => admin_url( 'admin-ajax.php' ),\n\t\t\t],\n\t\t\t$field['js_options']['ajax']\n\t\t);\n\t\t$field['js_options']['ajax_data'] = [\n\t\t\t'field'    => [\n\t\t\t\t'id'         => $field['id'],\n\t\t\t\t'type'       => $field['type'],\n\t\t\t\t'query_args' => $field['query_args'],\n\t\t\t],\n\t\t\t'_wpnonce' => wp_create_nonce( 'query' ),\n\t\t];\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = call_user_func( [ self::get_type_class( $field ), 'get_attributes' ], $field, $value );\n\t\tif ( 'select_advanced' === $field['field_type'] ) {\n\t\t\t$attributes['class'] .= ' rwmb-select_advanced';\n\t\t} elseif ( 'select' === $field['field_type'] ) {\n\t\t\t$attributes['class'] .= ' rwmb-select';\n\t\t}\n\t\treturn $attributes;\n\t}\n\n\tpublic static function admin_enqueue_scripts() {\n\t\tRWMB_Input_List_Field::admin_enqueue_scripts();\n\t\tRWMB_Select_Field::admin_enqueue_scripts();\n\t\tRWMB_Select_Tree_Field::admin_enqueue_scripts();\n\t\tRWMB_Select_Advanced_Field::admin_enqueue_scripts();\n\n\t\t// Field is the 1st param.\n\t\t$field = func_get_arg( 0 );\n\t\tif ( empty( $field['add_new'] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\twp_enqueue_style( 'rwmb-modal', RWMB_CSS_URL . 'modal.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-modal', 'path', RWMB_CSS_DIR . 'modal.css' );\n\t\twp_enqueue_script( 'rwmb-modal', RWMB_JS_URL . 'modal.js', [ 'jquery' ], RWMB_VER, true );\n\n\t\t$type = $field['type'] === 'taxonomy_advanced' ? 'taxonomy' : $field['type'];\n\t\twp_enqueue_script( \"rwmb-$type\", RWMB_JS_URL . \"$type.js\", [ 'jquery', 'rwmb-modal' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Get correct rendering class for the field.\n\t */\n\tprotected static function get_type_class( array $field ): string {\n\t\treturn RWMB_Helpers_Field::get_class( [ 'type' => $field['field_type'] ] );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/oembed.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The oEmbed field which allows users to enter oEmbed URLs.\n */\nclass RWMB_OEmbed_Field extends RWMB_Input_Field {\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\n\t\t$field               = wp_parse_args( $field, [\n\t\t\t'not_available_string' => __( 'Embed HTML not available.', 'meta-box' ),\n\t\t] );\n\t\t$field['attributes'] = wp_parse_args( $field['attributes'], [\n\t\t\t'data-not-available' => $field['not_available_string'],\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-oembed', RWMB_CSS_URL . 'oembed.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-oembed', 'path', RWMB_CSS_DIR . 'oembed.css' );\n\t\twp_enqueue_script( 'rwmb-oembed', RWMB_JS_URL . 'oembed.js', [ 'jquery', 'underscore', 'rwmb' ], RWMB_VER, true );\n\t\twp_localize_script( 'rwmb-oembed', 'rwmbOembed', [\n\t\t\t'nonce' => wp_create_nonce( 'oembed_get' ),\n\t\t] );\n\t}\n\n\tpublic static function add_actions() {\n\t\tadd_action( 'wp_ajax_rwmb_get_embed', [ __CLASS__, 'ajax_get_embed' ] );\n\t}\n\n\tpublic static function ajax_get_embed() {\n\t\tcheck_ajax_referer( 'oembed_get' );\n\n\t\t$request       = rwmb_request();\n\t\t$url           = (string) $request->filter_post( 'url', FILTER_SANITIZE_URL );\n\t\t$not_available = (string) $request->post( 'not_available' );\n\t\twp_send_json_success( self::get_embed( $url, $not_available ) );\n\t}\n\n\t/**\n\t * Get embed html from url.\n\t *\n\t * @param string $url           URL.\n\t * @param string $not_available Not available string displayed to users.\n\t * @return string\n\t */\n\tpublic static function get_embed( $url, $not_available = '' ) {\n\t\t/**\n\t\t * Set arguments for getting embedded HTML.\n\t\t * Without arguments, default width will be taken from global $content_width, which can break UI in the admin.\n\t\t *\n\t\t * @link https://github.com/rilwis/meta-box/issues/801\n\t\t * @see  WP_oEmbed::fetch()\n\t\t * @see  WP_Embed::shortcode()\n\t\t * @see  wp_embed_defaults()\n\t\t */\n\t\t$args = [];\n\t\tif ( is_admin() ) {\n\t\t\t$args['width'] = 360;\n\t\t}\n\n\t\t// Try oembed first.\n\t\t$embed = wp_oembed_get( $url, $args );\n\n\t\t// If no oembed provides found, try WordPress auto embed.\n\t\tif ( ! $embed ) {\n\t\t\tglobal $wp_embed;\n\t\t\t$temp                           = $wp_embed->return_false_on_fail;\n\t\t\t$wp_embed->return_false_on_fail = true; // Do not fallback to make a link.\n\t\t\t$embed                          = $wp_embed->shortcode( $args, $url );\n\t\t\t$wp_embed->return_false_on_fail = $temp;\n\t\t}\n\n\t\tif ( $not_available ) {\n\t\t\t$not_available = '<div class=\"rwmb-oembed-not-available\">' . wp_kses_post( $not_available ) . '</div>';\n\t\t}\n\t\t$not_available = apply_filters( 'rwmb_oembed_not_available_string', $not_available, $url );\n\n\t\treturn $embed ? $embed : $not_available;\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\treturn parent::html( $meta, $field ) . sprintf(\n\t\t\t'<span class=\"spinner\"></span>\n\t\t\t<div class=\"rwmb-embed-media\">%s</div>',\n\t\t\t$meta ? self::get_embed( $meta, $field['not_available_string'] ) : ''\n\t\t);\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes         = parent::get_attributes( $field, $value );\n\t\t$attributes['type'] = 'url';\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn self::get_embed( $value, $field['not_available_string'] );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/osm.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The Open Street Map field.\n */\nclass RWMB_OSM_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tself::enqueue_map_assets();\n\n\t\twp_enqueue_style( 'rwmb-osm', RWMB_CSS_URL . 'osm.css', [ 'leaflet' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-osm', 'path', RWMB_CSS_DIR . 'osm.css' );\n\t\twp_enqueue_script( 'rwmb-osm', RWMB_JS_URL . 'osm.js', [ 'jquery', 'jquery-ui-autocomplete', 'leaflet' ], RWMB_VER, true );\n\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-osm', 'RWMB_Osm', [\n\t\t\t'no_results_string' => __( 'No results found', 'meta-box' ),\n\t\t] );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$address = is_array( $field['address_field'] ) ? implode( ',', $field['address_field'] ) : $field['address_field'];\n\t\t$html    = sprintf(\n\t\t\t'<div class=\"rwmb-osm-field\" data-address-field=\"%s\">',\n\t\t\tesc_attr( $address )\n\t\t);\n\n\t\t$attributes          = self::get_attributes( $field, $meta );\n\t\t$attributes['type']  = 'hidden';\n\t\t$attributes['value'] = $meta;\n\n\t\t$html .= sprintf(\n\t\t\t'<div class=\"rwmb-osm-canvas\" data-default-loc=\"%s\" data-region=\"%s\" data-language=\"%s\" data-marker_draggable=\"%s\"></div>\n\t\t\t<input %s>',\n\t\t\tesc_attr( $field['std'] ),\n\t\t\tesc_attr( $field['region'] ),\n\t\t\tesc_attr( $field['language'] ),\n\t\t\tesc_attr( $field['marker_draggable'] ? 'true' : 'false' ),\n\t\t\tself::render_attributes( $attributes )\n\t\t);\n\n\t\t$html .= '</div>';\n\n\t\treturn $html;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'std'              => '',\n\t\t\t'address_field'    => '',\n\t\t\t'language'         => '',\n\t\t\t'region'           => '',\n\t\t\t'marker_draggable' => true,\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the field value.\n\t * The difference between this function and 'meta' function is 'meta' function always returns the escaped value\n\t * of the field saved in the database, while this function returns more meaningful value of the field.\n\t *\n\t * @param  array    $field   Field parameters.\n\t * @param  array    $args    Not used for this field.\n\t * @param  int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return mixed Array(latitude, longitude, zoom)\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\t$value = parent::get_value( $field, $args, $post_id );\n\n\t\tif ( is_array( $value ) ) {\n\t\t\t$location = [];\n\t\t\tforeach ( $value as $clone ) {\n\t\t\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $clone . ',,' );\n\t\t\t\t$location[]                          = compact( 'latitude', 'longitude', 'zoom' );\n\t\t\t}\n\t\t\treturn $location;\n\t\t}\n\n\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $value . ',,' );\n\t\treturn compact( 'latitude', 'longitude', 'zoom' );\n\t}\n\n\t/**\n\t * Format value before render map\n\t * @param array $field    Field settings.\n\t * @param mixed $value    Field value.\n\t * @param mixed $args     Additional arguments.\n\t * @param mixed $post_id  Post ID.\n\t * @return string HTML.\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\treturn self::render_map( $value, $args );\n\t}\n\n\t/**\n\t * Render a map in the frontend.\n\t *\n\t * @param string|array $location The \"latitude,longitude[,zoom]\" location.\n\t * @param array        $args     Additional arguments for the map.\n\t *\n\t * @return string\n\t */\n\tpublic static function render_map( $location, $args = [] ) {\n\t\t// For compatibility with previous version, or within groups.\n\t\tif ( is_string( $location ) ) {\n\t\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $location . ',,' );\n\t\t} else {\n\t\t\t// phpcs:ignore WordPress.PHP.DontExtract.extract_extract\n\t\t\textract( $location );\n\t\t}\n\n\t\tif ( ! $latitude || ! $longitude ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$args = wp_parse_args( $args, [\n\t\t\t'latitude'     => $latitude,\n\t\t\t'longitude'    => $longitude,\n\t\t\t'width'        => '100%',\n\t\t\t'height'       => '480px',\n\t\t\t'marker'       => true, // Display marker?\n\t\t\t'marker_title' => '', // Marker title, when hover.\n\t\t\t'info_window'  => '', // Content of info window (when click on marker). HTML allowed.\n\t\t\t'js_options'   => [],\n\t\t\t'zoom'         => $zoom,\n\t\t] );\n\n\t\tself::enqueue_map_assets();\n\t\twp_enqueue_script( 'rwmb-osm-frontend', RWMB_JS_URL . 'osm-frontend.js', [ 'jquery', 'leaflet' ], RWMB_VER, true );\n\t\twp_enqueue_style( 'rwmb-osm-frontend', RWMB_CSS_URL . 'osm-frontend.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-osm-frontend', 'path', RWMB_CSS_DIR . 'osm-frontend.css' );\n\n\t\t/*\n\t\t * More Open Street Map options\n\t\t * @link https://leafletjs.com/reference-1.5.0.html#map-option\n\t\t */\n\t\t$args['js_options'] = wp_parse_args( $args['js_options'], [\n\t\t\t// Default to 'zoom' level set in admin, but can be overwritten.\n\t\t\t'zoom' => $args['zoom'],\n\t\t] );\n\n\t\t$output = sprintf(\n\t\t\t'<div class=\"rwmb-osm-canvas\" data-osm_options=\"%s\" style=\"width:%s;height:%s\"></div>',\n\t\t\tesc_attr( wp_json_encode( $args ) ),\n\t\t\tesc_attr( $args['width'] ),\n\t\t\tesc_attr( $args['height'] )\n\t\t);\n\t\treturn $output;\n\t}\n\n\tprivate static function enqueue_map_assets() {\n\t\twp_enqueue_style( 'leaflet', RWMB_JS_URL . 'leaflet/leaflet.css', [], '1.9.4' );\n\t\twp_style_add_data( 'leaflet', 'path', RWMB_JS_URL . 'leaflet/leaflet.css' );\n\t\twp_enqueue_script( 'leaflet', RWMB_JS_URL . 'leaflet/leaflet.js', [], '1.9.4', true );\n\t\twp_enqueue_style( 'leaflet-gesture-handling', RWMB_JS_URL . 'leaflet/leaflet-gesture-handling.min.css', [ 'leaflet' ], '1.2.2' );\n\t\twp_style_add_data( 'leaflet-gesture-handling', 'path', RWMB_JS_URL . 'leaflet/leaflet-gesture-handling.min.css' );\n\t\twp_enqueue_script( 'leaflet-gesture-handling', RWMB_JS_URL . 'leaflet/leaflet-gesture-handling.min.js', [ 'leaflet' ], '1.2.2', true );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/password.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The secured password field.\n */\nclass RWMB_Password_Field extends RWMB_Input_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\twp_enqueue_style( 'rwmb-password', RWMB_CSS_URL . 'password.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-password', 'path', RWMB_CSS_DIR . 'password.css' );\n\t\twp_enqueue_script( 'rwmb-password', RWMB_JS_URL . 'password.js', [], RWMB_VER, true );\n\t}\n\n\tpublic static function html( $meta, $field ) {\n\t\t$output = parent::html( $meta, $field );\n\n\t\t// Skip password toggle if field has append\n\t\tif ( $field['append'] ) {\n\t\t\treturn $output;\n\t\t}\n\n\t\t// Add password toggle button\n\t\t$button = '<button type=\"button\" class=\"rwmb-password-toggle\" >\n\t\t\t\t<svg class=\"rwmb-eye-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"/>\n                </svg>\n                <svg class=\"rwmb-eye-off-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\">\n            \t\t<path d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"/>\n        \t\t</svg>\n            </button>';\n\n\t\t$output .= $button;\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Store secured password in the database.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t * @return string\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$new = $new !== $old ? wp_hash_password( $new ) : $new;\n\t\treturn $new;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/post.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The post field which allows users to select existing posts.\n */\nclass RWMB_Post_Field extends RWMB_Object_Choice_Field {\n\tpublic static function add_actions() {\n\t\tadd_action( 'wp_ajax_rwmb_get_posts', [ __CLASS__, 'ajax_get_posts' ] );\n\t\tadd_action( 'wp_ajax_nopriv_rwmb_get_posts', [ __CLASS__, 'ajax_get_posts' ] );\n\t}\n\n\tpublic static function ajax_get_posts() {\n\t\tcheck_ajax_referer( 'query' );\n\n\t\t$request = rwmb_request();\n\n\t\t$field = $request->filter_post( 'field', FILTER_DEFAULT, FILTER_FORCE_ARRAY );\n\n\t\t// Required for 'choice_label' filter. See self::filter().\n\t\t$field['clone']        = false;\n\t\t$field['_original_id'] = $field['id'];\n\n\t\t// Search.\n\t\t$field['query_args']['s'] = $request->filter_post( 'term' );\n\n\t\t// Pagination.\n\t\tif ( 'query:append' === $request->filter_post( '_type' ) ) {\n\t\t\t$field['query_args']['paged'] = $request->filter_post( 'page', FILTER_SANITIZE_NUMBER_INT );\n\t\t}\n\n\t\t// Query the database.\n\t\t$items = self::query( null, $field );\n\t\t$items = array_values( $items );\n\n\t\t$items = apply_filters( 'rwmb_ajax_get_posts', $items, $field, $request );\n\n\t\t$data = [ 'items' => $items ];\n\n\t\t// More items for pagination.\n\t\t$limit = (int) $field['query_args']['posts_per_page'];\n\t\tif ( -1 !== $limit && count( $items ) === $limit ) {\n\t\t\t$data['more'] = true;\n\t\t}\n\n\t\twp_send_json_success( $data );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'post_type'  => 'post',\n\t\t\t'parent'     => false,\n\t\t\t'query_args' => [],\n\t\t] );\n\n\t\t$field['post_type'] = (array) $field['post_type'];\n\n\t\t/*\n\t\t * Set default placeholder:\n\t\t * - If multiple post types: show 'Select a post'.\n\t\t * - If single post type: show 'Select a %post_type_name%'.\n\t\t */\n\t\t$placeholder = __( 'Select a post', 'meta-box' );\n\t\tif ( 1 === count( $field['post_type'] ) ) {\n\t\t\t$post_type        = reset( $field['post_type'] );\n\t\t\t$post_type_object = get_post_type_object( $post_type );\n\t\t\tif ( ! empty( $post_type_object ) ) {\n\t\t\t\t// Translators: %s is the post singular label.\n\t\t\t\t$placeholder = sprintf( __( 'Select a %s', 'meta-box' ), strtolower( $post_type_object->labels->singular_name ) );\n\t\t\t}\n\t\t}\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'placeholder' => $placeholder,\n\t\t] );\n\n\t\t// Set parent option, which will change field name to `parent_id` to save as post parent.\n\t\tif ( $field['parent'] ) {\n\t\t\t$field['multiple']   = false;\n\t\t\t$field['field_name'] = 'parent_id';\n\t\t}\n\n\t\t$field = parent::normalize( $field );\n\n\t\t// Set default query args.\n\t\t$posts_per_page      = $field['ajax'] ? 10 : -1;\n\t\t$field['query_args'] = wp_parse_args( $field['query_args'], [\n\t\t\t'post_type'      => $field['post_type'],\n\t\t\t'post_status'    => 'publish',\n\t\t\t'posts_per_page' => $posts_per_page,\n\t\t] );\n\n\t\tparent::set_ajax_params( $field );\n\n\t\treturn $field;\n\t}\n\n\tpublic static function query( $meta, array $field ): array {\n\t\t$args = wp_parse_args( $field['query_args'], [\n\t\t\t'no_found_rows'          => true,\n\t\t\t'update_post_meta_cache' => false,\n\t\t\t'update_post_term_cache' => false,\n\t\t\t'mb_field_id'            => $field['id'],\n\t\t] );\n\n\t\t$meta = wp_parse_id_list( (array) $meta );\n\n\t\t// Query only selected items.\n\t\tif ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {\n\t\t\t$args['posts_per_page'] = count( $meta );\n\t\t\t$args['post__in']       = $meta;\n\t\t}\n\n\t\t// Get from cache to prevent same queries.\n\t\t$last_changed = wp_cache_get_last_changed( 'posts' );\n\t\t// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize\n\t\t$key       = md5( serialize( $args ) );\n\t\t$cache_key = \"$key:$last_changed\";\n\t\t$options   = wp_cache_get( $cache_key, 'meta-box-post-field' );\n\n\t\tif ( false !== $options ) {\n\t\t\treturn $options;\n\t\t}\n\n\t\t// Only search by title.\n\t\tadd_filter( 'posts_search', [ __CLASS__, 'search_by_title' ], 10, 2 );\n\t\t$query = new WP_Query( $args );\n\t\tremove_filter( 'posts_search', [ __CLASS__, 'search_by_title' ] );\n\n\t\t$options = [];\n\t\tforeach ( $query->posts as $post ) {\n\t\t\tif ( ! current_user_can( 'read_post', $post ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t$label                = $post->post_title ? $post->post_title : __( '(No title)', 'meta-box' );\n\t\t\t$label                = self::filter( 'choice_label', $label, $field, $post );\n\t\t\t$options[ $post->ID ] = [\n\t\t\t\t'value'  => $post->ID,\n\t\t\t\t'label'  => $label,\n\t\t\t\t'parent' => $post->post_parent,\n\t\t\t];\n\t\t}\n\n\t\t// Cache the query.\n\t\twp_cache_set( $cache_key, $options, 'meta-box-post-field' );\n\n\t\treturn $options;\n\t}\n\n\t/**\n\t * Only search posts by title.\n\t * WordPress searches by either title or content which is confused when users can't find their posts.\n\t *\n\t * @link https://developer.wordpress.org/reference/hooks/posts_search/\n\t */\n\tpublic static function search_by_title( $search, $wp_query ) {\n\t\tglobal $wpdb;\n\t\tif ( empty( $search ) ) {\n\t\t\treturn $search;\n\t\t}\n\t\t$q      = $wp_query->query_vars;\n\t\t$n      = ! empty( $q['exact'] ) ? '' : '%';\n\t\t$search = [];\n\t\tforeach ( (array) $q['search_terms'] as $term ) {\n\t\t\t$term     = esc_sql( $wpdb->esc_like( $term ) );\n\t\t\t$search[] = \"($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')\";\n\t\t}\n\t\tif ( empty( $search ) ) {\n\t\t\treturn $search;\n\t\t}\n\t\t$search = ' AND (' . implode( ' AND ', $search ) . ') ';\n\t\tif ( ! is_user_logged_in() ) {\n\t\t\t$search .= \" AND ($wpdb->posts.post_password = '') \";\n\t\t}\n\t\treturn $search;\n\t}\n\n\t/**\n\t * Get meta value.\n\t * If field is cloneable, value is saved as a single entry in DB.\n\t * Otherwise value is saved as multiple entries (for backward compatibility).\n\t *\n\t * @see \"save\" method for better understanding\n\t *\n\t * @param int   $post_id Post ID.\n\t * @param bool  $saved   Is the meta box saved.\n\t * @param array $field   Field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function meta( $post_id, $saved, $field ) {\n\t\treturn $field['parent'] ? wp_get_post_parent_id( $post_id ) : parent::meta( $post_id, $saved, $field );\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array $field   Field parameters.\n\t * @param int   $value   The value.\n\t * @param array $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param ?int  $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\tif ( empty( $value ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t/**\n\t\t * Allow developers to change the value of the post. Used for WPML integration.\n\t\t * @var int|string $value The post ID.\n\t\t * @var array $field The field parameters.\n\t\t * @internal\n\t\t */\n\t\t$value = apply_filters( '_rwmb_post_format_single_value', $value, $field );\n\n\t\t$link = $args['link'] ?? 'view';\n\t\t$text = get_the_title( $value );\n\n\t\tif ( false === $link ) {\n\t\t\treturn $text;\n\t\t}\n\t\t$url = get_permalink( $value );\n\t\tif ( 'edit' === $link ) {\n\t\t\t$url = get_edit_post_link( $value );\n\t\t}\n\n\t\treturn sprintf( '<a href=\"%s\">%s</a>', esc_url( $url ), wp_kses_post( $text ) );\n\t}\n\n\tpublic static function add_new_form( array $field ): string {\n\t\tif ( ! current_user_can( 'edit_posts' ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif ( 1 !== count( $field['post_type'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$post_type = reset( $field['post_type'] );\n\t\tif ( ! post_type_exists( $post_type ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$post_type_object = get_post_type_object( $post_type );\n\n\t\treturn sprintf(\n\t\t\t'<a href=\"#\" class=\"rwmb-post-add-button rwmb-modal-add-button\" data-url=\"%s\">%s</a>',\n\t\t\tadmin_url( $post_type === 'post' ? 'post-new.php' : 'post-new.php?post_type=' . $post_type ),\n\t\t\tesc_html( $post_type_object->labels->add_new_item )\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/radio.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The radio field.\n */\nclass RWMB_Radio_Field extends RWMB_Input_List_Field {\n\tpublic static function normalize( $field ) {\n\t\t$field['multiple'] = false;\n\t\t$field             = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/range.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The HTML5 range field.\n */\nclass RWMB_Range_Field extends RWMB_Number_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\treturn sprintf(\n\t\t\t'<div class=\"rwmb-range-inner\">\n\t\t\t\t%s\n\t\t\t\t<span class=\"rwmb-range-output\">%s</span>\n\t\t\t</div>',\n\t\t\tparent::html( $meta, $field ),\n\t\t\t$meta\n\t\t);\n\t}\n\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-range', RWMB_CSS_URL . 'range.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-range', 'path', RWMB_CSS_DIR . 'range.css' );\n\t\twp_enqueue_script( 'rwmb-range', RWMB_JS_URL . 'range.js', [], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'max' => 10,\n\t\t] );\n\t\t$field = parent::normalize( $field );\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Ensure number in range.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return int\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$new = (float) $new;\n\t\t$min = (float) $field['min'];\n\t\t$max = (float) $field['max'];\n\n\t\tif ( $new < $min ) {\n\t\t\treturn $min;\n\t\t}\n\t\tif ( $new > $max ) {\n\t\t\treturn $max;\n\t\t}\n\t\treturn $new;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/select-advanced.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The beautiful select field using select2 library.\n */\nclass RWMB_Select_Advanced_Field extends RWMB_Select_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\twp_enqueue_style( 'rwmb-select2', RWMB_CSS_URL . 'select2/select2.css', [], '4.0.10' );\n\t\twp_style_add_data( 'rwmb-select2', 'path', RWMB_CSS_DIR . 'select2/select2.css' );\n\n\t\twp_enqueue_style( 'rwmb-select-advanced', RWMB_CSS_URL . 'select-advanced.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-select-advanced', 'path', RWMB_CSS_DIR . 'select-advanced.css' );\n\n\t\twp_register_script( 'rwmb-select2', RWMB_JS_URL . 'select2/select2.min.js', [ 'jquery' ], '4.0.10', true );\n\n\t\t// Localize.\n\t\t$dependencies = [ 'rwmb-select2', 'rwmb-select', 'underscore' ];\n\t\t$locale       = str_replace( '_', '-', get_user_locale() );\n\t\t$locale_short = substr( $locale, 0, 2 );\n\t\t$locale       = file_exists( RWMB_DIR . \"js/select2/i18n/$locale.js\" ) ? $locale : $locale_short;\n\n\t\tif ( file_exists( RWMB_DIR . \"js/select2/i18n/$locale.js\" ) ) {\n\t\t\twp_register_script( 'rwmb-select2-i18n', RWMB_JS_URL . \"select2/i18n/$locale.js\", [ 'rwmb-select2' ], '4.0.10', true );\n\t\t\t$dependencies[] = 'rwmb-select2-i18n';\n\t\t}\n\n\t\twp_enqueue_script( 'rwmb-select-advanced', RWMB_JS_URL . 'select-advanced.js', $dependencies, RWMB_VER, true );\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-select-advanced', 'rwmbSelect2', [\n\t\t\t'isAdmin' => is_admin(),\n\t\t]);\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'js_options'  => [],\n\t\t\t'placeholder' => __( 'Select an item', 'meta-box' ),\n\t\t] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'allowClear'        => true,\n\t\t\t'dropdownAutoWidth' => true,\n\t\t\t'placeholder'       => $field['placeholder'],\n\t\t\t'width'             => 'style',\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = parent::get_attributes( $field, $value );\n\t\t$attributes = wp_parse_args( $attributes, [\n\t\t\t'data-options' => wp_json_encode( $field['js_options'] ),\n\t\t] );\n\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/select-tree.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The select tree field.\n */\nclass RWMB_Select_Tree_Field extends RWMB_Select_Advanced_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$options = self::transform_options( $field['options'] );\n\t\t$walker  = new RWMB_Walker_Select_Tree( $field, $meta );\n\t\treturn $options ? $walker->walk( $options ) : '';\n\t}\n\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\twp_enqueue_style( 'rwmb-select-tree', RWMB_CSS_URL . 'select-tree.css', [ 'rwmb-select' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-select-tree', 'path', RWMB_CSS_DIR . 'select-tree.css' );\n\t\twp_enqueue_script( 'rwmb-select-tree', RWMB_JS_URL . 'select-tree.js', [ 'rwmb-select' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field['multiple'] = true;\n\t\t$field['size']     = 0;\n\t\t$field             = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes             = parent::get_attributes( $field, $value );\n\t\t$attributes['multiple'] = false;\n\t\t$attributes['id']       = false;\n\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/select.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The select field.\n */\nclass RWMB_Select_Field extends RWMB_Choice_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-select', RWMB_CSS_URL . 'select.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-select', 'path', RWMB_CSS_DIR . 'select.css' );\n\t\twp_enqueue_script( 'rwmb-select', RWMB_JS_URL . 'select.js', [ 'jquery' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$options                     = self::transform_options( $field['options'] );\n\t\t$attributes                  = self::call( 'get_attributes', $field, $meta );\n\t\t$attributes['data-selected'] = $meta;\n\t\t$walker                      = new RWMB_Walker_Select( $field, $meta );\n\t\t$output                      = sprintf(\n\t\t\t'<select %s>',\n\t\t\tself::render_attributes( $attributes )\n\t\t);\n\t\tif ( ! $field['multiple'] && $field['placeholder'] ) {\n\t\t\t$output .= '<option value=\"\">' . esc_html( $field['placeholder'] ) . '</option>';\n\t\t}\n\t\t$output .= $walker->walk( $options, $field['flatten'] ? -1 : 0 );\n\t\t$output .= '</select>';\n\t\t$output .= self::get_select_all_html( $field );\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = $field['multiple'] ? RWMB_Multiple_Values_Field::normalize( $field ) : $field;\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'select_all_none' => false,\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = parent::get_attributes( $field, $value );\n\t\t$attributes = wp_parse_args( $attributes, [\n\t\t\t'multiple' => $field['multiple'],\n\t\t] );\n\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Get html for select all|none for multiple select.\n\t *\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function get_select_all_html( $field ) {\n\t\tif ( $field['multiple'] && $field['select_all_none'] ) {\n\t\t\treturn '<div class=\"rwmb-select-all-none\">' . __( 'Select', 'meta-box' ) . ': <a data-type=\"all\" href=\"#\">' . __( 'All', 'meta-box' ) . '</a> | <a data-type=\"none\" href=\"#\">' . __( 'None', 'meta-box' ) . '</a></div>';\n\t\t}\n\t\treturn '';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/sidebar.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The sidebar select field.\n */\nclass RWMB_Sidebar_Field extends RWMB_Object_Choice_Field {\n\tpublic static function normalize( $field ) {\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'placeholder' => __( 'Select a sidebar', 'meta-box' ),\n\t\t] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n\n\tpublic static function query( $meta, array $field ): array {\n\t\tglobal $wp_registered_sidebars;\n\t\t$options = [];\n\t\tforeach ( $wp_registered_sidebars as $sidebar ) {\n\t\t\t$options[ $sidebar['id'] ] = [\n\t\t\t\t'value' => $sidebar['id'],\n\t\t\t\t'label' => $sidebar['name'],\n\t\t\t];\n\t\t}\n\t\treturn $options;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\tif ( ! is_active_sidebar( $value ) ) {\n\t\t\treturn '';\n\t\t}\n\t\tob_start();\n\t\tdynamic_sidebar( $value );\n\t\treturn ob_get_clean();\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/single-image.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The advanced image upload field which uses WordPress media popup to upload and select images.\n */\nclass RWMB_Single_Image_Field extends RWMB_Image_Advanced_Field {\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field['max_file_uploads'] = 1;\n\t\t$field['max_status']       = false;\n\n\t\t$field = parent::normalize( $field );\n\n\t\t$field['attributes'] = wp_parse_args( $field['attributes'], [\n\t\t\t'class'             => '',\n\t\t\t'data-single-image' => 1,\n\t\t] );\n\n\t\t$field['attributes']['class'] .= ' rwmb-image_advanced';\n\t\t$field['multiple']             = false;\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get meta values to save.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return array|mixed\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Get the field value. Return meaningful info of the files.\n\t *\n\t * @param  array    $field   Field parameters.\n\t * @param  array    $args    Not used for this field.\n\t * @param  int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return mixed Full info of uploaded files\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\t$value = RWMB_Field::get_value( $field, $args, $post_id );\n\n\t\tif ( ! is_array( $value ) ) {\n\t\t\treturn RWMB_Image_Field::file_info( $value, $args, $field );\n\t\t}\n\n\t\t$return = [];\n\t\tforeach ( $value as $image_id ) {\n\t\t\t$return[] = RWMB_Image_Field::file_info( $image_id, $args, $field );\n\t\t}\n\n\t\treturn $return;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/slider.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The slider field which users jQueryUI slider widget.\n */\nclass RWMB_Slider_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\t$url = RWMB_CSS_URL . 'jqueryui';\n\t\twp_register_style( 'jquery-ui-core', \"$url/core.css\", [], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-core', 'path', RWMB_CSS_DIR . 'jqueryui/core.css' );\n\n\t\twp_register_style( 'jquery-ui-theme', \"$url/theme.css\", [], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-theme', 'path', RWMB_CSS_DIR . 'jqueryui/theme.css' );\n\n\t\twp_register_style( 'jquery-ui-slider', \"$url/slider.css\", [ 'jquery-ui-core', 'jquery-ui-theme' ], '1.13.2' );\n\t\twp_style_add_data( 'jquery-ui-slider', 'path', RWMB_CSS_DIR . 'jqueryui/slider.css' );\n\n\t\twp_enqueue_style( 'rwmb-slider', RWMB_CSS_URL . 'slider.css', [ 'jquery-ui-slider' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-slider', 'path', RWMB_CSS_DIR . 'slider.css' );\n\t\twp_enqueue_script( 'rwmb-slider', RWMB_JS_URL . 'slider.js', [ 'jquery-ui-slider', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-core' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Get div HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = self::call( 'get_attributes', $field, $meta );\n\t\treturn sprintf(\n\t\t\t'<div class=\"rwmb-slider-inner\">\n\t\t\t\t<div class=\"rwmb-slider-ui\" id=\"%s\" data-options=\"%s\"></div>\n\t\t\t\t<span class=\"rwmb-slider-label\">%s<span>%s</span>%s</span>\n\t\t\t\t<input type=\"hidden\" value=\"%s\" %s>\n\t\t\t</div>',\n\t\t\t$field['id'],\n\t\t\tesc_attr( wp_json_encode( $field['js_options'] ) ),\n\t\t\t$field['prefix'],\n\t\t\t$meta,\n\t\t\t$field['suffix'],\n\t\t\t$meta,\n\t\t\tself::render_attributes( $attributes )\n\t\t);\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field               = parent::normalize( $field );\n\t\t$field               = wp_parse_args( $field, [\n\t\t\t'prefix'     => '',\n\t\t\t'suffix'     => '',\n\t\t\t'std'        => '',\n\t\t\t'js_options' => [],\n\t\t] );\n\t\t$field['js_options'] = wp_parse_args( $field['js_options'], [\n\t\t\t'range' => 'min', // range = 'min' will add a dark background to sliding part, better UI.\n\t\t\t'value' => $field['std'],\n\t\t] );\n\n\t\treturn $field;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/switch.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The Switch field.\n */\nclass RWMB_Switch_Field extends RWMB_Input_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-switch', RWMB_CSS_URL . 'switch.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-switch', 'path', RWMB_CSS_DIR . 'switch.css' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = self::get_attributes( $field, 1 );\n\t\t$output     = sprintf(\n\t\t\t'<label class=\"rwmb-switch-label rwmb-switch-label--' . esc_attr( $field['style'] ) . '\">\n\t\t\t\t<input %s %s>\n\t\t\t\t<div class=\"rwmb-switch-status\">\n\t\t\t\t\t<span class=\"rwmb-switch-slider\"></span>\n\t\t\t\t\t<span class=\"rwmb-switch-on\">' . $field['on_label'] . '</span>\n\t\t\t\t\t<span class=\"rwmb-switch-off\">' . $field['off_label'] . '</span>\n\t\t\t\t</div>\n\t\t\t\t</label>\n\t\t\t',\n\t\t\tself::render_attributes( $attributes ),\n\t\t\tchecked( ! empty( $meta ), 1, false )\n\t\t);\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'style'     => 'rounded',\n\t\t\t'on_label'  => '',\n\t\t\t'off_label' => '',\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field The field parameters.\n\t * @param mixed $value The attribute value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes         = parent::get_attributes( $field, $value );\n\t\t$attributes['type'] = 'checkbox';\n\n\t\treturn $attributes;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param string   $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t$on  = $field['on_label'] ?: __( 'On', 'meta-box' );\n\t\t$off = $field['off_label'] ?: __( 'Off', 'meta-box' );\n\t\treturn $value ? $on : $off;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/taxonomy-advanced.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Taxonomy advanced field which saves terms' IDs in the post meta in CSV format.\n */\nclass RWMB_Taxonomy_Advanced_Field extends RWMB_Taxonomy_Field {\n\t/**\n\t * Save terms in form of comma-separated IDs.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$new = parent::value( $new, $old, $post_id, $field );\n\n\t\treturn implode( ',', $new );\n\t}\n\n\t/**\n\t * Save meta value.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t */\n\tpublic static function save( $new, $old, $post_id, $field ) {\n\t\t$field['multiple'] = false; // Force to save in 1 row in the database.\n\t\tRWMB_Field::save( $new, $old, $post_id, $field );\n\t}\n\n\t/**\n\t * Get raw meta value.\n\t *\n\t * @param int   $object_id Object ID.\n\t * @param array $field     Field parameters.\n\t * @param array $args      Arguments of {@see rwmb_meta()} helper.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function raw_meta( $object_id, $field, $args = [] ) {\n\t\t$args['single'] = true;\n\t\t$meta           = RWMB_Field::raw_meta( $object_id, $field, $args );\n\n\t\tif ( empty( $meta ) ) {\n\t\t\treturn $field['multiple'] ? [] : '';\n\t\t}\n\n\t\t$meta = $field['clone'] ? array_map( 'wp_parse_id_list', $meta ) : wp_parse_id_list( $meta );\n\t\t$meta = array_filter( $meta );\n\n\t\treturn $meta;\n\t}\n\n\t/**\n\t * Get the field value.\n\t * Return list of post term objects.\n\t *\n\t * @param  array    $field   Field parameters.\n\t * @param  array    $args    Additional arguments.\n\t * @param  int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return array List of post term objects.\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\t$value = RWMB_Field::get_value( $field, $args, $post_id );\n\t\tif ( ! $field['clone'] ) {\n\t\t\treturn static::terms_info( $field, $value, $args );\n\t\t}\n\n\t\t$return = [];\n\t\tforeach ( $value as $subvalue ) {\n\t\t\t$return[] = static::terms_info( $field, $subvalue, $args );\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/**\n\t * Get terms information.\n\t *\n\t * @param array  $field    Field parameters.\n\t * @param string $term_ids Term IDs, in CSV format.\n\t * @param array  $args     Additional arguments (for image size).\n\t *\n\t * @return array\n\t */\n\tpublic static function terms_info( $field, $term_ids, $args ) {\n\t\tif ( empty( $term_ids ) ) {\n\t\t\treturn [];\n\t\t}\n\t\t$args = wp_parse_args( [\n\t\t\t'taxonomy'   => $field['taxonomy'],\n\t\t\t'include'    => $term_ids,\n\t\t\t'hide_empty' => false,\n\t\t], $args );\n\n\t\t$info = get_terms( $args );\n\t\t$info = is_array( $info ) ? $info : [];\n\t\treturn $field['multiple'] ? $info : reset( $info );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/taxonomy.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The taxonomy field which aims to replace the built-in WordPress taxonomy UI with more options.\n */\nclass RWMB_Taxonomy_Field extends RWMB_Object_Choice_Field {\n\tpublic static function add_actions() {\n\t\tadd_action( 'wp_ajax_rwmb_get_terms', [ __CLASS__, 'ajax_get_terms' ] );\n\t\tadd_action( 'wp_ajax_nopriv_rwmb_get_terms', [ __CLASS__, 'ajax_get_terms' ] );\n\t}\n\n\tpublic static function ajax_get_terms() {\n\t\tcheck_ajax_referer( 'query' );\n\n\t\t$request = rwmb_request();\n\n\t\t$field = $request->filter_post( 'field', FILTER_DEFAULT, FILTER_FORCE_ARRAY );\n\n\t\t// Required for 'choice_label' filter. See self::filter().\n\t\t$field['clone']        = false;\n\t\t$field['_original_id'] = $field['id'];\n\n\t\t// Search.\n\t\t$field['query_args']['name__like'] = $request->filter_post( 'term' );\n\n\t\t// Pagination.\n\t\t$limit = $field['query_args']['number'] ?? 0;\n\t\t$limit = (int) $limit;\n\t\tif ( 'query:append' === $request->filter_post( '_type' ) ) {\n\t\t\t$page                          = $request->filter_post( 'page', FILTER_SANITIZE_NUMBER_INT );\n\t\t\t$field['query_args']['offset'] = $limit * ( $page - 1 );\n\t\t}\n\n\t\t// Query the database.\n\t\t$items = self::query( null, $field );\n\t\t$items = array_values( $items );\n\n\t\t$items = apply_filters( 'rwmb_ajax_get_terms', $items, $field, $request );\n\n\t\t$data = [ 'items' => $items ];\n\n\t\t// More items for pagination.\n\t\tif ( $limit && count( $items ) === $limit ) {\n\t\t\t$data['more'] = true;\n\t\t}\n\n\t\twp_send_json_success( $data );\n\t}\n\n\t/**\n\t * Add default value for 'taxonomy' field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t// Backwards compatibility with field args.\n\t\tif ( isset( $field['options']['args'] ) ) {\n\t\t\t$field['query_args'] = $field['options']['args'];\n\t\t}\n\t\tif ( isset( $field['options']['taxonomy'] ) ) {\n\t\t\t$field['taxonomy'] = $field['options']['taxonomy'];\n\t\t}\n\t\tif ( isset( $field['options']['type'] ) ) {\n\t\t\t$field['field_type'] = $field['options']['type'];\n\t\t}\n\n\t\t// Set default field args.\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'taxonomy'       => 'category',\n\t\t\t'query_args'     => [],\n\t\t\t'remove_default' => false,\n\t\t] );\n\n\t\t// Force taxonomy to be an array.\n\t\t$field['taxonomy'] = (array) $field['taxonomy'];\n\n\t\t/*\n\t\t * Set default placeholder:\n\t\t * - If multiple taxonomies: show 'Select a term'.\n\t\t * - If single taxonomy: show 'Select a %taxonomy_name%'.\n\t\t */\n\t\t$placeholder   = __( 'Select a term', 'meta-box' );\n\t\t$taxonomy_name = self::get_taxonomy_singular_name( $field );\n\t\tif ( $taxonomy_name ) {\n\t\t\t// Translators: %s is the taxonomy singular label.\n\t\t\t$placeholder = sprintf( __( 'Select a %s', 'meta-box' ), strtolower( $taxonomy_name ) );\n\t\t}\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'placeholder' => $placeholder,\n\t\t] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\t// Set default query args.\n\t\t$limit               = $field['ajax'] ? 10 : 0;\n\t\t$field['query_args'] = wp_parse_args( $field['query_args'], [\n\t\t\t'taxonomy' => $field['taxonomy'],\n\t\t\t'number'   => $limit,\n\t\t] );\n\n\t\tparent::set_ajax_params( $field );\n\n\t\t// Prevent cloning for taxonomy field, not for child fields (taxonomy_advanced).\n\t\tif ( 'taxonomy' === $field['type'] ) {\n\t\t\t$field['clone'] = false;\n\t\t}\n\n\t\treturn $field;\n\t}\n\n\tpublic static function query( $meta, array $field ): array {\n\t\t$args = wp_parse_args( $field['query_args'], [\n\t\t\t'hide_empty'             => false,\n\t\t\t'count'                  => false,\n\t\t\t'update_term_meta_cache' => false,\n\t\t] );\n\n\t\t$meta = wp_parse_id_list( (array) $meta );\n\n\t\t// Query only selected items.\n\t\tif ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {\n\t\t\t$args['include'] = $meta;\n\t\t\t$args['number']  = count( $meta );\n\t\t}\n\n\t\t$terms = get_terms( $args );\n\t\tif ( ! is_array( $terms ) ) {\n\t\t\treturn [];\n\t\t}\n\t\t$options = [];\n\t\tforeach ( $terms as $term ) {\n\t\t\t$label = $term->name ? $term->name : __( '(No title)', 'meta-box' );\n\t\t\t$label = self::filter( 'choice_label', $label, $field, $term );\n\n\t\t\t$options[ $term->term_id ] = [\n\t\t\t\t'value'  => $term->term_id,\n\t\t\t\t'label'  => $label,\n\t\t\t\t'parent' => $term->parent,\n\t\t\t];\n\t\t}\n\t\treturn $options;\n\t}\n\n\t/**\n\t * Get meta values to save.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$new   = (array) $new;\n\t\t$new[] = self::add_term( $field );\n\t\t$new   = array_filter( wp_parse_id_list( $new ) );\n\n\t\treturn $new;\n\t}\n\n\t/**\n\t * Save meta value.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t */\n\tpublic static function save( $new, $old, $post_id, $field ) {\n\t\tif ( empty( $field['id'] ) || ! $field['save_field'] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tforeach ( $field['taxonomy'] as $taxonomy ) {\n\t\t\twp_set_object_terms( $post_id, $new, $taxonomy );\n\t\t}\n\t}\n\n\t/**\n\t * Add new terms if users created some.\n\t *\n\t * @param array $field Field settings.\n\t * @return int|null Term ID if added successfully, null otherwise.\n\t */\n\tprotected static function add_term( $field ) {\n\t\t$term = rwmb_request()->post( $field['id'] . '_new' );\n\t\tif ( ! $field['add_new'] || ! $term || 1 !== count( $field['taxonomy'] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t$taxonomy = reset( $field['taxonomy'] );\n\t\t$term     = wp_insert_term( $term, $taxonomy );\n\t\tif ( is_wp_error( $term ) ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn $term['term_id'] ?? null;\n\t}\n\n\t/**\n\t * Get raw meta value.\n\t *\n\t * @param int   $object_id Object ID.\n\t * @param array $field     Field parameters.\n\t * @param array $args      Arguments of {@see rwmb_meta()} helper.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function raw_meta( $object_id, $field, $args = [] ) {\n\t\tif ( empty( $field['id'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$meta = wp_get_object_terms( $object_id, $field['taxonomy'], [\n\t\t\t'orderby' => 'term_order',\n\t\t] );\n\t\t$meta = wp_list_pluck( $meta, 'term_id' );\n\n\t\treturn $field['multiple'] ? $meta : reset( $meta );\n\t}\n\n\t/**\n\t * Get the field value.\n\t * Return list of post term objects.\n\t *\n\t * @param  array $field   Field parameters.\n\t * @param  array $args    Additional arguments.\n\t * @param  ?int  $post_id Post ID.\n\t *\n\t * @return array List of post term objects.\n\t */\n\tpublic static function get_value( $field, $args = [], $post_id = null ) {\n\t\tif ( ! $post_id ) {\n\t\t\t$post_id = get_the_ID();\n\t\t}\n\t\t$value = wp_get_object_terms( $post_id, $field['taxonomy'], [\n\t\t\t'orderby' => 'term_order',\n\t\t] );\n\n\t\t// Get single value if necessary.\n\t\tif ( ! $field['clone'] && ! $field['multiple'] ) {\n\t\t\t$value = reset( $value );\n\t\t}\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions.\n\t *\n\t * @param array   $field   Field parameters.\n\t * @param WP_Term $value   The term object.\n\t * @param array   $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param ?int    $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\tif ( empty( $value ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$link = $args['link'] ?? 'view';\n\t\t$text = $value->name;\n\n\t\tif ( false === $link ) {\n\t\t\treturn $text;\n\t\t}\n\t\t$url = get_term_link( $value );\n\t\tif ( 'edit' === $link ) {\n\t\t\t$url = get_edit_term_link( $value );\n\t\t}\n\n\t\treturn sprintf( '<a href=\"%s\">%s</a>', esc_url( $url ), esc_html( $text ) );\n\t}\n\n\tpublic static function add_new_form( array $field ): string {\n\t\tif ( ! current_user_can( 'edit_posts' ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// Only add new term if field has only one taxonomy.\n\t\tif ( 1 !== count( $field['taxonomy'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$taxonomy        = reset( $field['taxonomy'] );\n\t\t$taxonomy_object = get_taxonomy( $taxonomy );\n\t\tif ( false === $taxonomy_object ) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t'<a href=\"#\" class=\"rwmb-taxonomy-add-button rwmb-modal-add-button\" data-url=\"%s\">%s</a>',\n\t\t\tadmin_url( 'edit-tags.php?taxonomy=' . $taxonomy_object->name ),\n\t\t\tesc_html( $taxonomy_object->labels->add_new_item )\n\t\t);\n\t}\n\n\tpublic static function admin_enqueue_scripts() {\n\t\t$field = func_get_arg( 0 );\n\t\tparent::admin_enqueue_scripts( $field );\n\t\tstatic::remove_default_meta_box( $field );\n\t}\n\n\tprotected static function remove_default_meta_box( array $field ) {\n\t\tif ( empty( $field['remove_default'] ) || ! function_exists( 'remove_meta_box' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Only run in admin.\n\t\tif ( ! is_admin() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do nothing if in Ajax or Rest API.\n\t\tif ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {\n\t\t\treturn;\n\t\t}\n\n\t\tforeach ( $field['taxonomy'] as $taxonomy ) {\n\t\t\t$id = is_taxonomy_hierarchical( $taxonomy ) ? \"{$taxonomy}div\" : \"tagsdiv-{$taxonomy}\";\n\t\t\tremove_meta_box( $id, null, 'side' );\n\t\t}\n\t}\n\n\tprotected static function get_taxonomy_singular_name( array $field ): string {\n\t\tif ( 1 !== count( $field['taxonomy'] ) ) {\n\t\t\treturn '';\n\t\t}\n\t\t$taxonomy        = reset( $field['taxonomy'] );\n\t\t$taxonomy_object = get_taxonomy( $taxonomy );\n\n\t\treturn false === $taxonomy_object ? '' : $taxonomy_object->labels->singular_name;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/text-list.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The text list field which allows users to enter multiple texts.\n */\nclass RWMB_Text_List_Field extends RWMB_Multiple_Values_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_style( 'rwmb-text-list', RWMB_CSS_URL . 'text-list.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-text-list', 'path', RWMB_CSS_DIR . 'text-list.css' );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\tif ( empty( $field['options'] ) ) {\n\t\t\treturn '';\n\t\t}\n\t\t$html  = [];\n\t\t$input = '<label><span class=\"rwmb-text-list-label\">%s</span> <input %s></label>';\n\n\t\t$attributes         = self::get_attributes( $field, $meta );\n\t\t$attributes['type'] = 'text';\n\n\t\t$count = 0;\n\t\tforeach ( $field['options'] as $placeholder => $label ) {\n\t\t\t$attributes['value']       = $meta[ $count ] ?? '';\n\t\t\t$attributes['placeholder'] = $placeholder;\n\n\t\t\t$html[] = sprintf(\n\t\t\t\t$input,\n\t\t\t\t$label,\n\t\t\t\tself::render_attributes( $attributes )\n\t\t\t);\n\t\t\t++$count;\n\t\t}\n\n\t\treturn implode( ' ', $html );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\tif ( ! $field['clone'] ) {\n\t\t\t$field['class'] .= ' rwmb-text_list-non-cloneable';\n\t\t}\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Set value of meta before saving into database.\n\t * Do not save if all inputs has no value.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\t$filtered = array_filter( $new );\n\t\treturn count( $filtered ) ? $new : [];\n\t}\n\n\t/**\n\t * Format value for the helper functions.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_value( $field, $value, $args, $post_id ) {\n\t\t$output = '<table><thead><tr>';\n\t\tforeach ( $field['options'] as $label ) {\n\t\t\t$output .= \"<th>$label</th>\";\n\t\t}\n\t\t$output .= '</tr></thead><tbody>';\n\n\t\tif ( ! $field['clone'] ) {\n\t\t\t$output .= self::format_single_value( $field, $value, $args, $post_id );\n\t\t} else {\n\t\t\tforeach ( $value as $subvalue ) {\n\t\t\t\t$output .= self::format_single_value( $field, $subvalue, $args, $post_id );\n\t\t\t}\n\t\t}\n\t\t$output .= '</tbody></table>';\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param array    $value   The value.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\t$output = '<tr>';\n\t\tforeach ( $value as $subvalue ) {\n\t\t\t$output .= \"<td>$subvalue</td>\";\n\t\t}\n\t\t$output .= '</tr>';\n\t\treturn $output;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/textarea.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The textarea field.\n */\nclass RWMB_Textarea_Field extends RWMB_Field {\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta Meta value.\n\t * @param array $field Field parameters.\n\t *\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t$attributes = self::get_attributes( $field, $meta );\n\t\treturn sprintf(\n\t\t\t'<textarea %s>%s</textarea>',\n\t\t\tself::render_attributes( $attributes ),\n\t\t\tesc_textarea( $meta )\n\t\t);\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'autocomplete' => false,\n\t\t\t'cols'         => false,\n\t\t\t'rows'         => 3,\n\t\t\t'maxlength'    => false,\n\t\t\t'minlength'    => false,\n\t\t\t'wrap'         => false,\n\t\t\t'readonly'     => false,\n\t\t] );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get the attributes for a field.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $value Meta value.\n\t *\n\t * @return array\n\t */\n\tpublic static function get_attributes( $field, $value = null ) {\n\t\t$attributes = parent::get_attributes( $field, $value );\n\t\t$attributes = wp_parse_args( $attributes, [\n\t\t\t'autocomplete' => $field['autocomplete'],\n\t\t\t'cols'         => $field['cols'],\n\t\t\t'rows'         => $field['rows'],\n\t\t\t'maxlength'    => $field['maxlength'],\n\t\t\t'minlength'    => $field['minlength'],\n\t\t\t'wrap'         => $field['wrap'],\n\t\t\t'readonly'     => $field['readonly'],\n\t\t\t'placeholder'  => $field['placeholder'],\n\t\t] );\n\n\t\treturn $attributes;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/time.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The time picker field.\n */\nclass RWMB_Time_Field extends RWMB_Datetime_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::register_assets();\n\t\twp_enqueue_style( 'jquery-ui-timepicker' );\n\t\twp_enqueue_script( 'rwmb-time' );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field                             = parent::normalize( $field );\n\t\t$field['js_options']['timeFormat'] = empty( $field['format'] ) ? $field['js_options']['timeFormat'] : $field['format'];\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Returns a date() compatible format string from the JavaScript format.\n\t * @link http://www.php.net/manual/en/function.date.php\n\t */\n\tprotected static function get_php_format( array $js_options ): string {\n\t\treturn strtr( $js_options['timeFormat'], self::$time_formats );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/user.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The user select field.\n */\nclass RWMB_User_Field extends RWMB_Object_Choice_Field {\n\tpublic static function add_actions() {\n\t\tadd_action( 'wp_ajax_rwmb_get_users', [ __CLASS__, 'ajax_get_users' ] );\n\t\tadd_action( 'wp_ajax_nopriv_rwmb_get_users', [ __CLASS__, 'ajax_get_users' ] );\n\t\tadd_action( 'clean_user_cache', [ __CLASS__, 'update_cache' ] );\n\t}\n\n\tpublic static function ajax_get_users() {\n\t\tcheck_ajax_referer( 'query' );\n\n\t\t$request = rwmb_request();\n\n\t\t$field = $request->filter_post( 'field', FILTER_DEFAULT, FILTER_FORCE_ARRAY );\n\n\t\t// Required for 'choice_label' filter. See self::filter().\n\t\t$field['clone']        = false;\n\t\t$field['_original_id'] = $field['id'];\n\n\t\t// Search.\n\t\t$term = (string) $request->filter_post( 'term' );\n\t\tif ( $term ) {\n\t\t\t$field['query_args']['search'] = \"*{$term}*\";\n\t\t}\n\n\t\t// Pagination.\n\t\t$limit = $field['query_args']['number'] ?? 0;\n\t\t$limit = (int) $limit;\n\t\tif ( $limit && 'query:append' === $request->filter_post( '_type' ) ) {\n\t\t\t$field['query_args']['paged'] = $request->filter_post( 'page', FILTER_SANITIZE_NUMBER_INT );\n\t\t}\n\n\t\t// Query the database.\n\t\t$items = self::query( null, $field );\n\t\t$items = array_values( $items );\n\n\t\t$items = apply_filters( 'rwmb_ajax_get_users', $items, $field, $request );\n\n\t\t$data = [ 'items' => $items ];\n\n\t\t// More items for pagination.\n\t\tif ( $limit && count( $items ) === $limit ) {\n\t\t\t$data['more'] = true;\n\t\t}\n\n\t\twp_send_json_success( $data );\n\t}\n\n\t/**\n\t * Update object cache to make sure query method below always get the fresh list of users.\n\t * Unlike posts and terms, WordPress doesn't set 'last_changed' for users.\n\t * So we have to do it ourselves.\n\t *\n\t * @see clean_post_cache()\n\t */\n\tpublic static function update_cache() {\n\t\twp_cache_set( 'last_changed', microtime(), 'users' );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t// Set default field args.\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'placeholder'   => __( 'Select a user', 'meta-box' ),\n\t\t\t'query_args'    => [],\n\t\t\t'display_field' => 'display_name',\n\t\t] );\n\n\t\t$field = parent::normalize( $field );\n\n\t\t// Set default query args.\n\t\t$limit               = $field['ajax'] ? 10 : 0;\n\t\t$field['query_args'] = wp_parse_args( $field['query_args'], [\n\t\t\t'number' => $limit,\n\t\t] );\n\n\t\tparent::set_ajax_params( $field );\n\n\t\tif ( $field['ajax'] ) {\n\t\t\t$field['js_options']['ajax_data']['field']['display_field'] = $field['display_field'];\n\t\t}\n\n\t\treturn $field;\n\t}\n\n\tpublic static function query( $meta, array $field ): array {\n\t\t$display_field = $field['display_field'];\n\n\t\t$args = wp_parse_args( $field['query_args'], [\n\t\t\t'orderby' => $display_field,\n\t\t\t'order'   => 'asc',\n\t\t] );\n\n\t\t$args['fields'] = [\n\t\t\t'ID',\n\t\t\t'user_login',\n\t\t\t'user_nicename',\n\t\t\t'user_url',\n\t\t\t'user_registered',\n\t\t\t'user_status',\n\t\t\t'display_name',\n\t\t];\n\n\t\t$meta = wp_parse_id_list( (array) $meta );\n\n\t\t// Query only selected items.\n\t\tif ( ! empty( $field['ajax'] ) && ! empty( $meta ) ) {\n\t\t\t$args['include'] = $meta;\n\t\t\t$args['number']  = count( $meta );\n\t\t}\n\n\t\t// Get from cache to prevent same queries.\n\t\t$last_changed = wp_cache_get_last_changed( 'users' );\n\t\t// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize\n\t\t$key       = md5( serialize( $args ) );\n\t\t$cache_key = \"$key:$last_changed\";\n\t\t$options   = wp_cache_get( $cache_key, 'meta-box-user-field' );\n\t\tif ( false !== $options ) {\n\t\t\treturn $options;\n\t\t}\n\n\t\t$users   = get_users( $args );\n\t\t$options = [];\n\t\tforeach ( $users as $user ) {\n\t\t\t$label = $user->$display_field ?? __( '(No title)', 'meta-box' );\n\t\t\t$label = self::filter( 'choice_label', $label, $field, $user );\n\n\t\t\t$options[ $user->ID ] = [\n\t\t\t\t'value' => $user->ID,\n\t\t\t\t'label' => $label,\n\t\t\t];\n\t\t}\n\n\t\t// Cache the query.\n\t\twp_cache_set( $cache_key, $options, 'meta-box-user-field' );\n\n\t\treturn $options;\n\t}\n\n\t/**\n\t * Format a single value for the helper functions. Sub-fields should overwrite this method if necessary.\n\t *\n\t * @param array    $field   Field parameters.\n\t * @param int      $value   User ID.\n\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_single_value( $field, $value, $args, $post_id ) {\n\t\tif ( empty( $value ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$link          = $args['link'] ?? 'view';\n\t\t$user          = get_userdata( $value );\n\t\t$display_field = $field['display_field'];\n\t\t$text          = $user->$display_field;\n\n\t\tif ( false === $link ) {\n\t\t\treturn $text;\n\t\t}\n\t\t$url = get_author_posts_url( $value );\n\t\tif ( 'edit' === $link ) {\n\t\t\t$url = get_edit_user_link( $value );\n\t\t}\n\n\t\treturn sprintf( '<a href=\"%s\">%s</a>', esc_url( $url ), esc_html( $text ) );\n\t}\n\n\tpublic static function add_new_form( array $field ): string {\n\t\tif ( ! current_user_can( 'create_users' ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t'<a href=\"#\" class=\"rwmb-user-add-button rwmb-modal-add-button\" data-url=\"%s\">%s</a>',\n\t\t\tadmin_url( 'user-new.php' ),\n\t\t\tesc_html__( 'Add New User', 'meta-box' )\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/video.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Video field which uses WordPress media popup to upload and select video.\n */\nclass RWMB_Video_Field extends RWMB_Media_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\tparent::admin_enqueue_scripts();\n\t\twp_enqueue_style( 'rwmb-video', RWMB_CSS_URL . 'video.css', [ 'rwmb-media' ], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-video', 'path', RWMB_CSS_DIR . 'video.css' );\n\t\twp_enqueue_script( 'rwmb-video', RWMB_JS_URL . 'video.js', [ 'rwmb-media' ], RWMB_VER, true );\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-video', 'i18nRwmbVideo', [\n\t\t\t'extensions' => wp_get_video_extensions(),\n\t\t] );\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t *\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field['mime_type'] = 'video';\n\t\t$field              = parent::normalize( $field );\n\n\t\treturn $field;\n\t}\n\n\t/**\n\t * Get uploaded file information.\n\t *\n\t * @param int   $file_id Attachment image ID (post ID). Required.\n\t * @param array $args    Array of arguments (for size).\n\t * @param array $field   Field settings.\n\t *\n\t * @return array|bool False if file not found. Array of image info on success.\n\t */\n\tpublic static function file_info( $file_id, $args = [], $field = [] ) {\n\t\tif ( ! get_attached_file( $file_id ) ) {\n\t\t\treturn false;\n\t\t}\n\t\t$attachment = get_post( $file_id );\n\t\t$url        = wp_get_attachment_url( $attachment->ID );\n\t\t$file_type  = wp_check_filetype( $url, wp_get_mime_types() );\n\t\t$data       = [\n\t\t\t'ID'          => $file_id,\n\t\t\t'src'         => $url,\n\t\t\t'type'        => $file_type['type'],\n\t\t\t'title'       => $attachment->post_title,\n\t\t\t'caption'     => $attachment->post_excerpt,\n\t\t\t'description' => $attachment->post_content,\n\t\t];\n\n\t\t$data['meta'] = [];\n\t\t$meta         = wp_get_attachment_metadata( $attachment->ID );\n\t\tif ( ! empty( $meta ) ) {\n\t\t\tforeach ( wp_get_attachment_id3_keys( $attachment ) as $key => $label ) {\n\t\t\t\tif ( ! empty( $meta[ $key ] ) ) {\n\t\t\t\t\t$data['meta'][ $key ] = $meta[ $key ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) {\n\t\t\t\t$data['dimensions'] = [\n\t\t\t\t\t'width'  => $meta['width'],\n\t\t\t\t\t'height' => $meta['height'],\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\t$data['dimensions'] = [\n\t\t\t\t\t'width'  => 640,\n\t\t\t\t\t'height' => 360,\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\n\t\t$thumb_id = get_post_thumbnail_id( $attachment->ID );\n\t\tif ( ! empty( $thumb_id ) ) {\n\t\t\tlist( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'full' );\n\t\t\t$data['image']                = compact( 'src', 'width', 'height' );\n\t\t\tlist( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'thumbnail' );\n\t\t\t$data['thumb']                = compact( 'src', 'width', 'height' );\n\t\t} else {\n\t\t\t$src           = wp_mime_type_icon( $attachment->ID );\n\t\t\t$width         = 48;\n\t\t\t$height        = 64;\n\t\t\t$data['image'] = compact( 'src', 'width', 'height' );\n\t\t\t$data['thumb'] = compact( 'src', 'width', 'height' );\n\t\t}\n\n\t\treturn $data;\n\t}\n\n\t/**\n\t * Format value for a clone.\n\t *\n\t * @param array        $field   Field parameters.\n\t * @param string|array $value   The field meta value.\n\t * @param array        $args    Additional arguments. Rarely used. See specific fields for details.\n\t * @param int|null     $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return string\n\t */\n\tpublic static function format_clone_value( $field, $value, $args, $post_id ) {\n\t\t$ids = implode( ',', wp_list_pluck( $value, 'ID' ) );\n\n\t\t// Display single video.\n\t\tif ( 1 === count( $value ) ) {\n\t\t\t$video = reset( $value );\n\t\t\treturn wp_video_shortcode( [\n\t\t\t\t'src'    => $video['src'],\n\t\t\t\t'width'  => $video['dimensions']['width'],\n\t\t\t\t'height' => $video['dimensions']['height'],\n\t\t\t] );\n\t\t}\n\n\t\t// Display multiple videos in a playlist.\n\t\treturn wp_playlist_shortcode( [\n\t\t\t'ids'  => $ids,\n\t\t\t'type' => 'video',\n\t\t] );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/fields/wysiwyg.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The WYSIWYG (editor) field.\n */\nclass RWMB_Wysiwyg_Field extends RWMB_Field {\n\tpublic static function admin_enqueue_scripts() {\n\t\twp_enqueue_editor();\n\t\twp_enqueue_style( 'rwmb-wysiwyg', RWMB_CSS_URL . 'wysiwyg.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb-wysiwyg', 'path', RWMB_CSS_DIR . 'wysiwyg.css' );\n\t\twp_enqueue_script( 'rwmb-wysiwyg', RWMB_JS_URL . 'wysiwyg.js', [ 'jquery', 'rwmb' ], RWMB_VER, true );\n\t}\n\n\t/**\n\t * Change field value on save.\n\t *\n\t * @param mixed $new     The submitted meta value.\n\t * @param mixed $old     The existing meta value.\n\t * @param int   $post_id The post ID.\n\t * @param array $field   The field parameters.\n\t * @return string\n\t */\n\tpublic static function value( $new, $old, $post_id, $field ) {\n\t\treturn $field['raw'] ? $new : wpautop( $new );\n\t}\n\n\t/**\n\t * Get field HTML.\n\t *\n\t * @param mixed $meta  Meta value.\n\t * @param array $field Field parameters.\n\t * @return string\n\t */\n\tpublic static function html( $meta, $field ) {\n\t\t// Using output buffering because wp_editor() echos directly.\n\t\tob_start();\n\n\t\t$attributes = self::get_attributes( $field );\n\n\t\t$options                  = $field['options'];\n\t\t$options['textarea_name'] = $field['field_name'];\n\t\tif ( ! empty( $attributes['required'] ) ) {\n\t\t\t$options['editor_class'] .= ' rwmb-wysiwyg-required';\n\t\t}\n\n\t\twp_editor( $meta, $attributes['id'], $options );\n\t\techo '<script class=\"rwmb-wysiwyg-id\" type=\"text/html\" data-id=\"', esc_attr( $attributes['id'] ), '\" data-options=\"', esc_attr( wp_json_encode( $options ) ), '\"></script>';\n\t\techo '<script>if ( typeof rwmb !== \"undefined\" ) rwmb.$document.trigger( \"mb_init_editors\" );</script>';\n\n\t\treturn ob_get_clean();\n\t}\n\n\t/**\n\t * Normalize parameters for field.\n\t *\n\t * @param array $field Field parameters.\n\t * @return array\n\t */\n\tpublic static function normalize( $field ) {\n\t\t$field = parent::normalize( $field );\n\t\t$field = wp_parse_args( $field, [\n\t\t\t'raw'     => false,\n\t\t\t'options' => [],\n\t\t] );\n\n\t\t$field['options'] = wp_parse_args( $field['options'], [\n\t\t\t'editor_class' => 'rwmb-wysiwyg',\n\t\t\t'dfw'          => true, // Use default WordPress full screen UI.\n\t\t] );\n\n\t\t// Keep the filter to be compatible with previous versions.\n\t\t$field['options'] = apply_filters( 'rwmb_wysiwyg_settings', $field['options'] );\n\n\t\treturn $field;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/functions.php",
    "content": "<?php\n/**\n * Plugin public functions.\n */\n\nif ( ! function_exists( 'rwmb_meta' ) ) {\n\t/**\n\t * Get post meta.\n\t *\n\t * @param string   $key     Meta key. Required.\n\t * @param array    $args    Array of arguments. Optional.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return mixed\n\t */\n\tfunction rwmb_meta( $key, $args = [], $post_id = null ) {\n\t\t$args  = wp_parse_args( $args );\n\t\t$field = rwmb_get_field_settings( $key, $args, $post_id );\n\n\t\t/*\n\t\t * If field is not found, which can caused by registering meta boxes for the backend only or conditional registration.\n\t\t * Then fallback to the old method to retrieve meta (which uses get_post_meta() as the latest fallback).\n\t\t */\n\t\tif ( false === $field ) {\n\t\t\t$value = rwmb_meta_legacy( $key, $args, $post_id );\n\t\t\treturn apply_filters( 'rwmb_meta', $value, $key, $args, $post_id );\n\t\t}\n\t\t$value = in_array( $field['type'], [ 'oembed', 'map', 'osm' ], true ) ?\n\t\t\trwmb_the_value( $key, $args, $post_id, false ) :\n\t\t\trwmb_get_value( $key, $args, $post_id );\n\t\treturn apply_filters( 'rwmb_meta', $value, $key, $args, $post_id );\n\t}\n}\n\nif ( ! function_exists( 'rwmb_set_meta' ) ) {\n\t/**\n\t * Set meta value.\n\t *\n\t * @param int    $object_id Object ID. Required.\n\t * @param string $key       Meta key. Required.\n\t * @param mixed  $value     Meta value. Required.\n\t * @param array  $args      Array of arguments. Optional.\n\t */\n\tfunction rwmb_set_meta( $object_id, $key, $value, $args = [] ) {\n\t\t$args  = wp_parse_args( $args );\n\t\t$field = rwmb_get_field_settings( $key, $args, $object_id );\n\n\t\tif ( false === $field ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$old = RWMB_Field::call( $field, 'raw_meta', $object_id );\n\t\t$new = RWMB_Field::process_value( $value, $object_id, $field );\n\n\t\tRWMB_Field::call( $field, 'save', $new, $old, $object_id );\n\n\t\t// For MB Custom Table to flush data from the cache to the database.\n\t\tdo_action( 'rwmb_flush_data', $object_id, $field, $args );\n\t}\n}\n\nif ( ! function_exists( 'rwmb_get_field_settings' ) ) {\n\t/**\n\t * Get field settings.\n\t *\n\t * @param string   $key       Meta key. Required.\n\t * @param array    $args      Array of arguments. Optional.\n\t * @param int|null $object_id Object ID. null for current post. Optional.\n\t *\n\t * @return array\n\t */\n\tfunction rwmb_get_field_settings( $key, $args = [], $object_id = null ) {\n\t\t$args = wp_parse_args( $args, [\n\t\t\t'object_type' => 'post',\n\t\t\t'type'        => '',\n\t\t] );\n\n\t\t/**\n\t\t * Filter meta type from object type and object id.\n\t\t *\n\t\t * @var string       Meta type, default is post type name.\n\t\t * @var string       Object type.\n\t\t * @var ?string|?int Object id.\n\t\t */\n\t\t$type = apply_filters( 'rwmb_meta_type', $args['type'], $args['object_type'], $object_id );\n\t\tif ( ! $type ) {\n\t\t\t$type = get_post_type( $object_id );\n\t\t}\n\n\t\treturn rwmb_get_registry( 'field' )->get( $key, $type, $args['object_type'] );\n\t}\n}\n\nif ( ! function_exists( 'rwmb_meta_legacy' ) ) {\n\t/**\n\t * Get post meta.\n\t *\n\t * @param string   $key     Meta key. Required.\n\t * @param array    $args    Array of arguments. Optional.\n\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t *\n\t * @return mixed\n\t */\n\tfunction rwmb_meta_legacy( $key, $args = [], $post_id = null ) {\n\t\t$args  = wp_parse_args( $args, [\n\t\t\t'type'     => 'text',\n\t\t\t'multiple' => false,\n\t\t\t'clone'    => false,\n\t\t] );\n\t\t$field = [\n\t\t\t'id'       => $key,\n\t\t\t'type'     => $args['type'],\n\t\t\t'clone'    => $args['clone'],\n\t\t\t'multiple' => $args['multiple'],\n\t\t];\n\n\t\t$method = 'get_value';\n\t\tswitch ( $args['type'] ) {\n\t\t\tcase 'taxonomy':\n\t\t\tcase 'taxonomy_advanced':\n\t\t\t\t$field['taxonomy'] = $args['taxonomy'];\n\t\t\t\tbreak;\n\t\t\tcase 'map':\n\t\t\tcase 'osm':\n\t\t\tcase 'oembed':\n\t\t\t\t$method = 'the_value';\n\t\t\t\tbreak;\n\t\t}\n\t\t$field = RWMB_Field::call( 'normalize', $field );\n\n\t\treturn RWMB_Field::call( $method, $field, $args, $post_id );\n\t}\n}\n\nif ( ! function_exists( 'rwmb_get_value' ) ) {\n\t/**\n\t * Get value of custom field.\n\t * This is used to replace old version of rwmb_meta key.\n\t *\n\t * @param  string   $field_id Field ID. Required.\n\t * @param  array    $args     Additional arguments. Rarely used. See specific fields for details.\n\t * @param  int|null $post_id  Post ID. null for current post. Optional.\n\t *\n\t * @return mixed false if field doesn't exist. Field value otherwise.\n\t */\n\tfunction rwmb_get_value( $field_id, $args = [], $post_id = null ) {\n\t\t$args  = wp_parse_args( $args );\n\t\t$field = rwmb_get_field_settings( $field_id, $args, $post_id );\n\n\t\t// Get field value.\n\t\t$value = $field ? RWMB_Field::call( 'get_value', $field, $args, $post_id ) : false;\n\n\t\t/*\n\t\t * Allow developers to change the returned value of field.\n\t\t * For version < 4.8.2, the filter name was 'rwmb_get_field'.\n\t\t *\n\t\t * @param mixed    $value   Field value.\n\t\t * @param array    $field   Field parameters.\n\t\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t\t */\n\t\t$value = apply_filters( 'rwmb_get_value', $value, $field, $args, $post_id );\n\n\t\treturn $value;\n\t}\n}\n\nif ( ! function_exists( 'rwmb_the_value' ) ) {\n\t/**\n\t * Display the value of a field\n\t *\n\t * @param  string   $field_id Field ID. Required.\n\t * @param  array    $args     Additional arguments. Rarely used. See specific fields for details.\n\t * @param  int|null $post_id  Post ID. null for current post. Optional.\n\t * @param  bool     $echo     Display field meta value? Default `true` which works in almost all cases. We use `false` for  the [rwmb_meta] shortcode.\n\t *\n\t * @return string\n\t */\n\tfunction rwmb_the_value( $field_id, $args = [], $post_id = null, $echo = true ) {\n\t\t$args  = wp_parse_args( $args );\n\t\t$field = rwmb_get_field_settings( $field_id, $args, $post_id );\n\n\t\tif ( ! $field ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$output = RWMB_Field::call( 'the_value', $field, $args, $post_id );\n\n\t\t/*\n\t\t * Allow developers to change the returned value of field.\n\t\t * For version < 4.8.2, the filter name was 'rwmb_get_field'.\n\t\t *\n\t\t * @param mixed    $value   Field HTML output.\n\t\t * @param array    $field   Field parameters.\n\t\t * @param array    $args    Additional arguments. Rarely used. See specific fields for details.\n\t\t * @param int|null $post_id Post ID. null for current post. Optional.\n\t\t */\n\t\t$output = apply_filters( 'rwmb_the_value', $output, $field, $args, $post_id );\n\n\t\tif ( $echo ) {\n\t\t\techo $output; // phpcs:ignore WordPress.Security.EscapeOutput\n\t\t}\n\n\t\treturn $output;\n\t}\n}\n\nif ( ! function_exists( 'rwmb_get_object_fields' ) ) {\n\t/**\n\t * Get defined meta fields for object.\n\t *\n\t * @param int|string $type_or_id  Object ID or post type / taxonomy (for terms) / user (for users).\n\t * @param string     $object_type Object type. Use post, term.\n\t *\n\t * @return array\n\t */\n\tfunction rwmb_get_object_fields( $type_or_id, $object_type = 'post' ) {\n\t\t$meta_boxes = rwmb_get_registry( 'meta_box' )->get_by( [ 'object_type' => $object_type ] );\n\t\tarray_walk( $meta_boxes, 'rwmb_check_meta_box_supports', [ $object_type, $type_or_id ] );\n\t\t$meta_boxes = array_filter( $meta_boxes );\n\n\t\t$fields = [];\n\t\tforeach ( $meta_boxes as $meta_box ) {\n\t\t\tforeach ( $meta_box->fields as $field ) {\n\t\t\t\t$fields[ $field['id'] ] = $field;\n\t\t\t}\n\t\t}\n\n\t\treturn $fields;\n\t}\n}\n\nif ( ! function_exists( 'rwmb_check_meta_box_supports' ) ) {\n\t/**\n\t * Check if a meta box supports an object.\n\t *\n\t * @param  object $meta_box    Meta Box object.\n\t * @param  int    $key         Not used.\n\t * @param  array  $object_data Object data (type and ID).\n\t */\n\tfunction rwmb_check_meta_box_supports( &$meta_box, $key, $object_data ) {\n\t\tlist( $object_type, $type_or_id ) = $object_data;\n\n\t\t$type = null;\n\t\t$prop = null;\n\t\tswitch ( $object_type ) {\n\t\t\tcase 'post':\n\t\t\t\t$type = is_numeric( $type_or_id ) ? get_post_type( $type_or_id ) : $type_or_id;\n\t\t\t\t$prop = 'post_types';\n\t\t\t\tbreak;\n\t\t\tcase 'term':\n\t\t\t\t$type = $type_or_id;\n\t\t\t\tif ( is_numeric( $type_or_id ) ) {\n\t\t\t\t\t$term = get_term( $type_or_id );\n\t\t\t\t\t$type = is_wp_error( $term ) || ! $term ? null : $term->taxonomy;\n\t\t\t\t}\n\t\t\t\t$prop = 'taxonomies';\n\t\t\t\tbreak;\n\t\t\tcase 'user':\n\t\t\t\t$type = 'user';\n\t\t\t\t$prop = 'user';\n\t\t\t\tbreak;\n\t\t\tcase 'setting':\n\t\t\t\t$type = $type_or_id;\n\t\t\t\t$prop = 'settings_pages';\n\t\t\t\tbreak;\n\t\t}\n\t\tif ( ! $type ) {\n\t\t\t$meta_box = false;\n\t\t\treturn;\n\t\t}\n\t\tif ( isset( $meta_box->meta_box[ $prop ] ) && ! in_array( $type, $meta_box->meta_box[ $prop ], true ) ) {\n\t\t\t$meta_box = false;\n\t\t}\n\t}\n}\n\nif ( ! function_exists( 'rwmb_get_registry' ) ) {\n\t/**\n\t * Get the registry by type.\n\t * Always return the same instance of the registry.\n\t *\n\t * @param string $type Registry type.\n\t *\n\t * @return object\n\t */\n\tfunction rwmb_get_registry( $type ) {\n\t\tstatic $data = [];\n\n\t\t$class = 'RWMB_' . RWMB_Helpers_String::title_case( $type ) . '_Registry';\n\t\tif ( ! isset( $data[ $type ] ) ) {\n\t\t\t$data[ $type ] = new $class();\n\t\t}\n\n\t\treturn $data[ $type ];\n\t}\n}\n\nif ( ! function_exists( 'rwmb_get_storage' ) ) {\n\t/**\n\t * Get storage instance.\n\t *\n\t * @param string      $object_type Object type. Use post or term.\n\t * @param RW_Meta_Box $meta_box    Meta box object. Optional.\n\t * @return RWMB_Storage_Interface\n\t */\n\tfunction rwmb_get_storage( $object_type, $meta_box = null ) {\n\t\t$class   = 'RWMB_' . RWMB_Helpers_String::title_case( $object_type ) . '_Storage';\n\t\t$class   = class_exists( $class ) ? $class : 'RWMB_Post_Storage';\n\t\t$storage = rwmb_get_registry( 'storage' )->get( $class );\n\n\t\treturn apply_filters( 'rwmb_get_storage', $storage, $object_type, $meta_box );\n\t}\n}\n\nif ( ! function_exists( 'rwmb_request' ) ) {\n\t/**\n\t * Get request object.\n\t *\n\t * @return RWMB_Request\n\t */\n\tfunction rwmb_request() {\n\t\tstatic $request;\n\t\tif ( ! $request ) {\n\t\t\t$request = new RWMB_Request();\n\t\t}\n\t\treturn $request;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/helpers/array.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\nuse MetaBox\\Support\\Arr;\n\n/**\n * No longer needed. Keep it here for backward compatibility.\n */\nclass RWMB_Helpers_Array extends Arr {}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/helpers/field.php",
    "content": "<?php\n/**\n * Field helper functions.\n */\nclass RWMB_Helpers_Field {\n\t/**\n\t * Localize a script only once.\n\t * @link https://github.com/rilwis/meta-box/issues/850\n\t */\n\tpublic static function localize_script_once( string $handle, string $name, array $data ) {\n\t\tif ( ! wp_scripts()->get_data( $handle, 'data' ) ) {\n\t\t\twp_localize_script( $handle, $name, $data );\n\t\t}\n\t}\n\n\tpublic static function add_inline_script_once( string $handle, string $text ) {\n\t\tif ( ! wp_scripts()->get_data( $handle, 'after' ) ) {\n\t\t\twp_add_inline_script( $handle, $text );\n\t\t}\n\t}\n\n\tpublic static function get_class( $field ): string {\n\t\t$type  = self::get_type( $field );\n\t\t$class = 'RWMB_' . RWMB_Helpers_String::title_case( $type ) . '_Field';\n\t\t$class = apply_filters( 'rwmb_field_class', $class, $type );\n\t\treturn class_exists( $class ) ? $class : 'RWMB_Input_Field';\n\t}\n\n\tprivate static function get_type( $field ): string {\n\t\t$type = $field['type'] ?? 'text';\n\t\t$map  = array_merge(\n\t\t\t[\n\t\t\t\t$type => $type,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'file_advanced'  => 'media',\n\t\t\t\t'plupload_image' => 'image_upload',\n\t\t\t\t'url'            => 'text',\n\t\t\t]\n\t\t);\n\n\t\treturn $map[ $type ];\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/helpers/string.php",
    "content": "<?php\n/**\n * String helper functions.\n */\nclass RWMB_Helpers_String {\n\tpublic static function title_case( string $text ): string {\n\t\t$text = str_replace( [ '-', '_' ], ' ', $text );\n\t\t$text = ucwords( $text );\n\t\t$text = str_replace( ' ', '_', $text );\n\n\t\treturn $text;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/helpers/value.php",
    "content": "<?php\n/**\n * Helper functions for checking values.\n *\n * @package Meta Box\n */\n\n/**\n * Helper class for checking values.\n *\n * @package Meta Box\n */\nclass RWMB_Helpers_Value {\n\t/**\n\t * Check if a value is valid for field (not empty \"WordPress way\"), e.g. equals to empty string or array.\n\t *\n\t * @param mixed $value Input value.\n\t * @return bool\n\t */\n\tpublic static function is_valid_for_field( $value ) {\n\t\treturn '' !== $value && [] !== $value;\n\t}\n\n\t/**\n\t * Check if a value is valid for attribute.\n\t *\n\t * @param mixed $value Input value.\n\t * @return bool\n\t */\n\tpublic static function is_valid_for_attribute( $value ) {\n\t\treturn '' !== $value && false !== $value;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/interfaces/storage.php",
    "content": "<?php\n/**\n * Storage interface.\n */\ninterface RWMB_Storage_Interface {\n\t/**\n\t * Get value from storage.\n\t *\n\t * @param  int    $object_id Object id.\n\t * @param  string $name      Field name.\n\t * @param  array  $args      Custom arguments..\n\t * @return mixed\n\t */\n\tpublic function get( $object_id, $name, $args = [] );\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/loader.php",
    "content": "<?php\n/**\n * Load plugin's files with check for installing it as a standalone plugin or\n * a module of a theme / plugin. If standalone plugin is already installed, it\n * will take higher priority.\n */\nclass RWMB_Loader {\n\tprotected function constants() {\n\t\t// Script version, used to add version for scripts and styles.\n\t\tdefine( 'RWMB_VER', '5.10.19' );\n\n\t\tlist( $path, $url ) = self::get_path( dirname( __DIR__ ) );\n\n\t\t// Plugin URLs, for fast enqueuing scripts and styles.\n\t\tdefine( 'RWMB_URL', $url );\n\t\tdefine( 'RWMB_JS_URL', trailingslashit( RWMB_URL . 'js' ) );\n\t\tdefine( 'RWMB_CSS_URL', trailingslashit( RWMB_URL . 'css' ) );\n\n\t\t// Plugin paths, for including files.\n\t\tdefine( 'RWMB_DIR', $path );\n\t\tdefine( 'RWMB_INC_DIR', trailingslashit( RWMB_DIR . 'inc' ) );\n\t\tdefine( 'RWMB_CSS_DIR', trailingslashit( RWMB_DIR . 'css' ) );\n\t}\n\n\t/**\n\t * Get plugin base path and URL.\n\t * The method is static and can be used in extensions.\n\t *\n\t * @link https://deluxeblogtips.com/get-url-of-php-file-in-wordpress/\n\t * @param string $path Base folder path.\n\t * @return array Path and URL.\n\t */\n\tpublic static function get_path( string $path = '' ): array {\n\t\t// Plugin base path.\n\t\t$path       = wp_normalize_path( untrailingslashit( $path ) );\n\t\t$themes_dir = wp_normalize_path( untrailingslashit( dirname( get_stylesheet_directory() ) ) );\n\n\t\t// Default URL.\n\t\t$url = plugins_url( '', $path . '/' . basename( $path ) . '.php' );\n\n\t\t// Included into themes.\n\t\tif (\n\t\t\t! str_starts_with( $path, wp_normalize_path( WP_PLUGIN_DIR ) )\n\t\t\t&& ! str_starts_with( $path, wp_normalize_path( WPMU_PLUGIN_DIR ) )\n\t\t\t&& str_starts_with( $path, $themes_dir )\n\t\t) {\n\t\t\t$themes_url = untrailingslashit( dirname( get_stylesheet_directory_uri() ) );\n\t\t\t$url        = str_replace( $themes_dir, $themes_url, $path );\n\t\t}\n\n\t\t$path = trailingslashit( $path );\n\t\t$url  = trailingslashit( $url );\n\n\t\treturn [ $path, $url ];\n\t}\n\n\t/**\n\t * Bootstrap the plugin.\n\t */\n\tpublic function init() {\n\t\t$this->constants();\n\n\t\t// PSR-4 autoload.\n\t\t$psr4_autoload = dirname( __DIR__ ) . '/vendor/autoload.php';\n\t\tif ( file_exists( $psr4_autoload ) ) {\n\t\t\trequire $psr4_autoload;\n\t\t}\n\n\t\t// Register autoload for classes.\n\t\trequire_once RWMB_INC_DIR . 'autoloader.php';\n\t\t$autoloader = new RWMB_Autoloader();\n\t\t$autoloader->add( RWMB_INC_DIR, 'RW_' );\n\t\t$autoloader->add( RWMB_INC_DIR, 'RWMB_' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'about', 'RWMB_' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'fields', 'RWMB_', '_Field' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'walkers', 'RWMB_Walker_' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'interfaces', 'RWMB_', '_Interface' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'storages', 'RWMB_', '_Storage' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'helpers', 'RWMB_Helpers_' );\n\t\t$autoloader->add( RWMB_INC_DIR . 'update', 'RWMB_Update_' );\n\t\t$autoloader->register();\n\n\t\t// Plugin core.\n\t\t$core = new RWMB_Core();\n\t\t$core->init();\n\n\t\t$shortcode = new RWMB_Shortcode();\n\t\t$shortcode->init();\n\n\t\t// Validation module.\n\t\tnew RWMB_Validation();\n\n\t\t$sanitizer = new RWMB_Sanitizer();\n\t\t$sanitizer->init();\n\n\t\t$media_modal = new RWMB_Media_Modal();\n\t\t$media_modal->init();\n\n\t\t// Update.\n\t\t$update_option  = null;\n\t\t$update_checker = null;\n\t\tif ( class_exists( '\\MetaBox\\Updater\\Option' ) ) {\n\t\t\t$update_option  = new \\MetaBox\\Updater\\Option();\n\t\t\t$update_checker = new \\MetaBox\\Updater\\Checker( $update_option );\n\t\t\t$update_checker->init();\n\t\t\t$update_settings = new \\MetaBox\\Updater\\Settings( $update_checker, $update_option );\n\t\t\t$update_settings->init();\n\t\t\t$update_notification = new \\MetaBox\\Updater\\Notification( $update_checker, $update_option );\n\t\t\t$update_notification->init();\n\t\t}\n\n\t\t// WPML Compatibility.\n\t\tnew \\MetaBox\\Integrations\\WPML();\n\n\t\t// Register categories for page builders.\n\t\tnew \\MetaBox\\Integrations\\Block();\n\t\tnew \\MetaBox\\Integrations\\Bricks();\n\t\tnew \\MetaBox\\Integrations\\Elementor();\n\t\tnew \\MetaBox\\Integrations\\Oxygen();\n\n\t\tif ( is_admin() ) {\n\t\t\tnew \\MetaBox\\Dashboard\\Dashboard( $update_checker, $update_option );\n\t\t\tnew \\MetaBox\\FeaturedPlugins();\n\t\t}\n\n\t\t// Public functions.\n\t\trequire_once RWMB_INC_DIR . 'functions.php';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/media-modal.php",
    "content": "<?php\n/**\n * Add support for editing attachment custom fields in the media modal.\n */\nclass RWMB_Media_Modal {\n\t/**\n\t * List of custom fields.\n\t *\n\t * @var array\n\t */\n\tprotected $fields = [];\n\n\tpublic function init() {\n\t\t// Meta boxes are registered at priority 20, so we use 30 to capture them all.\n\t\tadd_action( 'init', [ $this, 'get_fields' ], 30 );\n\n\t\tadd_filter( 'attachment_fields_to_edit', [ $this, 'add_fields' ], 11, 2 );\n\t\tadd_filter( 'attachment_fields_to_save', [ $this, 'save_fields' ], 11, 2 );\n\t}\n\n\tpublic function get_fields() {\n\t\t$meta_boxes = rwmb_get_registry( 'meta_box' )->all();\n\t\tforeach ( $meta_boxes as $meta_box ) {\n\t\t\tif ( $this->is_in_modal( $meta_box->meta_box ) ) {\n\t\t\t\t$this->fields = array_merge( $this->fields, array_values( $meta_box->fields ) );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add fields to the attachment edit popup.\n\t *\n\t * @param array   $form_fields An array of attachment form fields.\n\t * @param WP_Post $post The WP_Post attachment object.\n\t *\n\t * @return mixed\n\t */\n\tpublic function add_fields( $form_fields, $post ) {\n\t\tif ( empty( $post ) || $this->is_attachment_edit_screen() ) {\n\t\t\treturn $form_fields;\n\t\t}\n\n\t\tforeach ( $this->fields as $field ) {\n\t\t\t$form_field          = $field;\n\t\t\t$form_field['label'] = $field['name'];\n\t\t\t$form_field['input'] = 'html';\n\n\t\t\t// Just ignore the field 'std' because there's no way to check it.\n\t\t\t$meta                = RWMB_Field::call( $field, 'meta', $post->ID, true );\n\t\t\t$form_field['value'] = $meta;\n\n\t\t\t$field['field_name'] = 'attachments[' . $post->ID . '][' . $field['field_name'] . ']';\n\n\t\t\tob_start();\n\t\t\t$field['name'] = ''; // Don't show field label as it's already handled by WordPress.\n\n\t\t\tRWMB_Field::call( 'show', $field, true, $post->ID );\n\n\t\t\t// For MB Custom Table to flush data from the cache to the database.\n\t\t\tdo_action( 'rwmb_flush_data', $post->ID, $field, [] );\n\n\t\t\t$form_field['html'] = ob_get_clean();\n\n\t\t\t$form_fields[ $field['id'] ] = $form_field;\n\t\t}\n\n\t\treturn $form_fields;\n\t}\n\n\t/**\n\t * Save custom fields.\n\t *\n\t * @param array $post An array of post data.\n\t * @param array $attachment An array of attachment metadata.\n\t *\n\t * @return array\n\t */\n\tpublic function save_fields( $post, $attachment ) {\n\t\tforeach ( $this->fields as $field ) {\n\t\t\t$key = $field['id'];\n\n\t\t\t$old = RWMB_Field::call( $field, 'raw_meta', $post['ID'] );\n\t\t\t$new = isset( $attachment[ $key ] ) ? $attachment[ $key ] : '';\n\n\t\t\t$new = RWMB_Field::process_value( $new, $post['ID'], $field );\n\n\t\t\t// Call defined method to save meta value, if there's no methods, call common one.\n\t\t\tRWMB_Field::call( $field, 'save', $new, $old, $post['ID'] );\n\n\t\t\t// For MB Custom Table to flush data from the cache to the database.\n\t\t\tdo_action( 'rwmb_flush_data', $post['ID'], $field, [] );\n\t\t}\n\n\t\treturn $post;\n\t}\n\n\tprivate function is_in_modal( array $meta_box ): bool {\n\t\treturn in_array( 'attachment', $meta_box['post_types'], true ) && ! empty( $meta_box['media_modal'] );\n\t}\n\n\tprivate function is_attachment_edit_screen(): bool {\n\t\tif ( ! function_exists( 'get_current_screen' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$screen = get_current_screen();\n\n\t\treturn $screen && $screen->id === 'attachment';\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/meta-box-registry.php",
    "content": "<?php\n/**\n * A registry for storing all meta boxes.\n *\n * @link https://designpatternsphp.readthedocs.io/en/latest/Structural/Registry/README.html\n */\nclass RWMB_Meta_Box_Registry {\n\tprivate $data = [];\n\n\t/**\n\t * Create a meta box object.\n\t *\n\t * @param array $settings Meta box settings.\n\t * @return \\RW_Meta_Box\n\t */\n\tpublic function make( array $settings ) {\n\t\t$class_name = apply_filters( 'rwmb_meta_box_class_name', 'RW_Meta_Box', $settings );\n\n\t\t$meta_box = new $class_name( $settings );\n\t\t$this->add( $meta_box );\n\t\treturn $meta_box;\n\t}\n\n\tpublic function add( RW_Meta_Box $meta_box ) {\n\t\t$this->data[ $meta_box->id ] = $meta_box;\n\t}\n\n\tpublic function get( $id ) {\n\t\treturn $this->data[ $id ] ?? false;\n\t}\n\n\t/**\n\t * Get meta boxes under some conditions.\n\t *\n\t * @param array $args Custom argument to get meta boxes by.\n\t */\n\tpublic function get_by( array $args ): array {\n\t\t$meta_boxes = $this->data;\n\t\tforeach ( $meta_boxes as $index => $meta_box ) {\n\t\t\tforeach ( $args as $key => $value ) {\n\t\t\t\t$meta_box_key = 'object_type' === $key ? $meta_box->get_object_type() : $meta_box->$key;\n\t\t\t\tif ( $meta_box_key !== $value ) {\n\t\t\t\t\tunset( $meta_boxes[ $index ] );\n\t\t\t\t\tcontinue 2; // Skip the meta box loop.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $meta_boxes;\n\t}\n\n\tpublic function all() {\n\t\treturn $this->data;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/meta-box.php",
    "content": "<?php\nuse MetaBox\\Support\\Arr;\n\n/**\n * A class to rapid develop meta boxes for custom & built in content types\n *\n * @property string $id             Meta Box ID.\n * @property string $title          Meta Box title.\n * @property array  $fields         List of fields.\n * @property array  $post_types     List of post types that the meta box is created for.\n * @property string $style          Meta Box style.\n * @property bool   $closed         Whether to collapse the meta box when page loads.\n * @property string $priority       The meta box priority.\n * @property string $context        Where the meta box is displayed.\n * @property bool   $default_hidden Whether the meta box is hidden by default.\n * @property bool   $autosave       Whether the meta box auto saves.\n * @property bool   $media_modal    Add custom fields to media modal when viewing/editing an attachment.\n */\nclass RW_Meta_Box {\n\t/**\n\t * Meta box parameters.\n\t *\n\t * @var array\n\t */\n\tpublic $meta_box;\n\n\t/**\n\t * Detect whether the meta box is saved at least once.\n\t * Used to prevent duplicated calls like revisions, manual hook to wp_insert_post, etc.\n\t *\n\t * @var bool\n\t */\n\tpublic $saved = false;\n\n\t/**\n\t * The object ID.\n\t *\n\t * @var int\n\t */\n\tpublic $object_id = null;\n\n\t/**\n\t * The object type.\n\t *\n\t * @var string\n\t */\n\tprotected $object_type = 'post';\n\n\tpublic function __construct( array $meta_box ) {\n\t\t$meta_box       = static::normalize( $meta_box );\n\t\t$this->meta_box = $meta_box;\n\n\t\t$this->meta_box['fields'] = static::normalize_fields( $meta_box['fields'], $this->get_storage() );\n\n\t\t$this->meta_box = apply_filters( 'rwmb_meta_box_settings', $this->meta_box );\n\n\t\tif ( $this->is_shown() ) {\n\t\t\t$this->global_hooks();\n\t\t\t$this->object_hooks();\n\t\t}\n\t}\n\n\tpublic function register_fields() {\n\t\t$field_registry = rwmb_get_registry( 'field' );\n\n\t\tforeach ( $this->post_types as $post_type ) {\n\t\t\tforeach ( $this->fields as $field ) {\n\t\t\t\t$field_registry->add( $field, $post_type );\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic function is_shown(): bool {\n\t\t$show = apply_filters( 'rwmb_show', true, $this->meta_box );\n\t\treturn apply_filters( \"rwmb_show_{$this->id}\", $show, $this->meta_box );\n\t}\n\n\tprotected function global_hooks() {\n\t\t// Enqueue common styles and scripts.\n\t\tadd_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ] );\n\n\t\t// Enqueue assets for the block editor only, just for previewing (submission forms, custom blocks).\n\t\t// Don't enqueue on frontend as front-end forms and blocks already call the enqueue() method.\n\t\t// TODO: Uncomment this when we have a way to enqueue assets for the block/site editor.\n\t\t// if ( is_admin() ) {\n\t\t// add_action( 'enqueue_block_assets', [ $this, 'enqueue' ] );\n\t\t// }\n\n\t\t// Add additional actions for fields.\n\t\tforeach ( $this->fields as $field ) {\n\t\t\tRWMB_Field::call( $field, 'add_actions' );\n\t\t}\n\t}\n\n\t/**\n\t * Specific hooks for meta box object. Default is 'post'.\n\t * This should be extended in subclasses to support meta fields for terms, user, settings pages, etc.\n\t */\n\tprotected function object_hooks() {\n\t\t// Add meta box.\n\t\tadd_action( 'add_meta_boxes', [ $this, 'add_meta_boxes' ] );\n\n\t\t// Hide meta box if it's set 'default_hidden'.\n\t\tadd_filter( 'default_hidden_meta_boxes', [ $this, 'hide' ], 10, 2 );\n\n\t\t// Save post meta.\n\t\tforeach ( $this->post_types as $post_type ) {\n\t\t\tif ( 'attachment' === $post_type ) {\n\t\t\t\t// Attachment uses other hooks.\n\t\t\t\t// @see wp_update_post(), wp_insert_attachment().\n\t\t\t\tadd_action( 'edit_attachment', [ $this, 'save_post' ] );\n\t\t\t\tadd_action( 'add_attachment', [ $this, 'save_post' ] );\n\t\t\t} else {\n\t\t\t\tadd_action( \"save_post_{$post_type}\", [ $this, 'save_post' ] );\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic function enqueue() {\n\t\tif ( is_admin() && ! $this->is_edit_screen() && ! $this->is_gutenberg_screen() ) {\n\t\t\treturn;\n\t\t}\n\n\t\twp_enqueue_style( 'rwmb', RWMB_CSS_URL . 'style.css', [], RWMB_VER );\n\t\twp_style_add_data( 'rwmb', 'path', RWMB_CSS_DIR . 'style.css' );\n\t\tif ( is_rtl() ) {\n\t\t\twp_enqueue_style( 'rwmb-rtl', RWMB_CSS_URL . 'style-rtl.css', [], RWMB_VER );\n\t\t\twp_style_add_data( 'rwmb-rtl', 'path', RWMB_CSS_DIR . 'style-rtl.css' );\n\t\t}\n\n\t\twp_enqueue_script( 'rwmb', RWMB_JS_URL . 'script.js', [ 'jquery' ], RWMB_VER, true );\n\n\t\t// Load clone script conditionally.\n\t\tforeach ( $this->fields as $field ) {\n\t\t\tif ( $field['clone'] ) {\n\t\t\t\twp_enqueue_script( 'rwmb-clone', RWMB_JS_URL . 'clone.js', [ 'jquery-ui-sortable' ], RWMB_VER, true );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Enqueue scripts and styles for fields.\n\t\tforeach ( $this->fields as $field ) {\n\t\t\tRWMB_Field::call( $field, 'admin_enqueue_scripts' );\n\t\t}\n\n\t\t// Auto save.\n\t\tif ( $this->autosave ) {\n\t\t\twp_enqueue_script( 'rwmb-autosave', RWMB_JS_URL . 'autosave.js', [ 'jquery' ], RWMB_VER, true );\n\t\t}\n\n\t\t/**\n\t\t * Allow developers to enqueue more scripts and styles\n\t\t *\n\t\t * @param RW_Meta_Box $object Meta Box object\n\t\t */\n\t\tdo_action( 'rwmb_enqueue_scripts', $this );\n\t}\n\n\tprivate function is_gutenberg_screen(): bool {\n\t\t$screen = get_current_screen();\n\n\t\treturn in_array( $screen->base, [ 'site-editor', 'widgets' ], true );\n\t}\n\n\t/**\n\t * Add meta box for multiple post types\n\t */\n\tpublic function add_meta_boxes() {\n\t\t$screen = get_current_screen();\n\t\tadd_filter( \"postbox_classes_{$screen->id}_{$this->id}\", [ $this, 'postbox_classes' ] );\n\n\t\tforeach ( $this->post_types as $post_type ) {\n\t\t\tadd_meta_box(\n\t\t\t\t$this->id,\n\t\t\t\t$this->title,\n\t\t\t\t[ $this, 'show' ],\n\t\t\t\t$post_type,\n\t\t\t\t$this->context,\n\t\t\t\t$this->priority\n\t\t\t);\n\t\t}\n\t}\n\n\tpublic function postbox_classes( array $classes ): array {\n\t\tif ( $this->closed ) {\n\t\t\t$classes[] = 'closed';\n\t\t}\n\t\t$classes[] = \"rwmb-{$this->style}\";\n\n\t\treturn $classes;\n\t}\n\n\tpublic function hide( array $hidden, $screen ): array {\n\t\tif ( $this->is_edit_screen( $screen ) && $this->default_hidden ) {\n\t\t\t$hidden[] = $this->id;\n\t\t}\n\n\t\treturn $hidden;\n\t}\n\n\tpublic function show() {\n\t\tif ( null === $this->object_id ) {\n\t\t\t$this->object_id = $this->get_current_object_id();\n\t\t}\n\t\t$saved = $this->is_saved();\n\n\t\t// Container.\n\t\tprintf(\n\t\t\t'<div class=\"%s\" data-autosave=\"%s\" data-object-type=\"%s\" data-object-id=\"%s\">',\n\t\t\tesc_attr( trim( \"rwmb-meta-box {$this->class}\" ) ),\n\t\t\tesc_attr( $this->autosave ? 'true' : 'false' ),\n\t\t\tesc_attr( $this->object_type ),\n\t\t\tesc_attr( $this->object_id )\n\t\t);\n\n\t\twp_nonce_field( \"rwmb-save-{$this->id}\", \"nonce_{$this->id}\" );\n\n\t\t// Allow users to add custom code before meta box content.\n\t\t// 1st action applies to all meta boxes.\n\t\t// 2nd action applies to only current meta box.\n\t\tdo_action( 'rwmb_before', $this );\n\t\tdo_action( \"rwmb_before_{$this->id}\", $this );\n\n\t\tforeach ( $this->fields as $field ) {\n\t\t\tRWMB_Field::call( 'show', $field, $saved, $this->object_id );\n\t\t}\n\n\t\t$this->render_cleanup();\n\t\t// Allow users to add custom code after meta box content.\n\t\t// 1st action applies to all meta boxes.\n\t\t// 2nd action applies to only current meta box.\n\t\tdo_action( 'rwmb_after', $this );\n\t\tdo_action( \"rwmb_after_{$this->id}\", $this );\n\n\t\t// End container.\n\t\techo '</div>';\n\t}\n\n\tprotected function get_cleanup_fields( $fields, $prefix = '' ) {\n\t\t$names = [];\n\n\t\tforeach ( $fields as $field ) {\n\t\t\t$field_id = $prefix . $field['id'];\n\t\t\tif ( ! empty( $field['fields'] ) ) {\n\t\t\t\t$suffix = $field['clone'] ? '.*.' : '.';\n\t\t\t\t$names  = array_merge( $names, $this->get_cleanup_fields( $field['fields'], $field_id . $suffix ) );\n\t\t\t}\n\n\t\t\tif ( $field['clone'] ) {\n\t\t\t\t$names[] = $field_id;\n\t\t\t}\n\t\t}\n\n\t\treturn $names;\n\t}\n\n\tprotected function render_cleanup() {\n\t\t$names = $this->get_cleanup_fields( $this->fields );\n\n\t\techo '<input type=\"hidden\" name=\"rwmb_cleanup[]\" value=\"' . esc_attr( wp_json_encode( $names ) ) . '\">';\n\t}\n\n\t/**\n\t * Save data from meta box\n\t *\n\t * @param int $object_id Object ID.\n\t */\n\tpublic function save_post( $object_id ) {\n\t\tif ( ! $this->validate() ) {\n\t\t\treturn;\n\t\t}\n\t\t$this->saved = true;\n\n\t\t$object_id       = $this->get_real_object_id( $object_id );\n\t\t$this->object_id = $object_id;\n\n\t\t// Before save action.\n\t\tdo_action( 'rwmb_before_save_post', $object_id );\n\t\tdo_action( \"rwmb_{$this->id}_before_save_post\", $object_id );\n\n\t\tarray_map( [ $this, 'save_field' ], $this->fields );\n\n\t\t// After save action.\n\t\tdo_action( 'rwmb_after_save_post', $object_id );\n\t\tdo_action( \"rwmb_{$this->id}_after_save_post\", $object_id );\n\t}\n\n\tpublic function save_field( array $field ) {\n\t\t$single  = $field['clone'] || ! $field['multiple'];\n\t\t$default = $single ? '' : [];\n\t\t$old     = RWMB_Field::call( $field, 'raw_meta', $this->object_id );\n\t\t$new     = rwmb_request()->post( $field['id'], $default );\n\t\t$new     = RWMB_Field::process_value( $new, $this->object_id, $field );\n\n\t\t// Filter to allow the field to be modified.\n\t\t$field = RWMB_Field::filter( 'field', $field, $field, $new, $old );\n\n\t\t// Call defined method to save meta value, if there's no methods, call common one.\n\t\tRWMB_Field::call( $field, 'save', $new, $old, $this->object_id );\n\n\t\tRWMB_Field::filter( 'after_save_field', null, $field, $new, $old, $this->object_id );\n\t}\n\n\tpublic function validate(): bool {\n\t\t$nonce = rwmb_request()->filter_post( \"nonce_{$this->id}\" );\n\n\t\treturn ! $this->saved\n\t\t\t&& ( ! defined( 'DOING_AUTOSAVE' ) || $this->autosave )\n\t\t\t&& wp_verify_nonce( $nonce, \"rwmb-save-{$this->id}\" );\n\t}\n\n\tpublic static function normalize( $meta_box ) {\n\t\t$default_title = __( 'Meta Box Title', 'meta-box' );\n\t\t$meta_box      = wp_parse_args( $meta_box, [\n\t\t\t'title'          => $default_title,\n\t\t\t'id'             => ! empty( $meta_box['title'] ) ? sanitize_title( $meta_box['title'] ) : sanitize_title( $default_title ),\n\t\t\t'context'        => 'normal',\n\t\t\t'priority'       => 'high',\n\t\t\t'post_types'     => 'post',\n\t\t\t'autosave'       => false,\n\t\t\t'default_hidden' => false,\n\t\t\t'style'          => 'default',\n\t\t\t'class'          => '',\n\t\t\t'fields'         => [],\n\t\t] );\n\n\t\t/**\n\t\t * Use 'post_types' for better understanding and fallback to 'pages' for previous versions.\n\t\t * @since 4.4.1\n\t\t */\n\t\tArr::change_key( $meta_box, 'pages', 'post_types' );\n\n\t\t// Make sure the post type is an array and is sanitized.\n\t\t$meta_box['post_types'] = array_filter( array_map( 'sanitize_key', Arr::from_csv( $meta_box['post_types'] ) ) );\n\n\t\treturn $meta_box;\n\t}\n\n\tpublic static function normalize_fields( array $fields, $storage = null ): array {\n\t\tforeach ( $fields as $k => $field ) {\n\t\t\t$field = RWMB_Field::call( 'normalize', $field );\n\n\t\t\t// Allow to add default values for fields.\n\t\t\t$field = apply_filters( 'rwmb_normalize_field', $field );\n\t\t\t$field = apply_filters( \"rwmb_normalize_{$field['type']}_field\", $field );\n\t\t\t$field = apply_filters( \"rwmb_normalize_{$field['id']}_field\", $field );\n\n\t\t\t$field['storage'] = $storage;\n\n\t\t\t$fields[ $k ] = $field;\n\t\t}\n\n\t\treturn $fields;\n\t}\n\n\t/**\n\t * Check if meta box is saved before.\n\t * This helps to save empty value in meta fields (text, check box, etc.) and set the correct default values.\n\t */\n\tpublic function is_saved() {\n\t\tforeach ( $this->fields as $field ) {\n\t\t\tif ( empty( $field['id'] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t$value = RWMB_Field::call( $field, 'raw_meta', $this->object_id );\n\t\t\tif ( false === $value ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t$single = ! $field['multiple'];\n\t\t\tif ( $field['clone'] ) {\n\t\t\t\t$single = ! $field['clone_as_multiple'];\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t( $single && '' !== $value )\n\t\t\t\t|| ( ! $single && is_array( $value ) && [] !== $value )\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Check if we're on the right edit screen.\n\t *\n\t * @param ?WP_Screen $screen Screen object.\n\t */\n\tpublic function is_edit_screen( $screen = null ) {\n\t\tif ( ! ( $screen instanceof WP_Screen ) ) {\n\t\t\t$screen = get_current_screen();\n\t\t}\n\n\t\treturn in_array( $screen->base, [ 'post', 'upload' ], true ) && in_array( $screen->post_type, $this->post_types, true );\n\t}\n\n\tpublic function __get( string $key ) {\n\t\treturn $this->meta_box[ $key ] ?? false;\n\t}\n\n\t/**\n\t * Set the object ID.\n\t *\n\t * @param mixed $id Object ID.\n\t */\n\tpublic function set_object_id( $id = null ) {\n\t\t$this->object_id = $id;\n\t}\n\n\tpublic function get_object_type(): string {\n\t\treturn $this->object_type;\n\t}\n\n\t/**\n\t * Get storage object.\n\t *\n\t * @return RWMB_Storage_Interface\n\t */\n\tpublic function get_storage() {\n\t\treturn rwmb_get_storage( $this->object_type, $this );\n\t}\n\n\t/**\n\t * Get current object id.\n\t *\n\t * @return int\n\t */\n\tprotected function get_current_object_id() {\n\t\treturn get_the_ID();\n\t}\n\n\t/**\n\t * Get real object ID when submitting.\n\t *\n\t * @param int $object_id Object ID.\n\t * @return int\n\t */\n\tprotected function get_real_object_id( $object_id ) {\n\t\t// Make sure meta is added to the post, not a revision.\n\t\tif ( 'post' !== $this->object_type ) {\n\t\t\treturn $object_id;\n\t\t}\n\t\t$parent = wp_is_post_revision( $object_id );\n\n\t\treturn $parent ?: $object_id;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/request.php",
    "content": "<?php\nuse MetaBox\\Support\\Arr;\n/**\n * A very simple request class that handles form inputs.\n * Based on the code of Symphony framework, (c) Fabien Potencier <fabien@symfony.com>\n *\n * @link https://github.com/laravel/framework/blob/6.x/src/Illuminate/Http/Request.php\n * @link https://github.com/symfony/symfony/blob/4.4/src/Symfony/Component/HttpFoundation/ParameterBag.php\n */\nclass RWMB_Request {\n\tprivate $get_data  = [];\n\tprivate $post_data = [];\n\n\tpublic function __construct() {\n\t\t// @codingStandardsIgnoreLine\n\t\t$this->get_data  = $_GET;\n\t\t// @codingStandardsIgnoreLine\n\t\t$this->post_data = $_POST;\n\n\t\t// Cleanup data\n\t\t$this->post_data = $this->cleanup( $this->post_data );\n\t}\n\n\tpublic function set_get_data( array $data ) {\n\t\t$this->get_data = array_merge( $this->get_data, $data );\n\t}\n\n\tpublic function set_post_data( array $data ) {\n\t\t$this->post_data = array_merge( $this->post_data, $data );\n\t}\n\n\tpublic function get( string $name, $default = null ) {\n\t\treturn $this->get_data[ $name ] ?? $default;\n\t}\n\n\tpublic function post( string $name, $default = null ) {\n\t\treturn $this->post_data[ $name ] ?? $default;\n\t}\n\n\tpublic function cleanup( array $data ) {\n\t\t$cleanups = $data['rwmb_cleanup'] ?? []; // Array of field ids\n\t\tif ( empty( $cleanups ) || ! is_array( $cleanups ) ) {\n\t\t\treturn $data;\n\t\t}\n\n\t\t// Decode the JSON string for each cleanup item\n\t\tforeach ( $cleanups as $cleanup ) {\n\t\t\t$cleanup = json_decode( stripslashes( $cleanup ) );\n\n\t\t\tif ( ! is_array( $cleanup ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tforeach ( $cleanup as $field_id ) {\n\t\t\t\t// Remove the field from the data\n\t\t\t\tArr::remove_first( $data, $field_id );\n\t\t\t}\n\t\t}\n\n\t\treturn $data;\n\t}\n\n\t/**\n\t * Filter a GET parameter.\n\t *\n\t * @param string $name    Parameter name.\n\t * @param int    $filter  FILTER_* constant.\n\t * @param mixed  $options Filter options.\n\t *\n\t * @return mixed\n\t */\n\tpublic function filter_get( string $name, $filter = FILTER_DEFAULT, $options = [] ) {\n\t\t$value = $this->get( $name );\n\t\treturn filter_var( $value, $filter, $options );\n\t}\n\n\t/**\n\t * Filter a POST parameter.\n\t *\n\t * @param string $name    Parameter name.\n\t * @param int    $filter  FILTER_* constant.\n\t * @param mixed  $options Filter options.\n\t *\n\t * @return mixed\n\t */\n\tpublic function filter_post( string $name, $filter = FILTER_DEFAULT, $options = [] ) {\n\t\t$value = $this->post( $name );\n\t\treturn filter_var( $value, $filter, $options );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/sanitizer.php",
    "content": "<?php\n/**\n * Sanitize field value before saving.\n */\nclass RWMB_Sanitizer {\n\tpublic function init() {\n\t\tadd_filter( 'rwmb_sanitize', [ $this, 'sanitize' ], 10, 4 );\n\t}\n\n\t/**\n\t * Sanitize a field value.\n\t *\n\t * @param mixed $value     The submitted new value.\n\t * @param array $field     The field settings.\n\t * @param mixed $old_value The old field value in the database.\n\t * @param int   $object_id The object ID.\n\t */\n\tpublic function sanitize( $value, $field, $old_value = null, $object_id = null ) {\n\t\t// Allow developers to bypass the sanitization.\n\t\tif ( 'none' === $field['sanitize_callback'] ) {\n\t\t\treturn $value;\n\t\t}\n\n\t\t$callback = $this->get_callback( $field );\n\n\t\treturn is_callable( $callback ) ? call_user_func( $callback, $value, $field, $old_value, $object_id ) : $value;\n\t}\n\n\t/**\n\t * Get sanitize callback for a field.\n\t *\n\t * @param  array $field Field settings.\n\t * @return callable\n\t */\n\tprivate function get_callback( $field ) {\n\t\t// User-defined callback.\n\t\tif ( is_callable( $field['sanitize_callback'] ) ) {\n\t\t\treturn $field['sanitize_callback'];\n\t\t}\n\n\t\t$callbacks = [\n\t\t\t'autocomplete'      => [ $this, 'sanitize_choice' ],\n\t\t\t'background'        => [ $this, 'sanitize_background' ],\n\t\t\t'button_group'      => [ $this, 'sanitize_choice' ],\n\t\t\t'checkbox'          => [ $this, 'sanitize_checkbox' ],\n\t\t\t'checkbox_list'     => [ $this, 'sanitize_choice' ],\n\t\t\t'color'             => [ $this, 'sanitize_color' ],\n\t\t\t'date'              => [ $this, 'sanitize_datetime' ],\n\t\t\t'datetime'          => [ $this, 'sanitize_datetime' ],\n\t\t\t'email'             => 'sanitize_email',\n\t\t\t'fieldset_text'     => [ $this, 'sanitize_text' ],\n\t\t\t'file'              => [ $this, 'sanitize_file' ],\n\t\t\t'file_advanced'     => [ $this, 'sanitize_object' ],\n\t\t\t'file_input'        => [ $this, 'sanitize_url' ],\n\t\t\t'file_upload'       => [ $this, 'sanitize_object' ],\n\t\t\t'hidden'            => 'sanitize_text_field',\n\t\t\t'image'             => [ $this, 'sanitize_file' ],\n\t\t\t'image_advanced'    => [ $this, 'sanitize_object' ],\n\t\t\t'image_select'      => [ $this, 'sanitize_choice' ],\n\t\t\t'image_upload'      => [ $this, 'sanitize_object' ],\n\t\t\t'key_value'         => [ $this, 'sanitize_text' ],\n\t\t\t'map'               => [ $this, 'sanitize_map' ],\n\t\t\t'number'            => [ $this, 'sanitize_number' ],\n\t\t\t'oembed'            => [ $this, 'sanitize_url' ],\n\t\t\t'osm'               => [ $this, 'sanitize_map' ],\n\t\t\t'password'          => 'sanitize_text_field',\n\t\t\t'post'              => [ $this, 'sanitize_object' ],\n\t\t\t'radio'             => [ $this, 'sanitize_choice' ],\n\t\t\t'range'             => [ $this, 'sanitize_number' ],\n\t\t\t'select'            => [ $this, 'sanitize_choice' ],\n\t\t\t'select_advanced'   => [ $this, 'sanitize_choice' ],\n\t\t\t'sidebar'           => [ $this, 'sanitize_text' ],\n\t\t\t'single_image'      => 'absint',\n\t\t\t'slider'            => [ $this, 'sanitize_slider' ],\n\t\t\t'switch'            => [ $this, 'sanitize_checkbox' ],\n\t\t\t'taxonomy'          => [ $this, 'sanitize_object' ],\n\t\t\t'taxonomy_advanced' => [ $this, 'sanitize_taxonomy_advanced' ],\n\t\t\t'text'              => 'sanitize_text_field',\n\t\t\t'text_list'         => [ $this, 'sanitize_text' ],\n\t\t\t'textarea'          => 'wp_kses_post',\n\t\t\t'time'              => 'sanitize_text_field',\n\t\t\t'url'               => [ $this, 'sanitize_url' ],\n\t\t\t'user'              => [ $this, 'sanitize_object' ],\n\t\t\t'video'             => [ $this, 'sanitize_object' ],\n\t\t\t'wysiwyg'           => 'wp_kses_post',\n\t\t];\n\n\t\t$type = $field['type'];\n\n\t\treturn $callbacks[ $type ] ?? null;\n\t}\n\n\t/**\n\t * Set the value of checkbox to 1 or 0 instead of 'checked' and empty string.\n\t * This prevents using default value once the checkbox has been unchecked.\n\t *\n\t * @link https://github.com/rilwis/meta-box/issues/6\n\t * @param string $value Checkbox value.\n\t */\n\tprivate function sanitize_checkbox( $value ): int {\n\t\treturn (int) ! empty( $value );\n\t}\n\n\t/**\n\t * Sanitize numeric value.\n\t *\n\t * @param  string $value The number value.\n\t * @return string\n\t */\n\tprivate function sanitize_number( $value ) {\n\t\treturn is_numeric( $value ) ? $value : '';\n\t}\n\n\tprivate function sanitize_color( string $value ): string {\n\t\tif ( str_contains( $value, 'hsl' ) ) {\n\t\t\treturn wp_unslash( $value );\n\t\t}\n\n\t\tif ( ! str_contains( $value, 'rgb' ) ) {\n\t\t\treturn (string) sanitize_hex_color( $value );\n\t\t}\n\n\t\t// rgba value.\n\t\t$red   = '';\n\t\t$green = '';\n\t\t$blue  = '';\n\t\t$alpha = 1;\n\n\t\tif ( str_contains( $value, 'rgba' ) ) {\n\t\t\tsscanf( $value, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );\n\t\t} else {\n\t\t\tsscanf( $value, 'rgb(%d,%d,%d)', $red, $green, $blue );\n\t\t}\n\n\t\treturn 'rgba(' . $red . ',' . $green . ',' . $blue . ',' . $alpha . ')';\n\t}\n\n\t/**\n\t * Sanitize value for a choice field.\n\t *\n\t * @param  string|array $value The submitted value.\n\t * @param  array        $field The field settings.\n\t * @return string|array\n\t */\n\tprivate function sanitize_choice( $value, $field ) {\n\t\t$options = RWMB_Choice_Field::transform_options( $field['options'] );\n\t\t$options = wp_list_pluck( $options, 'value' );\n\t\t$value   = wp_unslash( $value );\n\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\treturn is_array( $value ) ? array_intersect( $value, $options ) : ( in_array( $value, $options ) ? $value : '' );\n\t}\n\n\t/**\n\t * Sanitize object & media field.\n\t *\n\t * @param  int|array $value The submitted value.\n\t * @return int|array\n\t */\n\tprivate function sanitize_object( $value ) {\n\t\treturn is_array( $value ) ? array_filter( array_map( 'absint', $value ) ) : ( $value ? absint( $value ) : '' );\n\t}\n\n\t/**\n\t * Sanitize background field.\n\t *\n\t * @param  array $value The submitted value.\n\t * @return array\n\t */\n\tprivate function sanitize_background( $value ) {\n\t\t$value          = wp_parse_args( $value, [\n\t\t\t'color'      => '',\n\t\t\t'image'      => '',\n\t\t\t'repeat'     => '',\n\t\t\t'attachment' => '',\n\t\t\t'position'   => '',\n\t\t\t'size'       => '',\n\t\t] );\n\t\t$value['color'] = $this->sanitize_color( $value['color'] );\n\t\t$value['image'] = esc_url_raw( $value['image'] );\n\n\t\t$value['repeat']     = in_array( $value['repeat'], [ 'no-repeat', 'repeat', 'repeat-x', 'repeat-y', 'inherit' ], true ) ? $value['repeat'] : '';\n\t\t$value['position']   = in_array( $value['position'], [ 'top left', 'top center', 'top right', 'center left', 'center center', 'center right', 'bottom left', 'bottom center', 'bottom right' ], true ) ? $value['position'] : '';\n\t\t$value['attachment'] = in_array( $value['attachment'], [ 'fixed', 'scroll', 'inherit' ], true ) ? $value['attachment'] : '';\n\t\t$value['size']       = in_array( $value['size'], [ 'inherit', 'cover', 'contain' ], true ) ? $value['size'] : '';\n\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Sanitize text field.\n\t *\n\t * @param  string|array $value The submitted value.\n\t * @return string|array\n\t */\n\tprivate function sanitize_text( $value ) {\n\t\treturn is_array( $value ) ? array_map( __METHOD__, $value ) : sanitize_text_field( $value );\n\t}\n\n\t/**\n\t * Sanitize file, image field.\n\t *\n\t * @param  array $value The submitted value.\n\t * @param  array $field The field settings.\n\t * @return array\n\t */\n\tprivate function sanitize_file( $value, $field ) {\n\t\treturn $field['upload_dir'] ? array_map( 'esc_url_raw', $value ) : $this->sanitize_object( $value );\n\t}\n\n\t/**\n\t * Sanitize slider field.\n\t *\n\t * @param  mixed $value The submitted value.\n\t * @param  array $field The field settings.\n\t * @return string|int|float\n\t */\n\tprivate function sanitize_slider( $value, $field ) {\n\t\treturn true === $field['js_options']['range'] ? sanitize_text_field( $value ) : $this->sanitize_number( $value );\n\t}\n\n\t/**\n\t * Sanitize datetime field.\n\t *\n\t * @param  mixed $value The submitted value.\n\t * @param  array $field The field settings.\n\t * @return float|string\n\t */\n\tprivate function sanitize_datetime( $value, $field ) {\n\t\treturn $field['timestamp'] ? (float) $value : sanitize_text_field( $value );\n\t}\n\n\tprivate function sanitize_map( $value ): string {\n\t\t$value                               = sanitize_text_field( $value );\n\t\tlist( $latitude, $longitude, $zoom ) = explode( ',', $value . ',,' );\n\n\t\t$latitude  = (float) $latitude;\n\t\t$longitude = (float) $longitude;\n\t\t$zoom      = (int) $zoom;\n\n\t\treturn \"$latitude,$longitude,$zoom\";\n\t}\n\n\tprivate function sanitize_taxonomy_advanced( $value ): string {\n\t\treturn implode( ',', wp_parse_id_list( $value ) );\n\t}\n\n\tprivate function sanitize_url( string $value ): string {\n\t\treturn esc_url_raw( $value );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/shortcode.php",
    "content": "<?php\nuse MetaBox\\Support\\Arr;\n\nclass RWMB_Shortcode {\n\tpublic function init() {\n\t\tadd_shortcode( 'rwmb_meta', [ $this, 'register_shortcode' ] );\n\t}\n\n\tpublic function register_shortcode( $atts ) {\n\t\t$atts = wp_parse_args( $atts, [\n\t\t\t'id'                => '',\n\t\t\t'object_id'         => null,\n\t\t\t'attribute'         => '',\n\t\t\t'render_shortcodes' => 'true',\n\t\t] );\n\t\tArr::change_key( $atts, 'post_id', 'object_id' );\n\t\tArr::change_key( $atts, 'meta_key', 'id' );\n\n\t\tif ( empty( $atts['id'] ) ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t$field_id  = $atts['id'];\n\t\t$object_id = $atts['object_id'];\n\n\t\tunset( $atts['id'], $atts['object_id'] );\n\n\t\t$value = $this->get_value( $field_id, $object_id, $atts );\n\t\t$value = 'true' === $atts['render_shortcodes'] ? do_shortcode( $value ) : $value;\n\n\t\t$secure = apply_filters( 'rwmb_meta_shortcode_secure', true, $field_id, $atts, $object_id );\n\t\t$secure = apply_filters( \"rwmb_meta_shortcode_secure_{$field_id}\", $secure, $atts, $object_id );\n\n\t\tif ( $secure ) {\n\t\t\t$value = wp_kses_post( $value );\n\t\t}\n\n\t\treturn $value;\n\t}\n\n\tprivate function get_value( $field_id, $object_id, $atts ) {\n\t\t// If we pass object_id via shortcode, we need to make sure current user\n\t\t// has permission to view the object\n\t\tif ( ! is_null( $object_id ) ) {\n\t\t\t$has_object_permission = $this->check_object_permission( $object_id, $atts );\n\n\t\t\tif ( ! $has_object_permission ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t$attribute = $atts['attribute'];\n\t\tif ( ! $attribute ) {\n\t\t\treturn rwmb_the_value( $field_id, $atts, $object_id, false );\n\t\t}\n\n\t\t$value = rwmb_get_value( $field_id, $atts, $object_id );\n\n\t\tif ( ! is_array( $value ) && ! is_object( $value ) ) {\n\t\t\treturn $value;\n\t\t}\n\n\t\tif ( is_object( $value ) ) {\n\t\t\treturn $value->$attribute;\n\t\t}\n\n\t\tif ( isset( $value[ $attribute ] ) ) {\n\t\t\treturn $value[ $attribute ];\n\t\t}\n\n\t\t$value = wp_list_pluck( $value, $attribute );\n\t\t$value = implode( ',', array_filter( $value ) );\n\n\t\treturn $value;\n\t}\n\n\tprivate function check_object_permission( $object_id, $atts ) {\n\t\t// Skip checking if object_type is not post\n\t\tif ( isset( $atts['object_type'] ) && $atts['object_type'] !== 'post' ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t$post = get_post( $object_id );\n\t\tif ( ! $post ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Skip checking if post status is publish AND no password is set\n\t\tif ( 'publish' === $post->post_status && ! post_password_required( $post ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t$object_type = get_post_type_object( $post->post_type );\n\t\tif ( ! $object_type ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$read_post = $object_type->cap->read_post;\n\n\t\treturn current_user_can( $read_post, $object_id );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/storage-registry.php",
    "content": "<?php\n/**\n * Storage registry class\n */\nclass RWMB_Storage_Registry {\n\tprotected $storages = [];\n\n\t/**\n\t * Get storage instance.\n\t *\n\t * @param string $class_name Storage class name.\n\t * @return RWMB_Storage_Interface\n\t */\n\tpublic function get( $class_name ) {\n\t\tif ( empty( $this->storages[ $class_name ] ) ) {\n\t\t\t$this->storages[ $class_name ] = new $class_name();\n\t\t}\n\n\t\treturn $this->storages[ $class_name ];\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/storages/base.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Base storage.\n */\nclass RWMB_Base_Storage implements RWMB_Storage_Interface {\n\t/**\n\t * Object type.\n\t *\n\t * @var string\n\t */\n\tprotected $object_type;\n\n\t/**\n\t * Retrieve metadata for the specified object.\n\t *\n\t * @param int        $object_id ID of the object metadata is for.\n\t * @param string     $meta_key  Optional. Metadata key. If not specified, retrieve all metadata for\n\t *                              the specified object.\n\t * @param bool|array $args      Optional, default is false.\n\t *                              If true, return only the first value of the specified meta_key.\n\t *                              If is array, use the `single` element.\n\t *                              This parameter has no effect if meta_key is not specified.\n\t * @return mixed Single metadata value, or array of values.\n\t *\n\t * @see get_metadata()\n\t */\n\tpublic function get( $object_id, $meta_key, $args = false ) {\n\t\tif ( is_array( $args ) ) {\n\t\t\t$single = ! empty( $args['single'] );\n\t\t} else {\n\t\t\t$single = (bool) $args;\n\t\t}\n\n\t\treturn get_metadata( $this->object_type, $object_id, $meta_key, $single );\n\t}\n\n\t/**\n\t * Add metadata\n\t *\n\t * @param int    $object_id  ID of the object metadata is for.\n\t * @param string $meta_key   Metadata key.\n\t * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.\n\t * @param bool   $unique     Optional, default is false.\n\t *                           Whether the specified metadata key should be unique for the object.\n\t *                           If true, and the object already has a value for the specified metadata key,\n\t *                           no change will be made.\n\t * @return int|false The meta ID on success, false on failure.\n\t *\n\t * @see add_metadata()\n\t */\n\tpublic function add( $object_id, $meta_key, $meta_value, $unique = false ) {\n\t\treturn add_metadata( $this->object_type, $object_id, $meta_key, $meta_value, $unique );\n\t}\n\n\t/**\n\t * Update metadata.\n\t *\n\t * @param int    $object_id  ID of the object metadata is for.\n\t * @param string $meta_key   Metadata key.\n\t * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar.\n\t * @param mixed  $prev_value Optional. If specified, only update existing metadata entries with\n\t *                           the specified value. Otherwise, update all entries.\n\t * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.\n\t *\n\t * @see update_metadata()\n\t */\n\tpublic function update( $object_id, $meta_key, $meta_value, $prev_value = '' ) {\n\t\treturn update_metadata( $this->object_type, $object_id, $meta_key, $meta_value, $prev_value );\n\t}\n\n\t/**\n\t * Delete metadata.\n\t *\n\t * @param int    $object_id  ID of the object metadata is for.\n\t * @param string $meta_key   Metadata key.\n\t * @param mixed  $meta_value Optional. Metadata value. Must be serializable if non-scalar. If specified, only delete\n\t *                           metadata entries with this value. Otherwise, delete all entries with the specified meta_key.\n\t *                           Pass `null, `false`, or an empty string to skip this check. (For backward compatibility,\n\t *                           it is not possible to pass an empty string to delete those entries with an empty string\n\t *                           for a value).\n\t * @param bool   $delete_all Optional, default is false. If true, delete matching metadata entries for all objects,\n\t *                           ignoring the specified object_id. Otherwise, only delete matching metadata entries for\n\t *                           the specified object_id.\n\t * @return bool True on successful delete, false on failure.\n\t *\n\t * @see delete_metadata()\n\t */\n\tpublic function delete( $object_id, $meta_key, $meta_value = '', $delete_all = false ) {\n\t\treturn delete_metadata( $this->object_type, $object_id, $meta_key, $meta_value, $delete_all );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/storages/post.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Post storage\n *\n * @package Meta Box\n */\n\n/**\n * Class RWMB_Post_Storage\n */\nclass RWMB_Post_Storage extends RWMB_Base_Storage {\n\n\t/**\n\t * Object type.\n\t *\n\t * @var string\n\t */\n\tprotected $object_type = 'post';\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/validation.php",
    "content": "<?php\n/**\n * Validation module.\n */\nclass RWMB_Validation {\n\tpublic function __construct() {\n\t\tadd_action( 'rwmb_after', [ $this, 'rules' ] );\n\t\tadd_action( 'rwmb_enqueue_scripts', [ $this, 'enqueue' ] );\n\t}\n\n\t/**\n\t * Output validation rules of each meta box.\n\t * The rules are outputted in [data-validation] attribute of an hidden <script> and will be converted into JSON by JS.\n\t */\n\tpublic function rules( RW_Meta_Box $meta_box ) {\n\t\t$settings = $meta_box->meta_box;\n\t\tif ( empty( $settings['validation'] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$prefix     = $settings['prefix'] ?? ''; // Get field ID prefix from the builder.\n\t\t$fields     = $settings['fields'];\n\t\t$validation = $settings['validation'];\n\t\t$ids        = wp_list_pluck( $fields, 'id' ); // Don't use array_column() as it doesn't preserve keys.\n\n\t\t// Add prefix for validation rules.\n\t\tforeach ( $validation as &$rules ) {\n\t\t\t$rules = array_combine(\n\t\t\t\tarray_map( function ( $key ) use ( $fields, $prefix, $ids ) {\n\t\t\t\t\t$id    = $prefix . $key;\n\t\t\t\t\t$index = array_search( $id, $ids, true );\n\n\t\t\t\t\tif ( $index === false ) {\n\t\t\t\t\t\treturn $id;\n\t\t\t\t\t}\n\n\t\t\t\t\t$field = $fields[ $index ];\n\n\t\t\t\t\tif ( in_array( $field['type'], [ 'file', 'image' ], true ) ) {\n\t\t\t\t\t\treturn $field['clone'] ? $field['index_name'] : $field['input_name'];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn $id;\n\t\t\t\t}, array_keys( $rules ) ),\n\t\t\t\t$rules\n\t\t\t);\n\t\t}\n\n\t\techo '<script type=\"text/html\" class=\"rwmb-validation\" data-validation=\"' . esc_attr( wp_json_encode( $validation ) ) . '\"></script>';\n\t}\n\n\tpublic function enqueue() {\n\t\twp_enqueue_script( 'jquery-validation', RWMB_JS_URL . 'validation/jquery.validate.js', [ 'jquery' ], '1.20.0', true );\n\t\twp_enqueue_script( 'jquery-validation-additional-methods', RWMB_JS_URL . 'validation/additional-methods.js', [ 'jquery-validation' ], '1.20.0', true );\n\t\twp_enqueue_script( 'rwmb-validation', RWMB_JS_URL . 'validation/validation.js', [ 'jquery-validation-additional-methods', 'rwmb' ], RWMB_VER, true );\n\n\t\t$locale       = determine_locale();\n\t\t$locale_short = substr( $locale, 0, 2 );\n\t\t$locale       = file_exists( RWMB_DIR . \"js/validation/i18n/messages_$locale.js\" ) ? $locale : $locale_short;\n\n\t\tif ( file_exists( RWMB_DIR . \"js/validation/i18n/messages_$locale.js\" ) ) {\n\t\t\twp_enqueue_script( 'jquery-validation-i18n', RWMB_JS_URL . \"validation/i18n/messages_$locale.js\", [ 'jquery-validation-additional-methods' ], '1.20.0', true );\n\t\t}\n\n\t\tRWMB_Helpers_Field::localize_script_once( 'rwmb-validation', 'rwmbValidation', [\n\t\t\t'message' => esc_html( apply_filters( 'rwmb_validation_message_string', __( 'Please correct the errors highlighted below and try again.', 'meta-box' ) ) ),\n\t\t] );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/walkers/base.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Base walker.\n * Walkers must inherit this class and overwrite methods with its own.\n */\nabstract class RWMB_Walker_Base extends Walker {\n\t/**\n\t * Field settings.\n\t *\n\t * @var array\n\t */\n\tpublic $field;\n\n\t/**\n\t * Field meta data.\n\t *\n\t * @var array\n\t */\n\tpublic $meta;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $meta  Meta value.\n\t */\n\tpublic function __construct( $field, $meta ) {\n\t\t$this->db_fields = [\n\t\t\t'id'     => 'value',\n\t\t\t'parent' => 'parent',\n\t\t];\n\n\t\t$this->field = $field;\n\t\t$this->meta  = (array) $meta;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/walkers/input-list.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * The input list walker for checkbox and radio list fields.\n */\nclass RWMB_Walker_Input_List extends RWMB_Walker_Base {\n\t/**\n\t * Starts the list before the elements are added.\n\t *\n\t * @param string $output Passed by reference. Used to append additional content.\n\t * @param int    $depth  Depth of the item.\n\t * @param array  $args   An array of additional arguments.\n\t */\n\tpublic function start_lvl( &$output, $depth = 0, $args = [] ) {\n\t\t$output .= '<fieldset class=\"rwmb-input-list\">';\n\t}\n\n\t/**\n\t * Ends the list of after the elements are added.\n\t *\n\t * @param string $output Passed by reference. Used to append additional content.\n\t * @param int    $depth  Depth of the item.\n\t * @param array  $args   An array of additional arguments.\n\t */\n\tpublic function end_lvl( &$output, $depth = 0, $args = [] ) {\n\t\t$output .= '</fieldset>';\n\t}\n\n\t/**\n\t * Start the element output.\n\t *\n\t * @param string $output            Passed by reference. Used to append additional content.\n\t * @param object $object            The data object.\n\t * @param int    $depth             Depth of the item.\n\t * @param array  $args              An array of additional arguments.\n\t * @param int    $current_object_id ID of the current item.\n\t */\n\tpublic function start_el( &$output, $object, $depth = 0, $args = [], $current_object_id = 0 ) {\n\t\t$attributes = RWMB_Field::call( 'get_attributes', $this->field, $object->value );\n\n\t\t$output .= sprintf(\n\t\t\t'<label><input %s %s>%s</label>',\n\t\t\tRWMB_Field::render_attributes( $attributes ),\n\t\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\t\tchecked( in_array( $object->value, $this->meta ), true, false ),\n\t\t\t$object->label\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/walkers/select-tree.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Select tree walker for cascading select fields.\n */\nclass RWMB_Walker_Select_Tree {\n\t/**\n\t * Field settings.\n\t *\n\t * @var array\n\t */\n\tpublic $field;\n\n\t/**\n\t * Field meta value.\n\t *\n\t * @var array\n\t */\n\tpublic $meta;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param array $field Field parameters.\n\t * @param mixed $meta  Meta value.\n\t */\n\tpublic function __construct( $field, $meta ) {\n\t\t$this->field = $field;\n\t\t$this->meta  = (array) $meta;\n\t}\n\n\t/**\n\t * Display array of elements hierarchically.\n\t *\n\t * @param array $options An array of options.\n\t *\n\t * @return string\n\t */\n\tpublic function walk( $options ) {\n\t\t$children = [];\n\n\t\tforeach ( $options as $option ) {\n\t\t\t$parent                = $option->parent ?? 0;\n\t\t\t$children[ $parent ][] = $option;\n\t\t}\n\n\t\t$top_level = isset( $children[0] ) ? 0 : $options[0]->parent;\n\t\treturn $this->display_level( $children, $top_level, true );\n\t}\n\n\t/**\n\t * Display a hierarchy level.\n\t *\n\t * @param array $options   An array of options.\n\t * @param int   $parent_id Parent item ID.\n\t * @param bool  $active    Whether to show or hide.\n\t *\n\t * @return string\n\t */\n\tpublic function display_level( $options, $parent_id = 0, $active = false ) {\n\t\tstatic $output_required = false;\n\n\t\t$field      = $this->field;\n\t\t$walker     = new RWMB_Walker_Select( $field, $this->meta );\n\t\t$attributes = RWMB_Field::call( 'get_attributes', $field, $this->meta );\n\n\t\tif ( $output_required ) {\n\t\t\tunset( $attributes['required'] );\n\t\t}\n\n\t\tif ( ! empty( $attributes['required'] ) ) {\n\t\t\t$output_required = true;\n\t\t}\n\n\t\t$children = $options[ $parent_id ];\n\t\t$output   = sprintf(\n\t\t\t'<div class=\"rwmb-select-tree %s\" data-parent-id=\"%s\"><select %s>',\n\t\t\t$active ? '' : 'hidden',\n\t\t\tesc_attr( $parent_id ),\n\t\t\tRWMB_Field::render_attributes( $attributes )\n\t\t);\n\t\t$output  .= $field['placeholder'] ? \"<option value=''>{$field['placeholder']}</option>\" : '<option></option>';\n\t\t$output  .= $walker->walk( $children, - 1 );\n\t\t$output  .= '</select>';\n\n\t\tforeach ( $children as $child ) {\n\t\t\tif ( isset( $options[ $child->value ] ) ) {\n\t\t\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\t\t\t$output .= $this->display_level( $options, $child->value, in_array( $child->value, $this->meta ) && $active );\n\t\t\t}\n\t\t}\n\n\t\t$output .= '</div>';\n\t\treturn $output;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/inc/walkers/select.php",
    "content": "<?php\ndefined( 'ABSPATH' ) || die;\n\n/**\n * Select walker select fields.\n */\nclass RWMB_Walker_Select extends RWMB_Walker_Base {\n\t/**\n\t * Start the element output.\n\t *\n\t * @see Walker::start_el()\n\t *\n\t * @param string $output            Passed by reference. Used to append additional content.\n\t * @param object $object            The data object.\n\t * @param int    $depth             Depth of the item.\n\t * @param array  $args              An array of additional arguments.\n\t * @param int    $current_object_id ID of the current item.\n\t */\n\tpublic function start_el( &$output, $object, $depth = 0, $args = [], $current_object_id = 0 ) {\n\t\t$indent = str_repeat( '&nbsp;', $depth * 4 );\n\n\t\t$output .= sprintf(\n\t\t\t'<option value=\"%s\" %s>%s%s</option>',\n\t\t\tesc_attr( $object->value ),\n\t\t\t// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict\n\t\t\tselected( in_array( $object->value, $this->meta ), true, false ),\n\t\t\t$indent,\n\t\t\tesc_html( $object->label )\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/autocomplete.js",
    "content": "( function ( $, rwmb, i18n ) {\n\t'use strict';\n\n\t/**\n\t * Transform an input into an autocomplete.\n\t */\n\tfunction transform( e ) {\n\t\tvar $this = $( this ),\n\t\t\t$search = $this.siblings( '.rwmb-autocomplete-search' ),\n\t\t\t$result = $this.siblings( '.rwmb-autocomplete-results' ),\n\t\t\tname = $this.attr( 'name' );\n\n\t\t// If the function is called on cloning, then change the field name and clear all results\n\t\tif ( e.hasOwnProperty( 'type' ) && 'clone' == e.type ) {\n\t\t\t$result.html( '' );\n\t\t}\n\n\t\t$search.removeClass( 'ui-autocomplete-input' ).autocomplete( {\n\t\t\tminLength: 0,\n\t\t\tsource: $this.data( 'options' ),\n\t\t\tselect: function ( event, ui ) {\n\t\t\t\t$result.append(\n\t\t\t\t\t'<div class=\"rwmb-autocomplete-result\">' +\n\t\t\t\t\t'<div class=\"label\">' + ( typeof ui.item.excerpt !== 'undefined' ? ui.item.excerpt : ui.item.label ) + '</div>' +\n\t\t\t\t\t'<div class=\"actions\">' + i18n.delete + '</div>' +\n\t\t\t\t\t'<input type=\"hidden\" class=\"rwmb-autocomplete-value\" name=\"' + name + '\" value=\"' + ui.item.value + '\">' +\n\t\t\t\t\t'</div>'\n\t\t\t\t);\n\n\t\t\t\t// Reinitialize value.\n\t\t\t\t$search.val( '' ).trigger( 'change' );\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction deleteSelection( e ) {\n\t\te.preventDefault();\n\t\tvar $item = $( this ).parent(),\n\t\t\t$search = $item.parent().siblings( '.rwmb-autocomplete-search' );\n\n\t\t$item.remove();\n\t\t$search.trigger( 'change' );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-autocomplete-wrapper input[type=\"hidden\"]' ).each( transform );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-autocomplete', transform )\n\t\t.on( 'click', '.rwmb-autocomplete-result .actions', deleteSelection );\n} )( jQuery, rwmb, RWMB_Autocomplete );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/autosave.js",
    "content": "( function ( $, document ) {\n\t'use strict';\n\n\t$( document ).ajaxSend( function ( event, xhr, settings ) {\n\t\tif ( ! Array.isArray( settings.data ) || -1 === settings.data.indexOf( 'wp_autosave' ) ) {\n\t\t\treturn;\n\t\t}\n\t\tvar inputSelectors = 'input[class*=\"rwmb\"], textarea[class*=\"rwmb\"], select[class*=\"rwmb\"], button[class*=\"rwmb\"], input[name^=\"nonce_\"]';\n\t\t$( '.rwmb-meta-box' ).each( function () {\n\t\t\tvar $meta_box = $( this );\n\t\t\tif ( true === $meta_box.data( 'autosave' ) ) {\n\t\t\t\tsettings.data += '&' + $meta_box.find( inputSelectors ).serialize();\n\t\t\t}\n\t\t} );\n\t} );\n} )( jQuery, document );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/button-group.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tfunction setActiveClass() {\n\t\tvar $this = $( this ),\n\t\t\t$input = $this.find( 'input' ),\n\t\t\t$label = $input.parent();\n\n\t\tif ( $input.prop( 'checked' ) ) {\n\t\t\t$label.addClass( 'selected' );\n\t\t} else {\n\t\t\t$label.removeClass( 'selected' );\n\t\t}\n\t}\n\n\tfunction clickHandler() {\n\t\tvar $this = $( this ),\n\t\t\t$input = $this.find( 'input' ),\n\t\t\t$label = $input.parent(),\n\t\t\ttype = $input.attr( 'type' ),\n\t\t\t$allLabels = $this.parent().find( 'label' );\n\t\tif ( ! $input.prop( 'checked' ) ) {\n\t\t\t$label.removeClass( 'selected' );\n\t\t\treturn;\n\t\t}\n\t\t$label.addClass( 'selected' );\n\n\t\tif ( 'radio' === type ) {\n\t\t\t$allLabels.removeClass( 'selected' );\n\t\t\t$label.addClass( 'selected' );\n\t\t}\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-button-input-list label' ).each( setActiveClass );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'click', '.rwmb-button-input-list label', clickHandler )\n\t\t.on( 'clone', '.rwmb-button-input-list label', setActiveClass );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/clone.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\t// Object holds all methods related to fields' index when clone\n\tvar cloneIndex = {\n\t\t/**\n\t\t * Set index for fields in a .rwmb-clone\n\t\t * @param $inputs .rwmb-clone element\n\t\t * @param index Index value\n\t\t */\n\t\tset: function ( $inputs, index, count ) {\n\t\t\t$inputs.each( function () {\n\t\t\t\tvar $field = $( this );\n\n\t\t\t\t// Name attribute\n\t\t\t\tvar name = this.name;\n\t\t\t\tif ( name && !$field.closest( '.rwmb-group-clone' ).length ) {\n\t\t\t\t\t$field.attr( 'name', cloneIndex.replace( index, name, '[', ']', false ) );\n\t\t\t\t}\n\n\t\t\t\t// ID attribute\n\t\t\t\tvar id = this.id;\n\t\t\t\tif ( id ) {\n\t\t\t\t\tid = id.replace( '_rwmb_template', '' );\n\n\t\t\t\t\t// First clone takes the original ID\n\t\t\t\t\tif ( count === 2 ) {\n\t\t\t\t\t\t$field.attr( 'id', id );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( count > 2 ) {\n\t\t\t\t\t\t$field.attr( 'id', cloneIndex.replace( index, id, '_', '', true, true ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$field.trigger( 'update_index', index );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Replace an attribute of a field with updated index\n\t\t * @param index New index value\n\t\t * @param value Attribute value\n\t\t * @param before String before returned value\n\t\t * @param after String after returned value\n\t\t * @param alternative Check if attribute does not contain any integer, will reset the attribute?\n\t\t * @param isEnd Check if we find string at the end?\n\t\t * @return string\n\t\t */\n\t\treplace: function ( index, value, before, after, alternative, isEnd ) {\n\t\t\tbefore = before || '';\n\t\t\tafter = after || '';\n\n\t\t\tif ( typeof alternative === 'undefined' ) {\n\t\t\t\talternative = true;\n\t\t\t}\n\n\t\t\tvar end = isEnd ? '$' : '';\n\n\t\t\tvar regex = new RegExp( cloneIndex.escapeRegex( before ) + '(\\\\d+)' + cloneIndex.escapeRegex( after ) + end ),\n\t\t\t\tnewValue = before + index + after;\n\n\t\t\treturn regex.test( value ) ? value.replace( regex, newValue ) : ( alternative ? value + newValue : value );\n\t\t},\n\n\t\t/**\n\t\t * Helper function to escape string in regular expression\n\t\t * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n\t\t * @param string\n\t\t * @return string\n\t\t */\n\t\tescapeRegex: function ( string ) {\n\t\t\treturn string.replace( /[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\" );\n\t\t},\n\n\t\t/**\n\t\t * Helper function to create next index for clones\n\t\t * @param $container .rwmb-input container\n\t\t * @return integer\n\t\t */\n\t\tnextIndex: function ( $container ) {\n\t\t\tvar nextIndex = $container.data( 'next-index' );\n\n\t\t\t// If we render cloneable fields via AJAX, the mb_ready event is not fired.\n\t\t\t// so nextIndex is undefined. In this case, we get the next index from the number of existing clones.\n\t\t\tif ( nextIndex === undefined ) {\n\t\t\t\tnextIndex = $container.children( '.rwmb-clone' ).length;\n\t\t\t}\n\n\t\t\t$container.data( 'next-index', nextIndex + 1 );\n\t\t\treturn nextIndex;\n\t\t}\n\t};\n\n\t// Object holds all method related to fields' value when clone.\n\tvar cloneValue = {\n\t\tsetDefault: function () {\n\t\t\tvar $field = $( this );\n\n\t\t\tif ( true !== $field.data( 'clone-default' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar type = $field.attr( 'type' ),\n\t\t\t\tdefaultValue = $field.data( 'default' );\n\n\t\t\tif ( 'radio' === type ) {\n\t\t\t\t$field.prop( 'checked', $field.val() === defaultValue );\n\t\t\t} else if ( $field.hasClass( 'rwmb-checkbox' ) || $field.hasClass( 'rwmb-switch' ) ) {\n\t\t\t\t$field.prop( 'checked', !!defaultValue );\n\t\t\t} else if ( $field.hasClass( 'rwmb-checkbox_list' ) ) {\n\t\t\t\tvar value = $field.val();\n\t\t\t\t$field.prop( 'checked', Array.isArray( defaultValue ) ? -1 !== defaultValue.indexOf( value ) : value == defaultValue );\n\t\t\t} else if ( $field.is( 'select' ) ) {\n\t\t\t\t$field.find( 'option[value=\"' + defaultValue + '\"]' ).prop( 'selected', true );\n\t\t\t} else if ( !$field.hasClass( 'rwmb-hidden' ) ) {\n\t\t\t\t$field.val( defaultValue );\n\t\t\t}\n\t\t},\n\t\tclear: function () {\n\t\t\tconst $field = $( this ),\n\t\t\t\ttype = $field.attr( 'type' );\n\n\t\t\tif ( 'radio' === type || 'checkbox' === type ) {\n\t\t\t\t$field.prop( 'checked', false );\n\t\t\t} else if ( $field.is( 'select' ) ) {\n\t\t\t\tif ( $field.attr( 'multiple' ) ) {\n\t\t\t\t\t$field.find( 'option' ).prop( 'selected', false );\n\t\t\t\t\t$field.val( null ).trigger( 'change' );\n\t\t\t\t} else {\n\t\t\t\t\t$field.prop( 'selectedIndex', 0 );\n\t\t\t\t}\n\t\t\t} else if ( !$field.hasClass( 'rwmb-hidden' ) ) {\n\t\t\t\t$field.val( '' );\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Clone fields\n\t * @param $container A div container which has all fields\n\t */\n\tfunction clone( $container ) {\n\t\tvar $last = $container.children( '.rwmb-clone' ).last(),\n\t\t\t$template = $container.children( '.rwmb-clone-template' ),\n\t\t\t$clone = $template.clone(),\n\t\t\tnextIndex = cloneIndex.nextIndex( $container );\n\n\t\t// Add _rwmb_template suffix to ID of fields in template.\n\t\t// so that the first clone will take the original ID.\n\t\t$template.find( rwmb.inputSelectors ).each( function () {\n\t\t\tthis.id = this.id.includes( '_rwmb_template' ) ? this.id : this.id + '_rwmb_template';\n\t\t} );\n\n\t\t// Clear fields' values.\n\t\tvar $inputs = $clone.find( rwmb.inputSelectors );\n\t\tlet count = $container.children( '.rwmb-clone' ).length;\n\n\t\t// The first clone should keep the default values.\n\t\tif ( count > 1 ) {\n\t\t\t$inputs.each( cloneValue.clear );\n\t\t}\n\n\t\t$clone = $clone.removeClass( 'rwmb-clone-template' );\n\t\t// Remove validation errors.\n\t\t$clone.find( 'p.rwmb-error' ).remove();\n\n\t\t// Insert clone.\n\t\t$clone.insertAfter( $last );\n\t\tcount++;\n\n\t\t// Trigger custom event for the clone instance. Required for Group extension to update sub fields.\n\t\t$clone.trigger( 'clone_instance', nextIndex );\n\n\t\t// Set fields index. Must run before trigger clone event.\n\t\tcloneIndex.set( $inputs, nextIndex, count );\n\n\t\t// Set fields' default values: do after index is set to prevent previous radio fields from unchecking.\n\t\t$inputs.each( cloneValue.setDefault );\n\n\t\t// Trigger custom clone event.\n\t\t$inputs.trigger( 'clone', nextIndex );\n\n\t\t// After cloning fields.\n\t\t$inputs.trigger( 'after_clone', nextIndex );\n\n\t\t// Trigger custom change event for MB Blocks to update block attributes.\n\t\t$inputs.first().trigger( 'mb_change' );\n\t}\n\n\t/**\n\t * Hide remove buttons when there's only 1 of them\n\t *\n\t * @param $container .rwmb-input container\n\t */\n\tfunction toggleRemoveButtons( $container ) {\n\n\t\tconst $clones = $container.children( '.rwmb-clone' );\n\t\tlet minClone = 1;\n\t\tlet offset = 1;\n\n\t\t// Add the first clone if data-clone-empty-start = false\n\t\tconst cloneEmptyStart = $container[ 0 ].dataset.cloneEmptyStart ?? 0;\n\n\t\t// If clone-empty-start is true, we need at least 1 item.\n\t\tif ( cloneEmptyStart == 1 ) {\n\t\t\toffset = 0;\n\t\t}\n\n\t\tif ( $container.data( 'min-clone' ) ) {\n\t\t\tminClone = parseInt( $container.data( 'min-clone' ) );\n\t\t}\n\t\t$clones.children( '.remove-clone' ).toggle( $clones.length - offset > minClone );\n\n\t\t// Recursive for nested groups.\n\t\t$container.find( '.rwmb-input' ).each( function () {\n\t\t\ttoggleRemoveButtons( $( this ) );\n\t\t} );\n\t}\n\n\t/**\n\t * Toggle add button\n\t * Used with [data-max-clone] attribute. When max clone is reached, the add button is hid and vice versa\n\t *\n\t * @param $container .rwmb-input container\n\t */\n\tfunction toggleAddButton( $container ) {\n\t\tvar $button = $container.children( '.add-clone' ),\n\t\t\tmaxClone = parseInt( $container.data( 'max-clone' ) ) + 1,\n\t\t\tnumClone = $container.children( '.rwmb-clone' ).length;\n\n\t\t$button.toggle( isNaN( maxClone ) || ( maxClone && numClone < maxClone ) );\n\t}\n\n\tfunction addClone( e ) {\n\t\te.preventDefault();\n\n\t\tvar $container = $( this ).closest( '.rwmb-input' );\n\t\tclone( $container );\n\n\t\ttoggleRemoveButtons( $container );\n\t\ttoggleAddButton( $container );\n\t\tsortClones.apply( $container[ 0 ] );\n\t}\n\n\tfunction removeClone( e ) {\n\t\te.preventDefault();\n\n\t\tvar $this = $( this ),\n\t\t\t$container = $this.closest( '.rwmb-input' );\n\n\t\t// Remove clone only if there are 2 or more of them\n\t\tif ( $container.children( '.rwmb-clone' ).length < 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$this.parent().trigger( 'remove' ).remove();\n\t\ttoggleRemoveButtons( $container );\n\t\ttoggleAddButton( $container );\n\n\t\t// Trigger custom change event for MB Blocks to update block attributes.\n\t\t$container.find( rwmb.inputSelectors ).first().trigger( 'mb_change' );\n\t}\n\n\t/**\n\t * Sort clones.\n\t * Expect this = .rwmb-input element.\n\t */\n\tfunction sortClones() {\n\t\tvar $container = $( this );\n\n\t\tif ( undefined !== $container.sortable( 'instance' ) ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( 0 === $container.children( '.rwmb-clone' ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$container.sortable( {\n\t\t\thandle: '.rwmb-clone-icon',\n\t\t\tplaceholder: ' rwmb-clone rwmb-sortable-placeholder',\n\t\t\titems: '> .rwmb-clone',\n\t\t\tstart: function ( event, ui ) {\n\t\t\t\t// Make the placeholder has the same height as dragged item\n\t\t\t\tui.placeholder.height( ui.item.outerHeight() );\n\t\t\t},\n\t\t\tstop: function ( event, ui ) {\n\t\t\t\tui.item.trigger( 'mb_init_editors' );\n\t\t\t\tui.item.find( rwmb.inputSelectors ).first().trigger( 'mb_change' );\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction start() {\n\t\tvar $container = $( this );\n\t\ttoggleRemoveButtons( $container );\n\t\ttoggleAddButton( $container );\n\n\t\t$container.data( 'next-index', $container.children( '.rwmb-clone' ).length );\n\t\tsortClones.apply( this );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-input' ).each( start );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'click', '.add-clone', addClone )\n\t\t.on( 'click', '.remove-clone', removeClone );\n\n\t// Export for use outside.\n\trwmb.cloneIndex = cloneIndex;\n\trwmb.cloneValue = cloneValue;\n\trwmb.sortClones = sortClones;\n\trwmb.toggleRemoveButtons = toggleRemoveButtons;\n\trwmb.toggleAddButton = toggleAddButton;\n}( jQuery, rwmb ) );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/color.js",
    "content": "( function( $, rwmb ) {\n\t'use strict';\n\n\t/**\n\t * Transform an input into a color picker.\n\t */\n\tfunction transform() {\n\t\tconst $this = $( this );\n\t\tconst mode = $this.data( 'options' )[ 'mode' ];\n\t\tconst alpha = $this.data( 'alpha-enabled' );\n\n\t\tfunction initChange() {\n\t\t\tif ( null !== mode && 'hex' !== mode && !alpha ) {\n\t\t\t\tconst color = new Color( $this.iris( 'option', 'color' ) );\n\t\t\t\t$this.val( color.toCSS( mode ) );\n\t\t\t}\n\t\t\ttriggerChange();\n\t\t}\n\n\t\tfunction triggerChange() {\n\t\t\t$this.trigger( 'color:change' ).trigger( 'mb_change' );\n\t\t}\n\n\t\tconst $container = $this.closest( '.wp-picker-container' ),\n\t\t\t// Hack: the picker needs a small delay (learn from the Kirki plugin).\n\t\t\toptions = $.extend(\n\t\t\t\t{\n\t\t\t\t\tchange: function() {\n\t\t\t\t\t\tsetTimeout( initChange, 20 );\n\t\t\t\t\t},\n\t\t\t\t\tclear: function() {\n\t\t\t\t\t\tsetTimeout( triggerChange, 20 );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t$this.data( 'options' )\n\t\t\t);\n\n\t\t// Clone doesn't have input for color picker, we have to add the input and remove the color picker container\n\t\tif ( $container.length > 0 ) {\n\t\t\t$this.insertBefore( $container );\n\t\t\t$container.remove();\n\t\t}\n\n\t\t// Show color picker.\n\t\t$this.wpColorPicker( options );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-color' ).each( transform );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-color', transform );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/date.js",
    "content": "( function ( $, _, rwmb ) {\n\t'use strict';\n\n\t/**\n\t * Transform an input into a date picker.\n\t */\n\tfunction transform() {\n\t\tlet $this = $( this ),\n\t\t\toptions = $this.data( 'options' );\n\n\t\tlet $inline = $this.siblings( '.rwmb-datetime-inline' );\n\t\tif ( !$inline.length ) {\n\t\t\t$inline = $this.closest( '.rwmb-input-group' ).siblings( '.rwmb-datetime-inline' );\n\t\t}\n\n\t\tlet $timestamp = $this.siblings( '.rwmb-datetime-timestamp' ),\n\t\t\tcurrent = $this.val(),\n\t\t\t$picker = $inline.length ? $inline : $this;\n\n\t\t$this.siblings( '.ui-datepicker-append' ).remove(); // Remove appended text\n\n\t\toptions.onSelect = function () {\n\t\t\t$this.trigger( 'change' );\n\t\t};\n\t\toptions.beforeShow = function ( i ) {\n\t\t\tif ( $( i ).prop( 'readonly' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tif ( $timestamp.length ) {\n\t\t\toptions.onClose = options.onSelect = function () {\n\t\t\t\t$timestamp.val( getTimestamp( $picker.datepicker( 'getDate' ) ) );\n\t\t\t\t$this.trigger( 'change' );\n\t\t\t};\n\n\t\t\t$this.on( 'change', () => {\n\t\t\t\tif ( !$this.val() ) {\n\t\t\t\t\t$timestamp.val( '' );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tif ( !$inline.length ) {\n\t\t\t$this.removeClass( 'hasDatepicker' ).datepicker( options );\n\t\t\treturn;\n\t\t}\n\n\t\toptions.altField = '#' + $this.attr( 'id' );\n\t\t$this.on( 'keydown', _.debounce( function () {\n\t\t\t// if val is empty, return to allow empty datepicker input.\n\t\t\tif ( !$this.val() ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$picker\n\t\t\t\t.datepicker( 'setDate', $this.val() )\n\t\t\t\t.find( '.ui-datepicker-current-day' )\n\t\t\t\t.trigger( 'click' );\n\t\t}, 600 ) );\n\n\t\t$inline\n\t\t\t.removeClass( 'hasDatepicker' )\n\t\t\t.empty()\n\t\t\t.prop( 'id', '' )\n\t\t\t.datepicker( options )\n\t\t\t.datepicker( 'setDate', current );\n\t}\n\n\t/**\n\t * Convert date to Unix timestamp in milliseconds\n\t * @link http://stackoverflow.com/a/14006555/556258\n\t * @param date\n\t * @return number\n\t */\n\tfunction getTimestamp( date ) {\n\t\tif ( date === null ) {\n\t\t\treturn '';\n\t\t}\n\t\tvar milliseconds = Date.UTC( date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds() );\n\t\treturn Math.floor( milliseconds / 1000 );\n\t}\n\n\tfunction init( e ) {\n\t\t/**\n\t\t * WordPress sets localized data for jQuery UI datepicker at document ready.\n\t\t * Using setTimeout to ensure the code runs after the localized data is set.\n\t\t * @link https://wordpress.org/support/topic/inline-date-field-not-localization/\n\t\t */\n\t\tsetTimeout( () => {\n\t\t\t$( e.target ).find( '.rwmb-date' ).each( transform );\n\t\t}, 0 );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-date', transform );\n} )( jQuery, _, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/datetime.js",
    "content": "( function ( $, _, rwmb, i18n ) {\n\t'use strict';\n\n\t/**\n\t * Transform an input into a datetime picker.\n\t */\n\tfunction transform() {\n\t\tlet $this = $( this ),\n\t\t\toptions = $this.data( 'options' );\n\n\t\tlet $inline = $this.siblings( '.rwmb-datetime-inline' );\n\t\tif ( !$inline.length ) {\n\t\t\t$inline = $this.closest( '.rwmb-input-group' ).siblings( '.rwmb-datetime-inline' );\n\t\t}\n\n\t\tlet $timestamp = $this.siblings( '.rwmb-datetime-timestamp' ),\n\t\t\tcurrent = $this.val(),\n\t\t\t$picker = $inline.length ? $inline : $this;\n\n\t\t$this.siblings( '.ui-datepicker-append' ).remove(); // Remove appended text\n\n\t\toptions.onSelect = function () {\n\t\t\t$this.trigger( 'change' );\n\t\t};\n\t\toptions.beforeShow = function ( i ) {\n\t\t\tif ( $( i ).prop( 'readonly' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tif ( $timestamp.length ) {\n\t\t\toptions.onClose = options.onSelect = function () {\n\t\t\t\t$timestamp.val( getTimestamp( $picker.datetimepicker( 'getDate' ) ) );\n\t\t\t\t$this.trigger( 'change' );\n\t\t\t};\n\n\t\t\t$this.on( 'change', () => {\n\t\t\t\tif ( !$this.val() ) {\n\t\t\t\t\t$timestamp.val( '' );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tif ( !$inline.length ) {\n\t\t\t$this.removeClass( 'hasDatepicker' ).datetimepicker( options );\n\t\t\treturn;\n\t\t}\n\n\t\toptions.altField = '#' + $this.attr( 'id' );\n\t\t$this.on( 'keydown', _.debounce( function () {\n\t\t\t// if val is empty, return to allow empty datepicker input.\n\t\t\tif ( !$this.val() ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$picker\n\t\t\t\t.datepicker( 'setDate', $this.val() )\n\t\t\t\t.find( '.ui-datepicker-current-day' )\n\t\t\t\t.trigger( 'click' );\n\t\t}, 600 ) );\n\n\t\t$inline\n\t\t\t.removeClass( 'hasDatepicker' )\n\t\t\t.empty()\n\t\t\t.prop( 'id', '' )\n\t\t\t.datetimepicker( options )\n\t\t\t.datetimepicker( 'setDate', current );\n\t}\n\n\t/**\n\t * Convert date to Unix timestamp in milliseconds\n\t * @link http://stackoverflow.com/a/14006555/556258\n\t * @param date\n\t * @return number\n\t */\n\tfunction getTimestamp( date ) {\n\t\tif ( date === null ) {\n\t\t\treturn '';\n\t\t}\n\t\tvar milliseconds = Date.UTC( date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds() );\n\t\treturn Math.floor( milliseconds / 1000 );\n\t}\n\n\t// Set language if available\n\tfunction setTimeI18n() {\n\t\tif ( $.timepicker.regional.hasOwnProperty( i18n.locale ) ) {\n\t\t\t$.timepicker.setDefaults( $.timepicker.regional[ i18n.locale ] );\n\t\t} else if ( $.timepicker.regional.hasOwnProperty( i18n.localeShort ) ) {\n\t\t\t$.timepicker.setDefaults( $.timepicker.regional[ i18n.localeShort ] );\n\t\t}\n\t}\n\n\tfunction init( e ) {\n\t\t/**\n\t\t * WordPress sets localized data for jQuery UI datepicker at document ready.\n\t\t * Using setTimeout to ensure the code runs after the localized data is set.\n\t\t * @link https://wordpress.org/support/topic/inline-date-field-not-localization/\n\t\t */\n\t\tsetTimeout( () => {\n\t\t\t$( e.target ).find( '.rwmb-datetime' ).each( transform );\n\t\t}, 0 );\n\t}\n\n\tsetTimeI18n();\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-datetime', transform );\n} )( jQuery, _, rwmb, RWMB_Datetime );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/file-input.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tvar frame;\n\n\tfunction openSelectPopup( e ) {\n\t\te.preventDefault();\n\t\tvar $el = $( this );\n\n\t\t// Create a frame only if needed\n\t\tif ( ! frame ) {\n\t\t\tframe = wp.media( {\n\t\t\t\tclassName: 'media-frame rwmb-file-frame',\n\t\t\t\tmultiple: false,\n\t\t\t\ttitle: rwmbFileInput.frameTitle\n\t\t\t} );\n\t\t}\n\n\t\t// Open media uploader\n\t\tframe.open();\n\n\t\t// Remove all attached 'select' event\n\t\tframe.off( 'select' );\n\n\t\t// Handle selection\n\t\tframe.on( 'select', function () {\n\t\t\tvar url = frame.state().get( 'selection' ).first().toJSON().url;\n\t\t\t$el.siblings( 'input' ).val( url ).trigger( 'change' ).siblings( 'a' ).removeClass( 'hidden' );\n\t\t} );\n\t}\n\n\tfunction changeValueInput( e ) {\n\t\te.preventDefault();\n\t\tvar $el = $( this ),\n\t\t\turl = $el.val(),\n\t\t\tfileType = url.split( '.' ).pop().toLowerCase(),\n\t\t\timageTypes = [ 'gif', 'jpeg', 'png', 'jpg' ],\n\t\t\tvalidImageTypes = imageTypes.includes( fileType );\n\n\t\tif ( validImageTypes ) {\n\t\t\t$el.closest( '.rwmb-file-input-inner' ).siblings( '.rwmb-file-input-image' ).removeClass( 'rwmb-file-input-hidden' ).find( 'img' ).attr( 'src', url );\n\t\t} else {\n\t\t\t$el.closest( '.rwmb-file-input-inner' ).siblings( '.rwmb-file-input-image' ).addClass( 'rwmb-file-input-hidden' );\n\t\t}\n\t}\n\n\tfunction clearSelection( e ) {\n\t\te.preventDefault();\n\t\t$( this ).addClass( 'hidden' ).siblings( 'input' ).val( '' ).trigger( 'change' );\n\t\t$( this ).closest( '.rwmb-file-input-inner' ).siblings( '.rwmb-file-input-image' ).addClass( 'rwmb-file-input-hidden' );\n\t}\n\n\tfunction hideRemoveButtonWhenCloning() {\n\t\t$( this ).siblings( '.rwmb-file-input-remove' ).addClass( 'hidden' );\n\t}\n\n\trwmb.$document\n\t\t.on( 'click', '.rwmb-file-input-select', openSelectPopup )\n\t\t.on( 'input change', '.rwmb-file_input', changeValueInput )\n\t\t.on( 'click', '.rwmb-file-input-remove', clearSelection )\n\t\t.on( 'clone', '.rwmb-file_input', hideRemoveButtonWhenCloning );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/file-upload.js",
    "content": "( function ( $, wp, rwmb ) {\n\t'use strict';\n\n\tvar views = rwmb.views = rwmb.views || {},\n\t\tMediaField = views.MediaField,\n\t\tFileUploadField, UploadButton;\n\n\tFileUploadField = views.FileUploadField = MediaField.extend( {\n\t\tcreateAddButton: function () {\n\t\t\tthis.addButton = new UploadButton( { controller: this.controller } );\n\t\t}\n\t} );\n\n\tUploadButton = views.UploadButton = Backbone.View.extend( {\n\t\tclassName: 'rwmb-upload-area',\n\t\ttagName: 'div',\n\t\ttemplate: rwmb.template( `\n\t\t\t<div class=\"rwmb-upload-inside\">\n\t\t\t\t<h3>{{{ i18nRwmbMedia.uploadInstructions }}}</h3>\n\t\t\t\t<p>{{{ i18nRwmbMedia.or }}}</p>\n\t\t\t\t<button type=\"button\" class=\"rwmb-browse-button browser button button-hero\" id=\"{{{ _.uniqueId( 'rwmb-upload-browser-') }}}\">{{{ i18nRwmbMedia.select }}}</button>\n\t\t\t</div>\n\t\t` ),\n\t\trender: function () {\n\t\t\tthis.$el.html( this.template( {} ) );\n\t\t\treturn this;\n\t\t},\n\n\t\tinitialize: function ( options ) {\n\t\t\tthis.controller = options.controller;\n\t\t\tthis.el.id = _.uniqueId( 'rwmb-upload-area-' );\n\t\t\tthis.render();\n\n\t\t\t// Auto hide if you reach the max number of media\n\t\t\tthis.listenTo( this.controller, 'change:full', function () {\n\t\t\t\tthis.$el.toggle( !this.controller.get( 'full' ) );\n\t\t\t} );\n\n\t\t\tthis.collection = this.controller.get( 'items' );\n\t\t\tthis.listenTo( this.collection, 'remove', function ( item ) {\n\t\t\t\tif ( item.get( 'file' ) !== undefined ) {\n\t\t\t\t\tthis.uploader.uploader.removeFile( item.get( 'file' ) );\n\t\t\t\t}\n\t\t\t\tconst totalFiles = parseInt( this.uploader.uploader.getOption( 'totalFiles' ) );\n\t\t\t\tthis.uploader.uploader.setOption( 'totalFiles', totalFiles - 1 );\n\t\t\t} );\n\t\t},\n\n\t\t// Initializes plupload using code from wp.Uploader (wp-includes/js/plupload/wp-plupload.js)\n\t\tinitUploader: function ( $this ) {\n\t\t\tvar self = this,\n\t\t\t\t$input = $this.closest( '.rwmb-input' ),\n\t\t\t\t$process = $input.find( '.rwmb-media-view .rwmb-media-progress' ),\n\t\t\t\textensions = this.getExtensions().join( ',' ),\n\t\t\t\tmaxFileSize = this.controller.get( 'maxFileSize' ),\n\t\t\t\tmaxFiles = parseInt( this.controller.get( 'maxFiles' ) ),\n\t\t\t\toptions = {\n\t\t\t\t\tcontainer: this.el,\n\t\t\t\t\tdropzone: this.el,\n\t\t\t\t\tbrowser: this.$( '.rwmb-browse-button' ),\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tpost_id: $( '#post_ID' ).val()\n\t\t\t\t\t},\n\t\t\t\t\tadded: function ( attachment ) {\n\t\t\t\t\t\tself.controller.get( 'items' ).add( [ attachment ] );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Initialize the plupload instance.\n\t\t\tthis.uploader = new wp.Uploader( options );\n\n\t\t\tvar filters = this.uploader.uploader.getOption( 'filters' );\n\t\t\tif ( maxFileSize ) {\n\t\t\t\tfilters.max_file_size = maxFileSize;\n\t\t\t}\n\t\t\tif ( extensions ) {\n\t\t\t\tfilters.mime_types = [ { title: i18nRwmbMedia.select, extensions: extensions } ];\n\t\t\t}\n\t\t\tthis.uploader.uploader.setOption( 'filters', filters );\n\t\t\tthis.uploader.uploader.setOption( 'totalFiles', 0 );\n\n\t\t\tthis.uploader.uploader.bind( 'FilesAdded', function ( up, files ) {\n\t\t\t\tconst that = this,\n\t\t\t\t\ttotalFiles = parseInt( that.getOption( 'totalFiles' ) );\n\n\t\t\t\t$.each( files, function ( i, file ) {\n\t\t\t\t\tif ( maxFiles !== 0 && i >= maxFiles - totalFiles ) {\n\t\t\t\t\t\tup.removeFile( files[ i ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t$process.append( `<div id=\"${ file.id }\" class=\"rwmb-progress\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n\t\t\t\t\t\t${ file.name } - ${ file.percent } %\n\t\t\t\t\t</div>` );\n\t\t\t\t\tthat.setOption( 'totalFiles', parseInt( that.getOption( 'totalFiles' ) ) + 1 );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\tconst setWidth = ( file, value ) => $process.find( `#${ file.id }` ).attr( 'aria-valuenow', value ).css( '--value', value ).text( `${ file.name } - ${ value }%` );\n\n\t\t\tthis.uploader.uploader.bind( 'UploadProgress', ( up, file ) => setWidth( file, file.percent ).addClass( file.percent === 100 ? 'rwmb-progress--completed' : '' ) );\n\t\t\tthis.uploader.uploader.bind( 'FileUploaded', ( up, file ) => $process.find( `#${ file.id }` ).fadeOut( 'slow', function () {\n\t\t\t\t$( this ).remove();\n\t\t\t} ) );\n\n\t\t\tthis.uploader.uploader.bind( 'Error', function ( up, err ) {\n\n\t\t\t\tif ( $input.find( '.rwmb-error' ).length === 0 ) {\n\t\t\t\t\t$input.append( '<p class=\"rwmb-error\"></p>' );\n\t\t\t\t}\n\n\t\t\t\tconst $error = $input.find( '.rwmb-error' ).empty().show();\n\t\t\t\t$error.text( err.message );\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t$error.fadeOut( \"slow\" );\n\t\t\t\t}, 5000 );\n\t\t\t} );\n\n\t\t\t$this.data( 'uploader', this.uploader );\n\t\t},\n\n\t\tgetExtensions: function () {\n\t\t\tvar mimeTypes = this.controller.get( 'mimeType' ).split( ',' ),\n\t\t\t\texts = [];\n\n\t\t\t_.each( mimeTypes, function ( current, index ) {\n\t\t\t\tif ( i18nRwmbMedia.extensions[ current ] ) {\n\t\t\t\t\texts = exts.concat( i18nRwmbMedia.extensions[ current ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn exts;\n\t\t}\n\t} );\n\n\tfunction initFileUpload() {\n\t\tvar $this = $( this ),\n\t\t\tview = $this.data( 'view' );\n\n\t\tif ( view ) {\n\t\t\treturn;\n\t\t}\n\t\tview = new FileUploadField( { input: this } );\n\n\t\t$this.siblings( '.rwmb-media-view' ).remove();\n\t\t$this.after( view.el );\n\t\t// Init progress\n\t\tview.$el.find( '.rwmb-media-list' ).after( '<div class=\"rwmb-media-progress\"></div>' );\n\t\t// Init uploader after view is inserted to make wp.Uploader works.\n\t\tview.addButton.initUploader( $this );\n\n\t\t$this.data( 'view', view );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-file_upload' ).each( initFileUpload );\n\t}\n\n\tfunction removeFile( e ) {\n\t\t$( '.rwmb-media-progress #' + $( this ).data( 'file_id' ) ).remove();\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-file_upload', initFileUpload )\n\t\t.on( 'click', '.rwmb-file-actions .rwmb-remove-media', removeFile );\n\n\twp?.hooks?.addAction( 'mb_ready', 'meta-box/ready/file_upload', ref => {\n\t\tinit( { target: ref } );\n\t} );\n} )( jQuery, wp, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/file.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tvar file = {};\n\n\t/**\n\t * Handles a click on add new file.\n\t * Expects `this` to equal the clicked element.\n\t *\n\t * @param event Click event.\n\t */\n\tfile.addHandler = function ( event ) {\n\t\tevent.preventDefault();\n\n\t\tvar $this = $( this ),\n\t\t\t$clone = $this.prev().clone();\n\n\t\t$clone.insertBefore( this ).val( '' );\n\n\t\tvar $fieldInput = $this.closest( '.rwmb-input' );\n\t\tfile.updateVisibility.call( $fieldInput.find( '.rwmb-files' ) );\n\t\tfile.setRequired.call( $fieldInput );\n\t};\n\n\t/**\n\t * Handles a click on delete new file.\n\t * Expects `this` to equal the clicked element.\n\t *\n\t * @param event Click event.\n\t */\n\tfile.deleteHandler = function ( event ) {\n\t\tevent.preventDefault();\n\n\t\tvar $this = $( this ),\n\t\t\t$item = $this.closest( 'li' ),\n\t\t\t$uploaded = $this.closest( '.rwmb-files' ),\n\t\t\t$metaBox = $uploaded.closest( '.rwmb-meta-box' );\n\n\t\t$item.remove();\n\t\tfile.updateVisibility.call( $uploaded );\n\n\t\tfile.setRequired.call( $uploaded.parent() );\n\n\t\tif ( 1 > $uploaded.data( 'force_delete' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$.post( ajaxurl, {\n\t\t\taction: 'rwmb_delete_file',\n\t\t\t_ajax_nonce: $uploaded.data( 'delete_nonce' ),\n\t\t\tfield_id: $uploaded.data( 'field_id' ),\n\t\t\tfield_name: $uploaded.data( 'field_name' ),\n\t\t\tobject_type: $metaBox.data( 'object-type' ),\n\t\t\tobject_id: $metaBox.data( 'object-id' ),\n\t\t\tattachment_id: $this.data( 'attachment_id' )\n\t\t}, function ( response ) {\n\t\t\tif ( !response.success ) {\n\t\t\t\talert( response.data );\n\t\t\t}\n\t\t}, 'json' );\n\t};\n\n\t/**\n\t * Sort uploaded files.\n\t * Expects `this` to equal the uploaded file list.\n\t */\n\tfile.sort = function () {\n\t\t$( this ).sortable( {\n\t\t\titems: 'li',\n\t\t\tstart: function ( event, ui ) {\n\t\t\t\tui.placeholder.height( ui.helper.outerHeight() );\n\t\t\t\tui.placeholder.width( ui.helper.outerWidth() );\n\t\t\t},\n\t\t\tupdate: function ( event, ui ) {\n\t\t\t\tui.item.find( rwmb.inputSelectors ).first().trigger( 'mb_change' );\n\t\t\t}\n\t\t} );\n\t};\n\n\t/**\n\t * Update visibility of upload inputs and Add new file link.\n\t * Expect this equal to the uploaded file list.\n\t */\n\tfile.updateVisibility = function () {\n\t\tvar $uploaded = $( this ),\n\t\t\tmax = parseInt( $uploaded.data( 'max_file_uploads' ), 10 ),\n\t\t\t$new = $uploaded.siblings( '.rwmb-file-new' ),\n\t\t\t$add = $new.find( '.rwmb-file-add' ),\n\t\t\tnumFiles = $uploaded.children().length,\n\t\t\tnumInputs = $new.find( '.rwmb-file-input' ).length;\n\n\t\t$uploaded.toggle( 0 < numFiles );\n\t\tif ( 0 === max ) {\n\t\t\treturn;\n\t\t}\n\t\t$new.toggle( numFiles < max );\n\t\t$add.toggle( numFiles + numInputs < max );\n\t};\n\n\t// Reset field when cloning.\n\tfile.resetClone = function () {\n\t\tvar $this = $( this ),\n\t\t\t$clone = $this.closest( '.rwmb-clone' ),\n\t\t\t$list = $clone.find( '.rwmb-files' );\n\n\t\t$list.empty();\n\n\t\t$clone.find( '.rwmb-file-new' ).each( function () {\n\t\t\tvar inputName = '_file_' + rwmb.uniqid(),\n\t\t\t\t$key = $( this ).siblings( '.rwmb-file-index' );\n\t\t\t$( this ).find( '.rwmb-file-input' ).attr( 'name', inputName + '[]' ).not( ':first' ).remove();\n\t\t\t$key.val( inputName );\n\t\t} );\n\n\t\tfile.updateVisibility.call( $list );\n\t};\n\n\t// Set 'required' attribute. 'this' is the wrapper field input.\n\tfile.setRequired = function () {\n\t\tvar $this = $( this ),\n\t\t\t$uploaded = $this.find( '.rwmb-files' ),\n\t\t\t$inputs = $this.find( '.rwmb-file-new input' );\n\t\t$inputs.prop( 'required', false );\n\n\t\tif ( $uploaded.children().length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $firstInput = $inputs.first();\n\t\tif ( 1 === $firstInput.data( 'required' ) ) {\n\t\t\t$firstInput.prop( 'required', true );\n\t\t}\n\t};\n\n\tfunction init( e ) {\n\t\tvar $el = $( e.target ),\n\t\t\t$uploaded = $el.find( '.rwmb-files' );\n\n\t\t$uploaded.each( file.sort );\n\t\t$uploaded.each( file.updateVisibility );\n\n\t\t$el.find( '.rwmb-file-wrapper, .rwmb-image-wrapper' ).each( file.setRequired );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'click', '.rwmb-file-add', file.addHandler )\n\t\t.on( 'click', '.rwmb-file-delete', file.deleteHandler )\n\t\t.on( 'clone', '.rwmb-file-input', file.resetClone );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/icon.js",
    "content": "/**\n * Link: https://stackoverflow.com/questions/37386293/how-to-add-icon-in-select2\n */\n\n( function ( $, rwmb ) {\n\t'use strict';\n\n\tconst template = option => {\n\t\tif ( option.text.includes( '<svg' ) ) {\n\t\t\tconst title = option.text.replace( /<svg.*?>.*?<\\/svg>/, '' );\n\t\t\treturn $( `<span class=\"rwmb-icon-select\" title=\"${ title }\">${ option.text }</span>` );\n\t\t}\n\n\t\treturn option.id ? $( `<span class=\"rwmb-icon-select\" title=${ option.text }><i class=\"${ option.id }\"></i>${ option.text }</span>` ) : option.text;\n\t};\n\n\tfunction initIconField( event, options ) {\n\t\t$( this ).select2( {\n\t\t\t...options,\n\t\t\ttemplateResult: template,\n\t\t\ttemplateSelection: template,\n\t\t} );\n\t}\n\n\trwmb.$document\n\t\t.on( 'init_icon_field', '.rwmb-icon', initIconField );\n} )( jQuery, rwmb );"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/image-advanced.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tvar views = rwmb.views = rwmb.views || {},\n\t\tMediaField = views.MediaField,\n\t\tMediaItem = views.MediaItem,\n\t\tMediaList = views.MediaList,\n\t\tImageField;\n\n\tImageField = views.ImageField = MediaField.extend( {\n\t\tcreateList: function () {\n\t\t\tthis.list = new MediaList( {\n\t\t\t\tcontroller: this.controller,\n\t\t\t\titemView: MediaItem.extend( {\n\t\t\t\t\tclassName: 'rwmb-image-item',\n\t\t\t\t\ttemplate: rwmb.template( `\n\t\t\t\t\t\t<input type=\"hidden\" name=\"{{{ data.controller.fieldName }}}\" value=\"{{{ data.id }}}\" class=\"rwmb-media-input\">\n\t\t\t\t\t\t<div class=\"rwmb-file-icon\">\n\t\t\t\t\t\t\t<# if ( 'image' === data.type && data.sizes ) { #>\n\t\t\t\t\t\t\t\t<# if ( data.sizes[data.controller.imageSize] ) { #>\n\t\t\t\t\t\t\t\t\t<img src=\"{{{ data.sizes[data.controller.imageSize].url }}}\">\n\t\t\t\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t\t\t\t<img src=\"{{{ data.sizes.full.url }}}\">\n\t\t\t\t\t\t\t\t<# } #>\n\t\t\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t\t\t<# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>\n\t\t\t\t\t\t\t\t\t<img src=\"{{ data.image.src }}\" />\n\t\t\t\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t\t\t\t<img src=\"{{ data.icon }}\" />\n\t\t\t\t\t\t\t\t<# } #>\n\t\t\t\t\t\t\t<# } #>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"rwmb-image-overlay\"></div>\n\t\t\t\t\t\t<div class=\"rwmb-image-actions\">\n\t\t\t\t\t\t\t<a class=\"rwmb-image-edit rwmb-edit-media\" title=\"{{{ i18nRwmbMedia.edit }}}\" href=\"{{{ data.editLink }}}\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<span class=\"dashicons dashicons-edit\"></span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<a href=\"#\" class=\"rwmb-image-delete rwmb-remove-media\" title=\"{{{ i18nRwmbMedia.remove }}}\">\n\t\t\t\t\t\t\t\t<span class=\"dashicons dashicons-no-alt\"></span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t` ),\n\t\t\t\t} )\n\t\t\t} );\n\t\t}\n\t} );\n\n\t/**\n\t * Initialize image fields\n\t */\n\tfunction initImageField() {\n\t\tvar $this = $( this ),\n\t\t\tview = $this.data( 'view' );\n\n\t\tif ( view ) {\n\t\t\treturn;\n\t\t}\n\n\t\tview = new ImageField( { input: this } );\n\n\t\t$this.siblings( '.rwmb-media-view' ).remove();\n\t\t$this.after( view.el );\n\t\t$this.data( 'view', view );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-image_advanced' ).each( initImageField );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-image_advanced', initImageField );\n\n\twp?.hooks?.addAction( 'mb_ready', 'meta-box/ready/image_advanced', ref => {\n\t\tinit( { target: ref } );\n\t} );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/image-upload.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tvar views = rwmb.views = rwmb.views || {},\n\t\tImageField = views.ImageField,\n\t\tImageUploadField,\n\t\tUploadButton = views.UploadButton;\n\n\tImageUploadField = views.ImageUploadField = ImageField.extend( {\n\t\tcreateAddButton: function () {\n\t\t\tthis.addButton = new UploadButton( {controller: this.controller} );\n\t\t}\n\t} );\n\n\tfunction initImageUpload() {\n\t\tvar $this = $( this ),\n\t\t\tview = $this.data( 'view' );\n\n\t\tif ( view ) {\n\t\t\treturn;\n\t\t}\n\n\t\tview = new ImageUploadField( { input: this } );\n\n\t\t$this.siblings( '.rwmb-media-view' ).remove();\n\t\t$this.after( view.el );\n\n\t\t// Init uploader after view is inserted to make wp.Uploader works.\n\t\tview.addButton.initUploader( $this );\n\n\t\t$this.data( 'view', view );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-image_upload, .rwmb-plupload_image' ).each( initImageUpload );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-image_upload, .rwmb-plupload_image', initImageUpload )\n\n\twp?.hooks?.addAction( 'mb_ready', 'meta-box/ready/image_upload', ref => {\n\t\tinit( { target: ref } );\n\t} );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/input-list.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tfunction toggleTree() {\n\t\tvar $this = $( this ),\n\t\t$children = $this.closest( 'label' ).next( 'fieldset' );\n\n\t\tif ( $this.is( ':checked' ) ) {\n\t\t\t$children.removeClass( 'hidden' );\n\t\t} else {\n\t\t\t$children.addClass( 'hidden' ).find( 'input' ).prop( 'checked', false );\n\t\t}\n\t}\n\n\tfunction toggleAll( e ) {\n\t\te.preventDefault();\n\n\t\tvar $this = $( this ),\n\t\t\tchecked = $this.data( 'checked' );\n\n\t\tif ( undefined === checked ) {\n\t\t\tchecked = true;\n\t\t}\n\n\t\t$this.parent().siblings( '.rwmb-input-list' ).find( 'input' ).prop( 'checked', checked ).trigger( 'change' );\n\n\t\tchecked = !checked;\n\t\t$this.data( 'checked', checked );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-input-list.rwmb-collapse input[type=\"checkbox\"]' ).each( toggleTree );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'change', '.rwmb-input-list.rwmb-collapse input[type=\"checkbox\"]', toggleTree )\n\t\t.on( 'clone', '.rwmb-input-list.rwmb-collapse input[type=\"checkbox\"]', toggleTree )\n\t\t.on( 'click', '.rwmb-input-list-select-all-none', toggleAll );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/jqueryui/jquery-ui-sliderAccess.js",
    "content": "/*\n * jQuery UI Slider Access\n * By: Trent Richardson [http://trentrichardson.com]\n * Version 0.3\n * Last Modified: 10/20/2012\n * \n * Copyright 2011 Trent Richardson\n * Dual licensed under the MIT and GPL licenses.\n * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt\n * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt\n * \n */\n (function($){\n\n\t$.fn.extend({\n\t\tsliderAccess: function(options){\n\t\t\toptions = options || {};\n\t\t\toptions.touchonly = options.touchonly !== undefined? options.touchonly : true; // by default only show it if touch device\n\n\t\t\tif(options.touchonly === true && !(\"ontouchend\" in document)){\n\t\t\t\treturn $(this);\n\t\t\t}\n\t\t\t\t\n\t\t\treturn $(this).each(function(i,obj){\n\t\t\t\t\t\tvar $t = $(this),\n\t\t\t\t\t\t\to = $.extend({},{ \n\t\t\t\t\t\t\t\t\t\t\twhere: 'after',\n\t\t\t\t\t\t\t\t\t\t\tstep: $t.slider('option','step'), \n\t\t\t\t\t\t\t\t\t\t\tupIcon: 'ui-icon-plus', \n\t\t\t\t\t\t\t\t\t\t\tdownIcon: 'ui-icon-minus',\n\t\t\t\t\t\t\t\t\t\t\ttext: false,\n\t\t\t\t\t\t\t\t\t\t\tupText: '+',\n\t\t\t\t\t\t\t\t\t\t\tdownText: '-',\n\t\t\t\t\t\t\t\t\t\t\tbuttonset: true,\n\t\t\t\t\t\t\t\t\t\t\tbuttonsetTag: 'span',\n\t\t\t\t\t\t\t\t\t\t\tisRTL: false\n\t\t\t\t\t\t\t\t\t\t}, options),\n\t\t\t\t\t\t\t$buttons = $('<'+ o.buttonsetTag +' class=\"ui-slider-access\">'+\n\t\t\t\t\t\t\t\t\t\t\t'<button data-icon=\"'+ o.downIcon +'\" data-step=\"'+ (o.isRTL? o.step : o.step*-1) +'\">'+ o.downText +'</button>'+\n\t\t\t\t\t\t\t\t\t\t\t'<button data-icon=\"'+ o.upIcon +'\" data-step=\"'+ (o.isRTL? o.step*-1 : o.step) +'\">'+ o.upText +'</button>'+\n\t\t\t\t\t\t\t\t\t\t'</'+ o.buttonsetTag +'>');\n\n\t\t\t\t\t\t$buttons.children('button').each(function(j, jobj){\n\t\t\t\t\t\t\tvar $jt = $(this);\n\t\t\t\t\t\t\t$jt.button({ \n\t\t\t\t\t\t\t\t\t\t\ttext: o.text, \n\t\t\t\t\t\t\t\t\t\t\ticons: { primary: $jt.data('icon') }\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.click(function(e){\n\t\t\t\t\t\t\t\t\t\t\tvar step = $jt.data('step'),\n\t\t\t\t\t\t\t\t\t\t\t\tcurr = $t.slider('value'),\n\t\t\t\t\t\t\t\t\t\t\t\tnewval = curr += step*1,\n\t\t\t\t\t\t\t\t\t\t\t\tminval = $t.slider('option','min'),\n\t\t\t\t\t\t\t\t\t\t\t\tmaxval = $t.slider('option','max'),\n\t\t\t\t\t\t\t\t\t\t\t\tslidee = $t.slider(\"option\", \"slide\") || function(){},\n\t\t\t\t\t\t\t\t\t\t\t\tstope = $t.slider(\"option\", \"stop\") || function(){};\n\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif(newval < minval || newval > maxval){\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t$t.slider('value', newval);\n\n\t\t\t\t\t\t\t\t\t\t\tslidee.call($t, null, { value: newval });\n\t\t\t\t\t\t\t\t\t\t\tstope.call($t, null, { value: newval });\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t// before or after\t\t\t\t\t\n\t\t\t\t\t\t$t[o.where]($buttons);\n\n\t\t\t\t\t\tif(o.buttonset){\n\t\t\t\t\t\t\t$buttons.removeClass('ui-corner-right').removeClass('ui-corner-left').buttonset();\n\t\t\t\t\t\t\t$buttons.eq(0).addClass('ui-corner-left');\n\t\t\t\t\t\t\t$buttons.eq(1).addClass('ui-corner-right');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust the width so we don't break the original layout\n\t\t\t\t\t\tvar bOuterWidth = $buttons.css({\n\t\t\t\t\t\t\t\t\tmarginLeft: ((o.where === 'after' && !o.isRTL) || (o.where === 'before' && o.isRTL)? 10:0), \n\t\t\t\t\t\t\t\t\tmarginRight: ((o.where === 'before' && !o.isRTL) || (o.where === 'after' && o.isRTL)? 10:0)\n\t\t\t\t\t\t\t\t}).outerWidth(true) + 5;\n\t\t\t\t\t\tvar tOuterWidth = $t.outerWidth(true);\n\t\t\t\t\t\t$t.css('display','inline-block').width(tOuterWidth-bOuterWidth);\n\t\t\t\t\t});\t\t\n\t\t}\n\t});\n\n})(jQuery);"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/leaflet/leaflet.css",
    "content": "/* required styles */\n\n.leaflet-pane,\n.leaflet-tile,\n.leaflet-marker-icon,\n.leaflet-marker-shadow,\n.leaflet-tile-container,\n.leaflet-pane > svg,\n.leaflet-pane > canvas,\n.leaflet-zoom-box,\n.leaflet-image-layer,\n.leaflet-layer {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\t}\n.leaflet-container {\n\toverflow: hidden;\n\t}\n.leaflet-tile,\n.leaflet-marker-icon,\n.leaflet-marker-shadow {\n\t-webkit-user-select: none;\n\t   -moz-user-select: none;\n\t        user-select: none;\n\t  -webkit-user-drag: none;\n\t}\n/* Prevents IE11 from highlighting tiles in blue */\n.leaflet-tile::selection {\n\tbackground: transparent;\n}\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\n.leaflet-safari .leaflet-tile {\n\timage-rendering: -webkit-optimize-contrast;\n\t}\n/* hack that prevents hw layers \"stretching\" when loading new tiles */\n.leaflet-safari .leaflet-tile-container {\n\twidth: 1600px;\n\theight: 1600px;\n\t-webkit-transform-origin: 0 0;\n\t}\n.leaflet-marker-icon,\n.leaflet-marker-shadow {\n\tdisplay: block;\n\t}\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\n.leaflet-container .leaflet-overlay-pane svg {\n\tmax-width: none !important;\n\tmax-height: none !important;\n\t}\n.leaflet-container .leaflet-marker-pane img,\n.leaflet-container .leaflet-shadow-pane img,\n.leaflet-container .leaflet-tile-pane img,\n.leaflet-container img.leaflet-image-layer,\n.leaflet-container .leaflet-tile {\n\tmax-width: none !important;\n\tmax-height: none !important;\n\twidth: auto;\n\tpadding: 0;\n\t}\n\n.leaflet-container img.leaflet-tile {\n\t/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */\n\tmix-blend-mode: plus-lighter;\n}\n\n.leaflet-container.leaflet-touch-zoom {\n\t-ms-touch-action: pan-x pan-y;\n\ttouch-action: pan-x pan-y;\n\t}\n.leaflet-container.leaflet-touch-drag {\n\t-ms-touch-action: pinch-zoom;\n\t/* Fallback for FF which doesn't support pinch-zoom */\n\ttouch-action: none;\n\ttouch-action: pinch-zoom;\n}\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.leaflet-container {\n\t-webkit-tap-highlight-color: transparent;\n}\n.leaflet-container a {\n\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\n}\n.leaflet-tile {\n\tfilter: inherit;\n\tvisibility: hidden;\n\t}\n.leaflet-tile-loaded {\n\tvisibility: inherit;\n\t}\n.leaflet-zoom-box {\n\twidth: 0;\n\theight: 0;\n\t-moz-box-sizing: border-box;\n\t     box-sizing: border-box;\n\tz-index: 800;\n\t}\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\n.leaflet-overlay-pane svg {\n\t-moz-user-select: none;\n\t}\n\n.leaflet-pane         { z-index: 400; }\n\n.leaflet-tile-pane    { z-index: 200; }\n.leaflet-overlay-pane { z-index: 400; }\n.leaflet-shadow-pane  { z-index: 500; }\n.leaflet-marker-pane  { z-index: 600; }\n.leaflet-tooltip-pane   { z-index: 650; }\n.leaflet-popup-pane   { z-index: 700; }\n\n.leaflet-map-pane canvas { z-index: 100; }\n.leaflet-map-pane svg    { z-index: 200; }\n\n.leaflet-vml-shape {\n\twidth: 1px;\n\theight: 1px;\n\t}\n.lvml {\n\tbehavior: url(#default#VML);\n\tdisplay: inline-block;\n\tposition: absolute;\n\t}\n\n\n/* control positioning */\n\n.leaflet-control {\n\tposition: relative;\n\tz-index: 800;\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\n\tpointer-events: auto;\n\t}\n.leaflet-top,\n.leaflet-bottom {\n\tposition: absolute;\n\tz-index: 1000;\n\tpointer-events: none;\n\t}\n.leaflet-top {\n\ttop: 0;\n\t}\n.leaflet-right {\n\tright: 0;\n\t}\n.leaflet-bottom {\n\tbottom: 0;\n\t}\n.leaflet-left {\n\tleft: 0;\n\t}\n.leaflet-control {\n\tfloat: left;\n\tclear: both;\n\t}\n.leaflet-right .leaflet-control {\n\tfloat: right;\n\t}\n.leaflet-top .leaflet-control {\n\tmargin-top: 10px;\n\t}\n.leaflet-bottom .leaflet-control {\n\tmargin-bottom: 10px;\n\t}\n.leaflet-left .leaflet-control {\n\tmargin-left: 10px;\n\t}\n.leaflet-right .leaflet-control {\n\tmargin-right: 10px;\n\t}\n\n\n/* zoom and fade animations */\n\n.leaflet-fade-anim .leaflet-popup {\n\topacity: 0;\n\t-webkit-transition: opacity 0.2s linear;\n\t   -moz-transition: opacity 0.2s linear;\n\t        transition: opacity 0.2s linear;\n\t}\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\n\topacity: 1;\n\t}\n.leaflet-zoom-animated {\n\t-webkit-transform-origin: 0 0;\n\t    -ms-transform-origin: 0 0;\n\t        transform-origin: 0 0;\n\t}\nsvg.leaflet-zoom-animated {\n\twill-change: transform;\n}\n\n.leaflet-zoom-anim .leaflet-zoom-animated {\n\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\n\t   -moz-transition:    -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\n\t        transition:         transform 0.25s cubic-bezier(0,0,0.25,1);\n\t}\n.leaflet-zoom-anim .leaflet-tile,\n.leaflet-pan-anim .leaflet-tile {\n\t-webkit-transition: none;\n\t   -moz-transition: none;\n\t        transition: none;\n\t}\n\n.leaflet-zoom-anim .leaflet-zoom-hide {\n\tvisibility: hidden;\n\t}\n\n\n/* cursors */\n\n.leaflet-interactive {\n\tcursor: pointer;\n\t}\n.leaflet-grab {\n\tcursor: -webkit-grab;\n\tcursor:    -moz-grab;\n\tcursor:         grab;\n\t}\n.leaflet-crosshair,\n.leaflet-crosshair .leaflet-interactive {\n\tcursor: crosshair;\n\t}\n.leaflet-popup-pane,\n.leaflet-control {\n\tcursor: auto;\n\t}\n.leaflet-dragging .leaflet-grab,\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\n.leaflet-dragging .leaflet-marker-draggable {\n\tcursor: move;\n\tcursor: -webkit-grabbing;\n\tcursor:    -moz-grabbing;\n\tcursor:         grabbing;\n\t}\n\n/* marker & overlays interactivity */\n.leaflet-marker-icon,\n.leaflet-marker-shadow,\n.leaflet-image-layer,\n.leaflet-pane > svg path,\n.leaflet-tile-container {\n\tpointer-events: none;\n\t}\n\n.leaflet-marker-icon.leaflet-interactive,\n.leaflet-image-layer.leaflet-interactive,\n.leaflet-pane > svg path.leaflet-interactive,\nsvg.leaflet-image-layer.leaflet-interactive path {\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\n\tpointer-events: auto;\n\t}\n\n/* visual tweaks */\n\n.leaflet-container {\n\tbackground: #ddd;\n\toutline-offset: 1px;\n\t}\n.leaflet-container a {\n\tcolor: #0078A8;\n\t}\n.leaflet-zoom-box {\n\tborder: 2px dotted #38f;\n\tbackground: rgba(255,255,255,0.5);\n\t}\n\n\n/* general typography */\n.leaflet-container {\n\tfont-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n\tfont-size: 12px;\n\tfont-size: 0.75rem;\n\tline-height: 1.5;\n\t}\n\n\n/* general toolbar styles */\n\n.leaflet-bar {\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\n\tborder-radius: 4px;\n\t}\n.leaflet-bar a {\n\tbackground-color: #fff;\n\tborder-bottom: 1px solid #ccc;\n\twidth: 26px;\n\theight: 26px;\n\tline-height: 26px;\n\tdisplay: block;\n\ttext-align: center;\n\ttext-decoration: none;\n\tcolor: black;\n\t}\n.leaflet-bar a,\n.leaflet-control-layers-toggle {\n\tbackground-position: 50% 50%;\n\tbackground-repeat: no-repeat;\n\tdisplay: block;\n\t}\n.leaflet-bar a:hover,\n.leaflet-bar a:focus {\n\tbackground-color: #f4f4f4;\n\t}\n.leaflet-bar a:first-child {\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\t}\n.leaflet-bar a:last-child {\n\tborder-bottom-left-radius: 4px;\n\tborder-bottom-right-radius: 4px;\n\tborder-bottom: none;\n\t}\n.leaflet-bar a.leaflet-disabled {\n\tcursor: default;\n\tbackground-color: #f4f4f4;\n\tcolor: #bbb;\n\t}\n\n.leaflet-touch .leaflet-bar a {\n\twidth: 30px;\n\theight: 30px;\n\tline-height: 30px;\n\t}\n.leaflet-touch .leaflet-bar a:first-child {\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\t}\n.leaflet-touch .leaflet-bar a:last-child {\n\tborder-bottom-left-radius: 2px;\n\tborder-bottom-right-radius: 2px;\n\t}\n\n/* zoom control */\n\n.leaflet-control-zoom-in,\n.leaflet-control-zoom-out {\n\tfont: bold 18px 'Lucida Console', Monaco, monospace;\n\ttext-indent: 1px;\n\t}\n\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out  {\n\tfont-size: 22px;\n\t}\n\n\n/* layers control */\n\n.leaflet-control-layers {\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\n\tbackground: #fff;\n\tborder-radius: 5px;\n\t}\n.leaflet-control-layers-toggle {\n\tbackground-image: url(images/layers.png);\n\twidth: 36px;\n\theight: 36px;\n\t}\n.leaflet-retina .leaflet-control-layers-toggle {\n\tbackground-image: url(images/layers-2x.png);\n\tbackground-size: 26px 26px;\n\t}\n.leaflet-touch .leaflet-control-layers-toggle {\n\twidth: 44px;\n\theight: 44px;\n\t}\n.leaflet-control-layers .leaflet-control-layers-list,\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\n\tdisplay: none;\n\t}\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\n\tdisplay: block;\n\tposition: relative;\n\t}\n.leaflet-control-layers-expanded {\n\tpadding: 6px 10px 6px 6px;\n\tcolor: #333;\n\tbackground: #fff;\n\t}\n.leaflet-control-layers-scrollbar {\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n\tpadding-right: 5px;\n\t}\n.leaflet-control-layers-selector {\n\tmargin-top: 2px;\n\tposition: relative;\n\ttop: 1px;\n\t}\n.leaflet-control-layers label {\n\tdisplay: block;\n\tfont-size: 13px;\n\tfont-size: 1.08333em;\n\t}\n.leaflet-control-layers-separator {\n\theight: 0;\n\tborder-top: 1px solid #ddd;\n\tmargin: 5px -10px 5px -6px;\n\t}\n\n/* Default icon URLs */\n.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */\n\tbackground-image: url(images/marker-icon.png);\n\t}\n\n\n/* attribution and scale controls */\n\n.leaflet-container .leaflet-control-attribution {\n\tbackground: #fff;\n\tbackground: rgba(255, 255, 255, 0.8);\n\tmargin: 0;\n\t}\n.leaflet-control-attribution,\n.leaflet-control-scale-line {\n\tpadding: 0 5px;\n\tcolor: #333;\n\tline-height: 1.4;\n\t}\n.leaflet-control-attribution a {\n\ttext-decoration: none;\n\t}\n.leaflet-control-attribution a:hover,\n.leaflet-control-attribution a:focus {\n\ttext-decoration: underline;\n\t}\n.leaflet-attribution-flag {\n\tdisplay: inline !important;\n\tvertical-align: baseline !important;\n\twidth: 1em;\n\theight: 0.6669em;\n\t}\n.leaflet-left .leaflet-control-scale {\n\tmargin-left: 5px;\n\t}\n.leaflet-bottom .leaflet-control-scale {\n\tmargin-bottom: 5px;\n\t}\n.leaflet-control-scale-line {\n\tborder: 2px solid #777;\n\tborder-top: none;\n\tline-height: 1.1;\n\tpadding: 2px 5px 1px;\n\twhite-space: nowrap;\n\t-moz-box-sizing: border-box;\n\t     box-sizing: border-box;\n\tbackground: rgba(255, 255, 255, 0.8);\n\ttext-shadow: 1px 1px #fff;\n\t}\n.leaflet-control-scale-line:not(:first-child) {\n\tborder-top: 2px solid #777;\n\tborder-bottom: none;\n\tmargin-top: -2px;\n\t}\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\n\tborder-bottom: 2px solid #777;\n\t}\n\n.leaflet-touch .leaflet-control-attribution,\n.leaflet-touch .leaflet-control-layers,\n.leaflet-touch .leaflet-bar {\n\tbox-shadow: none;\n\t}\n.leaflet-touch .leaflet-control-layers,\n.leaflet-touch .leaflet-bar {\n\tborder: 2px solid rgba(0,0,0,0.2);\n\tbackground-clip: padding-box;\n\t}\n\n\n/* popup */\n\n.leaflet-popup {\n\tposition: absolute;\n\ttext-align: center;\n\tmargin-bottom: 20px;\n\t}\n.leaflet-popup-content-wrapper {\n\tpadding: 1px;\n\ttext-align: left;\n\tborder-radius: 12px;\n\t}\n.leaflet-popup-content {\n\tmargin: 13px 24px 13px 20px;\n\tline-height: 1.3;\n\tfont-size: 13px;\n\tfont-size: 1.08333em;\n\tmin-height: 1px;\n\t}\n.leaflet-popup-content p {\n\tmargin: 17px 0;\n\tmargin: 1.3em 0;\n\t}\n.leaflet-popup-tip-container {\n\twidth: 40px;\n\theight: 20px;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-top: -1px;\n\tmargin-left: -20px;\n\toverflow: hidden;\n\tpointer-events: none;\n\t}\n.leaflet-popup-tip {\n\twidth: 17px;\n\theight: 17px;\n\tpadding: 1px;\n\n\tmargin: -10px auto 0;\n\tpointer-events: auto;\n\n\t-webkit-transform: rotate(45deg);\n\t   -moz-transform: rotate(45deg);\n\t    -ms-transform: rotate(45deg);\n\t        transform: rotate(45deg);\n\t}\n.leaflet-popup-content-wrapper,\n.leaflet-popup-tip {\n\tbackground: white;\n\tcolor: #333;\n\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\n\t}\n.leaflet-container a.leaflet-popup-close-button {\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tborder: none;\n\ttext-align: center;\n\twidth: 24px;\n\theight: 24px;\n\tfont: 16px/24px Tahoma, Verdana, sans-serif;\n\tcolor: #757575;\n\ttext-decoration: none;\n\tbackground: transparent;\n\t}\n.leaflet-container a.leaflet-popup-close-button:hover,\n.leaflet-container a.leaflet-popup-close-button:focus {\n\tcolor: #585858;\n\t}\n.leaflet-popup-scrolled {\n\toverflow: auto;\n\t}\n\n.leaflet-oldie .leaflet-popup-content-wrapper {\n\t-ms-zoom: 1;\n\t}\n.leaflet-oldie .leaflet-popup-tip {\n\twidth: 24px;\n\tmargin: 0 auto;\n\n\t-ms-filter: \"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)\";\n\tfilter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\n\t}\n\n.leaflet-oldie .leaflet-control-zoom,\n.leaflet-oldie .leaflet-control-layers,\n.leaflet-oldie .leaflet-popup-content-wrapper,\n.leaflet-oldie .leaflet-popup-tip {\n\tborder: 1px solid #999;\n\t}\n\n\n/* div icon */\n\n.leaflet-div-icon {\n\tbackground: #fff;\n\tborder: 1px solid #666;\n\t}\n\n\n/* Tooltip */\n/* Base styles for the element that has a tooltip */\n.leaflet-tooltip {\n\tposition: absolute;\n\tpadding: 6px;\n\tbackground-color: #fff;\n\tborder: 1px solid #fff;\n\tborder-radius: 3px;\n\tcolor: #222;\n\twhite-space: nowrap;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\tpointer-events: none;\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\n\t}\n.leaflet-tooltip.leaflet-interactive {\n\tcursor: pointer;\n\tpointer-events: auto;\n\t}\n.leaflet-tooltip-top:before,\n.leaflet-tooltip-bottom:before,\n.leaflet-tooltip-left:before,\n.leaflet-tooltip-right:before {\n\tposition: absolute;\n\tpointer-events: none;\n\tborder: 6px solid transparent;\n\tbackground: transparent;\n\tcontent: \"\";\n\t}\n\n/* Directions */\n\n.leaflet-tooltip-bottom {\n\tmargin-top: 6px;\n}\n.leaflet-tooltip-top {\n\tmargin-top: -6px;\n}\n.leaflet-tooltip-bottom:before,\n.leaflet-tooltip-top:before {\n\tleft: 50%;\n\tmargin-left: -6px;\n\t}\n.leaflet-tooltip-top:before {\n\tbottom: 0;\n\tmargin-bottom: -12px;\n\tborder-top-color: #fff;\n\t}\n.leaflet-tooltip-bottom:before {\n\ttop: 0;\n\tmargin-top: -12px;\n\tmargin-left: -6px;\n\tborder-bottom-color: #fff;\n\t}\n.leaflet-tooltip-left {\n\tmargin-left: -6px;\n}\n.leaflet-tooltip-right {\n\tmargin-left: 6px;\n}\n.leaflet-tooltip-left:before,\n.leaflet-tooltip-right:before {\n\ttop: 50%;\n\tmargin-top: -6px;\n\t}\n.leaflet-tooltip-left:before {\n\tright: 0;\n\tmargin-right: -12px;\n\tborder-left-color: #fff;\n\t}\n.leaflet-tooltip-right:before {\n\tleft: 0;\n\tmargin-left: -12px;\n\tborder-right-color: #fff;\n\t}\n\n/* Printing */\n\n@media print {\n\t/* Prevent printers from removing background-images of controls. */\n\t.leaflet-control {\n\t\t-webkit-print-color-adjust: exact;\n\t\tprint-color-adjust: exact;\n\t\t}\n\t}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/leaflet/leaflet.js",
    "content": "/* @preserve\n * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com\n * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=\"undefined\"!=typeof globalThis?globalThis:t||self).leaflet={})}(this,function(t){\"use strict\";function l(t){for(var e,i,n=1,o=arguments.length;n<o;n++)for(e in i=arguments[n])t[e]=i[e];return t}var R=Object.create||function(t){return N.prototype=t,new N};function N(){}function a(t,e){var i,n=Array.prototype.slice;return t.bind?t.bind.apply(t,n.call(arguments,1)):(i=n.call(arguments,2),function(){return t.apply(e,i.length?i.concat(n.call(arguments)):arguments)})}var D=0;function h(t){return\"_leaflet_id\"in t||(t._leaflet_id=++D),t._leaflet_id}function j(t,e,i){var n,o,s=function(){n=!1,o&&(r.apply(i,o),o=!1)},r=function(){n?o=arguments:(t.apply(i,arguments),setTimeout(s,e),n=!0)};return r}function H(t,e,i){var n=e[1],e=e[0],o=n-e;return t===n&&i?t:((t-e)%o+o)%o+e}function u(){return!1}function i(t,e){return!1===e?t:(e=Math.pow(10,void 0===e?6:e),Math.round(t*e)/e)}function W(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")}function F(t){return W(t).split(/\\s+/)}function c(t,e){for(var i in Object.prototype.hasOwnProperty.call(t,\"options\")||(t.options=t.options?R(t.options):{}),e)t.options[i]=e[i];return t.options}function U(t,e,i){var n,o=[];for(n in t)o.push(encodeURIComponent(i?n.toUpperCase():n)+\"=\"+encodeURIComponent(t[n]));return(e&&-1!==e.indexOf(\"?\")?\"&\":\"?\")+o.join(\"&\")}var V=/\\{ *([\\w_ -]+) *\\}/g;function q(t,i){return t.replace(V,function(t,e){e=i[e];if(void 0===e)throw new Error(\"No value provided for variable \"+t);return e=\"function\"==typeof e?e(i):e})}var d=Array.isArray||function(t){return\"[object Array]\"===Object.prototype.toString.call(t)};function G(t,e){for(var i=0;i<t.length;i++)if(t[i]===e)return i;return-1}var K=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=\";function Y(t){return window[\"webkit\"+t]||window[\"moz\"+t]||window[\"ms\"+t]}var X=0;function J(t){var e=+new Date,i=Math.max(0,16-(e-X));return X=e+i,window.setTimeout(t,i)}var $=window.requestAnimationFrame||Y(\"RequestAnimationFrame\")||J,Q=window.cancelAnimationFrame||Y(\"CancelAnimationFrame\")||Y(\"CancelRequestAnimationFrame\")||function(t){window.clearTimeout(t)};function x(t,e,i){if(!i||$!==J)return $.call(window,a(t,e));t.call(e)}function r(t){t&&Q.call(window,t)}var tt={__proto__:null,extend:l,create:R,bind:a,get lastId(){return D},stamp:h,throttle:j,wrapNum:H,falseFn:u,formatNum:i,trim:W,splitWords:F,setOptions:c,getParamString:U,template:q,isArray:d,indexOf:G,emptyImageUrl:K,requestFn:$,cancelFn:Q,requestAnimFrame:x,cancelAnimFrame:r};function et(){}et.extend=function(t){function e(){c(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()}var i,n=e.__super__=this.prototype,o=R(n);for(i in(o.constructor=e).prototype=o,this)Object.prototype.hasOwnProperty.call(this,i)&&\"prototype\"!==i&&\"__super__\"!==i&&(e[i]=this[i]);if(t.statics&&l(e,t.statics),t.includes){var s=t.includes;if(\"undefined\"!=typeof L&&L&&L.Mixin){s=d(s)?s:[s];for(var r=0;r<s.length;r++)s[r]===L.Mixin.Events&&console.warn(\"Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.\",(new Error).stack)}l.apply(null,[o].concat(t.includes))}return l(o,t),delete o.statics,delete o.includes,o.options&&(o.options=n.options?R(n.options):{},l(o.options,t.options)),o._initHooks=[],o.callInitHooks=function(){if(!this._initHooksCalled){n.callInitHooks&&n.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,e=o._initHooks.length;t<e;t++)o._initHooks[t].call(this)}},e},et.include=function(t){var e=this.prototype.options;return l(this.prototype,t),t.options&&(this.prototype.options=e,this.mergeOptions(t.options)),this},et.mergeOptions=function(t){return l(this.prototype.options,t),this},et.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i=\"function\"==typeof t?t:function(){this[t].apply(this,e)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i),this};var e={on:function(t,e,i){if(\"object\"==typeof t)for(var n in t)this._on(n,t[n],e);else for(var o=0,s=(t=F(t)).length;o<s;o++)this._on(t[o],e,i);return this},off:function(t,e,i){if(arguments.length)if(\"object\"==typeof t)for(var n in t)this._off(n,t[n],e);else{t=F(t);for(var o=1===arguments.length,s=0,r=t.length;s<r;s++)o?this._off(t[s]):this._off(t[s],e,i)}else delete this._events;return this},_on:function(t,e,i,n){\"function\"!=typeof e?console.warn(\"wrong listener type: \"+typeof e):!1===this._listens(t,e,i)&&(e={fn:e,ctx:i=i===this?void 0:i},n&&(e.once=!0),this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(e))},_off:function(t,e,i){var n,o,s;if(this._events&&(n=this._events[t]))if(1===arguments.length){if(this._firingCount)for(o=0,s=n.length;o<s;o++)n[o].fn=u;delete this._events[t]}else\"function\"!=typeof e?console.warn(\"wrong listener type: \"+typeof e):!1!==(e=this._listens(t,e,i))&&(i=n[e],this._firingCount&&(i.fn=u,this._events[t]=n=n.slice()),n.splice(e,1))},fire:function(t,e,i){if(this.listens(t,i)){var n=l({},e,{type:t,target:this,sourceTarget:e&&e.sourceTarget||this});if(this._events){var o=this._events[t];if(o){this._firingCount=this._firingCount+1||1;for(var s=0,r=o.length;s<r;s++){var a=o[s],h=a.fn;a.once&&this.off(t,h,a.ctx),h.call(a.ctx||this,n)}this._firingCount--}}i&&this._propagateEvent(n)}return this},listens:function(t,e,i,n){\"string\"!=typeof t&&console.warn('\"string\" type argument expected');var o=e,s=(\"function\"!=typeof e&&(n=!!e,i=o=void 0),this._events&&this._events[t]);if(s&&s.length&&!1!==this._listens(t,o,i))return!0;if(n)for(var r in this._eventParents)if(this._eventParents[r].listens(t,e,i,n))return!0;return!1},_listens:function(t,e,i){if(this._events){var n=this._events[t]||[];if(!e)return!!n.length;i===this&&(i=void 0);for(var o=0,s=n.length;o<s;o++)if(n[o].fn===e&&n[o].ctx===i)return o}return!1},once:function(t,e,i){if(\"object\"==typeof t)for(var n in t)this._on(n,t[n],e,!0);else for(var o=0,s=(t=F(t)).length;o<s;o++)this._on(t[o],e,i,!0);return this},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[h(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[h(t)],this},_propagateEvent:function(t){for(var e in this._eventParents)this._eventParents[e].fire(t.type,l({layer:t.target,propagatedFrom:t.target},t),!0)}},it=(e.addEventListener=e.on,e.removeEventListener=e.clearAllEventListeners=e.off,e.addOneTimeEventListener=e.once,e.fireEvent=e.fire,e.hasEventListeners=e.listens,et.extend(e));function p(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e}var nt=Math.trunc||function(t){return 0<t?Math.floor(t):Math.ceil(t)};function m(t,e,i){return t instanceof p?t:d(t)?new p(t[0],t[1]):null==t?t:\"object\"==typeof t&&\"x\"in t&&\"y\"in t?new p(t.x,t.y):new p(t,e,i)}function f(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n<o;n++)this.extend(i[n])}function _(t,e){return!t||t instanceof f?t:new f(t,e)}function s(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;n<o;n++)this.extend(i[n])}function g(t,e){return t instanceof s?t:new s(t,e)}function v(t,e,i){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LatLng object: (\"+t+\", \"+e+\")\");this.lat=+t,this.lng=+e,void 0!==i&&(this.alt=+i)}function w(t,e,i){return t instanceof v?t:d(t)&&\"object\"!=typeof t[0]?3===t.length?new v(t[0],t[1],t[2]):2===t.length?new v(t[0],t[1]):null:null==t?t:\"object\"==typeof t&&\"lat\"in t?new v(t.lat,\"lng\"in t?t.lng:t.lon,t.alt):void 0===e?null:new v(t,e,i)}p.prototype={clone:function(){return new p(this.x,this.y)},add:function(t){return this.clone()._add(m(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(m(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new p(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new p(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=nt(this.x),this.y=nt(this.y),this},distanceTo:function(t){var e=(t=m(t)).x-this.x,t=t.y-this.y;return Math.sqrt(e*e+t*t)},equals:function(t){return(t=m(t)).x===this.x&&t.y===this.y},contains:function(t){return t=m(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return\"Point(\"+i(this.x)+\", \"+i(this.y)+\")\"}},f.prototype={extend:function(t){var e,i;if(t){if(t instanceof p||\"number\"==typeof t[0]||\"x\"in t)e=i=m(t);else if(e=(t=_(t)).min,i=t.max,!e||!i)return this;this.min||this.max?(this.min.x=Math.min(e.x,this.min.x),this.max.x=Math.max(i.x,this.max.x),this.min.y=Math.min(e.y,this.min.y),this.max.y=Math.max(i.y,this.max.y)):(this.min=e.clone(),this.max=i.clone())}return this},getCenter:function(t){return m((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return m(this.min.x,this.max.y)},getTopRight:function(){return m(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return(t=(\"number\"==typeof t[0]||t instanceof p?m:_)(t))instanceof f?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>=e.x&&n.x<=i.x,t=t.y>=e.y&&n.y<=i.y;return o&&t},overlaps:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>e.x&&n.x<i.x,t=t.y>e.y&&n.y<i.y;return o&&t},isValid:function(){return!(!this.min||!this.max)},pad:function(t){var e=this.min,i=this.max,n=Math.abs(e.x-i.x)*t,t=Math.abs(e.y-i.y)*t;return _(m(e.x-n,e.y-t),m(i.x+n,i.y+t))},equals:function(t){return!!t&&(t=_(t),this.min.equals(t.getTopLeft())&&this.max.equals(t.getBottomRight()))}},s.prototype={extend:function(t){var e,i,n=this._southWest,o=this._northEast;if(t instanceof v)i=e=t;else{if(!(t instanceof s))return t?this.extend(w(t)||g(t)):this;if(e=t._southWest,i=t._northEast,!e||!i)return this}return n||o?(n.lat=Math.min(e.lat,n.lat),n.lng=Math.min(e.lng,n.lng),o.lat=Math.max(i.lat,o.lat),o.lng=Math.max(i.lng,o.lng)):(this._southWest=new v(e.lat,e.lng),this._northEast=new v(i.lat,i.lng)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,t=Math.abs(e.lng-i.lng)*t;return new s(new v(e.lat-n,e.lng-t),new v(i.lat+n,i.lng+t))},getCenter:function(){return new v((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new v(this.getNorth(),this.getWest())},getSouthEast:function(){return new v(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t=(\"number\"==typeof t[0]||t instanceof v||\"lat\"in t?w:g)(t);var e,i,n=this._southWest,o=this._northEast;return t instanceof s?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=o.lat&&e.lng>=n.lng&&i.lng<=o.lng},intersects:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>=e.lat&&n.lat<=i.lat,t=t.lng>=e.lng&&n.lng<=i.lng;return o&&t},overlaps:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>e.lat&&n.lat<i.lat,t=t.lng>e.lng&&n.lng<i.lng;return o&&t},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(\",\")},equals:function(t,e){return!!t&&(t=g(t),this._southWest.equals(t.getSouthWest(),e)&&this._northEast.equals(t.getNorthEast(),e))},isValid:function(){return!(!this._southWest||!this._northEast)}};var ot={latLngToPoint:function(t,e){t=this.projection.project(t),e=this.scale(e);return this.transformation._transform(t,e)},pointToLatLng:function(t,e){e=this.scale(e),t=this.transformation.untransform(t,e);return this.projection.unproject(t)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){var e;return this.infinite?null:(e=this.projection.bounds,t=this.scale(t),new f(this.transformation.transform(e.min,t),this.transformation.transform(e.max,t)))},infinite:!(v.prototype={equals:function(t,e){return!!t&&(t=w(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void 0===e?1e-9:e))},toString:function(t){return\"LatLng(\"+i(this.lat,t)+\", \"+i(this.lng,t)+\")\"},distanceTo:function(t){return st.distance(this,w(t))},wrap:function(){return st.wrapLatLng(this)},toBounds:function(t){var t=180*t/40075017,e=t/Math.cos(Math.PI/180*this.lat);return g([this.lat-t,this.lng-e],[this.lat+t,this.lng+e])},clone:function(){return new v(this.lat,this.lng,this.alt)}}),wrapLatLng:function(t){var e=this.wrapLng?H(t.lng,this.wrapLng,!0):t.lng;return new v(this.wrapLat?H(t.lat,this.wrapLat,!0):t.lat,e,t.alt)},wrapLatLngBounds:function(t){var e=t.getCenter(),i=this.wrapLatLng(e),n=e.lat-i.lat,e=e.lng-i.lng;return 0==n&&0==e?t:(i=t.getSouthWest(),t=t.getNorthEast(),new s(new v(i.lat-n,i.lng-e),new v(t.lat-n,t.lng-e)))}},st=l({},ot,{wrapLng:[-180,180],R:6371e3,distance:function(t,e){var i=Math.PI/180,n=t.lat*i,o=e.lat*i,s=Math.sin((e.lat-t.lat)*i/2),e=Math.sin((e.lng-t.lng)*i/2),t=s*s+Math.cos(n)*Math.cos(o)*e*e,i=2*Math.atan2(Math.sqrt(t),Math.sqrt(1-t));return this.R*i}}),rt=6378137,rt={R:rt,MAX_LATITUDE:85.0511287798,project:function(t){var e=Math.PI/180,i=this.MAX_LATITUDE,i=Math.max(Math.min(i,t.lat),-i),i=Math.sin(i*e);return new p(this.R*t.lng*e,this.R*Math.log((1+i)/(1-i))/2)},unproject:function(t){var e=180/Math.PI;return new v((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*e,t.x*e/this.R)},bounds:new f([-(rt=rt*Math.PI),-rt],[rt,rt])};function at(t,e,i,n){d(t)?(this._a=t[0],this._b=t[1],this._c=t[2],this._d=t[3]):(this._a=t,this._b=e,this._c=i,this._d=n)}function ht(t,e,i,n){return new at(t,e,i,n)}at.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return t.x=(e=e||1)*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return new p((t.x/(e=e||1)-this._b)/this._a,(t.y/e-this._d)/this._c)}};var lt=l({},st,{code:\"EPSG:3857\",projection:rt,transformation:ht(lt=.5/(Math.PI*rt.R),.5,-lt,.5)}),ut=l({},lt,{code:\"EPSG:900913\"});function ct(t){return document.createElementNS(\"http://www.w3.org/2000/svg\",t)}function dt(t,e){for(var i,n,o,s,r=\"\",a=0,h=t.length;a<h;a++){for(i=0,n=(o=t[a]).length;i<n;i++)r+=(i?\"L\":\"M\")+(s=o[i]).x+\" \"+s.y;r+=e?b.svg?\"z\":\"x\":\"\"}return r||\"M0 0\"}var _t=document.documentElement.style,pt=\"ActiveXObject\"in window,mt=pt&&!document.addEventListener,n=\"msLaunchUri\"in navigator&&!(\"documentMode\"in document),ft=y(\"webkit\"),gt=y(\"android\"),vt=y(\"android 2\")||y(\"android 3\"),yt=parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),yt=gt&&y(\"Google\")&&yt<537&&!(\"AudioNode\"in window),xt=!!window.opera,wt=!n&&y(\"chrome\"),bt=y(\"gecko\")&&!ft&&!xt&&!pt,Pt=!wt&&y(\"safari\"),Lt=y(\"phantom\"),o=\"OTransition\"in _t,Tt=0===navigator.platform.indexOf(\"Win\"),Mt=pt&&\"transition\"in _t,zt=\"WebKitCSSMatrix\"in window&&\"m11\"in new window.WebKitCSSMatrix&&!vt,_t=\"MozPerspective\"in _t,Ct=!window.L_DISABLE_3D&&(Mt||zt||_t)&&!o&&!Lt,Zt=\"undefined\"!=typeof orientation||y(\"mobile\"),St=Zt&&ft,Et=Zt&&zt,kt=!window.PointerEvent&&window.MSPointerEvent,Ot=!(!window.PointerEvent&&!kt),At=\"ontouchstart\"in window||!!window.TouchEvent,Bt=!window.L_NO_TOUCH&&(At||Ot),It=Zt&&xt,Rt=Zt&&bt,Nt=1<(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI),Dt=function(){var t=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});window.addEventListener(\"testPassiveEventSupport\",u,e),window.removeEventListener(\"testPassiveEventSupport\",u,e)}catch(t){}return t}(),jt=!!document.createElement(\"canvas\").getContext,Ht=!(!document.createElementNS||!ct(\"svg\").createSVGRect),Wt=!!Ht&&((Wt=document.createElement(\"div\")).innerHTML=\"<svg/>\",\"http://www.w3.org/2000/svg\"===(Wt.firstChild&&Wt.firstChild.namespaceURI));function y(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var b={ie:pt,ielt9:mt,edge:n,webkit:ft,android:gt,android23:vt,androidStock:yt,opera:xt,chrome:wt,gecko:bt,safari:Pt,phantom:Lt,opera12:o,win:Tt,ie3d:Mt,webkit3d:zt,gecko3d:_t,any3d:Ct,mobile:Zt,mobileWebkit:St,mobileWebkit3d:Et,msPointer:kt,pointer:Ot,touch:Bt,touchNative:At,mobileOpera:It,mobileGecko:Rt,retina:Nt,passiveEvents:Dt,canvas:jt,svg:Ht,vml:!Ht&&function(){try{var t=document.createElement(\"div\"),e=(t.innerHTML='<v:shape adj=\"1\"/>',t.firstChild);return e.style.behavior=\"url(#default#VML)\",e&&\"object\"==typeof e.adj}catch(t){return!1}}(),inlineSvg:Wt,mac:0===navigator.platform.indexOf(\"Mac\"),linux:0===navigator.platform.indexOf(\"Linux\")},Ft=b.msPointer?\"MSPointerDown\":\"pointerdown\",Ut=b.msPointer?\"MSPointerMove\":\"pointermove\",Vt=b.msPointer?\"MSPointerUp\":\"pointerup\",qt=b.msPointer?\"MSPointerCancel\":\"pointercancel\",Gt={touchstart:Ft,touchmove:Ut,touchend:Vt,touchcancel:qt},Kt={touchstart:function(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);ee(t,e)},touchmove:ee,touchend:ee,touchcancel:ee},Yt={},Xt=!1;function Jt(t,e,i){return\"touchstart\"!==e||Xt||(document.addEventListener(Ft,$t,!0),document.addEventListener(Ut,Qt,!0),document.addEventListener(Vt,te,!0),document.addEventListener(qt,te,!0),Xt=!0),Kt[e]?(i=Kt[e].bind(this,i),t.addEventListener(Gt[e],i,!1),i):(console.warn(\"wrong event specified:\",e),u)}function $t(t){Yt[t.pointerId]=t}function Qt(t){Yt[t.pointerId]&&(Yt[t.pointerId]=t)}function te(t){delete Yt[t.pointerId]}function ee(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||\"mouse\")){for(var i in e.touches=[],Yt)e.touches.push(Yt[i]);e.changedTouches=[e],t(e)}}var ie=200;function ne(t,i){t.addEventListener(\"dblclick\",i);var n,o=0;function e(t){var e;1!==t.detail?n=t.detail:\"mouse\"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||((e=Ne(t)).some(function(t){return t instanceof HTMLLabelElement&&t.attributes.for})&&!e.some(function(t){return t instanceof HTMLInputElement||t instanceof HTMLSelectElement})||((e=Date.now())-o<=ie?2===++n&&i(function(t){var e,i,n={};for(i in t)e=t[i],n[i]=e&&e.bind?e.bind(t):e;return(t=n).type=\"dblclick\",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}(t)):n=1,o=e))}return t.addEventListener(\"click\",e),{dblclick:i,simDblclick:e}}var oe,se,re,ae,he,le,ue=we([\"transform\",\"webkitTransform\",\"OTransform\",\"MozTransform\",\"msTransform\"]),ce=we([\"webkitTransition\",\"transition\",\"OTransition\",\"MozTransition\",\"msTransition\"]),de=\"webkitTransition\"===ce||\"OTransition\"===ce?ce+\"End\":\"transitionend\";function _e(t){return\"string\"==typeof t?document.getElementById(t):t}function pe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];return\"auto\"===(i=i&&\"auto\"!==i||!document.defaultView?i:(t=document.defaultView.getComputedStyle(t,null))?t[e]:null)?null:i}function P(t,e,i){t=document.createElement(t);return t.className=e||\"\",i&&i.appendChild(t),t}function T(t){var e=t.parentNode;e&&e.removeChild(t)}function me(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fe(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function ge(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function ve(t,e){return void 0!==t.classList?t.classList.contains(e):0<(t=xe(t)).length&&new RegExp(\"(^|\\\\s)\"+e+\"(\\\\s|$)\").test(t)}function M(t,e){var i;if(void 0!==t.classList)for(var n=F(e),o=0,s=n.length;o<s;o++)t.classList.add(n[o]);else ve(t,e)||ye(t,((i=xe(t))?i+\" \":\"\")+e)}function z(t,e){void 0!==t.classList?t.classList.remove(e):ye(t,W((\" \"+xe(t)+\" \").replace(\" \"+e+\" \",\" \")))}function ye(t,e){void 0===t.className.baseVal?t.className=e:t.className.baseVal=e}function xe(t){return void 0===(t=t.correspondingElement?t.correspondingElement:t).className.baseVal?t.className:t.className.baseVal}function C(t,e){if(\"opacity\"in t.style)t.style.opacity=e;else if(\"filter\"in t.style){var i=!1,n=\"DXImageTransform.Microsoft.Alpha\";try{i=t.filters.item(n)}catch(t){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=\" progid:\"+n+\"(opacity=\"+e+\")\"}}function we(t){for(var e=document.documentElement.style,i=0;i<t.length;i++)if(t[i]in e)return t[i];return!1}function be(t,e,i){e=e||new p(0,0);t.style[ue]=(b.ie3d?\"translate(\"+e.x+\"px,\"+e.y+\"px)\":\"translate3d(\"+e.x+\"px,\"+e.y+\"px,0)\")+(i?\" scale(\"+i+\")\":\"\")}function Z(t,e){t._leaflet_pos=e,b.any3d?be(t,e):(t.style.left=e.x+\"px\",t.style.top=e.y+\"px\")}function Pe(t){return t._leaflet_pos||new p(0,0)}function Le(){S(window,\"dragstart\",O)}function Te(){k(window,\"dragstart\",O)}function Me(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(ze(),le=(he=t).style.outlineStyle,t.style.outlineStyle=\"none\",S(window,\"keydown\",ze))}function ze(){he&&(he.style.outlineStyle=le,le=he=void 0,k(window,\"keydown\",ze))}function Ce(t){for(;!((t=t.parentNode).offsetWidth&&t.offsetHeight||t===document.body););return t}function Ze(t){var e=t.getBoundingClientRect();return{x:e.width/t.offsetWidth||1,y:e.height/t.offsetHeight||1,boundingClientRect:e}}ae=\"onselectstart\"in document?(re=function(){S(window,\"selectstart\",O)},function(){k(window,\"selectstart\",O)}):(se=we([\"userSelect\",\"WebkitUserSelect\",\"OUserSelect\",\"MozUserSelect\",\"msUserSelect\"]),re=function(){var t;se&&(t=document.documentElement.style,oe=t[se],t[se]=\"none\")},function(){se&&(document.documentElement.style[se]=oe,oe=void 0)});pt={__proto__:null,TRANSFORM:ue,TRANSITION:ce,TRANSITION_END:de,get:_e,getStyle:pe,create:P,remove:T,empty:me,toFront:fe,toBack:ge,hasClass:ve,addClass:M,removeClass:z,setClass:ye,getClass:xe,setOpacity:C,testProp:we,setTransform:be,setPosition:Z,getPosition:Pe,get disableTextSelection(){return re},get enableTextSelection(){return ae},disableImageDrag:Le,enableImageDrag:Te,preventOutline:Me,restoreOutline:ze,getSizedParentNode:Ce,getScale:Ze};function S(t,e,i,n){if(e&&\"object\"==typeof e)for(var o in e)ke(t,o,e[o],i);else for(var s=0,r=(e=F(e)).length;s<r;s++)ke(t,e[s],i,n);return this}var E=\"_leaflet_events\";function k(t,e,i,n){if(1===arguments.length)Se(t),delete t[E];else if(e&&\"object\"==typeof e)for(var o in e)Oe(t,o,e[o],i);else if(e=F(e),2===arguments.length)Se(t,function(t){return-1!==G(e,t)});else for(var s=0,r=e.length;s<r;s++)Oe(t,e[s],i,n);return this}function Se(t,e){for(var i in t[E]){var n=i.split(/\\d/)[0];e&&!e(n)||Oe(t,n,null,null,i)}}var Ee={mouseenter:\"mouseover\",mouseleave:\"mouseout\",wheel:!(\"onwheel\"in window)&&\"mousewheel\"};function ke(e,t,i,n){var o,s,r=t+h(i)+(n?\"_\"+h(n):\"\");e[E]&&e[E][r]||(s=o=function(t){return i.call(n||e,t||window.event)},!b.touchNative&&b.pointer&&0===t.indexOf(\"touch\")?o=Jt(e,t,o):b.touch&&\"dblclick\"===t?o=ne(e,o):\"addEventListener\"in e?\"touchstart\"===t||\"touchmove\"===t||\"wheel\"===t||\"mousewheel\"===t?e.addEventListener(Ee[t]||t,o,!!b.passiveEvents&&{passive:!1}):\"mouseenter\"===t||\"mouseleave\"===t?e.addEventListener(Ee[t],o=function(t){t=t||window.event,We(e,t)&&s(t)},!1):e.addEventListener(t,s,!1):e.attachEvent(\"on\"+t,o),e[E]=e[E]||{},e[E][r]=o)}function Oe(t,e,i,n,o){o=o||e+h(i)+(n?\"_\"+h(n):\"\");var s,r,i=t[E]&&t[E][o];i&&(!b.touchNative&&b.pointer&&0===e.indexOf(\"touch\")?(n=t,r=i,Gt[s=e]?n.removeEventListener(Gt[s],r,!1):console.warn(\"wrong event specified:\",s)):b.touch&&\"dblclick\"===e?(n=i,(r=t).removeEventListener(\"dblclick\",n.dblclick),r.removeEventListener(\"click\",n.simDblclick)):\"removeEventListener\"in t?t.removeEventListener(Ee[e]||e,i,!1):t.detachEvent(\"on\"+e,i),t[E][o]=null)}function Ae(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,this}function Be(t){return ke(t,\"wheel\",Ae),this}function Ie(t){return S(t,\"mousedown touchstart dblclick contextmenu\",Ae),t._leaflet_disable_click=!0,this}function O(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function Re(t){return O(t),Ae(t),this}function Ne(t){if(t.composedPath)return t.composedPath();for(var e=[],i=t.target;i;)e.push(i),i=i.parentNode;return e}function De(t,e){var i,n;return e?(n=(i=Ze(e)).boundingClientRect,new p((t.clientX-n.left)/i.x-e.clientLeft,(t.clientY-n.top)/i.y-e.clientTop)):new p(t.clientX,t.clientY)}var je=b.linux&&b.chrome?window.devicePixelRatio:b.mac?3*window.devicePixelRatio:0<window.devicePixelRatio?2*window.devicePixelRatio:1;function He(t){return b.edge?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/je:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function We(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(t){return!1}return i!==t}var mt={__proto__:null,on:S,off:k,stopPropagation:Ae,disableScrollPropagation:Be,disableClickPropagation:Ie,preventDefault:O,stop:Re,getPropagationPath:Ne,getMousePosition:De,getWheelDelta:He,isExternalTarget:We,addListener:S,removeListener:k},Fe=it.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Pe(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire(\"start\"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=x(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,i=1e3*this._duration;e<i?this._runFrame(this._easeOut(e/i),t):(this._runFrame(1),this._complete())},_runFrame:function(t,e){t=this._startPos.add(this._offset.multiplyBy(t));e&&t._round(),Z(this._el,t),this.fire(\"step\")},_complete:function(){r(this._animId),this._inProgress=!1,this.fire(\"end\")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),A=it.extend({options:{crs:lt,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,e){e=c(this,e),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this._initContainer(t),this._initLayout(),this._onResize=a(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),void 0!==e.zoom&&(this._zoom=this._limitZoom(e.zoom)),e.center&&void 0!==e.zoom&&this.setView(w(e.center),e.zoom,{reset:!0}),this.callInitHooks(),this._zoomAnimated=ce&&b.any3d&&!b.mobileOpera&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),S(this._proxy,de,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,e,i){if((e=void 0===e?this._zoom:this._limitZoom(e),t=this._limitCenter(w(t),e,this.options.maxBounds),i=i||{},this._stop(),this._loaded&&!i.reset&&!0!==i)&&(void 0!==i.animate&&(i.zoom=l({animate:i.animate},i.zoom),i.pan=l({animate:i.animate,duration:i.duration},i.pan)),this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,i.zoom):this._tryAnimatedPan(t,i.pan)))return clearTimeout(this._sizeTimer),this;return this._resetView(t,e,i.pan&&i.pan.noMoveStart),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=t,this)},zoomIn:function(t,e){return t=t||(b.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom+t,e)},zoomOut:function(t,e){return t=t||(b.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom-t,e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),o=this.getSize().divideBy(2),t=(t instanceof p?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),n=this.containerPointToLatLng(o.add(t));return this.setView(n,e,{zoom:i})},_getBoundsCenterZoom:function(t,e){e=e||{},t=t.getBounds?t.getBounds():g(t);var i=m(e.paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.getBoundsZoom(t,!1,i.add(n));return(o=\"number\"==typeof e.maxZoom?Math.min(e.maxZoom,o):o)===1/0?{center:t.getCenter(),zoom:o}:(e=n.subtract(i).divideBy(2),n=this.project(t.getSouthWest(),o),i=this.project(t.getNorthEast(),o),{center:this.unproject(n.add(i).divideBy(2).add(e),o),zoom:o})},fitBounds:function(t,e){if((t=g(t)).isValid())return t=this._getBoundsCenterZoom(t,e),this.setView(t.center,t.zoom,e);throw new Error(\"Bounds are not valid.\")},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t,e){var i;return e=e||{},(t=m(t).round()).x||t.y?(!0===e.animate||this.getSize().contains(t)?(this._panAnim||(this._panAnim=new Fe,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire(\"movestart\"),!1!==e.animate?(M(this._mapPane,\"leaflet-pan-anim\"),i=this._getMapPanePos().subtract(t).round(),this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)):(this._rawPanBy(t),this.fire(\"move\").fire(\"moveend\"))):this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this):this.fire(\"moveend\")},flyTo:function(n,o,t){if(!1===(t=t||{}).animate||!b.any3d)return this.setView(n,o,t);this._stop();var s=this.project(this.getCenter()),r=this.project(n),e=this.getSize(),a=this._zoom,h=(n=w(n),o=void 0===o?a:o,Math.max(e.x,e.y)),i=h*this.getZoomScale(a,o),l=r.distanceTo(s)||1,u=1.42,c=u*u;function d(t){t=(i*i-h*h+(t?-1:1)*c*c*l*l)/(2*(t?i:h)*c*l),t=Math.sqrt(t*t+1)-t;return t<1e-9?-18:Math.log(t)}function _(t){return(Math.exp(t)-Math.exp(-t))/2}function p(t){return(Math.exp(t)+Math.exp(-t))/2}var m=d(0);function f(t){return h*(p(m)*(_(t=m+u*t)/p(t))-_(m))/c}var g=Date.now(),v=(d(1)-m)/u,y=t.duration?1e3*t.duration:1e3*v*.8;return this._moveStart(!0,t.noMoveStart),function t(){var e=(Date.now()-g)/y,i=(1-Math.pow(1-e,1.5))*v;e<=1?(this._flyToFrame=x(t,this),this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(i)/l)),a),this.getScaleZoom(h/(e=i,h*(p(m)/p(m+u*e))),a),{flyTo:!0})):this._move(n,o)._moveEnd(!0)}.call(this),this},flyToBounds:function(t,e){t=this._getBoundsCenterZoom(t,e);return this.flyTo(t.center,t.zoom,e)},setMaxBounds:function(t){return t=g(t),this.listens(\"moveend\",this._panInsideMaxBounds)&&this.off(\"moveend\",this._panInsideMaxBounds),t.isValid()?(this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on(\"moveend\",this._panInsideMaxBounds)):(this.options.maxBounds=null,this)},setMinZoom:function(t){var e=this.options.minZoom;return this.options.minZoom=t,this._loaded&&e!==t&&(this.fire(\"zoomlevelschange\"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var e=this.options.maxZoom;return this.options.maxZoom=t,this._loaded&&e!==t&&(this.fire(\"zoomlevelschange\"),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),t=this._limitCenter(i,this._zoom,g(t));return i.equals(t)||this.panTo(t,e),this._enforcingBounds=!1,this},panInside:function(t,e){var i=m((e=e||{}).paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),t=this.project(t),s=this.getPixelBounds(),i=_([s.min.add(i),s.max.subtract(n)]),s=i.getSize();return i.contains(t)||(this._enforcingBounds=!0,n=t.subtract(i.getCenter()),i=i.extend(t).getSize().subtract(s),o.x+=n.x<0?-i.x:i.x,o.y+=n.y<0?-i.y:i.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1),this},invalidateSize:function(t){if(!this._loaded)return this;t=l({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize(),i=(this._sizeChanged=!0,this._lastCenter=null,this.getSize()),n=e.divideBy(2).round(),o=i.divideBy(2).round(),n=n.subtract(o);return n.x||n.y?(t.animate&&t.pan?this.panBy(n):(t.pan&&this._rawPanBy(n),this.fire(\"move\"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,\"moveend\"),200)):this.fire(\"moveend\")),this.fire(\"resize\",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire(\"viewreset\"),this._stop()},locate:function(t){var e,i;return t=this._locateOptions=l({timeout:1e4,watch:!1},t),\"geolocation\"in navigator?(e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this),t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t)):this._handleGeolocationError({code:0,message:\"Geolocation not supported.\"}),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e;this._container._leaflet_id&&(e=t.code,t=t.message||(1===e?\"permission denied\":2===e?\"position unavailable\":\"timeout\"),this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire(\"locationerror\",{code:e,message:\"Geolocation error: \"+t+\".\"}))},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e,i,n=new v(t.coords.latitude,t.coords.longitude),o=n.toBounds(2*t.coords.accuracy),s=this._locateOptions,r=(s.setView&&(e=this.getBoundsZoom(o),this.setView(n,s.maxZoom?Math.min(e,s.maxZoom):e)),{latlng:n,bounds:o,timestamp:t.timestamp});for(i in t.coords)\"number\"==typeof t.coords[i]&&(r[i]=t.coords[i]);this.fire(\"locationfound\",r)}},addHandler:function(t,e){return e&&(e=this[t]=new e(this),this._handlers.push(e),this.options[t]&&e.enable()),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off(\"moveend\",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error(\"Map container is being reused by another instance\");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}for(var t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),T(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(r(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire(\"unload\"),this._layers)this._layers[t].remove();for(t in this._panes)T(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){e=P(\"div\",\"leaflet-pane\"+(t?\" leaflet-\"+t.replace(\"Pane\",\"\")+\"-pane\":\"\"),e||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new s(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=g(t),i=m(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),t=t.getSouthEast(),i=this.getSize().subtract(i),t=_(this.project(t,n),this.project(r,n)).getSize(),r=b.any3d?this.options.zoomSnap:1,a=i.x/t.x,i=i.y/t.y,t=e?Math.max(a,i):Math.min(a,i),n=this.getScaleZoom(t,n);return r&&(n=Math.round(n/(r/100))*(r/100),n=e?Math.ceil(n/r)*r:Math.floor(n/r)*r),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){t=this._getTopLeftPoint(t,e);return new f(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return\"string\"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=void 0===e?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs,t=(e=void 0===e?this._zoom:e,i.zoom(t*i.scale(e)));return isNaN(t)?1/0:t},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(w(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(m(t),e)},layerPointToLatLng:function(t){t=m(t).add(this.getPixelOrigin());return this.unproject(t)},latLngToLayerPoint:function(t){return this.project(w(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(w(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(g(t))},distance:function(t,e){return this.options.crs.distance(w(t),w(e))},containerPointToLayerPoint:function(t){return m(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return m(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){t=this.containerPointToLayerPoint(m(t));return this.layerPointToLatLng(t)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)))},mouseEventToContainerPoint:function(t){return De(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){t=this._container=_e(t);if(!t)throw new Error(\"Map container not found.\");if(t._leaflet_id)throw new Error(\"Map container is already initialized.\");S(t,\"scroll\",this._onScroll,this),this._containerId=h(t)},_initLayout:function(){var t=this._container,e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d,M(t,\"leaflet-container\"+(b.touch?\" leaflet-touch\":\"\")+(b.retina?\" leaflet-retina\":\"\")+(b.ielt9?\" leaflet-oldie\":\"\")+(b.safari?\" leaflet-safari\":\"\")+(this._fadeAnimated?\" leaflet-fade-anim\":\"\")),pe(t,\"position\"));\"absolute\"!==e&&\"relative\"!==e&&\"fixed\"!==e&&\"sticky\"!==e&&(t.style.position=\"relative\"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane(\"mapPane\",this._container),Z(this._mapPane,new p(0,0)),this.createPane(\"tilePane\"),this.createPane(\"overlayPane\"),this.createPane(\"shadowPane\"),this.createPane(\"markerPane\"),this.createPane(\"tooltipPane\"),this.createPane(\"popupPane\"),this.options.markerZoomAnimation||(M(t.markerPane,\"leaflet-zoom-hide\"),M(t.shadowPane,\"leaflet-zoom-hide\"))},_resetView:function(t,e,i){Z(this._mapPane,new p(0,0));var n=!this._loaded,o=(this._loaded=!0,e=this._limitZoom(e),this.fire(\"viewprereset\"),this._zoom!==e);this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire(\"viewreset\"),n&&this.fire(\"load\")},_moveStart:function(t,e){return t&&this.fire(\"zoomstart\"),e||this.fire(\"movestart\"),this},_move:function(t,e,i,n){void 0===e&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire(\"zoom\",i):((o||i&&i.pinch)&&this.fire(\"zoom\",i),this.fire(\"move\",i)),this},_moveEnd:function(t){return t&&this.fire(\"zoomend\"),this.fire(\"moveend\")},_stop:function(){return r(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Z(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error(\"Set map center and zoom first.\")},_initEvents:function(t){this._targets={};var e=t?k:S;e((this._targets[h(this._container)]=this)._container,\"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup\",this._handleDOMEvent,this),this.options.trackResize&&e(window,\"resize\",this._onResize,this),b.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,\"moveend\",this._onMoveEnd)},_onResize:function(){r(this._resizeRequest),this._resizeRequest=x(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],o=\"mouseout\"===e||\"mouseover\"===e,s=t.target||t.srcElement,r=!1;s;){if((i=this._targets[h(s)])&&(\"click\"===e||\"preclick\"===e)&&this._draggableMoved(i)){r=!0;break}if(i&&i.listens(e,!0)){if(o&&!We(s,t))break;if(n.push(i),o)break}if(s===this._container)break;s=s.parentNode}return n=n.length||r||o||!this.listens(e,!0)?n:[this]},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e,i=t.target||t.srcElement;!this._loaded||i._leaflet_disable_events||\"click\"===t.type&&this._isClickDisabled(i)||(\"mousedown\"===(e=t.type)&&Me(i),this._fireDOMEvent(t,e))},_mouseEvents:[\"click\",\"dblclick\",\"mouseover\",\"mouseout\",\"contextmenu\"],_fireDOMEvent:function(t,e,i){\"click\"===t.type&&((a=l({},t)).type=\"preclick\",this._fireDOMEvent(a,a.type,i));var n=this._findEventTargets(t,e);if(i){for(var o=[],s=0;s<i.length;s++)i[s].listens(e,!0)&&o.push(i[s]);n=o.concat(n)}if(n.length){\"contextmenu\"===e&&O(t);var r,a=n[0],h={originalEvent:t};for(\"keypress\"!==t.type&&\"keydown\"!==t.type&&\"keyup\"!==t.type&&(r=a.getLatLng&&(!a._radius||a._radius<=10),h.containerPoint=r?this.latLngToContainerPoint(a.getLatLng()):this.mouseEventToContainerPoint(t),h.layerPoint=this.containerPointToLayerPoint(h.containerPoint),h.latlng=r?a.getLatLng():this.layerPointToLatLng(h.layerPoint)),s=0;s<n.length;s++)if(n[s].fire(e,h,!0),h.originalEvent._stopped||!1===n[s].options.bubblingMouseEvents&&-1!==G(this._mouseEvents,e))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,e=this._handlers.length;t<e;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,{target:this}):this.on(\"load\",t,e),this},_getMapPanePos:function(){return Pe(this._mapPane)||new p(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,e){return(t&&void 0!==e?this._getNewPixelOrigin(t,e):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,e,i){i=this._getNewPixelOrigin(i,e);return this.project(t,e)._subtract(i)},_latLngBoundsToNewLayerBounds:function(t,e,i){i=this._getNewPixelOrigin(i,e);return _([this.project(t.getSouthWest(),e)._subtract(i),this.project(t.getNorthWest(),e)._subtract(i),this.project(t.getSouthEast(),e)._subtract(i),this.project(t.getNorthEast(),e)._subtract(i)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){var n,o;return!i||(n=this.project(t,e),o=this.getSize().divideBy(2),o=new f(n.subtract(o),n.add(o)),o=this._getBoundsOffset(o,i,e),Math.abs(o.x)<=1&&Math.abs(o.y)<=1)?t:this.unproject(n.add(o),e)},_limitOffset:function(t,e){var i;return e?(i=new f((i=this.getPixelBounds()).min.add(t),i.max.add(t)),t.add(this._getBoundsOffset(i,e))):t},_getBoundsOffset:function(t,e,i){e=_(this.project(e.getNorthEast(),i),this.project(e.getSouthWest(),i)),i=e.min.subtract(t.min),e=e.max.subtract(t.max);return new p(this._rebound(i.x,-e.x),this._rebound(i.y,-e.y))},_rebound:function(t,e){return 0<t+e?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom(),n=b.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(e,Math.min(i,t))},_onPanTransitionStep:function(){this.fire(\"move\")},_onPanTransitionEnd:function(){z(this._mapPane,\"leaflet-pan-anim\"),this.fire(\"moveend\")},_tryAnimatedPan:function(t,e){t=this._getCenterOffset(t)._trunc();return!(!0!==(e&&e.animate)&&!this.getSize().contains(t))&&(this.panBy(t,e),!0)},_createAnimProxy:function(){var t=this._proxy=P(\"div\",\"leaflet-proxy leaflet-zoom-animated\");this._panes.mapPane.appendChild(t),this.on(\"zoomanim\",function(t){var e=ue,i=this._proxy.style[e];be(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),i===this._proxy.style[e]&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on(\"load moveend\",this._animMoveEnd,this),this._on(\"unload\",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){T(this._proxy),this.off(\"load moveend\",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();be(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&0<=t.propertyName.indexOf(\"transform\")&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName(\"leaflet-zoom-animated\").length},_tryAnimatedZoom:function(t,e,i){if(!this._animatingZoom){if(i=i||{},!this._zoomAnimated||!1===i.animate||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),n=this._getCenterOffset(t)._divideBy(1-1/n);if(!0!==i.animate&&!this.getSize().contains(n))return!1;x(function(){this._moveStart(!0,i.noMoveStart||!1)._animateZoom(t,e,!0)},this)}return!0},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,M(this._mapPane,\"leaflet-zoom-anim\")),this.fire(\"zoomanim\",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&z(this._mapPane,\"leaflet-zoom-anim\"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire(\"zoom\"),delete this._tempFireZoomEvent,this.fire(\"move\"),this._moveEnd(!0))}});function Ue(t){return new B(t)}var B=et.extend({options:{position:\"topright\"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),t=t._controlCorners[i];return M(e,\"leaflet-control\"),-1!==i.indexOf(\"bottom\")?t.insertBefore(e,t.firstChild):t.appendChild(e),this._map.on(\"unload\",this.remove,this),this},remove:function(){return this._map&&(T(this._container),this.onRemove&&this.onRemove(this._map),this._map.off(\"unload\",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0<t.screenX&&0<t.screenY&&this._map.getContainer().focus()}}),Ve=(A.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var i=this._controlCorners={},n=\"leaflet-\",o=this._controlContainer=P(\"div\",n+\"control-container\",this._container);function t(t,e){i[t+e]=P(\"div\",n+t+\" \"+n+e,o)}t(\"top\",\"left\"),t(\"top\",\"right\"),t(\"bottom\",\"left\"),t(\"bottom\",\"right\")},_clearControlPos:function(){for(var t in this._controlCorners)T(this._controlCorners[t]);T(this._controlContainer),delete this._controlCorners,delete this._controlContainer}}),B.extend({options:{collapsed:!0,position:\"topright\",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,i,n){return i<n?-1:n<i?1:0}},initialize:function(t,e,i){for(var n in c(this,i),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1,this._preventClick=!1,t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),(this._map=t).on(\"zoomend\",this._checkDisabledLayers,this);for(var e=0;e<this._layers.length;e++)this._layers[e].layer.on(\"add remove\",this._onLayerChange,this);return this._container},addTo:function(t){return B.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off(\"zoomend\",this._checkDisabledLayers,this);for(var t=0;t<this._layers.length;t++)this._layers[t].layer.off(\"add remove\",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._map?this._update():this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._map?this._update():this},removeLayer:function(t){t.off(\"add remove\",this._onLayerChange,this);t=this._getLayer(h(t));return t&&this._layers.splice(this._layers.indexOf(t),1),this._map?this._update():this},expand:function(){M(this._container,\"leaflet-control-layers-expanded\"),this._section.style.height=null;var t=this._map.getSize().y-(this._container.offsetTop+50);return t<this._section.clientHeight?(M(this._section,\"leaflet-control-layers-scrollbar\"),this._section.style.height=t+\"px\"):z(this._section,\"leaflet-control-layers-scrollbar\"),this._checkDisabledLayers(),this},collapse:function(){return z(this._container,\"leaflet-control-layers-expanded\"),this},_initLayout:function(){var t=\"leaflet-control-layers\",e=this._container=P(\"div\",t),i=this.options.collapsed,n=(e.setAttribute(\"aria-haspopup\",!0),Ie(e),Be(e),this._section=P(\"section\",t+\"-list\")),o=(i&&(this._map.on(\"click\",this.collapse,this),S(e,{mouseenter:this._expandSafely,mouseleave:this.collapse},this)),this._layersLink=P(\"a\",t+\"-toggle\",e));o.href=\"#\",o.title=\"Layers\",o.setAttribute(\"role\",\"button\"),S(o,{keydown:function(t){13===t.keyCode&&this._expandSafely()},click:function(t){O(t),this._expandSafely()}},this),i||this.expand(),this._baseLayersList=P(\"div\",t+\"-base\",n),this._separator=P(\"div\",t+\"-separator\",n),this._overlaysList=P(\"div\",t+\"-overlays\",n),e.appendChild(n)},_getLayer:function(t){for(var e=0;e<this._layers.length;e++)if(this._layers[e]&&h(this._layers[e].layer)===t)return this._layers[e]},_addLayer:function(t,e,i){this._map&&t.on(\"add remove\",this._onLayerChange,this),this._layers.push({layer:t,name:e,overlay:i}),this.options.sortLayers&&this._layers.sort(a(function(t,e){return this.options.sortFunction(t.layer,e.layer,t.name,e.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(this._container){me(this._baseLayersList),me(this._overlaysList),this._layerControlInputs=[];for(var t,e,i,n=0,o=0;o<this._layers.length;o++)i=this._layers[o],this._addItem(i),e=e||i.overlay,t=t||!i.overlay,n+=i.overlay?0:1;this.options.hideSingleBase&&(this._baseLayersList.style.display=(t=t&&1<n)?\"\":\"none\"),this._separator.style.display=e&&t?\"\":\"none\"}return this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(h(t.target)),t=e.overlay?\"add\"===t.type?\"overlayadd\":\"overlayremove\":\"add\"===t.type?\"baselayerchange\":null;t&&this._map.fire(t,e)},_createRadioElement:function(t,e){t='<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"'+t+'\"'+(e?' checked=\"checked\"':\"\")+\"/>\",e=document.createElement(\"div\");return e.innerHTML=t,e.firstChild},_addItem:function(t){var e,i=document.createElement(\"label\"),n=this._map.hasLayer(t.layer),n=(t.overlay?((e=document.createElement(\"input\")).type=\"checkbox\",e.className=\"leaflet-control-layers-selector\",e.defaultChecked=n):e=this._createRadioElement(\"leaflet-base-layers_\"+h(this),n),this._layerControlInputs.push(e),e.layerId=h(t.layer),S(e,\"click\",this._onInputClick,this),document.createElement(\"span\")),o=(n.innerHTML=\" \"+t.name,document.createElement(\"span\"));return i.appendChild(o),o.appendChild(e),o.appendChild(n),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(i),this._checkDisabledLayers(),i},_onInputClick:function(){if(!this._preventClick){var t,e,i=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=i.length-1;0<=s;s--)t=i[s],e=this._getLayer(t.layerId).layer,t.checked?n.push(e):t.checked||o.push(e);for(s=0;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()}},_checkDisabledLayers:function(){for(var t,e,i=this._layerControlInputs,n=this._map.getZoom(),o=i.length-1;0<=o;o--)t=i[o],e=this._getLayer(t.layerId).layer,t.disabled=void 0!==e.options.minZoom&&n<e.options.minZoom||void 0!==e.options.maxZoom&&n>e.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section,e=(this._preventClick=!0,S(t,\"click\",O),this.expand(),this);setTimeout(function(){k(t,\"click\",O),e._preventClick=!1})}})),qe=B.extend({options:{position:\"topleft\",zoomInText:'<span aria-hidden=\"true\">+</span>',zoomInTitle:\"Zoom in\",zoomOutText:'<span aria-hidden=\"true\">&#x2212;</span>',zoomOutTitle:\"Zoom out\"},onAdd:function(t){var e=\"leaflet-control-zoom\",i=P(\"div\",e+\" leaflet-bar\"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+\"-in\",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+\"-out\",i,this._zoomOut),this._updateDisabled(),t.on(\"zoomend zoomlevelschange\",this._updateDisabled,this),i},onRemove:function(t){t.off(\"zoomend zoomlevelschange\",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){i=P(\"a\",i,n);return i.innerHTML=t,i.href=\"#\",i.title=e,i.setAttribute(\"role\",\"button\"),i.setAttribute(\"aria-label\",e),Ie(i),S(i,\"click\",Re),S(i,\"click\",o,this),S(i,\"click\",this._refocusOnMap,this),i},_updateDisabled:function(){var t=this._map,e=\"leaflet-disabled\";z(this._zoomInButton,e),z(this._zoomOutButton,e),this._zoomInButton.setAttribute(\"aria-disabled\",\"false\"),this._zoomOutButton.setAttribute(\"aria-disabled\",\"false\"),!this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton,e),this._zoomOutButton.setAttribute(\"aria-disabled\",\"true\")),!this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton,e),this._zoomInButton.setAttribute(\"aria-disabled\",\"true\"))}}),Ge=(A.mergeOptions({zoomControl:!0}),A.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new qe,this.addControl(this.zoomControl))}),B.extend({options:{position:\"bottomleft\",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e=\"leaflet-control-scale\",i=P(\"div\",e),n=this.options;return this._addScales(n,e+\"-line\",i),t.on(n.updateWhenIdle?\"moveend\":\"move\",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?\"moveend\":\"move\",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=P(\"div\",e,i)),t.imperial&&(this._iScale=P(\"div\",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,t=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(t)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t);this._updateScale(this._mScale,e<1e3?e+\" m\":e/1e3+\" km\",e/t)},_updateImperial:function(t){var e,i,t=3.2808399*t;5280<t?(i=this._getRoundNum(e=t/5280),this._updateScale(this._iScale,i+\" mi\",i/e)):(i=this._getRoundNum(t),this._updateScale(this._iScale,i+\" ft\",i/t))},_updateScale:function(t,e,i){t.style.width=Math.round(this.options.maxWidth*i)+\"px\",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+\"\").length-1),t=t/e;return e*(t=10<=t?10:5<=t?5:3<=t?3:2<=t?2:1)}})),Ke=B.extend({options:{position:\"bottomright\",prefix:'<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">'+(b.inlineSvg?'<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg> ':\"\")+\"Leaflet</a>\"},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var e in(t.attributionControl=this)._container=P(\"div\",\"leaflet-control-attribution\"),Ie(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on(\"layeradd\",this._addAttribution,this),this._container},onRemove:function(t){t.off(\"layeradd\",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once(\"remove\",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t,e=[];for(t in this._attributions)this._attributions[t]&&e.push(t);var i=[];this.options.prefix&&i.push(this.options.prefix),e.length&&i.push(e.join(\", \")),this._container.innerHTML=i.join(' <span aria-hidden=\"true\">|</span> ')}}}),n=(A.mergeOptions({attributionControl:!0}),A.addInitHook(function(){this.options.attributionControl&&(new Ke).addTo(this)}),B.Layers=Ve,B.Zoom=qe,B.Scale=Ge,B.Attribution=Ke,Ue.layers=function(t,e,i){return new Ve(t,e,i)},Ue.zoom=function(t){return new qe(t)},Ue.scale=function(t){return new Ge(t)},Ue.attribution=function(t){return new Ke(t)},et.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}})),ft=(n.addTo=function(t,e){return t.addHandler(e,this),this},{Events:e}),Ye=b.touch?\"touchstart mousedown\":\"mousedown\",Xe=it.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){c(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(S(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Xe._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Ye,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var e,i;this._enabled&&(this._moved=!1,ve(this._element,\"leaflet-zoom-anim\")||(t.touches&&1!==t.touches.length?Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element),Le(),re(),this._moving||(this.fire(\"down\"),i=t.touches?t.touches[0]:t,e=Ce(this._element),this._startPoint=new p(i.clientX,i.clientY),this._startPos=Pe(this._element),this._parentScale=Ze(e),i=\"mousedown\"===t.type,S(document,i?\"mousemove\":\"touchmove\",this._onMove,this),S(document,i?\"mouseup\":\"touchend touchcancel\",this._onUp,this)))))},_onMove:function(t){var e;this._enabled&&(t.touches&&1<t.touches.length?this._moved=!0:!(e=new p((e=t.touches&&1===t.touches.length?t.touches[0]:t).clientX,e.clientY)._subtract(this._startPoint)).x&&!e.y||Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||(e.x/=this._parentScale.x,e.y/=this._parentScale.y,O(t),this._moved||(this.fire(\"dragstart\"),this._moved=!0,M(document.body,\"leaflet-dragging\"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),M(this._lastTarget,\"leaflet-drag-target\")),this._newPos=this._startPos.add(e),this._moving=!0,this._lastEvent=t,this._updatePosition()))},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire(\"predrag\",t),Z(this._element,this._newPos),this.fire(\"drag\",t)},_onUp:function(){this._enabled&&this.finishDrag()},finishDrag:function(t){z(document.body,\"leaflet-dragging\"),this._lastTarget&&(z(this._lastTarget,\"leaflet-drag-target\"),this._lastTarget=null),k(document,\"mousemove touchmove\",this._onMove,this),k(document,\"mouseup touchend touchcancel\",this._onUp,this),Te(),ae();var e=this._moved&&this._moving;this._moving=!1,Xe._dragging=!1,e&&this.fire(\"dragend\",{noInertia:t,distance:this._newPos.distanceTo(this._startPos)})}});function Je(t,e,i){for(var n,o,s,r,a,h,l,u=[1,4,2,8],c=0,d=t.length;c<d;c++)t[c]._code=si(t[c],e);for(s=0;s<4;s++){for(h=u[s],n=[],c=0,o=(d=t.length)-1;c<d;o=c++)r=t[c],a=t[o],r._code&h?a._code&h||((l=oi(a,r,h,e,i))._code=si(l,e),n.push(l)):(a._code&h&&((l=oi(a,r,h,e,i))._code=si(l,e),n.push(l)),n.push(r));t=n}return t}function $e(t,e){var i,n,o,s,r,a,h;if(!t||0===t.length)throw new Error(\"latlngs not passed\");I(t)||(console.warn(\"latlngs are not flat! Only the first ring will be used\"),t=t[0]);for(var l=w([0,0]),u=g(t),c=(u.getNorthWest().distanceTo(u.getSouthWest())*u.getNorthEast().distanceTo(u.getNorthWest())<1700&&(l=Qe(t)),t.length),d=[],_=0;_<c;_++){var p=w(t[_]);d.push(e.project(w([p.lat-l.lat,p.lng-l.lng])))}for(_=r=a=h=0,i=c-1;_<c;i=_++)n=d[_],o=d[i],s=n.y*o.x-o.y*n.x,a+=(n.x+o.x)*s,h+=(n.y+o.y)*s,r+=3*s;u=0===r?d[0]:[a/r,h/r],u=e.unproject(m(u));return w([u.lat+l.lat,u.lng+l.lng])}function Qe(t){for(var e=0,i=0,n=0,o=0;o<t.length;o++){var s=w(t[o]);e+=s.lat,i+=s.lng,n++}return w([e/n,i/n])}var ti,gt={__proto__:null,clipPolygon:Je,polygonCenter:$e,centroid:Qe};function ei(t,e){if(e&&t.length){var i=t=function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;n<s;n++)(function(t,e){var i=e.x-t.x,e=e.y-t.y;return i*i+e*e})(t[n],t[o])>e&&(i.push(t[n]),o=n);o<s-1&&i.push(t[s-1]);return i}(t,e=e*e),n=i.length,o=new(typeof Uint8Array!=void 0+\"\"?Uint8Array:Array)(n);o[0]=o[n-1]=1,function t(e,i,n,o,s){var r,a,h,l=0;for(a=o+1;a<=s-1;a++)h=ri(e[a],e[o],e[s],!0),l<h&&(r=a,l=h);n<l&&(i[r]=1,t(e,i,n,o,r),t(e,i,n,r,s))}(i,o,e,0,n-1);var s,r=[];for(s=0;s<n;s++)o[s]&&r.push(i[s]);return r}return t.slice()}function ii(t,e,i){return Math.sqrt(ri(t,e,i,!0))}function ni(t,e,i,n,o){var s,r,a,h=n?ti:si(t,i),l=si(e,i);for(ti=l;;){if(!(h|l))return[t,e];if(h&l)return!1;a=si(r=oi(t,e,s=h||l,i,o),i),s===h?(t=r,h=a):(e=r,l=a)}}function oi(t,e,i,n,o){var s,r,a=e.x-t.x,e=e.y-t.y,h=n.min,n=n.max;return 8&i?(s=t.x+a*(n.y-t.y)/e,r=n.y):4&i?(s=t.x+a*(h.y-t.y)/e,r=h.y):2&i?(s=n.x,r=t.y+e*(n.x-t.x)/a):1&i&&(s=h.x,r=t.y+e*(h.x-t.x)/a),new p(s,r,o)}function si(t,e){var i=0;return t.x<e.min.x?i|=1:t.x>e.max.x&&(i|=2),t.y<e.min.y?i|=4:t.y>e.max.y&&(i|=8),i}function ri(t,e,i,n){var o=e.x,e=e.y,s=i.x-o,r=i.y-e,a=s*s+r*r;return 0<a&&(1<(a=((t.x-o)*s+(t.y-e)*r)/a)?(o=i.x,e=i.y):0<a&&(o+=s*a,e+=r*a)),s=t.x-o,r=t.y-e,n?s*s+r*r:new p(o,e)}function I(t){return!d(t[0])||\"object\"!=typeof t[0][0]&&void 0!==t[0][0]}function ai(t){return console.warn(\"Deprecated use of _flat, please use L.LineUtil.isFlat instead.\"),I(t)}function hi(t,e){var i,n,o,s,r,a;if(!t||0===t.length)throw new Error(\"latlngs not passed\");I(t)||(console.warn(\"latlngs are not flat! Only the first ring will be used\"),t=t[0]);for(var h=w([0,0]),l=g(t),u=(l.getNorthWest().distanceTo(l.getSouthWest())*l.getNorthEast().distanceTo(l.getNorthWest())<1700&&(h=Qe(t)),t.length),c=[],d=0;d<u;d++){var _=w(t[d]);c.push(e.project(w([_.lat-h.lat,_.lng-h.lng])))}for(i=d=0;d<u-1;d++)i+=c[d].distanceTo(c[d+1])/2;if(0===i)a=c[0];else for(n=d=0;d<u-1;d++)if(o=c[d],s=c[d+1],i<(n+=r=o.distanceTo(s))){a=[s.x-(r=(n-i)/r)*(s.x-o.x),s.y-r*(s.y-o.y)];break}l=e.unproject(m(a));return w([l.lat+h.lat,l.lng+h.lng])}var vt={__proto__:null,simplify:ei,pointToSegmentDistance:ii,closestPointOnSegment:function(t,e,i){return ri(t,e,i)},clipSegment:ni,_getEdgeIntersection:oi,_getBitCode:si,_sqClosestPointOnSegment:ri,isFlat:I,_flat:ai,polylineCenter:hi},yt={project:function(t){return new p(t.lng,t.lat)},unproject:function(t){return new v(t.y,t.x)},bounds:new f([-180,-90],[180,90])},xt={R:6378137,R_MINOR:6356752.314245179,bounds:new f([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var e=Math.PI/180,i=this.R,n=t.lat*e,o=this.R_MINOR/i,o=Math.sqrt(1-o*o),s=o*Math.sin(n),s=Math.tan(Math.PI/4-n/2)/Math.pow((1-s)/(1+s),o/2),n=-i*Math.log(Math.max(s,1e-10));return new p(t.lng*e*i,n)},unproject:function(t){for(var e,i=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,l=.1;h<15&&1e-7<Math.abs(l);h++)e=s*Math.sin(a),e=Math.pow((1-e)/(1+e),s/2),a+=l=Math.PI/2-2*Math.atan(r*e)-a;return new v(a*i,t.x*i/n)}},wt={__proto__:null,LonLat:yt,Mercator:xt,SphericalMercator:rt},Pt=l({},st,{code:\"EPSG:3395\",projection:xt,transformation:ht(bt=.5/(Math.PI*xt.R),.5,-bt,.5)}),li=l({},st,{code:\"EPSG:4326\",projection:yt,transformation:ht(1/180,1,-1/180,.5)}),Lt=l({},ot,{projection:yt,transformation:ht(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var i=e.lng-t.lng,e=e.lat-t.lat;return Math.sqrt(i*i+e*e)},infinite:!0}),o=(ot.Earth=st,ot.EPSG3395=Pt,ot.EPSG3857=lt,ot.EPSG900913=ut,ot.EPSG4326=li,ot.Simple=Lt,it.extend({options:{pane:\"overlayPane\",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[h(t)]=this},removeInteractiveTarget:function(t){return delete this._map._targets[h(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e,i=t.target;i.hasLayer(this)&&(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents&&(e=this.getEvents(),i.on(e,this),this.once(\"remove\",function(){i.off(e,this)},this)),this.onAdd(i),this.fire(\"add\"),i.fire(\"layeradd\",{layer:this}))}})),ui=(A.include({addLayer:function(t){var e;if(t._layerAdd)return e=h(t),this._layers[e]||((this._layers[e]=t)._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this;throw new Error(\"The provided object is not a Layer.\")},removeLayer:function(t){var e=h(t);return this._layers[e]&&(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&(this.fire(\"layerremove\",{layer:t}),t.fire(\"remove\")),t._map=t._mapToAdd=null),this},hasLayer:function(t){return h(t)in this._layers},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},_addLayers:function(t){for(var e=0,i=(t=t?d(t)?t:[t]:[]).length;e<i;e++)this.addLayer(t[e])},_addZoomLimit:function(t){isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[h(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){t=h(t);this._zoomBoundLayers[t]&&(delete this._zoomBoundLayers[t],this._updateZoomLevels())},_updateZoomLevels:function(){var t,e=1/0,i=-1/0,n=this._getZoomSpan();for(t in this._zoomBoundLayers)var o=this._zoomBoundLayers[t].options,e=void 0===o.minZoom?e:Math.min(e,o.minZoom),i=void 0===o.maxZoom?i:Math.max(i,o.maxZoom);this._layersMaxZoom=i===-1/0?void 0:i,this._layersMinZoom=e===1/0?void 0:e,n!==this._getZoomSpan()&&this.fire(\"zoomlevelschange\"),void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}}),o.extend({initialize:function(t,e){var i,n;if(c(this,e),this._layers={},t)for(i=0,n=t.length;i<n;i++)this.addLayer(t[i])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){t=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[t]&&this._map.removeLayer(this._layers[t]),delete this._layers[t],this},hasLayer:function(t){return(\"number\"==typeof t?t:this.getLayerId(t))in this._layers},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)(i=this._layers[e])[t]&&i[t].apply(i,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke(\"setZIndex\",t)},getLayerId:h})),ci=ui.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),ui.prototype.addLayer.call(this,t),this.fire(\"layeradd\",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?((t=t in this._layers?this._layers[t]:t).removeEventParent(this),ui.prototype.removeLayer.call(this,t),this.fire(\"layerremove\",{layer:t})):this},setStyle:function(t){return this.invoke(\"setStyle\",t)},bringToFront:function(){return this.invoke(\"bringToFront\")},bringToBack:function(){return this.invoke(\"bringToBack\")},getBounds:function(){var t,e=new s;for(t in this._layers){var i=this._layers[t];e.extend(i.getBounds?i.getBounds():i.getLatLng())}return e}}),di=et.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0],crossOrigin:!1},initialize:function(t){c(this,t)},createIcon:function(t){return this._createIcon(\"icon\",t)},createShadow:function(t){return this._createIcon(\"shadow\",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(i)return i=this._createImg(i,e&&\"IMG\"===e.tagName?e:null),this._setIconStyles(i,t),!this.options.crossOrigin&&\"\"!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?\"\":this.options.crossOrigin),i;if(\"icon\"===t)throw new Error(\"iconUrl not set in Icon options (see the docs).\");return null},_setIconStyles:function(t,e){var i=this.options,n=i[e+\"Size\"],n=m(n=\"number\"==typeof n?[n,n]:n),o=m(\"shadow\"===e&&i.shadowAnchor||i.iconAnchor||n&&n.divideBy(2,!0));t.className=\"leaflet-marker-\"+e+\" \"+(i.className||\"\"),o&&(t.style.marginLeft=-o.x+\"px\",t.style.marginTop=-o.y+\"px\"),n&&(t.style.width=n.x+\"px\",t.style.height=n.y+\"px\")},_createImg:function(t,e){return(e=e||document.createElement(\"img\")).src=t,e},_getIconUrl:function(t){return b.retina&&this.options[t+\"RetinaUrl\"]||this.options[t+\"Url\"]}});var _i=di.extend({options:{iconUrl:\"marker-icon.png\",iconRetinaUrl:\"marker-icon-2x.png\",shadowUrl:\"marker-shadow.png\",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return\"string\"!=typeof _i.imagePath&&(_i.imagePath=this._detectIconPath()),(this.options.imagePath||_i.imagePath)+di.prototype._getIconUrl.call(this,t)},_stripUrl:function(t){function e(t,e,i){return(e=e.exec(t))&&e[i]}return(t=e(t,/^url\\((['\"])?(.+)\\1\\)$/,2))&&e(t,/^(.*)marker-icon\\.png$/,1)},_detectIconPath:function(){var t=P(\"div\",\"leaflet-default-icon-path\",document.body),e=pe(t,\"background-image\")||pe(t,\"backgroundImage\");return document.body.removeChild(t),(e=this._stripUrl(e))?e:(t=document.querySelector('link[href$=\"leaflet.css\"]'))?t.href.substring(0,t.href.length-\"leaflet.css\".length-1):\"\"}}),pi=n.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new Xe(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),M(t,\"leaflet-marker-draggable\")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&z(this._marker._icon,\"leaflet-marker-draggable\")},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var e=this._marker,i=e._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=Pe(e._icon),r=i.getPixelBounds(),a=i.getPixelOrigin(),a=_(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));a.contains(s)||(o=m((Math.max(a.max.x,s.x)-a.max.x)/(r.max.x-a.max.x)-(Math.min(a.min.x,s.x)-a.min.x)/(r.min.x-a.min.x),(Math.max(a.max.y,s.y)-a.max.y)/(r.max.y-a.max.y)-(Math.min(a.min.y,s.y)-a.min.y)/(r.min.y-a.min.y)).multiplyBy(n),i.panBy(o,{animate:!1}),this._draggable._newPos._add(o),this._draggable._startPos._add(o),Z(e._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=x(this._adjustPan.bind(this,t)))},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup&&this._marker.closePopup(),this._marker.fire(\"movestart\").fire(\"dragstart\")},_onPreDrag:function(t){this._marker.options.autoPan&&(r(this._panRequest),this._panRequest=x(this._adjustPan.bind(this,t)))},_onDrag:function(t){var e=this._marker,i=e._shadow,n=Pe(e._icon),o=e._map.layerPointToLatLng(n);i&&Z(i,n),e._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,e.fire(\"move\",t).fire(\"drag\",t)},_onDragEnd:function(t){r(this._panRequest),delete this._oldLatLng,this._marker.fire(\"moveend\").fire(\"dragend\",t)}}),mi=o.extend({options:{icon:new _i,interactive:!0,keyboard:!0,title:\"\",alt:\"Marker\",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:\"markerPane\",shadowPane:\"shadowPane\",bubblingMouseEvents:!1,autoPanOnFocus:!0,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(t,e){c(this,e),this._latlng=w(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on(\"zoomanim\",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off(\"zoomanim\",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var e=this._latlng;return this._latlng=w(t),this.update(),this.fire(\"move\",{oldLatLng:e,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},getIcon:function(){return this.options.icon},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){var t;return this._icon&&this._map&&(t=this._map.latLngToLayerPoint(this._latlng).round(),this._setPos(t)),this},_initIcon:function(){var t=this.options,e=\"leaflet-zoom-\"+(this._zoomAnimated?\"animated\":\"hide\"),i=t.icon.createIcon(this._icon),n=!1,i=(i!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(i.title=t.title),\"IMG\"===i.tagName&&(i.alt=t.alt||\"\")),M(i,e),t.keyboard&&(i.tabIndex=\"0\",i.setAttribute(\"role\",\"button\")),this._icon=i,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&S(i,\"focus\",this._panOnFocus,this),t.icon.createShadow(this._shadow)),o=!1;i!==this._shadow&&(this._removeShadow(),o=!0),i&&(M(i,e),i.alt=\"\"),this._shadow=i,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),i&&o&&this.getPane(t.shadowPane).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&k(this._icon,\"focus\",this._panOnFocus,this),T(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&T(this._shadow),this._shadow=null},_setPos:function(t){this._icon&&Z(this._icon,t),this._shadow&&Z(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon&&(this._icon.style.zIndex=this._zIndex+t)},_animateZoom:function(t){t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(t)},_initInteraction:function(){var t;this.options.interactive&&(M(this._icon,\"leaflet-interactive\"),this.addInteractiveTarget(this._icon),pi&&(t=this.options.draggable,this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new pi(this),t&&this.dragging.enable()))},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;this._icon&&C(this._icon,t),this._shadow&&C(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_panOnFocus:function(){var t,e,i=this._map;i&&(t=(e=this.options.icon.options).iconSize?m(e.iconSize):m(0,0),e=e.iconAnchor?m(e.iconAnchor):m(0,0),i.panInside(this._latlng,{paddingTopLeft:e,paddingBottomRight:t.subtract(e)}))},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}});var fi=o.extend({options:{stroke:!0,color:\"#3388ff\",weight:3,opacity:1,lineCap:\"round\",lineJoin:\"round\",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:\"evenodd\",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return c(this,t),this._renderer&&(this._renderer._updateStyle(this),this.options.stroke&&t&&Object.prototype.hasOwnProperty.call(t,\"weight\")&&this._updateBounds()),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+(this._renderer.options.tolerance||0)}}),gi=fi.extend({options:{fill:!0,radius:10},initialize:function(t,e){c(this,e),this._latlng=w(t),this._radius=this.options.radius},setLatLng:function(t){var e=this._latlng;return this._latlng=w(t),this.redraw(),this.fire(\"move\",{oldLatLng:e,latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var e=t&&t.radius||this._radius;return fi.prototype.setStyle.call(this,t),this.setRadius(e),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,e=this._radiusY||t,i=this._clickTolerance(),t=[t+i,e+i];this._pxBounds=new f(this._point.subtract(t),this._point.add(t))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()}});var vi=gi.extend({initialize:function(t,e,i){if(c(this,e=\"number\"==typeof e?l({},i,{radius:e}):e),this._latlng=w(t),isNaN(this.options.radius))throw new Error(\"Circle radius cannot be NaN\");this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new s(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:fi.prototype.setStyle,_project:function(){var t,e,i,n,o,s=this._latlng.lng,r=this._latlng.lat,a=this._map,h=a.options.crs;h.distance===st.distance?(n=Math.PI/180,o=this._mRadius/st.R/n,t=a.project([r+o,s]),e=a.project([r-o,s]),e=t.add(e).divideBy(2),i=a.unproject(e).lat,n=Math.acos((Math.cos(o*n)-Math.sin(r*n)*Math.sin(i*n))/(Math.cos(r*n)*Math.cos(i*n)))/n,!isNaN(n)&&0!==n||(n=o/Math.cos(Math.PI/180*r)),this._point=e.subtract(a.getPixelOrigin()),this._radius=isNaN(n)?0:e.x-a.project([i,s-n]).x,this._radiusY=e.y-t.y):(o=h.unproject(h.project(this._latlng).subtract([this._mRadius,0])),this._point=a.latLngToLayerPoint(this._latlng),this._radius=this._point.x-a.latLngToLayerPoint(o).x),this._updateBounds()}});var yi=fi.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,e){c(this,e),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var e=1/0,i=null,n=ri,o=0,s=this._parts.length;o<s;o++)for(var r=this._parts[o],a=1,h=r.length;a<h;a++){var l,u,c=n(t,l=r[a-1],u=r[a],!0);c<e&&(e=c,i=n(t,l,u))}return i&&(i.distance=Math.sqrt(e)),i},getCenter:function(){if(this._map)return hi(this._defaultShape(),this._map.options.crs);throw new Error(\"Must add layer to map before using getCenter()\")},getBounds:function(){return this._bounds},addLatLng:function(t,e){return e=e||this._defaultShape(),t=w(t),e.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new s,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return I(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var e=[],i=I(t),n=0,o=t.length;n<o;n++)i?(e[n]=w(t[n]),this._bounds.extend(e[n])):e[n]=this._convertLatLngs(t[n]);return e},_project:function(){var t=new f;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t),this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t,this._updateBounds())},_updateBounds:function(){var t=this._clickTolerance(),t=new p(t,t);this._rawPxBounds&&(this._pxBounds=new f([this._rawPxBounds.min.subtract(t),this._rawPxBounds.max.add(t)]))},_projectLatlngs:function(t,e,i){var n,o,s=t[0]instanceof v,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),i.extend(o[n]);e.push(o)}else for(n=0;n<r;n++)this._projectLatlngs(t[n],e,i)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var e,i,n,o,s=this._parts,r=0,a=0,h=this._rings.length;r<h;r++)for(e=0,i=(o=this._rings[r]).length;e<i-1;e++)(n=ni(o[e],o[e+1],t,e,!0))&&(s[a]=s[a]||[],s[a].push(n[0]),n[1]===o[e+1]&&e!==i-2||(s[a].push(n[1]),a++))},_simplifyPoints:function(){for(var t=this._parts,e=this.options.smoothFactor,i=0,n=t.length;i<n;i++)t[i]=ei(t[i],e)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,e){var i,n,o,s,r,a,h=this._clickTolerance();if(this._pxBounds&&this._pxBounds.contains(t))for(i=0,s=this._parts.length;i<s;i++)for(n=0,o=(r=(a=this._parts[i]).length)-1;n<r;o=n++)if((e||0!==n)&&ii(t,a[o],a[n])<=h)return!0;return!1}});yi._flat=ai;var xi=yi.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(this._map)return $e(this._defaultShape(),this._map.options.crs);throw new Error(\"Must add layer to map before using getCenter()\")},_convertLatLngs:function(t){var t=yi.prototype._convertLatLngs.call(this,t),e=t.length;return 2<=e&&t[0]instanceof v&&t[0].equals(t[e-1])&&t.pop(),t},_setLatLngs:function(t){yi.prototype._setLatLngs.call(this,t),I(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return(I(this._latlngs[0])?this._latlngs:this._latlngs[0])[0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,e=new p(e,e),t=new f(t.min.subtract(e),t.max.add(e));if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var i,n=0,o=this._rings.length;n<o;n++)(i=Je(this._rings[n],t,!0)).length&&this._parts.push(i)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var e,i,n,o,s,r,a,h,l=!1;if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(e=this._parts[o]).length)-1;s<h;r=s++)i=e[s],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(l=!l);return l||yi.prototype._containsPoint.call(this,t,!0)}});var wi=ci.extend({initialize:function(t,e){c(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,o=d(t)?t:t.features;if(o){for(e=0,i=o.length;e<i;e++)((n=o[e]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var s,r=this.options;return(!r.filter||r.filter(t))&&(s=bi(t,r))?(s.feature=Zi(t),s.defaultOptions=s.options,this.resetStyle(s),r.onEachFeature&&r.onEachFeature(t,s),this.addLayer(s)):this},resetStyle:function(t){return void 0===t?this.eachLayer(this.resetStyle,this):(t.options=l({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this)},setStyle:function(e){return this.eachLayer(function(t){this._setLayerStyle(t,e)},this)},_setLayerStyle:function(t,e){t.setStyle&&(\"function\"==typeof e&&(e=e(t.feature)),t.setStyle(e))}});function bi(t,e){var i,n,o,s,r=\"Feature\"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],l=e&&e.pointToLayer,u=e&&e.coordsToLatLng||Li;if(!a&&!r)return null;switch(r.type){case\"Point\":return Pi(l,t,i=u(a),e);case\"MultiPoint\":for(o=0,s=a.length;o<s;o++)i=u(a[o]),h.push(Pi(l,t,i,e));return new ci(h);case\"LineString\":case\"MultiLineString\":return n=Ti(a,\"LineString\"===r.type?0:1,u),new yi(n,e);case\"Polygon\":case\"MultiPolygon\":return n=Ti(a,\"Polygon\"===r.type?1:2,u),new xi(n,e);case\"GeometryCollection\":for(o=0,s=r.geometries.length;o<s;o++){var c=bi({geometry:r.geometries[o],type:\"Feature\",properties:t.properties},e);c&&h.push(c)}return new ci(h);case\"FeatureCollection\":for(o=0,s=r.features.length;o<s;o++){var d=bi(r.features[o],e);d&&h.push(d)}return new ci(h);default:throw new Error(\"Invalid GeoJSON object.\")}}function Pi(t,e,i,n){return t?t(e,i):new mi(i,n&&n.markersInheritOptions&&n)}function Li(t){return new v(t[1],t[0],t[2])}function Ti(t,e,i){for(var n,o=[],s=0,r=t.length;s<r;s++)n=e?Ti(t[s],e-1,i):(i||Li)(t[s]),o.push(n);return o}function Mi(t,e){return void 0!==(t=w(t)).alt?[i(t.lng,e),i(t.lat,e),i(t.alt,e)]:[i(t.lng,e),i(t.lat,e)]}function zi(t,e,i,n){for(var o=[],s=0,r=t.length;s<r;s++)o.push(e?zi(t[s],I(t[s])?0:e-1,i,n):Mi(t[s],n));return!e&&i&&0<o.length&&o.push(o[0].slice()),o}function Ci(t,e){return t.feature?l({},t.feature,{geometry:e}):Zi(e)}function Zi(t){return\"Feature\"===t.type||\"FeatureCollection\"===t.type?t:{type:\"Feature\",properties:{},geometry:t}}Tt={toGeoJSON:function(t){return Ci(this,{type:\"Point\",coordinates:Mi(this.getLatLng(),t)})}};function Si(t,e){return new wi(t,e)}mi.include(Tt),vi.include(Tt),gi.include(Tt),yi.include({toGeoJSON:function(t){var e=!I(this._latlngs);return Ci(this,{type:(e?\"Multi\":\"\")+\"LineString\",coordinates:zi(this._latlngs,e?1:0,!1,t)})}}),xi.include({toGeoJSON:function(t){var e=!I(this._latlngs),i=e&&!I(this._latlngs[0]),t=zi(this._latlngs,i?2:e?1:0,!0,t);return Ci(this,{type:(i?\"Multi\":\"\")+\"Polygon\",coordinates:t=e?t:[t]})}}),ui.include({toMultiPoint:function(e){var i=[];return this.eachLayer(function(t){i.push(t.toGeoJSON(e).geometry.coordinates)}),Ci(this,{type:\"MultiPoint\",coordinates:i})},toGeoJSON:function(e){var i,n,t=this.feature&&this.feature.geometry&&this.feature.geometry.type;return\"MultiPoint\"===t?this.toMultiPoint(e):(i=\"GeometryCollection\"===t,n=[],this.eachLayer(function(t){t.toGeoJSON&&(t=t.toGeoJSON(e),i?n.push(t.geometry):\"FeatureCollection\"===(t=Zi(t)).type?n.push.apply(n,t.features):n.push(t))}),i?Ci(this,{geometries:n,type:\"GeometryCollection\"}):{type:\"FeatureCollection\",features:n})}});var Mt=Si,Ei=o.extend({options:{opacity:1,alt:\"\",interactive:!1,crossOrigin:!1,errorOverlayUrl:\"\",zIndex:1,className:\"\"},initialize:function(t,e,i){this._url=t,this._bounds=g(e),c(this,i)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(M(this._image,\"leaflet-interactive\"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){T(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&fe(this._image),this},bringToBack:function(){return this._map&&ge(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=g(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=\"IMG\"===this._url.tagName,e=this._image=t?this._url:P(\"img\");M(e,\"leaflet-image-layer\"),this._zoomAnimated&&M(e,\"leaflet-zoom-animated\"),this.options.className&&M(e,this.options.className),e.onselectstart=u,e.onmousemove=u,e.onload=a(this.fire,this,\"load\"),e.onerror=a(this._overlayOnError,this,\"error\"),!this.options.crossOrigin&&\"\"!==this.options.crossOrigin||(e.crossOrigin=!0===this.options.crossOrigin?\"\":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t?this._url=e.src:(e.src=this._url,e.alt=this.options.alt)},_animateZoom:function(t){var e=this._map.getZoomScale(t.zoom),t=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;be(this._image,t,e)},_reset:function(){var t=this._image,e=new f(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),i=e.getSize();Z(t,e.min),t.style.width=i.x+\"px\",t.style.height=i.y+\"px\"},_updateOpacity:function(){C(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire(\"error\");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),ki=Ei.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=\"VIDEO\"===this._url.tagName,e=this._image=t?this._url:P(\"video\");if(M(e,\"leaflet-image-layer\"),this._zoomAnimated&&M(e,\"leaflet-zoom-animated\"),this.options.className&&M(e,this.options.className),e.onselectstart=u,e.onmousemove=u,e.onloadeddata=a(this.fire,this,\"load\"),t){for(var i=e.getElementsByTagName(\"source\"),n=[],o=0;o<i.length;o++)n.push(i[o].src);this._url=0<i.length?n:[e.src]}else{d(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,\"objectFit\")&&(e.style.objectFit=\"fill\"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted,e.playsInline=!!this.options.playsInline;for(var s=0;s<this._url.length;s++){var r=P(\"source\");r.src=this._url[s],e.appendChild(r)}}}});var Oi=Ei.extend({_initImage:function(){var t=this._image=this._url;M(t,\"leaflet-image-layer\"),this._zoomAnimated&&M(t,\"leaflet-zoom-animated\"),this.options.className&&M(t,this.options.className),t.onselectstart=u,t.onmousemove=u}});var Ai=o.extend({options:{interactive:!1,offset:[0,0],className:\"\",pane:void 0,content:\"\"},initialize:function(t,e){t&&(t instanceof v||d(t))?(this._latlng=w(t),c(this,e)):(c(this,t),this._source=e),this.options.content&&(this._content=this.options.content)},openOn:function(t){return(t=arguments.length?t:this._source._map).hasLayer(this)||t.addLayer(this),this},close:function(){return this._map&&this._map.removeLayer(this),this},toggle:function(t){return this._map?this.close():(arguments.length?this._source=t:t=this._source,this._prepareOpen(),this.openOn(t._map)),this},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&C(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&C(this._container,1),this.bringToFront(),this.options.interactive&&(M(this._container,\"leaflet-interactive\"),this.addInteractiveTarget(this._container))},onRemove:function(t){t._fadeAnimated?(C(this._container,0),this._removeTimeout=setTimeout(a(T,void 0,this._container),200)):T(this._container),this.options.interactive&&(z(this._container,\"leaflet-interactive\"),this.removeInteractiveTarget(this._container))},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=w(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility=\"hidden\",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility=\"\",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&fe(this._container),this},bringToBack:function(){return this._map&&ge(this._container),this},_prepareOpen:function(t){if(!(i=this._source)._map)return!1;if(i instanceof ci){var e,i=null,n=this._source._layers;for(e in n)if(n[e]._map){i=n[e];break}if(!i)return!1;this._source=i}if(!t)if(i.getCenter)t=i.getCenter();else if(i.getLatLng)t=i.getLatLng();else{if(!i.getBounds)throw new Error(\"Unable to get source layer LatLng.\");t=i.getBounds().getCenter()}return this.setLatLng(t),this._map&&this.update(),!0},_updateContent:function(){if(this._content){var t=this._contentNode,e=\"function\"==typeof this._content?this._content(this._source||this):this._content;if(\"string\"==typeof e)t.innerHTML=e;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(e)}this.fire(\"contentupdate\")}},_updatePosition:function(){var t,e,i;this._map&&(e=this._map.latLngToLayerPoint(this._latlng),t=m(this.options.offset),i=this._getAnchor(),this._zoomAnimated?Z(this._container,e.add(i)):t=t.add(e).add(i),e=this._containerBottom=-t.y,i=this._containerLeft=-Math.round(this._containerWidth/2)+t.x,this._container.style.bottom=e+\"px\",this._container.style.left=i+\"px\")},_getAnchor:function(){return[0,0]}}),Bi=(A.include({_initOverlay:function(t,e,i,n){var o=e;return o instanceof t||(o=new t(n).setContent(e)),i&&o.setLatLng(i),o}}),o.include({_initOverlay:function(t,e,i,n){var o=i;return o instanceof t?(c(o,n),o._source=this):(o=e&&!n?e:new t(n,this)).setContent(i),o}}),Ai.extend({options:{pane:\"popupPane\",offset:[0,7],maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:\"\"},openOn:function(t){return!(t=arguments.length?t:this._source._map).hasLayer(this)&&t._popup&&t._popup.options.autoClose&&t.removeLayer(t._popup),t._popup=this,Ai.prototype.openOn.call(this,t)},onAdd:function(t){Ai.prototype.onAdd.call(this,t),t.fire(\"popupopen\",{popup:this}),this._source&&(this._source.fire(\"popupopen\",{popup:this},!0),this._source instanceof fi||this._source.on(\"preclick\",Ae))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire(\"popupclose\",{popup:this}),this._source&&(this._source.fire(\"popupclose\",{popup:this},!0),this._source instanceof fi||this._source.off(\"preclick\",Ae))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return(void 0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this.close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_initLayout:function(){var t=\"leaflet-popup\",e=this._container=P(\"div\",t+\" \"+(this.options.className||\"\")+\" leaflet-zoom-animated\"),i=this._wrapper=P(\"div\",t+\"-content-wrapper\",e);this._contentNode=P(\"div\",t+\"-content\",i),Ie(e),Be(this._contentNode),S(e,\"contextmenu\",Ae),this._tipContainer=P(\"div\",t+\"-tip-container\",e),this._tip=P(\"div\",t+\"-tip\",this._tipContainer),this.options.closeButton&&((i=this._closeButton=P(\"a\",t+\"-close-button\",e)).setAttribute(\"role\",\"button\"),i.setAttribute(\"aria-label\",\"Close popup\"),i.href=\"#close\",i.innerHTML='<span aria-hidden=\"true\">&#215;</span>',S(i,\"click\",function(t){O(t),this.close()},this))},_updateLayout:function(){var t=this._contentNode,e=t.style,i=(e.width=\"\",e.whiteSpace=\"nowrap\",t.offsetWidth),i=Math.min(i,this.options.maxWidth),i=(i=Math.max(i,this.options.minWidth),e.width=i+1+\"px\",e.whiteSpace=\"\",e.height=\"\",t.offsetHeight),n=this.options.maxHeight,o=\"leaflet-popup-scrolled\";(n&&n<i?(e.height=n+\"px\",M):z)(t,o),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Z(this._container,t.add(e))},_adjustPan:function(){var t,e,i,n,o,s,r,a;this.options.autoPan&&(this._map._panAnim&&this._map._panAnim.stop(),this._autopanning?this._autopanning=!1:(t=this._map,e=parseInt(pe(this._container,\"marginBottom\"),10)||0,e=this._container.offsetHeight+e,a=this._containerWidth,(i=new p(this._containerLeft,-e-this._containerBottom))._add(Pe(this._container)),i=t.layerPointToContainerPoint(i),o=m(this.options.autoPanPadding),n=m(this.options.autoPanPaddingTopLeft||o),o=m(this.options.autoPanPaddingBottomRight||o),s=t.getSize(),r=0,i.x+a+o.x>s.x&&(r=i.x+a-s.x+o.x),i.x-r-n.x<(a=0)&&(r=i.x-n.x),i.y+e+o.y>s.y&&(a=i.y+e-s.y+o.y),i.y-a-n.y<0&&(a=i.y-n.y),(r||a)&&(this.options.keepInView&&(this._autopanning=!0),t.fire(\"autopanstart\").panBy([r,a]))))},_getAnchor:function(){return m(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}})),Ii=(A.mergeOptions({closePopupOnClick:!0}),A.include({openPopup:function(t,e,i){return this._initOverlay(Bi,t,e,i).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),o.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Bi,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ci||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e;this._popup&&this._map&&(Re(t),e=t.layer||t.target,this._popup._source!==e||e instanceof fi?(this._popup._source=e,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}}),Ai.extend({options:{pane:\"tooltipPane\",offset:[0,0],direction:\"auto\",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Ai.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire(\"tooltipopen\",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire(\"tooltipopen\",{tooltip:this},!0))},onRemove:function(t){Ai.prototype.onRemove.call(this,t),t.fire(\"tooltipclose\",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire(\"tooltipclose\",{tooltip:this},!0))},getEvents:function(){var t=Ai.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t=\"leaflet-tooltip \"+(this.options.className||\"\")+\" leaflet-zoom-\"+(this._zoomAnimated?\"animated\":\"hide\");this._contentNode=this._container=P(\"div\",t),this._container.setAttribute(\"role\",\"tooltip\"),this._container.setAttribute(\"id\",\"leaflet-tooltip-\"+h(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i=this._map,n=this._container,o=i.latLngToContainerPoint(i.getCenter()),i=i.layerPointToContainerPoint(t),s=this.options.direction,r=n.offsetWidth,a=n.offsetHeight,h=m(this.options.offset),l=this._getAnchor(),i=\"top\"===s?(e=r/2,a):\"bottom\"===s?(e=r/2,0):(e=\"center\"===s?r/2:\"right\"===s?0:\"left\"===s?r:i.x<o.x?(s=\"right\",0):(s=\"left\",r+2*(h.x+l.x)),a/2);t=t.subtract(m(e,i,!0)).add(h).add(l),z(n,\"leaflet-tooltip-right\"),z(n,\"leaflet-tooltip-left\"),z(n,\"leaflet-tooltip-top\"),z(n,\"leaflet-tooltip-bottom\"),M(n,\"leaflet-tooltip-\"+s),Z(n,t)},_updatePosition:function(){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&C(this._container,t)},_animateZoom:function(t){t=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(t)},_getAnchor:function(){return m(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}})),Ri=(A.include({openTooltip:function(t,e,i){return this._initOverlay(Ii,t,e,i).openOn(this),this},closeTooltip:function(t){return t.close(),this}}),o.include({bindTooltip:function(t,e){return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(),this._tooltip=this._initOverlay(Ii,this._tooltip,t,e),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){var e,i;!t&&this._tooltipHandlersAdded||(e=t?\"off\":\"on\",i={remove:this.closeTooltip,move:this._moveTooltip},this._tooltip.options.permanent?i.add=this._openTooltip:(i.mouseover=this._openTooltip,i.mouseout=this.closeTooltip,i.click=this._openTooltip,this._map?this._addFocusListeners():i.add=this._addFocusListeners),this._tooltip.options.sticky&&(i.mousemove=this._moveTooltip),this[e](i),this._tooltipHandlersAdded=!t)},openTooltip:function(t){return this._tooltip&&(this instanceof ci||(this._tooltip._source=this),this._tooltip._prepareOpen(t)&&(this._tooltip.openOn(this._map),this.getElement?this._setAriaDescribedByOnLayer(this):this.eachLayer&&this.eachLayer(this._setAriaDescribedByOnLayer,this))),this},closeTooltip:function(){if(this._tooltip)return this._tooltip.close()},toggleTooltip:function(){return this._tooltip&&this._tooltip.toggle(this),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_addFocusListeners:function(){this.getElement?this._addFocusListenersOnLayer(this):this.eachLayer&&this.eachLayer(this._addFocusListenersOnLayer,this)},_addFocusListenersOnLayer:function(t){var e=\"function\"==typeof t.getElement&&t.getElement();e&&(S(e,\"focus\",function(){this._tooltip._source=t,this.openTooltip()},this),S(e,\"blur\",this.closeTooltip,this))},_setAriaDescribedByOnLayer:function(t){t=\"function\"==typeof t.getElement&&t.getElement();t&&t.setAttribute(\"aria-describedby\",this._tooltip._container.id)},_openTooltip:function(t){var e;this._tooltip&&this._map&&(this._map.dragging&&this._map.dragging.moving()&&!this._openOnceFlag?(this._openOnceFlag=!0,(e=this)._map.once(\"moveend\",function(){e._openOnceFlag=!1,e._openTooltip(t)})):(this._tooltip._source=t.layer||t.target,this.openTooltip(this._tooltip.options.sticky?t.latlng:void 0)))},_moveTooltip:function(t){var e=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(t=this._map.mouseEventToContainerPoint(t.originalEvent),t=this._map.containerPointToLayerPoint(t),e=this._map.layerPointToLatLng(t)),this._tooltip.setLatLng(e)}}),di.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:\"leaflet-div-icon\"},createIcon:function(t){var t=t&&\"DIV\"===t.tagName?t:document.createElement(\"div\"),e=this.options;return e.html instanceof Element?(me(t),t.appendChild(e.html)):t.innerHTML=!1!==e.html?e.html:\"\",e.bgPos&&(e=m(e.bgPos),t.style.backgroundPosition=-e.x+\"px \"+-e.y+\"px\"),this._setIconStyles(t,\"icon\"),t},createShadow:function(){return null}}));di.Default=_i;var Ni=o.extend({options:{tileSize:256,opacity:1,updateWhenIdle:b.mobile,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:\"tilePane\",className:\"\",keepBuffer:2},initialize:function(t){c(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),T(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(fe(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(ge(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){var t;return this._map&&(this._removeAllTiles(),(t=this._clampZoom(this._map.getZoom()))!==this._tileZoom&&(this._tileZoom=t,this._updateLevels()),this._update()),this},getEvents:function(){var t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=j(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return document.createElement(\"div\")},getTileSize:function(){var t=this.options.tileSize;return t instanceof p?t:new p(t,t)},_updateZIndex:function(){this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var e,i=this.getPane().children,n=-t(-1/0,1/0),o=0,s=i.length;o<s;o++)e=i[o].style.zIndex,i[o]!==this._container&&e&&(n=t(n,+e));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!b.ielt9){C(this._container,this.options.opacity);var t,e=+new Date,i=!1,n=!1;for(t in this._tiles){var o,s=this._tiles[t];s.current&&s.loaded&&(o=Math.min(1,(e-s.loaded)/200),C(s.el,o),o<1?i=!0:(s.active?n=!0:this._onOpaqueTile(s),s.active=!0))}n&&!this._noPrune&&this._pruneTiles(),i&&(r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this))}},_onOpaqueTile:u,_initContainer:function(){this._container||(this._container=P(\"div\",\"leaflet-layer \"+(this.options.className||\"\")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,e=this.options.maxZoom;if(void 0!==t){for(var i in this._levels)i=Number(i),this._levels[i].el.children.length||i===t?(this._levels[i].el.style.zIndex=e-Math.abs(t-i),this._onUpdateLevel(i)):(T(this._levels[i].el),this._removeTilesAtZoom(i),this._onRemoveLevel(i),delete this._levels[i]);var n=this._levels[t],o=this._map;return n||((n=this._levels[t]={}).el=P(\"div\",\"leaflet-tile-container leaflet-zoom-animated\",this._container),n.el.style.zIndex=e,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),u(n.el.offsetWidth),this._onCreateLevel(n)),this._level=n}},_onUpdateLevel:u,_onRemoveLevel:u,_onCreateLevel:u,_pruneTiles:function(){if(this._map){var t,e,i,n=this._map.getZoom();if(n>this.options.maxZoom||n<this.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in this._tiles)(i=this._tiles[t]).current&&!i.active&&(e=i.coords,this._retainParent(e.x,e.y,e.z,e.z-5)||this._retainChildren(e.x,e.y,e.z,e.z+2));for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var e in this._tiles)this._tiles[e].coords.z===t&&this._removeTile(e)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)T(this._levels[t].el),this._onRemoveLevel(Number(t)),delete this._levels[t];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(t,e,i,n){var t=Math.floor(t/2),e=Math.floor(e/2),i=i-1,o=new p(+t,+e),o=(o.z=i,this._tileCoordsToKey(o)),o=this._tiles[o];return o&&o.active?o.retain=!0:(o&&o.loaded&&(o.retain=!0),n<i&&this._retainParent(t,e,i,n))},_retainChildren:function(t,e,i,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*e;s<2*e+2;s++){var r=new p(o,s),r=(r.z=i+1,this._tileCoordsToKey(r)),r=this._tiles[r];r&&r.active?r.retain=!0:(r&&r.loaded&&(r.retain=!0),i+1<n&&this._retainChildren(o,s,i+1,n))}},_resetView:function(t){t=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),t,t)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var e=this.options;return void 0!==e.minNativeZoom&&t<e.minNativeZoom?e.minNativeZoom:void 0!==e.maxNativeZoom&&e.maxNativeZoom<t?e.maxNativeZoom:t},_setView:function(t,e,i,n){var o=Math.round(e),o=void 0!==this.options.maxZoom&&o>this.options.maxZoom||void 0!==this.options.minZoom&&o<this.options.minZoom?void 0:this._clampZoom(o),s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!==o&&this._update(t),i||this._pruneTiles(),this._noPrune=!!i),this._setZoomTransforms(t,e)},_setZoomTransforms:function(t,e){for(var i in this._levels)this._setZoomTransform(this._levels[i],t,e)},_setZoomTransform:function(t,e,i){var n=this._map.getZoomScale(i,t.zoom),e=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(e,i)).round();b.any3d?be(t.el,e,n):Z(t.el,e)},_resetGrid:function(){var t=this._map,e=t.options.crs,i=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=e.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,e.wrapLng[0]],n).x/i.x),Math.ceil(t.project([0,e.wrapLng[1]],n).x/i.y)],this._wrapY=e.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([e.wrapLat[0],0],n).y/i.x),Math.ceil(t.project([e.wrapLat[1],0],n).y/i.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var e=this._map,i=e._animatingZoom?Math.max(e._animateToZoom,e.getZoom()):e.getZoom(),i=e.getZoomScale(i,this._tileZoom),t=e.project(t,this._tileZoom).floor(),e=e.getSize().divideBy(2*i);return new f(t.subtract(e),t.add(e))},_update:function(t){var e=this._map;if(e){var i=this._clampZoom(e.getZoom());if(void 0===t&&(t=e.getCenter()),void 0!==this._tileZoom){var n,e=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(e),s=o.getCenter(),r=[],e=this.options.keepBuffer,a=new f(o.getBottomLeft().subtract([e,-e]),o.getTopRight().add([e,-e]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error(\"Attempted to load an infinite number of tiles\");for(n in this._tiles){var h=this._tiles[n].coords;h.z===this._tileZoom&&a.contains(new p(h.x,h.y))||(this._tiles[n].current=!1)}if(1<Math.abs(i-this._tileZoom))this._setView(t,i);else{for(var l=o.min.y;l<=o.max.y;l++)for(var u=o.min.x;u<=o.max.x;u++){var c,d=new p(u,l);d.z=this._tileZoom,this._isValidTile(d)&&((c=this._tiles[this._tileCoordsToKey(d)])?c.current=!0:r.push(d))}if(r.sort(function(t,e){return t.distanceTo(s)-e.distanceTo(s)}),0!==r.length){this._loading||(this._loading=!0,this.fire(\"loading\"));for(var _=document.createDocumentFragment(),u=0;u<r.length;u++)this._addTile(r[u],_);this._level.el.appendChild(_)}}}}},_isValidTile:function(t){var e=this._map.options.crs;if(!e.infinite){var i=this._globalTileRange;if(!e.wrapLng&&(t.x<i.min.x||t.x>i.max.x)||!e.wrapLat&&(t.y<i.min.y||t.y>i.max.y))return!1}return!this.options.bounds||(e=this._tileCoordsToBounds(t),g(this.options.bounds).overlaps(e))},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),i=n.add(i);return[e.unproject(n,t.z),e.unproject(i,t.z)]},_tileCoordsToBounds:function(t){t=this._tileCoordsToNwSe(t),t=new s(t[0],t[1]);return t=this.options.noWrap?t:this._map.wrapLatLngBounds(t)},_tileCoordsToKey:function(t){return t.x+\":\"+t.y+\":\"+t.z},_keyToTileCoords:function(t){var t=t.split(\":\"),e=new p(+t[0],+t[1]);return e.z=+t[2],e},_removeTile:function(t){var e=this._tiles[t];e&&(T(e.el),delete this._tiles[t],this.fire(\"tileunload\",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){M(t,\"leaflet-tile\");var e=this.getTileSize();t.style.width=e.x+\"px\",t.style.height=e.y+\"px\",t.onselectstart=u,t.onmousemove=u,b.ielt9&&this.options.opacity<1&&C(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&x(a(this._tileReady,this,t,null,o)),Z(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire(\"tileloadstart\",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire(\"tileerror\",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);(i=this._tiles[n])&&(i.loaded=+new Date,this._map._fadeAnimated?(C(i.el,0),r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(M(i.el,\"leaflet-tile-loaded\"),this.fire(\"tileload\",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire(\"load\"),b.ielt9||!this._map._fadeAnimated?x(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new p(this._wrapX?H(t.x,this._wrapX):t.x,this._wrapY?H(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new f(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var Di=Ni.extend({options:{minZoom:0,maxZoom:18,subdomains:\"abc\",errorTileUrl:\"\",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,(e=c(this,e)).detectRetina&&b.retina&&0<e.maxZoom?(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom=Math.min(e.maxZoom,e.minZoom+1)):(e.zoomOffset++,e.maxZoom=Math.max(e.minZoom,e.maxZoom-1)),e.minZoom=Math.max(0,e.minZoom)):e.zoomReverse?e.minZoom=Math.min(e.maxZoom,e.minZoom):e.maxZoom=Math.max(e.minZoom,e.maxZoom),\"string\"==typeof e.subdomains&&(e.subdomains=e.subdomains.split(\"\")),this.on(\"tileunload\",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&void 0===e&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var i=document.createElement(\"img\");return S(i,\"load\",a(this._tileOnLoad,this,e,i)),S(i,\"error\",a(this._tileOnError,this,e,i)),!this.options.crossOrigin&&\"\"!==this.options.crossOrigin||(i.crossOrigin=!0===this.options.crossOrigin?\"\":this.options.crossOrigin),\"string\"==typeof this.options.referrerPolicy&&(i.referrerPolicy=this.options.referrerPolicy),i.alt=\"\",i.src=this.getTileUrl(t),i},getTileUrl:function(t){var e={r:b.retina?\"@2x\":\"\",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};return this._map&&!this._map.options.crs.infinite&&(t=this._globalTileRange.max.y-t.y,this.options.tms&&(e.y=t),e[\"-y\"]=t),q(this._url,l(e,this.options))},_tileOnLoad:function(t,e){b.ielt9?setTimeout(a(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,i){var n=this.options.errorTileUrl;n&&e.getAttribute(\"src\")!==n&&(e.src=n),t(i,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom;return(t=this.options.zoomReverse?e-t:t)+this.options.zoomOffset},_getSubdomain:function(t){t=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[t]},_abortLoading:function(){var t,e,i;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=u,i.onerror=u,i.complete||(i.src=K,e=this._tiles[t].coords,T(i),delete this._tiles[t],this.fire(\"tileabort\",{tile:i,coords:e})))},_removeTile:function(t){var e=this._tiles[t];if(e)return e.el.setAttribute(\"src\",K),Ni.prototype._removeTile.call(this,t)},_tileReady:function(t,e,i){if(this._map&&(!i||i.getAttribute(\"src\")!==K))return Ni.prototype._tileReady.call(this,t,e,i)}});function ji(t,e){return new Di(t,e)}var Hi=Di.extend({defaultWmsParams:{service:\"WMS\",request:\"GetMap\",layers:\"\",styles:\"\",format:\"image/jpeg\",transparent:!1,version:\"1.1.1\"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var i,n=l({},this.defaultWmsParams);for(i in e)i in this.options||(n[i]=e[i]);var t=(e=c(this,e)).detectRetina&&b.retina?2:1,o=this.getTileSize();n.width=o.x*t,n.height=o.y*t,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=1.3<=this._wmsVersion?\"crs\":\"srs\";this.wmsParams[e]=this._crs.code,Di.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),i=this._crs,i=_(i.project(e[0]),i.project(e[1])),e=i.min,i=i.max,e=(1.3<=this._wmsVersion&&this._crs===li?[e.y,e.x,i.y,i.x]:[e.x,e.y,i.x,i.y]).join(\",\"),i=Di.prototype.getTileUrl.call(this,t);return i+U(this.wmsParams,i,this.options.uppercase)+(this.options.uppercase?\"&BBOX=\":\"&bbox=\")+e},setParams:function(t,e){return l(this.wmsParams,t),e||this.redraw(),this}});Di.WMS=Hi,ji.wms=function(t,e){return new Hi(t,e)};var Wi=o.extend({options:{padding:.1},initialize:function(t){c(this,t),h(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),M(this._container,\"leaflet-zoom-animated\")),this.getPane().appendChild(this._container),this._update(),this.on(\"update\",this._updatePaths,this)},onRemove:function(){this.off(\"update\",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var i=this._map.getZoomScale(e,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),n=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t,e));b.any3d?be(this._container,n,i):Z(this._container,n)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new f(i,i.add(e.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),Fi=Wi.extend({options:{tolerance:0},getEvents:function(){var t=Wi.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Wi.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement(\"canvas\");S(t,\"mousemove\",this._onMouseMove,this),S(t,\"click dblclick mousedown mouseup contextmenu\",this._onClick,this),S(t,\"mouseout\",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext(\"2d\")},_destroyContainer:function(){r(this._redrawRequest),delete this._ctx,T(this._container),k(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){var t,e,i,n;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),t=this._bounds,e=this._container,i=t.getSize(),n=b.retina?2:1,Z(e,t.min),e.width=n*i.x,e.height=n*i.y,e.style.width=i.x+\"px\",e.style.height=i.y+\"px\",b.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire(\"update\"))},_reset:function(){Wi.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t);t=(this._layers[h(t)]=t)._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=t),this._drawLast=t,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,i=e.next,e=e.prev;i?i.prev=e:this._drawLast=e,e?e.next=i:this._drawFirst=i,delete t._order,delete this._layers[h(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(\"string\"==typeof t.options.dashArray){for(var e,i=t.options.dashArray.split(/[, ]+/),n=[],o=0;o<i.length;o++){if(e=Number(i[o]),isNaN(e))return;n.push(e)}t.options._dashArray=n}else t.options._dashArray=t.options.dashArray},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||x(this._redraw,this))},_extendRedrawBounds:function(t){var e;t._pxBounds&&(e=(t.options.weight||0)+1,this._redrawBounds=this._redrawBounds||new f,this._redrawBounds.extend(t._pxBounds.min.subtract([e,e])),this._redrawBounds.extend(t._pxBounds.max.add([e,e])))},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var t,e=this._redrawBounds;e?(t=e.getSize(),this._ctx.clearRect(e.min.x,e.min.y,t.x,t.y)):(this._ctx.save(),this._ctx.setTransform(1,0,0,1,0,0),this._ctx.clearRect(0,0,this._container.width,this._container.height),this._ctx.restore())},_draw:function(){var t,e,i=this._redrawBounds;this._ctx.save(),i&&(e=i.getSize(),this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()),this._drawing=!0;for(var n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,e){if(this._drawing){var i,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(h.beginPath(),i=0;i<a;i++){for(n=0,o=r[i].length;n<o;n++)s=r[i][n],h[n?\"lineTo\":\"moveTo\"](s.x,s.y);e&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){var e,i,n,o;this._drawing&&!t._empty()&&(e=t._point,i=this._ctx,n=Math.max(Math.round(t._radius),1),1!=(o=(Math.max(Math.round(t._radiusY),1)||n)/n)&&(i.save(),i.scale(1,o)),i.beginPath(),i.arc(e.x,e.y/o,n,0,2*Math.PI,!1),1!=o&&i.restore(),this._fillStroke(i,t))},_fillStroke:function(t,e){var i=e.options;i.fill&&(t.globalAlpha=i.fillOpacity,t.fillStyle=i.fillColor||i.color,t.fill(i.fillRule||\"evenodd\")),i.stroke&&0!==i.weight&&(t.setLineDash&&t.setLineDash(e.options&&e.options._dashArray||[]),t.globalAlpha=i.opacity,t.lineWidth=i.weight,t.strokeStyle=i.color,t.lineCap=i.lineCap,t.lineJoin=i.lineJoin,t.stroke())},_onClick:function(t){for(var e,i,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive&&e._containsPoint(n)&&((\"click\"===t.type||\"preclick\"===t.type)&&this._map._draggableMoved(e)||(i=e));this._fireEvent(!!i&&[i],t)},_onMouseMove:function(t){var e;!this._map||this._map.dragging.moving()||this._map._animatingZoom||(e=this._map.mouseEventToLayerPoint(t),this._handleMouseHover(t,e))},_handleMouseOut:function(t){var e=this._hoveredLayer;e&&(z(this._container,\"leaflet-interactive\"),this._fireEvent([e],t,\"mouseout\"),this._hoveredLayer=null,this._mouseHoverThrottled=!1)},_handleMouseHover:function(t,e){if(!this._mouseHoverThrottled){for(var i,n,o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(e)&&(n=i);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(M(this._container,\"leaflet-interactive\"),this._fireEvent([n],t,\"mouseover\"),this._hoveredLayer=n)),this._fireEvent(!!this._hoveredLayer&&[this._hoveredLayer],t),this._mouseHoverThrottled=!0,setTimeout(a(function(){this._mouseHoverThrottled=!1},this),32)}},_fireEvent:function(t,e,i){this._map._fireDOMEvent(e,i||e.type,t)},_bringToFront:function(t){var e,i,n=t._order;n&&(e=n.next,i=n.prev,e&&((e.prev=i)?i.next=e:e&&(this._drawFirst=e),n.prev=this._drawLast,(this._drawLast.next=n).next=null,this._drawLast=n,this._requestRedraw(t)))},_bringToBack:function(t){var e,i,n=t._order;n&&(e=n.next,(i=n.prev)&&((i.next=e)?e.prev=i:i&&(this._drawLast=i),n.prev=null,n.next=this._drawFirst,this._drawFirst.prev=n,this._drawFirst=n,this._requestRedraw(t)))}});function Ui(t){return b.canvas?new Fi(t):null}var Vi=function(){try{return document.namespaces.add(\"lvml\",\"urn:schemas-microsoft-com:vml\"),function(t){return document.createElement(\"<lvml:\"+t+' class=\"lvml\">')}}catch(t){}return function(t){return document.createElement(\"<\"+t+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">')}}(),zt={_initContainer:function(){this._container=P(\"div\",\"leaflet-vml-container\")},_update:function(){this._map._animatingZoom||(Wi.prototype._update.call(this),this.fire(\"update\"))},_initPath:function(t){var e=t._container=Vi(\"shape\");M(e,\"leaflet-vml-shape \"+(this.options.className||\"\")),e.coordsize=\"1 1\",t._path=Vi(\"path\"),e.appendChild(t._path),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;T(e),t.removeInteractiveTarget(e),delete this._layers[h(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e=e||(t._stroke=Vi(\"stroke\")),o.appendChild(e),e.weight=n.weight+\"px\",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=d(n.dashArray)?n.dashArray.join(\" \"):n.dashArray.replace(/( *, *)/g,\" \"):e.dashStyle=\"\",e.endcap=n.lineCap.replace(\"butt\",\"flat\"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i=i||(t._fill=Vi(\"fill\")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?\"M0 0\":\"AL \"+e.x+\",\"+e.y+\" \"+i+\",\"+n+\" 0,23592600\")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){fe(t._container)},_bringToBack:function(t){ge(t._container)}},qi=b.vml?Vi:ct,Gi=Wi.extend({_initContainer:function(){this._container=qi(\"svg\"),this._container.setAttribute(\"pointer-events\",\"none\"),this._rootGroup=qi(\"g\"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){T(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){var t,e,i;this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this),e=(t=this._bounds).getSize(),i=this._container,this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute(\"width\",e.x),i.setAttribute(\"height\",e.y)),Z(i,t.min),i.setAttribute(\"viewBox\",[t.min.x,t.min.y,e.x,e.y].join(\" \")),this.fire(\"update\"))},_initPath:function(t){var e=t._path=qi(\"path\");t.options.className&&M(e,t.options.className),t.options.interactive&&M(e,\"leaflet-interactive\"),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){T(t._path),t.removeInteractiveTarget(t._path),delete this._layers[h(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,t=t.options;e&&(t.stroke?(e.setAttribute(\"stroke\",t.color),e.setAttribute(\"stroke-opacity\",t.opacity),e.setAttribute(\"stroke-width\",t.weight),e.setAttribute(\"stroke-linecap\",t.lineCap),e.setAttribute(\"stroke-linejoin\",t.lineJoin),t.dashArray?e.setAttribute(\"stroke-dasharray\",t.dashArray):e.removeAttribute(\"stroke-dasharray\"),t.dashOffset?e.setAttribute(\"stroke-dashoffset\",t.dashOffset):e.removeAttribute(\"stroke-dashoffset\")):e.setAttribute(\"stroke\",\"none\"),t.fill?(e.setAttribute(\"fill\",t.fillColor||t.color),e.setAttribute(\"fill-opacity\",t.fillOpacity),e.setAttribute(\"fill-rule\",t.fillRule||\"evenodd\")):e.setAttribute(\"fill\",\"none\"))},_updatePoly:function(t,e){this._setPath(t,dt(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n=\"a\"+i+\",\"+(Math.max(Math.round(t._radiusY),1)||i)+\" 0 1,0 \",e=t._empty()?\"M0 0\":\"M\"+(e.x-i)+\",\"+e.y+n+2*i+\",0 \"+n+2*-i+\",0 \";this._setPath(t,e)},_setPath:function(t,e){t._path.setAttribute(\"d\",e)},_bringToFront:function(t){fe(t._path)},_bringToBack:function(t){ge(t._path)}});function Ki(t){return b.svg||b.vml?new Gi(t):null}b.vml&&Gi.include(zt),A.include({getRenderer:function(t){t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(t)||this.addLayer(t),t},_getPaneRenderer:function(t){var e;return\"overlayPane\"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e)},_createRenderer:function(t){return this.options.preferCanvas&&Ui(t)||Ki(t)}});var Yi=xi.extend({initialize:function(t,e){xi.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=g(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});Gi.create=qi,Gi.pointsToPath=dt,wi.geometryToLayer=bi,wi.coordsToLatLng=Li,wi.coordsToLatLngs=Ti,wi.latLngToCoords=Mi,wi.latLngsToCoords=zi,wi.getFeature=Ci,wi.asFeature=Zi,A.mergeOptions({boxZoom:!0});var _t=n.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on(\"unload\",this._destroy,this)},addHooks:function(){S(this._container,\"mousedown\",this._onMouseDown,this)},removeHooks:function(){k(this._container,\"mousedown\",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){T(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),re(),Le(),this._startPoint=this._map.mouseEventToContainerPoint(t),S(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=P(\"div\",\"leaflet-zoom-box\",this._container),M(this._container,\"leaflet-crosshair\"),this._map.fire(\"boxzoomstart\")),this._point=this._map.mouseEventToContainerPoint(t);var t=new f(this._point,this._startPoint),e=t.getSize();Z(this._box,t.min),this._box.style.width=e.x+\"px\",this._box.style.height=e.y+\"px\"},_finish:function(){this._moved&&(T(this._box),z(this._container,\"leaflet-crosshair\")),ae(),Te(),k(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0),t=new s(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(t).fire(\"boxzoomend\",{boxZoomBounds:t})))},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}}),Ct=(A.addInitHook(\"addHandler\",\"boxZoom\",_t),A.mergeOptions({doubleClickZoom:!0}),n.extend({addHooks:function(){this._map.on(\"dblclick\",this._onDoubleClick,this)},removeHooks:function(){this._map.off(\"dblclick\",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,i=t.originalEvent.shiftKey?i-n:i+n;\"center\"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}})),Zt=(A.addInitHook(\"addHandler\",\"doubleClickZoom\",Ct),A.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0}),n.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new Xe(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on(\"predrag\",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on(\"predrag\",this._onPreDragWrap,this),t.on(\"zoomend\",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),M(this._map._container,\"leaflet-grab leaflet-touch-drag\"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){z(this._map._container,\"leaflet-grab\"),z(this._map._container,\"leaflet-touch-drag\"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,e=this._map;e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=g(this._map.options.maxBounds),this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,e.fire(\"movestart\").fire(\"dragstart\"),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var e,i;this._map.options.inertia&&(e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(i),this._times.push(e),this._prunePositions(e)),this._map.fire(\"move\",t).fire(\"drag\",t)},_prunePositions:function(t){for(;1<this._positions.length&&50<t-this._times[0];)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){var t,e;this._viscosity&&this._offsetLimit&&(t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit,t.x<e.min.x&&(t.x=this._viscousLimit(t.x,e.min.x)),t.y<e.min.y&&(t.y=this._viscousLimit(t.y,e.min.y)),t.x>e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,n=(n+e+i)%t-e-i,t=Math.abs(o+i)<Math.abs(n+i)?o:n;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=t},_onDragEnd:function(t){var e,i,n,o,s=this._map,r=s.options,a=!r.inertia||t.noInertia||this._times.length<2;s.fire(\"dragend\",t),!a&&(this._prunePositions(+new Date),t=this._lastPos.subtract(this._positions[0]),a=(this._lastTime-this._times[0])/1e3,e=r.easeLinearity,a=(t=t.multiplyBy(e/a)).distanceTo([0,0]),i=Math.min(r.inertiaMaxSpeed,a),t=t.multiplyBy(i/a),n=i/(r.inertiaDeceleration*e),(o=t.multiplyBy(-n/2).round()).x||o.y)?(o=s._limitOffset(o,s.options.maxBounds),x(function(){s.panBy(o,{duration:n,easeLinearity:e,noMoveStart:!0,animate:!0})})):s.fire(\"moveend\")}})),St=(A.addInitHook(\"addHandler\",\"dragging\",Zt),A.mergeOptions({keyboard:!0,keyboardPanDelta:80}),n.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex=\"0\"),S(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),k(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){var t,e,i;this._focused||(i=document.body,t=document.documentElement,e=i.scrollTop||t.scrollTop,i=i.scrollLeft||t.scrollLeft,this._map._container.focus(),window.scrollTo(i,e))},_onFocus:function(){this._focused=!0,this._map.fire(\"focus\")},_onBlur:function(){this._focused=!1,this._map.fire(\"blur\")},_setPanDelta:function(t){for(var e=this._panKeys={},i=this.keyCodes,n=0,o=i.left.length;n<o;n++)e[i.left[n]]=[-1*t,0];for(n=0,o=i.right.length;n<o;n++)e[i.right[n]]=[t,0];for(n=0,o=i.down.length;n<o;n++)e[i.down[n]]=[0,t];for(n=0,o=i.up.length;n<o;n++)e[i.up[n]]=[0,-1*t]},_setZoomDelta:function(t){for(var e=this._zoomKeys={},i=this.keyCodes,n=0,o=i.zoomIn.length;n<o;n++)e[i.zoomIn[n]]=t;for(n=0,o=i.zoomOut.length;n<o;n++)e[i.zoomOut[n]]=-t},_addHooks:function(){S(document,\"keydown\",this._onKeyDown,this)},_removeHooks:function(){k(document,\"keydown\",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e,i,n=t.keyCode,o=this._map;if(n in this._panKeys)o._panAnim&&o._panAnim._inProgress||(i=this._panKeys[n],t.shiftKey&&(i=m(i).multiplyBy(3)),o.options.maxBounds&&(i=o._limitOffset(m(i),o.options.maxBounds)),o.options.worldCopyJump?(e=o.wrapLatLng(o.unproject(o.project(o.getCenter()).add(i))),o.panTo(e)):o.panBy(i));else if(n in this._zoomKeys)o.setZoom(o.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[n]);else{if(27!==n||!o._popup||!o._popup.options.closeOnEscapeKey)return;o.closePopup()}Re(t)}}})),Et=(A.addInitHook(\"addHandler\",\"keyboard\",St),A.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60}),n.extend({addHooks:function(){S(this._map._container,\"wheel\",this._onWheelScroll,this),this._delta=0},removeHooks:function(){k(this._map._container,\"wheel\",this._onWheelScroll,this)},_onWheelScroll:function(t){var e=He(t),i=this._map.options.wheelDebounceTime,e=(this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date),Math.max(i-(+new Date-this._startTime),0));clearTimeout(this._timer),this._timer=setTimeout(a(this._performZoom,this),e),Re(t)},_performZoom:function(){var t=this._map,e=t.getZoom(),i=this._map.options.zoomSnap||0,n=(t._stop(),this._delta/(4*this._map.options.wheelPxPerZoomLevel)),n=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,i=i?Math.ceil(n/i)*i:n,n=t._limitZoom(e+(0<this._delta?i:-i))-e;this._delta=0,this._startTime=null,n&&(\"center\"===t.options.scrollWheelZoom?t.setZoom(e+n):t.setZoomAround(this._lastMousePos,e+n))}})),kt=(A.addInitHook(\"addHandler\",\"scrollWheelZoom\",Et),A.mergeOptions({tapHold:b.touchNative&&b.safari&&b.mobile,tapTolerance:15}),n.extend({addHooks:function(){S(this._map._container,\"touchstart\",this._onDown,this)},removeHooks:function(){k(this._map._container,\"touchstart\",this._onDown,this)},_onDown:function(t){var e;clearTimeout(this._holdTimeout),1===t.touches.length&&(e=t.touches[0],this._startPos=this._newPos=new p(e.clientX,e.clientY),this._holdTimeout=setTimeout(a(function(){this._cancel(),this._isTapValid()&&(S(document,\"touchend\",O),S(document,\"touchend touchcancel\",this._cancelClickPrevent),this._simulateEvent(\"contextmenu\",e))},this),600),S(document,\"touchend touchcancel contextmenu\",this._cancel,this),S(document,\"touchmove\",this._onMove,this))},_cancelClickPrevent:function t(){k(document,\"touchend\",O),k(document,\"touchend touchcancel\",t)},_cancel:function(){clearTimeout(this._holdTimeout),k(document,\"touchend touchcancel contextmenu\",this._cancel,this),k(document,\"touchmove\",this._onMove,this)},_onMove:function(t){t=t.touches[0];this._newPos=new p(t.clientX,t.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,e){t=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY});t._simulated=!0,e.target.dispatchEvent(t)}})),Ot=(A.addInitHook(\"addHandler\",\"tapHold\",kt),A.mergeOptions({touchZoom:b.touch,bounceAtZoomLimits:!0}),n.extend({addHooks:function(){M(this._map._container,\"leaflet-touch-zoom\"),S(this._map._container,\"touchstart\",this._onTouchStart,this)},removeHooks:function(){z(this._map._container,\"leaflet-touch-zoom\"),k(this._map._container,\"touchstart\",this._onTouchStart,this)},_onTouchStart:function(t){var e,i,n=this._map;!t.touches||2!==t.touches.length||n._animatingZoom||this._zooming||(e=n.mouseEventToContainerPoint(t.touches[0]),i=n.mouseEventToContainerPoint(t.touches[1]),this._centerPoint=n.getSize()._divideBy(2),this._startLatLng=n.containerPointToLatLng(this._centerPoint),\"center\"!==n.options.touchZoom&&(this._pinchStartLatLng=n.containerPointToLatLng(e.add(i)._divideBy(2))),this._startDist=e.distanceTo(i),this._startZoom=n.getZoom(),this._moved=!1,this._zooming=!0,n._stop(),S(document,\"touchmove\",this._onTouchMove,this),S(document,\"touchend touchcancel\",this._onTouchEnd,this),O(t))},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var e=this._map,i=e.mouseEventToContainerPoint(t.touches[0]),n=e.mouseEventToContainerPoint(t.touches[1]),o=i.distanceTo(n)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoom<e.getMinZoom()&&o<1||this._zoom>e.getMaxZoom()&&1<o)&&(this._zoom=e._limitZoom(this._zoom)),\"center\"===e.options.touchZoom){if(this._center=this._startLatLng,1==o)return}else{i=i._add(n)._divideBy(2)._subtract(this._centerPoint);if(1==o&&0===i.x&&0===i.y)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(i),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),r(this._animRequest);n=a(e._move,e,this._center,this._zoom,{pinch:!0,round:!1},void 0);this._animRequest=x(n,this,!0),O(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,r(this._animRequest),k(document,\"touchmove\",this._onTouchMove,this),k(document,\"touchend touchcancel\",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}})),Xi=(A.addInitHook(\"addHandler\",\"touchZoom\",Ot),A.BoxZoom=_t,A.DoubleClickZoom=Ct,A.Drag=Zt,A.Keyboard=St,A.ScrollWheelZoom=Et,A.TapHold=kt,A.TouchZoom=Ot,t.Bounds=f,t.Browser=b,t.CRS=ot,t.Canvas=Fi,t.Circle=vi,t.CircleMarker=gi,t.Class=et,t.Control=B,t.DivIcon=Ri,t.DivOverlay=Ai,t.DomEvent=mt,t.DomUtil=pt,t.Draggable=Xe,t.Evented=it,t.FeatureGroup=ci,t.GeoJSON=wi,t.GridLayer=Ni,t.Handler=n,t.Icon=di,t.ImageOverlay=Ei,t.LatLng=v,t.LatLngBounds=s,t.Layer=o,t.LayerGroup=ui,t.LineUtil=vt,t.Map=A,t.Marker=mi,t.Mixin=ft,t.Path=fi,t.Point=p,t.PolyUtil=gt,t.Polygon=xi,t.Polyline=yi,t.Popup=Bi,t.PosAnimation=Fe,t.Projection=wt,t.Rectangle=Yi,t.Renderer=Wi,t.SVG=Gi,t.SVGOverlay=Oi,t.TileLayer=Di,t.Tooltip=Ii,t.Transformation=at,t.Util=tt,t.VideoOverlay=ki,t.bind=a,t.bounds=_,t.canvas=Ui,t.circle=function(t,e,i){return new vi(t,e,i)},t.circleMarker=function(t,e){return new gi(t,e)},t.control=Ue,t.divIcon=function(t){return new Ri(t)},t.extend=l,t.featureGroup=function(t,e){return new ci(t,e)},t.geoJSON=Si,t.geoJson=Mt,t.gridLayer=function(t){return new Ni(t)},t.icon=function(t){return new di(t)},t.imageOverlay=function(t,e,i){return new Ei(t,e,i)},t.latLng=w,t.latLngBounds=g,t.layerGroup=function(t,e){return new ui(t,e)},t.map=function(t,e){return new A(t,e)},t.marker=function(t,e){return new mi(t,e)},t.point=m,t.polygon=function(t,e){return new xi(t,e)},t.polyline=function(t,e){return new yi(t,e)},t.popup=function(t,e){return new Bi(t,e)},t.rectangle=function(t,e){return new Yi(t,e)},t.setOptions=c,t.stamp=h,t.svg=Ki,t.svgOverlay=function(t,e,i){return new Oi(t,e,i)},t.tileLayer=ji,t.tooltip=function(t,e){return new Ii(t,e)},t.transformation=ht,t.version=\"1.9.4\",t.videoOverlay=function(t,e,i){return new ki(t,e,i)},window.L);t.noConflict=function(){return window.L=Xi,this},window.L=t});\n//# sourceMappingURL=leaflet.js.map"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/map-frontend.js",
    "content": "/* global google, jQuery */\n\n( function( $, document ) {\n\t'use strict';\n    \n\t/**\n\t * Callback function for Google Maps Lazy Load library to display map\n\t *\n\t * @return void\n\t */\n\tfunction displayMap() {\n\t\tvar $container = $( this ),\n\t\t\toptions = $container.data( 'map_options' );\n\n\t\tvar mapOptions = options.js_options,\n\t\t\tcenter = new google.maps.LatLng( options.latitude, options.longitude ),\n\t\t\tmap;\n\n\t\tswitch ( mapOptions.mapTypeId ) {\n\t\t\tcase 'ROADMAP':\n\t\t\t\tmapOptions.mapTypeId = google.maps.MapTypeId.ROADMAP;\n\t\t\t\tbreak;\n\t\t\tcase 'SATELLITE':\n\t\t\t\tmapOptions.mapTypeId = google.maps.MapTypeId.SATELLITE;\n\t\t\t\tbreak;\n\t\t\tcase 'HYBRID':\n\t\t\t\tmapOptions.mapTypeId = google.maps.MapTypeId.HYBRID;\n\t\t\t\tbreak;\n\t\t\tcase 'TERRAIN':\n\t\t\t\tmapOptions.mapTypeId = google.maps.MapTypeId.TERRAIN;\n\t\t\t\tbreak;\n\t\t}\n\t\tmapOptions.center = center;\n\n\t\t// Typecast zoom to a number\n\t\tmapOptions.zoom *= 1;\n\n\t\tif ( typeof mapOptions.styles === 'string' ) {\n\t\t\tmapOptions.styles = JSON.parse(mapOptions.styles);\n\t\t}\n\n\t\tmap = new google.maps.Map( this, mapOptions );\n\n\t\t// Set marker\n\t\tif ( options.marker ) {\n\t\t\tvar marker = new google.maps.Marker( {\n\t\t\t\tposition: center,\n\t\t\t\tmap: map\n\t\t\t} );\n\n\t\t\t// Set marker title\n\t\t\tif ( options.marker_title ) {\n\t\t\t\tmarker.setTitle( options.marker_title );\n\t\t\t}\n\n\t\t\t// Set marker icon\n\t\t\tif ( options.marker_icon ) {\n\t\t\t\tmarker.setIcon( options.marker_icon );\n\t\t\t}\n\t\t}\n\n\t\t// Set info window\n\t\tif ( options.info_window ) {\n\t\t\tvar infoWindow = new google.maps.InfoWindow( {\n\t\t\t\tcontent: options.info_window,\n\t\t\t\tminWidth: 200\n\t\t\t} );\n\n\t\t\tgoogle.maps.event.addListener( marker, 'click', function () {\n\t\t\t\tinfoWindow.open( map, marker );\n\t\t\t} );\n\n\t\t\tif ( true === mapOptions.openInfoWindow ) {\n\t\t\t\tinfoWindow.open( map, marker );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Loop through all map instances and display them\n\t$( '.rwmb-map-canvas' ).each( displayMap );\n    \n    $( document ).on( 'mb_blocks_preview', function( e ) {\n        $( e.target )\n                .find( \".rwmb-map-canvas\" )\n                .each( displayMap );\n    } );    \n} )( jQuery, document );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/map.js",
    "content": "( function ( $, document, window, google, rwmb, i18n ) {\n\t'use strict';\n\n\t// Use function construction to store map & DOM elements separately for each instance\n\tvar MapField = function ( $container ) {\n\t\tthis.$container = $container;\n\t};\n\n\t// Geocoder service.\n\tvar geocoder = new google.maps.Geocoder();\n\t// Autocomplete Service.\n\tvar autocomplete = new google.maps.places.AutocompleteService();\n\t// Use prototype for better performance\n\tMapField.prototype = {\n\t\t// Initialize everything\n\t\tinit: function () {\n\t\t\tthis.initDomElements();\n\t\t\tthis.initMapElements();\n\n\t\t\tthis.initMarkerPosition();\n\t\t\tthis.addListeners();\n\t\t\tthis.autocomplete();\n\t\t},\n\n\t\t// Initialize DOM elements\n\t\tinitDomElements: function () {\n\t\t\tthis.$canvas = this.$container.find( '.rwmb-map-canvas' );\n\t\t\tthis.canvas = this.$canvas[ 0 ];\n\t\t\tthis.$coordinate = this.$container.find( '.rwmb-map' );\n\t\t\tthis.addressField = this.$container.data( 'address-field' );\n\t\t},\n\n\t\tsetCenter: function ( location ) {\n\t\t\tif ( !( location instanceof google.maps.LatLng ) ) {\n\t\t\t\tlocation = new google.maps.LatLng( parseFloat( location.lat ), parseFloat( location.lng ) );\n\t\t\t}\n\t\t\tthis.map.setCenter( location );\n\t\t\tif ( this.marker ) {\n\t\t\t\tthis.marker.setPosition( location );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.marker = new google.maps.Marker( {\n\t\t\t\tposition: location,\n\t\t\t\tmap: this.map,\n\t\t\t\tdraggable: this.$canvas.data( 'marker_draggable' ),\n\t\t\t} );\n\t\t},\n\n\t\tinitMapElements: function () {\n\t\t\tthis.map = new google.maps.Map( this.canvas, {\n\t\t\t\tzoom: 14,\n\t\t\t\tstreetViewControl: 0,\n\t\t\t\tmapTypeId: google.maps.MapTypeId.ROADMAP\n\t\t\t} );\n\n\t\t\t// If there is a saved location, don't set the default location.\n\t\t\tif ( this.$coordinate.val() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Load default location if it's set.\n\t\t\tlet defaultLoc = this.$canvas.data( 'default-loc' );\n\t\t\tif ( defaultLoc ) {\n\t\t\t\tconst [ lat, lng ] = defaultLoc.split( ',' );\n\t\t\t\treturn this.setCenter( { lat, lng } );\n\t\t\t}\n\n\t\t\t// Set default location to Dublin as a start.\n\t\t\tconst dublin = { lat: 53.346881, lng: -6.258860 };\n\t\t\tthis.setCenter( dublin );\n\n\t\t\t// Try to load current user location. Note that Geolocation API works only on HTTPS.\n\t\t\tif ( location.protocol.includes( 'https' ) && navigator.geolocation ) {\n\t\t\t\tnavigator.geolocation.getCurrentPosition( position => this.setCenter( { lat: position.coords.latitude, lng: position.coords.longitude } ) );\n\t\t\t}\n\t\t},\n\n\t\tinitMarkerPosition: function () {\n\t\t\tconst coordinate = this.$coordinate.val();\n\n\t\t\tif ( coordinate ) {\n\t\t\t\tconst location = coordinate.split( ',' );\n\t\t\t\tthis.setCenter( { lat: location[ 0 ], lng: location[ 1 ] } );\n\n\t\t\t\tconst zoom = location.length > 2 ? parseInt( location[ 2 ], 10 ) : 14;\n\t\t\t\tthis.map.setZoom( zoom );\n\t\t\t} else if ( this.addressField ) {\n\t\t\t\tthis.geocodeAddress( false );\n\t\t\t}\n\t\t},\n\n\t\t// Add event listeners for 'click' & 'drag'\n\t\taddListeners: function () {\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Auto change the map when there's change in address fields.\n\t\t\t * Works only for multiple address fields as single address field has autocomplete functionality.\n\t\t\t */\n\t\t\tif ( this.addressField.split( ',' ).length > 1 ) {\n\t\t\t\tvar geocodeAddress = that.geocodeAddress.bind( that );\n\t\t\t\tvar addressFields = this.addressField.split( ',' ).forEach( function ( part ) {\n\t\t\t\t\tvar $field = that.findAddressField( part );\n\t\t\t\t\tif ( null !== $field ) {\n\t\t\t\t\t\t$field.on( 'change', geocodeAddress );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tgoogle.maps.event.addListener( this.map, 'click', function ( event ) {\n\t\t\t\tthat.marker.setPosition( event.latLng );\n\t\t\t\tthat.updateCoordinate( event.latLng );\n\t\t\t} );\n\n\t\t\tgoogle.maps.event.addListener( this.map, 'zoom_changed', function ( event ) {\n\t\t\t\tthat.updateCoordinate( that.marker.getPosition() );\n\t\t\t} );\n\n\t\t\tgoogle.maps.event.addListener( this.marker, 'drag', function ( event ) {\n\t\t\t\tthat.updateCoordinate( event.latLng );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Custom event to refresh maps when in hidden divs.\n\t\t\t * @see https://developers.google.com/maps/documentation/javascript/reference ('resize' Event)\n\t\t\t */\n\t\t\tvar refresh = that.refresh.bind( this );\n\t\t\t$( window ).on( 'rwmb_map_refresh', refresh );\n\n\t\t\t// Refresh on meta box hide and show\n\t\t\trwmb.$document.on( 'postbox-toggled', refresh );\n\t\t\t// Refresh on sorting meta boxes\n\t\t\t$( '.meta-box-sortables' ).on( 'sortstop', refresh );\n\t\t},\n\n\t\trefresh: function () {\n\t\t\tif ( !this.map ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar zoom = this.map.getZoom(),\n\t\t\t\tcenter = this.map.getCenter();\n\n\t\t\tgoogle.maps.event.trigger( this.map, 'resize' );\n\t\t\tthis.map.setZoom( zoom );\n\t\t\tthis.map.panTo( center );\n\t\t},\n\n\t\t// Autocomplete address\n\t\tautocomplete: function () {\n\t\t\tvar that = this,\n\t\t\t\t$address = this.getAddressField();\n\n\t\t\tif ( null === $address ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If Meta Box Geo Location installed. Do not run autocomplete.\n\t\t\tif ( $( '.rwmb-geo-binding' ).length ) {\n\t\t\t\tvar geocodeAddress = that.geocodeAddress.bind( that );\n\t\t\t\t$address.on( 'selected_address', geocodeAddress );\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$address.autocomplete( {\n\t\t\t\tsource: function ( request, response ) {\n\t\t\t\t\t// if add region only search in that region\n\t\t\t\t\tvar options = {\n\t\t\t\t\t\t'input': request.term,\n\t\t\t\t\t\t'componentRestrictions': { country: that.$canvas.data( 'region' ) }\n\t\t\t\t\t};\n\t\t\t\t\t// Change Geocode to getPlacePredictions .\n\t\t\t\t\tautocomplete.getPlacePredictions( options, function ( results ) {\n\t\t\t\t\t\tif ( results == null || !results.length ) {\n\t\t\t\t\t\t\tresponse( [ {\n\t\t\t\t\t\t\t\tvalue: '',\n\t\t\t\t\t\t\t\tlabel: i18n.no_results_string\n\t\t\t\t\t\t\t} ] );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponse( results.map( function ( item ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tlabel: item.description,\n\t\t\t\t\t\t\t\tvalue: item.description,\n\t\t\t\t\t\t\t\tplaceid: item.place_id,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} ) );\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\tselect: function ( event, ui ) {\n\t\t\t\t\tgeocoder.geocode( {\n\t\t\t\t\t\t'placeId': ui.item.placeid\n\t\t\t\t\t},\n\t\t\t\t\t\tfunction ( responses, status ) {\n\t\t\t\t\t\t\tif ( status == 'OK' ) {\n\t\t\t\t\t\t\t\tconst latLng = new google.maps.LatLng( responses[ 0 ].geometry.location.lat(), responses[ 0 ].geometry.location.lng() );\n\t\t\t\t\t\t\t\tthat.setCenter( latLng );\n\t\t\t\t\t\t\t\tthat.updateCoordinate( latLng );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t// Update coordinate to input field\n\t\tupdateCoordinate: function ( latLng ) {\n\t\t\tvar zoom = this.map.getZoom();\n\t\t\tthis.$coordinate.val( latLng.lat() + ',' + latLng.lng() + ',' + zoom ).trigger( 'change' );\n\t\t},\n\n\t\t// Find coordinates by address\n\t\tgeocodeAddress: function ( notify ) {\n\t\t\tvar address = this.getAddress(),\n\t\t\t\tthat = this;\n\t\t\tif ( !address ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( false !== notify ) {\n\t\t\t\tnotify = true;\n\t\t\t}\n\t\t\tgeocoder.geocode( { 'address': address }, function ( results, status ) {\n\t\t\t\tif ( status !== google.maps.GeocoderStatus.OK ) {\n\t\t\t\t\tif ( notify ) {\n\t\t\t\t\t\talert( i18n.no_results_string );\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthat.setCenter( results[ 0 ].geometry.location );\n\t\t\t\tthat.updateCoordinate( results[ 0 ].geometry.location );\n\t\t\t} );\n\t\t},\n\n\t\t// Get the address field.\n\t\tgetAddressField: function () {\n\t\t\t// No address field or more than 1 address fields, ignore\n\t\t\tif ( !this.addressField || this.addressField.split( ',' ).length > 1 ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this.findAddressField( this.addressField );\n\t\t},\n\n\t\t// Get the address value for geocoding.\n\t\tgetAddress: function () {\n\t\t\tvar that = this;\n\n\t\t\treturn this.addressField.split( ',' )\n\t\t\t\t.map( function ( part ) {\n\t\t\t\t\tpart = that.findAddressField( part );\n\t\t\t\t\treturn null === part ? '' : part.val();\n\t\t\t\t} )\n\t\t\t\t.join( ',' ).replace( /\\n/g, ',' ).replace( /,,/g, ',' );\n\t\t},\n\n\t\t// Find address field based on its name attribute. Auto search inside groups when needed.\n\t\tfindAddressField: function ( fieldName ) {\n\t\t\tlet selector = `input[name=\"${ fieldName }\"], select[name=\"${ fieldName }\"]`;\n\n\t\t\t// Not in a group.\n\t\t\tlet $address = $( selector );\n\t\t\tif ( $address.length ) {\n\t\t\t\treturn $address;\n\t\t\t}\n\n\t\t\tlet $groupWrapper = this.$container.closest( '.rwmb-group-clone' );\n\t\t\tif ( ! $groupWrapper.length ) {\n\t\t\t\t$groupWrapper = this.$container.closest( '.rwmb-group-wrapper' );\n\t\t\t}\n\n\t\t\tif ( ! $groupWrapper.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tselector = `input[name*=\"${ fieldName }\"], select[name*=\"${ fieldName }\"]`;\n\n\t\t\t$address = $groupWrapper.find( selector );\n\t\t\tif ( $address.length ) {\n\t\t\t\treturn $address;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tfunction createController() {\n\t\tvar $this = $( this ),\n\t\t\tcontroller = $this.data( 'mapController' );\n\t\tif ( controller ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontroller = new MapField( $this );\n\t\tcontroller.init();\n\t\t$this.data( 'mapController', controller );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-map-field' ).each( createController );\n\t}\n\n\tfunction restart() {\n\t\t$( '.rwmb-map-field' ).each( createController );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-input', restart );\n} )( jQuery, document, window, google, rwmb, RWMB_Map );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/media.js",
    "content": "( function ( $, wp, _, rwmb, i18n ) {\n\t'use strict';\n\n\t/**\n\t * Mimic the wp.template() to be able to use with raw template string intead of a DOM element.\n\t * So it can be used in the iframed editor.\n\t *\n\t * @see https://codex.wordpress.org/Javascript_Reference/wp.template\n\t * @see https://core.trac.wordpress.org/browser/trunk/src/js/_enqueues/wp/util.js#L0\n\t */\n\trwmb.template = _.memoize( function ( template ) {\n\t\tlet compiled,\n\t\t\toptions = {\n\t\t\t\tevaluate: /<#([\\s\\S]+?)#>/g,\n\t\t\t\tinterpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n\t\t\t\tescape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n\t\t\t\tvariable: 'data'\n\t\t\t};\n\n\t\treturn function ( data ) {\n\t\t\tcompiled = compiled || _.template( template, options );\n\t\t\treturn compiled( data );\n\t\t};\n\t} );\n\n\tvar views = rwmb.views = rwmb.views || {},\n\t\tmodels = rwmb.models = rwmb.models || {},\n\t\tmedia = wp.media,\n\t\tMediaFrame = media.view.MediaFrame,\n\t\tMediaCollection, Controller, MediaField, MediaList, MediaItem, MediaButton, MediaStatus, EditMedia,\n\t\tMediaDetails, MediaLibrary, MediaSelect;\n\n\tMediaCollection = Backbone.Collection.extend( {\n\t\tmodel: wp.media.model.Attachment,\n\n\t\tinitialize: function ( models, options ) {\n\t\t\tthis.controller = options.controller || new models.Controller;\n\t\t\tthis.on( 'add remove reset', function () {\n\t\t\t\tvar max = this.controller.get( 'maxFiles' );\n\t\t\t\tthis.controller.set( 'length', this.length );\n\t\t\t\tthis.controller.set( 'full', max > 0 && this.length >= max );\n\t\t\t} );\n\t\t},\n\n\t\tadd: function ( models, options ) {\n\t\t\tvar max = this.controller.get( 'maxFiles' ),\n\t\t\t\tleft = max - this.length;\n\n\t\t\tif ( ! models || ( max > 0 && left <= 0 ) ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( ! models.hasOwnProperty( 'length' ) ) {\n\t\t\t\tmodels = [models];\n\t\t\t} else if ( models instanceof media.model.Attachments ) {\n\t\t\t\tmodels = models.models;\n\t\t\t}\n\n\t\t\tmodels = _.difference( models, this.models );\n\t\t\tif ( left > 0 ) {\n\t\t\t\tmodels = _.first( models, left );\n\t\t\t}\n\n\t\t\tBackbone.Collection.prototype.add.call( this, models, options );\n\t\t},\n\n\t\tremove: function ( models, options ) {\n\t\t\t// Don't remove models if event is not fired from MB plugin.\n\t\t\tif( ! $( event.target ).closest( '.rwmb-field, [data-class=\"rwmb-field\"]' ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodels = Backbone.Collection.prototype.remove.call( this, models, options );\n\t\t\tif ( this.controller.get( 'forceDelete' ) === true ) {\n\t\t\t\tmodels = ! _.isArray( models ) ? [models] : models;\n\t\t\t\t_.each( models, function ( model ) {\n\t\t\t\t\tmodel.destroy();\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tdestroyAll: function () {\n\t\t\t_.each( _.clone( this.models ), function ( model ) {\n\t\t\t\tmodel.destroy();\n\t\t\t} );\n\t\t}\n\t} );\n\n\t/***\n\t * Controller Model\n\t * Manages data of media field and media models.  Most of the media views will use this to manage the media\n\t */\n\tController = models.Controller = Backbone.Model.extend( {\n\t\t//Default options\n\t\tdefaults: {\n\t\t\tmaxFiles: 0,\n\t\t\tids: [],\n\t\t\tmimeType: '',\n\t\t\tforceDelete: false,\n\t\t\tmaxStatus: true,\n\t\t\tlength: 0\n\t\t},\n\n\t\t//Initialize Controller model\n\t\tinitialize: function () {\n\t\t\t// All numbers, no 0 ids\n\t\t\tthis.set( 'ids', _.without( _.map( this.get( 'ids' ), Number ), 0, - 1 ) );\n\n\t\t\t// Create items collection\n\t\t\tthis.set( 'items', new MediaCollection( [], {controller: this} ) );\n\n\t\t\t// Listen for destroy event on controller, delete all models when triggered\n\t\t\tthis.on( 'destroy', function () {\n\t\t\t\tif ( this.get( 'forceDelete' ) ) {\n\t\t\t\t\tthis.get( 'items' ).destroyAll();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\t/***\n\t * MediaField\n\t * Sets up media field view and subviews\n\t */\n\tMediaField = views.MediaField = Backbone.View.extend( {\n\t\tclassName: 'rwmb-media-view',\n\t\tinitialize: function ( options ) {\n\t\t\tvar that = this,\n\t\t\t\tfieldName = options.input.name;\n\t\t\tthis.$input = $( options.input );\n\n\t\t\tif ( 1 != this.$input.attr( 'data-single-image' ) ) {\n\t\t\t\tfieldName += '[]';\n\t\t\t}\n\n\t\t\tthis.controller = new Controller( _.extend(\n\t\t\t\t{\n\t\t\t\t\tfieldName: fieldName,\n\t\t\t\t\tids: this.$input.val().split( ',' )\n\t\t\t\t},\n\t\t\t\tthis.$input.data( 'options' )\n\t\t\t) );\n\n\t\t\t// Create views\n\t\t\tthis.createList();\n\t\t\tthis.createAddButton();\n\t\t\tthis.createStatus();\n\n\t\t\tthis.render();\n\t\t\tthis.loadInitialAttachments();\n\n\t\t\t// Listen for destroy event on input\n\t\t\tthis.$input.on( 'remove', function () {\n\t\t\t\tthat.controller.destroy();\n\t\t\t} );\n\n\t\t\tvar collection = this.controller.get( 'items' );\n\t\t\tthis.$input.on( 'media:reset', function() {\n\t\t\t\tcollection.reset();\n\t\t\t} );\n\n\t\t\tcollection.on( 'all', _.debounce( function() {\n\t\t\t\tvar ids = collection.pluck( 'id' ).join( ',' );\n\t\t\t\tthat.$input.val( ids ).trigger( 'change', [that.$( '.rwmb-media-input' )] );\n\t\t\t}, 500 ) );\n\t\t},\n\n\t\tloadInitialAttachments: function () {\n\t\t\tif ( ! this.$input.val() ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet items = $( '<div>' ).html( this.$input.attr( 'data-attachments' ) ).text(),\n\t\t\t\tmodels = JSON.parse( items ).map( function( attachment ) {\n\t\t\t\t\treturn wp.media.model.Attachment.create( attachment );\n\t\t\t\t} );\n\t\t\tthis.controller.get( 'items' ).add( models );\n\t\t},\n\n\t\t// Creates media list\n\t\tcreateList: function () {\n\t\t\tthis.list = new MediaList( {controller: this.controller} );\n\t\t},\n\n\t\t// Creates button that adds media\n\t\tcreateAddButton: function () {\n\t\t\tthis.addButton = new MediaButton( {controller: this.controller} );\n\t\t},\n\n\t\t// Creates status\n\t\tcreateStatus: function () {\n\t\t\tthis.status = new MediaStatus( {controller: this.controller} );\n\t\t},\n\n\t\t// Render field and adds sub fields\n\t\trender: function () {\n\t\t\t// Empty then add parts\n\t\t\tthis.$el.empty().append(\n\t\t\t\tthis.list.el,\n\t\t\t\tthis.status.el,\n\t\t\t\tthis.addButton.el\n\t\t\t);\n\t\t}\n\t} );\n\n\t/***\n\t * Media List\n\t * lists media\n\t */\n\tMediaList = views.MediaList = Backbone.View.extend( {\n\t\ttagName: 'ul',\n\t\tclassName: 'rwmb-media-list',\n\n\t\tinitialize: function ( options ) {\n\t\t\tthis.controller = options.controller;\n\t\t\tthis.collection = this.controller.get( 'items' );\n\t\t\tthis.itemView = options.itemView || MediaItem;\n\t\t\tthis.getItemView = _.memoize( function ( item ) {\n\t\t\t\tvar itemView = new this.itemView( {\n\t\t\t\t\tmodel: item,\n\t\t\t\t\tcontroller: this.controller\n\t\t\t\t} );\n\n\t\t\t\tthis.listenToItemView( itemView );\n\n\t\t\t\treturn itemView;\n\t\t\t},\n\t\t\t\tfunction ( item ) {\n\t\t\t\t\treturn item.cid;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.listenTo( this.collection, 'add', this.addItemView );\n\t\t\tthis.listenTo( this.collection, 'remove', this.removeItemView );\n\t\t\tthis.listenTo( this.collection, 'reset', this.resetItemViews );\n\n\t\t\t// Sort items using helper 'clone' to prevent trigger click on the image, which means reselect.\n\t\t\tthis.$el.sortable( {\n\t\t\t\thelper : 'clone',\n\t\t\t\tstart: function ( event, ui ) {\n\t\t\t\t\tui.placeholder.height( ui.helper.outerHeight() );\n\t\t\t\t\tui.placeholder.width( ui.helper.outerWidth() );\n\t\t\t\t},\n\t\t\t\tupdate: function( event, ui ) {\n\t\t\t\t\tui.item.find( rwmb.inputSelectors ).first().trigger( 'mb_change' );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\tlistenToItemView: function ( itemView ) {\n\t\t\tthis.listenTo( itemView, 'click:remove', this.removeItem );\n\t\t\tthis.listenTo( itemView, 'click:switch', this.switchItem );\n\t\t\tthis.listenTo( itemView, 'click:edit', this.editItem );\n\t\t},\n\n\t\taddItemView: function ( item ) {\n\t\t\tvar index = this.collection.indexOf( item ),\n\t\t\t\titemEl = this.getItemView( item ).el,\n\t\t\t\t$children = this.$el.children();\n\n\t\t\tif ( 0 >= index ) {\n\t\t\t\tthis.$el.prepend( itemEl );\n\t\t\t} else if ( $children.length <= index ) {\n\t\t\t\tthis.$el.append( itemEl )\n\t\t\t} else {\n\t\t\t\t$children.eq( index - 1 ).after( itemEl );\n\t\t\t}\n\t\t},\n\n\t\t// Remove item view\n\t\tremoveItemView: function ( item ) {\n\t\t\tthis.getItemView( item ).$el.detach();\n\t\t},\n\n\t\tremoveItem: function ( item ) {\n\t\t\tthis.collection.remove( item );\n\t\t},\n\n\t\tresetItemViews: function( items ){\n\t\t\tvar that = this;\n\t\t\t_.each( that.models, that.removeItemView );\n\t\t\titems.each( that.addItemView );\n\t\t},\n\n\t\tswitchItem: function ( item ) {\n\t\t\tif ( this._switchFrame ) {\n\t\t\t\tthis._switchFrame.dispose();\n\t\t\t}\n\t\t\tthis._switchFrame = new MediaSelect( {\n\t\t\t\tmultiple: false,\n\t\t\t\tediting: true,\n\t\t\t\tlibrary: {\n\t\t\t\t\ttype: this.controller.get( 'mimeType' )\n\t\t\t\t},\n\t\t\t\tedit: this.collection\n\t\t\t} );\n\n\t\t\t// Refresh content when frame opens\n\t\t\tthis._switchFrame.on( 'open', function() {\n\t\t\t\tvar frameContent = this._switchFrame.content.get();\n\t\t\t\tif ( frameContent && frameContent.collection ) {\n\t\t\t\t\tframeContent.collection.mirroring._hasMore = true;\n\t\t\t\t\tframeContent.collection.more();\n\t\t\t\t}\n\t\t\t}, this );\n\n\t\t\tthis._switchFrame.on( 'select', function () {\n\t\t\t\tvar selection = this._switchFrame.state().get( 'selection' ),\n\t\t\t\t\tcollection = this.collection,\n\t\t\t\t\tindex = collection.indexOf( item );\n\n\t\t\t\tif ( ! _.isEmpty( selection ) ) {\n\t\t\t\t\tcollection.remove( item );\n\t\t\t\t\tcollection.add( selection, {at: index} );\n\t\t\t\t}\n\t\t\t}, this );\n\n\t\t\tthis._switchFrame.open();\n\t\t\treturn false;\n\t\t},\n\n\t\teditItem: function ( item ) {\n\t\t\tif ( this._editFrame ) {\n\t\t\t\tthis._editFrame.dispose();\n\t\t\t}\n\n\t\t\t// Trigger the media frame to open the correct item.\n\t\t\tthis._editFrame = new EditMedia( {\n\t\t\t\tframe: 'edit-attachments',\n\t\t\t\tcontroller: {\n\t\t\t\t\tgridRouter: new wp.media.view.MediaFrame.Manage.Router()\n\t\t\t\t},\n\t\t\t\tlibrary: this.collection,\n\t\t\t\tmodel: item\n\t\t\t} );\n\n\t\t\tthis._editFrame.open();\n\t\t}\n\t} );\n\n\t/***\n\t * MediaStatus view.\n\t * Show number of selected/uploaded files and number of files remain if \"maxStatus\" parameter is true.\n\t */\n\tMediaStatus = views.MediaStatus = Backbone.View.extend( {\n\t\ttagName: 'div',\n\t\tclassName: 'rwmb-media-status',\n\t\ttemplate: rwmb.template( `\n\t\t\t<# if ( data.maxFiles > 0 ) { #>\n\t\t\t\t{{{ data.length }}}/{{{ data.maxFiles }}}\n\t\t\t\t<# if ( 1 < data.maxFiles ) { #>{{{ i18nRwmbMedia.multiple }}}<# } else {#>{{{ i18nRwmbMedia.single }}}<# } #>\n\t\t\t<# } #>\n\t\t` ),\n\n\t\tinitialize: function ( options ) {\n\t\t\tthis.controller = options.controller;\n\n\t\t\t// Auto hide if maxStatus is false\n\t\t\tif ( ! this.controller.get( 'maxStatus' ) ) {\n\t\t\t\tthis.$el.hide();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Re-render if changes happen in controller\n\t\t\tthis.listenTo( this.controller.get( 'items' ), 'update', this.render );\n\t\t\tthis.listenTo( this.controller.get( 'items' ), 'reset', this.render );\n\n\t\t\t// Render\n\t\t\tthis.render();\n\t\t},\n\n\t\trender: function () {\n\t\t\tthis.$el.html( this.template( this.controller.toJSON() ) );\n\t\t}\n\t} );\n\n\t/***\n\t * Media Button\n\t * Selects and adds media to controller\n\t */\n\tMediaButton = views.MediaButton = Backbone.View.extend( {\n\t\ttagName: 'div',\n\t\tclassName: 'rwmb-media-add',\n\t\ttemplate: rwmb.template( `<a class=\"button\">{{{ data.text }}}</a>` ),\n\t\tevents: {\n\t\t\t'click .button': function () {\n\t\t\t\tif ( this._frame ) {\n\t\t\t\t\tthis._frame.dispose();\n\t\t\t\t}\n\t\t\t\tvar maxFiles = this.controller.get( 'maxFiles' );\n\t\t\t\tthis._frame = new MediaSelect( {\n\t\t\t\t\tmultiple: maxFiles > 1 || maxFiles <= 0 ? 'add' : false,\n\t\t\t\t\tediting: true,\n\t\t\t\t\tlibrary: {\n\t\t\t\t\t\ttype: this.controller.get( 'mimeType' )\n\t\t\t\t\t},\n\t\t\t\t\tedit: this.collection\n\t\t\t\t} );\n\n\t\t\t\t// Refresh content when frame opens\n\t\t\t\tthis._frame.on( 'open', function() {\n\t\t\t\t\tvar frameContent = this._frame.content.get();\n\t\t\t\t\tif ( frameContent && frameContent.collection ) {\n\t\t\t\t\t\tframeContent.collection.mirroring._hasMore = true;\n\t\t\t\t\t\tframeContent.collection.more();\n\t\t\t\t\t}\n\t\t\t\t}, this );\n\n\t\t\t\tthis._frame.on( 'select', function () {\n\t\t\t\t\tvar selection = this._frame.state().get( 'selection' );\n\t\t\t\t\tif ( this.controller.get( 'addTo' ) === 'beginning' ) {\n\t\t\t\t\t\tthis.collection.add( selection.models, {at: 0} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.collection.add( selection.models );\n\t\t\t\t\t}\n\t\t\t\t}, this );\n\n\t\t\t\tthis._frame.open();\n\t\t\t}\n\t\t},\n\t\trender: function () {\n\t\t\tthis.$el.html( this.template( {text: i18n.add} ) );\n\t\t\treturn this;\n\t\t},\n\n\t\tinitialize: function ( options ) {\n\t\t\tthis.controller = options.controller;\n\t\t\tthis.collection = this.controller.get( 'items' );\n\n\t\t\t// Auto hide if you reach the max number of media\n\t\t\tthis.listenTo( this.controller, 'change:full', function () {\n\t\t\t\tthis.$el.toggle( ! this.controller.get( 'full' ) );\n\t\t\t} );\n\n\t\t\tthis.render();\n\t\t}\n\t} );\n\n\t/***\n\t * MediaItem\n\t * View for individual media items\n\t */\n\tMediaItem = views.MediaItem = Backbone.View.extend( {\n\t\ttagName: 'li',\n\t\tclassName: 'rwmb-file',\n\t\ttemplate: rwmb.template( `\n\t\t\t<input type=\"hidden\" name=\"{{{ data.controller.fieldName }}}\" value=\"{{{ data.id }}}\" class=\"rwmb-media-input\">\n\t\t\t<div class=\"rwmb-file-icon\">\n\t\t\t\t<# if ( data.sizes ) { #>\n\t\t\t\t\t<# if ( data.sizes.thumbnail ) { #>\n\t\t\t\t\t\t<img src=\"{{{ data.sizes.thumbnail.url }}}\">\n\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t<img src=\"{{{ data.sizes.full.url }}}\">\n\t\t\t\t\t<# } #>\n\t\t\t\t<# } else { #>\n\t\t\t\t\t<# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>\n\t\t\t\t\t\t<img src=\"{{ data.image.src }}\" />\n\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t<img src=\"{{ data.icon }}\" />\n\t\t\t\t\t<# } #>\n\t\t\t\t<# } #>\n\t\t\t</div>\n\t\t\t<div class=\"rwmb-file-info\">\n\t\t\t\t<a href=\"{{{ data.url }}}\" class=\"rwmb-file-title\" target=\"_blank\">\n\t\t\t\t\t<# if( data.title ) { #>\n\t\t\t\t\t\t{{{ data.title }}}\n\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t{{{ i18nRwmbMedia.noTitle }}}\n\t\t\t\t\t<# } #>\n\t\t\t\t</a>\n\t\t\t\t<div class=\"rwmb-file-name\">{{{ data.filename }}}</div>\n\t\t\t\t<div class=\"rwmb-file-actions\">\n\t\t\t\t\t<a class=\"rwmb-edit-media\" title=\"{{{ i18nRwmbMedia.edit }}}\" href=\"{{{ data.editLink }}}\" target=\"_blank\">\n\t\t\t\t\t\t{{{ i18nRwmbMedia.edit }}}\n\t\t\t\t\t</a>\n\t\t\t\t\t<# if( data.file ) { #>\n\t\t\t\t\t<a href=\"#\" class=\"rwmb-remove-media\" data-file_id=\"{{{ data.file.id }}}\" title=\"{{{ i18nRwmbMedia.remove }}}\">\n\t\t\t\t\t\t{{{ i18nRwmbMedia.remove }}}\n\t\t\t\t\t</a>\n\t\t\t\t\t<# } else { #>\n\t\t\t\t\t<a href=\"#\" class=\"rwmb-remove-media\" title=\"{{{ i18nRwmbMedia.remove }}}\">\n\t\t\t\t\t\t{{{ i18nRwmbMedia.remove }}}\n\t\t\t\t\t</a>\n\t\t\t\t\t<# } #>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t` ),\n\t\tinitialize: function ( options ) {\n\t\t\tthis.controller = options.controller;\n\t\t\tthis.collection = this.controller.get( 'items' );\n\t\t\tthis.render();\n\t\t\tthis.listenTo( this.model, 'change', this.render );\n\n\t\t\tthis.$el.data( 'id', this.model.cid );\n\t\t},\n\n\t\tevents: {\n\t\t\t'click .rwmb-image-overlay': function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.trigger( 'click:switch', this.model );\n\t\t\t},\n\t\t\t'click .rwmb-remove-media': function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.trigger( 'click:remove', this.model );\n\t\t\t},\n\t\t\t'click .rwmb-edit-media': function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.trigger( 'click:edit', this.model );\n\t\t\t}\n\t\t},\n\n\t\trender: function () {\n\t\t\tvar data = this.model.toJSON();\n\t\t\tdata.controller = this.controller.toJSON();\n\t\t\tthis.$el.html( this.template( data ) );\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\t/**\n\t * Extend media frames to make things work right\n\t */\n\n\t/**\n\t * MediaDetails\n\t * Custom version of TwoColumn view to prevent all video and audio from being unset\n\t */\n\tMediaDetails = views.MediaDetails = media.view.Attachment.Details.TwoColumn.extend( {\n\t\trender: function () {\n\t\t\tvar that = this;\n\t\t\tmedia.view.Attachment.Details.prototype.render.apply( this, arguments );\n\t\t\tthis.players = this.players || [];\n\n\t\t\tmedia.mixin.unsetPlayers.call( this );\n\n\t\t\tthis.$( 'audio, video' ).each( function ( i, elem ) {\n\t\t\t\tvar el = media.view.MediaDetails.prepareSrc( elem );\n\t\t\t\tthat.players.push( new window.MediaElementPlayer( el, media.mixin.mejsSettings ) );\n\t\t\t} );\n\t\t}\n\t} );\n\n\t/**\n\t * MediaLibrary\n\t * Custom version of Library to exclude already selected media in a media frame\n\t */\n\tMediaLibrary = media.controller.Library.extend( {\n\t\tdefaults: _.defaults( {\n\t\t\tmultiple: 'add',\n\t\t\tfilterable: 'all',\n\t\t\tpriority: 100,\n\t\t\tsyncSelection: false\n\t\t}, media.controller.Library.prototype.defaults ),\n\n\t\tactivate: function () {\n\t\t\tvar library = this.get( 'library' ),\n\t\t\t\tedit = this.frame.options.edit;\n\n\t\t\tif ( this.editLibrary && this.editLibrary !== edit ) {\n\t\t\t\tlibrary.unobserve( this.editLibrary );\n\t\t\t}\n\n\t\t\t// Accepts attachments that exist in the original library and\n\t\t\t// that do not exist in gallery's library.\n\t\t\tlibrary.validator = function ( attachment ) {\n\t\t\t\treturn ! ! this.mirroring.get( attachment.cid ) && ! edit.get( attachment.cid ) && media.model.Selection.prototype.validator.apply( this, arguments );\n\t\t\t};\n\n\t\t\t// Reset the library to ensure that all attachments are re-added\n\t\t\t// to the collection. Do so silently, as calling `observe` will\n\t\t\t// trigger the `reset` event.\n\t\t\tlibrary.reset( library.mirroring.models, {silent: true} );\n\t\t\tlibrary.observe( edit );\n\t\t\tthis.editLibrary = edit;\n\n\t\t\tmedia.controller.Library.prototype.activate.apply( this, arguments );\n\t\t}\n\t} );\n\n\t/**\n\t * MediaSelect\n\t * Custom version of Select media frame that uses  MediaLibrary\n\t */\n\tMediaSelect = views.MediaSelect = MediaFrame.Select.extend( {\n\t\t/**\n\t\t * Create the default states on the frame.\n\t\t */\n\t\tcreateStates: function () {\n\t\t\tvar options = this.options;\n\n\t\t\t// Add reference so we know MediaFrame belongs to MB plugin.\n\t\t\tthis.$el.attr( 'data-class', 'rwmb-field' );\n\n\t\t\tif ( this.options.states ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Add the default states.\n\t\t\tthis.states.add( [\n\t\t\t\t// Main states.\n\t\t\t\tnew MediaLibrary( {\n\t\t\t\t\tlibrary: media.query( options.library ),\n\t\t\t\t\tmultiple: options.multiple,\n\t\t\t\t\tpriority: 20\n\t\t\t\t} )\n\t\t\t] );\n\t\t}\n\t} );\n\n\t/***\n\t * EditMedia\n\t * Custom version of EditAttachments frame to prevent all video and audio from being unset\n\t */\n\tEditMedia = views.EditMedia = MediaFrame.EditAttachments.extend( {\n\t\t/**\n\t\t * Content region rendering callback for the `edit-metadata` mode.\n\t\t *\n\t\t * @param {Object} contentRegion Basic object with a `view` property, which\n\t\t *                               should be set with the proper region view.\n\t\t */\n\t\teditMetadataMode: function ( contentRegion ) {\n\t\t\tcontentRegion.view = new MediaDetails( {\n\t\t\t\tcontroller: this,\n\t\t\t\tmodel: this.model\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Attach a subview to display fields added via the\n\t\t\t * `attachment_fields_to_edit` filter.\n\t\t\t */\n\t\t\tcontentRegion.view.views.set( '.attachment-compat', new media.view.AttachmentCompat( {\n\t\t\t\tcontroller: this,\n\t\t\t\tmodel: this.model\n\t\t\t} ) );\n\t\t},\n\t\tresetRoute: function() {}\n\t} );\n\n\tfunction initMediaField() {\n\t\tvar $this = $( this ),\n\t\t\tview = $this.data( 'view' );\n\n\t\tif ( view ) {\n\t\t\treturn;\n\t\t}\n\n\t\tview = new MediaField( { input: this } );\n\n\t\t$this.siblings( '.rwmb-media-view' ).remove();\n\t\t$this.after( view.el );\n\t\t$this.data( 'view', view );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-file_advanced' ).each( initMediaField );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-file_advanced', initMediaField );\n\n\twp?.hooks?.addAction( 'mb_ready', 'meta-box/ready/media', ref => {\n\t\tinit( { target: ref } );\n\t} );\n} )( jQuery, wp, _, rwmb, i18nRwmbMedia );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/modal.js",
    "content": "( $ => {\n\t'use strict';\n    \n    const $body = $( 'body' );\n\n\tconst defaultOptions = {\n\t\twrapper: `<div class=\"rwmb-modal\">\n\t\t\t<header class=\"rwmb-modal-title\">\n\t\t\t\t<h2></h2>\n\t\t\t\t<button type=\"button\" class=\"rwmb-modal-close\">&times;</button>\n\t\t\t</header>\n\t\t\t<div class=\"rwmb-modal-content\"></div>\n\t\t</div>`,\n\t\tmarkupIframe: '<iframe id=\"rwmb-modal-iframe\" width=\"100%\" height=\"700\" src=\"{URL}\" border=\"0\"></iframe>',\n        markupOverlay: '<div class=\"rwmb-modal-overlay\"></div>',\n\t\thideElement: '',\n\t\thideElementDefault: '#adminmenumain, #wpadminbar, #wpfooter, .row-actions, .form-wrap.edit-term-notes, #screen-meta-links, .wp-heading-inline, .wp-header-end, .page-title-action',\n\t\tcallback: null,\n\t\tcloseModalCallback: null,\n\t\tisBlockEditor: false,\n\t\t$objectId: null,\n\t\t$objectDisplay: null,\n        isEdit: false,\n        size: 'large',\n\t};\n\n\t$.fn.rwmbModal = function ( options = {} ) {\n\t\toptions = {\n\t\t\t...defaultOptions,\n\t\t\t...options\n\t\t};\n\n\t\tif ( $( '.rwmb-modal' ).length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// $this is the button that opens the modal\n\t\tconst $this = $( this ),\n\t\t\t$modal = $( '.rwmb-modal' );\n\n\t\tlet $input = $this.closest( '.rwmb-input' );\n\t\tif ( $input.find( '.rwmb-clone' ).length > 0 && $this.closest( '.rwmb-clone' ).length > 0 ) {\n\t\t\t$input = $this.closest( '.rwmb-clone' );\n\t\t}\n\n\t\t$this.click( function ( e ) {\n\t\t\te.preventDefault();\n            $modal.attr( 'size', options.size );\n\t\t\t$modal.find( '.rwmb-modal-title h2' ).html( $this.html() );\n\t\t\t$modal.find( '.rwmb-modal-content' ).html( options.markupIframe.replace( '{URL}', $this.attr( 'data-url' ) ) );\n\n\t\t\t$( '#rwmb-modal-iframe' ).on( 'load', function () {\n\t\t\t\tconst $contents = $( this ).contents();\n\t\t\t\toptions.isBlockEditor = $contents.find( 'body' ).hasClass( 'block-editor-page' );\n\n\t\t\t\t$contents.find( options.hideElement ).hide();\n\n\t\t\t\t$modal.find( '.rwmb-modal-title' ).css( 'background-color', '' );\n\t\t\t\tif ( options.isBlockEditor ) {\n\t\t\t\t\t$modal.find( '.rwmb-modal-title' ).css( 'background-color', '#fff' );\n\t\t\t\t}\n\n\t\t\t\t$contents\n\t\t\t\t\t.find( options.hideElementDefault ).hide().end()\n\t\t\t\t\t.find( '.rwmb-modal-add-button' ).parents('.rwmb-field').hide();\n\t\t\t\t$contents.find( 'html' ).css( 'padding-top', 0 ).end()\n\t\t\t\t\t.find( '#wpcontent' ).css( 'margin-left', 0 ).end()\n\t\t\t\t\t.find( 'a' ).on( 'click', e => e.preventDefault() );\n\n\t\t\t\tif ( options.callback !== null && typeof options.callback === 'function' ) {\n\t\t\t\t\toptions.callback( $modal, $contents );\n\t\t\t\t}\n\n                $body.addClass( 'rwmb-modal-show' );\n\t\t\t\t$( '.rwmb-modal-overlay' ).fadeIn( 'medium' ).css( 'display', 'flex' );\n\t\t\t\t$modal.fadeIn( 'medium' ).css( 'display', 'flex' );\n\n\t\t\t\treturn false;\n\t\t\t} );\n\n\t\t\t$( '.rwmb-modal-close' ).on( 'click', function ( event ) {\n\t\t\t\tif ( options.closeModalCallback !== null && typeof options.closeModalCallback === 'function' ) {\n\t\t\t\t\toptions.closeModalCallback( $( '#rwmb-modal-iframe' ).contents(), $input );\n\t\t\t\t}\n\n                $modal.fadeOut( 'medium' );\n\t\t\t\t$( '.rwmb-modal-overlay' ).fadeOut( 'medium' );\n\t\t\t\t$body.removeClass( 'rwmb-modal-show' );\n\n\t\t\t\t// If not add new\n\t\t\t\tif ( !options.$objectId || !options.$objectDisplay ) {\n\t\t\t\t\t$( this ).off( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Select, select advanced, select tree.\n\t\t\t\tconst $select = $input.find( 'select' );\n\t\t\t\tif ( $select.length > 0 ) {\n\t\t\t\t\t$select.prepend( $( '<option>', {\n\t\t\t\t\t\tvalue: options.$objectId,\n\t\t\t\t\t\ttext: options.$objectDisplay,\n\t\t\t\t\t\tselected: true\n\t\t\t\t\t} ) );\n\n\t\t\t\t\t$( this ).off( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Radio, checkbox list, checkbox tree\n\t\t\t\tconst $inputList = $input.find( '.rwmb-input-list:first' ),\n\t\t\t\t\t$labelClone = $inputList.find( '> label:first' ).clone(),\n\t\t\t\t\t$inputClone = $labelClone.find( 'input' ).clone();\n\n\t\t\t\t$labelClone.html(\n\t\t\t\t\t$inputClone.val( options.$objectId )\n\t\t\t\t\t\t.attr( 'checked', true )\n\t\t\t\t\t\t.prop( 'outerHTML' ) + options.$objectDisplay\n\t\t\t\t);\n\t\t\t\t$inputList.prepend( $labelClone );\n\n\t\t\t\t// Clear event after close modal.\n\t\t\t\toptions.$objectId = null;\n\t\t\t\toptions.$objectDisplay = null;\n\t\t\t\t$( this ).off( event );\n\t\t\t});\n\t\t} );\n\t};\n\n\tif ( $( '.rwmb-modal' ).length === 0 ) {\n\t\t$body.append( defaultOptions.wrapper )\n\t\t\t.append( defaultOptions.markupOverlay );\n\t}\n\n} )( jQuery );"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/oembed.js",
    "content": "( function ( $, _, rwmb ) {\n\t'use strict';\n\n\t/**\n\t * Show preview of oembeded media.\n\t */\n\tfunction showPreview( e ) {\n\t\te.preventDefault();\n\n\t\tvar $this = $( this ),\n\t\t\t$spinner = $this.siblings( '.spinner' ),\n\t\t\tdata = {\n\t\t\t\taction: 'rwmb_get_embed',\n\t\t\t\turl: this.value,\n\t\t\t\t_ajax_nonce: rwmbOembed.nonce,\n\t\t\t\tnot_available: $this.data( 'not-available' ),\n\t\t\t};\n\n\t\t$spinner.css( 'visibility', 'visible' );\n\t\t$.post( ajaxurl, data, function ( response ) {\n\t\t\t$spinner.css( 'visibility', 'hidden' );\n\t\t\t$this.siblings( '.rwmb-embed-media' ).html( response.data );\n\t\t}, 'json' );\n\t}\n\n\t/**\n\t * Remove oembed preview when cloning.\n\t */\n\tfunction removePreview() {\n\t\t$( this ).siblings( '.rwmb-embed-media' ).html( '' );\n\t}\n\n\trwmb.$document\n\t\t.on( 'change', '.rwmb-oembed', _.debounce( showPreview, 250 ) )\n\t    .on( 'clone', '.rwmb-oembed', removePreview );\n} )( jQuery, _, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/osm-frontend.js",
    "content": "jQuery( function ( $ ) {\n\t'use strict';\n\n\t/**\n\t * Display Open Street Map\n\t */\n\tfunction displayMap() {\n\t\tvar osmTileLayer = L.tileLayer( 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n\t\t\tattribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n\t\t} );\n\t\tvar options = $( this ).data( 'osm_options' ),\n\t\t\tmapOptions = options.js_options,\n\t\t\tcenter = L.latLng( options.latitude, options.longitude ),\n\t\t\tmap;\n\n\t\tmapOptions.center = center;\n\n\t\t// Typecast zoom to a number\n\t\tmapOptions.zoom *= 1;\n\n\t\tmapOptions.gestureHandling = true;\n\t\tmap = L.map( this, mapOptions );\n\t\tmap.addLayer( osmTileLayer );\n\n\t\t// Set marker\n\t\tif ( options.marker ) {\n\t\t\tvar markerOptions = {};\n\n\t\t\t// Set marker title\n\t\t\tif ( options.marker_title ) {\n\t\t\t\tmarkerOptions.title = options.marker_title;\n\t\t\t}\n\n\t\t\t// Set marker icon\n\t\t\tif ( options.marker_icon ) {\n\t\t\t\tmarkerOptions.icon = L.icon( {\n\t\t\t\t\ticonUrl: options.marker_icon\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tvar marker = L.marker( center, markerOptions ).addTo( map );\n\t\t}\n\n\t\t// Set info window\n\t\tif ( options.info_window ) {\n\t\t\tmarker.bindPopup( options.info_window ).openPopup();\n\t\t}\n\t}\n\n\t// Loop through all map instances and display them\n\t$( '.rwmb-osm-canvas' ).each( displayMap );\n} );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/osm.js",
    "content": "( function ( $, L, rwmb, i18n ) {\n\t'use strict';\n\n\t// Use function construction to store map & DOM elements separately for each instance\n\tvar OsmField = function ( $container ) {\n\t\tthis.$container = $container;\n\t};\n\n\t// Use prototype for better performance\n\tOsmField.prototype = {\n\t\t// Initialize everything\n\t\tinit: function () {\n\t\t\tthis.initDomElements();\n\t\t\tthis.initMapElements();\n\n\t\t\tthis.initMarkerPosition();\n\t\t\tthis.addListeners();\n\t\t\tthis.autocomplete();\n\n\t\t\t// Make sure the map is displayed fully.\n\t\t\tvar map = this.map;\n\t\t\tsetTimeout( function () {\n\t\t\t\tmap.invalidateSize();\n\t\t\t}, 100 );\n\t\t},\n\n\t\t// Initialize DOM elements\n\t\tinitDomElements: function () {\n\t\t\tthis.$canvas = this.$container.find( '.rwmb-osm-canvas' );\n\t\t\tthis.canvas = this.$canvas[ 0 ];\n\t\t\tthis.$coordinate = this.$container.find( '.rwmb-osm' );\n\t\t\tthis.addressField = this.$container.data( 'address-field' );\n\t\t},\n\n\t\tsetCenter: function ( location ) {\n\t\t\tthis.map.panTo( location );\n\t\t\tif ( this.marker ) {\n\t\t\t\tthis.marker.setLatLng( location );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.marker = L.marker( location, {\n\t\t\t\tdraggable: this.$canvas.data( 'marker_draggable' ),\n\t\t\t} ).addTo( this.map );\n\t\t},\n\n\t\tinitMapElements: function () {\n\t\t\tthis.map = L.map( this.canvas, { zoom: 14, gestureHandling: true } );\n\t\t\tL.tileLayer( 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n\t\t\t\tattribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n\t\t\t} ).addTo( this.map );\n\n\t\t\t// If there is a saved location, don't set the default location.\n\t\t\tif ( this.$coordinate.val() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Load default location if it's set.\n\t\t\tconst defaultLoc = this.$canvas.data( 'default-loc' );\n\t\t\tif ( defaultLoc ) {\n\t\t\t\treturn this.setCenter( defaultLoc.split( ',' ) );\n\t\t\t}\n\n\t\t\t// Set default location to Dublin as a start.\n\t\t\tconst dublin = [ 53.346881, -6.258860 ];\n\t\t\tthis.setCenter( dublin );\n\n\t\t\t// Try to load current user location. Note that Geolocation API works only on HTTPS.\n\t\t\tif ( location.protocol.includes( 'https' ) && navigator.geolocation ) {\n\t\t\t\tthis.map.locate( { setView: true } ).on( 'locationfound', e => this.setCenter( e.latlng ) );\n\t\t\t}\n\t\t},\n\n\t\tinitMarkerPosition: function () {\n\t\t\tconst coordinate = this.$coordinate.val();\n\n\t\t\tif ( coordinate ) {\n\t\t\t\tconst location = coordinate.split( ',' );\n\t\t\t\tthis.setCenter( location );\n\n\t\t\t\tconst zoom = location.length > 2 ? parseInt( location[ 2 ], 10 ) : 14;\n\t\t\t\tthis.map.setZoom( zoom );\n\t\t\t} else if ( this.addressField ) {\n\t\t\t\tthis.geocodeAddress( false );\n\t\t\t}\n\t\t},\n\n\t\t// Add event listeners for 'click' & 'drag'\n\t\taddListeners: function () {\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Auto change the map when there's change in address fields.\n\t\t\t * Works only for multiple address fields as single address field has autocomplete functionality.\n\t\t\t */\n\t\t\tif ( this.addressField.split( ',' ).length > 1 ) {\n\t\t\t\tvar geocodeAddress = that.geocodeAddress.bind( that );\n\t\t\t\tvar addressFields = this.addressField.split( ',' ).forEach( function ( part ) {\n\t\t\t\t\tvar $field = that.findAddressField( part );\n\t\t\t\t\tif ( null !== $field ) {\n\t\t\t\t\t\t$field.on( 'change', geocodeAddress );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.map.on( 'click', function ( event ) {\n\t\t\t\tthat.marker.setLatLng( event.latlng );\n\t\t\t\tthat.updateCoordinate( event.latlng );\n\t\t\t} );\n\n\t\t\tthis.map.on( 'zoom', function () {\n\t\t\t\tthat.updateCoordinate( that.marker.getLatLng() );\n\t\t\t} );\n\n\t\t\tthis.marker.on( 'drag', function () {\n\t\t\t\tthat.updateCoordinate( that.marker.getLatLng() );\n\t\t\t} );\n\n\t\t\t// Custom event to refresh maps when in hidden divs.\n\t\t\tvar refresh = that.refresh.bind( this );\n\t\t\t$( window ).on( 'rwmb_map_refresh', refresh );\n\n\t\t\t// Refresh on meta box hide and show\n\t\t\trwmb.$document.on( 'postbox-toggled', refresh );\n\t\t\t// Refresh on sorting meta boxes\n\t\t\t$( '.meta-box-sortables' ).on( 'sortstop', refresh );\n\t\t},\n\n\t\trefresh: function () {\n\t\t\tif ( !this.map ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.map.invalidateSize();\n\t\t\tthis.map.panTo( this.map.getCenter() );\n\t\t},\n\n\t\t// Autocomplete address\n\t\tautocomplete: function () {\n\t\t\tvar that = this,\n\t\t\t\t$address = this.getAddressField();\n\n\t\t\tif ( null === $address ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$address.autocomplete( {\n\t\t\t\tsource: function ( request, response ) {\n\t\t\t\t\t$.get( 'https://nominatim.openstreetmap.org/search', {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\tq: request.term,\n\t\t\t\t\t\tcountrycodes: that.$canvas.data( 'region' ),\n\t\t\t\t\t\t\"accept-language\": that.$canvas.data( 'language' ),\n\t\t\t\t\t\taddressdetails: 1\n\t\t\t\t\t}, function ( results ) {\n\t\t\t\t\t\tif ( !results.length ) {\n\t\t\t\t\t\t\tresponse( [ {\n\t\t\t\t\t\t\t\tvalue: '',\n\t\t\t\t\t\t\t\tlabel: i18n.no_results_string\n\t\t\t\t\t\t\t} ] );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresponse( results.map( function ( item ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\taddress: item.address,\n\t\t\t\t\t\t\t\tlabel: item.display_name,\n\t\t\t\t\t\t\t\tvalue: item.display_name,\n\t\t\t\t\t\t\t\tlatitude: item.lat,\n\t\t\t\t\t\t\t\tlongitude: item.lon\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} ) );\n\t\t\t\t\t}, 'json' );\n\t\t\t\t},\n\t\t\t\tselect: function ( event, ui ) {\n\t\t\t\t\tconst latLng = L.latLng( ui.item.latitude, ui.item.longitude );\n\n\t\t\t\t\tthat.setCenter( latLng );\n\t\t\t\t\tthat.updateCoordinate( latLng );\n\n\t\t\t\t\t$address.trigger( 'selected_address', [ ui.item ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t// Update coordinate to input field\n\t\tupdateCoordinate: function ( latLng ) {\n\t\t\tvar zoom = this.map.getZoom();\n\t\t\tthis.$coordinate.val( latLng.lat + ',' + latLng.lng + ',' + zoom ).trigger( 'change' );\n\t\t},\n\n\t\t// Find coordinates by address\n\t\tgeocodeAddress: function ( notify ) {\n\t\t\tvar address = this.getAddress(),\n\t\t\t\tthat = this;\n\t\t\tif ( !address ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( false !== notify ) {\n\t\t\t\tnotify = true;\n\t\t\t}\n\t\t\t$.get( 'https://nominatim.openstreetmap.org/search', {\n\t\t\t\tformat: 'json',\n\t\t\t\tq: address,\n\t\t\t\tlimit: 1,\n\t\t\t\tcountrycodes: that.$canvas.data( 'region' ),\n\t\t\t\t\"accept-language\": that.$canvas.data( 'language' )\n\t\t\t}, function ( result ) {\n\t\t\t\tif ( result.length !== 1 ) {\n\t\t\t\t\tif ( notify ) {\n\t\t\t\t\t\talert( i18n.no_results_string );\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar latLng = L.latLng( result[ 0 ].lat, result[ 0 ].lon );\n\t\t\t\tthat.setCenter( latLng );\n\t\t\t\tthat.updateCoordinate( latLng );\n\t\t\t}, 'json' );\n\t\t},\n\n\t\t// Get the address field.\n\t\tgetAddressField: function () {\n\t\t\t// No address field or more than 1 address fields, ignore\n\t\t\tif ( !this.addressField || this.addressField.split( ',' ).length > 1 ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this.findAddressField( this.addressField );\n\t\t},\n\n\t\t// Get the address value for geocoding.\n\t\tgetAddress: function () {\n\t\t\tvar that = this;\n\n\t\t\treturn this.addressField.split( ',' )\n\t\t\t\t.map( function ( part ) {\n\t\t\t\t\tpart = that.findAddressField( part );\n\t\t\t\t\treturn null === part ? '' : part.val();\n\t\t\t\t} )\n\t\t\t\t.join( ',' ).replace( /\\n/g, ',' ).replace( /,,/g, ',' );\n\t\t},\n\n\t\t// Find address field based on its name attribute. Auto search inside groups when needed.\n\t\tfindAddressField: function ( fieldName ) {\n\t\t\tlet selector = `input[name=\"${ fieldName }\"], select[name=\"${ fieldName }\"]`;\n\n\t\t\t// Not in a group.\n\t\t\tlet $address = $( selector );\n\t\t\tif ( $address.length ) {\n\t\t\t\treturn $address;\n\t\t\t}\n\n\t\t\tlet $groupWrapper = this.$container.closest( '.rwmb-group-clone' );\n\t\t\tif ( !$groupWrapper.length ) {\n\t\t\t\t$groupWrapper = this.$container.closest( '.rwmb-group-wrapper' );\n\t\t\t}\n\n\t\t\tif ( !$groupWrapper.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tselector = `input[name*=\"${ fieldName }\"], select[name*=\"${ fieldName }\"]`;\n\n\t\t\t$address = $groupWrapper.find( selector );\n\t\t\tif ( $address.length ) {\n\t\t\t\treturn $address;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tfunction createController() {\n\t\tvar $this = $( this ),\n\t\t\tcontroller = $this.data( 'osmController' );\n\t\tif ( controller ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontroller = new OsmField( $this );\n\t\tcontroller.init();\n\t\t$this.data( 'osmController', controller );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-osm-field' ).each( createController );\n\t}\n\n\tfunction restart() {\n\t\t$( '.rwmb-osm-field' ).each( createController );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-input', restart );\n} )( jQuery, L, rwmb, RWMB_Osm );"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/password.js",
    "content": "document.addEventListener( 'DOMContentLoaded', function () {\n\tconst toggleButtons = document.querySelectorAll( '.rwmb-password-toggle' );\n\n\ttoggleButtons.forEach( button => {\n\t\tconst eyeIcon = button.querySelector( '.rwmb-eye-icon' );\n\t\tconst eyeOffIcon = button.querySelector( '.rwmb-eye-off-icon' );\n\t\tconst input = button.previousElementSibling;\n\n\t\tbutton.addEventListener( 'click', () => {\n\t\t\tif ( input.type === 'password' ) {\n\t\t\t\tinput.type = 'text';\n\t\t\t\teyeIcon.style.display = 'none';\n\t\t\t\teyeOffIcon.style.display = 'block';\n\t\t\t} else {\n\t\t\t\tinput.type = 'password';\n\t\t\t\teyeIcon.style.display = 'block';\n\t\t\t\teyeOffIcon.style.display = 'none';\n\t\t\t}\n\t\t} );\n\t} );\n} );"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/post.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tfunction addNew() {\n\t\t$( this ).rwmbModal( {\n\t\t\thideElement: '#editor .interface-interface-skeleton__footer, .edit-post-fullscreen-mode-close',\n            callback: function ( $modal, $modalContent ) {\n                $modalContent.find( 'body' ).addClass( 'is-fullscreen-mode' );\n                \n                // Retry if the first statement fail\n                setTimeout( () => {\n                    $modalContent.find( 'body' ).addClass( 'is-fullscreen-mode' );\n                }, 500 );\n            },\n\t\t\tcloseModalCallback: function ( $modal, $input ) {\n                const objectId  = $modal.find( '#post_ID' ).val();\n                const objectDisplay = !this.isBlockEditor ? $modal.find( '#title' ).val() : $modal.find( 'h1.editor-post-title' ).text();\n\n                if ( !objectId ) {\n                    return;\n                }\n\n                this.$objectId = objectId;\n\t\t\t\tthis.$objectDisplay = objectDisplay;\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction init( e ) {\n\t\tconst wrapper = e.target || e;\n\n\t\t$( wrapper ).find( '.rwmb-post-add-button' ).each( addNew );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', function ( e ) {\n\t\t\tinit( $( e.target ).parent() );\n\t\t} );\n\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/range.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\t/**\n\t * Update text value.\n\t */\n\tfunction update() {\n\t\tconst $this = $( this ),\n\t\t\t$output = $this.siblings( '.rwmb-range-output' );\n\n\t\t$output.html( $this.val() );\n\t\t$this.on( 'input propertychange change', () => $output.html( $this.val() ) );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-range' ).each( update );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-range', update );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/script.js",
    "content": "// Global object for shared functions and data.\nwindow.rwmb = window.rwmb || {};\n\n( function( $, document, rwmb ) {\n\t'use strict';\n\n\t// Selectors for all plugin inputs.\n\trwmb.inputSelectors = 'input[class*=\"rwmb\"], textarea[class*=\"rwmb\"], select[class*=\"rwmb\"], button[class*=\"rwmb\"]';\n\n\t// Detect Gutenberg.\n\trwmb.isGutenberg = document.body.classList.contains( 'block-editor-page' );\n\n\t// Generate unique ID.\n\trwmb.uniqid = () => Math.random().toString( 36 ).substr( 2 );\n\n\t// Trigger a custom ready event for all scripts to hook to.\n\t// Used for static DOM and dynamic DOM (loaded in MB Blocks extension for Gutenberg).\n\trwmb.$document = $( document );\n\n\t$( function() {\n\t\trwmb.$document.trigger( 'mb_ready' );\n\t} );\n} )( jQuery, document, rwmb );"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select-advanced.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\t// Cache ajax requests: https://github.com/select2/select2/issues/110#issuecomment-419247158\n\tvar cache = {};\n\n\t/**\n\t * Reorder selected values in correct order that they were selected.\n\t * @param $select2 jQuery element of the select2.\n\t */\n\tfunction reorderSelected( $select2 ) {\n\t\tvar selected = $select2.data( 'selected' );\n\t\tif ( !selected ) {\n\t\t\treturn;\n\t\t}\n\t\tselected.forEach( function ( value ) {\n\t\t\tvar option = $select2.children( '[value=\"' + value + '\"]' );\n\t\t\toption.detach();\n\t\t\t$select2.append( option );\n\t\t} );\n\t\t$select2.trigger( 'change' );\n\t}\n\n\t/**\n\t * Transform select fields into beautiful dropdown with select2 library.\n\t */\n\tfunction transform() {\n\t\tvar $this = $( this ),\n\t\t\toptions = $this.data( 'options' );\n\n\t\t$this.removeClass( 'select2-hidden-accessible' ).removeAttr( 'data-select2-id' );\n\t\t$this.siblings( '.select2-container' ).remove();\n\t\t$this.find( 'option' ).removeAttr( 'data-select2-id' );\n\n\t\tif ( options.ajax_data ) {\n\t\t\toptions.ajax.dataType = 'json';\n\t\t\toptions.ajax.data = function ( params ) {\n\t\t\t\treturn Object.assign( options.ajax_data, params );\n\t\t\t};\n\t\t\toptions.ajax.processResults = function ( response ) {\n\t\t\t\tvar items = response.data.items.map( function ( item ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: item.value,\n\t\t\t\t\t\ttext: _.unescape( item.label ),\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tvar results = {\n\t\t\t\t\tresults: items\n\t\t\t\t};\n\t\t\t\tif ( response.data.hasOwnProperty( 'more' ) ) {\n\t\t\t\t\tresults.pagination = { more: true };\n\t\t\t\t}\n\n\t\t\t\treturn results;\n\t\t\t};\n\n\t\t\toptions.ajax.transport = function ( params, success, failure ) {\n\t\t\t\tif ( params.data._type === 'query' ) {\n\t\t\t\t\tdelete params.data.page;\n\t\t\t\t}\n\n\t\t\t\t// Create cache key from ajax params from only necessary keys to make cache available for multiple fields.\n\t\t\t\tvar data = $.extend( true, {}, params.data );\n\t\t\t\tdelete data.field.id;\n\t\t\t\tdelete data.action;\n\t\t\t\tif ( !data.term ) {\n\t\t\t\t\tdelete data.term;\n\t\t\t\t}\n\n\t\t\t\tvar key = JSON.stringify( data );\n\t\t\t\tif ( cache[ key ] ) {\n\t\t\t\t\tsuccess( cache[ key ] );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actions = {\n\t\t\t\t\t'post': 'rwmb_get_posts',\n\t\t\t\t\t'taxonomy': 'rwmb_get_terms',\n\t\t\t\t\t'taxonomy_advanced': 'rwmb_get_terms',\n\t\t\t\t\t'user': 'rwmb_get_users'\n\t\t\t\t};\n\t\t\t\tparams.data.action = actions[ params.data.field.type ];\n\t\t\t\tparams.method = 'POST';\n\n\t\t\t\treturn $.ajax( params ).then( function ( data ) {\n\t\t\t\t\tcache[ key ] = data;\n\t\t\t\t\treturn data;\n\t\t\t\t} ).then( success ).fail( failure );\n\t\t\t};\n\t\t}\n\n\t\t$this.show();\n\n\t\tif ( $this.hasClass( 'rwmb-icon' ) ) {\n\t\t\t// Initialize select2 with icons for icon field.\n\t\t\t$this.trigger( 'init_icon_field', [ options ] );\n\t\t} else {\n\t\t\t// Initialize select2 normally.\n\t\t\t$this.select2( options );\n\t\t}\n\n\t\tif ( !$this.attr( 'multiple' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\treorderSelected( $this );\n\n\t\t/**\n\t\t * Preserve the order that options are selected.\n\t\t * @see https://github.com/select2/select2/issues/3106#issuecomment-255492815\n\t\t */\n\t\t$this.on( 'select2:select', function ( event ) {\n\t\t\tvar option = $this.children( '[value=\"' + event.params.data.id + '\"]' );\n\t\t\toption.detach();\n\t\t\t$this.append( option ).trigger( 'change' );\n\t\t} );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-select_advanced, .rwmb-icon' ).each( transform );\n\t}\n\n\tfunction fixDropdownPosition( e ) {\n\t\tif ( $( \"#wpadminbar\" ).length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( rwmbSelect2.isAdmin == 1 ) {\n\t\t\t$( 'body > .select2-container--open .select2-dropdown--above' ).css( 'top', 0 );\n\t\t\treturn;\n\t\t}\n\n\t\t$( 'body > .select2-container:last-child > .select2-dropdown' ).css( 'top', $( document.body ).offset().top );\n\t};\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-select_advanced, .rwmb-icon', transform )\n\t\t.on( 'select2:open', fixDropdownPosition );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select-tree.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tfunction setInitialRequiredProp() {\n\t\tvar $this = $( this ),\n\t\t\trequired = $this.prop( 'required' );\n\n\t\tif ( required ) {\n\t\t\t$this.data( 'initial-required', required );\n\t\t}\n\t}\n\n\tfunction unsetRequiredProp() {\n\t\t$( this ).prop( 'required', false );\n\t}\n\n\tfunction setRequiredProp() {\n\t\tvar $this = $( this );\n\n\t\tif ( $this.data( 'initial-required' ) ) {\n\t\t\t$this.prop( 'required', true );\n\t\t}\n\t}\n\n\tfunction toggleTree() {\n\t\tvar $this = $( this ),\n\t\t\tval = $this.val(),\n\t\t\t$tree = $this.siblings( '.rwmb-select-tree' ),\n\t\t\t$selected = $tree.filter( \"[data-parent-id='\" + val + \"']\" ),\n\t\t\t$notSelected = $tree.not( $selected );\n\n\t\t$selected.removeClass( 'hidden' ).find( 'select' ).each( setRequiredProp );\n\t\t$notSelected.addClass( 'hidden' ).find( 'select' ).each( unsetRequiredProp ).prop( 'selectedIndex', 0 );\n\t}\n\n\tfunction instantiateSelect2() {\n\t\tvar $this = $( this ),\n\t\t\toptions = $this.data( 'options' );\n\n\t\t$this\n\t\t\t.removeClass( 'select2-hidden-accessible' ).removeAttr( 'data-select2-id' )\n\t\t\t.children().removeAttr( 'data-select2-id' ).end()\n\t\t\t.siblings( '.select2-container' ).remove().end()\n\t\t\t.select2( options );\n\n\t\ttoggleTree.call( this );\n\t}\n\n\tfunction init( e ) {\n\t\tvar $select = $( e.target ).find( '.rwmb-select-tree > select' );\n\n\t\t$select.each ( setInitialRequiredProp );\n\t\t$select.each( function() {\n\t\t\tconst $this = $( this ),\n\t\t\t\toptions = $this.data( 'options' );\n\n\t\t\t$this.select2( options );\n\t\t} );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'change', '.rwmb-select-tree > select', toggleTree )\n\t\t.on( 'clone', '.rwmb-select-tree > select', instantiateSelect2 );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tfunction toggleAll( e ) {\n\t\te.preventDefault();\n\n\t\tvar $this = $( this ),\n\t\t\t$select = $this.parent().siblings( 'select' );\n\n\t\tif ( 'none' === $this.data( 'type' ) ) {\n\t\t\t$select.val( [] ).trigger( 'change' );\n\t\t\treturn;\n\t\t}\n\t\tvar selected = [];\n\t\t$select.find( 'option' ).each( function ( index, option ) {\n\t\t\tselected.push( option.value );\n\t\t} );\n\t\t$select.val( selected ).trigger( 'change' );\n\t};\n\n\trwmb.$document\n\t\t.on( 'click', '.rwmb-select-all-none a', toggleAll );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/af.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/af\",[],function(){return{errorLoading:function(){return\"Die resultate kon nie gelaai word nie.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Verwyders asseblief \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Voer asseblief \"+(e.minimum-e.input.length)+\" of meer karakters\"},loadingMore:function(){return\"Meer resultate word gelaai…\"},maximumSelected:function(e){var n=\"Kies asseblief net \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"Geen resultate gevind\"},searching:function(){return\"Besig…\"},removeAllItems:function(){return\"Verwyder alle items\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ar.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ar\",[],function(){return{errorLoading:function(){return\"لا يمكن تحميل النتائج\"},inputTooLong:function(n){return\"الرجاء حذف \"+(n.input.length-n.maximum)+\" عناصر\"},inputTooShort:function(n){return\"الرجاء إضافة \"+(n.minimum-n.input.length)+\" عناصر\"},loadingMore:function(){return\"جاري تحميل نتائج إضافية...\"},maximumSelected:function(n){return\"تستطيع إختيار \"+n.maximum+\" بنود فقط\"},noResults:function(){return\"لم يتم العثور على أي نتائج\"},searching:function(){return\"جاري البحث…\"},removeAllItems:function(){return\"قم بإزالة كل العناصر\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/az.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/az\",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+\" simvol silin\"},inputTooShort:function(n){return n.minimum-n.input.length+\" simvol daxil edin\"},loadingMore:function(){return\"Daha çox nəticə yüklənir…\"},maximumSelected:function(n){return\"Sadəcə \"+n.maximum+\" element seçə bilərsiniz\"},noResults:function(){return\"Nəticə tapılmadı\"},searching:function(){return\"Axtarılır…\"},removeAllItems:function(){return\"Bütün elementləri sil\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/bg.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bg\",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Моля въведете с \"+e+\" по-малко символ\";return e>1&&(u+=\"a\"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u=\"Моля въведете още \"+e+\" символ\";return e>1&&(u+=\"a\"),u},loadingMore:function(){return\"Зареждат се още…\"},maximumSelected:function(n){var e=\"Можете да направите до \"+n.maximum+\" \";return n.maximum>1?e+=\"избора\":e+=\"избор\",e},noResults:function(){return\"Няма намерени съвпадения\"},searching:function(){return\"Търсене…\"},removeAllItems:function(){return\"Премахнете всички елементи\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/bn.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/bn\",[],function(){return{errorLoading:function(){return\"ফলাফলগুলি লোড করা যায়নি।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"অনুগ্রহ করে \"+e+\" টি অক্ষর মুছে দিন।\";return 1!=e&&(u=\"অনুগ্রহ করে \"+e+\" টি অক্ষর মুছে দিন।\"),u},inputTooShort:function(n){return n.minimum-n.input.length+\" টি অক্ষর অথবা অধিক অক্ষর লিখুন।\"},loadingMore:function(){return\"আরো ফলাফল লোড হচ্ছে ...\"},maximumSelected:function(n){var e=n.maximum+\" টি আইটেম নির্বাচন করতে পারবেন।\";return 1!=n.maximum&&(e=n.maximum+\" টি আইটেম নির্বাচন করতে পারবেন।\"),e},noResults:function(){return\"কোন ফলাফল পাওয়া যায়নি।\"},searching:function(){return\"অনুসন্ধান করা হচ্ছে ...\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/bs.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/bs\",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return\"Preuzimanje nije uspijelo.\"},inputTooLong:function(n){var r=n.input.length-n.maximum,t=\"Obrišite \"+r+\" simbol\";return t+=e(r,\"\",\"a\",\"a\")},inputTooShort:function(n){var r=n.minimum-n.input.length,t=\"Ukucajte bar još \"+r+\" simbol\";return t+=e(r,\"\",\"a\",\"a\")},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(n){var r=\"Možete izabrati samo \"+n.maximum+\" stavk\";return r+=e(n.maximum,\"u\",\"e\",\"i\")},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Uklonite sve stavke\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ca.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ca\",[],function(){return{errorLoading:function(){return\"La càrrega ha fallat\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Si us plau, elimina \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Si us plau, introdueix \"+n+\" car\";return r+=1==n?\"àcter\":\"àcters\"},loadingMore:function(){return\"Carregant més resultats…\"},maximumSelected:function(e){var n=\"Només es pot seleccionar \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No s'han trobat resultats\"},searching:function(){return\"Cercant…\"},removeAllItems:function(){return\"Treu tots els elements\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/cs.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/cs\",[],function(){function e(e,n){switch(e){case 2:return n?\"dva\":\"dvě\";case 3:return\"tři\";case 4:return\"čtyři\"}return\"\"}return{errorLoading:function(){return\"Výsledky nemohly být načteny.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadejte o jeden znak méně.\":t<=4?\"Prosím, zadejte o \"+e(t,!0)+\" znaky méně.\":\"Prosím, zadejte o \"+t+\" znaků méně.\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadejte ještě jeden znak.\":t<=4?\"Prosím, zadejte ještě další \"+e(t,!0)+\" znaky.\":\"Prosím, zadejte ještě dalších \"+t+\" znaků.\"},loadingMore:function(){return\"Načítají se další výsledky…\"},maximumSelected:function(n){var t=n.maximum;return 1==t?\"Můžete zvolit jen jednu položku.\":t<=4?\"Můžete zvolit maximálně \"+e(t,!1)+\" položky.\":\"Můžete zvolit maximálně \"+t+\" položek.\"},noResults:function(){return\"Nenalezeny žádné položky.\"},searching:function(){return\"Vyhledávání…\"},removeAllItems:function(){return\"Odstraňte všechny položky\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/da.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/da\",[],function(){return{errorLoading:function(){return\"Resultaterne kunne ikke indlæses.\"},inputTooLong:function(e){return\"Angiv venligst \"+(e.input.length-e.maximum)+\" tegn mindre\"},inputTooShort:function(e){return\"Angiv venligst \"+(e.minimum-e.input.length)+\" tegn mere\"},loadingMore:function(){return\"Indlæser flere resultater…\"},maximumSelected:function(e){var n=\"Du kan kun vælge \"+e.maximum+\" emne\";return 1!=e.maximum&&(n+=\"r\"),n},noResults:function(){return\"Ingen resultater fundet\"},searching:function(){return\"Søger…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/de.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/de\",[],function(){return{errorLoading:function(){return\"Die Ergebnisse konnten nicht geladen werden.\"},inputTooLong:function(e){return\"Bitte \"+(e.input.length-e.maximum)+\" Zeichen weniger eingeben\"},inputTooShort:function(e){return\"Bitte \"+(e.minimum-e.input.length)+\" Zeichen mehr eingeben\"},loadingMore:function(){return\"Lade mehr Ergebnisse…\"},maximumSelected:function(e){var n=\"Sie können nur \"+e.maximum+\" Element\";return 1!=e.maximum&&(n+=\"e\"),n+=\" auswählen\"},noResults:function(){return\"Keine Übereinstimmungen gefunden\"},searching:function(){return\"Suche…\"},removeAllItems:function(){return\"Entferne alle Elemente\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/dsb.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/dsb\",[],function(){var n=[\"znamuško\",\"znamušce\",\"znamuška\",\"znamuškow\"],e=[\"zapisk\",\"zapiska\",\"zapiski\",\"zapiskow\"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return\"Wuslědki njejsu se dali zacytaś.\"},inputTooLong:function(e){var a=e.input.length-e.maximum;return\"Pšosym lašuj \"+a+\" \"+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return\"Pšosym zapódaj nanejmjenjej \"+a+\" \"+u(a,n)},loadingMore:function(){return\"Dalšne wuslědki se zacytaju…\"},maximumSelected:function(n){return\"Móžoš jano \"+n.maximum+\" \"+u(n.maximum,e)+\"wubraś.\"},noResults:function(){return\"Žedne wuslědki namakane\"},searching:function(){return\"Pyta se…\"},removeAllItems:function(){return\"Remove all items\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/el.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/el\",[],function(){return{errorLoading:function(){return\"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν.\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"Παρακαλώ διαγράψτε \"+e+\" χαρακτήρ\";return 1==e&&(u+=\"α\"),1!=e&&(u+=\"ες\"),u},inputTooShort:function(n){return\"Παρακαλώ συμπληρώστε \"+(n.minimum-n.input.length)+\" ή περισσότερους χαρακτήρες\"},loadingMore:function(){return\"Φόρτωση περισσότερων αποτελεσμάτων…\"},maximumSelected:function(n){var e=\"Μπορείτε να επιλέξετε μόνο \"+n.maximum+\" επιλογ\";return 1==n.maximum&&(e+=\"ή\"),1!=n.maximum&&(e+=\"ές\"),e},noResults:function(){return\"Δεν βρέθηκαν αποτελέσματα\"},searching:function(){return\"Αναζήτηση…\"},removeAllItems:function(){return\"Καταργήστε όλα τα στοιχεία\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/en.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/en\",[],function(){return{errorLoading:function(){return\"The results could not be loaded.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Please delete \"+n+\" character\";return 1!=n&&(r+=\"s\"),r},inputTooShort:function(e){return\"Please enter \"+(e.minimum-e.input.length)+\" or more characters\"},loadingMore:function(){return\"Loading more results…\"},maximumSelected:function(e){var n=\"You can only select \"+e.maximum+\" item\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No results found\"},searching:function(){return\"Searching…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/es.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/es\",[],function(){return{errorLoading:function(){return\"No se pudieron cargar los resultados\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Por favor, elimine \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length,r=\"Por favor, introduzca \"+n+\" car\";return r+=1==n?\"ácter\":\"acteres\"},loadingMore:function(){return\"Cargando más resultados…\"},maximumSelected:function(e){var n=\"Sólo puede seleccionar \"+e.maximum+\" elemento\";return 1!=e.maximum&&(n+=\"s\"),n},noResults:function(){return\"No se encontraron resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Eliminar todos los elementos\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/et.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/et\",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" vähem\"},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Sisesta \"+n+\" täht\";return 1!=n&&(t+=\"e\"),t+=\" rohkem\"},loadingMore:function(){return\"Laen tulemusi…\"},maximumSelected:function(e){var n=\"Saad vaid \"+e.maximum+\" tulemus\";return 1==e.maximum?n+=\"e\":n+=\"t\",n+=\" valida\"},noResults:function(){return\"Tulemused puuduvad\"},searching:function(){return\"Otsin…\"},removeAllItems:function(){return\"Eemalda kõik esemed\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/eu.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/eu\",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Idatzi \";return n+=1==t?\"karaktere bat\":t+\" karaktere\",n+=\" gutxiago\"},inputTooShort:function(e){var t=e.minimum-e.input.length,n=\"Idatzi \";return n+=1==t?\"karaktere bat\":t+\" karaktere\",n+=\" gehiago\"},loadingMore:function(){return\"Emaitza gehiago kargatzen…\"},maximumSelected:function(e){return 1===e.maximum?\"Elementu bakarra hauta dezakezu\":e.maximum+\" elementu hauta ditzakezu soilik\"},noResults:function(){return\"Ez da bat datorrenik aurkitu\"},searching:function(){return\"Bilatzen…\"},removeAllItems:function(){return\"Kendu elementu guztiak\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/fa.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fa\",[],function(){return{errorLoading:function(){return\"امکان بارگذاری نتایج وجود ندارد.\"},inputTooLong:function(n){return\"لطفاً \"+(n.input.length-n.maximum)+\" کاراکتر را حذف نمایید\"},inputTooShort:function(n){return\"لطفاً تعداد \"+(n.minimum-n.input.length)+\" کاراکتر یا بیشتر وارد نمایید\"},loadingMore:function(){return\"در حال بارگذاری نتایج بیشتر...\"},maximumSelected:function(n){return\"شما تنها می‌توانید \"+n.maximum+\" آیتم را انتخاب نمایید\"},noResults:function(){return\"هیچ نتیجه‌ای یافت نشد\"},searching:function(){return\"در حال جستجو...\"},removeAllItems:function(){return\"همه موارد را حذف کنید\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/fi.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/fi\",[],function(){return{errorLoading:function(){return\"Tuloksia ei saatu ladattua.\"},inputTooLong:function(n){return\"Ole hyvä ja anna \"+(n.input.length-n.maximum)+\" merkkiä vähemmän\"},inputTooShort:function(n){return\"Ole hyvä ja anna \"+(n.minimum-n.input.length)+\" merkkiä lisää\"},loadingMore:function(){return\"Ladataan lisää tuloksia…\"},maximumSelected:function(n){return\"Voit valita ainoastaan \"+n.maximum+\" kpl\"},noResults:function(){return\"Ei tuloksia\"},searching:function(){return\"Haetaan…\"},removeAllItems:function(){return\"Poista kaikki kohteet\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/fr.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/fr\",[],function(){return{errorLoading:function(){return\"Les résultats ne peuvent pas être chargés.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return\"Supprimez \"+n+\" caractère\"+(n>1?\"s\":\"\")},inputTooShort:function(e){var n=e.minimum-e.input.length;return\"Saisissez au moins \"+n+\" caractère\"+(n>1?\"s\":\"\")},loadingMore:function(){return\"Chargement de résultats supplémentaires…\"},maximumSelected:function(e){return\"Vous pouvez seulement sélectionner \"+e.maximum+\" élément\"+(e.maximum>1?\"s\":\"\")},noResults:function(){return\"Aucun résultat trouvé\"},searching:function(){return\"Recherche en cours…\"},removeAllItems:function(){return\"Supprimer tous les éléments\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/gl.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/gl\",[],function(){return{errorLoading:function(){return\"Non foi posíbel cargar os resultados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?\"Elimine un carácter\":\"Elimine \"+n+\" caracteres\"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?\"Engada un carácter\":\"Engada \"+n+\" caracteres\"},loadingMore:function(){return\"Cargando máis resultados…\"},maximumSelected:function(e){return 1===e.maximum?\"Só pode seleccionar un elemento\":\"Só pode seleccionar \"+e.maximum+\" elementos\"},noResults:function(){return\"Non se atoparon resultados\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Elimina todos os elementos\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/he.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/he\",[],function(){return{errorLoading:function(){return\"שגיאה בטעינת התוצאות\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"נא למחוק \";return r+=1===e?\"תו אחד\":e+\" תווים\"},inputTooShort:function(n){var e=n.minimum-n.input.length,r=\"נא להכניס \";return r+=1===e?\"תו אחד\":e+\" תווים\",r+=\" או יותר\"},loadingMore:function(){return\"טוען תוצאות נוספות…\"},maximumSelected:function(n){var e=\"באפשרותך לבחור עד \";return 1===n.maximum?e+=\"פריט אחד\":e+=n.maximum+\" פריטים\",e},noResults:function(){return\"לא נמצאו תוצאות\"},searching:function(){return\"מחפש…\"},removeAllItems:function(){return\"הסר את כל הפריטים\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/hi.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hi\",[],function(){return{errorLoading:function(){return\"परिणामों को लोड नहीं किया जा सका।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+\" अक्षर को हटा दें\";return e>1&&(r=e+\" अक्षरों को हटा दें \"),r},inputTooShort:function(n){return\"कृपया \"+(n.minimum-n.input.length)+\" या अधिक अक्षर दर्ज करें\"},loadingMore:function(){return\"अधिक परिणाम लोड हो रहे है...\"},maximumSelected:function(n){return\"आप केवल \"+n.maximum+\" आइटम का चयन कर सकते हैं\"},noResults:function(){return\"कोई परिणाम नहीं मिला\"},searching:function(){return\"खोज रहा है...\"},removeAllItems:function(){return\"सभी वस्तुओं को हटा दें\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/hr.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hr\",[],function(){function n(n){var e=\" \"+n+\" znak\";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+=\"a\"):e+=\"ova\",e}return{errorLoading:function(){return\"Preuzimanje nije uspjelo.\"},inputTooLong:function(e){return\"Unesite \"+n(e.input.length-e.maximum)},inputTooShort:function(e){return\"Unesite još \"+n(e.minimum-e.input.length)},loadingMore:function(){return\"Učitavanje rezultata…\"},maximumSelected:function(n){return\"Maksimalan broj odabranih stavki je \"+n.maximum},noResults:function(){return\"Nema rezultata\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Ukloni sve stavke\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/hsb.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hsb\",[],function(){var n=[\"znamješko\",\"znamješce\",\"znamješka\",\"znamješkow\"],e=[\"zapisk\",\"zapiskaj\",\"zapiski\",\"zapiskow\"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return\"Wuslědki njedachu so začitać.\"},inputTooLong:function(e){var a=e.input.length-e.maximum;return\"Prošu zhašej \"+a+\" \"+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return\"Prošu zapodaj znajmjeńša \"+a+\" \"+u(a,n)},loadingMore:function(){return\"Dalše wuslědki so začitaja…\"},maximumSelected:function(n){return\"Móžeš jenož \"+n.maximum+\" \"+u(n.maximum,e)+\"wubrać\"},noResults:function(){return\"Žane wuslědki namakane\"},searching:function(){return\"Pyta so…\"},removeAllItems:function(){return\"Remove all items\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/hu.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/hu\",[],function(){return{errorLoading:function(){return\"Az eredmények betöltése nem sikerült.\"},inputTooLong:function(e){return\"Túl hosszú. \"+(e.input.length-e.maximum)+\" karakterrel több, mint kellene.\"},inputTooShort:function(e){return\"Túl rövid. Még \"+(e.minimum-e.input.length)+\" karakter hiányzik.\"},loadingMore:function(){return\"Töltés…\"},maximumSelected:function(e){return\"Csak \"+e.maximum+\" elemet lehet kiválasztani.\"},noResults:function(){return\"Nincs találat.\"},searching:function(){return\"Keresés…\"},removeAllItems:function(){return\"Távolítson el minden elemet\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/hy.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/hy\",[],function(){return{errorLoading:function(){return\"Արդյունքները հնարավոր չէ բեռնել։\"},inputTooLong:function(n){return\"Խնդրում ենք հեռացնել \"+(n.input.length-n.maximum)+\" նշան\"},inputTooShort:function(n){return\"Խնդրում ենք մուտքագրել \"+(n.minimum-n.input.length)+\" կամ ավել նշաններ\"},loadingMore:function(){return\"Բեռնվում են նոր արդյունքներ․․․\"},maximumSelected:function(n){return\"Դուք կարող եք ընտրել առավելագույնը \"+n.maximum+\" կետ\"},noResults:function(){return\"Արդյունքներ չեն գտնվել\"},searching:function(){return\"Որոնում․․․\"},removeAllItems:function(){return\"Հեռացնել բոլոր տարրերը\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/id.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/id\",[],function(){return{errorLoading:function(){return\"Data tidak boleh diambil.\"},inputTooLong:function(n){return\"Hapuskan \"+(n.input.length-n.maximum)+\" huruf\"},inputTooShort:function(n){return\"Masukkan \"+(n.minimum-n.input.length)+\" huruf lagi\"},loadingMore:function(){return\"Mengambil data…\"},maximumSelected:function(n){return\"Anda hanya dapat memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tidak ada data yang sesuai\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Hapus semua item\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/is.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/is\",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e=\"Vinsamlegast styttið texta um \"+t+\" staf\";return t<=1?e:e+\"i\"},inputTooShort:function(n){var t=n.minimum-n.input.length,e=\"Vinsamlegast skrifið \"+t+\" staf\";return t>1&&(e+=\"i\"),e+=\" í viðbót\"},loadingMore:function(){return\"Sæki fleiri niðurstöður…\"},maximumSelected:function(n){return\"Þú getur aðeins valið \"+n.maximum+\" atriði\"},noResults:function(){return\"Ekkert fannst\"},searching:function(){return\"Leita…\"},removeAllItems:function(){return\"Fjarlægðu öll atriði\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/it.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/it\",[],function(){return{errorLoading:function(){return\"I risultati non possono essere caricati.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Per favore cancella \"+n+\" caratter\";return t+=1!==n?\"i\":\"e\"},inputTooShort:function(e){return\"Per favore inserisci \"+(e.minimum-e.input.length)+\" o più caratteri\"},loadingMore:function(){return\"Caricando più risultati…\"},maximumSelected:function(e){var n=\"Puoi selezionare solo \"+e.maximum+\" element\";return 1!==e.maximum?n+=\"i\":n+=\"o\",n},noResults:function(){return\"Nessun risultato trovato\"},searching:function(){return\"Sto cercando…\"},removeAllItems:function(){return\"Rimuovi tutti gli oggetti\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ja.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ja\",[],function(){return{errorLoading:function(){return\"結果が読み込まれませんでした\"},inputTooLong:function(n){return n.input.length-n.maximum+\" 文字を削除してください\"},inputTooShort:function(n){return\"少なくとも \"+(n.minimum-n.input.length)+\" 文字を入力してください\"},loadingMore:function(){return\"読み込み中…\"},maximumSelected:function(n){return n.maximum+\" 件しか選択できません\"},noResults:function(){return\"対象が見つかりません\"},searching:function(){return\"検索しています…\"},removeAllItems:function(){return\"すべてのアイテムを削除\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ka.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ka\",[],function(){return{errorLoading:function(){return\"მონაცემების ჩატვირთვა შეუძლებელია.\"},inputTooLong:function(n){return\"გთხოვთ აკრიფეთ \"+(n.input.length-n.maximum)+\" სიმბოლოთი ნაკლები\"},inputTooShort:function(n){return\"გთხოვთ აკრიფეთ \"+(n.minimum-n.input.length)+\" სიმბოლო ან მეტი\"},loadingMore:function(){return\"მონაცემების ჩატვირთვა…\"},maximumSelected:function(n){return\"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს \"+n.maximum+\" ელემენტი\"},noResults:function(){return\"რეზულტატი არ მოიძებნა\"},searching:function(){return\"ძიება…\"},removeAllItems:function(){return\"ამოიღე ყველა ელემენტი\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/km.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/km\",[],function(){return{errorLoading:function(){return\"មិនអាចទាញយកទិន្នន័យ\"},inputTooLong:function(n){return\"សូមលុបចេញ  \"+(n.input.length-n.maximum)+\" អក្សរ\"},inputTooShort:function(n){return\"សូមបញ្ចូល\"+(n.minimum-n.input.length)+\" អក្សរ រឺ ច្រើនជាងនេះ\"},loadingMore:function(){return\"កំពុងទាញយកទិន្នន័យបន្ថែម...\"},maximumSelected:function(n){return\"អ្នកអាចជ្រើសរើសបានតែ \"+n.maximum+\" ជម្រើសប៉ុណ្ណោះ\"},noResults:function(){return\"មិនមានលទ្ធផល\"},searching:function(){return\"កំពុងស្វែងរក...\"},removeAllItems:function(){return\"លុបធាតុទាំងអស់\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ko.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ko\",[],function(){return{errorLoading:function(){return\"결과를 불러올 수 없습니다.\"},inputTooLong:function(n){return\"너무 깁니다. \"+(n.input.length-n.maximum)+\" 글자 지워주세요.\"},inputTooShort:function(n){return\"너무 짧습니다. \"+(n.minimum-n.input.length)+\" 글자 더 입력해주세요.\"},loadingMore:function(){return\"불러오는 중…\"},maximumSelected:function(n){return\"최대 \"+n.maximum+\"개까지만 선택 가능합니다.\"},noResults:function(){return\"결과가 없습니다.\"},searching:function(){return\"검색 중…\"},removeAllItems:function(){return\"모든 항목 삭제\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/lt.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/lt\",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t=\"Pašalinkite \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},inputTooShort:function(e){var i=e.minimum-e.input.length,t=\"Įrašykite dar \"+i+\" simbol\";return t+=n(i,\"į\",\"ius\",\"ių\")},loadingMore:function(){return\"Kraunama daugiau rezultatų…\"},maximumSelected:function(e){var i=\"Jūs galite pasirinkti tik \"+e.maximum+\" element\";return i+=n(e.maximum,\"ą\",\"us\",\"ų\")},noResults:function(){return\"Atitikmenų nerasta\"},searching:function(){return\"Ieškoma…\"},removeAllItems:function(){return\"Pašalinti visus elementus\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/lv.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/lv\",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i=\"Lūdzu ievadiet par  \"+u;return(i+=\" simbol\"+e(u,\"iem\",\"u\",\"iem\"))+\" mazāk\"},inputTooShort:function(n){var u=n.minimum-n.input.length,i=\"Lūdzu ievadiet vēl \"+u;return i+=\" simbol\"+e(u,\"us\",\"u\",\"us\")},loadingMore:function(){return\"Datu ielāde…\"},maximumSelected:function(n){var u=\"Jūs varat izvēlēties ne vairāk kā \"+n.maximum;return u+=\" element\"+e(n.maximum,\"us\",\"u\",\"us\")},noResults:function(){return\"Sakritību nav\"},searching:function(){return\"Meklēšana…\"},removeAllItems:function(){return\"Noņemt visus vienumus\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/mk.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/mk\",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,\"Ве молиме внесете \"+n.maximum+\" помалку карактер\");return 1!==n.maximum&&(e+=\"и\"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,\"Ве молиме внесете уште \"+n.maximum+\" карактер\");return 1!==n.maximum&&(e+=\"и\"),e},loadingMore:function(){return\"Вчитување резултати…\"},maximumSelected:function(n){var e=\"Можете да изберете само \"+n.maximum+\" ставк\";return 1===n.maximum?e+=\"а\":e+=\"и\",e},noResults:function(){return\"Нема пронајдено совпаѓања\"},searching:function(){return\"Пребарување…\"},removeAllItems:function(){return\"Отстрани ги сите предмети\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ms.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ms\",[],function(){return{errorLoading:function(){return\"Keputusan tidak berjaya dimuatkan.\"},inputTooLong:function(n){return\"Sila hapuskan \"+(n.input.length-n.maximum)+\" aksara\"},inputTooShort:function(n){return\"Sila masukkan \"+(n.minimum-n.input.length)+\" atau lebih aksara\"},loadingMore:function(){return\"Sedang memuatkan keputusan…\"},maximumSelected:function(n){return\"Anda hanya boleh memilih \"+n.maximum+\" pilihan\"},noResults:function(){return\"Tiada padanan yang ditemui\"},searching:function(){return\"Mencari…\"},removeAllItems:function(){return\"Keluarkan semua item\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/nb.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nb\",[],function(){return{errorLoading:function(){return\"Kunne ikke hente resultater.\"},inputTooLong:function(e){return\"Vennligst fjern \"+(e.input.length-e.maximum)+\" tegn\"},inputTooShort:function(e){return\"Vennligst skriv inn \"+(e.minimum-e.input.length)+\" tegn til\"},loadingMore:function(){return\"Laster flere resultater…\"},maximumSelected:function(e){return\"Du kan velge maks \"+e.maximum+\" elementer\"},noResults:function(){return\"Ingen treff\"},searching:function(){return\"Søker…\"},removeAllItems:function(){return\"Fjern alle elementer\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ne.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ne\",[],function(){return{errorLoading:function(){return\"नतिजाहरु देखाउन सकिएन।\"},inputTooLong:function(n){var e=n.input.length-n.maximum,u=\"कृपया \"+e+\" अक्षर मेटाउनुहोस्।\";return 1!=e&&(u+=\"कृपया \"+e+\" अक्षरहरु मेटाउनुहोस्।\"),u},inputTooShort:function(n){return\"कृपया बाँकी रहेका \"+(n.minimum-n.input.length)+\" वा अरु धेरै अक्षरहरु भर्नुहोस्।\"},loadingMore:function(){return\"अरु नतिजाहरु भरिँदैछन् …\"},maximumSelected:function(n){var e=\"तँपाई \"+n.maximum+\" वस्तु मात्र छान्न पाउँनुहुन्छ।\";return 1!=n.maximum&&(e=\"तँपाई \"+n.maximum+\" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।\"),e},noResults:function(){return\"कुनै पनि नतिजा भेटिएन।\"},searching:function(){return\"खोजि हुँदैछ…\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/nl.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/nl\",[],function(){return{errorLoading:function(){return\"De resultaten konden niet worden geladen.\"},inputTooLong:function(e){return\"Gelieve \"+(e.input.length-e.maximum)+\" karakters te verwijderen\"},inputTooShort:function(e){return\"Gelieve \"+(e.minimum-e.input.length)+\" of meer karakters in te voeren\"},loadingMore:function(){return\"Meer resultaten laden…\"},maximumSelected:function(e){var n=1==e.maximum?\"kan\":\"kunnen\",r=\"Er \"+n+\" maar \"+e.maximum+\" item\";return 1!=e.maximum&&(r+=\"s\"),r+=\" worden geselecteerd\"},noResults:function(){return\"Geen resultaten gevonden…\"},searching:function(){return\"Zoeken…\"},removeAllItems:function(){return\"Verwijder alle items\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/pl.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/pl\",[],function(){var n=[\"znak\",\"znaki\",\"znaków\"],e=[\"element\",\"elementy\",\"elementów\"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return\"Nie można załadować wyników.\"},inputTooLong:function(e){var t=e.input.length-e.maximum;return\"Usuń \"+t+\" \"+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return\"Podaj przynajmniej \"+t+\" \"+r(t,n)},loadingMore:function(){return\"Trwa ładowanie…\"},maximumSelected:function(n){return\"Możesz zaznaczyć tylko \"+n.maximum+\" \"+r(n.maximum,e)},noResults:function(){return\"Brak wyników\"},searching:function(){return\"Trwa wyszukiwanie…\"},removeAllItems:function(){return\"Usuń wszystkie przedmioty\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ps.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ps\",[],function(){return{errorLoading:function(){return\"پايلي نه سي ترلاسه کېدای\"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=\"د مهربانۍ لمخي \"+e+\" توری ړنګ کړئ\";return 1!=e&&(r=r.replace(\"توری\",\"توري\")),r},inputTooShort:function(n){return\"لږ تر لږه \"+(n.minimum-n.input.length)+\" يا ډېر توري وليکئ\"},loadingMore:function(){return\"نوري پايلي ترلاسه کيږي...\"},maximumSelected:function(n){var e=\"تاسو يوازي \"+n.maximum+\" قلم په نښه کولای سی\";return 1!=n.maximum&&(e=e.replace(\"قلم\",\"قلمونه\")),e},noResults:function(){return\"پايلي و نه موندل سوې\"},searching:function(){return\"لټول کيږي...\"},removeAllItems:function(){return\"ټول توکي لرې کړئ\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/pt-BR.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt-BR\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,r=\"Apague \"+n+\" caracter\";return 1!=n&&(r+=\"es\"),r},inputTooShort:function(e){return\"Digite \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"Carregando mais resultados…\"},maximumSelected:function(e){var n=\"Você só pode selecionar \"+e.maximum+\" ite\";return 1==e.maximum?n+=\"m\":n+=\"ns\",n},noResults:function(){return\"Nenhum resultado encontrado\"},searching:function(){return\"Buscando…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/pt.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/pt\",[],function(){return{errorLoading:function(){return\"Os resultados não puderam ser carregados.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,n=\"Por favor apague \"+r+\" \";return n+=1!=r?\"caracteres\":\"caractere\"},inputTooShort:function(e){return\"Introduza \"+(e.minimum-e.input.length)+\" ou mais caracteres\"},loadingMore:function(){return\"A carregar mais resultados…\"},maximumSelected:function(e){var r=\"Apenas pode seleccionar \"+e.maximum+\" \";return r+=1!=e.maximum?\"itens\":\"item\"},noResults:function(){return\"Sem resultados\"},searching:function(){return\"A procurar…\"},removeAllItems:function(){return\"Remover todos os itens\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ro.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/ro\",[],function(){return{errorLoading:function(){return\"Rezultatele nu au putut fi incărcate.\"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=\"Vă rugăm să ștergeți\"+t+\" caracter\";return 1!==t&&(n+=\"e\"),n},inputTooShort:function(e){return\"Vă rugăm să introduceți \"+(e.minimum-e.input.length)+\" sau mai multe caractere\"},loadingMore:function(){return\"Se încarcă mai multe rezultate…\"},maximumSelected:function(e){var t=\"Aveți voie să selectați cel mult \"+e.maximum;return t+=\" element\",1!==e.maximum&&(t+=\"e\"),t},noResults:function(){return\"Nu au fost găsite rezultate\"},searching:function(){return\"Căutare…\"},removeAllItems:function(){return\"Eliminați toate elementele\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/ru.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/ru\",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return\"Невозможно загрузить результаты\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Пожалуйста, введите на \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\"),u+=\" меньше\"},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Пожалуйста, введите ещё хотя бы \"+r+\" символ\";return u+=n(r,\"\",\"a\",\"ов\")},loadingMore:function(){return\"Загрузка данных…\"},maximumSelected:function(e){var r=\"Вы можете выбрать не более \"+e.maximum+\" элемент\";return r+=n(e.maximum,\"\",\"a\",\"ов\")},noResults:function(){return\"Совпадений не найдено\"},searching:function(){return\"Поиск…\"},removeAllItems:function(){return\"Удалить все элементы\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/sk.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sk\",[],function(){var e={2:function(e){return e?\"dva\":\"dve\"},3:function(){return\"tri\"},4:function(){return\"štyri\"}};return{errorLoading:function(){return\"Výsledky sa nepodarilo načítať.\"},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?\"Prosím, zadajte o jeden znak menej\":t>=2&&t<=4?\"Prosím, zadajte o \"+e[t](!0)+\" znaky menej\":\"Prosím, zadajte o \"+t+\" znakov menej\"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?\"Prosím, zadajte ešte jeden znak\":t<=4?\"Prosím, zadajte ešte ďalšie \"+e[t](!0)+\" znaky\":\"Prosím, zadajte ešte ďalších \"+t+\" znakov\"},loadingMore:function(){return\"Načítanie ďalších výsledkov…\"},maximumSelected:function(n){return 1==n.maximum?\"Môžete zvoliť len jednu položku\":n.maximum>=2&&n.maximum<=4?\"Môžete zvoliť najviac \"+e[n.maximum](!1)+\" položky\":\"Môžete zvoliť najviac \"+n.maximum+\" položiek\"},noResults:function(){return\"Nenašli sa žiadne položky\"},searching:function(){return\"Vyhľadávanie…\"},removeAllItems:function(){return\"Odstráňte všetky položky\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/sl.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sl\",[],function(){return{errorLoading:function(){return\"Zadetkov iskanja ni bilo mogoče naložiti.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Prosim zbrišite \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t=\"Prosim vpišite še \"+n+\" znak\";return 2==n?t+=\"a\":1!=n&&(t+=\"e\"),t},loadingMore:function(){return\"Nalagam več zadetkov…\"},maximumSelected:function(e){var n=\"Označite lahko največ \"+e.maximum+\" predmet\";return 2==e.maximum?n+=\"a\":1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Ni zadetkov.\"},searching:function(){return\"Iščem…\"},removeAllItems:function(){return\"Odstranite vse elemente\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/sq.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/sq\",[],function(){return{errorLoading:function(){return\"Rezultatet nuk mund të ngarkoheshin.\"},inputTooLong:function(e){var n=e.input.length-e.maximum,t=\"Të lutem fshi \"+n+\" karakter\";return 1!=n&&(t+=\"e\"),t},inputTooShort:function(e){return\"Të lutem shkruaj \"+(e.minimum-e.input.length)+\" ose më shumë karaktere\"},loadingMore:function(){return\"Duke ngarkuar më shumë rezultate…\"},maximumSelected:function(e){var n=\"Mund të zgjedhësh vetëm \"+e.maximum+\" element\";return 1!=e.maximum&&(n+=\"e\"),n},noResults:function(){return\"Nuk u gjet asnjë rezultat\"},searching:function(){return\"Duke kërkuar…\"},removeAllItems:function(){return\"Hiq të gjitha sendet\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/sr-Cyrl.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sr-Cyrl\",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return\"Преузимање није успело.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,u=\"Обришите \"+r+\" симбол\";return u+=n(r,\"\",\"а\",\"а\")},inputTooShort:function(e){var r=e.minimum-e.input.length,u=\"Укуцајте бар још \"+r+\" симбол\";return u+=n(r,\"\",\"а\",\"а\")},loadingMore:function(){return\"Преузимање још резултата…\"},maximumSelected:function(e){var r=\"Можете изабрати само \"+e.maximum+\" ставк\";return r+=n(e.maximum,\"у\",\"е\",\"и\")},noResults:function(){return\"Ништа није пронађено\"},searching:function(){return\"Претрага…\"},removeAllItems:function(){return\"Уклоните све ставке\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/sr.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sr\",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return\"Preuzimanje nije uspelo.\"},inputTooLong:function(e){var r=e.input.length-e.maximum,t=\"Obrišite \"+r+\" simbol\";return t+=n(r,\"\",\"a\",\"a\")},inputTooShort:function(e){var r=e.minimum-e.input.length,t=\"Ukucajte bar još \"+r+\" simbol\";return t+=n(r,\"\",\"a\",\"a\")},loadingMore:function(){return\"Preuzimanje još rezultata…\"},maximumSelected:function(e){var r=\"Možete izabrati samo \"+e.maximum+\" stavk\";return r+=n(e.maximum,\"u\",\"e\",\"i\")},noResults:function(){return\"Ništa nije pronađeno\"},searching:function(){return\"Pretraga…\"},removeAllItems:function(){return\"Уклоните све ставке\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/sv.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/sv\",[],function(){return{errorLoading:function(){return\"Resultat kunde inte laddas.\"},inputTooLong:function(n){return\"Vänligen sudda ut \"+(n.input.length-n.maximum)+\" tecken\"},inputTooShort:function(n){return\"Vänligen skriv in \"+(n.minimum-n.input.length)+\" eller fler tecken\"},loadingMore:function(){return\"Laddar fler resultat…\"},maximumSelected:function(n){return\"Du kan max välja \"+n.maximum+\" element\"},noResults:function(){return\"Inga träffar\"},searching:function(){return\"Söker…\"},removeAllItems:function(){return\"Ta bort alla objekt\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/th.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/th\",[],function(){return{errorLoading:function(){return\"ไม่สามารถค้นข้อมูลได้\"},inputTooLong:function(n){return\"โปรดลบออก \"+(n.input.length-n.maximum)+\" ตัวอักษร\"},inputTooShort:function(n){return\"โปรดพิมพ์เพิ่มอีก \"+(n.minimum-n.input.length)+\" ตัวอักษร\"},loadingMore:function(){return\"กำลังค้นข้อมูลเพิ่ม…\"},maximumSelected:function(n){return\"คุณสามารถเลือกได้ไม่เกิน \"+n.maximum+\" รายการ\"},noResults:function(){return\"ไม่พบข้อมูล\"},searching:function(){return\"กำลังค้นข้อมูล…\"},removeAllItems:function(){return\"ลบรายการทั้งหมด\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/tk.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define(\"select2/i18n/tk\",[],function(){return{errorLoading:function(){return\"Netije ýüklenmedi.\"},inputTooLong:function(e){return e.input.length-e.maximum+\" harp bozuň.\"},inputTooShort:function(e){return\"Ýene-de iň az \"+(e.minimum-e.input.length)+\" harp ýazyň.\"},loadingMore:function(){return\"Köpräk netije görkezilýär…\"},maximumSelected:function(e){return\"Diňe \"+e.maximum+\" sanysyny saýlaň.\"},noResults:function(){return\"Netije tapylmady.\"},searching:function(){return\"Gözlenýär…\"},removeAllItems:function(){return\"Remove all items\"}}}),e.define,e.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/tr.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/tr\",[],function(){return{errorLoading:function(){return\"Sonuç yüklenemedi\"},inputTooLong:function(n){return n.input.length-n.maximum+\" karakter daha girmelisiniz\"},inputTooShort:function(n){return\"En az \"+(n.minimum-n.input.length)+\" karakter daha girmelisiniz\"},loadingMore:function(){return\"Daha fazla…\"},maximumSelected:function(n){return\"Sadece \"+n.maximum+\" seçim yapabilirsiniz\"},noResults:function(){return\"Sonuç bulunamadı\"},searching:function(){return\"Aranıyor…\"},removeAllItems:function(){return\"Tüm öğeleri kaldır\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/uk.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/uk\",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return\"Неможливо завантажити результати\"},inputTooLong:function(e){return\"Будь ласка, видаліть \"+(e.input.length-e.maximum)+\" \"+n(e.maximum,\"літеру\",\"літери\",\"літер\")},inputTooShort:function(n){return\"Будь ласка, введіть \"+(n.minimum-n.input.length)+\" або більше літер\"},loadingMore:function(){return\"Завантаження інших результатів…\"},maximumSelected:function(e){return\"Ви можете вибрати лише \"+e.maximum+\" \"+n(e.maximum,\"пункт\",\"пункти\",\"пунктів\")},noResults:function(){return\"Нічого не знайдено\"},searching:function(){return\"Пошук…\"},removeAllItems:function(){return\"Видалити всі елементи\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/vi.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/vi\",[],function(){return{inputTooLong:function(n){return\"Vui lòng xóa bớt \"+(n.input.length-n.maximum)+\" ký tự\"},inputTooShort:function(n){return\"Vui lòng nhập thêm từ \"+(n.minimum-n.input.length)+\" ký tự trở lên\"},loadingMore:function(){return\"Đang lấy thêm kết quả…\"},maximumSelected:function(n){return\"Chỉ có thể chọn được \"+n.maximum+\" lựa chọn\"},noResults:function(){return\"Không tìm thấy kết quả\"},searching:function(){return\"Đang tìm…\"},removeAllItems:function(){return\"Xóa tất cả các mục\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/zh-CN.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-CN\",[],function(){return{errorLoading:function(){return\"无法载入结果。\"},inputTooLong:function(n){return\"请删除\"+(n.input.length-n.maximum)+\"个字符\"},inputTooShort:function(n){return\"请再输入至少\"+(n.minimum-n.input.length)+\"个字符\"},loadingMore:function(){return\"载入更多结果…\"},maximumSelected:function(n){return\"最多只能选择\"+n.maximum+\"个项目\"},noResults:function(){return\"未找到结果\"},searching:function(){return\"搜索中…\"},removeAllItems:function(){return\"删除所有项目\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/select2/i18n/zh-TW.js",
    "content": "/*! Select2 4.0.10 | https://github.com/select2/select2/blob/master/LICENSE.md */\n\n!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define(\"select2/i18n/zh-TW\",[],function(){return{inputTooLong:function(n){return\"請刪掉\"+(n.input.length-n.maximum)+\"個字元\"},inputTooShort:function(n){return\"請再輸入\"+(n.minimum-n.input.length)+\"個字元\"},loadingMore:function(){return\"載入中…\"},maximumSelected:function(n){return\"你只能選擇最多\"+n.maximum+\"項\"},noResults:function(){return\"沒有找到相符的項目\"},searching:function(){return\"搜尋中…\"},removeAllItems:function(){return\"刪除所有項目\"}}}),n.define,n.require}();"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/slider.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tfunction transform() {\n\t\tvar $input  = $( this ),\n\t\t\t$slider = $input.siblings( '.rwmb-slider-ui' ),\n\t\t\t$label  = $slider.siblings( '.rwmb-slider-label' ).find( 'span' ),\n\t\t\tvalue   = $input.val(),\n\t\t\toptions = $slider.data( 'options' );\n\n\t\t$slider.html( '' );\n\t\t$label.text( value );\n\n\t\tif ( true === options.range ) {\n\t\t\tvalue = value.split( '|' );\n\t\t\toptions.values = value;\n\t\t} else {\n\t\t\toptions.value = value;\n\t\t}\n\n\t\toptions.slide = function ( event, ui ) {\n\t\t\tvar value = ui.value;\n\t\t\tif ( options.range === true ) {\n\t\t\t\tvalue = ui.values[ 0 ] + '|' + ui.values[ 1 ];\n\t\t\t}\n\n\t\t\t$input.val( value ).trigger( 'change' );\n\t\t\t$label.html( value );\n\t\t};\n\n\t\t$slider.slider( options );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-slider' ).each( transform );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-slider', transform );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/taxonomy.js",
    "content": "( function ( $, rwmb ) {\n    'use strict';\n\n    function addNew() {\n        const $this = $( this );\n\n        $this.rwmbModal( {\n            size: 'small',\n            hideElement: '.form-wrap > h2',\n            callback: function ( $modal, $modalContent ) {\n                $modalContent.find( '#col-right' ).css( 'display', 'none' );\n                $modalContent.find( '.search-box' ).css( 'display', 'none' );\n                $modalContent.find( '#wpbody' ).css( 'padding-top', 0 );\n            },\n            closeModalCallback: function ( $modal, $input ) {\n                if ( $modal.find( '#the-list tr:first td:eq(0) .row-actions' ).length > 0 ) {\n                    this.$objectId = parseInt( $modal.find( '#the-list tr:first' ).attr( 'id' ).split( '-' )[ 1 ] );\n                    this.$objectDisplay = $modal.find( '#the-list tr:first td:eq(0) strong a' ).text();\n                }\n            }\n        } );\n    }\n\n    function init( e ) {\n        const wrapper = e.target || e;\n        $( wrapper ).find( '.rwmb-taxonomy-add-button' ).each( addNew );\n    }\n\n    rwmb.$document\n        .on( 'mb_ready', init )\n        .on( 'clone', function ( e ) {\n            init( $( e.target ).parent() );\n        } );\n\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/time.js",
    "content": "( function ( $, rwmb, i18n ) {\n\t'use strict';\n\n\t/**\n\t * Transform an input into a time picker.\n\t */\n\tfunction transform() {\n\t\tlet $this = $( this ),\n\t\t\toptions = $this.data( 'options' ),\n\t\t\tcurrent = $this.val();\n\t\tcurrent = formatTime( current );\n\n\t\t$this.siblings( '.ui-datepicker-append' ).remove();  // Remove appended text\n\n\t\toptions.onSelect = function () {\n\t\t\t$this.trigger( 'change' );\n\t\t};\n\t\toptions.beforeShow = function ( i ) {\n\t\t\tif ( $( i ).prop( 'readonly' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tlet $inline = $this.siblings( '.rwmb-datetime-inline' );\n\t\tif ( !$inline.length ) {\n\t\t\t$inline = $this.closest( '.rwmb-input-group' ).siblings( '.rwmb-datetime-inline' );\n\t\t}\n\t\tif ( !$inline.length ) {\n\t\t\t$this.removeClass( 'hasDatepicker' ).timepicker( options ).timepicker( 'setTime', current );\n\t\t\treturn;\n\t\t}\n\n\t\toptions.altField = '#' + $this.attr( 'id' );\n\t\t$inline\n\t\t\t.removeClass( 'hasDatepicker' )\n\t\t\t.empty()\n\t\t\t.prop( 'id', '' )\n\t\t\t.timepicker( options )\n\t\t\t.timepicker( 'setTime', current );\n\t}\n\n\tconst formatTime = time => {\n\t\tif ( !time.includes( ':' ) ) {\n\t\t\treturn time;\n\t\t}\n\t\tlet [ hours, minutes ] = time.split( ':' );\n\t\thours = hours.padStart( 2, '0' );\n\t\tminutes = minutes.padStart( 2, '0' );\n\n\t\treturn `${ hours }:${ minutes }`;\n\t};\n\n\t// Set language if available\n\tfunction setTimeI18n() {\n\t\tif ( $.timepicker.regional.hasOwnProperty( i18n.locale ) ) {\n\t\t\t$.timepicker.setDefaults( $.timepicker.regional[ i18n.locale ] );\n\t\t} else if ( $.timepicker.regional.hasOwnProperty( i18n.localeShort ) ) {\n\t\t\t$.timepicker.setDefaults( $.timepicker.regional[ i18n.localeShort ] );\n\t\t}\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-time' ).each( transform );\n\t}\n\n\tsetTimeI18n();\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-time', transform );\n} )( jQuery, rwmb, RWMB_Time );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/user.js",
    "content": "( function ( $, rwmb ) {\n    'use strict';\n\n    function addNew() {\n        const $this = $( this );\n\n        $this.rwmbModal( {\n            size: 'small',\n            hideElement: '#add-new-user',\n            callback: function ( $modal, $modalContent ) {\n                $modalContent.find( '#add-new-user' ).next().next().remove();\n            },\n            closeModalCallback: function ( $modal, $input ) {\n                if ( $modal.find( '#wpbody-content .wrap form input[name=\"_wp_http_referer\"]' ).length > 0 ) {\n                    const urlParams = new URLSearchParams( $modal.find( '#wpbody-content .wrap form input[name=\"_wp_http_referer\"]' ).val() );\n                    this.$objectId = parseInt( urlParams.get( 'id' ) );\n                    this.$objectDisplay = $modal.find( `#the-list tr[id=\"user-${ this.$objectId }\"] .column-name` ).text() !== '—Unknown' ?\n                        $modal.find( `#the-list tr[id=\"user-${ this.$objectId }\"] .column-name` ).text() :\n                        $modal.find( `#the-list tr[id=\"user-${ this.$objectId }\"] .column-username strong a` ).text();\n                }\n            }\n        } );\n    }\n\n    function init( e ) {\n        const wrapper = e.target || e;\n        $( wrapper ).find( '.rwmb-user-add-button' ).each( addNew );\n    }\n\n    rwmb.$document\n        .on( 'mb_ready', init )\n        .on( 'clone', function ( e ) {\n            init( $( e.target ).parent() );\n        } );\n\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/additional-methods.js",
    "content": "/*!\n * jQuery Validation Plugin v1.20.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2023 Jörn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n( function() {\n\n\tfunction stripHtml( value ) {\n\n\t\t// Remove html tags and space chars\n\t\treturn value.replace( /<.[^<>]*?>/g, \" \" ).replace( /&nbsp;|&#160;/gi, \" \" )\n\n\t\t// Remove punctuation\n\t\t.replace( /[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\" );\n\t}\n\n\t$.validator.addMethod( \"maxWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length <= params;\n\t}, $.validator.format( \"Please enter {0} words or less.\" ) );\n\n\t$.validator.addMethod( \"minWords\", function( value, element, params ) {\n\t\treturn this.optional( element ) || stripHtml( value ).match( /\\b\\w+\\b/g ).length >= params;\n\t}, $.validator.format( \"Please enter at least {0} words.\" ) );\n\n\t$.validator.addMethod( \"rangeWords\", function( value, element, params ) {\n\t\tvar valueStripped = stripHtml( value ),\n\t\t\tregex = /\\b\\w+\\b/g;\n\t\treturn this.optional( element ) || valueStripped.match( regex ).length >= params[ 0 ] && valueStripped.match( regex ).length <= params[ 1 ];\n\t}, $.validator.format( \"Please enter between {0} and {1} words.\" ) );\n\n}() );\n\n/**\n * This is used in the United States to process payments, deposits,\n * or transfers using the Automated Clearing House (ACH) or Fedwire\n * systems. A very common use case would be to validate a form for\n * an ACH bill payment.\n */\n$.validator.addMethod( \"abaRoutingNumber\", function( value ) {\n\tvar checksum = 0;\n\tvar tokens = value.split( \"\" );\n\tvar length = tokens.length;\n\n\t// Length Check\n\tif ( length !== 9 ) {\n\t\treturn false;\n\t}\n\n\t// Calc the checksum\n\t// https://en.wikipedia.org/wiki/ABA_routing_transit_number\n\tfor ( var i = 0; i < length; i += 3 ) {\n\t\tchecksum +=\tparseInt( tokens[ i ], 10 )     * 3 +\n\t\t\t\t\tparseInt( tokens[ i + 1 ], 10 ) * 7 +\n\t\t\t\t\tparseInt( tokens[ i + 2 ], 10 );\n\t}\n\n\t// If not zero and divisible by 10 then valid\n\tif ( checksum !== 0 && checksum % 10 === 0 ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}, \"Please enter a valid routing number.\" );\n\n// Accept a value from a file input based on a required mimetype\n$.validator.addMethod( \"accept\", function( value, element, param ) {\n\n\t// Split mime on commas in case we have multiple types we can accept\n\tvar typeParam = typeof param === \"string\" ? param.replace( /\\s/g, \"\" ) : \"image/*\",\n\t\toptionalValue = this.optional( element ),\n\t\ti, file, regex;\n\n\t// Element is optional\n\tif ( optionalValue ) {\n\t\treturn optionalValue;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\n\t\t// Escape string to be used in the regex\n\t\t// see: https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\n\t\t// Escape also \"/*\" as \"/.*\" as a wildcard\n\t\ttypeParam = typeParam\n\t\t\t\t.replace( /[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\" )\n\t\t\t\t.replace( /,/g, \"|\" )\n\t\t\t\t.replace( /\\/\\*/g, \"/.*\" );\n\n\t\t// Check if the element has a FileList before checking each file\n\t\tif ( element.files && element.files.length ) {\n\t\t\tregex = new RegExp( \".?(\" + typeParam + \")$\", \"i\" );\n\t\t\tfor ( i = 0; i < element.files.length; i++ ) {\n\t\t\t\tfile = element.files[ i ];\n\n\t\t\t\t// Grab the mimetype from the loaded file, verify it matches\n\t\t\t\tif ( !file.type.match( regex ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Either return true because we've validated each file, or because the\n\t// browser does not support element.files and the FileList feature\n\treturn true;\n}, $.validator.format( \"Please enter a value with a valid mimetype.\" ) );\n\n$.validator.addMethod( \"alphanumeric\", function( value, element ) {\n\treturn this.optional( element ) || /^\\w+$/i.test( value );\n}, \"Letters, numbers, and underscores only please.\" );\n\n/*\n * Dutch bank account numbers (not 'giro' numbers) have 9 digits\n * and pass the '11 check'.\n * We accept the notation with spaces, as that is common.\n * acceptable: 123456789 or 12 34 56 789\n */\n$.validator.addMethod( \"bankaccountNL\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( !( /^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test( value ) ) ) {\n\t\treturn false;\n\t}\n\n\t// Now '11 check'\n\tvar account = value.replace( / /g, \"\" ), // Remove spaces\n\t\tsum = 0,\n\t\tlen = account.length,\n\t\tpos, factor, digit;\n\tfor ( pos = 0; pos < len; pos++ ) {\n\t\tfactor = len - pos;\n\t\tdigit = account.substring( pos, pos + 1 );\n\t\tsum = sum + factor * digit;\n\t}\n\treturn sum % 11 === 0;\n}, \"Please specify a valid bank account number.\" );\n\n$.validator.addMethod( \"bankorgiroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) ||\n\t\t\t( $.validator.methods.bankaccountNL.call( this, value, element ) ) ||\n\t\t\t( $.validator.methods.giroaccountNL.call( this, value, element ) );\n}, \"Please specify a valid bank or giro account number.\" );\n\n/**\n * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.\n *\n * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n *\n * BIC definition in detail:\n * - First 4 characters - bank code (only letters)\n * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)\n * - Next 2 characters - location code (letters and digits)\n *   a. shall not start with '0' or '1'\n *   b. second character must be a letter ('O' is not allowed) or digit ('0' for test (therefore not allowed), '1' denoting passive participant, '2' typically reverse-billing)\n * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)\n */\n$.validator.addMethod( \"bic\", function( value, element ) {\n    return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value.toUpperCase() );\n}, \"Please specify a valid BIC code.\" );\n\n/*\n * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities\n * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal\n *\n * Spanish CIF structure:\n *\n * [ T ][ P ][ P ][ N ][ N ][ N ][ N ][ N ][ C ]\n *\n * Where:\n *\n * T: 1 character. Kind of Organization Letter: [ABCDEFGHJKLMNPQRSUVW]\n * P: 2 characters. Province.\n * N: 5 characters. Secuencial Number within the province.\n * C: 1 character. Control Digit: [0-9A-J].\n *\n * [ T ]: Kind of Organizations. Possible values:\n *\n *   A. Corporations\n *   B. LLCs\n *   C. General partnerships\n *   D. Companies limited partnerships\n *   E. Communities of goods\n *   F. Cooperative Societies\n *   G. Associations\n *   H. Communities of homeowners in horizontal property regime\n *   J. Civil Societies\n *   K. Old format\n *   L. Old format\n *   M. Old format\n *   N. Nonresident entities\n *   P. Local authorities\n *   Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions\n *   R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)\n *   S. Organs of State Administration and regions\n *   V. Agrarian Transformation\n *   W. Permanent establishments of non-resident in Spain\n *\n * [ C ]: Control Digit. It can be a number or a letter depending on T value:\n * [ T ]  -->  [ C ]\n * ------    ----------\n *   A         Number\n *   B         Number\n *   E         Number\n *   H         Number\n *   K         Letter\n *   P         Letter\n *   Q         Letter\n *   S         Letter\n *\n */\n$.validator.addMethod( \"cifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar cifRegEx = new RegExp( /^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi );\n\tvar letter  = value.substring( 0, 1 ), // [ T ]\n\t\tnumber  = value.substring( 1, 8 ), // [ P ][ P ][ N ][ N ][ N ][ N ][ N ]\n\t\tcontrol = value.substring( 8, 9 ), // [ C ]\n\t\tall_sum = 0,\n\t\teven_sum = 0,\n\t\todd_sum = 0,\n\t\ti, n,\n\t\tcontrol_digit,\n\t\tcontrol_letter;\n\n\tfunction isOdd( n ) {\n\t\treturn n % 2 === 0;\n\t}\n\n\t// Quick format test\n\tif ( value.length !== 9 || !cifRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tfor ( i = 0; i < number.length; i++ ) {\n\t\tn = parseInt( number[ i ], 10 );\n\n\t\t// Odd positions\n\t\tif ( isOdd( i ) ) {\n\n\t\t\t// Odd positions are multiplied first.\n\t\t\tn *= 2;\n\n\t\t\t// If the multiplication is bigger than 10 we need to adjust\n\t\t\todd_sum += n < 10 ? n : n - 9;\n\n\t\t// Even positions\n\t\t// Just sum them\n\t\t} else {\n\t\t\teven_sum += n;\n\t\t}\n\t}\n\n\tall_sum = even_sum + odd_sum;\n\tcontrol_digit = ( 10 - ( all_sum ).toString().substr( -1 ) ).toString();\n\tcontrol_digit = parseInt( control_digit, 10 ) > 9 ? \"0\" : control_digit;\n\tcontrol_letter = \"JABCDEFGHI\".substr( control_digit, 1 ).toString();\n\n\t// Control must be a digit\n\tif ( letter.match( /[ABEH]/ ) ) {\n\t\treturn control === control_digit;\n\n\t// Control must be a letter\n\t} else if ( letter.match( /[KPQS]/ ) ) {\n\t\treturn control === control_letter;\n\t}\n\n\t// Can be either\n\treturn control === control_digit || control === control_letter;\n\n}, \"Please specify a valid CIF number.\" );\n\n/*\n * Brazillian CNH number (Carteira Nacional de Habilitacao) is the License Driver number.\n * CNH numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cnhBR\", function( value ) {\n\n  // Removing special characters from value\n  value = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n  // Checking value to have 11 digits only\n  if ( value.length !== 11 ) {\n    return false;\n  }\n\n  var sum = 0, dsc = 0, firstChar,\n\t\tfirstCN, secondCN, i, j, v;\n\n  firstChar = value.charAt( 0 );\n\n  if ( new Array( 12 ).join( firstChar ) === value ) {\n    return false;\n  }\n\n  // Step 1 - using first Check Number:\n  for ( i = 0, j = 9, v = 0; i < 9; ++i, --j ) {\n    sum += +( value.charAt( i ) * j );\n  }\n\n  firstCN = sum % 11;\n  if ( firstCN >= 10 ) {\n    firstCN = 0;\n    dsc = 2;\n  }\n\n  sum = 0;\n  for ( i = 0, j = 1, v = 0; i < 9; ++i, ++j ) {\n    sum += +( value.charAt( i ) * j );\n  }\n\n  secondCN = sum % 11;\n  if ( secondCN >= 10 ) {\n    secondCN = 0;\n  } else {\n    secondCN = secondCN - dsc;\n  }\n\n  return ( String( firstCN ).concat( secondCN ) === value.substr( -2 ) );\n\n}, \"Please specify a valid CNH number.\" );\n\n/*\n * Brazillian value number (Cadastrado de Pessoas Juridica).\n * value numbers have 14 digits in total: 12 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cnpjBR\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Removing no number\n\tvalue = value.replace( /[^\\d]+/g, \"\" );\n\n\t// Checking value to have 14 digits only\n\tif ( value.length !== 14 ) {\n\t\treturn false;\n\t}\n\n\t// Elimina values invalidos conhecidos\n\tif ( value === \"00000000000000\" ||\n\t\tvalue === \"11111111111111\" ||\n\t\tvalue === \"22222222222222\" ||\n\t\tvalue === \"33333333333333\" ||\n\t\tvalue === \"44444444444444\" ||\n\t\tvalue === \"55555555555555\" ||\n\t\tvalue === \"66666666666666\" ||\n\t\tvalue === \"77777777777777\" ||\n\t\tvalue === \"88888888888888\" ||\n\t\tvalue === \"99999999999999\" ) {\n\t\treturn false;\n\t}\n\n\t// Valida DVs\n\tvar tamanho = ( value.length - 2 );\n\tvar numeros = value.substring( 0, tamanho );\n\tvar digitos = value.substring( tamanho );\n\tvar soma = 0;\n\tvar pos = tamanho - 7;\n\n\tfor ( var i = tamanho; i >= 1; i-- ) {\n\t\tsoma += numeros.charAt( tamanho - i ) * pos--;\n\t\tif ( pos < 2 ) {\n\t\t\tpos = 9;\n\t\t}\n\t}\n\n\tvar resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\n\n\tif ( resultado !== parseInt( digitos.charAt( 0 ), 10 ) ) {\n\t\treturn false;\n\t}\n\n\ttamanho = tamanho + 1;\n\tnumeros = value.substring( 0, tamanho );\n\tsoma = 0;\n\tpos = tamanho - 7;\n\n\tfor ( var il = tamanho; il >= 1; il-- ) {\n\t\tsoma += numeros.charAt( tamanho - il ) * pos--;\n\t\tif ( pos < 2 ) {\n\t\t\tpos = 9;\n\t\t}\n\t}\n\n\tresultado = soma % 11 < 2 ? 0 : 11 - soma % 11;\n\n\tif ( resultado !== parseInt( digitos.charAt( 1 ), 10 ) ) {\n\t\treturn false;\n\t}\n\n\treturn true;\n\n}, \"Please specify a CNPJ value number.\" );\n\n/*\n * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.\n * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.\n */\n$.validator.addMethod( \"cpfBR\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\tvar sum = 0,\n\t\tfirstCN, secondCN, checkResult, i;\n\n\tfirstCN = parseInt( value.substring( 9, 10 ), 10 );\n\tsecondCN = parseInt( value.substring( 10, 11 ), 10 );\n\n\tcheckResult = function( sum, cn ) {\n\t\tvar result = ( sum * 10 ) % 11;\n\t\tif ( ( result === 10 ) || ( result === 11 ) ) {\n\t\t\tresult = 0;\n\t\t}\n\t\treturn ( result === cn );\n\t};\n\n\t// Checking for dump data\n\tif ( value === \"\" ||\n\t\tvalue === \"00000000000\" ||\n\t\tvalue === \"11111111111\" ||\n\t\tvalue === \"22222222222\" ||\n\t\tvalue === \"33333333333\" ||\n\t\tvalue === \"44444444444\" ||\n\t\tvalue === \"55555555555\" ||\n\t\tvalue === \"66666666666\" ||\n\t\tvalue === \"77777777777\" ||\n\t\tvalue === \"88888888888\" ||\n\t\tvalue === \"99999999999\"\n\t) {\n\t\treturn false;\n\t}\n\n\t// Step 1 - using first Check Number:\n\tfor ( i = 1; i <= 9; i++ ) {\n\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 11 - i );\n\t}\n\n\t// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:\n\tif ( checkResult( sum, firstCN ) ) {\n\t\tsum = 0;\n\t\tfor ( i = 1; i <= 10; i++ ) {\n\t\t\tsum = sum + parseInt( value.substring( i - 1, i ), 10 ) * ( 12 - i );\n\t\t}\n\t\treturn checkResult( sum, secondCN );\n\t}\n\treturn false;\n\n}, \"Please specify a valid CPF number.\" );\n\n// https://jqueryvalidation.org/creditcard-method/\n// based on https://en.wikipedia.org/wiki/Luhn_algorithm\n$.validator.addMethod( \"creditcard\", function( value, element ) {\n\tif ( this.optional( element ) ) {\n\t\treturn \"dependency-mismatch\";\n\t}\n\n\t// Accept only spaces, digits and dashes\n\tif ( /[^0-9 \\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvar nCheck = 0,\n\t\tnDigit = 0,\n\t\tbEven = false,\n\t\tn, cDigit;\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\t// Basing min and max length on\n\t// https://dev.ean.com/general-info/valid-card-types/\n\tif ( value.length < 13 || value.length > 19 ) {\n\t\treturn false;\n\t}\n\n\tfor ( n = value.length - 1; n >= 0; n-- ) {\n\t\tcDigit = value.charAt( n );\n\t\tnDigit = parseInt( cDigit, 10 );\n\t\tif ( bEven ) {\n\t\t\tif ( ( nDigit *= 2 ) > 9 ) {\n\t\t\t\tnDigit -= 9;\n\t\t\t}\n\t\t}\n\n\t\tnCheck += nDigit;\n\t\tbEven = !bEven;\n\t}\n\n\treturn ( nCheck % 10 ) === 0;\n}, \"Please enter a valid credit card number.\" );\n\n/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator\n * Redistributed under the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0\n * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)\n */\n$.validator.addMethod( \"creditcardtypes\", function( value, element, param ) {\n\tif ( /[^0-9\\-]+/.test( value ) ) {\n\t\treturn false;\n\t}\n\n\tvalue = value.replace( /\\D/g, \"\" );\n\n\tvar validTypes = 0x0000;\n\n\tif ( param.mastercard ) {\n\t\tvalidTypes |= 0x0001;\n\t}\n\tif ( param.visa ) {\n\t\tvalidTypes |= 0x0002;\n\t}\n\tif ( param.amex ) {\n\t\tvalidTypes |= 0x0004;\n\t}\n\tif ( param.dinersclub ) {\n\t\tvalidTypes |= 0x0008;\n\t}\n\tif ( param.enroute ) {\n\t\tvalidTypes |= 0x0010;\n\t}\n\tif ( param.discover ) {\n\t\tvalidTypes |= 0x0020;\n\t}\n\tif ( param.jcb ) {\n\t\tvalidTypes |= 0x0040;\n\t}\n\tif ( param.unknown ) {\n\t\tvalidTypes |= 0x0080;\n\t}\n\tif ( param.all ) {\n\t\tvalidTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n\t}\n\tif ( validTypes & 0x0001 && ( /^(5[12345])/.test( value ) || /^(2[234567])/.test( value ) ) ) { // Mastercard\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0002 && /^(4)/.test( value ) ) { // Visa\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0004 && /^(3[47])/.test( value ) ) { // Amex\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test( value ) ) { // Dinersclub\n\t\treturn value.length === 14;\n\t}\n\tif ( validTypes & 0x0010 && /^(2(014|149))/.test( value ) ) { // Enroute\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0020 && /^(6011)/.test( value ) ) { // Discover\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(3)/.test( value ) ) { // Jcb\n\t\treturn value.length === 16;\n\t}\n\tif ( validTypes & 0x0040 && /^(2131|1800)/.test( value ) ) { // Jcb\n\t\treturn value.length === 15;\n\t}\n\tif ( validTypes & 0x0080 ) { // Unknown\n\t\treturn true;\n\t}\n\treturn false;\n}, \"Please enter a valid credit card number.\" );\n\n/**\n * Validates currencies with any given symbols by @jameslouiz\n * Symbols can be optional or required. Symbols required by default\n *\n * Usage examples:\n *  currency: [\"£\", false] - Use false for soft currency validation\n *  currency: [\"$\", false]\n *  currency: [\"RM\", false] - also works with text based symbols such as \"RM\" - Malaysia Ringgit etc\n *\n *  <input class=\"currencyInput\" name=\"currencyInput\">\n *\n * Soft symbol checking\n *  currencyInput: {\n *     currency: [\"$\", false]\n *  }\n *\n * Strict symbol checking (default)\n *  currencyInput: {\n *     currency: \"$\"\n *     //OR\n *     currency: [\"$\", true]\n *  }\n *\n * Multiple Symbols\n *  currencyInput: {\n *     currency: \"$,£,¢\"\n *  }\n */\n$.validator.addMethod( \"currency\", function( value, element, param ) {\n    var isParamString = typeof param === \"string\",\n        symbol = isParamString ? param : param[ 0 ],\n        soft = isParamString ? true : param[ 1 ],\n        regex;\n\n    symbol = symbol.replace( /,/g, \"\" );\n    symbol = soft ? symbol + \"]\" : symbol + \"]?\";\n    regex = \"^[\" + symbol + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\";\n    regex = new RegExp( regex );\n    return this.optional( element ) || regex.test( value );\n\n}, \"Please specify a valid currency.\" );\n\n$.validator.addMethod( \"dateFA\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value );\n}, $.validator.messages.date );\n\n/**\n * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.\n *\n * @example $.validator.methods.date(\"01/01/1900\")\n * @result true\n *\n * @example $.validator.methods.date(\"01/13/1990\")\n * @result false\n *\n * @example $.validator.methods.date(\"01.01.1900\")\n * @result false\n *\n * @example <input name=\"pippo\" class=\"{dateITA:true}\" />\n * @desc Declares an optional input element whose value must be a valid date.\n *\n * @name $.validator.methods.dateITA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"dateITA\", function( value, element ) {\n\tvar check = false,\n\t\tre = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n\t\tadata, gg, mm, aaaa, xdata;\n\tif ( re.test( value ) ) {\n\t\tadata = value.split( \"/\" );\n\t\tgg = parseInt( adata[ 0 ], 10 );\n\t\tmm = parseInt( adata[ 1 ], 10 );\n\t\taaaa = parseInt( adata[ 2 ], 10 );\n\t\txdata = new Date( Date.UTC( aaaa, mm - 1, gg, 12, 0, 0, 0 ) );\n\t\tif ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth() === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {\n\t\t\tcheck = true;\n\t\t} else {\n\t\t\tcheck = false;\n\t\t}\n\t} else {\n\t\tcheck = false;\n\t}\n\treturn this.optional( element ) || check;\n}, $.validator.messages.date );\n\n$.validator.addMethod( \"dateNL\", function( value, element ) {\n\treturn this.optional( element ) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test( value );\n}, $.validator.messages.date );\n\n// Older \"accept\" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept\n$.validator.addMethod( \"extension\", function( value, element, param ) {\n\tparam = typeof param === \"string\" ? param.replace( /,/g, \"|\" ) : \"png|jpe?g|gif\";\n\treturn this.optional( element ) || value.match( new RegExp( \"\\\\.(\" + param + \")$\", \"i\" ) );\n}, $.validator.format( \"Please enter a value with a valid extension.\" ) );\n\n/**\n * Dutch giro account numbers (not bank numbers) have max 7 digits\n */\n$.validator.addMethod( \"giroaccountNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[0-9]{1,7}$/.test( value );\n}, \"Please specify a valid giro account number.\" );\n\n$.validator.addMethod( \"greaterThan\", function( value, element, param ) {\n    var target = $( param );\n\n    if ( this.settings.onfocusout && target.not( \".validate-greaterThan-blur\" ).length ) {\n        target.addClass( \"validate-greaterThan-blur\" ).on( \"blur.validate-greaterThan\", function() {\n            $( element ).valid();\n        } );\n    }\n\n    return value > target.val();\n}, \"Please enter a greater value.\" );\n\n$.validator.addMethod( \"greaterThanEqual\", function( value, element, param ) {\n    var target = $( param );\n\n    if ( this.settings.onfocusout && target.not( \".validate-greaterThanEqual-blur\" ).length ) {\n        target.addClass( \"validate-greaterThanEqual-blur\" ).on( \"blur.validate-greaterThanEqual\", function() {\n            $( element ).valid();\n        } );\n    }\n\n    return value >= target.val();\n}, \"Please enter a greater value.\" );\n\n/**\n * IBAN is the international bank account number.\n * It has a country - specific format, that is checked here too\n *\n * Validation is case-insensitive. Please make sure to normalize input yourself.\n */\n$.validator.addMethod( \"iban\", function( value, element ) {\n\n\t// Some quick simple tests to prevent needless work\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\t// Remove spaces and to upper case\n\tvar iban = value.replace( / /g, \"\" ).toUpperCase(),\n\t\tibancheckdigits = \"\",\n\t\tleadingZeroes = true,\n\t\tcRest = \"\",\n\t\tcOperator = \"\",\n\t\tcountrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;\n\n\t// Check for IBAN code length.\n\t// It contains:\n\t// country code ISO 3166-1 - two letters,\n\t// two check digits,\n\t// Basic Bank Account Number (BBAN) - up to 30 chars\n\tvar minimalIBANlength = 5;\n\tif ( iban.length < minimalIBANlength ) {\n\t\treturn false;\n\t}\n\n\t// Check the country code and find the country specific format\n\tcountrycode = iban.substring( 0, 2 );\n\tbbancountrypatterns = {\n\t\t\"AL\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"AD\": \"\\\\d{8}[\\\\dA-Z]{12}\",\n\t\t\"AT\": \"\\\\d{16}\",\n\t\t\"AZ\": \"[\\\\dA-Z]{4}\\\\d{20}\",\n\t\t\"BE\": \"\\\\d{12}\",\n\t\t\"BH\": \"[A-Z]{4}[\\\\dA-Z]{14}\",\n\t\t\"BA\": \"\\\\d{16}\",\n\t\t\"BR\": \"\\\\d{23}[A-Z][\\\\dA-Z]\",\n\t\t\"BG\": \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\",\n\t\t\"CR\": \"\\\\d{17}\",\n\t\t\"HR\": \"\\\\d{17}\",\n\t\t\"CY\": \"\\\\d{8}[\\\\dA-Z]{16}\",\n\t\t\"CZ\": \"\\\\d{20}\",\n\t\t\"DK\": \"\\\\d{14}\",\n\t\t\"DO\": \"[A-Z]{4}\\\\d{20}\",\n\t\t\"EE\": \"\\\\d{16}\",\n\t\t\"FO\": \"\\\\d{14}\",\n\t\t\"FI\": \"\\\\d{14}\",\n\t\t\"FR\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"GE\": \"[\\\\dA-Z]{2}\\\\d{16}\",\n\t\t\"DE\": \"\\\\d{18}\",\n\t\t\"GI\": \"[A-Z]{4}[\\\\dA-Z]{15}\",\n\t\t\"GR\": \"\\\\d{7}[\\\\dA-Z]{16}\",\n\t\t\"GL\": \"\\\\d{14}\",\n\t\t\"GT\": \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\",\n\t\t\"HU\": \"\\\\d{24}\",\n\t\t\"IS\": \"\\\\d{22}\",\n\t\t\"IE\": \"[\\\\dA-Z]{4}\\\\d{14}\",\n\t\t\"IL\": \"\\\\d{19}\",\n\t\t\"IT\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"KZ\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"KW\": \"[A-Z]{4}[\\\\dA-Z]{22}\",\n\t\t\"LV\": \"[A-Z]{4}[\\\\dA-Z]{13}\",\n\t\t\"LB\": \"\\\\d{4}[\\\\dA-Z]{20}\",\n\t\t\"LI\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"LT\": \"\\\\d{16}\",\n\t\t\"LU\": \"\\\\d{3}[\\\\dA-Z]{13}\",\n\t\t\"MK\": \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\",\n\t\t\"MT\": \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\",\n\t\t\"MR\": \"\\\\d{23}\",\n\t\t\"MU\": \"[A-Z]{4}\\\\d{19}[A-Z]{3}\",\n\t\t\"MC\": \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\",\n\t\t\"MD\": \"[\\\\dA-Z]{2}\\\\d{18}\",\n\t\t\"ME\": \"\\\\d{18}\",\n\t\t\"NL\": \"[A-Z]{4}\\\\d{10}\",\n\t\t\"NO\": \"\\\\d{11}\",\n\t\t\"PK\": \"[\\\\dA-Z]{4}\\\\d{16}\",\n\t\t\"PS\": \"[\\\\dA-Z]{4}\\\\d{21}\",\n\t\t\"PL\": \"\\\\d{24}\",\n\t\t\"PT\": \"\\\\d{21}\",\n\t\t\"RO\": \"[A-Z]{4}[\\\\dA-Z]{16}\",\n\t\t\"SM\": \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\",\n\t\t\"SA\": \"\\\\d{2}[\\\\dA-Z]{18}\",\n\t\t\"RS\": \"\\\\d{18}\",\n\t\t\"SK\": \"\\\\d{20}\",\n\t\t\"SI\": \"\\\\d{15}\",\n\t\t\"ES\": \"\\\\d{20}\",\n\t\t\"SE\": \"\\\\d{20}\",\n\t\t\"CH\": \"\\\\d{5}[\\\\dA-Z]{12}\",\n\t\t\"TN\": \"\\\\d{20}\",\n\t\t\"TR\": \"\\\\d{5}[\\\\dA-Z]{17}\",\n\t\t\"AE\": \"\\\\d{3}\\\\d{16}\",\n\t\t\"GB\": \"[A-Z]{4}\\\\d{14}\",\n\t\t\"VG\": \"[\\\\dA-Z]{4}\\\\d{16}\"\n\t};\n\n\tbbanpattern = bbancountrypatterns[ countrycode ];\n\n\t// As new countries will start using IBAN in the\n\t// future, we only check if the countrycode is known.\n\t// This prevents false negatives, while almost all\n\t// false positives introduced by this, will be caught\n\t// by the checksum validation below anyway.\n\t// Strict checking should return FALSE for unknown\n\t// countries.\n\tif ( typeof bbanpattern !== \"undefined\" ) {\n\t\tibanregexp = new RegExp( \"^[A-Z]{2}\\\\d{2}\" + bbanpattern + \"$\", \"\" );\n\t\tif ( !( ibanregexp.test( iban ) ) ) {\n\t\t\treturn false; // Invalid country specific format\n\t\t}\n\t}\n\n\t// Now check the checksum, first convert to digits\n\tibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );\n\tfor ( i = 0; i < ibancheck.length; i++ ) {\n\t\tcharAt = ibancheck.charAt( i );\n\t\tif ( charAt !== \"0\" ) {\n\t\t\tleadingZeroes = false;\n\t\t}\n\t\tif ( !leadingZeroes ) {\n\t\t\tibancheckdigits += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf( charAt );\n\t\t}\n\t}\n\n\t// Calculate the result of: ibancheckdigits % 97\n\tfor ( p = 0; p < ibancheckdigits.length; p++ ) {\n\t\tcChar = ibancheckdigits.charAt( p );\n\t\tcOperator = \"\" + cRest + \"\" + cChar;\n\t\tcRest = cOperator % 97;\n\t}\n\treturn cRest === 1;\n}, \"Please specify a valid IBAN.\" );\n\n$.validator.addMethod( \"integer\", function( value, element ) {\n\treturn this.optional( element ) || /^-?\\d+$/.test( value );\n}, \"A positive or negative non-decimal number please.\" );\n\n$.validator.addMethod( \"ipv4\", function( value, element ) {\n\treturn this.optional( element ) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test( value );\n}, \"Please enter a valid IP v4 address.\" );\n\n$.validator.addMethod( \"ipv6\", function( value, element ) {\n\treturn this.optional( element ) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test( value );\n}, \"Please enter a valid IP v6 address.\" );\n\n$.validator.addMethod( \"lessThan\", function( value, element, param ) {\n    var target = $( param );\n\n    if ( this.settings.onfocusout && target.not( \".validate-lessThan-blur\" ).length ) {\n        target.addClass( \"validate-lessThan-blur\" ).on( \"blur.validate-lessThan\", function() {\n            $( element ).valid();\n        } );\n    }\n\n    return value < target.val();\n}, \"Please enter a lesser value.\" );\n\n$.validator.addMethod( \"lessThanEqual\", function( value, element, param ) {\n    var target = $( param );\n\n    if ( this.settings.onfocusout && target.not( \".validate-lessThanEqual-blur\" ).length ) {\n        target.addClass( \"validate-lessThanEqual-blur\" ).on( \"blur.validate-lessThanEqual\", function() {\n            $( element ).valid();\n        } );\n    }\n\n    return value <= target.val();\n}, \"Please enter a lesser value.\" );\n\n$.validator.addMethod( \"lettersonly\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z]+$/i.test( value );\n}, \"Letters only please.\" );\n\n$.validator.addMethod( \"letterswithbasicpunc\", function( value, element ) {\n\treturn this.optional( element ) || /^[a-z\\-.,()'\"\\s]+$/i.test( value );\n}, \"Letters or punctuation only please.\" );\n\n// Limit the number of files in a FileList.\n$.validator.addMethod( \"maxfiles\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\t\tif ( element.files && element.files.length > param ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}, $.validator.format( \"Please select no more than {0} files.\" ) );\n\n// Limit the size of each individual file in a FileList.\n$.validator.addMethod( \"maxsize\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\t\tif ( element.files && element.files.length ) {\n\t\t\tfor ( var i = 0; i < element.files.length; i++ ) {\n\t\t\t\tif ( element.files[ i ].size > param ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}, $.validator.format( \"File size must not exceed {0} bytes each.\" ) );\n\n// Limit the size of all files in a FileList.\n$.validator.addMethod( \"maxsizetotal\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tif ( $( element ).attr( \"type\" ) === \"file\" ) {\n\t\tif ( element.files && element.files.length ) {\n\t\t\tvar totalSize = 0;\n\n\t\t\tfor ( var i = 0; i < element.files.length; i++ ) {\n\t\t\t\ttotalSize += element.files[ i ].size;\n\t\t\t\tif ( totalSize > param ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}, $.validator.format( \"Total size of all files must not exceed {0} bytes.\" ) );\n\n\n$.validator.addMethod( \"mobileNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid mobile number.\" );\n\n$.validator.addMethod( \"mobileRU\", function( phone_number, element ) {\n\tvar ruPhone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || ruPhone_number.length > 9 && /^((\\+7|7|8)+([0-9]){10})$/.test( ruPhone_number );\n}, \"Please specify a valid mobile number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"mobileUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/ );\n}, \"Please specify a valid mobile number.\" );\n\n$.validator.addMethod( \"netmask\", function( value, element ) {\n    return this.optional( element ) || /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)/i.test( value );\n}, \"Please enter a valid netmask.\" );\n\n/*\n * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish\n * authorities to any foreigner.\n *\n * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal\n * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to\n * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.\n */\n$.validator.addMethod( \"nieES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvar nieRegEx = new RegExp( /^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi );\n\tvar validChars = \"TRWAGMYFPDXBNJZSQVHLCKET\",\n\t\tletter = value.substr( value.length - 1 ).toUpperCase(),\n\t\tnumber;\n\n\tvalue = value.toString().toUpperCase();\n\n\t// Quick format test\n\tif ( value.length > 10 || value.length < 9 || !nieRegEx.test( value ) ) {\n\t\treturn false;\n\t}\n\n\t// X means same number\n\t// Y means number + 10000000\n\t// Z means number + 20000000\n\tvalue = value.replace( /^[X]/, \"0\" )\n\t\t.replace( /^[Y]/, \"1\" )\n\t\t.replace( /^[Z]/, \"2\" );\n\n\tnumber = value.length === 9 ? value.substr( 0, 8 ) : value.substr( 0, 9 );\n\n\treturn validChars.charAt( parseInt( number, 10 ) % 23 ) === letter;\n\n}, \"Please specify a valid NIE number.\" );\n\n/*\n * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals\n */\n$.validator.addMethod( \"nifES\", function( value, element ) {\n\t\"use strict\";\n\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\n\tvalue = value.toUpperCase();\n\n\t// Basic format test\n\tif ( !value.match( \"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\" ) ) {\n\t\treturn false;\n\t}\n\n\t// Test NIF\n\tif ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {\n\t\treturn ( \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );\n\t}\n\n\t// Test specials NIF (starts with K, L or M)\n\tif ( /^[KLM]{1}/.test( value ) ) {\n\t\treturn ( value[ 8 ] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt( value.substring( 8, 1 ) % 23 ) );\n\t}\n\n\treturn false;\n\n}, \"Please specify a valid NIF number.\" );\n\n/*\n * Numer identyfikacji podatkowej ( NIP ) is the way tax identification used in Poland for companies\n */\n$.validator.addMethod( \"nipPL\", function( value ) {\n\t\"use strict\";\n\n\tvalue = value.replace( /[^0-9]/g, \"\" );\n\n\tif ( value.length !== 10 ) {\n\t\treturn false;\n\t}\n\n\tvar arrSteps = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];\n\tvar intSum = 0;\n\tfor ( var i = 0; i < 9; i++ ) {\n\t\tintSum += arrSteps[ i ] * value[ i ];\n\t}\n\tvar int2 = intSum % 11;\n\tvar intControlNr = ( int2 === 10 ) ? 0 : int2;\n\n\treturn ( intControlNr === parseInt( value[ 9 ], 10 ) );\n}, \"Please specify a valid NIP number.\" );\n\n/**\n * Created for project jquery-validation.\n * @Description Brazillian PIS or NIS number (Número de Identificação Social Pis ou Pasep) is the equivalent of a\n * Brazilian tax registration number NIS of PIS numbers have 11 digits in total: 10 numbers followed by 1 check numbers\n * that are being used for validation.\n * @copyright (c) 21/08/2018 13:14, Cleiton da Silva Mendonça\n * @author Cleiton da Silva Mendonça <cleiton.mendonca@gmail.com>\n * @link http://gitlab.com/csmendonca Gitlab of Cleiton da Silva Mendonça\n * @link http://github.com/csmendonca Github of Cleiton da Silva Mendonça\n */\n$.validator.addMethod( \"nisBR\", function( value ) {\n\tvar number;\n\tvar cn;\n\tvar sum = 0;\n\tvar dv;\n\tvar count;\n\tvar multiplier;\n\n\t// Removing special characters from value\n\tvalue = value.replace( /([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\" );\n\n\t// Checking value to have 11 digits only\n\tif ( value.length !== 11 ) {\n\t\treturn false;\n\t}\n\n\t//Get check number of value\n\tcn = parseInt( value.substring( 10, 11 ), 10 );\n\n\t//Get number with 10 digits of the value\n\tnumber = parseInt( value.substring( 0, 10 ), 10 );\n\n\tfor ( count = 2; count < 12; count++ ) {\n\t\tmultiplier = count;\n\t\tif ( count === 10 ) {\n\t\t\tmultiplier = 2;\n\t\t}\n\t\tif ( count === 11 ) {\n\t\t\tmultiplier = 3;\n\t\t}\n\t\tsum += ( ( number % 10 ) * multiplier );\n\t\tnumber = parseInt( number / 10, 10 );\n\t}\n\tdv = ( sum % 11 );\n\n\tif ( dv > 1 ) {\n\t\tdv = ( 11 - dv );\n\t} else {\n\t\tdv = 0;\n\t}\n\n\tif ( cn === dv ) {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}, \"Please specify a valid NIS/PIS number.\" );\n\n$.validator.addMethod( \"notEqualTo\", function( value, element, param ) {\n\treturn this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param );\n}, \"Please enter a different value, values must not be the same.\" );\n\n$.validator.addMethod( \"nowhitespace\", function( value, element ) {\n\treturn this.optional( element ) || /^\\S+$/i.test( value );\n}, \"No white space please.\" );\n\n/**\n* Return true if the field value matches the given format RegExp\n*\n* @example $.validator.methods.pattern(\"AR1004\",element,/^AR\\d{4}$/)\n* @result true\n*\n* @example $.validator.methods.pattern(\"BR1004\",element,/^AR\\d{4}$/)\n* @result false\n*\n* @name $.validator.methods.pattern\n* @type Boolean\n* @cat Plugins/Validate/Methods\n*/\n$.validator.addMethod( \"pattern\", function( value, element, param ) {\n\tif ( this.optional( element ) ) {\n\t\treturn true;\n\t}\n\tif ( typeof param === \"string\" ) {\n\t\tparam = new RegExp( \"^(?:\" + param + \")$\" );\n\t}\n\treturn param.test( value );\n}, \"Invalid format.\" );\n\n/**\n * Dutch phone numbers have 10 digits (or 11 and start with +31).\n */\n$.validator.addMethod( \"phoneNL\", function( value, element ) {\n\treturn this.optional( element ) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test( value );\n}, \"Please specify a valid phone number.\" );\n\n/**\n * Polish telephone numbers have 9 digits.\n *\n * Mobile phone numbers starts with following digits:\n * 45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79, 88.\n *\n * Fixed-line numbers starts with area codes:\n * 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 29, 32, 33,\n * 34, 41, 42, 43, 44, 46, 48, 52, 54, 55, 56, 58, 59, 61,\n * 62, 63, 65, 67, 68, 71, 74, 75, 76, 77, 81, 82, 83, 84,\n * 85, 86, 87, 89, 91, 94, 95.\n *\n * Ministry of National Defence numbers and VoIP numbers starts with 26 and 39.\n *\n * Excludes intelligent networks (premium rate, shared cost, free phone numbers).\n *\n * Poland National Numbering Plan http://www.itu.int/oth/T02020000A8/en\n */\n$.validator.addMethod( \"phonePL\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\tvar regexp = /^(?:(?:(?:\\+|00)?48)|(?:\\(\\+?48\\)))?(?:1[2-8]|2[2-69]|3[2-49]|4[1-68]|5[0-9]|6[0-35-9]|[7-8][1-9]|9[145])\\d{7}$/;\n\treturn this.optional( element ) || regexp.test( phone_number );\n}, \"Please specify a valid phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n\n// Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers\n$.validator.addMethod( \"phonesUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/ );\n}, \"Please specify a valid uk phone number.\" );\n\n/* For UK phone functions, do the following server side processing:\n * Compare original input with this RegEx pattern:\n * ^\\(?(?:(?:00\\)?[\\s\\-]?\\(?|\\+)(44)\\)?[\\s\\-]?\\(?(?:0\\)?[\\s\\-]?\\(?)?|0)([1-9]\\d{1,4}\\)?[\\s\\d\\-]+)$\n * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'\n * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.\n * A number of very detailed GB telephone number RegEx patterns can also be found at:\n * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers\n */\n$.validator.addMethod( \"phoneUK\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\(|\\)|\\s+|-/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/ );\n}, \"Please specify a valid phone number.\" );\n\n/**\n * Matches US phone number format\n *\n * where the area code may not start with 1 and the prefix may not start with 1\n * allows '-' or ' ' as a separator and allows parens around area code\n * some people may want to put a '1' in front of their number\n *\n * 1(212)-999-2345 or\n * 212 999 2344 or\n * 212-999-0983\n *\n * but not\n * 111-123-5434\n * and not\n * 212 123 4567\n */\n$.validator.addMethod( \"phoneUS\", function( phone_number, element ) {\n\tphone_number = phone_number.replace( /\\s+/g, \"\" );\n\treturn this.optional( element ) || phone_number.length > 9 &&\n\t\tphone_number.match( /^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]\\d{2}-?\\d{4}$/ );\n}, \"Please specify a valid phone number.\" );\n\n/*\n* Valida CEPs do brasileiros:\n*\n* Formatos aceitos:\n* 99999-999\n* 99.999-999\n* 99999999\n*/\n$.validator.addMethod( \"postalcodeBR\", function( cep_value, element ) {\n\treturn this.optional( element ) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test( cep_value );\n}, \"Informe um CEP válido.\" );\n\n/**\n * Matches a valid Canadian Postal Code\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H 0H0\", element )\n * @result true\n *\n * @example jQuery.validator.methods.postalCodeCA( \"H0H0H0\", element )\n * @result false\n *\n * @name jQuery.validator.methods.postalCodeCA\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"postalCodeCA\", function( value, element ) {\n\treturn this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test( value );\n}, \"Please specify a valid postal code.\" );\n\n/* Matches Italian postcode (CAP) */\n$.validator.addMethod( \"postalcodeIT\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}$/.test( value );\n}, \"Please specify a valid postal code.\" );\n\n$.validator.addMethod( \"postalcodeNL\", function( value, element ) {\n\treturn this.optional( element ) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test( value );\n}, \"Please specify a valid postal code.\" );\n\n// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)\n$.validator.addMethod( \"postcodeUK\", function( value, element ) {\n\treturn this.optional( element ) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test( value );\n}, \"Please specify a valid UK postcode.\" );\n\n/*\n * Lets you say \"at least X inputs that match selector Y must be filled.\"\n *\n * The end result is that neither of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\n *\t...will validate unless at least one of them is filled.\n *\n * partnumber:\t{require_from_group: [1,\".productinfo\"]},\n * description: {require_from_group: [1,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n */\n$.validator.addMethod( \"require_from_group\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_req_grp\" ) ? $fieldsFirst.data( \"valid_req_grp\" ) : $.extend( {}, this ),\n\t\tisValid = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_req_grp\", validator );\n\n\t// If element isn't being validated, run each require_from_group field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please fill at least {0} of these fields.\" ) );\n\n/*\n * Lets you say \"either at least X inputs that match selector Y must be filled,\n * OR they must all be skipped (left blank).\"\n *\n * The end result, is that none of these inputs:\n *\n *\t<input class=\"productinfo\" name=\"partnumber\">\n *\t<input class=\"productinfo\" name=\"description\">\n *\t<input class=\"productinfo\" name=\"color\">\n *\n *\t...will validate unless either at least two of them are filled,\n *\tOR none of them are.\n *\n * partnumber:\t{skip_or_fill_minimum: [2,\".productinfo\"]},\n * description: {skip_or_fill_minimum: [2,\".productinfo\"]},\n * color:\t\t{skip_or_fill_minimum: [2,\".productinfo\"]}\n *\n * options[0]: number of fields that must be filled in the group\n * options[1]: CSS selector that defines the group of conditionally required fields\n *\n */\n$.validator.addMethod( \"skip_or_fill_minimum\", function( value, element, options ) {\n\tvar $fields = $( options[ 1 ], element.form ),\n\t\t$fieldsFirst = $fields.eq( 0 ),\n\t\tvalidator = $fieldsFirst.data( \"valid_skip\" ) ? $fieldsFirst.data( \"valid_skip\" ) : $.extend( {}, this ),\n\t\tnumberFilled = $fields.filter( function() {\n\t\t\treturn validator.elementValue( this );\n\t\t} ).length,\n\t\tisValid = numberFilled === 0 || numberFilled >= options[ 0 ];\n\n\t// Store the cloned validator for future validation\n\t$fieldsFirst.data( \"valid_skip\", validator );\n\n\t// If element isn't being validated, run each skip_or_fill_minimum field's validation rules\n\tif ( !$( element ).data( \"being_validated\" ) ) {\n\t\t$fields.data( \"being_validated\", true );\n\t\t$fields.each( function() {\n\t\t\tvalidator.element( this );\n\t\t} );\n\t\t$fields.data( \"being_validated\", false );\n\t}\n\treturn isValid;\n}, $.validator.format( \"Please either skip these fields or fill at least {0} of them.\" ) );\n\n/* Validates US States and/or Territories by @jdforsythe\n * Can be case insensitive or require capitalization - default is case insensitive\n * Can include US Territories or not - default does not\n * Can include US Military postal abbreviations (AA, AE, AP) - default does not\n *\n * Note: \"States\" always includes DC (District of Colombia)\n *\n * Usage examples:\n *\n *  This is the default - case insensitive, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false,\n *     includeTerritories: false,\n *     includeMilitary: false\n *  }\n *\n *  Only allow capital letters, no territories, no military zones\n *  stateInput: {\n *     caseSensitive: false\n *  }\n *\n *  Case insensitive, include territories but not military zones\n *  stateInput: {\n *     includeTerritories: true\n *  }\n *\n *  Only allow capital letters, include territories and military zones\n *  stateInput: {\n *     caseSensitive: true,\n *     includeTerritories: true,\n *     includeMilitary: true\n *  }\n *\n */\n$.validator.addMethod( \"stateUS\", function( value, element, options ) {\n\tvar isDefault = typeof options === \"undefined\",\n\t\tcaseSensitive = ( isDefault || typeof options.caseSensitive === \"undefined\" ) ? false : options.caseSensitive,\n\t\tincludeTerritories = ( isDefault || typeof options.includeTerritories === \"undefined\" ) ? false : options.includeTerritories,\n\t\tincludeMilitary = ( isDefault || typeof options.includeMilitary === \"undefined\" ) ? false : options.includeMilitary,\n\t\tregex;\n\n\tif ( !includeTerritories && !includeMilitary ) {\n\t\tregex = \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t} else if ( includeTerritories && includeMilitary ) {\n\t\tregex = \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else if ( includeTerritories ) {\n\t\tregex = \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\";\n\t} else {\n\t\tregex = \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\";\n\t}\n\n\tregex = caseSensitive ? new RegExp( regex ) : new RegExp( regex, \"i\" );\n\treturn this.optional( element ) || regex.test( value );\n}, \"Please specify a valid state.\" );\n\n// TODO check if value starts with <, otherwise don't try stripping anything\n$.validator.addMethod( \"strippedminlength\", function( value, element, param ) {\n\treturn $( value ).text().length >= param;\n}, $.validator.format( \"Please enter at least {0} characters.\" ) );\n\n$.validator.addMethod( \"time\", function( value, element ) {\n\treturn this.optional( element ) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test( value );\n}, \"Please enter a valid time, between 00:00 and 23:59.\" );\n\n$.validator.addMethod( \"time12h\", function( value, element ) {\n\treturn this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test( value );\n}, \"Please enter a valid time in 12-hour am/pm format.\" );\n\n// Same as url, but TLD is optional\n$.validator.addMethod( \"url2\", function( value, element ) {\n\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?)|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff])|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62}\\.)))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n}, $.validator.messages.url );\n\n/**\n * Return true, if the value is a valid vehicle identification number (VIN).\n *\n * Works with all kind of text inputs.\n *\n * @example <input type=\"text\" size=\"20\" name=\"VehicleID\" class=\"{required:true,vinUS:true}\" />\n * @desc Declares a required input element whose value must be a valid vehicle identification number.\n *\n * @name $.validator.methods.vinUS\n * @type Boolean\n * @cat Plugins/Validate/Methods\n */\n$.validator.addMethod( \"vinUS\", function( v ) {\n    if ( v.length !== 17 ) {\n        return false;\n    }\n\n    var LL = [ \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\" ],\n        VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],\n        FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],\n        rs = 0,\n        i, n, d, f, cd, cdv;\n\n    for ( i = 0; i < 17; i++ ) {\n        f = FL[ i ];\n        d = v.slice( i, i + 1 );\n        if ( isNaN( d ) ) {\n            d = d.toUpperCase();\n            n = VL[ LL.indexOf( d ) ];\n        } else {\n            n = parseInt( d, 10 );\n        }\n        if ( i === 8 )\n        {\n            cdv = n;\n            if ( d === \"X\" ) {\n                cdv = 10;\n            }\n        }\n        rs += n * f;\n    }\n    cd = rs % 11;\n    if ( cd === cdv ) {\n        return true;\n    }\n    return false;\n}, \"The specified vehicle identification number (VIN) is invalid.\" );\n\n$.validator.addMethod( \"zipcodeUS\", function( value, element ) {\n\treturn this.optional( element ) || /^\\d{5}(-\\d{4})?$/.test( value );\n}, \"The specified US ZIP Code is invalid.\" );\n\n$.validator.addMethod( \"ziprange\", function( value, element ) {\n\treturn this.optional( element ) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test( value );\n}, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx.\" );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ar.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: AR (Arabic; العربية)\n */\n$.extend( $.validator.messages, {\n\trequired: \"هذا الحقل إلزامي\",\n\tremote: \"يرجى تصحيح هذا الحقل للمتابعة\",\n\temail: \"رجاء إدخال عنوان بريد إلكتروني صحيح\",\n\turl: \"رجاء إدخال عنوان موقع إلكتروني صحيح\",\n\tdate: \"رجاء إدخال تاريخ صحيح\",\n\tdateISO: \"رجاء إدخال تاريخ صحيح (ISO)\",\n\tnumber: \"رجاء إدخال عدد بطريقة صحيحة\",\n\tdigits: \"رجاء إدخال أرقام فقط\",\n\tcreditcard: \"رجاء إدخال رقم بطاقة ائتمان صحيح\",\n\tequalTo: \"رجاء إدخال نفس القيمة\",\n\textension: \"رجاء إدخال ملف بامتداد موافق عليه\",\n\tmaxlength: $.validator.format( \"الحد الأقصى لعدد الحروف هو {0}\" ),\n\tminlength: $.validator.format( \"الحد الأدنى لعدد الحروف هو {0}\" ),\n\trangelength: $.validator.format( \"عدد الحروف يجب أن يكون بين {0} و {1}\" ),\n\trange: $.validator.format( \"رجاء إدخال عدد قيمته بين {0} و {1}\" ),\n\tmax: $.validator.format( \"رجاء إدخال عدد أقل من أو يساوي {0}\" ),\n\tmin: $.validator.format( \"رجاء إدخال عدد أكبر من أو يساوي {0}\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_az.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: Az (Azeri; azərbaycan dili)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Bu xana mütləq doldurulmalıdır.\",\n\tremote: \"Zəhmət olmasa, düzgün məna daxil edin.\",\n\temail: \"Zəhmət olmasa, düzgün elektron poçt daxil edin.\",\n\turl: \"Zəhmət olmasa, düzgün URL daxil edin.\",\n\tdate: \"Zəhmət olmasa, düzgün tarix daxil edin.\",\n\tdateISO: \"Zəhmət olmasa, düzgün ISO formatlı tarix daxil edin.\",\n\tnumber: \"Zəhmət olmasa, düzgün rəqəm daxil edin.\",\n\tdigits: \"Zəhmət olmasa, yalnız rəqəm daxil edin.\",\n\tcreditcard: \"Zəhmət olmasa, düzgün kredit kart nömrəsini daxil edin.\",\n\tequalTo: \"Zəhmət olmasa, eyni mənanı bir daha daxil edin.\",\n\textension: \"Zəhmət olmasa, düzgün genişlənməyə malik faylı seçin.\",\n\tmaxlength: $.validator.format( \"Zəhmət olmasa, {0} simvoldan çox olmayaraq daxil edin.\" ),\n\tminlength: $.validator.format( \"Zəhmət olmasa, {0} simvoldan az olmayaraq daxil edin.\" ),\n\trangelength: $.validator.format( \"Zəhmət olmasa, {0} - {1} aralığında uzunluğa malik simvol daxil edin.\" ),\n\trange: $.validator.format( \"Zəhmət olmasa, {0} - {1} aralığında rəqəm daxil edin.\" ),\n\tmax: $.validator.format( \"Zəhmət olmasa, {0} və ondan kiçik rəqəm daxil edin.\" ),\n\tmin: $.validator.format( \"Zəhmət olmasa, {0} və ondan böyük rəqəm daxil edin.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_bg.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: BG (Bulgarian; български език)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Полето е задължително.\",\n\tremote: \"Моля, въведете правилната стойност.\",\n\temail: \"Моля, въведете валиден email.\",\n\turl: \"Моля, въведете валидно URL.\",\n\tdate: \"Моля, въведете валидна дата.\",\n\tdateISO: \"Моля, въведете валидна дата (ISO).\",\n\tnumber: \"Моля, въведете валиден номер.\",\n\tdigits: \"Моля, въведете само цифри.\",\n\tcreditcard: \"Моля, въведете валиден номер на кредитна карта.\",\n\tequalTo: \"Моля, въведете същата стойност отново.\",\n\textension: \"Моля, въведете стойност с валидно разширение.\",\n\tmaxlength: $.validator.format( \"Моля, въведете не повече от {0} символа.\" ),\n\tminlength: $.validator.format( \"Моля, въведете поне {0} символа.\" ),\n\trangelength: $.validator.format( \"Моля, въведете стойност с дължина между {0} и {1} символа.\" ),\n\trange: $.validator.format( \"Моля, въведете стойност между {0} и {1}.\" ),\n\tmax: $.validator.format( \"Моля, въведете стойност по-малка или равна на {0}.\" ),\n\tmin: $.validator.format( \"Моля, въведете стойност по-голяма или равна на {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_bn_BD.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: bn_BD (Bengali, Bangladesh)\n */\n$.extend( $.validator.messages, {\n\trequired: \"এই তথ্যটি আবশ্যক।\",\n\tremote: \"এই তথ্যটি ঠিক করুন।\",\n\temail: \"অনুগ্রহ করে একটি সঠিক মেইল ঠিকানা লিখুন।\",\n\turl: \"অনুগ্রহ করে একটি সঠিক লিঙ্ক দিন।\",\n\tdate: \"তারিখ সঠিক নয়।\",\n\tdateISO: \"অনুগ্রহ করে একটি সঠিক (ISO) তারিখ লিখুন।\",\n\tnumber: \"অনুগ্রহ করে একটি সঠিক নম্বর লিখুন।\",\n\tdigits: \"এখানে শুধু সংখ্যা ব্যবহার করা যাবে।\",\n\tcreditcard: \"অনুগ্রহ করে একটি ক্রেডিট কার্ডের সঠিক নম্বর লিখুন।\",\n\tequalTo: \"একই মান আবার লিখুন।\",\n\textension: \"সঠিক ধরনের ফাইল আপলোড করুন।\",\n\tmaxlength: $.validator.format( \"{0}টির বেশি অক্ষর লেখা যাবে না।\" ),\n\tminlength: $.validator.format( \"{0}টির কম অক্ষর লেখা যাবে না।\" ),\n\trangelength: $.validator.format( \"{0} থেকে {1} টি অক্ষর সম্বলিত মান লিখুন।\" ),\n\trange: $.validator.format( \"{0} থেকে {1} এর মধ্যে একটি মান ব্যবহার করুন।\" ),\n\tmax: $.validator.format( \"অনুগ্রহ করে {0} বা তার চাইতে কম মান ব্যবহার করুন।\" ),\n\tmin: $.validator.format( \"অনুগ্রহ করে {0} বা তার চাইতে বেশি মান ব্যবহার করুন।\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ca.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: CA (Catalan; català)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Aquest camp és obligatori.\",\n\tremote: \"Si us plau, omple aquest camp.\",\n\temail: \"Si us plau, escriu una adreça de correu-e vàlida.\",\n\turl: \"Si us plau, escriu una URL vàlida.\",\n\tdate: \"Si us plau, escriu una data vàlida.\",\n\tdateISO: \"Si us plau, escriu una data (ISO) vàlida.\",\n\tnumber: \"Si us plau, escriu un número enter vàlid.\",\n\tdigits: \"Si us plau, escriu només dígits.\",\n\tcreditcard: \"Si us plau, escriu un número de tarjeta vàlid.\",\n\tequalTo: \"Si us plau, escriu el mateix valor de nou.\",\n\textension: \"Si us plau, escriu un valor amb una extensió acceptada.\",\n\tmaxlength: $.validator.format( \"Si us plau, no escriguis més de {0} caracters.\" ),\n\tminlength: $.validator.format( \"Si us plau, no escriguis menys de {0} caracters.\" ),\n\trangelength: $.validator.format( \"Si us plau, escriu un valor entre {0} i {1} caracters.\" ),\n\trange: $.validator.format( \"Si us plau, escriu un valor entre {0} i {1}.\" ),\n\tmax: $.validator.format( \"Si us plau, escriu un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Si us plau, escriu un valor major o igual a {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_cs.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: CS (Czech; čeština, český jazyk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Tento údaj je povinný.\",\n\tremote: \"Prosím, opravte tento údaj.\",\n\temail: \"Prosím, zadejte platný e-mail.\",\n\turl: \"Prosím, zadejte platné URL.\",\n\tdate: \"Prosím, zadejte platné datum.\",\n\tdateISO: \"Prosím, zadejte platné datum (ISO).\",\n\tnumber: \"Prosím, zadejte číslo.\",\n\tdigits: \"Prosím, zadávejte pouze číslice.\",\n\tcreditcard: \"Prosím, zadejte číslo kreditní karty.\",\n\tequalTo: \"Prosím, zadejte znovu stejnou hodnotu.\",\n\textension: \"Prosím, zadejte soubor se správnou příponou.\",\n\tmaxlength: $.validator.format( \"Prosím, zadejte nejvíce {0} znaků.\" ),\n\tminlength: $.validator.format( \"Prosím, zadejte nejméně {0} znaků.\" ),\n\trangelength: $.validator.format( \"Prosím, zadejte od {0} do {1} znaků.\" ),\n\trange: $.validator.format( \"Prosím, zadejte hodnotu od {0} do {1}.\" ),\n\tmax: $.validator.format( \"Prosím, zadejte hodnotu menší nebo rovnu {0}.\" ),\n\tmin: $.validator.format( \"Prosím, zadejte hodnotu větší nebo rovnu {0}.\" ),\n\tstep: $.validator.format( \"Musí být násobkem čísla {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_da.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: DA (Danish; dansk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dette felt er påkrævet.\",\n\tremote: \"Ret venligst dette felt.\",\n\temail: \"Indtast en gyldig email-adresse.\",\n\turl: \"Indtast en gyldig URL.\",\n\tdate: \"Indtast en gyldig dato.\",\n\tnumber: \"Indtast et tal.\",\n\tdigits: \"Indtast kun cifre.\",\n\tcreditcard: \"Indtast et gyldigt kreditkortnummer.\",\n\tequalTo: \"Indtast den samme værdi igen.\",\n\ttime: \"Angiv en gyldig tid mellem kl. 00:00 og 23:59.\",\n\tipv4: \"Angiv venligst en gyldig IPv4-adresse.\",\n\tipv6: \"Angiv venligst en gyldig IPv6-adresse.\",\n\trequire_from_group:  $.validator.format( \"Angiv mindst {0} af disse felter.\" ),\n\textension: \"Indtast venligst en værdi med en gyldig endelse.\",\n\tpattern: \"Ugyldigt format.\",\n\tlettersonly: \"Angiv venligst kun bogstaver.\",\n\tnowhitespace: \"Må ikke indholde mellemrum.\",\n\tmaxlength: $.validator.format( \"Indtast højst {0} tegn.\" ),\n\tminlength: $.validator.format( \"Indtast mindst {0} tegn.\" ),\n\trangelength: $.validator.format( \"Indtast mindst {0} og højst {1} tegn.\" ),\n\trange: $.validator.format( \"Angiv en værdi mellem {0} og {1}.\" ),\n\tmax: $.validator.format( \"Angiv en værdi der højst er {0}.\" ),\n\tmin: $.validator.format( \"Angiv en værdi der mindst er {0}.\" ),\n\tminWords: $.validator.format( \"Indtast venligst mindst {0} ord.\" ),\n\tmaxWords:  $.validator.format( \"Indtast venligst højst {0} ord.\" ),\n\tstep: $.validator.format( \"Angiv en værdi gange {0}.\" ),\n\tnotEqualTo: \"Angiv en anden værdi, værdierne må ikke være det samme.\",\n\tinteger: \"Angiv et ikke-decimaltal, der er positivt eller negativt.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_de.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: DE (German, Deutsch)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dieses Feld ist ein Pflichtfeld.\",\n\tmaxlength: $.validator.format( \"Geben Sie bitte maximal {0} Zeichen ein.\" ),\n\tminlength: $.validator.format( \"Geben Sie bitte mindestens {0} Zeichen ein.\" ),\n\trangelength: $.validator.format( \"Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein.\" ),\n\temail: \"Geben Sie bitte eine gültige E-Mail-Adresse ein.\",\n\turl: \"Geben Sie bitte eine gültige URL ein.\",\n\tdate: \"Geben Sie bitte ein gültiges Datum ein.\",\n\tnumber: \"Geben Sie bitte eine Nummer ein.\",\n\tdigits: \"Geben Sie bitte nur Ziffern ein.\",\n\tequalTo: \"Wiederholen Sie bitte denselben Wert.\",\n\trange: $.validator.format( \"Geben Sie bitte einen Wert zwischen {0} und {1} ein.\" ),\n\tmax: $.validator.format( \"Geben Sie bitte einen Wert kleiner oder gleich {0} ein.\" ),\n\tmin: $.validator.format( \"Geben Sie bitte einen Wert größer oder gleich {0} ein.\" ),\n\tcreditcard: \"Geben Sie bitte eine gültige Kreditkarten-Nummer ein.\",\n\tremote: \"Korrigieren Sie bitte dieses Feld.\",\n\tdateISO: \"Geben Sie bitte ein gültiges Datum ein (ISO-Format).\",\n\tstep: $.validator.format( \"Geben Sie bitte ein Vielfaches von {0} ein.\" ),\n\tmaxWords: $.validator.format( \"Geben Sie bitte {0} Wörter oder weniger ein.\" ),\n\tminWords: $.validator.format( \"Geben Sie bitte mindestens {0} Wörter ein.\" ),\n\trangeWords: $.validator.format( \"Geben Sie bitte zwischen {0} und {1} Wörtern ein.\" ),\n\taccept: \"Geben Sie bitte einen Wert mit einem gültigen MIME-Typ ein.\",\n\talphanumeric: \"Geben Sie bitte nur Buchstaben (keine Umlaute), Zahlen oder Unterstriche ein.\",\n\tbankaccountNL: \"Geben Sie bitte eine gültige Kontonummer ein.\",\n\tbankorgiroaccountNL: \"Geben Sie bitte eine gültige Bank- oder Girokontonummer ein.\",\n\tbic: \"Geben Sie bitte einen gültigen BIC-Code ein.\",\n\tcifES: \"Geben Sie bitte eine gültige CIF-Nummer ein.\",\n\tcpfBR: \"Geben Sie bitte eine gültige CPF-Nummer ein.\",\n\tcreditcardtypes: \"Geben Sie bitte eine gültige Kreditkarten-Nummer ein.\",\n\tcurrency: \"Geben Sie bitte eine gültige Währung ein.\",\n\textension: \"Geben Sie bitte einen Wert mit einer gültigen Erweiterung ein.\",\n\tgiroaccountNL: \"Geben Sie bitte eine gültige Girokontonummer ein.\",\n\tiban: \"Geben Sie bitte eine gültige IBAN ein.\",\n\tinteger:  \"Geben Sie bitte eine positive oder negative Nicht-Dezimalzahl ein.\",\n\tipv4: \"Geben Sie bitte eine gültige IPv4-Adresse ein.\",\n\tipv6: \"Geben Sie bitte eine gültige IPv6-Adresse ein.\",\n\tlettersonly: \"Geben Sie bitte nur Buchstaben ein.\",\n\tletterswithbasicpunc: \"Geben Sie bitte nur Buchstaben oder Interpunktion ein.\",\n\tmobileNL: \"Geben Sie bitte eine gültige Handynummer ein.\",\n\tmobileUK: \"Geben Sie bitte eine gültige Handynummer ein.\",\n\tnetmask:  \"Geben Sie bitte eine gültige Netzmaske ein.\",\n\tnieES: \"Geben Sie bitte eine gültige NIE-Nummer ein.\",\n\tnifES: \"Geben Sie bitte eine gültige NIF-Nummer ein.\",\n\tnipPL: \"Geben Sie bitte eine gültige NIP-Nummer ein.\",\n\tnotEqualTo: \"Geben Sie bitte einen anderen Wert ein. Die Werte dürfen nicht gleich sein.\",\n\tnowhitespace: \"Kein Leerzeichen bitte.\",\n\tpattern: \"Ungültiges Format.\",\n\tphoneNL: \"Geben Sie bitte eine gültige Telefonnummer ein.\",\n\tphonesUK: \"Geben Sie bitte eine gültige britische Telefonnummer ein.\",\n\tphoneUK: \"Geben Sie bitte eine gültige Telefonnummer ein.\",\n\tphoneUS: \"Geben Sie bitte eine gültige Telefonnummer ein.\",\n\tpostalcodeBR: \"Geben Sie bitte eine gültige brasilianische Postleitzahl ein.\",\n\tpostalCodeCA: \"Geben Sie bitte eine gültige kanadische Postleitzahl ein.\",\n\tpostalcodeIT: \"Geben Sie bitte eine gültige italienische Postleitzahl ein.\",\n\tpostalcodeNL: \"Geben Sie bitte eine gültige niederländische Postleitzahl ein.\",\n\tpostcodeUK: \"Geben Sie bitte eine gültige britische Postleitzahl ein.\",\n\trequire_from_group: $.validator.format( \"Füllen Sie bitte mindestens {0} dieser Felder aus.\" ),\n\tskip_or_fill_minimum: $.validator.format( \"Überspringen Sie bitte diese Felder oder füllen Sie mindestens {0} von ihnen aus.\" ),\n\tstateUS: \"Geben Sie bitte einen gültigen US-Bundesstaat ein.\",\n\tstrippedminlength: $.validator.format( \"Geben Sie bitte mindestens {0} Zeichen ein.\" ),\n\ttime: \"Geben Sie bitte eine gültige Uhrzeit zwischen 00:00 und 23:59 ein.\",\n\ttime12h: \"Geben Sie bitte eine gültige Uhrzeit im 12-Stunden-Format ein.\",\n\tvinUS: \"Die angegebene Fahrzeugidentifikationsnummer (VIN) ist ungültig.\",\n\tzipcodeUS: \"Die angegebene US-Postleitzahl ist ungültig.\",\n\tziprange: \"Ihre Postleitzahl muss im Bereich 902xx-xxxx bis 905xx-xxxx liegen.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_el.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: EL (Greek; ελληνικά)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Αυτό το πεδίο είναι υποχρεωτικό.\",\n\tremote: \"Παρακαλώ διορθώστε αυτό το πεδίο.\",\n\temail: \"Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.\",\n\turl: \"Παρακαλώ εισάγετε ένα έγκυρο URL.\",\n\tdate: \"Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.\",\n\tdateISO: \"Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).\",\n\tnumber: \"Παρακαλώ εισάγετε έναν έγκυρο αριθμό.\",\n\tdigits: \"Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.\",\n\tcreditcard: \"Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.\",\n\tequalTo: \"Παρακαλώ εισάγετε την ίδια τιμή ξανά.\",\n\textension: \"Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.\",\n\tmaxlength: $.validator.format( \"Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες.\" ),\n\tminlength: $.validator.format( \"Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες.\" ),\n\trangelength: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων.\" ),\n\trange: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}.\" ),\n\tmax: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}.\" ),\n\tmin: $.validator.format( \"Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_es.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ES (Spanish; Español)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Este campo es obligatorio.\",\n\tremote: \"Por favor, rellena este campo.\",\n\temail: \"Por favor, escribe una dirección de correo válida.\",\n\turl: \"Por favor, escribe una URL válida.\",\n\tdate: \"Por favor, escribe una fecha válida.\",\n\tdateISO: \"Por favor, escribe una fecha (ISO) válida.\",\n\tnumber: \"Por favor, escribe un número válido.\",\n\tdigits: \"Por favor, escribe sólo dígitos.\",\n\tcreditcard: \"Por favor, escribe un número de tarjeta válido.\",\n\tequalTo: \"Por favor, escribe el mismo valor de nuevo.\",\n\textension: \"Por favor, escribe un valor con una extensión aceptada.\",\n\tmaxlength: $.validator.format( \"Por favor, no escribas más de {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, no escribas menos de {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, escribe un valor entre {0} y {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, escribe un valor entre {0} y {1}.\" ),\n\tmax: $.validator.format( \"Por favor, escribe un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, escribe un valor mayor o igual a {0}.\" ),\n\tnifES: \"Por favor, escribe un NIF válido.\",\n\tnieES: \"Por favor, escribe un NIE válido.\",\n\tcifES: \"Por favor, escribe un CIF válido.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_es_AR.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ES (Spanish; Español)\n * Region: AR (Argentina)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Este campo es obligatorio.\",\n\tremote: \"Por favor, completá este campo.\",\n\temail: \"Por favor, escribí una dirección de correo válida.\",\n\turl: \"Por favor, escribí una URL válida.\",\n\tdate: \"Por favor, escribí una fecha válida.\",\n\tdateISO: \"Por favor, escribí una fecha (ISO) válida.\",\n\tnumber: \"Por favor, escribí un número entero válido.\",\n\tdigits: \"Por favor, escribí sólo dígitos.\",\n\tcreditcard: \"Por favor, escribí un número de tarjeta válido.\",\n\tequalTo: \"Por favor, escribí el mismo valor de nuevo.\",\n\textension: \"Por favor, escribí un valor con una extensión aceptada.\",\n\tmaxlength: $.validator.format( \"Por favor, no escribas más de {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, no escribas menos de {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, escribí un valor entre {0} y {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, escribí un valor entre {0} y {1}.\" ),\n\tmax: $.validator.format( \"Por favor, escribí un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, escribí un valor mayor o igual a {0}.\" ),\n\tnifES: \"Por favor, escribí un NIF válido.\",\n\tnieES: \"Por favor, escribí un NIE válido.\",\n\tcifES: \"Por favor, escribí un CIF válido.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_es_PE.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ES (Spanish; Español)\n * Region: PE (Perú)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Este campo es obligatorio.\",\n\tremote: \"Por favor, llene este campo.\",\n\temail: \"Por favor, escriba un correo electrónico válido.\",\n\turl: \"Por favor, escriba una URL válida.\",\n\tdate: \"Por favor, escriba una fecha válida.\",\n\tdateISO: \"Por favor, escriba una fecha (ISO) válida.\",\n\tnumber: \"Por favor, escriba un número válido.\",\n\tdigits: \"Por favor, escriba sólo dígitos.\",\n\tcreditcard: \"Por favor, escriba un número de tarjeta válido.\",\n\tequalTo: \"Por favor, escriba el mismo valor de nuevo.\",\n\textension: \"Por favor, escriba un valor con una extensión permitida.\",\n\tmaxlength: $.validator.format( \"Por favor, no escriba más de {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, no escriba menos de {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, escriba un valor entre {0} y {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, escriba un valor entre {0} y {1}.\" ),\n\tmax: $.validator.format( \"Por favor, escriba un valor menor o igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, escriba un valor mayor o igual a {0}.\" ),\n\tnifES: \"Por favor, escriba un NIF válido.\",\n\tnieES: \"Por favor, escriba un NIE válido.\",\n\tcifES: \"Por favor, escriba un CIF válido.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_et.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ET (Estonian; eesti, eesti keel)\n */\n$.extend( $.validator.messages, {\n\trequired: \"See väli peab olema täidetud.\",\n\tmaxlength: $.validator.format( \"Palun sisestage vähem kui {0} tähemärki.\" ),\n\tminlength: $.validator.format( \"Palun sisestage vähemalt {0} tähemärki.\" ),\n\trangelength: $.validator.format( \"Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki.\" ),\n\temail: \"Palun sisestage korrektne e-maili aadress.\",\n\turl: \"Palun sisestage korrektne URL.\",\n\tdate: \"Palun sisestage korrektne kuupäev.\",\n\tdateISO: \"Palun sisestage korrektne kuupäev (YYYY-MM-DD).\",\n\tnumber: \"Palun sisestage korrektne number.\",\n\tdigits: \"Palun sisestage ainult numbreid.\",\n\tequalTo: \"Palun sisestage sama väärtus uuesti.\",\n\trange: $.validator.format( \"Palun sisestage väärtus vahemikus {0} kuni {1}.\" ),\n\tmax: $.validator.format( \"Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}.\" ),\n\tmin: $.validator.format( \"Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}.\" ),\n\tcreditcard: \"Palun sisestage korrektne krediitkaardi number.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_eu.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: EU (Basque; euskara, euskera)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Eremu hau beharrezkoa da.\",\n\tremote: \"Mesedez, bete eremu hau.\",\n\temail: \"Mesedez, idatzi baliozko posta helbide bat.\",\n\turl: \"Mesedez, idatzi baliozko URL bat.\",\n\tdate: \"Mesedez, idatzi baliozko data bat.\",\n\tdateISO: \"Mesedez, idatzi baliozko (ISO) data bat.\",\n\tnumber: \"Mesedez, idatzi baliozko zenbaki oso bat.\",\n\tdigits: \"Mesedez, idatzi digituak soilik.\",\n\tcreditcard: \"Mesedez, idatzi baliozko txartel zenbaki bat.\",\n\tequalTo: \"Mesedez, idatzi berdina berriro ere.\",\n\textension: \"Mesedez, idatzi onartutako luzapena duen balio bat.\",\n\tmaxlength: $.validator.format( \"Mesedez, ez idatzi {0} karaktere baino gehiago.\" ),\n\tminlength: $.validator.format( \"Mesedez, ez idatzi {0} karaktere baino gutxiago.\" ),\n\trangelength: $.validator.format( \"Mesedez, idatzi {0} eta {1} karaktere arteko balio bat.\" ),\n\trange: $.validator.format( \"Mesedez, idatzi {0} eta {1} arteko balio bat.\" ),\n\tmax: $.validator.format( \"Mesedez, idatzi {0} edo txikiagoa den balio bat.\" ),\n\tmin: $.validator.format( \"Mesedez, idatzi {0} edo handiagoa den balio bat.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_fa.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: FA (Persian; فارسی)\n */\n$.extend( $.validator.messages, {\n\trequired: \"تکمیل این فیلد اجباری است.\",\n\tremote: \"لطفا این فیلد را تصحیح کنید.\",\n\temail: \"لطفا یک ایمیل صحیح وارد کنید.\",\n\turl: \"لطفا آدرس صحیح وارد کنید.\",\n\tdate: \"لطفا تاریخ صحیح وارد کنید.\",\n\tdateFA: \"لطفا یک تاریخ صحیح وارد کنید.\",\n\tdateISO: \"لطفا تاریخ صحیح وارد کنید (ISO).\",\n\tnumber: \"لطفا عدد صحیح وارد کنید.\",\n\tdigits: \"لطفا تنها رقم وارد کنید.\",\n\tcreditcard: \"لطفا کریدیت کارت صحیح وارد کنید.\",\n\tequalTo: \"لطفا مقدار برابری وارد کنید.\",\n\textension: \"لطفا مقداری وارد کنید که.\",\n\talphanumeric: \"لطفا مقدار را عدد (انگلیسی) وارد کنید.\",\n\tmaxlength: $.validator.format( \"لطفا بیشتر از {0} حرف وارد نکنید.\" ),\n\tminlength: $.validator.format( \"لطفا کمتر از {0} حرف وارد نکنید.\" ),\n\trangelength: $.validator.format( \"لطفا مقداری بین {0} تا {1} حرف وارد کنید.\" ),\n\trange: $.validator.format( \"لطفا مقداری بین {0} تا {1} حرف وارد کنید.\" ),\n\tmax: $.validator.format( \"لطفا مقداری کمتر از {0} وارد کنید.\" ),\n\tmin: $.validator.format( \"لطفا مقداری بیشتر از {0} وارد کنید.\" ),\n\tminWords: $.validator.format( \"لطفا حداقل {0} کلمه وارد کنید.\" ),\n\tmaxWords: $.validator.format( \"لطفا حداکثر {0} کلمه وارد کنید.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_fi.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: FI (Finnish; suomi, suomen kieli)\n */\n$.extend( $.validator.messages, {\n\trequired: \"T&auml;m&auml; kentt&auml; on pakollinen.\",\n\temail: \"Sy&ouml;t&auml; oikea s&auml;hk&ouml;postiosoite.\",\n\turl: \"Sy&ouml;t&auml; oikea URL-osoite.\",\n\tdate: \"Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml;.\",\n\tdateISO: \"Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml; muodossa VVVV-KK-PP.\",\n\tnumber: \"Sy&ouml;t&auml; luku.\",\n\tcreditcard: \"Sy&ouml;t&auml; voimassa oleva luottokorttinumero.\",\n\tdigits: \"Sy&ouml;t&auml; pelk&auml;st&auml;&auml;n numeroita.\",\n\tequalTo: \"Sy&ouml;t&auml; sama arvo uudestaan.\",\n\tmaxlength: $.validator.format( \"Voit sy&ouml;tt&auml;&auml; enint&auml;&auml;n {0} merkki&auml;.\" ),\n\tminlength: $.validator.format( \"V&auml;hint&auml;&auml;n {0} merkki&auml;.\" ),\n\trangelength: $.validator.format( \"Sy&ouml;t&auml; v&auml;hint&auml;&auml;n {0} ja enint&auml;&auml;n {1} merkki&auml;.\" ),\n\trange: $.validator.format( \"Sy&ouml;t&auml; arvo v&auml;lilt&auml; {0}&ndash;{1}.\" ),\n\tmax: $.validator.format( \"Sy&ouml;t&auml; arvo, joka on enint&auml;&auml;n {0}.\" ),\n\tmin: $.validator.format( \"Sy&ouml;t&auml; arvo, joka on v&auml;hint&auml;&auml;n {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_fr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: FR (French; français)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Ce champ est obligatoire.\",\n\tremote: \"Veuillez corriger ce champ.\",\n\temail: \"Veuillez fournir une adresse électronique valide.\",\n\turl: \"Veuillez fournir une adresse URL valide.\",\n\tdate: \"Veuillez fournir une date valide.\",\n\tdateISO: \"Veuillez fournir une date valide (ISO).\",\n\tnumber: \"Veuillez fournir un numéro valide.\",\n\tdigits: \"Veuillez fournir seulement des chiffres.\",\n\tcreditcard: \"Veuillez fournir un numéro de carte de crédit valide.\",\n\tequalTo: \"Veuillez fournir encore la même valeur.\",\n\tnotEqualTo: \"Veuillez fournir une valeur différente, les valeurs ne doivent pas être identiques.\",\n\textension: \"Veuillez fournir une valeur avec une extension valide.\",\n\tmaxlength: $.validator.format( \"Veuillez fournir au plus {0} caractères.\" ),\n\tminlength: $.validator.format( \"Veuillez fournir au moins {0} caractères.\" ),\n\trangelength: $.validator.format( \"Veuillez fournir une valeur qui contient entre {0} et {1} caractères.\" ),\n\trange: $.validator.format( \"Veuillez fournir une valeur entre {0} et {1}.\" ),\n\tmax: $.validator.format( \"Veuillez fournir une valeur inférieure ou égale à {0}.\" ),\n\tmin: $.validator.format( \"Veuillez fournir une valeur supérieure ou égale à {0}.\" ),\n\tstep: $.validator.format( \"Veuillez fournir une valeur multiple de {0}.\" ),\n\tmaxWords: $.validator.format( \"Veuillez fournir au plus {0} mots.\" ),\n\tminWords: $.validator.format( \"Veuillez fournir au moins {0} mots.\" ),\n\trangeWords: $.validator.format( \"Veuillez fournir entre {0} et {1} mots.\" ),\n\tletterswithbasicpunc: \"Veuillez fournir seulement des lettres et des signes de ponctuation.\",\n\talphanumeric: \"Veuillez fournir seulement des lettres, nombres, espaces et soulignages.\",\n\tlettersonly: \"Veuillez fournir seulement des lettres.\",\n\tnowhitespace: \"Veuillez ne pas inscrire d'espaces blancs.\",\n\tziprange: \"Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.\",\n\tinteger: \"Veuillez fournir un nombre non décimal qui est positif ou négatif.\",\n\tvinUS: \"Veuillez fournir un numéro d'identification du véhicule (VIN).\",\n\tdateITA: \"Veuillez fournir une date valide.\",\n\ttime: \"Veuillez fournir une heure valide entre 00:00 et 23:59.\",\n\tphoneUS: \"Veuillez fournir un numéro de téléphone valide.\",\n\tphoneUK: \"Veuillez fournir un numéro de téléphone valide.\",\n\tmobileUK: \"Veuillez fournir un numéro de téléphone mobile valide.\",\n\tstrippedminlength: $.validator.format( \"Veuillez fournir au moins {0} caractères.\" ),\n\temail2: \"Veuillez fournir une adresse électronique valide.\",\n\turl2: \"Veuillez fournir une adresse URL valide.\",\n\tcreditcardtypes: \"Veuillez fournir un numéro de carte de crédit valide.\",\n\tcurrency: \"Veuillez fournir une monnaie valide.\",\n\tipv4: \"Veuillez fournir une adresse IP v4 valide.\",\n\tipv6: \"Veuillez fournir une adresse IP v6 valide.\",\n\trequire_from_group: $.validator.format( \"Veuillez fournir au moins {0} de ces champs.\" ),\n\tnifES: \"Veuillez fournir un numéro NIF valide.\",\n\tnieES: \"Veuillez fournir un numéro NIE valide.\",\n\tcifES: \"Veuillez fournir un numéro CIF valide.\",\n\tpostalCodeCA: \"Veuillez fournir un code postal valide.\",\n\tpattern: \"Format non valide.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ge.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/**\n * @author  @tatocaster <kutaliatato@gmail.com>\n * Translated default messages for the jQuery validation plugin.\n * Locale: GE (Georgian; ქართული)\n */\n$.extend( $.validator.messages, {\n\trequired: \"ეს ველი სავალდებულოა.\",\n\tremote: \"გთხოვთ შეასწოროთ.\",\n\temail: \"გთხოვთ შეიყვანოთ სწორი ფორმატით.\",\n\turl: \"გთხოვთ შეიყვანოთ სწორი ფორმატით.\",\n\tdate: \"გთხოვთ შეიყვანოთ სწორი თარიღი.\",\n\tdateISO: \"გთხოვთ შეიყვანოთ სწორი ფორმატით (ISO).\",\n\tnumber: \"გთხოვთ შეიყვანოთ რიცხვი.\",\n\tdigits: \"დაშვებულია მხოლოდ ციფრები.\",\n\tcreditcard: \"გთხოვთ შეიყვანოთ სწორი ფორმატის ბარათის კოდი.\",\n\tequalTo: \"გთხოვთ შეიყვანოთ იგივე მნიშვნელობა.\",\n\tmaxlength: $.validator.format( \"გთხოვთ შეიყვანოთ არა უმეტეს {0} სიმბოლოსი.\" ),\n\tminlength: $.validator.format( \"შეიყვანეთ მინიმუმ {0} სიმბოლო.\" ),\n\trangelength: $.validator.format( \"გთხოვთ შეიყვანოთ {0} -დან {1} -მდე რაოდენობის სიმბოლოები.\" ),\n\trange: $.validator.format( \"შეიყვანეთ {0} -სა {1} -ს შორის.\" ),\n\tmax: $.validator.format( \"გთხოვთ შეიყვანოთ მნიშვნელობა ნაკლები ან ტოლი {0} -ს.\" ),\n\tmin: $.validator.format( \"გთხოვთ შეიყვანოთ მნიშვნელობა მეტი ან ტოლი {0} -ს.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_gl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: GL (Galician; Galego)\n */\n( function( $ ) {\n\t$.extend( $.validator.messages, {\n\t\trequired: \"Este campo é obrigatorio.\",\n\t\tremote: \"Por favor, cubre este campo.\",\n\t\temail: \"Por favor, escribe unha dirección de correo válida.\",\n\t\turl: \"Por favor, escribe unha URL válida.\",\n\t\tdate: \"Por favor, escribe unha data válida.\",\n\t\tdateISO: \"Por favor, escribe unha data (ISO) válida.\",\n\t\tnumber: \"Por favor, escribe un número válido.\",\n\t\tdigits: \"Por favor, escribe só díxitos.\",\n\t\tcreditcard: \"Por favor, escribe un número de tarxeta válido.\",\n\t\tequalTo: \"Por favor, escribe o mesmo valor de novo.\",\n\t\textension: \"Por favor, escribe un valor cunha extensión aceptada.\",\n\t\tmaxlength: $.validator.format( \"Por favor, non escribas máis de {0} caracteres.\" ),\n\t\tminlength: $.validator.format( \"Por favor, non escribas menos de {0} caracteres.\" ),\n\t\trangelength: $.validator.format( \"Por favor, escribe un valor entre {0} e {1} caracteres.\" ),\n\t\trange: $.validator.format( \"Por favor, escribe un valor entre {0} e {1}.\" ),\n\t\tmax: $.validator.format( \"Por favor, escribe un valor menor ou igual a {0}.\" ),\n\t\tmin: $.validator.format( \"Por favor, escribe un valor maior ou igual a {0}.\" ),\n\t\tnifES: \"Por favor, escribe un NIF válido.\",\n\t\tnieES: \"Por favor, escribe un NIE válido.\",\n\t\tcifES: \"Por favor, escribe un CIF válido.\"\n\t} );\n}( jQuery ) );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_he.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HE (Hebrew; עברית)\n */\n$.extend( $.validator.messages, {\n\trequired: \"השדה הזה הינו שדה חובה\",\n\tremote: \"נא לתקן שדה זה\",\n\temail: \"נא למלא כתובת דוא\\\"ל חוקית\",\n\turl: \"נא למלא כתובת אינטרנט חוקית\",\n\tdate: \"נא למלא תאריך חוקי\",\n\tdateISO: \"נא למלא תאריך חוקי (ISO)\",\n\tnumber: \"נא למלא מספר\",\n\tdigits: \"נא למלא רק מספרים\",\n\tcreditcard: \"נא למלא מספר כרטיס אשראי חוקי\",\n\tequalTo: \"נא למלא את אותו ערך שוב\",\n\textension: \"נא למלא ערך עם סיומת חוקית\",\n\tmaxlength: $.validator.format( \".נא לא למלא יותר מ- {0} תווים\" ),\n\tminlength: $.validator.format( \"נא למלא לפחות {0} תווים\" ),\n\trangelength: $.validator.format( \"נא למלא ערך בין {0} ל- {1} תווים\" ),\n\trange: $.validator.format( \"נא למלא ערך בין {0} ל- {1}\" ),\n\tmax: $.validator.format( \"נא למלא ערך קטן או שווה ל- {0}\" ),\n\tmin: $.validator.format( \"נא למלא ערך גדול או שווה ל- {0}\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_hi.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: Hindi; हिंदी\n */\n$.extend( $.validator.messages, {\n\trequired: \"आवश्यक फ़ील्ड।\",\n\tremote:\"इस फ़ील्ड को जांचें।\",\n\temail: \"एक वैध ई - मेल पते की प्रविष्टि करें।\",\n\turl: \"कृपया एक वैध वेब पता दर्ज करें।\",\n\tdate: \"कृपया कोई मान्य दिनांक दर्ज करें।\",\n\tdateISO: \"कृपया एक मान्य दिनांक (ISO) दर्ज करें।\",\n\tnumber: \"कृपया सही अंक दर्ज करें।\",\n\tdigits: \"केवल संख्याएं दर्ज करें।\",\n\tcreditcard: \"कृपया एक वैध क्रेडिट कार्ड नंबर डालें।\",\n\tequalTo: \"मेल नहीं खाता।\",\n\textension: \"कृपया एक मान्य एक्सटेंशन वाला मान दर्ज करें।\",\n\tmaxlength: $.validator.format( \"अधिक दर्ज न करें {0} वर्णों में से\" ),\n\tminlength: $.validator.format( \"कृपया कम से कम {0} वर्ण दर्ज करें।\" ),\n\trangelength: $.validator.format( \"कृपया {0} और {1} वर्णों के बीच एक मान दर्ज करें।\" ),\n\trange: $.validator.format( \"कृपया {0} और {1} के बीच एक मान दर्ज करें।\" ),\n\tmax: $.validator.format( \"कृपया {0} से कम या उसके बराबर मान दर्ज करें।\" ),\n\tmin: $.validator.format( \"कृपया {0} से अधिक या उसके बराबर मान दर्ज करें।\" ),\n\tnieES: \"कृपया एक मान्य NIE दर्ज करें।\",\n\tcifES: \"कृपया एक मान्य CIF दर्ज करें.\",\n\tcurrency: \"कृपया एक मान्य मुद्रा दर्ज करें।.\",\n\tstep: $.validator.format( \"{0} का गुणज होना चाहिए।\" ),\n\tabaRoutingNumber:\"कृपया एक मान्य रूटिंग नंबर दर्ज करें।\",\n\taccept:\"कृपया एक मान्य माइमटाइप वाला मान दर्ज करें।\",\n\talphanumeric:\"कृपया, केवल अक्षर, संख्याएं और अंडरस्कोर।\",\n\tbankaccountNL:\"कृपया एक वैध बैंक खाता संख्या निर्दिष्ट करें।\",\n\tbankorgiroaccountNL:\"कृपया एक वैध बैंक या जीरो खाता संख्या निर्दिष्ट करें।\",\n\tbic:\"कृपया कोई मान्य BIC कोड निर्दिष्ट करें।\",\n\tziprange:\"आपका ज़िप कोड 902xx-xxxx से 905xx-xxxx की सीमा में होना चाहिए।\",\n\tzipcodeUS:\"निर्दिष्ट यूएस ज़िप कोड अमान्य है।\",\n\tvinUS:\"निर्दिष्ट वाहन पहचान संख्या (VIN) अमान्य है।\",\n\ttime12h:\"कृपया 12 घंटे पूर्वाह्न/अपराह्न प्रारूप में मान्य समय दर्ज करें।\",\n\ttime:\"कृपया 00:00 और 23:59 के बीच एक वैध समय दर्ज करें।\",\n\tstrippedminlength:\"कृपया कम से कम {0} वर्ण दर्ज करें।\",\n\tstateUS:\"कृपया एक वैध प्रदेश निर्दिष्ट करें।\",\n\tskip_or_fill_minimum:\"कृपया या तो इन फ़ील्ड को छोड़ दें या उनमें से कम से कम {0} भरें।\",\n\trequire_from_group:\"कृपया इनमें से कम से कम {0} को भरें।\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_hr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HR (Croatia; hrvatski jezik)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Ovo polje je obavezno.\",\n\tremote: \"Ovo polje treba popraviti.\",\n\temail: \"Unesite ispravnu e-mail adresu.\",\n\turl: \"Unesite ispravan URL.\",\n\tdate: \"Unesite ispravan datum.\",\n\tdateISO: \"Unesite ispravan datum (ISO).\",\n\tnumber: \"Unesite ispravan broj.\",\n\tdigits: \"Unesite samo brojeve.\",\n\tcreditcard: \"Unesite ispravan broj kreditne kartice.\",\n\tequalTo: \"Unesite ponovo istu vrijednost.\",\n\textension: \"Unesite vrijednost sa ispravnom ekstenzijom.\",\n\tmaxlength: $.validator.format( \"Maksimalni broj znakova je {0} .\" ),\n\tminlength: $.validator.format( \"Minimalni broj znakova je {0} .\" ),\n\trangelength: $.validator.format( \"Unesite vrijednost između {0} i {1} znakova.\" ),\n\trange: $.validator.format( \"Unesite vrijednost između {0} i {1}.\" ),\n\tmax: $.validator.format( \"Unesite vrijednost manju ili jednaku {0}.\" ),\n\tmin: $.validator.format( \"Unesite vrijednost veću ili jednaku {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_hu.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HU (Hungarian; Magyar)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Kötelező megadni.\",\n\tmaxlength: $.validator.format( \"Legfeljebb {0} karakter hosszú legyen.\" ),\n\tminlength: $.validator.format( \"Legalább {0} karakter hosszú legyen.\" ),\n\trangelength: $.validator.format( \"Legalább {0} és legfeljebb {1} karakter hosszú legyen.\" ),\n\temail: \"Érvényes e-mail címnek kell lennie.\",\n\turl: \"Érvényes URL-nek kell lennie.\",\n\tdate: \"Dátumnak kell lennie.\",\n\tnumber: \"Számnak kell lennie.\",\n\tdigits: \"Csak számjegyek lehetnek.\",\n\tequalTo: \"Meg kell egyeznie a két értéknek.\",\n\trange: $.validator.format( \"{0} és {1} közé kell esnie.\" ),\n\tmax: $.validator.format( \"Nem lehet nagyobb, mint {0}.\" ),\n\tmin: $.validator.format( \"Nem lehet kisebb, mint {0}.\" ),\n\tcreditcard: \"Érvényes hitelkártyaszámnak kell lennie.\",\n\tremote: \"Kérem javítsa ki ezt a mezőt.\",\n\tdateISO: \"Kérem írjon be egy érvényes dátumot (ISO).\",\n\tstep: $.validator.format( \"A {0} egyik többszörösét adja meg.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_hy_AM.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: HY_AM (Armenian; հայերեն լեզու)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Պարտադիր լրացման դաշտ\",\n\tremote: \"Ներմուծեք ճիշտ արժեքը\",\n\temail: \"Ներմուծեք վավեր էլեկտրոնային փոստի հասցե\",\n\turl: \"Ներմուծեք վավեր URL\",\n\tdate: \"Ներմուծեք վավեր ամսաթիվ\",\n\tdateISO: \"Ներմուծեք ISO ֆորմատով վավեր ամսաթիվ։\",\n\tnumber: \"Ներմուծեք թիվ\",\n\tdigits: \"Ներմուծեք միայն թվեր\",\n\tcreditcard: \"Ներմուծեք ճիշտ բանկային քարտի համար\",\n\tequalTo: \"Ներմուծեք միևնուն արժեքը ևս մեկ անգամ\",\n\textension: \"Ընտրեք ճիշտ ընդլանումով ֆայլ\",\n\tmaxlength: $.validator.format( \"Ներմուծեք ոչ ավել քան {0} նիշ\" ),\n\tminlength: $.validator.format( \"Ներմուծեք ոչ պակաս քան {0} նիշ\" ),\n\trangelength: $.validator.format( \"Ներմուծեք {0}֊ից {1} երկարությամբ արժեք\" ),\n\trange: $.validator.format( \"Ներմուծեք թիվ {0}֊ից {1} միջակայքում\" ),\n\tmax: $.validator.format( \"Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին\" ),\n\tmin: $.validator.format( \"Ներմուծեք թիվ, որը մեծ կամ հավասար է {0}֊ին\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_id.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ID (Indonesia; Indonesian)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Kolom ini diperlukan.\",\n\tremote: \"Harap benarkan kolom ini.\",\n\temail: \"Silakan masukkan format email yang benar.\",\n\turl: \"Silakan masukkan format URL yang benar.\",\n\tdate: \"Silakan masukkan format tanggal yang benar.\",\n\tdateISO: \"Silakan masukkan format tanggal(ISO) yang benar.\",\n\tnumber: \"Silakan masukkan angka yang benar.\",\n\tdigits: \"Harap masukan angka saja.\",\n\tcreditcard: \"Harap masukkan format kartu kredit yang benar.\",\n\tequalTo: \"Harap masukkan nilai yg sama dengan sebelumnya.\",\n\tmaxlength: $.validator.format( \"Input dibatasi hanya {0} karakter.\" ),\n\tminlength: $.validator.format( \"Input tidak kurang dari {0} karakter.\" ),\n\trangelength: $.validator.format( \"Panjang karakter yg diizinkan antara {0} dan {1} karakter.\" ),\n\trange: $.validator.format( \"Harap masukkan nilai antara {0} dan {1}.\" ),\n\tmax: $.validator.format( \"Harap masukkan nilai lebih kecil atau sama dengan {0}.\" ),\n\tmin: $.validator.format( \"Harap masukkan nilai lebih besar atau sama dengan {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_is.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: IS (Icelandic; íslenska)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Þessi reitur er nauðsynlegur.\",\n\tremote: \"Lagaðu þennan reit.\",\n\tmaxlength: $.validator.format( \"Sláðu inn mest {0} stafi.\" ),\n\tminlength: $.validator.format( \"Sláðu inn minnst {0} stafi.\" ),\n\trangelength: $.validator.format( \"Sláðu inn minnst {0} og mest {1} stafi.\" ),\n\temail: \"Sláðu inn gilt netfang.\",\n\turl: \"Sláðu inn gilda vefslóð.\",\n\tdate: \"Sláðu inn gilda dagsetningu.\",\n\tnumber: \"Sláðu inn tölu.\",\n\tdigits: \"Sláðu inn tölustafi eingöngu.\",\n\tequalTo: \"Sláðu sama gildi inn aftur.\",\n\trange: $.validator.format( \"Sláðu inn gildi milli {0} og {1}.\" ),\n\tmax: $.validator.format( \"Sláðu inn gildi sem er minna en eða jafnt og {0}.\" ),\n\tmin: $.validator.format( \"Sláðu inn gildi sem er stærra en eða jafnt og {0}.\" ),\n\tcreditcard: \"Sláðu inn gilt greiðslukortanúmer.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_it.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: IT (Italian; Italiano)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Campo obbligatorio.\",\n\tremote: \"Controlla questo campo.\",\n\temail: \"Inserisci un indirizzo email valido.\",\n\turl: \"Inserisci un indirizzo web valido.\",\n\tdate: \"Inserisci una data valida.\",\n\tdateISO: \"Inserisci una data valida (ISO).\",\n\tnumber: \"Inserisci un numero valido.\",\n\tdigits: \"Inserisci solo numeri.\",\n\tcreditcard: \"Inserisci un numero di carta di credito valido.\",\n\tequalTo: \"Il valore non corrisponde.\",\n\textension: \"Inserisci un valore con un&apos;estensione valida.\",\n\tmaxlength: $.validator.format( \"Non inserire pi&ugrave; di {0} caratteri.\" ),\n\tminlength: $.validator.format( \"Inserisci almeno {0} caratteri.\" ),\n\trangelength: $.validator.format( \"Inserisci un valore compreso tra {0} e {1} caratteri.\" ),\n\trange: $.validator.format( \"Inserisci un valore compreso tra {0} e {1}.\" ),\n\tmax: $.validator.format( \"Inserisci un valore minore o uguale a {0}.\" ),\n\tmin: $.validator.format( \"Inserisci un valore maggiore o uguale a {0}.\" ),\n\tnifES: \"Inserisci un NIF valido.\",\n\tnieES: \"Inserisci un NIE valido.\",\n\tcifES: \"Inserisci un CIF valido.\",\n\tcurrency: \"Inserisci una valuta valida.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ja.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: JA (Japanese; 日本語)\n */\n$.extend( $.validator.messages, {\n\trequired: \"このフィールドは必須です。\",\n\tremote: \"このフィールドを修正してください。\",\n\temail: \"有効なEメールアドレスを入力してください。\",\n\turl: \"有効なURLを入力してください。\",\n\tdate: \"有効な日付を入力してください。\",\n\tdateISO: \"有効な日付（ISO）を入力してください。\",\n\tnumber: \"有効な数字を入力してください。\",\n\tdigits: \"数字のみを入力してください。\",\n\tcreditcard: \"有効なクレジットカード番号を入力してください。\",\n\tequalTo: \"同じ値をもう一度入力してください。\",\n\textension: \"有効な拡張子を含む値を入力してください。\",\n\tmaxlength: $.validator.format( \"{0} 文字以内で入力してください。\" ),\n\tminlength: $.validator.format( \"{0} 文字以上で入力してください。\" ),\n\trangelength: $.validator.format( \"{0} 文字から {1} 文字までの値を入力してください。\" ),\n\trange: $.validator.format( \"{0} から {1} までの値を入力してください。\" ),\n\tstep: $.validator.format( \"{0} の倍数を入力してください。\" ),\n\tmax: $.validator.format( \"{0} 以下の値を入力してください。\" ),\n\tmin: $.validator.format( \"{0} 以上の値を入力してください。\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ka.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: KA (Georgian; ქართული)\n */\n$.extend( $.validator.messages, {\n\trequired: \"ამ ველის შევსება აუცილებელია.\",\n\tremote: \"გთხოვთ მიუთითოთ სწორი მნიშვნელობა.\",\n\temail: \"გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.\",\n\turl: \"გთხოვთ მიუთითოთ კორექტული URL.\",\n\tdate: \"გთხოვთ მიუთითოთ კორექტული თარიღი.\",\n\tdateISO: \"გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.\",\n\tnumber: \"გთხოვთ მიუთითოთ ციფრი.\",\n\tdigits: \"გთხოვთ მიუთითოთ მხოლოდ ციფრები.\",\n\tcreditcard: \"გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.\",\n\tequalTo: \"გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.\",\n\textension: \"გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.\",\n\tmaxlength: $.validator.format( \"დასაშვებია არაუმეტეს {0} სიმბოლო.\" ),\n\tminlength: $.validator.format( \"აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო.\" ),\n\trangelength: $.validator.format( \"ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე.\" ),\n\trange: $.validator.format( \"გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე.\" ),\n\tmax: $.validator.format( \"გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს.\" ),\n\tmin: $.validator.format( \"გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_kk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: KK (Kazakh; қазақ тілі)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Бұл өрісті міндетті түрде толтырыңыз.\",\n\tremote: \"Дұрыс мағына енгізуіңізді сұраймыз.\",\n\temail: \"Нақты электронды поштаңызды енгізуіңізді сұраймыз.\",\n\turl: \"Нақты URL-ды енгізуіңізді сұраймыз.\",\n\tdate: \"Нақты URL-ды енгізуіңізді сұраймыз.\",\n\tdateISO: \"Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.\",\n\tnumber: \"Күнді енгізуіңізді сұраймыз.\",\n\tdigits: \"Тек қана сандарды енгізуіңізді сұраймыз.\",\n\tcreditcard: \"Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.\",\n\tequalTo: \"Осы мәнді қайта енгізуіңізді сұраймыз.\",\n\textension: \"Файлдың кеңейтуін дұрыс таңдаңыз.\",\n\tmaxlength: $.validator.format( \"Ұзындығы {0} символдан көр болмасын.\" ),\n\tminlength: $.validator.format( \"Ұзындығы {0} символдан аз болмасын.\" ),\n\trangelength: $.validator.format( \"Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз.\" ),\n\trange: $.validator.format( \"Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз.\" ),\n\tmax: $.validator.format( \"{0} аз немесе тең санын енгізуіңіді сұраймыз.\" ),\n\tmin: $.validator.format( \"{0} көп немесе тең санын енгізуіңізді сұраймыз.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ko.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: KO (Korean; 한국어)\n */\n$.extend( $.validator.messages, {\n\trequired: \"필수 항목입니다.\",\n\tremote: \"항목을 수정하세요.\",\n\temail: \"유효하지 않은 E-Mail주소입니다.\",\n\turl: \"유효하지 않은 URL입니다.\",\n\tdate: \"올바른 날짜를 입력하세요.\",\n\tdateISO: \"올바른 날짜(ISO)를 입력하세요.\",\n\tnumber: \"유효한 숫자가 아닙니다.\",\n\tdigits: \"숫자만 입력 가능합니다.\",\n\tcreditcard: \"신용카드 번호가 바르지 않습니다.\",\n\tequalTo: \"같은 값을 다시 입력하세요.\",\n\textension: \"올바른 확장자가 아닙니다.\",\n\tmaxlength: $.validator.format( \"{0}자를 넘을 수 없습니다. \" ),\n\tminlength: $.validator.format( \"{0}자 이상 입력하세요.\" ),\n\trangelength: $.validator.format( \"문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요.\" ),\n\trange: $.validator.format( \"{0} 에서 {1} 사이의 값을 입력하세요.\" ),\n\tmax: $.validator.format( \"{0} 이하의 값을 입력하세요.\" ),\n\tmin: $.validator.format( \"{0} 이상의 값을 입력하세요.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_lt.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: LT (Lithuanian; lietuvių kalba)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Šis laukas yra privalomas.\",\n\tremote: \"Prašau pataisyti šį lauką.\",\n\temail: \"Prašau įvesti teisingą elektroninio pašto adresą.\",\n\turl: \"Prašau įvesti teisingą URL.\",\n\tdate: \"Prašau įvesti teisingą datą.\",\n\tdateISO: \"Prašau įvesti teisingą datą (ISO).\",\n\tnumber: \"Prašau įvesti teisingą skaičių.\",\n\tdigits: \"Prašau naudoti tik skaitmenis.\",\n\tcreditcard: \"Prašau įvesti teisingą kreditinės kortelės numerį.\",\n\tequalTo: \"Prašau įvestį tą pačią reikšmę dar kartą.\",\n\textension: \"Prašau įvesti reikšmę su teisingu plėtiniu.\",\n\tmaxlength: $.validator.format( \"Prašau įvesti ne daugiau kaip {0} simbolių.\" ),\n\tminlength: $.validator.format( \"Prašau įvesti bent {0} simbolius.\" ),\n\trangelength: $.validator.format( \"Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių.\" ),\n\trange: $.validator.format( \"Prašau įvesti reikšmę intervale nuo {0} iki {1}.\" ),\n\tmax: $.validator.format( \"Prašau įvesti reikšmę mažesnę arba lygią {0}.\" ),\n\tmin: $.validator.format( \"Prašau įvesti reikšmę didesnę arba lygią {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_lv.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: LV (Latvian; latviešu valoda)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Šis lauks ir obligāts.\",\n\tremote: \"Lūdzu, pārbaudiet šo lauku.\",\n\temail: \"Lūdzu, ievadiet derīgu e-pasta adresi.\",\n\turl: \"Lūdzu, ievadiet derīgu URL adresi.\",\n\tdate: \"Lūdzu, ievadiet derīgu datumu.\",\n\tdateISO: \"Lūdzu, ievadiet derīgu datumu (ISO).\",\n\tnumber: \"Lūdzu, ievadiet derīgu numuru.\",\n\tdigits: \"Lūdzu, ievadiet tikai ciparus.\",\n\tcreditcard: \"Lūdzu, ievadiet derīgu kredītkartes numuru.\",\n\tequalTo: \"Lūdzu, ievadiet to pašu vēlreiz.\",\n\textension: \"Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.\",\n\tmaxlength: $.validator.format( \"Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes.\" ),\n\tminlength: $.validator.format( \"Lūdzu, ievadiet vismaz {0} rakstzīmes.\" ),\n\trangelength: $.validator.format( \"Lūdzu ievadiet {0} līdz {1} rakstzīmes.\" ),\n\trange: $.validator.format( \"Lūdzu, ievadiet skaitli no {0} līdz {1}.\" ),\n\tmax: $.validator.format( \"Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}.\" ),\n\tmin: $.validator.format( \"Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_mk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: MK (Macedonian; македонски јазик)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Полето е задолжително.\",\n\tremote: \"Поправете го ова поле.\",\n\temail: \"Внесете правилна e-mail адреса.\",\n\turl: \"Внесете правилен URL.\",\n\tdate: \"Внесете правилен датум.\",\n\tdateISO: \"Внесете правилен датум (ISO).\",\n\tnumber: \"Внесете правилен број.\",\n\tdigits: \"Внесете само бројки.\",\n\tcreditcard: \"Внесете правилен број на кредитната картичка.\",\n\tequalTo: \"Внесете ја истата вредност повторно.\",\n\textension: \"Внесете вредност со соодветна екстензија.\",\n\tmaxlength: $.validator.format( \"Внесете максимално {0} знаци.\" ),\n\tminlength: $.validator.format( \"Внесете барем {0} знаци.\" ),\n\trangelength: $.validator.format( \"Внесете вредност со должина помеѓу {0} и {1} знаци.\" ),\n\trange: $.validator.format( \"Внесете вредност помеѓу {0} и {1}.\" ),\n\tmax: $.validator.format( \"Внесете вредност помала или еднаква на {0}.\" ),\n\tmin: $.validator.format( \"Внесете вредност поголема или еднаква на {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_my.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: MY (Malay; Melayu)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Medan ini diperlukan.\",\n\tremote: \"Sila betulkan medan ini.\",\n\temail: \"Sila masukkan alamat emel yang betul.\",\n\turl: \"Sila masukkan URL yang betul.\",\n\tdate: \"Sila masukkan tarikh yang betul.\",\n\tdateISO: \"Sila masukkan tarikh(ISO) yang betul.\",\n\tnumber: \"Sila masukkan nombor yang betul.\",\n\tdigits: \"Sila masukkan nilai digit sahaja.\",\n\tcreditcard: \"Sila masukkan nombor kredit kad yang betul.\",\n\tequalTo: \"Sila masukkan nilai yang sama semula.\",\n\textension: \"Sila masukkan nilai yang telah diterima.\",\n\tmaxlength: $.validator.format( \"Sila masukkan tidak lebih dari {0} aksara.\" ),\n\tminlength: $.validator.format( \"Sila masukkan sekurang-kurangnya {0} aksara.\" ),\n\trangelength: $.validator.format( \"Sila masukkan antara {0} dan {1} panjang aksara.\" ),\n\trange: $.validator.format( \"Sila masukkan nilai antara {0} dan {1} aksara.\" ),\n\tmax: $.validator.format( \"Sila masukkan nilai yang kurang atau sama dengan {0}.\" ),\n\tmin: $.validator.format( \"Sila masukkan nilai yang lebih atau sama dengan {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_nl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: NL (Dutch; Nederlands, Vlaams)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Dit is een verplicht veld.\",\n\tremote: \"Controleer dit veld.\",\n\temail: \"Vul hier een geldig e-mailadres in.\",\n\turl: \"Vul hier een geldige URL in.\",\n\tdate: \"Vul hier een geldige datum in.\",\n\tdateISO: \"Vul hier een geldige datum in (ISO-formaat).\",\n\tnumber: \"Vul hier een geldig getal in.\",\n\tdigits: \"Vul hier alleen getallen in.\",\n\tcreditcard: \"Vul hier een geldig creditcardnummer in.\",\n\tequalTo: \"Vul hier dezelfde waarde in.\",\n\textension: \"Vul hier een waarde in met een geldige extensie.\",\n\tmaxlength: $.validator.format( \"Vul hier maximaal {0} tekens in.\" ),\n\tminlength: $.validator.format( \"Vul hier minimaal {0} tekens in.\" ),\n\trangelength: $.validator.format( \"Vul hier een waarde in van minimaal {0} en maximaal {1} tekens.\" ),\n\trange: $.validator.format( \"Vul hier een waarde in van minimaal {0} en maximaal {1}.\" ),\n\tmax: $.validator.format( \"Vul hier een waarde in kleiner dan of gelijk aan {0}.\" ),\n\tmin: $.validator.format( \"Vul hier een waarde in groter dan of gelijk aan {0}.\" ),\n\tstep: $.validator.format( \"Vul hier een veelvoud van {0} in.\" ),\n\n\t// For validations in additional-methods.js\n\tiban: \"Vul hier een geldig IBAN in.\",\n\tdateNL: \"Vul hier een geldige datum in.\",\n\tphoneNL: \"Vul hier een geldig Nederlands telefoonnummer in.\",\n\tmobileNL: \"Vul hier een geldig Nederlands mobiel telefoonnummer in.\",\n\tpostalcodeNL: \"Vul hier een geldige postcode in.\",\n\tbankaccountNL: \"Vul hier een geldig bankrekeningnummer in.\",\n\tgiroaccountNL: \"Vul hier een geldig gironummer in.\",\n\tbankorgiroaccountNL: \"Vul hier een geldig bank- of gironummer in.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_no.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: NO (Norwegian; Norsk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Angi en verdi.\",\n\tremote: \"Ugyldig verdi.\",\n\temail: \"Angi en gyldig epostadresse.\",\n\turl: \"Angi en gyldig URL.\",\n\tdate: \"Angi en gyldig dato.\",\n\tdateISO: \"Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).\",\n\tnumber: \"Angi et gyldig tall.\",\n\tdigits: \"Skriv kun tall.\",\n\tequalTo: \"Skriv samme verdi igjen.\",\n\tmaxlength: $.validator.format( \"Maksimalt {0} tegn.\" ),\n\tminlength: $.validator.format( \"Minimum {0} tegn.\" ),\n\trangelength: $.validator.format( \"Angi minimum {0} og maksimum {1} tegn.\" ),\n\trange: $.validator.format( \"Angi en verdi mellom {0} og {1}.\" ),\n\tmax: $.validator.format( \"Angi en verdi som er mindre eller lik {0}.\" ),\n\tmin: $.validator.format( \"Angi en verdi som er st&oslash;rre eller lik {0}.\" ),\n\tstep: $.validator.format( \"Angi en verdi ganger {0}.\" ),\n\tcreditcard: \"Angi et gyldig kredittkortnummer.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_pl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: PL (Polish; język polski, polszczyzna)\n */\n$.extend( $.validator.messages, {\n\trequired: \"To pole jest wymagane.\",\n\tremote: \"Proszę o wypełnienie tego pola.\",\n\temail: \"Proszę o podanie prawidłowego adresu email.\",\n\turl: \"Proszę o podanie prawidłowego URL.\",\n\tdate: \"Proszę o podanie prawidłowej daty.\",\n\tdateISO: \"Proszę o podanie prawidłowej daty (ISO).\",\n\tnumber: \"Proszę o podanie prawidłowej liczby.\",\n\tdigits: \"Proszę o podanie samych cyfr.\",\n\tcreditcard: \"Proszę o podanie prawidłowej karty kredytowej.\",\n\tequalTo: \"Proszę o podanie tej samej wartości ponownie.\",\n\textension: \"Proszę o podanie wartości z prawidłowym rozszerzeniem.\",\n\tnipPL: \"Proszę o podanie prawidłowego numeru NIP.\",\n\tphonePL: \"Proszę o podanie prawidłowego numeru telefonu.\",\n\tmaxlength: $.validator.format( \"Proszę o podanie nie więcej niż {0} znaków.\" ),\n\tminlength: $.validator.format( \"Proszę o podanie przynajmniej {0} znaków.\" ),\n\trangelength: $.validator.format( \"Proszę o podanie wartości o długości od {0} do {1} znaków.\" ),\n\trange: $.validator.format( \"Proszę o podanie wartości z przedziału od {0} do {1}.\" ),\n\tmax: $.validator.format( \"Proszę o podanie wartości mniejszej bądź równej {0}.\" ),\n\tmin: $.validator.format( \"Proszę o podanie wartości większej bądź równej {0}.\" ),\n\tpattern: $.validator.format( \"Pole zawiera niedozwolone znaki.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_pt_BR.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: PT (Portuguese; português)\n * Region: BR (Brazil)\n */\n$.extend( $.validator.messages, {\n\n\t// Core\n\trequired: \"Este campo &eacute; obrigat&oacute;rio.\",\n\tremote: \"Por favor, corrija este campo.\",\n\temail: \"Por favor, forne&ccedil;a um endere&ccedil;o de email v&aacute;lido.\",\n\turl: \"Por favor, forne&ccedil;a uma URL v&aacute;lida.\",\n\tdate: \"Por favor, forne&ccedil;a uma data v&aacute;lida.\",\n\tdateISO: \"Por favor, forne&ccedil;a uma data v&aacute;lida (ISO).\",\n\tnumber: \"Por favor, forne&ccedil;a um n&uacute;mero v&aacute;lido.\",\n\tdigits: \"Por favor, forne&ccedil;a somente d&iacute;gitos.\",\n\tcreditcard: \"Por favor, forne&ccedil;a um cart&atilde;o de cr&eacute;dito v&aacute;lido.\",\n\tequalTo: \"Por favor, forne&ccedil;a o mesmo valor novamente.\",\n\tmaxlength: $.validator.format( \"Por favor, forne&ccedil;a n&atilde;o mais que {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, forne&ccedil;a ao menos {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, forne&ccedil;a um valor entre {0} e {1} caracteres de comprimento.\" ),\n\trange: $.validator.format( \"Por favor, forne&ccedil;a um valor entre {0} e {1}.\" ),\n\tmax: $.validator.format( \"Por favor, forne&ccedil;a um valor menor ou igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, forne&ccedil;a um valor maior ou igual a {0}.\" ),\n\tstep: $.validator.format( \"Por favor, forne&ccedil;a um valor m&uacute;ltiplo de {0}.\" ),\n\n\t// Metodos Adicionais\n\tmaxWords: $.validator.format( \"Por favor, forne&ccedil;a com {0} palavras ou menos.\" ),\n\tminWords: $.validator.format( \"Por favor, forne&ccedil;a pelo menos {0} palavras.\" ),\n\trangeWords: $.validator.format( \"Por favor, forne&ccedil;a entre {0} e {1} palavras.\" ),\n\taccept: \"Por favor, forne&ccedil;a um tipo v&aacute;lido.\",\n\talphanumeric: \"Por favor, forne&ccedil;a somente com letras, n&uacute;meros e sublinhados.\",\n\tbankaccountNL: \"Por favor, forne&ccedil;a com um n&uacute;mero de conta banc&aacute;ria v&aacute;lida.\",\n\tbankorgiroaccountNL: \"Por favor, forne&ccedil;a um banco v&aacute;lido ou n&uacute;mero de conta.\",\n\tbic: \"Por favor, forne&ccedil;a um c&oacute;digo BIC v&aacute;lido.\",\n\tcifES: \"Por favor, forne&ccedil;a um c&oacute;digo CIF v&aacute;lido.\",\n\tcreditcardtypes: \"Por favor, forne&ccedil;a um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.\",\n\tcurrency: \"Por favor, forne&ccedil;a uma moeda v&aacute;lida.\",\n\tdateFA: \"Por favor, forne&ccedil;a uma data correta.\",\n\tdateITA: \"Por favor, forne&ccedil;a uma data correta.\",\n\tdateNL: \"Por favor, forne&ccedil;a uma data correta.\",\n\textension: \"Por favor, forne&ccedil;a um valor com uma extens&atilde;o v&aacute;lida.\",\n\tgiroaccountNL: \"Por favor, forne&ccedil;a um n&uacute;mero de conta corrente v&aacute;lido.\",\n\tiban: \"Por favor, forne&ccedil;a um c&oacute;digo IBAN v&aacute;lido.\",\n\tinteger: \"Por favor, forne&ccedil;a um n&uacute;mero n&atilde;o decimal.\",\n\tipv4: \"Por favor, forne&ccedil;a um IPv4 v&aacute;lido.\",\n\tipv6: \"Por favor, forne&ccedil;a um IPv6 v&aacute;lido.\",\n\tlettersonly: \"Por favor, forne&ccedil;a apenas com letras.\",\n\tletterswithbasicpunc: \"Por favor, forne&ccedil;a apenas letras ou pontua&ccedil;ões.\",\n\tmobileNL: \"Por favor, fornece&ccedil;a um n&uacute;mero v&aacute;lido de telefone.\",\n\tmobileUK: \"Por favor, fornece&ccedil;a um n&uacute;mero v&aacute;lido de telefone.\",\n\tnieES: \"Por favor, forne&ccedil;a um NIE v&aacute;lido.\",\n\tnifES: \"Por favor, forne&ccedil;a um NIF v&aacute;lido.\",\n\tnowhitespace: \"Por favor, n&atilde;o utilize espa&ccedil;os em branco.\",\n\tpattern: \"O formato fornecido &eacute; inv&aacute;lido.\",\n\tphoneNL: \"Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tphoneUK: \"Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tphoneUS: \"Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tphonesUK: \"Por favor, forne&ccedil;a um n&uacute;mero de telefone v&aacute;lido.\",\n\tpostalCodeCA: \"Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostalcodeIT: \"Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostalcodeNL: \"Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostcodeUK: \"Por favor, forne&ccedil;a um n&uacute;mero de c&oacute;digo postal v&aacute;lido.\",\n\tpostalcodeBR: \"Por favor, forne&ccedil;a um CEP v&aacute;lido.\",\n\trequire_from_group: $.validator.format( \"Por favor, forne&ccedil;a pelo menos {0} destes campos.\" ),\n\tskip_or_fill_minimum: $.validator.format( \"Por favor, optar entre ignorar esses campos ou preencher pelo menos {0} deles.\" ),\n\tstateUS: \"Por favor, forne&ccedil;a um estado v&aacute;lido.\",\n\tstrippedminlength: $.validator.format( \"Por favor, forne&ccedil;a pelo menos {0} caracteres.\" ),\n\ttime: \"Por favor, forne&ccedil;a um hor&aacute;rio v&aacute;lido, no intervado de 00:00 a 23:59.\",\n\ttime12h: \"Por favor, forne&ccedil;a um hor&aacute;rio v&aacute;lido, no intervado de 01:00 a 12:59 am/pm.\",\n\turl2: \"Por favor, forne&ccedil;a uma URL v&aacute;lida.\",\n\tvinUS: \"O n&uacute;mero de identifica&ccedil;&atilde;o de ve&iacute;culo informado (VIN) &eacute; inv&aacute;lido.\",\n\tzipcodeUS: \"Por favor, forne&ccedil;a um c&oacute;digo postal americano v&aacute;lido.\",\n\tziprange: \"O c&oacute;digo postal deve estar entre 902xx-xxxx e 905xx-xxxx.\",\n\tcpfBR: \"Por favor, forne&ccedil;a um CPF v&aacute;lido.\",\n\tnisBR: \"Por favor, forne&ccedil;a um NIS/PIS v&aacute;lido.\",\n\tcnhBR: \"Por favor, forne&ccedil;a um CNH v&aacute;lido.\",\n\tcnpjBR: \"Por favor, forne&ccedil;a um CNPJ v&aacute;lido.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_pt_PT.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: PT (Portuguese; português)\n * Region: PT (Portugal)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Campo de preenchimento obrigat&oacute;rio.\",\n\tremote: \"Por favor, corrija este campo.\",\n\temail: \"Por favor, introduza um endere&ccedil;o eletr&oacute;nico v&aacute;lido.\",\n\turl: \"Por favor, introduza um URL v&aacute;lido.\",\n\tdate: \"Por favor, introduza uma data v&aacute;lida.\",\n\tdateISO: \"Por favor, introduza uma data v&aacute;lida (ISO).\",\n\tnumber: \"Por favor, introduza um n&uacute;mero v&aacute;lido.\",\n\tdigits: \"Por favor, introduza apenas d&iacute;gitos.\",\n\tcreditcard: \"Por favor, introduza um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.\",\n\tequalTo: \"Por favor, introduza de novo o mesmo valor.\",\n\textension: \"Por favor, introduza um ficheiro com uma extens&atilde;o v&aacute;lida.\",\n\tmaxlength: $.validator.format( \"Por favor, n&atilde;o introduza mais do que {0} caracteres.\" ),\n\tminlength: $.validator.format( \"Por favor, introduza pelo menos {0} caracteres.\" ),\n\trangelength: $.validator.format( \"Por favor, introduza entre {0} e {1} caracteres.\" ),\n\trange: $.validator.format( \"Por favor, introduza um valor entre {0} e {1}.\" ),\n\tmax: $.validator.format( \"Por favor, introduza um valor menor ou igual a {0}.\" ),\n\tmin: $.validator.format( \"Por favor, introduza um valor maior ou igual a {0}.\" ),\n\tnifES: \"Por favor, introduza um NIF v&aacute;lido.\",\n\tnieES: \"Por favor, introduza um NIE v&aacute;lido.\",\n\tcifES: \"Por favor, introduza um CIF v&aacute;lido.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ro.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: RO (Romanian, limba română)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Acest câmp este obligatoriu.\",\n\tremote: \"Te rugăm să completezi acest câmp.\",\n\temail: \"Te rugăm să introduci o adresă de email validă.\",\n\turl: \"Te rugăm sa introduci o adresă URL validă.\",\n\tdate: \"Te rugăm să introduci o dată corectă.\",\n\tdateISO: \"Te rugăm să introduci o dată (ISO) corectă.\",\n\tnumber: \"Te rugăm să introduci un număr întreg valid.\",\n\tdigits: \"Te rugăm să introduci doar cifre.\",\n\tcreditcard: \"Te rugăm să introduci un numar de carte de credit valid.\",\n\tequalTo: \"Te rugăm să reintroduci valoarea.\",\n\textension: \"Te rugăm să introduci o valoare cu o extensie validă.\",\n\tmaxlength: $.validator.format( \"Te rugăm să nu introduci mai mult de {0} caractere.\" ),\n\tminlength: $.validator.format( \"Te rugăm să introduci cel puțin {0} caractere.\" ),\n\trangelength: $.validator.format( \"Te rugăm să introduci o valoare între {0} și {1} caractere.\" ),\n\trange: $.validator.format( \"Te rugăm să introduci o valoare între {0} și {1}.\" ),\n\tmax: $.validator.format( \"Te rugăm să introduci o valoare egal sau mai mică decât {0}.\" ),\n\tmin: $.validator.format( \"Te rugăm să introduci o valoare egal sau mai mare decât {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ru.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: RU (Russian; русский язык)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Это поле необходимо заполнить.\",\n\tremote: \"Пожалуйста, введите правильное значение.\",\n\temail: \"Пожалуйста, введите корректный адрес электронной почты.\",\n\turl: \"Пожалуйста, введите корректный URL.\",\n\tdate: \"Пожалуйста, введите корректную дату.\",\n\tdateISO: \"Пожалуйста, введите корректную дату в формате ISO.\",\n\tnumber: \"Пожалуйста, введите число.\",\n\tdigits: \"Пожалуйста, вводите только цифры.\",\n\tcreditcard: \"Пожалуйста, введите правильный номер кредитной карты.\",\n\tequalTo: \"Пожалуйста, введите такое же значение ещё раз.\",\n\textension: \"Пожалуйста, выберите файл с правильным расширением.\",\n\tmaxlength: $.validator.format( \"Пожалуйста, введите не больше {0} символов.\" ),\n\tminlength: $.validator.format( \"Пожалуйста, введите не меньше {0} символов.\" ),\n\trangelength: $.validator.format( \"Пожалуйста, введите значение длиной от {0} до {1} символов.\" ),\n\trange: $.validator.format( \"Пожалуйста, введите число от {0} до {1}.\" ),\n\tmax: $.validator.format( \"Пожалуйста, введите число, меньшее или равное {0}.\" ),\n\tmin: $.validator.format( \"Пожалуйста, введите число, большее или равное {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_sd.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SD (Sindhi; سنڌي)\n */\n$.extend( $.validator.messages, {\n    required: \"هنن جاين جي ضرورت آهي\",\n    remote: \"هنن جاين جي ضرورت آهي\",\n    email: \"لکيل اي ميل غلط آهي\",\n    url: \"لکيل ايڊريس غلط آهي\",\n    date: \"لکيل تاريخ غلط آهي\",\n    dateISO: \"جي معيار جي مطابق نه آهي (ISO) لکيل تاريخ\",\n    number: \"لکيل انگ صحيح ناهي\",\n    digits: \"رڳو انگ داخل ڪري سگهجي ٿو\",\n    creditcard: \"لکيل ڪارڊ نمبر صحيح نه آهي\",\n    equalTo: \"داخل ٿيل ڀيٽ صحيح نه آهي\",\n    extension: \"لکيل غلط آهي\",\n    maxlength: $.validator.format( \"وڌ کان وڌ {0} جي داخلا ڪري سگهجي ٿي\" ),\n    minlength: $.validator.format( \"گهٽ ۾ گهٽ {0} جي داخلا ڪرڻ ضروري آهي\" ),\n    rangelength: $.validator.format( \"داخلا جو {0} ۽ {1}جي وچ ۾ هجڻ ضروري آهي\" ),\n    range: $.validator.format( \"داخلا جو {0} ۽ {1}جي وچ ۾ هجڻ ضروري آهي\" ),\n    max: $.validator.format( \"وڌ کان وڌ {0} جي داخلا ڪري سگهجي ٿي\" ),\n    min: $.validator.format( \"گهٽ ۾ گهٽ {0} جي داخلا ڪرڻ ضروري آهي\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_si.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SI (Slovenian)\n */\n$.extend( $.validator.messages, {\n\trequired: \"To polje je obvezno.\",\n\tremote: \"Vpis v tem polju ni v pravi obliki.\",\n\temail: \"Prosimo, vnesite pravi email naslov.\",\n\turl: \"Prosimo, vnesite pravi URL.\",\n\tdate: \"Prosimo, vnesite pravi datum.\",\n\tdateISO: \"Prosimo, vnesite pravi datum (ISO).\",\n\tnumber: \"Prosimo, vnesite pravo številko.\",\n\tdigits: \"Prosimo, vnesite samo številke.\",\n\tcreditcard: \"Prosimo, vnesite pravo številko kreditne kartice.\",\n\tequalTo: \"Prosimo, ponovno vnesite enako vsebino.\",\n\textension: \"Prosimo, vnesite vsebino z pravo končnico.\",\n\tmaxlength: $.validator.format( \"Prosimo, da ne vnašate več kot {0} znakov.\" ),\n\tminlength: $.validator.format( \"Prosimo, vnesite vsaj {0} znakov.\" ),\n\trangelength: $.validator.format( \"Prosimo, vnesite od {0} do {1} znakov.\" ),\n\trange: $.validator.format( \"Prosimo, vnesite vrednost med {0} in {1}.\" ),\n\tmax: $.validator.format( \"Prosimo, vnesite vrednost manjšo ali enako {0}.\" ),\n\tmin: $.validator.format( \"Prosimo, vnesite vrednost večjo ali enako {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_sk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SK (Slovak; slovenčina, slovenský jazyk)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Povinné zadať.\",\n\tmaxlength: $.validator.format( \"Maximálne {0} znakov.\" ),\n\tminlength: $.validator.format( \"Minimálne {0} znakov.\" ),\n\trangelength: $.validator.format( \"Minimálne {0} a maximálne {1} znakov.\" ),\n\temail: \"E-mailová adresa musí byť platná.\",\n\turl: \"URL musí byť platná.\",\n\tdate: \"Musí byť dátum.\",\n\tnumber: \"Musí byť číslo.\",\n\tdigits: \"Môže obsahovať iba číslice.\",\n\tequalTo: \"Dve hodnoty sa musia rovnať.\",\n\trange: $.validator.format( \"Musí byť medzi {0} a {1}.\" ),\n\tmax: $.validator.format( \"Nemôže byť viac ako {0}.\" ),\n\tmin: $.validator.format( \"Nemôže byť menej ako {0}.\" ),\n\tcreditcard: \"Číslo platobnej karty musí byť platné.\",\n\tstep: $.validator.format( \"Musí byť násobkom čísla {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_sl.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Language: SL (Slovenian; slovenski jezik)\n */\n$.extend( $.validator.messages, {\n\trequired: \"To polje je obvezno.\",\n\tremote: \"Prosimo popravite to polje.\",\n\temail: \"Prosimo vnesite veljaven email naslov.\",\n\turl: \"Prosimo vnesite veljaven URL naslov.\",\n\tdate: \"Prosimo vnesite veljaven datum.\",\n\tdateISO: \"Prosimo vnesite veljaven ISO datum.\",\n\tnumber: \"Prosimo vnesite veljavno število.\",\n\tdigits: \"Prosimo vnesite samo števila.\",\n\tcreditcard: \"Prosimo vnesite veljavno številko kreditne kartice.\",\n\tequalTo: \"Prosimo ponovno vnesite vrednost.\",\n\textension: \"Prosimo vnesite vrednost z veljavno končnico.\",\n\tmaxlength: $.validator.format( \"Prosimo vnesite največ {0} znakov.\" ),\n\tminlength: $.validator.format( \"Prosimo vnesite najmanj {0} znakov.\" ),\n\trangelength: $.validator.format( \"Prosimo vnesite najmanj {0} in največ {1} znakov.\" ),\n\trange: $.validator.format( \"Prosimo vnesite vrednost med {0} in {1}.\" ),\n\tmax: $.validator.format( \"Prosimo vnesite vrednost manjše ali enako {0}.\" ),\n\tmin: $.validator.format( \"Prosimo vnesite vrednost večje ali enako {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_sr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SR (Serbian; српски језик)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Поље је обавезно.\",\n\tremote: \"Средите ово поље.\",\n\temail: \"Унесите исправну и-мејл адресу.\",\n\turl: \"Унесите исправан URL.\",\n\tdate: \"Унесите исправан датум.\",\n\tdateISO: \"Унесите исправан датум (ISO).\",\n\tnumber: \"Унесите исправан број.\",\n\tdigits: \"Унесите само цифе.\",\n\tcreditcard: \"Унесите исправан број кредитне картице.\",\n\tequalTo: \"Унесите исту вредност поново.\",\n\textension: \"Унесите вредност са одговарајућом екстензијом.\",\n\tmaxlength: $.validator.format( \"Унесите мање од {0} карактера.\" ),\n\tminlength: $.validator.format( \"Унесите барем {0} карактера.\" ),\n\trangelength: $.validator.format( \"Унесите вредност дугачку између {0} и {1} карактера.\" ),\n\trange: $.validator.format( \"Унесите вредност између {0} и {1}.\" ),\n\tmax: $.validator.format( \"Унесите вредност мању или једнаку {0}.\" ),\n\tmin: $.validator.format( \"Унесите вредност већу или једнаку {0}.\" ),\n\tstep: $.validator.format( \"Унесите вредност која је умножак броја {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_sr_lat.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SR (Serbian - Latin alphabet; srpski jezik - latinica)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Polje je obavezno.\",\n\tremote: \"Sredite ovo polje.\",\n\temail: \"Unesite ispravnu e-mail adresu.\",\n\turl: \"Unesite ispravan URL.\",\n\tdate: \"Unesite ispravan datum.\",\n\tdateISO: \"Unesite ispravan datum (ISO).\",\n\tnumber: \"Unesite ispravan broj.\",\n\tdigits: \"Unesite samo cifre.\",\n\tcreditcard: \"Unesite ispravan broj kreditne kartice.\",\n\tequalTo: \"Unesite istu vrednost ponovo.\",\n\textension: \"Unesite vrednost sa odgovarajućom ekstenzijom.\",\n\tmaxlength: $.validator.format( \"Unesite manje od {0} karaktera.\" ),\n\tminlength: $.validator.format( \"Unesite barem {0} karaktera.\" ),\n\trangelength: $.validator.format( \"Unesite vrednost dugačku između {0} i {1} karaktera.\" ),\n\trange: $.validator.format( \"Unesite vrednost između {0} i {1}.\" ),\n\tmax: $.validator.format( \"Unesite vrednost manju ili jednaku {0}.\" ),\n\tmin: $.validator.format( \"Unesite vrednost veću ili jednaku {0}.\" ),\n\tstep: $.validator.format( \"Unesite vrednost koja je umnožak broja {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_sv.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: SV (Swedish; Svenska)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Detta f&auml;lt &auml;r obligatoriskt.\",\n\tremote: \"Var snäll och åtgärda detta fält.\",\n\tmaxlength: $.validator.format( \"Du f&aring;r ange h&ouml;gst {0} tecken.\" ),\n\tminlength: $.validator.format( \"Du m&aring;ste ange minst {0} tecken.\" ),\n\trangelength: $.validator.format( \"Ange minst {0} och max {1} tecken.\" ),\n\temail: \"Ange en korrekt e-postadress.\",\n\turl: \"Ange en korrekt URL.\",\n\tdate: \"Ange ett korrekt datum.\",\n\tdateISO: \"Ange ett korrekt datum (&Aring;&Aring;&Aring;&Aring;-MM-DD).\",\n\tnumber: \"Ange ett korrekt nummer.\",\n\tdigits: \"Ange endast siffror.\",\n\tequalTo: \"Ange samma v&auml;rde igen.\",\n\trange: $.validator.format( \"Ange ett v&auml;rde mellan {0} och {1}.\" ),\n\tmax: $.validator.format( \"Ange ett v&auml;rde som &auml;r mindre eller lika med {0}.\" ),\n\tmin: $.validator.format( \"Ange ett v&auml;rde som &auml;r st&ouml;rre eller lika med {0}.\" ),\n\tcreditcard: \"Ange ett korrekt kreditkortsnummer.\",\n\tpattern: \"Ogiltigt format.\"\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_th.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: TH (Thai; ไทย)\n */\n$.extend( $.validator.messages, {\n\trequired: \"โปรดระบุ\",\n\tremote: \"โปรดแก้ไขให้ถูกต้อง\",\n\temail: \"โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง\",\n\turl: \"โปรดระบุ URL ที่ถูกต้อง\",\n\tdate: \"โปรดระบุวันที่ ที่ถูกต้อง\",\n\tdateISO: \"โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).\",\n\tnumber: \"โปรดระบุทศนิยมที่ถูกต้อง\",\n\tdigits: \"โปรดระบุจำนวนเต็มที่ถูกต้อง\",\n\tcreditcard: \"โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง\",\n\tequalTo: \"โปรดระบุค่าเดิมอีกครั้ง\",\n\textension: \"โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง\",\n\tmaxlength: $.validator.format( \"โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ\" ),\n\tminlength: $.validator.format( \"โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ\" ),\n\trangelength: $.validator.format( \"โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ\" ),\n\trange: $.validator.format( \"โปรดระบุค่าระหว่าง {0} และ {1}\" ),\n\tmax: $.validator.format( \"โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}\" ),\n\tmin: $.validator.format( \"โปรดระบุค่ามากกว่าหรือเท่ากับ {0}\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_tj.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: TJ (Tajikistan; Забони тоҷикӣ)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Ворид кардани ин филд маҷбури аст.\",\n\tremote: \"Илтимос, маълумоти саҳеҳ ворид кунед.\",\n\temail: \"Илтимос, почтаи электронии саҳеҳ ворид кунед.\",\n\turl: \"Илтимос, URL адреси саҳеҳ ворид кунед.\",\n\tdate: \"Илтимос, таърихи саҳеҳ ворид кунед.\",\n\tdateISO: \"Илтимос, таърихи саҳеҳи (ISO)ӣ ворид кунед.\",\n\tnumber: \"Илтимос, рақамҳои саҳеҳ ворид кунед.\",\n\tdigits: \"Илтимос, танҳо рақам ворид кунед.\",\n\tcreditcard: \"Илтимос, кредит карди саҳеҳ ворид кунед.\",\n\tequalTo: \"Илтимос, миқдори баробар ворид кунед.\",\n\textension: \"Илтимос, қофияи файлро дуруст интихоб кунед.\",\n\tmaxlength: $.validator.format( \"Илтимос, бештар аз {0} рамз ворид накунед.\" ),\n\tminlength: $.validator.format( \"Илтимос, камтар аз {0} рамз ворид накунед.\" ),\n\trangelength: $.validator.format( \"Илтимос, камтар аз {0} ва зиёда аз {1} рамз ворид кунед.\" ),\n\trange: $.validator.format( \"Илтимос, аз {0} то {1} рақам зиёд ворид кунед.\" ),\n\tmax: $.validator.format( \"Илтимос, бештар аз {0} рақам ворид накунед.\" ),\n\tmin: $.validator.format( \"Илтимос, камтар аз {0} рақам ворид накунед.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_tr.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: TR (Turkish; Türkçe)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Bu alanın doldurulması zorunludur.\",\n\tremote: \"Lütfen bu alanı düzeltin.\",\n\temail: \"Lütfen geçerli bir e-posta adresi giriniz.\",\n\turl: \"Lütfen geçerli bir web adresi (URL) giriniz.\",\n\tdate: \"Lütfen geçerli bir tarih giriniz.\",\n\tdateISO: \"Lütfen geçerli bir tarih giriniz(ISO formatında).\",\n\tnumber: \"Lütfen geçerli bir sayı giriniz.\",\n\tdigits: \"Lütfen sadece sayısal karakterler giriniz.\",\n\tcreditcard: \"Lütfen geçerli bir kredi kartı giriniz.\",\n\tequalTo: \"Lütfen aynı değeri tekrar giriniz.\",\n\textension: \"Lütfen geçerli uzantıya sahip bir değer giriniz.\",\n\tphone: \"Lütfen geçerli bir telefon numarası giriniz.\",\n\tmaxlength: $.validator.format( \"Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz.\" ),\n\tminlength: $.validator.format( \"Lütfen en az {0} karakter uzunluğunda bir değer giriniz.\" ),\n\trangelength: $.validator.format( \"Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz.\" ),\n\trange: $.validator.format( \"Lütfen {0} ile {1} arasında bir değer giriniz.\" ),\n\tmax: $.validator.format( \"Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz.\" ),\n\tmin: $.validator.format( \"Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz.\" ),\n\trequire_from_group: $.validator.format( \"Lütfen bu alanların en az {0} tanesini doldurunuz.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_uk.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: UK (Ukrainian; українська мова)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Це поле необхідно заповнити.\",\n\tremote: \"Будь ласка, введіть правильне значення.\",\n\temail: \"Будь ласка, введіть коректну адресу електронної пошти.\",\n\turl: \"Будь ласка, введіть коректний URL.\",\n\tdate: \"Будь ласка, введіть коректну дату.\",\n\tdateISO: \"Будь ласка, введіть коректну дату у форматі ISO.\",\n\tnumber: \"Будь ласка, введіть число.\",\n\tdigits: \"Вводите потрібно лише цифри.\",\n\tcreditcard: \"Будь ласка, введіть правильний номер кредитної карти.\",\n\tequalTo: \"Будь ласка, введіть таке ж значення ще раз.\",\n\textension: \"Будь ласка, виберіть файл з правильним розширенням.\",\n\tmaxlength: $.validator.format( \"Будь ласка, введіть не більше {0} символів.\" ),\n\tminlength: $.validator.format( \"Будь ласка, введіть не менше {0} символів.\" ),\n\trangelength: $.validator.format( \"Будь ласка, введіть значення довжиною від {0} до {1} символів.\" ),\n\trange: $.validator.format( \"Будь ласка, введіть число від {0} до {1}.\" ),\n\tmax: $.validator.format( \"Будь ласка, введіть число, менше або рівно {0}.\" ),\n\tmin: $.validator.format( \"Будь ласка, введіть число, більше або рівно {0}.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_ur.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: UR (Urdu; اردو)\n */\n$.extend( $.validator.messages, {\n\trequired: \"ان معلومات کا اندراج ضروری ہے\",\n\tremote: \"ان معلومات کا اندراج ضروری ہے\",\n\temail: \"درج کی ہوئی ای میل درست نہیں ہے\",\n\turl: \"درج کیا گیا پتہ درست نہیں ہے\",\n\tdate: \"درج کی گئی تاریخ درست نہیں ہے\",\n\tdateISO: \"معیار کے مطابق نہیں ہے (ISO) درج کی گئی تاریخ\",\n\tnumber: \"درج کیےگئے ہندسے درست نہیں ہیں\",\n\tdigits: \"صرف ہندسے اندراج کئے جاسکتے ہیں\",\n\tcreditcard: \"درج کیا گیا کارڈ نمبر درست نہیں ہے\",\n\tequalTo: \"اندراج کا موازنہ درست نہیں ہے\",\n\textension: \"اندراج درست نہیں ہے\",\n\tmaxlength: $.validator.format( \"زیادہ سے زیادہ {0} کا اندراج کر سکتے ہیں\" ),\n\tminlength: $.validator.format( \"کم سے کم {0} کا اندراج کرنا ضروری ہے\" ),\n\trangelength: $.validator.format( \"اندراج کا {0} اور {1}کے درمیان ہونا ضروری ہے\" ),\n\trange: $.validator.format( \"اندراج کا {0} اور {1} کے درمیان ہونا ضروری ہے\" ),\n\tmax: $.validator.format( \"زیادہ سے زیادہ {0} کا اندراج کر سکتے ہیں\" ),\n\tmin: $.validator.format( \"کم سے کم {0} کا اندراج کرنا ضروری ہے\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_vi.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: VI (Vietnamese; Tiếng Việt)\n */\n$.extend( $.validator.messages, {\n\trequired: \"Hãy nhập.\",\n\tremote: \"Hãy sửa cho đúng.\",\n\temail: \"Hãy nhập email.\",\n\turl: \"Hãy nhập URL.\",\n\tdate: \"Hãy nhập ngày.\",\n\tdateISO: \"Hãy nhập ngày (ISO).\",\n\tnumber: \"Hãy nhập số.\",\n\tdigits: \"Hãy nhập chữ số.\",\n\tcreditcard: \"Hãy nhập số thẻ tín dụng.\",\n\tequalTo: \"Hãy nhập thêm lần nữa.\",\n\textension: \"Phần mở rộng không đúng.\",\n\tmaxlength: $.validator.format( \"Hãy nhập từ {0} kí tự trở xuống.\" ),\n\tminlength: $.validator.format( \"Hãy nhập từ {0} kí tự trở lên.\" ),\n\trangelength: $.validator.format( \"Hãy nhập từ {0} đến {1} kí tự.\" ),\n\trange: $.validator.format( \"Hãy nhập từ {0} đến {1}.\" ),\n\tmax: $.validator.format( \"Hãy nhập từ {0} trở xuống.\" ),\n\tmin: $.validator.format( \"Hãy nhập từ {0} trở lên.\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_zh.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)\n */\n$.extend( $.validator.messages, {\n\trequired: \"这是必填字段\",\n\tremote: \"请修正此字段\",\n\temail: \"请输入有效的电子邮件地址\",\n\turl: \"请输入有效的网址\",\n\tdate: \"请输入有效的日期\",\n\tdateISO: \"请输入有效的日期 (YYYY-MM-DD)\",\n\tnumber: \"请输入有效的数字\",\n\tdigits: \"只能输入数字\",\n\tcreditcard: \"请输入有效的信用卡号码\",\n\tequalTo: \"你的输入不相同\",\n\textension: \"请输入有效的后缀\",\n\tmaxlength: $.validator.format( \"最多可以输入 {0} 个字符\" ),\n\tminlength: $.validator.format( \"最少要输入 {0} 个字符\" ),\n\trangelength: $.validator.format( \"请输入长度在 {0} 到 {1} 之间的字符串\" ),\n\trange: $.validator.format( \"请输入范围在 {0} 到 {1} 之间的数值\" ),\n\tstep: $.validator.format( \"请输入 {0} 的整数倍值\" ),\n\tmax: $.validator.format( \"请输入不大于 {0} 的数值\" ),\n\tmin: $.validator.format( \"请输入不小于 {0} 的数值\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/i18n/messages_zh_TW.js",
    "content": "(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n/*\n * Translated default messages for the jQuery validation plugin.\n * Locale: ZH (Chinese; 中文 (Zhōngwén), 汉语, 漢語)\n * Region: TW (Taiwan)\n */\n$.extend( $.validator.messages, {\n\trequired: \"必須填寫\",\n\tremote: \"請修正此欄位\",\n\temail: \"請輸入有效的電子郵件\",\n\turl: \"請輸入有效的網址\",\n\tdate: \"請輸入有效的日期\",\n\tdateISO: \"請輸入有效的日期 (YYYY-MM-DD)\",\n\tnumber: \"請輸入正確的數值\",\n\tdigits: \"只可輸入數字\",\n\tcreditcard: \"請輸入有效的信用卡號碼\",\n\tequalTo: \"請重複輸入一次\",\n\textension: \"請輸入有效的後綴\",\n\tmaxlength: $.validator.format( \"最多 {0} 個字\" ),\n\tminlength: $.validator.format( \"最少 {0} 個字\" ),\n\trangelength: $.validator.format( \"請輸入長度為 {0} 至 {1} 之間的字串\" ),\n\trange: $.validator.format( \"請輸入 {0} 至 {1} 之間的數值\" ),\n\tstep: $.validator.format( \"請輸入 {0} 的整數倍值\" ),\n\tmax: $.validator.format( \"請輸入不大於 {0} 的數值\" ),\n\tmin: $.validator.format( \"請輸入不小於 {0} 的數值\" )\n} );\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin v1.21.0\n *\n * https://jqueryvalidation.org/\n *\n * Copyright (c) 2024 JÃķrn Zaefferer\n * Released under the MIT license\n */\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [\"jquery\"], factory );\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory( require( \"jquery\" ) );\n\t} else {\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.extend( $.fn, {\n\n\t// https://jqueryvalidation.org/validate/\n\tvalidate: function( options ) {\n\n\t\t// If nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if a validator for this form was already created\n\t\tvar validator = $.data( this[ 0 ], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[ 0 ] );\n\t\t$.data( this[ 0 ], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.on( \"click.validate\", \":submit\", function( event ) {\n\n\t\t\t\t// Track the used submit button to properly handle scripted\n\t\t\t\t// submits later.\n\t\t\t\tvalidator.submitButton = event.currentTarget;\n\n\t\t\t\t// Allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $( this ).hasClass( \"cancel\" ) ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $( this ).attr( \"formnovalidate\" ) !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Validate the form on submit\n\t\t\tthis.on( \"submit.validate\", function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\n\t\t\t\t\t// Prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden, result;\n\n\t\t\t\t\t// Insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t// The hidden input is inserted in two cases:\n\t\t\t\t\t//   - A user defined a `submitHandler`\n\t\t\t\t\t//   - There was a pending request due to `remote` method and `stopRequest()`\n\t\t\t\t\t//     was called to submit the form in case it's valid\n\t\t\t\t\tif ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) {\n\t\t\t\t\t\thidden = $( \"<input type='hidden'/>\" )\n\t\t\t\t\t\t\t.attr( \"name\", validator.submitButton.name )\n\t\t\t\t\t\t\t.val( $( validator.submitButton ).val() )\n\t\t\t\t\t\t\t.appendTo( validator.currentForm );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( validator.settings.submitHandler && !validator.settings.debug ) {\n\t\t\t\t\t\tresult = validator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( hidden ) {\n\n\t\t\t\t\t\t\t// And clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== undefined ) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// Prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn validator;\n\t},\n\n\t// https://jqueryvalidation.org/valid/\n\tvalid: function() {\n\t\tvar valid, validator, errorList;\n\n\t\tif ( $( this[ 0 ] ).is( \"form\" ) ) {\n\t\t\tvalid = this.validate().form();\n\t\t} else {\n\t\t\terrorList = [];\n\t\t\tvalid = true;\n\t\t\tvalidator = $( this[ 0 ].form ).validate();\n\t\t\tthis.each( function() {\n\t\t\t\tvalid = validator.element( this ) && valid;\n\t\t\t\tif ( !valid ) {\n\t\t\t\t\terrorList = errorList.concat( validator.errorList );\n\t\t\t\t}\n\t\t\t} );\n\t\t\tvalidator.errorList = errorList;\n\t\t}\n\t\treturn valid;\n\t},\n\n\t// https://jqueryvalidation.org/rules/\n\trules: function( command, argument ) {\n\t\tvar element = this[ 0 ],\n\t\t\tisContentEditable = typeof this.attr( \"contenteditable\" ) !== \"undefined\" && this.attr( \"contenteditable\" ) !== \"false\",\n\t\t\tsettings, staticRules, existingRules, data, param, filtered;\n\n\t\t// If nothing is selected, return empty object; can't chain anyway\n\t\tif ( element == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !element.form && isContentEditable ) {\n\t\t\telement.form = this.closest( \"form\" )[ 0 ];\n\t\t\telement.name = this.attr( \"name\" );\n\t\t}\n\n\t\tif ( element.form == null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( command ) {\n\t\t\tsettings = $.data( element.form, \"validator\" ).settings;\n\t\t\tstaticRules = settings.rules;\n\t\t\texistingRules = $.validator.staticRules( element );\n\t\t\tswitch ( command ) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend( existingRules, $.validator.normalizeRule( argument ) );\n\n\t\t\t\t// Remove messages from rules, but allow them to be set separately\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[ element.name ] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[ element.name ];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tfiltered = {};\n\t\t\t\t$.each( argument.split( /\\s/ ), function( index, method ) {\n\t\t\t\t\tfiltered[ method ] = existingRules[ method ];\n\t\t\t\t\tdelete existingRules[ method ];\n\t\t\t\t} );\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tdata = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules( element ),\n\t\t\t$.validator.attributeRules( element ),\n\t\t\t$.validator.dataRules( element ),\n\t\t\t$.validator.staticRules( element )\n\t\t), element );\n\n\t\t// Make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tparam = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend( { required: param }, data );\n\t\t}\n\n\t\t// Make sure remote is at back\n\t\tif ( data.remote ) {\n\t\t\tparam = data.remote;\n\t\t\tdelete data.remote;\n\t\t\tdata = $.extend( data, { remote: param } );\n\t\t}\n\n\t\treturn data;\n\t}\n} );\n\n// JQuery trim is deprecated, provide a trim method based on String.prototype.trim\nvar trim = function( str ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill\n\treturn str.replace( /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\" );\n};\n\n// Custom selectors\n$.extend( $.expr.pseudos || $.expr[ \":\" ], {\t\t// '|| $.expr[ \":\" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support\n\n\t// https://jqueryvalidation.org/blank-selector/\n\tblank: function( a ) {\n\t\treturn !trim( \"\" + $( a ).val() );\n\t},\n\n\t// https://jqueryvalidation.org/filled-selector/\n\tfilled: function( a ) {\n\t\tvar val = $( a ).val();\n\t\treturn val !== null && !!trim( \"\" + val );\n\t},\n\n\t// https://jqueryvalidation.org/unchecked-selector/\n\tunchecked: function( a ) {\n\t\treturn !$( a ).prop( \"checked\" );\n\t}\n} );\n\n// Constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n// https://jqueryvalidation.org/jQuery.validator.format/\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray( arguments );\n\t\t\targs.unshift( source );\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( params === undefined ) {\n\t\treturn source;\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray( arguments ).slice( 1 );\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each( params, function( i, n ) {\n\t\tsource = source.replace( new RegExp( \"\\\\{\" + i + \"\\\\}\", \"g\" ), function() {\n\t\t\treturn n;\n\t\t} );\n\t} );\n\treturn source;\n};\n\n$.extend( $.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tpendingClass: \"pending\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusCleanup: false,\n\t\tfocusInvalid: true,\n\t\terrorContainer: $( [] ),\n\t\terrorLabelContainer: $( [] ),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tcustomElements: [],\n\t\tonfocusin: function( element ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// Hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.hideThese( this.errorsFor( element ) );\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element ) {\n\t\t\tif ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\n\t\t\t// Avoid revalidate the field when pressing one of the following keys\n\t\t\t// Shift       => 16\n\t\t\t// Ctrl        => 17\n\t\t\t// Alt         => 18\n\t\t\t// Caps lock   => 20\n\t\t\t// End         => 35\n\t\t\t// Home        => 36\n\t\t\t// Left arrow  => 37\n\t\t\t// Up arrow    => 38\n\t\t\t// Right arrow => 39\n\t\t\t// Down arrow  => 40\n\t\t\t// Insert      => 45\n\t\t\t// Num lock    => 144\n\t\t\t// AltGr key   => 225\n\t\t\tvar excludedKeys = [\n\t\t\t\t16, 17, 18, 20, 35, 36, 37,\n\t\t\t\t38, 39, 40, 45, 144, 225\n\t\t\t];\n\n\t\t\tif ( event.which === 9 && this.elementValue( element ) === \"\" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element.name in this.invalid ) {\n\t\t\t\tthis.element( element );\n\t\t\t}\n\t\t},\n\t\tonclick: function( element ) {\n\n\t\t\t// Click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element( element );\n\n\t\t\t// Or option elements, check parent select in that case\n\t\t\t} else if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element( element.parentNode );\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).addClass( errorClass ).removeClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).addClass( errorClass ).removeClass( validClass );\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName( element.name ).removeClass( errorClass ).addClass( validClass );\n\t\t\t} else {\n\t\t\t\t$( element ).removeClass( errorClass ).addClass( validClass );\n\t\t\t}\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.setDefaults/\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format( \"Please enter no more than {0} characters.\" ),\n\t\tminlength: $.validator.format( \"Please enter at least {0} characters.\" ),\n\t\trangelength: $.validator.format( \"Please enter a value between {0} and {1} characters long.\" ),\n\t\trange: $.validator.format( \"Please enter a value between {0} and {1}.\" ),\n\t\tmax: $.validator.format( \"Please enter a value less than or equal to {0}.\" ),\n\t\tmin: $.validator.format( \"Please enter a value greater than or equal to {0}.\" ),\n\t\tstep: $.validator.format( \"Please enter a multiple of {0}.\" )\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $( this.settings.errorLabelContainer );\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );\n\t\t\tthis.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar currentForm = this.currentForm,\n\t\t\t\tgroups = ( this.groups = {} ),\n\t\t\t\trules;\n\t\t\t$.each( this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split( /\\s/ );\n\t\t\t\t}\n\t\t\t\t$.each( value, function( index, name ) {\n\t\t\t\t\tgroups[ name ] = key;\n\t\t\t\t} );\n\t\t\t} );\n\t\t\trules = this.settings.rules;\n\t\t\t$.each( rules, function( key, value ) {\n\t\t\t\trules[ key ] = $.validator.normalizeRule( value );\n\t\t\t} );\n\n\t\t\tfunction delegate( event ) {\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( !this.form && isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = $( this ).attr( \"name\" );\n\t\t\t\t}\n\n\t\t\t\t// Ignore the element if it belongs to another form. This will happen mainly\n\t\t\t\t// when setting the `form` attribute of an input to the id of another form.\n\t\t\t\tif ( currentForm !== this.form ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar validator = $.data( this.form, \"validator\" ),\n\t\t\t\t\teventType = \"on\" + event.type.replace( /^validate/, \"\" ),\n\t\t\t\t\tsettings = validator.settings;\n\t\t\t\tif ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {\n\t\t\t\t\tsettings[ eventType ].call( validator, this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar focusListeners = [ \":text\", \"[type='password']\", \"[type='file']\", \"select\", \"textarea\", \"[type='number']\", \"[type='search']\",\n\t\t\t\t\t\t\t\t\"[type='tel']\", \"[type='url']\", \"[type='email']\", \"[type='datetime']\", \"[type='date']\", \"[type='month']\",\n\t\t\t\t\t\t\t\t\"[type='week']\", \"[type='time']\", \"[type='datetime-local']\", \"[type='range']\", \"[type='color']\",\n\t\t\t\t\t\t\t\t\"[type='radio']\", \"[type='checkbox']\", \"[contenteditable]\", \"[type='button']\" ];\n\t\t\tvar clickListeners = [ \"select\", \"option\", \"[type='radio']\", \"[type='checkbox']\" ];\n\t\t\t$( this.currentForm )\n\t\t\t\t.on( \"focusin.validate focusout.validate keyup.validate\", focusListeners.concat( this.settings.customElements ).join( \", \" ), delegate )\n\n\t\t\t\t// Support: Chrome, oldIE\n\t\t\t\t// \"select\" is provided as event.target when clicking a option\n\t\t\t\t.on( \"click.validate\", clickListeners.concat( this.settings.customElements ).join( \", \" ), delegate );\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$( this.currentForm ).on( \"invalid-form.validate\", this.settings.invalidHandler );\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.form/\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend( this.submitted, this.errorMap );\n\t\t\tthis.invalid = $.extend( {}, this.errorMap );\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.element/\n\t\telement: function( element ) {\n\t\t\tvar cleanElement = this.clean( element ),\n\t\t\t\tcheckElement = this.validationTargetFor( cleanElement ),\n\t\t\t\tv = this,\n\t\t\t\tresult = true,\n\t\t\t\trs, group;\n\n\t\t\tif ( checkElement === undefined ) {\n\t\t\t\tdelete this.invalid[ cleanElement.name ];\n\t\t\t} else {\n\t\t\t\tthis.prepareElement( checkElement );\n\t\t\t\tthis.currentElements = $( checkElement );\n\n\t\t\t\t// If this element is grouped, then validate all group elements already\n\t\t\t\t// containing a value\n\t\t\t\tgroup = this.groups[ checkElement.name ];\n\t\t\t\tif ( group ) {\n\t\t\t\t\t$.each( this.groups, function( name, testgroup ) {\n\t\t\t\t\t\tif ( testgroup === group && name !== checkElement.name ) {\n\t\t\t\t\t\t\tcleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) );\n\t\t\t\t\t\t\tif ( cleanElement && cleanElement.name in v.invalid ) {\n\t\t\t\t\t\t\t\tv.currentElements.push( cleanElement );\n\t\t\t\t\t\t\t\tresult = v.check( cleanElement ) && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\trs = this.check( checkElement ) !== false;\n\t\t\t\tresult = result && rs;\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.invalid[ checkElement.name ] = true;\n\t\t\t\t}\n\n\t\t\t\tif ( !this.numberOfInvalids() ) {\n\n\t\t\t\t\t// Hide error containers on last error\n\t\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t\t}\n\t\t\t\tthis.showErrors();\n\n\t\t\t\t// Add aria-invalid status for screen readers\n\t\t\t\t$( element ).attr( \"aria-invalid\", !rs );\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.showErrors/\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\tvar validator = this;\n\n\t\t\t\t// Add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = $.map( this.errorMap, function( message, name ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\telement: validator.findByName( name )[ 0 ]\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\t// Remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !( element.name in errors );\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// https://jqueryvalidation.org/Validator.resetForm/\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$( this.currentForm ).resetForm();\n\t\t\t}\n\t\t\tthis.invalid = {};\n\t\t\tthis.submitted = {};\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tvar elements = this.elements()\n\t\t\t\t.removeData( \"previousValue\" )\n\t\t\t\t.removeAttr( \"aria-invalid\" );\n\n\t\t\tthis.resetElements( elements );\n\t\t},\n\n\t\tresetElements: function( elements ) {\n\t\t\tvar i;\n\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0; elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ],\n\t\t\t\t\t\tthis.settings.errorClass, \"\" );\n\t\t\t\t\tthis.findByName( elements[ i ].name ).removeClass( this.settings.validClass );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telements\n\t\t\t\t\t.removeClass( this.settings.errorClass )\n\t\t\t\t\t.removeClass( this.settings.validClass );\n\t\t\t}\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength( this.invalid );\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\t/* jshint unused: false */\n\t\t\tvar count = 0,\n\t\t\t\ti;\n\t\t\tfor ( i in obj ) {\n\n\t\t\t\t// This check allows counting elements with empty error\n\t\t\t\t// message as invalid elements\n\t\t\t\tif ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.hideThese( this.toHide );\n\t\t},\n\n\t\thideThese: function( errors ) {\n\t\t\terrors.not( this.containers ).text( \"\" );\n\t\t\tthis.addWrapper( errors ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] )\n\t\t\t\t\t.filter( \":visible\" )\n\t\t\t\t\t.trigger( \"focus\" )\n\n\t\t\t\t\t// Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger( \"focusin\" );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep( this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t} ).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {},\n\t\t\t\tselectors = [ \"input\", \"select\", \"textarea\", \"[contenteditable]\" ];\n\n\t\t\t// Select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $( this.currentForm )\n\t\t\t.find( selectors.concat( this.settings.customElements ).join( \", \" ) )\n\t\t\t.not( \":submit, :reset, :image, :disabled\" )\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter( function() {\n\t\t\t\tvar name = this.name || $( this ).attr( \"name\" ); // For contenteditable\n\t\t\t\tvar isContentEditable = typeof $( this ).attr( \"contenteditable\" ) !== \"undefined\" && $( this ).attr( \"contenteditable\" ) !== \"false\";\n\n\t\t\t\tif ( !name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this );\n\t\t\t\t}\n\n\t\t\t\t// Set form expando on contenteditable\n\t\t\t\tif ( isContentEditable ) {\n\t\t\t\t\tthis.form = $( this ).closest( \"form\" )[ 0 ];\n\t\t\t\t\tthis.name = name;\n\t\t\t\t}\n\n\t\t\t\t// Ignore elements that belong to other/nested forms\n\t\t\t\tif ( this.form !== validator.currentForm ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// Select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[ name ] = true;\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $( selector )[ 0 ];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.split( \" \" ).join( \".\" );\n\t\t\treturn $( this.settings.errorElement + \".\" + errorClass, this.errorContext );\n\t\t},\n\n\t\tresetInternals: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $( [] );\n\t\t\tthis.toHide = $( [] );\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.resetInternals();\n\t\t\tthis.currentElements = $( [] );\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor( element );\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar $element = $( element ),\n\t\t\t\ttype = element.type,\n\t\t\t\tisContentEditable = typeof $element.attr( \"contenteditable\" ) !== \"undefined\" && $element.attr( \"contenteditable\" ) !== \"false\",\n\t\t\t\tval, idx;\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).val();\n\t\t\t} else if ( type === \"number\" && typeof element.validity !== \"undefined\" ) {\n\t\t\t\treturn element.validity.badInput ? \"NaN\" : $element.val();\n\t\t\t}\n\n\t\t\tif ( isContentEditable ) {\n\t\t\t\tval = $element.text();\n\t\t\t} else {\n\t\t\t\tval = $element.val();\n\t\t\t}\n\n\t\t\tif ( type === \"file\" ) {\n\n\t\t\t\t// Modern browser (chrome & safari)\n\t\t\t\tif ( val.substr( 0, 12 ) === \"C:\\\\fakepath\\\\\" ) {\n\t\t\t\t\treturn val.substr( 12 );\n\t\t\t\t}\n\n\t\t\t\t// Legacy browsers\n\t\t\t\t// Unix-based path\n\t\t\t\tidx = val.lastIndexOf( \"/\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Windows-based path\n\t\t\t\tidx = val.lastIndexOf( \"\\\\\" );\n\t\t\t\tif ( idx >= 0 ) {\n\t\t\t\t\treturn val.substr( idx + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Just the file name\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace( /\\r/g, \"\" );\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $( element ).rules(),\n\t\t\t\trulesCount = $.map( rules, function( n, i ) {\n\t\t\t\t\treturn i;\n\t\t\t\t} ).length,\n\t\t\t\tdependencyMismatch = false,\n\t\t\t\tval = this.elementValue( element ),\n\t\t\t\tresult, method, rule, normalizer;\n\n\t\t\t// Abort any pending Ajax request from a previous call to this method.\n\t\t\tthis.abortRequest( element );\n\n\t\t\t// Prioritize the local normalizer defined for this element over the global one\n\t\t\t// if the former exists, otherwise user the global one in case it exists.\n\t\t\tif ( typeof rules.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = rules.normalizer;\n\t\t\t} else if (\ttypeof this.settings.normalizer === \"function\" ) {\n\t\t\t\tnormalizer = this.settings.normalizer;\n\t\t\t}\n\n\t\t\t// If normalizer is defined, then call it to retreive the changed value instead\n\t\t\t// of using the real one.\n\t\t\t// Note that `this` in the normalizer is `element`.\n\t\t\tif ( normalizer ) {\n\t\t\t\tval = normalizer.call( element, val );\n\n\t\t\t\t// Delete the normalizer from rules to avoid treating it as a pre-defined method.\n\t\t\t\tdelete rules.normalizer;\n\t\t\t}\n\n\t\t\tfor ( method in rules ) {\n\t\t\t\trule = { method: method, parameters: rules[ method ] };\n\t\t\t\ttry {\n\t\t\t\t\tresult = $.validator.methods[ method ].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// If a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" && rulesCount === 1 ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor( element ) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tif ( e instanceof TypeError ) {\n\t\t\t\t\t\te.message += \".  Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength( rules ) ) {\n\t\t\t\tthis.successList.push( element );\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\t// return the generic message if present and no method specific message is present\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $( element ).data( \"msg\" + method.charAt( 0 ).toUpperCase() +\n\t\t\t\tmethod.substring( 1 ).toLowerCase() ) || $( element ).data( \"msg\" );\n\t\t},\n\n\t\t// Return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[ name ];\n\t\t\treturn m && ( m.constructor === String ? m : m[ method ] );\n\t\t},\n\n\t\t// Return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] !== undefined ) {\n\t\t\t\t\treturn arguments[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\t// The second parameter 'rule' used to be a string, and extended to an object literal\n\t\t// of the following form:\n\t\t// rule = {\n\t\t//     method: \"method name\",\n\t\t//     parameters: \"the given method parameters\"\n\t\t// }\n\t\t//\n\t\t// The old behavior still supported, kept to maintain backward compatibility with\n\t\t// old code, and will be removed in the next major release.\n\t\tdefaultMessage: function( element, rule ) {\n\t\t\tif ( typeof rule === \"string\" ) {\n\t\t\t\trule = { method: rule };\n\t\t\t}\n\n\t\t\tvar message = this.findDefined(\n\t\t\t\t\tthis.customMessage( element.name, rule.method ),\n\t\t\t\t\tthis.customDataMessage( element, rule.method ),\n\n\t\t\t\t\t// 'title' is never undefined, so handle empty string as undefined\n\t\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t\t$.validator.messages[ rule.method ],\n\t\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t\t),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call( this, rule.parameters, element );\n\t\t\t} else if ( theregex.test( message ) ) {\n\t\t\t\tmessage = $.validator.format( message.replace( theregex, \"{$1}\" ), rule.parameters );\n\t\t\t}\n\n\t\t\treturn message;\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule );\n\n\t\t\tthis.errorList.push( {\n\t\t\t\tmessage: message,\n\t\t\t\telement: element,\n\t\t\t\tmethod: rule.method\n\t\t\t} );\n\n\t\t\tthis.errorMap[ element.name ] = message;\n\t\t\tthis.submitted[ element.name ] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements, error;\n\t\t\tfor ( i = 0; this.errorList[ i ]; i++ ) {\n\t\t\t\terror = this.errorList[ i ];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[ i ]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not( this.invalidElements() );\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $( this.errorList ).map( function() {\n\t\t\t\treturn this.element;\n\t\t\t} );\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar place, group, errorID, v,\n\t\t\t\terror = this.errorsFor( element ),\n\t\t\t\telementID = this.idOrName( element ),\n\t\t\t\tdescribedBy = $( element ).attr( \"aria-describedby\" );\n\n\t\t\tif ( error.length ) {\n\n\t\t\t\t// Refresh error/success class\n\t\t\t\terror.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\n\t\t\t\t// Replace message on existing label\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Create error element\n\t\t\t\terror = $( \"<\" + this.settings.errorElement + \">\" )\n\t\t\t\t\t.attr( \"id\", elementID + \"-error\" )\n\t\t\t\t\t.addClass( this.settings.errorClass );\n\n\t\t\t\tif ( this.settings && this.settings.escapeHtml ) {\n\t\t\t\t\terror.text( message || \"\" );\n\t\t\t\t} else {\n\t\t\t\t\terror.html( message || \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Maintain reference to the element to be placed into the DOM\n\t\t\t\tplace = error;\n\t\t\t\tif ( this.settings.wrapper ) {\n\n\t\t\t\t\t// Make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tplace = error.hide().show().wrap( \"<\" + this.settings.wrapper + \"/>\" ).parent();\n\t\t\t\t}\n\t\t\t\tif ( this.labelContainer.length ) {\n\t\t\t\t\tthis.labelContainer.append( place );\n\t\t\t\t} else if ( this.settings.errorPlacement ) {\n\t\t\t\t\tthis.settings.errorPlacement.call( this, place, $( element ) );\n\t\t\t\t} else {\n\t\t\t\t\tplace.insertAfter( element );\n\t\t\t\t}\n\n\t\t\t\t// Link error back to the element\n\t\t\t\tif ( error.is( \"label\" ) ) {\n\n\t\t\t\t\t// If the error is a label, then associate using 'for'\n\t\t\t\t\terror.attr( \"for\", elementID );\n\n\t\t\t\t\t// If the element is not a child of an associated label, then it's necessary\n\t\t\t\t\t// to explicitly apply aria-describedby\n\t\t\t\t} else if ( error.parents( \"label[for='\" + this.escapeCssMeta( elementID ) + \"']\" ).length === 0 ) {\n\t\t\t\t\terrorID = error.attr( \"id\" );\n\n\t\t\t\t\t// Respect existing non-error aria-describedby\n\t\t\t\t\tif ( !describedBy ) {\n\t\t\t\t\t\tdescribedBy = errorID;\n\t\t\t\t\t} else if ( !describedBy.match( new RegExp( \"\\\\b\" + this.escapeCssMeta( errorID ) + \"\\\\b\" ) ) ) {\n\n\t\t\t\t\t\t// Add to end of list if not already present\n\t\t\t\t\t\tdescribedBy += \" \" + errorID;\n\t\t\t\t\t}\n\t\t\t\t\t$( element ).attr( \"aria-describedby\", describedBy );\n\n\t\t\t\t\t// If this element is grouped, then assign to all elements in the same group\n\t\t\t\t\tgroup = this.groups[ element.name ];\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tv = this;\n\t\t\t\t\t\t$.each( v.groups, function( name, testgroup ) {\n\t\t\t\t\t\t\tif ( testgroup === group ) {\n\t\t\t\t\t\t\t\t$( \"[name='\" + v.escapeCssMeta( name ) + \"']\", v.currentForm )\n\t\t\t\t\t\t\t\t\t.attr( \"aria-describedby\", error.attr( \"id\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\terror.text( \"\" );\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\terror.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( error, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add( error );\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.escapeCssMeta( this.idOrName( element ) ),\n\t\t\t\tdescriber = $( element ).attr( \"aria-describedby\" ),\n\t\t\t\tselector = \"label[for='\" + name + \"'], label[for='\" + name + \"'] *\";\n\n\t\t\t// 'aria-describedby' should directly reference the error element\n\t\t\tif ( describer ) {\n\t\t\t\tselector = selector + \", #\" + this.escapeCssMeta( describer )\n\t\t\t\t\t.replace( /\\s+/g, \", #\" );\n\t\t\t}\n\n\t\t\treturn this\n\t\t\t\t.errors()\n\t\t\t\t.filter( selector );\n\t\t},\n\n\t\t// See https://api.jquery.com/category/selectors/, for CSS\n\t\t// meta-characters that should be escaped in order to be used with JQuery\n\t\t// as a literal part of a name/id or any selector.\n\t\tescapeCssMeta: function( string ) {\n\t\t\tif ( string === undefined ) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\n\t\t\treturn string.replace( /([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\" );\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\n\t\t\t// If radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\telement = this.findByName( element.name );\n\t\t\t}\n\n\t\t\t// Always apply ignore filter\n\t\t\treturn $( element ).not( this.settings.ignore )[ 0 ];\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn ( /radio|checkbox/i ).test( element.type );\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $( this.currentForm ).find( \"[name='\" + this.escapeCssMeta( name ) + \"']\" );\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch ( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $( \"option:selected\", element ).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\t\treturn this.findByName( element.name ).filter( \":checked\" ).length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$( param, element.form ).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param( element );\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue( element );\n\t\t\treturn !$.validator.methods.required.call( this, val, element ) && \"dependency-mismatch\";\n\t\t},\n\n\t\telementAjaxPort: function( element ) {\n\t\t\treturn \"validate\" + element.name;\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[ element.name ] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\t$( element ).addClass( this.settings.pendingClass );\n\t\t\t\tthis.pending[ element.name ] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\n\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[ element.name ];\n\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) {\n\t\t\t\t$( this.currentForm ).trigger( \"submit\" );\n\n\t\t\t\t// Remove the hidden input that was used as a replacement for the\n\t\t\t\t// missing submit button. The hidden input is added by `handle()`\n\t\t\t\t// to ensure that the value of the used submit button is passed on\n\t\t\t\t// for scripted submits triggered by this method\n\t\t\t\tif ( this.submitButton ) {\n\t\t\t\t\t$( \"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm ).remove();\n\t\t\t\t}\n\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) {\n\t\t\t\t$( this.currentForm ).triggerHandler( \"invalid-form\", [ this ] );\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tabortRequest: function( element ) {\n\t\t\tvar port;\n\n\t\t\tif ( this.pending[ element.name ] ) {\n\t\t\t\tport = this.elementAjaxPort( element );\n\t\t\t\t$.ajaxAbort( port );\n\n\t\t\t\tthis.pendingRequest--;\n\n\t\t\t\t// Sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\t\tthis.pendingRequest = 0;\n\t\t\t\t}\n\n\t\t\t\tdelete this.pending[ element.name ];\n\t\t\t\t$( element ).removeClass( this.settings.pendingClass );\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element, method ) {\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\treturn $.data( element, \"previousValue\" ) || $.data( element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, { method: method } )\n\t\t\t} );\n\t\t},\n\n\t\t// Cleans up all forms and elements, removes validator-specific events\n\t\tdestroy: function() {\n\t\t\tthis.resetForm();\n\n\t\t\t$( this.currentForm )\n\t\t\t\t.off( \".validate\" )\n\t\t\t\t.removeData( \"validator\" )\n\t\t\t\t.find( \".validate-equalTo-blur\" )\n\t\t\t\t\t.off( \".validate-equalTo\" )\n\t\t\t\t\t.removeClass( \"validate-equalTo-blur\" )\n\t\t\t\t.find( \".validate-lessThan-blur\" )\n\t\t\t\t\t.off( \".validate-lessThan\" )\n\t\t\t\t\t.removeClass( \"validate-lessThan-blur\" )\n\t\t\t\t.find( \".validate-lessThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-lessThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-lessThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThanEqual-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThanEqual\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThanEqual-blur\" )\n\t\t\t\t.find( \".validate-greaterThan-blur\" )\n\t\t\t\t\t.off( \".validate-greaterThan\" )\n\t\t\t\t\t.removeClass( \"validate-greaterThan-blur\" );\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: { required: true },\n\t\temail: { email: true },\n\t\turl: { url: true },\n\t\tdate: { date: true },\n\t\tdateISO: { dateISO: true },\n\t\tnumber: { number: true },\n\t\tdigits: { digits: true },\n\t\tcreditcard: { creditcard: true }\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[ className ] = rules;\n\t\t} else {\n\t\t\t$.extend( this.classRuleSettings, className );\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tclasses = $( element ).attr( \"class\" );\n\n\t\tif ( classes ) {\n\t\t\t$.each( classes.split( \" \" ), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend( rules, $.validator.classRuleSettings[ this ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeAttributeRule: function( rules, type, method, value ) {\n\n\t\t// Convert the value to a number for number inputs, and for text for backwards compability\n\t\t// allows type=\"date\" and others to be compared as strings\n\t\tif ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\tvalue = Number( value );\n\n\t\t\t// Support Opera Mini, which returns NaN for undefined minlength\n\t\t\tif ( isNaN( value ) ) {\n\t\t\t\tvalue = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif ( value || value === 0 ) {\n\t\t\trules[ method ] = value;\n\t\t} else if ( type === method && type !== \"range\" ) {\n\n\t\t\t// Exception: the jquery validate 'range' method\n\t\t\t// does not test for the html5 'range' type\n\t\t\trules[ type === \"date\" ? \"dateISO\" : method ] = true;\n\t\t}\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\n\t\t\t// Support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = element.getAttribute( method );\n\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\n\t\t\t\t// Force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr( method );\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\n\t\t// 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar rules = {},\n\t\t\t$element = $( element ),\n\t\t\ttype = element.getAttribute( \"type\" ),\n\t\t\tmethod, value;\n\n\t\tfor ( method in $.validator.methods ) {\n\t\t\tvalue = $element.data( \"rule\" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );\n\n\t\t\t// Cast empty attributes like `data-rule-required` to `true`\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = true;\n\t\t\t}\n\n\t\t\tthis.normalizeAttributeRule( rules, type, method, value );\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\n\t\t// Handle dependency check\n\t\t$.each( rules, function( prop, val ) {\n\n\t\t\t// Ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[ prop ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch ( typeof val.depends ) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$( val.depends, element.form ).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call( element, element );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[ prop ] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\t$.data( element.form, \"validator\" ).resetElements( $( element ) );\n\t\t\t\t\tdelete rules[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Evaluate parameters\n\t\t$.each( rules, function( rule, parameter ) {\n\t\t\trules[ rule ] = typeof parameter === \"function\" && rule !== \"normalizer\" ? parameter( element ) : parameter;\n\t\t} );\n\n\t\t// Clean number parameters\n\t\t$.each( [ \"minlength\", \"maxlength\" ], function() {\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\trules[ this ] = Number( rules[ this ] );\n\t\t\t}\n\t\t} );\n\t\t$.each( [ \"rangelength\", \"range\" ], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[ this ] ) {\n\t\t\t\tif ( Array.isArray( rules[ this ] ) ) {\n\t\t\t\t\trules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ];\n\t\t\t\t} else if ( typeof rules[ this ] === \"string\" ) {\n\t\t\t\t\tparts = rules[ this ].replace( /[\\[\\]]/g, \"\" ).split( /[\\s,]+/ );\n\t\t\t\t\trules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\n\t\t\t// Auto-create ranges\n\t\t\tif ( rules.min != null && rules.max != null ) {\n\t\t\t\trules.range = [ rules.min, rules.max ];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength != null && rules.maxlength != null ) {\n\t\t\t\trules.rangelength = [ rules.minlength, rules.maxlength ];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each( data.split( /\\s/ ), function() {\n\t\t\t\ttransformed[ this ] = true;\n\t\t\t} );\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.addMethod/\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[ name ] = method;\n\t\t$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules( name, $.validator.normalizeRule( name ) );\n\t\t}\n\t},\n\n\t// https://jqueryvalidation.org/jQuery.validator.methods/\n\tmethods: {\n\n\t\t// https://jqueryvalidation.org/required-method/\n\t\trequired: function( value, element, param ) {\n\n\t\t\t// Check if dependency is met\n\t\t\tif ( !this.depend( param, element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\n\t\t\t\t// Could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $( element ).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable( element ) ) {\n\t\t\t\treturn this.getLength( value, element ) > 0;\n\t\t\t}\n\t\t\treturn value !== undefined && value !== null && value.length > 0;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/email-method/\n\t\temail: function( value, element ) {\n\n\t\t\t// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\n\t\t\t// Retrieved 2014-01-14\n\t\t\t// If you have a problem with this implementation, report a bug against the above spec\n\t\t\t// Or use custom methods to implement your own email validation\n\t\t\treturn this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/url-method/\n\t\turl: function( value, element ) {\n\n\t\t\t// Copyright (c) 2010-2013 Diego Perini, MIT licensed\n\t\t\t// https://gist.github.com/dperini/729294\n\t\t\t// see also https://mathiasbynens.be/demo/url-regex\n\t\t\t// modified to allow protocol-relative URLs\n\t\t\treturn this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/date-method/\n\t\tdate: ( function() {\n\t\t\tvar called = false;\n\n\t\t\treturn function( value, element ) {\n\t\t\t\tif ( !called ) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"The `date` method is deprecated and will be removed in version '2.0.0'.\\n\" +\n\t\t\t\t\t\t\t\"Please don't use it, since it relies on the Date constructor, which\\n\" +\n\t\t\t\t\t\t\t\"behaves very differently across browsers and locales. Use `dateISO`\\n\" +\n\t\t\t\t\t\t\t\"instead or one of the locale specific methods in `localizations/`\\n\" +\n\t\t\t\t\t\t\t\"and `additional-methods.js`.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );\n\t\t\t};\n\t\t}() ),\n\n\t\t// https://jqueryvalidation.org/dateISO-method/\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/number-method/\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:-?\\.\\d+)?$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/digits-method/\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional( element ) || /^\\d+$/.test( value );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/minlength-method/\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/maxlength-method/\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || length <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/rangelength-method/\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = Array.isArray( value ) ? value.length : this.getLength( value, element );\n\t\t\treturn this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/min-method/\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value >= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/max-method/\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || value <= param;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/range-method/\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );\n\t\t},\n\n\t\t// https://jqueryvalidation.org/step-method/\n\t\tstep: function( value, element, param ) {\n\t\t\tvar type = $( element ).attr( \"type\" ),\n\t\t\t\terrorMessage = \"Step attribute on input type \" + type + \" is not supported.\",\n\t\t\t\tsupportedTypes = [ \"text\", \"number\", \"range\" ],\n\t\t\t\tre = new RegExp( \"\\\\b\" + type + \"\\\\b\" ),\n\t\t\t\tnotSupported = type && !re.test( supportedTypes.join() ),\n\t\t\t\tdecimalPlaces = function( num ) {\n\t\t\t\t\tvar match = ( \"\" + num ).match( /(?:\\.(\\d+))?$/ );\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Number of digits right of decimal point.\n\t\t\t\t\treturn match[ 1 ] ? match[ 1 ].length : 0;\n\t\t\t\t},\n\t\t\t\ttoInt = function( num ) {\n\t\t\t\t\treturn Math.round( num * Math.pow( 10, decimals ) );\n\t\t\t\t},\n\t\t\t\tvalid = true,\n\t\t\t\tdecimals;\n\n\t\t\t// Works only for text, number and range input types\n\t\t\t// TODO find a way to support input types date, datetime, datetime-local, month, time and week\n\t\t\tif ( notSupported ) {\n\t\t\t\tthrow new Error( errorMessage );\n\t\t\t}\n\n\t\t\tdecimals = decimalPlaces( param );\n\n\t\t\t// Value can't have too many decimals\n\t\t\tif ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\treturn this.optional( element ) || valid;\n\t\t},\n\n\t\t// https://jqueryvalidation.org/equalTo-method/\n\t\tequalTo: function( value, element, param ) {\n\n\t\t\t// Bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\tvar target = $( param );\n\t\t\tif ( this.settings.onfocusout && target.not( \".validate-equalTo-blur\" ).length ) {\n\t\t\t\ttarget.addClass( \"validate-equalTo-blur\" ).on( \"blur.validate-equalTo\", function() {\n\t\t\t\t\t$( element ).valid();\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// https://jqueryvalidation.org/remote-method/\n\t\tremote: function( value, element, param, method ) {\n\t\t\tif ( this.optional( element ) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tmethod = typeof method === \"string\" && method || \"remote\";\n\n\t\t\tvar previous = this.previousValue( element, method ),\n\t\t\t\tvalidator, data, optionDataString;\n\n\t\t\tif ( !this.settings.messages[ element.name ] ) {\n\t\t\t\tthis.settings.messages[ element.name ] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ];\n\t\t\tthis.settings.messages[ element.name ][ method ] = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && { url: param } || param;\n\t\t\toptionDataString = $.param( $.extend( { data: value }, param.data ) );\n\t\t\tif ( previous.valid !== null && previous.old === optionDataString ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = optionDataString;\n\t\t\tprevious.valid = null;\n\t\t\tvalidator = this;\n\t\t\tthis.startRequest( element );\n\t\t\tdata = {};\n\t\t\tdata[ element.name ] = value;\n\t\t\t$.ajax( $.extend( true, {\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: this.elementAjaxPort( element ),\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tcontext: validator.currentForm,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar valid = response === true || response === \"true\",\n\t\t\t\t\t\terrors, message, submitted;\n\n\t\t\t\t\tvalidator.settings.messages[ element.name ][ method ] = previous.originalMessage;\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tsubmitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.toHide = validator.errorsFor( element );\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push( element );\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = false;\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors = {};\n\t\t\t\t\t\tmessage = response || validator.defaultMessage( element, { method: method, parameters: value } );\n\t\t\t\t\t\terrors[ element.name ] = previous.message = message;\n\t\t\t\t\t\tvalidator.invalid[ element.name ] = true;\n\t\t\t\t\t\tvalidator.showErrors( errors );\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest( element, valid );\n\t\t\t\t}\n\t\t\t}, param ) );\n\t\t\treturn \"pending\";\n\t\t}\n\t}\n\n} );\n\n// Ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n//        $.ajaxAbort( port );\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n\nvar pendingRequests = {},\n\tajax;\n\n// Use a prefilter if available (1.5+)\nif ( $.ajaxPrefilter ) {\n\t$.ajaxPrefilter( function( settings, _, xhr ) {\n\t\tvar port = settings.port;\n\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = xhr;\n\t\t}\n\t} );\n} else {\n\n\t// Proxy ajax\n\tajax = $.ajax;\n\t$.ajax = function( settings ) {\n\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\tif ( mode === \"abort\" ) {\n\t\t\t$.ajaxAbort( port );\n\t\t\tpendingRequests[ port ] = ajax.apply( this, arguments );\n\t\t\treturn pendingRequests[ port ];\n\t\t}\n\t\treturn ajax.apply( this, arguments );\n\t};\n}\n\n// Abort the previous request without sending a new one\n$.ajaxAbort = function( port ) {\n\tif ( pendingRequests[ port ] ) {\n\t\tpendingRequests[ port ].abort();\n\t\tdelete pendingRequests[ port ];\n\t}\n};\nreturn $;\n}));"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/validation/validation.js",
    "content": "( function ( $, rwmb, i18n ) {\n\t'use strict';\n\n\t/**\n\t * Extract the validation key from an input's name attribute. Usually it's the field ID, but sometimes (like for `file`), it's the field's input name.\n\t *\n\t * field[]    => field   // Fields with multiple values: file, checkbox list, etc.\n\t * field[1]   => field   // Cloneable fields\n\t * field[1][] => field   // Cloneable fields with multiple values: file, checkbox list, etc.\n\t *\n\t * group[field][]    => field  // Group with fields with multiple values: file, checkbox list, etc.\n\t * group[field][1]   => field  // Group with cloneable fields\n\t * group[field][1][] => field  // Group with cloneable fields with multiple values: file, checkbox list, etc.\n\t *\n\t * group[1][field][]    => field  // Cloneable group with fields with multiple values: file, checkbox list, etc.\n\t * group[1][field][1]   => field  // Cloneable group with cloneable fields\n\t * group[1][field][1][] => field  // Cloneable group with cloneable fields with multiple values: file, checkbox list, etc.\n\t *\n\t * group[subgroup][field][]    => field  // Subgroup with fields with multiple values: file, checkbox list, etc.\n\t * group[subgroup][field][1]   => field  // Subgroup with cloneable fields\n\t * group[subgroup][field][1][] => field  // Subgroup with cloneable fields with multiple values: file, checkbox list, etc.\n\t *\n\t * group[subgroup][1][field][]    => field  // Cloneable subgroup with fields with multiple values: file, checkbox list, etc.\n\t * group[subgroup][1][field][1]   => field  // Cloneable subgroup with cloneable fields\n\t * group[subgroup][1][field][1][] => field  // Cloneable subgroup with cloneable fields with multiple values: file, checkbox list, etc.\n\t *\n\t * group[1][subgroup][field][]    => field  // Cloneable group with subgroup with fields with multiple values: file, checkbox list, etc.\n\t * group[1][subgroup][field][1]   => field  // Cloneable group with subgroup with cloneable fields\n\t * group[1][subgroup][field][1][] => field  // Cloneable group with subgroup with cloneable fields with multiple values: file, checkbox list, etc.\n\t *\n\t * group[1][subgroup][1][field][]    => field  // Cloneable group with cloneable subgroup with fields with multiple values: file, checkbox list, etc.\n\t * group[1][subgroup][1][field][1]   => field  // Cloneable group with cloneable subgroup with cloneable fields\n\t * group[1][subgroup][1][field][1][] => field  // Cloneable group with cloneable subgroup with cloneable fields with multiple values: file, checkbox list, etc.\n\t */\n\tconst getValidationKey = name => {\n\t\t// Detect name parts in format of anything[] or anything[1].\n\t\tlet parts = name.match( /^(.+?)(?:\\[\\d+\\]|(?:\\[\\]))?$/ );\n\n\t\tif ( parts[ 1 ] && isNaN( parts[ 1 ] ) ) {\n\t\t\t// Remove []\n\t\t\tlet words = name.match( /([\\w-]+)|(\\[\\w+\\])/g );\n\t\t\tlet resultArray = [ words.join( \"\" ) ];\n\n\t\t\t// Remove characters \"[\" and \"]\".\n\t\t\twords.forEach( matchedValue => {\n\t\t\t\tif ( matchedValue.startsWith( \"[\" ) ) {\n\t\t\t\t\tresultArray.push( matchedValue.substring( 1, matchedValue.length - 1 ) );\n\t\t\t\t} else {\n\t\t\t\t\tresultArray.push( matchedValue );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tparts[ 0 ] = resultArray[ 0 ];\n\t\t\tparts[ 1 ] = isNaN( resultArray[ resultArray.length - 1 ] ) ? resultArray[ resultArray.length - 1 ] : resultArray[ resultArray.length - 2 ];\n\t\t}\n\n\t\treturn parts.pop();\n\t};\n\n\t/**\n\t * Fix validation not working for cloneable files or fields in groups.\n\t */\n\t$.validator.staticRules = function ( element ) {\n\t\tlet rules = {},\n\t\t\tvalidator = $.data( element.form, \"validator\" );\n\n\t\t// No rules.\n\t\tif ( validator.settings.rules === null || Object.keys( validator.settings.rules ).length === 0 ) {\n\t\t\treturn rules;\n\t\t}\n\n\t\t// Do not validate hidden fields.\n\t\tif ( element.type === 'hidden' ) {\n\t\t\treturn rules;\n\t\t}\n\n\t\tlet key = getValidationKey( element.name );\n\n\t\t/**\n\t\t * Cloneable files or files in groups.\n\t\t * Input name is transformed into format `_file_{unique_id}`\n\t\t * There is also a hidden input with name `_index_{field_id}` with value `_file_{unique_id}`\n\t\t *\n\t\t * In this case, `key` is always `_file_{unique_id}`\n\t\t *\n\t\t * Note that for cloneable files, validation rule is set for `_index_{field_id}`. For files in groups, validation rule is still `{field_id}`.\n\t\t */\n\t\tif ( element.type === 'file' && ( $( element ).closest( '.rwmb-clone' ).length > 0 || $( element ).closest( '.rwmb-group-wrapper' ).length > 0 ) ) {\n\t\t\tconst $input = $( element ).closest( '.rwmb-input' );\n\t\t\tconst $indexInput = $input.find( '*[value=\"' + key + '\"]' );\n\n\t\t\tkey = getValidationKey( $indexInput.attr( 'name' ) );\n\n\t\t\t// Remove prefix `_index_` from input name when in groups.\n\t\t\tif ( !validator.settings.rules[ key ] && key.includes( '_index_' ) ) {\n\t\t\t\tkey = key.slice( 7 );\n\t\t\t}\n\n\t\t\tif ( validator.settings.rules[ key ] ) {\n\t\t\t\t// Set message for element.\n\t\t\t\tvalidator.settings.messages[ element.name ] = validator.settings.messages[ key ];\n\t\t\t\t// Set rule for element.\n\t\t\t\treturn $.validator.normalizeRule( validator.settings.rules[ key ] ) || {};\n\t\t\t}\n\n\t\t\treturn rules;\n\t\t}\n\n\t\t// For normal fields and fields in groups: set rules by their field IDs (validation keys).\n\n\t\t// Set message for element.\n\t\tvalidator.settings.messages[ element.name ] = validator.settings.messages[ key ];\n\t\t// Set rule for element.\n\t\treturn $.validator.normalizeRule( validator.settings.rules[ key ] ) || {};\n\t};\n\n\t/**\n\t * Make jQuery Validation works with multiple inputs with same names.\n\t * Need for file, image fields where users can upload multiple files with same input names.\n\t *\n\t * @link https://stackoverflow.com/q/931687/371240\n\t */\n\t$.validator.prototype.checkForm = function () {\n\t\tthis.prepareForm();\n\t\tfor ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {\n\t\t\tif ( this.findByName( elements[ i ].name ).length !== undefined && this.findByName( elements[ i ].name ).length > 1 ) {\n\t\t\t\tfor ( var cnt = 0; cnt < this.findByName( elements[ i ].name ).length; cnt++ ) {\n\t\t\t\t\tconst isTargetExists = this.validationTargetFor( this.clean( this.findByName( elements[ i ].name )[ cnt ] ) );\n\t\t\t\t\tif ( typeof isTargetExists === 'undefined' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.check( this.findByName( elements[ i ].name )[ cnt ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.check( elements[ i ] );\n\t\t\t}\n\t\t}\n\t\treturn this.valid();\n\t};\n\n\tclass Validation {\n\t\tconstructor( selector ) {\n\t\t\tthis.selector = selector;\n\t\t\tthis.$form = $( selector );\n\n\t\t\tif ( !this.$form.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.validationElements = this.$form.find( '.rwmb-validation' );\n\t\t\tthis.showAsterisks();\n\t\t\tthis.getSettings();\n\t\t}\n\n\t\tinit() {\n\t\t\tif ( !this.$form.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$form\n\t\t\t\t// Update underlying textarea before submit.\n\t\t\t\t// Don't use submitHandler() because form can be submitted via Ajax on the front end.\n\t\t\t\t.on( 'submit', function () {\n\t\t\t\t\tif ( typeof tinyMCE !== 'undefined' ) {\n\t\t\t\t\t\ttinyMCE.triggerSave();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.validate( this.settings );\n\t\t}\n\n\t\tshowAsterisks() {\n\t\t\tthis.validationElements.each( function () {\n\t\t\t\tconst data = $( this ).data( 'validation' );\n\n\t\t\t\t$.each( data.rules, function ( k, v ) {\n\t\t\t\t\tif ( !v[ 'required' ] ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet $el = $( '[name=\"' + k + '\"]' );\n\t\t\t\t\tif ( !$el.length ) {\n\t\t\t\t\t\t$el = $( '[name*=\"[' + k + ']\"]' ); // Subfields in groups.\n\t\t\t\t\t}\n\t\t\t\t\tif ( !$el.length ) {\n\t\t\t\t\t\t$el = $( '[name*=\"' + k + '\"]' ); // contains field ID.\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( $el.length ) {\n\t\t\t\t\t\t$el.closest( '.rwmb-input' ).siblings( '.rwmb-label' ).find( 'label' ).append( '<span class=\"rwmb-required\">*</span>' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\n\t\tgetSettings() {\n\t\t\tthis.settings = {\n\t\t\t\tignore: ':not(.rwmb-media,.rwmb-image_select,.rwmb-wysiwyg,.rwmb-color,.rwmb-map,.rwmb-osm,.rwmb-switch,[class|=\"rwmb\"]), .rwmb-clone-template *',\n\t\t\t\terrorPlacement: function ( error, element ) {\n\t\t\t\t\terror.appendTo( element.closest( '.rwmb-input' ) );\n\t\t\t\t},\n\t\t\t\terrorClass: 'rwmb-error',\n\t\t\t\terrorElement: 'p',\n\t\t\t\tinvalidHandler: this.invalidHandler.bind( this )\n\t\t\t};\n\n\t\t\t// Gather all validation rules.\n\t\t\tvar that = this;\n\t\t\tthis.validationElements.each( function () {\n\t\t\t\t$.extend( true, that.settings, $( this ).data( 'validation' ) );\n\t\t\t} );\n\t\t}\n\n\t\tinvalidHandler() {\n\t\t\tthis.showMessage();\n\t\t\t// Group field will automatically expand and show an error warning when collapsing\n\t\t\tfor ( var i = 0; i < this.$form.data( 'validator' ).errorList.length; i++ ) {\n\t\t\t\t$( '#' + this.$form.data( 'validator' ).errorList[ i ].element.id ).closest( '.rwmb-group-collapsed' ).removeClass( 'rwmb-group-collapsed' );\n\t\t\t}\n\t\t\t// Custom event for showing error fields inside tabs/hidden divs. Use setTimeout() to run after error class is added to inputs.\n\t\t\tvar that = this;\n\t\t\tsetTimeout( function () {\n\t\t\t\tthat.$form.trigger( 'after_validate' );\n\t\t\t}, 200 );\n\t\t}\n\n\t\tshowMessage() {\n\t\t\t// Re-enable the submit ( publish/update ) button and hide the ajax indicator\n\t\t\t$( '#publish' ).removeClass( 'button-primary-disabled' );\n\t\t\t$( '#ajax-loading' ).attr( 'style', '' );\n\t\t\t$( '#rwmb-validation-message' ).remove();\n\t\t\tthis.$form.before( '<div id=\"rwmb-validation-message\" class=\"notice notice-error is-dismissible\"><p>' + i18n.message + '</p></div>' );\n\t\t}\n\t};\n\n\tlet globalSavePosts = {};\n\n\tclass GutenbergValidation extends Validation {\n\t\tinit() {\n\t\t\tconst that = this;\n\t\t\tconst editor = wp.data.dispatch( 'core/editor' );\n\n\t\t\tif ( !editor || !that.$form.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Store the original savePost method.\n\t\t\t// Only store the first time, because GutenbergValidation can be initialized multiple times.\n\t\t\tif ( !globalSavePosts[ this.selector ] ) {\n\t\t\t\tglobalSavePosts[ this.selector ] = editor.savePost;\n\t\t\t}\n\n\t\t\tthis.removeMessage();\n\t\t\tthis.$form.validate( this.settings );\n\n\t\t\t// Change the editor method.\n\t\t\teditor.savePost = function ( options = {} ) {\n\t\t\t\t// Bypass the validation when previewing in Gutenberg.\n\t\t\t\tif ( typeof options === 'object' && options.isPreview ) {\n\t\t\t\t\treturn globalSavePosts[ that.selector ]( options );\n\t\t\t\t}\n\n\t\t\t\t// Must call savePost() here instead of in submitHandler() because the form has inline onsubmit callback.\n\t\t\t\tif ( that.$form.valid() ) {\n\t\t\t\t\tthat.removeMessage();\n\t\t\t\t\treturn globalSavePosts[ that.selector ]( options );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\treset() {\n\t\t\tconst editor = wp.data.dispatch( 'core/editor' );\n\n\t\t\tif ( editor && globalSavePosts[ this.selector ] ) {\n\t\t\t\teditor.savePost = globalSavePosts[ this.selector ];\n\t\t\t\tthis.removeMessage();\n\t\t\t}\n\t\t}\n\n\t\tshowMessage() {\n\t\t\twp.data.dispatch( 'core/notices' ).createErrorNotice( i18n.message, {\n\t\t\t\tid: `meta-box-validation-${ this.selector }`,\n\t\t\t\tisDismissible: true\n\t\t\t} );\n\t\t}\n\n\t\tremoveMessage() {\n\t\t\twp.data.dispatch( 'core/notices' ).removeNotice( `meta-box-validation-${ this.selector }` );\n\t\t}\n\t};\n\n\tclass TaxonomyValidation extends Validation {\n\t\tinit() {\n\t\t\tconst submitButton = $( '#submit' );\n\n\t\t\tthis.$form.validate( {\n\t\t\t\t...this.settings,\n\t\t\t\tinvalidHandler: null,\n\t\t\t\tonkeyup: () => {\n\t\t\t\t\tsubmitButton.prop( 'disabled', !this.$form.valid() );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tsubmitButton.prop( 'disabled', !this.$form.valid() );\n\t\t\t$( '#tag-name' ).on( 'blur', () => {\n\t\t\t\tsubmitButton.prop( 'disabled', !this.$form.valid() );\n\t\t\t} );\n\t\t}\n\t}\n\n\tlet metaBoxInstances = {};\n\tlet blockInstance = null;\n\n\t// Run on document ready.\n\tfunction init() {\n\t\tif ( rwmb.isGutenberg ) {\n\t\t\t// In Gutenberg, when we switch to a block, `.mb_ready` is triggered, thus creating new instances of the validation.\n\n\t\t\t// These are static meta boxes and should be initialized only once.\n\t\t\tif ( Object.keys( metaBoxInstances ).length === 0 ) {\n\t\t\t\tconst locations = [ 'normal', 'side', 'advanced' ];\n\t\t\t\tlocations.forEach( location => {\n\t\t\t\t\tmetaBoxInstances[ location ] = new GutenbergValidation( `.metabox-location-${ location }` );\n\t\t\t\t\tmetaBoxInstances[ location ].init();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Because only one block can be edited at a time, this instance is always used for the current block.\n\t\t\t// We need to remove previous validation (by resetting the savePost method), and create new instances.\n\t\t\tif ( blockInstance ) {\n\t\t\t\tblockInstance.reset();\n\t\t\t}\n\n\t\t\tblockInstance = new GutenbergValidation( '.mb-block-edit' );\n\t\t\tblockInstance.init();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Edit post, edit term, edit user, front-end form.\n\t\tconst $forms = $( '#post, #edittag, #your-profile, .rwmb-form' );\n\t\t$forms.each( function () {\n\t\t\tconst form = new Validation( this );\n\t\t\tform.init();\n\t\t} );\n\n\t\tconst $addTag = $( '#addtag' );\n\t\tif ( $addTag.length ) {\n\t\t\tnew TaxonomyValidation( '#addtag' ).init();\n\t\t\t$( '#submit' ).on( 'click', function () {\n\t\t\t\tnew TaxonomyValidation( '#addtag' ).init();\n\t\t\t} );\n\t\t}\n\t};\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init );\n\n} )( jQuery, rwmb, rwmbValidation );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/video.js",
    "content": "( function ( $, rwmb ) {\n\t'use strict';\n\n\tvar views = rwmb.views = rwmb.views || {},\n\t\tMediaField = views.MediaField,\n\t\tMediaItem = views.MediaItem,\n\t\tMediaList = views.MediaList,\n\t\tVideoField;\n\n\tVideoField = views.VideoField = MediaField.extend( {\n\t\tcreateList: function ()\n\t\t{\n\t\t\tthis.list = new MediaList( {\n\t\t\t\tcontroller: this.controller,\n\t\t\t\titemView: MediaItem.extend( {\n\t\t\t\t\tclassName: 'rwmb-video-item',\n\t\t\t\t\ttemplate: rwmb.template( `\n\t\t\t\t\t\t<input type=\"hidden\" name=\"{{{ data.controller.fieldName }}}\" value=\"{{{ data.id }}}\" class=\"rwmb-media-input\">\n\t\t\t\t\t\t<# if( _.indexOf( i18nRwmbVideo.extensions, data.url.substr( data.url.lastIndexOf('.') + 1 ) ) > -1 ) { #>\n\t\t\t\t\t\t\t<video controls=\"controls\" class=\"rwmb-video-element\" preload=\"metadata\"\n\t\t\t\t\t\t\t\t<# if ( data.width ) { #>width=\"{{ data.width }}\"<# } #>\n\t\t\t\t\t\t\t\t<# if ( data.height ) { #>height=\"{{ data.height }}\"<# } #>\n\t\t\t\t\t\t\t\t<# if ( data.image && data.image.src !== data.icon ) { #>poster=\"{{ data.image.src }}\"<# } #>>\n\t\t\t\t\t\t\t\t<source type=\"{{ data.mime }}\" src=\"{{ data.url }}\"/>\n\t\t\t\t\t\t\t</video>\n\t\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t\t<# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>\n\t\t\t\t\t\t\t\t<img src=\"{{ data.image.src }}\" />\n\t\t\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t\t\t<img src=\"{{ data.icon }}\" />\n\t\t\t\t\t\t\t<# } #>\n\t\t\t\t\t\t<# } #>\n\t\t\t\t\t\t<div class=\"rwmb-media-info\">\n\t\t\t\t\t\t\t<a href=\"{{{ data.url }}}\" class=\"rwmb-file-title\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<# if( data.title ) { #>\n\t\t\t\t\t\t\t\t\t{{{ data.title }}}\n\t\t\t\t\t\t\t\t<# } else { #>\n\t\t\t\t\t\t\t\t\t{{{ i18nRwmbMedia.noTitle }}}\n\t\t\t\t\t\t\t\t<# } #>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<div class=\"rwmb-file-name\">{{{ data.filename }}}</div>\n\t\t\t\t\t\t\t<div class=\"rwmb-media-actions\">\n\t\t\t\t\t\t\t\t<a class=\"rwmb-edit-media\" title=\"{{{ i18nRwmbMedia.edit }}}\" href=\"{{{ data.editLink }}}\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t{{{ i18nRwmbMedia.edit }}}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t<a href=\"#\" class=\"rwmb-remove-media\" title=\"{{{ i18nRwmbMedia.remove }}}\">\n\t\t\t\t\t\t\t\t\t{{{ i18nRwmbMedia.remove }}}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t` ),\n\t\t\t\t\trender: function()\n\t\t\t\t\t{\n\t\t\t\t\t\tvar settings =  ! _.isUndefined( window._wpmejsSettings ) ? _.clone( _wpmejsSettings ) : {};\n\t\t\t\t\t\tMediaItem.prototype.render.apply( this, arguments );\n\t\t\t\t\t\tthis.player = new MediaElementPlayer( this.$( 'video' ).get(0), settings );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t} );\n\t\t}\n\t} );\n\n\tfunction initVideoField() {\n\t\tvar $this = $( this ),\n\t\t\tview = new VideoField( { input: this } );\n\t\t$this.siblings( '.rwmb-media-view' ).remove();\n\t\t$this.after( view.el );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-video' ).each( initVideoField );\n\t}\n\n\trwmb.$document\n\t\t.on( 'mb_ready', init )\n\t\t.on( 'clone', '.rwmb-video', initVideoField );\n\n\twp?.hooks?.addAction( 'mb_ready', 'meta-box/ready/video', ref => {\n\t\tinit( { target: ref } );\n\t} );\n} )( jQuery, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/js/wysiwyg.js",
    "content": "( function( $, wp, window, rwmb ) {\n\t'use strict';\n\n\t/**\n\t * Transform textarea into wysiwyg editor.\n\t */\n\tfunction transform() {\n\t\tvar $this = $( this ),\n\t\t\t$wrapper = $this.closest( '.wp-editor-wrap' ),\n\t\t\tid = $this.attr( 'id' ),\n\t\t\tisInBlock = $this.closest( '.wp-block, .components-panel' ).length > 0;\n\n\t\t// Update the ID attribute if the editor is in a new block.\n\t\tif ( isInBlock ) {\n\t\t\tid = id + '_' + rwmb.uniqid();\n\t\t\t$this.attr( 'id', id );\n\t\t}\n\n\t\t// Get current editor mode before updating the DOM.\n\t\tvar mode = $wrapper.hasClass( 'tmce-active' ) ? 'tmce' : 'html';\n\n\t\t// Update the DOM\n\t\t$this.show();\n\t\tupdateDom( $wrapper, id );\n\n\t\t// Get id of the original editor to get its tinyMCE and quick tags settings\n\t\tvar originalId = getOriginalId( this ),\n\t\t\tsettings = getEditorSettings( originalId ),\n\t\t\tcustomSettings = $this.closest( '.rwmb-input' ).find( '.rwmb-wysiwyg-id' ).data( 'options' );\n\n\t\t// TinyMCE\n\t\tif ( window.tinymce ) {\n\t\t\tsettings.tinymce.selector = '#' + id;\n\t\t\tsettings.tinymce.setup = function( editor ) {\n\t\t\t\teditor.on( 'keyup change', function() {\n\t\t\t\t\teditor.save(); // Required for live validation.\n\t\t\t\t\t$this.trigger( 'change' );\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\t// Set editor mode after initializing.\n\t\t\tsettings.tinymce.init_instance_callback = function() {\n\t\t\t\tswitchEditors.go( id, mode );\n\t\t\t};\n\n\t\t\ttinymce.remove( '#' + id );\n\t\t\ttinymce.init( $.extend( settings.tinymce, customSettings.tinymce ) );\n\t\t}\n\n\t\t// Quick tags\n\t\tif ( window.quicktags ) {\n\t\t\tsettings.quicktags.id = id;\n\t\t\tquicktags( $.extend( settings.quicktags, customSettings.quicktags ) );\n\t\t\tQTags._buttonsInit();\n\t\t}\n\t}\n\n\tfunction getEditorSettings( id ) {\n\t\tvar settings = getDefaultEditorSettings();\n\n\t\tif ( id && tinyMCEPreInit.mceInit.hasOwnProperty( id ) ) {\n\t\t\tsettings.tinymce = tinyMCEPreInit.mceInit[ id ];\n\t\t}\n\t\tif ( id && window.quicktags && tinyMCEPreInit.qtInit.hasOwnProperty( id ) ) {\n\t\t\tsettings.quicktags = tinyMCEPreInit.qtInit[ id ];\n\t\t}\n\n\t\treturn settings;\n\t}\n\n\tfunction getDefaultEditorSettings() {\n\t\tvar settings = wp.editor.getDefaultSettings();\n\n\t\tsettings.tinymce.toolbar1 = 'formatselect,bold,italic,bullist,numlist,blockquote,alignleft,aligncenter,alignright,link,unlink,wp_more,spellchecker,fullscreen,wp_adv';\n\t\tsettings.tinymce.toolbar2 = 'strikethrough,hr,forecolor,pastetext,removeformat,charmap,outdent,indent,undo,redo,wp_help';\n\n\t\tsettings.quicktags.buttons = 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close';\n\n\t\treturn settings;\n\t}\n\n\t/**\n\t * Get original ID of the textarea\n\t * The ID will be used to reference to tinyMCE and quick tags settings\n\t * @param el Current cloned textarea\n\t */\n\tfunction getOriginalId( el ) {\n\t\treturn el.closest( '.rwmb-input' ).querySelector( '.rwmb-wysiwyg-id' ).dataset.id;\n\t}\n\n\t/**\n\t * Update id, class, [data-] attributes, ... of the cloned editor.\n\t * @param $wrapper Editor wrapper element\n\t * @param id       Editor ID\n\t */\n\tfunction updateDom( $wrapper, id ) {\n\t\t// Wrapper div and media buttons\n\t\t$wrapper.attr( 'id', 'wp-' + id + '-wrap' )\n\t\t\t.find( '.mce-container' ).remove().end() // Remove rendered tinyMCE editor\n\t\t\t.find( '.wp-editor-tools' ).attr( 'id', 'wp-' + id + '-editor-tools' )\n\t\t\t.find( '.wp-media-buttons' ).attr( 'id', 'wp-' + id + '-media-buttons' )\n\t\t\t.find( 'button' ).data( 'editor', id ).attr( 'data-editor', id );\n\n\t\t// Set default active mode.\n\t\t$wrapper.removeClass( 'html-active tmce-active' );\n\t\t$wrapper.addClass( window.tinymce ? 'tmce-active' : 'html-active' );\n\n\t\t// Editor tabs\n\t\t$wrapper.find( '.switch-tmce' )\n\t\t\t.attr( 'id', id + 'tmce' )\n\t\t\t.data( 'wp-editor-id', id ).attr( 'data-wp-editor-id', id ).end()\n\t\t\t.find( '.switch-html' )\n\t\t\t.attr( 'id', id + 'html' )\n\t\t\t.data( 'wp-editor-id', id ).attr( 'data-wp-editor-id', id );\n\n\t\t// Quick tags\n\t\t$wrapper.find( '.wp-editor-container' ).attr( 'id', 'wp-' + id + '-editor-container' )\n\t\t\t.find( '.quicktags-toolbar' ).attr( 'id', 'qt_' + id + '_toolbar' ).html( '' );\n\t}\n\n\tfunction init( e ) {\n\t\t$( e.target ).find( '.rwmb-wysiwyg' ).each( transform );\n\t}\n\n\t/**\n\t * Add required attribute for validation.\n\t *\n\t * this = textarea element.\n\t */\n\tfunction addRequiredAttribute() {\n\t\tif ( this.classList.contains( 'rwmb-wysiwyg-required' ) ) {\n\t\t\tthis.setAttribute( 'required', true );\n\t\t}\n\t}\n\n\t/**\n\t * Setup events for the classic editor to make live validation work.\n\t *\n\t * When change:\n\t * - Save content to textarea for live validation.\n\t * - Trigger change event for compatibility.\n\t *\n\t * this = textarea element.\n\t */\n\tfunction setupEvents() {\n\t\tif ( !window.tinymce ) {\n\t\t\treturn;\n\t\t}\n\t\tvar editor = tinymce.get( this.id );\n\t\tif ( !editor ) {\n\t\t\treturn;\n\t\t}\n\t\tvar $this = $( this );\n\t\teditor.on( 'keyup change', function() {\n\t\t\teditor.save(); // Required for live validation.\n\t\t\t$this.trigger( 'change' );\n\t\t} );\n\t}\n\n\t$( function() {\n\t\tvar $editors = $( '.rwmb-wysiwyg' );\n\t\t$editors.each( addRequiredAttribute );\n\t\t$editors.each( setupEvents );\n\n\t\t// Force re-render editors in Gutenberg. Use setTimeOut to run after all other code. Bug occurs in WP 5.6.\n\t\tif ( rwmb.isGutenberg ) {\n\t\t\tsetTimeout( () => $editors.each( transform ), 200 );\n\t\t}\n\t} );\n\n\trwmb.$document\n\t\t.on( 'mb_blocks_edit', init )\n\t\t.on( 'mb_init_editors', init )\n\t\t.on( 'clone', '.rwmb-wysiwyg', function() {\n\t\t\t/*\n\t\t\t * Transform a textarea to an editor is a heavy task.\n\t\t\t * Moving it to the end of task queue with setTimeout makes cloning faster.\n\t\t\t */\n\t\t\tsetTimeout( transform.bind( this ), 200 );\n\t\t} );\n} )( jQuery, wp, window, rwmb );\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/meta-box.php",
    "content": "<?php\n/**\n * Plugin Name: Meta Box\n * Plugin URI:  https://metabox.io\n * Description: Create custom meta boxes and custom fields in WordPress.\n * Version:     5.10.19\n * Author:      MetaBox.io\n * Author URI:  https://metabox.io\n * License:     GPL2+\n * Text Domain: meta-box\n *\n * Copyright (C) 2010-2025 Tran Ngoc Tuan Anh. All rights reserved.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nif ( defined( 'ABSPATH' ) && ! defined( 'RWMB_VER' ) ) {\n\trequire_once __DIR__ . '/inc/loader.php';\n\t$rwmb_loader = new RWMB_Loader();\n\t$rwmb_loader->init();\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/readme.txt",
    "content": "=== Meta Box ===\nContributors: elightup, metabox, rilwis, f-j-kaiser, funkatronic, PerWiklander, ruanmer, tanng\nDonate link: https://metabox.io/pricing/\nTags: custom fields, custom post types, post type, custom taxonomies, meta box\nRequires at least: 6.5\nRequires PHP: 7.1\nTested up to: 6.8.3\nStable tag: 5.10.19\nLicense: GPLv2 or later\n\nMeta Box plugin is a powerful, professional developer toolkit to create custom meta boxes and custom fields for your custom post types in WordPress.\n\n== Description ==\n\n### WordPress custom fields plugin\n\n[Meta Box](https://metabox.io) is a professional framework that makes building and customizing a website with dynamic data and content in WordPress fun and easy.\n\nMeta Box helps you add [custom fields](https://metabox.io/series/custom-fields/) and dynamic data to posts, pages, custom post types, forms and anywhere you want using over 40+ different field types such as text, images, file upload, checkboxes, and more.\n\nOn top of that, each WordPress custom field type has extensive internal options for unlimited content possibilities. Complete customization and control is just a few clicks away.\n\n> **Meta Box Lite**\n> We recommend using [Meta Box Lite](https://metabox.io/lite/), a feature-rich free UI version of Meta Box that provides UI and all free features for managing custom fields and dynamic content on WordPress, including post types, taxonomies, custom fields, and relationships.\n\n### Create any type of custom fields in WordPress\n\nThat's right – any type. No matter where you need to insert custom data and features, Meta Box's WordPress custom fields have your back, and with infinite options to boot.\n\n**Here are just a few of the data types you can customize:**\n\n- Posts\n- Pages\n- Custom post types (you can also use our free plugin [MB Custom Post Types & Custom Taxonomies](https://metabox.io/plugins/custom-post-type/) to create custom post types and custom taxonomies)\n- [Taxonomies](https://metabox.io/plugins/mb-term-meta/)\n- [Settings pages or Customizer sections](https://metabox.io/plugins/mb-settings-page/)\n- [User profile pages](https://metabox.io/plugins/mb-user-profile/)\n- [Post comments](https://metabox.io/plugins/mb-comment-meta/)\n\n### A wide-range of field types and options\n\nTake your standard WordPress custom field and imagine it infinitely expanded. That's how many options Meta Box gives you:\n\n- Meta Box supports [40+ built-in WordPress custom field types](https://docs.metabox.io/fields/) for all your needs including text, textarea, WYSIWYG editor, image, file, post, select, checkbox, radio buttons, date/time picker, taxonomy, user, oembed and more to come.\n- Not enough? You can also [effortlessly create your own field type](https://docs.metabox.io/custom-field-type/).\n- Meta Box supports cloning fields for most field types including the WYSIWYG editor field. It also supports [repeatable field groups](https://metabox.io/plugins/meta-box-group/).\n\n### It's developer-friendly\n\nAs a developer, you have enough on your plate. You shouldn't have to create an entirely new system for each project. Use Meta Box to your full advantage.\n\nYou can use Meta Box and its custom fields for any custom post type in WordPress on as many websites as you want so you can use it on client projects as well.\n\n- Has an ultra-lightweight, yet powerful API that won't overload your site.\n- Add only what you need instead of getting stuck with a bundle of features you don't even want that bloat your site.\n- Meta Box [easily integrates with any theme and plugin](https://docs.metabox.io/integration/), and supports Composer!\n- We use the [native WordPress meta data storage](https://docs.metabox.io/database/) and functions for ease of use and lightning-fast processing.\n- Has a lot of [actions](https://docs.metabox.io/category/actions/) and [filters](https://docs.metabox.io/category/filters/) so you can build or change a site's appearance and behavior in the plugin.\n\n### Don't love coding? You're in luck!\n\nIf you prefer a more visual system to create custom fields in WordPress, please use [Meta Box Lite](https://metabox.io/lite/), a feature-rich free UI version of Meta Box that provides:\n\n- All the power of Meta Box without touching a single line of code.\n- Designer-friendly, lightweight and work at top-notch speeds.\n- Export your custom fields and settings to PHP. Then, add it to a new site without needing to install this extension for an incredibly lightweight option.\n\n### Free Extensions\n\n- Migrations from [ACF](https://metabox.io/plugins/mb-acf-migration/) or [Toolset](https://metabox.io/plugins/mb-toolset-migration/).\n- Integrations with all page builder plugins like [Elementor](https://metabox.io/plugins/mb-elementor-integrator/), [Beaver Builder](https://metabox.io/plugins/meta-box-beaver-themer-integrator/), Divi, Bricks, Brizy, etc.\n- Integrations with SEO plugins like [Yoast SEO](https://wordpress.org/plugins/meta-box-yoast-seo/), [Rank Math](https://metabox.io/plugins/mb-rank-math/), or Slim SEO.\n- [MB Builder](https://metabox.io/plugins/meta-box-builder/): Create custom meta boxes and custom fields in WordPress using a user-friendly drag-and-drop interface.\n- [MB Comment Meta](https://metabox.io/plugins/mb-comment-meta/): Add WordPress custom fields to comments in WordPress.\n- [MB Custom Post Types & Custom Taxonomies](https://metabox.io/plugins/custom-post-type/): Create and manage custom post types and taxonomies with UI.\n- [MB Relationships](https://wordpress.org/plugins/mb-relationships/): Create as many connections as you want from post-to-post or page-to-page.\n- [MB Rest API](https://metabox.io/plugins/mb-rest-api/): Pull all meta values from posts and terms into the WP REST API responses.\n- [MB FacetWP Integrator](https://metabox.io/plugins/meta-box-facetwp-integrator/): Integrates Meta Box and FacetWP to make custom fields searchable and filterable.\n- [MB Text Limiter](https://wordpress.org/plugins/meta-box-text-limiter/): Limit the number of characters or words entered for text and textarea fields.\n\n### Premium Extensions\n\n- [MB Admin Columns](https://metabox.io/plugins/mb-admin-columns/): Display WordPress custom fields in table columns in admin.\n- [MB Blocks](https://metabox.io/plugins/mb-blocks/): Create custom Gutenberg blocks with PHP, using the same syntax in Meta Box.\n- [MB Columns](https://metabox.io/plugins/meta-box-columns/): Display eye-catching custom fields in WordPress by putting them into 12-column grids.\n- [MB Conditional Logic](https://metabox.io/plugins/meta-box-conditional-logic/): Add visibility dependency for custom meta boxes and custom fields in WordPress.\n- [MB Custom Table](https://metabox.io/plugins/mb-custom-table/): Save custom fields to custom tables instead of the default meta tables to reduce your database's size and increase its performance.\n- [MB Frontend Submission](https://metabox.io/plugins/mb-frontend-submission/): Create frontend forms for users to submit posts.\n- [MB Geolocation](https://metabox.io/plugins/meta-box-geolocation/): Automatically and instantly populate location data with the power of the Google Maps Geolocation API.\n- [MB Group](https://metabox.io/plugins/meta-box-group/): Create repeatable groups for better appearance and structure.\n- [MB Include Exclude](https://metabox.io/plugins/meta-box-include-exclude/): Show or hide meta boxes by ID, page template, taxonomy, or custom function.\n- [MB Revision](https://metabox.io/plugins/mb-revision/): Track changes to custom fields in WordPress with revisions. You can compare and restore the changes smoothly.\n- [MB Settings Page](https://metabox.io/plugins/mb-settings-page/): Create settings pages for themes, plugins or websites with beautiful syntax.\n- [MB Show Hide](https://metabox.io/plugins/meta-box-show-hide-javascript/): Toggle meta boxes by page template, post format, taxonomy and category.\n- [MB Tabs](https://metabox.io/plugins/meta-box-tabs/): Painlessly create tabs for meta boxes with multiple styles and icons.\n- [MB Template](https://metabox.io/plugins/meta-box-template/): Make defining custom meta boxes and WordPress custom fields way easier with templates.\n- [MB Term Meta](https://metabox.io/plugins/mb-term-meta/): Add custom fields to categories, tags or custom taxonomies.\n- [MB Tooltip](https://metabox.io/plugins/meta-box-tooltip/): Display help information for custom fields with tooltips.\n- [MB User Meta](https://metabox.io/plugins/mb-user-meta/): Add custom fields to users.\n- [MB User Profile](https://metabox.io/plugins/mb-user-profile/): Build login, register and edit profile forms for users.\n- [MB Views](https://metabox.io/plugins/mb-views/): Outputting custom fields and build front-end templates for WordPress without touching theme files.\n\n### Detailed Documentation\n\nWe provide regularly updated, and extensive [documentation](https://docs.metabox.io) as well as [tutorials](https://docs.metabox.io/tutorials/) on how to use MetaBox and custom fields in WordPress to your advantage as well as in the most efficient way possible.\n\nHere are a few guides to quickly get you started with Meta Box and creating your own WordPress custom fields:\n\n- [Introduction](https://docs.metabox.io/introduction/)\n- [Custom post types](https://docs.metabox.io/custom-post-types/)\n- [Custom fields](https://docs.metabox.io/custom-fields/)\n- [Field settings](https://docs.metabox.io/field-settings/)\n- [Displaying fields](https://docs.metabox.io/displaying-fields-with-code/)\n\n### You might also like\n\nIf you like this plugin, you might also like our other WordPress products:\n\n- [Slim SEO](https://wpslimseo.com) - A fast, lightweight and full-featured SEO plugin for WordPress with minimal configuration.\n- [GretaThemes](https://gretathemes.com) - Free and premium WordPress themes that clean, simple and just work.\n- [Auto Listings](https://wpautolistings.com) - A car sale and dealership plugin for WordPress.\n\n== Installation ==\n\nWe recommend using [Meta Box Lite](https://metabox.io/lite/), a feature-rich free UI version of Meta Box that provides UI and all free features for managing custom fields and dynamic content on WordPress, including post types, taxonomies, custom fields, and relationships.\n\nTo install Meta Box Lite, go to [this page](https://metabox.io/lite/) and download it.\n\nIf you want to use Meta Box, please follow these steps:\n\n1. Visit **Plugins > Add New** inside your WordPress dashboard\n1. Search for **Meta Box**\n1. Click the **Install Now** button to install the plugin\n1. Click the **Activate** button to activate the plugin\n\n[Get started here](https://docs.metabox.io/introduction/).\n\n== Frequently Asked Questions ==\n\n== Screenshots ==\n1. Text Fields\n1. Basic Fields\n1. Advanced Fields\n1. File Image Upload Fields\n1. Media Fields\n1. Post Taxonomy Fields\n\n== Changelog ==\n\n= 5.10.19 - 2025-11-24 =\n\n- Fix the `use` statement with non-compound name has no effect\n\n= 5.10.18 - 2025-11-24 =\n\n- Fix deprecation message for `datetime` field\n\n= 5.10.17 - 2025-11-07 =\n\n- WPML integration: fix error when filtering value for helper functions when no fields are found.\n\n= 5.10.16 - 2025-11-05 =\n\n- WPML integration: filter helper functions to get the translated IDs for `post` field\n- Fix cloning `post` field not clearing the value\n\n= 5.10.15 - 2025-10-06 =\n\n- Add `marker_draggable` option for `map`/`osm` fields to disable changing the pin on the map.\n\n= 5.10.14 - 2025-09-15 =\n\n- Update dependencies\n\n= 5.10.13 - 2025-08-14 =\n\n- Fix `get_current_screen()` error for term meta\n\n= 5.10.12 - 2025-08-13 =\n\n- Fix Open Street Maps field not showing (sometimes) with conditional logic\n- Enqueue assets for the iframed editor, to make all fields are rendered properly in the iframed editor\n\n= 5.10.11 - 2025-07-15 =\n\nFix validation for blocks\n\n= 5.10.10 - 2025-05-21 =\n- Fix datetime field returns null\n- Fix single image field not working with Polylang Pro\n- Fix reveal password icon not working\n\n= 5.10.9 - 2025-05-08 =\n- Add button to toggle password (#1630)\n- Add gesture handling support for OSM field (#1631)\n- Datetime & select2: use user's locale instead of site's locale\n\n= 5.10.8 - 2025-03-14 =\n- Redesign the dashboard\n\n= 5.10.7 - 2025-02-25 =\n- Fix: max clone with clone empty start\n\n= 5.10.6 - 2025-01-11 =\n- Fix validation for dash ids\n- Fix datetime fields not showing inline picker inside groups\n- Fix `label_description` not working for `fieldset_text`\n- Fix field label div still show when no field name but with `label_description`\n- Remove `image_select` field's JS, styling with CSS only\n- Add gap for key value inputs\n\n= 5.10.5 - 2024-12-16 =\n- Make validation for add new terms work\n- Improve styling of meta boxes on the sidebar in the block editor\n- Improve style of input with prepend and append\n- Fix maps/osm fields and geolocation not working with subfields in groups\n- Fix select advanced becomes normal select with cloneable setting\n- Fix validation\n\n= 5.10.4 - 2024-11-20 =\n- OSM/Map fields: add support for select field type\n- Add `$url` to `rwmb_oembed_not_available_string` filter\n- Small CSS improvements for file input, background & button group\n- Fix not returning value for helper functions for images saving in a custom folder and using a custom table\n\n= 5.10.3 - 2024-10-30 =\n- fix: std after saving\n- fix: field set text save empty values\n- fix: subfield's id\n\n= 5.10.2 - 2024-09-26 =\n- Fix issue with conditional logic\n- Fix error when removing default taxonomy meta box in the front end or with the block editor\n- Fix missing .hidden on the front end for `checkbox_tree`\n- Fix required attribute for `select_tree`\n\n= 5.10.1 - 2024-09-07 =\n- Fix issue with `clone_empty_start` (validation, now showing data for the 1st clone, broken `text_list` field, etc.)\n\n[See full changelog here](https://metabox.io/changelog/).\n\n== Upgrade Notice ==\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Dashboard/Dashboard.php",
    "content": "<?php\nnamespace MetaBox\\Dashboard;\n\nclass Dashboard {\n\tprivate $upgradable  = true;\n\tprivate $has_actions = false;\n\tprivate $is_aio      = false;\n\tprivate $assets_url;\n\n\tpublic function __construct( $update_checker, $update_option ) {\n\t\t$this->upgradable  = $this->get_upgradable( $update_checker, $update_option );\n\t\t$this->has_actions = defined( 'META_BOX_LITE_DIR' ) || defined( 'META_BOX_AIO_DIR' );\n\t\t$this->is_aio      = defined( 'META_BOX_AIO_DIR' );\n\t\t$this->assets_url  = RWMB_URL . 'src/Dashboard/assets';\n\n\t\t$this->init();\n\t}\n\n\tprivate function get_upgradable( $update_checker, $update_option ): bool {\n\t\tif ( ! $update_checker || ! $update_option ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( ! $update_checker->has_extensions() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn $update_option->get_license_status() !== 'active';\n\t}\n\n\tpublic function init(): void {\n\t\t// Add links to the Dashboard in the plugin action links.\n\t\tadd_filter( 'plugin_action_links_meta-box/meta-box.php', [ $this, 'plugin_links' ], 20 );\n\n\t\t// Add a shared top-level admin menu and the Dashboard. Use priority 5 to show the Dashboard at the top.\n\t\tadd_action( 'admin_menu', [ $this, 'add_menu' ], 5 );\n\t\tadd_action( 'admin_menu', [ $this, 'add_submenu' ], 5 );\n\n\t\t// If no admin menu, then hide the Dashboard.\n\t\tadd_action( 'admin_head', [ $this, 'hide_page' ] );\n\n\t\t// Redirect to the Dashboard after activation.\n\t\tadd_action( 'activated_plugin', [ $this, 'redirect' ], 10, 2 );\n\n\t\t// Handle install & activate plugin.\n\t\tadd_action( 'wp_ajax_mb_dashboard_plugin_action', [ $this, 'handle_plugin_action' ] );\n\n\t\t// Handle ajax to get RSS.\n\t\tadd_action( 'wp_ajax_mb_dashboard_feed', [ $this, 'get_feed' ] );\n\t}\n\n\tpublic function plugin_links( array $links ): array {\n\t\t$links[] = '<a href=\"' . esc_url( $this->get_menu_link() ) . '\">' . esc_html__( 'Dashboard', 'meta-box' ) . '</a>';\n\t\tif ( $this->upgradable ) {\n\t\t\t$links[] = '<a href=\"https://elu.to/mpp\" style=\"color: #39b54a; font-weight: bold\">' . esc_html__( 'Upgrade', 'meta-box' ) . '</a>';\n\t\t}\n\t\treturn $links;\n\t}\n\n\tpublic function add_menu(): void {\n\t\tif ( ! $this->has_menu() ) {\n\t\t\treturn;\n\t\t}\n\t\tadd_menu_page(\n\t\t\t__( 'Meta Box', 'meta-box' ),\n\t\t\t__( 'Meta Box', 'meta-box' ),\n\t\t\t'activate_plugins',\n\t\t\t'meta-box',\n\t\t\t'__return_null',\n\t\t\t'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIxNjQuMzI4IDE0OS40NDEgNTMuNDcgNDIuNjYiIHdpZHRoPSI1My40NyIgaGVpZ2h0PSI0Mi42NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cGF0aCBkPSJNIDIwNC42NjggMTc5LjM5MSBMIDIwNS40ODggMTYwLjU1MSBMIDIwNS4zMTggMTYwLjUyMSBMIDE5My44ODggMTkyLjEwMSBMIDE4OC4xNDggMTkyLjEwMSBMIDE3Ni43NzggMTYwLjY0MSBMIDE3Ni42MDggMTYwLjY2MSBMIDE3Ny40MjggMTc5LjM5MSBMIDE3Ny40MjggMTg2LjA5MSBMIDE4MS45OTggMTg2Ljk3MSBMIDE4MS45OTggMTkyLjEwMSBMIDE2NC4zMjggMTkyLjEwMSBMIDE2NC4zMjggMTg2Ljk3MSBMIDE2OC44NjggMTg2LjA5MSBMIDE2OC44NjggMTU1LjQ4MSBMIDE2NC4zMjggMTU0LjYwMSBMIDE2NC4zMjggMTQ5LjQ0MSBMIDE2OC44NjggMTQ5LjQ0MSBMIDE4MC4wMjggMTQ5LjQ0MSBMIDE5MC44OTggMTgwLjg4MSBMIDE5MS4wNzggMTgwLjg4MSBMIDIwMi4wMzggMTQ5LjQ0MSBMIDIxNy43OTggMTQ5LjQ0MSBMIDIxNy43OTggMTU0LjYwMSBMIDIxMy4yMjggMTU1LjQ4MSBMIDIxMy4yMjggMTg2LjA5MSBMIDIxNy43OTggMTg2Ljk3MSBMIDIxNy43OTggMTkyLjEwMSBMIDIwMC4xMjggMTkyLjEwMSBMIDIwMC4xMjggMTg2Ljk3MSBMIDIwNC42NjggMTg2LjA5MSBMIDIwNC42NjggMTc5LjM5MSBaIiBzdHlsZT0iZmlsbDogcmdiKDE1OCwgMTYzLCAxNjgpOyB3aGl0ZS1zcGFjZTogcHJlOyIvPgo8L3N2Zz4='\n\t\t);\n\t}\n\n\tpublic function add_submenu(): void {\n\t\t$parent_menu = $this->has_menu() ? 'meta-box' : $this->get_parent_menu();\n\t\t$about       = add_submenu_page(\n\t\t\t$parent_menu,\n\t\t\t__( 'Dashboard', 'meta-box' ),\n\t\t\t__( 'Dashboard', 'meta-box' ),\n\t\t\t'activate_plugins',\n\t\t\t'meta-box',\n\t\t\t[ $this, 'render' ]\n\t\t);\n\t\tadd_action( \"load-$about\", [ $this, 'enqueue' ] );\n\t}\n\n\tpublic function hide_page(): void {\n\t\tremove_submenu_page( $this->get_parent_menu(), 'meta-box' );\n\t}\n\n\tpublic function render(): void {\n\t\t?>\n\t\t<div class=\"mb-dashboard\">\n\t\t\t<?php include 'content.php'; ?>\n\t\t</div>\n\t\t<?php\n\t}\n\n\tpublic function enqueue(): void {\n\t\twp_enqueue_style( 'meta-box-dashboard', \"$this->assets_url/css/dashboard.css\", [], filemtime( __DIR__ . '/assets/css/dashboard.css' ) );\n\t\twp_enqueue_style( 'featherlight', \"$this->assets_url/css/featherlight.min.css\", [], '1.7.14' );\n\t\twp_enqueue_script( 'featherlight', \"$this->assets_url/js/featherlight.min.js\", [ 'jquery' ], '1.7.14', true );\n\t\twp_enqueue_script( 'meta-box-dashboard', \"$this->assets_url/js/dashboard.js\", [ 'featherlight' ], filemtime( __DIR__ . '/assets/js/dashboard.js' ), true );\n\n\t\t$campaign = 'meta_box';\n\t\tif ( defined( 'META_BOX_LITE_DIR' ) ) {\n\t\t\t$campaign = 'meta_box_lite';\n\t\t} elseif ( defined( 'META_BOX_AIO_DIR' ) ) {\n\t\t\t$campaign = 'meta_box_aio';\n\t\t}\n\n\t\twp_localize_script( 'meta-box-dashboard', 'MBD', [\n\t\t\t'campaign' => $campaign,\n\t\t\t'nonces'   => [\n\t\t\t\t'plugin' => wp_create_nonce( 'plugin' ),\n\t\t\t\t'feed'   => wp_create_nonce( 'feed' ),\n\t\t\t],\n\t\t] );\n\t}\n\n\t/**\n\t * Redirect to about page after Meta Box has been activated.\n\t *\n\t * @param string $plugin       Path to the main plugin file from plugins directory.\n\t * @param bool   $network_wide Whether to enable the plugin for all sites in the network\n\t *                             or just the current site. Multisite only. Default is false.\n\t */\n\tpublic function redirect( $plugin, $network_wide = false ): void {\n\t\t$is_cli           = 'cli' === php_sapi_name();\n\t\t$is_plugin        = 'meta-box/meta-box.php' === $plugin;\n\t\t$is_bulk_activate = 'activate-selected' === rwmb_request()->post( 'action' ) && count( rwmb_request()->post( 'checked' ) ) > 1;\n\t\t$is_doing_ajax    = defined( 'DOING_AJAX' ) && DOING_AJAX;\n\n\t\tif ( ! $is_plugin || $network_wide || $is_cli || $is_bulk_activate || $this->is_bundled() || $is_doing_ajax ) {\n\t\t\treturn;\n\t\t}\n\t\twp_safe_redirect( $this->get_menu_link() );\n\t\tdie;\n\t}\n\n\tprivate function get_menu_link(): string {\n\t\t$menu = $this->has_menu() ? 'admin.php?page=meta-box' : $this->get_parent_menu() . '?page=meta-box';\n\t\treturn admin_url( $menu );\n\t}\n\n\tprivate function get_parent_menu(): string {\n\t\treturn 'plugins.php';\n\t}\n\n\tprivate function has_menu(): bool {\n\t\treturn apply_filters( 'rwmb_admin_menu', false );\n\t}\n\n\tprivate function is_bundled(): bool {\n\t\t// @codingStandardsIgnoreLine\n\t\tforeach ( $_REQUEST as $key => $value ) {\n\t\t\tif ( str_contains( $key, 'tgmpa' ) || ( is_string( $value ) && str_contains( $value, 'tgmpa' ) ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate function get_plugin_status( string $slug ): array {\n\t\tif ( ! function_exists( 'is_plugin_active' ) ) {\n\t\t\trequire_once ABSPATH . 'wp-admin/includes/plugin.php';\n\t\t}\n\n\t\t$plugin  = \"$slug/$slug.php\";\n\t\t$plugins = get_plugins();\n\n\t\tif ( empty( $plugins[ $plugin ] ) ) {\n\t\t\treturn [\n\t\t\t\t'action'     => 'install',\n\t\t\t\t'text'       => __( 'Install', 'meta-box' ),\n\t\t\t\t'processing' => __( 'Installing...', 'meta-box' ),\n\t\t\t\t'done'       => __( 'Active', 'meta-box' ),\n\t\t\t];\n\t\t}\n\n\t\tif ( ! is_plugin_active( $plugin ) ) {\n\t\t\treturn [\n\t\t\t\t'action'     => 'activate',\n\t\t\t\t'text'       => __( 'Activate', 'meta-box' ),\n\t\t\t\t'processing' => __( 'Activating...', 'meta-box' ),\n\t\t\t\t'done'       => __( 'Active', 'meta-box' ),\n\t\t\t];\n\t\t}\n\n\t\treturn [\n\t\t\t'action'     => '',\n\t\t\t'text'       => __( 'Active', 'meta-box' ),\n\t\t\t'processing' => '',\n\t\t\t'done'       => '',\n\t\t];\n\t}\n\n\tpublic function handle_plugin_action(): void {\n\t\tcheck_ajax_referer( 'plugin' );\n\n\t\t$plugin = isset( $_GET['mb_plugin'] ) ? sanitize_text_field( wp_unslash( $_GET['mb_plugin'] ) ) : '';\n\t\t$action = isset( $_GET['mb_action'] ) ? sanitize_text_field( wp_unslash( $_GET['mb_action'] ) ) : '';\n\n\t\tif ( ! $plugin || ! $action || ! in_array( $action, [ 'install', 'activate' ], true ) ) {\n\t\t\twp_send_json_error();\n\t\t}\n\n\t\tif ( $action === 'install' ) {\n\t\t\t$this->install_plugin( $plugin );\n\t\t\t$this->activate_plugin( $plugin );\n\t\t} elseif ( $action === 'activate' ) {\n\t\t\t$this->activate_plugin( $plugin );\n\t\t}\n\n\t\twp_send_json_success();\n\t}\n\n\tprivate function install_plugin( string $slug ): void {\n\t\trequire_once ABSPATH . 'wp-admin/includes/plugin.php';\n\t\trequire_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';\n\t\trequire_once ABSPATH . 'wp-admin/includes/plugin-install.php';\n\n\t\t$plugin  = \"$slug/$slug.php\";\n\t\t$plugins = get_plugins();\n\n\t\tif ( isset( $plugins[ $plugin ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$api = plugins_api(\n\t\t\t'plugin_information',\n\t\t\t[\n\t\t\t\t'slug'   => $slug,\n\t\t\t\t'fields' => [\n\t\t\t\t\t'short_description' => false,\n\t\t\t\t\t'requires'          => false,\n\t\t\t\t\t'sections'          => false,\n\t\t\t\t\t'rating'            => false,\n\t\t\t\t\t'ratings'           => false,\n\t\t\t\t\t'downloaded'        => false,\n\t\t\t\t\t'last_updated'      => false,\n\t\t\t\t\t'added'             => false,\n\t\t\t\t\t'tags'              => false,\n\t\t\t\t\t'compatibility'     => false,\n\t\t\t\t\t'homepage'          => false,\n\t\t\t\t\t'donate_link'       => false,\n\t\t\t\t],\n\t\t\t]\n\t\t);\n\n\t\tif ( is_wp_error( $api ) ) {\n\t\t\twp_send_json_error( $api->get_error_message() );\n\t\t}\n\n\t\t$skin     = new \\Plugin_Installer_Skin( [ 'api' => $api ] );\n\t\t$upgrader = new \\Plugin_Upgrader( $skin );\n\t\t$result   = $upgrader->install( $api->download_link );\n\n\t\tif ( is_wp_error( $result ) ) {\n\t\t\twp_send_json_error( $result->get_error_message() );\n\t\t}\n\n\t\tif ( ! $result ) {\n\t\t\twp_send_json_error( __( 'Error installing plugin. Please try again.', 'meta-box' ) );\n\t\t}\n\t}\n\n\tprivate function activate_plugin( string $slug ): void {\n\t\trequire_once ABSPATH . 'wp-admin/includes/plugin.php';\n\n\t\t$result = activate_plugin( \"$slug/$slug.php\", '', false, true );\n\n\t\tif ( is_wp_error( $result ) ) {\n\t\t\twp_send_json_error( $result->get_error_message() );\n\t\t}\n\t}\n\n\tpublic function get_feed(): void {\n\t\tcheck_ajax_referer( 'feed' );\n\n\t\t$rss = fetch_feed( 'https://feeds.feedburner.com/metaboxio' );\n\n\t\tif ( is_wp_error( $rss ) ) {\n\t\t\twp_send_json_error( $rss->get_error_message() );\n\t\t}\n\n\t\t$rss->set_item_limit( 10 );\n\t\t$items = $rss->get_items( 0, 10 );\n\n\t\tif ( ! $items ) {\n\t\t\twp_send_json_error( __( 'No items available', 'meta-box' ) );\n\t\t}\n\n\t\t$items = array_map( function ( $item ): array {\n\t\t\treturn [\n\t\t\t\t'url'         => $item->get_permalink(),\n\t\t\t\t'title'       => $item->get_title(),\n\t\t\t\t'description' => $item->get_description(),\n\t\t\t\t'content'     => $item->get_content(),\n\t\t\t\t'date'        => $item->get_date( get_option( 'date_format' ) ),\n\t\t\t\t'timestamp'   => $item->get_date( 'U' ),\n\t\t\t];\n\t\t}, $items );\n\n\t\twp_send_json_success( $items );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Dashboard/assets/css/dashboard.css",
    "content": "﻿body.wp-admin{background:#f8fafc}div#wpcontent{padding-left:0}#wpwrap .notice{display:none}.mb-dashboard{--mb-color-accent: #00b1b3;--mb-color-link: var(--mb-color-accent);--mb-border: 1px solid #cbd5e1;font-size:14px;color:#334155}.mb-dashboard a{text-decoration:none;color:var(--mb-color-link)}.mb-dashboard a:hover{color:var(--mb-color-link);text-decoration:underline}.mb-dashboard a:focus,.mb-dashboard a:active{outline:none;box-shadow:none}.mb-dashboard p{font-size:14px}.mb-dashboard table{width:100%;border-collapse:collapse}.mb-dashboard tr{border-bottom:1px solid #e2e8f0}.mb-dashboard tr:hover{background:#f8fafc}.mb-dashboard th,.mb-dashboard td{padding-block:12px}.mb-dashboard__button{--mb-color-link: #fff;display:inline-block;background:var(--mb-color-accent);padding:16px;text-transform:uppercase;font-weight:700;font-size:16px;line-height:1;letter-spacing:.025em;white-space:nowrap;border-radius:4px;text-decoration:none}.mb-dashboard__button.mb-dashboard__button:hover{color:#fff;opacity:.9;text-decoration:none}.mb-dashboard__button:focus,.mb-dashboard__button:active{color:#fff}.mb-dashboard__hidden{display:none}.mb-dashboard__external{display:inline-flex;align-items:center;gap:4px}.mb-dashboard__external svg{width:1em;height:1em;fill:currentColor}.mb-dashboard__tooltip{position:relative}.mb-dashboard__tooltip:after{content:attr(data-tooltip);background-color:#0f172a;color:#fff;padding:4px 8px;border-radius:4px;white-space:nowrap;position:absolute;top:calc(100% + 8px);left:50%;transform:translateX(-50%);visibility:hidden;opacity:0;transition:opacity .3s ease-in-out}.mb-dashboard__tooltip[data-position=top]:after{bottom:calc(100% + 8px);top:auto}.mb-dashboard__tooltip[data-position=bottom-right]:after{left:auto;transform:none;right:0}.mb-dashboard__tooltip:hover:after{visibility:visible;opacity:1}.mb-dashboard__body{display:flex;gap:48px;padding:48px;max-width:1280px;margin-inline:auto}.mb-dashboard__header{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:12px;background:#fff;border-bottom:1px solid #e2e8f0}.mb-dashboard__header__search{flex:1}.mb-dashboard__header__search__inner{position:relative;max-width:480px;margin-inline:auto}.mb-dashboard__header__search input[type=text]{width:100%;background:#f1f5f9;border-color:#e2e8f0;padding:2px 16px;margin:0}.mb-dashboard__header__search input[type=text]:focus,.mb-dashboard__header__search input[type=text]:hover{border-color:#cbd5e1;box-shadow:none}.mb-dashboard__header__search:has(.mb-dashboard__header__search-results:not([data-type=empty])) input{border-radius:4px 4px 0 0}.mb-dashboard__header__search-results{position:absolute;top:33px;left:0;right:0;background:#fff;z-index:9;border:var(--mb-border);border-radius:0 0 4px 4px;box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1)}.mb-dashboard__header__search-results a{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;color:inherit;padding:8px 16px;transition:all .2s ease-in-out}.mb-dashboard__header__search-results a:hover{color:inherit;text-decoration:none;background:#f1f5f9}.mb-dashboard__header__search-results a:last-child{border-radius:0 0 4px 4px}.mb-dashboard__header__search-results span{display:inline-block;padding:2px 8px;background:#e2e8f0;border:var(--mb-border);border-radius:4px;font-size:12px}.mb-dashboard__header__search-results[data-type=empty]{display:none}.mb-dashboard__header__search-results[data-type=text]{padding:16px}.mb-dashboard__header__icons{display:flex;align-items:center}.mb-dashboard__header__icons a{display:inline-flex;align-items:center;justify-content:center}.mb-dashboard__header__social{display:flex;align-items:center;gap:12px;border-right:var(--mb-border);padding-right:12px;margin-right:12px}.mb-dashboard__header__social svg{width:16px;height:16px;fill:#64748b;transition:all .2s ease-in-out}.mb-dashboard__header__social a{width:24px;height:24px}.mb-dashboard__header__social a:hover svg{fill:#334155}.mb-dashboard__header__links{display:flex;align-items:center;gap:12px}.mb-dashboard__header__links a{color:#64748b;width:36px;height:36px;border:var(--mb-border);border-radius:50%}.mb-dashboard__header__links a:hover{color:#334155;border-color:#94a3b8}.mb-dashboard__header__links svg{width:20px;height:20px}.mb-dashboard__header .mb-dashboard__logo svg{display:block;width:auto;height:46px}.mb-dashboard__main{flex:1;display:flex;flex-direction:column;gap:48px}.mb-dashboard__actions__title{font-size:14px;font-weight:600;text-transform:uppercase;letter-spacing:.025em;line-height:1;margin-bottom:16px}.mb-dashboard__actions__inner{display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));gap:24px}.mb-dashboard__action{display:flex;gap:16px;align-items:center;border-radius:8px;border:1px solid var(--mb-color-accent);padding:24px;background:#fff;box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);position:relative;top:0;transition:all .2s ease}.mb-dashboard__action svg{width:32px;height:32px;fill:var(--mb-color-accent)}.mb-dashboard__action__title{display:block;margin-bottom:4px;color:#0f172a;font-weight:600;font-size:16px}.mb-dashboard__action__description{color:#64748b}.mb-dashboard__action.mb-dashboard__action:hover{text-decoration:none;top:-8px}.mb-dashboard__intro__subtitle{font-size:16px}.mb-dashboard__intro__title{font-size:24px;color:#0f172a;font-weight:600;margin-top:12px}.mb-dashboard__intro__text{margin-top:24px;font-size:18px;line-height:1.6}.mb-dashboard__intro .mb-dashboard__button{margin-top:24px}.mb-dashboard__info{background:#fff;border-radius:8px;border:var(--mb-border)}.mb-dashboard__tabs{display:flex;gap:24px;border-bottom:var(--mb-border);font-size:14px;padding-inline:24px}.mb-dashboard__tab{display:block;padding-block:16px;border-bottom:3px solid rgba(0,0,0,0);font-weight:600;color:#0f172a;cursor:pointer}.mb-dashboard__tab--active{border-color:var(--mb-color-accent)}.mb-dashboard__tab__badge{background:var(--mb-color-accent);color:#fff;font-size:10px;display:inline-block;line-height:1;padding:4px;border-radius:2px;position:relative;top:-12px}.mb-dashboard__tab-pane{padding:24px}.mb-dashboard__tutorials__inner{display:grid;gap:16px;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));margin-bottom:24px}.mb-dashboard__tutorial{display:flex;align-items:flex-start;gap:16px}.mb-dashboard__tutorial a{color:inherit}.mb-dashboard__tutorial__image{position:relative}.mb-dashboard__tutorial__image .tobii-zoom__icon{display:none}.mb-dashboard__tutorial__image:before{position:absolute;top:calc(50% - 9px);left:calc(50% - 16px);content:\"\";font-family:\"dashicons\";font-size:32px;color:red}.mb-dashboard__tutorial img{width:90px;height:auto;display:block;border-radius:8px}.mb-dashboard__tutorial .mb-dashboard__tutorial__title{font-size:16px;font-weight:600;color:#0f172a;margin-bottom:8px;display:block}.mb-dashboard__tutorial__description{font-size:12px;color:#64748b}.mb-dashboard__compare{container-type:inline-size}.mb-dashboard__compare__header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-block:24px}.mb-dashboard__compare__header p{margin-bottom:0}.mb-dashboard__compare__title{font-size:20px;font-weight:600;color:#0f172a}.mb-dashboard__compare tbody svg{width:20px;height:20px}.mb-dashboard__compare__footer{margin-top:48px;background:#f1f5f9;padding:48px;text-align:center;border-radius:8px}.mb-dashboard__compare__footer p{font-size:16px;margin-bottom:24px}.mb-dashboard__sidebar{flex-basis:360px;display:flex;flex-direction:column;gap:24px}.mb-dashboard__widget{border:var(--mb-border);border-radius:8px;background:#fff;padding:24px}.mb-dashboard__widget-title{font-weight:600;font-size:16px;color:#0f172a;margin-bottom:18px;margin-top:-4px}.mb-dashboard__widget-body>p:last-child{margin-bottom:0}.mb-dashboard__upgrade{border:none;background:linear-gradient(135deg, rgb(0, 182, 182) 0%, rgb(43, 68, 91) 100%);color:#fff;position:relative}.mb-dashboard__upgrade .mb-dashboard__widget-title{color:inherit}.mb-dashboard__upgrade ul{margin-bottom:24px}.mb-dashboard__upgrade li{display:flex;gap:4px;align-items:center}.mb-dashboard__upgrade svg{width:16px;height:16px;fill:#fff}.mb-dashboard__upgrade a{display:block;text-align:center}.mb-dashboard__upgrade img{position:absolute;top:-30px;right:-10px;width:60px;transform:rotate(-30deg)}.mb-dashboard__plugins .mb-dashboard__widget-body{display:flex;flex-direction:column;gap:16px}.mb-dashboard__plugin{display:flex;align-items:center;gap:8px;position:relative}.mb-dashboard__plugin img{width:32px;height:32px}.mb-dashboard__plugin__text{flex:1}.mb-dashboard__plugin .mb-dashboard__plugin__title{font-weight:600;color:#0f172a}.mb-dashboard__plugin__description{font-size:12px;color:#64748b}.mb-dashboard__plugin__status{font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:4px;position:absolute;right:0;top:-4px;padding:2px 6px;border-radius:4px;border:1px solid rgba(0,0,0,0)}.mb-dashboard__plugin__status:before{display:inline-block;content:\"\";width:6px;height:6px;border-radius:50%;background:currentColor}.mb-dashboard__plugin__status[data-action=install]{color:#64748b;border-color:currentColor;cursor:pointer}.mb-dashboard__plugin__status[data-action=activate]{color:#f59e0b;border-color:currentColor;cursor:pointer}.mb-dashboard__plugin__status[data-action=\"\"]{color:var(--mb-color-accent)}.mb-dashboard__support{position:relative}.mb-dashboard__support__icon{position:absolute;top:0;right:0;width:48px;height:48px;fill:#f8fafc;z-index:0}.mb-dashboard__news-icon{position:relative}.mb-dashboard__news-icon:before{content:\"\";display:inline-block;width:10px;height:10px;position:absolute;top:0;right:0;background:#ef4444;border-radius:50%}.mb-dashboard__news{--mb-news-width: 360px;position:fixed;top:32px;right:calc(0px - var(--mb-news-width));width:var(--mb-news-width);bottom:0;background:#fff;transition:all .2s ease-in-out;overflow-x:auto;border-left:var(--mb-border)}.mb-dashboard__news--active{right:0}.mb-dashboard__news__header{padding:12px 24px;border-bottom:var(--mb-border);display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.mb-dashboard__news__heading{font-size:16px;font-weight:600;color:#0f172a}.mb-dashboard__news__close{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:none;background:none;cursor:pointer}.mb-dashboard__news__close svg{width:24px;height:24px}.mb-dashboard__news__date{font-size:10px;text-transform:uppercase;letter-spacing:.025em;font-weight:600;margin-bottom:8px;color:#94a3b8}.mb-dashboard__news .mb-dashboard__news__title{display:block;font-size:16px;font-weight:600;color:#0f172a;margin-bottom:16px}.mb-dashboard__news__content p{display:none}.mb-dashboard__news__item{padding-inline:24px}.mb-dashboard__news__item:not(:first-child){margin-top:24px;padding-top:24px;border-top:var(--mb-border)}.mb-dashboard__sale .mb-dashboard__widget-title{margin:-25px -25px 0;background:var(--mb-color-accent);color:#fff;padding:16px 24px;border-radius:4px 4px 0 0;position:relative}.mb-dashboard__sale__badge{background:url(../img/hot.svg) no-repeat center center;background-size:64px 64px;font-weight:700;font-size:12px;text-transform:uppercase;display:inline-block;width:64px;height:64px;line-height:64px;text-align:center;position:absolute;top:-24px;color:#0f172a}.mb-dashboard__sale__button{--mb-color-link: #fff;display:block;margin-inline:auto;text-align:center;background:var(--mb-color-accent);padding:16px 24px;line-height:1;white-space:nowrap;border-radius:4px;text-decoration:none}.mb-dashboard__sale__button.mb-dashboard__sale__button:hover{opacity:.9;text-decoration:none}.mb-dashboard__sale__button:focus,.mb-dashboard__sale__button:active{color:#fff}.mb-dashboard__sale__button-text--large{font-size:16px;font-weight:700;letter-spacing:.025em;text-transform:uppercase;display:block;margin-bottom:4px}.mb-dashboard__sale__button-text--small{font-size:14px;display:block;color:#fff}.mb-dashboard__countdown{list-style:none;padding:0;margin-inline:0;margin-top:16px;display:flex;align-items:center;justify-content:center;gap:16px;text-align:center}.mb-dashboard__countdown li{border:1px solid var(--mb-color-accent);border-radius:4px;padding:12px 16px;margin:0}.mb-dashboard__countdown-number{font-size:24px;font-weight:600;margin-bottom:8px}@media(max-width: 1023px){.mb-dashboard__header__search{display:none}.mb-dashboard__body{flex-direction:column}}@media(max-width: 782px){.mb-dashboard__news{top:46px}}@media(max-width: 599px){.mb-dashboard__header__social{display:none}.mb-dashboard__body{padding:24px}}@container (max-width: 599px){.mb-dashboard__compare__header{flex-direction:column}}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Dashboard/assets/css/dashboard.scss",
    "content": "// Overwrite general WordPress styles\n\nbody.wp-admin {\n\tbackground: #f8fafc; // slate-50\n}\n\ndiv#wpcontent {\n\tpadding-left: 0;\n}\n\n// Do not show any notices here.\n#wpwrap .notice {\n\tdisplay: none;\n}\n\n\n// Our dashboard\n\n.mb-dashboard {\n\t--mb-color-accent: #00b1b3;\n\t--mb-color-link: var(--mb-color-accent);\n\t--mb-border: 1px solid #cbd5e1; // slate-300\n\n\tfont-size: 14px;\n\tcolor: #334155; // slate-700\n\n\n\t// Common elements\n\n\ta {\n\t\ttext-decoration: none;\n\t\tcolor: var(--mb-color-link);\n\n\t\t&:hover {\n\t\t\tcolor: var(--mb-color-link);\n\t\t\ttext-decoration: underline;\n\t\t}\n\n\t\t&:focus,\n\t\t&:active {\n\t\t\toutline: none;\n\t\t\tbox-shadow: none;\n\t\t}\n\t}\n\n\tp {\n\t\tfont-size: 14px;\n\t}\n\n\ttable {\n\t\twidth: 100%;\n\t\tborder-collapse: collapse;\n\t}\n\n\ttr {\n\t\tborder-bottom: 1px solid #e2e8f0; // slate-200\n\n\t\t&:hover {\n\t\t\tbackground: #f8fafc; // slate-50\n\t\t}\n\t}\n\n\tth,\n\ttd {\n\t\tpadding-block: 12px;\n\t}\n\n\t&__button {\n\t\t--mb-color-link: #fff;\n\n\t\tdisplay: inline-block;\n\t\tbackground: var(--mb-color-accent);\n\t\tpadding: 16px;\n\t\ttext-transform: uppercase;\n\t\tfont-weight: 700;\n\t\tfont-size: 16px;\n\t\tline-height: 1;\n\t\tletter-spacing: .025em;\n\t\twhite-space: nowrap;\n\t\tborder-radius: 4px;\n\t\ttext-decoration: none;\n\n\t\t&.mb-dashboard__button:hover {\n\t\t\tcolor: #fff;\n\t\t\topacity: .9;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t&:focus,\n\t\t&:active {\n\t\t\tcolor: #fff;\n\t\t}\n\t}\n\n\t&__hidden {\n\t\tdisplay: none;\n\t}\n\n\t&__external {\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\n\t\tsvg {\n\t\t\twidth: 1em;\n\t\t\theight: 1em;\n\t\t\tfill: currentColor;\n\t\t}\n\t}\n\n\t&__tooltip {\n\t\tposition: relative;\n\n\t\t&:after {\n\t\t\tcontent: attr(data-tooltip);\n\t\t\tbackground-color: #0f172a; // slate-900\n\t\t\tcolor: #fff;\n\t\t\tpadding: 4px 8px;\n\t\t\tborder-radius: 4px;\n\t\t\twhite-space: nowrap;\n\n\t\t\t// Positioning\n\t\t\tposition: absolute;\n\t\t\ttop: calc(100% + 8px);\n\t\t\tleft: 50%;\n\t\t\ttransform: translateX(-50%);\n\n\t\t\tvisibility: hidden;\n\t\t\topacity: 0;\n\t\t\ttransition: opacity 0.3s ease-in-out;\n\t\t}\n\n\t\t&[data-position=\"top\"]:after {\n\t\t\tbottom: calc(100% + 8px);\n\t\t\ttop: auto;\n\t\t}\n\n\t\t&[data-position=\"bottom-right\"]:after {\n\t\t\tleft: auto;\n\t\t\ttransform: none;\n\t\t\tright: 0;\n\t\t}\n\n\t\t&:hover:after {\n\t\t\tvisibility: visible;\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tgap: 48px;\n\t\tpadding: 48px;\n\t\tmax-width: 1280px;\n\t\tmargin-inline: auto;\n\t}\n\n\n\t// Header\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t\tgap: 24px;\n\t\tpadding: 12px;\n\t\tbackground: #fff;\n\t\tborder-bottom: 1px solid #e2e8f0; // slate-200\n\n\t\t&__search {\n\t\t\tflex: 1;\n\n\t\t\t&__inner {\n\t\t\t\tposition: relative;\n\t\t\t\tmax-width: 480px;\n\t\t\t\tmargin-inline: auto;\n\t\t\t}\n\n\t\t\tinput[type=\"text\"] {\n\t\t\t\twidth: 100%;\n\t\t\t\tbackground: #f1f5f9; // slate-100\n\t\t\t\tborder-color: #e2e8f0;\n\t\t\t\tpadding: 2px 16px;\n\t\t\t\tmargin: 0;\n\n\t\t\t\t&:focus,\n\t\t\t\t&:hover {\n\t\t\t\t\tborder-color: #cbd5e1;\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&:has(.mb-dashboard__header__search-results:not([data-type=\"empty\"])) input {\n\t\t\t\tborder-radius: 4px 4px 0 0;\n\t\t\t}\n\n\t\t\t&-results {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 33px;\n\t\t\t\tleft: 0;\n\t\t\t\tright: 0;\n\t\t\t\tbackground: #fff;\n\t\t\t\tz-index: 9;\n\t\t\t\tborder: var(--mb-border);\n\t\t\t\tborder-radius: 0 0 4px 4px;\n\t\t\t\tbox-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); // shadow-lg\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: flex-start;\n\t\t\t\t\tjustify-content: space-between;\n\t\t\t\t\tgap: 24px;\n\t\t\t\t\tcolor: inherit;\n\t\t\t\t\tpadding: 8px 16px;\n\t\t\t\t\ttransition: all .2s ease-in-out;\n\n\t\t\t\t\t&:hover {\n\t\t\t\t\t\tcolor: inherit;\n\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\tbackground: #f1f5f9; // slate-100\n\t\t\t\t\t}\n\n\t\t\t\t\t&:last-child {\n\t\t\t\t\t\tborder-radius: 0 0 4px 4px;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tspan {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tpadding: 2px 8px;\n\t\t\t\t\tbackground: #e2e8f0; // slate-200\n\t\t\t\t\tborder: var(--mb-border);\n\t\t\t\t\tborder-radius: 4px;\n\t\t\t\t\tfont-size: 12px;\n\t\t\t\t}\n\n\t\t\t\t&[data-type=\"empty\"] {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t&[data-type=\"text\"] {\n\t\t\t\t\tpadding: 16px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__icons {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\ta {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t}\n\t\t}\n\n\t\t&__social {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: 12px;\n\n\t\t\tborder-right: var(--mb-border);\n\t\t\tpadding-right: 12px;\n\t\t\tmargin-right: 12px;\n\n\t\t\tsvg {\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\tfill: #64748b;\n\t\t\t\ttransition: all .2s ease-in-out;\n\t\t\t}\n\n\t\t\ta {\n\t\t\t\twidth: 24px;\n\t\t\t\theight: 24px;\n\n\t\t\t\t&:hover svg {\n\t\t\t\t\tfill: #334155;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__links {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tgap: 12px;\n\n\t\t\ta {\n\t\t\t\tcolor: #64748b;\n\t\t\t\twidth: 36px;\n\t\t\t\theight: 36px;\n\t\t\t\tborder: var(--mb-border);\n\t\t\t\tborder-radius: 50%;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tcolor: #334155;\n\t\t\t\t\tborder-color: #94a3b8;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsvg {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t}\n\t\t}\n\n\t\t.mb-dashboard__logo {\n\t\t\tsvg {\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: auto;\n\t\t\t\theight: 46px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Main area\n\t&__main {\n\t\tflex: 1;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 48px;\n\t}\n\n\t// Actions\n\t&__actions {\n\t\t&__title {\n\t\t\tfont-size: 14px;\n\t\t\tfont-weight: 600;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: .025em;\n\t\t\tline-height: 1;\n\t\t\tmargin-bottom: 16px;\n\t\t}\n\n\t\t&__inner {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n\t\t\tgap: 24px;\n\t\t}\n\t}\n\n\t&__action {\n\t\tdisplay: flex;\n\t\tgap: 16px;\n\t\talign-items: center;\n\t\tborder-radius: 8px;\n\t\tborder: 1px solid var(--mb-color-accent);\n\t\tpadding: 24px;\n\t\tbackground: #fff;\n\t\tbox-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); // shadow-lg\n\t\tposition: relative;\n\t\ttop: 0;\n\t\ttransition: all .2s ease;\n\n\t\tsvg {\n\t\t\twidth: 32px;\n\t\t\theight: 32px;\n\t\t\tfill: var(--mb-color-accent);\n\t\t}\n\n\t\t&__title {\n\t\t\tdisplay: block;\n\t\t\tmargin-bottom: 4px;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t\tfont-weight: 600;\n\t\t\tfont-size: 16px;\n\t\t}\n\n\t\t&__description {\n\t\t\tcolor: #64748b; // slate-500;\n\t\t}\n\t}\n\n\t&__action.mb-dashboard__action:hover {\n\t\ttext-decoration: none;\n\t\ttop: -8px;\n\t}\n\n\n\t// Intro\n\t&__intro {\n\t\t&__subtitle {\n\t\t\tfont-size: 16px;\n\t\t}\n\n\t\t&__title {\n\t\t\tfont-size: 24px;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t\tfont-weight: 600;\n\t\t\tmargin-top: 12px;\n\t\t}\n\n\t\t&__text {\n\t\t\tmargin-top: 24px;\n\t\t\tfont-size: 18px;\n\t\t\tline-height: 1.6;\n\t\t}\n\n\t\t.mb-dashboard__button {\n\t\t\tmargin-top: 24px;\n\t\t}\n\t}\n\n\n\t// Tabs\n\t&__info {\n\t\tbackground: #fff;\n\t\tborder-radius: 8px;\n\t\tborder: var(--mb-border);\n\t}\n\n\t&__tabs {\n\t\tdisplay: flex;\n\t\tgap: 24px;\n\t\tborder-bottom: var(--mb-border);\n\t\tfont-size: 14px;\n\t\tpadding-inline: 24px;\n\t}\n\n\t&__tab {\n\t\tdisplay: block;\n\t\tpadding-block: 16px;\n\t\tborder-bottom: 3px solid transparent;\n\t\tfont-weight: 600;\n\t\tcolor: #0f172a; // slate-900\n\t\tcursor: pointer;\n\n\t\t&--active {\n\t\t\tborder-color: var(--mb-color-accent);\n\t\t}\n\n\t\t&__badge {\n\t\t\tbackground: var(--mb-color-accent);\n\t\t\tcolor: #fff;\n\t\t\tfont-size: 10px;\n\t\t\tdisplay: inline-block;\n\t\t\tline-height: 1;\n\t\t\tpadding: 4px;\n\t\t\tborder-radius: 2px;\n\t\t\tposition: relative;\n\t\t\ttop: -12px;\n\t\t}\n\t}\n\n\t&__tab-pane {\n\t\tpadding: 24px;\n\t}\n\n\t// Tutorials\n\t&__tutorials {\n\t\t&__inner {\n\t\t\tdisplay: grid;\n\t\t\tgap: 16px;\n\t\t\tgrid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n\t\t\tmargin-bottom: 24px;\n\t\t}\n\t}\n\n\t&__tutorial {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tgap: 16px;\n\n\t\ta {\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\t&__image {\n\t\t\tposition: relative;\n\n\t\t\t.tobii-zoom__icon {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t&:before {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: calc(50% - 9px);\n\t\t\t\tleft: calc(50% - 16px);\n\t\t\t\tcontent: \"\\f19b\";\n\t\t\t\tfont-family: \"dashicons\";\n\t\t\t\tfont-size: 32px;\n\t\t\t\tcolor: #ff0000;\n\t\t\t}\n\t\t}\n\n\t\timg {\n\t\t\twidth: 90px;\n\t\t\theight: auto;\n\t\t\tdisplay: block;\n\t\t\tborder-radius: 8px;\n\t\t}\n\n\t\t.mb-dashboard__tutorial__title {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t\tmargin-bottom: 8px;\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t&__description {\n\t\t\tfont-size: 12px;\n\t\t\tcolor: #64748b;\n\t\t}\n\t}\n\n\t// Comparing tab and table\n\t&__compare {\n\t\tcontainer-type: inline-size;\n\n\t\t&__header {\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-start;\n\t\t\tjustify-content: space-between;\n\t\t\tgap: 24px;\n\t\t\tmargin-block: 24px;\n\n\t\t\tp {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\t\t}\n\n\t\t&__title {\n\t\t\tfont-size: 20px;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t}\n\n\t\ttbody svg {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t}\n\n\t\t&__footer {\n\t\t\tmargin-top: 48px;\n\t\t\tbackground: #f1f5f9; // slate-50\n\t\t\tpadding: 48px;\n\t\t\ttext-align: center;\n\t\t\tborder-radius: 8px;\n\n\t\t\tp {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tmargin-bottom: 24px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Sidebar\n\n\t&__sidebar {\n\t\tflex-basis: 360px;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 24px;\n\t}\n\n\t&__widget {\n\t\tborder: var(--mb-border);\n\t\tborder-radius: 8px;\n\t\tbackground: #fff;\n\t\tpadding: 24px;\n\n\t\t&-title {\n\t\t\tfont-weight: 600;\n\t\t\tfont-size: 16px;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t\tmargin-bottom: 18px;\n\t\t\tmargin-top: -4px;\n\t\t}\n\n\t\t&-body {\n\t\t\t>p:last-child {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Upgrade widget\n\t&__upgrade {\n\t\tborder: none;\n\t\tbackground: linear-gradient(135deg, rgba(0, 182, 182, 1) 0%, rgba(43, 68, 91, 1) 100%);\n\t\tcolor: #fff;\n\t\tposition: relative;\n\n\t\t.mb-dashboard__widget-title {\n\t\t\tcolor: inherit;\n\t\t}\n\n\t\tul {\n\t\t\tmargin-bottom: 24px;\n\t\t}\n\n\t\tli {\n\t\t\tdisplay: flex;\n\t\t\tgap: 4px;\n\t\t\talign-items: center;\n\t\t}\n\n\t\tsvg {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tfill: #fff;\n\t\t}\n\n\t\ta {\n\t\t\tdisplay: block;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\timg {\n\t\t\tposition: absolute;\n\t\t\ttop: -30px;\n\t\t\tright: -10px;\n\t\t\twidth: 60px;\n\t\t\ttransform: rotate(-30deg);\n\t\t}\n\t}\n\n\t// Recommended plugins widget\n\t&__plugins .mb-dashboard__widget-body {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 16px;\n\t}\n\n\t&__plugin {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 8px;\n\t\tposition: relative;\n\n\t\timg {\n\t\t\twidth: 32px;\n\t\t\theight: 32px;\n\t\t}\n\n\t\t&__text {\n\t\t\tflex: 1;\n\t\t}\n\n\t\t.mb-dashboard__plugin__title {\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t}\n\n\t\t&__description {\n\t\t\tfont-size: 12px;\n\t\t\tcolor: #64748b; // slate-500\n\t\t}\n\n\t\t&__status {\n\t\t\tfont-size: 12px;\n\t\t\tfont-weight: 600;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\tgap: 4px;\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\ttop: -4px;\n\t\t\tpadding: 2px 6px;\n\t\t\tborder-radius: 4px;\n\t\t\tborder: 1px solid transparent;\n\n\t\t\t&:before {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcontent: \"\";\n\t\t\t\twidth: 6px;\n\t\t\t\theight: 6px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tbackground: currentColor;\n\t\t\t}\n\n\t\t\t&[data-action=\"install\"] {\n\t\t\t\tcolor: #64748b; // slate-500\n\t\t\t\tborder-color: currentColor;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t&[data-action=\"activate\"] {\n\t\t\t\tcolor: #f59e0b; // amber-500\n\t\t\t\tborder-color: currentColor;\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\n\t\t\t&[data-action=\"\"] {\n\t\t\t\tcolor: var(--mb-color-accent);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Support widget\n\t&__support {\n\t\tposition: relative;\n\n\t\t&__icon {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tright: 0;\n\t\t\twidth: 48px;\n\t\t\theight: 48px;\n\t\t\tfill: #f8fafc;\n\t\t\tz-index: 0;\n\t\t}\n\t}\n\n\n\t// News flyout sidebar\n\t&__news-icon {\n\t\tposition: relative;\n\n\t\t&:before {\n\t\t\tcontent: \"\";\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 10px;\n\t\t\theight: 10px;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tright: 0;\n\t\t\tbackground: #ef4444;\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n\n\t&__news {\n\t\t--mb-news-width: 360px;\n\n\t\tposition: fixed;\n\t\ttop: 32px;\n\t\tright: calc(0px - var(--mb-news-width));\n\t\twidth: var(--mb-news-width);\n\t\tbottom: 0;\n\t\tbackground: #fff;\n\t\ttransition: all .2s ease-in-out;\n\t\toverflow-x: auto;\n\t\tborder-left: var(--mb-border);\n\n\t\t&--active {\n\t\t\tright: 0;\n\t\t}\n\n\t\t&__header {\n\t\t\tpadding: 12px 24px;\n\t\t\tborder-bottom: var(--mb-border);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: space-between;\n\t\t\tmargin-bottom: 24px;\n\t\t}\n\n\t\t&__heading {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t}\n\n\t\t&__close {\n\t\t\twidth: 32px;\n\t\t\theight: 32px;\n\t\t\tpadding: 0;\n\t\t\tdisplay: inline-flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\tborder: none;\n\t\t\tbackground: none;\n\t\t\tcursor: pointer;\n\n\t\t\tsvg {\n\t\t\t\twidth: 24px;\n\t\t\t\theight: 24px;\n\t\t\t}\n\t\t}\n\n\t\t&__date {\n\t\t\tfont-size: 10px;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: .025em;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-bottom: 8px;\n\t\t\tcolor: #94a3b8;\n\t\t}\n\n\t\t.mb-dashboard__news__title {\n\t\t\tdisplay: block;\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: #0f172a; // slate-900\n\t\t\tmargin-bottom: 16px;\n\t\t}\n\n\t\t&__content p {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&__item {\n\t\t\tpadding-inline: 24px;\n\t\t}\n\n\t\t&__item:not(:first-child) {\n\t\t\tmargin-top: 24px;\n\t\t\tpadding-top: 24px;\n\t\t\tborder-top: var(--mb-border);\n\t\t}\n\t}\n\n\t// Sale widget\n\t&__sale {\n\t\t.mb-dashboard__widget-title {\n\t\t\tmargin: -25px -25px 0;\n\t\t\tbackground: var(--mb-color-accent);\n\t\t\tcolor: #fff;\n\t\t\tpadding: 16px 24px;\n\t\t\tborder-radius: 4px 4px 0 0;\n\t\t\tposition: relative;\n\t\t}\n\n\t\t&__badge {\n\t\t\tbackground: url(../img/hot.svg) no-repeat center center;\n\t\t\tbackground-size: 64px 64px;\n\t\t\tfont-weight: 700;\n\t\t\tfont-size: 12px;\n\t\t\ttext-transform: uppercase;\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\tline-height: 64px;\n\t\t\ttext-align: center;\n\t\t\tposition: absolute;\n\t\t\ttop: -24px;\n\t\t\tcolor: #0f172a;\n\t\t}\n\n\t\t&__button {\n\t\t\t--mb-color-link: #fff;\n\n\t\t\tdisplay: block;\n\t\t\tmargin-inline: auto;\n\t\t\ttext-align: center;\n\n\t\t\tbackground: var(--mb-color-accent);\n\t\t\tpadding: 16px 24px;\n\t\t\tline-height: 1;\n\n\t\t\twhite-space: nowrap;\n\t\t\tborder-radius: 4px;\n\t\t\ttext-decoration: none;\n\n\t\t\t&.mb-dashboard__sale__button:hover {\n\t\t\t\topacity: .9;\n\t\t\t\ttext-decoration: none;\n\t\t\t}\n\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\n\t\t\t&-text--large {\n\t\t\t\tfont-size: 16px;\n\t\t\t\tfont-weight: 700;\n\t\t\t\tletter-spacing: .025em;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\t// color: rgb(251 191 36);\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-bottom: 4px;\n\t\t\t}\n\n\t\t\t&-text--small {\n\t\t\t\tfont-size: 14px;\n\t\t\t\tdisplay: block;\n\t\t\t\tcolor: #fff;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__countdown {\n\t\tlist-style: none;\n\t\tpadding: 0;\n\t\tmargin-inline: 0;\n\t\tmargin-top: 16px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\tgap: 16px;\n\t\ttext-align: center;\n\n\t\tli {\n\t\t\tborder: 1px solid var(--mb-color-accent);\n\t\t\tborder-radius: 4px;\n\t\t\tpadding: 12px 16px;\n\t\t\tmargin: 0;\n\t\t}\n\n\t\t&-number {\n\t\t\tfont-size: 24px;\n\t\t\tfont-weight: 600;\n\t\t\tmargin-bottom: 8px;\n\t\t}\n\t}\n}\n\n@media (max-width:1023px) {\n\t.mb-dashboard__header__search {\n\t\tdisplay: none;\n\t}\n\n\t.mb-dashboard__body {\n\t\tflex-direction: column;\n\t}\n}\n\n@media (max-width: 782px) {\n\t.mb-dashboard__news {\n\t\ttop: 46px;\n\t}\n}\n\n@media (max-width:599px) {\n\t.mb-dashboard__header__social {\n\t\tdisplay: none;\n\t}\n\n\t.mb-dashboard__body {\n\t\tpadding: 24px;\n\t}\n}\n\n@container (max-width: 599px) {\n\t.mb-dashboard__compare__header {\n\t\tflex-direction: column;\n\t}\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Dashboard/assets/js/dashboard.js",
    "content": "{\n\t// Auto add UTM params to links.\n\tdocument.querySelectorAll( '.mb-dashboard a' ).forEach( a => {\n\t\tconst domains = [ 'metabox.io', 'docs.metabox.io', 'support.metabox.io', 'wpslimseo.com' ];\n\t\tif ( domains.every( domain => !a.href.startsWith( `https://${ domain }` ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = a.closest( '[data-utm]' );\n\t\tconst medium = parent ? parent.dataset.utm : 'link';\n\n\t\ta.href += `?utm_source=dashboard&utm_medium=${ medium }&utm_campaign=${ MBD.campaign }`;\n\t} );\n\n\t// Click to install or activate plugins.\n\tdocument.addEventListener( 'click', e => {\n\t\tconst el = e.target;\n\n\t\tif ( !el.classList.contains( 'mb-dashboard__plugin__status' ) || !el.dataset.action ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst oldText = el.textContent;\n\t\tel.textContent = el.dataset.processing;\n\n\t\tfetch( `${ ajaxurl }?action=mb_dashboard_plugin_action&mb_plugin=${ el.dataset.plugin }&mb_action=${ el.dataset.action }&_ajax_nonce=${ MBD.nonces.plugin }` )\n\t\t\t.then( response => response.json() )\n\t\t\t.then( response => {\n\t\t\t\tif ( !response.success ) {\n\t\t\t\t\talert( response.data );\n\t\t\t\t\tel.textContent = oldText;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tel.dataset.action = '';\n\t\t\t\tel.textContent = el.dataset.done;\n\t\t\t} );\n\t} );\n\n\t// Switch tabs\n\tdocument.addEventListener( 'click', e => {\n\t\tconst el = e.target;\n\n\t\tif ( !el.classList.contains( 'mb-dashboard__tab' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocument.querySelectorAll( '.mb-dashboard__tab' ).forEach( e => e.classList.remove( 'mb-dashboard__tab--active' ) );\n\t\tel.classList.add( 'mb-dashboard__tab--active' );\n\n\t\tdocument.querySelectorAll( '.mb-dashboard__tab-pane' ).forEach( e => e.classList.add( 'mb-dashboard__hidden' ) );\n\t\tdocument.querySelector( `.mb-dashboard__tab-pane[data-tab=\"${ el.dataset.tab }\"]` ).classList.remove( 'mb-dashboard__hidden' );\n\t} );\n\n\tconst fetchDocs = async () => {\n\t\tlet docs;\n\n\t\t/**\n\t\t * Check if need to fetch docs.\n\t\t * Docs is cached for 1 month in the local storage.\n\t\t */\n\t\tconst needsUpdate = () => {\n\t\t\tconst lastUpdated = localStorage.getItem( 'meta-box-docs-last-updated' );\n\t\t\tconst now = Date.now();\n\t\t\tconst MONTH_IN_MILLISECONDS = 30 * 24 * 60 * 60 * 1000;\n\t\t\tif ( !lastUpdated || now - lastUpdated > MONTH_IN_MILLISECONDS ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tdocs = JSON.parse( localStorage.getItem( 'meta-box-docs' ) );\n\t\t\treturn !Array.isArray( docs ) || docs.length === 0;\n\t\t};\n\n\t\t/**\n\t\t * Normalize docs data, keeping only references to docs titles and sections.\n\t\t */\n\t\tconst normalizeData = data => {\n\t\t\t// Original docs\n\t\t\tconst originalDocs = data[ 0 ].documents.map( ( { t, u } ) => ( { t, u } ) );\n\n\t\t\t// Sections\n\t\t\tconst findOriginalDoc = url => originalDocs.find( ( { t, u } ) => u === url );\n\n\t\t\t// Section docs.\n\t\t\tconst sectionDocs = data[ 1 ].documents.filter( doc => doc.h.length > 0 && !doc.u.includes( '/category/' ) ).map( ( { t, u, h } ) => {\n\t\t\t\tconst originalDoc = findOriginalDoc( u );\n\t\t\t\tif ( !originalDoc ) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tt,\n\t\t\t\t\t\tu: `${ u }${ h }`,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tt: `${ originalDoc.t } → ${ t }`,\n\t\t\t\t\tu: `${ u }${ h }`,\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\treturn [ ...originalDocs, ...sectionDocs ];\n\t\t};\n\n\t\tif ( !needsUpdate() ) {\n\t\t\treturn docs;\n\t\t}\n\n\t\tlet response = await fetch( 'https://docs.metabox.io/search-index.json' );\n\t\tresponse = await response.json();\n\n\t\tif ( !Array.isArray( response ) || response.length === 0 ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tdocs = normalizeData( response );\n\n\t\tlocalStorage.setItem( 'meta-box-docs', JSON.stringify( docs ) );\n\t\tlocalStorage.setItem( 'meta-box-docs-last-updated', Date.now() );\n\n\t\treturn docs;\n\t};\n\n\tconst searchDocs = async () => {\n\t\tconst docs = await fetchDocs();\n\t\tif ( !Array.isArray( docs ) || docs.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resultsDiv = document.querySelector( '.mb-dashboard__header__search-results' );\n\t\tconst input = document.querySelector( '.mb-dashboard__header__search input' );\n\t\tconst categories = [ 'fields', 'extensions', 'tutorials', 'integrations', 'actions', 'filters', 'functions' ];\n\n\t\tconst search = e => {\n\t\t\tconst s = e.target.value;\n\t\t\tif ( s.length === 0 ) {\n\t\t\t\tresultsDiv.innerHTML = '';\n\t\t\t\tresultsDiv.dataset.type = 'empty';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresultsDiv.innerHTML = resultsDiv.dataset.searching;\n\t\t\tresultsDiv.dataset.type = 'text';\n\n\t\t\tlet results = docs.filter( docs => docs.t.toLowerCase().includes( s.toLowerCase() ) ).slice( 0, 10 );\n\n\t\t\tif ( results.length === 0 ) {\n\t\t\t\tresultsDiv.innerHTML = resultsDiv.dataset.none;\n\t\t\t\tresultsDiv.dataset.type = 'text';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresults = results.map( result => {\n\t\t\t\tlet category = 'general';\n\t\t\t\tconst parts = result.u.split( '/' );\n\n\t\t\t\tif ( categories.includes( parts[ 1 ] ) ) {\n\t\t\t\t\tcategory = parts[ 1 ];\n\t\t\t\t}\n\t\t\t\tcategory = category.charAt( 0 ).toUpperCase() + category.slice( 1 ); // Uppercase the first character.\n\n\t\t\t\tconst url = new URL( `https://docs.metabox.io${ result.u }` );\n\t\t\t\turl.searchParams.append( 'utm_source', 'dashboard' );\n\t\t\t\turl.searchParams.append( 'utm_medium', 'search' );\n\t\t\t\turl.searchParams.append( 'utm_campaign', MBD.campaign );\n\n\t\t\t\treturn `<a target=\"_blank\" href=\"${ url.toString() }\">${ result.t } <span>${ category }</span></a>`;\n\t\t\t} );\n\n\t\t\tresultsDiv.innerHTML = results.join( '' );\n\t\t\tresultsDiv.dataset.type = 'list';\n\t\t};\n\n\t\tinput.addEventListener( 'input', search );\n\t\tinput.addEventListener( 'focus', search );\n\n\t\tinput.addEventListener( 'blur', () => {\n\t\t\t// Set timeout to make click work properly.\n\t\t\tsetTimeout( () => {\n\t\t\t\tresultsDiv.innerHTML = '';\n\t\t\t\tresultsDiv.dataset.type = 'empty';\n\t\t\t}, 300 );\n\t\t} );\n\t};\n\n\tsearchDocs();\n\n\tconst fetchNews = async () => {\n\t\tlet items = [];\n\n\t\tconst needsUpdate = () => {\n\t\t\tconst lastUpdated = localStorage.getItem( 'meta-box-news-last-updated' );\n\t\t\tconst now = Date.now();\n\t\t\tconst DAY_IN_MILLISECONDS = 24 * 60 * 60 * 1000;\n\t\t\tif ( !lastUpdated || now - lastUpdated > DAY_IN_MILLISECONDS ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\titems = JSON.parse( localStorage.getItem( 'meta-box-news' ) );\n\t\t\treturn !Array.isArray( items ) || items.length === 0;\n\t\t};\n\n\t\tif ( !needsUpdate() ) {\n\t\t\treturn items;\n\t\t}\n\n\t\tlet response = await fetch( `${ ajaxurl }?action=mb_dashboard_feed&_ajax_nonce=${ MBD.nonces.feed }` );\n\t\tresponse = await response.json();\n\n\t\titems = response.success ? response.data : [];\n\n\t\tlocalStorage.setItem( 'meta-box-news', JSON.stringify( items ) );\n\t\tlocalStorage.setItem( 'meta-box-news-last-updated', Date.now() );\n\n\t\treturn items;\n\t}\n\n\tconst renderNews = async () => {\n\t\tlet items  = await fetchNews();\n\t\tconst list = document.querySelector( '.mb-dashboard__news__list' );\n\n\t\tif ( ! Array.isArray( items ) || items.length === 0 ) {\n\t\t\tlist.innerHTML = list.dataset.empty;\n\t\t\treturn;\n\t\t}\n\n\t\titems = items.map( item => {\n\t\t\tconst url = new URL( item.url );\n\t\t\turl.searchParams.append( 'utm_source', 'dashboard' );\n\t\t\turl.searchParams.append( 'utm_medium', 'news' );\n\t\t\turl.searchParams.append( 'utm_campaign', MBD.campaign );\n\n\t\t\treturn `<div class=\"mb-dashboard__news__item\">\n\t\t\t\t<div class=\"mb-dashboard__news__date\">${ item.date }</div>\n\t\t\t\t<a class=\"mb-dashboard__news__title\" href=\"${ url }\" target=\"_blank\">${ item.title }</a>\n\t\t\t\t<div class=\"mb-dashboard__news__content\">${ item.description }</div>\n\t\t\t</div>`;\n\t\t} );\n\n\t\tlist.innerHTML = items.join( '' );\n\t};\n\n\tconst showNews = async () => {\n\t\tawait renderNews();\n\t\tconst news = document.querySelector( '.mb-dashboard__news' );\n\t\tdocument.querySelector( '.mb-dashboard__news-icon' ).addEventListener( 'click', () => news.classList.toggle( 'mb-dashboard__news--active' ) );\n\t\tdocument.querySelector( '.mb-dashboard__news__close' ).addEventListener( 'click', () => news.classList.remove( 'mb-dashboard__news--active' ) );\n\t};\n\n\tshowNews();\n}"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Dashboard/content.php",
    "content": "<?php defined( 'ABSPATH' ) || die; ?>\n\n<header class=\"mb-dashboard__header\" data-utm=\"header\">\n\t<a class=\"mb-dashboard__logo\" href=\"https://metabox.io\" target=\"_blank\">\n\t\t<svg viewBox=\"0 0 196 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t<rect width=\"46\" height=\"46\" rx=\"3\" fill=\"#000\"/>\n\t\t\t<path d=\"M8.68848 35V32.4365L10.959 31.9971V16.6895L8.68848 16.25V13.6719H10.959H17.2871L23.1025 28.54H23.1904L28.8154 13.6719H37.4287V16.25L35.1436 16.6895V31.9971L37.4287 32.4365V35H28.5957V32.4365L30.9834 31.9971V27.9102L31.0566 18.2861L30.9688 18.2715L24.5967 34.707H21.3594L14.8408 18.4033L14.7529 18.418L15.002 27.4707V31.9971L17.5215 32.4365V35H8.68848Z\" fill=\"#fff\"/>\n\t\t\t<path d=\"M55.8203 35V32.4365L58.0908 31.9971V16.6895L55.8203 16.25V13.6719H58.0908H64.4189L70.2344 28.54H70.3223L75.9473 13.6719H84.5605V16.25L82.2754 16.6895V31.9971L84.5605 32.4365V35H75.7275V32.4365L78.1152 31.9971V27.9102L78.1885 18.2861L78.1006 18.2715L71.7285 34.707H68.4912L61.9727 18.4033L61.8848 18.418L62.1338 27.4707V31.9971L64.6533 32.4365V35H55.8203ZM93.1744 35.3076C91.6607 35.3076 90.3375 34.9756 89.2047 34.3115C88.0719 33.6377 87.193 32.7148 86.568 31.543C85.9527 30.3711 85.6451 29.0332 85.6451 27.5293V26.9434C85.6451 25.3711 85.9381 23.9795 86.524 22.7686C87.11 21.5479 87.9352 20.5908 88.9996 19.8975C90.0738 19.2041 91.3385 18.8574 92.7936 18.8574C94.2291 18.8574 95.4352 19.1406 96.4117 19.707C97.3883 20.2734 98.1305 21.0889 98.6383 22.1533C99.1461 23.2178 99.4 24.5068 99.4 26.0205V28.3496H90.0836L90.0543 28.4375C90.1129 29.1309 90.2838 29.751 90.567 30.2979C90.86 30.835 91.2701 31.2598 91.7975 31.5723C92.3248 31.875 92.9645 32.0264 93.7164 32.0264C94.4977 32.0264 95.2252 31.9287 95.899 31.7334C96.5826 31.5283 97.2467 31.2305 97.8912 30.8398L99.0484 33.4766C98.3941 34.0039 97.5689 34.4434 96.5729 34.7949C95.5865 35.1367 94.4537 35.3076 93.1744 35.3076ZM90.1129 25.5225H95.401V25.1416C95.401 24.4971 95.3131 23.9453 95.1373 23.4863C94.9713 23.0176 94.6979 22.6562 94.317 22.4023C93.9459 22.1484 93.4625 22.0215 92.8668 22.0215C92.3004 22.0215 91.8219 22.1729 91.4312 22.4756C91.0406 22.7686 90.733 23.1738 90.5084 23.6914C90.2936 24.209 90.1471 24.7949 90.0689 25.4492L90.1129 25.5225ZM107.003 35.3076C105.529 35.3076 104.391 34.9023 103.59 34.0918C102.799 33.2812 102.404 31.9971 102.404 30.2393V22.1533H100.221V19.1504H102.404V15.2686H106.666V19.1504H109.581V22.1533H106.666V30.2246C106.666 30.8398 106.793 31.2793 107.047 31.543C107.311 31.8066 107.667 31.9385 108.116 31.9385C108.361 31.9385 108.614 31.9238 108.878 31.8945C109.152 31.8555 109.386 31.8164 109.581 31.7773L109.947 34.8682C109.508 34.9951 109.029 35.0977 108.512 35.1758C108.004 35.2637 107.501 35.3076 107.003 35.3076ZM116.262 35.3076C114.689 35.3076 113.439 34.8877 112.512 34.0479C111.584 33.1982 111.12 32.0459 111.12 30.5908C111.12 29.0967 111.725 27.8857 112.936 26.958C114.147 26.0205 115.92 25.5518 118.254 25.5518H120.348V24.3799C120.348 23.6182 120.124 23.0029 119.675 22.5342C119.235 22.0557 118.571 21.8164 117.682 21.8164C117.223 21.8164 116.813 21.875 116.452 21.9922C116.091 22.0996 115.759 22.2559 115.456 22.4609L115.119 24.5557H112.043L111.984 20.4395C112.814 19.9707 113.713 19.5898 114.679 19.2969C115.646 19.0039 116.725 18.8574 117.917 18.8574C119.987 18.8574 121.623 19.3408 122.824 20.3076C124.025 21.2646 124.626 22.6367 124.626 24.4238V30.957C124.626 31.1719 124.626 31.3867 124.626 31.6016C124.636 31.8066 124.655 32.0068 124.684 32.2021L126.34 32.4365V35H121.037C120.929 34.7266 120.822 34.4336 120.715 34.1211C120.607 33.8086 120.529 33.4961 120.48 33.1836C119.972 33.8281 119.372 34.3457 118.679 34.7363C117.995 35.1172 117.189 35.3076 116.262 35.3076ZM117.404 32.1436C118 32.1436 118.566 32.0117 119.103 31.748C119.64 31.4746 120.055 31.1182 120.348 30.6787V28.1738H118.239C117.302 28.1738 116.589 28.3887 116.1 28.8184C115.622 29.248 115.383 29.7656 115.383 30.3711C115.383 30.9375 115.558 31.377 115.91 31.6895C116.271 31.9922 116.769 32.1436 117.404 32.1436ZM133.914 35V32.4365L136.185 31.9971V16.6895L133.914 16.25V13.6719H136.185H143.392C145.901 13.6719 147.859 14.1602 149.266 15.1367C150.672 16.1133 151.375 17.5732 151.375 19.5166C151.375 20.5029 151.111 21.3867 150.584 22.168C150.066 22.9395 149.31 23.5205 148.313 23.9111C149.163 24.0967 149.871 24.4238 150.438 24.8926C151.014 25.3613 151.443 25.9326 151.727 26.6064C152.01 27.2705 152.151 27.998 152.151 28.7891C152.151 30.8301 151.478 32.3779 150.13 33.4326C148.782 34.4775 146.873 35 144.402 35H133.914ZM140.462 31.7188H144.402C145.535 31.7188 146.399 31.4746 146.995 30.9863C147.591 30.4883 147.889 29.7559 147.889 28.7891C147.889 27.7441 147.635 26.9482 147.127 26.4014C146.619 25.8447 145.818 25.5664 144.725 25.5664H140.462V31.7188ZM140.462 22.6074H143.538C144.681 22.6074 145.56 22.373 146.175 21.9043C146.79 21.4355 147.098 20.752 147.098 19.8535C147.098 18.8672 146.785 18.1396 146.16 17.6709C145.545 17.2021 144.622 16.9678 143.392 16.9678H140.462V22.6074ZM160.663 35.3076C159.1 35.3076 157.757 34.9658 156.634 34.2822C155.511 33.5986 154.652 32.6514 154.056 31.4404C153.461 30.2197 153.163 28.8184 153.163 27.2363V26.9287C153.163 25.3564 153.461 23.9648 154.056 22.7539C154.652 21.5332 155.506 20.5811 156.62 19.8975C157.743 19.2041 159.081 18.8574 160.633 18.8574C162.206 18.8574 163.548 19.2041 164.662 19.8975C165.775 20.5811 166.629 21.5283 167.225 22.7393C167.821 23.9502 168.119 25.3467 168.119 26.9287V27.2363C168.119 28.8184 167.821 30.2197 167.225 31.4404C166.629 32.6514 165.775 33.5986 164.662 34.2822C163.548 34.9658 162.215 35.3076 160.663 35.3076ZM160.663 32.0264C161.405 32.0264 162.01 31.8262 162.479 31.4258C162.948 31.0254 163.295 30.4688 163.519 29.7559C163.744 29.0332 163.856 28.1934 163.856 27.2363V26.9287C163.856 25.9912 163.744 25.166 163.519 24.4531C163.295 23.7305 162.943 23.1689 162.464 22.7686C161.996 22.3584 161.385 22.1533 160.633 22.1533C159.901 22.1533 159.296 22.3584 158.817 22.7686C158.338 23.1689 157.987 23.7305 157.762 24.4531C157.547 25.166 157.44 25.9912 157.44 26.9287V27.2363C157.44 28.1934 157.547 29.0332 157.762 29.7559C157.987 30.4785 158.338 31.04 158.817 31.4404C159.296 31.8311 159.911 32.0264 160.663 32.0264ZM168.573 35V32.4365L170.61 32.1729L175.151 27.0605L170.859 21.9775L168.94 21.7285V19.1504H176.791V21.6113L175.561 21.8018L177.861 24.8193L180.16 21.8018L178.798 21.6113V19.1504H186.371V21.7285L184.599 21.9775L180.541 26.8848L185.068 32.1729L187.016 32.4365V35H178.886V32.5537L180.263 32.3633L177.817 29.3311L175.429 32.3779L176.777 32.5537V35H168.573Z\" fill=\"#000\"/>\n\t\t</svg>\n\t</a>\n\n\t<div class=\"mb-dashboard__header__search\">\n\t\t<div class=\"mb-dashboard__header__search__inner\">\n\t\t\t<input type=\"text\" placeholder=\"<?php esc_attr_e( 'Need some help? Search here...', 'meta-box' ); ?>\" />\n\n\t\t\t<div\n\t\t\t\tclass=\"mb-dashboard__header__search-results\"\n\t\t\t\tdata-searching=\"<?php esc_html_e( 'Searching...', 'meta-box' ); ?>\"\n\t\t\t\tdata-none=\"<?php esc_html_e( 'No results found.', 'meta-box' ); ?>\"\n\t\t\t\tdata-type=\"empty\"\n\t\t\t>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"mb-dashboard__header__icons\">\n\t\t<div class=\"mb-dashboard__header__social\">\n\t\t\t<a href=\"https://www.facebook.com/groups/metaboxusers\" target=\"_blank\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"Facebook\">\n\t\t\t\t\t<path d=\"M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z\"></path>\n\t\t\t\t</svg>\n\t\t\t</a>\n\t\t\t<a href=\"https://www.youtube.com/c/MetaBoxWP\" target=\"_blank\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"Youtube\">\n\t\t\t\t\t<path d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\"></path>\n\t\t\t\t</svg>\n\t\t\t</a>\n\t\t\t<a href=\"https://x.com/wpmetabox\" target=\"_blank\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"X\">\n\t\t\t\t\t<path d=\"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\"></path>\n\t\t\t\t</svg>\n\t\t\t</a>\n\t\t\t<a href=\"https://www.linkedin.com/company/meta-box/\" target=\"_blank\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" aria-label=\"LinkedIn\">\n\t\t\t\t\t<circle cx=\"4.983\" cy=\"5.009\" r=\"2.188\"></circle>\n\t\t\t\t\t<path d=\"M9.237 8.855v12.139h3.769v-6.003c0-1.584.298-3.118 2.262-3.118 1.937 0 1.961 1.811 1.961 3.218v5.904H21v-6.657c0-3.27-.704-5.783-4.526-5.783-1.835 0-3.065 1.007-3.568 1.96h-.051v-1.66H9.237zm-6.142 0H6.87v12.139H3.095z\"></path>\n\t\t\t\t</svg>\n\t\t\t</a>\n\t\t</div>\n\t\t<div class=\"mb-dashboard__header__links\">\n\t\t\t<a href=\"https://docs.metabox.io\" target=\"_blank\" class=\"mb-dashboard__tooltip\" data-tooltip=\"<?php esc_attr_e( 'Documentation', 'meta-box' ); ?>\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n\t\t\t\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25\" />\n\t\t\t\t</svg>\n\t\t\t</a>\n\t\t\t<a href=\"#\" class=\"mb-dashboard__tooltip mb-dashboard__news-icon\" data-tooltip=\"<?php esc_attr_e( 'What\\'s new?', 'meta-box' ); ?>\" data-position=\"bottom-right\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n\t\t\t\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" />\n\t\t\t\t</svg>\n\t\t\t</a>\n\t\t</div>\n\t</div>\n</header>\n\n<div class=\"mb-dashboard__body\">\n\n\t<div class=\"mb-dashboard__main\">\n\n\t\t<?php if ( ! $this->is_aio ) : ?>\n\t\t\t<section class=\"mb-dashboard__intro\" data-utm=\"intro\">\n\t\t\t\t<div class=\"mb-dashboard__intro__subtitle\">\n\t\t\t\t\t<?php\n\t\t\t\t\t// Translators: %s - current user display name.\n\t\t\t\t\techo esc_html( sprintf( __( 'Hello %s,', 'meta-box' ), wp_get_current_user()->display_name ) );\n\t\t\t\t\t?>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mb-dashboard__intro__title\">\n\t\t\t\t\t<?php\n\t\t\t\t\t// Translators: %s - Meta Box (plugin name).\n\t\t\t\t\techo esc_html( sprintf( __( 'Welcome to %s,', 'meta-box' ), 'Meta Box' ) );\n\t\t\t\t\t?>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mb-dashboard__intro__text\">\n\t\t\t\t\t<?php\n\t\t\t\t\t// Translators: %s - Meta Box (plugin name).\n\t\t\t\t\techo esc_html( sprintf( __( '%s is a powerful, lightweight WordPress plugin for creating custom post types, fields, relationships, and more. With a user-friendly interface and flexible options, it simplifies dynamic content creation without complex coding. Free and reliable, it\\'s perfect for beginners and experts alike.', 'meta-box' ), 'Meta Box' ) );\n\t\t\t\t\t?>\n\t\t\t\t</div>\n\n\t\t\t\t<?php if ( ! $this->has_actions ) : ?>\n\t\t\t\t\t<a class=\"mb-dashboard__external mb-dashboard__button\" href=\"https://docs.metabox.io/introduction/\" target=\"_blank\">\n\t\t\t\t\t\t<?php esc_html_e( 'Get started', 'meta-box' ); ?>\n\t\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t\t</a>\n\t\t\t\t<?php endif; ?>\n\t\t\t</section>\n\t\t<?php endif; ?>\n\n\t\t<?php if ( $this->has_actions ) : ?>\n\t\t\t<section class=\"mb-dashboard__actions\">\n\t\t\t\t<div class=\"mb-dashboard__actions__title\"><?php esc_html_e( 'Getting Started', 'meta-box' ); ?></div>\n\n\t\t\t\t<div class=\"mb-dashboard__actions__inner\">\n\t\t\t\t\t<a class=\"mb-dashboard__action\" href=\"<?php echo esc_attr( admin_url( 'post-new.php?post_type=mb-post-type' ) ); ?>\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t<path d=\"M5 4a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1zm-.5 2.5A.5.5 0 0 1 5 6h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5M5 8a.5.5 0 0 0 0 1h6a.5.5 0 0 0 0-1zm0 2a.5.5 0 0 0 0 1h3a.5.5 0 0 0 0-1z\"/>\n\t\t\t\t\t\t\t<path d=\"M2 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2zm10-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span class=\"mb-dashboard__action__text\">\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__title\"><?php esc_html_e( 'Create a post type', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__description\"><?php esc_html_e( 'For a new type of content on your website', 'meta-box' ); ?></span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"mb-dashboard__action\" href=\"<?php echo esc_attr( admin_url( 'post-new.php?post_type=mb-taxonomy' ) ); ?>\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t<path d=\"M2.5 3.5a.5.5 0 0 1 0-1h11a.5.5 0 0 1 0 1zm2-2a.5.5 0 0 1 0-1h7a.5.5 0 0 1 0 1zM0 13a1.5 1.5 0 0 0 1.5 1.5h13A1.5 1.5 0 0 0 16 13V6a1.5 1.5 0 0 0-1.5-1.5h-13A1.5 1.5 0 0 0 0 6zm1.5.5A.5.5 0 0 1 1 13V6a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5z\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span class=\"mb-dashboard__action__text\">\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__title\"><?php esc_html_e( 'Create a taxonomy', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__description\"><?php esc_html_e( 'To group or categorize your posts', 'meta-box' ); ?></span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"mb-dashboard__action\" href=\"<?php echo esc_attr( admin_url( 'post-new.php?post_type=meta-box' ) ); ?>\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t<path d=\"M0 1.5A1.5 1.5 0 0 1 1.5 0h13A1.5 1.5 0 0 1 16 1.5v2A1.5 1.5 0 0 1 14.5 5h-13A1.5 1.5 0 0 1 0 3.5zM1.5 1a.5.5 0 0 0-.5.5v2a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5z\"/>\n\t\t\t\t\t\t\t<path d=\"M2 2.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5m10.823.323-.396-.396A.25.25 0 0 1 12.604 2h.792a.25.25 0 0 1 .177.427l-.396.396a.25.25 0 0 1-.354 0M0 8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm1 3v2a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2zm14-1V8a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2zM2 8.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5m0 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span class=\"mb-dashboard__action__text\">\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__title\"><?php esc_html_e( 'Create a field group', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__description\"><?php esc_html_e( 'To add custom fields to your posts', 'meta-box' ); ?></span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"mb-dashboard__action\" href=\"<?php echo esc_attr( admin_url( 'post-new.php?post_type=mb-relationship' ) ); ?>\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t<path fill-rule=\"evenodd\" d=\"M1 11.5a.5.5 0 0 0 .5.5h11.793l-3.147 3.146a.5.5 0 0 0 .708.708l4-4a.5.5 0 0 0 0-.708l-4-4a.5.5 0 0 0-.708.708L13.293 11H1.5a.5.5 0 0 0-.5.5m14-7a.5.5 0 0 1-.5.5H2.707l3.147 3.146a.5.5 0 1 1-.708.708l-4-4a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 4H14.5a.5.5 0 0 1 .5.5\"/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span class=\"mb-dashboard__action__text\">\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__title\"><?php esc_html_e( 'Create a relationship', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__description\"><?php esc_html_e( 'To establish connections between posts', 'meta-box' ); ?></span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<?php if ( $this->is_aio ) : ?>\n\t\t\t\t\t\t<a class=\"mb-dashboard__action\" href=\"<?php echo esc_attr( admin_url( 'post-new.php?post_type=mb-views' ) ); ?>\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t\t<path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5z\"/>\n\t\t\t\t\t\t\t\t<path d=\"M8.646 6.646a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L10.293 9 8.646 7.354a.5.5 0 0 1 0-.708m-1.292 0a.5.5 0 0 0-.708 0l-2 2a.5.5 0 0 0 0 .708l2 2a.5.5 0 0 0 .708-.708L5.707 9l1.647-1.646a.5.5 0 0 0 0-.708\"/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__text\">\n\t\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__title\"><?php esc_html_e( 'Create a view', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__description\"><?php esc_html_e( 'To output fields on the frontend', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</a>\n\n\t\t\t\t\t\t<a class=\"mb-dashboard__action\" href=\"<?php echo esc_attr( admin_url( 'post-new.php?post_type=mb-settings-page' ) ); ?>\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t\t\t\t<path d=\"M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492M5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0\"/>\n\t\t\t\t\t\t\t\t<path d=\"M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115z\"/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__text\">\n\t\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__title\"><?php esc_html_e( 'Create a settings page', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t\t<span class=\"mb-dashboard__action__description\"><?php esc_html_e( 'For global settings of your website', 'meta-box' ); ?></span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t<?php endif; ?>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t<?php endif; ?>\n\n\t\t<section class=\"mb-dashboard__info\">\n\t\t\t<div class=\"mb-dashboard__tabs\">\n\t\t\t\t<div class=\"mb-dashboard__tab mb-dashboard__tab--active\" data-tab=\"tutorials\">\n\t\t\t\t\t<?php esc_html_e( 'Tutorials', 'meta-box' ); ?>\n\t\t\t\t</div>\n\n\t\t\t\t<?php if ( $this->upgradable ) : ?>\n\t\t\t\t\t<div class=\"mb-dashboard__tab\" data-tab=\"compare\">\n\t\t\t\t\t\t<?php esc_html_e( 'Upgrade', 'meta-box' ); ?>\n\t\t\t\t\t\t<span class=\"mb-dashboard__tab__badge\"><?php esc_html_e( 'Cool', 'meta-box' ); ?></span>\n\t\t\t\t\t</div>\n\t\t\t\t<?php endif; ?>\n\t\t\t</div>\n\t\t\t<div class=\"mb-dashboard__tab-pane mb-dashboard__tutorials\" data-tab=\"tutorials\" data-utm=\"tutorials\">\n\t\t\t\t<div class=\"mb-dashboard__tutorials__inner\">\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/-oYrHGOri4w\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/create-post-types.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Creating post types and taxonomies', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/create-custom-post-types-taxonomies/\" target=\"_blank\"><?php esc_html_e( 'Creating post types and taxonomies', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'Step-by-step guide to create custom post types and custom taxonomies.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/VEZSCHtOt5Q\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/change-id.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Changing the ID of a field', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/change-id-meta-box-field/\" target=\"_blank\"><?php esc_html_e( 'Changing the ID of a field', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'If you want to change a field ID after entering data, here is the guide.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/_DaFUt92kYY\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/create-custom-fields.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Creating and configure custom fields', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/create-custom-fields/\" target=\"_blank\"><?php esc_html_e( 'Creating and configure custom fields', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'Understanding custom fields and how to create them with Meta Box.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/pFgElK8pvn0\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/category-thumbnails.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Creating category thumbnails', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/category-thumbnails/\" target=\"_blank\"><?php esc_html_e( 'Creating category thumbnails', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'How to create featured images for categories and show them on the frontend.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/Byce7gfpZJQ\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/filter-posts.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Filtering posts by custom fields and taxonomies', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/filter-posts-by-custom-fields-taxonomies/\" target=\"_blank\"><?php esc_html_e( 'Filtering posts by custom fields and taxonomies', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'How to query, filter and show posts by taxonomies and by custom fields.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/ev24jQJTgCY\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/recipe.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Creating a recipe with Meta Box and Bricks', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/create-recipes-meta-box-bricks/\" target=\"_blank\"><?php esc_html_e( 'Creating a recipe with Meta Box and Bricks', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'How to create a post type with custom fields and show them with Bricks.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/BGVY-5W6d7g\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/export-import-custom-fields.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Export and import custom fields', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/export-import-custom-fields-meta-box-builder/\" target=\"_blank\"><?php esc_html_e( 'Export and import custom fields', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'How to export custom fields settings and data and import them into another site.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mb-dashboard__tutorial\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"mb-dashboard__tutorial__image lightbox mb-dashboard__tooltip\"\n\t\t\t\t\t\t\tdata-featherlight=\"iframe\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-frameborder=\"0\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allow=\"autoplay; encrypted-media\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-allowfullscreen=\"true\"\n\t\t\t\t\t\t\tdata-featherlight-iframe-style=\"display:block;border:none;height:85vh;width:85vw;\"\n\t\t\t\t\t\t\thref=\"http://www.youtube.com/embed/6mHDBIO_qlY\"\n\t\t\t\t\t\t\tdata-tooltip=\"<?php esc_attr_e( 'Click to view the video version', 'meta-box' ); ?>\"\n\t\t\t\t\t\t\tdata-position=\"top\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/simple-listings.png\" ); ?>\" alt=\"<?php esc_attr_e( 'Creating a listing site with Meta Box and Elementor', 'meta-box' ); ?>\">\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__tutorial__title\" href=\"https://docs.metabox.io/tutorials/create-simple-listing-with-elementor/\" target=\"_blank\"><?php esc_html_e( 'Creating a listing site with Meta Box and Elementor', 'meta-box' ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__tutorial__description\">\n\t\t\t\t\t\t\t\t<?php esc_html_e( 'How to create listings and use Elementor to show and filter them.', 'meta-box' ); ?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<a href=\"https://docs.metabox.io/tutorials/\" target=\"_blank\" class=\"mb-dashboard__external\">\n\t\t\t\t\t<?php esc_html_e( 'View all tutorials', 'meta-box' ); ?>\n\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t</a>\n\t\t\t</div>\n\n\t\t\t<?php if ( $this->upgradable ) : ?>\n\t\t\t\t<div class=\"mb-dashboard__tab-pane mb-dashboard__hidden mb-dashboard__compare\" data-tab=\"compare\" data-utm=\"compare\">\n\t\t\t\t\t<div class=\"mb-dashboard__compare__header\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__compare__title\">\n\t\t\t\t\t\t\t\t<?php\n\t\t\t\t\t\t\t\t// Translators: %s - Meta Box AIO.\n\t\t\t\t\t\t\t\techo esc_html( sprintf( __( 'Get access to %s', 'meta-box' ), 'Meta Box AIO' ) );\n\t\t\t\t\t\t\t\t?>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p><?php esc_html_e( 'An all-in-one plugin that provides all free & pro Meta Box extensions for building powerful and dynamic WordPress websites!', 'meta-box' ); ?></p>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<a class=\"mb-dashboard__button\" href=\"https://metabox.io/pricing/\" target=\"_blank\"><?php esc_html_e( 'Upgrade now', 'meta-box' ); ?></a>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<table>\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th align=\"left\"><?php esc_html_e( 'Feature', 'meta-box' ); ?></th>\n\t\t\t\t\t\t\t\t<th align=\"center\">Meta Box Lite</th>\n\t\t\t\t\t\t\t\t<th align=\"center\">Meta Box AIO</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Pricing', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><?php esc_html_e( 'Free', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><?php esc_html_e( 'Paid', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'The Meta Box framework', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom post types & taxonomies', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom fields with UI', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Migration from ACF, Pods, Toolset', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Integrations with Elementor, Divi, FacetWP, Yoast SEO,...', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Relationships', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Get/set meta values with REST API', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Limit text length', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Add custom fields to comments in WordPress', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Auto update', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom fields for taxonomies', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom fields for users', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom settings pages', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create Customizer sections & panels', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create user profile', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom content models and save their data to custom tables', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Organize custom fields into repeatable groups', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Advanced location rules for field groups', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Toggle fields or field groups with conditional logic', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Frontend submission forms and dashboard', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create templates and displaying fields with views', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Save post/term meta to custom tables', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Create custom Gutenberg blocks', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Display fields in admin columns', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'UI features: columns, tooltips, tabs', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Premium support', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Licensing management system, including sub-licensing', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#x-circle\"></use></svg></td>\n\t\t\t\t\t\t\t\t<td align=\"center\"><svg><use xlink:href=\"#check-circle\"></use></svg></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t<tfoot>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td><?php esc_html_e( 'Learn more', 'meta-box' ); ?></td>\n\t\t\t\t\t\t\t\t<td align=\"center\">\n\t\t\t\t\t\t\t\t\t<a class=\"mb-dashboard__external\" href=\"https://metabox.io/lite/\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\tMeta Box Lite\n\t\t\t\t\t\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td align=\"center\">\n\t\t\t\t\t\t\t\t\t<a class=\"mb-dashboard__external\" href=\"https://metabox.io/aio/\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\tMeta Box AIO\n\t\t\t\t\t\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tfoot>\n\t\t\t\t\t</table>\n\n\t\t\t\t\t<div class=\"mb-dashboard__compare__footer\">\n\t\t\t\t\t\t<div class=\"mb-dashboard__compare__title\">\n\t\t\t\t\t\t\t<?php\n\t\t\t\t\t\t\t// Translators: %s - Meta Box AIO.\n\t\t\t\t\t\t\techo esc_html( sprintf( __( 'Do more with %s', 'meta-box' ), 'Meta Box AIO' ) );\n\t\t\t\t\t\t\t?>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p><?php esc_html_e( 'Get access to the all-in-one version of Meta Box with full of top-notch features for building robust and dynamic websites.', 'meta-box' ); ?></p>\n\n\t\t\t\t\t\t<a class=\"mb-dashboard__button\" href=\"https://metabox.io/pricing/\" target=\"_blank\"><?php esc_html_e( 'Upgrade now', 'meta-box' ); ?></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t<?php endif; ?>\n\t\t</section>\n\t</div>\n\n\t<aside class=\"mb-dashboard__sidebar\" data-utm=\"sidebar\">\n\t\t<?php\n\t\t$utc_timezone = new \\DateTimeZone( 'UTC' );\n\t\t$now = new \\DateTime( 'now', $utc_timezone );\n\t\t$sale_end1 = new \\DateTime( '2025-11-29 00:00:00', $utc_timezone );\n\t\t$sale_end2 = new \\DateTime( '2025-12-02 00:00:00', $utc_timezone );\n\t\tif ( $now < $sale_end2 ) :\n\t\t\t?>\n\t\t\t<div class=\"mb-dashboard__widget mb-dashboard__sale\" data-utm=\"sale\">\n\t\t\t\t<div class=\"mb-dashboard__widget-title\">\n\t\t\t\t\t<?php esc_html_e( 'Black Friday Sale', 'meta-box' ); ?>\n\t\t\t\t\t<span class=\"mb-dashboard__sale__badge\"><?php esc_html_e( 'Hot', 'meta-box' ); ?></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mb-dashboard__widget-body\">\n\t\t\t\t\t<p><?php esc_html_e( 'Upgrade your package and optimize the workflow at the best price!', 'meta-box' ); ?></p>\n\t\t\t\t\t<a class=\"mb-dashboard__sale__button\" href=\"https://metabox.io/black-friday/\" target=\"_blank\">\n\t\t\t\t\t\t<?php if ( $now < $sale_end1 ) : ?>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__sale__button-text--large\"><?php esc_html_e( 'Get 40% OFF now', 'meta-box' ); ?></span>\n\t\t\t\t\t\t<?php else : ?>\n\t\t\t\t\t\t\t<span class=\"mb-dashboard__sale__button-text--large\"><?php esc_html_e( 'Get 25% OFF now', 'meta-box' ); ?></span>\n\t\t\t\t\t\t<?php endif; ?>\n\t\t\t\t\t\t<span class=\"mb-dashboard__sale__button-text--small\"><?php esc_html_e( 'on annual plans', 'meta-box' ); ?></span>\n\t\t\t\t\t</a>\n\t\t\t\t\t<ul class=\"mb-dashboard__countdown\" data-end=\"<?= $now < $sale_end1 ? '2025-11-29T00:00:00+00:00' : '2025-12-02T00:00:00+00:00' ?>\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-number\" data-type=\"days\">0</div>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-label\">Days</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-number\" data-type=\"hours\">0</div>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-label\">Hours</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-number\" data-type=\"minutes\">0</div>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-label\">Min.</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-number\" data-type=\"seconds\">0</div>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__countdown-label\">Sec.</div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<script>\n\t\t\t\t\t\tdocument.querySelectorAll( '.mb-dashboard__countdown' ).forEach( el => {\n\t\t\t\t\t\t\tconst days = el.querySelector( '[data-type=\"days\"]' );\n\t\t\t\t\t\t\tconst hours = el.querySelector( '[data-type=\"hours\"]' );\n\t\t\t\t\t\t\tconst minutes = el.querySelector( '[data-type=\"minutes\"]' );\n\t\t\t\t\t\t\tconst seconds = el.querySelector( '[data-type=\"seconds\"]' );\n\n\t\t\t\t\t\t\tconst countdown = () => {\n\t\t\t\t\t\t\t\tconst time = new Date( el.dataset.end ).getTime();\n\t\t\t\t\t\t\t\tconst now = new Date().getTime();\n\t\t\t\t\t\t\t\tconst distance = ( time - now ) / 1000;\n\n\t\t\t\t\t\t\t\tif ( distance < 0 ) {\n\t\t\t\t\t\t\t\t\tdays.innerHTML = '0';\n\t\t\t\t\t\t\t\t\thours.innerHTML = '0';\n\t\t\t\t\t\t\t\t\tminutes.innerHTML = '0';\n\t\t\t\t\t\t\t\t\tseconds.innerHTML = '0';\n\t\t\t\t\t\t\t\t\tclearInterval( timer );\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tdays.innerHTML = Math.floor( distance / 86400 );\n\t\t\t\t\t\t\t\thours.innerHTML = Math.floor( ( distance % 86400 ) / 3600 );\n\t\t\t\t\t\t\t\tminutes.innerHTML = Math.floor( ( distance % 3600 ) / 60 );\n\t\t\t\t\t\t\t\tseconds.innerHTML = Math.floor( distance % 60 );\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tconst timer = setInterval( countdown, 1000 );\n\t\t\t\t\t\t} );\n\t\t\t\t\t</script>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t<?php endif; ?>\n\t\t<?php if ( $this->upgradable ) : ?>\n\t\t\t<div class=\"mb-dashboard__widget mb-dashboard__upgrade\" data-utm=\"cta\">\n\t\t\t\t<div class=\"mb-dashboard__widget-title\"><?php esc_html_e( 'Wanna advanced features?', 'meta-box' ); ?></div>\n\t\t\t\t<div class=\"mb-dashboard__widget-body\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'Organize fields into groups (repeater)', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'More location rules & conditional logic', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'Custom tables to boost performance', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'Create custom blocks with low code', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'Create login, register & edit profile pages', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'Submit & manage posts on the frontend', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'Priority support', 'meta-box' ); ?></li>\n\t\t\t\t\t\t<li><svg><use xlink:href=\"#check-circle-solid\"></use></svg><?php esc_html_e( 'And much more!', 'meta-box' ); ?></li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<a class=\"mb-dashboard__button\" target=\"_blank\" href=\"https://metabox.io/pricing/\"><?php esc_html_e( 'Upgrade Now', 'meta-box' ); ?></a>\n\t\t\t\t</div>\n\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/bulb.svg\" ); ?>\" />\n\t\t\t</div>\n\t\t<?php else : ?>\n\t\t\t<div class=\"mb-dashboard__widget mb-dashboard__support\" data-utm=\"support\">\n\t\t\t\t<div class=\"mb-dashboard__widget-title\"><?php esc_html_e( 'Premium support', 'meta-box' ); ?></div>\n\t\t\t\t<div class=\"mb-dashboard__widget-body\">\n\t\t\t\t\t<p><?php esc_html_e( 'If you have any questions, need a hand with a technical issue, or just want to say hi, we\\'ve got you covered. Get in touch with us and we\\'ll be happy to assist you!', 'meta-box' ); ?><p>\n\t\t\t\t\t\t<a class=\"mb-dashboard__external\" target=\"_blank\" href=\"https://support.metabox.io\">\n\t\t\t\t\t\t\t<?php esc_html_e( 'Go to the support forum', 'meta-box' ); ?>\n\t\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t<?php endif; ?>\n\n\t\t<div class=\"mb-dashboard__widget mb-dashboard__plugins\">\n\t\t\t<div class=\"mb-dashboard__widget-title\"><?php esc_html_e( 'Recommended plugins', 'meta-box' ) ?></div>\n\t\t\t<div class=\"mb-dashboard__widget-body\">\n\t\t\t\t<?php\n\t\t\t\t// phpcs:disable\n\t\t\t\t$plugins = [\n\t\t\t\t\t[\n\t\t\t\t\t\t'title'       => 'Slim SEO',\n\t\t\t\t\t\t'slug'        => 'slim-seo',\n\t\t\t\t\t\t'description' => __( 'Fast & Automated WordPress SEO Plugin', 'meta-box' ),\n\t\t\t\t\t\t'url'         => 'https://wpslimseo.com',\n\t\t\t\t\t],\n\t\t\t\t\t[\n\t\t\t\t\t\t'title'       => 'Falcon',\n\t\t\t\t\t\t'slug'        => 'falcon',\n\t\t\t\t\t\t'description' => __( 'WordPress Optimizations & Tweaks', 'meta-box' ),\n\t\t\t\t\t\t'url'         => 'https://wordpress.org/plugins/falcon/',\n\t\t\t\t\t],\n\t\t\t\t];\n\t\t\t\t?>\n\t\t\t\t<?php foreach ( $plugins as $plugin ) : ?>\n\t\t\t\t\t<div class=\"mb-dashboard__plugin\">\n\t\t\t\t\t\t<img src=\"<?php echo esc_attr( \"{$this->assets_url}/img/{$plugin['slug']}.svg\" ); ?>\" alt=\"<?php echo esc_attr( $plugin['title'] ); ?>\" />\n\t\t\t\t\t\t<div class=\"mb-dashboard__plugin__text\">\n\t\t\t\t\t\t\t<a class=\"mb-dashboard__plugin__title\" href=\"<?php echo esc_attr( $plugin['url'] ); ?>\" target=\"_blank\"><?php echo esc_html( $plugin['title'] ); ?></a>\n\t\t\t\t\t\t\t<div class=\"mb-dashboard__plugin__description\"><?php echo esc_html( $plugin['description'] ); ?></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<?php $status = $this->get_plugin_status( $plugin['slug'] ); ?>\n\t\t\t\t\t\t<span class=\"mb-dashboard__plugin__status\" data-plugin=\"<?php echo esc_attr( $plugin['slug'] ); ?>\" data-action=\"<?php echo esc_attr( $status['action'] ); ?>\" data-processing=\"<?php echo esc_attr( $status['processing'] ); ?>\" data-done=\"<?php echo esc_attr( $status['done'] ); ?>\">\n\t\t\t\t\t\t\t<?php echo esc_html( $status['text'] ); ?>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t<?php endforeach; ?>\n\t\t\t\t<?php // phpcs:enable ?>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"mb-dashboard__widget\">\n\t\t\t<div class=\"mb-dashboard__widget-title\"><?php esc_html_e( 'Join the community', 'meta-box' ) ?></div>\n\t\t\t<div class=\"mb-dashboard__widget-body\">\n\t\t\t\t<p><?php esc_html_e( 'Share opinions, ask questions and help each other on our Meta Box community!', 'meta-box' ); ?></p>\n\t\t\t\t<a class=\"mb-dashboard__external\" href=\"https://www.facebook.com/groups/metaboxusers\" target=\"_blank\">\n\t\t\t\t\t<?php esc_html_e( 'Join our Facebook Group', 'meta-box' ); ?>\n\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"mb-dashboard__widget\">\n\t\t\t<div class=\"mb-dashboard__widget-title\"><?php esc_html_e( 'Leave us a review', 'meta-box' ) ?></div>\n\t\t\t<div class=\"mb-dashboard__widget-body\">\n\t\t\t\t<p><?php esc_html_e( 'Are you are enjoying Meta Box? We would love to hear your feedback.', 'meta-box' ) ?></p>\n\t\t\t\t<a class=\"mb-dashboard__external\" href=\"https://wordpress.org/support/plugin/meta-box/reviews/?filter=5\" target=\"_blank\">\n\t\t\t\t\t<?php esc_html_e( 'Submit a review', 'meta-box' ) ?>\n\t\t\t\t\t<svg><use xlink:href=\"#external-link\"></use></svg>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</div>\n\t</aside>\n\n</div>\n\n<div\n\tclass=\"mb-dashboard__news\"\n\tdata-empty=\"<?php esc_html_e( 'No items available', 'meta-box' ); ?>\"\n\tdata-fetching=\"<?php esc_html_e( 'Getting news...', 'meta-box' ); ?>\"\n>\n\t<div class=\"mb-dashboard__news__header\">\n\t\t<div class=\"mb-dashboard__news__heading\"><?php esc_html_e( 'What\\'s new?', 'meta-box' ); ?></div>\n\t\t<button class=\"mb-dashboard__news__close\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n\t\t\t\t<path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\n\t\t\t</svg>\n\t\t</button>\n\t</div>\n\n\t<div class=\"mb-dashboard__news__list\"></div>\n</div>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\">\n\t<symbol id=\"check-circle-solid\" viewBox=\"0 0 24 24\">\n\t\t<path d=\"M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm-1.999 14.413-3.713-3.705L7.7 11.292l2.299 2.295 5.294-5.294 1.414 1.414-6.706 6.706z\"></path>\n\t</symbol>\n\t<symbol id=\"check-circle\" viewBox=\"0 0 24 24\" fill=\"var(--mb-color-accent)\">\n\t\t<path d=\"M12 2C6.486 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.514 2 12 2zm0 18c-4.411 0-8-3.589-8-8s3.589-8 8-8 8 3.589 8 8-3.589 8-8 8z\"></path>\n\t\t<path d=\"M9.999 13.587 7.7 11.292l-1.412 1.416 3.713 3.705 6.706-6.706-1.414-1.414z\"></path>\n\t</symbol>\n\t<symbol id=\"x-circle\" viewBox=\"0 0 24 24\" fill=\"#dc2626\">\n\t\t<path d=\"M9.172 16.242 12 13.414l2.828 2.828 1.414-1.414L13.414 12l2.828-2.828-1.414-1.414L12 10.586 9.172 7.758 7.758 9.172 10.586 12l-2.828 2.828z\"></path>\n\t\t<path d=\"M12 22c5.514 0 10-4.486 10-10S17.514 2 12 2 2 6.486 2 12s4.486 10 10 10zm0-18c4.411 0 8 3.589 8 8s-3.589 8-8 8-8-3.589-8-8 3.589-8 8-8z\"></path>\n\t</symbol>\n\t<symbol id=\"external-link\" viewBox=\"0 0 24 24\">\n\t\t<path d=\"m13 3 3.293 3.293-7 7 1.414 1.414 7-7L21 11V3z\"></path>\n\t\t<path d=\"M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z\"></path>\n\t</symbol>\n</svg>\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/FeaturedPlugins.php",
    "content": "<?php\nnamespace MetaBox;\n\nclass FeaturedPlugins {\n\tpublic function __construct() {\n\t\tadd_filter( 'plugins_api_result', [ $this, 'process' ], 10, 2 );\n\t}\n\n\tpublic function process( $result, $action ) {\n\t\tglobal $tab;\n\t\tif ( ! in_array( $tab, [ 'featured', 'recommended' ], true ) ) {\n\t\t\treturn $result;\n\t\t}\n\n\t\tif ( is_wp_error( $result ) || $action !== 'query_plugins' ) {\n\t\t\treturn $result;\n\t\t}\n\n\t\tforeach ( $result->plugins as $index => $plugin ) {\n\t\t\tif ( $plugin['slug'] === 'secure-custom-fields' ) {\n\t\t\t\tunset( $result->plugins[ $index ] );\n\t\t\t}\n\t\t}\n\n\t\treturn $result;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Integrations/Block.php",
    "content": "<?php\nnamespace MetaBox\\Integrations;\n\nclass Block {\n\tpublic function __construct() {\n\t\tadd_filter( 'block_categories_all', [ $this, 'register_block_category' ] );\n\t}\n\n\tpublic function register_block_category( $categories ) {\n\t\t$categories[] = [\n\t\t\t'slug'  => 'meta-box',\n\t\t\t'title' => esc_html__( 'Meta Box', 'meta-box' ),\n\t\t];\n\n\t\treturn $categories;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Integrations/Bricks.php",
    "content": "<?php\nnamespace MetaBox\\Integrations;\n\nclass Bricks {\n\tpublic function __construct() {\n\t\tadd_filter( 'bricks/builder/i18n', [ $this, 'i18n' ] );\n\t}\n\n\tpublic function i18n( array $i18n ): array {\n\t\t$i18n['meta-box'] = esc_html__( 'Meta Box', 'meta-box' );\n\t\treturn $i18n;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Integrations/Elementor.php",
    "content": "<?php\nnamespace MetaBox\\Integrations;\n\nclass Elementor {\n\tpublic function __construct() {\n\t\tadd_action( 'elementor/elements/categories_registered', [ $this, 'add_metabox_category' ] );\n\t}\n\n\tpublic function add_metabox_category() {\n\t\t\\Elementor\\Plugin::instance()->elements_manager->add_category(\n\t\t\t'metabox',\n\t\t\t[\n\t\t\t\t'title' => esc_html__( 'Meta Box', 'meta-box' ),\n\t\t\t\t'icon'  => 'fa fa-m',\n\t\t\t]\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Integrations/Oxygen.php",
    "content": "<?php\nnamespace MetaBox\\Integrations;\n\nclass Oxygen {\n\n\tpublic function __construct() {\n\t\tadd_action( 'oxygen_add_plus_sections', [ $this, 'add_metabox_category' ] );\n\t}\n\n\tpublic function add_metabox_category() {\n\t\tif ( ! defined( 'CT_VERSION' ) ) {\n\t\t\treturn;\n\t\t}\n\t\t\\CT_Toolbar::oxygen_add_plus_accordion_section( 'meta-box', esc_html__( 'Meta Box', 'meta-box' ) );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Integrations/WPML.php",
    "content": "<?php\nnamespace MetaBox\\Integrations;\n\nclass WPML {\n\t/**\n\t * List of fields that need to translate values (because they're saved as IDs).\n\t *\n\t * @var array\n\t */\n\tprivate $field_types = [ 'post', 'taxonomy_advanced' ];\n\n\tpublic function __construct() {\n\t\t// Run before meta boxes are registered (at `init` with priority 20) so it can modify fields.\n\t\tadd_action( 'init', [ $this, 'init' ] );\n\t}\n\n\tpublic function init(): void {\n\t\tif ( ! defined( 'ICL_SITEPRESS_VERSION' ) ) {\n\t\t\treturn;\n\t\t}\n\t\tadd_filter( 'wpml_duplicate_generic_string', [ $this, 'translate_ids' ], 10, 3 );\n\t\tadd_filter( 'rwmb_normalize_field', [ $this, 'modify_field' ] );\n\n\t\t// Filter the value on the front end.\n\t\tadd_filter( 'rwmb_get_value', [ $this, 'get_translated_value' ], 10, 2 );\n\t\tadd_filter( '_rwmb_post_format_single_value', [ $this, 'get_translated_value' ], 10, 2 );\n\t}\n\n\t/**\n\t * Translating IDs stored as field values upon WPML post/page duplication.\n\t *\n\t * @param mixed  $value           Meta value.\n\t * @param string $target_language Target language.\n\t * @param array  $meta_data       Meta arguments.\n\t * @return mixed\n\t */\n\tpublic function translate_ids( $value, $target_language, $meta_data ) {\n\t\tif ( 'custom_field' !== $meta_data['context'] ) {\n\t\t\treturn $value;\n\t\t}\n\n\t\t$field = rwmb_get_registry( 'field' )->get( $meta_data['key'], get_post_type( $meta_data['master_post_id'] ) );\n\t\tif ( false === $field || ! in_array( $field['type'], $this->field_types, true ) ) {\n\t\t\treturn $value;\n\t\t}\n\n\t\t// Object type needed for WPML filter differs between fields.\n\t\t$object_type = 'taxonomy_advanced' === $field['type'] ? $field['taxonomy'] : $field['post_type'];\n\n\t\t// Translating values, whether are stored as comma separated strings or not.\n\t\tif ( ! str_contains( $value, ',' ) ) {\n\t\t\t$value = apply_filters( 'wpml_object_id', $value, $object_type, true, $target_language );\n\t\t\treturn $value;\n\t\t}\n\n\t\t// Dealing with IDs stored as comma separated strings.\n\t\t$translated_values = [];\n\t\t$values            = explode( ',', $value );\n\n\t\tforeach ( $values as $v ) {\n\t\t\t$translated_values[] = apply_filters( 'wpml_object_id', $v, $object_type, true, $target_language );\n\t\t}\n\n\t\t$value = implode( ',', $translated_values );\n\t\treturn $value;\n\t}\n\n\t/**\n\t * Modified field depends on its translation status.\n\t * If the post is a translated version of another post and the field is set to:\n\t * - Do not translate: hide the field.\n\t * - Copy: make it disabled so users cannot edit.\n\t * - Translate: do nothing.\n\t */\n\tpublic function modify_field( array $field ): array {\n\t\tglobal $wpml_post_translations;\n\n\t\tif ( empty( $field['id'] ) ) {\n\t\t\treturn $field;\n\t\t}\n\n\t\t// Get post ID.\n\t\t$request = rwmb_request();\n\t\t$post_id = $request->filter_get( 'post', FILTER_SANITIZE_NUMBER_INT );\n\t\tif ( ! $post_id ) {\n\t\t\t$post_id = $request->filter_post( 'post_ID', FILTER_SANITIZE_NUMBER_INT );\n\t\t}\n\n\t\t// If the post is the original one: do nothing.\n\t\tif ( ! method_exists( $wpml_post_translations, 'get_source_lang_code' ) || ! $wpml_post_translations->get_source_lang_code( $post_id ) ) {\n\t\t\treturn $field;\n\t\t}\n\n\t\t// Get setting for the custom field translation.\n\t\t$custom_fields_translation = apply_filters( 'wpml_sub_setting', false, 'translation-management', 'custom_fields_translation' );\n\t\tif ( ! isset( $custom_fields_translation[ $field['id'] ] ) ) {\n\t\t\treturn $field;\n\t\t}\n\n\t\t$setting = intval( $custom_fields_translation[ $field['id'] ] );\n\t\tif ( 0 === $setting ) {           // Do not translate: hide it.\n\t\t\t$field['class'] .= ' hidden';\n\t\t} elseif ( 1 === $setting ) {     // Copy: disable editing.\n\t\t\t$field['disabled'] = true;\n\t\t}\n\n\t\treturn $field;\n\t}\n\n\tpublic function get_translated_value( $value, $field ) {\n\t\tif ( ! is_array( $field ) || empty( $field['type'] ) || $field['type'] !== 'post' ) {\n\t\t\treturn $value;\n\t\t}\n\n\t\t$type             = is_array( $field['post_type'] ) ? reset( $field['post_type'] ) : $field['post_type'];\n\t\t$current_language = apply_filters( 'wpml_current_language', null );\n\t\treturn $this->get_translated_id( $value, $type, $current_language );\n\t}\n\n\tprivate function get_translated_id( $id, $type, $current_language ) {\n\t\tif ( is_array( $id ) ) {\n\t\t\treturn array_map( function ( $sub_id ) use ( $type, $current_language ) {\n\t\t\t\treturn $this->get_translated_id( $sub_id, $type, $current_language );\n\t\t\t}, $id );\n\t\t}\n\n\t\treturn is_numeric( $id ) ? apply_filters( 'wpml_object_id', $id, $type, true, $current_language ) : $id;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Updater/Checker.php",
    "content": "<?php\nnamespace MetaBox\\Updater;\n\nuse stdClass;\n\nclass Checker {\n\tprivate $api_url = 'https://metabox.io/wp-json/buse2/updater/';\n\tprivate $option;\n\n\tpublic function __construct( Option $option ) {\n\t\t$this->option = $option;\n\t}\n\n\tpublic function init() {\n\t\tadd_action( 'init', [ $this, 'enable_update' ], 1 );\n\t}\n\n\tpublic function enable_update(): void {\n\t\tif ( $this->has_extensions() || $this->has_free_extensions() ) {\n\t\t\tadd_filter( 'pre_set_site_transient_update_plugins', [ $this, 'check_updates' ] );\n\t\t\tadd_filter( 'plugins_api', [ $this, 'get_info' ], 10, 3 );\n\t\t}\n\t}\n\n\tpublic function has_extensions(): bool {\n\t\t$extensions = $this->get_extensions();\n\t\treturn ! empty( $extensions );\n\t}\n\n\tpublic function get_extensions(): array {\n\t\tif ( ! function_exists( 'get_plugins' ) ) {\n\t\t\trequire_once ABSPATH . 'wp-admin/includes/plugin.php';\n\t\t}\n\n\t\t$extensions = [\n\t\t\t'mb-admin-columns',\n\t\t\t'mb-blocks',\n\t\t\t'mb-custom-table',\n\t\t\t'mb-frontend-submission',\n\t\t\t'mb-revision',\n\t\t\t'mb-settings-page',\n\t\t\t'mb-term-meta',\n\t\t\t'mb-user-meta',\n\t\t\t'mb-user-profile',\n\t\t\t'mb-views',\n\t\t\t'meta-box-columns',\n\t\t\t'meta-box-conditional-logic',\n\t\t\t'meta-box-geolocation',\n\t\t\t'meta-box-group',\n\t\t\t'meta-box-include-exclude',\n\t\t\t'meta-box-show-hide',\n\t\t\t'meta-box-tabs',\n\t\t\t'meta-box-template',\n\n\t\t\t'mb-favorite-posts',\n\t\t\t'mb-testimonials',\n\t\t\t'mb-user-avatar',\n\n\t\t\t'mb-core',\n\t\t\t'meta-box-aio',\n\t\t];\n\t\t$plugins    = get_plugins();\n\t\t$plugins    = array_map( 'dirname', array_keys( $plugins ) );\n\n\t\treturn array_intersect( $extensions, $plugins );\n\t}\n\n\tprivate function has_free_extensions(): bool {\n\t\t$extensions = $this->get_free_extensions();\n\t\treturn ! empty( $extensions );\n\t}\n\n\tprivate function get_free_extensions(): array {\n\t\tif ( ! function_exists( 'get_plugins' ) ) {\n\t\t\trequire_once ABSPATH . 'wp-admin/includes/plugin.php';\n\t\t}\n\n\t\t$extensions = [\n\t\t\t'meta-box-lite',\n\t\t\t'meta-box-builder',\n\t\t];\n\t\t$plugins    = get_plugins();\n\t\t$plugins    = array_map( 'dirname', array_keys( $plugins ) );\n\n\t\treturn array_intersect( $extensions, $plugins );\n\t}\n\n\t/**\n\t * Check plugin for updates\n\t *\n\t * @param object $data The plugin update data.\n\t *\n\t * @return mixed\n\t */\n\tpublic function check_updates( $data ) {\n\t\tstatic $response = null;\n\n\t\t$request = rwmb_request();\n\n\t\t// Bypass embed plugins via TGMPA.\n\t\tif ( $request->get( 'tgmpa-update' ) || 'tgmpa-bulk-update' === $request->post( 'action' ) ) {\n\t\t\treturn $data;\n\t\t}\n\n\t\t// Make sure to send remote request once.\n\t\tif ( null === $response ) {\n\t\t\t$response = $this->request( 'plugins' );\n\t\t}\n\n\t\tif ( empty( $response ) ) {\n\t\t\treturn $data;\n\t\t}\n\n\t\tif ( empty( $data ) ) {\n\t\t\t$data = new stdClass();\n\t\t}\n\t\tif ( ! isset( $data->response ) ) {\n\t\t\t$data->response = [];\n\t\t}\n\n\t\t$plugins = array_filter( $response['data'], [ $this, 'has_update' ] );\n\t\tforeach ( $plugins as $plugin ) {\n\t\t\tif ( empty( $plugin['package'] ) ) {\n\t\t\t\t$plugin['upgrade_notice'] = __( 'UPDATE UNAVAILABLE! Please enter a valid license key to enable automatic updates.', 'meta-box' );\n\t\t\t}\n\n\t\t\t$data->response[ $plugin['plugin'] ] = (object) $plugin;\n\t\t}\n\n\t\t$this->option->update( [\n\t\t\t'status'  => $response['status'],\n\t\t\t'plugins' => array_keys( $plugins ),\n\t\t] );\n\n\t\treturn $data;\n\t}\n\n\t/**\n\t * Get plugin information\n\t *\n\t * @param object $data   The plugin update data.\n\t * @param string $action Request action.\n\t * @param object $args   Extra parameters.\n\t *\n\t * @return mixed\n\t */\n\tpublic function get_info( $data, $action, $args ) {\n\t\t$plugins = $this->option->get( 'plugins', [] );\n\t\tif ( 'plugin_information' !== $action || ! isset( $args->slug ) || ! in_array( $args->slug, $plugins, true ) ) {\n\t\t\treturn $data;\n\t\t}\n\n\t\t$response = $this->request( 'plugin', [ 'product' => $args->slug ] );\n\t\treturn $response ? (object) $response['data'] : $data;\n\t}\n\n\tpublic function request( $endpoint, $args = [] ) {\n\t\t$args = wp_parse_args( $args, [\n\t\t\t'key'   => $this->option->get_api_key(),\n\t\t\t'url'   => home_url(),\n\t\t\t'force' => false,\n\t\t] );\n\n\t\t// Get from cache first.\n\t\t$data = compact( 'endpoint', 'args' );\n\t\t// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize\n\t\t$cache_key = 'meta_box_' . md5( serialize( $data ) );\n\t\tif ( $this->option->is_network_activated() ) {\n\t\t\t$cache = get_site_transient( $cache_key );\n\t\t} else {\n\t\t\t$cache = get_transient( $cache_key );\n\t\t}\n\t\tif ( ! $args['force'] && $cache ) {\n\t\t\treturn $cache;\n\t\t}\n\n\t\t$url      = $this->api_url . $endpoint;\n\t\t$request  = wp_remote_get( add_query_arg( $args, $url ) );\n\t\t$response = wp_remote_retrieve_body( $request );\n\t\t$response = json_decode( $response, true );\n\n\t\t// Cache requests.\n\t\tif ( $this->option->is_network_activated() ) {\n\t\t\tset_site_transient( $cache_key, $response, DAY_IN_SECONDS );\n\t\t} else {\n\t\t\tset_transient( $cache_key, $response, DAY_IN_SECONDS );\n\t\t}\n\n\t\treturn $response;\n\t}\n\n\tprivate function has_update( $remote_plugin_data ) {\n\t\t$slug    = $remote_plugin_data['plugin'];\n\t\t$plugins = get_plugins();\n\n\t\tif ( empty( $plugins[ $slug ] ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$plugin = $plugins[ $slug ];\n\t\treturn version_compare( $plugin['Version'], $remote_plugin_data['new_version'], '<' );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Updater/Notification.php",
    "content": "<?php\nnamespace MetaBox\\Updater;\n\n/**\n * This class notifies users to enter or update license key.\n */\nclass Notification {\n\tprivate $checker;\n\tprivate $option;\n\n\t/**\n\t * Settings page URL.\n\t *\n\t * @var string\n\t */\n\tprivate $settings_page;\n\n\n\tpublic function __construct( Checker $checker, Option $option ) {\n\t\t$this->checker = $checker;\n\t\t$this->option  = $option;\n\n\t\t$this->settings_page = $option->is_network_activated() ? network_admin_url( 'settings.php?page=meta-box-updater' ) : admin_url( 'admin.php?page=meta-box-updater' );\n\t}\n\n\t/**\n\t * Add hooks to show admin notice.\n\t */\n\tpublic function init() {\n\t\tif ( ! $this->checker->has_extensions() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Show update message on Plugins page.\n\t\t$extensions = $this->checker->get_extensions();\n\t\tforeach ( $extensions as $extension ) {\n\t\t\t$file = \"{$extension}/{$extension}.php\";\n\t\t\tadd_action( \"in_plugin_update_message-$file\", [ $this, 'show_update_message' ], 10, 2 );\n\t\t\tadd_filter( \"plugin_action_links_$file\", [ $this, 'plugin_links' ], 20 );\n\t\t}\n\n\t\t$admin_notices_hook = $this->option->is_network_activated() ? 'network_admin_notices' : 'admin_notices';\n\t\tadd_action( $admin_notices_hook, [ $this, 'notify' ] );\n\t}\n\n\tpublic function notify() {\n\t\t$excluded_screens = [\n\t\t\t'meta-box_page_meta-box-updater',\n\t\t\t'settings_page_meta-box-updater-network',\n\t\t\t'meta-box_page_meta-box-aio',\n\t\t];\n\t\t$screen           = get_current_screen();\n\t\tif ( in_array( $screen->id, $excluded_screens, true ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$messages = [\n\t\t\t// Translators: %1$s - URL to the settings page, %2$s - URL to the pricing page.\n\t\t\t'no_key'  => __( 'You have not set your Meta Box license key yet, which means you are missing out on automatic updates and support! Please <a href=\"%1$s\">enter your license key</a> or <a href=\"%2$s\" target=\"_blank\">get a new one here</a>.', 'meta-box' ),\n\t\t\t// Translators: %1$s - URL to the settings page, %2$s - URL to the pricing page.\n\t\t\t'invalid' => __( 'Your license key for Meta Box is <b>invalid</b>. Please <a href=\"%1$s\">update your license key</a> or <a href=\"%2$s\" target=\"_blank\">get a new one</a> to enable automatic updates.', 'meta-box' ),\n\t\t\t// Translators: %1$s - URL to the settings page, %2$s - URL to the pricing page.\n\t\t\t'error'   => __( 'Your license key for Meta Box is <b>invalid</b>. Please <a href=\"%1$s\">update your license key</a> or <a href=\"%2$s\" target=\"_blank\">get a new one</a> to enable automatic updates.', 'meta-box' ),\n\t\t\t// Translators: %3$s - URL to the My Account page.\n\t\t\t'expired' => __( 'Your license key for Meta Box is <b>expired</b>. Please <a href=\"%3$s\" target=\"_blank\">renew your license</a> to get automatic updates and premium support.', 'meta-box' ),\n\t\t];\n\t\t$status   = $this->option->get_license_status();\n\t\tif ( ! isset( $messages[ $status ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\techo '<div class=\"notice notice-warning is-dismissible\"><p><span class=\"dashicons dashicons-warning\" style=\"color: #f56e28\"></span> ', wp_kses_post( sprintf( $messages[ $status ], $this->settings_page, 'https://elu.to/mnp', 'https://elu.to/mna' ) ), '</p></div>';\n\t}\n\n\t/**\n\t * Show update message on Plugins page.\n\t *\n\t * @param  array  $plugin_data Plugin data.\n\t * @param  object $response    Available plugin update data.\n\t */\n\tpublic function show_update_message( $plugin_data, $response ) {\n\t\t// Users have an active license.\n\t\tif ( ! empty( $response->package ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$messages = [\n\t\t\t// Translators: %1$s - URL to the settings page, %2$s - URL to the pricing page.\n\t\t\t'no_key'  => __( 'Please <a href=\"%1$s\">enter your license key</a> or <a href=\"%2$s\" target=\"_blank\">get a new one here</a>.', 'meta-box' ),\n\t\t\t// Translators: %1$s - URL to the settings page, %2$s - URL to the pricing page.\n\t\t\t'invalid' => __( 'Your license key is <b>invalid</b>. Please <a href=\"%1$s\">update your license key</a> or <a href=\"%2$s\" target=\"_blank\">get a new one here</a>.', 'meta-box' ),\n\t\t\t// Translators: %1$s - URL to the settings page, %2$s - URL to the pricing page.\n\t\t\t'error'   => __( 'Your license key is <b>invalid</b>. Please <a href=\"%1$s\">update your license key</a> or <a href=\"%2$s\" target=\"_blank\">get a new one here</a>.', 'meta-box' ),\n\t\t\t// Translators: %3$s - URL to the My Account page.\n\t\t\t'expired' => __( 'Your license key is <b>expired</b>. Please <a href=\"%3$s\" target=\"_blank\">renew your license</a>.', 'meta-box' ),\n\t\t];\n\t\t$status   = $this->option->get_license_status();\n\t\tif ( ! isset( $messages[ $status ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\techo '<br><span style=\"width: 26px; height: 20px; display: inline-block;\">&nbsp;</span>' . wp_kses_post( sprintf( $messages[ $status ], $this->settings_page, 'https://elu.to/mnp', 'https://elu.to/mna' ) );\n\t}\n\n\tpublic function plugin_links( array $links ): array {\n\t\t$status = $this->option->get_license_status();\n\t\tif ( 'active' === $status ) {\n\t\t\treturn $links;\n\t\t}\n\n\t\t$text    = 'no_key' === $status ? __( 'Activate License', 'meta-box' ) : __( 'Update License', 'meta-box' );\n\t\t$links[] = '<a href=\"' . esc_url( $this->settings_page ) . '\" class=\"rwmb-activate-license\" style=\"color: #39b54a; font-weight: bold\">' . esc_html( $text ) . '</a>';\n\n\t\treturn $links;\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Updater/Option.php",
    "content": "<?php\nnamespace MetaBox\\Updater;\n\n/**\n * This class handles getting and saving the updater option.\n */\nclass Option {\n\t/**\n\t * Option name.\n\t *\n\t * @var string\n\t */\n\tprivate $option = 'meta_box_updater';\n\n\t/**\n\t * Get an option.\n\t *\n\t * @param ?string $name    Option name. Pass null to return the option array.\n\t * @param mixed   $default Default value.\n\t *\n\t * @return mixed Option value or option array.\n\t */\n\tpublic function get( $name = null, $default = null ) {\n\t\t$option = $this->is_network_activated() ? get_site_option( $this->option, [] ) : get_option( $this->option, [] );\n\n\t\treturn null === $name ? $option : ( $option[ $name ] ?? $default );\n\t}\n\n\tpublic function get_api_key(): string {\n\t\treturn defined( 'META_BOX_KEY' ) ? META_BOX_KEY : $this->get( 'api_key', '' );\n\t}\n\n\tpublic function get_license_status(): string {\n\t\treturn $this->get_api_key() ? $this->get( 'status', 'active' ) : 'no_key';\n\t}\n\n\t/**\n\t * Update the option array.\n\t *\n\t * @param array $option Option value.\n\t */\n\tpublic function update( $option ) {\n\t\t$old_option = (array) $this->get();\n\n\t\t$option = array_merge( $old_option, $option );\n\t\tif ( $this->is_network_activated() ) {\n\t\t\tupdate_site_option( $this->option, $option );\n\t\t} else {\n\t\t\tupdate_option( $this->option, $option );\n\t\t}\n\t}\n\n\tpublic function is_network_activated(): bool {\n\t\tif ( ! function_exists( 'is_plugin_active_for_network' ) ) {\n\t\t\trequire_once ABSPATH . '/wp-admin/includes/plugin.php';\n\t\t}\n\t\treturn is_multisite() && is_plugin_active_for_network( 'meta-box/meta-box.php' );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/src/Updater/Settings.php",
    "content": "<?php\nnamespace MetaBox\\Updater;\n\nclass Settings {\n\tprivate $option;\n\tprivate $checker;\n\tprivate $fake_api_key;\n\n\tpublic function __construct( Checker $checker, Option $option ) {\n\t\t$this->checker      = $checker;\n\t\t$this->option       = $option;\n\t\t$this->fake_api_key = 'Please do not steal this license key';\n\t}\n\n\tpublic function init() {\n\t\t// Whether to enable Meta Box menu. Priority 1 makes sure it runs before adding Meta Box menu.\n\t\t$admin_menu_hook = $this->option->is_network_activated() ? 'network_admin_menu' : 'admin_menu';\n\t\tadd_action( $admin_menu_hook, [ $this, 'enable_menu' ], 1 );\n\t}\n\n\tpublic function enable_menu() {\n\t\tif ( ! $this->checker->has_extensions() ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Enable Meta Box menu only in single site.\n\t\tif ( ! $this->option->is_network_activated() ) {\n\t\t\tadd_filter( 'rwmb_admin_menu', '__return_true' );\n\t\t}\n\n\t\t// Add submenu. Priority 90 makes it the last sub-menu item.\n\t\t$admin_menu_hook = $this->option->is_network_activated() ? 'network_admin_menu' : 'admin_menu';\n\t\tadd_action( $admin_menu_hook, [ $this, 'add_settings_page' ], 90 );\n\t}\n\n\tpublic function add_settings_page() {\n\t\t$parent     = $this->option->is_network_activated() ? 'settings.php' : 'meta-box';\n\t\t$capability = $this->option->is_network_activated() ? 'manage_network_options' : 'manage_options';\n\t\t$title      = $this->option->is_network_activated() ? esc_html__( 'Meta Box License', 'meta-box' ) : esc_html__( 'License', 'meta-box' );\n\t\t$page_hook  = add_submenu_page(\n\t\t\t$parent,\n\t\t\t$title,\n\t\t\t$title,\n\t\t\t$capability,\n\t\t\t'meta-box-updater',\n\t\t\t[ $this, 'render' ]\n\t\t);\n\t\tadd_action( \"load-{$page_hook}\", [ $this, 'save' ] );\n\t}\n\n\tpublic function render() {\n\t\t?>\n\t\t<div class=\"wrap\">\n\t\t\t<h1><?php esc_html_e( 'Meta Box License', 'meta-box' ); ?></h1>\n\t\t\t<p><?php esc_html_e( 'Please enter your license key to enable automatic updates for Meta Box extensions.', 'meta-box' ); ?></p>\n\t\t\t<p>\n\t\t\t\t<?php\n\t\t\t\tprintf(\n\t\t\t\t\t// Translators: %1$s - URL to the My Account page, %2$s - URL to the pricing page.\n\t\t\t\t\twp_kses_post( __( 'To get the license key, visit the <a href=\"%1$s\" target=\"_blank\">My Account</a> page on metabox.io website. If you have not purchased any extension yet, please <a href=\"%2$s\" target=\"_blank\">get a new license here</a>.', 'meta-box' ) ),\n\t\t\t\t\t'https://elu.to/mua',\n\t\t\t\t\t'https://elu.to/mup'\n\t\t\t\t);\n\t\t\t\t?>\n\t\t\t</p>\n\n\t\t\t<form action=\"\" method=\"post\">\n\t\t\t\t<?php wp_nonce_field( 'meta-box' ); ?>\n\n\t\t\t\t<table class=\"form-table\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th scope=\"row\"><?php esc_html_e( 'License Key', 'meta-box' ); ?></th>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<?php\n\t\t\t\t\t\t\t$messages = [\n\t\t\t\t\t\t\t\t'invalid' => __( 'Your license key is <b style=\"color: #d63638\">invalid</b>.', 'meta-box' ),\n\t\t\t\t\t\t\t\t'error'   => __( 'Your license key is <b style=\"color: #d63638\">invalid</b>.', 'meta-box' ),\n\t\t\t\t\t\t\t\t'expired' => __( 'Your license key is <b style=\"color: #d63638\">expired</b>.', 'meta-box' ),\n\t\t\t\t\t\t\t\t'active'  => __( 'Your license key is <b style=\"color: #00a32a\">active</b>.', 'meta-box' ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t$status   = $this->option->get_license_status();\n\t\t\t\t\t\t\t$api_key  = 'active' === $status ? $this->fake_api_key : $this->option->get( 'api_key' );\n\t\t\t\t\t\t\t?>\n\t\t\t\t\t\t\t<input class=\"regular-text\" name=\"meta_box_updater[api_key]\" value=\"<?php echo esc_attr( $api_key ); ?>\" type=\"password\">\n\t\t\t\t\t\t\t<?php if ( isset( $messages[ $status ] ) ) : ?>\n\t\t\t\t\t\t\t\t<p class=\"description\"><?php echo wp_kses_post( $messages[ $status ] ); ?></p>\n\t\t\t\t\t\t\t<?php endif; ?>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\n\t\t\t\t<?php submit_button( __( 'Save Changes', 'meta-box' ) ); ?>\n\t\t\t</form>\n\t\t</div>\n\t\t<?php\n\t}\n\n\tpublic function save() {\n\t\t$request = rwmb_request();\n\t\tif ( ! $request->post( 'submit' ) ) {\n\t\t\treturn;\n\t\t}\n\t\tcheck_admin_referer( 'meta-box' );\n\n\t\t$option = (array) $request->post( 'meta_box_updater', [] );\n\n\t\tif ( isset( $option['api_key'] ) && $option['api_key'] === $this->fake_api_key ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$status   = 'invalid';\n\t\t$response = null;\n\t\tif ( isset( $option['api_key'] ) ) {\n\t\t\t$args     = [\n\t\t\t\t'key'   => $option['api_key'],\n\t\t\t\t'force' => true,\n\t\t\t];\n\t\t\t$response = $this->checker->request( 'status', $args );\n\t\t\t$status   = $response['status'] ?? 'invalid';\n\t\t}\n\n\t\tif ( empty( $response ) ) {\n\t\t\tadd_settings_error( '', 'mb-error', __( 'Something wrong with the connection to metabox.io. Please try again later.', 'meta-box' ) );\n\t\t} elseif ( 'active' === $status ) {\n\t\t\tadd_settings_error( '', 'mb-success', __( 'Your license is activated.', 'meta-box' ), 'updated' );\n\t\t} elseif ( 'expired' === $status ) {\n\t\t\t// Translators: %s - URL to the My Account page.\n\t\t\t$message = __( 'License expired. Please renew on the <a href=\"%s\" target=\"_blank\">My Account</a> page on metabox.io website.', 'meta-box' );\n\t\t\t$message = wp_kses_post( sprintf( $message, 'https://elu.to/mua' ) );\n\n\t\t\tadd_settings_error( '', 'mb-expired', $message );\n\t\t} else {\n\t\t\t// Translators: %1$s - URL to the My Account page, %2$s - URL to the pricing page.\n\t\t\t$message = __( 'Invalid license. Please <a href=\"%1$s\" target=\"_blank\">check again</a> or <a href=\"%2$s\" target=\"_blank\">get a new license here</a>.', 'meta-box' );\n\t\t\t$message = wp_kses_post( sprintf( $message, 'https://elu.to/mua', 'https://mup' ) );\n\n\t\t\tadd_settings_error( '', 'mb-invalid', $message );\n\t\t}\n\n\t\t$option['status'] = $status;\n\n\t\t$admin_notices_hook = $this->option->is_network_activated() ? 'network_admin_notices' : 'admin_notices';\n\t\tadd_action( $admin_notices_hook, 'settings_errors' );\n\n\t\t$this->option->update( $option );\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/autoload.php",
    "content": "<?php\n\n// autoload.php @generated by Composer\n\nif (PHP_VERSION_ID < 50600) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via \"composer self-update --2.2\". Aborting.'.PHP_EOL;\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, $err);\n        } elseif (!headers_sent()) {\n            echo $err;\n        }\n    }\n    throw new RuntimeException($err);\n}\n\nrequire_once __DIR__ . '/composer/autoload_real.php';\n\nreturn ComposerAutoloaderInitd2da1cd611bdc50ec07712a31d2880b1::getLoader();\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/ClassLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer\\Autoload;\n\n/**\n * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.\n *\n *     $loader = new \\Composer\\Autoload\\ClassLoader();\n *\n *     // register classes with namespaces\n *     $loader->add('Symfony\\Component', __DIR__.'/component');\n *     $loader->add('Symfony',           __DIR__.'/framework');\n *\n *     // activate the autoloader\n *     $loader->register();\n *\n *     // to enable searching the include path (eg. for PEAR packages)\n *     $loader->setUseIncludePath(true);\n *\n * In this example, if you try to use a class in the Symfony\\Component\n * namespace or one of its children (Symfony\\Component\\Console for instance),\n * the autoloader will first look for the class under the component/\n * directory, and it will then fallback to the framework/ directory if not\n * found before giving up.\n *\n * This class is loosely based on the Symfony UniversalClassLoader.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @see    https://www.php-fig.org/psr/psr-0/\n * @see    https://www.php-fig.org/psr/psr-4/\n */\nclass ClassLoader\n{\n    /** @var \\Closure(string):void */\n    private static $includeFile;\n\n    /** @var string|null */\n    private $vendorDir;\n\n    // PSR-4\n    /**\n     * @var array<string, array<string, int>>\n     */\n    private $prefixLengthsPsr4 = array();\n    /**\n     * @var array<string, list<string>>\n     */\n    private $prefixDirsPsr4 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr4 = array();\n\n    // PSR-0\n    /**\n     * List of PSR-0 prefixes\n     *\n     * Structured as array('F (first letter)' => array('Foo\\Bar (full prefix)' => array('path', 'path2')))\n     *\n     * @var array<string, array<string, list<string>>>\n     */\n    private $prefixesPsr0 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr0 = array();\n\n    /** @var bool */\n    private $useIncludePath = false;\n\n    /**\n     * @var array<string, string>\n     */\n    private $classMap = array();\n\n    /** @var bool */\n    private $classMapAuthoritative = false;\n\n    /**\n     * @var array<string, bool>\n     */\n    private $missingClasses = array();\n\n    /** @var string|null */\n    private $apcuPrefix;\n\n    /**\n     * @var array<string, self>\n     */\n    private static $registeredLoaders = array();\n\n    /**\n     * @param string|null $vendorDir\n     */\n    public function __construct($vendorDir = null)\n    {\n        $this->vendorDir = $vendorDir;\n        self::initializeIncludeClosure();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixes()\n    {\n        if (!empty($this->prefixesPsr0)) {\n            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));\n        }\n\n        return array();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixesPsr4()\n    {\n        return $this->prefixDirsPsr4;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirs()\n    {\n        return $this->fallbackDirsPsr0;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirsPsr4()\n    {\n        return $this->fallbackDirsPsr4;\n    }\n\n    /**\n     * @return array<string, string> Array of classname => path\n     */\n    public function getClassMap()\n    {\n        return $this->classMap;\n    }\n\n    /**\n     * @param array<string, string> $classMap Class to filename map\n     *\n     * @return void\n     */\n    public function addClassMap(array $classMap)\n    {\n        if ($this->classMap) {\n            $this->classMap = array_merge($this->classMap, $classMap);\n        } else {\n            $this->classMap = $classMap;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix, either\n     * appending or prepending to the ones previously set for this prefix.\n     *\n     * @param string              $prefix  The prefix\n     * @param list<string>|string $paths   The PSR-0 root directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @return void\n     */\n    public function add($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            if ($prepend) {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr0\n                );\n            } else {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $this->fallbackDirsPsr0,\n                    $paths\n                );\n            }\n\n            return;\n        }\n\n        $first = $prefix[0];\n        if (!isset($this->prefixesPsr0[$first][$prefix])) {\n            $this->prefixesPsr0[$first][$prefix] = $paths;\n\n            return;\n        }\n        if ($prepend) {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $paths,\n                $this->prefixesPsr0[$first][$prefix]\n            );\n        } else {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $this->prefixesPsr0[$first][$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace, either\n     * appending or prepending to the ones previously set for this namespace.\n     *\n     * @param string              $prefix  The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths   The PSR-4 base directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function addPsr4($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            // Register directories for the root namespace.\n            if ($prepend) {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr4\n                );\n            } else {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $this->fallbackDirsPsr4,\n                    $paths\n                );\n            }\n        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {\n            // Register directories for a new namespace.\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = $paths;\n        } elseif ($prepend) {\n            // Prepend directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $paths,\n                $this->prefixDirsPsr4[$prefix]\n            );\n        } else {\n            // Append directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $this->prefixDirsPsr4[$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix,\n     * replacing any others previously set for this prefix.\n     *\n     * @param string              $prefix The prefix\n     * @param list<string>|string $paths  The PSR-0 base directories\n     *\n     * @return void\n     */\n    public function set($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr0 = (array) $paths;\n        } else {\n            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace,\n     * replacing any others previously set for this namespace.\n     *\n     * @param string              $prefix The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths  The PSR-4 base directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function setPsr4($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr4 = (array) $paths;\n        } else {\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Turns on searching the include path for class files.\n     *\n     * @param bool $useIncludePath\n     *\n     * @return void\n     */\n    public function setUseIncludePath($useIncludePath)\n    {\n        $this->useIncludePath = $useIncludePath;\n    }\n\n    /**\n     * Can be used to check if the autoloader uses the include path to check\n     * for classes.\n     *\n     * @return bool\n     */\n    public function getUseIncludePath()\n    {\n        return $this->useIncludePath;\n    }\n\n    /**\n     * Turns off searching the prefix and fallback directories for classes\n     * that have not been registered with the class map.\n     *\n     * @param bool $classMapAuthoritative\n     *\n     * @return void\n     */\n    public function setClassMapAuthoritative($classMapAuthoritative)\n    {\n        $this->classMapAuthoritative = $classMapAuthoritative;\n    }\n\n    /**\n     * Should class lookup fail if not found in the current class map?\n     *\n     * @return bool\n     */\n    public function isClassMapAuthoritative()\n    {\n        return $this->classMapAuthoritative;\n    }\n\n    /**\n     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.\n     *\n     * @param string|null $apcuPrefix\n     *\n     * @return void\n     */\n    public function setApcuPrefix($apcuPrefix)\n    {\n        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;\n    }\n\n    /**\n     * The APCu prefix in use, or null if APCu caching is not enabled.\n     *\n     * @return string|null\n     */\n    public function getApcuPrefix()\n    {\n        return $this->apcuPrefix;\n    }\n\n    /**\n     * Registers this instance as an autoloader.\n     *\n     * @param bool $prepend Whether to prepend the autoloader or not\n     *\n     * @return void\n     */\n    public function register($prepend = false)\n    {\n        spl_autoload_register(array($this, 'loadClass'), true, $prepend);\n\n        if (null === $this->vendorDir) {\n            return;\n        }\n\n        if ($prepend) {\n            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;\n        } else {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n            self::$registeredLoaders[$this->vendorDir] = $this;\n        }\n    }\n\n    /**\n     * Unregisters this instance as an autoloader.\n     *\n     * @return void\n     */\n    public function unregister()\n    {\n        spl_autoload_unregister(array($this, 'loadClass'));\n\n        if (null !== $this->vendorDir) {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n        }\n    }\n\n    /**\n     * Loads the given class or interface.\n     *\n     * @param  string    $class The name of the class\n     * @return true|null True if loaded, null otherwise\n     */\n    public function loadClass($class)\n    {\n        if ($file = $this->findFile($class)) {\n            $includeFile = self::$includeFile;\n            $includeFile($file);\n\n            return true;\n        }\n\n        return null;\n    }\n\n    /**\n     * Finds the path to the file where the class is defined.\n     *\n     * @param string $class The name of the class\n     *\n     * @return string|false The path if found, false otherwise\n     */\n    public function findFile($class)\n    {\n        // class map lookup\n        if (isset($this->classMap[$class])) {\n            return $this->classMap[$class];\n        }\n        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {\n            return false;\n        }\n        if (null !== $this->apcuPrefix) {\n            $file = apcu_fetch($this->apcuPrefix.$class, $hit);\n            if ($hit) {\n                return $file;\n            }\n        }\n\n        $file = $this->findFileWithExtension($class, '.php');\n\n        // Search for Hack files if we are running on HHVM\n        if (false === $file && defined('HHVM_VERSION')) {\n            $file = $this->findFileWithExtension($class, '.hh');\n        }\n\n        if (null !== $this->apcuPrefix) {\n            apcu_add($this->apcuPrefix.$class, $file);\n        }\n\n        if (false === $file) {\n            // Remember that this class does not exist.\n            $this->missingClasses[$class] = true;\n        }\n\n        return $file;\n    }\n\n    /**\n     * Returns the currently registered loaders keyed by their corresponding vendor directories.\n     *\n     * @return array<string, self>\n     */\n    public static function getRegisteredLoaders()\n    {\n        return self::$registeredLoaders;\n    }\n\n    /**\n     * @param  string       $class\n     * @param  string       $ext\n     * @return string|false\n     */\n    private function findFileWithExtension($class, $ext)\n    {\n        // PSR-4 lookup\n        $logicalPathPsr4 = strtr($class, '\\\\', DIRECTORY_SEPARATOR) . $ext;\n\n        $first = $class[0];\n        if (isset($this->prefixLengthsPsr4[$first])) {\n            $subPath = $class;\n            while (false !== $lastPos = strrpos($subPath, '\\\\')) {\n                $subPath = substr($subPath, 0, $lastPos);\n                $search = $subPath . '\\\\';\n                if (isset($this->prefixDirsPsr4[$search])) {\n                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);\n                    foreach ($this->prefixDirsPsr4[$search] as $dir) {\n                        if (file_exists($file = $dir . $pathEnd)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-4 fallback dirs\n        foreach ($this->fallbackDirsPsr4 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 lookup\n        if (false !== $pos = strrpos($class, '\\\\')) {\n            // namespaced class name\n            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)\n                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);\n        } else {\n            // PEAR-like class name\n            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;\n        }\n\n        if (isset($this->prefixesPsr0[$first])) {\n            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {\n                if (0 === strpos($class, $prefix)) {\n                    foreach ($dirs as $dir) {\n                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-0 fallback dirs\n        foreach ($this->fallbackDirsPsr0 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 include paths.\n        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {\n            return $file;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return void\n     */\n    private static function initializeIncludeClosure()\n    {\n        if (self::$includeFile !== null) {\n            return;\n        }\n\n        /**\n         * Scope isolated include.\n         *\n         * Prevents access to $this/self from included files.\n         *\n         * @param  string $file\n         * @return void\n         */\n        self::$includeFile = \\Closure::bind(static function($file) {\n            include $file;\n        }, null, null);\n    }\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/InstalledVersions.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer;\n\nuse Composer\\Autoload\\ClassLoader;\nuse Composer\\Semver\\VersionParser;\n\n/**\n * This class is copied in every Composer installed project and available to all\n *\n * See also https://getcomposer.org/doc/07-runtime.md#installed-versions\n *\n * To require its presence, you can require `composer-runtime-api ^2.0`\n *\n * @final\n */\nclass InstalledVersions\n{\n    /**\n     * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to\n     * @internal\n     */\n    private static $selfDir = null;\n\n    /**\n     * @var mixed[]|null\n     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null\n     */\n    private static $installed;\n\n    /**\n     * @var bool\n     */\n    private static $installedIsLocalDir;\n\n    /**\n     * @var bool|null\n     */\n    private static $canGetVendors;\n\n    /**\n     * @var array[]\n     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static $installedByVendor = array();\n\n    /**\n     * Returns a list of all package names which are present, either by being installed, replaced or provided\n     *\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackages()\n    {\n        $packages = array();\n        foreach (self::getInstalled() as $installed) {\n            $packages[] = array_keys($installed['versions']);\n        }\n\n        if (1 === \\count($packages)) {\n            return $packages[0];\n        }\n\n        return array_keys(array_flip(\\call_user_func_array('array_merge', $packages)));\n    }\n\n    /**\n     * Returns a list of all package names with a specific type e.g. 'library'\n     *\n     * @param  string   $type\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackagesByType($type)\n    {\n        $packagesByType = array();\n\n        foreach (self::getInstalled() as $installed) {\n            foreach ($installed['versions'] as $name => $package) {\n                if (isset($package['type']) && $package['type'] === $type) {\n                    $packagesByType[] = $name;\n                }\n            }\n        }\n\n        return $packagesByType;\n    }\n\n    /**\n     * Checks whether the given package is installed\n     *\n     * This also returns true if the package name is provided or replaced by another package\n     *\n     * @param  string $packageName\n     * @param  bool   $includeDevRequirements\n     * @return bool\n     */\n    public static function isInstalled($packageName, $includeDevRequirements = true)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (isset($installed['versions'][$packageName])) {\n                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Checks whether the given package satisfies a version constraint\n     *\n     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:\n     *\n     *   Composer\\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')\n     *\n     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality\n     * @param  string        $packageName\n     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package\n     * @return bool\n     */\n    public static function satisfies(VersionParser $parser, $packageName, $constraint)\n    {\n        $constraint = $parser->parseConstraints((string) $constraint);\n        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));\n\n        return $provided->matches($constraint);\n    }\n\n    /**\n     * Returns a version constraint representing all the range(s) which are installed for a given package\n     *\n     * It is easier to use this via isInstalled() with the $constraint argument if you need to check\n     * whether a given version of a package is installed, and not just whether it exists\n     *\n     * @param  string $packageName\n     * @return string Version constraint usable with composer/semver\n     */\n    public static function getVersionRanges($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            $ranges = array();\n            if (isset($installed['versions'][$packageName]['pretty_version'])) {\n                $ranges[] = $installed['versions'][$packageName]['pretty_version'];\n            }\n            if (array_key_exists('aliases', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);\n            }\n            if (array_key_exists('replaced', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);\n            }\n            if (array_key_exists('provided', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);\n            }\n\n            return implode(' || ', $ranges);\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getPrettyVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['pretty_version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['pretty_version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference\n     */\n    public static function getReference($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['reference'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['reference'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.\n     */\n    public static function getInstallPath($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @return array\n     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}\n     */\n    public static function getRootPackage()\n    {\n        $installed = self::getInstalled();\n\n        return $installed[0]['root'];\n    }\n\n    /**\n     * Returns the raw installed.php data for custom implementations\n     *\n     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.\n     * @return array[]\n     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}\n     */\n    public static function getRawData()\n    {\n        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                self::$installed = include __DIR__ . '/installed.php';\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        return self::$installed;\n    }\n\n    /**\n     * Returns the raw data of all installed.php which are currently loaded for custom implementations\n     *\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    public static function getAllRawData()\n    {\n        return self::getInstalled();\n    }\n\n    /**\n     * Lets you reload the static array from another file\n     *\n     * This is only useful for complex integrations in which a project needs to use\n     * this class but then also needs to execute another project's autoloader in process,\n     * and wants to ensure both projects have access to their version of installed.php.\n     *\n     * A typical case would be PHPUnit, where it would need to make sure it reads all\n     * the data it needs from this class, then call reload() with\n     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure\n     * the project in which it runs can then also use this class safely, without\n     * interference between PHPUnit's dependencies and the project's dependencies.\n     *\n     * @param  array[] $data A vendor/composer/installed.php data set\n     * @return void\n     *\n     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data\n     */\n    public static function reload($data)\n    {\n        self::$installed = $data;\n        self::$installedByVendor = array();\n\n        // when using reload, we disable the duplicate protection to ensure that self::$installed data is\n        // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,\n        // so we have to assume it does not, and that may result in duplicate data being returned when listing\n        // all installed packages for example\n        self::$installedIsLocalDir = false;\n    }\n\n    /**\n     * @return string\n     */\n    private static function getSelfDir()\n    {\n        if (self::$selfDir === null) {\n            self::$selfDir = strtr(__DIR__, '\\\\', '/');\n        }\n\n        return self::$selfDir;\n    }\n\n    /**\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static function getInstalled()\n    {\n        if (null === self::$canGetVendors) {\n            self::$canGetVendors = method_exists('Composer\\Autoload\\ClassLoader', 'getRegisteredLoaders');\n        }\n\n        $installed = array();\n        $copiedLocalDir = false;\n\n        if (self::$canGetVendors) {\n            $selfDir = self::getSelfDir();\n            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {\n                $vendorDir = strtr($vendorDir, '\\\\', '/');\n                if (isset(self::$installedByVendor[$vendorDir])) {\n                    $installed[] = self::$installedByVendor[$vendorDir];\n                } elseif (is_file($vendorDir.'/composer/installed.php')) {\n                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                    $required = require $vendorDir.'/composer/installed.php';\n                    self::$installedByVendor[$vendorDir] = $required;\n                    $installed[] = $required;\n                    if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {\n                        self::$installed = $required;\n                        self::$installedIsLocalDir = true;\n                    }\n                }\n                if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {\n                    $copiedLocalDir = true;\n                }\n            }\n        }\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                $required = require __DIR__ . '/installed.php';\n                self::$installed = $required;\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        if (self::$installed !== array() && !$copiedLocalDir) {\n            $installed[] = self::$installed;\n        }\n\n        return $installed;\n    }\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/LICENSE",
    "content": "\nCopyright (c) Nils Adermann, Jordi Boggiano\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/autoload_classmap.php",
    "content": "<?php\n\n// autoload_classmap.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'Composer\\\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',\n);\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/autoload_namespaces.php",
    "content": "<?php\n\n// autoload_namespaces.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n);\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/autoload_psr4.php",
    "content": "<?php\n\n// autoload_psr4.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'MetaBox\\\\Support\\\\' => array($vendorDir . '/wpmetabox/support'),\n    'MetaBox\\\\' => array($baseDir . '/src'),\n);\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/autoload_real.php",
    "content": "<?php\n\n// autoload_real.php @generated by Composer\n\nclass ComposerAutoloaderInitd2da1cd611bdc50ec07712a31d2880b1\n{\n    private static $loader;\n\n    public static function loadClassLoader($class)\n    {\n        if ('Composer\\Autoload\\ClassLoader' === $class) {\n            require __DIR__ . '/ClassLoader.php';\n        }\n    }\n\n    /**\n     * @return \\Composer\\Autoload\\ClassLoader\n     */\n    public static function getLoader()\n    {\n        if (null !== self::$loader) {\n            return self::$loader;\n        }\n\n        spl_autoload_register(array('ComposerAutoloaderInitd2da1cd611bdc50ec07712a31d2880b1', 'loadClassLoader'), true, true);\n        self::$loader = $loader = new \\Composer\\Autoload\\ClassLoader(\\dirname(__DIR__));\n        spl_autoload_unregister(array('ComposerAutoloaderInitd2da1cd611bdc50ec07712a31d2880b1', 'loadClassLoader'));\n\n        require __DIR__ . '/autoload_static.php';\n        call_user_func(\\Composer\\Autoload\\ComposerStaticInitd2da1cd611bdc50ec07712a31d2880b1::getInitializer($loader));\n\n        $loader->register(true);\n\n        return $loader;\n    }\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/autoload_static.php",
    "content": "<?php\n\n// autoload_static.php @generated by Composer\n\nnamespace Composer\\Autoload;\n\nclass ComposerStaticInitd2da1cd611bdc50ec07712a31d2880b1\n{\n    public static $prefixLengthsPsr4 = array (\n        'M' => \n        array (\n            'MetaBox\\\\Support\\\\' => 16,\n            'MetaBox\\\\' => 8,\n        ),\n    );\n\n    public static $prefixDirsPsr4 = array (\n        'MetaBox\\\\Support\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/wpmetabox/support',\n        ),\n        'MetaBox\\\\' => \n        array (\n            0 => __DIR__ . '/../..' . '/src',\n        ),\n    );\n\n    public static $classMap = array (\n        'Composer\\\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',\n    );\n\n    public static function getInitializer(ClassLoader $loader)\n    {\n        return \\Closure::bind(function () use ($loader) {\n            $loader->prefixLengthsPsr4 = ComposerStaticInitd2da1cd611bdc50ec07712a31d2880b1::$prefixLengthsPsr4;\n            $loader->prefixDirsPsr4 = ComposerStaticInitd2da1cd611bdc50ec07712a31d2880b1::$prefixDirsPsr4;\n            $loader->classMap = ComposerStaticInitd2da1cd611bdc50ec07712a31d2880b1::$classMap;\n\n        }, null, ClassLoader::class);\n    }\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/installed.json",
    "content": "{\n    \"packages\": [\n        {\n            \"name\": \"wpmetabox/support\",\n            \"version\": \"dev-master\",\n            \"version_normalized\": \"dev-master\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/wpmetabox/support.git\",\n                \"reference\": \"6c392347cdb77ed133b8a4227b5ee20db89a5717\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/wpmetabox/support/zipball/6c392347cdb77ed133b8a4227b5ee20db89a5717\",\n                \"reference\": \"6c392347cdb77ed133b8a4227b5ee20db89a5717\",\n                \"shasum\": \"\"\n            },\n            \"time\": \"2025-09-12T23:29:48+00:00\",\n            \"default-branch\": true,\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"MetaBox\\\\Support\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"GPL-2.0-or-later\"\n            ],\n            \"description\": \"Helpers for Meta Box plugins\",\n            \"homepage\": \"https://metabox.io\",\n            \"support\": {\n                \"issues\": \"https://github.com/wpmetabox/support/issues\",\n                \"source\": \"https://github.com/wpmetabox/support/tree/master\"\n            },\n            \"install-path\": \"../wpmetabox/support\"\n        }\n    ],\n    \"dev\": false,\n    \"dev-package-names\": []\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/composer/installed.php",
    "content": "<?php return array(\n    'root' => array(\n        'name' => 'wpmetabox/meta-box',\n        'pretty_version' => '5.10.19',\n        'version' => '5.10.19.0',\n        'reference' => '8f9a03f119e95027a6999a9d9525509c5db0c71c',\n        'type' => 'wordpress-plugin',\n        'install_path' => __DIR__ . '/../../',\n        'aliases' => array(),\n        'dev' => false,\n    ),\n    'versions' => array(\n        'wpmetabox/meta-box' => array(\n            'pretty_version' => '5.10.19',\n            'version' => '5.10.19.0',\n            'reference' => '8f9a03f119e95027a6999a9d9525509c5db0c71c',\n            'type' => 'wordpress-plugin',\n            'install_path' => __DIR__ . '/../../',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'wpmetabox/support' => array(\n            'pretty_version' => 'dev-master',\n            'version' => 'dev-master',\n            'reference' => '6c392347cdb77ed133b8a4227b5ee20db89a5717',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../wpmetabox/support',\n            'aliases' => array(\n                0 => '9999999-dev',\n            ),\n            'dev_requirement' => false,\n        ),\n    ),\n);\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/wpmetabox/support/Arr.php",
    "content": "<?php\nnamespace MetaBox\\Support;\n\nclass Arr {\n\t/**\n\t * New array map function that accepts more params than just values.\n\t * Params: array|item, callback, other params.\n\t */\n\tpublic static function map() {\n\t\t$args     = func_get_args();\n\t\t$items    = array_shift( $args );\n\t\t$callback = array_shift( $args );\n\n\t\tif ( ! is_array( $items ) ) {\n\t\t\tarray_unshift( $args, $items );\n\t\t\treturn call_user_func_array( $callback, $args );\n\t\t}\n\n\t\treturn array_map(\n\t\t\tfunction( $item ) use ( $callback, $args ) {\n\t\t\t\tarray_unshift( $args, $item );\n\t\t\t\treturn call_user_func_array( $callback, $args );\n\t\t\t},\n\t\t\t$items\n\t\t);\n\t}\n\n\t/**\n\t * Convert a comma separated string to array.\n\t *\n\t * @param array|string $csv Comma separated string.\n\t */\n\tpublic static function from_csv( $csv ) : array {\n\t\treturn is_array( $csv ) ? $csv : array_filter( array_map( 'trim', explode( ',', $csv . ',' ) ) );\n\t}\n\n\t/**\n\t * Change array key.\n\t *\n\t * @param  array  $array Input array.\n\t * @param  string $from  From key.\n\t * @param  string $to    To key.\n\t */\n\tpublic static function change_key( &$array, $from, $to ) {\n\t\tif ( isset( $array[ $from ] ) ) {\n\t\t\t$array[ $to ] = $array[ $from ];\n\t\t}\n\t\tunset( $array[ $from ] );\n\t}\n\n\t/**\n\t * Ensure a variable is an array.\n\t */\n\tpublic static function ensure( $input ) : array {\n\t\treturn (array) $input;\n\t}\n\n\t/**\n\t * Flatten an array.\n\t * @link https://stackoverflow.com/a/1320156/371240\n\t */\n\tpublic static function flatten( array $array ) : array {\n\t\t$return = [];\n\t\tarray_walk_recursive(\n\t\t\t$array,\n\t\t\tfunction( $a ) use ( &$return ) {\n\t\t\t\t$return[] = $a;\n\t\t\t}\n\t\t);\n\t\treturn $return;\n\t}\n\n\t/**\n\t * Convert flatten collection (with dot notation) to multiple dimensional array\n\t *\n\t * @param  array $collection Collection to be flatten.\n\t * @return array\n\t */\n\tpublic static function unflatten( $collection ) {\n\t\t$collection = (array) $collection;\n\t\t$output     = [];\n\n\t\tforeach ( $collection as $key => $value ) {\n\t\t\tself::set( $output, $key, $value );\n\n\t\t\tif ( is_array( $value ) && ! strpos( $key, '.' ) ) {\n\t\t\t\t$nested         = self::unflatten( $value );\n\t\t\t\t$output[ $key ] = $nested;\n\t\t\t}\n\t\t}\n\n\t\treturn $output;\n\t}\n\n\t/**\n\t * Set array element value with dot notation.\n\t */\n\tpublic static function set( &$array, $key, $value ) {\n\t\tif ( is_null( $key ) ) {\n\t\t\t$array = $value;\n\t\t\treturn $array;\n\t\t}\n\n\t\t// Do not parse email value.\n\t\tif ( is_email( $key ) ) {\n\t\t\t$array[ $key ] = $value;\n\t\t\treturn;\n\t\t}\n\n\t\t$keys = explode( '.', $key );\n\n\t\twhile ( count( $keys ) > 1 ) {\n\t\t\t$key = array_shift( $keys );\n\n\t\t\t// If the key doesn't exist at this depth, we will just create an empty array\n\t\t\t// to hold the next value, allowing us to create the arrays to hold final\n\t\t\t// values at the correct depth. Then we'll keep digging into the array.\n\t\t\tif ( ! isset( $array[ $key ] ) || ! is_array( $array[ $key ] ) ) {\n\t\t\t\t$array[ $key ] = [];\n\t\t\t}\n\n\t\t\t$array =& $array[ $key ];\n\t\t}\n\n\t\t$array[ array_shift( $keys ) ] = $value;\n\t}\n\n\t/**\n\t * Get array element value with dot notation.\n\t */\n\tpublic static function get( $array, $key, $default = null ) {\n\t\tif ( is_null( $key ) ) {\n\t\t\treturn $array;\n\t\t}\n\n\t\t$keys = explode( '.', $key );\n\t\tforeach ( $keys as $key ) {\n\t\t\tif ( isset( $array[ $key ] ) ) {\n\t\t\t\t$array = $array[ $key ];\n\t\t\t} else {\n\t\t\t\treturn $default;\n\t\t\t}\n\t\t}\n\n\t\treturn $array;\n\t}\n\n\tpublic static function to_depth( $input, $depth ) {\n\t\t$current_depth = is_array( $input ) ? self::depth( $input ) : 0;\n\n\t\tif ( $depth < $current_depth ) {\n\t\t\twhile ( $current_depth > $depth ) {\n\t\t\t\t$input = reset( $input );\n\t\t\t\t$current_depth--;\n\t\t\t}\n\t\t} elseif ( $depth > $current_depth ) {\n\t\t\twhile ( $current_depth < $depth ) {\n\t\t\t\t$input = [ $input ];\n\t\t\t\t$current_depth++;\n\t\t\t}\n\t\t}\n\n\t\treturn $input;\n\t}\n\n\tpublic static function depth( array $array ) {\n\t\t$max_depth = 1;\n\n\t\tforeach ( $array as $key => $value ) {\n\t\t\tif ( !is_string($key) && is_array( $value ) ) {\n\t\t\t\t$depth = self::depth( $value ) + 1;\n\n\t\t\t\tif ( $depth > $max_depth ) {\n\t\t\t\t\t$max_depth = $depth;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $max_depth;\n\t}\n\n\tpublic static function remove_first( &$array, $query ) {\n\t\t$keys = explode( '.', $query );\n\t\t$key  = array_shift( $keys );\n\n\t\tif ( count( $keys ) === 0 ) {\n\t\t\tif ( is_array( $array ) && array_key_exists( $key, $array ) ) {\n\t\t\t\tunset( $array[ $key ][0] );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $key === '*' ) {\n\t\t\tforeach ( $array as $k => $v ) {\n\t\t\t\tif ( is_array( $array[ $k ] ) ) {\n\t\t\t\t\tself::remove_first( $array[ $k ], implode( '.', $keys ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $key === '' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( is_array( $array[ $key ] ) ) {\n\t\t\tself::remove_first( $array[ $key ], implode( '.', $keys ) );\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/wpmetabox/meta-box/vendor/wpmetabox/support/Data.php",
    "content": "<?php\nnamespace MetaBox\\Support;\n\nclass Data {\n\tpublic static function get_post_types(): array {\n\t\t$unsupported = self::unsupported_post_types();\n\t\t$post_types  = get_post_types( [], 'objects' );\n\t\t$post_types  = array_diff_key( $post_types, array_flip( $unsupported ) );\n\n\t\treturn $post_types;\n\t}\n\n\tpublic static function unsupported_post_types(): array {\n\t\treturn [\n\t\t\t// WordPress built-in post types.\n\t\t\t'customize_changeset',\n\t\t\t'custom_css',\n\t\t\t'nav_menu_item',\n\t\t\t'oembed_cache',\n\t\t\t'revision',\n\t\t\t'user_request',\n\t\t\t'wp_block',\n\t\t\t'wp_template',\n\t\t\t'wp_template_part',\n\t\t\t'wp_global_styles',\n\t\t\t'wp_navigation',\n\t\t\t'wp_font_family',\n\t\t\t'wp_font_face',\n\n\t\t\t// Meta Box post types.\n\t\t\t'mb-post-type',\n\t\t\t'mb-taxonomy',\n\t\t\t'mb-relationship',\n\t\t\t'mb-settings-page',\n\t\t\t'mb-views',\n\t\t\t'meta-box',\n\n\t\t\t// Elementor post types.\n\t\t\t'elementor_library',\n\t\t\t'elementor_font',\n\t\t\t'elementor_icons',\n\t\t\t'elementor_snippet',\n\t\t];\n\t}\n\n\tpublic static function get_taxonomies(): array {\n\t\t$unsupported = [\n\t\t\t'link_category',\n\t\t\t'nav_menu',\n\t\t\t'post_format',\n\t\t\t'wp_theme',\n\t\t\t'wp_template_part_area',\n\t\t\t'wp_pattern_category',\n\t\t\t'mb-views-category',\n\t\t];\n\t\t$taxonomies = get_taxonomies( [], 'objects' );\n\t\t$taxonomies = array_diff_key( $taxonomies, array_flip( $unsupported ) );\n\n\t\treturn $taxonomies;\n\t}\n\n\tpublic static function get_dashicons(): array {\n\t\treturn [\n\t\t\t'admin-appearance',\n\t\t\t'admin-collapse',\n\t\t\t'admin-comments',\n\t\t\t'admin-generic',\n\t\t\t'admin-home',\n\t\t\t'admin-links',\n\t\t\t'admin-media',\n\t\t\t'admin-network',\n\t\t\t'admin-page',\n\t\t\t'admin-plugins',\n\t\t\t'admin-post',\n\t\t\t'admin-settings',\n\t\t\t'admin-site',\n\t\t\t'admin-site-alt',\n\t\t\t'admin-site-alt2',\n\t\t\t'admin-tools',\n\t\t\t'admin-users',\n\t\t\t'admin-customizer',\n\t\t\t'admin-multisite',\n\t\t\t'album',\n\t\t\t'align-center',\n\t\t\t'align-left',\n\t\t\t'align-none',\n\t\t\t'align-right',\n\t\t\t'align-full-width',\n\t\t\t'align-pull-left',\n\t\t\t'align-pull-right',\n\t\t\t'align-wide',\n\t\t\t'analytics',\n\t\t\t'archive',\n\t\t\t'arrow-down-alt2',\n\t\t\t'arrow-down-alt',\n\t\t\t'arrow-down',\n\t\t\t'arrow-left-alt2',\n\t\t\t'arrow-left-alt',\n\t\t\t'arrow-left',\n\t\t\t'arrow-right-alt2',\n\t\t\t'arrow-right-alt',\n\t\t\t'arrow-right',\n\t\t\t'arrow-up-alt2',\n\t\t\t'arrow-up-alt',\n\t\t\t'arrow-up',\n\t\t\t'art',\n\t\t\t'awards',\n\t\t\t'amazon',\n\t\t\t'airplane',\n\t\t\t'backup',\n\t\t\t'book-alt',\n\t\t\t'book',\n\t\t\t'block-default',\n\t\t\t'button',\n\t\t\t'building',\n\t\t\t'businessman',\n\t\t\t'bell',\n\t\t\t'beer',\n\t\t\t'bank',\n\t\t\t'car',\n\t\t\t'calendar-alt',\n\t\t\t'calendar',\n\t\t\t'camera',\n\t\t\t'camera-alt',\n\t\t\t'carrot',\n\t\t\t'cart',\n\t\t\t'calculator',\n\t\t\t'category',\n\t\t\t'chart-area',\n\t\t\t'chart-bar',\n\t\t\t'chart-line',\n\t\t\t'chart-pie',\n\t\t\t'clipboard',\n\t\t\t'clock',\n\t\t\t'columns',\n\t\t\t'cover-image',\n\t\t\t'cloud',\n\t\t\t'cloud-saved',\n\t\t\t'cloud-upload',\n\t\t\t'controls-back',\n\t\t\t'controls-forward',\n\t\t\t'controls-pause',\n\t\t\t'controls-play',\n\t\t\t'controls-repeat',\n\t\t\t'controls-skipback',\n\t\t\t'controls-skipforward',\n\t\t\t'controls-volumeoff',\n\t\t\t'controls-volumeon',\n\t\t\t'coffee',\n\t\t\t'dashboard',\n\t\t\t'database-add',\n\t\t\t'database-export',\n\t\t\t'database-import',\n\t\t\t'database-remove',\n\t\t\t'database-view',\n\t\t\t'database',\n\t\t\t'desktop',\n\t\t\t'dismiss',\n\t\t\t'download',\n\t\t\t'drumstick',\n\t\t\t'ellipsis',\n\t\t\t'embed-audio',\n\t\t\t'embed-generic',\n\t\t\t'embed-photo',\n\t\t\t'embed-post',\n\t\t\t'embed-video',\n\t\t\t'editor-aligncenter',\n\t\t\t'editor-alignleft',\n\t\t\t'editor-alignright',\n\t\t\t'editor-bold',\n\t\t\t'editor-break',\n\t\t\t'editor-code',\n\t\t\t'editor-contract',\n\t\t\t'editor-customchar',\n\t\t\t'editor-distractionfree',\n\t\t\t'editor-expand',\n\t\t\t'editor-help',\n\t\t\t'editor-indent',\n\t\t\t'editor-insertmore',\n\t\t\t'editor-italic',\n\t\t\t'editor-justify',\n\t\t\t'editor-kitchensink',\n\t\t\t'editor-ol',\n\t\t\t'editor-outdent',\n\t\t\t'editor-paragraph',\n\t\t\t'editor-paste-text',\n\t\t\t'editor-paste-word',\n\t\t\t'editor-quote',\n\t\t\t'editor-removeformatting',\n\t\t\t'editor-rtl',\n\t\t\t'editor-spellcheck',\n\t\t\t'editor-strikethrough',\n\t\t\t'editor-textcolor',\n\t\t\t'editor-ul',\n\t\t\t'editor-underline',\n\t\t\t'editor-unlink',\n\t\t\t'editor-video',\n\t\t\t'edit',\n\t\t\t'edit-page',\n\t\t\t'email-alt',\n\t\t\t'email',\n\t\t\t'excerpt-view',\n\t\t\t'exerpt-view',\n\t\t\t'external',\n\t\t\t'exit',\n\t\t\t'facebook-alt',\n\t\t\t'facebook',\n\t\t\t'feedback',\n\t\t\t'flag',\n\t\t\t'format-aside',\n\t\t\t'format-audio',\n\t\t\t'format-chat',\n\t\t\t'format-gallery',\n\t\t\t'format-image',\n\t\t\t'format-links',\n\t\t\t'format-quote',\n\t\t\t'format-standard',\n\t\t\t'format-status',\n\t\t\t'format-video',\n\t\t\t'forms',\n\t\t\t'filter',\n\t\t\t'food',\n\t\t\t'fullscreen-alt',\n\t\t\t'fullscreen-exit-alt',\n\t\t\t'games',\n\t\t\t'googleplus',\n\t\t\t'google',\n\t\t\t'grid-view',\n\t\t\t'groups',\n\t\t\t'hammer',\n\t\t\t'heart',\n\t\t\t'heading',\n\t\t\t'html',\n\t\t\t'hourglass',\n\t\t\t'id-alt',\n\t\t\t'id',\n\t\t\t'info-outline',\n\t\t\t'insert-after',\n\t\t\t'insert-before',\n\t\t\t'insert',\n\t\t\t'images-alt2',\n\t\t\t'images-alt',\n\t\t\t'image-crop',\n\t\t\t'image-flip-horizontal',\n\t\t\t'image-flip-vertical',\n\t\t\t'image-rotate-left',\n\t\t\t'image-rotate-right',\n\t\t\t'index-card',\n\t\t\t'info',\n\t\t\t'leftright',\n\t\t\t'lightbulb',\n\t\t\t'list-view',\n\t\t\t'location-alt',\n\t\t\t'location',\n\t\t\t'lock',\n\t\t\t'linkedin',\n\t\t\t'marker',\n\t\t\t'media-archive',\n\t\t\t'media-audio',\n\t\t\t'media-code',\n\t\t\t'media-default',\n\t\t\t'media-document',\n\t\t\t'media-interactive',\n\t\t\t'media-spreadsheet',\n\t\t\t'media-text',\n\t\t\t'media-video',\n\t\t\t'megaphone',\n\t\t\t'menu',\n\t\t\t'menu-alt',\n\t\t\t'menu-alt2',\n\t\t\t'menu-alt3',\n\t\t\t'microphone',\n\t\t\t'migrate',\n\t\t\t'minus',\n\t\t\t'money',\n\t\t\t'money-alt',\n\t\t\t'nametag',\n\t\t\t'networking',\n\t\t\t'no-alt',\n\t\t\t'no',\n\t\t\t'open-folder',\n\t\t\t'palmtree',\n\t\t\t'performance',\n\t\t\t'phone',\n\t\t\t'playlist-audio',\n\t\t\t'playlist-video',\n\t\t\t'plus-alt',\n\t\t\t'plus',\n\t\t\t'portfolio',\n\t\t\t'post-status',\n\t\t\t'post-trash',\n\t\t\t'pressthis',\n\t\t\t'products',\n\t\t\t'plugins-checked',\n\t\t\t'pinterest',\n\t\t\t'podio',\n\t\t\t'printer',\n\t\t\t'pdf',\n\t\t\t'pets',\n\t\t\t'privacy',\n\t\t\t'randomize',\n\t\t\t'redo',\n\t\t\t'rss',\n\t\t\t'remove',\n\t\t\t'reddit',\n\t\t\t'superhero',\n\t\t\t'superhero-alt',\n\t\t\t'spotify',\n\t\t\t'schedule',\n\t\t\t'screenoptions',\n\t\t\t'search',\n\t\t\t'share1',\n\t\t\t'share-alt2',\n\t\t\t'share-alt',\n\t\t\t'share',\n\t\t\t'shield-alt',\n\t\t\t'shield',\n\t\t\t'slides',\n\t\t\t'shortcode',\n\t\t\t'smartphone',\n\t\t\t'smiley',\n\t\t\t'sort',\n\t\t\t'sos',\n\t\t\t'star-empty',\n\t\t\t'star-filled',\n\t\t\t'star-half',\n\t\t\t'store',\n\t\t\t'saved',\n\t\t\t'tablet',\n\t\t\t'twitch',\n\t\t\t'table-col-after',\n\t\t\t'table-col-before',\n\t\t\t'table-col-delete',\n\t\t\t'table-row-after',\n\t\t\t'table-row-before',\n\t\t\t'table-row-delete',\n\t\t\t'tagcloud',\n\t\t\t'tag',\n\t\t\t'testimonial',\n\t\t\t'text',\n\t\t\t'tickets-alt',\n\t\t\t'tickets',\n\t\t\t'translation',\n\t\t\t'trash',\n\t\t\t'twitter',\n\t\t\t'undo',\n\t\t\t'universal-access-alt',\n\t\t\t'universal-access',\n\t\t\t'update',\n\t\t\t'upload',\n\t\t\t'vault',\n\t\t\t'video-alt2',\n\t\t\t'video-alt3',\n\t\t\t'video-alt',\n\t\t\t'visibility',\n\t\t\t'xing',\n\t\t\t'youtube',\n\t\t\t'whatsapp',\n\t\t\t'welcome-add-page',\n\t\t\t'welcome-comments',\n\t\t\t'welcome-edit-page',\n\t\t\t'welcome-learn-more',\n\t\t\t'welcome-view-site',\n\t\t\t'welcome-widgets-menus',\n\t\t\t'welcome-write-blog',\n\t\t\t'wordpress-alt',\n\t\t\t'wordpress',\n\t\t];\n\t}\n}"
  },
  {
    "path": "wp-stateless-media.php",
    "content": "<?php\n/**\n * Plugin Name: WP-Stateless\n * Plugin URI: https://stateless.udx.io/\n * Description: Upload and serve your WordPress media files from Google Cloud Storage.\n * Author: UDX\n * Version: 4.4.1\n * Text Domain: stateless-media\n * Author URI: https://udx.io\n * License: GPLv2 or later\n * \n * Copyright 2012 - 2026 UDX ( email: info@udx.io )\n *\n */\n\nif( !function_exists( 'ud_get_stateless_media' ) ) {\n\n  /**\n   * Returns Stateless Media Instance\n   *\n   * @author Usability Dynamics, Inc.\n   * @since 0.2.0\n   * @param bool $key\n   * @param null $default\n   * @return\n   */\n  function ud_get_stateless_media( $key = false, $default = null ) {\n    $instance = \\wpCloud\\StatelessMedia\\Bootstrap::get_instance();\n    return $key ? $instance->get( $key, $default ) : $instance;\n  }\n\n}\n\nif( !function_exists( 'ud_stateless_db' ) ) {\n\n  /**\n   * Returns Stateless Media Database Object instance \n   *\n   * @author Usability Dynamics, Inc.\n   * @since 4.0.0\n   * @return \\wpCloud\\StatelessMedia\\DB\n   */\n  function ud_stateless_db() {\n    return \\wpCloud\\StatelessMedia\\DB::instance();\n  }\n\n}\n\nif( !function_exists( 'ud_check_stateless_media' ) ) {\n  /**\n   * Determines if plugin can be initialized.\n   *\n   * @author Usability Dynamics, Inc.\n   * @since 0.2.0\n   */\n  function ud_check_stateless_media() {\n    global $_ud_stateless_media_error;\n    try {\n      //** Be sure composer.json exists */\n      $file = dirname( __FILE__ ) . '/composer.json';\n      if( !file_exists( $file ) ) {\n        throw new Exception( __( 'Distributive is broken. composer.json is missed. Try to remove and upload plugin again.', 'stateless-media' ) );\n      }\n      $data = json_decode( file_get_contents( $file ), true );\n      //** Be sure PHP version is correct. */\n      if( !empty( $data[ 'require' ][ 'php' ] ) ) {\n        preg_match( '/^([><=]*)([0-9\\.]*)$/', $data[ 'require' ][ 'php' ], $matches );\n        if( !empty( $matches[1] ) && !empty( $matches[2] ) ) {\n          if( !version_compare( PHP_VERSION, $matches[2], $matches[1] ) ) {\n            throw new Exception( sprintf( __( 'Plugin requires PHP %s or higher. Your current PHP version is %s', 'stateless-media' ), $matches[2], PHP_VERSION ) );\n          }\n        }\n      }\n      //** Be sure vendor autoloader exists */\n      if ( file_exists( dirname( __FILE__ ) . '/vendor/autoload.php' ) ) {\n        require_once ( dirname( __FILE__ ) . '/vendor/autoload.php' );\n      } else {\n        throw new Exception( sprintf( __( 'Distributive is broken. %s file is missed. Try to remove and upload plugin again.', 'stateless-media' ), dirname( __FILE__ ) . '/vendor/autoload.php' ) );\n      }\n      //** Be sure our Bootstrap class exists */\n      if( !class_exists( '\\wpCloud\\StatelessMedia\\Bootstrap' ) ) {\n        throw new Exception( __( 'Distributive is broken. Plugin loader is not available. Try to remove and upload plugin again.', 'stateless-media' ) );\n      }\n\n      // Include metabox plugin\n      require_once(  dirname( __FILE__ ) . '/vendor/wpmetabox/meta-box/meta-box.php' );\n\n      // Include metabox tabs addon\n      require_once(  dirname( __FILE__ ) . '/lib/meta-box-tabs/meta-box-tabs.php' );\n    } catch( Exception $e ) {\n      $_ud_stateless_media_error = $e->getMessage();\n      return false;\n    }\n    return true;\n  }\n\n}\n\nif( !function_exists( 'ud_stateless_media_message' ) ) {\n  /**\n   * Renders admin notes in case there are errors on plugin init\n   *\n   * @author Usability Dynamics, Inc.\n   * @since 1.0.0\n   */\n  function ud_stateless_media_message() {\n    global $_ud_stateless_media_error;\n    if( !empty( $_ud_stateless_media_error ) ) {\n      $message = sprintf( __( '<p><b>%s</b> can not be initialized. %s</p>', 'stateless-media' ), 'Stateless Media', $_ud_stateless_media_error );\n      echo '<div class=\"error fade\" style=\"padding:11px;\">' . $message . '</div>';\n    }\n  }\n  add_action( 'admin_notices', 'ud_stateless_media_message' );\n}\n\nif( ud_check_stateless_media() ) {\n  //** Initialize. */\n  ud_get_stateless_media();\n  ud_stateless_db();\n}\n"
  }
]